From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Mattias Ellert To: git-commits@fedoraproject.org Subject: [rpms/gsi-openssh] rawhide: Based on openssh-10.5p1-1.fc45 Date: Tue, 22 Sep 2026 19:58:25 GMT Message-ID: <179010710580.1.15878185290337228424.rpms-gsi-openssh-fd9f3fdaabca@fedoraproject.org> List-ID: X-Git-Repo: rpms/gsi-openssh X-Git-Branch: rawhide X-Git-Rev: fd9f3fdaabca4133c00c2a2dfa3fa713f425f1f1 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZ3NpLW9wZW5zc2gK QnJhbmNoIDogcmF3aGlkZQpDb21taXQgOiBmZDlmM2ZkYWFiY2E0MTMzYzAwYzJhMmRmYTNmYTcx M2Y0MjVmMWYxCkF1dGhvciA6IE1hdHRpYXMgRWxsZXJ0IDxtYXR0aWFzLmVsbGVydEBwaHlzaWNz LnV1LnNlPgpEYXRlICAgOiAyMDI2LTA5LTIyVDAxOjA0OjMzKzAyOjAwClN0YXRzICA6ICsyNzUz My8tMjc4MzEgaW4gNzcgZmlsZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0 Lm9yZy9ycG1zL2dzaS1vcGVuc3NoL2MvZmQ5ZjNmZGFhYmNhNDEzM2MwMGMyYTJkZmEzZmE3MTNm NDI1ZjFmMT9icmFuY2g9cmF3aGlkZQoKTG9nOgpCYXNlZCBvbiBvcGVuc3NoLTEwLjVwMS0xLmZj NDUKCi0tLQpkaWZmIC0tZ2l0IGEvMDAwMS1BZGQtU0VMaW51eC1yb2xlLWFuZC1NTFMtTXVsdGkt TGV2ZWwtU2VjdXJpdHktc3VwcG9yLnBhdGNoIGIvMDAwMS1BZGQtU0VMaW51eC1yb2xlLWFuZC1N TFMtTXVsdGktTGV2ZWwtU2VjdXJpdHktc3VwcG9yLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBiYjY0ZWRiLi4wMDAwMDAwCi0tLSBhLzAwMDEtQWRkLVNFTGludXgtcm9sZS1h bmQtTUxTLU11bHRpLUxldmVsLVNlY3VyaXR5LXN1cHBvci5wYXRjaAorKysgL2Rldi9udWxsCkBA IC0xLDQxNiArMCwwIEBACi1Gcm9tIGNkYjIxZTU0NWZmZGU5YjIzN2ZhOWFiN2JlOGUzMmI3OGZm YzAwYmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8 YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDEzIEFwciAyMDI2IDE0OjA2OjMyICswMjAw Ci1TdWJqZWN0OiBbUEFUQ0ggMDEvNTRdIEFkZCBTRUxpbnV4IHJvbGUgYW5kIE1MUyAoTXVsdGkt TGV2ZWwgU2VjdXJpdHkpIHN1cHBvcnQKLQotb3BlbnNzaC03LjhwMS1yb2xlLW1scwotCi1BZGQg c3VwcG9ydCBmb3IgU0VMaW51eCByb2xlLWJhc2VkIGFjY2VzcyBjb250cm9sIGFuZCBNdWx0aS1M ZXZlbAotU2VjdXJpdHkgKE1MUykgYnkgYWxsb3dpbmcgdXNlcnMgdG8gc3BlY2lmeSB0aGVpciBy b2xlIGFzIHBhcnQgb2YgdGhlCi11c2VybmFtZSBpbiB0aGUgZm9ybWF0IHVzZXIvcm9sZS4KLQot Q2hhbmdlczoKLS0gYXV0aC5oOiBBZGQgcm9sZSBmaWVsZCB0byBBdXRoY3R4dCBzdHJ1Y3R1cmUK LS0gYXV0aDIuYzogUGFyc2Ugcm9sZSBmcm9tIHVzZXJuYW1lIGFuZCBpbmZvcm0gbW9uaXRvciBw cm9jZXNzCi0tIGF1dGgyLWdzcy5jOiBJbmNsdWRlIHJvbGUgaW4gR1NTQVBJIE1JQyBhdXRoZW50 aWNhdGlvbgotLSBhdXRoMi1ob3N0YmFzZWQuYzogSW5jbHVkZSByb2xlIGluIGhvc3RiYXNlZCBh dXRoZW50aWNhdGlvbiBzaWduYXR1cmUKLS0gYXV0aDItcHVia2V5LmM6IEluY2x1ZGUgcm9sZSBp biBwdWJrZXkgYXV0aGVudGljYXRpb24gdXNlcnN0eWxlCi0tIG1vbml0b3IuYzogQWRkIG1tX2Fu c3dlcl9hdXRocm9sZSgpIGFuZCBoYW5kbGUgcm9sZSBpbiBhdXRoZW50aWNhdGlvbgotICBibG9i IHZhbGlkYXRpb24KLS0gbW9uaXRvcl93cmFwLmM6IEFkZCBtbV9pbmZvcm1fYXV0aHJvbGUoKSBm b3IgcHJpdmlsZWdlIHNlcGFyYXRpb24KLS0gbWlzYy5jOiBVcGRhdGUgY29sb24oKSB0byBoYW5k bGUgL3JvbGUgc3ludGF4IGluIGZpbGUgcGF0aHMKLQotQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBT b25uZXQgNC41IDxub3JlcGx5QGFudGhyb3BpYy5jb20+Ci0tLS0KLSBhdXRoLmggICAgICAgICAg ICB8ICAzICsrKwotIGF1dGgyLWdzcy5jICAgICAgIHwgMTEgKysrKysrKysrKy0KLSBhdXRoMi1o b3N0YmFzZWQuYyB8ICA5ICsrKysrKysrKwotIGF1dGgyLXB1YmtleS5jICAgIHwgMTkgKysrKysr KysrKysrKysrLS0tLQotIGF1dGgyLmMgICAgICAgICAgIHwgMTQgKysrKysrKysrKysrKysKLSBt aXNjLmMgICAgICAgICAgICB8IDE4ICsrKysrKysrKysrKysrKysrLQotIG1vbml0b3IuYyAgICAg ICAgIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQotIG1vbml0b3Iu aCAgICAgICAgIHwgIDQgKysrKwotIG1vbml0b3Jfd3JhcC5jICAgIHwgMjEgKysrKysrKysrKysr KysrKysrKysrCi0gbW9uaXRvcl93cmFwLmggICAgfCAgMyArKysKLSAxMCBmaWxlcyBjaGFuZ2Vk LCAxMzEgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2F1dGgu aCBiL2F1dGguaAotaW5kZXggNjM0YTg0YWE4Li4zMmVlM2NiZjQgMTAwNjQ0Ci0tLS0gYS9hdXRo LmgKLSsrKyBiL2F1dGguaAotQEAgLTY1LDYgKzY1LDkgQEAgc3RydWN0IEF1dGhjdHh0IHsKLSAJ Y2hhcgkJKnNlcnZpY2U7Ci0gCXN0cnVjdCBwYXNzd2QJKnB3OwkJLyogc2V0IGlmICd2YWxpZCcg Ki8KLSAJY2hhcgkJKnN0eWxlOwotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJY2hhcgkJKnJvbGU7 Ci0rI2VuZGlmCi0gCi0gCS8qIE1ldGhvZCBsaXN0cyBmb3IgbXVsdGlwbGUgYXV0aGVudGljYXRp b24gKi8KLSAJY2hhcgkJKiphdXRoX21ldGhvZHM7CS8qIG1vZGlmaWVkIGZyb20gc2VydmVyIGNv bmZpZyAqLwotZGlmZiAtLWdpdCBhL2F1dGgyLWdzcy5jIGIvYXV0aDItZ3NzLmMKLWluZGV4IDA1 MzU0ODUyNy4uYjM4MGRjMTE3IDEwMDY0NAotLS0tIGEvYXV0aDItZ3NzLmMKLSsrKyBiL2F1dGgy LWdzcy5jCi1AQCAtMjg0LDYgKzI4NCw3IEBAIGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVp bnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKLSAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3No LT5hdXRoY3R4dDsKLSAJR3NzY3R4dCAqZ3NzY3R4dDsKLSAJaW50IHIsIGF1dGhlbnRpY2F0ZWQg PSAwOwotKwljaGFyICptaWN1c2VyOwotIAlzdHJ1Y3Qgc3NoYnVmICpiOwotIAlnc3NfYnVmZmVy X2Rlc2MgbWljLCBnc3NidWY7Ci0gCXVfY2hhciAqcDsKLUBAIC0zMDAsNyArMzAxLDEzIEBAIGlu cHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkK LSAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0gCW1pYy52YWx1ZSA9IHA7Ci0gCW1p Yy5sZW5ndGggPSBsZW47Ci0tCXNzaF9nc3NhcGlfYnVpbGRtaWMoYiwgYXV0aGN0eHQtPnVzZXIs IGF1dGhjdHh0LT5zZXJ2aWNlLAotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJaWYgKGF1dGhjdHh0 LT5yb2xlICYmIGF1dGhjdHh0LT5yb2xlWzBdICE9IDApCi0rCQl4YXNwcmludGYoJm1pY3VzZXIs ICIlcy8lcyIsIGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+cm9sZSk7Ci0rCWVsc2UKLSsjZW5k aWYKLSsJCW1pY3VzZXIgPSBhdXRoY3R4dC0+dXNlcjsKLSsJc3NoX2dzc2FwaV9idWlsZG1pYyhi LCBtaWN1c2VyLCBhdXRoY3R4dC0+c2VydmljZSwKLSAJICAgICJnc3NhcGktd2l0aC1taWMiLCBz c2gtPmtleC0+c2Vzc2lvbl9pZCk7Ci0gCi0gCWlmICgoZ3NzYnVmLnZhbHVlID0gc3NoYnVmX211 dGFibGVfcHRyKGIpKSA9PSBOVUxMKQotQEAgLTMxMyw2ICszMjAsOCBAQCBpbnB1dF9nc3NhcGlf bWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCQlsb2dpdCgi R1NTQVBJIE1JQyBjaGVjayBmYWlsZWQiKTsKLSAKLSAJc3NoYnVmX2ZyZWUoYik7Ci0rCWlmICht aWN1c2VyICE9IGF1dGhjdHh0LT51c2VyKQotKwkJZnJlZShtaWN1c2VyKTsKLSAJZnJlZShtaWMu dmFsdWUpOwotIAotIAlhdXRoY3R4dC0+cG9zdHBvbmVkID0gMDsKLWRpZmYgLS1naXQgYS9hdXRo Mi1ob3N0YmFzZWQuYyBiL2F1dGgyLWhvc3RiYXNlZC5jCi1pbmRleCA4YTFhY2RlYzMuLmEyODcw OTFlYyAxMDA2NDQKLS0tLSBhL2F1dGgyLWhvc3RiYXNlZC5jCi0rKysgYi9hdXRoMi1ob3N0YmFz ZWQuYwotQEAgLTEzMCw3ICsxMzAsMTYgQEAgdXNlcmF1dGhfaG9zdGJhc2VkKHN0cnVjdCBzc2gg KnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQotIAkvKiByZWNvbnN0cnVjdCBwYWNrZXQgKi8KLSAJ aWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmdiKGIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKSkgIT0g MCB8fAotIAkgICAgKHIgPSBzc2hidWZfcHV0X3U4KGIsIFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVF U1QpKSAhPSAwIHx8Ci0rI2lmZGVmIFdJVEhfU0VMSU5VWAotKwkgICAgKGF1dGhjdHh0LT5yb2xl Ci0rCSAgICA/ICggKHIgPSBzc2hidWZfcHV0X3UzMihiLCBzdHJsZW4oYXV0aGN0eHQtPnVzZXIp K3N0cmxlbihhdXRoY3R4dC0+cm9sZSkrMSkpICE9IDAgfHwKLSsJICAgICAgICAociA9IHNzaGJ1 Zl9wdXQoYiwgYXV0aGN0eHQtPnVzZXIsIHN0cmxlbihhdXRoY3R4dC0+dXNlcikpKSAhPSAwIHx8 Ci0rCSAgICAgICAgKHIgPSBzc2hidWZfcHV0X3U4KGIsICcvJykgIT0gMCkgfHwKLSsJICAgICAg ICAociA9IHNzaGJ1Zl9wdXQoYiwgYXV0aGN0eHQtPnJvbGUsIHN0cmxlbihhdXRoY3R4dC0+cm9s ZSkpKSAhPSAwKQotKwkgICAgOiAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCBhdXRoY3R4dC0+ dXNlcikpICE9IDApIHx8Ci0rI2Vsc2UKLSAJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKGIs IGF1dGhjdHh0LT51c2VyKSkgIT0gMCB8fAotKyNlbmRpZgotIAkgICAgKHIgPSBzc2hidWZfcHV0 X2NzdHJpbmcoYiwgYXV0aGN0eHQtPnNlcnZpY2UpKSAhPSAwIHx8Ci0gCSAgICAociA9IHNzaGJ1 Zl9wdXRfY3N0cmluZyhiLCBtZXRob2QpKSAhPSAwIHx8Ci0gCSAgICAociA9IHNzaGJ1Zl9wdXRf c3RyaW5nKGIsIHBrYWxnLCBhbGVuKSkgIT0gMCB8fAotZGlmZiAtLWdpdCBhL2F1dGgyLXB1Ymtl eS5jIGIvYXV0aDItcHVia2V5LmMKLWluZGV4IGU0NDZlZjQxMi4uMzE5ZTQyYjJiIDEwMDY0NAot LS0tIGEvYXV0aDItcHVia2V5LmMKLSsrKyBiL2F1dGgyLXB1YmtleS5jCi1AQCAtNzEsNiArNzEs OCBAQAotIAotIC8qIGltcG9ydCAqLwotIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0r ZXh0ZXJuIGludCBpbmV0ZF9mbGFnOwotK2V4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0Owot IGV4dGVybiBzdHJ1Y3QgYXV0aG1ldGhvZF9jZmcgbWV0aG9kY2ZnX3B1YmtleTsKLSAKLSBzdGF0 aWMgY2hhciAqCi1AQCAtMjAxLDkgKzIwMywxNiBAQCB1c2VyYXV0aF9wdWJrZXkoc3RydWN0IHNz aCAqc3NoLCBjb25zdCBjaGFyICptZXRob2QpCi0gCQkJZ290byBkb25lOwotIAkJfQotIAkJLyog cmVjb25zdHJ1Y3QgcGFja2V0ICovCi0tCQl4YXNwcmludGYoJnVzZXJzdHlsZSwgIiVzJXMlcyIs IGF1dGhjdHh0LT51c2VyLAotKwkJeGFzcHJpbnRmKCZ1c2Vyc3R5bGUsICIlcyVzJXMlcyVzIiwg YXV0aGN0eHQtPnVzZXIsCi0gCQkgICAgYXV0aGN0eHQtPnN0eWxlID8gIjoiIDogIiIsCi0tCQkg ICAgYXV0aGN0eHQtPnN0eWxlID8gYXV0aGN0eHQtPnN0eWxlIDogIiIpOwotKwkJICAgIGF1dGhj dHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHlsZSA6ICIiLAotKyNpZmRlZiBXSVRIX1NFTElOVVgK LSsJCSAgICBhdXRoY3R4dC0+cm9sZSA/ICIvIiA6ICIiLAotKwkJICAgIGF1dGhjdHh0LT5yb2xl ID8gYXV0aGN0eHQtPnJvbGUgOiAiIgotKyNlbHNlCi0rCQkgICAgIiIsICIiCi0rI2VuZGlmCi0r CQkgICAgKTsKLSAJCWlmICgociA9IHNzaGJ1Zl9wdXRfdTgoYiwgU1NIMl9NU0dfVVNFUkFVVEhf UkVRVUVTVCkpICE9IDAgfHwKLSAJCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCB1c2Vy c3R5bGUpKSAhPSAwIHx8Ci0gCQkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgYXV0aGN0 eHQtPnNlcnZpY2UpKSAhPSAwIHx8Ci1AQCAtNDczLDcgKzQ4Miw4IEBAIG1hdGNoX3ByaW5jaXBh bHNfY29tbWFuZChzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICpr ZXksCi0gCWlmICgocGlkID0gc3VicHJvY2VzcygiQXV0aG9yaXplZFByaW5jaXBhbHNDb21tYW5k IiwgY29tbWFuZCwKLSAJICAgIGFjLCBhdiwgJmYsCi0gCSAgICBTU0hfU1VCUFJPQ0VTU19TVERP VVRfQ0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19TVERFUlJfRElTQ0FSRCwKLS0JICAgIHJ1bmFzX3B3 LCB0ZW1wb3JhcmlseV91c2VfdWlkLCByZXN0b3JlX3VpZCkpID09IDApCi0rCSAgICBydW5hc19w dywgdGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQsCi0rCSAgICBpbmV0ZF9mbGFnLCB0 aGVfYXV0aGN0eHQpKSA9PSAwKQotIAkJZ290byBvdXQ7Ci0gCi0gCXVpZF9zd2FwcGVkID0gMTsK LUBAIC03NDksNyArNzU5LDggQEAgdXNlcl9rZXlfY29tbWFuZF9hbGxvd2VkMihzdHJ1Y3QgcGFz c3dkICp1c2VyX3B3LCBzdHJ1Y3Qgc3Noa2V5ICprZXksCi0gCWlmICgocGlkID0gc3VicHJvY2Vz cygiQXV0aG9yaXplZEtleXNDb21tYW5kIiwgY29tbWFuZCwKLSAJICAgIGFjLCBhdiwgJmYsCi0g CSAgICBTU0hfU1VCUFJPQ0VTU19TVERPVVRfQ0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19TVERFUlJf RElTQ0FSRCwKLS0JICAgIHJ1bmFzX3B3LCB0ZW1wb3JhcmlseV91c2VfdWlkLCByZXN0b3JlX3Vp ZCkpID09IDApCi0rCSAgICBydW5hc19wdywgdGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91 aWQsCi0rCSAgICBpbmV0ZF9mbGFnLCB0aGVfYXV0aGN0eHQpKSA9PSAwKQotIAkJZ290byBvdXQ7 Ci0gCi0gCXVpZF9zd2FwcGVkID0gMTsKLWRpZmYgLS1naXQgYS9hdXRoMi5jIGIvYXV0aDIuYwot aW5kZXggM2ExNjgyNzQ2Li5iZmQ0MjVlYWIgMTAwNjQ0Ci0tLS0gYS9hdXRoMi5jCi0rKysgYi9h dXRoMi5jCi1AQCAtMjcxLDYgKzI3MSw5IEBAIGlucHV0X3VzZXJhdXRoX3JlcXVlc3QoaW50IHR5 cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQotIAlBdXRoY3R4dCAqYXV0aGN0eHQg PSBzc2gtPmF1dGhjdHh0OwotIAlBdXRobWV0aG9kICptID0gTlVMTDsKLSAJY2hhciAqdXNlciA9 IE5VTEwsICpzZXJ2aWNlID0gTlVMTCwgKm1ldGhvZCA9IE5VTEwsICpzdHlsZSA9IE5VTEw7Ci0r I2lmZGVmIFdJVEhfU0VMSU5VWAotKwljaGFyICpyb2xlID0gTlVMTDsKLSsjZW5kaWYKLSAJaW50 IHIsIGF1dGhlbnRpY2F0ZWQgPSAwOwotIAlkb3VibGUgdHN0YXJ0ID0gbW9ub3RpbWVfZG91Ymxl KCk7Ci0gCi1AQCAtMjg0LDYgKzI4NywxMSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0 eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSAJZGVidWcoInVzZXJhdXRoLXJl cXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMiLCB1c2VyLCBzZXJ2aWNlLCBt ZXRob2QpOwotIAlkZWJ1ZygiYXR0ZW1wdCAlZCBmYWlsdXJlcyAlZCIsIGF1dGhjdHh0LT5hdHRl bXB0LCBhdXRoY3R4dC0+ZmFpbHVyZXMpOwotIAotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJaWYg KChyb2xlID0gc3RyY2hyKHVzZXIsICcvJykpICE9IE5VTEwpCi0rCQkqcm9sZSsrID0gMDsKLSsj ZW5kaWYKLSsKLSAJaWYgKChzdHlsZSA9IHN0cmNocih1c2VyLCAnOicpKSAhPSBOVUxMKQotIAkJ KnN0eWxlKysgPSAwOwotIAotQEAgLTI5NSw2ICszMDMsOSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1 ZXN0KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSAJCWF1dGhjdHh0 LT51c2VyID0geHN0cmR1cCh1c2VyKTsKLSAJCWF1dGhjdHh0LT5zZXJ2aWNlID0geHN0cmR1cChz ZXJ2aWNlKTsKLSAJCWF1dGhjdHh0LT5zdHlsZSA9IHN0eWxlID8geHN0cmR1cChzdHlsZSkgOiBO VUxMOwotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJCWF1dGhjdHh0LT5yb2xlID0gcm9sZSA/IHhz dHJkdXAocm9sZSkgOiBOVUxMOwotKyNlbmRpZgotIAkJaWYgKGF1dGhjdHh0LT5wdyAmJiBzdHJj bXAoc2VydmljZSwgInNzaC1jb25uZWN0aW9uIik9PTApIHsKLSAJCQlhdXRoY3R4dC0+dmFsaWQg PSAxOwotIAkJCWRlYnVnMl9mKCJzZXR0aW5nIHVwIGF1dGhjdHh0IGZvciAlcyIsIHVzZXIpOwot QEAgLTMxNCw2ICszMjUsOSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50 MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSAJCSAgICBhdXRoY3R4dC0+dmFsaWQgPyAiYXV0 aGVudGljYXRpbmcgIiA6ICJpbnZhbGlkICIsIHVzZXIpOwotIAkJc2V0cHJvY3RpdGxlKCIlcyBb bmV0XSIsIGF1dGhjdHh0LT52YWxpZCA/IHVzZXIgOiAidW5rbm93biIpOwotIAkJbW1faW5mb3Jt X2F1dGhzZXJ2KHNlcnZpY2UsIHN0eWxlKTsKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rICAgICAg ICAgCW1tX2luZm9ybV9hdXRocm9sZShyb2xlKTsKLSsjZW5kaWYKLSAJCXVzZXJhdXRoX2Jhbm5l cihzc2gpOwotIAkJaWYgKChyID0ga2V4X3NlcnZlcl91cGRhdGVfZXh0X2luZm8oc3NoKSkgIT0g MCkKLSAJCQlmYXRhbF9mcihyLCAia2V4X3NlcnZlcl91cGRhdGVfZXh0X2luZm8gZmFpbGVkIik7 Ci1kaWZmIC0tZ2l0IGEvbWlzYy5jIGIvbWlzYy5jCi1pbmRleCBlZDNlOWQzMTQuLmU5NmZhOGQ2 MSAxMDA2NDQKLS0tLSBhL21pc2MuYwotKysrIGIvbWlzYy5jCi1AQCAtODY5LDYgKzg2OSw3IEBA IGNoYXIgKgotIGNvbG9uKGNoYXIgKmNwKQotIHsKLSAJaW50IGZsYWcgPSAwOwotKwlpbnQgc3Rh cnQgPSAxOwotIAotIAlpZiAoKmNwID09ICc6JykJCS8qIExlYWRpbmcgY29sb24gaXMgcGFydCBv ZiBmaWxlIG5hbWUuICovCi0gCQlyZXR1cm4gTlVMTDsKLUBAIC04ODQsNiArODg1LDEzIEBAIGNv bG9uKGNoYXIgKmNwKQotIAkJCXJldHVybiAoY3ApOwotIAkJaWYgKCpjcCA9PSAnLycpCi0gCQkJ cmV0dXJuIE5VTEw7Ci0rCQlpZiAoc3RhcnQpIHsKLSsJCS8qIFNsYXNoIG9uIGJlZ2lubmluZyBv ciBhZnRlciBkb3RzIG9ubHkgZGVub3RlcyBmaWxlIG5hbWUuICovCi0rCQkJaWYgKCpjcCA9PSAn LycpCi0rCQkJCXJldHVybiAoMCk7Ci0rCQkJaWYgKCpjcCAhPSAnLicpCi0rCQkJCXN0YXJ0ID0g MDsKLSsJCX0KLSAJfQotIAlyZXR1cm4gTlVMTDsKLSB9Ci1AQCAtMjgyOCw3ICsyODM2LDggQEAg c3RkZmRfZGV2bnVsbChpbnQgZG9fc3RkaW4sIGludCBkb19zdGRvdXQsIGludCBkb19zdGRlcnIp Ci0gcGlkX3QKLSBzdWJwcm9jZXNzKGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqY29tbWFu ZCwKLSAgICAgaW50IGFjLCBjaGFyICoqYXYsIEZJTEUgKipjaGlsZCwgdV9pbnQgZmxhZ3MsCi0t ICAgIHN0cnVjdCBwYXNzd2QgKnB3LCBwcml2ZHJvcF9mbiAqZHJvcF9wcml2cywgcHJpdnJlc3Rv cmVfZm4gKnJlc3RvcmVfcHJpdnMpCi0rICAgIHN0cnVjdCBwYXNzd2QgKnB3LCBwcml2ZHJvcF9m biAqZHJvcF9wcml2cywKLSsgICAgcHJpdnJlc3RvcmVfZm4gKnJlc3RvcmVfcHJpdnMsIGludCBp bmV0ZCwgdm9pZCAqdGhlX2F1dGhjdHh0KQotIHsKLSAJRklMRSAqZiA9IE5VTEw7Ci0gCXN0cnVj dCBzdGF0IHN0OwotQEAgLTI5NjEsNiArMjk3MCwxMyBAQCBzdWJwcm9jZXNzKGNvbnN0IGNoYXIg KnRhZywgY29uc3QgY2hhciAqY29tbWFuZCwKLSAJCQllcnJvcigiJXM6IGR1cDI6ICVzIiwgdGFn LCBzdHJlcnJvcihlcnJubykpOwotIAkJCV9leGl0KDEpOwotIAkJfQotKyNpZmRlZiBXSVRIX1NF TElOVVgKLSsJCWlmIChzc2hkX3NlbGludXhfc2V0dXBfZW52X3ZhcmlhYmxlcyhpbmV0ZCwgdGhl X2F1dGhjdHh0KSA8IDApIHsKLSsJCQllcnJvciAoImZhaWxlZCB0byBjb3B5IGVudmlyb25tZW50 OiAgJXMiLAotKwkJCSAgICBzdHJlcnJvcihlcnJubykpOwotKwkJCV9leGl0KDEyNyk7Ci0rCQl9 Ci0rI2VuZGlmCi0gCQlpZiAoZW52ICE9IE5VTEwpCi0gCQkJZXhlY3ZlKGF2WzBdLCBhdiwgZW52 KTsKLSAJCWVsc2UKLWRpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKLWluZGV4IDlk NjY3MmJiNi4uMWU0MWRmYTUzIDEwMDY0NAotLS0tIGEvbW9uaXRvci5jCi0rKysgYi9tb25pdG9y LmMKLUBAIC0xMTEsNiArMTExLDkgQEAgaW50IG1tX2Fuc3dlcl9zaWduKHN0cnVjdCBzc2ggKiwg aW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJfcHduYW1hbGxvdyhzdHJ1Y3Qg c3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKLSBpbnQgbW1fYW5zd2VyX2F1dGgyX3JlYWRf YmFubmVyKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3 ZXJfYXV0aHNlcnYoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0rI2lmZGVm IFdJVEhfU0VMSU5VWAotK2ludCBtbV9hbnN3ZXJfYXV0aHJvbGUoc3RydWN0IHNzaCAqLCBpbnQs IHN0cnVjdCBzc2hidWYgKik7Ci0rI2VuZGlmCi0gaW50IG1tX2Fuc3dlcl9hdXRocGFzc3dvcmQo c3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1tX2Fuc3dlcl9ic2Rh dXRocXVlcnkoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1tX2Fu c3dlcl9ic2RhdXRocmVzcG9uZChzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsK LUBAIC0xODgsNiArMTkxLDkgQEAgc3RydWN0IG1vbl90YWJsZSBtb25fZGlzcGF0Y2hfcHJvdG8y MFtdID0gewotICAgICB7TU9OSVRPUl9SRVFfU0lHTiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zaWdu fSwKLSAgICAge01PTklUT1JfUkVRX1BXTkFNLCBNT05fT05DRSwgbW1fYW5zd2VyX3B3bmFtYWxs b3d9LAotICAgICB7TU9OSVRPUl9SRVFfQVVUSFNFUlYsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0 aHNlcnZ9LAotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsgICAge01PTklUT1JfUkVRX0FVVEhST0xF LCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGhyb2xlfSwKLSsjZW5kaWYKLSAgICAge01PTklUT1Jf UkVRX0FVVEgyX1JFQURfQkFOTkVSLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFu bmVyfSwKLSAgICAge01PTklUT1JfUkVRX0FVVEhQQVNTV09SRCwgTU9OX0FVVEgsIG1tX2Fuc3dl cl9hdXRocGFzc3dvcmR9LAotICNpZmRlZiBVU0VfUEFNCi1AQCAtOTQ2LDYgKzk1Miw5IEBAIG1t X2Fuc3dlcl9wd25hbWFsbG93KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hi dWYgKm0pCi0gCi0gCS8qIEFsbG93IHNlcnZpY2Uvc3R5bGUgaW5mb3JtYXRpb24gb24gdGhlIGF1 dGggY29udGV4dCAqLwotIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVR X0FVVEhTRVJWLCAxKTsKLSsjaWZkZWYgV0lUSF9TRUxJTlVYCi0rCW1vbml0b3JfcGVybWl0KG1v bl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfQVVUSFJPTEUsIDEpOwotKyNlbmRpZgotIAltb25pdG9y X3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0FVVEgyX1JFQURfQkFOTkVSLCAxKTsK LSAKLSAjaWZkZWYgVVNFX1BBTQotQEAgLTEwMjAsNiArMTAyOSwyNiBAQCBrZXlfYmFzZV90eXBl X21hdGNoKGNvbnN0IGNoYXIgKm1ldGhvZCwgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAotIAly ZXR1cm4gZm91bmQ7Ci0gfQotIAotKyNpZmRlZiBXSVRIX1NFTElOVVgKLStpbnQKLSttbV9hbnN3 ZXJfYXV0aHJvbGUoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkK LSt7Ci0rCWludCByOwotKwltb25pdG9yX3Blcm1pdF9hdXRoZW50aWNhdGlvbnMoMSk7Ci0rCi0r CWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhtLCAmYXV0aGN0eHQtPnJvbGUsIE5VTEwpKSAh PSAwKQotKwkJZmF0YWxfZigiYnVmZmVyIGVycm9yOiAlcyIsIHNzaF9lcnIocikpOwotKwlkZWJ1 ZzNfZigicm9sZT0lcyIsIGF1dGhjdHh0LT5yb2xlKTsKLSsKLSsJaWYgKHN0cmxlbihhdXRoY3R4 dC0+cm9sZSkgPT0gMCkgewotKwkJZnJlZShhdXRoY3R4dC0+cm9sZSk7Ci0rCQlhdXRoY3R4dC0+ cm9sZSA9IE5VTEw7Ci0rCX0KLSsKLSsJcmV0dXJuICgwKTsKLSt9Ci0rI2VuZGlmCi0rCi0gaW50 Ci0gbW1fYW5zd2VyX2F1dGhwYXNzd29yZChzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1 Y3Qgc3NoYnVmICptKQotIHsKLUBAIC0xMzkyLDcgKzE0MjEsNyBAQCBtb25pdG9yX3ZhbGlkX3Vz ZXJibG9iKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVu KQotIAlzdHJ1Y3Qgc3NoYnVmICpiOwotIAlzdHJ1Y3Qgc3Noa2V5ICpob3N0a2V5ID0gTlVMTDsK LSAJY29uc3QgdV9jaGFyICpwOwotLQljaGFyICp1c2Vyc3R5bGUsICpjcDsKLSsJY2hhciAqdXNl cnN0eWxlLCAqcywgKmNwOwotIAlzaXplX3QgbGVuOwotIAl1X2NoYXIgdHlwZTsKLSAJaW50IGhv c3Rib3VuZCA9IDAsIHIsIGZhaWwgPSAwOwotQEAgLTE0MjMsNiArMTQ1Miw4IEBAIG1vbml0b3Jf dmFsaWRfdXNlcmJsb2Ioc3RydWN0IHNzaCAqc3NoLCBjb25zdCB1X2NoYXIgKmRhdGEsIHVfaW50 IGRhdGFsZW4pCi0gCQlmYWlsKys7Ci0gCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhiLCAm Y3AsIE5VTEwpKSAhPSAwKQotIAkJZmF0YWxfZnIociwgInBhcnNlIHVzZXJzdHlsZSIpOwotKwlp ZiAoKHMgPSBzdHJjaHIoY3AsICcvJykpICE9IE5VTEwpCi0rCQkqcyA9ICdcMCc7Ci0gCXhhc3By aW50ZigmdXNlcnN0eWxlLCAiJXMlcyVzIiwgYXV0aGN0eHQtPnVzZXIsCi0gCSAgICBhdXRoY3R4 dC0+c3R5bGUgPyAiOiIgOiAiIiwKLSAJICAgIGF1dGhjdHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5z dHlsZSA6ICIiKTsKLUBAIC0xNDczLDcgKzE1MDQsNyBAQCBtb25pdG9yX3ZhbGlkX2hvc3RiYXNl ZGJsb2IoY29uc3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVuLAotIHsKLSAJc3RydWN0IHNz aGJ1ZiAqYjsKLSAJY29uc3QgdV9jaGFyICpwOwotLQljaGFyICpjcCwgKnVzZXJzdHlsZTsKLSsJ Y2hhciAqY3AsICpzLCAqdXNlcnN0eWxlOwotIAlzaXplX3QgbGVuOwotIAlpbnQgciwgZmFpbCA9 IDA7Ci0gCXVfY2hhciB0eXBlOwotQEAgLTE0OTQsNiArMTUyNSw4IEBAIG1vbml0b3JfdmFsaWRf aG9zdGJhc2VkYmxvYihjb25zdCB1X2NoYXIgKmRhdGEsIHVfaW50IGRhdGFsZW4sCi0gCQlmYWls Kys7Ci0gCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhiLCAmY3AsIE5VTEwpKSAhPSAwKQot IAkJZmF0YWxfZnIociwgInBhcnNlIHVzZXJzdHlsZSIpOwotKwlpZiAoKHMgPSBzdHJjaHIoY3As ICcvJykpICE9IE5VTEwpCi0rCQkqcyA9ICdcMCc7Ci0gCXhhc3ByaW50ZigmdXNlcnN0eWxlLCAi JXMlcyVzIiwgYXV0aGN0eHQtPnVzZXIsCi0gCSAgICBhdXRoY3R4dC0+c3R5bGUgPyAiOiIgOiAi IiwKLSAJICAgIGF1dGhjdHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHlsZSA6ICIiKTsKLWRpZmYg LS1naXQgYS9tb25pdG9yLmggYi9tb25pdG9yLmgKLWluZGV4IGZlMGIwMGIyZS4uMWI0NmU3OTRl IDEwMDY0NAotLS0tIGEvbW9uaXRvci5oCi0rKysgYi9tb25pdG9yLmgKLUBAIC01Nyw2ICs1Nywx MCBAQCBlbnVtIG1vbml0b3JfcmVxdHlwZSB7Ci0gCU1PTklUT1JfUkVRX1RFUk0gPSA1MCwKLSAJ TU9OSVRPUl9SRVFfU1RBVEUgPSA1MSwgTU9OSVRPUl9BTlNfU1RBVEUgPSA1MiwKLSAKLSsjaWZk ZWYgV0lUSF9TRUxJTlVYCi0rCU1PTklUT1JfUkVRX0FVVEhST0xFID0gODAsCi0rI2VuZGlmCi0r Ci0gCU1PTklUT1JfUkVRX1BBTV9TVEFSVCA9IDEwMCwKLSAJTU9OSVRPUl9SRVFfUEFNX0FDQ09V TlQgPSAxMDIsIE1PTklUT1JfQU5TX1BBTV9BQ0NPVU5UID0gMTAzLAotIAlNT05JVE9SX1JFUV9Q QU1fSU5JVF9DVFggPSAxMDQsIE1PTklUT1JfQU5TX1BBTV9JTklUX0NUWCA9IDEwNSwKLWRpZmYg LS1naXQgYS9tb25pdG9yX3dyYXAuYyBiL21vbml0b3Jfd3JhcC5jCi1pbmRleCA4MTU5NmE0Y2Mu LmYzYzM0MWJjNyAxMDA2NDQKLS0tLSBhL21vbml0b3Jfd3JhcC5jCi0rKysgYi9tb25pdG9yX3dy YXAuYwotQEAgLTQ3Myw2ICs0NzMsMjcgQEAgbW1faW5mb3JtX2F1dGhzZXJ2KGNoYXIgKnNlcnZp Y2UsIGNoYXIgKnN0eWxlKQotIAlzc2hidWZfZnJlZShtKTsKLSB9Ci0gCi0rLyogSW5mb3JtIHRo ZSBwcml2aWxlZ2VkIHByb2Nlc3MgYWJvdXQgcm9sZSAqLwotKwotKyNpZmRlZiBXSVRIX1NFTElO VVgKLSt2b2lkCi0rbW1faW5mb3JtX2F1dGhyb2xlKGNoYXIgKnJvbGUpCi0rewotKwlpbnQgcjsK LSsJc3RydWN0IHNzaGJ1ZiAqbTsKLSsKLSsJZGVidWczX2YoImVudGVyaW5nIik7Ci0rCi0rCWlm ICgobSA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFp bGVkIik7Ci0rCWlmICgociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCByb2xlID8gcm9sZSA6ICIi KSkgIT0gMCkKLSsJCWZhdGFsX2YoImJ1ZmZlciBlcnJvcjogJXMiLCBzc2hfZXJyKHIpKTsKLSsJ bW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9SRVFfQVVUSFJPTEUs IG0pOwotKwotKwlzc2hidWZfZnJlZShtKTsKLSt9Ci0rI2VuZGlmCi0rCi0gLyogRG8gdGhlIHBh c3N3b3JkIGF1dGhlbnRpY2F0aW9uICovCi0gaW50Ci0gbW1fYXV0aF9wYXNzd29yZChzdHJ1Y3Qg c3NoICpzc2gsIGNoYXIgKnBhc3N3b3JkKQotZGlmZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5oIGIv bW9uaXRvcl93cmFwLmgKLWluZGV4IGMyZjdmOTdkOS4uM2UwOGRkZDc4IDEwMDY0NAotLS0tIGEv bW9uaXRvcl93cmFwLmgKLSsrKyBiL21vbml0b3Jfd3JhcC5oCi1AQCAtNTEsNiArNTEsOSBAQCBp bnQgbW1fc3Noa2V5X3NpZ24oc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3Noa2V5ICosIHVfY2hhciAq Kiwgc2l6ZV90ICosCi0gICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLAotICAgICBjb25zdCBjaGFyICosIHVfaW50IGNvbXBhdCk7Ci0gdm9pZCBt bV9pbmZvcm1fYXV0aHNlcnYoY2hhciAqLCBjaGFyICopOwotKyNpZmRlZiBXSVRIX1NFTElOVVgK LSt2b2lkIG1tX2luZm9ybV9hdXRocm9sZShjaGFyICopOwotKyNlbmRpZgotIHN0cnVjdCBwYXNz d2QgKm1tX2dldHB3bmFtYWxsb3coc3RydWN0IHNzaCAqLCBjb25zdCBjaGFyICopOwotIGNoYXIg Km1tX2F1dGgyX3JlYWRfYmFubmVyKHZvaWQpOwotIGludCBtbV9hdXRoX3Bhc3N3b3JkKHN0cnVj dCBzc2ggKiwgY2hhciAqKTsKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDAxLW9wZW5z c2gtNi43cDEtY292ZXJpdHkucGF0Y2ggYi8wMDAxLW9wZW5zc2gtNi43cDEtY292ZXJpdHkucGF0 Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiMDFmNQotLS0gL2Rldi9u dWxsCisrKyBiLzAwMDEtb3BlbnNzaC02LjdwMS1jb3Zlcml0eS5wYXRjaApAQCAtMCwwICsxLDE5 MiBAQAorRnJvbSBmYTZmNzdkMTY1NzRiZjQ1NDM0NDMxYzJmZDYwZmNkMzRlOWEwYzhmIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21h aWwuY29tPgorRGF0ZTogRnJpLCA3IEF1ZyAyMDI2IDE3OjI1OjA3ICswMjAwCitTdWJqZWN0OiBb UEFUQ0ggMDEvNTNdIG9wZW5zc2gtNi43cDEtY292ZXJpdHkKKworLS0tCisga3JsLmMgICAgICAg ICAgICAgICAgICAgICAgICAgfCAzICsrKworIGxvZ2lucmVjLmMgICAgICAgICAgICAgICAgICAg IHwgMiArKworIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMyArKysKKyBtb25pdG9y LmMgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIG9wZW5ic2QtY29tcGF0L2JpbmRyZXN2 cG9ydC5jIHwgMiArLQorIG9wZW5ic2QtY29tcGF0L2JzZC1wc2VsZWN0LmMgIHwgOCArKysrLS0t LQorIHJlYWRjb25mLmMgICAgICAgICAgICAgICAgICAgIHwgMSArCisgc2VydmNvbmYuYyAgICAg ICAgICAgICAgICAgICAgfCA1ICsrKy0tCisgc2VydmVybG9vcC5jICAgICAgICAgICAgICAgICAg fCAyICstCisgOSBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMo LSkKKworZGlmZiAtLWdpdCBhL2tybC5jIGIva3JsLmMKK2luZGV4IDBlMmI1ZjE1NS4uZjJkMTA1 ZjIzIDEwMDY0NAorLS0tIGEva3JsLmMKKysrKyBiL2tybC5jCitAQCAtMTIwMiw2ICsxMjAyLDcg QEAgaXNfa2V5X3Jldm9rZWQoc3RydWN0IHNzaF9rcmwgKmtybCwgY29uc3Qgc3RydWN0IHNzaGtl eSAqa2V5KQorIAkJcmV0dXJuIHI7CisgCWVyYiA9IFJCX0ZJTkQocmV2b2tlZF9ibG9iX3RyZWUs ICZrcmwtPnJldm9rZWRfc2hhMXMsICZyYik7CisgCWZyZWUocmIuYmxvYik7CisrCXJiLmJsb2Ig PSBOVUxMOyAvKiBtYWtlIGNvdmVyaXR5IGhhcHB5ICovCisgCWlmIChlcmIgIT0gTlVMTCkgewor IAkJS1JMX0RCRygoInJldm9rZWQgYnkga2V5IFNIQTEiKSk7CisgCQlyZXR1cm4gU1NIX0VSUl9L RVlfUkVWT0tFRDsKK0BAIC0xMjEyLDYgKzEyMTMsNyBAQCBpc19rZXlfcmV2b2tlZChzdHJ1Y3Qg c3NoX2tybCAqa3JsLCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXkpCisgCQlyZXR1cm4gcjsKKyAJ ZXJiID0gUkJfRklORChyZXZva2VkX2Jsb2JfdHJlZSwgJmtybC0+cmV2b2tlZF9zaGEyNTZzLCAm cmIpOworIAlmcmVlKHJiLmJsb2IpOworKwlyYi5ibG9iID0gTlVMTDsgLyogbWFrZSBjb3Zlcml0 eSBoYXBweSAqLworIAlpZiAoZXJiICE9IE5VTEwpIHsKKyAJCUtSTF9EQkcoKCJyZXZva2VkIGJ5 IGtleSBTSEEyNTYiKSk7CisgCQlyZXR1cm4gU1NIX0VSUl9LRVlfUkVWT0tFRDsKK0BAIC0xMjIz LDYgKzEyMjUsNyBAQCBpc19rZXlfcmV2b2tlZChzdHJ1Y3Qgc3NoX2tybCAqa3JsLCBjb25zdCBz dHJ1Y3Qgc3Noa2V5ICprZXkpCisgCQlyZXR1cm4gcjsKKyAJZXJiID0gUkJfRklORChyZXZva2Vk X2Jsb2JfdHJlZSwgJmtybC0+cmV2b2tlZF9rZXlzLCAmcmIpOworIAlmcmVlKHJiLmJsb2IpOwor KwlyYi5ibG9iID0gTlVMTDsgLyogbWFrZSBjb3Zlcml0eSBoYXBweSAqLworIAlpZiAoZXJiICE9 IE5VTEwpIHsKKyAJCUtSTF9EQkcoKCJyZXZva2VkIGJ5IGV4cGxpY2l0IGtleSIpKTsKKyAJCXJl dHVybiBTU0hfRVJSX0tFWV9SRVZPS0VEOworZGlmZiAtLWdpdCBhL2xvZ2lucmVjLmMgYi9sb2dp bnJlYy5jCitpbmRleCA3NDk5YWE5NzUuLjI4MDdjYWQ0YSAxMDA2NDQKKy0tLSBhL2xvZ2lucmVj LmMKKysrKyBiL2xvZ2lucmVjLmMKK0BAIC02ODAsOSArNjgwLDExIEBAIGNvbnN0cnVjdF91dG1w KHN0cnVjdCBsb2dpbmluZm8gKmxpLAorIAkgKi8KKyAKKyAJLyogVXNlIHN0cm5jcHkgYmVjYXVz ZSB3ZSBkb24ndCBuZWNlc3NhcmlseSB3YW50IG51bGwgdGVybWluYXRpb24gKi8KKysJLyogY292 ZXJpdHlbYnVmZmVyX3NpemVfd2FybmluZyA6IEZBTFNFXSAqLworIAlzdHJuY3B5KHV0LT51dF9u YW1lLCBsaS0+dXNlcm5hbWUsCisgCSAgICBNSU5fU0laRU9GKHV0LT51dF9uYW1lLCBsaS0+dXNl cm5hbWUpKTsKKyAjIGlmZGVmIEhBVkVfSE9TVF9JTl9VVE1QCisrCS8qIGNvdmVyaXR5W2J1ZmZl cl9zaXplX3dhcm5pbmcgOiBGQUxTRV0gKi8KKyAJc3RybmNweSh1dC0+dXRfaG9zdCwgbGktPmhv c3RuYW1lLAorIAkgICAgTUlOX1NJWkVPRih1dC0+dXRfaG9zdCwgbGktPmhvc3RuYW1lKSk7Cisg IyBlbmRpZgorZGlmZiAtLWdpdCBhL21pc2MuYyBiL21pc2MuYworaW5kZXggNTE3ZmE3YTk3Li44 OGRjNzg4MjEgMTAwNjQ0CistLS0gYS9taXNjLmMKKysrKyBiL21pc2MuYworQEAgLTE2MTIsNiAr MTYxMiw4IEBAIHNhbml0aXNlX3N0ZGZkKHZvaWQpCisgCX0KKyAJaWYgKG51bGxmZCA+IFNUREVS Ul9GSUxFTk8pCisgCQljbG9zZShudWxsZmQpOworKwkvKiBjb3Zlcml0eVtsZWFrZWRfaGFuZGxl IDogRkFMU0VdKi8KKysJLyogY292ZXJpdHlbbGVha2VkX2hhbmRsZSA6IEZBTFNFXSovCisgfQor IAorIGNoYXIgKgorQEAgLTI4MTUsNiArMjgxNyw3IEBAIHN0ZGZkX2Rldm51bGwoaW50IGRvX3N0 ZGluLCBpbnQgZG9fc3Rkb3V0LCBpbnQgZG9fc3RkZXJyKQorIAl9CisgCWlmIChkZXZudWxsID4g U1RERVJSX0ZJTEVOTykKKyAJCWNsb3NlKGRldm51bGwpOworKwkvKiBjb3Zlcml0eVtsZWFrZWRf aGFuZGxlIDogRkFMU0VdKi8KKyAJcmV0dXJuIHJldDsKKyB9CisgCitkaWZmIC0tZ2l0IGEvbW9u aXRvci5jIGIvbW9uaXRvci5jCitpbmRleCAxNDk2NzExNDUuLjBlNTg3MTk5NCAxMDA2NDQKKy0t LSBhL21vbml0b3IuYworKysrIGIvbW9uaXRvci5jCitAQCAtMzY3LDcgKzM2Nyw3IEBAIG1vbml0 b3JfY2hpbGRfcHJlYXV0aChzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRv cikKKyAJbW1fZ2V0X2tleXN0YXRlKHNzaCwgcG1vbml0b3IpOworIAorIAkvKiBEcmFpbiBhbnkg YnVmZmVyZWQgbWVzc2FnZXMgZnJvbSB0aGUgY2hpbGQgKi8KKy0Jd2hpbGUgKHBtb25pdG9yLT5t X2xvZ19yZWN2ZmQgIT0gLTEgJiYgbW9uaXRvcl9yZWFkX2xvZyhwbW9uaXRvcikgPT0gMCkKKysJ d2hpbGUgKHBtb25pdG9yLT5tX2xvZ19yZWN2ZmQgPj0gMCAmJiBtb25pdG9yX3JlYWRfbG9nKHBt b25pdG9yKSA9PSAwKQorIAkJOworIAorIAkvKiBXYWl0IGZvciB0aGUgY2hpbGQncyBleGl0IHN0 YXR1cyAqLworQEAgLTE3MzMsNyArMTczMyw3IEBAIG1tX2Fuc3dlcl9wdHkoc3RydWN0IHNzaCAq c3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKKyAJcy0+cHR5bWFzdGVyID0gcy0+cHR5 ZmQ7CisgCisgCWRlYnVnM19mKCJ0dHkgJXMgcHR5ZmQgJWQiLCBzLT50dHksIHMtPnR0eWZkKTsK Ky0KKysJLyogY292ZXJpdHlbbGVha2VkX2hhbmRsZSA6IEZBTFNFXSAqLworIAlyZXR1cm4gKDAp OworIAorICBlcnJvcjoKK2RpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQu YyBiL29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jCitpbmRleCAzNDZjN2ZlNTYuLmY0Mjc5 MmZkZSAxMDA2NDQKKy0tLSBhL29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jCisrKysgYi9v cGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYworQEAgLTU5LDcgKzU5LDcgQEAgYmluZHJlc3Zw b3J0X3NhKGludCBzZCwgc3RydWN0IHNvY2thZGRyICpzYSkKKyAJc3RydWN0IHNvY2thZGRyX2lu NiAqaW42OworIAl1X2ludDE2X3QgKnBvcnRwOworIAl1X2ludDE2X3QgcG9ydDsKKy0Jc29ja2xl bl90IHNhbGVuOworKwlzb2NrbGVuX3Qgc2FsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0 b3JhZ2UpOworIAlpbnQgaTsKKyAKKyAJaWYgKHNhID09IE5VTEwpIHsKK2RpZmYgLS1naXQgYS9v cGVuYnNkLWNvbXBhdC9ic2QtcHNlbGVjdC5jIGIvb3BlbmJzZC1jb21wYXQvYnNkLXBzZWxlY3Qu YworaW5kZXggMjZiZGMzZTA4Li44ZTI5MzliOTUgMTAwNjQ0CistLS0gYS9vcGVuYnNkLWNvbXBh dC9ic2QtcHNlbGVjdC5jCisrKysgYi9vcGVuYnNkLWNvbXBhdC9ic2QtcHNlbGVjdC5jCitAQCAt ODUsMTMgKzg1LDEzIEBAIHBzZWxlY3Rfbm90aWZ5X3NldHVwKHZvaWQpCisgc3RhdGljIHZvaWQK KyBwc2VsZWN0X25vdGlmeV9wYXJlbnQodm9pZCkKKyB7CistCWlmIChub3RpZnlfcGlwZVsxXSAh PSAtMSkKKysJaWYgKG5vdGlmeV9waXBlWzFdID49IDApCisgCQkodm9pZCl3cml0ZShub3RpZnlf cGlwZVsxXSwgIiIsIDEpOworIH0KKyBzdGF0aWMgdm9pZAorIHBzZWxlY3Rfbm90aWZ5X3ByZXBh cmUoZmRfc2V0ICpyZWFkc2V0KQorIHsKKy0JaWYgKG5vdGlmeV9waXBlWzBdICE9IC0xKQorKwlp ZiAobm90aWZ5X3BpcGVbMF0gPj0gMCkKKyAJCUZEX1NFVChub3RpZnlfcGlwZVswXSwgcmVhZHNl dCk7CisgfQorIHN0YXRpYyB2b2lkCitAQCAtOTksOCArOTksOCBAQCBwc2VsZWN0X25vdGlmeV9k b25lKGZkX3NldCAqcmVhZHNldCkKKyB7CisgCWNoYXIgYzsKKyAKKy0JaWYgKG5vdGlmeV9waXBl WzBdICE9IC0xICYmIEZEX0lTU0VUKG5vdGlmeV9waXBlWzBdLCByZWFkc2V0KSkgeworLQkJd2hp bGUgKHJlYWQobm90aWZ5X3BpcGVbMF0sICZjLCAxKSAhPSAtMSkKKysJaWYgKG5vdGlmeV9waXBl WzBdID49IDAgJiYgRkRfSVNTRVQobm90aWZ5X3BpcGVbMF0sIHJlYWRzZXQpKSB7CisrCQl3aGls ZSAocmVhZChub3RpZnlfcGlwZVswXSwgJmMsIDEpID49IDApCisgCQkJZGVidWcyX2YoInJlYWRp bmciKTsKKyAJCUZEX0NMUihub3RpZnlfcGlwZVswXSwgcmVhZHNldCk7CisgCX0KK2RpZmYgLS1n aXQgYS9yZWFkY29uZi5jIGIvcmVhZGNvbmYuYworaW5kZXggYmM0OGI0ZjU1Li43NDY1MjE2ZjMg MTAwNjQ0CistLS0gYS9yZWFkY29uZi5jCisrKysgYi9yZWFkY29uZi5jCitAQCAtMjExMSw2ICsy MTExLDcgQEAgcGFyc2VfcHVia2V5X2FsZ29zOgorIAkJCX0gZWxzZSBpZiAociAhPSAwKSB7Cisg CQkJCWVycm9yKCIlLjIwMHMgbGluZSAlZDogZ2xvYiBmYWlsZWQgZm9yICVzLiIsCisgCQkJCSAg ICBmaWxlbmFtZSwgbGluZW51bSwgYXJnMik7CisrCQkJCWZyZWUoYXJnMik7CisgCQkJCWdvdG8g b3V0OworIAkJCX0KKyAJCQlmcmVlKGFyZzIpOworZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9z ZXJ2Y29uZi5jCitpbmRleCBhYzBjMzFkOTUuLmU3ODE5ZDU5YSAxMDA2NDQKKy0tLSBhL3NlcnZj b25mLmMKKysrKyBiL3NlcnZjb25mLmMKK0BAIC0yMDI2LDggKzIwMjYsOSBAQCBwcm9jZXNzX3Nl cnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5l LAorIAkJaWYgKCphY3RpdmVwICYmICpjaGFycHRyID09IE5VTEwpIHsKKyAJCQkqY2hhcnB0ciA9 IHRpbGRlX2V4cGFuZF9maWxlbmFtZShhcmcsIGdldHVpZCgpKTsKKyAJCQkvKiBpbmNyZWFzZSBv cHRpb25hbCBjb3VudGVyICovCistCQkJaWYgKGludHB0ciAhPSBOVUxMKQorLQkJCQkqaW50cHRy ID0gKmludHB0ciArIDE7CisrCQkJLyogREVBRCBDT0RFIGludHB0ciBpcyBzdGlsbCBOVUxMIDsp CisrICAJCQkgaWYgKGludHB0ciAhPSBOVUxMKQorKwkJCQkqaW50cHRyID0gKmludHB0ciArIDE7 ICovCisgCQl9CisgCQlicmVhazsKKyAKK2RpZmYgLS1naXQgYS9zZXJ2ZXJsb29wLmMgYi9zZXJ2 ZXJsb29wLmMKK2luZGV4IDlkOGEzNDI5ZS4uYzIyNjgxNDgzIDEwMDY0NAorLS0tIGEvc2VydmVy bG9vcC5jCisrKysgYi9zZXJ2ZXJsb29wLmMKK0BAIC01MzYsNyArNTM2LDcgQEAgc2VydmVyX3Jl cXVlc3RfdHVuKHN0cnVjdCBzc2ggKnNzaCkKKyAJCWRlYnVnX2YoImludmFsaWQgdHVuIik7Cisg CQlnb3RvIGRvbmU7CisgCX0KKy0JaWYgKGF1dGhfb3B0cy0+Zm9yY2VfdHVuX2RldmljZSAhPSAt MSkgeworKwlpZiAoYXV0aF9vcHRzLT5mb3JjZV90dW5fZGV2aWNlID49IDApIHsKKyAJCWlmICh0 dW4gIT0gU1NIX1RVTklEX0FOWSAmJgorIAkJICAgIGF1dGhfb3B0cy0+Zm9yY2VfdHVuX2Rldmlj ZSAhPSAoaW50KXR1bikKKyAJCQlnb3RvIGRvbmU7CistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0 IGEvMDAwMi1BZGQtU0VMaW51eC1yb2xlLWFuZC1NTFMtTXVsdGktTGV2ZWwtU2VjdXJpdHktc3Vw cG9yLnBhdGNoIGIvMDAwMi1BZGQtU0VMaW51eC1yb2xlLWFuZC1NTFMtTXVsdGktTGV2ZWwtU2Vj dXJpdHktc3VwcG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3 ZjcwMzAKLS0tIC9kZXYvbnVsbAorKysgYi8wMDAyLUFkZC1TRUxpbnV4LXJvbGUtYW5kLU1MUy1N dWx0aS1MZXZlbC1TZWN1cml0eS1zdXBwb3IucGF0Y2gKQEAgLTAsMCArMSw0MTYgQEAKK0Zyb20g M2M0N2YyYmIyMjNlNGU0MDBmYWMwOGMxMmJmMzZhMmE4OGZhNTViYSBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0Rh dGU6IE1vbiwgMTMgQXByIDIwMjYgMTQ6MDY6MzIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi81 M10gQWRkIFNFTGludXggcm9sZSBhbmQgTUxTIChNdWx0aS1MZXZlbCBTZWN1cml0eSkgc3VwcG9y dAorCitvcGVuc3NoLTcuOHAxLXJvbGUtbWxzCisKK0FkZCBzdXBwb3J0IGZvciBTRUxpbnV4IHJv bGUtYmFzZWQgYWNjZXNzIGNvbnRyb2wgYW5kIE11bHRpLUxldmVsCitTZWN1cml0eSAoTUxTKSBi eSBhbGxvd2luZyB1c2VycyB0byBzcGVjaWZ5IHRoZWlyIHJvbGUgYXMgcGFydCBvZiB0aGUKK3Vz ZXJuYW1lIGluIHRoZSBmb3JtYXQgdXNlci9yb2xlLgorCitDaGFuZ2VzOgorLSBhdXRoLmg6IEFk ZCByb2xlIGZpZWxkIHRvIEF1dGhjdHh0IHN0cnVjdHVyZQorLSBhdXRoMi5jOiBQYXJzZSByb2xl IGZyb20gdXNlcm5hbWUgYW5kIGluZm9ybSBtb25pdG9yIHByb2Nlc3MKKy0gYXV0aDItZ3NzLmM6 IEluY2x1ZGUgcm9sZSBpbiBHU1NBUEkgTUlDIGF1dGhlbnRpY2F0aW9uCistIGF1dGgyLWhvc3Ri YXNlZC5jOiBJbmNsdWRlIHJvbGUgaW4gaG9zdGJhc2VkIGF1dGhlbnRpY2F0aW9uIHNpZ25hdHVy ZQorLSBhdXRoMi1wdWJrZXkuYzogSW5jbHVkZSByb2xlIGluIHB1YmtleSBhdXRoZW50aWNhdGlv biB1c2Vyc3R5bGUKKy0gbW9uaXRvci5jOiBBZGQgbW1fYW5zd2VyX2F1dGhyb2xlKCkgYW5kIGhh bmRsZSByb2xlIGluIGF1dGhlbnRpY2F0aW9uCisgIGJsb2IgdmFsaWRhdGlvbgorLSBtb25pdG9y X3dyYXAuYzogQWRkIG1tX2luZm9ybV9hdXRocm9sZSgpIGZvciBwcml2aWxlZ2Ugc2VwYXJhdGlv bgorLSBtaXNjLmM6IFVwZGF0ZSBjb2xvbigpIHRvIGhhbmRsZSAvcm9sZSBzeW50YXggaW4gZmls ZSBwYXRocworCitDby1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVwbHlAYW50 aHJvcGljLmNvbT4KKy0tLQorIGF1dGguaCAgICAgICAgICAgIHwgIDMgKysrCisgYXV0aDItZ3Nz LmMgICAgICAgfCAxMSArKysrKysrKysrLQorIGF1dGgyLWhvc3RiYXNlZC5jIHwgIDkgKysrKysr KysrCisgYXV0aDItcHVia2V5LmMgICAgfCAxOSArKysrKysrKysrKysrKystLS0tCisgYXV0aDIu YyAgICAgICAgICAgfCAxNCArKysrKysrKysrKysrKworIG1pc2MuYyAgICAgICAgICAgIHwgMTgg KysrKysrKysrKysrKysrKystCisgbW9uaXRvci5jICAgICAgICAgfCAzNyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tCisgbW9uaXRvci5oICAgICAgICAgfCAgNCArKysrCisg bW9uaXRvcl93cmFwLmMgICAgfCAyMSArKysrKysrKysrKysrKysrKysrKysKKyBtb25pdG9yX3dy YXAuaCAgICB8ICAzICsrKworIDEwIGZpbGVzIGNoYW5nZWQsIDEzMSBpbnNlcnRpb25zKCspLCA4 IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYXV0aC5oIGIvYXV0aC5oCitpbmRleCAwZjEx NDU4Y2EuLmVmZTgxOTMyMyAxMDA2NDQKKy0tLSBhL2F1dGguaAorKysrIGIvYXV0aC5oCitAQCAt NjUsNiArNjUsOSBAQCBzdHJ1Y3QgQXV0aGN0eHQgeworIAljaGFyCQkqc2VydmljZTsKKyAJc3Ry dWN0IHBhc3N3ZAkqcHc7CQkvKiBzZXQgaWYgJ3ZhbGlkJyAqLworIAljaGFyCQkqc3R5bGU7Cisr I2lmZGVmIFdJVEhfU0VMSU5VWAorKwljaGFyCQkqcm9sZTsKKysjZW5kaWYKKyAKKyAJLyogTWV0 aG9kIGxpc3RzIGZvciBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiAqLworIAljaGFyCQkqKmF1dGhf bWV0aG9kczsJLyogbW9kaWZpZWQgZnJvbSBzZXJ2ZXIgY29uZmlnICovCitkaWZmIC0tZ2l0IGEv YXV0aDItZ3NzLmMgYi9hdXRoMi1nc3MuYworaW5kZXggOWU5NDk2ZTUzLi41NTNmYmEzMjggMTAw NjQ0CistLS0gYS9hdXRoMi1nc3MuYworKysrIGIvYXV0aDItZ3NzLmMKK0BAIC0yODAsNiArMjgw LDcgQEAgaW5wdXRfZ3NzYXBpX21pYyhpbnQgdHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNz aCAqc3NoKQorIAlBdXRoY3R4dCAqYXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OworIAlHc3NjdHh0 ICpnc3NjdHh0OworIAlpbnQgciwgYXV0aGVudGljYXRlZCA9IDA7CisrCWNoYXIgKm1pY3VzZXI7 CisgCXN0cnVjdCBzc2hidWYgKmI7CisgCWdzc19idWZmZXJfZGVzYyBtaWMsIGdzc2J1ZjsKKyAJ dV9jaGFyICpwOworQEAgLTI5Nyw3ICsyOTgsMTMgQEAgaW5wdXRfZ3NzYXBpX21pYyhpbnQgdHlw ZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKQorIAkJZmF0YWxfZigic3NoYnVmX25l dyBmYWlsZWQiKTsKKyAJbWljLnZhbHVlID0gcDsKKyAJbWljLmxlbmd0aCA9IGxlbjsKKy0Jc3No X2dzc2FwaV9idWlsZG1pYyhiLCBhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQtPnNlcnZpY2UsCisr I2lmZGVmIFdJVEhfU0VMSU5VWAorKwlpZiAoYXV0aGN0eHQtPnJvbGUgJiYgYXV0aGN0eHQtPnJv bGVbMF0gIT0gMCkKKysJCXhhc3ByaW50ZigmbWljdXNlciwgIiVzLyVzIiwgYXV0aGN0eHQtPnVz ZXIsIGF1dGhjdHh0LT5yb2xlKTsKKysJZWxzZQorKyNlbmRpZgorKwkJbWljdXNlciA9IGF1dGhj dHh0LT51c2VyOworKwlzc2hfZ3NzYXBpX2J1aWxkbWljKGIsIG1pY3VzZXIsIGF1dGhjdHh0LT5z ZXJ2aWNlLAorIAkgICAgImdzc2FwaS13aXRoLW1pYyIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKTsK KyAKKyAJaWYgKChnc3NidWYudmFsdWUgPSBzc2hidWZfbXV0YWJsZV9wdHIoYikpID09IE5VTEwp CitAQCAtMzEwLDYgKzMxNyw4IEBAIGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQzMl90 IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKKyAJCWxvZ2l0KCJHU1NBUEkgTUlDIGNoZWNrIGZhaWxl ZCIpOworIAorIAlzc2hidWZfZnJlZShiKTsKKysJaWYgKG1pY3VzZXIgIT0gYXV0aGN0eHQtPnVz ZXIpCisrCQlmcmVlKG1pY3VzZXIpOworIAlmcmVlKG1pYy52YWx1ZSk7CisgCisgCWlmICghYXV0 aGVudGljYXRlZCkKK2RpZmYgLS1naXQgYS9hdXRoMi1ob3N0YmFzZWQuYyBiL2F1dGgyLWhvc3Ri YXNlZC5jCitpbmRleCA1NjRhOGQzY2MuLjZhNjcwNGQ5MyAxMDA2NDQKKy0tLSBhL2F1dGgyLWhv c3RiYXNlZC5jCisrKysgYi9hdXRoMi1ob3N0YmFzZWQuYworQEAgLTEzMSw3ICsxMzEsMTYgQEAg dXNlcmF1dGhfaG9zdGJhc2VkKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQor IAkvKiByZWNvbnN0cnVjdCBwYWNrZXQgKi8KKyAJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmdi KGIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKSkgIT0gMCB8fAorIAkgICAgKHIgPSBzc2hidWZfcHV0 X3U4KGIsIFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVFU1QpKSAhPSAwIHx8CisrI2lmZGVmIFdJVEhf U0VMSU5VWAorKwkgICAgKGF1dGhjdHh0LT5yb2xlCisrCSAgICA/ICggKHIgPSBzc2hidWZfcHV0 X3UzMihiLCBzdHJsZW4oYXV0aGN0eHQtPnVzZXIpK3N0cmxlbihhdXRoY3R4dC0+cm9sZSkrMSkp ICE9IDAgfHwKKysJICAgICAgICAociA9IHNzaGJ1Zl9wdXQoYiwgYXV0aGN0eHQtPnVzZXIsIHN0 cmxlbihhdXRoY3R4dC0+dXNlcikpKSAhPSAwIHx8CisrCSAgICAgICAgKHIgPSBzc2hidWZfcHV0 X3U4KGIsICcvJykgIT0gMCkgfHwKKysJICAgICAgICAociA9IHNzaGJ1Zl9wdXQoYiwgYXV0aGN0 eHQtPnJvbGUsIHN0cmxlbihhdXRoY3R4dC0+cm9sZSkpKSAhPSAwKQorKwkgICAgOiAociA9IHNz aGJ1Zl9wdXRfY3N0cmluZyhiLCBhdXRoY3R4dC0+dXNlcikpICE9IDApIHx8CisrI2Vsc2UKKyAJ ICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKGIsIGF1dGhjdHh0LT51c2VyKSkgIT0gMCB8fAor KyNlbmRpZgorIAkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgYXV0aGN0eHQtPnNlcnZp Y2UpKSAhPSAwIHx8CisgCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCBtZXRob2QpKSAh PSAwIHx8CisgCSAgICAociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKGIsIHBrYWxnLCBhbGVuKSkgIT0g MCB8fAorZGlmZiAtLWdpdCBhL2F1dGgyLXB1YmtleS5jIGIvYXV0aDItcHVia2V5LmMKK2luZGV4 IGMxNWIxYmE3MS4uZGMwN2ZhYTkyIDEwMDY0NAorLS0tIGEvYXV0aDItcHVia2V5LmMKKysrKyBi L2F1dGgyLXB1YmtleS5jCitAQCAtNzEsNiArNzEsOCBAQAorIAorIC8qIGltcG9ydCAqLworIGV4 dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisrZXh0ZXJuIGludCBpbmV0ZF9mbGFnOworK2V4 dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OworIGV4dGVybiBzdHJ1Y3QgYXV0aG1ldGhvZF9j ZmcgbWV0aG9kY2ZnX3B1YmtleTsKKyAKKyBzdGF0aWMgY2hhciAqCitAQCAtMjAxLDkgKzIwMywx NiBAQCB1c2VyYXV0aF9wdWJrZXkoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICptZXRob2Qp CisgCQkJZ290byBkb25lOworIAkJfQorIAkJLyogcmVjb25zdHJ1Y3QgcGFja2V0ICovCistCQl4 YXNwcmludGYoJnVzZXJzdHlsZSwgIiVzJXMlcyIsIGF1dGhjdHh0LT51c2VyLAorKwkJeGFzcHJp bnRmKCZ1c2Vyc3R5bGUsICIlcyVzJXMlcyVzIiwgYXV0aGN0eHQtPnVzZXIsCisgCQkgICAgYXV0 aGN0eHQtPnN0eWxlID8gIjoiIDogIiIsCistCQkgICAgYXV0aGN0eHQtPnN0eWxlID8gYXV0aGN0 eHQtPnN0eWxlIDogIiIpOworKwkJICAgIGF1dGhjdHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHls ZSA6ICIiLAorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJCSAgICBhdXRoY3R4dC0+cm9sZSA/ICIv IiA6ICIiLAorKwkJICAgIGF1dGhjdHh0LT5yb2xlID8gYXV0aGN0eHQtPnJvbGUgOiAiIgorKyNl bHNlCisrCQkgICAgIiIsICIiCisrI2VuZGlmCisrCQkgICAgKTsKKyAJCWlmICgociA9IHNzaGJ1 Zl9wdXRfdTgoYiwgU1NIMl9NU0dfVVNFUkFVVEhfUkVRVUVTVCkpICE9IDAgfHwKKyAJCSAgICAo ciA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCB1c2Vyc3R5bGUpKSAhPSAwIHx8CisgCQkgICAgKHIg PSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgYXV0aGN0eHQtPnNlcnZpY2UpKSAhPSAwIHx8CitAQCAt NDczLDcgKzQ4Miw4IEBAIG1hdGNoX3ByaW5jaXBhbHNfY29tbWFuZChzdHJ1Y3QgcGFzc3dkICp1 c2VyX3B3LCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCWlmICgocGlkID0gc3VicHJvY2Vz cygiQXV0aG9yaXplZFByaW5jaXBhbHNDb21tYW5kIiwgY29tbWFuZCwKKyAJICAgIGFjLCBhdiwg JmYsCisgCSAgICBTU0hfU1VCUFJPQ0VTU19TVERPVVRfQ0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19T VERFUlJfRElTQ0FSRCwKKy0JICAgIHJ1bmFzX3B3LCB0ZW1wb3JhcmlseV91c2VfdWlkLCByZXN0 b3JlX3VpZCkpID09IDApCisrCSAgICBydW5hc19wdywgdGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVz dG9yZV91aWQsCisrCSAgICBpbmV0ZF9mbGFnLCB0aGVfYXV0aGN0eHQpKSA9PSAwKQorIAkJZ290 byBvdXQ7CisgCisgCXVpZF9zd2FwcGVkID0gMTsKK0BAIC03NDksNyArNzU5LDggQEAgdXNlcl9r ZXlfY29tbWFuZF9hbGxvd2VkMihzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBzdHJ1Y3Qgc3Noa2V5 ICprZXksCisgCWlmICgocGlkID0gc3VicHJvY2VzcygiQXV0aG9yaXplZEtleXNDb21tYW5kIiwg Y29tbWFuZCwKKyAJICAgIGFjLCBhdiwgJmYsCisgCSAgICBTU0hfU1VCUFJPQ0VTU19TVERPVVRf Q0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19TVERFUlJfRElTQ0FSRCwKKy0JICAgIHJ1bmFzX3B3LCB0 ZW1wb3JhcmlseV91c2VfdWlkLCByZXN0b3JlX3VpZCkpID09IDApCisrCSAgICBydW5hc19wdywg dGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQsCisrCSAgICBpbmV0ZF9mbGFnLCB0aGVf YXV0aGN0eHQpKSA9PSAwKQorIAkJZ290byBvdXQ7CisgCisgCXVpZF9zd2FwcGVkID0gMTsKK2Rp ZmYgLS1naXQgYS9hdXRoMi5jIGIvYXV0aDIuYworaW5kZXggM2YzNTNhNzE5Li40OTdmYThlZDIg MTAwNjQ0CistLS0gYS9hdXRoMi5jCisrKysgYi9hdXRoMi5jCitAQCAtMjc3LDYgKzI3Nyw5IEBA IGlucHV0X3VzZXJhdXRoX3JlcXVlc3QoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNz aCAqc3NoKQorIAlBdXRoY3R4dCAqYXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OworIAlBdXRobWV0 aG9kICptID0gTlVMTDsKKyAJY2hhciAqdXNlciA9IE5VTEwsICpzZXJ2aWNlID0gTlVMTCwgKm1l dGhvZCA9IE5VTEwsICpzdHlsZSA9IE5VTEw7CisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKwljaGFy ICpyb2xlID0gTlVMTDsKKysjZW5kaWYKKyAJaW50IHIsIGF1dGhlbnRpY2F0ZWQgPSAwOworIAlk b3VibGUgdHN0YXJ0ID0gbW9ub3RpbWVfZG91YmxlKCk7CisgCitAQCAtMjkwLDYgKzI5MywxMSBA QCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBz c2ggKnNzaCkKKyAJZGVidWcoInVzZXJhdXRoLXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAl cyBtZXRob2QgJXMiLCB1c2VyLCBzZXJ2aWNlLCBtZXRob2QpOworIAlkZWJ1ZygiYXR0ZW1wdCAl ZCBmYWlsdXJlcyAlZCIsIGF1dGhjdHh0LT5hdHRlbXB0LCBhdXRoY3R4dC0+ZmFpbHVyZXMpOwor IAorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJaWYgKChyb2xlID0gc3RyY2hyKHVzZXIsICcvJykp ICE9IE5VTEwpCisrCQkqcm9sZSsrID0gMDsKKysjZW5kaWYKKysKKyAJaWYgKChzdHlsZSA9IHN0 cmNocih1c2VyLCAnOicpKSAhPSBOVUxMKQorIAkJKnN0eWxlKysgPSAwOworIAorQEAgLTMwMSw2 ICszMDksOSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50MzJfdCBzZXEs IHN0cnVjdCBzc2ggKnNzaCkKKyAJCWF1dGhjdHh0LT51c2VyID0geHN0cmR1cCh1c2VyKTsKKyAJ CWF1dGhjdHh0LT5zZXJ2aWNlID0geHN0cmR1cChzZXJ2aWNlKTsKKyAJCWF1dGhjdHh0LT5zdHls ZSA9IHN0eWxlID8geHN0cmR1cChzdHlsZSkgOiBOVUxMOworKyNpZmRlZiBXSVRIX1NFTElOVVgK KysJCWF1dGhjdHh0LT5yb2xlID0gcm9sZSA/IHhzdHJkdXAocm9sZSkgOiBOVUxMOworKyNlbmRp ZgorIAkJaWYgKGF1dGhjdHh0LT5wdyAmJiBzdHJjbXAoc2VydmljZSwgInNzaC1jb25uZWN0aW9u Iik9PTApIHsKKyAJCQlhdXRoY3R4dC0+dmFsaWQgPSAxOworIAkJCWRlYnVnMl9mKCJzZXR0aW5n IHVwIGF1dGhjdHh0IGZvciAlcyIsIHVzZXIpOworQEAgLTMyMCw2ICszMzEsOSBAQCBpbnB1dF91 c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkK KyAJCSAgICBhdXRoY3R4dC0+dmFsaWQgPyAiYXV0aGVudGljYXRpbmcgIiA6ICJpbnZhbGlkICIs IHVzZXIpOworIAkJc2V0cHJvY3RpdGxlKCIlcyBbbmV0XSIsIGF1dGhjdHh0LT52YWxpZCA/IHVz ZXIgOiAidW5rbm93biIpOworIAkJbW1faW5mb3JtX2F1dGhzZXJ2KHNlcnZpY2UsIHN0eWxlKTsK KysjaWZkZWYgV0lUSF9TRUxJTlVYCisrICAgICAgICAgCW1tX2luZm9ybV9hdXRocm9sZShyb2xl KTsKKysjZW5kaWYKKyAJCXVzZXJhdXRoX2Jhbm5lcihzc2gpOworIAkJaWYgKChyID0ga2V4X3Nl cnZlcl91cGRhdGVfZXh0X2luZm8oc3NoKSkgIT0gMCkKKyAJCQlmYXRhbF9mcihyLCAia2V4X3Nl cnZlcl91cGRhdGVfZXh0X2luZm8gZmFpbGVkIik7CitkaWZmIC0tZ2l0IGEvbWlzYy5jIGIvbWlz Yy5jCitpbmRleCA4OGRjNzg4MjEuLmY1Mjc1ZDEwOCAxMDA2NDQKKy0tLSBhL21pc2MuYworKysr IGIvbWlzYy5jCitAQCAtODY5LDYgKzg2OSw3IEBAIGNoYXIgKgorIGNvbG9uKGNoYXIgKmNwKQor IHsKKyAJaW50IGZsYWcgPSAwOworKwlpbnQgc3RhcnQgPSAxOworIAorIAlpZiAoKmNwID09ICc6 JykJCS8qIExlYWRpbmcgY29sb24gaXMgcGFydCBvZiBmaWxlIG5hbWUuICovCisgCQlyZXR1cm4g TlVMTDsKK0BAIC04ODQsNiArODg1LDEzIEBAIGNvbG9uKGNoYXIgKmNwKQorIAkJCXJldHVybiAo Y3ApOworIAkJaWYgKCpjcCA9PSAnLycpCisgCQkJcmV0dXJuIE5VTEw7CisrCQlpZiAoc3RhcnQp IHsKKysJCS8qIFNsYXNoIG9uIGJlZ2lubmluZyBvciBhZnRlciBkb3RzIG9ubHkgZGVub3RlcyBm aWxlIG5hbWUuICovCisrCQkJaWYgKCpjcCA9PSAnLycpCisrCQkJCXJldHVybiAoMCk7CisrCQkJ aWYgKCpjcCAhPSAnLicpCisrCQkJCXN0YXJ0ID0gMDsKKysJCX0KKyAJfQorIAlyZXR1cm4gTlVM TDsKKyB9CitAQCAtMjgzMyw3ICsyODQxLDggQEAgc3RkZmRfZGV2bnVsbChpbnQgZG9fc3RkaW4s IGludCBkb19zdGRvdXQsIGludCBkb19zdGRlcnIpCisgcGlkX3QKKyBzdWJwcm9jZXNzKGNvbnN0 IGNoYXIgKnRhZywgY29uc3QgY2hhciAqY29tbWFuZCwKKyAgICAgaW50IGFjLCBjaGFyICoqYXYs IEZJTEUgKipjaGlsZCwgdV9pbnQgZmxhZ3MsCistICAgIHN0cnVjdCBwYXNzd2QgKnB3LCBwcml2 ZHJvcF9mbiAqZHJvcF9wcml2cywgcHJpdnJlc3RvcmVfZm4gKnJlc3RvcmVfcHJpdnMpCisrICAg IHN0cnVjdCBwYXNzd2QgKnB3LCBwcml2ZHJvcF9mbiAqZHJvcF9wcml2cywKKysgICAgcHJpdnJl c3RvcmVfZm4gKnJlc3RvcmVfcHJpdnMsIGludCBpbmV0ZCwgdm9pZCAqdGhlX2F1dGhjdHh0KQor IHsKKyAJRklMRSAqZiA9IE5VTEw7CisgCXN0cnVjdCBzdGF0IHN0OworQEAgLTI5NjYsNiArMjk3 NSwxMyBAQCBzdWJwcm9jZXNzKGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqY29tbWFuZCwK KyAJCQllcnJvcigiJXM6IGR1cDI6ICVzIiwgdGFnLCBzdHJlcnJvcihlcnJubykpOworIAkJCV9l eGl0KDEpOworIAkJfQorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJCWlmIChzc2hkX3NlbGludXhf c2V0dXBfZW52X3ZhcmlhYmxlcyhpbmV0ZCwgdGhlX2F1dGhjdHh0KSA8IDApIHsKKysJCQllcnJv ciAoImZhaWxlZCB0byBjb3B5IGVudmlyb25tZW50OiAgJXMiLAorKwkJCSAgICBzdHJlcnJvcihl cnJubykpOworKwkJCV9leGl0KDEyNyk7CisrCQl9CisrI2VuZGlmCisgCQlpZiAoZW52ICE9IE5V TEwpCisgCQkJZXhlY3ZlKGF2WzBdLCBhdiwgZW52KTsKKyAJCWVsc2UKK2RpZmYgLS1naXQgYS9t b25pdG9yLmMgYi9tb25pdG9yLmMKK2luZGV4IDBlNTg3MTk5NC4uYzY1OWU5OWUwIDEwMDY0NAor LS0tIGEvbW9uaXRvci5jCisrKysgYi9tb25pdG9yLmMKK0BAIC0xMTEsNiArMTExLDkgQEAgaW50 IG1tX2Fuc3dlcl9zaWduKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOworIGlu dCBtbV9hbnN3ZXJfcHduYW1hbGxvdyhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAq KTsKKyBpbnQgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFubmVyKHN0cnVjdCBzc2ggKiwgaW50LCBz dHJ1Y3Qgc3NoYnVmICopOworIGludCBtbV9hbnN3ZXJfYXV0aHNlcnYoc3RydWN0IHNzaCAqLCBp bnQsIHN0cnVjdCBzc2hidWYgKik7CisrI2lmZGVmIFdJVEhfU0VMSU5VWAorK2ludCBtbV9hbnN3 ZXJfYXV0aHJvbGUoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisrI2VuZGlm CisgaW50IG1tX2Fuc3dlcl9hdXRocGFzc3dvcmQoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBz c2hidWYgKik7CisgaW50IG1tX2Fuc3dlcl9ic2RhdXRocXVlcnkoc3RydWN0IHNzaCAqLCBpbnQs IHN0cnVjdCBzc2hidWYgKik7CisgaW50IG1tX2Fuc3dlcl9ic2RhdXRocmVzcG9uZChzdHJ1Y3Qg c3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKK0BAIC0xODgsNiArMTkxLDkgQEAgc3RydWN0 IG1vbl90YWJsZSBtb25fZGlzcGF0Y2hfcHJvdG8yMFtdID0geworICAgICB7TU9OSVRPUl9SRVFf U0lHTiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zaWdufSwKKyAgICAge01PTklUT1JfUkVRX1BXTkFN LCBNT05fT05DRSwgbW1fYW5zd2VyX3B3bmFtYWxsb3d9LAorICAgICB7TU9OSVRPUl9SRVFfQVVU SFNFUlYsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0aHNlcnZ9LAorKyNpZmRlZiBXSVRIX1NFTElO VVgKKysgICAge01PTklUT1JfUkVRX0FVVEhST0xFLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGhy b2xlfSwKKysjZW5kaWYKKyAgICAge01PTklUT1JfUkVRX0FVVEgyX1JFQURfQkFOTkVSLCBNT05f T05DRSwgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFubmVyfSwKKyAgICAge01PTklUT1JfUkVRX0FV VEhQQVNTV09SRCwgTU9OX0FVVEgsIG1tX2Fuc3dlcl9hdXRocGFzc3dvcmR9LAorICNpZmRlZiBV U0VfUEFNCitAQCAtOTMyLDYgKzkzOCw5IEBAIG1tX2Fuc3dlcl9wd25hbWFsbG93KHN0cnVjdCBz c2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCisgCisgCS8qIEFsbG93IHNlcnZp Y2Uvc3R5bGUgaW5mb3JtYXRpb24gb24gdGhlIGF1dGggY29udGV4dCAqLworIAltb25pdG9yX3Bl cm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0FVVEhTRVJWLCAxKTsKKysjaWZkZWYgV0lU SF9TRUxJTlVYCisrCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfQVVU SFJPTEUsIDEpOworKyNlbmRpZgorIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklU T1JfUkVRX0FVVEgyX1JFQURfQkFOTkVSLCAxKTsKKyAKKyAjaWZkZWYgVVNFX1BBTQorQEAgLTEw MDYsNiArMTAxNSwyNiBAQCBrZXlfYmFzZV90eXBlX21hdGNoKGNvbnN0IGNoYXIgKm1ldGhvZCwg Y29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAorIAlyZXR1cm4gZm91bmQ7CisgfQorIAorKyNpZmRl ZiBXSVRIX1NFTElOVVgKKytpbnQKKyttbV9hbnN3ZXJfYXV0aHJvbGUoc3RydWN0IHNzaCAqc3No LCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKKyt7CisrCWludCByOworKwltb25pdG9yX3Bl cm1pdF9hdXRoZW50aWNhdGlvbnMoMSk7CisrCisrCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmlu ZyhtLCAmYXV0aGN0eHQtPnJvbGUsIE5VTEwpKSAhPSAwKQorKwkJZmF0YWxfZigiYnVmZmVyIGVy cm9yOiAlcyIsIHNzaF9lcnIocikpOworKwlkZWJ1ZzNfZigicm9sZT0lcyIsIGF1dGhjdHh0LT5y b2xlKTsKKysKKysJaWYgKHN0cmxlbihhdXRoY3R4dC0+cm9sZSkgPT0gMCkgeworKwkJZnJlZShh dXRoY3R4dC0+cm9sZSk7CisrCQlhdXRoY3R4dC0+cm9sZSA9IE5VTEw7CisrCX0KKysKKysJcmV0 dXJuICgwKTsKKyt9CisrI2VuZGlmCisrCisgaW50CisgbW1fYW5zd2VyX2F1dGhwYXNzd29yZChz dHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorIHsKK0BAIC0xMzc4 LDcgKzE0MDcsNyBAQCBtb25pdG9yX3ZhbGlkX3VzZXJibG9iKHN0cnVjdCBzc2ggKnNzaCwgY29u c3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVuKQorIAlzdHJ1Y3Qgc3NoYnVmICpiOworIAlz dHJ1Y3Qgc3Noa2V5ICpob3N0a2V5ID0gTlVMTDsKKyAJY29uc3QgdV9jaGFyICpwOworLQljaGFy ICp1c2Vyc3R5bGUsICpjcDsKKysJY2hhciAqdXNlcnN0eWxlLCAqcywgKmNwOworIAlzaXplX3Qg bGVuOworIAl1X2NoYXIgdHlwZTsKKyAJaW50IGhvc3Rib3VuZCA9IDAsIHIsIGZhaWwgPSAwOwor QEAgLTE0MDksNiArMTQzOCw4IEBAIG1vbml0b3JfdmFsaWRfdXNlcmJsb2Ioc3RydWN0IHNzaCAq c3NoLCBjb25zdCB1X2NoYXIgKmRhdGEsIHVfaW50IGRhdGFsZW4pCisgCQlmYWlsKys7CisgCWlm ICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhiLCAmY3AsIE5VTEwpKSAhPSAwKQorIAkJZmF0YWxf ZnIociwgInBhcnNlIHVzZXJzdHlsZSIpOworKwlpZiAoKHMgPSBzdHJjaHIoY3AsICcvJykpICE9 IE5VTEwpCisrCQkqcyA9ICdcMCc7CisgCXhhc3ByaW50ZigmdXNlcnN0eWxlLCAiJXMlcyVzIiwg YXV0aGN0eHQtPnVzZXIsCisgCSAgICBhdXRoY3R4dC0+c3R5bGUgPyAiOiIgOiAiIiwKKyAJICAg IGF1dGhjdHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHlsZSA6ICIiKTsKK0BAIC0xNDU5LDcgKzE0 OTAsNyBAQCBtb25pdG9yX3ZhbGlkX2hvc3RiYXNlZGJsb2IoY29uc3QgdV9jaGFyICpkYXRhLCB1 X2ludCBkYXRhbGVuLAorIHsKKyAJc3RydWN0IHNzaGJ1ZiAqYjsKKyAJY29uc3QgdV9jaGFyICpw OworLQljaGFyICpjcCwgKnVzZXJzdHlsZTsKKysJY2hhciAqY3AsICpzLCAqdXNlcnN0eWxlOwor IAlzaXplX3QgbGVuOworIAlpbnQgciwgZmFpbCA9IDA7CisgCXVfY2hhciB0eXBlOworQEAgLTE0 ODAsNiArMTUxMSw4IEBAIG1vbml0b3JfdmFsaWRfaG9zdGJhc2VkYmxvYihjb25zdCB1X2NoYXIg KmRhdGEsIHVfaW50IGRhdGFsZW4sCisgCQlmYWlsKys7CisgCWlmICgociA9IHNzaGJ1Zl9nZXRf Y3N0cmluZyhiLCAmY3AsIE5VTEwpKSAhPSAwKQorIAkJZmF0YWxfZnIociwgInBhcnNlIHVzZXJz dHlsZSIpOworKwlpZiAoKHMgPSBzdHJjaHIoY3AsICcvJykpICE9IE5VTEwpCisrCQkqcyA9ICdc MCc7CisgCXhhc3ByaW50ZigmdXNlcnN0eWxlLCAiJXMlcyVzIiwgYXV0aGN0eHQtPnVzZXIsCisg CSAgICBhdXRoY3R4dC0+c3R5bGUgPyAiOiIgOiAiIiwKKyAJICAgIGF1dGhjdHh0LT5zdHlsZSA/ IGF1dGhjdHh0LT5zdHlsZSA6ICIiKTsKK2RpZmYgLS1naXQgYS9tb25pdG9yLmggYi9tb25pdG9y LmgKK2luZGV4IGZlMGIwMGIyZS4uMWI0NmU3OTRlIDEwMDY0NAorLS0tIGEvbW9uaXRvci5oCisr KysgYi9tb25pdG9yLmgKK0BAIC01Nyw2ICs1NywxMCBAQCBlbnVtIG1vbml0b3JfcmVxdHlwZSB7 CisgCU1PTklUT1JfUkVRX1RFUk0gPSA1MCwKKyAJTU9OSVRPUl9SRVFfU1RBVEUgPSA1MSwgTU9O SVRPUl9BTlNfU1RBVEUgPSA1MiwKKyAKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrCU1PTklUT1Jf UkVRX0FVVEhST0xFID0gODAsCisrI2VuZGlmCisrCisgCU1PTklUT1JfUkVRX1BBTV9TVEFSVCA9 IDEwMCwKKyAJTU9OSVRPUl9SRVFfUEFNX0FDQ09VTlQgPSAxMDIsIE1PTklUT1JfQU5TX1BBTV9B Q0NPVU5UID0gMTAzLAorIAlNT05JVE9SX1JFUV9QQU1fSU5JVF9DVFggPSAxMDQsIE1PTklUT1Jf QU5TX1BBTV9JTklUX0NUWCA9IDEwNSwKK2RpZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuYyBiL21v bml0b3Jfd3JhcC5jCitpbmRleCBlOWE3NzFiMzQuLmFmMDI1Mjk2NCAxMDA2NDQKKy0tLSBhL21v bml0b3Jfd3JhcC5jCisrKysgYi9tb25pdG9yX3dyYXAuYworQEAgLTQ0MCw2ICs0NDAsMjcgQEAg bW1faW5mb3JtX2F1dGhzZXJ2KGNoYXIgKnNlcnZpY2UsIGNoYXIgKnN0eWxlKQorIAlzc2hidWZf ZnJlZShtKTsKKyB9CisgCisrLyogSW5mb3JtIHRoZSBwcml2aWxlZ2VkIHByb2Nlc3MgYWJvdXQg cm9sZSAqLworKworKyNpZmRlZiBXSVRIX1NFTElOVVgKKyt2b2lkCisrbW1faW5mb3JtX2F1dGhy b2xlKGNoYXIgKnJvbGUpCisreworKwlpbnQgcjsKKysJc3RydWN0IHNzaGJ1ZiAqbTsKKysKKysJ ZGVidWczX2YoImVudGVyaW5nIik7CisrCisrCWlmICgobSA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVM TCkKKysJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7CisrCWlmICgociA9IHNzaGJ1Zl9w dXRfY3N0cmluZyhtLCByb2xlID8gcm9sZSA6ICIiKSkgIT0gMCkKKysJCWZhdGFsX2YoImJ1ZmZl ciBlcnJvcjogJXMiLCBzc2hfZXJyKHIpKTsKKysJbW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5t X3JlY3ZmZCwgTU9OSVRPUl9SRVFfQVVUSFJPTEUsIG0pOworKworKwlzc2hidWZfZnJlZShtKTsK Kyt9CisrI2VuZGlmCisrCisgLyogRG8gdGhlIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uICovCisg aW50CisgbW1fYXV0aF9wYXNzd29yZChzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKnBhc3N3b3JkKQor ZGlmZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5oIGIvbW9uaXRvcl93cmFwLmgKK2luZGV4IGY0Mzc1 OWIyMS4uMzA1ODUxODdjIDEwMDY0NAorLS0tIGEvbW9uaXRvcl93cmFwLmgKKysrKyBiL21vbml0 b3Jfd3JhcC5oCitAQCAtNTEsNiArNTEsOSBAQCBpbnQgbW1fc3Noa2V5X3NpZ24oc3RydWN0IHNz aCAqLCBzdHJ1Y3Qgc3Noa2V5ICosIHVfY2hhciAqKiwgc2l6ZV90ICosCisgICAgIGNvbnN0IHVf Y2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICBjb25zdCBj aGFyICosIHVfaW50IGNvbXBhdCk7Cisgdm9pZCBtbV9pbmZvcm1fYXV0aHNlcnYoY2hhciAqLCBj aGFyICopOworKyNpZmRlZiBXSVRIX1NFTElOVVgKKyt2b2lkIG1tX2luZm9ybV9hdXRocm9sZShj aGFyICopOworKyNlbmRpZgorIHN0cnVjdCBwYXNzd2QgKm1tX2dldHB3bmFtYWxsb3coc3RydWN0 IHNzaCAqLCBjb25zdCBjaGFyICopOworIGNoYXIgKm1tX2F1dGgyX3JlYWRfYmFubmVyKHZvaWQp OworIGludCBtbV9hdXRoX3Bhc3N3b3JkKHN0cnVjdCBzc2ggKiwgY2hhciAqKTsKKy0tIAorMi41 NS4wCisKCmRpZmYgLS1naXQgYS8wMDAyLUltcGxlbWVudC1TRUxpbnV4LWVudmlyb25tZW50LXZh cmlhYmxlLXNldHVwLWZvci1zdWIucGF0Y2ggYi8wMDAyLUltcGxlbWVudC1TRUxpbnV4LWVudmly b25tZW50LXZhcmlhYmxlLXNldHVwLWZvci1zdWIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGU1NGZmMDMuLjAwMDAwMDAKLS0tIGEvMDAwMi1JbXBsZW1lbnQtU0VMaW51eC1l bnZpcm9ubWVudC12YXJpYWJsZS1zZXR1cC1mb3Itc3ViLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsNjc3ICswLDAgQEAKLUZyb20gOGIyNTYxNDEzMmM3ODExNjQ5OGEyYjk0NjM0YjJiOGJhY2Y4 MmY1ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxi ZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTQ6MDY6NDcgKzAyMDAK LVN1YmplY3Q6IFtQQVRDSCAwMi81NF0gSW1wbGVtZW50IFNFTGludXggZW52aXJvbm1lbnQgdmFy aWFibGUgc2V0dXAgZm9yCi0gc3VicHJvY2VzcyBleGVjdXRpb24KLQotb3BlbnNzaC02LjZwMS1z ZWxpbnV4LWVudi1zZXR1cAotCi1JbXBsZW1lbnQgY29tcHJlaGVuc2l2ZSBTRUxpbnV4IGNvbnRl eHQgbWFuYWdlbWVudCBmb3Igc3NoZCwgaW5jbHVkaW5nCi1yb2xlIHNlbGVjdGlvbiwgTUxTIGxl dmVsIHZhbGlkYXRpb24sIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR1cCBmb3IKLXBhbV9z ZWxpbnV4IGludGVncmF0aW9uLgotCi1DaGFuZ2VzOgotLSBvcGVuYnNkLWNvbXBhdC9wb3J0LWxp bnV4LXNzaGQuYzogTmV3IGZpbGUgd2l0aCBTRUxpbnV4IGNvbnRleHQKLSAgbWFuYWdlbWVudCBm dW5jdGlvbnMgaW5jbHVkaW5nIHNzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUoKSwKLSAgc3NoZF9z ZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dCgpLCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0 dXAKLS0gb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW46IEFkZCBwb3J0LWxpbnV4LXNzaGQubyB0 byBidWlsZAotLSBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmM6IFJlbW92ZSBvbGQgc3NoX3Nl bGludXhfc2V0dXBfZXhlY19jb250ZXh0KCksCi0gIHVwZGF0ZSBzc2hfc2VsaW51eF9zZXR1cF9w dHkoKSB0byB1c2UgZ2V0ZXhlY2NvbigpCi0tIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaDog VXBkYXRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IKLSAgc3NoZC1zcGVjaWZpYyBTRUxpbnV4 IGZ1bmN0aW9ucwotLSBwbGF0Zm9ybS5jOiBSZXBsYWNlIHNzaF9zZWxpbnV4X3NldHVwX2V4ZWNf Y29udGV4dCgpIHdpdGgKLSAgc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dCgpIGFuZCBw YXNzIGFkZGl0aW9uYWwgcGFyYW1ldGVycwotICAoaW5ldGRfZmxhZywgZG9fcGFtX3B1dGVudiwg dGhlX2F1dGhjdHh0LCBvcHRpb25zLnVzZV9wYW0pCi0tIHNzaGQtc2Vzc2lvbi5jOiBBZGQgU0VM aW51eCBleGVjdXRpb24gY29udGV4dCBzZXR1cCBjYWxsIGluIG1haW4oKQotLSBhdXRoLXBhbS5j OiBDaGFuZ2UgZG9fcGFtX3B1dGVudigpIHZhbHVlIHBhcmFtZXRlciB0byBjb25zdCBjaGFyICoK LS0gYXV0aC1wYW0uaDogVXBkYXRlIGRvX3BhbV9wdXRlbnYoKSBzaWduYXR1cmUgYW5kIGFkZCBk b19wYW1fY2hhdXRodG9rKCkKLSAgZGVjbGFyYXRpb24KLQotQ28tQXV0aG9yZWQtQnk6IENsYXVk ZSBTb25uZXQgNC41IDxub3JlcGx5QGFudGhyb3BpYy5jb20+Ci0tLS0KLSBhdXRoLXBhbS5jICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQotIGF1dGgtcGFtLmggICAgICAgICAgICAgICAg ICAgICAgIHwgICAzICstCi0gb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4gICAgICAgfCAgIDMg Ky0KLSBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYyB8IDQ1NCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCi0gb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jICAgICAgfCAg MzcgKy0tCi0gb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oICAgICAgfCAgIDUgKy0KLSBwbGF0 Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQotIHNzaGQtc2Vzc2lvbi5jICAg ICAgICAgICAgICAgICAgIHwgICA3ICstCi0gOCBmaWxlcyBjaGFuZ2VkLCA0ODAgaW5zZXJ0aW9u cygrKSwgMzkgZGVsZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IG9wZW5ic2QtY29tcGF0 L3BvcnQtbGludXgtc3NoZC5jCi0KLWRpZmYgLS1naXQgYS9hdXRoLXBhbS5jIGIvYXV0aC1wYW0u YwotaW5kZXggMjk2MDdlMDQxLi4zZjM0MmY5ZTEgMTAwNjQ0Ci0tLS0gYS9hdXRoLXBhbS5jCi0r KysgYi9hdXRoLXBhbS5jCi1AQCAtMTE0NSw3ICsxMTQ1LDcgQEAgaXNfcGFtX3Nlc3Npb25fb3Bl bih2b2lkKQotICAqIGR1cmluZyB0aGUgc3NoIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuCi0gICov Ci0gaW50Ci0tZG9fcGFtX3B1dGVudihjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKLStkb19wYW1f cHV0ZW52KGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQotIHsKLSAJaW50IHJldCA9IDE7 Ci0gCWNoYXIgKmNvbXBvdW5kOwotZGlmZiAtLWdpdCBhL2F1dGgtcGFtLmggYi9hdXRoLXBhbS5o Ci1pbmRleCA0OTEzMzY3MDEuLmY5MTY3Y2ZjOCAxMDA2NDQKLS0tLSBhL2F1dGgtcGFtLmgKLSsr KyBiL2F1dGgtcGFtLmgKLUBAIC0zMiw3ICszMiw4IEBAIHZvaWQgZmluaXNoX3BhbSh2b2lkKTsK LSB1X2ludCBkb19wYW1fYWNjb3VudCh2b2lkKTsKLSB2b2lkIGRvX3BhbV9zZXNzaW9uKHN0cnVj dCBzc2ggKik7Ci0gdm9pZCBkb19wYW1fc2V0Y3JlZCh2b2lkKTsKLS1pbnQgZG9fcGFtX3B1dGVu dihjaGFyICosIGNoYXIgKik7Ci0rdm9pZCBkb19wYW1fY2hhdXRodG9rKHZvaWQpOwotK2ludCBk b19wYW1fcHV0ZW52KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLSBjaGFyICoqIGZldGNoX3BhbV9l bnZpcm9ubWVudCh2b2lkKTsKLSBjaGFyICoqIGZldGNoX3BhbV9jaGlsZF9lbnZpcm9ubWVudCh2 b2lkKTsKLSB2b2lkIGZyZWVfcGFtX2Vudmlyb25tZW50KGNoYXIgKiopOwotZGlmZiAtLWdpdCBh L29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIGIvb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4K LWluZGV4IDUzYzg3ZGI2ZC4uMzk1MzFhZTc3IDEwMDY0NAotLS0tIGEvb3BlbmJzZC1jb21wYXQv TWFrZWZpbGUuaW4KLSsrKyBiL29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluCi1AQCAtMTAyLDcg KzEwMiw4IEBAIFBPUlRTPQlwb3J0LWFpeC5vIFwKLSAJcG9ydC1wcm5nZC5vIFwKLSAJcG9ydC1z b2xhcmlzLm8gXAotIAlwb3J0LW5ldC5vIFwKLS0JcG9ydC11dy5vCi0rCXBvcnQtdXcubyBcCi0r CXBvcnQtbGludXgtc3NoZC5vCi0gCi0gLmMubzoKLSAJJChDQykgJChDRkxBR1NfTk9QSUUpICQo UElDRkxBRykgJChDUFBGTEFHUykgLWMgJDwKLWRpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBhdC9w b3J0LWxpbnV4LXNzaGQuYyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jCi1uZXcg ZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwLi5hYjA4M2E2MzcKLS0tLSAvZGV2L251 bGwKLSsrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jCi1AQCAtMCwwICsxLDQ1 NCBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDA1IERhbmllbCBXYWxzaCA8ZHdhbHNoQHJl ZGhhdC5jb20+Ci0rICogQ29weXJpZ2h0IChjKSAyMDE0IFBldHIgTGF1dHJiYWNoIDxwbGF1dHJi YUByZWRoYXQuY29tPgotKyAqCi0rICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwg YW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0rICogcHVycG9zZSB3aXRoIG9y IHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQot KyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGlu IGFsbCBjb3BpZXMuCi0rICoKLSsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBB TkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSsgKiBXSVRIIFJFR0FSRCBU TyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0rICog TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S IEJFIExJQUJMRSBGT1IKLSsgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0rICogV0hBVFNPRVZFUiBSRVNVTFRJ TkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0rICog QUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwg QVJJU0lORyBPVVQgT0YKLSsgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotKyAqLwotKwotKy8qCi0rICogTGludXgtc3BlY2lm aWMgcG9ydGFiaWxpdHkgY29kZSAtIGp1c3QgU0VMaW51eCBzdXBwb3J0IGZvciBzc2hkIGF0IHBy ZXNlbnQKLSsgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsjaWYgZGVmaW5lZChX SVRIX1NFTElOVVgpIHx8IGRlZmluZWQoTElOVVhfT09NX0FESlVTVCkKLSsjaW5jbHVkZSA8ZXJy bm8uaD4KLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsKLSsjaW5jbHVkZSAibG9nLmgi Ci0rI2luY2x1ZGUgInhtYWxsb2MuaCIKLSsjaW5jbHVkZSAibWlzYy5oIiAgICAgIC8qIHNlcnZj b25mLmggbmVlZHMgbWlzYy5oIGZvciBzdHJ1Y3QgRm9yd2FyZE9wdGlvbnMgKi8KLSsjaW5jbHVk ZSAic2VydmNvbmYuaCIKLSsjaW5jbHVkZSAicG9ydC1saW51eC5oIgotKyNpbmNsdWRlICJzc2hr ZXkuaCIKLSsjaW5jbHVkZSAiaG9zdGZpbGUuaCIKLSsjaW5jbHVkZSAiYXV0aC5oIgotKwotKyNp ZmRlZiBXSVRIX1NFTElOVVgKLSsjaW5jbHVkZSA8c2VsaW51eC9zZWxpbnV4Lmg+Ci0rI2luY2x1 ZGUgPHNlbGludXgvY29udGV4dC5oPgotKyNpbmNsdWRlIDxzZWxpbnV4L2dldF9jb250ZXh0X2xp c3QuaD4KLSsjaW5jbHVkZSA8c2VsaW51eC9nZXRfZGVmYXVsdF90eXBlLmg+Ci0rCi0rI2lmZGVm IEhBVkVfTElOVVhfQVVESVQKLSsjaW5jbHVkZSA8bGliYXVkaXQuaD4KLSsjaW5jbHVkZSA8dW5p c3RkLmg+Ci0rI2VuZGlmCi0rCi0rLyogV3JhcHBlciBhcm91bmQgaXNfc2VsaW51eF9lbmFibGVk KCkgdG8gbG9nIGl0cyByZXR1cm4gdmFsdWUgb25jZSBvbmx5ICovCi0raW50Ci0rc3NoZF9zZWxp bnV4X2VuYWJsZWQodm9pZCkKLSt7Ci0rCXN0YXRpYyBpbnQgZW5hYmxlZCA9IC0xOwotKwotKwlp ZiAoZW5hYmxlZCA9PSAtMSkgewotKwkJZW5hYmxlZCA9IChpc19zZWxpbnV4X2VuYWJsZWQoKSA9 PSAxKTsKLSsJCWRlYnVnKCJTRUxpbnV4IHN1cHBvcnQgJXMiLCBlbmFibGVkID8gImVuYWJsZWQi IDogImRpc2FibGVkIik7Ci0rCX0KLSsKLSsJcmV0dXJuIChlbmFibGVkKTsKLSt9Ci0rCi0rLyog U2VuZCBhdWRpdCBtZXNzYWdlICovCi0rc3RhdGljIGludAotK3NzaGRfc2VsaW51eF9zZW5kX2F1 ZGl0X21lc3NhZ2UoaW50IHN1Y2Nlc3MsIHNlY3VyaXR5X2NvbnRleHRfdCBkZWZhdWx0X2NvbnRl eHQsCi0rCQkgICAgICAgc2VjdXJpdHlfY29udGV4dF90IHNlbGVjdGVkX2NvbnRleHQpCi0rewot KwlpbnQgcmM9MDsKLSsjaWZkZWYgSEFWRV9MSU5VWF9BVURJVAotKwljaGFyICptc2cgPSBOVUxM OwotKwlpbnQgYXVkaXRfZmQgPSBhdWRpdF9vcGVuKCk7Ci0rCXNlY3VyaXR5X2NvbnRleHRfdCBk ZWZhdWx0X3Jhdz1OVUxMOwotKwlzZWN1cml0eV9jb250ZXh0X3Qgc2VsZWN0ZWRfcmF3PU5VTEw7 Ci0rCXJjID0gLTE7Ci0rCWlmIChhdWRpdF9mZCA8IDApIHsKLSsJCWlmIChlcnJubyA9PSBFSU5W QUwgfHwgZXJybm8gPT0gRVBST1RPTk9TVVBQT1JUIHx8Ci0rCQkJCQllcnJubyA9PSBFQUZOT1NV UFBPUlQpCi0rCQkJCXJldHVybiAwOyAvKiBObyBhdWRpdCBzdXBwb3J0IGluIGtlcm5lbCAqLwot KwkJZXJyb3IoIkVycm9yIGNvbm5lY3RpbmcgdG8gYXVkaXQgc3lzdGVtLiIpOwotKwkJcmV0dXJu IHJjOwotKwl9Ci0rCWlmIChzZWxpbnV4X3RyYW5zX3RvX3Jhd19jb250ZXh0KGRlZmF1bHRfY29u dGV4dCwgJmRlZmF1bHRfcmF3KSA8IDApIHsKLSsJCWVycm9yKCJFcnJvciB0cmFuc2xhdGluZyBk ZWZhdWx0IGNvbnRleHQuIik7Ci0rCQlkZWZhdWx0X3JhdyA9IE5VTEw7Ci0rCX0KLSsJaWYgKHNl bGludXhfdHJhbnNfdG9fcmF3X2NvbnRleHQoc2VsZWN0ZWRfY29udGV4dCwgJnNlbGVjdGVkX3Jh dykgPCAwKSB7Ci0rCQllcnJvcigiRXJyb3IgdHJhbnNsYXRpbmcgc2VsZWN0ZWQgY29udGV4dC4i KTsKLSsJCXNlbGVjdGVkX3JhdyA9IE5VTEw7Ci0rCX0KLSsJaWYgKGFzcHJpbnRmKCZtc2csICJz c2hkOiBkZWZhdWx0LWNvbnRleHQ9JXMgc2VsZWN0ZWQtY29udGV4dD0lcyIsCi0rCQkgICAgIGRl ZmF1bHRfcmF3ID8gZGVmYXVsdF9yYXcgOiAoZGVmYXVsdF9jb250ZXh0ID8gZGVmYXVsdF9jb250 ZXh0OiAiPyIpLAotKwkJICAgICBzZWxlY3RlZF9jb250ZXh0ID8gc2VsZWN0ZWRfcmF3IDogKHNl bGVjdGVkX2NvbnRleHQgPyBzZWxlY3RlZF9jb250ZXh0IDoiPyIpKSA8IDApIHsKLSsJCWVycm9y KCJFcnJvciBhbGxvY2F0aW5nIG1lbW9yeS4iKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCWlmIChh dWRpdF9sb2dfdXNlcl9tZXNzYWdlKGF1ZGl0X2ZkLCBBVURJVF9VU0VSX1JPTEVfQ0hBTkdFLAot KwkJCQkgICBtc2csIE5VTEwsIE5VTEwsIE5VTEwsIHN1Y2Nlc3MpIDw9IDApIHsKLSsJCWVycm9y KCJFcnJvciBzZW5kaW5nIGF1ZGl0IG1lc3NhZ2UuIik7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwly YyA9IDA7Ci0rICAgICAgb3V0OgotKwlmcmVlKG1zZyk7Ci0rCWZyZWVjb24oZGVmYXVsdF9yYXcp OwotKwlmcmVlY29uKHNlbGVjdGVkX3Jhdyk7Ci0rCWNsb3NlKGF1ZGl0X2ZkKTsKLSsjZW5kaWYK LSsJcmV0dXJuIHJjOwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxzX3JhbmdlX2FsbG93ZWQoc2Vj dXJpdHlfY29udGV4dF90IHNyYywgc2VjdXJpdHlfY29udGV4dF90IGRzdCkKLSt7Ci0rCXN0cnVj dCBhdl9kZWNpc2lvbiBhdmQ7Ci0rCWludCByZXR2YWw7Ci0rCWFjY2Vzc192ZWN0b3JfdCBiaXQ7 Ci0rCXNlY3VyaXR5X2NsYXNzX3QgY2xhc3M7Ci0rCi0rCWRlYnVnX2YoInNyYzolcyBkc3Q6JXMi LCBzcmMsIGRzdCk7Ci0rCWNsYXNzID0gc3RyaW5nX3RvX3NlY3VyaXR5X2NsYXNzKCJjb250ZXh0 Iik7Ci0rCWlmICghY2xhc3MpIHsKLSsJCWVycm9yKCJzdHJpbmdfdG9fc2VjdXJpdHlfY2xhc3Mg ZmFpbGVkIHRvIHRyYW5zbGF0ZSBzZWN1cml0eSBjbGFzcyBjb250ZXh0Iik7Ci0rCQlyZXR1cm4g MTsKLSsJfQotKwliaXQgPSBzdHJpbmdfdG9fYXZfcGVybShjbGFzcywgImNvbnRhaW5zIik7Ci0r CWlmICghYml0KSB7Ci0rCQllcnJvcigic3RyaW5nX3RvX2F2X3Blcm0gZmFpbGVkIHRvIHRyYW5z bGF0ZSBhdiBwZXJtIGNvbnRhaW5zIik7Ci0rCQlyZXR1cm4gMTsKLSsJfQotKwlyZXR2YWwgPSBz ZWN1cml0eV9jb21wdXRlX2F2KHNyYywgZHN0LCBjbGFzcywgYml0LCAmYXZkKTsKLSsJaWYgKHJl dHZhbCB8fCAoKGJpdCAmIGF2ZC5hbGxvd2VkKSAhPSBiaXQpKQotKwkJcmV0dXJuIDA7Ci0rCi0r CXJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50Ci0rZ2V0X3VzZXJfY29udGV4dChjb25zdCBj aGFyICpzZW5hbWUsIGNvbnN0IGNoYXIgKnJvbGUsIGNvbnN0IGNoYXIgKmx2bCwKLSsJc2VjdXJp dHlfY29udGV4dF90ICpzYykgewotKyNpZmRlZiBIQVZFX0dFVF9ERUZBVUxUX0NPTlRFWFRfV0lU SF9MRVZFTAotKwlpZiAobHZsID09IE5VTEwgfHwgbHZsWzBdID09ICdcMCcgfHwgZ2V0X2RlZmF1 bHRfY29udGV4dF93aXRoX2xldmVsKHNlbmFtZSwgbHZsLCBOVUxMLCBzYykgIT0gMCkgewotKwkg ICAgICAgIC8qIFVzZXIgbWF5IGhhdmUgcmVxdWVzdGVkIGEgbGV2ZWwgY29tcGxldGVseSBvdXRz aWRlIG9mIGhpcyAKLSsJICAgICAgICAgICBhbGxvd2VkIHJhbmdlLiBXZSBnZXQgYSBjb250ZXh0 IGp1c3QgZm9yIGF1ZGl0aW5nIGFzIHRoZQotKwkgICAgICAgICAgIHJhbmdlIGNoZWNrIGJlbG93 IHdpbGwgY2VydGFpbmx5IGZhaWwgZm9yIGRlZmF1bHQgY29udGV4dC4gKi8KLSsjZW5kaWYKLSsJ CWlmIChnZXRfZGVmYXVsdF9jb250ZXh0KHNlbmFtZSwgTlVMTCwgc2MpICE9IDApIHsKLSsJCQkq c2MgPSBOVUxMOwotKwkJCXJldHVybiAtMTsKLSsJCX0KLSsjaWZkZWYgSEFWRV9HRVRfREVGQVVM VF9DT05URVhUX1dJVEhfTEVWRUwKLSsJfQotKyNlbmRpZgotKwlpZiAocm9sZSAhPSBOVUxMICYm IHJvbGVbMF0pIHsKLSsJCWNvbnRleHRfdCBjb247Ci0rCQljaGFyICp0eXBlPU5VTEw7Ci0rCQlp ZiAoZ2V0X2RlZmF1bHRfdHlwZShyb2xlLCAmdHlwZSkgIT0gMCkgewotKwkJCWVycm9yKCJnZXRf ZGVmYXVsdF90eXBlOiBmYWlsZWQgdG8gZ2V0IGRlZmF1bHQgdHlwZSBmb3IgJyVzJyIsCi0rCQkJ CXJvbGUpOwotKwkJCWdvdG8gb3V0OwotKwkJfQotKwkJY29uID0gY29udGV4dF9uZXcoKnNjKTsK LSsJCWlmICghY29uKSB7Ci0rCQkJZ290byBvdXQ7Ci0rCQl9Ci0rCQljb250ZXh0X3JvbGVfc2V0 KGNvbiwgcm9sZSk7Ci0rCQljb250ZXh0X3R5cGVfc2V0KGNvbiwgdHlwZSk7Ci0rCQlmcmVlY29u KCpzYyk7Ci0rCQkqc2MgPSBzdHJkdXAoY29udGV4dF9zdHIoY29uKSk7Ci0rCQljb250ZXh0X2Zy ZWUoY29uKTsKLSsJCWlmICghKnNjKQotKwkJCXJldHVybiAtMTsKLSsJfQotKyNpZmRlZiBIQVZF X0dFVF9ERUZBVUxUX0NPTlRFWFRfV0lUSF9MRVZFTAotKwlpZiAobHZsICE9IE5VTEwgJiYgbHZs WzBdKSB7Ci0rCQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdGVkIHJhbmdlIGlzIG9idGFpbmVk ICovCi0rCQljb250ZXh0X3QgY29uOwotKwkJc2VjdXJpdHlfY29udGV4dF90IG9idGFpbmVkX3Jh dzsKLSsJCXNlY3VyaXR5X2NvbnRleHRfdCByZXF1ZXN0ZWRfcmF3OwotKwkJY29uID0gY29udGV4 dF9uZXcoKnNjKTsKLSsJCWlmICghY29uKSB7Ci0rCQkJZ290byBvdXQ7Ci0rCQl9Ci0rCQljb250 ZXh0X3JhbmdlX3NldChjb24sIGx2bCk7Ci0rCQlpZiAoc2VsaW51eF90cmFuc190b19yYXdfY29u dGV4dCgqc2MsICZvYnRhaW5lZF9yYXcpIDwgMCkgewotKwkJCWNvbnRleHRfZnJlZShjb24pOwot KwkJCWdvdG8gb3V0OwotKwkJfQotKwkJaWYgKHNlbGludXhfdHJhbnNfdG9fcmF3X2NvbnRleHQo Y29udGV4dF9zdHIoY29uKSwgJnJlcXVlc3RlZF9yYXcpIDwgMCkgewotKwkJCWZyZWVjb24ob2J0 YWluZWRfcmF3KTsKLSsJCQljb250ZXh0X2ZyZWUoY29uKTsKLSsJCQlnb3RvIG91dDsKLSsJCX0K LSsKLSsJCWRlYnVnKCJnZXRfdXNlcl9jb250ZXh0OiBvYnRhaW5lZCBjb250ZXh0ICclcycgcmVx dWVzdGVkIGNvbnRleHQgJyVzJyIsCi0rCQkJb2J0YWluZWRfcmF3LCByZXF1ZXN0ZWRfcmF3KTsK LSsJCWlmIChzdHJjbXAob2J0YWluZWRfcmF3LCByZXF1ZXN0ZWRfcmF3KSkgewotKwkJCS8qIHNl dCB0aGUgY29udGV4dCB0byB0aGUgcmVhbCByZXF1ZXN0ZWQgb25lIGJ1dCBmYWlsICovCi0rCQkJ ZnJlZWNvbihyZXF1ZXN0ZWRfcmF3KTsKLSsJCQlmcmVlY29uKG9idGFpbmVkX3Jhdyk7Ci0rCQkJ ZnJlZWNvbigqc2MpOwotKwkJCSpzYyA9IHN0cmR1cChjb250ZXh0X3N0cihjb24pKTsKLSsJCQlj b250ZXh0X2ZyZWUoY29uKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQl9Ci0rCQlmcmVlY29uKHJlcXVl c3RlZF9yYXcpOwotKwkJZnJlZWNvbihvYnRhaW5lZF9yYXcpOwotKwkJY29udGV4dF9mcmVlKGNv bik7Ci0rCX0KLSsjZW5kaWYKLSsJcmV0dXJuIDA7Ci0rICAgICAgb3V0OgotKwlmcmVlY29uKCpz Yyk7Ci0rCSpzYyA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStz c2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbChjaGFyICoqcm9sZSwgY29uc3QgY2hhciAqKmxldmVs LAotKyAgICBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0KQotK3sKLSsJKnJvbGUgPSBOVUxMOwotKwkq bGV2ZWwgPSBOVUxMOwotKwlpZiAodGhlX2F1dGhjdHh0KSB7Ci0rCQlpZiAodGhlX2F1dGhjdHh0 LT5yb2xlICE9IE5VTEwpIHsKLSsJCQljaGFyICpzbGFzaDsKLSsJCQkqcm9sZSA9IHhzdHJkdXAo dGhlX2F1dGhjdHh0LT5yb2xlKTsKLSsJCQlpZiAoKHNsYXNoID0gc3RyY2hyKCpyb2xlLCAnLycp KSAhPSBOVUxMKSB7Ci0rCQkJCSpzbGFzaCA9ICdcMCc7Ci0rCQkJCSpsZXZlbCA9IHNsYXNoICsg MTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSt9Ci0rCi0rLyogUmV0dXJuIHRoZSBkZWZhdWx0IHNlY3Vy aXR5IGNvbnRleHQgZm9yIHRoZSBnaXZlbiB1c2VybmFtZSAqLwotK3N0YXRpYyBpbnQKLStzc2hk X3NlbGludXhfZ2V0Y3R4YnluYW1lKGNoYXIgKnB3bmFtZSwgc2VjdXJpdHlfY29udGV4dF90ICpk ZWZhdWx0X3NjLAotKyAgICBzZWN1cml0eV9jb250ZXh0X3QgKnVzZXJfc2MsIGludCBpbmV0ZCwg QXV0aGN0eHQgKnRoZV9hdXRoY3R4dCkKLSt7Ci0rCWNoYXIgKnNlbmFtZSwgKmx2bDsKLSsJY2hh ciAqcm9sZTsKLSsJY29uc3QgY2hhciAqcmVxbHZsOwotKwlpbnQgciA9IDA7Ci0rCWNvbnRleHRf dCBjb24gPSBOVUxMOwotKwotKwlzc2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbCgmcm9sZSwgJnJl cWx2bCwgdGhlX2F1dGhjdHh0KTsKLSsKLSsjaWZkZWYgSEFWRV9HRVRTRVVTRVJCWU5BTUUKLSsJ aWYgKChyPWdldHNldXNlcmJ5bmFtZShwd25hbWUsICZzZW5hbWUsICZsdmwpKSAhPSAwKSB7Ci0r CQlzZW5hbWUgPSBOVUxMOwotKwkJbHZsID0gTlVMTDsKLSsJfQotKyNlbHNlCi0rCXNlbmFtZSA9 IHB3bmFtZTsKLSsJbHZsID0gIiI7Ci0rI2VuZGlmCi0rCi0rCWlmIChyID09IDApIHsKLSsjaWZk ZWYgSEFWRV9HRVRfREVGQVVMVF9DT05URVhUX1dJVEhfTEVWRUwKLSsJCXIgPSBnZXRfZGVmYXVs dF9jb250ZXh0X3dpdGhfbGV2ZWwoc2VuYW1lLCBsdmwsIE5VTEwsIGRlZmF1bHRfc2MpOwotKyNl bHNlCi0rCQlyID0gZ2V0X2RlZmF1bHRfY29udGV4dChzZW5hbWUsIE5VTEwsIGRlZmF1bHRfc2Mp OwotKyNlbmRpZgotKwl9Ci0rCi0rCWlmIChyID09IDApIHsKLSsJCS8qIElmIGxhdW5jaGVkIGZy b20geGluZXRkLCB3ZSBtdXN0IHVzZSBjdXJyZW50IGxldmVsICovCi0rCQlpZiAoaW5ldGQpIHsK LSsJCQlzZWN1cml0eV9jb250ZXh0X3Qgc3NoZHNjPU5VTEw7Ci0rCi0rCQkJaWYgKGdldGNvbl9y YXcoJnNzaGRzYykgPCAwKQotKwkJCQlmYXRhbCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNlY3VyaXR5 IGNvbnRleHQiKTsKLSsKLSsJCQlpZiAoKGNvbj1jb250ZXh0X25ldyhzc2hkc2MpKSA9PSBOVUxM KQotKwkJCQlmYXRhbCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNlbGludXggY29udGV4dCIpOwotKwkJ CXJlcWx2bCA9IGNvbnRleHRfcmFuZ2VfZ2V0KGNvbik7Ci0rCQkJZnJlZWNvbihzc2hkc2MpOwot KwkJCWlmIChyZXFsdmwgIT1OVUxMICYmIGx2bCAhPSBOVUxMICYmIHN0cmNtcChyZXFsdmwsIGx2 bCkgPT0gMCkKLSsJCQkgICAgLyogd2UgYWN0dWFsbHkgZG9uJ3QgY2hhbmdlIGxldmVsICovCi0r CQkJICAgIHJlcWx2bCA9ICIiOwotKwotKwkJCWRlYnVnX2YoImN1cnJlbnQgY29ubmVjdGlvbiBs ZXZlbCAnJXMnIiwgcmVxbHZsKTsKLSsKLSsJCX0KLSsKLSsJCWlmICgocmVxbHZsICE9IE5VTEwg JiYgcmVxbHZsWzBdKSB8fCAocm9sZSAhPSBOVUxMICYmIHJvbGVbMF0pKSB7Ci0rCQkJciA9IGdl dF91c2VyX2NvbnRleHQoc2VuYW1lLCByb2xlLCByZXFsdmwsIHVzZXJfc2MpOwotKwotKwkJCWlm IChyID09IDAgJiYgcmVxbHZsICE9IE5VTEwgJiYgcmVxbHZsWzBdKSB7Ci0rCQkJCXNlY3VyaXR5 X2NvbnRleHRfdCBkZWZhdWx0X2xldmVsX3NjID0gKmRlZmF1bHRfc2M7Ci0rCQkJCWlmIChyb2xl ICE9IE5VTEwgJiYgcm9sZVswXSkgewotKwkJCQkJaWYgKGdldF91c2VyX2NvbnRleHQoc2VuYW1l LCByb2xlLCBsdmwsICZkZWZhdWx0X2xldmVsX3NjKSA8IDApCi0rCQkJCQkJZGVmYXVsdF9sZXZl bF9zYyA9ICpkZWZhdWx0X3NjOwotKwkJCQl9Ci0rCQkJCS8qIHZlcmlmeSB0aGF0IHRoZSByZXF1 ZXN0ZWQgcmFuZ2UgaXMgY29udGFpbmVkIGluIHRoZSB1c2VyIHJhbmdlICovCi0rCQkJCWlmICht bHNfcmFuZ2VfYWxsb3dlZChkZWZhdWx0X2xldmVsX3NjLCAqdXNlcl9zYykpIHsKLSsJCQkJCWxv Z2l0KCJwZXJtaXQgTUxTIGxldmVsICVzICh1c2VyIHJhbmdlICVzKSIsIHJlcWx2bCwgbHZsKTsK LSsJCQkJfSBlbHNlIHsKLSsJCQkJCXIgPSAtMTsKLSsJCQkJCWVycm9yKCJkZW55IE1MUyBsZXZl bCAlcyAodXNlciByYW5nZSAlcykiLCByZXFsdmwsIGx2bCk7Ci0rCQkJCX0KLSsJCQkJaWYgKGRl ZmF1bHRfbGV2ZWxfc2MgIT0gKmRlZmF1bHRfc2MpCi0rCQkJCQlmcmVlY29uKGRlZmF1bHRfbGV2 ZWxfc2MpOwotKwkJCX0KLSsJCX0gZWxzZSB7Ci0rCQkJKnVzZXJfc2MgPSAqZGVmYXVsdF9zYzsK LSsJCX0KLSsJfQotKwlpZiAociAhPSAwKSB7Ci0rCQllcnJvcl9mKCJGYWlsZWQgdG8gZ2V0IGRl ZmF1bHQgU0VMaW51eCBzZWN1cml0eSAiCi0rCQkgICAgImNvbnRleHQgZm9yICVzIiwgcHduYW1l KTsKLSsJfQotKwotKyNpZmRlZiBIQVZFX0dFVFNFVVNFUkJZTkFNRQotKwlmcmVlKHNlbmFtZSk7 Ci0rCWZyZWUobHZsKTsKLSsjZW5kaWYKLSsKLSsJaWYgKHJvbGUgIT0gTlVMTCkKLSsJCWZyZWUo cm9sZSk7Ci0rCWlmIChjb24pCi0rCQljb250ZXh0X2ZyZWUoY29uKTsKLSsKLSsJcmV0dXJuIChy KTsKLSt9Ci0rCi0rLyogU2V0dXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBwYW1fc2VsaW51 eCAqLwotK3N0YXRpYyBpbnQKLStzc2hkX3NlbGludXhfc2V0dXBfdmFyaWFibGVzKGludCgqc2V0 X2l0KShjaGFyICosIGNvbnN0IGNoYXIgKiksIGludCBpbmV0ZCwKLSsgICAgQXV0aGN0eHQgKnRo ZV9hdXRoY3R4dCkKLSt7Ci0rCWNvbnN0IGNoYXIgKnJlcWx2bDsKLSsJY2hhciAqcm9sZTsKLSsJ Y2hhciAqdXNlX2N1cnJlbnQ7Ci0rCWludCBydjsKLSsKLSsJZGVidWczX2YoInNldHRpbmcgZXhl Y3V0aW9uIGNvbnRleHQiKTsKLSsKLSsJc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoJnJvbGUs ICZyZXFsdmwsIHRoZV9hdXRoY3R4dCk7Ci0rCi0rCXJ2ID0gc2V0X2l0KCJTRUxJTlVYX1JPTEVf UkVRVUVTVEVEIiwgcm9sZSA/IHJvbGUgOiAiIik7Ci0rCi0rCWlmIChpbmV0ZCkgewotKwkJdXNl X2N1cnJlbnQgPSAiMSI7Ci0rCX0gZWxzZSB7Ci0rCQl1c2VfY3VycmVudCA9ICIiOwotKwkJcnYg PSBydiB8fCBzZXRfaXQoIlNFTElOVVhfTEVWRUxfUkVRVUVTVEVEIiwgcmVxbHZsID8gcmVxbHZs OiAiIik7Ci0rCX0KLSsKLSsJcnYgPSBydiB8fCBzZXRfaXQoIlNFTElOVVhfVVNFX0NVUlJFTlRf UkFOR0UiLCB1c2VfY3VycmVudCk7Ci0rCi0rCWlmIChyb2xlICE9IE5VTEwpCi0rCQlmcmVlKHJv bGUpOwotKwotKwlyZXR1cm4gcnY7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStzc2hkX3NlbGludXhf c2V0dXBfcGFtX3ZhcmlhYmxlcyhpbnQgaW5ldGQsCi0rICAgIGludChwYW1fc2V0ZW52KShjaGFy ICosIGNvbnN0IGNoYXIgKiksIEF1dGhjdHh0ICp0aGVfYXV0aGN0eHQpCi0rewotKwlyZXR1cm4g c3NoZF9zZWxpbnV4X3NldHVwX3ZhcmlhYmxlcyhwYW1fc2V0ZW52LCBpbmV0ZCwgdGhlX2F1dGhj dHh0KTsKLSt9Ci0rCi0rc3RhdGljIGludAotK2RvX3NldGVudihjaGFyICpuYW1lLCBjb25zdCBj aGFyICp2YWx1ZSkKLSt7Ci0rCXJldHVybiBzZXRlbnYobmFtZSwgdmFsdWUsIDEpOwotK30KLSsK LStpbnQKLStzc2hkX3NlbGludXhfc2V0dXBfZW52X3ZhcmlhYmxlcyhpbnQgaW5ldGQsIHZvaWQg KnRoZV9hdXRoY3R4dCkKLSt7Ci0rCUF1dGhjdHh0ICphdXRoY3R4dCA9IChBdXRoY3R4dCAqKSB0 aGVfYXV0aGN0eHQ7Ci0rCXJldHVybiBzc2hkX3NlbGludXhfc2V0dXBfdmFyaWFibGVzKGRvX3Nl dGVudiwgaW5ldGQsIGF1dGhjdHh0KTsKLSt9Ci0rCi0rLyogU2V0IHRoZSBleGVjdXRpb24gY29u dGV4dCB0byB0aGUgZGVmYXVsdCBmb3IgdGhlIHNwZWNpZmllZCB1c2VyICovCi0rdm9pZAotK3Nz aGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqcHduYW1lLCBpbnQgaW5ldGQsCi0r ICAgIGludChwYW1fc2V0ZW52KShjaGFyICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKnRoZV9hdXRo Y3R4dCwgaW50IHVzZV9wYW0pCi0rewotKwlzZWN1cml0eV9jb250ZXh0X3QgdXNlcl9jdHggPSBO VUxMOwotKwlpbnQgciA9IDA7Ci0rCXNlY3VyaXR5X2NvbnRleHRfdCBkZWZhdWx0X2N0eCA9IE5V TEw7Ci0rCUF1dGhjdHh0ICphdXRoY3R4dCA9IChBdXRoY3R4dCAqKSB0aGVfYXV0aGN0eHQ7Ci0r Ci0rCWlmICghc3NoZF9zZWxpbnV4X2VuYWJsZWQoKSkKLSsJCXJldHVybjsKLSsKLSsJaWYgKHVz ZV9wYW0pIHsKLSsJCS8qIGRvIG5vdCBjb21wdXRlIGNvbnRleHQsIGp1c3Qgc2V0dXAgZW52aXJv bm1lbnQgZm9yIHBhbV9zZWxpbnV4ICovCi0rCQlpZiAoc3NoZF9zZWxpbnV4X3NldHVwX3BhbV92 YXJpYWJsZXMoaW5ldGQsIHBhbV9zZXRlbnYsIGF1dGhjdHh0KSkgewotKwkJCXN3aXRjaCAoc2Vj dXJpdHlfZ2V0ZW5mb3JjZSgpKSB7Ci0rCQkJY2FzZSAtMToKLSsJCQkJZmF0YWxfZigic2VjdXJp dHlfZ2V0ZW5mb3JjZSgpIGZhaWxlZCIpOwotKwkJCWNhc2UgMDoKLSsJCQkJZXJyb3JfZigiU0VM aW51eCBQQU0gdmFyaWFibGUgc2V0dXAgZmFpbHVyZS4gQ29udGludWluZyBpbiBwZXJtaXNzaXZl IG1vZGUuIik7Ci0rCQkJYnJlYWs7Ci0rCQkJZGVmYXVsdDoKLSsJCQkJZmF0YWxfZigiU0VMaW51 eCBQQU0gdmFyaWFibGUgc2V0dXAgZmFpbHVyZS4gQWJvcnRpbmcgY29ubmVjdGlvbi4iKTsKLSsJ CQl9Ci0rCQl9Ci0rCQlyZXR1cm47Ci0rCX0KLSsKLSsJZGVidWczX2YoInNldHRpbmcgZXhlY3V0 aW9uIGNvbnRleHQiKTsKLSsKLSsJciA9IHNzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUocHduYW1l LCAmZGVmYXVsdF9jdHgsICZ1c2VyX2N0eCwgaW5ldGQsIGF1dGhjdHh0KTsKLSsJaWYgKHIgPj0g MCkgewotKwkJciA9IHNldGV4ZWNjb24odXNlcl9jdHgpOwotKwkJaWYgKHIgPCAwKSB7Ci0rCQkJ ZXJyb3JfZigiRmFpbGVkIHRvIHNldCBTRUxpbnV4IGV4ZWN1dGlvbiBjb250ZXh0ICVzIGZvciAl cyIsCi0rCQkJICAgIHVzZXJfY3R4LCBwd25hbWUpOwotKwkJfQotKyNpZmRlZiBIQVZFX1NFVEtF WUNSRUFURUNPTgotKwkJZWxzZSBpZiAoc2V0a2V5Y3JlYXRlY29uKHVzZXJfY3R4KSA8IDApIHsK LSsJCQllcnJvcl9mKCJGYWlsZWQgdG8gc2V0IFNFTGludXgga2V5cmluZyBjcmVhdGlvbiBjb250 ZXh0ICVzIGZvciAlcyIsCi0rCQkJICAgIHVzZXJfY3R4LCBwd25hbWUpOwotKwkJfQotKyNlbmRp ZgotKwl9Ci0rCWlmICh1c2VyX2N0eCA9PSBOVUxMKSB7Ci0rCQl1c2VyX2N0eCA9IGRlZmF1bHRf Y3R4OwotKwl9Ci0rCWlmIChyIDwgMCB8fCB1c2VyX2N0eCAhPSBkZWZhdWx0X2N0eCkgewotKwkJ LyogYXVkaXQganVzdCB0aGUgY2FzZSB3aGVuIHVzZXIgY2hhbmdlZCBhIHJvbGUgb3IgdGhlcmUg d2FzCi0rCQkgICBhIGZhaWx1cmUgKi8KLSsJCXNzaGRfc2VsaW51eF9zZW5kX2F1ZGl0X21lc3Nh Z2UociA+PSAwLCBkZWZhdWx0X2N0eCwgdXNlcl9jdHgpOwotKwl9Ci0rCWlmIChyIDwgMCkgewot KwkJc3dpdGNoIChzZWN1cml0eV9nZXRlbmZvcmNlKCkpIHsKLSsJCWNhc2UgLTE6Ci0rCQkJZmF0 YWxfZigic2VjdXJpdHlfZ2V0ZW5mb3JjZSgpIGZhaWxlZCIpOwotKwkJY2FzZSAwOgotKwkJCWVy cm9yX2YoIkVMaW51eCBmYWlsdXJlLiBDb250aW51aW5nIGluIHBlcm1pc3NpdmUgbW9kZS4iKTsK LSsJCQlicmVhazsKLSsJCWRlZmF1bHQ6Ci0rCQkJZmF0YWxfZigiU0VMaW51eCBmYWlsdXJlLiBB Ym9ydGluZyBjb25uZWN0aW9uLiIpOwotKwkJfQotKwl9Ci0rCWlmICh1c2VyX2N0eCAhPSBOVUxM ICYmIHVzZXJfY3R4ICE9IGRlZmF1bHRfY3R4KQotKwkJZnJlZWNvbih1c2VyX2N0eCk7Ci0rCWlm IChkZWZhdWx0X2N0eCAhPSBOVUxMKQotKwkJZnJlZWNvbihkZWZhdWx0X2N0eCk7Ci0rCi0rCWRl YnVnM19mKCJkb25lIik7Ci0rfQotKwotKyNlbmRpZgotKyNlbmRpZgotKwotZGlmZiAtLWdpdCBh L29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgu YwotaW5kZXggYzFkNTRmMzhkLi43NDI2ZjZmNzkgMTAwNjQ0Ci0tLS0gYS9vcGVuYnNkLWNvbXBh dC9wb3J0LWxpbnV4LmMKLSsrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYwotQEAgLTEw OSwzNyArMTA5LDYgQEAgc3NoX3NlbGludXhfZ2V0Y3R4YnluYW1lKGNoYXIgKnB3bmFtZSkKLSAJ cmV0dXJuIHNjOwotIH0KLSAKLS0vKiBTZXQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHRoZSBk ZWZhdWx0IGZvciB0aGUgc3BlY2lmaWVkIHVzZXIgKi8KLS12b2lkCi0tc3NoX3NlbGludXhfc2V0 dXBfZXhlY19jb250ZXh0KGNoYXIgKnB3bmFtZSkKLS17Ci0tCWNoYXIgKnVzZXJfY3R4ID0gTlVM TDsKLS0KLS0JaWYgKCFzc2hfc2VsaW51eF9lbmFibGVkKCkpCi0tCQlyZXR1cm47Ci0tCi0tCWRl YnVnMygiJXM6IHNldHRpbmcgZXhlY3V0aW9uIGNvbnRleHQiLCBfX2Z1bmNfXyk7Ci0tCi0tCXVz ZXJfY3R4ID0gc3NoX3NlbGludXhfZ2V0Y3R4YnluYW1lKHB3bmFtZSk7Ci0tCWlmIChzZXRleGVj Y29uKHVzZXJfY3R4KSAhPSAwKSB7Ci0tCQlzd2l0Y2ggKHNlY3VyaXR5X2dldGVuZm9yY2UoKSkg ewotLQkJY2FzZSAtMToKLS0JCQlmYXRhbCgiJXM6IHNlY3VyaXR5X2dldGVuZm9yY2UoKSBmYWls ZWQiLCBfX2Z1bmNfXyk7Ci0tCQljYXNlIDA6Ci0tCQkJZXJyb3IoIiVzOiBGYWlsZWQgdG8gc2V0 IFNFTGludXggZXhlY3V0aW9uICIKLS0JCQkgICAgImNvbnRleHQgZm9yICVzIiwgX19mdW5jX18s IHB3bmFtZSk7Ci0tCQkJYnJlYWs7Ci0tCQlkZWZhdWx0OgotLQkJCWZhdGFsKCIlczogRmFpbGVk IHRvIHNldCBTRUxpbnV4IGV4ZWN1dGlvbiBjb250ZXh0ICIKLS0JCQkgICAgImZvciAlcyAoaW4g ZW5mb3JjaW5nIG1vZGUpIiwgX19mdW5jX18sIHB3bmFtZSk7Ci0tCQl9Ci0tCX0KLS0JaWYgKHVz ZXJfY3R4ICE9IE5VTEwpCi0tCQlmcmVlY29uKHVzZXJfY3R4KTsKLS0KLS0JZGVidWczKCIlczog ZG9uZSIsIF9fZnVuY19fKTsKLS19Ci0tCi0gLyogU2V0IHRoZSBUVFkgY29udGV4dCBmb3IgdGhl IHNwZWNpZmllZCB1c2VyICovCi0gdm9pZAotIHNzaF9zZWxpbnV4X3NldHVwX3B0eShjaGFyICpw d25hbWUsIGNvbnN0IGNoYXIgKnR0eSkKLUBAIC0xNTIsNyArMTIxLDExIEBAIHNzaF9zZWxpbnV4 X3NldHVwX3B0eShjaGFyICpwd25hbWUsIGNvbnN0IGNoYXIgKnR0eSkKLSAKLSAJZGVidWczKCIl czogc2V0dGluZyBUVFkgY29udGV4dCBvbiAlcyIsIF9fZnVuY19fLCB0dHkpOwotIAotLQl1c2Vy X2N0eCA9IHNzaF9zZWxpbnV4X2dldGN0eGJ5bmFtZShwd25hbWUpOwotKwlpZiAoZ2V0ZXhlY2Nv bigmdXNlcl9jdHgpICE9IDApIHsKLSsJCWVycm9yX2YoImdldGV4ZWNjb246ICVzIiwgc3RyZXJy b3IoZXJybm8pKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0gCi0gCS8qIFhYWDogc2hvdWxkIHRo ZXNlIGNhbGxzIGZhdGFsKCkgdXBvbiBmYWlsdXJlIGluIGVuZm9yY2luZyBtb2RlPyAqLwotIAot ZGlmZiAtLWdpdCBhL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBiL29wZW5ic2QtY29tcGF0 L3BvcnQtbGludXguaAotaW5kZXggOTU5NDMwZGUxLi4yNmM1Zjc3M2IgMTAwNjQ0Ci0tLS0gYS9v cGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmgKLSsrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGlu dXguaAotQEAgLTIwLDkgKzIwLDEyIEBACi0gI2lmZGVmIFdJVEhfU0VMSU5VWAotIGludCBzc2hf c2VsaW51eF9lbmFibGVkKHZvaWQpOwotIHZvaWQgc3NoX3NlbGludXhfc2V0dXBfcHR5KGNoYXIg KiwgY29uc3QgY2hhciAqKTsKLS12b2lkIHNzaF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChj aGFyICopOwotIHZvaWQgc3NoX3NlbGludXhfY2hhbmdlX2NvbnRleHQoY29uc3QgY2hhciAqKTsK LSB2b2lkIHNzaF9zZWxpbnV4X3NldGZzY3JlYXRlY29uKGNvbnN0IGNoYXIgKik7Ci0rCi0raW50 IHNzaGRfc2VsaW51eF9lbmFibGVkKHZvaWQpOwotK3ZvaWQgc3NoZF9zZWxpbnV4X3NldHVwX2V4 ZWNfY29udGV4dChjaGFyICosIGludCwgaW50KGNoYXIgKiwgY29uc3QgY2hhciAqKSwgdm9pZCAq LCBpbnQpOwotK2ludCBzc2hkX3NlbGludXhfc2V0dXBfZW52X3ZhcmlhYmxlcyhpbnQgaW5ldGQs IHZvaWQgKik7Ci0gI2VuZGlmCi0gCi0gI2lmZGVmIExJTlVYX09PTV9BREpVU1QKLWRpZmYgLS1n aXQgYS9wbGF0Zm9ybS5jIGIvcGxhdGZvcm0uYwotaW5kZXggZmQxYTdhN2MyLi42NmQwYzJhNmIg MTAwNjQ0Ci0tLS0gYS9wbGF0Zm9ybS5jCi0rKysgYi9wbGF0Zm9ybS5jCi1AQCAtMzMsNiArMzMs OCBAQAotICNpbmNsdWRlICJvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIgotIAotIGV4 dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0rZXh0ZXJuIGludCBpbmV0ZF9mbGFnOwotK2V4 dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OwotIAotIC8qIHJldHVybiAxIGlmIHdlIGFyZSBy dW5uaW5nIHdpdGggcHJpdmlsZWdlIHRvIHN3YXAgVUlEcywgMCBvdGhlcndpc2UgKi8KLSBpbnQK LUBAIC01NSw3ICs1Nyw3IEBAIHBsYXRmb3JtX3NldHVzZXJjb250ZXh0KHN0cnVjdCBwYXNzd2Qg KnB3KQotIHsKLSAjaWZkZWYgV0lUSF9TRUxJTlVYCi0gCS8qIENhY2hlIHNlbGludXggc3RhdHVz IGZvciBsYXRlciB1c2UgKi8KLS0JKHZvaWQpc3NoX3NlbGludXhfZW5hYmxlZCgpOwotKwkodm9p ZClzc2hkX3NlbGludXhfZW5hYmxlZCgpOwotICNlbmRpZgotIAotICNpZmRlZiBVU0VfU09MQVJJ U19QUk9KRUNUUwotQEAgLTE0MCw3ICsxNDIsOSBAQCBwbGF0Zm9ybV9zZXR1c2VyY29udGV4dF9w b3N0X2dyb3VwcyhzdHJ1Y3QgcGFzc3dkICpwdykKLSAJfQotICNlbmRpZiAvKiBIQVZFX1NFVFBD UkVEICovCi0gI2lmZGVmIFdJVEhfU0VMSU5VWAotLQlzc2hfc2VsaW51eF9zZXR1cF9leGVjX2Nv bnRleHQocHctPnB3X25hbWUpOwotKwlzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KHB3 LT5wd19uYW1lLAotKwkgICAgaW5ldGRfZmxhZywgZG9fcGFtX3B1dGVudiwgdGhlX2F1dGhjdHh0 LAotKwkgICAgb3B0aW9ucy51c2VfcGFtKTsKLSAjZW5kaWYKLSB9Ci0gCi1kaWZmIC0tZ2l0IGEv c3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24uYwotaW5kZXggZTlhNDg4ZDA4Li45Njc3Mzdj NWIgMTAwNjQ0Ci0tLS0gYS9zc2hkLXNlc3Npb24uYwotKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBA IC0xMjMsNyArMTIzLDcgQEAgY2hhciAqY29uZmlnX2ZpbGVfbmFtZSA9IF9QQVRIX1NFUlZFUl9D T05GSUdfRklMRTsKLSBpbnQgZGVidWdfZmxhZyA9IDA7Ci0gCi0gLyogRmxhZyBpbmRpY2F0aW5n IHRoYXQgdGhlIGRhZW1vbiBpcyBiZWluZyBzdGFydGVkIGZyb20gaW5ldGQuICovCi0tc3RhdGlj IGludCBpbmV0ZF9mbGFnID0gMDsKLStpbnQgaW5ldGRfZmxhZyA9IDA7Ci0gCi0gLyogZGVidWcg Z29lcyB0byBzdGRlcnIgdW5sZXNzIGluZXRkX2ZsYWcgaXMgc2V0ICovCi0gc3RhdGljIGludCBs b2dfc3RkZXJyID0gMDsKLUBAIC0xMjc0LDYgKzEyNzQsMTEgQEAgbWFpbihpbnQgYWMsIGNoYXIg KiphdikKLSAJCXJlc3RvcmVfdWlkKCk7Ci0gCX0KLSAjZW5kaWYKLSsjaWZkZWYgV0lUSF9TRUxJ TlVYCi0rCXNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoYXV0aGN0eHQtPnB3LT5wd19u YW1lLAotKwkgICAgaW5ldGRfZmxhZywgZG9fcGFtX3B1dGVudiwgdGhlX2F1dGhjdHh0LAotKwkg ICAgb3B0aW9ucy51c2VfcGFtKTsKLSsjZW5kaWYKLSAjaWZkZWYgVVNFX1BBTQotIAlpZiAob3B0 aW9ucy51c2VfcGFtKSB7Ci0gCQlkb19wYW1fc2V0Y3JlZCgpOwotLS0gCi0yLjUzLjAKLQoKZGlm ZiAtLWdpdCBhLzAwMDMtSW1wbGVtZW50LVNFTGludXgtZW52aXJvbm1lbnQtdmFyaWFibGUtc2V0 dXAtZm9yLXN1Yi5wYXRjaCBiLzAwMDMtSW1wbGVtZW50LVNFTGludXgtZW52aXJvbm1lbnQtdmFy aWFibGUtc2V0dXAtZm9yLXN1Yi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi42MmVkZjJjCi0tLSAvZGV2L251bGwKKysrIGIvMDAwMy1JbXBsZW1lbnQtU0VMaW51eC1l bnZpcm9ubWVudC12YXJpYWJsZS1zZXR1cC1mb3Itc3ViLnBhdGNoCkBAIC0wLDAgKzEsNjc3IEBA CitGcm9tIGM1ZGYwYmZiYjhkZTBiMTUzNjQ3NmYyMDBhOWFmM2VjZjBjMTA0ODUgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5j b20+CitEYXRlOiBNb24sIDEzIEFwciAyMDI2IDE0OjA2OjQ3ICswMjAwCitTdWJqZWN0OiBbUEFU Q0ggMDMvNTNdIEltcGxlbWVudCBTRUxpbnV4IGVudmlyb25tZW50IHZhcmlhYmxlIHNldHVwIGZv cgorIHN1YnByb2Nlc3MgZXhlY3V0aW9uCisKK29wZW5zc2gtNi42cDEtc2VsaW51eC1lbnYtc2V0 dXAKKworSW1wbGVtZW50IGNvbXByZWhlbnNpdmUgU0VMaW51eCBjb250ZXh0IG1hbmFnZW1lbnQg Zm9yIHNzaGQsIGluY2x1ZGluZworcm9sZSBzZWxlY3Rpb24sIE1MUyBsZXZlbCB2YWxpZGF0aW9u LCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0dXAgZm9yCitwYW1fc2VsaW51eCBpbnRlZ3Jh dGlvbi4KKworQ2hhbmdlczoKKy0gb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC1zc2hkLmM6IE5l dyBmaWxlIHdpdGggU0VMaW51eCBjb250ZXh0CisgIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGluY2x1 ZGluZyBzc2hkX3NlbGludXhfZ2V0Y3R4YnluYW1lKCksCisgIHNzaGRfc2VsaW51eF9zZXR1cF9l eGVjX2NvbnRleHQoKSwgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlIHNldHVwCistIG9wZW5ic2Qt Y29tcGF0L01ha2VmaWxlLmluOiBBZGQgcG9ydC1saW51eC1zc2hkLm8gdG8gYnVpbGQKKy0gb3Bl bmJzZC1jb21wYXQvcG9ydC1saW51eC5jOiBSZW1vdmUgb2xkIHNzaF9zZWxpbnV4X3NldHVwX2V4 ZWNfY29udGV4dCgpLAorICB1cGRhdGUgc3NoX3NlbGludXhfc2V0dXBfcHR5KCkgdG8gdXNlIGdl dGV4ZWNjb24oKQorLSBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmg6IFVwZGF0ZSBmdW5jdGlv biBkZWNsYXJhdGlvbnMgZm9yCisgIHNzaGQtc3BlY2lmaWMgU0VMaW51eCBmdW5jdGlvbnMKKy0g cGxhdGZvcm0uYzogUmVwbGFjZSBzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoKSB3aXRo CisgIHNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoKSBhbmQgcGFzcyBhZGRpdGlvbmFs IHBhcmFtZXRlcnMKKyAgKGluZXRkX2ZsYWcsIGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRoY3R4dCwg b3B0aW9ucy51c2VfcGFtKQorLSBzc2hkLXNlc3Npb24uYzogQWRkIFNFTGludXggZXhlY3V0aW9u IGNvbnRleHQgc2V0dXAgY2FsbCBpbiBtYWluKCkKKy0gYXV0aC1wYW0uYzogQ2hhbmdlIGRvX3Bh bV9wdXRlbnYoKSB2YWx1ZSBwYXJhbWV0ZXIgdG8gY29uc3QgY2hhciAqCistIGF1dGgtcGFtLmg6 IFVwZGF0ZSBkb19wYW1fcHV0ZW52KCkgc2lnbmF0dXJlIGFuZCBhZGQgZG9fcGFtX2NoYXV0aHRv aygpCisgIGRlY2xhcmF0aW9uCisKK0NvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8 bm9yZXBseUBhbnRocm9waWMuY29tPgorLS0tCisgYXV0aC1wYW0uYyAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDIgKy0KKyBhdXRoLXBhbS5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyAr LQorIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluICAgICAgIHwgICAzICstCisgb3BlbmJzZC1j b21wYXQvcG9ydC1saW51eC1zc2hkLmMgfCA0NTQgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKworIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYyAgICAgIHwgIDM3ICstLQorIG9wZW5i c2QtY29tcGF0L3BvcnQtbGludXguaCAgICAgIHwgICA1ICstCisgcGxhdGZvcm0uYyAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDggKy0KKyBzc2hkLXNlc3Npb24uYyAgICAgICAgICAgICAgICAg ICB8ICAgNyArLQorIDggZmlsZXMgY2hhbmdlZCwgNDgwIGluc2VydGlvbnMoKyksIDM5IGRlbGV0 aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNz aGQuYworCitkaWZmIC0tZ2l0IGEvYXV0aC1wYW0uYyBiL2F1dGgtcGFtLmMKK2luZGV4IDI5NjA3 ZTA0MS4uM2YzNDJmOWUxIDEwMDY0NAorLS0tIGEvYXV0aC1wYW0uYworKysrIGIvYXV0aC1wYW0u YworQEAgLTExNDUsNyArMTE0NSw3IEBAIGlzX3BhbV9zZXNzaW9uX29wZW4odm9pZCkKKyAgKiBk dXJpbmcgdGhlIHNzaCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLgorICAqLworIGludAorLWRvX3Bh bV9wdXRlbnYoY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCisrZG9fcGFtX3B1dGVudihjaGFyICpu YW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CisgCWludCByZXQgPSAxOworIAljaGFyICpjb21w b3VuZDsKK2RpZmYgLS1naXQgYS9hdXRoLXBhbS5oIGIvYXV0aC1wYW0uaAoraW5kZXggNDkxMzM2 NzAxLi5mOTE2N2NmYzggMTAwNjQ0CistLS0gYS9hdXRoLXBhbS5oCisrKysgYi9hdXRoLXBhbS5o CitAQCAtMzIsNyArMzIsOCBAQCB2b2lkIGZpbmlzaF9wYW0odm9pZCk7CisgdV9pbnQgZG9fcGFt X2FjY291bnQodm9pZCk7Cisgdm9pZCBkb19wYW1fc2Vzc2lvbihzdHJ1Y3Qgc3NoICopOworIHZv aWQgZG9fcGFtX3NldGNyZWQodm9pZCk7CistaW50IGRvX3BhbV9wdXRlbnYoY2hhciAqLCBjaGFy ICopOworK3ZvaWQgZG9fcGFtX2NoYXV0aHRvayh2b2lkKTsKKytpbnQgZG9fcGFtX3B1dGVudihj aGFyICosIGNvbnN0IGNoYXIgKik7CisgY2hhciAqKiBmZXRjaF9wYW1fZW52aXJvbm1lbnQodm9p ZCk7CisgY2hhciAqKiBmZXRjaF9wYW1fY2hpbGRfZW52aXJvbm1lbnQodm9pZCk7Cisgdm9pZCBm cmVlX3BhbV9lbnZpcm9ubWVudChjaGFyICoqKTsKK2RpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBh dC9NYWtlZmlsZS5pbiBiL29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluCitpbmRleCA1M2M4N2Ri NmQuLjM5NTMxYWU3NyAxMDA2NDQKKy0tLSBhL29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluCisr KysgYi9vcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbgorQEAgLTEwMiw3ICsxMDIsOCBAQCBQT1JU Uz0JcG9ydC1haXgubyBcCisgCXBvcnQtcHJuZ2QubyBcCisgCXBvcnQtc29sYXJpcy5vIFwKKyAJ cG9ydC1uZXQubyBcCistCXBvcnQtdXcubworKwlwb3J0LXV3Lm8gXAorKwlwb3J0LWxpbnV4LXNz aGQubworIAorIC5jLm86CisgCSQoQ0MpICQoQ0ZMQUdTX05PUElFKSAkKFBJQ0ZMQUcpICQoQ1BQ RkxBR1MpIC1jICQ8CitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC1zc2hk LmMgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYworbmV3IGZpbGUgbW9kZSAxMDA2 NDQKK2luZGV4IDAwMDAwMDAwMC4uYWIwODNhNjM3CistLS0gL2Rldi9udWxsCisrKysgYi9vcGVu YnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYworQEAgLTAsMCArMSw0NTQgQEAKKysvKgorKyAq IENvcHlyaWdodCAoYykgMjAwNSBEYW5pZWwgV2Fsc2ggPGR3YWxzaEByZWRoYXQuY29tPgorKyAq IENvcHlyaWdodCAoYykgMjAxNCBQZXRyIExhdXRyYmFjaCA8cGxhdXRyYmFAcmVkaGF0LmNvbT4K KysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRl IHRoaXMgc29mdHdhcmUgZm9yIGFueQorKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBp cyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKysgKiBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgor KyAqCisrICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1Ig RElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisrICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FS RSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorKyAqIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S CisrICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyBPUiBBTlkgREFNQUdFUworKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorKyAqIEFDVElPTiBPRiBDT05U UkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9G CisrICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJ UyBTT0ZUV0FSRS4KKysgKi8KKysKKysvKgorKyAqIExpbnV4LXNwZWNpZmljIHBvcnRhYmlsaXR5 IGNvZGUgLSBqdXN0IFNFTGludXggc3VwcG9ydCBmb3Igc3NoZCBhdCBwcmVzZW50CisrICovCisr CisrI2luY2x1ZGUgImluY2x1ZGVzLmgiCisrCisrI2lmIGRlZmluZWQoV0lUSF9TRUxJTlVYKSB8 fCBkZWZpbmVkKExJTlVYX09PTV9BREpVU1QpCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1 ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4K KysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrI2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRlICJ4 bWFsbG9jLmgiCisrI2luY2x1ZGUgIm1pc2MuaCIgICAgICAvKiBzZXJ2Y29uZi5oIG5lZWRzIG1p c2MuaCBmb3Igc3RydWN0IEZvcndhcmRPcHRpb25zICovCisrI2luY2x1ZGUgInNlcnZjb25mLmgi CisrI2luY2x1ZGUgInBvcnQtbGludXguaCIKKysjaW5jbHVkZSAic3Noa2V5LmgiCisrI2luY2x1 ZGUgImhvc3RmaWxlLmgiCisrI2luY2x1ZGUgImF1dGguaCIKKysKKysjaWZkZWYgV0lUSF9TRUxJ TlVYCisrI2luY2x1ZGUgPHNlbGludXgvc2VsaW51eC5oPgorKyNpbmNsdWRlIDxzZWxpbnV4L2Nv bnRleHQuaD4KKysjaW5jbHVkZSA8c2VsaW51eC9nZXRfY29udGV4dF9saXN0Lmg+CisrI2luY2x1 ZGUgPHNlbGludXgvZ2V0X2RlZmF1bHRfdHlwZS5oPgorKworKyNpZmRlZiBIQVZFX0xJTlVYX0FV RElUCisrI2luY2x1ZGUgPGxpYmF1ZGl0Lmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNlbmRp ZgorKworKy8qIFdyYXBwZXIgYXJvdW5kIGlzX3NlbGludXhfZW5hYmxlZCgpIHRvIGxvZyBpdHMg cmV0dXJuIHZhbHVlIG9uY2Ugb25seSAqLworK2ludAorK3NzaGRfc2VsaW51eF9lbmFibGVkKHZv aWQpCisreworKwlzdGF0aWMgaW50IGVuYWJsZWQgPSAtMTsKKysKKysJaWYgKGVuYWJsZWQgPT0g LTEpIHsKKysJCWVuYWJsZWQgPSAoaXNfc2VsaW51eF9lbmFibGVkKCkgPT0gMSk7CisrCQlkZWJ1 ZygiU0VMaW51eCBzdXBwb3J0ICVzIiwgZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIp OworKwl9CisrCisrCXJldHVybiAoZW5hYmxlZCk7CisrfQorKworKy8qIFNlbmQgYXVkaXQgbWVz c2FnZSAqLworK3N0YXRpYyBpbnQKKytzc2hkX3NlbGludXhfc2VuZF9hdWRpdF9tZXNzYWdlKGlu dCBzdWNjZXNzLCBzZWN1cml0eV9jb250ZXh0X3QgZGVmYXVsdF9jb250ZXh0LAorKwkJICAgICAg IHNlY3VyaXR5X2NvbnRleHRfdCBzZWxlY3RlZF9jb250ZXh0KQorK3sKKysJaW50IHJjPTA7Cisr I2lmZGVmIEhBVkVfTElOVVhfQVVESVQKKysJY2hhciAqbXNnID0gTlVMTDsKKysJaW50IGF1ZGl0 X2ZkID0gYXVkaXRfb3BlbigpOworKwlzZWN1cml0eV9jb250ZXh0X3QgZGVmYXVsdF9yYXc9TlVM TDsKKysJc2VjdXJpdHlfY29udGV4dF90IHNlbGVjdGVkX3Jhdz1OVUxMOworKwlyYyA9IC0xOwor KwlpZiAoYXVkaXRfZmQgPCAwKSB7CisrCQlpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09 IEVQUk9UT05PU1VQUE9SVCB8fAorKwkJCQkJZXJybm8gPT0gRUFGTk9TVVBQT1JUKQorKwkJCQly ZXR1cm4gMDsgLyogTm8gYXVkaXQgc3VwcG9ydCBpbiBrZXJuZWwgKi8KKysJCWVycm9yKCJFcnJv ciBjb25uZWN0aW5nIHRvIGF1ZGl0IHN5c3RlbS4iKTsKKysJCXJldHVybiByYzsKKysJfQorKwlp ZiAoc2VsaW51eF90cmFuc190b19yYXdfY29udGV4dChkZWZhdWx0X2NvbnRleHQsICZkZWZhdWx0 X3JhdykgPCAwKSB7CisrCQllcnJvcigiRXJyb3IgdHJhbnNsYXRpbmcgZGVmYXVsdCBjb250ZXh0 LiIpOworKwkJZGVmYXVsdF9yYXcgPSBOVUxMOworKwl9CisrCWlmIChzZWxpbnV4X3RyYW5zX3Rv X3Jhd19jb250ZXh0KHNlbGVjdGVkX2NvbnRleHQsICZzZWxlY3RlZF9yYXcpIDwgMCkgeworKwkJ ZXJyb3IoIkVycm9yIHRyYW5zbGF0aW5nIHNlbGVjdGVkIGNvbnRleHQuIik7CisrCQlzZWxlY3Rl ZF9yYXcgPSBOVUxMOworKwl9CisrCWlmIChhc3ByaW50ZigmbXNnLCAic3NoZDogZGVmYXVsdC1j b250ZXh0PSVzIHNlbGVjdGVkLWNvbnRleHQ9JXMiLAorKwkJICAgICBkZWZhdWx0X3JhdyA/IGRl ZmF1bHRfcmF3IDogKGRlZmF1bHRfY29udGV4dCA/IGRlZmF1bHRfY29udGV4dDogIj8iKSwKKysJ CSAgICAgc2VsZWN0ZWRfY29udGV4dCA/IHNlbGVjdGVkX3JhdyA6IChzZWxlY3RlZF9jb250ZXh0 ID8gc2VsZWN0ZWRfY29udGV4dCA6Ij8iKSkgPCAwKSB7CisrCQllcnJvcigiRXJyb3IgYWxsb2Nh dGluZyBtZW1vcnkuIik7CisrCQlnb3RvIG91dDsKKysJfQorKwlpZiAoYXVkaXRfbG9nX3VzZXJf bWVzc2FnZShhdWRpdF9mZCwgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSwKKysJCQkJICAgbXNnLCBO VUxMLCBOVUxMLCBOVUxMLCBzdWNjZXNzKSA8PSAwKSB7CisrCQllcnJvcigiRXJyb3Igc2VuZGlu ZyBhdWRpdCBtZXNzYWdlLiIpOworKwkJZ290byBvdXQ7CisrCX0KKysJcmMgPSAwOworKyAgICAg IG91dDoKKysJZnJlZShtc2cpOworKwlmcmVlY29uKGRlZmF1bHRfcmF3KTsKKysJZnJlZWNvbihz ZWxlY3RlZF9yYXcpOworKwljbG9zZShhdWRpdF9mZCk7CisrI2VuZGlmCisrCXJldHVybiByYzsK Kyt9CisrCisrc3RhdGljIGludAorK21sc19yYW5nZV9hbGxvd2VkKHNlY3VyaXR5X2NvbnRleHRf dCBzcmMsIHNlY3VyaXR5X2NvbnRleHRfdCBkc3QpCisreworKwlzdHJ1Y3QgYXZfZGVjaXNpb24g YXZkOworKwlpbnQgcmV0dmFsOworKwlhY2Nlc3NfdmVjdG9yX3QgYml0OworKwlzZWN1cml0eV9j bGFzc190IGNsYXNzOworKworKwlkZWJ1Z19mKCJzcmM6JXMgZHN0OiVzIiwgc3JjLCBkc3QpOwor KwljbGFzcyA9IHN0cmluZ190b19zZWN1cml0eV9jbGFzcygiY29udGV4dCIpOworKwlpZiAoIWNs YXNzKSB7CisrCQllcnJvcigic3RyaW5nX3RvX3NlY3VyaXR5X2NsYXNzIGZhaWxlZCB0byB0cmFu c2xhdGUgc2VjdXJpdHkgY2xhc3MgY29udGV4dCIpOworKwkJcmV0dXJuIDE7CisrCX0KKysJYml0 ID0gc3RyaW5nX3RvX2F2X3Blcm0oY2xhc3MsICJjb250YWlucyIpOworKwlpZiAoIWJpdCkgewor KwkJZXJyb3IoInN0cmluZ190b19hdl9wZXJtIGZhaWxlZCB0byB0cmFuc2xhdGUgYXYgcGVybSBj b250YWlucyIpOworKwkJcmV0dXJuIDE7CisrCX0KKysJcmV0dmFsID0gc2VjdXJpdHlfY29tcHV0 ZV9hdihzcmMsIGRzdCwgY2xhc3MsIGJpdCwgJmF2ZCk7CisrCWlmIChyZXR2YWwgfHwgKChiaXQg JiBhdmQuYWxsb3dlZCkgIT0gYml0KSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4gMTsKKyt9 CisrCisrc3RhdGljIGludAorK2dldF91c2VyX2NvbnRleHQoY29uc3QgY2hhciAqc2VuYW1lLCBj b25zdCBjaGFyICpyb2xlLCBjb25zdCBjaGFyICpsdmwsCisrCXNlY3VyaXR5X2NvbnRleHRfdCAq c2MpIHsKKysjaWZkZWYgSEFWRV9HRVRfREVGQVVMVF9DT05URVhUX1dJVEhfTEVWRUwKKysJaWYg KGx2bCA9PSBOVUxMIHx8IGx2bFswXSA9PSAnXDAnIHx8IGdldF9kZWZhdWx0X2NvbnRleHRfd2l0 aF9sZXZlbChzZW5hbWUsIGx2bCwgTlVMTCwgc2MpICE9IDApIHsKKysJICAgICAgICAvKiBVc2Vy IG1heSBoYXZlIHJlcXVlc3RlZCBhIGxldmVsIGNvbXBsZXRlbHkgb3V0c2lkZSBvZiBoaXMgCisr CSAgICAgICAgICAgYWxsb3dlZCByYW5nZS4gV2UgZ2V0IGEgY29udGV4dCBqdXN0IGZvciBhdWRp dGluZyBhcyB0aGUKKysJICAgICAgICAgICByYW5nZSBjaGVjayBiZWxvdyB3aWxsIGNlcnRhaW5s eSBmYWlsIGZvciBkZWZhdWx0IGNvbnRleHQuICovCisrI2VuZGlmCisrCQlpZiAoZ2V0X2RlZmF1 bHRfY29udGV4dChzZW5hbWUsIE5VTEwsIHNjKSAhPSAwKSB7CisrCQkJKnNjID0gTlVMTDsKKysJ CQlyZXR1cm4gLTE7CisrCQl9CisrI2lmZGVmIEhBVkVfR0VUX0RFRkFVTFRfQ09OVEVYVF9XSVRI X0xFVkVMCisrCX0KKysjZW5kaWYKKysJaWYgKHJvbGUgIT0gTlVMTCAmJiByb2xlWzBdKSB7Cisr CQljb250ZXh0X3QgY29uOworKwkJY2hhciAqdHlwZT1OVUxMOworKwkJaWYgKGdldF9kZWZhdWx0 X3R5cGUocm9sZSwgJnR5cGUpICE9IDApIHsKKysJCQllcnJvcigiZ2V0X2RlZmF1bHRfdHlwZTog ZmFpbGVkIHRvIGdldCBkZWZhdWx0IHR5cGUgZm9yICclcyciLAorKwkJCQlyb2xlKTsKKysJCQln b3RvIG91dDsKKysJCX0KKysJCWNvbiA9IGNvbnRleHRfbmV3KCpzYyk7CisrCQlpZiAoIWNvbikg eworKwkJCWdvdG8gb3V0OworKwkJfQorKwkJY29udGV4dF9yb2xlX3NldChjb24sIHJvbGUpOwor KwkJY29udGV4dF90eXBlX3NldChjb24sIHR5cGUpOworKwkJZnJlZWNvbigqc2MpOworKwkJKnNj ID0gc3RyZHVwKGNvbnRleHRfc3RyKGNvbikpOworKwkJY29udGV4dF9mcmVlKGNvbik7CisrCQlp ZiAoISpzYykKKysJCQlyZXR1cm4gLTE7CisrCX0KKysjaWZkZWYgSEFWRV9HRVRfREVGQVVMVF9D T05URVhUX1dJVEhfTEVWRUwKKysJaWYgKGx2bCAhPSBOVUxMICYmIGx2bFswXSkgeworKwkJLyog dmVyaWZ5IHRoYXQgdGhlIHJlcXVlc3RlZCByYW5nZSBpcyBvYnRhaW5lZCAqLworKwkJY29udGV4 dF90IGNvbjsKKysJCXNlY3VyaXR5X2NvbnRleHRfdCBvYnRhaW5lZF9yYXc7CisrCQlzZWN1cml0 eV9jb250ZXh0X3QgcmVxdWVzdGVkX3JhdzsKKysJCWNvbiA9IGNvbnRleHRfbmV3KCpzYyk7Cisr CQlpZiAoIWNvbikgeworKwkJCWdvdG8gb3V0OworKwkJfQorKwkJY29udGV4dF9yYW5nZV9zZXQo Y29uLCBsdmwpOworKwkJaWYgKHNlbGludXhfdHJhbnNfdG9fcmF3X2NvbnRleHQoKnNjLCAmb2J0 YWluZWRfcmF3KSA8IDApIHsKKysJCQljb250ZXh0X2ZyZWUoY29uKTsKKysJCQlnb3RvIG91dDsK KysJCX0KKysJCWlmIChzZWxpbnV4X3RyYW5zX3RvX3Jhd19jb250ZXh0KGNvbnRleHRfc3RyKGNv biksICZyZXF1ZXN0ZWRfcmF3KSA8IDApIHsKKysJCQlmcmVlY29uKG9idGFpbmVkX3Jhdyk7Cisr CQkJY29udGV4dF9mcmVlKGNvbik7CisrCQkJZ290byBvdXQ7CisrCQl9CisrCisrCQlkZWJ1Zygi Z2V0X3VzZXJfY29udGV4dDogb2J0YWluZWQgY29udGV4dCAnJXMnIHJlcXVlc3RlZCBjb250ZXh0 ICclcyciLAorKwkJCW9idGFpbmVkX3JhdywgcmVxdWVzdGVkX3Jhdyk7CisrCQlpZiAoc3RyY21w KG9idGFpbmVkX3JhdywgcmVxdWVzdGVkX3JhdykpIHsKKysJCQkvKiBzZXQgdGhlIGNvbnRleHQg dG8gdGhlIHJlYWwgcmVxdWVzdGVkIG9uZSBidXQgZmFpbCAqLworKwkJCWZyZWVjb24ocmVxdWVz dGVkX3Jhdyk7CisrCQkJZnJlZWNvbihvYnRhaW5lZF9yYXcpOworKwkJCWZyZWVjb24oKnNjKTsK KysJCQkqc2MgPSBzdHJkdXAoY29udGV4dF9zdHIoY29uKSk7CisrCQkJY29udGV4dF9mcmVlKGNv bik7CisrCQkJcmV0dXJuIC0xOworKwkJfQorKwkJZnJlZWNvbihyZXF1ZXN0ZWRfcmF3KTsKKysJ CWZyZWVjb24ob2J0YWluZWRfcmF3KTsKKysJCWNvbnRleHRfZnJlZShjb24pOworKwl9CisrI2Vu ZGlmCisrCXJldHVybiAwOworKyAgICAgIG91dDoKKysJZnJlZWNvbigqc2MpOworKwkqc2MgPSBO VUxMOworKwlyZXR1cm4gLTE7CisrfQorKworK3N0YXRpYyB2b2lkCisrc3NoX3NlbGludXhfZ2V0 X3JvbGVfbGV2ZWwoY2hhciAqKnJvbGUsIGNvbnN0IGNoYXIgKipsZXZlbCwKKysgICAgQXV0aGN0 eHQgKnRoZV9hdXRoY3R4dCkKKyt7CisrCSpyb2xlID0gTlVMTDsKKysJKmxldmVsID0gTlVMTDsK KysJaWYgKHRoZV9hdXRoY3R4dCkgeworKwkJaWYgKHRoZV9hdXRoY3R4dC0+cm9sZSAhPSBOVUxM KSB7CisrCQkJY2hhciAqc2xhc2g7CisrCQkJKnJvbGUgPSB4c3RyZHVwKHRoZV9hdXRoY3R4dC0+ cm9sZSk7CisrCQkJaWYgKChzbGFzaCA9IHN0cmNocigqcm9sZSwgJy8nKSkgIT0gTlVMTCkgewor KwkJCQkqc2xhc2ggPSAnXDAnOworKwkJCQkqbGV2ZWwgPSBzbGFzaCArIDE7CisrCQkJfQorKwkJ fQorKwl9CisrfQorKworKy8qIFJldHVybiB0aGUgZGVmYXVsdCBzZWN1cml0eSBjb250ZXh0IGZv ciB0aGUgZ2l2ZW4gdXNlcm5hbWUgKi8KKytzdGF0aWMgaW50Cisrc3NoZF9zZWxpbnV4X2dldGN0 eGJ5bmFtZShjaGFyICpwd25hbWUsIHNlY3VyaXR5X2NvbnRleHRfdCAqZGVmYXVsdF9zYywKKysg ICAgc2VjdXJpdHlfY29udGV4dF90ICp1c2VyX3NjLCBpbnQgaW5ldGQsIEF1dGhjdHh0ICp0aGVf YXV0aGN0eHQpCisreworKwljaGFyICpzZW5hbWUsICpsdmw7CisrCWNoYXIgKnJvbGU7CisrCWNv bnN0IGNoYXIgKnJlcWx2bDsKKysJaW50IHIgPSAwOworKwljb250ZXh0X3QgY29uID0gTlVMTDsK KysKKysJc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoJnJvbGUsICZyZXFsdmwsIHRoZV9hdXRo Y3R4dCk7CisrCisrI2lmZGVmIEhBVkVfR0VUU0VVU0VSQllOQU1FCisrCWlmICgocj1nZXRzZXVz ZXJieW5hbWUocHduYW1lLCAmc2VuYW1lLCAmbHZsKSkgIT0gMCkgeworKwkJc2VuYW1lID0gTlVM TDsKKysJCWx2bCA9IE5VTEw7CisrCX0KKysjZWxzZQorKwlzZW5hbWUgPSBwd25hbWU7CisrCWx2 bCA9ICIiOworKyNlbmRpZgorKworKwlpZiAociA9PSAwKSB7CisrI2lmZGVmIEhBVkVfR0VUX0RF RkFVTFRfQ09OVEVYVF9XSVRIX0xFVkVMCisrCQlyID0gZ2V0X2RlZmF1bHRfY29udGV4dF93aXRo X2xldmVsKHNlbmFtZSwgbHZsLCBOVUxMLCBkZWZhdWx0X3NjKTsKKysjZWxzZQorKwkJciA9IGdl dF9kZWZhdWx0X2NvbnRleHQoc2VuYW1lLCBOVUxMLCBkZWZhdWx0X3NjKTsKKysjZW5kaWYKKysJ fQorKworKwlpZiAociA9PSAwKSB7CisrCQkvKiBJZiBsYXVuY2hlZCBmcm9tIHhpbmV0ZCwgd2Ug bXVzdCB1c2UgY3VycmVudCBsZXZlbCAqLworKwkJaWYgKGluZXRkKSB7CisrCQkJc2VjdXJpdHlf Y29udGV4dF90IHNzaGRzYz1OVUxMOworKworKwkJCWlmIChnZXRjb25fcmF3KCZzc2hkc2MpIDwg MCkKKysJCQkJZmF0YWwoImZhaWxlZCB0byBhbGxvY2F0ZSBzZWN1cml0eSBjb250ZXh0Iik7Cisr CisrCQkJaWYgKChjb249Y29udGV4dF9uZXcoc3NoZHNjKSkgPT0gTlVMTCkKKysJCQkJZmF0YWwo ImZhaWxlZCB0byBhbGxvY2F0ZSBzZWxpbnV4IGNvbnRleHQiKTsKKysJCQlyZXFsdmwgPSBjb250 ZXh0X3JhbmdlX2dldChjb24pOworKwkJCWZyZWVjb24oc3NoZHNjKTsKKysJCQlpZiAocmVxbHZs ICE9TlVMTCAmJiBsdmwgIT0gTlVMTCAmJiBzdHJjbXAocmVxbHZsLCBsdmwpID09IDApCisrCQkJ ICAgIC8qIHdlIGFjdHVhbGx5IGRvbid0IGNoYW5nZSBsZXZlbCAqLworKwkJCSAgICByZXFsdmwg PSAiIjsKKysKKysJCQlkZWJ1Z19mKCJjdXJyZW50IGNvbm5lY3Rpb24gbGV2ZWwgJyVzJyIsIHJl cWx2bCk7CisrCisrCQl9CisrCisrCQlpZiAoKHJlcWx2bCAhPSBOVUxMICYmIHJlcWx2bFswXSkg fHwgKHJvbGUgIT0gTlVMTCAmJiByb2xlWzBdKSkgeworKwkJCXIgPSBnZXRfdXNlcl9jb250ZXh0 KHNlbmFtZSwgcm9sZSwgcmVxbHZsLCB1c2VyX3NjKTsKKysKKysJCQlpZiAociA9PSAwICYmIHJl cWx2bCAhPSBOVUxMICYmIHJlcWx2bFswXSkgeworKwkJCQlzZWN1cml0eV9jb250ZXh0X3QgZGVm YXVsdF9sZXZlbF9zYyA9ICpkZWZhdWx0X3NjOworKwkJCQlpZiAocm9sZSAhPSBOVUxMICYmIHJv bGVbMF0pIHsKKysJCQkJCWlmIChnZXRfdXNlcl9jb250ZXh0KHNlbmFtZSwgcm9sZSwgbHZsLCAm ZGVmYXVsdF9sZXZlbF9zYykgPCAwKQorKwkJCQkJCWRlZmF1bHRfbGV2ZWxfc2MgPSAqZGVmYXVs dF9zYzsKKysJCQkJfQorKwkJCQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdGVkIHJhbmdlIGlz IGNvbnRhaW5lZCBpbiB0aGUgdXNlciByYW5nZSAqLworKwkJCQlpZiAobWxzX3JhbmdlX2FsbG93 ZWQoZGVmYXVsdF9sZXZlbF9zYywgKnVzZXJfc2MpKSB7CisrCQkJCQlsb2dpdCgicGVybWl0IE1M UyBsZXZlbCAlcyAodXNlciByYW5nZSAlcykiLCByZXFsdmwsIGx2bCk7CisrCQkJCX0gZWxzZSB7 CisrCQkJCQlyID0gLTE7CisrCQkJCQllcnJvcigiZGVueSBNTFMgbGV2ZWwgJXMgKHVzZXIgcmFu Z2UgJXMpIiwgcmVxbHZsLCBsdmwpOworKwkJCQl9CisrCQkJCWlmIChkZWZhdWx0X2xldmVsX3Nj ICE9ICpkZWZhdWx0X3NjKQorKwkJCQkJZnJlZWNvbihkZWZhdWx0X2xldmVsX3NjKTsKKysJCQl9 CisrCQl9IGVsc2UgeworKwkJCSp1c2VyX3NjID0gKmRlZmF1bHRfc2M7CisrCQl9CisrCX0KKysJ aWYgKHIgIT0gMCkgeworKwkJZXJyb3JfZigiRmFpbGVkIHRvIGdldCBkZWZhdWx0IFNFTGludXgg c2VjdXJpdHkgIgorKwkJICAgICJjb250ZXh0IGZvciAlcyIsIHB3bmFtZSk7CisrCX0KKysKKysj aWZkZWYgSEFWRV9HRVRTRVVTRVJCWU5BTUUKKysJZnJlZShzZW5hbWUpOworKwlmcmVlKGx2bCk7 CisrI2VuZGlmCisrCisrCWlmIChyb2xlICE9IE5VTEwpCisrCQlmcmVlKHJvbGUpOworKwlpZiAo Y29uKQorKwkJY29udGV4dF9mcmVlKGNvbik7CisrCisrCXJldHVybiAocik7CisrfQorKworKy8q IFNldHVwIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgcGFtX3NlbGludXggKi8KKytzdGF0aWMg aW50Cisrc3NoZF9zZWxpbnV4X3NldHVwX3ZhcmlhYmxlcyhpbnQoKnNldF9pdCkoY2hhciAqLCBj b25zdCBjaGFyICopLCBpbnQgaW5ldGQsCisrICAgIEF1dGhjdHh0ICp0aGVfYXV0aGN0eHQpCisr eworKwljb25zdCBjaGFyICpyZXFsdmw7CisrCWNoYXIgKnJvbGU7CisrCWNoYXIgKnVzZV9jdXJy ZW50OworKwlpbnQgcnY7CisrCisrCWRlYnVnM19mKCJzZXR0aW5nIGV4ZWN1dGlvbiBjb250ZXh0 Iik7CisrCisrCXNzaF9zZWxpbnV4X2dldF9yb2xlX2xldmVsKCZyb2xlLCAmcmVxbHZsLCB0aGVf YXV0aGN0eHQpOworKworKwlydiA9IHNldF9pdCgiU0VMSU5VWF9ST0xFX1JFUVVFU1RFRCIsIHJv bGUgPyByb2xlIDogIiIpOworKworKwlpZiAoaW5ldGQpIHsKKysJCXVzZV9jdXJyZW50ID0gIjEi OworKwl9IGVsc2UgeworKwkJdXNlX2N1cnJlbnQgPSAiIjsKKysJCXJ2ID0gcnYgfHwgc2V0X2l0 KCJTRUxJTlVYX0xFVkVMX1JFUVVFU1RFRCIsIHJlcWx2bCA/IHJlcWx2bDogIiIpOworKwl9Cisr CisrCXJ2ID0gcnYgfHwgc2V0X2l0KCJTRUxJTlVYX1VTRV9DVVJSRU5UX1JBTkdFIiwgdXNlX2N1 cnJlbnQpOworKworKwlpZiAocm9sZSAhPSBOVUxMKQorKwkJZnJlZShyb2xlKTsKKysKKysJcmV0 dXJuIHJ2OworK30KKysKKytzdGF0aWMgaW50Cisrc3NoZF9zZWxpbnV4X3NldHVwX3BhbV92YXJp YWJsZXMoaW50IGluZXRkLAorKyAgICBpbnQocGFtX3NldGVudikoY2hhciAqLCBjb25zdCBjaGFy ICopLCBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0KQorK3sKKysJcmV0dXJuIHNzaGRfc2VsaW51eF9z ZXR1cF92YXJpYWJsZXMocGFtX3NldGVudiwgaW5ldGQsIHRoZV9hdXRoY3R4dCk7CisrfQorKwor K3N0YXRpYyBpbnQKKytkb19zZXRlbnYoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisr eworKwlyZXR1cm4gc2V0ZW52KG5hbWUsIHZhbHVlLCAxKTsKKyt9CisrCisraW50Cisrc3NoZF9z ZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXMoaW50IGluZXRkLCB2b2lkICp0aGVfYXV0aGN0eHQp CisreworKwlBdXRoY3R4dCAqYXV0aGN0eHQgPSAoQXV0aGN0eHQgKikgdGhlX2F1dGhjdHh0Owor KwlyZXR1cm4gc3NoZF9zZWxpbnV4X3NldHVwX3ZhcmlhYmxlcyhkb19zZXRlbnYsIGluZXRkLCBh dXRoY3R4dCk7CisrfQorKworKy8qIFNldCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgdG8gdGhlIGRl ZmF1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciAqLworK3ZvaWQKKytzc2hkX3NlbGludXhfc2V0 dXBfZXhlY19jb250ZXh0KGNoYXIgKnB3bmFtZSwgaW50IGluZXRkLAorKyAgICBpbnQocGFtX3Nl dGVudikoY2hhciAqLCBjb25zdCBjaGFyICopLCB2b2lkICp0aGVfYXV0aGN0eHQsIGludCB1c2Vf cGFtKQorK3sKKysJc2VjdXJpdHlfY29udGV4dF90IHVzZXJfY3R4ID0gTlVMTDsKKysJaW50IHIg PSAwOworKwlzZWN1cml0eV9jb250ZXh0X3QgZGVmYXVsdF9jdHggPSBOVUxMOworKwlBdXRoY3R4 dCAqYXV0aGN0eHQgPSAoQXV0aGN0eHQgKikgdGhlX2F1dGhjdHh0OworKworKwlpZiAoIXNzaGRf c2VsaW51eF9lbmFibGVkKCkpCisrCQlyZXR1cm47CisrCisrCWlmICh1c2VfcGFtKSB7CisrCQkv KiBkbyBub3QgY29tcHV0ZSBjb250ZXh0LCBqdXN0IHNldHVwIGVudmlyb25tZW50IGZvciBwYW1f c2VsaW51eCAqLworKwkJaWYgKHNzaGRfc2VsaW51eF9zZXR1cF9wYW1fdmFyaWFibGVzKGluZXRk LCBwYW1fc2V0ZW52LCBhdXRoY3R4dCkpIHsKKysJCQlzd2l0Y2ggKHNlY3VyaXR5X2dldGVuZm9y Y2UoKSkgeworKwkJCWNhc2UgLTE6CisrCQkJCWZhdGFsX2YoInNlY3VyaXR5X2dldGVuZm9yY2Uo KSBmYWlsZWQiKTsKKysJCQljYXNlIDA6CisrCQkJCWVycm9yX2YoIlNFTGludXggUEFNIHZhcmlh YmxlIHNldHVwIGZhaWx1cmUuIENvbnRpbnVpbmcgaW4gcGVybWlzc2l2ZSBtb2RlLiIpOworKwkJ CWJyZWFrOworKwkJCWRlZmF1bHQ6CisrCQkJCWZhdGFsX2YoIlNFTGludXggUEFNIHZhcmlhYmxl IHNldHVwIGZhaWx1cmUuIEFib3J0aW5nIGNvbm5lY3Rpb24uIik7CisrCQkJfQorKwkJfQorKwkJ cmV0dXJuOworKwl9CisrCisrCWRlYnVnM19mKCJzZXR0aW5nIGV4ZWN1dGlvbiBjb250ZXh0Iik7 CisrCisrCXIgPSBzc2hkX3NlbGludXhfZ2V0Y3R4YnluYW1lKHB3bmFtZSwgJmRlZmF1bHRfY3R4 LCAmdXNlcl9jdHgsIGluZXRkLCBhdXRoY3R4dCk7CisrCWlmIChyID49IDApIHsKKysJCXIgPSBz ZXRleGVjY29uKHVzZXJfY3R4KTsKKysJCWlmIChyIDwgMCkgeworKwkJCWVycm9yX2YoIkZhaWxl ZCB0byBzZXQgU0VMaW51eCBleGVjdXRpb24gY29udGV4dCAlcyBmb3IgJXMiLAorKwkJCSAgICB1 c2VyX2N0eCwgcHduYW1lKTsKKysJCX0KKysjaWZkZWYgSEFWRV9TRVRLRVlDUkVBVEVDT04KKysJ CWVsc2UgaWYgKHNldGtleWNyZWF0ZWNvbih1c2VyX2N0eCkgPCAwKSB7CisrCQkJZXJyb3JfZigi RmFpbGVkIHRvIHNldCBTRUxpbnV4IGtleXJpbmcgY3JlYXRpb24gY29udGV4dCAlcyBmb3IgJXMi LAorKwkJCSAgICB1c2VyX2N0eCwgcHduYW1lKTsKKysJCX0KKysjZW5kaWYKKysJfQorKwlpZiAo dXNlcl9jdHggPT0gTlVMTCkgeworKwkJdXNlcl9jdHggPSBkZWZhdWx0X2N0eDsKKysJfQorKwlp ZiAociA8IDAgfHwgdXNlcl9jdHggIT0gZGVmYXVsdF9jdHgpIHsKKysJCS8qIGF1ZGl0IGp1c3Qg dGhlIGNhc2Ugd2hlbiB1c2VyIGNoYW5nZWQgYSByb2xlIG9yIHRoZXJlIHdhcworKwkJICAgYSBm YWlsdXJlICovCisrCQlzc2hkX3NlbGludXhfc2VuZF9hdWRpdF9tZXNzYWdlKHIgPj0gMCwgZGVm YXVsdF9jdHgsIHVzZXJfY3R4KTsKKysJfQorKwlpZiAociA8IDApIHsKKysJCXN3aXRjaCAoc2Vj dXJpdHlfZ2V0ZW5mb3JjZSgpKSB7CisrCQljYXNlIC0xOgorKwkJCWZhdGFsX2YoInNlY3VyaXR5 X2dldGVuZm9yY2UoKSBmYWlsZWQiKTsKKysJCWNhc2UgMDoKKysJCQllcnJvcl9mKCJFTGludXgg ZmFpbHVyZS4gQ29udGludWluZyBpbiBwZXJtaXNzaXZlIG1vZGUuIik7CisrCQkJYnJlYWs7Cisr CQlkZWZhdWx0OgorKwkJCWZhdGFsX2YoIlNFTGludXggZmFpbHVyZS4gQWJvcnRpbmcgY29ubmVj dGlvbi4iKTsKKysJCX0KKysJfQorKwlpZiAodXNlcl9jdHggIT0gTlVMTCAmJiB1c2VyX2N0eCAh PSBkZWZhdWx0X2N0eCkKKysJCWZyZWVjb24odXNlcl9jdHgpOworKwlpZiAoZGVmYXVsdF9jdHgg IT0gTlVMTCkKKysJCWZyZWVjb24oZGVmYXVsdF9jdHgpOworKworKwlkZWJ1ZzNfZigiZG9uZSIp OworK30KKysKKysjZW5kaWYKKysjZW5kaWYKKysKK2RpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBh dC9wb3J0LWxpbnV4LmMgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmMKK2luZGV4IGMxZDU0 ZjM4ZC4uNzQyNmY2Zjc5IDEwMDY0NAorLS0tIGEvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5j CisrKysgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmMKK0BAIC0xMDksMzcgKzEwOSw2IEBA IHNzaF9zZWxpbnV4X2dldGN0eGJ5bmFtZShjaGFyICpwd25hbWUpCisgCXJldHVybiBzYzsKKyB9 CisgCistLyogU2V0IHRoZSBleGVjdXRpb24gY29udGV4dCB0byB0aGUgZGVmYXVsdCBmb3IgdGhl IHNwZWNpZmllZCB1c2VyICovCistdm9pZAorLXNzaF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4 dChjaGFyICpwd25hbWUpCisteworLQljaGFyICp1c2VyX2N0eCA9IE5VTEw7CistCistCWlmICgh c3NoX3NlbGludXhfZW5hYmxlZCgpKQorLQkJcmV0dXJuOworLQorLQlkZWJ1ZzMoIiVzOiBzZXR0 aW5nIGV4ZWN1dGlvbiBjb250ZXh0IiwgX19mdW5jX18pOworLQorLQl1c2VyX2N0eCA9IHNzaF9z ZWxpbnV4X2dldGN0eGJ5bmFtZShwd25hbWUpOworLQlpZiAoc2V0ZXhlY2Nvbih1c2VyX2N0eCkg IT0gMCkgeworLQkJc3dpdGNoIChzZWN1cml0eV9nZXRlbmZvcmNlKCkpIHsKKy0JCWNhc2UgLTE6 CistCQkJZmF0YWwoIiVzOiBzZWN1cml0eV9nZXRlbmZvcmNlKCkgZmFpbGVkIiwgX19mdW5jX18p OworLQkJY2FzZSAwOgorLQkJCWVycm9yKCIlczogRmFpbGVkIHRvIHNldCBTRUxpbnV4IGV4ZWN1 dGlvbiAiCistCQkJICAgICJjb250ZXh0IGZvciAlcyIsIF9fZnVuY19fLCBwd25hbWUpOworLQkJ CWJyZWFrOworLQkJZGVmYXVsdDoKKy0JCQlmYXRhbCgiJXM6IEZhaWxlZCB0byBzZXQgU0VMaW51 eCBleGVjdXRpb24gY29udGV4dCAiCistCQkJICAgICJmb3IgJXMgKGluIGVuZm9yY2luZyBtb2Rl KSIsIF9fZnVuY19fLCBwd25hbWUpOworLQkJfQorLQl9CistCWlmICh1c2VyX2N0eCAhPSBOVUxM KQorLQkJZnJlZWNvbih1c2VyX2N0eCk7CistCistCWRlYnVnMygiJXM6IGRvbmUiLCBfX2Z1bmNf Xyk7CistfQorLQorIC8qIFNldCB0aGUgVFRZIGNvbnRleHQgZm9yIHRoZSBzcGVjaWZpZWQgdXNl ciAqLworIHZvaWQKKyBzc2hfc2VsaW51eF9zZXR1cF9wdHkoY2hhciAqcHduYW1lLCBjb25zdCBj aGFyICp0dHkpCitAQCAtMTUyLDcgKzEyMSwxMSBAQCBzc2hfc2VsaW51eF9zZXR1cF9wdHkoY2hh ciAqcHduYW1lLCBjb25zdCBjaGFyICp0dHkpCisgCisgCWRlYnVnMygiJXM6IHNldHRpbmcgVFRZ IGNvbnRleHQgb24gJXMiLCBfX2Z1bmNfXywgdHR5KTsKKyAKKy0JdXNlcl9jdHggPSBzc2hfc2Vs aW51eF9nZXRjdHhieW5hbWUocHduYW1lKTsKKysJaWYgKGdldGV4ZWNjb24oJnVzZXJfY3R4KSAh PSAwKSB7CisrCQllcnJvcl9mKCJnZXRleGVjY29uOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cisr CQlnb3RvIG91dDsKKysJfQorKworIAorIAkvKiBYWFg6IHNob3VsZCB0aGVzZSBjYWxscyBmYXRh bCgpIHVwb24gZmFpbHVyZSBpbiBlbmZvcmNpbmcgbW9kZT8gKi8KKyAKK2RpZmYgLS1naXQgYS9v cGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmggYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmgK K2luZGV4IDk1OTQzMGRlMS4uMjZjNWY3NzNiIDEwMDY0NAorLS0tIGEvb3BlbmJzZC1jb21wYXQv cG9ydC1saW51eC5oCisrKysgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmgKK0BAIC0yMCw5 ICsyMCwxMiBAQAorICNpZmRlZiBXSVRIX1NFTElOVVgKKyBpbnQgc3NoX3NlbGludXhfZW5hYmxl ZCh2b2lkKTsKKyB2b2lkIHNzaF9zZWxpbnV4X3NldHVwX3B0eShjaGFyICosIGNvbnN0IGNoYXIg Kik7Cistdm9pZCBzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqKTsKKyB2b2lk IHNzaF9zZWxpbnV4X2NoYW5nZV9jb250ZXh0KGNvbnN0IGNoYXIgKik7Cisgdm9pZCBzc2hfc2Vs aW51eF9zZXRmc2NyZWF0ZWNvbihjb25zdCBjaGFyICopOworKworK2ludCBzc2hkX3NlbGludXhf ZW5hYmxlZCh2b2lkKTsKKyt2b2lkIHNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hh ciAqLCBpbnQsIGludChjaGFyICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKiwgaW50KTsKKytpbnQg c3NoZF9zZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXMoaW50IGluZXRkLCB2b2lkICopOworICNl bmRpZgorIAorICNpZmRlZiBMSU5VWF9PT01fQURKVVNUCitkaWZmIC0tZ2l0IGEvcGxhdGZvcm0u YyBiL3BsYXRmb3JtLmMKK2luZGV4IGZkMWE3YTdjMi4uNjZkMGMyYTZiIDEwMDY0NAorLS0tIGEv cGxhdGZvcm0uYworKysrIGIvcGxhdGZvcm0uYworQEAgLTMzLDYgKzMzLDggQEAKKyAjaW5jbHVk ZSAib3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCIKKyAKKyBleHRlcm4gU2VydmVyT3B0 aW9ucyBvcHRpb25zOworK2V4dGVybiBpbnQgaW5ldGRfZmxhZzsKKytleHRlcm4gQXV0aGN0eHQg KnRoZV9hdXRoY3R4dDsKKyAKKyAvKiByZXR1cm4gMSBpZiB3ZSBhcmUgcnVubmluZyB3aXRoIHBy aXZpbGVnZSB0byBzd2FwIFVJRHMsIDAgb3RoZXJ3aXNlICovCisgaW50CitAQCAtNTUsNyArNTcs NyBAQCBwbGF0Zm9ybV9zZXR1c2VyY29udGV4dChzdHJ1Y3QgcGFzc3dkICpwdykKKyB7CisgI2lm ZGVmIFdJVEhfU0VMSU5VWAorIAkvKiBDYWNoZSBzZWxpbnV4IHN0YXR1cyBmb3IgbGF0ZXIgdXNl ICovCistCSh2b2lkKXNzaF9zZWxpbnV4X2VuYWJsZWQoKTsKKysJKHZvaWQpc3NoZF9zZWxpbnV4 X2VuYWJsZWQoKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgVVNFX1NPTEFSSVNfUFJPSkVDVFMKK0BA IC0xNDAsNyArMTQyLDkgQEAgcGxhdGZvcm1fc2V0dXNlcmNvbnRleHRfcG9zdF9ncm91cHMoc3Ry dWN0IHBhc3N3ZCAqcHcpCisgCX0KKyAjZW5kaWYgLyogSEFWRV9TRVRQQ1JFRCAqLworICNpZmRl ZiBXSVRIX1NFTElOVVgKKy0Jc3NoX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KHB3LT5wd19u YW1lKTsKKysJc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChwdy0+cHdfbmFtZSwKKysJ ICAgIGluZXRkX2ZsYWcsIGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRoY3R4dCwKKysJICAgIG9wdGlv bnMudXNlX3BhbSk7CisgI2VuZGlmCisgfQorIAorZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5j IGIvc3NoZC1zZXNzaW9uLmMKK2luZGV4IDA2YTcyZGFhZi4uMWE0MGE0M2YxIDEwMDY0NAorLS0t IGEvc3NoZC1zZXNzaW9uLmMKKysrKyBiL3NzaGQtc2Vzc2lvbi5jCitAQCAtMTIzLDcgKzEyMyw3 IEBAIGNoYXIgKmNvbmZpZ19maWxlX25hbWUgPSBfUEFUSF9TRVJWRVJfQ09ORklHX0ZJTEU7Cisg aW50IGRlYnVnX2ZsYWcgPSAwOworIAorIC8qIEZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBkYWVt b24gaXMgYmVpbmcgc3RhcnRlZCBmcm9tIGluZXRkLiAqLworLXN0YXRpYyBpbnQgaW5ldGRfZmxh ZyA9IDA7CisraW50IGluZXRkX2ZsYWcgPSAwOworIAorIC8qIGRlYnVnIGdvZXMgdG8gc3RkZXJy IHVubGVzcyBpbmV0ZF9mbGFnIGlzIHNldCAqLworIHN0YXRpYyBpbnQgbG9nX3N0ZGVyciA9IDA7 CitAQCAtMTI3Nyw2ICsxMjc3LDExIEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCisgCQlyZXN0 b3JlX3VpZCgpOworIAl9CisgI2VuZGlmCisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKwlzc2hkX3Nl bGludXhfc2V0dXBfZXhlY19jb250ZXh0KGF1dGhjdHh0LT5wdy0+cHdfbmFtZSwKKysJICAgIGlu ZXRkX2ZsYWcsIGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRoY3R4dCwKKysJICAgIG9wdGlvbnMudXNl X3BhbSk7CisrI2VuZGlmCisgI2lmZGVmIFVTRV9QQU0KKyAJaWYgKG9wdGlvbnMudXNlX3BhbSkg eworIAkJZG9fcGFtX3NldGNyZWQoKTsKKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQgYS8wMDAz LVBhc3MtaW5ldGQtZmxhZ3MtYW5kLWF1dGgtY29udGV4dC10by1zdWJwcm9jZXNzLWNhbGwucGF0 Y2ggYi8wMDAzLVBhc3MtaW5ldGQtZmxhZ3MtYW5kLWF1dGgtY29udGV4dC10by1zdWJwcm9jZXNz LWNhbGwucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OWE2ZWYuLjAwMDAw MDAKLS0tIGEvMDAwMy1QYXNzLWluZXRkLWZsYWdzLWFuZC1hdXRoLWNvbnRleHQtdG8tc3VicHJv Y2Vzcy1jYWxsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotRnJvbSA4NDIz ZTg5MmQ3NTMyNTg5YzJkZjA1OTg0NzBlMDFlYWEzODNmYjZiIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTog TW9uLCAxMyBBcHIgMjAyNiAxNDowNzowMiArMDIwMAotU3ViamVjdDogW1BBVENIIDAzLzU0XSBQ YXNzIGluZXRkIGZsYWdzIGFuZCBhdXRoIGNvbnRleHQgdG8gc3VicHJvY2VzcyBjYWxscwotIGZv ciBTRUxpbnV4Ci0KLW9wZW5zc2gtNy42cDEtc3VicHJvY2Vzcy1zZWxpbnV4Ci0KLVBhc3MgaW5l dGQgZmxhZ3MgYW5kIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgZG93biB0byBzdWJwcm9jZXNzIGNh bGxzCi1mb3IgU0VMaW51eCBlbnZpcm9ubWVudCBzZXR1cC4gVGhpcyBlbnN1cmVzIHRoYXQgQXV0 aG9yaXplZEtleXNDb21tYW5kCi1hbmQgQXV0aG9yaXplZFByaW5jaXBhbHNDb21tYW5kIHN1YnBy b2Nlc3NlcyBydW4gd2l0aCB0aGUgY29ycmVjdAotU0VMaW51eCBjb250ZXh0IGJhc2VkIG9uIHRo ZSBhdXRoZW50aWNhdGVkIHVzZXIncyByb2xlIGFuZCBsZXZlbC4KLQotQ2hhbmdlczoKLS0gbWlz Yy5jOiBVcGRhdGUgc3VicHJvY2VzcygpIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byBhY2NlcHQgaW5l dGQgYW5kCi0gIHRoZV9hdXRoY3R4dCBwYXJhbWV0ZXJzOyBhZGQgc3NoZF9zZWxpbnV4X3NldHVw X2Vudl92YXJpYWJsZXMoKSBjYWxsCi0gIGluIGNoaWxkIHByb2Nlc3MgYmVmb3JlIGV4ZWN2ZQot LSBtaXNjLmg6IFVwZGF0ZSBzdWJwcm9jZXNzKCkgZnVuY3Rpb24gZGVjbGFyYXRpb24KLS0gYXV0 aDItcHVia2V5LmM6IEFkZCBleHRlcm4gZGVjbGFyYXRpb25zIGZvciBpbmV0ZF9mbGFnIGFuZAot ICB0aGVfYXV0aGN0eHQ7IHBhc3MgdGhlbSB0byBzdWJwcm9jZXNzKCkgY2FsbHMgZm9yCi0gIEF1 dGhvcml6ZWRLZXlzQ29tbWFuZCBhbmQgQXV0aG9yaXplZFByaW5jaXBhbHNDb21tYW5kCi0tIHNz aGNvbm5lY3QuYzogVXBkYXRlIHN1YnByb2Nlc3MoKSBjYWxsIHdpdGggbmV3IHBhcmFtZXRlcnMg KDAsIE5VTEwpCi0tIHNzaGQtYXV0aC5jOiBNYWtlIGluZXRkX2ZsYWcgbm9uLXN0YXRpYyAoZXh0 ZXJuKQotLSBzc2hkLXNlc3Npb24uYzogTWFrZSBpbmV0ZF9mbGFnIG5vbi1zdGF0aWMgKGV4dGVy bikKLQotQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25uZXQgNC41IDxub3JlcGx5QGFudGhyb3Bp Yy5jb20+Ci0tLS0KLSBtaXNjLmggICAgICAgfCAyICstCi0gc3NoY29ubmVjdC5jIHwgMiArLQot IHNzaGQtYXV0aC5jICB8IDIgKy0KLSAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwg MyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL21pc2MuaCBiL21pc2MuaAotaW5kZXggNzkx ODc2YzFlLi5mZTExZjlkOGEgMTAwNjQ0Ci0tLS0gYS9taXNjLmgKLSsrKyBiL21pc2MuaAotQEAg LTEyOSw3ICsxMjksNyBAQCB0eXBlZGVmIHZvaWQgcHJpdnJlc3RvcmVfZm4odm9pZCk7Ci0gI2Rl ZmluZQlTU0hfU1VCUFJPQ0VTU19VTlNBRkVfUEFUSAkoMTw8MykJLyogRG9uJ3QgY2hlY2sgZm9y IHNhZmUgY21kICovCi0gI2RlZmluZQlTU0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9FTlYJKDE8PDQp CS8qIEtlZXAgcGFyZW50IGVudmlyb25tZW50ICovCi0gcGlkX3Qgc3VicHJvY2Vzcyhjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgaW50LCBjaGFyICoqLCBGSUxFICoqLCB1X2ludCwKLS0gICAg c3RydWN0IHBhc3N3ZCAqLCBwcml2ZHJvcF9mbiAqLCBwcml2cmVzdG9yZV9mbiAqKTsKLSsgICAg c3RydWN0IHBhc3N3ZCAqLCBwcml2ZHJvcF9mbiAqLCBwcml2cmVzdG9yZV9mbiAqLCBpbnQsIHZv aWQgKik7Ci0gCi0gdHlwZWRlZiBzdHJ1Y3QgYXJnbGlzdCBhcmdsaXN0OwotIHN0cnVjdCBhcmds aXN0IHsKLWRpZmYgLS1naXQgYS9zc2hjb25uZWN0LmMgYi9zc2hjb25uZWN0LmMKLWluZGV4IDQz ODQyNzdhNi4uNWU3NjE1NjFkIDEwMDY0NAotLS0tIGEvc3NoY29ubmVjdC5jCi0rKysgYi9zc2hj b25uZWN0LmMKLUBAIC05MTEsNyArOTExLDcgQEAgbG9hZF9ob3N0a2V5c19jb21tYW5kKHN0cnVj dCBob3N0a2V5cyAqaG9zdGtleXMsIGNvbnN0IGNoYXIgKmNvbW1hbmRfdGVtcGxhdGUsCi0gCi0g CWlmICgocGlkID0gc3VicHJvY2Vzcyh0YWcsIGNvbW1hbmQsIGFjLCBhdiwgJmYsCi0gCSAgICBT U0hfU1VCUFJPQ0VTU19TVERPVVRfQ0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19VTlNBRkVfUEFUSHwK LS0JICAgIFNTSF9TVUJQUk9DRVNTX1BSRVNFUlZFX0VOViwgTlVMTCwgTlVMTCwgTlVMTCkpID09 IDApCi0rCSAgICBTU0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9FTlYsIE5VTEwsIE5VTEwsIE5VTEws IDAsIE5VTEwpKSA9PSAwKQotIAkJZ290byBvdXQ7Ci0gCi0gCWxvYWRfaG9zdGtleXNfZmlsZSho b3N0a2V5cywgaG9zdGZpbGVfaG9zdG5hbWUsIHRhZywgZiwgMSk7Ci1kaWZmIC0tZ2l0IGEvc3No ZC1hdXRoLmMgYi9zc2hkLWF1dGguYwotaW5kZXggNzYzNTBhMmEzLi43M2FjYjBkYmUgMTAwNjQ0 Ci0tLS0gYS9zc2hkLWF1dGguYwotKysrIGIvc3NoZC1hdXRoLmMKLUBAIC0xMTksNyArMTE5LDcg QEAgY2hhciAqY29uZmlnX2ZpbGVfbmFtZSA9IF9QQVRIX1NFUlZFUl9DT05GSUdfRklMRTsKLSBp bnQgZGVidWdfZmxhZyA9IDA7Ci0gCi0gLyogRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIGRhZW1v biBpcyBiZWluZyBzdGFydGVkIGZyb20gaW5ldGQuICovCi0tc3RhdGljIGludCBpbmV0ZF9mbGFn ID0gMDsKLStpbnQgaW5ldGRfZmxhZyA9IDA7Ci0gCi0gLyogU2F2ZWQgYXJndW1lbnRzIHRvIG1h aW4oKS4gKi8KLSBzdGF0aWMgY2hhciAqKnNhdmVkX2FyZ3Y7Ci0tLSAKLTIuNTMuMAotCgpkaWZm IC0tZ2l0IGEvMDAwNC1QYXNzLWluZXRkLWZsYWdzLWFuZC1hdXRoLWNvbnRleHQtdG8tc3VicHJv Y2Vzcy1jYWxsLnBhdGNoIGIvMDAwNC1QYXNzLWluZXRkLWZsYWdzLWFuZC1hdXRoLWNvbnRleHQt dG8tc3VicHJvY2Vzcy1jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU3N2FjMjkKLS0tIC9kZXYvbnVsbAorKysgYi8wMDA0LVBhc3MtaW5ldGQtZmxhZ3MtYW5k LWF1dGgtY29udGV4dC10by1zdWJwcm9jZXNzLWNhbGwucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAor RnJvbSBlNjNhNGFkMzBkMDdmMDkxMmY2MzM2MDI2Mzk4NWQ3YWVmOTQ4NTY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29t PgorRGF0ZTogTW9uLCAxMyBBcHIgMjAyNiAxNDowNzowMiArMDIwMAorU3ViamVjdDogW1BBVENI IDA0LzUzXSBQYXNzIGluZXRkIGZsYWdzIGFuZCBhdXRoIGNvbnRleHQgdG8gc3VicHJvY2VzcyBj YWxscworIGZvciBTRUxpbnV4CisKK29wZW5zc2gtNy42cDEtc3VicHJvY2Vzcy1zZWxpbnV4CisK K1Bhc3MgaW5ldGQgZmxhZ3MgYW5kIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgZG93biB0byBzdWJw cm9jZXNzIGNhbGxzCitmb3IgU0VMaW51eCBlbnZpcm9ubWVudCBzZXR1cC4gVGhpcyBlbnN1cmVz IHRoYXQgQXV0aG9yaXplZEtleXNDb21tYW5kCithbmQgQXV0aG9yaXplZFByaW5jaXBhbHNDb21t YW5kIHN1YnByb2Nlc3NlcyBydW4gd2l0aCB0aGUgY29ycmVjdAorU0VMaW51eCBjb250ZXh0IGJh c2VkIG9uIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyByb2xlIGFuZCBsZXZlbC4KKworQ2hhbmdl czoKKy0gbWlzYy5jOiBVcGRhdGUgc3VicHJvY2VzcygpIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byBh Y2NlcHQgaW5ldGQgYW5kCisgIHRoZV9hdXRoY3R4dCBwYXJhbWV0ZXJzOyBhZGQgc3NoZF9zZWxp bnV4X3NldHVwX2Vudl92YXJpYWJsZXMoKSBjYWxsCisgIGluIGNoaWxkIHByb2Nlc3MgYmVmb3Jl IGV4ZWN2ZQorLSBtaXNjLmg6IFVwZGF0ZSBzdWJwcm9jZXNzKCkgZnVuY3Rpb24gZGVjbGFyYXRp b24KKy0gYXV0aDItcHVia2V5LmM6IEFkZCBleHRlcm4gZGVjbGFyYXRpb25zIGZvciBpbmV0ZF9m bGFnIGFuZAorICB0aGVfYXV0aGN0eHQ7IHBhc3MgdGhlbSB0byBzdWJwcm9jZXNzKCkgY2FsbHMg Zm9yCisgIEF1dGhvcml6ZWRLZXlzQ29tbWFuZCBhbmQgQXV0aG9yaXplZFByaW5jaXBhbHNDb21t YW5kCistIHNzaGNvbm5lY3QuYzogVXBkYXRlIHN1YnByb2Nlc3MoKSBjYWxsIHdpdGggbmV3IHBh cmFtZXRlcnMgKDAsIE5VTEwpCistIHNzaGQtYXV0aC5jOiBNYWtlIGluZXRkX2ZsYWcgbm9uLXN0 YXRpYyAoZXh0ZXJuKQorLSBzc2hkLXNlc3Npb24uYzogTWFrZSBpbmV0ZF9mbGFnIG5vbi1zdGF0 aWMgKGV4dGVybikKKworQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25uZXQgNC41IDxub3JlcGx5 QGFudGhyb3BpYy5jb20+CistLS0KKyBtaXNjLmggICAgICAgfCAyICstCisgc3NoY29ubmVjdC5j IHwgMiArLQorIHNzaGQtYXV0aC5jICB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0 aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21pc2MuaCBiL21pc2MuaAor aW5kZXggNzkxODc2YzFlLi5mZTExZjlkOGEgMTAwNjQ0CistLS0gYS9taXNjLmgKKysrKyBiL21p c2MuaAorQEAgLTEyOSw3ICsxMjksNyBAQCB0eXBlZGVmIHZvaWQgcHJpdnJlc3RvcmVfZm4odm9p ZCk7CisgI2RlZmluZQlTU0hfU1VCUFJPQ0VTU19VTlNBRkVfUEFUSAkoMTw8MykJLyogRG9uJ3Qg Y2hlY2sgZm9yIHNhZmUgY21kICovCisgI2RlZmluZQlTU0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9F TlYJKDE8PDQpCS8qIEtlZXAgcGFyZW50IGVudmlyb25tZW50ICovCisgcGlkX3Qgc3VicHJvY2Vz cyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LCBjaGFyICoqLCBGSUxFICoqLCB1X2lu dCwKKy0gICAgc3RydWN0IHBhc3N3ZCAqLCBwcml2ZHJvcF9mbiAqLCBwcml2cmVzdG9yZV9mbiAq KTsKKysgICAgc3RydWN0IHBhc3N3ZCAqLCBwcml2ZHJvcF9mbiAqLCBwcml2cmVzdG9yZV9mbiAq LCBpbnQsIHZvaWQgKik7CisgCisgdHlwZWRlZiBzdHJ1Y3QgYXJnbGlzdCBhcmdsaXN0OworIHN0 cnVjdCBhcmdsaXN0IHsKK2RpZmYgLS1naXQgYS9zc2hjb25uZWN0LmMgYi9zc2hjb25uZWN0LmMK K2luZGV4IDBkZGZjNzZiMy4uYmRhYWRlNjgyIDEwMDY0NAorLS0tIGEvc3NoY29ubmVjdC5jCisr KysgYi9zc2hjb25uZWN0LmMKK0BAIC05NTQsNyArOTU0LDcgQEAgbG9hZF9ob3N0a2V5c19jb21t YW5kKHN0cnVjdCBob3N0a2V5cyAqaG9zdGtleXMsIGNvbnN0IGNoYXIgKmNvbW1hbmRfdGVtcGxh dGUsCisgCisgCWlmICgocGlkID0gc3VicHJvY2Vzcyh0YWcsIGNvbW1hbmQsIGFjLCBhdiwgJmYs CisgCSAgICBTU0hfU1VCUFJPQ0VTU19TVERPVVRfQ0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19VTlNB RkVfUEFUSHwKKy0JICAgIFNTSF9TVUJQUk9DRVNTX1BSRVNFUlZFX0VOViwgTlVMTCwgTlVMTCwg TlVMTCkpID09IDApCisrCSAgICBTU0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9FTlYsIE5VTEwsIE5V TEwsIE5VTEwsIDAsIE5VTEwpKSA9PSAwKQorIAkJZ290byBvdXQ7CisgCisgCWxvYWRfaG9zdGtl eXNfZmlsZShob3N0a2V5cywgaG9zdGZpbGVfaG9zdG5hbWUsIHRhZywgZiwgMSk7CitkaWZmIC0t Z2l0IGEvc3NoZC1hdXRoLmMgYi9zc2hkLWF1dGguYworaW5kZXggNDg4OGM4ZTYyLi4xNDEwOTE1 MWMgMTAwNjQ0CistLS0gYS9zc2hkLWF1dGguYworKysrIGIvc3NoZC1hdXRoLmMKK0BAIC0xMTks NyArMTE5LDcgQEAgY2hhciAqY29uZmlnX2ZpbGVfbmFtZSA9IF9QQVRIX1NFUlZFUl9DT05GSUdf RklMRTsKKyBpbnQgZGVidWdfZmxhZyA9IDA7CisgCisgLyogRmxhZyBpbmRpY2F0aW5nIHRoYXQg dGhlIGRhZW1vbiBpcyBiZWluZyBzdGFydGVkIGZyb20gaW5ldGQuICovCistc3RhdGljIGludCBp bmV0ZF9mbGFnID0gMDsKKytpbnQgaW5ldGRfZmxhZyA9IDA7CisgCisgLyogU2F2ZWQgYXJndW1l bnRzIHRvIG1haW4oKS4gKi8KKyBzdGF0aWMgY2hhciAqKnNhdmVkX2FyZ3Y7CistLSAKKzIuNTUu MAorCgpkaWZmIC0tZ2l0IGEvMDAwNC1vcGVuc3NoLTYuNnAxLWtleWNhdC5wYXRjaCBiLzAwMDQt b3BlbnNzaC02LjZwMS1rZXljYXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDMyOTA4NWMuLjAwMDAwMDAKLS0tIGEvMDAwNC1vcGVuc3NoLTYuNnAxLWtleWNhdC5wYXRjaAor KysgL2Rldi9udWxsCkBAIC0xLDM4MCArMCwwIEBACi1Gcm9tIDVjYzFiMTBjOGNkNWRlOTFlYzgx OWE5Mzk3YWJkMjRhZWY5ZjA5OWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0 cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAyMDI1 IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMDQvNTRdIG9wZW5zc2gtNi42cDEta2V5 Y2F0Ci0KLS0tLQotIC5naXRpZ25vcmUgICAgICAgfCAgIDEgKwotIEhPV1RPLnNzaC1rZXljYXQg fCAgMTIgKysrCi0gTWFrZWZpbGUuaW4gICAgICB8ICAgOCArLQotIGNvbmZpZ3VyZS5hYyAgICAg fCAgIDYgKysKLSBzc2gta2V5Y2F0LmMgICAgIHwgMjQxICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCi0gNSBmaWxlcyBjaGFuZ2VkLCAyNjcgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBIT1dUTy5zc2gta2V5Y2F0 Ci0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNzaC1rZXljYXQuYwotCi1kaWZmIC0tZ2l0IGEvLmdpdGln bm9yZSBiLy5naXRpZ25vcmUKLWluZGV4IDkwNzUzMzA2Ny4uN2I0NjY4ZDcxIDEwMDY0NAotLS0t IGEvLmdpdGlnbm9yZQotKysrIGIvLmdpdGlnbm9yZQotQEAgLTI4LDYgKzI4LDcgQEAgc3NoLWFn ZW50Ci0gc3NoLWtleWdlbgotIHNzaC1rZXlzY2FuCi0gc3NoLWtleXNpZ24KLStzc2gta2V5Y2F0 Ci0gc3NoLXBrY3MxMS1oZWxwZXIKLSBzc2gtc2staGVscGVyCi0gc3NoZAotZGlmZiAtLWdpdCBh L0hPV1RPLnNzaC1rZXljYXQgYi9IT1dUTy5zc2gta2V5Y2F0Ci1uZXcgZmlsZSBtb2RlIDEwMDY0 NAotaW5kZXggMDAwMDAwMDAwLi42MzBlYzYyOGMKLS0tLSAvZGV2L251bGwKLSsrKyBiL0hPV1RP LnNzaC1rZXljYXQKLUBAIC0wLDAgKzEsMTIgQEAKLStUaGUgc3NoLWtleWNhdCByZXRyaWV2ZXMg dGhlIGNvbnRlbnQgb2YgdGhlIH4vLnNzaC9hdXRob3JpemVkX2tleXMKLStvZiBhbiB1c2VyIGlu IGFueSBlbnZpcm9ubWVudC4gVGhpcyBpbmNsdWRlcyBlbnZpcm9ubWVudHMgd2l0aAotK3BvbHlp bnN0YW50aWF0aW9uIG9mIGhvbWUgZGlyZWN0b3JpZXMgYW5kIFNFTGludXggTUxTIHBvbGljeSBl bmFibGVkLgotKwotK1RvIHVzZSBzc2gta2V5Y2F0LCBzZXQgdGhlc2Ugb3B0aW9ucyBpbiAvZXRj L3NzaC9zc2hkX2NvbmZpZyBmaWxlOgotKyAgICAgICAgQXV0aG9yaXplZEtleXNDb21tYW5kIC91 c3IvbGliZXhlYy9vcGVuc3NoL3NzaC1rZXljYXQKLSsgICAgICAgIEF1dGhvcml6ZWRLZXlzQ29t bWFuZFVzZXIgcm9vdAotKwotK0RvIG5vdCBmb3JnZXQgdG8gZW5hYmxlIHB1YmxpYyBrZXkgYXV0 aGVudGljYXRpb246Ci0rICAgICAgICBQdWJrZXlBdXRoZW50aWNhdGlvbiB5ZXMKLSsKLSsKLWRp ZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCAyYWFjODc5YzEuLjQy YjQ1ZDMzZCAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmluCi0rKysgYi9NYWtlZmlsZS5pbgotQEAg LTIzLDYgKzIzLDcgQEAgU1NIX1BST0dSQU09QGJpbmRpckAvc3NoCi0gQVNLUEFTU19QUk9HUkFN PSQobGliZXhlY2Rpcikvc3NoLWFza3Bhc3MKLSBTRlRQX1NFUlZFUj0kKGxpYmV4ZWNkaXIpL3Nm dHAtc2VydmVyCi0gU1NIX0tFWVNJR049JChsaWJleGVjZGlyKS9zc2gta2V5c2lnbgotK1NTSF9L RVlDQVQ9JChsaWJleGVjZGlyKS9zc2gta2V5Y2F0Ci0gU1NIRF9TRVNTSU9OPSQobGliZXhlY2Rp cikvc3NoZC1zZXNzaW9uCi0gU1NIRF9BVVRIPSQobGliZXhlY2Rpcikvc3NoZC1hdXRoCi0gU1NI X1BLQ1MxMV9IRUxQRVI9JChsaWJleGVjZGlyKS9zc2gtcGtjczExLWhlbHBlcgotQEAgLTU4LDYg KzU5LDcgQEAgQ0hBTk5FTExJQlM9QENIQU5ORUxMSUJTQAotIEs1TElCUz1ASzVMSUJTQAotIEdT U0xJQlM9QEdTU0xJQlNACi0gU1NIRExJQlM9QFNTSERMSUJTQAotK0tFWUNBVExJQlM9QEtFWUNB VExJQlNACi0gTElCRURJVD1ATElCRURJVEAKLSBMSUJGSURPMj1ATElCRklETzJACi0gTElCV1RN UERCPUBMSUJXVE1QREJACi1AQCAtNzUsNyArNzcsNyBAQCBNS0RJUl9QPUBNS0RJUl9QQAotIAot IC5TVUZGSVhFUzogLmxvCi0gCi0tVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQoRVhFRVhUKSBz c2hkLXNlc3Npb24kKEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQkKEVYRUVYVCkg c3NoLWtleWdlbiQoRVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5c2lnbiR7RVhF RVhUfSBzc2gtcGtjczExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVYVCkgc2NwJChF WEVFWFQpIHNmdHAtc2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNrLWhlbHBlciQo RVhFRVhUKSAkKFNLX1NUQU5EQUxPTkUpCi0rVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQoRVhF RVhUKSBzc2hkLXNlc3Npb24kKEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQkKEVY RUVYVCkgc3NoLWtleWdlbiQoRVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5c2ln biR7RVhFRVhUfSBzc2gtcGtjczExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVYVCkg c2NwJChFWEVFWFQpIHNmdHAtc2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNrLWhl bHBlciQoRVhFRVhUKSBzc2gta2V5Y2F0JChFWEVFWFQpICQoU0tfU1RBTkRBTE9ORSkKLSAKLSBM SUJPUEVOU1NIX09CSlM9XAotIAlzc2hfYXBpLm8gXAotQEAgLTI1Miw2ICsyNTQsOSBAQCBzc2gt cGtjczExLWhlbHBlciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQoUDExSEVMUEVS X09CSlMpCi0gc3NoLXNrLWhlbHBlciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQo U0tIRUxQRVJfT0JKUykKLSAJJChMRCkgLW8gJEAgJChTS0hFTFBFUl9PQkpTKSAkKExERkxBR1Mp IC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAkKExJQlMpICQo TElCRklETzIpICQoQ0hBTk5FTExJQlMpCi0gCi0rc3NoLWtleWNhdCQoRVhFRVhUKTogJChMSUJD T01QQVQpICQoU1NIRE9CSlMpIGxpYnNzaC5hIHNzaC1rZXljYXQubyB1aWRzd2FwLm8KLSsJJChM RCkgLW8gJEAgc3NoLWtleWNhdC5vIHVpZHN3YXAubyAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJz ZC1jb21wYXQgJChLRVlDQVRMSUJTKSAkKENIQU5ORUxMSUJTKSAkKExJQlMpCi0rCi0gc3NoLWtl eXNjYW4kKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNTSEtFWVNDQU5fT0JKUykK LSAJJChMRCkgLW8gJEAgJChTU0hLRVlTQ0FOX09CSlMpICQoTERGTEFHUykgLWxzc2ggLWxvcGVu YnNkLWNvbXBhdCAtbHNzaCAkKExJQlMpICQoQ0hBTk5FTExJQlMpCi0gCi1AQCAtNDQwLDYgKzQ0 NSw3IEBAIGluc3RhbGwtZmlsZXM6Ci0gCSQoSU5TVEFMTCkgLW0gNDcxMSAkKFNUUklQX09QVCkg c3NoLWtleXNpZ24kKEVYRUVYVCkgJChERVNURElSKSQoU1NIX0tFWVNJR04pJChFWEVFWFQpCi0g CSQoSU5TVEFMTCkgLW0gMDc1NSAkKFNUUklQX09QVCkgc3NoLXBrY3MxMS1oZWxwZXIkKEVYRUVY VCkgJChERVNURElSKSQoU1NIX1BLQ1MxMV9IRUxQRVIpJChFWEVFWFQpCi0gCSQoSU5TVEFMTCkg LW0gMDc1NSAkKFNUUklQX09QVCkgc3NoLXNrLWhlbHBlciQoRVhFRVhUKSAkKERFU1RESVIpJChT U0hfU0tfSEVMUEVSKSQoRVhFRVhUKQotKwkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQp IHNzaC1rZXljYXQkKEVYRUVYVCkgJChERVNURElSKSQobGliZXhlY2Rpcikvc3NoLWtleWNhdCQo RVhFRVhUKQotIAkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNmdHAkKEVYRUVYVCkg JChERVNURElSKSQoYmluZGlyKS9zZnRwJChFWEVFWFQpCi0gCSQoSU5TVEFMTCkgLW0gMDc1NSAk KFNUUklQX09QVCkgc2Z0cC1zZXJ2ZXIkKEVYRUVYVCkgJChERVNURElSKSQoU0ZUUF9TRVJWRVIp JChFWEVFWFQpCi0gCSQoSU5TVEFMTCkgLW0gNjQ0IHNzaC4xLm91dCAkKERFU1RESVIpJChtYW5k aXIpLyQobWFuc3ViZGlyKTEvc3NoLjEKLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25m aWd1cmUuYWMKLWluZGV4IGE4ZTlkZjY2Yi4uOGY4Mjc2Yzc4IDEwMDY0NAotLS0tIGEvY29uZmln dXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0zNzA5LDYgKzM3MDksNyBAQCBBQ19BUkdf V0lUSChbcGFtXSwKLSAJCQlQQU1fTVNHPSJ5ZXMiCi0gCi0gCQkJU1NIRExJQlM9IiRTU0hETElC UyAtbHBhbSIKLSsJCQlLRVlDQVRMSUJTPSIkS0VZQ0FUTElCUyAtbHBhbSIKLSAJCQlBQ19ERUZJ TkUoW1VTRV9QQU1dLCBbMV0sCi0gCQkJCVtEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBB TSBzdXBwb3J0XSkKLSAKLUBAIC0zNzE5LDYgKzM3MjAsNyBAQCBBQ19BUkdfV0lUSChbcGFtXSwK LSAJCQkJCTs7Ci0gCQkJCSopCi0gCQkJCQlTU0hETElCUz0iJFNTSERMSUJTIC1sZGwiCi0rCQkJ CQlLRVlDQVRMSUJTPSIkS0VZQ0FUTElCUyAtbGRsIgotIAkJCQkJOzsKLSAJCQkJZXNhYwotIAkJ CWZpCi1AQCAtNDk2Miw2ICs0OTY0LDcgQEAgQUNfQVJHX1dJVEgoW3NlbGludXhdLAotIAlmaSBd Ci0gKQotIEFDX1NVQlNUKFtTU0hETElCU10pCi0rQUNfU1VCU1QoW0tFWUNBVExJQlNdKQotIAot ICMgQ2hlY2sgd2hldGhlciB1c2VyIHdhbnRzIEtlcmJlcm9zIDUgc3VwcG9ydAotIEtSQjVfTVNH PSJubyIKLUBAIC01OTc1LDYgKzU5NzgsOSBAQCBmaQotIGlmIHRlc3QgISAteiAiJHtTU0hETElC U30iOyB0aGVuCi0gZWNobyAiICAgICAgICAgK2ZvciBzc2hkOiAke1NTSERMSUJTfSIKLSBmaQot K2lmIHRlc3QgISAteiAiJHtLRVlDQVRMSUJTfSI7IHRoZW4KLStlY2hvICIgICArZm9yIHNzaC1r ZXljYXQ6ICR7S0VZQ0FUTElCU30iCi0rZmkKLSAKLSBlY2hvICIiCi0gCi1kaWZmIC0tZ2l0IGEv c3NoLWtleWNhdC5jIGIvc3NoLWtleWNhdC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXgg MDAwMDAwMDAwLi44YmIxN2M3M2UKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NzaC1rZXljYXQuYwot QEAgLTAsMCArMSwyNDEgQEAKLSsvKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBl cm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKLSsgKiAgICBpbmNsdWRpbmcgdGhlIGRp c2NsYWltZXIgb2Ygd2FycmFudGllcy4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5 IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQotKyAqICAgIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLSsgKiAgICB3cml0 dGVuIHBlcm1pc3Npb24uCi0rICoKLSsgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5 IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgotKyAqIHRoZSBHTlUgUHVibGljIExp Y2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKLSsgKiBy ZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2Ug aXMKLSsgKiBuZWNlc3NhcnkgZHVlIHRvIGEgcG90ZW50aWFsIGJhZCBpbnRlcmFjdGlvbiBiZXR3 ZWVuIHRoZSBHUEwgYW5kCi0rICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qt c3R5bGUgY29weXJpZ2h0LikKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBB UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0rICogV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSsgKiBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot KyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwKLSsgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSsgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSsgKiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICovCi0rCi0rLyoKLSsgKiBDb3B5cmlnaHQg KGMpIDIwMTEgUmVkIEhhdCwgSW5jLgotKyAqIFdyaXR0ZW4gYnkgVG9tYXMgTXJheiA8dG1yYXpA cmVkaGF0LmNvbT4KLSsqLwotKwotKyNkZWZpbmUgX0dOVV9TT1VSQ0UKLSsKLSsjaW5jbHVkZSAi Y29uZmlnLmgiCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+Ci0rI2luY2x1ZGUgPHB3ZC5oPgotKyNpbmNsdWRlIDxmY250bC5oPgotKyNpbmNs dWRlIDx1bmlzdGQuaD4KLSsjaWZkZWYgSEFWRV9TVERJTlRfSAotKyNpbmNsdWRlIDxzdGRpbnQu aD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX2FwcGwuaD4KLSsKLSsjaW5j bHVkZSAidWlkc3dhcC5oIgotKyNpbmNsdWRlICJtaXNjLmgiCi0rCi0rI2RlZmluZSBFUlJfVVNB R0UgMQotKyNkZWZpbmUgRVJSX1BBTV9TVEFSVCAyCi0rI2RlZmluZSBFUlJfT1BFTl9TRVNTSU9O IDMKLSsjZGVmaW5lIEVSUl9DTE9TRV9TRVNTSU9OIDQKLSsjZGVmaW5lIEVSUl9QQU1fRU5EIDUK LSsjZGVmaW5lIEVSUl9HRVRQV05BTSA2Ci0rI2RlZmluZSBFUlJfTUVNT1JZIDcKLSsjZGVmaW5l IEVSUl9PUEVOIDgKLSsjZGVmaW5lIEVSUl9GSUxFX01PREUgOQotKyNkZWZpbmUgRVJSX0ZET1BF TiAxMAotKyNkZWZpbmUgRVJSX1NUQVQgMTEKLSsjZGVmaW5lIEVSUl9XUklURSAxMgotKyNkZWZp bmUgRVJSX1BBTV9QVVRFTlYgMTMKLSsjZGVmaW5lIEJVRkxFTiA0MDk2Ci0rCi0rLyogSnVzdCBp Z25vcmUgdGhlIG1lc3NhZ2VzIGluIHRoZSBjb252ZXJzYXRpb24gZnVuY3Rpb24gKi8KLStzdGF0 aWMgaW50Ci0rZHVtbXlfY29udihpbnQgbnVtX21zZywgY29uc3Qgc3RydWN0IHBhbV9tZXNzYWdl ICoqbXNnbSwKLSsJICAgc3RydWN0IHBhbV9yZXNwb25zZSAqKnJlc3BvbnNlLCB2b2lkICphcHBk YXRhX3B0cikKLSt7Ci0rCXN0cnVjdCBwYW1fcmVzcG9uc2UgKnJzcDsKLSsKLSsJKHZvaWQpbXNn bTsKLSsJKHZvaWQpYXBwZGF0YV9wdHI7Ci0rCi0rCWlmIChudW1fbXNnIDw9IDApCi0rCQlyZXR1 cm4gUEFNX0NPTlZfRVJSOwotKwotKwkvKiBKdXN0IGFsbG9jYXRlIHRoZSBhcnJheSBhcyBlbXB0 eSByZXNwb25zZXMgKi8KLSsJcnNwID0gY2FsbG9jIChudW1fbXNnLCBzaXplb2YgKHN0cnVjdCBw YW1fcmVzcG9uc2UpKTsKLSsJaWYgKHJzcCA9PSBOVUxMKQotKwkJcmV0dXJuIFBBTV9DT05WX0VS UjsKLSsKLSsJKnJlc3BvbnNlID0gcnNwOwotKwlyZXR1cm4gUEFNX1NVQ0NFU1M7Ci0rfQotKwot K3N0YXRpYyBzdHJ1Y3QgcGFtX2NvbnYgY29udiA9IHsKLSsJZHVtbXlfY29udiwKLSsJTlVMTAot K307Ci0rCi0rY2hhciAqCi0rbWFrZV9hdXRoX2tleXNfbmFtZShjb25zdCBzdHJ1Y3QgcGFzc3dk ICpwd2QpCi0rewotKwljaGFyICpmbmFtZTsKLSsKLSsJaWYgKGFzcHJpbnRmKCZmbmFtZSwgIiVz Ly5zc2gvYXV0aG9yaXplZF9rZXlzIiwgcHdkLT5wd19kaXIpIDwgMCkKLSsJCXJldHVybiBOVUxM OwotKwotKwlyZXR1cm4gZm5hbWU7Ci0rfQotKwotK2ludAotK2R1bXBfa2V5cyhjb25zdCBjaGFy ICp1c2VyKQotK3sKLSsJc3RydWN0IHBhc3N3ZCAqcHdkOwotKwlpbnQgZmQgPSAtMTsKLSsJRklM RSAqZiA9IE5VTEw7Ci0rCWNoYXIgKmZuYW1lID0gTlVMTDsKLSsJaW50IHJ2ID0gMDsKLSsJY2hh ciBidWZbQlVGTEVOXTsKLSsJc2l6ZV90IGxlbjsKLSsJc3RydWN0IHN0YXQgc3Q7Ci0rCi0rCWlm ICgocHdkID0gZ2V0cHduYW0odXNlcikpID09IE5VTEwpIHsKLSsJCXJldHVybiBFUlJfR0VUUFdO QU07Ci0rCX0KLSsKLSsJaWYgKChmbmFtZSA9IG1ha2VfYXV0aF9rZXlzX25hbWUocHdkKSkgPT0g TlVMTCkgewotKwkJcmV0dXJuIEVSUl9NRU1PUlk7Ci0rCX0KLSsKLSsJdGVtcG9yYXJpbHlfdXNl X3VpZChwd2QpOwotKwotKwlpZiAoKGZkID0gb3BlbihmbmFtZSwgT19SRE9OTFl8T19OT05CTE9D S3xPX05PRk9MTE9XLCAwKSkgPCAwKSB7Ci0rCQlydiA9IEVSUl9PUEVOOwotKwkJZ290byBmYWls OwotKwl9Ci0rCi0rCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKLSsJCXJ2ID0gRVJSX1NUQVQ7 Ci0rCQlnb3RvIGZhaWw7Ci0rCX0KLSsKLSsJaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpIHx8Ci0r CQkoc3Quc3RfdWlkICE9IHB3ZC0+cHdfdWlkICYmIHN0LnN0X3VpZCAhPSAwKSkgewotKwkJcnYg PSBFUlJfRklMRV9NT0RFOwotKwkJZ290byBmYWlsOwotKwl9Ci0rCi0rCXVuc2V0X25vbmJsb2Nr KGZkKTsKLSsKLSsJaWYgKChmID0gZmRvcGVuKGZkLCAiciIpKSA9PSBOVUxMKSB7Ci0rCQlydiA9 IEVSUl9GRE9QRU47Ci0rCQlnb3RvIGZhaWw7Ci0rCX0KLSsKLSsJZmQgPSAtMTsKLSsKLSsJd2hp bGUgKChsZW4gPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBmKSkgPiAwKSB7Ci0rCQlydiA9 IGZ3cml0ZShidWYsIDEsIGxlbiwgc3Rkb3V0KSAhPSBsZW4gPyBFUlJfV1JJVEUgOiAwOwotKwl9 Ci0rCi0rZmFpbDoKLSsJaWYgKGZkICE9IC0xKQotKwkJY2xvc2UoZmQpOwotKwlpZiAoZiAhPSBO VUxMKQotKwkJZmNsb3NlKGYpOwotKwlmcmVlKGZuYW1lKTsKLSsJcmVzdG9yZV91aWQoKTsKLSsJ cmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgY29uc3QgY2hhciAqZW52X25hbWVzW10gPSB7ICJT RUxJTlVYX1JPTEVfUkVRVUVTVEVEIiwKLSsJIlNFTElOVVhfTEVWRUxfUkVRVUVTVEVEIiwKLSsJ IlNFTElOVVhfVVNFX0NVUlJFTlRfUkFOR0UiCi0rfTsKLSsKLStleHRlcm4gY2hhciAqKmVudmly b247Ci0rCi0raW50Ci0rc2V0X3BhbV9lbnZpcm9ubWVudChwYW1faGFuZGxlX3QgKnBhbWgpCi0r ewotKwlpbnQgaTsKLSsJc2l6ZV90IGo7Ci0rCi0rCWZvciAoaiA9IDA7IGogPCBzaXplb2YoZW52 X25hbWVzKS9zaXplb2YoZW52X25hbWVzWzBdKTsgKytqKSB7Ci0rCQlpbnQgbGVuID0gc3RybGVu KGVudl9uYW1lc1tqXSk7Ci0rCi0rCQlmb3IgKGkgPSAwOyBlbnZpcm9uW2ldICE9IE5VTEw7ICsr aSkgewotKwkJCWlmIChzdHJuY21wKGVudl9uYW1lc1tqXSwgZW52aXJvbltpXSwgbGVuKSA9PSAw ICYmCi0rCQkJICAgIGVudmlyb25baV1bbGVuXSA9PSAnPScpIHsKLSsJCQkJaWYgKHBhbV9wdXRl bnYocGFtaCwgZW52aXJvbltpXSkgIT0gUEFNX1NVQ0NFU1MpCi0rCQkJCQlyZXR1cm4gRVJSX1BB TV9QVVRFTlY7Ci0rCQkJfQotKwkJfQotKwl9Ci0rCi0rCXJldHVybiAwOwotK30KLSsKLStpbnQK LSttYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKwlwYW1faGFuZGxlX3QgKnBhbWgg PSBOVUxMOwotKwlpbnQgcmV0dmFsOwotKwlpbnQgZXYgPSAwOwotKwotKwlpZiAoYXJnYyAhPSAy KSB7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8dXNlci1uYW1lPlxuIiwgYXJndlsw XSk7Ci0rCQlyZXR1cm4gRVJSX1VTQUdFOwotKwl9Ci0rCi0rCXJldHZhbCA9IHBhbV9zdGFydCgi c3NoLWtleWNhdCIsIGFyZ3ZbMV0sICZjb252LCAmcGFtaCk7Ci0rCWlmIChyZXR2YWwgIT0gUEFN X1NVQ0NFU1MpIHsKLSsJCXJldHVybiBFUlJfUEFNX1NUQVJUOwotKwl9Ci0rCi0rCWV2ID0gc2V0 X3BhbV9lbnZpcm9ubWVudChwYW1oKTsKLSsJaWYgKGV2ICE9IDApCi0rCQlnb3RvIGZpbmlzaDsK LSsKLSsJcmV0dmFsID0gcGFtX29wZW5fc2Vzc2lvbihwYW1oLCBQQU1fU0lMRU5UKTsKLSsJaWYg KHJldHZhbCAhPSBQQU1fU1VDQ0VTUykgewotKwkJZXYgPSBFUlJfT1BFTl9TRVNTSU9OOwotKwkJ Z290byBmaW5pc2g7Ci0rCX0KLSsKLSsJZXYgPSBkdW1wX2tleXMoYXJndlsxXSk7Ci0rCi0rCXJl dHZhbCA9IHBhbV9jbG9zZV9zZXNzaW9uKHBhbWgsIFBBTV9TSUxFTlQpOwotKwlpZiAocmV0dmFs ICE9IFBBTV9TVUNDRVNTKSB7Ci0rCQlldiA9IEVSUl9DTE9TRV9TRVNTSU9OOwotKwl9Ci0rCi0r ZmluaXNoOgotKwlyZXR2YWwgPSBwYW1fZW5kIChwYW1oLHJldHZhbCk7Ci0rCWlmIChyZXR2YWwg IT0gUEFNX1NVQ0NFU1MpIHsKLSsJCWV2ID0gRVJSX1BBTV9FTkQ7Ci0rCX0KLSsJcmV0dXJuIGV2 OwotK30KLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDA1LW9wZW5zc2gtNi42cDEtYWxs b3ctaXAtb3B0cy5wYXRjaCBiLzAwMDUtb3BlbnNzaC02LjZwMS1hbGxvdy1pcC1vcHRzLnBhdGNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjQzZTgxLi4wMDAwMDAwCi0tLSBhLzAw MDUtb3BlbnNzaC02LjZwMS1hbGxvdy1pcC1vcHRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs NTYgKzAsMCBAQAotRnJvbSAxMzViYjY5MDNiNzE1MDEyYThhZTMwMjAyMmJiN2EzMWQxODc5YzZh IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRt aXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3Vi amVjdDogW1BBVENIIDA1LzU0XSBvcGVuc3NoLTYuNnAxLWFsbG93LWlwLW9wdHMKLQotI2h0dHBz Oi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQKLS0tLQotIHNzaGQt c2Vzc2lvbi5jIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KLSAxIGZpbGUg Y2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBh L3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKLWluZGV4IDk2NzczN2M1Yi4uMDBkMDBl MjkzIDEwMDY0NAotLS0tIGEvc3NoZC1zZXNzaW9uLmMKLSsrKyBiL3NzaGQtc2Vzc2lvbi5jCi1A QCAtNzI2LDEyICs3MjYsMzIgQEAgY2hlY2tfaXBfb3B0aW9ucyhzdHJ1Y3Qgc3NoICpzc2gpCi0g Ci0gCWlmIChnZXRzb2Nrb3B0KHNvY2tfaW4sIElQUFJPVE9fSVAsIElQX09QVElPTlMsIG9wdHMs Ci0gCSAgICAmb3B0aW9uX3NpemUpID49IDAgJiYgb3B0aW9uX3NpemUgIT0gMCkgewotLQkJdGV4 dFswXSA9ICdcMCc7Ci0tCQlmb3IgKGkgPSAwOyBpIDwgb3B0aW9uX3NpemU7IGkrKykKLS0JCQlz bnByaW50Zih0ZXh0ICsgaSozLCBzaXplb2YodGV4dCkgLSBpKjMsCi0tCQkJICAgICIgJTIuMngi LCBvcHRzW2ldKTsKLS0JCWZhdGFsKCJDb25uZWN0aW9uIGZyb20gJS4xMDBzIHBvcnQgJWQgd2l0 aCBJUCBvcHRzOiAlLjgwMHMiLAotLQkJICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9y ZW1vdGVfcG9ydChzc2gpLCB0ZXh0KTsKLSsJCWkgPSAwOwotKwkJZG8gewotKwkJCXN3aXRjaCAo b3B0c1tpXSkgewotKwkJCQljYXNlIDA6Ci0rCQkJCWNhc2UgMToKLSsJCQkJCSsraTsKLSsJCQkJ CWJyZWFrOwotKwkJCQljYXNlIDEzMDoKLSsJCQkJY2FzZSAxMzM6Ci0rCQkJCWNhc2UgMTM0Ogot KwkJCQkJaWYgKGkgKyAxIDwgb3B0aW9uX3NpemUgJiYgb3B0c1tpICsgMV0gPj0gMikgewotKwkJ CQkJCWkgKz0gb3B0c1tpICsgMV07Ci0rCQkJCQkJYnJlYWs7Ci0rCQkJCQl9Ci0rCQkJCQkvKiBG QUxMVEhST1VHSCAqLwotKwkJCQlkZWZhdWx0OgotKwkJCQkvKiBGYWlsLCBmYXRhbGx5LCBpZiB3 ZSBkZXRlY3QgZWl0aGVyIGxvb3NlIG9yIHN0cmljdAotKwkJCSAJICogb3IgaW5jb3JyZWN0IHNv dXJjZSByb3V0aW5nIG9wdGlvbnMuICovCi0rCQkJCQl0ZXh0WzBdID0gJ1wwJzsKLSsJCQkJCWZv ciAoaSA9IDA7IGkgPCBvcHRpb25fc2l6ZTsgaSsrKQotKwkJCQkJCXNucHJpbnRmKHRleHQgKyBp KjMsIHNpemVvZih0ZXh0KSAtIGkqMywKLSsJCQkJCQkJIiAlMi4yeCIsIG9wdHNbaV0pOwotKwkJ CQkJZmF0YWwoIkNvbm5lY3Rpb24gZnJvbSAlLjEwMHMgcG9ydCAlZCB3aXRoIElQIG9wdGlvbnM6 JS44MDBzIiwKLSsJCQkJCQlzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQo c3NoKSwgdGV4dCk7Ci0rCQkJfQotKwkJfSB3aGlsZSAoaSA8IG9wdGlvbl9zaXplKTsKLSAJfQot ICNlbmRpZiAvKiBJUF9PUFRJT05TICovCi0gfQotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBh LzAwMDUtb3BlbnNzaC02LjZwMS1rZXljYXQucGF0Y2ggYi8wMDA1LW9wZW5zc2gtNi42cDEta2V5 Y2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOWE1ZWYKLS0t IC9kZXYvbnVsbAorKysgYi8wMDA1LW9wZW5zc2gtNi42cDEta2V5Y2F0LnBhdGNoCkBAIC0wLDAg KzEsMzkzIEBACitGcm9tIDYxNjRkOTU4OWJlNTEyNWI5NWRhOTk5ZWQ2NjE1YWE0MzFhNDJlNzAg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCitTdWJq ZWN0OiBbUEFUQ0ggMDUvNTNdIG9wZW5zc2gtNi42cDEta2V5Y2F0CisKKy0tLQorIC5kZXBlbmQg ICAgICAgICAgfCAgIDEgKworIC5naXRpZ25vcmUgICAgICAgfCAgIDEgKworIEhPV1RPLnNzaC1r ZXljYXQgfCAgMTIgKysrCisgTWFrZWZpbGUuaW4gICAgICB8ICAgOCArLQorIGNvbmZpZ3VyZS5h YyAgICAgfCAgIDYgKysKKyBzc2gta2V5Y2F0LmMgICAgIHwgMjQxICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNiBmaWxlcyBjaGFuZ2VkLCAyNjggaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBIT1dUTy5zc2gt a2V5Y2F0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNzaC1rZXljYXQuYworCitkaWZmIC0tZ2l0IGEv LmRlcGVuZCBiLy5kZXBlbmQKK2luZGV4IDg0NWZhZGNlYi4uN2QyZDAwYmJmIDEwMDY0NAorLS0t IGEvLmRlcGVuZAorKysrIGIvLmRlcGVuZAorQEAgLTEzNSw2ICsxMzUsNyBAQCBzc2gtZWQyNTUx OS1zay5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2Qt Y29tcGF0L29wZW5icworIHNzaC1lZDI1NTE5Lm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVmaW5l cy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNv bXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFk cGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0 YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEyLmgg b3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21wYXQv Zm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaWdu YWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNf aWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13YWl0 cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1 NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0 LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGlu dXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5l dC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAu aCBlbnRyb3B5LmggY3J5cHRvX2FwaS5oIGxvZy5oIHNzaGVyci5oIHNzaGJ1Zi5oIHNzaGtleS5o Cisgc3NoLWtleWdlbi5vOiBjaXBoZXItY2hhY2hhcG9seS5oIGNoYWNoYS5oIHBvbHkxMzA1Lmgg Y2lwaGVyLWFlc2N0ci5oIHJpam5kYWVsLmgKKyBzc2gta2V5Z2VuLm86IGluY2x1ZGVzLmggY29u ZmlnLmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQu aCBvcGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNk LWNvbXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29t cGF0L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0 L2JzZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3Bl bmJzZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29t cGF0L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0 L2JzZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29t cGF0L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBh dC9mYWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNk LWNvbXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29t cGF0L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNv bXBhdC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9i c2QtbmV4dHN0ZXAuaCBlbnRyb3B5LmggeG1hbGxvYy5oIHNzaGtleS5oIGF1dGhmaWxlLmggc3No YnVmLmggcGF0aG5hbWVzLmggbG9nLmggc3NoZXJyLmggbWlzYy5oIG1hdGNoLmggaG9zdGZpbGUu aCBkbnMuaCBzc2guaCBzc2gyLmggYXRvbWljaW8uaCBrcmwuaCBkaWdlc3QuaCB1dGY4LmggYXV0 aGZkLmggc3Noc2lnLmggc3NoLXNrLmggc2stYXBpLmggY2lwaGVyLmgKKytzc2gta2V5Y2F0Lm86 IGNvbmZpZy5oIHVpZHN3YXAuaCBtaXNjLmgKKyBzc2gta2V5c2Nhbi5vOiBhdG9taWNpby5oIG1p c2MuaCBob3N0ZmlsZS5oIHNzaF9hcGkuaCBzc2gyLmggZG5zLmggYWRkci5oCisgc3NoLWtleXNj YW4ubzogaW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNv bXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5oIG9wZW5ic2QtY29t cGF0L3NpZ2FjdC5oIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmggb3BlbmJzZC1jb21w YXQvdmlzLmggb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaCBvcGVuYnNkLWNvbXBhdC9z aGExLmggb3BlbmJzZC1jb21wYXQvYnNkLXNoYTIuaCBvcGVuYnNkLWNvbXBhdC9tZDUuaCBvcGVu YnNkLWNvbXBhdC9ibGYuaCBvcGVuYnNkLWNvbXBhdC9mbm1hdGNoLmggb3BlbmJzZC1jb21wYXQv Z2V0b3B0Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNpZ25hbC5oIG9wZW5ic2QtY29tcGF0L2JzZC1t aXNjLmggb3BlbmJzZC1jb21wYXQvYnNkLXNldHJlc19pZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1z dGF0dmZzLmggb3BlbmJzZC1jb21wYXQvYnNkLXdhaXRwaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt cG9sbC5oIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oIG9wZW5ic2QtY29tcGF0L2JzZC1j eWd3aW5fdXRpbC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4Lmggb3BlbmJzZC1jb21wYXQvcG9y dC1pcml4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oIG9wZW5ic2QtY29tcGF0L3BvcnQt c29sYXJpcy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbmV0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC11 dy5oIG9wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5oIGVudHJvcHkuaCB4bWFsbG9jLmggc3No Lmggc3NoYnVmLmggc3Noa2V5LmggY2lwaGVyLmggY2lwaGVyLWNoYWNoYXBvbHkuaCBjaGFjaGEu aCBwb2x5MTMwNS5oIGNpcGhlci1hZXNjdHIuaCByaWpuZGFlbC5oIGRpZ2VzdC5oIGtleC5oIG1h Yy5oIGNyeXB0b19hcGkuaCBjb21wYXQuaCBteXByb3Bvc2FsLmggcGFja2V0LmggZGlzcGF0Y2gu aCBsb2cuaCBzc2hlcnIuaAorIHNzaC1rZXlzaWduLm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVm aW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNk LWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9y ZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJy c2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEy Lmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21w YXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1z aWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRy ZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13 YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJm YzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9w b3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQt bGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0 LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0 ZXAuaCBlbnRyb3B5LmggeG1hbGxvYy5oIGxvZy5oIHNzaGVyci5oIHNzaGtleS5oIHNzaC5oIHNz aDIuaCBtaXNjLmggc3NoYnVmLmggYXV0aGZpbGUuaCBtc2cuaCBjYW5vaG9zdC5oIHBhdGhuYW1l cy5oIHJlYWRjb25mLmggdWlkc3dhcC5oCitkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRp Z25vcmUKK2luZGV4IDkwNzUzMzA2Ny4uN2I0NjY4ZDcxIDEwMDY0NAorLS0tIGEvLmdpdGlnbm9y ZQorKysrIGIvLmdpdGlnbm9yZQorQEAgLTI4LDYgKzI4LDcgQEAgc3NoLWFnZW50Cisgc3NoLWtl eWdlbgorIHNzaC1rZXlzY2FuCisgc3NoLWtleXNpZ24KKytzc2gta2V5Y2F0Cisgc3NoLXBrY3Mx MS1oZWxwZXIKKyBzc2gtc2staGVscGVyCisgc3NoZAorZGlmZiAtLWdpdCBhL0hPV1RPLnNzaC1r ZXljYXQgYi9IT1dUTy5zc2gta2V5Y2F0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw MDAwMDAwLi42MzBlYzYyOGMKKy0tLSAvZGV2L251bGwKKysrKyBiL0hPV1RPLnNzaC1rZXljYXQK K0BAIC0wLDAgKzEsMTIgQEAKKytUaGUgc3NoLWtleWNhdCByZXRyaWV2ZXMgdGhlIGNvbnRlbnQg b2YgdGhlIH4vLnNzaC9hdXRob3JpemVkX2tleXMKKytvZiBhbiB1c2VyIGluIGFueSBlbnZpcm9u bWVudC4gVGhpcyBpbmNsdWRlcyBlbnZpcm9ubWVudHMgd2l0aAorK3BvbHlpbnN0YW50aWF0aW9u IG9mIGhvbWUgZGlyZWN0b3JpZXMgYW5kIFNFTGludXggTUxTIHBvbGljeSBlbmFibGVkLgorKwor K1RvIHVzZSBzc2gta2V5Y2F0LCBzZXQgdGhlc2Ugb3B0aW9ucyBpbiAvZXRjL3NzaC9zc2hkX2Nv bmZpZyBmaWxlOgorKyAgICAgICAgQXV0aG9yaXplZEtleXNDb21tYW5kIC91c3IvbGliZXhlYy9v cGVuc3NoL3NzaC1rZXljYXQKKysgICAgICAgIEF1dGhvcml6ZWRLZXlzQ29tbWFuZFVzZXIgcm9v dAorKworK0RvIG5vdCBmb3JnZXQgdG8gZW5hYmxlIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb246 CisrICAgICAgICBQdWJrZXlBdXRoZW50aWNhdGlvbiB5ZXMKKysKKysKK2RpZmYgLS1naXQgYS9N YWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBlOTUwM2U3YjcuLjJhNDQ5NjgwYSAxMDA2 NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTIzLDYgKzIzLDcg QEAgU1NIX1BST0dSQU09QGJpbmRpckAvc3NoCisgQVNLUEFTU19QUk9HUkFNPSQobGliZXhlY2Rp cikvc3NoLWFza3Bhc3MKKyBTRlRQX1NFUlZFUj0kKGxpYmV4ZWNkaXIpL3NmdHAtc2VydmVyCisg U1NIX0tFWVNJR049JChsaWJleGVjZGlyKS9zc2gta2V5c2lnbgorK1NTSF9LRVlDQVQ9JChsaWJl eGVjZGlyKS9zc2gta2V5Y2F0CisgU1NIRF9TRVNTSU9OPSQobGliZXhlY2Rpcikvc3NoZC1zZXNz aW9uCisgU1NIRF9BVVRIPSQobGliZXhlY2Rpcikvc3NoZC1hdXRoCisgU1NIX1BLQ1MxMV9IRUxQ RVI9JChsaWJleGVjZGlyKS9zc2gtcGtjczExLWhlbHBlcgorQEAgLTU4LDYgKzU5LDcgQEAgQ0hB Tk5FTExJQlM9QENIQU5ORUxMSUJTQAorIEs1TElCUz1ASzVMSUJTQAorIEdTU0xJQlM9QEdTU0xJ QlNACisgU1NIRExJQlM9QFNTSERMSUJTQAorK0tFWUNBVExJQlM9QEtFWUNBVExJQlNACisgTElC RURJVD1ATElCRURJVEAKKyBMSUJGSURPMj1ATElCRklETzJACisgTElCV1RNUERCPUBMSUJXVE1Q REJACitAQCAtNzUsNyArNzcsNyBAQCBNS0RJUl9QPUBNS0RJUl9QQAorIAorIC5TVUZGSVhFUzog LmxvCisgCistVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQoRVhFRVhUKSBzc2hkLXNlc3Npb24k KEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQkKEVYRUVYVCkgc3NoLWtleWdlbiQo RVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5c2lnbiR7RVhFRVhUfSBzc2gtcGtj czExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVYVCkgc2NwJChFWEVFWFQpIHNmdHAt c2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNrLWhlbHBlciQoRVhFRVhUKSAkKFNL X1NUQU5EQUxPTkUpCisrVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQoRVhFRVhUKSBzc2hkLXNl c3Npb24kKEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQkKEVYRUVYVCkgc3NoLWtl eWdlbiQoRVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5c2lnbiR7RVhFRVhUfSBz c2gtcGtjczExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVYVCkgc2NwJChFWEVFWFQp IHNmdHAtc2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNrLWhlbHBlciQoRVhFRVhU KSBzc2gta2V5Y2F0JChFWEVFWFQpICQoU0tfU1RBTkRBTE9ORSkKKyAKKyBMSUJPUEVOU1NIX09C SlM9XAorIAlzc2hfYXBpLm8gXAorQEAgLTI1Myw2ICsyNTUsOSBAQCBzc2gtcGtjczExLWhlbHBl ciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQoUDExSEVMUEVSX09CSlMpCisgc3No LXNrLWhlbHBlciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQoU0tIRUxQRVJfT0JK UykKKyAJJChMRCkgLW8gJEAgJChTS0hFTFBFUl9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3Bl bmJzZC1jb21wYXQgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAkKExJQlMpICQoTElCRklETzIpICQo Q0hBTk5FTExJQlMpCisgCisrc3NoLWtleWNhdCQoRVhFRVhUKTogJChMSUJDT01QQVQpICQoU1NI RE9CSlMpIGxpYnNzaC5hIHNzaC1rZXljYXQubyB1aWRzd2FwLm8KKysJJChMRCkgLW8gJEAgc3No LWtleWNhdC5vIHVpZHN3YXAubyAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChL RVlDQVRMSUJTKSAkKENIQU5ORUxMSUJTKSAkKExJQlMpCisrCisgc3NoLWtleXNjYW4kKEVYRUVY VCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNTSEtFWVNDQU5fT0JKUykKKyAJJChMRCkgLW8g JEAgJChTU0hLRVlTQ0FOX09CSlMpICQoTERGTEFHUykgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAt bHNzaCAkKExJQlMpICQoQ0hBTk5FTExJQlMpCisgCitAQCAtNDQ5LDYgKzQ1NCw3IEBAIGluc3Rh bGwtZmlsZXM6CisgCSQoSU5TVEFMTCkgLW0gNDcxMSAkKFNUUklQX09QVCkgc3NoLWtleXNpZ24k KEVYRUVYVCkgJChERVNURElSKSQoU1NIX0tFWVNJR04pJChFWEVFWFQpCisgCSQoSU5TVEFMTCkg LW0gMDc1NSAkKFNUUklQX09QVCkgc3NoLXBrY3MxMS1oZWxwZXIkKEVYRUVYVCkgJChERVNURElS KSQoU1NIX1BLQ1MxMV9IRUxQRVIpJChFWEVFWFQpCisgCSQoSU5TVEFMTCkgLW0gMDc1NSAkKFNU UklQX09QVCkgc3NoLXNrLWhlbHBlciQoRVhFRVhUKSAkKERFU1RESVIpJChTU0hfU0tfSEVMUEVS KSQoRVhFRVhUKQorKwkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNzaC1rZXljYXQk KEVYRUVYVCkgJChERVNURElSKSQobGliZXhlY2Rpcikvc3NoLWtleWNhdCQoRVhFRVhUKQorIAkk KElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNmdHAkKEVYRUVYVCkgJChERVNURElSKSQo YmluZGlyKS9zZnRwJChFWEVFWFQpCisgCSQoSU5TVEFMTCkgLW0gMDc1NSAkKFNUUklQX09QVCkg c2Z0cC1zZXJ2ZXIkKEVYRUVYVCkgJChERVNURElSKSQoU0ZUUF9TRVJWRVIpJChFWEVFWFQpCisg CSQoSU5TVEFMTCkgLW0gNjQ0IHNzaC4xLm91dCAkKERFU1RESVIpJChtYW5kaXIpLyQobWFuc3Vi ZGlyKTEvc3NoLjEKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2lu ZGV4IGNiMTcxMWY2Yi4uNGIzY2ZmMzhjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysg Yi9jb25maWd1cmUuYWMKK0BAIC0zNjM5LDYgKzM2MzksNyBAQCBBQ19BUkdfV0lUSChbcGFtXSwK KyAJCQlQQU1fTVNHPSJ5ZXMiCisgCisgCQkJU1NIRExJQlM9IiRTU0hETElCUyAtbHBhbSIKKysJ CQlLRVlDQVRMSUJTPSIkS0VZQ0FUTElCUyAtbHBhbSIKKyAJCQlBQ19ERUZJTkUoW1VTRV9QQU1d LCBbMV0sCisgCQkJCVtEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBBTSBzdXBwb3J0XSkK KyAKK0BAIC0zNjQ5LDYgKzM2NTAsNyBAQCBBQ19BUkdfV0lUSChbcGFtXSwKKyAJCQkJCTs7Cisg CQkJCSopCisgCQkJCQlTU0hETElCUz0iJFNTSERMSUJTIC1sZGwiCisrCQkJCQlLRVlDQVRMSUJT PSIkS0VZQ0FUTElCUyAtbGRsIgorIAkJCQkJOzsKKyAJCQkJZXNhYworIAkJCWZpCitAQCAtNDg5 Miw2ICs0ODk0LDcgQEAgQUNfQVJHX1dJVEgoW3NlbGludXhdLAorIAlmaSBdCisgKQorIEFDX1NV QlNUKFtTU0hETElCU10pCisrQUNfU1VCU1QoW0tFWUNBVExJQlNdKQorIAorICMgQ2hlY2sgd2hl dGhlciB1c2VyIHdhbnRzIEtlcmJlcm9zIDUgc3VwcG9ydAorIEtSQjVfTVNHPSJubyIKK0BAIC01 OTA1LDYgKzU5MDgsOSBAQCBmaQorIGlmIHRlc3QgISAteiAiJHtTU0hETElCU30iOyB0aGVuCisg ZWNobyAiICAgICAgICAgK2ZvciBzc2hkOiAke1NTSERMSUJTfSIKKyBmaQorK2lmIHRlc3QgISAt eiAiJHtLRVlDQVRMSUJTfSI7IHRoZW4KKytlY2hvICIgICArZm9yIHNzaC1rZXljYXQ6ICR7S0VZ Q0FUTElCU30iCisrZmkKKyAKKyBlY2hvICIiCisgCitkaWZmIC0tZ2l0IGEvc3NoLWtleWNhdC5j IGIvc3NoLWtleWNhdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi44 YmIxN2M3M2UKKy0tLSAvZGV2L251bGwKKysrKyBiL3NzaC1rZXljYXQuYworQEAgLTAsMCArMSwy NDEgQEAKKysvKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90 aWNlIGluIGl0cyBlbnRpcmV0eSwKKysgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Yg d2FycmFudGllcy4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2Vk IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKysgKiAgICB3cml0dGVuIHBlcm1pc3Np b24uCisrICoKKysgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorKyAqIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIGluIHdo aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKysgKiByZXF1aXJlZCBJTlNU RUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMKKysgKiBuZWNl c3NhcnkgZHVlIHRvIGEgcG90ZW50aWFsIGJhZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBHUEwg YW5kCisrICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJp Z2h0LikKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBB TlkgRVhQUkVTUyBPUiBJTVBMSUVECisrICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKysgKiBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKyAqIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwKKysgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMKKysgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKysgKiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICovCisrCisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgUmVk IEhhdCwgSW5jLgorKyAqIFdyaXR0ZW4gYnkgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4K KysqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSAiY29uZmlnLmgiCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisr I2luY2x1ZGUgPHB3ZC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDx1bmlzdGQu aD4KKysjaWZkZWYgSEFWRV9TVERJTlRfSAorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYK KysKKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX2FwcGwuaD4KKysKKysjaW5jbHVkZSAidWlkc3dh cC5oIgorKyNpbmNsdWRlICJtaXNjLmgiCisrCisrI2RlZmluZSBFUlJfVVNBR0UgMQorKyNkZWZp bmUgRVJSX1BBTV9TVEFSVCAyCisrI2RlZmluZSBFUlJfT1BFTl9TRVNTSU9OIDMKKysjZGVmaW5l IEVSUl9DTE9TRV9TRVNTSU9OIDQKKysjZGVmaW5lIEVSUl9QQU1fRU5EIDUKKysjZGVmaW5lIEVS Ul9HRVRQV05BTSA2CisrI2RlZmluZSBFUlJfTUVNT1JZIDcKKysjZGVmaW5lIEVSUl9PUEVOIDgK KysjZGVmaW5lIEVSUl9GSUxFX01PREUgOQorKyNkZWZpbmUgRVJSX0ZET1BFTiAxMAorKyNkZWZp bmUgRVJSX1NUQVQgMTEKKysjZGVmaW5lIEVSUl9XUklURSAxMgorKyNkZWZpbmUgRVJSX1BBTV9Q VVRFTlYgMTMKKysjZGVmaW5lIEJVRkxFTiA0MDk2CisrCisrLyogSnVzdCBpZ25vcmUgdGhlIG1l c3NhZ2VzIGluIHRoZSBjb252ZXJzYXRpb24gZnVuY3Rpb24gKi8KKytzdGF0aWMgaW50CisrZHVt bXlfY29udihpbnQgbnVtX21zZywgY29uc3Qgc3RydWN0IHBhbV9tZXNzYWdlICoqbXNnbSwKKysJ ICAgc3RydWN0IHBhbV9yZXNwb25zZSAqKnJlc3BvbnNlLCB2b2lkICphcHBkYXRhX3B0cikKKyt7 CisrCXN0cnVjdCBwYW1fcmVzcG9uc2UgKnJzcDsKKysKKysJKHZvaWQpbXNnbTsKKysJKHZvaWQp YXBwZGF0YV9wdHI7CisrCisrCWlmIChudW1fbXNnIDw9IDApCisrCQlyZXR1cm4gUEFNX0NPTlZf RVJSOworKworKwkvKiBKdXN0IGFsbG9jYXRlIHRoZSBhcnJheSBhcyBlbXB0eSByZXNwb25zZXMg Ki8KKysJcnNwID0gY2FsbG9jIChudW1fbXNnLCBzaXplb2YgKHN0cnVjdCBwYW1fcmVzcG9uc2Up KTsKKysJaWYgKHJzcCA9PSBOVUxMKQorKwkJcmV0dXJuIFBBTV9DT05WX0VSUjsKKysKKysJKnJl c3BvbnNlID0gcnNwOworKwlyZXR1cm4gUEFNX1NVQ0NFU1M7CisrfQorKworK3N0YXRpYyBzdHJ1 Y3QgcGFtX2NvbnYgY29udiA9IHsKKysJZHVtbXlfY29udiwKKysJTlVMTAorK307CisrCisrY2hh ciAqCisrbWFrZV9hdXRoX2tleXNfbmFtZShjb25zdCBzdHJ1Y3QgcGFzc3dkICpwd2QpCisrewor KwljaGFyICpmbmFtZTsKKysKKysJaWYgKGFzcHJpbnRmKCZmbmFtZSwgIiVzLy5zc2gvYXV0aG9y aXplZF9rZXlzIiwgcHdkLT5wd19kaXIpIDwgMCkKKysJCXJldHVybiBOVUxMOworKworKwlyZXR1 cm4gZm5hbWU7CisrfQorKworK2ludAorK2R1bXBfa2V5cyhjb25zdCBjaGFyICp1c2VyKQorK3sK KysJc3RydWN0IHBhc3N3ZCAqcHdkOworKwlpbnQgZmQgPSAtMTsKKysJRklMRSAqZiA9IE5VTEw7 CisrCWNoYXIgKmZuYW1lID0gTlVMTDsKKysJaW50IHJ2ID0gMDsKKysJY2hhciBidWZbQlVGTEVO XTsKKysJc2l6ZV90IGxlbjsKKysJc3RydWN0IHN0YXQgc3Q7CisrCisrCWlmICgocHdkID0gZ2V0 cHduYW0odXNlcikpID09IE5VTEwpIHsKKysJCXJldHVybiBFUlJfR0VUUFdOQU07CisrCX0KKysK KysJaWYgKChmbmFtZSA9IG1ha2VfYXV0aF9rZXlzX25hbWUocHdkKSkgPT0gTlVMTCkgeworKwkJ cmV0dXJuIEVSUl9NRU1PUlk7CisrCX0KKysKKysJdGVtcG9yYXJpbHlfdXNlX3VpZChwd2QpOwor KworKwlpZiAoKGZkID0gb3BlbihmbmFtZSwgT19SRE9OTFl8T19OT05CTE9DS3xPX05PRk9MTE9X LCAwKSkgPCAwKSB7CisrCQlydiA9IEVSUl9PUEVOOworKwkJZ290byBmYWlsOworKwl9CisrCisr CWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKKysJCXJ2ID0gRVJSX1NUQVQ7CisrCQlnb3RvIGZh aWw7CisrCX0KKysKKysJaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpIHx8CisrCQkoc3Quc3RfdWlk ICE9IHB3ZC0+cHdfdWlkICYmIHN0LnN0X3VpZCAhPSAwKSkgeworKwkJcnYgPSBFUlJfRklMRV9N T0RFOworKwkJZ290byBmYWlsOworKwl9CisrCisrCXVuc2V0X25vbmJsb2NrKGZkKTsKKysKKysJ aWYgKChmID0gZmRvcGVuKGZkLCAiciIpKSA9PSBOVUxMKSB7CisrCQlydiA9IEVSUl9GRE9QRU47 CisrCQlnb3RvIGZhaWw7CisrCX0KKysKKysJZmQgPSAtMTsKKysKKysJd2hpbGUgKChsZW4gPSBm cmVhZChidWYsIDEsIHNpemVvZihidWYpLCBmKSkgPiAwKSB7CisrCQlydiA9IGZ3cml0ZShidWYs IDEsIGxlbiwgc3Rkb3V0KSAhPSBsZW4gPyBFUlJfV1JJVEUgOiAwOworKwl9CisrCisrZmFpbDoK KysJaWYgKGZkICE9IC0xKQorKwkJY2xvc2UoZmQpOworKwlpZiAoZiAhPSBOVUxMKQorKwkJZmNs b3NlKGYpOworKwlmcmVlKGZuYW1lKTsKKysJcmVzdG9yZV91aWQoKTsKKysJcmV0dXJuIHJ2Owor K30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqZW52X25hbWVzW10gPSB7ICJTRUxJTlVYX1JPTEVf UkVRVUVTVEVEIiwKKysJIlNFTElOVVhfTEVWRUxfUkVRVUVTVEVEIiwKKysJIlNFTElOVVhfVVNF X0NVUlJFTlRfUkFOR0UiCisrfTsKKysKKytleHRlcm4gY2hhciAqKmVudmlyb247CisrCisraW50 Cisrc2V0X3BhbV9lbnZpcm9ubWVudChwYW1faGFuZGxlX3QgKnBhbWgpCisreworKwlpbnQgaTsK KysJc2l6ZV90IGo7CisrCisrCWZvciAoaiA9IDA7IGogPCBzaXplb2YoZW52X25hbWVzKS9zaXpl b2YoZW52X25hbWVzWzBdKTsgKytqKSB7CisrCQlpbnQgbGVuID0gc3RybGVuKGVudl9uYW1lc1tq XSk7CisrCisrCQlmb3IgKGkgPSAwOyBlbnZpcm9uW2ldICE9IE5VTEw7ICsraSkgeworKwkJCWlm IChzdHJuY21wKGVudl9uYW1lc1tqXSwgZW52aXJvbltpXSwgbGVuKSA9PSAwICYmCisrCQkJICAg IGVudmlyb25baV1bbGVuXSA9PSAnPScpIHsKKysJCQkJaWYgKHBhbV9wdXRlbnYocGFtaCwgZW52 aXJvbltpXSkgIT0gUEFNX1NVQ0NFU1MpCisrCQkJCQlyZXR1cm4gRVJSX1BBTV9QVVRFTlY7Cisr CQkJfQorKwkJfQorKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytpbnQKKyttYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCisreworKwlwYW1faGFuZGxlX3QgKnBhbWggPSBOVUxMOworKwlp bnQgcmV0dmFsOworKwlpbnQgZXYgPSAwOworKworKwlpZiAoYXJnYyAhPSAyKSB7CisrCQlmcHJp bnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8dXNlci1uYW1lPlxuIiwgYXJndlswXSk7CisrCQlyZXR1 cm4gRVJSX1VTQUdFOworKwl9CisrCisrCXJldHZhbCA9IHBhbV9zdGFydCgic3NoLWtleWNhdCIs IGFyZ3ZbMV0sICZjb252LCAmcGFtaCk7CisrCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NFU1MpIHsK KysJCXJldHVybiBFUlJfUEFNX1NUQVJUOworKwl9CisrCisrCWV2ID0gc2V0X3BhbV9lbnZpcm9u bWVudChwYW1oKTsKKysJaWYgKGV2ICE9IDApCisrCQlnb3RvIGZpbmlzaDsKKysKKysJcmV0dmFs ID0gcGFtX29wZW5fc2Vzc2lvbihwYW1oLCBQQU1fU0lMRU5UKTsKKysJaWYgKHJldHZhbCAhPSBQ QU1fU1VDQ0VTUykgeworKwkJZXYgPSBFUlJfT1BFTl9TRVNTSU9OOworKwkJZ290byBmaW5pc2g7 CisrCX0KKysKKysJZXYgPSBkdW1wX2tleXMoYXJndlsxXSk7CisrCisrCXJldHZhbCA9IHBhbV9j bG9zZV9zZXNzaW9uKHBhbWgsIFBBTV9TSUxFTlQpOworKwlpZiAocmV0dmFsICE9IFBBTV9TVUND RVNTKSB7CisrCQlldiA9IEVSUl9DTE9TRV9TRVNTSU9OOworKwl9CisrCisrZmluaXNoOgorKwly ZXR2YWwgPSBwYW1fZW5kIChwYW1oLHJldHZhbCk7CisrCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NF U1MpIHsKKysJCWV2ID0gRVJSX1BBTV9FTkQ7CisrCX0KKysJcmV0dXJuIGV2OworK30KKy0tIAor Mi41NS4wCisKCmRpZmYgLS1naXQgYS8wMDA2LW9wZW5zc2gtNS45cDEtaXB2Nm1hbi5wYXRjaCBi LzAwMDYtb3BlbnNzaC01LjlwMS1pcHY2bWFuLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAyYmI3YWU4Li4wMDAwMDAwCi0tLSBhLzAwMDYtb3BlbnNzaC01LjlwMS1pcHY2bWFu LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotRnJvbSBiYTIwYzIzODBiMzEw OGIxZjhlMmMwMDY4OWE4ZWZjNjYyM2NkNDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJv bTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBN YXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDA2LzU0XSBvcGVuc3NoLTUu OXAxLWlwdjZtYW4KLQotIyhkcm9wPykgaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93 X2J1Zy5jZ2k/aWQ9MTkyNQotLS0tCi0gc3NoLjEgIHwgMiArKwotIHNzaGQuOCB8IDIgKysKLSAy IGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3NoLjEgYi9z c2guMQotaW5kZXggODJhZTU0ODBjLi5jMmM4ZjUwZjEgMTAwNjQ0Ci0tLS0gYS9zc2guMQotKysr IGIvc3NoLjEKLUBAIC0xNjY5LDYgKzE2NjksOCBAQCBtYW51YWwgcGFnZSBmb3IgbW9yZSBpbmZv cm1hdGlvbi4KLSAuTm0KLSBleGl0cyB3aXRoIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgcmVtb3Rl IGNvbW1hbmQgb3Igd2l0aCAyNTUKLSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KLSsuU2ggSVBWNgot K0lQdjYgYWRkcmVzcyBjYW4gYmUgdXNlZCBldmVyeXdoZXJlIHdoZXJlIElQdjQgYWRkcmVzcy4g SW4gYWxsIGVudHJpZXMgbXVzdCBiZSB0aGUgSVB2NiBhZGRyZXNzIGVuY2xvc2VkIGluIHNxdWFy ZSBicmFja2V0cy4gTm90ZTogVGhlIHNxdWFyZSBicmFja2V0cyBhcmUgbWV0YWNoYXJhY3RlcnMg Zm9yIHRoZSBzaGVsbCBhbmQgbXVzdCBiZSBlc2NhcGVkIGluIHNoZWxsLgotIC5TaCBTRUUgQUxT TwotIC5YciBzY3AgMSAsCi0gLlhyIHNmdHAgMSAsCi1kaWZmIC0tZ2l0IGEvc3NoZC44IGIvc3No ZC44Ci1pbmRleCA3ZmJjYTc3NmEuLjAyMjZhODMwMyAxMDA2NDQKLS0tLSBhL3NzaGQuOAotKysr IGIvc3NoZC44Ci1AQCAtMTAxOCw2ICsxMDE4LDggQEAgY29uY3VycmVudGx5IGZvciBkaWZmZXJl bnQgcG9ydHMsIHRoaXMgY29udGFpbnMgdGhlIHByb2Nlc3MgSUQgb2YgdGhlIG9uZQotIHN0YXJ0 ZWQgbGFzdCkuCi0gVGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGlzIG5vdCBzZW5zaXRpdmU7IGl0 IGNhbiBiZSB3b3JsZC1yZWFkYWJsZS4KLSAuRWwKLSsuU2ggSVBWNgotK0lQdjYgYWRkcmVzcyBj YW4gYmUgdXNlZCBldmVyeXdoZXJlIHdoZXJlIElQdjQgYWRkcmVzcy4gSW4gYWxsIGVudHJpZXMg bXVzdCBiZSB0aGUgSVB2NiBhZGRyZXNzIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cy4gTm90 ZTogVGhlIHNxdWFyZSBicmFja2V0cyBhcmUgbWV0YWNoYXJhY3RlcnMgZm9yIHRoZSBzaGVsbCBh bmQgbXVzdCBiZSBlc2NhcGVkIGluIHNoZWxsLgotIC5TaCBTRUUgQUxTTwotIC5YciBzY3AgMSAs Ci0gLlhyIHNmdHAgMSAsCi0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvMDAwNi1vcGVuc3No LTYuNnAxLWFsbG93LWlwLW9wdHMucGF0Y2ggYi8wMDA2LW9wZW5zc2gtNi42cDEtYWxsb3ctaXAt b3B0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQzOTBlCi0t LSAvZGV2L251bGwKKysrIGIvMDAwNi1vcGVuc3NoLTYuNnAxLWFsbG93LWlwLW9wdHMucGF0Y2gK QEAgLTAsMCArMSw1NiBAQAorRnJvbSBiN2IyODczOTZmMDc5MjI4N2VlNGJlMDg3MDJmZjcwODc2 Y2Q0MDFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkg PGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIw MAorU3ViamVjdDogW1BBVENIIDA2LzUzXSBvcGVuc3NoLTYuNnAxLWFsbG93LWlwLW9wdHMKKwor I2h0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQKKy0tLQor IHNzaGQtc2Vzc2lvbi5jIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KKyAx IGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAt LWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKK2luZGV4IDFhNDBhNDNmMS4u MGY0MTc1NmZmIDEwMDY0NAorLS0tIGEvc3NoZC1zZXNzaW9uLmMKKysrKyBiL3NzaGQtc2Vzc2lv bi5jCitAQCAtNzI3LDEyICs3MjcsMzIgQEAgY2hlY2tfaXBfb3B0aW9ucyhzdHJ1Y3Qgc3NoICpz c2gpCisgCisgCWlmIChnZXRzb2Nrb3B0KHNvY2tfaW4sIElQUFJPVE9fSVAsIElQX09QVElPTlMs IG9wdHMsCisgCSAgICAmb3B0aW9uX3NpemUpID49IDAgJiYgb3B0aW9uX3NpemUgIT0gMCkgewor LQkJdGV4dFswXSA9ICdcMCc7CistCQlmb3IgKGkgPSAwOyBpIDwgb3B0aW9uX3NpemU7IGkrKykK Ky0JCQlzbnByaW50Zih0ZXh0ICsgaSozLCBzaXplb2YodGV4dCkgLSBpKjMsCistCQkJICAgICIg JTIuMngiLCBvcHRzW2ldKTsKKy0JCWZhdGFsKCJDb25uZWN0aW9uIGZyb20gJS4xMDBzIHBvcnQg JWQgd2l0aCBJUCBvcHRzOiAlLjgwMHMiLAorLQkJICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCks IHNzaF9yZW1vdGVfcG9ydChzc2gpLCB0ZXh0KTsKKysJCWkgPSAwOworKwkJZG8geworKwkJCXN3 aXRjaCAob3B0c1tpXSkgeworKwkJCQljYXNlIDA6CisrCQkJCWNhc2UgMToKKysJCQkJCSsraTsK KysJCQkJCWJyZWFrOworKwkJCQljYXNlIDEzMDoKKysJCQkJY2FzZSAxMzM6CisrCQkJCWNhc2Ug MTM0OgorKwkJCQkJaWYgKGkgKyAxIDwgb3B0aW9uX3NpemUgJiYgb3B0c1tpICsgMV0gPj0gMikg eworKwkJCQkJCWkgKz0gb3B0c1tpICsgMV07CisrCQkJCQkJYnJlYWs7CisrCQkJCQl9CisrCQkJ CQkvKiBGQUxMVEhST1VHSCAqLworKwkJCQlkZWZhdWx0OgorKwkJCQkvKiBGYWlsLCBmYXRhbGx5 LCBpZiB3ZSBkZXRlY3QgZWl0aGVyIGxvb3NlIG9yIHN0cmljdAorKwkJCSAJICogb3IgaW5jb3Jy ZWN0IHNvdXJjZSByb3V0aW5nIG9wdGlvbnMuICovCisrCQkJCQl0ZXh0WzBdID0gJ1wwJzsKKysJ CQkJCWZvciAoaSA9IDA7IGkgPCBvcHRpb25fc2l6ZTsgaSsrKQorKwkJCQkJCXNucHJpbnRmKHRl eHQgKyBpKjMsIHNpemVvZih0ZXh0KSAtIGkqMywKKysJCQkJCQkJIiAlMi4yeCIsIG9wdHNbaV0p OworKwkJCQkJZmF0YWwoIkNvbm5lY3Rpb24gZnJvbSAlLjEwMHMgcG9ydCAlZCB3aXRoIElQIG9w dGlvbnM6JS44MDBzIiwKKysJCQkJCQlzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3Rl X3BvcnQoc3NoKSwgdGV4dCk7CisrCQkJfQorKwkJfSB3aGlsZSAoaSA8IG9wdGlvbl9zaXplKTsK KyAJfQorICNlbmRpZiAvKiBJUF9PUFRJT05TICovCisgfQorLS0gCisyLjU1LjAKKwoKZGlmZiAt LWdpdCBhLzAwMDctb3BlbnNzaC01LjhwMi1zaWdwaXBlLnBhdGNoIGIvMDAwNy1vcGVuc3NoLTUu OHAyLXNpZ3BpcGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjJkODYu LjAwMDAwMDAKLS0tIGEvMDAwNy1vcGVuc3NoLTUuOHAyLXNpZ3BpcGUucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwyNiArMCwwIEBACi1Gcm9tIGUxNWNjNzNjMWEyNmRjZmFiM2ZkMDA3N2VlMDU2 MTcyNGFkNGY4YjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2 c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4 ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMDcvNTRdIG9wZW5zc2gtNS44cDItc2lncGlwZQotCi0t LS0KLSBzc2gta2V5c2Nhbi5jIHwgMyArKysKLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25z KCspCi0KLWRpZmYgLS1naXQgYS9zc2gta2V5c2Nhbi5jIGIvc3NoLWtleXNjYW4uYwotaW5kZXgg OWJkM2U3OGViLi5iYjNlZTQ2MmQgMTAwNjQ0Ci0tLS0gYS9zc2gta2V5c2Nhbi5jCi0rKysgYi9z c2gta2V5c2Nhbi5jCi1AQCAtNzc3LDYgKzc3Nyw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotIAlpZiAobWF4ZmQgPiBmZGxpbV9nZXQoMCkpCi0gCQlmZGxpbV9zZXQobWF4ZmQpOwot IAlmZGNvbiA9IHhjYWxsb2MobWF4ZmQsIHNpemVvZihjb24pKTsKLSsgCi0rCXNpZ25hbChTSUdQ SVBFLCBTSUdfSUdOKTsKLSsKLSAJcmVhZF93YWl0ID0geGNhbGxvYyhtYXhmZCwgc2l6ZW9mKHN0 cnVjdCBwb2xsZmQpKTsKLSAJZm9yIChqID0gMDsgaiA8IG1heGZkOyBqKyspCi0gCQlyZWFkX3dh aXRbal0uZmQgPSAtMTsKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDA3LW9wZW5zc2gt NS45cDEtaXB2Nm1hbi5wYXRjaCBiLzAwMDctb3BlbnNzaC01LjlwMS1pcHY2bWFuLnBhdGNoCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZjc3YzUKLS0tIC9kZXYvbnVsbAor KysgYi8wMDA3LW9wZW5zc2gtNS45cDEtaXB2Nm1hbi5wYXRjaApAQCAtMCwwICsxLDQwIEBACitG cm9tIGJmNGU2NWI3MzM1ZTUxNmJhZTc4YTBiZDBjMDg1YWI1NWYzNzc5NzMgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+ CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0gg MDcvNTNdIG9wZW5zc2gtNS45cDEtaXB2Nm1hbgorCisjKGRyb3A/KSBodHRwczovL2J1Z3ppbGxh Lm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI1CistLS0KKyBzc2guMSAgfCAyICsrCisg c3NoZC44IHwgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYg LS1naXQgYS9zc2guMSBiL3NzaC4xCitpbmRleCA2MGVlM2FiMzQuLjA4OWJkMzQ4YSAxMDA2NDQK Ky0tLSBhL3NzaC4xCisrKysgYi9zc2guMQorQEAgLTE1NzksNiArMTU3OSw4IEBAIG1hbnVhbCBw YWdlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIC5ObQorIGV4aXRzIHdpdGggdGhlIGV4aXQgc3Rh dHVzIG9mIHRoZSByZW1vdGUgY29tbWFuZCBvciB3aXRoIDI1NQorIGlmIGFuIGVycm9yIG9jY3Vy cmVkLgorKy5TaCBJUFY2CisrSVB2NiBhZGRyZXNzIGNhbiBiZSB1c2VkIGV2ZXJ5d2hlcmUgd2hl cmUgSVB2NCBhZGRyZXNzLiBJbiBhbGwgZW50cmllcyBtdXN0IGJlIHRoZSBJUHY2IGFkZHJlc3Mg ZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzLiBOb3RlOiBUaGUgc3F1YXJlIGJyYWNrZXRzIGFy ZSBtZXRhY2hhcmFjdGVycyBmb3IgdGhlIHNoZWxsIGFuZCBtdXN0IGJlIGVzY2FwZWQgaW4gc2hl bGwuCisgLlNoIFNFRSBBTFNPCisgLlhyIHNjcCAxICwKKyAuWHIgc2Z0cCAxICwKK2RpZmYgLS1n aXQgYS9zc2hkLjggYi9zc2hkLjgKK2luZGV4IGE2NWFhZTc1ZC4uMjRlNTYzOWEzIDEwMDY0NAor LS0tIGEvc3NoZC44CisrKysgYi9zc2hkLjgKK0BAIC0xMDI0LDYgKzEwMjQsOCBAQCBjb25jdXJy ZW50bHkgZm9yIGRpZmZlcmVudCBwb3J0cywgdGhpcyBjb250YWlucyB0aGUgcHJvY2VzcyBJRCBv ZiB0aGUgb25lCisgc3RhcnRlZCBsYXN0KS4KKyBUaGUgY29udGVudCBvZiB0aGlzIGZpbGUgaXMg bm90IHNlbnNpdGl2ZTsgaXQgY2FuIGJlIHdvcmxkLXJlYWRhYmxlLgorIC5FbAorKy5TaCBJUFY2 CisrSVB2NiBhZGRyZXNzIGNhbiBiZSB1c2VkIGV2ZXJ5d2hlcmUgd2hlcmUgSVB2NCBhZGRyZXNz LiBJbiBhbGwgZW50cmllcyBtdXN0IGJlIHRoZSBJUHY2IGFkZHJlc3MgZW5jbG9zZWQgaW4gc3F1 YXJlIGJyYWNrZXRzLiBOb3RlOiBUaGUgc3F1YXJlIGJyYWNrZXRzIGFyZSBtZXRhY2hhcmFjdGVy cyBmb3IgdGhlIHNoZWxsIGFuZCBtdXN0IGJlIGVzY2FwZWQgaW4gc2hlbGwuCisgLlNoIFNFRSBB TFNPCisgLlhyIHNjcCAxICwKKyAuWHIgc2Z0cCAxICwKKy0tIAorMi41NS4wCisKCmRpZmYgLS1n aXQgYS8wMDA4LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaCBiLzAwMDgtb3BlbnNzaC01Ljhw Mi1zaWdwaXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmRh NjcKLS0tIC9kZXYvbnVsbAorKysgYi8wMDA4LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaApA QCAtMCwwICsxLDI2IEBACitGcm9tIGRjY2QyYTlhYmE1ZmE3NThjZmQyN2M2ZGU4NmZhNzM4MzBh YTdmNmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8 YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAw CitTdWJqZWN0OiBbUEFUQ0ggMDgvNTNdIG9wZW5zc2gtNS44cDItc2lncGlwZQorCistLS0KKyBz c2gta2V5c2Nhbi5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisK K2RpZmYgLS1naXQgYS9zc2gta2V5c2Nhbi5jIGIvc3NoLWtleXNjYW4uYworaW5kZXggZjA5M2Iw MTA4Li43N2I0MzQxYzkgMTAwNjQ0CistLS0gYS9zc2gta2V5c2Nhbi5jCisrKysgYi9zc2gta2V5 c2Nhbi5jCitAQCAtNzk3LDYgKzc5Nyw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor IAlpZiAobWF4ZmQgPiBmZGxpbV9nZXQoMCkpCisgCQlmZGxpbV9zZXQobWF4ZmQpOworIAlmZGNv biA9IHhjYWxsb2MobWF4ZmQsIHNpemVvZihjb24pKTsKKysgCisrCXNpZ25hbChTSUdQSVBFLCBT SUdfSUdOKTsKKysKKyAJcmVhZF93YWl0ID0geGNhbGxvYyhtYXhmZCwgc2l6ZW9mKHN0cnVjdCBw b2xsZmQpKTsKKyAJZm9yIChqID0gMDsgaiA8IG1heGZkOyBqKyspCisgCQlyZWFkX3dhaXRbal0u ZmQgPSAtMTsKKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQgYS8wMDA5LW9wZW5zc2gtNS4xcDEt YXNrcGFzcy1wcm9ncmVzcy5wYXRjaCBiLzAwMDktb3BlbnNzaC01LjFwMS1hc2twYXNzLXByb2dy ZXNzLnBhdGNoCmluZGV4IDdiMzY3NGIuLjljMTQzMzIgMTAwNjQ0Ci0tLSBhLzAwMDktb3BlbnNz aC01LjFwMS1hc2twYXNzLXByb2dyZXNzLnBhdGNoCisrKyBiLzAwMDktb3BlbnNzaC01LjFwMS1h c2twYXNzLXByb2dyZXNzLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA0MzE0ZDI4OGRiMmE4 MTRhZDU4ZTkxZGEyMWQyYTY5ZTQ5ODNkM2MxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJv bSA5OTM3NjdkNmM5YzJiMmU5Y2ZhNmZmMmNkM2Q3YmM4YzQ4NjljMmY2IE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgog RGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDA5 LzU0XSBvcGVuc3NoLTUuMXAxLWFza3Bhc3MtcHJvZ3Jlc3MKK1N1YmplY3Q6IFtQQVRDSCAwOS81 M10gb3BlbnNzaC01LjFwMS1hc2twYXNzLXByb2dyZXNzCiAKIC0tLQogIGNvbnRyaWIvZ25vbWUt c3NoLWFza3Bhc3MyLmMgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0K QEAgLTkyLDUgKzkyLDUgQEAgaW5kZXggYTYyZjk4MTUyLi5jYjcxNTJkYzggMTAwNjQ0CiAgCiAg CS8qIEdyYWIgZm9jdXMgKi8KIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAw MTAtb3BlbnNzaC00LjNwMi1hc2twYXNzLWdyYWItaW5mby5wYXRjaCBiLzAwMTAtb3BlbnNzaC00 LjNwMi1hc2twYXNzLWdyYWItaW5mby5wYXRjaAppbmRleCA2MTIyM2FlLi5hZjRkMDU3IDEwMDY0 NAotLS0gYS8wMDEwLW9wZW5zc2gtNC4zcDItYXNrcGFzcy1ncmFiLWluZm8ucGF0Y2gKKysrIGIv MDAxMC1vcGVuc3NoLTQuM3AyLWFza3Bhc3MtZ3JhYi1pbmZvLnBhdGNoCkBAIC0xLDcgKzEsNyBA QAotRnJvbSBkYjRjYTMzNmU0YmRkZmM0YzVjZTY1MWZiZGYxZjQwMzQ4ZDkzYjhmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQorRnJvbSA2ODYwOWViODQ1NTE1MzMzZmU4Njc1NmRkMGQwZjFmZTg2 Njk0M2VmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkg PGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIw MAotU3ViamVjdDogW1BBVENIIDEwLzU0XSBvcGVuc3NoLTQuM3AyLWFza3Bhc3MtZ3JhYi1pbmZv CitTdWJqZWN0OiBbUEFUQ0ggMTAvNTNdIG9wZW5zc2gtNC4zcDItYXNrcGFzcy1ncmFiLWluZm8K IAogI2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTk4MzMyCiAt LS0KQEAgLTI4LDUgKzI4LDUgQEAgaW5kZXggY2I3MTUyZGM4Li5iYmU5M2Q4MzggMTAwNjQ0CiAg CiAgCWd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZXJyKSk7CiAtLSAKLTIuNTMuMAorMi41NS4w CiAKCmRpZmYgLS1naXQgYS8wMDExLW9wZW5zc2gtOC43cDEtcmVkaGF0LnBhdGNoIGIvMDAxMS1v cGVuc3NoLTguN3AxLXJlZGhhdC5wYXRjaAppbmRleCA1YWIyNDg1Li4yM2MwNzFkIDEwMDY0NAot LS0gYS8wMDExLW9wZW5zc2gtOC43cDEtcmVkaGF0LnBhdGNoCisrKyBiLzAwMTEtb3BlbnNzaC04 LjdwMS1yZWRoYXQucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGVjNjM4NTZmMmM0Mjc2ZGEz YWEyMmM3OGZlYWNmZWJmYmZiNTk0ZGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDMx MzMzM2Y0MjlhZWRkNWYyNTU2NDM0MDA2NjkyMDRhMzJlNjEwMjMgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRl OiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMTEvNTRd IG9wZW5zc2gtOC43cDEtcmVkaGF0CitTdWJqZWN0OiBbUEFUQ0ggMTEvNTNdIG9wZW5zc2gtOC43 cDEtcmVkaGF0CiAKICNodHRwczovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9p ZD0xNjM1IChXT05URklYKQogLS0tCkBAIC01Nyw3ICs1Nyw3IEBAIGluZGV4IDAwMDAwMDAwMC4u OGIxYjU5MDIxCiArIyBVbmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgLmxvY2FsIGRv bWFpbgogKyMgSG9zdCAqLmxvY2FsCiBkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcgYi9zc2hkX2Nv bmZpZwotaW5kZXggMGY0YTNhNzI0Li42MDgyMDNlNGIgMTAwNjQ0CitpbmRleCA1N2VjYWJiODYu LmY0M2FhODA5MyAxMDA2NDQKIC0tLSBhL3NzaGRfY29uZmlnCiArKysgYi9zc2hkX2NvbmZpZwog QEAgLTEwLDYgKzEwLDE0IEBACkBAIC03NiwxMCArNzYsMTAgQEAgaW5kZXggMGY0YTNhNzI0Li42 MDgyMDNlNGIgMTAwNjQ0CiAgI0FkZHJlc3NGYW1pbHkgYW55CiAgI0xpc3RlbkFkZHJlc3MgMC4w LjAuMAogZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnLjAgYi9zc2hkX2NvbmZpZy4wCi1pbmRleCA3 NzBlYzc0MmUuLjFmNzFjMzdjMyAxMDA2NDQKK2luZGV4IDIyNDgwMDZlYS4uOTFlZGE3N2Y0IDEw MDY0NAogLS0tIGEvc3NoZF9jb25maWcuMAogKysrIGIvc3NoZF9jb25maWcuMAotQEAgLTEyNDcs OSArMTI0Nyw5IEBAIERFU0NSSVBUSU9OCitAQCAtMTI2NSw5ICsxMjY1LDkgQEAgREVTQ1JJUFRJ T04KICAKICAgICAgIFN5c2xvZ0ZhY2lsaXR5CiAgICAgICAgICAgICAgIEdpdmVzIHRoZSBmYWNp bGl0eSBjb2RlIHRoYXQgaXMgdXNlZCB3aGVuIGxvZ2dpbmcgbWVzc2FnZXMgZnJvbQpAQCAtOTMs MTAgKzkzLDEwIEBAIGluZGV4IDc3MGVjNzQyZS4uMWY3MWMzN2MzIDEwMDY0NAogICAgICAgVENQ S2VlcEFsaXZlCiAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBzeXN0ZW0gc2hv dWxkIHNlbmQgVENQIGtlZXBhbGl2ZSBtZXNzYWdlcwogZGlmZiAtLWdpdCBhL3NzaGRfY29uZmln LjUgYi9zc2hkX2NvbmZpZy41Ci1pbmRleCAzZjVlMjk4MTIuLmNhNDI1YThkYSAxMDA2NDQKK2lu ZGV4IGE3ZDMwMDEzOS4uZTg1Y2NhNmViIDEwMDY0NAogLS0tIGEvc3NoZF9jb25maWcuNQogKysr IGIvc3NoZF9jb25maWcuNQotQEAgLTE5NzEsNyArMTk3MSw3IEBAIEJ5IGRlZmF1bHQgbm8gc3Vi c3lzdGVtcyBhcmUgZGVmaW5lZC4KK0BAIC0xOTg5LDcgKzE5ODksNyBAQCBCeSBkZWZhdWx0IG5v IHN1YnN5c3RlbXMgYXJlIGRlZmluZWQuCiAgLkl0IENtIFN5c2xvZ0ZhY2lsaXR5CiAgR2l2ZXMg dGhlIGZhY2lsaXR5IGNvZGUgdGhhdCBpcyB1c2VkIHdoZW4gbG9nZ2luZyBtZXNzYWdlcyBmcm9t CiAgLlhyIHNzaGQgOCAuCkBAIC0xNDMsNSArMTQzLDUgQEAgaW5kZXggMDAwMDAwMDAwLi4xZDU5 MmQxM2YKICtJbmNsdWRlIC9ldGMvY3J5cHRvLXBvbGljaWVzL2JhY2stZW5kcy9vcGVuc3Noc2Vy dmVyLmNvbmZpZwogKwogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAxMi1v cGVuc3NoLTcuOHAxLVVzZVBBTS13YXJuaW5nLnBhdGNoIGIvMDAxMi1vcGVuc3NoLTcuOHAxLVVz ZVBBTS13YXJuaW5nLnBhdGNoCmluZGV4IDgzMTUzNWEuLjBkMDAxYmQgMTAwNjQ0Ci0tLSBhLzAw MTItb3BlbnNzaC03LjhwMS1Vc2VQQU0td2FybmluZy5wYXRjaAorKysgYi8wMDEyLW9wZW5zc2gt Ny44cDEtVXNlUEFNLXdhcm5pbmcucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDk4MDkyYzFm YTVjNTRiMzJlZGNiN2NlZjE4YTRmYWI2MDc4ZWZiYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CitGcm9tIDEwZmVlZTQzNTQwY2JlYmFkNzBmOTkwM2E2Y2JkNTk0MDlmOWYwYzQgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5j b20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFU Q0ggMTIvNTRdIG9wZW5zc2gtNy44cDEtVXNlUEFNLXdhcm5pbmcKK1N1YmplY3Q6IFtQQVRDSCAx Mi81M10gb3BlbnNzaC03LjhwMS1Vc2VQQU0td2FybmluZwogCiAjIHdhcm4gdXNlcnMgZm9yIHVu c3VwcG9ydGVkIFVzZVBBTT1ubyAoIzc1NzU0NSkKIC0tLQpAQCAtMTAsMTAgKzEwLDEwIEBAIFN1 YmplY3Q6IFtQQVRDSCAxMi81NF0gb3BlbnNzaC03LjhwMS1Vc2VQQU0td2FybmluZwogIDIgZmls ZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCiAKIGRpZmYgLS1naXQgYS9zc2hkLXNlc3Npb24u YyBiL3NzaGQtc2Vzc2lvbi5jCi1pbmRleCAwMGQwMGUyOTMuLjY5NzZkNjg3MiAxMDA2NDQKK2lu ZGV4IDBmNDE3NTZmZi4uNmU5YjI4ZGVjIDEwMDY0NAogLS0tIGEvc3NoZC1zZXNzaW9uLmMKICsr KyBiL3NzaGQtc2Vzc2lvbi5jCi1AQCAtMTA3NSw2ICsxMDc1LDEwIEBAIG1haW4oaW50IGFjLCBj aGFyICoqYXYpCitAQCAtMTA3Niw2ICsxMDc2LDEwIEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYp CiAgCQkJICAgICJlbmFibGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMiKTsKICAJfQogIApAQCAt MjUsMTAgKzI1LDEwIEBAIGluZGV4IDAwZDAwZTI5My4uNjk3NmQ2ODcyIDEwMDY0NAogIAlpZiAo b3B0aW9ucy5tb2R1bGlfZmlsZSAhPSBOVUxMKQogIAkJZGhfc2V0X21vZHVsaV9maWxlKG9wdGlv bnMubW9kdWxpX2ZpbGUpOwogZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnIGIvc3NoZF9jb25maWcK LWluZGV4IDYwODIwM2U0Yi4uNDhhZjYzMjFiIDEwMDY0NAoraW5kZXggZjQzYWE4MDkzLi5mNjI2 ZDU4MDEgMTAwNjQ0CiAtLS0gYS9zc2hkX2NvbmZpZwogKysrIGIvc3NoZF9jb25maWcKLUBAIC04 OSw2ICs4OSw4IEBAIEF1dGhvcml6ZWRLZXlzRmlsZQkuc3NoL2F1dGhvcml6ZWRfa2V5cworQEAg LTkwLDYgKzkwLDggQEAgQXV0aG9yaXplZEtleXNGaWxlCS5zc2gvYXV0aG9yaXplZF9rZXlzCiAg IyBJZiB5b3UganVzdCB3YW50IHRoZSBQQU0gYWNjb3VudCBhbmQgc2Vzc2lvbiBjaGVja3MgdG8g cnVuIHdpdGhvdXQKICAjIFBBTSBhdXRoZW50aWNhdGlvbiwgdGhlbiBlbmFibGUgdGhpcyBidXQg c2V0IFBhc3N3b3JkQXV0aGVudGljYXRpb24KICAjIGFuZCBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRp Y2F0aW9uIHRvICdubycuCkBAIC0zOCw1ICszOCw1IEBAIGluZGV4IDYwODIwM2U0Yi4uNDhhZjYz MjFiIDEwMDY0NAogIAogICNBbGxvd0FnZW50Rm9yd2FyZGluZyB5ZXMKIC0tIAotMi41My4wCisy LjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMTMtb3BlbnNzaC05LjZwMS1nc3NhcGkta2V5ZXgucGF0 Y2ggYi8wMDEzLW9wZW5zc2gtOS42cDEtZ3NzYXBpLWtleWV4LnBhdGNoCmluZGV4IGYyMTA2YTQu LmRlMmNhYmYgMTAwNjQ0Ci0tLSBhLzAwMTMtb3BlbnNzaC05LjZwMS1nc3NhcGkta2V5ZXgucGF0 Y2gKKysrIGIvMDAxMy1vcGVuc3NoLTkuNnAxLWdzc2FwaS1rZXlleC5wYXRjaApAQCAtMSw5ICsx LDEwIEBACi1Gcm9tIDIwODA4MGVjMmNlZGRiOWU0YzkxN2Q0ZTU3YjliYzQ0NTJkYjMwNDkgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDk4OGI1NDNlNWE5MjEwOWYwOGE2ZWYyMTNjODM0 ZWI4MjkyNDE3OGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2 c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4 ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMTMvNTRdIG9wZW5zc2gtOS42cDEtZ3NzYXBpLWtleWV4 CitTdWJqZWN0OiBbUEFUQ0ggMTMvNTNdIG9wZW5zc2gtOS42cDEtZ3NzYXBpLWtleWV4CiAKIC0t LQorIC5kZXBlbmQgICAgICAgICB8ICAgMiArCiAgTWFrZWZpbGUuaW4gICAgIHwgICA3ICstCiAg YXV0aC5jICAgICAgICAgIHwgICAzICstCiAgYXV0aDItZ3NzLmMgICAgIHwgIDUyICsrKy0KQEAg LTEzLDU1ICsxNCw2OCBAQCBTdWJqZWN0OiBbUEFUQ0ggMTMvNTRdIG9wZW5zc2gtOS42cDEtZ3Nz YXBpLWtleWV4CiAgY2Fub2hvc3QuaCAgICAgIHwgICAzICsKICBjbGllbnRsb29wLmMgICAgfCAg MTIgKwogIGNvbmZpZ3VyZS5hYyAgICB8ICAyNCArKwotIGdzcy1nZW5yLmMgICAgICB8IDMxMiAr KysrKysrKysrKysrKysrKysrKy0KKyBnc3MtZ2Vuci5jICAgICAgfCAzMTMgKysrKysrKysrKysr KysrKysrKystCiAgZ3NzLXNlcnYta3JiNS5jIHwgIDk3ICsrKysrKy0KICBnc3Mtc2Vydi5jICAg ICAgfCAyMDAgKysrKysrKysrKysrLS0KLSBrZXgtbmFtZXMuYyAgICAgfCAgNjEgKysrKy0KKyBr ZXgtbmFtZXMuYyAgICAgfCAgNjcgKysrKy0KICBrZXguYyAgICAgICAgICAgfCAgMzUgKystCiAg a2V4LmggICAgICAgICAgIHwgIDM0ICsrKwogIGtleGRoLmMgICAgICAgICB8ICAxMCArCiAga2V4 Z2VuLmMgICAgICAgIHwgICAyICstCiAga2V4Z3NzYy5jICAgICAgIHwgNzA2ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogIGtleGdzc3MuYyAgICAgICB8 IDYwMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIG1vbml0b3Iu YyAgICAgICB8IDE0NyArKysrKysrKystCisgbW9uaXRvci5jICAgICAgIHwgMTUwICsrKysrKysr Ky0KICBtb25pdG9yLmggICAgICAgfCAgIDIgKwogIG1vbml0b3Jfd3JhcC5jICB8ICA1NyArKyst CiAgbW9uaXRvcl93cmFwLmggIHwgICA0ICstCiAgcmVhZGNvbmYuYyAgICAgIHwgIDcwICsrKysr CiAgcmVhZGNvbmYuaCAgICAgIHwgICA2ICsKLSBzZXJ2Y29uZi5jICAgICAgfCAgNDYgKysrKwot IHNlcnZjb25mLmggICAgICB8ICAgMyArCisgc2VydmNvbmYuYyAgICAgIHwgIDI4ICsrCisgc2Vy dmNvbmYuaCAgICAgIHwgIDExICstCiAgc2Vzc2lvbi5jICAgICAgIHwgIDEwICstCiAgc3NoLWdz cy5oICAgICAgIHwgIDY0ICsrKystCi0gc3NoLjEgICAgICAgICAgIHwgICA4ICsKLSBzc2guYyAg ICAgICAgICAgfCAgIDYgKy0KKyBzc2guMSAgICAgICAgICAgfCAgIDIgKworIHNzaC5jICAgICAg ICAgICB8ICAgNyArLQogIHNzaF9jb25maWcgICAgICB8ICAgMiArCi0gc3NoX2NvbmZpZy41ICAg IHwgIDU4ICsrKysKKyBzc2hfY29uZmlnLjUgICAgfCAgNjEgKysrKysKICBzc2hjb25uZWN0Mi5j ICAgfCAxNTQgKysrKysrKysrKy0KLSBzc2hkLWF1dGguYyAgICAgfCAgNTUgKysrLQorIHNzaGQt YXV0aC5jICAgICB8ICA1OCArKystCiAgc3NoZC1zZXNzaW9uLmMgIHwgICA5ICstCiAgc3NoZC5j ICAgICAgICAgIHwgICAzICstCiAgc3NoZF9jb25maWcgICAgIHwgICAyICsKLSBzc2hkX2NvbmZp Zy41ICAgfCAgNDAgKystCisgc3NoZF9jb25maWcuNSAgIHwgIDQzICsrLQogIHNzaGtleS5jICAg ICAgICB8ICA3MiArKysrLQogIHNzaGtleS5oICAgICAgICB8ICAgMSArCi0gNDEgZmlsZXMgY2hh bmdlZCwgMzAwNCBpbnNlcnRpb25zKCspLCA3OCBkZWxldGlvbnMoLSkKKyA0MiBmaWxlcyBjaGFu Z2VkLCAzMDA0IGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQogIGNyZWF0ZSBtb2RlIDEw MDY0NCBrZXhnc3NjLmMKICBjcmVhdGUgbW9kZSAxMDA2NDQga2V4Z3Nzcy5jCiAKK2RpZmYgLS1n aXQgYS8uZGVwZW5kIGIvLmRlcGVuZAoraW5kZXggN2QyZDAwYmJmLi40NWFkMmJmNGUgMTAwNjQ0 CistLS0gYS8uZGVwZW5kCisrKysgYi8uZGVwZW5kCitAQCAtNjcsNiArNjcsOCBAQCBrZXhjMjU1 MTkubzogaW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNv bXBhdC9vcGVuYnNkLWNvbQorIGtleGRoLm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5o IHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBh dC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFkcGFz c3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0Ynlu YW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEyLmggb3Bl bmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21wYXQvZm5t YXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaWduYWwu aCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNfaWQu aCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlk Lmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMu aCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFp eC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXgu aCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5ldC5o IG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuaCBl bnRyb3B5LmgKKyBrZXhlY2RoLm86IGluY2x1ZGVzLmggY29uZmlnLmggZGVmaW5lcy5oIHBsYXRm b3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9iYXNl NjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFz ZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmgg b3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaGEyLmggb3BlbmJzZC1j b21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJzZC1jb21wYXQvZm5tYXRjaC5o IG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zaWduYWwuaCBvcGVu YnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2JzZC1zZXRyZXNfaWQuaCBvcGVu YnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlkLmggb3Bl bmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaCBvcGVu YnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oIG9w ZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBvcGVu YnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LW5ldC5oIG9wZW5i c2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuaCBlbnRyb3B5 LmgKKyBrZXhnZW4ubzogaW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmggcGxhdGZvcm0uaCBv cGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5oIG9w ZW5ic2QtY29tcGF0L3NpZ2FjdC5oIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmggb3Bl bmJzZC1jb21wYXQvdmlzLmggb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaCBvcGVuYnNk LWNvbXBhdC9zaGExLmggb3BlbmJzZC1jb21wYXQvYnNkLXNoYTIuaCBvcGVuYnNkLWNvbXBhdC9t ZDUuaCBvcGVuYnNkLWNvbXBhdC9ibGYuaCBvcGVuYnNkLWNvbXBhdC9mbm1hdGNoLmggb3BlbmJz ZC1jb21wYXQvZ2V0b3B0Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNpZ25hbC5oIG9wZW5ic2QtY29t cGF0L2JzZC1taXNjLmggb3BlbmJzZC1jb21wYXQvYnNkLXNldHJlc19pZC5oIG9wZW5ic2QtY29t cGF0L2JzZC1zdGF0dmZzLmggb3BlbmJzZC1jb21wYXQvYnNkLXdhaXRwaWQuaCBvcGVuYnNkLWNv bXBhdC9ic2QtcG9sbC5oIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oIG9wZW5ic2QtY29t cGF0L2JzZC1jeWd3aW5fdXRpbC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4Lmggb3BlbmJzZC1j b21wYXQvcG9ydC1pcml4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oIG9wZW5ic2QtY29t cGF0L3BvcnQtc29sYXJpcy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbmV0Lmggb3BlbmJzZC1jb21w YXQvcG9ydC11dy5oIG9wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5oIGVudHJvcHkuaCBzc2hr ZXkuaCBrZXguaCBtYWMuaCBjcnlwdG9fYXBpLmggbG9nLmggc3NoZXJyLmggcGFja2V0LmggZGlz cGF0Y2guaCBzc2gyLmggc3NoYnVmLmggZGlnZXN0LmgKKytrZXhnc3NjLm86IGluY2x1ZGVzLmgg Y29uZmlnLmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21w YXQuaCBvcGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVu YnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2Qt Y29tcGF0L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29t cGF0L2JzZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmgg b3BlbmJzZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2Qt Y29tcGF0L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29t cGF0L2JzZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2Qt Y29tcGF0L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNv bXBhdC9mYWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVu YnNkLWNvbXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2Qt Y29tcGF0L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNk LWNvbXBhdC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBh dC9ic2QtbmV4dHN0ZXAuaCBlbnRyb3B5LmgKKytrZXhnc3NzLm86IGluY2x1ZGVzLmggY29uZmln LmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBv cGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNv bXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0 L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJz ZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0 L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0 L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9m YWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNv bXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0 L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBh dC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt bmV4dHN0ZXAuaCBlbnRyb3B5LmgKKyBrZXhnZXgubzogaW5jbHVkZXMuaCBjb25maWcuaCBkZWZp bmVzLmggcGxhdGZvcm0uaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2Qt Y29tcGF0L2Jhc2U2NC5oIG9wZW5ic2QtY29tcGF0L3NpZ2FjdC5oIG9wZW5ic2QtY29tcGF0L3Jl YWRwYXNzcGhyYXNlLmggb3BlbmJzZC1jb21wYXQvdmlzLmggb3BlbmJzZC1jb21wYXQvZ2V0cnJz ZXRieW5hbWUuaCBvcGVuYnNkLWNvbXBhdC9zaGExLmggb3BlbmJzZC1jb21wYXQvYnNkLXNoYTIu aCBvcGVuYnNkLWNvbXBhdC9tZDUuaCBvcGVuYnNkLWNvbXBhdC9ibGYuaCBvcGVuYnNkLWNvbXBh dC9mbm1hdGNoLmggb3BlbmJzZC1jb21wYXQvZ2V0b3B0Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNp Z25hbC5oIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmggb3BlbmJzZC1jb21wYXQvYnNkLXNldHJl c19pZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1zdGF0dmZzLmggb3BlbmJzZC1jb21wYXQvYnNkLXdh aXRwaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2QtcG9sbC5oIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZj MjU1My5oIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5oIG9wZW5ic2QtY29tcGF0L3Bv cnQtYWl4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1pcml4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1s aW51eC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtc29sYXJpcy5oIG9wZW5ic2QtY29tcGF0L3BvcnQt bmV0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC11dy5oIG9wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3Rl cC5oIGVudHJvcHkuaAorIGtleGdleGMubzogaW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmgg cGxhdGZvcm0uaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0 L2Jhc2U2NC5oIG9wZW5ic2QtY29tcGF0L3NpZ2FjdC5oIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNz cGhyYXNlLmggb3BlbmJzZC1jb21wYXQvdmlzLmggb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5h bWUuaCBvcGVuYnNkLWNvbXBhdC9zaGExLmggb3BlbmJzZC1jb21wYXQvYnNkLXNoYTIuaCBvcGVu YnNkLWNvbXBhdC9tZDUuaCBvcGVuYnNkLWNvbXBhdC9ibGYuaCBvcGVuYnNkLWNvbXBhdC9mbm1h dGNoLmggb3BlbmJzZC1jb21wYXQvZ2V0b3B0Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNpZ25hbC5o IG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmggb3BlbmJzZC1jb21wYXQvYnNkLXNldHJlc19pZC5o IG9wZW5ic2QtY29tcGF0L2JzZC1zdGF0dmZzLmggb3BlbmJzZC1jb21wYXQvYnNkLXdhaXRwaWQu aCBvcGVuYnNkLWNvbXBhdC9ic2QtcG9sbC5oIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5o IG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4 Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1pcml4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5o IG9wZW5ic2QtY29tcGF0L3BvcnQtc29sYXJpcy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbmV0Lmgg b3BlbmJzZC1jb21wYXQvcG9ydC11dy5oIG9wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5oIGVu dHJvcHkuaAorIGtleGdleHMubzogaW5jbHVkZXMuaCBjb25maWcuaCBkZWZpbmVzLmggcGxhdGZv cm0uaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L2Jhc2U2 NC5oIG9wZW5ic2QtY29tcGF0L3NpZ2FjdC5oIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNl Lmggb3BlbmJzZC1jb21wYXQvdmlzLmggb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaCBv cGVuYnNkLWNvbXBhdC9zaGExLmggb3BlbmJzZC1jb21wYXQvYnNkLXNoYTIuaCBvcGVuYnNkLWNv bXBhdC9tZDUuaCBvcGVuYnNkLWNvbXBhdC9ibGYuaCBvcGVuYnNkLWNvbXBhdC9mbm1hdGNoLmgg b3BlbmJzZC1jb21wYXQvZ2V0b3B0Lmggb3BlbmJzZC1jb21wYXQvYnNkLXNpZ25hbC5oIG9wZW5i c2QtY29tcGF0L2JzZC1taXNjLmggb3BlbmJzZC1jb21wYXQvYnNkLXNldHJlc19pZC5oIG9wZW5i c2QtY29tcGF0L2JzZC1zdGF0dmZzLmggb3BlbmJzZC1jb21wYXQvYnNkLXdhaXRwaWQuaCBvcGVu YnNkLWNvbXBhdC9ic2QtcG9sbC5oIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oIG9wZW5i c2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4Lmggb3Bl bmJzZC1jb21wYXQvcG9ydC1pcml4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oIG9wZW5i c2QtY29tcGF0L3BvcnQtc29sYXJpcy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbmV0Lmggb3BlbmJz ZC1jb21wYXQvcG9ydC11dy5oIG9wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5oIGVudHJvcHku aAogZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IDQyYjQ1ZDMz ZC4uYTEyZjZhZDFkIDEwMDY0NAoraW5kZXggMmE0NDk2ODBhLi4xZWViMzRjYWQgMTAwNjQ0CiAt LS0gYS9NYWtlZmlsZS5pbgogKysrIGIvTWFrZWZpbGUuaW4KLUBAIC0xMDgsNiArMTA4LDcgQEAg TElCU1NIX09CSlM9JHtMSUJPUEVOU1NIX09CSlN9IFwKK0BAIC0xMDksNiArMTA5LDcgQEAgTElC U1NIX09CSlM9JHtMSUJPUEVOU1NIX09CSlN9IFwKICAJa2V4Lm8ga2V4LW5hbWVzLm8ga2V4ZGgu byBrZXhnZXgubyBrZXhlY2RoLm8ga2V4YzI1NTE5Lm8gXAotIAlrZXhnZXhjLm8ga2V4Z2V4cy5v IFwKKyAJa2V4Z2V4Yy5vIGtleGdleHMubyBrZXhtbGtlbTc2OGVjZGgubyBcCiAgCWtleHNudHJ1 cDc2MXgyNTUxOS5vIGtleG1sa2VtNzY4eDI1NTE5Lm8gc250cnVwNzYxLm8ga2V4Z2VuLm8gXAog KwlrZXhnc3NjLm8gXAogIAlzZnRwLXJlYWxwYXRoLm8gcGxhdGZvcm0tcGxlZGdlLm8gcGxhdGZv cm0tdHJhY2luZy5vIHBsYXRmb3JtLW1pc2MubyBcCiAgCXNzaGJ1Zi1pby5vIG1pc2MtYWdlbnQu byBzc2hlcnItbGliY3J5cHRvLm8KICAKLUBAIC0xMzEsNyArMTMyLDcgQEAgU1NIRF9TRVNTSU9O X09CSlM9c3NoZC1zZXNzaW9uLm8gYXV0aC1yaG9zdHMubyBhdXRoLXBhc3N3ZC5vIFwKK0BAIC0x MzIsNyArMTMzLDcgQEAgU1NIRF9TRVNTSU9OX09CSlM9c3NoZC1zZXNzaW9uLm8gYXV0aC1yaG9z dHMubyBhdXRoLXBhc3N3ZC5vIFwKICAJYXV0aDItY2hhbGwubyBncm91cGFjY2Vzcy5vIFwKICAJ YXV0aC1ic2RhdXRoLm8gYXV0aDItaG9zdGJhc2VkLm8gYXV0aDIta2JkaW50Lm8gXAogIAlhdXRo Mi1ub25lLm8gYXV0aDItcGFzc3dkLm8gYXV0aDItcHVia2V5Lm8gYXV0aDItcHVia2V5ZmlsZS5v IFwKQEAgLTcwLDcgKzg0LDcgQEAgaW5kZXggNDJiNDVkMzNkLi5hMTJmNmFkMWQgMTAwNjQ0CiAg CWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIFwKICAJbG9naW5yZWMubyBh dXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0aC1zaWEubyBcCiAgCXNmdHAtc2VydmVyLm8gc2Z0 cC1jb21tb24ubyBcCi1AQCAtMTQzLDcgKzE0NCw3IEBAIFNTSERfQVVUSF9PQkpTPXNzaGQtYXV0 aC5vIFwKK0BAIC0xNDQsNyArMTQ1LDcgQEAgU1NIRF9BVVRIX09CSlM9c3NoZC1hdXRoLm8gXAog IAlzZXJ2ZXJsb29wLm8gYXV0aC5vIGF1dGgyLm8gYXV0aC1vcHRpb25zLm8gc2Vzc2lvbi5vIGF1 dGgyLWNoYWxsLm8gXAogIAlncm91cGFjY2Vzcy5vIGF1dGgtYnNkYXV0aC5vIGF1dGgyLWhvc3Ri YXNlZC5vIGF1dGgyLWtiZGludC5vIFwKICAJYXV0aDItbm9uZS5vIGF1dGgyLXBhc3N3ZC5vIGF1 dGgyLXB1YmtleS5vIGF1dGgyLXB1YmtleWZpbGUubyBcCkBAIC03OSw3ICs5Myw3IEBAIGluZGV4 IDQyYjQ1ZDMzZC4uYTEyZjZhZDFkIDEwMDY0NAogIAltb25pdG9yX3dyYXAubyBhdXRoLWtyYjUu byBcCiAgCWF1ZGl0Lm8gYXVkaXQtYnNtLm8gYXVkaXQtbGludXgubyBwbGF0Zm9ybS5vIFwKICAJ bG9naW5yZWMubyBhdXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0aC1zaWEubyBcCi1AQCAtNTU1 LDcgKzU1Niw3IEBAIHJlZ3Jlc3MtcHJlcDoKK0BAIC01NjYsNyArNTY3LDcgQEAgcmVncmVzcy1w cmVwOgogIAkgICAgbG4gLXMgYGNkICQoc3JjZGlyKSAmJiBwd2RgL3JlZ3Jlc3MvTWFrZWZpbGUg YHB3ZGAvcmVncmVzcy9NYWtlZmlsZQogIAogIFJFR1JFU1NMSUJTPWxpYnNzaC5hICQoTElCQ09N UEFUKQpAQCAtODksNyArMTAzLDcgQEAgaW5kZXggNDJiNDVkMzNkLi5hMTJmNmFkMWQgMTAwNjQ0 CiAgcmVncmVzcy9tb2RwaXBlJChFWEVFWFQpOiAkKHNyY2RpcikvcmVncmVzcy9tb2RwaXBlLmMg JChSRUdSRVNTTElCUykKICAJJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1MpIC1vICRAICQoc3Jj ZGlyKS9yZWdyZXNzL21vZHBpcGUuYyBcCiBkaWZmIC0tZ2l0IGEvYXV0aC5jIGIvYXV0aC5jCi1p bmRleCBhMDIxN2E4MTEuLjE0MmFjNWFmZCAxMDA2NDQKK2luZGV4IGE0YTM3YzExYS4uOWQxMzA3 Yjc2IDEwMDY0NAogLS0tIGEvYXV0aC5jCiArKysgYi9hdXRoLmMKIEBAIC0zNTQsNyArMzU0LDgg QEAgYXV0aF9yb290X2FsbG93ZWQoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICptZXRob2Qp CkBAIC0xMDMsNyArMTE3LDcgQEAgaW5kZXggYTAyMTdhODExLi4xNDJhYzVhZmQgMTAwNjQ0CiAg CQlicmVhazsKICAJY2FzZSBQRVJNSVRfRk9SQ0VEX09OTFk6CiBkaWZmIC0tZ2l0IGEvYXV0aDIt Z3NzLmMgYi9hdXRoMi1nc3MuYwotaW5kZXggYjM4MGRjMTE3Li45MGYwOTllODUgMTAwNjQ0Citp bmRleCA1NTNmYmEzMjguLmQxMTBhNGVhYyAxMDA2NDQKIC0tLSBhL2F1dGgyLWdzcy5jCiArKysg Yi9hdXRoMi1nc3MuYwogQEAgLTUxLDYgKzUxLDcgQEAKQEAgLTE2MywxNiArMTc3LDE2IEBAIGlu ZGV4IGIzODBkYzExNy4uOTBmMDk5ZTg1IDEwMDY0NAogIC8qCiAgICogV2Ugb25seSBzdXBwb3J0 IHRob3NlIG1lY2hhbmlzbXMgdGhhdCB3ZSBrbm93IGFib3V0IChpZSBvbmVzIHRoYXQgd2Uga25v dwogICAqIGhvdyB0byBjaGVjayBsb2NhbCB1c2VyIGt1c2Vyb2sgYW5kIHRoZSBsaWtlKQotQEAg LTI2Nyw3ICszMTAsNyBAQCBpbnB1dF9nc3NhcGlfZXhjaGFuZ2VfY29tcGxldGUoaW50IHR5cGUs IHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKK0BAIC0yNjEsNyArMzA0LDcgQEAgaW5w dXRfZ3NzYXBpX2V4Y2hhbmdlX2NvbXBsZXRlKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1 Y3Qgc3NoICpzc2gpCiAgCWlmICgociA9IHNzaHBrdF9nZXRfZW5kKHNzaCkpICE9IDApCiAgCQlm YXRhbF9mcihyLCAicGFyc2UgcGFja2V0Iik7CiAgCiAtCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hf Z3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlcik7CiArIAlhdXRoZW50aWNhdGVkID0gbW1fc3No X2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5wdywgMSk7CisgCWlmICgh YXV0aGVudGljYXRlZCkKKyAJCWF1dGhfZmFpbHVyZV9kZWxheShhdXRoY3R4dCwgdHN0YXJ0KTsK ICAKLSAJYXV0aGN0eHQtPnBvc3Rwb25lZCA9IDA7Ci0gCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBT U0gyX01TR19VU0VSQVVUSF9HU1NBUElfVE9LRU4sIE5VTEwpOwotQEAgLTMxNSw3ICszNTgsNyBA QCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpz c2gpCitAQCAtMzEyLDcgKzM1NSw3IEBAIGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQz Ml90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKICAJZ3NzYnVmLmxlbmd0aCA9IHNzaGJ1Zl9sZW4o Yik7CiAgCiAgCWlmICghR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzY3R4dCwg Jmdzc2J1ZiwgJm1pYykpKQpAQCAtMjE4LDcgKzIzMiw3IEBAIGluZGV4IDk5NjM3YTg5Yi4uYTA1 OTA4Y2YzIDEwMDY0NAogICNlbmRpZgogIAkmbWV0aG9kY2ZnX3Bhc3N3ZCwKIGRpZmYgLS1naXQg YS9hdXRoMi5jIGIvYXV0aDIuYwotaW5kZXggYmZkNDI1ZWFiLi4zYzNiZGI3NzYgMTAwNjQ0Citp bmRleCA0OTdmYThlZDIuLmYwZjM5NzA3ZiAxMDA2NDQKIC0tLSBhL2F1dGgyLmMKICsrKyBiL2F1 dGgyLmMKIEBAIC03MSw2ICs3MSw3IEBAIGV4dGVybiBBdXRobWV0aG9kIG1ldGhvZF9wYXNzd2Q7 CkBAIC0zNTcsNyArMzcxLDcgQEAgaW5kZXggMjZkNjI4NTVhLi4wY2FkYzlmMTggMTAwNjQ0CiAg aW50CQkgZ2V0X3BlZXJfcG9ydChpbnQpOwogIGNoYXIJCSpnZXRfbG9jYWxfaXBhZGRyKGludCk7 CiBkaWZmIC0tZ2l0IGEvY2xpZW50bG9vcC5jIGIvY2xpZW50bG9vcC5jCi1pbmRleCA2YTBlN2I2 YjguLmFiNWM0ZDRhZCAxMDA2NDQKK2luZGV4IDQ5OTUwY2VjYy4uZjA3NmQxZDU2IDEwMDY0NAog LS0tIGEvY2xpZW50bG9vcC5jCiArKysgYi9jbGllbnRsb29wLmMKIEBAIC0xMDEsNiArMTAxLDEw IEBACkBAIC0zNzEsNyArMzg1LDcgQEAgaW5kZXggNmEwZTdiNmI4Li5hYjVjNGQ0YWQgMTAwNjQ0 CiAgLyogUGVybWl0dGVkIFJTQSBzaWduYXR1cmUgYWxnb3JpdGhtcyBmb3IgVXBkYXRlSG9zdGtl eXMgcHJvb2ZzICovCiAgI2RlZmluZSBIT1NUS0VZX1BST09GX1JTQV9BTEdTCSJyc2Etc2hhMi01 MTIscnNhLXNoYTItMjU2IgogIAotQEAgLTE2MTEsNiArMTYxNSwxNCBAQCBjbGllbnRfbG9vcChz dHJ1Y3Qgc3NoICpzc2gsIGludCBoYXZlX3B0eSwgaW50IGVzY2FwZV9jaGFyX2FyZywKK0BAIC0x NjE3LDYgKzE2MjEsMTQgQEAgY2xpZW50X2xvb3Aoc3RydWN0IHNzaCAqc3NoLCBpbnQgaGF2ZV9w dHksIGludCBlc2NhcGVfY2hhcl9hcmcsCiAgCQkvKiBEbyBjaGFubmVsIG9wZXJhdGlvbnMuICov CiAgCQljaGFubmVsX2FmdGVyX3BvbGwoc3NoLCBwZmQsIG5wZmRfYWN0aXZlKTsKICAKQEAgLTM4 Nyw3ICs0MDEsNyBAQCBpbmRleCA2YTBlN2I2YjguLmFiNWM0ZDRhZCAxMDA2NDQKICAJCWlmIChj b25uX2luX3JlYWR5KQogIAkJCWNsaWVudF9wcm9jZXNzX25ldF9pbnB1dChzc2gpOwogZGlmZiAt LWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggOGY4Mjc2Yzc4Li43NTU3 NmI0NWQgMTAwNjQ0CitpbmRleCA0YjNjZmYzOGMuLmNiNDY5MDNmNCAxMDA2NDQKIC0tLSBhL2Nv bmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCiBAQCAtODQ0LDYgKzg0NCwzMCBAQCBpbnQg bWFpbih2b2lkKSB7IGlmIChOU1ZlcnNpb25PZlJ1blRpbWVMaWJyYXJ5KCJTeXN0ZW0iKSA+PSAo NjAgPDwgMTYpKQpAQCAtNDIyLDcgKzQzNiw3IEBAIGluZGV4IDhmODI3NmM3OC4uNzU1NzZiNDVk IDEwMDY0NAogIAlBQ19DSEVDS19ERUNMKFtBVV9JUHY0XSwgW10sCiAgCSAgICBBQ19ERUZJTkUo W0FVX0lQdjRdLCBbMF0sIFtTeXN0ZW0gb25seSBzdXBwb3J0cyBJUHY0IGF1ZGl0IHJlY29yZHNd KQogZGlmZiAtLWdpdCBhL2dzcy1nZW5yLmMgYi9nc3MtZ2Vuci5jCi1pbmRleCA3MDg4ZDkzYjQu LmEwN2RiZjUxMiAxMDA2NDQKK2luZGV4IDcwODhkOTNiNC4uZWMyYzljNmRkIDEwMDY0NAogLS0t IGEvZ3NzLWdlbnIuYwogKysrIGIvZ3NzLWdlbnIuYwogQEAgLTQyLDkgKzQyLDMzIEBACkBAIC00 NTksNyArNDczLDcgQEAgaW5kZXggNzA4OGQ5M2I0Li5hMDdkYmY1MTIgMTAwNjQ0CiAgLyogc3No YnVmX2dldCBmb3IgZ3NzX2J1ZmZlcl9kZXNjICovCiAgaW50CiAgc3NoX2dzc2FwaV9nZXRfYnVm ZmVyX2Rlc2Moc3RydWN0IHNzaGJ1ZiAqYiwgZ3NzX2J1ZmZlcl9kZXNjICpnKQotQEAgLTYwLDYg Kzg0LDE2OSBAQCBzc2hfZ3NzYXBpX2dldF9idWZmZXJfZGVzYyhzdHJ1Y3Qgc3NoYnVmICpiLCBn c3NfYnVmZmVyX2Rlc2MgKmcpCitAQCAtNjAsNiArODQsMTcwIEBAIHNzaF9nc3NhcGlfZ2V0X2J1 ZmZlcl9kZXNjKHN0cnVjdCBzc2hidWYgKmIsIGdzc19idWZmZXJfZGVzYyAqZykKICAJcmV0dXJu IDA7CiAgfQogIApAQCAtNTU3LDggKzU3MSw5IEBAIGluZGV4IDcwODhkOTNiNC4uYTA3ZGJmNTEy IDEwMDY0NAogKwkJCWVuY2xlbiA9IF9fYjY0X250b3AoZGlnZXN0LAogKwkJCSAgICBzc2hfZGln ZXN0X2J5dGVzKFNTSF9ESUdFU1RfTUQ1KSwgZW5jb2RlZCwKICsJCQkgICAgc3NoX2RpZ2VzdF9i eXRlcyhTU0hfRElHRVNUX01ENSkgKiAyKTsKLSsKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln bm9yZWQgIi1Xc3RyaW5nb3Atb3ZlcmZsb3ciCiArCQkJY3AgPSBzdHJuY3B5KHMsIGtleCwgc3Ry bGVuKGtleCkpOworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCiArCQkJZm9yICgocCA9IHN0 cnNlcCgmY3AsICIsIikpOyBwICYmICpwICE9ICdcMCc7CiArCQkJCShwID0gc3Ryc2VwKCZjcCwg IiwiKSkpIHsKICsJCQkJaWYgKHNzaGJ1Zl9sZW4oYnVmKSAhPSAwICYmCkBAIC02MjksNyArNjQ0 LDcgQEAgaW5kZXggNzA4OGQ5M2I0Li5hMDdkYmY1MTIgMTAwNjQ0CiAgLyogQ2hlY2sgdGhhdCB0 aGUgT0lEIGluIGEgZGF0YSBzdHJlYW0gbWF0Y2hlcyB0aGF0IGluIHRoZSBjb250ZXh0ICovCiAg aW50CiAgc3NoX2dzc2FwaV9jaGVja19vaWQoR3NzY3R4dCAqY3R4LCB2b2lkICpkYXRhLCBzaXpl X3QgbGVuKQotQEAgLTE2OCw2ICszNTUsNyBAQCBzc2hfZ3NzYXBpX2J1aWxkX2N0eChHc3NjdHh0 ICoqY3R4KQorQEAgLTE2OCw2ICszNTYsNyBAQCBzc2hfZ3NzYXBpX2J1aWxkX2N0eChHc3NjdHh0 ICoqY3R4KQogIAkoKmN0eCktPmNyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKICAJKCpjdHgp LT5jbGllbnQgPSBHU1NfQ19OT19OQU1FOwogIAkoKmN0eCktPmNsaWVudF9jcmVkcyA9IEdTU19D X05PX0NSRURFTlRJQUw7CkBAIC02MzcsNyArNjUyLDcgQEAgaW5kZXggNzA4OGQ5M2I0Li5hMDdk YmY1MTIgMTAwNjQ0CiAgfQogIAogIC8qIERlbGV0ZSBvdXIgY29udGV4dCwgcHJvdmlkaW5nIGl0 IGhhcyBiZWVuIGJ1aWx0IGNvcnJlY3RseSAqLwotQEAgLTE5Myw2ICszODEsMTIgQEAgc3NoX2dz c2FwaV9kZWxldGVfY3R4KEdzc2N0eHQgKipjdHgpCitAQCAtMTkzLDYgKzM4MiwxMiBAQCBzc2hf Z3NzYXBpX2RlbGV0ZV9jdHgoR3NzY3R4dCAqKmN0eCkKICAJCWdzc19yZWxlYXNlX25hbWUoJm1z LCAmKCpjdHgpLT5jbGllbnQpOwogIAlpZiAoKCpjdHgpLT5jbGllbnRfY3JlZHMgIT0gR1NTX0Nf Tk9fQ1JFREVOVElBTCkKICAJCWdzc19yZWxlYXNlX2NyZWQoJm1zLCAmKCpjdHgpLT5jbGllbnRf Y3JlZHMpOwpAQCAtNjUwLDcgKzY2NSw3IEBAIGluZGV4IDcwODhkOTNiNC4uYTA3ZGJmNTEyIDEw MDY0NAogIAogIAlmcmVlKCpjdHgpOwogIAkqY3R4ID0gTlVMTDsKLUBAIC0yMTYsNyArNDEwLDcg QEAgc3NoX2dzc2FwaV9pbml0X2N0eChHc3NjdHh0ICpjdHgsIGludCBkZWxlZ19jcmVkcywgZ3Nz X2J1ZmZlcl9kZXNjICpyZWN2X3RvaywKK0BAIC0yMTYsNyArNDExLDcgQEAgc3NoX2dzc2FwaV9p bml0X2N0eChHc3NjdHh0ICpjdHgsIGludCBkZWxlZ19jcmVkcywgZ3NzX2J1ZmZlcl9kZXNjICpy ZWN2X3RvaywKICAJfQogIAogIAljdHgtPm1ham9yID0gZ3NzX2luaXRfc2VjX2NvbnRleHQoJmN0 eC0+bWlub3IsCkBAIC02NTksNyArNjc0LDcgQEAgaW5kZXggNzA4OGQ5M2I0Li5hMDdkYmY1MTIg MTAwNjQ0CiAgCSAgICBHU1NfQ19NVVRVQUxfRkxBRyB8IEdTU19DX0lOVEVHX0ZMQUcgfCBkZWxl Z19mbGFnLAogIAkgICAgMCwgTlVMTCwgcmVjdl90b2ssIE5VTEwsIHNlbmRfdG9rLCBmbGFncywg TlVMTCk7CiAgCi1AQCAtMjQ1LDkgKzQzOSw0MyBAQCBzc2hfZ3NzYXBpX2ltcG9ydF9uYW1lKEdz c2N0eHQgKmN0eCwgY29uc3QgY2hhciAqaG9zdCkKK0BAIC0yNDUsOSArNDQwLDQzIEBAIHNzaF9n c3NhcGlfaW1wb3J0X25hbWUoR3NzY3R4dCAqY3R4LCBjb25zdCBjaGFyICpob3N0KQogIAlyZXR1 cm4gKGN0eC0+bWFqb3IpOwogIH0KICAKQEAgLTcwMyw3ICs3MTgsNyBAQCBpbmRleCA3MDg4ZDkz YjQuLmEwN2RiZjUxMiAxMDA2NDQKICAJaWYgKChjdHgtPm1ham9yID0gZ3NzX2dldF9taWMoJmN0 eC0+bWlub3IsIGN0eC0+Y29udGV4dCwKICAJICAgIEdTU19DX1FPUF9ERUZBVUxULCBidWZmZXIs IGhhc2gpKSkKICAJCXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKLUBAIC0yNTUsNiArNDgzLDE5IEBA IHNzaF9nc3NhcGlfc2lnbihHc3NjdHh0ICpjdHgsIGdzc19idWZmZXJfdCBidWZmZXIsIGdzc19i dWZmZXJfdCBoYXNoKQorQEAgLTI1NSw2ICs0ODQsMTkgQEAgc3NoX2dzc2FwaV9zaWduKEdzc2N0 eHQgKmN0eCwgZ3NzX2J1ZmZlcl90IGJ1ZmZlciwgZ3NzX2J1ZmZlcl90IGhhc2gpCiAgCXJldHVy biAoY3R4LT5tYWpvcik7CiAgfQogIApAQCAtNzIzLDcgKzczOCw3IEBAIGluZGV4IDcwODhkOTNi NC4uYTA3ZGJmNTEyIDEwMDY0NAogIHZvaWQKICBzc2hfZ3NzYXBpX2J1aWxkbWljKHN0cnVjdCBz c2hidWYgKmIsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCiAgICAgIGNv bnN0IGNoYXIgKmNvbnRleHQsIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNlc3Npb25faWQpCi1AQCAt MjcxLDExICs1MTIsMTYgQEAgc3NoX2dzc2FwaV9idWlsZG1pYyhzdHJ1Y3Qgc3NoYnVmICpiLCBj b25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorQEAgLTI3MSwxMSArNTEzLDE2 IEBAIHNzaF9nc3NhcGlfYnVpbGRtaWMoc3RydWN0IHNzaGJ1ZiAqYiwgY29uc3QgY2hhciAqdXNl ciwgY29uc3QgY2hhciAqc2VydmljZSwKICB9CiAgCiAgaW50CkBAIC03NDEsNyArNzU2LDcgQEAg aW5kZXggNzA4OGQ5M2I0Li5hMDdkYmY1MTIgMTAwNjQ0CiAgCiAgCS8qIFJGQyA0NDYyIHNheXMg d2UgTVVTVCBOT1QgZG8gU1BORUdPICovCiAgCWlmIChvaWQtPmxlbmd0aCA9PSBzcG5lZ29fb2lk Lmxlbmd0aCAmJgotQEAgLTI4NSw2ICs1MzEsMTAgQEAgc3NoX2dzc2FwaV9jaGVja19tZWNoYW5p c20oR3NzY3R4dCAqKmN0eCwgZ3NzX09JRCBvaWQsIGNvbnN0IGNoYXIgKmhvc3QpCitAQCAtMjg1 LDYgKzUzMiwxMCBAQCBzc2hfZ3NzYXBpX2NoZWNrX21lY2hhbmlzbShHc3NjdHh0ICoqY3R4LCBn c3NfT0lEIG9pZCwgY29uc3QgY2hhciAqaG9zdCkKICAJc3NoX2dzc2FwaV9idWlsZF9jdHgoY3R4 KTsKICAJc3NoX2dzc2FwaV9zZXRfb2lkKCpjdHgsIG9pZCk7CiAgCW1ham9yID0gc3NoX2dzc2Fw aV9pbXBvcnRfbmFtZSgqY3R4LCBob3N0KTsKQEAgLTc1Miw3ICs3NjcsNyBAQCBpbmRleCA3MDg4 ZDkzYjQuLmEwN2RiZjUxMiAxMDA2NDQKICAJaWYgKCFHU1NfRVJST1IobWFqb3IpKSB7CiAgCQlt YWpvciA9IHNzaF9nc3NhcGlfaW5pdF9jdHgoKmN0eCwgMCwgR1NTX0NfTk9fQlVGRkVSLCAmdG9r ZW4sCiAgCQkgICAgTlVMTCk7Ci1AQCAtMjk0LDEwICs1NDQsNjYgQEAgc3NoX2dzc2FwaV9jaGVj a19tZWNoYW5pc20oR3NzY3R4dCAqKmN0eCwgZ3NzX09JRCBvaWQsIGNvbnN0IGNoYXIgKmhvc3Qp CitAQCAtMjk0LDEwICs1NDUsNjYgQEAgc3NoX2dzc2FwaV9jaGVja19tZWNoYW5pc20oR3NzY3R4 dCAqKmN0eCwgZ3NzX09JRCBvaWQsIGNvbnN0IGNoYXIgKmhvc3QpCiAgCQkJICAgIEdTU19DX05P X0JVRkZFUik7CiAgCX0KICAKQEAgLTEyNTYsNyArMTI3MSw3IEBAIGluZGV4IGY5YWUzMDNiNS4u OGI0ZmE5Y2ZlIDEwMDY0NAogIAogIC8qIFByaXZpbGVnZWQgKi8KIGRpZmYgLS1naXQgYS9rZXgt bmFtZXMuYyBiL2tleC1uYW1lcy5jCi1pbmRleCA3NTFmMDZjZWEuLjc2OWEzNjgxMCAxMDA2NDQK K2luZGV4IDExNjE1MDMxNi4uMmJjNDMxMjIzIDEwMDY0NAogLS0tIGEva2V4LW5hbWVzLmMKICsr KyBiL2tleC1uYW1lcy5jCiBAQCAtMzYsNiArMzYsNyBAQApAQCAtMTI3OCw3ICsxMjkzLDcgQEAg aW5kZXggNzUxZjA2Y2VhLi43NjlhMzY4MTAgMTAwNjQ0CiAgc3RydWN0IGtleGFsZyB7CiAgCWNo YXIgKm5hbWU7CiAgCXVfaW50IHR5cGU7Ci1AQCAtODgsOSArOTMsMjIgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBrZXhhbGcga2V4YWxnc1tdID0geworQEAgLTg2LDkgKzkxLDIyIEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3Qga2V4YWxnIGtleGFsZ3NbXSA9IHsKICAjZW5kaWYgLyogSEFWRV9FVlBfU0hB MjU2IHx8ICFXSVRIX09QRU5TU0wgKi8KICAJeyBOVUxMLCAwLCAtMSwgLTEsIDAgfSwKICB9OwpA QCAtMTMwMyw3ICsxMzE4LDcgQEAgaW5kZXggNzUxZjA2Y2VhLi43NjlhMzY4MTAgMTAwNjQ0CiAg ewogIAljaGFyICpyZXQgPSBOVUxMOwogIAljb25zdCBzdHJ1Y3Qga2V4YWxnICprOwotQEAgLTEw Miw2ICsxMjAsMTggQEAga2V4X2FsZ19saXN0KGNoYXIgc2VwKQorQEAgLTEwMCw2ICsxMTgsMTgg QEAga2V4X2FsZ19saXN0KGNoYXIgc2VwKQogIAlyZXR1cm4gcmV0OwogIH0KICAKQEAgLTEzMjIs NyArMTMzNyw3IEBAIGluZGV4IDc1MWYwNmNlYS4uNzY5YTM2ODEwIDEwMDY0NAogIHN0YXRpYyBj b25zdCBzdHJ1Y3Qga2V4YWxnICoKICBrZXhfYWxnX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkK ICB7Ci1AQCAtMTExLDYgKzE0MSwxMCBAQCBrZXhfYWxnX2J5X25hbWUoY29uc3QgY2hhciAqbmFt ZSkKK0BAIC0xMDksNiArMTM5LDEwIEBAIGtleF9hbGdfYnlfbmFtZShjb25zdCBjaGFyICpuYW1l KQogIAkJaWYgKHN0cmNtcChrLT5uYW1lLCBuYW1lKSA9PSAwKQogIAkJCXJldHVybiBrOwogIAl9 CkBAIC0xMzMzLDcgKzEzNDgsNyBAQCBpbmRleCA3NTFmMDZjZWEuLjc2OWEzNjgxMCAxMDA2NDQK ICAJcmV0dXJuIE5VTEw7CiAgfQogIAotQEAgLTE3Miw2ICsyMDYsMTIgQEAga2V4X25hbWVzX3Zh bGlkKGNvbnN0IGNoYXIgKm5hbWVzKQorQEAgLTE3MCw2ICsyMDQsMTIgQEAga2V4X25hbWVzX3Zh bGlkKGNvbnN0IGNoYXIgKm5hbWVzKQogIAkJcmV0dXJuIDA7CiAgCWZvciAoKHAgPSBzdHJzZXAo JmNwLCAiLCIpKTsgcCAmJiAqcCAhPSAnXDAnOwogIAkgICAgKHAgPSBzdHJzZXAoJmNwLCAiLCIp KSkgewpAQCAtMTM0Niw3ICsxMzYxLDcgQEAgaW5kZXggNzUxZjA2Y2VhLi43NjlhMzY4MTAgMTAw NjQ0CiAgCQlpZiAoa2V4X2FsZ19ieV9uYW1lKHApID09IE5VTEwpIHsKICAJCQllcnJvcigiVW5z dXBwb3J0ZWQgS0VYIGFsZ29yaXRobSBcIiUuMTAwc1wiIiwgcCk7CiAgCQkJZnJlZShzKTsKLUBA IC0zMzQsMyArMzY4LDI2IEBAIGtleF9hc3NlbWJsZV9uYW1lcyhjaGFyICoqbGlzdHAsIGNvbnN0 IGNoYXIgKmRlZiwgY29uc3QgY2hhciAqYWxsKQorQEAgLTMzMiwzICszNzIsMjYgQEAga2V4X2Fz c2VtYmxlX25hbWVzKGNoYXIgKipsaXN0cCwgY29uc3QgY2hhciAqZGVmLCBjb25zdCBjaGFyICph bGwpCiAgCWZyZWUocmV0KTsKICAJcmV0dXJuIHI7CiAgfQpAQCAtMTM3NCw3ICsxMzg5LDcgQEAg aW5kZXggNzUxZjA2Y2VhLi43NjlhMzY4MTAgMTAwNjQ0CiArCXJldHVybiAxOwogK30KIGRpZmYg LS1naXQgYS9rZXguYyBiL2tleC5jCi1pbmRleCA4NWIxMTJjNzUuLjM2MDhhNTUwNCAxMDA2NDQK K2luZGV4IGIyYzNkOTcyMC4uMWI4ZjFjM2M1IDEwMDY0NAogLS0tIGEva2V4LmMKICsrKyBiL2tl eC5jCiBAQCAtMjkzLDE3ICsyOTMsMzcgQEAgc3RhdGljIGludApAQCAtMTQyMSw3ICsxNDM2LDcg QEAgaW5kZXggODViMTEyYzc1Li4zNjA4YTU1MDQgMTAwNjQ0CiAgCSAgICAociA9IHNzaGJ1Zl9w dXRfY3N0cmluZyhtLCAiMCIpKSAhPSAwIHx8CiAgCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmlu ZyhtLCAiYWdlbnQtZm9yd2FyZCIpKSAhPSAwIHx8CiAgCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0 cmluZyhtLCAiMCIpKSAhPSAwKSB7Ci1AQCAtNzQxLDYgKzc2MSw5IEBAIGtleF9mcmVlKHN0cnVj dCBrZXggKmtleCkKK0BAIC03NDQsNiArNzY0LDkgQEAga2V4X2ZyZWUoc3RydWN0IGtleCAqa2V4 KQogIAlzc2hidWZfZnJlZShrZXgtPnNlcnZlcl92ZXJzaW9uKTsKICAJc3NoYnVmX2ZyZWUoa2V4 LT5jbGllbnRfcHViKTsKICAJc3NoYnVmX2ZyZWUoa2V4LT5zZXNzaW9uX2lkKTsKQEAgLTE0MzIs NyArMTQ0Nyw3IEBAIGluZGV4IDg1YjExMmM3NS4uMzYwOGE1NTA0IDEwMDY0NAogIAlzc2hrZXlf ZnJlZShrZXgtPmluaXRpYWxfaG9zdGtleSk7CiAgCWZyZWUoa2V4LT5mYWlsZWRfY2hvaWNlKTsK IGRpZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCi1pbmRleCA0ZjZkOTIxNjQuLjJjODZiMjVmOSAx MDA2NDQKK2luZGV4IDk4MTZiMWQ4My4uMjE5MTlhOWFhIDEwMDY0NAogLS0tIGEva2V4LmgKICsr KyBiL2tleC5oCiBAQCAtMjksNiArMjksMTAgQEAKQEAgLTE0NDQsMTIgKzE0NTksMTIgQEAgaW5k ZXggNGY2ZDkyMTY0Li4yYzg2YjI1ZjkgMTAwNjQ0CiArI2VuZGlmCiArCiAgI2lmZGVmIFdJVEhf T1BFTlNTTAotICMgaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICMgaW5jbHVkZSA8b3BlbnNzbC9k aC5oPgotQEAgLTEwMyw2ICsxMDcsMTUgQEAgZW51bSBrZXhfZXhjaGFuZ2UgewotIAlLRVhfQzI1 NTE5X1NIQTI1NiwKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3Ns L2RoLmg+CitAQCAtOTgsNiArMTAyLDE1IEBAIGVudW0ga2V4X2V4Y2hhbmdlIHsKICAJS0VYX0tF TV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyLAogIAlLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1 NiwKKyAJS0VYX0tFTV9NTEtFTTc2OEVDREhfU0hBMjU2LAogKyNpZmRlZiBHU1NBUEkKICsJS0VY X0dTU19HUlAxX1NIQTEsCiArCUtFWF9HU1NfR1JQMTRfU0hBMSwKQEAgLTE0NjIsNyArMTQ3Nyw3 IEBAIGluZGV4IDRmNmQ5MjE2NC4uMmM4NmIyNWY5IDEwMDY0NAogIAlLRVhfTUFYCiAgfTsKICAK LUBAIC0xNzAsNiArMTgzLDEzIEBAIHN0cnVjdCBrZXggeworQEAgLTE2Niw2ICsxNzksMTMgQEAg c3RydWN0IGtleCB7CiAgCXVfaW50CWZsYWdzOwogIAlpbnQJaGFzaF9hbGc7CiAgCWludAllY19u aWQ7CkBAIC0xNDc2LDcgKzE0OTEsNyBAQCBpbmRleCA0ZjZkOTIxNjQuLjJjODZiMjVmOSAxMDA2 NDQKICAJY2hhcgkqZmFpbGVkX2Nob2ljZTsKICAJaW50CSgqdmVyaWZ5X2hvc3Rfa2V5KShzdHJ1 Y3Qgc3Noa2V5ICosIHN0cnVjdCBzc2ggKik7CiAgCXN0cnVjdCBzc2hrZXkgKigqbG9hZF9ob3N0 X3B1YmxpY19rZXkpKGludCwgaW50LCBzdHJ1Y3Qgc3NoICopOwotQEAgLTE5Nyw4ICsyMTcsMTAg QEAgaW50CSBrZXhfbmlkX2Zyb21fbmFtZShjb25zdCBjaGFyICopOworQEAgLTE5Myw4ICsyMTMs MTAgQEAgaW50CSBrZXhfbmlkX2Zyb21fbmFtZShjb25zdCBjaGFyICopOwogIGludAkga2V4X2lz X3BxX2Zyb21fbmFtZShjb25zdCBjaGFyICopOwogIGludAkga2V4X25hbWVzX3ZhbGlkKGNvbnN0 IGNoYXIgKik7CiAgY2hhcgkqa2V4X2FsZ19saXN0KGNoYXIpOwpAQCAtMTQ4Nyw3ICsxNTAyLDcg QEAgaW5kZXggNGY2ZDkyMTY0Li4yYzg2YjI1ZjkgMTAwNjQ0CiAgaW50CSBrZXhfYXNzZW1ibGVf bmFtZXMoY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogIHZvaWQJIGtleF9w cm9wb3NhbF9wb3B1bGF0ZV9lbnRyaWVzKHN0cnVjdCBzc2ggKiwgY2hhciAqcHJvcFtQUk9QT1NB TF9NQVhdLAogICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1AQCAtMjMyLDYgKzI1NCwxMiBAQCBpbnQJIGtl eGdleF9jbGllbnQoc3RydWN0IHNzaCAqKTsKK0BAIC0yMjgsNiArMjUwLDEyIEBAIGludAkga2V4 Z2V4X2NsaWVudChzdHJ1Y3Qgc3NoICopOwogIGludAkga2V4Z2V4X3NlcnZlcihzdHJ1Y3Qgc3No ICopOwogIGludAkga2V4X2dlbl9jbGllbnQoc3RydWN0IHNzaCAqKTsKICBpbnQJIGtleF9nZW5f c2VydmVyKHN0cnVjdCBzc2ggKik7CkBAIC0xNTAwLDcgKzE1MTUsNyBAQCBpbmRleCA0ZjZkOTIx NjQuLjJjODZiMjVmOSAxMDA2NDQKICAKICBpbnQJIGtleF9kaF9rZXlwYWlyKHN0cnVjdCBrZXgg Kik7CiAgaW50CSBrZXhfZGhfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAq LCBzdHJ1Y3Qgc3NoYnVmICoqLAotQEAgLTI3MCw2ICsyOTgsMTIgQEAgaW50CSBrZXhnZXhfaGFz aChpbnQsIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorQEAg LTI3NSw2ICszMDMsMTIgQEAgaW50CSBrZXhnZXhfaGFzaChpbnQsIGNvbnN0IHN0cnVjdCBzc2hi dWYgKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAogICAgICBjb25zdCBCSUdOVU0gKiwgY29uc3Qg dV9jaGFyICosIHNpemVfdCwKICAgICAgdV9jaGFyICosIHNpemVfdCAqKTsKICAKQEAgLTE1NDIs NyArMTU1Nyw3IEBAIGluZGV4IGNiY2IyZDgzNi4uYjYzMzc0YjBlIDEwMDY0NAogIAkJYnJlYWs7 CiAgCWNhc2UgS0VYX0RIX0dSUDE4X1NIQTUxMjoKIGRpZmYgLS1naXQgYS9rZXhnZW4uYyBiL2tl eGdlbi5jCi1pbmRleCA1NjQzYmM4MzEuLmEyYmViM2YxMCAxMDA2NDQKK2luZGV4IGQxZjlkODQw YS4uZmY1MDQ1ODBmIDEwMDY0NAogLS0tIGEva2V4Z2VuLmMKICsrKyBiL2tleGdlbi5jCiBAQCAt NDQsNyArNDQsNyBAQApAQCAtMjg3Niw3ICsyODkxLDcgQEAgaW5kZXggMDAwMDAwMDAwLi45OGU5 NDA0ZGYKICsKICsjZW5kaWYgLyogZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVO U1NMKSAqLwogZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0b3IuYwotaW5kZXggMWU0MWRm YTUzLi4wMjVjNmFiYmUgMTAwNjQ0CitpbmRleCBjNjU5ZTk5ZTAuLmZhNDc3ODk5ZSAxMDA2NDQK IC0tLSBhL21vbml0b3IuYwogKysrIGIvbW9uaXRvci5jCiBAQCAtMTM4LDYgKzEzOCw4IEBAIGlu dCBtbV9hbnN3ZXJfZ3NzX3NldHVwX2N0eChzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1 ZiAqKTsKQEAgLTI5NDYsMTAgKzI5NjEsMTIgQEAgaW5kZXggMWU0MWRmYTUzLi4wMjVjNmFiYmUg MTAwNjQ0CiAgCiAgCWlmIChhdXRoX29wdHMtPnBlcm1pdF9wdHlfZmxhZykgewogIAkJbW9uaXRv cl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9QVFksIDEpOwotQEAgLTE5MjQsNiAr MTk0OCwxNyBAQCBtb25pdG9yX2FwcGx5X2tleXN0YXRlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0 IG1vbml0b3IgKnBtb25pdG9yKQotICMgaWZkZWYgT1BFTlNTTF9IQVNfRUNDCitAQCAtMTkwOCw4 ICsxOTMyLDE4IEBAIG1vbml0b3JfYXBwbHlfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1 Y3QgbW9uaXRvciAqcG1vbml0b3IpCisgCWtleC0+a2V4W0tFWF9ESF9HRVhfU0hBMV0gPSBrZXhn ZXhfc2VydmVyOworIAlrZXgtPmtleFtLRVhfREhfR0VYX1NIQTI1Nl0gPSBrZXhnZXhfc2VydmVy OwogIAlrZXgtPmtleFtLRVhfRUNESF9TSEEyXSA9IGtleF9nZW5fc2VydmVyOwotICMgZW5kaWYK Ky0Ja2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OEVDREhfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVy OworLSNlbmRpZgogKyMgaWZkZWYgR1NTQVBJCiArCWlmIChvcHRpb25zLmdzc19rZXlleCkgewog KwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxX1NIQTFdID0ga2V4Z3NzX3NlcnZlcjsKQEAgLTI5NjEs MTAgKzI5NzgsMTEgQEAgaW5kZXggMWU0MWRmYTUzLi4wMjVjNmFiYmUgMTAwNjQ0CiArCQlrZXgt PmtleFtLRVhfR1NTX0MyNTUxOV9TSEEyNTZdID0ga2V4Z3NzX3NlcnZlcjsKICsJfQogKyMgZW5k aWYKLSAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisrI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAq LwogIAlrZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKICAJa2V4 LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fc2VydmVyOwot QEAgLTIwMjIsOCArMjA1Nyw4IEBAIG1tX2Fuc3dlcl9nc3Nfc2V0dXBfY3R4KHN0cnVjdCBzc2gg KnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCisgCWtleC0+a2V4W0tFWF9LRU1fTUxL RU03NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworQEAgLTIwMDcsOCArMjA0MSw4 IEBAIG1tX2Fuc3dlcl9nc3Nfc2V0dXBfY3R4KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0 cnVjdCBzc2hidWYgKm0pCiAgCXVfY2hhciAqcDsKICAJaW50IHI7CiAgCkBAIC0yOTc1LDcgKzI5 OTMsNyBAQCBpbmRleCAxZTQxZGZhNTMuLjAyNWM2YWJiZSAxMDA2NDQKICAKICAJaWYgKChyID0g c3NoYnVmX2dldF9zdHJpbmcobSwgJnAsICZsZW4pKSAhPSAwKQogIAkJZmF0YWxfZnIociwgInBh cnNlIik7Ci1AQCAtMjA1NSw4ICsyMDkwLDggQEAgbW1fYW5zd2VyX2dzc19hY2NlcHRfY3R4KHN0 cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCitAQCAtMjA0MCw4ICsy MDc0LDggQEAgbW1fYW5zd2VyX2dzc19hY2NlcHRfY3R4KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNv Y2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCU9NX3VpbnQzMiBmbGFncyA9IDA7IC8qIEdTSSBuZWVk cyB0aGlzICovCiAgCWludCByOwogIApAQCAtMjk4Niw3ICszMDA0LDcgQEAgaW5kZXggMWU0MWRm YTUzLi4wMjVjNmFiYmUgMTAwNjQ0CiAgCiAgCWlmICgociA9IHNzaF9nc3NhcGlfZ2V0X2J1ZmZl cl9kZXNjKG0sICZpbikpICE9IDApCiAgCQlmYXRhbF9mcihyLCAic3NoX2dzc2FwaV9nZXRfYnVm ZmVyX2Rlc2MiKTsKLUBAIC0yMDc2LDYgKzIxMTEsNyBAQCBtbV9hbnN3ZXJfZ3NzX2FjY2VwdF9j dHgoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC0yMDYx LDYgKzIwOTUsNyBAQCBtbV9hbnN3ZXJfZ3NzX2FjY2VwdF9jdHgoc3RydWN0IHNzaCAqc3NoLCBp bnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRj aCwgTU9OSVRPUl9SRVFfR1NTU1RFUCwgMCk7CiAgCQltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0 Y2gsIE1PTklUT1JfUkVRX0dTU1VTRVJPSywgMSk7CiAgCQltb25pdG9yX3Blcm1pdChtb25fZGlz cGF0Y2gsIE1PTklUT1JfUkVRX0dTU0NIRUNLTUlDLCAxKTsKQEAgLTI5OTQsNyArMzAxMiw3IEBA IGluZGV4IDFlNDFkZmE1My4uMDI1YzZhYmJlIDEwMDY0NAogIAl9CiAgCXJldHVybiAoMCk7CiAg fQotQEAgLTIwODcsOCArMjEyMyw4IEBAIG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWMoc3RydWN0IHNz aCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC0yMDcyLDggKzIxMDcsOCBA QCBtbV9hbnN3ZXJfZ3NzX2NoZWNrbWljKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVj dCBzc2hidWYgKm0pCiAgCU9NX3VpbnQzMiByZXQ7CiAgCWludCByOwogIApAQCAtMzAwNSw3ICsz MDIzLDcgQEAgaW5kZXggMWU0MWRmYTUzLi4wMjVjNmFiYmUgMTAwNjQ0CiAgCiAgCWlmICgociA9 IHNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNjKG0sICZnc3NidWYpKSAhPSAwIHx8CiAgCSAgICAo ciA9IHNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNjKG0sICZtaWMpKSAhPSAwKQotQEAgLTIxMTQs MTMgKzIxNTAsMTcgQEAgbW1fYW5zd2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICpzc2gsIGlu dCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorQEAgLTIwOTksMTMgKzIxMzQsMTcgQEAgbW1fYW5z d2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVm ICptKQogIGludAogIG1tX2Fuc3dlcl9nc3NfdXNlcm9rKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNv Y2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgewpAQCAtMzAyNyw3ICszMDQ1LDcgQEAgaW5kZXggMWU0 MWRmYTUzLi4wMjVjNmFiYmUgMTAwNjQ0CiAgCiAgCXNzaGJ1Zl9yZXNldChtKTsKICAJaWYgKChy ID0gc3NoYnVmX3B1dF91MzIobSwgYXV0aGVudGljYXRlZCkpICE9IDApCi1AQCAtMjEyOSw3ICsy MTY5LDExIEBAIG1tX2Fuc3dlcl9nc3NfdXNlcm9rKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ss IHN0cnVjdCBzc2hidWYgKm0pCitAQCAtMjExNCw3ICsyMTUzLDExIEBAIG1tX2Fuc3dlcl9nc3Nf dXNlcm9rKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCWRl YnVnM19mKCJzZW5kaW5nIHJlc3VsdCAlZCIsIGF1dGhlbnRpY2F0ZWQpOwogIAltbV9yZXF1ZXN0 X3NlbmQoc29jaywgTU9OSVRPUl9BTlNfR1NTVVNFUk9LLCBtKTsKICAKQEAgLTMwNDAsNyArMzA1 OCw3IEBAIGluZGV4IDFlNDFkZmE1My4uMDI1YzZhYmJlIDEwMDY0NAogIAogIAlpZiAoKGRpc3Bs YXluYW1lID0gc3NoX2dzc2FwaV9kaXNwbGF5bmFtZSgpKSAhPSBOVUxMKQogIAkJYXV0aDJfcmVj b3JkX2luZm8oYXV0aGN0eHQsICIlcyIsIGRpc3BsYXluYW1lKTsKLUBAIC0yMTM3LDUgKzIxODEs ODQgQEAgbW1fYW5zd2VyX2dzc191c2Vyb2soc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3Ry dWN0IHNzaGJ1ZiAqbSkKK0BAIC0yMTIyLDUgKzIxNjUsODQgQEAgbW1fYW5zd2VyX2dzc191c2Vy b2soc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJLyogTW9u aXRvciBsb29wIHdpbGwgdGVybWluYXRlIGlmIGF1dGhlbnRpY2F0ZWQgKi8KICAJcmV0dXJuIChh dXRoZW50aWNhdGVkKTsKICB9CkBAIC0zMTM5LDEwICszMTU3LDEwIEBAIGluZGV4IDFiNDZlNzk0 ZS4uNzVhMGQ2MTgxIDEwMDY0NAogIAogIHN0cnVjdCBzc2g7CiBkaWZmIC0tZ2l0IGEvbW9uaXRv cl93cmFwLmMgYi9tb25pdG9yX3dyYXAuYwotaW5kZXggZjNjMzQxYmM3Li40OTZkZTQzNmUgMTAw NjQ0CitpbmRleCBhZjAyNTI5NjQuLjJiMDQ0ZjM4MyAxMDA2NDQKIC0tLSBhL21vbml0b3Jfd3Jh cC5jCiArKysgYi9tb25pdG9yX3dyYXAuYwotQEAgLTExNjIsMTMgKzExNjIsMTUgQEAgbW1fc3No X2dzc2FwaV9jaGVja21pYyhHc3NjdHh0ICpjdHgsIGdzc19idWZmZXJfdCBnc3NidWYsIGdzc19i dWZmZXJfdCBnc3NtaWMpCitAQCAtMTExMiwxMyArMTExMiwxNSBAQCBtbV9zc2hfZ3NzYXBpX2No ZWNrbWljKEdzc2N0eHQgKmN0eCwgZ3NzX2J1ZmZlcl90IGdzc2J1ZiwgZ3NzX2J1ZmZlcl90IGdz c21pYykKICB9CiAgCiAgaW50CkBAIC0zMTU5LDcgKzMxNzcsNyBAQCBpbmRleCBmM2MzNDFiYzcu LjQ5NmRlNDM2ZSAxMDA2NDQKICAKICAJbW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3Zm ZCwgTU9OSVRPUl9SRVFfR1NTVVNFUk9LLCBtKTsKICAJbW1fcmVxdWVzdF9yZWNlaXZlX2V4cGVj dChwbW9uaXRvci0+bV9yZWN2ZmQsCi1AQCAtMTE4MSw2ICsxMTgzLDU5IEBAIG1tX3NzaF9nc3Nh cGlfdXNlcm9rKGNoYXIgKnVzZXIpCitAQCAtMTEzMSw2ICsxMTMzLDU5IEBAIG1tX3NzaF9nc3Nh cGlfdXNlcm9rKGNoYXIgKnVzZXIpCiAgCWRlYnVnM19mKCJ1c2VyICVzYXV0aGVudGljYXRlZCIs IGF1dGhlbnRpY2F0ZWQgPyAiIiA6ICJub3QgIik7CiAgCXJldHVybiAoYXV0aGVudGljYXRlZCk7 CiAgfQpAQCAtMzIyMCw3ICszMjM4LDcgQEAgaW5kZXggZjNjMzQxYmM3Li40OTZkZTQzNmUgMTAw NjQ0CiAgCiAgLyoKIGRpZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuaCBiL21vbml0b3Jfd3JhcC5o Ci1pbmRleCAzZTA4ZGRkNzguLmE3MDhiZjRkOCAxMDA2NDQKK2luZGV4IDMwNTg1MTg3Yy4uMDdi MjA3ZDFkIDEwMDY0NAogLS0tIGEvbW9uaXRvcl93cmFwLmgKICsrKyBiL21vbml0b3Jfd3JhcC5o CiBAQCAtNzIsOCArNzIsMTAgQEAgdm9pZCBtbV9kZWNvZGVfYWN0aXZhdGVfc2VydmVyX29wdGlv bnMoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3Qgc3NoYnVmICptKTsKQEAgLTMyMzYsNyArMzI1NCw3 IEBAIGluZGV4IDNlMDhkZGQ3OC4uYTcwOGJmNGQ4IDEwMDY0NAogIAogICNpZmRlZiBVU0VfUEFN CiBkaWZmIC0tZ2l0IGEvcmVhZGNvbmYuYyBiL3JlYWRjb25mLmMKLWluZGV4IDEwY2JkMDRiYS4u OTAwNDA3NmU0IDEwMDY0NAoraW5kZXggNzQ2NTIxNmYzLi45OTJjNzg4NjYgMTAwNjQ0CiAtLS0g YS9yZWFkY29uZi5jCiArKysgYi9yZWFkY29uZi5jCiBAQCAtNTcsNiArNTcsNyBAQApAQCAtMzMy Miw3ICszMzQwLDcgQEAgaW5kZXggMTBjYmQwNGJhLi45MDA0MDc2ZTQgMTAwNjQ0CiAgCWNhc2Ug b0JhdGNoTW9kZToKICAJCWludHB0ciA9ICZvcHRpb25zLT5iYXRjaF9tb2RlOwogIAkJZ290byBw YXJzZV9mbGFnOwotQEAgLTI3MTgsNyArMjc2NSwxMyBAQCBpbml0aWFsaXplX29wdGlvbnMoT3B0 aW9ucyAqIG9wdGlvbnMpCitAQCAtMjcxOSw3ICsyNzY2LDEzIEBAIGluaXRpYWxpemVfb3B0aW9u cyhPcHRpb25zICogb3B0aW9ucykKICAJb3B0aW9ucy0+ZndkX29wdHMuc3RyZWFtbG9jYWxfYmlu ZF91bmxpbmsgPSAtMTsKICAJb3B0aW9ucy0+cHVia2V5X2F1dGhlbnRpY2F0aW9uID0gLTE7CiAg CW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IC0xOwpAQCAtMzMzNiw3ICszMzU0LDcgQEAg aW5kZXggMTBjYmQwNGJhLi45MDA0MDc2ZTQgMTAwNjQ0CiAgCW9wdGlvbnMtPnBhc3N3b3JkX2F1 dGhlbnRpY2F0aW9uID0gLTE7CiAgCW9wdGlvbnMtPmtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNh dGlvbiA9IC0xOwogIAlvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfZGV2aWNlcyA9IE5VTEw7Ci1A QCAtMjg4NCw4ICsyOTM3LDE4IEBAIGZpbGxfZGVmYXVsdF9vcHRpb25zKE9wdGlvbnMgKiBvcHRp b25zKQorQEAgLTI4ODUsOCArMjkzOCwxOCBAQCBmaWxsX2RlZmF1bHRfb3B0aW9ucyhPcHRpb25z ICogb3B0aW9ucykKICAJCW9wdGlvbnMtPnB1YmtleV9hdXRoZW50aWNhdGlvbiA9IFNTSF9QVUJL RVlfQVVUSF9BTEw7CiAgCWlmIChvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPT0gLTEpCiAg CQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAwOwpAQCAtMzM1NSw3ICszMzczLDcgQEAg aW5kZXggMTBjYmQwNGJhLi45MDA0MDc2ZTQgMTAwNjQ0CiAgCWlmIChvcHRpb25zLT5wYXNzd29y ZF9hdXRoZW50aWNhdGlvbiA9PSAtMSkKICAJCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0 aW9uID0gMTsKICAJaWYgKG9wdGlvbnMtPmtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlvbiA9 PSAtMSkKLUBAIC0zNzY1LDcgKzM4MjgsMTQgQEAgZHVtcF9jbGllbnRfY29uZmlnKE9wdGlvbnMg Km8sIGNvbnN0IGNoYXIgKmhvc3QpCitAQCAtMzc2Niw3ICszODI5LDE0IEBAIGR1bXBfY2xpZW50 X2NvbmZpZyhPcHRpb25zICpvLCBjb25zdCBjaGFyICpob3N0KQogIAlkdW1wX2NmZ19mbXRpbnQo b0dhdGV3YXlQb3J0cywgby0+ZndkX29wdHMuZ2F0ZXdheV9wb3J0cyk7CiAgI2lmZGVmIEdTU0FQ SQogIAlkdW1wX2NmZ19mbXRpbnQob0dzc0F1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0aGVudGlj YXRpb24pOwpAQCAtMzM4OSw3ICszNDA3LDcgQEAgaW5kZXggZGJjYjQxNzI1Li44YjBjOThhY2Yg MTAwNjQ0CiAgCQkJCQkJICogYXV0aGVudGljYXRpb24uICovCiAgCWludCAgICAga2JkX2ludGVy YWN0aXZlX2F1dGhlbnRpY2F0aW9uOyAvKiBUcnkga2V5Ym9hcmQtaW50ZXJhY3RpdmUgYXV0aC4g Ki8KIGRpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5kZXggNjY4MjU5YTIw Li5kZTNmYTk0ODEgMTAwNjQ0CitpbmRleCBlNzgxOWQ1OWEuLmYyOGQxOTE5NCAxMDA2NDQKIC0t LSBhL3NlcnZjb25mLmMKICsrKyBiL3NlcnZjb25mLmMKIEBAIC02Miw2ICs2Miw3IEBACkBAIC0z Mzk4LDk1ICszNDE2LDQwIEBAIGluZGV4IDY2ODI1OWEyMC4uZGUzZmE5NDgxIDEwMDY0NAogICNp bmNsdWRlICJ2ZXJzaW9uLmgiCiArI2luY2x1ZGUgInNzaC1nc3MuaCIKICAKLSAjaWYgIWRlZmlu ZWQoU1NIRF9QQU1fU0VSVklDRSkKLSAjIGRlZmluZSBTU0hEX1BBTV9TRVJWSUNFCQkic3NoZCIK LUBAIC0xMzEsOSArMTMyLDEyIEBAIGluaXRpYWxpemVfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0 aW9ucyAqb3B0aW9ucykKLSAJb3B0aW9ucy0+a2VyYmVyb3NfdGlja2V0X2NsZWFudXAgPSAtMTsK LSAJb3B0aW9ucy0+a2VyYmVyb3NfZ2V0X2Fmc190b2tlbiA9IC0xOwotIAlvcHRpb25zLT5nc3Nf YXV0aGVudGljYXRpb249LTE7Ci0rCW9wdGlvbnMtPmdzc19rZXlleCA9IC0xOwotIAlvcHRpb25z LT5nc3NfY2xlYW51cF9jcmVkcyA9IC0xOwotIAlvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAt MTsKLSAJb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9IC0xOwotKwlvcHRpb25zLT5nc3Nf c3RvcmVfcmVrZXkgPSAtMTsKLSsJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0gTlVMTDsK LSAJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAtMTsKLSAJb3B0aW9ucy0+a2Jk X2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID0gLTE7Ci0gCW9wdGlvbnMtPnBlcm1pdF9lbXB0 eV9wYXNzd2QgPSAtMTsKLUBAIC0zNzIsMTIgKzM3NiwyMCBAQCBmaWxsX2RlZmF1bHRfc2VydmVy X29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKLSAJCW9wdGlvbnMtPmtlcmJlcm9zX2dl dF9hZnNfdG9rZW4gPSAwOwotIAlpZiAob3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID09IC0x KQotIAkJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID0gMDsKLSsJaWYgKG9wdGlvbnMtPmdz c19rZXlleCA9PSAtMSkKLSsJCW9wdGlvbnMtPmdzc19rZXlleCA9IDA7Ci0gCWlmIChvcHRpb25z LT5nc3NfY2xlYW51cF9jcmVkcyA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19jbGVhbnVwX2NyZWRz ID0gMTsKLSAJaWYgKG9wdGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9PSAtMSkKLSAJCW9wdGlvbnMt Pmdzc19kZWxlZ19jcmVkcyA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2VwdG9y ID09IC0xKQotIAkJb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9IDE7Ci0rCWlmIChvcHRp b25zLT5nc3Nfc3RvcmVfcmVrZXkgPT0gLTEpCi0rCQlvcHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkg PSAwOworICNkZWZpbmUgU1NIRF9DT05GSUdfQkxPQl9WRVJTSU9OCTEKKyAKK0BAIC0zMzUsNiAr MzM2LDEwIEBAIGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRp b25zKQorIAkJb3B0aW9ucy0+bG9nX2ZhY2lsaXR5ID0gU1lTTE9HX0ZBQ0lMSVRZX0FVVEg7Cisg CWlmIChvcHRpb25zLT5sb2dfbGV2ZWwgPT0gU1lTTE9HX0xFVkVMX05PVF9TRVQpCisgCQlvcHRp b25zLT5sb2dfbGV2ZWwgPSBTWVNMT0dfTEVWRUxfSU5GTzsKICsjaWZkZWYgR1NTQVBJCiArCWlm IChvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPT0gTlVMTCkKICsJCW9wdGlvbnMtPmdzc19r ZXhfYWxnb3JpdGhtcyA9IHN0cmR1cChHU1NfS0VYX0RFRkFVTFRfS0VYKTsKICsjZW5kaWYKLSAJ aWYgKG9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID09IC0xKQotIAkJb3B0aW9ucy0+ cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAxOwotIAlpZiAob3B0aW9ucy0+a2JkX2ludGVyYWN0 aXZlX2F1dGhlbnRpY2F0aW9uID09IC0xKQotQEAgLTU2NSw2ICs1NzcsNyBAQCB0eXBlZGVmIGVu dW0gewotIAlzUGVyU291cmNlUGVuYWx0aWVzLCBzUGVyU291cmNlUGVuYWx0eUV4ZW1wdExpc3Qs Ci0gCXNDbGllbnRBbGl2ZUludGVydmFsLCBzQ2xpZW50QWxpdmVDb3VudE1heCwgc0F1dGhvcml6 ZWRLZXlzRmlsZSwKLSAJc0dzc0F1dGhlbnRpY2F0aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBzR3Nz RGVsZWdhdGVDcmVkcywgc0dzc1N0cmljdEFjY2VwdG9yLAotKwlzR3NzS2V5RXgsIHNHc3NLZXhB bGdvcml0aG1zLCBzR3NzU3RvcmVSZWtleSwKLSAJc0FjY2VwdEVudiwgc1NldEVudiwgc1Blcm1p dFR1bm5lbCwKLSAJc01hdGNoLCBzUGVybWl0T3Blbiwgc1Blcm1pdExpc3Rlbiwgc0ZvcmNlQ29t bWFuZCwgc0Nocm9vdERpcmVjdG9yeSwKLSAJc1VzZVByaXZpbGVnZVNlcGFyYXRpb24sIHNBbGxv d0FnZW50Rm9yd2FyZGluZywKLUBAIC02NTAsMTQgKzY2MywyNCBAQCBzdGF0aWMgc3RydWN0IHsK LSAjaWZkZWYgR1NTQVBJCi0gCXsgImdzc2FwaWF1dGhlbnRpY2F0aW9uIiwgc0dzc0F1dGhlbnRp Y2F0aW9uLCBTU0hDRkdfQUxMIH0sCi0gCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNH c3NDbGVhbnVwQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZ3NzYXBpY2xlYW51cGNyZWRz Iiwgc0dzc0NsZWFudXBDcmVkcywgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlkZWxlZ2F0 ZWNyZWRlbnRpYWxzIiwgc0dzc0RlbGVnYXRlQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAi Z3NzYXBpc3RyaWN0YWNjZXB0b3JjaGVjayIsIHNHc3NTdHJpY3RBY2NlcHRvciwgU1NIQ0ZHX0dM T0JBTCB9LAotKwl7ICJnc3NhcGlrZXlleGNoYW5nZSIsIHNHc3NLZXlFeCwgU1NIQ0ZHX0dMT0JB TCB9LAotKwl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNHc3NTdG9yZVJla2V5 LCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzR3NzS2V4QWxn b3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbHNlCi0gCXsgImdzc2FwaWF1dGhlbnRpY2F0 aW9uIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCi0gCXsgImdzc2FwaWNsZWFudXBjcmVk ZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJnc3NhcGljbGVh bnVwY3JlZHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpZGVs ZWdhdGVjcmVkZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJn c3NhcGlzdHJpY3RhY2NlcHRvcmNoZWNrIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0s Ci0rCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0s Ci0rCXsgImdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc1Vuc3VwcG9ydGVkLCBTU0hD RkdfR0xPQkFMIH0sCi0rCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzVW5zdXBwb3J0ZWQsIFNT SENGR19HTE9CQUwgfSwKLSAjZW5kaWYKLSsJeyAiZ3NzdXNlc2Vzc2lvbmNjYWNoZSIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJnc3NhcGl1c2VzZXNzaW9uY3JlZGNhY2hl Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgInBhc3N3b3JkYXV0aGVudGlj YXRpb24iLCBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJrYmRp bnRlcmFjdGl2ZWF1dGhlbnRpY2F0aW9uIiwgc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24s IFNTSENGR19BTEwgfSwKLSAJeyAiY2hhbGxlbmdlcmVzcG9uc2VhdXRoZW50aWNhdGlvbiIsIHNL YmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLCBTU0hDRkdfQUxMIH0sIC8qIGFsaWFzICovCi1A QCAtMTY1MCw2ICsxNjczLDEwIEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNl cnZlck9wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmxpbmUsCisgCWlmIChvcHRpb25zLT5wZXJtaXRf dXNlcl9lbnYgPT0gLTEpIHsKKyAJCW9wdGlvbnMtPnBlcm1pdF91c2VyX2VudiA9IDA7CisgCQlv cHRpb25zLT5wZXJtaXRfdXNlcl9lbnZfYWxsb3dsaXN0ID0gTlVMTDsKK0BAIC0xNDM1LDYgKzE0 NDAsMTAgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAq b3B0aW9ucywgY2hhciAqbGluZSwKICAJCWludHB0ciA9ICZvcHRpb25zLT5nc3NfYXV0aGVudGlj YXRpb247CiAgCQlnb3RvIHBhcnNlX2ZsYWc7CiAgCi0rCWNhc2Ugc0dzc0tleUV4OgorKwljYXNl IHNHU1NBUElLZXlFeGNoYW5nZToKICsJCWludHB0ciA9ICZvcHRpb25zLT5nc3Nfa2V5ZXg7CiAr CQlnb3RvIHBhcnNlX2ZsYWc7CiArCi0gCWNhc2Ugc0dzc0NsZWFudXBDcmVkczoKKyAJY2FzZSBz R1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzOgogIAkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19jbGVh bnVwX2NyZWRzOwogIAkJZ290byBwYXJzZV9mbGFnOwotQEAgLTE2NjIsNiArMTY4OSwyMiBAQCBw cm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBj aGFyICpsaW5lLAorQEAgLTE0NDYsNiArMTQ1NSwyMiBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdf bGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAorIAljYXNlIHNH U1NBUElTdHJpY3RBY2NlcHRvckNoZWNrOgogIAkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19zdHJp Y3RfYWNjZXB0b3I7CiAgCQlnb3RvIHBhcnNlX2ZsYWc7Ci0gCi0rCWNhc2Ugc0dzc1N0b3JlUmVr ZXk6CisrCisrCWNhc2Ugc0dTU0FQSVN0b3JlQ3JlZGVudGlhbHNPblJla2V5OgogKwkJaW50cHRy ID0gJm9wdGlvbnMtPmdzc19zdG9yZV9yZWtleTsKICsJCWdvdG8gcGFyc2VfZmxhZzsKICsKLSsJ Y2FzZSBzR3NzS2V4QWxnb3JpdGhtczoKKysJY2FzZSBzR1NTQVBJS2V4QWxnb3JpdGhtczoKICsJ CWFyZyA9IGFyZ3ZfbmV4dCgmYWMsICZhdik7CiArCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcp CiArCQkJZmF0YWwoIiUuMjAwcyBsaW5lICVkOiBNaXNzaW5nIGFyZ3VtZW50LiIsCkBAIC0zNDk3 LDQzICszNDYwLDUzIEBAIGluZGV4IDY2ODI1OWEyMC4uZGUzZmE5NDgxIDEwMDY0NAogKwkJaWYg KCphY3RpdmVwICYmIG9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9PSBOVUxMKQogKwkJCW9w dGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IHhzdHJkdXAoYXJnKTsKICsJCWJyZWFrOwotKwor ICNlbmRpZiAvKiBHU1NBUEkgKi8KKyAKICAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoK LSAJCWludHB0ciA9ICZvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbjsKLSAJCWdvdG8g cGFyc2VfZmxhZzsKLUBAIC0zMjkxLDcgKzMzMzQsMTAgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0 aW9ucyAqbykKLSAJZHVtcF9jZmdfZm10aW50KHNHc3NBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1 dGhlbnRpY2F0aW9uKTsKLSAJZHVtcF9jZmdfZm10aW50KHNHc3NDbGVhbnVwQ3JlZHMsIG8tPmdz c19jbGVhbnVwX2NyZWRzKTsKLSAJZHVtcF9jZmdfZm10aW50KHNHc3NEZWxlZ2F0ZUNyZWRzLCBv LT5nc3NfZGVsZWdfY3JlZHMpOwotKwlkdW1wX2NmZ19mbXRpbnQoc0dzc0tleUV4LCBvLT5nc3Nf a2V5ZXgpOwotIAlkdW1wX2NmZ19mbXRpbnQoc0dzc1N0cmljdEFjY2VwdG9yLCBvLT5nc3Nfc3Ry aWN0X2FjY2VwdG9yKTsKLSsJZHVtcF9jZmdfZm10aW50KHNHc3NTdG9yZVJla2V5LCBvLT5nc3Nf c3RvcmVfcmVrZXkpOwotKwlkdW1wX2NmZ19zdHJpbmcoc0dzc0tleEFsZ29yaXRobXMsIG8tPmdz c19rZXhfYWxnb3JpdGhtcyk7CitAQCAtNDIxNyw3ICs0MjQyLDEwIEBAIGR1bXBfY29uZmlnKFNl cnZlck9wdGlvbnMgKm8pCisgCWR1bXBfY2ZnX2ZtdGludChzR1NTQVBJQXV0aGVudGljYXRpb24s IG8tPmdzc19hdXRoZW50aWNhdGlvbik7CisgCWR1bXBfY2ZnX2ZtdGludChzR1NTQVBJQ2xlYW51 cENyZWRlbnRpYWxzLCBvLT5nc3NfY2xlYW51cF9jcmVkcyk7CisgCWR1bXBfY2ZnX2ZtdGludChz R1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscywgby0+Z3NzX2RlbGVnX2NyZWRzKTsKKysJZHVtcF9j ZmdfZm10aW50KHNHU1NBUElLZXlFeGNoYW5nZSwgby0+Z3NzX2tleWV4KTsKKyAJZHVtcF9jZmdf Zm10aW50KHNHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrLCBvLT5nc3Nfc3RyaWN0X2FjY2VwdG9y KTsKKysJZHVtcF9jZmdfZm10aW50KHNHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtleSwgby0+ Z3NzX3N0b3JlX3Jla2V5KTsKKysJZHVtcF9jZmdfc3RyaW5nKHNHU1NBUElLZXhBbGdvcml0aG1z LCBvLT5nc3Nfa2V4X2FsZ29yaXRobXMpOwogICNlbmRpZgogIAlkdW1wX2NmZ19mbXRpbnQoc1Bh c3N3b3JkQXV0aGVudGljYXRpb24sIG8tPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uKTsKICAJZHVt cF9jZmdfZm10aW50KHNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLAogZGlmZiAtLWdpdCBh L3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCi1pbmRleCBiMDZkYjA5ZTEuLjc2NjQxZDU4MCAxMDA2 NDQKK2luZGV4IDM2NDhlMmJlMS4uYzZkYTc5ZjUzIDEwMDY0NAogLS0tIGEvc2VydmNvbmYuaAog KysrIGIvc2VydmNvbmYuaAotQEAgLTE1MSw5ICsxNTEsMTIgQEAgdHlwZWRlZiBzdHJ1Y3Qgewot IAlpbnQgICAgIGtlcmJlcm9zX2dldF9hZnNfdG9rZW47CQkvKiBJZiB0cnVlLCB0cnkgdG8gZ2V0 IEFGUyB0b2tlbiBpZgotIAkJCQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcy4gKi8K LSAJaW50ICAgICBnc3NfYXV0aGVudGljYXRpb247CS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkg YXV0aGVudGljYXRpb24gKi8KLSsJaW50ICAgICBnc3Nfa2V5ZXg7CQkvKiBJZiB0cnVlLCBwZXJt aXQgR1NTQVBJIGtleSBleGNoYW5nZSAqLwotIAlpbnQgICAgIGdzc19jbGVhbnVwX2NyZWRzOwkv KiBJZiB0cnVlLCBkZXN0cm95IGNyZWQgY2FjaGUgb24gbG9nb3V0ICovCi0gCWludCAgICAgZ3Nz X2RlbGVnX2NyZWRzOwkvKiBJZiB0cnVlLCBhY2NlcHQgZGVsZWdhdGVkIEdTUyBjcmVkZW50aWFs cyAqLwotIAlpbnQgICAgIGdzc19zdHJpY3RfYWNjZXB0b3I7CS8qIElmIHRydWUsIHJlc3RyaWN0 IHRoZSBHU1NBUEkgYWNjZXB0b3IgbmFtZSAqLwotKwlpbnQgCWdzc19zdG9yZV9yZWtleTsKLSsJ Y2hhciAgICpnc3Nfa2V4X2FsZ29yaXRobXM7CS8qIEdTU0FQSSBrZXggbWV0aG9kcyB0byBiZSBv ZmZlcmVkIGJ5IGNsaWVudC4gKi8KLSAJaW50ICAgICBwYXNzd29yZF9hdXRoZW50aWNhdGlvbjsJ LyogSWYgdHJ1ZSwgcGVybWl0IHBhc3N3b3JkCi0gCQkJCQkJICogYXV0aGVudGljYXRpb24uICov Ci0gCWludCAgICAga2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBw ZXJtaXQgKi8KK0BAIC0zMTYsMTQgKzMxNiwyMSBAQCBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChr ZXJiZXJvc19nZXRfYWZzX3Rva2VuLCBLZXJiZXJvc0dldEFGU1Rva2VuLCBTU0hDRkdfR0xPQgor ICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFU19HU1MgXAorIFNTSENPTkZfSU5URkxBRyhnc3Nf YXV0aGVudGljYXRpb24sIEdTU0FQSUF1dGhlbnRpY2F0aW9uLCBTU0hDRkdfQUxMLCAwLCBTU0hD RkdfQ09QWV9NQVRDSCkgXAorIFNTSENPTkZfSU5URkxBRyhnc3NfY2xlYW51cF9jcmVkcywgR1NT QVBJQ2xlYW51cENyZWRlbnRpYWxzLCBTU0hDRkdfR0xPQkFMLCAxLCBTU0hDRkdfQ09QWV9OT05F KSBcCisrU1NIQ09ORl9BTElBUyhHU1NBUElDbGVhbnVwQ3JlZHMsIEdTU0FQSUNsZWFudXBDcmVk ZW50aWFscywgU1NIQ0ZHX0dMT0JBTCkgXAorIFNTSENPTkZfSU5URkxBRyhnc3NfZGVsZWdfY3Jl ZHMsIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQUwsIDEsIFNTSENGR19D T1BZX05PTkUpIFwKKy1TU0hDT05GX0lOVEZMQUcoZ3NzX3N0cmljdF9hY2NlcHRvciwgR1NTQVBJ U3RyaWN0QWNjZXB0b3JDaGVjaywgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkK KytTU0hDT05GX0lOVEZMQUcoZ3NzX3N0cmljdF9hY2NlcHRvciwgR1NTQVBJU3RyaWN0QWNjZXB0 b3JDaGVjaywgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorK1NTSENPTkZf SU5URkxBRyhnc3Nfa2V5ZXgsIEdTU0FQSUtleUV4Y2hhbmdlLCBTU0hDRkdfR0xPQkFMLCAwLCBT U0hDRkdfQ09QWV9OT05FKSBcCisrU1NIQ09ORl9JTlRGTEFHKGdzc19zdG9yZV9yZWtleSwgR1NT QVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXksIFNTSENGR19HTE9CQUwsIDAsIFNTSENGR19DT1BZ X05PTkUpIFwKKytTU0hDT05GX1NUUklORyhnc3Nfa2V4X2FsZ29yaXRobXMsIEdTU0FQSUtleEFs Z29yaXRobXMsIFNTSENGR19HTE9CQUwsIFNTSENGR19DT1BZX05PTkUpCisgI2Vsc2UgLyogR1NT QVBJICovCisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTX0dTUyBcCisgU1NIQ09ORl9VTlNV UFBPUlRFRF9JTlQoZ3NzX2F1dGhlbnRpY2F0aW9uLCBHU1NBUElBdXRoZW50aWNhdGlvbiwgU1NI Q0ZHX0FMTCkgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGdzc19jbGVhbnVwX2NyZWRzLCBH U1NBUElDbGVhbnVwQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQ UE9SVEVEX0lOVChnc3NfZGVsZWdfY3JlZHMsIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMsIFNT SENGR19HTE9CQUwpIFwKKy1TU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3Nfc3RyaWN0X2FjY2Vw dG9yLCBHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrLCBTU0hDRkdfR0xPQkFMKQorK1NTSENPTkZf VU5TVVBQT1JURURfSU5UKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0cmljdEFjY2VwdG9y Q2hlY2ssIFNTSENGR19HTE9CQUwpIFwKKytTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3Nfa2V5 ZXgsIEdTU0FQSUtleUV4Y2hhbmdlLCBTU0hDRkdfR0xPQkFMKSBcCisrU1NIQ09ORl9VTlNVUFBP UlRFRF9JTlQoZ3NzX3N0b3JlX3Jla2V5LCBHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtleSwg U1NIQ0ZHX0dMT0JBTCkgXAorK1NTSENPTkZfVU5TVVBQT1JURURfU1RSSU5HKGdzc19rZXhfYWxn b3JpdGhtcywgR1NTQVBJS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCkKKyAjZW5kaWYgLyog R1NTQVBJICovCisgCisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTIFwKIGRpZmYgLS1naXQg YS9zZXNzaW9uLmMgYi9zZXNzaW9uLmMKLWluZGV4IDkzZGUzNWQ3Yy4uZjE0ZDVmYWI4IDEwMDY0 NAoraW5kZXggZmM5YzlkNmY4Li43Yjc2ZjFmNzEgMTAwNjQ0CiAtLS0gYS9zZXNzaW9uLmMKICsr KyBiL3Nlc3Npb24uYwotQEAgLTI2MzgsMTMgKzI2MzgsMTkgQEAgZG9fY2xlYW51cChzdHJ1Y3Qg c3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKK0BAIC0yNjQyLDEzICsyNjQyLDE5IEBAIGRv X2NsZWFudXAoc3RydWN0IHNzaCAqc3NoLCBBdXRoY3R4dCAqYXV0aGN0eHQpCiAgCiAgI2lmZGVm IEtSQjUKICAJaWYgKG9wdGlvbnMua2VyYmVyb3NfdGlja2V0X2NsZWFudXAgJiYKQEAgLTM2ODQs MjYgKzM2NTcsMTAgQEAgaW5kZXggN2IxNGU3NGE4Li44ZWM0NTE5MjYgMTAwNjQ0CiAgCiAgI2Vu ZGlmIC8qIF9TU0hfR1NTX0ggKi8KIGRpZmYgLS1naXQgYS9zc2guMSBiL3NzaC4xCi1pbmRleCBj MmM4ZjUwZjEuLmI1ZDBhMWQwOSAxMDA2NDQKK2luZGV4IDA4OWJkMzQ4YS4uYTYxYjBhYmZhIDEw MDY0NAogLS0tIGEvc3NoLjEKICsrKyBiL3NzaC4xCi1AQCAtNTQzLDkgKzU0MywxNSBAQCBGb3Ig ZnVsbCBkZXRhaWxzIG9mIHRoZSBvcHRpb25zIGxpc3RlZCBiZWxvdywgYW5kIHRoZWlyIHBvc3Np YmxlIHZhbHVlcywgc2VlCi0gLkl0IEZvcndhcmRYMTFUaW1lb3V0Ci0gLkl0IEZvcndhcmRYMTFU cnVzdGVkCi0gLkl0IEdTU0FQSUF1dGhlbnRpY2F0aW9uCi0rLkl0IEdTU0FQSUtleUV4Y2hhbmdl Ci0rLkl0IEdTU0FQSUNsaWVudElkZW50aXR5Ci0gLkl0IEdTU0FQSURlbGVnYXRlQ3JlZGVudGlh bHMKLSAuSXQgR2F0ZXdheVBvcnRzCi0gLkl0IEdsb2JhbEtub3duSG9zdHNGaWxlCi0rLkl0IEdT U0FQSUtleEFsZ29yaXRobXMKLSsuSXQgR1NTQVBJUmVuZXdhbEZvcmNlc1Jla2V5Ci0rLkl0IEdT U0FQSVNlcnZlcklkZW50aXR5Ci0rLkl0IEdTU0FQSVRydXN0RG5zCi0gLkl0IEhhc2hLbm93bkhv c3RzCi0gLkl0IEhvc3QKLSAuSXQgSG9zdEtleUFsZ29yaXRobXMKLUBAIC02NDAsNiArNjQ2LDgg QEAgZmxhZyksCitAQCAtNTM5LDYgKzUzOSw4IEBAIGZsYWcpLAogIChzdXBwb3J0ZWQgbWVzc2Fn ZSBpbnRlZ3JpdHkgY29kZXMpLAogIC5BciBrZXgKICAoa2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMp LApAQCAtMzcxMywxMCArMzY3MCwxMCBAQCBpbmRleCBjMmM4ZjUwZjEuLmI1ZDBhMWQwOSAxMDA2 NDQKICAoa2V5IHR5cGVzKSwKICAuQXIga2V5LWNhLXNpZ24KIGRpZmYgLS1naXQgYS9zc2guYyBi L3NzaC5jCi1pbmRleCA1MzFmMjhlYjIuLmJjM2JlOGY4ZSAxMDA2NDQKK2luZGV4IGU5Zjk5YzQz My4uYjlhNTljYTQzIDEwMDY0NAogLS0tIGEvc3NoLmMKICsrKyBiL3NzaC5jCi1AQCAtODA1LDYg KzgwNSw5IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCitAQCAtNzkwLDYgKzc5MCw5IEBAIG1h aW4oaW50IGFjLCBjaGFyICoqYXYpCiAgCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImtleCIp ID09IDAgfHwKICAJCQkgICAgc3RyY2FzZWNtcChvcHRhcmcsICJLZXhBbGdvcml0aG1zIikgPT0g MCkKICAJCQkJY3AgPSBrZXhfYWxnX2xpc3QoJ1xuJyk7CkBAIC0zNzI2LDcgKzM2ODMsNyBAQCBp bmRleCA1MzFmMjhlYjIuLmJjM2JlOGY4ZSAxMDA2NDQKICAJCQllbHNlIGlmIChzdHJjbXAob3B0 YXJnLCAia2V5IikgPT0gMCkKICAJCQkJY3AgPSBzc2hrZXlfYWxnX2xpc3QoMCwgMCwgMCwgJ1xu Jyk7CiAgCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImtleS1jZXJ0IikgPT0gMCkKLUBAIC04 MzUsOCArODM3LDggQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK0BAIC04MjAsOCArODIzLDgg QEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKICAJCQl9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcs ICJoZWxwIikgPT0gMCkgewogIAkJCQljcCA9IHhzdHJkdXAoCiAgCQkJCSAgICAiY2lwaGVyXG5j aXBoZXItYXV0aFxuY29tcHJlc3Npb25cbmtleFxuIgpAQCAtMzc1MSwxMCArMzcwOCwxMCBAQCBp bmRleCBkOTMyNGM5NTcuLmNhN2M1ODUzYiAxMDA2NDQKICAjICAgQ2hlY2tIb3N0SVAgbm8KICAj ICAgQWRkcmVzc0ZhbWlseSBhbnkKIGRpZmYgLS1naXQgYS9zc2hfY29uZmlnLjUgYi9zc2hfY29u ZmlnLjUKLWluZGV4IGI0NTliMDQ0OS4uOWU1MTYzNzc0IDEwMDY0NAoraW5kZXggYmRhYTQ5Yzgx Li4wNDc5N2ExZTkgMTAwNjQ0CiAtLS0gYS9zc2hfY29uZmlnLjUKICsrKyBiL3NzaF9jb25maWcu NQotQEAgLTk3NiwxMCArOTc2LDcxIEBAIFRoZSBkZWZhdWx0IGlzCitAQCAtMTAxNCwxMCArMTAx NCw3MSBAQCBUaGUgZGVmYXVsdCBpcwogIFNwZWNpZmllcyB3aGV0aGVyIHVzZXIgYXV0aGVudGlj YXRpb24gYmFzZWQgb24gR1NTQVBJIGlzIGFsbG93ZWQuCiAgVGhlIGRlZmF1bHQgaXMKICAuQ20g bm8gLgpAQCAtMzgyNywxMCArMzc4NCwxMCBAQCBpbmRleCBiNDU5YjA0NDkuLjllNTE2Mzc3NCAx MDA2NDQKICBJbmRpY2F0ZXMgdGhhdAogIC5YciBzc2ggMQogZGlmZiAtLWdpdCBhL3NzaGNvbm5l Y3QyLmMgYi9zc2hjb25uZWN0Mi5jCi1pbmRleCA0NzhhOWE1MmYuLjMxYmJjMGVkOCAxMDA2NDQK K2luZGV4IDBkNDg4ODQwMi4uNTQ1OWNhYTBjIDEwMDY0NAogLS0tIGEvc3NoY29ubmVjdDIuYwog KysrIGIvc3NoY29ubmVjdDIuYwotQEAgLTIyMyw2ICsyMjMsMTEgQEAgc3NoX2tleDIoc3RydWN0 IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3RhZGRyLCB1X3Nob3J0 IHBvcnQsCitAQCAtMjIzLDYgKzIyMywxMSBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNo YXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpob3N0YWRkciwKICAJY2hhciAqYWxs X2tleSwgKmhrYWxncyA9IE5VTEw7CiAgCWludCByLCB1c2Vfa25vd25faG9zdHNfb3JkZXIgPSAw OwogIApAQCAtMzgzOSwxMCArMzc5NiwxMCBAQCBpbmRleCA0NzhhOWE1MmYuLjMxYmJjMGVkOCAx MDA2NDQKICsJY2hhciAqZ3NzX2hvc3QgPSBOVUxMOwogKyNlbmRpZgogKwotIAl4eHhfaG9zdCA9 IGhvc3Q7Ci0gCXh4eF9ob3N0YWRkciA9IGhvc3RhZGRyOwotIAl4eHhfY29ubl9pbmZvID0gY2lu Zm87Ci1AQCAtMjU2LDYgKzI2MSw0MiBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIg Kmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKKyAJeHh4X2hv c3QgPSB4c3RyZHVwKGhvc3QpOworIAl4eHhfaG9zdGFkZHIgPSAqaG9zdGFkZHI7CisgCXh4eF9j b25uX2luZm8gPSBzc2hfY29ubl9pbmZvX2R1cChjaW5mbyk7CitAQCAtMjU3LDYgKzI2Miw0MiBA QCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkcl9z dG9yYWdlICpob3N0YWRkciwKICAJICAgIGNvbXByZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29t cHJlc3Npb24pLAogIAkgICAgaGthbGdzID8gaGthbGdzIDogb3B0aW9ucy5ob3N0a2V5YWxnb3Jp dGhtcyk7CiAgCkBAIC0zODg1LDEwICszODQyLDEwIEBAIGluZGV4IDQ3OGE5YTUyZi4uMzFiYmMw ZWQ4IDEwMDY0NAogIAlmcmVlKGhrYWxncyk7CiAgCiAgCS8qIHN0YXJ0IGtleSBleGNoYW5nZSAq LwotQEAgLTI3MiwxNSArMzEzLDQ1IEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAq aG9zdCwgc3RydWN0IHNvY2thZGRyICpob3N0YWRkciwgdV9zaG9ydCBwb3J0LAotICMgaWZkZWYg T1BFTlNTTF9IQVNfRUNDCitAQCAtMjcxLDE2ICszMTIsNDYgQEAgc3NoX2tleDIoc3RydWN0IHNz aCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFkZHIsCisg CXNzaC0+a2V4LT5rZXhbS0VYX0RIX0dFWF9TSEExXSA9IGtleGdleF9jbGllbnQ7CisgCXNzaC0+ a2V4LT5rZXhbS0VYX0RIX0dFWF9TSEEyNTZdID0ga2V4Z2V4X2NsaWVudDsKICAJc3NoLT5rZXgt PmtleFtLRVhfRUNESF9TSEEyXSA9IGtleF9nZW5fY2xpZW50OwotICMgZW5kaWYKIC0jZW5kaWYK ICsjIGlmZGVmIEdTU0FQSQogKwlpZiAob3B0aW9ucy5nc3Nfa2V5ZXgpIHsKQEAgLTM5MDUsNiAr Mzg2Miw3IEBAIGluZGV4IDQ3OGE5YTUyZi4uMzFiYmMwZWQ4IDEwMDY0NAogIAlzc2gtPmtleC0+ a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OwogIAlzc2gtPmtleC0+a2V4 W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX2NsaWVudDsKICAJc3No LT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVu dDsKKyAJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4RUNESF9TSEEyNTZdID0ga2V4X2dl bl9jbGllbnQ7CiAgCXNzaC0+a2V4LT52ZXJpZnlfaG9zdF9rZXk9JnZlcmlmeV9ob3N0X2tleV9j YWxsYmFjazsKICAKICsjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NM KQpAQCAtNDA2MCwxMCArNDAxOCwxMCBAQCBpbmRleCA0NzhhOWE1MmYuLjMxYmJjMGVkOCAxMDA2 NDQKICAKICBzdGF0aWMgaW50CiBkaWZmIC0tZ2l0IGEvc3NoZC1hdXRoLmMgYi9zc2hkLWF1dGgu YwotaW5kZXggNzNhY2IwZGJlLi44ODVjZDgyODEgMTAwNjQ0CitpbmRleCAxNDEwOTE1MWMuLjA3 OTA2M2Y0NyAxMDA2NDQKIC0tLSBhL3NzaGQtYXV0aC5jCiArKysgYi9zc2hkLWF1dGguYwotQEAg LTY5MSw3ICs2OTEsNyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorQEAgLTY2NSw3ICs2NjUs NyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQogIAkJCWJyZWFrOwogIAkJfQogIAl9CkBAIC00 MDcyLDcgKzQwMzAsNyBAQCBpbmRleCA3M2FjYjBkYmUuLjg4NWNkODI4MSAxMDA2NDQKICAJCWZh dGFsKCJpbnRlcm5hbCBlcnJvcjogcmVjZWl2ZWQgbm8gaG9zdGtleXMiKTsKICAKICAJLyogRW5z dXJlIHRoYXQgdW1hc2sgZGlzYWxsb3dzIGF0IGxlYXN0IGdyb3VwIGFuZCB3b3JsZCB3cml0ZSAq LwotQEAgLTgxMSw2ICs4MTEsNDggQEAgZG9fc3NoMl9rZXgoc3RydWN0IHNzaCAqc3NoKQorQEAg LTc4NCw2ICs3ODQsNDggQEAgZG9fc3NoMl9rZXgoc3RydWN0IHNzaCAqc3NoKQogIAogIAlmcmVl KGhrYWxncyk7CiAgCkBAIC00MTIxLDEwICs0MDc5LDEyIEBAIGluZGV4IDczYWNiMGRiZS4uODg1 Y2Q4MjgxIDEwMDY0NAogIAlpZiAoKHIgPSBrZXhfZXhjaGFuZ2VfaWRlbnRpZmljYXRpb24oc3No LCAtMSwKICAJICAgIG9wdGlvbnMudmVyc2lvbl9hZGRlbmR1bSkpICE9IDApCiAgCQlzc2hwa3Rf ZmF0YWwoc3NoLCByLCAiYmFubmVyIGV4Y2hhbmdlIik7Ci1AQCAtODM2LDYgKzg3OCwxNyBAQCBk b19zc2gyX2tleChzdHJ1Y3Qgc3NoICpzc2gpCi0gIyBpZmRlZiBPUEVOU1NMX0hBU19FQ0MKK0BA IC04MDcsOCArODQ5LDE4IEBAIGRvX3NzaDJfa2V4KHN0cnVjdCBzc2ggKnNzaCkKKyAJa2V4LT5r ZXhbS0VYX0RIX0dFWF9TSEExXSA9IGtleGdleF9zZXJ2ZXI7CisgCWtleC0+a2V4W0tFWF9ESF9H RVhfU0hBMjU2XSA9IGtleGdleF9zZXJ2ZXI7CiAgCWtleC0+a2V4W0tFWF9FQ0RIX1NIQTJdID0g a2V4X2dlbl9zZXJ2ZXI7Ci0gIyBlbmRpZiAvKiBPUEVOU1NMX0hBU19FQ0MgKi8KKy0Ja2V4LT5r ZXhbS0VYX0tFTV9NTEtFTTc2OEVDREhfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworLSNlbmRp ZgogKyMgaWZkZWYgR1NTQVBJCiArCWlmIChvcHRpb25zLmdzc19rZXlleCkgewogKwkJa2V4LT5r ZXhbS0VYX0dTU19HUlAxX1NIQTFdID0ga2V4Z3NzX3NlcnZlcjsKQEAgLTQxMzYsMTQgKzQwOTYs MTUgQEAgaW5kZXggNzNhY2IwZGJlLi44ODVjZDgyODEgMTAwNjQ0CiArCQlrZXgtPmtleFtLRVhf R1NTX0MyNTUxOV9TSEEyNTZdID0ga2V4Z3NzX3NlcnZlcjsKICsJfQogKyMgZW5kaWYKLSAjZW5k aWYgLyogV0lUSF9PUEVOU1NMICovCisrI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwogIAlrZXgt PmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKICAJa2V4LT5rZXhbS0VY X0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fc2VydmVyOworIAlrZXgtPmtl eFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKIGRpZmYg LS1naXQgYS9zc2hkLXNlc3Npb24uYyBiL3NzaGQtc2Vzc2lvbi5jCi1pbmRleCA2OTc2ZDY4NzIu LmY4NDdmYzBhOSAxMDA2NDQKK2luZGV4IDZlOWIyOGRlYy4uY2Y2NzA5ZjQ2IDEwMDY0NAogLS0t IGEvc3NoZC1zZXNzaW9uLmMKICsrKyBiL3NzaGQtc2Vzc2lvbi5jCi1AQCAtNTY0LDggKzU2NCw4 IEBAIG5vdGlmeV9ob3N0a2V5cyhzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtNTY1LDggKzU2NSw4IEBA IG5vdGlmeV9ob3N0a2V5cyhzdHJ1Y3Qgc3NoICpzc2gpCiAgCX0KICAJZGVidWczX2YoInNlbnQg JXUgaG9zdGtleXMiLCBua2V5cyk7CiAgCWlmIChua2V5cyA9PSAwKQpAQCAtNDE1NCw3ICs0MTE1 LDcgQEAgaW5kZXggNjk3NmQ2ODcyLi5mODQ3ZmMwYTkgMTAwNjQ0CiAgCQlzc2hwa3RfZmF0YWwo c3NoLCByLCAiJXM6IHNlbmQiLCBfX2Z1bmNfXyk7CiAgCXNzaGJ1Zl9mcmVlKGJ1Zik7CiAgfQot QEAgLTExMDcsOCArMTEwNyw5IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCitAQCAtMTEwOCw4 ICsxMTA4LDkgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKICAJCQlicmVhazsKICAJCX0KICAJ fQpAQCAtNDE2NywxMCArNDEyOCwxMCBAQCBpbmRleCA2OTc2ZDY4NzIuLmY4NDdmYzBhOSAxMDA2 NDQKICAJLyogRW5zdXJlIHRoYXQgdW1hc2sgZGlzYWxsb3dzIGF0IGxlYXN0IGdyb3VwIGFuZCB3 b3JsZCB3cml0ZSAqLwogIAluZXdfdW1hc2sgPSB1bWFzaygwMDc3KSB8IDAwMjI7CiBkaWZmIC0t Z2l0IGEvc3NoZC5jIGIvc3NoZC5jCi1pbmRleCA3NGQyNWZjNzMuLjU1MjQzNTgxNyAxMDA2NDQK K2luZGV4IDdkMTQ2NmQ5Ny4uZjY2ZTFmODZmIDEwMDY0NAogLS0tIGEvc3NoZC5jCiArKysgYi9z c2hkLmMKLUBAIC0xNjY3LDcgKzE2NjcsOCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorQEAg LTE2NjksNyArMTY2OSw4IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAgCQlmcmVlKGZwKTsK ICAJfQogIAlhY2N1bXVsYXRlX2hvc3RfdGltaW5nX3NlY3JldChjZmcsIE5VTEwpOwpAQCAtNDE4 MSwxMCArNDE0MiwxMCBAQCBpbmRleCA3NGQyNWZjNzMuLjU1MjQzNTgxNyAxMDA2NDQKICAJCWV4 aXQoMSk7CiAgCX0KIGRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZyBiL3NzaGRfY29uZmlnCi1pbmRl eCA0OGFmNjMyMWIuLjhkYjlmMGZiMSAxMDA2NDQKK2luZGV4IGY2MjZkNTgwMS4uNDA0YWExYmJi IDEwMDY0NAogLS0tIGEvc3NoZF9jb25maWcKICsrKyBiL3NzaGRfY29uZmlnCi1AQCAtNzksNiAr NzksOCBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRob3JpemVkX2tleXMKK0BAIC04MCw2 ICs4MCw4IEBAIEF1dGhvcml6ZWRLZXlzRmlsZQkuc3NoL2F1dGhvcml6ZWRfa2V5cwogICMgR1NT QVBJIG9wdGlvbnMKICAjR1NTQVBJQXV0aGVudGljYXRpb24gbm8KICAjR1NTQVBJQ2xlYW51cENy ZWRlbnRpYWxzIHllcwpAQCAtNDE5NCwxMCArNDE1NSwxMCBAQCBpbmRleCA0OGFmNjMyMWIuLjhk YjlmMGZiMSAxMDA2NDQKICAjIFNldCB0aGlzIHRvICd5ZXMnIHRvIGVuYWJsZSBQQU0gYXV0aGVu dGljYXRpb24sIGFjY291bnQgcHJvY2Vzc2luZywKICAjIGFuZCBzZXNzaW9uIHByb2Nlc3Npbmcu IElmIHRoaXMgaXMgZW5hYmxlZCwgUEFNIGF1dGhlbnRpY2F0aW9uIHdpbGwKIGRpZmYgLS1naXQg YS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggY2E0MjVhOGRhLi41OTI4YjZj ZDIgMTAwNjQ0CitpbmRleCBlODVjY2E2ZWIuLjYyNWU2ZmRlYyAxMDA2NDQKIC0tLSBhL3NzaGRf Y29uZmlnLjUKICsrKyBiL3NzaGRfY29uZmlnLjUKLUBAIC03NTIsOSArNzUyLDE5IEBAIG9uIGxv Z291dC4KK0BAIC03NjAsOSArNzYwLDE5IEBAIG9uIGxvZ291dC4KICBUaGUgZGVmYXVsdCBpcwog IC5DbSB5ZXMgLgogIC5JdCBDbSBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCkBAIC00MjE5LDEw ICs0MTgwLDEwIEBAIGluZGV4IGNhNDI1YThkYS4uNTkyOGI2Y2QyIDEwMDY0NAogIC5JdCBDbSBH U1NBUElTdHJpY3RBY2NlcHRvckNoZWNrCiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGJlIHN0cmlj dCBhYm91dCB0aGUgaWRlbnRpdHkgb2YgdGhlIEdTU0FQSSBhY2NlcHRvcgogIGEgY2xpZW50IGF1 dGhlbnRpY2F0ZXMgYWdhaW5zdC4KLUBAIC03NjksNiArNzc5LDM1IEBAIG1hY2hpbmUncyBkZWZh dWx0IHN0b3JlLgotIFRoaXMgZmFjaWxpdHkgaXMgcHJvdmlkZWQgdG8gYXNzaXN0IHdpdGggb3Bl cmF0aW9uIG9uIG11bHRpIGhvbWVkIG1hY2hpbmVzLgorQEAgLTc3OCw2ICs3ODgsMzUgQEAgVGhp cyBmYWNpbGl0eSBpcyBwcm92aWRlZCB0byBhc3Npc3Qgd2l0aCBvcGVyYXRpb24gb24gbXVsdGkg aG9tZWQgbWFjaGluZXMuCiAgVGhlIGRlZmF1bHQgaXMKICAuQ20geWVzIC4KKyBUaGlzIG9wdGlv biBtYXkgbm90IGJlIGVmZmVjdGl2ZSBpbiBXaW5kb3dzIEFjdGl2ZSBEaXJlY3RvcnkgZW52aXJv bm1lbnRzLgogKy5JdCBDbSBHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtleQogK0NvbnRyb2xz IHdoZXRoZXIgdGhlIHVzZXIncyBHU1NBUEkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHVwZGF0ZWQg Zm9sbG93aW5nIGEKICtzdWNjZXNzZnVsIGNvbm5lY3Rpb24gcmVrZXlpbmcuIFRoaXMgb3B0aW9u IGNhbiBiZSB1c2VkIHRvIGFjY2VwdGVkIHJlbmV3ZWQKQEAgLTQyNTYsNyArNDIxNyw3IEBAIGlu ZGV4IGNhNDI1YThkYS4uNTkyOGI2Y2QyIDEwMDY0NAogIFNwZWNpZmllcyB0aGUgc2lnbmF0dXJl IGFsZ29yaXRobXMgdGhhdCB3aWxsIGJlIGFjY2VwdGVkIGZvciBob3N0YmFzZWQKICBhdXRoZW50 aWNhdGlvbiBhcyBhIGxpc3Qgb2YgY29tbWEtc2VwYXJhdGVkIHBhdHRlcm5zLgogZGlmZiAtLWdp dCBhL3NzaGtleS5jIGIvc3Noa2V5LmMKLWluZGV4IDU5ZDE0NTMxYy4uY2NjMzVkYmY1IDEwMDY0 NAoraW5kZXggYTU5MDUyOWEwLi43ZDE0MDFhOGYgMTAwNjQ0CiAtLS0gYS9zc2hrZXkuYwogKysr IGIvc3Noa2V5LmMKIEBAIC0xMTUsNiArMTE1LDc1IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3No a2V5X2ltcGwgc3Noa2V5X3JzYV9zaGE1MTJfaW1wbDsKQEAgLTQzNTMsMTcgKzQzMTQsMTcgQEAg aW5kZXggNTlkMTQ1MzFjLi5jY2MzNWRiZjUgMTAwNjQ0CiAgCQlpZiAoIWluY2x1ZGVfc2lnb25s eSAmJiBpbXBsLT5zaWdvbmx5KQogIAkJCWNvbnRpbnVlOwogZGlmZiAtLWdpdCBhL3NzaGtleS5o IGIvc3Noa2V5LmgKLWluZGV4IGE5Y2RmY2QxOS4uOWVjZWQ1ZDhhIDEwMDY0NAoraW5kZXggZTRm ODRmMTZmLi4zZTczOGY0MmMgMTAwNjQ0CiAtLS0gYS9zc2hrZXkuaAogKysrIGIvc3Noa2V5LmgK LUBAIC02Nyw2ICs2Nyw3IEBAIGVudW0gc3Noa2V5X3R5cGVzIHsKLSAJS0VZX0VDRFNBX1NLX0NF UlQsCi0gCUtFWV9FRDI1NTE5X1NLLAorQEAgLTYzLDYgKzYzLDcgQEAgZW51bSBzc2hrZXlfdHlw ZXMgewogIAlLRVlfRUQyNTUxOV9TS19DRVJULAorIAlLRVlfTUxEU0E0NF9FRDI1NTE5LAorIAlL RVlfTUxEU0E0NF9FRDI1NTE5X0NFUlQsCiArCUtFWV9OVUxMLAogIAlLRVlfVU5TUEVDCiAgfTsK ICAKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMTQtb3BlbnNzaC02LjZw MS1mb3JjZV9rcmIucGF0Y2ggYi8wMDE0LW9wZW5zc2gtNi42cDEtZm9yY2Vfa3JiLnBhdGNoCmlu ZGV4IDM2YjlmNmMuLmZkZDBjODUgMTAwNjQ0Ci0tLSBhLzAwMTQtb3BlbnNzaC02LjZwMS1mb3Jj ZV9rcmIucGF0Y2gKKysrIGIvMDAxNC1vcGVuc3NoLTYuNnAxLWZvcmNlX2tyYi5wYXRjaApAQCAt MSw3ICsxLDcgQEAKLUZyb20gYTAzMzk0NTNiOWIwYWM1MTU3NTJkMGM2MGZmZDliY2I0NjU2M2U3 MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNWQxZGViZGFlZTdiNmRjNTFjNWYxMDUz MGI0Njk4YTdhMmYxYmI4MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBC ZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6 NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAxNC81NF0gb3BlbnNzaC02LjZwMS1mb3JjZV9r cmIKK1N1YmplY3Q6IFtQQVRDSCAxNC81M10gb3BlbnNzaC02LjZwMS1mb3JjZV9rcmIKIAogI2h0 dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9rZXJiZXJvc0BtaXQuZWR1L21zZzE3NTkxLmh0bWwK IC0tLQpAQCAtMjE4LDcgKzIxOCw3IEBAIGluZGV4IGJlNDAxZmUwZS4uYzI2MTc0OTI4IDEwMDY0 NAogIC8qIFRoaXMgd3JpdGVzIG91dCBhbnkgZm9yd2FyZGVkIGNyZWRlbnRpYWxzIGZyb20gdGhl IHN0cnVjdHVyZSBwb3B1bGF0ZWQKICAgKiBkdXJpbmcgdXNlcmF1dGguIENhbGxlZCBhZnRlciB3 ZSBoYXZlIHNldHVpZCB0byB0aGUgdXNlciAqLwogZGlmZiAtLWdpdCBhL3Nlc3Npb24uYyBiL3Nl c3Npb24uYwotaW5kZXggZjE0ZDVmYWI4Li42MTBhMmNjNmYgMTAwNjQ0CitpbmRleCA3Yjc2ZjFm NzEuLmI0ZGI2NGVhNCAxMDA2NDQKIC0tLSBhL3Nlc3Npb24uYwogKysrIGIvc2Vzc2lvbi5jCiBA QCAtNjQzLDYgKzY0MywyOSBAQCBkb19leGVjKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywg Y29uc3QgY2hhciAqY29tbWFuZCkKQEAgLTI2NywxMCArMjY3LDEwIEBAIGluZGV4IDhlYzQ1MTky Ni4uZGIzNGQ3N2Y0IDEwMDY0NAogIAogIC8qIGRyYWZ0LWlldGYtc2Vjc2gtZ3Nza2V5ZXgtMDYg Ki8KIGRpZmYgLS1naXQgYS9zc2hkLjggYi9zc2hkLjgKLWluZGV4IDAyMjZhODMwMy4uZTJkOGZm MDAzIDEwMDY0NAoraW5kZXggMjRlNTYzOWEzLi44ZWYzNThjZDUgMTAwNjQ0CiAtLS0gYS9zc2hk LjgKICsrKyBiL3NzaGQuOAotQEAgLTI4Niw2ICsyODYsNyBAQCBGaW5hbGx5LCB0aGUgc2VydmVy IGFuZCB0aGUgY2xpZW50IGVudGVyIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZy4KK0BAIC0yODcs NiArMjg3LDcgQEAgRmluYWxseSwgdGhlIHNlcnZlciBhbmQgdGhlIGNsaWVudCBlbnRlciBhbiBh dXRoZW50aWNhdGlvbiBkaWFsb2cuCiAgVGhlIGNsaWVudCB0cmllcyB0byBhdXRoZW50aWNhdGUg aXRzZWxmIHVzaW5nCiAgaG9zdC1iYXNlZCBhdXRoZW50aWNhdGlvbiwKICBwdWJsaWMga2V5IGF1 dGhlbnRpY2F0aW9uLApAQCAtMjc4LDcgKzI3OCw3IEBAIGluZGV4IDAyMjZhODMwMy4uZTJkOGZm MDAzIDEwMDY0NAogIGNoYWxsZW5nZS1yZXNwb25zZSBhdXRoZW50aWNhdGlvbiwKICBvciBwYXNz d29yZCBhdXRoZW50aWNhdGlvbi4KICAuUHAKLUBAIC04NzQsNiArODc1LDEyIEBAIFRoaXMgZmls ZSBpcyB1c2VkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzCitAQCAtODc4LDYgKzg3OSwxMiBA QCBUaGlzIGZpbGUgaXMgdXNlZCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcwogIGJ1dCBhbGxv d3MgaG9zdC1iYXNlZCBhdXRoZW50aWNhdGlvbiB3aXRob3V0IHBlcm1pdHRpbmcgbG9naW4gd2l0 aAogIHJsb2dpbi9yc2guCiAgLlBwCkBAIC0yOTIsNSArMjkyLDUgQEAgaW5kZXggMDIyNmE4MzAz Li5lMmQ4ZmYwMDMgMTAwNjQ0CiAgVGhpcyBkaXJlY3RvcnkgaXMgdGhlIGRlZmF1bHQgbG9jYXRp b24gZm9yIGFsbCB1c2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KICBhbmQgYXV0aGVudGljYXRp b24gaW5mb3JtYXRpb24uCiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDE1 LW9wZW5zc2gtNy43cDEtZ3NzYXBpLW5ldy11bmlxdWUucGF0Y2ggYi8wMDE1LW9wZW5zc2gtNy43 cDEtZ3NzYXBpLW5ldy11bmlxdWUucGF0Y2gKaW5kZXggZjY5N2I3Yi4uNTVlYmU5MyAxMDA2NDQK LS0tIGEvMDAxNS1vcGVuc3NoLTcuN3AxLWdzc2FwaS1uZXctdW5pcXVlLnBhdGNoCisrKyBiLzAw MTUtb3BlbnNzaC03LjdwMS1nc3NhcGktbmV3LXVuaXF1ZS5wYXRjaApAQCAtMSwyNSArMSwyMyBA QAotRnJvbSBlYTMwZTE1OGRjZWNlMzk1MjViZWIwYmMxNmViNGEyNmQ4ZWI4MDFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQorRnJvbSA5NDUyODc1NzYwYjk5ZmI1Mzg0NjNmMjkxZmNlZGVlNzVk ZWU0YTM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkg PGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIw MAotU3ViamVjdDogW1BBVENIIDE1LzU0XSBvcGVuc3NoLTcuN3AxLWdzc2FwaS1uZXctdW5pcXVl CitTdWJqZWN0OiBbUEFUQ0ggMTUvNTNdIG9wZW5zc2gtNy43cDEtZ3NzYXBpLW5ldy11bmlxdWUK IAotIyBJbXByb3ZlIGNjYWNoZSBoYW5kbGluZyBpbiBvcGVuc3NoICgjOTkxMTg2LCAjMTE5OTM2 MywgIzE1NjY0OTQpCi0jIGh0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dp P2lkPTI3NzUKIC0tLQotIGF1dGgta3JiNS5jICAgICB8IDI2MiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KKyBhdXRoLWtyYjUuYyAgICAgfCAyNjQgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiAgYXV0aC5oICAg ICAgICAgIHwgICAzICstCiAgZ3NzLXNlcnYta3JiNS5jIHwgIDQyICsrKy0tLS0tCiAgZ3NzLXNl cnYuYyAgICAgIHwgIDEyICstLQotIHNlcnZjb25mLmMgICAgICB8ICAxMiArKy0KKyBzZXJ2Y29u Zi5jICAgICAgfCAgIDUgKwogIHNlcnZjb25mLmggICAgICB8ICAgMiArCiAgc2Vzc2lvbi5jICAg ICAgIHwgICA1ICstCiAgc3NoLWdzcy5oICAgICAgIHwgICA0ICstCiAgc3NoZC1zZXNzaW9uLmMg IHwgICAyICstCiAgc3NoZF9jb25maWcuNSAgIHwgICA4ICsrCi0gMTAgZmlsZXMgY2hhbmdlZCwg MjgwIGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQorIDEwIGZpbGVzIGNoYW5nZWQsIDI3 NiBpbnNlcnRpb25zKCspLCA3MSBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2F1dGgta3Ji NS5jIGIvYXV0aC1rcmI1LmMKLWluZGV4IDNjNmRjMDYyMi4uMGRlMWFhZjhkIDEwMDY0NAoraW5k ZXggM2M2ZGMwNjIyLi44NjMxMTA5MTAgMTAwNjQ0CiAtLS0gYS9hdXRoLWtyYjUuYwogKysrIGIv YXV0aC1rcmI1LmMKIEBAIC01MSw2ICs1MSw3IEBACkBAIC0xMjcsNyArMTI1LDcgQEAgaW5kZXgg M2M2ZGMwNjIyLi4wZGUxYWFmOGQgMTAwNjQ0CiAgCWlmIChhdXRoY3R4dC0+a3JiNV91c2VyKSB7 CiAgCQlrcmI1X2ZyZWVfcHJpbmNpcGFsKGF1dGhjdHh0LT5rcmI1X2N0eCwgYXV0aGN0eHQtPmty YjVfdXNlcik7CiAgCQlhdXRoY3R4dC0+a3JiNV91c2VyID0gTlVMTDsKLUBAIC0yMzgsMzYgKzI4 MSwxODkgQEAga3JiNV9jbGVhbnVwX3Byb2MoQXV0aGN0eHQgKmF1dGhjdHh0KQorQEAgLTIzOCwz NiArMjgxLDE5MSBAQCBrcmI1X2NsZWFudXBfcHJvYyhBdXRoY3R4dCAqYXV0aGN0eHQpCiAgCX0K ICB9CiAgCkBAIC0yODEsNiArMjc5LDcgQEAgaW5kZXggM2M2ZGMwNjIyLi4wZGUxYWFmOGQgMTAw NjQ0CiArCQl1bWFzayhvbGRfdW1hc2spOwogKwkJaWYgKHRtcGZkID09IC0xKSB7CiArCQkJbG9n aXQoIm1rc3RlbXAoKTogJS4xMDBzIiwgc3RyZXJyb3Iob2Vycm5vKSk7CisrCQkJZnJlZShjY25h bWUpOwogKwkJCXJldHVybiBvZXJybm87CiArCQl9CiArCkBAIC0yODgsNiArMjg3LDcgQEAgaW5k ZXggM2M2ZGMwNjIyLi4wZGUxYWFmOGQgMTAwNjQ0CiArCQkJb2Vycm5vID0gZXJybm87CiArCQkJ bG9naXQoImZjaG1vZCgpOiAlLjEwMHMiLCBzdHJlcnJvcihvZXJybm8pKTsKICsJCQljbG9zZSh0 bXBmZCk7CisrCQkJZnJlZShjY25hbWUpOwogKwkJCXJldHVybiBvZXJybm87CiArCQl9CiArCQkv KiBtYWtlIHN1cmUgdGhlIEtSQjVDQ05BTUUgaXMgc2V0IGZvciBub24tc3RhbmRhcmQgbG9jYXRp b24gKi8KQEAgLTM0MSw3ICszNDEsNyBAQCBpbmRleCAzYzZkYzA2MjIuLjBkZTFhYWY4ZCAxMDA2 NDQKICAjZW5kaWYgLyogIUhFSU1EQUwgKi8KICAjZW5kaWYgLyogS1JCNSAqLwogZGlmZiAtLWdp dCBhL2F1dGguaCBiL2F1dGguaAotaW5kZXggMzJlZTNjYmY0Li45ZTU1ZmY4YWQgMTAwNjQ0Citp bmRleCBlZmU4MTkzMjMuLjJhMTllMmIzNCAxMDA2NDQKIC0tLSBhL2F1dGguaAogKysrIGIvYXV0 aC5oCiBAQCAtODUsNiArODUsNyBAQCBzdHJ1Y3QgQXV0aGN0eHQgewpAQCAtMzUyLDcgKzM1Miw3 IEBAIGluZGV4IDMyZWUzY2JmNC4uOWU1NWZmOGFkIDEwMDY0NAogICNlbmRpZgogIAlzdHJ1Y3Qg c3NoYnVmCSpsb2dpbm1zZzsKICAKLUBAIC0yNDMsNyArMjQ0LDcgQEAgRklMRQkqYXV0aF9vcGVu cHJpbmNpcGFscyhjb25zdCBjaGFyICosIHN0cnVjdCBwYXNzd2QgKiwgaW50KTsKK0BAIC0yNDQs NyArMjQ1LDcgQEAgRklMRQkqYXV0aF9vcGVucHJpbmNpcGFscyhjb25zdCBjaGFyICosIHN0cnVj dCBwYXNzd2QgKiwgaW50KTsKICBpbnQJIHN5c19hdXRoX3Bhc3N3ZChzdHJ1Y3Qgc3NoICosIGNv bnN0IGNoYXIgKik7CiAgCiAgI2lmIGRlZmluZWQoS1JCNSkgJiYgIWRlZmluZWQoSEVJTURBTCkK QEAgLTUxNiw4MyArNTE2LDQ5IEBAIGluZGV4IDhiNGZhOWNmZS4uNmViN2QyMTYzIDEwMDY0NAog IAogIAlvayA9IG1tX3NzaF9nc3NhcGlfdXBkYXRlX2NyZWRzKCZnc3NhcGlfY2xpZW50LnN0b3Jl KTsKIGRpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5kZXggZGUzZmE5NDgx Li4xMGI0M2Q1NmEgMTAwNjQ0CitpbmRleCBmMjhkMTkxOTQuLmFlMThkNTZmZCAxMDA2NDQKIC0t LSBhL3NlcnZjb25mLmMKICsrKyBiL3NlcnZjb25mLmMKLUBAIC0xMzEsNiArMTMxLDcgQEAgaW5p dGlhbGl6ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAlvcHRpb25z LT5rZXJiZXJvc19vcl9sb2NhbF9wYXNzd2QgPSAtMTsKLSAJb3B0aW9ucy0+a2VyYmVyb3NfdGlj a2V0X2NsZWFudXAgPSAtMTsKLSAJb3B0aW9ucy0+a2VyYmVyb3NfZ2V0X2Fmc190b2tlbiA9IC0x OwotKwlvcHRpb25zLT5rZXJiZXJvc191bmlxdWVfY2NhY2hlID0gLTE7Ci0gCW9wdGlvbnMtPmdz c19hdXRoZW50aWNhdGlvbj0tMTsKLSAJb3B0aW9ucy0+Z3NzX2tleWV4ID0gLTE7Ci0gCW9wdGlv bnMtPmdzc19jbGVhbnVwX2NyZWRzID0gLTE7Ci1AQCAtMzc0LDYgKzM3NSw4IEBAIGZpbGxfZGVm YXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAkJb3B0aW9ucy0+ a2VyYmVyb3NfdGlja2V0X2NsZWFudXAgPSAxOwotIAlpZiAob3B0aW9ucy0+a2VyYmVyb3NfZ2V0 X2Fmc190b2tlbiA9PSAtMSkKLSAJCW9wdGlvbnMtPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4gPSAw OwotKwlpZiAob3B0aW9ucy0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSA9PSAtMSkKLSsJCW9wdGlv bnMtPmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUgPSAwOwotIAlpZiAob3B0aW9ucy0+Z3NzX2F1dGhl bnRpY2F0aW9uID09IC0xKQotIAkJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID0gMDsKLSAJ aWYgKG9wdGlvbnMtPmdzc19rZXlleCA9PSAtMSkKLUBAIC01NjEsNyArNTY0LDcgQEAgdHlwZWRl ZiBlbnVtIHsKLSAJc1BvcnQsIHNIb3N0S2V5RmlsZSwgc0xvZ2luR3JhY2VUaW1lLAotIAlzUGVy bWl0Um9vdExvZ2luLCBzTG9nRmFjaWxpdHksIHNMb2dMZXZlbCwgc0xvZ1ZlcmJvc2UsCi0gCXNL ZXJiZXJvc0F1dGhlbnRpY2F0aW9uLCBzS2VyYmVyb3NPckxvY2FsUGFzc3dkLCBzS2VyYmVyb3NU aWNrZXRDbGVhbnVwLAotLQlzS2VyYmVyb3NHZXRBRlNUb2tlbiwgc1Bhc3N3b3JkQXV0aGVudGlj YXRpb24sCi0rCXNLZXJiZXJvc0dldEFGU1Rva2VuLCBzS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIHNQ YXNzd29yZEF1dGhlbnRpY2F0aW9uLAotIAlzS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiwg c0xpc3RlbkFkZHJlc3MsIHNBZGRyZXNzRmFtaWx5LAotIAlzUHJpbnRNb3RkLCBzUHJpbnRMYXN0 TG9nLCBzSWdub3JlUmhvc3RzLAotIAlzWDExRm9yd2FyZGluZywgc1gxMURpc3BsYXlPZmZzZXQs IHNYMTFVc2VMb2NhbGhvc3QsCi1AQCAtNjUyLDExICs2NTUsMTMgQEAgc3RhdGljIHN0cnVjdCB7 Ci0gI2Vsc2UKLSAJeyAia2VyYmVyb3NnZXRhZnN0b2tlbiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZH X0dMT0JBTCB9LAotICNlbmRpZgotKwl7ICJrZXJiZXJvc3VuaXF1ZWNjYWNoZSIsIHNLZXJiZXJv c1VuaXF1ZUNDYWNoZSwgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbHNlCi0gCXsgImtlcmJlcm9zYXV0 aGVudGljYXRpb24iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKLSAJeyAia2VyYmVyb3Nv cmxvY2FscGFzc3dkIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImtlcmJl cm9zdGlja2V0Y2xlYW51cCIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJr ZXJiZXJvc2dldGFmc3Rva2VuIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsg ImtlcmJlcm9zdW5pcXVlY2NhY2hlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0g I2VuZGlmCi0gCXsgImtlcmJlcm9zdGd0cGFzc2luZyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dM T0JBTCB9LAotIAl7ICJhZnN0b2tlbnBhc3NpbmciLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9C QUwgfSwKLUBAIC0xNjY5LDYgKzE2NzQsMTAgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVf ZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwKLSAJCWludHB0ciA9ICZv cHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuOwotIAkJZ290byBwYXJzZV9mbGFnOworQEAg LTE0MzUsNiArMTQzNSwxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2 ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAorICNlbmRpZiAvKiBVU0VfQUZTICovCisg I2VuZGlmIC8qIEtSQjUgKi8KICAKICsJY2FzZSBzS2VyYmVyb3NVbmlxdWVDQ2FjaGU6CiArCQlp bnRwdHIgPSAmb3B0aW9ucy0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZTsKICsJCWdvdG8gcGFyc2Vf ZmxhZzsKICsKLSAJY2FzZSBzR3NzQXV0aGVudGljYXRpb246CisgI2lmZGVmIEdTU0FQSQorIAlj YXNlIHNHU1NBUElBdXRoZW50aWNhdGlvbjoKICAJCWludHB0ciA9ICZvcHRpb25zLT5nc3NfYXV0 aGVudGljYXRpb247Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci1AQCAtMzMyOSw2ICszMzM4LDcgQEAg ZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykKK0BAIC00MjM3LDYgKzQyNDEsNyBAQCBkdW1w X2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQogICMgaWZkZWYgVVNFX0FGUwogIAlkdW1wX2NmZ19m bXRpbnQoc0tlcmJlcm9zR2V0QUZTVG9rZW4sIG8tPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4pOwog ICMgZW5kaWYKICsJZHVtcF9jZmdfZm10aW50KHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgby0+a2Vy YmVyb3NfdW5pcXVlX2NjYWNoZSk7CiAgI2VuZGlmCiAgI2lmZGVmIEdTU0FQSQotIAlkdW1wX2Nm Z19mbXRpbnQoc0dzc0F1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRpb24pOworIAlk dW1wX2NmZ19mbXRpbnQoc0dTU0FQSUF1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRp b24pOwogZGlmZiAtLWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCi1pbmRleCA3NjY0MWQ1 ODAuLmJmNTg5OTExYSAxMDA2NDQKK2luZGV4IGM2ZGE3OWY1My4uNWY1NjcyMDgyIDEwMDY0NAog LS0tIGEvc2VydmNvbmYuaAogKysrIGIvc2VydmNvbmYuaAotQEAgLTE1MCw2ICsxNTAsOCBAQCB0 eXBlZGVmIHN0cnVjdCB7Ci0gCQkJCQkJICogZmlsZSBvbiBsb2dvdXQuICovCi0gCWludCAgICAg a2VyYmVyb3NfZ2V0X2Fmc190b2tlbjsJCS8qIElmIHRydWUsIHRyeSB0byBnZXQgQUZTIHRva2Vu IGlmCi0gCQkJCQkJICogYXV0aGVudGljYXRlZCB3aXRoIEtlcmJlcm9zLiAqLwotKwlpbnQgICAg IGtlcmJlcm9zX3VuaXF1ZV9jY2FjaGU7CQkvKiBJZiB0cnVlLCB0aGUgYWNxdWlyZWQgdGlja2V0 IHdpbGwKLSsJCQkJCQkgKiBiZSBzdG9yZWQgaW4gcGVyLXNlc3Npb24gY2NhY2hlICovCi0gCWlu dCAgICAgZ3NzX2F1dGhlbnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1dGhl bnRpY2F0aW9uICovCi0gCWludCAgICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0IEdT U0FQSSBrZXkgZXhjaGFuZ2UgKi8KLSAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyogSWYg dHJ1ZSwgZGVzdHJveSBjcmVkIGNhY2hlIG9uIGxvZ291dCAqLworQEAgLTMwMywxMiArMzAzLDE0 IEBAIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGtlcmJlcm9zX2dldF9hZnNfdG9rZW4sIEtlcmJl cm9zR2V0QUZTVG9rZW4sIFNTSENGR19HTE9CCisgU1NIQ09ORl9JTlRGTEFHKGtlcmJlcm9zX2F1 dGhlbnRpY2F0aW9uLCBLZXJiZXJvc0F1dGhlbnRpY2F0aW9uLCBTU0hDRkdfQUxMLCAwLCBTU0hD RkdfQ09QWV9NQVRDSCkgXAorIFNTSENPTkZfSU5URkxBRyhrZXJiZXJvc19vcl9sb2NhbF9wYXNz d2QsIEtlcmJlcm9zT3JMb2NhbFBhc3N3ZCwgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NIQ0ZHX0NPUFlf Tk9ORSkgXAorIFNTSENPTkZfSU5URkxBRyhrZXJiZXJvc190aWNrZXRfY2xlYW51cCwgS2VyYmVy b3NUaWNrZXRDbGVhbnVwLCBTU0hDRkdfR0xPQkFMLCAxLCBTU0hDRkdfQ09QWV9OT05FKSBcCisr U1NIQ09ORl9JTlRGTEFHKGtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUsIEtlcmJlcm9zVW5pcXVlQ0Nh Y2hlLCBTU0hDRkdfR0xPQkFMLCAwLCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NIRF9DT05GSUdf S1JCNV9BRlMKKyAjZWxzZSAvKiBLUkI1ICovCisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVT X0tSQjUgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGtlcmJlcm9zX2F1dGhlbnRpY2F0aW9u LCBLZXJiZXJvc0F1dGhlbnRpY2F0aW9uLCBTU0hDRkdfQUxMKSBcCisgU1NIQ09ORl9VTlNVUFBP UlRFRF9JTlQoa2VyYmVyb3Nfb3JfbG9jYWxfcGFzc3dkLCBLZXJiZXJvc09yTG9jYWxQYXNzd2Qs IFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChrZXJiZXJvc190aWNr ZXRfY2xlYW51cCwgS2VyYmVyb3NUaWNrZXRDbGVhbnVwLCBTU0hDRkdfR0xPQkFMKSBcCisrU1NI Q09ORl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3NfdW5pcXVlX2NjYWNoZSwgS2VyYmVyb3NVbmlx dWVDQ2FjaGUsIFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChrZXJi ZXJvc19nZXRfYWZzX3Rva2VuLCBLZXJiZXJvc0dldEFGU1Rva2VuLCBTU0hDRkdfR0xPQkFMKQor ICNlbmRpZiAvKiBLUkI1ICovCisgCiBkaWZmIC0tZ2l0IGEvc2Vzc2lvbi5jIGIvc2Vzc2lvbi5j Ci1pbmRleCA2MTBhMmNjNmYuLjUxN2NhYjZiNiAxMDA2NDQKK2luZGV4IGI0ZGI2NGVhNC4uYzJj ZGQ2YzRmIDEwMDY0NAogLS0tIGEvc2Vzc2lvbi5jCiArKysgYi9zZXNzaW9uLmMKIEBAIC05ODgs NyArOTg4LDggQEAgZG9fc2V0dXBfZW52KHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29u c3QgY2hhciAqc2hlbGwpCkBAIC02MzcsMTAgKzYwMywxMCBAQCBpbmRleCBkYjM0ZDc3ZjQuLmE4 OTRlMjNjOSAxMDA2NDQKICAKICBjaGFyICpzc2hfZ3NzYXBpX3NlcnZlcl9tZWNoYW5pc21zKHZv aWQpOwogZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKLWluZGV4 IGY4NDdmYzBhOS4uOWQ3NWE0NTU1IDEwMDY0NAoraW5kZXggY2Y2NzA5ZjQ2Li44YTMxMjFkMDEg MTAwNjQ0CiAtLS0gYS9zc2hkLXNlc3Npb24uYwogKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBAIC0x Mjk1LDcgKzEyOTUsNyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorQEAgLTEyOTgsNyArMTI5 OCw3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAgI2lmZGVmIEdTU0FQSQogIAlpZiAob3B0 aW9ucy5nc3NfYXV0aGVudGljYXRpb24pIHsKICAJCXRlbXBvcmFyaWx5X3VzZV91aWQoYXV0aGN0 eHQtPnB3KTsKQEAgLTY1MCwxMCArNjE2LDEwIEBAIGluZGV4IGY4NDdmYzBhOS4uOWQ3NWE0NTU1 IDEwMDY0NAogIAl9CiAgI2VuZGlmCiBkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRf Y29uZmlnLjUKLWluZGV4IDU5MjhiNmNkMi4uZDBiMGRmZTM2IDEwMDY0NAoraW5kZXggNjI1ZTZm ZGVjLi4wOGEzMDRjZGMgMTAwNjQ0CiAtLS0gYS9zc2hkX2NvbmZpZy41CiArKysgYi9zc2hkX2Nv bmZpZy41Ci1AQCAtMTA1Nyw2ICsxMDU3LDE0IEBAIFNwZWNpZmllcyB3aGV0aGVyIHRvIGF1dG9t YXRpY2FsbHkgZGVzdHJveSB0aGUgdXNlcidzIHRpY2tldCBjYWNoZQorQEAgLTEwNzQsNiArMTA3 NCwxNCBAQCBTcGVjaWZpZXMgd2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGRlc3Ryb3kgdGhlIHVz ZXIncyB0aWNrZXQgY2FjaGUKICBmaWxlIG9uIGxvZ291dC4KICBUaGUgZGVmYXVsdCBpcwogIC5D bSB5ZXMgLgpAQCAtNjY5LDUgKzYzNSw1IEBAIGluZGV4IDU5MjhiNmNkMi4uZDBiMGRmZTM2IDEw MDY0NAogIFNwZWNpZmllcyB0aGUgcGVybWl0dGVkIEtFWCAoS2V5IEV4Y2hhbmdlKSBhbGdvcml0 aG1zIHRoYXQgdGhlIHNlcnZlciB3aWxsCiAgb2ZmZXIgdG8gY2xpZW50cy4KIC0tIAotMi41My4w CisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMTYtb3BlbnNzaC03LjJwMi1rNWxvZ2luX2RpcmVj dG9yeS5wYXRjaCBiLzAwMTYtb3BlbnNzaC03LjJwMi1rNWxvZ2luX2RpcmVjdG9yeS5wYXRjaApp bmRleCBjYWE1YjlkLi4yY2Q3NDNlIDEwMDY0NAotLS0gYS8wMDE2LW9wZW5zc2gtNy4ycDItazVs b2dpbl9kaXJlY3RvcnkucGF0Y2gKKysrIGIvMDAxNi1vcGVuc3NoLTcuMnAyLWs1bG9naW5fZGly ZWN0b3J5LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSBmMDVkMGFkYzhmMTVlMDFhMzQ3OWQ0 OTY0NWRmMjYxNzBiZTlkNzc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA3NmE0NmRj Mjg3YWI3ODA3MTI0MmJiZjhmMzFkZDFkZDJmODA1OTcwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1 LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDE2LzU0XSBvcGVu c3NoLTcuMnAyLWs1bG9naW5fZGlyZWN0b3J5CitTdWJqZWN0OiBbUEFUQ0ggMTYvNTNdIG9wZW5z c2gtNy4ycDItazVsb2dpbl9kaXJlY3RvcnkKIAogIyBSZXNwZWN0IGs1bG9naW5fZGlyZWN0b3J5 IG9wdGlvbiBpbiBrcms1LmNvbmYgKCMxMzI4MjQzKQogLS0tCkBAIC0xMiwxMCArMTIsMTAgQEAg U3ViamVjdDogW1BBVENIIDE2LzU0XSBvcGVuc3NoLTcuMnAyLWs1bG9naW5fZGlyZWN0b3J5CiAg NCBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYg LS1naXQgYS9hdXRoLWtyYjUuYyBiL2F1dGgta3JiNS5jCi1pbmRleCAwZGUxYWFmOGQuLjE0ODI0 MmNiZiAxMDA2NDQKK2luZGV4IDg2MzExMDkxMC4uOTk2YjE5NzM4IDEwMDY0NAogLS0tIGEvYXV0 aC1rcmI1LmMKICsrKyBiL2F1dGgta3JiNS5jCi1AQCAtNDY1LDUgKzQ2NSwyMSBAQCBzc2hfa3Ji NV9jY19uZXdfdW5pcXVlKGtyYjVfY29udGV4dCBjdHgsIGtyYjVfY2NhY2hlICpjY2FjaGUsIGlu dCAqbmVlZF9lbnZpcm9ubQorQEAgLTQ2Nyw1ICs0NjcsMjEgQEAgc3NoX2tyYjVfY2NfbmV3X3Vu aXF1ZShrcmI1X2NvbnRleHQgY3R4LCBrcmI1X2NjYWNoZSAqY2NhY2hlLCBpbnQgKm5lZWRfZW52 aXJvbm0KICAJCXJldHVybiAoa3JiNV9jY19yZXNvbHZlKGN0eCwgY2NuYW1lLCBjY2FjaGUpKTsK ICAJfQogIH0KQEAgLTM4LDEwICszOCwxMCBAQCBpbmRleCAwZGUxYWFmOGQuLjE0ODI0MmNiZiAx MDA2NDQKICAjZW5kaWYgLyogIUhFSU1EQUwgKi8KICAjZW5kaWYgLyogS1JCNSAqLwogZGlmZiAt LWdpdCBhL2F1dGguaCBiL2F1dGguaAotaW5kZXggOWU1NWZmOGFkLi44MTVmODIxZjkgMTAwNjQ0 CitpbmRleCAyYTE5ZTJiMzQuLjlkZDI1ZjQ5NCAxMDA2NDQKIC0tLSBhL2F1dGguaAogKysrIGIv YXV0aC5oCi1AQCAtMjQ1LDYgKzI0NSw4IEBAIGludAkgc3lzX2F1dGhfcGFzc3dkKHN0cnVjdCBz c2ggKiwgY29uc3QgY2hhciAqKTsKK0BAIC0yNDYsNiArMjQ2LDggQEAgaW50CSBzeXNfYXV0aF9w YXNzd2Qoc3RydWN0IHNzaCAqLCBjb25zdCBjaGFyICopOwogIAogICNpZiBkZWZpbmVkKEtSQjUp ICYmICFkZWZpbmVkKEhFSU1EQUwpCiAga3JiNV9lcnJvcl9jb2RlIHNzaF9rcmI1X2NjX25ld191 bmlxdWUoa3JiNV9jb250ZXh0LCBrcmI1X2NjYWNoZSAqLCBpbnQgKik7CkBAIC04NCwxMCArODQs MTAgQEAgaW5kZXggNDE1ZmIxODkzLi43ZGYzMWM2YWYgMTAwNjQ0CiAgfQogIAogZGlmZiAtLWdp dCBhL3NzaGQuOCBiL3NzaGQuOAotaW5kZXggZTJkOGZmMDAzLi5mYTMzZjUyMzIgMTAwNjQ0Citp bmRleCA4ZWYzNThjZDUuLmFlMjJhOWVhNCAxMDA2NDQKIC0tLSBhL3NzaGQuOAogKysrIGIvc3No ZC44Ci1AQCAtODgwLDYgKzg4MCwxMCBAQCBybG9naW4vcnNoLgorQEAgLTg4NCw2ICs4ODQsMTAg QEAgcmxvZ2luL3JzaC4KICBUaGVzZSBmaWxlcyBlbmZvcmNlIEdTU0FQSS9LZXJiZXJvcyBhdXRo ZW50aWNhdGlvbiBhY2Nlc3MgY29udHJvbC4KICBGdXJ0aGVyIGRldGFpbHMgYXJlIGRlc2NyaWJl ZCBpbgogIC5YciBrc3UgMSAuCkBAIC05OSw1ICs5OSw1IEBAIGluZGV4IGUyZDhmZjAwMy4uZmEz M2Y1MjMyIDEwMDY0NAogIC5JdCBQYSB+Ly5zc2gvCiAgVGhpcyBkaXJlY3RvcnkgaXMgdGhlIGRl ZmF1bHQgbG9jYXRpb24gZm9yIGFsbCB1c2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KIC0tIAot Mi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMTctb3BlbnNzaC02LjZwMS1rdXNlcm9r LnBhdGNoIGIvMDAxNy1vcGVuc3NoLTYuNnAxLWt1c2Vyb2sucGF0Y2gKaW5kZXggN2UwYWU1Mi4u Zjg0MzgxZCAxMDA2NDQKLS0tIGEvMDAxNy1vcGVuc3NoLTYuNnAxLWt1c2Vyb2sucGF0Y2gKKysr IGIvMDAxNy1vcGVuc3NoLTYuNnAxLWt1c2Vyb2sucGF0Y2gKQEAgLTEsMjAgKzEsMTkgQEAKLUZy b20gYmRiMmI1OGUxYTdmNGQ0YTQyYTBhY2ExZjhmMzAxNWI1ZWRjODZhMSBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKK0Zyb20gNDY3MmZlYmQ1ZmY1MDgyZmUyNWIxODA2OTQ4NWYwNTQ5MTIzOGRj MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxk bWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1 YmplY3Q6IFtQQVRDSCAxNy81NF0gb3BlbnNzaC02LjZwMS1rdXNlcm9rCitTdWJqZWN0OiBbUEFU Q0ggMTcvNTNdIG9wZW5zc2gtNi42cDEta3VzZXJvawogCi0jaHR0cHM6Ly9idWd6aWxsYS5taW5k cm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MAogLS0tCiAgYXV0aC1rcmI1LmMgICAgIHwgIDIw ICsrKysrKysrLQogIGdzcy1zZXJ2LWtyYjUuYyB8IDEwNiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0KLSBzZXJ2Y29uZi5jICAgICAgfCAgMTMgKysrKyst Ci0gc2VydmNvbmYuaCAgICAgIHwgICAxICsKKyBzZXJ2Y29uZi5jICAgICAgfCAgIDUgKysrCisg c2VydmNvbmYuaCAgICAgIHwgICAyICsKICBzc2hkX2NvbmZpZyAgICAgfCAgIDEgKwogIHNzaGRf Y29uZmlnLjUgICB8ICAgNSArKysKLSA2IGZpbGVzIGNoYW5nZWQsIDEzOSBpbnNlcnRpb25zKCsp LCA3IGRlbGV0aW9ucygtKQorIDYgZmlsZXMgY2hhbmdlZCwgMTMzIGluc2VydGlvbnMoKyksIDYg ZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9hdXRoLWtyYjUuYyBiL2F1dGgta3JiNS5jCi1p bmRleCAxNDgyNDJjYmYuLjI4N2JkZDM1YSAxMDA2NDQKK2luZGV4IDk5NmIxOTczOC4uMmUzYzFj ODBmIDEwMDY0NAogLS0tIGEvYXV0aC1rcmI1LmMKICsrKyBiL2F1dGgta3JiNS5jCiBAQCAtNTUs NiArNTUsMjEgQEAKQEAgLTE5MCw1MSArMTg5LDEwIEBAIGluZGV4IDdkZjMxYzZhZi4uNmY1ODI2 Y2U4IDEwMDY0NAogIAlpZiAoKGZwID0gZm9wZW4oZmlsZSwgInIiKSkgPT0gTlVMTCkgewogIAkJ aW50IHNhdmVkX2Vycm5vID0gZXJybm87CiBkaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZj b25mLmMKLWluZGV4IDEwYjQzZDU2YS4uNzUxMzg4YmMwIDEwMDY0NAoraW5kZXggYWUxOGQ1NmZk Li41ZGUwM2YzYmYgMTAwNjQ0CiAtLS0gYS9zZXJ2Y29uZi5jCiArKysgYi9zZXJ2Y29uZi5jCi1A QCAtMTM5LDYgKzEzOSw3IEBAIGluaXRpYWxpemVfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9u cyAqb3B0aW9ucykKLSAJb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9IC0xOwotIAlvcHRp b25zLT5nc3Nfc3RvcmVfcmVrZXkgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1z ID0gTlVMTDsKLSsJb3B0aW9ucy0+dXNlX2t1c2Vyb2sgPSAtMTsKLSAJb3B0aW9ucy0+cGFzc3dv cmRfYXV0aGVudGljYXRpb24gPSAtMTsKLSAJb3B0aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhl bnRpY2F0aW9uID0gLTE7Ci0gCW9wdGlvbnMtPnBlcm1pdF9lbXB0eV9wYXNzd2QgPSAtMTsKLUBA IC0zOTMsNiArMzk0LDggQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlv bnMgKm9wdGlvbnMpCi0gCWlmIChvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPT0gTlVMTCkK LSAJCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IHN0cmR1cChHU1NfS0VYX0RFRkFVTFRf S0VYKTsKLSAjZW5kaWYKLSsJaWYgKG9wdGlvbnMtPnVzZV9rdXNlcm9rID09IC0xKQotKwkJb3B0 aW9ucy0+dXNlX2t1c2Vyb2sgPSAxOwotIAlpZiAob3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGlj YXRpb24gPT0gLTEpCi0gCQlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9IDE7Ci0g CWlmIChvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPT0gLTEpCi1AQCAt NTY0LDcgKzU2Nyw3IEBAIHR5cGVkZWYgZW51bSB7Ci0gCXNQb3J0LCBzSG9zdEtleUZpbGUsIHNM b2dpbkdyYWNlVGltZSwKLSAJc1Blcm1pdFJvb3RMb2dpbiwgc0xvZ0ZhY2lsaXR5LCBzTG9nTGV2 ZWwsIHNMb2dWZXJib3NlLAotIAlzS2VyYmVyb3NBdXRoZW50aWNhdGlvbiwgc0tlcmJlcm9zT3JM b2NhbFBhc3N3ZCwgc0tlcmJlcm9zVGlja2V0Q2xlYW51cCwKLS0Jc0tlcmJlcm9zR2V0QUZTVG9r ZW4sIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sCi0rCXNL ZXJiZXJvc0dldEFGU1Rva2VuLCBzS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIHNLZXJiZXJvc1VzZUt1 c2Vyb2ssIHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uLAotIAlzS2JkSW50ZXJhY3RpdmVBdXRoZW50 aWNhdGlvbiwgc0xpc3RlbkFkZHJlc3MsIHNBZGRyZXNzRmFtaWx5LAotIAlzUHJpbnRNb3RkLCBz UHJpbnRMYXN0TG9nLCBzSWdub3JlUmhvc3RzLAotIAlzWDExRm9yd2FyZGluZywgc1gxMURpc3Bs YXlPZmZzZXQsIHNYMTFVc2VMb2NhbGhvc3QsCi1AQCAtNjU2LDEyICs2NTksMTQgQEAgc3RhdGlj IHN0cnVjdCB7Ci0gCXsgImtlcmJlcm9zZ2V0YWZzdG9rZW4iLCBzVW5zdXBwb3J0ZWQsIFNTSENG R19HTE9CQUwgfSwKLSAjZW5kaWYKLSAJeyAia2VyYmVyb3N1bmlxdWVjY2FjaGUiLCBzS2VyYmVy b3NVbmlxdWVDQ2FjaGUsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAia2VyYmVyb3N1c2VrdXNlcm9r Iiwgc0tlcmJlcm9zVXNlS3VzZXJvaywgU1NIQ0ZHX0FMTCB9LAotICNlbHNlCi0gCXsgImtlcmJl cm9zYXV0aGVudGljYXRpb24iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKLSAJeyAia2Vy YmVyb3NvcmxvY2FscGFzc3dkIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsg ImtlcmJlcm9zdGlja2V0Y2xlYW51cCIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAot IAl7ICJrZXJiZXJvc2dldGFmc3Rva2VuIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0s Ci0gCXsgImtlcmJlcm9zdW5pcXVlY2NhY2hlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFM IH0sCi0rCXsgImtlcmJlcm9zdXNla3VzZXJvayIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9 LAotICNlbmRpZgotIAl7ICJrZXJiZXJvc3RndHBhc3NpbmciLCBzVW5zdXBwb3J0ZWQsIFNTSENG R19HTE9CQUwgfSwKLSAJeyAiYWZzdG9rZW5wYXNzaW5nIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdf R0xPQkFMIH0sCi1AQCAtMjQ2Myw2ICsyNDY4LDEwIEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19s aW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmxpbmUsCitAQCAtMjIyOSw2 ICsyMjI5LDEwIEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlv bnMgKm9wdGlvbnMsIGNoYXIgKmxpbmUsCiAgCQl9CiAgCQlicmVhazsKICAKQEAgLTI0NSwzOSAr MjAzLDM5IEBAIGluZGV4IDEwYjQzZDU2YS4uNzUxMzg4YmMwIDEwMDY0NAogIAljYXNlIHNNYXRj aDoKICAJCWlmIChjbWRsaW5lKQogIAkJCWZhdGFsKCJNYXRjaCBkaXJlY3RpdmUgbm90IHN1cHBv cnRlZCBhcyBhIGNvbW1hbmQtbGluZSAiCi1AQCAtMzAzMCw2ICszMDM5LDcgQEAgY29weV9zZXRf c2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqZHN0LCBTZXJ2ZXJPcHRpb25zICpzcmMsIGlu dCBwcmVhdXRoKQotIAlNX0NQX0lOVE9QVChjbGllbnRfYWxpdmVfaW50ZXJ2YWwpOwotIAlNX0NQ X0lOVE9QVChpcF9xb3NfaW50ZXJhY3RpdmUpOwotIAlNX0NQX0lOVE9QVChpcF9xb3NfYnVsayk7 Ci0rCU1fQ1BfSU5UT1BUKHVzZV9rdXNlcm9rKTsKLSAJTV9DUF9JTlRPUFQocmVrZXlfbGltaXQp OwotIAlNX0NQX0lOVE9QVChyZWtleV9pbnRlcnZhbCk7Ci0gCU1fQ1BfSU5UT1BUKGxvZ19sZXZl bCk7Ci1AQCAtMzMzOSw2ICszMzQ5LDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykK K0BAIC00MjQyLDYgKzQyNDYsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQogIAlk dW1wX2NmZ19mbXRpbnQoc0tlcmJlcm9zR2V0QUZTVG9rZW4sIG8tPmtlcmJlcm9zX2dldF9hZnNf dG9rZW4pOwogICMgZW5kaWYKICAJZHVtcF9jZmdfZm10aW50KHNLZXJiZXJvc1VuaXF1ZUNDYWNo ZSwgby0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSk7CiArCWR1bXBfY2ZnX2ZtdGludChzS2VyYmVy b3NVc2VLdXNlcm9rLCBvLT51c2Vfa3VzZXJvayk7CiAgI2VuZGlmCiAgI2lmZGVmIEdTU0FQSQot IAlkdW1wX2NmZ19mbXRpbnQoc0dzc0F1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRp b24pOworIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSUF1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0 aGVudGljYXRpb24pOwogZGlmZiAtLWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCi1pbmRl eCBiZjU4OTkxMWEuLjk4NDNmOTZjNSAxMDA2NDQKK2luZGV4IDVmNTY3MjA4Mi4uN2MwMDNiOGM1 IDEwMDY0NAogLS0tIGEvc2VydmNvbmYuaAogKysrIGIvc2VydmNvbmYuaAotQEAgLTE1Miw2ICsx NTIsNyBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gCQkJCQkJICogYXV0aGVudGljYXRlZCB3aXRoIEtl cmJlcm9zLiAqLwotIAlpbnQgICAgIGtlcmJlcm9zX3VuaXF1ZV9jY2FjaGU7CQkvKiBJZiB0cnVl LCB0aGUgYWNxdWlyZWQgdGlja2V0IHdpbGwKLSAJCQkJCQkgKiBiZSBzdG9yZWQgaW4gcGVyLXNl c3Npb24gY2NhY2hlICovCi0rCWludAl1c2Vfa3VzZXJvazsKLSAJaW50ICAgICBnc3NfYXV0aGVu dGljYXRpb247CS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkgYXV0aGVudGljYXRpb24gKi8KLSAJ aW50ICAgICBnc3Nfa2V5ZXg7CQkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGtleSBleGNoYW5n ZSAqLwotIAlpbnQgICAgIGdzc19jbGVhbnVwX2NyZWRzOwkvKiBJZiB0cnVlLCBkZXN0cm95IGNy ZWQgY2FjaGUgb24gbG9nb3V0ICovCitAQCAtMzA0LDYgKzMwNCw3IEBAIFNTSENPTkZfSU5URkxB RyhrZXJiZXJvc19hdXRoZW50aWNhdGlvbiwgS2VyYmVyb3NBdXRoZW50aWNhdGlvbiwgU1NIQ0ZH X0FMTCwgMCwKKyBTU0hDT05GX0lOVEZMQUcoa2VyYmVyb3Nfb3JfbG9jYWxfcGFzc3dkLCBLZXJi ZXJvc09yTG9jYWxQYXNzd2QsIFNTSENGR19HTE9CQUwsIDEsIFNTSENGR19DT1BZX05PTkUpIFwK KyBTU0hDT05GX0lOVEZMQUcoa2VyYmVyb3NfdGlja2V0X2NsZWFudXAsIEtlcmJlcm9zVGlja2V0 Q2xlYW51cCwgU1NIQ0ZHX0dMT0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorIFNTSENPTkZf SU5URkxBRyhrZXJiZXJvc191bmlxdWVfY2NhY2hlLCBLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgU1NI Q0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorK1NTSENPTkZfSU5URkxBRyh1c2Vf a3VzZXJvaywgS2VyYmVyb3NVc2VLdXNlcm9rLCBTU0hDRkdfQUxMLCAxLCBTU0hDRkdfQ09QWV9N QVRDSCkgXAorIFNTSERfQ09ORklHX0tSQjVfQUZTCisgI2Vsc2UgLyogS1JCNSAqLworICNkZWZp bmUgU1NIRF9DT05GSUdfRU5UUklFU19LUkI1IFwKK0BAIC0zMTEsNiArMzEyLDcgQEAgU1NIQ09O Rl9VTlNVUFBPUlRFRF9JTlQoa2VyYmVyb3NfYXV0aGVudGljYXRpb24sIEtlcmJlcm9zQXV0aGVu dGljYXRpb24sIFNTSENGR18KKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChrZXJiZXJvc19vcl9s b2NhbF9wYXNzd2QsIEtlcmJlcm9zT3JMb2NhbFBhc3N3ZCwgU1NIQ0ZHX0dMT0JBTCkgXAorIFNT SENPTkZfVU5TVVBQT1JURURfSU5UKGtlcmJlcm9zX3RpY2tldF9jbGVhbnVwLCBLZXJiZXJvc1Rp Y2tldENsZWFudXAsIFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChr ZXJiZXJvc191bmlxdWVfY2NhY2hlLCBLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgU1NIQ0ZHX0dMT0JB TCkgXAorK1NTSENPTkZfVU5TVVBQT1JURURfSU5UKHVzZV9rdXNlcm9rLCBLZXJiZXJvc1VzZUt1 c2Vyb2ssIFNTSENGR19BTEwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChrZXJiZXJvc19n ZXRfYWZzX3Rva2VuLCBLZXJiZXJvc0dldEFGU1Rva2VuLCBTU0hDRkdfR0xPQkFMKQorICNlbmRp ZiAvKiBLUkI1ICovCisgCiBkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcgYi9zc2hkX2NvbmZpZwot aW5kZXggOGRiOWYwZmIxLi5lYTVhODc4ZTYgMTAwNjQ0CitpbmRleCA0MDRhYTFiYmIuLjc2Mjc5 ZDc5NSAxMDA2NDQKIC0tLSBhL3NzaGRfY29uZmlnCiArKysgYi9zc2hkX2NvbmZpZwotQEAgLTc1 LDYgKzc1LDcgQEAgQXV0aG9yaXplZEtleXNGaWxlCS5zc2gvYXV0aG9yaXplZF9rZXlzCitAQCAt NzYsNiArNzYsNyBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRob3JpemVkX2tleXMKICAj S2VyYmVyb3NPckxvY2FsUGFzc3dkIHllcwogICNLZXJiZXJvc1RpY2tldENsZWFudXAgeWVzCiAg I0tlcmJlcm9zR2V0QUZTVG9rZW4gbm8KQEAgLTI4NiwxMCArMjQ0LDEwIEBAIGluZGV4IDhkYjlm MGZiMS4uZWE1YTg3OGU2IDEwMDY0NAogICMgR1NTQVBJIG9wdGlvbnMKICAjR1NTQVBJQXV0aGVu dGljYXRpb24gbm8KIGRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQot aW5kZXggZDBiMGRmZTM2Li4xNzYyODc0YzQgMTAwNjQ0CitpbmRleCAwOGEzMDRjZGMuLjAwNzdl ZTA5NiAxMDA2NDQKIC0tLSBhL3NzaGRfY29uZmlnLjUKICsrKyBiL3NzaGRfY29uZmlnLjUKLUBA IC0xMDY1LDYgKzEwNjUsMTAgQEAgVGhlIGRlZmF1bHQgdmFsdWUKK0BAIC0xMDgyLDYgKzEwODIs MTAgQEAgVGhlIGRlZmF1bHQgdmFsdWUKICAuQ20gbm8KICBjYW4gbGVhZCB0byBvdmVyd3JpdGlu ZyBwcmV2aW91cyB0aWNrZXRzIGJ5IHN1YnNlcWVudCBjb25uZWN0aW9ucyB0byB0aGUgc2FtZQog IHVzZXIgYWNjb3VudC4KQEAgLTMwMCw3ICsyNTgsNyBAQCBpbmRleCBkMGIwZGZlMzYuLjE3NjI4 NzRjNCAxMDA2NDQKICAuSXQgQ20gS2V4QWxnb3JpdGhtcwogIFNwZWNpZmllcyB0aGUgcGVybWl0 dGVkIEtFWCAoS2V5IEV4Y2hhbmdlKSBhbGdvcml0aG1zIHRoYXQgdGhlIHNlcnZlciB3aWxsCiAg b2ZmZXIgdG8gY2xpZW50cy4KLUBAIC0xMzc5LDYgKzEzODMsNyBAQCBBdmFpbGFibGUga2V5d29y ZHMgYXJlCitAQCAtMTM5OCw2ICsxNDAyLDcgQEAgQXZhaWxhYmxlIGtleXdvcmRzIGFyZQogIC5D bSBJUFFvUyAsCiAgLkNtIEtiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24gLAogIC5DbSBLZXJi ZXJvc0F1dGhlbnRpY2F0aW9uICwKQEAgLTMwOSw1ICsyNjcsNSBAQCBpbmRleCBkMGIwZGZlMzYu LjE3NjI4NzRjNCAxMDA2NDQKICAuQ20gTWF4QXV0aFRyaWVzICwKICAuQ20gTWF4U2Vzc2lvbnMg LAogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAxOC1vcGVuc3NoLTYuNHAx LWZyb210by1yZW1vdGUucGF0Y2ggYi8wMDE4LW9wZW5zc2gtNi40cDEtZnJvbXRvLXJlbW90ZS5w YXRjaAppbmRleCAzYmVlNmEzLi4yMDRjNTc1IDEwMDY0NAotLS0gYS8wMDE4LW9wZW5zc2gtNi40 cDEtZnJvbXRvLXJlbW90ZS5wYXRjaAorKysgYi8wMDE4LW9wZW5zc2gtNi40cDEtZnJvbXRvLXJl bW90ZS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gYzA5NWUyZjQ4ZTI3OWFmNjVhOTQxOWY1 ODBhYzljYWUxNDQ1M2E5MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gZTYzODhkZmRi OWNjNjBjNTA1YjdkMjc2NWVjMDY4OGRlMDgyMGFiYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK IEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwg MTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAxOC81NF0gb3BlbnNz aC02LjRwMS1mcm9tdG8tcmVtb3RlCitTdWJqZWN0OiBbUEFUQ0ggMTgvNTNdIG9wZW5zc2gtNi40 cDEtZnJvbXRvLXJlbW90ZQogCiAjIFVzZSB0dHkgYWxsb2NhdGlvbiBmb3IgYSByZW1vdGUgc2Nw ICgjOTg1NjUwKQogLS0tCkBAIC05LDcgKzksNyBAQCBTdWJqZWN0OiBbUEFUQ0ggMTgvNTRdIG9w ZW5zc2gtNi40cDEtZnJvbXRvLXJlbW90ZQogIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3NjcC5jIGIvc2NwLmMKLWluZGV4IDFm YWE5YTU1NS4uZDg3ZDkzOWExIDEwMDY0NAoraW5kZXggMjhhYzdhMjlkLi40ODIxNTE0YmEgMTAw NjQ0CiAtLS0gYS9zY3AuYwogKysrIGIvc2NwLmMKIEBAIC0xMTQzLDcgKzExNDMsMTAgQEAgdG9y ZW1vdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBlbnVtIHNjcF9tb2RlX2UgbW9kZSwgY2hhciAq c2Z0cF9kaXJlY3QpCkBAIC0yNSw1ICsyNSw1IEBAIGluZGV4IDFmYWE5YTU1NS4uZDg3ZDkzOWEx IDEwMDY0NAogIAkJCQlhZGRhcmdzKCZhbGlzdCwgIiVzIiwKICAJCQkJICAgIHJlbW90ZV9yZW1v dGVfYXJncy5saXN0W2pdKTsKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAw MTktb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QucGF0Y2ggYi8wMDE5LW9wZW5zc2gtNi42 LjFwMS1sb2ctaW4tY2hyb290LnBhdGNoCmluZGV4IGI0YTQ2YWIuLjI1MzhlYzIgMTAwNjQ0Ci0t LSBhLzAwMTktb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QucGF0Y2gKKysrIGIvMDAxOS1v cGVuc3NoLTYuNi4xcDEtbG9nLWluLWNocm9vdC5wYXRjaApAQCAtMSw5ICsxLDggQEAKLUZyb20g ZjE4NzIxMGMxOGY5MzNhM2IyMzljNDliZDA5ZWZlYWJiYTRlNDcxMiBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKK0Zyb20gMjMxNjU0M2JmODUwMzU3NjJkOWFhZGYyMDAwNjdmY2FmMmQwZTMzOCBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0 QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1Ympl Y3Q6IFtQQVRDSCAxOS81NF0gb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QKK1N1YmplY3Q6 IFtQQVRDSCAxOS81M10gb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QKIAotIyBsb2cgdmlh IG1vbml0b3IgaW4gY2hyb290cyB3aXRob3V0IC9kZXYvbG9nICgjMjY4MSkKIC0tLQogIGxvZy5j ICAgICAgICAgICAgICB8IDExICsrKysrKysrKy0tCiAgbG9nLmggICAgICAgICAgICAgIHwgIDEg KwpAQCAtNTgsMTAgKzU3LDEwIEBAIGluZGV4IDhlOGRmYzIzZi4uNzAwNDhhOGFmIDEwMDY0NAog IGludCAgICAgIGxvZ19jaGFuZ2VfbGV2ZWwoTG9nTGV2ZWwpOwogIGludCAgICAgIGxvZ19pc19v bl9zdGRlcnIodm9pZCk7CiBkaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCi1pbmRl eCAwMjVjNmFiYmUuLjUyNTUwODNhYiAxMDA2NDQKK2luZGV4IGZhNDc3ODk5ZS4uMTRjZGNjZjJm IDEwMDY0NAogLS0tIGEvbW9uaXRvci5jCiArKysgYi9tb25pdG9yLmMKLUBAIC0yMDMwLDkgKzIw MzAsMjIgQEAgbW9uaXRvcl9pbml0KHZvaWQpCitAQCAtMjAxNCw5ICsyMDE0LDIyIEBAIG1vbml0 b3JfaW5pdCh2b2lkKQogIH0KICAKICB2b2lkCkBAIC0xMDAsNyArOTksNyBAQCBpbmRleCA3NWEw ZDYxODEuLmY0NzIxYzQ3MiAxMDA2NDQKICBzdHJ1Y3QgQXV0aGN0eHQ7CiAgdm9pZCBtb25pdG9y X2NoaWxkX3ByZWF1dGgoc3RydWN0IHNzaCAqLCBzdHJ1Y3QgbW9uaXRvciAqKTsKIGRpZmYgLS1n aXQgYS9zZXNzaW9uLmMgYi9zZXNzaW9uLmMKLWluZGV4IDUxN2NhYjZiNi4uMGMyNjQ0OGQ5IDEw MDY0NAoraW5kZXggYzJjZGQ2YzRmLi41NzI0ODdiNGEgMTAwNjQ0CiAtLS0gYS9zZXNzaW9uLmMK ICsrKyBiL3Nlc3Npb24uYwogQEAgLTE2Miw2ICsxNjIsNyBAQCBsb2dpbl9jYXBfdCAqbGM7CkBA IC0xNTQsMTIgKzE1MywxMiBAQCBpbmRleCA1MTdjYWI2YjYuLjBjMjY0NDhkOSAxMDA2NDQKICAJ ZG9fcmNfZmlsZXMoc3NoLCBzLCBzaGVsbCk7CiAgCiAgCS8qIHJlc3RvcmUgU0lHUElQRSBmb3Ig Y2hpbGQgKi8KLUBAIC0xNjQ1LDkgKzE2NDEsMTcgQEAgZG9fY2hpbGQoc3RydWN0IHNzaCAqc3No LCBTZXNzaW9uICpzLCBjb25zdCBjaGFyICpjb21tYW5kKQorQEAgLTE2NDYsOSArMTY0MiwxNyBA QCBkb19jaGlsZChzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1h bmQpCiAgI2lmZGVmIFdJVEhfU0VMSU5VWAogIAkJc3NoX3NlbGludXhfY2hhbmdlX2NvbnRleHQo InNmdHBkX3QiKTsKICAjZW5kaWYKLS0JCWV4aXQoc2Z0cF9zZXJ2ZXJfbWFpbihpLCBhcmd2LCBz LT5wdykpOwotKwkJZXhpdChzZnRwX3NlcnZlcl9tYWluKGksIGFyZ3YsIHMtPnB3LCBoYXZlX2Rl dl9sb2cpKTsKKy0JCWV4aXQoc2Z0cF9zZXJ2ZXJfbWFpbihzZnRwX2FyZ2MsIHNmdHBfYXJndiwg cy0+cHcpKTsKKysJCWV4aXQoc2Z0cF9zZXJ2ZXJfbWFpbihzZnRwX2FyZ2MsIHNmdHBfYXJndiwg cy0+cHcsIGhhdmVfZGV2X2xvZykpOwogIAl9CiAgCiArCS8qCkBAIC0xODUsMTAgKzE4NCwxMCBA QCBpbmRleCAyYzcwZjg5YmMuLmJiYjc5ZjI3OCAxMDA2NDQKICsJcmV0dXJuIChzZnRwX3NlcnZl cl9tYWluKGFyZ2MsIGFyZ3YsIHVzZXJfcHcsIDApKTsKICB9CiBkaWZmIC0tZ2l0IGEvc2Z0cC1z ZXJ2ZXIuYyBiL3NmdHAtc2VydmVyLmMKLWluZGV4IGViZGIzMWQzMi4uN2E2ZTRmYTg4IDEwMDY0 NAoraW5kZXggZjg3ZmM1ODI1Li5lZWY5YTk2ZjggMTAwNjQ0CiAtLS0gYS9zZnRwLXNlcnZlci5j CiArKysgYi9zZnRwLXNlcnZlci5jCi1AQCAtMTg5Myw3ICsxODkzLDcgQEAgc2Z0cF9zZXJ2ZXJf dXNhZ2Uodm9pZCkKK0BAIC0xOTE4LDcgKzE5MTgsNyBAQCBzZnRwX3NlcnZlcl91c2FnZSh2b2lk KQogIH0KICAKICBpbnQKQEAgLTE5Nyw3ICsxOTYsNyBAQCBpbmRleCBlYmRiMzFkMzIuLjdhNmU0 ZmE4OCAxMDA2NDQKICB7CiAgCWludCBpLCByLCBpbiwgb3V0LCBjaCwgc2tpcGFyZ3MgPSAwLCBs b2dfc3RkZXJyID0gMDsKICAJc3NpemVfdCBsZW4sIG9sZW47Ci1AQCAtMTkwNSw3ICsxOTA1LDcg QEAgc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBwYXNzd2Qg KnVzZXJfcHcpCitAQCAtMTkzMCw3ICsxOTMwLDcgQEAgc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHcpCiAgCWV4dGVybiBjaGFyICpf X3Byb2duYW1lOwogIAogIAlfX3Byb2duYW1lID0gc3NoX2dldF9wcm9nbmFtZShhcmd2WzBdKTsK QEAgLTIwNiw3ICsyMDUsNyBAQCBpbmRleCBlYmRiMzFkMzIuLjdhNmU0ZmE4OCAxMDA2NDQKICAK ICAJcHcgPSBwd2NvcHkodXNlcl9wdyk7CiAgCi1AQCAtMTk3OCw3ICsxOTc4LDcgQEAgc2Z0cF9z ZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHcp CitAQCAtMjAwMyw3ICsyMDAzLDcgQEAgc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHcpCiAgCQl9CiAgCX0KICAKQEAgLTIyNyw3ICsy MjYsNyBAQCBpbmRleCAyYmRlOGJiN2YuLmRkZjFhMzk2OCAxMDA2NDQKICtpbnQJc2Z0cF9zZXJ2 ZXJfbWFpbihpbnQsIGNoYXIgKiosIHN0cnVjdCBwYXNzd2QgKiwgaW50KTsKICB2b2lkCXNmdHBf c2VydmVyX2NsZWFudXBfZXhpdChpbnQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiBkaWZm IC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24uYwotaW5kZXggOWQ3NWE0NTU1 Li4yM2I4MGViMDEgMTAwNjQ0CitpbmRleCA4YTMxMjFkMDEuLjhhMDY2MTZmZCAxMDA2NDQKIC0t LSBhL3NzaGQtc2Vzc2lvbi5jCiArKysgYi9zc2hkLXNlc3Npb24uYwogQEAgLTM4Nyw3ICszODcs NyBAQCBwcml2c2VwX3Bvc3RhdXRoKHN0cnVjdCBzc2ggKnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0 KQpAQCAtMjUyLDUgKzI1MSw1IEBAIGluZGV4IDlkNzVhNDU1NS4uMjNiODBlYjAxIDEwMDY0NAog IAkvKiBEZW1vdGUgdGhlIHByaXZhdGUga2V5cyB0byBwdWJsaWMga2V5cy4gKi8KICAJZGVtb3Rl X3NlbnNpdGl2ZV9kYXRhKCk7CiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8w MDIwLW9wZW5zc2gtNi42LjFwMS1zY3Atbm9uLWV4aXN0aW5nLWRpcmVjdG9yeS5wYXRjaCBiLzAw MjAtb3BlbnNzaC02LjYuMXAxLXNjcC1ub24tZXhpc3RpbmctZGlyZWN0b3J5LnBhdGNoCmluZGV4 IDZlMjY2ZjIuLjMyZDRiNjAgMTAwNjQ0Ci0tLSBhLzAwMjAtb3BlbnNzaC02LjYuMXAxLXNjcC1u b24tZXhpc3RpbmctZGlyZWN0b3J5LnBhdGNoCisrKyBiLzAwMjAtb3BlbnNzaC02LjYuMXAxLXNj cC1ub24tZXhpc3RpbmctZGlyZWN0b3J5LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAyNzY3 MjlkYzM3ZDIwNGUzZGE4MDQ1NTc4OGRlZWFjODU0YzcyYjQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQorRnJvbSBjZjhkOWQwZjYwMmFjMjNmYTM1ZTRmOGI2MzhhMDQ5NDU2NGQ3ZGM0IE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21h aWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDog W1BBVENIIDIwLzU0XSBvcGVuc3NoLTYuNi4xcDEtc2NwLW5vbi1leGlzdGluZy1kaXJlY3RvcnkK K1N1YmplY3Q6IFtQQVRDSCAyMC81M10gb3BlbnNzaC02LjYuMXAxLXNjcC1ub24tZXhpc3Rpbmct ZGlyZWN0b3J5CiAKICMgc2NwIGZpbGUgaW50byBub24tZXhpc3RpbmcgZGlyZWN0b3J5ICgjMTE0 MjIyMykKIC0tLQpAQCAtOSw3ICs5LDcgQEAgU3ViamVjdDogW1BBVENIIDIwLzU0XSBvcGVuc3No LTYuNi4xcDEtc2NwLW5vbi1leGlzdGluZy1kaXJlY3RvcnkKICAxIGZpbGUgY2hhbmdlZCwgNCBp bnNlcnRpb25zKCspCiAKIGRpZmYgLS1naXQgYS9zY3AuYyBiL3NjcC5jCi1pbmRleCBkODdkOTM5 YTEuLmI1YWQ0NWMxMiAxMDA2NDQKK2luZGV4IDQ4MjE1MTRiYS4uZmNhNDM5M2YzIDEwMDY0NAog LS0tIGEvc2NwLmMKICsrKyBiL3NjcC5jCiBAQCAtMTg3MSw2ICsxODcxLDEwIEBAIHNpbmsoaW50 IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpzcmMpCkBAIC0yNCw1ICsyNCw1IEBAIGlu ZGV4IGQ4N2Q5MzlhMS4uYjVhZDQ1YzEyIDEwMDY0NAogIAkJbW9kZSB8PSBTX0lXVVNSOwogIAkJ aWYgKChvZmQgPSBvcGVuKG5wLCBPX1dST05MWXxPX0NSRUFULCBtb2RlKSkgPT0gLTEpIHsKIC0t IAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMjEtb3BlbnNzaC02LjZwMS1HU1NB UElFbmFibGVrNXVzZXJzLnBhdGNoIGIvMDAyMS1vcGVuc3NoLTYuNnAxLUdTU0FQSUVuYWJsZWs1 dXNlcnMucGF0Y2gKaW5kZXggZDYyNzc4Yi4uOTZlZWZmNCAxMDA2NDQKLS0tIGEvMDAyMS1vcGVu c3NoLTYuNnAxLUdTU0FQSUVuYWJsZWs1dXNlcnMucGF0Y2gKKysrIGIvMDAyMS1vcGVuc3NoLTYu NnAxLUdTU0FQSUVuYWJsZWs1dXNlcnMucGF0Y2gKQEAgLTEsMTQgKzEsMTQgQEAKLUZyb20gY2Y2 ZjgzOTM3MGIxZjhhMjA3ZGUwOGI0YjAwYzI4Y2U2Njg0ZDE4MiBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKK0Zyb20gZGQxODcxOTcyMTczYzlmNDgzNmM0ZDgwOTY0MTE5ODFkMjkxZmY4NSBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6 IFtQQVRDSCAyMS81NF0gb3BlbnNzaC02LjZwMS1HU1NBUElFbmFibGVrNXVzZXJzCitTdWJqZWN0 OiBbUEFUQ0ggMjEvNTNdIG9wZW5zc2gtNi42cDEtR1NTQVBJRW5hYmxlazV1c2VycwogCiAtLS0K LSBnc3Mtc2Vydi1rcmI1LmMgfCAgMyArLS0KLSBzZXJ2Y29uZi5jICAgICAgfCAxMyArKysrKysr KysrKystCi0gc2VydmNvbmYuaCAgICAgIHwgIDEgKwotIHNzaGRfY29uZmlnICAgICB8ICAxICsK LSA0IGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZ3Nz LXNlcnYta3JiNS5jIHwgMyArLS0KKyBzZXJ2Y29uZi5jICAgICAgfCA1ICsrKysrCisgc2VydmNv bmYuaCAgICAgIHwgNiArKysrLS0KKyBzc2hkX2NvbmZpZyAgICAgfCAxICsKKyA0IGZpbGVzIGNo YW5nZWQsIDExIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9n c3Mtc2Vydi1rcmI1LmMgYi9nc3Mtc2Vydi1rcmI1LmMKIGluZGV4IDZmNTgyNmNlOC4uNzIzNTA5 NDA5IDEwMDY0NApAQCAtMzIsOTUgKzMyLDU3IEBAIGluZGV4IDZmNTgyNmNlOC4uNzIzNTA5NDA5 IDEwMDY0NAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNWxvZ2lu X2V4aXN0cyk7CiAgCX0KIGRpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5k ZXggNzUxMzg4YmMwLi44ZGU4MWZkYzggMTAwNjQ0CitpbmRleCA1ZGUwM2YzYmYuLjNkYmZjY2Vh OCAxMDA2NDQKIC0tLSBhL3NlcnZjb25mLmMKICsrKyBiL3NlcnZjb25mLmMKLUBAIC0xNDAsNiAr MTQwLDcgQEAgaW5pdGlhbGl6ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25z KQotIAlvcHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2tleF9h bGdvcml0aG1zID0gTlVMTDsKLSAJb3B0aW9ucy0+dXNlX2t1c2Vyb2sgPSAtMTsKLSsJb3B0aW9u cy0+ZW5hYmxlX2s1dXNlcnMgPSAtMTsKLSAJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRp b24gPSAtMTsKLSAJb3B0aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID0gLTE7 Ci0gCW9wdGlvbnMtPnBlcm1pdF9lbXB0eV9wYXNzd2QgPSAtMTsKLUBAIC0zOTYsNiArMzk3LDgg QEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0g I2VuZGlmCi0gCWlmIChvcHRpb25zLT51c2Vfa3VzZXJvayA9PSAtMSkKLSAJCW9wdGlvbnMtPnVz ZV9rdXNlcm9rID0gMTsKLSsJaWYgKG9wdGlvbnMtPmVuYWJsZV9rNXVzZXJzID09IC0xKQotKwkJ b3B0aW9ucy0+ZW5hYmxlX2s1dXNlcnMgPSAwOwotIAlpZiAob3B0aW9ucy0+cGFzc3dvcmRfYXV0 aGVudGljYXRpb24gPT0gLTEpCi0gCQlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9 IDE7Ci0gCWlmIChvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPT0gLTEp Ci1AQCAtNTgyLDcgKzU4NSw3IEBAIHR5cGVkZWYgZW51bSB7Ci0gCXNIb3N0S2V5QWxnb3JpdGht cywgc1BlclNvdXJjZU1heFN0YXJ0dXBzLCBzUGVyU291cmNlTmV0QmxvY2tTaXplLAotIAlzUGVy U291cmNlUGVuYWx0aWVzLCBzUGVyU291cmNlUGVuYWx0eUV4ZW1wdExpc3QsCi0gCXNDbGllbnRB bGl2ZUludGVydmFsLCBzQ2xpZW50QWxpdmVDb3VudE1heCwgc0F1dGhvcml6ZWRLZXlzRmlsZSwK LS0Jc0dzc0F1dGhlbnRpY2F0aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBzR3NzRGVsZWdhdGVDcmVk cywgc0dzc1N0cmljdEFjY2VwdG9yLAotKwlzR3NzQXV0aGVudGljYXRpb24sIHNHc3NDbGVhbnVw Q3JlZHMsIHNHc3NEZWxlZ2F0ZUNyZWRzLCBzR3NzRW5hYmxlazV1c2Vycywgc0dzc1N0cmljdEFj Y2VwdG9yLAotIAlzR3NzS2V5RXgsIHNHc3NLZXhBbGdvcml0aG1zLCBzR3NzU3RvcmVSZWtleSwK LSAJc0FjY2VwdEVudiwgc1NldEVudiwgc1Blcm1pdFR1bm5lbCwKLSAJc01hdGNoLCBzUGVybWl0 T3Blbiwgc1Blcm1pdExpc3Rlbiwgc0ZvcmNlQ29tbWFuZCwgc0Nocm9vdERpcmVjdG9yeSwKLUBA IC02NzksNiArNjgyLDcgQEAgc3RhdGljIHN0cnVjdCB7Ci0gCXsgImdzc2FwaWtleWV4Y2hhbmdl Iiwgc0dzc0tleUV4LCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0b3JlY3JlZGVudGlh bHNvbnJla2V5Iiwgc0dzc1N0b3JlUmVrZXksIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBp a2V4YWxnb3JpdGhtcyIsIHNHc3NLZXhBbGdvcml0aG1zLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsg Imdzc2FwaWVuYWJsZWs1dXNlcnMiLCBzR3NzRW5hYmxlazV1c2VycywgU1NIQ0ZHX0FMTCB9LAot ICNlbHNlCi0gCXsgImdzc2FwaWF1dGhlbnRpY2F0aW9uIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdf QUxMIH0sCi0gCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NI Q0ZHX0dMT0JBTCB9LAotQEAgLTY4OCw2ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IHsKLSAJeyAi Z3NzYXBpa2V5ZXhjaGFuZ2UiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAi Z3NzYXBpc3RvcmVjcmVkZW50aWFsc29ucmVrZXkiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9C QUwgfSwKLSAJeyAiZ3NzYXBpa2V4YWxnb3JpdGhtcyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dM T0JBTCB9LAotKwl7ICJnc3NhcGllbmFibGVrNXVzZXJzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdf QUxMIH0sCi0gI2VuZGlmCi0gCXsgImdzc3VzZXNlc3Npb25jY2FjaGUiLCBzVW5zdXBwb3J0ZWQs IFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpdXNlc2Vzc2lvbmNyZWRjYWNoZSIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotQEAgLTI0NzIsNiArMjQ3NywxMCBAQCBwcm9jZXNz X3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICps aW5lLAorQEAgLTIyMzMsNiArMjIzMywxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9k ZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAogIAkJaW50cHRyID0gJm9w dGlvbnMtPnVzZV9rdXNlcm9rOwogIAkJZ290byBwYXJzZV9mbGFnOwogIAotKwljYXNlIHNHc3NF bmFibGVrNXVzZXJzOgorKwljYXNlIHNHU1NBUElFbmFibGVrNXVzZXJzOgogKwkJaW50cHRyID0g Jm9wdGlvbnMtPmVuYWJsZV9rNXVzZXJzOwogKwkJZ290byBwYXJzZV9mbGFnOwogKwogIAljYXNl IHNNYXRjaDoKICAJCWlmIChjbWRsaW5lKQogIAkJCWZhdGFsKCJNYXRjaCBkaXJlY3RpdmUgbm90 IHN1cHBvcnRlZCBhcyBhIGNvbW1hbmQtbGluZSAiCi1AQCAtMzA0MCw2ICszMDQ5LDcgQEAgY29w eV9zZXRfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqZHN0LCBTZXJ2ZXJPcHRpb25zICpz cmMsIGludCBwcmVhdXRoKQotIAlNX0NQX0lOVE9QVChpcF9xb3NfaW50ZXJhY3RpdmUpOwotIAlN X0NQX0lOVE9QVChpcF9xb3NfYnVsayk7Ci0gCU1fQ1BfSU5UT1BUKHVzZV9rdXNlcm9rKTsKLSsJ TV9DUF9JTlRPUFQoZW5hYmxlX2s1dXNlcnMpOwotIAlNX0NQX0lOVE9QVChyZWtleV9saW1pdCk7 Ci0gCU1fQ1BfSU5UT1BUKHJla2V5X2ludGVydmFsKTsKLSAJTV9DUF9JTlRPUFQobG9nX2xldmVs KTsKLUBAIC0zMzUwLDYgKzMzNjAsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQor QEAgLTQyNDcsNiArNDI1MSw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCiAgIyBl bmRpZgogIAlkdW1wX2NmZ19mbXRpbnQoc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBvLT5rZXJiZXJv c191bmlxdWVfY2NhY2hlKTsKICAJZHVtcF9jZmdfZm10aW50KHNLZXJiZXJvc1VzZUt1c2Vyb2ss IG8tPnVzZV9rdXNlcm9rKTsKLSsJZHVtcF9jZmdfZm10aW50KHNHc3NFbmFibGVrNXVzZXJzLCBv LT5lbmFibGVfazV1c2Vycyk7CisrCWR1bXBfY2ZnX2ZtdGludChzR1NTQVBJRW5hYmxlazV1c2Vy cywgby0+ZW5hYmxlX2s1dXNlcnMpOwogICNlbmRpZgogICNpZmRlZiBHU1NBUEkKLSAJZHVtcF9j ZmdfZm10aW50KHNHc3NBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0aW9uKTsKKyAJ ZHVtcF9jZmdfZm10aW50KHNHU1NBUElBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0 aW9uKTsKIGRpZmYgLS1naXQgYS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAotaW5kZXggOTg0M2Y5 NmM1Li41NjkxMDBlNDcgMTAwNjQ0CitpbmRleCA3YzAwM2I4YzUuLmM1NWI2NGM3MyAxMDA2NDQK IC0tLSBhL3NlcnZjb25mLmgKICsrKyBiL3NlcnZjb25mLmgKLUBAIC0xNTMsNiArMTUzLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgewotIAlpbnQgICAgIGtlcmJlcm9zX3VuaXF1ZV9jY2FjaGU7CQkvKiBJ ZiB0cnVlLCB0aGUgYWNxdWlyZWQgdGlja2V0IHdpbGwKLSAJCQkJCQkgKiBiZSBzdG9yZWQgaW4g cGVyLXNlc3Npb24gY2NhY2hlICovCi0gCWludAl1c2Vfa3VzZXJvazsKLSsJaW50CQllbmFibGVf azV1c2VyczsKLSAJaW50ICAgICBnc3NfYXV0aGVudGljYXRpb247CS8qIElmIHRydWUsIHBlcm1p dCBHU1NBUEkgYXV0aGVudGljYXRpb24gKi8KLSAJaW50ICAgICBnc3Nfa2V5ZXg7CQkvKiBJZiB0 cnVlLCBwZXJtaXQgR1NTQVBJIGtleSBleGNoYW5nZSAqLwotIAlpbnQgICAgIGdzc19jbGVhbnVw X2NyZWRzOwkvKiBJZiB0cnVlLCBkZXN0cm95IGNyZWQgY2FjaGUgb24gbG9nb3V0ICovCitAQCAt MzI1LDcgKzMyNSw4IEBAIFNTSENPTkZfSU5URkxBRyhnc3NfZGVsZWdfY3JlZHMsIEdTU0FQSURl bGVnYXRlQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQUwsIDEsIFNTCisgU1NIQ09ORl9JTlRGTEFH KGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0cmljdEFjY2VwdG9yQ2hlY2ssIFNTSENGR19H TE9CQUwsIDEsIFNTSENGR19DT1BZX05PTkUpIFwKKyBTU0hDT05GX0lOVEZMQUcoZ3NzX2tleWV4 LCBHU1NBUElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORSkg XAorIFNTSENPTkZfSU5URkxBRyhnc3Nfc3RvcmVfcmVrZXksIEdTU0FQSVN0b3JlQ3JlZGVudGlh bHNPblJla2V5LCBTU0hDRkdfR0xPQkFMLCAwLCBTU0hDRkdfQ09QWV9OT05FKSBcCistU1NIQ09O Rl9TVFJJTkcoZ3NzX2tleF9hbGdvcml0aG1zLCBHU1NBUElLZXhBbGdvcml0aG1zLCBTU0hDRkdf R0xPQkFMLCBTU0hDRkdfQ09QWV9OT05FKQorK1NTSENPTkZfU1RSSU5HKGdzc19rZXhfYWxnb3Jp dGhtcywgR1NTQVBJS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCwgU1NIQ0ZHX0NPUFlfTk9O RSkgXAorK1NTSENPTkZfSU5URkxBRyhlbmFibGVfazV1c2VycywgR1NTQVBJRW5hYmxlazV1c2Vy cywgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFUQ0gpCisgI2Vsc2UgLyogR1NTQVBJICov CisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTX0dTUyBcCisgU1NIQ09ORl9VTlNVUFBPUlRF RF9JTlQoZ3NzX2F1dGhlbnRpY2F0aW9uLCBHU1NBUElBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FM TCkgXAorQEAgLTMzNCw3ICszMzUsOCBAQCBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3NfZGVs ZWdfY3JlZHMsIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQQorIFNTSENP TkZfVU5TVVBQT1JURURfSU5UKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0cmljdEFjY2Vw dG9yQ2hlY2ssIFNTSENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3Nf a2V5ZXgsIEdTU0FQSUtleUV4Y2hhbmdlLCBTU0hDRkdfR0xPQkFMKSBcCisgU1NIQ09ORl9VTlNV UFBPUlRFRF9JTlQoZ3NzX3N0b3JlX3Jla2V5LCBHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtl eSwgU1NIQ0ZHX0dMT0JBTCkgXAorLVNTSENPTkZfVU5TVVBQT1JURURfU1RSSU5HKGdzc19rZXhf YWxnb3JpdGhtcywgR1NTQVBJS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCkKKytTU0hDT05G X1VOU1VQUE9SVEVEX1NUUklORyhnc3Nfa2V4X2FsZ29yaXRobXMsIEdTU0FQSUtleEFsZ29yaXRo bXMsIFNTSENGR19HTE9CQUwpIFwKKytTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChlbmFibGVfazV1 c2VycywgR1NTQVBJRW5hYmxlazV1c2VycywgU1NIQ0ZHX0FMTCkKKyAjZW5kaWYgLyogR1NTQVBJ ICovCisgCisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTIFwKIGRpZmYgLS1naXQgYS9zc2hk X2NvbmZpZyBiL3NzaGRfY29uZmlnCi1pbmRleCBlYTVhODc4ZTYuLjMzNzEzYzg4NiAxMDA2NDQK K2luZGV4IDc2Mjc5ZDc5NS4uZDM4ZDg5OWE2IDEwMDY0NAogLS0tIGEvc3NoZF9jb25maWcKICsr KyBiL3NzaGRfY29uZmlnCi1AQCAtODIsNiArODIsNyBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNz aC9hdXRob3JpemVkX2tleXMKK0BAIC04Myw2ICs4Myw3IEBAIEF1dGhvcml6ZWRLZXlzRmlsZQku c3NoL2F1dGhvcml6ZWRfa2V5cwogICNHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVzCiAgI0dT U0FQSVN0cmljdEFjY2VwdG9yQ2hlY2sgeWVzCiAgI0dTU0FQSUtleUV4Y2hhbmdlIG5vCkBAIC0x MjksNSArOTEsNSBAQCBpbmRleCBlYTVhODc4ZTYuLjMzNzEzYzg4NiAxMDA2NDQKICAjIFNldCB0 aGlzIHRvICd5ZXMnIHRvIGVuYWJsZSBQQU0gYXV0aGVudGljYXRpb24sIGFjY291bnQgcHJvY2Vz c2luZywKICAjIGFuZCBzZXNzaW9uIHByb2Nlc3NpbmcuIElmIHRoaXMgaXMgZW5hYmxlZCwgUEFN IGF1dGhlbnRpY2F0aW9uIHdpbGwKIC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBh LzAwMjItb3BlbnNzaC02LjhwMS1zc2hkVC1vdXRwdXQucGF0Y2ggYi8wMDIyLW9wZW5zc2gtNi44 cDEtc3NoZFQtb3V0cHV0LnBhdGNoCmluZGV4IGJlYmFkZjMuLmFjZmUzZjggMTAwNjQ0Ci0tLSBh LzAwMjItb3BlbnNzaC02LjhwMS1zc2hkVC1vdXRwdXQucGF0Y2gKKysrIGIvMDAyMi1vcGVuc3No LTYuOHAxLXNzaGRULW91dHB1dC5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNDliZDhhYTE2 MWU1MDVlOWM1OWU5NzI0NmU4OTgxYmUzZmQ5MmY2MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb20gYzVjYzE2NmZmOWVlYmE2YjM0NjAyMmFhMWVlMGU0ZDc4YTJlMWZkZCBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNv bT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRD SCAyMi81NF0gb3BlbnNzaC02LjhwMS1zc2hkVC1vdXRwdXQKK1N1YmplY3Q6IFtQQVRDSCAyMi81 M10gb3BlbnNzaC02LjhwMS1zc2hkVC1vdXRwdXQKIAogIyBhcHBseSB1cHN0cmVhbSBwYXRjaCBh bmQgbWFrZSBzc2hkIC1UIG1vcmUgY29uc2lzdGVudCAoIzExODc1MjEpCiAtLS0KQEAgLTksMTAg KzksMTAgQEAgU3ViamVjdDogW1BBVENIIDIyLzU0XSBvcGVuc3NoLTYuOHAxLXNzaGRULW91dHB1 dAogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCiBkaWZm IC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKLWluZGV4IDhkZTgxZmRjOC4uODA0NTc1 NmZiIDEwMDY0NAoraW5kZXggM2RiZmNjZWE4Li4yNzE0N2ExZTcgMTAwNjQ0CiAtLS0gYS9zZXJ2 Y29uZi5jCiArKysgYi9zZXJ2Y29uZi5jCi1AQCAtMzQwMyw3ICszNDAzLDcgQEAgZHVtcF9jb25m aWcoU2VydmVyT3B0aW9ucyAqbykKK0BAIC00Mjk0LDcgKzQyOTQsNyBAQCBkdW1wX2NvbmZpZyhT ZXJ2ZXJPcHRpb25zICpvKQogIAlkdW1wX2NmZ19zdHJpbmcoc1hBdXRoTG9jYXRpb24sIG8tPnhh dXRoX2xvY2F0aW9uKTsKICAJZHVtcF9jZmdfc3RyaW5nKHNDaXBoZXJzLCBvLT5jaXBoZXJzKTsK ICAJZHVtcF9jZmdfc3RyaW5nKHNNYWNzLCBvLT5tYWNzKTsKQEAgLTIyLDUgKzIyLDUgQEAgaW5k ZXggOGRlODFmZGM4Li44MDQ1NzU2ZmIgMTAwNjQ0CiAgCWR1bXBfY2ZnX3N0cmluZyhzQ2hyb290 RGlyZWN0b3J5LCBvLT5jaHJvb3RfZGlyZWN0b3J5KTsKICAJZHVtcF9jZmdfc3RyaW5nKHNUcnVz dGVkVXNlckNBS2V5cywgby0+dHJ1c3RlZF91c2VyX2NhX2tleXMpOwogLS0gCi0yLjUzLjAKKzIu NTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAyMy1vcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2UtcGVybWlz c2lvbi5wYXRjaCBiLzAwMjMtb3BlbnNzaC02LjdwMS1zZnRwLWZvcmNlLXBlcm1pc3Npb24ucGF0 Y2gKaW5kZXggM2Q3ZjVkMC4uMDQ5YjYxZSAxMDA2NDQKLS0tIGEvMDAyMy1vcGVuc3NoLTYuN3Ax LXNmdHAtZm9yY2UtcGVybWlzc2lvbi5wYXRjaAorKysgYi8wMDIzLW9wZW5zc2gtNi43cDEtc2Z0 cC1mb3JjZS1wZXJtaXNzaW9uLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAzZWE0MWVmOWJm MmRhODgxNGExZjU3OTg5OGE4MzliNTE1MGQ3YjZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQor RnJvbSA3MWIyY2E3YmJmMzk1MTRlOTZkYTU3Mzc1OGQxNTdhN2Q1MjYyNWJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29t PgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENI IDIzLzU0XSBvcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2UtcGVybWlzc2lvbgorU3ViamVjdDogW1BB VENIIDIzLzUzXSBvcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2UtcGVybWlzc2lvbgogCiAjIEFkZCBz ZnRwIG9wdGlvbiB0byBmb3JjZSBtb2RlIG9mIGNyZWF0ZWQgZmlsZXMgKCMxMTkxMDU1KQogLS0t CkBAIC0xMCw3ICsxMCw3IEBAIFN1YmplY3Q6IFtQQVRDSCAyMy81NF0gb3BlbnNzaC02LjdwMS1z ZnRwLWZvcmNlLXBlcm1pc3Npb24KICAyIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9zZnRwLXNlcnZlci44IGIvc2Z0cC1zZXJ2 ZXIuOAotaW5kZXggNTMxMWJmOTI5Li41ZTZlM2FhNDQgMTAwNjQ0CitpbmRleCBkOTA2MGFiOWEu LmNkNWIwMzVkNiAxMDA2NDQKIC0tLSBhL3NmdHAtc2VydmVyLjgKICsrKyBiL3NmdHAtc2VydmVy LjgKIEBAIC0zOCw2ICszOCw3IEBACkBAIC0yMSw3ICsyMSw3IEBAIGluZGV4IDUzMTFiZjkyOS4u NWU2ZTNhYTQ0IDEwMDY0NAogIC5FawogIC5ObQogIC5GbCBRIEFyIHByb3RvY29sX2ZlYXR1cmUK LUBAIC0xMzgsNiArMTM5LDEyIEBAIFNldHMgYW4gZXhwbGljaXQKK0BAIC0xNDksNiArMTUwLDEy IEBAIFNldHMgYW4gZXhwbGljaXQKICAuWHIgdW1hc2sgMgogIHRvIGJlIGFwcGxpZWQgdG8gbmV3 bHktY3JlYXRlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGluc3RlYWQgb2YgdGhlCiAgdXNlcidz IGRlZmF1bHQgbWFzay4KQEAgLTM1LDcgKzM1LDcgQEAgaW5kZXggNTMxMWJmOTI5Li41ZTZlM2Fh NDQgMTAwNjQ0CiAgLlBwCiAgT24gc29tZSBzeXN0ZW1zLAogZGlmZiAtLWdpdCBhL3NmdHAtc2Vy dmVyLmMgYi9zZnRwLXNlcnZlci5jCi1pbmRleCA3YTZlNGZhODguLmQxOGM0YWNiOSAxMDA2NDQK K2luZGV4IGVlZjlhOTZmOC4uNTY3Y2Y2ZTlhIDEwMDY0NAogLS0tIGEvc2Z0cC1zZXJ2ZXIuYwog KysrIGIvc2Z0cC1zZXJ2ZXIuYwogQEAgLTY4LDYgKzY4LDEwIEBAIHN0cnVjdCBzc2hidWYgKm9x dWV1ZTsKQEAgLTc3LDcgKzc3LDcgQEAgaW5kZXggN2E2ZTRmYTg4Li5kMThjNGFjYjkgMTAwNjQ0 CiAgCWlmIChzdGF0dXMgIT0gU1NIMl9GWF9PSykKICAJCXNlbmRfc3RhdHVzKGlkLCBzdGF0dXMp OwogIAlmcmVlKG5hbWUpOwotQEAgLTE4ODYsNyArMTg5Nyw3IEBAIHNmdHBfc2VydmVyX3VzYWdl KHZvaWQpCitAQCAtMTkxMSw3ICsxOTIyLDcgQEAgc2Z0cF9zZXJ2ZXJfdXNhZ2Uodm9pZCkKICAJ ZnByaW50ZihzdGRlcnIsCiAgCSAgICAidXNhZ2U6ICVzIFstZWhSXSBbLWQgc3RhcnRfZGlyZWN0 b3J5XSBbLWYgbG9nX2ZhY2lsaXR5XSAiCiAgCSAgICAiWy1sIGxvZ19sZXZlbF1cblx0Wy1QIGRl bmllZF9yZXF1ZXN0c10gIgpAQCAtODYsNyArODYsNyBAQCBpbmRleCA3YTZlNGZhODguLmQxOGM0 YWNiOSAxMDA2NDQKICAJICAgICIgICAgICAgJXMgLVEgcHJvdG9jb2xfZmVhdHVyZVxuIiwKICAJ ICAgIF9fcHJvZ25hbWUsIF9fcHJvZ25hbWUpOwogIAlleGl0KDEpOwotQEAgLTE5MTAsNyArMTky MSw3IEBAIHNmdHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgcGFz c3dkICp1c2VyX3B3LCBpbnQgcmVzZXRfaGFuZGxlCitAQCAtMTkzNSw3ICsxOTQ2LDcgQEAgc2Z0 cF9zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJf cHcsIGludCByZXNldF9oYW5kbGUKICAJcHcgPSBwd2NvcHkodXNlcl9wdyk7CiAgCiAgCXdoaWxl ICghc2tpcGFyZ3MgJiYgKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsCkBAIC05NSw3ICs5NSw3IEBA IGluZGV4IDdhNmU0ZmE4OC4uZDE4YzRhY2I5IDEwMDY0NAogIAkJc3dpdGNoIChjaCkgewogIAkJ Y2FzZSAnUSc6CiAgCQkJaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAicmVxdWVzdHMiKSAhPSAwKSB7 Ci1AQCAtMTk3Miw2ICsxOTgzLDE1IEBAIHNmdHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBpbnQgcmVzZXRfaGFuZGxlCitAQCAtMTk5 Nyw2ICsyMDA4LDE1IEBAIHNmdHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBz dHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBpbnQgcmVzZXRfaGFuZGxlCiAgCQkJCWZhdGFsKCJJbnZh bGlkIHVtYXNrIFwiJXNcIiIsIG9wdGFyZyk7CiAgCQkJKHZvaWQpdW1hc2soKG1vZGVfdCltYXNr KTsKICAJCQlicmVhazsKQEAgLTExMiw1ICsxMTIsNSBAQCBpbmRleCA3YTZlNGZhODguLmQxOGM0 YWNiOSAxMDA2NDQKICAJCWRlZmF1bHQ6CiAgCQkJc2Z0cF9zZXJ2ZXJfdXNhZ2UoKTsKIC0tIAot Mi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMjQtb3BlbnNzaC03LjJwMi1zMzkwLWNs b3NlZnJvbS5wYXRjaCBiLzAwMjQtb3BlbnNzaC03LjJwMi1zMzkwLWNsb3NlZnJvbS5wYXRjaApp bmRleCBiZDNmNGYzLi4yYzk1NTE4IDEwMDY0NAotLS0gYS8wMDI0LW9wZW5zc2gtNy4ycDItczM5 MC1jbG9zZWZyb20ucGF0Y2gKKysrIGIvMDAyNC1vcGVuc3NoLTcuMnAyLXMzOTAtY2xvc2Vmcm9t LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA2ZjkwNTk4NzZkNDMyM2RlMzNjYTcwNmRhMGU4 ODNkMTQyNzU3ZjQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBkZDk1M2YwNTcyZWY2 YjUzODI1YWZiNTBjYzQ0ZDY1YjIwNDc4MzFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJv bTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBN YXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDI0LzU0XSBvcGVuc3NoLTcu MnAyLXMzOTAtY2xvc2Vmcm9tCitTdWJqZWN0OiBbUEFUQ0ggMjQvNTNdIG9wZW5zc2gtNy4ycDIt czM5MC1jbG9zZWZyb20KIAogIyBtYWtlIHMzOTAgdXNlIC9kZXYvIGNyeXB0byBkZXZpY2VzIC0t IGlnbm9yZSBjbG9zZWZyb20KIC0tLQpAQCAtNDcsNSArNDcsNSBAQCBpbmRleCA0OWE0ZjM1ZmYu LmY2MTEyNDU4NSAxMDA2NDQKICAJKHZvaWQpIGNsb3NlZGlyKGRpcnApOwogIAlyZXR1cm47CiAt LSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDI1LW9wZW5zc2gtNy41cDEtc2Fu ZGJveC5wYXRjaCBiLzAwMjUtb3BlbnNzaC03LjVwMS1zYW5kYm94LnBhdGNoCmluZGV4IGI1YTI0 YTQuLmQyNDY4NWEgMTAwNjQ0Ci0tLSBhLzAwMjUtb3BlbnNzaC03LjVwMS1zYW5kYm94LnBhdGNo CisrKyBiLzAwMjUtb3BlbnNzaC03LjVwMS1zYW5kYm94LnBhdGNoCkBAIC0xLDcgKzEsNyBAQAot RnJvbSAxNjRhMTU5OWVhN2YxNDc5MTlmNmM5MjVlZTE3YzIxODIwYjllN2VlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQorRnJvbSA0Njg4MjgwNDE3ZTRlYTI4YmU3NjgzYjU1NGY5MWUzMWYyMzQx MzZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJl bGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAot U3ViamVjdDogW1BBVENIIDI1LzU0XSBvcGVuc3NoLTcuNXAxLXNhbmRib3gKK1N1YmplY3Q6IFtQ QVRDSCAyNS81M10gb3BlbnNzaC03LjVwMS1zYW5kYm94CiAKICMgU2FuZGJveCBhZGp1c3RtZW50 cyBmb3IgczM5MCBhbmQgYXVkaXQKIC0tLQpAQCAtOSw3ICs5LDcgQEAgU3ViamVjdDogW1BBVENI IDI1LzU0XSBvcGVuc3NoLTcuNXAxLXNhbmRib3gKICAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0 aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jIGIvc2FuZGJv eC1zZWNjb21wLWZpbHRlci5jCi1pbmRleCA3YjI0NDQ5MzAuLmUyMTA0OGYzYSAxMDA2NDQKK2lu ZGV4IGJmNzUzZWVmMi4uYjY1NDEzYzk1IDEwMDY0NAogLS0tIGEvc2FuZGJveC1zZWNjb21wLWZp bHRlci5jCiArKysgYi9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMKIEBAIC0zMDUsNiArMzA1LDkg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciBwcmVhdXRoX2luc25zW10gPSB7CkBA IC01NSw1ICs1NSw1IEBAIGluZGV4IDdiMjQ0NDkzMC4uZTIxMDQ4ZjNhIDEwMDY0NAogIAlTQ19B TExPVyhfX05SX2dldHVpZCksCiAgI2VuZGlmCiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYg LS1naXQgYS8wMDI2LW9wZW5zc2gtNy44cDEtc2NwLWlwdjYucGF0Y2ggYi8wMDI2LW9wZW5zc2gt Ny44cDEtc2NwLWlwdjYucGF0Y2gKaW5kZXggNzFjNzM4Ni4uN2ZhYWNiMCAxMDA2NDQKLS0tIGEv MDAyNi1vcGVuc3NoLTcuOHAxLXNjcC1pcHY2LnBhdGNoCisrKyBiLzAwMjYtb3BlbnNzaC03Ljhw MS1zY3AtaXB2Ni5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gM2U4NmZlYjgyNGYyZjFhN2Vm ZTRiNmI3YjM1YzE0NWJlZjFkMGRkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNDZj NjNiNTJhZmE4MTM2YTQ2YTkwOTRhNjliNGMwMTFmMjJiNDRhYyBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6 IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyNi81NF0g b3BlbnNzaC03LjhwMS1zY3AtaXB2NgorU3ViamVjdDogW1BBVENIIDI2LzUzXSBvcGVuc3NoLTcu OHAxLXNjcC1pcHY2CiAKICMgVW5icmVhayBzY3AgYmV0d2VlbiB0d28gSVB2NiBob3N0cyAoIzE2 MjAzMzMpCiAtLS0KQEAgLTksNyArOSw3IEBAIFN1YmplY3Q6IFtQQVRDSCAyNi81NF0gb3BlbnNz aC03LjhwMS1zY3AtaXB2NgogIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3NjcC5jIGIvc2NwLmMKLWluZGV4IGI1YWQ0NWMxMi4u NTYxOGUyOGU3IDEwMDY0NAoraW5kZXggZmNhNDM5M2YzLi5hYzQzZWM1ZjQgMTAwNjQ0CiAtLS0g YS9zY3AuYwogKysrIGIvc2NwLmMKIEBAIC0xMTY0LDcgKzExNjQsOSBAQCB0b3JlbW90ZShpbnQg YXJnYywgY2hhciAqKmFyZ3YsIGVudW0gc2NwX21vZGVfZSBtb2RlLCBjaGFyICpzZnRwX2RpcmVj dCkKQEAgLTI0LDUgKzI0LDUgQEAgaW5kZXggYjVhZDQ1YzEyLi41NjE4ZTI4ZTcgMTAwNjQ0CiAg CQkJICAgIHRob3N0LCB0YXJnKTsKICAJCQlpZiAoZG9fbG9jYWxfY21kKCZhbGlzdCkgIT0gMCkK IC0tIAotMi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMjctb3BlbnNzaC04LjBwMS1j cnlwdG8tcG9saWNpZXMucGF0Y2ggYi8wMDI3LW9wZW5zc2gtOC4wcDEtY3J5cHRvLXBvbGljaWVz LnBhdGNoCmluZGV4IDhhMWI3ZDQuLjAxNDUxNjMgMTAwNjQ0Ci0tLSBhLzAwMjctb3BlbnNzaC04 LjBwMS1jcnlwdG8tcG9saWNpZXMucGF0Y2gKKysrIGIvMDAyNy1vcGVuc3NoLTguMHAxLWNyeXB0 by1wb2xpY2llcy5wYXRjaApAQCAtMSwxOCArMSwxOCBAQAotRnJvbSAwOTE0NzY2YWVkOTAxNzgw ZmI3NDRiNGJhMDZlNTAwYWQwM2NmNDI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA3 YTVmZjhmNzI4Y2ZiOThjOTBkY2JlNjQ4NzIzZmI0ZDRlZDAyMzAwIE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0 ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDI3LzU0 XSBvcGVuc3NoLTguMHAxLWNyeXB0by1wb2xpY2llcworU3ViamVjdDogW1BBVENIIDI3LzUzXSBv cGVuc3NoLTguMHAxLWNyeXB0by1wb2xpY2llcwogCiAtLS0KLSBzc2hfY29uZmlnLjUgIHwgMTY4 ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIHNzaGRfY29u ZmlnLjUgfCAxODYgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDE0MCBpbnNlcnRpb25zKCspLCAyMTQgZGVsZXRpb25z KC0pCisgc3NoX2NvbmZpZy41ICB8IDE3MiArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHNzaGRfY29uZmlnLjUgfCAxOTMgKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEzOSBpbnNl cnRpb25zKCspLCAyMjYgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9zc2hfY29uZmlnLjUg Yi9zc2hfY29uZmlnLjUKLWluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAoraW5kZXgg MDQ3OTdhMWU5Li5jNGM3MmY1ODcgMTAwNjQ0CiAtLS0gYS9zc2hfY29uZmlnLjUKICsrKyBiL3Nz aF9jb25maWcuNQotQEAgLTQzOCwxNyArNDM4LDEzIEBAIEEgc2luZ2xlIGFyZ3VtZW50IG9mCitA QCAtNDY4LDE4ICs0NjgsMTMgQEAgQSBzaW5nbGUgYXJndW1lbnQgb2YKICBjYXVzZXMgbm8gQ05B TUVzIHRvIGJlIGNvbnNpZGVyZWQgZm9yIGNhbm9uaWNhbGl6YXRpb24uCiAgVGhpcyBpcyB0aGUg ZGVmYXVsdCBiZWhhdmlvdXIuCiAgLkl0IENtIENBU2lnbmF0dXJlQWxnb3JpdGhtcwpAQCAtMjks MTMgKzI5LDE0IEBAIGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAogLWVjZHNhLXNo YTItbmlzdHAzODQsZWNkc2Etc2hhMi1uaXN0cDUyMSwKIC1zay1zc2gtZWQyNTUxOUBvcGVuc3No LmNvbSwKIC1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tLAotLXJzYS1zaGEyLTUx Mixyc2Etc2hhMi0yNTYKKy1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2LAorLXNzaC1tbGRzYTQ0 LWVkMjU1MTlAb3BlbnNzaC5jb20KIC0uRWQKIC0uUHAKICBJZiB0aGUgc3BlY2lmaWVkIGxpc3Qg YmVnaW5zIHdpdGggYQogIC5TcSArCiAgY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgYWxn b3JpdGhtcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBkZWZhdWx0IHNldAotQEAgLTU4NywyMCAr NTgzLDI1IEBAIElmIHRoZSBvcHRpb24gaXMgc2V0IHRvCitAQCAtNjE4LDIwICs2MTMsMjUgQEAg SWYgdGhlIG9wdGlvbiBpcyBzZXQgdG8KICAodGhlIGRlZmF1bHQpLAogIHRoZSBjaGVjayB3aWxs IG5vdCBiZSBleGVjdXRlZC4KICAuSXQgQ20gQ2lwaGVycwpAQCAtNjUsNyArNjYsNyBAQCBpbmRl eCA5ZTUxNjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKICAuUHAKICBUaGUgc3VwcG9ydGVkIGNpcGhl cnMgYXJlOgogIC5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAotQEAgLTYxNiwxMyArNjE3LDYg QEAgYWVzMjU2LWdjbUBvcGVuc3NoLmNvbQorQEAgLTY0NywxMyArNjQ3LDYgQEAgYWVzMjU2LWdj bUBvcGVuc3NoLmNvbQogIGNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tCiAgLkVkCiAgLlBw CkBAIC03OSw3ICs4MCw3IEBAIGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAogIFRo ZSBsaXN0IG9mIGF2YWlsYWJsZSBjaXBoZXJzIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCiAg LlFxIHNzaCAtUSBjaXBoZXIgLgogIC5JdCBDbSBDbGVhckFsbEZvcndhcmRpbmdzCi1AQCAtMTAy Miw2ICsxMDE2LDExIEBAIGNvbW1hbmQgbGluZSB3aWxsIGJlIHBhc3NlZCB1bnRvdWNoZWQgdG8g dGhlIEdTU0FQSSBsaWJyYXJ5LgorQEAgLTEwNjAsNiArMTA1MywxMSBAQCBjb21tYW5kIGxpbmUg d2lsbCBiZSBwYXNzZWQgdW50b3VjaGVkIHRvIHRoZSBHU1NBUEkgbGlicmFyeS4KICBUaGUgZGVm YXVsdCBpcwogIC5EcSBubyAuCiAgLkl0IENtIEdTU0FQSUtleEFsZ29yaXRobXMKQEAgLTkxLDcg KzkyLDcgQEAgaW5kZXggOWU1MTYzNzc0Li4zMDZmYTFkOGEgMTAwNjQ0CiAgVGhlIGxpc3Qgb2Yg a2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgdGhhdCBhcmUgb2ZmZXJlZCBmb3IgR1NTQVBJCiAga2V5 IGV4Y2hhbmdlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCiAgLkJkIC1saXRlcmFsIC1vZmZzZXQgM24K LUBAIC0xMDM0LDkgKzEwMzMsNiBAQCBnc3MtbmlzdHAyNTYtc2hhMjU2LSwKK0BAIC0xMDcyLDkg KzEwNzAsNiBAQCBnc3MtbmlzdHAyNTYtc2hhMjU2LSwKICBnc3MtY3VydmUyNTUxOS1zaGEyNTYt CiAgLkVkCiAgLlBwCkBAIC0xMDEsNyArMTAyLDcgQEAgaW5kZXggOWU1MTYzNzc0Li4zMDZmYTFk OGEgMTAwNjQ0CiAgVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHRvIGNvbm5lY3Rpb25zIHVzaW5n IEdTU0FQSS4KICAuUHAKICBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29y aXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKLUBAIC0xMDU2LDM4ICsxMDUzLDI1IEBA IHdpbGwgbm90IGJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5LAorQEAgLTEwOTcsNDAgKzEwOTIs MjUgQEAgd2lsbCBub3QgYmUgY29udmVydGVkIGF1dG9tYXRpY2FsbHksCiAgYnV0IG1heSBiZSBt YW51YWxseSBoYXNoZWQgdXNpbmcKICAuWHIgc3NoLWtleWdlbiAxIC4KICAuSXQgQ20gSG9zdGJh c2VkQWNjZXB0ZWRBbGdvcml0aG1zCkBAIC0xMzcsMTggKzEzOCwyMCBAQCBpbmRleCA5ZTUxNjM3 NzQuLjMwNmZhMWQ4YSAxMDA2NDQKIC13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2LWNl cnQtdjAxQG9wZW5zc2guY29tLAogLXJzYS1zaGEyLTUxMi1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwK IC1yc2Etc2hhMi0yNTYtY2VydC12MDFAb3BlbnNzaC5jb20sCistc3NoLW1sZHNhNDQtZWQyNTUx OS1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKIC1zc2gtZWQyNTUxOSwKIC1lY2RzYS1zaGEyLW5pc3Rw MjU2LGVjZHNhLXNoYTItbmlzdHAzODQsZWNkc2Etc2hhMi1uaXN0cDUyMSwKIC1zay1zc2gtZWQy NTUxOUBvcGVuc3NoLmNvbSwKIC1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tLAog LXdlYmF1dGhuLXNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20sCi0tcnNhLXNoYTIt NTEyLHJzYS1zaGEyLTI1NgorLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYsCistc3NoLW1sZHNh NDQtZWQyNTUxOUBvcGVuc3NoLmNvbQogLS5FZAogK2F0IHRoZSBoZWFkIG9mIHRoZSBidWlsdC1p biBvcGVuc3NoIGRlZmF1bHQgc2V0LgogIC5QcAogIFRoZQogIC5GbCBRCi1AQCAtMTE0Miw2ICsx MTI2LDE3IEBAIHRvIHByZWZlciB0aGVpciBhbGdvcml0aG1zLgorQEAgLTExODcsNiArMTE2Nywx NyBAQCB0byBwcmVmZXIgdGhlaXIgYWxnb3JpdGhtcy4KICAuUHAKICBUaGUgbGlzdCBvZiBhdmFp bGFibGUgc2lnbmF0dXJlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKICAu UXEgc3NoIC1RIEhvc3RLZXlBbGdvcml0aG1zIC4KQEAgLTE2Niw3ICsxNjksNyBAQCBpbmRleCA5 ZTUxNjM3NzQuLjMwNmZhMWQ4YSAxMDA2NDQKICAuSXQgQ20gSG9zdEtleUFsaWFzCiAgU3BlY2lm aWVzIGFuIGFsaWFzIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKICByZWFsIGhv c3QgbmFtZSB3aGVuIGxvb2tpbmcgdXAgb3Igc2F2aW5nIHRoZSBob3N0IGtleQotQEAgLTEzNjQs NiArMTM1OSwxMSBAQCBpdCBtYXkgYmUgemVybyBvciBtb3JlIG9mOgorQEAgLTEzODUsNiArMTM3 NiwxMSBAQCBpdCBtYXkgYmUgemVybyBvciBtb3JlIG9mOgogIGFuZAogIC5DbSBwYW0gLgogIC5J dCBDbSBLZXhBbGdvcml0aG1zCkBAIC0xNzgsNyArMTgxLDcgQEAgaW5kZXggOWU1MTYzNzc0Li4z MDZmYTFkOGEgMTAwNjQ0CiAgU3BlY2lmaWVzIHRoZSBwZXJtaXR0ZWQgS0VYIChLZXkgRXhjaGFu Z2UpIGFsZ29yaXRobXMgdGhhdCB3aWxsIGJlIHVzZWQgYW5kCiAgdGhlaXIgcHJlZmVyZW5jZSBv cmRlci4KICBUaGUgc2VsZWN0ZWQgYWxnb3JpdGhtIHdpbGwgYmUgdGhlIGZpcnN0IGFsZ29yaXRo bSBpbiB0aGlzIGxpc3QgdGhhdAotQEAgLTEzNzUsMjggKzEzNzQsMTYgQEAgTXVsdGlwbGUgYWxn b3JpdGhtcyBtdXN0IGJlIGNvbW1hLXNlcGFyYXRlZC4KK0BAIC0xMzkzLDI4ICsxMzg5LDE2IEBA IE11bHRpcGxlIGFsZ29yaXRobXMgbXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQuCiAgLlBwCiAgSWYg dGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKICAuU3EgKwpAQCAtMjExLDcgKzIxNCw3 IEBAIGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAogIC5QcAogIFRoZSBsaXN0IG9m IHN1cHBvcnRlZCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1 c2luZwogIC5RcSBzc2ggLVEga2V4IC4KLUBAIC0xNTEwLDM3ICsxNDk4LDMzIEBAIGZ1bmN0aW9u LCBhbmQgYWxsIGNvZGUgaW4gdGhlCitAQCAtMTUzMSwzNyArMTUxNSwzMyBAQCBmdW5jdGlvbiwg YW5kIGFsbCBjb2RlIGluIHRoZQogIGZpbGUuCiAgVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9y IGRlYnVnZ2luZyBhbmQgbm8gb3ZlcnJpZGVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCiAgLkl0 IENtIE1BQ3MKQEAgLTI1OCw3ICsyNjEsNyBAQCBpbmRleCA5ZTUxNjM3NzQuLjMwNmZhMWQ4YSAx MDA2NDQKICBUaGUgbGlzdCBvZiBhdmFpbGFibGUgTUFDIGFsZ29yaXRobXMgbWF5IGFsc28gYmUg b2J0YWluZWQgdXNpbmcKICAuUXEgc3NoIC1RIG1hYyAuCiAgLkl0IENtIE5vSG9zdEF1dGhlbnRp Y2F0aW9uRm9yTG9jYWxob3N0Ci1AQCAtMTcyOSw0MSArMTcxMywzMSBAQCBpbnN0ZWFkIG9mIGNv bnRpbnVpbmcgdG8gZXhlY3V0ZSBhbmQgcGFzcyBkYXRhLgorQEAgLTE3NTAsNDMgKzE3MzAsMzEg QEAgaW5zdGVhZCBvZiBjb250aW51aW5nIHRvIGV4ZWN1dGUgYW5kIHBhc3MgZGF0YS4KICBUaGUg ZGVmYXVsdCBpcwogIC5DbSBubyAuCiAgLkl0IENtIFB1YmtleUFjY2VwdGVkQWxnb3JpdGhtcwpA QCAtMjk1LDEyICsyOTgsMTQgQEAgaW5kZXggOWU1MTYzNzc0Li4zMDZmYTFkOGEgMTAwNjQ0CiAt d2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKIC1y c2Etc2hhMi01MTItY2VydC12MDFAb3BlbnNzaC5jb20sCiAtcnNhLXNoYTItMjU2LWNlcnQtdjAx QG9wZW5zc2guY29tLAorLXNzaC1tbGRzYTQ0LWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20s CiAtc3NoLWVkMjU1MTksCiAtZWNkc2Etc2hhMi1uaXN0cDI1NixlY2RzYS1zaGEyLW5pc3RwMzg0 LGVjZHNhLXNoYTItbmlzdHA1MjEsCiAtc2stc3NoLWVkMjU1MTlAb3BlbnNzaC5jb20sCiAtc2st ZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKIC13ZWJhdXRobi1zay1lY2RzYS1zaGEy LW5pc3RwMjU2QG9wZW5zc2guY29tLAotLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYKKy1yc2Et c2hhMi01MTIscnNhLXNoYTItMjU2LAorLXNzaC1tbGRzYTQ0LWVkMjU1MTlAb3BlbnNzaC5jb20K IC0uRWQKICtidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0LgogIC5QcApAQCAtMzEyLDcgKzMx Nyw3IEBAIGluZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAogIC5JdCBDbSBQdWJrZXlB dXRoZW50aWNhdGlvbgogIFNwZWNpZmllcyB3aGV0aGVyIHRvIHRyeSBwdWJsaWMga2V5IGF1dGhl bnRpY2F0aW9uLgogIFRoZSBhcmd1bWVudCB0byB0aGlzIGtleXdvcmQgbXVzdCBiZQotQEAgLTI1 MTcsNyArMjQ5MSw5IEBAIGZvciB0aG9zZSB1c2VycyB3aG8gZG8gbm90IGhhdmUgYSBjb25maWd1 cmF0aW9uIGZpbGUuCitAQCAtMjU0MCw3ICsyNTA4LDkgQEAgZm9yIHRob3NlIHVzZXJzIHdobyBk byBub3QgaGF2ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KICBUaGlzIGZpbGUgbXVzdCBiZSB3b3Js ZC1yZWFkYWJsZS4KICAuRWwKICAuU2ggU0VFIEFMU08KQEAgLTMyNCwxMCArMzI5LDEwIEBAIGlu ZGV4IDllNTE2Mzc3NC4uMzA2ZmExZDhhIDEwMDY0NAogIC5BbiAtbm9zcGxpdAogIE9wZW5TU0gg aXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBhbmQgZnJlZQogZGlmZiAtLWdpdCBhL3Nz aGRfY29uZmlnLjUgYi9zc2hkX2NvbmZpZy41Ci1pbmRleCAxNzYyODc0YzQuLjFkMTZkYWJhZiAx MDA2NDQKK2luZGV4IDAwNzdlZTA5Ni4uYjcyNzU3ODk1IDEwMDY0NAogLS0tIGEvc3NoZF9jb25m aWcuNQogKysrIGIvc3NoZF9jb25maWcuNQotQEAgLTM4MywxNyArMzgzLDEzIEBAIElmIHRoZSBh cmd1bWVudCBpcworQEAgLTM4MywxOCArMzgzLDEzIEBAIElmIHRoZSBhcmd1bWVudCBpcwogIHRo ZW4gbm8gYmFubmVyIGlzIGRpc3BsYXllZC4KICBCeSBkZWZhdWx0LCBubyBiYW5uZXIgaXMgZGlz cGxheWVkLgogIC5JdCBDbSBDQVNpZ25hdHVyZUFsZ29yaXRobXMKQEAgLTM0NCwxMyArMzQ5LDE0 IEBAIGluZGV4IDE3NjI4NzRjNC4uMWQxNmRhYmFmIDEwMDY0NAogLWVjZHNhLXNoYTItbmlzdHAz ODQsZWNkc2Etc2hhMi1uaXN0cDUyMSwKIC1zay1zc2gtZWQyNTUxOUBvcGVuc3NoLmNvbSwKIC1z ay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tLAotLXJzYS1zaGEyLTUxMixyc2Etc2hh Mi0yNTYKKy1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2LAorLXNzaC1tbGRzYTQ0LWVkMjU1MTlA b3BlbnNzaC5jb20KIC0uRWQKIC0uUHAKICBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdp dGggYQogIC5TcSArCiAgY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyB3 aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBkZWZhdWx0IHNldAotQEAgLTUzNywyMCArNTMzLDI1IEBA IFRoZSBkZWZhdWx0IGlzCitAQCAtNTM4LDIwICs1MzMsMjUgQEAgVGhlIGRlZmF1bHQgaXMKICBp bmRpY2F0aW5nIG5vdCB0bwogIC5YciBjaHJvb3QgMiAuCiAgLkl0IENtIENpcGhlcnMKQEAgLTM4 MCw3ICszODYsNyBAQCBpbmRleCAxNzYyODc0YzQuLjFkMTZkYWJhZiAxMDA2NDQKICAuUHAKICBU aGUgc3VwcG9ydGVkIGNpcGhlcnMgYXJlOgogIC5QcAotQEAgLTU3NywxMyArNTc4LDYgQEAgYWVz MjU2LWdjbUBvcGVuc3NoLmNvbQorQEAgLTU3OCwxMyArNTc4LDYgQEAgYWVzMjU2LWdjbUBvcGVu c3NoLmNvbQogIGNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tCiAgLkVsCiAgLlBwCkBAIC0z OTQsNyArNDAwLDcgQEAgaW5kZXggMTc2Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CiAgVGhlIGxp c3Qgb2YgYXZhaWxhYmxlIGNpcGhlcnMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKICAuUXEg c3NoIC1RIGNpcGhlciAuCiAgLkl0IENtIENsaWVudEFsaXZlQ291bnRNYXgKLUBAIC03ODksNTgg Kzc4Myw0NiBAQCBGb3IgdGhpcyB0byB3b3JrCitAQCAtNzk4LDYwICs3OTEsNDYgQEAgRm9yIHRo aXMgdG8gd29yawogIC5DbSBHU1NBUElLZXlFeGNoYW5nZQogIG5lZWRzIHRvIGJlIGVuYWJsZWQg aW4gdGhlIHNlcnZlciBhbmQgYWxzbyB1c2VkIGJ5IHRoZSBjbGllbnQuCiAgLkl0IENtIEdTU0FQ SUtleEFsZ29yaXRobXMKQEAgLTQ2MSwxOCArNDY3LDIwIEBAIGluZGV4IDE3NjI4NzRjNC4uMWQx NmRhYmFmIDEwMDY0NAogLXdlYmF1dGhuLXNrLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFA b3BlbnNzaC5jb20sCiAtcnNhLXNoYTItNTEyLWNlcnQtdjAxQG9wZW5zc2guY29tLAogLXJzYS1z aGEyLTI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1zc2gtbWxkc2E0NC1lZDI1NTE5LWNlcnQt djAxQG9wZW5zc2guY29tLAogLXNzaC1lZDI1NTE5LAogLWVjZHNhLXNoYTItbmlzdHAyNTYsZWNk c2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1zaGEyLW5pc3RwNTIxLAogLXNrLXNzaC1lZDI1NTE5QG9w ZW5zc2guY29tLAogLXNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20sCiAtd2ViYXV0 aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKLS1yc2Etc2hhMi01MTIscnNh LXNoYTItMjU2CistcnNhLXNoYTItNTEyLHJzYS1zaGEyLTI1NiwKKy1zc2gtbWxkc2E0NC1lZDI1 NTE5QG9wZW5zc2guY29tCiAtLkVkCiArdGhlIGhlYWQgb2YgdGhlIGJ1aWx0LWluIG9wZW5zc2gg ZGVmYXVsdCBzZXQuCiAgLlBwCiAgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNpZ25hdHVyZSBhbGdv cml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCiAgLlFxIHNzaCAtUSBIb3N0YmFzZWRB Y2NlcHRlZEFsZ29yaXRobXMgLgotQEAgLTkwNCwyNyArODg2LDEzIEBAIGlzIHNwZWNpZmllZCwg dGhlIGxvY2F0aW9uIG9mIHRoZSBzb2NrZXQgd2lsbCBiZSByZWFkIGZyb20gdGhlCitAQCAtOTE5 LDI5ICs4OTgsMTMgQEAgaXMgc3BlY2lmaWVkLCB0aGUgbG9jYXRpb24gb2YgdGhlIHNvY2tldCB3 aWxsIGJlIHJlYWQgZnJvbSB0aGUKICAuRXYgU1NIX0FVVEhfU09DSwogIGVudmlyb25tZW50IHZh cmlhYmxlLgogIC5JdCBDbSBIb3N0S2V5QWxnb3JpdGhtcwpAQCAtNDk0LDE4ICs1MDIsMjAgQEAg aW5kZXggMTc2Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CiAtd2ViYXV0aG4tc2stZWNkc2Etc2hh Mi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKIC1yc2Etc2hhMi01MTItY2VydC12MDFA b3BlbnNzaC5jb20sCiAtcnNhLXNoYTItMjU2LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNzaC1t bGRzYTQ0LWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20sCiAtc3NoLWVkMjU1MTksCiAtZWNk c2Etc2hhMi1uaXN0cDI1NixlY2RzYS1zaGEyLW5pc3RwMzg0LGVjZHNhLXNoYTItbmlzdHA1MjEs CiAtc2stc3NoLWVkMjU1MTlAb3BlbnNzaC5jb20sCiAtc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBv cGVuc3NoLmNvbSwKIC13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29t LAotLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYKKy1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2 LAorLXNzaC1tbGRzYTQ0LWVkMjU1MTlAb3BlbnNzaC5jb20KIC0uRWQKIC0uUHAKICBUaGUgbGlz dCBvZiBhdmFpbGFibGUgc2lnbmF0dXJlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQg dXNpbmcKICAuUXEgc3NoIC1RIEhvc3RLZXlBbGdvcml0aG1zIC4KICAuSXQgQ20gSWdub3JlUmhv c3RzCi1AQCAtMTA3MCw2ICsxMDM4LDExIEBAIFNwZWNpZmllcyB3aGV0aGVyIHRvIGxvb2sgYXQg Lms1bG9naW4gZmlsZSBmb3IgdXNlcidzIGFsaWFzZXMuCitAQCAtMTA4Nyw2ICsxMDUwLDExIEBA IFNwZWNpZmllcyB3aGV0aGVyIHRvIGxvb2sgYXQgLms1bG9naW4gZmlsZSBmb3IgdXNlcidzIGFs aWFzZXMuCiAgVGhlIGRlZmF1bHQgaXMKICAuQ20geWVzIC4KICAuSXQgQ20gS2V4QWxnb3JpdGht cwpAQCAtNTE3LDcgKzUyNyw3IEBAIGluZGV4IDE3NjI4NzRjNC4uMWQxNmRhYmFmIDEwMDY0NAog IFNwZWNpZmllcyB0aGUgcGVybWl0dGVkIEtFWCAoS2V5IEV4Y2hhbmdlKSBhbGdvcml0aG1zIHRo YXQgdGhlIHNlcnZlciB3aWxsCiAgb2ZmZXIgdG8gY2xpZW50cy4KICBUaGUgb3JkZXJpbmcgb2Yg dGhpcyBsaXN0IGlzIG5vdCBpbXBvcnRhbnQsIGFzIHRoZSBjbGllbnQgc3BlY2lmaWVzIHRoZQot QEAgLTEwNzgsMTYgKzEwNTEsMTYgQEAgTXVsdGlwbGUgYWxnb3JpdGhtcyBtdXN0IGJlIGNvbW1h LXNlcGFyYXRlZC4KK0BAIC0xMDk1LDE2ICsxMDYzLDE2IEBAIE11bHRpcGxlIGFsZ29yaXRobXMg bXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQuCiAgLlBwCiAgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJl Z2lucyB3aXRoIGEKICAuU3EgKwpAQCAtNTM4LDcgKzU0OCw3IEBAIGluZGV4IDE3NjI4NzRjNC4u MWQxNmRhYmFmIDEwMDY0NAogIC5QcAogIFRoZSBzdXBwb3J0ZWQgYWxnb3JpdGhtcyBhcmU6CiAg LlBwCi1AQCAtMTEyNCwxNCArMTA5Nyw2IEBAIHNudHJ1cDc2MXgyNTUxOS1zaGE1MTIKK0BAIC0x MTQzLDE0ICsxMTExLDYgQEAgc250cnVwNzYxeDI1NTE5LXNoYTUxMgogIHNudHJ1cDc2MXgyNTUx OS1zaGE1MTJAb3BlbnNzaC5jb20KICAuRWwKICAuUHAKQEAgLTU1Myw3ICs1NjMsNyBAQCBpbmRl eCAxNzYyODc0YzQuLjFkMTZkYWJhZiAxMDA2NDQKICBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQga2V5 IGV4Y2hhbmdlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKICAuUXEgc3No IC1RIEtleEFsZ29yaXRobXMgLgogIC5JdCBDbSBMaXN0ZW5BZGRyZXNzCi1AQCAtMTIxOCwyMSAr MTE4MywyNiBAQCBmdW5jdGlvbiwgYW5kIGFsbCBjb2RlIGluIHRoZQorQEAgLTEyMzcsMjEgKzEx OTcsMjYgQEAgZnVuY3Rpb24sIGFuZCBhbGwgY29kZSBpbiB0aGUKICBmaWxlLgogIFRoaXMgb3B0 aW9uIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgYW5kIG5vIG92ZXJyaWRlcyBhcmUgZW5hYmxl ZCBieSBkZWZhdWx0LgogIC5JdCBDbSBNQUNzCkBAIC01ODQsNyArNTk0LDcgQEAgaW5kZXggMTc2 Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CiAgLlBwCiAgVGhlIGFsZ29yaXRobXMgdGhhdCBjb250 YWluCiAgLlFxIC1ldG0KLUBAIC0xMjc1LDE1ICsxMjQ1LDYgQEAgdW1hYy02NC1ldG1Ab3BlbnNz aC5jb20KK0BAIC0xMjk0LDE1ICsxMjU5LDYgQEAgdW1hYy02NC1ldG1Ab3BlbnNzaC5jb20KICB1 bWFjLTEyOC1ldG1Ab3BlbnNzaC5jb20KICAuRWwKICAuUHAKQEAgLTYwMCw3ICs2MTAsNyBAQCBp bmRleCAxNzYyODc0YzQuLjFkMTZkYWJhZiAxMDA2NDQKICBUaGUgbGlzdCBvZiBhdmFpbGFibGUg TUFDIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKICAuUXEgc3NoIC1RIG1h YyAuCiAgLkl0IENtIE1hdGNoCi1AQCAtMTc3MywzOCArMTczNCwyNSBAQCBvciBlcXVpdmFsZW50 LikKK0BAIC0xNzkyLDQwICsxNzQ4LDI1IEBAIG9yIGVxdWl2YWxlbnQuKQogIFRoZSBkZWZhdWx0 IGlzCiAgLkNtIHllcyAuCiAgLkl0IENtIFB1YmtleUFjY2VwdGVkQWxnb3JpdGhtcwpAQCAtNjM3 LDE4ICs2NDcsMjAgQEAgaW5kZXggMTc2Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CiAtd2ViYXV0 aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKIC1yc2Etc2hh Mi01MTItY2VydC12MDFAb3BlbnNzaC5jb20sCiAtcnNhLXNoYTItMjU2LWNlcnQtdjAxQG9wZW5z c2guY29tLAorLXNzaC1tbGRzYTQ0LWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20sCiAtc3No LWVkMjU1MTksCiAtZWNkc2Etc2hhMi1uaXN0cDI1NixlY2RzYS1zaGEyLW5pc3RwMzg0LGVjZHNh LXNoYTItbmlzdHA1MjEsCiAtc2stc3NoLWVkMjU1MTlAb3BlbnNzaC5jb20sCiAtc2stZWNkc2Et c2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKIC13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3Rw MjU2QG9wZW5zc2guY29tLAotLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYKKy1yc2Etc2hhMi01 MTIscnNhLXNoYTItMjU2LAorLXNzaC1tbGRzYTQ0LWVkMjU1MTlAb3BlbnNzaC5jb20KIC0uRWQK ICtidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0LgogIC5QcAogIFRoZSBsaXN0IG9mIGF2YWls YWJsZSBzaWduYXR1cmUgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwogIC5R cSBzc2ggLVEgUHVia2V5QWNjZXB0ZWRBbGdvcml0aG1zIC4KLUBAIC0yMzE3LDcgKzIyNjUsOSBA QCBUaGlzIGZpbGUgc2hvdWxkIGJlIHdyaXRhYmxlIGJ5IHJvb3Qgb25seSwgYnV0IGl0IGlzIHJl Y29tbWVuZGVkCitAQCAtMjMzOCw3ICsyMjc5LDkgQEAgVGhpcyBmaWxlIHNob3VsZCBiZSB3cml0 YWJsZSBieSByb290IG9ubHksIGJ1dCBpdCBpcyByZWNvbW1lbmRlZAogIC5FbAogIC5TaCBTRUUg QUxTTwogIC5YciBzZnRwLXNlcnZlciA4ICwKQEAgLTY2MCw1ICs2NzIsNSBAQCBpbmRleCAxNzYy ODc0YzQuLjFkMTZkYWJhZiAxMDA2NDQKICAuQW4gLW5vc3BsaXQKICBPcGVuU1NIIGlzIGEgZGVy aXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgYW5kIGZyZWUKIC0tIAotMi41My4wCisyLjU1LjAKIAoK ZGlmZiAtLWdpdCBhLzAwMjgtb3BlbnNzaC04LjBwMS1vcGVuc3NsLWtkZi5wYXRjaCBiLzAwMjgt b3BlbnNzaC04LjBwMS1vcGVuc3NsLWtkZi5wYXRjaAppbmRleCAwNTNkYWFkLi45YzNkNThjIDEw MDY0NAotLS0gYS8wMDI4LW9wZW5zc2gtOC4wcDEtb3BlbnNzbC1rZGYucGF0Y2gKKysrIGIvMDAy OC1vcGVuc3NoLTguMHAxLW9wZW5zc2wta2RmLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAx YTJlNDA2OGY5OTdjMWE5ZWQ0MTc5NjcxMTYyMjAxZjc2NmYyMGI4IE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQorRnJvbSAxZmRkOGY5ZGRiMWIyZTFlMGQ0ZjdkOTdlNWU3ZTE3Yjc0YTg1YTZhIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVj dDogW1BBVENIIDI4LzU0XSBvcGVuc3NoLTguMHAxLW9wZW5zc2wta2RmCitTdWJqZWN0OiBbUEFU Q0ggMjgvNTNdIG9wZW5zc2gtOC4wcDEtb3BlbnNzbC1rZGYKIAogIyBVc2UgT3BlblNTTCBLREYg KCMxNjMxNzYxKQogLS0tCkBAIC0xMCwxMCArMTAsMTAgQEAgU3ViamVjdDogW1BBVENIIDI4LzU0 XSBvcGVuc3NoLTguMHAxLW9wZW5zc2wta2RmCiAgMiBmaWxlcyBjaGFuZ2VkLCAxMDggaW5zZXJ0 aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRl eCA3NTU3NmI0NWQuLjg2ZjBlOWUwOSAxMDA2NDQKK2luZGV4IGNiNDY5MDNmNC4uMzk0YWNjM2Q4 IDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC0zMjQ4 LDYgKzMyNDgsNyBAQCBpZiB0ZXN0ICJ4JG9wZW5zc2wiID0gInh5ZXMiIDsgdGhlbgorQEAgLTMy NjEsNiArMzI2MSw3IEBAIGlmIHRlc3QgIngkb3BlbnNzbCIgPSAieHllcyIgOyB0aGVuCiAgCQlI TUFDX0NUWF9pbml0IFwKICAJCVJTQV9nZW5lcmF0ZV9rZXlfZXggXAogIAkJUlNBX2dldF9kZWZh dWx0X21ldGhvZCBcCkBAIC0yMiw3ICsyMiw3IEBAIGluZGV4IDc1NTc2YjQ1ZC4uODZmMGU5ZTA5 IDEwMDY0NAogIAogIAkjIExpYnJlU1NML09wZW5TU0wgQVBJIGRpZmZlcmVuY2VzCiBkaWZmIC0t Z2l0IGEva2V4LmMgYi9rZXguYwotaW5kZXggMzYwOGE1NTA0Li41NGU3MTE4MTAgMTAwNjQ0Citp bmRleCAxYjhmMWMzYzUuLjY5ODFiNTlmNSAxMDA2NDQKIC0tLSBhL2tleC5jCiArKysgYi9rZXgu YwogQEAgLTM3LDYgKzM3LDExIEBACkBAIC0zNyw3ICszNyw3IEBAIGluZGV4IDM2MDhhNTUwNC4u NTRlNzExODEwIDEwMDY0NAogICNlbmRpZgogIAogICNpbmNsdWRlICJzc2guaCIKLUBAIC0xMDgz LDYgKzEwODgsMTA3IEBAIGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qgc3NoICpzc2gsIHVpbnQzMl90 IHNlcSkKK0BAIC0xMDg2LDYgKzEwOTEsMTA3IEBAIGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qgc3No ICpzc2gsIHVpbnQzMl90IHNlcSkKICAJcmV0dXJuIHI7CiAgfQogIApAQCAtMTQ1LDcgKzE0NSw3 IEBAIGluZGV4IDM2MDhhNTUwNC4uNTRlNzExODEwIDEwMDY0NAogIHN0YXRpYyBpbnQKICBkZXJp dmVfa2V5KHN0cnVjdCBzc2ggKnNzaCwgaW50IGlkLCB1X2ludCBuZWVkLCB1X2NoYXIgKmhhc2gs IHVfaW50IGhhc2hsZW4sCiAgICAgIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNoYXJlZF9zZWNyZXQs IHVfY2hhciAqKmtleXApCi1AQCAtMTE0Niw2ICsxMjUyLDcgQEAgZGVyaXZlX2tleShzdHJ1Y3Qg c3NoICpzc2gsIGludCBpZCwgdV9pbnQgbmVlZCwgdV9jaGFyICpoYXNoLCB1X2ludCBoYXNobGVu LAorQEAgLTExNDksNiArMTI1NSw3IEBAIGRlcml2ZV9rZXkoc3RydWN0IHNzaCAqc3NoLCBpbnQg aWQsIHVfaW50IG5lZWQsIHVfY2hhciAqaGFzaCwgdV9pbnQgaGFzaGxlbiwKICAJc3NoX2RpZ2Vz dF9mcmVlKGhhc2hjdHgpOwogIAlyZXR1cm4gcjsKICB9CkBAIC0xNTQsNSArMTU0LDUgQEAgaW5k ZXggMzYwOGE1NTA0Li41NGU3MTE4MTAgMTAwNjQ0CiAgI2RlZmluZSBOS0VZUwk2CiAgaW50CiAt LSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDI5LW9wZW5zc2gtOC4ycDEtdmlz aWJpbGl0eS5wYXRjaCBiLzAwMjktb3BlbnNzaC04LjJwMS12aXNpYmlsaXR5LnBhdGNoCmluZGV4 IDM0NjFlZmEuLjQwMDhjMGMgMTAwNjQ0Ci0tLSBhLzAwMjktb3BlbnNzaC04LjJwMS12aXNpYmls aXR5LnBhdGNoCisrKyBiLzAwMjktb3BlbnNzaC04LjJwMS12aXNpYmlsaXR5LnBhdGNoCkBAIC0x LDcgKzEsNyBAQAotRnJvbSAwM2Y5NjQ5OGMzYjFjNWEwMTAxNGE0N2E4MDBmOTQ0MzBjN2M5MmNl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAwYzgzODAyNDNhYTQ3NDE5MTg2ZjEyMDcw YjQxMTU4NDZiZjliNDI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJl bHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0 MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDI5LzU0XSBvcGVuc3NoLTguMnAxLXZpc2liaWxp dHkKK1N1YmplY3Q6IFtQQVRDSCAyOS81M10gb3BlbnNzaC04LjJwMS12aXNpYmlsaXR5CiAKICMg c2stZHVtbXkuc28gYnVpbHQgd2l0aCAtZnZpc2liaWxpdHk9aGlkZGVuIGRvZXMgbm90IHdvcmsK IC0tLQpAQCAtOSw3ICs5LDcgQEAgU3ViamVjdDogW1BBVENIIDI5LzU0XSBvcGVuc3NoLTguMnAx LXZpc2liaWxpdHkKICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9u cygtKQogCiBkaWZmIC0tZ2l0IGEvcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LmMgYi9y ZWdyZXNzL21pc2Mvc2stZHVtbXkvc2stZHVtbXkuYwotaW5kZXggNGM5NmU4ODI3Li40YWY1MjA5 ZGIgMTAwNjQ0CitpbmRleCBjYmJiYTc0NTkuLmYxYjNmMDYwYiAxMDA2NDQKIC0tLSBhL3JlZ3Jl c3MvbWlzYy9zay1kdW1teS9zay1kdW1teS5jCiArKysgYi9yZWdyZXNzL21pc2Mvc2stZHVtbXkv c2stZHVtbXkuYwogQEAgLTgwLDcgKzgwLDcgQEAgc2tkZWJ1Zyhjb25zdCBjaGFyICpmdW5jLCBj b25zdCBjaGFyICpmbXQsIC4uLikKQEAgLTQ5LDUgKzQ5LDUgQEAgaW5kZXggNGM5NmU4ODI3Li40 YWY1MjA5ZGIgMTAwNjQ0CiAgICAgIHN0cnVjdCBza19yZXNpZGVudF9rZXkgKioqcmtzLCBzaXpl X3QgKm5ya3MpCiAgewogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAzMC1v cGVuc3NoLTguMnAxLXgxMS13aXRob3V0LWlwdjYucGF0Y2ggYi8wMDMwLW9wZW5zc2gtOC4ycDEt eDExLXdpdGhvdXQtaXB2Ni5wYXRjaAppbmRleCA4NzYwMTMyLi4zNzNlODg5IDEwMDY0NAotLS0g YS8wMDMwLW9wZW5zc2gtOC4ycDEteDExLXdpdGhvdXQtaXB2Ni5wYXRjaAorKysgYi8wMDMwLW9w ZW5zc2gtOC4ycDEteDExLXdpdGhvdXQtaXB2Ni5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20g ZWZjYTFmNTRkOGFmYzg2N2YzOTg5YjVlZDc5MDA1NGRlOTQyY2IwYyBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKK0Zyb20gYTI5ZGYyNWIxZWQwZDI5NDVkMDk5MGJjN2NhODkxOGMxNmM3ZDI2NCBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0 QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1Ympl Y3Q6IFtQQVRDSCAzMC81NF0gb3BlbnNzaC04LjJwMS14MTEtd2l0aG91dC1pcHY2CitTdWJqZWN0 OiBbUEFUQ0ggMzAvNTNdIG9wZW5zc2gtOC4ycDEteDExLXdpdGhvdXQtaXB2NgogCiAjIERvIG5v dCBicmVhayBYMTEgd2l0aG91dCBJUHY2CiAtLS0KQEAgLTksMTAgKzksMTAgQEAgU3ViamVjdDog W1BBVENIIDMwLzU0XSBvcGVuc3NoLTguMnAxLXgxMS13aXRob3V0LWlwdjYKICAxIGZpbGUgY2hh bmdlZCwgMTAgaW5zZXJ0aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvY2hhbm5lbHMuYyBiL2NoYW5u ZWxzLmMKLWluZGV4IDcxY2M2N2QxNy4uMTRkNTM2ZDY0IDEwMDY0NAoraW5kZXggZmNkODAyODhm Li5iYWU4NGU1ZjkgMTAwNjQ0CiAtLS0gYS9jaGFubmVscy5jCiArKysgYi9jaGFubmVscy5jCi1A QCAtNTEzMiw2ICs1MTMyLDE2IEBAIHgxMV9jcmVhdGVfZGlzcGxheV9pbmV0KHN0cnVjdCBzc2gg KnNzaCwgaW50IHgxMV9kaXNwbGF5X29mZnNldCwKK0BAIC01MTQxLDYgKzUxNDEsMTYgQEAgeDEx X2NyZWF0ZV9kaXNwbGF5X2luZXQoc3RydWN0IHNzaCAqc3NoLCBpbnQgeDExX2Rpc3BsYXlfb2Zm c2V0LAogIAkJCQlkZWJ1ZzJfZigiYmluZCBwb3J0ICVkOiAlLjEwMHMiLCBwb3J0LAogIAkJCQkg ICAgc3RyZXJyb3IoZXJybm8pKTsKICAJCQkJY2xvc2Uoc29jayk7CkBAIC0zMCw1ICszMCw1IEBA IGluZGV4IDcxY2M2N2QxNy4uMTRkNTM2ZDY0IDEwMDY0NAogIAkJCQkJY2xvc2Uoc29ja3Nbbl0p OwogIAkJCQludW1fc29ja3MgPSAwOwogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0 IGEvMDAzMS1vcGVuc3NoLTguMHAxLXByZXNlcnZlLXBhbS1lcnJvcnMucGF0Y2ggYi8wMDMxLW9w ZW5zc2gtOC4wcDEtcHJlc2VydmUtcGFtLWVycm9ycy5wYXRjaAppbmRleCAyODk0ZWJjLi5hZDgz ODJjIDEwMDY0NAotLS0gYS8wMDMxLW9wZW5zc2gtOC4wcDEtcHJlc2VydmUtcGFtLWVycm9ycy5w YXRjaAorKysgYi8wMDMxLW9wZW5zc2gtOC4wcDEtcHJlc2VydmUtcGFtLWVycm9ycy5wYXRjaApA QCAtMSw3ICsxLDcgQEAKLUZyb20gODIwMzgwM2E5M2FkNmI4MDdhOTQzMjQxNTZlZjg2NmI0NWNj OGVhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNzRkMTYwYTk1MWMzOTBlMmM2OTBi ZjM0NjJiNjQzYjczMjhlM2I4OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRy eSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUg MTM6NDM6MjkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAzMS81NF0gb3BlbnNzaC04LjBwMS1wcmVz ZXJ2ZS1wYW0tZXJyb3JzCitTdWJqZWN0OiBbUEFUQ0ggMzEvNTNdIG9wZW5zc2gtOC4wcDEtcHJl c2VydmUtcGFtLWVycm9ycwogCiAjIHNzaGQgcHJvdmlkZXMgUEFNIGFuIGluY29ycmVjdCBlcnJv ciBjb2RlICgjMTg3OTUwMykKIC0tLQpAQCAtNTMsNSArNTMsNSBAQCBpbmRleCAzZjM0MmY5ZTEu LmQzZGNkMDM3YiAxMDA2NDQKICAJCQkJc3NocGFtX3NldF9tYXh0cmllc19yZWFjaGVkKDEpOwog IAkJCS8qIEZBTExUSFJPVUdIICovCiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQg YS8wMDMyLW9wZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoLnBhdGNoIGIvMDAzMi1vcGVuc3No LTguN3AxLXNjcC1raWxsLXN3aXRjaC5wYXRjaAppbmRleCA5NDdhNmI5Li42YmEzMTAwIDEwMDY0 NAotLS0gYS8wMDMyLW9wZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoLnBhdGNoCisrKyBiLzAw MzItb3BlbnNzaC04LjdwMS1zY3Ata2lsbC1zd2l0Y2gucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1G cm9tIDYxYWNjNWU5NGVhMDg3ZGIyMDUwNDc3N2U3NGJkYjU1OTE3NjIwNTYgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCitGcm9tIGVlMzg1ZGZlNTQxNDJiMWY4YzAzZjIwYjhhNjNiOWY4ZjFiNTJi M2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVs ZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1T dWJqZWN0OiBbUEFUQ0ggMzIvNTRdIG9wZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoCitTdWJq ZWN0OiBbUEFUQ0ggMzIvNTNdIG9wZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoCiAKICMgSW1w bGVtZW50IGtpbGwgc3dpdGNoIGZvciBTQ1AgcHJvdG9jb2wKIC0tLQpAQCAtMTEsMTIgKzExLDEy IEBAIFN1YmplY3Q6IFtQQVRDSCAzMi81NF0gb3BlbnNzaC04LjdwMS1zY3Ata2lsbC1zd2l0Y2gK ICAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykKIAogZGlmZiAtLWdpdCBhL3BhdGhu YW1lcy5oIGIvcGF0aG5hbWVzLmgKLWluZGV4IGFlMDFjNjllMi4uODBkYjc2ZTAwIDEwMDY0NAor aW5kZXggMmYwYjlmNGY2Li5jZTVkZGMxNGYgMTAwNjQ0CiAtLS0gYS9wYXRobmFtZXMuaAogKysr IGIvcGF0aG5hbWVzLmgKLUBAIC00MCw2ICs0MCw3IEBACi0gI2RlZmluZSBfUEFUSF9IT1NUX1JT QV9LRVlfRklMRQkJU1NIRElSICIvc3NoX2hvc3RfcnNhX2tleSIKK0BAIC00MSw2ICs0MSw3IEBA CiAgI2RlZmluZSBfUEFUSF9IT1NUX0VEMjU1MTlfS0VZX0ZJTEUJU1NIRElSICIvc3NoX2hvc3Rf ZWQyNTUxOV9rZXkiCisgI2RlZmluZSBfUEFUSF9IT1NUX01MRFNBNDRfRUQyNTUxOV9LRVlfRklM RSBTU0hESVIgIi9zc2hfaG9zdF9tbGRzYTQ0X2VkMjU1MTlfa2V5IgogICNkZWZpbmUgX1BBVEhf REhfTU9EVUxJCQkJU1NIRElSICIvbW9kdWxpIgogKyNkZWZpbmUgX1BBVEhfU0NQX0tJTExfU1dJ VENICQlTU0hESVIgIi9kaXNhYmxlX3NjcCIKICAKQEAgLTQxLDcgKzQxLDcgQEAgaW5kZXggN2Jj ZTBmZTZmLi4yYmI4MzhjN2QgMTAwNjQ0CiAgLkV4IC1zdGQgc2NwCiAgLlNoIFNFRSBBTFNPCiBk aWZmIC0tZ2l0IGEvc2NwLmMgYi9zY3AuYwotaW5kZXggNTYxOGUyOGU3Li43NmRjYjYwNDAgMTAw NjQ0CitpbmRleCBhYzQzZWM1ZjQuLjU3NzViZTQ1NyAxMDA2NDQKIC0tLSBhL3NjcC5jCiArKysg Yi9zY3AuYwogQEAgLTYyOCw2ICs2MjgsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CkBAIC02MCw1ICs2MCw1IEBAIGluZGV4IDU2MThlMjhlNy4uNzZkY2I2MDQwIDEwMDY0NAogIAkJ ZmF0YWwoInVua25vd24gdXNlciAldSIsICh1X2ludCkgdXNlcmlkKTsKICAKIC0tIAotMi41My4w CisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMzMtb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2Nw LnBhdGNoIGIvMDAzMy1vcGVuc3NoLTguN3AxLXJlY3Vyc2l2ZS1zY3AucGF0Y2gKaW5kZXggMzNm MTA2Ny4uODNhYzhkMyAxMDA2NDQKLS0tIGEvMDAzMy1vcGVuc3NoLTguN3AxLXJlY3Vyc2l2ZS1z Y3AucGF0Y2gKKysrIGIvMDAzMy1vcGVuc3NoLTguN3AxLXJlY3Vyc2l2ZS1zY3AucGF0Y2gKQEAg LTEsNyArMSw3IEBACi1Gcm9tIDcyMjIzZjUxOTI5NGMyMzRlNzMxM2RjMGVmYjg2YzExNjRhNjdi NDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGYyMWE3YjE2OGEyNWVjYThlZjI5Mjhl YjU0NjY0Mjk3NGQyZDJhMzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkg QmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEz OjQzOjI5ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMzMvNTRdIG9wZW5zc2gtOC43cDEtcmVjdXJz aXZlLXNjcAorU3ViamVjdDogW1BBVENIIDMzLzUzXSBvcGVuc3NoLTguN3AxLXJlY3Vyc2l2ZS1z Y3AKIAogIyBXb3JrYXJvdW5kIGZvciBsYWNrIG9mIHNmdHBfcmVhbHBhdGggaW4gb2xkZXIgdmVy c2lvbnMgb2YgUkhFTAogIyBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dp P2lkPTIwMzg4NTQKQEAgLTE1LDcgKzE1LDcgQEAgU3ViamVjdDogW1BBVENIIDMzLzU0XSBvcGVu c3NoLTguN3AxLXJlY3Vyc2l2ZS1zY3AKICA0IGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMo KyksIDIwIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvc2NwLmMgYi9zY3AuYwotaW5kZXgg NzZkY2I2MDQwLi45NzM4NDhlMDQgMTAwNjQ0CitpbmRleCA1Nzc1YmU0NTcuLjY0NmNmMjQ3OCAx MDA2NDQKIC0tLSBhL3NjcC5jCiArKysgYi9zY3AuYwogQEAgLTEzNzcsNyArMTM3Nyw3IEBAIHNv dXJjZV9zZnRwKGludCBhcmdjLCBjaGFyICpzcmMsIGNoYXIgKnRhcmcsIHN0cnVjdCBzZnRwX2Nv bm4gKmNvbm4pCkBAIC0yOCw3ICsyOCw3IEBAIGluZGV4IDc2ZGNiNjA0MC4uOTczODQ4ZTA0IDEw MDY0NAogIAkJCWVycnMgPSAxOwogIAkJfQogZGlmZiAtLWdpdCBhL3NmdHAtY2xpZW50LmMgYi9z ZnRwLWNsaWVudC5jCi1pbmRleCA2OWVmMjhjZGMuLjMwMTJlYWMxMiAxMDA2NDQKK2luZGV4IDFm MDMxMTI4ZS4uYWFkODY0MzU3IDEwMDY0NAogLS0tIGEvc2Z0cC1jbGllbnQuYwogKysrIGIvc2Z0 cC1jbGllbnQuYwogQEAgLTk4OCw3ICs5ODgsNyBAQCBzZnRwX2ZzZXRzdGF0KHN0cnVjdCBzZnRw X2Nvbm4gKmNvbm4sIGNvbnN0IHVfY2hhciAqaGFuZGxlLCB1X2ludCBoYW5kbGVfbGVuLApAQCAt MTEzLDcgKzExMyw3IEBAIGluZGV4IDY5ZWYyOGNkYy4uMzAxMmVhYzEyIDEwMDY0NAogIH0KICAK ICBpbnQKLUBAIC0yMDAxLDcgKzIwMzMsNyBAQCBzZnRwX2Rvd25sb2FkX2RpcihzdHJ1Y3Qgc2Z0 cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCwKK0BAIC0yMDA2 LDcgKzIwMzgsNyBAQCBzZnRwX2Rvd25sb2FkX2RpcihzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBj b25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCwKICAJY2hhciAqc3JjX2Nhbm9uOwogIAlp bnQgcmV0OwogIApAQCAtMTIyLDcgKzEyMiw3IEBAIGluZGV4IDY5ZWYyOGNkYy4uMzAxMmVhYzEy IDEwMDY0NAogIAkJZXJyb3IoImRvd25sb2FkIFwiJXNcIjogcGF0aCBjYW5vbmljYWxpemF0aW9u IGZhaWxlZCIsIHNyYyk7CiAgCQlyZXR1cm4gLTE7CiAgCX0KLUBAIC0yMzU2LDEyICsyMzg4LDEy IEBAIHVwbG9hZF9kaXJfaW50ZXJuYWwoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hh ciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCitAQCAtMjM2MSwxMiArMjM5MywxMiBAQCB1cGxvYWRf ZGlyX2ludGVybmFsKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNyYywgY29u c3QgY2hhciAqZHN0LAogIGludAogIHNmdHBfdXBsb2FkX2RpcihzdHJ1Y3Qgc2Z0cF9jb25uICpj b25uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCwKICAgICAgaW50IHByZXNlcnZl X2ZsYWcsIGludCBwcmludF9mbGFnLCBpbnQgcmVzdW1lLCBpbnQgZnN5bmNfZmxhZywKQEAgLTEz Nyw3ICsxMzcsNyBAQCBpbmRleCA2OWVmMjhjZGMuLjMwMTJlYWMxMiAxMDA2NDQKICAJCWVycm9y KCJ1cGxvYWQgXCIlc1wiOiBwYXRoIGNhbm9uaWNhbGl6YXRpb24gZmFpbGVkIiwgZHN0KTsKICAJ CXJldHVybiAtMTsKICAJfQotQEAgLTI4MTksNyArMjg1MSw3IEBAIHNmdHBfY3Jvc3Nsb2FkX2Rp cihzdHJ1Y3Qgc2Z0cF9jb25uICpmcm9tLCBzdHJ1Y3Qgc2Z0cF9jb25uICp0bywKK0BAIC0yODI5 LDcgKzI4NjEsNyBAQCBzZnRwX2Nyb3NzbG9hZF9kaXIoc3RydWN0IHNmdHBfY29ubiAqZnJvbSwg c3RydWN0IHNmdHBfY29ubiAqdG8sCiAgCWNoYXIgKmZyb21fcGF0aF9jYW5vbjsKICAJaW50IHJl dDsKICAKQEAgLTE2OSwxMCArMTY5LDEwIEBAIGluZGV4IGNjOGUyMDI5OC4uMzZiNjhkNGNjIDEw MDY0NAogIC8qCiAgICogRG93bmxvYWQgYSAnZnJvbV9wYXRoJyBmcm9tIHRoZSAnZnJvbScgY29u bmVjdGlvbiBhbmQgdXBsb2FkIGl0IHRvCiBkaWZmIC0tZ2l0IGEvc2Z0cC5jIGIvc2Z0cC5jCi1p bmRleCBlZWJiMTY2ZTguLjRhNzFkZDA1ZCAxMDA2NDQKK2luZGV4IDMxZDhmYTQ5NC4uZDNiZTcy ZmZlIDEwMDY0NAogLS0tIGEvc2Z0cC5jCiArKysgYi9zZnRwLmMKLUBAIC04MDUsNyArODA1LDcg QEAgcHJvY2Vzc19wdXQoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3JjLCBj b25zdCBjaGFyICpkc3QsCitAQCAtODA0LDcgKzgwNCw3IEBAIHByb2Nlc3NfcHV0KHN0cnVjdCBz ZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0LAogIAkJICAg IChyZmxhZyB8fCBnbG9iYWxfcmZsYWcpKSB7CiAgCQkJaWYgKHNmdHBfdXBsb2FkX2Rpcihjb25u LCBnLmdsX3BhdGh2W2ldLCBhYnNfZHN0LAogIAkJCSAgICBwZmxhZyB8fCBnbG9iYWxfcGZsYWcs IDEsIHJlc3VtZSwKQEAgLTE4MSw3ICsxODEsNyBAQCBpbmRleCBlZWJiMTY2ZTguLjRhNzFkZDA1 ZCAxMDA2NDQKICAJCQkJZXJyID0gLTE7CiAgCQl9IGVsc2UgewogIAkJCWlmIChzZnRwX3VwbG9h ZChjb25uLCBnLmdsX3BhdGh2W2ldLCBhYnNfZHN0LAotQEAgLTE2NDAsNyArMTY0MCw3IEBAIHBh cnNlX2Rpc3BhdGNoX2NvbW1hbmQoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hhciAq Y21kLCBjaGFyICoqcHdkLAorQEAgLTE2NDksNyArMTY0OSw3IEBAIHBhcnNlX2Rpc3BhdGNoX2Nv bW1hbmQoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hhciAqY21kLCBjaGFyICoqcHdk LAogIAkJaWYgKHBhdGgxID09IE5VTEwgfHwgKnBhdGgxID09ICdcMCcpCiAgCQkJcGF0aDEgPSB4 c3RyZHVwKHN0YXJ0ZGlyKTsKICAJCXBhdGgxID0gc2Z0cF9tYWtlX2Fic29sdXRlKHBhdGgxLCAq cHdkKTsKQEAgLTE5MCw3ICsxOTAsNyBAQCBpbmRleCBlZWJiMTY2ZTguLjRhNzFkZDA1ZCAxMDA2 NDQKICAJCQllcnIgPSAxOwogIAkJCWJyZWFrOwogIAkJfQotQEAgLTIyNjYsNyArMjI2Niw3IEBA IGludGVyYWN0aXZlX2xvb3Aoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY2hhciAqZmlsZTEsIGNo YXIgKmZpbGUyKQorQEAgLTIyNzUsNyArMjI3NSw3IEBAIGludGVyYWN0aXZlX2xvb3Aoc3RydWN0 IHNmdHBfY29ubiAqY29ubiwgY2hhciAqZmlsZTEsIGNoYXIgKmZpbGUyKQogIAl9CiAgI2VuZGlm IC8qIFVTRV9MSUJFRElUICovCiAgCkBAIC0yMDAsNSArMjAwLDUgQEAgaW5kZXggZWViYjE2NmU4 Li40YTcxZGQwNWQgMTAwNjQ0CiAgCXN0YXJ0ZGlyID0geHN0cmR1cChyZW1vdGVfcGF0aCk7CiAg CiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDM0LW9wZW5zc2gtOC43cDEt aWJtY2EucGF0Y2ggYi8wMDM0LW9wZW5zc2gtOC43cDEtaWJtY2EucGF0Y2gKaW5kZXggNTUzMjk3 YS4uOGNhNGNjYiAxMDA2NDQKLS0tIGEvMDAzNC1vcGVuc3NoLTguN3AxLWlibWNhLnBhdGNoCisr KyBiLzAwMzQtb3BlbnNzaC04LjdwMS1pYm1jYS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20g MjdlNzNjOWQ2YzRhNDRiZGZiOTg4NTJkZGViMzBlOTAyZmY4NjU4ZSBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKK0Zyb20gNTMzMDYyNGQ3NmEyNDU1N2ZiNzFkODg1MmM2ZTVlMWM4ZWRjZTc2MiBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0 QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAKLVN1Ympl Y3Q6IFtQQVRDSCAzNC81NF0gb3BlbnNzaC04LjdwMS1pYm1jYQorU3ViamVjdDogW1BBVENIIDM0 LzUzXSBvcGVuc3NoLTguN3AxLWlibWNhCiAKICMgZG93bnN0cmVhbSBvbmx5LCBJQk1DQSB0ZW50 YXRpdmUgZml4CiAjIEZyb20gaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNn aT9pZD0xOTc2MjAyI2MxNApAQCAtMjMsNSArMjMsNSBAQCBpbmRleCBmNjExMjQ1ODUuLjQxN2My MDQ4NCAxMDA2NDQKICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAgI2luY2x1ZGUgPHVuaXN0ZC5o PgogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAzNS1vcGVuc3NoLTcuNnAx LWF1ZGl0LnBhdGNoIGIvMDAzNS1vcGVuc3NoLTcuNnAxLWF1ZGl0LnBhdGNoCmluZGV4IDQwZGYw NmMuLjUxZDcyODUgMTAwNjQ0Ci0tLSBhLzAwMzUtb3BlbnNzaC03LjZwMS1hdWRpdC5wYXRjaAor KysgYi8wMDM1LW9wZW5zc2gtNy42cDEtYXVkaXQucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9t IDAwZWY1NjUzMzZjOTMzZjk0NjRiMDljNTUxMzRmYTNiM2M3NmFkNDAgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCitGcm9tIDZmZWZhNzY4ZjI5OTUzYzYyZjgxZjZlNGU4ZTcwZTMyZjZjNDhkZDkg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1TdWJq ZWN0OiBbUEFUQ0ggMzUvNTRdIG9wZW5zc2gtNy42cDEtYXVkaXQKK1N1YmplY3Q6IFtQQVRDSCAz NS81M10gb3BlbnNzaC03LjZwMS1hdWRpdAogCiAtLS0KICBNYWtlZmlsZS5pbiAgICAgICB8ICAg MiArLQpAQCAtMzUsMTAgKzM1LDEwIEBAIFN1YmplY3Q6IFtQQVRDSCAzNS81NF0gb3BlbnNzaC03 LjZwMS1hdWRpdAogIGNyZWF0ZSBtb2RlIDEwMDY0NCBhdWRpdHN0dWIuYwogCiBkaWZmIC0tZ2l0 IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgotaW5kZXggYTEyZjZhZDFkLi5mODBjOTU4NDYg MTAwNjQ0CitpbmRleCAxZWViMzRjYWQuLmY2MWY4OWU0ZCAxMDA2NDQKIC0tLSBhL01ha2VmaWxl LmluCiArKysgYi9NYWtlZmlsZS5pbgotQEAgLTExMCw3ICsxMTAsNyBAQCBMSUJTU0hfT0JKUz0k e0xJQk9QRU5TU0hfT0JKU30gXAorQEAgLTExMSw3ICsxMTEsNyBAQCBMSUJTU0hfT0JKUz0ke0xJ Qk9QRU5TU0hfT0JKU30gXAogIAlrZXhzbnRydXA3NjF4MjU1MTkubyBrZXhtbGtlbTc2OHgyNTUx OS5vIHNudHJ1cDc2MS5vIGtleGdlbi5vIFwKICAJa2V4Z3NzYy5vIFwKICAJc2Z0cC1yZWFscGF0 aC5vIHBsYXRmb3JtLXBsZWRnZS5vIHBsYXRmb3JtLXRyYWNpbmcubyBwbGF0Zm9ybS1taXNjLm8g XApAQCAtNzgyLDEwICs3ODIsMTAgQEAgaW5kZXggMDAwMDAwMDAwLi42MzlhNzk4ZGYKICt7CiAr fQogZGlmZiAtLWdpdCBhL2F1dGguYyBiL2F1dGguYwotaW5kZXggMTQyYWM1YWZkLi4xODU4YmRk YWIgMTAwNjQ0CitpbmRleCA5ZDEzMDdiNzYuLjk4NTE2MjVjZiAxMDA2NDQKIC0tLSBhL2F1dGgu YwogKysrIGIvYXV0aC5jCi1AQCAtNDk5LDkgKzQ5OSw2IEBAIGdldHB3bmFtYWxsb3coc3RydWN0 IHNzaCAqc3NoLCBjb25zdCBjaGFyICp1c2VyKQorQEAgLTUwMiw5ICs1MDIsNiBAQCBnZXRwd25h bWFsbG93KHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqdXNlcikKICAJCXJlY29yZF9mYWls ZWRfbG9naW4oc3NoLCB1c2VyLAogIAkJICAgIGF1dGhfZ2V0X2Nhbm9uaWNhbF9ob3N0bmFtZShz c2gsIG9wdGlvbnMudXNlX2RucyksICJzc2giKTsKICAjZW5kaWYKQEAgLTc5NiwxMCArNzk2LDEw IEBAIGluZGV4IDE0MmFjNWFmZC4uMTg1OGJkZGFiIDEwMDY0NAogIAl9CiAgCWlmICghYWxsb3dl ZF91c2VyKHNzaCwgcHcpKQogZGlmZiAtLWdpdCBhL2F1dGguaCBiL2F1dGguaAotaW5kZXggODE1 ZjgyMWY5Li5iNzJiNzYxNjMgMTAwNjQ0CitpbmRleCA5ZGQyNWY0OTQuLjA2NmY1ZWZmYSAxMDA2 NDQKIC0tLSBhL2F1dGguaAogKysrIGIvYXV0aC5oCi1AQCAtMjEzLDYgKzIxMyw4IEBAIHN0cnVj dCBzc2hrZXkJKmdldF9ob3N0a2V5X3ByaXZhdGVfYnlfdHlwZShpbnQsIGludCwgc3RydWN0IHNz aCAqKTsKK0BAIC0yMTQsNiArMjE0LDggQEAgc3RydWN0IHNzaGtleQkqZ2V0X2hvc3RrZXlfcHJp dmF0ZV9ieV90eXBlKGludCwgaW50LCBzdHJ1Y3Qgc3NoICopOwogIGludAkgZ2V0X2hvc3RrZXlf aW5kZXgoc3RydWN0IHNzaGtleSAqLCBpbnQsIHN0cnVjdCBzc2ggKik7CiAgaW50CSBzc2hkX2hv c3RrZXlfc2lnbihzdHJ1Y3Qgc3NoICosIHN0cnVjdCBzc2hrZXkgKiwgc3RydWN0IHNzaGtleSAq LAogICAgICB1X2NoYXIgKiosIHNpemVfdCAqLCBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25z dCBjaGFyICopOwpAQCAtODA4LDcgKzgwOCw3IEBAIGluZGV4IDgxNWY4MjFmOS4uYjcyYjc2MTYz IDEwMDY0NAogIAogIC8qIEtleSAvIGNlcnQgb3B0aW9ucyBsaW5rYWdlIHRvIGF1dGggbGF5ZXIg Ki8KICBpbnQJIGF1dGhfYWN0aXZhdGVfb3B0aW9ucyhzdHJ1Y3Qgc3NoICosIHN0cnVjdCBzc2hh dXRob3B0ICopOwotQEAgLTIzOCw2ICsyNDAsOCBAQCBpbnQJIGF1dGhfY2hlY2tfYXV0aGtleV9s aW5lKHN0cnVjdCBwYXNzd2QgKiwgc3RydWN0IHNzaGtleSAqLAorQEAgLTIzOSw2ICsyNDEsOCBA QCBpbnQJIGF1dGhfY2hlY2tfYXV0aGtleV9saW5lKHN0cnVjdCBwYXNzd2QgKiwgc3RydWN0IHNz aGtleSAqLAogICAgICBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosIHN0cnVjdCBzc2hhdXRob3B0ICoqKTsKICBpbnQJIGF1dGhfY2hlY2tfYXV0aGtleXNf ZmlsZShzdHJ1Y3QgcGFzc3dkICosIEZJTEUgKiwgY2hhciAqLAogICAgICBzdHJ1Y3Qgc3Noa2V5 ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3NoYXV0aG9wdCAqKik7CkBA IC04MTgsMTAgKzgxOCwxMCBAQCBpbmRleCA4MTVmODIxZjkuLmI3MmI3NjE2MyAxMDA2NDQKICBG SUxFCSphdXRoX29wZW5wcmluY2lwYWxzKGNvbnN0IGNoYXIgKiwgc3RydWN0IHBhc3N3ZCAqLCBp bnQpOwogIAogZGlmZiAtLWdpdCBhL2F1dGgyLWhvc3RiYXNlZC5jIGIvYXV0aDItaG9zdGJhc2Vk LmMKLWluZGV4IGEyODcwOTFlYy4uYmM0Nzc1MDQyIDEwMDY0NAoraW5kZXggNmE2NzA0ZDkzLi5k ODc3NDcxZGEgMTAwNjQ0CiAtLS0gYS9hdXRoMi1ob3N0YmFzZWQuYwogKysrIGIvYXV0aDItaG9z dGJhc2VkLmMKLUBAIC0xNTgsNyArMTU4LDcgQEAgdXNlcmF1dGhfaG9zdGJhc2VkKHN0cnVjdCBz c2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQorQEAgLTE1OSw3ICsxNTksNyBAQCB1c2VyYXV0 aF9ob3N0YmFzZWQoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICptZXRob2QpCiAgCWF1dGhl bnRpY2F0ZWQgPSAwOwogIAlpZiAobW1faG9zdGJhc2VkX2tleV9hbGxvd2VkKHNzaCwgYXV0aGN0 eHQtPnB3LCBjdXNlciwKICAJICAgIGNob3N0LCBrZXkpICYmCkBAIC04MzAsNyArODMwLDcgQEAg aW5kZXggYTI4NzA5MWVjLi5iYzQ3NzUwNDIgMTAwNjQ0CiAgCSAgICBzc2hidWZfcHRyKGIpLCBz c2hidWZfbGVuKGIpLCBwa2FsZywgc3NoLT5jb21wYXQsIE5VTEwpID09IDApCiAgCQlhdXRoZW50 aWNhdGVkID0gMTsKICAKLUBAIC0xNzUsNiArMTc1LDIwIEBAIGRvbmU6CitAQCAtMTc2LDYgKzE3 NiwyMCBAQCBkb25lOgogIAlyZXR1cm4gYXV0aGVudGljYXRlZDsKICB9CiAgCkBAIC04NTIsNyAr ODUyLDcgQEAgaW5kZXggYTI4NzA5MWVjLi5iYzQ3NzUwNDIgMTAwNjQ0CiAgaW50CiAgaG9zdGJh c2VkX2tleV9hbGxvd2VkKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHBhc3N3ZCAqcHcsCiBkaWZm IC0tZ2l0IGEvYXV0aDItcHVia2V5LmMgYi9hdXRoMi1wdWJrZXkuYwotaW5kZXggMzE5ZTQyYjJi Li45NzM4MTBkYzkgMTAwNjQ0CitpbmRleCBkYzA3ZmFhOTIuLmYyYTQzMjllNSAxMDA2NDQKIC0t LSBhL2F1dGgyLXB1YmtleS5jCiArKysgYi9hdXRoMi1wdWJrZXkuYwogQEAgLTIzMCw3ICsyMzAs NyBAQCB1c2VyYXV0aF9wdWJrZXkoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICptZXRob2Qp CkBAIC04ODYsMTAgKzg4NiwxMCBAQCBpbmRleCAzMTllNDJiMmIuLjk3MzgxMGRjOSAxMDA2NDQK ICBtYXRjaF9wcmluY2lwYWxzX2ZpbGUoc3RydWN0IHBhc3N3ZCAqcHcsIGNoYXIgKmZpbGUsCiAg ICAgIHN0cnVjdCBzc2hrZXlfY2VydCAqY2VydCwgc3RydWN0IHNzaGF1dGhvcHQgKiphdXRob3B0 c3ApCiBkaWZmIC0tZ2l0IGEvYXV0aDIuYyBiL2F1dGgyLmMKLWluZGV4IDNjM2JkYjc3Ni4uNzkw YmIzNDU0IDEwMDY0NAoraW5kZXggZjBmMzk3MDdmLi43MTQ2MGQ3OGYgMTAwNjQ0CiAtLS0gYS9h dXRoMi5jCiArKysgYi9hdXRoMi5jCi1AQCAtMzE1LDkgKzMxNSw2IEBAIGlucHV0X3VzZXJhdXRo X3JlcXVlc3QoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorQEAgLTMy MSw5ICszMjEsNiBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50MzJfdCBz ZXEsIHN0cnVjdCBzc2ggKnNzaCkKICAJCQlhdXRoY3R4dC0+dmFsaWQgPSAwOwogIAkJCS8qIElu dmFsaWQgdXNlciwgZmFrZSBwYXNzd29yZCBpbmZvcm1hdGlvbiAqLwogIAkJCWF1dGhjdHh0LT5w dyA9IGZha2VwdygpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIGluZGV4IDNjM2JkYjc3Ni4uNzkwYmIz NDU0IDEwMDY0NAogICNpZmRlZiBVU0VfUEFNCiAgCQlpZiAob3B0aW9ucy51c2VfcGFtKQogZGlm ZiAtLWdpdCBhL2NpcGhlci5jIGIvY2lwaGVyLmMKLWluZGV4IGY3NzBlNjY2Yy4uYjA1NzU1ZDcz IDEwMDY0NAoraW5kZXggMDY5N2U1NTliLi44MjA3NmQ0YmQgMTAwNjQ0CiAtLS0gYS9jaXBoZXIu YwogKysrIGIvY2lwaGVyLmMKIEBAIC02MywyNSArNjMsNiBAQCBzdHJ1Y3Qgc3NoY2lwaGVyX2N0 eCB7CkBAIC05MjksNyArOTI5LDcgQEAgaW5kZXggZjc3MGU2NjZjLi5iMDU3NTVkNzMgMTAwNjQ0 CiAgc3RhdGljIGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgY2lwaGVyc1tdID0gewogICNpZmRlZiBX SVRIX09QRU5TU0wKICAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi1AQCAtNDEwLDcgKzM5MSw3IEBA IGNpcGhlcl9nZXRfbGVuZ3RoKHN0cnVjdCBzc2hjaXBoZXJfY3R4ICpjYywgdV9pbnQgKnBsZW5w LCB1X2ludCBzZXFuciwKK0BAIC00MTgsNyArMzk5LDcgQEAgY2lwaGVyX2dldF9sZW5ndGgoc3Ry dWN0IHNzaGNpcGhlcl9jdHggKmNjLCB1X2ludCAqcGxlbnAsIHVfaW50IHNlcW5yLAogIHZvaWQK ICBjaXBoZXJfZnJlZShzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MpCiAgewpAQCAtOTM5LDcgKzkz OSw3IEBAIGluZGV4IGY3NzBlNjY2Yy4uYjA1NzU1ZDczIDEwMDY0NAogIAlpZiAoKGNjLT5jaXBo ZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkgewogIAkJY2hhY2hhcG9seV9mcmVl KGNjLT5jcF9jdHgpOwogZGlmZiAtLWdpdCBhL2NpcGhlci5oIGIvY2lwaGVyLmgKLWluZGV4IDY1 MzNmZjJiYi4uMmUwNWEwMjEwIDEwMDY0NAoraW5kZXggMzJhYmRkZTIyLi5lOTUzZGZjM2MgMTAw NjQ0CiAtLS0gYS9jaXBoZXIuaAogKysrIGIvY2lwaGVyLmgKIEBAIC00Nyw3ICs0NywyNSBAQApA QCAtOTcwLDcgKzk3MCw3IEBAIGluZGV4IDY1MzNmZjJiYi4uMmUwNWEwMjEwIDEwMDY0NAogIAog IGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcl9ieV9uYW1lKGNvbnN0IGNoYXIgKik7CiBk aWZmIC0tZ2l0IGEva2V4LmMgYi9rZXguYwotaW5kZXggNTRlNzExODEwLi43MGJlYmNlNmEgMTAw NjQ0CitpbmRleCA2OTgxYjU5ZjUuLjljZTJiN2UxMiAxMDA2NDQKIC0tLSBhL2tleC5jCiArKysg Yi9rZXguYwogQEAgLTY0LDYgKzY0LDcgQEAKQEAgLTk4MSw3ICs5ODEsNyBAQCBpbmRleCA1NGU3 MTE4MTAuLjcwYmViY2U2YSAxMDA2NDQKICAKICAvKiBwcm90b3R5cGUgKi8KICBzdGF0aWMgaW50 IGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qgc3NoICosIHVpbnQzMl90IHNlcSk7Ci1AQCAtODI2LDEy ICs4MjcsMTYgQEAga2V4X3N0YXJ0X3Jla2V4KHN0cnVjdCBzc2ggKnNzaCkKK0BAIC04MjksMTIg KzgzMCwxNiBAQCBrZXhfc3RhcnRfcmVrZXgoc3RydWN0IHNzaCAqc3NoKQogIH0KICAKICBzdGF0 aWMgaW50CkBAIC0xMDAwLDcgKzEwMDAsNyBAQCBpbmRleCA1NGU3MTE4MTAuLjcwYmViY2U2YSAx MDA2NDQKICAJaWYgKChlbmMtPmNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKG5hbWUpKSA9PSBOVUxM KSB7CiAgCQllcnJvcl9mKCJ1bnN1cHBvcnRlZCBjaXBoZXIgJXMiLCBuYW1lKTsKICAJCWZyZWUo bmFtZSk7Ci1AQCAtODUyLDggKzg1NywxMiBAQCBjaG9vc2VfbWFjKHN0cnVjdCBzc2ggKnNzaCwg c3RydWN0IHNzaG1hYyAqbWFjLCBjaGFyICpjbGllbnQsIGNoYXIgKnNlcnZlcikKK0BAIC04NTUs OCArODYwLDEyIEBAIGNob29zZV9tYWMoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3Qgc3NobWFjICpt YWMsIGNoYXIgKmNsaWVudCwgY2hhciAqc2VydmVyKQogIHsKICAJY2hhciAqbmFtZSA9IG1hdGNo X2xpc3QoY2xpZW50LCBzZXJ2ZXIsIE5VTEwpOwogIApAQCAtMTAxNCw3ICsxMDE0LDcgQEAgaW5k ZXggNTRlNzExODEwLi43MGJlYmNlNmEgMTAwNjQ0CiAgCWlmIChtYWNfc2V0dXAobWFjLCBuYW1l KSA8IDApIHsKICAJCWVycm9yX2YoInVuc3VwcG9ydGVkIE1BQyAlcyIsIG5hbWUpOwogIAkJZnJl ZShuYW1lKTsKLUBAIC04NjYsMTIgKzg3NSwxNiBAQCBjaG9vc2VfbWFjKHN0cnVjdCBzc2ggKnNz aCwgc3RydWN0IHNzaG1hYyAqbWFjLCBjaGFyICpjbGllbnQsIGNoYXIgKnNlcnZlcikKK0BAIC04 NjksMTIgKzg3OCwxNiBAQCBjaG9vc2VfbWFjKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaG1h YyAqbWFjLCBjaGFyICpjbGllbnQsIGNoYXIgKnNlcnZlcikKICB9CiAgCiAgc3RhdGljIGludApA QCAtMTAzMyw3ICsxMDMzLDcgQEAgaW5kZXggNTRlNzExODEwLi43MGJlYmNlNmEgMTAwNjQ0CiAg I2lmZGVmIFdJVEhfWkxJQgogIAlpZiAoc3RyY21wKG5hbWUsICJ6bGliQG9wZW5zc2guY29tIikg PT0gMCkgewogIAkJY29tcC0+dHlwZSA9IENPTVBfREVMQVlFRDsKLUBAIC0xMDM1LDcgKzEwNDgs NyBAQCBrZXhfY2hvb3NlX2NvbmYoc3RydWN0IHNzaCAqc3NoLCB1aW50MzJfdCBzZXEpCitAQCAt MTAzOCw3ICsxMDUxLDcgQEAga2V4X2Nob29zZV9jb25mKHN0cnVjdCBzc2ggKnNzaCwgdWludDMy X3Qgc2VxKQogIAkJbmVuYyAgPSBjdG9zID8gUFJPUE9TQUxfRU5DX0FMR1NfQ1RPUyAgOiBQUk9Q T1NBTF9FTkNfQUxHU19TVE9DOwogIAkJbm1hYyAgPSBjdG9zID8gUFJPUE9TQUxfTUFDX0FMR1Nf Q1RPUyAgOiBQUk9QT1NBTF9NQUNfQUxHU19TVE9DOwogIAkJbmNvbXAgPSBjdG9zID8gUFJPUE9T QUxfQ09NUF9BTEdTX0NUT1MgOiBQUk9QT1NBTF9DT01QX0FMR1NfU1RPQzsKQEAgLTEwNDIsNyAr MTA0Miw3IEBAIGluZGV4IDU0ZTcxMTgxMC4uNzBiZWJjZTZhIDEwMDY0NAogIAkJICAgIHNwcm9w W25lbmNdKSkgIT0gMCkgewogIAkJCWtleC0+ZmFpbGVkX2Nob2ljZSA9IHBlZXJbbmVuY107CiAg CQkJcGVlcltuZW5jXSA9IE5VTEw7Ci1AQCAtMTA1MCw3ICsxMDYzLDcgQEAga2V4X2Nob29zZV9j b25mKHN0cnVjdCBzc2ggKnNzaCwgdWludDMyX3Qgc2VxKQorQEAgLTEwNTMsNyArMTA2Niw3IEBA IGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qgc3NoICpzc2gsIHVpbnQzMl90IHNlcSkKICAJCQlwZWVy W25tYWNdID0gTlVMTDsKICAJCQlnb3RvIG91dDsKICAJCX0KQEAgLTEwNTEsNyArMTA1MSw3IEBA IGluZGV4IDU0ZTcxMTgxMC4uNzBiZWJjZTZhIDEwMDY0NAogIAkJICAgIHNwcm9wW25jb21wXSkp ICE9IDApIHsKICAJCQlrZXgtPmZhaWxlZF9jaG9pY2UgPSBwZWVyW25jb21wXTsKICAJCQlwZWVy W25jb21wXSA9IE5VTEw7Ci1AQCAtMTA3Myw2ICsxMDg2LDEwIEBAIGtleF9jaG9vc2VfY29uZihz dHJ1Y3Qgc3NoICpzc2gsIHVpbnQzMl90IHNlcSkKK0BAIC0xMDc2LDYgKzEwODksMTAgQEAga2V4 X2Nob29zZV9jb25mKHN0cnVjdCBzc2ggKnNzaCwgdWludDMyX3Qgc2VxKQogIAkJZGhfbmVlZCA9 IE1BWElNVU0oZGhfbmVlZCwgbmV3a2V5cy0+ZW5jLmJsb2NrX3NpemUpOwogIAkJZGhfbmVlZCA9 IE1BWElNVU0oZGhfbmVlZCwgbmV3a2V5cy0+ZW5jLml2X2xlbik7CiAgCQlkaF9uZWVkID0gTUFY SU1VTShkaF9uZWVkLCBuZXdrZXlzLT5tYWMua2V5X2xlbik7CkBAIC0xMDYyLDcgKzEwNjIsNyBA QCBpbmRleCA1NGU3MTE4MTAuLjcwYmViY2U2YSAxMDA2NDQKICAJfQogIAkvKiBYWFggbmVlZCBy dW5kZW4/ICovCiAgCWtleC0+d2VfbmVlZCA9IG5lZWQ7Ci1AQCAtMTM0Miw2ICsxMzU5LDM2IEBA IGR1bXBfZGlnZXN0KGNvbnN0IGNoYXIgKm1zZywgY29uc3QgdV9jaGFyICpkaWdlc3QsIGludCBs ZW4pCitAQCAtMTM0NSw2ICsxMzYyLDM2IEBAIGR1bXBfZGlnZXN0KGNvbnN0IGNoYXIgKm1zZywg Y29uc3QgdV9jaGFyICpkaWdlc3QsIGludCBsZW4pCiAgfQogICNlbmRpZgogIApAQCAtMTEwMCwx MCArMTEwMCwxMCBAQCBpbmRleCA1NGU3MTE4MTAuLjcwYmViY2U2YSAxMDA2NDQKICAgKiBTZW5k IGEgcGxhaW50ZXh0IGVycm9yIG1lc3NhZ2UgdG8gdGhlIHBlZXIsIHN1ZmZpeGVkIGJ5IFxyXG4u CiAgICogT25seSB1c2VkIGR1cmluZyBiYW5uZXIgZXhjaGFuZ2UsIGFuZCB0aGVyZSBvbmx5IGZv ciB0aGUgc2VydmVyLgogZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKLWluZGV4IDJjODZiMjVm OS4uMGEwY2IxNTYyIDEwMDY0NAoraW5kZXggMjE5MTlhOWFhLi44Zjk5MzQ4OTkgMTAwNjQ0CiAt LS0gYS9rZXguaAogKysrIGIva2V4LmgKLUBAIC0yNjEsNiArMjYxLDggQEAgaW50CSBrZXhnc3Nf Y2xpZW50KHN0cnVjdCBzc2ggKik7CitAQCAtMjU3LDYgKzI1Nyw4IEBAIGludAkga2V4Z3NzX2Ns aWVudChzdHJ1Y3Qgc3NoICopOwogIGludAkga2V4Z3NzX3NlcnZlcihzdHJ1Y3Qgc3NoICopOwog ICNlbmRpZgogIApAQCAtMTExMyw3ICsxMTEzLDcgQEAgaW5kZXggMmM4NmIyNWY5Li4wYTBjYjE1 NjIgMTAwNjQ0CiAgaW50CSBrZXhfZGhfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNz aGJ1ZiAqLCBzdHJ1Y3Qgc3NoYnVmICoqLAogICAgICBzdHJ1Y3Qgc3NoYnVmICoqKTsKIGRpZmYg LS1naXQgYS9tYWMuYyBiL21hYy5jCi1pbmRleCAxNzYwNzgzMGMuLjI5MTNiOGE4YyAxMDA2NDQK K2luZGV4IDMwNDk2YjQwMi4uZDQ3ZGYwY2RmIDEwMDY0NAogLS0tIGEvbWFjLmMKICsrKyBiL21h Yy5jCiBAQCAtMjMwLDYgKzIzMCwyMCBAQCBtYWNfY2xlYXIoc3RydWN0IHNzaG1hYyAqbWFjKQpA QCAtMTE0OSw3ICsxMTQ5LDcgQEAgaW5kZXggMDQwODlmNDFiLi42YjVlYmM0NGIgMTAwNjQ0CiAg CiAgI2VuZGlmIC8qIFNTSE1BQ19IICovCiBkaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRv ci5jCi1pbmRleCA1MjU1MDgzYWIuLjMwNTg4MzI3OCAxMDA2NDQKK2luZGV4IDE0Y2RjY2YyZi4u NzMzYTM0NjBmIDEwMDY0NAogLS0tIGEvbW9uaXRvci5jCiArKysgYi9tb25pdG9yLmMKIEBAIC04 Myw2ICs4Myw3IEBACkBAIC0xMjA0LDcgKzEyMDQsNyBAQCBpbmRleCA1MjU1MDgzYWIuLjMwNTg4 MzI3OCAxMDA2NDQKICAjZW5kaWYKICAgICAgezAsIDAsIE5VTEx9CiAgfTsKLUBAIC0xNjAzLDgg KzE2MjAsMTAgQEAgbW1fYW5zd2VyX2tleXZlcmlmeShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2Nr LCBzdHJ1Y3Qgc3NoYnVmICptKQorQEAgLTE1ODksOCArMTYwNiwxMCBAQCBtbV9hbnN3ZXJfa2V5 dmVyaWZ5KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCWlu dCByLCByZXQsIHJlcV9wcmVzZW5jZSA9IDAsIHJlcV92ZXJpZnkgPSAwLCB2YWxpZF9kYXRhID0g MDsKICAJaW50IGVuY29kZWRfcmV0OwogIAlzdHJ1Y3Qgc3Noa2V5X3NpZ19kZXRhaWxzICpzaWdf ZGV0YWlscyA9IE5VTEw7CkBAIC0xMjE2LDcgKzEyMTYsNyBAQCBpbmRleCA1MjU1MDgzYWIuLjMw NTg4MzI3OCAxMDA2NDQKICAJICAgIChyID0gc3NoYnVmX2dldF9zdHJpbmdfZGlyZWN0KG0sICZz aWduYXR1cmUsICZzaWduYXR1cmVsZW4pKSAhPSAwIHx8CiAgCSAgICAociA9IHNzaGJ1Zl9nZXRf c3RyaW5nX2RpcmVjdChtLCAmZGF0YSwgJmRhdGFsZW4pKSAhPSAwIHx8CiAgCSAgICAociA9IHNz aGJ1Zl9nZXRfY3N0cmluZyhtLCAmc2lnYWxnLCBOVUxMKSkgIT0gMCkKLUBAIC0xNjEzLDYgKzE2 MzIsOCBAQCBtbV9hbnN3ZXJfa2V5dmVyaWZ5KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0 cnVjdCBzc2hidWYgKm0pCitAQCAtMTU5OSw2ICsxNjE4LDggQEAgbW1fYW5zd2VyX2tleXZlcmlm eShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQogIAlpZiAoaG9z dGJhc2VkX2N1c2VyID09IE5VTEwgfHwgaG9zdGJhc2VkX2Nob3N0ID09IE5VTEwgfHwKICAJICAh bW9uaXRvcl9hbGxvd2VkX2tleShibG9iLCBibG9ibGVuKSkKICAJCWZhdGFsX2YoImJhZCBrZXks IG5vdCBwcmV2aW91c2x5IGFsbG93ZWQiKTsKQEAgLTEyMjUsNyArMTIyNSw3IEBAIGluZGV4IDUy NTUwODNhYi4uMzA1ODgzMjc4IDEwMDY0NAogIAogIAkvKiBFbXB0eSBzaWduYXR1cmUgYWxnb3Jp dGhtIG1lYW5zIE5VTEwuICovCiAgCWlmICgqc2lnYWxnID09ICdcMCcpIHsKLUBAIC0xNjI4LDE0 ICsxNjQ5LDE5IEBAIG1tX2Fuc3dlcl9rZXl2ZXJpZnkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29j aywgc3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC0xNjE0LDE0ICsxNjM1LDE5IEBAIG1tX2Fuc3dlcl9r ZXl2ZXJpZnkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJ Y2FzZSBNTV9VU0VSS0VZOgogIAkJdmFsaWRfZGF0YSA9IG1vbml0b3JfdmFsaWRfdXNlcmJsb2Io c3NoLCBkYXRhLCBkYXRhbGVuKTsKICAJCWF1dGhfbWV0aG9kID0gInB1YmxpY2tleSI7CkBAIC0x MjQ1LDcgKzEyNDUsNyBAQCBpbmRleCA1MjU1MDgzYWIuLjMwNTg4MzI3OCAxMDA2NDQKICAJCWJy ZWFrOwogIAl9CiAgCWlmICghdmFsaWRfZGF0YSkKLUBAIC0xNjQ3LDggKzE2NzMsNiBAQCBtbV9h bnN3ZXJfa2V5dmVyaWZ5KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYg Km0pCitAQCAtMTYzMyw4ICsxNjU5LDYgQEAgbW1fYW5zd2VyX2tleXZlcmlmeShzdHJ1Y3Qgc3No ICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQogIAkgICAgU1NIX0ZQX0RFRkFVTFQp KSA9PSBOVUxMKQogIAkJZmF0YWxfZigic3Noa2V5X2ZpbmdlcnByaW50IGZhaWxlZCIpOwogIApA QCAtMTI1NCw3ICsxMjU0LDcgQEAgaW5kZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0CiAg CWRlYnVnM19mKCIlcyAlcyBzaWduYXR1cmUgdXNpbmcgJXMgJXMlcyVzIiwgYXV0aF9tZXRob2Qs CiAgCSAgICBzc2hrZXlfdHlwZShrZXkpLCBzaWdhbGcgPT0gTlVMTCA/ICJkZWZhdWx0IiA6IHNp Z2FsZywKICAJICAgIChyZXQgPT0gMCkgPyAidmVyaWZpZWQiIDogInVudmVyaWZpZWQiLAotQEAg LTE3MzYsMTMgKzE3NjAsMTkgQEAgbW1fcmVjb3JkX2xvZ2luKHN0cnVjdCBzc2ggKnNzaCwgU2Vz c2lvbiAqcywgc3RydWN0IHBhc3N3ZCAqcHcpCitAQCAtMTcyMiwxMyArMTc0NiwxOSBAQCBtbV9y ZWNvcmRfbG9naW4oc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBzdHJ1Y3QgcGFzc3dkICpw dykKICB9CiAgCiAgc3RhdGljIHZvaWQKQEAgLTEyNzUsNyArMTI3NSw3IEBAIGluZGV4IDUyNTUw ODNhYi4uMzA1ODgzMjc4IDEwMDY0NAogIAlzZXNzaW9uX3VudXNlZChzLT5zZWxmKTsKICB9CiAg Ci1AQCAtMTgwOSw3ICsxODM5LDcgQEAgbW1fYW5zd2VyX3B0eShzdHJ1Y3Qgc3NoICpzc2gsIGlu dCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorQEAgLTE3OTUsNyArMTgyNSw3IEBAIG1tX2Fuc3dl cl9wdHkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAKICAg ZXJyb3I6CiAgCWlmIChzICE9IE5VTEwpCkBAIC0xMjg0LDcgKzEyODQsNyBAQCBpbmRleCA1MjU1 MDgzYWIuLjMwNTg4MzI3OCAxMDA2NDQKICAJaWYgKChyID0gc3NoYnVmX3B1dF91MzIobSwgMCkp ICE9IDApCiAgCQlmYXRhbF9mcihyLCAiYXNzZW1ibGUgMCIpOwogIAltbV9yZXF1ZXN0X3NlbmQo c29jaywgTU9OSVRPUl9BTlNfUFRZLCBtKTsKLUBAIC0xODI4LDcgKzE4NTgsNyBAQCBtbV9hbnN3 ZXJfcHR5X2NsZWFudXAoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAq bSkKK0BAIC0xODE0LDcgKzE4NDQsNyBAQCBtbV9hbnN3ZXJfcHR5X2NsZWFudXAoc3RydWN0IHNz aCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJaWYgKChyID0gc3NoYnVmX2dl dF9jc3RyaW5nKG0sICZ0dHksIE5VTEwpKSAhPSAwKQogIAkJZmF0YWxfZnIociwgInBhcnNlIHR0 eSIpOwogIAlpZiAoKHMgPSBzZXNzaW9uX2J5X3R0eSh0dHkpKSAhPSBOVUxMKQpAQCAtMTI5Myw3 ICsxMjkzLDcgQEAgaW5kZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0CiAgCXNzaGJ1Zl9y ZXNldChtKTsKICAJZnJlZSh0dHkpOwogIAlyZXR1cm4gKDApOwotQEAgLTE4NTAsNiArMTg4MCw4 IEBAIG1tX2Fuc3dlcl90ZXJtKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hi dWYgKnJlcSkKK0BAIC0xODM2LDYgKzE4NjYsOCBAQCBtbV9hbnN3ZXJfdGVybShzdHJ1Y3Qgc3No ICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICpyZXEpCiAgCQlzc2hwYW1fY2xlYW51cCgp OwogICNlbmRpZgogIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAgaW5kZXggNTI1NTA4M2FiLi4zMDU4 ODMyNzggMTAwNjQ0CiAgCXdoaWxlICh3YWl0cGlkKHBtb25pdG9yLT5tX3BpZCwgJnN0YXR1cywg MCkgPT0gLTEpCiAgCQlpZiAoZXJybm8gIT0gRUlOVFIpCiAgCQkJZXhpdCgxKTsKLUBAIC0xODk2 LDEyICsxOTI4LDQ2IEBAIG1tX2Fuc3dlcl9hdWRpdF9jb21tYW5kKHN0cnVjdCBzc2ggKnNzaCwg aW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC0xODgyLDEyICsxOTE0LDQ2IEBAIG1t X2Fuc3dlcl9hdWRpdF9jb21tYW5kKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0 IHNzaGJ1ZiAqbSkKICB7CiAgCWNoYXIgKmNtZDsKICAJaW50IHI7CkBAIC0xMzUwLDcgKzEzNTAs NyBAQCBpbmRleCA1MjU1MDgzYWIuLjMwNTg4MzI3OCAxMDA2NDQKICAJZnJlZShjbWQpOwogIAly ZXR1cm4gKDApOwogIH0KLUBAIC0xOTc0LDYgKzIwNDAsNyBAQCBtb25pdG9yX2FwcGx5X2tleXN0 YXRlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0b3IgKnBtb25pdG9yKQorQEAgLTE5NTgs NiArMjAyNCw3IEBAIG1vbml0b3JfYXBwbHlfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1 Y3QgbW9uaXRvciAqcG1vbml0b3IpCiAgdm9pZAogIG1tX2dldF9rZXlzdGF0ZShzdHJ1Y3Qgc3No ICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRvcikKICB7CkBAIC0xMzU4LDcgKzEzNTgsNyBA QCBpbmRleCA1MjU1MDgzYWIuLjMwNTg4MzI3OCAxMDA2NDQKICAJZGVidWczX2YoIldhaXRpbmcg Zm9yIG5ldyBrZXlzIik7CiAgCiAgCWlmICgoY2hpbGRfc3RhdGUgPSBzc2hidWZfbmV3KCkpID09 IE5VTEwpCi1AQCAtMTk4MSw2ICsyMDQ4LDE5IEBAIG1tX2dldF9rZXlzdGF0ZShzdHJ1Y3Qgc3No ICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRvcikKK0BAIC0xOTY1LDYgKzIwMzIsMTkgQEAg bW1fZ2V0X2tleXN0YXRlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0b3IgKnBtb25pdG9y KQogIAltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5tX3NlbmRmZCwgTU9OSVRP Ul9SRVFfS0VZRVhQT1JULAogIAkgICAgY2hpbGRfc3RhdGUpOwogIAlkZWJ1ZzNfZigiR09UIG5l dyBrZXlzIik7CkBAIC0xMzc4LDcgKzEzNzgsNyBAQCBpbmRleCA1MjU1MDgzYWIuLjMwNTg4MzI3 OCAxMDA2NDQKICB9CiAgCiAgCi1AQCAtMjI3NSwzICsyMzU1LDEwMiBAQCBtbV9hbnN3ZXJfZ3Nz X3VwZGF0ZWNyZWRzKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAq bSkgeworQEAgLTIyNTksMyArMjMzOSwxMDIgQEAgbW1fYW5zd2VyX2dzc191cGRhdGVjcmVkcyhz dHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pIHsKICAKICAjZW5k aWYgLyogR1NTQVBJICovCiAgCkBAIC0xNTAxLDEwICsxNTAxLDEwIEBAIGluZGV4IGY0NzIxYzQ3 Mi4uMDg3YWRkZmY1IDEwMDY0NAogIAlNT05JVE9SX1JFUV9HU1NTSUdOID0gMTUwLCBNT05JVE9S X0FOU19HU1NTSUdOID0gMTUxLAogIAlNT05JVE9SX1JFUV9HU1NVUENSRURTID0gMTUyLCBNT05J VE9SX0FOU19HU1NVUENSRURTID0gMTUzLAogZGlmZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5jIGIv bW9uaXRvcl93cmFwLmMKLWluZGV4IDQ5NmRlNDM2ZS4uZWY0MTliNzQzIDEwMDY0NAoraW5kZXgg MmIwNDRmMzgzLi5iZGFjN2QzZjkgMTAwNjQ0CiAtLS0gYS9tb25pdG9yX3dyYXAuYwogKysrIGIv bW9uaXRvcl93cmFwLmMKLUBAIC01OTgsNyArNTk4LDcgQEAgbW1fa2V5X2FsbG93ZWQoZW51bSBt bV9rZXl0eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmhvc3QsCitAQCAt NTY1LDcgKzU2NSw3IEBAIG1tX2tleV9hbGxvd2VkKGVudW0gbW1fa2V5dHlwZSB0eXBlLCBjb25z dCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpob3N0LAogICAqLwogIAogIGludApAQCAtMTUxMyw3 ICsxNTEzLDcgQEAgaW5kZXggNDk2ZGU0MzZlLi5lZjQxOWI3NDMgMTAwNjQ0CiAgICAgIGNvbnN0 IHVfY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sIGNvbnN0IGNoYXIgKnNpZ2FsZywgdV9pbnQg Y29tcGF0LAogICAgICBzdHJ1Y3Qgc3Noa2V5X3NpZ19kZXRhaWxzICoqc2lnX2RldGFpbHNwKQog IHsKLUBAIC02MTQsNyArNjE0LDggQEAgbW1fc3Noa2V5X3ZlcmlmeShjb25zdCBzdHJ1Y3Qgc3No a2V5ICprZXksIGNvbnN0IHVfY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuLAorQEAgLTU4MSw3ICs1 ODEsOCBAQCBtbV9zc2hrZXlfdmVyaWZ5KGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSwgY29uc3Qg dV9jaGFyICpzaWcsIHNpemVfdCBzaWdsZW4sCiAgCQkqc2lnX2RldGFpbHNwID0gTlVMTDsKICAJ aWYgKChtID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQogIAkJZmF0YWxfZigic3NoYnVmX25ldyBm YWlsZWQiKTsKQEAgLTE1MjMsNyArMTUyMyw3IEBAIGluZGV4IDQ5NmRlNDM2ZS4uZWY0MTliNzQz IDEwMDY0NAogIAkgICAgKHIgPSBzc2hidWZfcHV0X3N0cmluZyhtLCBzaWcsIHNpZ2xlbikpICE9 IDAgfHwKICAJICAgIChyID0gc3NoYnVmX3B1dF9zdHJpbmcobSwgZGF0YSwgZGF0YWxlbikpICE9 IDAgfHwKICAJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sIHNpZ2FsZyA9PSBOVUxMID8g IiIgOiBzaWdhbGcpKSAhPSAwKQotQEAgLTY0Nyw2ICs2NDgsMjIgQEAgbW1fc3Noa2V5X3Zlcmlm eShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksIGNvbnN0IHVfY2hhciAqc2lnLCBzaXplX3Qgc2ln bGVuLAorQEAgLTYxNCw2ICs2MTUsMjIgQEAgbW1fc3Noa2V5X3ZlcmlmeShjb25zdCBzdHJ1Y3Qg c3Noa2V5ICprZXksIGNvbnN0IHVfY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuLAogIAlyZXR1cm4g MDsKICB9CiAgCkBAIC0xNTQ2LDcgKzE1NDYsNyBAQCBpbmRleCA0OTZkZTQzNmUuLmVmNDE5Yjc0 MyAxMDA2NDQKICB2b2lkCiAgbW1fc2VuZF9rZXlzdGF0ZShzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVj dCBtb25pdG9yICptb25pdG9yKQogIHsKLUBAIC0xMDYzLDExICsxMDgwLDEyIEBAIG1tX2F1ZGl0 X2V2ZW50KHN0cnVjdCBzc2ggKnNzaCwgc3NoX2F1ZGl0X2V2ZW50X3QgZXZlbnQpCitAQCAtMTAx MywxMSArMTAzMCwxMiBAQCBtbV9hdWRpdF9ldmVudChzdHJ1Y3Qgc3NoICpzc2gsIHNzaF9hdWRp dF9ldmVudF90IGV2ZW50KQogIAlzc2hidWZfZnJlZShtKTsKICB9CiAgCkBAIC0xNTYxLDcgKzE1 NjEsNyBAQCBpbmRleCA0OTZkZTQzNmUuLmVmNDE5Yjc0MyAxMDA2NDQKICAKICAJZGVidWczX2Yo ImVudGVyaW5nIGNvbW1hbmQgJXMiLCBjb21tYW5kKTsKICAKLUBAIC0xMDc3LDYgKzEwOTUsMzAg QEAgbW1fYXVkaXRfcnVuX2NvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCkKK0BAIC0xMDI3LDYg KzEwNDUsMzAgQEAgbW1fYXVkaXRfcnVuX2NvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCkKICAJ CWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKICAKICAJbW1fcmVxdWVzdF9zZW5kKHBtb25p dG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9SRVFfQVVESVRfQ09NTUFORCwgbSk7CkBAIC0xNTkyLDcg KzE1OTIsNyBAQCBpbmRleCA0OTZkZTQzNmUuLmVmNDE5Yjc0MyAxMDA2NDQKICAJc3NoYnVmX2Zy ZWUobSk7CiAgfQogICNlbmRpZiAvKiBTU0hfQVVESVRfRVZFTlRTICovCi1AQCAtMTMyNSwzICsx MzY3LDgzIEBAIHNlcnZlcl9nZXRfY29ubmVjdGlvbl9pbmZvKHN0cnVjdCBzc2ggKnNzaCwgaW50 IHBvcHVsYXRlLCBpbnQgdXNlX2RucykKK0BAIC0xMjc1LDMgKzEzMTcsODMgQEAgc2VydmVyX2dl dF9jb25uZWN0aW9uX2luZm8oc3RydWN0IHNzaCAqc3NoLCBpbnQgcG9wdWxhdGUsIGludCB1c2Vf ZG5zKQogIAlyZXR1cm4gJmNpOwogIH0KICAKQEAgLTE2NzcsNyArMTY3Nyw3IEBAIGluZGV4IDQ5 NmRlNDM2ZS4uZWY0MTliNzQzIDEwMDY0NAogK30KICsjZW5kaWYgLyogU1NIX0FVRElUX0VWRU5U UyAqLwogZGlmZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5oIGIvbW9uaXRvcl93cmFwLmgKLWluZGV4 IGE3MDhiZjRkOC4uOTg1Njk2OGY5IDEwMDY0NAoraW5kZXggMDdiMjA3ZDFkLi43Zjg0NmYwODUg MTAwNjQ0CiAtLS0gYS9tb25pdG9yX3dyYXAuaAogKysrIGIvbW9uaXRvcl93cmFwLmgKIEBAIC02 Myw3ICs2Myw5IEBAIGludCBtbV91c2VyX2tleV9hbGxvd2VkKHN0cnVjdCBzc2ggKnNzaCwgc3Ry dWN0IHBhc3N3ZCAqLCBzdHJ1Y3Qgc3Noa2V5ICosIGludCwKQEAgLTE3MDYsMTAgKzE3MDYsMTAg QEAgaW5kZXggYTcwOGJmNGQ4Li45ODU2OTY4ZjkgMTAwNjQ0CiAgCiAgc3RydWN0IFNlc3Npb247 CiBkaWZmIC0tZ2l0IGEvcGFja2V0LmMgYi9wYWNrZXQuYwotaW5kZXggMTkwYTU3OWQxLi5mYTZm NGM4NDMgMTAwNjQ0CitpbmRleCA2M2RjYjUzNTEuLjRjM2M1NDFlZCAxMDA2NDQKIC0tLSBhL3Bh Y2tldC5jCiArKysgYi9wYWNrZXQuYwotQEAgLTc3LDYgKzc3LDcgQEAKK0BAIC03NSw2ICs3NSw3 IEBACiAgI2VuZGlmCiAgCiAgI2luY2x1ZGUgInhtYWxsb2MuaCIKQEAgLTE3MTcsNyArMTcxNyw3 IEBAIGluZGV4IDE5MGE1NzlkMS4uZmE2ZjRjODQzIDEwMDY0NAogICNpbmNsdWRlICJjb21wYXQu aCIKICAjaW5jbHVkZSAic3NoMi5oIgogICNpbmNsdWRlICJjaXBoZXIuaCIKLUBAIC01MTEsNiAr NTEyLDEzIEBAIHNzaF9wYWNrZXRfZ2V0X2Nvbm5lY3Rpb25fb3V0KHN0cnVjdCBzc2ggKnNzaCkK K0BAIC01MTQsNiArNTE1LDEzIEBAIHNzaF9wYWNrZXRfZ2V0X2Nvbm5lY3Rpb25fb3V0KHN0cnVj dCBzc2ggKnNzaCkKICAJcmV0dXJuIHNzaC0+c3RhdGUtPmNvbm5lY3Rpb25fb3V0OwogIH0KICAK QEAgLTE3MzEsNyArMTczMSw3IEBAIGluZGV4IDE5MGE1NzlkMS4uZmE2ZjRjODQzIDEwMDY0NAog IC8qCiAgICogUmV0dXJucyB0aGUgSVAtYWRkcmVzcyBvZiB0aGUgcmVtb3RlIGhvc3QgYXMgYSBz dHJpbmcuICBUaGUgcmV0dXJuZWQKICAgKiBzdHJpbmcgbXVzdCBub3QgYmUgZnJlZWQuCi1AQCAt NjgxLDIyICs2ODksMTkgQEAgc3NoX3BhY2tldF9jbG9zZV9pbnRlcm5hbChzdHJ1Y3Qgc3NoICpz c2gsIGludCBkb19jbG9zZSkKK0BAIC02ODQsMjIgKzY5MiwxOSBAQCBzc2hfcGFja2V0X2Nsb3Nl X2ludGVybmFsKHN0cnVjdCBzc2ggKnNzaCwgaW50IGRvX2Nsb3NlKQogIAlzdHJ1Y3Qgc2Vzc2lv bl9zdGF0ZSAqc3RhdGUgPSBzc2gtPnN0YXRlOwogIAl1X2ludCBtb2RlOwogIAlzdHJ1Y3QgcGFj a2V0ICpwOwpAQCAtMTc1OSw3ICsxNzU5LDcgQEAgaW5kZXggMTkwYTU3OWQxLi5mYTZmNGM4NDMg MTAwNjQ0CiAgCXdoaWxlICgocCA9IFRBSUxRX0ZJUlNUKCZzdGF0ZS0+b3V0Z29pbmcpKSkgewog IAkJc3NoYnVmX2ZyZWUocC0+cGF5bG9hZCk7CiAgCQlUQUlMUV9SRU1PVkUoJnN0YXRlLT5vdXRn b2luZywgcCwgbmV4dCk7Ci1AQCAtNzM3LDggKzc0MiwxOCBAQCBzc2hfcGFja2V0X2Nsb3NlX2lu dGVybmFsKHN0cnVjdCBzc2ggKnNzaCwgaW50IGRvX2Nsb3NlKQorQEAgLTc0MCw4ICs3NDUsMTgg QEAgc3NoX3BhY2tldF9jbG9zZV9pbnRlcm5hbChzdHJ1Y3Qgc3NoICpzc2gsIGludCBkb19jbG9z ZSkKICAjZW5kaWYJLyogV0lUSF9aTElCICovCiAgCWNpcGhlcl9mcmVlKHN0YXRlLT5zZW5kX2Nv bnRleHQpOwogIAljaXBoZXJfZnJlZShzdGF0ZS0+cmVjZWl2ZV9jb250ZXh0KTsKQEAgLTE3Nzgs NyArMTc3OCw3IEBAIGluZGV4IDE5MGE1NzlkMS4uZmE2ZjRjODQzIDEwMDY0NAogIAkJZnJlZShz c2gtPmxvY2FsX2lwYWRkcik7CiAgCQlzc2gtPmxvY2FsX2lwYWRkciA9IE5VTEw7CiAgCQlmcmVl KHNzaC0+cmVtb3RlX2lwYWRkcik7Ci1AQCAtMTAwNCw2ICsxMDE5LDcgQEAgc3NoX3NldF9uZXdr ZXlzKHN0cnVjdCBzc2ggKnNzaCwgaW50IG1vZGUpCitAQCAtMTAwNyw2ICsxMDIyLDcgQEAgc3No X3NldF9uZXdrZXlzKHN0cnVjdCBzc2ggKnNzaCwgaW50IG1vZGUpCiAgCQkgICAgKHVuc2lnbmVk IGxvbmcgbG9uZylzdGF0ZS0+cF9zZW5kLmJ5dGVzLAogIAkJICAgICh1bnNpZ25lZCBsb25nIGxv bmcpc3RhdGUtPnBfc2VuZC5ibG9ja3MpOwogIAkJa2V4X2ZyZWVfbmV3a2V5cyhzdGF0ZS0+bmV3 a2V5c1ttb2RlXSk7CkBAIC0xNzg2LDcgKzE3ODYsNyBAQCBpbmRleCAxOTBhNTc5ZDEuLmZhNmY0 Yzg0MyAxMDA2NDQKICAJCXN0YXRlLT5uZXdrZXlzW21vZGVdID0gTlVMTDsKICAJfQogIAkvKiBu b3RlIHRoYXQgYm90aCBieXRlcyBhbmQgdGhlIHNlcW5yIGFyZSBub3QgcmVzZXQgKi8KLUBAIC0y Mzg1LDYgKzI0MDEsNzIgQEAgc3NoX3BhY2tldF9nZXRfb3V0cHV0KHN0cnVjdCBzc2ggKnNzaCkK K0BAIC0yMzk4LDYgKzI0MTQsNzIgQEAgc3NoX3BhY2tldF9nZXRfb3V0cHV0KHN0cnVjdCBzc2gg KnNzaCkKICAJcmV0dXJuICh2b2lkICopc3NoLT5zdGF0ZS0+b3V0cHV0OwogIH0KICAKQEAgLTE4 NjAsMTcgKzE4NjAsMTcgQEAgaW5kZXggMTkwYTU3OWQxLi5mYTZmNGM4NDMgMTAwNjQ0CiAgc3Rh dGljIGludAogIHNzaF9wYWNrZXRfc2V0X3Bvc3RhdXRoKHN0cnVjdCBzc2ggKnNzaCkKIGRpZmYg LS1naXQgYS9wYWNrZXQuaCBiL3BhY2tldC5oCi1pbmRleCAzZThhY2IyY2QuLmU5YWVmZGFhZCAx MDA2NDQKK2luZGV4IDQ0MmUzOGJiNy4uYmZlNDgxMjIwIDEwMDY0NAogLS0tIGEvcGFja2V0LmgK ICsrKyBiL3BhY2tldC5oCi1AQCAtMjI1LDQgKzIyNSw1IEBAIGNoYXIJKmNvbm5lY3Rpb25faW5m b19tZXNzYWdlKHN0cnVjdCBzc2ggKnNzaCk7Ci0gIyB1bmRlZiBFQ19QT0lOVAotICNlbmRpZgor QEAgLTIwNyw0ICsyMDcsNSBAQCB2b2lkCXNzaHBrdF9mbXRfY29ubmVjdGlvbl9pZChzdHJ1Y3Qg c3NoICpzc2gsIGNoYXIgKnMsIHNpemVfdCBsKTsKKyBjb25zdCB1X2NoYXIJKnNzaHBrdF9wdHIo c3RydWN0IHNzaCAqLCBzaXplX3QgKmxlbnApOworIGNoYXIJKmNvbm5lY3Rpb25faW5mb19tZXNz YWdlKHN0cnVjdCBzc2ggKnNzaCk7CiAgCiArdm9pZAkgcGFja2V0X2Rlc3Ryb3lfYWxsKHN0cnVj dCBzc2ggKiwgaW50LCBpbnQpOwogICNlbmRpZgkJCQkvKiBQQUNLRVRfSCAqLwogZGlmZiAtLWdp dCBhL3Nlc3Npb24uYyBiL3Nlc3Npb24uYwotaW5kZXggMGMyNjQ0OGQ5Li43NWZmMTA4MGUgMTAw NjQ0CitpbmRleCA1NzI0ODdiNGEuLmQzNmMxYjcwMiAxMDA2NDQKIC0tLSBhL3Nlc3Npb24uYwog KysrIGIvc2Vzc2lvbi5jCiBAQCAtMTM5LDYgKzEzOSw3IEBAIHN0YXRpYyBpbnQgc2Vzc2lvbl9w dHlfcmVxKHN0cnVjdCBzc2ggKiwgU2Vzc2lvbiAqKTsKQEAgLTE5MzAsNyArMTkzMCw3IEBAIGlu ZGV4IDBjMjY0NDhkOS4uNzVmZjEwODBlIDEwMDY0NAogIAogIAkvKiBGb3JjZSBhIHBhc3N3b3Jk IGNoYW5nZSAqLwogIAlpZiAocy0+YXV0aGN0eHQtPmZvcmNlX3B3Y2hhbmdlKSB7Ci1AQCAtMTcx Nyw2ICsxNzM0LDkgQEAgc2Vzc2lvbl91bnVzZWQoaW50IGlkKQorQEAgLTE3MTgsNiArMTczNSw5 IEBAIHNlc3Npb25fdW51c2VkKGludCBpZCkKICAJc2Vzc2lvbnNbaWRdLnR0eWZkID0gLTE7CiAg CXNlc3Npb25zW2lkXS5wdHltYXN0ZXIgPSAtMTsKICAJc2Vzc2lvbnNbaWRdLngxMV9jaGFuaWRz ID0gTlVMTDsKQEAgLTE5NDAsNyArMTk0MCw3IEBAIGluZGV4IDBjMjY0NDhkOS4uNzVmZjEwODBl IDEwMDY0NAogIAlzZXNzaW9uc1tpZF0ubmV4dF91bnVzZWQgPSBzZXNzaW9uc19maXJzdF91bnVz ZWQ7CiAgCXNlc3Npb25zX2ZpcnN0X3VudXNlZCA9IGlkOwogIH0KLUBAIC0xNzk1LDYgKzE4MTUs MTkgQEAgc2Vzc2lvbl9vcGVuKEF1dGhjdHh0ICphdXRoY3R4dCwgaW50IGNoYW5pZCkKK0BAIC0x Nzk2LDYgKzE4MTYsMTkgQEAgc2Vzc2lvbl9vcGVuKEF1dGhjdHh0ICphdXRoY3R4dCwgaW50IGNo YW5pZCkKICAJcmV0dXJuIDE7CiAgfQogIApAQCAtMTk2MCw3ICsxOTYwLDcgQEAgaW5kZXggMGMy NjQ0OGQ5Li43NWZmMTA4MGUgMTAwNjQ0CiAgU2Vzc2lvbiAqCiAgc2Vzc2lvbl9ieV90dHkoY2hh ciAqdHR5KQogIHsKLUBAIC0yNDEzLDYgKzI0NDYsMzIgQEAgc2Vzc2lvbl9leGl0X21lc3NhZ2Uo c3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBpbnQgc3RhdHVzKQorQEAgLTI0MTcsNiArMjQ1 MCwzMiBAQCBzZXNzaW9uX2V4aXRfbWVzc2FnZShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMs IGludCBzdGF0dXMpCiAgCQljaGFuX3dyaXRlX2ZhaWxlZChzc2gsIGMpOwogIH0KICAKQEAgLTE5 OTMsNyArMTk5Myw3IEBAIGluZGV4IDBjMjY0NDhkOS4uNzVmZjEwODBlIDEwMDY0NAogIHZvaWQK ICBzZXNzaW9uX2Nsb3NlKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcykKICB7Ci1AQCAtMjQy Niw2ICsyNDg1LDEwIEBAIHNlc3Npb25fY2xvc2Uoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpz KQorQEAgLTI0MzAsNiArMjQ4OSwxMCBAQCBzZXNzaW9uX2Nsb3NlKHN0cnVjdCBzc2ggKnNzaCwg U2Vzc2lvbiAqcykKICAKICAJaWYgKHMtPnR0eWZkICE9IC0xKQogIAkJc2Vzc2lvbl9wdHlfY2xl YW51cChzKTsKQEAgLTIwMDQsNyArMjAwNCw3IEBAIGluZGV4IDBjMjY0NDhkOS4uNzVmZjEwODBl IDEwMDY0NAogIAlmcmVlKHMtPnRlcm0pOwogIAlmcmVlKHMtPmRpc3BsYXkpOwogIAlmcmVlKHMt PngxMV9jaGFuaWRzKTsKLUBAIC0yNTAyLDE0ICsyNTY1LDE0IEBAIHNlc3Npb25fY2xvc2VfYnlf Y2hhbm5lbChzdHJ1Y3Qgc3NoICpzc2gsIGludCBpZCwgaW50IGZvcmNlLCB2b2lkICphcmcpCitA QCAtMjUwNiwxNCArMjU2OSwxNCBAQCBzZXNzaW9uX2Nsb3NlX2J5X2NoYW5uZWwoc3RydWN0IHNz aCAqc3NoLCBpbnQgaWQsIGludCBmb3JjZSwgdm9pZCAqYXJnKQogIH0KICAKICB2b2lkCkBAIC0y MDIxLDcgKzIwMjEsNyBAQCBpbmRleCAwYzI2NDQ4ZDkuLjc1ZmYxMDgwZSAxMDA2NDQKICAJCQll bHNlCiAgCQkJCXNlc3Npb25fY2xvc2Uoc3NoLCBzKTsKICAJCX0KLUBAIC0yNjM1LDYgKzI2OTgs MTUgQEAgZG9fYXV0aGVudGljYXRlZDIoc3RydWN0IHNzaCAqc3NoLCBBdXRoY3R4dCAqYXV0aGN0 eHQpCitAQCAtMjYzOSw2ICsyNzAyLDE1IEBAIGRvX2F1dGhlbnRpY2F0ZWQyKHN0cnVjdCBzc2gg KnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0KQogIAlzZXJ2ZXJfbG9vcDIoc3NoLCBhdXRoY3R4dCk7 CiAgfQogIApAQCAtMjAzNyw3ICsyMDM3LDcgQEAgaW5kZXggMGMyNjQ0OGQ5Li43NWZmMTA4MGUg MTAwNjQ0CiAgdm9pZAogIGRvX2NsZWFudXAoc3RydWN0IHNzaCAqc3NoLCBBdXRoY3R4dCAqYXV0 aGN0eHQpCiAgewotQEAgLTI2OTgsNyArMjc3MCw3IEBAIGRvX2NsZWFudXAoc3RydWN0IHNzaCAq c3NoLCBBdXRoY3R4dCAqYXV0aGN0eHQpCitAQCAtMjcwMiw3ICsyNzc0LDcgQEAgZG9fY2xlYW51 cChzdHJ1Y3Qgc3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKICAJICogb3IgaWYgcnVubmlu ZyBpbiBtb25pdG9yLgogIAkgKi8KICAJaWYgKG1tX2lzX21vbml0b3IoKSkKQEAgLTIwNzgsNyAr MjA3OCw3IEBAIGluZGV4IDM0NGExZGRmOS4uYTQxYzZlZmNkIDEwMDY0NAogIHZvaWQJIHNlc3Np b25fY2xvc2Uoc3RydWN0IHNzaCAqLCBTZXNzaW9uICopOwogIHZvaWQJIGRvX3NldHVzZXJjb250 ZXh0KHN0cnVjdCBwYXNzd2QgKik7CiBkaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hk LXNlc3Npb24uYwotaW5kZXggMjNiODBlYjAxLi5kODk3MmZiZDUgMTAwNjQ0CitpbmRleCA4YTA2 NjE2ZmQuLjBhOTcwOGQzYSAxMDA2NDQKIC0tLSBhL3NzaGQtc2Vzc2lvbi5jCiArKysgYi9zc2hk LXNlc3Npb24uYwogQEAgLTE4MSw4ICsxODEsOCBAQCBzdHJ1Y3QgaW5jbHVkZV9saXN0IGluY2x1 ZGVzID0gVEFJTFFfSEVBRF9JTklUSUFMSVpFUihpbmNsdWRlcyk7CkBAIC0yMjIxLDcgKzIyMjEs NyBAQCBpbmRleCAyM2I4MGViMDEuLmQ4OTcyZmJkNSAxMDA2NDQKICAKICAJcmVzZWVkX3Bybmdz KCk7CiAgCi1AQCAtMTMzMyw2ICsxNDAyLDkgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK0BA IC0xMzM2LDYgKzE0MDUsOSBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQogIAlkb19hdXRoZW50 aWNhdGVkKHNzaCwgYXV0aGN0eHQpOwogIAogIAkvKiBUaGUgY29ubmVjdGlvbiBoYXMgYmVlbiB0 ZXJtaW5hdGVkLiAqLwpAQCAtMjIzMSw3ICsyMjMxLDcgQEAgaW5kZXggMjNiODBlYjAxLi5kODk3 MmZiZDUgMTAwNjQ0CiAgCXNzaF9wYWNrZXRfZ2V0X2J5dGVzKHNzaCwgJmlieXRlcywgJm9ieXRl cyk7CiAgCXZlcmJvc2UoIlRyYW5zZmVycmVkOiBzZW50ICVsbHUsIHJlY2VpdmVkICVsbHUgYnl0 ZXMiLAogIAkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvYnl0ZXMsICh1bnNpZ25lZCBsb25nIGxv bmcpaWJ5dGVzKTsKLUBAIC0xMzc4LDYgKzE0NTAsMTYgQEAgc3NoZF9ob3N0a2V5X3NpZ24oc3Ry dWN0IHNzaCAqc3NoLCBzdHJ1Y3Qgc3Noa2V5ICpwcml2a2V5LAorQEAgLTEzODEsNiArMTQ1Mywx NiBAQCBzc2hkX2hvc3RrZXlfc2lnbihzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2hrZXkgKnBy aXZrZXksCiAgdm9pZAogIGNsZWFudXBfZXhpdChpbnQgaSkKICB7CkBAIC0yMjQ4LDcgKzIyNDgs NyBAQCBpbmRleCAyM2I4MGViMDEuLmQ4OTcyZmJkNSAxMDA2NDQKICAJaWYgKHRoZV9hY3RpdmVf c3RhdGUgIT0gTlVMTCAmJiB0aGVfYXV0aGN0eHQgIT0gTlVMTCkgewogIAkJZG9fY2xlYW51cCh0 aGVfYWN0aXZlX3N0YXRlLCB0aGVfYXV0aGN0eHQpOwogIAkJaWYgKHByaXZzZXBfaXNfcHJlYXV0 aCAmJgotQEAgLTEzOTIsNyArMTQ3NCw5IEBAIGNsZWFudXBfZXhpdChpbnQgaSkKK0BAIC0xMzk1 LDcgKzE0NzcsOSBAQCBjbGVhbnVwX2V4aXQoaW50IGkpCiAgCX0KICAjaWZkZWYgU1NIX0FVRElU X0VWRU5UUwogIAkvKiBkb25lIGFmdGVyIGRvX2NsZWFudXAgc28gaXQgY2FuIGNhbmNlbCB0aGUg UEFNIGF1dGggJ3RocmVhZCcgKi8KQEAgLTIyNjAsNyArMjI2MCw3IEBAIGluZGV4IDIzYjgwZWIw MS4uZDg5NzJmYmQ1IDEwMDY0NAogICNlbmRpZgogIAkvKiBPdmVycmlkZSBkZWZhdWx0IGZhdGFs IGV4aXQgdmFsdWUgd2hlbiBhdXRoIHdhcyBhdHRlbXB0ZWQgKi8KIGRpZmYgLS1naXQgYS9zc2hk LmMgYi9zc2hkLmMKLWluZGV4IDU1MjQzNTgxNy4uMjJhZDRkZmYwIDEwMDY0NAoraW5kZXggZjY2 ZTFmODZmLi42Yjk4NDdmNjcgMTAwNjQ0CiAtLS0gYS9zc2hkLmMKICsrKyBiL3NzaGQuYwogQEAg LTIwNiw2ICsyMDYsMTUgQEAgY2xvc2VfbGlzdGVuX3NvY2tzKHZvaWQpCkBAIC0yMjg4LDUgKzIy ODgsNSBAQCBpbmRleCA1NTI0MzU4MTcuLjIyYWQ0ZGZmMCAxMDA2NDQKICAJCQlpZiAob3B0aW9u cy5waWRfZmlsZSAhPSBOVUxMKQogIAkJCQl1bmxpbmsob3B0aW9ucy5waWRfZmlsZSk7CiAtLSAK LTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDM2LW9wZW5zc2gtNy4xcDItYXVkaXQt cmFjZS1jb25kaXRpb24ucGF0Y2ggYi8wMDM2LW9wZW5zc2gtNy4xcDItYXVkaXQtcmFjZS1jb25k aXRpb24ucGF0Y2gKaW5kZXggM2JkNjU5NC4uM2ZjYmNjZSAxMDA2NDQKLS0tIGEvMDAzNi1vcGVu c3NoLTcuMXAyLWF1ZGl0LXJhY2UtY29uZGl0aW9uLnBhdGNoCisrKyBiLzAwMzYtb3BlbnNzaC03 LjFwMi1hdWRpdC1yYWNlLWNvbmRpdGlvbi5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gZDE4 YzBlOGMxMjExMGQ3YTQ2YmNiZmI2N2NiNmUyOGU3ZWJjZWNmMSBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKK0Zyb20gNjk5MTY4MjMzNWZiMWRkZWQ3YjUwZDkwM2I3ZjljYzYwMDUzNWJhMiBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAKLVN1YmplY3Q6 IFtQQVRDSCAzNi81NF0gb3BlbnNzaC03LjFwMi1hdWRpdC1yYWNlLWNvbmRpdGlvbgorU3ViamVj dDogW1BBVENIIDM2LzUzXSBvcGVuc3NoLTcuMXAyLWF1ZGl0LXJhY2UtY29uZGl0aW9uCiAKICMg QXVkaXQgcmFjZSBjb25kaXRpb24gaW4gZm9ya2VkIGNoaWxkICgjMTMxMDY4NCkKIC0tLQpAQCAt MTEsMTAgKzExLDEwIEBAIFN1YmplY3Q6IFtQQVRDSCAzNi81NF0gb3BlbnNzaC03LjFwMi1hdWRp dC1yYWNlLWNvbmRpdGlvbgogIDMgZmlsZXMgY2hhbmdlZCwgMTAyIGluc2VydGlvbnMoKyksIDcg ZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuYyBiL21vbml0b3Jfd3Jh cC5jCi1pbmRleCBlZjQxOWI3NDMuLmZhMzcxODkyNCAxMDA2NDQKK2luZGV4IGJkYWM3ZDNmOS4u NGRjNjQ4NTdiIDEwMDY0NAogLS0tIGEvbW9uaXRvcl93cmFwLmMKICsrKyBiL21vbml0b3Jfd3Jh cC5jCi1AQCAtMTQ0Niw0ICsxNDQ2LDUwIEBAIG1tX2F1ZGl0X2Rlc3Ryb3lfc2Vuc2l0aXZlX2Rh dGEoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICpmcCwgcGlkX3QgcGlkLCB1aWRfCitAQCAt MTM5Niw0ICsxMzk2LDUwIEBAIG1tX2F1ZGl0X2Rlc3Ryb3lfc2Vuc2l0aXZlX2RhdGEoc3RydWN0 IHNzaCAqc3NoLCBjb25zdCBjaGFyICpmcCwgcGlkX3QgcGlkLCB1aWRfCiAgCW1tX3JlcXVlc3Rf c2VuZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfUkVRX0FVRElUX1NFUlZFUl9LRVlfRlJF RSwgbSk7CiAgCXNzaGJ1Zl9mcmVlKG0pOwogIH0KQEAgLTY2LDcgKzY2LDcgQEAgaW5kZXggZWY0 MTliNzQzLi5mYTM3MTg5MjQgMTAwNjQ0CiArfQogICNlbmRpZiAvKiBTU0hfQVVESVRfRVZFTlRT ICovCiBkaWZmIC0tZ2l0IGEvbW9uaXRvcl93cmFwLmggYi9tb25pdG9yX3dyYXAuaAotaW5kZXgg OTg1Njk2OGY5Li4wODY1ZjU5Y2IgMTAwNjQ0CitpbmRleCA3Zjg0NmYwODUuLjQxZTRiNzlmZSAx MDA2NDQKIC0tLSBhL21vbml0b3Jfd3JhcC5oCiArKysgYi9tb25pdG9yX3dyYXAuaAogQEAgLTk4 LDYgKzk4LDggQEAgdm9pZCBtbV9hdWRpdF91bnN1cHBvcnRlZF9ib2R5KHN0cnVjdCBzc2ggKiwg aW50KTsKQEAgLTc5LDcgKzc5LDcgQEAgaW5kZXggOTg1Njk2OGY5Li4wODY1ZjU5Y2IgMTAwNjQ0 CiAgCiAgc3RydWN0IFNlc3Npb247CiBkaWZmIC0tZ2l0IGEvc2Vzc2lvbi5jIGIvc2Vzc2lvbi5j Ci1pbmRleCA3NWZmMTA4MGUuLjFhN2Y1Y2E3YSAxMDA2NDQKK2luZGV4IGQzNmMxYjcwMi4uYmQ4 ZGM4MDhjIDEwMDY0NAogLS0tIGEvc2Vzc2lvbi5jCiArKysgYi9zZXNzaW9uLmMKIEBAIC0xNjEs NiArMTYxLDEwIEBAIHN0YXRpYyBTZXNzaW9uICpzZXNzaW9ucyA9IE5VTEw7CkBAIC0yMDAsNSAr MjAwLDUgQEAgaW5kZXggNzVmZjEwODBlLi4xYTdmNWNhN2EgMTAwNjQ0CiAgCWlmIChzLT5hdXRo Y3R4dC0+Zm9yY2VfcHdjaGFuZ2UpIHsKICAJCWRvX3NldHVzZXJjb250ZXh0KHB3KTsKIC0tIAot Mi41My4wCisyLjU1LjAKIAoKZGlmZiAtLWdpdCBhLzAwMzctb3BlbnNzaC05LjBwMS1hdWRpdC1s b2cucGF0Y2ggYi8wMDM3LW9wZW5zc2gtOS4wcDEtYXVkaXQtbG9nLnBhdGNoCmluZGV4IDRlOGYy N2UuLjYwY2I0MzkgMTAwNjQ0Ci0tLSBhLzAwMzctb3BlbnNzaC05LjBwMS1hdWRpdC1sb2cucGF0 Y2gKKysrIGIvMDAzNy1vcGVuc3NoLTkuMHAxLWF1ZGl0LWxvZy5wYXRjaApAQCAtMSw3ICsxLDcg QEAKLUZyb20gOGE0ODQzZjg3MjYwMjhjYTZiMTAyODU2OThkY2NlYTg1MjYzMjU5MiBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gYmIzZjBlZmFkMThjNDViYzdjMTMxYzY4OThjOWJjODdi Y2I1MGY1NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5 IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAy MDAKLVN1YmplY3Q6IFtQQVRDSCAzNy81NF0gb3BlbnNzaC05LjBwMS1hdWRpdC1sb2cKK1N1Ympl Y3Q6IFtQQVRDSCAzNy81M10gb3BlbnNzaC05LjBwMS1hdWRpdC1sb2cKIAogIyBodHRwczovL2J1 Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTIwNDk5NDcKIC0tLQpAQCAtMjYyLDUg KzI2Miw1IEBAIGluZGV4IDQ1ZDY2Y2NmZi4uMDVhYzEzMmNmIDEwMDY0NAogIHZvaWQJYXVkaXRf dW5zdXBwb3J0ZWQoc3RydWN0IHNzaCAqLCBpbnQpOwogIHZvaWQJYXVkaXRfa2V4KHN0cnVjdCBz c2ggKiwgaW50LCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICopOwogLS0gCi0yLjUzLjAK KzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDAzOC1vcGVuc3NoLTcuN3AxLWZpcHMucGF0Y2ggYi8w MDM4LW9wZW5zc2gtNy43cDEtZmlwcy5wYXRjaAppbmRleCAxOWMxYjIxLi4wNGI2ODUxIDEwMDY0 NAotLS0gYS8wMDM4LW9wZW5zc2gtNy43cDEtZmlwcy5wYXRjaAorKysgYi8wMDM4LW9wZW5zc2gt Ny43cDEtZmlwcy5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNTVjMGQ1NGI5MWNjMzllZDZm MTA1NDJmODgzZGJhYWQ2YTMyMTNjYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gZDU3 ZmVmOGZjN2IyYWQ2NDI2ZDU4YWI3N2ZhNWFhNjcxNzJiZGFjMCBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKIEZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6 IFRodSwgMjggQXVnIDIwMjUgMTQ6MDE6MzggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAzOC81NF0g b3BlbnNzaC03LjdwMS1maXBzCitTdWJqZWN0OiBbUEFUQ0ggMzgvNTNdIG9wZW5zc2gtNy43cDEt ZmlwcwogCiAtLS0KICBkaC5jICAgICAgICAgICAgICAgICAgICAgfCA0MSArKysrKysrKysrKysr KysrKysrKysrCkBAIC05LDcgKzksNyBAQCBTdWJqZWN0OiBbUEFUQ0ggMzgvNTRdIG9wZW5zc2gt Ny43cDEtZmlwcwogIGtleC1uYW1lcy5jICAgICAgICAgICAgICB8ICA2ICsrKy0KICBrZXguYyAg ICAgICAgICAgICAgICAgICAgfCAgMyArLQogIGtleGdlbi5jICAgICAgICAgICAgICAgICB8IDc0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KLSBrZXhnZXhjLmMgICAg ICAgICAgICAgICAgfCAgNSArKysKKyBrZXhnZXhjLmMgICAgICAgICAgICAgICAgfCAgNiArKysr CiAgbXlwcm9wb3NhbC5oICAgICAgICAgICAgIHwgMzMgKysrKysrKysrKysrKysrKysrCiAgcmVh ZGNvbmYuYyAgICAgICAgICAgICAgIHwgMjEgKysrKysrKysrLS0tCiAgc2FuZGJveC1zZWNjb21w LWZpbHRlci5jIHwgIDMgKysKQEAgLTIzLDcgKzIzLDcgQEAgU3ViamVjdDogW1BBVENIIDM4LzU0 XSBvcGVuc3NoLTcuN3AxLWZpcHMKICBzc2hjb25uZWN0Mi5jICAgICAgICAgICAgfCAxMSArKysr Ky0KICBzc2hkLmMgICAgICAgICAgICAgICAgICAgfCAxOSArKysrKysrKysrKwogIHNzaGtleS5j ICAgICAgICAgICAgICAgICB8IDM3ICsrKysrKysrKysrKysrKysrKysrCi0gMTkgZmlsZXMgY2hh bmdlZCwgMzAwIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQorIDE5IGZpbGVzIGNoYW5n ZWQsIDMwMSBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2Ro LmMgYi9kaC5jCiBpbmRleCBiMjkxNzUwZDguLjNlZmUwYTY5ZiAxMDA2NDQKQEAgLTEwMiw3ICsx MDIsNyBAQCBpbmRleCBjNjMyNmEzOWQuLmU1MWUyOTJiOCAxMDA2NDQKICB1X2ludAkgZGhfZXN0 aW1hdGUoaW50KTsKICB2b2lkCSBkaF9zZXRfbW9kdWxpX2ZpbGUoY29uc3QgY2hhciAqKTsKIGRp ZmYgLS1naXQgYS9rZXgtbmFtZXMuYyBiL2tleC1uYW1lcy5jCi1pbmRleCA3NjlhMzY4MTAuLmMw NzYxYWU4ZiAxMDA2NDQKK2luZGV4IDJiYzQzMTIyMy4uOGU5YzYyMWJkIDEwMDY0NAogLS0tIGEv a2V4LW5hbWVzLmMKICsrKyBiL2tleC1uYW1lcy5jCiBAQCAtMzIsNiArMzIsNyBAQApAQCAtMTEz LDcgKzExMyw3IEBAIGluZGV4IDc2OWEzNjgxMC4uYzA3NjFhZThmIDEwMDY0NAogICNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgogICNlbmRpZgogIAotQEAgLTIwNyw3ICsyMDgsMTAgQEAga2V4X25h bWVzX3ZhbGlkKGNvbnN0IGNoYXIgKm5hbWVzKQorQEAgLTIxMSw3ICsyMTIsMTAgQEAga2V4X25h bWVzX3ZhbGlkKGNvbnN0IGNoYXIgKm5hbWVzKQogIAkJCXJldHVybiAwOwogIAkJfQogIAkJaWYg KGtleF9hbGdfYnlfbmFtZShwKSA9PSBOVUxMKSB7CkBAIC0xMjYsNyArMTI2LDcgQEAgaW5kZXgg NzY5YTM2ODEwLi5jMDc2MWFlOGYgMTAwNjQ0CiAgCQkJcmV0dXJuIDA7CiAgCQl9CiBkaWZmIC0t Z2l0IGEva2V4LmMgYi9rZXguYwotaW5kZXggNzBiZWJjZTZhLi5lMTA1OWRlYzQgMTAwNjQ0Citp bmRleCA5Y2UyYjdlMTIuLjdlNTBmMjc3ZiAxMDA2NDQKIC0tLSBhL2tleC5jCiArKysgYi9rZXgu YwogQEAgLTM3LDYgKzM3LDcgQEAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBpbmRleCA3MGJlYmNlNmEu LmUxMDU5ZGVjNCAxMDA2NDQKICAJICAgICJleHQtaW5mby1zLGtleC1zdHJpY3Qtcy12MDBAb3Bl bnNzaC5jb20iIDoKICAJICAgICJleHQtaW5mby1jLGtleC1zdHJpY3QtYy12MDBAb3BlbnNzaC5j b20iKSkgPT0gTlVMTCkKIGRpZmYgLS1naXQgYS9rZXhnZW4uYyBiL2tleGdlbi5jCi1pbmRleCBh MmJlYjNmMTAuLjJmODI1MjQ4OCAxMDA2NDQKK2luZGV4IGZmNTA0NTgwZi4uODM0MDczZWYxIDEw MDY0NAogLS0tIGEva2V4Z2VuLmMKICsrKyBiL2tleGdlbi5jCiBAQCAtMzEsNiArMzEsNyBAQApA QCAtMTU4LDcgKzE1OCw3IEBAIGluZGV4IGEyYmViM2YxMC4uMmY4MjUyNDg4IDEwMDY0NAogIAog ICNpbmNsdWRlICJzc2hrZXkuaCIKICAjaW5jbHVkZSAia2V4LmgiCi1AQCAtMTE1LDEzICsxMTYs MjggQEAga2V4X2dlbl9jbGllbnQoc3RydWN0IHNzaCAqc3NoKQorQEAgLTExOCwxMyArMTE5LDI4 IEBAIGtleF9nZW5fY2xpZW50KHN0cnVjdCBzc2ggKnNzaCkKICAJCWJyZWFrOwogICNlbmRpZiAv KiBXSVRIX09QRU5TU0wgKi8KICAJY2FzZSBLRVhfQzI1NTE5X1NIQTI1NjoKQEAgLTE5MCw3ICsx OTAsNyBAQCBpbmRleCBhMmJlYjNmMTAuLjJmODI1MjQ4OCAxMDA2NDQKICAJCWJyZWFrOwogIAlk ZWZhdWx0OgogIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLUBAIC0xODksMTUgKzIw NSwzMCBAQCBpbnB1dF9rZXhfZ2VuX3JlcGx5KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVj dCBzc2ggKnNzaCkKK0BAIC0xOTYsMTUgKzIxMiwzMCBAQCBpbnB1dF9rZXhfZ2VuX3JlcGx5KGlu dCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKICAJCWJyZWFrOwogICNlbmRp ZiAvKiBXSVRIX09QRU5TU0wgKi8KICAJY2FzZSBLRVhfQzI1NTE5X1NIQTI1NjoKQEAgLTIyNiw3 ICsyMjYsNyBAQCBpbmRleCBhMmJlYjNmMTAuLjJmODI1MjQ4OCAxMDA2NDQKICAJCWJyZWFrOwog IAlkZWZhdWx0OgogIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLUBAIC0zMTIsMTYg KzM0MywzMSBAQCBpbnB1dF9rZXhfZ2VuX2luaXQoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3Ry dWN0IHNzaCAqc3NoKQorQEAgLTMyMywxNiArMzU0LDMxIEBAIGlucHV0X2tleF9nZW5faW5pdChp bnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCiAgCQlicmVhazsKICAjZW5k aWYgLyogV0lUSF9PUEVOU1NMICovCiAgCWNhc2UgS0VYX0MyNTUxOV9TSEEyNTY6CkBAIC0yNjUs NyArMjY1LDcgQEAgaW5kZXggYTJiZWIzZjEwLi4yZjgyNTI0ODggMTAwNjQ0CiAgCWRlZmF1bHQ6 CiAgCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwogZGlmZiAtLWdpdCBhL2tleGdleGMu YyBiL2tleGdleGMuYwotaW5kZXggMWMyMTk0YThmLi5mOWE1OGI5NTUgMTAwNjQ0CitpbmRleCAx YzIxOTRhOGYuLjI3NjNlODYyYSAxMDA2NDQKIC0tLSBhL2tleGdleGMuYwogKysrIGIva2V4Z2V4 Yy5jCiBAQCAtMjksNiArMjksNyBAQApAQCAtMjc2LDcgKzI3Niw3IEBAIGluZGV4IDFjMjE5NGE4 Zi4uZjlhNThiOTU1IDEwMDY0NAogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICAKICAjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgotQEAgLTExNyw2ICsxMTgsMTEgQEAgaW5wdXRfa2V4X2RoX2dleF9n cm91cChpbnQgdHlwZSwgdV9pbnQzMgorQEAgLTExNiw2ICsxMTcsMTEgQEAgaW5wdXRfa2V4X2Ro X2dleF9ncm91cChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCiAgCX0K ICAJcCA9IGcgPSBOVUxMOyAvKiBiZWxvbmcgdG8ga2V4LT5kaCBub3cgKi8KICAKQEAgLTI4OSwx MiArMjg5LDEyIEBAIGluZGV4IDFjMjE5NGE4Zi4uZjlhNThiOTU1IDEwMDY0NAogIAlpZiAoKHIg PSBkaF9nZW5fa2V5KGtleC0+ZGgsIGtleC0+d2VfbmVlZCAqIDgpKSAhPSAwKQogIAkJZ290byBv dXQ7CiBkaWZmIC0tZ2l0IGEvbXlwcm9wb3NhbC5oIGIvbXlwcm9wb3NhbC5oCi1pbmRleCBkOTky ZDhiMTIuLjY0MzNlMDgyMCAxMDA2NDQKK2luZGV4IGEyYTFmOTkxZS4uZjAzMjkzZjM1IDEwMDY0 NAogLS0tIGEvbXlwcm9wb3NhbC5oCiArKysgYi9teXByb3Bvc2FsLmgKIEBAIC02MCw2ICs2MCwx OCBAQAogIAkicnNhLXNoYTItNTEyLCIgXAotIAkicnNhLXNoYTItMjU2IgorIAkicnNhLXNoYTIt MjU2IiBcCiAgCiArI2RlZmluZQlLRVhfRklQU19QS19BTEcJXAogKwkiZWNkc2Etc2hhMi1uaXN0 cDI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwiIFwKQEAgLTM0MCw3ICszNDAsNyBAQCBpbmRleCBk OTkyZDhiMTIuLjY0MzNlMDgyMCAxMDA2NDQKICAjZGVmaW5lCVNTSF9BTExPV0VEX0NBX1NJR0FM R1MJXAogIAkic3NoLWVkMjU1MTksIiBcCiBkaWZmIC0tZ2l0IGEvcmVhZGNvbmYuYyBiL3JlYWRj b25mLmMKLWluZGV4IDkwMDQwNzZlNC4uMDU4ZTUzY2YxIDEwMDY0NAoraW5kZXggOTkyYzc4ODY2 Li4yY2JmMWZjYmQgMTAwNjQ0CiAtLS0gYS9yZWFkY29uZi5jCiArKysgYi9yZWFkY29uZi5jCiBA QCAtMzgsNiArMzgsMTIgQEAKQEAgLTM1Niw3ICszNTYsNyBAQCBpbmRleCA5MDA0MDc2ZTQuLjA1 OGU1M2NmMSAxMDA2NDQKICAjaW5jbHVkZSA8dXRpbC5oPgogICNpZiBkZWZpbmVkKEhBVkVfU1RS TlZJUykgJiYgZGVmaW5lZChIQVZFX1ZJU19IKSAmJiAhZGVmaW5lZChCUk9LRU5fU1RSTlZJUykK ICAjIGluY2x1ZGUgPHZpcy5oPgotQEAgLTMwOTgsMTEgKzMxMDQsMTYgQEAgZmlsbF9kZWZhdWx0 X29wdGlvbnMoT3B0aW9ucyAqIG9wdGlvbnMpCitAQCAtMzA5OSwxMSArMzEwNSwxNiBAQCBmaWxs X2RlZmF1bHRfb3B0aW9ucyhPcHRpb25zICogb3B0aW9ucykKICAJYWxsX2tleSA9IHNzaGtleV9h bGdfbGlzdCgwLCAwLCAxLCAnLCcpOwogIAlhbGxfc2lnID0gc3Noa2V5X2FsZ19saXN0KDAsIDEs IDEsICcsJyk7CiAgCS8qIHJlbW92ZSB1bnN1cHBvcnRlZCBhbGdvcyBmcm9tIGRlZmF1bHQgbGlz dHMgKi8KQEAgLTM3OSw3ICszNzksNyBAQCBpbmRleCA5MDA0MDc2ZTQuLjA1OGU1M2NmMSAxMDA2 NDQKICAJZG8geyBcCiAgCQlpZiAoKHIgPSBrZXhfYXNzZW1ibGVfbmFtZXMoJm9wdGlvbnMtPndo YXQsIFwKIGRpZmYgLS1naXQgYS9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMgYi9zYW5kYm94LXNl Y2NvbXAtZmlsdGVyLmMKLWluZGV4IGUyMTA0OGYzYS4uMjVjOWRmNDJhIDEwMDY0NAoraW5kZXgg YjY1NDEzYzk1Li4xN2UxY2VhNzIgMTAwNjQ0CiAtLS0gYS9zYW5kYm94LXNlY2NvbXAtZmlsdGVy LmMKICsrKyBiL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYwogQEAgLTI1OCw2ICsyNTgsOSBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyIHByZWF1dGhfaW5zbnNbXSA9IHsKQEAgLTM5 Myw3ICszOTMsNyBAQCBpbmRleCBlMjEwNDhmM2EuLjI1YzlkZjQyYSAxMDA2NDQKICAJU0NfREVO WShfX05SX29wZW5hdCwgRUFDQ0VTKSwKICAjZW5kaWYKIGRpZmYgLS1naXQgYS9zZXJ2Y29uZi5j IGIvc2VydmNvbmYuYwotaW5kZXggODA0NTc1NmZiLi42YzFiYTc3ZjYgMTAwNjQ0CitpbmRleCAy NzE0N2ExZTcuLjg0NmY1ZDIxMiAxMDA2NDQKIC0tLSBhL3NlcnZjb25mLmMKICsrKyBiL3NlcnZj b25mLmMKIEBAIC0zOCw3ICszOCwxNSBAQApAQCAtNDEyLDcgKzQxMiw3IEBAIGluZGV4IDgwNDU3 NTZmYi4uNmMxYmE3N2Y2IDEwMDY0NAogIAogICNpbmNsdWRlICJ4bWFsbG9jLmgiCiAgI2luY2x1 ZGUgInNzaC5oIgotQEAgLTI0MiwxMSArMjUwLDE2IEBAIGFzc2VtYmxlX2FsZ29yaXRobXMoU2Vy dmVyT3B0aW9ucyAqbykKK0BAIC0yMTMsMTEgKzIyMSwxNiBAQCBhc3NlbWJsZV9hbGdvcml0aG1z KFNlcnZlck9wdGlvbnMgKm8pCiAgCWFsbF9rZXkgPSBzc2hrZXlfYWxnX2xpc3QoMCwgMCwgMSwg JywnKTsKICAJYWxsX3NpZyA9IHNzaGtleV9hbGdfbGlzdCgwLCAxLCAxLCAnLCcpOwogIAkvKiBy ZW1vdmUgdW5zdXBwb3J0ZWQgYWxnb3MgZnJvbSBkZWZhdWx0IGxpc3RzICovCkBAIC00MzUsNyAr NDM1LDcgQEAgaW5kZXggODA0NTc1NmZiLi42YzFiYTc3ZjYgMTAwNjQ0CiAgCWRvIHsgXAogIAkJ aWYgKChyID0ga2V4X2Fzc2VtYmxlX25hbWVzKCZvLT53aGF0LCBkZWZhdWx0cywgYWxsKSkgIT0g MCkgXAogZGlmZiAtLWdpdCBhL3NzaC1lZDI1NTE5LmMgYi9zc2gtZWQyNTUxOS5jCi1pbmRleCAy MzY5YzNhZjAuLmFmMDU5ZDdmMSAxMDA2NDQKK2luZGV4IDgyMjhmMjgzMC4uNjY4ODIzZWQyIDEw MDY0NAogLS0tIGEvc3NoLWVkMjU1MTkuYwogKysrIGIvc3NoLWVkMjU1MTkuYwogQEAgLTI0LDYg KzI0LDcgQEAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBpbmRleCAyMzY5YzNhZjAuLmFmMDU5ZDdmMSAx MDA2NDQKICAKICAjaW5jbHVkZSAibG9nLmgiCiAgI2luY2x1ZGUgInNzaGJ1Zi5oIgotQEAgLTE2 Miw2ICsxNjMsMTAgQEAgc3NoX2VkMjU1MTlfc2lnbihzdHJ1Y3Qgc3Noa2V5ICprZXksCitAQCAt MTYzLDYgKzE2NCwxMCBAQCBzc2hfZWQyNTUxOV9zaWduKHN0cnVjdCBzc2hrZXkgKmtleSwKICAJ ICAgIGtleS0+ZWQyNTUxOV9zayA9PSBOVUxMIHx8CiAgCSAgICBkYXRhbGVuID49IElOVF9NQVgg LSBjcnlwdG9fc2lnbl9lZDI1NTE5X0JZVEVTKQogIAkJcmV0dXJuIFNTSF9FUlJfSU5WQUxJRF9B UkdVTUVOVDsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCBpbmRleCAyMzY5YzNhZjAuLmFmMDU5ZDdmMSAx MDA2NDQKICAJc21sZW4gPSBzbGVuID0gZGF0YWxlbiArIGNyeXB0b19zaWduX2VkMjU1MTlfQllU RVM7CiAgCWlmICgoc2lnID0gbWFsbG9jKHNsZW4pKSA9PSBOVUxMKQogIAkJcmV0dXJuIFNTSF9F UlJfQUxMT0NfRkFJTDsKLUBAIC0yNDMsNiArMjQ4LDEwIEBAIHNzaF9lZDI1NTE5X3ZlcmlmeShj b25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCitAQCAtMjQ0LDYgKzI0OSwxMCBAQCBzc2hfZWQyNTUx OV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAogIAkgICAgZGxlbiA+PSBJTlRfTUFY IC0gY3J5cHRvX3NpZ25fZWQyNTUxOV9CWVRFUyB8fAogIAkgICAgc2lnID09IE5VTEwgfHwgc2ln bGVuID09IDApCiAgCQlyZXR1cm4gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwpAQCAtNDg1LDcg KzQ4NSw3IEBAIGluZGV4IGE4OTRlMjNjOS4uMzI5ZGM5ZGEwIDEwMDY0NAogIAogIHR5cGVkZWYg c3RydWN0IHsKIGRpZmYgLS1naXQgYS9zc2gta2V5Z2VuLmMgYi9zc2gta2V5Z2VuLmMKLWluZGV4 IDU4NGQ1YTg5OS4uMTI0MzBlNmE0IDEwMDY0NAoraW5kZXggNjY2N2E1YzFiLi5lZDE5MzJmZjAg MTAwNjQ0CiAtLS0gYS9zc2gta2V5Z2VuLmMKICsrKyBiL3NzaC1rZXlnZW4uYwogQEAgLTIyLDYg KzIyLDcgQEAKQEAgLTUxNSw3ICs1MTUsNyBAQCBpbmRleCA1ODRkNWE4OTkuLjEyNDMwZTZhNCAx MDA2NDQKICAJc3dpdGNoICh0eXBlKSB7CiAgCWNhc2UgS0VZX1JTQToKICAJCWlmICgqYml0c3Ag PCBTU0hfUlNBX01JTklNVU1fTU9EVUxVU19TSVpFKQotQEAgLTI0OCw3ICsyNTQsNyBAQCBhc2tf ZmlsZW5hbWUoc3RydWN0IHBhc3N3ZCAqcHcsIGNvbnN0IGNoYXIgKnByb21wdCkKK0BAIC0yNDMs NyArMjQ5LDcgQEAgYXNrX2ZpbGVuYW1lKHN0cnVjdCBwYXNzd2QgKnB3LCBjb25zdCBjaGFyICpw cm9tcHQpCiAgCWNoYXIgKm5hbWUgPSBOVUxMOwogIAogIAlpZiAoa2V5X3R5cGVfbmFtZSA9PSBO VUxMKQpAQCAtNTIzLDggKzUyMyw4IEBAIGluZGV4IDU4NGQ1YTg5OS4uMTI0MzBlNmE0IDEwMDY0 NAogKwkJbmFtZSA9IEZJUFNfbW9kZSgpID8gX1BBVEhfU1NIX0NMSUVOVF9JRF9SU0EgOiBfUEFU SF9TU0hfQ0xJRU5UX0lEX0VEMjU1MTk7CiAgCWVsc2UgewogIAkJc3dpdGNoIChzc2hrZXlfdHlw ZV9mcm9tX3Nob3J0bmFtZShrZXlfdHlwZV9uYW1lKSkgewotICNpZmRlZiBPUEVOU1NMX0hBU19F Q0MKLUBAIC0xMDU3LDkgKzEwNjMsMTcgQEAgZG9fZ2VuX2FsbF9ob3N0a2V5cyhzdHJ1Y3QgcGFz c3dkICpwdykKKyAJCWNhc2UgS0VZX0VDRFNBX0NFUlQ6CitAQCAtMTA0OCw5ICsxMDU0LDE3IEBA IGRvX2dlbl9hbGxfaG9zdGtleXMoc3RydWN0IHBhc3N3ZCAqcHcpCiAgCQkJZmlyc3QgPSAxOwog IAkJCXByaW50ZigiJXM6IGdlbmVyYXRpbmcgbmV3IGhvc3Qga2V5czogIiwgX19wcm9nbmFtZSk7 CiAgCQl9CkBAIC01NDMsNyArNTQzLDcgQEAgaW5kZXggNTg0ZDVhODk5Li4xMjQzMGU2YTQgMTAw NjQ0CiAgCQlpZiAoKGZkID0gbWtzdGVtcChwcnZfdG1wKSkgPT0gLTEpIHsKICAJCQllcnJvcigi Q291bGQgbm90IHNhdmUgeW91ciBwcml2YXRlIGtleSBpbiAlczogJXMiLAogIAkJCSAgICBwcnZf dG1wLCBzdHJlcnJvcihlcnJubykpOwotQEAgLTM3NjgsNyArMzc4Miw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorQEAgLTM3OTIsNyArMzgwNiw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogIAl9CiAgCiAgCWlmIChrZXlfdHlwZV9uYW1lID09IE5VTEwpCkBAIC01NTMs NyArNTUzLDcgQEAgaW5kZXggNTg0ZDVhODk5Li4xMjQzMGU2YTQgMTAwNjQ0CiAgCXR5cGUgPSBz c2hrZXlfdHlwZV9mcm9tX3Nob3J0bmFtZShrZXlfdHlwZV9uYW1lKTsKICAJdHlwZV9iaXRzX3Zh bGlkKHR5cGUsIGtleV90eXBlX25hbWUsICZiaXRzKTsKIGRpZmYgLS1naXQgYS9zc2gta2V5c2Nh bi5jIGIvc3NoLWtleXNjYW4uYwotaW5kZXggYmIzZWU0NjJkLi4zY2VhMWRhYWMgMTAwNjQ0Citp bmRleCA3N2I0MzQxYzkuLjI4NGQ0ZGVlZSAxMDA2NDQKIC0tLSBhL3NzaC1rZXlzY2FuLmMKICsr KyBiL3NzaC1rZXlzY2FuLmMKIEBAIC0yMSw2ICsyMSw3IEBACkBAIC01NjQsNyArNTY0LDcgQEAg aW5kZXggYmIzZWU0NjJkLi4zY2VhMWRhYWMgMTAwNjQ0CiAgCiAgI2luY2x1ZGUgPGVycm5vLmg+ CiAgI2luY2x1ZGUgPGxpbWl0cy5oPgotQEAgLTIzNCw2ICsyMzUsMTQgQEAga2V5Z3JhYl9zc2gy KGNvbiAqYykKK0BAIC0yMzgsNiArMjM5LDE0IEBAIGtleWdyYWJfc3NoMihjb24gKmMpCiAgCWNo YXIgKm15cHJvcG9zYWxbUFJPUE9TQUxfTUFYXSA9IHsgS0VYX0NMSUVOVCB9OwogIAlpbnQgcjsK ICAKQEAgLTYwOSw3ICs2MDksNyBAQCBpbmRleCBjY2FkYjE0Y2EuLjVhZjM5YmIzOSAxMDA2NDQK ICAJCWdvdG8gb3V0OwogIAl9CiBkaWZmIC0tZ2l0IGEvc3NoLmMgYi9zc2guYwotaW5kZXggYmMz YmU4ZjhlLi5lN2JkYmEzMjcgMTAwNjQ0CitpbmRleCBiOWE1OWNhNDMuLjAwYzBlZGVmYyAxMDA2 NDQKIC0tLSBhL3NzaC5jCiArKysgYi9zc2guYwogQEAgLTcxLDYgKzcxLDcgQEAKQEAgLTYyMCw3 ICs2MjAsNyBAQCBpbmRleCBiYzNiZThmOGUuLmU3YmRiYTMyNyAxMDA2NDQKICAjaW5jbHVkZSAi b3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaCIKICAKICAjaW5jbHVkZSAieG1hbGxvYy5o IgotQEAgLTE2MzEsNiArMTYzMiwxMCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorQEAgLTE2 MTcsNiArMTYxOCwxMCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQogIAkJZXhpdCgwKTsKICAJ fQogIApAQCAtNjMyLDcgKzYzMiw3IEBAIGluZGV4IGJjM2JlOGY4ZS4uZTdiZGJhMzI3IDEwMDY0 NAogIAlpZiAob3B0aW9ucy5za19wcm92aWRlciAhPSBOVUxMICYmICpvcHRpb25zLnNrX3Byb3Zp ZGVyID09ICckJyAmJgogIAkgICAgc3RybGVuKG9wdGlvbnMuc2tfcHJvdmlkZXIpID4gMSkgewog ZGlmZiAtLWdpdCBhL3NzaGNvbm5lY3QyLmMgYi9zc2hjb25uZWN0Mi5jCi1pbmRleCAzMWJiYzBl ZDguLjJkZGQ4OWQ1YyAxMDA2NDQKK2luZGV4IDU0NTljYWEwYy4uMjQ0YzcyNWY3IDEwMDY0NAog LS0tIGEvc3NoY29ubmVjdDIuYwogKysrIGIvc3NoY29ubmVjdDIuYwogQEAgLTQ1LDYgKzQ1LDEw IEBACkBAIC02NDYsNyArNjQ2LDcgQEAgaW5kZXggMzFiYmMwZWQ4Li4yZGRkODlkNWMgMTAwNjQ0 CiAgI2luY2x1ZGUgInhtYWxsb2MuaCIKICAjaW5jbHVkZSAic3NoLmgiCiAgI2luY2x1ZGUgInNz aDIuaCIKLUBAIC0yNjMsNiArMjY3LDkgQEAgc3NoX2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFy ICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3RhZGRyLCB1X3Nob3J0IHBvcnQsCitAQCAtMjY0 LDYgKzI2OCw5IEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqaG9zdCwgc3RydWN0 IHNvY2thZGRyX3N0b3JhZ2UgKmhvc3RhZGRyLAogIAogICNpZiBkZWZpbmVkKEdTU0FQSSkgJiYg ZGVmaW5lZChXSVRIX09QRU5TU0wpCiAgCWlmIChvcHRpb25zLmdzc19rZXlleCkgewpAQCAtNjU2 LDcgKzY1Niw3IEBAIGluZGV4IDMxYmJjMGVkOC4uMmRkZDg5ZDVjIDEwMDY0NAogIAkJLyogQWRk IHRoZSBHU1NBUEkgbWVjaGFuaXNtcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9uIHRoaXMKICAJCSAq IGNsaWVudCB0byB0aGUga2V5IGV4Y2hhbmdlIGFsZ29yaXRobSBwcm9wb3NhbCAqLwogIAkJb3Jp ZyA9IG15cHJvcG9zYWxbUFJPUE9TQUxfS0VYX0FMR1NdOwotQEAgLTI4Miw3ICsyODksOSBAQCBz c2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9z dGFkZHIsIHVfc2hvcnQgcG9ydCwKK0BAIC0yODMsNyArMjkwLDkgQEAgc3NoX2tleDIoc3RydWN0 IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFkZHIs CiAgCQl9CiAgCiAgCQlnc3MgPSBzc2hfZ3NzYXBpX2NsaWVudF9tZWNoYW5pc21zKGdzc19ob3N0 LApAQCAtNjY4LDcgKzY2OCw3IEBAIGluZGV4IDMxYmJjMGVkOC4uMmRkZDg5ZDVjIDEwMDY0NAog IAkJCWRlYnVnKCJPZmZlcmluZyBHU1NBUEkgcHJvcG9zYWw6ICVzIiwgZ3NzKTsKICAJCQl4YXNw cmludGYoJm15cHJvcG9zYWxbUFJPUE9TQUxfS0VYX0FMR1NdLAogZGlmZiAtLWdpdCBhL3NzaGQu YyBiL3NzaGQuYwotaW5kZXggMjJhZDRkZmYwLi4yODY1NjE5YzcgMTAwNjQ0CitpbmRleCA2Yjk4 NDdmNjcuLmFlMjZiMTBiMyAxMDA2NDQKIC0tLSBhL3NzaGQuYwogKysrIGIvc3NoZC5jCiBAQCAt NDMsNiArNDMsNyBAQApAQCAtNjkzLDggKzY5Myw4IEBAIGluZGV4IDIyYWQ0ZGZmMC4uMjg2NTYx OWM3IDEwMDY0NAogICNpZmRlZiBIQVZFX1NFQ1VSRVdBUkUKICAjaW5jbHVkZSA8c3lzL3NlY3Vy aXR5Lmg+CiAgI2luY2x1ZGUgPHByb3QuaD4KLUBAIC0xNjA0LDYgKzE2MTIsMTMgQEAgbWFpbihp bnQgYWMsIGNoYXIgKiphdikKLSAJCSAgICAma2V5LCBOVUxMKSkgIT0gMCAmJiByICE9IFNTSF9F UlJfU1lTVEVNX0VSUk9SKQorQEAgLTE2MDUsNiArMTYxMywxMyBAQCBtYWluKGludCBhYywgY2hh ciAqKmF2KQorIAkJICAgIHIgIT0gU1NIX0VSUl9TWVNURU1fRVJST1IgJiYgIWhhdmVfYWdlbnQp CiAgCQkJZG9fbG9nMl9yKHIsIGxsLCAiVW5hYmxlIHRvIGxvYWQgaG9zdCBrZXkgXCIlc1wiIiwK ICAJCQkgICAgb3B0aW9ucy5ob3N0X2tleV9maWxlc1tpXSk7CiArCQlpZiAoRklQU19tb2RlKCkg JiYga2V5ICE9IE5VTEwgJiYgKHNzaGtleV90eXBlX3BsYWluKGtleS0+dHlwZSkgPT0gS0VZX0VE MjU1MTlfU0sKQEAgLTcwNyw3ICs3MDcsNyBAQCBpbmRleCAyMmFkNGRmZjAuLjI4NjU2MTljNyAx MDA2NDQKICAJCWlmIChzc2hrZXlfaXNfc2soa2V5KSAmJgogIAkJICAgIGtleS0+c2tfZmxhZ3Mg JiBTU0hfU0tfVVNFUl9QUkVTRU5DRV9SRVFEKSB7CiAgCQkJZGVidWcoImhvc3Qga2V5ICVzIHJl cXVpcmVzIHVzZXIgcHJlc2VuY2UsIGlnbm9yaW5nIiwKLUBAIC0xODI3LDYgKzE4NDIsMTAgQEAg bWFpbihpbnQgYWMsIGNoYXIgKiphdikKK0BAIC0xODI5LDYgKzE4NDQsMTAgQEAgbWFpbihpbnQg YWMsIGNoYXIgKiphdikKICAJLyogUmVpbml0aWFsaXplIHRoZSBsb2cgKGJlY2F1c2Ugb2YgdGhl IGZvcmsgYWJvdmUpLiAqLwogIAlsb2dfaW5pdChfX3Byb2duYW1lLCBvcHRpb25zLmxvZ19sZXZl bCwgb3B0aW9ucy5sb2dfZmFjaWxpdHksIGxvZ19zdGRlcnIpOwogIApAQCAtNzE5LDcgKzcxOSw3 IEBAIGluZGV4IDIyYWQ0ZGZmMC4uMjg2NTYxOWM3IDEwMDY0NAogIAkgKiBDaGRpciB0byB0aGUg cm9vdCBkaXJlY3Rvcnkgc28gdGhhdCB0aGUgY3VycmVudCBkaXNrIGNhbiBiZQogIAkgKiB1bm1v dW50ZWQgaWYgZGVzaXJlZC4KIGRpZmYgLS1naXQgYS9zc2hrZXkuYyBiL3NzaGtleS5jCi1pbmRl eCBjY2MzNWRiZjUuLjgyZTU1NTA5ZCAxMDA2NDQKK2luZGV4IDdkMTQwMWE4Zi4uMjM4MGM4MDgx IDEwMDY0NAogLS0tIGEvc3Noa2V5LmMKICsrKyBiL3NzaGtleS5jCiBAQCAtMzYsNiArMzYsNyBA QApAQCAtNzU3LDcgKzc1Nyw3IEBAIGluZGV4IGNjYzM1ZGJmNS4uODJlNTU1MDlkIDEwMDY0NAog IAkJaWYgKCFpbmNsdWRlX3NpZ29ubHkgJiYgaW1wbC0+c2lnb25seSkKICAJCQljb250aW51ZTsK ICAJCWlmICgoY2VydHNfb25seSAmJiAhaW1wbC0+Y2VydCkgfHwgKHBsYWluX29ubHkgJiYgaW1w bC0+Y2VydCkpCi1AQCAtMTQzMSw2ICsxNDQ1LDIwIEBAIHNzaGtleV9yZWFkKHN0cnVjdCBzc2hr ZXkgKnJldCwgY2hhciAqKmNwcCkKK0BAIC0xNDI3LDYgKzE0NDEsMjAgQEAgc3Noa2V5X3JlYWQo c3RydWN0IHNzaGtleSAqcmV0LCBjaGFyICoqY3BwKQogIAkJcmV0dXJuIFNTSF9FUlJfRUNfQ1VS VkVfTUlTTUFUQ0g7CiAgCX0KICAKQEAgLTc3OCw3ICs3NzgsNyBAQCBpbmRleCBjY2MzNWRiZjUu LjgyZTU1NTA5ZCAxMDA2NDQKICAJLyogRmlsbCBpbiByZXQgZnJvbSBwYXJzZWQga2V5ICovCiAg CXNzaGtleV9mcmVlX2NvbnRlbnRzKHJldCk7CiAgCSpyZXQgPSAqazsKLUBAIC0yMjY0LDYgKzIy OTIsMTEgQEAgc3Noa2V5X3NpZ24oc3RydWN0IHNzaGtleSAqa2V5LAorQEAgLTIyNjAsNiArMjI4 OCwxMSBAQCBzc2hrZXlfc2lnbihzdHJ1Y3Qgc3Noa2V5ICprZXksCiAgCQkqbGVucCA9IDA7CiAg CWlmIChkYXRhbGVuID4gU1NIX0tFWV9NQVhfU0lHTl9EQVRBX1NJWkUpCiAgCQlyZXR1cm4gU1NI X0VSUl9JTlZBTElEX0FSR1VNRU5UOwpAQCAtNzkwLDcgKzc5MCw3IEBAIGluZGV4IGNjYzM1ZGJm NS4uODJlNTU1MDlkIDEwMDY0NAogIAlpZiAoKGltcGwgPSBzc2hrZXlfaW1wbF9mcm9tX2tleShr ZXkpKSA9PSBOVUxMKQogIAkJcmV0dXJuIFNTSF9FUlJfS0VZX1RZUEVfVU5LTk9XTjsKICAJaWYg KChyID0gc3Noa2V5X3Vuc2hpZWxkX3ByaXZhdGUoa2V5KSkgIT0gMCkKLUBAIC0yMzAzLDYgKzIz MzYsMTAgQEAgc3Noa2V5X3ZlcmlmeShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCitAQCAtMjI5 OSw2ICsyMzMyLDEwIEBAIHNzaGtleV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAog IAkJKmRldGFpbHNwID0gTlVMTDsKICAJaWYgKHNpZ2xlbiA9PSAwIHx8IGRsZW4gPiBTU0hfS0VZ X01BWF9TSUdOX0RBVEFfU0laRSkKICAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7 CkBAIC04MDIsNSArODAyLDUgQEAgaW5kZXggY2NjMzVkYmY1Li44MmU1NTUwOWQgMTAwNjQ0CiAg CQlyZXR1cm4gU1NIX0VSUl9LRVlfVFlQRV9VTktOT1dOOwogIAlyZXR1cm4gaW1wbC0+ZnVuY3Mt PnZlcmlmeShrZXksIHNpZywgc2lnbGVuLCBkYXRhLCBkbGVuLAogLS0gCi0yLjUzLjAKKzIuNTUu MAogCgpkaWZmIC0tZ2l0IGEvMDAzOS1vcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQt YWxncy5wYXRjaCBiLzAwMzktb3BlbnNzaC04LjdwMS1uZWdvdGlhdGUtc3VwcG9ydGVkLWFsZ3Mu cGF0Y2gKaW5kZXggZDAwYmVkNC4uZmJkZDYyZCAxMDA2NDQKLS0tIGEvMDAzOS1vcGVuc3NoLTgu N3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncy5wYXRjaAorKysgYi8wMDM5LW9wZW5zc2gtOC43 cDEtbmVnb3RpYXRlLXN1cHBvcnRlZC1hbGdzLnBhdGNoCkBAIC0xLDE4ICsxLDE5IEBACi1Gcm9t IGJmYmRhZjBiMTM1NWUwNmJlNWM0MGRhZTM5ODZkNGRkZGU1MGFjMDggTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCitGcm9tIDVlNWVhNjJjYTIzYmRjZTlmM2NhZDJlYTExYzhmMDUzZmFlYjQyZWUg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1TdWJq ZWN0OiBbUEFUQ0ggMzkvNTRdIG9wZW5zc2gtOC43cDEtbmVnb3RpYXRlLXN1cHBvcnRlZC1hbGdz CitTdWJqZWN0OiBbUEFUQ0ggMzkvNTNdIG9wZW5zc2gtOC43cDEtbmVnb3RpYXRlLXN1cHBvcnRl ZC1hbGdzCiAKICMgRG9uJ3QgcHJvcG9zZSBkaXNhbGxvd2VkIGFsZ29yaXRobXMgZHVyaW5nIGhv c3RrZXkgbmVnb3RpYXRpb24KICMgdXBzdHJlYW0gTVI6CiAjIGh0dHBzOi8vZ2l0aHViLmNvbS9v cGVuc3NoL29wZW5zc2gtcG9ydGFibGUvcHVsbC8zMjMKIC0tLQotIHJlZ3Jlc3MvaG9zdGtleS1h Z2VudC5zaCB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCi0gc3NoY29ubmVj dDIuYyAgICAgICAgICAgIHwgMTcgKysrKysrKysrKysrKysrLS0KLSAyIGZpbGVzIGNoYW5nZWQs IDQwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisgcmVncmVzcy9ob3N0a2V5LWFnZW50 LnNoICAgICAgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQorIHJlZ3Jlc3Mv a25vd25ob3N0cy1jb21tYW5kLnNoIHwgIDggKysrKysrLS0KKyBzc2hjb25uZWN0Mi5jICAgICAg ICAgICAgICAgICB8IDE3ICsrKysrKysrKysrKysrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCA0NiBp bnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvaG9z dGtleS1hZ2VudC5zaCBiL3JlZ3Jlc3MvaG9zdGtleS1hZ2VudC5zaAotaW5kZXggMjhkY2ZlMTcw Li5iOWU3MTZkY2QgMTAwNjQ0CitpbmRleCAwZTc5NjJlM2MuLjI1MWQ1MjU4ZSAxMDA2NDQKIC0t LSBhL3JlZ3Jlc3MvaG9zdGtleS1hZ2VudC5zaAogKysrIGIvcmVncmVzcy9ob3N0a2V5LWFnZW50 LnNoCiBAQCAtMTcsOCArMTcsMjEgQEAgdHJhY2UgIm1ha2UgQ0Ega2V5IgpAQCAtODYsMTIgKzg3 LDM3IEBAIGluZGV4IDI4ZGNmZTE3MC4uYjllNzE2ZGNkIDEwMDY0NAogIAl2ZXJib3NlICJjZXJ0 IHR5cGUgJGsiCiAgCW9wdHM9Ii1vSG9zdEtleUFsZ29yaXRobXM9JGsgLUYgJE9CSi9zc2hfcHJv eHkiCiAgCVNTSF9DT05ORUNUSU9OPWAke1NTSH0gJG9wdHMgaG9zdCAnZWNobyAkU1NIX0NPTk5F Q1RJT04nYAorZGlmZiAtLWdpdCBhL3JlZ3Jlc3Mva25vd25ob3N0cy1jb21tYW5kLnNoIGIvcmVn cmVzcy9rbm93bmhvc3RzLWNvbW1hbmQuc2gKK2luZGV4IDU4MDA0YjgwZS4uMDM2YTdjMmI5IDEw MDY0NAorLS0tIGEvcmVncmVzcy9rbm93bmhvc3RzLWNvbW1hbmQuc2gKKysrKyBiL3JlZ3Jlc3Mv a25vd25ob3N0cy1jb21tYW5kLnNoCitAQCAtMzgsOCArMzgsMTIgQEAgX0VPRgorIGNobW9kIGEr eCAkT0JKL2tub3duaG9zdHNfY29tbWFuZAorICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSB4IHRy dWUgJiYgZmFpbCAic3NoIGNvbm5lY3Qgc3VjY2VlZGVkIHdpdGggYmFkIGV4aXQiCisgCisrUFVC S0VZX0FDQ0VQVEVEX0FMR09TPWAkU1NIIC1HICJleGFtcGxlLmNvbSIgfCBcCisrICAgIGdyZXAg LWkgIlB1YmtleUFjY2VwdGVkQWxnb3JpdGhtcyIgfCBjdXQgLWQgJyAnIC1mMi0gfCB0ciAiLCIg InwiYAorK1NTSF9BQ0NFUFRFRF9IT1NUS0VZX1RZUEVTPWBlY2hvICIkU1NIX0hPU1RLRVlfVFlQ RVMiIHwgdHIgJyAnICdcbicgfCBlZ3JlcCAiJFBVQktFWV9BQ0NFUFRFRF9BTEdPUyJgCisrCisg Y3AgJE9CSi9zc2hkX3Byb3h5ICRPQkovc3NoZF9wcm94eS5iYWsKKy1mb3Iga2V5dHlwZSBpbiAk e1NTSF9IT1NUS0VZX1RZUEVTfSA7IGRvCisrZm9yIGtleXR5cGUgaW4gJHtTU0hfQUNDRVBURURf SE9TVEtFWV9UWVBFU30gOyBkbworIAlncmVwIC12aSBIb3N0S2V5QWxnb3JpdGhtcyAkT0JKL3Nz aGRfcHJveHkuYmFrID4gJE9CSi9zc2hkX3Byb3h5CisgCWVjaG8gIkhvc3RLZXlBbGdvcml0aG1z PSska2V5dHlwZSIgPj4gJE9CSi9zc2hkX3Byb3h5CisgCWFsZ3M9JGtleXR5cGUKK0BAIC01Myw1 ICs1Nyw1IEBAIHRlc3QgInhcJDMiID0gIngkTE9HTkFNRSIgfHwgZGllICJ3cm9uZyB1c2VybmFt ZSBcJDMgKGV4cGVjdGVkICRMT0dOQU1FKSIKKyBncmVwIC0tICJcJDEuKlwkMiIgJE9CSi9rbm93 bl9ob3N0cworIF9FT0YKKyAJJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1vSG9zdEtleUFsZ29y aXRobXM9JGFsZ3MgeCB0cnVlIHx8CistCSAgICBmYWlsICJzc2ggY29ubmVjdCBmYWlsZWQgZm9y IGtleXR5cGUgJHgiCisrCSAgICBmYWlsICJzc2ggY29ubmVjdCBmYWlsZWQgZm9yIGtleXR5cGUg JGtleXR5cGUiCisgZG9uZQogZGlmZiAtLWdpdCBhL3NzaGNvbm5lY3QyLmMgYi9zc2hjb25uZWN0 Mi5jCi1pbmRleCAyZGRkODlkNWMuLjMxZjUxYmU2MiAxMDA2NDQKK2luZGV4IDI0NGM3MjVmNy4u YzIxYjNhMTFhIDEwMDY0NAogLS0tIGEvc3NoY29ubmVjdDIuYwogKysrIGIvc3NoY29ubmVjdDIu YwotQEAgLTIyNCw3ICsyMjQsNyBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhv c3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKLSAgICAgY29uc3Qg c3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQorQEAgLTIyNCw3ICsyMjQsNyBAQCBzc2hfa2V4 MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpo b3N0YWRkciwKKyAgICAgdV9zaG9ydCBwb3J0LCBjb25zdCBzdHJ1Y3Qgc3NoX2Nvbm5faW5mbyAq Y2luZm8pCiAgewogIAljaGFyICpteXByb3Bvc2FsW1BST1BPU0FMX01BWF07CiAtCWNoYXIgKmFs bF9rZXksICpoa2FsZ3MgPSBOVUxMOwpAQCAtOTksOSArMTI1LDkgQEAgaW5kZXggMmRkZDg5ZDVj Li4zMWY1MWJlNjIgMTAwNjQ0CiAgCWludCByLCB1c2Vfa25vd25faG9zdHNfb3JkZXIgPSAwOwog IAogICNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCi1AQCAtMjYw LDEwICsyNjAsMjIgQEAgc3NoX2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1 Y3Qgc29ja2FkZHIgKmhvc3RhZGRyLCB1X3Nob3J0IHBvcnQsCi0gCWlmICh1c2Vfa25vd25faG9z dHNfb3JkZXIpCi0gCQloa2FsZ3MgPSBvcmRlcl9ob3N0a2V5YWxncyhob3N0LCBob3N0YWRkciwg cG9ydCwgY2luZm8pOworQEAgLTI2MSwxMCArMjYxLDIyIEBAIHNzaF9rZXgyKHN0cnVjdCBzc2gg KnNzaCwgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmhvc3RhZGRyLAorIAkJ ICAgIHBvcnQsIGNpbmZvKTsKKyAJfQogIAogKwlmaWx0ZXJlZF9hbGdzID0gaGthbGdzID8gbWF0 Y2hfZmlsdGVyX2FsbG93bGlzdChoa2FsZ3MsIG9wdGlvbnMucHVia2V5X2FjY2VwdGVkX2FsZ29z KQogKwkJICAgICAgICAgICAgICAgOiBtYXRjaF9maWx0ZXJfYWxsb3dsaXN0KG9wdGlvbnMuaG9z dGtleWFsZ29yaXRobXMsCkBAIC0xMjMsNyArMTQ5LDcgQEAgaW5kZXggMmRkZDg5ZDVjLi4zMWY1 MWJlNjIgMTAwNjQ0CiAgCiAgI2lmIGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BF TlNTTCkKICAJaWYgKG9wdGlvbnMuZ3NzX2tleWV4KSB7Ci1AQCAtMzA3LDYgKzMxOSw3IEBAIHNz aF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICpob3N0 YWRkciwgdV9zaG9ydCBwb3J0LAorQEAgLTMwOCw2ICszMjAsNyBAQCBzc2hfa2V4MihzdHJ1Y3Qg c3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpob3N0YWRkciwK ICAjZW5kaWYKICAKICAJZnJlZShoa2FsZ3MpOwpAQCAtMTMyLDUgKzE1OCw1IEBAIGluZGV4IDJk ZGQ4OWQ1Yy4uMzFmNTFiZTYyIDEwMDY0NAogIAkvKiBzdGFydCBrZXkgZXhjaGFuZ2UgKi8KICAJ aWYgKChyID0ga2V4X3NldHVwKHNzaCwgbXlwcm9wb3NhbCkpICE9IDApCiAtLSAKLTIuNTMuMAor Mi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDQwLW9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4LnBh dGNoIGIvMDA0MC1vcGVuc3NoLTkuMHAxLWV2cC1maXBzLWtleC5wYXRjaAppbmRleCA2NmZkNGU2 Li44YWQ1MGZmIDEwMDY0NAotLS0gYS8wMDQwLW9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4LnBh dGNoCisrKyBiLzAwNDAtb3BlbnNzaC05LjBwMS1ldnAtZmlwcy1rZXgucGF0Y2gKQEAgLTEsMTUg KzEsMTUgQEAKLUZyb20gZmMxNjY2MDQ3OTA0MDllZWZkNWY1NTBjNzFjMjMyYmUzYzE4ZDk0ZCBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gMTYyZTk5YjkxODk3OTZmYWQ2MzI3MTQ4ZDhj NjgxN2Q1ZWU3NGMxOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5 YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6 MjkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA0MC81NF0gb3BlbnNzaC05LjBwMS1ldnAtZmlwcy1r ZXgKK1N1YmplY3Q6IFtQQVRDSCA0MC81M10gb3BlbnNzaC05LjBwMS1ldnAtZmlwcy1rZXgKIAog LS0tCiAgZGguYyAgICAgIHwgIDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tCiAga2V4LmMgICAgIHwgMTM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogIGtleC5oICAgICB8ICAgNiArKysKICBrZXhkaC5jICAgfCAg NTIgKysrKysrKysrKysrKysrKysrLS0KLSBrZXhlY2RoLmMgfCAxMjkgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KLSA1IGZpbGVzIGNoYW5nZWQsIDM4 MiBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKKyBrZXhlY2RoLmMgfCAxMjcgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDUgZmlsZXMgY2hh bmdlZCwgMzc4IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEv ZGguYyBiL2RoLmMKIGluZGV4IDNlZmUwYTY5Zi4uYmYzMjQzMDljIDEwMDY0NApAQCAtMTQwLDEw ICsxNDAsMTAgQEAgaW5kZXggM2VmZTBhNjlmLi5iZjMyNDMwOWMgMTAwNjQ0CiAgCiAgREggKgog ZGlmZiAtLWdpdCBhL2tleC5jIGIva2V4LmMKLWluZGV4IGUxMDU5ZGVjNC4uMWViM2NhOWQzIDEw MDY0NAoraW5kZXggN2U1MGYyNzdmLi42MmNmYTg2Y2QgMTAwNjQ0CiAtLS0gYS9rZXguYwogKysr IGIva2V4LmMKLUBAIC0xNjE5LDMgKzE2MTksMTQyIEBAIGtleF9leGNoYW5nZV9pZGVudGlmaWNh dGlvbihzdHJ1Y3Qgc3NoICpzc2gsIGludCB0aW1lb3V0X21zLAorQEAgLTE2MjIsMyArMTYyMiwx NDIgQEAga2V4X2V4Y2hhbmdlX2lkZW50aWZpY2F0aW9uKHN0cnVjdCBzc2ggKnNzaCwgaW50IHRp bWVvdXRfbXMsCiAgCXJldHVybiByOwogIH0KICAKQEAgLTI4NywyMCArMjg3LDIwIEBAIGluZGV4 IGUxMDU5ZGVjNC4uMWViM2NhOWQzIDEwMDY0NAogK30KICsjZW5kaWYgLyogV0lUSF9PUEVOU1NM ICovCiBkaWZmIC0tZ2l0IGEva2V4LmggYi9rZXguaAotaW5kZXggMGEwY2IxNTYyLi5mZjQxMzI0 ZTkgMTAwNjQ0CitpbmRleCA4Zjk5MzQ4OTkuLjFmZTRiYjI5YiAxMDA2NDQKIC0tLSBhL2tleC5o CiArKysgYi9rZXguaAotQEAgLTM3LDYgKzM3LDkgQEAKLSAjIGluY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSAjIGluY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSAjIGluY2x1ZGUgPG9wZW5zc2wvZWNkc2Eu aD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL2NvcmVf bmFtZXMuaD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wvcGFyYW1fYnVpbGQuaD4KLSAjIGlmZGVmIE9Q RU5TU0xfSEFTX0VDQwotICMgIGluY2x1ZGUgPG9wZW5zc2wvZWMuaD4KLSAjIGVsc2UgLyogT1BF TlNTTF9IQVNfRUNDICovCi1AQCAtMzE3LDYgKzMyMCw5IEBAIGludAlrZXhjMjU1MTlfc2hhcmVk X2tleV9leHQoY29uc3QgdV9jaGFyIGtleVtDVVJWRTI1NTE5X1NJWkVdLAorQEAgLTM4LDYgKzM4 LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wvZWNkc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX25hbWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcGFy YW1fYnVpbGQuaD4KKyAjZWxzZSAvKiBPUEVOU1NMICovCisgI2RlZmluZSBCSUdOVU0JCXZvaWQK KyAjZGVmaW5lIERICQl2b2lkCitAQCAtMzIyLDYgKzMyNSw5IEBAIGludAlrZXhjMjU1MTlfc2hh cmVkX2tleV9leHQoY29uc3QgdV9jaGFyIGtleVtDVVJWRTI1NTE5X1NJWkVdLAogICAgICBjb25z dCB1X2NoYXIgcHViW0NVUlZFMjU1MTlfU0laRV0sIHN0cnVjdCBzc2hidWYgKm91dCwgaW50KQog IAlfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEsIENVUlZFMjU1MTlf U0laRSkpKQogIAlfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDIsIENV UlZFMjU1MTlfU0laRSkpKTsKQEAgLTQwNCwxMCArNDA0LDEwIEBAIGluZGV4IGI2MzM3NGIwZS4u NzRhZmExMTg0IDEwMDY0NAogIH0KICAKIGRpZmYgLS1naXQgYS9rZXhlY2RoLmMgYi9rZXhlY2Ro LmMKLWluZGV4IDZhOTA1OGNkYy4uYjY2MWUwNzA1IDEwMDY0NAoraW5kZXggYTlkYmY1YzRiLi4z OGQ4MjdiNGMgMTAwNjQ0CiAtLS0gYS9rZXhlY2RoLmMKICsrKyBiL2tleGVjZGguYwotQEAgLTM1 LDE2ICszNSw1NiBAQAorQEAgLTM1LDExICszNSw1MSBAQAogIAogICNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CiAgI2luY2x1ZGUgPG9wZW5zc2wvZWNkaC5oPgpAQCAtNDIxLDExICs0MjEsNyBAQCBp bmRleCA2YTkwNThjZGMuLmI2NjFlMDcwNSAxMDA2NDQKICAjaW5jbHVkZSAic3NoYnVmLmgiCiAg I2luY2x1ZGUgInNzaGVyci5oIgogKyNpbmNsdWRlICJsb2cuaCIKLSAKLSBzdGF0aWMgaW50Ci0g a2V4X2VjZGhfZGVjX2tleV9ncm91cChzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYg KiwgRUNfS0VZICprZXksCi0gICAgIGNvbnN0IEVDX0dST1VQICosIHN0cnVjdCBzc2hidWYgKiop OwotIAorKwogK3N0YXRpYyBFQ19LRVkgKgogK2dlbmVyYXRlX2VjX2tleXMoaW50IGVjX25pZCkK ICt7CkBAIC00NjAsMTEgKzQ1NiwxMCBAQCBpbmRleCA2YTkwNThjZGMuLmI2NjFlMDcwNSAxMDA2 NDQKICsJT1NTTF9QQVJBTV9mcmVlKHBhcmFtcyk7CiArCXJldHVybiBjbGllbnRfa2V5OwogK30K LSsKKyAKICBpbnQKICBrZXhfZWNkaF9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKLSB7Ci1AQCAt NTQsMTEgKzk0LDcgQEAga2V4X2VjZGhfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCitAQCAtNTAs MTEgKzkwLDcgQEAga2V4X2VjZGhfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCiAgCXN0cnVjdCBz c2hidWYgKmJ1ZiA9IE5VTEw7CiAgCWludCByOwogIApAQCAtNDc3LDcgKzQ3Miw3IEBAIGluZGV4 IDZhOTA1OGNkYy4uYjY2MWUwNzA1IDEwMDY0NAogIAkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VS Uk9SOwogIAkJZ290byBvdXQ7CiAgCX0KLUBAIC0xMDAsMTEgKzEzNiw3IEBAIGtleF9lY2RoX2Vu YyhzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmNsaWVudF9ibG9iLAorQEAg LTk2LDExICsxMzIsNyBAQCBrZXhfZWNkaF9lbmMoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1 Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwKICAJKnNlcnZlcl9ibG9icCA9IE5VTEw7CiAgCSpzaGFy ZWRfc2VjcmV0cCA9IE5VTEw7CiAgCkBAIC00OTAsNyArNDg1LDcgQEAgaW5kZXggNmE5MDU4Y2Rj Li5iNjYxZTA3MDUgMTAwNjQ0CiAgCQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CiAgCQln b3RvIG91dDsKICAJfQotQEAgLTEzOSwxMSArMTcxLDIxIEBAIGtleF9lY2RoX2RlY19rZXlfZ3Jv dXAoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICplY19ibG9iLAorQEAgLTEz NSwxMSArMTY3LDIxIEBAIGtleF9lY2RoX2RlY19rZXlfZ3JvdXAoc3RydWN0IGtleCAqa2V4LCBj b25zdCBzdHJ1Y3Qgc3NoYnVmICplY19ibG9iLAogIHsKICAJc3RydWN0IHNzaGJ1ZiAqYnVmID0g TlVMTDsKICAJQklHTlVNICpzaGFyZWRfc2VjcmV0ID0gTlVMTDsKQEAgLTUxNSw3ICs1MTAsNyBA QCBpbmRleCA2YTkwNThjZGMuLmI2NjFlMDcwNSAxMDA2NDQKICAJKnNoYXJlZF9zZWNyZXRwID0g TlVMTDsKICAKICAJaWYgKChidWYgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKLUBAIC0xNTIs NDUgKzE5NCw4MiBAQCBrZXhfZWNkaF9kZWNfa2V5X2dyb3VwKHN0cnVjdCBrZXggKmtleCwgY29u c3Qgc3RydWN0IHNzaGJ1ZiAqZWNfYmxvYiwKK0BAIC0xNDgsMjkgKzE5MCw1OCBAQCBrZXhfZWNk aF9kZWNfa2V5X2dyb3VwKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqZWNf YmxvYiwKICAJfQogIAlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZ2IoYnVmLCBlY19ibG9iKSkg IT0gMCkKICAJCWdvdG8gb3V0OwpAQCAtNTczLDI4ICs1NjgsMzIgQEAgaW5kZXggNmE5MDU4Y2Rj Li5iNjYxZTA3MDUgMTAwNjQ0CiAgCQlnb3RvIG91dDsKICAJfQogLQlrbGVuID0gKEVDX0dST1VQ X2dldF9kZWdyZWUoZ3JvdXApICsgNykgLyA4OwotLQlpZiAoKGtidWYgPSBtYWxsb2Moa2xlbikp ID09IE5VTEwgfHwKLS0JICAgIChzaGFyZWRfc2VjcmV0ID0gQk5fbmV3KCkpID09IE5VTEwpIHsK LSsJaWYgKChrYnVmID0gbWFsbG9jKGtsZW4pKSA9PSBOVUxMKSB7CisgCWlmICgoa2J1ZiA9IG1h bGxvYyhrbGVuKSkgPT0gTlVMTCkgewogIAkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKICAJCWdv dG8gb3V0OwogIAl9Ci0tCWlmIChFQ0RIX2NvbXB1dGVfa2V5KGtidWYsIGtsZW4sIGRoX3B1Yiwg a2V5LCBOVUxMKSAhPSAoaW50KWtsZW4gfHwKLS0JICAgIEJOX2JpbjJibihrYnVmLCBrbGVuLCBz aGFyZWRfc2VjcmV0KSA9PSBOVUxMKSB7CistCWlmIChFQ0RIX2NvbXB1dGVfa2V5KGtidWYsIGts ZW4sIGRoX3B1Yiwga2V5LCBOVUxMKSAhPSAoaW50KWtsZW4pIHsKICsJaWYgKEVWUF9QS0VZX2Rl cml2ZShjdHgsIGtidWYsICZrbGVuKSAhPSAxKSB7CiAgCQlyID0gU1NIX0VSUl9MSUJDUllQVE9f RVJST1I7CiAgCQlnb3RvIG91dDsKICAJfQotICNpZmRlZiBERUJVR19LRVhFQ0RICi0gCWR1bXBf ZGlnZXN0KCJzaGFyZWQgc2VjcmV0Iiwga2J1Ziwga2xlbik7Ci0gI2VuZGlmCi0rCWlmICgoc2hh cmVkX3NlY3JldCA9IEJOX25ldygpKSA9PSBOVUxMIHx8Ci0rCSAgICAoQk5fYmluMmJuKGtidWYs IGtsZW4sIHNoYXJlZF9zZWNyZXQpID09IE5VTEwpKSB7Ci0rCQlyID0gU1NIX0VSUl9BTExPQ19G QUlMOwotKwkJZ290byBvdXQ7Ci0rCX0KLSAJaWYgKChyID0gc3NoYnVmX3B1dF9iaWdudW0yKGJ1 Ziwgc2hhcmVkX3NlY3JldCkpICE9IDApCi0gCQlnb3RvIG91dDsKK0BAIC0xODEsMjMgKzI1Miwy NSBAQCBrZXhfZWNkaF9kZWNfa2V5X2dyb3VwKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3RydWN0 IHNzaGJ1ZiAqZWNfYmxvYiwKKyAJCWlmICgociA9IHNzaGJ1Zl9wdXQoYnVmLCBrYnVmLCBrbGVu KSkgIT0gMCkKKyAJCQlnb3RvIG91dDsKKyAJfSBlbHNlIHsKKy0JCWlmICgoc2hhcmVkX3NlY3Jl dCA9IEJOX25ldygpKSA9PSBOVUxMKSB7CisrCQlpZiAoKHNoYXJlZF9zZWNyZXQgPSBCTl9uZXco KSkgPT0gTlVMTCB8fAorKwkJICAgIChCTl9iaW4yYm4oa2J1Ziwga2xlbiwgc2hhcmVkX3NlY3Jl dCkgPT0gTlVMTCkpIHsKKyAJCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOworIAkJCWdvdG8gb3V0 OworIAkJfQorLQkJaWYgKEJOX2JpbjJibihrYnVmLCBrbGVuLCBzaGFyZWRfc2VjcmV0KSA9PSBO VUxMKSB7CistCQkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworLQkJCWdvdG8gb3V0Owor LQkJfQorIAkJaWYgKChyID0gc3NoYnVmX3B1dF9iaWdudW0yKGJ1Ziwgc2hhcmVkX3NlY3JldCkp ICE9IDApCisgCQkJZ290byBvdXQ7CisgCX0KICAJKnNoYXJlZF9zZWNyZXRwID0gYnVmOwogIAli dWYgPSBOVUxMOwogICBvdXQ6CkBAIC02MTEsNSArNjEwLDUgQEAgaW5kZXggNmE5MDU4Y2RjLi5i NjYxZTA3MDUgMTAwNjQ0CiAgCXJldHVybiByOwogIH0KIC0tIAotMi41My4wCisyLjU1LjAKIAoK ZGlmZiAtLWdpdCBhLzAwNDEtb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJvb2YucGF0Y2ggYi8w MDQxLW9wZW5zc2gtOC43cDEtbm9ob3N0c2hhMXByb29mLnBhdGNoCmluZGV4IDBiNjJjYzQuLmRj Mzk5ODMgMTAwNjQ0Ci0tLSBhLzAwNDEtb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJvb2YucGF0 Y2gKKysrIGIvMDA0MS1vcGVuc3NoLTguN3AxLW5vaG9zdHNoYTFwcm9vZi5wYXRjaApAQCAtMSw3 ICsxLDcgQEAKLUZyb20gODE2ZDkzMTM1NmIzYjcyZjYxOTI5YzhkNjY3NDZiNTVkOTY4ODJiYyBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gODU1NWRkMzkxNmQzMTFjYmVmNWJmZjc4NTUy M2NkMjdhMTkzYzcyMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBCZWx5 YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6 MjkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA0MS81NF0gb3BlbnNzaC04LjdwMS1ub2hvc3RzaGEx cHJvb2YKK1N1YmplY3Q6IFtQQVRDSCA0MS81M10gb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJv b2YKIAogLS0tCiAgY29tcGF0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiAr KysrKwpAQCAtNjUsMTAgKzY1LDEwIEBAIGluZGV4IDFhMTkwNjBmYy4uMmU2ZGI1YmY5IDEwMDY0 NAogIC8qICNkZWZpbmUgdW51c2VkCQkweDAwMDAwMDIwICovCiAgI2RlZmluZSBTU0hfQlVHX0RF QlVHCQkweDAwMDAwMDQwCiBkaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCi1pbmRl eCAzMDU4ODMyNzguLmJmNWE1MTA1YiAxMDA2NDQKK2luZGV4IDczM2EzNDYwZi4uODI2OWU3OGMz IDEwMDY0NAogLS0tIGEvbW9uaXRvci5jCiArKysgYi9tb25pdG9yLmMKLUBAIC03NTUsMTEgKzc1 NSwxOCBAQCBpbnQKK0BAIC03NDEsMTEgKzc0MSwxOCBAQCBpbnQKICBtbV9hbnN3ZXJfc2V0Y29t cGF0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgewogIAlp bnQgcjsKQEAgLTg4LDcgKzg4LDcgQEAgaW5kZXggMzA1ODgzMjc4Li5iZjVhNTEwNWIgMTAwNjQ0 CiAgCWNvbXBhdF9zZXQgPSAxOwogIAogIAlyZXR1cm4gKDApOwotQEAgLTc3MywxMCArNzgwLDEy IEBAIG1tX2Fuc3dlcl9zaWduKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hi dWYgKm0pCitAQCAtNzU5LDExICs3NjYsMTMgQEAgbW1fYW5zd2VyX3NpZ24oc3RydWN0IHNzaCAq c3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJc3RydWN0IHNzaGJ1ZiAqc2lnYnVm ID0gTlVMTDsKICAJdV9jaGFyICpwID0gTlVMTCwgKnNpZ25hdHVyZSA9IE5VTEw7CiAgCWNoYXIg KmFsZyA9IE5VTEw7CkBAIC05OSwxMSArOTksMTIgQEAgaW5kZXggMzA1ODgzMjc4Li5iZjVhNTEw NWIgMTAwNjQ0CiArCWludCByLCBpc19wcm9vZiA9IDA7CiArCWludCBrZXlpZCwgY29tcGF0Owog IAljb25zdCBjaGFyIHByb29mX3JlcVtdID0gImhvc3RrZXlzLXByb3ZlLTAwQG9wZW5zc2guY29t IjsKKyAJc3RhdGljIGludCBuaG9zdGtleV9wcm9vZnNfZG9uZSwgKmhvc3RrZXlfcHJvb2ZzX2Rv bmU7CiArCWNvbnN0IGNoYXIgc2FmZV9yc2FbXSAgPSAicnNhLXNoYTItMjU2IjsKICAKICAJZGVi dWczX2YoImVudGVyaW5nIik7CiAgCi1AQCAtODM4LDE4ICs4NDcsMzAgQEAgbW1fYW5zd2VyX3Np Z24oc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC04MzYs MTggKzg0NSwzMCBAQCBtbV9hbnN3ZXJfc2lnbihzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBz dHJ1Y3Qgc3NoYnVmICptKQogIAl9CiAgCiAgCWlmICgoa2V5ID0gZ2V0X2hvc3RrZXlfYnlfaW5k ZXgoa2V5aWQpKSAhPSBOVUxMKSB7CkBAIC0xMzgsNyArMTM5LDcgQEAgaW5kZXggMzA1ODgzMjc4 Li5iZjVhNTEwNWIgMTAwNjQ0CiAgCiAgCXNzaGJ1Zl9yZXNldChtKTsKIGRpZmYgLS1naXQgYS9y ZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90 ZXN0X2tleC5jCi1pbmRleCAxNmMyZjJkZmYuLmY0NzAwZGVlYiAxMDA2NDQKK2luZGV4IDg5Mzc2 ZjExNS4uZGI3Y2I0MThiIDEwMDY0NAogLS0tIGEvcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rf a2V4LmMKICsrKyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCiBAQCAtMTEwLDcg KzExMCw4IEBAIGRvX2tleF93aXRoX2tleShjaGFyICprZXgsIGNoYXIgKmNpcGhlciwgY2hhciAq bWFjLApAQCAtMTUyLDEwICsxNTMsMTAgQEAgaW5kZXggMTZjMmYyZGZmLi5mNDcwMGRlZWIgMTAw NjQ0CiAgCWtleF9wYXJhbXMucHJvcG9zYWxbUFJPUE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1Nd ID0ga2V5bmFtZTsKICAJQVNTRVJUX0lOVF9FUShzc2hfaW5pdCgmY2xpZW50LCAwLCAma2V4X3Bh cmFtcyksIDApOwogZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X2Zp bGUuYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X2ZpbGUuYwotaW5kZXggZTQxMmI3 NWQ4Li41YjA2YmM5MDUgMTAwNjQ0CitpbmRleCBmOGZjYzNhYmQuLmQ0YWI2NGNmMCAxMDA2NDQK IC0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X2ZpbGUuYwogKysrIGIvcmVncmVz cy91bml0dGVzdHMvc3Noa2V5L3Rlc3RfZmlsZS5jCi1AQCAtMTA2LDYgKzEwNiw3IEBAIHNzaGtl eV9maWxlX3Rlc3RzKHZvaWQpCitAQCAtMTA0LDYgKzEwNCw3IEBAIHNzaGtleV9maWxlX3Rlc3Rz KHZvaWQpCiAgCXNzaGtleV9mcmVlKGsyKTsKICAJVEVTVF9ET05FKCk7CiAgCkBAIC0xNjMsNyAr MTY0LDcgQEAgaW5kZXggZTQxMmI3NWQ4Li41YjA2YmM5MDUgMTAwNjQ0CiAgCVRFU1RfU1RBUlQo ImxvYWQgUlNBIGNlcnQgd2l0aCBTSEExIHNpZ25hdHVyZSIpOwogIAlBU1NFUlRfSU5UX0VRKHNz aGtleV9sb2FkX2NlcnQodGVzdF9kYXRhX2ZpbGUoInJzYV8xX3NoYTEiKSwgJmsyKSwgMCk7CiAg CUFTU0VSVF9QVFJfTkUoazIsIE5VTEwpOwotQEAgLTExMyw3ICsxMTQsNyBAQCBzc2hrZXlfZmls ZV90ZXN0cyh2b2lkKQorQEAgLTExMSw3ICsxMTIsNyBAQCBzc2hrZXlfZmlsZV90ZXN0cyh2b2lk KQogIAlBU1NFUlRfSU5UX0VRKHNzaGtleV9lcXVhbF9wdWJsaWMoazEsIGsyKSwgMSk7CiAgCUFT U0VSVF9TVFJJTkdfRVEoazItPmNlcnQtPnNpZ25hdHVyZV90eXBlLCAic3NoLXJzYSIpOwogIAlz c2hrZXlfZnJlZShrMik7CkBAIC0xNzMsMTAgKzE3NCwxMCBAQCBpbmRleCBlNDEyYjc1ZDguLjVi MDZiYzkwNSAxMDA2NDQKICAJVEVTVF9TVEFSVCgibG9hZCBSU0EgY2VydCB3aXRoIFNIQTUxMiBz aWduYXR1cmUiKTsKICAJQVNTRVJUX0lOVF9FUShzc2hrZXlfbG9hZF9jZXJ0KHRlc3RfZGF0YV9m aWxlKCJyc2FfMV9zaGE1MTIiKSwgJmsyKSwgMCk7CiBkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0 dGVzdHMvc3Noa2V5L3Rlc3RfZnV6ei5jIGIvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3Rf ZnV6ei5jCi1pbmRleCBkMGY0N2Q3Y2YuLmJhNGQ1MDZkNSAxMDA2NDQKK2luZGV4IDBlNWJkZjc0 OC4uM2JkZmRlMTY3IDEwMDY0NAogLS0tIGEvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3Rf ZnV6ei5jCiArKysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9mdXp6LmMKLUBAIC0y NzMsMTMgKzI3MywxNCBAQCBzc2hrZXlfZnV6el90ZXN0cyh2b2lkKQorQEAgLTMxMywxMyArMzEz LDE0IEBAIHNzaGtleV9mdXp6X3Rlc3RzKHZvaWQpCiAgCVRFU1RfRE9ORSgpOwogIAogICNpZmRl ZiBXSVRIX09QRU5TU0wKQEAgLTE5MywxMCArMTk0LDEwIEBAIGluZGV4IGQwZjQ3ZDdjZi4uYmE0 ZDUwNmQ1IDEwMDY0NAogIAlURVNUX1NUQVJUKCJmdXp6IFJTQSBTSEEyNTYgc2lnIik7CiAgCWJ1 ZiA9IGxvYWRfZmlsZSgicnNhXzEiKTsKIGRpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9z c2hrZXkvdGVzdF9zc2hrZXkuYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X3NzaGtl eS5jCi1pbmRleCAxNzAxYzg3YzUuLjM2ZjZmZDMzNSAxMDA2NDQKK2luZGV4IDU5ZWZiYjI4ZS4u NDIxOTg3NzVmIDEwMDY0NAogLS0tIGEvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3Rfc3No a2V5LmMKICsrKyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X3NzaGtleS5jCi1AQCAt NTksNiArNTksOSBAQCBidWlsZF9jZXJ0KHN0cnVjdCBzc2hidWYgKmIsIHN0cnVjdCBzc2hrZXkg KmssIGNvbnN0IGNoYXIgKnR5cGUsCitAQCAtNTcsNiArNTcsOSBAQCBidWlsZF9jZXJ0KHN0cnVj dCBzc2hidWYgKmIsIHN0cnVjdCBzc2hrZXkgKmssIGNvbnN0IGNoYXIgKnR5cGUsCiAgCXVfY2hh ciAqc2lnYmxvYjsKICAJc2l6ZV90IHNpZ2xlbjsKICAKQEAgLTIwNiw3ICsyMDcsNyBAQCBpbmRl eCAxNzAxYzg3YzUuLjM2ZjZmZDMzNSAxMDA2NDQKICAJY2FfYnVmID0gc3NoYnVmX25ldygpOwog IAlBU1NFUlRfUFRSX05FKGNhX2J1ZiwgTlVMTCk7CiAgCUFTU0VSVF9JTlRfRVEoc3Noa2V5X3B1 dGIoY2Ffa2V5LCBjYV9idWYpLCAwKTsKLUBAIC0xMDAsOCArMTAzLDkgQEAgYnVpbGRfY2VydChz dHJ1Y3Qgc3NoYnVmICpiLCBzdHJ1Y3Qgc3Noa2V5ICprLCBjb25zdCBjaGFyICp0eXBlLAorQEAg LTk4LDggKzEwMSw5IEBAIGJ1aWxkX2NlcnQoc3RydWN0IHNzaGJ1ZiAqYiwgc3RydWN0IHNzaGtl eSAqaywgY29uc3QgY2hhciAqdHlwZSwKICAJQVNTRVJUX0lOVF9FUShzc2hidWZfcHV0X3N0cmlu ZyhiLCBOVUxMLCAwKSwgMCk7IC8qIHJlc2VydmVkICovCiAgCUFTU0VSVF9JTlRfRVEoc3NoYnVm X3B1dF9zdHJpbmdiKGIsIGNhX2J1ZiksIDApOyAvKiBzaWduYXR1cmUga2V5ICovCiAgCUFTU0VS VF9JTlRfRVEoc3Noa2V5X3NpZ24oc2lnbl9rZXksICZzaWdibG9iLCAmc2lnbGVuLApAQCAtMjE4 LDcgKzIxOSw3IEBAIGluZGV4IDE3MDFjODdjNS4uMzZmNmZkMzM1IDEwMDY0NAogIAogIAlmcmVl KHNpZ2Jsb2IpOwogIAlzc2hidWZfZnJlZShjYV9idWYpOwotQEAgLTExOCwxNiArMTIyLDIwIEBA IHNpZ25hdHVyZV90ZXN0KHN0cnVjdCBzc2hrZXkgKmssIHN0cnVjdCBzc2hrZXkgKmJhZCwgY29u c3QgY2hhciAqc2lnX2FsZywKK0BAIC0xMTYsMTYgKzEyMCwyMCBAQCBzaWduYXR1cmVfdGVzdChz dHJ1Y3Qgc3Noa2V5ICprLCBzdHJ1Y3Qgc3Noa2V5ICpiYWQsIGNvbnN0IGNoYXIgKnNpZ19hbGcs CiAgewogIAlzaXplX3QgbGVuOwogIAl1X2NoYXIgKnNpZzsKQEAgLTI0Nyw3ICsyNDgsNyBAQCBp bmRleCAxNzAxYzg3YzUuLjM2ZjZmZDMzNSAxMDA2NDQKICAJZnJlZShzaWcpOwogIH0KICAKLUBA IC01NTIsNyArNTYwLDcgQEAgc3Noa2V5X3Rlc3RzKHZvaWQpCitAQCAtNjI1LDcgKzYzMyw3IEBA IHNzaGtleV90ZXN0cyh2b2lkKQogIAlBU1NFUlRfSU5UX0VRKHNzaGtleV9sb2FkX3B1YmxpYyh0 ZXN0X2RhdGFfZmlsZSgicnNhXzEucHViIiksICZrMiwKICAJICAgIE5VTEwpLCAwKTsKICAJazMg PSBnZXRfcHJpdmF0ZSgicnNhXzEiKTsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBpbmRleCAxNzAxYzg3 YzUuLjM2ZjZmZDMzNSAxMDA2NDQKICAJICAgIFNTSF9FUlJfS0VZX0NFUlRfSU5WQUxJRF9TSUdO X0tFWSk7CiAgCUFTU0VSVF9QVFJfRVEoazQsIE5VTEwpOwogZGlmZiAtLWdpdCBhL3NlcnZlcmxv b3AuYyBiL3NlcnZlcmxvb3AuYwotaW5kZXggOGU2MzQ4MGVjLi4xMDg3YTZjN2QgMTAwNjQ0Citp bmRleCBjMjI2ODE0ODMuLjI5NDQ1NDI2YiAxMDA2NDQKIC0tLSBhL3NlcnZlcmxvb3AuYwogKysr IGIvc2VydmVybG9vcC5jCiBAQCAtNzYsNiArNzYsNyBAQApAQCAtMjY4LDcgKzI2OSw3IEBAIGlu ZGV4IDhlNjM0ODBlYy4uMTA4N2E2YzdkIDEwMDY0NAogIAogIGV4dGVybiBTZXJ2ZXJPcHRpb25z IG9wdGlvbnM7CiAgCi1AQCAtNzI0LDcgKzcyNSwxMCBAQCBzZXJ2ZXJfaW5wdXRfaG9zdGtleXNf cHJvdmUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3Qgc3NoYnVmICoqcmVzcHApCitAQCAtNzI1LDcg KzcyNiwxMCBAQCBzZXJ2ZXJfaW5wdXRfaG9zdGtleXNfcHJvdmUoc3RydWN0IHNzaCAqc3NoLCBz dHJ1Y3Qgc3NoYnVmICoqcmVzcHApCiAgCQkJZWxzZSBpZiAoc3NoLT5rZXgtPmZsYWdzICYgS0VY X1JTQV9TSEEyXzI1Nl9TVVBQT1JURUQpCiAgCQkJCXNpZ2FsZyA9ICJyc2Etc2hhMi0yNTYiOwog IAkJfQpAQCAtMjk1LDcgKzI5Niw3IEBAIGluZGV4IDVhZjM5YmIzOS4uODgyMzJjNmVkIDEwMDY0 NAogIAkJCWdvdG8gb3V0OwogIAkJfQogZGlmZiAtLWdpdCBhL3NzaGNvbm5lY3QyLmMgYi9zc2hj b25uZWN0Mi5jCi1pbmRleCAzMWY1MWJlNjIuLmVlZTFmOTc5NCAxMDA2NDQKK2luZGV4IGMyMWIz YTExYS4uMzY2MDg3M2E2IDEwMDY0NAogLS0tIGEvc3NoY29ubmVjdDIuYwogKysrIGIvc3NoY29u bmVjdDIuYwogQEAgLTE0NDAsNiArMTQ0MCwxNCBAQCBpZGVudGl0eV9zaWduKHN0cnVjdCBpZGVu dGl0eSAqaWQsIHVfY2hhciAqKnNpZ3AsIHNpemVfdCAqbGVucCwKQEAgLTMxNCwxMCArMzE1LDEw IEBAIGluZGV4IDMxZjUxYmU2Mi4uZWVlMWY5Nzk0IDEwMDY0NAogIAl9CiAgCiBkaWZmIC0tZ2l0 IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24uYwotaW5kZXggZDg5NzJmYmQ1Li43MDY0 YWZkN2MgMTAwNjQ0CitpbmRleCAwYTk3MDhkM2EuLmFkZjViMWI0OSAxMDA2NDQKIC0tLSBhL3Nz aGQtc2Vzc2lvbi5jCiArKysgYi9zc2hkLXNlc3Npb24uYwotQEAgLTEyNjAsNiArMTI2MCwyNyBA QCBtYWluKGludCBhYywgY2hhciAqKmF2KQorQEAgLTEyNjEsNiArMTI2MSwyNyBAQCBtYWluKGlu dCBhYywgY2hhciAqKmF2KQogIAogIAljaGVja19pcF9vcHRpb25zKHNzaCk7CiAgCkBAIC0zNDYs NSArMzQ3LDUgQEAgaW5kZXggZDg5NzJmYmQ1Li43MDY0YWZkN2MgMTAwNjQ0CiAgCWNoYW5uZWxf aW5pdF9jaGFubmVscyhzc2gpOwogIAljaGFubmVsX3NldF9hZihzc2gsIG9wdGlvbnMuYWRkcmVz c19mYW1pbHkpOwogLS0gCi0yLjUzLjAKKzIuNTUuMAogCgpkaWZmIC0tZ2l0IGEvMDA0Mi1vcGVu c3NoLTkuOXAxLXNlcGFyYXRlLWtleXNpZ24ucGF0Y2ggYi8wMDQyLW9wZW5zc2gtOS45cDEtc2Vw YXJhdGUta2V5c2lnbi5wYXRjaAppbmRleCAxNTM1ZTIzLi5jMjY3ZTllIDEwMDY0NAotLS0gYS8w MDQyLW9wZW5zc2gtOS45cDEtc2VwYXJhdGUta2V5c2lnbi5wYXRjaAorKysgYi8wMDQyLW9wZW5z c2gtOS45cDEtc2VwYXJhdGUta2V5c2lnbi5wYXRjaApAQCAtMSwxNyArMSwxNyBAQAotRnJvbSBm M2RlMzI4MDkzMzM0YTkwM2VlNTQ1OTM0MDc2NWI3ZjU0NDEyMTZhIE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQorRnJvbSBlOWViYTdmNGFkYjU5ZDMwOGZmOWRlYzRmOGVjMWE0MjZjZmUzZTM5IE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVj dDogW1BBVENIIDQyLzU0XSBvcGVuc3NoLTkuOXAxLXNlcGFyYXRlLWtleXNpZ24KK1N1YmplY3Q6 IFtQQVRDSCA0Mi81M10gb3BlbnNzaC05LjlwMS1zZXBhcmF0ZS1rZXlzaWduCiAKIC0tLQogIHNz aF9jb25maWcuNSB8IDIgKy0KICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVs ZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3NzaF9jb25maWcuNSBiL3NzaF9jb25maWcuNQotaW5k ZXggMzA2ZmExZDhhLi5hYjk4YzE3MmYgMTAwNjQ0CitpbmRleCBjNGM3MmY1ODcuLmYyZmY4NTg1 YyAxMDA2NDQKIC0tLSBhL3NzaF9jb25maWcuNQogKysrIGIvc3NoX2NvbmZpZy41Ci1AQCAtNzk3 LDcgKzc5Nyw3IEBAIG9yCitAQCAtODM0LDcgKzgzNCw3IEBAIG9yCiAgVGhpcyBvcHRpb24gc2hv dWxkIGJlIHBsYWNlZCBpbiB0aGUgbm9uLWhvc3RzcGVjaWZpYyBzZWN0aW9uLgogIFNlZQogIC5Y ciBzc2gta2V5c2lnbiA4CkBAIC0yMSw1ICsyMSw1IEBAIGluZGV4IDMwNmZhMWQ4YS4uYWI5OGMx NzJmIDEwMDY0NAogIFNldHMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgKGRlZmF1bHQ6CiAgLlFsIH4g KSAuCiAtLSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDQzLW9wZW5zc2gtOS45 cDEtb3BlbnNzbC1tbGtlbS5wYXRjaCBiLzAwNDMtb3BlbnNzaC05LjlwMS1vcGVuc3NsLW1sa2Vt LnBhdGNoCmluZGV4IDYwMmQ3YmUuLjhmZmMxYzcgMTAwNjQ0Ci0tLSBhLzAwNDMtb3BlbnNzaC05 LjlwMS1vcGVuc3NsLW1sa2VtLnBhdGNoCisrKyBiLzAwNDMtb3BlbnNzaC05LjlwMS1vcGVuc3Ns LW1sa2VtLnBhdGNoCkBAIC0xLDE4ICsxLDE4IEBACi1Gcm9tIDFkNTNkMzQyOTBkZWZiYmIzYjZk YWE5NjdjNzRiOGYwMDI4MmRjN2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDY0ODM0 OGYzNGUzZjQyNzllMDMwMTg0YTMxOGE5YzAzMjZmZDgyYTEgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBU aHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggNDMvNTRdIG9w ZW5zc2gtOS45cDEtb3BlbnNzbC1tbGtlbQorU3ViamVjdDogW1BBVENIIDQzLzUzXSBvcGVuc3No LTkuOXAxLW9wZW5zc2wtbWxrZW0KIAogLS0tCiAga2V4LW5hbWVzLmMgICAgICAgICB8ICAyMyAr KystCi0ga2V4bWxrZW03Njh4MjU1MTkuYyB8IDI5MSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgMzEzIGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKKyBrZXhtbGtlbTc2OHgyNTUxOS5jIHwgMjkyICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAzMTQgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEva2V4LW5hbWVzLmMgYi9r ZXgtbmFtZXMuYwotaW5kZXggYzA3NjFhZThmLi44ODJmMjkwNWIgMTAwNjQ0CitpbmRleCA4ZTlj NjIxYmQuLmNkZDVkYjkwZSAxMDA2NDQKIC0tLSBhL2tleC1uYW1lcy5jCiArKysgYi9rZXgtbmFt ZXMuYwotQEAgLTEwOCw2ICsxMDgsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZXhhbGcgZ3Nz X2tleGFsZ3NbXSA9IHsKK0BAIC0xMDYsNiArMTA2LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg a2V4YWxnIGdzc19rZXhhbGdzW10gPSB7CiAgCXsgTlVMTCwgMCwgLTEsIC0xLCAwfSwKICB9Owog IApAQCAtMzIsNyArMzIsNyBAQCBpbmRleCBjMDc2MWFlOGYuLjg4MmYyOTA1YiAxMDA2NDQKICBz dGF0aWMgY2hhciAqCiAga2V4X2FsZ19saXN0X2ludGVybmFsKGNoYXIgc2VwLCBjb25zdCBzdHJ1 Y3Qga2V4YWxnICphbGdzKQogIHsKLUBAIC0xMTUsOCArMTI4LDEyIEBAIGtleF9hbGdfbGlzdF9p bnRlcm5hbChjaGFyIHNlcCwgY29uc3Qgc3RydWN0IGtleGFsZyAqYWxncykKK0BAIC0xMTMsOCAr MTI2LDEyIEBAIGtleF9hbGdfbGlzdF9pbnRlcm5hbChjaGFyIHNlcCwgY29uc3Qgc3RydWN0IGtl eGFsZyAqYWxncykKICAJY29uc3Qgc3RydWN0IGtleGFsZyAqazsKICAJY2hhciBzZXBfc3RyWzJd ID0ge3NlcCwgJ1wwJ307CiAgCkBAIC00Niw3ICs0Niw3IEBAIGluZGV4IGMwNzYxYWU4Zi4uODgy ZjI5MDViIDEwMDY0NAogIAogIAlyZXR1cm4gcmV0OwogIH0KLUBAIC0xMzgsNiArMTU1LDEwIEBA IGtleF9hbGdfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQorQEAgLTEzNiw2ICsxNTMsMTAgQEAg a2V4X2FsZ19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiAgewogIAljb25zdCBzdHJ1Y3Qga2V4 YWxnICprOwogIApAQCAtNTgsMTMgKzU4LDEzIEBAIGluZGV4IGMwNzYxYWU4Zi4uODgyZjI5MDVi IDEwMDY0NAogIAkJaWYgKHN0cmNtcChrLT5uYW1lLCBuYW1lKSA9PSAwKQogIAkJCXJldHVybiBr OwogZGlmZiAtLWdpdCBhL2tleG1sa2VtNzY4eDI1NTE5LmMgYi9rZXhtbGtlbTc2OHgyNTUxOS5j Ci1pbmRleCAyNTg1ZDFkYjMuLmFiNjE2NzIyMSAxMDA2NDQKK2luZGV4IGUyYzJjMGE4Ni4uMzY2 NTgxMjBmIDEwMDY0NAogLS0tIGEva2V4bWxrZW03Njh4MjU1MTkuYwogKysrIGIva2V4bWxrZW03 Njh4MjU1MTkuYwotQEAgLTQ0LDEwICs0NCwxMjcgQEAKK0BAIC00NSw5ICs0NSwxMjcgQEAKKyAK ICAjaWZkZWYgVVNFX01MS0VNNzY4WDI1NTE5CiAgCi0gI2luY2x1ZGUgImxpYmNydXhfbWxrZW03 Njhfc2hhMy5oIgogKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgogKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgogKyNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTgxLDE2ICsxODEsMTYgQEAgaW5kZXgg MjU4NWQxZGIzLi5hYjYxNjcyMjEgMTAwNjQ0CiArCiArICAgIHJldHVybiByOwogK30KLSAKKysK ICBpbnQKICBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQog IHsKICsjaWYgMAogIAlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOwotIAl1X2NoYXIgcm5kW0xJ QkNSVVhfTUxfS0VNX0tFWV9QQUlSX1BSTkdfTEVOXSwgKmNwID0gTlVMTDsKKyAJdV9jaGFyICpj cCA9IE5VTEw7CiAgCXNpemVfdCBuZWVkOwotQEAgLTgyLDYgKzE5OSwzNiBAQCBrZXhfa2VtX21s a2VtNzY4eDI1NTE5X2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQotIAlleHBsaWNpdF9iemVybyhy bmQsIHNpemVvZihybmQpKTsKK0BAIC03OCw2ICsxOTYsMzYgQEAga2V4X2tlbV9tbGtlbTc2OHgy NTUxOV9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKKyAgb3V0OgogIAlzc2hidWZfZnJlZShidWYp OwogIAlyZXR1cm4gcjsKICsjZWxzZQpAQCAtMjI2LDcgKzIyNiw3IEBAIGluZGV4IDI1ODVkMWRi My4uYWI2MTY3MjIxIDEwMDY0NAogIH0KICAKICBpbnQKLUBAIC04OSw2ICsyMzYsNyBAQCBrZXhf a2VtX21sa2VtNzY4eDI1NTE5X2VuYyhzdHJ1Y3Qga2V4ICprZXgsCitAQCAtODUsNiArMjMzLDcg QEAga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9lbmMoc3RydWN0IGtleCAqa2V4LAogICAgIGNvbnN0 IHN0cnVjdCBzc2hidWYgKmNsaWVudF9ibG9iLCBzdHJ1Y3Qgc3NoYnVmICoqc2VydmVyX2Jsb2Jw LAogICAgIHN0cnVjdCBzc2hidWYgKipzaGFyZWRfc2VjcmV0cCkKICB7CkBAIC0yMzQsNyArMjM0 LDcgQEAgaW5kZXggMjU4NWQxZGIzLi5hYjYxNjcyMjEgMTAwNjQ0CiAgCXN0cnVjdCBzc2hidWYg KnNlcnZlcl9ibG9iID0gTlVMTDsKICAJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKICAJY29u c3QgdV9jaGFyICpjbGllbnRfcHViOwotQEAgLTE4MSwxMiArMzI5LDk3IEBAIGtleF9rZW1fbWxr ZW03Njh4MjU1MTlfZW5jKHN0cnVjdCBrZXggKmtleCwKK0BAIC0xNzAsMTIgKzMxOSw5NyBAQCBr ZXhfa2VtX21sa2VtNzY4eDI1NTE5X2VuYyhzdHJ1Y3Qga2V4ICprZXgsCiAgCXNzaGJ1Zl9mcmVl KHNlcnZlcl9ibG9iKTsKICAJc3NoYnVmX2ZyZWUoYnVmKTsKICAJcmV0dXJuIHI7CkBAIC0yNzcs MTMgKzI3NywxMyBAQCBpbmRleCAyNTg1ZDFkYjMuLmFiNjE2NzIyMSAxMDA2NDQKICsJCXIgPSBT U0hfRVJSX0FMTE9DX0ZBSUw7CiArCQlnb3RvIG91dDsKICsJfQotKwlpZiAobWxrZW03NjhfZW5j YXBfc2VjcmV0KGNsaWVudF9wdWIsIGVuYy5zbmQsIGVuYy5mc3QudmFsdWUpICE9IDApCisrCWlm IChtbGtlbTc2OF9lbmNhcF9zZWNyZXQoY2xpZW50X3B1YiwgZW5jLnNuZC5kYXRhLCBlbmMuZnN0 LmRhdGEpICE9IDApCiArCQlnb3RvIG91dDsKICsKICsJLyogZ2VuZXJhdGUgRUNESCBrZXkgcGFp ciwgc3RvcmUgc2VydmVyIHB1YmtleSBhZnRlciBjaXBoZXJ0ZXh0ICovCiArCWtleGMyNTUxOV9r ZXlnZW4oc2VydmVyX2tleSwgc2VydmVyX3B1Yik7Ci0rCWlmICgociA9IHNzaGJ1Zl9wdXQoYnVm LCBlbmMuc25kLCBzaXplb2YoZW5jLnNuZCkpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9w dXQoc2VydmVyX2Jsb2IsIGVuYy5mc3QudmFsdWUsIHNpemVvZihlbmMuZnN0LnZhbHVlKSkpICE9 IDAgfHwKKysJaWYgKChyID0gc3NoYnVmX3B1dChidWYsIGVuYy5zbmQuZGF0YSwgc2l6ZW9mKGVu Yy5zbmQuZGF0YSkpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaGJ1Zl9wdXQoc2VydmVyX2Jsb2Is IGVuYy5mc3QuZGF0YSwgc2l6ZW9mKGVuYy5mc3QuZGF0YSkpKSAhPSAwIHx8CiArCSAgICAociA9 IHNzaGJ1Zl9wdXQoc2VydmVyX2Jsb2IsIHNlcnZlcl9wdWIsIHNpemVvZihzZXJ2ZXJfcHViKSkp ICE9IDApCiArCQlnb3RvIG91dDsKICsJLyogYXBwZW5kIEVDREggc2hhcmVkIGtleSAqLwpAQCAt Mjk1LDggKzI5NSw4IEBAIGluZGV4IDI1ODVkMWRiMy4uYWI2MTY3MjIxIDEwMDY0NAogKyNpZmRl ZiBERUJVR19LRVhFQ0RICiArCWR1bXBfZGlnZXN0KCJzZXJ2ZXIgcHVibGljIGtleSAyNTUxOToi LCBzZXJ2ZXJfcHViLCBDVVJWRTI1NTE5X1NJWkUpOwogKwlkdW1wX2RpZ2VzdCgic2VydmVyIGNp cGhlciB0ZXh0OiIsCi0rCSAgICBlbmMuZnN0LnZhbHVlLCBzaXplb2YoZW5jLmZzdC52YWx1ZSkp OwotKwlkdW1wX2RpZ2VzdCgic2VydmVyIGtlbSBrZXk6IiwgZW5jLnNuZCwgc2l6ZW9mKGVuYy5z bmQpKTsKKysJICAgIGVuYy5mc3QuZGF0YSwgc2l6ZW9mKGVuYy5mc3QuZGF0YSkpOworKwlkdW1w X2RpZ2VzdCgic2VydmVyIGtlbSBrZXk6IiwgZW5jLnNuZC5kYXRhLCBzaXplb2YoZW5jLnNuZC5k YXRhKSk7CiArCWR1bXBfZGlnZXN0KCJjb25jYXRlbmF0aW9uIG9mIEtFTSBrZXkgYW5kIEVDREgg c2hhcmVkIGtleToiLAogKwkgICAgc3NoYnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOwog KyNlbmRpZgpAQCAtMzMwLDEwICszMzAsMTAgQEAgaW5kZXggMjU4NWQxZGIzLi5hYjYxNjcyMjEg MTAwNjQ0CiAgewogKyNpZiAwCiAgCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7Ci0gCXVfY2hh ciBtbGtlbV9rZXlbY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFU107CisgCXVfY2hhciBzaGFyZWRf c2VjcmV0W01MS0VNNzY4X0JZVEVTXTsKICAJY29uc3QgdV9jaGFyICpjaXBoZXJ0ZXh0LCAqc2Vy dmVyX3B1YjsKLUBAIC0yNTQsNiArNDg3LDY0IEBAIGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZGVj KHN0cnVjdCBrZXggKmtleCwKLSAJZXhwbGljaXRfYnplcm8obWxrZW1fa2V5LCBzaXplb2YobWxr ZW1fa2V5KSk7CitAQCAtMjM2LDYgKzQ3MCw2NCBAQCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2Rl YyhzdHJ1Y3Qga2V4ICprZXgsCisgCWV4cGxpY2l0X2J6ZXJvKHNoYXJlZF9zZWNyZXQsIHNpemVv ZihzaGFyZWRfc2VjcmV0KSk7CiAgCXNzaGJ1Zl9mcmVlKGJ1Zik7CiAgCXJldHVybiByOwogKyNl bHNlCkBAIC0zOTgsNSArMzk4LDUgQEAgaW5kZXggMjU4NWQxZGIzLi5hYjYxNjcyMjEgMTAwNjQ0 CiAgI2Vsc2UgLyogVVNFX01MS0VNNzY4WDI1NTE5ICovCiAgaW50CiAtLSAKLTIuNTMuMAorMi41 NS4wCiAKCmRpZmYgLS1naXQgYS8wMDQ0LW9wZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZy5w YXRjaCBiLzAwNDQtb3BlbnNzaC05LjlwMi1lcnJvcl9wcm9jZXNzaW5nLnBhdGNoCmluZGV4IDM1 ZGYzNGIuLmRjN2YxZWIgMTAwNjQ0Ci0tLSBhLzAwNDQtb3BlbnNzaC05LjlwMi1lcnJvcl9wcm9j ZXNzaW5nLnBhdGNoCisrKyBiLzAwNDQtb3BlbnNzaC05LjlwMi1lcnJvcl9wcm9jZXNzaW5nLnBh dGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSAwNGVjMGUzNGE0ZDRmODY3Y2FkMzJlZDg1NDNiMzJl NGRlNDU4ZjhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA4NzZhNzFkMmZhOWM5ZWVh NWI0MjYzMjE2NDEzZTlmMzg2NDk1NmQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTog RG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTogRnJpLCAxNiBNYXkg MjAyNSAxNDo1Mzo1NCArMDIwMAotU3ViamVjdDogW1BBVENIIDQ0LzU0XSBvcGVuc3NoLTkuOXAy LWVycm9yX3Byb2Nlc3NpbmcKK1N1YmplY3Q6IFtQQVRDSCA0NC81M10gb3BlbnNzaC05LjlwMi1l cnJvcl9wcm9jZXNzaW5nCiAKICMgaHR0cHM6Ly93d3cub3BlbndhbGwuY29tL2xpc3RzL29zcy1z ZWN1cml0eS8yMDI1LzAyLzIyLzEKIC0tLQpAQCAtOSwxMCArOSwxMCBAQCBTdWJqZWN0OiBbUEFU Q0ggNDQvNTRdIG9wZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZwogIDEgZmlsZSBjaGFuZ2Vk LCAyIGluc2VydGlvbnMoKykKIAogZGlmZiAtLWdpdCBhL3NzaC1hZ2VudC5jIGIvc3NoLWFnZW50 LmMKLWluZGV4IGM3M2FiZDFkMC4uNzc3M2E0YjA3IDEwMDY0NAoraW5kZXggMTYwNGY1NDBhLi40 YzhlMWE0ZGEgMTAwNjQ0CiAtLS0gYS9zc2gtYWdlbnQuYwogKysrIGIvc3NoLWFnZW50LmMKLUBA IC0xMzUyLDYgKzEzNTIsOCBAQCBwcm9jZXNzX2FkZF9pZGVudGl0eShTb2NrZXRFbnRyeSAqZSkK K0BAIC0xMzU5LDYgKzEzNTksOCBAQCBwcm9jZXNzX2FkZF9pZGVudGl0eShTb2NrZXRFbnRyeSAq ZSkKICAJaWYgKChyID0gc3Noa2V5X3ByaXZhdGVfZGVzZXJpYWxpemUoZS0+cmVxdWVzdCwgJmsp KSAhPSAwIHx8CiAgCSAgICBrID09IE5VTEwgfHwKICAJICAgIChyID0gc3NoYnVmX2dldF9jc3Ry aW5nKGUtPnJlcXVlc3QsICZjb21tZW50LCBOVUxMKSkgIT0gMCkgewpAQCAtMjIsNSArMjIsNSBA QCBpbmRleCBjNzNhYmQxZDAuLjc3NzNhNGIwNyAxMDA2NDQKICAJCWdvdG8gb3V0OwogIAl9CiAt LSAKLTIuNTMuMAorMi41NS4wCiAKCmRpZmYgLS1naXQgYS8wMDQ1LUlnbm9yZS1iYWQtaG9zdGtl eXMtaW4ta25vd25faG9zdHMtZmlsZS5wYXRjaCBiLzAwNDUtSWdub3JlLWJhZC1ob3N0a2V5cy1p bi1rbm93bl9ob3N0cy1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU3M2U5MjMKLS0tIC9kZXYvbnVsbAorKysgYi8wMDQ1LUlnbm9yZS1iYWQtaG9zdGtleXMt aW4ta25vd25faG9zdHMtZmlsZS5wYXRjaApAQCAtMCwwICsxLDg4IEBACitGcm9tIGU4NjRiNTRl MDc0OTE0YjFiZGMyYTIzOWQwMmI5Y2FiYzk3ZTljYTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CitGcm9tOiBab2x0YW4gRnJpZHJpY2ggPHpmcmlkcmljQHJlZGhhdC5jb20+CitEYXRlOiBNb24s IDUgTWF5IDIwMjUgMTE6NTI6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA0NS81M10gSWdub3Jl IGJhZCBob3N0a2V5cyBpbiBrbm93bl9ob3N0cyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IFpvbHRh biBGcmlkcmljaCA8emZyaWRyaWNAcmVkaGF0LmNvbT4KKworIyBodHRwczovL2dpdGh1Yi5jb20v b3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlL3B1bGwvNTY3CistLS0KKyBob3N0ZmlsZS5jIHwgMTUg KysrKysrKysrKysrKysrCisgaG9zdGZpbGUuaCB8ICAxICsKKyBzc2guYyAgICAgIHwgIDIgKysK KyAzIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2hvc3Rm aWxlLmMgYi9ob3N0ZmlsZS5jCitpbmRleCAwMzNiMjkxMDQuLjQ1MTdhYTA4MCAxMDA2NDQKKy0t LSBhL2hvc3RmaWxlLmMKKysrKyBiL2hvc3RmaWxlLmMKK0BAIC02Myw2ICs2MywxNCBAQAorICNp bmNsdWRlICJobWFjLmgiCisgI2luY2x1ZGUgInNzaGJ1Zi5oIgorIAorK3N0YXRpYyBpbnQgcmVx dWlyZWRfcnNhX3NpemUgPSBTU0hfUlNBX01JTklNVU1fTU9EVUxVU19TSVpFOworKworK3ZvaWQK Kytob3N0ZmlsZV9zZXRfbWluaW11bV9yc2Ffc2l6ZShpbnQgc2l6ZSkKKyt7CisrCXJlcXVpcmVk X3JzYV9zaXplID0gc2l6ZTsKKyt9CisrCisgLyogWFhYIGhtYWMgaXMgdG9vIGVhc3kgdG8gZGlj dGlvbmFyeSBhdHRhY2s7IHVzZSBiY3J5cHQ/ICovCisgCisgc3RhdGljIGludAorQEAgLTIzMyw2 ICsyNDEsNyBAQCByZWNvcmRfaG9zdGtleShzdHJ1Y3QgaG9zdGtleV9mb3JlYWNoX2xpbmUgKmws IHZvaWQgKl9jdHgpCisgCXN0cnVjdCBsb2FkX2NhbGxiYWNrX2N0eCAqY3R4ID0gKHN0cnVjdCBs b2FkX2NhbGxiYWNrX2N0eCAqKV9jdHg7CisgCXN0cnVjdCBob3N0a2V5cyAqaG9zdGtleXMgPSBj dHgtPmhvc3RrZXlzOworIAlzdHJ1Y3QgaG9zdGtleV9lbnRyeSAqdG1wOworKwlpbnQgciA9IDA7 CisgCisgCWlmIChsLT5zdGF0dXMgPT0gSEtGX1NUQVRVU19JTlZBTElEKSB7CisgCQkvKiBYWFgg bWFrZSB0aGlzIHZlcmJvc2UoKSBpbiB0aGUgZnV0dXJlICovCitAQCAtMjQxLDYgKzI1MCwxMiBA QCByZWNvcmRfaG9zdGtleShzdHJ1Y3QgaG9zdGtleV9mb3JlYWNoX2xpbmUgKmwsIHZvaWQgKl9j dHgpCisgCQlyZXR1cm4gMDsKKyAJfQorIAorKwlpZiAoKHIgPSBzc2hrZXlfY2hlY2tfcnNhX2xl bmd0aChsLT5rZXksIHJlcXVpcmVkX3JzYV9zaXplKSkgIT0gMCkgeworKwkJZGVidWcyX2YoIiVz OiVsZDogaWdub3JpbmcgaG9zdGtleTogJXMiLAorKwkJICAgIGwtPnBhdGgsIGwtPmxpbmVudW0s IHNzaF9lcnIocikpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJZGVidWczX2YoImZvdW5kICVz a2V5IHR5cGUgJXMgaW4gZmlsZSAlczolbHUiLAorIAkgICAgbC0+bWFya2VyID09IE1SS19OT05F ID8gIiIgOgorIAkgICAgKGwtPm1hcmtlciA9PSBNUktfQ0EgPyAiY2EgIiA6ICJyZXZva2VkICIp LAorZGlmZiAtLWdpdCBhL2hvc3RmaWxlLmggYi9ob3N0ZmlsZS5oCitpbmRleCBhMjRhNGUzMjku LjBlOWIxYTE5YSAxMDA2NDQKKy0tLSBhL2hvc3RmaWxlLmgKKysrKyBiL2hvc3RmaWxlLmgKK0BA IC0xMTksNSArMTE5LDYgQEAgaW50IGhvc3RrZXlzX2ZvcmVhY2hfZmlsZShjb25zdCBjaGFyICpw YXRoLCBGSUxFICpmLAorICAgICBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICppcCwgdV9p bnQgb3B0aW9ucywgdV9pbnQgbm90ZSk7CisgCisgdm9pZCBob3N0ZmlsZV9jcmVhdGVfdXNlcl9z c2hfZGlyKGNvbnN0IGNoYXIgKiwgaW50KTsKKyt2b2lkIGhvc3RmaWxlX3NldF9taW5pbXVtX3Jz YV9zaXplKGludCk7CisgCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3NoLmMgYi9zc2guYworaW5k ZXggMDBjMGVkZWZjLi4wMTgyY2M1NjcgMTAwNjQ0CistLS0gYS9zc2guYworKysrIGIvc3NoLmMK K0BAIC05Nyw2ICs5Nyw3IEBACisgI2luY2x1ZGUgInZlcnNpb24uaCIKKyAjaW5jbHVkZSAic3No ZXJyLmgiCisgI2luY2x1ZGUgInV0ZjguaCIKKysjaW5jbHVkZSAiaG9zdGZpbGUuaCIKKyAKKyAj aWZkZWYgRU5BQkxFX1BLQ1MxMQorICNpbmNsdWRlICJzc2gtcGtjczExLmgiCitAQCAtMTM2MSw2 ICsxMzYyLDcgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKKyAJCQlvcHRpb25zLnVwZGF0ZV9o b3N0a2V5cyA9IDA7CisgCQl9CisgCX0KKysJaG9zdGZpbGVfc2V0X21pbmltdW1fcnNhX3NpemUo b3B0aW9ucy5yZXF1aXJlZF9yc2Ffc2l6ZSk7CisgCWlmIChvcHRpb25zLmNvbm5lY3Rpb25fYXR0 ZW1wdHMgPD0gMCkKKyAJCWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiBDb25uZWN0aW9uQXR0ZW1w dHMiKTsKKyAKKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQgYS8wMDQ1LVByb3ZpZGUtYmV0dGVy LWVycm9yLWZvci1ub24tc3VwcG9ydGVkLXByaXZhdGUta2V5cy5wYXRjaCBiLzAwNDUtUHJvdmlk ZS1iZXR0ZXItZXJyb3ItZm9yLW5vbi1zdXBwb3J0ZWQtcHJpdmF0ZS1rZXlzLnBhdGNoCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjBjNzFlLi4wMDAwMDAwCi0tLSBhLzAwNDUtUHJv dmlkZS1iZXR0ZXItZXJyb3ItZm9yLW5vbi1zdXBwb3J0ZWQtcHJpdmF0ZS1rZXlzLnBhdGNoCisr KyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRnJvbSAxZDU5YmIxZjY1OGJhYjhkZTkzMWQx MTU5NTlmY2IwZmU5M2QyN2ZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogWm9sdGFu IEZyaWRyaWNoIDx6ZnJpZHJpY0ByZWRoYXQuY29tPgotRGF0ZTogV2VkLCAxNiBBcHIgMjAyNSAx NToxMTo1OSArMDIwMAotU3ViamVjdDogW1BBVENIIDQ1LzU0XSBQcm92aWRlIGJldHRlciBlcnJv ciBmb3Igbm9uLXN1cHBvcnRlZCBwcml2YXRlIGtleXMKLQotU2lnbmVkLW9mZi1ieTogWm9sdGFu IEZyaWRyaWNoIDx6ZnJpZHJpY0ByZWRoYXQuY29tPgotCi0jIGh0dHBzOi8vZ2l0aHViLmNvbS9v cGVuc3NoL29wZW5zc2gtcG9ydGFibGUvcHVsbC81NjQKLS0tLQotIHNzaGtleS5jIHwgMyArKysK LSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9zc2hrZXku YyBiL3NzaGtleS5jCi1pbmRleCA4MmU1NTUwOWQuLjUyMjVlYWJmMiAxMDA2NDQKLS0tLSBhL3Nz aGtleS5jCi0rKysgYi9zc2hrZXkuYwotQEAgLTM1NTQsNiArMzU1NCw5IEBAIHRyYW5zbGF0ZV9s aWJjcnlwdG9fZXJyb3IodW5zaWduZWQgbG9uZyBwZW1fZXJyKQotIAkJCXJldHVybiBTU0hfRVJS X0xJQkNSWVBUT19FUlJPUjsKLSAJCX0KLSAJY2FzZSBFUlJfTElCX0FTTjE6Ci0rI2lmZGVmIEVS Ul9MSUJfT1NTTF9ERUNPREVSCi0rCWNhc2UgRVJSX0xJQl9PU1NMX0RFQ09ERVI6Ci0rI2VuZGlm Ci0gCQlyZXR1cm4gU1NIX0VSUl9JTlZBTElEX0ZPUk1BVDsKLSAJfQotIAlyZXR1cm4gU1NIX0VS Ul9MSUJDUllQVE9fRVJST1I7Ci0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvMDA0Ni1JZ25v cmUtYmFkLWhvc3RrZXlzLWluLWtub3duX2hvc3RzLWZpbGUucGF0Y2ggYi8wMDQ2LUlnbm9yZS1i YWQtaG9zdGtleXMtaW4ta25vd25faG9zdHMtZmlsZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMjQ4NWU5NS4uMDAwMDAwMAotLS0gYS8wMDQ2LUlnbm9yZS1iYWQtaG9zdGtl eXMtaW4ta25vd25faG9zdHMtZmlsZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAg QEAKLUZyb20gZGVmNDQyMTQ2YmJmZTExMTZjYTUxYzBiODFhMmVlYmMxM2E4NmVlYiBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFpvbHRhbiBGcmlkcmljaCA8emZyaWRyaWNAcmVkaGF0 LmNvbT4KLURhdGU6IE1vbiwgNSBNYXkgMjAyNSAxMTo1MjoyNSArMDIwMAotU3ViamVjdDogW1BB VENIIDQ2LzU0XSBJZ25vcmUgYmFkIGhvc3RrZXlzIGluIGtub3duX2hvc3RzIGZpbGUKLQotU2ln bmVkLW9mZi1ieTogWm9sdGFuIEZyaWRyaWNoIDx6ZnJpZHJpY0ByZWRoYXQuY29tPgotCi0jIGh0 dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5zc2gtcG9ydGFibGUvcHVsbC81NjcKLS0tLQot IGhvc3RmaWxlLmMgfCAxNSArKysrKysrKysrKysrKysKLSBob3N0ZmlsZS5oIHwgIDEgKwotIHNz aC5jICAgICAgfCAgMiArKwotIDMgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKQotCi1k aWZmIC0tZ2l0IGEvaG9zdGZpbGUuYyBiL2hvc3RmaWxlLmMKLWluZGV4IDAzM2IyOTEwNC4uNDUx N2FhMDgwIDEwMDY0NAotLS0tIGEvaG9zdGZpbGUuYwotKysrIGIvaG9zdGZpbGUuYwotQEAgLTYz LDYgKzYzLDE0IEBACi0gI2luY2x1ZGUgImhtYWMuaCIKLSAjaW5jbHVkZSAic3NoYnVmLmgiCi0g Ci0rc3RhdGljIGludCByZXF1aXJlZF9yc2Ffc2l6ZSA9IFNTSF9SU0FfTUlOSU1VTV9NT0RVTFVT X1NJWkU7Ci0rCi0rdm9pZAotK2hvc3RmaWxlX3NldF9taW5pbXVtX3JzYV9zaXplKGludCBzaXpl KQotK3sKLSsJcmVxdWlyZWRfcnNhX3NpemUgPSBzaXplOwotK30KLSsKLSAvKiBYWFggaG1hYyBp cyB0b28gZWFzeSB0byBkaWN0aW9uYXJ5IGF0dGFjazsgdXNlIGJjcnlwdD8gKi8KLSAKLSBzdGF0 aWMgaW50Ci1AQCAtMjMzLDYgKzI0MSw3IEBAIHJlY29yZF9ob3N0a2V5KHN0cnVjdCBob3N0a2V5 X2ZvcmVhY2hfbGluZSAqbCwgdm9pZCAqX2N0eCkKLSAJc3RydWN0IGxvYWRfY2FsbGJhY2tfY3R4 ICpjdHggPSAoc3RydWN0IGxvYWRfY2FsbGJhY2tfY3R4ICopX2N0eDsKLSAJc3RydWN0IGhvc3Rr ZXlzICpob3N0a2V5cyA9IGN0eC0+aG9zdGtleXM7Ci0gCXN0cnVjdCBob3N0a2V5X2VudHJ5ICp0 bXA7Ci0rCWludCByID0gMDsKLSAKLSAJaWYgKGwtPnN0YXR1cyA9PSBIS0ZfU1RBVFVTX0lOVkFM SUQpIHsKLSAJCS8qIFhYWCBtYWtlIHRoaXMgdmVyYm9zZSgpIGluIHRoZSBmdXR1cmUgKi8KLUBA IC0yNDEsNiArMjUwLDEyIEBAIHJlY29yZF9ob3N0a2V5KHN0cnVjdCBob3N0a2V5X2ZvcmVhY2hf bGluZSAqbCwgdm9pZCAqX2N0eCkKLSAJCXJldHVybiAwOwotIAl9Ci0gCi0rCWlmICgociA9IHNz aGtleV9jaGVja19yc2FfbGVuZ3RoKGwtPmtleSwgcmVxdWlyZWRfcnNhX3NpemUpKSAhPSAwKSB7 Ci0rCQlkZWJ1ZzJfZigiJXM6JWxkOiBpZ25vcmluZyBob3N0a2V5OiAlcyIsCi0rCQkgICAgbC0+ cGF0aCwgbC0+bGluZW51bSwgc3NoX2VycihyKSk7Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotIAlk ZWJ1ZzNfZigiZm91bmQgJXNrZXkgdHlwZSAlcyBpbiBmaWxlICVzOiVsdSIsCi0gCSAgICBsLT5t YXJrZXIgPT0gTVJLX05PTkUgPyAiIiA6Ci0gCSAgICAobC0+bWFya2VyID09IE1SS19DQSA/ICJj YSAiIDogInJldm9rZWQgIiksCi1kaWZmIC0tZ2l0IGEvaG9zdGZpbGUuaCBiL2hvc3RmaWxlLmgK LWluZGV4IGEyNGE0ZTMyOS4uMGU5YjFhMTlhIDEwMDY0NAotLS0tIGEvaG9zdGZpbGUuaAotKysr IGIvaG9zdGZpbGUuaAotQEAgLTExOSw1ICsxMTksNiBAQCBpbnQgaG9zdGtleXNfZm9yZWFjaF9m aWxlKGNvbnN0IGNoYXIgKnBhdGgsIEZJTEUgKmYsCi0gICAgIGNvbnN0IGNoYXIgKmhvc3QsIGNv bnN0IGNoYXIgKmlwLCB1X2ludCBvcHRpb25zLCB1X2ludCBub3RlKTsKLSAKLSB2b2lkIGhvc3Rm aWxlX2NyZWF0ZV91c2VyX3NzaF9kaXIoY29uc3QgY2hhciAqLCBpbnQpOwotK3ZvaWQgaG9zdGZp bGVfc2V0X21pbmltdW1fcnNhX3NpemUoaW50KTsKLSAKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9z c2guYyBiL3NzaC5jCi1pbmRleCBlN2JkYmEzMjcuLjRhMTdjMGE3ZCAxMDA2NDQKLS0tLSBhL3Nz aC5jCi0rKysgYi9zc2guYwotQEAgLTk3LDYgKzk3LDcgQEAKLSAjaW5jbHVkZSAidmVyc2lvbi5o IgotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAidXRmOC5oIgotKyNpbmNsdWRlICJo b3N0ZmlsZS5oIgotIAotICNpZmRlZiBFTkFCTEVfUEtDUzExCi0gI2luY2x1ZGUgInNzaC1wa2Nz MTEuaCIKLUBAIC0xMzc1LDYgKzEzNzYsNyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQotIAkJ CW9wdGlvbnMudXBkYXRlX2hvc3RrZXlzID0gMDsKLSAJCX0KLSAJfQotKwlob3N0ZmlsZV9zZXRf bWluaW11bV9yc2Ffc2l6ZShvcHRpb25zLnJlcXVpcmVkX3JzYV9zaXplKTsKLSAJaWYgKG9wdGlv bnMuY29ubmVjdGlvbl9hdHRlbXB0cyA8PSAwKQotIAkJZmF0YWwoIkludmFsaWQgbnVtYmVyIG9m IENvbm5lY3Rpb25BdHRlbXB0cyIpOwotIAotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAw NDYtc3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdTU0FQSS5wYXRjaCBiLzAw NDYtc3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdTU0FQSS5wYXRjaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQ0NjBiCi0tLSAvZGV2L251bGwKKysr IGIvMDA0Ni1zdXBwb3J0LWF1dGhlbnRpY2F0aW9uLWluZGljYXRvcnMtaW4tR1NTQVBJLnBhdGNo CkBAIC0wLDAgKzEsNDU4IEBACitGcm9tIDUzNDhmZjRmNGM1OWRhYzY3N2I4MzQ4YjEyMTNjNmVm MWU1MzBlMzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tp eSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDEyIEFwciAyMDI2IDEyOjIzOjUxICsw MjAwCitTdWJqZWN0OiBbUEFUQ0ggNDYvNTNdIHN1cHBvcnQgYXV0aGVudGljYXRpb24gaW5kaWNh dG9ycyBpbiBHU1NBUEkKKworaHR0cHM6Ly9naXRodWIuY29tL29wZW5zc2gvb3BlbnNzaC1wb3J0 YWJsZS9wdWxsLzUwMAorCitDby1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVw bHlAYW50aHJvcGljLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICB8ICAgMSArCisgZ3NzLXNl cnYta3JiNS5jIHwgIDg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCisg Z3NzLXNlcnYuYyAgICAgIHwgMTEyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLQorIHNlcnZjb25mLmMgICAgICB8ICAxMSArKysrKworIHNlcnZjb25mLmgg ICAgICB8ICAgNiArKy0KKyBzc2gtZ3NzLmggICAgICAgfCAgIDcgKysrCisgc3NoZF9jb25maWcu NSAgIHwgIDQ2ICsrKysrKysrKysrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCAyNTggaW5z ZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMg Yi9jb25maWd1cmUuYWMKK2luZGV4IDM5NGFjYzNkOC4uZDYyNzQzMjhiIDEwMDY0NAorLS0tIGEv Y29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MDU5LDYgKzUwNTksNyBAQCBB Q19BUkdfV0lUSChba2VyYmVyb3M1XSwKKyAJCUFDX0NIRUNLX0hFQURFUlMoW2dzc2FwaS5oIGdz c2FwaS9nc3NhcGkuaF0pCisgCQlBQ19DSEVDS19IRUFERVJTKFtnc3NhcGlfa3JiNS5oIGdzc2Fw aS9nc3NhcGlfa3JiNS5oXSkKKyAJCUFDX0NIRUNLX0hFQURFUlMoW2dzc2FwaV9nZW5lcmljLmgg Z3NzYXBpL2dzc2FwaV9nZW5lcmljLmhdKQorKwkJQUNfQ0hFQ0tfSEVBREVSUyhbZ3NzYXBpX2V4 dC5oIGdzc2FwaS9nc3NhcGlfZXh0LmhdKQorIAorIAkJQUNfU0VBUkNIX0xJQlMoW2tfaGFzYWZz XSwgW2thZnNdLCBbQUNfREVGSU5FKFtVU0VfQUZTXSwgWzFdLAorIAkJCVtEZWZpbmUgdGhpcyBp ZiB5b3Ugd2FudCB0byB1c2UgbGlia2FmcycgQUZTIHN1cHBvcnRdKV0pCitkaWZmIC0tZ2l0IGEv Z3NzLXNlcnYta3JiNS5jIGIvZ3NzLXNlcnYta3JiNS5jCitpbmRleCA3MjM1MDk0MDkuLmZjN2Nh YmMwOSAxMDA2NDQKKy0tLSBhL2dzcy1zZXJ2LWtyYjUuYworKysrIGIvZ3NzLXNlcnYta3JiNS5j CitAQCAtNDMsNiArNDMsNyBAQAorICNpbmNsdWRlICJsb2cuaCIKKyAjaW5jbHVkZSAibWlzYy5o IgorICNpbmNsdWRlICJzZXJ2Y29uZi5oIgorKyNpbmNsdWRlICJtYXRjaC5oIgorIAorICNpbmNs dWRlICJzc2gtZ3NzLmgiCisgCitAQCAtODcsNiArODgsMzMgQEAgc3NoX2dzc2FwaV9rcmI1X2lu aXQodm9pZCkKKyAJcmV0dXJuIDE7CisgfQorIAorKy8qIENoZWNrIGlmIGFueSBvZiB0aGUgaW5k aWNhdG9ycyBpbiB0aGUgS2VyYmVyb3MgdGlja2V0IG1hdGNoCisrICogb25lIG9mIGluZGljYXRv cnMgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZC9kZW5pZWQgcnVsZXMuCisrICogSW4gY2FzZSBvZiB0 aGUgbWF0Y2gsIGFwcGx5IHRoZSBkZWNpc2lvbiBmcm9tIHRoZSBydWxlLgorKyAqIEluIGNhc2Ug b2Ygbm8gaW5kaWNhdG9yIGZyb20gdGhlIHRpY2tldCBtYXRjaGluZyB0aGUgcnVsZSwgZGVueQor KyAqLworKworK3N0YXRpYyBpbnQKKytzc2hfZ3NzYXBpX2NoZWNrX2luZGljYXRvcnMoc3NoX2dz c2FwaV9jbGllbnQgKmNsaWVudCwgaW50ICptYXRjaGVkKQorK3sKKysJaW50IHJldDsKKysJdV9p bnQgaTsKKysJKm1hdGNoZWQgPSAtMTsKKysKKysJLyogQ2hlY2sgaW5kaWNhdG9ycyAqLworKwlm b3IgKGkgPSAwOyBjbGllbnQtPmluZGljYXRvcnNbaV0gIT0gTlVMTDsgaSsrKSB7CisrCQlyZXQg PSBtYXRjaF9wYXR0ZXJuX2xpc3QoY2xpZW50LT5pbmRpY2F0b3JzW2ldLAorKwkJCQkJIG9wdGlv bnMuZ3NzX2luZGljYXRvcnMsIDEpOworKwkJLyogbmVnYXRpdmUgb3IgcG9zaXRpdmUgbWF0Y2gg Ki8KKysJCWlmIChyZXQgIT0gMCkgeworKwkJCSptYXRjaGVkID0gaTsKKysJCQlyZXR1cm4gcmV0 OworKwkJfQorKwl9CisrCS8qIE5vIHJ1bGUgbWF0Y2hlZCAqLworKwlyZXR1cm4gMDsKKyt9Cisr CisgLyogQ2hlY2sgaWYgdGhpcyB1c2VyIGlzIE9LIHRvIGxvZ2luLiBUaGlzIG9ubHkgd29ya3Mg d2l0aCBrcmI1IC0gb3RoZXIKKyAgKiBHU1NBUEkgbWVjaGFuaXNtcyB3aWxsIG5lZWQgdGhlaXIg b3duLgorICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBpcyBPSyB0byBsb2cgaW4sIG90aGVy d2lzZSByZXR1cm5zIDAKK0BAIC0xOTMsMTUgKzIyMSwxNSBAQCBzdGF0aWMgaW50Cisgc3NoX2dz c2FwaV9rcmI1X3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICpuYW1lKQor IHsKKyAJa3JiNV9wcmluY2lwYWwgcHJpbmM7CistCWludCByZXR2YWw7CisrCWludCByZXR2YWws IG1hdGNoZWQsIHN1Y2Nlc3M7CisgCWNvbnN0IGNoYXIgKmVycm1zZzsKKyAJaW50IGs1bG9naW5f ZXhpc3RzOworIAorIAlpZiAoc3NoX2dzc2FwaV9rcmI1X2luaXQoKSA9PSAwKQorIAkJcmV0dXJu IDA7CisgCistCWlmICgocmV0dmFsID0ga3JiNV9wYXJzZV9uYW1lKGtyYl9jb250ZXh0LCBjbGll bnQtPmV4cG9ydGVkbmFtZS52YWx1ZSwKKy0JICAgICZwcmluYykpKSB7CisrCXJldHZhbCA9IGty YjVfcGFyc2VfbmFtZShrcmJfY29udGV4dCwgY2xpZW50LT5leHBvcnRlZG5hbWUudmFsdWUsICZw cmluYyk7CisrCWlmIChyZXR2YWwpIHsKKyAJCWVycm1zZyA9IGtyYjVfZ2V0X2Vycm9yX21lc3Nh Z2Uoa3JiX2NvbnRleHQsIHJldHZhbCk7CisgCQlsb2dpdCgia3JiNV9wYXJzZV9uYW1lKCk6ICUu MTAwcyIsIGVycm1zZyk7CisgCQlrcmI1X2ZyZWVfZXJyb3JfbWVzc2FnZShrcmJfY29udGV4dCwg ZXJybXNnKTsKK0BAIC0yMTYsMTcgKzI0NCw2MCBAQCBzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rKHNz aF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpCisgCWlmIChrNWxvZ2luX2V4aXN0 cyAmJgorIAkgICAgc3NoX2tyYjVfa3VzZXJvayhrcmJfY29udGV4dCwgcHJpbmMsIG5hbWUsIGs1 bG9naW5fZXhpc3RzKSkgeworIAkJcmV0dmFsID0gMTsKKy0JCWxvZ2l0KCJBdXRob3JpemVkIHRv ICVzLCBrcmI1IHByaW5jaXBhbCAlcyAoa3JiNV9rdXNlcm9rKSIsCistCQkgICAgbmFtZSwgKGNo YXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKKysJCWVycm1zZyA9ICJrcmI1X2t1c2Vy b2siOworIAl9IGVsc2UgaWYgKHNzaF9nc3NhcGlfa3JiNV9jbWRvayhwcmluYywgY2xpZW50LT5l eHBvcnRlZG5hbWUudmFsdWUsCisgCQluYW1lLCBrNWxvZ2luX2V4aXN0cykpIHsKKyAJCXJldHZh bCA9IDE7CistCQlsb2dpdCgiQXV0aG9yaXplZCB0byAlcywga3JiNSBwcmluY2lwYWwgJXMgIgor LQkJICAgICIoc3NoX2dzc2FwaV9rcmI1X2NtZG9rKSIsCistCQkgICAgbmFtZSwgKGNoYXIgKilj bGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKKy0JfSBlbHNlCisrCQllcnJtc2cgPSAic3NoX2dz c2FwaV9rcmI1X2NtZG9rIjsKKysJfSBlbHNlIHsKKyAJCXJldHZhbCA9IDA7CisrCQlnb3RvIG91 dDsKKysJfQorIAorKwkvKiBBdCB0aGlzIHBvaW50IHdlIGFyZSBnb29kIGlmIG5vIGluZGljYXRv cnMgd2VyZSBkZWZpbmVkICovCisrCWlmIChvcHRpb25zLmdzc19pbmRpY2F0b3JzID09IE5VTEwp IHsKKysJCXJldHZhbCA9IDE7CisrCQlnb3RvIG91dDsKKysJfQorKworKwkvKiBBdCB0aGlzIHBv aW50IHdlIGhhdmUgaW5kaWNhdG9ycyBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uLAorKwkg KiBpZiBjbGllbnR0IGRpZCBub3QgcHJvdmlkZSBhbnkgaW5kaWNhdG9ycywgd2UgcmVqZWN0ICov CisrCWlmICghY2xpZW50LT5pbmRpY2F0b3JzKSB7CisrCQlyZXR2YWwgPSAwOworKwkJbG9naXQo IkdTU0FQSSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGVuZm9yY2VkICIKKysJCSAgICAgICJi dXQgaW5kaWNhdG9ycyBub3QgcHJvdmlkZWQgYnkgdGhlIGNsaWVudC4gIgorKwkJICAgICAgImty YjUgcHJpbmNpcGFsICVzIGRlbmllZCIsCisrCQkgICAgICAoY2hhciAqKWNsaWVudC0+ZGlzcGxh eW5hbWUudmFsdWUpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJLyogQXQgdGhpcyBwb2ludCB0 aGUgY29uZmlndXJhdGlvbiBlbmZvcmNlcyBwcmVzZW5jZSBvZiBpbmRpY2F0b3JzCisrCSAqIGNo ZWNrIHRoZSBtYXRjaCAqLworKwltYXRjaGVkID0gLTE7CisrCXN1Y2Nlc3MgPSBzc2hfZ3NzYXBp X2NoZWNrX2luZGljYXRvcnMoY2xpZW50LCAmbWF0Y2hlZCk7CisrCisrCXN3aXRjaCAoc3VjY2Vz cykgeworKwljYXNlIDE6CisrCQlsb2dpdCgiUHJvdmlkZWQgaW5kaWNhdG9yICVzIGFsbG93ZWQg YnkgdGhlIGNvbmZpZ3VyYXRpb24iLAorKwkJICAgICAgY2xpZW50LT5pbmRpY2F0b3JzW21hdGNo ZWRdKTsKKysJCXJldHZhbCA9IDE7CisrCQlicmVhazsKKysJY2FzZSAtMToKKysJCWxvZ2l0KCJQ cm92aWRlZCBpbmRpY2F0b3IgJXMgcmVqZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24iLAorKwkJ ICAgICAgY2xpZW50LT5pbmRpY2F0b3JzW21hdGNoZWRdKTsKKysJCXJldHZhbCA9IDA7CisrCQli cmVhazsKKysJZGVmYXVsdDoKKysJCWxvZ2l0KCJQcm92aWRlZCBpbmRpY2F0b3JzIGRvIG5vdCBt YXRjaCB0aGUgY29uZmlndXJhdGlvbiIpOworKwkJcmV0dmFsID0gMDsKKysJCWJyZWFrOworKwl9 CisrCisrb3V0OgorKwlpZiAocmV0dmFsID09IDEpIHsKKysJCWxvZ2l0KCJBdXRob3JpemVkIHRv ICVzLCBrcmI1IHByaW5jaXBhbCAlcyAoJXMpIiwKKysJCSAgICAgIG5hbWUsIChjaGFyICopY2xp ZW50LT5kaXNwbGF5bmFtZS52YWx1ZSwgZXJybXNnKTsKKysJfQorIAlrcmI1X2ZyZWVfcHJpbmNp cGFsKGtyYl9jb250ZXh0LCBwcmluYyk7CisgCXJldHVybiByZXR2YWw7CisgfQorZGlmZiAtLWdp dCBhL2dzcy1zZXJ2LmMgYi9nc3Mtc2Vydi5jCitpbmRleCA2ZWI3ZDIxNjMuLjIzN2EzYzQwYSAx MDA2NDQKKy0tLSBhL2dzcy1zZXJ2LmMKKysrKyBiL2dzcy1zZXJ2LmMKK0BAIC01NSw3ICs1NSw3 IEBAIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgCisgc3RhdGljIHNzaF9nc3NhcGlf Y2xpZW50IGdzc2FwaV9jbGllbnQgPQorICAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0Nf RU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFMLAorLSAgICBHU1NfQ19OT19OQU1FLCBO VUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDB9OworKyAgICBHU1NfQ19O T19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5VTEx9 OworIAorIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfbnVsbF9tZWNoID0KKyAgICAgeyBOVUxMLCBO VUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworQEAgLTI5Nyw2 ICsyOTcsOTkgQEAgc3NoX2dzc2FwaV9wYXJzZV9lbmFtZShHc3NjdHh0ICpjdHgsIGdzc19idWZm ZXJfdCBlbmFtZSwgZ3NzX2J1ZmZlcl90IG5hbWUpCisgCXJldHVybiBHU1NfU19DT01QTEVURTsK KyB9CisgCisrCisrLyogRXh0cmFjdCBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGZyb20gdGhl IEtlcmJlcm9zIHRpY2tldC4gQXV0aGVudGljYXRpb24KKysgKiBpbmRpY2F0b3JzIGFyZSBHU1NB UEkgbmFtZSBhdHRyaWJ1dGVzIGZvciB0aGUgbmFtZSAiYXV0aC1pbmRpY2F0b3JzIi4KKysgKiBN dWx0aXBsZSBpbmRpY2F0b3JzIG1pZ2h0IGJlIHByZXNlbnQgaW4gdGhlIHRpY2tldC4KKysgKiBF YWNoIGluZGljYXRvciBpcyBhbiB1dGY4IHN0cmluZy4gKi8KKysKKysjZGVmaW5lIEFVVEhfSU5E SUNBVE9SU19UQUcgImF1dGgtaW5kaWNhdG9ycyIKKysjZGVmaW5lIFNTSF9HU1NBUElfTUFYX0lO RElDQVRPUlMgNjQKKysKKysvKiBQcml2aWxlZ2VkIChjYWxsZWQgZnJvbSBhY2NlcHRfc2VjdXJl X2N0eCkgKi8KKytzdGF0aWMgT01fdWludDMyCisrc3NoX2dzc2FwaV9nZXRpbmRpY2F0b3JzKEdz c2N0eHQgKmN0eCwgZ3NzX25hbWVfdCBnc3NfbmFtZSwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVu dCkKKyt7CisrCWdzc19idWZmZXJfc2V0X3QgYXR0cnMgPSBHU1NfQ19OT19CVUZGRVJfU0VUOwor Kwlnc3NfYnVmZmVyX2Rlc2MgdmFsdWUgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCWdzc19idWZm ZXJfZGVzYyBkaXNwbGF5X3ZhbHVlID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwlpbnQgaXNfbWVj aG5hbWUsIGF1dGhlbnRpY2F0ZWQsIGNvbXBsZXRlLCBtb3JlOworKwlzaXplX3QgY291bnQsIGk7 CisrCisrCS8qIGFsd2F5cyBpbml0aWFsaXplIGNsaWVudC0+aW5kaWNhdG9ycyAqLworKwljbGll bnQtPmluZGljYXRvcnMgPSBOVUxMOworKworKwljdHgtPm1ham9yID0gZ3NzX2lucXVpcmVfbmFt ZSgmY3R4LT5taW5vciwgZ3NzX25hbWUsCisrCQkJCSAgICAgICZpc19tZWNobmFtZSwgTlVMTCwg JmF0dHJzKTsKKysJaWYgKGN0eC0+bWFqb3IgIT0gR1NTX1NfQ09NUExFVEUpCisrCQlyZXR1cm4g Y3R4LT5tYWpvcjsKKysKKysJaWYgKGF0dHJzID09IEdTU19DX05PX0JVRkZFUl9TRVQpIHsKKysJ CS8qIG5vIGluZGljYXRvcnMgaW4gdGhlIHRpY2tldCAqLworKwkJcmV0dXJuIEdTU19TX0NPTVBM RVRFOworKwl9CisrCisrCS8qIGNsaWVudC0+aW5kaWNhdG9ycyBpcyBOVUxMIHRlcm1pbmF0ZWQg Ki8KKysJY291bnQgPSAwOworKwljbGllbnQtPmluZGljYXRvcnMgPSB4Y2FsbG9jKGNvdW50ICsg MSwgc2l6ZW9mKGNoYXIgKikpOworKworKwlmb3IgKGkgPSAwOyBpIDwgYXR0cnMtPmNvdW50OyBp KyspIHsKKysJCWF1dGhlbnRpY2F0ZWQgPSAwOworKwkJY29tcGxldGUgPSAwOworKwkJbW9yZSA9 IC0xOworKworKwkJLyogc2tpcCBhbnl0aGluZyBidXQgYXV0aC1pbmRpY2F0b3JzICovCisrCQlp ZiAoKChzaXplb2YoQVVUSF9JTkRJQ0FUT1JTX1RBRykgLSAxKSAhPSBhdHRycy0+ZWxlbWVudHNb aV0ubGVuZ3RoKSB8fAorKwkJICAgIG1lbWNtcChBVVRIX0lORElDQVRPUlNfVEFHLCBhdHRycy0+ ZWxlbWVudHNbaV0udmFsdWUsCisrCQkJICAgc2l6ZW9mKEFVVEhfSU5ESUNBVE9SU19UQUcpIC0g MSkgIT0gMCkKKysJCQljb250aW51ZTsKKysKKysJCS8qIHJldHJpZXZlIGFsbCBpbmRpY2F0b3Jz ICovCisrCQl3aGlsZSAobW9yZSAhPSAwKSB7CisrCQkJdmFsdWUudmFsdWUgPSBOVUxMOworKwkJ CWRpc3BsYXlfdmFsdWUudmFsdWUgPSBOVUxMOworKworKwkJCWN0eC0+bWFqb3IgPSBnc3NfZ2V0 X25hbWVfYXR0cmlidXRlKCZjdHgtPm1pbm9yLCBnc3NfbmFtZSwKKysJCQkJCQkJICAgICZhdHRy cy0+ZWxlbWVudHNbaV0sCisrCQkJCQkJCSAgICAmYXV0aGVudGljYXRlZCwgJmNvbXBsZXRlLAor KwkJCQkJCQkgICAgJnZhbHVlLCAmZGlzcGxheV92YWx1ZSwgJm1vcmUpOworKwkJCWlmIChjdHgt Pm1ham9yICE9IEdTU19TX0NPTVBMRVRFKQorKwkJCQlnb3RvIG91dDsKKysKKysJCQlpZiAodmFs dWUudmFsdWUgPT0gTlVMTCB8fCAhYXV0aGVudGljYXRlZCkKKysJCQkJY29udGludWU7CisrCisr CQkJaWYgKGNvdW50ID49IFNTSF9HU1NBUElfTUFYX0lORElDQVRPUlMpIHsKKysJCQkJbG9naXQo InNzaF9nc3NhcGlfZ2V0aW5kaWNhdG9yczoiCisrCQkJCSAgICAgICIgdG9vIG1hbnkgaW5kaWNh dG9ycywgdHJ1bmNhdGluZyBhdCAlZCIsCisrCQkJCSAgICAgIFNTSF9HU1NBUElfTUFYX0lORElD QVRPUlMpOworKwkJCQlnb3RvIG91dDsKKysJCQl9CisrCisrCQkJY2xpZW50LT5pbmRpY2F0b3Jz W2NvdW50XSA9IHhtYWxsb2ModmFsdWUubGVuZ3RoICsgMSk7CisrCQkJbWVtY3B5KGNsaWVudC0+ aW5kaWNhdG9yc1tjb3VudF0sIHZhbHVlLnZhbHVlLCB2YWx1ZS5sZW5ndGgpOworKwkJCWNsaWVu dC0+aW5kaWNhdG9yc1tjb3VudF1bdmFsdWUubGVuZ3RoXSA9ICdcMCc7CisrCQkJY291bnQrKzsK KysKKysJCQkvKiBhZGQgTlVMTCB0ZXJtaW5hdG9yICovCisrCQkJY2xpZW50LT5pbmRpY2F0b3Jz ID0geHJlY2FsbG9jYXJyYXkoY2xpZW50LT5pbmRpY2F0b3JzLCBjb3VudCwKKysJCQkJCQkJICAg IGNvdW50ICsgMSwgc2l6ZW9mKGNoYXIgKikpOworKwkJfQorKwl9CisrCisrb3V0OgorKwlpZiAo Y3R4LT5tYWpvciAhPSBHU1NfU19DT01QTEVURSAmJiBjbGllbnQtPmluZGljYXRvcnMgIT0gTlVM TCkgeworKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisrCQkJZnJlZShjbGllbnQtPmlu ZGljYXRvcnNbaV0pOworKwkJZnJlZShjbGllbnQtPmluZGljYXRvcnMpOworKwkJY2xpZW50LT5p bmRpY2F0b3JzID0gTlVMTDsKKysJfQorKwlnc3NfcmVsZWFzZV9idWZmZXIoJmN0eC0+bWlub3Is ICZ2YWx1ZSk7CisrCWdzc19yZWxlYXNlX2J1ZmZlcigmY3R4LT5taW5vciwgJmRpc3BsYXlfdmFs dWUpOworKwlnc3NfcmVsZWFzZV9idWZmZXJfc2V0KCZjdHgtPm1pbm9yLCAmYXR0cnMpOworKwly ZXR1cm4gY3R4LT5tYWpvcjsKKyt9CisrCisgLyogRXh0cmFjdCB0aGUgY2xpZW50IGRldGFpbHMg ZnJvbSBhIGdpdmVuIGNvbnRleHQuIFRoaXMgY2FuIG9ubHkgcmVsaWFibHkKKyAgKiBiZSBjYWxs ZWQgb25jZSBmb3IgYSBjb250ZXh0ICovCisgCitAQCAtMzg2LDYgKzQ3OSwxMiBAQCBzc2hfZ3Nz YXBpX2dldGNsaWVudChHc3NjdHh0ICpjdHgsIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCisg CX0KKyAKKyAJZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmZW5hbWUpOworKwkvKiBS ZXRyaWV2ZSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzLCBpZiB0aGV5IGV4aXN0ICovCisrCWlm ICgoY3R4LT5tYWpvciA9IHNzaF9nc3NhcGlfZ2V0aW5kaWNhdG9ycyhjdHgsCisrCSAgICBjdHgt PmNsaWVudCwgY2xpZW50KSkpIHsKKysJCXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKKysJCXJldHVy biAoY3R4LT5tYWpvcik7CisrCX0KKyAKKyAJLyogV2UgY2FuJ3QgY29weSB0aGlzIHN0cnVjdHVy ZSwgc28gd2UganVzdCBtb3ZlIHRoZSBwb2ludGVyIHRvIGl0ICovCisgCWNsaWVudC0+Y3JlZHMg PSBjdHgtPmNsaWVudF9jcmVkczsKK0BAIC00NTMsNiArNTUyLDcgQEAgaW50Cisgc3NoX2dzc2Fw aV91c2Vyb2soY2hhciAqdXNlciwgc3RydWN0IHBhc3N3ZCAqcHcsIGludCBrZXgpCisgeworIAlP TV91aW50MzIgbG1pbjsKKysJc2l6ZV90IGk7CisgCisgCSh2b2lkKSBrZXg7IC8qIHVzZWQgaW4g cHJpdmlsZWdlIHNlcGFyYXRpb24gKi8KKyAKK0BAIC00NzEsOCArNTcxLDE0IEBAIHNzaF9nc3Nh cGlfdXNlcm9rKGNoYXIgKnVzZXIsIHN0cnVjdCBwYXNzd2QgKnB3LCBpbnQga2V4KQorIAkJCWdz c19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUpOworIAkJ CWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2FwaV9jbGllbnQuZXhwb3J0ZWRuYW1lKTsK KyAJCQlnc3NfcmVsZWFzZV9jcmVkKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5jcmVkcyk7CistCQkJ ZXhwbGljaXRfYnplcm8oJmdzc2FwaV9jbGllbnQsCistCQkJICAgIHNpemVvZihzc2hfZ3NzYXBp X2NsaWVudCkpOworKworKwkJCWlmIChnc3NhcGlfY2xpZW50LmluZGljYXRvcnMgIT0gTlVMTCkg eworKwkJCQlmb3IgKGkgPSAwOyBnc3NhcGlfY2xpZW50LmluZGljYXRvcnNbaV0gIT0gTlVMTDsg aSsrKQorKwkJCQkJZnJlZShnc3NhcGlfY2xpZW50LmluZGljYXRvcnNbaV0pOworKwkJCQlmcmVl KGdzc2FwaV9jbGllbnQuaW5kaWNhdG9ycyk7CisrCQkJfQorKworKwkJCWV4cGxpY2l0X2J6ZXJv KCZnc3NhcGlfY2xpZW50LCBzaXplb2Yoc3NoX2dzc2FwaV9jbGllbnQpKTsKKyAJCQlyZXR1cm4g MDsKKyAJCX0KKyAJZWxzZQorZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCitp bmRleCA4NDZmNWQyMTIuLmQ5Y2NjYzE3YyAxMDA2NDQKKy0tLSBhL3NlcnZjb25mLmMKKysrKyBi L3NlcnZjb25mLmMKK0BAIC00NTYsNiArNDU2LDcgQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRp b25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCisgCUNMRUFSX09OX05PTkUob3B0aW9ucy0+cm91 dGluZ19kb21haW4pOworIAlDTEVBUl9PTl9OT05FKG9wdGlvbnMtPmhvc3Rfa2V5X2FnZW50KTsK KyAJQ0xFQVJfT05fTk9ORShvcHRpb25zLT5wZXJfc291cmNlX3BlbmFsdHlfZXhlbXB0KTsKKysJ Q0xFQVJfT05fTk9ORShvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyk7CisgCisgCWZvciAoaSA9IDA7 IGkgPCBvcHRpb25zLT5udW1faG9zdF9rZXlfZmlsZXM7IGkrKykKKyAJCUNMRUFSX09OX05PTkUo b3B0aW9ucy0+aG9zdF9rZXlfZmlsZXNbaV0pOworQEAgLTE0ODgsNiArMTQ4OSwxNSBAQCBwcm9j ZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFy ICpsaW5lLAorIAkJaWYgKCphY3RpdmVwICYmIG9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9 PSBOVUxMKQorIAkJCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IHhzdHJkdXAoYXJnKTsK KyAJCWJyZWFrOworKworKwljYXNlIHNHU1NBUElJbmRpY2F0b3JzOgorKwkJYXJnID0gYXJndl9u ZXh0KCZhYywgJmF2KTsKKysJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykKKysJCQlmYXRhbCgi JXMgbGluZSAlZDogJXMgbWlzc2luZyBhcmd1bWVudC4iLAorKwkJCSAgICBmaWxlbmFtZSwgbGlu ZW51bSwga2V5d29yZCk7CisrCQlpZiAob3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPT0gTlVMTCkK KysJCQlvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyA9IHhzdHJkdXAoYXJnKTsKKysJCWJyZWFrOwor ICNlbmRpZiAvKiBHU1NBUEkgKi8KKyAKKyAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoK K0BAIC00Mjc0LDYgKzQyODQsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQorIAlk dW1wX2NmZ19mbXRpbnQoc0dTU0FQSVN0cmljdEFjY2VwdG9yQ2hlY2ssIG8tPmdzc19zdHJpY3Rf YWNjZXB0b3IpOworIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSVN0b3JlQ3JlZGVudGlhbHNPblJl a2V5LCBvLT5nc3Nfc3RvcmVfcmVrZXkpOworIAlkdW1wX2NmZ19zdHJpbmcoc0dTU0FQSUtleEFs Z29yaXRobXMsIG8tPmdzc19rZXhfYWxnb3JpdGhtcyk7CisrCWR1bXBfY2ZnX3N0cmluZyhzR1NT QVBJSW5kaWNhdG9ycywgby0+Z3NzX2luZGljYXRvcnMpOworICNlbmRpZgorIAlkdW1wX2NmZ19m bXRpbnQoc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sIG8tPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9u KTsKKyAJZHVtcF9jZmdfZm10aW50KHNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLAorZGlm ZiAtLWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCitpbmRleCBjNTViNjRjNzMuLjgxZTY5 OTY1NSAxMDA2NDQKKy0tLSBhL3NlcnZjb25mLmgKKysrKyBiL3NlcnZjb25mLmgKK0BAIC0zMjYs NyArMzI2LDggQEAgU1NIQ09ORl9JTlRGTEFHKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0 cmljdEFjY2VwdG9yQ2hlY2ssIFNTSENGR19HTE9CQUwsIDEKKyBTU0hDT05GX0lOVEZMQUcoZ3Nz X2tleWV4LCBHU1NBUElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlf Tk9ORSkgXAorIFNTSENPTkZfSU5URkxBRyhnc3Nfc3RvcmVfcmVrZXksIEdTU0FQSVN0b3JlQ3Jl ZGVudGlhbHNPblJla2V5LCBTU0hDRkdfR0xPQkFMLCAwLCBTU0hDRkdfQ09QWV9OT05FKSBcCisg U1NIQ09ORl9TVFJJTkcoZ3NzX2tleF9hbGdvcml0aG1zLCBHU1NBUElLZXhBbGdvcml0aG1zLCBT U0hDRkdfR0xPQkFMLCBTU0hDRkdfQ09QWV9OT05FKSBcCistU1NIQ09ORl9JTlRGTEFHKGVuYWJs ZV9rNXVzZXJzLCBHU1NBUElFbmFibGVrNXVzZXJzLCBTU0hDRkdfQUxMLCAwLCBTU0hDRkdfQ09Q WV9NQVRDSCkKKytTU0hDT05GX0lOVEZMQUcoZW5hYmxlX2s1dXNlcnMsIEdTU0FQSUVuYWJsZWs1 dXNlcnMsIFNTSENGR19BTEwsIDAsIFNTSENGR19DT1BZX01BVENIKSBcCisrU1NIQ09ORl9TVFJJ TkcoZ3NzX2luZGljYXRvcnMsIEdTU0FQSUluZGljYXRvcnMsIFNTSENGR19BTEwsIFNTSENGR19D T1BZX01BVENIKQorICNlbHNlIC8qIEdTU0FQSSAqLworICNkZWZpbmUgU1NIRF9DT05GSUdfRU5U UklFU19HU1MgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGdzc19hdXRoZW50aWNhdGlvbiwg R1NTQVBJQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwpIFwKK0BAIC0zMzYsNyArMzM3LDggQEAg U1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX3N0cmljdF9hY2NlcHRvciwgR1NTQVBJU3RyaWN0 QWNjZXB0b3JDaGVjaywgU1NIQ0ZHX0cKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3Nfa2V5 ZXgsIEdTU0FQSUtleUV4Y2hhbmdlLCBTU0hDRkdfR0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBP UlRFRF9JTlQoZ3NzX3N0b3JlX3Jla2V5LCBHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25SZWtleSwg U1NIQ0ZHX0dMT0JBTCkgXAorIFNTSENPTkZfVU5TVVBQT1JURURfU1RSSU5HKGdzc19rZXhfYWxn b3JpdGhtcywgR1NTQVBJS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCkgXAorLVNTSENPTkZf VU5TVVBQT1JURURfSU5UKGVuYWJsZV9rNXVzZXJzLCBHU1NBUElFbmFibGVrNXVzZXJzLCBTU0hD RkdfQUxMKQorK1NTSENPTkZfVU5TVVBQT1JURURfSU5UKGVuYWJsZV9rNXVzZXJzLCBHU1NBUElF bmFibGVrNXVzZXJzLCBTU0hDRkdfQUxMKSBcCisrU1NIQ09ORl9VTlNVUFBPUlRFRF9TVFJJTkco Z3NzX2luZGljYXRvcnMsIEdTU0FQSUluZGljYXRvcnMsIFNTSENGR19BTEwpCisgI2VuZGlmIC8q IEdTU0FQSSAqLworIAorICNkZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFUyBcCitkaWZmIC0tZ2l0 IGEvc3NoLWdzcy5oIGIvc3NoLWdzcy5oCitpbmRleCAzMjlkYzlkYTAuLjE1MDY3MTlhOSAxMDA2 NDQKKy0tLSBhL3NzaC1nc3MuaAorKysrIGIvc3NoLWdzcy5oCitAQCAtMzQsNiArMzQsMTIgQEAK KyAjaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgorICNlbmRpZgorIAorKyNpZmRlZiBIQVZFX0dT U0FQSV9FWFRfSAorKyNpbmNsdWRlIDxnc3NhcGlfZXh0Lmg+CisrI2VsaWYgZGVmaW5lZChIQVZF X0dTU0FQSV9HU1NBUElfRVhUX0gpCisrI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZXh0Lmg+Cisr I2VuZGlmCisrCisgI2lmZGVmIEtSQjUKKyAjIGlmbmRlZiBIRUlNREFMCisgIyAgaWZkZWYgSEFW RV9HU1NBUElfR0VORVJJQ19ICitAQCAtMTEyLDYgKzExOCw3IEBAIHR5cGVkZWYgc3RydWN0IHsK KyAJc3NoX2dzc2FwaV9jY2FjaGUgc3RvcmU7CisgCWludCB1c2VkOworIAlpbnQgdXBkYXRlZDsK KysJY2hhciAqKmluZGljYXRvcnM7IC8qIGF1dGggaW5kaWNhdG9ycyAqLworIH0gc3NoX2dzc2Fw aV9jbGllbnQ7CisgCisgdHlwZWRlZiBzdHJ1Y3Qgc3NoX2dzc2FwaV9tZWNoX3N0cnVjdCB7Citk aWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRfY29uZmlnLjUKK2luZGV4IGI3Mjc1Nzg5 NS4uMmE4ZjNhYmVhIDEwMDY0NAorLS0tIGEvc3NoZF9jb25maWcuNQorKysrIGIvc3NoZF9jb25m aWcuNQorQEAgLTgxMSw2ICs4MTEsNTIgQEAgVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHRvIGNv bm5lY3Rpb25zIHVzaW5nIEdTU0FQSS4KKyAuUHAKKyBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQga2V5 IGV4Y2hhbmdlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKKyAuUXEgc3No IC1RIEdTU0FQSUtleEFsZ29yaXRobXMgLgorKy5JdCBDbSBHU1NBUElJbmRpY2F0b3JzCisrU3Bl Y2lmaWVzIHdoZXRoZXIgdG8gYWNjZXB0IG9yIGRlbnkgR1NTQVBJIGF1dGhlbnRpY2F0ZWQgYWNj ZXNzIGlmIEtlcmJlcm9zCisrbWVjaGFuaXNtIGlzIHVzZWQgYW5kIEtlcmJlcm9zIHRpY2tldCBj b250YWlucyBhIHBhcnRpY3VsYXIgc2V0IG9mCisrYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycy4g VGhlIHZhbHVlcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QKKysu Q20gWyFdbmFtZTEsWyFdbmFtZTIsLi4uIC4KKytXaGVuIGluZGljYXRvcidzIG5hbWUgaXMgcHJl Zml4ZWQgd2l0aCAhLCB0aGUgYXV0aGVudGljYXRpb24gaW5kaWNhdG9yICduYW1lJworK3dpbGwg ZGVueSBhY2Nlc3MgdG8gdGhlIHN5c3RlbS4gT3RoZXJ3aXNlLCBvbmUgb2Ygbm9uLW5lZ2F0ZWQg YXV0aGVudGljYXRpb24KKytpbmRpY2F0b3JzIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgS2VyYmVy b3MgdGlja2V0IHRvIGFsbG93IGFjY2Vzcy4gSWYKKysuQ20gR1NTQVBJSW5kaWNhdG9ycworK2lz IGRlZmluZWQsIGEgS2VyYmVyb3MgdGlja2V0IHRoYXQgaGFzIGluZGljYXRvcnMgYnV0IGRvZXMg bm90IG1hdGNoIHRoZQorK3BvbGljeSB3aWxsIGdldCBkZW5pYWwuIElmIGF0IGxlYXN0IG9uZSBp bmRpY2F0b3IgaXMgY29uZmlndXJlZCwgd2hldGhlciBmb3IKKythY2Nlc3Mgb3IgZGVuaWFsLCB0 aWNrZXRzIHdpdGhvdXQgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyB3aWxsIGJlIGV4cGxpY2l0 bHkKKytyZWplY3RlZC4KKysuUHAKKytCeSBkZWZhdWx0IHN5c3RlbXMgdXNpbmcgTUlUIEtlcmJl cm9zIDEuMTcgb3IgbGF0ZXIgd2lsbCBub3QgYXNzaWduIGFueQorK2luZGljYXRvcnMuIFNQQUtF IGFuZCBQS0lOSVQgbWV0aG9kcyBhZGQgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycworK3RvIGFs bCBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9ucy4gVGhlIFNQQUtFIHByZS1hdXRoZW50aWNhdGlv biBtZXRob2QgaXMKKytwcmVmZXJyZWQgb3ZlciBhbiBlbmNyeXB0ZWQgdGltZXN0YW1wIHByZS1h dXRoZW50aWNhdGlvbiB3aGVuIHBhc3N3b3JkcyB1c2VkIHRvCisrYXV0aGVudGljYXRlIHVzZXIg cHJpbmNpcGFscy4gS2VyYmVyb3MgS0RDcyBidWlsdCB3aXRoIEhlaW1kYWwgS2VyYmVyb3MKKyso aW5jbHVkaW5nIFNhbWJhIEFEIERDIGJ1aWx0IHdpdGggSGVpbWRhbCkgZG8gbm90IGFkZCBhdXRo ZW50aWNhdGlvbgorK2luZGljYXRvcnMuIEhvd2V2ZXIsIE9wZW5TU0ggYnVpbHQgYWdhaW5zdCBI ZWltZGFsIEtlcmJlcm9zIGxpYnJhcnkgaXMgYWJsZSB0bworK2lucXVpcmUgYXV0aGVudGljYXRp b24gaW5kaWNhdG9ycyBhbmQgdGh1cyBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhlaXIgcHJl c2VuY2UuCisrLlBwCisrSW5kaWNhdG9yIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUgYW5kIGRlcGVu ZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgYQorK3BhcnRpY3VsYXIgS2VyYmVyb3MgZGVwbG95 bWVudC4gSW5kaWNhdG9ycyBhdmFpbGFibGUgaW4gTUlUIEtlcmJlcm9zIGFuZAorK0ZyZWVJUEEg ZW52aXJvbm1lbnRzOgorKy5QcAorKy5CbCAtdGFnIC13aWR0aCBYWFhYIC1vZmZzZXQgaW5kZW50 IC1jb21wYWN0CisrLkl0IENtIGhhcmRlbmVkCisrU1BBS0Ugb3IgZW5jcnlwdGVkIHRpbWVzdGFt cCBwcmUtYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBpbiBNSVQgS2VyYmVyb3MgYW5kIEZyZWVJ UEEKKysuSXQgQ20gcGtpbml0Cisrc21hcnRjYXJkIG9yIFBLQ1MxMSB0b2tlbi1iYXNlZCBwcmUt YXV0aGVudGljYXRpb24gaW4gTUlUIEtlcmJlcm9zIGFuZCBGcmVlSVBBCisrLkl0IENtIHJhZGl1 cworK3ByZS1hdXRoZW50aWNhdGlvbiBiYXNlZCBvbiBhIFJBRElVUyBzZXJ2ZXIgaW4gTUlUIEtl cmJlcm9zIGFuZCBGcmVlSVBBCisrLkl0IENtIG90cAorK1RPVFAvSE9UUC1iYXNlZCB0d28tZmFj dG9yIHByZS1hdXRoZW50aWNhdGlvbiBpbiBGcmVlSVBBCisrLkl0IENtIGlkcAorK09BdXRoMi1i YXNlZCBwcmUtYXV0aGVudGljYXRpb24gaW4gRnJlZUlQQSB1c2luZyBhbiBleHRlcm5hbCBpZGVu dGl0eSBwcm92aWRlcgorK2FuZCBkZXZpY2UgYXV0aG9yaXphdGlvbiBncmFudCBmbG93CisrLkl0 IENtIHBhc3NrZXkKKytGSURPMi1iYXNlZCBwcmUtYXV0aGVudGljYXRpb24gaW4gRnJlZUlQQSwg dXNpbmcgRklETzIgVVNCIGFuZCBORkMgdG9rZW5zCisrLkVsCisrLlBwCisrVGhlIGRlZmF1bHQK KysuRHEgbm9uZQorK2lzIHRvIG5vdCB1c2UgR1NTQVBJIGF1dGhlbnRpY2F0aW9uIGluZGljYXRv cnMgZm9yIGFjY2VzcyBkZWNpc2lvbnMuCisgLkl0IENtIEhvc3RiYXNlZEFjY2VwdGVkQWxnb3Jp dGhtcworIFRoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKKyAuWHIgY3J5cHRv LXBvbGljaWVzIDcgLgorLS0gCisyLjU1LjAKKwoKZGlmZiAtLWdpdCBhLzAwNDctTklTVC1jdXJ2 ZXMtaHlicmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBiLzAwNDctTklTVC1jdXJ2ZXMtaHli cmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42ODg1MjQxCi0tLSAvZGV2L251bGwKKysrIGIvMDA0Ny1OSVNULWN1cnZlcy1oeWJy aWQtS0VYLWltcGxlbWVudGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTM1MyBAQAorRnJvbSAxMTFi ZTRiMmJhNWUwZTI1NDlkMjFkMWVkNGM1M2ZlOWFmOTA4MjdhIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTog TW9uLCAyMCBPY3QgMjAyNSAxNjowNzozMSArMDIwMAorU3ViamVjdDogW1BBVENIIDQ3LzUzXSBO SVNUIGN1cnZlcyBoeWJyaWQgS0VYIGltcGxlbWVudGF0aW9uCisKKy0tLQorIGNvbXBhdC5jICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDIzICstCisgY29tcGF0LmggICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKworIGNyeXB0b19hcGkuaCAgICAgICAgICAgICAgICAgICAgIHwgICA1 ICsKKyBrZXgtbmFtZXMuYyAgICAgICAgICAgICAgICAgICAgICB8ICA5MSArKysrLQorIGtleC5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBrZXguaCAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAyMCArLQorIGtleGdlbi5jICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDY3ICsrLQorIGtleG1sa2VtNzY4eDI1NTE5LmMgICAgICAgICAgICAgIHwgNjgwICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0KKyBtb25pdG9yLmMgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMiArCisgbXlwcm9wb3NhbC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwor IHJlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jIHwgICA0ICsKKyBzc2gta2V5c2Nhbi5j ICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQorIHNzaF9hcGkuYyAgICAgICAgICAgICAgICAg ICAgICAgIHwgICA2ICstCisgc3NoY29ubmVjdDIuYyAgICAgICAgICAgICAgICAgICAgfCAgIDMg Ky0KKyBzc2hkLWF1dGguYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCisgMTUgZmlsZXMg Y2hhbmdlZCwgODUyIGluc2VydGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0 IGEvY29tcGF0LmMgYi9jb21wYXQuYworaW5kZXggNDMxMjUxMGU1Li5lNmM3OTM1ZDQgMTAwNjQ0 CistLS0gYS9jb21wYXQuYworKysrIGIvY29tcGF0LmMKK0BAIC0zNiw2ICszNiw3IEBACisgI2lu Y2x1ZGUgImNvbXBhdC5oIgorICNpbmNsdWRlICJsb2cuaCIKKyAjaW5jbHVkZSAibWF0Y2guaCIK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgCisgLyogZGV0ZXJtaW5lIGJ1ZyBmbGFncyBm cm9tIFNTSCBwcm90b2NvbCBiYW5uZXIgKi8KKyB2b2lkCitAQCAtMTQ4LDggKzE0OSw5IEBAIGNo YXIgKgorIGNvbXBhdF9rZXhfcHJvcG9zYWwoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICpw KQorIHsKKyAJY2hhciAqY3AgPSBOVUxMLCAqY3AyID0gTlVMTDsKKysJaW50IG1sa2VtX2F2YWls YWJsZSA9IGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpOworIAorLQlpZiAoKHNzaC0+Y29tcGF0ICYg KFNTSF9CVUdfQ1VSVkUyNTUxOVBBRHxTU0hfT0xEX0RIR0VYKSkgPT0gMCkKKysJaWYgKChzc2gt PmNvbXBhdCAmIChTU0hfQlVHX0NVUlZFMjU1MTlQQUR8U1NIX09MRF9ESEdFWCkpID09IDAgJiYg bWxrZW1fYXZhaWxhYmxlID09IDIpCisgCQlyZXR1cm4geHN0cmR1cChwKTsKKyAJZGVidWcyX2Yo Im9yaWdpbmFsIEtFWCBwcm9wb3NhbDogJXMiLCBwKTsKKyAJaWYgKChzc2gtPmNvbXBhdCAmIFNT SF9CVUdfQ1VSVkUyNTUxOVBBRCkgIT0gMCkKK0BAIC0xNjQsNiArMTY2LDI1IEBAIGNvbXBhdF9r ZXhfcHJvcG9zYWwoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICpwKQorIAkJZnJlZShjcCk7 CisgCQljcCA9IGNwMjsKKyAJfQorKwlpZiAobWxrZW1fYXZhaWxhYmxlID09IDIpCisrCQlyZXR1 cm4gY3AgPyBjcCA6IHhzdHJkdXAocCk7CisrCWlmIChtbGtlbV9hdmFpbGFibGUgPT0gMSAmJiBG SVBTX21vZGUoKSkgeworKwkJaWYgKChjcDIgPSBtYXRjaF9maWx0ZXJfZGVueWxpc3QoY3AgPyBj cCA6IHAsCisrCQkgICAgIm1sa2VtNzY4eDI1NTE5LXNoYTI1NiIpKSA9PSBOVUxMKQorKwkJCWZh dGFsKCJtYXRjaF9maWx0ZXJfZGVueWxpc3QgZmFpbGVkIik7CisrCQlmcmVlKGNwKTsKKysJCWNw ID0gY3AyOworKwl9CisrCWlmIChtbGtlbV9hdmFpbGFibGUgPT0gMCkgeworKwkJaWYgKChjcDIg PSBtYXRjaF9maWx0ZXJfZGVueWxpc3QoY3AgPyBjcCA6IHAsCisrCQkgICAgIm1sa2VtNzY4eDI1 NTE5LXNoYTI1NiwiCisrCQkgICAgIm1sa2VtNzY4bmlzdHAyNTYtc2hhMjU2LCIKKysJCSAgICAi bWxrZW0xMDI0bmlzdHAzODQtc2hhMzg0IikpID09IE5VTEwpCisrCQkJZmF0YWwoIm1hdGNoX2Zp bHRlcl9kZW55bGlzdCBmYWlsZWQiKTsKKysJCWZyZWUoY3ApOworKwkJY3AgPSBjcDI7CisrCX0K KysKKyAJaWYgKGNwID09IE5VTEwgfHwgKmNwID09ICdcMCcpCisgCQlmYXRhbCgiTm8gc3VwcG9y dGVkIGtleSBleGNoYW5nZSBhbGdvcml0aG1zIGZvdW5kIik7CisgCWRlYnVnMl9mKCJjb21wYXQg S0VYIHByb3Bvc2FsOiAlcyIsIGNwKTsKK2RpZmYgLS1naXQgYS9jb21wYXQuaCBiL2NvbXBhdC5o CitpbmRleCAyZTZkYjViZjkuLmI3OGU1NWI2OSAxMDA2NDQKKy0tLSBhL2NvbXBhdC5oCisrKysg Yi9jb21wYXQuaAorQEAgLTYyLDQgKzYyLDUgQEAgc3RydWN0IHNzaDsKKyAKKyB2b2lkICAgIGNv bXBhdF9iYW5uZXIoc3RydWN0IHNzaCAqLCBjb25zdCBjaGFyICopOworIGNoYXIJKmNvbXBhdF9r ZXhfcHJvcG9zYWwoc3RydWN0IHNzaCAqLCBjb25zdCBjaGFyICopOworK2ludCBpc19tbGtlbTc2 OF9hdmFpbGFibGUodm9pZCk7CisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvY3J5cHRvX2FwaS5oIGIv Y3J5cHRvX2FwaS5oCitpbmRleCBmODQ0MWVkNmYuLjYwZWEyNGEzZSAxMDA2NDQKKy0tLSBhL2Ny eXB0b19hcGkuaAorKysrIGIvY3J5cHRvX2FwaS5oCitAQCAtMjAzLDYgKzIwMywxMSBAQCBpbnQg Y3J5cHRvX3NpZ25fbWxkc2E0NF9lZDI1NTE5X3ZlcmlmeShjb25zdCB1aW50OF90IHNpZ1tNTERT QTQ0X0VEMjU1MTlfU0lHX1NaXQorICAgICBjb25zdCB1aW50OF90ICpjdHgsIHNpemVfdCBjdHhs ZW4sCisgICAgIGNvbnN0IHVpbnQ4X3QgcGtbTUxEU0E0NF9FRDI1NTE5X1BLX1NaXSk7CisgCisr LyogTUwtS0VNLTEwMjQgKi8KKysjZGVmaW5lIGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tF WUJZVEVTIDE1NjgKKysjZGVmaW5lIGNyeXB0b19rZW1fbWxrZW0xMDI0X1NFQ1JFVEtFWUJZVEVT IDMxNjgKKysjZGVmaW5lIGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUyAxNTY4 CisrCisgLyogVXRpbGl0eSAqLworIHZvaWQgc2hhM18yNTYodWludDhfdCBkaWdlc3RbMzJdLCBj b25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKTsKKyB2b2lkIHNoYTNfNTEyKHVpbnQ4X3Qg ZGlnZXN0WzY0XSwgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbik7CitkaWZmIC0tZ2l0 IGEva2V4LW5hbWVzLmMgYi9rZXgtbmFtZXMuYworaW5kZXggY2RkNWRiOTBlLi5mOWM1MTQyOWEg MTAwNjQ0CistLS0gYS9rZXgtbmFtZXMuYworKysrIGIva2V4LW5hbWVzLmMKK0BAIC0zNCw2ICsz NCw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorICNlbmRpZgorIAorICNpbmNsdWRlICJrZXguaCIKK0BAIC03Myw4ICs3NCw2IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGtleGFsZ3NbXSA9IHsKKyAJICAgIFNTSF9ESUdFU1Rf U0hBMzg0LCBLRVhfTk9UX1BRIH0sCisgCXsgS0VYX0VDREhfU0hBMl9OSVNUUDUyMSwgS0VYX0VD REhfU0hBMiwgTklEX3NlY3A1MjFyMSwKKyAJICAgIFNTSF9ESUdFU1RfU0hBNTEyLCBLRVhfTk9U X1BRIH0sCistCXsgS0VYX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2LCBLRVhfS0VNX01MS0VNNzY4 RUNESF9TSEEyNTYsCistCSAgICBOSURfWDlfNjJfcHJpbWUyNTZ2MSwgU1NIX0RJR0VTVF9TSEEy NTYsIEtFWF9JU19QUSB9LAorICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KKyAjaWYgZGVmaW5l ZChIQVZFX0VWUF9TSEEyNTYpIHx8ICFkZWZpbmVkKFdJVEhfT1BFTlNTTCkKKyAJeyBLRVhfQ1VS VkUyNTUxOV9TSEEyNTYsIEtFWF9DMjU1MTlfU0hBMjU2LCAwLCBTU0hfRElHRVNUX1NIQTI1Niwg S0VYX05PVF9QUSB9LAorQEAgLTg4LDYgKzg3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4 YWxnIGtleGFsZ3NbXSA9IHsKKyAjaWZkZWYgVVNFX01MS0VNNzY4WDI1NTE5CisgCXsgS0VYX01M S0VNNzY4WDI1NTE5X1NIQTI1NiwgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTYsIDAsCisg CSAgICBTU0hfRElHRVNUX1NIQTI1NiwgS0VYX0lTX1BRIH0sCisrCXsgS0VYX01MS0VNNzY4TklT VFAyNTZfU0hBMjU2LCBLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2LCAwLAorKwkgICAg U1NIX0RJR0VTVF9TSEEyNTYsIEtFWF9JU19QUSB9LAorKwl7IEtFWF9NTEtFTTEwMjROSVNUUDM4 NF9TSEEzODQsIEtFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0LCAwLAorKwkgICAgU1NI X0RJR0VTVF9TSEEzODQsIEtFWF9JU19QUSB9LAorICNlbmRpZgorICNlbmRpZiAvKiBIQVZFX0VW UF9TSEEyNTYgfHwgIVdJVEhfT1BFTlNTTCAqLworIAl7IE5VTEwsIDAsIC0xLCAtMSwgMCB9LAor QEAgLTEwNiwxNCArMTA5LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGdzc19rZXhh bGdzW10gPSB7CisgCXsgTlVMTCwgMCwgLTEsIC0xLCAwfSwKKyB9OworIAorLXN0YXRpYyBpbnQg aXNfbWxrZW03NjhfYXZhaWxhYmxlKCkKKysvKgorKyAqIDAgLSB1bmF2YWlsYWJsZQorKyAqIDEg LSBhdmFpbGFibGUgaW4gbm9uLUZJUFMgbW9kZQorKyAqIDIgLSBhdmFpbGFibGUgYWx3YXlzCisr ICovCisraW50IGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpCisgeworIAlzdGF0aWMgaW50IGlzX2Zl dGNoZWQgPSAtMTsKKyAKKyAJaWYgKGlzX2ZldGNoZWQgPT0gLTEpIHsKKy0JCUVWUF9LRU0gKm1s a2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKKy0JCWlzX2Zl dGNoZWQgPSBtbGtlbTc2OCAhPSBOVUxMID8gMSA6IDA7CisrCQlFVlBfS0VNICptbGtlbTc2OCA9 IE5VTEw7CisrCisrCQlFUlJfc2V0X21hcmsoKTsKKysJCW1sa2VtNzY4ID0gRVZQX0tFTV9mZXRj aChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKKysJCWlzX2ZldGNoZWQgPSAobWxrZW03NjggPT0g TlVMTCkgPyAwIDogMjsKKysJCWlmIChpc19mZXRjaGVkID09IDAgJiYgRklQU19tb2RlKCkgPT0g MSkgeworKwkJICAgIG1sa2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCAi cHJvdmlkZXI9ZGVmYXVsdCwtZmlwcyIpOworKwkJICAgIGlzX2ZldGNoZWQgPSAobWxrZW03Njgg PT0gTlVMTCkgPyAwIDogMTsKKysJCX0KKyAJCUVWUF9LRU1fZnJlZShtbGtlbTc2OCk7CisrCQlF UlJfcG9wX3RvX21hcmsoKTsKKyAJfQorIAorIAlyZXR1cm4gaXNfZmV0Y2hlZDsKK0BAIC0xMjUs MTEgKzE0MSwzMiBAQCBrZXhfYWxnX2xpc3RfaW50ZXJuYWwoY2hhciBzZXAsIGNvbnN0IHN0cnVj dCBrZXhhbGcgKmFsZ3MpCisgCWNoYXIgKnJldCA9IE5VTEw7CisgCWNvbnN0IHN0cnVjdCBrZXhh bGcgKms7CisgCWNoYXIgc2VwX3N0clsyXSA9IHtzZXAsICdcMCd9OworKwlpbnQgeDI1NTE5bWxr ZW1fYXZhaWxhYmxlID0gMCwgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDA7CisgCistCWZvciAoayA9 IGtleGFsZ3M7IGstPm5hbWUgIT0gTlVMTDsgaysrKSB7CistCQlpZiAoc3RyY21wKGstPm5hbWUs IEtFWF9NTEtFTTc2OFgyNTUxOV9TSEEyNTYpID09IDAKKy0JCQkmJiAhaXNfbWxrZW03NjhfYXZh aWxhYmxlKCkpCisrCS8qCisrCSAqIEZJUFMgcHJvdmlkZXIgY2FuIHByb3ZpZGUgTUwtS0VNcyBh bmQgdGhlbiBhbGwgaHlicmlkcyBhcmUgYXZhaWxhYmxlCisrCSAqIE90aGVyd2lzZSBvbmx5IE5J U1QgaHlicmlkcyBhcmUgYXZhaWxhYmxlCisrCSAqICovCisrCWlmIChGSVBTX21vZGUoKSkgewor KwkgICAgaWYgKGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDIpIHsKKysJICAgICAgICB4MjU1 MTltbGtlbV9hdmFpbGFibGUgPSAxOworKwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAx OworKwkgICAgfSBlbHNlIGlmIChpc19tbGtlbTc2OF9hdmFpbGFibGUoKSA9PSAxKSB7CisrCSAg ICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7CisrCSAgICB9CisrCX0gZWxzZSB7CisrCSAg ICBpZiAoaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkgPiAwKSB7CisrCSAgICAgICAgeDI1NTE5bWxr ZW1fYXZhaWxhYmxlID0gMTsKKysJICAgICAgICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKKysJ ICAgIH0KKysJfQorKworKwlmb3IgKGsgPSBhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgewor KwkJaWYgKCAgKHN0cmNtcChrLT5uYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlfU0hBMjU2KSA9PSAw ICAgICYmIHgyNTUxOW1sa2VtX2F2YWlsYWJsZSA9PSAwKQorKwkJICAgfHwgKHN0cmNtcChrLT5u YW1lLCBLRVhfTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFp bGFibGUgPT0gMCkKKysJCSAgIHx8IChzdHJjbXAoay0+bmFtZSwgS0VYX01MS0VNMTAyNE5JU1RQ Mzg0X1NIQTM4NCkgPT0gMCAmJiBuaXN0bWxrZW1fYXZhaWxhYmxlID09IDApKQorIAkJCWNvbnRp bnVlOworKworIAkJeGV4dGVuZGYoJnJldCwgc2VwX3N0ciwgIiVzIiwgay0+bmFtZSk7CisgCX0K KyAKK0BAIC0xNTIsMTAgKzE4OSwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyAqCisg a2V4X2FsZ19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCisgeworIAljb25zdCBzdHJ1Y3Qga2V4 YWxnICprOworKwlpbnQgeDI1NTE5bWxrZW1fYXZhaWxhYmxlID0gMCwgbmlzdG1sa2VtX2F2YWls YWJsZSA9IDA7CisgCistCWlmIChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1 NikgPT0gMAorLQkJJiYgIWlzX21sa2VtNzY4X2F2YWlsYWJsZSgpKQorLQlyZXR1cm4gTlVMTDsK KysJLyoKKysJICogRklQUyBwcm92aWRlciBjYW4gcHJvdmlkZSBNTC1LRU1zIGFuZCB0aGVuIGFs bCBoeWJyaWRzIGFyZSBhdmFpbGFibGUKKysJICogT3RoZXJ3aXNlIG9ubHkgTklTVCBoeWJyaWRz IGFyZSBhdmFpbGFibGUKKysJICogKi8KKysJaWYgKEZJUFNfbW9kZSgpKSB7CisrCSAgICBpZiAo aXNfbWxrZW03NjhfYXZhaWxhYmxlKCkgPT0gMikgeworKwkgICAgICAgIHgyNTUxOW1sa2VtX2F2 YWlsYWJsZSA9IDE7CisrCSAgICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7CisrCSAgICB9 IGVsc2UgaWYgKGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDEpIHsKKysJICAgICAgICBuaXN0 bWxrZW1fYXZhaWxhYmxlID0gMTsKKysJICAgIH0KKysJfSBlbHNlIHsKKysJICAgIGlmIChpc19t bGtlbTc2OF9hdmFpbGFibGUoKSA+IDApIHsKKysJICAgICAgICB4MjU1MTltbGtlbV9hdmFpbGFi bGUgPSAxOworKwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOworKwkgICAgfQorKwl9 CisrCisrCWlmICggIChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0g MCAgICAmJiB4MjU1MTltbGtlbV9hdmFpbGFibGUgPT0gMCkKKysJICAgfHwgKHN0cmNtcChuYW1l LCBLRVhfTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFpbGFi bGUgPT0gMCkKKysJICAgfHwgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU0xMDI0TklTVFAzODRfU0hB Mzg0KSA9PSAwICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkpCisrCSAgIHJldHVybiBOVUxM OworIAorIAlmb3IgKGsgPSBrZXhhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgeworIAkJaWYg KHN0cmNtcChrLT5uYW1lLCBuYW1lKSA9PSAwKQorQEAgLTIzMyw4ICsyOTAsMTYgQEAga2V4X25h bWVzX3ZhbGlkKGNvbnN0IGNoYXIgKm5hbWVzKQorIAkJCXJldHVybiAwOworIAkJfQorIAkJaWYg KGtleF9hbGdfYnlfbmFtZShwKSA9PSBOVUxMKSB7CistCQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJ CQllcnJvcigiXCIlLjEwMHNcIiBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiLCBwKTsKKysJ CQlpZiAoRklQU19tb2RlKCkpIHsKKysJCQkJaWYgKChzdHJjbXAocCwgS0VYX01MS0VNNzY4WDI1 NTE5X1NIQTI1NikgPT0gMCkKKysJCQkJICAgIHx8IChzdHJjbXAocCwgS0VYX01MS0VNNzY4TklT VFAyNTZfU0hBMjU2KSA9PSAwKQorKwkJCQkgICAgfHwgKHN0cmNtcChwLCBLRVhfTUxLRU0xMDI0 TklTVFAzODRfU0hBMzg0KSA9PSAwKSkgeworKwkJCQkJZGVidWcoIlwiJS4xMDBzXCIgaXMgbm90 IGFsbG93ZWQgaW4gRklQUyBtb2RlIiwgcCk7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQorKwkJ CQllbHNlCisrCQkJCQllcnJvcigiXCIlLjEwMHNcIiBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1v ZGUiLCBwKTsKKysJCQl9CisgCQkJZWxzZQorIAkJCQllcnJvcigiVW5zdXBwb3J0ZWQgS0VYIGFs Z29yaXRobSBcIiUuMTAwc1wiIiwgcCk7CisgCQkJZnJlZShzKTsKK2RpZmYgLS1naXQgYS9rZXgu YyBiL2tleC5jCitpbmRleCA2MmNmYTg2Y2QuLjFlMGMyOWI5MSAxMDA2NDQKKy0tLSBhL2tleC5j CisrKysgYi9rZXguYworQEAgLTc2MCw2ICs3NjAsNyBAQCBrZXhfZnJlZShzdHJ1Y3Qga2V4ICpr ZXgpCisgI2lmZGVmIFdJVEhfT1BFTlNTTAorIAlESF9mcmVlKGtleC0+ZGgpOworIAlFQ19LRVlf ZnJlZShrZXgtPmVjX2NsaWVudF9rZXkpOworKwlFVlBfUEtFWV9mcmVlKGtleC0+ZWNfaHlicmlk X2NsaWVudF9rZXkpOworICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KKyAJZm9yIChtb2RlID0g MDsgbW9kZSA8IE1PREVfTUFYOyBtb2RlKyspIHsKKyAJCWtleF9mcmVlX25ld2tleXMoa2V4LT5u ZXdrZXlzW21vZGVdKTsKK2RpZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCitpbmRleCAxZmU0YmIy OWIuLjRlMWIyODc1ZSAxMDA2NDQKKy0tLSBhL2tleC5oCisrKysgYi9rZXguaAorQEAgLTY1LDcg KzY1LDggQEAKKyAjZGVmaW5lCUtFWF9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyCSJzbnRydXA3NjF4 MjU1MTktc2hhNTEyIgorICNkZWZpbmUJS0VYX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJfT0xECSJz bnRydXA3NjF4MjU1MTktc2hhNTEyQG9wZW5zc2guY29tIgorICNkZWZpbmUJS0VYX01MS0VNNzY4 WDI1NTE5X1NIQTI1NgkibWxrZW03Njh4MjU1MTktc2hhMjU2IgorLSNkZWZpbmUJS0VYX01MS0VN NzY4TklTVFAyNTZfU0hBMjU2CSJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiIKKysjZGVmaW5lCUtF WF9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NiAgICAgIm1sa2VtNzY4bmlzdHAyNTYtc2hhMjU2Igor KyNkZWZpbmUJS0VYX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCAgICAibWxrZW0xMDI0bmlzdHAz ODQtc2hhMzg0IgorIAorICNkZWZpbmUgQ09NUF9OT05FCTAKKyAjZGVmaW5lIENPTVBfREVMQVlF RAkyCitAQCAtMTA0LDcgKzEwNSw4IEBAIGVudW0ga2V4X2V4Y2hhbmdlIHsKKyAJS0VYX0MyNTUx OV9TSEEyNTYsCisgCUtFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMiwKKyAJS0VYX0tFTV9N TEtFTTc2OFgyNTUxOV9TSEEyNTYsCistCUtFWF9LRU1fTUxLRU03NjhFQ0RIX1NIQTI1NiwKKysJ S0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NiwKKysJS0VYX0tFTV9NTEtFTTEwMjROSVNU UDM4NF9TSEEzODQsCisgI2lmZGVmIEdTU0FQSQorIAlLRVhfR1NTX0dSUDFfU0hBMSwKKyAJS0VY X0dTU19HUlAxNF9TSEExLAorQEAgLTIwNyw2ICsyMDksOSBAQCBzdHJ1Y3Qga2V4IHsKKyAJdV9j aGFyIHNudHJ1cDc2MV9jbGllbnRfa2V5W2NyeXB0b19rZW1fc250cnVwNzYxX1NFQ1JFVEtFWUJZ VEVTXTsgLyogS0VNICovCisgCXVfY2hhciBtbGtlbTc2OF9jbGllbnRfa2V5W2NyeXB0b19rZW1f bWxrZW03NjhfU0VDUkVUS0VZQllURVNdOyAvKiBLRU0gKi8KKyAJc3RydWN0IHNzaGJ1ZiAqY2xp ZW50X3B1YjsKKysJLyogRklYTUUgKi8KKysJRVZQX1BLRVkgKmVjX2h5YnJpZF9jbGllbnRfa2V5 OyAvKiBOSVNUIGh5YnJpZHMgKi8KKysJdV9jaGFyIG1sa2VtMTAyNF9jbGllbnRfa2V5W2NyeXB0 b19rZW1fbWxrZW0xMDI0X1NFQ1JFVEtFWUJZVEVTXTsgLyogTUwtS0VNIDEwMjQgKyBOSVNUICov CisgfTsKKyAKKyBpbnQJIGtleF9uYW1lX3ZhbGlkKGNvbnN0IGNoYXIgKik7CitAQCAtMjk3LDYg KzMwMiwxNyBAQCBpbnQJIGtleF9rZW1fbWxrZW03NjhlY2RoX2VuYyhzdHJ1Y3Qga2V4ICosIGNv bnN0IHN0cnVjdCBzc2hidWYgKiwKKyAgICAgc3RydWN0IHNzaGJ1ZiAqKiwgc3RydWN0IHNzaGJ1 ZiAqKik7CisgaW50CSBrZXhfa2VtX21sa2VtNzY4ZWNkaF9kZWMoc3RydWN0IGtleCAqLCBjb25z dCBzdHJ1Y3Qgc3NoYnVmICosCisgICAgIHN0cnVjdCBzc2hidWYgKiopOworK2ludAkga2V4X2tl bV9tbGtlbTc2OG5pc3RwMjU2X2tleXBhaXIoc3RydWN0IGtleCAqKTsKKytpbnQJIGtleF9rZW1f bWxrZW03NjhuaXN0cDI1Nl9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICos CisrICAgIHN0cnVjdCBzc2hidWYgKiosIHN0cnVjdCBzc2hidWYgKiopOworK2ludAkga2V4X2tl bV9tbGtlbTc2OG5pc3RwMjU2X2RlYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYg KiwKKysgICAgc3RydWN0IHNzaGJ1ZiAqKik7CisrCisraW50CSBrZXhfa2VtX21sa2VtMTAyNG5p c3RwMzg0X2tleXBhaXIoc3RydWN0IGtleCAqKTsKKytpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlz dHAzODRfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorKyAgICBzdHJ1 Y3Qgc3NoYnVmICoqLCBzdHJ1Y3Qgc3NoYnVmICoqKTsKKytpbnQJIGtleF9rZW1fbWxrZW0xMDI0 bmlzdHAzODRfZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorKyAgICBz dHJ1Y3Qgc3NoYnVmICoqKTsKKyAKKyBpbnQJIGtleF9kaF9rZXlnZW4oc3RydWN0IGtleCAqKTsK KyBpbnQJIGtleF9kaF9jb21wdXRlX2tleShzdHJ1Y3Qga2V4ICosIEJJR05VTSAqLCBzdHJ1Y3Qg c3NoYnVmICopOworZGlmZiAtLWdpdCBhL2tleGdlbi5jIGIva2V4Z2VuLmMKK2luZGV4IDgzNDA3 M2VmMS4uNzlkZGI1OTI1IDEwMDY0NAorLS0tIGEva2V4Z2VuLmMKKysrKyBiL2tleGdlbi5jCitA QCAtMTE0LDkgKzExNCw2IEBAIGtleF9nZW5fY2xpZW50KHN0cnVjdCBzc2ggKnNzaCkKKyAJY2Fz ZSBLRVhfRUNESF9TSEEyOgorIAkJciA9IGtleF9lY2RoX2tleXBhaXIoa2V4KTsKKyAJCWJyZWFr OworLQljYXNlIEtFWF9LRU1fTUxLRU03NjhFQ0RIX1NIQTI1NjoKKy0JCXIgPSBrZXhfa2VtX21s a2VtNzY4ZWNkaF9rZXlwYWlyKGtleCk7CistCQlicmVhazsKKyAjZW5kaWYgLyogV0lUSF9PUEVO U1NMICovCisgCWNhc2UgS0VYX0MyNTUxOV9TSEEyNTY6CisgCQlpZiAoRklQU19tb2RlKCkpIHsK K0BAIC0xMzYsMTIgKzEzMywyNCBAQCBrZXhfZ2VuX2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCisg CQlicmVhazsKKyAJY2FzZSBLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1NjoKKyAJCWlmIChG SVBTX21vZGUoKSkgeworLQkJICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4 eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOworLQkJICAgIHIgPSBTU0hfRVJS X0lOVkFMSURfQVJHVU1FTlQ7CisrCQkgICAgRVZQX0tFTSAqbWxrZW0gPSBFVlBfS0VNX2ZldGNo KE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOworKwkJICAgIGlmIChtbGtlbSA9PSBOVUxMKSB7Cisr CQkgICAgICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5v dCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOworKwkJICAgICAgICByID0gU1NIX0VSUl9JTlZBTElE X0FSR1VNRU5UOworKwkJICAgIH0gZWxzZSB7CisrCQkJRVZQX0tFTV9mcmVlKG1sa2VtKTsKKysJ CSAgICAgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihrZXgpOworKwkJICAg IH0KKyAJCX0gZWxzZSB7CisgCQkgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFp cihrZXgpOworIAkJfQorIAkJYnJlYWs7CisrCWNhc2UgS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2 X1NIQTI1NjoKKysJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2tleXBhaXIoa2V4 KTsKKysJCWJyZWFrOworKwljYXNlIEtFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0Ogor KwkJICAgIHIgPSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2tleXBhaXIoa2V4KTsKKysJCWJy ZWFrOworIAlkZWZhdWx0OgorIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAJCWJy ZWFrOworQEAgLTIwNiwxMCArMjE1LDYgQEAgaW5wdXRfa2V4X2dlbl9yZXBseShpbnQgdHlwZSwg dWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCisgCWNhc2UgS0VYX0VDREhfU0hBMjoKKyAJ CXIgPSBrZXhfZWNkaF9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwgJnNoYXJlZF9zZWNyZXQpOworIAkJ YnJlYWs7CistCWNhc2UgS0VYX0tFTV9NTEtFTTc2OEVDREhfU0hBMjU2OgorLQkJciA9IGtleF9r ZW1fbWxrZW03NjhlY2RoX2RlYyhrZXgsIHNlcnZlcl9ibG9iLAorLQkJICAgICZzaGFyZWRfc2Vj cmV0KTsKKy0JCWJyZWFrOworICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KKyAJY2FzZSBLRVhf QzI1NTE5X1NIQTI1NjoKKyAJCWlmIChGSVBTX21vZGUoKSkgeworQEAgLTIzMCwxMyArMjM1LDI4 IEBAIGlucHV0X2tleF9nZW5fcmVwbHkoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNz aCAqc3NoKQorIAkJYnJlYWs7CisgCWNhc2UgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTY6 CisgCQlpZiAoRklQU19tb2RlKCkpIHsKKy0JCSAgICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlw ZSBtbGtlbTc2OHgyNTUxOSBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKKy0JCSAgICBy ID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworKwkJICAgIEVWUF9LRU0gKm1sa2VtID0gRVZQ X0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKKysJCSAgICBpZiAobWxrZW0gPT0g TlVMTCkgeworKwkJICAgICAgICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgy NTUxOSBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKKysJCSAgICAgICAgciA9IFNTSF9F UlJfSU5WQUxJRF9BUkdVTUVOVDsKKysJCSAgICB9IGVsc2UgeworKwkJCUVWUF9LRU1fZnJlZSht bGtlbSk7CisrCQkgICAgICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2RlYyhrZXgsIHNl cnZlcl9ibG9iLAorKwkJICAgICAgICAgICAgJnNoYXJlZF9zZWNyZXQpOworKwkJICAgIH0KKyAJ CX0gZWxzZSB7CisgCQkgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZGVjKGtleCwgc2Vy dmVyX2Jsb2IsCisgCQkgICAgICAgICZzaGFyZWRfc2VjcmV0KTsKKyAJCX0KKyAJCWJyZWFrOwor KwljYXNlIEtFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTY6CisrCQkgICAgciA9IGtleF9r ZW1fbWxrZW03NjhuaXN0cDI1Nl9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwKKysJCSAgICAgICAgJnNo YXJlZF9zZWNyZXQpOworKwkJYnJlYWs7CisrCWNhc2UgS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4 NF9TSEEzODQ6CisrCQkgICAgciA9IGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZGVjKGtleCwg c2VydmVyX2Jsb2IsCisrCQkgICAgICAgICZzaGFyZWRfc2VjcmV0KTsKKysJCWJyZWFrOworIAlk ZWZhdWx0OgorIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAJCWJyZWFrOworQEAg LTI5MCw2ICszMTAsOCBAQCBvdXQ6CisgCSAgICBzaXplb2Yoa2V4LT5zbnRydXA3NjFfY2xpZW50 X2tleSkpOworIAlleHBsaWNpdF9iemVybyhrZXgtPm1sa2VtNzY4X2NsaWVudF9rZXksCisgCSAg ICBzaXplb2Yoa2V4LT5tbGtlbTc2OF9jbGllbnRfa2V5KSk7CisrCWV4cGxpY2l0X2J6ZXJvKGtl eC0+bWxrZW0xMDI0X2NsaWVudF9rZXksCisrCSAgICBzaXplb2Yoa2V4LT5tbGtlbTEwMjRfY2xp ZW50X2tleSkpOworIAlzc2hidWZfZnJlZShzZXJ2ZXJfaG9zdF9rZXlfYmxvYik7CisgCWZyZWUo c2lnbmF0dXJlKTsKKyAJc3NoYnVmX2ZyZWUodG1wKTsKK0BAIC0zNDgsMTAgKzM3MCw2IEBAIGlu cHV0X2tleF9nZW5faW5pdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gp CisgCQlyID0ga2V4X2VjZGhfZW5jKGtleCwgY2xpZW50X3B1YmtleSwgJnNlcnZlcl9wdWJrZXks CisgCQkgICAgJnNoYXJlZF9zZWNyZXQpOworIAkJYnJlYWs7CistCWNhc2UgS0VYX0tFTV9NTEtF TTc2OEVDREhfU0hBMjU2OgorLQkJciA9IGtleF9rZW1fbWxrZW03NjhlY2RoX2VuYyhrZXgsIGNs aWVudF9wdWJrZXksCistCQkgICAgJnNlcnZlcl9wdWJrZXksICZzaGFyZWRfc2VjcmV0KTsKKy0J CWJyZWFrOworICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KKyAJY2FzZSBLRVhfQzI1NTE5X1NI QTI1NjoKKyAJCWlmIChGSVBTX21vZGUoKSkgeworQEAgLTM3MywxMyArMzkxLDI4IEBAIGlucHV0 X2tleF9nZW5faW5pdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCisg CQlicmVhazsKKyAJY2FzZSBLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1NjoKKyAJCWlmIChG SVBTX21vZGUoKSkgeworLQkJICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4 eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOworLQkJICAgIHIgPSBTU0hfRVJS X0lOVkFMSURfQVJHVU1FTlQ7CisrCQkgICAgRVZQX0tFTSAqbWxrZW0gPSBFVlBfS0VNX2ZldGNo KE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOworKwkJICAgIGlmIChtbGtlbSA9PSBOVUxMKSB7Cisr CQkgICAgICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5v dCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOworKwkJICAgICAgICByID0gU1NIX0VSUl9JTlZBTElE X0FSR1VNRU5UOworKwkJICAgIH0gZWxzZSB7CisrCQkJRVZQX0tFTV9mcmVlKG1sa2VtKTsKKysJ CSAgICAgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZW5jKGtleCwgY2xpZW50X3B1Ymtl eSwKKysJCSAgICAgICAgICAgICZzZXJ2ZXJfcHVia2V5LCAmc2hhcmVkX3NlY3JldCk7CisrCQkg ICAgfQorIAkJfSBlbHNlIHsKKyAJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9lbmMo a2V4LCBjbGllbnRfcHVia2V5LAorIAkJICAgICAgICAmc2VydmVyX3B1YmtleSwgJnNoYXJlZF9z ZWNyZXQpOworIAkJfQorIAkJYnJlYWs7CisrCWNhc2UgS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2 X1NIQTI1NjoKKysJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2VuYyhrZXgsIGNs aWVudF9wdWJrZXksCisrCQkgICAgICAgICZzZXJ2ZXJfcHVia2V5LCAmc2hhcmVkX3NlY3JldCk7 CisrCQlicmVhazsKKysJY2FzZSBLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NDoKKysJ CSAgICByID0ga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9lbmMoa2V4LCBjbGllbnRfcHVia2V5 LAorKwkJICAgICAgICAmc2VydmVyX3B1YmtleSwgJnNoYXJlZF9zZWNyZXQpOworKwkJYnJlYWs7 CisgCWRlZmF1bHQ6CisgCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworIAkJYnJlYWs7 CitkaWZmIC0tZ2l0IGEva2V4bWxrZW03Njh4MjU1MTkuYyBiL2tleG1sa2VtNzY4eDI1NTE5LmMK K2luZGV4IDM2NjU4MTIwZi4uMDNlZmI3ODhmIDEwMDY0NAorLS0tIGEva2V4bWxrZW03Njh4MjU1 MTkuYworKysrIGIva2V4bWxrZW03Njh4MjU1MTkuYworQEAgLTQ1LDE5ICs0NSwzNCBAQAorIAor ICNpZmRlZiBVU0VfTUxLRU03NjhYMjU1MTkKKyAKKysjaW5jbHVkZSAibGliY3J1eF9pbnRlcm5h bC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZWMuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisrI2RlZmlu ZSBGSVBTX0ZBTExCQUNLX1BST1BRICJwcm92aWRlcj1kZWZhdWx0LC1maXBzIgorKworIHN0YXRp YyBpbnQKKy1tbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNpZ25lZCBjaGFyICpwdWJrZXlidWYsIHVu c2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCisrbWxrZW1fa2V5cGFpcl9nZW4oY29uc3QgY2hhciAq YWxnbmFtZSwgdW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCBzaXplX3QgcHVia2V5X3NpemUsCisr CSAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwcml2a2V5YnVmLCBzaXplX3QgcHJpdmtleV9zaXpl KQorIHsKKyAgICAgRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworICAgICBFVlBfUEtFWSAqcGtl eSA9IE5VTEw7CisgICAgIGludCByZXQgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworLSAgICBz aXplX3QgcHVia2V5X3NpemUgPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTLCBw cml2a2V5X3NpemUgPSBjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JFVEtFWUJZVEVTOworKyAgICBz aXplX3QgZ290X3B1Yl9zaXplID0gcHVia2V5X3NpemUsIGdvdF9wcml2X3NpemUgPSBwcml2a2V5 X3NpemU7CisrCisrICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5VTEwsIGFs Z25hbWUsIE5VTEwpOworKworKyAgICBpZiAoY3R4ID09IE5VTEwgJiYgRklQU19tb2RlKCkpIHsK KysJLyogV2UgaGF2ZSBmaWx0ZXJlZCB4MjU1MTkgKyBNTC1LRU0gaW4gRklQUyBtb2RlIGVhcmxp ZXIKKysJICogc28gaWYgd2UgYXJlIGluIEZJUFMgbW9kZSBhbmQgTUwtS0VNIGlzIG5vdCBhdmFp bGFibGUgd2l0aCBkZWZhdWx0IHByb3BxLAorKwkgKiB3ZSBjYW4gZmV0Y2ggaXQgZnJvbSB0aGUg ZGVmYXVsdCBwcm92aWRlciAqLworKyAgICAgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9t X25hbWUoTlVMTCwgYWxnbmFtZSwgRklQU19GQUxMQkFDS19QUk9QUSk7CisrICAgIH0KKyAKKy0g ICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX25hbWUoTlVMTCwgIm1sa2VtNzY4IiwgTlVM TCk7CisgICAgIGlmIChjdHggPT0gTlVMTCkgeworIAlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUjsKKyAJZ290byBlcnI7CitAQCAtNjksMTcgKzg0LDIzIEBAIG1sa2VtNzY4X2tleXBhaXJf Z2VuKHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1ZikK KyAgICAgICAgIGdvdG8gZXJyOworICAgICB9CisgCistICAgIGlmIChFVlBfUEtFWV9nZXRfcmF3 X3B1YmxpY19rZXkocGtleSwgcHVia2V5YnVmLCAmcHVia2V5X3NpemUpIDw9IDAKKy0JfHwgRVZQ X1BLRVlfZ2V0X3Jhd19wcml2YXRlX2tleShwa2V5LCBwcml2a2V5YnVmLCAmcHJpdmtleV9zaXpl KSA8PSAwKSB7CisrICAgIGlmIChFVlBfUEtFWV9nZXRfcmF3X3B1YmxpY19rZXkocGtleSwgTlVM TCwgJmdvdF9wdWJfc2l6ZSkgPD0gMAorKwl8fCBFVlBfUEtFWV9nZXRfcmF3X3ByaXZhdGVfa2V5 KHBrZXksIE5VTEwsICZnb3RfcHJpdl9zaXplKSA8PSAwKSB7CisgCXJldCA9IFNTSF9FUlJfTElC Q1JZUFRPX0VSUk9SOworICAgICAgICAgZ290byBlcnI7CisgICAgIH0KKyAKKy0gICAgaWYgKHBy aXZrZXlfc2l6ZSAhPSBjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JFVEtFWUJZVEVTCistCSAgICB8 fCBwdWJrZXlfc2l6ZSAhPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTKSB7Cisr ICAgIGlmIChwcml2a2V5X3NpemUgIT0gZ290X3ByaXZfc2l6ZSB8fCBwdWJrZXlfc2l6ZSAhPSBn b3RfcHViX3NpemUpIHsKKyAJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisgICAgICAg ICBnb3RvIGVycjsKKyAgICAgfQorKworKyAgICBpZiAoRVZQX1BLRVlfZ2V0X3Jhd19wdWJsaWNf a2V5KHBrZXksIHB1YmtleWJ1ZiwgJmdvdF9wdWJfc2l6ZSkgPD0gMAorKwl8fCBFVlBfUEtFWV9n ZXRfcmF3X3ByaXZhdGVfa2V5KHBrZXksIHByaXZrZXlidWYsICZnb3RfcHJpdl9zaXplKSA8PSAw KSB7CisrCXJldCA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworKyAgICAgICAgZ290byBlcnI7 CisrICAgIH0KKysKKyAgICAgcmV0ID0gMDsKKyAKKyAgZXJyOgorQEAgLTkxLDI3ICsxMTIsNTcg QEAgbWxrZW03Njhfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCB1bnNpZ25l ZCBjaGFyICpwcml2a2V5YnVmKQorIH0KKyAKKyBzdGF0aWMgaW50CistbWxrZW03NjhfZW5jYXBf c2VjcmV0KGNvbnN0IHVfY2hhciAqcHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwgdV9jaGFyICpv dXQpCisrbWxrZW03Njhfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCB1bnNp Z25lZCBjaGFyICpwcml2a2V5YnVmKQorK3sKKysJcmV0dXJuIG1sa2VtX2tleXBhaXJfZ2VuKCJt bGtlbTc2OCIsIHB1YmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUywK KysJCQlwcml2a2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JFVEtFWUJZVEVTKTsKKyt9 CisrCisrc3RhdGljIGludAorK21sa2VtMTAyNF9rZXlwYWlyX2dlbih1bnNpZ25lZCBjaGFyICpw dWJrZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCisreworKwlyZXR1cm4gbWxrZW1f a2V5cGFpcl9nZW4oIm1sa2VtMTAyNCIsIHB1YmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTEwMjRf UFVCTElDS0VZQllURVMsCisrCQkJcHJpdmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTEwMjRfU0VD UkVUS0VZQllURVMpOworK30KKysKKytzdGF0aWMgaW50CisrbWxrZW1fZW5jYXBfc2VjcmV0KGNv bnN0IGNoYXIgKm1sa2VtX2FsZywgY29uc3QgdV9jaGFyICpwdWJrZXlidWYsIHVfY2hhciAqc2Vj cmV0LCB1X2NoYXIgKm91dCkKKyB7CisgICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKKyAgICAg RVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworICAgICBpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxf RVJST1I7CistICAgIHNpemVfdCBvdXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRF WFRCWVRFUywKKy0JICAgc2VjcmV0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUzsKKysg ICAgc2l6ZV90IG91dGxlbiwgZXhwZWN0ZWRfb3V0bGVuLCBwdWJsZW4sIHNlY3JldGxlbiA9IGNy eXB0b19rZW1fbWxrZW03NjhfQllURVM7CisrICAgIGludCBmaXBzX2ZhbGxiYWNrID0gMDsKKysK KysgICAgaWYgKHN0cmNtcChtbGtlbV9hbGcsICJtbGtlbTc2OCIpID09IDApIHsKKysJICAgIG91 dGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTOworKwkgICAgcHVibGVu ID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUzsKKysgICAgfSBlbHNlIGlmIChz dHJjbXAobWxrZW1fYWxnLCAibWxrZW0xMDI0IikgPT0gMCkgeworKwkgICAgb3V0bGVuID0gY3J5 cHRvX2tlbV9tbGtlbTEwMjRfQ0lQSEVSVEVYVEJZVEVTOworKwkgICAgcHVibGVuID0gY3J5cHRv X2tlbV9tbGtlbTEwMjRfUFVCTElDS0VZQllURVM7CisrICAgIH0gZWxzZQorKwkgICAgcmV0dXJu IHI7CisgCistICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3B1YmxpY19rZXlfZXgoTlVMTCwg Im1sa2VtNzY4IiwgTlVMTCwKKy0JCSAgICBwdWJrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03Njhf UFVCTElDS0VZQllURVMpOworKyAgICBleHBlY3RlZF9vdXRsZW4gPSBvdXRsZW47CisrCisrICAg IHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3B1YmxpY19rZXlfZXgoTlVMTCwgbWxrZW1fYWxnLCBO VUxMLAorKwkJICAgIHB1YmtleWJ1ZiwgcHVibGVuKTsKKysgICAgaWYgKHBrZXkgPT0gTlVMTCAm JiBGSVBTX21vZGUoKSkgeworKyAgICAgICAgcGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHVibGlj X2tleV9leChOVUxMLCBtbGtlbV9hbGcsIEZJUFNfRkFMTEJBQ0tfUFJPUFEsCisrCQkgICAgcHVi a2V5YnVmLCBwdWJsZW4pOworKwlmaXBzX2ZhbGxiYWNrID0gMTsKKysgICAgfQorICAgICBpZiAo cGtleSA9PSBOVUxMKSB7CisgCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKyAJZ290byBl cnI7CisgICAgIH0KKyAKKy0gICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX3BrZXkoTlVM TCwgcGtleSwgTlVMTCk7CisrICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5V TEwsIHBrZXksIGZpcHNfZmFsbGJhY2sgPyBGSVBTX0ZBTExCQUNLX1BST1BRIDogTlVMTCk7Cisg ICAgIGlmIChjdHggPT0gTlVMTAorIAl8fCBFVlBfUEtFWV9lbmNhcHN1bGF0ZV9pbml0KGN0eCwg TlVMTCkgPD0gMAorLSAgICAgICAgfHwgRVZQX1BLRVlfZW5jYXBzdWxhdGUoY3R4LCBvdXQsICZv dXRsZW4sIHNlY3JldCwgJnNlY3JldGxlbikgPD0gMAorKyAgICAgICAgfHwgRVZQX1BLRVlfZW5j YXBzdWxhdGUoY3R4LCBvdXQsICZleHBlY3RlZF9vdXRsZW4sIHNlY3JldCwgJnNlY3JldGxlbikg PD0gMAorIAl8fCBzZWNyZXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUworLQl8fCBv dXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMpIHsKKysJfHwgb3V0 bGVuICE9IGV4cGVjdGVkX291dGxlbikgeworIAlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7 CisgCWdvdG8gZXJyOworICAgICB9CitAQCAtMTI3LDI1ICsxNzgsNDUgQEAgbWxrZW03NjhfZW5j YXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwgdV9jaGFy ICpvdXQpCisgfQorIAorIHN0YXRpYyBpbnQKKy1tbGtlbTc2OF9kZWNhcF9zZWNyZXQoY29uc3Qg dV9jaGFyICpwcml2a2V5YnVmLCBjb25zdCB1X2NoYXIgKndyYXBwZWQsIHVfY2hhciAqc2VjcmV0 KQorK21sa2VtNzY4X2VuY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnB1YmtleWJ1ZiwgdV9jaGFy ICpzZWNyZXQsIHVfY2hhciAqb3V0KQorK3sKKysJcmV0dXJuIG1sa2VtX2VuY2FwX3NlY3JldCgi bWxrZW03NjgiLCBwdWJrZXlidWYsIHNlY3JldCwgb3V0KTsKKyt9CisrCisrc3RhdGljIGludAor K21sa2VtMTAyNF9lbmNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwdWJrZXlidWYsIHVfY2hhciAq c2VjcmV0LCB1X2NoYXIgKm91dCkKKyt7CisrCXJldHVybiBtbGtlbV9lbmNhcF9zZWNyZXQoIm1s a2VtMTAyNCIsIHB1YmtleWJ1Ziwgc2VjcmV0LCBvdXQpOworK30KKysKKytzdGF0aWMgaW50Cisr bWxrZW1fZGVjYXBfc2VjcmV0KGNvbnN0IGNoYXIgKmFsZ25hbWUsCisrICAgIGNvbnN0IHVfY2hh ciAqcHJpdmtleWJ1Ziwgc2l6ZV90IHByaXZrZXlfbGVuLAorKyAgICBjb25zdCB1X2NoYXIgKndy YXBwZWQsIHNpemVfdCB3cmFwcGVkX2xlbiwKKysgICAgdV9jaGFyICpzZWNyZXQpCisgeworICAg ICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisgICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsK KyAgICAgaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworLSAgICBzaXplX3Qgd3JhcHBl ZGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTLAorLQkgICBzZWNyZXRs ZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTOworKyAgICBzaXplX3Qgc2VjcmV0bGVuID0g Y3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUzsKKysgICAgaW50IGZpcHNfZmFsbGJhY2sgPSAwOwor IAorLSAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wcml2YXRlX2tleV9leChOVUxMLCAibWxr ZW03NjgiLCBOVUxMLAorLQkJICAgIHByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03NjhfU0VD UkVUS0VZQllURVMpOworKyAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wcml2YXRlX2tleV9l eChOVUxMLCBhbGduYW1lLAorKwkJICAgIE5VTEwsIHByaXZrZXlidWYsIHByaXZrZXlfbGVuKTsK KysgICAgaWYgKHBrZXkgPT0gTlVMTCAmJiBGSVBTX21vZGUoKSkgeworKyAgICAgICAgcGtleSA9 IEVWUF9QS0VZX25ld19yYXdfcHJpdmF0ZV9rZXlfZXgoTlVMTCwgYWxnbmFtZSwKKysJCSAgICBG SVBTX0ZBTExCQUNLX1BST1BRLCBwcml2a2V5YnVmLCBwcml2a2V5X2xlbik7CisrCWZpcHNfZmFs bGJhY2sgPSAxOworKyAgICB9CisgICAgIGlmIChwa2V5ID09IE5VTEwpIHsKKyAJciA9IFNTSF9F UlJfTElCQ1JZUFRPX0VSUk9SOworIAlnb3RvIGVycjsKKyAgICAgfQorIAorLSAgICBjdHggPSBF VlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5LCBOVUxMKTsKKysgICAgY3R4ID0g RVZQX1BLRVlfQ1RYX25ld19mcm9tX3BrZXkoTlVMTCwgcGtleSwgZmlwc19mYWxsYmFjayA/IEZJ UFNfRkFMTEJBQ0tfUFJPUFEgOiBOVUxMKTsKKyAgICAgaWYgKGN0eCA9PSBOVUxMCisgCXx8IEVW UF9QS0VZX2RlY2Fwc3VsYXRlX2luaXQoY3R4LCBOVUxMKSA8PSAwCistICAgICAgICB8fCBFVlBf UEtFWV9kZWNhcHN1bGF0ZShjdHgsIHNlY3JldCwgJnNlY3JldGxlbiwgd3JhcHBlZCwgd3JhcHBl ZGxlbikgPD0gMAorKyAgICAgICAgfHwgRVZQX1BLRVlfZGVjYXBzdWxhdGUoY3R4LCBzZWNyZXQs ICZzZWNyZXRsZW4sIHdyYXBwZWQsIHdyYXBwZWRfbGVuKSA8PSAwCisgCXx8IHNlY3JldGxlbiAh PSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTKSB7CisgCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUjsKKyAJZ290byBlcnI7CitAQCAtMTYyLDYgKzIzMywyMCBAQCBtbGtlbTc2OF9kZWNhcF9z ZWNyZXQoY29uc3QgdV9jaGFyICpwcml2a2V5YnVmLCBjb25zdCB1X2NoYXIgKndyYXBwZWQsIHVf Y2hhciAqcworICAgICByZXR1cm4gcjsKKyB9CisgCisrc3RhdGljIGludAorK21sa2VtNzY4X2Rl Y2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNvbnN0IHVfY2hhciAqd3JhcHBl ZCwgdV9jaGFyICpzZWNyZXQpCisreworKwlyZXR1cm4gbWxrZW1fZGVjYXBfc2VjcmV0KCJtbGtl bTc2OCIsIHByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03NjhfU0VDUkVUS0VZQllURVMsCisr CQl3cmFwcGVkLCBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUywgc2VjcmV0KTsK Kyt9CisrCisrc3RhdGljIGludAorK21sa2VtMTAyNF9kZWNhcF9zZWNyZXQoY29uc3QgdV9jaGFy ICpwcml2a2V5YnVmLCBjb25zdCB1X2NoYXIgKndyYXBwZWQsIHVfY2hhciAqc2VjcmV0KQorK3sK KysJcmV0dXJuIG1sa2VtX2RlY2FwX3NlY3JldCgibWxrZW0xMDI0IiwgcHJpdmtleWJ1ZiwgY3J5 cHRvX2tlbV9tbGtlbTEwMjRfU0VDUkVUS0VZQllURVMsCisrCQl3cmFwcGVkLCBjcnlwdG9fa2Vt X21sa2VtMTAyNF9DSVBIRVJURVhUQllURVMsIHNlY3JldCk7CisrfQorKworIGludAorIGtleF9r ZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCisgeworQEAgLTMyNyw3 ICs0MTIsNyBAQCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2VuYyhzdHJ1Y3Qga2V4ICprZXgsCisg CXVfY2hhciBoYXNoW1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07CisgCXNpemVfdCBuZWVkOworIAlp bnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CistCXN0cnVjdCBsaWJjcnV4X21sa2VtNzY4 X2VuY19yZXN1bHQgZW5jOyAvKiBGSVhNRSAqLworKwlsaWJjcnV4X21sa2VtNzY4X2VuY19yZXN1 bHQgZW5jOworIAorIAkqc2VydmVyX2Jsb2JwID0gTlVMTDsKKyAJKnNoYXJlZF9zZWNyZXRwID0g TlVMTDsKK0BAIC01MjksNiArNjE0LDUyMCBAQCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2RlYyhz dHJ1Y3Qga2V4ICprZXgsCisgCXJldHVybiByOworICNlbmRpZgorIH0KKysKKysjZGVmaW5lIE5J U1RfUDI1Nl9DT01QUkVTU0VEX0xFTiAgIDMzCisrI2RlZmluZSBOSVNUX1AyNTZfVU5DT01QUkVT U0VEX0xFTiA2NQorKyNkZWZpbmUgTklTVF9QMzg0X0NPTVBSRVNTRURfTEVOICAgNDkKKysjZGVm aW5lIE5JU1RfUDM4NF9VTkNPTVBSRVNTRURfTEVOIDk3CisrI2RlZmluZSBOSVNUX0JVRl9NQVhf U0laRSBOSVNUX1AzODRfVU5DT01QUkVTU0VEX0xFTgorKworK3N0YXRpYyBjb25zdCBjaGFyIGVj MjU2W10gPSAiUC0yNTYiOworK3N0YXRpYyBjb25zdCBjaGFyIGVjMzg0W10gPSAiUC0zODQiOwor K3N0YXRpYyBjb25zdCBjaGFyICpsZW4yY3VydmVfbmFtZShzaXplX3QgbGVuKQorK3sKKysJc3dp dGNoIChsZW4pIHsKKysJCWNhc2UgTklTVF9QMjU2X0NPTVBSRVNTRURfTEVOOgorKwkJY2FzZSBO SVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTjoKKysJCQlyZXR1cm4gZWMyNTY7CisrCQkJYnJlYWs7 CisrCQljYXNlIE5JU1RfUDM4NF9DT01QUkVTU0VEX0xFTjoKKysJCWNhc2UgTklTVF9QMzg0X1VO Q09NUFJFU1NFRF9MRU46CisrCQkJcmV0dXJuIGVjMzg0OworKwkJCWJyZWFrOworKwl9CisrCXJl dHVybiBOVUxMOworK30KKysKKytzdGF0aWMgRVZQX1BLRVkgKgorK2J1ZjJuaXN0X2tleShjb25z dCB1bnNpZ25lZCBjaGFyICpwdWJfa2V5X2J1Ziwgc2l6ZV90IHB1Yl9rZXlfbGVuKQorK3sKKysJ RVZQX1BLRVkgKnBrZXkgPSBOVUxMOworKwlFVlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7CisrCU9T U0xfUEFSQU0gcGFyYW1zWzNdOworKwljb25zdCBjaGFyICpjdXJ2ZV9uYW1lID0gbGVuMmN1cnZl X25hbWUocHViX2tleV9sZW4pOworKworKwlpZiAoY3VydmVfbmFtZSA9PSBOVUxMKQorKwkJcmV0 dXJuIE5VTEw7CisrCisrCWN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5VTEwsICJF QyIsIE5VTEwpOworKwlpZiAoIWN0eCkKKysJCWdvdG8gZXJyOworKworKwlpZiAoRVZQX1BLRVlf ZnJvbWRhdGFfaW5pdChjdHgpIDw9IDApCisrCQlnb3RvIGVycjsKKysKKysJcGFyYW1zWzBdID0g T1NTTF9QQVJBTV9jb25zdHJ1Y3RfdXRmOF9zdHJpbmcoT1NTTF9QS0VZX1BBUkFNX0dST1VQX05B TUUsIGN1cnZlX25hbWUsIDApOworKwlwYXJhbXNbMV0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF9v Y3RldF9zdHJpbmcoCisrCQkJT1NTTF9QS0VZX1BBUkFNX1BVQl9LRVksICh2b2lkICopcHViX2tl eV9idWYsIHB1Yl9rZXlfbGVuKTsKKysJcGFyYW1zWzJdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3Rf ZW5kKCk7CisrCisrCWlmIChFVlBfUEtFWV9mcm9tZGF0YShjdHgsICZwa2V5LCBFVlBfUEtFWV9Q VUJMSUNfS0VZLCBwYXJhbXMpIDw9IDApCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfQ1RY X2ZyZWUoY3R4KTsKKysJcmV0dXJuIHBrZXk7CisrCisrZXJyOgorKwlFVlBfUEtFWV9DVFhfZnJl ZShjdHgpOworKwlFVlBfUEtFWV9mcmVlKHBrZXkpOworKwlyZXR1cm4gTlVMTDsKKyt9CisrCisr c3RhdGljIGludAorK2tleF9uaXN0X3NoYXJlZF9rZXlfZXh0KEVWUF9QS0VZICpwcml2X2tleSwK KysgICAgY29uc3QgdV9jaGFyICpwdWJfa2V5X2J1Ziwgc2l6ZV90IHB1Yl9rZXlfbGVuLCBzdHJ1 Y3Qgc3NoYnVmICpvdXQpCisreworKwlFVlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7CisrCXVuc2ln bmVkIGNoYXIgKnNoYXJlZF9zZWNyZXQgPSBOVUxMOworKwlzaXplX3Qgc2hhcmVkX3NlY3JldF9s ZW4gPSAwOworKwlFVlBfUEtFWSAqcGVlcl9rZXkgPSBidWYybmlzdF9rZXkocHViX2tleV9idWYs IHB1Yl9rZXlfbGVuKTsKKysJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKworKwlp ZiAocGVlcl9rZXkgPT0gTlVMTCkKKysJCXJldHVybiBTU0hfRVJSX0tFWV9MRU5HVEg7CisrCisr CWN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHByaXZfa2V5LCBOVUxMKTsK KysJaWYgKCFjdHgpCisrCQlnb3RvIGVuZDsKKysKKysJaWYgKChFVlBfUEtFWV9kZXJpdmVfaW5p dChjdHgpIDw9IDApCisrCQl8fCBFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXIoY3R4LCBwZWVyX2tl eSkgPD0gMAorKwkJfHwgRVZQX1BLRVlfZGVyaXZlKGN0eCwgTlVMTCwgJnNoYXJlZF9zZWNyZXRf bGVuKSA8PSAwKQorKwkJZ290byBlbmQ7CisrCisrCXNoYXJlZF9zZWNyZXQgPSBPUEVOU1NMX21h bGxvYyhzaGFyZWRfc2VjcmV0X2xlbik7CisrCWlmIChzaGFyZWRfc2VjcmV0ID09IE5VTEwpCisr CQlnb3RvIGVuZDsKKysKKysJaWYgKEVWUF9QS0VZX2Rlcml2ZShjdHgsIHNoYXJlZF9zZWNyZXQs ICZzaGFyZWRfc2VjcmV0X2xlbikgPD0gMCkKKysJCWdvdG8gZW5kOworKworKwlpZiAoKHIgPSBz c2hidWZfcHV0KG91dCwgc2hhcmVkX3NlY3JldCwgc2hhcmVkX3NlY3JldF9sZW4pKSAhPSAwKQor KwkJZ290byBlbmQ7CisrCisrCXIgPSAwOworKworK2VuZDoKKysJRVZQX1BLRVlfZnJlZShwZWVy X2tleSk7CisrCWlmIChzaGFyZWRfc2VjcmV0KQorKwkJT1BFTlNTTF9jbGVhcl9mcmVlKHNoYXJl ZF9zZWNyZXQsIHNoYXJlZF9zZWNyZXRfbGVuKTsKKysJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsK KysKKysJcmV0dXJuIHI7CisrfQorKworK3N0YXRpYyBFVlBfUEtFWSAqCisrbmlzdF9wa2V5X2tl eWdlbihzaXplX3QgcHViX2tleV9sZW4pCisreworKwljb25zdCBjaGFyICpjdXJ2ZV9uYW1lID0g bGVuMmN1cnZlX25hbWUocHViX2tleV9sZW4pOworKwlFVlBfUEtFWV9DVFggKnBjdHggPSBOVUxM OworKwlFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisrCU9TU0xfUEFSQU0gcGFyYW1zWzJdOworKwor KwlpZiAoY3VydmVfbmFtZSA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCXBjdHggPSBF VlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiRUMiLCBOVUxMKTsKKysJaWYgKCFwY3R4 KQorKwkJcmV0dXJuIE5VTEw7CisrCisrCWlmIChFVlBfUEtFWV9rZXlnZW5faW5pdChwY3R4KSA8 PSAwKSB7CisrCQlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsKKysJCXJldHVybiBOVUxMOworKwl9 CisrCisrCXBhcmFtc1swXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X3V0Zjhfc3RyaW5nKE9TU0xf UEtFWV9QQVJBTV9HUk9VUF9OQU1FLCBjdXJ2ZV9uYW1lLCAwKTsKKysJcGFyYW1zWzFdID0gT1NT TF9QQVJBTV9jb25zdHJ1Y3RfZW5kKCk7CisrCisrCWlmIChFVlBfUEtFWV9DVFhfc2V0X3BhcmFt cyhwY3R4LCBwYXJhbXMpIDw9IDAKKysJICAgIHx8IEVWUF9QS0VZX2tleWdlbihwY3R4LCAmcGtl eSkgPD0gMCkgeworKwkJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0eCk7CisrCQlyZXR1cm4gTlVMTDsK KysJfQorKworKwlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsKKysJcmV0dXJuIHBrZXk7CisrfQor KworK3N0YXRpYyBzaXplX3QgZGVjb21wcmVzc19wdWJfa2V5KHZvaWQgKnB1Yiwgc2l6ZV90IGNv bXByZXNzZWRfbGVuLCBzaXplX3QgZGVjb21wcmVzc2VkX2xlbikKKyt7CisrICAgIEVDX0dST1VQ ICpncm91cCA9IE5VTEw7CisrICAgIEVDX1BPSU5UICpwb2ludCA9IE5VTEw7CisrICAgIEJOX0NU WCAqY3R4ID0gTlVMTDsKKysgICAgc2l6ZV90IGxlbiA9IDA7CisrICAgIGludCBncm91cF9uaWQg PSBOSURfdW5kZWY7CisrCisrICAgIHN3aXRjaCAoY29tcHJlc3NlZF9sZW4pIHsKKysgICAgY2Fz ZSBOSVNUX1AyNTZfQ09NUFJFU1NFRF9MRU46CisrICAgICAgICAgZ3JvdXBfbmlkID0gTklEX1g5 XzYyX3ByaW1lMjU2djE7CisrICAgICAgIGJyZWFrOworKyAgICBjYXNlIE5JU1RfUDM4NF9DT01Q UkVTU0VEX0xFTjoKKysgICAgICAgICBncm91cF9uaWQgPSBOSURfc2VjcDM4NHIxOworKyAgICAg ICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgcmV0dXJuIDA7CisrICAgICAgIGJyZWFr OworKyAgICB9CisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKKysgICAgZ3JvdXAgPSBFQ19H Uk9VUF9uZXdfYnlfY3VydmVfbmFtZShncm91cF9uaWQpOworKyAgICBpZiAoY3R4ID09IE5VTEwg fHwgZ3JvdXAgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBwb2ludCA9IEVD X1BPSU5UX25ldyhncm91cCk7CisrICAgIGlmIChwb2ludCA9PSBOVUxMKQorKyAgICAgICAgZ290 byBlcnI7CisrCisrICAgIGlmICghRUNfUE9JTlRfb2N0MnBvaW50KGdyb3VwLCBwb2ludCwgcHVi LCBjb21wcmVzc2VkX2xlbiwgY3R4KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBsZW4g PSBFQ19QT0lOVF9wb2ludDJvY3QoZ3JvdXAsIHBvaW50LCBQT0lOVF9DT05WRVJTSU9OX1VOQ09N UFJFU1NFRCwgcHViLCBkZWNvbXByZXNzZWRfbGVuLCBjdHgpOworKworK2VycjoKKysgICAgRUNf UE9JTlRfZnJlZShwb2ludCk7CisrICAgIEVDX0dST1VQX2ZyZWUoZ3JvdXApOworKyAgICBCTl9D VFhfZnJlZShjdHgpOworKworKyAgICByZXR1cm4gbGVuOworK30KKysKKytzdGF0aWMgaW50Cisr Z2V0X3VuY29tcHJlc3NlZF9lY19wdWJrZXkoRVZQX1BLRVkgKnBrZXksIHVuc2lnbmVkIGNoYXIg KmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCisreworKyAgICBPU1NMX1BBUkFNIHBhcmFtc1syXTsKKysg ICAgc2l6ZV90IHJlcXVpcmVkX2xlbiA9IDAsIG91dF9sZW4gPSAwOworKworKyAgICBwYXJhbXNb MF0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF91dGY4X3N0cmluZygKKysgICAgICAgIE9TU0xfUEtF WV9QQVJBTV9FQ19QT0lOVF9DT05WRVJTSU9OX0ZPUk1BVCwKKysgICAgICAgICJ1bmNvbXByZXNz ZWQiLCAwKTsKKysgICAgcGFyYW1zWzFdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3RfZW5kKCk7Cisr CisrICAgIGlmIChFVlBfUEtFWV9zZXRfcGFyYW1zKHBrZXksIHBhcmFtcykgPD0gMAorKwkgICAg fHwgRVZQX1BLRVlfZ2V0X29jdGV0X3N0cmluZ19wYXJhbShwa2V5LCBPU1NMX1BLRVlfUEFSQU1f UFVCX0tFWSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYs IGJ1Zl9sZW4sICZyZXF1aXJlZF9sZW4pIDw9IDApIHsKKysgICAgICAgIHJldHVybiBTU0hfRVJS X0xJQkNSWVBUT19FUlJPUjsKKysgICAgfQorKworKyAgICBpZiAocmVxdWlyZWRfbGVuICE9IGJ1 Zl9sZW4pIHsKKysgICAgICAgIC8qIFJlZCBIYXQgY2VydGlmaWVkIEZJUFMgcHJvdmlkZXIgaWdu b3JlcyBPU1NMX1BLRVlfUEFSQU1fRUNfUE9JTlRfQ09OVkVSU0lPTl9GT1JNQVQKKysJICogV2Ug bWF5IGhhdmUgdG8gcGVyZm9ybSB0aGUgY29udmVyc2lvbiBtYW51YWxseSAqLworKyAgICAgICAg aWYgKGxlbjJjdXJ2ZV9uYW1lKHJlcXVpcmVkX2xlbikgPT0gbGVuMmN1cnZlX25hbWUoYnVmX2xl bikpIHsKKysJICAgIG91dF9sZW4gPSBkZWNvbXByZXNzX3B1Yl9rZXkoYnVmLCByZXF1aXJlZF9s ZW4sIGJ1Zl9sZW4pOworKwkgICAgaWYgKG91dF9sZW4gIT0gYnVmX2xlbikgeworKwkgICAgICAg IGRlYnVnX2YoIkVycm9yIGRlY29tcHJlc3NpbmcgdGhlIGNvbXByZXNzZWQgcHVibGljIGtleSIp OworKwkgICAgICAgIHJldHVybiBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJICAgIH0gZWxz ZSB7CisrCQlyZXR1cm4gMDsKKysJICAgIH0KKysJfSBlbHNlIHsKKysJICAgIGRlYnVnX2YoIlVu ZXhwZWN0ZWQgbGVuZ3RoIG9mIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5OiBleHBlY3RlZCAlZCwg Z290ICVkIiwgYnVmX2xlbiwgcmVxdWlyZWRfbGVuKTsKKysJICAgIHJldHVybiBTU0hfRVJSX0xJ QkNSWVBUT19FUlJPUjsKKysJfQorKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KKysvKiBu aXN0X2J5dGVzX2xlbiBzaG91bGQgYWx3YXlzIGJlIHVuY29tcHJlc3NlZCAqLworK3N0YXRpYyBp bnQKKytrZXhfa2VtX21sa2VtX25pc3Rfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgsIHNpemVfdCBt bGtlbV9ieXRlc19sZW4sIHNpemVfdCBuaXN0X2J5dGVzX2xlbikKKyt7CisrCXN0cnVjdCBzc2hi dWYgKmJ1ZiA9IE5VTEw7CisrCXVfY2hhciAqY3AgPSBOVUxMOworKwlzaXplX3QgbmVlZDsKKysJ aW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKwl1X2NoYXIgKmNsaWVudF9rZXkgPSBO VUxMOworKworKwlpZiAoKGJ1ZiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCXJldHVybiBT U0hfRVJSX0FMTE9DX0ZBSUw7CisrCW5lZWQgPSBtbGtlbV9ieXRlc19sZW4gKyBuaXN0X2J5dGVz X2xlbjsKKysJaWYgKChyID0gc3NoYnVmX3Jlc2VydmUoYnVmLCBuZWVkLCAmY3ApKSAhPSAwKQor KwkJZ290byBvdXQ7CisrCisrCWlmIChtbGtlbV9ieXRlc19sZW4gPT0gY3J5cHRvX2tlbV9tbGtl bTc2OF9QVUJMSUNLRVlCWVRFUykgeworKwkJY2xpZW50X2tleSA9IGtleC0+bWxrZW03NjhfY2xp ZW50X2tleTsKKysJCXIgPSBtbGtlbTc2OF9rZXlwYWlyX2dlbihjcCwgY2xpZW50X2tleSk7Cisr CX0KKysKKysJaWYgKG1sa2VtX2J5dGVzX2xlbiA9PSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJM SUNLRVlCWVRFUykgeworKwkJY2xpZW50X2tleSA9IGtleC0+bWxrZW0xMDI0X2NsaWVudF9rZXk7 CisrCQlyID0gbWxrZW0xMDI0X2tleXBhaXJfZ2VuKGNwLCBjbGllbnRfa2V5KTsKKysJfQorKwor KwlpZiAoY2xpZW50X2tleSA9PSBOVUxMKQorKwkJZ290byBvdXQ7CisrCisrCWlmIChyICE9IDAp CisrCQlnb3RvIG91dDsKKysjaWZkZWYgREVCVUdfS0VYRUNESAorKwlkdW1wX2RpZ2VzdCgiY2xp ZW50IHB1YmxpYyBrZXkgbWxrZW1YWFg6IiwgY3AsIG1sa2VtX2J5dGVzX2xlbik7CisrI2VuZGlm CisrCWNwICs9IG1sa2VtX2J5dGVzX2xlbjsKKysJaWYgKChrZXgtPmVjX2h5YnJpZF9jbGllbnRf a2V5ID0gbmlzdF9wa2V5X2tleWdlbihuaXN0X2J5dGVzX2xlbikpID09IE5VTEwpCisrCQlnb3Rv IG91dDsKKysKKysJaWYgKChyID0gZ2V0X3VuY29tcHJlc3NlZF9lY19wdWJrZXkoa2V4LT5lY19o eWJyaWRfY2xpZW50X2tleSwgY3AsIG5pc3RfYnl0ZXNfbGVuKSkgIT0gMCkKKysJCWdvdG8gb3V0 OworKworKyNpZmRlZiBERUJVR19LRVhFQ0RICisrCWR1bXBfZGlnZXN0KCJjbGllbnQgcHVibGlj IGtleSBOSVNUOiIsIGNwLCBuaXN0X2J5dGVzX2xlbik7CisrI2VuZGlmCisrCS8qIHN1Y2Nlc3Mg Ki8KKysJciA9IDA7CisrCWtleC0+Y2xpZW50X3B1YiA9IGJ1ZjsKKysJYnVmID0gTlVMTDsKKysg b3V0OgorKwlzc2hidWZfZnJlZShidWYpOworKyAgICAgICAgaWYgKHIgPT0gU1NIX0VSUl9MSUJD UllQVE9fRVJST1IpCisrCSAgIEVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKKysKKysJcmV0 dXJuIHI7CisrfQorKworK3N0YXRpYyBpbnQKKytrZXhfa2VtX21sa2VtX25pc3RfZW5jKHN0cnVj dCBrZXggKmtleCwgY29uc3QgY2hhciAqbmlzdF9jdXJ2ZSwKKysgICBjb25zdCBzdHJ1Y3Qgc3No YnVmICpjbGllbnRfYmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNlcnZlcl9ibG9icCwKKysgICBzdHJ1 Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCisreworKwlzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJf YmxvYiA9IE5VTEw7CisrCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7CisrCWNvbnN0IHVfY2hh ciAqY2xpZW50X3B1YjsKKysJdV9jaGFyIHNlcnZlcl9wdWJbTklTVF9CVUZfTUFYX1NJWkVdOwor Kwl1X2NoYXIgZW5jX291dFtjcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVNdOwor Kwl1X2NoYXIgc2VjcmV0W2NyeXB0b19rZW1fbWxrZW03NjhfQllURVNdOworKwlFVlBfUEtFWSAq c2VydmVyX2tleSA9IE5VTEw7CisrCXVfY2hhciBoYXNoW1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07 CisrCXNpemVfdCBjbGllbnRfYnVmX2xlbiwgbWxrZW1fYnVmX2xlbiwgZWNkaF9idWZfbGVuLCBz ZXJ2ZXJfa2V5X2xlbiwgZW5jX291dF9sZW47CisrCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9F UlJPUjsKKysKKysJKnNlcnZlcl9ibG9icCA9IE5VTEw7CisrCSpzaGFyZWRfc2VjcmV0cCA9IE5V TEw7CisrCisrCWNsaWVudF9idWZfbGVuID0gc3NoYnVmX2xlbihjbGllbnRfYmxvYik7CisrCS8q IGNsaWVudF9ibG9iIGNvbnRhaW5zIGJvdGggS0VNIGFuZCBFQ0RIIGNsaWVudCBwdWJrZXlzICov CisrCWlmIChzdHJjbXAobmlzdF9jdXJ2ZSwgIlAtMjU2IikgPT0gMCkgeworKwkJaWYgKGNyeXB0 b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMgPiBjbGllbnRfYnVmX2xlbikKKysJCQlyZXR1 cm4gcjsKKysKKysJCWVjZGhfYnVmX2xlbiA9IGNsaWVudF9idWZfbGVuIC0gY3J5cHRvX2tlbV9t bGtlbTc2OF9QVUJMSUNLRVlCWVRFUzsKKysJCWlmIChlY2RoX2J1Zl9sZW4gIT0gTklTVF9QMjU2 X0NPTVBSRVNTRURfTEVOICYmCisrCQkJZWNkaF9idWZfbGVuICE9IE5JU1RfUDI1Nl9VTkNPTVBS RVNTRURfTEVOKQorKwkJCXJldHVybiByOworKwkJbWxrZW1fYnVmX2xlbiA9IGNyeXB0b19rZW1f bWxrZW03NjhfUFVCTElDS0VZQllURVM7CisrCQllbmNfb3V0X2xlbiA9IGNyeXB0b19rZW1fbWxr ZW03NjhfQ0lQSEVSVEVYVEJZVEVTOworKwkJc2VydmVyX2tleV9sZW4gPSBOSVNUX1AyNTZfVU5D T01QUkVTU0VEX0xFTjsKKysJfSBlbHNlIGlmIChzdHJjbXAobmlzdF9jdXJ2ZSwgIlAtMzg0Iikg PT0gMCkgeworKwkJaWYgKGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTID4gY2xp ZW50X2J1Zl9sZW4pCisrCQkJcmV0dXJuIHI7CisrCisrCQllY2RoX2J1Zl9sZW4gPSBjbGllbnRf YnVmX2xlbiAtIGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTOworKwkJaWYgKGVj ZGhfYnVmX2xlbiAhPSBOSVNUX1AzODRfQ09NUFJFU1NFRF9MRU4gJiYKKysJCQllY2RoX2J1Zl9s ZW4gIT0gTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU4pCisrCQkJcmV0dXJuIHI7CisrCQltbGtl bV9idWZfbGVuID0gY3J5cHRvX2tlbV9tbGtlbTEwMjRfUFVCTElDS0VZQllURVM7CisrCQllbmNf b3V0X2xlbiA9IGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUzsKKysJCXNlcnZl cl9rZXlfbGVuID0gTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU47CisrCX0gZWxzZQorKwkJcmV0 dXJuIHI7CisrCisrCWNsaWVudF9wdWIgPSBzc2hidWZfcHRyKGNsaWVudF9ibG9iKTsKKysjaWZk ZWYgREVCVUdfS0VYRUNESAorKwlkdW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgbWxrZW06 IiwgY2xpZW50X3B1YiwgbWxrZW1fYnVmX2xlbik7CisrCWR1bXBfZGlnZXN0KCJjbGllbnQgcHVi bGljIGtleSBOSVNUOiIsIGNsaWVudF9wdWIgKyBtbGtlbV9idWZfbGVuLCBlY2RoX2J1Zl9sZW4p OworKyNlbmRpZgorKworKwkvKiBhbGxvY2F0ZSBidWZmZXIgZm9yIGNvbmNhdGVuYXRpb24gb2Yg S0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5ICovCisrCS8qIHRoZSBidWZmZXIgd2lsbCBiZSBo YXNoZWQgYW5kIHRoZSByZXN1bHQgaXMgdGhlIHNoYXJlZCBzZWNyZXQgKi8KKysJaWYgKChidWYg PSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKKysJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Cisr CQlnb3RvIG91dDsKKysJfQorKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgZW5jcnlwdGVkIEtFTSBr ZXkgYW5kIEVDREggcHViIGtleSAqLworKwlpZiAoKHNlcnZlcl9ibG9iID0gc3NoYnVmX25ldygp KSA9PSBOVUxMKSB7CisrCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOworKwkJZ290byBvdXQ7Cisr CX0KKysJciA9IChtbGtlbV9idWZfbGVuID09IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZ QllURVMpID8KKysJCW1sa2VtNzY4X2VuY2FwX3NlY3JldChjbGllbnRfcHViLCBzZWNyZXQsIGVu Y19vdXQpIDoKKysJCW1sa2VtMTAyNF9lbmNhcF9zZWNyZXQoY2xpZW50X3B1Yiwgc2VjcmV0LCBl bmNfb3V0KTsKKysKKysJaWYgKHIgIT0gMCkKKysJCWdvdG8gb3V0OworKworKwkvKiBnZW5lcmF0 ZSBFQ0RIIGtleSBwYWlyLCBzdG9yZSBzZXJ2ZXIgcHVia2V5IGFmdGVyIGNpcGhlcnRleHQgKi8K KysJc2VydmVyX2tleSA9IG5pc3RfcGtleV9rZXlnZW4oc2VydmVyX2tleV9sZW4pOworKworKwlp ZiAoKHNlcnZlcl9rZXkgPT0gTlVMTCkgfHwKKysJICAgIChyID0gZ2V0X3VuY29tcHJlc3NlZF9l Y19wdWJrZXkoc2VydmVyX2tleSwgc2VydmVyX3B1Yiwgc2VydmVyX2tleV9sZW4pICE9IDApIHx8 CisrCSAgICAociA9IHNzaGJ1Zl9wdXQoYnVmLCBzZWNyZXQsIHNpemVvZihzZWNyZXQpKSkgIT0g MCB8fAorKwkgICAgKHIgPSBzc2hidWZfcHV0KHNlcnZlcl9ibG9iLCBlbmNfb3V0LCBlbmNfb3V0 X2xlbikgIT0gMCl8fAorKwkgICAgKHIgPSBzc2hidWZfcHV0KHNlcnZlcl9ibG9iLCBzZXJ2ZXJf cHViLCBzZXJ2ZXJfa2V5X2xlbikpICE9IDApCisrCQlnb3RvIG91dDsKKysKKysJLyogYXBwZW5k IEVDREggc2hhcmVkIGtleSAqLworKwljbGllbnRfcHViICs9IG1sa2VtX2J1Zl9sZW47CisrCWlm ICgociA9IGtleF9uaXN0X3NoYXJlZF9rZXlfZXh0KHNlcnZlcl9rZXksIGNsaWVudF9wdWIsIGVj ZGhfYnVmX2xlbiwgYnVmKSkgPCAwKQorKwkJZ290byBvdXQ7CisrCWlmICgociA9IHNzaF9kaWdl c3RfYnVmZmVyKGtleC0+aGFzaF9hbGcsIGJ1ZiwgaGFzaCwgc2l6ZW9mKGhhc2gpKSkgIT0gMCkK KysJCWdvdG8gb3V0OworKyNpZmRlZiBERUJVR19LRVhFQ0RICisrCWR1bXBfZGlnZXN0KCJzZXJ2 ZXIgcHVibGljIE5JU1Q6Iiwgc2VydmVyX3B1Yiwgc2VydmVyX2tleV9sZW4pOworKwlkdW1wX2Rp Z2VzdCgic2VydmVyIGNpcGhlciB0ZXh0OiIsIGVuY19vdXQsIGVuY19vdXRfbGVuKTsKKysJZHVt cF9kaWdlc3QoInNlcnZlciBrZW0ga2V5OiIsIHNlY3JldCwgc2l6ZW9mKHNlY3JldCkpOworKwlk dW1wX2RpZ2VzdCgiY29uY2F0ZW5hdGlvbiBvZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBrZXk6 IiwKKysJICAgIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVmX2xlbihidWYpKTsKKysjZW5kaWYKKysJ Lyogc3RyaW5nLWVuY29kZWQgaGFzaCBpcyByZXN1bHRpbmcgc2hhcmVkIHNlY3JldCAqLworKwlz c2hidWZfcmVzZXQoYnVmKTsKKysJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmcoYnVmLCBoYXNo LAorKwkgICAgc3NoX2RpZ2VzdF9ieXRlcyhrZXgtPmhhc2hfYWxnKSkpICE9IDApCisrCQlnb3Rv IG91dDsKKysjaWZkZWYgREVCVUdfS0VYRUNESAorKwlkdW1wX2RpZ2VzdCgiZW5jb2RlZCBzaGFy ZWQgc2VjcmV0OiIsIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVmX2xlbihidWYpKTsKKysjZW5kaWYK KysJLyogc3VjY2VzcyAqLworKwlyID0gMDsKKysJKnNlcnZlcl9ibG9icCA9IHNlcnZlcl9ibG9i OworKwkqc2hhcmVkX3NlY3JldHAgPSBidWY7CisrCXNlcnZlcl9ibG9iID0gTlVMTDsKKysJYnVm ID0gTlVMTDsKKysgb3V0OgorKwlleHBsaWNpdF9iemVybyhoYXNoLCBzaXplb2YoaGFzaCkpOwor KwlFVlBfUEtFWV9mcmVlKHNlcnZlcl9rZXkpOworKwlleHBsaWNpdF9iemVybyhlbmNfb3V0LCBz aXplb2YoZW5jX291dCkpOworKwlleHBsaWNpdF9iemVybyhzZWNyZXQsIHNpemVvZihzZWNyZXQp KTsKKysJc3NoYnVmX2ZyZWUoc2VydmVyX2Jsb2IpOworKwlzc2hidWZfZnJlZShidWYpOworKwly ZXR1cm4gcjsKKyt9CisrCisrc3RhdGljIGludAorK2tleF9rZW1fbWxrZW1fbmlzdF9kZWMoc3Ry dWN0IGtleCAqa2V4LAorKyAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYiwgc3Ry dWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwLAorKyAgICBzaXplX3QgbWxrZW1fbGVuKQorK3sK KysJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKKysJY29uc3QgdV9jaGFyICpjaXBoZXJ0ZXh0 LCAqc2VydmVyX3B1YjsKKysJdV9jaGFyIGhhc2hbU1NIX0RJR0VTVF9NQVhfTEVOR1RIXTsKKysJ dV9jaGFyIGRlY2FwW2NyeXB0b19rZW1fbWxrZW03NjhfQllURVNdOworKwlpbnQgcjsKKysJc2l6 ZV90IG5pc3RfbGVuOworKworKwkqc2hhcmVkX3NlY3JldHAgPSBOVUxMOworKworKwlpZiAoc3No YnVmX2xlbihzZXJ2ZXJfYmxvYikgPCBtbGtlbV9sZW4pIHsKKysJCXIgPSBTU0hfRVJSX1NJR05B VFVSRV9JTlZBTElEOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJbmlzdF9sZW4gPSBzc2hidWZf bGVuKHNlcnZlcl9ibG9iKSAtIG1sa2VtX2xlbjsKKysKKysJc3dpdGNoIChtbGtlbV9sZW4pIHsK KysJCWNhc2UgY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVM6CisrCQkJaWYgKG5p c3RfbGVuICE9IE5JU1RfUDI1Nl9DT01QUkVTU0VEX0xFTgorKwkJCQkmJiBuaXN0X2xlbiAhPSBO SVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTikgeworKwkJCQlyID0gU1NIX0VSUl9TSUdOQVRVUkVf SU5WQUxJRDsKKysJCQkJZ290byBvdXQ7CisrCQkJfQorKwkJYnJlYWs7CisrCQljYXNlIGNyeXB0 b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUzoKKysJCQlpZiAobmlzdF9sZW4gIT0gTklT VF9QMzg0X0NPTVBSRVNTRURfTEVOCisrCQkJCSYmIG5pc3RfbGVuICE9IE5JU1RfUDM4NF9VTkNP TVBSRVNTRURfTEVOKSB7CisrCQkJCXIgPSBTU0hfRVJSX1NJR05BVFVSRV9JTlZBTElEOworKwkJ CQlnb3RvIG91dDsKKysJCQl9CisrCQlicmVhazsKKysJfQorKworKwljaXBoZXJ0ZXh0ID0gc3No YnVmX3B0cihzZXJ2ZXJfYmxvYik7CisrCXNlcnZlcl9wdWIgPSBjaXBoZXJ0ZXh0ICsgbWxrZW1f bGVuOworKwkvKiBoYXNoIGNvbmNhdGVuYXRpb24gb2YgS0VNIGtleSBhbmQgRUNESCBzaGFyZWQg a2V5ICovCisrCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKSB7CisrCQlyID0gU1NI X0VSUl9BTExPQ19GQUlMOworKwkJZ290byBvdXQ7CisrCX0KKysjaWZkZWYgREVCVUdfS0VYRUNE SAorKwlkdW1wX2RpZ2VzdCgic2VydmVyIGNpcGhlciB0ZXh0OiIsIGNpcGhlcnRleHQsIG1sa2Vt X2xlbik7CisrCWR1bXBfZGlnZXN0KCJzZXJ2ZXIgcHVibGljIGtleSBOSVNUOiIsIHNlcnZlcl9w dWIsIG5pc3RfbGVuKTsKKysjZW5kaWYKKysJciA9IChtbGtlbV9sZW4gPT0gY3J5cHRvX2tlbV9t bGtlbTc2OF9DSVBIRVJURVhUQllURVMpID8KKysJCW1sa2VtNzY4X2RlY2FwX3NlY3JldChrZXgt Pm1sa2VtNzY4X2NsaWVudF9rZXksIGNpcGhlcnRleHQsIGRlY2FwKSA6CisrCQltbGtlbTEwMjRf ZGVjYXBfc2VjcmV0KGtleC0+bWxrZW0xMDI0X2NsaWVudF9rZXksIGNpcGhlcnRleHQsIGRlY2Fw KTsKKysKKysJaWYgKHIgIT0gMCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBzc2hidWZfcHV0 KGJ1ZiwgZGVjYXAsIHNpemVvZihkZWNhcCkpKSAhPSAwKQorKwkJZ290byBvdXQ7CisrCWlmICgo ciA9IGtleF9uaXN0X3NoYXJlZF9rZXlfZXh0KGtleC0+ZWNfaHlicmlkX2NsaWVudF9rZXksIHNl cnZlcl9wdWIsCisrCQluaXN0X2xlbiwgYnVmKSkgPCAwKQorKwkJZ290byBvdXQ7CisrCWlmICgo ciA9IHNzaF9kaWdlc3RfYnVmZmVyKGtleC0+aGFzaF9hbGcsIGJ1ZiwKKysJICAgIGhhc2gsIHNp emVvZihoYXNoKSkpICE9IDApCisrCQlnb3RvIG91dDsKKysjaWZkZWYgREVCVUdfS0VYRUNESAor KwlkdW1wX2RpZ2VzdCgiY2xpZW50IGtlbSBrZXk6IiwgZGVjYXAsIHNpemVvZihkZWNhcCkpOwor KwlkdW1wX2RpZ2VzdCgiY29uY2F0ZW5hdGlvbiBvZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBr ZXk6IiwKKysJICAgIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVmX2xlbihidWYpKTsKKysjZW5kaWYK KysJc3NoYnVmX3Jlc2V0KGJ1Zik7CisrCWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKGJ1Ziwg aGFzaCwKKysJICAgIHNzaF9kaWdlc3RfYnl0ZXMoa2V4LT5oYXNoX2FsZykpKSAhPSAwKQorKwkJ Z290byBvdXQ7CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3QoImVuY29kZWQg c2hhcmVkIHNlY3JldDoiLCBzc2hidWZfcHRyKGJ1ZiksIHNzaGJ1Zl9sZW4oYnVmKSk7CisrI2Vu ZGlmCisrCS8qIHN1Y2Nlc3MgKi8KKysJciA9IDA7CisrCSpzaGFyZWRfc2VjcmV0cCA9IGJ1ZjsK KysJYnVmID0gTlVMTDsKKysgb3V0OgorKwlleHBsaWNpdF9iemVybyhoYXNoLCBzaXplb2YoaGFz aCkpOworKwlleHBsaWNpdF9iemVybyhkZWNhcCwgc2l6ZW9mKGRlY2FwKSk7CisrCXNzaGJ1Zl9m cmVlKGJ1Zik7CisrCXJldHVybiByOworK30KKysKKytpbnQKKytrZXhfa2VtX21sa2VtNzY4bmlz dHAyNTZfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCisreworKwlyZXR1cm4ga2V4X2tlbV9tbGtl bV9uaXN0X2tleXBhaXIoa2V4LCBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTLCBO SVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTik7CisrfQorKworK2ludAorK2tleF9rZW1fbWxrZW03 NjhuaXN0cDI1Nl9lbmMoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGll bnRfYmxvYiwKKysgICAgc3RydWN0IHNzaGJ1ZiAqKnNlcnZlcl9ibG9icCwgc3RydWN0IHNzaGJ1 ZiAqKnNoYXJlZF9zZWNyZXRwKQorK3sKKysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9lbmMo a2V4LCAiUC0yNTYiLCBjbGllbnRfYmxvYiwgc2VydmVyX2Jsb2JwLCBzaGFyZWRfc2VjcmV0cCk7 CisrfQorKworK2ludAorK2tleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9kZWMoc3RydWN0IGtleCAq a2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYiwKKysgICAgc3RydWN0IHNzaGJ1 ZiAqKnNoYXJlZF9zZWNyZXRwKQorK3sKKysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9kZWMo a2V4LCBzZXJ2ZXJfYmxvYiwgc2hhcmVkX3NlY3JldHAsCisrCQljcnlwdG9fa2VtX21sa2VtNzY4 X0NJUEhFUlRFWFRCWVRFUyk7CisrfQorKworK2ludAorK2tleF9rZW1fbWxrZW0xMDI0bmlzdHAz ODRfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCisreworKwlyZXR1cm4ga2V4X2tlbV9tbGtlbV9u aXN0X2tleXBhaXIoa2V4LCBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUywgTklT VF9QMzg0X1VOQ09NUFJFU1NFRF9MRU4pOworK30KKysKKytpbnQKKytrZXhfa2VtX21sa2VtMTAy NG5pc3RwMzg0X2VuYyhzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmNsaWVu dF9ibG9iLAorKyAgICBzdHJ1Y3Qgc3NoYnVmICoqc2VydmVyX2Jsb2JwLCBzdHJ1Y3Qgc3NoYnVm ICoqc2hhcmVkX3NlY3JldHApCisreworKwlyZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2VuYyhr ZXgsICJQLTM4NCIsIGNsaWVudF9ibG9iLCBzZXJ2ZXJfYmxvYnAsIHNoYXJlZF9zZWNyZXRwKTsK Kyt9CisrCisraW50Cisra2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9kZWMoc3RydWN0IGtleCAq a2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYiwKKysgICAgc3RydWN0IHNzaGJ1 ZiAqKnNoYXJlZF9zZWNyZXRwKQorK3sKKysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9kZWMo a2V4LCBzZXJ2ZXJfYmxvYiwgc2hhcmVkX3NlY3JldHAsCisrCQljcnlwdG9fa2VtX21sa2VtMTAy NF9DSVBIRVJURVhUQllURVMpOworK30KKysKKyAjZWxzZSAvKiBVU0VfTUxLRU03NjhYMjU1MTkg Ki8KKyBpbnQKKyBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoc3RydWN0IGtleCAqa2V4 KQorQEAgLTU1MCw0ICsxMTQ5LDM5IEBAIGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZGVjKHN0cnVj dCBrZXggKmtleCwKKyB7CisgCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOwor IH0KKysKKytpbnQJIGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9rZXlwYWlyKHN0cnVjdCBrZXgg KikKKyt7CisrCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOworK30KKysKKytp bnQJIGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1 Y3Qgc3NoYnVmICosCisrICAgIHN0cnVjdCBzc2hidWYgKiosIHN0cnVjdCBzc2hidWYgKiopCisr eworKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKKyt9CisrCisraW50CSBr ZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNz aGJ1ZiAqLAorKyAgICBzdHJ1Y3Qgc3NoYnVmICoqKQorK3sKKysJcmV0dXJuIFNTSF9FUlJfU0lH Tl9BTEdfVU5TVVBQT1JURUQ7CisrfQorKworK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4 NF9rZXlwYWlyKHN0cnVjdCBrZXggKikKKyt7CisrCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VO U1VQUE9SVEVEOworK30KKysKKytpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZW5jKHN0 cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorKyAgICBzdHJ1Y3Qgc3NoYnVmICoq LCBzdHJ1Y3Qgc3NoYnVmICoqKQorK3sKKysJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5TVVBQ T1JURUQ7CisrfQorKworK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9kZWMoc3RydWN0 IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCisrICAgIHN0cnVjdCBzc2hidWYgKiopCisr eworKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKKyt9CisrCisgI2VuZGlm IC8qIFVTRV9NTEtFTTc2OFgyNTUxOSAqLworZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0 b3IuYworaW5kZXggODI2OWU3OGMzLi44N2RmM2U5ZDcgMTAwNjQ0CistLS0gYS9tb25pdG9yLmMK KysrKyBiL21vbml0b3IuYworQEAgLTIwMzQsNiArMjAzNCw4IEBAIG1vbml0b3JfYXBwbHlfa2V5 c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCisgCWtleC0+ a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworIAlrZXgtPmtleFtLRVhf S0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCWtleC0+a2V4 W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworKwlrZXgt PmtleFtLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwor KwlrZXgtPmtleFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX3Nl cnZlcjsKKyAJa2V4LT5sb2FkX2hvc3RfcHVibGljX2tleT0mZ2V0X2hvc3RrZXlfcHVibGljX2J5 X3R5cGU7CisgCWtleC0+bG9hZF9ob3N0X3ByaXZhdGVfa2V5PSZnZXRfaG9zdGtleV9wcml2YXRl X2J5X3R5cGU7CisgCWtleC0+aG9zdF9rZXlfaW5kZXg9JmdldF9ob3N0a2V5X2luZGV4OworZGlm ZiAtLWdpdCBhL215cHJvcG9zYWwuaCBiL215cHJvcG9zYWwuaAoraW5kZXggZjAzMjkzZjM1Li5k YjUwYzViMWMgMTAwNjQ0CistLS0gYS9teXByb3Bvc2FsLmgKKysrKyBiL215cHJvcG9zYWwuaAor QEAgLTI2LDYgKzI2LDggQEAKKyAKKyAjZGVmaW5lIEtFWF9TRVJWRVJfS0VYCVwKKyAJIm1sa2Vt NzY4eDI1NTE5LXNoYTI1NiwiIFwKKysJIm1sa2VtNzY4bmlzdHAyNTYtc2hhMjU2LCIgXAorKwki bWxrZW0xMDI0bmlzdHAzODQtc2hhMzg0LCIgXAorIAkic250cnVwNzYxeDI1NTE5LXNoYTUxMiwi IFwKKyAJInNudHJ1cDc2MXgyNTUxOS1zaGE1MTJAb3BlbnNzaC5jb20sIiBcCisgCSJjdXJ2ZTI1 NTE5LXNoYTI1NiwiIFwKK0BAIC05OSw2ICsxMDEsOCBAQAorIAkiYWVzMTkyLWNiYyxhZXMyNTYt Y2JjLHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSwiIFwKKyAJImFlczEyOC1nY21Ab3BlbnNz aC5jb20sYWVzMjU2LWdjbUBvcGVuc3NoLmNvbSIKKyAjZGVmaW5lIEtFWF9ERUZBVUxUX0tFWF9G SVBTCQlcCisrCSJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiwiIFwKKysJIm1sa2VtMTAyNG5pc3Rw Mzg0LXNoYTM4NCwiIFwKKyAJImVjZGgtc2hhMi1uaXN0cDI1NiwiIFwKKyAJImVjZGgtc2hhMi1u aXN0cDM4NCwiIFwKKyAJImVjZGgtc2hhMi1uaXN0cDUyMSwiIFwKK2RpZmYgLS1naXQgYS9yZWdy ZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0 X2tleC5jCitpbmRleCBkYjdjYjQxOGIuLmZhZDlhNjM0YSAxMDA2NDQKKy0tLSBhL3JlZ3Jlc3Mv dW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCisrKysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVz dF9rZXguYworQEAgLTE2OSw2ICsxNjksOCBAQCBkb19rZXhfd2l0aF9rZXkoY2hhciAqa2V4LCBj aGFyICpjaXBoZXIsIGNoYXIgKm1hYywKKyAJc2VydmVyMi0+a2V4LT5rZXhbS0VYX0MyNTUxOV9T SEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCXNlcnZlcjItPmtleC0+a2V4W0tFWF9LRU1fU05U UlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJc2VydmVyMi0+a2V4LT5r ZXhbS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CisrCXNl cnZlcjItPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dl bl9zZXJ2ZXI7CisrCXNlcnZlcjItPmtleC0+a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRf U0hBMzg0XSA9IGtleF9nZW5fc2VydmVyOworIAlzZXJ2ZXIyLT5rZXgtPmxvYWRfaG9zdF9wdWJs aWNfa2V5ID0gc2VydmVyLT5rZXgtPmxvYWRfaG9zdF9wdWJsaWNfa2V5OworIAlzZXJ2ZXIyLT5r ZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tleSA9IHNlcnZlci0+a2V4LT5sb2FkX2hvc3RfcHJpdmF0 ZV9rZXk7CisgCXNlcnZlcjItPmtleC0+c2lnbiA9IHNlcnZlci0+a2V4LT5zaWduOworQEAgLTI0 Miw2ICsyNDQsOCBAQCBrZXhfdGVzdHModm9pZCkKKyAJfQorICMgaWZkZWYgVVNFX01MS0VNNzY4 WDI1NTE5CisgCWRvX2tleCgibWxrZW03Njh4MjU1MTktc2hhMjU2Iik7CisrCWRvX2tleCgibWxr ZW03NjhuaXN0cDI1Ni1zaGEyNTYiKTsKKysJZG9fa2V4KCJtbGtlbTEwMjRuaXN0cDM4NC1zaGEz ODQiKTsKKyAjIGVuZGlmIC8qIFVTRV9NTEtFTTc2OFgyNTUxOSAqLworICMgaWZkZWYgVVNFX1NO VFJVUDc2MVgyNTUxOQorIAlkb19rZXgoInNudHJ1cDc2MXgyNTUxOS1zaGE1MTIiKTsKK2RpZmYg LS1naXQgYS9zc2gta2V5c2Nhbi5jIGIvc3NoLWtleXNjYW4uYworaW5kZXggMjg0ZDRkZWVlLi40 MDVmYWYxNjcgMTAwNjQ0CistLS0gYS9zc2gta2V5c2Nhbi5jCisrKysgYi9zc2gta2V5c2Nhbi5j CitAQCAtMzA3LDcgKzMwNyw4IEBAIGtleWdyYWJfc3NoMihjb24gKmMpCisgCWMtPmNfc3NoLT5r ZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKyAJYy0+Y19zc2gt PmtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX2NsaWVu dDsKKyAJYy0+Y19zc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2XSA9 IGtleF9nZW5fY2xpZW50OworLQljLT5jX3NzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OEVD REhfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OworKwljLT5jX3NzaC0+a2V4LT5rZXhbS0VYX0tF TV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJYy0+Y19zc2gt PmtleC0+a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fY2xp ZW50OworIAlzc2hfc2V0X3ZlcmlmeV9ob3N0X2tleV9jYWxsYmFjayhjLT5jX3NzaCwga2V5X3By aW50X3dyYXBwZXIpOworIAkvKgorIAkgKiBkbyB0aGUga2V5LWV4Y2hhbmdlIHVudGlsIGFuIGVy cm9yIG9jY3VycyBvciB1bnRpbAorZGlmZiAtLWdpdCBhL3NzaF9hcGkuYyBiL3NzaF9hcGkuYwor aW5kZXggZDAxYWM1NDgzLi5mNTU0YjEyY2QgMTAwNjQ0CistLS0gYS9zc2hfYXBpLmMKKysrKyBi L3NzaF9hcGkuYworQEAgLTEzMyw3ICsxMzMsOCBAQCBzc2hfaW5pdChzdHJ1Y3Qgc3NoICoqc3No cCwgaW50IGlzX3NlcnZlciwgc3RydWN0IGtleF9wYXJhbXMgKmtleF9wYXJhbXMpCisgCQlzc2gt PmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworIAkJc3NoLT5r ZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7 CisgCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9n ZW5fc2VydmVyOworLQkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4RUNESF9TSEEyNTZd ID0ga2V4X2dlbl9zZXJ2ZXI7CisrCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhOSVNU UDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CisrCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1f TUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fc2VydmVyOworIAkJc3NoLT5rZXgt PmxvYWRfaG9zdF9wdWJsaWNfa2V5PSZfc3NoX2hvc3RfcHVibGljX2tleTsKKyAJCXNzaC0+a2V4 LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXk9Jl9zc2hfaG9zdF9wcml2YXRlX2tleTsKKyAJCXNzaC0+ a2V4LT5zaWduPSZfc3NoX2hvc3Rfa2V5X3NpZ247CitAQCAtMTUxLDcgKzE1Miw4IEBAIHNzaF9p bml0KHN0cnVjdCBzc2ggKipzc2hwLCBpbnQgaXNfc2VydmVyLCBzdHJ1Y3Qga2V4X3BhcmFtcyAq a2V4X3BhcmFtcykKKyAJCXNzaC0+a2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dl bl9jbGllbnQ7CisgCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUx Ml0gPSBrZXhfZ2VuX2NsaWVudDsKKyAJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OFgy NTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CistCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1f TUxLRU03NjhFQ0RIX1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJCXNzaC0+a2V4LT5rZXhb S0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJCXNz aC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9j bGllbnQ7CisgCQlzc2gtPmtleC0+dmVyaWZ5X2hvc3Rfa2V5ID0mX3NzaF92ZXJpZnlfaG9zdF9r ZXk7CisgCX0KKyAJKnNzaHAgPSBzc2g7CitkaWZmIC0tZ2l0IGEvc3NoY29ubmVjdDIuYyBiL3Nz aGNvbm5lY3QyLmMKK2luZGV4IDM2NjA4NzNhNi4uYjVkNjNlNTk5IDEwMDY0NAorLS0tIGEvc3No Y29ubmVjdDIuYworKysrIGIvc3NoY29ubmVjdDIuYworQEAgLTM0OSw3ICszNDksOCBAQCBzc2hf a2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdl ICpob3N0YWRkciwKKyAJc3NoLT5rZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2Vu X2NsaWVudDsKKyAJc3NoLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJd ID0ga2V4X2dlbl9jbGllbnQ7CisgCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OFgyNTUx OV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CistCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtF TTc2OEVDREhfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OworKwlzc2gtPmtleC0+a2V4W0tFWF9L RU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CisrCXNzaC0+a2V4 LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9jbGllbnQ7 CisgCXNzaC0+a2V4LT52ZXJpZnlfaG9zdF9rZXk9JnZlcmlmeV9ob3N0X2tleV9jYWxsYmFjazsK KyAKKyAjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKQorZGlmZiAt LWdpdCBhL3NzaGQtYXV0aC5jIGIvc3NoZC1hdXRoLmMKK2luZGV4IDA3OTA2M2Y0Ny4uNjAzODc1 OGNlIDEwMDY0NAorLS0tIGEvc3NoZC1hdXRoLmMKKysrKyBiL3NzaGQtYXV0aC5jCitAQCAtODY0 LDYgKzg2NCw4IEBAIGRvX3NzaDJfa2V4KHN0cnVjdCBzc2ggKnNzaCkKKyAJa2V4LT5rZXhbS0VY X0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCWtleC0+a2V4W0tFWF9LRU1fU05U UlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJa2V4LT5rZXhbS0VYX0tF TV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CisrCWtleC0+a2V4W0tF WF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7CisrCWtleC0+ a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fc2VydmVyOwor IAlrZXgtPmxvYWRfaG9zdF9wdWJsaWNfa2V5PSZnZXRfaG9zdGtleV9wdWJsaWNfYnlfdHlwZTsK KyAJa2V4LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXk9JmdldF9ob3N0a2V5X3ByaXZhdGVfYnlfdHlw ZTsKKyAJa2V4LT5ob3N0X2tleV9pbmRleD0mZ2V0X2hvc3RrZXlfaW5kZXg7CistLSAKKzIuNTUu MAorCgpkaWZmIC0tZ2l0IGEvMDA0Ny1zdXBwb3J0LWF1dGhlbnRpY2F0aW9uLWluZGljYXRvcnMt aW4tR1NTQVBJLnBhdGNoIGIvMDA0Ny1zdXBwb3J0LWF1dGhlbnRpY2F0aW9uLWluZGljYXRvcnMt aW4tR1NTQVBJLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA2YmRmLi4w MDAwMDAwCi0tLSBhLzAwNDctc3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdT U0FQSS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NyArMCwwIEBACi1Gcm9tIDQ3N2UwZGZl NDRkNWUzMDlhOTM1NzM3NTU4Mjg4NDIyMGZkZTRhY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx Ci1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBTdW4s IDEyIEFwciAyMDI2IDEyOjIzOjUxICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggNDcvNTRdIHN1cHBv cnQgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBpbiBHU1NBUEkKLQotaHR0cHM6Ly9naXRodWIu Y29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS9wdWxsLzUwMAotCi1Dby1BdXRob3JlZC1CeTog Q2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT4KLS0tLQotIGNvbmZpZ3Vy ZS5hYyAgICB8ICAgMSArCi0gZ3NzLXNlcnYta3JiNS5jIHwgIDg5ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLQotIGdzcy1zZXJ2LmMgICAgICB8IDEwOCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KLSBzZXJ2Y29uZi5jICAgICAg fCAgMTYgKysrKysrLQotIHNlcnZjb25mLmggICAgICB8ICAgMiArCi0gc3NoLWdzcy5oICAgICAg IHwgICA3ICsrKysKLSBzc2hkX2NvbmZpZy41ICAgfCAgNDYgKysrKysrKysrKysrKysrKysrKysr Ci0gNyBmaWxlcyBjaGFuZ2VkLCAyNTYgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCi0K LWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDg2ZjBlOWUw OS4uMTM4OGU1ZTcyIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUu YWMKLUBAIC01MTI5LDYgKzUxMjksNyBAQCBBQ19BUkdfV0lUSChba2VyYmVyb3M1XSwKLSAJCUFD X0NIRUNLX0hFQURFUlMoW2dzc2FwaS5oIGdzc2FwaS9nc3NhcGkuaF0pCi0gCQlBQ19DSEVDS19I RUFERVJTKFtnc3NhcGlfa3JiNS5oIGdzc2FwaS9nc3NhcGlfa3JiNS5oXSkKLSAJCUFDX0NIRUNL X0hFQURFUlMoW2dzc2FwaV9nZW5lcmljLmggZ3NzYXBpL2dzc2FwaV9nZW5lcmljLmhdKQotKwkJ QUNfQ0hFQ0tfSEVBREVSUyhbZ3NzYXBpX2V4dC5oIGdzc2FwaS9nc3NhcGlfZXh0LmhdKQotIAot IAkJQUNfU0VBUkNIX0xJQlMoW2tfaGFzYWZzXSwgW2thZnNdLCBbQUNfREVGSU5FKFtVU0VfQUZT XSwgWzFdLAotIAkJCVtEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgbGlia2FmcycgQUZT IHN1cHBvcnRdKV0pCi1kaWZmIC0tZ2l0IGEvZ3NzLXNlcnYta3JiNS5jIGIvZ3NzLXNlcnYta3Ji NS5jCi1pbmRleCA3MjM1MDk0MDkuLmZjN2NhYmMwOSAxMDA2NDQKLS0tLSBhL2dzcy1zZXJ2LWty YjUuYwotKysrIGIvZ3NzLXNlcnYta3JiNS5jCi1AQCAtNDMsNiArNDMsNyBAQAotICNpbmNsdWRl ICJsb2cuaCIKLSAjaW5jbHVkZSAibWlzYy5oIgotICNpbmNsdWRlICJzZXJ2Y29uZi5oIgotKyNp bmNsdWRlICJtYXRjaC5oIgotIAotICNpbmNsdWRlICJzc2gtZ3NzLmgiCi0gCi1AQCAtODcsNiAr ODgsMzMgQEAgc3NoX2dzc2FwaV9rcmI1X2luaXQodm9pZCkKLSAJcmV0dXJuIDE7Ci0gfQotIAot Ky8qIENoZWNrIGlmIGFueSBvZiB0aGUgaW5kaWNhdG9ycyBpbiB0aGUgS2VyYmVyb3MgdGlja2V0 IG1hdGNoCi0rICogb25lIG9mIGluZGljYXRvcnMgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZC9kZW5p ZWQgcnVsZXMuCi0rICogSW4gY2FzZSBvZiB0aGUgbWF0Y2gsIGFwcGx5IHRoZSBkZWNpc2lvbiBm cm9tIHRoZSBydWxlLgotKyAqIEluIGNhc2Ugb2Ygbm8gaW5kaWNhdG9yIGZyb20gdGhlIHRpY2tl dCBtYXRjaGluZyB0aGUgcnVsZSwgZGVueQotKyAqLwotKwotK3N0YXRpYyBpbnQKLStzc2hfZ3Nz YXBpX2NoZWNrX2luZGljYXRvcnMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgaW50ICptYXRj aGVkKQotK3sKLSsJaW50IHJldDsKLSsJdV9pbnQgaTsKLSsJKm1hdGNoZWQgPSAtMTsKLSsKLSsJ LyogQ2hlY2sgaW5kaWNhdG9ycyAqLwotKwlmb3IgKGkgPSAwOyBjbGllbnQtPmluZGljYXRvcnNb aV0gIT0gTlVMTDsgaSsrKSB7Ci0rCQlyZXQgPSBtYXRjaF9wYXR0ZXJuX2xpc3QoY2xpZW50LT5p bmRpY2F0b3JzW2ldLAotKwkJCQkJIG9wdGlvbnMuZ3NzX2luZGljYXRvcnMsIDEpOwotKwkJLyog bmVnYXRpdmUgb3IgcG9zaXRpdmUgbWF0Y2ggKi8KLSsJCWlmIChyZXQgIT0gMCkgewotKwkJCSpt YXRjaGVkID0gaTsKLSsJCQlyZXR1cm4gcmV0OwotKwkJfQotKwl9Ci0rCS8qIE5vIHJ1bGUgbWF0 Y2hlZCAqLwotKwlyZXR1cm4gMDsKLSt9Ci0rCi0gLyogQ2hlY2sgaWYgdGhpcyB1c2VyIGlzIE9L IHRvIGxvZ2luLiBUaGlzIG9ubHkgd29ya3Mgd2l0aCBrcmI1IC0gb3RoZXIKLSAgKiBHU1NBUEkg bWVjaGFuaXNtcyB3aWxsIG5lZWQgdGhlaXIgb3duLgotICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg dXNlciBpcyBPSyB0byBsb2cgaW4sIG90aGVyd2lzZSByZXR1cm5zIDAKLUBAIC0xOTMsMTUgKzIy MSwxNSBAQCBzdGF0aWMgaW50Ci0gc3NoX2dzc2FwaV9rcmI1X3VzZXJvayhzc2hfZ3NzYXBpX2Ns aWVudCAqY2xpZW50LCBjaGFyICpuYW1lKQotIHsKLSAJa3JiNV9wcmluY2lwYWwgcHJpbmM7Ci0t CWludCByZXR2YWw7Ci0rCWludCByZXR2YWwsIG1hdGNoZWQsIHN1Y2Nlc3M7Ci0gCWNvbnN0IGNo YXIgKmVycm1zZzsKLSAJaW50IGs1bG9naW5fZXhpc3RzOwotIAotIAlpZiAoc3NoX2dzc2FwaV9r cmI1X2luaXQoKSA9PSAwKQotIAkJcmV0dXJuIDA7Ci0gCi0tCWlmICgocmV0dmFsID0ga3JiNV9w YXJzZV9uYW1lKGtyYl9jb250ZXh0LCBjbGllbnQtPmV4cG9ydGVkbmFtZS52YWx1ZSwKLS0JICAg ICZwcmluYykpKSB7Ci0rCXJldHZhbCA9IGtyYjVfcGFyc2VfbmFtZShrcmJfY29udGV4dCwgY2xp ZW50LT5leHBvcnRlZG5hbWUudmFsdWUsICZwcmluYyk7Ci0rCWlmIChyZXR2YWwpIHsKLSAJCWVy cm1zZyA9IGtyYjVfZ2V0X2Vycm9yX21lc3NhZ2Uoa3JiX2NvbnRleHQsIHJldHZhbCk7Ci0gCQls b2dpdCgia3JiNV9wYXJzZV9uYW1lKCk6ICUuMTAwcyIsIGVycm1zZyk7Ci0gCQlrcmI1X2ZyZWVf ZXJyb3JfbWVzc2FnZShrcmJfY29udGV4dCwgZXJybXNnKTsKLUBAIC0yMTYsMTcgKzI0NCw2MCBA QCBzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIg Km5hbWUpCi0gCWlmIChrNWxvZ2luX2V4aXN0cyAmJgotIAkgICAgc3NoX2tyYjVfa3VzZXJvayhr cmJfY29udGV4dCwgcHJpbmMsIG5hbWUsIGs1bG9naW5fZXhpc3RzKSkgewotIAkJcmV0dmFsID0g MTsKLS0JCWxvZ2l0KCJBdXRob3JpemVkIHRvICVzLCBrcmI1IHByaW5jaXBhbCAlcyAoa3JiNV9r dXNlcm9rKSIsCi0tCQkgICAgbmFtZSwgKGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVl KTsKLSsJCWVycm1zZyA9ICJrcmI1X2t1c2Vyb2siOwotIAl9IGVsc2UgaWYgKHNzaF9nc3NhcGlf a3JiNV9jbWRvayhwcmluYywgY2xpZW50LT5leHBvcnRlZG5hbWUudmFsdWUsCi0gCQluYW1lLCBr NWxvZ2luX2V4aXN0cykpIHsKLSAJCXJldHZhbCA9IDE7Ci0tCQlsb2dpdCgiQXV0aG9yaXplZCB0 byAlcywga3JiNSBwcmluY2lwYWwgJXMgIgotLQkJICAgICIoc3NoX2dzc2FwaV9rcmI1X2NtZG9r KSIsCi0tCQkgICAgbmFtZSwgKGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKLS0J fSBlbHNlCi0rCQllcnJtc2cgPSAic3NoX2dzc2FwaV9rcmI1X2NtZG9rIjsKLSsJfSBlbHNlIHsK LSAJCXJldHZhbCA9IDA7Ci0rCQlnb3RvIG91dDsKLSsJfQotIAotKwkvKiBBdCB0aGlzIHBvaW50 IHdlIGFyZSBnb29kIGlmIG5vIGluZGljYXRvcnMgd2VyZSBkZWZpbmVkICovCi0rCWlmIChvcHRp b25zLmdzc19pbmRpY2F0b3JzID09IE5VTEwpIHsKLSsJCXJldHZhbCA9IDE7Ci0rCQlnb3RvIG91 dDsKLSsJfQotKwotKwkvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgaW5kaWNhdG9ycyBkZWZpbmVk IGluIHRoZSBjb25maWd1cmF0aW9uLAotKwkgKiBpZiBjbGllbnR0IGRpZCBub3QgcHJvdmlkZSBh bnkgaW5kaWNhdG9ycywgd2UgcmVqZWN0ICovCi0rCWlmICghY2xpZW50LT5pbmRpY2F0b3JzKSB7 Ci0rCQlyZXR2YWwgPSAwOwotKwkJbG9naXQoIkdTU0FQSSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0 b3JzIGVuZm9yY2VkICIKLSsJCSAgICAgICJidXQgaW5kaWNhdG9ycyBub3QgcHJvdmlkZWQgYnkg dGhlIGNsaWVudC4gIgotKwkJICAgICAgImtyYjUgcHJpbmNpcGFsICVzIGRlbmllZCIsCi0rCQkg ICAgICAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUpOwotKwkJZ290byBvdXQ7Ci0r CX0KLSsKLSsJLyogQXQgdGhpcyBwb2ludCB0aGUgY29uZmlndXJhdGlvbiBlbmZvcmNlcyBwcmVz ZW5jZSBvZiBpbmRpY2F0b3JzCi0rCSAqIGNoZWNrIHRoZSBtYXRjaCAqLwotKwltYXRjaGVkID0g LTE7Ci0rCXN1Y2Nlc3MgPSBzc2hfZ3NzYXBpX2NoZWNrX2luZGljYXRvcnMoY2xpZW50LCAmbWF0 Y2hlZCk7Ci0rCi0rCXN3aXRjaCAoc3VjY2VzcykgewotKwljYXNlIDE6Ci0rCQlsb2dpdCgiUHJv dmlkZWQgaW5kaWNhdG9yICVzIGFsbG93ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24iLAotKwkJICAg ICAgY2xpZW50LT5pbmRpY2F0b3JzW21hdGNoZWRdKTsKLSsJCXJldHZhbCA9IDE7Ci0rCQlicmVh azsKLSsJY2FzZSAtMToKLSsJCWxvZ2l0KCJQcm92aWRlZCBpbmRpY2F0b3IgJXMgcmVqZWN0ZWQg YnkgdGhlIGNvbmZpZ3VyYXRpb24iLAotKwkJICAgICAgY2xpZW50LT5pbmRpY2F0b3JzW21hdGNo ZWRdKTsKLSsJCXJldHZhbCA9IDA7Ci0rCQlicmVhazsKLSsJZGVmYXVsdDoKLSsJCWxvZ2l0KCJQ cm92aWRlZCBpbmRpY2F0b3JzIGRvIG5vdCBtYXRjaCB0aGUgY29uZmlndXJhdGlvbiIpOwotKwkJ cmV0dmFsID0gMDsKLSsJCWJyZWFrOwotKwl9Ci0rCi0rb3V0OgotKwlpZiAocmV0dmFsID09IDEp IHsKLSsJCWxvZ2l0KCJBdXRob3JpemVkIHRvICVzLCBrcmI1IHByaW5jaXBhbCAlcyAoJXMpIiwK LSsJCSAgICAgIG5hbWUsIChjaGFyICopY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSwgZXJybXNn KTsKLSsJfQotIAlrcmI1X2ZyZWVfcHJpbmNpcGFsKGtyYl9jb250ZXh0LCBwcmluYyk7Ci0gCXJl dHVybiByZXR2YWw7Ci0gfQotZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LmMgYi9nc3Mtc2Vydi5jCi1p bmRleCA2ZWI3ZDIxNjMuLjY4NmFjNGViMyAxMDA2NDQKLS0tLSBhL2dzcy1zZXJ2LmMKLSsrKyBi L2dzcy1zZXJ2LmMKLUBAIC01NSw3ICs1NSw3IEBAIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlv bnM7Ci0gCi0gc3RhdGljIHNzaF9nc3NhcGlfY2xpZW50IGdzc2FwaV9jbGllbnQgPQotICAgICB7 IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5U SUFMLAotLSAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTH0sIDAsIDB9OwotKyAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5VTEx9OwotIAotIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlf bnVsbF9tZWNoID0KLSAgICAgeyBOVUxMLCBOVUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEx9OwotQEAgLTI5NSw2ICsyOTUsOTkgQEAgc3NoX2dzc2FwaV9wYXJzZV9l bmFtZShHc3NjdHh0ICpjdHgsIGdzcwotIAlyZXR1cm4gR1NTX1NfQ09NUExFVEU7Ci0gfQotIAot KwotKy8qIEV4dHJhY3QgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBmcm9tIHRoZSBLZXJiZXJv cyB0aWNrZXQuIEF1dGhlbnRpY2F0aW9uCi0rICogaW5kaWNhdG9ycyBhcmUgR1NTQVBJIG5hbWUg YXR0cmlidXRlcyBmb3IgdGhlIG5hbWUgImF1dGgtaW5kaWNhdG9ycyIuCi0rICogTXVsdGlwbGUg aW5kaWNhdG9ycyBtaWdodCBiZSBwcmVzZW50IGluIHRoZSB0aWNrZXQuCi0rICogRWFjaCBpbmRp Y2F0b3IgaXMgYW4gdXRmOCBzdHJpbmcuICovCi0rCi0rI2RlZmluZSBBVVRIX0lORElDQVRPUlNf VEFHICJhdXRoLWluZGljYXRvcnMiCi0rI2RlZmluZSBTU0hfR1NTQVBJX01BWF9JTkRJQ0FUT1JT IDY0Ci0rCi0rLyogUHJpdmlsZWdlZCAoY2FsbGVkIGZyb20gYWNjZXB0X3NlY3VyZV9jdHgpICov Ci0rc3RhdGljIE9NX3VpbnQzMgotK3NzaF9nc3NhcGlfZ2V0aW5kaWNhdG9ycyhHc3NjdHh0ICpj dHgsIGdzc19uYW1lX3QgZ3NzX25hbWUsIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCi0rewot Kwlnc3NfYnVmZmVyX3NldF90IGF0dHJzID0gR1NTX0NfTk9fQlVGRkVSX1NFVDsKLSsJZ3NzX2J1 ZmZlcl9kZXNjIHZhbHVlID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwlnc3NfYnVmZmVyX2Rlc2Mg ZGlzcGxheV92YWx1ZSA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJaW50IGlzX21lY2huYW1lLCBh dXRoZW50aWNhdGVkLCBjb21wbGV0ZSwgbW9yZTsKLSsJc2l6ZV90IGNvdW50LCBpOwotKwotKwkv KiBhbHdheXMgaW5pdGlhbGl6ZSBjbGllbnQtPmluZGljYXRvcnMgKi8KLSsJY2xpZW50LT5pbmRp Y2F0b3JzID0gTlVMTDsKLSsKLSsJY3R4LT5tYWpvciA9IGdzc19pbnF1aXJlX25hbWUoJmN0eC0+ bWlub3IsIGdzc19uYW1lLAotKwkJCQkgICAgICAmaXNfbWVjaG5hbWUsIE5VTEwsICZhdHRycyk7 Ci0rCWlmIChjdHgtPm1ham9yICE9IEdTU19TX0NPTVBMRVRFKQotKwkJcmV0dXJuIGN0eC0+bWFq b3I7Ci0rCi0rCWlmIChhdHRycyA9PSBHU1NfQ19OT19CVUZGRVJfU0VUKSB7Ci0rCQkvKiBubyBp bmRpY2F0b3JzIGluIHRoZSB0aWNrZXQgKi8KLSsJCXJldHVybiBHU1NfU19DT01QTEVURTsKLSsJ fQotKwotKwkvKiBjbGllbnQtPmluZGljYXRvcnMgaXMgTlVMTCB0ZXJtaW5hdGVkICovCi0rCWNv dW50ID0gMDsKLSsJY2xpZW50LT5pbmRpY2F0b3JzID0geGNhbGxvYyhjb3VudCArIDEsIHNpemVv ZihjaGFyICopKTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IGF0dHJzLT5jb3VudDsgaSsrKSB7Ci0r CQlhdXRoZW50aWNhdGVkID0gMDsKLSsJCWNvbXBsZXRlID0gMDsKLSsJCW1vcmUgPSAtMTsKLSsK LSsJCS8qIHNraXAgYW55dGhpbmcgYnV0IGF1dGgtaW5kaWNhdG9ycyAqLwotKwkJaWYgKCgoc2l6 ZW9mKEFVVEhfSU5ESUNBVE9SU19UQUcpIC0gMSkgIT0gYXR0cnMtPmVsZW1lbnRzW2ldLmxlbmd0 aCkgfHwKLSsJCSAgICBtZW1jbXAoQVVUSF9JTkRJQ0FUT1JTX1RBRywgYXR0cnMtPmVsZW1lbnRz W2ldLnZhbHVlLAotKwkJCSAgIHNpemVvZihBVVRIX0lORElDQVRPUlNfVEFHKSAtIDEpICE9IDAp Ci0rCQkJY29udGludWU7Ci0rCi0rCQkvKiByZXRyaWV2ZSBhbGwgaW5kaWNhdG9ycyAqLwotKwkJ d2hpbGUgKG1vcmUgIT0gMCkgewotKwkJCXZhbHVlLnZhbHVlID0gTlVMTDsKLSsJCQlkaXNwbGF5 X3ZhbHVlLnZhbHVlID0gTlVMTDsKLSsKLSsJCQljdHgtPm1ham9yID0gZ3NzX2dldF9uYW1lX2F0 dHJpYnV0ZSgmY3R4LT5taW5vciwgZ3NzX25hbWUsCi0rCQkJCQkJCSAgICAmYXR0cnMtPmVsZW1l bnRzW2ldLAotKwkJCQkJCQkgICAgJmF1dGhlbnRpY2F0ZWQsICZjb21wbGV0ZSwKLSsJCQkJCQkJ ICAgICZ2YWx1ZSwgJmRpc3BsYXlfdmFsdWUsICZtb3JlKTsKLSsJCQlpZiAoY3R4LT5tYWpvciAh PSBHU1NfU19DT01QTEVURSkKLSsJCQkJZ290byBvdXQ7Ci0rCi0rCQkJaWYgKHZhbHVlLnZhbHVl ID09IE5VTEwgfHwgIWF1dGhlbnRpY2F0ZWQpCi0rCQkJCWNvbnRpbnVlOwotKwotKwkJCWlmIChj b3VudCA+PSBTU0hfR1NTQVBJX01BWF9JTkRJQ0FUT1JTKSB7Ci0rCQkJCWxvZ2l0KCJzc2hfZ3Nz YXBpX2dldGluZGljYXRvcnM6IgotKwkJCQkgICAgICAiIHRvbyBtYW55IGluZGljYXRvcnMsIHRy dW5jYXRpbmcgYXQgJWQiLAotKwkJCQkgICAgICBTU0hfR1NTQVBJX01BWF9JTkRJQ0FUT1JTKTsK LSsJCQkJZ290byBvdXQ7Ci0rCQkJfQotKwotKwkJCWNsaWVudC0+aW5kaWNhdG9yc1tjb3VudF0g PSB4bWFsbG9jKHZhbHVlLmxlbmd0aCArIDEpOwotKwkJCW1lbWNweShjbGllbnQtPmluZGljYXRv cnNbY291bnRdLCB2YWx1ZS52YWx1ZSwgdmFsdWUubGVuZ3RoKTsKLSsJCQljbGllbnQtPmluZGlj YXRvcnNbY291bnRdW3ZhbHVlLmxlbmd0aF0gPSAnXDAnOwotKwkJCWNvdW50Kys7Ci0rCi0rCQkJ LyogYWRkIE5VTEwgdGVybWluYXRvciAqLwotKwkJCWNsaWVudC0+aW5kaWNhdG9ycyA9IHhyZWNh bGxvY2FycmF5KGNsaWVudC0+aW5kaWNhdG9ycywgY291bnQsCi0rCQkJCQkJCSAgICBjb3VudCAr IDEsIHNpemVvZihjaGFyICopKTsKLSsJCX0KLSsJfQotKwotK291dDoKLSsJaWYgKGN0eC0+bWFq b3IgIT0gR1NTX1NfQ09NUExFVEUgJiYgY2xpZW50LT5pbmRpY2F0b3JzICE9IE5VTEwpIHsKLSsJ CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotKwkJCWZyZWUoY2xpZW50LT5pbmRpY2F0b3Jz W2ldKTsKLSsJCWZyZWUoY2xpZW50LT5pbmRpY2F0b3JzKTsKLSsJCWNsaWVudC0+aW5kaWNhdG9y cyA9IE5VTEw7Ci0rCX0KLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmdmFsdWUp OwotKwlnc3NfcmVsZWFzZV9idWZmZXIoJmN0eC0+bWlub3IsICZkaXNwbGF5X3ZhbHVlKTsKLSsJ Z3NzX3JlbGVhc2VfYnVmZmVyX3NldCgmY3R4LT5taW5vciwgJmF0dHJzKTsKLSsJcmV0dXJuIGN0 eC0+bWFqb3I7Ci0rfQotKwotIC8qIEV4dHJhY3QgdGhlIGNsaWVudCBkZXRhaWxzIGZyb20gYSBn aXZlbiBjb250ZXh0LiBUaGlzIGNhbiBvbmx5IHJlbGlhYmx5Ci0gICogYmUgY2FsbGVkIG9uY2Ug Zm9yIGEgY29udGV4dCAqLwotIAotQEAgLTM4Niw2ICs0NzUsMTIgQEAgc3NoX2dzc2FwaV9nZXRj bGllbnQoR3NzY3R4dCAqY3R4LCBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQotIAl9Ci0gCi0g CWdzc19yZWxlYXNlX2J1ZmZlcigmY3R4LT5taW5vciwgJmVuYW1lKTsKLSsJLyogUmV0cmlldmUg YXV0aGVudGljYXRpb24gaW5kaWNhdG9ycywgaWYgdGhleSBleGlzdCAqLwotKwlpZiAoKGN0eC0+ bWFqb3IgPSBzc2hfZ3NzYXBpX2dldGluZGljYXRvcnMoY3R4LAotKwkgICAgY3R4LT5jbGllbnQs IGNsaWVudCkpKSB7Ci0rCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0rCQlyZXR1cm4gKGN0eC0+ bWFqb3IpOwotKwl9Ci0gCi0gCS8qIFdlIGNhbid0IGNvcHkgdGhpcyBzdHJ1Y3R1cmUsIHNvIHdl IGp1c3QgbW92ZSB0aGUgcG9pbnRlciB0byBpdCAqLwotIAljbGllbnQtPmNyZWRzID0gY3R4LT5j bGllbnRfY3JlZHM7Ci1AQCAtNDUzLDYgKzU0OCw3IEBAIGludAotIHNzaF9nc3NhcGlfdXNlcm9r KGNoYXIgKnVzZXIsIHN0cnVjdCBwYXNzd2QgKnB3LCBpbnQga2V4KQotIHsKLSAJT01fdWludDMy IGxtaW47Ci0rCXNpemVfdCBpOwotIAotIAkodm9pZCkga2V4OyAvKiB1c2VkIGluIHByaXZpbGVn ZSBzZXBhcmF0aW9uICovCi0gCi1AQCAtNDcxLDggKzU2NywxNCBAQCBzc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICp1c2VyLCBzdHJ1Y3QgcGFzc3dkICpwdywgaW50IGtleCkKLSAJCQlnc3NfcmVsZWFz ZV9idWZmZXIoJmxtaW4sICZnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1lKTsKLSAJCQlnc3NfcmVs ZWFzZV9idWZmZXIoJmxtaW4sICZnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZSk7Ci0gCQkJZ3Nz X3JlbGVhc2VfY3JlZCgmbG1pbiwgJmdzc2FwaV9jbGllbnQuY3JlZHMpOwotLQkJCWV4cGxpY2l0 X2J6ZXJvKCZnc3NhcGlfY2xpZW50LAotLQkJCSAgICBzaXplb2Yoc3NoX2dzc2FwaV9jbGllbnQp KTsKLSsKLSsJCQlpZiAoZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzICE9IE5VTEwpIHsKLSsJCQkJ Zm9yIChpID0gMDsgZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzW2ldICE9IE5VTEw7IGkrKykKLSsJ CQkJCWZyZWUoZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzW2ldKTsKLSsJCQkJZnJlZShnc3NhcGlf Y2xpZW50LmluZGljYXRvcnMpOwotKwkJCX0KLSsKLSsJCQlleHBsaWNpdF9iemVybygmZ3NzYXBp X2NsaWVudCwgc2l6ZW9mKHNzaF9nc3NhcGlfY2xpZW50KSk7Ci0gCQkJcmV0dXJuIDA7Ci0gCQl9 Ci0gCWVsc2UKLWRpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5kZXggNmMx YmE3N2Y2Li4yNjhjMDlkMWMgMTAwNjQ0Ci0tLS0gYS9zZXJ2Y29uZi5jCi0rKysgYi9zZXJ2Y29u Zi5jCi1AQCAtMTQ1LDYgKzE0NSw3IEBAIGluaXRpYWxpemVfc2VydmVyX29wdGlvbnMoU2VydmVy T3B0aW9ucyAqb3B0aW9ucykKLSAJb3B0aW9ucy0+Z3NzX2NsZWFudXBfY3JlZHMgPSAtMTsKLSAJ b3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNj ZXB0b3IgPSAtMTsKLSsJb3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPSBOVUxMOwotIAlvcHRpb25z LT5nc3Nfc3RvcmVfcmVrZXkgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0g TlVMTDsKLSAJb3B0aW9ucy0+dXNlX2t1c2Vyb2sgPSAtMTsKLUBAIC01NjAsNiArNTYxLDcgQEAg ZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gCUNM RUFSX09OX05PTkUob3B0aW9ucy0+cm91dGluZ19kb21haW4pOwotIAlDTEVBUl9PTl9OT05FKG9w dGlvbnMtPmhvc3Rfa2V5X2FnZW50KTsKLSAJQ0xFQVJfT05fTk9ORShvcHRpb25zLT5wZXJfc291 cmNlX3BlbmFsdHlfZXhlbXB0KTsKLSsJQ0xFQVJfT05fTk9ORShvcHRpb25zLT5nc3NfaW5kaWNh dG9ycyk7Ci0gCi0gCWZvciAoaSA9IDA7IGkgPCBvcHRpb25zLT5udW1faG9zdF9rZXlfZmlsZXM7 IGkrKykKLSAJCUNMRUFSX09OX05PTkUob3B0aW9ucy0+aG9zdF9rZXlfZmlsZXNbaV0pOwotQEAg LTU5OSw3ICs2MDEsNyBAQCB0eXBlZGVmIGVudW0gewotIAlzUGVyU291cmNlUGVuYWx0aWVzLCBz UGVyU291cmNlUGVuYWx0eUV4ZW1wdExpc3QsCi0gCXNDbGllbnRBbGl2ZUludGVydmFsLCBzQ2xp ZW50QWxpdmVDb3VudE1heCwgc0F1dGhvcml6ZWRLZXlzRmlsZSwKLSAJc0dzc0F1dGhlbnRpY2F0 aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBzR3NzRGVsZWdhdGVDcmVkcywgc0dzc0VuYWJsZWs1dXNl cnMsIHNHc3NTdHJpY3RBY2NlcHRvciwKLS0Jc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywg c0dzc1N0b3JlUmVrZXksCi0rCXNHc3NJbmRpY2F0b3JzLCBzR3NzS2V5RXgsIHNHc3NLZXhBbGdv cml0aG1zLCBzR3NzU3RvcmVSZWtleSwKLSAJc0FjY2VwdEVudiwgc1NldEVudiwgc1Blcm1pdFR1 bm5lbCwKLSAJc01hdGNoLCBzUGVybWl0T3Blbiwgc1Blcm1pdExpc3Rlbiwgc0ZvcmNlQ29tbWFu ZCwgc0Nocm9vdERpcmVjdG9yeSwKLSAJc1VzZVByaXZpbGVnZVNlcGFyYXRpb24sIHNBbGxvd0Fn ZW50Rm9yd2FyZGluZywKLUBAIC02OTYsNiArNjk4LDcgQEAgc3RhdGljIHN0cnVjdCB7Ci0gCXsg Imdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc0dzc1N0b3JlUmVrZXksIFNTSENGR19H TE9CQUwgfSwKLSAJeyAiZ3NzYXBpa2V4YWxnb3JpdGhtcyIsIHNHc3NLZXhBbGdvcml0aG1zLCBT U0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWVuYWJsZWs1dXNlcnMiLCBzR3NzRW5hYmxlazV1 c2VycywgU1NIQ0ZHX0FMTCB9LAotKwl7ICJnc3NhcGlpbmRpY2F0b3JzIiwgc0dzc0luZGljYXRv cnMsIFNTSENGR19BTEwgfSwKLSAjZWxzZQotIAl7ICJnc3NhcGlhdXRoZW50aWNhdGlvbiIsIHNV bnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJnc3NhcGljbGVhbnVwY3JlZGVudGlhbHMi LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC03MDYsNiArNzA5LDcgQEAgc3Rh dGljIHN0cnVjdCB7Ci0gCXsgImdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc1Vuc3Vw cG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzVW5z dXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpZW5hYmxlazV1c2VycyIsIHNV bnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJnc3NhcGlpbmRpY2F0b3JzIiwgc1Vuc3Vw cG9ydGVkLCBTU0hDRkdfQUxMIH0sCi0gI2VuZGlmCi0gCXsgImdzc3VzZXNlc3Npb25jY2FjaGUi LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpdXNlc2Vzc2lvbmNy ZWRjYWNoZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotQEAgLTE3MzcsNiArMTc0 MSwxNSBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpv cHRpb25zLCBjaGFyICpsaW5lLAotIAkJCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IHhz dHJkdXAoYXJnKTsKLSAJCWJyZWFrOwotIAotKwljYXNlIHNHc3NJbmRpY2F0b3JzOgotKwkJYXJn ID0gYXJndl9uZXh0KCZhYywgJmF2KTsKLSsJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykKLSsJ CQlmYXRhbCgiJXMgbGluZSAlZDogJXMgbWlzc2luZyBhcmd1bWVudC4iLAotKwkJCSAgICBmaWxl bmFtZSwgbGluZW51bSwga2V5d29yZCk7Ci0rCQlpZiAob3B0aW9ucy0+Z3NzX2luZGljYXRvcnMg PT0gTlVMTCkKLSsJCQlvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyA9IHhzdHJkdXAoYXJnKTsKLSsJ CWJyZWFrOwotKwotIAljYXNlIHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uOgotIAkJaW50cHRyID0g Jm9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uOwotIAkJZ290byBwYXJzZV9mbGFnOwot QEAgLTMzODMsNiArMzM5Niw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCi0gCWR1 bXBfY2ZnX2ZtdGludChzR3NzU3RyaWN0QWNjZXB0b3IsIG8tPmdzc19zdHJpY3RfYWNjZXB0b3Ip OwotIAlkdW1wX2NmZ19mbXRpbnQoc0dzc1N0b3JlUmVrZXksIG8tPmdzc19zdG9yZV9yZWtleSk7 Ci0gCWR1bXBfY2ZnX3N0cmluZyhzR3NzS2V4QWxnb3JpdGhtcywgby0+Z3NzX2tleF9hbGdvcml0 aG1zKTsKLSsJZHVtcF9jZmdfc3RyaW5nKHNHc3NJbmRpY2F0b3JzLCBvLT5nc3NfaW5kaWNhdG9y cyk7Ci0gI2VuZGlmCi0gCWR1bXBfY2ZnX2ZtdGludChzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwg by0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24pOwotIAlkdW1wX2NmZ19mbXRpbnQoc0tiZEludGVy YWN0aXZlQXV0aGVudGljYXRpb24sCi1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuaCBiL3NlcnZjb25m LmgKLWluZGV4IDU2OTEwMGU0Ny4uNzgxZjIwYzYxIDEwMDY0NAotLS0tIGEvc2VydmNvbmYuaAot KysrIGIvc2VydmNvbmYuaAotQEAgLTE4MSw2ICsxODEsNyBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0g CWNoYXIgICAqKmFsbG93X2dyb3VwczsKLSAJdV9pbnQgbnVtX2RlbnlfZ3JvdXBzOwotIAljaGFy ICAgKipkZW55X2dyb3VwczsKLSsJY2hhciAgICpnc3NfaW5kaWNhdG9yczsKLSAKLSAJdV9pbnQg bnVtX3N1YnN5c3RlbXM7Ci0gCWNoYXIgICAqKnN1YnN5c3RlbV9uYW1lOwotQEAgLTMxMCw2ICsz MTEsNyBAQCBUQUlMUV9IRUFEKGluY2x1ZGVfbGlzdCwgaW5jbHVkZV9pdGVtKTsKLSAJCU1fQ1Bf U1RST1BUKHJvdXRpbmdfZG9tYWluKTsgXAotIAkJTV9DUF9TVFJPUFQocGVybWl0X3VzZXJfZW52 X2FsbG93bGlzdCk7IFwKLSAJCU1fQ1BfU1RST1BUKHBhbV9zZXJ2aWNlX25hbWUpOyBcCi0rCQlN X0NQX1NUUk9QVChnc3NfaW5kaWNhdG9ycyk7IFwKLSAJCU1fQ1BfU1RSQVJSQVlPUFQoYXV0aG9y aXplZF9rZXlzX2ZpbGVzLCBudW1fYXV0aGtleXNfZmlsZXMsIDEpO1wKLSAJCU1fQ1BfU1RSQVJS QVlPUFQocmV2b2tlZF9rZXlzX2ZpbGVzLCBcCi0gCQkgICAgbnVtX3Jldm9rZWRfa2V5c19maWxl cywgMSk7IFwKLWRpZmYgLS1naXQgYS9zc2gtZ3NzLmggYi9zc2gtZ3NzLmgKLWluZGV4IDMyOWRj OWRhMC4uMTUwNjcxOWE5IDEwMDY0NAotLS0tIGEvc3NoLWdzcy5oCi0rKysgYi9zc2gtZ3NzLmgK LUBAIC0zNCw2ICszNCwxMiBAQAotICNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+Ci0gI2VuZGlm Ci0gCi0rI2lmZGVmIEhBVkVfR1NTQVBJX0VYVF9ICi0rI2luY2x1ZGUgPGdzc2FwaV9leHQuaD4K LSsjZWxpZiBkZWZpbmVkKEhBVkVfR1NTQVBJX0dTU0FQSV9FWFRfSCkKLSsjaW5jbHVkZSA8Z3Nz YXBpL2dzc2FwaV9leHQuaD4KLSsjZW5kaWYKLSsKLSAjaWZkZWYgS1JCNQotICMgaWZuZGVmIEhF SU1EQUwKLSAjICBpZmRlZiBIQVZFX0dTU0FQSV9HRU5FUklDX0gKLUBAIC0xMTIsNiArMTE4LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgewotIAlzc2hfZ3NzYXBpX2NjYWNoZSBzdG9yZTsKLSAJaW50IHVz ZWQ7Ci0gCWludCB1cGRhdGVkOwotKwljaGFyICoqaW5kaWNhdG9yczsgLyogYXV0aCBpbmRpY2F0 b3JzICovCi0gfSBzc2hfZ3NzYXBpX2NsaWVudDsKLSAKLSB0eXBlZGVmIHN0cnVjdCBzc2hfZ3Nz YXBpX21lY2hfc3RydWN0IHsKLWRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25m aWcuNQotaW5kZXggMWQxNmRhYmFmLi40Y2E4MDAxNmMgMTAwNjQ0Ci0tLS0gYS9zc2hkX2NvbmZp Zy41Ci0rKysgYi9zc2hkX2NvbmZpZy41Ci1AQCAtODAzLDYgKzgwMyw1MiBAQCBUaGlzIG9wdGlv biBvbmx5IGFwcGxpZXMgdG8gY29ubmVjdGlvbnMgdXNpbmcgR1NTQVBJLgotIC5QcAotIFRoZSBs aXN0IG9mIHN1cHBvcnRlZCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRh aW5lZCB1c2luZwotIC5RcSBzc2ggLVEgR1NTQVBJS2V4QWxnb3JpdGhtcyAuCi0rLkl0IENtIEdT U0FQSUluZGljYXRvcnMKLStTcGVjaWZpZXMgd2hldGhlciB0byBhY2NlcHQgb3IgZGVueSBHU1NB UEkgYXV0aGVudGljYXRlZCBhY2Nlc3MgaWYgS2VyYmVyb3MKLSttZWNoYW5pc20gaXMgdXNlZCBh bmQgS2VyYmVyb3MgdGlja2V0IGNvbnRhaW5zIGEgcGFydGljdWxhciBzZXQgb2YKLSthdXRoZW50 aWNhdGlvbiBpbmRpY2F0b3JzLiBUaGUgdmFsdWVzIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBjb21t YS1zZXBhcmF0ZWQgbGlzdAotKy5DbSBbIV1uYW1lMSxbIV1uYW1lMiwuLi4gLgotK1doZW4gaW5k aWNhdG9yJ3MgbmFtZSBpcyBwcmVmaXhlZCB3aXRoICEsIHRoZSBhdXRoZW50aWNhdGlvbiBpbmRp Y2F0b3IgJ25hbWUnCi0rd2lsbCBkZW55IGFjY2VzcyB0byB0aGUgc3lzdGVtLiBPdGhlcndpc2Us IG9uZSBvZiBub24tbmVnYXRlZCBhdXRoZW50aWNhdGlvbgotK2luZGljYXRvcnMgbXVzdCBiZSBw cmVzZW50IGluIHRoZSBLZXJiZXJvcyB0aWNrZXQgdG8gYWxsb3cgYWNjZXNzLiBJZgotKy5DbSBH U1NBUElJbmRpY2F0b3JzCi0raXMgZGVmaW5lZCwgYSBLZXJiZXJvcyB0aWNrZXQgdGhhdCBoYXMg aW5kaWNhdG9ycyBidXQgZG9lcyBub3QgbWF0Y2ggdGhlCi0rcG9saWN5IHdpbGwgZ2V0IGRlbmlh bC4gSWYgYXQgbGVhc3Qgb25lIGluZGljYXRvciBpcyBjb25maWd1cmVkLCB3aGV0aGVyIGZvcgot K2FjY2VzcyBvciBkZW5pYWwsIHRpY2tldHMgd2l0aG91dCBhdXRoZW50aWNhdGlvbiBpbmRpY2F0 b3JzIHdpbGwgYmUgZXhwbGljaXRseQotK3JlamVjdGVkLgotKy5QcAotK0J5IGRlZmF1bHQgc3lz dGVtcyB1c2luZyBNSVQgS2VyYmVyb3MgMS4xNyBvciBsYXRlciB3aWxsIG5vdCBhc3NpZ24gYW55 Ci0raW5kaWNhdG9ycy4gU1BBS0UgYW5kIFBLSU5JVCBtZXRob2RzIGFkZCBhdXRoZW50aWNhdGlv biBpbmRpY2F0b3JzCi0rdG8gYWxsIHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb25zLiBUaGUgU1BB S0UgcHJlLWF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpcwotK3ByZWZlcnJlZCBvdmVyIGFuIGVuY3J5 cHRlZCB0aW1lc3RhbXAgcHJlLWF1dGhlbnRpY2F0aW9uIHdoZW4gcGFzc3dvcmRzIHVzZWQgdG8K LSthdXRoZW50aWNhdGUgdXNlciBwcmluY2lwYWxzLiBLZXJiZXJvcyBLRENzIGJ1aWx0IHdpdGgg SGVpbWRhbCBLZXJiZXJvcwotKyhpbmNsdWRpbmcgU2FtYmEgQUQgREMgYnVpbHQgd2l0aCBIZWlt ZGFsKSBkbyBub3QgYWRkIGF1dGhlbnRpY2F0aW9uCi0raW5kaWNhdG9ycy4gSG93ZXZlciwgT3Bl blNTSCBidWlsdCBhZ2FpbnN0IEhlaW1kYWwgS2VyYmVyb3MgbGlicmFyeSBpcyBhYmxlIHRvCi0r aW5xdWlyZSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGFuZCB0aHVzIGNhbiBiZSB1c2VkIHRv IGNoZWNrIGZvciB0aGVpciBwcmVzZW5jZS4KLSsuUHAKLStJbmRpY2F0b3IgbmFtZSBpcyBjYXNl LXNlbnNpdGl2ZSBhbmQgZGVwZW5kcyBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiBhCi0rcGFydGlj dWxhciBLZXJiZXJvcyBkZXBsb3ltZW50LiBJbmRpY2F0b3JzIGF2YWlsYWJsZSBpbiBNSVQgS2Vy YmVyb3MgYW5kCi0rRnJlZUlQQSBlbnZpcm9ubWVudHM6Ci0rLlBwCi0rLkJsIC10YWcgLXdpZHRo IFhYWFggLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLSsuSXQgQ20gaGFyZGVuZWQKLStTUEFLRSBv ciBlbmNyeXB0ZWQgdGltZXN0YW1wIHByZS1hdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIGluIE1J VCBLZXJiZXJvcyBhbmQgRnJlZUlQQQotKy5JdCBDbSBwa2luaXQKLStzbWFydGNhcmQgb3IgUEtD UzExIHRva2VuLWJhc2VkIHByZS1hdXRoZW50aWNhdGlvbiBpbiBNSVQgS2VyYmVyb3MgYW5kIEZy ZWVJUEEKLSsuSXQgQ20gcmFkaXVzCi0rcHJlLWF1dGhlbnRpY2F0aW9uIGJhc2VkIG9uIGEgUkFE SVVTIHNlcnZlciBpbiBNSVQgS2VyYmVyb3MgYW5kIEZyZWVJUEEKLSsuSXQgQ20gb3RwCi0rVE9U UC9IT1RQLWJhc2VkIHR3by1mYWN0b3IgcHJlLWF1dGhlbnRpY2F0aW9uIGluIEZyZWVJUEEKLSsu SXQgQ20gaWRwCi0rT0F1dGgyLWJhc2VkIHByZS1hdXRoZW50aWNhdGlvbiBpbiBGcmVlSVBBIHVz aW5nIGFuIGV4dGVybmFsIGlkZW50aXR5IHByb3ZpZGVyCi0rYW5kIGRldmljZSBhdXRob3JpemF0 aW9uIGdyYW50IGZsb3cKLSsuSXQgQ20gcGFzc2tleQotK0ZJRE8yLWJhc2VkIHByZS1hdXRoZW50 aWNhdGlvbiBpbiBGcmVlSVBBLCB1c2luZyBGSURPMiBVU0IgYW5kIE5GQyB0b2tlbnMKLSsuRWwK LSsuUHAKLStUaGUgZGVmYXVsdAotKy5EcSBub25lCi0raXMgdG8gbm90IHVzZSBHU1NBUEkgYXV0 aGVudGljYXRpb24gaW5kaWNhdG9ycyBmb3IgYWNjZXNzIGRlY2lzaW9ucy4KLSAuSXQgQ20gSG9z dGJhc2VkQWNjZXB0ZWRBbGdvcml0aG1zCi0gVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0t d2lkZSBieQotIC5YciBjcnlwdG8tcG9saWNpZXMgNyAuCi0tLSAKLTIuNTMuMAotCgpkaWZmIC0t Z2l0IGEvMDA0OC1OSVNULWN1cnZlcy1oeWJyaWQtS0VYLWltcGxlbWVudGF0aW9uLnBhdGNoIGIv MDA0OC1OSVNULWN1cnZlcy1oeWJyaWQtS0VYLWltcGxlbWVudGF0aW9uLnBhdGNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2FiNzExLi4wMDAwMDAwCi0tLSBhLzAwNDgtTklTVC1j dXJ2ZXMtaHlicmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDEzMDMgKzAsMCBAQAotRnJvbSAzODAyYTUxYjY5MDQ0ZjQxOWJiNTNkZWFmZjcwNjFkNjJkOTU5 NmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJl bGRtaXRAZ21haWwuY29tPgotRGF0ZTogTW9uLCAyMCBPY3QgMjAyNSAxNjowNzozMSArMDIwMAot U3ViamVjdDogW1BBVENIIDQ4LzU0XSBOSVNUIGN1cnZlcyBoeWJyaWQgS0VYIGltcGxlbWVudGF0 aW9uCi0KLS0tLQotIGNvbXBhdC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIzICstCi0g Y29tcGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwotIGNyeXB0b19hcGkuaCAg ICAgICAgICAgICAgICAgICAgIHwgICA0ICsKLSBrZXgtbmFtZXMuYyAgICAgICAgICAgICAgICAg ICAgICB8ICA4OSArKystCi0ga2V4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg KwotIGtleC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE5ICsKLSBrZXhnZW4uYyAg ICAgICAgICAgICAgICAgICAgICAgICB8ICA1NiArKy0KLSBrZXhtbGtlbTc2OHgyNTUxOS5jICAg ICAgICAgICAgICB8IDY3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCi0gbW9uaXRv ci5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwotIG15cHJvcG9zYWwuaCAgICAgICAg ICAgICAgICAgICAgIHwgICA0ICsKLSByZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYyB8 ICAgNCArCi0gc3NoLWtleXNjYW4uYyAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwotIHNzaF9h cGkuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKLSBzc2hjb25uZWN0Mi5jICAgICAg ICAgICAgICAgICAgICB8ICAgMiArCi0gc3NoZC1hdXRoLmMgICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKwotIDE1IGZpbGVzIGNoYW5nZWQsIDg1MSBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlv bnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbXBhdC5jIGIvY29tcGF0LmMKLWluZGV4IDQzMTI1MTBl NS4uZTZjNzkzNWQ0IDEwMDY0NAotLS0tIGEvY29tcGF0LmMKLSsrKyBiL2NvbXBhdC5jCi1AQCAt MzYsNiArMzYsNyBAQAotICNpbmNsdWRlICJjb21wYXQuaCIKLSAjaW5jbHVkZSAibG9nLmgiCi0g I2luY2x1ZGUgIm1hdGNoLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotIAotIC8qIGRl dGVybWluZSBidWcgZmxhZ3MgZnJvbSBTU0ggcHJvdG9jb2wgYmFubmVyICovCi0gdm9pZAotQEAg LTE0OCw4ICsxNDksOSBAQCBjaGFyICoKLSBjb21wYXRfa2V4X3Byb3Bvc2FsKHN0cnVjdCBzc2gg KnNzaCwgY29uc3QgY2hhciAqcCkKLSB7Ci0gCWNoYXIgKmNwID0gTlVMTCwgKmNwMiA9IE5VTEw7 Ci0rCWludCBtbGtlbV9hdmFpbGFibGUgPSBpc19tbGtlbTc2OF9hdmFpbGFibGUoKTsKLSAKLS0J aWYgKChzc2gtPmNvbXBhdCAmIChTU0hfQlVHX0NVUlZFMjU1MTlQQUR8U1NIX09MRF9ESEdFWCkp ID09IDApCi0rCWlmICgoc3NoLT5jb21wYXQgJiAoU1NIX0JVR19DVVJWRTI1NTE5UEFEfFNTSF9P TERfREhHRVgpKSA9PSAwICYmIG1sa2VtX2F2YWlsYWJsZSA9PSAyKQotIAkJcmV0dXJuIHhzdHJk dXAocCk7Ci0gCWRlYnVnMl9mKCJvcmlnaW5hbCBLRVggcHJvcG9zYWw6ICVzIiwgcCk7Ci0gCWlm ICgoc3NoLT5jb21wYXQgJiBTU0hfQlVHX0NVUlZFMjU1MTlQQUQpICE9IDApCi1AQCAtMTY0LDYg KzE2NiwyNSBAQCBjb21wYXRfa2V4X3Byb3Bvc2FsKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hh ciAqcCkKLSAJCWZyZWUoY3ApOwotIAkJY3AgPSBjcDI7Ci0gCX0KLSsJaWYgKG1sa2VtX2F2YWls YWJsZSA9PSAyKQotKwkJcmV0dXJuIGNwID8gY3AgOiB4c3RyZHVwKHApOwotKwlpZiAobWxrZW1f YXZhaWxhYmxlID09IDEgJiYgRklQU19tb2RlKCkpIHsKLSsJCWlmICgoY3AyID0gbWF0Y2hfZmls dGVyX2RlbnlsaXN0KGNwID8gY3AgOiBwLAotKwkJICAgICJtbGtlbTc2OHgyNTUxOS1zaGEyNTYi KSkgPT0gTlVMTCkKLSsJCQlmYXRhbCgibWF0Y2hfZmlsdGVyX2RlbnlsaXN0IGZhaWxlZCIpOwot KwkJZnJlZShjcCk7Ci0rCQljcCA9IGNwMjsKLSsJfQotKwlpZiAobWxrZW1fYXZhaWxhYmxlID09 IDApIHsKLSsJCWlmICgoY3AyID0gbWF0Y2hfZmlsdGVyX2RlbnlsaXN0KGNwID8gY3AgOiBwLAot KwkJICAgICJtbGtlbTc2OHgyNTUxOS1zaGEyNTYsIgotKwkJICAgICJtbGtlbTc2OG5pc3RwMjU2 LXNoYTI1NiwiCi0rCQkgICAgIm1sa2VtMTAyNG5pc3RwMzg0LXNoYTM4NCIpKSA9PSBOVUxMKQot KwkJCWZhdGFsKCJtYXRjaF9maWx0ZXJfZGVueWxpc3QgZmFpbGVkIik7Ci0rCQlmcmVlKGNwKTsK LSsJCWNwID0gY3AyOwotKwl9Ci0rCi0gCWlmIChjcCA9PSBOVUxMIHx8ICpjcCA9PSAnXDAnKQot IAkJZmF0YWwoIk5vIHN1cHBvcnRlZCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcyBmb3VuZCIpOwot IAlkZWJ1ZzJfZigiY29tcGF0IEtFWCBwcm9wb3NhbDogJXMiLCBjcCk7Ci1kaWZmIC0tZ2l0IGEv Y29tcGF0LmggYi9jb21wYXQuaAotaW5kZXggMmU2ZGI1YmY5Li5iNzhlNTViNjkgMTAwNjQ0Ci0t LS0gYS9jb21wYXQuaAotKysrIGIvY29tcGF0LmgKLUBAIC02Miw0ICs2Miw1IEBAIHN0cnVjdCBz c2g7Ci0gCi0gdm9pZCAgICBjb21wYXRfYmFubmVyKHN0cnVjdCBzc2ggKiwgY29uc3QgY2hhciAq KTsKLSBjaGFyCSpjb21wYXRfa2V4X3Byb3Bvc2FsKHN0cnVjdCBzc2ggKiwgY29uc3QgY2hhciAq KTsKLStpbnQgaXNfbWxrZW03NjhfYXZhaWxhYmxlKHZvaWQpOwotICNlbmRpZgotZGlmZiAtLWdp dCBhL2NyeXB0b19hcGkuaCBiL2NyeXB0b19hcGkuaAotaW5kZXggZjVlMzhiNTQ3Li42YThlZGUw NjcgMTAwNjQ0Ci0tLS0gYS9jcnlwdG9fYXBpLmgKLSsrKyBiL2NyeXB0b19hcGkuaAotQEAgLTgy LDQgKzgyLDggQEAgaW50CWNyeXB0b19rZW1fc250cnVwNzYxX2tleXBhaXIodW5zaWduZWQgY2hh ciAqcGssIHVuc2lnbmVkIGNoYXIgKnNrKTsKLSAjZGVmaW5lIGNyeXB0b19rZW1fbWxrZW03Njhf Q0lQSEVSVEVYVEJZVEVTIDEwODgKLSAjZGVmaW5lIGNyeXB0b19rZW1fbWxrZW03NjhfQllURVMg MzIKLSAKLSsjZGVmaW5lIGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTIDE1NjgK LSsjZGVmaW5lIGNyeXB0b19rZW1fbWxrZW0xMDI0X1NFQ1JFVEtFWUJZVEVTIDMxNjgKLSsjZGVm aW5lIGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUyAxNTY4Ci0rCi0gI2VuZGlm IC8qIGNyeXB0b19hcGlfaCAqLwotZGlmZiAtLWdpdCBhL2tleC1uYW1lcy5jIGIva2V4LW5hbWVz LmMKLWluZGV4IDg4MmYyOTA1Yi4uNjBmYzQ4N2IwIDEwMDY0NAotLS0tIGEva2V4LW5hbWVzLmMK LSsrKyBiL2tleC1uYW1lcy5jCi1AQCAtMzQsNiArMzQsNyBAQAotICNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjZW5kaWYKLSAKLSAjaW5jbHVk ZSAia2V4LmgiCi1AQCAtOTAsNiArOTEsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZXhhbGcg a2V4YWxnc1tdID0gewotICNpZmRlZiBVU0VfTUxLRU03NjhYMjU1MTkKLSAJeyBLRVhfTUxLRU03 NjhYMjU1MTlfU0hBMjU2LCBLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1NiwgMCwKLSAJICAg IFNTSF9ESUdFU1RfU0hBMjU2LCBLRVhfSVNfUFEgfSwKLSsJeyBLRVhfTUxLRU03NjhOSVNUUDI1 Nl9TSEEyNTYsIEtFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYsIDAsCi0rCSAgICBTU0hf RElHRVNUX1NIQTI1NiwgS0VYX0lTX1BRIH0sCi0rCXsgS0VYX01MS0VNMTAyNE5JU1RQMzg0X1NI QTM4NCwgS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQsIDAsCi0rCSAgICBTU0hfRElH RVNUX1NIQTM4NCwgS0VYX0lTX1BRIH0sCi0gI2VuZGlmCi0gI2VuZGlmIC8qIEhBVkVfRVZQX1NI QTI1NiB8fCAhV0lUSF9PUEVOU1NMICovCi0gCXsgTlVMTCwgMCwgLTEsIC0xLCAwIH0sCi1AQCAt MTA4LDE0ICsxMTMsMjcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZXhhbGcgZ3NzX2tleGFsZ3Nb XSA9IHsKLSAJeyBOVUxMLCAwLCAtMSwgLTEsIDB9LAotIH07Ci0gCi0tc3RhdGljIGludCBpc19t bGtlbTc2OF9hdmFpbGFibGUoKQotKy8qCi0rICogMCAtIHVuYXZhaWxhYmxlCi0rICogMSAtIGF2 YWlsYWJsZSBpbiBub24tRklQUyBtb2RlCi0rICogMiAtIGF2YWlsYWJsZSBhbHdheXMKLSsgKi8K LStpbnQgaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkKLSB7Ci0gCXN0YXRpYyBpbnQgaXNfZmV0Y2hl ZCA9IC0xOwotIAotIAlpZiAoaXNfZmV0Y2hlZCA9PSAtMSkgewotLQkJRVZQX0tFTSAqbWxrZW03 NjggPSBFVlBfS0VNX2ZldGNoKE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOwotLQkJaXNfZmV0Y2hl ZCA9IG1sa2VtNzY4ICE9IE5VTEwgPyAxIDogMDsKLSsJCUVWUF9LRU0gKm1sa2VtNzY4ID0gTlVM TDsKLSsKLSsJCUVSUl9zZXRfbWFyaygpOwotKwkJbWxrZW03NjggPSBFVlBfS0VNX2ZldGNoKE5V TEwsICJtbGtlbTc2OCIsIE5VTEwpOwotKwkJaXNfZmV0Y2hlZCA9IChtbGtlbTc2OCA9PSBOVUxM KSA/IDAgOiAyOwotKwkJaWYgKGlzX2ZldGNoZWQgPT0gMCAmJiBGSVBTX21vZGUoKSA9PSAxKSB7 Ci0rCQkgICAgbWxrZW03NjggPSBFVlBfS0VNX2ZldGNoKE5VTEwsICJtbGtlbTc2OCIsICJwcm92 aWRlcj1kZWZhdWx0LC1maXBzIik7Ci0rCQkgICAgaXNfZmV0Y2hlZCA9IChtbGtlbTc2OCA9PSBO VUxMKSA/IDAgOiAxOwotKwkJfQotIAkJRVZQX0tFTV9mcmVlKG1sa2VtNzY4KTsKLSsJCUVSUl9w b3BfdG9fbWFyaygpOwotIAl9Ci0gCi0gCXJldHVybiBpc19mZXRjaGVkOwotQEAgLTEyNywxMSAr MTQ1LDMyIEBAIGtleF9hbGdfbGlzdF9pbnRlcm5hbChjaGFyIHNlcCwgY29uc3Qgc3RydWN0IGtl eGFsZyAqYWxncykKLSAJY2hhciAqcmV0ID0gTlVMTDsKLSAJY29uc3Qgc3RydWN0IGtleGFsZyAq azsKLSAJY2hhciBzZXBfc3RyWzJdID0ge3NlcCwgJ1wwJ307Ci0rCWludCB4MjU1MTltbGtlbV9h dmFpbGFibGUgPSAwLCBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMDsKLSAKLS0JZm9yIChrID0ga2V4 YWxnczsgay0+bmFtZSAhPSBOVUxMOyBrKyspIHsKLS0JCWlmIChzdHJjbXAoay0+bmFtZSwgS0VY X01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMAotLQkJCSYmICFpc19tbGtlbTc2OF9hdmFpbGFi bGUoKSkKLSsJLyoKLSsJICogRklQUyBwcm92aWRlciBjYW4gcHJvdmlkZSBNTC1LRU1zIGFuZCB0 aGVuIGFsbCBoeWJyaWRzIGFyZSBhdmFpbGFibGUKLSsJICogT3RoZXJ3aXNlIG9ubHkgTklTVCBo eWJyaWRzIGFyZSBhdmFpbGFibGUKLSsJICogKi8KLSsJaWYgKEZJUFNfbW9kZSgpKSB7Ci0rCSAg ICBpZiAoaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkgPT0gMikgewotKwkgICAgICAgIHgyNTUxOW1s a2VtX2F2YWlsYWJsZSA9IDE7Ci0rCSAgICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7Ci0r CSAgICB9IGVsc2UgaWYgKGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDEpIHsKLSsJICAgICAg ICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKLSsJICAgIH0KLSsJfSBlbHNlIHsKLSsJICAgIGlm IChpc19tbGtlbTc2OF9hdmFpbGFibGUoKSA+IDApIHsKLSsJICAgICAgICB4MjU1MTltbGtlbV9h dmFpbGFibGUgPSAxOwotKwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOwotKwkgICAg fQotKwl9Ci0rCi0rCWZvciAoayA9IGFsZ3M7IGstPm5hbWUgIT0gTlVMTDsgaysrKSB7Ci0rCQlp ZiAoICAoc3RyY21wKGstPm5hbWUsIEtFWF9NTEtFTTc2OFgyNTUxOV9TSEEyNTYpID09IDAgICAg JiYgeDI1NTE5bWxrZW1fYXZhaWxhYmxlID09IDApCi0rCQkgICB8fCAoc3RyY21wKGstPm5hbWUs IEtFWF9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NikgPT0gMCAgJiYgbmlzdG1sa2VtX2F2YWlsYWJs ZSA9PSAwKQotKwkJICAgfHwgKHN0cmNtcChrLT5uYW1lLCBLRVhfTUxLRU0xMDI0TklTVFAzODRf U0hBMzg0KSA9PSAwICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkpCi0gCQkJY29udGludWU7 Ci0rCi0gCQl4ZXh0ZW5kZigmcmV0LCBzZXBfc3RyLCAiJXMiLCBrLT5uYW1lKTsKLSAJfQotIAot QEAgLTE1NCwxMCArMTkzLDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnICoKLSBrZXhf YWxnX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKLSB7Ci0gCWNvbnN0IHN0cnVjdCBrZXhhbGcg Kms7Ci0rCWludCB4MjU1MTltbGtlbV9hdmFpbGFibGUgPSAwLCBuaXN0bWxrZW1fYXZhaWxhYmxl ID0gMDsKLSAKLS0JaWYgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlfU0hBMjU2KSA9 PSAwCi0tCQkmJiAhaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkpCi0tCXJldHVybiBOVUxMOwotKwkv KgotKwkgKiBGSVBTIHByb3ZpZGVyIGNhbiBwcm92aWRlIE1MLUtFTXMgYW5kIHRoZW4gYWxsIGh5 YnJpZHMgYXJlIGF2YWlsYWJsZQotKwkgKiBPdGhlcndpc2Ugb25seSBOSVNUIGh5YnJpZHMgYXJl IGF2YWlsYWJsZQotKwkgKiAqLwotKwlpZiAoRklQU19tb2RlKCkpIHsKLSsJICAgIGlmIChpc19t bGtlbTc2OF9hdmFpbGFibGUoKSA9PSAyKSB7Ci0rCSAgICAgICAgeDI1NTE5bWxrZW1fYXZhaWxh YmxlID0gMTsKLSsJICAgICAgICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKLSsJICAgIH0gZWxz ZSBpZiAoaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkgPT0gMSkgewotKwkgICAgICAgIG5pc3RtbGtl bV9hdmFpbGFibGUgPSAxOwotKwkgICAgfQotKwl9IGVsc2UgewotKwkgICAgaWYgKGlzX21sa2Vt NzY4X2F2YWlsYWJsZSgpID4gMCkgewotKwkgICAgICAgIHgyNTUxOW1sa2VtX2F2YWlsYWJsZSA9 IDE7Ci0rCSAgICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7Ci0rCSAgICB9Ci0rCX0KLSsK LSsJaWYgKCAgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlfU0hBMjU2KSA9PSAwICAg ICYmIHgyNTUxOW1sa2VtX2F2YWlsYWJsZSA9PSAwKQotKwkgICB8fCAoc3RyY21wKG5hbWUsIEtF WF9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NikgPT0gMCAgJiYgbmlzdG1sa2VtX2F2YWlsYWJsZSA9 PSAwKQotKwkgICB8fCAoc3RyY21wKG5hbWUsIEtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQp ID09IDAgJiYgbmlzdG1sa2VtX2F2YWlsYWJsZSA9PSAwKSkKLSsJICAgcmV0dXJuIE5VTEw7Ci0g Ci0gCWZvciAoayA9IGtleGFsZ3M7IGstPm5hbWUgIT0gTlVMTDsgaysrKSB7Ci0gCQlpZiAoc3Ry Y21wKGstPm5hbWUsIG5hbWUpID09IDApCi1AQCAtMjI5LDggKzI4OCwxNiBAQCBrZXhfbmFtZXNf dmFsaWQoY29uc3QgY2hhciAqbmFtZXMpCi0gCQkJcmV0dXJuIDA7Ci0gCQl9Ci0gCQlpZiAoa2V4 X2FsZ19ieV9uYW1lKHApID09IE5VTEwpIHsKLS0JCQlpZiAoRklQU19tb2RlKCkpCi0tCQkJCWVy cm9yKCJcIiUuMTAwc1wiIGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIsIHApOwotKwkJCWlm IChGSVBTX21vZGUoKSkgewotKwkJCQlpZiAoKHN0cmNtcChwLCBLRVhfTUxLRU03NjhYMjU1MTlf U0hBMjU2KSA9PSAwKQotKwkJCQkgICAgfHwgKHN0cmNtcChwLCBLRVhfTUxLRU03NjhOSVNUUDI1 Nl9TSEEyNTYpID09IDApCi0rCQkJCSAgICB8fCAoc3RyY21wKHAsIEtFWF9NTEtFTTEwMjROSVNU UDM4NF9TSEEzODQpID09IDApKSB7Ci0rCQkJCQlkZWJ1ZygiXCIlLjEwMHNcIiBpcyBub3QgYWxs b3dlZCBpbiBGSVBTIG1vZGUiLCBwKTsKLSsJCQkJCWNvbnRpbnVlOwotKwkJCQl9Ci0rCQkJCWVs c2UKLSsJCQkJCWVycm9yKCJcIiUuMTAwc1wiIGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIs IHApOwotKwkJCX0KLSAJCQllbHNlCi0gCQkJCWVycm9yKCJVbnN1cHBvcnRlZCBLRVggYWxnb3Jp dGhtIFwiJS4xMDBzXCIiLCBwKTsKLSAJCQlmcmVlKHMpOwotZGlmZiAtLWdpdCBhL2tleC5jIGIv a2V4LmMKLWluZGV4IDFlYjNjYTlkMy4uOGNmZDQ0NmMwIDEwMDY0NAotLS0tIGEva2V4LmMKLSsr KyBiL2tleC5jCi1AQCAtNzU3LDYgKzc1Nyw3IEBAIGtleF9mcmVlKHN0cnVjdCBrZXggKmtleCkK LSAjaWZkZWYgT1BFTlNTTF9IQVNfRUNDCi0gCUVDX0tFWV9mcmVlKGtleC0+ZWNfY2xpZW50X2tl eSk7Ci0gI2VuZGlmIC8qIE9QRU5TU0xfSEFTX0VDQyAqLwotKwlFVlBfUEtFWV9mcmVlKGtleC0+ ZWNfaHlicmlkX2NsaWVudF9rZXkpOwotICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KLSAJZm9y IChtb2RlID0gMDsgbW9kZSA8IE1PREVfTUFYOyBtb2RlKyspIHsKLSAJCWtleF9mcmVlX25ld2tl eXMoa2V4LT5uZXdrZXlzW21vZGVdKTsKLWRpZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCi1pbmRl eCBmZjQxMzI0ZTkuLmQxMTBhZDI5YSAxMDA2NDQKLS0tLSBhL2tleC5oCi0rKysgYi9rZXguaAot QEAgLTcyLDYgKzcyLDggQEAKLSAjZGVmaW5lCUtFWF9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyCSJz bnRydXA3NjF4MjU1MTktc2hhNTEyIgotICNkZWZpbmUJS0VYX1NOVFJVUDc2MVgyNTUxOV9TSEE1 MTJfT0xECSJzbnRydXA3NjF4MjU1MTktc2hhNTEyQG9wZW5zc2guY29tIgotICNkZWZpbmUJS0VY X01MS0VNNzY4WDI1NTE5X1NIQTI1NgkibWxrZW03Njh4MjU1MTktc2hhMjU2IgotKyNkZWZpbmUJ S0VYX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2ICAgICAibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYi Ci0rI2RlZmluZQlLRVhfTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0ICAgICJtbGtlbTEwMjRuaXN0 cDM4NC1zaGEzODQiCi0gCi0gI2RlZmluZSBDT01QX05PTkUJMAotICNkZWZpbmUgQ09NUF9ERUxB WUVECTIKLUBAIC0xMTAsNiArMTEyLDggQEAgZW51bSBrZXhfZXhjaGFuZ2UgewotIAlLRVhfQzI1 NTE5X1NIQTI1NiwKLSAJS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyLAotIAlLRVhfS0VN X01MS0VNNzY4WDI1NTE5X1NIQTI1NiwKLSsJS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1 NiwKLSsJS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQsCi0gI2lmZGVmIEdTU0FQSQot IAlLRVhfR1NTX0dSUDFfU0hBMSwKLSAJS0VYX0dTU19HUlAxNF9TSEExLAotQEAgLTIxMSw2ICsy MTUsOSBAQCBzdHJ1Y3Qga2V4IHsKLSAJdV9jaGFyIHNudHJ1cDc2MV9jbGllbnRfa2V5W2NyeXB0 b19rZW1fc250cnVwNzYxX1NFQ1JFVEtFWUJZVEVTXTsgLyogS0VNICovCi0gCXVfY2hhciBtbGtl bTc2OF9jbGllbnRfa2V5W2NyeXB0b19rZW1fbWxrZW03NjhfU0VDUkVUS0VZQllURVNdOyAvKiBL RU0gKi8KLSAJc3RydWN0IHNzaGJ1ZiAqY2xpZW50X3B1YjsKLSsJLyogRklYTUUgKi8KLSsJRVZQ X1BLRVkgKmVjX2h5YnJpZF9jbGllbnRfa2V5OyAvKiBOSVNUIGh5YnJpZHMgKi8KLSsJdV9jaGFy IG1sa2VtMTAyNF9jbGllbnRfa2V5W2NyeXB0b19rZW1fbWxrZW0xMDI0X1NFQ1JFVEtFWUJZVEVT XTsgLyogTUwtS0VNIDEwMjQgKyBOSVNUICovCi0gfTsKLSAKLSBpbnQJIGtleF9uYW1lX3ZhbGlk KGNvbnN0IGNoYXIgKik7Ci1AQCAtMjkzLDYgKzMwMCwxOCBAQCBpbnQJIGtleF9rZW1fbWxrZW03 Njh4MjU1MTlfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAotIGludAkg a2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3No YnVmICosCi0gICAgIHN0cnVjdCBzc2hidWYgKiopOwotIAotK2ludAkga2V4X2tlbV9tbGtlbTc2 OG5pc3RwMjU2X2tleXBhaXIoc3RydWN0IGtleCAqKTsKLStpbnQJIGtleF9rZW1fbWxrZW03Njhu aXN0cDI1Nl9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAgIHN0 cnVjdCBzc2hidWYgKiosIHN0cnVjdCBzc2hidWYgKiopOwotK2ludAkga2V4X2tlbV9tbGtlbTc2 OG5pc3RwMjU2X2RlYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKLSsgICAg c3RydWN0IHNzaGJ1ZiAqKik7Ci0rCi0raW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2tl eXBhaXIoc3RydWN0IGtleCAqKTsKLStpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZW5j KHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAotKyAgICBzdHJ1Y3Qgc3NoYnVm ICoqLCBzdHJ1Y3Qgc3NoYnVmICoqKTsKLStpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRf ZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAotKyAgICBzdHJ1Y3Qgc3No YnVmICoqKTsKLSsKLSBpbnQJIGtleF9kaF9rZXlnZW4oc3RydWN0IGtleCAqKTsKLSBpbnQJIGtl eF9kaF9jb21wdXRlX2tleShzdHJ1Y3Qga2V4ICosIEJJR05VTSAqLCBzdHJ1Y3Qgc3NoYnVmICop OwotIAotZGlmZiAtLWdpdCBhL2tleGdlbi5jIGIva2V4Z2VuLmMKLWluZGV4IDJmODI1MjQ4OC4u OWEzNTZlMjk4IDEwMDY0NAotLS0tIGEva2V4Z2VuLmMKLSsrKyBiL2tleGdlbi5jCi1AQCAtMTMz LDEyICsxMzMsMjQgQEAga2V4X2dlbl9jbGllbnQoc3RydWN0IHNzaCAqc3NoKQotIAkJYnJlYWs7 Ci0gCWNhc2UgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTY6Ci0gCQlpZiAoRklQU19tb2Rl KCkpIHsKLS0JCSAgICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBp cyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKLS0JCSAgICByID0gU1NIX0VSUl9JTlZBTElE X0FSR1VNRU5UOwotKwkJICAgIEVWUF9LRU0gKm1sa2VtID0gRVZQX0tFTV9mZXRjaChOVUxMLCAi bWxrZW03NjgiLCBOVUxMKTsKLSsJCSAgICBpZiAobWxrZW0gPT0gTlVMTCkgewotKwkJICAgICAg ICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBpcyBub3QgYWxsb3dl ZCBpbiBGSVBTIG1vZGUiKTsKLSsJCSAgICAgICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVO VDsKLSsJCSAgICB9IGVsc2UgewotKwkJCUVWUF9LRU1fZnJlZShtbGtlbSk7Ci0rCQkgICAgICAg IHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoa2V4KTsKLSsJCSAgICB9Ci0gCQl9 IGVsc2UgewotIAkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoa2V4KTsK LSAJCX0KLSAJCWJyZWFrOwotKwljYXNlIEtFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTY6 Ci0rCQkgICAgciA9IGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9rZXlwYWlyKGtleCk7Ci0rCQli cmVhazsKLSsJY2FzZSBLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NDoKLSsJCSAgICBy ID0ga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9rZXlwYWlyKGtleCk7Ci0rCQlicmVhazsKLSAJ ZGVmYXVsdDoKLSAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0gCQlicmVhazsKLUBA IC0yMjMsMTMgKzIzNSwyOCBAQCBpbnB1dF9rZXhfZ2VuX3JlcGx5KGludCB0eXBlLCB1aW50MzJf dCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSAJCWJyZWFrOwotIAljYXNlIEtFWF9LRU1fTUxLRU03 NjhYMjU1MTlfU0hBMjU2OgotIAkJaWYgKEZJUFNfbW9kZSgpKSB7Ci0tCQkgICAgbG9naXRfZigi S2V5IGV4Y2hhbmdlIHR5cGUgbWxrZW03Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBt b2RlIik7Ci0tCQkgICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSsJCSAgICBFVlBf S0VNICptbGtlbSA9IEVWUF9LRU1fZmV0Y2goTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCk7Ci0rCQkg ICAgaWYgKG1sa2VtID09IE5VTEwpIHsKLSsJCSAgICAgICAgbG9naXRfZigiS2V5IGV4Y2hhbmdl IHR5cGUgbWxrZW03Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIik7Ci0rCQkg ICAgICAgIHIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQkgICAgfSBlbHNlIHsKLSsJ CQlFVlBfS0VNX2ZyZWUobWxrZW0pOwotKwkJICAgICAgICByID0ga2V4X2tlbV9tbGtlbTc2OHgy NTUxOV9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwKLSsJCSAgICAgICAgICAgICZzaGFyZWRfc2VjcmV0 KTsKLSsJCSAgICB9Ci0gCQl9IGVsc2UgewotIAkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1 NTE5X2RlYyhrZXgsIHNlcnZlcl9ibG9iLAotIAkJICAgICAgICAmc2hhcmVkX3NlY3JldCk7Ci0g CQl9Ci0gCQlicmVhazsKLSsJY2FzZSBLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2Ogot KwkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfZGVjKGtleCwgc2VydmVyX2Jsb2Is Ci0rCQkgICAgICAgICZzaGFyZWRfc2VjcmV0KTsKLSsJCWJyZWFrOwotKwljYXNlIEtFWF9LRU1f TUxLRU0xMDI0TklTVFAzODRfU0hBMzg0OgotKwkJICAgIHIgPSBrZXhfa2VtX21sa2VtMTAyNG5p c3RwMzg0X2RlYyhrZXgsIHNlcnZlcl9ibG9iLAotKwkJICAgICAgICAmc2hhcmVkX3NlY3JldCk7 Ci0rCQlicmVhazsKLSAJZGVmYXVsdDoKLSAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7 Ci0gCQlicmVhazsKLUBAIC0yODMsNiArMzEwLDggQEAgb3V0OgotIAkgICAgc2l6ZW9mKGtleC0+ c250cnVwNzYxX2NsaWVudF9rZXkpKTsKLSAJZXhwbGljaXRfYnplcm8oa2V4LT5tbGtlbTc2OF9j bGllbnRfa2V5LAotIAkgICAgc2l6ZW9mKGtleC0+bWxrZW03NjhfY2xpZW50X2tleSkpOwotKwll eHBsaWNpdF9iemVybyhrZXgtPm1sa2VtMTAyNF9jbGllbnRfa2V5LAotKwkgICAgc2l6ZW9mKGtl eC0+bWxrZW0xMDI0X2NsaWVudF9rZXkpKTsKLSAJc3NoYnVmX2ZyZWUoc2VydmVyX2hvc3Rfa2V5 X2Jsb2IpOwotIAlmcmVlKHNpZ25hdHVyZSk7Ci0gCXNzaGJ1Zl9mcmVlKHRtcCk7Ci1AQCAtMzYy LDEzICszOTEsMjggQEAgaW5wdXRfa2V4X2dlbl9pbml0KGludCB0eXBlLCB1aW50MzJfdCBzZXEs IHN0cnVjdCBzc2ggKnNzaCkKLSAJCWJyZWFrOwotIAljYXNlIEtFWF9LRU1fTUxLRU03NjhYMjU1 MTlfU0hBMjU2OgotIAkJaWYgKEZJUFNfbW9kZSgpKSB7Ci0tCQkgICAgbG9naXRfZigiS2V5IGV4 Y2hhbmdlIHR5cGUgbWxrZW03Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIik7 Ci0tCQkgICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSsJCSAgICBFVlBfS0VNICpt bGtlbSA9IEVWUF9LRU1fZmV0Y2goTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCk7Ci0rCQkgICAgaWYg KG1sa2VtID09IE5VTEwpIHsKLSsJCSAgICAgICAgbG9naXRfZigiS2V5IGV4Y2hhbmdlIHR5cGUg bWxrZW03Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIik7Ci0rCQkgICAgICAg IHIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQkgICAgfSBlbHNlIHsKLSsJCQlFVlBf S0VNX2ZyZWUobWxrZW0pOwotKwkJICAgICAgICByID0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9l bmMoa2V4LCBjbGllbnRfcHVia2V5LAotKwkJICAgICAgICAgICAgJnNlcnZlcl9wdWJrZXksICZz aGFyZWRfc2VjcmV0KTsKLSsJCSAgICB9Ci0gCQl9IGVsc2UgewotIAkJICAgIHIgPSBrZXhfa2Vt X21sa2VtNzY4eDI1NTE5X2VuYyhrZXgsIGNsaWVudF9wdWJrZXksCi0gCQkgICAgICAgICZzZXJ2 ZXJfcHVia2V5LCAmc2hhcmVkX3NlY3JldCk7Ci0gCQl9Ci0gCQlicmVhazsKLSsJY2FzZSBLRVhf S0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2OgotKwkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4 bmlzdHAyNTZfZW5jKGtleCwgY2xpZW50X3B1YmtleSwKLSsJCSAgICAgICAgJnNlcnZlcl9wdWJr ZXksICZzaGFyZWRfc2VjcmV0KTsKLSsJCWJyZWFrOwotKwljYXNlIEtFWF9LRU1fTUxLRU0xMDI0 TklTVFAzODRfU0hBMzg0OgotKwkJICAgIHIgPSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2Vu YyhrZXgsIGNsaWVudF9wdWJrZXksCi0rCQkgICAgICAgICZzZXJ2ZXJfcHVia2V5LCAmc2hhcmVk X3NlY3JldCk7Ci0rCQlicmVhazsKLSAJZGVmYXVsdDoKLSAJCXIgPSBTU0hfRVJSX0lOVkFMSURf QVJHVU1FTlQ7Ci0gCQlicmVhazsKLWRpZmYgLS1naXQgYS9rZXhtbGtlbTc2OHgyNTUxOS5jIGIv a2V4bWxrZW03Njh4MjU1MTkuYwotaW5kZXggYWI2MTY3MjIxLi43YzA2M2YyMWMgMTAwNjQ0Ci0t LS0gYS9rZXhtbGtlbTc2OHgyNTUxOS5jCi0rKysgYi9rZXhtbGtlbTc2OHgyNTUxOS5jCi1AQCAt NDQsMTkgKzQ0LDMzIEBACi0gI2lmZGVmIFVTRV9NTEtFTTc2OFgyNTUxOQotIAotICNpbmNsdWRl ICJsaWJjcnV4X21sa2VtNzY4X3NoYTMuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2VjLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotICNpbmNsdWRl IDxzdGRpby5oPgotIAotKyNkZWZpbmUgRklQU19GQUxMQkFDS19QUk9QUSAicHJvdmlkZXI9ZGVm YXVsdCwtZmlwcyIKLSsKLSBzdGF0aWMgaW50Ci0tbWxrZW03Njhfa2V5cGFpcl9nZW4odW5zaWdu ZWQgY2hhciAqcHVia2V5YnVmLCB1bnNpZ25lZCBjaGFyICpwcml2a2V5YnVmKQotK21sa2VtX2tl eXBhaXJfZ2VuKGNvbnN0IGNoYXIgKmFsZ25hbWUsIHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1Ziwg c2l6ZV90IHB1YmtleV9zaXplLAotKwkgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1 Ziwgc2l6ZV90IHByaXZrZXlfc2l6ZSkKLSB7Ci0gICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0gTlVM TDsKLSAgICAgRVZQX1BLRVkgKnBrZXkgPSBOVUxMOwotICAgICBpbnQgcmV0ID0gU1NIX0VSUl9J TlRFUk5BTF9FUlJPUjsKLS0gICAgc2l6ZV90IHB1YmtleV9zaXplID0gY3J5cHRvX2tlbV9tbGtl bTc2OF9QVUJMSUNLRVlCWVRFUywgcHJpdmtleV9zaXplID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9T RUNSRVRLRVlCWVRFUzsKLSsgICAgc2l6ZV90IGdvdF9wdWJfc2l6ZSA9IHB1YmtleV9zaXplLCBn b3RfcHJpdl9zaXplID0gcHJpdmtleV9zaXplOwotKwotKyAgICBjdHggPSBFVlBfUEtFWV9DVFhf bmV3X2Zyb21fbmFtZShOVUxMLCBhbGduYW1lLCBOVUxMKTsKLSsKLSsgICAgaWYgKGN0eCA9PSBO VUxMICYmIEZJUFNfbW9kZSgpKSB7Ci0rCS8qIFdlIGhhdmUgZmlsdGVyZWQgeDI1NTE5ICsgTUwt S0VNIGluIEZJUFMgbW9kZSBlYXJsaWVyCi0rCSAqIHNvIGlmIHdlIGFyZSBpbiBGSVBTIG1vZGUg YW5kIE1MLUtFTSBpcyBub3QgYXZhaWxhYmxlIHdpdGggZGVmYXVsdCBwcm9wcSwKLSsJICogd2Ug Y2FuIGZldGNoIGl0IGZyb20gdGhlIGRlZmF1bHQgcHJvdmlkZXIgKi8KLSsgICAgICAgIGN0eCA9 IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5VTEwsIGFsZ25hbWUsIEZJUFNfRkFMTEJBQ0tf UFJPUFEpOwotKyAgICB9Ci0gCi0tICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1l KE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOwotICAgICBpZiAoY3R4ID09IE5VTEwpIHsKLSAJcmV0 ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gCWdvdG8gZXJyOwotQEAgLTY4LDE3ICs4Miwy MyBAQCBtbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNpZ25lZCBjaGFyICpwdWJrZXlidWYsIHVuc2ln bmVkIGNoYXIgKnByaXZrZXlidWYpCi0gICAgICAgICBnb3RvIGVycjsKLSAgICAgfQotIAotLSAg ICBpZiAoRVZQX1BLRVlfZ2V0X3Jhd19wdWJsaWNfa2V5KHBrZXksIHB1YmtleWJ1ZiwgJnB1Ymtl eV9zaXplKSA8PSAwCi0tCXx8IEVWUF9QS0VZX2dldF9yYXdfcHJpdmF0ZV9rZXkocGtleSwgcHJp dmtleWJ1ZiwgJnByaXZrZXlfc2l6ZSkgPD0gMCkgewotKyAgICBpZiAoRVZQX1BLRVlfZ2V0X3Jh d19wdWJsaWNfa2V5KHBrZXksIE5VTEwsICZnb3RfcHViX3NpemUpIDw9IDAKLSsJfHwgRVZQX1BL RVlfZ2V0X3Jhd19wcml2YXRlX2tleShwa2V5LCBOVUxMLCAmZ290X3ByaXZfc2l6ZSkgPD0gMCkg ewotIAlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSAgICAgICAgIGdvdG8gZXJyOwot ICAgICB9Ci0gCi0tICAgIGlmIChwcml2a2V5X3NpemUgIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9T RUNSRVRLRVlCWVRFUwotLQkgICAgfHwgcHVia2V5X3NpemUgIT0gY3J5cHRvX2tlbV9tbGtlbTc2 OF9QVUJMSUNLRVlCWVRFUykgewotKyAgICBpZiAocHJpdmtleV9zaXplICE9IGdvdF9wcml2X3Np emUgfHwgcHVia2V5X3NpemUgIT0gZ290X3B1Yl9zaXplKSB7Ci0gCXJldCA9IFNTSF9FUlJfTElC Q1JZUFRPX0VSUk9SOwotICAgICAgICAgZ290byBlcnI7Ci0gICAgIH0KLSsKLSsgICAgaWYgKEVW UF9QS0VZX2dldF9yYXdfcHVibGljX2tleShwa2V5LCBwdWJrZXlidWYsICZnb3RfcHViX3NpemUp IDw9IDAKLSsJfHwgRVZQX1BLRVlfZ2V0X3Jhd19wcml2YXRlX2tleShwa2V5LCBwcml2a2V5YnVm LCAmZ290X3ByaXZfc2l6ZSkgPD0gMCkgewotKwlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJP UjsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0gICAgIHJldCA9IDA7Ci0gCi0gIGVy cjoKLUBAIC05MCwyNyArMTEwLDU3IEBAIG1sa2VtNzY4X2tleXBhaXJfZ2VuKHVuc2lnbmVkIGNo YXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1ZikKLSB9Ci0gCi0gc3RhdGlj IGludAotLW1sa2VtNzY4X2VuY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnB1YmtleWJ1ZiwgdV9j aGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQotK21sa2VtNzY4X2tleXBhaXJfZ2VuKHVuc2lnbmVk IGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1ZikKLSt7Ci0rCXJldHVy biBtbGtlbV9rZXlwYWlyX2dlbigibWxrZW03NjgiLCBwdWJrZXlidWYsIGNyeXB0b19rZW1fbWxr ZW03NjhfUFVCTElDS0VZQllURVMsCi0rCQkJcHJpdmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTc2 OF9TRUNSRVRLRVlCWVRFUyk7Ci0rfQotKwotK3N0YXRpYyBpbnQKLSttbGtlbTEwMjRfa2V5cGFp cl9nZW4odW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCB1bnNpZ25lZCBjaGFyICpwcml2a2V5YnVm KQotK3sKLSsJcmV0dXJuIG1sa2VtX2tleXBhaXJfZ2VuKCJtbGtlbTEwMjQiLCBwdWJrZXlidWYs IGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTLAotKwkJCXByaXZrZXlidWYsIGNy eXB0b19rZW1fbWxrZW0xMDI0X1NFQ1JFVEtFWUJZVEVTKTsKLSt9Ci0rCi0rc3RhdGljIGludAot K21sa2VtX2VuY2FwX3NlY3JldChjb25zdCBjaGFyICptbGtlbV9hbGcsIGNvbnN0IHVfY2hhciAq cHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwgdV9jaGFyICpvdXQpCi0gewotICAgICBFVlBfUEtF WSAqcGtleSA9IE5VTEw7Ci0gICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKLSAgICAgaW50 IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotLSAgICBzaXplX3Qgb3V0bGVuID0gY3J5cHRv X2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMsCi0tCSAgIHNlY3JldGxlbiA9IGNyeXB0b19r ZW1fbWxrZW03NjhfQllURVM7Ci0rICAgIHNpemVfdCBvdXRsZW4sIGV4cGVjdGVkX291dGxlbiwg cHVibGVuLCBzZWNyZXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTOwotKyAgICBpbnQg Zmlwc19mYWxsYmFjayA9IDA7Ci0rCi0rICAgIGlmIChzdHJjbXAobWxrZW1fYWxnLCAibWxrZW03 NjgiKSA9PSAwKSB7Ci0rCSAgICBvdXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRF WFRCWVRFUzsKLSsJICAgIHB1YmxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllU RVM7Ci0rICAgIH0gZWxzZSBpZiAoc3RyY21wKG1sa2VtX2FsZywgIm1sa2VtMTAyNCIpID09IDAp IHsKLSsJICAgIG91dGxlbiA9IGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUzsK LSsJICAgIHB1YmxlbiA9IGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTOwotKyAg ICB9IGVsc2UKLSsJICAgIHJldHVybiByOwotIAotLSAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jh d19wdWJsaWNfa2V5X2V4KE5VTEwsICJtbGtlbTc2OCIsIE5VTEwsCi0tCQkgICAgcHVia2V5YnVm LCBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTKTsKLSsgICAgZXhwZWN0ZWRfb3V0 bGVuID0gb3V0bGVuOwotKwotKyAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wdWJsaWNfa2V5 X2V4KE5VTEwsIG1sa2VtX2FsZywgTlVMTCwKLSsJCSAgICBwdWJrZXlidWYsIHB1Ymxlbik7Ci0r ICAgIGlmIChwa2V5ID09IE5VTEwgJiYgRklQU19tb2RlKCkpIHsKLSsgICAgICAgIHBrZXkgPSBF VlBfUEtFWV9uZXdfcmF3X3B1YmxpY19rZXlfZXgoTlVMTCwgbWxrZW1fYWxnLCBGSVBTX0ZBTExC QUNLX1BST1BRLAotKwkJICAgIHB1YmtleWJ1ZiwgcHVibGVuKTsKLSsJZmlwc19mYWxsYmFjayA9 IDE7Ci0rICAgIH0KLSAgICAgaWYgKHBrZXkgPT0gTlVMTCkgewotIAlyID0gU1NIX0VSUl9MSUJD UllQVE9fRVJST1I7Ci0gCWdvdG8gZXJyOwotICAgICB9Ci0gCi0tICAgIGN0eCA9IEVWUF9QS0VZ X0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBrZXksIE5VTEwpOwotKyAgICBjdHggPSBFVlBfUEtF WV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5LCBmaXBzX2ZhbGxiYWNrID8gRklQU19GQUxM QkFDS19QUk9QUSA6IE5VTEwpOwotICAgICBpZiAoY3R4ID09IE5VTEwKLSAJfHwgRVZQX1BLRVlf ZW5jYXBzdWxhdGVfaW5pdChjdHgsIE5VTEwpIDw9IDAKLS0gICAgICAgIHx8IEVWUF9QS0VZX2Vu Y2Fwc3VsYXRlKGN0eCwgb3V0LCAmb3V0bGVuLCBzZWNyZXQsICZzZWNyZXRsZW4pIDw9IDAKLSsg ICAgICAgIHx8IEVWUF9QS0VZX2VuY2Fwc3VsYXRlKGN0eCwgb3V0LCAmZXhwZWN0ZWRfb3V0bGVu LCBzZWNyZXQsICZzZWNyZXRsZW4pIDw9IDAKLSAJfHwgc2VjcmV0bGVuICE9IGNyeXB0b19rZW1f bWxrZW03NjhfQllURVMKLS0JfHwgb3V0bGVuICE9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVS VEVYVEJZVEVTKSB7Ci0rCXx8IG91dGxlbiAhPSBleHBlY3RlZF9vdXRsZW4pIHsKLSAJciA9IFNT SF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotIAlnb3RvIGVycjsKLSAgICAgfQotQEAgLTEyNiwyNSAr MTc2LDQ1IEBAIG1sa2VtNzY4X2VuY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnB1YmtleWJ1Ziwg dV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQotIH0KLSAKLSBzdGF0aWMgaW50Ci0tbWxrZW03 NjhfZGVjYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHJpdmtleWJ1ZiwgY29uc3QgdV9jaGFyICp3 cmFwcGVkLCB1X2NoYXIgKnNlY3JldCkKLSttbGtlbTc2OF9lbmNhcF9zZWNyZXQoY29uc3QgdV9j aGFyICpwdWJrZXlidWYsIHVfY2hhciAqc2VjcmV0LCB1X2NoYXIgKm91dCkKLSt7Ci0rCXJldHVy biBtbGtlbV9lbmNhcF9zZWNyZXQoIm1sa2VtNzY4IiwgcHVia2V5YnVmLCBzZWNyZXQsIG91dCk7 Ci0rfQotKwotK3N0YXRpYyBpbnQKLSttbGtlbTEwMjRfZW5jYXBfc2VjcmV0KGNvbnN0IHVfY2hh ciAqcHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwgdV9jaGFyICpvdXQpCi0rewotKwlyZXR1cm4g bWxrZW1fZW5jYXBfc2VjcmV0KCJtbGtlbTEwMjQiLCBwdWJrZXlidWYsIHNlY3JldCwgb3V0KTsK LSt9Ci0rCi0rc3RhdGljIGludAotK21sa2VtX2RlY2FwX3NlY3JldChjb25zdCBjaGFyICphbGdu YW1lLAotKyAgICBjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIHNpemVfdCBwcml2a2V5X2xlbiwK LSsgICAgY29uc3QgdV9jaGFyICp3cmFwcGVkLCBzaXplX3Qgd3JhcHBlZF9sZW4sCi0rICAgIHVf Y2hhciAqc2VjcmV0KQotIHsKLSAgICAgRVZQX1BLRVkgKnBrZXkgPSBOVUxMOwotICAgICBFVlBf UEtFWV9DVFggKmN0eCA9IE5VTEw7Ci0gICAgIGludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJP UjsKLS0gICAgc2l6ZV90IHdyYXBwZWRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRF WFRCWVRFUywKLS0JICAgc2VjcmV0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUzsKLSsg ICAgc2l6ZV90IHNlY3JldGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVM7Ci0rICAgIGlu dCBmaXBzX2ZhbGxiYWNrID0gMDsKLSAKLS0gICAgcGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHJp dmF0ZV9rZXlfZXgoTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCwKLS0JCSAgICBwcml2a2V5YnVmLCBj cnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JFVEtFWUJZVEVTKTsKLSsgICAgcGtleSA9IEVWUF9QS0VZ X25ld19yYXdfcHJpdmF0ZV9rZXlfZXgoTlVMTCwgYWxnbmFtZSwKLSsJCSAgICBOVUxMLCBwcml2 a2V5YnVmLCBwcml2a2V5X2xlbik7Ci0rICAgIGlmIChwa2V5ID09IE5VTEwgJiYgRklQU19tb2Rl KCkpIHsKLSsgICAgICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3ByaXZhdGVfa2V5X2V4KE5V TEwsIGFsZ25hbWUsCi0rCQkgICAgRklQU19GQUxMQkFDS19QUk9QUSwgcHJpdmtleWJ1ZiwgcHJp dmtleV9sZW4pOwotKwlmaXBzX2ZhbGxiYWNrID0gMTsKLSsgICAgfQotICAgICBpZiAocGtleSA9 PSBOVUxMKSB7Ci0gCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSAJZ290byBlcnI7Ci0g ICAgIH0KLSAKLS0gICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX3BrZXkoTlVMTCwgcGtl eSwgTlVMTCk7Ci0rICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBr ZXksIGZpcHNfZmFsbGJhY2sgPyBGSVBTX0ZBTExCQUNLX1BST1BRIDogTlVMTCk7Ci0gICAgIGlm IChjdHggPT0gTlVMTAotIAl8fCBFVlBfUEtFWV9kZWNhcHN1bGF0ZV9pbml0KGN0eCwgTlVMTCkg PD0gMAotLSAgICAgICAgfHwgRVZQX1BLRVlfZGVjYXBzdWxhdGUoY3R4LCBzZWNyZXQsICZzZWNy ZXRsZW4sIHdyYXBwZWQsIHdyYXBwZWRsZW4pIDw9IDAKLSsgICAgICAgIHx8IEVWUF9QS0VZX2Rl Y2Fwc3VsYXRlKGN0eCwgc2VjcmV0LCAmc2VjcmV0bGVuLCB3cmFwcGVkLCB3cmFwcGVkX2xlbikg PD0gMAotIAl8fCBzZWNyZXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUykgewotIAly ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gCWdvdG8gZXJyOwotQEAgLTE2MSw2ICsyMzEs MjAgQEAgbWxrZW03NjhfZGVjYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHJpdmtleWJ1ZiwgY29u c3QgdV9jaGFyICp3cmFwcGVkLCB1X2NoYXIgKnMKLSAgICAgcmV0dXJuIHI7Ci0gfQotIAotK3N0 YXRpYyBpbnQKLSttbGtlbTc2OF9kZWNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwcml2a2V5YnVm LCBjb25zdCB1X2NoYXIgKndyYXBwZWQsIHVfY2hhciAqc2VjcmV0KQotK3sKLSsJcmV0dXJuIG1s a2VtX2RlY2FwX3NlY3JldCgibWxrZW03NjgiLCBwcml2a2V5YnVmLCBjcnlwdG9fa2VtX21sa2Vt NzY4X1NFQ1JFVEtFWUJZVEVTLAotKwkJd3JhcHBlZCwgY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBI RVJURVhUQllURVMsIHNlY3JldCk7Ci0rfQotKwotK3N0YXRpYyBpbnQKLSttbGtlbTEwMjRfZGVj YXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHJpdmtleWJ1ZiwgY29uc3QgdV9jaGFyICp3cmFwcGVk LCB1X2NoYXIgKnNlY3JldCkKLSt7Ci0rCXJldHVybiBtbGtlbV9kZWNhcF9zZWNyZXQoIm1sa2Vt MTAyNCIsIHByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW0xMDI0X1NFQ1JFVEtFWUJZVEVTLAot KwkJd3JhcHBlZCwgY3J5cHRvX2tlbV9tbGtlbTEwMjRfQ0lQSEVSVEVYVEJZVEVTLCBzZWNyZXQp OwotK30KLSsKLSBpbnQKLSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoc3RydWN0IGtl eCAqa2V4KQotIHsKLUBAIC0zMzcsNyArNDIxLDcgQEAga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9l bmMoc3RydWN0IGtleCAqa2V4LAotIAl1X2NoYXIgaGFzaFtTU0hfRElHRVNUX01BWF9MRU5HVEhd OwotIAlzaXplX3QgbmVlZDsKLSAJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotLQlz dHJ1Y3QgbGliY3J1eF9tbGtlbTc2OF9lbmNfcmVzdWx0IGVuYzsgLyogRklYTUUgKi8KLSsJc3Ry dWN0IGxpYmNydXhfbWxrZW03NjhfZW5jX3Jlc3VsdCBlbmM7Ci0gCi0gCSpzZXJ2ZXJfYmxvYnAg PSBOVUxMOwotIAkqc2hhcmVkX3NlY3JldHAgPSBOVUxMOwotQEAgLTU0Niw2ICs2MzAsNTIwIEBA IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfZGVjKHN0cnVjdCBrZXggKmtleCwKLSAJcmV0dXJuIHI7 Ci0gI2VuZGlmCi0gfQotKwotKyNkZWZpbmUgTklTVF9QMjU2X0NPTVBSRVNTRURfTEVOICAgMzMK LSsjZGVmaW5lIE5JU1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOIDY1Ci0rI2RlZmluZSBOSVNUX1Az ODRfQ09NUFJFU1NFRF9MRU4gICA0OQotKyNkZWZpbmUgTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9M RU4gOTcKLSsjZGVmaW5lIE5JU1RfQlVGX01BWF9TSVpFIE5JU1RfUDM4NF9VTkNPTVBSRVNTRURf TEVOCi0rCi0rc3RhdGljIGNvbnN0IGNoYXIgZWMyNTZbXSA9ICJQLTI1NiI7Ci0rc3RhdGljIGNv bnN0IGNoYXIgZWMzODRbXSA9ICJQLTM4NCI7Ci0rc3RhdGljIGNvbnN0IGNoYXIgKmxlbjJjdXJ2 ZV9uYW1lKHNpemVfdCBsZW4pCi0rewotKwlzd2l0Y2ggKGxlbikgewotKwkJY2FzZSBOSVNUX1Ay NTZfQ09NUFJFU1NFRF9MRU46Ci0rCQljYXNlIE5JU1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOOgot KwkJCXJldHVybiBlYzI1NjsKLSsJCQlicmVhazsKLSsJCWNhc2UgTklTVF9QMzg0X0NPTVBSRVNT RURfTEVOOgotKwkJY2FzZSBOSVNUX1AzODRfVU5DT01QUkVTU0VEX0xFTjoKLSsJCQlyZXR1cm4g ZWMzODQ7Ci0rCQkJYnJlYWs7Ci0rCX0KLSsJcmV0dXJuIE5VTEw7Ci0rfQotKwotK3N0YXRpYyBF VlBfUEtFWSAqCi0rYnVmMm5pc3Rfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB1Yl9rZXlfYnVm LCBzaXplX3QgcHViX2tleV9sZW4pCi0rewotKwlFVlBfUEtFWSAqcGtleSA9IE5VTEw7Ci0rCUVW UF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKLSsJT1NTTF9QQVJBTSBwYXJhbXNbM107Ci0rCWNvbnN0 IGNoYXIgKmN1cnZlX25hbWUgPSBsZW4yY3VydmVfbmFtZShwdWJfa2V5X2xlbik7Ci0rCi0rCWlm IChjdXJ2ZV9uYW1lID09IE5VTEwpCi0rCQlyZXR1cm4gTlVMTDsKLSsKLSsJY3R4ID0gRVZQX1BL RVlfQ1RYX25ld19mcm9tX25hbWUoTlVMTCwgIkVDIiwgTlVMTCk7Ci0rCWlmICghY3R4KQotKwkJ Z290byBlcnI7Ci0rCi0rCWlmIChFVlBfUEtFWV9mcm9tZGF0YV9pbml0KGN0eCkgPD0gMCkKLSsJ CWdvdG8gZXJyOwotKwotKwlwYXJhbXNbMF0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF91dGY4X3N0 cmluZyhPU1NMX1BLRVlfUEFSQU1fR1JPVVBfTkFNRSwgY3VydmVfbmFtZSwgMCk7Ci0rCXBhcmFt c1sxXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X29jdGV0X3N0cmluZygKLSsJCQlPU1NMX1BLRVlf UEFSQU1fUFVCX0tFWSwgKHZvaWQgKilwdWJfa2V5X2J1ZiwgcHViX2tleV9sZW4pOwotKwlwYXJh bXNbMl0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF9lbmQoKTsKLSsKLSsJaWYgKEVWUF9QS0VZX2Zy b21kYXRhKGN0eCwgJnBrZXksIEVWUF9QS0VZX1BVQkxJQ19LRVksIHBhcmFtcykgPD0gMCkKLSsJ CWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOwotKwlyZXR1cm4gcGtleTsK LSsKLStlcnI6Ci0rCUVWUF9QS0VZX0NUWF9mcmVlKGN0eCk7Ci0rCUVWUF9QS0VZX2ZyZWUocGtl eSk7Ci0rCXJldHVybiBOVUxMOwotK30KLSsKLStzdGF0aWMgaW50Ci0ra2V4X25pc3Rfc2hhcmVk X2tleV9leHQoRVZQX1BLRVkgKnByaXZfa2V5LAotKyAgICBjb25zdCB1X2NoYXIgKnB1Yl9rZXlf YnVmLCBzaXplX3QgcHViX2tleV9sZW4sIHN0cnVjdCBzc2hidWYgKm91dCkKLSt7Ci0rCUVWUF9Q S0VZX0NUWCAqY3R4ID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqc2hhcmVkX3NlY3JldCA9IE5V TEw7Ci0rCXNpemVfdCBzaGFyZWRfc2VjcmV0X2xlbiA9IDA7Ci0rCUVWUF9QS0VZICpwZWVyX2tl eSA9IGJ1ZjJuaXN0X2tleShwdWJfa2V5X2J1ZiwgcHViX2tleV9sZW4pOwotKwlpbnQgciA9IFNT SF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCi0rCWlmIChwZWVyX2tleSA9PSBOVUxMKQotKwkJcmV0 dXJuIFNTSF9FUlJfS0VZX0xFTkdUSDsKLSsKLSsJY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9t X3BrZXkoTlVMTCwgcHJpdl9rZXksIE5VTEwpOwotKwlpZiAoIWN0eCkKLSsJCWdvdG8gZW5kOwot KwotKwlpZiAoKEVWUF9QS0VZX2Rlcml2ZV9pbml0KGN0eCkgPD0gMCkKLSsJCXx8IEVWUF9QS0VZ X2Rlcml2ZV9zZXRfcGVlcihjdHgsIHBlZXJfa2V5KSA8PSAwCi0rCQl8fCBFVlBfUEtFWV9kZXJp dmUoY3R4LCBOVUxMLCAmc2hhcmVkX3NlY3JldF9sZW4pIDw9IDApCi0rCQlnb3RvIGVuZDsKLSsK LSsJc2hhcmVkX3NlY3JldCA9IE9QRU5TU0xfbWFsbG9jKHNoYXJlZF9zZWNyZXRfbGVuKTsKLSsJ aWYgKHNoYXJlZF9zZWNyZXQgPT0gTlVMTCkKLSsJCWdvdG8gZW5kOwotKwotKwlpZiAoRVZQX1BL RVlfZGVyaXZlKGN0eCwgc2hhcmVkX3NlY3JldCwgJnNoYXJlZF9zZWNyZXRfbGVuKSA8PSAwKQot KwkJZ290byBlbmQ7Ci0rCi0rCWlmICgociA9IHNzaGJ1Zl9wdXQob3V0LCBzaGFyZWRfc2VjcmV0 LCBzaGFyZWRfc2VjcmV0X2xlbikpICE9IDApCi0rCQlnb3RvIGVuZDsKLSsKLSsJciA9IDA7Ci0r Ci0rZW5kOgotKwlFVlBfUEtFWV9mcmVlKHBlZXJfa2V5KTsKLSsJaWYgKHNoYXJlZF9zZWNyZXQp Ci0rCQlPUEVOU1NMX2NsZWFyX2ZyZWUoc2hhcmVkX3NlY3JldCwgc2hhcmVkX3NlY3JldF9sZW4p OwotKwlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOwotKwotKwlyZXR1cm4gcjsKLSt9Ci0rCi0rc3Rh dGljIEVWUF9QS0VZICoKLStuaXN0X3BrZXlfa2V5Z2VuKHNpemVfdCBwdWJfa2V5X2xlbikKLSt7 Ci0rCWNvbnN0IGNoYXIgKmN1cnZlX25hbWUgPSBsZW4yY3VydmVfbmFtZShwdWJfa2V5X2xlbik7 Ci0rCUVWUF9QS0VZX0NUWCAqcGN0eCA9IE5VTEw7Ci0rCUVWUF9QS0VZICpwa2V5ID0gTlVMTDsK LSsJT1NTTF9QQVJBTSBwYXJhbXNbMl07Ci0rCi0rCWlmIChjdXJ2ZV9uYW1lID09IE5VTEwpCi0r CQlyZXR1cm4gTlVMTDsKLSsKLSsJcGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5V TEwsICJFQyIsIE5VTEwpOwotKwlpZiAoIXBjdHgpCi0rCQlyZXR1cm4gTlVMTDsKLSsKLSsJaWYg KEVWUF9QS0VZX2tleWdlbl9pbml0KHBjdHgpIDw9IDApIHsKLSsJCUVWUF9QS0VZX0NUWF9mcmVl KHBjdHgpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJcGFyYW1zWzBdID0gT1NTTF9QQVJB TV9jb25zdHJ1Y3RfdXRmOF9zdHJpbmcoT1NTTF9QS0VZX1BBUkFNX0dST1VQX05BTUUsIGN1cnZl X25hbWUsIDApOwotKwlwYXJhbXNbMV0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF9lbmQoKTsKLSsK LSsJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcGFyYW1zKHBjdHgsIHBhcmFtcykgPD0gMAotKwkgICAg fHwgRVZQX1BLRVlfa2V5Z2VuKHBjdHgsICZwa2V5KSA8PSAwKSB7Ci0rCQlFVlBfUEtFWV9DVFhf ZnJlZShwY3R4KTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCUVWUF9QS0VZX0NUWF9mcmVl KHBjdHgpOwotKwlyZXR1cm4gcGtleTsKLSt9Ci0rCi0rc3RhdGljIHNpemVfdCBkZWNvbXByZXNz X3B1Yl9rZXkodm9pZCAqcHViLCBzaXplX3QgY29tcHJlc3NlZF9sZW4sIHNpemVfdCBkZWNvbXBy ZXNzZWRfbGVuKQotK3sKLSsgICAgRUNfR1JPVVAgKmdyb3VwID0gTlVMTDsKLSsgICAgRUNfUE9J TlQgKnBvaW50ID0gTlVMTDsKLSsgICAgQk5fQ1RYICpjdHggPSBOVUxMOwotKyAgICBzaXplX3Qg bGVuID0gMDsKLSsgICAgaW50IGdyb3VwX25pZCA9IE5JRF91bmRlZjsKLSsKLSsgICAgc3dpdGNo IChjb21wcmVzc2VkX2xlbikgewotKyAgICBjYXNlIE5JU1RfUDI1Nl9DT01QUkVTU0VEX0xFTjoK LSsgICAgICAgICBncm91cF9uaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKLSsgICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgTklTVF9QMzg0X0NPTVBSRVNTRURfTEVOOgotKyAgICAgICAgIGdyb3Vw X25pZCA9IE5JRF9zZWNwMzg0cjE7Ci0rICAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgY3R4ID0gQk5f Q1RYX25ldygpOwotKyAgICBncm91cCA9IEVDX0dST1VQX25ld19ieV9jdXJ2ZV9uYW1lKGdyb3Vw X25pZCk7Ci0rICAgIGlmIChjdHggPT0gTlVMTCB8fCBncm91cCA9PSBOVUxMKQotKyAgICAgICAg Z290byBlcnI7Ci0rCi0rICAgIHBvaW50ID0gRUNfUE9JTlRfbmV3KGdyb3VwKTsKLSsgICAgaWYg KHBvaW50ID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFFQ19QT0lO VF9vY3QycG9pbnQoZ3JvdXAsIHBvaW50LCBwdWIsIGNvbXByZXNzZWRfbGVuLCBjdHgpKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGxlbiA9IEVDX1BPSU5UX3BvaW50Mm9jdChncm91cCwg cG9pbnQsIFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VELCBwdWIsIGRlY29tcHJlc3NlZF9s ZW4sIGN0eCk7Ci0rCi0rZXJyOgotKyAgICBFQ19QT0lOVF9mcmVlKHBvaW50KTsKLSsgICAgRUNf R1JPVVBfZnJlZShncm91cCk7Ci0rICAgIEJOX0NUWF9mcmVlKGN0eCk7Ci0rCi0rICAgIHJldHVy biBsZW47Ci0rfQotKwotK3N0YXRpYyBpbnQKLStnZXRfdW5jb21wcmVzc2VkX2VjX3B1YmtleShF VlBfUEtFWSAqcGtleSwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbikKLSt7Ci0r ICAgIE9TU0xfUEFSQU0gcGFyYW1zWzJdOwotKyAgICBzaXplX3QgcmVxdWlyZWRfbGVuID0gMCwg b3V0X2xlbiA9IDA7Ci0rCi0rICAgIHBhcmFtc1swXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X3V0 Zjhfc3RyaW5nKAotKyAgICAgICAgT1NTTF9QS0VZX1BBUkFNX0VDX1BPSU5UX0NPTlZFUlNJT05f Rk9STUFULAotKyAgICAgICAgInVuY29tcHJlc3NlZCIsIDApOwotKyAgICBwYXJhbXNbMV0gPSBP U1NMX1BBUkFNX2NvbnN0cnVjdF9lbmQoKTsKLSsKLSsgICAgaWYgKEVWUF9QS0VZX3NldF9wYXJh bXMocGtleSwgcGFyYW1zKSA8PSAwCi0rCSAgICB8fCBFVlBfUEtFWV9nZXRfb2N0ZXRfc3RyaW5n X3BhcmFtKHBrZXksIE9TU0xfUEtFWV9QQVJBTV9QVUJfS0VZLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgYnVmX2xlbiwgJnJlcXVpcmVkX2xlbikgPD0g MCkgewotKyAgICAgICAgcmV0dXJuIFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotKyAgICB9Ci0r Ci0rICAgIGlmIChyZXF1aXJlZF9sZW4gIT0gYnVmX2xlbikgewotKyAgICAgICAgLyogUmVkIEhh dCBjZXJ0aWZpZWQgRklQUyBwcm92aWRlciBpZ25vcmVzIE9TU0xfUEtFWV9QQVJBTV9FQ19QT0lO VF9DT05WRVJTSU9OX0ZPUk1BVAotKwkgKiBXZSBtYXkgaGF2ZSB0byBwZXJmb3JtIHRoZSBjb252 ZXJzaW9uIG1hbnVhbGx5ICovCi0rICAgICAgICBpZiAobGVuMmN1cnZlX25hbWUocmVxdWlyZWRf bGVuKSA9PSBsZW4yY3VydmVfbmFtZShidWZfbGVuKSkgewotKwkgICAgb3V0X2xlbiA9IGRlY29t cHJlc3NfcHViX2tleShidWYsIHJlcXVpcmVkX2xlbiwgYnVmX2xlbik7Ci0rCSAgICBpZiAob3V0 X2xlbiAhPSBidWZfbGVuKSB7Ci0rCSAgICAgICAgZGVidWdfZigiRXJyb3IgZGVjb21wcmVzc2lu ZyB0aGUgY29tcHJlc3NlZCBwdWJsaWMga2V5Iik7Ci0rCSAgICAgICAgcmV0dXJuIFNTSF9FUlJf TElCQ1JZUFRPX0VSUk9SOwotKwkgICAgfSBlbHNlIHsKLSsJCXJldHVybiAwOwotKwkgICAgfQot Kwl9IGVsc2UgewotKwkgICAgZGVidWdfZigiVW5leHBlY3RlZCBsZW5ndGggb2YgdW5jb21wcmVz c2VkIHB1YmxpYyBrZXk6IGV4cGVjdGVkICVkLCBnb3QgJWQiLCBidWZfbGVuLCByZXF1aXJlZF9s ZW4pOwotKwkgICAgcmV0dXJuIFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotKwl9Ci0rICAgIH0K LSsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKy8qIG5pc3RfYnl0ZXNfbGVuIHNob3VsZCBhbHdheXMg YmUgdW5jb21wcmVzc2VkICovCi0rc3RhdGljIGludAotK2tleF9rZW1fbWxrZW1fbmlzdF9rZXlw YWlyKHN0cnVjdCBrZXggKmtleCwgc2l6ZV90IG1sa2VtX2J5dGVzX2xlbiwgc2l6ZV90IG5pc3Rf Ynl0ZXNfbGVuKQotK3sKLSsJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKLSsJdV9jaGFyICpj cCA9IE5VTEw7Ci0rCXNpemVfdCBuZWVkOwotKwlpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJS T1I7Ci0rCXVfY2hhciAqY2xpZW50X2tleSA9IE5VTEw7Ci0rCi0rCWlmICgoYnVmID0gc3NoYnVm X25ldygpKSA9PSBOVUxMKQotKwkJcmV0dXJuIFNTSF9FUlJfQUxMT0NfRkFJTDsKLSsJbmVlZCA9 IG1sa2VtX2J5dGVzX2xlbiArIG5pc3RfYnl0ZXNfbGVuOwotKwlpZiAoKHIgPSBzc2hidWZfcmVz ZXJ2ZShidWYsIG5lZWQsICZjcCkpICE9IDApCi0rCQlnb3RvIG91dDsKLSsKLSsJaWYgKG1sa2Vt X2J5dGVzX2xlbiA9PSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTKSB7Ci0rCQlj bGllbnRfa2V5ID0ga2V4LT5tbGtlbTc2OF9jbGllbnRfa2V5OwotKwkJciA9IG1sa2VtNzY4X2tl eXBhaXJfZ2VuKGNwLCBjbGllbnRfa2V5KTsKLSsJfQotKwotKwlpZiAobWxrZW1fYnl0ZXNfbGVu ID09IGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTKSB7Ci0rCQljbGllbnRfa2V5 ID0ga2V4LT5tbGtlbTEwMjRfY2xpZW50X2tleTsKLSsJCXIgPSBtbGtlbTEwMjRfa2V5cGFpcl9n ZW4oY3AsIGNsaWVudF9rZXkpOwotKwl9Ci0rCi0rCWlmIChjbGllbnRfa2V5ID09IE5VTEwpCi0r CQlnb3RvIG91dDsKLSsKLSsJaWYgKHIgIT0gMCkKLSsJCWdvdG8gb3V0OwotKyNpZmRlZiBERUJV R19LRVhFQ0RICi0rCWR1bXBfZGlnZXN0KCJjbGllbnQgcHVibGljIGtleSBtbGtlbVhYWDoiLCBj cCwgbWxrZW1fYnl0ZXNfbGVuKTsKLSsjZW5kaWYKLSsJY3AgKz0gbWxrZW1fYnl0ZXNfbGVuOwot KwlpZiAoKGtleC0+ZWNfaHlicmlkX2NsaWVudF9rZXkgPSBuaXN0X3BrZXlfa2V5Z2VuKG5pc3Rf Ynl0ZXNfbGVuKSkgPT0gTlVMTCkKLSsJCWdvdG8gb3V0OwotKwotKwlpZiAoKHIgPSBnZXRfdW5j b21wcmVzc2VkX2VjX3B1YmtleShrZXgtPmVjX2h5YnJpZF9jbGllbnRfa2V5LCBjcCwgbmlzdF9i eXRlc19sZW4pKSAhPSAwKQotKwkJZ290byBvdXQ7Ci0rCi0rI2lmZGVmIERFQlVHX0tFWEVDREgK LSsJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5IE5JU1Q6IiwgY3AsIG5pc3RfYnl0ZXNf bGVuKTsKLSsjZW5kaWYKLSsJLyogc3VjY2VzcyAqLwotKwlyID0gMDsKLSsJa2V4LT5jbGllbnRf cHViID0gYnVmOwotKwlidWYgPSBOVUxMOwotKyBvdXQ6Ci0rCXNzaGJ1Zl9mcmVlKGJ1Zik7Ci0r ICAgICAgICBpZiAociA9PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUikKLSsJICAgRVJSX3ByaW50 X2Vycm9yc19mcChzdGRlcnIpOwotKwotKwlyZXR1cm4gcjsKLSt9Ci0rCi0rc3RhdGljIGludAot K2tleF9rZW1fbWxrZW1fbmlzdF9lbmMoc3RydWN0IGtleCAqa2V4LCBjb25zdCBjaGFyICpuaXN0 X2N1cnZlLAotKyAgIGNvbnN0IHN0cnVjdCBzc2hidWYgKmNsaWVudF9ibG9iLCBzdHJ1Y3Qgc3No YnVmICoqc2VydmVyX2Jsb2JwLAotKyAgIHN0cnVjdCBzc2hidWYgKipzaGFyZWRfc2VjcmV0cCkK LSt7Ci0rCXN0cnVjdCBzc2hidWYgKnNlcnZlcl9ibG9iID0gTlVMTDsKLSsJc3RydWN0IHNzaGJ1 ZiAqYnVmID0gTlVMTDsKLSsJY29uc3QgdV9jaGFyICpjbGllbnRfcHViOwotKwl1X2NoYXIgc2Vy dmVyX3B1YltOSVNUX0JVRl9NQVhfU0laRV07Ci0rCXVfY2hhciBlbmNfb3V0W2NyeXB0b19rZW1f bWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFU107Ci0rCXVfY2hhciBzZWNyZXRbY3J5cHRvX2tlbV9t bGtlbTc2OF9CWVRFU107Ci0rCUVWUF9QS0VZICpzZXJ2ZXJfa2V5ID0gTlVMTDsKLSsJdV9jaGFy IGhhc2hbU1NIX0RJR0VTVF9NQVhfTEVOR1RIXTsKLSsJc2l6ZV90IGNsaWVudF9idWZfbGVuLCBt bGtlbV9idWZfbGVuLCBlY2RoX2J1Zl9sZW4sIHNlcnZlcl9rZXlfbGVuLCBlbmNfb3V0X2xlbjsK LSsJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwotKwkqc2VydmVyX2Jsb2JwID0g TlVMTDsKLSsJKnNoYXJlZF9zZWNyZXRwID0gTlVMTDsKLSsKLSsJY2xpZW50X2J1Zl9sZW4gPSBz c2hidWZfbGVuKGNsaWVudF9ibG9iKTsKLSsJLyogY2xpZW50X2Jsb2IgY29udGFpbnMgYm90aCBL RU0gYW5kIEVDREggY2xpZW50IHB1YmtleXMgKi8KLSsJaWYgKHN0cmNtcChuaXN0X2N1cnZlLCAi UC0yNTYiKSA9PSAwKSB7Ci0rCQlpZiAoY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRF UyA+IGNsaWVudF9idWZfbGVuKQotKwkJCXJldHVybiByOwotKwotKwkJZWNkaF9idWZfbGVuID0g Y2xpZW50X2J1Zl9sZW4gLSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTOwotKwkJ aWYgKGVjZGhfYnVmX2xlbiAhPSBOSVNUX1AyNTZfQ09NUFJFU1NFRF9MRU4gJiYKLSsJCQllY2Ro X2J1Zl9sZW4gIT0gTklTVF9QMjU2X1VOQ09NUFJFU1NFRF9MRU4pCi0rCQkJcmV0dXJuIHI7Ci0r CQltbGtlbV9idWZfbGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUzsKLSsJ CWVuY19vdXRfbGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVM7Ci0rCQlz ZXJ2ZXJfa2V5X2xlbiA9IE5JU1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOOwotKwl9IGVsc2UgaWYg KHN0cmNtcChuaXN0X2N1cnZlLCAiUC0zODQiKSA9PSAwKSB7Ci0rCQlpZiAoY3J5cHRvX2tlbV9t bGtlbTEwMjRfUFVCTElDS0VZQllURVMgPiBjbGllbnRfYnVmX2xlbikKLSsJCQlyZXR1cm4gcjsK LSsKLSsJCWVjZGhfYnVmX2xlbiA9IGNsaWVudF9idWZfbGVuIC0gY3J5cHRvX2tlbV9tbGtlbTEw MjRfUFVCTElDS0VZQllURVM7Ci0rCQlpZiAoZWNkaF9idWZfbGVuICE9IE5JU1RfUDM4NF9DT01Q UkVTU0VEX0xFTiAmJgotKwkJCWVjZGhfYnVmX2xlbiAhPSBOSVNUX1AzODRfVU5DT01QUkVTU0VE X0xFTikKLSsJCQlyZXR1cm4gcjsKLSsJCW1sa2VtX2J1Zl9sZW4gPSBjcnlwdG9fa2VtX21sa2Vt MTAyNF9QVUJMSUNLRVlCWVRFUzsKLSsJCWVuY19vdXRfbGVuID0gY3J5cHRvX2tlbV9tbGtlbTEw MjRfQ0lQSEVSVEVYVEJZVEVTOwotKwkJc2VydmVyX2tleV9sZW4gPSBOSVNUX1AzODRfVU5DT01Q UkVTU0VEX0xFTjsKLSsJfSBlbHNlCi0rCQlyZXR1cm4gcjsKLSsKLSsJY2xpZW50X3B1YiA9IHNz aGJ1Zl9wdHIoY2xpZW50X2Jsb2IpOwotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0rCWR1bXBfZGln ZXN0KCJjbGllbnQgcHVibGljIGtleSBtbGtlbToiLCBjbGllbnRfcHViLCBtbGtlbV9idWZfbGVu KTsKLSsJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5IE5JU1Q6IiwgY2xpZW50X3B1YiAr IG1sa2VtX2J1Zl9sZW4sIGVjZGhfYnVmX2xlbik7Ci0rI2VuZGlmCi0rCi0rCS8qIGFsbG9jYXRl IGJ1ZmZlciBmb3IgY29uY2F0ZW5hdGlvbiBvZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBrZXkg Ki8KLSsJLyogdGhlIGJ1ZmZlciB3aWxsIGJlIGhhc2hlZCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUg c2hhcmVkIHNlY3JldCAqLwotKwlpZiAoKGJ1ZiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkgewot KwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCS8qIGFsbG9j YXRlIHNwYWNlIGZvciBlbmNyeXB0ZWQgS0VNIGtleSBhbmQgRUNESCBwdWIga2V5ICovCi0rCWlm ICgoc2VydmVyX2Jsb2IgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKLSsJCXIgPSBTU0hfRVJS X0FMTE9DX0ZBSUw7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwlyID0gKG1sa2VtX2J1Zl9sZW4gPT0g Y3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUykgPwotKwkJbWxrZW03NjhfZW5jYXBf c2VjcmV0KGNsaWVudF9wdWIsIHNlY3JldCwgZW5jX291dCkgOgotKwkJbWxrZW0xMDI0X2VuY2Fw X3NlY3JldChjbGllbnRfcHViLCBzZWNyZXQsIGVuY19vdXQpOwotKwotKwlpZiAociAhPSAwKQot KwkJZ290byBvdXQ7Ci0rCi0rCS8qIGdlbmVyYXRlIEVDREgga2V5IHBhaXIsIHN0b3JlIHNlcnZl ciBwdWJrZXkgYWZ0ZXIgY2lwaGVydGV4dCAqLwotKwlzZXJ2ZXJfa2V5ID0gbmlzdF9wa2V5X2tl eWdlbihzZXJ2ZXJfa2V5X2xlbik7Ci0rCi0rCWlmICgoc2VydmVyX2tleSA9PSBOVUxMKSB8fAot KwkgICAgKHIgPSBnZXRfdW5jb21wcmVzc2VkX2VjX3B1YmtleShzZXJ2ZXJfa2V5LCBzZXJ2ZXJf cHViLCBzZXJ2ZXJfa2V5X2xlbikgIT0gMCkgfHwKLSsJICAgIChyID0gc3NoYnVmX3B1dChidWYs IHNlY3JldCwgc2l6ZW9mKHNlY3JldCkpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9wdXQo c2VydmVyX2Jsb2IsIGVuY19vdXQsIGVuY19vdXRfbGVuKSAhPSAwKXx8Ci0rCSAgICAociA9IHNz aGJ1Zl9wdXQoc2VydmVyX2Jsb2IsIHNlcnZlcl9wdWIsIHNlcnZlcl9rZXlfbGVuKSkgIT0gMCkK LSsJCWdvdG8gb3V0OwotKwotKwkvKiBhcHBlbmQgRUNESCBzaGFyZWQga2V5ICovCi0rCWNsaWVu dF9wdWIgKz0gbWxrZW1fYnVmX2xlbjsKLSsJaWYgKChyID0ga2V4X25pc3Rfc2hhcmVkX2tleV9l eHQoc2VydmVyX2tleSwgY2xpZW50X3B1YiwgZWNkaF9idWZfbGVuLCBidWYpKSA8IDApCi0rCQln b3RvIG91dDsKLSsJaWYgKChyID0gc3NoX2RpZ2VzdF9idWZmZXIoa2V4LT5oYXNoX2FsZywgYnVm LCBoYXNoLCBzaXplb2YoaGFzaCkpKSAhPSAwKQotKwkJZ290byBvdXQ7Ci0rI2lmZGVmIERFQlVH X0tFWEVDREgKLSsJZHVtcF9kaWdlc3QoInNlcnZlciBwdWJsaWMgTklTVDoiLCBzZXJ2ZXJfcHVi LCBzZXJ2ZXJfa2V5X2xlbik7Ci0rCWR1bXBfZGlnZXN0KCJzZXJ2ZXIgY2lwaGVyIHRleHQ6Iiwg ZW5jX291dCwgZW5jX291dF9sZW4pOwotKwlkdW1wX2RpZ2VzdCgic2VydmVyIGtlbSBrZXk6Iiwg c2VjcmV0LCBzaXplb2Yoc2VjcmV0KSk7Ci0rCWR1bXBfZGlnZXN0KCJjb25jYXRlbmF0aW9uIG9m IEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtleToiLAotKwkgICAgc3NoYnVmX3B0cihidWYpLCBz c2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgotKwkvKiBzdHJpbmctZW5jb2RlZCBoYXNoIGlzIHJl c3VsdGluZyBzaGFyZWQgc2VjcmV0ICovCi0rCXNzaGJ1Zl9yZXNldChidWYpOwotKwlpZiAoKHIg PSBzc2hidWZfcHV0X3N0cmluZyhidWYsIGhhc2gsCi0rCSAgICBzc2hfZGlnZXN0X2J5dGVzKGtl eC0+aGFzaF9hbGcpKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKyNpZmRlZiBERUJVR19LRVhFQ0RI Ci0rCWR1bXBfZGlnZXN0KCJlbmNvZGVkIHNoYXJlZCBzZWNyZXQ6Iiwgc3NoYnVmX3B0cihidWYp LCBzc2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgotKwkvKiBzdWNjZXNzICovCi0rCXIgPSAwOwot Kwkqc2VydmVyX2Jsb2JwID0gc2VydmVyX2Jsb2I7Ci0rCSpzaGFyZWRfc2VjcmV0cCA9IGJ1ZjsK LSsJc2VydmVyX2Jsb2IgPSBOVUxMOwotKwlidWYgPSBOVUxMOwotKyBvdXQ6Ci0rCWV4cGxpY2l0 X2J6ZXJvKGhhc2gsIHNpemVvZihoYXNoKSk7Ci0rCUVWUF9QS0VZX2ZyZWUoc2VydmVyX2tleSk7 Ci0rCWV4cGxpY2l0X2J6ZXJvKGVuY19vdXQsIHNpemVvZihlbmNfb3V0KSk7Ci0rCWV4cGxpY2l0 X2J6ZXJvKHNlY3JldCwgc2l6ZW9mKHNlY3JldCkpOwotKwlzc2hidWZfZnJlZShzZXJ2ZXJfYmxv Yik7Ci0rCXNzaGJ1Zl9mcmVlKGJ1Zik7Ci0rCXJldHVybiByOwotK30KLSsKLStzdGF0aWMgaW50 Ci0ra2V4X2tlbV9tbGtlbV9uaXN0X2RlYyhzdHJ1Y3Qga2V4ICprZXgsCi0rICAgIGNvbnN0IHN0 cnVjdCBzc2hidWYgKnNlcnZlcl9ibG9iLCBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHAs Ci0rICAgIHNpemVfdCBtbGtlbV9sZW4pCi0rewotKwlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxM OwotKwljb25zdCB1X2NoYXIgKmNpcGhlcnRleHQsICpzZXJ2ZXJfcHViOwotKwl1X2NoYXIgaGFz aFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOwotKwl1X2NoYXIgZGVjYXBbY3J5cHRvX2tlbV9tbGtl bTc2OF9CWVRFU107Ci0rCWludCByOwotKwlzaXplX3QgbmlzdF9sZW47Ci0rCi0rCSpzaGFyZWRf c2VjcmV0cCA9IE5VTEw7Ci0rCi0rCWlmIChzc2hidWZfbGVuKHNlcnZlcl9ibG9iKSA8IG1sa2Vt X2xlbikgewotKwkJciA9IFNTSF9FUlJfU0lHTkFUVVJFX0lOVkFMSUQ7Ci0rCQlnb3RvIG91dDsK LSsJfQotKwotKwluaXN0X2xlbiA9IHNzaGJ1Zl9sZW4oc2VydmVyX2Jsb2IpIC0gbWxrZW1fbGVu OwotKwotKwlzd2l0Y2ggKG1sa2VtX2xlbikgewotKwkJY2FzZSBjcnlwdG9fa2VtX21sa2VtNzY4 X0NJUEhFUlRFWFRCWVRFUzoKLSsJCQlpZiAobmlzdF9sZW4gIT0gTklTVF9QMjU2X0NPTVBSRVNT RURfTEVOCi0rCQkJCSYmIG5pc3RfbGVuICE9IE5JU1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOKSB7 Ci0rCQkJCXIgPSBTU0hfRVJSX1NJR05BVFVSRV9JTlZBTElEOwotKwkJCQlnb3RvIG91dDsKLSsJ CQl9Ci0rCQlicmVhazsKLSsJCWNhc2UgY3J5cHRvX2tlbV9tbGtlbTEwMjRfQ0lQSEVSVEVYVEJZ VEVTOgotKwkJCWlmIChuaXN0X2xlbiAhPSBOSVNUX1AzODRfQ09NUFJFU1NFRF9MRU4KLSsJCQkJ JiYgbmlzdF9sZW4gIT0gTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU4pIHsKLSsJCQkJciA9IFNT SF9FUlJfU0lHTkFUVVJFX0lOVkFMSUQ7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0KLSsJCWJyZWFr OwotKwl9Ci0rCi0rCWNpcGhlcnRleHQgPSBzc2hidWZfcHRyKHNlcnZlcl9ibG9iKTsKLSsJc2Vy dmVyX3B1YiA9IGNpcGhlcnRleHQgKyBtbGtlbV9sZW47Ci0rCS8qIGhhc2ggY29uY2F0ZW5hdGlv biBvZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBrZXkgKi8KLSsJaWYgKChidWYgPSBzc2hidWZf bmV3KCkpID09IE5VTEwpIHsKLSsJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci0rCQlnb3RvIG91 dDsKLSsJfQotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0rCWR1bXBfZGlnZXN0KCJzZXJ2ZXIgY2lw aGVyIHRleHQ6IiwgY2lwaGVydGV4dCwgbWxrZW1fbGVuKTsKLSsJZHVtcF9kaWdlc3QoInNlcnZl ciBwdWJsaWMga2V5IE5JU1Q6Iiwgc2VydmVyX3B1YiwgbmlzdF9sZW4pOwotKyNlbmRpZgotKwly ID0gKG1sa2VtX2xlbiA9PSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUykgPwot KwkJbWxrZW03NjhfZGVjYXBfc2VjcmV0KGtleC0+bWxrZW03NjhfY2xpZW50X2tleSwgY2lwaGVy dGV4dCwgZGVjYXApIDoKLSsJCW1sa2VtMTAyNF9kZWNhcF9zZWNyZXQoa2V4LT5tbGtlbTEwMjRf Y2xpZW50X2tleSwgY2lwaGVydGV4dCwgZGVjYXApOwotKwotKwlpZiAociAhPSAwKQotKwkJZ290 byBvdXQ7Ci0rCWlmICgociA9IHNzaGJ1Zl9wdXQoYnVmLCBkZWNhcCwgc2l6ZW9mKGRlY2FwKSkp ICE9IDApCi0rCQlnb3RvIG91dDsKLSsJaWYgKChyID0ga2V4X25pc3Rfc2hhcmVkX2tleV9leHQo a2V4LT5lY19oeWJyaWRfY2xpZW50X2tleSwgc2VydmVyX3B1YiwKLSsJCW5pc3RfbGVuLCBidWYp KSA8IDApCi0rCQlnb3RvIG91dDsKLSsJaWYgKChyID0gc3NoX2RpZ2VzdF9idWZmZXIoa2V4LT5o YXNoX2FsZywgYnVmLAotKwkgICAgaGFzaCwgc2l6ZW9mKGhhc2gpKSkgIT0gMCkKLSsJCWdvdG8g b3V0OwotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0rCWR1bXBfZGlnZXN0KCJjbGllbnQga2VtIGtl eToiLCBkZWNhcCwgc2l6ZW9mKGRlY2FwKSk7Ci0rCWR1bXBfZGlnZXN0KCJjb25jYXRlbmF0aW9u IG9mIEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtleToiLAotKwkgICAgc3NoYnVmX3B0cihidWYp LCBzc2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgotKwlzc2hidWZfcmVzZXQoYnVmKTsKLSsJaWYg KChyID0gc3NoYnVmX3B1dF9zdHJpbmcoYnVmLCBoYXNoLAotKwkgICAgc3NoX2RpZ2VzdF9ieXRl cyhrZXgtPmhhc2hfYWxnKSkpICE9IDApCi0rCQlnb3RvIG91dDsKLSsjaWZkZWYgREVCVUdfS0VY RUNESAotKwlkdW1wX2RpZ2VzdCgiZW5jb2RlZCBzaGFyZWQgc2VjcmV0OiIsIHNzaGJ1Zl9wdHIo YnVmKSwgc3NoYnVmX2xlbihidWYpKTsKLSsjZW5kaWYKLSsJLyogc3VjY2VzcyAqLwotKwlyID0g MDsKLSsJKnNoYXJlZF9zZWNyZXRwID0gYnVmOwotKwlidWYgPSBOVUxMOwotKyBvdXQ6Ci0rCWV4 cGxpY2l0X2J6ZXJvKGhhc2gsIHNpemVvZihoYXNoKSk7Ci0rCWV4cGxpY2l0X2J6ZXJvKGRlY2Fw LCBzaXplb2YoZGVjYXApKTsKLSsJc3NoYnVmX2ZyZWUoYnVmKTsKLSsJcmV0dXJuIHI7Ci0rfQot KwotK2ludAotK2tleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9rZXlwYWlyKHN0cnVjdCBrZXggKmtl eCkKLSt7Ci0rCXJldHVybiBrZXhfa2VtX21sa2VtX25pc3Rfa2V5cGFpcihrZXgsIGNyeXB0b19r ZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMsIE5JU1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOKTsK LSt9Ci0rCi0raW50Ci0ra2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2VuYyhzdHJ1Y3Qga2V4ICpr ZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmNsaWVudF9ibG9iLAotKyAgICBzdHJ1Y3Qgc3NoYnVm ICoqc2VydmVyX2Jsb2JwLCBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCi0rewotKwly ZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2VuYyhrZXgsICJQLTI1NiIsIGNsaWVudF9ibG9iLCBz ZXJ2ZXJfYmxvYnAsIHNoYXJlZF9zZWNyZXRwKTsKLSt9Ci0rCi0raW50Ci0ra2V4X2tlbV9tbGtl bTc2OG5pc3RwMjU2X2RlYyhzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNl cnZlcl9ibG9iLAotKyAgICBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCi0rewotKwly ZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2RlYyhrZXgsIHNlcnZlcl9ibG9iLCBzaGFyZWRfc2Vj cmV0cCwKLSsJCWNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTKTsKLSt9Ci0rCi0r aW50Ci0ra2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkK LSt7Ci0rCXJldHVybiBrZXhfa2VtX21sa2VtX25pc3Rfa2V5cGFpcihrZXgsIGNyeXB0b19rZW1f bWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTLCBOSVNUX1AzODRfVU5DT01QUkVTU0VEX0xFTik7Ci0r fQotKwotK2ludAotK2tleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZW5jKHN0cnVjdCBrZXggKmtl eCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqY2xpZW50X2Jsb2IsCi0rICAgIHN0cnVjdCBzc2hidWYg KipzZXJ2ZXJfYmxvYnAsIHN0cnVjdCBzc2hidWYgKipzaGFyZWRfc2VjcmV0cCkKLSt7Ci0rCXJl dHVybiBrZXhfa2VtX21sa2VtX25pc3RfZW5jKGtleCwgIlAtMzg0IiwgY2xpZW50X2Jsb2IsIHNl cnZlcl9ibG9icCwgc2hhcmVkX3NlY3JldHApOwotK30KLSsKLStpbnQKLStrZXhfa2VtX21sa2Vt MTAyNG5pc3RwMzg0X2RlYyhzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNl cnZlcl9ibG9iLAotKyAgICBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCi0rewotKwly ZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2RlYyhrZXgsIHNlcnZlcl9ibG9iLCBzaGFyZWRfc2Vj cmV0cCwKLSsJCWNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUyk7Ci0rfQotKwot ICNlbHNlIC8qIFVTRV9NTEtFTTc2OFgyNTUxOSAqLwotIGludAotIGtleF9rZW1fbWxrZW03Njh4 MjU1MTlfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCi1AQCAtNTY3LDQgKzExNjUsMzkgQEAga2V4 X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0IGtleCAqa2V4LAotIHsKLSAJcmV0dXJuIFNT SF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7Ci0gfQotKwotK2ludAkga2V4X2tlbV9tbGtlbTc2 OG5pc3RwMjU2X2tleXBhaXIoc3RydWN0IGtleCAqKQotK3sKLSsJcmV0dXJuIFNTSF9FUlJfU0lH Tl9BTEdfVU5TVVBQT1JURUQ7Ci0rfQotKwotK2ludAkga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2 X2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKLSsgICAgc3RydWN0IHNz aGJ1ZiAqKiwgc3RydWN0IHNzaGJ1ZiAqKikKLSt7Ci0rCXJldHVybiBTU0hfRVJSX1NJR05fQUxH X1VOU1VQUE9SVEVEOwotK30KLSsKLStpbnQJIGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9kZWMo c3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAgIHN0cnVjdCBzc2hidWYg KiopCi0rewotKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKLSt9Ci0rCi0r aW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2tleXBhaXIoc3RydWN0IGtleCAqKQotK3sK LSsJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7Ci0rfQotKwotK2ludAkga2V4 X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3No YnVmICosCi0rICAgIHN0cnVjdCBzc2hidWYgKiosIHN0cnVjdCBzc2hidWYgKiopCi0rewotKwly ZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKLSt9Ci0rCi0raW50CSBrZXhfa2Vt X21sa2VtMTAyNG5pc3RwMzg0X2RlYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYg KiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKikKLSt7Ci0rCXJldHVybiBTU0hfRVJSX1NJR05fQUxH X1VOU1VQUE9SVEVEOwotK30KLSsKLSAjZW5kaWYgLyogVVNFX01MS0VNNzY4WDI1NTE5ICovCi1k aWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCi1pbmRleCBiZjVhNTEwNWIuLjM2ZGIx YWZlZSAxMDA2NDQKLS0tLSBhL21vbml0b3IuYwotKysrIGIvbW9uaXRvci5jCi1AQCAtMjA1MCw2 ICsyMDUwLDggQEAgbW9uaXRvcl9hcHBseV9rZXlzdGF0ZShzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVj dCBtb25pdG9yICpwbW9uaXRvcikKLSAJa2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4 X2dlbl9zZXJ2ZXI7Ci0gCWtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0g PSBrZXhfZ2VuX3NlcnZlcjsKLSAJa2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEy NTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCWtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhOSVNUUDI1 Nl9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCWtleC0+a2V4W0tFWF9LRU1fTUxLRU0xMDI0 TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fc2VydmVyOwotIAlrZXgtPmxvYWRfaG9zdF9wdWJs aWNfa2V5PSZnZXRfaG9zdGtleV9wdWJsaWNfYnlfdHlwZTsKLSAJa2V4LT5sb2FkX2hvc3RfcHJp dmF0ZV9rZXk9JmdldF9ob3N0a2V5X3ByaXZhdGVfYnlfdHlwZTsKLSAJa2V4LT5ob3N0X2tleV9p bmRleD0mZ2V0X2hvc3RrZXlfaW5kZXg7Ci1kaWZmIC0tZ2l0IGEvbXlwcm9wb3NhbC5oIGIvbXlw cm9wb3NhbC5oCi1pbmRleCA2NDMzZTA4MjAuLjUxZTNlZjVjOCAxMDA2NDQKLS0tLSBhL215cHJv cG9zYWwuaAotKysrIGIvbXlwcm9wb3NhbC5oCi1AQCAtMjYsNiArMjYsOCBAQAotIAotICNkZWZp bmUgS0VYX1NFUlZFUl9LRVgJXAotIAkibWxrZW03Njh4MjU1MTktc2hhMjU2LCIgXAotKwkibWxr ZW03NjhuaXN0cDI1Ni1zaGEyNTYsIiBcCi0rCSJtbGtlbTEwMjRuaXN0cDM4NC1zaGEzODQsIiBc Ci0gCSJzbnRydXA3NjF4MjU1MTktc2hhNTEyLCIgXAotIAkic250cnVwNzYxeDI1NTE5LXNoYTUx MkBvcGVuc3NoLmNvbSwiIFwKLSAJImN1cnZlMjU1MTktc2hhMjU2LCIgXAotQEAgLTk5LDYgKzEw MSw4IEBACi0gCSJhZXMxOTItY2JjLGFlczI1Ni1jYmMscmlqbmRhZWwtY2JjQGx5c2F0b3IubGl1 LnNlLCIgXAotIAkiYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSxhZXMyNTYtZ2NtQG9wZW5zc2guY29t IgotICNkZWZpbmUgS0VYX0RFRkFVTFRfS0VYX0ZJUFMJCVwKLSsJIm1sa2VtNzY4bmlzdHAyNTYt c2hhMjU2LCIgXAotKwkibWxrZW0xMDI0bmlzdHAzODQtc2hhMzg0LCIgXAotIAkiZWNkaC1zaGEy LW5pc3RwMjU2LCIgXAotIAkiZWNkaC1zaGEyLW5pc3RwMzg0LCIgXAotIAkiZWNkaC1zaGEyLW5p c3RwNTIxLCIgXAotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5j IGIvcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMKLWluZGV4IGY0NzAwZGVlYi4uOTlh OGUzYjQ2IDEwMDY0NAotLS0tIGEvcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMKLSsr KyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCi1AQCAtMTcxLDYgKzE3MSw4IEBA IGRvX2tleF93aXRoX2tleShjaGFyICprZXgsIGNoYXIgKmNpcGhlciwgY2hhciAqbWFjLAotIAlz ZXJ2ZXIyLT5rZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJ c2VydmVyMi0+a2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9n ZW5fc2VydmVyOwotIAlzZXJ2ZXIyLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NI QTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSsJc2VydmVyMi0+a2V4LT5rZXhbS0VYX0tFTV9NTEtF TTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSsJc2VydmVyMi0+a2V4LT5r ZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0g CXNlcnZlcjItPmtleC0+bG9hZF9ob3N0X3B1YmxpY19rZXkgPSBzZXJ2ZXItPmtleC0+bG9hZF9o b3N0X3B1YmxpY19rZXk7Ci0gCXNlcnZlcjItPmtleC0+bG9hZF9ob3N0X3ByaXZhdGVfa2V5ID0g c2VydmVyLT5rZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tleTsKLSAJc2VydmVyMi0+a2V4LT5zaWdu ID0gc2VydmVyLT5rZXgtPnNpZ247Ci1AQCAtMjQ4LDYgKzI1MCw4IEBAIGtleF90ZXN0cyh2b2lk KQotIAl9Ci0gIyBpZmRlZiBVU0VfTUxLRU03NjhYMjU1MTkKLSAJZG9fa2V4KCJtbGtlbTc2OHgy NTUxOS1zaGEyNTYiKTsKLSsJZG9fa2V4KCJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiIpOwotKwlk b19rZXgoIm1sa2VtMTAyNG5pc3RwMzg0LXNoYTM4NCIpOwotICMgZW5kaWYgLyogVVNFX01MS0VN NzY4WDI1NTE5ICovCi0gIyBpZmRlZiBVU0VfU05UUlVQNzYxWDI1NTE5Ci0gCWRvX2tleCgic250 cnVwNzYxeDI1NTE5LXNoYTUxMiIpOwotZGlmZiAtLWdpdCBhL3NzaC1rZXlzY2FuLmMgYi9zc2gt a2V5c2Nhbi5jCi1pbmRleCAzY2VhMWRhYWMuLmY1Y2U5MDQzNCAxMDA2NDQKLS0tLSBhL3NzaC1r ZXlzY2FuLmMKLSsrKyBiL3NzaC1rZXlzY2FuLmMKLUBAIC0zMDAsNiArMzAwLDggQEAga2V5Z3Jh Yl9zc2gyKGNvbiAqYykKLSAJYy0+Y19zc2gtPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9 IGtleF9nZW5fY2xpZW50OwotIAljLT5jX3NzaC0+a2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFY MjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fY2xpZW50OwotIAljLT5jX3NzaC0+a2V4LT5rZXhbS0VY X0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7Ci0rCWMtPmNfc3No LT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fY2xp ZW50OwotKwljLT5jX3NzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEz ODRdID0ga2V4X2dlbl9jbGllbnQ7Ci0gCXNzaF9zZXRfdmVyaWZ5X2hvc3Rfa2V5X2NhbGxiYWNr KGMtPmNfc3NoLCBrZXlfcHJpbnRfd3JhcHBlcik7Ci0gCS8qCi0gCSAqIGRvIHRoZSBrZXktZXhj aGFuZ2UgdW50aWwgYW4gZXJyb3Igb2NjdXJzIG9yIHVudGlsCi1kaWZmIC0tZ2l0IGEvc3NoX2Fw aS5jIGIvc3NoX2FwaS5jCi1pbmRleCAzOGFjMTdkYTEuLmIxNzg1ODJiMyAxMDA2NDQKLS0tLSBh L3NzaF9hcGkuYwotKysrIGIvc3NoX2FwaS5jCi1AQCAtMTM1LDYgKzEzNSw4IEBAIHNzaF9pbml0 KHN0cnVjdCBzc2ggKipzc2hwLCBpbnQgaXNfc2VydmVyLCBzdHJ1Y3Qga2V4X3BhcmFtcyAqa2V4 X3BhcmFtcykKLSAJCXNzaC0+a2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9z ZXJ2ZXI7Ci0gCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0g PSBrZXhfZ2VuX3NlcnZlcjsKLSAJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OFgyNTUx OV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxL RU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCQlzc2gtPmtleC0+a2V4 W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fc2VydmVyOwotIAkJ c3NoLT5rZXgtPmxvYWRfaG9zdF9wdWJsaWNfa2V5PSZfc3NoX2hvc3RfcHVibGljX2tleTsKLSAJ CXNzaC0+a2V4LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXk9Jl9zc2hfaG9zdF9wcml2YXRlX2tleTsK LSAJCXNzaC0+a2V4LT5zaWduPSZfc3NoX2hvc3Rfa2V5X3NpZ247Ci1AQCAtMTU0LDYgKzE1Niw4 IEBAIHNzaF9pbml0KHN0cnVjdCBzc2ggKipzc2hwLCBpbnQgaXNfc2VydmVyLCBzdHJ1Y3Qga2V4 X3BhcmFtcyAqa2V4X3BhcmFtcykKLSAJCXNzaC0+a2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZd ID0ga2V4X2dlbl9jbGllbnQ7Ci0gCQlzc2gtPmtleC0+a2V4W0tFWF9LRU1fU05UUlVQNzYxWDI1 NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX2NsaWVudDsKLSAJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9N TEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7Ci0rCQlzc2gtPmtleC0+a2V4 W0tFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7Ci0rCQlz c2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5f Y2xpZW50OwotIAkJc3NoLT5rZXgtPnZlcmlmeV9ob3N0X2tleSA9Jl9zc2hfdmVyaWZ5X2hvc3Rf a2V5OwotIAl9Ci0gCSpzc2hwID0gc3NoOwotZGlmZiAtLWdpdCBhL3NzaGNvbm5lY3QyLmMgYi9z c2hjb25uZWN0Mi5jCi1pbmRleCBlZWUxZjk3OTQuLjUwYzIyODgwMiAxMDA2NDQKLS0tLSBhL3Nz aGNvbm5lY3QyLmMKLSsrKyBiL3NzaGNvbm5lY3QyLmMKLUBAIC0zNTAsNiArMzUwLDggQEAgc3No X2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3Rh ZGRyLCB1X3Nob3J0IHBvcnQsCi0gCXNzaC0+a2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0g a2V4X2dlbl9jbGllbnQ7Ci0gCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlf U0hBNTEyXSA9IGtleF9nZW5fY2xpZW50OwotIAlzc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03 NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OwotKwlzc2gtPmtleC0+a2V4W0tFWF9L RU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7Ci0rCXNzaC0+a2V4 LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9jbGllbnQ7 Ci0gCXNzaC0+a2V4LT52ZXJpZnlfaG9zdF9rZXk9JnZlcmlmeV9ob3N0X2tleV9jYWxsYmFjazsK LSAKLSAjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKQotZGlmZiAt LWdpdCBhL3NzaGQtYXV0aC5jIGIvc3NoZC1hdXRoLmMKLWluZGV4IDg4NWNkODI4MS4uYTVkMmEx YTZlIDEwMDY0NAotLS0tIGEvc3NoZC1hdXRoLmMKLSsrKyBiL3NzaGQtYXV0aC5jCi1AQCAtODkz LDYgKzg5Myw4IEBAIGRvX3NzaDJfa2V4KHN0cnVjdCBzc2ggKnNzaCkKLSAJa2V4LT5rZXhbS0VY X0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gCWtleC0+a2V4W0tFWF9LRU1fU05U UlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJa2V4LT5rZXhbS0VYX0tF TV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCWtleC0+a2V4W0tF WF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCWtleC0+ a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fc2VydmVyOwot IAlrZXgtPmxvYWRfaG9zdF9wdWJsaWNfa2V5PSZnZXRfaG9zdGtleV9wdWJsaWNfYnlfdHlwZTsK LSAJa2V4LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXk9JmdldF9ob3N0a2V5X3ByaXZhdGVfYnlfdHlw ZTsKLSAJa2V4LT5ob3N0X2tleV9pbmRleD0mZ2V0X2hvc3RrZXlfaW5kZXg7Ci0tLSAKLTIuNTMu MAotCgpkaWZmIC0tZ2l0IGEvMDA0OC1vcGVuc3NoLTcuM3AxLXgxMS1tYXgtZGlzcGxheXMucGF0 Y2ggYi8wMDQ4LW9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNwbGF5cy5wYXRjaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzg1NTg2Ci0tLSAvZGV2L251bGwKKysrIGIvMDA0 OC1vcGVuc3NoLTcuM3AxLXgxMS1tYXgtZGlzcGxheXMucGF0Y2gKQEAgLTAsMCArMSwxNTAgQEAK K0Zyb20gOWU5NTIzNDliNmI2NGZmMjkxNjE5OTMyM2IxZGI5MDljM2YxZDZmMyBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNv bT4KK0RhdGU6IEZyaSwgMTIgRGVjIDIwMjUgMTU6MzU6MTQgKzAxMDAKK1N1YmplY3Q6IFtQQVRD SCA0OC81M10gb3BlbnNzaC03LjNwMS14MTEtbWF4LWRpc3BsYXlzCisKK01vdmUgTUFYX0RJU1BM QVlTIHRvIGEgY29uZmlndXJhdGlvbiBvcHRpb24gKCMxMzQxMzAyKQorLS0tCisgY2hhbm5lbHMu YyAgICB8IDkgKysrKysrLS0tCisgY2hhbm5lbHMuaCAgICB8IDIgKy0KKyBzZXJ2Y29uZi5jICAg IHwgNSArKysrKworIHNlcnZjb25mLmggICAgfCAyICsrCisgc2Vzc2lvbi5jICAgICB8IDUgKysr LS0KKyBzc2hkX2NvbmZpZy41IHwgNyArKysrKysrCisgNiBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNl cnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2hhbm5lbHMuYyBiL2No YW5uZWxzLmMKK2luZGV4IGJhZTg0ZTVmOS4uNDhlYzBhYjgzIDEwMDY0NAorLS0tIGEvY2hhbm5l bHMuYworKysrIGIvY2hhbm5lbHMuYworQEAgLTUwODUsNyArNTA4NSw3IEBAIHJkeW5hbWljX2Nv bm5lY3RfZmluaXNoKHN0cnVjdCBzc2ggKnNzaCwgQ2hhbm5lbCAqYykKKyAgKi8KKyBpbnQKKyB4 MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9v ZmZzZXQsCistICAgIGludCB4MTFfdXNlX2xvY2FsaG9zdCwgaW50IHNpbmdsZV9jb25uZWN0aW9u LAorKyAgICBpbnQgeDExX3VzZV9sb2NhbGhvc3QsIGludCB4MTFfbWF4X2Rpc3BsYXlzLCBpbnQg c2luZ2xlX2Nvbm5lY3Rpb24sCisgICAgIHVfaW50ICpkaXNwbGF5X251bWJlcnAsIGludCAqKmNo YW5pZHMpCisgeworIAlDaGFubmVsICpuYyA9IE5VTEw7CitAQCAtNTA5OCw4ICs1MDk4LDExIEBA IHgxMV9jcmVhdGVfZGlzcGxheV9pbmV0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHgxMV9kaXNwbGF5 X29mZnNldCwKKyAJICAgIHgxMV9kaXNwbGF5X29mZnNldCA+IFVJTlQxNl9NQVggLSBYMTFfQkFT RV9QT1JUIC0gTUFYX0RJU1BMQVlTKQorIAkJcmV0dXJuIC0xOworIAorKwkvKiBUcnkgdG8gYmlu ZCBwb3J0cyBzdGFydGluZyBhdCA2MDAwK1gxMURpc3BsYXlPZmZzZXQgKi8KKysJeDExX21heF9k aXNwbGF5cyA9IHgxMV9tYXhfZGlzcGxheXMgKyB4MTFfZGlzcGxheV9vZmZzZXQ7CisrCisgCWZv ciAoZGlzcGxheV9udW1iZXIgPSB4MTFfZGlzcGxheV9vZmZzZXQ7CistCSAgICBkaXNwbGF5X251 bWJlciA8IHgxMV9kaXNwbGF5X29mZnNldCArIE1BWF9ESVNQTEFZUzsKKysJICAgIGRpc3BsYXlf bnVtYmVyIDwgeDExX21heF9kaXNwbGF5czsKKyAJICAgIGRpc3BsYXlfbnVtYmVyKyspIHsKKyAJ CXBvcnQgPSBYMTFfQkFTRV9QT1JUICsgZGlzcGxheV9udW1iZXI7CisgCQltZW1zZXQoJmhpbnRz LCAwLCBzaXplb2YoaGludHMpKTsKK0BAIC01MTY0LDcgKzUxNjcsNyBAQCB4MTFfY3JlYXRlX2Rp c3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCisgCQlp ZiAobnVtX3NvY2tzID4gMCkKKyAJCQlicmVhazsKKyAJfQorLQlpZiAoZGlzcGxheV9udW1iZXIg Pj0geDExX2Rpc3BsYXlfb2Zmc2V0ICsgTUFYX0RJU1BMQVlTKSB7CisrCWlmIChkaXNwbGF5X251 bWJlciA+PSB4MTFfbWF4X2Rpc3BsYXlzIHx8IHBvcnQgPCBYMTFfQkFTRV9QT1JUICkgeworIAkJ ZXJyb3IoIkZhaWxlZCB0byBhbGxvY2F0ZSBpbnRlcm5ldC1kb21haW4gWDExIGRpc3BsYXkgc29j a2V0LiIpOworIAkJcmV0dXJuIC0xOworIAl9CitkaWZmIC0tZ2l0IGEvY2hhbm5lbHMuaCBiL2No YW5uZWxzLmgKK2luZGV4IGY2OTA5NjQ5OC4uYmMzYjUyYWEyIDEwMDY0NAorLS0tIGEvY2hhbm5l bHMuaAorKysrIGIvY2hhbm5lbHMuaAorQEAgLTM5MSw3ICszOTEsNyBAQCBpbnQJIHBlcm1pdG9w ZW5fcG9ydChjb25zdCBjaGFyICopOworIAorIHZvaWQJIGNoYW5uZWxfc2V0X3gxMV9yZWZ1c2Vf dGltZShzdHJ1Y3Qgc3NoICosIHRpbWVfdCk7CisgaW50CSB4MTFfY29ubmVjdF9kaXNwbGF5KHN0 cnVjdCBzc2ggKik7CistaW50CSB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICos IGludCwgaW50LCBpbnQsIHVfaW50ICosIGludCAqKik7CisraW50CSB4MTFfY3JlYXRlX2Rpc3Bs YXlfaW5ldChzdHJ1Y3Qgc3NoICosIGludCwgaW50LCBpbnQsIGludCwgdV9pbnQgKiwgaW50ICoq KTsKKyB2b2lkCSB4MTFfcmVxdWVzdF9mb3J3YXJkaW5nX3dpdGhfc3Bvb2Zpbmcoc3RydWN0IHNz aCAqLCBpbnQsCisgCSAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCBpbnQpOworIGludCAgICAgIHgxMV9jaGFubmVsX3VzZWRfcmVjZW50bHkoc3RydWN0IHNzaCAq c3NoKTsKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYworaW5kZXggZDljY2Nj MTdjLi44NzQ2YTI0MTcgMTAwNjQ0CistLS0gYS9zZXJ2Y29uZi5jCisrKysgYi9zZXJ2Y29uZi5j CitAQCAtMTUzMyw2ICsxNTMzLDEwIEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRo KFNlcnZlck9wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmxpbmUsCisgCQkJKmludHB0ciA9IHZhbHVl OworIAkJYnJlYWs7CisgCisrCWNhc2Ugc1gxMU1heERpc3BsYXlzOgorKwkJaW50cHRyID0gJm9w dGlvbnMtPngxMV9tYXhfZGlzcGxheXM7CisrCQlnb3RvIHBhcnNlX2ludDsKKysKKyAJY2FzZSBz WDExVXNlTG9jYWxob3N0OgorIAkJaW50cHRyID0gJm9wdGlvbnMtPngxMV91c2VfbG9jYWxob3N0 OworIAkJZ290byBwYXJzZV9mbGFnOworQEAgLTQyNDksNiArNDI1Myw3IEBAIGR1bXBfY29uZmln KFNlcnZlck9wdGlvbnMgKm8pCisgI2VuZGlmCisgCWR1bXBfY2ZnX2ludChzTG9naW5HcmFjZVRp bWUsIG8tPmxvZ2luX2dyYWNlX3RpbWUpOworIAlkdW1wX2NmZ19pbnQoc1gxMURpc3BsYXlPZmZz ZXQsIG8tPngxMV9kaXNwbGF5X29mZnNldCk7CisrCWR1bXBfY2ZnX2ludChzWDExTWF4RGlzcGxh eXMsIG8tPngxMV9tYXhfZGlzcGxheXMpOworIAlkdW1wX2NmZ19pbnQoc01heEF1dGhUcmllcywg by0+bWF4X2F1dGh0cmllcyk7CisgCWR1bXBfY2ZnX2ludChzTWF4U2Vzc2lvbnMsIG8tPm1heF9z ZXNzaW9ucyk7CisgCWR1bXBfY2ZnX2ludChzQ2xpZW50QWxpdmVJbnRlcnZhbCwgby0+Y2xpZW50 X2FsaXZlX2ludGVydmFsKTsKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAor aW5kZXggODFlNjk5NjU1Li40ZTVmN2VkYzYgMTAwNjQ0CistLS0gYS9zZXJ2Y29uZi5oCisrKysg Yi9zZXJ2Y29uZi5oCitAQCAtNDAsNiArNDAsNyBAQCBzdHJ1Y3Qgc3NoYnVmOworIAorICNkZWZp bmUgREVGQVVMVF9BVVRIX0ZBSUxfTUFYCTYJLyogRGVmYXVsdCBmb3IgTWF4QXV0aFRyaWVzICov CisgI2RlZmluZSBERUZBVUxUX1NFU1NJT05TX01BWAkxMAkvKiBEZWZhdWx0IGZvciBNYXhTZXNz aW9ucyAqLworKyNkZWZpbmUgREVGQVVMVF9NQVhfRElTUExBWVMJMTAwMCAvKiBNYXhpbXVtIG51 bWJlciBvZiBmYWtlIFgxMSBkaXNwbGF5cyB0byB0cnkuICovCisgCisgLyogTWFnaWMgbmFtZSBm b3IgaW50ZXJuYWwgc2Z0cC1zZXJ2ZXIgKi8KKyAjZGVmaW5lIElOVEVSTkFMX1NGVFBfTkFNRQki aW50ZXJuYWwtc2Z0cCIKK0BAIC0xNzIsNiArMTczLDcgQEAgU1NIQ09ORl9JTlRGTEFHKGlnbm9y ZV91c2VyX2tub3duX2hvc3RzLCBJZ25vcmVVc2VyS25vd25Ib3N0cywgU1NIQ0ZHX0dMT0JBTCwg MCwKKyBTU0hDT05GX0lOVEZMQUcocHJpbnRfbW90ZCwgUHJpbnRNb3RkLCBTU0hDRkdfR0xPQkFM LCAxLCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NIQ09ORl9JTlRGTEFHKHgxMV9mb3J3YXJkaW5n LCBYMTFGb3J3YXJkaW5nLCBTU0hDRkdfQUxMLCAwLCBTU0hDRkdfQ09QWV9NQVRDSCkgXAorIFNT SENPTkZfSU5UKHgxMV9kaXNwbGF5X29mZnNldCwgWDExRGlzcGxheU9mZnNldCwgU1NIQ0ZHX0FM TCwgTlVMTCwgU1NIRF9ERUZBVUxUX1gxMV9ESVNQTEFZX09GRlNFVCwgU1NIQ0ZHX0NPUFlfTUFU Q0gpIFwKKytTU0hDT05GX0lOVCh4MTFfbWF4X2Rpc3BsYXlzLCBYMTFNYXhEaXNwbGF5cywgU1NI Q0ZHX0FMTCwgTlVMTCwgREVGQVVMVF9NQVhfRElTUExBWVMsIFNTSENGR19DT1BZX01BVENIKSBc CisgU1NIQ09ORl9JTlRGTEFHKHgxMV91c2VfbG9jYWxob3N0LCBYMTFVc2VMb2NhbGhvc3QsIFNT SENGR19BTEwsIDEsIFNTSENGR19DT1BZX01BVENIKSBcCisgU1NIQ09ORl9TVFJJTkcoeGF1dGhf bG9jYXRpb24sIFhBdXRoTG9jYXRpb24sIFNTSENGR19HTE9CQUwsIFNTSENGR19DT1BZX05PTkUp IFwKKyBTU0hDT05GX0lOVEZMQUcocGVybWl0X3R0eSwgUGVybWl0VFRZLCBTU0hDRkdfQUxMLCAx LCBTU0hDRkdfQ09QWV9NQVRDSCkgXAorZGlmZiAtLWdpdCBhL3Nlc3Npb24uYyBiL3Nlc3Npb24u YworaW5kZXggYmQ4ZGM4MDhjLi5lMmNmMTNiZGMgMTAwNjQ0CistLS0gYS9zZXNzaW9uLmMKKysr KyBiL3Nlc3Npb24uYworQEAgLTI2OTMsOCArMjY5Myw5IEBAIHNlc3Npb25fc2V0dXBfeDExZndk KHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcykKKyAJCXJldHVybiAwOworIAl9CisgCWlmICh4 MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzc2gsIG9wdGlvbnMueDExX2Rpc3BsYXlfb2Zmc2V0LAor LQkgICAgb3B0aW9ucy54MTFfdXNlX2xvY2FsaG9zdCwgcy0+c2luZ2xlX2Nvbm5lY3Rpb24sCist CSAgICAmcy0+ZGlzcGxheV9udW1iZXIsICZzLT54MTFfY2hhbmlkcykgPT0gLTEpIHsKKysJICAg IG9wdGlvbnMueDExX3VzZV9sb2NhbGhvc3QsIG9wdGlvbnMueDExX21heF9kaXNwbGF5cywKKysJ ICAgIHMtPnNpbmdsZV9jb25uZWN0aW9uLCAmcy0+ZGlzcGxheV9udW1iZXIsCisrCSAgICAmcy0+ eDExX2NoYW5pZHMpID09IC0xKSB7CisgCQlkZWJ1ZygieDExX2NyZWF0ZV9kaXNwbGF5X2luZXQg ZmFpbGVkLiIpOworIAkJcmV0dXJuIDA7CisgCX0KK2RpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41 IGIvc3NoZF9jb25maWcuNQoraW5kZXggMmE4ZjNhYmVhLi5iZjllZmM4OTcgMTAwNjQ0CistLS0g YS9zc2hkX2NvbmZpZy41CisrKysgYi9zc2hkX2NvbmZpZy41CitAQCAtMTQzMCw2ICsxNDMwLDcg QEAgQXZhaWxhYmxlIGtleXdvcmRzIGFyZQorIC5DbSBUcnVzdGVkVXNlckNBS2V5cyAsCisgLkNt IFVudXNlZENvbm5lY3Rpb25UaW1lb3V0ICwKKyAuQ20gWDExRGlzcGxheU9mZnNldCAsCisrLkNt IFgxMU1heERpc3BsYXlzICwKKyAuQ20gWDExRm9yd2FyZGluZworIGFuZAorIC5DbSBYMTFVc2VM b2NhbGhvc3QgLgorQEAgLTIxNDcsNiArMjE0OCwxMiBAQCBTcGVjaWZpZXMgdGhlIGZpcnN0IGRp c3BsYXkgbnVtYmVyIGF2YWlsYWJsZSBmb3IKKyBYMTEgZm9yd2FyZGluZy4KKyBUaGlzIHByZXZl bnRzIHNzaGQgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHJlYWwgWDExIHNlcnZlcnMuCisgVGhlIGRl ZmF1bHQgaXMgMTAuCisrLkl0IENtIFgxMU1heERpc3BsYXlzCisrU3BlY2lmaWVzIHRoZSBtYXhp bXVtIG51bWJlciBvZiBkaXNwbGF5cyBhdmFpbGFibGUgZm9yCisrLlhyIHNzaGQgOCBOcyAncwor K1gxMSBmb3J3YXJkaW5nLgorK1RoaXMgcHJldmVudHMgc3NoZCBmcm9tIGV4aGF1c3RpbmcgbG9j YWwgcG9ydHMuCisrVGhlIGRlZmF1bHQgaXMgMTAwMC4KKyAuSXQgQ20gWDExRm9yd2FyZGluZwor IFNwZWNpZmllcyB3aGV0aGVyIFgxMSBmb3J3YXJkaW5nIGlzIHBlcm1pdHRlZC4KKyBUaGUgYXJn dW1lbnQgbXVzdCBiZQorLS0gCisyLjU1LjAKKwoKZGlmZiAtLWdpdCBhLzAwNDktRml4LXNzaC1w a2NzMTEtY2xpZW50LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaCBiLzAwNDktRml4LXNzaC1wa2Nz MTEtY2xpZW50LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5iYTFkMmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvMDA0OS1GaXgtc3NoLXBr Y3MxMS1jbGllbnQtaGVscGVyLXRlcm1pbmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zy b20gM2JiMzA1ZTI1MmJlZDUzMDg3NTU5Y2NlZGZlNjMxYTA5Yjg3MGE5YyBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4K K0RhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTQ6NTk6MjYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA0 OS81M10gRml4IHNzaC1wa2NzMTEtY2xpZW50IGhlbHBlciB0ZXJtaW5hdGlvbgorCitEb24ndCB0 ZXJtaW5hdGUgdGhlIFBLQ1MjMTEgaGVscGVyIHdoZW4gU1NIMl9BR0VOVF9GQUlMVVJFIGlzIHJl dHVybmVkLgorVGhpcyBpcyBhIGxlZ2l0aW1hdGUgcmVzcG9uc2Ugd2hlbiBhIHRva2VuIHJlcXVp cmVzIFBJTiBhdXRoZW50aWNhdGlvbi4KK1RoZSBoZWxwZXIgbXVzdCByZW1haW4gYWN0aXZlIHNv IGl0IGNhbiBwcm9tcHQgZm9yIFBJTiBkdXJpbmcgYWN0dWFsIGtleSB1c2UuCisKK09ubHkgdGVy bWluYXRlIHRoZSBoZWxwZXIgb24gdW5leHBlY3RlZCByZXNwb25zZXMgb3IgY29tbXVuaWNhdGlv biBmYWlsdXJlcy4KKworQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25uZXQgNC41IDxub3JlcGx5 QGFudGhyb3BpYy5jb20+CistLS0KKyBzc2gtcGtjczExLWNsaWVudC5jIHwgMTggKysrKysrKysr KysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25z KC0pCisKK2RpZmYgLS1naXQgYS9zc2gtcGtjczExLWNsaWVudC5jIGIvc3NoLXBrY3MxMS1jbGll bnQuYworaW5kZXggNmQ3NGQ3MjgwLi4zMGE0Y2Y1ZGMgMTAwNjQ0CistLS0gYS9zc2gtcGtjczEx LWNsaWVudC5jCisrKysgYi9zc2gtcGtjczExLWNsaWVudC5jCitAQCAtNDI5LDEyICs0MjksMTgg QEAgcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpuYW1lLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hr ZXkgKioqa2V5c3AsCisgCQl9CisgCQkvKiBzdWNjZXNzICovCisgCQlyZXQgPSAwOworLQl9IGVs c2UgaWYgKHR5cGUgPT0gU1NIMl9BR0VOVF9GQUlMVVJFKSB7CistCQlpZiAoKHIgPSBzc2hidWZf Z2V0X3UzMihtc2csICZua2V5cykpICE9IDApCistCQkJZXJyb3JfZnIociwgImZhaWxlZCB0byBw YXJzZSBmYWlsdXJlIHJlc3BvbnNlIik7CistCX0KKy0JaWYgKHJldCAhPSAwKSB7CistCQlkZWJ1 Z19mKCJubyBrZXlzOyB0ZXJtaW5hdGUgaGVscGVyIik7CisrCX0gZWxzZSBpZiAodHlwZSA9PSBT U0hfQUdFTlRfRkFJTFVSRSB8fCB0eXBlID09IFNTSDJfQUdFTlRfRkFJTFVSRSkgeworKwkJaWYg KHR5cGUgPT0gU1NIMl9BR0VOVF9GQUlMVVJFKSB7CisrCQkJaWYgKChyID0gc3NoYnVmX2dldF91 MzIobXNnLCAmbmtleXMpKSAhPSAwKQorKwkJCQllcnJvcl9mcihyLCAiZmFpbGVkIHRvIHBhcnNl IGZhaWx1cmUgcmVzcG9uc2UiKTsKKysJCX0KKysJCS8qIFByb3ZpZGVyIHJlZ2lzdGVyZWQgYnV0 IHJldHVybmVkIG5vIGtleXMgKG1heSBuZWVkIFBJTikgKi8KKysJCS8qIERvbid0IHRlcm1pbmF0 ZSBoZWxwZXIgLSBrZWVwIGl0IGZvciBsYXRlciB1c2UgKi8KKysJCXJldCA9IDA7CisrCQlua2V5 cyA9IDA7CisrCX0gZWxzZSB7CisrCQkvKiBVbmV4cGVjdGVkIHJlc3BvbnNlIC0gdGVybWluYXRl IGhlbHBlciAqLworKwkJZGVidWdfZigidW5leHBlY3RlZCByZXNwb25zZSAlZDsgdGVybWluYXRl IGhlbHBlciIsIHR5cGUpOworIAkJaGVscGVyX3Rlcm1pbmF0ZShoZWxwZXIpOworIAl9CisgCXNz aGJ1Zl9mcmVlKG1zZyk7CistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMDA0OS1vcGVuc3No LTcuM3AxLXgxMS1tYXgtZGlzcGxheXMucGF0Y2ggYi8wMDQ5LW9wZW5zc2gtNy4zcDEteDExLW1h eC1kaXNwbGF5cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U5NTkyYy4u MDAwMDAwMAotLS0gYS8wMDQ5LW9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNwbGF5cy5wYXRjaAor KysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi1Gcm9tIGY4YTI0NDUzNmE3OTI1ZDYzMDQ3 MjQ1YTM0ZThmMDYyMjI3YWM1NmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0 cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDEyIERlYyAyMDI1 IDE1OjM1OjE0ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0ggNDkvNTRdIG9wZW5zc2gtNy4zcDEteDEx LW1heC1kaXNwbGF5cwotCi1Nb3ZlIE1BWF9ESVNQTEFZUyB0byBhIGNvbmZpZ3VyYXRpb24gb3B0 aW9uICgjMTM0MTMwMikKLS0tLQotIGNoYW5uZWxzLmMgICAgfCAgOSArKysrKystLS0KLSBjaGFu bmVscy5oICAgIHwgIDIgKy0KLSBzZXJ2Y29uZi5jICAgIHwgMTIgKysrKysrKysrKystCi0gc2Vy dmNvbmYuaCAgICB8ICAyICsrCi0gc2Vzc2lvbi5jICAgICB8ICA1ICsrKy0tCi0gc3NoZF9jb25m aWcuNSB8ICA3ICsrKysrKysKLSA2IGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDcg ZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jaGFubmVscy5jIGIvY2hhbm5lbHMuYwotaW5k ZXggMTRkNTM2ZDY0Li43M2VhY2M1ZjYgMTAwNjQ0Ci0tLS0gYS9jaGFubmVscy5jCi0rKysgYi9j aGFubmVscy5jCi1AQCAtNTA3Niw3ICs1MDc2LDcgQEAgcmR5bmFtaWNfY29ubmVjdF9maW5pc2go c3RydWN0IHNzaCAqc3NoLCBDaGFubmVsICpjKQotICAqLwotIGludAotIHgxMV9jcmVhdGVfZGlz cGxheV9pbmV0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHgxMV9kaXNwbGF5X29mZnNldCwKLS0gICAg aW50IHgxMV91c2VfbG9jYWxob3N0LCBpbnQgc2luZ2xlX2Nvbm5lY3Rpb24sCi0rICAgIGludCB4 MTFfdXNlX2xvY2FsaG9zdCwgaW50IHgxMV9tYXhfZGlzcGxheXMsIGludCBzaW5nbGVfY29ubmVj dGlvbiwKLSAgICAgdV9pbnQgKmRpc3BsYXlfbnVtYmVycCwgaW50ICoqY2hhbmlkcykKLSB7Ci0g CUNoYW5uZWwgKm5jID0gTlVMTDsKLUBAIC01MDg5LDggKzUwODksMTEgQEAgeDExX2NyZWF0ZV9k aXNwbGF5X2luZXQoc3RydWN0IHNzaCAqc3NoLCBpbnQgeDExX2Rpc3BsYXlfb2Zmc2V0LAotIAkg ICAgeDExX2Rpc3BsYXlfb2Zmc2V0ID4gVUlOVDE2X01BWCAtIFgxMV9CQVNFX1BPUlQgLSBNQVhf RElTUExBWVMpCi0gCQlyZXR1cm4gLTE7Ci0gCi0rCS8qIFRyeSB0byBiaW5kIHBvcnRzIHN0YXJ0 aW5nIGF0IDYwMDArWDExRGlzcGxheU9mZnNldCAqLwotKwl4MTFfbWF4X2Rpc3BsYXlzID0geDEx X21heF9kaXNwbGF5cyArIHgxMV9kaXNwbGF5X29mZnNldDsKLSsKLSAJZm9yIChkaXNwbGF5X251 bWJlciA9IHgxMV9kaXNwbGF5X29mZnNldDsKLS0JICAgIGRpc3BsYXlfbnVtYmVyIDwgeDExX2Rp c3BsYXlfb2Zmc2V0ICsgTUFYX0RJU1BMQVlTOwotKwkgICAgZGlzcGxheV9udW1iZXIgPCB4MTFf bWF4X2Rpc3BsYXlzOwotIAkgICAgZGlzcGxheV9udW1iZXIrKykgewotIAkJcG9ydCA9IFgxMV9C QVNFX1BPUlQgKyBkaXNwbGF5X251bWJlcjsKLSAJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZiho aW50cykpOwotQEAgLTUxNTUsNyArNTE1OCw3IEBAIHgxMV9jcmVhdGVfZGlzcGxheV9pbmV0KHN0 cnVjdCBzc2ggKnNzaCwgaW50IHgxMV9kaXNwbGF5X29mZnNldCwKLSAJCWlmIChudW1fc29ja3Mg PiAwKQotIAkJCWJyZWFrOwotIAl9Ci0tCWlmIChkaXNwbGF5X251bWJlciA+PSB4MTFfZGlzcGxh eV9vZmZzZXQgKyBNQVhfRElTUExBWVMpIHsKLSsJaWYgKGRpc3BsYXlfbnVtYmVyID49IHgxMV9t YXhfZGlzcGxheXMgfHwgcG9ydCA8IFgxMV9CQVNFX1BPUlQgKSB7Ci0gCQllcnJvcigiRmFpbGVk IHRvIGFsbG9jYXRlIGludGVybmV0LWRvbWFpbiBYMTEgZGlzcGxheSBzb2NrZXQuIik7Ci0gCQly ZXR1cm4gLTE7Ci0gCX0KLWRpZmYgLS1naXQgYS9jaGFubmVscy5oIGIvY2hhbm5lbHMuaAotaW5k ZXggMmZjZjlmOGNiLi43YmYzN2IwNTMgMTAwNjQ0Ci0tLS0gYS9jaGFubmVscy5oCi0rKysgYi9j aGFubmVscy5oCi1AQCAtMzkwLDcgKzM5MCw3IEBAIGludAkgcGVybWl0b3Blbl9wb3J0KGNvbnN0 IGNoYXIgKik7Ci0gCi0gdm9pZAkgY2hhbm5lbF9zZXRfeDExX3JlZnVzZV90aW1lKHN0cnVjdCBz c2ggKiwgdGltZV90KTsKLSBpbnQJIHgxMV9jb25uZWN0X2Rpc3BsYXkoc3RydWN0IHNzaCAqKTsK LS1pbnQJIHgxMV9jcmVhdGVfZGlzcGxheV9pbmV0KHN0cnVjdCBzc2ggKiwgaW50LCBpbnQsIGlu dCwgdV9pbnQgKiwgaW50ICoqKTsKLStpbnQJIHgxMV9jcmVhdGVfZGlzcGxheV9pbmV0KHN0cnVj dCBzc2ggKiwgaW50LCBpbnQsIGludCwgaW50LCB1X2ludCAqLCBpbnQgKiopOwotIHZvaWQJIHgx MV9yZXF1ZXN0X2ZvcndhcmRpbmdfd2l0aF9zcG9vZmluZyhzdHJ1Y3Qgc3NoICosIGludCwKLSAJ ICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Ci0gaW50 ICAgICAgeDExX2NoYW5uZWxfdXNlZF9yZWNlbnRseShzdHJ1Y3Qgc3NoICpzc2gpOwotZGlmZiAt LWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCAyNjhjMDlkMWMuLmY0ZDZiMTlk ZCAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmMKLSsrKyBiL3NlcnZjb25mLmMKLUBAIC0xMTgsNiAr MTE4LDcgQEAgaW5pdGlhbGl6ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25z KQotIAlvcHRpb25zLT5wcmludF9sYXN0bG9nID0gLTE7Ci0gCW9wdGlvbnMtPngxMV9mb3J3YXJk aW5nID0gLTE7Ci0gCW9wdGlvbnMtPngxMV9kaXNwbGF5X29mZnNldCA9IC0xOwotKwlvcHRpb25z LT54MTFfbWF4X2Rpc3BsYXlzID0gLTE7Ci0gCW9wdGlvbnMtPngxMV91c2VfbG9jYWxob3N0ID0g LTE7Ci0gCW9wdGlvbnMtPnBlcm1pdF90dHkgPSAtMTsKLSAJb3B0aW9ucy0+cGVybWl0X3VzZXJf cmMgPSAtMTsKLUBAIC0zNTksNiArMzYwLDggQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25z KFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gCQlvcHRpb25zLT54MTFfZm9yd2FyZGluZyA9IDA7 Ci0gCWlmIChvcHRpb25zLT54MTFfZGlzcGxheV9vZmZzZXQgPT0gLTEpCi0gCQlvcHRpb25zLT54 MTFfZGlzcGxheV9vZmZzZXQgPSAxMDsKLSsJaWYgKG9wdGlvbnMtPngxMV9tYXhfZGlzcGxheXMg PT0gLTEpCi0rCQlvcHRpb25zLT54MTFfbWF4X2Rpc3BsYXlzID0gREVGQVVMVF9NQVhfRElTUExB WVM7Ci0gCWlmIChvcHRpb25zLT54MTFfdXNlX2xvY2FsaG9zdCA9PSAtMSkKLSAJCW9wdGlvbnMt PngxMV91c2VfbG9jYWxob3N0ID0gMTsKLSAJaWYgKG9wdGlvbnMtPnhhdXRoX2xvY2F0aW9uID09 IE5VTEwpCi1AQCAtNTg4LDcgKzU5MSw3IEBAIHR5cGVkZWYgZW51bSB7Ci0gCXNLZXJiZXJvc0dl dEFGU1Rva2VuLCBzS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIHNLZXJiZXJvc1VzZUt1c2Vyb2ssIHNQ YXNzd29yZEF1dGhlbnRpY2F0aW9uLAotIAlzS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiwg c0xpc3RlbkFkZHJlc3MsIHNBZGRyZXNzRmFtaWx5LAotIAlzUHJpbnRNb3RkLCBzUHJpbnRMYXN0 TG9nLCBzSWdub3JlUmhvc3RzLAotLQlzWDExRm9yd2FyZGluZywgc1gxMURpc3BsYXlPZmZzZXQs IHNYMTFVc2VMb2NhbGhvc3QsCi0rCXNYMTFGb3J3YXJkaW5nLCBzWDExRGlzcGxheU9mZnNldCwg c1gxMU1heERpc3BsYXlzLCBzWDExVXNlTG9jYWxob3N0LAotIAlzUGVybWl0VFRZLCBzU3RyaWN0 TW9kZXMsIHNFbXB0eVBhc3N3ZCwgc1RDUEtlZXBBbGl2ZSwKLSAJc1Blcm1pdFVzZXJFbnZpcm9u bWVudCwgc0FsbG93VGNwRm9yd2FyZGluZywgc0NvbXByZXNzaW9uLAotIAlzUmVrZXlMaW1pdCwg c0FsbG93VXNlcnMsIHNEZW55VXNlcnMsIHNBbGxvd0dyb3Vwcywgc0RlbnlHcm91cHMsCi1AQCAt NzMwLDYgKzczMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJpZ25vcmV1c2Vya25vd25ob3N0 cyIsIHNJZ25vcmVVc2VyS25vd25Ib3N0cywgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJ4MTFmb3J3 YXJkaW5nIiwgc1gxMUZvcndhcmRpbmcsIFNTSENGR19BTEwgfSwKLSAJeyAieDExZGlzcGxheW9m ZnNldCIsIHNYMTFEaXNwbGF5T2Zmc2V0LCBTU0hDRkdfQUxMIH0sCi0rCXsgIngxMW1heGRpc3Bs YXlzIiwgc1gxMU1heERpc3BsYXlzLCBTU0hDRkdfQUxMIH0sCi0gCXsgIngxMXVzZWxvY2FsaG9z dCIsIHNYMTFVc2VMb2NhbGhvc3QsIFNTSENGR19BTEwgfSwKLSAJeyAieGF1dGhsb2NhdGlvbiIs IHNYQXV0aExvY2F0aW9uLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgInN0cmljdG1vZGVzIiwgc1N0 cmljdE1vZGVzLCBTU0hDRkdfR0xPQkFMIH0sCi1AQCAtMTc4MSw2ICsxNzg1LDEwIEBAIHByb2Nl c3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMsIGNoYXIg KmxpbmUsCi0gCQkJKmludHB0ciA9IHZhbHVlOwotIAkJYnJlYWs7Ci0gCi0rCWNhc2Ugc1gxMU1h eERpc3BsYXlzOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPngxMV9tYXhfZGlzcGxheXM7Ci0rCQln b3RvIHBhcnNlX2ludDsKLSsKLSAJY2FzZSBzWDExVXNlTG9jYWxob3N0OgotIAkJaW50cHRyID0g Jm9wdGlvbnMtPngxMV91c2VfbG9jYWxob3N0OwotIAkJZ290byBwYXJzZV9mbGFnOwotQEAgLTMw NjUsNiArMzA3Myw3IEBAIGNvcHlfc2V0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKmRz dCwgU2VydmVyT3B0aW9ucyAqc3JjLCBpbnQgcHJlYXV0aCkKLSAJTV9DUF9JTlRPUFQoZndkX29w dHMuc3RyZWFtbG9jYWxfYmluZF91bmxpbmspOwotIAlNX0NQX0lOVE9QVCh4MTFfZGlzcGxheV9v ZmZzZXQpOwotIAlNX0NQX0lOVE9QVCh4MTFfZm9yd2FyZGluZyk7Ci0rCU1fQ1BfSU5UT1BUKHgx MV9tYXhfZGlzcGxheXMpOwotIAlNX0NQX0lOVE9QVCh4MTFfdXNlX2xvY2FsaG9zdCk7Ci0gCU1f Q1BfSU5UT1BUKHBlcm1pdF90dHkpOwotIAlNX0NQX0lOVE9QVChwZXJtaXRfdXNlcl9yYyk7Ci1A QCAtMzM2MSw2ICszMzcwLDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykKLSAjZW5k aWYKLSAJZHVtcF9jZmdfaW50KHNMb2dpbkdyYWNlVGltZSwgby0+bG9naW5fZ3JhY2VfdGltZSk7 Ci0gCWR1bXBfY2ZnX2ludChzWDExRGlzcGxheU9mZnNldCwgby0+eDExX2Rpc3BsYXlfb2Zmc2V0 KTsKLSsJZHVtcF9jZmdfaW50KHNYMTFNYXhEaXNwbGF5cywgby0+eDExX21heF9kaXNwbGF5cyk7 Ci0gCWR1bXBfY2ZnX2ludChzTWF4QXV0aFRyaWVzLCBvLT5tYXhfYXV0aHRyaWVzKTsKLSAJZHVt cF9jZmdfaW50KHNNYXhTZXNzaW9ucywgby0+bWF4X3Nlc3Npb25zKTsKLSAJZHVtcF9jZmdfaW50 KHNDbGllbnRBbGl2ZUludGVydmFsLCBvLT5jbGllbnRfYWxpdmVfaW50ZXJ2YWwpOwotZGlmZiAt LWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCi1pbmRleCA3ODFmMjBjNjEuLmZlYTI1OTQ3 ZSAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmgKLSsrKyBiL3NlcnZjb25mLmgKLUBAIC0zOCw2ICsz OCw3IEBACi0gCi0gI2RlZmluZSBERUZBVUxUX0FVVEhfRkFJTF9NQVgJNgkvKiBEZWZhdWx0IGZv ciBNYXhBdXRoVHJpZXMgKi8KLSAjZGVmaW5lIERFRkFVTFRfU0VTU0lPTlNfTUFYCTEwCS8qIERl ZmF1bHQgZm9yIE1heFNlc3Npb25zICovCi0rI2RlZmluZSBERUZBVUxUX01BWF9ESVNQTEFZUwkx MDAwIC8qIE1heGltdW0gbnVtYmVyIG9mIGZha2UgWDExIGRpc3BsYXlzIHRvIHRyeS4gKi8KLSAK LSAvKiBNYWdpYyBuYW1lIGZvciBpbnRlcm5hbCBzZnRwLXNlcnZlciAqLwotICNkZWZpbmUgSU5U RVJOQUxfU0ZUUF9OQU1FCSJpbnRlcm5hbC1zZnRwIgotQEAgLTExNSw2ICsxMTYsNyBAQCB0eXBl ZGVmIHN0cnVjdCB7Ci0gCWludCAgICAgeDExX2ZvcndhcmRpbmc7CS8qIElmIHRydWUsIHBlcm1p dCBpbmV0IChzcG9vZmluZykgWDExIGZ3ZC4gKi8KLSAJaW50ICAgICB4MTFfZGlzcGxheV9vZmZz ZXQ7CS8qIFdoYXQgRElTUExBWSBudW1iZXIgdG8gc3RhcnQKLSAJCQkJCSAqIHNlYXJjaGluZyBh dCAqLwotKwlpbnQgCXgxMV9tYXhfZGlzcGxheXM7IC8qIE51bWJlciBvZiBkaXNwbGF5cyB0byBz ZWFyY2ggKi8KLSAJaW50ICAgICB4MTFfdXNlX2xvY2FsaG9zdDsJLyogSWYgdHJ1ZSwgdXNlIGxv Y2FsaG9zdCBmb3IgZmFrZSBYMTEgc2VydmVyLiAqLwotIAljaGFyICAgKnhhdXRoX2xvY2F0aW9u OwkvKiBMb2NhdGlvbiBvZiB4YXV0aCBwcm9ncmFtICovCi0gCWludAlwZXJtaXRfdHR5OwkvKiBJ ZiBmYWxzZSwgZGVueSBwdHkgYWxsb2NhdGlvbiAqLwotZGlmZiAtLWdpdCBhL3Nlc3Npb24uYyBi L3Nlc3Npb24uYwotaW5kZXggMWE3ZjVjYTdhLi41MmY4NmZkNDYgMTAwNjQ0Ci0tLS0gYS9zZXNz aW9uLmMKLSsrKyBiL3Nlc3Npb24uYwotQEAgLTI2ODksOCArMjY4OSw5IEBAIHNlc3Npb25fc2V0 dXBfeDExZndkKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcykKLSAJCXJldHVybiAwOwotIAl9 Ci0gCWlmICh4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzc2gsIG9wdGlvbnMueDExX2Rpc3BsYXlf b2Zmc2V0LAotLQkgICAgb3B0aW9ucy54MTFfdXNlX2xvY2FsaG9zdCwgcy0+c2luZ2xlX2Nvbm5l Y3Rpb24sCi0tCSAgICAmcy0+ZGlzcGxheV9udW1iZXIsICZzLT54MTFfY2hhbmlkcykgPT0gLTEp IHsKLSsJICAgIG9wdGlvbnMueDExX3VzZV9sb2NhbGhvc3QsIG9wdGlvbnMueDExX21heF9kaXNw bGF5cywKLSsJICAgIHMtPnNpbmdsZV9jb25uZWN0aW9uLCAmcy0+ZGlzcGxheV9udW1iZXIsCi0r CSAgICAmcy0+eDExX2NoYW5pZHMpID09IC0xKSB7Ci0gCQlkZWJ1ZygieDExX2NyZWF0ZV9kaXNw bGF5X2luZXQgZmFpbGVkLiIpOwotIAkJcmV0dXJuIDA7Ci0gCX0KLWRpZmYgLS1naXQgYS9zc2hk X2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggNGNhODAwMTZjLi5jMjgyMjAwNzcgMTAw NjQ0Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hkX2NvbmZpZy41Ci1AQCAtMTQxNiw2 ICsxNDE2LDcgQEAgQXZhaWxhYmxlIGtleXdvcmRzIGFyZQotIC5DbSBUcnVzdGVkVXNlckNBS2V5 cyAsCi0gLkNtIFVudXNlZENvbm5lY3Rpb25UaW1lb3V0ICwKLSAuQ20gWDExRGlzcGxheU9mZnNl dCAsCi0rLkNtIFgxMU1heERpc3BsYXlzICwKLSAuQ20gWDExRm9yd2FyZGluZwotIGFuZAotIC5D bSBYMTFVc2VMb2NhbGhvc3QgLgotQEAgLTIxMzMsNiArMjEzNCwxMiBAQCBTcGVjaWZpZXMgdGhl IGZpcnN0IGRpc3BsYXkgbnVtYmVyIGF2YWlsYWJsZSBmb3IKLSBYMTEgZm9yd2FyZGluZy4KLSBU aGlzIHByZXZlbnRzIHNzaGQgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHJlYWwgWDExIHNlcnZlcnMu Ci0gVGhlIGRlZmF1bHQgaXMgMTAuCi0rLkl0IENtIFgxMU1heERpc3BsYXlzCi0rU3BlY2lmaWVz IHRoZSBtYXhpbXVtIG51bWJlciBvZiBkaXNwbGF5cyBhdmFpbGFibGUgZm9yCi0rLlhyIHNzaGQg OCBOcyAncwotK1gxMSBmb3J3YXJkaW5nLgotK1RoaXMgcHJldmVudHMgc3NoZCBmcm9tIGV4aGF1 c3RpbmcgbG9jYWwgcG9ydHMuCi0rVGhlIGRlZmF1bHQgaXMgMTAwMC4KLSAuSXQgQ20gWDExRm9y d2FyZGluZwotIFNwZWNpZmllcyB3aGV0aGVyIFgxMSBmb3J3YXJkaW5nIGlzIHBlcm1pdHRlZC4K LSBUaGUgYXJndW1lbnQgbXVzdCBiZQotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAwNTAt Rml4LXNzaC1wa2NzMTEtY2xpZW50LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaCBiLzAwNTAtRml4 LXNzaC1wa2NzMTEtY2xpZW50LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMWI4NTYyMC4uMDAwMDAwMAotLS0gYS8wMDUwLUZpeC1zc2gtcGtj czExLWNsaWVudC1oZWxwZXItdGVybWluYXRpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0 OCArMCwwIEBACi1Gcm9tIGY5ZjY4ZTNkNWUxZDRiZjJlOTQ1YTE4OWM2Njg4YjI3YWJmOTgxMGIg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDEzIEFwciAyMDI2IDE0OjU5OjI2ICswMjAwCi1TdWJq ZWN0OiBbUEFUQ0ggNTAvNTRdIEZpeCBzc2gtcGtjczExLWNsaWVudCBoZWxwZXIgdGVybWluYXRp b24KLQotRG9uJ3QgdGVybWluYXRlIHRoZSBQS0NTIzExIGhlbHBlciB3aGVuIFNTSDJfQUdFTlRf RkFJTFVSRSBpcyByZXR1cm5lZC4KLVRoaXMgaXMgYSBsZWdpdGltYXRlIHJlc3BvbnNlIHdoZW4g YSB0b2tlbiByZXF1aXJlcyBQSU4gYXV0aGVudGljYXRpb24uCi1UaGUgaGVscGVyIG11c3QgcmVt YWluIGFjdGl2ZSBzbyBpdCBjYW4gcHJvbXB0IGZvciBQSU4gZHVyaW5nIGFjdHVhbCBrZXkgdXNl LgotCi1Pbmx5IHRlcm1pbmF0ZSB0aGUgaGVscGVyIG9uIHVuZXhwZWN0ZWQgcmVzcG9uc2VzIG9y IGNvbW11bmljYXRpb24gZmFpbHVyZXMuCi0KLUNvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0 IDQuNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgotLS0tCi0gc3NoLXBrY3MxMS1jbGllbnQuYyB8 IDE4ICsrKysrKysrKysrKy0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCsp LCA2IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS1jbGllbnQuYyBiL3Nz aC1wa2NzMTEtY2xpZW50LmMKLWluZGV4IDZkNzRkNzI4MC4uMzBhNGNmNWRjIDEwMDY0NAotLS0t IGEvc3NoLXBrY3MxMS1jbGllbnQuYwotKysrIGIvc3NoLXBrY3MxMS1jbGllbnQuYwotQEAgLTQy OSwxMiArNDI5LDE4IEBAIHBrY3MxMV9hZGRfcHJvdmlkZXIoY2hhciAqbmFtZSwgY2hhciAqcGlu LCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLAotIAkJfQotIAkJLyogc3VjY2VzcyAqLwotIAkJcmV0 ID0gMDsKLS0JfSBlbHNlIGlmICh0eXBlID09IFNTSDJfQUdFTlRfRkFJTFVSRSkgewotLQkJaWYg KChyID0gc3NoYnVmX2dldF91MzIobXNnLCAmbmtleXMpKSAhPSAwKQotLQkJCWVycm9yX2ZyKHIs ICJmYWlsZWQgdG8gcGFyc2UgZmFpbHVyZSByZXNwb25zZSIpOwotLQl9Ci0tCWlmIChyZXQgIT0g MCkgewotLQkJZGVidWdfZigibm8ga2V5czsgdGVybWluYXRlIGhlbHBlciIpOwotKwl9IGVsc2Ug aWYgKHR5cGUgPT0gU1NIX0FHRU5UX0ZBSUxVUkUgfHwgdHlwZSA9PSBTU0gyX0FHRU5UX0ZBSUxV UkUpIHsKLSsJCWlmICh0eXBlID09IFNTSDJfQUdFTlRfRkFJTFVSRSkgewotKwkJCWlmICgociA9 IHNzaGJ1Zl9nZXRfdTMyKG1zZywgJm5rZXlzKSkgIT0gMCkKLSsJCQkJZXJyb3JfZnIociwgImZh aWxlZCB0byBwYXJzZSBmYWlsdXJlIHJlc3BvbnNlIik7Ci0rCQl9Ci0rCQkvKiBQcm92aWRlciBy ZWdpc3RlcmVkIGJ1dCByZXR1cm5lZCBubyBrZXlzIChtYXkgbmVlZCBQSU4pICovCi0rCQkvKiBE b24ndCB0ZXJtaW5hdGUgaGVscGVyIC0ga2VlcCBpdCBmb3IgbGF0ZXIgdXNlICovCi0rCQlyZXQg PSAwOwotKwkJbmtleXMgPSAwOwotKwl9IGVsc2UgewotKwkJLyogVW5leHBlY3RlZCByZXNwb25z ZSAtIHRlcm1pbmF0ZSBoZWxwZXIgKi8KLSsJCWRlYnVnX2YoInVuZXhwZWN0ZWQgcmVzcG9uc2Ug JWQ7IHRlcm1pbmF0ZSBoZWxwZXIiLCB0eXBlKTsKLSAJCWhlbHBlcl90ZXJtaW5hdGUoaGVscGVy KTsKLSAJfQotIAlzc2hidWZfZnJlZShtc2cpOwotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBh LzAwNTAtb3BlbnNzaC0xMC4ycDEtcGFtLWF1dGgucGF0Y2ggYi8wMDUwLW9wZW5zc2gtMTAuMnAx LXBhbS1hdXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZWIw ZTYKLS0tIC9kZXYvbnVsbAorKysgYi8wMDUwLW9wZW5zc2gtMTAuMnAxLXBhbS1hdXRoLnBhdGNo CkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gNGE5ZWNkOTc0NDIyNWQyNzRlYzA1YTRhYWI2NmFjZWYy NTQ5ODI4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5 IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTIgQXByIDIwMjYgMTI6MjU6MDQgKzAy MDAKK1N1YmplY3Q6IFtQQVRDSCA1MC81M10gb3BlbnNzaC0xMC4ycDEtcGFtLWF1dGgKKworaHR0 cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0yNDIzOTAwCisKK0NvLUF1 dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgorLS0t CisgYXV0aC1wYW0uYyB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRp b25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYXV0aC1wYW0uYyBiL2F1dGgt cGFtLmMKK2luZGV4IGQzZGNkMDM3Yi4uYWFhZDE2NzY1IDEwMDY0NAorLS0tIGEvYXV0aC1wYW0u YworKysrIGIvYXV0aC1wYW0uYworQEAgLTQ1NSw2ICs0NTUsNyBAQCBzdGF0aWMgaW50CisgY2hl Y2tfcGFtX3VzZXIoQXV0aGN0eHQgKmF1dGhjdHh0KQorIHsKKyAJY29uc3QgY2hhciAqcGFtX3Vz ZXI7CisrCWNvbnN0IHN0cnVjdCBwYXNzd2QgKnBhbV9wdzsKKyAKKyAJaWYgKGF1dGhjdHh0ID09 IE5VTEwgfHwgYXV0aGN0eHQtPnB3ID09IE5VTEwgfHwKKyAJICAgIGF1dGhjdHh0LT5wdy0+cHdf bmFtZSA9PSBOVUxMKQorQEAgLTQ2OSwxMSArNDcwLDEwIEBAIGNoZWNrX3BhbV91c2VyKEF1dGhj dHh0ICphdXRoY3R4dCkKKyAJCXJldHVybiBQQU1fVVNFUl9VTktOT1dOOworIAl9CisgCistCWlm IChzc2hwYW1faW5pdGlhbF91c2VyID09IE5VTEwpCistCQlmYXRhbF9mKCJpbnRlcm5hbCBlcnJv cjogc3NocGFtX2luaXRpYWxfdXNlciBOVUxMIik7CistCWlmIChzdHJjbXAoc3NocGFtX2luaXRp YWxfdXNlciwgcGFtX3VzZXIpICE9IDApIHsKKy0JCWVycm9yX2YoIlBBTSB1c2VyIFwiJXNcIiBk b2VzIG5vdCBtYXRjaCBwcmV2aW91cyBcIiVzXCIiLAorLQkJICAgICAgcGFtX3VzZXIsIHNzaHBh bV9pbml0aWFsX3VzZXIpOworKwlwYW1fcHcgPSBnZXRwd25hbShwYW1fdXNlcik7CisrCWlmIChw YW1fcHcgPT0gTlVMTCB8fCBwYW1fcHctPnB3X3VpZCAhPSBhdXRoY3R4dC0+cHctPnB3X3VpZCkg eworKwkJZGVidWcoIlBBTSB1c2VyIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBcIiVz XCIiLAorKwkJICAgICAgcGFtX3VzZXIsIGF1dGhjdHh0LT5wdy0+cHdfbmFtZSk7CisgCQlyZXR1 cm4gUEFNX1VTRVJfVU5LTk9XTjsKKyAJfQorIAlyZXR1cm4gUEFNX1NVQ0NFU1M7CistLSAKKzIu NTUuMAorCgpkaWZmIC0tZ2l0IGEvMDA1MS1nc3NhcGktczR1LnBhdGNoIGIvMDA1MS1nc3NhcGkt czR1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjE5MTgKLS0t IC9kZXYvbnVsbAorKysgYi8wMDUxLWdzc2FwaS1zNHUucGF0Y2gKQEAgLTAsMCArMSwxMDI3IEBA CitGcm9tIDEzZGYxNDAxN2E1MzA4NTZhMjBkY2MwMjA4YTY3ZTEyNjE3OGQzOTIgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5j b20+CitEYXRlOiBTdW4sIDEyIEFwciAyMDI2IDEyOjI1OjIxICswMjAwCitTdWJqZWN0OiBbUEFU Q0ggNTEvNTNdIGdzc2FwaS1zNHUKKworQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25uZXQgNC41 IDxub3JlcGx5QGFudGhyb3BpYy5jb20+CistLS0KKyBhdXRoLWtyYjUuYyAgICAgfCAgMTMgKysK KyBjb25maWd1cmUuYWMgICAgfCAgMTAgKy0KKyBnc3Mtc2Vydi1rcmI1LmMgfCAyMjUgKysrKysr KysrKysrKysrKysrKysrKysrKysrKworIGdzcy1zZXJ2LmMgICAgICB8IDM4OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyBzZXJ2Y29uZi5jICAgICAg fCAgNDYgKysrKysrCisgc2VydmNvbmYuaCAgICAgIHwgICA4ICstCisgc3NoLWdzcy5oICAgICAg IHwgIDEzICsrCisgc3NoZC1zZXNzaW9uLmMgIHwgIDk4ICsrKysrKysrKysrKworIHNzaGRfY29u ZmlnLjUgICB8ICA3MCArKysrKysrKysKKyA5IGZpbGVzIGNoYW5nZWQsIDg1MSBpbnNlcnRpb25z KCspLCAyMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2F1dGgta3JiNS5jIGIvYXV0aC1r cmI1LmMKK2luZGV4IDJlM2MxYzgwZi4uOWNkMzYxOGIyIDEwMDY0NAorLS0tIGEvYXV0aC1rcmI1 LmMKKysrKyBiL2F1dGgta3JiNS5jCitAQCAtNDY1LDYgKzQ2NSwxOSBAQCBzc2hfa3JiNV9jY19u ZXdfdW5pcXVlKGtyYjVfY29udGV4dCBjdHgsIGtyYjVfY2NhY2hlICpjY2FjaGUsIGludCAqbmVl ZF9lbnZpcm9ubQorIAkgKiBhIHByaW1hcnkgY2FjaGUgZm9yIHRoaXMgY29sbGVjdGlvbiwgaWYg aXQgc3VwcG9ydHMgdGhhdCAobm9uLUZJTEUpCisgCSAqLworIAlpZiAoa3JiNV9jY19zdXBwb3J0 X3N3aXRjaChjdHgsIHR5cGUpKSB7CisrCQkvKgorKwkJICogRm9yIGNvbGxlY3Rpb24tdHlwZSBj YWNoZXMgKEtDTSwgS0VZUklORywg4oCmKSByZXVzZSB0aGUKKysJCSAqIGV4aXN0aW5nIHByaW1h cnkgY2NhY2hlIHdoZW4gb25lIGlzIGFscmVhZHkgcHJlc2VudC4gIFRoZQorKwkJICogY2FsbGVy IHdpbGwgcmVpbml0aWFsaXNlIGl0IHdpdGgga3JiNV9jY19pbml0aWFsaXplKCksIHNvCisrCQkg KiBpdHMgb2xkIGNvbnRlbnRzIGFyZSByZXBsYWNlZCByYXRoZXIgdGhhbiBvcnBoYW5lZC4gIE9u bHkKKysJCSAqIGNyZWF0ZSBhIGZyZXNoIHVuaXF1ZSBjY2FjaGUgd2hlbiBubyBwcmltYXJ5IGV4 aXN0cyB5ZXQuCisrCQkgKi8KKysJCWlmIChrcmI1X2NjX2RlZmF1bHQoY3R4LCBjY2FjaGUpID09 IDApIHsKKysJCQlkZWJ1ZzNfZigicmV1c2luZyBleGlzdGluZyBkZWZhdWx0IGNjYWNoZSBvZiB0 eXBlICVzIiwKKysJCQkgICAgdHlwZSk7CisrCQkJZnJlZSh0eXBlKTsKKysJCQlyZXR1cm4gMDsK KysJCX0KKyAJCWRlYnVnM19mKCJjYWxsaW5nIGNjX25ld191bmlxdWUoJXMpIiwgY2NuYW1lKTsK KyAJCXJldCA9IGtyYjVfY2NfbmV3X3VuaXF1ZShjdHgsIHR5cGUsIE5VTEwsIGNjYWNoZSk7Cisg CQlmcmVlKHR5cGUpOworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwor aW5kZXggZDYyNzQzMjhiLi5iMmM5NTlmZjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysr KyBiL2NvbmZpZ3VyZS5hYworQEAgLTUwNzUsMTEgKzUwNzUsMTcgQEAgQUNfQVJHX1dJVEgoW2tl cmJlcm9zNV0sCisgIyBpbmNsdWRlIDxnc3NhcGlfZ2VuZXJpYy5oPgorICNlbGlmIGRlZmluZWQo SEFWRV9HU1NBUElfR1NTQVBJX0dFTkVSSUNfSCkKKyAjIGluY2x1ZGUgPGdzc2FwaS9nc3NhcGlf Z2VuZXJpYy5oPgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX0dTU0FQSV9FWFRfSAorKyMgaW5jbHVk ZSA8Z3NzYXBpL2dzc2FwaV9leHQuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9HU1NBUElfS1JC NV9ICisrIyBpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2tyYjUuaD4KKyAjZW5kaWYKKyAJCV1dKQor IAkJc2F2ZWRfTElCUz0iJExJQlMiCistCQlMSUJTPSIkTElCUyAkSzVMSUJTIgorLQkJQUNfQ0hF Q0tfRlVOQ1MoW2tyYjVfY2NfbmV3X3VuaXF1ZSBrcmI1X2dldF9lcnJvcl9tZXNzYWdlIGtyYjVf ZnJlZV9lcnJvcl9tZXNzYWdlXSkKKysJCUxJQlM9IiRMSUJTICRHU1NMSUJTICRLNUxJQlMgIgor KwkJQUNfQ0hFQ0tfRlVOQ1MoW2tyYjVfY2NfbmV3X3VuaXF1ZSBrcmI1X2dldF9lcnJvcl9tZXNz YWdlIGtyYjVfZnJlZV9lcnJvcl9tZXNzYWdlIGdzc19hY3F1aXJlX2NyZWRfZnJvbV0pCisgCQlM SUJTPSIkc2F2ZWRfTElCUyIKKyAKKyAJZmkKK2RpZmYgLS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMg Yi9nc3Mtc2Vydi1rcmI1LmMKK2luZGV4IGZjN2NhYmMwOS4uMDZkNDUwZDRkIDEwMDY0NAorLS0t IGEvZ3NzLXNlcnYta3JiNS5jCisrKysgYi9nc3Mtc2Vydi1rcmI1LmMKK0BAIC02MDksNiArNjA5 LDIzMSBAQCBzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0 b3JlLAorIAlyZXR1cm4gMTsKKyB9CisgCisrLyoKKysgKiBDaGVjayB3aGV0aGVyIHRoZSB1c2Vy J3MgZGVmYXVsdCBjY2FjaGUgYWxyZWFkeSBjb250YWlucyB2YWxpZCBzZXJ2aWNlCisrICogdGlj a2V0cyBmb3IgYWxsIHByaW5jaXBhbHMgbGlzdGVkIGluIHNlcnZpY2VzW10uICBSZXR1cm5zIDEg aWYgZXZlcnkKKysgKiBsaXN0ZWQgc2VydmljZSBoYXMgYSB0aWNrZXQgd2l0aCBhdCBsZWFzdCBt aW5fbGlmZXRpbWUgc2Vjb25kcyByZW1haW5pbmcKKysgKiAocGFzcyBHU1NfQ19JTkRFRklOSVRF IHRvIGFjY2VwdCBhbnkgcG9zaXRpdmUgcmVtYWluaW5nIGxpZmV0aW1lKSwgMCBpZgorKyAqIGFu eSB0aWNrZXQgaXMgbWlzc2luZyBvciB0b28gY2xvc2UgdG8gZXhwaXJ5LiAgUnVucyBhcyB0aGUg dXNlci4KKysgKgorKyAqIFVubGlrZSBzc2hfZ3NzYXBpX3VzZXJfaGFzX3ZhbGlkX3RndCgpLCB0 aGlzIGNhbm5vdCB1c2UgZ3NzX2FjcXVpcmVfY3JlZCgpCisrICogYmVjYXVzZSBzZXJ2aWNlIHRp Y2tldHMgYXJlIG5vdCBpbml0aWF0b3IgY3JlZGVudGlhbHMg4oCUIEdTU0FQSSBvbmx5CisrICog c3VyZmFjZXMgVEdUcyB2aWEgdGhhdCBBUEkuICBXZSBpdGVyYXRlIHRoZSBjY2FjaGUgd2l0aCB0 aGUga3JiNSBBUEkKKysgKiBkaXJlY3RseSBpbnN0ZWFkLgorKyAqLworK2ludAorK3NzaF9nc3Nh cGlfdXNlcl9oYXNfdmFsaWRfcHJveHlfdGlja2V0cyhjaGFyICoqc2VydmljZXMsIHVfaW50IG5z ZXJ2aWNlcywKKysgICAgdV9pbnQgbWluX2xpZmV0aW1lKQorK3sKKysJa3JiNV9jb250ZXh0IGN0 eCA9IE5VTEw7CisrCWtyYjVfY2NhY2hlIGNjID0gTlVMTDsKKysJa3JiNV9jY19jdXJzb3IgY3Vy c29yOworKwlrcmI1X2NyZWRzIGNyZWQ7CisrCWtyYjVfcHJpbmNpcGFsIHN2Y19wcmluYzsKKysJ aW50ICpmb3VuZCA9IE5VTEw7CisrCXVfaW50IGk7CisrCWludCBhbGxfZm91bmQgPSAwOworKwl0 aW1lX3Qgbm93OworKworKwlpZiAobnNlcnZpY2VzID09IDApCisrCQlyZXR1cm4gMDsKKysKKysJ aWYgKGtyYjVfaW5pdF9jb250ZXh0KCZjdHgpICE9IDApCisrCQlyZXR1cm4gMDsKKysKKysJZm91 bmQgPSB4Y2FsbG9jKG5zZXJ2aWNlcywgc2l6ZW9mKCpmb3VuZCkpOworKwlub3cgPSB0aW1lKE5V TEwpOworKworKwlpZiAoa3JiNV9jY19kZWZhdWx0KGN0eCwgJmNjKSAhPSAwKQorKwkJZ290byBv dXQ7CisrCisrCWlmIChrcmI1X2NjX3N0YXJ0X3NlcV9nZXQoY3R4LCBjYywgJmN1cnNvcikgIT0g MCkgeworKwkJa3JiNV9jY19jbG9zZShjdHgsIGNjKTsKKysJCWNjID0gTlVMTDsKKysJCWdvdG8g b3V0OworKwl9CisrCisrCXdoaWxlIChrcmI1X2NjX25leHRfY3JlZChjdHgsIGNjLCAmY3Vyc29y LCAmY3JlZCkgPT0gMCkgeworKwkJLyoKKysJCSAqIFVzZSBrcmI1X3ByaW5jaXBhbF9jb21wYXJl KCkgc28gdGhhdCBzZXJ2aWNlIG5hbWVzCisrCQkgKiBjb25maWd1cmVkIHdpdGhvdXQgYW4gZXhw bGljaXQgcmVhbG0gKGtyYjVfcGFyc2VfbmFtZQorKwkJICogYXBwZW5kcyB0aGUgZGVmYXVsdCBy ZWFsbSkgc3RpbGwgbWF0Y2ggdGhlIGZ1bGx5LQorKwkJICogcXVhbGlmaWVkIHByaW5jaXBhbCBz dG9yZWQgaW4gdGhlIGNjYWNoZS4KKysJCSAqLworKwkJZm9yIChpID0gMDsgaSA8IG5zZXJ2aWNl czsgaSsrKSB7CisrCQkJaWYgKGZvdW5kW2ldKQorKwkJCQljb250aW51ZTsKKysJCQlpZiAoa3Ji NV9wYXJzZV9uYW1lKGN0eCwgc2VydmljZXNbaV0sCisrCQkJICAgICZzdmNfcHJpbmMpICE9IDAp CisrCQkJCWNvbnRpbnVlOworKwkJCWlmIChrcmI1X3ByaW5jaXBhbF9jb21wYXJlKGN0eCwKKysJ CQkgICAgY3JlZC5zZXJ2ZXIsIHN2Y19wcmluYykpIHsKKysJCQkJa3JiNV9kZWx0YXQgcmVtYWlu aW5nID0KKysJCQkJICAgIGNyZWQudGltZXMuZW5kdGltZSAtIG5vdzsKKysJCQkJaWYgKHJlbWFp bmluZyA+IDAgJiYKKysJCQkJICAgIChtaW5fbGlmZXRpbWUgPT0gR1NTX0NfSU5ERUZJTklURSB8 fAorKwkJCQkgICAgIChrcmI1X2RlbHRhdCltaW5fbGlmZXRpbWUgPD0gcmVtYWluaW5nKSkKKysJ CQkJCWZvdW5kW2ldID0gMTsKKysJCQl9CisrCQkJa3JiNV9mcmVlX3ByaW5jaXBhbChjdHgsIHN2 Y19wcmluYyk7CisrCQl9CisrCQlrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhjdHgsICZjcmVkKTsK KysJfQorKwlrcmI1X2NjX2VuZF9zZXFfZ2V0KGN0eCwgY2MsICZjdXJzb3IpOworKwlrcmI1X2Nj X2Nsb3NlKGN0eCwgY2MpOworKwljYyA9IE5VTEw7CisrCisrCWFsbF9mb3VuZCA9IDE7CisrCWZv ciAoaSA9IDA7IGkgPCBuc2VydmljZXM7IGkrKykgeworKwkJaWYgKCFmb3VuZFtpXSkgeworKwkJ CWFsbF9mb3VuZCA9IDA7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKytvdXQ6CisrCWZyZWUoZm91 bmQpOworKwlpZiAoY3R4ICE9IE5VTEwpCisrCQlrcmI1X2ZyZWVfY29udGV4dChjdHgpOworKwly ZXR1cm4gYWxsX2ZvdW5kOworK30KKysKKysvKiBBcyB1c2VyIC0gY2FsbGVkIG9uIGZhdGFsL2V4 aXQgKi8KKyt2b2lkCisrc3NoX2dzc2FwaV9jbGVhbnVwX2NyZWRzKHZvaWQpCisreworKwlzc2hf Z3NzYXBpX2NjYWNoZSAqc3RvcmUgPSBzc2hfZ3NzYXBpX2dldF9jY2FjaGUoKTsKKysJa3JiNV9j Y2FjaGUgY2NhY2hlID0gTlVMTDsKKysJa3JiNV9lcnJvcl9jb2RlIHByb2JsZW07CisrCisrCWlm IChzdG9yZS0+ZGF0YSAhPSBOVUxMKSB7CisrCQlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX3Jlc29s dmUoc3RvcmUtPmRhdGEsCisrCQkgICAgc3RvcmUtPmVudnZhbCwgJmNjYWNoZSkpKSB7CisrCQkJ ZGVidWdfZigia3JiNV9jY19yZXNvbHZlKCk6ICUuMTAwcyIsCisrCQkJICAgIGtyYjVfZ2V0X2Vy cl90ZXh0KHN0b3JlLT5kYXRhLCBwcm9ibGVtKSk7CisrCQl9IGVsc2UgaWYgKChwcm9ibGVtID0g a3JiNV9jY19kZXN0cm95KHN0b3JlLT5kYXRhLCBjY2FjaGUpKSkgeworKwkJCWRlYnVnX2YoImty YjVfY2NfZGVzdHJveSgpOiAlLjEwMHMiLAorKwkJCSAgICBrcmI1X2dldF9lcnJfdGV4dChzdG9y ZS0+ZGF0YSwgcHJvYmxlbSkpOworKwkJfSBlbHNlIHsKKysJCQlrcmI1X2ZyZWVfY29udGV4dChz dG9yZS0+ZGF0YSk7CisrCQkJc3RvcmUtPmRhdGEgPSBOVUxMOworKwkJfQorKwl9CisrfQorKwor Ky8qCisrICogRmlsdGVyIHRoZSB1c2VyJ3MgY2NhY2hlIGJ5IHJlbW92aW5nIHRoZSB0aWNrZXQg Y2xhc3NlcyBpbmRpY2F0ZWQgYnkKKysgKiBkcm9wX2ZsYWdzIChTU0hfR1NTQVBJX0NDRklMVEVS XyogYml0bWFzaykuICBFYWNoIGNyZWRlbnRpYWwgaXMKKysgKiBjYXRlZ29yaXNlZCBhcyBvbmUg b2Y6CisrICogICBUR1QgICAtIHNlcnZlciBwcmluY2lwYWwgbWF0Y2hlcyAia3JidGd0LyIgcHJl Zml4CisrICogICBQUk9YWSAtIHNlcnZlciBwcmluY2lwYWwgbWF0Y2hlcyBvbmUgb2YgcHJveHlf c2VydmljZXNbXQorKyAqICAgU0VMRiAgLSBldmVyeXRoaW5nIGVsc2UgKHRoZSBTNFUyU2VsZiBl dmlkZW5jZSB0aWNrZXQpCisrICogQ3JlZGVudGlhbHMgaW4gYSBmbGFnZ2VkIGNhdGVnb3J5IGFy ZSBkaXNjYXJkZWQ7IHRoZSByZXN0IGFyZSB3cml0dGVuCisrICogYmFjayBhZnRlciByZWluaXRp YWxpc2luZyB0aGUgY2NhY2hlLiAgUnVucyBhcyB1c2VyLgorKyAqLworK3ZvaWQKKytzc2hfZ3Nz YXBpX2tyYjVfZmlsdGVyX2NjYWNoZSh1X2ludCBkcm9wX2ZsYWdzLAorKyAgICBjaGFyICoqcHJv eHlfc2VydmljZXMsIHVfaW50IG5wcm94eV9zZXJ2aWNlcykKKyt7CisrCXNzaF9nc3NhcGlfY2Nh Y2hlICpzdG9yZSA9IHNzaF9nc3NhcGlfZ2V0X2NjYWNoZSgpOworKwlrcmI1X2NvbnRleHQgY3R4 ID0gKGtyYjVfY29udGV4dClzdG9yZS0+ZGF0YTsKKysJa3JiNV9jY2FjaGUgY2MgPSBOVUxMOwor KwlrcmI1X2NjX2N1cnNvciBjdXJzb3I7CisrCWtyYjVfY3JlZHMgKmtlZXAgPSBOVUxMOworKwlr cmI1X3ByaW5jaXBhbCBwcmluYyA9IE5VTEw7CisrCWtyYjVfZXJyb3JfY29kZSBwcm9ibGVtOwor KwljaGFyICpzcnZuYW1lOworKwl1X2ludCBpLCBua2VlcCA9IDAsIGNhcCA9IDA7CisrCWludCBp c190Z3QsIGlzX3Byb3h5LCBkcm9wOworKworKwlpZiAoY3R4ID09IE5VTEwgfHwgc3RvcmUtPmVu dnZhbCA9PSBOVUxMKQorKwkJcmV0dXJuOworKworKwlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX3Jl c29sdmUoY3R4LCBzdG9yZS0+ZW52dmFsLCAmY2MpKSAhPSAwKSB7CisrCQlkZWJ1Z19mKCJrcmI1 X2NjX3Jlc29sdmU6ICUuMTAwcyIsCisrCQkgICAga3JiNV9nZXRfZXJyX3RleHQoY3R4LCBwcm9i bGVtKSk7CisrCQlyZXR1cm47CisrCX0KKysJaWYgKChwcm9ibGVtID0ga3JiNV9jY19nZXRfcHJp bmNpcGFsKGN0eCwgY2MsICZwcmluYykpICE9IDApIHsKKysJCWRlYnVnX2YoImtyYjVfY2NfZ2V0 X3ByaW5jaXBhbDogJS4xMDBzIiwKKysJCSAgICBrcmI1X2dldF9lcnJfdGV4dChjdHgsIHByb2Js ZW0pKTsKKysJCWtyYjVfY2NfY2xvc2UoY3R4LCBjYyk7CisrCQlyZXR1cm47CisrCX0KKysJaWYg KChwcm9ibGVtID0ga3JiNV9jY19zdGFydF9zZXFfZ2V0KGN0eCwgY2MsICZjdXJzb3IpKSAhPSAw KSB7CisrCQlkZWJ1Z19mKCJrcmI1X2NjX3N0YXJ0X3NlcV9nZXQ6ICUuMTAwcyIsCisrCQkgICAg a3JiNV9nZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVtKSk7CisrCQlrcmI1X2ZyZWVfcHJpbmNpcGFs KGN0eCwgcHJpbmMpOworKwkJa3JiNV9jY19jbG9zZShjdHgsIGNjKTsKKysJCXJldHVybjsKKysJ fQorKworKwl7CisrCQlrcmI1X2NyZWRzIGNyZWQ7CisrCQlrcmI1X3ByaW5jaXBhbCBzdmNfcHJp bmM7CisrCQl3aGlsZSAoa3JiNV9jY19uZXh0X2NyZWQoY3R4LCBjYywgJmN1cnNvciwgJmNyZWQp ID09IDApIHsKKysJCQlpc190Z3QgPSBpc19wcm94eSA9IDA7CisrCQkJaWYgKGtyYjVfdW5wYXJz ZV9uYW1lKGN0eCwgY3JlZC5zZXJ2ZXIsCisrCQkJICAgICZzcnZuYW1lKSA9PSAwKSB7CisrCQkJ CWlzX3RndCA9IHN0cm5jbXAoc3J2bmFtZSwgImtyYnRndC8iLCA3KSA9PSAwOworKwkJCQlrcmI1 X2ZyZWVfdW5wYXJzZWRfbmFtZShjdHgsIHNydm5hbWUpOworKwkJCX0KKysJCQlpZiAoIWlzX3Rn dCkgeworKwkJCQkvKgorKwkJCQkgKiBVc2Uga3JiNV9wcmluY2lwYWxfY29tcGFyZSgpIHJhdGhl ciB0aGFuCisrCQkJCSAqIHN0cmNtcCgpIHNvIHRoYXQgYSBzZXJ2aWNlIG5hbWUgY29uZmlndXJl ZAorKwkJCQkgKiB3aXRob3V0IGFuIGV4cGxpY2l0IHJlYWxtIChrcmI1X3BhcnNlX25hbWUKKysJ CQkJICogYXBwZW5kcyB0aGUgZGVmYXVsdCByZWFsbSkgc3RpbGwgbWF0Y2hlcworKwkJCQkgKiB0 aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgaW4gdGhlIGNjYWNoZS4KKysJCQkJICovCisrCQkJCWZv ciAoaSA9IDA7IGkgPCBucHJveHlfc2VydmljZXM7IGkrKykgeworKwkJCQkJaWYgKGtyYjVfcGFy c2VfbmFtZShjdHgsCisrCQkJCQkgICAgcHJveHlfc2VydmljZXNbaV0sICZzdmNfcHJpbmMpICE9 IDApCisrCQkJCQkJY29udGludWU7CisrCQkJCQlpZiAoa3JiNV9wcmluY2lwYWxfY29tcGFyZShj dHgsCisrCQkJCQkgICAgY3JlZC5zZXJ2ZXIsIHN2Y19wcmluYykpCisrCQkJCQkJaXNfcHJveHkg PSAxOworKwkJCQkJa3JiNV9mcmVlX3ByaW5jaXBhbChjdHgsIHN2Y19wcmluYyk7CisrCQkJCQlp ZiAoaXNfcHJveHkpCisrCQkJCQkJYnJlYWs7CisrCQkJCX0KKysJCQl9CisrCQkJaWYgKGlzX3Rn dCkKKysJCQkJZHJvcCA9IGRyb3BfZmxhZ3MgJiBTU0hfR1NTQVBJX0NDRklMVEVSX1RHVDsKKysJ CQllbHNlIGlmIChpc19wcm94eSkKKysJCQkJZHJvcCA9IGRyb3BfZmxhZ3MgJiBTU0hfR1NTQVBJ X0NDRklMVEVSX1BST1hZOworKwkJCWVsc2UKKysJCQkJZHJvcCA9IGRyb3BfZmxhZ3MgJiBTU0hf R1NTQVBJX0NDRklMVEVSX1NFTEY7CisrCisrCQkJaWYgKCFkcm9wKSB7CisrCQkJCWlmIChua2Vl cCA+PSBjYXApIHsKKysJCQkJCWNhcCA9IGNhcCA/IGNhcCAqIDIgOiA0OworKwkJCQkJa2VlcCA9 IHhyZWFsbG9jYXJyYXkoa2VlcCwgY2FwLAorKwkJCQkJICAgIHNpemVvZigqa2VlcCkpOworKwkJ CQl9CisrCQkJCWtlZXBbbmtlZXArK10gPSBjcmVkOworKwkJCX0gZWxzZQorKwkJCQlrcmI1X2Zy ZWVfY3JlZF9jb250ZW50cyhjdHgsICZjcmVkKTsKKysJCX0KKysJfQorKwlrcmI1X2NjX2VuZF9z ZXFfZ2V0KGN0eCwgY2MsICZjdXJzb3IpOworKworKwlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX2lu aXRpYWxpemUoY3R4LCBjYywgcHJpbmMpKSAhPSAwKSB7CisrCQlsb2dpdF9mKCJrcmI1X2NjX2lu aXRpYWxpemU6ICUuMTAwcyIsCisrCQkgICAga3JiNV9nZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVt KSk7CisrCX0gZWxzZSB7CisrCQlmb3IgKGkgPSAwOyBpIDwgbmtlZXA7IGkrKykKKysJCQlrcmI1 X2NjX3N0b3JlX2NyZWQoY3R4LCBjYywgJmtlZXBbaV0pOworKwkJZGVidWdfZigiY2NhY2hlIGZp bHRlciAweCV4OiByZXRhaW5lZCAldSB0aWNrZXQocykiLAorKwkJICAgIGRyb3BfZmxhZ3MsIG5r ZWVwKTsKKysJfQorKworKwlmb3IgKGkgPSAwOyBpIDwgbmtlZXA7IGkrKykKKysJCWtyYjVfZnJl ZV9jcmVkX2NvbnRlbnRzKGN0eCwgJmtlZXBbaV0pOworKwlmcmVlKGtlZXApOworKwlrcmI1X2Zy ZWVfcHJpbmNpcGFsKGN0eCwgcHJpbmMpOworKwlrcmI1X2NjX2Nsb3NlKGN0eCwgY2MpOworK30K KysKKyBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2tlcmJlcm9zX21lY2ggPSB7CisgCSJ0b1dNNVNs dzVFdzhNcWtheSthbDJnPT0iLAorIAkiS2VyYmVyb3MiLAorZGlmZiAtLWdpdCBhL2dzcy1zZXJ2 LmMgYi9nc3Mtc2Vydi5jCitpbmRleCAyMzdhM2M0MGEuLmQ3MjA2NDk5ZCAxMDA2NDQKKy0tLSBh L2dzcy1zZXJ2LmMKKysrKyBiL2dzcy1zZXJ2LmMKK0BAIC01NSw3ICs1NSw3IEBAIGV4dGVybiBT ZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgCisgc3RhdGljIHNzaF9nc3NhcGlfY2xpZW50IGdzc2Fw aV9jbGllbnQgPQorICAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVS LCBHU1NfQ19OT19DUkVERU5USUFMLAorLSAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5VTEx9OworKyAgICBHU1NfQ19OT19OQU1F LCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5VTEwsIDB9Owor IAorIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfbnVsbF9tZWNoID0KKyAgICAgeyBOVUxMLCBOVUxM LCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworQEAgLTQ5MiwyNiAr NDkyLDM4MiBAQCBzc2hfZ3NzYXBpX2dldGNsaWVudChHc3NjdHh0ICpjdHgsIHNzaF9nc3NhcGlf Y2xpZW50ICpjbGllbnQpCisgCXJldHVybiAoY3R4LT5tYWpvcik7CisgfQorIAorLS8qIEFzIHVz ZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhpdCAqLworKy8qIFJldHVybnMgbm9uLXplcm8gaWYgS2Vy YmVyb3MgY3JlZGVudGlhbHMgaGF2ZSBhbHJlYWR5IGJlZW4gc3RvcmVkLiAqLworK2ludAorK3Nz aF9nc3NhcGlfY3JlZGVudGlhbHNfc3RvcmVkKHZvaWQpCisreworKwlyZXR1cm4gZ3NzYXBpX2Ns aWVudC5zdG9yZS5lbnZ2YWwgIT0gTlVMTDsKKyt9CisrCisrLyogUmV0dXJucyBhIHBvaW50ZXIg dG8gdGhlIGNyZWRlbnRpYWwtY2FjaGUgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXNzaW9uLiAqLwor K3NzaF9nc3NhcGlfY2NhY2hlICoKKytzc2hfZ3NzYXBpX2dldF9jY2FjaGUodm9pZCkKKyt7Cisr CXJldHVybiAmZ3NzYXBpX2NsaWVudC5zdG9yZTsKKyt9CisrCisrLyogTG9nIGh1bWFuLXJlYWRh YmxlIEdTU0FQSSBtYWpvciBhbmQgbWlub3Igc3RhdHVzIHN0cmluZ3MuICovCisrc3RhdGljIHZv aWQKKytsb2dfZ3NzX2Vycm9yKE9NX3VpbnQzMiBtYWpvciwgT01fdWludDMyIG1pbm9yLCBjb25z dCBjaGFyICpsYWJlbCkKKyt7CisrCU9NX3VpbnQzMiBsbWluLCBtY3R4OworKwlnc3NfYnVmZmVy X2Rlc2MgZW1zZyA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysKKysJbWN0eCA9IDA7CisrCWRvIHsK KysJCWdzc19kaXNwbGF5X3N0YXR1cygmbG1pbiwgbWFqb3IsIEdTU19DX0dTU19DT0RFLAorKwkJ ICAgIEdTU19DX05PX09JRCwgJm1jdHgsICZlbXNnKTsKKysJCWxvZ2l0KCIlczogJS4qcyIsIGxh YmVsLCAoaW50KWVtc2cubGVuZ3RoLCAoY2hhciAqKWVtc2cudmFsdWUpOworKwkJZ3NzX3JlbGVh c2VfYnVmZmVyKCZsbWluLCAmZW1zZyk7CisrCX0gd2hpbGUgKG1jdHggIT0gMCk7CisrCisrCW1j dHggPSAwOworKwlkbyB7CisrCQlnc3NfZGlzcGxheV9zdGF0dXMoJmxtaW4sIG1pbm9yLCBHU1Nf Q19NRUNIX0NPREUsCisrCQkgICAgJmdzc2FwaV9rZXJiZXJvc19tZWNoLm9pZCwgJm1jdHgsICZl bXNnKTsKKysJCWlmIChlbXNnLmxlbmd0aCA+IDApCisrCQkJbG9naXQoIiVzOiAlLipzIiwgbGFi ZWwsCisrCQkJICAgIChpbnQpZW1zZy5sZW5ndGgsIChjaGFyICopZW1zZy52YWx1ZSk7CisrCQln c3NfcmVsZWFzZV9idWZmZXIoJmxtaW4sICZlbXNnKTsKKysJfSB3aGlsZSAobWN0eCAhPSAwKTsK Kyt9CisrCisrLyogTG9nIHRoZSBjYW5vbmljYWwgc3RyaW5nIGZvcm0gb2YgYSBHU1NBUEkgbmFt ZSBhcyBhIGRlYnVnIG1lc3NhZ2UuICovCisrc3RhdGljIHZvaWQKKytkZWJ1Z19nc3NfbmFtZShj b25zdCBjaGFyICpsYWJlbCwgZ3NzX25hbWVfdCBuYW1lKQorK3sKKysJT01fdWludDMyIGxtaW47 CisrCWdzc19idWZmZXJfZGVzYyBidWYgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCisrCWlmIChn c3NfZGlzcGxheV9uYW1lKCZsbWluLCBuYW1lLCAmYnVmLCBOVUxMKSA9PSBHU1NfU19DT01QTEVU RSkgeworKwkJZGVidWdfZigiJXM6ICUuKnMiLCBsYWJlbCwgKGludClidWYubGVuZ3RoLCAoY2hh ciAqKWJ1Zi52YWx1ZSk7CisrCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxtaW4sICZidWYpOworKwl9 CisrfQorKworKy8qCisrICogQ2hlY2sgd2hldGhlciB0aGUgdXNlciBhbHJlYWR5IGhhcyB2YWxp ZCBHU1NBUEkgaW5pdGlhdG9yIGNyZWRlbnRpYWxzCisrICogKGUuZy4gYSBLZXJiZXJvcyBUR1Qp IGluIHRoZWlyIGRlZmF1bHQgY3JlZGVudGlhbCBzdG9yZSB3aXRoIGF0IGxlYXN0CisrICogbWlu X2xpZmV0aW1lIHNlY29uZHMgcmVtYWluaW5nLiAgUGFzcyBHU1NfQ19JTkRFRklOSVRFIHRvIGFj Y2VwdCBhbnkKKysgKiBwb3NpdGl2ZSByZW1haW5pbmcgbGlmZXRpbWUuICBSdW5zIGFzIHRoZSB1 c2VyLgorKyAqIFJldHVybnMgMSBpZiBzdWZmaWNpZW50IGNyZWRlbnRpYWxzIGV4aXN0LCAwIG90 aGVyd2lzZS4KKysgKi8KKytpbnQKKytzc2hfZ3NzYXBpX3VzZXJfaGFzX3ZhbGlkX3RndCh1X2lu dCBtaW5fbGlmZXRpbWUpCisreworKwlPTV91aW50MzIgbWFqb3IsIG1pbm9yLCBsaWZldGltZSA9 IDA7CisrCWdzc19jcmVkX2lkX3QgY3JlZCA9IEdTU19DX05PX0NSRURFTlRJQUw7CisrCWludCBm b3VuZCA9IDA7CisrCisrCW1ham9yID0gZ3NzX2FjcXVpcmVfY3JlZCgmbWlub3IsIEdTU19DX05P X05BTUUsIEdTU19DX0lOREVGSU5JVEUsCisrCSAgICBHU1NfQ19OT19PSURfU0VULCBHU1NfQ19J TklUSUFURSwgJmNyZWQsIE5VTEwsICZsaWZldGltZSk7CisrCWlmICghR1NTX0VSUk9SKG1ham9y KSAmJiBsaWZldGltZSA+IDAgJiYKKysJICAgIChtaW5fbGlmZXRpbWUgPT0gR1NTX0NfSU5ERUZJ TklURSB8fCBsaWZldGltZSA+PSBtaW5fbGlmZXRpbWUpKQorKwkJZm91bmQgPSAxOworKwlpZiAo Y3JlZCAhPSBHU1NfQ19OT19DUkVERU5USUFMKQorKwkJZ3NzX3JlbGVhc2VfY3JlZCgmbWlub3Is ICZjcmVkKTsKKysJcmV0dXJuIGZvdW5kOworK30KKysKKysKKysvKgorKyAqIFBlcmZvcm0gUzRV MlNlbGYgKHByb3RvY29sIHRyYW5zaXRpb24pOiBhY3F1aXJlIGEgS2VyYmVyb3Mgc2VydmljZSB0 aWNrZXQKKysgKiBmb3IgdGhlIFNTSCB1c2VyIG9uIGJlaGFsZiBvZiB0aGUgaG9zdCBwcmluY2lw YWwuICBSdW5zIHByaXZpbGVnZWQuCisrICogUG9wdWxhdGVzIGdzc2FwaV9jbGllbnQue2NyZWRz LG1lY2gsZGlzcGxheW5hbWUsZXhwb3J0ZWRuYW1lfSBvbiBzdWNjZXNzLgorKyAqIFJldHVybnMg MCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorKyAqLworKy8qIFByaXZpbGVnZWQgKi8KKytp bnQKKytzc2hfZ3NzYXBpX3M0dTJzZWxmKGNvbnN0IGNoYXIgKnVzZXIsIHVfaW50IGxpZmV0aW1l KQorK3sKKysJT01fdWludDMyIG1ham9yLCBtaW5vciwgc3RhdHVzOworKwlnc3NfT0lEX3NldCBv aWRzZXQgPSBHU1NfQ19OT19PSURfU0VUOworKwlnc3NfbmFtZV90IGhvc3RfbmFtZSA9IEdTU19D X05PX05BTUU7CisrCWdzc19uYW1lX3QgdXNlcl9uYW1lID0gR1NTX0NfTk9fTkFNRTsKKysJZ3Nz X2NyZWRfaWRfdCBob3N0X2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKKysJZ3NzX2NyZWRf aWRfdCBpbXBlcnNvbmF0ZWRfY3JlZHMgPSBHU1NfQ19OT19DUkVERU5USUFMOworKwlnc3NfYnVm ZmVyX2Rlc2MgZ3NzYnVmLCBkaXNwbGF5bmFtZSA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJY2hh ciBsbmFtZVtOSV9NQVhIT1NUXTsKKysJY2hhciAqdmFsOworKworKwlpZiAoZ2V0aG9zdG5hbWUo bG5hbWUsIHNpemVvZihsbmFtZSkpICE9IDApIHsKKysJCWxvZ2l0X2YoImdldGhvc3RuYW1lOiAl cyIsIHN0cmVycm9yKGVycm5vKSk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJLyogQWNxdWly ZSBhY2NlcHRvciBjcmVkZW50aWFsIGZvciBob3N0LyBmcm9tIHRoZSBrZXl0YWIgKi8KKysJZ3Nz X2NyZWF0ZV9lbXB0eV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOworKwlnc3NfYWRkX29pZF9z ZXRfbWVtYmVyKCZzdGF0dXMsICZnc3NhcGlfa2VyYmVyb3NfbWVjaC5vaWQsICZvaWRzZXQpOwor KworKwl4YXNwcmludGYoJnZhbCwgImhvc3RAJXMiLCBsbmFtZSk7CisrCWdzc2J1Zi52YWx1ZSA9 IHZhbDsKKysJZ3NzYnVmLmxlbmd0aCA9IHN0cmxlbih2YWwpOworKwltYWpvciA9IGdzc19pbXBv cnRfbmFtZSgmbWlub3IsICZnc3NidWYsCisrCSAgICBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklD RSwgJmhvc3RfbmFtZSk7CisrCWZyZWUodmFsKTsKKysJaWYgKEdTU19FUlJPUihtYWpvcikpIHsK KysJCWxvZ2l0X2YoImdzc19pbXBvcnRfbmFtZSAoaG9zdCkgZmFpbGVkIik7CisrCQlnc3NfcmVs ZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOworKwkJcmV0dXJuIC0xOworKwl9CisrCWRl YnVnX2dzc19uYW1lKCJob3N0IG5hbWUgcGFyc2VkIGFzIiwgaG9zdF9uYW1lKTsKKysKKysJZGVi dWdfZigiYWNxdWlyaW5nIGhvc3QgY3JlZGVudGlhbHMgYXMgdWlkPSV1IGV1aWQ9JXUsIHByaW5j aXBhbD1ob3N0QCVzIiwKKysJICAgICh1bnNpZ25lZClnZXR1aWQoKSwgKHVuc2lnbmVkKWdldGV1 aWQoKSwgbG5hbWUpOworKwkjaWZkZWYgSEFWRV9HU1NfQUNRVUlSRV9DUkVEX0ZST00KKysJewor KyMgaWYgZGVmaW5lZChLUkI1KQorKwkJLyoKKysJCSAqIFJlc29sdmUgdGhlIGtleXRhYiBwYXRo OiBrcmI1X2t0X2RlZmF1bHRfbmFtZSByZXNwZWN0cworKwkJICogS1JCNV9LVE5BTUUgYW5kIGty YjUuY29uZiBkZWZhdWx0X2tleXRhYl9uYW1lLgorKwkJICovCisrCQljaGFyIGtleXRhYl9uYW1l W01BWFBBVEhMRU5dOworKwkJa3JiNV9jb250ZXh0IHRtcF9jdHg7CisrCisrCisrCQlrZXl0YWJf bmFtZVswXSA9ICdcMCc7CisrCQlpZiAoa3JiNV9pbml0X2NvbnRleHQoJnRtcF9jdHgpID09IDAp IHsKKysJCQkodm9pZClrcmI1X2t0X2RlZmF1bHRfbmFtZSh0bXBfY3R4LCBrZXl0YWJfbmFtZSwK KysJCQkgICAgc2l6ZW9mKGtleXRhYl9uYW1lKSk7CisrCQkJa3JiNV9mcmVlX2NvbnRleHQodG1w X2N0eCk7CisrCQl9CisrCQlpZiAoa2V5dGFiX25hbWVbMF0gPT0gJ1wwJykKKysJCQlzdHJsY3B5 KGtleXRhYl9uYW1lLCAiRklMRTovZXRjL2tyYjUua2V5dGFiIiwKKysJCQkgICAgc2l6ZW9mKGtl eXRhYl9uYW1lKSk7CisrCQkvKgorKwkJICogY2xpZW50X2tleXRhYiBsZXRzIEdTU0FQSSBkbyBB Uy1SRVEgdG8gb2J0YWluIGEgVEdUIGZvciB0aGUKKysJCSAqIGhvc3QgcHJpbmNpcGFsIChpbml0 aWF0b3Igcm9sZSBuZWVkZWQgZm9yIFM0VTJTZWxmKS4KKysJCSAqIGtleXRhYiBjb3ZlcnMgdGhl IGFjY2VwdG9yIHJvbGUuCisrCQkgKiBjY2FjaGU6IE1FTU9SWToga2VlcHMgdGhlIHJlc3VsdGlu ZyBUR1Qgdm9sYXRpbGUuCisrCQkgKi8KKysJCWdzc19rZXlfdmFsdWVfZWxlbWVudF9kZXNjIHN0 b3JlX2VsZW1lbnRzW10gPSB7CisrCQkJeyAiY2xpZW50X2tleXRhYiIsIGtleXRhYl9uYW1lIH0s CisrCQkJeyAia2V5dGFiIiwga2V5dGFiX25hbWUgfSwKKysJCQl7ICJjY2FjaGUiLCAiTUVNT1JZ OiIgfSwKKysJCX07CisrCQljb25zdCBnc3Nfa2V5X3ZhbHVlX3NldF9kZXNjIGNyZWRfc3RvcmUg PSB7IDMsIHN0b3JlX2VsZW1lbnRzIH07CisrIyBlbHNlCisrCQlnc3Nfa2V5X3ZhbHVlX2VsZW1l bnRfZGVzYyBzdG9yZV9lbGVtZW50c1tdID0geworKwkJCXsgImNjYWNoZSIsICJNRU1PUlk6IiB9 LAorKwkJfTsKKysJCWNvbnN0IGdzc19rZXlfdmFsdWVfc2V0X2Rlc2MgY3JlZF9zdG9yZSA9IHsg MSwgc3RvcmVfZWxlbWVudHMgfTsKKysjIGVuZGlmCisrCisrCisrCQltYWpvciA9IGdzc19hY3F1 aXJlX2NyZWRfZnJvbSgmbWlub3IsIGhvc3RfbmFtZSwgbGlmZXRpbWUsCisrCQkgICAgb2lkc2V0 LCBHU1NfQ19CT1RILCAmY3JlZF9zdG9yZSwgJmhvc3RfY3JlZHMsIE5VTEwsIE5VTEwpOworKwl9 CisrI2Vsc2UKKysJbWFqb3IgPSBnc3NfYWNxdWlyZV9jcmVkKCZtaW5vciwgaG9zdF9uYW1lLCBs aWZldGltZSwKKysJICAgIG9pZHNldCwgR1NTX0NfQk9USCwgJmhvc3RfY3JlZHMsIE5VTEwsIE5V TEwpOworKyNlbmRpZgorKwlnc3NfcmVsZWFzZV9uYW1lKCZtaW5vciwgJmhvc3RfbmFtZSk7Cisr CWlmIChHU1NfRVJST1IobWFqb3IpKSB7CisrCQlsb2dpdF9mKCJnc3NfYWNxdWlyZV9jcmVkKGhv c3RAJXMpIGZhaWxlZCBhcyB1aWQ9JXUgZXVpZD0ldSIsCisrCQkgICAgbG5hbWUsICh1bnNpZ25l ZClnZXR1aWQoKSwgKHVuc2lnbmVkKWdldGV1aWQoKSk7CisrCQlsb2dfZ3NzX2Vycm9yKG1ham9y LCBtaW5vciwgIlM0VTJTZWxmOiBnc3NfYWNxdWlyZV9jcmVkIik7CisrCQlnc3NfcmVsZWFzZV9v aWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCS8qIElt cG9ydCB0aGUgU1NIIHVzZXJuYW1lIGFzIGEgR1NTQVBJL0tlcmJlcm9zIG5hbWUgKi8KKysJZ3Nz YnVmLnZhbHVlID0gKHZvaWQgKil1c2VyOworKwlnc3NidWYubGVuZ3RoID0gc3RybGVuKHVzZXIp OworKwltYWpvciA9IGdzc19pbXBvcnRfbmFtZSgmbWlub3IsICZnc3NidWYsCisrCSAgICBHU1Nf Q19OVF9VU0VSX05BTUUsICZ1c2VyX25hbWUpOworKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgewor KwkJbG9naXRfZigiZ3NzX2ltcG9ydF9uYW1lICh1c2VyKSBmYWlsZWQiKTsKKysJCWdzc19yZWxl YXNlX2NyZWQoJm1pbm9yLCAmaG9zdF9jcmVkcyk7CisrCQlnc3NfcmVsZWFzZV9vaWRfc2V0KCZz dGF0dXMsICZvaWRzZXQpOworKwkJcmV0dXJuIC0xOworKwl9CisrCWRlYnVnX2dzc19uYW1lKCJ1 c2VyIG5hbWUgcGFyc2VkIGFzIiwgdXNlcl9uYW1lKTsKKysKKysJLyogUzRVMlNlbGY6IG9idGFp biBhIHNlcnZpY2UgdGlja2V0IGZvciB0aGUgdXNlciB3aXRob3V0IHRoZWlyIGNyZWRzICovCisr CWRlYnVnX2YoImNhbGxpbmcgZ3NzX2FjcXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9uYW1lIGZvciB1 c2VyICUuMTAwcyIsIHVzZXIpOworKwltYWpvciA9IGdzc19hY3F1aXJlX2NyZWRfaW1wZXJzb25h dGVfbmFtZSgmbWlub3IsCisrCSAgICBob3N0X2NyZWRzLCB1c2VyX25hbWUsIGxpZmV0aW1lLAor KwkgICAgb2lkc2V0LCBHU1NfQ19JTklUSUFURSwKKysJICAgICZpbXBlcnNvbmF0ZWRfY3JlZHMs IE5VTEwsIE5VTEwpOworKworKwlnc3NfcmVsZWFzZV9jcmVkKCZtaW5vciwgJmhvc3RfY3JlZHMp OworKwlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOworKwlpZiAoR1NTX0VS Uk9SKG1ham9yKSkgeworKwkJbG9naXRfZigiZ3NzX2FjcXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9u YW1lIGZhaWxlZCBmb3IgJS4xMDBzIiwKKysJCSAgICB1c2VyKTsKKysJCWxvZ19nc3NfZXJyb3Io bWFqb3IsIG1pbm9yLAorKwkJICAgICJTNFUyU2VsZjogZ3NzX2FjcXVpcmVfY3JlZF9pbXBlcnNv bmF0ZV9uYW1lIik7CisrCQlnc3NfcmVsZWFzZV9uYW1lKCZtaW5vciwgJnVzZXJfbmFtZSk7Cisr CQlyZXR1cm4gLTE7CisrCX0KKysKKysJLyogR2V0IHRoZSBkaXNwbGF5IG5hbWUgKEtlcmJlcm9z IHByaW5jaXBhbCBzdHJpbmcpIGZvciBzdG9yZWNyZWRzICovCisrCW1ham9yID0gZ3NzX2Rpc3Bs YXlfbmFtZSgmbWlub3IsIHVzZXJfbmFtZSwgJmRpc3BsYXluYW1lLCBOVUxMKTsKKysJZ3NzX3Jl bGVhc2VfbmFtZSgmbWlub3IsICZ1c2VyX25hbWUpOworKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkg eworKwkJbG9naXRfZigiZ3NzX2Rpc3BsYXlfbmFtZSBmYWlsZWQiKTsKKysJCWdzc19yZWxlYXNl X2NyZWQoJm1pbm9yLCAmaW1wZXJzb25hdGVkX2NyZWRzKTsKKysJCXJldHVybiAtMTsKKysJfQor KworKwkvKiBQb3B1bGF0ZSBnc3NhcGlfY2xpZW50IGZvciBzdG9yZWNyZWRzX3M0dTJzZWxmIGFu ZCBzNHUycHJveHkgKi8KKysJZ3NzYXBpX2NsaWVudC5tZWNoID0gJmdzc2FwaV9rZXJiZXJvc19t ZWNoOworKwlnc3NhcGlfY2xpZW50LmNyZWRzID0gaW1wZXJzb25hdGVkX2NyZWRzOworKwlnc3Nh cGlfY2xpZW50LmRpc3BsYXluYW1lLnZhbHVlID0geG1hbGxvYyhkaXNwbGF5bmFtZS5sZW5ndGgg KyAxKTsKKysJbWVtY3B5KGdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUudmFsdWUsCisrCSAgICBk aXNwbGF5bmFtZS52YWx1ZSwgZGlzcGxheW5hbWUubGVuZ3RoKTsKKysJKChjaGFyICopZ3NzYXBp X2NsaWVudC5kaXNwbGF5bmFtZS52YWx1ZSlbZGlzcGxheW5hbWUubGVuZ3RoXSA9ICdcMCc7Cisr CWdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUubGVuZ3RoID0gZGlzcGxheW5hbWUubGVuZ3RoOwor KwkvKgorKwkgKiBleHBvcnRlZG5hbWUgaXMgdXNlZCBieSBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVj cmVkcyDihpIga3JiNV9wYXJzZV9uYW1lLgorKwkgKiBnc3NfZGlzcGxheV9uYW1lIGZvciBhIHVz ZXItbmFtZSByZXR1cm5zIHRoZSBjYW5vbmljYWwgcHJpbmNpcGFsCisrCSAqIHN0cmluZyAoZS5n LiB1c2VyQFJFQUxNKSB3aGljaCBrcmI1X3BhcnNlX25hbWUgY2FuIGNvbnN1bWUgZGlyZWN0bHku CisrCSAqLworKwlnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS52YWx1ZSA9IHhtYWxsb2MoZGlz cGxheW5hbWUubGVuZ3RoICsgMSk7CisrCW1lbWNweShnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFt ZS52YWx1ZSwKKysJICAgIGRpc3BsYXluYW1lLnZhbHVlLCBkaXNwbGF5bmFtZS5sZW5ndGgpOwor KwkoKGNoYXIgKilnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS52YWx1ZSlbZGlzcGxheW5hbWUu bGVuZ3RoXSA9ICdcMCc7CisrCWdzc2FwaV9jbGllbnQuZXhwb3J0ZWRuYW1lLmxlbmd0aCA9IGRp c3BsYXluYW1lLmxlbmd0aDsKKysKKysJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vciwgJmRpc3Bs YXluYW1lKTsKKysJZGVidWdfZigiUzRVMlNlbGYgc3VjY2VlZGVkIGZvciAlLjEwMHMiLCB1c2Vy KTsKKysJcmV0dXJuIDA7CisrfQorKworKy8qIEFzIHVzZXIg4oCUIHdyaXRlIHRoZSBTNFUyU2Vs ZiB0aWNrZXQgaW50byBhIG5ldyBjY2FjaGUgdmlhIG1lY2gtPnN0b3JlY3JlZHMgKi8KKyB2b2lk Cistc3NoX2dzc2FwaV9jbGVhbnVwX2NyZWRzKHZvaWQpCisrc3NoX2dzc2FwaV9zdG9yZWNyZWRz X3M0dTJzZWxmKHZvaWQpCisgeworLQlrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOworLQlrcmI1 X2Vycm9yX2NvZGUgcHJvYmxlbTsKKy0KKy0JaWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSAh PSBOVUxMKSB7CistCQlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX3Jlc29sdmUoZ3NzYXBpX2NsaWVu dC5zdG9yZS5kYXRhLCBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCwgJmNjYWNoZSkpKSB7Cist CQkJZGVidWdfZigia3JiNV9jY19yZXNvbHZlKCk6ICUuMTAwcyIsCistCQkJCWtyYjVfZ2V0X2Vy cl90ZXh0KGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSwgcHJvYmxlbSkpOworLQkJfSBlbHNlIGlm ICgocHJvYmxlbSA9IGtyYjVfY2NfZGVzdHJveShnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEsIGNj YWNoZSkpKSB7CistCQkJZGVidWdfZigia3JiNV9jY19kZXN0cm95KCk6ICUuMTAwcyIsCistCQkJ CWtyYjVfZ2V0X2Vycl90ZXh0KGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSwgcHJvYmxlbSkpOwor LQkJfSBlbHNlIHsKKy0JCQlrcmI1X2ZyZWVfY29udGV4dChnc3NhcGlfY2xpZW50LnN0b3JlLmRh dGEpOworLQkJCWdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSA9IE5VTEw7CisrCWlmIChnc3NhcGlf Y2xpZW50Lm1lY2ggPT0gTlVMTCB8fCBnc3NhcGlfY2xpZW50Lm1lY2gtPnN0b3JlY3JlZHMgPT0g TlVMTCkgeworKwkJZGVidWdfZigibm8gR1NTQVBJIG1lY2hhbmlzbSBmb3Igc3RvcmluZyBTNFUy U2VsZiBjcmVkZW50aWFscyIpOworKwkJcmV0dXJuOworKwl9CisrCSgqZ3NzYXBpX2NsaWVudC5t ZWNoLT5zdG9yZWNyZWRzKSgmZ3NzYXBpX2NsaWVudCk7CisrfQorKworKy8qCisrICogUGVyZm9y bSBTNFUyUHJveHkgZm9yIGVhY2ggY29uZmlndXJlZCBzZXJ2aWNlIHByaW5jaXBhbCwgdGhlbiBm bHVzaCBhbGwKKysgKiByZXN1bHRpbmcgdGlja2V0cyBpbnRvIHRoZSB1c2VyJ3MgY2NhY2hlLiAg UnVucyBhcyB1c2VyLCBhZnRlcgorKyAqIHNzaF9nc3NhcGlfc3RvcmVjcmVkc19zNHUyc2VsZigp IGhhcyBjcmVhdGVkIHRoZSBjY2FjaGUuCisrICoKKysgKiBnc3NhcGlfY2xpZW50LmNyZWRzICh0 aGUgUzRVMlNlbGYgcHJveHkgY3JlZGVudGlhbCkgaXMgcGFzc2VkIGFzIHRoZQorKyAqIGluaXRp YXRvciB0byBnc3NfaW5pdF9zZWNfY29udGV4dCgpOyB0aGUgR1NTQVBJIGxpYnJhcnkgcHJlc2Vu dHMgdGhlIFRHVAorKyAqIGFuZCBldmlkZW5jZSB0aWNrZXQgdG8gdGhlIEtEQyB2aWEgUzRVMlBy b3h5IFRHUy1SRVEuICBUaGUgb3V0cHV0IHRva2VuCisrICogKEFQLVJFUSkgaXMgZGlzY2FyZGVk IOKAlCB3ZSBkbyBub3QgY29ubmVjdCB0byB0aGUgdGFyZ2V0IHNlcnZpY2UuCisrICoKKysgKiBB ZnRlciBpdGVyYXRpbmcgYWxsIHNlcnZpY2VzLCBnc3Nfc3RvcmVfY3JlZCgpIGZsdXNoZXMgdGhl IGFjY3VtdWxhdGVkCisrICogcHJveHkgc2VydmljZSB0aWNrZXRzIGZyb20gdGhlIGNyZWRlbnRp YWwncyBpbnRlcm5hbCBjY2FjaGUgaW50byB0aGUKKysgKiBLUkI1Q0NOQU1FIGNjYWNoZSB0aGF0 IHN0b3JlY3JlZHNfczR1MnNlbGYoKSBhbHJlYWR5IGNyZWF0ZWQuCisrICovCisrLyogQXMgdXNl ciAqLworK3ZvaWQKKytzc2hfZ3NzYXBpX3M0dTJwcm94eShjaGFyICoqc2VydmljZXMsIHVfaW50 IG5zZXJ2aWNlcywgdV9pbnQgbGlmZXRpbWUpCisreworKwlPTV91aW50MzIgbWFqb3IsIG1pbm9y OworKwlnc3NfYnVmZmVyX2Rlc2Mgc2VydmljZV9idWYsIG91dHB1dF90b2tlbiA9IEdTU19DX0VN UFRZX0JVRkZFUjsKKysJZ3NzX25hbWVfdCB0YXJnZXRfbmFtZTsKKysJZ3NzX2N0eF9pZF90IGN0 eDsKKysJdV9pbnQgaTsKKysKKysJaWYgKGdzc2FwaV9jbGllbnQuY3JlZHMgPT0gR1NTX0NfTk9f Q1JFREVOVElBTCkgeworKwkJZGVidWdfZigibm8gcHJveHkgY3JlZGVudGlhbCBhdmFpbGFibGUi KTsKKysJCXJldHVybjsKKysJfQorKwlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwgPT0g TlVMTCkgeworKwkJZGVidWdfZigibm8gY2NhY2hlIHBhdGggc2V0OyBjYW5ub3Qgc3RvcmUgcHJv eHkgdGlja2V0cyIpOworKwkJcmV0dXJuOworKwl9CisrCisrCWRlYnVnX2YoInN0YXJ0aW5nIFM0 VTJQcm94eSBhcyB1aWQ9JXUgZXVpZD0ldSwgJXUgc2VydmljZShzKSwgY2NhY2hlPSVzIiwKKysJ ICAgICh1bnNpZ25lZClnZXR1aWQoKSwgKHVuc2lnbmVkKWdldGV1aWQoKSwgbnNlcnZpY2VzLAor KwkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwpOworKworKwkvKiBQb2ludCB0aGUgR1NT QVBJIGxpYnJhcnkgYXQgdGhlIHVzZXIncyBjY2FjaGUgZm9yIHRpY2tldCBzdG9yYWdlICovCisr CXNldGVudigiS1JCNUNDTkFNRSIsIGdzc2FwaV9jbGllbnQuc3RvcmUuZW52dmFsLCAxKTsKKysK KysJZm9yIChpID0gMDsgaSA8IG5zZXJ2aWNlczsgaSsrKSB7CisrCQljdHggPSBHU1NfQ19OT19D T05URVhUOworKwkJdGFyZ2V0X25hbWUgPSBHU1NfQ19OT19OQU1FOworKworKwkJc2VydmljZV9i dWYudmFsdWUgPSBzZXJ2aWNlc1tpXTsKKysJCXNlcnZpY2VfYnVmLmxlbmd0aCA9IHN0cmxlbihz ZXJ2aWNlc1tpXSk7CisrCisrCQkvKgorKwkJICogR1NTX0NfTk9fT0lEOiBsZXQgdGhlIGxpYnJh cnkgZGV0ZXJtaW5lIHRoZSBuYW1lIHR5cGUuCisrCQkgKiBXaXRoIEtlcmJlcm9zIGFzIHRoZSBh Y3RpdmUgbWVjaGFuaXNtLCBhIGZ1bGx5LXF1YWxpZmllZAorKwkJICogcHJpbmNpcGFsIGxpa2Ug InN2Yy9ob3N0QFJFQUxNIiBpcyBwYXJzZWQgY29ycmVjdGx5LgorKwkJICovCisrCQltYWpvciA9 IGdzc19pbXBvcnRfbmFtZSgmbWlub3IsICZzZXJ2aWNlX2J1ZiwKKysJCSAgICBHU1NfQ19OT19P SUQsICZ0YXJnZXRfbmFtZSk7CisrCQlpZiAoR1NTX0VSUk9SKG1ham9yKSkgeworKwkJCWxvZ2l0 X2YoImdzc19pbXBvcnRfbmFtZSBmYWlsZWQgZm9yICUuMjAwcyIsCisrCQkJICAgIHNlcnZpY2Vz W2ldKTsKKysJCQlsb2dfZ3NzX2Vycm9yKG1ham9yLCBtaW5vciwgIlM0VTJQcm94eTogZ3NzX2lt cG9ydF9uYW1lIik7CisrCQkJY29udGludWU7CisgCQl9CisrCQlkZWJ1Z19nc3NfbmFtZSgidGFy Z2V0IHNlcnZpY2UgbmFtZSBwYXJzZWQgYXMiLCB0YXJnZXRfbmFtZSk7CisrCisrCQlkZWJ1Z19m KCJjYWxsaW5nIGdzc19pbml0X3NlY19jb250ZXh0IGZvciAlLjIwMHMiLCBzZXJ2aWNlc1tpXSk7 CisrCQltYWpvciA9IGdzc19pbml0X3NlY19jb250ZXh0KCZtaW5vciwKKysJCSAgICBnc3NhcGlf Y2xpZW50LmNyZWRzLAkJLyogcHJveHkgY3JlZGVudGlhbCAqLworKwkJICAgICZjdHgsIHRhcmdl dF9uYW1lLAorKwkJICAgIEdTU19DX05PX09JRCwJCQkvKiBkZWZhdWx0IG1lY2ggKEtlcmJlcm9z KSAqLworKwkJICAgIDAsCQkJCQkvKiBubyBmbGFncywgbm8gbXV0dWFsIGF1dGggKi8KKysJCSAg ICBsaWZldGltZSwKKysJCSAgICBHU1NfQ19OT19DSEFOTkVMX0JJTkRJTkdTLAorKwkJICAgIEdT U19DX05PX0JVRkZFUiwJCQkvKiBubyBpbnB1dCB0b2tlbiAqLworKwkJICAgIE5VTEwsCQkJCS8q IGFjdHVhbF9tZWNoX3R5cGUgKi8KKysJCSAgICAmb3V0cHV0X3Rva2VuLAorKwkJICAgIE5VTEws CQkJCS8qIHJldF9mbGFncyAqLworKwkJICAgIE5VTEwpOwkJCQkvKiB0aW1lX3JlYyAqLworKwor KwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vciwgJm91dHB1dF90b2tlbik7CisrCQlnc3NfcmVs ZWFzZV9uYW1lKCZtaW5vciwgJnRhcmdldF9uYW1lKTsKKysJCWlmIChjdHggIT0gR1NTX0NfTk9f Q09OVEVYVCkKKysJCQlnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZtaW5vciwgJmN0eCwgR1NTX0Nf Tk9fQlVGRkVSKTsKKysKKysJCWlmIChHU1NfRVJST1IobWFqb3IpKSB7CisrCQkJbG9naXRfZigi UzRVMlByb3h5IGZvciAlLjIwMHMgb24gYmVoYWxmIG9mICUuMjAwcyBmYWlsZWQiLAorKwkJCSAg ICBzZXJ2aWNlc1tpXSwKKysJCQkgICAgKGNoYXIgKilnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1l LnZhbHVlKTsKKysJCQlsb2dfZ3NzX2Vycm9yKG1ham9yLCBtaW5vciwKKysJCQkgICAgIlM0VTJQ cm94eTogZ3NzX2luaXRfc2VjX2NvbnRleHQiKTsKKysJCX0gZWxzZQorKwkJCWRlYnVnX2YoIlM0 VTJQcm94eSB0aWNrZXQgb2J0YWluZWQgZm9yICUuMjAwcyIsCisrCQkJICAgIHNlcnZpY2VzW2ld KTsKKyAJfQorKworKwkvKgorKwkgKiBGbHVzaCBhbGwgcHJveHkgc2VydmljZSB0aWNrZXRzIGZy b20gdGhlIGNyZWRlbnRpYWwncyBpbnRlcm5hbAorKwkgKiBjY2FjaGUgaW50byB0aGUgS1JCNUND TkFNRSBjY2FjaGUgdmlhIGdzc19zdG9yZV9jcmVkKCkuCisrCSAqLworKwltYWpvciA9IGdzc19z dG9yZV9jcmVkKCZtaW5vciwgZ3NzYXBpX2NsaWVudC5jcmVkcywgR1NTX0NfSU5JVElBVEUsCisr CSAgICBHU1NfQ19OT19PSUQsIDEgLyogb3ZlcndyaXRlX2NyZWQgKi8sIDEgLyogZGVmYXVsdF9j cmVkICovLAorKwkgICAgTlVMTCwgTlVMTCk7CisrCWlmIChHU1NfRVJST1IobWFqb3IpKSB7Cisr CQlsb2dpdF9mKCJnc3Nfc3RvcmVfY3JlZCBmYWlsZWQ7IHByb3h5IHRpY2tldHMgbWF5IGJlIG1p c3NpbmciKTsKKysJCWxvZ19nc3NfZXJyb3IobWFqb3IsIG1pbm9yLCAiUzRVMlByb3h5OiBnc3Nf c3RvcmVfY3JlZCIpOworKwl9CisrCisrCXVuc2V0ZW52KCJLUkI1Q0NOQU1FIik7CisrfQorKwor KyNpZm5kZWYgS1JCNQorKy8qIEFzIHVzZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhpdDsgZnVsbCBp bXBsZW1lbnRhdGlvbiBpbiBnc3Mtc2Vydi1rcmI1LmMgKi8KKyt2b2lkCisrc3NoX2dzc2FwaV9j bGVhbnVwX2NyZWRzKHZvaWQpCisreworK30KKysKKysvKgorKyAqIEZpbHRlciB0aGUgdXNlcidz IGNjYWNoZTsgZnVsbCBpbXBsZW1lbnRhdGlvbiBpbiBnc3Mtc2Vydi1rcmI1LmMuCisrICovCisr dm9pZAorK3NzaF9nc3NhcGlfa3JiNV9maWx0ZXJfY2NhY2hlKHVfaW50IGRyb3BfZmxhZ3MsCisr ICAgIGNoYXIgKipwcm94eV9zZXJ2aWNlcywgdV9pbnQgbnByb3h5X3NlcnZpY2VzKQorK3sKKyB9 CisrI2VuZGlmIC8qICFLUkI1ICovCisgCisgLyogQXMgdXNlciAqLworIGludAorZGlmZiAtLWdp dCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCitpbmRleCA4NzQ2YTI0MTcuLjY2NzQ2ODU5MCAx MDA2NDQKKy0tLSBhL3NlcnZjb25mLmMKKysrKyBiL3NlcnZjb25mLmMKK0BAIC0xNDk4LDYgKzE0 OTgsNDMgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAq b3B0aW9ucywgY2hhciAqbGluZSwKKyAJCWlmIChvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyA9PSBO VUxMKQorIAkJCW9wdGlvbnMtPmdzc19pbmRpY2F0b3JzID0geHN0cmR1cChhcmcpOworIAkJYnJl YWs7CisrCisrCWNhc2Ugc0dTU0FQSUFsbG93UzRVMlNlbGY6CisrCQlhcmcgPSBhcmd2X25leHQo JmFjLCAmYXYpOworKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQorKwkJCWZhdGFsKCIlcyBs aW5lICVkOiAlcyBtaXNzaW5nIGFyZ3VtZW50LiIsCisrCQkJICAgIGZpbGVuYW1lLCBsaW5lbnVt LCBrZXl3b3JkKTsKKysJCWlmIChzdHJjYXNlY21wKGFyZywgIm5vIikgPT0gMCkKKysJCQl2YWx1 ZSA9IDA7CisrCQllbHNlIGlmIChzdHJjYXNlY21wKGFyZywgInllcyIpID09IDApCisrCQkJdmFs dWUgPSBJTlRfTUFYOworKwkJZWxzZSBpZiAoKHZhbHVlID0gY29udnRpbWUoYXJnKSkgPD0gMCkK KysJCQlmYXRhbCgiJXMgbGluZSAlZDogaW52YWxpZCAlcyB2YWx1ZSBcIiVzXCIuIiwKKysJCQkg ICAgZmlsZW5hbWUsIGxpbmVudW0sIGtleXdvcmQsIGFyZyk7CisrCQlpZiAoKmFjdGl2ZXAgJiYg b3B0aW9ucy0+Z3NzX2FsbG93X3M0dTJzZWxmID09IC0xKQorKwkJCW9wdGlvbnMtPmdzc19hbGxv d19zNHUyc2VsZiA9IHZhbHVlOworKwkJYnJlYWs7CisrCisrCWNhc2Ugc0dTU0FQSVByb3h5UzRV MlNlcnZpY2VzOgorKwkJd2hpbGUgKChhcmcgPSBhcmd2X25leHQoJmFjLCAmYXYpKSAhPSBOVUxM KSB7CisrCQkJaWYgKCphcmcgPT0gJ1wwJykKKysJCQkJZmF0YWwoIiVzIGxpbmUgJWQ6ICVzIG1p c3NpbmcgYXJndW1lbnQuIiwKKysJCQkJICAgIGZpbGVuYW1lLCBsaW5lbnVtLCBrZXl3b3JkKTsK KysJCQlpZiAoc3RyY2FzZWNtcChhcmcsICJub25lIikgPT0gMCkgeworKwkJCQlmb3IgKGkgPSAw OyBpIDwgb3B0aW9ucy0+bnVtX2dzc19wcm94eV9zZXJ2aWNlczsgaSsrKQorKwkJCQkJZnJlZShv cHRpb25zLT5nc3NfcHJveHlfc2VydmljZXNbaV0pOworKwkJCQlmcmVlKG9wdGlvbnMtPmdzc19w cm94eV9zZXJ2aWNlcyk7CisrCQkJCW9wdGlvbnMtPmdzc19wcm94eV9zZXJ2aWNlcyA9IE5VTEw7 CisrCQkJCW9wdGlvbnMtPm51bV9nc3NfcHJveHlfc2VydmljZXMgPSAwOworKwkJCQlicmVhazsK KysJCQl9CisrCQkJaWYgKCEqYWN0aXZlcCkKKysJCQkJY29udGludWU7CisrCQkJb3B0X2FycmF5 X2FwcGVuZChmaWxlbmFtZSwgbGluZW51bSwga2V5d29yZCwKKysJCQkgICAgJm9wdGlvbnMtPmdz c19wcm94eV9zZXJ2aWNlcywKKysJCQkgICAgJm9wdGlvbnMtPm51bV9nc3NfcHJveHlfc2Vydmlj ZXMsIGFyZyk7CisrCQl9CisrCQlicmVhazsKKyAjZW5kaWYgLyogR1NTQVBJICovCisgCisgCWNh c2Ugc1Bhc3N3b3JkQXV0aGVudGljYXRpb246CitAQCAtNDI5MCw2ICs0MzI3LDE1IEBAIGR1bXBf Y29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCisgCWR1bXBfY2ZnX2ZtdGludChzR1NTQVBJU3RvcmVD cmVkZW50aWFsc09uUmVrZXksIG8tPmdzc19zdG9yZV9yZWtleSk7CisgCWR1bXBfY2ZnX3N0cmlu ZyhzR1NTQVBJS2V4QWxnb3JpdGhtcywgby0+Z3NzX2tleF9hbGdvcml0aG1zKTsKKyAJZHVtcF9j Zmdfc3RyaW5nKHNHU1NBUElJbmRpY2F0b3JzLCBvLT5nc3NfaW5kaWNhdG9ycyk7CisrCWlmIChv LT5nc3NfYWxsb3dfczR1MnNlbGYgPT0gMCkKKysJCXByaW50ZigiJXMgbm9cbiIsIGxvb2t1cF9v cGNvZGVfbmFtZShzR1NTQVBJQWxsb3dTNFUyU2VsZikpOworKwllbHNlIGlmIChvLT5nc3NfYWxs b3dfczR1MnNlbGYgPT0gSU5UX01BWCkKKysJCXByaW50ZigiJXMgeWVzXG4iLCBsb29rdXBfb3Bj b2RlX25hbWUoc0dTU0FQSUFsbG93UzRVMlNlbGYpKTsKKysJZWxzZQorKwkJcHJpbnRmKCIlcyAl ZFxuIiwgbG9va3VwX29wY29kZV9uYW1lKHNHU1NBUElBbGxvd1M0VTJTZWxmKSwKKysJCSAgICBv LT5nc3NfYWxsb3dfczR1MnNlbGYpOworKwlkdW1wX2NmZ19zdHJhcnJheV9vbmVsaW5lKHNHU1NB UElQcm94eVM0VTJTZXJ2aWNlcywKKysJICAgIG8tPm51bV9nc3NfcHJveHlfc2VydmljZXMsIG8t Pmdzc19wcm94eV9zZXJ2aWNlcyk7CisgI2VuZGlmCisgCWR1bXBfY2ZnX2ZtdGludChzUGFzc3dv cmRBdXRoZW50aWNhdGlvbiwgby0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24pOworIAlkdW1wX2Nm Z19mbXRpbnQoc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24sCitkaWZmIC0tZ2l0IGEvc2Vy dmNvbmYuaCBiL3NlcnZjb25mLmgKK2luZGV4IDRlNWY3ZWRjNi4uOWVlNGEwODlkIDEwMDY0NAor LS0tIGEvc2VydmNvbmYuaAorKysrIGIvc2VydmNvbmYuaAorQEAgLTMyOSw3ICszMjksOSBAQCBT U0hDT05GX0lOVEZMQUcoZ3NzX2tleWV4LCBHU1NBUElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JB TCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORQorIFNTSENPTkZfSU5URkxBRyhnc3Nfc3RvcmVfcmVrZXks IEdTU0FQSVN0b3JlQ3JlZGVudGlhbHNPblJla2V5LCBTU0hDRkdfR0xPQkFMLCAwLCBTU0hDRkdf Q09QWV9OT05FKSBcCisgU1NIQ09ORl9TVFJJTkcoZ3NzX2tleF9hbGdvcml0aG1zLCBHU1NBUElL ZXhBbGdvcml0aG1zLCBTU0hDRkdfR0xPQkFMLCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NIQ09O Rl9JTlRGTEFHKGVuYWJsZV9rNXVzZXJzLCBHU1NBUElFbmFibGVrNXVzZXJzLCBTU0hDRkdfQUxM LCAwLCBTU0hDRkdfQ09QWV9NQVRDSCkgXAorLVNTSENPTkZfU1RSSU5HKGdzc19pbmRpY2F0b3Jz LCBHU1NBUElJbmRpY2F0b3JzLCBTU0hDRkdfQUxMLCBTU0hDRkdfQ09QWV9NQVRDSCkKKytTU0hD T05GX1NUUklORyhnc3NfaW5kaWNhdG9ycywgR1NTQVBJSW5kaWNhdG9ycywgU1NIQ0ZHX0FMTCwg U1NIQ0ZHX0NPUFlfTUFUQ0gpIFwKKytTU0hDT05GX0lOVEZMQUcoZ3NzX2FsbG93X3M0dTJzZWxm LCBHU1NBUElBbGxvd1M0VTJTZWxmLCBTU0hDRkdfQUxMLCAwLCBTU0hDRkdfQ09QWV9NQVRDSCkg XAorK1NTSENPTkZfU1RSQVJSQVkoZ3NzX3Byb3h5X3NlcnZpY2VzLCBudW1fZ3NzX3Byb3h5X3Nl cnZpY2VzLCBHU1NBUElQcm94eVM0VTJTZXJ2aWNlcywgU1NIQ0ZHX0FMTCwgU1NIQ0ZHX0NPUFlf TUFUQ0gpCisgI2Vsc2UgLyogR1NTQVBJICovCisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVT X0dTUyBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2F1dGhlbnRpY2F0aW9uLCBHU1NB UElBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCkgXAorQEAgLTM0MCw3ICszNDIsOSBAQCBTU0hD T05GX1VOU1VQUE9SVEVEX0lOVChnc3Nfa2V5ZXgsIEdTU0FQSUtleUV4Y2hhbmdlLCBTU0hDRkdf R0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX3N0b3JlX3Jla2V5LCBHU1NB UElTdG9yZUNyZWRlbnRpYWxzT25SZWtleSwgU1NIQ0ZHX0dMT0JBTCkgXAorIFNTSENPTkZfVU5T VVBQT1JURURfU1RSSU5HKGdzc19rZXhfYWxnb3JpdGhtcywgR1NTQVBJS2V4QWxnb3JpdGhtcywg U1NIQ0ZHX0dMT0JBTCkgXAorIFNTSENPTkZfVU5TVVBQT1JURURfSU5UKGVuYWJsZV9rNXVzZXJz LCBHU1NBUElFbmFibGVrNXVzZXJzLCBTU0hDRkdfQUxMKSBcCistU1NIQ09ORl9VTlNVUFBPUlRF RF9TVFJJTkcoZ3NzX2luZGljYXRvcnMsIEdTU0FQSUluZGljYXRvcnMsIFNTSENGR19BTEwpCisr U1NIQ09ORl9VTlNVUFBPUlRFRF9TVFJJTkcoZ3NzX2luZGljYXRvcnMsIEdTU0FQSUluZGljYXRv cnMsIFNTSENGR19BTEwpIFwKKytTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3NfYWxsb3dfczR1 MnNlbGYsIEdTU0FQSUFsbG93UzRVMlNlbGYsIFNTSENGR19BTEwpIFwKKytTU0hDT05GX1VOU1VQ UE9SVEVEX1NUUklORyhnc3NfcHJveHlfc2VydmljZXMsIEdTU0FQSVByb3h5UzRVMlNlcnZpY2Vz LCBTU0hDRkdfQUxMKQorICNlbmRpZiAvKiBHU1NBUEkgKi8KKyAKKyAjZGVmaW5lIFNTSERfQ09O RklHX0VOVFJJRVMgXAorZGlmZiAtLWdpdCBhL3NzaC1nc3MuaCBiL3NzaC1nc3MuaAoraW5kZXgg MTUwNjcxOWE5Li5hMGQ1MWM5YmUgMTAwNjQ0CistLS0gYS9zc2gtZ3NzLmgKKysrKyBiL3NzaC1n c3MuaAorQEAgLTExOSw2ICsxMTksNyBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCWludCB1c2VkOwor IAlpbnQgdXBkYXRlZDsKKyAJY2hhciAqKmluZGljYXRvcnM7IC8qIGF1dGggaW5kaWNhdG9ycyAq LworKwlpbnQgYWxsb3dfc2VsZjsgLyogYWxsb3cgcHJvdG9jb2wgdHJhbnNpdGlvbiAqLworIH0g c3NoX2dzc2FwaV9jbGllbnQ7CisgCisgdHlwZWRlZiBzdHJ1Y3Qgc3NoX2dzc2FwaV9tZWNoX3N0 cnVjdCB7CitAQCAtMTk5LDYgKzIwMCwxOCBAQCBPTV91aW50MzIgc3NoX2dzc2FwaV9jaGVja21p YyhHc3NjdHh0ICosIGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90KTsKKyB2b2lkIHNzaF9nc3Nh cGlfZG9fY2hpbGQoY2hhciAqKiosIHVfaW50ICopOworIHZvaWQgc3NoX2dzc2FwaV9jbGVhbnVw X2NyZWRzKHZvaWQpOworIGludCBzc2hfZ3NzYXBpX3N0b3JlY3JlZHModm9pZCk7CisraW50ICBz c2hfZ3NzYXBpX2NyZWRlbnRpYWxzX3N0b3JlZCh2b2lkKTsKKytzc2hfZ3NzYXBpX2NjYWNoZSAq c3NoX2dzc2FwaV9nZXRfY2NhY2hlKHZvaWQpOworK2ludCAgc3NoX2dzc2FwaV91c2VyX2hhc192 YWxpZF90Z3QodV9pbnQpOworK2ludCAgc3NoX2dzc2FwaV91c2VyX2hhc192YWxpZF9wcm94eV90 aWNrZXRzKGNoYXIgKiosIHVfaW50LCB1X2ludCk7CisraW50ICBzc2hfZ3NzYXBpX3M0dTJzZWxm KGNvbnN0IGNoYXIgKiwgdV9pbnQpOworK3ZvaWQgc3NoX2dzc2FwaV9zdG9yZWNyZWRzX3M0dTJz ZWxmKHZvaWQpOworK3ZvaWQgc3NoX2dzc2FwaV9zNHUycHJveHkoY2hhciAqKiwgdV9pbnQsIHVf aW50KTsKKysvKiBGbGFncyBmb3Igc3NoX2dzc2FwaV9rcmI1X2ZpbHRlcl9jY2FjaGUoKTogd2hp Y2ggdGlja2V0IGNsYXNzZXMgdG8gcmVtb3ZlICovCisrI2RlZmluZSBTU0hfR1NTQVBJX0NDRklM VEVSX1RHVCAgICAoMXUgPDwgMCkgLyoga3JidGd0Ly4uLiBlbnRyaWVzICovCisrI2RlZmluZSBT U0hfR1NTQVBJX0NDRklMVEVSX1NFTEYgICAoMXUgPDwgMSkgLyogUzRVMlNlbGYgZXZpZGVuY2Ug dGlja2V0ICovCisrI2RlZmluZSBTU0hfR1NTQVBJX0NDRklMVEVSX1BST1hZICAoMXUgPDwgMikg LyogUzRVMlByb3h5IHNlcnZpY2UgdGlja2V0cyAqLworK3ZvaWQgc3NoX2dzc2FwaV9rcmI1X2Zp bHRlcl9jY2FjaGUodV9pbnQsIGNoYXIgKiosIHVfaW50KTsKKyBjb25zdCBjaGFyICpzc2hfZ3Nz YXBpX2Rpc3BsYXluYW1lKHZvaWQpOworIAorIGNoYXIgKnNzaF9nc3NhcGlfc2VydmVyX21lY2hh bmlzbXModm9pZCk7CitkaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24u YworaW5kZXggYWRmNWIxYjQ5Li43ZDBlMjVjYTEgMTAwNjQ0CistLS0gYS9zc2hkLXNlc3Npb24u YworKysrIGIvc3NoZC1zZXNzaW9uLmMKK0BAIC0xMzk2LDYgKzEzOTYsMTA0IEBAIG1haW4oaW50 IGFjLCBjaGFyICoqYXYpCisgCQlhdXRoY3R4dC0+a3JiNV9zZXRfZW52ID0gc3NoX2dzc2FwaV9z dG9yZWNyZWRzKCk7CisgCQlyZXN0b3JlX3VpZCgpOworIAl9CisrCS8qCisrCSAqIEdTU0FQSUFs bG93UzRVMlNlbGYgLyBHU1NBUElQcm94eVM0VTJTZXJ2aWNlczogaWYgbm8gY3JlZGVudGlhbHMg d2VyZSBzdG9yZWQKKysJICogYWJvdmUgKGkuZS4gbm8gR1NTQVBJIGF1dGggd2l0aCBkZWxlZ2F0 aW9uIG9jY3VycmVkKSwgdXNlIFM0VTJTZWxmCisrCSAqIHRvIG9idGFpbiBhbiBpbXBlcnNvbmF0 ZWQgY3JlZGVudGlhbCBmb3IgdGhlIHVzZXIsIHRoZW4gb3B0aW9uYWxseQorKwkgKiBmb2xsb3cg d2l0aCBTNFUyUHJveHkgZm9yIGNvbmZpZ3VyZWQgdGFyZ2V0IHNlcnZpY2VzLgorKwkgKgorKwkg KiBHU1NBUElBbGxvd1M0VTJTZWxmIGFsb25lOiAgICBzdG9yZSBTNFUyU2VsZiBldmlkZW5jZSB0 aWNrZXQgb25seTsKKysJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGhvc3QgVEdU IGlzIHJlbW92ZWQuCisrCSAqIEdTU0FQSVByb3h5UzRVMlNlcnZpY2VzIGFsb25lOiBzdG9yZSBo b3N0IFRHVCBhbmQgUzRVMlByb3h5IHNlcnZpY2UKKysJICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlja2V0czsgdGhlIFM0VTJTZWxmIGV2aWRlbmNlIHRpY2tldAorKwkgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpcyByZW1vdmVkLgorKwkgKiBCb3RoOiAgICAgICAgICAgICAg ICAgICAgIHN0b3JlIGhvc3QgVEdULCBTNFUyU2VsZiBldmlkZW5jZSB0aWNrZXQsCisrCSAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbGwgUzRVMlByb3h5IHNlcnZpY2UgdGlja2V0 cy4KKysJICoKKysJICogV2hlbiBTNFUyUHJveHkgdGlja2V0cyBhcmUgcHJlc2VudCB0aGUgaG9z dCBUR1QgbXVzdCByZW1haW4gaW4gdGhlCisrCSAqIGNjYWNoZTsgYXBwbGljYXRpb25zIGNoZWNr IGZvciBUR1QgcHJlc2VuY2UgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKysJICogS2VyYmVyb3MgY3Jl ZGVudGlhbHMgYXJlIGF2YWlsYWJsZS4gIE9ubHkgaW4gR1NTQVBJQWxsb3dTNFUyU2VsZi1hbG9u ZQorKwkgKiBtb2RlIChubyBwcm94eSB0aWNrZXRzKSBpcyB0aGUgaG9zdCBUR1QgcmVtb3ZlZC4K KysJICoKKysJICogU2tpcCBTNFUyU2VsZiB3aGVuIHRoZSB1c2VyIGFscmVhZHkgaGFzIGNyZWRl bnRpYWxzIGNvdmVyaW5nIHRoZQorKwkgKiByZXF1ZXN0ZWQgbGlmZXRpbWU6IGNoZWNrIGZvciBh IHZhbGlkIFRHVCBpbiB0aGUgR1NTQVBJQWxsb3dTNFUyU2VsZi0KKysJICogYWxvbmUgY2FzZSwg b3IgZm9yIHZhbGlkIHByb3h5IHRpY2tldHMgZm9yIGV2ZXJ5IGNvbmZpZ3VyZWQgc2VydmljZQor KwkgKiBvdGhlcndpc2UuCisrCSAqLworKwlpZiAoKG9wdGlvbnMuZ3NzX2FsbG93X3M0dTJzZWxm IHx8IG9wdGlvbnMubnVtX2dzc19wcm94eV9zZXJ2aWNlcyA+IDApICYmCisrCSAgICAhc3NoX2dz c2FwaV9jcmVkZW50aWFsc19zdG9yZWQoKSkgeworKwkJdV9pbnQgbGlmZXRpbWUgPSAoIW9wdGlv bnMuZ3NzX2FsbG93X3M0dTJzZWxmIHx8CisrCQkgICAgb3B0aW9ucy5nc3NfYWxsb3dfczR1MnNl bGYgPT0gSU5UX01BWCkgPworKwkJICAgIEdTU19DX0lOREVGSU5JVEUgOiAodV9pbnQpb3B0aW9u cy5nc3NfYWxsb3dfczR1MnNlbGY7CisrCQlpbnQgc2tpcCA9IDA7CisrCisrCQl0ZW1wb3Jhcmls eV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7CisrCQlpZiAob3B0aW9ucy5nc3NfYWxsb3dfczR1MnNl bGYgJiYKKysJCSAgICBvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPT0gMCkgeworKwkJ CS8qIFM0VTJTZWxmLWFsb25lOiBza2lwIGlmIHVzZXIgYWxyZWFkeSBoYXMgYSB2YWxpZCBUR1Qg Ki8KKysJCQlza2lwID0gc3NoX2dzc2FwaV91c2VyX2hhc192YWxpZF90Z3QobGlmZXRpbWUpOwor KwkJfSBlbHNlIGlmIChvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPiAwKSB7CisrCQkJ LyoKKysJCQkgKiBQcm94eS1vbmx5IG9yIGJvdGg6IHNraXAgaWYgZXZlcnkgY29uZmlndXJlZCBz ZXJ2aWNlCisrCQkJICogYWxyZWFkeSBoYXMgYSB2YWxpZCB0aWNrZXQgaW4gdGhlIHVzZXIncyBj Y2FjaGUuCisrCQkJICogU2VydmljZSB0aWNrZXRzIGFyZSBub3QgR1NTQVBJIGluaXRpYXRvciBj cmVkZW50aWFscywKKysJCQkgKiBzbyBnc3NfYWNxdWlyZV9jcmVkKCkgY2Fubm90IGJlIHVzZWQ7 IGl0ZXJhdGUgdGhlCisrCQkJICogY2NhY2hlIHdpdGggdGhlIGtyYjUgQVBJIGluc3RlYWQuCisr CQkJICovCisrCQkJc2tpcCA9IHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfcHJveHlfdGlja2V0 cygKKysJCQkgICAgb3B0aW9ucy5nc3NfcHJveHlfc2VydmljZXMsCisrCQkJICAgIG9wdGlvbnMu bnVtX2dzc19wcm94eV9zZXJ2aWNlcywKKysJCQkgICAgbGlmZXRpbWUpOworKwkJfQorKwkJcmVz dG9yZV91aWQoKTsKKysKKysJCWlmIChza2lwKSB7CisrCQkJZGVidWdfZigidXNlciAlLjEwMHMg YWxyZWFkeSBoYXMgdmFsaWQgS2VyYmVyb3MgIgorKwkJCSAgICAiY3JlZGVudGlhbHMsIHNraXBw aW5nIFM0VTJTZWxmIiwKKysJCQkgICAgYXV0aGN0eHQtPnVzZXIpOworKwkJfSBlbHNlIGlmIChz c2hfZ3NzYXBpX3M0dTJzZWxmKGF1dGhjdHh0LT51c2VyLCBsaWZldGltZSkgPT0gMCkgeworKwkJ CXVfaW50IGZpbHRlcjsKKysKKysJCQl0ZW1wb3JhcmlseV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7 CisrCQkJLyoKKysJCQkgKiBBbHdheXMgY3JlYXRlIHRoZSBjY2FjaGUgdmlhIHN0b3JlY3JlZHNf czR1MnNlbGYgc28KKysJCQkgKiB0aGF0IHM0dTJwcm94eSBoYXMgYSBjY2FjaGUgdG8gc3RvcmUg dGlja2V0cyBpbnRvLgorKwkJCSAqIGdzc19rcmI1X2NvcHlfY2NhY2hlKCkgY29waWVzIHRoZSBo b3N0IHNlcnZpY2UncyBvd24KKysJCQkgKiBUR1QgYWxvbmcgd2l0aCB0aGUgZXZpZGVuY2UgdGlj a2V0OyBmaWx0ZXJfY2NhY2hlCisrCQkJICogcmVtb3ZlcyB0aGUgdGlja2V0IGNsYXNzZXMgdGhh dCBzaG91bGQgbm90IGJlIGtlcHQuCisrCQkJICovCisrCQkJc3NoX2dzc2FwaV9zdG9yZWNyZWRz X3M0dTJzZWxmKCk7CisrCQkJaWYgKG9wdGlvbnMubnVtX2dzc19wcm94eV9zZXJ2aWNlcyA+IDAp CisrCQkJCXNzaF9nc3NhcGlfczR1MnByb3h5KAorKwkJCQkgICAgb3B0aW9ucy5nc3NfcHJveHlf c2VydmljZXMsCisrCQkJCSAgICBvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMsCisrCQkJ CSAgICBsaWZldGltZSk7CisrCisrCQkJLyoKKysJCQkgKiBSZW1vdmUgdGhlIGhvc3QgVEdUIG9u bHkgaW4gR1NTQVBJQWxsb3dTNFUyU2VsZi1hbG9uZQorKwkJCSAqIG1vZGU7IHdoZW4gcHJveHkg dGlja2V0cyBhcmUgcHJlc2VudCB0aGUgVEdUIG11c3QKKysJCQkgKiBzdGF5IHNvIHRoYXQgYXBw bGljYXRpb25zIHJlY29nbmlzZSB0aGUgY2NhY2hlIGFzCisrCQkJICogaG9sZGluZyBsaXZlIEtl cmJlcm9zIGNyZWRlbnRpYWxzLgorKwkJCSAqIFJlbW92ZSB0aGUgUzRVMlNlbGYgZXZpZGVuY2Ug dGlja2V0IGluIHByb3h5LW9ubHkKKysJCQkgKiBtb2RlIChHU1NBUElQcm94eVM0VTJTZXJ2aWNl cyB3aXRob3V0IEdTU0FQSUFsbG93UzRVMlNlbGYpLgorKwkJCSAqLworKwkJCWZpbHRlciA9IDA7 CisrCQkJaWYgKG9wdGlvbnMuZ3NzX2FsbG93X3M0dTJzZWxmICYmCisrCQkJICAgIG9wdGlvbnMu bnVtX2dzc19wcm94eV9zZXJ2aWNlcyA9PSAwKQorKwkJCQlmaWx0ZXIgPSBTU0hfR1NTQVBJX0ND RklMVEVSX1RHVCB8CisrCQkJCSAgICBTU0hfR1NTQVBJX0NDRklMVEVSX1BST1hZOworKwkJCWVs c2UgaWYgKCFvcHRpb25zLmdzc19hbGxvd19zNHUyc2VsZikKKysJCQkJZmlsdGVyID0gU1NIX0dT U0FQSV9DQ0ZJTFRFUl9TRUxGOworKwkJCWlmIChmaWx0ZXIgIT0gMCkKKysJCQkJc3NoX2dzc2Fw aV9rcmI1X2ZpbHRlcl9jY2FjaGUoZmlsdGVyLAorKwkJCQkgICAgb3B0aW9ucy5nc3NfcHJveHlf c2VydmljZXMsCisrCQkJCSAgICBvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMpOworKwkJ CXJlc3RvcmVfdWlkKCk7CisrCQl9IGVsc2UgeworKwkJCWxvZ2l0KCJTNFUyU2VsZiBmYWlsZWQg Zm9yIHVzZXIgJS4xMDBzLCBjb250aW51aW5nIiwKKysJCQkgICAgYXV0aGN0eHQtPnVzZXIpOwor KwkJfQorKwl9CisgI2VuZGlmCisgI2lmZGVmIFdJVEhfU0VMSU5VWAorIAlzc2hkX3NlbGludXhf c2V0dXBfZXhlY19jb250ZXh0KGF1dGhjdHh0LT5wdy0+cHdfbmFtZSwKK2RpZmYgLS1naXQgYS9z c2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQoraW5kZXggYmY5ZWZjODk3Li5jYThhODEzMWUg MTAwNjQ0CistLS0gYS9zc2hkX2NvbmZpZy41CisrKysgYi9zc2hkX2NvbmZpZy41CitAQCAtODU3 LDYgKzg1Nyw3NiBAQCBGSURPMi1iYXNlZCBwcmUtYXV0aGVudGljYXRpb24gaW4gRnJlZUlQQSwg dXNpbmcgRklETzIgVVNCIGFuZCBORkMgdG9rZW5zCisgVGhlIGRlZmF1bHQKKyAuRHEgbm9uZQor IGlzIHRvIG5vdCB1c2UgR1NTQVBJIGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMgZm9yIGFjY2Vz cyBkZWNpc2lvbnMuCisrLkl0IENtIEdTU0FQSUFsbG93UzRVMlNlbGYKKytDb250cm9scyB3aGV0 aGVyIHRoZSBTU0ggc2VydmVyIHBlcmZvcm1zIGEgS2VyYmVyb3MgcHJvdG9jb2wgdHJhbnNpdGlv bgorKyhTNFUyU2VsZikgYWZ0ZXIgYSBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uIHVzaW5nIGFu eSBvdGhlciBtZXRob2QuCisrQWNjZXB0ZWQgdmFsdWVzIGFyZQorKy5DbSBubyAsCisrLkNtIHll cyAsCisrb3IgYSB0aW1lIGludGVydmFsIChzZWUKKysuU3ggVElNRSBGT1JNQVRTCisrYmVsb3cp LgorKy5DbSBubworK2Rpc2FibGVzIFM0VTJTZWxmIGVudGlyZWx5LgorKy5DbSB5ZXMKKytlbmFi bGVzIFM0VTJTZWxmIGFuZCByZXF1ZXN0cyBhIHRpY2tldCB3aXRoIHRoZSBtYXhpbXVtIGxpZmV0 aW1lCisrcGVybWl0dGVkIGJ5IHRoZSBLREMuCisrQSB0aW1lIGludGVydmFsIChlLmcuXCYKKysu Q20gOGggLAorKy5DbSAxZCApCisrZW5hYmxlcyBTNFUyU2VsZiBhbmQgcmVxdWVzdHMgYSB0aWNr ZXQgdmFsaWQgZm9yIGF0IG1vc3QgdGhhdCBkdXJhdGlvbi4KKytUaGUgb3B0aW9uIGlzIGEgbm8t b3Agd2hlbiBkZWxlZ2F0ZWQgR1NTQVBJIGNyZWRlbnRpYWxzIGFyZSBhbHJlYWR5IGF2YWlsYWJs ZS4KKytUaGUgb2J0YWluZWQgc2VydmljZSB0aWNrZXQgaXMgc3RvcmVkIGluIHRoZSBkZWZhdWx0 IGNyZWRlbnRpYWxzIGNhY2hlIGFuZCBpcworK2FjY2Vzc2libGUgdG8gYW55IGFwcGxpY2F0aW9u IHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgS2VyYmVyb3MgaG9zdCBwcmluY2lwYWwKKysuUHEgaG9z dC9tYWNoaW5lLmZxZG5AUkVBTE0KKytjcmVkZW50aWFscyBvbiB0aGUgc2FtZSBob3N0LgorKy5Q cAorK1RoZSBkZWZhdWx0IGlzCisrLkNtIG5vIC4KKysuSXQgQ20gR1NTQVBJUHJveHlTNFUyU2Vy dmljZXMKKytTcGVjaWZpZXMgYSBsaXN0IG9mIEtlcmJlcm9zIHNlcnZpY2UgcHJpbmNpcGFscyBm b3Igd2hpY2ggY29uc3RyYWluZWQKKytkZWxlZ2F0aW9uIChTNFUyUHJveHkpIHRpY2tldHMgc2hv dWxkIGJlIG9idGFpbmVkIGFmdGVyIGEgc3VjY2Vzc2Z1bAorK1M0VTJTZWxmIHByb3RvY29sIHRy YW5zaXRpb24uCisrRWFjaCBlbnRyeSBtdXN0IGJlIGEgZnVsbHktcXVhbGlmaWVkIEtlcmJlcm9z IHByaW5jaXBhbCBuYW1lIG9mIHRoZSBmb3JtCisrLkFyIHNlcnZpY2UvaG9zdEBSRUFMTSAuCisr TXVsdGlwbGUgcHJpbmNpcGFscyBtYXkgYmUgbGlzdGVkLCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFj ZS4KKytUaGUga2V5d29yZAorKy5DbSBub25lCisrY2xlYXJzIGFueSBwcmV2aW91c2x5IHNldCBs aXN0LgorKy5QcAorK1RoaXMgb3B0aW9uIG1heSBiZSB1c2VkIGluZGVwZW5kZW50bHkgb2YKKysu Q20gR1NTQVBJQWxsb3dTNFUyU2VsZiAuCisrV2hlbiBTNFUyU2VsZiBzdWNjZWVkcywgdGhlIHNl cnZlciBpdGVyYXRlcyB0aGUgbGlzdCBhbmQgY2FsbHMKKysuWHIgZ3NzX2luaXRfc2VjX2NvbnRl eHQgMworK2ZvciBlYWNoIHByaW5jaXBhbCB3aXRoIHRoZSBwcm94eSBjcmVkZW50aWFsIG9idGFp bmVkIGJ5IFM0VTJTZWxmIGFzCisrdGhlIGluaXRpYXRvci4KKytUaGUgR1NTQVBJIGxpYnJhcnkg cHJlc2VudHMgdGhlIGV2aWRlbmNlIHRpY2tldCB0byB0aGUgS0RDIHZpYSBhbgorK1M0VTJQcm94 eSBUR1MtUkVROyBpZiB0aGUgaG9zdCBzZXJ2aWNlIGhvbGRzIHRoZSBuZWNlc3NhcnkgY29uc3Ry YWluZWQtCisrZGVsZWdhdGlvbiBwZXJtaXNzaW9uIGluIHRoZSBLREMsIGEgc2VydmljZSB0aWNr ZXQgZnJvbSB0aGUgdXNlciB0bworK3RoZSB0YXJnZXQgc2VydmljZSBpcyBpc3N1ZWQuCisrVGhl c2UgdGlja2V0cyBhcmUgYWNjdW11bGF0ZWQgYW5kIHRoZW4gZmx1c2hlZCBpbnRvIHRoZSB1c2Vy J3MgY2NhY2hlCisrdmlhCisrLlhyIGdzc19zdG9yZV9jcmVkIDMgLAorK3NvIHRoYXQgYW55IGFw cGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlIHVzZXIncyBzZXNzaW9uIGNhbiB1c2UgdGhlbQorK3dp dGhvdXQgZnVydGhlciBpbnRlcmFjdGlvbi4KKytUaGUgQVAtUkVRIG91dHB1dCB0b2tlbiBvZiBl YWNoCisrLlhyIGdzc19pbml0X3NlY19jb250ZXh0IDMKKytjYWxsIGlzIGRpc2NhcmRlZDsgbm8g bmV0d29yayBjb25uZWN0aW9uIHRvIHRoZSB0YXJnZXQgc2VydmljZSBpcyBtYWRlLgorKy5QcAor K1doZW4gdXNlZCB0b2dldGhlciB3aXRoCisrLkNtIEdTU0FQSUFsbG93UzRVMlNlbGYgLAorK3Ro ZSBUR1QgYW5kIFM0VTJTZWxmIHRpY2tldCBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlIHVzZXIncyBj Y2FjaGUgaW4KKythZGRpdGlvbiB0byB0aGUgUzRVMlByb3h5IHNlcnZpY2UgdGlja2V0cy4KKytX aGVuIHVzZWQgYWxvbmUgKHdpdGhvdXQKKysuQ20gR1NTQVBJQWxsb3dTNFUyU2VsZiApICwKKytv bmx5IHRoZSBTNFUyUHJveHkgc2VydmljZSB0aWNrZXRzIGFyZSBzdG9yZWQ7IHRoZSBpbnRlcm1l ZGlhdGUgUzRVMlNlbGYKKytjcmVkZW50aWFsIGlzIG5vdCBwbGFjZWQgaW4gdGhlIHVzZXIncyBj Y2FjaGUuCisrLlBwCisrVGhpcyBvcHRpb24gc3VwcG9ydHMKKysuQ20gTWF0Y2gKKytibG9ja3Ms IGFsbG93aW5nIHBlci11c2VyIG9yIHBlci1ob3N0IGxpc3RzIG9mIGRlbGVnYXRpb24gdGFyZ2V0 cy4KKysuUHAKKytUaGUgZGVmYXVsdCBpcyBlbXB0eSAobm8gUzRVMlByb3h5IGRlbGVnYXRpb24g aXMgcGVyZm9ybWVkKS4KKyAuSXQgQ20gSG9zdGJhc2VkQWNjZXB0ZWRBbGdvcml0aG1zCisgVGhl IGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQorIC5YciBjcnlwdG8tcG9saWNpZXMg NyAuCistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMDA1MS1vcGVuc3NoLTEwLjJwMS1wYW0t YXV0aC5wYXRjaCBiLzAwNTEtb3BlbnNzaC0xMC4ycDEtcGFtLWF1dGgucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjhhZjMuLjAwMDAwMDAKLS0tIGEvMDA1MS1vcGVuc3No LTEwLjJwMS1wYW0tYXV0aC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLUZy b20gMDRjMTMzOTIyODBkMTgzOWIxOWNmZTZlNGRiYTQ4ZGIzYThhOGU3NyBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4K LURhdGU6IFN1biwgMTIgQXByIDIwMjYgMTI6MjU6MDQgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA1 MS81NF0gb3BlbnNzaC0xMC4ycDEtcGFtLWF1dGgKLQotaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQu Y29tL3Nob3dfYnVnLmNnaT9pZD0yNDIzOTAwCi0KLUNvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29u bmV0IDQuNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgotLS0tCi0gYXV0aC1wYW0uYyB8IDEwICsr KysrLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygt KQotCi1kaWZmIC0tZ2l0IGEvYXV0aC1wYW0uYyBiL2F1dGgtcGFtLmMKLWluZGV4IGQzZGNkMDM3 Yi4uYWFhZDE2NzY1IDEwMDY0NAotLS0tIGEvYXV0aC1wYW0uYwotKysrIGIvYXV0aC1wYW0uYwot QEAgLTQ1NSw2ICs0NTUsNyBAQCBzdGF0aWMgaW50Ci0gY2hlY2tfcGFtX3VzZXIoQXV0aGN0eHQg KmF1dGhjdHh0KQotIHsKLSAJY29uc3QgY2hhciAqcGFtX3VzZXI7Ci0rCWNvbnN0IHN0cnVjdCBw YXNzd2QgKnBhbV9wdzsKLSAKLSAJaWYgKGF1dGhjdHh0ID09IE5VTEwgfHwgYXV0aGN0eHQtPnB3 ID09IE5VTEwgfHwKLSAJICAgIGF1dGhjdHh0LT5wdy0+cHdfbmFtZSA9PSBOVUxMKQotQEAgLTQ2 OSwxMSArNDcwLDEwIEBAIGNoZWNrX3BhbV91c2VyKEF1dGhjdHh0ICphdXRoY3R4dCkKLSAJCXJl dHVybiBQQU1fVVNFUl9VTktOT1dOOwotIAl9Ci0gCi0tCWlmIChzc2hwYW1faW5pdGlhbF91c2Vy ID09IE5VTEwpCi0tCQlmYXRhbF9mKCJpbnRlcm5hbCBlcnJvcjogc3NocGFtX2luaXRpYWxfdXNl ciBOVUxMIik7Ci0tCWlmIChzdHJjbXAoc3NocGFtX2luaXRpYWxfdXNlciwgcGFtX3VzZXIpICE9 IDApIHsKLS0JCWVycm9yX2YoIlBBTSB1c2VyIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91 cyBcIiVzXCIiLAotLQkJICAgICAgcGFtX3VzZXIsIHNzaHBhbV9pbml0aWFsX3VzZXIpOwotKwlw YW1fcHcgPSBnZXRwd25hbShwYW1fdXNlcik7Ci0rCWlmIChwYW1fcHcgPT0gTlVMTCB8fCBwYW1f cHctPnB3X3VpZCAhPSBhdXRoY3R4dC0+cHctPnB3X3VpZCkgewotKwkJZGVidWcoIlBBTSB1c2Vy IFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBcIiVzXCIiLAotKwkJICAgICAgcGFtX3Vz ZXIsIGF1dGhjdHh0LT5wdy0+cHdfbmFtZSk7Ci0gCQlyZXR1cm4gUEFNX1VTRVJfVU5LTk9XTjsK LSAJfQotIAlyZXR1cm4gUEFNX1NVQ0NFU1M7Ci0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEv MDA1Mi1nc3NhcGktczR1LnBhdGNoIGIvMDA1Mi1nc3NhcGktczR1LnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA4YjNiMmMyLi4wMDAwMDAwCi0tLSBhLzAwNTItZ3NzYXBpLXM0 dS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNzcgKzAsMCBAQAotRnJvbSBmNjI5YmViMGZi MDk0ZmZlYTgzMjc2OTlhOTQyYmEzYzE4MGY1ZTA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQot RnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogU3VuLCAx MiBBcHIgMjAyNiAxMjoyNToyMSArMDIwMAotU3ViamVjdDogW1BBVENIIDUyLzU0XSBnc3NhcGkt czR1Ci0KLUNvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9yZXBseUBhbnRocm9w aWMuY29tPgotLS0tCi0gYXV0aC1rcmI1LmMgICAgIHwgIDEzICsrCi0gY29uZmlndXJlLmFjICAg IHwgIDEwICstCi0gZ3NzLXNlcnYta3JiNS5jIHwgMjI1ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysKLSBnc3Mtc2Vydi5jICAgICAgfCAzODggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tCi0gc2VydmNvbmYuYyAgICAgIHwgIDU4ICsrKysrKysrCi0g c2VydmNvbmYuaCAgICAgIHwgICA0ICsKLSBzc2gtZ3NzLmggICAgICAgfCAgMTMgKysKLSBzc2hk LXNlc3Npb24uYyAgfCAgOTggKysrKysrKysrKysrCi0gc3NoZF9jb25maWcuNSAgIHwgIDcwICsr KysrKysrKwotIDkgZmlsZXMgY2hhbmdlZCwgODYxIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9u cygtKQotCi1kaWZmIC0tZ2l0IGEvYXV0aC1rcmI1LmMgYi9hdXRoLWtyYjUuYwotaW5kZXggMjg3 YmRkMzVhLi43ZDRmYmNjM2QgMTAwNjQ0Ci0tLS0gYS9hdXRoLWtyYjUuYwotKysrIGIvYXV0aC1r cmI1LmMKLUBAIC00NjMsNiArNDYzLDE5IEBAIHNzaF9rcmI1X2NjX25ld191bmlxdWUoa3JiNV9j b250ZXh0IGN0eCwga3JiNV9jY2FjaGUgKmNjYWNoZSwgaW50ICpuZWVkX2Vudmlyb25tCi0gCSAq IGEgcHJpbWFyeSBjYWNoZSBmb3IgdGhpcyBjb2xsZWN0aW9uLCBpZiBpdCBzdXBwb3J0cyB0aGF0 IChub24tRklMRSkKLSAJICovCi0gCWlmIChrcmI1X2NjX3N1cHBvcnRfc3dpdGNoKGN0eCwgdHlw ZSkpIHsKLSsJCS8qCi0rCQkgKiBGb3IgY29sbGVjdGlvbi10eXBlIGNhY2hlcyAoS0NNLCBLRVlS SU5HLCDigKYpIHJldXNlIHRoZQotKwkJICogZXhpc3RpbmcgcHJpbWFyeSBjY2FjaGUgd2hlbiBv bmUgaXMgYWxyZWFkeSBwcmVzZW50LiAgVGhlCi0rCQkgKiBjYWxsZXIgd2lsbCByZWluaXRpYWxp c2UgaXQgd2l0aCBrcmI1X2NjX2luaXRpYWxpemUoKSwgc28KLSsJCSAqIGl0cyBvbGQgY29udGVu dHMgYXJlIHJlcGxhY2VkIHJhdGhlciB0aGFuIG9ycGhhbmVkLiAgT25seQotKwkJICogY3JlYXRl IGEgZnJlc2ggdW5pcXVlIGNjYWNoZSB3aGVuIG5vIHByaW1hcnkgZXhpc3RzIHlldC4KLSsJCSAq LwotKwkJaWYgKGtyYjVfY2NfZGVmYXVsdChjdHgsIGNjYWNoZSkgPT0gMCkgewotKwkJCWRlYnVn M19mKCJyZXVzaW5nIGV4aXN0aW5nIGRlZmF1bHQgY2NhY2hlIG9mIHR5cGUgJXMiLAotKwkJCSAg ICB0eXBlKTsKLSsJCQlmcmVlKHR5cGUpOwotKwkJCXJldHVybiAwOwotKwkJfQotIAkJZGVidWcz X2YoImNhbGxpbmcgY2NfbmV3X3VuaXF1ZSglcykiLCBjY25hbWUpOwotIAkJcmV0ID0ga3JiNV9j Y19uZXdfdW5pcXVlKGN0eCwgdHlwZSwgTlVMTCwgY2NhY2hlKTsKLSAJCWZyZWUodHlwZSk7Ci1k aWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAxMzg4ZTVlNzIu LjYyYjJiZjllNyAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFj Ci1AQCAtNTE0NSwxMSArNTE0NSwxNyBAQCBBQ19BUkdfV0lUSChba2VyYmVyb3M1XSwKLSAjIGlu Y2x1ZGUgPGdzc2FwaV9nZW5lcmljLmg+Ci0gI2VsaWYgZGVmaW5lZChIQVZFX0dTU0FQSV9HU1NB UElfR0VORVJJQ19IKQotICMgaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9nZW5lcmljLmg+Ci0rI2Vu ZGlmCi0rI2lmZGVmIEhBVkVfR1NTQVBJX0VYVF9ICi0rIyBpbmNsdWRlIDxnc3NhcGkvZ3NzYXBp X2V4dC5oPgotKyNlbmRpZgotKyNpZmRlZiBIQVZFX0dTU0FQSV9LUkI1X0gKLSsjIGluY2x1ZGUg PGdzc2FwaS9nc3NhcGlfa3JiNS5oPgotICNlbmRpZgotIAkJXV0pCi0gCQlzYXZlZF9MSUJTPSIk TElCUyIKLS0JCUxJQlM9IiRMSUJTICRLNUxJQlMiCi0tCQlBQ19DSEVDS19GVU5DUyhba3JiNV9j Y19uZXdfdW5pcXVlIGtyYjVfZ2V0X2Vycm9yX21lc3NhZ2Uga3JiNV9mcmVlX2Vycm9yX21lc3Nh Z2VdKQotKwkJTElCUz0iJExJQlMgJEdTU0xJQlMgJEs1TElCUyAiCi0rCQlBQ19DSEVDS19GVU5D Uyhba3JiNV9jY19uZXdfdW5pcXVlIGtyYjVfZ2V0X2Vycm9yX21lc3NhZ2Uga3JiNV9mcmVlX2Vy cm9yX21lc3NhZ2UgZ3NzX2FjcXVpcmVfY3JlZF9mcm9tXSkKLSAJCUxJQlM9IiRzYXZlZF9MSUJT IgotIAotIAlmaQotZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LWtyYjUuYyBiL2dzcy1zZXJ2LWtyYjUu YwotaW5kZXggZmM3Y2FiYzA5Li4wNmQ0NTBkNGQgMTAwNjQ0Ci0tLS0gYS9nc3Mtc2Vydi1rcmI1 LmMKLSsrKyBiL2dzcy1zZXJ2LWtyYjUuYwotQEAgLTYwOSw2ICs2MDksMjMxIEBAIHNzaF9nc3Nh cGlfa3JiNV91cGRhdGVjcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsCi0gCXJldHVybiAx OwotIH0KLSAKLSsvKgotKyAqIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIncyBkZWZhdWx0IGNjYWNo ZSBhbHJlYWR5IGNvbnRhaW5zIHZhbGlkIHNlcnZpY2UKLSsgKiB0aWNrZXRzIGZvciBhbGwgcHJp bmNpcGFscyBsaXN0ZWQgaW4gc2VydmljZXNbXS4gIFJldHVybnMgMSBpZiBldmVyeQotKyAqIGxp c3RlZCBzZXJ2aWNlIGhhcyBhIHRpY2tldCB3aXRoIGF0IGxlYXN0IG1pbl9saWZldGltZSBzZWNv bmRzIHJlbWFpbmluZwotKyAqIChwYXNzIEdTU19DX0lOREVGSU5JVEUgdG8gYWNjZXB0IGFueSBw b3NpdGl2ZSByZW1haW5pbmcgbGlmZXRpbWUpLCAwIGlmCi0rICogYW55IHRpY2tldCBpcyBtaXNz aW5nIG9yIHRvbyBjbG9zZSB0byBleHBpcnkuICBSdW5zIGFzIHRoZSB1c2VyLgotKyAqCi0rICog VW5saWtlIHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfdGd0KCksIHRoaXMgY2Fubm90IHVzZSBn c3NfYWNxdWlyZV9jcmVkKCkKLSsgKiBiZWNhdXNlIHNlcnZpY2UgdGlja2V0cyBhcmUgbm90IGlu aXRpYXRvciBjcmVkZW50aWFscyDigJQgR1NTQVBJIG9ubHkKLSsgKiBzdXJmYWNlcyBUR1RzIHZp YSB0aGF0IEFQSS4gIFdlIGl0ZXJhdGUgdGhlIGNjYWNoZSB3aXRoIHRoZSBrcmI1IEFQSQotKyAq IGRpcmVjdGx5IGluc3RlYWQuCi0rICovCi0raW50Ci0rc3NoX2dzc2FwaV91c2VyX2hhc192YWxp ZF9wcm94eV90aWNrZXRzKGNoYXIgKipzZXJ2aWNlcywgdV9pbnQgbnNlcnZpY2VzLAotKyAgICB1 X2ludCBtaW5fbGlmZXRpbWUpCi0rewotKwlrcmI1X2NvbnRleHQgY3R4ID0gTlVMTDsKLSsJa3Ji NV9jY2FjaGUgY2MgPSBOVUxMOwotKwlrcmI1X2NjX2N1cnNvciBjdXJzb3I7Ci0rCWtyYjVfY3Jl ZHMgY3JlZDsKLSsJa3JiNV9wcmluY2lwYWwgc3ZjX3ByaW5jOwotKwlpbnQgKmZvdW5kID0gTlVM TDsKLSsJdV9pbnQgaTsKLSsJaW50IGFsbF9mb3VuZCA9IDA7Ci0rCXRpbWVfdCBub3c7Ci0rCi0r CWlmIChuc2VydmljZXMgPT0gMCkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoa3JiNV9pbml0X2Nv bnRleHQoJmN0eCkgIT0gMCkKLSsJCXJldHVybiAwOwotKwotKwlmb3VuZCA9IHhjYWxsb2MobnNl cnZpY2VzLCBzaXplb2YoKmZvdW5kKSk7Ci0rCW5vdyA9IHRpbWUoTlVMTCk7Ci0rCi0rCWlmIChr cmI1X2NjX2RlZmF1bHQoY3R4LCAmY2MpICE9IDApCi0rCQlnb3RvIG91dDsKLSsKLSsJaWYgKGty YjVfY2Nfc3RhcnRfc2VxX2dldChjdHgsIGNjLCAmY3Vyc29yKSAhPSAwKSB7Ci0rCQlrcmI1X2Nj X2Nsb3NlKGN0eCwgY2MpOwotKwkJY2MgPSBOVUxMOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsKLSsJ d2hpbGUgKGtyYjVfY2NfbmV4dF9jcmVkKGN0eCwgY2MsICZjdXJzb3IsICZjcmVkKSA9PSAwKSB7 Ci0rCQkvKgotKwkJICogVXNlIGtyYjVfcHJpbmNpcGFsX2NvbXBhcmUoKSBzbyB0aGF0IHNlcnZp Y2UgbmFtZXMKLSsJCSAqIGNvbmZpZ3VyZWQgd2l0aG91dCBhbiBleHBsaWNpdCByZWFsbSAoa3Ji NV9wYXJzZV9uYW1lCi0rCQkgKiBhcHBlbmRzIHRoZSBkZWZhdWx0IHJlYWxtKSBzdGlsbCBtYXRj aCB0aGUgZnVsbHktCi0rCQkgKiBxdWFsaWZpZWQgcHJpbmNpcGFsIHN0b3JlZCBpbiB0aGUgY2Nh Y2hlLgotKwkJICovCi0rCQlmb3IgKGkgPSAwOyBpIDwgbnNlcnZpY2VzOyBpKyspIHsKLSsJCQlp ZiAoZm91bmRbaV0pCi0rCQkJCWNvbnRpbnVlOwotKwkJCWlmIChrcmI1X3BhcnNlX25hbWUoY3R4 LCBzZXJ2aWNlc1tpXSwKLSsJCQkgICAgJnN2Y19wcmluYykgIT0gMCkKLSsJCQkJY29udGludWU7 Ci0rCQkJaWYgKGtyYjVfcHJpbmNpcGFsX2NvbXBhcmUoY3R4LAotKwkJCSAgICBjcmVkLnNlcnZl ciwgc3ZjX3ByaW5jKSkgewotKwkJCQlrcmI1X2RlbHRhdCByZW1haW5pbmcgPQotKwkJCQkgICAg Y3JlZC50aW1lcy5lbmR0aW1lIC0gbm93OwotKwkJCQlpZiAocmVtYWluaW5nID4gMCAmJgotKwkJ CQkgICAgKG1pbl9saWZldGltZSA9PSBHU1NfQ19JTkRFRklOSVRFIHx8Ci0rCQkJCSAgICAgKGty YjVfZGVsdGF0KW1pbl9saWZldGltZSA8PSByZW1haW5pbmcpKQotKwkJCQkJZm91bmRbaV0gPSAx OwotKwkJCX0KLSsJCQlrcmI1X2ZyZWVfcHJpbmNpcGFsKGN0eCwgc3ZjX3ByaW5jKTsKLSsJCX0K LSsJCWtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGN0eCwgJmNyZWQpOwotKwl9Ci0rCWtyYjVfY2Nf ZW5kX3NlcV9nZXQoY3R4LCBjYywgJmN1cnNvcik7Ci0rCWtyYjVfY2NfY2xvc2UoY3R4LCBjYyk7 Ci0rCWNjID0gTlVMTDsKLSsKLSsJYWxsX2ZvdW5kID0gMTsKLSsJZm9yIChpID0gMDsgaSA8IG5z ZXJ2aWNlczsgaSsrKSB7Ci0rCQlpZiAoIWZvdW5kW2ldKSB7Ci0rCQkJYWxsX2ZvdW5kID0gMDsK LSsJCQlicmVhazsKLSsJCX0KLSsJfQotK291dDoKLSsJZnJlZShmb3VuZCk7Ci0rCWlmIChjdHgg IT0gTlVMTCkKLSsJCWtyYjVfZnJlZV9jb250ZXh0KGN0eCk7Ci0rCXJldHVybiBhbGxfZm91bmQ7 Ci0rfQotKwotKy8qIEFzIHVzZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhpdCAqLwotK3ZvaWQKLStz c2hfZ3NzYXBpX2NsZWFudXBfY3JlZHModm9pZCkKLSt7Ci0rCXNzaF9nc3NhcGlfY2NhY2hlICpz dG9yZSA9IHNzaF9nc3NhcGlfZ2V0X2NjYWNoZSgpOwotKwlrcmI1X2NjYWNoZSBjY2FjaGUgPSBO VUxMOwotKwlrcmI1X2Vycm9yX2NvZGUgcHJvYmxlbTsKLSsKLSsJaWYgKHN0b3JlLT5kYXRhICE9 IE5VTEwpIHsKLSsJCWlmICgocHJvYmxlbSA9IGtyYjVfY2NfcmVzb2x2ZShzdG9yZS0+ZGF0YSwK LSsJCSAgICBzdG9yZS0+ZW52dmFsLCAmY2NhY2hlKSkpIHsKLSsJCQlkZWJ1Z19mKCJrcmI1X2Nj X3Jlc29sdmUoKTogJS4xMDBzIiwKLSsJCQkgICAga3JiNV9nZXRfZXJyX3RleHQoc3RvcmUtPmRh dGEsIHByb2JsZW0pKTsKLSsJCX0gZWxzZSBpZiAoKHByb2JsZW0gPSBrcmI1X2NjX2Rlc3Ryb3ko c3RvcmUtPmRhdGEsIGNjYWNoZSkpKSB7Ci0rCQkJZGVidWdfZigia3JiNV9jY19kZXN0cm95KCk6 ICUuMTAwcyIsCi0rCQkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KHN0b3JlLT5kYXRhLCBwcm9ibGVt KSk7Ci0rCQl9IGVsc2UgewotKwkJCWtyYjVfZnJlZV9jb250ZXh0KHN0b3JlLT5kYXRhKTsKLSsJ CQlzdG9yZS0+ZGF0YSA9IE5VTEw7Ci0rCQl9Ci0rCX0KLSt9Ci0rCi0rLyoKLSsgKiBGaWx0ZXIg dGhlIHVzZXIncyBjY2FjaGUgYnkgcmVtb3ZpbmcgdGhlIHRpY2tldCBjbGFzc2VzIGluZGljYXRl ZCBieQotKyAqIGRyb3BfZmxhZ3MgKFNTSF9HU1NBUElfQ0NGSUxURVJfKiBiaXRtYXNrKS4gIEVh Y2ggY3JlZGVudGlhbCBpcwotKyAqIGNhdGVnb3Jpc2VkIGFzIG9uZSBvZjoKLSsgKiAgIFRHVCAg IC0gc2VydmVyIHByaW5jaXBhbCBtYXRjaGVzICJrcmJ0Z3QvIiBwcmVmaXgKLSsgKiAgIFBST1hZ IC0gc2VydmVyIHByaW5jaXBhbCBtYXRjaGVzIG9uZSBvZiBwcm94eV9zZXJ2aWNlc1tdCi0rICog ICBTRUxGICAtIGV2ZXJ5dGhpbmcgZWxzZSAodGhlIFM0VTJTZWxmIGV2aWRlbmNlIHRpY2tldCkK LSsgKiBDcmVkZW50aWFscyBpbiBhIGZsYWdnZWQgY2F0ZWdvcnkgYXJlIGRpc2NhcmRlZDsgdGhl IHJlc3QgYXJlIHdyaXR0ZW4KLSsgKiBiYWNrIGFmdGVyIHJlaW5pdGlhbGlzaW5nIHRoZSBjY2Fj aGUuICBSdW5zIGFzIHVzZXIuCi0rICovCi0rdm9pZAotK3NzaF9nc3NhcGlfa3JiNV9maWx0ZXJf Y2NhY2hlKHVfaW50IGRyb3BfZmxhZ3MsCi0rICAgIGNoYXIgKipwcm94eV9zZXJ2aWNlcywgdV9p bnQgbnByb3h5X3NlcnZpY2VzKQotK3sKLSsJc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlID0gc3No X2dzc2FwaV9nZXRfY2NhY2hlKCk7Ci0rCWtyYjVfY29udGV4dCBjdHggPSAoa3JiNV9jb250ZXh0 KXN0b3JlLT5kYXRhOwotKwlrcmI1X2NjYWNoZSBjYyA9IE5VTEw7Ci0rCWtyYjVfY2NfY3Vyc29y IGN1cnNvcjsKLSsJa3JiNV9jcmVkcyAqa2VlcCA9IE5VTEw7Ci0rCWtyYjVfcHJpbmNpcGFsIHBy aW5jID0gTlVMTDsKLSsJa3JiNV9lcnJvcl9jb2RlIHByb2JsZW07Ci0rCWNoYXIgKnNydm5hbWU7 Ci0rCXVfaW50IGksIG5rZWVwID0gMCwgY2FwID0gMDsKLSsJaW50IGlzX3RndCwgaXNfcHJveHks IGRyb3A7Ci0rCi0rCWlmIChjdHggPT0gTlVMTCB8fCBzdG9yZS0+ZW52dmFsID09IE5VTEwpCi0r CQlyZXR1cm47Ci0rCi0rCWlmICgocHJvYmxlbSA9IGtyYjVfY2NfcmVzb2x2ZShjdHgsIHN0b3Jl LT5lbnZ2YWwsICZjYykpICE9IDApIHsKLSsJCWRlYnVnX2YoImtyYjVfY2NfcmVzb2x2ZTogJS4x MDBzIiwKLSsJCSAgICBrcmI1X2dldF9lcnJfdGV4dChjdHgsIHByb2JsZW0pKTsKLSsJCXJldHVy bjsKLSsJfQotKwlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoY3R4LCBjYywg JnByaW5jKSkgIT0gMCkgewotKwkJZGVidWdfZigia3JiNV9jY19nZXRfcHJpbmNpcGFsOiAlLjEw MHMiLAotKwkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KGN0eCwgcHJvYmxlbSkpOwotKwkJa3JiNV9j Y19jbG9zZShjdHgsIGNjKTsKLSsJCXJldHVybjsKLSsJfQotKwlpZiAoKHByb2JsZW0gPSBrcmI1 X2NjX3N0YXJ0X3NlcV9nZXQoY3R4LCBjYywgJmN1cnNvcikpICE9IDApIHsKLSsJCWRlYnVnX2Yo ImtyYjVfY2Nfc3RhcnRfc2VxX2dldDogJS4xMDBzIiwKLSsJCSAgICBrcmI1X2dldF9lcnJfdGV4 dChjdHgsIHByb2JsZW0pKTsKLSsJCWtyYjVfZnJlZV9wcmluY2lwYWwoY3R4LCBwcmluYyk7Ci0r CQlrcmI1X2NjX2Nsb3NlKGN0eCwgY2MpOwotKwkJcmV0dXJuOwotKwl9Ci0rCi0rCXsKLSsJCWty YjVfY3JlZHMgY3JlZDsKLSsJCWtyYjVfcHJpbmNpcGFsIHN2Y19wcmluYzsKLSsJCXdoaWxlIChr cmI1X2NjX25leHRfY3JlZChjdHgsIGNjLCAmY3Vyc29yLCAmY3JlZCkgPT0gMCkgewotKwkJCWlz X3RndCA9IGlzX3Byb3h5ID0gMDsKLSsJCQlpZiAoa3JiNV91bnBhcnNlX25hbWUoY3R4LCBjcmVk LnNlcnZlciwKLSsJCQkgICAgJnNydm5hbWUpID09IDApIHsKLSsJCQkJaXNfdGd0ID0gc3RybmNt cChzcnZuYW1lLCAia3JidGd0LyIsIDcpID09IDA7Ci0rCQkJCWtyYjVfZnJlZV91bnBhcnNlZF9u YW1lKGN0eCwgc3J2bmFtZSk7Ci0rCQkJfQotKwkJCWlmICghaXNfdGd0KSB7Ci0rCQkJCS8qCi0r CQkJCSAqIFVzZSBrcmI1X3ByaW5jaXBhbF9jb21wYXJlKCkgcmF0aGVyIHRoYW4KLSsJCQkJICog c3RyY21wKCkgc28gdGhhdCBhIHNlcnZpY2UgbmFtZSBjb25maWd1cmVkCi0rCQkJCSAqIHdpdGhv dXQgYW4gZXhwbGljaXQgcmVhbG0gKGtyYjVfcGFyc2VfbmFtZQotKwkJCQkgKiBhcHBlbmRzIHRo ZSBkZWZhdWx0IHJlYWxtKSBzdGlsbCBtYXRjaGVzCi0rCQkJCSAqIHRoZSBmdWxseS1xdWFsaWZp ZWQgbmFtZSBpbiB0aGUgY2NhY2hlLgotKwkJCQkgKi8KLSsJCQkJZm9yIChpID0gMDsgaSA8IG5w cm94eV9zZXJ2aWNlczsgaSsrKSB7Ci0rCQkJCQlpZiAoa3JiNV9wYXJzZV9uYW1lKGN0eCwKLSsJ CQkJCSAgICBwcm94eV9zZXJ2aWNlc1tpXSwgJnN2Y19wcmluYykgIT0gMCkKLSsJCQkJCQljb250 aW51ZTsKLSsJCQkJCWlmIChrcmI1X3ByaW5jaXBhbF9jb21wYXJlKGN0eCwKLSsJCQkJCSAgICBj cmVkLnNlcnZlciwgc3ZjX3ByaW5jKSkKLSsJCQkJCQlpc19wcm94eSA9IDE7Ci0rCQkJCQlrcmI1 X2ZyZWVfcHJpbmNpcGFsKGN0eCwgc3ZjX3ByaW5jKTsKLSsJCQkJCWlmIChpc19wcm94eSkKLSsJ CQkJCQlicmVhazsKLSsJCQkJfQotKwkJCX0KLSsJCQlpZiAoaXNfdGd0KQotKwkJCQlkcm9wID0g ZHJvcF9mbGFncyAmIFNTSF9HU1NBUElfQ0NGSUxURVJfVEdUOwotKwkJCWVsc2UgaWYgKGlzX3By b3h5KQotKwkJCQlkcm9wID0gZHJvcF9mbGFncyAmIFNTSF9HU1NBUElfQ0NGSUxURVJfUFJPWFk7 Ci0rCQkJZWxzZQotKwkJCQlkcm9wID0gZHJvcF9mbGFncyAmIFNTSF9HU1NBUElfQ0NGSUxURVJf U0VMRjsKLSsKLSsJCQlpZiAoIWRyb3ApIHsKLSsJCQkJaWYgKG5rZWVwID49IGNhcCkgewotKwkJ CQkJY2FwID0gY2FwID8gY2FwICogMiA6IDQ7Ci0rCQkJCQlrZWVwID0geHJlYWxsb2NhcnJheShr ZWVwLCBjYXAsCi0rCQkJCQkgICAgc2l6ZW9mKCprZWVwKSk7Ci0rCQkJCX0KLSsJCQkJa2VlcFtu a2VlcCsrXSA9IGNyZWQ7Ci0rCQkJfSBlbHNlCi0rCQkJCWtyYjVfZnJlZV9jcmVkX2NvbnRlbnRz KGN0eCwgJmNyZWQpOwotKwkJfQotKwl9Ci0rCWtyYjVfY2NfZW5kX3NlcV9nZXQoY3R4LCBjYywg JmN1cnNvcik7Ci0rCi0rCWlmICgocHJvYmxlbSA9IGtyYjVfY2NfaW5pdGlhbGl6ZShjdHgsIGNj LCBwcmluYykpICE9IDApIHsKLSsJCWxvZ2l0X2YoImtyYjVfY2NfaW5pdGlhbGl6ZTogJS4xMDBz IiwKLSsJCSAgICBrcmI1X2dldF9lcnJfdGV4dChjdHgsIHByb2JsZW0pKTsKLSsJfSBlbHNlIHsK LSsJCWZvciAoaSA9IDA7IGkgPCBua2VlcDsgaSsrKQotKwkJCWtyYjVfY2Nfc3RvcmVfY3JlZChj dHgsIGNjLCAma2VlcFtpXSk7Ci0rCQlkZWJ1Z19mKCJjY2FjaGUgZmlsdGVyIDB4JXg6IHJldGFp bmVkICV1IHRpY2tldChzKSIsCi0rCQkgICAgZHJvcF9mbGFncywgbmtlZXApOwotKwl9Ci0rCi0r CWZvciAoaSA9IDA7IGkgPCBua2VlcDsgaSsrKQotKwkJa3JiNV9mcmVlX2NyZWRfY29udGVudHMo Y3R4LCAma2VlcFtpXSk7Ci0rCWZyZWUoa2VlcCk7Ci0rCWtyYjVfZnJlZV9wcmluY2lwYWwoY3R4 LCBwcmluYyk7Ci0rCWtyYjVfY2NfY2xvc2UoY3R4LCBjYyk7Ci0rfQotKwotIHNzaF9nc3NhcGlf bWVjaCBnc3NhcGlfa2VyYmVyb3NfbWVjaCA9IHsKLSAJInRvV001U2x3NUV3OE1xa2F5K2FsMmc9 PSIsCi0gCSJLZXJiZXJvcyIsCi1kaWZmIC0tZ2l0IGEvZ3NzLXNlcnYuYyBiL2dzcy1zZXJ2LmMK LWluZGV4IDY4NmFjNGViMy4uMjZkMGExM2E2IDEwMDY0NAotLS0tIGEvZ3NzLXNlcnYuYwotKysr IGIvZ3NzLXNlcnYuYwotQEAgLTU1LDcgKzU1LDcgQEAgZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0 aW9uczsKLSAKLSBzdGF0aWMgc3NoX2dzc2FwaV9jbGllbnQgZ3NzYXBpX2NsaWVudCA9Ci0gICAg IHsgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19FTVBUWV9CVUZGRVIsIEdTU19DX05PX0NSRURF TlRJQUwsCi0tICAgIEdTU19DX05PX05BTUUsIE5VTEwsIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMfSwgMCwgMCwgTlVMTH07Ci0rICAgIEdTU19DX05PX05BTUUsIE5VTEwsIHtOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwgMCwgMCwgTlVMTCwgMH07Ci0gCi0gc3NoX2dzc2FwaV9t ZWNoIGdzc2FwaV9udWxsX21lY2ggPQotICAgICB7IE5VTEwsIE5VTEwsIHswLCBOVUxMfSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07Ci1AQCAtNDg4LDI2ICs0ODgsMzgyIEBAIHNzaF9n c3NhcGlfZ2V0Y2xpZW50KEdzc2N0eHQgKmN0eCwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkK LSAJcmV0dXJuIChjdHgtPm1ham9yKTsKLSB9Ci0gCi0tLyogQXMgdXNlciAtIGNhbGxlZCBvbiBm YXRhbC9leGl0ICovCi0rLyogUmV0dXJucyBub24temVybyBpZiBLZXJiZXJvcyBjcmVkZW50aWFs cyBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQuICovCi0raW50Ci0rc3NoX2dzc2FwaV9jcmVkZW50 aWFsc19zdG9yZWQodm9pZCkKLSt7Ci0rCXJldHVybiBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZh bCAhPSBOVUxMOwotK30KLSsKLSsvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3JlZGVudGlh bC1jYWNoZSBkZXNjcmlwdG9yIGZvciB0aGlzIHNlc3Npb24uICovCi0rc3NoX2dzc2FwaV9jY2Fj aGUgKgotK3NzaF9nc3NhcGlfZ2V0X2NjYWNoZSh2b2lkKQotK3sKLSsJcmV0dXJuICZnc3NhcGlf Y2xpZW50LnN0b3JlOwotK30KLSsKLSsvKiBMb2cgaHVtYW4tcmVhZGFibGUgR1NTQVBJIG1ham9y IGFuZCBtaW5vciBzdGF0dXMgc3RyaW5ncy4gKi8KLStzdGF0aWMgdm9pZAotK2xvZ19nc3NfZXJy b3IoT01fdWludDMyIG1ham9yLCBPTV91aW50MzIgbWlub3IsIGNvbnN0IGNoYXIgKmxhYmVsKQot K3sKLSsJT01fdWludDMyIGxtaW4sIG1jdHg7Ci0rCWdzc19idWZmZXJfZGVzYyBlbXNnID0gR1NT X0NfRU1QVFlfQlVGRkVSOwotKwotKwltY3R4ID0gMDsKLSsJZG8gewotKwkJZ3NzX2Rpc3BsYXlf c3RhdHVzKCZsbWluLCBtYWpvciwgR1NTX0NfR1NTX0NPREUsCi0rCQkgICAgR1NTX0NfTk9fT0lE LCAmbWN0eCwgJmVtc2cpOwotKwkJbG9naXQoIiVzOiAlLipzIiwgbGFiZWwsIChpbnQpZW1zZy5s ZW5ndGgsIChjaGFyICopZW1zZy52YWx1ZSk7Ci0rCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxtaW4s ICZlbXNnKTsKLSsJfSB3aGlsZSAobWN0eCAhPSAwKTsKLSsKLSsJbWN0eCA9IDA7Ci0rCWRvIHsK LSsJCWdzc19kaXNwbGF5X3N0YXR1cygmbG1pbiwgbWlub3IsIEdTU19DX01FQ0hfQ09ERSwKLSsJ CSAgICAmZ3NzYXBpX2tlcmJlcm9zX21lY2gub2lkLCAmbWN0eCwgJmVtc2cpOwotKwkJaWYgKGVt c2cubGVuZ3RoID4gMCkKLSsJCQlsb2dpdCgiJXM6ICUuKnMiLCBsYWJlbCwKLSsJCQkgICAgKGlu dCllbXNnLmxlbmd0aCwgKGNoYXIgKillbXNnLnZhbHVlKTsKLSsJCWdzc19yZWxlYXNlX2J1ZmZl cigmbG1pbiwgJmVtc2cpOwotKwl9IHdoaWxlIChtY3R4ICE9IDApOwotK30KLSsKLSsvKiBMb2cg dGhlIGNhbm9uaWNhbCBzdHJpbmcgZm9ybSBvZiBhIEdTU0FQSSBuYW1lIGFzIGEgZGVidWcgbWVz c2FnZS4gKi8KLStzdGF0aWMgdm9pZAotK2RlYnVnX2dzc19uYW1lKGNvbnN0IGNoYXIgKmxhYmVs LCBnc3NfbmFtZV90IG5hbWUpCi0rewotKwlPTV91aW50MzIgbG1pbjsKLSsJZ3NzX2J1ZmZlcl9k ZXNjIGJ1ZiA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsKLSsJaWYgKGdzc19kaXNwbGF5X25hbWUo JmxtaW4sIG5hbWUsICZidWYsIE5VTEwpID09IEdTU19TX0NPTVBMRVRFKSB7Ci0rCQlkZWJ1Z19m KCIlczogJS4qcyIsIGxhYmVsLCAoaW50KWJ1Zi5sZW5ndGgsIChjaGFyICopYnVmLnZhbHVlKTsK LSsJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmJ1Zik7Ci0rCX0KLSt9Ci0rCi0rLyoKLSsg KiBDaGVjayB3aGV0aGVyIHRoZSB1c2VyIGFscmVhZHkgaGFzIHZhbGlkIEdTU0FQSSBpbml0aWF0 b3IgY3JlZGVudGlhbHMKLSsgKiAoZS5nLiBhIEtlcmJlcm9zIFRHVCkgaW4gdGhlaXIgZGVmYXVs dCBjcmVkZW50aWFsIHN0b3JlIHdpdGggYXQgbGVhc3QKLSsgKiBtaW5fbGlmZXRpbWUgc2Vjb25k cyByZW1haW5pbmcuICBQYXNzIEdTU19DX0lOREVGSU5JVEUgdG8gYWNjZXB0IGFueQotKyAqIHBv c2l0aXZlIHJlbWFpbmluZyBsaWZldGltZS4gIFJ1bnMgYXMgdGhlIHVzZXIuCi0rICogUmV0dXJu cyAxIGlmIHN1ZmZpY2llbnQgY3JlZGVudGlhbHMgZXhpc3QsIDAgb3RoZXJ3aXNlLgotKyAqLwot K2ludAotK3NzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfdGd0KHVfaW50IG1pbl9saWZldGltZSkK LSt7Ci0rCU9NX3VpbnQzMiBtYWpvciwgbWlub3IsIGxpZmV0aW1lID0gMDsKLSsJZ3NzX2NyZWRf aWRfdCBjcmVkID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKLSsJaW50IGZvdW5kID0gMDsKLSsKLSsJ bWFqb3IgPSBnc3NfYWNxdWlyZV9jcmVkKCZtaW5vciwgR1NTX0NfTk9fTkFNRSwgR1NTX0NfSU5E RUZJTklURSwKLSsJICAgIEdTU19DX05PX09JRF9TRVQsIEdTU19DX0lOSVRJQVRFLCAmY3JlZCwg TlVMTCwgJmxpZmV0aW1lKTsKLSsJaWYgKCFHU1NfRVJST1IobWFqb3IpICYmIGxpZmV0aW1lID4g MCAmJgotKwkgICAgKG1pbl9saWZldGltZSA9PSBHU1NfQ19JTkRFRklOSVRFIHx8IGxpZmV0aW1l ID49IG1pbl9saWZldGltZSkpCi0rCQlmb3VuZCA9IDE7Ci0rCWlmIChjcmVkICE9IEdTU19DX05P X0NSRURFTlRJQUwpCi0rCQlnc3NfcmVsZWFzZV9jcmVkKCZtaW5vciwgJmNyZWQpOwotKwlyZXR1 cm4gZm91bmQ7Ci0rfQotKwotKwotKy8qCi0rICogUGVyZm9ybSBTNFUyU2VsZiAocHJvdG9jb2wg dHJhbnNpdGlvbik6IGFjcXVpcmUgYSBLZXJiZXJvcyBzZXJ2aWNlIHRpY2tldAotKyAqIGZvciB0 aGUgU1NIIHVzZXIgb24gYmVoYWxmIG9mIHRoZSBob3N0IHByaW5jaXBhbC4gIFJ1bnMgcHJpdmls ZWdlZC4KLSsgKiBQb3B1bGF0ZXMgZ3NzYXBpX2NsaWVudC57Y3JlZHMsbWVjaCxkaXNwbGF5bmFt ZSxleHBvcnRlZG5hbWV9IG9uIHN1Y2Nlc3MuCi0rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0x IG9uIGZhaWx1cmUuCi0rICovCi0rLyogUHJpdmlsZWdlZCAqLwotK2ludAotK3NzaF9nc3NhcGlf czR1MnNlbGYoY29uc3QgY2hhciAqdXNlciwgdV9pbnQgbGlmZXRpbWUpCi0rewotKwlPTV91aW50 MzIgbWFqb3IsIG1pbm9yLCBzdGF0dXM7Ci0rCWdzc19PSURfc2V0IG9pZHNldCA9IEdTU19DX05P X09JRF9TRVQ7Ci0rCWdzc19uYW1lX3QgaG9zdF9uYW1lID0gR1NTX0NfTk9fTkFNRTsKLSsJZ3Nz X25hbWVfdCB1c2VyX25hbWUgPSBHU1NfQ19OT19OQU1FOwotKwlnc3NfY3JlZF9pZF90IGhvc3Rf Y3JlZHMgPSBHU1NfQ19OT19DUkVERU5USUFMOwotKwlnc3NfY3JlZF9pZF90IGltcGVyc29uYXRl ZF9jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7Ci0rCWdzc19idWZmZXJfZGVzYyBnc3NidWYs IGRpc3BsYXluYW1lID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwljaGFyIGxuYW1lW05JX01BWEhP U1RdOwotKwljaGFyICp2YWw7Ci0rCi0rCWlmIChnZXRob3N0bmFtZShsbmFtZSwgc2l6ZW9mKGxu YW1lKSkgIT0gMCkgewotKwkJbG9naXRfZigiZ2V0aG9zdG5hbWU6ICVzIiwgc3RyZXJyb3IoZXJy bm8pKTsKLSsJCXJldHVybiAtMTsKLSsJfQotKwotKwkvKiBBY3F1aXJlIGFjY2VwdG9yIGNyZWRl bnRpYWwgZm9yIGhvc3QvIGZyb20gdGhlIGtleXRhYiAqLwotKwlnc3NfY3JlYXRlX2VtcHR5X29p ZF9zZXQoJnN0YXR1cywgJm9pZHNldCk7Ci0rCWdzc19hZGRfb2lkX3NldF9tZW1iZXIoJnN0YXR1 cywgJmdzc2FwaV9rZXJiZXJvc19tZWNoLm9pZCwgJm9pZHNldCk7Ci0rCi0rCXhhc3ByaW50Zigm dmFsLCAiaG9zdEAlcyIsIGxuYW1lKTsKLSsJZ3NzYnVmLnZhbHVlID0gdmFsOwotKwlnc3NidWYu bGVuZ3RoID0gc3RybGVuKHZhbCk7Ci0rCW1ham9yID0gZ3NzX2ltcG9ydF9uYW1lKCZtaW5vciwg Jmdzc2J1ZiwKLSsJICAgIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLCAmaG9zdF9uYW1lKTsK LSsJZnJlZSh2YWwpOwotKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgewotKwkJbG9naXRfZigiZ3Nz X2ltcG9ydF9uYW1lIChob3N0KSBmYWlsZWQiKTsKLSsJCWdzc19yZWxlYXNlX29pZF9zZXQoJnN0 YXR1cywgJm9pZHNldCk7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsJZGVidWdfZ3NzX25hbWUoImhv c3QgbmFtZSBwYXJzZWQgYXMiLCBob3N0X25hbWUpOwotKwotKwlkZWJ1Z19mKCJhY3F1aXJpbmcg aG9zdCBjcmVkZW50aWFscyBhcyB1aWQ9JXUgZXVpZD0ldSwgcHJpbmNpcGFsPWhvc3RAJXMiLAot KwkgICAgKHVuc2lnbmVkKWdldHVpZCgpLCAodW5zaWduZWQpZ2V0ZXVpZCgpLCBsbmFtZSk7Ci0r CSNpZmRlZiBIQVZFX0dTU19BQ1FVSVJFX0NSRURfRlJPTQotKwl7Ci0rIyBpZiBkZWZpbmVkKEtS QjUpCi0rCQkvKgotKwkJICogUmVzb2x2ZSB0aGUga2V5dGFiIHBhdGg6IGtyYjVfa3RfZGVmYXVs dF9uYW1lIHJlc3BlY3RzCi0rCQkgKiBLUkI1X0tUTkFNRSBhbmQga3JiNS5jb25mIGRlZmF1bHRf a2V5dGFiX25hbWUuCi0rCQkgKi8KLSsJCWNoYXIga2V5dGFiX25hbWVbTUFYUEFUSExFTl07Ci0r CQlrcmI1X2NvbnRleHQgdG1wX2N0eDsKLSsKLSsKLSsJCWtleXRhYl9uYW1lWzBdID0gJ1wwJzsK LSsJCWlmIChrcmI1X2luaXRfY29udGV4dCgmdG1wX2N0eCkgPT0gMCkgewotKwkJCSh2b2lkKWty YjVfa3RfZGVmYXVsdF9uYW1lKHRtcF9jdHgsIGtleXRhYl9uYW1lLAotKwkJCSAgICBzaXplb2Yo a2V5dGFiX25hbWUpKTsKLSsJCQlrcmI1X2ZyZWVfY29udGV4dCh0bXBfY3R4KTsKLSsJCX0KLSsJ CWlmIChrZXl0YWJfbmFtZVswXSA9PSAnXDAnKQotKwkJCXN0cmxjcHkoa2V5dGFiX25hbWUsICJG SUxFOi9ldGMva3JiNS5rZXl0YWIiLAotKwkJCSAgICBzaXplb2Yoa2V5dGFiX25hbWUpKTsKLSsJ CS8qCi0rCQkgKiBjbGllbnRfa2V5dGFiIGxldHMgR1NTQVBJIGRvIEFTLVJFUSB0byBvYnRhaW4g YSBUR1QgZm9yIHRoZQotKwkJICogaG9zdCBwcmluY2lwYWwgKGluaXRpYXRvciByb2xlIG5lZWRl ZCBmb3IgUzRVMlNlbGYpLgotKwkJICoga2V5dGFiIGNvdmVycyB0aGUgYWNjZXB0b3Igcm9sZS4K LSsJCSAqIGNjYWNoZTogTUVNT1JZOiBrZWVwcyB0aGUgcmVzdWx0aW5nIFRHVCB2b2xhdGlsZS4K LSsJCSAqLwotKwkJZ3NzX2tleV92YWx1ZV9lbGVtZW50X2Rlc2Mgc3RvcmVfZWxlbWVudHNbXSA9 IHsKLSsJCQl7ICJjbGllbnRfa2V5dGFiIiwga2V5dGFiX25hbWUgfSwKLSsJCQl7ICJrZXl0YWIi LCBrZXl0YWJfbmFtZSB9LAotKwkJCXsgImNjYWNoZSIsICJNRU1PUlk6IiB9LAotKwkJfTsKLSsJ CWNvbnN0IGdzc19rZXlfdmFsdWVfc2V0X2Rlc2MgY3JlZF9zdG9yZSA9IHsgMywgc3RvcmVfZWxl bWVudHMgfTsKLSsjIGVsc2UKLSsJCWdzc19rZXlfdmFsdWVfZWxlbWVudF9kZXNjIHN0b3JlX2Vs ZW1lbnRzW10gPSB7Ci0rCQkJeyAiY2NhY2hlIiwgIk1FTU9SWToiIH0sCi0rCQl9OwotKwkJY29u c3QgZ3NzX2tleV92YWx1ZV9zZXRfZGVzYyBjcmVkX3N0b3JlID0geyAxLCBzdG9yZV9lbGVtZW50 cyB9OwotKyMgZW5kaWYKLSsKLSsKLSsJCW1ham9yID0gZ3NzX2FjcXVpcmVfY3JlZF9mcm9tKCZt aW5vciwgaG9zdF9uYW1lLCBsaWZldGltZSwKLSsJCSAgICBvaWRzZXQsIEdTU19DX0JPVEgsICZj cmVkX3N0b3JlLCAmaG9zdF9jcmVkcywgTlVMTCwgTlVMTCk7Ci0rCX0KLSsjZWxzZQotKwltYWpv ciA9IGdzc19hY3F1aXJlX2NyZWQoJm1pbm9yLCBob3N0X25hbWUsIGxpZmV0aW1lLAotKwkgICAg b2lkc2V0LCBHU1NfQ19CT1RILCAmaG9zdF9jcmVkcywgTlVMTCwgTlVMTCk7Ci0rI2VuZGlmCi0r CWdzc19yZWxlYXNlX25hbWUoJm1pbm9yLCAmaG9zdF9uYW1lKTsKLSsJaWYgKEdTU19FUlJPUiht YWpvcikpIHsKLSsJCWxvZ2l0X2YoImdzc19hY3F1aXJlX2NyZWQoaG9zdEAlcykgZmFpbGVkIGFz IHVpZD0ldSBldWlkPSV1IiwKLSsJCSAgICBsbmFtZSwgKHVuc2lnbmVkKWdldHVpZCgpLCAodW5z aWduZWQpZ2V0ZXVpZCgpKTsKLSsJCWxvZ19nc3NfZXJyb3IobWFqb3IsIG1pbm9yLCAiUzRVMlNl bGY6IGdzc19hY3F1aXJlX2NyZWQiKTsKLSsJCWdzc19yZWxlYXNlX29pZF9zZXQoJnN0YXR1cywg Jm9pZHNldCk7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsJLyogSW1wb3J0IHRoZSBTU0ggdXNl cm5hbWUgYXMgYSBHU1NBUEkvS2VyYmVyb3MgbmFtZSAqLwotKwlnc3NidWYudmFsdWUgPSAodm9p ZCAqKXVzZXI7Ci0rCWdzc2J1Zi5sZW5ndGggPSBzdHJsZW4odXNlcik7Ci0rCW1ham9yID0gZ3Nz X2ltcG9ydF9uYW1lKCZtaW5vciwgJmdzc2J1ZiwKLSsJICAgIEdTU19DX05UX1VTRVJfTkFNRSwg JnVzZXJfbmFtZSk7Ci0rCWlmIChHU1NfRVJST1IobWFqb3IpKSB7Ci0rCQlsb2dpdF9mKCJnc3Nf aW1wb3J0X25hbWUgKHVzZXIpIGZhaWxlZCIpOwotKwkJZ3NzX3JlbGVhc2VfY3JlZCgmbWlub3Is ICZob3N0X2NyZWRzKTsKLSsJCWdzc19yZWxlYXNlX29pZF9zZXQoJnN0YXR1cywgJm9pZHNldCk7 Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsJZGVidWdfZ3NzX25hbWUoInVzZXIgbmFtZSBwYXJzZWQg YXMiLCB1c2VyX25hbWUpOwotKwotKwkvKiBTNFUyU2VsZjogb2J0YWluIGEgc2VydmljZSB0aWNr ZXQgZm9yIHRoZSB1c2VyIHdpdGhvdXQgdGhlaXIgY3JlZHMgKi8KLSsJZGVidWdfZigiY2FsbGlu ZyBnc3NfYWNxdWlyZV9jcmVkX2ltcGVyc29uYXRlX25hbWUgZm9yIHVzZXIgJS4xMDBzIiwgdXNl cik7Ci0rCW1ham9yID0gZ3NzX2FjcXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9uYW1lKCZtaW5vciwK LSsJICAgIGhvc3RfY3JlZHMsIHVzZXJfbmFtZSwgbGlmZXRpbWUsCi0rCSAgICBvaWRzZXQsIEdT U19DX0lOSVRJQVRFLAotKwkgICAgJmltcGVyc29uYXRlZF9jcmVkcywgTlVMTCwgTlVMTCk7Ci0r Ci0rCWdzc19yZWxlYXNlX2NyZWQoJm1pbm9yLCAmaG9zdF9jcmVkcyk7Ci0rCWdzc19yZWxlYXNl X29pZF9zZXQoJnN0YXR1cywgJm9pZHNldCk7Ci0rCWlmIChHU1NfRVJST1IobWFqb3IpKSB7Ci0r CQlsb2dpdF9mKCJnc3NfYWNxdWlyZV9jcmVkX2ltcGVyc29uYXRlX25hbWUgZmFpbGVkIGZvciAl LjEwMHMiLAotKwkJICAgIHVzZXIpOwotKwkJbG9nX2dzc19lcnJvcihtYWpvciwgbWlub3IsCi0r CQkgICAgIlM0VTJTZWxmOiBnc3NfYWNxdWlyZV9jcmVkX2ltcGVyc29uYXRlX25hbWUiKTsKLSsJ CWdzc19yZWxlYXNlX25hbWUoJm1pbm9yLCAmdXNlcl9uYW1lKTsKLSsJCXJldHVybiAtMTsKLSsJ fQotKwotKwkvKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSAoS2VyYmVyb3MgcHJpbmNpcGFsIHN0cmlu ZykgZm9yIHN0b3JlY3JlZHMgKi8KLSsJbWFqb3IgPSBnc3NfZGlzcGxheV9uYW1lKCZtaW5vciwg dXNlcl9uYW1lLCAmZGlzcGxheW5hbWUsIE5VTEwpOwotKwlnc3NfcmVsZWFzZV9uYW1lKCZtaW5v ciwgJnVzZXJfbmFtZSk7Ci0rCWlmIChHU1NfRVJST1IobWFqb3IpKSB7Ci0rCQlsb2dpdF9mKCJn c3NfZGlzcGxheV9uYW1lIGZhaWxlZCIpOwotKwkJZ3NzX3JlbGVhc2VfY3JlZCgmbWlub3IsICZp bXBlcnNvbmF0ZWRfY3JlZHMpOwotKwkJcmV0dXJuIC0xOwotKwl9Ci0rCi0rCS8qIFBvcHVsYXRl IGdzc2FwaV9jbGllbnQgZm9yIHN0b3JlY3JlZHNfczR1MnNlbGYgYW5kIHM0dTJwcm94eSAqLwot Kwlnc3NhcGlfY2xpZW50Lm1lY2ggPSAmZ3NzYXBpX2tlcmJlcm9zX21lY2g7Ci0rCWdzc2FwaV9j bGllbnQuY3JlZHMgPSBpbXBlcnNvbmF0ZWRfY3JlZHM7Ci0rCWdzc2FwaV9jbGllbnQuZGlzcGxh eW5hbWUudmFsdWUgPSB4bWFsbG9jKGRpc3BsYXluYW1lLmxlbmd0aCArIDEpOwotKwltZW1jcHko Z3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZS52YWx1ZSwKLSsJICAgIGRpc3BsYXluYW1lLnZhbHVl LCBkaXNwbGF5bmFtZS5sZW5ndGgpOwotKwkoKGNoYXIgKilnc3NhcGlfY2xpZW50LmRpc3BsYXlu YW1lLnZhbHVlKVtkaXNwbGF5bmFtZS5sZW5ndGhdID0gJ1wwJzsKLSsJZ3NzYXBpX2NsaWVudC5k aXNwbGF5bmFtZS5sZW5ndGggPSBkaXNwbGF5bmFtZS5sZW5ndGg7Ci0rCS8qCi0rCSAqIGV4cG9y dGVkbmFtZSBpcyB1c2VkIGJ5IHNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRzIOKGkiBrcmI1X3Bh cnNlX25hbWUuCi0rCSAqIGdzc19kaXNwbGF5X25hbWUgZm9yIGEgdXNlci1uYW1lIHJldHVybnMg dGhlIGNhbm9uaWNhbCBwcmluY2lwYWwKLSsJICogc3RyaW5nIChlLmcuIHVzZXJAUkVBTE0pIHdo aWNoIGtyYjVfcGFyc2VfbmFtZSBjYW4gY29uc3VtZSBkaXJlY3RseS4KLSsJICovCi0rCWdzc2Fw aV9jbGllbnQuZXhwb3J0ZWRuYW1lLnZhbHVlID0geG1hbGxvYyhkaXNwbGF5bmFtZS5sZW5ndGgg KyAxKTsKLSsJbWVtY3B5KGdzc2FwaV9jbGllbnQuZXhwb3J0ZWRuYW1lLnZhbHVlLAotKwkgICAg ZGlzcGxheW5hbWUudmFsdWUsIGRpc3BsYXluYW1lLmxlbmd0aCk7Ci0rCSgoY2hhciAqKWdzc2Fw aV9jbGllbnQuZXhwb3J0ZWRuYW1lLnZhbHVlKVtkaXNwbGF5bmFtZS5sZW5ndGhdID0gJ1wwJzsK LSsJZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUubGVuZ3RoID0gZGlzcGxheW5hbWUubGVuZ3Ro OwotKwotKwlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yLCAmZGlzcGxheW5hbWUpOwotKwlkZWJ1 Z19mKCJTNFUyU2VsZiBzdWNjZWVkZWQgZm9yICUuMTAwcyIsIHVzZXIpOwotKwlyZXR1cm4gMDsK LSt9Ci0rCi0rLyogQXMgdXNlciDigJQgd3JpdGUgdGhlIFM0VTJTZWxmIHRpY2tldCBpbnRvIGEg bmV3IGNjYWNoZSB2aWEgbWVjaC0+c3RvcmVjcmVkcyAqLwotIHZvaWQKLS1zc2hfZ3NzYXBpX2Ns ZWFudXBfY3JlZHModm9pZCkKLStzc2hfZ3NzYXBpX3N0b3JlY3JlZHNfczR1MnNlbGYodm9pZCkK LSB7Ci0tCWtyYjVfY2NhY2hlIGNjYWNoZSA9IE5VTEw7Ci0tCWtyYjVfZXJyb3JfY29kZSBwcm9i bGVtOwotLQotLQlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhICE9IE5VTEwpIHsKLS0JCWlm ICgocHJvYmxlbSA9IGtyYjVfY2NfcmVzb2x2ZShnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEsIGdz c2FwaV9jbGllbnQuc3RvcmUuZW52dmFsLCAmY2NhY2hlKSkpIHsKLS0JCQlkZWJ1Z19mKCJrcmI1 X2NjX3Jlc29sdmUoKTogJS4xMDBzIiwKLS0JCQkJa3JiNV9nZXRfZXJyX3RleHQoZ3NzYXBpX2Ns aWVudC5zdG9yZS5kYXRhLCBwcm9ibGVtKSk7Ci0tCQl9IGVsc2UgaWYgKChwcm9ibGVtID0ga3Ji NV9jY19kZXN0cm95KGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSwgY2NhY2hlKSkpIHsKLS0JCQlk ZWJ1Z19mKCJrcmI1X2NjX2Rlc3Ryb3koKTogJS4xMDBzIiwKLS0JCQkJa3JiNV9nZXRfZXJyX3Rl eHQoZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhLCBwcm9ibGVtKSk7Ci0tCQl9IGVsc2UgewotLQkJ CWtyYjVfZnJlZV9jb250ZXh0KGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSk7Ci0tCQkJZ3NzYXBp X2NsaWVudC5zdG9yZS5kYXRhID0gTlVMTDsKLSsJaWYgKGdzc2FwaV9jbGllbnQubWVjaCA9PSBO VUxMIHx8IGdzc2FwaV9jbGllbnQubWVjaC0+c3RvcmVjcmVkcyA9PSBOVUxMKSB7Ci0rCQlkZWJ1 Z19mKCJubyBHU1NBUEkgbWVjaGFuaXNtIGZvciBzdG9yaW5nIFM0VTJTZWxmIGNyZWRlbnRpYWxz Iik7Ci0rCQlyZXR1cm47Ci0rCX0KLSsJKCpnc3NhcGlfY2xpZW50Lm1lY2gtPnN0b3JlY3JlZHMp KCZnc3NhcGlfY2xpZW50KTsKLSt9Ci0rCi0rLyoKLSsgKiBQZXJmb3JtIFM0VTJQcm94eSBmb3Ig ZWFjaCBjb25maWd1cmVkIHNlcnZpY2UgcHJpbmNpcGFsLCB0aGVuIGZsdXNoIGFsbAotKyAqIHJl c3VsdGluZyB0aWNrZXRzIGludG8gdGhlIHVzZXIncyBjY2FjaGUuICBSdW5zIGFzIHVzZXIsIGFm dGVyCi0rICogc3NoX2dzc2FwaV9zdG9yZWNyZWRzX3M0dTJzZWxmKCkgaGFzIGNyZWF0ZWQgdGhl IGNjYWNoZS4KLSsgKgotKyAqIGdzc2FwaV9jbGllbnQuY3JlZHMgKHRoZSBTNFUyU2VsZiBwcm94 eSBjcmVkZW50aWFsKSBpcyBwYXNzZWQgYXMgdGhlCi0rICogaW5pdGlhdG9yIHRvIGdzc19pbml0 X3NlY19jb250ZXh0KCk7IHRoZSBHU1NBUEkgbGlicmFyeSBwcmVzZW50cyB0aGUgVEdUCi0rICog YW5kIGV2aWRlbmNlIHRpY2tldCB0byB0aGUgS0RDIHZpYSBTNFUyUHJveHkgVEdTLVJFUS4gIFRo ZSBvdXRwdXQgdG9rZW4KLSsgKiAoQVAtUkVRKSBpcyBkaXNjYXJkZWQg4oCUIHdlIGRvIG5vdCBj b25uZWN0IHRvIHRoZSB0YXJnZXQgc2VydmljZS4KLSsgKgotKyAqIEFmdGVyIGl0ZXJhdGluZyBh bGwgc2VydmljZXMsIGdzc19zdG9yZV9jcmVkKCkgZmx1c2hlcyB0aGUgYWNjdW11bGF0ZWQKLSsg KiBwcm94eSBzZXJ2aWNlIHRpY2tldHMgZnJvbSB0aGUgY3JlZGVudGlhbCdzIGludGVybmFsIGNj YWNoZSBpbnRvIHRoZQotKyAqIEtSQjVDQ05BTUUgY2NhY2hlIHRoYXQgc3RvcmVjcmVkc19zNHUy c2VsZigpIGFscmVhZHkgY3JlYXRlZC4KLSsgKi8KLSsvKiBBcyB1c2VyICovCi0rdm9pZAotK3Nz aF9nc3NhcGlfczR1MnByb3h5KGNoYXIgKipzZXJ2aWNlcywgdV9pbnQgbnNlcnZpY2VzLCB1X2lu dCBsaWZldGltZSkKLSt7Ci0rCU9NX3VpbnQzMiBtYWpvciwgbWlub3I7Ci0rCWdzc19idWZmZXJf ZGVzYyBzZXJ2aWNlX2J1Ziwgb3V0cHV0X3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwln c3NfbmFtZV90IHRhcmdldF9uYW1lOwotKwlnc3NfY3R4X2lkX3QgY3R4OwotKwl1X2ludCBpOwot KwotKwlpZiAoZ3NzYXBpX2NsaWVudC5jcmVkcyA9PSBHU1NfQ19OT19DUkVERU5USUFMKSB7Ci0r CQlkZWJ1Z19mKCJubyBwcm94eSBjcmVkZW50aWFsIGF2YWlsYWJsZSIpOwotKwkJcmV0dXJuOwot Kwl9Ci0rCWlmIChnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCA9PSBOVUxMKSB7Ci0rCQlkZWJ1 Z19mKCJubyBjY2FjaGUgcGF0aCBzZXQ7IGNhbm5vdCBzdG9yZSBwcm94eSB0aWNrZXRzIik7Ci0r CQlyZXR1cm47Ci0rCX0KLSsKLSsJZGVidWdfZigic3RhcnRpbmcgUzRVMlByb3h5IGFzIHVpZD0l dSBldWlkPSV1LCAldSBzZXJ2aWNlKHMpLCBjY2FjaGU9JXMiLAotKwkgICAgKHVuc2lnbmVkKWdl dHVpZCgpLCAodW5zaWduZWQpZ2V0ZXVpZCgpLCBuc2VydmljZXMsCi0rCSAgICBnc3NhcGlfY2xp ZW50LnN0b3JlLmVudnZhbCk7Ci0rCi0rCS8qIFBvaW50IHRoZSBHU1NBUEkgbGlicmFyeSBhdCB0 aGUgdXNlcidzIGNjYWNoZSBmb3IgdGlja2V0IHN0b3JhZ2UgKi8KLSsJc2V0ZW52KCJLUkI1Q0NO QU1FIiwgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwsIDEpOwotKwotKwlmb3IgKGkgPSAwOyBp IDwgbnNlcnZpY2VzOyBpKyspIHsKLSsJCWN0eCA9IEdTU19DX05PX0NPTlRFWFQ7Ci0rCQl0YXJn ZXRfbmFtZSA9IEdTU19DX05PX05BTUU7Ci0rCi0rCQlzZXJ2aWNlX2J1Zi52YWx1ZSA9IHNlcnZp Y2VzW2ldOwotKwkJc2VydmljZV9idWYubGVuZ3RoID0gc3RybGVuKHNlcnZpY2VzW2ldKTsKLSsK LSsJCS8qCi0rCQkgKiBHU1NfQ19OT19PSUQ6IGxldCB0aGUgbGlicmFyeSBkZXRlcm1pbmUgdGhl IG5hbWUgdHlwZS4KLSsJCSAqIFdpdGggS2VyYmVyb3MgYXMgdGhlIGFjdGl2ZSBtZWNoYW5pc20s IGEgZnVsbHktcXVhbGlmaWVkCi0rCQkgKiBwcmluY2lwYWwgbGlrZSAic3ZjL2hvc3RAUkVBTE0i IGlzIHBhcnNlZCBjb3JyZWN0bHkuCi0rCQkgKi8KLSsJCW1ham9yID0gZ3NzX2ltcG9ydF9uYW1l KCZtaW5vciwgJnNlcnZpY2VfYnVmLAotKwkJICAgIEdTU19DX05PX09JRCwgJnRhcmdldF9uYW1l KTsKLSsJCWlmIChHU1NfRVJST1IobWFqb3IpKSB7Ci0rCQkJbG9naXRfZigiZ3NzX2ltcG9ydF9u YW1lIGZhaWxlZCBmb3IgJS4yMDBzIiwKLSsJCQkgICAgc2VydmljZXNbaV0pOwotKwkJCWxvZ19n c3NfZXJyb3IobWFqb3IsIG1pbm9yLCAiUzRVMlByb3h5OiBnc3NfaW1wb3J0X25hbWUiKTsKLSsJ CQljb250aW51ZTsKLSAJCX0KLSsJCWRlYnVnX2dzc19uYW1lKCJ0YXJnZXQgc2VydmljZSBuYW1l IHBhcnNlZCBhcyIsIHRhcmdldF9uYW1lKTsKLSsKLSsJCWRlYnVnX2YoImNhbGxpbmcgZ3NzX2lu aXRfc2VjX2NvbnRleHQgZm9yICUuMjAwcyIsIHNlcnZpY2VzW2ldKTsKLSsJCW1ham9yID0gZ3Nz X2luaXRfc2VjX2NvbnRleHQoJm1pbm9yLAotKwkJICAgIGdzc2FwaV9jbGllbnQuY3JlZHMsCQkv KiBwcm94eSBjcmVkZW50aWFsICovCi0rCQkgICAgJmN0eCwgdGFyZ2V0X25hbWUsCi0rCQkgICAg R1NTX0NfTk9fT0lELAkJCS8qIGRlZmF1bHQgbWVjaCAoS2VyYmVyb3MpICovCi0rCQkgICAgMCwJ CQkJCS8qIG5vIGZsYWdzLCBubyBtdXR1YWwgYXV0aCAqLwotKwkJICAgIGxpZmV0aW1lLAotKwkJ ICAgIEdTU19DX05PX0NIQU5ORUxfQklORElOR1MsCi0rCQkgICAgR1NTX0NfTk9fQlVGRkVSLAkJ CS8qIG5vIGlucHV0IHRva2VuICovCi0rCQkgICAgTlVMTCwJCQkJLyogYWN0dWFsX21lY2hfdHlw ZSAqLwotKwkJICAgICZvdXRwdXRfdG9rZW4sCi0rCQkgICAgTlVMTCwJCQkJLyogcmV0X2ZsYWdz ICovCi0rCQkgICAgTlVMTCk7CQkJCS8qIHRpbWVfcmVjICovCi0rCi0rCQlnc3NfcmVsZWFzZV9i dWZmZXIoJm1pbm9yLCAmb3V0cHV0X3Rva2VuKTsKLSsJCWdzc19yZWxlYXNlX25hbWUoJm1pbm9y LCAmdGFyZ2V0X25hbWUpOwotKwkJaWYgKGN0eCAhPSBHU1NfQ19OT19DT05URVhUKQotKwkJCWdz c19kZWxldGVfc2VjX2NvbnRleHQoJm1pbm9yLCAmY3R4LCBHU1NfQ19OT19CVUZGRVIpOwotKwot KwkJaWYgKEdTU19FUlJPUihtYWpvcikpIHsKLSsJCQlsb2dpdF9mKCJTNFUyUHJveHkgZm9yICUu MjAwcyBvbiBiZWhhbGYgb2YgJS4yMDBzIGZhaWxlZCIsCi0rCQkJICAgIHNlcnZpY2VzW2ldLAot KwkJCSAgICAoY2hhciAqKWdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUudmFsdWUpOwotKwkJCWxv Z19nc3NfZXJyb3IobWFqb3IsIG1pbm9yLAotKwkJCSAgICAiUzRVMlByb3h5OiBnc3NfaW5pdF9z ZWNfY29udGV4dCIpOwotKwkJfSBlbHNlCi0rCQkJZGVidWdfZigiUzRVMlByb3h5IHRpY2tldCBv YnRhaW5lZCBmb3IgJS4yMDBzIiwKLSsJCQkgICAgc2VydmljZXNbaV0pOwotIAl9Ci0rCi0rCS8q Ci0rCSAqIEZsdXNoIGFsbCBwcm94eSBzZXJ2aWNlIHRpY2tldHMgZnJvbSB0aGUgY3JlZGVudGlh bCdzIGludGVybmFsCi0rCSAqIGNjYWNoZSBpbnRvIHRoZSBLUkI1Q0NOQU1FIGNjYWNoZSB2aWEg Z3NzX3N0b3JlX2NyZWQoKS4KLSsJICovCi0rCW1ham9yID0gZ3NzX3N0b3JlX2NyZWQoJm1pbm9y LCBnc3NhcGlfY2xpZW50LmNyZWRzLCBHU1NfQ19JTklUSUFURSwKLSsJICAgIEdTU19DX05PX09J RCwgMSAvKiBvdmVyd3JpdGVfY3JlZCAqLywgMSAvKiBkZWZhdWx0X2NyZWQgKi8sCi0rCSAgICBO VUxMLCBOVUxMKTsKLSsJaWYgKEdTU19FUlJPUihtYWpvcikpIHsKLSsJCWxvZ2l0X2YoImdzc19z dG9yZV9jcmVkIGZhaWxlZDsgcHJveHkgdGlja2V0cyBtYXkgYmUgbWlzc2luZyIpOwotKwkJbG9n X2dzc19lcnJvcihtYWpvciwgbWlub3IsICJTNFUyUHJveHk6IGdzc19zdG9yZV9jcmVkIik7Ci0r CX0KLSsKLSsJdW5zZXRlbnYoIktSQjVDQ05BTUUiKTsKLSt9Ci0rCi0rI2lmbmRlZiBLUkI1Ci0r LyogQXMgdXNlciAtIGNhbGxlZCBvbiBmYXRhbC9leGl0OyBmdWxsIGltcGxlbWVudGF0aW9uIGlu IGdzcy1zZXJ2LWtyYjUuYyAqLwotK3ZvaWQKLStzc2hfZ3NzYXBpX2NsZWFudXBfY3JlZHModm9p ZCkKLSt7Ci0rfQotKwotKy8qCi0rICogRmlsdGVyIHRoZSB1c2VyJ3MgY2NhY2hlOyBmdWxsIGlt cGxlbWVudGF0aW9uIGluIGdzcy1zZXJ2LWtyYjUuYy4KLSsgKi8KLSt2b2lkCi0rc3NoX2dzc2Fw aV9rcmI1X2ZpbHRlcl9jY2FjaGUodV9pbnQgZHJvcF9mbGFncywKLSsgICAgY2hhciAqKnByb3h5 X3NlcnZpY2VzLCB1X2ludCBucHJveHlfc2VydmljZXMpCi0rewotIH0KLSsjZW5kaWYgLyogIUtS QjUgKi8KLSAKLSAvKiBBcyB1c2VyICovCi0gaW50Ci1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBi L3NlcnZjb25mLmMKLWluZGV4IGY0ZDZiMTlkZC4uZTA1YTMxNTg0IDEwMDY0NAotLS0tIGEvc2Vy dmNvbmYuYwotKysrIGIvc2VydmNvbmYuYwotQEAgLTE0OSw2ICsxNDksOSBAQCBpbml0aWFsaXpl X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gCW9wdGlvbnMtPmdzc19p bmRpY2F0b3JzID0gTlVMTDsKLSAJb3B0aW9ucy0+Z3NzX3N0b3JlX3Jla2V5ID0gLTE7Ci0gCW9w dGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IE5VTEw7Ci0rCW9wdGlvbnMtPmdzc19hbGxvd19z NHUyc2VsZiA9IC0xOwotKwlvcHRpb25zLT5nc3NfcHJveHlfc2VydmljZXMgPSBOVUxMOwotKwlv cHRpb25zLT5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID0gMDsKLSAJb3B0aW9ucy0+dXNlX2t1c2Vy b2sgPSAtMTsKLSAJb3B0aW9ucy0+ZW5hYmxlX2s1dXNlcnMgPSAtMTsKLSAJb3B0aW9ucy0+cGFz c3dvcmRfYXV0aGVudGljYXRpb24gPSAtMTsKLUBAIC00MDYsNiArNDA5LDggQEAgZmlsbF9kZWZh dWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gCQlvcHRpb25zLT5n c3NfZGVsZWdfY3JlZHMgPSAxOwotIAlpZiAob3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9 PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAxOwotKwlpZiAob3B0aW9u cy0+Z3NzX2FsbG93X3M0dTJzZWxmID09IC0xKQotKwkJb3B0aW9ucy0+Z3NzX2FsbG93X3M0dTJz ZWxmID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19zdG9yZV9yZWtleSA9PSAtMSkKLSAJCW9wdGlv bnMtPmdzc19zdG9yZV9yZWtleSA9IDA7Ci0gI2lmZGVmIEdTU0FQSQotQEAgLTYwMyw2ICs2MDgs NyBAQCB0eXBlZGVmIGVudW0gewotIAlzSG9zdEtleUFsZ29yaXRobXMsIHNQZXJTb3VyY2VNYXhT dGFydHVwcywgc1BlclNvdXJjZU5ldEJsb2NrU2l6ZSwKLSAJc1BlclNvdXJjZVBlbmFsdGllcywg c1BlclNvdXJjZVBlbmFsdHlFeGVtcHRMaXN0LAotIAlzQ2xpZW50QWxpdmVJbnRlcnZhbCwgc0Ns aWVudEFsaXZlQ291bnRNYXgsIHNBdXRob3JpemVkS2V5c0ZpbGUsCi0rCXNHc3NBbGxvd1M0VTJT ZWxmLCBzR3NzUHJveHlTNFUyU2VydmljZXMsCi0gCXNHc3NBdXRoZW50aWNhdGlvbiwgc0dzc0Ns ZWFudXBDcmVkcywgc0dzc0RlbGVnYXRlQ3JlZHMsIHNHc3NFbmFibGVrNXVzZXJzLCBzR3NzU3Ry aWN0QWNjZXB0b3IsCi0gCXNHc3NJbmRpY2F0b3JzLCBzR3NzS2V5RXgsIHNHc3NLZXhBbGdvcml0 aG1zLCBzR3NzU3RvcmVSZWtleSwKLSAJc0FjY2VwdEVudiwgc1NldEVudiwgc1Blcm1pdFR1bm5l bCwKLUBAIC03MDIsNiArNzA4LDggQEAgc3RhdGljIHN0cnVjdCB7Ci0gCXsgImdzc2FwaWtleGFs Z29yaXRobXMiLCBzR3NzS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3Nh cGllbmFibGVrNXVzZXJzIiwgc0dzc0VuYWJsZWs1dXNlcnMsIFNTSENGR19BTEwgfSwKLSAJeyAi Z3NzYXBpaW5kaWNhdG9ycyIsIHNHc3NJbmRpY2F0b3JzLCBTU0hDRkdfQUxMIH0sCi0rCXsgImdz c2FwaWFsbG93czR1MnNlbGYiLCBzR3NzQWxsb3dTNFUyU2VsZiwgU1NIQ0ZHX0FMTCB9LAotKwl7 ICJnc3NhcGlwcm94eXM0dTJzZXJ2aWNlcyIsIHNHc3NQcm94eVM0VTJTZXJ2aWNlcywgU1NIQ0ZH X0FMTCB9LAotICNlbHNlCi0gCXsgImdzc2FwaWF1dGhlbnRpY2F0aW9uIiwgc1Vuc3VwcG9ydGVk LCBTU0hDRkdfQUxMIH0sCi0gCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNVbnN1cHBv cnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotQEAgLTcxMyw2ICs3MjEsOCBAQCBzdGF0aWMgc3RydWN0 IHsKLSAJeyAiZ3NzYXBpa2V4YWxnb3JpdGhtcyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JB TCB9LAotIAl7ICJnc3NhcGllbmFibGVrNXVzZXJzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxM IH0sCi0gCXsgImdzc2FwaWluZGljYXRvcnMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwK LSsJeyAiZ3NzYXBpYWxsb3dzNHUyc2VsZiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAot Kwl7ICJnc3NhcGlwcm94eXM0dTJzZXJ2aWNlcyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9 LAotICNlbmRpZgotIAl7ICJnc3N1c2VzZXNzaW9uY2NhY2hlIiwgc1Vuc3VwcG9ydGVkLCBTU0hD RkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXVzZXNlc3Npb25jcmVkY2FjaGUiLCBzVW5zdXBwb3J0 ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC0xNzU0LDYgKzE3NjQsNDQgQEAgcHJvY2Vzc19zZXJ2 ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwK LSAJCQlvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyA9IHhzdHJkdXAoYXJnKTsKLSAJCWJyZWFrOwot IAotKwljYXNlIHNHc3NBbGxvd1M0VTJTZWxmOgotKwkJYXJnID0gYXJndl9uZXh0KCZhYywgJmF2 KTsKLSsJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykKLSsJCQlmYXRhbCgiJXMgbGluZSAlZDog JXMgbWlzc2luZyBhcmd1bWVudC4iLAotKwkJCSAgICBmaWxlbmFtZSwgbGluZW51bSwga2V5d29y ZCk7Ci0rCQlpZiAoc3RyY2FzZWNtcChhcmcsICJubyIpID09IDApCi0rCQkJdmFsdWUgPSAwOwot KwkJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmcsICJ5ZXMiKSA9PSAwKQotKwkJCXZhbHVlID0gSU5U X01BWDsKLSsJCWVsc2UgaWYgKCh2YWx1ZSA9IGNvbnZ0aW1lKGFyZykpIDw9IDApCi0rCQkJZmF0 YWwoIiVzIGxpbmUgJWQ6IGludmFsaWQgJXMgdmFsdWUgXCIlc1wiLiIsCi0rCQkJICAgIGZpbGVu YW1lLCBsaW5lbnVtLCBrZXl3b3JkLCBhcmcpOwotKwkJaWYgKCphY3RpdmVwICYmIG9wdGlvbnMt Pmdzc19hbGxvd19zNHUyc2VsZiA9PSAtMSkKLSsJCQlvcHRpb25zLT5nc3NfYWxsb3dfczR1MnNl bGYgPSB2YWx1ZTsKLSsJCWJyZWFrOwotKwotKwljYXNlIHNHc3NQcm94eVM0VTJTZXJ2aWNlczoK LSsJCXdoaWxlICgoYXJnID0gYXJndl9uZXh0KCZhYywgJmF2KSkgIT0gTlVMTCkgewotKwkJCWlm ICgqYXJnID09ICdcMCcpCi0rCQkJCWZhdGFsKCIlcyBsaW5lICVkOiAlcyBtaXNzaW5nIGFyZ3Vt ZW50LiIsCi0rCQkJCSAgICBmaWxlbmFtZSwgbGluZW51bSwga2V5d29yZCk7Ci0rCQkJaWYgKHN0 cmNhc2VjbXAoYXJnLCAibm9uZSIpID09IDApIHsKLSsJCQkJLyogIm5vbmUiIGNsZWFycyBhbnkg cHJldmlvdXMgbGlzdCAqLwotKwkJCQlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy0+bnVtX2dzc19w cm94eV9zZXJ2aWNlczsgaSsrKQotKwkJCQkJZnJlZShvcHRpb25zLT5nc3NfcHJveHlfc2Vydmlj ZXNbaV0pOwotKwkJCQlmcmVlKG9wdGlvbnMtPmdzc19wcm94eV9zZXJ2aWNlcyk7Ci0rCQkJCW9w dGlvbnMtPmdzc19wcm94eV9zZXJ2aWNlcyA9IE5VTEw7Ci0rCQkJCW9wdGlvbnMtPm51bV9nc3Nf cHJveHlfc2VydmljZXMgPSAwOwotKwkJCQlicmVhazsKLSsJCQl9Ci0rCQkJaWYgKCEqYWN0aXZl cCkKLSsJCQkJY29udGludWU7Ci0rCQkJb3B0X2FycmF5X2FwcGVuZChmaWxlbmFtZSwgbGluZW51 bSwga2V5d29yZCwKLSsJCQkgICAgJm9wdGlvbnMtPmdzc19wcm94eV9zZXJ2aWNlcywKLSsJCQkg ICAgJm9wdGlvbnMtPm51bV9nc3NfcHJveHlfc2VydmljZXMsIGFyZyk7Ci0rCQl9Ci0rCQlicmVh azsKLSsKLSAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoKLSAJCWludHB0ciA9ICZvcHRp b25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbjsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLUBAIC0z MDUzLDYgKzMxMDEsNyBAQCBjb3B5X3NldF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpk c3QsIFNlcnZlck9wdGlvbnMgKnNyYywgaW50IHByZWF1dGgpCi0gCi0gCU1fQ1BfSU5UT1BUKHBh c3N3b3JkX2F1dGhlbnRpY2F0aW9uKTsKLSAJTV9DUF9JTlRPUFQoZ3NzX2F1dGhlbnRpY2F0aW9u KTsKLSsJTV9DUF9JTlRPUFQoZ3NzX2FsbG93X3M0dTJzZWxmKTsKLSAJTV9DUF9JTlRPUFQocHVi a2V5X2F1dGhlbnRpY2F0aW9uKTsKLSAJTV9DUF9JTlRPUFQocHVia2V5X2F1dGhfb3B0aW9ucyk7 Ci0gCU1fQ1BfSU5UT1BUKGtlcmJlcm9zX2F1dGhlbnRpY2F0aW9uKTsKLUBAIC0zNDA3LDYgKzM0 NTYsMTUgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykKLSAJZHVtcF9jZmdfZm10aW50 KHNHc3NTdG9yZVJla2V5LCBvLT5nc3Nfc3RvcmVfcmVrZXkpOwotIAlkdW1wX2NmZ19zdHJpbmco c0dzc0tleEFsZ29yaXRobXMsIG8tPmdzc19rZXhfYWxnb3JpdGhtcyk7Ci0gCWR1bXBfY2ZnX3N0 cmluZyhzR3NzSW5kaWNhdG9ycywgby0+Z3NzX2luZGljYXRvcnMpOwotKwlpZiAoby0+Z3NzX2Fs bG93X3M0dTJzZWxmID09IDApCi0rCQlwcmludGYoIiVzIG5vXG4iLCBsb29rdXBfb3Bjb2RlX25h bWUoc0dzc0FsbG93UzRVMlNlbGYpKTsKLSsJZWxzZSBpZiAoby0+Z3NzX2FsbG93X3M0dTJzZWxm ID09IElOVF9NQVgpCi0rCQlwcmludGYoIiVzIHllc1xuIiwgbG9va3VwX29wY29kZV9uYW1lKHNH c3NBbGxvd1M0VTJTZWxmKSk7Ci0rCWVsc2UKLSsJCXByaW50ZigiJXMgJWRcbiIsIGxvb2t1cF9v cGNvZGVfbmFtZShzR3NzQWxsb3dTNFUyU2VsZiksCi0rCQkgICAgby0+Z3NzX2FsbG93X3M0dTJz ZWxmKTsKLSsJZHVtcF9jZmdfc3RyYXJyYXlfb25lbGluZShzR3NzUHJveHlTNFUyU2VydmljZXMs IG8tPm51bV9nc3NfcHJveHlfc2VydmljZXMsCi0rCSAgICBvLT5nc3NfcHJveHlfc2VydmljZXMp OwotICNlbmRpZgotIAlkdW1wX2NmZ19mbXRpbnQoc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sIG8t PnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uKTsKLSAJZHVtcF9jZmdfZm10aW50KHNLYmRJbnRlcmFj dGl2ZUF1dGhlbnRpY2F0aW9uLAotZGlmZiAtLWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29uZi5o Ci1pbmRleCBmZWEyNTk0N2UuLjlhY2VhMzJjZiAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmgKLSsr KyBiL3NlcnZjb25mLmgKLUBAIC0xNjEsNiArMTYxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgewotIAlp bnQgICAgIGdzc19jbGVhbnVwX2NyZWRzOwkvKiBJZiB0cnVlLCBkZXN0cm95IGNyZWQgY2FjaGUg b24gbG9nb3V0ICovCi0gCWludCAgICAgZ3NzX2RlbGVnX2NyZWRzOwkvKiBJZiB0cnVlLCBhY2Nl cHQgZGVsZWdhdGVkIEdTUyBjcmVkZW50aWFscyAqLwotIAlpbnQgICAgIGdzc19zdHJpY3RfYWNj ZXB0b3I7CS8qIElmIHRydWUsIHJlc3RyaWN0IHRoZSBHU1NBUEkgYWNjZXB0b3IgbmFtZSAqLwot KwlpbnQgICAgIGdzc19hbGxvd19zNHUyc2VsZjsgLyogMD1ubywgSU5UX01BWD15ZXMgKEdTU19D X0lOREVGSU5JVEUpLCA+MD10aWNrZXQgbGlmZXRpbWUgcyAqLwotKwljaGFyICAqKmdzc19wcm94 eV9zZXJ2aWNlczsgLyogUzRVMlByb3h5IHRhcmdldCBzZXJ2aWNlIHByaW5jaXBhbHMgKi8KLSsJ dV9pbnQgICBudW1fZ3NzX3Byb3h5X3NlcnZpY2VzOwotIAlpbnQgCWdzc19zdG9yZV9yZWtleTsK LSAJY2hhciAgICpnc3Nfa2V4X2FsZ29yaXRobXM7CS8qIEdTU0FQSSBrZXggbWV0aG9kcyB0byBi ZSBvZmZlcmVkIGJ5IGNsaWVudC4gKi8KLSAJaW50ICAgICBwYXNzd29yZF9hdXRoZW50aWNhdGlv bjsJLyogSWYgdHJ1ZSwgcGVybWl0IHBhc3N3b3JkCi1AQCAtMzE0LDYgKzMxNyw3IEBAIFRBSUxR X0hFQUQoaW5jbHVkZV9saXN0LCBpbmNsdWRlX2l0ZW0pOwotIAkJTV9DUF9TVFJPUFQocGVybWl0 X3VzZXJfZW52X2FsbG93bGlzdCk7IFwKLSAJCU1fQ1BfU1RST1BUKHBhbV9zZXJ2aWNlX25hbWUp OyBcCi0gCQlNX0NQX1NUUk9QVChnc3NfaW5kaWNhdG9ycyk7IFwKLSsJCU1fQ1BfU1RSQVJSQVlP UFQoZ3NzX3Byb3h5X3NlcnZpY2VzLCBudW1fZ3NzX3Byb3h5X3NlcnZpY2VzLCAxKTsgXAotIAkJ TV9DUF9TVFJBUlJBWU9QVChhdXRob3JpemVkX2tleXNfZmlsZXMsIG51bV9hdXRoa2V5c19maWxl cywgMSk7XAotIAkJTV9DUF9TVFJBUlJBWU9QVChyZXZva2VkX2tleXNfZmlsZXMsIFwKLSAJCSAg ICBudW1fcmV2b2tlZF9rZXlzX2ZpbGVzLCAxKTsgXAotZGlmZiAtLWdpdCBhL3NzaC1nc3MuaCBi L3NzaC1nc3MuaAotaW5kZXggMTUwNjcxOWE5Li5hMGQ1MWM5YmUgMTAwNjQ0Ci0tLS0gYS9zc2gt Z3NzLmgKLSsrKyBiL3NzaC1nc3MuaAotQEAgLTExOSw2ICsxMTksNyBAQCB0eXBlZGVmIHN0cnVj dCB7Ci0gCWludCB1c2VkOwotIAlpbnQgdXBkYXRlZDsKLSAJY2hhciAqKmluZGljYXRvcnM7IC8q IGF1dGggaW5kaWNhdG9ycyAqLwotKwlpbnQgYWxsb3dfc2VsZjsgLyogYWxsb3cgcHJvdG9jb2wg dHJhbnNpdGlvbiAqLwotIH0gc3NoX2dzc2FwaV9jbGllbnQ7Ci0gCi0gdHlwZWRlZiBzdHJ1Y3Qg c3NoX2dzc2FwaV9tZWNoX3N0cnVjdCB7Ci1AQCAtMTk5LDYgKzIwMCwxOCBAQCBPTV91aW50MzIg c3NoX2dzc2FwaV9jaGVja21pYyhHc3NjdHh0ICosIGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90 KTsKLSB2b2lkIHNzaF9nc3NhcGlfZG9fY2hpbGQoY2hhciAqKiosIHVfaW50ICopOwotIHZvaWQg c3NoX2dzc2FwaV9jbGVhbnVwX2NyZWRzKHZvaWQpOwotIGludCBzc2hfZ3NzYXBpX3N0b3JlY3Jl ZHModm9pZCk7Ci0raW50ICBzc2hfZ3NzYXBpX2NyZWRlbnRpYWxzX3N0b3JlZCh2b2lkKTsKLStz c2hfZ3NzYXBpX2NjYWNoZSAqc3NoX2dzc2FwaV9nZXRfY2NhY2hlKHZvaWQpOwotK2ludCAgc3No X2dzc2FwaV91c2VyX2hhc192YWxpZF90Z3QodV9pbnQpOwotK2ludCAgc3NoX2dzc2FwaV91c2Vy X2hhc192YWxpZF9wcm94eV90aWNrZXRzKGNoYXIgKiosIHVfaW50LCB1X2ludCk7Ci0raW50ICBz c2hfZ3NzYXBpX3M0dTJzZWxmKGNvbnN0IGNoYXIgKiwgdV9pbnQpOwotK3ZvaWQgc3NoX2dzc2Fw aV9zdG9yZWNyZWRzX3M0dTJzZWxmKHZvaWQpOwotK3ZvaWQgc3NoX2dzc2FwaV9zNHUycHJveHko Y2hhciAqKiwgdV9pbnQsIHVfaW50KTsKLSsvKiBGbGFncyBmb3Igc3NoX2dzc2FwaV9rcmI1X2Zp bHRlcl9jY2FjaGUoKTogd2hpY2ggdGlja2V0IGNsYXNzZXMgdG8gcmVtb3ZlICovCi0rI2RlZmlu ZSBTU0hfR1NTQVBJX0NDRklMVEVSX1RHVCAgICAoMXUgPDwgMCkgLyoga3JidGd0Ly4uLiBlbnRy aWVzICovCi0rI2RlZmluZSBTU0hfR1NTQVBJX0NDRklMVEVSX1NFTEYgICAoMXUgPDwgMSkgLyog UzRVMlNlbGYgZXZpZGVuY2UgdGlja2V0ICovCi0rI2RlZmluZSBTU0hfR1NTQVBJX0NDRklMVEVS X1BST1hZICAoMXUgPDwgMikgLyogUzRVMlByb3h5IHNlcnZpY2UgdGlja2V0cyAqLwotK3ZvaWQg c3NoX2dzc2FwaV9rcmI1X2ZpbHRlcl9jY2FjaGUodV9pbnQsIGNoYXIgKiosIHVfaW50KTsKLSBj b25zdCBjaGFyICpzc2hfZ3NzYXBpX2Rpc3BsYXluYW1lKHZvaWQpOwotIAotIGNoYXIgKnNzaF9n c3NhcGlfc2VydmVyX21lY2hhbmlzbXModm9pZCk7Ci1kaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9u LmMgYi9zc2hkLXNlc3Npb24uYwotaW5kZXggNzA2NGFmZDdjLi5kMWQxM2Q4NjMgMTAwNjQ0Ci0t LS0gYS9zc2hkLXNlc3Npb24uYwotKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBAIC0xMzkzLDYgKzEz OTMsMTA0IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCi0gCQlhdXRoY3R4dC0+a3JiNV9zZXRf ZW52ID0gc3NoX2dzc2FwaV9zdG9yZWNyZWRzKCk7Ci0gCQlyZXN0b3JlX3VpZCgpOwotIAl9Ci0r CS8qCi0rCSAqIEdTU0FQSUFsbG93UzRVMlNlbGYgLyBHU1NBUElQcm94eVM0VTJTZXJ2aWNlczog aWYgbm8gY3JlZGVudGlhbHMgd2VyZSBzdG9yZWQKLSsJICogYWJvdmUgKGkuZS4gbm8gR1NTQVBJ IGF1dGggd2l0aCBkZWxlZ2F0aW9uIG9jY3VycmVkKSwgdXNlIFM0VTJTZWxmCi0rCSAqIHRvIG9i dGFpbiBhbiBpbXBlcnNvbmF0ZWQgY3JlZGVudGlhbCBmb3IgdGhlIHVzZXIsIHRoZW4gb3B0aW9u YWxseQotKwkgKiBmb2xsb3cgd2l0aCBTNFUyUHJveHkgZm9yIGNvbmZpZ3VyZWQgdGFyZ2V0IHNl cnZpY2VzLgotKwkgKgotKwkgKiBHU1NBUElBbGxvd1M0VTJTZWxmIGFsb25lOiAgICBzdG9yZSBT NFUyU2VsZiBldmlkZW5jZSB0aWNrZXQgb25seTsKLSsJICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIGhvc3QgVEdUIGlzIHJlbW92ZWQuCi0rCSAqIEdTU0FQSVByb3h5UzRVMlNlcnZp Y2VzIGFsb25lOiBzdG9yZSBob3N0IFRHVCBhbmQgUzRVMlByb3h5IHNlcnZpY2UKLSsJICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0czsgdGhlIFM0VTJTZWxmIGV2aWRlbmNlIHRp Y2tldAotKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZW1vdmVkLgotKwkgKiBC b3RoOiAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGhvc3QgVEdULCBTNFUyU2VsZiBldmlkZW5j ZSB0aWNrZXQsCi0rCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbGwgUzRVMlBy b3h5IHNlcnZpY2UgdGlja2V0cy4KLSsJICoKLSsJICogV2hlbiBTNFUyUHJveHkgdGlja2V0cyBh cmUgcHJlc2VudCB0aGUgaG9zdCBUR1QgbXVzdCByZW1haW4gaW4gdGhlCi0rCSAqIGNjYWNoZTsg YXBwbGljYXRpb25zIGNoZWNrIGZvciBUR1QgcHJlc2VuY2UgdG8gZGV0ZXJtaW5lIHdoZXRoZXIK LSsJICogS2VyYmVyb3MgY3JlZGVudGlhbHMgYXJlIGF2YWlsYWJsZS4gIE9ubHkgaW4gR1NTQVBJ QWxsb3dTNFUyU2VsZi1hbG9uZQotKwkgKiBtb2RlIChubyBwcm94eSB0aWNrZXRzKSBpcyB0aGUg aG9zdCBUR1QgcmVtb3ZlZC4KLSsJICoKLSsJICogU2tpcCBTNFUyU2VsZiB3aGVuIHRoZSB1c2Vy IGFscmVhZHkgaGFzIGNyZWRlbnRpYWxzIGNvdmVyaW5nIHRoZQotKwkgKiByZXF1ZXN0ZWQgbGlm ZXRpbWU6IGNoZWNrIGZvciBhIHZhbGlkIFRHVCBpbiB0aGUgR1NTQVBJQWxsb3dTNFUyU2VsZi0K LSsJICogYWxvbmUgY2FzZSwgb3IgZm9yIHZhbGlkIHByb3h5IHRpY2tldHMgZm9yIGV2ZXJ5IGNv bmZpZ3VyZWQgc2VydmljZQotKwkgKiBvdGhlcndpc2UuCi0rCSAqLwotKwlpZiAoKG9wdGlvbnMu Z3NzX2FsbG93X3M0dTJzZWxmIHx8IG9wdGlvbnMubnVtX2dzc19wcm94eV9zZXJ2aWNlcyA+IDAp ICYmCi0rCSAgICAhc3NoX2dzc2FwaV9jcmVkZW50aWFsc19zdG9yZWQoKSkgewotKwkJdV9pbnQg bGlmZXRpbWUgPSAoIW9wdGlvbnMuZ3NzX2FsbG93X3M0dTJzZWxmIHx8Ci0rCQkgICAgb3B0aW9u cy5nc3NfYWxsb3dfczR1MnNlbGYgPT0gSU5UX01BWCkgPwotKwkJICAgIEdTU19DX0lOREVGSU5J VEUgOiAodV9pbnQpb3B0aW9ucy5nc3NfYWxsb3dfczR1MnNlbGY7Ci0rCQlpbnQgc2tpcCA9IDA7 Ci0rCi0rCQl0ZW1wb3JhcmlseV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7Ci0rCQlpZiAob3B0aW9u cy5nc3NfYWxsb3dfczR1MnNlbGYgJiYKLSsJCSAgICBvcHRpb25zLm51bV9nc3NfcHJveHlfc2Vy dmljZXMgPT0gMCkgewotKwkJCS8qIFM0VTJTZWxmLWFsb25lOiBza2lwIGlmIHVzZXIgYWxyZWFk eSBoYXMgYSB2YWxpZCBUR1QgKi8KLSsJCQlza2lwID0gc3NoX2dzc2FwaV91c2VyX2hhc192YWxp ZF90Z3QobGlmZXRpbWUpOwotKwkJfSBlbHNlIGlmIChvcHRpb25zLm51bV9nc3NfcHJveHlfc2Vy dmljZXMgPiAwKSB7Ci0rCQkJLyoKLSsJCQkgKiBQcm94eS1vbmx5IG9yIGJvdGg6IHNraXAgaWYg ZXZlcnkgY29uZmlndXJlZCBzZXJ2aWNlCi0rCQkJICogYWxyZWFkeSBoYXMgYSB2YWxpZCB0aWNr ZXQgaW4gdGhlIHVzZXIncyBjY2FjaGUuCi0rCQkJICogU2VydmljZSB0aWNrZXRzIGFyZSBub3Qg R1NTQVBJIGluaXRpYXRvciBjcmVkZW50aWFscywKLSsJCQkgKiBzbyBnc3NfYWNxdWlyZV9jcmVk KCkgY2Fubm90IGJlIHVzZWQ7IGl0ZXJhdGUgdGhlCi0rCQkJICogY2NhY2hlIHdpdGggdGhlIGty YjUgQVBJIGluc3RlYWQuCi0rCQkJICovCi0rCQkJc2tpcCA9IHNzaF9nc3NhcGlfdXNlcl9oYXNf dmFsaWRfcHJveHlfdGlja2V0cygKLSsJCQkgICAgb3B0aW9ucy5nc3NfcHJveHlfc2VydmljZXMs Ci0rCQkJICAgIG9wdGlvbnMubnVtX2dzc19wcm94eV9zZXJ2aWNlcywKLSsJCQkgICAgbGlmZXRp bWUpOwotKwkJfQotKwkJcmVzdG9yZV91aWQoKTsKLSsKLSsJCWlmIChza2lwKSB7Ci0rCQkJZGVi dWdfZigidXNlciAlLjEwMHMgYWxyZWFkeSBoYXMgdmFsaWQgS2VyYmVyb3MgIgotKwkJCSAgICAi Y3JlZGVudGlhbHMsIHNraXBwaW5nIFM0VTJTZWxmIiwKLSsJCQkgICAgYXV0aGN0eHQtPnVzZXIp OwotKwkJfSBlbHNlIGlmIChzc2hfZ3NzYXBpX3M0dTJzZWxmKGF1dGhjdHh0LT51c2VyLCBsaWZl dGltZSkgPT0gMCkgewotKwkJCXVfaW50IGZpbHRlcjsKLSsKLSsJCQl0ZW1wb3JhcmlseV91c2Vf dWlkKGF1dGhjdHh0LT5wdyk7Ci0rCQkJLyoKLSsJCQkgKiBBbHdheXMgY3JlYXRlIHRoZSBjY2Fj aGUgdmlhIHN0b3JlY3JlZHNfczR1MnNlbGYgc28KLSsJCQkgKiB0aGF0IHM0dTJwcm94eSBoYXMg YSBjY2FjaGUgdG8gc3RvcmUgdGlja2V0cyBpbnRvLgotKwkJCSAqIGdzc19rcmI1X2NvcHlfY2Nh Y2hlKCkgY29waWVzIHRoZSBob3N0IHNlcnZpY2UncyBvd24KLSsJCQkgKiBUR1QgYWxvbmcgd2l0 aCB0aGUgZXZpZGVuY2UgdGlja2V0OyBmaWx0ZXJfY2NhY2hlCi0rCQkJICogcmVtb3ZlcyB0aGUg dGlja2V0IGNsYXNzZXMgdGhhdCBzaG91bGQgbm90IGJlIGtlcHQuCi0rCQkJICovCi0rCQkJc3No X2dzc2FwaV9zdG9yZWNyZWRzX3M0dTJzZWxmKCk7Ci0rCQkJaWYgKG9wdGlvbnMubnVtX2dzc19w cm94eV9zZXJ2aWNlcyA+IDApCi0rCQkJCXNzaF9nc3NhcGlfczR1MnByb3h5KAotKwkJCQkgICAg b3B0aW9ucy5nc3NfcHJveHlfc2VydmljZXMsCi0rCQkJCSAgICBvcHRpb25zLm51bV9nc3NfcHJv eHlfc2VydmljZXMsCi0rCQkJCSAgICBsaWZldGltZSk7Ci0rCi0rCQkJLyoKLSsJCQkgKiBSZW1v dmUgdGhlIGhvc3QgVEdUIG9ubHkgaW4gR1NTQVBJQWxsb3dTNFUyU2VsZi1hbG9uZQotKwkJCSAq IG1vZGU7IHdoZW4gcHJveHkgdGlja2V0cyBhcmUgcHJlc2VudCB0aGUgVEdUIG11c3QKLSsJCQkg KiBzdGF5IHNvIHRoYXQgYXBwbGljYXRpb25zIHJlY29nbmlzZSB0aGUgY2NhY2hlIGFzCi0rCQkJ ICogaG9sZGluZyBsaXZlIEtlcmJlcm9zIGNyZWRlbnRpYWxzLgotKwkJCSAqIFJlbW92ZSB0aGUg UzRVMlNlbGYgZXZpZGVuY2UgdGlja2V0IGluIHByb3h5LW9ubHkKLSsJCQkgKiBtb2RlIChHU1NB UElQcm94eVM0VTJTZXJ2aWNlcyB3aXRob3V0IEdTU0FQSUFsbG93UzRVMlNlbGYpLgotKwkJCSAq LwotKwkJCWZpbHRlciA9IDA7Ci0rCQkJaWYgKG9wdGlvbnMuZ3NzX2FsbG93X3M0dTJzZWxmICYm Ci0rCQkJICAgIG9wdGlvbnMubnVtX2dzc19wcm94eV9zZXJ2aWNlcyA9PSAwKQotKwkJCQlmaWx0 ZXIgPSBTU0hfR1NTQVBJX0NDRklMVEVSX1RHVCB8Ci0rCQkJCSAgICBTU0hfR1NTQVBJX0NDRklM VEVSX1BST1hZOwotKwkJCWVsc2UgaWYgKCFvcHRpb25zLmdzc19hbGxvd19zNHUyc2VsZikKLSsJ CQkJZmlsdGVyID0gU1NIX0dTU0FQSV9DQ0ZJTFRFUl9TRUxGOwotKwkJCWlmIChmaWx0ZXIgIT0g MCkKLSsJCQkJc3NoX2dzc2FwaV9rcmI1X2ZpbHRlcl9jY2FjaGUoZmlsdGVyLAotKwkJCQkgICAg b3B0aW9ucy5nc3NfcHJveHlfc2VydmljZXMsCi0rCQkJCSAgICBvcHRpb25zLm51bV9nc3NfcHJv eHlfc2VydmljZXMpOwotKwkJCXJlc3RvcmVfdWlkKCk7Ci0rCQl9IGVsc2UgewotKwkJCWxvZ2l0 KCJTNFUyU2VsZiBmYWlsZWQgZm9yIHVzZXIgJS4xMDBzLCBjb250aW51aW5nIiwKLSsJCQkgICAg YXV0aGN0eHQtPnVzZXIpOwotKwkJfQotKwl9Ci0gI2VuZGlmCi0gI2lmZGVmIFdJVEhfU0VMSU5V WAotIAlzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KGF1dGhjdHh0LT5wdy0+cHdfbmFt ZSwKLWRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggYzI4 MjIwMDc3Li4zMGQxZDU5ZGEgMTAwNjQ0Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hk X2NvbmZpZy41Ci1AQCAtODQ2LDYgKzg0Niw3NiBAQCBGSURPMi1iYXNlZCBwcmUtYXV0aGVudGlj YXRpb24gaW4gRnJlZUlQQSwgdXNpbmcgRklETzIgVVNCIGFuZCBORkMgdG9rZW5zCi0gVGhlIGRl ZmF1bHQKLSAuRHEgbm9uZQotIGlzIHRvIG5vdCB1c2UgR1NTQVBJIGF1dGhlbnRpY2F0aW9uIGlu ZGljYXRvcnMgZm9yIGFjY2VzcyBkZWNpc2lvbnMuCi0rLkl0IENtIEdTU0FQSUFsbG93UzRVMlNl bGYKLStDb250cm9scyB3aGV0aGVyIHRoZSBTU0ggc2VydmVyIHBlcmZvcm1zIGEgS2VyYmVyb3Mg cHJvdG9jb2wgdHJhbnNpdGlvbgotKyhTNFUyU2VsZikgYWZ0ZXIgYSBzdWNjZXNzZnVsIGF1dGhl bnRpY2F0aW9uIHVzaW5nIGFueSBvdGhlciBtZXRob2QuCi0rQWNjZXB0ZWQgdmFsdWVzIGFyZQot Ky5DbSBubyAsCi0rLkNtIHllcyAsCi0rb3IgYSB0aW1lIGludGVydmFsIChzZWUKLSsuU3ggVElN RSBGT1JNQVRTCi0rYmVsb3cpLgotKy5DbSBubwotK2Rpc2FibGVzIFM0VTJTZWxmIGVudGlyZWx5 LgotKy5DbSB5ZXMKLStlbmFibGVzIFM0VTJTZWxmIGFuZCByZXF1ZXN0cyBhIHRpY2tldCB3aXRo IHRoZSBtYXhpbXVtIGxpZmV0aW1lCi0rcGVybWl0dGVkIGJ5IHRoZSBLREMuCi0rQSB0aW1lIGlu dGVydmFsIChlLmcuXCYKLSsuQ20gOGggLAotKy5DbSAxZCApCi0rZW5hYmxlcyBTNFUyU2VsZiBh bmQgcmVxdWVzdHMgYSB0aWNrZXQgdmFsaWQgZm9yIGF0IG1vc3QgdGhhdCBkdXJhdGlvbi4KLStU aGUgb3B0aW9uIGlzIGEgbm8tb3Agd2hlbiBkZWxlZ2F0ZWQgR1NTQVBJIGNyZWRlbnRpYWxzIGFy ZSBhbHJlYWR5IGF2YWlsYWJsZS4KLStUaGUgb2J0YWluZWQgc2VydmljZSB0aWNrZXQgaXMgc3Rv cmVkIGluIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzIGNhY2hlIGFuZCBpcwotK2FjY2Vzc2libGUg dG8gYW55IGFwcGxpY2F0aW9uIHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgS2VyYmVyb3MgaG9zdCBw cmluY2lwYWwKLSsuUHEgaG9zdC9tYWNoaW5lLmZxZG5AUkVBTE0KLStjcmVkZW50aWFscyBvbiB0 aGUgc2FtZSBob3N0LgotKy5QcAotK1RoZSBkZWZhdWx0IGlzCi0rLkNtIG5vIC4KLSsuSXQgQ20g R1NTQVBJUHJveHlTNFUyU2VydmljZXMKLStTcGVjaWZpZXMgYSBsaXN0IG9mIEtlcmJlcm9zIHNl cnZpY2UgcHJpbmNpcGFscyBmb3Igd2hpY2ggY29uc3RyYWluZWQKLStkZWxlZ2F0aW9uIChTNFUy UHJveHkpIHRpY2tldHMgc2hvdWxkIGJlIG9idGFpbmVkIGFmdGVyIGEgc3VjY2Vzc2Z1bAotK1M0 VTJTZWxmIHByb3RvY29sIHRyYW5zaXRpb24uCi0rRWFjaCBlbnRyeSBtdXN0IGJlIGEgZnVsbHkt cXVhbGlmaWVkIEtlcmJlcm9zIHByaW5jaXBhbCBuYW1lIG9mIHRoZSBmb3JtCi0rLkFyIHNlcnZp Y2UvaG9zdEBSRUFMTSAuCi0rTXVsdGlwbGUgcHJpbmNpcGFscyBtYXkgYmUgbGlzdGVkLCBzZXBh cmF0ZWQgYnkgd2hpdGVzcGFjZS4KLStUaGUga2V5d29yZAotKy5DbSBub25lCi0rY2xlYXJzIGFu eSBwcmV2aW91c2x5IHNldCBsaXN0LgotKy5QcAotK1RoaXMgb3B0aW9uIG1heSBiZSB1c2VkIGlu ZGVwZW5kZW50bHkgb2YKLSsuQ20gR1NTQVBJQWxsb3dTNFUyU2VsZiAuCi0rV2hlbiBTNFUyU2Vs ZiBzdWNjZWVkcywgdGhlIHNlcnZlciBpdGVyYXRlcyB0aGUgbGlzdCBhbmQgY2FsbHMKLSsuWHIg Z3NzX2luaXRfc2VjX2NvbnRleHQgMwotK2ZvciBlYWNoIHByaW5jaXBhbCB3aXRoIHRoZSBwcm94 eSBjcmVkZW50aWFsIG9idGFpbmVkIGJ5IFM0VTJTZWxmIGFzCi0rdGhlIGluaXRpYXRvci4KLStU aGUgR1NTQVBJIGxpYnJhcnkgcHJlc2VudHMgdGhlIGV2aWRlbmNlIHRpY2tldCB0byB0aGUgS0RD IHZpYSBhbgotK1M0VTJQcm94eSBUR1MtUkVROyBpZiB0aGUgaG9zdCBzZXJ2aWNlIGhvbGRzIHRo ZSBuZWNlc3NhcnkgY29uc3RyYWluZWQtCi0rZGVsZWdhdGlvbiBwZXJtaXNzaW9uIGluIHRoZSBL REMsIGEgc2VydmljZSB0aWNrZXQgZnJvbSB0aGUgdXNlciB0bwotK3RoZSB0YXJnZXQgc2Vydmlj ZSBpcyBpc3N1ZWQuCi0rVGhlc2UgdGlja2V0cyBhcmUgYWNjdW11bGF0ZWQgYW5kIHRoZW4gZmx1 c2hlZCBpbnRvIHRoZSB1c2VyJ3MgY2NhY2hlCi0rdmlhCi0rLlhyIGdzc19zdG9yZV9jcmVkIDMg LAotK3NvIHRoYXQgYW55IGFwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlIHVzZXIncyBzZXNzaW9u IGNhbiB1c2UgdGhlbQotK3dpdGhvdXQgZnVydGhlciBpbnRlcmFjdGlvbi4KLStUaGUgQVAtUkVR IG91dHB1dCB0b2tlbiBvZiBlYWNoCi0rLlhyIGdzc19pbml0X3NlY19jb250ZXh0IDMKLStjYWxs IGlzIGRpc2NhcmRlZDsgbm8gbmV0d29yayBjb25uZWN0aW9uIHRvIHRoZSB0YXJnZXQgc2Vydmlj ZSBpcyBtYWRlLgotKy5QcAotK1doZW4gdXNlZCB0b2dldGhlciB3aXRoCi0rLkNtIEdTU0FQSUFs bG93UzRVMlNlbGYgLAotK3RoZSBUR1QgYW5kIFM0VTJTZWxmIHRpY2tldCBhcmUgYWxzbyBzdG9y ZWQgaW4gdGhlIHVzZXIncyBjY2FjaGUgaW4KLSthZGRpdGlvbiB0byB0aGUgUzRVMlByb3h5IHNl cnZpY2UgdGlja2V0cy4KLStXaGVuIHVzZWQgYWxvbmUgKHdpdGhvdXQKLSsuQ20gR1NTQVBJQWxs b3dTNFUyU2VsZiApICwKLStvbmx5IHRoZSBTNFUyUHJveHkgc2VydmljZSB0aWNrZXRzIGFyZSBz dG9yZWQ7IHRoZSBpbnRlcm1lZGlhdGUgUzRVMlNlbGYKLStjcmVkZW50aWFsIGlzIG5vdCBwbGFj ZWQgaW4gdGhlIHVzZXIncyBjY2FjaGUuCi0rLlBwCi0rVGhpcyBvcHRpb24gc3VwcG9ydHMKLSsu Q20gTWF0Y2gKLStibG9ja3MsIGFsbG93aW5nIHBlci11c2VyIG9yIHBlci1ob3N0IGxpc3RzIG9m IGRlbGVnYXRpb24gdGFyZ2V0cy4KLSsuUHAKLStUaGUgZGVmYXVsdCBpcyBlbXB0eSAobm8gUzRV MlByb3h5IGRlbGVnYXRpb24gaXMgcGVyZm9ybWVkKS4KLSAuSXQgQ20gSG9zdGJhc2VkQWNjZXB0 ZWRBbGdvcml0aG1zCi0gVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQotIC5Y ciBjcnlwdG8tcG9saWNpZXMgNyAuCi0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvMDA1Mi1v cGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBhdGNoIGIvMDA1Mi1vcGVuc3NoLTEwLjJwMS1wa2Nz MTEtdXJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNjgyNTEK LS0tIC9kZXYvbnVsbAorKysgYi8wMDUyLW9wZW5zc2gtMTAuMnAxLXBrY3MxMS11cmkucGF0Y2gK QEAgLTAsMCArMSwzNDIzIEBACitGcm9tIGRjNGQxMzdjYzc5YjNlYzQ1ZWQ3NjI0YzQzN2U4NjQw OTgwODQzOGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tp eSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBNb24sIDE1IERlYyAyMDI1IDE0OjI0OjA3ICsw MTAwCitTdWJqZWN0OiBbUEFUQ0ggNTIvNTNdIG9wZW5zc2gtMTAuMnAxLXBrY3MxMS11cmkKKwor LS0tCisgLmRlcGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIE1ha2VmaWxl LmluICAgICAgICAgICAgICAgICAgICAgIHwgIDI2ICstCisgY29uZmlndXJlLmFjICAgICAgICAg ICAgICAgICAgICAgfCAgMzcgKysKKyByZWdyZXNzL01ha2VmaWxlICAgICAgICAgICAgICAgICB8 ICAgNSArLQorIHJlZ3Jlc3MvcGtjczExLXVyaS5zaCAgICAgICAgICAgIHwgNDEwICsrKysrKysr KysrKysrKysKKyByZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZSAgICAgICB8ICAgMiArLQorIHJl Z3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0cy5jIHwgMzUzICsrKysrKysrKysrKysrCisgc3No LWFkZC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDggKy0KKyBzc2gtYWdlbnQuYyAgICAg ICAgICAgICAgICAgICAgICB8IDExNyArKysrLQorIHNzaC1rZXlnZW4uYyAgICAgICAgICAgICAg ICAgICAgIHwgICA3ICstCisgc3NoLXBrY3MxMS1jbGllbnQuYyAgICAgICAgICAgICAgfCAgMTkg KworIHNzaC1wa2NzMTEtdXJpLmMgICAgICAgICAgICAgICAgIHwgNDM4ICsrKysrKysrKysrKysr KysrKworIHNzaC1wa2NzMTEtdXJpLmggICAgICAgICAgICAgICAgIHwgIDQ2ICsrCisgc3NoLXBr Y3MxMS5jICAgICAgICAgICAgICAgICAgICAgfCA3NzEgKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLQorIHNzaC1wa2NzMTEuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKKyBzc2gu YyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwNCArKysrLQorIHNzaF9jb25maWcuNSAg ICAgICAgICAgICAgICAgICAgIHwgIDE1ICsKKyBzc2hrZXkuYyAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNCArCisgMTggZmlsZXMgY2hhbmdlZCwgMjEzNCBpbnNlcnRpb25zKCspLCAyNzMg ZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHJlZ3Jlc3MvcGtjczExLXVyaS5zaAor IGNyZWF0ZSBtb2RlIDEwMDY0NCByZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdHMuYworIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzc2gtcGtjczExLXVyaS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNz aC1wa2NzMTEtdXJpLmgKKworZGlmZiAtLWdpdCBhLy5kZXBlbmQgYi8uZGVwZW5kCitpbmRleCA0 NWFkMmJmNGUuLmI0MzBjN2U3NyAxMDA2NDQKKy0tLSBhLy5kZXBlbmQKKysrKyBiLy5kZXBlbmQK K0BAIC0xNDUsNiArMTQ1LDcgQEAgc3NoLW1sZHNhLWVkZHNhLm86IGluY2x1ZGVzLmggY29uZmln LmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmIKKyBzc2gtcGtjczEx LWNsaWVudC5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5i c2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvYmFzZTY0Lmggb3BlbmJz ZC1jb21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuaCBvcGVuYnNk LWNvbXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oIG9wZW5ic2QtY29t cGF0L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5ic2QtY29tcGF0L21kNS5o IG9wZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0Y2guaCBvcGVuYnNkLWNv bXBhdC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmggb3BlbmJzZC1jb21wYXQv YnNkLW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmggb3BlbmJzZC1jb21wYXQv YnNkLXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5oIG9wZW5ic2QtY29tcGF0 L2JzZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmggb3BlbmJzZC1jb21wYXQv YnNkLWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaCBvcGVuYnNkLWNvbXBh dC9wb3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmggb3BlbmJzZC1jb21wYXQv cG9ydC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1uZXQuaCBvcGVuYnNkLWNvbXBhdC9w b3J0LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVwLmggZW50cm9weS5oIHBhdGhuYW1l cy5oIHhtYWxsb2MuaCBzc2hidWYuaCBsb2cuaCBzc2hlcnIuaCBtaXNjLmggc3Noa2V5LmggYXV0 aGZkLmggYXRvbWljaW8uaCBzc2gtcGtjczExLmgKKyBzc2gtcGtjczExLWhlbHBlci5vOiBpbmNs dWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5i c2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0 Lmggb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBv cGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVu YnNkLWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0 L2JsZi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBv cGVuYnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVu YnNkLWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBv cGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3Bl bmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGls Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBv cGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmgg b3BlbmJzZC1jb21wYXQvcG9ydC1uZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJz ZC1jb21wYXQvYnNkLW5leHRzdGVwLmggZW50cm9weS5oIHhtYWxsb2MuaCBzc2hidWYuaCBsb2cu aCBzc2hlcnIuaCBtaXNjLmggc3Noa2V5LmggYXV0aGZkLmggc3NoLXBrY3MxMS5oCisgc3NoLXBr Y3MxMS5vOiBpbmNsdWRlcy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2Qt Y29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvYmFzZTY0Lmggb3BlbmJzZC1j b21wYXQvc2lnYWN0Lmggb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNv bXBhdC92aXMuaCBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0 L3NoYTEuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5ic2QtY29tcGF0L21kNS5oIG9w ZW5ic2QtY29tcGF0L2JsZi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBh dC9nZXRvcHQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmggb3BlbmJzZC1jb21wYXQvYnNk LW1pc2MuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmggb3BlbmJzZC1jb21wYXQvYnNk LXN0YXR2ZnMuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1wb2xsLmggb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmggb3BlbmJzZC1jb21wYXQvYnNk LWN5Z3dpbl91dGlsLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaCBvcGVuYnNkLWNvbXBhdC9w b3J0LWlyaXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmggb3BlbmJzZC1jb21wYXQvcG9y dC1zb2xhcmlzLmggb3BlbmJzZC1jb21wYXQvcG9ydC1uZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0 LXV3Lmggb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVwLmggZW50cm9weS5oIGxvZy5oIHNzaGVy ci5oIHNzaGtleS5oIHNzaC1wa2NzMTEuaAorK3NzaC1wa2NzMTEtdXJpLm86IGluY2x1ZGVzLmgg Y29uZmlnLmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21w YXQuaCBvcGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVu YnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2Qt Y29tcGF0L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29t cGF0L2JzZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmgg b3BlbmJzZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2Qt Y29tcGF0L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29t cGF0L2JzZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2Qt Y29tcGF0L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNv bXBhdC9mYWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVu YnNkLWNvbXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2Qt Y29tcGF0L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNk LWNvbXBhdC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBh dC9ic2QtbmV4dHN0ZXAuaCBlbnRyb3B5LmgKKyBzc2gtcnNhLm86IGluY2x1ZGVzLmggY29uZmln LmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBv cGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNv bXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0 L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJz ZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0 L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0 L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9m YWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNv bXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0 L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBh dC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt bmV4dHN0ZXAuaCBlbnRyb3B5LmgKKyBzc2gtc2stY2xpZW50Lm86IGluY2x1ZGVzLmggY29uZmln LmggZGVmaW5lcy5oIHBsYXRmb3JtLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBv cGVuYnNkLWNvbXBhdC9iYXNlNjQuaCBvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaCBvcGVuYnNkLWNv bXBhdC9yZWFkcGFzc3BocmFzZS5oIG9wZW5ic2QtY29tcGF0L3Zpcy5oIG9wZW5ic2QtY29tcGF0 L2dldHJyc2V0YnluYW1lLmggb3BlbmJzZC1jb21wYXQvc2hhMS5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1zaGEyLmggb3BlbmJzZC1jb21wYXQvbWQ1Lmggb3BlbmJzZC1jb21wYXQvYmxmLmggb3BlbmJz ZC1jb21wYXQvZm5tYXRjaC5oIG9wZW5ic2QtY29tcGF0L2dldG9wdC5oIG9wZW5ic2QtY29tcGF0 L2JzZC1zaWduYWwuaCBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5oIG9wZW5ic2QtY29tcGF0L2Jz ZC1zZXRyZXNfaWQuaCBvcGVuYnNkLWNvbXBhdC9ic2Qtc3RhdHZmcy5oIG9wZW5ic2QtY29tcGF0 L2JzZC13YWl0cGlkLmggb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuaCBvcGVuYnNkLWNvbXBhdC9m YWtlLXJmYzI1NTMuaCBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaCBvcGVuYnNkLWNv bXBhdC9wb3J0LWFpeC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5oIG9wZW5ic2QtY29tcGF0 L3BvcnQtbGludXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaCBvcGVuYnNkLWNvbXBh dC9wb3J0LW5ldC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC9ic2Qt bmV4dHN0ZXAuaCBlbnRyb3B5LmggbG9nLmggc3NoZXJyLmggc3NoYnVmLmggc3Noa2V5LmggbXNn LmggcGF0aG5hbWVzLmggc3NoLXNrLmggbWlzYy5oCisgc3NoLXNrLWhlbHBlci5vOiBpbmNsdWRl cy5oIGNvbmZpZy5oIGRlZmluZXMuaCBwbGF0Zm9ybS5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2Qt Y29tcGF0Lmggb3BlbmJzZC1jb21wYXQvYmFzZTY0Lmggb3BlbmJzZC1jb21wYXQvc2lnYWN0Lmgg b3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuaCBvcGVuYnNkLWNvbXBhdC92aXMuaCBvcGVu YnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oIG9wZW5ic2QtY29tcGF0L3NoYTEuaCBvcGVuYnNk LWNvbXBhdC9ic2Qtc2hhMi5oIG9wZW5ic2QtY29tcGF0L21kNS5oIG9wZW5ic2QtY29tcGF0L2Js Zi5oIG9wZW5ic2QtY29tcGF0L2ZubWF0Y2guaCBvcGVuYnNkLWNvbXBhdC9nZXRvcHQuaCBvcGVu YnNkLWNvbXBhdC9ic2Qtc2lnbmFsLmggb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaCBvcGVuYnNk LWNvbXBhdC9ic2Qtc2V0cmVzX2lkLmggb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMuaCBvcGVu YnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5oIG9wZW5ic2QtY29tcGF0L2JzZC1wb2xsLmggb3BlbmJz ZC1jb21wYXQvZmFrZS1yZmMyNTUzLmggb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmgg b3BlbmJzZC1jb21wYXQvcG9ydC1haXguaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguaCBvcGVu YnNkLWNvbXBhdC9wb3J0LWxpbnV4Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmggb3Bl bmJzZC1jb21wYXQvcG9ydC1uZXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1j b21wYXQvYnNkLW5leHRzdGVwLmggZW50cm9weS5oIHhtYWxsb2MuaCBsb2cuaCBzc2hlcnIuaCBz c2hrZXkuaCBhdXRoZmQuaCBtaXNjLmggc3NoYnVmLmggbXNnLmggdWlkc3dhcC5oIHNzaC1zay5o IHNzaC1wa2NzMTEuaAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2lu ZGV4IGY2MWY4OWU0ZC4uMjNkNWY5MDhhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBi L01ha2VmaWxlLmluCitAQCAtMTEzLDEyICsxMTMsMTIgQEAgTElCU1NIX09CSlM9JHtMSUJPUEVO U1NIX09CSlN9IFwKKyAJc2Z0cC1yZWFscGF0aC5vIHBsYXRmb3JtLXBsZWRnZS5vIHBsYXRmb3Jt LXRyYWNpbmcubyBwbGF0Zm9ybS1taXNjLm8gXAorIAlzc2hidWYtaW8ubyBtaXNjLWFnZW50Lm8g c3NoZXJyLWxpYmNyeXB0by5vIGF1ZGl0c3R1Yi5vCisgCistUDExT0JKUz0gc3NoLXBrY3MxMS1j bGllbnQubworK1AxMU9CSlM9IHNzaC1wa2NzMTEtY2xpZW50Lm8gc3NoLXBrY3MxMS11cmkubwor IAorIFNLT0JKUz0Jc3NoLXNrLWNsaWVudC5vCisgCisgU1NIT0JKUz0gc3NoLm8gcmVhZGNvbmYu byBjbGllbnRsb29wLm8gc3NodHR5Lm8gXAorLQlzc2hjb25uZWN0Lm8gc3NoY29ubmVjdDIubyBt dXgubyBzc2gtcGtjczExLm8gJChTS09CSlMpCisrCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5v IG11eC5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQorIAorIFNTSERP QkpTPXNzaGQubyBcCisgCXBsYXRmb3JtLWxpc3Rlbi5vIFwKK0BAIC0xNjIsMTEgKzE2MiwxMSBA QCBTU0hBRERfT0JKUz0Jc3NoLWFkZC5vICQoUDExT0JKUykgJChTS09CSlMpCisgCisgU1NIQUdF TlRfT0JKUz0Jc3NoLWFnZW50Lm8gJChQMTFPQkpTKSAkKFNLT0JKUykKKyAKKy1TU0hLRVlHRU5f T0JKUz0Jc3NoLWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEubyAkKFNLT0JKUykKKytTU0hL RVlHRU5fT0JKUz0Jc3NoLWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczEx LXVyaS5vICQoU0tPQkpTKQorIAorIFNTSEtFWVNJR05fT0JKUz1zc2gta2V5c2lnbi5vIHJlYWRj b25mLm8gdWlkc3dhcC5vICQoUDExT0JKUykgJChTS09CSlMpCisgCistUDExSEVMUEVSX09CSlM9 CXNzaC1wa2NzMTEtaGVscGVyLm8gc3NoLXBrY3MxMS5vICQoU0tPQkpTKQorK1AxMUhFTFBFUl9P QkpTPQlzc2gtcGtjczExLWhlbHBlci5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQo U0tPQkpTKQorIAorIFNLSEVMUEVSX09CSlM9CXNzaC1zay1oZWxwZXIubyBzc2gtc2subyBzay11 c2JoaWQubyBzc2hlcnItbm9saWJjcnlwdG8ubworIAorQEAgLTMzNiw2ICszMzYsOCBAQCBjbGVh bjoJcmVncmVzc2NsZWFuCisgCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3NzaHNpZy90ZXN0X3Nz aHNpZyQoRVhFRVhUKQorIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4LyoubworIAlybSAt ZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKQorKwlybSAtZiByZWdy ZXNzL3VuaXR0ZXN0cy9wa2NzMTEvKi5vCisrCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3Mx MS90ZXN0X3BrY3MxMSQoRVhFRVhUKQorIAlybSAtZiByZWdyZXNzL21pc2Mvc2stZHVtbXkvKi5v CisgCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8qLmxvCisgCXJtIC1mIHJlZ3Jlc3MvbWlz Yy9zc2gtdmVyaWZ5LWF0dGVzdGF0aW9uL3NzaC12ZXJpZnktYXR0ZXN0YXRpb24kKEVYRUVYVCkK K0BAIC0zNzksNiArMzgxLDggQEAgZGlzdGNsZWFuOglyZWdyZXNzY2xlYW4KKyAJcm0gLWYgcmVn cmVzcy91bml0dGVzdHMvc3Noc2lnL3Rlc3Rfc3Noc2lnCisgCXJtIC1mIHJlZ3Jlc3MvdW5pdHRl c3RzL3V0ZjgvKi5vCisgCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3V0ZjgvdGVzdF91dGY4Cisr CXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS8qLm8KKysJcm0gLWYgcmVncmVzcy91bml0 dGVzdHMvcGtjczExL3Rlc3RfcGtjczExCisgCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8q Lm8KKyAJcm0gLWYgcmVncmVzcy9taXNjL3NrLWR1bW15LyoubG8KKyAJcm0gLWYgcmVncmVzcy9t aXNjL3NrLWR1bW15L3NrLWR1bW15LnNvCitAQCAtNTYxLDYgKzU2NSw3IEBAIHJlZ3Jlc3MtcHJl cDoKKyAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkKKyAJJChNS0RJ Ul9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hzaWcKKyAJJChNS0RJUl9QKSBgcHdkYC9y ZWdyZXNzL3VuaXR0ZXN0cy91dGY4CisrCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy91bml0dGVz dHMvcGtjczExCisgCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy9taXNjL3NrLWR1bW15CisgCSQo TUtESVJfUCkgYHB3ZGAvcmVncmVzcy9taXNjL3NzaC12ZXJpZnktYXR0ZXN0YXRpb24KKyAJWyAt ZiBgcHdkYC9yZWdyZXNzL01ha2VmaWxlIF0gfHwgXAorQEAgLTc2NCw2ICs3NjksMTYgQEAgcmVn cmVzcy91bml0dGVzdHMvdXRmOC90ZXN0X3V0ZjgkKEVYRUVYVCk6IFwKKyAJICAgIHJlZ3Jlc3Mv dW5pdHRlc3RzL3Rlc3RfaGVscGVyL2xpYnRlc3RfaGVscGVyLmEgXAorIAkgICAgLWxzc2ggLWxv cGVuYnNkLWNvbXBhdCAtbHNzaCAtbG9wZW5ic2QtY29tcGF0ICQoVEVTVExJQlMpCisgCisrVU5J VFRFU1RTX1RFU1RfUEtDUzExX09CSlM9XAorKwlyZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVz dHMubworKworK3JlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0X3BrY3MxMSQoRVhFRVhUKTog XAorKyAgICAke1VOSVRURVNUU19URVNUX1BLQ1MxMV9PQkpTfSBzc2gtcGtjczExLXVyaS5vIFwK KysgICAgcmVncmVzcy91bml0dGVzdHMvdGVzdF9oZWxwZXIvbGlidGVzdF9oZWxwZXIuYSBsaWJz c2guYQorKwkkKExEKSAtbyAkQCAkKExERkxBR1MpICQoVU5JVFRFU1RTX1RFU1RfUEtDUzExX09C SlMpIFwKKysJICAgIHJlZ3Jlc3MvdW5pdHRlc3RzL3Rlc3RfaGVscGVyL2xpYnRlc3RfaGVscGVy LmEgXAorKwkgICAgc3NoLXBrY3MxMS11cmkubyAtbHNzaCAtbG9wZW5ic2QtY29tcGF0IC1sY3J5 cHRvICQoTElCUykgLWxtCisrCisgIyBUaGVzZSBhbGwgbmVlZCB0byBiZSBjb21waWxlZCAtZlBJ Qywgc28gdGhleSBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4KKyBTS19EVU1NWV9PQkpTPVwKKyAJ cmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LmxvIFwKK0BAIC04MTEsNyArODI2LDggQEAg cmVncmVzcy11bml0LWJpbmFyaWVzOiByZWdyZXNzLXByZXAgJChSRUdSRVNTTElCUykgXAorIAly ZWdyZXNzL3VuaXR0ZXN0cy9zc2hidWYvdGVzdF9zc2hidWYkKEVYRUVYVCkgXAorIAlyZWdyZXNz L3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkkKEVYRUVYVCkgXAorIAlyZWdyZXNzL3VuaXR0 ZXN0cy9zc2hzaWcvdGVzdF9zc2hzaWckKEVYRUVYVCkgXAorLQlyZWdyZXNzL3VuaXR0ZXN0cy91 dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKQorKwlyZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRm OCQoRVhFRVhUKSBcCisrCXJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0X3BrY3MxMSQoRVhF RVhUKSBcCisgCisgdGVzdHM6CWZpbGUtdGVzdHMgdC1leGVjIGludGVyb3AtdGVzdHMgZXh0cmEt dGVzdHMgdW5pdAorIAllY2hvIGFsbCB0ZXN0cyBwYXNzZWQKK2RpZmYgLS1naXQgYS9jb25maWd1 cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGIyYzk1OWZmMy4uYzM3YjAyZWZiIDEwMDY0NAor LS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMzA1LDEyICsyMzA1 LDE0IEBAIEFDX0xJTktfSUZFTFNFKAorIAlbQUNfREVGSU5FKFtIQVZFX0lTQkxBTktdLCBbMV0s IFtEZWZpbmUgaWYgeW91IGhhdmUgaXNibGFuaygzQykuXSkKKyBdKQorIAorK1NDQVJEX01TRz0i eWVzIgorIGRpc2FibGVfcGtjczExPQorIEFDX0FSR19FTkFCTEUoW3BrY3MxMV0sCisgCVsgIC0t ZGlzYWJsZS1wa2NzMTEgICAgICAgIGRpc2FibGUgUEtDUyMxMSBzdXBwb3J0IGNvZGUgW25vXV0s CisgCVsKKyAJCWlmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4bm8iIDsgdGhlbgorIAkJCWRpc2Fi bGVfcGtjczExPTEKKysJCQlTQ0FSRF9NU0c9Im5vIgorIAkJZmkKKyAJXQorICkKK0BAIC0yMzQw LDYgKzIzNDIsNDAgQEAgQUNfU0VBUkNIX0xJQlMoW2Rsb3Blbl0sIFtkbF0pCisgQUNfQ0hFQ0tf RlVOQ1MoW2Rsb3Blbl0pCisgQUNfQ0hFQ0tfREVDTChbUlRMRF9OT1ddLCBbXSwgW10sIFsjaW5j bHVkZSA8ZGxmY24uaD5dKQorIAorKyMgQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgcDExLWtpdCwg d2UgZ290IGRlZmF1bHQgcHJvdmlkZXIgb24gY29tbWFuZCBsaW5lCisrREVGQVVMVF9QS0NTMTFf UFJPVklERVJfTVNHPSJubyIKKytBQ19BUkdfV0lUSChbZGVmYXVsdC1wa2NzMTEtcHJvdmlkZXJd LAorKwlbICAtLXdpdGgtZGVmYXVsdC1wa2NzMTEtcHJvdmlkZXJbWz1QQVRIXV0gICBVc2UgZGVm YXVsdCBwa2NzMTEgcHJvdmlkZXIgKHAxMS1raXQgZGV0ZWN0ZWQgYnkgZGVmYXVsdCldLAorKwlb IGlmIHRlc3QgIngkd2l0aHZhbCIgIT0gInhubyIgJiYgdGVzdCAieCRkaXNhYmxlX3BrY3MxMSIg PSAieCI7IHRoZW4KKysJCWlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyIgOyB0aGVuCisrCQkJ QUNfUEFUSF9UT09MKFtQS0dDT05GSUddLCBbcGtnLWNvbmZpZ10sIFtub10pCisrCQkJaWYgdGVz dCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCisrCQkJCUFDX01TR19DSEVDS0lORyhbaWYg JFBLR0NPTkZJRyBrbm93cyBhYm91dCBwMTEta2l0XSkKKysJCQkJaWYgIiRQS0dDT05GSUciICJw MTEta2l0LTEiOyB0aGVuCisrCQkJCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorKwkJCQkJdXNlX3Br Z2NvbmZpZ19mb3JfcDExa2l0PXllcworKwkJCQllbHNlCisrCQkJCQlBQ19NU0dfUkVTVUxUKFtu b10pCisrCQkJCWZpCisrCQkJZmkKKysJCWVsc2UKKysJCQlQS0NTMTFfUEFUSD0iJHt3aXRodmFs fSIKKysJCWZpCisrCQlpZiB0ZXN0ICJ4JHVzZV9wa2djb25maWdfZm9yX3AxMWtpdCIgPSAieHll cyI7IHRoZW4KKysJCQlQS0NTMTFfUEFUSD1gJFBLR0NPTkZJRyAtLXZhcmlhYmxlPXByb3h5X21v ZHVsZSBwMTEta2l0LTFgCisrCQlmaQorKwkJQUNfQ0hFQ0tfRklMRSgiJFBLQ1MxMV9QQVRIIiwK KysJCQlbIEFDX0RFRklORV9VTlFVT1RFRChbUEtDUzExX0RFRkFVTFRfUFJPVklERVJdLCBbIiRQ S0NTMTFfUEFUSCJdLCBbUGF0aCB0byBkZWZhdWx0IFBLQ1MjMTEgcHJvdmlkZXIgKHAxMS1raXQg cHJveHkpXSkKKysJCQkgIERFRkFVTFRfUEtDUzExX1BST1ZJREVSX01TRz0iJFBLQ1MxMV9QQVRI IgorKwkJCV0sCisrCQkJWyBBQ19NU0dfRVJST1IoW1JlcXVlc3RlZCBQS0NTMTEgcHJvdmlkZWQg bm90IGZvdW5kXSkgXQorKwkJKQorKwllbHNlCisrCQlBQ19NU0dfV0FSTihbTmVlZHMgUEtDUzEx IHN1cHBvcnQgdG8gZW5hYmxlIGRlZmF1bHQgcGtjczExIHByb3ZpZGVyXSkKKysJZmkgXQorKykK KysKKysKKyAjIElSSVggaGFzIGEgY29uc3QgY2hhciByZXR1cm4gdmFsdWUgZm9yIGdhaV9zdHJl cnJvcigpCisgQUNfQ0hFQ0tfRlVOQ1MoW2dhaV9zdHJlcnJvcl0sIFsKKyAJQUNfREVGSU5FKFtI QVZFX0dBSV9TVFJFUlJPUl0pCitAQCAtNTkyMSw2ICs1OTU3LDcgQEAgZWNobyAiICAgICAgICAg ICAgICAgICAgQlNEIEF1dGggc3VwcG9ydDogJEJTRF9BVVRIX01TRyIKKyBlY2hvICIgICAgICAg ICAgICAgIFJhbmRvbSBudW1iZXIgc291cmNlOiAkUkFORF9NU0ciCisgZWNobyAiICAgICAgICAg ICAgIFByaXZzZXAgc2FuZGJveCBzdHlsZTogJFNBTkRCT1hfU1RZTEUiCisgZWNobyAiICAgICAg ICAgICAgICAgICAgIFBLQ1MjMTEgc3VwcG9ydDogJGVuYWJsZV9wa2NzMTEiCisrZWNobyAiICAg ICAgICAgIERlZmF1bHQgUEtDUyMxMSBwcm92aWRlcjogJERFRkFVTFRfUEtDUzExX1BST1ZJREVS X01TRyIKKyBlY2hvICIgICAgICAgICAgICAgICAgICBVMkYvRklETyBzdXBwb3J0OiAkZW5hYmxl X3NrIgorIAorIGVjaG8gIiIKK2RpZmYgLS1naXQgYS9yZWdyZXNzL01ha2VmaWxlIGIvcmVncmVz cy9NYWtlZmlsZQoraW5kZXggZmExOWFkYTI4Li40OTIxMTJlODAgMTAwNjQ0CistLS0gYS9yZWdy ZXNzL01ha2VmaWxlCisrKysgYi9yZWdyZXNzL01ha2VmaWxlCitAQCAtMTE4LDYgKzExOCw3IEBA IExURVNUUz0gCWNvbm5lY3QgXAorIAkJcGVuYWx0eS1leHBpcmUgXAorIAkJY29ubmVjdC1iaWdj b25mIFwKKyAJCXNzaC1wa2NzMTEgXAorKwkJcGtjczExLXVyaSBcCisgCQlzc2gtdHR5IFwKKyAJ CXByb3h5anVtcAorIAorQEAgLTE0NCw3ICsxNDUsOCBAQCBDTEVBTkZJTEVTPQkqLmNvcmUgYWN0 dWFsIGFnZW50LWtleS4qIGF1dGhvcml6ZWRfa2V5c18ke1VTRVJOQU1FfSBcCisgCQlrbm93bl9o b3N0cyBrbm93bl9ob3N0cy1jZXJ0IGtub3duX2hvc3RzLioga3JsLSogbHMuY29weSBcCisgCQlt b2RwaXBlIG5ldGNhdCBub19pZGVudGl0eV9jb25maWcgXAorIAkJcGlkZmlsZSBwdXR0eS5yc2Ey IHJlYWR5IHJlZ3Jlc3MubG9nIHJlbW90ZV9waWQgXAorLQkJcmV2b2tlZC0qIHJzYSByc2EtYWdl bnQgcnNhLWFnZW50LnB1YiByc2EucHViIHJzYV9zc2gyX2NyLnBydiBcCisrCQlyZXZva2VkLSog cnNhIHJzYS1hZ2VudCByc2EtYWdlbnQucHViIHJzYS1hZ2VudC1jZXJ0LnB1YiBcCisrCQlyc2Eu cHViIHJzYV9zc2gyX2NyLnBydiBwa2NzMTEqLmNydCBwa2NzMTEqLmtleSBwa2NzMTEuaW5mbyBc CisgCQlyc2Ffc3NoMl9jcm5sLnBydiBzY3Atc3NoLXdyYXBwZXIuZXhlIFwKKyAJCXNjcC1zc2gt d3JhcHBlci5zY3Agc2V0dWlkLWFsbG93ZWQgc2Z0cC1zZXJ2ZXIubG9nIFwKKyAJCXNmdHAtc2Vy dmVyLnNoIHNmdHAubG9nIHNzaC1sb2ctd3JhcHBlci5zaCBzc2gubG9nIFwKK0BAIC0yOTQsNiAr Mjk2LDcgQEAgdW5pdCB1bml0LWJlbmNoOgorIAkJdGVzdCAieCR7VU5JVFRFU1RfVkVSQk9TRX0i ID0gIngiIHx8IEFSR1M9IiQkQVJHUyAtdiI7IFwKKyAJCXRlc3QgIngke1VOSVRURVNUX0JFTkNI X0RFVEFJTH0iID0gIngiIHx8IEFSR1M9IiQkQVJHUyAtQiI7IFwKKyAJCXRlc3QgIngke1VOSVRU RVNUX0JFTkNIX09OTFl9IiA9ICJ4IiB8fCBBUkdTPSIkJEFSR1MgLU8gJHtVTklUVEVTVF9CRU5D SF9PTkxZfSI7IFwKKysJCSAkJFYgJHsuT0JKRElSfS91bml0dGVzdHMvcGtjczExL3Rlc3RfcGtj czExIDsgXAorIAkJICQkViAkey5PQkpESVJ9L3VuaXR0ZXN0cy9zc2hidWYvdGVzdF9zc2hidWYg JCR7QVJHU307IFwKKyAJCSAkJFYgJHsuT0JKRElSfS91bml0dGVzdHMvc3Noa2V5L3Rlc3Rfc3No a2V5IFwKKyAJCQktZCAkey5DVVJESVJ9L3VuaXR0ZXN0cy9zc2hrZXkvdGVzdGRhdGEgJCR7QVJH U307IFwKK2RpZmYgLS1naXQgYS9yZWdyZXNzL3BrY3MxMS11cmkuc2ggYi9yZWdyZXNzL3BrY3Mx MS11cmkuc2gKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLjcyZDY5YmRh MAorLS0tIC9kZXYvbnVsbAorKysrIGIvcmVncmVzcy9wa2NzMTEtdXJpLnNoCitAQCAtMCwwICsx LDQxMCBAQAorKyMKKysjICBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdAorKyMKKysjICBBdXRo b3JzOiBKYWt1YiBKZWxlbiA8amplbGVuQHJlZGhhdC5jb20+CisrIworKyMgIFBlcm1pc3Npb24g dG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFu eQorKyMgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJv dmlkZWQgdGhhdCB0aGUgYWJvdmUKKysjICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorKyMKKysjICBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJ RVMKKysjICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElF RCBXQVJSQU5USUVTIE9GCisrIyAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKysjICBBTlkgU1BFQ0lBTCwgRElS RUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisr IyAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRT LCBXSEVUSEVSIElOIEFOCisrIyAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9U SEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKysjICBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKworK3RpZD0i cGtjczExIHRlc3RzIHdpdGggc29mdCB0b2tlbiIKKysKKyt0cnlfdG9rZW5fbGlicygpIHsKKysJ Zm9yIF9saWIgaW4gIiRAIiA7IGRvCisrCQlpZiB0ZXN0IC1mICIkX2xpYiIgOyB0aGVuCisrCQkJ dmVyYm9zZSAiVXNpbmcgdG9rZW4gbGlicmFyeSAkX2xpYiIKKysJCQlURVNUX1NTSF9QS0NTMTE9 IiRfbGliIgorKwkJCXJldHVybgorKwkJZmkKKysJZG9uZQorKwllY2hvICJza2lwcGVkOiBVbmFi bGUgdG8gZmluZCBQS0NTIzExIHRva2VuIGxpYnJhcnkiCisrCWV4aXQgMAorK30KKysKKyt0cnlf dG9rZW5fbGlicyBcCisrCS91c3IvbG9jYWwvbGliL3NvZnRoc20vbGlic29mdGhzbTIuc28gXAor KwkvdXNyL2xpYjY0L3BrY3MxMS9saWJzb2Z0aHNtMi5zbyBcCisrCS91c3IvbGliL3g4Nl82NC1s aW51eC1nbnUvc29mdGhzbS9saWJzb2Z0aHNtMi5zbworKworK1RFU1RfU1NIX1BJTj0xMjM0Cisr VEVTVF9TU0hfU09QSU49MTIzNDU2NzgKKytpZiBbICJ4JFRFU1RfU1NIX1NTSFBLQ1MxMUhFTFBF UiIgIT0gIngiIF07IHRoZW4KKysJU1NIX1BLQ1MxMV9IRUxQRVI9IiR7VEVTVF9TU0hfU1NIUEtD UzExSEVMUEVSfSIKKysJZXhwb3J0IFNTSF9QS0NTMTFfSEVMUEVSCisrZmkKKysKKyt0ZXN0IC1m ICIkVEVTVF9TU0hfUEtDUzExIiB8fCBmYXRhbCAiJFRFU1RfU1NIX1BLQ1MxMSBkb2VzIG5vdCBl eGlzdCIKKysKKysjIHNldHVwIGVudmlyb25tZW50IGZvciBzb2Z0aHNtIHRva2VuCisrRElSPSRP QkovU09GVEhTTQorK3JtIC1yZiAkRElSCisrVE9LRU49JERJUi90b2tlbmRpcgorK21rZGlyIC1w ICRUT0tFTgorK1NPRlRIU00yX0NPTkY9JERJUi9zb2Z0aHNtMi5jb25mCisrZXhwb3J0IFNPRlRI U00yX0NPTkYKKytjYXQgPiAkU09GVEhTTTJfQ09ORiA8PCBFT0YKKysjIFNvZnRIU00gdjIgY29u ZmlndXJhdGlvbiBmaWxlCisrZGlyZWN0b3JpZXMudG9rZW5kaXIgPSAke1RPS0VOfQorK29iamVj dHN0b3JlLmJhY2tlbmQgPSBmaWxlCisrIyBFUlJPUiwgV0FSTklORywgSU5GTywgREVCVUcKKyts b2cubGV2ZWwgPSBERUJVRworKyMgSWYgQ0tGX1JFTU9WQUJMRV9ERVZJQ0UgZmxhZyBzaG91bGQg YmUgc2V0Cisrc2xvdHMucmVtb3ZhYmxlID0gZmFsc2UKKytFT0YKKytvdXQ9JChzb2Z0aHNtMi11 dGlsIC0taW5pdC10b2tlbiAtLWZyZWUgLS1sYWJlbCB0b2tlbi1zbG90LTAgLS1waW4gIiRURVNU X1NTSF9QSU4iIC0tc28tcGluICIkVEVTVF9TU0hfU09QSU4iKQorK3Nsb3Q9JChlY2hvIC0tICRv dXQgfCBzZWQgJ3MvLiogLy8nKQorKworKyMgcHJldmVudCBzc2gtYWdlbnQgZnJvbSBjYWxsaW5n IHNzaC1hc2twYXNzCisrU1NIX0FTS1BBU1M9L3Vzci9iaW4vdHJ1ZQorK2V4cG9ydCBTU0hfQVNL UEFTUworK3Vuc2V0IERJU1BMQVkKKysjIFdlIG5lZWQgaW50ZXJhY3RpdmUgYWNjZXNzIHRvIHRl c3QgUEtDUyMgc2luY2UgaXQgcHJvbXB0cyBmb3IgUElOCisrIyBCYWNrdXAgc3NoX3Byb3h5IGJl Zm9yZSBtb2RpZmljYXRpb25zCisrY3AgJE9CSi9zc2hfcHJveHkgJE9CSi9zc2hfcHJveHlfYmFr Cisrc2VkIC1pICdzLy4qQmF0Y2hNb2RlLiovL2cnICRPQkovc3NoX3Byb3h5CisrIyBSZW1vdmUg SWRlbnRpdHlGaWxlIGVudHJpZXMgdG8gcHJldmVudCBleGNlZWRpbmcgTWF4QXV0aFRyaWVzIHdo ZW4gdXNpbmcKKysjIFBLQ1MxMVByb3ZpZGVyICgtSSkgb3IgUEtDUzExIFVSSXMuIFRoZSBkZWZh dWx0IHNzaF9jb25maWcgaW5jbHVkZXMgbXVsdGlwbGUKKysjIGlkZW50aXR5IGZpbGVzIHRoYXQg d291bGQgYmUgdHJpZWQgYmVmb3JlIFBLQ1MxMSBrZXlzLCBjYXVzaW5nIGF1dGhlbnRpY2F0aW9u CisrIyB0byBmYWlsIHdpdGggIlRvbyBtYW55IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzIiBiZWZv cmUgUEtDUzExIGtleXMgYXJlIHJlYWNoZWQuCisrZ3JlcCAtaXYgSWRlbnRpdHlGaWxlICRPQkov c3NoX3Byb3h5ID4gJE9CSi9zc2hfcHJveHkudG1wCisrbXYgJE9CSi9zc2hfcHJveHkudG1wICRP Qkovc3NoX3Byb3h5CisrCisrIyBzdGFydCBjb21tYW5kIHcvbyB0dHksIHNvIHNzaCBhY2NlcHRz IHBpbiBmcm9tIHN0ZGluIChmcm9tIGFnZW50LXBrY3MxMS5zaCkKKytub3R0eSgpIHsKKysJcGVy bCAtZSAndXNlIFBPU0lYOyBQT1NJWDo6c2V0c2lkKCk7CisrCSAgICBpZiAoZm9yaykgeyB3YWl0 OyBleGl0KCQ/ID4+IDgpOyB9IGVsc2UgeyBleGVjKEBBUkdWKSB9JyAiJEAiCisrfQorKworK3Ry YWNlICJnZW5lcmF0aW5nIGtleXMiCisrSUQxPSIwMiIKKytJRDI9IjA0IgorK0lEMz0iMDYiCisr UlNBPSR7RElSfS9SU0EKKytFQz0ke0RJUn0vRUMKKytFRDI1NTE5PSR7RElSfS9FRDI1NTE5Cisr b3BlbnNzbCBnZW5wa2V5IC1hbGdvcml0aG0gcnNhID4gJFJTQQorK29wZW5zc2wgcGtjczggLW5v Y3J5cHQgLWluICRSU0EgfFwKKysgICAgc29mdGhzbTItdXRpbCAtLXNsb3QgIiRzbG90IiAtLWxh YmVsICJTU0ggUlNBIEtleSAkSUQxIiAtLWlkICRJRDEgXAorKwktLXBpbiAiJFRFU1RfU1NIX1BJ TiIgLS1pbXBvcnQgL2Rldi9zdGRpbgorK29wZW5zc2wgZ2VucGtleSBcCisrICAgIC1nZW5wYXJh bSBcCisrICAgIC1hbGdvcml0aG0gZWMgXAorKyAgICAtcGtleW9wdCBlY19wYXJhbWdlbl9jdXJ2 ZTpwcmltZTI1NnYxIHxcCisrICAgIG9wZW5zc2wgZ2VucGtleSBcCisrICAgIC1wYXJhbWZpbGUg L2Rldi9zdGRpbiA+ICRFQworK29wZW5zc2wgcGtjczggLW5vY3J5cHQgLWluICRFQyB8XAorKyAg ICBzb2Z0aHNtMi11dGlsIC0tc2xvdCAiJHNsb3QiIC0tbGFiZWwgIlNTSCBFQ0RTQSBLZXkgJElE MiIgLS1pZCAkSUQyIFwKKysJLS1waW4gIiRURVNUX1NTSF9QSU4iIC0taW1wb3J0IC9kZXYvc3Rk aW4KKytvcGVuc3NsIGdlbnBrZXkgLWFsZ29yaXRobSBlZDI1NTE5ID4gJEVEMjU1MTkKKytvcGVu c3NsIHBrY3M4IC1ub2NyeXB0IC1pbiAkRUQyNTUxOSB8XAorKyAgICBzb2Z0aHNtMi11dGlsIC0t c2xvdCAiJHNsb3QiIC0tbGFiZWwgIlNTSCBFRDI1NTE5IEtleSAkSUQzIiAtLWlkICRJRDMgXAor KwktLXBpbiAiJFRFU1RfU1NIX1BJTiIgLS1pbXBvcnQgL2Rldi9zdGRpbgorKworK3RyYWNlICJM aXN0IHRoZSBrZXlzIGluIHRoZSBzc2gta2V5Z2VuIHdpdGggUEtDUyMxMSBVUklzIgorKyR7U1NI S0VZR0VOfSAtRCAke1RFU1RfU1NIX1BLQ1MxMX0gPiAkT0JKL3Rva2VuX2tleXMKKytpZiBbICQ/ IC1uZSAwIF07IHRoZW4KKysJZmFpbCAiRkFJTDoga2V5Z2VuIGZhaWxzIHRvIGVudW1lcmF0ZSBr ZXlzIG9uIFBLQ1MjMTEgdG9rZW4iCisrZmkKKytncmVwICJwa2NzMTE6IiAkT0JKL3Rva2VuX2tl eXMgPiAvZGV2L251bGwKKytpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysJZmFpbCAiRkFJTDogVGhl IGtleXMgZnJvbSBzc2gta2V5Z2VuIGRvIG5vdCBjb250YWluIFBLQ1MjMTEgVVJJIGFzIGEgY29t bWVudCIKKytmaQorKworKyMgU2V0IHRoZSBFQ0RTQSBrZXkgdG8gYXV0aG9yaXplZCBrZXlzCisr Z3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VS CisrCisrdHJhY2UgIlNpbXBsZSBjb25uZWN0IHdpdGggc3NoICh3aXRob3V0IFBLQ1MjMTEgVVJJ KSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtSSAke1RFU1RfU1NIX1BL Q1MxMX0gXAorKyAgICAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKKytyPSQ/Cisr aWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggcGtj czExIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworK3RyYWNlICJDb25uZWN0IHdpdGgg UEtDUyMxMSBVUkkiCisrdHJhY2UgIiAgKEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCisrZWNo byAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAg ICAtaSAicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBz b21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZB SUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgor K2ZpCisrCisrdHJhY2UgIiAgKFJTQSBrZXkgc2hvdWxkIGZhaWwpIgorK2VjaG8gJHtURVNUX1NT SF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysgICAgIC1pICJwa2Nz MTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4 aXQgNQorK3I9JD8KKytpZiBbICRyIC1lcSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3NoIGNv bm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBzdWNjZWVkZWQgKHNob3VsZCBmYWlsKSIKKytmaQorKwor KyMgU2V0IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3JpemVkCisrZ3JlcCAiRUQyNTUxOSIgJE9C Si90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKKysKKyt0cmFjZSAiICAo RUQyNTUxOSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90 dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysgICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQz fT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQorK3I9JD8K KytpZiBbICRyIC1uZSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQ S0NTIzExIFVSSSAoRWQyNTUxOSkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2ZpCisrCisrIyBT ZXQgdGhlIEVDRFNBIGtleSBiYWNrIGFzIGF1dGhvcml6ZWQKKytncmVwICJFQ0RTQSIgJE9CSi90 b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKKysKKyt0cmFjZSAiQ29ubmVj dCB3aXRoIFBLQ1MjMTEgVVJJIGluY2x1ZGluZyBQSU4gc2hvdWxkIG5vdCBwcm9tcHQiCisrdHJh Y2UgIiAgKEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCisrJHtTU0h9IC1GICRPQkovc3NoX3By b3h5IC1pIFwKKysgICAgInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hf UEtDUzExfSZwaW4tdmFsdWU9JHtURVNUX1NTSF9QSU59IiBzb21laG9zdCBleGl0IDUKKytyPSQ/ CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGgg UEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2ZpCisrCisrdHJhY2UgIiAgKFJT QSBrZXkgc2hvdWxkIGZhaWwpIgorKyR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSAtaSBcCisrICAg ICJwa2NzMTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0mcGluLXZh bHVlPSR7VEVTVF9TU0hfUElOfSIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLWVx IDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIHN1 Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgorK2ZpCisrCisrIyBTZXQgdGhlIEVEMjU1MTkga2V5IGFz IGF1dGhvcml6ZWQKKytncmVwICJFRDI1NTE5IiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1dGhv cml6ZWRfa2V5c18kVVNFUgorKworK3RyYWNlICIgIChFRDI1NTE5IGtleSBzaG91bGQgc3VjY2Vl ZCkiCisrJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1pIFwKKysgICAgInBrY3MxMTppZD0lJHtJ RDN9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSZwaW4tdmFsdWU9JHtURVNUX1NTSF9Q SU59IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZh aWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgKEVkMjU1MTkpIGZhaWxlZCAo ZXhpdCBjb2RlICRyKSIKKytmaQorKworKyMgU2V0IHRoZSBFQ0RTQSBrZXkgYmFjayBhcyBhdXRo b3JpemVkCisrZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9r ZXlzXyRVU0VSCisrCisrdHJhY2UgIkNvbm5lY3Qgd2l0aCB2YXJpb3VzIGZpbHRlcmluZyBvcHRp b25zIGluIFBLQ1MjMTEgVVJJIgorK3RyYWNlICIgIChieSBvYmplY3QgbGFiZWwsIEVDRFNBIHNo b3VsZCBzdWNjZWVkKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAk T0JKL3NzaF9wcm94eSBcCisrICAgIC1pICJwa2NzMTE6b2JqZWN0PVNTSCUyMEVDRFNBJTIwS2V5 JTIwMDQ/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKyty PSQ/CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdp dGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2ZpCisrCisrdHJhY2UgIiAg KGJ5IG9iamVjdCBsYWJlbCwgUlNBIGtleSBzaG91bGQgZmFpbCkiCisrZWNobyAke1RFU1RfU1NI X1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAgICAgLWkgInBrY3Mx MTpvYmplY3Q9U1NIJTIwUlNBJTIwS2V5JTIwMDI/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NT MTF9IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtZXEgNSBdOyB0aGVuCisrCWZh aWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgc3VjY2VlZGVkIChzaG91bGQg ZmFpbCkiCisrZmkKKysKKysjIFNldCB0aGUgRUQyNTUxOSBrZXkgYXMgYXV0aG9yaXplZAorK2dy ZXAgIkVEMjU1MTkiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VS CisrCisrdHJhY2UgIiAgKGJ5IG9iamVjdCBsYWJlbCwgRUQyNTUxOSBrZXkgc2hvdWxkIHN1Y2Nl ZWQpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3By b3h5IFwKKysgICAgIC1pICJwa2NzMTE6b2JqZWN0PVNTSCUyMEVEMjU1MTklMjBLZXklMjAwNj9t b2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQorK3I9JD8KKytp ZiBbICRyIC1uZSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NT IzExIFVSSSAoRWQyNTUxOSkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2ZpCisrCisrIyBTZXQg dGhlIEVDRFNBIGtleSBiYWNrIGFzIGF1dGhvcml6ZWQKKytncmVwICJFQ0RTQSIgJE9CSi90b2tl bl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKKysKKyt0cmFjZSAiICAoYnkgdG9r ZW4gbGFiZWwsIEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCisrZWNobyAke1RFU1RfU1NIX1BJ Tn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAgICAtaSAicGtjczExOmlk PSUke0lEMn07dG9rZW49dG9rZW4tc2xvdC0wP21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzEx fSIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgorKwlmYWls ICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGZhaWxlZCAoZXhpdCBjb2RlICRy KSIKKytmaQorKworKyMgU2V0IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3JpemVkCisrZ3JlcCAi RUQyNTUxOSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKKysK Kyt0cmFjZSAiICAoYnkgdG9rZW4gbGFiZWwsIEVEMjU1MTkga2V5IHNob3VsZCBzdWNjZWVkKSIK KytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBc CisrICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQzfTt0b2tlbj10b2tlbi1zbG90LTA/bW9kdWxlLXBh dGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAt bmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkg KEVkMjU1MTkpIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworKyMgU2V0IHRoZSBFQ0RT QSBrZXkgYmFjayBhcyBhdXRob3JpemVkCisrZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIiAgKGJ5IHdyb25nIHRva2Vu IGxhYmVsLCBzaG91bGQgZmFpbCkiCisrZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NT SH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAgICAgLWkgInBrY3MxMTp0b2tlbj10b2tlbi1zbG90 LTk5P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3QgZXhpdCA1Cisrcj0k PworK2lmIFsgJHIgLWVxIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRo IFBLQ1MjMTEgVVJJIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgorK2ZpCisrCisrCisrCisrCisr dHJhY2UgIlRlc3QgUEtDUyMxMSBVUkkgc3BlY2lmaWNhdGlvbiBpbiBjb25maWd1cmF0aW9uIGZp bGVzIgorK2VjaG8gIklkZW50aXR5RmlsZSBcInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRo PSR7VEVTVF9TU0hfUEtDUzExfVwiIiBcCisrICAgID4+ICRPQkovc3NoX3Byb3h5CisrdHJhY2Ug IiAgKEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCisrZWNobyAke1RFU1RfU1NIX1BJTn0gfCBu b3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lm IFsgJHIgLW5lIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1Mj MTEgVVJJIGluIGNvbmZpZyBmYWlsZWQgKGV4aXQgY29kZSAkcikiCisrZmkKKysKKysjIFNldCB0 aGUgUlNBIGtleSBhcyBhdXRob3JpemVkCisrZ3JlcCAiUlNBIiAkT0JKL3Rva2VuX2tleXMgPiAk T0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgorKworK3RyYWNlICIgIChSU0Ega2V5IHNob3VsZCBm YWlsKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9w cm94eSBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtZXEgNSBdOyB0aGVuCisrCWZh aWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgaW4gY29uZmlnIHN1Y2NlZWRl ZCAoc2hvdWxkIGZhaWwpIgorK2ZpCisrc2VkIC1pIC1lICIvSWRlbnRpdHlGaWxlL2QiICRPQkov c3NoX3Byb3h5CisrCisrdHJhY2UgIkNvbWJpbmF0aW9uIG9mIFBLQ1MxMVByb3ZpZGVyIGFuZCBQ S0NTMTFVUkkgb24gY29tbWFuZGxpbmUiCisrdHJhY2UgIiAgKFJTQSBrZXkgc2hvdWxkIHN1Y2Nl ZWQpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3By b3h5IFwKKysgICAgLWkgInBrY3MxMTppZD0lJHtJRDF9IiAtSSAke1RFU1RfU1NIX1BLQ1MxMX0g c29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgorKwlmYWlsICJG QUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGFuZCBwcm92aWRlciBjb21iaW5hdGlv biIgXAorKwkgICAgImZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworK3RyYWNlICJSZWdy ZXNzOiBNaXNzaW5nIHByb3ZpZGVyIGluIFBLQ1MxMVVSSSBvcHRpb24iCisrJHtTU0h9IC1GICRP Qkovc3NoX3Byb3h5IFwKKysgICAgLW8gSWRlbnRpdHlGaWxlPVwicGtjczExOnRva2VuPXNlZ2Zh dWx0XCIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLWVxIDEzOSBdOyB0aGVuCisr CWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggbWlzc2luZyBwcm92aWRlcl9pZCBmcm9tIGNv bmZpZ3VyYXRpb24gb3B0aW9uIiBcCisrCSAgICAiY3Jhc2hlZCAoZXhpdCBjb2RlICRyKSIKKytm aQorKworKworK3RyYWNlICJTU0ggQWdlbnQgY2FuIHdvcmsgd2l0aCBQS0NTIzExIFVSSSIKKyt0 cmFjZSAic3RhcnQgdGhlIGFnZW50IgorK2V2YWwgYCR7U1NIQUdFTlR9IC1zYCA+ICAvZGV2L251 bGwKKysKKytyPSQ/CisraWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCWZhaWwgImNvdWxkIG5vdCBz dGFydCBzc2gtYWdlbnQ6IGV4aXQgY29kZSAkciIKKytlbHNlCisrCXRyYWNlICJhZGQgd2hvbGUg cHJvdmlkZXIgdG8gYWdlbnQiCisrCWVjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0hB RER9IFwKKysJICAgICJwa2NzMTE6P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgIz4g L2Rldi9udWxsIDI+JjEKKysJcj0kPworKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KKysJCWZhaWwg IkZBSUw6IHNzaC1hZGQgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXI6IGV4aXQgY29kZSAkciIK KysJZmkKKysKKysJdHJhY2UgIiBwa2NzMTEgbGlzdCB2aWEgYWdlbnQgKGFsbCBrZXlzKSIKKysJ JHtTU0hBRER9IC1sID4gL2Rldi9udWxsIDI+JjEKKysJcj0kPworKwlpZiBbICRyIC1uZSAwIF07 IHRoZW4KKysJCWZhaWwgIkZBSUw6IHNzaC1hZGQgLWwgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlk ZXI6IGV4aXQgY29kZSAkciIKKysJZmkKKysKKysJdHJhY2UgIiBwa2NzMTEgY29ubmVjdCB2aWEg YWdlbnQgKGFsbCBrZXlzKSIKKysJJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4 aXQgNQorKwlyPSQ/CisrCWlmIFsgJHIgLW5lIDUgXTsgdGhlbgorKwkJZmFpbCAiRkFJTDogc3No IGNvbm5lY3QgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXIgKGV4aXQgY29kZSAkcikiCisrCWZp CisrCisrCXRyYWNlICIgcmVtb3ZlIHBrY3MxMSBrZXlzIChhbGwga2V5cykiCisrCSR7U1NIQURE fSAtZCAicGtjczExOj9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iID4gL2Rldi9udWxs IDI+JjEKKysJcj0kPworKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KKysJCWZhaWwgIkZBSUw6IHNz aC1hZGQgLWQgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXI6IGV4aXQgY29kZSAkciIKKysJZmkK KysKKysJdHJhY2UgImFkZCBvbmx5IFJTQSBrZXkgdG8gdGhlIGFnZW50IgorKwllY2hvICR7VEVT VF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCisrCSAgICAicGtjczExOmlkPSUke0lEMX0/ bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYvbnVsbCAyPiYxCisrCXI9JD8K KysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlMIHNzaC1hZGQgZmFpbGVkIHdp dGggUlNBIGtleTogZXhpdCBjb2RlICRyIgorKwlmaQorKworKwl0cmFjZSAiIHBrY3MxMSBjb25u ZWN0IHZpYSBhZ2VudCAoUlNBIGtleSkiCisrCSR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBzb21l aG9zdCBleGl0IDUKKysJcj0kPworKwlpZiBbICRyIC1uZSA1IF07IHRoZW4KKysJCWZhaWwgIkZB SUw6IHNzaCBjb25uZWN0IGZhaWxlZCB3aXRoIFJTQSBrZXkgKGV4aXQgY29kZSAkcikiCisrCWZp CisrCisrCXRyYWNlICIgcmVtb3ZlIFJTQSBwa2NzMTEga2V5IgorKwkke1NTSEFERH0gLWQgInBr Y3MxMTppZD0lJHtJRDF9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgXAorKwkgICAg PiAvZGV2L251bGwgMj4mMQorKwlyPSQ/CisrCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgorKwkJZmFp bCAiRkFJTDogc3NoLWFkZCAtZCBmYWlsZWQgd2l0aCBSU0Ega2V5OiBleGl0IGNvZGUgJHIiCisr CWZpCisrCisrCXRyYWNlICJhZGQgb25seSBFQ0RTQSBrZXkgdG8gdGhlIGFnZW50IgorKwllY2hv ICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCisrCSAgICAicGtjczExOmlkPSUk e0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYvbnVsbCAyPiYxCisr CXI9JD8KKysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlMOiBzc2gtYWRkIGZh aWxlZCB3aXRoIHNlY29uZCBrZXk6IGV4aXQgY29kZSAkciIKKysJZmkKKysKKysJdHJhY2UgIiBw a2NzMTEgY29ubmVjdCB2aWEgYWdlbnQgKEVDRFNBIGtleSBzaG91bGQgZmFpbCkiCisrCSR7U1NI fSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKKysJcj0kPworKwlpZiBbICRyIC1l cSA1IF07IHRoZW4KKysJCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHBhc3NlZCB3aXRoIEVDRFNB IGtleSAoc2hvdWxkIGZhaWwpIgorKwlmaQorKworKwl0cmFjZSAiYWRkIGFsc28gdGhlIFJTQSBr ZXkgdG8gdGhlIGFnZW50IgorKwllY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQURE fSBcCisrCSAgICAicGtjczExOmlkPSUke0lEMX0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NT MTF9IiA+IC9kZXYvbnVsbCAyPiYxCisrCXI9JD8KKysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisr CQlmYWlsICJGQUlMOiBzc2gtYWRkIGZhaWxlZCB3aXRoIGZpcnN0IGtleTogZXhpdCBjb2RlICRy IgorKwlmaQorKworKwl0cmFjZSAiIHJlbW92ZSBFQ0RTQSBwa2NzMTEga2V5IgorKwkke1NTSEFE RH0gLWQgInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIg XAorKwkgICAgPiAvZGV2L251bGwgMj4mMQorKwlyPSQ/CisrCWlmIFsgJHIgLW5lIDAgXTsgdGhl bgorKwkJZmFpbCAic3NoLWFkZCAtZCBmYWlsZWQgd2l0aCBFQ0RTQSBrZXk6IGV4aXQgY29kZSAk ciIKKysJZmkKKysKKysJdHJhY2UgIiByZW1vdmUgYWxyZWFkeS1yZW1vdmVkIHBrY3MxMSBrZXkg c2hvdWxkIGZhaWwiCisrCSR7U1NIQUREfSAtZCAicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBh dGg9JHtURVNUX1NTSF9QS0NTMTF9IiBcCisrCSAgICA+IC9kZXYvbnVsbCAyPiYxCisrCXI9JD8K KysJaWYgWyAkciAtZXEgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlMOiBzc2gtYWRkIC1kIHBhc3Nl ZCB3aXRoIG5vbi1leGlzdGluZyBrZXkgKHNob3VsZCBmYWlsKSIKKysJZmkKKysKKysJdHJhY2Ug IiBwa2NzMTEgY29ubmVjdCB2aWEgYWdlbnQgKHRoZSBSU0Ega2V5IHNob3VsZCBiZSBzdGlsbCB1 c2FibGUpIgorKwkke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhpdCA1CisrCXI9 JD8KKysJaWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCQlmYWlsICJzc2ggY29ubmVjdCBmYWlsZWQg d2l0aCBSU0Ega2V5IChhZnRlciByZW1vdmluZyBFQ0RTQSk6IGV4aXQgY29kZSAkciIKKysJZmkK KysKKysJdHJhY2UgImtpbGwgYWdlbnQiCisrCSR7U1NIQUdFTlR9IC1rID4gL2Rldi9udWxsCisr ZmkKKysKKysjIFJlc3RvcmUgb3JpZ2luYWwgc3NoX3Byb3h5CisrbXYgJE9CSi9zc2hfcHJveHlf YmFrICRPQkovc3NoX3Byb3h5CitkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0dGVzdHMvTWFrZWZp bGUgYi9yZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZQoraW5kZXggNWQ0ODJlYWI0Li41MWJlZDVi YWYgMTAwNjQ0CistLS0gYS9yZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZQorKysrIGIvcmVncmVz cy91bml0dGVzdHMvTWFrZWZpbGUKK0BAIC0xLDYgKzEsNiBAQAorICMJJE9wZW5CU0Q6IE1ha2Vm aWxlLHYgMS4xNSAyMDI2LzA2LzE0IDA0OjA4OjA1IGRqbSBFeHAgJAorIAorIFNVQkRJUj0JdGVz dF9oZWxwZXIgc3NoYnVmIHNzaGtleSBiaXRtYXAga2V4IGhvc3RrZXlzIHV0ZjggbWF0Y2ggY29u dmVyc2lvbgorLVNVQkRJUis9YXV0aG9wdCBtaXNjIHNzaHNpZyBzZXJ2Y29uZiBjcnlwdG8KKytT VUJESVIrPWF1dGhvcHQgbWlzYyBzc2hzaWcgc2VydmNvbmYgY3J5cHRvIHBrY3MxMQorIAorIC5p bmNsdWRlIDxic2Quc3ViZGlyLm1rPgorZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3Br Y3MxMS90ZXN0cy5jIGIvcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMKK25ldyBmaWxl IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLjg5YmE0NWM0ZQorLS0tIC9kZXYvbnVsbAor KysrIGIvcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMKK0BAIC0wLDAgKzEsMzUzIEBA CisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdAorKyAqCisrICogQXV0aG9yczog SmFrdWIgSmVsZW4gPGpqZWxlbkByZWRoYXQuY29tPgorKyAqCisrICogUGVybWlzc2lvbiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Cisr ICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRl ZCB0aGF0IHRoZSBhYm92ZQorKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisrICoKKysgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMK KysgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX QVJSQU5USUVTIE9GCisrICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKysgKiBBTlkgU1BFQ0lBTCwgRElSRUNU LCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisrICog V0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBX SEVUSEVSIElOIEFOCisrICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVS IFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKysgKiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyAqLworKworKyNp bmNsdWRlICJpbmNsdWRlcy5oIgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgIi4uL3Rlc3RfaGVscGVyL3Rlc3RfaGVscGVyLmgiCisr CisrI2luY2x1ZGUgInNzaGJ1Zi5oIgorKyNpbmNsdWRlICJzc2gtcGtjczExLXVyaS5oIgorKwor KyNkZWZpbmUgRU1QVFlfVVJJIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisrCisrLyogcHJvdG90eXBlcyBhcmUgbm90IHB1Ymxp YyAtLSBzcGVjaWZ5IHRoZW0gaGVyZSBpbnRlcm5hbGx5IGZvciB0ZXN0cyAqLworK3N0cnVjdCBz c2hidWYgKnBlcmNlbnRfZW5jb2RlKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBjaGFyICopOworK2lu dCBwZXJjZW50X2RlY29kZShjaGFyICosIGNoYXIgKiopOworKworK3ZvaWQKKytjb21wYXJlX3Vy aShzdHJ1Y3QgcGtjczExX3VyaSAqYSwgc3RydWN0IHBrY3MxMV91cmkgKmIpCisreworKwlBU1NF UlRfUFRSX05FKGEsIE5VTEwpOworKwlBU1NFUlRfUFRSX05FKGIsIE5VTEwpOworKwlBU1NFUlRf U0laRV9UX0VRKGEtPmlkX2xlbiwgYi0+aWRfbGVuKTsKKysJQVNTRVJUX01FTV9FUShhLT5pZCwg Yi0+aWQsIGEtPmlkX2xlbik7CisrCWlmIChiLT5vYmplY3QgIT0gTlVMTCkKKysJCUFTU0VSVF9T VFJJTkdfRVEoYS0+b2JqZWN0LCBiLT5vYmplY3QpOworKwllbHNlIC8qIGJvdGggc2hvdWxkIGJl IG51bGwgKi8KKysJCUFTU0VSVF9QVFJfRVEoYS0+b2JqZWN0LCBiLT5vYmplY3QpOworKwlpZiAo Yi0+bW9kdWxlX3BhdGggIT0gTlVMTCkKKysJCUFTU0VSVF9TVFJJTkdfRVEoYS0+bW9kdWxlX3Bh dGgsIGItPm1vZHVsZV9wYXRoKTsKKysJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICovCisr CQlBU1NFUlRfUFRSX0VRKGEtPm1vZHVsZV9wYXRoLCBiLT5tb2R1bGVfcGF0aCk7CisrCWlmIChi LT50b2tlbiAhPSBOVUxMKQorKwkJQVNTRVJUX1NUUklOR19FUShhLT50b2tlbiwgYi0+dG9rZW4p OworKwllbHNlIC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KKysJCUFTU0VSVF9QVFJfRVEoYS0+ dG9rZW4sIGItPnRva2VuKTsKKysJaWYgKGItPm1hbnVmICE9IE5VTEwpCisrCQlBU1NFUlRfU1RS SU5HX0VRKGEtPm1hbnVmLCBiLT5tYW51Zik7CisrCWVsc2UgLyogYm90aCBzaG91bGQgYmUgbnVs bCAqLworKwkJQVNTRVJUX1BUUl9FUShhLT5tYW51ZiwgYi0+bWFudWYpOworKwlpZiAoYi0+bGli X21hbnVmICE9IE5VTEwpCisrCQlBU1NFUlRfU1RSSU5HX0VRKGEtPmxpYl9tYW51ZiwgYi0+bGli X21hbnVmKTsKKysJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICovCisrCQlBU1NFUlRfUFRS X0VRKGEtPmxpYl9tYW51ZiwgYi0+bGliX21hbnVmKTsKKysJaWYgKGItPnNlcmlhbCAhPSBOVUxM KQorKwkJQVNTRVJUX1NUUklOR19FUShhLT5zZXJpYWwsIGItPnNlcmlhbCk7CisrCWVsc2UgLyog Ym90aCBzaG91bGQgYmUgbnVsbCAqLworKwkJQVNTRVJUX1BUUl9FUShhLT5zZXJpYWwsIGItPnNl cmlhbCk7CisrfQorKworK3ZvaWQKKytjaGVja19wYXJzZV9ydihjaGFyICp1cmksIHN0cnVjdCBw a2NzMTFfdXJpICpleHBlY3QsIGludCBleHBlY3RfcnYpCisreworKwljaGFyICpidWYgPSBOVUxM LCAqc3RyOworKwlzdHJ1Y3QgcGtjczExX3VyaSAqcGtjczExdXJpID0gTlVMTDsKKysJaW50IHJ2 OworKworKwlpZiAoZXhwZWN0X3J2ID09IDApCisrCQlzdHIgPSAiVmFsaWQiOworKwllbHNlCisr CQlzdHIgPSAiSW52YWxpZCI7CisrCWFzcHJpbnRmKCZidWYsICIlcyBQS0NTIzExIFVSSSBwYXJz aW5nOiAlcyIsIHN0ciwgdXJpKTsKKysJVEVTVF9TVEFSVChidWYpOworKwlmcmVlKGJ1Zik7Cisr CXBrY3MxMXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwlydiA9IHBrY3MxMV91cmlfcGFyc2Uo dXJpLCBwa2NzMTF1cmkpOworKwlBU1NFUlRfSU5UX0VRKHJ2LCBleHBlY3RfcnYpOworKwlpZiAo cnYgPT0gMCkgLyogaW4gY2FzZSBvZiBmYWlsdXJlIHJlc3VsdCBpcyB1bmRlZmluZWQgKi8KKysJ CWNvbXBhcmVfdXJpKHBrY3MxMXVyaSwgZXhwZWN0KTsKKysJcGtjczExX3VyaV9jbGVhbnVwKHBr Y3MxMXVyaSk7CisrCWZyZWUoZXhwZWN0KTsKKysJVEVTVF9ET05FKCk7CisrfQorKworK3ZvaWQK KytjaGVja19wYXJzZShjaGFyICp1cmksIHN0cnVjdCBwa2NzMTFfdXJpICpleHBlY3QpCisrewor KwljaGVja19wYXJzZV9ydih1cmksIGV4cGVjdCwgMCk7CisrfQorKworK3N0cnVjdCBwa2NzMTFf dXJpICoKKytjb21wb3NlX3VyaSh1bnNpZ25lZCBjaGFyICppZCwgc2l6ZV90IGlkX2xlbiwgY2hh ciAqdG9rZW4sIGNoYXIgKmxpYl9tYW51ZiwKKysgICAgY2hhciAqbWFudWYsIGNoYXIgKnNlcmlh bCwgY2hhciAqbW9kdWxlX3BhdGgsIGNoYXIgKm9iamVjdCwgY2hhciAqcGluKQorK3sKKysJc3Ry dWN0IHBrY3MxMV91cmkgKnVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwlpZiAoaWRfbGVuID4g MCkgeworKwkJdXJpLT5pZF9sZW4gPSBpZF9sZW47CisrCQl1cmktPmlkID0gaWQ7CisrCX0KKysJ dXJpLT5tb2R1bGVfcGF0aCA9IG1vZHVsZV9wYXRoOworKwl1cmktPnRva2VuID0gdG9rZW47Cisr CXVyaS0+bGliX21hbnVmID0gbGliX21hbnVmOworKwl1cmktPm1hbnVmID0gbWFudWY7CisrCXVy aS0+c2VyaWFsID0gc2VyaWFsOworKwl1cmktPm9iamVjdCA9IG9iamVjdDsKKysJdXJpLT5waW4g PSBwaW47CisrCXJldHVybiB1cmk7CisrfQorKworK3N0YXRpYyB2b2lkCisrdGVzdF9wYXJzZV92 YWxpZCh2b2lkKQorK3sKKysJLyogcGF0aCBhcmd1bWVudHMgKi8KKysJY2hlY2tfcGFyc2UoInBr Y3MxMTppZD0lMDEiLAorKwkgICAgY29tcG9zZV91cmkoIlx4MDEiLCAxLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6aWQ9 JTAwJTAxIiwKKysJICAgIGNvbXBvc2VfdXJpKCJceDAwXHgwMSIsIDIsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfcGFyc2UoInBrY3MxMTp0b2tl bj1TU0glMjBLZXlzIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsICJTU0ggS2V5cyIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfcGFyc2UoInBrY3Mx MTpsaWJyYXJ5LW1hbnVmYWN0dXJlcj1PcGVuU0MiLAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwg MCwgTlVMTCwgIk9wZW5TQyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hl Y2tfcGFyc2UoInBrY3MxMTptYW51ZmFjdHVyZXI9cGl2X0lJIiwKKysJICAgIGNvbXBvc2VfdXJp KE5VTEwsIDAsIE5VTEwsIE5VTEwsICJwaXZfSUkiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7 CisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6c2VyaWFsPUlhbVNlcmlhbCIsCisrCSAgICBjb21wb3Nl X3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAiSWFtU2VyaWFsIiwgTlVMTCwgTlVMTCwg TlVMTCkpOworKwljaGVja19wYXJzZSgicGtjczExOm9iamVjdD1TSUdOJTIwS2V5IiwKKysJICAg IGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJTSUdO IEtleSIsIE5VTEwpKTsKKysJLyogcXVlcnkgYXJndW1lbnRzICovCisrCWNoZWNrX3BhcnNlKCJw a2NzMTE6P21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyIsCisrCSAgICBj b21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiL3Vzci9saWI2NC9w MTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVMTCkpOworKwljaGVja19wYXJzZSgicGtjczExOj9w aW4tdmFsdWU9MTIzNDU2IiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICIxMjM0NTYiKSk7CisrCisrCS8qIGNvbWJpbmF0aW9u cyAqLworKwkvKiBJRCBTSE9VTEQgYmUgcGVyY2VudCBlbmNvZGVkICovCisrCWNoZWNrX3BhcnNl KCJwa2NzMTE6dG9rZW49U1NIJTIwS2V5O2lkPTAiLAorKwkgICAgY29tcG9zZV91cmkoIjAiLCAx LCAiU1NIIEtleSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hl Y2tfcGFyc2UoCisrCSAgICAicGtjczExOm1hbnVmYWN0dXJlcj1DQUM/bW9kdWxlLXBhdGg9L3Vz ci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5V TEwsIE5VTEwsICJDQUMiLCBOVUxMLAorKwkgICAgIi91c3IvbGliNjQvcDExLWtpdC1wcm94eS5z byIsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfcGFyc2UoCisrCSAgICAicGtjczExOm9iamVjdD1S U0ElMjBLZXk/bW9kdWxlLXBhdGg9L3Vzci9saWI2NC9wa2NzMTEvb3BlbmNyeXB0b2tpLnNvIiwK KysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrCSAg ICAiL3Vzci9saWI2NC9wa2NzMTEvb3BlbmNyeXB0b2tpLnNvIiwgIlJTQSBLZXkiLCBOVUxMKSk7 CisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6P21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDExLWtpdC1w cm94eS5zbyZwaW4tdmFsdWU9MTIzNDU2IiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLCBOVUxM LCAiMTIzNDU2IikpOworKworKwkvKiBlbXB0eSBwYXRoIGNvbXBvbmVudCBtYXRjaGVzIGV2ZXJ5 dGhpbmcgKi8KKysJY2hlY2tfcGFyc2UoInBrY3MxMToiLCBFTVBUWV9VUkkpOworKworKwkvKiBl bXB0eSBzdHJpbmcgaXMgYSB2YWxpZCB0byBtYXRjaCBhZ2FpbnN0IChhbmQgZGlmZmVyZW50IGZy b20gTlVMTCkgKi8KKysJY2hlY2tfcGFyc2UoInBrY3MxMTp0b2tlbj0iLAorKwkgICAgY29tcG9z ZV91cmkoTlVMTCwgMCwgIiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsK KysJLyogUGVyY2VudCBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgcGVyY2VudC1lbmNvZGVkICovCisr CWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9rZW49JTI1IiwKKysJICAgICBjb21wb3NlX3VyaShOVUxM LCAwLCAiJSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKyt9CisrCisr c3RhdGljIHZvaWQKKyt0ZXN0X3BhcnNlX2ludmFsaWQodm9pZCkKKyt7CisrCS8qIEludmFsaWQg cGVyY2VudCBlbmNvZGluZyAqLworKwljaGVja19wYXJzZV9ydigicGtjczExOmlkPSUwIiwgRU1Q VFlfVVJJLCAtMSk7CisrCS8qIEludmFsaWQgcGVyY2VudCBlbmNvZGluZyAqLworKwljaGVja19w YXJzZV9ydigicGtjczExOmlkPSVaWiIsIEVNUFRZX1VSSSwgLTEpOworKwkvKiBTcGFjZSBNVVNU IGJlIHBlcmNlbnQgZW5jb2RlZCAtLSBYWFggbm90IGVuZm9yY2VkIHlldCAqLworKwljaGVja19w YXJzZSgicGtjczExOnRva2VuPVNTSCBLZXlzIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAs ICJTU0ggS2V5cyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJLyog TVVTVCBOT1QgY29udGFpbiBkdXBsaWNhdGUgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lICov CisrCWNoZWNrX3BhcnNlX3J2KCJwa2NzMTE6aWQ9JTAxO2lkPSUwMiIsIEVNUFRZX1VSSSwgLTEp OworKwkvKiBNVVNUIE5PVCBjb250YWluIGR1cGxpY2F0ZSBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1l IG5hbWUgKi8KKysJY2hlY2tfcGFyc2VfcnYoInBrY3MxMTo/cGluLXZhbHVlPTExMTExMSZwaW4t dmFsdWU9MTIzNDU2IiwgRU1QVFlfVVJJLCAtMSk7CisrCS8qIFVucmVjb2duaXplZCBhdHRyaWJ1 dGUgaW4gcGF0aCBhcmUgaWdub3JlZCB3aXRoIGxvZyBtZXNzYWdlICovCisrCWNoZWNrX3BhcnNl KCJwa2NzMTE6a2V5X25hbWU9U1NIIiwgRU1QVFlfVVJJKTsKKysJLyogVW5yZWNvZ25pemVkIGF0 dHJpYnV0ZSBpbiBxdWVyeSBTSE9VTEQgYmUgaWdub3JlZCAqLworKwljaGVja19wYXJzZSgicGtj czExOj9rZXlfbmFtZT1TU0giLCBFTVBUWV9VUkkpOworK30KKysKKyt2b2lkCisrY2hlY2tfZ2Vu KGNoYXIgKmV4cGVjdCwgc3RydWN0IHBrY3MxMV91cmkgKnVyaSkKKyt7CisrCWNoYXIgKmJ1ZiA9 IE5VTEwsICp1cmlfc3RyOworKworKwlhc3ByaW50ZigmYnVmLCAiVmFsaWQgUEtDUyMxMSBVUkkg Z2VuZXJhdGlvbjogJXMiLCBleHBlY3QpOworKwlURVNUX1NUQVJUKGJ1Zik7CisrCWZyZWUoYnVm KTsKKysJdXJpX3N0ciA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisrCUFTU0VSVF9QVFJfTkUodXJp X3N0ciwgTlVMTCk7CisrCUFTU0VSVF9TVFJJTkdfRVEodXJpX3N0ciwgZXhwZWN0KTsKKysJZnJl ZSh1cmlfc3RyKTsKKysJVEVTVF9ET05FKCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrdGVzdF9n ZW5lcmF0ZV92YWxpZCh2b2lkKQorK3sKKysJLyogcGF0aCBhcmd1bWVudHMgKi8KKysJY2hlY2tf Z2VuKCJwa2NzMTE6aWQ9JTAxIiwKKysJICAgIGNvbXBvc2VfdXJpKCJceDAxIiwgMSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19nZW4oInBrY3Mx MTppZD0lMDAlMDEiLAorKwkgICAgY29tcG9zZV91cmkoIlx4MDBceDAxIiwgMiwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19nZW4oInBrY3MxMTp0 b2tlbj1TU0glMjBLZXlzIiwgLyogc3BhY2UgbXVzdCBiZSBwZXJjZW50IGVuY29kZWQgKi8KKysJ ICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsICJTU0ggS2V5cyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpKTsKKysJLyogbGlicmFyeS1tYW51ZmFjdHVyZXIgaXMgbm90IGltcGxt ZW50ZWQgbm93ICovCisrCS8qY2hlY2tfZ2VuKCJwa2NzMTE6bGlicmFyeS1tYW51ZmFjdHVyZXI9 T3BlblNDIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsICJPcGVuU0MiLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ki8KKysJY2hlY2tfZ2VuKCJwa2NzMTE6bWFudWZh Y3R1cmVyPXBpdl9JSSIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCAi cGl2X0lJIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19nZW4oInBrY3MxMTpz ZXJpYWw9SWFtU2VyaWFsIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEws IE5VTEwsICJJYW1TZXJpYWwiLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX2dlbigicGtj czExOm9iamVjdD1SU0ElMjBLZXkiLAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIlJTQSBLZXkiLCBOVUxMKSk7CisrCS8qIHF1ZXJ5IGFy Z3VtZW50cyAqLworKwljaGVja19nZW4oInBrY3MxMTo/bW9kdWxlLXBhdGg9L3Vzci9saWI2NC9w MTEta2l0LXByb3h5LnNvIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLCBOVUxMLCBOVUxMKSk7 CisrCisrCS8qIGNvbWJpbmF0aW9ucyAqLworKwljaGVja19nZW4oInBrY3MxMTppZD0lMDI7dG9r ZW49U1NIJTIwS2V5cyIsCisrCSAgICBjb21wb3NlX3VyaSgiXHgwMiIsIDEsICJTU0ggS2V5cyIs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfZ2VuKCJwa2Nz MTE6aWQ9JUVFJTAyP21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyIsCisr CSAgICBjb21wb3NlX3VyaSgiXHhFRVx4MDIiLCAyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAi L3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVMTCkpOworKwljaGVja19nZW4o InBrY3MxMTpvYmplY3Q9RW5jcnlwdGlvbiUyMEtleTttYW51ZmFjdHVyZXI9cGl2X0lJIiwKKysJ ICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsICJwaXZfSUkiLCBOVUxMLCBOVUxM LCAiRW5jcnlwdGlvbiBLZXkiLCBOVUxMKSk7CisrCisrCS8qIGVtcHR5IHBhdGggY29tcG9uZW50 IG1hdGNoZXMgZXZlcnl0aGluZyAqLworKwljaGVja19nZW4oInBrY3MxMToiLCBFTVBUWV9VUkkp OworKworK30KKysKKyt2b2lkCisrY2hlY2tfZW5jb2RlKGNoYXIgKnNvdXJjZSwgc2l6ZV90IGxl biwgY2hhciAqYWxsb3dfbGlzdCwgY2hhciAqZXhwZWN0KQorK3sKKysJY2hhciAqYnVmID0gTlVM TDsKKysJc3RydWN0IHNzaGJ1ZiAqYjsKKysKKysJYXNwcmludGYoJmJ1ZiwgInBlcmNlbnRfZW5j b2RlOiBleHBlY3RlZCAlcyIsIGV4cGVjdCk7CisrCVRFU1RfU1RBUlQoYnVmKTsKKysJZnJlZShi dWYpOworKworKwliID0gcGVyY2VudF9lbmNvZGUoc291cmNlLCBsZW4sIGFsbG93X2xpc3QpOwor KwlBU1NFUlRfU1RSSU5HX0VRKHNzaGJ1Zl9wdHIoYiksIGV4cGVjdCk7CisrCXNzaGJ1Zl9mcmVl KGIpOworKwlURVNUX0RPTkUoKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKyt0ZXN0X3BlcmNlbnRf ZW5jb2RlX211bHRpYnl0ZSh2b2lkKQorK3sKKysJLyogU0hPVUxEIGJlIGVuY29kZWQgYXMgb2N0 ZXRzIGFjY29yZGluZyB0byB0aGUgVVRGLTggY2hhcmFjdGVyIGVuY29kaW5nICovCisrCisrCS8q IG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgImZvciBmcmVlIiAqLworKwljaGVja19lbmNvZGUo IiQiLCAxLCAiIiwgIiUyNCIpOworKwljaGVja19lbmNvZGUoIsKiIiwgMiwgIiIsICIlQzIlQTIi KTsKKysJY2hlY2tfZW5jb2RlKCLigqwiLCAzLCAiIiwgIiVFMiU4MiVBQyIpOworKwljaGVja19l bmNvZGUoIvCQjYgiLCA0LCAiIiwgIiVGMCU5MCU4RCU4OCIpOworKworKwkvKiBDS19VVEY4Q0hB UiBpcyB1bnNpZ25lZCBjaGFyICgxIGJ5dGUpICovCisrCS8qIGxhYmVscyBTSE9VTEQgYmUgbm9y bWFsaXplZCB0byBORkMgW1VBWDE1XSAqLworKworK30KKysKKytzdGF0aWMgdm9pZAorK3Rlc3Rf cGVyY2VudF9lbmNvZGUodm9pZCkKKyt7CisrCS8qIFdpdGhvdXQgYWxsb3cgbGlzdCBlbmNvZGVz IGV2ZXJ5dGhpbmcgKGZvciBDS0FfSUQpICovCisrCWNoZWNrX2VuY29kZSgiQSoiLCAyLCAiIiwg IiU0MSUyQSIpOworKwljaGVja19lbmNvZGUoIlx4MDAiLCAxLCAiIiwgIiUwMCIpOworKwljaGVj a19lbmNvZGUoIlx4N0YiLCAxLCAiIiwgIiU3RiIpOworKwljaGVja19lbmNvZGUoIlx4ODAiLCAx LCAiIiwgIiU4MCIpOworKwljaGVja19lbmNvZGUoIlx4ZmYiLCAxLCAiIiwgIiVGRiIpOworKwor KwkvKiBEZWZhdWx0IGFsbG93IGxpc3QgZW5jb2RlcyBhbnl0aGluZyBidXQgc2FmZSBsZXR0ZXJz ICovCisrCWNoZWNrX2VuY29kZSgidGVzdCIgIlx4MDAiICIwYWxwaGEiLCAxMSwgUEtDUzExX1VS SV9XSElURUxJU1QsCisrCSAgICAidGVzdCUwMDBhbHBoYSIpOworKwljaGVja19lbmNvZGUoIiAi LCAxLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKKysJICAgICIlMjAiKTsgLyogU3BhY2UgTVVTVCBi ZSBwZXJjZW50IGVuY29kZWQgKi8KKysJY2hlY2tfZW5jb2RlKCIvIiwgMSwgUEtDUzExX1VSSV9X SElURUxJU1QsCisrCSAgICAiJTJGIik7IC8qICcvJyBkZWxpbWl0ZXIgTVVTVCBiZSBwZXJjZW50 IGVuY29kZWQgKGluIHRoZSBwYXRoKSAqLworKwljaGVja19lbmNvZGUoIj8iLCAxLCBQS0NTMTFf VVJJX1dISVRFTElTVCwKKysJICAgICIlM0YiKTsgLyogZGVsaW1pdGVyICc/JyBNVVNUIGJlIHBl cmNlbnQgZW5jb2RlZCAoaW4gdGhlIHBhdGgpICovCisrCWNoZWNrX2VuY29kZSgiIyIsIDEsIFBL Q1MxMV9VUklfV0hJVEVMSVNULAorKwkgICAgIiUyMyIpOyAvKiAnIycgTVVTVCBiZSBhbHdheXMg cGVyY2VudCBlbmNvZGVkICovCisrCWNoZWNrX2VuY29kZSgia2V5PXZhbHVlO3NlcGFyYXRvcj9x dWVyeSZhbXA7I2FuY2giLCAzNSwgUEtDUzExX1VSSV9XSElURUxJU1QsCisrCSAgICAia2V5JTNE dmFsdWUlM0JzZXBhcmF0b3IlM0ZxdWVyeSUyNmFtcCUzQiUyM2FuY2giKTsKKysKKysJLyogQ29t cG9uZW50cyBpbiBxdWVyeSBjYW4gaGF2ZSAnLycgdW5lbmNvZGVkICh1c2VmdWwgZm9yIHBhdGhz KSAqLworKwljaGVja19lbmNvZGUoIi9wYXRoL3RvLmZpbGUiLCAxMywgUEtDUzExX1VSSV9XSElU RUxJU1QgIi8iLAorKwkgICAgIi9wYXRoL3RvLmZpbGUiKTsKKyt9CisrCisrdm9pZAorK2NoZWNr X2RlY29kZShjaGFyICpzb3VyY2UsIGNoYXIgKmV4cGVjdCwgaW50IGV4cGVjdF9sZW4pCisrewor KwljaGFyICpidWYgPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysJaW50IHJ2OworKworKwlhc3ByaW50 ZigmYnVmLCAicGVyY2VudF9kZWNvZGU6ICVzIiwgc291cmNlKTsKKysJVEVTVF9TVEFSVChidWYp OworKwlmcmVlKGJ1Zik7CisrCisrCXJ2ID0gcGVyY2VudF9kZWNvZGUoc291cmNlLCAmb3V0KTsK KysJQVNTRVJUX0lOVF9FUShydiwgZXhwZWN0X2xlbik7CisrCWlmIChydiA+PSAwKQorKwkJQVNT RVJUX01FTV9FUShvdXQsIGV4cGVjdCwgZXhwZWN0X2xlbik7CisrCWZyZWUob3V0KTsKKysJVEVT VF9ET05FKCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrdGVzdF9wZXJjZW50X2RlY29kZSh2b2lk KQorK3sKKysJLyogc2ltcGxlIHZhbGlkIGNhc2VzICovCisrCWNoZWNrX2RlY29kZSgiJTAwIiwg Ilx4MDAiLCAxKTsKKysJY2hlY2tfZGVjb2RlKCIlRkYiLCAiXHhGRiIsIDEpOworKworKwkvKiBu b3JtYWwgc3RyaW5ncyBzaG9sZCBiZSBrZXB0IGludGFjdCAqLworKwljaGVja19kZWNvZGUoInN0 cmluZ3MgYXJlIGxlZnQiLCAic3RyaW5ncyBhcmUgbGVmdCIsIDE2KTsKKysJY2hlY2tfZGVjb2Rl KCIxMCUyNSBvZiB0cmVlcyIsICIxMCUgb2YgdHJlZXMiLCAxMik7CisrCisrCS8qIG1ha2Ugc3Vy ZSBubyBtb3JlIHRoYW4gMiBieXRlcyBhcmUgcGFyc2VkICovCisrCWNoZWNrX2RlY29kZSgiJTIy MiIsICJceDIyIiAiMiIsIDIpOworKworKwkvKiBpbnZhbGlkIGV4cGVjdHMgZmFpbHVyZSAqLwor KwljaGVja19kZWNvZGUoIiUwIiwgIiIsIC0xKTsKKysJY2hlY2tfZGVjb2RlKCIlWiIsICIiLCAt MSk7CisrCWNoZWNrX2RlY29kZSgiJUZHIiwgIiIsIC0xKTsKKyt9CisrCisrdm9pZAorK3Rlc3Rz KHZvaWQpCisreworKwl0ZXN0X3BlcmNlbnRfZW5jb2RlKCk7CisrCXRlc3RfcGVyY2VudF9lbmNv ZGVfbXVsdGlieXRlKCk7CisrCXRlc3RfcGVyY2VudF9kZWNvZGUoKTsKKysJdGVzdF9wYXJzZV92 YWxpZCgpOworKwl0ZXN0X3BhcnNlX2ludmFsaWQoKTsKKysJdGVzdF9nZW5lcmF0ZV92YWxpZCgp OworK30KKysKKyt2b2lkCisrYmVuY2htYXJrcyh2b2lkKQorK3sKKysJcHJpbnRmKCJubyBiZW5j aG1hcmtzXG4iKTsKKyt9CisrCitkaWZmIC0tZ2l0IGEvc3NoLWFkZC5jIGIvc3NoLWFkZC5jCitp bmRleCA5MjMxYzUyNzcuLjFiMzRiYWZmYSAxMDA2NDQKKy0tLSBhL3NzaC1hZGQuYworKysrIGIv c3NoLWFkZC5jCitAQCAtNzAsNiArNzAsNyBAQAorICNpbmNsdWRlICJzc2gtc2suaCIKKyAjaW5j bHVkZSAic2stYXBpLmgiCisgI2luY2x1ZGUgImhvc3RmaWxlLmgiCisrI2luY2x1ZGUgInNzaC1w a2NzMTEtdXJpLmgiCisgCisgI2RlZmluZSBDRVJUX0VYUElSWV9HUkFDRQkoNSo2MCkKKyAKK0BA IC0yNzEsNiArMjcyLDM4IEBAIGNoZWNrX2NlcnRfbGlmZXRpbWUoY29uc3Qgc3RydWN0IHNzaGtl eSAqY2VydCwgaW50IGNlcnRfbGlmZXRpbWUpCisgCXJldHVybiBNSU5JTVVNKGNlcnRfbGlmZXRp bWUsIChpbnQpbik7CisgfQorIAorKyNpZmRlZiBFTkFCTEVfUEtDUzExCisrc3RhdGljIGludAor K3VwZGF0ZV9jYXJkKGludCBhZ2VudF9mZCwgaW50IGFkZCwgY29uc3QgY2hhciAqaWQsIGludCBx ZmxhZywKKysgICAgaW50IGtleV9vbmx5LCBpbnQgY2VydF9vbmx5LAorKyAgICBzdHJ1Y3QgZGVz dF9jb25zdHJhaW50ICoqZGVzdF9jb25zdHJhaW50cywgc2l6ZV90IG5kZXN0X2NvbnN0cmFpbnRz LAorKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqY2VydHMsIHNpemVfdCBuY2VydHMsIGNoYXIgKnBpbik7 CisrCisraW50CisrdXBkYXRlX3BrY3MxMV91cmkoaW50IGFnZW50X2ZkLCBpbnQgYWRkaW5nLCBj b25zdCBjaGFyICpwa2NzMTFfdXJpLCBpbnQgcWZsYWcsCisrICAgIHN0cnVjdCBkZXN0X2NvbnN0 cmFpbnQgKipkZXN0X2NvbnN0cmFpbnRzLCBzaXplX3QgbmRlc3RfY29uc3RyYWludHMpCisrewor KwljaGFyICpwaW4gPSBOVUxMOworKwlzdHJ1Y3QgcGtjczExX3VyaSAqdXJpOworKworKwkvKiBk cnktcnVuIHBhcnNlIHRvIG1ha2Ugc3VyZSB0aGUgVVJJIGlzIHZhbGlkIGFuZCB0byByZXBvcnQg ZXJyb3JzICovCisrCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwlpZiAocGtjczExX3VyaV9w YXJzZSgoY2hhciAqKSBwa2NzMTFfdXJpLCB1cmkpICE9IDApCisrCQlmYXRhbCgiRmFpbGVkIHRv IHBhcnNlIFBLQ1MjMTEgVVJJIik7CisrCWlmICh1cmktPnBpbiAhPSBOVUxMKSB7CisrCQlwaW4g PSBzdHJkdXAodXJpLT5waW4pOworKwkJaWYgKHBpbiA9PSBOVUxMKSB7CisrCQkJZmF0YWwoIkZh aWxlZCB0byBkdXBwbGljYXRlIHN0cmluZyIpOworKwkJfQorKwkJLyogcGluIGlzIGZyZWVkIGlu IHRoZSB1cGRhdGVfY2FyZCgpICovCisrCX0KKysJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7Cisr CisrCXJldHVybiB1cGRhdGVfY2FyZChhZ2VudF9mZCwgYWRkaW5nLCBwa2NzMTFfdXJpLCBxZmxh ZywgMSwgMCwKKysJICAgICAgICAgICBkZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50 cywgTlVMTCwgMCwgcGluKTsKKyt9CisrI2VuZGlmCisrCisgc3RhdGljIGludAorIGFkZF9maWxl KGludCBhZ2VudF9mZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBrZXlfb25seSwgaW50IGNl cnRfb25seSwKKyAgICAgaW50IHFmbGFnLCBpbnQgTmZsYWcsIGNvbnN0IGNoYXIgKnNrcHJvdmlk ZXIsCitAQCAtNDYxLDE1ICs0OTQsMTQgQEAgc3RhdGljIGludAorIHVwZGF0ZV9jYXJkKGludCBh Z2VudF9mZCwgaW50IGFkZCwgY29uc3QgY2hhciAqaWQsIGludCBxZmxhZywKKyAgICAgaW50IGtl eV9vbmx5LCBpbnQgY2VydF9vbmx5LAorICAgICBzdHJ1Y3QgZGVzdF9jb25zdHJhaW50ICoqZGVz dF9jb25zdHJhaW50cywgc2l6ZV90IG5kZXN0X2NvbnN0cmFpbnRzLAorLSAgICBzdHJ1Y3Qgc3No a2V5ICoqY2VydHMsIHNpemVfdCBuY2VydHMpCisrICAgIHN0cnVjdCBzc2hrZXkgKipjZXJ0cywg c2l6ZV90IG5jZXJ0cywgY2hhciAqcGluKQorIHsKKy0JY2hhciAqcGluID0gTlVMTDsKKyAJaW50 IHIsIHJldCA9IC0xOworIAorIAlpZiAoa2V5X29ubHkpCisgCQluY2VydHMgPSAwOworIAorLQlp ZiAoYWRkKSB7CisrCWlmIChhZGQgJiYgcGluID09IE5VTEwpIHsKKyAJCWlmICgocGluID0gcmVh ZF9wYXNzcGhyYXNlKCJFbnRlciBwYXNzcGhyYXNlIGZvciBQS0NTIzExOiAiLAorIAkJICAgIFJQ X0FMTE9XX1NURElOKSkgPT0gTlVMTCkKKyAJCQlyZXR1cm4gLTE7CitAQCAtNjUxLDYgKzY4Mywx NCBAQCBkb19maWxlKGludCBhZ2VudF9mZCwgaW50IGRlbGV0aW5nLCBpbnQga2V5X29ubHksIGlu dCBjZXJ0X29ubHksCisgICAgIGNoYXIgKmZpbGUsIGludCBxZmxhZywgaW50IE5mbGFnLCBjb25z dCBjaGFyICpza3Byb3ZpZGVyLAorICAgICBzdHJ1Y3QgZGVzdF9jb25zdHJhaW50ICoqZGVzdF9j b25zdHJhaW50cywgc2l6ZV90IG5kZXN0X2NvbnN0cmFpbnRzKQorIHsKKysjaWZkZWYgRU5BQkxF X1BLQ1MxMQorKwlpZiAoc3RybGVuKGZpbGUpID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkg JiYKKysJICAgIHN0cm5jbXAoZmlsZSwgUEtDUzExX1VSSV9TQ0hFTUUsCisrCSAgICBzdHJsZW4o UEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7CisrCQlyZXR1cm4gdXBkYXRlX3BrY3MxMV91cmko YWdlbnRfZmQsICFkZWxldGluZywgZmlsZSwgcWZsYWcsCisrICAgICAgICAgICAgICAgICAgIGRl c3RfY29uc3RyYWludHMsIG5kZXN0X2NvbnN0cmFpbnRzKTsKKysJfQorKyNlbmRpZgorIAlpZiAo ZGVsZXRpbmcpIHsKKyAJCWlmIChkZWxldGVfZmlsZShhZ2VudF9mZCwgZmlsZSwga2V5X29ubHks CisgCQkgICAgY2VydF9vbmx5LCBxZmxhZykgPT0gLTEpCitAQCAtMTAwMyw3ICsxMDQzLDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQlpZiAodXBkYXRlX2NhcmQoYWdlbnRfZmQs ICFkZWxldGluZywgcGtjczExcHJvdmlkZXIsCisgCQkgICAgcWZsYWcsIGtleV9vbmx5LCBjZXJ0 X29ubHksCisgCQkgICAgZGVzdF9jb25zdHJhaW50cywgbmRlc3RfY29uc3RyYWludHMsCistCQkg ICAgY2VydHMsIG5jZXJ0cykgPT0gLTEpCisrCQkgICAgY2VydHMsIG5jZXJ0cywgTlVMTCkgPT0g LTEpCisgCQkJcmV0ID0gMTsKKyAJCWZvciAobiA9IDA7IG4gPCBuY2VydHM7IG4rKykKKyAJCQlz c2hrZXlfZnJlZShjZXJ0c1tuXSk7CitkaWZmIC0tZ2l0IGEvc3NoLWFnZW50LmMgYi9zc2gtYWdl bnQuYworaW5kZXggNGM4ZTFhNGRhLi4yOGY1Yzk1ZjkgMTAwNjQ0CistLS0gYS9zc2gtYWdlbnQu YworKysrIGIvc3NoLWFnZW50LmMKK0BAIC0xNTUzLDEwICsxNTUzLDc1IEBAIGFkZF9wMTFfaWRl bnRpdHkoc3RydWN0IHNzaGtleSAqa2V5LCBjaGFyICpjb21tZW50LCBjb25zdCBjaGFyICpwcm92 aWRlciwKKyAJaWR0YWItPm5lbnRyaWVzKys7CisgfQorIAorK3N0YXRpYyBjaGFyICoKKytzYW5p dGl6ZV9wa2NzMTFfcHJvdmlkZXIoY29uc3QgY2hhciAqcHJvdmlkZXIpCisreworKwlzdHJ1Y3Qg cGtjczExX3VyaSAqdXJpID0gTlVMTDsKKysJY2hhciAqc2FuZV91cmksICptb2R1bGVfcGF0aCA9 IE5VTEw7IC8qIGRlZmF1bHQgcGF0aCAqLworKwljaGFyIGNhbm9uaWNhbF9wcm92aWRlcltQQVRI X01BWF07CisrCisrCWlmIChwcm92aWRlciA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7CisrCisr CW1lbXNldChjYW5vbmljYWxfcHJvdmlkZXIsIDAsIHNpemVvZihjYW5vbmljYWxfcHJvdmlkZXIp KTsKKysKKysJaWYgKHN0cmxlbihwcm92aWRlcikgPj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1F KSAmJgorKwkgICAgc3RybmNtcChwcm92aWRlciwgUEtDUzExX1VSSV9TQ0hFTUUsCisrCSAgICBz dHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7CisrCQkvKiBQS0NTIzExIFVSSSAqLwor KwkJdXJpID0gcGtjczExX3VyaV9pbml0KCk7CisrCQlpZiAodXJpID09IE5VTEwpIHsKKysJCQll cnJvcigiRmFpbGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKKysJCQlyZXR1cm4gTlVMTDsKKysJ CX0KKysKKysJCWlmIChwa2NzMTFfdXJpX3BhcnNlKHByb3ZpZGVyLCB1cmkpICE9IDApIHsKKysJ CQllcnJvcigiRmFpbGVkIHRvIHBhcnNlIFBLQ1MjMTEgVVJJIik7CisrCQkJcGtjczExX3VyaV9j bGVhbnVwKHVyaSk7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisrCQkvKiB2YWxpZGF0ZSBhbHNv IHByb3ZpZGVyIGZyb20gVVJJICovCisrCQlpZiAodXJpLT5tb2R1bGVfcGF0aCkKKysJCQltb2R1 bGVfcGF0aCA9IHN0cmR1cCh1cmktPm1vZHVsZV9wYXRoKTsKKysJfSBlbHNlCisrCQltb2R1bGVf cGF0aCA9IHN0cmR1cChwcm92aWRlcik7IC8qIHNpbXBsZSBwYXRoICovCisrCisrCWlmIChtb2R1 bGVfcGF0aCAhPSBOVUxMKSB7IC8qIGRvIG5vdCB2YWxpZGF0ZSBkZWZhdWx0IE5VTEwgcGF0aCBp biBVUkkgKi8KKysJCWlmIChyZWFscGF0aChtb2R1bGVfcGF0aCwgY2Fub25pY2FsX3Byb3ZpZGVy KSA9PSBOVUxMKSB7CisrCQkJdmVyYm9zZSgiZmFpbGVkIFBLQ1MjMTEgcHJvdmlkZXIgXCIlLjEw MHNcIjogcmVhbHBhdGg6ICVzIiwKKysJCQkgICAgbW9kdWxlX3BhdGgsIHN0cmVycm9yKGVycm5v KSk7CisrCQkJZnJlZShtb2R1bGVfcGF0aCk7CisrCQkJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7 CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisrCQlmcmVlKG1vZHVsZV9wYXRoKTsKKysJCWlmICht YXRjaF9wYXR0ZXJuX2xpc3QoY2Fub25pY2FsX3Byb3ZpZGVyLCBhbGxvd2VkX3Byb3ZpZGVycywg MCkgIT0gMSkgeworKwkJCXZlcmJvc2UoInJlZnVzaW5nIFBLQ1MjMTEgcHJvdmlkZXIgXCIlLjEw MHNcIjogIgorKwkJCSAgICAibm90IGFsbG93ZWQiLCBjYW5vbmljYWxfcHJvdmlkZXIpOworKwkJ CXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworKwkJCXJldHVybiBOVUxMOworKwkJfQorKworKwkJ LyogY29weSB2ZXJpZmllZCBhbmQgc2FuaXRpemVkIHByb3ZpZGVyIHBhdGggYmFjayB0byB0aGUg dXJpICovCisrCQlpZiAodXJpKSB7CisrCQkJZnJlZSh1cmktPm1vZHVsZV9wYXRoKTsKKysJCQl1 cmktPm1vZHVsZV9wYXRoID0geHN0cmR1cChjYW5vbmljYWxfcHJvdmlkZXIpOworKwkJfQorKwl9 CisrCisrCWlmICh1cmkpIHsKKysJCXNhbmVfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsKKysJ CXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworKwkJcmV0dXJuIHNhbmVfdXJpOworKwl9IGVsc2Ug eworKwkJcmV0dXJuIHhzdHJkdXAoY2Fub25pY2FsX3Byb3ZpZGVyKTsgLyogc2ltcGxlIHBhdGgg Ki8KKysJfQorK30KKysKKyBzdGF0aWMgdm9pZAorIHByb2Nlc3NfYWRkX3NtYXJ0Y2FyZF9rZXko U29ja2V0RW50cnkgKmUpCisgeworLQljaGFyICpwcm92aWRlciA9IE5VTEwsICpwaW4gPSBOVUxM LCBjYW5vbmljYWxfcHJvdmlkZXJbUEFUSF9NQVhdOworKwljaGFyICpwcm92aWRlciA9IE5VTEws ICpwaW4gPSBOVUxMLCAqc2FuZV91cmkgPSBOVUxMOworIAljaGFyICoqY29tbWVudHMgPSBOVUxM OworIAlpbnQgciwgaSwgY291bnQgPSAwLCBzdWNjZXNzID0gMCwgY29uZmlybSA9IDA7CisgCXVf aW50IHNlY29uZHMgPSAwOworQEAgLTE1ODUsMjUgKzE2NTAsMTggQEAgcHJvY2Vzc19hZGRfc21h cnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkKKyAJCSAgICAicHJvdmlkZXJzIGlzIGRpc2FibGVk IiwgcHJvdmlkZXIpOworIAkJZ290byBzZW5kOworIAl9CistCWlmIChyZWFscGF0aChwcm92aWRl ciwgY2Fub25pY2FsX3Byb3ZpZGVyKSA9PSBOVUxMKSB7CistCQl2ZXJib3NlKCJmYWlsZWQgUEtD UyMxMSBhZGQgb2YgXCIlLjEwMHNcIjogcmVhbHBhdGg6ICVzIiwKKy0JCSAgICBwcm92aWRlciwg c3RyZXJyb3IoZXJybm8pKTsKKy0JCWdvdG8gc2VuZDsKKy0JfQorLQlpZiAobWF0Y2hfcGF0dGVy bl9saXN0KGNhbm9uaWNhbF9wcm92aWRlciwgYWxsb3dlZF9wcm92aWRlcnMsIDApICE9IDEpIHsK Ky0JCXZlcmJvc2UoInJlZnVzaW5nIFBLQ1MjMTEgYWRkIG9mIFwiJS4xMDBzXCI6ICIKKy0JCSAg ICAicHJvdmlkZXIgbm90IGFsbG93ZWQiLCBjYW5vbmljYWxfcHJvdmlkZXIpOworKwlzYW5lX3Vy aSA9IHNhbml0aXplX3BrY3MxMV9wcm92aWRlcihwcm92aWRlcik7CisrCWlmIChzYW5lX3VyaSA9 PSBOVUxMKQorIAkJZ290byBzZW5kOworLQl9CistCWRlYnVnX2YoImFkZCAlLjEwMHMiLCBjYW5v bmljYWxfcHJvdmlkZXIpOworIAlpZiAobGlmZXRpbWUgJiYgIWRlYXRoKQorIAkJZGVhdGggPSBt b25vdGltZSgpICsgbGlmZXRpbWU7CisgCistCWNvdW50ID0gcGtjczExX2FkZF9wcm92aWRlcihj YW5vbmljYWxfcHJvdmlkZXIsIHBpbiwgJmtleXMsICZjb21tZW50cyk7CisrCWRlYnVnX2YoImFk ZCAlLjEwMHMiLCBzYW5lX3VyaSk7CisrCWNvdW50ID0gcGtjczExX2FkZF9wcm92aWRlcihzYW5l X3VyaSwgcGluLCAma2V5cywgJmNvbW1lbnRzKTsKKyAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp KyspIHsKKyAJCWlmIChjb21tZW50c1tpXSA9PSBOVUxMIHx8IGNvbW1lbnRzW2ldWzBdID09ICdc MCcpIHsKKyAJCQlmcmVlKGNvbW1lbnRzW2ldKTsKKy0JCQljb21tZW50c1tpXSA9IHhzdHJkdXAo Y2Fub25pY2FsX3Byb3ZpZGVyKTsKKysJCQljb21tZW50c1tpXSA9IHhzdHJkdXAoc2FuZV91cmkp OworIAkJfQorIAkJZm9yIChqID0gMDsgaiA8IG5jZXJ0czsgaisrKSB7CisgCQkJaWYgKCFzc2hr ZXlfaXNfY2VydChjZXJ0c1tqXSkpCitAQCAtMTYxMywxMyArMTY3MSwxMyBAQCBwcm9jZXNzX2Fk ZF9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5ICplKQorIAkJCWlmIChwa2NzMTFfbWFrZV9jZXJ0 KGtleXNbaV0sIGNlcnRzW2pdLCAmaykgIT0gMCkKKyAJCQkJY29udGludWU7CisgCQkJYWRkX3Ax MV9pZGVudGl0eShrLCB4c3RyZHVwKGNvbW1lbnRzW2ldKSwKKy0JCQkgICAgY2Fub25pY2FsX3By b3ZpZGVyLCBkZWF0aCwgY29uZmlybSwKKysJCQkgICAgc2FuZV91cmksIGRlYXRoLCBjb25maXJt LAorIAkJCSAgICBkZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50cyk7CisgCQkJc3Vj Y2VzcyA9IDE7CisgCQl9CisgCQlpZiAoIWNlcnRfb25seSAmJiBsb29rdXBfaWRlbnRpdHkoa2V5 c1tpXSkgPT0gTlVMTCkgeworIAkJCWFkZF9wMTFfaWRlbnRpdHkoa2V5c1tpXSwgY29tbWVudHNb aV0sCistCQkJICAgIGNhbm9uaWNhbF9wcm92aWRlciwgZGVhdGgsIGNvbmZpcm0sCisrCQkJICAg IHNhbmVfdXJpLCBkZWF0aCwgY29uZmlybSwKKyAJCQkgICAgZGVzdF9jb25zdHJhaW50cywgbmRl c3RfY29uc3RyYWludHMpOworIAkJCWtleXNbaV0gPSBOVUxMOwkJLyogdHJhbnNmZXJyZWQgKi8K KyAJCQljb21tZW50c1tpXSA9IE5VTEw7CS8qIHRyYW5zZmVycmVkICovCitAQCAtMTYzMiw2ICsx NjkwLDcgQEAgcHJvY2Vzc19hZGRfc21hcnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkKKyBzZW5k OgorIAlmcmVlKHBpbik7CisgCWZyZWUocHJvdmlkZXIpOworKwlmcmVlKHNhbmVfdXJpKTsKKyAJ ZnJlZShrZXlzKTsKKyAJZnJlZShjb21tZW50cyk7CisgCWZyZWVfZGVzdF9jb25zdHJhaW50cyhk ZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50cyk7CitAQCAtMTY0NCw4ICsxNzAzLDgg QEAgc2VuZDoKKyBzdGF0aWMgdm9pZAorIHByb2Nlc3NfcmVtb3ZlX3NtYXJ0Y2FyZF9rZXkoU29j a2V0RW50cnkgKmUpCisgeworLQljaGFyICpwcm92aWRlciA9IE5VTEwsICpwaW4gPSBOVUxMLCBj YW5vbmljYWxfcHJvdmlkZXJbUEFUSF9NQVhdOworLQlpbnQgciwgc3VjY2VzcyA9IDA7CisrCWNo YXIgKnByb3ZpZGVyID0gTlVMTCwgKnBpbiA9IE5VTEwsICpzYW5lX3VyaSA9IE5VTEw7CisrCWlu dCByLCBzdWNjZXNzID0gMCwgcmVtb3ZlZF9jb3VudCA9IDA7CisgCUlkZW50aXR5ICppZCwgKm54 dDsKKyAKKyAJZGVidWcyX2YoImVudGVyaW5nIik7CitAQCAtMTY1NiwzMCArMTcxNSwzOCBAQCBw cm9jZXNzX3JlbW92ZV9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5ICplKQorIAl9CisgCWZyZWUo cGluKTsKKyAKKy0JaWYgKHJlYWxwYXRoKHByb3ZpZGVyLCBjYW5vbmljYWxfcHJvdmlkZXIpID09 IE5VTEwpIHsKKy0JCXZlcmJvc2UoImZhaWxlZCBQS0NTIzExIGFkZCBvZiBcIiUuMTAwc1wiOiBy ZWFscGF0aDogJXMiLAorLQkJICAgIHByb3ZpZGVyLCBzdHJlcnJvcihlcnJubykpOworKwlzYW5l X3VyaSA9IHNhbml0aXplX3BrY3MxMV9wcm92aWRlcihwcm92aWRlcik7CisrCWlmIChzYW5lX3Vy aSA9PSBOVUxMKQorIAkJZ290byBzZW5kOworLQl9CisgCistCWRlYnVnX2YoInJlbW92ZSAlLjEw MHMiLCBjYW5vbmljYWxfcHJvdmlkZXIpOworKwlkZWJ1Z19mKCJyZW1vdmUgJS4xMDBzIiwgc2Fu ZV91cmkpOworIAlmb3IgKGlkID0gVEFJTFFfRklSU1QoJmlkdGFiLT5pZGxpc3QpOyBpZDsgaWQg PSBueHQpIHsKKyAJCW54dCA9IFRBSUxRX05FWFQoaWQsIG5leHQpOworIAkJLyogU2tpcCBmaWxl LS1iYXNlZCBrZXlzICovCisgCQlpZiAoaWQtPnByb3ZpZGVyID09IE5VTEwpCisgCQkJY29udGlu dWU7CistCQlpZiAoIXN0cmNtcChjYW5vbmljYWxfcHJvdmlkZXIsIGlkLT5wcm92aWRlcikpIHsK KysJCWlmICghc3RyY21wKHNhbmVfdXJpLCBpZC0+cHJvdmlkZXIpKSB7CisgCQkJVEFJTFFfUkVN T1ZFKCZpZHRhYi0+aWRsaXN0LCBpZCwgbmV4dCk7CisgCQkJZnJlZV9pZGVudGl0eShpZCk7Cisg CQkJaWR0YWItPm5lbnRyaWVzLS07CisrCQkJcmVtb3ZlZF9jb3VudCsrOworIAkJfQorIAl9Cist CWlmIChwa2NzMTFfZGVsX3Byb3ZpZGVyKGNhbm9uaWNhbF9wcm92aWRlcikgPT0gMCkKKysJLyog T25seSBzdWNjZWVkIGlmIHdlIGFjdHVhbGx5IHJlbW92ZWQga2V5cyBhbmQgdW5sb2FkZWQgcHJv dmlkZXIgKi8KKysJaWYgKHJlbW92ZWRfY291bnQgPiAwICYmIHBrY3MxMV9kZWxfcHJvdmlkZXIo c2FuZV91cmkpID09IDApIHsKKyAJCXN1Y2Nlc3MgPSAxOworLQllbHNlCisrCQlkZWJ1Z19mKCJy ZW1vdmVkICVkIGtleShzKSBmcm9tIHByb3ZpZGVyICVzIiwKKysJCSAgICByZW1vdmVkX2NvdW50 LCBzYW5lX3VyaSk7CisrCX0gZWxzZSBpZiAocmVtb3ZlZF9jb3VudCA9PSAwKSB7CisrCQllcnJv cl9mKCJubyBtYXRjaGluZyBrZXlzIGZvdW5kIGZvciBwcm92aWRlciAlcyIsIHNhbmVfdXJpKTsK KysJCS8qIFN0aWxsIHRyeSB0byBjbGVhbiB1cCBwcm92aWRlciBpZiBpdCBleGlzdHMgKi8KKysJ CXBrY3MxMV9kZWxfcHJvdmlkZXIoc2FuZV91cmkpOworKwl9IGVsc2UgeworIAkJZXJyb3JfZigi cGtjczExX2RlbF9wcm92aWRlciBmYWlsZWQiKTsKKysJfQorIHNlbmQ6CisgCWZyZWUocHJvdmlk ZXIpOworKwlmcmVlKHNhbmVfdXJpKTsKKyAJc2VuZF9zdGF0dXMoZSwgc3VjY2Vzcyk7CisgfQor ICNlbmRpZiAvKiBFTkFCTEVfUEtDUzExICovCitkaWZmIC0tZ2l0IGEvc3NoLWtleWdlbi5jIGIv c3NoLWtleWdlbi5jCitpbmRleCBlZDE5MzJmZjAuLjM0MmIwYzU3ZCAxMDA2NDQKKy0tLSBhL3Nz aC1rZXlnZW4uYworKysrIGIvc3NoLWtleWdlbi5jCitAQCAtODIwLDggKzgyMCwxMSBAQCBkb19k b3dubG9hZChzdHJ1Y3QgcGFzc3dkICpwdykKKyAJCQlmcmVlKGZwKTsKKyAJCX0gZWxzZSB7Cisg CQkJKHZvaWQpIHNzaGtleV93cml0ZShrZXlzW2ldLCBzdGRvdXQpOyAvKiBYWFggY2hlY2sgKi8K Ky0JCQlmcHJpbnRmKHN0ZG91dCwgIiVzJXNcbiIsCistCQkJICAgICooY29tbWVudHNbaV0pID09 ICdcMCcgPyAiIiA6ICIgIiwgY29tbWVudHNbaV0pOworKwkJCWlmICgqKGNvbW1lbnRzW2ldKSAh PSAnXDAnKSB7CisrCQkJCWZwcmludGYoc3Rkb3V0LCAiICVzIiwgY29tbWVudHNbaV0pOworKwkJ CX0KKysJCQkodm9pZCkgcGtjczExX3VyaV93cml0ZShrZXlzW2ldLCBzdGRvdXQpOworKwkJCWZw cmludGYoc3Rkb3V0LCAiXG4iKTsKKyAJCX0KKyAJCWZyZWUoY29tbWVudHNbaV0pOworIAkJc3No a2V5X2ZyZWUoa2V5c1tpXSk7CitkaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS1jbGllbnQuYyBiL3Nz aC1wa2NzMTEtY2xpZW50LmMKK2luZGV4IDMwYTRjZjVkYy4uM2ZkMDU4YTBjIDEwMDY0NAorLS0t IGEvc3NoLXBrY3MxMS1jbGllbnQuYworKysrIGIvc3NoLXBrY3MxMS1jbGllbnQuYworQEAgLTE4 LDYgKzE4LDcgQEAKKyAKKyAjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyAKKysjaWZkZWYgRU5BQkxF X1BLQ1MxMQorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4K KyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorQEAgLTM4LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSAi YXV0aGZkLmgiCisgI2luY2x1ZGUgImF0b21pY2lvLmgiCisgI2luY2x1ZGUgInNzaC1wa2NzMTEu aCIKKysjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKKyAjaW5jbHVkZSAic3NoZXJyLmgiCisg CisgLyogYm9ycm93cyBjb2RlIGZyb20gc2Z0cC1zZXJ2ZXIgYW5kIHNzaC1hZ2VudCAqLworQEAg LTM3OSw2ICszODEsMTkgQEAgcGtjczExX3N0YXJ0X2hlbHBlcihjb25zdCBjaGFyICpwYXRoKQor IAlyZXR1cm4gaGVscGVyOworIH0KKyAKKytpbnQKKytwa2NzMTFfYWRkX3Byb3ZpZGVyX2J5X3Vy aShzdHJ1Y3QgcGtjczExX3VyaSAqdXJpLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5 cCwgY2hhciAqKipsYWJlbHNwKQorK3sKKysJaW50IG5rZXlzID0gMDsKKysJY2hhciAqcHJvdmlk ZXJfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsKKysKKysJZGVidWdfZigiY2FsbGVkLCBwcm92 aWRlcl91cmkgPSAlcyIsIHByb3ZpZGVyX3VyaSk7CisrCisrCW5rZXlzID0gcGtjczExX2FkZF9w cm92aWRlcihwcm92aWRlcl91cmksIHBpbiwga2V5cCwgbGFiZWxzcCk7CisrCisrCXJldHVybiBu a2V5czsKKyt9CisrCisgaW50CisgcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpuYW1lLCBjaGFy ICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsCisgICAgIGNoYXIgKioqbGFiZWxzcCkKK0BA IC0zOTAsNiArNDA1LDggQEAgcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpuYW1lLCBjaGFyICpw aW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsCisgCXN0cnVjdCBzc2hidWYgKm1zZzsKKyAJc3Ry dWN0IGhlbHBlciAqaGVscGVyOworIAorKwlkZWJ1Z19mKCJjYWxsZWQsIG5hbWUgPSAlcyIsIG5h bWUpOworKworIAlpZiAoKGhlbHBlciA9IGhlbHBlcl9ieV9wcm92aWRlcihuYW1lKSkgPT0gTlVM TCAmJgorIAkgICAgKGhlbHBlciA9IHBrY3MxMV9zdGFydF9oZWxwZXIobmFtZSkpID09IE5VTEwp CisgCQlyZXR1cm4gLTE7CitAQCAtNDE0LDYgKzQzMSw3IEBAIHBrY3MxMV9hZGRfcHJvdmlkZXIo Y2hhciAqbmFtZSwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLAorIAkJKmtleXNw ID0geGNhbGxvYyhua2V5cywgc2l6ZW9mKHN0cnVjdCBzc2hrZXkgKikpOworIAkJaWYgKGxhYmVs c3ApCisgCQkJKmxhYmVsc3AgPSB4Y2FsbG9jKG5rZXlzLCBzaXplb2YoY2hhciAqKSk7CisrCQlk ZWJ1Z19mKCJua2V5cyA9ICV1IiwgbmtleXMpOworIAkJZm9yIChpID0gMDsgaSA8IG5rZXlzOyBp KyspIHsKKyAJCQkvKiBYWFggY2xlYW4gdXAgcHJvcGVybHkgaW5zdGVhZCBvZiBmYXRhbCgpICov CisgCQkJaWYgKChyID0gc3Noa2V5X2Zyb21zKG1zZywgJmspKSAhPSAwIHx8CitAQCAtNDk3LDMg KzUxNSw0IEBAIHBrY3MxMV9rZXlfZnJlZShzdHJ1Y3Qgc3Noa2V5ICprZXkpCisgCWlmIChoZWxw ZXItPm5rZXlibG9icyA9PSAwKQorIAkJaGVscGVyX3Rlcm1pbmF0ZShoZWxwZXIpOworIH0KKysj ZW5kaWYKK2RpZmYgLS1naXQgYS9zc2gtcGtjczExLXVyaS5jIGIvc3NoLXBrY3MxMS11cmkuYwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uZDViMDc0NTkyCistLS0gL2Rl di9udWxsCisrKysgYi9zc2gtcGtjczExLXVyaS5jCitAQCAtMCwwICsxLDQzOCBAQAorKy8qCisr ICogQ29weXJpZ2h0IChjKSAyMDE3IFJlZCBIYXQKKysgKgorKyAqIEF1dGhvcnM6IEpha3ViIEpl bGVuIDxqamVsZW5AcmVkaGF0LmNvbT4KKysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorKyAqIHB1cnBv c2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0 aGUgYWJvdmUKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IGFwcGVhciBpbiBhbGwgY29waWVzLgorKyAqCisrICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisrICogV0lU SCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElF UyBPRgorKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisrICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJF Q1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworKyAqIFdIQVRTT0VW RVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJ TiBBTgorKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9V UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisrICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBV U0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8KKysKKysjaW5jbHVkZSAi aW5jbHVkZXMuaCIKKysKKysjaWZkZWYgRU5BQkxFX1BLQ1MxMQorKworKyNpbmNsdWRlIDxzdGRp by5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrI2lu Y2x1ZGUgInNzaGtleS5oIgorKyNpbmNsdWRlICJzc2hidWYuaCIKKysjaW5jbHVkZSAibG9nLmgi CisrCisrI2RlZmluZSBDUllQVE9LSV9DT01QQVQKKysjaW5jbHVkZSAicGtjczExLmgiCisrCisr I2luY2x1ZGUgInNzaC1wa2NzMTEtdXJpLmgiCisrCisrI2RlZmluZSBQS0NTMTFfVVJJX1BBVEhf U0VQQVJBVE9SICI7IgorKyNkZWZpbmUgUEtDUzExX1VSSV9RVUVSWV9TRVBBUkFUT1IgIiYiCisr I2RlZmluZSBQS0NTMTFfVVJJX1ZBTFVFX1NFUEFSQVRPUiAiPSIKKysjZGVmaW5lIFBLQ1MxMV9V UklfSUQgImlkIgorKyNkZWZpbmUgUEtDUzExX1VSSV9UT0tFTiAidG9rZW4iCisrI2RlZmluZSBQ S0NTMTFfVVJJX09CSkVDVCAib2JqZWN0IgorKyNkZWZpbmUgUEtDUzExX1VSSV9MSUJfTUFOVUYg ImxpYnJhcnktbWFudWZhY3R1cmVyIgorKyNkZWZpbmUgUEtDUzExX1VSSV9NQU5VRiAibWFudWZh Y3R1cmVyIgorKyNkZWZpbmUgUEtDUzExX1VSSV9TRVJJQUwgInNlcmlhbCIKKysjZGVmaW5lIFBL Q1MxMV9VUklfTU9EVUxFX1BBVEggIm1vZHVsZS1wYXRoIgorKyNkZWZpbmUgUEtDUzExX1VSSV9Q SU5fVkFMVUUgInBpbi12YWx1ZSIKKysKKysvKiBLZXl3b3JkIHRva2Vucy4gKi8KKyt0eXBlZGVm IGVudW0geworKwlwSWQsIHBUb2tlbiwgcE9iamVjdCwgcExpYnJhcnlNYW51ZmFjdHVyZXIsIHBN YW51ZmFjdHVyZXIsIHBTZXJpYWwsCisrCXBNb2R1bGVQYXRoLCBwUGluVmFsdWUsIHBCYWRPcHRp b24KKyt9IHBrY3MxMXVyaU9wQ29kZXM7CisrCisrLyogVGV4dHVhbCByZXByZXNlbnRhdGlvbiBv ZiB0aGUgdG9rZW5zLiAqLworK3N0YXRpYyBzdHJ1Y3QgeworKwljb25zdCBjaGFyICpuYW1lOwor Kwlwa2NzMTF1cmlPcENvZGVzIG9wY29kZTsKKyt9IGtleXdvcmRzW10gPSB7CisrCXsgUEtDUzEx X1VSSV9JRCwgcElkIH0sCisrCXsgUEtDUzExX1VSSV9UT0tFTiwgcFRva2VuIH0sCisrCXsgUEtD UzExX1VSSV9PQkpFQ1QsIHBPYmplY3QgfSwKKysJeyBQS0NTMTFfVVJJX0xJQl9NQU5VRiwgcExp YnJhcnlNYW51ZmFjdHVyZXIgfSwKKysJeyBQS0NTMTFfVVJJX01BTlVGLCBwTWFudWZhY3R1cmVy IH0sCisrCXsgUEtDUzExX1VSSV9TRVJJQUwsIHBTZXJpYWwgfSwKKysJeyBQS0NTMTFfVVJJX01P RFVMRV9QQVRILCBwTW9kdWxlUGF0aCB9LAorKwl7IFBLQ1MxMV9VUklfUElOX1ZBTFVFLCBwUGlu VmFsdWUgfSwKKysJeyBOVUxMLCBwQmFkT3B0aW9uIH0KKyt9OworKworK3N0YXRpYyBwa2NzMTF1 cmlPcENvZGVzCisrcGFyc2VfdG9rZW4oY29uc3QgY2hhciAqY3ApCisreworKwl1X2ludCBpOwor KworKwlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXS5uYW1lOyBpKyspCisrCQlpZiAoc3RybmNhc2Vj bXAoY3AsIGtleXdvcmRzW2ldLm5hbWUsCisrCQkgICAgc3RybGVuKGtleXdvcmRzW2ldLm5hbWUp KSA9PSAwKQorKwkJCXJldHVybiBrZXl3b3Jkc1tpXS5vcGNvZGU7CisrCisrCXJldHVybiBwQmFk T3B0aW9uOworK30KKysKKytpbnQKKytwZXJjZW50X2RlY29kZShjaGFyICpkYXRhLCBjaGFyICoq b3V0cCkKKyt7CisrCWNoYXIgdG1wWzNdOworKwljaGFyICpvdXQsICp0bXBfZW5kOworKwljaGFy ICpwID0gZGF0YTsKKysJbG9uZyB2YWx1ZTsKKysJc2l6ZV90IG91dGxlbiA9IDA7CisrCisrCW91 dCA9IG1hbGxvYyhzdHJsZW4oZGF0YSkrMSk7IC8qIHVwcGVyIGJvdW5kICovCisrCWlmIChvdXQg PT0gTlVMTCkKKysJCXJldHVybiAtMTsKKysJd2hpbGUgKCpwICE9ICdcMCcpIHsKKysJCXN3aXRj aCAoKnApIHsKKysJCWNhc2UgJyUnOgorKwkJCXArKzsKKysJCQlpZiAoKnAgPT0gJ1wwJykKKysJ CQkJZ290byBmYWlsOworKwkJCXRtcFswXSA9ICpwKys7CisrCQkJaWYgKCpwID09ICdcMCcpCisr CQkJCWdvdG8gZmFpbDsKKysJCQl0bXBbMV0gPSAqcCsrOworKwkJCXRtcFsyXSA9ICdcMCc7Cisr CQkJdG1wX2VuZCA9IE5VTEw7CisrCQkJdmFsdWUgPSBzdHJ0b2wodG1wLCAmdG1wX2VuZCwgMTYp OworKwkJCWlmICh0bXBfZW5kICE9IHRtcCsyKQorKwkJCQlnb3RvIGZhaWw7CisrCQkJZWxzZQor KwkJCQlvdXRbb3V0bGVuKytdID0gKGNoYXIpIHZhbHVlOworKwkJCWJyZWFrOworKwkJZGVmYXVs dDoKKysJCQlvdXRbb3V0bGVuKytdID0gKnArKzsKKysJCQlicmVhazsKKysJCX0KKysJfQorKwor KwkvKiB6ZXJvIHRlcm1pbmF0ZSAqLworKwlvdXRbb3V0bGVuXSA9ICdcMCc7CisrCSpvdXRwID0g b3V0OworKwlyZXR1cm4gb3V0bGVuOworK2ZhaWw6CisrCWZyZWUob3V0KTsKKysJcmV0dXJuIC0x OworK30KKysKKytzdHJ1Y3Qgc3NoYnVmICoKKytwZXJjZW50X2VuY29kZShjb25zdCBjaGFyICpk YXRhLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICphbGxvd19saXN0KQorK3sKKysJc3RydWN0 IHNzaGJ1ZiAqYiA9IE5VTEw7CisrCWNoYXIgdG1wWzRdLCAqY3A7CisrCXNpemVfdCBpOworKwor KwlpZiAoKGIgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisrCQlyZXR1cm4gTlVMTDsKKysJZm9y IChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrCQljcCA9IHN0cmNocihhbGxvd19saXN0LCBk YXRhW2ldKTsKKysJCS8qIGlmIGMgaXMgc3BlY2lmaWVkIGFzICdcMCcgcG9pbnRlciB0byB0ZXJt aW5hdG9yIGlzIHJldHVybmVkICEhICovCisrCQlpZiAoY3AgIT0gTlVMTCAmJiAqY3AgIT0gJ1ww JykgeworKwkJCWlmIChzc2hidWZfcHV0KGIsICZkYXRhW2ldLCAxKSAhPSAwKQorKwkJCQlnb3Rv IGVycjsKKysJCX0gZWxzZQorKwkJCWlmIChzbnByaW50Zih0bXAsIDQsICIlJSUwMlgiLCAodW5z aWduZWQgY2hhcikgZGF0YVtpXSkgPCAzCisrCQkJICAgIHx8IHNzaGJ1Zl9wdXQoYiwgdG1wLCAz KSAhPSAwKQorKwkJCQlnb3RvIGVycjsKKysJfQorKwlpZiAoc3NoYnVmX3B1dChiLCAiXDAiLCAx KSA9PSAwKQorKwkJcmV0dXJuIGI7CisrZXJyOgorKwlzc2hidWZfZnJlZShiKTsKKysJcmV0dXJu IE5VTEw7CisrfQorKworK2NoYXIgKgorK3BrY3MxMV91cmlfYXBwZW5kKGNoYXIgKnBhcnQsIGNv bnN0IGNoYXIgKnNlcGFyYXRvciwgY29uc3QgY2hhciAqa2V5LAorKyAgICBzdHJ1Y3Qgc3NoYnVm ICp2YWx1ZSkKKyt7CisrCWNoYXIgKm5ld19wYXJ0OworKwlzaXplX3Qgc2l6ZSA9IDA7CisrCisr CWlmICh2YWx1ZSA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCXNpemUgPSBhc3ByaW50 ZigmbmV3X3BhcnQsCisrCSAgICAiJXMlcyVzIiAgUEtDUzExX1VSSV9WQUxVRV9TRVBBUkFUT1Ig IiVzIiwKKysJICAgIChwYXJ0ICE9IE5VTEwgPyBwYXJ0IDogIiIpLAorKwkgICAgKHBhcnQgIT0g TlVMTCA/IHNlcGFyYXRvciA6ICIiKSwKKysJICAgIGtleSwgc3NoYnVmX3B0cih2YWx1ZSkpOwor Kwlzc2hidWZfZnJlZSh2YWx1ZSk7CisrCWZyZWUocGFydCk7CisrCisrCWlmIChzaXplIDw9IDAp CisrCQlyZXR1cm4gTlVMTDsKKysJcmV0dXJuIG5ld19wYXJ0OworK30KKysKKytjaGFyICoKKytw a2NzMTFfdXJpX2dldChzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKQorK3sKKysJc2l6ZV90IHNpemUg PSAwOworKwljaGFyICpwID0gTlVMTCwgKnBhdGggPSBOVUxMLCAqcXVlcnkgPSBOVUxMOworKwor KwkvKiBjb21wb3NlIGEgcGVyY2VudC1lbmNvZGVkIElEICovCisrCWlmICh1cmktPmlkX2xlbiA+ IDApIHsKKysJCXN0cnVjdCBzc2hidWYgKmtleV9pZCA9IHBlcmNlbnRfZW5jb2RlKHVyaS0+aWQs IHVyaS0+aWRfbGVuLCAiIik7CisrCQlwYXRoID0gcGtjczExX3VyaV9hcHBlbmQocGF0aCwgUEtD UzExX1VSSV9QQVRIX1NFUEFSQVRPUiwKKysJCSAgICBQS0NTMTFfVVJJX0lELCBrZXlfaWQpOwor KwkJaWYgKHBhdGggPT0gTlVMTCkKKysJCQlnb3RvIGVycjsKKysJfQorKworKwkvKiBXcml0ZSBv YmplY3QgbGFiZWwgKi8KKysJaWYgKHVyaS0+b2JqZWN0KSB7CisrCQlzdHJ1Y3Qgc3NoYnVmICps YWJlbCA9IHBlcmNlbnRfZW5jb2RlKHVyaS0+b2JqZWN0LCBzdHJsZW4odXJpLT5vYmplY3QpLAor KwkJICAgIFBLQ1MxMV9VUklfV0hJVEVMSVNUKTsKKysJCXBhdGggPSBwa2NzMTFfdXJpX2FwcGVu ZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAorKwkJICAgIFBLQ1MxMV9VUklfT0JK RUNULCBsYWJlbCk7CisrCQlpZiAocGF0aCA9PSBOVUxMKQorKwkJCWdvdG8gZXJyOworKwl9Cisr CisrCS8qIFdyaXRlIHRva2VuIGxhYmVsICovCisrCWlmICh1cmktPnRva2VuKSB7CisrCQlzdHJ1 Y3Qgc3NoYnVmICpsYWJlbCA9IHBlcmNlbnRfZW5jb2RlKHVyaS0+dG9rZW4sIHN0cmxlbih1cmkt PnRva2VuKSwKKysJCSAgICBQS0NTMTFfVVJJX1dISVRFTElTVCk7CisrCQlwYXRoID0gcGtjczEx X3VyaV9hcHBlbmQocGF0aCwgUEtDUzExX1VSSV9QQVRIX1NFUEFSQVRPUiwKKysJCSAgICBQS0NT MTFfVVJJX1RPS0VOLCBsYWJlbCk7CisrCQlpZiAocGF0aCA9PSBOVUxMKQorKwkJCWdvdG8gZXJy OworKwl9CisrCisrCS8qIFdyaXRlIG1hbnVmYWN0dXJlciAqLworKwlpZiAodXJpLT5tYW51Zikg eworKwkJc3RydWN0IHNzaGJ1ZiAqbWFudWYgPSBwZXJjZW50X2VuY29kZSh1cmktPm1hbnVmLAor KwkJICAgIHN0cmxlbih1cmktPm1hbnVmKSwgUEtDUzExX1VSSV9XSElURUxJU1QpOworKwkJcGF0 aCA9IHBrY3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IsCisr CQkgICAgUEtDUzExX1VSSV9NQU5VRiwgbWFudWYpOworKwkJaWYgKHBhdGggPT0gTlVMTCkKKysJ CQlnb3RvIGVycjsKKysJfQorKworKwkvKiBXcml0ZSBzZXJpYWwgKi8KKysJaWYgKHVyaS0+c2Vy aWFsKSB7CisrCQlzdHJ1Y3Qgc3NoYnVmICpzZXJpYWwgPSBwZXJjZW50X2VuY29kZSh1cmktPnNl cmlhbCwKKysJCSAgICBzdHJsZW4odXJpLT5zZXJpYWwpLCBQS0NTMTFfVVJJX1dISVRFTElTVCk7 CisrCQlwYXRoID0gcGtjczExX3VyaV9hcHBlbmQocGF0aCwgUEtDUzExX1VSSV9QQVRIX1NFUEFS QVRPUiwKKysJCSAgICBQS0NTMTFfVVJJX1NFUklBTCwgc2VyaWFsKTsKKysJCWlmIChwYXRoID09 IE5VTEwpCisrCQkJZ290byBlcnI7CisrCX0KKysKKysJLyogV3JpdGUgbW9kdWxlX3BhdGggKi8K KysJaWYgKHVyaS0+bW9kdWxlX3BhdGgpIHsKKysJCXN0cnVjdCBzc2hidWYgKm1vZHVsZSA9IHBl cmNlbnRfZW5jb2RlKHVyaS0+bW9kdWxlX3BhdGgsCisrCQkgICAgc3RybGVuKHVyaS0+bW9kdWxl X3BhdGgpLCBQS0NTMTFfVVJJX1dISVRFTElTVCAiLyIpOworKwkJcXVlcnkgPSBwa2NzMTFfdXJp X2FwcGVuZChxdWVyeSwgUEtDUzExX1VSSV9RVUVSWV9TRVBBUkFUT1IsCisrCQkgICAgUEtDUzEx X1VSSV9NT0RVTEVfUEFUSCwgbW9kdWxlKTsKKysJCWlmIChxdWVyeSA9PSBOVUxMKQorKwkJCWdv dG8gZXJyOworKwl9CisrCisrCXNpemUgPSBhc3ByaW50ZigmcCwgUEtDUzExX1VSSV9TQ0hFTUUg IiVzJXMlcyIsCisrCSAgICBwYXRoICE9IE5VTEwgPyBwYXRoIDogIiIsCisrCSAgICBxdWVyeSAh PSBOVUxMID8gIj8iIDogIiIsCisrCSAgICBxdWVyeSAhPSBOVUxMID8gcXVlcnkgOiAiIik7Cisr ZXJyOgorKwlmcmVlKHF1ZXJ5KTsKKysJZnJlZShwYXRoKTsKKysJaWYgKHNpemUgPD0gMCkKKysJ CXJldHVybiBOVUxMOworKwlyZXR1cm4gcDsKKyt9CisrCisrc3RydWN0IHBrY3MxMV91cmkgKgor K3BrY3MxMV91cmlfaW5pdCgpCisreworKwlzdHJ1Y3QgcGtjczExX3VyaSAqZCA9IGNhbGxvYygx LCBzaXplb2Yoc3RydWN0IHBrY3MxMV91cmkpKTsKKysJcmV0dXJuIGQ7CisrfQorKworK3ZvaWQK Kytwa2NzMTFfdXJpX2NsZWFudXAoc3RydWN0IHBrY3MxMV91cmkgKnBrY3MxMSkKKyt7CisrCWlm IChwa2NzMTEgPT0gTlVMTCkgeworKwkJcmV0dXJuOworKwl9CisrCisrCWZyZWUocGtjczExLT5p ZCk7CisrCWZyZWUocGtjczExLT5tb2R1bGVfcGF0aCk7CisrCWZyZWUocGtjczExLT50b2tlbik7 CisrCWZyZWUocGtjczExLT5vYmplY3QpOworKwlmcmVlKHBrY3MxMS0+bGliX21hbnVmKTsKKysJ ZnJlZShwa2NzMTEtPm1hbnVmKTsKKysJZnJlZShwa2NzMTEtPnNlcmlhbCk7CisrCWlmIChwa2Nz MTEtPnBpbikKKysJCWZyZWV6ZXJvKHBrY3MxMS0+cGluLCBzdHJsZW4ocGtjczExLT5waW4pKTsK KysJZnJlZShwa2NzMTEpOworK30KKysKKytpbnQKKytwa2NzMTFfdXJpX3BhcnNlKGNvbnN0IGNo YXIgKnVyaSwgc3RydWN0IHBrY3MxMV91cmkgKnBrY3MxMSkKKyt7CisrCWNoYXIgKnNhdmVwdHIx LCAqc2F2ZXB0cjIsICpzdHIxLCAqc3RyMiwgKnRvazsKKysJaW50IHJ2ID0gMCwgbGVuOworKwlj aGFyICpwID0gTlVMTDsKKysKKysJc2l6ZV90IHNjaGVtZV9sZW4gPSBzdHJsZW4oUEtDUzExX1VS SV9TQ0hFTUUpOworKwlpZiAoc3RybGVuKHVyaSkgPCBzY2hlbWVfbGVuIHx8IC8qIGVtcHR5IFVS SSBtYXRjaGVzIGV2ZXJ5dGhpbmcgKi8KKysJICAgIHN0cm5jbXAodXJpLCBQS0NTMTFfVVJJX1ND SEVNRSwgc2NoZW1lX2xlbikgIT0gMCkgeworKwkJZXJyb3JfZigiVGhlICclcycgZG9lcyBub3Qg bG9vayBsaWtlIFBLQ1MjMTEgVVJJIiwgdXJpKTsKKysJCXJldHVybiAtMTsKKysJfQorKworKwlp ZiAocGtjczExID09IE5VTEwpIHsKKysJCWVycm9yX2YoIkJhZCBhcmd1bWVudHMuIFRoZSBwa2Nz MTEgY2FuJ3QgYmUgbnVsbCIpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCS8qIHNraXAgVVJJ IHNjaGVtYSBuYW1lICovCisrCXAgPSBzdHJkdXAodXJpKTsKKysJc3RyMSA9IHA7CisrCisrCS8q IGV2ZXJ5dGhpbmcgYmVmb3JlID8gKi8KKysJdG9rID0gc3RydG9rX3Ioc3RyMSwgIj8iLCAmc2F2 ZXB0cjEpOworKwlpZiAodG9rID09IE5VTEwpIHsKKysJCWVycm9yX2YoInBrMTEtcGF0aCBleHBl Y3RlZCwgZ290IEVPRiIpOworKwkJcnYgPSAtMTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCS8q IHNraXAgVVJJIHNjaGVtYSBuYW1lOgorKwkgKiB0aGUgc2NoZW1lIGVuc3VyZXMgdGhhdCB0aGVy ZSBpcyBhdCBsZWFzdCBzb21ldGhpbmcgYmVmb3JlICI/IgorKwkgKiBhbGxvd2luZyBlbXB0eSBw azExLXBhdGguIFJlc3VsdGluZyB0b2tlbiBhdCB3b3JzdCBwb2ludGluZyB0bworKwkgKiBcMCBi eXRlICovCisrCXRvayA9IHRvayArIHNjaGVtZV9sZW47CisrCisrCS8qIHBhcnNlIHBrMTEtcGF0 aCAqLworKwlmb3IgKHN0cjIgPSB0b2s7IDsgc3RyMiA9IE5VTEwpIHsKKysJCWNoYXIgKipjaGFy cHRyLCAqYXJnID0gTlVMTDsKKysJCXBrY3MxMXVyaU9wQ29kZXMgb3Bjb2RlOworKwkJdG9rID0g c3RydG9rX3Ioc3RyMiwgUEtDUzExX1VSSV9QQVRIX1NFUEFSQVRPUiwgJnNhdmVwdHIyKTsKKysJ CWlmICh0b2sgPT0gTlVMTCkKKysJCQlicmVhazsKKysJCW9wY29kZSA9IHBhcnNlX3Rva2VuKHRv ayk7CisrCQlpZiAob3Bjb2RlICE9IHBCYWRPcHRpb24pCisrCQkJYXJnID0gdG9rICsgc3RybGVu KGtleXdvcmRzW29wY29kZV0ubmFtZSkgKyAxOyAvKiBzZXBhcmF0b3IgIj0iICovCisrCisrCQlz d2l0Y2ggKG9wY29kZSkgeworKwkJY2FzZSBwSWQ6CisrCQkJLyogQ0tBX0lEICovCisrCQkJaWYg KHBrY3MxMS0+aWQgIT0gTlVMTCkgeworKwkJCQl2ZXJib3NlX2YoIlRoZSBpZCBhbHJlYWR5IHNl dCBpbiB0aGUgUEtDUyMxMSBVUkkiKTsKKysJCQkJcnYgPSAtMTsKKysJCQkJZ290byBvdXQ7Cisr CQkJfQorKwkJCWxlbiA9IHBlcmNlbnRfZGVjb2RlKGFyZywgJnBrY3MxMS0+aWQpOworKwkJCWlm IChsZW4gPD0gMCkgeworKwkJCQl2ZXJib3NlX2YoIkZhaWxlZCB0byBwZXJjZW50LWRlY29kZSBD S0FfSUQ6ICVzIiwgYXJnKTsKKysJCQkJcnYgPSAtMTsKKysJCQkJZ290byBvdXQ7CisrCQkJfSBl bHNlCisrCQkJCXBrY3MxMS0+aWRfbGVuID0gbGVuOworKwkJCWRlYnVnM19mKCJTZXR0aW5nIENL QV9JRCA9ICVzIGZyb20gUEtDUyMxMSBVUkkiLCBhcmcpOworKwkJCWJyZWFrOworKwkJY2FzZSBw VG9rZW46CisrCQkJLyogQ0tfVE9LRU5fSU5GTyAtPiBsYWJlbCAqLworKwkJCWNoYXJwdHIgPSAm cGtjczExLT50b2tlbjsKKysgcGFyc2Vfc3RyaW5nOgorKwkJCWlmICgqY2hhcnB0ciAhPSBOVUxM KSB7CisrCQkJCXZlcmJvc2VfZigiVGhlICVzIGFscmVhZHkgc2V0IGluIHRoZSBQS0NTIzExIFVS SSIsCisrCQkJCSAgICBrZXl3b3Jkc1tvcGNvZGVdLm5hbWUpOworKwkJCQlydiA9IC0xOworKwkJ CQlnb3RvIG91dDsKKysJCQl9CisrCQkJcGVyY2VudF9kZWNvZGUoYXJnLCBjaGFycHRyKTsKKysJ CQlkZWJ1ZzNfZigiU2V0dGluZyAlcyA9ICVzIGZyb20gUEtDUyMxMSBVUkkiLAorKwkJCSAgICBr ZXl3b3Jkc1tvcGNvZGVdLm5hbWUsICpjaGFycHRyKTsKKysJCQlicmVhazsKKysKKysJCWNhc2Ug cE9iamVjdDoKKysJCQkvKiBDS19UT0tFTl9JTkZPIC0+IG1hbnVmYWN0dXJlcklEICovCisrCQkJ Y2hhcnB0ciA9ICZwa2NzMTEtPm9iamVjdDsKKysJCQlnb3RvIHBhcnNlX3N0cmluZzsKKysKKysJ CWNhc2UgcE1hbnVmYWN0dXJlcjoKKysJCQkvKiBDS19UT0tFTl9JTkZPIC0+IG1hbnVmYWN0dXJl cklEICovCisrCQkJY2hhcnB0ciA9ICZwa2NzMTEtPm1hbnVmOworKwkJCWdvdG8gcGFyc2Vfc3Ry aW5nOworKworKwkJY2FzZSBwU2VyaWFsOgorKwkJCS8qIENLX1RPS0VOX0lORk8gLT4gc2VyaWFs TnVtYmVyICovCisrCQkJY2hhcnB0ciA9ICZwa2NzMTEtPnNlcmlhbDsKKysJCQlnb3RvIHBhcnNl X3N0cmluZzsKKysKKysJCWNhc2UgcExpYnJhcnlNYW51ZmFjdHVyZXI6CisrCQkJLyogQ0tfSU5G TyAtPiBtYW51ZmFjdHVyZXJJRCAqLworKwkJCWNoYXJwdHIgPSAmcGtjczExLT5saWJfbWFudWY7 CisrCQkJZ290byBwYXJzZV9zdHJpbmc7CisrCisrCQlkZWZhdWx0OgorKwkJCS8qIFVucmVjb2du aXplZCBhdHRyaWJ1dGUgaW4gdGhlIFVSSSBwYXRoIFNIT1VMRCBiZSBlcnJvciAqLworKwkJCXZl cmJvc2VfZigiVW5rbm93biBwYXJ0IG9mIHBhdGggaW4gUEtDUyMxMSBVUkk6ICVzIiwgdG9rKTsK KysJCX0KKysJfQorKworKwl0b2sgPSBzdHJ0b2tfcihOVUxMLCAiPyIsICZzYXZlcHRyMSk7Cisr CWlmICh0b2sgPT0gTlVMTCkgeworKwkJZ290byBvdXQ7CisrCX0KKysJLyogcGFyc2UgcGsxMS1x dWVyeSAob3B0aW9uYWwpICovCisrCWZvciAoc3RyMiA9IHRvazsgOyBzdHIyID0gTlVMTCkgewor KwkJY2hhciAqYXJnOworKwkJcGtjczExdXJpT3BDb2RlcyBvcGNvZGU7CisrCQl0b2sgPSBzdHJ0 b2tfcihzdHIyLCBQS0NTMTFfVVJJX1FVRVJZX1NFUEFSQVRPUiwgJnNhdmVwdHIyKTsKKysJCWlm ICh0b2sgPT0gTlVMTCkKKysJCQlicmVhazsKKysJCW9wY29kZSA9IHBhcnNlX3Rva2VuKHRvayk7 CisrCQlpZiAob3Bjb2RlICE9IHBCYWRPcHRpb24pCisrCQkJYXJnID0gdG9rICsgc3RybGVuKGtl eXdvcmRzW29wY29kZV0ubmFtZSkgKyAxOyAvKiBzZXBhcmF0b3IgIj0iICovCisrCisrCQlzd2l0 Y2ggKG9wY29kZSkgeworKwkJY2FzZSBwTW9kdWxlUGF0aDoKKysJCQkvKiBtb2R1bGUtcGF0aCBp cyBQS0NTMTFQcm92aWRlciAqLworKwkJCWlmIChwa2NzMTEtPm1vZHVsZV9wYXRoICE9IE5VTEwp IHsKKysJCQkJdmVyYm9zZV9mKCJNdWx0aXBsZSBtb2R1bGUtcGF0aCBhdHRyaWJ1dGVzIGFyZSIK KysJCQkJICAgICJub3Qgc3VwcG9ydGVkIHRoZSBQS0NTIzExIFVSSSIpOworKwkJCQlydiA9IC0x OworKwkJCQlnb3RvIG91dDsKKysJCQl9CisrCQkJcGVyY2VudF9kZWNvZGUoYXJnLCAmcGtjczEx LT5tb2R1bGVfcGF0aCk7CisrCQkJZGVidWczX2YoIlNldHRpbmcgUEtDUzExUHJvdmlkZXIgPSAl cyBmcm9tIFBLQ1MjMTEgVVJJIiwKKysJCQkgICAgcGtjczExLT5tb2R1bGVfcGF0aCk7CisrCQkJ YnJlYWs7CisrCisrCQljYXNlIHBQaW5WYWx1ZToKKysJCQkvKiBwaW4tdmFsdWUgKi8KKysJCQlp ZiAocGtjczExLT5waW4gIT0gTlVMTCkgeworKwkJCQl2ZXJib3NlX2YoIk11bHRpcGxlIHBpbi12 YWx1ZSBhdHRyaWJ1dGVzIGFyZSIKKysJCQkJICAgICJub3Qgc3VwcG9ydGVkIHRoZSBQS0NTIzEx IFVSSSIpOworKwkJCQlydiA9IC0xOworKwkJCQlnb3RvIG91dDsKKysJCQl9CisrCQkJcGVyY2Vu dF9kZWNvZGUoYXJnLCAmcGtjczExLT5waW4pOworKwkJCWRlYnVnM19mKCJTZXR0aW5nIFBJTiBm cm9tIFBLQ1MjMTEgVVJJIik7CisrCQkJYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJCS8qIFVu cmVjb2duaXplZCBhdHRyaWJ1dGUgaW4gdGhlIFVSSSBxdWVyeSBTSE9VTEQgYmUgaWdub3JlZCAq LworKwkJCXZlcmJvc2VfZigiVW5rbm93biBwYXJ0IG9mIHF1ZXJ5IGluIFBLQ1MjMTEgVVJJOiAl cyIsIHRvayk7CisrCQl9CisrCX0KKytvdXQ6CisrCWZyZWUocCk7CisrCXJldHVybiBydjsKKyt9 CisrCisrI2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEgKi8KK2RpZmYgLS1naXQgYS9zc2gtcGtjczEx LXVyaS5oIGIvc3NoLXBrY3MxMS11cmkuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw MDAwMDAwMC4uYmM3NThlNzYwCistLS0gL2Rldi9udWxsCisrKysgYi9zc2gtcGtjczExLXVyaS5o CitAQCAtMCwwICsxLDQ2IEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdAor KyAqCisrICogQXV0aG9yczogSmFrdWIgSmVsZW4gPGpqZWxlbkByZWRoYXQuY29tPgorKyAqCisr ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBz b2Z0d2FyZSBmb3IgYW55CisrICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVi eSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorKyAqIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisrICoKKysg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJ TVMgQUxMIFdBUlJBTlRJRVMKKysgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrICogTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKysgKiBB TlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9S IEFOWSBEQU1BR0VTCisrICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwg REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisrICogQUNUSU9OIE9GIENPTlRSQUNULCBO RUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKysgKiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRX QVJFLgorKyAqLworKworKyNpZm5kZWYgX1NTSF9QS0NTMTFfVVJJX0gKKysjZGVmaW5lIF9TU0hf UEtDUzExX1VSSV9ICisrCisrI2RlZmluZSBQS0NTMTFfVVJJX1NDSEVNRSAicGtjczExOiIKKysj ZGVmaW5lIFBLQ1MxMV9VUklfV0hJVEVMSVNUCSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIg XAorKwkJCQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIFwKKysJCQkJIjAxMjM0NTY3ODlf LS4oKSIKKysKKytzdHJ1Y3QgcGtjczExX3VyaSB7CisrCS8qIHBhdGggKi8KKysJY2hhciAqaWQ7 CisrCXNpemVfdCBpZF9sZW47CisrCWNoYXIgKnRva2VuOworKwljaGFyICpvYmplY3Q7CisrCWNo YXIgKmxpYl9tYW51ZjsKKysJY2hhciAqbWFudWY7CisrCWNoYXIgKnNlcmlhbDsKKysJLyogcXVl cnkgKi8KKysJY2hhciAqbW9kdWxlX3BhdGg7CisrCWNoYXIgKnBpbjsgLyogT25seSBwYXJzZWQs IGJ1dCBub3QgcHJpbnRlZCAqLworK307CisrCisrc3RydWN0CSBwa2NzMTFfdXJpICpwa2NzMTFf dXJpX2luaXQoKTsKKyt2b2lkCSBwa2NzMTFfdXJpX2NsZWFudXAoc3RydWN0IHBrY3MxMV91cmkg Kik7CisraW50CSBwa2NzMTFfdXJpX3BhcnNlKGNvbnN0IGNoYXIgKiwgc3RydWN0IHBrY3MxMV91 cmkgKik7Cisrc3RydWN0CSBwa2NzMTFfdXJpICpwa2NzMTFfdXJpX2luaXQoKTsKKytjaGFyCSpw a2NzMTFfdXJpX2dldChzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKTsKKysjZW5kaWYgLyogX1NTSF9Q S0NTMTFfVVJJX0ggKi8KK2RpZmYgLS1naXQgYS9zc2gtcGtjczExLmMgYi9zc2gtcGtjczExLmMK K2luZGV4IGJkNDVlZjA5MC4uMmQzMDhlZDYwIDEwMDY0NAorLS0tIGEvc3NoLXBrY3MxMS5jCisr KysgYi9zc2gtcGtjczExLmMKK0BAIC0zNiw2ICszNiw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wv ZWNkc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2VuZGlmCisgCisgI2RlZmluZSBD UllQVE9LSV9DT01QQVQKK0BAIC00OCw2ICs0OSw3IEBACisgI2luY2x1ZGUgIm1pc2MuaCIKKyAj aW5jbHVkZSAic3NoYnVmLmgiCisgI2luY2x1ZGUgInNzaC1wa2NzMTEuaCIKKysjaW5jbHVkZSAi c3NoLXBrY3MxMS11cmkuaCIKKyAjaW5jbHVkZSAiZGlnZXN0LmgiCisgI2luY2x1ZGUgInhtYWxs b2MuaCIKKyAjaW5jbHVkZSAiY3J5cHRvX2FwaS5oIgorQEAgLTU4LDggKzYwLDggQEAgc3RydWN0 IHBrY3MxMV9zbG90aW5mbyB7CisgCWludAkJCWxvZ2dlZF9pbjsKKyB9OworIAorLXN0cnVjdCBw a2NzMTFfcHJvdmlkZXIgeworLQljaGFyCQkJKm5hbWU7Cisrc3RydWN0IHBrY3MxMV9tb2R1bGUg eworKwljaGFyCQkJKm1vZHVsZV9wYXRoOworIAl2b2lkCQkJKmhhbmRsZTsKKyAJQ0tfRlVOQ1RJ T05fTElTVAkqZnVuY3Rpb25fbGlzdDsKKyAJQ0tfSU5GTwkJCWluZm87CitAQCAtNjgsNiArNzAs MTMgQEAgc3RydWN0IHBrY3MxMV9wcm92aWRlciB7CisgCXN0cnVjdCBwa2NzMTFfc2xvdGluZm8J KnNsb3RpbmZvOworIAlpbnQJCQl2YWxpZDsKKyAJaW50CQkJcmVmY291bnQ7CisrfTsKKysKKytz dHJ1Y3QgcGtjczExX3Byb3ZpZGVyIHsKKysJY2hhcgkJCSpuYW1lOworKwlzdHJ1Y3QgcGtjczEx X21vZHVsZQkqbW9kdWxlOyAvKiBjYW4gYmUgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBwcm92aWRl cnMgKi8KKysJaW50CQkJcmVmY291bnQ7CisrCWludAkJCXZhbGlkOworIAlUQUlMUV9FTlRSWShw a2NzMTFfcHJvdmlkZXIpIG5leHQ7CisgfTsKKyAKK0BAIC03OSw2ICs4OCw3IEBAIHN0cnVjdCBw a2NzMTFfa2V5IHsKKyAJQ0tfVUxPTkcJCXNsb3RpZHg7CisgCWNoYXIJCQkqa2V5aWQ7CisgCWlu dAkJCWtleWlkX2xlbjsKKysJY2hhcgkJCSpsYWJlbDsKKyAJVEFJTFFfRU5UUlkocGtjczExX2tl eSkJbmV4dDsKKyB9OworIAorQEAgLTEwNSwyNiArMTE1LDYxIEBAIG9zc2xfZXJyb3IoY29uc3Qg Y2hhciAqbXNnKQorICAqIHRoaXMgaXMgY2FsbGVkIHdoZW4gYSBwcm92aWRlciBnZXRzIHVucmVn aXN0ZXJlZC4KKyAgKi8KKyBzdGF0aWMgdm9pZAorLXBrY3MxMV9wcm92aWRlcl9maW5hbGl6ZShz dHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwKQorK3BrY3MxMV9tb2R1bGVfZmluYWxpemUoc3RydWN0 IHBrY3MxMV9tb2R1bGUgKm0pCisgeworIAlDS19SViBydjsKKyAJQ0tfVUxPTkcgaTsKKyAKKy0J ZGVidWdfZigicHJvdmlkZXIgXCIlc1wiIHJlZmNvdW50ICVkIHZhbGlkICVkIiwKKy0JICAgIHAt Pm5hbWUsIHAtPnJlZmNvdW50LCBwLT52YWxpZCk7CistCWlmICghcC0+dmFsaWQpCisrCWRlYnVn X2YoIiVwIHJlZmNvdW50ICVkIHZhbGlkICVkIiwgbSwgbS0+cmVmY291bnQsIG0tPnZhbGlkKTsK KysJaWYgKCFtLT52YWxpZCkKKyAJCXJldHVybjsKKy0JZm9yIChpID0gMDsgaSA8IHAtPm5zbG90 czsgaSsrKSB7CistCQlpZiAocC0+c2xvdGluZm9baV0uc2Vzc2lvbiAmJgorLQkJICAgIChydiA9 IHAtPmZ1bmN0aW9uX2xpc3QtPkNfQ2xvc2VTZXNzaW9uKAorLQkJICAgIHAtPnNsb3RpbmZvW2ld LnNlc3Npb24pKSAhPSBDS1JfT0spCisrCWZvciAoaSA9IDA7IGkgPCBtLT5uc2xvdHM7IGkrKykg eworKwkJaWYgKG0tPnNsb3RpbmZvW2ldLnNlc3Npb24gJiYKKysJCSAgICAocnYgPSBtLT5mdW5j dGlvbl9saXN0LT5DX0Nsb3NlU2Vzc2lvbigKKysJCSAgICBtLT5zbG90aW5mb1tpXS5zZXNzaW9u KSkgIT0gQ0tSX09LKQorIAkJCWVycm9yKCJDX0Nsb3NlU2Vzc2lvbiBmYWlsZWQ6ICVsdSIsIHJ2 KTsKKyAJfQorLQlpZiAoKHJ2ID0gcC0+ZnVuY3Rpb25fbGlzdC0+Q19GaW5hbGl6ZShOVUxMKSkg IT0gQ0tSX09LKQorKwlpZiAoKHJ2ID0gbS0+ZnVuY3Rpb25fbGlzdC0+Q19GaW5hbGl6ZShOVUxM KSkgIT0gQ0tSX09LKQorIAkJZXJyb3IoIkNfRmluYWxpemUgZmFpbGVkOiAlbHUiLCBydik7Cisr CW0tPnZhbGlkID0gMDsKKysJbS0+ZnVuY3Rpb25fbGlzdCA9IE5VTEw7CisrCWRsY2xvc2UobS0+ aGFuZGxlKTsKKyt9CisrCisrLyoKKysgKiByZW1vdmUgYSByZWZlcmVuY2UgdG8gdGhlIHBrY3Mx MSBtb2R1bGUuCisrICogY2FsbGVkIHdoZW4gYSBwcm92aWRlciBpcyB1bnJlZ2lzdGVyZWQuCisr ICovCisrc3RhdGljIHZvaWQKKytwa2NzMTFfbW9kdWxlX3VucmVmKHN0cnVjdCBwa2NzMTFfbW9k dWxlICptKQorK3sKKysJZGVidWdfZigiJXAgcmVmY291bnQgJWQiLCBtLCBtLT5yZWZjb3VudCk7 CisrCWlmICgtLW0tPnJlZmNvdW50IDw9IDApIHsKKysJCXBrY3MxMV9tb2R1bGVfZmluYWxpemUo bSk7CisrCQlpZiAobS0+dmFsaWQpCisrCQkJZXJyb3JfZigiJXAgc3RpbGwgdmFsaWQiLCBtKTsK KysJCWZyZWUobS0+c2xvdGxpc3QpOworKwkJZnJlZShtLT5zbG90aW5mbyk7CisrCQlmcmVlKG0t Pm1vZHVsZV9wYXRoKTsKKysJCWZyZWUobSk7CisrCX0KKyt9CisrCisrLyoKKysgKiBmaW5hbGl6 ZSBhIHByb3ZpZGVyIHNoYXJlZCBsaWJyYXJ5LCBpdCdzIG5vIGxvbmdlciB1c2FibGUuCisrICog aG93ZXZlciwgdGhlcmUgbWlnaHQgc3RpbGwgYmUga2V5cyByZWZlcmVuY2luZyB0aGlzIHByb3Zp ZGVyLAorKyAqIHNvIHRoZSBhY3R1YWwgZnJlZWluZyBvZiBtZW1vcnkgaXMgaGFuZGxlZCBieSBw a2NzMTFfcHJvdmlkZXJfdW5yZWYoKS4KKysgKiB0aGlzIGlzIGNhbGxlZCB3aGVuIGEgcHJvdmlk ZXIgZ2V0cyB1bnJlZ2lzdGVyZWQuCisrICovCisrc3RhdGljIHZvaWQKKytwa2NzMTFfcHJvdmlk ZXJfZmluYWxpemUoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCkKKyt7CisrCWRlYnVnX2YoIiVw IHJlZmNvdW50ICVkIHZhbGlkICVkIiwgcCwgcC0+cmVmY291bnQsIHAtPnZhbGlkKTsKKysJaWYg KCFwLT52YWxpZCkKKysJCXJldHVybjsKKysJcGtjczExX21vZHVsZV91bnJlZihwLT5tb2R1bGUp OworKwlwLT5tb2R1bGUgPSBOVUxMOworIAlwLT52YWxpZCA9IDA7CistCXAtPmZ1bmN0aW9uX2xp c3QgPSBOVUxMOworLQlkbGNsb3NlKHAtPmhhbmRsZSk7CisgfQorIAorIC8qCitAQCAtMTM2LDE1 ICsxODEsMjcgQEAgcGtjczExX3Byb3ZpZGVyX3VucmVmKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnApCisgeworIAlkZWJ1Z19mKCJwcm92aWRlciBcIiVzXCIgcmVmY291bnQgJWQiLCBwLT5uYW1l LCBwLT5yZWZjb3VudCk7CisgCWlmICgtLXAtPnJlZmNvdW50IDw9IDApIHsKKy0JCWlmIChwLT52 YWxpZCkKKy0JCQllcnJvcl9mKCJwcm92aWRlciBcIiVzXCIgc3RpbGwgdmFsaWQiLCBwLT5uYW1l KTsKKyAJCWZyZWUocC0+bmFtZSk7CistCQlmcmVlKHAtPnNsb3RsaXN0KTsKKy0JCWZyZWUocC0+ c2xvdGluZm8pOworKwkJaWYgKHAtPm1vZHVsZSkKKysJCQlwa2NzMTFfbW9kdWxlX3VucmVmKHAt Pm1vZHVsZSk7CisgCQlmcmVlKHApOworIAl9CisgfQorIAorKy8qIGxvb2t1cCBwcm92aWRlciBi eSBtb2R1bGUgcGF0aCAqLworK3N0YXRpYyBzdHJ1Y3QgcGtjczExX21vZHVsZSAqCisrcGtjczEx X3Byb3ZpZGVyX2xvb2t1cF9tb2R1bGUoY2hhciAqbW9kdWxlX3BhdGgpCisreworKwlzdHJ1Y3Qg cGtjczExX3Byb3ZpZGVyICpwOworKworKwlUQUlMUV9GT1JFQUNIKHAsICZwa2NzMTFfcHJvdmlk ZXJzLCBuZXh0KSB7CisrCQlkZWJ1ZygiY2hlY2sgJXAgJXMgKCVzKSIsIHAsIHAtPm5hbWUsIHAt Pm1vZHVsZS0+bW9kdWxlX3BhdGgpOworKwkJaWYgKCFzdHJjbXAobW9kdWxlX3BhdGgsIHAtPm1v ZHVsZS0+bW9kdWxlX3BhdGgpKQorKwkJCXJldHVybiAocC0+bW9kdWxlKTsKKysJfQorKwlyZXR1 cm4gKE5VTEwpOworK30KKysKKyAvKiBsb29rdXAgcHJvdmlkZXIgYnkgbmFtZSAqLworIHN0YXRp YyBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoKKyBwa2NzMTFfcHJvdmlkZXJfbG9va3VwKGNoYXIg KnByb3ZpZGVyX2lkKQorQEAgLTE1OSwxOSArMjE2LDU1IEBAIHBrY3MxMV9wcm92aWRlcl9sb29r dXAoY2hhciAqcHJvdmlkZXJfaWQpCisgCXJldHVybiAoTlVMTCk7CisgfQorIAorK2ludCBwa2Nz MTFfZGVsX3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqKTsKKysKKyAvKiB1bnJl Z2lzdGVyIHByb3ZpZGVyIGJ5IG5hbWUgKi8KKyBpbnQKKyBwa2NzMTFfZGVsX3Byb3ZpZGVyKGNo YXIgKnByb3ZpZGVyX2lkKQorK3sKKysJaW50IHJ2OworKwlzdHJ1Y3QgcGtjczExX3VyaSAqdXJp OworKworKwlkZWJ1Z19mKCJjYWxsZWQsIHByb3ZpZGVyX2lkID0gJXMiLCBwcm92aWRlcl9pZCk7 CisrCisrICAgICAgaWYgKHByb3ZpZGVyX2lkID09IE5VTEwpCisrICAgICAgICAgIHJldHVybiAw OworKworKwl1cmkgPSBwa2NzMTFfdXJpX2luaXQoKTsKKysJaWYgKHVyaSA9PSBOVUxMKQorKwkJ ZmF0YWwoIkZhaWxlZCB0byBpbml0IFBLQ1MjMTEgVVJJIik7CisrCisrCWlmIChzdHJsZW4ocHJv dmlkZXJfaWQpID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKKysJICAgIHN0cm5jbXAo cHJvdmlkZXJfaWQsIFBLQ1MxMV9VUklfU0NIRU1FLCBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUp KSA9PSAwKSB7CisrCQlpZiAocGtjczExX3VyaV9wYXJzZShwcm92aWRlcl9pZCwgdXJpKSAhPSAw KQorKwkJCWZhdGFsKCJGYWlsZWQgdG8gcGFyc2UgUEtDUyMxMSBVUkkiKTsKKysJfSBlbHNlIHsK KysJCXVyaS0+bW9kdWxlX3BhdGggPSBzdHJkdXAocHJvdmlkZXJfaWQpOworKwl9CisrCisrCXJ2 ID0gcGtjczExX2RlbF9wcm92aWRlcl9ieV91cmkodXJpKTsKKysJcGtjczExX3VyaV9jbGVhbnVw KHVyaSk7CisrCXJldHVybiBydjsKKyt9CisrCisrLyogdW5yZWdpc3RlciBwcm92aWRlciBieSBQ S0NTIzExIFVSSSAqLworK2ludAorK3BrY3MxMV9kZWxfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBw a2NzMTFfdXJpICp1cmkpCisgeworIAlzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwOworKwlpbnQg cnYgPSAtMTsKKysJY2hhciAqcHJvdmlkZXJfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsKKyAK Ky0JaWYgKChwID0gcGtjczExX3Byb3ZpZGVyX2xvb2t1cChwcm92aWRlcl9pZCkpICE9IE5VTEwp IHsKKysJZGVidWczX2YoImNhbGxlZCB3aXRoIHByb3ZpZGVyICVzIiwgcHJvdmlkZXJfdXJpKTsK KysKKysJaWYgKChwID0gcGtjczExX3Byb3ZpZGVyX2xvb2t1cChwcm92aWRlcl91cmkpKSAhPSBO VUxMKSB7CisgCQlUQUlMUV9SRU1PVkUoJnBrY3MxMV9wcm92aWRlcnMsIHAsIG5leHQpOworIAkJ cGtjczExX3Byb3ZpZGVyX2ZpbmFsaXplKHApOworIAkJcGtjczExX3Byb3ZpZGVyX3VucmVmKHAp OworLQkJcmV0dXJuICgwKTsKKysJCXJ2ID0gMDsKKyAJfQorLQlyZXR1cm4gKC0xKTsKKysJZnJl ZShwcm92aWRlcl91cmkpOworKwlyZXR1cm4gcnY7CisgfQorIAorIC8qIHJlbGVhc2UgYSB3cmFw cGVkIG9iamVjdCAqLworQEAgLTE4Myw2ICsyNzYsNyBAQCBwa2NzMTFfazExX2ZyZWUoc3RydWN0 IHBrY3MxMV9rZXkgKmsxMSkKKyAJaWYgKGsxMS0+cHJvdmlkZXIpCisgCQlwa2NzMTFfcHJvdmlk ZXJfdW5yZWYoazExLT5wcm92aWRlcik7CisgCWZyZWUoazExLT5rZXlpZCk7CisrCWZyZWUoazEx LT5sYWJlbCk7CisgCXNzaGJ1Zl9mcmVlKGsxMS0+a2V5YmxvYik7CisgCWZyZWUoazExKTsKKyB9 CitAQCAtMTk4LDggKzI5Miw4IEBAIHBrY3MxMV9maW5kKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnAsIENLX1VMT05HIHNsb3RpZHgsIENLX0FUVFJJQlVURSAqYXR0ciwKKyAJQ0tfUlYJCQlydjsK KyAJaW50CQkJcmV0ID0gLTE7CisgCistCWYgPSBwLT5mdW5jdGlvbl9saXN0OworLQlzZXNzaW9u ID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKKysJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rp b25fbGlzdDsKKysJc2Vzc2lvbiA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lv bjsKKyAJaWYgKChydiA9IGYtPkNfRmluZE9iamVjdHNJbml0KHNlc3Npb24sIGF0dHIsIG5hdHRy KSkgIT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19GaW5kT2JqZWN0c0luaXQgZmFpbGVkIChuYXR0 ciAlbHUpOiAlbHUiLCBuYXR0ciwgcnYpOworIAkJcmV0dXJuICgtMSk7CitAQCAtMjM2LDE0ICsz MzAsMTQgQEAgcGtjczExX2xvZ2luX3Nsb3Qoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcHJvdmlk ZXIsIHN0cnVjdCBwa2NzMTFfc2xvdGluZm8gKnNpLAorIAlpZiAoc2ktPnRva2VuLmZsYWdzICYg Q0tGX1BST1RFQ1RFRF9BVVRIRU5USUNBVElPTl9QQVRIKQorIAkJdmVyYm9zZSgiRGVmZXJyaW5n IFBJTiBlbnRyeSB0byByZWFkZXIga2V5cGFkLiIpOworIAllbHNlIHsKKy0JCXNucHJpbnRmKHBy b21wdCwgc2l6ZW9mKHByb21wdCksICJFbnRlciBQSU4gZm9yICclcyc6ICIsCisrCQlzbnByaW50 Zihwcm9tcHQsIHNpemVvZihwcm9tcHQpLCAiRW50ZXIgUElOIGZvciAnJS4zMnMnOiAiLAorIAkJ ICAgIHNpLT50b2tlbi5sYWJlbCk7CistCQlpZiAoKHBpbiA9IHJlYWRfcGFzc3BocmFzZShwcm9t cHQsIFJQX0FMTE9XX0VPRikpID09IE5VTEwpIHsKKysJCWlmICgocGluID0gcmVhZF9wYXNzcGhy YXNlKHByb21wdCwgUlBfQUxMT1dfRU9GfFJQX0FMTE9XX1NURElOKSkgPT0gTlVMTCkgeworIAkJ CWRlYnVnX2YoIm5vIHBpbiBzcGVjaWZpZWQiKTsKKyAJCQlyZXR1cm4gKC0xKTsJLyogYmFpbCBv dXQgKi8KKyAJCX0KKyAJfQorLQlydiA9IHByb3ZpZGVyLT5mdW5jdGlvbl9saXN0LT5DX0xvZ2lu KHNpLT5zZXNzaW9uLCB0eXBlLCAodV9jaGFyICopcGluLAorKwlydiA9IHByb3ZpZGVyLT5tb2R1 bGUtPmZ1bmN0aW9uX2xpc3QtPkNfTG9naW4oc2ktPnNlc3Npb24sIHR5cGUsICh1X2NoYXIgKilw aW4sCisgCSAgICAocGluICE9IE5VTEwpID8gc3RybGVuKHBpbikgOiAwKTsKKyAJaWYgKHBpbiAh PSBOVUxMKQorIAkJZnJlZXplcm8ocGluLCBzdHJsZW4ocGluKSk7CitAQCAtMjczLDEzICszNjcs MTQgQEAgcGtjczExX2xvZ2luX3Nsb3Qoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcHJvdmlkZXIs IHN0cnVjdCBwa2NzMTFfc2xvdGluZm8gKnNpLAorIHN0YXRpYyBpbnQKKyBwa2NzMTFfbG9naW4o c3RydWN0IHBrY3MxMV9rZXkgKmsxMSwgQ0tfVVNFUl9UWVBFIHR5cGUpCisgeworLQlpZiAoazEx ID09IE5VTEwgfHwgazExLT5wcm92aWRlciA9PSBOVUxMIHx8ICFrMTEtPnByb3ZpZGVyLT52YWxp ZCkgeworKwlpZiAoazExID09IE5VTEwgfHwgazExLT5wcm92aWRlciA9PSBOVUxMIHx8ICFrMTEt PnByb3ZpZGVyLT52YWxpZCB8fAorKwkgICAgazExLT5wcm92aWRlci0+bW9kdWxlID09IE5VTEwg fHwgIWsxMS0+cHJvdmlkZXItPm1vZHVsZS0+dmFsaWQpIHsKKyAJCWVycm9yKCJubyBwa2NzMTEg KHZhbGlkKSBwcm92aWRlciBmb3VuZCIpOworIAkJcmV0dXJuICgtMSk7CisgCX0KKyAKKyAJcmV0 dXJuIHBrY3MxMV9sb2dpbl9zbG90KGsxMS0+cHJvdmlkZXIsCistCSAgICAmazExLT5wcm92aWRl ci0+c2xvdGluZm9bazExLT5zbG90aWR4XSwgdHlwZSk7CisrCSAgICAmazExLT5wcm92aWRlci0+ bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdLCB0eXBlKTsKKyB9CisgCisgCitAQCAtMjk1 LDEzICszOTAsMTQgQEAgcGtjczExX2NoZWNrX29ial9ib29sX2F0dHJpYihzdHJ1Y3QgcGtjczEx X2tleSAqazExLCBDS19PQkpFQ1RfSEFORExFIG9iaiwKKyAKKyAJKnZhbCA9IDA7CisgCistCWlm ICghazExLT5wcm92aWRlciB8fCAhazExLT5wcm92aWRlci0+dmFsaWQpIHsKKysJaWYgKCFrMTEt PnByb3ZpZGVyIHx8ICFrMTEtPnByb3ZpZGVyLT52YWxpZCB8fAorKwkgICAgIWsxMS0+cHJvdmlk ZXItPm1vZHVsZSB8fCAhazExLT5wcm92aWRlci0+bW9kdWxlLT52YWxpZCkgeworIAkJZXJyb3Io Im5vIHBrY3MxMSAodmFsaWQpIHByb3ZpZGVyIGZvdW5kIik7CisgCQlyZXR1cm4gKC0xKTsKKyAJ fQorIAorLQlmID0gazExLT5wcm92aWRlci0+ZnVuY3Rpb25fbGlzdDsKKy0Jc2kgPSAmazExLT5w cm92aWRlci0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKKysJZiA9IGsxMS0+cHJvdmlkZXItPm1v ZHVsZS0+ZnVuY3Rpb25fbGlzdDsKKysJc2kgPSAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90 aW5mb1trMTEtPnNsb3RpZHhdOworIAorIAlhdHRyLnR5cGUgPSB0eXBlOworIAlhdHRyLnBWYWx1 ZSA9ICZmbGFnOworQEAgLTMzMiwxMyArNDI4LDE0IEBAIHBrY3MxMV9nZXRfa2V5KHN0cnVjdCBw a2NzMTFfa2V5ICprMTEsIENLX01FQ0hBTklTTV9UWVBFIG1lY2hfdHlwZSkKKyAJaW50CQkJIGFs d2F5c19hdXRoID0gMDsKKyAJaW50CQkJIGRpZF9sb2dpbiA9IDA7CisgCistCWlmICghazExLT5w cm92aWRlciB8fCAhazExLT5wcm92aWRlci0+dmFsaWQpIHsKKysJaWYgKCFrMTEtPnByb3ZpZGVy IHx8ICFrMTEtPnByb3ZpZGVyLT52YWxpZCB8fAorKwkgICAgIWsxMS0+cHJvdmlkZXItPm1vZHVs ZSB8fCAhazExLT5wcm92aWRlci0+bW9kdWxlLT52YWxpZCkgeworIAkJZXJyb3IoIm5vIHBrY3Mx MSAodmFsaWQpIHByb3ZpZGVyIGZvdW5kIik7CisgCQlyZXR1cm4gKC0xKTsKKyAJfQorIAorLQlm ID0gazExLT5wcm92aWRlci0+ZnVuY3Rpb25fbGlzdDsKKy0Jc2kgPSAmazExLT5wcm92aWRlci0+ c2xvdGluZm9bazExLT5zbG90aWR4XTsKKysJZiA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+ZnVu Y3Rpb25fbGlzdDsKKysJc2kgPSAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEt PnNsb3RpZHhdOworIAorIAlpZiAoKHNpLT50b2tlbi5mbGFncyAmIENLRl9MT0dJTl9SRVFVSVJF RCkgJiYgIXNpLT5sb2dnZWRfaW4pIHsKKyAJCWlmIChwa2NzMTFfbG9naW4oazExLCBDS1VfVVNF UikgPCAwKSB7CitAQCAtNDM3LDYgKzUzNCwxMiBAQCBwa2NzMTFfcmVjb3JkX2tleShzdHJ1Y3Qg cGtjczExX3Byb3ZpZGVyICpwcm92aWRlciwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAJCWsxMS0+a2V5 aWQgPSB4bWFsbG9jKGsxMS0+a2V5aWRfbGVuKTsKKyAJCW1lbWNweShrMTEtPmtleWlkLCBrZXlp ZF9hdHRyaWItPnBWYWx1ZSwgazExLT5rZXlpZF9sZW4pOworIAl9CisrCWlmIChrZXlpZF9hdHRy aWItPnVsVmFsdWVMZW4gPiAwICkgeworKwkJazExLT5sYWJlbCA9IHhtYWxsb2Moa2V5aWRfYXR0 cmliLT51bFZhbHVlTGVuKzEpOworKwkJbWVtY3B5KGsxMS0+bGFiZWwsIGtleWlkX2F0dHJpYi0+ cFZhbHVlLCBrZXlpZF9hdHRyaWItPnVsVmFsdWVMZW4pOworKwkJazExLT5sYWJlbFtrZXlpZF9h dHRyaWItPnVsVmFsdWVMZW5dID0gMDsKKysJfQorKworIAlUQUlMUV9JTlNFUlRfVEFJTCgmcGtj czExX2tleXMsIGsxMSwgbmV4dCk7CisgCisgCXJldHVybiAwOworQEAgLTQ2NCw2ICs1NjcsNDIg QEAgcGtjczExX2xvb2t1cF9rZXkoc3RydWN0IHNzaGtleSAqa2V5KQorIAlyZXR1cm4gZm91bmQ7 CisgfQorIAorKy8qCisrICogVGhpcyBjYW4ndCBiZSBpbiB0aGUgc3NoLXBrY3MxMS11cmksIGJl Y2FzZSB3ZSBjYW4gbm90IGRlcGVuZCBvbgorKyAqIFBLQ1MjMTEgc3RydWN0dXJlcyBpbiBzc2gt YWdlbnQgKHVzaW5nIGNsaWVudC1oZWxwZXIgY29tbXVuaWNhdGlvbikKKysgKi8KKytpbnQKKytw a2NzMTFfdXJpX3dyaXRlKGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSwgRklMRSAqZikKKyt7Cisr CWNoYXIgKnAgPSBOVUxMOworKwlzdHJ1Y3QgcGtjczExX3VyaSB1cmk7CisrCXN0cnVjdCBwa2Nz MTFfa2V5ICprMTEgPSBwa2NzMTFfbG9va3VwX2tleShrZXkpOworKworKwlpZiAoazExID09IE5V TEwpIHsKKysJCWVycm9yKCJGYWlsZWQgdG8gZ2V0IGV4X2RhdGEgZm9yIGtleSB0eXBlICVkIiwg a2V5LT50eXBlKTsKKysJCXJldHVybiAoLTEpOworKwl9CisrCisrCS8qIG9taXQgdHlwZSAtLSB3 ZSBhcmUgbG9va2luZyBmb3IgcHJpdmF0ZS1wdWJsaWMgb3IgcHJpdmF0ZS1jZXJ0aWZpY2F0ZSBw YWlycyAqLworKwl1cmkuaWQgPSBrMTEtPmtleWlkOworKwl1cmkuaWRfbGVuID0gazExLT5rZXlp ZF9sZW47CisrCXVyaS50b2tlbiA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazEx LT5zbG90aWR4XS50b2tlbi5sYWJlbDsKKysJdXJpLm9iamVjdCA9IGsxMS0+bGFiZWw7CisrCXVy aS5tb2R1bGVfcGF0aCA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+bW9kdWxlX3BhdGg7CisrCXVy aS5saWJfbWFudWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmluZm8ubWFudWZhY3R1cmVySUQ7 CisrCXVyaS5tYW51ZiA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90 aWR4XS50b2tlbi5tYW51ZmFjdHVyZXJJRDsKKysJdXJpLnNlcmlhbCA9IGsxMS0+cHJvdmlkZXIt Pm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4XS50b2tlbi5zZXJpYWxOdW1iZXI7CisrCisr CXAgPSBwa2NzMTFfdXJpX2dldCgmdXJpKTsKKysJLyogZG8gbm90IGNsZWFudXAgLS0gd2UgZG8g bm90IGFsbG9jYXRlIGhlcmUsIG9ubHkgcmVmZXJlbmNlICovCisrCWlmIChwID09IE5VTEwpCisr CQlyZXR1cm4gLTE7CisrCisrCWZwcmludGYoZiwgIiAlcyIsIHApOworKwlmcmVlKHApOworKwly ZXR1cm4gMDsKKyt9CisrCisgI2lmZGVmIFdJVEhfT1BFTlNTTAorIC8qCisgICogU2VlOgorQEAg LTU2OCw4ICs3MDcsOCBAQCBwa2NzMTFfc2lnbl9yc2Eoc3RydWN0IHNzaGtleSAqa2V5LAorIAkJ cmV0dXJuIFNTSF9FUlJfQUdFTlRfRkFJTFVSRTsKKyAJfQorIAorLQlmID0gazExLT5wcm92aWRl ci0+ZnVuY3Rpb25fbGlzdDsKKy0Jc2kgPSAmazExLT5wcm92aWRlci0+c2xvdGluZm9bazExLT5z bG90aWR4XTsKKysJZiA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKKysJ c2kgPSAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOworIAor IAlpZiAoKHNpZ2xlbiA9IEVWUF9QS0VZX3NpemUoa2V5LT5wa2V5KSkgPD0gMCkKKyAJCXJldHVy biBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CitAQCAtNjU3LDggKzc5Niw4IEBAIHBrY3MxMV9z aWduX2VjZHNhKHN0cnVjdCBzc2hrZXkgKmtleSwKKyAJZGVidWczX2YoInNpZ24gdXNpbmcgcHJv dmlkZXIgJXMgc2xvdGlkeCAlbHUiLAorIAkgICAgazExLT5wcm92aWRlci0+bmFtZSwgKHVfbG9u ZylrMTEtPnNsb3RpZHgpOworIAorLQlmID0gazExLT5wcm92aWRlci0+ZnVuY3Rpb25fbGlzdDsK Ky0Jc2kgPSAmazExLT5wcm92aWRlci0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKKysJZiA9IGsx MS0+cHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKKysJc2kgPSAmazExLT5wcm92aWRl ci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOworIAorIAkvKiBQcmVwYXJlIGRpZ2Vz dCB0byBiZSBzaWduZWQgKi8KKyAJaWYgKChoYXNoYWxnID0gc3Noa2V5X2VjX25pZF90b19oYXNo X2FsZyhrZXktPmVjZHNhX25pZCkpID09IC0xKQorQEAgLTc0MSw4ICs4ODAsOCBAQCBwa2NzMTFf c2lnbl9lZDI1NTE5KHN0cnVjdCBzc2hrZXkgKmtleSwKKyAJZGVidWczX2YoInNpZ24gdXNpbmcg cHJvdmlkZXIgJXMgc2xvdGlkeCAlbHUiLAorIAkgICAgazExLT5wcm92aWRlci0+bmFtZSwgKHVf bG9uZylrMTEtPnNsb3RpZHgpOworIAorLQlmID0gazExLT5wcm92aWRlci0+ZnVuY3Rpb25fbGlz dDsKKy0Jc2kgPSAmazExLT5wcm92aWRlci0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKKysJZiA9 IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKKysJc2kgPSAmazExLT5wcm92 aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOworIAorIAl4ZGF0YSA9IHhtYWxs b2MoZGF0YWxlbik7CisgCW1lbWNweSh4ZGF0YSwgZGF0YSwgZGF0YWxlbik7CitAQCAtNzcwLDcg KzkwOSw4IEBAIHBrY3MxMV9zaWduX2VkMjU1MTkoc3RydWN0IHNzaGtleSAqa2V5LAorIAlyZXR1 cm4gcmV0OworIH0KKyAKKy0vKiByZW1vdmUgdHJhaWxpbmcgc3BhY2VzICovCisrLyogcmVtb3Zl IHRyYWlsaW5nIHNwYWNlcy4gTm90ZSwgdGhhdCB0aGlzIGRvZXMgTk9UIGd1YXJhbnRlZSB0aGUg YnVmZmVyCisrICogd2lsbCBiZSBudWxsIHRlcm1pbmF0ZWQgaWYgdGhlcmUgYXJlIG5vIHRyYWls aW5nIHNwYWNlcyEgKi8KKyBzdGF0aWMgY2hhciAqCisgcm1zcGFjZSh1X2NoYXIgKmJ1Ziwgc2l6 ZV90IGxlbikKKyB7CitAQCAtODAyLDggKzk0Miw4IEBAIHBrY3MxMV9vcGVuX3Nlc3Npb24oc3Ry dWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwgY2hhciAqcGluLAorIAlD S19TRVNTSU9OX0hBTkRMRQlzZXNzaW9uOworIAlpbnQJCQlsb2dpbl9yZXF1aXJlZCwgcmV0Owor IAorLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsKKy0Jc2kgPSAmcC0+c2xvdGluZm9bc2xvdGlkeF07 CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisrCXNpID0gJnAtPm1vZHVsZS0+c2xv dGluZm9bc2xvdGlkeF07CisgCisgCWxvZ2luX3JlcXVpcmVkID0gc2ktPnRva2VuLmZsYWdzICYg Q0tGX0xPR0lOX1JFUVVJUkVEOworIAorQEAgLTgxMyw5ICs5NTMsOSBAQCBwa2NzMTFfb3Blbl9z ZXNzaW9uKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsIGNoYXIg KnBpbiwKKyAJCWVycm9yKCJwaW4gcmVxdWlyZWQiKTsKKyAJCXJldHVybiAoLVNTSF9QS0NTMTFf RVJSX1BJTl9SRVFVSVJFRCk7CisgCX0KKy0JaWYgKChydiA9IGYtPkNfT3BlblNlc3Npb24ocC0+ c2xvdGxpc3Rbc2xvdGlkeF0sIENLRl9SV19TRVNTSU9OfAorKwlpZiAoKHJ2ID0gZi0+Q19PcGVu U2Vzc2lvbihwLT5tb2R1bGUtPnNsb3RsaXN0W3Nsb3RpZHhdLCBDS0ZfUldfU0VTU0lPTnwKKyAJ ICAgIENLRl9TRVJJQUxfU0VTU0lPTiwgTlVMTCwgTlVMTCwgJnNlc3Npb24pKSAhPSBDS1JfT0sp IHsKKy0JCWVycm9yKCJDX09wZW5TZXNzaW9uIGZhaWxlZDogJWx1IiwgcnYpOworKwkJZXJyb3Io IkNfT3BlblNlc3Npb24gZmFpbGVkIGZvciBzbG90ICVsdTogJWx1Iiwgc2xvdGlkeCwgcnYpOwor IAkJcmV0dXJuICgtMSk7CisgCX0KKyAJaWYgKGxvZ2luX3JlcXVpcmVkICYmIHBpbiAhPSBOVUxM ICYmIHN0cmxlbihwaW4pICE9IDApIHsKK0BAIC04NTEsNyArOTkxLDggQEAgc3RhdGljIHN0cnVj dCBzc2hrZXkgKgorIHBrY3MxMV9mZXRjaF9lY2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92 aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2JqKQor IHsKKy0JQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbM107CisrCUNLX0FUVFJJQlVURQkJIGtleV9h dHRyWzRdOworKwlpbnQJCQkgbmF0dHIgPSA0OworIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lv bjsKKyAJQ0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2OworQEAgLTg2 NCwxNCArMTAwNSwxNSBAQCBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCisgCW1lbXNldCgma2V5X2F0dHIsIDAs IHNpemVvZihrZXlfYXR0cikpOworIAlrZXlfYXR0clswXS50eXBlID0gQ0tBX0lEOworLQlrZXlf YXR0clsxXS50eXBlID0gQ0tBX0VDX1BPSU5UOworLQlrZXlfYXR0clsyXS50eXBlID0gQ0tBX0VD X1BBUkFNUzsKKysJa2V5X2F0dHJbMV0udHlwZSA9IENLQV9MQUJFTDsKKysJa2V5X2F0dHJbMl0u dHlwZSA9IENLQV9FQ19QT0lOVDsKKysJa2V5X2F0dHJbM10udHlwZSA9IENLQV9FQ19QQVJBTVM7 CisgCistCXNlc3Npb24gPSBwLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOworLQlmID0gcC0+ ZnVuY3Rpb25fbGlzdDsKKysJc2Vzc2lvbiA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0u c2Vzc2lvbjsKKysJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKKyAKKyAJLyogZmlndXJl IG91dCBzaXplIG9mIHRoZSBhdHRyaWJ1dGVzICovCistCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVW YWx1ZShzZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgMyk7CisrCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1 dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tS X09LKSB7CisgCQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsK KyAJCXJldHVybiAoTlVMTCk7CitAQCAtODgyLDE5ICsxMDI0LDE5IEBAIHBrY3MxMV9mZXRjaF9l Y2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwK KyAJICogZW5zdXJlIHRoYXQgbm9uZSBvZiB0aGUgb3RoZXJzIGFyZSB6ZXJvIGxlbmd0aC4KKyAJ ICogWFhYIGFzc3VtZXMgQ0tBX0lEIGlzIGFsd2F5cyBmaXJzdC4KKyAJICovCistCWlmIChrZXlf YXR0clsxXS51bFZhbHVlTGVuID09IDAgfHwKKy0JICAgIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4g PT0gMCkgeworKwlpZiAoa2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwIHx8CisrCSAgICBrZXlf YXR0clszXS51bFZhbHVlTGVuID09IDApIHsKKyAJCWVycm9yKCJpbnZhbGlkIGF0dHJpYnV0ZSBs ZW5ndGgiKTsKKyAJCXJldHVybiAoTlVMTCk7CisgCX0KKyAKKyAJLyogYWxsb2NhdGUgYnVmZmVy cyBmb3IgYXR0cmlidXRlcyAqLworLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorKwlmb3IgKGkg PSAwOyBpIDwgbmF0dHI7IGkrKykKKyAJCWlmIChrZXlfYXR0cltpXS51bFZhbHVlTGVuID4gMCkK KyAJCQlrZXlfYXR0cltpXS5wVmFsdWUgPSB4Y2FsbG9jKDEsIGtleV9hdHRyW2ldLnVsVmFsdWVM ZW4pOworIAorIAkvKiByZXRyaWV2ZSBJRCwgcHVibGljIHBvaW50IGFuZCBjdXJ2ZSBwYXJhbWV0 ZXJzIG9mIEVDIGtleSAqLworLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwg Km9iaiwga2V5X2F0dHIsIDMpOworKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lv biwgKm9iaiwga2V5X2F0dHIsIG5hdHRyKTsKKyAJaWYgKHJ2ICE9IENLUl9PSykgeworIAkJZXJy b3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7CisgCQlnb3RvIGZhaWw7 CitAQCAtOTA2LDggKzEwNDgsOCBAQCBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVjdCBw a2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCQlnb3RvIGZhaWw7CisgCX0K KyAKKy0JYXR0cnAgPSBrZXlfYXR0clsyXS5wVmFsdWU7CistCWdyb3VwID0gZDJpX0VDUEtQYXJh bWV0ZXJzKE5VTEwsICZhdHRycCwga2V5X2F0dHJbMl0udWxWYWx1ZUxlbik7CisrCWF0dHJwID0g a2V5X2F0dHJbM10ucFZhbHVlOworKwlncm91cCA9IGQyaV9FQ1BLUGFyYW1ldGVycyhOVUxMLCAm YXR0cnAsIGtleV9hdHRyWzNdLnVsVmFsdWVMZW4pOworIAlpZiAoZ3JvdXAgPT0gTlVMTCkgewor IAkJb3NzbF9lcnJvcigiZDJpX0VDUEtQYXJhbWV0ZXJzIGZhaWxlZCIpOworIAkJZ290byBmYWls OworQEAgLTkxOCwxMyArMTA2MCwxMyBAQCBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVj dCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCQlnb3RvIGZhaWw7Cisg CX0KKyAKKy0JaWYgKGtleV9hdHRyWzFdLnVsVmFsdWVMZW4gPD0gMikgeworKwlpZiAoa2V5X2F0 dHJbMl0udWxWYWx1ZUxlbiA8PSAyKSB7CisgCQllcnJvcigiQ0tBX0VDX1BPSU5UIHRvbyBzbWFs bCIpOworIAkJZ290byBmYWlsOworIAl9CisgCistCWF0dHJwID0ga2V5X2F0dHJbMV0ucFZhbHVl OworLQlvY3RldCA9IGQyaV9BU04xX09DVEVUX1NUUklORyhOVUxMLCAmYXR0cnAsIGtleV9hdHRy WzFdLnVsVmFsdWVMZW4pOworKwlhdHRycCA9IGtleV9hdHRyWzJdLnBWYWx1ZTsKKysJb2N0ZXQg PSBkMmlfQVNOMV9PQ1RFVF9TVFJJTkcoTlVMTCwgJmF0dHJwLCBrZXlfYXR0clsyXS51bFZhbHVl TGVuKTsKKyAJaWYgKG9jdGV0ID09IE5VTEwpIHsKKyAJCW9zc2xfZXJyb3IoImQyaV9BU04xX09D VEVUX1NUUklORyBmYWlsZWQiKTsKKyAJCWdvdG8gZmFpbDsKK0BAIC05ODUsNyArMTEyNyw4IEBA IHN0YXRpYyBzdHJ1Y3Qgc3Noa2V5ICoKKyBwa2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1Y3Qg cGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorICAgICBDS19PQkpFQ1RfSEFO RExFICpvYmopCisgeworLQlDS19BVFRSSUJVVEUJCSBrZXlfYXR0clszXTsKKysJQ0tfQVRUUklC VVRFCQkga2V5X2F0dHJbNF07CisrCWludAkJCSBuYXR0ciA9IDQ7CisgCUNLX1NFU1NJT05fSEFO RExFCSBzZXNzaW9uOworIAlDS19GVU5DVElPTl9MSVNUCSpmID0gTlVMTDsKKyAJQ0tfUlYJCQkg cnY7CitAQCAtOTk2LDE0ICsxMTM5LDE1IEBAIHBrY3MxMV9mZXRjaF9yc2FfcHVia2V5KHN0cnVj dCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCisgCW1lbXNldCgma2V5 X2F0dHIsIDAsIHNpemVvZihrZXlfYXR0cikpOworIAlrZXlfYXR0clswXS50eXBlID0gQ0tBX0lE OworLQlrZXlfYXR0clsxXS50eXBlID0gQ0tBX01PRFVMVVM7CistCWtleV9hdHRyWzJdLnR5cGUg PSBDS0FfUFVCTElDX0VYUE9ORU5UOworKwlrZXlfYXR0clsxXS50eXBlID0gQ0tBX0xBQkVMOwor KwlrZXlfYXR0clsyXS50eXBlID0gQ0tBX01PRFVMVVM7CisrCWtleV9hdHRyWzNdLnR5cGUgPSBD S0FfUFVCTElDX0VYUE9ORU5UOworIAorLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xvdGlkeF0u c2Vzc2lvbjsKKy0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7CisrCXNlc3Npb24gPSBwLT5tb2R1bGUt PnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xp c3Q7CisgCisgCS8qIGZpZ3VyZSBvdXQgc2l6ZSBvZiB0aGUgYXR0cmlidXRlcyAqLworLQlydiA9 IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIDMpOworKwly diA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIG5hdHRy KTsKKyAJaWYgKHJ2ICE9IENLUl9PSykgeworIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRlVmFsdWUg ZmFpbGVkOiAlbHUiLCBydik7CisgCQlyZXR1cm4gKE5VTEwpOworQEAgLTEwMTQsMTkgKzExNTgs MTkgQEAgcGtjczExX2ZldGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwg Q0tfVUxPTkcgc2xvdGlkeCwKKyAJICogZW5zdXJlIHRoYXQgbm9uZSBvZiB0aGUgb3RoZXJzIGFy ZSB6ZXJvIGxlbmd0aC4KKyAJICogWFhYIGFzc3VtZXMgQ0tBX0lEIGlzIGFsd2F5cyBmaXJzdC4K KyAJICovCistCWlmIChrZXlfYXR0clsxXS51bFZhbHVlTGVuID09IDAgfHwKKy0JICAgIGtleV9h dHRyWzJdLnVsVmFsdWVMZW4gPT0gMCkgeworKwlpZiAoa2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9 PSAwIHx8CisrCSAgICBrZXlfYXR0clszXS51bFZhbHVlTGVuID09IDApIHsKKyAJCWVycm9yKCJp bnZhbGlkIGF0dHJpYnV0ZSBsZW5ndGgiKTsKKyAJCXJldHVybiAoTlVMTCk7CisgCX0KKyAKKyAJ LyogYWxsb2NhdGUgYnVmZmVycyBmb3IgYXR0cmlidXRlcyAqLworLQlmb3IgKGkgPSAwOyBpIDwg MzsgaSsrKQorKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykKKyAJCWlmIChrZXlfYXR0cltp XS51bFZhbHVlTGVuID4gMCkKKyAJCQlrZXlfYXR0cltpXS5wVmFsdWUgPSB4Y2FsbG9jKDEsIGtl eV9hdHRyW2ldLnVsVmFsdWVMZW4pOworIAorIAkvKiByZXRyaWV2ZSBJRCwgbW9kdWx1cyBhbmQg cHVibGljIGV4cG9uZW50IG9mIFJTQSBrZXkgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZh bHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0 ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1Jf T0spIHsKKyAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOwor IAkJZ290byBmYWlsOworQEAgLTEwMzgsOCArMTE4Miw4IEBAIHBrY3MxMV9mZXRjaF9yc2FfcHVi a2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCQlnb3Rv IGZhaWw7CisgCX0KKyAKKy0JcnNhX24gPSBCTl9iaW4yYm4oa2V5X2F0dHJbMV0ucFZhbHVlLCBr ZXlfYXR0clsxXS51bFZhbHVlTGVuLCBOVUxMKTsKKy0JcnNhX2UgPSBCTl9iaW4yYm4oa2V5X2F0 dHJbMl0ucFZhbHVlLCBrZXlfYXR0clsyXS51bFZhbHVlTGVuLCBOVUxMKTsKKysJcnNhX24gPSBC Tl9iaW4yYm4oa2V5X2F0dHJbMl0ucFZhbHVlLCBrZXlfYXR0clsyXS51bFZhbHVlTGVuLCBOVUxM KTsKKysJcnNhX2UgPSBCTl9iaW4yYm4oa2V5X2F0dHJbM10ucFZhbHVlLCBrZXlfYXR0clszXS51 bFZhbHVlTGVuLCBOVUxMKTsKKyAJaWYgKHJzYV9uID09IE5VTEwgfHwgcnNhX2UgPT0gTlVMTCkg eworIAkJZXJyb3IoIkJOX2JpbjJibiBmYWlsZWQiKTsKKyAJCWdvdG8gZmFpbDsKK0BAIC0xMDcx LDcgKzEyMTUsNyBAQCBwa2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkvKiBzdWNjZXNzICovCisgCXN1Y2Nlc3MgPSAw OworIGZhaWw6CistCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBu YXR0cjsgaSsrKQorIAkJZnJlZShrZXlfYXR0cltpXS5wVmFsdWUpOworIAlSU0FfZnJlZShyc2Ep OworIAlpZiAoc3VjY2VzcyAhPSAwKSB7CitAQCAtMTA4Niw3ICsxMjMwLDggQEAgc3RhdGljIHN0 cnVjdCBzc2hrZXkgKgorIHBrY3MxMV9mZXRjaF9lZDI1NTE5X3B1YmtleShzdHJ1Y3QgcGtjczEx X3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorICAgICBDS19PQkpFQ1RfSEFORExFICpv YmopCisgeworLQlDS19BVFRSSUJVVEUJCSBrZXlfYXR0clszXTsKKysJQ0tfQVRUUklCVVRFCQkg a2V5X2F0dHJbNF07CisrCWludAkJCSBuYXR0ciA9IDQ7CisgCUNLX1NFU1NJT05fSEFORExFCSBz ZXNzaW9uOworIAlDS19GVU5DVElPTl9MSVNUCSpmID0gTlVMTDsKKyAJQ0tfUlYJCQkgcnY7CitA QCAtMTEwNiwxNCArMTI1MSwxNSBAQCBwa2NzMTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0 IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAKKyAJbWVtc2V0KCZrZXlf YXR0ciwgMCwgc2l6ZW9mKGtleV9hdHRyKSk7CisgCWtleV9hdHRyWzBdLnR5cGUgPSBDS0FfSUQ7 CistCWtleV9hdHRyWzFdLnR5cGUgPSBDS0FfRUNfUE9JTlQ7IC8qIFhYWCBvciBDS0FfVkFMVUUg PyAqLworLQlrZXlfYXR0clsyXS50eXBlID0gQ0tBX0VDX1BBUkFNUzsKKysJa2V5X2F0dHJbMV0u dHlwZSA9IENLQV9MQUJFTDsKKysJa2V5X2F0dHJbMl0udHlwZSA9IENLQV9FQ19QT0lOVDsgLyog WFhYIG9yIENLQV9WQUxVRSA/ICovCisrCWtleV9hdHRyWzNdLnR5cGUgPSBDS0FfRUNfUEFSQU1T OworIAorLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKKy0JZiA9IHAt PmZ1bmN0aW9uX2xpc3Q7CisrCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhd LnNlc3Npb247CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisgCisgCS8qIGZpZ3Vy ZSBvdXQgc2l6ZSBvZiB0aGUgYXR0cmlidXRlcyAqLworLQlydiA9IGYtPkNfR2V0QXR0cmlidXRl VmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIDMpOworKwlydiA9IGYtPkNfR2V0QXR0cmli dXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIG5hdHRyKTsKKyAJaWYgKHJ2ICE9IENL Ul9PSykgeworIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7 CisgCQlyZXR1cm4gKE5VTEwpOworQEAgLTExMjQsMjggKzEyNzAsMjggQEAgcGtjczExX2ZldGNo X2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3Rp ZHgsCisgCSAqIGVuc3VyZSB0aGF0IG5vbmUgb2YgdGhlIG90aGVycyBhcmUgemVybyBsZW5ndGgu CisgCSAqIFhYWCBhc3N1bWVzIENLQV9JRCBpcyBhbHdheXMgZmlyc3QuCisgCSAqLworLQlpZiAo a2V5X2F0dHJbMV0udWxWYWx1ZUxlbiA9PSAwIHx8CistCSAgICBrZXlfYXR0clsyXS51bFZhbHVl TGVuID09IDApIHsKKysJaWYgKGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCB8fAorKwkgICAg a2V5X2F0dHJbM10udWxWYWx1ZUxlbiA9PSAwKSB7CisgCQllcnJvcigiaW52YWxpZCBhdHRyaWJ1 dGUgbGVuZ3RoIik7CisgCQlyZXR1cm4gKE5VTEwpOworIAl9CisgCisgCS8qIGFsbG9jYXRlIGJ1 ZmZlcnMgZm9yIGF0dHJpYnV0ZXMgKi8KKy0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworKwlm b3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykgeworIAkJaWYgKGtleV9hdHRyW2ldLnVsVmFsdWVM ZW4gPiAwKQorIAkJCWtleV9hdHRyW2ldLnBWYWx1ZSA9IHhjYWxsb2MoMSwga2V5X2F0dHJbaV0u dWxWYWx1ZUxlbik7CisgCX0KKyAKKyAJLyogcmV0cmlldmUgSUQsIHB1YmxpYyBwb2ludCBhbmQg Y3VydmUgcGFyYW1ldGVycyBvZiBFQyBrZXkgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZh bHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0 ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1Jf T0spIHsKKyAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOwor IAkJZ290byBmYWlsOworIAl9CisgCisgCS8qIEV4cGVjdCBvbmUgb2YgdGhlIHN1cHBvcnRlZCBp ZGVudGlmaWVycyBpbiBDS0FfRUNfUEFSQU1TICovCistCWQgPSAodV9jaGFyICopa2V5X2F0dHJb Ml0ucFZhbHVlOworLQlsZW4gPSBrZXlfYXR0clsyXS51bFZhbHVlTGVuOworKwlkID0gKHVfY2hh ciAqKWtleV9hdHRyWzNdLnBWYWx1ZTsKKysJbGVuID0ga2V5X2F0dHJbM10udWxWYWx1ZUxlbjsK KyAJaWYgKChsZW4gIT0gc2l6ZW9mKGlkMSkgfHwgbWVtY21wKGQsIGlkMSwgc2l6ZW9mKGlkMSkp ICE9IDApICYmCisgCSAgICAobGVuICE9IHNpemVvZihpZDIpIHx8IG1lbWNtcChkLCBpZDIsIHNp emVvZihpZDIpKSAhPSAwKSkgeworIAkJaGV4ID0gdG9oZXgoZCwgbGVuKTsKK0BAIC0xMTU3LDE2 ICsxMzAzLDE2IEBAIHBrY3MxMV9mZXRjaF9lZDI1NTE5X3B1YmtleShzdHJ1Y3QgcGtjczExX3By b3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkgKiBFeHBlY3QgZWl0aGVyIGEgcmF3IDMy IGJ5dGUgcHVia2V5IG9yIGFuIE9DVEVUIFNUUklORyB3aXRoCisgCSAqIGEgMzIgYnl0ZSBwdWJr ZXkgaW4gQ0tBX1ZBTFVFCisgCSAqLworLQlkID0gKHVfY2hhciAqKWtleV9hdHRyWzFdLnBWYWx1 ZTsKKy0JbGVuID0ga2V5X2F0dHJbMV0udWxWYWx1ZUxlbjsKKysJZCA9ICh1X2NoYXIgKilrZXlf YXR0clsyXS5wVmFsdWU7CisrCWxlbiA9IGtleV9hdHRyWzJdLnVsVmFsdWVMZW47CisgCWlmIChs ZW4gPT0gRUQyNTUxOV9QS19TWiArIDIgJiYgZFswXSA9PSAweDA0ICYmIGRbMV0gPT0gRUQyNTUx OV9QS19TWikgeworIAkJZCArPSAyOworIAkJbGVuIC09IDI7CisgCX0KKyAJaWYgKGxlbiAhPSBF RDI1NTE5X1BLX1NaKSB7CistCQloZXggPSB0b2hleChrZXlfYXR0clsxXS5wVmFsdWUsIGtleV9h dHRyWzFdLnVsVmFsdWVMZW4pOworKwkJaGV4ID0gdG9oZXgoa2V5X2F0dHJbMl0ucFZhbHVlLCBr ZXlfYXR0clsyXS51bFZhbHVlTGVuKTsKKyAJCWxvZ2l0X2YoIkNLQV9FQ19QT0lOVCBpbnZhbGlk IG9jdGV0IHN0cjogJXMgKGxlbiAlbHUpIiwKKy0JCSAgICBoZXgsICh1X2xvbmcpa2V5X2F0dHJb MV0udWxWYWx1ZUxlbik7CisrCQkgICAgaGV4LCAodV9sb25nKWtleV9hdHRyWzJdLnVsVmFsdWVM ZW4pOworIAkJZ290byBmYWlsOworIAl9CisgCitAQCAtMTE4Niw3ICsxMzMyLDcgQEAgcGtjczEx X2ZldGNoX2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05H IHNsb3RpZHgsCisgCQlrZXkgPSBOVUxMOworIAl9CisgCWZyZWUoaGV4KTsKKy0JZm9yIChpID0g MDsgaSA8IDM7IGkrKykKKysJZm9yIChpID0gMDsgaSA8IG5hdHRyOyBpKyspCisgCQlmcmVlKGtl eV9hdHRyW2ldLnBWYWx1ZSk7CisgCXJldHVybiBrZXk7CisgfQorQEAgLTExOTYsNyArMTM0Miw4 IEBAIHN0YXRpYyBpbnQKKyBwa2NzMTFfZmV0Y2hfeDUwOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9w cm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2Jq LCBzdHJ1Y3Qgc3Noa2V5ICoqa2V5cCwgY2hhciAqKmxhYmVscCkKKyB7CistCUNLX0FUVFJJQlVU RQkJIGNlcnRfYXR0clszXTsKKysJQ0tfQVRUUklCVVRFCQkgY2VydF9hdHRyWzRdOworKwlpbnQJ CQkgbmF0dHIgPSA0OworIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKKyAJQ0tfRlVOQ1RJ T05fTElTVAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2OworQEAgLTEyMTgsMTQgKzEzNjUsMTUg QEAgcGtjczExX2ZldGNoX3g1MDlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENL X1VMT05HIHNsb3RpZHgsCisgCisgCW1lbXNldCgmY2VydF9hdHRyLCAwLCBzaXplb2YoY2VydF9h dHRyKSk7CisgCWNlcnRfYXR0clswXS50eXBlID0gQ0tBX0lEOworLQljZXJ0X2F0dHJbMV0udHlw ZSA9IENLQV9TVUJKRUNUOworLQljZXJ0X2F0dHJbMl0udHlwZSA9IENLQV9WQUxVRTsKKysJY2Vy dF9hdHRyWzFdLnR5cGUgPSBDS0FfTEFCRUw7CisrCWNlcnRfYXR0clsyXS50eXBlID0gQ0tBX1NV QkpFQ1Q7CisrCWNlcnRfYXR0clszXS50eXBlID0gQ0tBX1ZBTFVFOworIAorLQlzZXNzaW9uID0g cC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKKy0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7Cisr CXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CisrCWYgPSBw LT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisgCisgCS8qIGZpZ3VyZSBvdXQgc2l6ZSBvZiB0aGUg YXR0cmlidXRlcyAqLworLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9i aiwgY2VydF9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24s ICpvYmosIGNlcnRfYXR0ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7CisgCQllcnJv cigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCXJldHVybiAtMTsK K0BAIC0xMjM3LDE4ICsxMzg1LDE5IEBAIHBrY3MxMV9mZXRjaF94NTA5X3B1YmtleShzdHJ1Y3Qg cGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkgKiBYWFggYXNzdW1lcyBD S0FfSUQgaXMgYWx3YXlzIGZpcnN0LgorIAkgKi8KKyAJaWYgKGNlcnRfYXR0clsxXS51bFZhbHVl TGVuID09IDAgfHwKKy0JICAgIGNlcnRfYXR0clsyXS51bFZhbHVlTGVuID09IDApIHsKKysJICAg IGNlcnRfYXR0clsyXS51bFZhbHVlTGVuID09IDAgfHwKKysJICAgIGNlcnRfYXR0clszXS51bFZh bHVlTGVuID09IDApIHsKKyAJCWVycm9yKCJpbnZhbGlkIGF0dHJpYnV0ZSBsZW5ndGgiKTsKKyAJ CXJldHVybiAtMTsKKyAJfQorIAorIAkvKiBhbGxvY2F0ZSBidWZmZXJzIGZvciBhdHRyaWJ1dGVz ICovCistCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsg aSsrKQorIAkJaWYgKGNlcnRfYXR0cltpXS51bFZhbHVlTGVuID4gMCkKKyAJCQljZXJ0X2F0dHJb aV0ucFZhbHVlID0geGNhbGxvYygxLCBjZXJ0X2F0dHJbaV0udWxWYWx1ZUxlbik7CisgCisgCS8q IHJldHJpZXZlIElELCBzdWJqZWN0IGFuZCB2YWx1ZSBvZiBjZXJ0aWZpY2F0ZSAqLworLQlydiA9 IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwgY2VydF9hdHRyLCAzKTsKKysJ cnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRfYXR0ciwgbmF0 dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1 ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCWdvdG8gb3V0OworQEAgLTEyNjIsOCArMTQxMSw4IEBA IHBrY3MxMV9mZXRjaF94NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19V TE9ORyBzbG90aWR4LAorIAkJc3ViamVjdCA9IHhzdHJkdXAoImludmFsaWQgc3ViamVjdCIpOwor IAlYNTA5X05BTUVfZnJlZSh4NTA5X25hbWUpOworIAorLQljcCA9IGNlcnRfYXR0clsyXS5wVmFs dWU7CistCWlmICgoeDUwOSA9IGQyaV9YNTA5KE5VTEwsICZjcCwgY2VydF9hdHRyWzJdLnVsVmFs dWVMZW4pKSA9PSBOVUxMKSB7CisrCWNwID0gY2VydF9hdHRyWzNdLnBWYWx1ZTsKKysJaWYgKCh4 NTA5ID0gZDJpX1g1MDkoTlVMTCwgJmNwLCBjZXJ0X2F0dHJbM10udWxWYWx1ZUxlbikpID09IE5V TEwpIHsKKyAJCWVycm9yKCJkMmlfeDUwOSBmYWlsZWQiKTsKKyAJCWdvdG8gb3V0OworIAl9CitA QCAtMTM3MSw3ICsxNTIwLDcgQEAgcGtjczExX2ZldGNoX3g1MDlfcHVia2V5KHN0cnVjdCBwa2Nz MTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCQlnb3RvIG91dDsKKyAJfQorICBv dXQ6CistCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsg aSsrKQorIAkJZnJlZShjZXJ0X2F0dHJbaV0ucFZhbHVlKTsKKyAJWDUwOV9mcmVlKHg1MDkpOwor IAlSU0FfZnJlZShyc2EpOworQEAgLTE0MTIsMTEgKzE1NjEsMTIgQEAgbm90ZV9rZXkoc3RydWN0 IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwgY29uc3QgY2hhciAqY29udGV4 dCwKKyAgKi8KKyBzdGF0aWMgaW50CisgcGtjczExX2ZldGNoX2NlcnRzKHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCistICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5 c3AsIGNoYXIgKioqbGFiZWxzcCwgaW50ICpua2V5cykKKysgICAgc3RydWN0IHNzaGtleSAqKipr ZXlzcCwgY2hhciAqKipsYWJlbHNwLCBpbnQgKm5rZXlzLCBzdHJ1Y3QgcGtjczExX3VyaSAqdXJp KQorIHsKKyAJc3RydWN0IHNzaGtleQkJKmtleSA9IE5VTEw7CisgCUNLX09CSkVDVF9DTEFTUwkJ IGtleV9jbGFzczsKKy0JQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbMV07CisrCUNLX0FUVFJJQlVU RQkJIGtleV9hdHRyWzNdOworKwlpbnQJCQkgbmF0dHIgPSAxOworIAlDS19TRVNTSU9OX0hBTkRM RQkgc2Vzc2lvbjsKKyAJQ0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2 OworQEAgLTE0MzMsMTAgKzE1ODMsMjMgQEAgcGtjczExX2ZldGNoX2NlcnRzKHN0cnVjdCBwa2Nz MTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCWtleV9hdHRyWzBdLnBWYWx1ZSA9 ICZrZXlfY2xhc3M7CisgCWtleV9hdHRyWzBdLnVsVmFsdWVMZW4gPSBzaXplb2Yoa2V5X2NsYXNz KTsKKyAKKy0Jc2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CistCWYgPSBw LT5mdW5jdGlvbl9saXN0OworKwlpZiAodXJpLT5pZCAhPSBOVUxMKSB7CisrCQlrZXlfYXR0cltu YXR0cl0udHlwZSA9IENLQV9JRDsKKysJCWtleV9hdHRyW25hdHRyXS5wVmFsdWUgPSB1cmktPmlk OworKwkJa2V5X2F0dHJbbmF0dHJdLnVsVmFsdWVMZW4gPSB1cmktPmlkX2xlbjsKKysJCW5hdHRy Kys7CisrCX0KKysJaWYgKHVyaS0+b2JqZWN0ICE9IE5VTEwpIHsKKysJCWtleV9hdHRyW25hdHRy XS50eXBlID0gQ0tBX0xBQkVMOworKwkJa2V5X2F0dHJbbmF0dHJdLnBWYWx1ZSA9IHVyaS0+b2Jq ZWN0OworKwkJa2V5X2F0dHJbbmF0dHJdLnVsVmFsdWVMZW4gPSBzdHJsZW4odXJpLT5vYmplY3Qp OworKwkJbmF0dHIrKzsKKysJfQorKworKwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tz bG90aWR4XS5zZXNzaW9uOworKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworIAorLQly diA9IGYtPkNfRmluZE9iamVjdHNJbml0KHNlc3Npb24sIGtleV9hdHRyLCAxKTsKKysJcnYgPSBm LT5DX0ZpbmRPYmplY3RzSW5pdChzZXNzaW9uLCBrZXlfYXR0ciwgbmF0dHIpOworIAlpZiAocnYg IT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19GaW5kT2JqZWN0c0luaXQgZmFpbGVkOiAlbHUiLCBy dik7CisgCQlnb3RvIGZhaWw7CitAQCAtMTUwOSw2ICsxNjcyLDEzIEBAIGZhaWw6CisgCisgCXJl dHVybiAocmV0KTsKKyB9CisrI2Vsc2UKKytzdGF0aWMgaW50CisrcGtjczExX2ZldGNoX2NlcnRz KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisrICAgIHN0cnVj dCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFiZWxzcCwgaW50ICpua2V5cywgc3RydWN0IHBr Y3MxMV91cmkgKnVyaSkKKyt7CisrCXJldHVybiAwOworK30KKyAjZW5kaWYgLyogV0lUSF9PUEVO U1NMICovCisgCisgLyoKK0BAIC0xNTE4LDExICsxNjg4LDEyIEBAIGZhaWw6CisgICovCisgc3Rh dGljIGludAorIHBrY3MxMV9mZXRjaF9rZXlzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENL X1VMT05HIHNsb3RpZHgsCistICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFi ZWxzcCwgaW50ICpua2V5cykKKysgICAgc3RydWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAqKips YWJlbHNwLCBpbnQgKm5rZXlzLCBzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKQorIHsKKyAJc3RydWN0 IHNzaGtleQkJKmtleSA9IE5VTEw7CisgCUNLX09CSkVDVF9DTEFTUwkJIGtleV9jbGFzczsKKy0J Q0tfQVRUUklCVVRFCQkga2V5X2F0dHJbMl07CisrCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzNd OworKwlpbnQJCQkgbmF0dHIgPSAxOworIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKKyAJ Q0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2OworQEAgLTE1MzgsMTAg KzE3MDksMjMgQEAgcGtjczExX2ZldGNoX2tleXMoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwg Q0tfVUxPTkcgc2xvdGlkeCwKKyAJa2V5X2F0dHJbMF0ucFZhbHVlID0gJmtleV9jbGFzczsKKyAJ a2V5X2F0dHJbMF0udWxWYWx1ZUxlbiA9IHNpemVvZihrZXlfY2xhc3MpOworIAorLQlzZXNzaW9u ID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKKy0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7 CisrCWlmICh1cmktPmlkICE9IE5VTEwpIHsKKysJCWtleV9hdHRyW25hdHRyXS50eXBlID0gQ0tB X0lEOworKwkJa2V5X2F0dHJbbmF0dHJdLnBWYWx1ZSA9IHVyaS0+aWQ7CisrCQlrZXlfYXR0cltu YXR0cl0udWxWYWx1ZUxlbiA9IHVyaS0+aWRfbGVuOworKwkJbmF0dHIrKzsKKysJfQorKwlpZiAo dXJpLT5vYmplY3QgIT0gTlVMTCkgeworKwkJa2V5X2F0dHJbbmF0dHJdLnR5cGUgPSBDS0FfTEFC RUw7CisrCQlrZXlfYXR0cltuYXR0cl0ucFZhbHVlID0gdXJpLT5vYmplY3Q7CisrCQlrZXlfYXR0 cltuYXR0cl0udWxWYWx1ZUxlbiA9IHN0cmxlbih1cmktPm9iamVjdCk7CisrCQluYXR0cisrOwor Kwl9CisrCisrCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247 CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisgCistCXJ2ID0gZi0+Q19GaW5kT2Jq ZWN0c0luaXQoc2Vzc2lvbiwga2V5X2F0dHIsIDEpOworKwlydiA9IGYtPkNfRmluZE9iamVjdHNJ bml0KHNlc3Npb24sIGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1JfT0spIHsKKyAJ CWVycm9yKCJDX0ZpbmRPYmplY3RzSW5pdCBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCWdvdG8gZmFp bDsKK0BAIC0xODI3LDE2ICsyMDExLDEwIEBAIHBrY3MxMV9lY2RzYV9nZW5lcmF0ZV9wcml2YXRl X2tleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIH0KKyAj ZW5kaWYgLyogV0lUSF9QS0NTMTFfS0VZR0VOICovCisgCistLyoKKy0gKiByZWdpc3RlciBhIG5l dyBwcm92aWRlciwgZmFpbHMgaWYgcHJvdmlkZXIgYWxyZWFkeSBleGlzdHMuIGlmCistICoga2V5 cCBpcyBwcm92aWRlZCwgZmV0Y2gga2V5cy4KKy0gKi8KKyBzdGF0aWMgaW50CistcGtjczExX3Jl Z2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sCistICAgIHN0cnVj dCBzc2hrZXkgKioqa2V5cCwgY2hhciAqKipsYWJlbHNwLAorLSAgICBzdHJ1Y3QgcGtjczExX3By b3ZpZGVyICoqcHJvdmlkZXJwLCBDS19VTE9ORyB1c2VyKQorK3BrY3MxMV9pbml0aWFsaXplX3By b3ZpZGVyKHN0cnVjdCBwa2NzMTFfdXJpICp1cmksIHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipw cm92aWRlcnApCisgeworLQlpbnQgbmtleXMsIG5lZWRfZmluYWxpemUgPSAwOworKwlpbnQgbmVl ZF9maW5hbGl6ZSA9IDA7CisgCWludCByZXQgPSAtMTsKKyAJc3RydWN0IHBrY3MxMV9wcm92aWRl ciAqcCA9IE5VTEw7CisgCXZvaWQgKmhhbmRsZSA9IE5VTEw7CitAQCAtMTg0NSwxMjggKzIwMjMs MTI2IEBAIHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAq cGluLAorIAlDS19GVU5DVElPTl9MSVNUICpmID0gTlVMTDsKKyAJQ0tfVE9LRU5fSU5GTyAqdG9r ZW47CisgCUNLX1VMT05HIGk7CisrCWNoYXIgKnByb3ZpZGVyX21vZHVsZSA9IE5VTEw7CisrCXN0 cnVjdCBwa2NzMTFfbW9kdWxlICptID0gTlVMTDsKKysKKysJLyogaWYgbm8gcHJvdmlkZXIgc3Bl Y2lmaWVkLCBmYWxsYmFjayB0byBwMTEta2l0ICovCisrCWlmICh1cmktPm1vZHVsZV9wYXRoID09 IE5VTEwpIHsKKysjaWZkZWYgUEtDUzExX0RFRkFVTFRfUFJPVklERVIKKysJCXByb3ZpZGVyX21v ZHVsZSA9IHN0cmR1cChQS0NTMTFfREVGQVVMVF9QUk9WSURFUik7CisrI2Vsc2UKKysJCWVycm9y X2YoIk5vIG1vZHVsZSBwYXRoIHByb3ZpZGVkIik7CisrIAkJZ290byBmYWlsOworKyNlbmRpZgor Kwl9IGVsc2UgeworKwkJcHJvdmlkZXJfbW9kdWxlID0gc3RyZHVwKHVyaS0+bW9kdWxlX3BhdGgp OworKwl9CisrCXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqcCkpOworKwlwLT5uYW1lID0gcGtjczEx X3VyaV9nZXQodXJpKTsKKyAKKy0JaWYgKHByb3ZpZGVycCA9PSBOVUxMKQorLQkJZ290byBmYWls OworLQkqcHJvdmlkZXJwID0gTlVMTDsKKy0KKy0JaWYgKGtleXAgIT0gTlVMTCkKKy0JCSprZXlw ID0gTlVMTDsKKy0JaWYgKGxhYmVsc3AgIT0gTlVMTCkKKy0JCSpsYWJlbHNwID0gTlVMTDsKKy0K Ky0JaWYgKHBrY3MxMV9wcm92aWRlcl9sb29rdXAocHJvdmlkZXJfaWQpICE9IE5VTEwpIHsKKy0J CWRlYnVnX2YoInByb3ZpZGVyIGFscmVhZHkgcmVnaXN0ZXJlZDogJXMiLCBwcm92aWRlcl9pZCk7 CisrCWlmIChsaWJfY29udGFpbnNfc3ltYm9sKHByb3ZpZGVyX21vZHVsZSwgIkNfR2V0RnVuY3Rp b25MaXN0IikgIT0gMCkgeworKwkJZXJyb3IoInByb3ZpZGVyICVzIGlzIG5vdCBhIFBLQ1MxMSBs aWJyYXJ5IiwgcHJvdmlkZXJfbW9kdWxlKTsKKyAJCWdvdG8gZmFpbDsKKyAJfQorLQlpZiAobGli X2NvbnRhaW5zX3N5bWJvbChwcm92aWRlcl9pZCwgIkNfR2V0RnVuY3Rpb25MaXN0IikgIT0gMCkg eworLQkJZXJyb3IoInByb3ZpZGVyICVzIGlzIG5vdCBhIFBLQ1MxMSBsaWJyYXJ5IiwgcHJvdmlk ZXJfaWQpOworLQkJZ290byBmYWlsOworKwlpZiAoKG0gPSBwa2NzMTFfcHJvdmlkZXJfbG9va3Vw X21vZHVsZShwcm92aWRlcl9tb2R1bGUpKSAhPSBOVUxMCisrCSAgICYmIG0tPnZhbGlkKSB7Cisr CQlkZWJ1Z19mKCJwcm92aWRlciBtb2R1bGUgYWxyZWFkeSBpbml0aWFsaXplZDogJXMiLCBwcm92 aWRlcl9tb2R1bGUpOworKwkJZnJlZShwcm92aWRlcl9tb2R1bGUpOworKwkJLyogU2tpcCB0aGUg aW5pdGlhbGl6YXRpb24gb2YgUEtDUyMxMSBtb2R1bGUgKi8KKysJCW0tPnJlZmNvdW50Kys7Cisr CQlwLT5tb2R1bGUgPSBtOworKwkJcC0+dmFsaWQgPSAxOworKwkJVEFJTFFfSU5TRVJUX1RBSUwo JnBrY3MxMV9wcm92aWRlcnMsIHAsIG5leHQpOworKwkJcC0+cmVmY291bnQrKzsJLyogYWRkIHRv IHByb3ZpZGVyIGxpc3QgKi8KKysJCSpwcm92aWRlcnAgPSBwOworKwkJcmV0dXJuIDA7CisrCX0g ZWxzZSB7CisrCQltID0geGNhbGxvYygxLCBzaXplb2YoKm0pKTsKKysJCXAtPm1vZHVsZSA9IG07 CisrCQltLT5yZWZjb3VudCsrOworIAl9CisrCisgCS8qIG9wZW4gc2hhcmVkIHBrY3MxMS1saWJy YXJ5ICovCistCWlmICgoaGFuZGxlID0gZGxvcGVuKHByb3ZpZGVyX2lkLCBSVExEX05PVykpID09 IE5VTEwpIHsKKy0JCWVycm9yKCJkbG9wZW4gJXMgZmFpbGVkOiAlcyIsIHByb3ZpZGVyX2lkLCBk bGVycm9yKCkpOworKwlpZiAoKGhhbmRsZSA9IGRsb3Blbihwcm92aWRlcl9tb2R1bGUsIFJUTERf Tk9XKSkgPT0gTlVMTCkgeworKwkJZXJyb3IoImRsb3BlbiAlcyBmYWlsZWQ6ICVzIiwgcHJvdmlk ZXJfbW9kdWxlLCBkbGVycm9yKCkpOworIAkJZ290byBmYWlsOworIAl9CisgCWlmICgoZ2V0ZnVu Y3Rpb25saXN0ID0gZGxzeW0oaGFuZGxlLCAiQ19HZXRGdW5jdGlvbkxpc3QiKSkgPT0gTlVMTCkK KyAJCWZhdGFsKCJkbHN5bShDX0dldEZ1bmN0aW9uTGlzdCkgZmFpbGVkOiAlcyIsIGRsZXJyb3Io KSk7CistCXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqcCkpOworLQlwLT5uYW1lID0geHN0cmR1cChw cm92aWRlcl9pZCk7CistCXAtPmhhbmRsZSA9IGhhbmRsZTsKKy0JLyogc2V0IHVwIHRoZSBwa2Nz MTEgY2FsbGJhY2tzICovCisrCXAtPm1vZHVsZS0+aGFuZGxlID0gaGFuZGxlOworKwkvKiBzZXR1 cCB0aGUgcGtjczExIGNhbGxiYWNrcyAqLworIAlpZiAoKHJ2ID0gKCpnZXRmdW5jdGlvbmxpc3Qp KCZmKSkgIT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19HZXRGdW5jdGlvbkxpc3QgZm9yIHByb3Zp ZGVyICVzIGZhaWxlZDogJWx1IiwKKy0JCSAgICBwcm92aWRlcl9pZCwgcnYpOworKwkJICAgIHBy b3ZpZGVyX21vZHVsZSwgcnYpOworIAkJZ290byBmYWlsOworIAl9CistCXAtPmZ1bmN0aW9uX2xp c3QgPSBmOworKwltLT5mdW5jdGlvbl9saXN0ID0gZjsKKyAJaWYgKChydiA9IGYtPkNfSW5pdGlh bGl6ZShOVUxMKSkgIT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19Jbml0aWFsaXplIGZvciBwcm92 aWRlciAlcyBmYWlsZWQ6ICVsdSIsCistCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKKysJCSAgICBw cm92aWRlcl9tb2R1bGUsIHJ2KTsKKyAJCWdvdG8gZmFpbDsKKyAJfQorIAluZWVkX2ZpbmFsaXpl ID0gMTsKKy0JaWYgKChydiA9IGYtPkNfR2V0SW5mbygmcC0+aW5mbykpICE9IENLUl9PSykgewor KwlpZiAoKHJ2ID0gZi0+Q19HZXRJbmZvKCZtLT5pbmZvKSkgIT0gQ0tSX09LKSB7CisgCQllcnJv cigiQ19HZXRJbmZvIGZvciBwcm92aWRlciAlcyBmYWlsZWQ6ICVsdSIsCistCQkgICAgcHJvdmlk ZXJfaWQsIHJ2KTsKKysJCSAgICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsKKyAJCWdvdG8gZmFpbDsK KyAJfQorLQlkZWJ1ZygicHJvdmlkZXIgJXM6IG1hbnVmYWN0dXJlcklEIDwlLipzPiBjcnlwdG9r aVZlcnNpb24gJWQuJWQiCistCSAgICAiIGxpYnJhcnlEZXNjcmlwdGlvbiA8JS4qcz4gbGlicmFy eVZlcnNpb24gJWQuJWQiLAorLQkgICAgcHJvdmlkZXJfaWQsCistCSAgICBSTVNQQUNFKHAtPmlu Zm8ubWFudWZhY3R1cmVySUQpLAorLQkgICAgcC0+aW5mby5jcnlwdG9raVZlcnNpb24ubWFqb3Is CistCSAgICBwLT5pbmZvLmNyeXB0b2tpVmVyc2lvbi5taW5vciwKKy0JICAgIFJNU1BBQ0UocC0+ aW5mby5saWJyYXJ5RGVzY3JpcHRpb24pLAorLQkgICAgcC0+aW5mby5saWJyYXJ5VmVyc2lvbi5t YWpvciwKKy0JICAgIHAtPmluZm8ubGlicmFyeVZlcnNpb24ubWlub3IpOworLQlpZiAoKHJ2ID0g Zi0+Q19HZXRTbG90TGlzdChDS19UUlVFLCBOVUxMLCAmcC0+bnNsb3RzKSkgIT0gQ0tSX09LKSB7 CisrCXJtc3BhY2UobS0+aW5mby5tYW51ZmFjdHVyZXJJRCwgc2l6ZW9mKG0tPmluZm8ubWFudWZh Y3R1cmVySUQpKTsKKysJaWYgKHVyaS0+bGliX21hbnVmICE9IE5VTEwgJiYKKysJICAgIHN0cm5j bXAodXJpLT5saWJfbWFudWYsIG0tPmluZm8ubWFudWZhY3R1cmVySUQsIDMyKSkgeworKwkJZGVi dWdfZigiU2tpcHBpbmcgcHJvdmlkZXIgJXMgbm90IG1hdGNoaW5nIGxpYnJhcnlfbWFudWZhY3R1 cmVyIiwKKysJCSAgICBtLT5pbmZvLm1hbnVmYWN0dXJlcklEKTsKKysgCQlnb3RvIGZhaWw7Cisr IAl9CisrCXJtc3BhY2UobS0+aW5mby5saWJyYXJ5RGVzY3JpcHRpb24sIHNpemVvZihtLT5pbmZv LmxpYnJhcnlEZXNjcmlwdGlvbikpOworKwlkZWJ1ZygicHJvdmlkZXIgJXM6IG1hbnVmYWN0dXJl cklEIDwlLjMycz4gY3J5cHRva2lWZXJzaW9uICVkLiVkIgorKwkgICAgIiBsaWJyYXJ5RGVzY3Jp cHRpb24gPCUuMzJzPiBsaWJyYXJ5VmVyc2lvbiAlZC4lZCIsCisrCSAgICBwcm92aWRlcl9tb2R1 bGUsCisrCSAgICBtLT5pbmZvLm1hbnVmYWN0dXJlcklELAorKwkgICAgbS0+aW5mby5jcnlwdG9r aVZlcnNpb24ubWFqb3IsCisrCSAgICBtLT5pbmZvLmNyeXB0b2tpVmVyc2lvbi5taW5vciwKKysJ ICAgIG0tPmluZm8ubGlicmFyeURlc2NyaXB0aW9uLAorKwkgICAgbS0+aW5mby5saWJyYXJ5VmVy c2lvbi5tYWpvciwKKysJICAgIG0tPmluZm8ubGlicmFyeVZlcnNpb24ubWlub3IpOworKworKwlp ZiAoKHJ2ID0gZi0+Q19HZXRTbG90TGlzdChDS19UUlVFLCBOVUxMLCAmbS0+bnNsb3RzKSkgIT0g Q0tSX09LKSB7CisgCQllcnJvcigiQ19HZXRTbG90TGlzdCBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJ CWdvdG8gZmFpbDsKKyAJfQorLQlpZiAocC0+bnNsb3RzID09IDApIHsKKy0JCWRlYnVnX2YoInBy b3ZpZGVyICVzIHJldHVybmVkIG5vIHNsb3RzIiwgcHJvdmlkZXJfaWQpOworKwlpZiAobS0+bnNs b3RzID09IDApIHsKKysJCWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVybmVkIG5vIHNsb3RzIiwg cHJvdmlkZXJfbW9kdWxlKTsKKyAJCXJldCA9IC1TU0hfUEtDUzExX0VSUl9OT19TTE9UUzsKKyAJ CWdvdG8gZmFpbDsKKyAJfQorLQlwLT5zbG90bGlzdCA9IHhjYWxsb2MocC0+bnNsb3RzLCBzaXpl b2YoQ0tfU0xPVF9JRCkpOworLQlpZiAoKHJ2ID0gZi0+Q19HZXRTbG90TGlzdChDS19UUlVFLCBw LT5zbG90bGlzdCwgJnAtPm5zbG90cykpCisrCW0tPnNsb3RsaXN0ID0geGNhbGxvYyhtLT5uc2xv dHMsIHNpemVvZihDS19TTE9UX0lEKSk7CisrCWlmICgocnYgPSBmLT5DX0dldFNsb3RMaXN0KENL X1RSVUUsIG0tPnNsb3RsaXN0LCAmbS0+bnNsb3RzKSkKKyAJICAgICE9IENLUl9PSykgeworIAkJ ZXJyb3IoIkNfR2V0U2xvdExpc3QgZm9yIHByb3ZpZGVyICVzIGZhaWxlZDogJWx1IiwKKy0JCSAg ICBwcm92aWRlcl9pZCwgcnYpOworKwkJICAgIHByb3ZpZGVyX21vZHVsZSwgcnYpOworIAkJZ290 byBmYWlsOworIAl9CistCXAtPnNsb3RpbmZvID0geGNhbGxvYyhwLT5uc2xvdHMsIHNpemVvZihz dHJ1Y3QgcGtjczExX3Nsb3RpbmZvKSk7CisrCW0tPnNsb3RpbmZvID0geGNhbGxvYyhtLT5uc2xv dHMsIHNpemVvZihzdHJ1Y3QgcGtjczExX3Nsb3RpbmZvKSk7CisgCXAtPnZhbGlkID0gMTsKKy0J bmtleXMgPSAwOworLQlmb3IgKGkgPSAwOyBpIDwgcC0+bnNsb3RzOyBpKyspIHsKKy0JCXRva2Vu ID0gJnAtPnNsb3RpbmZvW2ldLnRva2VuOworLQkJaWYgKChydiA9IGYtPkNfR2V0VG9rZW5JbmZv KHAtPnNsb3RsaXN0W2ldLCB0b2tlbikpCisrCW0tPnZhbGlkID0gMTsKKysJZm9yIChpID0gMDsg aSA8IG0tPm5zbG90czsgaSsrKSB7CisrCQl0b2tlbiA9ICZtLT5zbG90aW5mb1tpXS50b2tlbjsK KysJCWlmICgocnYgPSBmLT5DX0dldFRva2VuSW5mbyhtLT5zbG90bGlzdFtpXSwgdG9rZW4pKQor IAkJICAgICE9IENLUl9PSykgeworIAkJCWVycm9yKCJDX0dldFRva2VuSW5mbyBmb3IgcHJvdmlk ZXIgJXMgc2xvdCAlbHUgIgorLQkJCSAgICAiZmFpbGVkOiAlbHUiLCBwcm92aWRlcl9pZCwgKHVf bG9uZylpLCBydik7CistCQkJY29udGludWU7CistCQl9CistCQlpZiAoKHRva2VuLT5mbGFncyAm IENLRl9UT0tFTl9JTklUSUFMSVpFRCkgPT0gMCkgeworLQkJCWRlYnVnMl9mKCJpZ25vcmluZyB1 bmluaXRpYWxpc2VkIHRva2VuIGluICIKKy0JCQkgICAgInByb3ZpZGVyICVzIHNsb3QgJWx1Iiwg cHJvdmlkZXJfaWQsICh1X2xvbmcpaSk7CisrCQkJICAgICJmYWlsZWQ6ICVsdSIsIHByb3ZpZGVy X21vZHVsZSwgKHVfbG9uZylpLCBydik7CisgCQkJY29udGludWU7CisgCQl9CisgCQlkZWJ1Zygi cHJvdmlkZXIgJXMgc2xvdCAlbHU6IGxhYmVsIDwlLipzPiAiCisgCQkgICAgIm1hbnVmYWN0dXJl cklEIDwlLipzPiBtb2RlbCA8JS4qcz4gc2VyaWFsIDwlLipzPiAiCisgCQkgICAgImZsYWdzIDB4 JWx4IiwKKy0JCSAgICBwcm92aWRlcl9pZCwgKHVuc2lnbmVkIGxvbmcpaSwKKysJCSAgICBwcm92 aWRlcl9tb2R1bGUsICh1bnNpZ25lZCBsb25nKWksCisgCQkgICAgUk1TUEFDRSh0b2tlbi0+bGFi ZWwpLCBSTVNQQUNFKHRva2VuLT5tYW51ZmFjdHVyZXJJRCksCisgCQkgICAgUk1TUEFDRSh0b2tl bi0+bW9kZWwpLCBSTVNQQUNFKHRva2VuLT5zZXJpYWxOdW1iZXIpLAorIAkJICAgIHRva2VuLT5m bGFncyk7CistCQkvKgorLQkJICogb3BlbiBzZXNzaW9uLCBsb2dpbiB3aXRoIHBpbiBhbmQgcmV0 cmlldmUgcHVibGljCistCQkgKiBrZXlzIChpZiBrZXlwIGlzIHByb3ZpZGVkKQorLQkJICovCist CQlpZiAoKHJldCA9IHBrY3MxMV9vcGVuX3Nlc3Npb24ocCwgaSwgcGluLCB1c2VyKSkgIT0gMCB8 fAorLQkJICAgIGtleXAgPT0gTlVMTCkKKy0JCQljb250aW51ZTsKKy0JCXBrY3MxMV9mZXRjaF9r ZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cyk7CistI2lmZGVmIFdJVEhfT1BFTlNTTAor LQkJcGtjczExX2ZldGNoX2NlcnRzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cyk7CistI2Vu ZGlmCistCQlpZiAobmtleXMgPT0gMCAmJiAhcC0+c2xvdGluZm9baV0ubG9nZ2VkX2luICYmCist CQkgICAgcGtjczExX2ludGVyYWN0aXZlKSB7CistCQkJLyoKKy0JCQkgKiBTb21lIHRva2VucyBy ZXF1aXJlIGxvZ2luIGJlZm9yZSB0aGV5IHdpbGwKKy0JCQkgKiBleHBvc2Uga2V5cy4KKy0JCQkg Ki8KKy0JCQlpZiAocGtjczExX2xvZ2luX3Nsb3QocCwgJnAtPnNsb3RpbmZvW2ldLAorLQkJCSAg ICBDS1VfVVNFUikgPCAwKSB7CistCQkJCWVycm9yKCJsb2dpbiBmYWlsZWQiKTsKKy0JCQkJY29u dGludWU7CistCQkJfQorLQkJCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3As ICZua2V5cyk7CistI2lmZGVmIFdJVEhfT1BFTlNTTAorLQkJCXBrY3MxMV9mZXRjaF9jZXJ0cyhw LCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMpOworLSNlbmRpZgorLQkJfQorIAl9CisrCW0tPm1v ZHVsZV9wYXRoID0gcHJvdmlkZXJfbW9kdWxlOworKwlwcm92aWRlcl9tb2R1bGUgPSBOVUxMOwor IAorIAkvKiBub3cgb3duZWQgYnkgY2FsbGVyICovCisgCSpwcm92aWRlcnAgPSBwOworQEAgLTE5 NzQsMjEgKzIxNTAsMjIgQEAgcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVy X2lkLCBjaGFyICpwaW4sCisgCVRBSUxRX0lOU0VSVF9UQUlMKCZwa2NzMTFfcHJvdmlkZXJzLCBw LCBuZXh0KTsKKyAJcC0+cmVmY291bnQrKzsJLyogYWRkIHRvIHByb3ZpZGVyIGxpc3QgKi8KKyAK Ky0JcmV0dXJuIChua2V5cyk7CisrCXJldHVybiAwOworIGZhaWw6CisgCWlmIChuZWVkX2ZpbmFs aXplICYmIChydiA9IGYtPkNfRmluYWxpemUoTlVMTCkpICE9IENLUl9PSykKKyAJCWVycm9yKCJD X0ZpbmFsaXplIGZvciBwcm92aWRlciAlcyBmYWlsZWQ6ICVsdSIsCistCQkgICAgcHJvdmlkZXJf aWQsIHJ2KTsKKysJCSAgICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsKKysJZnJlZShwcm92aWRlcl9t b2R1bGUpOworKwlpZiAobSkgeworKwkJZnJlZShtLT5zbG90bGlzdCk7CisrCQlmcmVlKG0pOwor Kwl9CisgCWlmIChwKSB7CisgCQlmcmVlKHAtPm5hbWUpOworLQkJZnJlZShwLT5zbG90bGlzdCk7 CistCQlmcmVlKHAtPnNsb3RpbmZvKTsKKyAJCWZyZWUocCk7CisgCX0KKyAJaWYgKGhhbmRsZSkK KyAJCWRsY2xvc2UoaGFuZGxlKTsKKy0JaWYgKHJldCA+IDApCistCQlyZXQgPSAtMTsKKyAJcmV0 dXJuIChyZXQpOworIH0KKyAKK0BAIC0yMDI0LDE4ICsyMjAxLDE2MyBAQCBwa2NzMTFfdGVybWlu YXRlKHZvaWQpCisgfQorIAorIC8qCistICogcmVnaXN0ZXIgYSBuZXcgcHJvdmlkZXIgYW5kIGdl dCBudW1iZXIgb2Yga2V5cyBob2xkIGJ5IHRoZSB0b2tlbiwKKy0gKiBmYWlscyBpZiBwcm92aWRl ciBhbHJlYWR5IGV4aXN0cworKyAqIHJlZ2lzdGVyIGEgbmV3IHByb3ZpZGVyLCBmYWlscyBpZiBw cm92aWRlciBhbHJlYWR5IGV4aXN0cy4gaWYKKysgKiBrZXlwIGlzIHByb3ZpZGVkLCBmZXRjaCBr ZXlzLgorICAqLworK3N0YXRpYyBpbnQKKytwa2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXJfYnlfdXJp KHN0cnVjdCBwa2NzMTFfdXJpICp1cmksIGNoYXIgKnBpbiwKKysgICAgc3RydWN0IHNzaGtleSAq KiprZXlwLCBjaGFyICoqKmxhYmVsc3AsIHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipwcm92aWRl cnAsCisrICAgIENLX1VMT05HIHVzZXIpCisreworKwlpbnQgbmtleXM7CisrCWludCByZXQgPSAt MTsKKysJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCA9IE5VTEw7CisrCUNLX1VMT05HIGk7Cisr CUNLX1RPS0VOX0lORk8gKnRva2VuOworKwljaGFyICpwcm92aWRlcl91cmkgPSBOVUxMOworKwor KwlpZiAocHJvdmlkZXJwID09IE5VTEwpCisrCQlnb3RvIGZhaWw7CisrCSpwcm92aWRlcnAgPSBO VUxMOworKworKwlpZiAoa2V5cCAhPSBOVUxMKQorKwkJKmtleXAgPSBOVUxMOworKworKwlpZiAo KHJldCA9IHBrY3MxMV9pbml0aWFsaXplX3Byb3ZpZGVyKHVyaSwgJnApKSAhPSAwKSB7CisrCQln b3RvIGZhaWw7CisrCX0KKysKKysJcHJvdmlkZXJfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsK KysJaWYgKHBpbiA9PSBOVUxMICYmIHVyaS0+cGluICE9IE5VTEwpIHsKKysJCXBpbiA9IHVyaS0+ cGluOworKwl9CisrCW5rZXlzID0gMDsKKysJZm9yIChpID0gMDsgaSA8IHAtPm1vZHVsZS0+bnNs b3RzOyBpKyspIHsKKysJCXRva2VuID0gJnAtPm1vZHVsZS0+c2xvdGluZm9baV0udG9rZW47Cisr CQlpZiAoKHRva2VuLT5mbGFncyAmIENLRl9UT0tFTl9JTklUSUFMSVpFRCkgPT0gMCkgeworKwkJ CWRlYnVnMl9mKCJpZ25vcmluZyB1bmluaXRpYWxpc2VkIHRva2VuIGluICIKKysJCQkgICAgInBy b3ZpZGVyICVzIHNsb3QgJWx1IiwgcHJvdmlkZXJfdXJpLCAodV9sb25nKWkpOworKwkJCWNvbnRp bnVlOworKwkJfQorKwkJaWYgKHVyaS0+dG9rZW4gIT0gTlVMTCAmJgorKwkJICAgIHN0cm5jbXAo dG9rZW4tPmxhYmVsLCB1cmktPnRva2VuLCAzMikgIT0gMCkgeworKwkJCWRlYnVnMl9mKCJpZ25v cmluZyB0b2tlbiBub3QgbWF0Y2hpbmcgbGFiZWwgKCUuMzJzKSAiCisrCQkJICAgICJzcGVjaWZp ZWQgYnkgUEtDUyMxMSBVUkkgaW4gc2xvdCAlbHUiLAorKwkJCSAgICB0b2tlbi0+bGFiZWwsICh1 bnNpZ25lZCBsb25nKWkpOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKHVyaS0+bWFudWYg IT0gTlVMTCAmJgorKwkJICAgIHN0cm5jbXAodG9rZW4tPm1hbnVmYWN0dXJlcklELCB1cmktPm1h bnVmLCAzMikgIT0gMCkgeworKwkJCWRlYnVnMl9mKCJpZ25vcmluZyB0b2tlbiBub3QgbWF0Y2hp bmcgcmVxdXJlc3RlZCAiCisrCQkJICAgICJtYW51ZmFjdHVyZXJJRCAoJS4zMnMpIHNwZWNpZmll ZCBieSBQS0NTIzExIFVSSSBpbiAiCisrCQkJICAgICJzbG90ICVsdSIsIHRva2VuLT5tYW51ZmFj dHVyZXJJRCwgKHVuc2lnbmVkIGxvbmcpaSk7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAo dXJpLT5zZXJpYWwgIT0gTlVMTCAmJgorKwkJICAgIHN0cm5jbXAodG9rZW4tPnNlcmlhbE51bWJl ciwgdXJpLT5zZXJpYWwsIDE2KSAhPSAwKSB7CisrCQkJZGVidWcyX2YoImlnbm9yaW5nIHRva2Vu IG5vdCBtYXRjaGluZyByZXF1cmVzdGVkICIKKysJCQkgICAgInNlcmlhbE51bWJlciAoJXMpIHNw ZWNpZmllZCBieSBQS0NTIzExIFVSSSBpbiAiCisrCQkJICAgICJzbG90ICVsdSIsIHRva2VuLT5z ZXJpYWxOdW1iZXIsICh1bnNpZ25lZCBsb25nKWkpOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJ ZGVidWcoInByb3ZpZGVyICVzIHNsb3QgJWx1OiBsYWJlbCA8JS4zMnM+IG1hbnVmYWN0dXJlcklE IDwlLjMycz4gIgorKwkJICAgICJtb2RlbCA8JS4xNnM+IHNlcmlhbCA8JS4xNnM+IGZsYWdzIDB4 JWx4IiwKKysJCSAgICBwcm92aWRlcl91cmksICh1bnNpZ25lZCBsb25nKWksCisrCQkgICAgdG9r ZW4tPmxhYmVsLCB0b2tlbi0+bWFudWZhY3R1cmVySUQsIHRva2VuLT5tb2RlbCwKKysJCSAgICB0 b2tlbi0+c2VyaWFsTnVtYmVyLCB0b2tlbi0+ZmxhZ3MpOworKwkJLyoKKysJCSAqIG9wZW4gc2Vz c2lvbiBpZiBub3QgeWV0IG9wZW5lZCwgbG9naW4gd2l0aCBwaW4gYW5kCisrCQkgKiByZXRyaWV2 ZSBwdWJsaWMga2V5cyAoaWYga2V5cCBpcyBwcm92aWRlZCkKKysJCSAqLworKwkJaWYgKChwLT5t b2R1bGUtPnNsb3RpbmZvW2ldLnNlc3Npb24gIT0gMCB8fAorKwkJICAgIChyZXQgPSBwa2NzMTFf b3Blbl9zZXNzaW9uKHAsIGksIHBpbiwgdXNlcikpICE9IDApICYmIC8qID8/PyAqLworKwkJICAg IGtleXAgPT0gTlVMTCkKKysJCQljb250aW51ZTsKKysJCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGks IGtleXAsIGxhYmVsc3AsICZua2V5cywgdXJpKTsKKysJCXBrY3MxMV9mZXRjaF9jZXJ0cyhwLCBp LCBrZXlwLCBsYWJlbHNwLCAmbmtleXMsIHVyaSk7CisrCQlpZiAobmtleXMgPT0gMCAmJiAhcC0+ bW9kdWxlLT5zbG90aW5mb1tpXS5sb2dnZWRfaW4gJiYKKysJCSAgICBwa2NzMTFfaW50ZXJhY3Rp dmUpIHsKKysJCQkvKgorKwkJCSAqIFNvbWUgdG9rZW5zIHJlcXVpcmUgbG9naW4gYmVmb3JlIHRo ZXkgd2lsbAorKwkJCSAqIGV4cG9zZSBrZXlzLgorKwkJCSAqLworKwkJCWRlYnVnM19mKCJUcnlp bmcgdG8gbG9naW4gYXMgdGhlcmUgd2VyZSBubyBrZXlzIGZvdW5kIik7CisrCQkJaWYgKHBrY3Mx MV9sb2dpbl9zbG90KHAsICZwLT5tb2R1bGUtPnNsb3RpbmZvW2ldLAorKwkJCSAgICBDS1VfVVNF UikgPCAwKSB7CisrCQkJCWVycm9yKCJsb2dpbiBmYWlsZWQiKTsKKysJCQkJY29udGludWU7Cisr CQkJfQorKwkJCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cywg dXJpKTsKKysJCQlwa2NzMTFfZmV0Y2hfY2VydHMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlz LCB1cmkpOworKwkJfQorKwkJaWYgKG5rZXlzID09IDAgJiYgdXJpLT5vYmplY3QgIT0gTlVMTCkg eworKwkJCWRlYnVnM19mKCJObyBrZXlzIGZvdW5kLiBSZXRyeWluZyB3aXRob3V0IGxhYmVsICgl LjMycykgIiwKKysJCQkgICAgdXJpLT5vYmplY3QpOworKwkJCS8qIFRyeSBvbmNlIG1vcmUgd2l0 aG91dCB0aGUgbGFiZWwgZmlsdGVyICovCisrCQkJY2hhciAqbGFiZWwgPSB1cmktPm9iamVjdDsK KysJCQl1cmktPm9iamVjdCA9IE5VTEw7IC8qIFhYWCBjbG9uZSB1cmk/ICovCisrCQkJcGtjczEx X2ZldGNoX2tleXMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOworKwkJCXBrY3Mx MV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMsIHVyaSk7CisrCQkJdXJp LT5vYmplY3QgPSBsYWJlbDsKKysJCX0KKysJfQorKwlwaW4gPSBOVUxMOyAvKiBXaWxsIGJlIGNs ZWFuZWQgdXAgd2l0aCBVUkkgKi8KKysKKysJLyogbm93IG93bmVkIGJ5IGNhbGxlciAqLworKwkq cHJvdmlkZXJwID0gcDsKKysKKysJZnJlZShwcm92aWRlcl91cmkpOworKwlyZXR1cm4gKG5rZXlz KTsKKysgZmFpbDoKKysJaWYgKHApIHsKKysJCVRBSUxRX1JFTU9WRSgmcGtjczExX3Byb3ZpZGVy cywgcCwgbmV4dCk7CisrCSAgICAgCXBrY3MxMV9wcm92aWRlcl91bnJlZihwKTsKKysJfQorKwlp ZiAocmV0ID4gMCkKKysJCXJldCA9IC0xOworKwlyZXR1cm4gKHJldCk7CisrfQorKworKyNpZmRl ZiBXSVRIX1BLQ1MxMV9LRVlHRU4KKytzdGF0aWMgaW50CisrcGtjczExX3JlZ2lzdGVyX3Byb3Zp ZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwK KysgICAgY2hhciAqKipsYWJlbHNwLCBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoqcHJvdmlkZXJw LCBDS19VTE9ORyB1c2VyKQorK3sKKysJc3RydWN0IHBrY3MxMV91cmkgKnVyaSA9IE5VTEw7Cisr CWludCByOworKworKwlkZWJ1Z19mKCJjYWxsZWQsIHByb3ZpZGVyX2lkID0gJXMiLCBwcm92aWRl cl9pZCk7CisrCisrCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwlpZiAodXJpID09IE5VTEwp CisrCQlmYXRhbCgiZmFpbGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKKysKKysJaWYgKHN0cmxl bihwcm92aWRlcl9pZCkgPj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgorKwkgICAgc3Ry bmNtcChwcm92aWRlcl9pZCwgUEtDUzExX1VSSV9TQ0hFTUUsIHN0cmxlbihQS0NTMTFfVVJJX1ND SEVNRSkpID09IDApIHsKKysJCWlmIChwa2NzMTFfdXJpX3BhcnNlKHByb3ZpZGVyX2lkLCB1cmkp ICE9IDApCisrCQkJZmF0YWwoIkZhaWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSIpOworKwl9IGVs c2UgeworKwkJdXJpLT5tb2R1bGVfcGF0aCA9IHN0cmR1cChwcm92aWRlcl9pZCk7CisrCX0KKysK KysJciA9IHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcl9ieV91cmkodXJpLCBwaW4sIGtleXAsIGxh YmVsc3AsIHByb3ZpZGVycCwgdXNlcik7CisrCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworKwor KwlyZXR1cm4gcjsKKyt9CisrI2VuZGlmCisrCisgaW50CistcGtjczExX2FkZF9wcm92aWRlcihj aGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsCistICAg IGNoYXIgKioqbGFiZWxzcCkKKytwa2NzMTFfYWRkX3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtj czExX3VyaSAqdXJpLCBjaGFyICpwaW4sCisrICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwgY2hh ciAqKipsYWJlbHNwKQorIHsKKyAJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCA9IE5VTEw7Cisg CWludCBua2V5czsKKysJY2hhciAqcHJvdmlkZXJfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsK KyAKKy0JbmtleXMgPSBwa2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXIocHJvdmlkZXJfaWQsIHBpbiwg a2V5cCwgbGFiZWxzcCwKKy0JICAgICZwLCBDS1VfVVNFUik7CisrCWRlYnVnX2YoImNhbGxlZCwg cHJvdmlkZXJfdXJpID0gJXMiLCBwcm92aWRlcl91cmkpOworKworKwlua2V5cyA9IHBrY3MxMV9y ZWdpc3Rlcl9wcm92aWRlcl9ieV91cmkodXJpLCBwaW4sIGtleXAsIGxhYmVsc3AsICZwLCBDS1Vf VVNFUik7CisgCisgCS8qIG5vIGtleXMgZm91bmQgb3Igc29tZSBvdGhlciBlcnJvciwgZGUtcmVn aXN0ZXIgcHJvdmlkZXIgKi8KKyAJaWYgKG5rZXlzIDw9IDAgJiYgcCAhPSBOVUxMKSB7CitAQCAt MjA0NCwxMSArMjM2NiwzOCBAQCBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lk LCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwKKyAJCXBrY3MxMV9wcm92aWRlcl91 bnJlZihwKTsKKyAJfQorIAlpZiAobmtleXMgPT0gMCkKKy0JCWRlYnVnX2YoInByb3ZpZGVyICVz IHJldHVybmVkIG5vIGtleXMiLCBwcm92aWRlcl9pZCk7CisrCQlkZWJ1Z19mKCJwcm92aWRlciAl cyByZXR1cm5lZCBubyBrZXlzIiwgcHJvdmlkZXJfdXJpKTsKKyAKKysJZnJlZShwcm92aWRlcl91 cmkpOworIAlyZXR1cm4gKG5rZXlzKTsKKyB9CisgCisraW50CisrcGtjczExX2FkZF9wcm92aWRl cihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLAorKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtl eXAsIGNoYXIgKioqbGFiZWxzcCkKKyt7CisrCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7CisrCWlu dCBua2V5czsKKysKKysJdXJpID0gcGtjczExX3VyaV9pbml0KCk7CisrCWlmICh1cmkgPT0gTlVM TCkKKysJCWZhdGFsKCJGYWlsZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIpOworKworKwlpZiAoc3Ry bGVuKHByb3ZpZGVyX2lkKSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisrCSAgICBz dHJuY21wKHByb3ZpZGVyX2lkLCBQS0NTMTFfVVJJX1NDSEVNRSwgc3RybGVuKFBLQ1MxMV9VUklf U0NIRU1FKSkgPT0gMCkgeworKwkJaWYgKHBrY3MxMV91cmlfcGFyc2UocHJvdmlkZXJfaWQsIHVy aSkgIT0gMCkKKysJCQlmYXRhbCgiRmFpbGVkIHRvIHBhcnNlIFBLQ1MjMTEgVVJJIik7CisrCX0g ZWxzZSB7CisrCQl1cmktPm1vZHVsZV9wYXRoID0gc3RyZHVwKHByb3ZpZGVyX2lkKTsKKysJfQor KworKwlua2V5cyA9IHBrY3MxMV9hZGRfcHJvdmlkZXJfYnlfdXJpKHVyaSwgcGluLCBrZXlwLCBs YWJlbHNwKTsKKysJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7CisrCisrIAlyZXR1cm4gKG5rZXlz KTsKKyt9CisrCisrCisgaW50CisgcGtjczExX3NpZ24oc3RydWN0IHNzaGtleSAqa2V5LAorICAg ICB1X2NoYXIgKipzaWdwLCBzaXplX3QgKmxlbnAsCitkaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS5o IGIvc3NoLXBrY3MxMS5oCitpbmRleCAxZDAyNzdhNmQuLjEzNDU5NjQ0YyAxMDA2NDQKKy0tLSBh L3NzaC1wa2NzMTEuaAorKysrIGIvc3NoLXBrY3MxMS5oCitAQCAtMjQsMTIgKzI0LDE2IEBACisg I2RlZmluZQlTU0hfUEtDUzExX0VSUl9QSU5fUkVRVUlSRUQJCTQKKyAjZGVmaW5lCVNTSF9QS0NT MTFfRVJSX1BJTl9MT0NLRUQJCTUKKyAKKysjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKKysK KyBzdHJ1Y3Qgc3Noa2V5OworIAorIGludAlwa2NzMTFfaW5pdChpbnQpOworIHZvaWQJcGtjczEx X3Rlcm1pbmF0ZSh2b2lkKTsKKyBpbnQJcGtjczExX2FkZF9wcm92aWRlcihjaGFyICosIGNoYXIg Kiwgc3RydWN0IHNzaGtleSAqKiosIGNoYXIgKioqKTsKKytpbnQJcGtjczExX2FkZF9wcm92aWRl cl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKiwgY2hhciAqLCBzdHJ1Y3Qgc3Noa2V5ICoqKiwg Y2hhciAqKiopOworIGludAlwa2NzMTFfZGVsX3Byb3ZpZGVyKGNoYXIgKik7CisraW50CXBrY3Mx MV91cmlfd3JpdGUoY29uc3Qgc3RydWN0IHNzaGtleSAqLCBGSUxFICopOworIGludAlwa2NzMTFf c2lnbihzdHJ1Y3Qgc3Noa2V5ICosIHVfY2hhciAqKiwgc2l6ZV90ICosCisgCSAgICBjb25zdCB1 X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKyAJICAgIGNvbnN0 IGNoYXIgKiwgdV9pbnQpOworZGlmZiAtLWdpdCBhL3NzaC5jIGIvc3NoLmMKK2luZGV4IDAxODJj YzU2Ny4uYzhmMzU0NWFmIDEwMDY0NAorLS0tIGEvc3NoLmMKKysrKyBiL3NzaC5jCitAQCAtODQ4 LDYgKzg0OCwxNCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorIAkJCW9wdGlvbnMuZ3NzX2Rl bGVnX2NyZWRzID0gMTsKKyAJCQlicmVhazsKKyAJCWNhc2UgJ2knOgorKyNpZmRlZiBFTkFCTEVf UEtDUzExCisrCQkJaWYgKHN0cmxlbihvcHRhcmcpID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVN RSkgJiYKKysJCQkgICAgc3RybmNtcChvcHRhcmcsIFBLQ1MxMV9VUklfU0NIRU1FLAorKwkJCSAg ICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7CisrCQkJCWFkZF9pZGVudGl0eV9m aWxlKCZvcHRpb25zLCBOVUxMLCBvcHRhcmcsIDEpOworKwkJCQlicmVhazsKKysJCQl9CisrI2Vu ZGlmCisgCQkJcCA9IHRpbGRlX2V4cGFuZF9maWxlbmFtZShvcHRhcmcsIGdldHVpZCgpKTsKKyAJ CQlpZiAoc3RhdChwLCAmc3QpID09IC0xKQorIAkJCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6 IElkZW50aXR5IGZpbGUgJXMgIgorQEAgLTE4MzIsNiArMTg0MCw3IEBAIG1haW4oaW50IGFjLCBj aGFyICoqYXYpCisgCisgI2lmZGVmIEVOQUJMRV9QS0NTMTEKKyAJKHZvaWQpcGtjczExX2RlbF9w cm92aWRlcihvcHRpb25zLnBrY3MxMV9wcm92aWRlcik7CisrCXBrY3MxMV90ZXJtaW5hdGUoKTsK KyAjZW5kaWYKKyAKKyAgc2tpcF9jb25uZWN0OgorQEAgLTIzNTYsNiArMjM2NSw0NSBAQCBzc2hf c2Vzc2lvbjIoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBzdHJ1Y3Qgc3NoX2Nvbm5faW5mbyAqY2lu Zm8pCisgCSAgICBvcHRpb25zLmVzY2FwZV9jaGFyIDogU1NIX0VTQ0FQRUNIQVJfTk9ORSwgaWQp OworIH0KKyAKKysjaWZkZWYgRU5BQkxFX1BLQ1MxMQorK3N0YXRpYyB2b2lkCisrbG9hZF9wa2Nz MTFfaWRlbnRpdHkoY2hhciAqcGtjczExX3VyaSwgY2hhciAqaWRlbnRpdHlfZmlsZXNbXSwKKysg ICAgc3RydWN0IHNzaGtleSAqaWRlbnRpdHlfa2V5c1tdLCBpbnQgKm5faWRzKQorK3sKKysJaW50 IG5rZXlzLCBpOworKwlzdHJ1Y3Qgc3Noa2V5ICoqa2V5czsKKysJc3RydWN0IHBrY3MxMV91cmkg KnVyaTsKKysKKysJZGVidWcoImlkZW50aXR5IGZpbGUgJyVzJyBmcm9tIHBrY3MjMTEiLCBwa2Nz MTFfdXJpKTsKKysJdXJpID0gcGtjczExX3VyaV9pbml0KCk7CisrCWlmICh1cmkgPT0gTlVMTCkK KysJCWZhdGFsKCJGYWlsZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIpOworKworKwlpZiAocGtjczEx X3VyaV9wYXJzZShwa2NzMTFfdXJpLCB1cmkpICE9IDApCisrCWZhdGFsKCJGYWlsZWQgdG8gcGFy c2UgUEtDUyMxMSBVUkkgJXMiLCBwa2NzMTFfdXJpKTsKKysKKysJLyogd2UgbmVlZCB0byBtZXJn ZSBVUkkgYW5kIHByb3ZpZGVyIHRvZ2V0aGVyICovCisrCWlmIChvcHRpb25zLnBrY3MxMV9wcm92 aWRlciAhPSBOVUxMICYmIHVyaS0+bW9kdWxlX3BhdGggPT0gTlVMTCkKKysJCXVyaS0+bW9kdWxl X3BhdGggPSBzdHJkdXAob3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIpOworKworKwlpZiAob3B0aW9u cy5udW1faWRlbnRpdHlfZmlsZXMgPCBTU0hfTUFYX0lERU5USVRZX0ZJTEVTICYmCisrCSAgICAo bmtleXMgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyX2J5X3VyaSh1cmksIE5VTEwsICZrZXlzLCBOVUxM KSkgPiAwKSB7CisrCQlmb3IgKGkgPSAwOyBpIDwgbmtleXM7IGkrKykgeworKwkJCWlmICgqbl9p ZHMgPj0gU1NIX01BWF9JREVOVElUWV9GSUxFUykgeworKwkJCQlzc2hrZXlfZnJlZShrZXlzW2ld KTsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJCWlkZW50aXR5X2tleXNbKm5faWRzXSA9IGtl eXNbaV07CisrCQkJaWRlbnRpdHlfZmlsZXNbKm5faWRzXSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7 CisrCQkJKCpuX2lkcykrKzsKKysJCX0KKysJCWZyZWUoa2V5cyk7CisrCX0KKysKKysJcGtjczEx X3VyaV9jbGVhbnVwKHVyaSk7CisrfQorKyNlbmRpZiAvKiBFTkFCTEVfUEtDUzExICovCisrCisg LyogTG9hZHMgYWxsIElkZW50aXR5RmlsZSBhbmQgQ2VydGlmaWNhdGVGaWxlIGtleXMgKi8KKyBz dGF0aWMgdm9pZAorIGxvYWRfcHVibGljX2lkZW50aXR5X2ZpbGVzKGNvbnN0IHN0cnVjdCBzc2hf Y29ubl9pbmZvICpjaW5mbykKK0BAIC0yMzcwLDExICsyNDE4LDYgQEAgbG9hZF9wdWJsaWNfaWRl bnRpdHlfZmlsZXMoY29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQorIAljaGFyICpj ZXJ0aWZpY2F0ZV9maWxlc1tTU0hfTUFYX0NFUlRJRklDQVRFX0ZJTEVTXTsKKyAJc3RydWN0IHNz aGtleSAqY2VydGlmaWNhdGVzW1NTSF9NQVhfQ0VSVElGSUNBVEVfRklMRVNdOworIAlpbnQgY2Vy dGlmaWNhdGVfZmlsZV91c2VycHJvdmlkZWRbU1NIX01BWF9DRVJUSUZJQ0FURV9GSUxFU107Cist I2lmZGVmIEVOQUJMRV9QS0NTMTEKKy0Jc3RydWN0IHNzaGtleSAqKmtleXMgPSBOVUxMOworLQlj aGFyICoqY29tbWVudHMgPSBOVUxMOworLQlpbnQgbmtleXM7CistI2VuZGlmIC8qIFBLQ1MxMSAq LworIAorIAluX2lkcyA9IG5fY2VydHMgPSAwOworIAltZW1zZXQoaWRlbnRpdHlfZmlsZXMsIDAs IHNpemVvZihpZGVudGl0eV9maWxlcykpOworQEAgLTIzODcsMzMgKzI0MzAsNDYgQEAgbG9hZF9w dWJsaWNfaWRlbnRpdHlfZmlsZXMoY29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQor IAkgICAgc2l6ZW9mKGNlcnRpZmljYXRlX2ZpbGVfdXNlcnByb3ZpZGVkKSk7CisgCisgI2lmZGVm IEVOQUJMRV9QS0NTMTEKKy0JaWYgKG9wdGlvbnMucGtjczExX3Byb3ZpZGVyICE9IE5VTEwgJiYK Ky0JICAgIG9wdGlvbnMubnVtX2lkZW50aXR5X2ZpbGVzIDwgU1NIX01BWF9JREVOVElUWV9GSUxF UyAmJgorLQkgICAgKHBrY3MxMV9pbml0KCFvcHRpb25zLmJhdGNoX21vZGUpID09IDApICYmCist CSAgICAobmtleXMgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyKG9wdGlvbnMucGtjczExX3Byb3ZpZGVy LCBOVUxMLAorLQkgICAgJmtleXMsICZjb21tZW50cykpID4gMCkgeworLQkJZm9yIChpID0gMDsg aSA8IG5rZXlzOyBpKyspIHsKKy0JCQlpZiAobl9pZHMgPj0gU1NIX01BWF9JREVOVElUWV9GSUxF UykgeworLQkJCQlzc2hrZXlfZnJlZShrZXlzW2ldKTsKKy0JCQkJZnJlZShjb21tZW50c1tpXSk7 CistCQkJCWNvbnRpbnVlOworLQkJCX0KKy0JCQlpZGVudGl0eV9rZXlzW25faWRzXSA9IGtleXNb aV07CistCQkJaWRlbnRpdHlfZmlsZXNbbl9pZHNdID0gY29tbWVudHNbaV07IC8qIHRyYW5zZmVy cmVkICovCistCQkJbl9pZHMrKzsKKy0JCX0KKy0JCWZyZWUoa2V5cyk7CistCQlmcmVlKGNvbW1l bnRzKTsKKysJLyogaGFuZGxlIGZhbGxiYWNrIGZyb20gUEtDUzExUHJvdmlkZXIgb3B0aW9uICov CisrCXBrY3MxMV9pbml0KCFvcHRpb25zLmJhdGNoX21vZGUpOworKworKwlpZiAob3B0aW9ucy5w a2NzMTFfcHJvdmlkZXIgIT0gTlVMTCkgeworKwkJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKKysK KysJCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwkJaWYgKHVyaSA9PSBOVUxMKQorKwkJCWZh dGFsKCJGYWlsZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIpOworKworKwkJLyogQ29uc3RydWN0IHNp bXBsZSBQS0NTIzExIFVSSSB0byBzaW1wbGlmeSBhY2Nlc3MgKi8KKysJCXVyaS0+bW9kdWxlX3Bh dGggPSBzdHJkdXAob3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIpOworKworKwkJLyogQWRkIGl0IGFz IGFueSBvdGhlciBJZGVudGl0eUZpbGUgKi8KKysJCWNwID0gcGtjczExX3VyaV9nZXQodXJpKTsK KysJCWFkZF9pZGVudGl0eV9maWxlKCZvcHRpb25zLCBOVUxMLCBjcCwgMSk7CisrCQlmcmVlKGNw KTsKKysKKysJCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworIAl9CisgI2VuZGlmIC8qIEVOQUJM RV9QS0NTMTEgKi8KKyAJZm9yIChpID0gMDsgaSA8IG9wdGlvbnMubnVtX2lkZW50aXR5X2ZpbGVz OyBpKyspIHsKKysJCWNoYXIgKm5hbWUgPSBvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ldOworIAkJ aWYgKG5faWRzID49IFNTSF9NQVhfSURFTlRJVFlfRklMRVMgfHwKKy0JCSAgICBzdHJjYXNlY21w KG9wdGlvbnMuaWRlbnRpdHlfZmlsZXNbaV0sICJub25lIikgPT0gMCkgeworKwkJICAgIHN0cmNh c2VjbXAobmFtZSwgIm5vbmUiKSA9PSAwKSB7CisgCQkJZnJlZShvcHRpb25zLmlkZW50aXR5X2Zp bGVzW2ldKTsKKyAJCQlvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ldID0gTlVMTDsKKyAJCQljb250 aW51ZTsKKyAJCX0KKy0JCWNwID0gdGlsZGVfZXhwYW5kX2ZpbGVuYW1lKG9wdGlvbnMuaWRlbnRp dHlfZmlsZXNbaV0sIGdldHVpZCgpKTsKKysjaWZkZWYgRU5BQkxFX1BLQ1MxMQorKwkJaWYgKHN0 cmxlbihuYW1lKSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisrCQkgICAgc3RybmNt cChuYW1lLCBQS0NTMTFfVVJJX1NDSEVNRSwKKysJCSAgICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hF TUUpKSA9PSAwKSB7CisrCQkJbG9hZF9wa2NzMTFfaWRlbnRpdHkobmFtZSwgaWRlbnRpdHlfZmls ZXMsCisrCQkJICAgIGlkZW50aXR5X2tleXMsICZuX2lkcyk7CisrCQkJZnJlZShvcHRpb25zLmlk ZW50aXR5X2ZpbGVzW2ldKTsKKysJCQljb250aW51ZTsKKysJCX0KKysjZW5kaWYgLyogRU5BQkxF X1BLQ1MxMSAqLworKwkJY3AgPSB0aWxkZV9leHBhbmRfZmlsZW5hbWUobmFtZSwgZ2V0dWlkKCkp OworIAkJZmlsZW5hbWUgPSBkZWZhdWx0X2NsaWVudF9wZXJjZW50X2RvbGxhcl9leHBhbmQoY3As IGNpbmZvKTsKKyAJCWZyZWUoY3ApOworIAkJY2hlY2tfbG9hZChzc2hrZXlfbG9hZF9wdWJsaWMo ZmlsZW5hbWUsICZwdWJsaWMsIE5VTEwpLAorZGlmZiAtLWdpdCBhL3NzaF9jb25maWcuNSBiL3Nz aF9jb25maWcuNQoraW5kZXggZjJmZjg1ODVjLi5mMTZlYjYxZWEgMTAwNjQ0CistLS0gYS9zc2hf Y29uZmlnLjUKKysrKyBiL3NzaF9jb25maWcuNQorQEAgLTEzMDQsNiArMTMwNCwyMSBAQCBtYXkg YWxzbyBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAuQ20gQ2VydGlmaWNhdGVGaWxlCisg aW4gb3JkZXIgdG8gcHJvdmlkZSBhbnkgY2VydGlmaWNhdGUgYWxzbyBuZWVkZWQgZm9yIGF1dGhl bnRpY2F0aW9uIHdpdGgKKyB0aGUgaWRlbnRpdHkuCisrLlBwCisrVGhlIGF1dGhlbnRpY2F0aW9u IGlkZW50aXR5IGNhbiBiZSBhbHNvIHNwZWNpZmllZCBpbiBhIGZvcm0gb2YgUEtDUyMxMSBVUkkK KytzdGFydGluZyB3aXRoIGEgc3RyaW5nCisrLkNtIHBrY3MxMTogLgorK1RoZXJlIGlzIHN1cHBv cnRlZCBhIHN1YnNldCBvZiB0aGUgUEtDUyMxMSBVUkkgYXMgZGVmaW5lZAorK2luIFJGQyA3NTEy IChpbXBsZW1lbnRlZCBwYXRoIGFyZ3VtZW50cworKy5DbSBpZCAsCisrLkNtIG1hbnVmYWN0dXJl ciAsCisrLkNtIG9iamVjdCAsCisrLkNtIHRva2VuCisrYW5kIHF1ZXJ5IGFyZ3VtZW50cworKy5D bSBtb2R1bGUtcGF0aAorK2FuZAorKy5DbSBwaW4tdmFsdWUKKyspLiBUaGUgVVJJIGNhbiBub3Qg YmUgaW4gcXVvdGVzLgorIC5JdCBDbSBJZ25vcmVVbmtub3duCisgU3BlY2lmaWVzIGEgcGF0dGVy bi1saXN0IG9mIHVua25vd24gb3B0aW9ucyB0byBiZSBpZ25vcmVkIGlmIHRoZXkgYXJlCisgZW5j b3VudGVyZWQgaW4gY29uZmlndXJhdGlvbiBwYXJzaW5nLgorZGlmZiAtLWdpdCBhL3NzaGtleS5j IGIvc3Noa2V5LmMKK2luZGV4IDIzODBjODA4MS4uMDg0ZmYzYjU1IDEwMDY0NAorLS0tIGEvc3No a2V5LmMKKysrKyBiL3NzaGtleS5jCitAQCAtODUyLDggKzg1MiwxMCBAQCBzc2hrZXlfZnJlZV9j b250ZW50cyhzdHJ1Y3Qgc3Noa2V5ICprKQorIAorIAlpZiAoayA9PSBOVUxMKQorIAkJcmV0dXJu OworKyNpZmRlZiBFTkFCTEVfUEtDUzExCisgCWlmICgoay0+ZmxhZ3MgJiBTU0hLRVlfRkxBR19F WFQpICE9IDApCisgCQlwa2NzMTFfa2V5X2ZyZWUoayk7CisrI2VuZGlmCisgCWlmICgoaW1wbCA9 IHNzaGtleV9pbXBsX2Zyb21fdHlwZShrLT50eXBlKSkgIT0gTlVMTCAmJgorIAkgICAgaW1wbC0+ ZnVuY3MtPmNsZWFudXAgIT0gTlVMTCkKKyAJCWltcGwtPmZ1bmNzLT5jbGVhbnVwKGspOworQEAg LTIzMDAsOSArMjMwMiwxMSBAQCBzc2hrZXlfc2lnbihzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCWlm IChzc2hrZXlfaXNfc2soa2V5KSkgeworIAkJciA9IHNzaHNrX3NpZ24oc2tfcHJvdmlkZXIsIGtl eSwgc2lncCwgbGVucCwgZGF0YSwKKyAJCSAgICBkYXRhbGVuLCBjb21wYXQsIHNrX3Bpbik7Cisr I2lmZGVmIEVOQUJMRV9QS0NTMTEKKyAJfSBlbHNlIGlmICgoa2V5LT5mbGFncyAmIFNTSEtFWV9G TEFHX0VYVCkgIT0gMCkgeworIAkJciA9IHBrY3MxMV9zaWduKGtleSwgc2lncCwgbGVucCwgZGF0 YSwgZGF0YWxlbiwKKyAJCSAgICBhbGcsIHNrX3Byb3ZpZGVyLCBza19waW4sIGNvbXBhdCk7Cisr I2VuZGlmCisgCX0gZWxzZSB7CisgCQlpZiAoaW1wbC0+ZnVuY3MtPnNpZ24gPT0gTlVMTCkKKyAJ CQlyID0gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKKy0tIAorMi41NS4wCisKCmRpZmYg LS1naXQgYS8wMDUzLWdzc2FwaS10ZXN0cy5wYXRjaCBiLzAwNTMtZ3NzYXBpLXRlc3RzLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmE3ODQKLS0tIC9kZXYvbnVs bAorKysgYi8wMDUzLWdzc2FwaS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIzMCBAQAorRnJvbSA5 MGY0N2YzN2FhMWIxNmQyMDM5ZjNlZDFhMzdhYjQxOGJlMDlhMmUxIE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0 ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDUzLzUz XSBnc3NhcGktdGVzdHMKKworLS0tCisgcmVncmVzcy9NYWtlZmlsZSAgIHwgICAxICsKKyByZWdy ZXNzL2dzcy1rZXguc2ggfCAxOTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxOTkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBt b2RlIDEwMDY0NCByZWdyZXNzL2dzcy1rZXguc2gKKworZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvTWFr ZWZpbGUgYi9yZWdyZXNzL01ha2VmaWxlCitpbmRleCA0OTIxMTJlODAuLjIwMTFmODdhNyAxMDA2 NDQKKy0tLSBhL3JlZ3Jlc3MvTWFrZWZpbGUKKysrKyBiL3JlZ3Jlc3MvTWFrZWZpbGUKK0BAIC0x MjcsNiArMTI3LDcgQEAgSU5URVJPUF9URVNUUys9CWRyb3BiZWFyLWNpcGhlcnMgZHJvcGJlYXIt a2V4IGRyb3BiZWFyLXNlcnZlcgorICNJTlRFUk9QX1RFU1RTKz1zc2gtY29tIHNzaC1jb20tY2xp ZW50IHNzaC1jb20ta2V5Z2VuIHNzaC1jb20tc2Z0cAorIAorIEVYVFJBX1RFU1RTPQlhZ2VudC1w a2NzMTEKKytFWFRSQV9URVNUUys9CWdzcy1hdXRoIGdzcy1rZXgKKyAjRVhUUkFfVEVTVFMrPSAJ Y2lwaGVyLXNwZWVkCisgCisgVVNFUk5BTUU9CQkke0xPR05BTUV9CitkaWZmIC0tZ2l0IGEvcmVn cmVzcy9nc3Mta2V4LnNoIGIvcmVncmVzcy9nc3Mta2V4LnNoCituZXcgZmlsZSBtb2RlIDEwMDY0 NAoraW5kZXggMDAwMDAwMDAwLi42M2IyZTE3OGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3JlZ3Jl c3MvZ3NzLWtleC5zaAorQEAgLTAsMCArMSwxOTggQEAKKyt0aWQ9IkdTUy1BUEkgS2V5IEV4Y2hh bmdlIgorKworKyMgU2tpcCB0aGUgdGVzdCBpZiBHU1NBUEkgc3VwcG9ydCBpcyBub3QgY29uZmln dXJlZAorK2lmICEgZ3JlcCAtRSAnXiNkZWZpbmUgR1NTQVBJJyAiJEJVSUxERElSL2NvbmZpZy5o IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgc2tpcCAiR1NTQVBJIG5vdCBlbmFibGVkIgor K2ZpCisrCisrIyBXZSB0ZXN0IHdpdGggTUlUIEtlcmJlcm9zIEtEQywgc2tpcCBpZiBub3QgaW5z dGFsbGVkCisraWYgISB3aGljaCBrcmI1a2RjID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBz a2lwICJNSVQgS2VyYmVyb3MgS0RDIG5vdCBpbnN0YWxsZWQiCisrZmkKKysKKysjIFRoZSB0ZXN0 IG5lZWRzIG5zc193cmFwcGVyIHRvIGVtdWxhdGUgZ2V0aG9zdG5hbWUoKSBhbmQgL2V0Yy9ob3N0 cywKKysjIHdlIHNraXAgaWYgdGhlIHNoYXJlZCBsaWJyYXJ5IGlzIG5vdCBpbnN0YWxsZWQKKytu c3Nfd3JhcHBlcj0ibGlibnNzX3dyYXBwZXIuc28iCisraWYgISBsZGNvbmZpZyAtcCB8IGdyZXAg IiRuc3Nfd3JhcHBlciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIHNraXAgIiRuc3Nfd3Jh cHBlciBub3QgaW5zdGFsbGVkIgorK2ZpCisrCisrIyBTZXQgdXAgdGhlIHVzZXJuYW1lIG9mIHRo ZSBTU0ggY2xpZW50CisrY2xpZW50PSIkTE9HTkFNRSIKKytpZiBbICJ4JGNsaWVudCIgPSAieCIg XTsgdGhlbgorKwljbGllbnQ9IiQod2hvYW1pKSIKKytmaQorKworKyMgU2V0IHVwIFNTSEQgYW5k IEtEQyBob3N0bmFtZXMgYW5kIHJlc29sdmUgYm90aCB0byBsb2NhbGhvc3QKKytzc2hkX2hvc3Ru YW1lPSJzc2hkLmV4YW1wbGUub3JnIgorK2tkY19ob3N0bmFtZT0ia2RjLmV4YW1wbGUub3JnIgor K2tkY19wb3J0PTIwODgKKytob3N0cz0iJE9CSi9ob3N0cyIKKytlY2hvICIxMjcuMC4wLjEgJHNz aGRfaG9zdG5hbWUgJGtkY19ob3N0bmFtZSIgPiAiJGhvc3RzIgorKworKyMgU2V0IHVwIGEgZGly ZWN0b3J5IHRvIHN0b3JlIEtlcmJlcm9zIGRhdGEKKytnc3NkaXI9IiRPQkovZ3NzIgorK21rZGly IC1wICIkZ3NzZGlyIgorK2V4cG9ydCBLUkI1Q0NOQU1FPSIkZ3NzZGlyL2NjIgorK2V4cG9ydCBL UkI1X0NPTkZJRz0iJGdzc2Rpci9rcmI1LmNvbmYiCisrZXhwb3J0IEtSQjVfS0RDX1BST0ZJTEU9 IiRnc3NkaXIva2RjLmNvbmYiCisrZXhwb3J0IEtSQjVfS1ROQU1FPSIkZ3NzZGlyL3NzaC5rZXl0 YWIiCisrZXhwb3J0IEtSQjVSQ0FDSEVUWVBFPSJub25lIgorK2tkY19waWRmaWxlPSIkZ3NzZGly L3BpZCIKKysKKysjIENvbmZpZ3VyZSBLZXJiZXJvcworK2NhdDw8RU9GID4gIiRLUkI1X0tEQ19Q Uk9GSUxFIgorK1tyZWFsbXNdCisrICAgIEVYQU1QTEUuT1JHID0geworKyAgICAgICAgZGF0YWJh c2VfbmFtZSA9ICRnc3NkaXIvcHJpbmNpcGFsCisrICAgICAgICBrZXlfc3Rhc2hfZmlsZSA9ICRn c3NkaXIvc3Rhc2gKKysgICAgICAgIGtkY19saXN0ZW4gPSAka2RjX2hvc3RuYW1lOiRrZGNfcG9y dAorKyAgICAgICAga2RjX3RjcF9saXN0ZW4gPSAka2RjX2hvc3RuYW1lOiRrZGNfcG9ydAorKyAg ICB9CisrW2xvZ2dpbmddCisrICAgIGtkYyA9IEZJTEU6JGdzc2Rpci9rZGMubG9nCisrICAgIGRl YnVnID0gdHJ1ZQorK0VPRgorKworK2NhdDw8RU9GID4gIiRLUkI1X0NPTkZJRyIKKytbbGliZGVm YXVsdHNdCisrICAgIGRlZmF1bHRfcmVhbG0gPSBFWEFNUExFLk9SRworK1tyZWFsbXNdCisrICAg IEVYQU1QTEUuT1JHID0geworKyAgICAgICAga2RjID0gJGtkY19ob3N0bmFtZToka2RjX3BvcnQK KysgICAgfQorK0VPRgorKworKyMgQmFjayB1cCB0aGUgZGVmYXVsdCBzc2hkX2NvbmZpZworK2Nw ICIkT0JKL3NzaGRfY29uZmlnIiAiJE9CSi9zc2hkX2NvbmZpZy5vcmlnIgorKworK3NldHVwX3Nz aGQoKSB7CisrICAgIGtleF9hbGc9IiQxIgorKworKyAgICBjcCAiJE9CSi9zc2hkX2NvbmZpZy5v cmlnIiAiJE9CSi9zc2hkX2NvbmZpZyIKKysKKysgICAgY2F0PDxFT0YgPj4gIiRPQkovc3NoZF9j b25maWciCisrUHVia2V5QXV0aGVudGljYXRpb24gbm8KKytQYXNzd29yZEF1dGhlbnRpY2F0aW9u IG5vCisrR1NTQVBJQXV0aGVudGljYXRpb24geWVzCisrR1NTQVBJS2V5RXhjaGFuZ2UgeWVzCisr R1NTQVBJS2V4QWxnb3JpdGhtcyAka2V4X2FsZworK0dTU0FQSVN0cmljdEFjY2VwdG9yQ2hlY2sg bm8KKytFT0YKKysKKysgICAgdGVzdF9zc2hfc3NoZF9lbnZfYmFja3VwPSIkVEVTVF9TU0hfU1NI RF9FTlYiCisrICAgIFRFU1RfU1NIX1NTSERfRU5WPSIkVEVTVF9TU0hfU1NIRF9FTlYgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICBMRF9QUkVMT0FEPSRuc3Nfd3Jh cHBlciAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICBOU1NfV1JBUFBFUl9I T1NUUz0kaG9zdHMgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICBOU1NfV1JB UFBFUl9IT1NUTkFNRT0kc3NoZF9ob3N0bmFtZSBcCisrICAgICAgICAgICAgICAgICAgICAgICBL UkI1X0NPTkZJRz0kS1JCNV9DT05GSUcgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAg ICAgICBLUkI1X0tEQ19QUk9GSUxFPSRLUkI1X0tEQ19QUk9GSUxFICBcCisrICAgICAgICAgICAg ICAgICAgICAgICBLUkI1Q0NOQU1FPSRLUkI1Q0NOQU1FICAgICAgICAgICAgICBcCisrICAgICAg ICAgICAgICAgICAgICAgICBLUkI1X0tUTkFNRT0kS1JCNV9LVE5BTUUgICAgICAgICAgICBcCisr ICAgICAgICAgICAgICAgICAgICAgICBLUkI1UkNBQ0hFVFlQRT0kS1JCNVJDQUNIRVRZUEUiCisr ICAgIHN0YXJ0X3NzaGQKKyt9CisrCisrdGVhcmRvd25fc3NoZCgpIHsKKysgICAgVEVTVF9TU0hf U1NIRF9FTlY9IiR0ZXN0X3NzaF9zc2hkX2Vudl9iYWNrdXAiCisrICAgIHN0b3Bfc3NoZAorK30K KysKKytzZXR1cF9rZGMoKSB7CisrICAgIGtkYjVfdXRpbCBjcmVhdGUgLVAgImZvbyIgLXMKKysg ICAga3JiNWtkYyAtdyAxIC1QICIka2RjX3BpZGZpbGUiCisrICAgIGk9MDsKKysgICAgd2hpbGUg WyAhIC1mICIka2RjX3BpZGZpbGUiIC1hICRpIC1sdCAxMCBdOyBkbworKyAgICAgICAgaT0kKChp ICsgMSkpCisrICAgICAgICBzbGVlcCAxCisrICAgIGRvbmUKKysgICAgdGVzdCAtZiAiJGtkY19w aWRmaWxlIiB8fCBmYXRhbCAiS0RDIGZhaWxlZCB0byBzdGFydCIKKyt9CisrCisrdGVhcmRvd25f a2RjKCkgeworKyAgICBraWxsICIkKGNhdCAiJGtkY19waWRmaWxlIikiCisrICAgIGtkZXN0cm95 CisrICAgIHJtIC1mICIkS1JCNV9LVE5BTUUiICIka2RjX3BpZGZpbGUiCisrICAgIGtkYjVfdXRp bCBkZXN0cm95IC1mCisrfQorKworK3NldHVwX25zc19lbXVsYXRpb24oKSB7CisrICAgIGV4cG9y dCBMRF9QUkVMT0FEPSIkbnNzX3dyYXBwZXIiCisrICAgIGV4cG9ydCBOU1NfV1JBUFBFUl9IT1NU Uz0iJGhvc3RzIgorK30KKysKKyt0ZWFyZG93bl9uc3NfZW11bGF0aW9uKCkgeworKyAgICB1bnNl dCBMRF9QUkVMT0FECisrICAgIHVuc2V0IE5TU19XUkFQUEVSX0hPU1RTCisrfQorKworK3Rlc3Rf Z3NzX2tleCgpIHsKKysgICAga2V4X2ZhbWlseT0iJDEiCisrICAgIGF1dGhfc3NoZD0iJDIiCisr ICAgIGV4cGVjdD0iJDMiCisrCisrICAgICMgQ2hlY2sgaWYgdGhlIGFsZ29yaXRobSBmYW1pbHkg aXMgcmVjb2duaXplZCBieSBzc2gKKysgICAgaWYgISAke1JFQUxfU1NIfSAtRyAtRiAiJE9CSi9z c2hfY29uZmlnIiBcCisrICAgICAgICAtbyAiR1NTQVBJS2V5RXhjaGFuZ2UgeWVzIiBcCisrICAg ICAgICAtbyAiR1NTQVBJS2V4QWxnb3JpdGhtcyAka2V4X2ZhbWlseSIgXAorKyAgICAgICAgIiRj bGllbnRAJHNzaGRfaG9zdG5hbWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgICAgdmVy Ym9zZSAiZ3NzIGtleCAka2V4X2ZhbWlseSBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyIKKysgICAg ICAgIHJldHVybiAwCisrICAgIGZpCisrCisrICAgIHNldHVwX3NzaGQgIiRrZXhfZmFtaWx5Igor KyAgICBzZXR1cF9uc3NfZW11bGF0aW9uCisrICAgIHNldHVwX2tkYworKworKyAgICBrYWRtaW4u bG9jYWwgYWRkX3ByaW5jaXBhbCAtcmFuZGtleSAiaG9zdC8kc3NoZF9ob3N0bmFtZSIKKysgICAg aWYgJGF1dGhfc3NoZDsgdGhlbgorKyAgICAgICAga2FkbWluLmxvY2FsIGt0YWRkICJob3N0LyRz c2hkX2hvc3RuYW1lIgorKyAgICBmaQorKyAgICBrYWRtaW4ubG9jYWwgYWRkX3ByaW5jaXBhbCAt cHcgImZvbyIgIiRjbGllbnQiCisrICAgIGVjaG8gImZvbyIgfCBraW5pdCAiJGNsaWVudCIKKysK KysgICAgJHtTU0h9IC1GICIkT0JKL3NzaF9jb25maWciIFwKKysgICAgICAgIC1vICJHU1NBUElB dXRoZW50aWNhdGlvbiB5ZXMiIFwKKysgICAgICAgIC1vICJHU1NBUElLZXlFeGNoYW5nZSB5ZXMi IFwKKysgICAgICAgIC1vICJHU1NBUElLZXhBbGdvcml0aG1zICRrZXhfZmFtaWx5IiBcCisrICAg ICAgICAtbyAiR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubyIgXAorKyAgICAgICAgIiRjbGll bnRAJHNzaGRfaG9zdG5hbWUiIHRydWUKKysgICAgc3RhdHVzPSQ/CisrCisrICAgIHRlYXJkb3du X2tkYworKyAgICB0ZWFyZG93bl9uc3NfZW11bGF0aW9uCisrICAgIHRlYXJkb3duX3NzaGQKKysK KysgICAgWyAkc3RhdHVzIC1lcSAkZXhwZWN0IF0KKyt9CisrCisrIyBHU1Mga2V4IGZhbWlseSBw cmVmaXhlcyB0byB0ZXN0LgorKyMgR1NTQVBJS2V4QWxnb3JpdGhtcyBhY2NlcHRzIHRoZXNlIHBy ZWZpeGVzOyB0aGUgZnVsbCBhbGdvcml0aG0gbmFtZXMKKysjIChwcmVmaXggKyBCYXNlNjQoTUQ1 KE9JRCkpKSBhcmUgY29uc3RydWN0ZWQgZHVyaW5nIG5lZ290aWF0aW9uLgorK2dzc19rZXhfZmFt aWxpZXM9IgorKyAgICBnc3MtZ3JvdXAxNC1zaGEyNTYtCisrICAgIGdzcy1ncm91cDE2LXNoYTUx Mi0KKysgICAgZ3NzLW5pc3RwMjU2LXNoYTI1Ni0KKysgICAgZ3NzLWN1cnZlMjU1MTktc2hhMjU2 LQorKyAgICBnc3MtZ3JvdXAxNC1zaGExLQorKyAgICBnc3MtZ2V4LXNoYTEtCisrIgorKworKyMg UG9zaXRpdmUgdGVzdHM6IGVhY2ggR1NTIGtleCBhbGdvcml0aG0gY29ubmVjdHMgc3VjY2Vzc2Z1 bGx5CisrZm9yIGtleF9mYW1pbHkgaW4gJGdzc19rZXhfZmFtaWxpZXM7IGRvCisrICAgIHZlcmJv c2UgImdzcyBrZXggJGtleF9mYW1pbHkiCisrICAgIHRlc3RfZ3NzX2tleCAiJGtleF9mYW1pbHki IHRydWUgMCBcCisrICAgICAgICB8fCBmYWlsICJnc3Mga2V4ICRrZXhfZmFtaWx5IGZhaWxlZCIK Kytkb25lCisrCisrIyBOZWdhdGl2ZSB0ZXN0OiBjb25uZWN0aW9uIG11c3QgZmFpbCB3aGVuIGtl eXRhYiBpcyBtaXNzaW5nCisrdmVyYm9zZSAiZ3NzIGtleCBuZWdhdGl2ZSB0ZXN0OiBubyBrZXl0 YWIiCisrdGVzdF9nc3Nfa2V4ICJnc3MtZ3JvdXAxNC1zaGEyNTYtIiBmYWxzZSAyNTUgXAorKyAg ICB8fCBmYWlsICJnc3Mga2V4IHN1Y2NlZWRlZCB3aXRob3V0IGtleXRhYiIKKysKKyt1bnNldCBL UkI1Q0NOQU1FCisrdW5zZXQgS1JCNV9DT05GSUcKKyt1bnNldCBLUkI1X0tEQ19QUk9GSUxFCisr dW5zZXQgS1JCNV9LVE5BTUUKKyt1bnNldCBLUkI1UkNBQ0hFVFlQRQorK3JtIC1yZiAiJGdzc2Rp ciIKKy0tIAorMi41NS4wCisKCmRpZmYgLS1naXQgYS8wMDUzLW9wZW5zc2gtMTAuMnAxLXBrY3Mx MS11cmkucGF0Y2ggYi8wMDUzLW9wZW5zc2gtMTAuMnAxLXBrY3MxMS11cmkucGF0Y2gKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYWVhZjMuLjAwMDAwMDAKLS0tIGEvMDA1My1vcGVu c3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzQxMCArMCww IEBACi1Gcm9tIDUwYTRhNGFkZGUwZmY5NjVhZmUzNGRiYzA1OTk5NmQ4NmQ0ZmNmYzYgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFp bC5jb20+Ci1EYXRlOiBNb24sIDE1IERlYyAyMDI1IDE0OjI0OjA3ICswMTAwCi1TdWJqZWN0OiBb UEFUQ0ggNTMvNTRdIG9wZW5zc2gtMTAuMnAxLXBrY3MxMS11cmkKLQotLS0tCi0gTWFrZWZpbGUu aW4gICAgICAgICAgICAgICAgICAgICAgfCAgMjYgKy0KLSBjb25maWd1cmUuYWMgICAgICAgICAg ICAgICAgICAgICB8ICAzNyArKwotIHJlZ3Jlc3MvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwg ICA1ICstCi0gcmVncmVzcy9wa2NzMTEtdXJpLnNoICAgICAgICAgICAgfCA0MTAgKysrKysrKysr KysrKysrKwotIHJlZ3Jlc3MvdW5pdHRlc3RzL01ha2VmaWxlICAgICAgIHwgICAyICstCi0gcmVn cmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMgfCAzNTMgKysrKysrKysrKysrKysKLSBzc2gt YWRkLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA0OCArLQotIHNzaC1hZ2VudC5jICAgICAg ICAgICAgICAgICAgICAgIHwgMTE3ICsrKystCi0gc3NoLWtleWdlbi5jICAgICAgICAgICAgICAg ICAgICAgfCAgIDcgKy0KLSBzc2gtcGtjczExLWNsaWVudC5jICAgICAgICAgICAgICB8ICAxOSAr Ci0gc3NoLXBrY3MxMS11cmkuYyAgICAgICAgICAgICAgICAgfCA0MzggKysrKysrKysrKysrKysr KysrCi0gc3NoLXBrY3MxMS11cmkuaCAgICAgICAgICAgICAgICAgfCAgNDYgKysKLSBzc2gtcGtj czExLmMgICAgICAgICAgICAgICAgICAgICB8IDc3MSArKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tCi0gc3NoLXBrY3MxMS5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwotIHNzaC5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTA0ICsrKystCi0gc3NoX2NvbmZpZy41ICAg ICAgICAgICAgICAgICAgICAgfCAgMTUgKwotIHNzaGtleS5jICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICA0ICsKLSAxNyBmaWxlcyBjaGFuZ2VkLCAyMTMzIGluc2VydGlvbnMoKyksIDI3MyBk ZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgcmVncmVzcy9wa2NzMTEtdXJpLnNoCi0g Y3JlYXRlIG1vZGUgMTAwNjQ0IHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0cy5jCi0gY3Jl YXRlIG1vZGUgMTAwNjQ0IHNzaC1wa2NzMTEtdXJpLmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgc3No LXBrY3MxMS11cmkuaAotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgot aW5kZXggZjgwYzk1ODQ2Li5jM2M4ZGE4NjMgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5pbgotKysr IGIvTWFrZWZpbGUuaW4KLUBAIC0xMTIsMTIgKzExMiwxMiBAQCBMSUJTU0hfT0JKUz0ke0xJQk9Q RU5TU0hfT0JKU30gXAotIAlzZnRwLXJlYWxwYXRoLm8gcGxhdGZvcm0tcGxlZGdlLm8gcGxhdGZv cm0tdHJhY2luZy5vIHBsYXRmb3JtLW1pc2MubyBcCi0gCXNzaGJ1Zi1pby5vIG1pc2MtYWdlbnQu byBzc2hlcnItbGliY3J5cHRvLm8gYXVkaXRzdHViLm8KLSAKLS1QMTFPQkpTPSBzc2gtcGtjczEx LWNsaWVudC5vCi0rUDExT0JKUz0gc3NoLXBrY3MxMS1jbGllbnQubyBzc2gtcGtjczExLXVyaS5v Ci0gCi0gU0tPQkpTPQlzc2gtc2stY2xpZW50Lm8KLSAKLSBTU0hPQkpTPSBzc2gubyByZWFkY29u Zi5vIGNsaWVudGxvb3AubyBzc2h0dHkubyBcCi0tCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5v IG11eC5vIHNzaC1wa2NzMTEubyAkKFNLT0JKUykKLSsJc3NoY29ubmVjdC5vIHNzaGNvbm5lY3Qy Lm8gbXV4Lm8gc3NoLXBrY3MxMS5vIHNzaC1wa2NzMTEtdXJpLm8gJChTS09CSlMpCi0gCi0gU1NI RE9CSlM9c3NoZC5vIFwKLSAJcGxhdGZvcm0tbGlzdGVuLm8gXAotQEAgLTE2MSwxMSArMTYxLDEx IEBAIFNTSEFERF9PQkpTPQlzc2gtYWRkLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKLSAKLSBTU0hB R0VOVF9PQkpTPQlzc2gtYWdlbnQubyAkKFAxMU9CSlMpICQoU0tPQkpTKQotIAotLVNTSEtFWUdF Tl9PQkpTPQlzc2gta2V5Z2VuLm8gc3Noc2lnLm8gc3NoLXBrY3MxMS5vICQoU0tPQkpTKQotK1NT SEtFWUdFTl9PQkpTPQlzc2gta2V5Z2VuLm8gc3Noc2lnLm8gc3NoLXBrY3MxMS5vIHNzaC1wa2Nz MTEtdXJpLm8gJChTS09CSlMpCi0gCi0gU1NIS0VZU0lHTl9PQkpTPXNzaC1rZXlzaWduLm8gcmVh ZGNvbmYubyB1aWRzd2FwLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKLSAKLS1QMTFIRUxQRVJfT0JK Uz0Jc3NoLXBrY3MxMS1oZWxwZXIubyBzc2gtcGtjczExLm8gJChTS09CSlMpCi0rUDExSEVMUEVS X09CSlM9CXNzaC1wa2NzMTEtaGVscGVyLm8gc3NoLXBrY3MxMS5vIHNzaC1wa2NzMTEtdXJpLm8g JChTS09CSlMpCi0gCi0gU0tIRUxQRVJfT0JKUz0Jc3NoLXNrLWhlbHBlci5vIHNzaC1zay5vIHNr LXVzYmhpZC5vIHNzaGVyci1ub2xpYmNyeXB0by5vCi0gCi1AQCAtMzMxLDYgKzMzMSw4IEBAIGNs ZWFuOglyZWdyZXNzY2xlYW4KLSAJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvc3Noc2lnL3Rlc3Rf c3Noc2lnJChFWEVFWFQpCi0gCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3V0ZjgvKi5vCi0gCXJt IC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3V0ZjgvdGVzdF91dGY4JChFWEVFWFQpCi0rCXJtIC1mIHJl Z3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS8qLm8KLSsJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvcGtj czExL3Rlc3RfcGtjczExJChFWEVFWFQpCi0gCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8q Lm8KLSAJcm0gLWYgcmVncmVzcy9taXNjL3NrLWR1bW15LyoubG8KLSAJcm0gLWYgcmVncmVzcy9t aXNjL3NzaC12ZXJpZnktYXR0ZXN0YXRpb24vc3NoLXZlcmlmeS1hdHRlc3RhdGlvbiQoRVhFRVhU KQotQEAgLTM3MCw2ICszNzIsOCBAQCBkaXN0Y2xlYW46CXJlZ3Jlc3NjbGVhbgotIAlybSAtZiBy ZWdyZXNzL3VuaXR0ZXN0cy9zc2hzaWcvdGVzdF9zc2hzaWcKLSAJcm0gLWYgcmVncmVzcy91bml0 dGVzdHMvdXRmOC8qLm8KLSAJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvdXRmOC90ZXN0X3V0ZjgK LSsJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvcGtjczExLyoubwotKwlybSAtZiByZWdyZXNzL3Vu aXR0ZXN0cy9wa2NzMTEvdGVzdF9wa2NzMTEKLSAJcm0gLWYgcmVncmVzcy9taXNjL3NrLWR1bW15 LyoubwotIAlybSAtZiByZWdyZXNzL21pc2Mvc2stZHVtbXkvKi5sbwotIAlybSAtZiByZWdyZXNz L21pc2Mvc2stZHVtbXkvc2stZHVtbXkuc28KLUBAIC01NTAsNiArNTU0LDcgQEAgcmVncmVzcy1w cmVwOgotIAkkKE1LRElSX1ApIGBwd2RgL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleQotIAkkKE1L RElSX1ApIGBwd2RgL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaHNpZwotIAkkKE1LRElSX1ApIGBwd2Rg L3JlZ3Jlc3MvdW5pdHRlc3RzL3V0ZjgKLSsJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0 ZXN0cy9wa2NzMTEKLSAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL21pc2Mvc2stZHVtbXkKLSAJ JChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL21pc2Mvc3NoLXZlcmlmeS1hdHRlc3RhdGlvbgotIAlb IC1mIGBwd2RgL3JlZ3Jlc3MvTWFrZWZpbGUgXSB8fCBcCi1AQCAtNzI1LDYgKzczMCwxNiBAQCBy ZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKTogXAotIAkgICAgcmVncmVz cy91bml0dGVzdHMvdGVzdF9oZWxwZXIvbGlidGVzdF9oZWxwZXIuYSBcCi0gCSAgICAtbHNzaCAt bG9wZW5ic2QtY29tcGF0IC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChURVNUTElCUykKLSAKLStV TklUVEVTVFNfVEVTVF9QS0NTMTFfT0JKUz1cCi0rCXJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90 ZXN0cy5vCi0rCi0rcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RfcGtjczExJChFWEVFWFQp OiBcCi0rICAgICR7VU5JVFRFU1RTX1RFU1RfUEtDUzExX09CSlN9IHNzaC1wa2NzMTEtdXJpLm8g XAotKyAgICByZWdyZXNzL3VuaXR0ZXN0cy90ZXN0X2hlbHBlci9saWJ0ZXN0X2hlbHBlci5hIGxp YnNzaC5hCi0rCSQoTEQpIC1vICRAICQoTERGTEFHUykgJChVTklUVEVTVFNfVEVTVF9QS0NTMTFf T0JKUykgXAotKwkgICAgcmVncmVzcy91bml0dGVzdHMvdGVzdF9oZWxwZXIvbGlidGVzdF9oZWxw ZXIuYSBcCi0rCSAgICBzc2gtcGtjczExLXVyaS5vIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgLWxj cnlwdG8gJChMSUJTKSAtbG0KLSsKLSAjIFRoZXNlIGFsbCBuZWVkIHRvIGJlIGNvbXBpbGVkIC1m UElDLCBzbyB0aGV5IGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5LgotIFNLX0RVTU1ZX09CSlM9XAot IAlyZWdyZXNzL21pc2Mvc2stZHVtbXkvc2stZHVtbXkubG8gXAotQEAgLTc3MCw3ICs3ODUsOCBA QCByZWdyZXNzLXVuaXQtYmluYXJpZXM6IHJlZ3Jlc3MtcHJlcCAkKFJFR1JFU1NMSUJTKSBcCi0g CXJlZ3Jlc3MvdW5pdHRlc3RzL3NzaGJ1Zi90ZXN0X3NzaGJ1ZiQoRVhFRVhUKSBcCi0gCXJlZ3Jl c3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X3NzaGtleSQoRVhFRVhUKSBcCi0gCXJlZ3Jlc3MvdW5p dHRlc3RzL3NzaHNpZy90ZXN0X3NzaHNpZyQoRVhFRVhUKSBcCi0tCXJlZ3Jlc3MvdW5pdHRlc3Rz L3V0ZjgvdGVzdF91dGY4JChFWEVFWFQpCi0rCXJlZ3Jlc3MvdW5pdHRlc3RzL3V0ZjgvdGVzdF91 dGY4JChFWEVFWFQpIFwKLSsJcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RfcGtjczExJChF WEVFWFQpIFwKLSAKLSB0ZXN0czoJZmlsZS10ZXN0cyB0LWV4ZWMgaW50ZXJvcC10ZXN0cyBleHRy YS10ZXN0cyB1bml0Ci0gCWVjaG8gYWxsIHRlc3RzIHBhc3NlZAotZGlmZiAtLWdpdCBhL2NvbmZp Z3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggNjJiMmJmOWU3Li5mNTgxYTk4MDEgMTAwNjQ0 Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTIzMDUsMTIgKzIz MDUsMTQgQEAgQUNfTElOS19JRkVMU0UoCi0gCVtBQ19ERUZJTkUoW0hBVkVfSVNCTEFOS10sIFsx XSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBpc2JsYW5rKDNDKS5dKQotIF0pCi0gCi0rU0NBUkRfTVNH PSJ5ZXMiCi0gZGlzYWJsZV9wa2NzMTE9Ci0gQUNfQVJHX0VOQUJMRShbcGtjczExXSwKLSAJWyAg LS1kaXNhYmxlLXBrY3MxMSAgICAgICAgZGlzYWJsZSBQS0NTIzExIHN1cHBvcnQgY29kZSBbbm9d XSwKLSAJWwotIAkJaWYgdGVzdCAieCRlbmFibGV2YWwiID0gInhubyIgOyB0aGVuCi0gCQkJZGlz YWJsZV9wa2NzMTE9MQotKwkJCVNDQVJEX01TRz0ibm8iCi0gCQlmaQotIAldCi0gKQotQEAgLTIz NDAsNiArMjM0Miw0MCBAQCBBQ19TRUFSQ0hfTElCUyhbZGxvcGVuXSwgW2RsXSkKLSBBQ19DSEVD S19GVU5DUyhbZGxvcGVuXSkKLSBBQ19DSEVDS19ERUNMKFtSVExEX05PV10sIFtdLCBbXSwgWyNp bmNsdWRlIDxkbGZjbi5oPl0pCi0gCi0rIyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgYSBwMTEta2l0 LCB3ZSBnb3QgZGVmYXVsdCBwcm92aWRlciBvbiBjb21tYW5kIGxpbmUKLStERUZBVUxUX1BLQ1Mx MV9QUk9WSURFUl9NU0c9Im5vIgotK0FDX0FSR19XSVRIKFtkZWZhdWx0LXBrY3MxMS1wcm92aWRl cl0sCi0rCVsgIC0td2l0aC1kZWZhdWx0LXBrY3MxMS1wcm92aWRlcltbPVBBVEhdXSAgIFVzZSBk ZWZhdWx0IHBrY3MxMSBwcm92aWRlciAocDExLWtpdCBkZXRlY3RlZCBieSBkZWZhdWx0KV0sCi0r CVsgaWYgdGVzdCAieCR3aXRodmFsIiAhPSAieG5vIiAmJiB0ZXN0ICJ4JGRpc2FibGVfcGtjczEx IiA9ICJ4IjsgdGhlbgotKwkJaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIiA7IHRoZW4KLSsJ CQlBQ19QQVRIX1RPT0woW1BLR0NPTkZJR10sIFtwa2ctY29uZmlnXSwgW25vXSkKLSsJCQlpZiB0 ZXN0ICJ4JFBLR0NPTkZJRyIgIT0gInhubyI7IHRoZW4KLSsJCQkJQUNfTVNHX0NIRUNLSU5HKFtp ZiAkUEtHQ09ORklHIGtub3dzIGFib3V0IHAxMS1raXRdKQotKwkJCQlpZiAiJFBLR0NPTkZJRyIg InAxMS1raXQtMSI7IHRoZW4KLSsJCQkJCUFDX01TR19SRVNVTFQoW3llc10pCi0rCQkJCQl1c2Vf cGtnY29uZmlnX2Zvcl9wMTFraXQ9eWVzCi0rCQkJCWVsc2UKLSsJCQkJCUFDX01TR19SRVNVTFQo W25vXSkKLSsJCQkJZmkKLSsJCQlmaQotKwkJZWxzZQotKwkJCVBLQ1MxMV9QQVRIPSIke3dpdGh2 YWx9IgotKwkJZmkKLSsJCWlmIHRlc3QgIngkdXNlX3BrZ2NvbmZpZ19mb3JfcDExa2l0IiA9ICJ4 eWVzIjsgdGhlbgotKwkJCVBLQ1MxMV9QQVRIPWAkUEtHQ09ORklHIC0tdmFyaWFibGU9cHJveHlf bW9kdWxlIHAxMS1raXQtMWAKLSsJCWZpCi0rCQlBQ19DSEVDS19GSUxFKCIkUEtDUzExX1BBVEgi LAotKwkJCVsgQUNfREVGSU5FX1VOUVVPVEVEKFtQS0NTMTFfREVGQVVMVF9QUk9WSURFUl0sIFsi JFBLQ1MxMV9QQVRIIl0sIFtQYXRoIHRvIGRlZmF1bHQgUEtDUyMxMSBwcm92aWRlciAocDExLWtp dCBwcm94eSldKQotKwkJCSAgREVGQVVMVF9QS0NTMTFfUFJPVklERVJfTVNHPSIkUEtDUzExX1BB VEgiCi0rCQkJXSwKLSsJCQlbIEFDX01TR19FUlJPUihbUmVxdWVzdGVkIFBLQ1MxMSBwcm92aWRl ZCBub3QgZm91bmRdKSBdCi0rCQkpCi0rCWVsc2UKLSsJCUFDX01TR19XQVJOKFtOZWVkcyBQS0NT MTEgc3VwcG9ydCB0byBlbmFibGUgZGVmYXVsdCBwa2NzMTEgcHJvdmlkZXJdKQotKwlmaSBdCi0r KQotKwotKwotICMgSVJJWCBoYXMgYSBjb25zdCBjaGFyIHJldHVybiB2YWx1ZSBmb3IgZ2FpX3N0 cmVycm9yKCkKLSBBQ19DSEVDS19GVU5DUyhbZ2FpX3N0cmVycm9yXSwgWwotIAlBQ19ERUZJTkUo W0hBVkVfR0FJX1NUUkVSUk9SXSkKLUBAIC01OTkxLDYgKzYwMjcsNyBAQCBlY2hvICIgICAgICAg ICAgICAgICAgICBCU0QgQXV0aCBzdXBwb3J0OiAkQlNEX0FVVEhfTVNHIgotIGVjaG8gIiAgICAg ICAgICAgICAgUmFuZG9tIG51bWJlciBzb3VyY2U6ICRSQU5EX01TRyIKLSBlY2hvICIgICAgICAg ICAgICAgUHJpdnNlcCBzYW5kYm94IHN0eWxlOiAkU0FOREJPWF9TVFlMRSIKLSBlY2hvICIgICAg ICAgICAgICAgICAgICAgUEtDUyMxMSBzdXBwb3J0OiAkZW5hYmxlX3BrY3MxMSIKLStlY2hvICIg ICAgICAgICAgRGVmYXVsdCBQS0NTIzExIHByb3ZpZGVyOiAkREVGQVVMVF9QS0NTMTFfUFJPVklE RVJfTVNHIgotIGVjaG8gIiAgICAgICAgICAgICAgICAgIFUyRi9GSURPIHN1cHBvcnQ6ICRlbmFi bGVfc2siCi0gCi0gZWNobyAiIgotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvTWFrZWZpbGUgYi9yZWdy ZXNzL01ha2VmaWxlCi1pbmRleCBhZTQ1YmQ0NjMuLmNiZTdhOTYxMCAxMDA2NDQKLS0tLSBhL3Jl Z3Jlc3MvTWFrZWZpbGUKLSsrKyBiL3JlZ3Jlc3MvTWFrZWZpbGUKLUBAIC0xMTgsNiArMTE4LDcg QEAgTFRFU1RTPSAJY29ubmVjdCBcCi0gCQlwZW5hbHR5LWV4cGlyZSBcCi0gCQljb25uZWN0LWJp Z2NvbmYgXAotIAkJc3NoLXBrY3MxMSBcCi0rCQlwa2NzMTEtdXJpIFwKLSAJCXNzaC10dHkgXAot IAkJcHJveHlqdW1wCi0gCi1AQCAtMTQ0LDcgKzE0NSw4IEBAIENMRUFORklMRVM9CSouY29yZSBh Y3R1YWwgYWdlbnQta2V5LiogYXV0aG9yaXplZF9rZXlzXyR7VVNFUk5BTUV9IFwKLSAJCWtub3du X2hvc3RzIGtub3duX2hvc3RzLWNlcnQga25vd25faG9zdHMuKiBrcmwtKiBscy5jb3B5IFwKLSAJ CW1vZHBpcGUgbmV0Y2F0IG5vX2lkZW50aXR5X2NvbmZpZyBcCi0gCQlwaWRmaWxlIHB1dHR5LnJz YTIgcmVhZHkgcmVncmVzcy5sb2cgcmVtb3RlX3BpZCBcCi0tCQlyZXZva2VkLSogcnNhIHJzYS1h Z2VudCByc2EtYWdlbnQucHViIHJzYS5wdWIgcnNhX3NzaDJfY3IucHJ2IFwKLSsJCXJldm9rZWQt KiByc2EgcnNhLWFnZW50IHJzYS1hZ2VudC5wdWIgcnNhLWFnZW50LWNlcnQucHViIFwKLSsJCXJz YS5wdWIgcnNhX3NzaDJfY3IucHJ2IHBrY3MxMSouY3J0IHBrY3MxMSoua2V5IHBrY3MxMS5pbmZv IFwKLSAJCXJzYV9zc2gyX2NybmwucHJ2IHNjcC1zc2gtd3JhcHBlci5leGUgXAotIAkJc2NwLXNz aC13cmFwcGVyLnNjcCBzZXR1aWQtYWxsb3dlZCBzZnRwLXNlcnZlci5sb2cgXAotIAkJc2Z0cC1z ZXJ2ZXIuc2ggc2Z0cC5sb2cgc3NoLWxvZy13cmFwcGVyLnNoIHNzaC5sb2cgXAotQEAgLTI5NCw2 ICsyOTYsNyBAQCB1bml0IHVuaXQtYmVuY2g6Ci0gCQl0ZXN0ICJ4JHtVTklUVEVTVF9WRVJCT1NF fSIgPSAieCIgfHwgQVJHUz0iJCRBUkdTIC12IjsgXAotIAkJdGVzdCAieCR7VU5JVFRFU1RfQkVO Q0hfREVUQUlMfSIgPSAieCIgfHwgQVJHUz0iJCRBUkdTIC1CIjsgXAotIAkJdGVzdCAieCR7VU5J VFRFU1RfQkVOQ0hfT05MWX0iID0gIngiIHx8IEFSR1M9IiQkQVJHUyAtTyAke1VOSVRURVNUX0JF TkNIX09OTFl9IjsgXAotKwkJICQkViAkey5PQkpESVJ9L3VuaXR0ZXN0cy9wa2NzMTEvdGVzdF9w a2NzMTEgOyBcCi0gCQkgJCRWICR7Lk9CSkRJUn0vdW5pdHRlc3RzL3NzaGJ1Zi90ZXN0X3NzaGJ1 ZiAkJHtBUkdTfTsgXAotIAkJICQkViAkey5PQkpESVJ9L3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9z c2hrZXkgXAotIAkJCS1kICR7LkNVUkRJUn0vdW5pdHRlc3RzL3NzaGtleS90ZXN0ZGF0YSAkJHtB UkdTfTsgXAotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvcGtjczExLXVyaS5zaCBiL3JlZ3Jlc3MvcGtj czExLXVyaS5zaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMC4uNzJkNjli ZGEwCi0tLS0gL2Rldi9udWxsCi0rKysgYi9yZWdyZXNzL3BrY3MxMS11cmkuc2gKLUBAIC0wLDAg KzEsNDEwIEBACi0rIwotKyMgIENvcHlyaWdodCAoYykgMjAxNyBSZWQgSGF0Ci0rIwotKyMgIEF1 dGhvcnM6IEpha3ViIEplbGVuIDxqamVsZW5AcmVkaGF0LmNvbT4KLSsjCi0rIyAgUGVybWlzc2lv biB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3Ig YW55Ci0rIyAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBw cm92aWRlZCB0aGF0IHRoZSBhYm92ZQotKyMgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0rIwotKyMgIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFO VElFUwotKyMgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBM SUVEIFdBUlJBTlRJRVMgT0YKLSsjICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotKyMgIEFOWSBTUEVDSUFMLCBE SVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMK LSsjICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJ VFMsIFdIRVRIRVIgSU4gQU4KLSsjICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Ig T1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotKyMgIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0rCi0rdGlk PSJwa2NzMTEgdGVzdHMgd2l0aCBzb2Z0IHRva2VuIgotKwotK3RyeV90b2tlbl9saWJzKCkgewot Kwlmb3IgX2xpYiBpbiAiJEAiIDsgZG8KLSsJCWlmIHRlc3QgLWYgIiRfbGliIiA7IHRoZW4KLSsJ CQl2ZXJib3NlICJVc2luZyB0b2tlbiBsaWJyYXJ5ICRfbGliIgotKwkJCVRFU1RfU1NIX1BLQ1Mx MT0iJF9saWIiCi0rCQkJcmV0dXJuCi0rCQlmaQotKwlkb25lCi0rCWVjaG8gInNraXBwZWQ6IFVu YWJsZSB0byBmaW5kIFBLQ1MjMTEgdG9rZW4gbGlicmFyeSIKLSsJZXhpdCAwCi0rfQotKwotK3Ry eV90b2tlbl9saWJzIFwKLSsJL3Vzci9sb2NhbC9saWIvc29mdGhzbS9saWJzb2Z0aHNtMi5zbyBc Ci0rCS91c3IvbGliNjQvcGtjczExL2xpYnNvZnRoc20yLnNvIFwKLSsJL3Vzci9saWIveDg2XzY0 LWxpbnV4LWdudS9zb2Z0aHNtL2xpYnNvZnRoc20yLnNvCi0rCi0rVEVTVF9TU0hfUElOPTEyMzQK LStURVNUX1NTSF9TT1BJTj0xMjM0NTY3OAotK2lmIFsgIngkVEVTVF9TU0hfU1NIUEtDUzExSEVM UEVSIiAhPSAieCIgXTsgdGhlbgotKwlTU0hfUEtDUzExX0hFTFBFUj0iJHtURVNUX1NTSF9TU0hQ S0NTMTFIRUxQRVJ9IgotKwlleHBvcnQgU1NIX1BLQ1MxMV9IRUxQRVIKLStmaQotKwotK3Rlc3Qg LWYgIiRURVNUX1NTSF9QS0NTMTEiIHx8IGZhdGFsICIkVEVTVF9TU0hfUEtDUzExIGRvZXMgbm90 IGV4aXN0IgotKwotKyMgc2V0dXAgZW52aXJvbm1lbnQgZm9yIHNvZnRoc20gdG9rZW4KLStESVI9 JE9CSi9TT0ZUSFNNCi0rcm0gLXJmICRESVIKLStUT0tFTj0kRElSL3Rva2VuZGlyCi0rbWtkaXIg LXAgJFRPS0VOCi0rU09GVEhTTTJfQ09ORj0kRElSL3NvZnRoc20yLmNvbmYKLStleHBvcnQgU09G VEhTTTJfQ09ORgotK2NhdCA+ICRTT0ZUSFNNMl9DT05GIDw8IEVPRgotKyMgU29mdEhTTSB2MiBj b25maWd1cmF0aW9uIGZpbGUKLStkaXJlY3Rvcmllcy50b2tlbmRpciA9ICR7VE9LRU59Ci0rb2Jq ZWN0c3RvcmUuYmFja2VuZCA9IGZpbGUKLSsjIEVSUk9SLCBXQVJOSU5HLCBJTkZPLCBERUJVRwot K2xvZy5sZXZlbCA9IERFQlVHCi0rIyBJZiBDS0ZfUkVNT1ZBQkxFX0RFVklDRSBmbGFnIHNob3Vs ZCBiZSBzZXQKLStzbG90cy5yZW1vdmFibGUgPSBmYWxzZQotK0VPRgotK291dD0kKHNvZnRoc20y LXV0aWwgLS1pbml0LXRva2VuIC0tZnJlZSAtLWxhYmVsIHRva2VuLXNsb3QtMCAtLXBpbiAiJFRF U1RfU1NIX1BJTiIgLS1zby1waW4gIiRURVNUX1NTSF9TT1BJTiIpCi0rc2xvdD0kKGVjaG8gLS0g JG91dCB8IHNlZCAncy8uKiAvLycpCi0rCi0rIyBwcmV2ZW50IHNzaC1hZ2VudCBmcm9tIGNhbGxp bmcgc3NoLWFza3Bhc3MKLStTU0hfQVNLUEFTUz0vdXNyL2Jpbi90cnVlCi0rZXhwb3J0IFNTSF9B U0tQQVNTCi0rdW5zZXQgRElTUExBWQotKyMgV2UgbmVlZCBpbnRlcmFjdGl2ZSBhY2Nlc3MgdG8g dGVzdCBQS0NTIyBzaW5jZSBpdCBwcm9tcHRzIGZvciBQSU4KLSsjIEJhY2t1cCBzc2hfcHJveHkg YmVmb3JlIG1vZGlmaWNhdGlvbnMKLStjcCAkT0JKL3NzaF9wcm94eSAkT0JKL3NzaF9wcm94eV9i YWsKLStzZWQgLWkgJ3MvLipCYXRjaE1vZGUuKi8vZycgJE9CSi9zc2hfcHJveHkKLSsjIFJlbW92 ZSBJZGVudGl0eUZpbGUgZW50cmllcyB0byBwcmV2ZW50IGV4Y2VlZGluZyBNYXhBdXRoVHJpZXMg d2hlbiB1c2luZwotKyMgUEtDUzExUHJvdmlkZXIgKC1JKSBvciBQS0NTMTEgVVJJcy4gVGhlIGRl ZmF1bHQgc3NoX2NvbmZpZyBpbmNsdWRlcyBtdWx0aXBsZQotKyMgaWRlbnRpdHkgZmlsZXMgdGhh dCB3b3VsZCBiZSB0cmllZCBiZWZvcmUgUEtDUzExIGtleXMsIGNhdXNpbmcgYXV0aGVudGljYXRp b24KLSsjIHRvIGZhaWwgd2l0aCAiVG9vIG1hbnkgYXV0aGVudGljYXRpb24gZmFpbHVyZXMiIGJl Zm9yZSBQS0NTMTEga2V5cyBhcmUgcmVhY2hlZC4KLStncmVwIC1pdiBJZGVudGl0eUZpbGUgJE9C Si9zc2hfcHJveHkgPiAkT0JKL3NzaF9wcm94eS50bXAKLSttdiAkT0JKL3NzaF9wcm94eS50bXAg JE9CSi9zc2hfcHJveHkKLSsKLSsjIHN0YXJ0IGNvbW1hbmQgdy9vIHR0eSwgc28gc3NoIGFjY2Vw dHMgcGluIGZyb20gc3RkaW4gKGZyb20gYWdlbnQtcGtjczExLnNoKQotK25vdHR5KCkgewotKwlw ZXJsIC1lICd1c2UgUE9TSVg7IFBPU0lYOjpzZXRzaWQoKTsKLSsJICAgIGlmIChmb3JrKSB7IHdh aXQ7IGV4aXQoJD8gPj4gOCk7IH0gZWxzZSB7IGV4ZWMoQEFSR1YpIH0nICIkQCIKLSt9Ci0rCi0r dHJhY2UgImdlbmVyYXRpbmcga2V5cyIKLStJRDE9IjAyIgotK0lEMj0iMDQiCi0rSUQzPSIwNiIK LStSU0E9JHtESVJ9L1JTQQotK0VDPSR7RElSfS9FQwotK0VEMjU1MTk9JHtESVJ9L0VEMjU1MTkK LStvcGVuc3NsIGdlbnBrZXkgLWFsZ29yaXRobSByc2EgPiAkUlNBCi0rb3BlbnNzbCBwa2NzOCAt bm9jcnlwdCAtaW4gJFJTQSB8XAotKyAgICBzb2Z0aHNtMi11dGlsIC0tc2xvdCAiJHNsb3QiIC0t bGFiZWwgIlNTSCBSU0EgS2V5ICRJRDEiIC0taWQgJElEMSBcCi0rCS0tcGluICIkVEVTVF9TU0hf UElOIiAtLWltcG9ydCAvZGV2L3N0ZGluCi0rb3BlbnNzbCBnZW5wa2V5IFwKLSsgICAgLWdlbnBh cmFtIFwKLSsgICAgLWFsZ29yaXRobSBlYyBcCi0rICAgIC1wa2V5b3B0IGVjX3BhcmFtZ2VuX2N1 cnZlOnByaW1lMjU2djEgfFwKLSsgICAgb3BlbnNzbCBnZW5wa2V5IFwKLSsgICAgLXBhcmFtZmls ZSAvZGV2L3N0ZGluID4gJEVDCi0rb3BlbnNzbCBwa2NzOCAtbm9jcnlwdCAtaW4gJEVDIHxcCi0r ICAgIHNvZnRoc20yLXV0aWwgLS1zbG90ICIkc2xvdCIgLS1sYWJlbCAiU1NIIEVDRFNBIEtleSAk SUQyIiAtLWlkICRJRDIgXAotKwktLXBpbiAiJFRFU1RfU1NIX1BJTiIgLS1pbXBvcnQgL2Rldi9z dGRpbgotK29wZW5zc2wgZ2VucGtleSAtYWxnb3JpdGhtIGVkMjU1MTkgPiAkRUQyNTUxOQotK29w ZW5zc2wgcGtjczggLW5vY3J5cHQgLWluICRFRDI1NTE5IHxcCi0rICAgIHNvZnRoc20yLXV0aWwg LS1zbG90ICIkc2xvdCIgLS1sYWJlbCAiU1NIIEVEMjU1MTkgS2V5ICRJRDMiIC0taWQgJElEMyBc Ci0rCS0tcGluICIkVEVTVF9TU0hfUElOIiAtLWltcG9ydCAvZGV2L3N0ZGluCi0rCi0rdHJhY2Ug Ikxpc3QgdGhlIGtleXMgaW4gdGhlIHNzaC1rZXlnZW4gd2l0aCBQS0NTIzExIFVSSXMiCi0rJHtT U0hLRVlHRU59IC1EICR7VEVTVF9TU0hfUEtDUzExfSA+ICRPQkovdG9rZW5fa2V5cwotK2lmIFsg JD8gLW5lIDAgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBrZXlnZW4gZmFpbHMgdG8gZW51bWVyYXRl IGtleXMgb24gUEtDUyMxMSB0b2tlbiIKLStmaQotK2dyZXAgInBrY3MxMToiICRPQkovdG9rZW5f a2V5cyA+IC9kZXYvbnVsbAotK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBU aGUga2V5cyBmcm9tIHNzaC1rZXlnZW4gZG8gbm90IGNvbnRhaW4gUEtDUyMxMSBVUkkgYXMgYSBj b21tZW50IgotK2ZpCi0rCi0rIyBTZXQgdGhlIEVDRFNBIGtleSB0byBhdXRob3JpemVkIGtleXMK LStncmVwICJFQ0RTQSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVT RVIKLSsKLSt0cmFjZSAiU2ltcGxlIGNvbm5lY3Qgd2l0aCBzc2ggKHdpdGhvdXQgUEtDUyMxMSBV UkkpIgotK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1JICR7VEVTVF9TU0hf UEtDUzExfSBcCi0rICAgIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4aXQgNQotK3I9JD8K LStpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBw a2NzMTEgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rdHJhY2UgIkNvbm5lY3Qgd2l0 aCBQS0NTIzExIFVSSSIKLSt0cmFjZSAiICAoRUNEU0Ega2V5IHNob3VsZCBzdWNjZWVkKSIKLStl Y2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCi0r ICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQyfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0i IHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJZmFpbCAi RkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBmYWlsZWQgKGV4aXQgY29kZSAkciki Ci0rZmkKLSsKLSt0cmFjZSAiICAoUlNBIGtleSBzaG91bGQgZmFpbCkiCi0rZWNobyAke1RFU1Rf U1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAgLWkgInBr Y3MxMTppZD0lJHtJRDF9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3Qg ZXhpdCA1Ci0rcj0kPwotK2lmIFsgJHIgLWVxIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBzc2gg Y29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgotK2ZpCi0r Ci0rIyBTZXQgdGhlIEVEMjU1MTkga2V5IGFzIGF1dGhvcml6ZWQKLStncmVwICJFRDI1NTE5IiAk T0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgotKwotK3RyYWNlICIg IChFRDI1NTE5IGtleSBzaG91bGQgc3VjY2VlZCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBu b3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAgLWkgInBrY3MxMTppZD0lJHtJ RDN9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3QgZXhpdCA1Ci0rcj0k PwotK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRo IFBLQ1MjMTEgVVJJIChFZDI1NTE5KSBmYWlsZWQgKGV4aXQgY29kZSAkcikiCi0rZmkKLSsKLSsj IFNldCB0aGUgRUNEU0Ega2V5IGJhY2sgYXMgYXV0aG9yaXplZAotK2dyZXAgIkVDRFNBIiAkT0JK L3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgotKwotK3RyYWNlICJDb25u ZWN0IHdpdGggUEtDUyMxMSBVUkkgaW5jbHVkaW5nIFBJTiBzaG91bGQgbm90IHByb21wdCIKLSt0 cmFjZSAiICAoRUNEU0Ega2V5IHNob3VsZCBzdWNjZWVkKSIKLSske1NTSH0gLUYgJE9CSi9zc2hf cHJveHkgLWkgXAotKyAgICAicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NT SF9QS0NTMTF9JnBpbi12YWx1ZT0ke1RFU1RfU1NIX1BJTn0iIHNvbWVob3N0IGV4aXQgNQotK3I9 JD8KLStpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0 aCBQS0NTIzExIFVSSSBmYWlsZWQgKGV4aXQgY29kZSAkcikiCi0rZmkKLSsKLSt0cmFjZSAiICAo UlNBIGtleSBzaG91bGQgZmFpbCkiCi0rJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1pIFwKLSsg ICAgInBrY3MxMTppZD0lJHtJRDF9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSZwaW4t dmFsdWU9JHtURVNUX1NTSF9QSU59IiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAt ZXEgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkg c3VjY2VlZGVkIChzaG91bGQgZmFpbCkiCi0rZmkKLSsKLSsjIFNldCB0aGUgRUQyNTUxOSBrZXkg YXMgYXV0aG9yaXplZAotK2dyZXAgIkVEMjU1MTkiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0 aG9yaXplZF9rZXlzXyRVU0VSCi0rCi0rdHJhY2UgIiAgKEVEMjU1MTkga2V5IHNob3VsZCBzdWNj ZWVkKSIKLSske1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgLWkgXAotKyAgICAicGtjczExOmlkPSUk e0lEM30/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9JnBpbi12YWx1ZT0ke1RFU1RfU1NI X1BJTn0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJ ZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSAoRWQyNTUxOSkgZmFpbGVk IChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rIyBTZXQgdGhlIEVDRFNBIGtleSBiYWNrIGFzIGF1 dGhvcml6ZWQKLStncmVwICJFQ0RTQSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVk X2tleXNfJFVTRVIKLSsKLSt0cmFjZSAiQ29ubmVjdCB3aXRoIHZhcmlvdXMgZmlsdGVyaW5nIG9w dGlvbnMgaW4gUEtDUyMxMSBVUkkiCi0rdHJhY2UgIiAgKGJ5IG9iamVjdCBsYWJlbCwgRUNEU0Eg c2hvdWxkIHN1Y2NlZWQpIgotK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1G ICRPQkovc3NoX3Byb3h5IFwKLSsgICAgLWkgInBrY3MxMTpvYmplY3Q9U1NIJTIwRUNEU0ElMjBL ZXklMjAwND9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQot K3I9JD8KLStpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qg d2l0aCBQS0NTIzExIFVSSSBmYWlsZWQgKGV4aXQgY29kZSAkcikiCi0rZmkKLSsKLSt0cmFjZSAi ICAoYnkgb2JqZWN0IGxhYmVsLCBSU0Ega2V5IHNob3VsZCBmYWlsKSIKLStlY2hvICR7VEVTVF9T U0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCi0rICAgICAtaSAicGtj czExOm9iamVjdD1TU0glMjBSU0ElMjBLZXklMjAwMj9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BL Q1MxMX0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRyIC1lcSA1IF07IHRoZW4KLSsJ ZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBzdWNjZWVkZWQgKHNob3Vs ZCBmYWlsKSIKLStmaQotKwotKyMgU2V0IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3JpemVkCi0r Z3JlcCAiRUQyNTUxOSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVT RVIKLSsKLSt0cmFjZSAiICAoYnkgb2JqZWN0IGxhYmVsLCBFRDI1NTE5IGtleSBzaG91bGQgc3Vj Y2VlZCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hf cHJveHkgXAotKyAgICAgLWkgInBrY3MxMTpvYmplY3Q9U1NIJTIwRUQyNTUxOSUyMEtleSUyMDA2 P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3QgZXhpdCA1Ci0rcj0kPwot K2lmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBL Q1MjMTEgVVJJIChFZDI1NTE5KSBmYWlsZWQgKGV4aXQgY29kZSAkcikiCi0rZmkKLSsKLSsjIFNl dCB0aGUgRUNEU0Ega2V5IGJhY2sgYXMgYXV0aG9yaXplZAotK2dyZXAgIkVDRFNBIiAkT0JKL3Rv a2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgotKwotK3RyYWNlICIgIChieSB0 b2tlbiBsYWJlbCwgRUNEU0Ega2V5IHNob3VsZCBzdWNjZWVkKSIKLStlY2hvICR7VEVTVF9TU0hf UElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCi0rICAgIC1pICJwa2NzMTE6 aWQ9JSR7SUQyfTt0b2tlbj10b2tlbi1zbG90LTA/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NT MTF9IiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZh aWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUg JHIpIgotK2ZpCi0rCi0rIyBTZXQgdGhlIEVEMjU1MTkga2V5IGFzIGF1dGhvcml6ZWQKLStncmVw ICJFRDI1NTE5IiAkT0JKL3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgot KwotK3RyYWNlICIgIChieSB0b2tlbiBsYWJlbCwgRUQyNTUxOSBrZXkgc2hvdWxkIHN1Y2NlZWQp IgotK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5 IFwKLSsgICAgLWkgInBrY3MxMTppZD0lJHtJRDN9O3Rva2VuPXRva2VuLXNsb3QtMD9tb2R1bGUt cGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRy IC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVS SSAoRWQyNTUxOSkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rIyBTZXQgdGhlIEVD RFNBIGtleSBiYWNrIGFzIGF1dGhvcml6ZWQKLStncmVwICJFQ0RTQSIgJE9CSi90b2tlbl9rZXlz ID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKLSsKLSt0cmFjZSAiICAoYnkgd3JvbmcgdG9r ZW4gbGFiZWwsIHNob3VsZCBmYWlsKSIKLStlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7 U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCi0rICAgICAtaSAicGtjczExOnRva2VuPXRva2VuLXNs b3QtOTk/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKLSty PSQ/Ci0raWYgWyAkciAtZXEgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdp dGggUEtDUyMxMSBVUkkgc3VjY2VlZGVkIChzaG91bGQgZmFpbCkiCi0rZmkKLSsKLSsKLSsKLSsK LSt0cmFjZSAiVGVzdCBQS0NTIzExIFVSSSBzcGVjaWZpY2F0aW9uIGluIGNvbmZpZ3VyYXRpb24g ZmlsZXMiCi0rZWNobyAiSWRlbnRpdHlGaWxlIFwicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBh dGg9JHtURVNUX1NTSF9QS0NTMTF9XCIiIFwKLSsgICAgPj4gJE9CSi9zc2hfcHJveHkKLSt0cmFj ZSAiICAoRUNEU0Ega2V5IHNob3VsZCBzdWNjZWVkKSIKLStlY2hvICR7VEVTVF9TU0hfUElOfSB8 IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0r aWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtD UyMxMSBVUkkgaW4gY29uZmlnIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKLStmaQotKwotKyMgU2V0 IHRoZSBSU0Ega2V5IGFzIGF1dGhvcml6ZWQKLStncmVwICJSU0EiICRPQkovdG9rZW5fa2V5cyA+ ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCi0rCi0rdHJhY2UgIiAgKFJTQSBrZXkgc2hvdWxk IGZhaWwpIgotK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3No X3Byb3h5IHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRyIC1lcSA1IF07IHRoZW4KLSsJ ZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBpbiBjb25maWcgc3VjY2Vl ZGVkIChzaG91bGQgZmFpbCkiCi0rZmkKLStzZWQgLWkgLWUgIi9JZGVudGl0eUZpbGUvZCIgJE9C Si9zc2hfcHJveHkKLSsKLSt0cmFjZSAiQ29tYmluYXRpb24gb2YgUEtDUzExUHJvdmlkZXIgYW5k IFBLQ1MxMVVSSSBvbiBjb21tYW5kbGluZSIKLSt0cmFjZSAiICAoUlNBIGtleSBzaG91bGQgc3Vj Y2VlZCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hf cHJveHkgXAotKyAgICAtaSAicGtjczExOmlkPSUke0lEMX0iIC1JICR7VEVTVF9TU0hfUEtDUzEx fSBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwg IkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgYW5kIHByb3ZpZGVyIGNvbWJpbmF0 aW9uIiBcCi0rCSAgICAiZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rdHJhY2UgIlJl Z3Jlc3M6IE1pc3NpbmcgcHJvdmlkZXIgaW4gUEtDUzExVVJJIG9wdGlvbiIKLSske1NTSH0gLUYg JE9CSi9zc2hfcHJveHkgXAotKyAgICAtbyBJZGVudGl0eUZpbGU9XCJwa2NzMTE6dG9rZW49c2Vn ZmF1bHRcIiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtZXEgMTM5IF07IHRoZW4K LSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBtaXNzaW5nIHByb3ZpZGVyX2lkIGZyb20g Y29uZmlndXJhdGlvbiBvcHRpb24iIFwKLSsJICAgICJjcmFzaGVkIChleGl0IGNvZGUgJHIpIgot K2ZpCi0rCi0rCi0rdHJhY2UgIlNTSCBBZ2VudCBjYW4gd29yayB3aXRoIFBLQ1MjMTEgVVJJIgot K3RyYWNlICJzdGFydCB0aGUgYWdlbnQiCi0rZXZhbCBgJHtTU0hBR0VOVH0gLXNgID4gIC9kZXYv bnVsbAotKwotK3I9JD8KLStpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJZmFpbCAiY291bGQgbm90 IHN0YXJ0IHNzaC1hZ2VudDogZXhpdCBjb2RlICRyIgotK2Vsc2UKLSsJdHJhY2UgImFkZCB3aG9s ZSBwcm92aWRlciB0byBhZ2VudCIKLSsJZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NT SEFERH0gXAotKwkgICAgInBrY3MxMTo/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiAj PiAvZGV2L251bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgotKwkJZmFp bCAiRkFJTDogc3NoLWFkZCBmYWlsZWQgd2l0aCB3aG9sZSBwcm92aWRlcjogZXhpdCBjb2RlICRy IgotKwlmaQotKwotKwl0cmFjZSAiIHBrY3MxMSBsaXN0IHZpYSBhZ2VudCAoYWxsIGtleXMpIgot Kwkke1NTSEFERH0gLWwgPiAvZGV2L251bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDAg XTsgdGhlbgotKwkJZmFpbCAiRkFJTDogc3NoLWFkZCAtbCBmYWlsZWQgd2l0aCB3aG9sZSBwcm92 aWRlcjogZXhpdCBjb2RlICRyIgotKwlmaQotKwotKwl0cmFjZSAiIHBrY3MxMSBjb25uZWN0IHZp YSBhZ2VudCAoYWxsIGtleXMpIgotKwkke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3Qg ZXhpdCA1Ci0rCXI9JD8KLSsJaWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCQlmYWlsICJGQUlMOiBz c2ggY29ubmVjdCBmYWlsZWQgd2l0aCB3aG9sZSBwcm92aWRlciAoZXhpdCBjb2RlICRyKSIKLSsJ ZmkKLSsKLSsJdHJhY2UgIiByZW1vdmUgcGtjczExIGtleXMgKGFsbCBrZXlzKSIKLSsJJHtTU0hB RER9IC1kICJwa2NzMTE6P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgPiAvZGV2L251 bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgotKwkJZmFpbCAiRkFJTDog c3NoLWFkZCAtZCBmYWlsZWQgd2l0aCB3aG9sZSBwcm92aWRlcjogZXhpdCBjb2RlICRyIgotKwlm aQotKwotKwl0cmFjZSAiYWRkIG9ubHkgUlNBIGtleSB0byB0aGUgYWdlbnQiCi0rCWVjaG8gJHtU RVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0hBRER9IFwKLSsJICAgICJwa2NzMTE6aWQ9JSR7SUQx fT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iID4gL2Rldi9udWxsIDI+JjEKLSsJcj0k PwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUwgc3NoLWFkZCBmYWlsZWQg d2l0aCBSU0Ega2V5OiBleGl0IGNvZGUgJHIiCi0rCWZpCi0rCi0rCXRyYWNlICIgcGtjczExIGNv bm5lY3QgdmlhIGFnZW50IChSU0Ega2V5KSIKLSsJJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IHNv bWVob3N0IGV4aXQgNQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwkJZmFpbCAi RkFJTDogc3NoIGNvbm5lY3QgZmFpbGVkIHdpdGggUlNBIGtleSAoZXhpdCBjb2RlICRyKSIKLSsJ ZmkKLSsKLSsJdHJhY2UgIiByZW1vdmUgUlNBIHBrY3MxMSBrZXkiCi0rCSR7U1NIQUREfSAtZCAi cGtjczExOmlkPSUke0lEMX0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBcCi0rCSAg ICA+IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8KLSsJaWYgWyAkciAtbmUgMCBdOyB0aGVuCi0rCQlm YWlsICJGQUlMOiBzc2gtYWRkIC1kIGZhaWxlZCB3aXRoIFJTQSBrZXk6IGV4aXQgY29kZSAkciIK LSsJZmkKLSsKLSsJdHJhY2UgImFkZCBvbmx5IEVDRFNBIGtleSB0byB0aGUgYWdlbnQiCi0rCWVj aG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0hBRER9IFwKLSsJICAgICJwa2NzMTE6aWQ9 JSR7SUQyfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iID4gL2Rldi9udWxsIDI+JjEK LSsJcj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUw6IHNzaC1hZGQg ZmFpbGVkIHdpdGggc2Vjb25kIGtleTogZXhpdCBjb2RlICRyIgotKwlmaQotKwotKwl0cmFjZSAi IHBrY3MxMSBjb25uZWN0IHZpYSBhZ2VudCAoRUNEU0Ega2V5IHNob3VsZCBmYWlsKSIKLSsJJHtT U0h9IC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4aXQgNQotKwlyPSQ/Ci0rCWlmIFsgJHIg LWVxIDUgXTsgdGhlbgotKwkJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3QgcGFzc2VkIHdpdGggRUNE U0Ega2V5IChzaG91bGQgZmFpbCkiCi0rCWZpCi0rCi0rCXRyYWNlICJhZGQgYWxzbyB0aGUgUlNB IGtleSB0byB0aGUgYWdlbnQiCi0rCWVjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0hB RER9IFwKLSsJICAgICJwa2NzMTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BL Q1MxMX0iID4gL2Rldi9udWxsIDI+JjEKLSsJcj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4K LSsJCWZhaWwgIkZBSUw6IHNzaC1hZGQgZmFpbGVkIHdpdGggZmlyc3Qga2V5OiBleGl0IGNvZGUg JHIiCi0rCWZpCi0rCi0rCXRyYWNlICIgcmVtb3ZlIEVDRFNBIHBrY3MxMSBrZXkiCi0rCSR7U1NI QUREfSAtZCAicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9 IiBcCi0rCSAgICA+IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8KLSsJaWYgWyAkciAtbmUgMCBdOyB0 aGVuCi0rCQlmYWlsICJzc2gtYWRkIC1kIGZhaWxlZCB3aXRoIEVDRFNBIGtleTogZXhpdCBjb2Rl ICRyIgotKwlmaQotKwotKwl0cmFjZSAiIHJlbW92ZSBhbHJlYWR5LXJlbW92ZWQgcGtjczExIGtl eSBzaG91bGQgZmFpbCIKLSsJJHtTU0hBRER9IC1kICJwa2NzMTE6aWQ9JSR7SUQyfT9tb2R1bGUt cGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIFwKLSsJICAgID4gL2Rldi9udWxsIDI+JjEKLSsJcj0k PwotKwlpZiBbICRyIC1lcSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUw6IHNzaC1hZGQgLWQgcGFz c2VkIHdpdGggbm9uLWV4aXN0aW5nIGtleSAoc2hvdWxkIGZhaWwpIgotKwlmaQotKwotKwl0cmFj ZSAiIHBrY3MxMSBjb25uZWN0IHZpYSBhZ2VudCAodGhlIFJTQSBrZXkgc2hvdWxkIGJlIHN0aWxs IHVzYWJsZSkiCi0rCSR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKLSsJ cj0kPwotKwlpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJCWZhaWwgInNzaCBjb25uZWN0IGZhaWxl ZCB3aXRoIFJTQSBrZXkgKGFmdGVyIHJlbW92aW5nIEVDRFNBKTogZXhpdCBjb2RlICRyIgotKwlm aQotKwotKwl0cmFjZSAia2lsbCBhZ2VudCIKLSsJJHtTU0hBR0VOVH0gLWsgPiAvZGV2L251bGwK LStmaQotKwotKyMgUmVzdG9yZSBvcmlnaW5hbCBzc2hfcHJveHkKLSttdiAkT0JKL3NzaF9wcm94 eV9iYWsgJE9CSi9zc2hfcHJveHkKLWRpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9NYWtl ZmlsZSBiL3JlZ3Jlc3MvdW5pdHRlc3RzL01ha2VmaWxlCi1pbmRleCBlMzcwOTAwZTQuLmQ2Yzg5 YzEyOSAxMDA2NDQKLS0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL01ha2VmaWxlCi0rKysgYi9yZWdy ZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZQotQEAgLTEsNiArMSw2IEBACi0gIwkkT3BlbkJTRDogTWFr ZWZpbGUsdiAxLjEzIDIwMjMvMDkvMjQgMDg6MTQ6MTMgY2xhdWRpbyBFeHAgJAotIAotIFNVQkRJ Uj0JdGVzdF9oZWxwZXIgc3NoYnVmIHNzaGtleSBiaXRtYXAga2V4IGhvc3RrZXlzIHV0ZjggbWF0 Y2ggY29udmVyc2lvbgotLVNVQkRJUis9YXV0aG9wdCBtaXNjIHNzaHNpZwotK1NVQkRJUis9YXV0 aG9wdCBtaXNjIHNzaHNpZyBwa2NzMTEKLSAKLSAuaW5jbHVkZSA8YnNkLnN1YmRpci5taz4KLWRp ZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdHMuYyBiL3JlZ3Jlc3MvdW5p dHRlc3RzL3BrY3MxMS90ZXN0cy5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAw MDAwLi44OWJhNDVjNGUKLS0tLSAvZGV2L251bGwKLSsrKyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3Br Y3MxMS90ZXN0cy5jCi1AQCAtMCwwICsxLDM1MyBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAy MDE3IFJlZCBIYXQKLSsgKgotKyAqIEF1dGhvcnM6IEpha3ViIEplbGVuIDxqamVsZW5AcmVkaGF0 LmNvbT4KLSsgKgotKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0 cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0 IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSsgKiBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29w aWVzLgotKyAqCi0rICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBB VVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0rICogV0lUSCBSRUdBUkQgVE8gVEhJUyBT T0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotKyAqIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFC TEUgRk9SCi0rICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotKyAqIEFDVElPTiBP RiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcg T1VUIE9GCi0rICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0Ug T0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsj aW5jbHVkZSA8bG9jYWxlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKwotKyNpbmNsdWRlICIu Li90ZXN0X2hlbHBlci90ZXN0X2hlbHBlci5oIgotKwotKyNpbmNsdWRlICJzc2hidWYuaCIKLSsj aW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKLSsKLSsjZGVmaW5lIEVNUFRZX1VSSSBjb21wb3Nl X3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQot KwotKy8qIHByb3RvdHlwZXMgYXJlIG5vdCBwdWJsaWMgLS0gc3BlY2lmeSB0aGVtIGhlcmUgaW50 ZXJuYWxseSBmb3IgdGVzdHMgKi8KLStzdHJ1Y3Qgc3NoYnVmICpwZXJjZW50X2VuY29kZShjb25z dCBjaGFyICosIHNpemVfdCwgY2hhciAqKTsKLStpbnQgcGVyY2VudF9kZWNvZGUoY2hhciAqLCBj aGFyICoqKTsKLSsKLSt2b2lkCi0rY29tcGFyZV91cmkoc3RydWN0IHBrY3MxMV91cmkgKmEsIHN0 cnVjdCBwa2NzMTFfdXJpICpiKQotK3sKLSsJQVNTRVJUX1BUUl9ORShhLCBOVUxMKTsKLSsJQVNT RVJUX1BUUl9ORShiLCBOVUxMKTsKLSsJQVNTRVJUX1NJWkVfVF9FUShhLT5pZF9sZW4sIGItPmlk X2xlbik7Ci0rCUFTU0VSVF9NRU1fRVEoYS0+aWQsIGItPmlkLCBhLT5pZF9sZW4pOwotKwlpZiAo Yi0+b2JqZWN0ICE9IE5VTEwpCi0rCQlBU1NFUlRfU1RSSU5HX0VRKGEtPm9iamVjdCwgYi0+b2Jq ZWN0KTsKLSsJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICovCi0rCQlBU1NFUlRfUFRSX0VR KGEtPm9iamVjdCwgYi0+b2JqZWN0KTsKLSsJaWYgKGItPm1vZHVsZV9wYXRoICE9IE5VTEwpCi0r CQlBU1NFUlRfU1RSSU5HX0VRKGEtPm1vZHVsZV9wYXRoLCBiLT5tb2R1bGVfcGF0aCk7Ci0rCWVs c2UgLyogYm90aCBzaG91bGQgYmUgbnVsbCAqLwotKwkJQVNTRVJUX1BUUl9FUShhLT5tb2R1bGVf cGF0aCwgYi0+bW9kdWxlX3BhdGgpOwotKwlpZiAoYi0+dG9rZW4gIT0gTlVMTCkKLSsJCUFTU0VS VF9TVFJJTkdfRVEoYS0+dG9rZW4sIGItPnRva2VuKTsKLSsJZWxzZSAvKiBib3RoIHNob3VsZCBi ZSBudWxsICovCi0rCQlBU1NFUlRfUFRSX0VRKGEtPnRva2VuLCBiLT50b2tlbik7Ci0rCWlmIChi LT5tYW51ZiAhPSBOVUxMKQotKwkJQVNTRVJUX1NUUklOR19FUShhLT5tYW51ZiwgYi0+bWFudWYp OwotKwllbHNlIC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KLSsJCUFTU0VSVF9QVFJfRVEoYS0+ bWFudWYsIGItPm1hbnVmKTsKLSsJaWYgKGItPmxpYl9tYW51ZiAhPSBOVUxMKQotKwkJQVNTRVJU X1NUUklOR19FUShhLT5saWJfbWFudWYsIGItPmxpYl9tYW51Zik7Ci0rCWVsc2UgLyogYm90aCBz aG91bGQgYmUgbnVsbCAqLwotKwkJQVNTRVJUX1BUUl9FUShhLT5saWJfbWFudWYsIGItPmxpYl9t YW51Zik7Ci0rCWlmIChiLT5zZXJpYWwgIT0gTlVMTCkKLSsJCUFTU0VSVF9TVFJJTkdfRVEoYS0+ c2VyaWFsLCBiLT5zZXJpYWwpOwotKwllbHNlIC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KLSsJ CUFTU0VSVF9QVFJfRVEoYS0+c2VyaWFsLCBiLT5zZXJpYWwpOwotK30KLSsKLSt2b2lkCi0rY2hl Y2tfcGFyc2VfcnYoY2hhciAqdXJpLCBzdHJ1Y3QgcGtjczExX3VyaSAqZXhwZWN0LCBpbnQgZXhw ZWN0X3J2KQotK3sKLSsJY2hhciAqYnVmID0gTlVMTCwgKnN0cjsKLSsJc3RydWN0IHBrY3MxMV91 cmkgKnBrY3MxMXVyaSA9IE5VTEw7Ci0rCWludCBydjsKLSsKLSsJaWYgKGV4cGVjdF9ydiA9PSAw KQotKwkJc3RyID0gIlZhbGlkIjsKLSsJZWxzZQotKwkJc3RyID0gIkludmFsaWQiOwotKwlhc3By aW50ZigmYnVmLCAiJXMgUEtDUyMxMSBVUkkgcGFyc2luZzogJXMiLCBzdHIsIHVyaSk7Ci0rCVRF U1RfU1RBUlQoYnVmKTsKLSsJZnJlZShidWYpOwotKwlwa2NzMTF1cmkgPSBwa2NzMTFfdXJpX2lu aXQoKTsKLSsJcnYgPSBwa2NzMTFfdXJpX3BhcnNlKHVyaSwgcGtjczExdXJpKTsKLSsJQVNTRVJU X0lOVF9FUShydiwgZXhwZWN0X3J2KTsKLSsJaWYgKHJ2ID09IDApIC8qIGluIGNhc2Ugb2YgZmFp bHVyZSByZXN1bHQgaXMgdW5kZWZpbmVkICovCi0rCQljb21wYXJlX3VyaShwa2NzMTF1cmksIGV4 cGVjdCk7Ci0rCXBrY3MxMV91cmlfY2xlYW51cChwa2NzMTF1cmkpOwotKwlmcmVlKGV4cGVjdCk7 Ci0rCVRFU1RfRE9ORSgpOwotK30KLSsKLSt2b2lkCi0rY2hlY2tfcGFyc2UoY2hhciAqdXJpLCBz dHJ1Y3QgcGtjczExX3VyaSAqZXhwZWN0KQotK3sKLSsJY2hlY2tfcGFyc2VfcnYodXJpLCBleHBl Y3QsIDApOwotK30KLSsKLStzdHJ1Y3QgcGtjczExX3VyaSAqCi0rY29tcG9zZV91cmkodW5zaWdu ZWQgY2hhciAqaWQsIHNpemVfdCBpZF9sZW4sIGNoYXIgKnRva2VuLCBjaGFyICpsaWJfbWFudWYs Ci0rICAgIGNoYXIgKm1hbnVmLCBjaGFyICpzZXJpYWwsIGNoYXIgKm1vZHVsZV9wYXRoLCBjaGFy ICpvYmplY3QsIGNoYXIgKnBpbikKLSt7Ci0rCXN0cnVjdCBwa2NzMTFfdXJpICp1cmkgPSBwa2Nz MTFfdXJpX2luaXQoKTsKLSsJaWYgKGlkX2xlbiA+IDApIHsKLSsJCXVyaS0+aWRfbGVuID0gaWRf bGVuOwotKwkJdXJpLT5pZCA9IGlkOwotKwl9Ci0rCXVyaS0+bW9kdWxlX3BhdGggPSBtb2R1bGVf cGF0aDsKLSsJdXJpLT50b2tlbiA9IHRva2VuOwotKwl1cmktPmxpYl9tYW51ZiA9IGxpYl9tYW51 ZjsKLSsJdXJpLT5tYW51ZiA9IG1hbnVmOwotKwl1cmktPnNlcmlhbCA9IHNlcmlhbDsKLSsJdXJp LT5vYmplY3QgPSBvYmplY3Q7Ci0rCXVyaS0+cGluID0gcGluOwotKwlyZXR1cm4gdXJpOwotK30K LSsKLStzdGF0aWMgdm9pZAotK3Rlc3RfcGFyc2VfdmFsaWQodm9pZCkKLSt7Ci0rCS8qIHBhdGgg YXJndW1lbnRzICovCi0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6aWQ9JTAxIiwKLSsJICAgIGNvbXBv c2VfdXJpKCJceDAxIiwgMSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCkpOwotKwljaGVja19wYXJzZSgicGtjczExOmlkPSUwMCUwMSIsCi0rCSAgICBjb21wb3NlX3Vy aSgiXHgwMFx4MDEiLCAyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KSk7Ci0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9rZW49U1NIJTIwS2V5cyIsCi0rCSAgICBjb21w b3NlX3VyaShOVUxMLCAwLCAiU1NIIEtleXMiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMKSk7Ci0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6bGlicmFyeS1tYW51ZmFjdHVyZXI9T3Bl blNDIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsICJPcGVuU0MiLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6bWFudWZhY3R1 cmVyPXBpdl9JSSIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCAicGl2 X0lJIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOwotKwljaGVja19wYXJzZSgicGtjczExOnNl cmlhbD1JYW1TZXJpYWwiLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwg TlVMTCwgIklhbVNlcmlhbCIsIE5VTEwsIE5VTEwsIE5VTEwpKTsKLSsJY2hlY2tfcGFyc2UoInBr Y3MxMTpvYmplY3Q9U0lHTiUyMEtleSIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiU0lHTiBLZXkiLCBOVUxMKSk7Ci0rCS8qIHF1ZXJ5 IGFyZ3VtZW50cyAqLwotKwljaGVja19wYXJzZSgicGtjczExOj9tb2R1bGUtcGF0aD0vdXNyL2xp YjY0L3AxMS1raXQtcHJveHkuc28iLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgIi91c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyIsIE5VTEwsIE5V TEwpKTsKLSsJY2hlY2tfcGFyc2UoInBrY3MxMTo/cGluLXZhbHVlPTEyMzQ1NiIsCi0rCSAgICBj b21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAi MTIzNDU2IikpOwotKwotKwkvKiBjb21iaW5hdGlvbnMgKi8KLSsJLyogSUQgU0hPVUxEIGJlIHBl cmNlbnQgZW5jb2RlZCAqLwotKwljaGVja19wYXJzZSgicGtjczExOnRva2VuPVNTSCUyMEtleTtp ZD0wIiwKLSsJICAgIGNvbXBvc2VfdXJpKCIwIiwgMSwgIlNTSCBLZXkiLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rCWNoZWNrX3BhcnNlKAotKwkgICAgInBrY3MxMTpt YW51ZmFjdHVyZXI9Q0FDP21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyIs Ci0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCAiQ0FDIiwgTlVMTCwKLSsJ ICAgICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLCBOVUxMLCBOVUxMKSk7Ci0rCWNoZWNr X3BhcnNlKAotKwkgICAgInBrY3MxMTpvYmplY3Q9UlNBJTIwS2V5P21vZHVsZS1wYXRoPS91c3Iv bGliNjQvcGtjczExL29wZW5jcnlwdG9raS5zbyIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAw LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotKwkgICAgIi91c3IvbGliNjQvcGtjczExL29wZW5j cnlwdG9raS5zbyIsICJSU0EgS2V5IiwgTlVMTCkpOwotKwljaGVja19wYXJzZSgicGtjczExOj9t b2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28mcGluLXZhbHVlPTEyMzQ1NiIs Ci0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiL3Vz ci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgIjEyMzQ1NiIpKTsKLSsKLSsJLyogZW1w dHkgcGF0aCBjb21wb25lbnQgbWF0Y2hlcyBldmVyeXRoaW5nICovCi0rCWNoZWNrX3BhcnNlKCJw a2NzMTE6IiwgRU1QVFlfVVJJKTsKLSsKLSsJLyogZW1wdHkgc3RyaW5nIGlzIGEgdmFsaWQgdG8g bWF0Y2ggYWdhaW5zdCAoYW5kIGRpZmZlcmVudCBmcm9tIE5VTEwpICovCi0rCWNoZWNrX3BhcnNl KCJwa2NzMTE6dG9rZW49IiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsICIiLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rCS8qIFBlcmNlbnQgY2hhcmFjdGVyIG5l ZWRzIHRvIGJlIHBlcmNlbnQtZW5jb2RlZCAqLwotKwljaGVja19wYXJzZSgicGtjczExOnRva2Vu PSUyNSIsCi0rCSAgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgIiUiLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rdGVzdF9wYXJzZV9p bnZhbGlkKHZvaWQpCi0rewotKwkvKiBJbnZhbGlkIHBlcmNlbnQgZW5jb2RpbmcgKi8KLSsJY2hl Y2tfcGFyc2VfcnYoInBrY3MxMTppZD0lMCIsIEVNUFRZX1VSSSwgLTEpOwotKwkvKiBJbnZhbGlk IHBlcmNlbnQgZW5jb2RpbmcgKi8KLSsJY2hlY2tfcGFyc2VfcnYoInBrY3MxMTppZD0lWloiLCBF TVBUWV9VUkksIC0xKTsKLSsJLyogU3BhY2UgTVVTVCBiZSBwZXJjZW50IGVuY29kZWQgLS0gWFhY IG5vdCBlbmZvcmNlZCB5ZXQgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMTp0b2tlbj1TU0ggS2V5 cyIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCAiU1NIIEtleXMiLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rCS8qIE1VU1QgTk9UIGNvbnRhaW4gZHVwbGljYXRl IGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgbmFtZSAqLwotKwljaGVja19wYXJzZV9ydigicGtjczEx OmlkPSUwMTtpZD0lMDIiLCBFTVBUWV9VUkksIC0xKTsKLSsJLyogTVVTVCBOT1QgY29udGFpbiBk dXBsaWNhdGUgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lICovCi0rCWNoZWNrX3BhcnNlX3J2 KCJwa2NzMTE6P3Bpbi12YWx1ZT0xMTExMTEmcGluLXZhbHVlPTEyMzQ1NiIsIEVNUFRZX1VSSSwg LTEpOwotKwkvKiBVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHBhdGggYXJlIGlnbm9yZWQgd2l0 aCBsb2cgbWVzc2FnZSAqLwotKwljaGVja19wYXJzZSgicGtjczExOmtleV9uYW1lPVNTSCIsIEVN UFRZX1VSSSk7Ci0rCS8qIFVucmVjb2duaXplZCBhdHRyaWJ1dGUgaW4gcXVlcnkgU0hPVUxEIGJl IGlnbm9yZWQgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMTo/a2V5X25hbWU9U1NIIiwgRU1QVFlf VVJJKTsKLSt9Ci0rCi0rdm9pZAotK2NoZWNrX2dlbihjaGFyICpleHBlY3QsIHN0cnVjdCBwa2Nz MTFfdXJpICp1cmkpCi0rewotKwljaGFyICpidWYgPSBOVUxMLCAqdXJpX3N0cjsKLSsKLSsJYXNw cmludGYoJmJ1ZiwgIlZhbGlkIFBLQ1MjMTEgVVJJIGdlbmVyYXRpb246ICVzIiwgZXhwZWN0KTsK LSsJVEVTVF9TVEFSVChidWYpOwotKwlmcmVlKGJ1Zik7Ci0rCXVyaV9zdHIgPSBwa2NzMTFfdXJp X2dldCh1cmkpOwotKwlBU1NFUlRfUFRSX05FKHVyaV9zdHIsIE5VTEwpOwotKwlBU1NFUlRfU1RS SU5HX0VRKHVyaV9zdHIsIGV4cGVjdCk7Ci0rCWZyZWUodXJpX3N0cik7Ci0rCVRFU1RfRE9ORSgp OwotK30KLSsKLStzdGF0aWMgdm9pZAotK3Rlc3RfZ2VuZXJhdGVfdmFsaWQodm9pZCkKLSt7Ci0r CS8qIHBhdGggYXJndW1lbnRzICovCi0rCWNoZWNrX2dlbigicGtjczExOmlkPSUwMSIsCi0rCSAg ICBjb21wb3NlX3VyaSgiXHgwMSIsIDEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpKTsKLSsJY2hlY2tfZ2VuKCJwa2NzMTE6aWQ9JTAwJTAxIiwKLSsJICAgIGNvbXBv c2VfdXJpKCJceDAwXHgwMSIsIDIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpKTsKLSsJY2hlY2tfZ2VuKCJwa2NzMTE6dG9rZW49U1NIJTIwS2V5cyIsIC8qIHNwYWNl IG11c3QgYmUgcGVyY2VudCBlbmNvZGVkICovCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCAi U1NIIEtleXMiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rCS8qIGxp YnJhcnktbWFudWZhY3R1cmVyIGlzIG5vdCBpbXBsbWVudGVkIG5vdyAqLwotKwkvKmNoZWNrX2dl bigicGtjczExOmxpYnJhcnktbWFudWZhY3R1cmVyPU9wZW5TQyIsCi0rCSAgICBjb21wb3NlX3Vy aShOVUxMLCAwLCBOVUxMLCAiT3BlblNDIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkp OyovCi0rCWNoZWNrX2dlbigicGtjczExOm1hbnVmYWN0dXJlcj1waXZfSUkiLAotKwkgICAgY29t cG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgInBpdl9JSSIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpKTsKLSsJY2hlY2tfZ2VuKCJwa2NzMTE6c2VyaWFsPUlhbVNlcmlhbCIsCi0rCSAgICBj b21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAiSWFtU2VyaWFsIiwgTlVMTCwg TlVMTCwgTlVMTCkpOwotKwljaGVja19nZW4oInBrY3MxMTpvYmplY3Q9UlNBJTIwS2V5IiwKLSsJ ICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJS U0EgS2V5IiwgTlVMTCkpOwotKwkvKiBxdWVyeSBhcmd1bWVudHMgKi8KLSsJY2hlY2tfZ2VuKCJw a2NzMTE6P21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyIsCi0rCSAgICBj b21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiL3Vzci9saWI2NC9w MTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVMTCkpOwotKwotKwkvKiBjb21iaW5hdGlvbnMgKi8K LSsJY2hlY2tfZ2VuKCJwa2NzMTE6aWQ9JTAyO3Rva2VuPVNTSCUyMEtleXMiLAotKwkgICAgY29t cG9zZV91cmkoIlx4MDIiLCAxLCAiU1NIIEtleXMiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMKSk7Ci0rCWNoZWNrX2dlbigicGtjczExOmlkPSVFRSUwMj9tb2R1bGUtcGF0aD0v dXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28iLAotKwkgICAgY29tcG9zZV91cmkoIlx4RUVceDAy IiwgMiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIi91c3IvbGliNjQvcDExLWtpdC1wcm94eS5z byIsIE5VTEwsIE5VTEwpKTsKLSsJY2hlY2tfZ2VuKCJwa2NzMTE6b2JqZWN0PUVuY3J5cHRpb24l MjBLZXk7bWFudWZhY3R1cmVyPXBpdl9JSSIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBO VUxMLCBOVUxMLCAicGl2X0lJIiwgTlVMTCwgTlVMTCwgIkVuY3J5cHRpb24gS2V5IiwgTlVMTCkp OwotKwotKwkvKiBlbXB0eSBwYXRoIGNvbXBvbmVudCBtYXRjaGVzIGV2ZXJ5dGhpbmcgKi8KLSsJ Y2hlY2tfZ2VuKCJwa2NzMTE6IiwgRU1QVFlfVVJJKTsKLSsKLSt9Ci0rCi0rdm9pZAotK2NoZWNr X2VuY29kZShjaGFyICpzb3VyY2UsIHNpemVfdCBsZW4sIGNoYXIgKmFsbG93X2xpc3QsIGNoYXIg KmV4cGVjdCkKLSt7Ci0rCWNoYXIgKmJ1ZiA9IE5VTEw7Ci0rCXN0cnVjdCBzc2hidWYgKmI7Ci0r Ci0rCWFzcHJpbnRmKCZidWYsICJwZXJjZW50X2VuY29kZTogZXhwZWN0ZWQgJXMiLCBleHBlY3Qp OwotKwlURVNUX1NUQVJUKGJ1Zik7Ci0rCWZyZWUoYnVmKTsKLSsKLSsJYiA9IHBlcmNlbnRfZW5j b2RlKHNvdXJjZSwgbGVuLCBhbGxvd19saXN0KTsKLSsJQVNTRVJUX1NUUklOR19FUShzc2hidWZf cHRyKGIpLCBleHBlY3QpOwotKwlzc2hidWZfZnJlZShiKTsKLSsJVEVTVF9ET05FKCk7Ci0rfQot KwotK3N0YXRpYyB2b2lkCi0rdGVzdF9wZXJjZW50X2VuY29kZV9tdWx0aWJ5dGUodm9pZCkKLSt7 Ci0rCS8qIFNIT1VMRCBiZSBlbmNvZGVkIGFzIG9jdGV0cyBhY2NvcmRpbmcgdG8gdGhlIFVURi04 IGNoYXJhY3RlciBlbmNvZGluZyAqLwotKwotKwkvKiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgYXJl ICJmb3IgZnJlZSIgKi8KLSsJY2hlY2tfZW5jb2RlKCIkIiwgMSwgIiIsICIlMjQiKTsKLSsJY2hl Y2tfZW5jb2RlKCLCoiIsIDIsICIiLCAiJUMyJUEyIik7Ci0rCWNoZWNrX2VuY29kZSgi4oKsIiwg MywgIiIsICIlRTIlODIlQUMiKTsKLSsJY2hlY2tfZW5jb2RlKCLwkI2IIiwgNCwgIiIsICIlRjAl OTAlOEQlODgiKTsKLSsKLSsJLyogQ0tfVVRGOENIQVIgaXMgdW5zaWduZWQgY2hhciAoMSBieXRl KSAqLwotKwkvKiBsYWJlbHMgU0hPVUxEIGJlIG5vcm1hbGl6ZWQgdG8gTkZDIFtVQVgxNV0gKi8K LSsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLSt0ZXN0X3BlcmNlbnRfZW5jb2RlKHZvaWQpCi0rewot KwkvKiBXaXRob3V0IGFsbG93IGxpc3QgZW5jb2RlcyBldmVyeXRoaW5nIChmb3IgQ0tBX0lEKSAq LwotKwljaGVja19lbmNvZGUoIkEqIiwgMiwgIiIsICIlNDElMkEiKTsKLSsJY2hlY2tfZW5jb2Rl KCJceDAwIiwgMSwgIiIsICIlMDAiKTsKLSsJY2hlY2tfZW5jb2RlKCJceDdGIiwgMSwgIiIsICIl N0YiKTsKLSsJY2hlY2tfZW5jb2RlKCJceDgwIiwgMSwgIiIsICIlODAiKTsKLSsJY2hlY2tfZW5j b2RlKCJceGZmIiwgMSwgIiIsICIlRkYiKTsKLSsKLSsJLyogRGVmYXVsdCBhbGxvdyBsaXN0IGVu Y29kZXMgYW55dGhpbmcgYnV0IHNhZmUgbGV0dGVycyAqLwotKwljaGVja19lbmNvZGUoInRlc3Qi ICJceDAwIiAiMGFscGhhIiwgMTEsIFBLQ1MxMV9VUklfV0hJVEVMSVNULAotKwkgICAgInRlc3Ql MDAwYWxwaGEiKTsKLSsJY2hlY2tfZW5jb2RlKCIgIiwgMSwgUEtDUzExX1VSSV9XSElURUxJU1Qs Ci0rCSAgICAiJTIwIik7IC8qIFNwYWNlIE1VU1QgYmUgcGVyY2VudCBlbmNvZGVkICovCi0rCWNo ZWNrX2VuY29kZSgiLyIsIDEsIFBLQ1MxMV9VUklfV0hJVEVMSVNULAotKwkgICAgIiUyRiIpOyAv KiAnLycgZGVsaW1pdGVyIE1VU1QgYmUgcGVyY2VudCBlbmNvZGVkIChpbiB0aGUgcGF0aCkgKi8K LSsJY2hlY2tfZW5jb2RlKCI/IiwgMSwgUEtDUzExX1VSSV9XSElURUxJU1QsCi0rCSAgICAiJTNG Iik7IC8qIGRlbGltaXRlciAnPycgTVVTVCBiZSBwZXJjZW50IGVuY29kZWQgKGluIHRoZSBwYXRo KSAqLwotKwljaGVja19lbmNvZGUoIiMiLCAxLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKLSsJICAg ICIlMjMiKTsgLyogJyMnIE1VU1QgYmUgYWx3YXlzIHBlcmNlbnQgZW5jb2RlZCAqLwotKwljaGVj a19lbmNvZGUoImtleT12YWx1ZTtzZXBhcmF0b3I/cXVlcnkmYW1wOyNhbmNoIiwgMzUsIFBLQ1Mx MV9VUklfV0hJVEVMSVNULAotKwkgICAgImtleSUzRHZhbHVlJTNCc2VwYXJhdG9yJTNGcXVlcnkl MjZhbXAlM0IlMjNhbmNoIik7Ci0rCi0rCS8qIENvbXBvbmVudHMgaW4gcXVlcnkgY2FuIGhhdmUg Jy8nIHVuZW5jb2RlZCAodXNlZnVsIGZvciBwYXRocykgKi8KLSsJY2hlY2tfZW5jb2RlKCIvcGF0 aC90by5maWxlIiwgMTMsIFBLQ1MxMV9VUklfV0hJVEVMSVNUICIvIiwKLSsJICAgICIvcGF0aC90 by5maWxlIik7Ci0rfQotKwotK3ZvaWQKLStjaGVja19kZWNvZGUoY2hhciAqc291cmNlLCBjaGFy ICpleHBlY3QsIGludCBleHBlY3RfbGVuKQotK3sKLSsJY2hhciAqYnVmID0gTlVMTCwgKm91dCA9 IE5VTEw7Ci0rCWludCBydjsKLSsKLSsJYXNwcmludGYoJmJ1ZiwgInBlcmNlbnRfZGVjb2RlOiAl cyIsIHNvdXJjZSk7Ci0rCVRFU1RfU1RBUlQoYnVmKTsKLSsJZnJlZShidWYpOwotKwotKwlydiA9 IHBlcmNlbnRfZGVjb2RlKHNvdXJjZSwgJm91dCk7Ci0rCUFTU0VSVF9JTlRfRVEocnYsIGV4cGVj dF9sZW4pOwotKwlpZiAocnYgPj0gMCkKLSsJCUFTU0VSVF9NRU1fRVEob3V0LCBleHBlY3QsIGV4 cGVjdF9sZW4pOwotKwlmcmVlKG91dCk7Ci0rCVRFU1RfRE9ORSgpOwotK30KLSsKLStzdGF0aWMg dm9pZAotK3Rlc3RfcGVyY2VudF9kZWNvZGUodm9pZCkKLSt7Ci0rCS8qIHNpbXBsZSB2YWxpZCBj YXNlcyAqLwotKwljaGVja19kZWNvZGUoIiUwMCIsICJceDAwIiwgMSk7Ci0rCWNoZWNrX2RlY29k ZSgiJUZGIiwgIlx4RkYiLCAxKTsKLSsKLSsJLyogbm9ybWFsIHN0cmluZ3Mgc2hvbGQgYmUga2Vw dCBpbnRhY3QgKi8KLSsJY2hlY2tfZGVjb2RlKCJzdHJpbmdzIGFyZSBsZWZ0IiwgInN0cmluZ3Mg YXJlIGxlZnQiLCAxNik7Ci0rCWNoZWNrX2RlY29kZSgiMTAlMjUgb2YgdHJlZXMiLCAiMTAlIG9m IHRyZWVzIiwgMTIpOwotKwotKwkvKiBtYWtlIHN1cmUgbm8gbW9yZSB0aGFuIDIgYnl0ZXMgYXJl IHBhcnNlZCAqLwotKwljaGVja19kZWNvZGUoIiUyMjIiLCAiXHgyMiIgIjIiLCAyKTsKLSsKLSsJ LyogaW52YWxpZCBleHBlY3RzIGZhaWx1cmUgKi8KLSsJY2hlY2tfZGVjb2RlKCIlMCIsICIiLCAt MSk7Ci0rCWNoZWNrX2RlY29kZSgiJVoiLCAiIiwgLTEpOwotKwljaGVja19kZWNvZGUoIiVGRyIs ICIiLCAtMSk7Ci0rfQotKwotK3ZvaWQKLSt0ZXN0cyh2b2lkKQotK3sKLSsJdGVzdF9wZXJjZW50 X2VuY29kZSgpOwotKwl0ZXN0X3BlcmNlbnRfZW5jb2RlX211bHRpYnl0ZSgpOwotKwl0ZXN0X3Bl cmNlbnRfZGVjb2RlKCk7Ci0rCXRlc3RfcGFyc2VfdmFsaWQoKTsKLSsJdGVzdF9wYXJzZV9pbnZh bGlkKCk7Ci0rCXRlc3RfZ2VuZXJhdGVfdmFsaWQoKTsKLSt9Ci0rCi0rdm9pZAotK2JlbmNobWFy a3Modm9pZCkKLSt7Ci0rCXByaW50Zigibm8gYmVuY2htYXJrc1xuIik7Ci0rfQotKwotZGlmZiAt LWdpdCBhL3NzaC1hZGQuYyBiL3NzaC1hZGQuYwotaW5kZXggMWU5ZWRkZjkwLi5lNDc2ZmE2NjIg MTAwNjQ0Ci0tLS0gYS9zc2gtYWRkLmMKLSsrKyBiL3NzaC1hZGQuYwotQEAgLTcwLDYgKzcwLDcg QEAKLSAjaW5jbHVkZSAic3NoLXNrLmgiCi0gI2luY2x1ZGUgInNrLWFwaS5oIgotICNpbmNsdWRl ICJob3N0ZmlsZS5oIgotKyNpbmNsdWRlICJzc2gtcGtjczExLXVyaS5oIgotIAotICNkZWZpbmUg Q0VSVF9FWFBJUllfR1JBQ0UJKDUqNjApCi0gCi1AQCAtMjcyLDYgKzI3MywzOCBAQCBjaGVja19j ZXJ0X2xpZmV0aW1lKGNvbnN0IHN0cnVjdCBzc2hrZXkgKmNlcnQsIGludCBjZXJ0X2xpZmV0aW1l KQotIAlyZXR1cm4gTUlOSU1VTShjZXJ0X2xpZmV0aW1lLCAoaW50KW4pOwotIH0KLSAKLSsjaWZk ZWYgRU5BQkxFX1BLQ1MxMQotK3N0YXRpYyBpbnQKLSt1cGRhdGVfY2FyZChpbnQgYWdlbnRfZmQs IGludCBhZGQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgcWZsYWcsCi0rICAgIGludCBrZXlfb25seSwg aW50IGNlcnRfb25seSwKLSsgICAgc3RydWN0IGRlc3RfY29uc3RyYWludCAqKmRlc3RfY29uc3Ry YWludHMsIHNpemVfdCBuZGVzdF9jb25zdHJhaW50cywKLSsgICAgc3RydWN0IHNzaGtleSAqKmNl cnRzLCBzaXplX3QgbmNlcnRzLCBjaGFyICpwaW4pOwotKwotK2ludAotK3VwZGF0ZV9wa2NzMTFf dXJpKGludCBhZ2VudF9mZCwgaW50IGFkZGluZywgY29uc3QgY2hhciAqcGtjczExX3VyaSwgaW50 IHFmbGFnLAotKyAgICBzdHJ1Y3QgZGVzdF9jb25zdHJhaW50ICoqZGVzdF9jb25zdHJhaW50cywg c2l6ZV90IG5kZXN0X2NvbnN0cmFpbnRzKQotK3sKLSsJY2hhciAqcGluID0gTlVMTDsKLSsJc3Ry dWN0IHBrY3MxMV91cmkgKnVyaTsKLSsKLSsJLyogZHJ5LXJ1biBwYXJzZSB0byBtYWtlIHN1cmUg dGhlIFVSSSBpcyB2YWxpZCBhbmQgdG8gcmVwb3J0IGVycm9ycyAqLwotKwl1cmkgPSBwa2NzMTFf dXJpX2luaXQoKTsKLSsJaWYgKHBrY3MxMV91cmlfcGFyc2UoKGNoYXIgKikgcGtjczExX3VyaSwg dXJpKSAhPSAwKQotKwkJZmF0YWwoIkZhaWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSIpOwotKwlp ZiAodXJpLT5waW4gIT0gTlVMTCkgewotKwkJcGluID0gc3RyZHVwKHVyaS0+cGluKTsKLSsJCWlm IChwaW4gPT0gTlVMTCkgewotKwkJCWZhdGFsKCJGYWlsZWQgdG8gZHVwcGxpY2F0ZSBzdHJpbmci KTsKLSsJCX0KLSsJCS8qIHBpbiBpcyBmcmVlZCBpbiB0aGUgdXBkYXRlX2NhcmQoKSAqLwotKwl9 Ci0rCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwotKwotKwlyZXR1cm4gdXBkYXRlX2NhcmQoYWdl bnRfZmQsIGFkZGluZywgcGtjczExX3VyaSwgcWZsYWcsIDEsIDAsCi0rCSAgICAgICAgICAgZGVz dF9jb25zdHJhaW50cywgbmRlc3RfY29uc3RyYWludHMsIE5VTEwsIDAsIHBpbik7Ci0rfQotKyNl bmRpZgotKwotIHN0YXRpYyBpbnQKLSBhZGRfZmlsZShpbnQgYWdlbnRfZmQsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLCBpbnQga2V5X29ubHksIGludCBjZXJ0X29ubHksCi0gICAgIGludCBxZmxhZywg aW50IE5mbGFnLCBjb25zdCBjaGFyICpza3Byb3ZpZGVyLAotQEAgLTQ2MiwxNSArNDk1LDE0IEBA IHN0YXRpYyBpbnQKLSB1cGRhdGVfY2FyZChpbnQgYWdlbnRfZmQsIGludCBhZGQsIGNvbnN0IGNo YXIgKmlkLCBpbnQgcWZsYWcsCi0gICAgIGludCBrZXlfb25seSwgaW50IGNlcnRfb25seSwKLSAg ICAgc3RydWN0IGRlc3RfY29uc3RyYWludCAqKmRlc3RfY29uc3RyYWludHMsIHNpemVfdCBuZGVz dF9jb25zdHJhaW50cywKLS0gICAgc3RydWN0IHNzaGtleSAqKmNlcnRzLCBzaXplX3QgbmNlcnRz KQotKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqY2VydHMsIHNpemVfdCBuY2VydHMsIGNoYXIgKnBpbikK LSB7Ci0tCWNoYXIgKnBpbiA9IE5VTEw7Ci0gCWludCByLCByZXQgPSAtMTsKLSAKLSAJaWYgKGtl eV9vbmx5KQotIAkJbmNlcnRzID0gMDsKLSAKLS0JaWYgKGFkZCkgewotKwlpZiAoYWRkICYmIHBp biA9PSBOVUxMKSB7Ci0gCQlpZiAoKHBpbiA9IHJlYWRfcGFzc3BocmFzZSgiRW50ZXIgcGFzc3Bo cmFzZSBmb3IgUEtDUyMxMTogIiwKLSAJCSAgICBSUF9BTExPV19TVERJTikpID09IE5VTEwpCi0g CQkJcmV0dXJuIC0xOwotQEAgLTY1Miw2ICs2ODQsMTQgQEAgZG9fZmlsZShpbnQgYWdlbnRfZmQs IGludCBkZWxldGluZywgaW50IGtleV9vbmx5LCBpbnQgY2VydF9vbmx5LAotICAgICBjaGFyICpm aWxlLCBpbnQgcWZsYWcsIGludCBOZmxhZywgY29uc3QgY2hhciAqc2twcm92aWRlciwKLSAgICAg c3RydWN0IGRlc3RfY29uc3RyYWludCAqKmRlc3RfY29uc3RyYWludHMsIHNpemVfdCBuZGVzdF9j b25zdHJhaW50cykKLSB7Ci0rI2lmZGVmIEVOQUJMRV9QS0NTMTEKLSsJaWYgKHN0cmxlbihmaWxl KSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCi0rCSAgICBzdHJuY21wKGZpbGUsIFBL Q1MxMV9VUklfU0NIRU1FLAotKwkgICAgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkg ewotKwkJcmV0dXJuIHVwZGF0ZV9wa2NzMTFfdXJpKGFnZW50X2ZkLCAhZGVsZXRpbmcsIGZpbGUs IHFmbGFnLAotKyAgICAgICAgICAgICAgICAgICBkZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25z dHJhaW50cyk7Ci0rCX0KLSsjZW5kaWYKLSAJaWYgKGRlbGV0aW5nKSB7Ci0gCQlpZiAoZGVsZXRl X2ZpbGUoYWdlbnRfZmQsIGZpbGUsIGtleV9vbmx5LAotIAkJICAgIGNlcnRfb25seSwgcWZsYWcp ID09IC0xKQotQEAgLTEwMDMsNyArMTA0Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQotIAkJaWYgKHVwZGF0ZV9jYXJkKGFnZW50X2ZkLCAhZGVsZXRpbmcsIHBrY3MxMXByb3ZpZGVy LAotIAkJICAgIHFmbGFnLCBrZXlfb25seSwgY2VydF9vbmx5LAotIAkJICAgIGRlc3RfY29uc3Ry YWludHMsIG5kZXN0X2NvbnN0cmFpbnRzLAotLQkJICAgIGNlcnRzLCBuY2VydHMpID09IC0xKQot KwkJICAgIGNlcnRzLCBuY2VydHMsIE5VTEwpID09IC0xKQotIAkJCXJldCA9IDE7Ci0gCQlmb3Ig KG4gPSAwOyBuIDwgbmNlcnRzOyBuKyspCi0gCQkJc3Noa2V5X2ZyZWUoY2VydHNbbl0pOwotZGlm ZiAtLWdpdCBhL3NzaC1hZ2VudC5jIGIvc3NoLWFnZW50LmMKLWluZGV4IDc3NzNhNGIwNy4uMzQ1 MWQ3YTE0IDEwMDY0NAotLS0tIGEvc3NoLWFnZW50LmMKLSsrKyBiL3NzaC1hZ2VudC5jCi1AQCAt MTU0NiwxMCArMTU0Niw3NSBAQCBhZGRfcDExX2lkZW50aXR5KHN0cnVjdCBzc2hrZXkgKmtleSwg Y2hhciAqY29tbWVudCwgY29uc3QgY2hhciAqcHJvdmlkZXIsCi0gCWlkdGFiLT5uZW50cmllcysr OwotIH0KLSAKLStzdGF0aWMgY2hhciAqCi0rc2FuaXRpemVfcGtjczExX3Byb3ZpZGVyKGNvbnN0 IGNoYXIgKnByb3ZpZGVyKQotK3sKLSsJc3RydWN0IHBrY3MxMV91cmkgKnVyaSA9IE5VTEw7Ci0r CWNoYXIgKnNhbmVfdXJpLCAqbW9kdWxlX3BhdGggPSBOVUxMOyAvKiBkZWZhdWx0IHBhdGggKi8K LSsJY2hhciBjYW5vbmljYWxfcHJvdmlkZXJbUEFUSF9NQVhdOwotKwotKwlpZiAocHJvdmlkZXIg PT0gTlVMTCkKLSsJCXJldHVybiBOVUxMOwotKwotKwltZW1zZXQoY2Fub25pY2FsX3Byb3ZpZGVy LCAwLCBzaXplb2YoY2Fub25pY2FsX3Byb3ZpZGVyKSk7Ci0rCi0rCWlmIChzdHJsZW4ocHJvdmlk ZXIpID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKLSsJICAgIHN0cm5jbXAocHJvdmlk ZXIsIFBLQ1MxMV9VUklfU0NIRU1FLAotKwkgICAgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkg PT0gMCkgewotKwkJLyogUEtDUyMxMSBVUkkgKi8KLSsJCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgp OwotKwkJaWYgKHVyaSA9PSBOVUxMKSB7Ci0rCQkJZXJyb3IoIkZhaWxlZCB0byBpbml0IFBLQ1Mj MTEgVVJJIik7Ci0rCQkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCi0rCQlpZiAocGtjczExX3VyaV9w YXJzZShwcm92aWRlciwgdXJpKSAhPSAwKSB7Ci0rCQkJZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBQ S0NTIzExIFVSSSIpOwotKwkJCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwotKwkJCXJldHVybiBO VUxMOwotKwkJfQotKwkJLyogdmFsaWRhdGUgYWxzbyBwcm92aWRlciBmcm9tIFVSSSAqLwotKwkJ aWYgKHVyaS0+bW9kdWxlX3BhdGgpCi0rCQkJbW9kdWxlX3BhdGggPSBzdHJkdXAodXJpLT5tb2R1 bGVfcGF0aCk7Ci0rCX0gZWxzZQotKwkJbW9kdWxlX3BhdGggPSBzdHJkdXAocHJvdmlkZXIpOyAv KiBzaW1wbGUgcGF0aCAqLwotKwotKwlpZiAobW9kdWxlX3BhdGggIT0gTlVMTCkgeyAvKiBkbyBu b3QgdmFsaWRhdGUgZGVmYXVsdCBOVUxMIHBhdGggaW4gVVJJICovCi0rCQlpZiAocmVhbHBhdGgo bW9kdWxlX3BhdGgsIGNhbm9uaWNhbF9wcm92aWRlcikgPT0gTlVMTCkgewotKwkJCXZlcmJvc2Uo ImZhaWxlZCBQS0NTIzExIHByb3ZpZGVyIFwiJS4xMDBzXCI6IHJlYWxwYXRoOiAlcyIsCi0rCQkJ ICAgIG1vZHVsZV9wYXRoLCBzdHJlcnJvcihlcnJubykpOwotKwkJCWZyZWUobW9kdWxlX3BhdGgp OwotKwkJCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwotKwkJCXJldHVybiBOVUxMOwotKwkJfQot KwkJZnJlZShtb2R1bGVfcGF0aCk7Ci0rCQlpZiAobWF0Y2hfcGF0dGVybl9saXN0KGNhbm9uaWNh bF9wcm92aWRlciwgYWxsb3dlZF9wcm92aWRlcnMsIDApICE9IDEpIHsKLSsJCQl2ZXJib3NlKCJy ZWZ1c2luZyBQS0NTIzExIHByb3ZpZGVyIFwiJS4xMDBzXCI6ICIKLSsJCQkgICAgIm5vdCBhbGxv d2VkIiwgY2Fub25pY2FsX3Byb3ZpZGVyKTsKLSsJCQlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsK LSsJCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsKLSsJCS8qIGNvcHkgdmVyaWZpZWQgYW5kIHNhbml0 aXplZCBwcm92aWRlciBwYXRoIGJhY2sgdG8gdGhlIHVyaSAqLwotKwkJaWYgKHVyaSkgewotKwkJ CWZyZWUodXJpLT5tb2R1bGVfcGF0aCk7Ci0rCQkJdXJpLT5tb2R1bGVfcGF0aCA9IHhzdHJkdXAo Y2Fub25pY2FsX3Byb3ZpZGVyKTsKLSsJCX0KLSsJfQotKwotKwlpZiAodXJpKSB7Ci0rCQlzYW5l X3VyaSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7Ci0rCQlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsK LSsJCXJldHVybiBzYW5lX3VyaTsKLSsJfSBlbHNlIHsKLSsJCXJldHVybiB4c3RyZHVwKGNhbm9u aWNhbF9wcm92aWRlcik7IC8qIHNpbXBsZSBwYXRoICovCi0rCX0KLSt9Ci0rCi0gc3RhdGljIHZv aWQKLSBwcm9jZXNzX2FkZF9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5ICplKQotIHsKLS0JY2hh ciAqcHJvdmlkZXIgPSBOVUxMLCAqcGluID0gTlVMTCwgY2Fub25pY2FsX3Byb3ZpZGVyW1BBVEhf TUFYXTsKLSsJY2hhciAqcHJvdmlkZXIgPSBOVUxMLCAqcGluID0gTlVMTCwgKnNhbmVfdXJpID0g TlVMTDsKLSAJY2hhciAqKmNvbW1lbnRzID0gTlVMTDsKLSAJaW50IHIsIGksIGNvdW50ID0gMCwg c3VjY2VzcyA9IDAsIGNvbmZpcm0gPSAwOwotIAl1X2ludCBzZWNvbmRzID0gMDsKLUBAIC0xNTc4 LDI1ICsxNjQzLDE4IEBAIHByb2Nlc3NfYWRkX3NtYXJ0Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUp Ci0gCQkgICAgInByb3ZpZGVycyBpcyBkaXNhYmxlZCIsIHByb3ZpZGVyKTsKLSAJCWdvdG8gc2Vu ZDsKLSAJfQotLQlpZiAocmVhbHBhdGgocHJvdmlkZXIsIGNhbm9uaWNhbF9wcm92aWRlcikgPT0g TlVMTCkgewotLQkJdmVyYm9zZSgiZmFpbGVkIFBLQ1MjMTEgYWRkIG9mIFwiJS4xMDBzXCI6IHJl YWxwYXRoOiAlcyIsCi0tCQkgICAgcHJvdmlkZXIsIHN0cmVycm9yKGVycm5vKSk7Ci0tCQlnb3Rv IHNlbmQ7Ci0tCX0KLS0JaWYgKG1hdGNoX3BhdHRlcm5fbGlzdChjYW5vbmljYWxfcHJvdmlkZXIs IGFsbG93ZWRfcHJvdmlkZXJzLCAwKSAhPSAxKSB7Ci0tCQl2ZXJib3NlKCJyZWZ1c2luZyBQS0NT IzExIGFkZCBvZiBcIiUuMTAwc1wiOiAiCi0tCQkgICAgInByb3ZpZGVyIG5vdCBhbGxvd2VkIiwg Y2Fub25pY2FsX3Byb3ZpZGVyKTsKLSsJc2FuZV91cmkgPSBzYW5pdGl6ZV9wa2NzMTFfcHJvdmlk ZXIocHJvdmlkZXIpOwotKwlpZiAoc2FuZV91cmkgPT0gTlVMTCkKLSAJCWdvdG8gc2VuZDsKLS0J fQotLQlkZWJ1Z19mKCJhZGQgJS4xMDBzIiwgY2Fub25pY2FsX3Byb3ZpZGVyKTsKLSAJaWYgKGxp ZmV0aW1lICYmICFkZWF0aCkKLSAJCWRlYXRoID0gbW9ub3RpbWUoKSArIGxpZmV0aW1lOwotIAot LQljb3VudCA9IHBrY3MxMV9hZGRfcHJvdmlkZXIoY2Fub25pY2FsX3Byb3ZpZGVyLCBwaW4sICZr ZXlzLCAmY29tbWVudHMpOwotKwlkZWJ1Z19mKCJhZGQgJS4xMDBzIiwgc2FuZV91cmkpOwotKwlj b3VudCA9IHBrY3MxMV9hZGRfcHJvdmlkZXIoc2FuZV91cmksIHBpbiwgJmtleXMsICZjb21tZW50 cyk7Ci0gCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gCQlpZiAoY29tbWVudHNbaV0g PT0gTlVMTCB8fCBjb21tZW50c1tpXVswXSA9PSAnXDAnKSB7Ci0gCQkJZnJlZShjb21tZW50c1tp XSk7Ci0tCQkJY29tbWVudHNbaV0gPSB4c3RyZHVwKGNhbm9uaWNhbF9wcm92aWRlcik7Ci0rCQkJ Y29tbWVudHNbaV0gPSB4c3RyZHVwKHNhbmVfdXJpKTsKLSAJCX0KLSAJCWZvciAoaiA9IDA7IGog PCBuY2VydHM7IGorKykgewotIAkJCWlmICghc3Noa2V5X2lzX2NlcnQoY2VydHNbal0pKQotQEAg LTE2MDYsMTMgKzE2NjQsMTMgQEAgcHJvY2Vzc19hZGRfc21hcnRjYXJkX2tleShTb2NrZXRFbnRy eSAqZSkKLSAJCQlpZiAocGtjczExX21ha2VfY2VydChrZXlzW2ldLCBjZXJ0c1tqXSwgJmspICE9 IDApCi0gCQkJCWNvbnRpbnVlOwotIAkJCWFkZF9wMTFfaWRlbnRpdHkoaywgeHN0cmR1cChjb21t ZW50c1tpXSksCi0tCQkJICAgIGNhbm9uaWNhbF9wcm92aWRlciwgZGVhdGgsIGNvbmZpcm0sCi0r CQkJICAgIHNhbmVfdXJpLCBkZWF0aCwgY29uZmlybSwKLSAJCQkgICAgZGVzdF9jb25zdHJhaW50 cywgbmRlc3RfY29uc3RyYWludHMpOwotIAkJCXN1Y2Nlc3MgPSAxOwotIAkJfQotIAkJaWYgKCFj ZXJ0X29ubHkgJiYgbG9va3VwX2lkZW50aXR5KGtleXNbaV0pID09IE5VTEwpIHsKLSAJCQlhZGRf cDExX2lkZW50aXR5KGtleXNbaV0sIGNvbW1lbnRzW2ldLAotLQkJCSAgICBjYW5vbmljYWxfcHJv dmlkZXIsIGRlYXRoLCBjb25maXJtLAotKwkJCSAgICBzYW5lX3VyaSwgZGVhdGgsIGNvbmZpcm0s Ci0gCQkJICAgIGRlc3RfY29uc3RyYWludHMsIG5kZXN0X2NvbnN0cmFpbnRzKTsKLSAJCQlrZXlz W2ldID0gTlVMTDsJCS8qIHRyYW5zZmVycmVkICovCi0gCQkJY29tbWVudHNbaV0gPSBOVUxMOwkv KiB0cmFuc2ZlcnJlZCAqLwotQEAgLTE2MjUsNiArMTY4Myw3IEBAIHByb2Nlc3NfYWRkX3NtYXJ0 Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUpCi0gc2VuZDoKLSAJZnJlZShwaW4pOwotIAlmcmVlKHBy b3ZpZGVyKTsKLSsJZnJlZShzYW5lX3VyaSk7Ci0gCWZyZWUoa2V5cyk7Ci0gCWZyZWUoY29tbWVu dHMpOwotIAlmcmVlX2Rlc3RfY29uc3RyYWludHMoZGVzdF9jb25zdHJhaW50cywgbmRlc3RfY29u c3RyYWludHMpOwotQEAgLTE2MzcsOCArMTY5Niw4IEBAIHNlbmQ6Ci0gc3RhdGljIHZvaWQKLSBw cm9jZXNzX3JlbW92ZV9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5ICplKQotIHsKLS0JY2hhciAq cHJvdmlkZXIgPSBOVUxMLCAqcGluID0gTlVMTCwgY2Fub25pY2FsX3Byb3ZpZGVyW1BBVEhfTUFY XTsKLS0JaW50IHIsIHN1Y2Nlc3MgPSAwOwotKwljaGFyICpwcm92aWRlciA9IE5VTEwsICpwaW4g PSBOVUxMLCAqc2FuZV91cmkgPSBOVUxMOwotKwlpbnQgciwgc3VjY2VzcyA9IDAsIHJlbW92ZWRf Y291bnQgPSAwOwotIAlJZGVudGl0eSAqaWQsICpueHQ7Ci0gCi0gCWRlYnVnMl9mKCJlbnRlcmlu ZyIpOwotQEAgLTE2NDksMzAgKzE3MDgsMzggQEAgcHJvY2Vzc19yZW1vdmVfc21hcnRjYXJkX2tl eShTb2NrZXRFbnRyeSAqZSkKLSAJfQotIAlmcmVlKHBpbik7Ci0gCi0tCWlmIChyZWFscGF0aChw cm92aWRlciwgY2Fub25pY2FsX3Byb3ZpZGVyKSA9PSBOVUxMKSB7Ci0tCQl2ZXJib3NlKCJmYWls ZWQgUEtDUyMxMSBhZGQgb2YgXCIlLjEwMHNcIjogcmVhbHBhdGg6ICVzIiwKLS0JCSAgICBwcm92 aWRlciwgc3RyZXJyb3IoZXJybm8pKTsKLSsJc2FuZV91cmkgPSBzYW5pdGl6ZV9wa2NzMTFfcHJv dmlkZXIocHJvdmlkZXIpOwotKwlpZiAoc2FuZV91cmkgPT0gTlVMTCkKLSAJCWdvdG8gc2VuZDsK LS0JfQotIAotLQlkZWJ1Z19mKCJyZW1vdmUgJS4xMDBzIiwgY2Fub25pY2FsX3Byb3ZpZGVyKTsK LSsJZGVidWdfZigicmVtb3ZlICUuMTAwcyIsIHNhbmVfdXJpKTsKLSAJZm9yIChpZCA9IFRBSUxR X0ZJUlNUKCZpZHRhYi0+aWRsaXN0KTsgaWQ7IGlkID0gbnh0KSB7Ci0gCQlueHQgPSBUQUlMUV9O RVhUKGlkLCBuZXh0KTsKLSAJCS8qIFNraXAgZmlsZS0tYmFzZWQga2V5cyAqLwotIAkJaWYgKGlk LT5wcm92aWRlciA9PSBOVUxMKQotIAkJCWNvbnRpbnVlOwotLQkJaWYgKCFzdHJjbXAoY2Fub25p Y2FsX3Byb3ZpZGVyLCBpZC0+cHJvdmlkZXIpKSB7Ci0rCQlpZiAoIXN0cmNtcChzYW5lX3VyaSwg aWQtPnByb3ZpZGVyKSkgewotIAkJCVRBSUxRX1JFTU9WRSgmaWR0YWItPmlkbGlzdCwgaWQsIG5l eHQpOwotIAkJCWZyZWVfaWRlbnRpdHkoaWQpOwotIAkJCWlkdGFiLT5uZW50cmllcy0tOwotKwkJ CXJlbW92ZWRfY291bnQrKzsKLSAJCX0KLSAJfQotLQlpZiAocGtjczExX2RlbF9wcm92aWRlcihj YW5vbmljYWxfcHJvdmlkZXIpID09IDApCi0rCS8qIE9ubHkgc3VjY2VlZCBpZiB3ZSBhY3R1YWxs eSByZW1vdmVkIGtleXMgYW5kIHVubG9hZGVkIHByb3ZpZGVyICovCi0rCWlmIChyZW1vdmVkX2Nv dW50ID4gMCAmJiBwa2NzMTFfZGVsX3Byb3ZpZGVyKHNhbmVfdXJpKSA9PSAwKSB7Ci0gCQlzdWNj ZXNzID0gMTsKLS0JZWxzZQotKwkJZGVidWdfZigicmVtb3ZlZCAlZCBrZXkocykgZnJvbSBwcm92 aWRlciAlcyIsCi0rCQkgICAgcmVtb3ZlZF9jb3VudCwgc2FuZV91cmkpOwotKwl9IGVsc2UgaWYg KHJlbW92ZWRfY291bnQgPT0gMCkgewotKwkJZXJyb3JfZigibm8gbWF0Y2hpbmcga2V5cyBmb3Vu ZCBmb3IgcHJvdmlkZXIgJXMiLCBzYW5lX3VyaSk7Ci0rCQkvKiBTdGlsbCB0cnkgdG8gY2xlYW4g dXAgcHJvdmlkZXIgaWYgaXQgZXhpc3RzICovCi0rCQlwa2NzMTFfZGVsX3Byb3ZpZGVyKHNhbmVf dXJpKTsKLSsJfSBlbHNlIHsKLSAJCWVycm9yX2YoInBrY3MxMV9kZWxfcHJvdmlkZXIgZmFpbGVk Iik7Ci0rCX0KLSBzZW5kOgotIAlmcmVlKHByb3ZpZGVyKTsKLSsJZnJlZShzYW5lX3VyaSk7Ci0g CXNlbmRfc3RhdHVzKGUsIHN1Y2Nlc3MpOwotIH0KLSAjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAq LwotZGlmZiAtLWdpdCBhL3NzaC1rZXlnZW4uYyBiL3NzaC1rZXlnZW4uYwotaW5kZXggMTI0MzBl NmE0Li4yNjY0NjJmMDcgMTAwNjQ0Ci0tLS0gYS9zc2gta2V5Z2VuLmMKLSsrKyBiL3NzaC1rZXln ZW4uYwotQEAgLTgzMSw4ICs4MzEsMTEgQEAgZG9fZG93bmxvYWQoc3RydWN0IHBhc3N3ZCAqcHcp Ci0gCQkJZnJlZShmcCk7Ci0gCQl9IGVsc2UgewotIAkJCSh2b2lkKSBzc2hrZXlfd3JpdGUoa2V5 c1tpXSwgc3Rkb3V0KTsgLyogWFhYIGNoZWNrICovCi0tCQkJZnByaW50ZihzdGRvdXQsICIlcyVz XG4iLAotLQkJCSAgICAqKGNvbW1lbnRzW2ldKSA9PSAnXDAnID8gIiIgOiAiICIsIGNvbW1lbnRz W2ldKTsKLSsJCQlpZiAoKihjb21tZW50c1tpXSkgIT0gJ1wwJykgewotKwkJCQlmcHJpbnRmKHN0 ZG91dCwgIiAlcyIsIGNvbW1lbnRzW2ldKTsKLSsJCQl9Ci0rCQkJKHZvaWQpIHBrY3MxMV91cmlf d3JpdGUoa2V5c1tpXSwgc3Rkb3V0KTsKLSsJCQlmcHJpbnRmKHN0ZG91dCwgIlxuIik7Ci0gCQl9 Ci0gCQlmcmVlKGNvbW1lbnRzW2ldKTsKLSAJCXNzaGtleV9mcmVlKGtleXNbaV0pOwotZGlmZiAt LWdpdCBhL3NzaC1wa2NzMTEtY2xpZW50LmMgYi9zc2gtcGtjczExLWNsaWVudC5jCi1pbmRleCAz MGE0Y2Y1ZGMuLjNmZDA1OGEwYyAxMDA2NDQKLS0tLSBhL3NzaC1wa2NzMTEtY2xpZW50LmMKLSsr KyBiL3NzaC1wa2NzMTEtY2xpZW50LmMKLUBAIC0xOCw2ICsxOCw3IEBACi0gCi0gI2luY2x1ZGUg ImluY2x1ZGVzLmgiCi0gCi0rI2lmZGVmIEVOQUJMRV9QS0NTMTEKLSAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+Ci0gI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0gI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K LUBAIC0zOCw2ICszOSw3IEBACi0gI2luY2x1ZGUgImF1dGhmZC5oIgotICNpbmNsdWRlICJhdG9t aWNpby5oIgotICNpbmNsdWRlICJzc2gtcGtjczExLmgiCi0rI2luY2x1ZGUgInNzaC1wa2NzMTEt dXJpLmgiCi0gI2luY2x1ZGUgInNzaGVyci5oIgotIAotIC8qIGJvcnJvd3MgY29kZSBmcm9tIHNm dHAtc2VydmVyIGFuZCBzc2gtYWdlbnQgKi8KLUBAIC0zNzksNiArMzgxLDE5IEBAIHBrY3MxMV9z dGFydF9oZWxwZXIoY29uc3QgY2hhciAqcGF0aCkKLSAJcmV0dXJuIGhlbHBlcjsKLSB9Ci0gCi0r aW50Ci0rcGtjczExX2FkZF9wcm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKnVyaSwg Y2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsIGNoYXIgKioqbGFiZWxzcCkKLSt7Ci0r CWludCBua2V5cyA9IDA7Ci0rCWNoYXIgKnByb3ZpZGVyX3VyaSA9IHBrY3MxMV91cmlfZ2V0KHVy aSk7Ci0rCi0rCWRlYnVnX2YoImNhbGxlZCwgcHJvdmlkZXJfdXJpID0gJXMiLCBwcm92aWRlcl91 cmkpOwotKwotKwlua2V5cyA9IHBrY3MxMV9hZGRfcHJvdmlkZXIocHJvdmlkZXJfdXJpLCBwaW4s IGtleXAsIGxhYmVsc3ApOwotKwotKwlyZXR1cm4gbmtleXM7Ci0rfQotKwotIGludAotIHBrY3Mx MV9hZGRfcHJvdmlkZXIoY2hhciAqbmFtZSwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtl eXNwLAotICAgICBjaGFyICoqKmxhYmVsc3ApCi1AQCAtMzkwLDYgKzQwNSw4IEBAIHBrY3MxMV9h ZGRfcHJvdmlkZXIoY2hhciAqbmFtZSwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNw LAotIAlzdHJ1Y3Qgc3NoYnVmICptc2c7Ci0gCXN0cnVjdCBoZWxwZXIgKmhlbHBlcjsKLSAKLSsJ ZGVidWdfZigiY2FsbGVkLCBuYW1lID0gJXMiLCBuYW1lKTsKLSsKLSAJaWYgKChoZWxwZXIgPSBo ZWxwZXJfYnlfcHJvdmlkZXIobmFtZSkpID09IE5VTEwgJiYKLSAJICAgIChoZWxwZXIgPSBwa2Nz MTFfc3RhcnRfaGVscGVyKG5hbWUpKSA9PSBOVUxMKQotIAkJcmV0dXJuIC0xOwotQEAgLTQxNCw2 ICs0MzEsNyBAQCBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBpbiwgc3Ry dWN0IHNzaGtleSAqKiprZXlzcCwKLSAJCSprZXlzcCA9IHhjYWxsb2MobmtleXMsIHNpemVvZihz dHJ1Y3Qgc3Noa2V5ICopKTsKLSAJCWlmIChsYWJlbHNwKQotIAkJCSpsYWJlbHNwID0geGNhbGxv Yyhua2V5cywgc2l6ZW9mKGNoYXIgKikpOwotKwkJZGVidWdfZigibmtleXMgPSAldSIsIG5rZXlz KTsKLSAJCWZvciAoaSA9IDA7IGkgPCBua2V5czsgaSsrKSB7Ci0gCQkJLyogWFhYIGNsZWFuIHVw IHByb3Blcmx5IGluc3RlYWQgb2YgZmF0YWwoKSAqLwotIAkJCWlmICgociA9IHNzaGtleV9mcm9t cyhtc2csICZrKSkgIT0gMCB8fAotQEAgLTQ5NywzICs1MTUsNCBAQCBwa2NzMTFfa2V5X2ZyZWUo c3RydWN0IHNzaGtleSAqa2V5KQotIAlpZiAoaGVscGVyLT5ua2V5YmxvYnMgPT0gMCkKLSAJCWhl bHBlcl90ZXJtaW5hdGUoaGVscGVyKTsKLSB9Ci0rI2VuZGlmCi1kaWZmIC0tZ2l0IGEvc3NoLXBr Y3MxMS11cmkuYyBiL3NzaC1wa2NzMTEtdXJpLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRl eCAwMDAwMDAwMDAuLmQ1YjA3NDU5MgotLS0tIC9kZXYvbnVsbAotKysrIGIvc3NoLXBrY3MxMS11 cmkuYwotQEAgLTAsMCArMSw0MzggQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAxNyBSZWQg SGF0Ci0rICoKLSsgKiBBdXRob3JzOiBKYWt1YiBKZWxlbiA8amplbGVuQHJlZGhhdC5jb20+Ci0r ICoKLSsgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0 aGlzIHNvZnR3YXJlIGZvciBhbnkKLSsgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMg aGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0rICogY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSsg KgotKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJ U0NMQUlNUyBBTEwgV0FSUkFOVElFUwotKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUg SU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSsgKiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgot KyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgT1IgQU5ZIERBTUFHRVMKLSsgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0Yg VVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSsgKiBBQ1RJT04gT0YgQ09OVFJB Q1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgot KyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMg U09GVFdBUkUuCi0rICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rCi0rI2lmZGVmIEVO QUJMRV9QS0NTMTEKLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKwotKyNpbmNsdWRlICJzc2hrZXkuaCIKLSsjaW5jbHVk ZSAic3NoYnVmLmgiCi0rI2luY2x1ZGUgImxvZy5oIgotKwotKyNkZWZpbmUgQ1JZUFRPS0lfQ09N UEFUCi0rI2luY2x1ZGUgInBrY3MxMS5oIgotKwotKyNpbmNsdWRlICJzc2gtcGtjczExLXVyaS5o IgotKwotKyNkZWZpbmUgUEtDUzExX1VSSV9QQVRIX1NFUEFSQVRPUiAiOyIKLSsjZGVmaW5lIFBL Q1MxMV9VUklfUVVFUllfU0VQQVJBVE9SICImIgotKyNkZWZpbmUgUEtDUzExX1VSSV9WQUxVRV9T RVBBUkFUT1IgIj0iCi0rI2RlZmluZSBQS0NTMTFfVVJJX0lEICJpZCIKLSsjZGVmaW5lIFBLQ1Mx MV9VUklfVE9LRU4gInRva2VuIgotKyNkZWZpbmUgUEtDUzExX1VSSV9PQkpFQ1QgIm9iamVjdCIK LSsjZGVmaW5lIFBLQ1MxMV9VUklfTElCX01BTlVGICJsaWJyYXJ5LW1hbnVmYWN0dXJlciIKLSsj ZGVmaW5lIFBLQ1MxMV9VUklfTUFOVUYgIm1hbnVmYWN0dXJlciIKLSsjZGVmaW5lIFBLQ1MxMV9V UklfU0VSSUFMICJzZXJpYWwiCi0rI2RlZmluZSBQS0NTMTFfVVJJX01PRFVMRV9QQVRIICJtb2R1 bGUtcGF0aCIKLSsjZGVmaW5lIFBLQ1MxMV9VUklfUElOX1ZBTFVFICJwaW4tdmFsdWUiCi0rCi0r LyogS2V5d29yZCB0b2tlbnMuICovCi0rdHlwZWRlZiBlbnVtIHsKLSsJcElkLCBwVG9rZW4sIHBP YmplY3QsIHBMaWJyYXJ5TWFudWZhY3R1cmVyLCBwTWFudWZhY3R1cmVyLCBwU2VyaWFsLAotKwlw TW9kdWxlUGF0aCwgcFBpblZhbHVlLCBwQmFkT3B0aW9uCi0rfSBwa2NzMTF1cmlPcENvZGVzOwot KwotKy8qIFRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRva2Vucy4gKi8KLStzdGF0aWMg c3RydWN0IHsKLSsJY29uc3QgY2hhciAqbmFtZTsKLSsJcGtjczExdXJpT3BDb2RlcyBvcGNvZGU7 Ci0rfSBrZXl3b3Jkc1tdID0gewotKwl7IFBLQ1MxMV9VUklfSUQsIHBJZCB9LAotKwl7IFBLQ1Mx MV9VUklfVE9LRU4sIHBUb2tlbiB9LAotKwl7IFBLQ1MxMV9VUklfT0JKRUNULCBwT2JqZWN0IH0s Ci0rCXsgUEtDUzExX1VSSV9MSUJfTUFOVUYsIHBMaWJyYXJ5TWFudWZhY3R1cmVyIH0sCi0rCXsg UEtDUzExX1VSSV9NQU5VRiwgcE1hbnVmYWN0dXJlciB9LAotKwl7IFBLQ1MxMV9VUklfU0VSSUFM LCBwU2VyaWFsIH0sCi0rCXsgUEtDUzExX1VSSV9NT0RVTEVfUEFUSCwgcE1vZHVsZVBhdGggfSwK LSsJeyBQS0NTMTFfVVJJX1BJTl9WQUxVRSwgcFBpblZhbHVlIH0sCi0rCXsgTlVMTCwgcEJhZE9w dGlvbiB9Ci0rfTsKLSsKLStzdGF0aWMgcGtjczExdXJpT3BDb2RlcwotK3BhcnNlX3Rva2VuKGNv bnN0IGNoYXIgKmNwKQotK3sKLSsJdV9pbnQgaTsKLSsKLSsJZm9yIChpID0gMDsga2V5d29yZHNb aV0ubmFtZTsgaSsrKQotKwkJaWYgKHN0cm5jYXNlY21wKGNwLCBrZXl3b3Jkc1tpXS5uYW1lLAot KwkJICAgIHN0cmxlbihrZXl3b3Jkc1tpXS5uYW1lKSkgPT0gMCkKLSsJCQlyZXR1cm4ga2V5d29y ZHNbaV0ub3Bjb2RlOwotKwotKwlyZXR1cm4gcEJhZE9wdGlvbjsKLSt9Ci0rCi0raW50Ci0rcGVy Y2VudF9kZWNvZGUoY2hhciAqZGF0YSwgY2hhciAqKm91dHApCi0rewotKwljaGFyIHRtcFszXTsK LSsJY2hhciAqb3V0LCAqdG1wX2VuZDsKLSsJY2hhciAqcCA9IGRhdGE7Ci0rCWxvbmcgdmFsdWU7 Ci0rCXNpemVfdCBvdXRsZW4gPSAwOwotKwotKwlvdXQgPSBtYWxsb2Moc3RybGVuKGRhdGEpKzEp OyAvKiB1cHBlciBib3VuZCAqLwotKwlpZiAob3V0ID09IE5VTEwpCi0rCQlyZXR1cm4gLTE7Ci0r CXdoaWxlICgqcCAhPSAnXDAnKSB7Ci0rCQlzd2l0Y2ggKCpwKSB7Ci0rCQljYXNlICclJzoKLSsJ CQlwKys7Ci0rCQkJaWYgKCpwID09ICdcMCcpCi0rCQkJCWdvdG8gZmFpbDsKLSsJCQl0bXBbMF0g PSAqcCsrOwotKwkJCWlmICgqcCA9PSAnXDAnKQotKwkJCQlnb3RvIGZhaWw7Ci0rCQkJdG1wWzFd ID0gKnArKzsKLSsJCQl0bXBbMl0gPSAnXDAnOwotKwkJCXRtcF9lbmQgPSBOVUxMOwotKwkJCXZh bHVlID0gc3RydG9sKHRtcCwgJnRtcF9lbmQsIDE2KTsKLSsJCQlpZiAodG1wX2VuZCAhPSB0bXAr MikKLSsJCQkJZ290byBmYWlsOwotKwkJCWVsc2UKLSsJCQkJb3V0W291dGxlbisrXSA9IChjaGFy KSB2YWx1ZTsKLSsJCQlicmVhazsKLSsJCWRlZmF1bHQ6Ci0rCQkJb3V0W291dGxlbisrXSA9ICpw Kys7Ci0rCQkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsKLSsJLyogemVybyB0ZXJtaW5hdGUgKi8KLSsJ b3V0W291dGxlbl0gPSAnXDAnOwotKwkqb3V0cCA9IG91dDsKLSsJcmV0dXJuIG91dGxlbjsKLStm YWlsOgotKwlmcmVlKG91dCk7Ci0rCXJldHVybiAtMTsKLSt9Ci0rCi0rc3RydWN0IHNzaGJ1ZiAq Ci0rcGVyY2VudF9lbmNvZGUoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbmd0aCwgY29uc3Qg Y2hhciAqYWxsb3dfbGlzdCkKLSt7Ci0rCXN0cnVjdCBzc2hidWYgKmIgPSBOVUxMOwotKwljaGFy IHRtcFs0XSwgKmNwOwotKwlzaXplX3QgaTsKLSsKLSsJaWYgKChiID0gc3NoYnVmX25ldygpKSA9 PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg ewotKwkJY3AgPSBzdHJjaHIoYWxsb3dfbGlzdCwgZGF0YVtpXSk7Ci0rCQkvKiBpZiBjIGlzIHNw ZWNpZmllZCBhcyAnXDAnIHBvaW50ZXIgdG8gdGVybWluYXRvciBpcyByZXR1cm5lZCAhISAqLwot KwkJaWYgKGNwICE9IE5VTEwgJiYgKmNwICE9ICdcMCcpIHsKLSsJCQlpZiAoc3NoYnVmX3B1dChi LCAmZGF0YVtpXSwgMSkgIT0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQl9IGVsc2UKLSsJCQlpZiAo c25wcmludGYodG1wLCA0LCAiJSUlMDJYIiwgKHVuc2lnbmVkIGNoYXIpIGRhdGFbaV0pIDwgMwot KwkJCSAgICB8fCBzc2hidWZfcHV0KGIsIHRtcCwgMykgIT0gMCkKLSsJCQkJZ290byBlcnI7Ci0r CX0KLSsJaWYgKHNzaGJ1Zl9wdXQoYiwgIlwwIiwgMSkgPT0gMCkKLSsJCXJldHVybiBiOwotK2Vy cjoKLSsJc3NoYnVmX2ZyZWUoYik7Ci0rCXJldHVybiBOVUxMOwotK30KLSsKLStjaGFyICoKLStw a2NzMTFfdXJpX2FwcGVuZChjaGFyICpwYXJ0LCBjb25zdCBjaGFyICpzZXBhcmF0b3IsIGNvbnN0 IGNoYXIgKmtleSwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqdmFsdWUpCi0rewotKwljaGFyICpuZXdf cGFydDsKLSsJc2l6ZV90IHNpemUgPSAwOwotKwotKwlpZiAodmFsdWUgPT0gTlVMTCkKLSsJCXJl dHVybiBOVUxMOwotKwotKwlzaXplID0gYXNwcmludGYoJm5ld19wYXJ0LAotKwkgICAgIiVzJXMl cyIgIFBLQ1MxMV9VUklfVkFMVUVfU0VQQVJBVE9SICIlcyIsCi0rCSAgICAocGFydCAhPSBOVUxM ID8gcGFydCA6ICIiKSwKLSsJICAgIChwYXJ0ICE9IE5VTEwgPyBzZXBhcmF0b3IgOiAiIiksCi0r CSAgICBrZXksIHNzaGJ1Zl9wdHIodmFsdWUpKTsKLSsJc3NoYnVmX2ZyZWUodmFsdWUpOwotKwlm cmVlKHBhcnQpOwotKwotKwlpZiAoc2l6ZSA8PSAwKQotKwkJcmV0dXJuIE5VTEw7Ci0rCXJldHVy biBuZXdfcGFydDsKLSt9Ci0rCi0rY2hhciAqCi0rcGtjczExX3VyaV9nZXQoc3RydWN0IHBrY3Mx MV91cmkgKnVyaSkKLSt7Ci0rCXNpemVfdCBzaXplID0gMDsKLSsJY2hhciAqcCA9IE5VTEwsICpw YXRoID0gTlVMTCwgKnF1ZXJ5ID0gTlVMTDsKLSsKLSsJLyogY29tcG9zZSBhIHBlcmNlbnQtZW5j b2RlZCBJRCAqLwotKwlpZiAodXJpLT5pZF9sZW4gPiAwKSB7Ci0rCQlzdHJ1Y3Qgc3NoYnVmICpr ZXlfaWQgPSBwZXJjZW50X2VuY29kZSh1cmktPmlkLCB1cmktPmlkX2xlbiwgIiIpOwotKwkJcGF0 aCA9IHBrY3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IsCi0r CQkgICAgUEtDUzExX1VSSV9JRCwga2V5X2lkKTsKLSsJCWlmIChwYXRoID09IE5VTEwpCi0rCQkJ Z290byBlcnI7Ci0rCX0KLSsKLSsJLyogV3JpdGUgb2JqZWN0IGxhYmVsICovCi0rCWlmICh1cmkt Pm9iamVjdCkgewotKwkJc3RydWN0IHNzaGJ1ZiAqbGFiZWwgPSBwZXJjZW50X2VuY29kZSh1cmkt Pm9iamVjdCwgc3RybGVuKHVyaS0+b2JqZWN0KSwKLSsJCSAgICBQS0NTMTFfVVJJX1dISVRFTElT VCk7Ci0rCQlwYXRoID0gcGtjczExX3VyaV9hcHBlbmQocGF0aCwgUEtDUzExX1VSSV9QQVRIX1NF UEFSQVRPUiwKLSsJCSAgICBQS0NTMTFfVVJJX09CSkVDVCwgbGFiZWwpOwotKwkJaWYgKHBhdGgg PT0gTlVMTCkKLSsJCQlnb3RvIGVycjsKLSsJfQotKwotKwkvKiBXcml0ZSB0b2tlbiBsYWJlbCAq LwotKwlpZiAodXJpLT50b2tlbikgewotKwkJc3RydWN0IHNzaGJ1ZiAqbGFiZWwgPSBwZXJjZW50 X2VuY29kZSh1cmktPnRva2VuLCBzdHJsZW4odXJpLT50b2tlbiksCi0rCQkgICAgUEtDUzExX1VS SV9XSElURUxJU1QpOwotKwkJcGF0aCA9IHBrY3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9V UklfUEFUSF9TRVBBUkFUT1IsCi0rCQkgICAgUEtDUzExX1VSSV9UT0tFTiwgbGFiZWwpOwotKwkJ aWYgKHBhdGggPT0gTlVMTCkKLSsJCQlnb3RvIGVycjsKLSsJfQotKwotKwkvKiBXcml0ZSBtYW51 ZmFjdHVyZXIgKi8KLSsJaWYgKHVyaS0+bWFudWYpIHsKLSsJCXN0cnVjdCBzc2hidWYgKm1hbnVm ID0gcGVyY2VudF9lbmNvZGUodXJpLT5tYW51ZiwKLSsJCSAgICBzdHJsZW4odXJpLT5tYW51Ziks IFBLQ1MxMV9VUklfV0hJVEVMSVNUKTsKLSsJCXBhdGggPSBwa2NzMTFfdXJpX2FwcGVuZChwYXRo LCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAotKwkJICAgIFBLQ1MxMV9VUklfTUFOVUYsIG1h bnVmKTsKLSsJCWlmIChwYXRoID09IE5VTEwpCi0rCQkJZ290byBlcnI7Ci0rCX0KLSsKLSsJLyog V3JpdGUgc2VyaWFsICovCi0rCWlmICh1cmktPnNlcmlhbCkgewotKwkJc3RydWN0IHNzaGJ1ZiAq c2VyaWFsID0gcGVyY2VudF9lbmNvZGUodXJpLT5zZXJpYWwsCi0rCQkgICAgc3RybGVuKHVyaS0+ c2VyaWFsKSwgUEtDUzExX1VSSV9XSElURUxJU1QpOwotKwkJcGF0aCA9IHBrY3MxMV91cmlfYXBw ZW5kKHBhdGgsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IsCi0rCQkgICAgUEtDUzExX1VSSV9T RVJJQUwsIHNlcmlhbCk7Ci0rCQlpZiAocGF0aCA9PSBOVUxMKQotKwkJCWdvdG8gZXJyOwotKwl9 Ci0rCi0rCS8qIFdyaXRlIG1vZHVsZV9wYXRoICovCi0rCWlmICh1cmktPm1vZHVsZV9wYXRoKSB7 Ci0rCQlzdHJ1Y3Qgc3NoYnVmICptb2R1bGUgPSBwZXJjZW50X2VuY29kZSh1cmktPm1vZHVsZV9w YXRoLAotKwkJICAgIHN0cmxlbih1cmktPm1vZHVsZV9wYXRoKSwgUEtDUzExX1VSSV9XSElURUxJ U1QgIi8iKTsKLSsJCXF1ZXJ5ID0gcGtjczExX3VyaV9hcHBlbmQocXVlcnksIFBLQ1MxMV9VUklf UVVFUllfU0VQQVJBVE9SLAotKwkJICAgIFBLQ1MxMV9VUklfTU9EVUxFX1BBVEgsIG1vZHVsZSk7 Ci0rCQlpZiAocXVlcnkgPT0gTlVMTCkKLSsJCQlnb3RvIGVycjsKLSsJfQotKwotKwlzaXplID0g YXNwcmludGYoJnAsIFBLQ1MxMV9VUklfU0NIRU1FICIlcyVzJXMiLAotKwkgICAgcGF0aCAhPSBO VUxMID8gcGF0aCA6ICIiLAotKwkgICAgcXVlcnkgIT0gTlVMTCA/ICI/IiA6ICIiLAotKwkgICAg cXVlcnkgIT0gTlVMTCA/IHF1ZXJ5IDogIiIpOwotK2VycjoKLSsJZnJlZShxdWVyeSk7Ci0rCWZy ZWUocGF0aCk7Ci0rCWlmIChzaXplIDw9IDApCi0rCQlyZXR1cm4gTlVMTDsKLSsJcmV0dXJuIHA7 Ci0rfQotKwotK3N0cnVjdCBwa2NzMTFfdXJpICoKLStwa2NzMTFfdXJpX2luaXQoKQotK3sKLSsJ c3RydWN0IHBrY3MxMV91cmkgKmQgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwa2NzMTFfdXJp KSk7Ci0rCXJldHVybiBkOwotK30KLSsKLSt2b2lkCi0rcGtjczExX3VyaV9jbGVhbnVwKHN0cnVj dCBwa2NzMTFfdXJpICpwa2NzMTEpCi0rewotKwlpZiAocGtjczExID09IE5VTEwpIHsKLSsJCXJl dHVybjsKLSsJfQotKwotKwlmcmVlKHBrY3MxMS0+aWQpOwotKwlmcmVlKHBrY3MxMS0+bW9kdWxl X3BhdGgpOwotKwlmcmVlKHBrY3MxMS0+dG9rZW4pOwotKwlmcmVlKHBrY3MxMS0+b2JqZWN0KTsK LSsJZnJlZShwa2NzMTEtPmxpYl9tYW51Zik7Ci0rCWZyZWUocGtjczExLT5tYW51Zik7Ci0rCWZy ZWUocGtjczExLT5zZXJpYWwpOwotKwlpZiAocGtjczExLT5waW4pCi0rCQlmcmVlemVybyhwa2Nz MTEtPnBpbiwgc3RybGVuKHBrY3MxMS0+cGluKSk7Ci0rCWZyZWUocGtjczExKTsKLSt9Ci0rCi0r aW50Ci0rcGtjczExX3VyaV9wYXJzZShjb25zdCBjaGFyICp1cmksIHN0cnVjdCBwa2NzMTFfdXJp ICpwa2NzMTEpCi0rewotKwljaGFyICpzYXZlcHRyMSwgKnNhdmVwdHIyLCAqc3RyMSwgKnN0cjIs ICp0b2s7Ci0rCWludCBydiA9IDAsIGxlbjsKLSsJY2hhciAqcCA9IE5VTEw7Ci0rCi0rCXNpemVf dCBzY2hlbWVfbGVuID0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKTsKLSsJaWYgKHN0cmxlbih1 cmkpIDwgc2NoZW1lX2xlbiB8fCAvKiBlbXB0eSBVUkkgbWF0Y2hlcyBldmVyeXRoaW5nICovCi0r CSAgICBzdHJuY21wKHVyaSwgUEtDUzExX1VSSV9TQ0hFTUUsIHNjaGVtZV9sZW4pICE9IDApIHsK LSsJCWVycm9yX2YoIlRoZSAnJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBQS0NTIzExIFVSSSIsIHVy aSk7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsJaWYgKHBrY3MxMSA9PSBOVUxMKSB7Ci0rCQll cnJvcl9mKCJCYWQgYXJndW1lbnRzLiBUaGUgcGtjczExIGNhbid0IGJlIG51bGwiKTsKLSsJCXJl dHVybiAtMTsKLSsJfQotKwotKwkvKiBza2lwIFVSSSBzY2hlbWEgbmFtZSAqLwotKwlwID0gc3Ry ZHVwKHVyaSk7Ci0rCXN0cjEgPSBwOwotKwotKwkvKiBldmVyeXRoaW5nIGJlZm9yZSA/ICovCi0r CXRvayA9IHN0cnRva19yKHN0cjEsICI/IiwgJnNhdmVwdHIxKTsKLSsJaWYgKHRvayA9PSBOVUxM KSB7Ci0rCQllcnJvcl9mKCJwazExLXBhdGggZXhwZWN0ZWQsIGdvdCBFT0YiKTsKLSsJCXJ2ID0g LTE7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwkvKiBza2lwIFVSSSBzY2hlbWEgbmFtZToKLSsJ ICogdGhlIHNjaGVtZSBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgc29tZXRoaW5nIGJl Zm9yZSAiPyIKLSsJICogYWxsb3dpbmcgZW1wdHkgcGsxMS1wYXRoLiBSZXN1bHRpbmcgdG9rZW4g YXQgd29yc3QgcG9pbnRpbmcgdG8KLSsJICogXDAgYnl0ZSAqLwotKwl0b2sgPSB0b2sgKyBzY2hl bWVfbGVuOwotKwotKwkvKiBwYXJzZSBwazExLXBhdGggKi8KLSsJZm9yIChzdHIyID0gdG9rOyA7 IHN0cjIgPSBOVUxMKSB7Ci0rCQljaGFyICoqY2hhcnB0ciwgKmFyZyA9IE5VTEw7Ci0rCQlwa2Nz MTF1cmlPcENvZGVzIG9wY29kZTsKLSsJCXRvayA9IHN0cnRva19yKHN0cjIsIFBLQ1MxMV9VUklf UEFUSF9TRVBBUkFUT1IsICZzYXZlcHRyMik7Ci0rCQlpZiAodG9rID09IE5VTEwpCi0rCQkJYnJl YWs7Ci0rCQlvcGNvZGUgPSBwYXJzZV90b2tlbih0b2spOwotKwkJaWYgKG9wY29kZSAhPSBwQmFk T3B0aW9uKQotKwkJCWFyZyA9IHRvayArIHN0cmxlbihrZXl3b3Jkc1tvcGNvZGVdLm5hbWUpICsg MTsgLyogc2VwYXJhdG9yICI9IiAqLwotKwotKwkJc3dpdGNoIChvcGNvZGUpIHsKLSsJCWNhc2Ug cElkOgotKwkJCS8qIENLQV9JRCAqLwotKwkJCWlmIChwa2NzMTEtPmlkICE9IE5VTEwpIHsKLSsJ CQkJdmVyYm9zZV9mKCJUaGUgaWQgYWxyZWFkeSBzZXQgaW4gdGhlIFBLQ1MjMTEgVVJJIik7Ci0r CQkJCXJ2ID0gLTE7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0KLSsJCQlsZW4gPSBwZXJjZW50X2Rl Y29kZShhcmcsICZwa2NzMTEtPmlkKTsKLSsJCQlpZiAobGVuIDw9IDApIHsKLSsJCQkJdmVyYm9z ZV9mKCJGYWlsZWQgdG8gcGVyY2VudC1kZWNvZGUgQ0tBX0lEOiAlcyIsIGFyZyk7Ci0rCQkJCXJ2 ID0gLTE7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0gZWxzZQotKwkJCQlwa2NzMTEtPmlkX2xlbiA9 IGxlbjsKLSsJCQlkZWJ1ZzNfZigiU2V0dGluZyBDS0FfSUQgPSAlcyBmcm9tIFBLQ1MjMTEgVVJJ IiwgYXJnKTsKLSsJCQlicmVhazsKLSsJCWNhc2UgcFRva2VuOgotKwkJCS8qIENLX1RPS0VOX0lO Rk8gLT4gbGFiZWwgKi8KLSsJCQljaGFycHRyID0gJnBrY3MxMS0+dG9rZW47Ci0rIHBhcnNlX3N0 cmluZzoKLSsJCQlpZiAoKmNoYXJwdHIgIT0gTlVMTCkgewotKwkJCQl2ZXJib3NlX2YoIlRoZSAl cyBhbHJlYWR5IHNldCBpbiB0aGUgUEtDUyMxMSBVUkkiLAotKwkJCQkgICAga2V5d29yZHNbb3Bj b2RlXS5uYW1lKTsKLSsJCQkJcnYgPSAtMTsKLSsJCQkJZ290byBvdXQ7Ci0rCQkJfQotKwkJCXBl cmNlbnRfZGVjb2RlKGFyZywgY2hhcnB0cik7Ci0rCQkJZGVidWczX2YoIlNldHRpbmcgJXMgPSAl cyBmcm9tIFBLQ1MjMTEgVVJJIiwKLSsJCQkgICAga2V5d29yZHNbb3Bjb2RlXS5uYW1lLCAqY2hh cnB0cik7Ci0rCQkJYnJlYWs7Ci0rCi0rCQljYXNlIHBPYmplY3Q6Ci0rCQkJLyogQ0tfVE9LRU5f SU5GTyAtPiBtYW51ZmFjdHVyZXJJRCAqLwotKwkJCWNoYXJwdHIgPSAmcGtjczExLT5vYmplY3Q7 Ci0rCQkJZ290byBwYXJzZV9zdHJpbmc7Ci0rCi0rCQljYXNlIHBNYW51ZmFjdHVyZXI6Ci0rCQkJ LyogQ0tfVE9LRU5fSU5GTyAtPiBtYW51ZmFjdHVyZXJJRCAqLwotKwkJCWNoYXJwdHIgPSAmcGtj czExLT5tYW51ZjsKLSsJCQlnb3RvIHBhcnNlX3N0cmluZzsKLSsKLSsJCWNhc2UgcFNlcmlhbDoK LSsJCQkvKiBDS19UT0tFTl9JTkZPIC0+IHNlcmlhbE51bWJlciAqLwotKwkJCWNoYXJwdHIgPSAm cGtjczExLT5zZXJpYWw7Ci0rCQkJZ290byBwYXJzZV9zdHJpbmc7Ci0rCi0rCQljYXNlIHBMaWJy YXJ5TWFudWZhY3R1cmVyOgotKwkJCS8qIENLX0lORk8gLT4gbWFudWZhY3R1cmVySUQgKi8KLSsJ CQljaGFycHRyID0gJnBrY3MxMS0+bGliX21hbnVmOwotKwkJCWdvdG8gcGFyc2Vfc3RyaW5nOwot KwotKwkJZGVmYXVsdDoKLSsJCQkvKiBVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHRoZSBVUkkg cGF0aCBTSE9VTEQgYmUgZXJyb3IgKi8KLSsJCQl2ZXJib3NlX2YoIlVua25vd24gcGFydCBvZiBw YXRoIGluIFBLQ1MjMTEgVVJJOiAlcyIsIHRvayk7Ci0rCQl9Ci0rCX0KLSsKLSsJdG9rID0gc3Ry dG9rX3IoTlVMTCwgIj8iLCAmc2F2ZXB0cjEpOwotKwlpZiAodG9rID09IE5VTEwpIHsKLSsJCWdv dG8gb3V0OwotKwl9Ci0rCS8qIHBhcnNlIHBrMTEtcXVlcnkgKG9wdGlvbmFsKSAqLwotKwlmb3Ig KHN0cjIgPSB0b2s7IDsgc3RyMiA9IE5VTEwpIHsKLSsJCWNoYXIgKmFyZzsKLSsJCXBrY3MxMXVy aU9wQ29kZXMgb3Bjb2RlOwotKwkJdG9rID0gc3RydG9rX3Ioc3RyMiwgUEtDUzExX1VSSV9RVUVS WV9TRVBBUkFUT1IsICZzYXZlcHRyMik7Ci0rCQlpZiAodG9rID09IE5VTEwpCi0rCQkJYnJlYWs7 Ci0rCQlvcGNvZGUgPSBwYXJzZV90b2tlbih0b2spOwotKwkJaWYgKG9wY29kZSAhPSBwQmFkT3B0 aW9uKQotKwkJCWFyZyA9IHRvayArIHN0cmxlbihrZXl3b3Jkc1tvcGNvZGVdLm5hbWUpICsgMTsg Lyogc2VwYXJhdG9yICI9IiAqLwotKwotKwkJc3dpdGNoIChvcGNvZGUpIHsKLSsJCWNhc2UgcE1v ZHVsZVBhdGg6Ci0rCQkJLyogbW9kdWxlLXBhdGggaXMgUEtDUzExUHJvdmlkZXIgKi8KLSsJCQlp ZiAocGtjczExLT5tb2R1bGVfcGF0aCAhPSBOVUxMKSB7Ci0rCQkJCXZlcmJvc2VfZigiTXVsdGlw bGUgbW9kdWxlLXBhdGggYXR0cmlidXRlcyBhcmUiCi0rCQkJCSAgICAibm90IHN1cHBvcnRlZCB0 aGUgUEtDUyMxMSBVUkkiKTsKLSsJCQkJcnYgPSAtMTsKLSsJCQkJZ290byBvdXQ7Ci0rCQkJfQot KwkJCXBlcmNlbnRfZGVjb2RlKGFyZywgJnBrY3MxMS0+bW9kdWxlX3BhdGgpOwotKwkJCWRlYnVn M19mKCJTZXR0aW5nIFBLQ1MxMVByb3ZpZGVyID0gJXMgZnJvbSBQS0NTIzExIFVSSSIsCi0rCQkJ ICAgIHBrY3MxMS0+bW9kdWxlX3BhdGgpOwotKwkJCWJyZWFrOwotKwotKwkJY2FzZSBwUGluVmFs dWU6Ci0rCQkJLyogcGluLXZhbHVlICovCi0rCQkJaWYgKHBrY3MxMS0+cGluICE9IE5VTEwpIHsK LSsJCQkJdmVyYm9zZV9mKCJNdWx0aXBsZSBwaW4tdmFsdWUgYXR0cmlidXRlcyBhcmUiCi0rCQkJ CSAgICAibm90IHN1cHBvcnRlZCB0aGUgUEtDUyMxMSBVUkkiKTsKLSsJCQkJcnYgPSAtMTsKLSsJ CQkJZ290byBvdXQ7Ci0rCQkJfQotKwkJCXBlcmNlbnRfZGVjb2RlKGFyZywgJnBrY3MxMS0+cGlu KTsKLSsJCQlkZWJ1ZzNfZigiU2V0dGluZyBQSU4gZnJvbSBQS0NTIzExIFVSSSIpOwotKwkJCWJy ZWFrOwotKwotKwkJZGVmYXVsdDoKLSsJCQkvKiBVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHRo ZSBVUkkgcXVlcnkgU0hPVUxEIGJlIGlnbm9yZWQgKi8KLSsJCQl2ZXJib3NlX2YoIlVua25vd24g cGFydCBvZiBxdWVyeSBpbiBQS0NTIzExIFVSSTogJXMiLCB0b2spOwotKwkJfQotKwl9Ci0rb3V0 OgotKwlmcmVlKHApOwotKwlyZXR1cm4gcnY7Ci0rfQotKwotKyNlbmRpZiAvKiBFTkFCTEVfUEtD UzExICovCi1kaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS11cmkuaCBiL3NzaC1wa2NzMTEtdXJpLmgK LW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAuLmJjNzU4ZTc2MAotLS0tIC9k ZXYvbnVsbAotKysrIGIvc3NoLXBrY3MxMS11cmkuaAotQEAgLTAsMCArMSw0NiBAQAotKy8qCi0r ICogQ29weXJpZ2h0IChjKSAyMDE3IFJlZCBIYXQKLSsgKgotKyAqIEF1dGhvcnM6IEpha3ViIEpl bGVuIDxqamVsZW5AcmVkaGF0LmNvbT4KLSsgKgotKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyAqIHB1cnBv c2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0 aGUgYWJvdmUKLSsgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IGFwcGVhciBpbiBhbGwgY29waWVzLgotKyAqCi0rICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0rICogV0lU SCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElF UyBPRgotKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0rICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJF Q1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotKyAqIFdIQVRTT0VW RVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJ TiBBTgotKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9V UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0rICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBV U0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsKLSsjaWZuZGVmIF9T U0hfUEtDUzExX1VSSV9ICi0rI2RlZmluZSBfU1NIX1BLQ1MxMV9VUklfSAotKwotKyNkZWZpbmUg UEtDUzExX1VSSV9TQ0hFTUUgInBrY3MxMToiCi0rI2RlZmluZSBQS0NTMTFfVVJJX1dISVRFTElT VAkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIFwKLSsJCQkJIkFCQ0RFRkdISUpLTE1OT1BR UlNUVVZXWFlaIiBcCi0rCQkJCSIwMTIzNDU2Nzg5Xy0uKCkiCi0rCi0rc3RydWN0IHBrY3MxMV91 cmkgewotKwkvKiBwYXRoICovCi0rCWNoYXIgKmlkOwotKwlzaXplX3QgaWRfbGVuOwotKwljaGFy ICp0b2tlbjsKLSsJY2hhciAqb2JqZWN0OwotKwljaGFyICpsaWJfbWFudWY7Ci0rCWNoYXIgKm1h bnVmOwotKwljaGFyICpzZXJpYWw7Ci0rCS8qIHF1ZXJ5ICovCi0rCWNoYXIgKm1vZHVsZV9wYXRo OwotKwljaGFyICpwaW47IC8qIE9ubHkgcGFyc2VkLCBidXQgbm90IHByaW50ZWQgKi8KLSt9Owot KwotK3N0cnVjdAkgcGtjczExX3VyaSAqcGtjczExX3VyaV9pbml0KCk7Ci0rdm9pZAkgcGtjczEx X3VyaV9jbGVhbnVwKHN0cnVjdCBwa2NzMTFfdXJpICopOwotK2ludAkgcGtjczExX3VyaV9wYXJz ZShjb25zdCBjaGFyICosIHN0cnVjdCBwa2NzMTFfdXJpICopOwotK3N0cnVjdAkgcGtjczExX3Vy aSAqcGtjczExX3VyaV9pbml0KCk7Ci0rY2hhcgkqcGtjczExX3VyaV9nZXQoc3RydWN0IHBrY3Mx MV91cmkgKnVyaSk7Ci0rI2VuZGlmIC8qIF9TU0hfUEtDUzExX1VSSV9IICovCi1kaWZmIC0tZ2l0 IGEvc3NoLXBrY3MxMS5jIGIvc3NoLXBrY3MxMS5jCi1pbmRleCA3YTdkM2I4ZWEuLjZmMjNmYzM4 YiAxMDA2NDQKLS0tLSBhL3NzaC1wa2NzMTEuYwotKysrIGIvc3NoLXBrY3MxMS5jCi1AQCAtMzYs NiArMzYsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2VjZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5z c2wveDUwOS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgotICNlbmRpZgotIAotICNkZWZpbmUgQ1JZUFRPS0lfQ09NUEFUCi1AQCAtNDgsNiAr NDksNyBAQAotICNpbmNsdWRlICJtaXNjLmgiCi0gI2luY2x1ZGUgInNzaGJ1Zi5oIgotICNpbmNs dWRlICJzc2gtcGtjczExLmgiCi0rI2luY2x1ZGUgInNzaC1wa2NzMTEtdXJpLmgiCi0gI2luY2x1 ZGUgImRpZ2VzdC5oIgotICNpbmNsdWRlICJ4bWFsbG9jLmgiCi0gI2luY2x1ZGUgImNyeXB0b19h cGkuaCIKLUBAIC01OCw4ICs2MCw4IEBAIHN0cnVjdCBwa2NzMTFfc2xvdGluZm8gewotIAlpbnQJ CQlsb2dnZWRfaW47Ci0gfTsKLSAKLS1zdHJ1Y3QgcGtjczExX3Byb3ZpZGVyIHsKLS0JY2hhcgkJ CSpuYW1lOwotK3N0cnVjdCBwa2NzMTFfbW9kdWxlIHsKLSsJY2hhcgkJCSptb2R1bGVfcGF0aDsK LSAJdm9pZAkJCSpoYW5kbGU7Ci0gCUNLX0ZVTkNUSU9OX0xJU1QJKmZ1bmN0aW9uX2xpc3Q7Ci0g CUNLX0lORk8JCQlpbmZvOwotQEAgLTY4LDYgKzcwLDEzIEBAIHN0cnVjdCBwa2NzMTFfcHJvdmlk ZXIgewotIAlzdHJ1Y3QgcGtjczExX3Nsb3RpbmZvCSpzbG90aW5mbzsKLSAJaW50CQkJdmFsaWQ7 Ci0gCWludAkJCXJlZmNvdW50OwotK307Ci0rCi0rc3RydWN0IHBrY3MxMV9wcm92aWRlciB7Ci0r CWNoYXIJCQkqbmFtZTsKLSsJc3RydWN0IHBrY3MxMV9tb2R1bGUJKm1vZHVsZTsgLyogY2FuIGJl IHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgcHJvdmlkZXJzICovCi0rCWludAkJCXJlZmNvdW50Owot KwlpbnQJCQl2YWxpZDsKLSAJVEFJTFFfRU5UUlkocGtjczExX3Byb3ZpZGVyKSBuZXh0OwotIH07 Ci0gCi1AQCAtNzksNiArODgsNyBAQCBzdHJ1Y3QgcGtjczExX2tleSB7Ci0gCUNLX1VMT05HCQlz bG90aWR4OwotIAljaGFyCQkJKmtleWlkOwotIAlpbnQJCQlrZXlpZF9sZW47Ci0rCWNoYXIJCQkq bGFiZWw7Ci0gCVRBSUxRX0VOVFJZKHBrY3MxMV9rZXkpCW5leHQ7Ci0gfTsKLSAKLUBAIC0xMDUs MjYgKzExNSw2MSBAQCBvc3NsX2Vycm9yKGNvbnN0IGNoYXIgKm1zZykKLSAgKiB0aGlzIGlzIGNh bGxlZCB3aGVuIGEgcHJvdmlkZXIgZ2V0cyB1bnJlZ2lzdGVyZWQuCi0gICovCi0gc3RhdGljIHZv aWQKLS1wa2NzMTFfcHJvdmlkZXJfZmluYWxpemUoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCkK LStwa2NzMTFfbW9kdWxlX2ZpbmFsaXplKHN0cnVjdCBwa2NzMTFfbW9kdWxlICptKQotIHsKLSAJ Q0tfUlYgcnY7Ci0gCUNLX1VMT05HIGk7Ci0gCi0tCWRlYnVnX2YoInByb3ZpZGVyIFwiJXNcIiBy ZWZjb3VudCAlZCB2YWxpZCAlZCIsCi0tCSAgICBwLT5uYW1lLCBwLT5yZWZjb3VudCwgcC0+dmFs aWQpOwotLQlpZiAoIXAtPnZhbGlkKQotKwlkZWJ1Z19mKCIlcCByZWZjb3VudCAlZCB2YWxpZCAl ZCIsIG0sIG0tPnJlZmNvdW50LCBtLT52YWxpZCk7Ci0rCWlmICghbS0+dmFsaWQpCi0gCQlyZXR1 cm47Ci0tCWZvciAoaSA9IDA7IGkgPCBwLT5uc2xvdHM7IGkrKykgewotLQkJaWYgKHAtPnNsb3Rp bmZvW2ldLnNlc3Npb24gJiYKLS0JCSAgICAocnYgPSBwLT5mdW5jdGlvbl9saXN0LT5DX0Nsb3Nl U2Vzc2lvbigKLS0JCSAgICBwLT5zbG90aW5mb1tpXS5zZXNzaW9uKSkgIT0gQ0tSX09LKQotKwlm b3IgKGkgPSAwOyBpIDwgbS0+bnNsb3RzOyBpKyspIHsKLSsJCWlmIChtLT5zbG90aW5mb1tpXS5z ZXNzaW9uICYmCi0rCQkgICAgKHJ2ID0gbS0+ZnVuY3Rpb25fbGlzdC0+Q19DbG9zZVNlc3Npb24o Ci0rCQkgICAgbS0+c2xvdGluZm9baV0uc2Vzc2lvbikpICE9IENLUl9PSykKLSAJCQllcnJvcigi Q19DbG9zZVNlc3Npb24gZmFpbGVkOiAlbHUiLCBydik7Ci0gCX0KLS0JaWYgKChydiA9IHAtPmZ1 bmN0aW9uX2xpc3QtPkNfRmluYWxpemUoTlVMTCkpICE9IENLUl9PSykKLSsJaWYgKChydiA9IG0t PmZ1bmN0aW9uX2xpc3QtPkNfRmluYWxpemUoTlVMTCkpICE9IENLUl9PSykKLSAJCWVycm9yKCJD X0ZpbmFsaXplIGZhaWxlZDogJWx1IiwgcnYpOwotKwltLT52YWxpZCA9IDA7Ci0rCW0tPmZ1bmN0 aW9uX2xpc3QgPSBOVUxMOwotKwlkbGNsb3NlKG0tPmhhbmRsZSk7Ci0rfQotKwotKy8qCi0rICog cmVtb3ZlIGEgcmVmZXJlbmNlIHRvIHRoZSBwa2NzMTEgbW9kdWxlLgotKyAqIGNhbGxlZCB3aGVu IGEgcHJvdmlkZXIgaXMgdW5yZWdpc3RlcmVkLgotKyAqLwotK3N0YXRpYyB2b2lkCi0rcGtjczEx X21vZHVsZV91bnJlZihzdHJ1Y3QgcGtjczExX21vZHVsZSAqbSkKLSt7Ci0rCWRlYnVnX2YoIiVw IHJlZmNvdW50ICVkIiwgbSwgbS0+cmVmY291bnQpOwotKwlpZiAoLS1tLT5yZWZjb3VudCA8PSAw KSB7Ci0rCQlwa2NzMTFfbW9kdWxlX2ZpbmFsaXplKG0pOwotKwkJaWYgKG0tPnZhbGlkKQotKwkJ CWVycm9yX2YoIiVwIHN0aWxsIHZhbGlkIiwgbSk7Ci0rCQlmcmVlKG0tPnNsb3RsaXN0KTsKLSsJ CWZyZWUobS0+c2xvdGluZm8pOwotKwkJZnJlZShtLT5tb2R1bGVfcGF0aCk7Ci0rCQlmcmVlKG0p OwotKwl9Ci0rfQotKwotKy8qCi0rICogZmluYWxpemUgYSBwcm92aWRlciBzaGFyZWQgbGlicmFy eSwgaXQncyBubyBsb25nZXIgdXNhYmxlLgotKyAqIGhvd2V2ZXIsIHRoZXJlIG1pZ2h0IHN0aWxs IGJlIGtleXMgcmVmZXJlbmNpbmcgdGhpcyBwcm92aWRlciwKLSsgKiBzbyB0aGUgYWN0dWFsIGZy ZWVpbmcgb2YgbWVtb3J5IGlzIGhhbmRsZWQgYnkgcGtjczExX3Byb3ZpZGVyX3VucmVmKCkuCi0r ICogdGhpcyBpcyBjYWxsZWQgd2hlbiBhIHByb3ZpZGVyIGdldHMgdW5yZWdpc3RlcmVkLgotKyAq LwotK3N0YXRpYyB2b2lkCi0rcGtjczExX3Byb3ZpZGVyX2ZpbmFsaXplKHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKnApCi0rewotKwlkZWJ1Z19mKCIlcCByZWZjb3VudCAlZCB2YWxpZCAlZCIsIHAs IHAtPnJlZmNvdW50LCBwLT52YWxpZCk7Ci0rCWlmICghcC0+dmFsaWQpCi0rCQlyZXR1cm47Ci0r CXBrY3MxMV9tb2R1bGVfdW5yZWYocC0+bW9kdWxlKTsKLSsJcC0+bW9kdWxlID0gTlVMTDsKLSAJ cC0+dmFsaWQgPSAwOwotLQlwLT5mdW5jdGlvbl9saXN0ID0gTlVMTDsKLS0JZGxjbG9zZShwLT5o YW5kbGUpOwotIH0KLSAKLSAvKgotQEAgLTEzNiwxNSArMTgxLDI3IEBAIHBrY3MxMV9wcm92aWRl cl91bnJlZihzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwKQotIHsKLSAJZGVidWdfZigicHJvdmlk ZXIgXCIlc1wiIHJlZmNvdW50ICVkIiwgcC0+bmFtZSwgcC0+cmVmY291bnQpOwotIAlpZiAoLS1w LT5yZWZjb3VudCA8PSAwKSB7Ci0tCQlpZiAocC0+dmFsaWQpCi0tCQkJZXJyb3JfZigicHJvdmlk ZXIgXCIlc1wiIHN0aWxsIHZhbGlkIiwgcC0+bmFtZSk7Ci0gCQlmcmVlKHAtPm5hbWUpOwotLQkJ ZnJlZShwLT5zbG90bGlzdCk7Ci0tCQlmcmVlKHAtPnNsb3RpbmZvKTsKLSsJCWlmIChwLT5tb2R1 bGUpCi0rCQkJcGtjczExX21vZHVsZV91bnJlZihwLT5tb2R1bGUpOwotIAkJZnJlZShwKTsKLSAJ fQotIH0KLSAKLSsvKiBsb29rdXAgcHJvdmlkZXIgYnkgbW9kdWxlIHBhdGggKi8KLStzdGF0aWMg c3RydWN0IHBrY3MxMV9tb2R1bGUgKgotK3BrY3MxMV9wcm92aWRlcl9sb29rdXBfbW9kdWxlKGNo YXIgKm1vZHVsZV9wYXRoKQotK3sKLSsJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcDsKLSsKLSsJ VEFJTFFfRk9SRUFDSChwLCAmcGtjczExX3Byb3ZpZGVycywgbmV4dCkgewotKwkJZGVidWcoImNo ZWNrICVwICVzICglcykiLCBwLCBwLT5uYW1lLCBwLT5tb2R1bGUtPm1vZHVsZV9wYXRoKTsKLSsJ CWlmICghc3RyY21wKG1vZHVsZV9wYXRoLCBwLT5tb2R1bGUtPm1vZHVsZV9wYXRoKSkKLSsJCQly ZXR1cm4gKHAtPm1vZHVsZSk7Ci0rCX0KLSsJcmV0dXJuIChOVUxMKTsKLSt9Ci0rCi0gLyogbG9v a3VwIHByb3ZpZGVyIGJ5IG5hbWUgKi8KLSBzdGF0aWMgc3RydWN0IHBrY3MxMV9wcm92aWRlciAq Ci0gcGtjczExX3Byb3ZpZGVyX2xvb2t1cChjaGFyICpwcm92aWRlcl9pZCkKLUBAIC0xNTksMTkg KzIxNiw1NSBAQCBwa2NzMTFfcHJvdmlkZXJfbG9va3VwKGNoYXIgKnByb3ZpZGVyX2lkKQotIAly ZXR1cm4gKE5VTEwpOwotIH0KLSAKLStpbnQgcGtjczExX2RlbF9wcm92aWRlcl9ieV91cmkoc3Ry dWN0IHBrY3MxMV91cmkgKik7Ci0rCi0gLyogdW5yZWdpc3RlciBwcm92aWRlciBieSBuYW1lICov Ci0gaW50Ci0gcGtjczExX2RlbF9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCkKLSt7Ci0rCWlu dCBydjsKLSsJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKLSsKLSsJZGVidWdfZigiY2FsbGVkLCBw cm92aWRlcl9pZCA9ICVzIiwgcHJvdmlkZXJfaWQpOwotKwotKyAgICAgIGlmIChwcm92aWRlcl9p ZCA9PSBOVUxMKQotKyAgICAgICAgICByZXR1cm4gMDsKLSsKLSsJdXJpID0gcGtjczExX3VyaV9p bml0KCk7Ci0rCWlmICh1cmkgPT0gTlVMTCkKLSsJCWZhdGFsKCJGYWlsZWQgdG8gaW5pdCBQS0NT IzExIFVSSSIpOwotKwotKwlpZiAoc3RybGVuKHByb3ZpZGVyX2lkKSA+PSBzdHJsZW4oUEtDUzEx X1VSSV9TQ0hFTUUpICYmCi0rCSAgICBzdHJuY21wKHByb3ZpZGVyX2lkLCBQS0NTMTFfVVJJX1ND SEVNRSwgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkgewotKwkJaWYgKHBrY3MxMV91 cmlfcGFyc2UocHJvdmlkZXJfaWQsIHVyaSkgIT0gMCkKLSsJCQlmYXRhbCgiRmFpbGVkIHRvIHBh cnNlIFBLQ1MjMTEgVVJJIik7Ci0rCX0gZWxzZSB7Ci0rCQl1cmktPm1vZHVsZV9wYXRoID0gc3Ry ZHVwKHByb3ZpZGVyX2lkKTsKLSsJfQotKwotKwlydiA9IHBrY3MxMV9kZWxfcHJvdmlkZXJfYnlf dXJpKHVyaSk7Ci0rCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwotKwlyZXR1cm4gcnY7Ci0rfQot KwotKy8qIHVucmVnaXN0ZXIgcHJvdmlkZXIgYnkgUEtDUyMxMSBVUkkgKi8KLStpbnQKLStwa2Nz MTFfZGVsX3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKQotIHsKLSAJc3Ry dWN0IHBrY3MxMV9wcm92aWRlciAqcDsKLSsJaW50IHJ2ID0gLTE7Ci0rCWNoYXIgKnByb3ZpZGVy X3VyaSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7Ci0gCi0tCWlmICgocCA9IHBrY3MxMV9wcm92aWRl cl9sb29rdXAocHJvdmlkZXJfaWQpKSAhPSBOVUxMKSB7Ci0rCWRlYnVnM19mKCJjYWxsZWQgd2l0 aCBwcm92aWRlciAlcyIsIHByb3ZpZGVyX3VyaSk7Ci0rCi0rCWlmICgocCA9IHBrY3MxMV9wcm92 aWRlcl9sb29rdXAocHJvdmlkZXJfdXJpKSkgIT0gTlVMTCkgewotIAkJVEFJTFFfUkVNT1ZFKCZw a2NzMTFfcHJvdmlkZXJzLCBwLCBuZXh0KTsKLSAJCXBrY3MxMV9wcm92aWRlcl9maW5hbGl6ZShw KTsKLSAJCXBrY3MxMV9wcm92aWRlcl91bnJlZihwKTsKLS0JCXJldHVybiAoMCk7Ci0rCQlydiA9 IDA7Ci0gCX0KLS0JcmV0dXJuICgtMSk7Ci0rCWZyZWUocHJvdmlkZXJfdXJpKTsKLSsJcmV0dXJu IHJ2OwotIH0KLSAKLSAvKiByZWxlYXNlIGEgd3JhcHBlZCBvYmplY3QgKi8KLUBAIC0xODMsNiAr Mjc2LDcgQEAgcGtjczExX2sxMV9mcmVlKHN0cnVjdCBwa2NzMTFfa2V5ICprMTEpCi0gCWlmIChr MTEtPnByb3ZpZGVyKQotIAkJcGtjczExX3Byb3ZpZGVyX3VucmVmKGsxMS0+cHJvdmlkZXIpOwot IAlmcmVlKGsxMS0+a2V5aWQpOwotKwlmcmVlKGsxMS0+bGFiZWwpOwotIAlzc2hidWZfZnJlZShr MTEtPmtleWJsb2IpOwotIAlmcmVlKGsxMSk7Ci0gfQotQEAgLTE5OCw4ICsyOTIsOCBAQCBwa2Nz MTFfZmluZChzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LCBDS19B VFRSSUJVVEUgKmF0dHIsCi0gCUNLX1JWCQkJcnY7Ci0gCWludAkJCXJldCA9IC0xOwotIAotLQlm ID0gcC0+ZnVuY3Rpb25fbGlzdDsKLS0Jc2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNl c3Npb247Ci0rCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0rCXNlc3Npb24gPSBwLT5t b2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0gCWlmICgocnYgPSBmLT5DX0ZpbmRP YmplY3RzSW5pdChzZXNzaW9uLCBhdHRyLCBuYXR0cikpICE9IENLUl9PSykgewotIAkJZXJyb3Io IkNfRmluZE9iamVjdHNJbml0IGZhaWxlZCAobmF0dHIgJWx1KTogJWx1IiwgbmF0dHIsIHJ2KTsK LSAJCXJldHVybiAoLTEpOwotQEAgLTIzNiwxNCArMzMwLDE0IEBAIHBrY3MxMV9sb2dpbl9zbG90 KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnByb3ZpZGVyLCBzdHJ1Y3QgcGtjczExX3Nsb3RpbmZv ICpzaSwKLSAJaWYgKHNpLT50b2tlbi5mbGFncyAmIENLRl9QUk9URUNURURfQVVUSEVOVElDQVRJ T05fUEFUSCkKLSAJCXZlcmJvc2UoIkRlZmVycmluZyBQSU4gZW50cnkgdG8gcmVhZGVyIGtleXBh ZC4iKTsKLSAJZWxzZSB7Ci0tCQlzbnByaW50Zihwcm9tcHQsIHNpemVvZihwcm9tcHQpLCAiRW50 ZXIgUElOIGZvciAnJXMnOiAiLAotKwkJc25wcmludGYocHJvbXB0LCBzaXplb2YocHJvbXB0KSwg IkVudGVyIFBJTiBmb3IgJyUuMzJzJzogIiwKLSAJCSAgICBzaS0+dG9rZW4ubGFiZWwpOwotLQkJ aWYgKChwaW4gPSByZWFkX3Bhc3NwaHJhc2UocHJvbXB0LCBSUF9BTExPV19FT0YpKSA9PSBOVUxM KSB7Ci0rCQlpZiAoKHBpbiA9IHJlYWRfcGFzc3BocmFzZShwcm9tcHQsIFJQX0FMTE9XX0VPRnxS UF9BTExPV19TVERJTikpID09IE5VTEwpIHsKLSAJCQlkZWJ1Z19mKCJubyBwaW4gc3BlY2lmaWVk Iik7Ci0gCQkJcmV0dXJuICgtMSk7CS8qIGJhaWwgb3V0ICovCi0gCQl9Ci0gCX0KLS0JcnYgPSBw cm92aWRlci0+ZnVuY3Rpb25fbGlzdC0+Q19Mb2dpbihzaS0+c2Vzc2lvbiwgdHlwZSwgKHVfY2hh ciAqKXBpbiwKLSsJcnYgPSBwcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9saXN0LT5DX0xvZ2lu KHNpLT5zZXNzaW9uLCB0eXBlLCAodV9jaGFyICopcGluLAotIAkgICAgKHBpbiAhPSBOVUxMKSA/ IHN0cmxlbihwaW4pIDogMCk7Ci0gCWlmIChwaW4gIT0gTlVMTCkKLSAJCWZyZWV6ZXJvKHBpbiwg c3RybGVuKHBpbikpOwotQEAgLTI3MywxMyArMzY3LDE0IEBAIHBrY3MxMV9sb2dpbl9zbG90KHN0 cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnByb3ZpZGVyLCBzdHJ1Y3QgcGtjczExX3Nsb3RpbmZvICpz aSwKLSBzdGF0aWMgaW50Ci0gcGtjczExX2xvZ2luKHN0cnVjdCBwa2NzMTFfa2V5ICprMTEsIENL X1VTRVJfVFlQRSB0eXBlKQotIHsKLS0JaWYgKGsxMSA9PSBOVUxMIHx8IGsxMS0+cHJvdmlkZXIg PT0gTlVMTCB8fCAhazExLT5wcm92aWRlci0+dmFsaWQpIHsKLSsJaWYgKGsxMSA9PSBOVUxMIHx8 IGsxMS0+cHJvdmlkZXIgPT0gTlVMTCB8fCAhazExLT5wcm92aWRlci0+dmFsaWQgfHwKLSsJICAg IGsxMS0+cHJvdmlkZXItPm1vZHVsZSA9PSBOVUxMIHx8ICFrMTEtPnByb3ZpZGVyLT5tb2R1bGUt PnZhbGlkKSB7Ci0gCQllcnJvcigibm8gcGtjczExICh2YWxpZCkgcHJvdmlkZXIgZm91bmQiKTsK LSAJCXJldHVybiAoLTEpOwotIAl9Ci0gCi0gCXJldHVybiBwa2NzMTFfbG9naW5fc2xvdChrMTEt PnByb3ZpZGVyLAotLQkgICAgJmsxMS0+cHJvdmlkZXItPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF0s IHR5cGUpOwotKwkgICAgJmsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90 aWR4XSwgdHlwZSk7Ci0gfQotIAotIAotQEAgLTI5NSwxMyArMzkwLDE0IEBAIHBrY3MxMV9jaGVj a19vYmpfYm9vbF9hdHRyaWIoc3RydWN0IHBrY3MxMV9rZXkgKmsxMSwgQ0tfT0JKRUNUX0hBTkRM RSBvYmosCi0gCi0gCSp2YWwgPSAwOwotIAotLQlpZiAoIWsxMS0+cHJvdmlkZXIgfHwgIWsxMS0+ cHJvdmlkZXItPnZhbGlkKSB7Ci0rCWlmICghazExLT5wcm92aWRlciB8fCAhazExLT5wcm92aWRl ci0+dmFsaWQgfHwKLSsJICAgICFrMTEtPnByb3ZpZGVyLT5tb2R1bGUgfHwgIWsxMS0+cHJvdmlk ZXItPm1vZHVsZS0+dmFsaWQpIHsKLSAJCWVycm9yKCJubyBwa2NzMTEgKHZhbGlkKSBwcm92aWRl ciBmb3VuZCIpOwotIAkJcmV0dXJuICgtMSk7Ci0gCX0KLSAKLS0JZiA9IGsxMS0+cHJvdmlkZXIt PmZ1bmN0aW9uX2xpc3Q7Ci0tCXNpID0gJmsxMS0+cHJvdmlkZXItPnNsb3RpbmZvW2sxMS0+c2xv dGlkeF07Ci0rCWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0rCXNp ID0gJmsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKLSAKLSAJ YXR0ci50eXBlID0gdHlwZTsKLSAJYXR0ci5wVmFsdWUgPSAmZmxhZzsKLUBAIC0zMzIsMTMgKzQy OCwxNCBAQCBwa2NzMTFfZ2V0X2tleShzdHJ1Y3QgcGtjczExX2tleSAqazExLCBDS19NRUNIQU5J U01fVFlQRSBtZWNoX3R5cGUpCi0gCWludAkJCSBhbHdheXNfYXV0aCA9IDA7Ci0gCWludAkJCSBk aWRfbG9naW4gPSAwOwotIAotLQlpZiAoIWsxMS0+cHJvdmlkZXIgfHwgIWsxMS0+cHJvdmlkZXIt PnZhbGlkKSB7Ci0rCWlmICghazExLT5wcm92aWRlciB8fCAhazExLT5wcm92aWRlci0+dmFsaWQg fHwKLSsJICAgICFrMTEtPnByb3ZpZGVyLT5tb2R1bGUgfHwgIWsxMS0+cHJvdmlkZXItPm1vZHVs ZS0+dmFsaWQpIHsKLSAJCWVycm9yKCJubyBwa2NzMTEgKHZhbGlkKSBwcm92aWRlciBmb3VuZCIp OwotIAkJcmV0dXJuICgtMSk7Ci0gCX0KLSAKLS0JZiA9IGsxMS0+cHJvdmlkZXItPmZ1bmN0aW9u X2xpc3Q7Ci0tCXNpID0gJmsxMS0+cHJvdmlkZXItPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07Ci0r CWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0rCXNpID0gJmsxMS0+ cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKLSAKLSAJaWYgKChzaS0+ dG9rZW4uZmxhZ3MgJiBDS0ZfTE9HSU5fUkVRVUlSRUQpICYmICFzaS0+bG9nZ2VkX2luKSB7Ci0g CQlpZiAocGtjczExX2xvZ2luKGsxMSwgQ0tVX1VTRVIpIDwgMCkgewotQEAgLTQzNyw2ICs1MzQs MTIgQEAgcGtjczExX3JlY29yZF9rZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcHJvdmlkZXIs IENLX1VMT05HIHNsb3RpZHgsCi0gCQlrMTEtPmtleWlkID0geG1hbGxvYyhrMTEtPmtleWlkX2xl bik7Ci0gCQltZW1jcHkoazExLT5rZXlpZCwga2V5aWRfYXR0cmliLT5wVmFsdWUsIGsxMS0+a2V5 aWRfbGVuKTsKLSAJfQotKwlpZiAoa2V5aWRfYXR0cmliLT51bFZhbHVlTGVuID4gMCApIHsKLSsJ CWsxMS0+bGFiZWwgPSB4bWFsbG9jKGtleWlkX2F0dHJpYi0+dWxWYWx1ZUxlbisxKTsKLSsJCW1l bWNweShrMTEtPmxhYmVsLCBrZXlpZF9hdHRyaWItPnBWYWx1ZSwga2V5aWRfYXR0cmliLT51bFZh bHVlTGVuKTsKLSsJCWsxMS0+bGFiZWxba2V5aWRfYXR0cmliLT51bFZhbHVlTGVuXSA9IDA7Ci0r CX0KLSsKLSAJVEFJTFFfSU5TRVJUX1RBSUwoJnBrY3MxMV9rZXlzLCBrMTEsIG5leHQpOwotIAot IAlyZXR1cm4gMDsKLUBAIC00NjQsNiArNTY3LDQyIEBAIHBrY3MxMV9sb29rdXBfa2V5KHN0cnVj dCBzc2hrZXkgKmtleSkKLSAJcmV0dXJuIGZvdW5kOwotIH0KLSAKLSsvKgotKyAqIFRoaXMgY2Fu J3QgYmUgaW4gdGhlIHNzaC1wa2NzMTEtdXJpLCBiZWNhc2Ugd2UgY2FuIG5vdCBkZXBlbmQgb24K LSsgKiBQS0NTIzExIHN0cnVjdHVyZXMgaW4gc3NoLWFnZW50ICh1c2luZyBjbGllbnQtaGVscGVy IGNvbW11bmljYXRpb24pCi0rICovCi0raW50Ci0rcGtjczExX3VyaV93cml0ZShjb25zdCBzdHJ1 Y3Qgc3Noa2V5ICprZXksIEZJTEUgKmYpCi0rewotKwljaGFyICpwID0gTlVMTDsKLSsJc3RydWN0 IHBrY3MxMV91cmkgdXJpOwotKwlzdHJ1Y3QgcGtjczExX2tleSAqazExID0gcGtjczExX2xvb2t1 cF9rZXkoa2V5KTsKLSsKLSsJaWYgKGsxMSA9PSBOVUxMKSB7Ci0rCQllcnJvcigiRmFpbGVkIHRv IGdldCBleF9kYXRhIGZvciBrZXkgdHlwZSAlZCIsIGtleS0+dHlwZSk7Ci0rCQlyZXR1cm4gKC0x KTsKLSsJfQotKwotKwkvKiBvbWl0IHR5cGUgLS0gd2UgYXJlIGxvb2tpbmcgZm9yIHByaXZhdGUt cHVibGljIG9yIHByaXZhdGUtY2VydGlmaWNhdGUgcGFpcnMgKi8KLSsJdXJpLmlkID0gazExLT5r ZXlpZDsKLSsJdXJpLmlkX2xlbiA9IGsxMS0+a2V5aWRfbGVuOwotKwl1cmkudG9rZW4gPSBrMTEt PnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF0udG9rZW4ubGFiZWw7Ci0r CXVyaS5vYmplY3QgPSBrMTEtPmxhYmVsOwotKwl1cmkubW9kdWxlX3BhdGggPSBrMTEtPnByb3Zp ZGVyLT5tb2R1bGUtPm1vZHVsZV9wYXRoOwotKwl1cmkubGliX21hbnVmID0gazExLT5wcm92aWRl ci0+bW9kdWxlLT5pbmZvLm1hbnVmYWN0dXJlcklEOwotKwl1cmkubWFudWYgPSBrMTEtPnByb3Zp ZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF0udG9rZW4ubWFudWZhY3R1cmVySUQ7 Ci0rCXVyaS5zZXJpYWwgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xv dGlkeF0udG9rZW4uc2VyaWFsTnVtYmVyOwotKwotKwlwID0gcGtjczExX3VyaV9nZXQoJnVyaSk7 Ci0rCS8qIGRvIG5vdCBjbGVhbnVwIC0tIHdlIGRvIG5vdCBhbGxvY2F0ZSBoZXJlLCBvbmx5IHJl ZmVyZW5jZSAqLwotKwlpZiAocCA9PSBOVUxMKQotKwkJcmV0dXJuIC0xOwotKwotKwlmcHJpbnRm KGYsICIgJXMiLCBwKTsKLSsJZnJlZShwKTsKLSsJcmV0dXJuIDA7Ci0rfQotKwotICNpZmRlZiBX SVRIX09QRU5TU0wKLSAvKgotICAqIFNlZToKLUBAIC01NjgsOCArNzA3LDggQEAgcGtjczExX3Np Z25fcnNhKHN0cnVjdCBzc2hrZXkgKmtleSwKLSAJCXJldHVybiBTU0hfRVJSX0FHRU5UX0ZBSUxV UkU7Ci0gCX0KLSAKLS0JZiA9IGsxMS0+cHJvdmlkZXItPmZ1bmN0aW9uX2xpc3Q7Ci0tCXNpID0g JmsxMS0+cHJvdmlkZXItPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07Ci0rCWYgPSBrMTEtPnByb3Zp ZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0rCXNpID0gJmsxMS0+cHJvdmlkZXItPm1vZHVs ZS0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKLSAKLSAJaWYgKChzaWdsZW4gPSBFVlBfUEtFWV9z aXplKGtleS0+cGtleSkpIDw9IDApCi0gCQlyZXR1cm4gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5U OwotQEAgLTY1OCw4ICs3OTcsOCBAQCBwa2NzMTFfc2lnbl9lY2RzYShzdHJ1Y3Qgc3Noa2V5ICpr ZXksCi0gCWRlYnVnM19mKCJzaWduIHVzaW5nIHByb3ZpZGVyICVzIHNsb3RpZHggJWx1IiwKLSAJ ICAgIGsxMS0+cHJvdmlkZXItPm5hbWUsICh1X2xvbmcpazExLT5zbG90aWR4KTsKLSAKLS0JZiA9 IGsxMS0+cHJvdmlkZXItPmZ1bmN0aW9uX2xpc3Q7Ci0tCXNpID0gJmsxMS0+cHJvdmlkZXItPnNs b3RpbmZvW2sxMS0+c2xvdGlkeF07Ci0rCWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmZ1bmN0 aW9uX2xpc3Q7Ci0rCXNpID0gJmsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5z bG90aWR4XTsKLSAKLSAJLyogUHJlcGFyZSBkaWdlc3QgdG8gYmUgc2lnbmVkICovCi0gCWlmICgo aGFzaGFsZyA9IHNzaGtleV9lY19uaWRfdG9faGFzaF9hbGcoa2V5LT5lY2RzYV9uaWQpKSA9PSAt MSkKLUBAIC03NDMsOCArODgyLDggQEAgcGtjczExX3NpZ25fZWQyNTUxOShzdHJ1Y3Qgc3Noa2V5 ICprZXksCi0gCWRlYnVnM19mKCJzaWduIHVzaW5nIHByb3ZpZGVyICVzIHNsb3RpZHggJWx1IiwK LSAJICAgIGsxMS0+cHJvdmlkZXItPm5hbWUsICh1X2xvbmcpazExLT5zbG90aWR4KTsKLSAKLS0J ZiA9IGsxMS0+cHJvdmlkZXItPmZ1bmN0aW9uX2xpc3Q7Ci0tCXNpID0gJmsxMS0+cHJvdmlkZXIt PnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07Ci0rCWYgPSBrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPmZ1 bmN0aW9uX2xpc3Q7Ci0rCXNpID0gJmsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazEx LT5zbG90aWR4XTsKLSAKLSAJeGRhdGEgPSB4bWFsbG9jKGRhdGFsZW4pOwotIAltZW1jcHkoeGRh dGEsIGRhdGEsIGRhdGFsZW4pOwotQEAgLTc3Miw3ICs5MTEsOCBAQCBwa2NzMTFfc2lnbl9lZDI1 NTE5KHN0cnVjdCBzc2hrZXkgKmtleSwKLSAJcmV0dXJuIHJldDsKLSB9Ci0gCi0tLyogcmVtb3Zl IHRyYWlsaW5nIHNwYWNlcyAqLwotKy8qIHJlbW92ZSB0cmFpbGluZyBzcGFjZXMuIE5vdGUsIHRo YXQgdGhpcyBkb2VzIE5PVCBndWFyYW50ZWUgdGhlIGJ1ZmZlcgotKyAqIHdpbGwgYmUgbnVsbCB0 ZXJtaW5hdGVkIGlmIHRoZXJlIGFyZSBubyB0cmFpbGluZyBzcGFjZXMhICovCi0gc3RhdGljIGNo YXIgKgotIHJtc3BhY2UodV9jaGFyICpidWYsIHNpemVfdCBsZW4pCi0gewotQEAgLTgwNCw4ICs5 NDQsOCBAQCBwa2NzMTFfb3Blbl9zZXNzaW9uKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENL X1VMT05HIHNsb3RpZHgsIGNoYXIgKnBpbiwKLSAJQ0tfU0VTU0lPTl9IQU5ETEUJc2Vzc2lvbjsK LSAJaW50CQkJbG9naW5fcmVxdWlyZWQsIHJldDsKLSAKLS0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7 Ci0tCXNpID0gJnAtPnNsb3RpbmZvW3Nsb3RpZHhdOwotKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlv bl9saXN0OwotKwlzaSA9ICZwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdOwotIAotIAlsb2dp bl9yZXF1aXJlZCA9IHNpLT50b2tlbi5mbGFncyAmIENLRl9MT0dJTl9SRVFVSVJFRDsKLSAKLUBA IC04MTUsOSArOTU1LDkgQEAgcGtjczExX29wZW5fc2Vzc2lvbihzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LCBjaGFyICpwaW4sCi0gCQllcnJvcigicGluIHJlcXVp cmVkIik7Ci0gCQlyZXR1cm4gKC1TU0hfUEtDUzExX0VSUl9QSU5fUkVRVUlSRUQpOwotIAl9Ci0t CWlmICgocnYgPSBmLT5DX09wZW5TZXNzaW9uKHAtPnNsb3RsaXN0W3Nsb3RpZHhdLCBDS0ZfUldf U0VTU0lPTnwKLSsJaWYgKChydiA9IGYtPkNfT3BlblNlc3Npb24ocC0+bW9kdWxlLT5zbG90bGlz dFtzbG90aWR4XSwgQ0tGX1JXX1NFU1NJT058Ci0gCSAgICBDS0ZfU0VSSUFMX1NFU1NJT04sIE5V TEwsIE5VTEwsICZzZXNzaW9uKSkgIT0gQ0tSX09LKSB7Ci0tCQllcnJvcigiQ19PcGVuU2Vzc2lv biBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSsJCWVycm9yKCJDX09wZW5TZXNzaW9uIGZhaWxlZCBmb3Ig c2xvdCAlbHU6ICVsdSIsIHNsb3RpZHgsIHJ2KTsKLSAJCXJldHVybiAoLTEpOwotIAl9Ci0gCWlm IChsb2dpbl9yZXF1aXJlZCAmJiBwaW4gIT0gTlVMTCAmJiBzdHJsZW4ocGluKSAhPSAwKSB7Ci1A QCAtODU0LDcgKzk5NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc3Noa2V5ICoKLSBwa2NzMTFfZmV0Y2hf ZWNkc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgs Ci0gICAgIENLX09CSkVDVF9IQU5ETEUgKm9iaikKLSB7Ci0tCUNLX0FUVFJJQlVURQkJIGtleV9h dHRyWzNdOwotKwlDS19BVFRSSUJVVEUJCSBrZXlfYXR0cls0XTsKLSsJaW50CQkJIG5hdHRyID0g NDsKLSAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247Ci0gCUNLX0ZVTkNUSU9OX0xJU1QJKmYg PSBOVUxMOwotIAlDS19SVgkJCSBydjsKLUBAIC04NjcsMTQgKzEwMDgsMTUgQEAgcGtjczExX2Zl dGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90 aWR4LAotIAotIAltZW1zZXQoJmtleV9hdHRyLCAwLCBzaXplb2Yoa2V5X2F0dHIpKTsKLSAJa2V5 X2F0dHJbMF0udHlwZSA9IENLQV9JRDsKLS0Ja2V5X2F0dHJbMV0udHlwZSA9IENLQV9FQ19QT0lO VDsKLS0Ja2V5X2F0dHJbMl0udHlwZSA9IENLQV9FQ19QQVJBTVM7Ci0rCWtleV9hdHRyWzFdLnR5 cGUgPSBDS0FfTEFCRUw7Ci0rCWtleV9hdHRyWzJdLnR5cGUgPSBDS0FfRUNfUE9JTlQ7Ci0rCWtl eV9hdHRyWzNdLnR5cGUgPSBDS0FfRUNfUEFSQU1TOwotIAotLQlzZXNzaW9uID0gcC0+c2xvdGlu Zm9bc2xvdGlkeF0uc2Vzc2lvbjsKLS0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7Ci0rCXNlc3Npb24g PSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0rCWYgPSBwLT5tb2R1bGUt PmZ1bmN0aW9uX2xpc3Q7Ci0gCi0gCS8qIGZpZ3VyZSBvdXQgc2l6ZSBvZiB0aGUgYXR0cmlidXRl cyAqLwotLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0 dHIsIDMpOwotKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5 X2F0dHIsIG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0QXR0 cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlyZXR1cm4gKE5VTEwpOwotQEAgLTg4 NSwxOSArMTAyNywxOSBAQCBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0gCSAqIGVuc3VyZSB0aGF0IG5vbmUgb2Yg dGhlIG90aGVycyBhcmUgemVybyBsZW5ndGguCi0gCSAqIFhYWCBhc3N1bWVzIENLQV9JRCBpcyBh bHdheXMgZmlyc3QuCi0gCSAqLwotLQlpZiAoa2V5X2F0dHJbMV0udWxWYWx1ZUxlbiA9PSAwIHx8 Ci0tCSAgICBrZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDApIHsKLSsJaWYgKGtleV9hdHRyWzJd LnVsVmFsdWVMZW4gPT0gMCB8fAotKwkgICAga2V5X2F0dHJbM10udWxWYWx1ZUxlbiA9PSAwKSB7 Ci0gCQllcnJvcigiaW52YWxpZCBhdHRyaWJ1dGUgbGVuZ3RoIik7Ci0gCQlyZXR1cm4gKE5VTEwp OwotIAl9Ci0gCi0gCS8qIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGF0dHJpYnV0ZXMgKi8KLS0JZm9y IChpID0gMDsgaSA8IDM7IGkrKykKLSsJZm9yIChpID0gMDsgaSA8IG5hdHRyOyBpKyspCi0gCQlp ZiAoa2V5X2F0dHJbaV0udWxWYWx1ZUxlbiA+IDApCi0gCQkJa2V5X2F0dHJbaV0ucFZhbHVlID0g eGNhbGxvYygxLCBrZXlfYXR0cltpXS51bFZhbHVlTGVuKTsKLSAKLSAJLyogcmV0cmlldmUgSUQs IHB1YmxpYyBwb2ludCBhbmQgY3VydmUgcGFyYW1ldGVycyBvZiBFQyBrZXkgKi8KLS0JcnYgPSBm LT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsKLSsJcnYg PSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBuYXR0cik7 Ci0gCWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZh aWxlZDogJWx1IiwgcnYpOwotIAkJZ290byBmYWlsOwotQEAgLTkwOSw4ICsxMDUxLDggQEAgcGtj czExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9O RyBzbG90aWR4LAotIAkJZ290byBmYWlsOwotIAl9Ci0gCi0tCWF0dHJwID0ga2V5X2F0dHJbMl0u cFZhbHVlOwotLQlncm91cCA9IGQyaV9FQ1BLUGFyYW1ldGVycyhOVUxMLCAmYXR0cnAsIGtleV9h dHRyWzJdLnVsVmFsdWVMZW4pOwotKwlhdHRycCA9IGtleV9hdHRyWzNdLnBWYWx1ZTsKLSsJZ3Jv dXAgPSBkMmlfRUNQS1BhcmFtZXRlcnMoTlVMTCwgJmF0dHJwLCBrZXlfYXR0clszXS51bFZhbHVl TGVuKTsKLSAJaWYgKGdyb3VwID09IE5VTEwpIHsKLSAJCW9zc2xfZXJyb3IoImQyaV9FQ1BLUGFy YW1ldGVycyBmYWlsZWQiKTsKLSAJCWdvdG8gZmFpbDsKLUBAIC05MjEsMTMgKzEwNjMsMTMgQEAg cGtjczExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19V TE9ORyBzbG90aWR4LAotIAkJZ290byBmYWlsOwotIAl9Ci0gCi0tCWlmIChrZXlfYXR0clsxXS51 bFZhbHVlTGVuIDw9IDIpIHsKLSsJaWYgKGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPD0gMikgewot IAkJZXJyb3IoIkNLQV9FQ19QT0lOVCB0b28gc21hbGwiKTsKLSAJCWdvdG8gZmFpbDsKLSAJfQot IAotLQlhdHRycCA9IGtleV9hdHRyWzFdLnBWYWx1ZTsKLS0Jb2N0ZXQgPSBkMmlfQVNOMV9PQ1RF VF9TVFJJTkcoTlVMTCwgJmF0dHJwLCBrZXlfYXR0clsxXS51bFZhbHVlTGVuKTsKLSsJYXR0cnAg PSBrZXlfYXR0clsyXS5wVmFsdWU7Ci0rCW9jdGV0ID0gZDJpX0FTTjFfT0NURVRfU1RSSU5HKE5V TEwsICZhdHRycCwga2V5X2F0dHJbMl0udWxWYWx1ZUxlbik7Ci0gCWlmIChvY3RldCA9PSBOVUxM KSB7Ci0gCQlvc3NsX2Vycm9yKCJkMmlfQVNOMV9PQ1RFVF9TVFJJTkcgZmFpbGVkIik7Ci0gCQln b3RvIGZhaWw7Ci1AQCAtOTg5LDcgKzExMzEsOCBAQCBzdGF0aWMgc3RydWN0IHNzaGtleSAqCi0g cGtjczExX2ZldGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxP Tkcgc2xvdGlkeCwKLSAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2JqKQotIHsKLS0JQ0tfQVRUUklC VVRFCQkga2V5X2F0dHJbM107Ci0rCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzRdOwotKwlpbnQJ CQkgbmF0dHIgPSA0OwotIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKLSAJQ0tfRlVOQ1RJ T05fTElTVAkqZiA9IE5VTEw7Ci0gCUNLX1JWCQkJIHJ2OwotQEAgLTEwMDAsMTQgKzExNDMsMTUg QEAgcGtjczExX2ZldGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tf VUxPTkcgc2xvdGlkeCwKLSAKLSAJbWVtc2V0KCZrZXlfYXR0ciwgMCwgc2l6ZW9mKGtleV9hdHRy KSk7Ci0gCWtleV9hdHRyWzBdLnR5cGUgPSBDS0FfSUQ7Ci0tCWtleV9hdHRyWzFdLnR5cGUgPSBD S0FfTU9EVUxVUzsKLS0Ja2V5X2F0dHJbMl0udHlwZSA9IENLQV9QVUJMSUNfRVhQT05FTlQ7Ci0r CWtleV9hdHRyWzFdLnR5cGUgPSBDS0FfTEFCRUw7Ci0rCWtleV9hdHRyWzJdLnR5cGUgPSBDS0Ff TU9EVUxVUzsKLSsJa2V5X2F0dHJbM10udHlwZSA9IENLQV9QVUJMSUNfRVhQT05FTlQ7Ci0gCi0t CXNlc3Npb24gPSBwLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotLQlmID0gcC0+ZnVuY3Rp b25fbGlzdDsKLSsJc2Vzc2lvbiA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lv bjsKLSsJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKLSAKLSAJLyogZmlndXJlIG91dCBz aXplIG9mIHRoZSBhdHRyaWJ1dGVzICovCi0tCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShz ZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgMyk7Ci0rCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1 ZShzZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwgbmF0dHIpOwotIAlpZiAocnYgIT0gQ0tSX09LKSB7 Ci0gCQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCXJl dHVybiAoTlVMTCk7Ci1AQCAtMTAxOCwxOSArMTE2MiwxOSBAQCBwa2NzMTFfZmV0Y2hfcnNhX3B1 YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkgKiBl bnN1cmUgdGhhdCBub25lIG9mIHRoZSBvdGhlcnMgYXJlIHplcm8gbGVuZ3RoLgotIAkgKiBYWFgg YXNzdW1lcyBDS0FfSUQgaXMgYWx3YXlzIGZpcnN0LgotIAkgKi8KLS0JaWYgKGtleV9hdHRyWzFd LnVsVmFsdWVMZW4gPT0gMCB8fAotLQkgICAga2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwKSB7 Ci0rCWlmIChrZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDAgfHwKLSsJICAgIGtleV9hdHRyWzNd LnVsVmFsdWVMZW4gPT0gMCkgewotIAkJZXJyb3IoImludmFsaWQgYXR0cmlidXRlIGxlbmd0aCIp OwotIAkJcmV0dXJuIChOVUxMKTsKLSAJfQotIAotIAkvKiBhbGxvY2F0ZSBidWZmZXJzIGZvciBh dHRyaWJ1dGVzICovCi0tCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0rCWZvciAoaSA9IDA7IGkg PCBuYXR0cjsgaSsrKQotIAkJaWYgKGtleV9hdHRyW2ldLnVsVmFsdWVMZW4gPiAwKQotIAkJCWtl eV9hdHRyW2ldLnBWYWx1ZSA9IHhjYWxsb2MoMSwga2V5X2F0dHJbaV0udWxWYWx1ZUxlbik7Ci0g Ci0gCS8qIHJldHJpZXZlIElELCBtb2R1bHVzIGFuZCBwdWJsaWMgZXhwb25lbnQgb2YgUlNBIGtl eSAqLwotLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0 dHIsIDMpOwotKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5 X2F0dHIsIG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0QXR0 cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlnb3RvIGZhaWw7Ci1AQCAtMTA0Miw4 ICsxMTg2LDggQEAgcGtjczExX2ZldGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRl ciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJCWdvdG8gZmFpbDsKLSAJfQotIAotLQlyc2FfbiA9 IEJOX2JpbjJibihrZXlfYXR0clsxXS5wVmFsdWUsIGtleV9hdHRyWzFdLnVsVmFsdWVMZW4sIE5V TEwpOwotLQlyc2FfZSA9IEJOX2JpbjJibihrZXlfYXR0clsyXS5wVmFsdWUsIGtleV9hdHRyWzJd LnVsVmFsdWVMZW4sIE5VTEwpOwotKwlyc2FfbiA9IEJOX2JpbjJibihrZXlfYXR0clsyXS5wVmFs dWUsIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4sIE5VTEwpOwotKwlyc2FfZSA9IEJOX2JpbjJibihr ZXlfYXR0clszXS5wVmFsdWUsIGtleV9hdHRyWzNdLnVsVmFsdWVMZW4sIE5VTEwpOwotIAlpZiAo cnNhX24gPT0gTlVMTCB8fCByc2FfZSA9PSBOVUxMKSB7Ci0gCQllcnJvcigiQk5fYmluMmJuIGZh aWxlZCIpOwotIAkJZ290byBmYWlsOwotQEAgLTEwNzUsNyArMTIxOSw3IEBAIHBrY3MxMV9mZXRj aF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgs Ci0gCS8qIHN1Y2Nlc3MgKi8KLSAJc3VjY2VzcyA9IDA7Ci0gZmFpbDoKLS0JZm9yIChpID0gMDsg aSA8IDM7IGkrKykKLSsJZm9yIChpID0gMDsgaSA8IG5hdHRyOyBpKyspCi0gCQlmcmVlKGtleV9h dHRyW2ldLnBWYWx1ZSk7Ci0gCVJTQV9mcmVlKHJzYSk7Ci0gCWlmIChzdWNjZXNzICE9IDApIHsK LUBAIC0xMDkwLDcgKzEyMzQsOCBAQCBzdGF0aWMgc3RydWN0IHNzaGtleSAqCi0gcGtjczExX2Zl dGNoX2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNs b3RpZHgsCi0gICAgIENLX09CSkVDVF9IQU5ETEUgKm9iaikKLSB7Ci0tCUNLX0FUVFJJQlVURQkJ IGtleV9hdHRyWzNdOwotKwlDS19BVFRSSUJVVEUJCSBrZXlfYXR0cls0XTsKLSsJaW50CQkJIG5h dHRyID0gNDsKLSAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247Ci0gCUNLX0ZVTkNUSU9OX0xJ U1QJKmYgPSBOVUxMOwotIAlDS19SVgkJCSBydjsKLUBAIC0xMTEwLDE0ICsxMjU1LDE1IEBAIHBr Y3MxMV9mZXRjaF9lZDI1NTE5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19V TE9ORyBzbG90aWR4LAotIAotIAltZW1zZXQoJmtleV9hdHRyLCAwLCBzaXplb2Yoa2V5X2F0dHIp KTsKLSAJa2V5X2F0dHJbMF0udHlwZSA9IENLQV9JRDsKLS0Ja2V5X2F0dHJbMV0udHlwZSA9IENL QV9FQ19QT0lOVDsgLyogWFhYIG9yIENLQV9WQUxVRSA/ICovCi0tCWtleV9hdHRyWzJdLnR5cGUg PSBDS0FfRUNfUEFSQU1TOwotKwlrZXlfYXR0clsxXS50eXBlID0gQ0tBX0xBQkVMOwotKwlrZXlf YXR0clsyXS50eXBlID0gQ0tBX0VDX1BPSU5UOyAvKiBYWFggb3IgQ0tBX1ZBTFVFID8gKi8KLSsJ a2V5X2F0dHJbM10udHlwZSA9IENLQV9FQ19QQVJBTVM7Ci0gCi0tCXNlc3Npb24gPSBwLT5zbG90 aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsKLSsJc2Vzc2lv biA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLSsJZiA9IHAtPm1vZHVs ZS0+ZnVuY3Rpb25fbGlzdDsKLSAKLSAJLyogZmlndXJlIG91dCBzaXplIG9mIHRoZSBhdHRyaWJ1 dGVzICovCi0tCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBrZXlf YXR0ciwgMyk7Ci0rCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBr ZXlfYXR0ciwgbmF0dHIpOwotIAlpZiAocnYgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19HZXRB dHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCXJldHVybiAoTlVMTCk7Ci1AQCAt MTEyOCwyOCArMTI3NCwyOCBAQCBwa2NzMTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0IHBr Y3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJICogZW5zdXJlIHRoYXQgbm9u ZSBvZiB0aGUgb3RoZXJzIGFyZSB6ZXJvIGxlbmd0aC4KLSAJICogWFhYIGFzc3VtZXMgQ0tBX0lE IGlzIGFsd2F5cyBmaXJzdC4KLSAJICovCi0tCWlmIChrZXlfYXR0clsxXS51bFZhbHVlTGVuID09 IDAgfHwKLS0JICAgIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCkgewotKwlpZiAoa2V5X2F0 dHJbMl0udWxWYWx1ZUxlbiA9PSAwIHx8Ci0rCSAgICBrZXlfYXR0clszXS51bFZhbHVlTGVuID09 IDApIHsKLSAJCWVycm9yKCJpbnZhbGlkIGF0dHJpYnV0ZSBsZW5ndGgiKTsKLSAJCXJldHVybiAo TlVMTCk7Ci0gCX0KLSAKLSAJLyogYWxsb2NhdGUgYnVmZmVycyBmb3IgYXR0cmlidXRlcyAqLwot LQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0rCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsr KSB7Ci0gCQlpZiAoa2V5X2F0dHJbaV0udWxWYWx1ZUxlbiA+IDApCi0gCQkJa2V5X2F0dHJbaV0u cFZhbHVlID0geGNhbGxvYygxLCBrZXlfYXR0cltpXS51bFZhbHVlTGVuKTsKLSAJfQotIAotIAkv KiByZXRyaWV2ZSBJRCwgcHVibGljIHBvaW50IGFuZCBjdXJ2ZSBwYXJhbWV0ZXJzIG9mIEVDIGtl eSAqLwotLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0 dHIsIDMpOwotKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5 X2F0dHIsIG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0QXR0 cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0KLSAKLSAJ LyogRXhwZWN0IG9uZSBvZiB0aGUgc3VwcG9ydGVkIGlkZW50aWZpZXJzIGluIENLQV9FQ19QQVJB TVMgKi8KLS0JZCA9ICh1X2NoYXIgKilrZXlfYXR0clsyXS5wVmFsdWU7Ci0tCWxlbiA9IGtleV9h dHRyWzJdLnVsVmFsdWVMZW47Ci0rCWQgPSAodV9jaGFyICopa2V5X2F0dHJbM10ucFZhbHVlOwot KwlsZW4gPSBrZXlfYXR0clszXS51bFZhbHVlTGVuOwotIAlpZiAoKGxlbiAhPSBzaXplb2YoaWQx KSB8fCBtZW1jbXAoZCwgaWQxLCBzaXplb2YoaWQxKSkgIT0gMCkgJiYKLSAJICAgIChsZW4gIT0g c2l6ZW9mKGlkMikgfHwgbWVtY21wKGQsIGlkMiwgc2l6ZW9mKGlkMikpICE9IDApKSB7Ci0gCQlo ZXggPSB0b2hleChkLCBsZW4pOwotQEAgLTExNjEsMTYgKzEzMDcsMTYgQEAgcGtjczExX2ZldGNo X2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3Rp ZHgsCi0gCSAqIEV4cGVjdCBlaXRoZXIgYSByYXcgMzIgYnl0ZSBwdWJrZXkgb3IgYW4gT0NURVQg U1RSSU5HIHdpdGgKLSAJICogYSAzMiBieXRlIHB1YmtleSBpbiBDS0FfVkFMVUUKLSAJICovCi0t CWQgPSAodV9jaGFyICopa2V5X2F0dHJbMV0ucFZhbHVlOwotLQlsZW4gPSBrZXlfYXR0clsxXS51 bFZhbHVlTGVuOwotKwlkID0gKHVfY2hhciAqKWtleV9hdHRyWzJdLnBWYWx1ZTsKLSsJbGVuID0g a2V5X2F0dHJbMl0udWxWYWx1ZUxlbjsKLSAJaWYgKGxlbiA9PSBFRDI1NTE5X1BLX1NaICsgMiAm JiBkWzBdID09IDB4MDQgJiYgZFsxXSA9PSBFRDI1NTE5X1BLX1NaKSB7Ci0gCQlkICs9IDI7Ci0g CQlsZW4gLT0gMjsKLSAJfQotIAlpZiAobGVuICE9IEVEMjU1MTlfUEtfU1opIHsKLS0JCWhleCA9 IHRvaGV4KGtleV9hdHRyWzFdLnBWYWx1ZSwga2V5X2F0dHJbMV0udWxWYWx1ZUxlbik7Ci0rCQlo ZXggPSB0b2hleChrZXlfYXR0clsyXS5wVmFsdWUsIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4pOwot IAkJbG9naXRfZigiQ0tBX0VDX1BPSU5UIGludmFsaWQgb2N0ZXQgc3RyOiAlcyAobGVuICVsdSki LAotLQkJICAgIGhleCwgKHVfbG9uZylrZXlfYXR0clsxXS51bFZhbHVlTGVuKTsKLSsJCSAgICBo ZXgsICh1X2xvbmcpa2V5X2F0dHJbMl0udWxWYWx1ZUxlbik7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0K LSAKLUBAIC0xMTkwLDcgKzEzMzYsNyBAQCBwa2NzMTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3Ry dWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJCWtleSA9IE5VTEw7 Ci0gCX0KLSAJZnJlZShoZXgpOwotLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotKwlmb3IgKGkg PSAwOyBpIDwgbmF0dHI7IGkrKykKLSAJCWZyZWUoa2V5X2F0dHJbaV0ucFZhbHVlKTsKLSAJcmV0 dXJuIGtleTsKLSB9Ci1AQCAtMTIwMCw3ICsxMzQ2LDggQEAgc3RhdGljIGludAotIHBrY3MxMV9m ZXRjaF94NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90 aWR4LAotICAgICBDS19PQkpFQ1RfSEFORExFICpvYmosIHN0cnVjdCBzc2hrZXkgKiprZXlwLCBj aGFyICoqbGFiZWxwKQotIHsKLS0JQ0tfQVRUUklCVVRFCQkgY2VydF9hdHRyWzNdOwotKwlDS19B VFRSSUJVVEUJCSBjZXJ0X2F0dHJbNF07Ci0rCWludAkJCSBuYXR0ciA9IDQ7Ci0gCUNLX1NFU1NJ T05fSEFORExFCSBzZXNzaW9uOwotIAlDS19GVU5DVElPTl9MSVNUCSpmID0gTlVMTDsKLSAJQ0tf UlYJCQkgcnY7Ci1AQCAtMTIyNiwxNCArMTM3MywxNSBAQCBwa2NzMTFfZmV0Y2hfeDUwOV9wdWJr ZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAKLSAJbWVt c2V0KCZjZXJ0X2F0dHIsIDAsIHNpemVvZihjZXJ0X2F0dHIpKTsKLSAJY2VydF9hdHRyWzBdLnR5 cGUgPSBDS0FfSUQ7Ci0tCWNlcnRfYXR0clsxXS50eXBlID0gQ0tBX1NVQkpFQ1Q7Ci0tCWNlcnRf YXR0clsyXS50eXBlID0gQ0tBX1ZBTFVFOwotKwljZXJ0X2F0dHJbMV0udHlwZSA9IENLQV9MQUJF TDsKLSsJY2VydF9hdHRyWzJdLnR5cGUgPSBDS0FfU1VCSkVDVDsKLSsJY2VydF9hdHRyWzNdLnR5 cGUgPSBDS0FfVkFMVUU7Ci0gCi0tCXNlc3Npb24gPSBwLT5zbG90aW5mb1tzbG90aWR4XS5zZXNz aW9uOwotLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsKLSsJc2Vzc2lvbiA9IHAtPm1vZHVsZS0+c2xv dGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLSsJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsK LSAKLSAJLyogZmlndXJlIG91dCBzaXplIG9mIHRoZSBhdHRyaWJ1dGVzICovCi0tCXJ2ID0gZi0+ Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBjZXJ0X2F0dHIsIDMpOwotKwlydiA9 IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwgY2VydF9hdHRyLCBuYXR0cik7 Ci0gCWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZh aWxlZDogJWx1IiwgcnYpOwotIAkJcmV0dXJuIC0xOwotQEAgLTEyNDUsMTggKzEzOTMsMTkgQEAg cGtjczExX2ZldGNoX3g1MDlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VM T05HIHNsb3RpZHgsCi0gCSAqIFhYWCBhc3N1bWVzIENLQV9JRCBpcyBhbHdheXMgZmlyc3QuCi0g CSAqLwotIAlpZiAoY2VydF9hdHRyWzFdLnVsVmFsdWVMZW4gPT0gMCB8fAotLQkgICAgY2VydF9h dHRyWzJdLnVsVmFsdWVMZW4gPT0gMCkgewotKwkgICAgY2VydF9hdHRyWzJdLnVsVmFsdWVMZW4g PT0gMCB8fAotKwkgICAgY2VydF9hdHRyWzNdLnVsVmFsdWVMZW4gPT0gMCkgewotIAkJZXJyb3Io ImludmFsaWQgYXR0cmlidXRlIGxlbmd0aCIpOwotIAkJcmV0dXJuIC0xOwotIAl9Ci0gCi0gCS8q IGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGF0dHJpYnV0ZXMgKi8KLS0JZm9yIChpID0gMDsgaSA8IDM7 IGkrKykKLSsJZm9yIChpID0gMDsgaSA8IG5hdHRyOyBpKyspCi0gCQlpZiAoY2VydF9hdHRyW2ld LnVsVmFsdWVMZW4gPiAwKQotIAkJCWNlcnRfYXR0cltpXS5wVmFsdWUgPSB4Y2FsbG9jKDEsIGNl cnRfYXR0cltpXS51bFZhbHVlTGVuKTsKLSAKLSAJLyogcmV0cmlldmUgSUQsIHN1YmplY3QgYW5k IHZhbHVlIG9mIGNlcnRpZmljYXRlICovCi0tCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShz ZXNzaW9uLCAqb2JqLCBjZXJ0X2F0dHIsIDMpOwotKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFs dWUoc2Vzc2lvbiwgKm9iaiwgY2VydF9hdHRyLCBuYXR0cik7Ci0gCWlmIChydiAhPSBDS1JfT0sp IHsKLSAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOwotIAkJ Z290byBvdXQ7Ci1AQCAtMTI3MCw4ICsxNDE5LDggQEAgcGtjczExX2ZldGNoX3g1MDlfcHVia2V5 KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0gCQlzdWJqZWN0 ID0geHN0cmR1cCgiaW52YWxpZCBzdWJqZWN0Iik7Ci0gCVg1MDlfTkFNRV9mcmVlKHg1MDlfbmFt ZSk7Ci0gCi0tCWNwID0gY2VydF9hdHRyWzJdLnBWYWx1ZTsKLS0JaWYgKCh4NTA5ID0gZDJpX1g1 MDkoTlVMTCwgJmNwLCBjZXJ0X2F0dHJbMl0udWxWYWx1ZUxlbikpID09IE5VTEwpIHsKLSsJY3Ag PSBjZXJ0X2F0dHJbM10ucFZhbHVlOwotKwlpZiAoKHg1MDkgPSBkMmlfWDUwOShOVUxMLCAmY3As IGNlcnRfYXR0clszXS51bFZhbHVlTGVuKSkgPT0gTlVMTCkgewotIAkJZXJyb3IoImQyaV94NTA5 IGZhaWxlZCIpOwotIAkJZ290byBvdXQ7Ci0gCX0KLUBAIC0xMzgxLDcgKzE1MzAsNyBAQCBwa2Nz MTFfZmV0Y2hfeDUwOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcg c2xvdGlkeCwKLSAJCWdvdG8gb3V0OwotIAl9Ci0gIG91dDoKLS0JZm9yIChpID0gMDsgaSA8IDM7 IGkrKykKLSsJZm9yIChpID0gMDsgaSA8IG5hdHRyOyBpKyspCi0gCQlmcmVlKGNlcnRfYXR0cltp XS5wVmFsdWUpOwotIAlYNTA5X2ZyZWUoeDUwOSk7Ci0gCVJTQV9mcmVlKHJzYSk7Ci1AQCAtMTQy NCwxMSArMTU3MywxMiBAQCBub3RlX2tleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19V TE9ORyBzbG90aWR4LCBjb25zdCBjaGFyICpjb250ZXh0LAotICAqLwotIHN0YXRpYyBpbnQKLSBw a2NzMTFfZmV0Y2hfY2VydHMoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xv dGlkeCwKLS0gICAgc3RydWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAqKipsYWJlbHNwLCBpbnQg Km5rZXlzKQotKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLCBjaGFyICoqKmxhYmVsc3AsIGlu dCAqbmtleXMsIHN0cnVjdCBwa2NzMTFfdXJpICp1cmkpCi0gewotIAlzdHJ1Y3Qgc3Noa2V5CQkq a2V5ID0gTlVMTDsKLSAJQ0tfT0JKRUNUX0NMQVNTCQkga2V5X2NsYXNzOwotLQlDS19BVFRSSUJV VEUJCSBrZXlfYXR0clsxXTsKLSsJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbM107Ci0rCWludAkJ CSBuYXR0ciA9IDE7Ci0gCUNLX1NFU1NJT05fSEFORExFCSBzZXNzaW9uOwotIAlDS19GVU5DVElP Tl9MSVNUCSpmID0gTlVMTDsKLSAJQ0tfUlYJCQkgcnY7Ci1AQCAtMTQ0NSwxMCArMTU5NSwyMyBA QCBwa2NzMTFfZmV0Y2hfY2VydHMoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcg c2xvdGlkeCwKLSAJa2V5X2F0dHJbMF0ucFZhbHVlID0gJmtleV9jbGFzczsKLSAJa2V5X2F0dHJb MF0udWxWYWx1ZUxlbiA9IHNpemVvZihrZXlfY2xhc3MpOwotIAotLQlzZXNzaW9uID0gcC0+c2xv dGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLS0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7Ci0rCWlmICh1 cmktPmlkICE9IE5VTEwpIHsKLSsJCWtleV9hdHRyW25hdHRyXS50eXBlID0gQ0tBX0lEOwotKwkJ a2V5X2F0dHJbbmF0dHJdLnBWYWx1ZSA9IHVyaS0+aWQ7Ci0rCQlrZXlfYXR0cltuYXR0cl0udWxW YWx1ZUxlbiA9IHVyaS0+aWRfbGVuOwotKwkJbmF0dHIrKzsKLSsJfQotKwlpZiAodXJpLT5vYmpl Y3QgIT0gTlVMTCkgewotKwkJa2V5X2F0dHJbbmF0dHJdLnR5cGUgPSBDS0FfTEFCRUw7Ci0rCQlr ZXlfYXR0cltuYXR0cl0ucFZhbHVlID0gdXJpLT5vYmplY3Q7Ci0rCQlrZXlfYXR0cltuYXR0cl0u dWxWYWx1ZUxlbiA9IHN0cmxlbih1cmktPm9iamVjdCk7Ci0rCQluYXR0cisrOwotKwl9Ci0rCi0r CXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0rCWYgPSBw LT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0gCi0tCXJ2ID0gZi0+Q19GaW5kT2JqZWN0c0luaXQo c2Vzc2lvbiwga2V5X2F0dHIsIDEpOwotKwlydiA9IGYtPkNfRmluZE9iamVjdHNJbml0KHNlc3Np b24sIGtleV9hdHRyLCBuYXR0cik7Ci0gCWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJD X0ZpbmRPYmplY3RzSW5pdCBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLUBAIC0x NTIxLDYgKzE2ODQsMTMgQEAgZmFpbDoKLSAKLSAJcmV0dXJuIChyZXQpOwotIH0KLSsjZWxzZQot K3N0YXRpYyBpbnQKLStwa2NzMTFfZmV0Y2hfY2VydHMoc3RydWN0IHBrY3MxMV9wcm92aWRlciAq cCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSsgICAgc3RydWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAq KipsYWJlbHNwLCBpbnQgKm5rZXlzLCBzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKQotK3sKLSsJcmV0 dXJuIDA7Ci0rfQotICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KLSAKLSAvKgotQEAgLTE1MzAs MTEgKzE3MDAsMTIgQEAgZmFpbDoKLSAgKi8KLSBzdGF0aWMgaW50Ci0gcGtjczExX2ZldGNoX2tl eXMoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLS0gICAgc3Ry dWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAqKipsYWJlbHNwLCBpbnQgKm5rZXlzKQotKyAgICBz dHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLCBjaGFyICoqKmxhYmVsc3AsIGludCAqbmtleXMsIHN0cnVj dCBwa2NzMTFfdXJpICp1cmkpCi0gewotIAlzdHJ1Y3Qgc3Noa2V5CQkqa2V5ID0gTlVMTDsKLSAJ Q0tfT0JKRUNUX0NMQVNTCQkga2V5X2NsYXNzOwotLQlDS19BVFRSSUJVVEUJCSBrZXlfYXR0clsy XTsKLSsJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbM107Ci0rCWludAkJCSBuYXR0ciA9IDE7Ci0g CUNLX1NFU1NJT05fSEFORExFCSBzZXNzaW9uOwotIAlDS19GVU5DVElPTl9MSVNUCSpmID0gTlVM TDsKLSAJQ0tfUlYJCQkgcnY7Ci1AQCAtMTU1MCwxMCArMTcyMSwyMyBAQCBwa2NzMTFfZmV0Y2hf a2V5cyhzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAlrZXlf YXR0clswXS5wVmFsdWUgPSAma2V5X2NsYXNzOwotIAlrZXlfYXR0clswXS51bFZhbHVlTGVuID0g c2l6ZW9mKGtleV9jbGFzcyk7Ci0gCi0tCXNlc3Npb24gPSBwLT5zbG90aW5mb1tzbG90aWR4XS5z ZXNzaW9uOwotLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsKLSsJaWYgKHVyaS0+aWQgIT0gTlVMTCkg ewotKwkJa2V5X2F0dHJbbmF0dHJdLnR5cGUgPSBDS0FfSUQ7Ci0rCQlrZXlfYXR0cltuYXR0cl0u cFZhbHVlID0gdXJpLT5pZDsKLSsJCWtleV9hdHRyW25hdHRyXS51bFZhbHVlTGVuID0gdXJpLT5p ZF9sZW47Ci0rCQluYXR0cisrOwotKwl9Ci0rCWlmICh1cmktPm9iamVjdCAhPSBOVUxMKSB7Ci0r CQlrZXlfYXR0cltuYXR0cl0udHlwZSA9IENLQV9MQUJFTDsKLSsJCWtleV9hdHRyW25hdHRyXS5w VmFsdWUgPSB1cmktPm9iamVjdDsKLSsJCWtleV9hdHRyW25hdHRyXS51bFZhbHVlTGVuID0gc3Ry bGVuKHVyaS0+b2JqZWN0KTsKLSsJCW5hdHRyKys7Ci0rCX0KLSsKLSsJc2Vzc2lvbiA9IHAtPm1v ZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLSsJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rp b25fbGlzdDsKLSAKLS0JcnYgPSBmLT5DX0ZpbmRPYmplY3RzSW5pdChzZXNzaW9uLCBrZXlfYXR0 ciwgMSk7Ci0rCXJ2ID0gZi0+Q19GaW5kT2JqZWN0c0luaXQoc2Vzc2lvbiwga2V5X2F0dHIsIG5h dHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfRmluZE9iamVjdHNJbml0 IGZhaWxlZDogJWx1IiwgcnYpOwotIAkJZ290byBmYWlsOwotQEAgLTE4NDEsMTYgKzIwMjUsMTAg QEAgcGtjczExX2VjZHNhX2dlbmVyYXRlX3ByaXZhdGVfa2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlk ZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0gfQotICNlbmRpZiAvKiBXSVRIX1BLQ1MxMV9LRVlH RU4gKi8KLSAKLS0vKgotLSAqIHJlZ2lzdGVyIGEgbmV3IHByb3ZpZGVyLCBmYWlscyBpZiBwcm92 aWRlciBhbHJlYWR5IGV4aXN0cy4gaWYKLS0gKiBrZXlwIGlzIHByb3ZpZGVkLCBmZXRjaCBrZXlz LgotLSAqLwotIHN0YXRpYyBpbnQKLS1wa2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXIoY2hhciAqcHJv dmlkZXJfaWQsIGNoYXIgKnBpbiwKLS0gICAgc3RydWN0IHNzaGtleSAqKiprZXlwLCBjaGFyICoq KmxhYmVsc3AsCi0tICAgIHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipwcm92aWRlcnAsIENLX1VM T05HIHVzZXIpCi0rcGtjczExX2luaXRpYWxpemVfcHJvdmlkZXIoc3RydWN0IHBrY3MxMV91cmkg KnVyaSwgc3RydWN0IHBrY3MxMV9wcm92aWRlciAqKnByb3ZpZGVycCkKLSB7Ci0tCWludCBua2V5 cywgbmVlZF9maW5hbGl6ZSA9IDA7Ci0rCWludCBuZWVkX2ZpbmFsaXplID0gMDsKLSAJaW50IHJl dCA9IC0xOwotIAlzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwID0gTlVMTDsKLSAJdm9pZCAqaGFu ZGxlID0gTlVMTDsKLUBAIC0xODU5LDEyOCArMjAzNywxMjYgQEAgcGtjczExX3JlZ2lzdGVyX3By b3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sCi0gCUNLX0ZVTkNUSU9OX0xJU1Qg KmYgPSBOVUxMOwotIAlDS19UT0tFTl9JTkZPICp0b2tlbjsKLSAJQ0tfVUxPTkcgaTsKLSsJY2hh ciAqcHJvdmlkZXJfbW9kdWxlID0gTlVMTDsKLSsJc3RydWN0IHBrY3MxMV9tb2R1bGUgKm0gPSBO VUxMOwotKwotKwkvKiBpZiBubyBwcm92aWRlciBzcGVjaWZpZWQsIGZhbGxiYWNrIHRvIHAxMS1r aXQgKi8KLSsJaWYgKHVyaS0+bW9kdWxlX3BhdGggPT0gTlVMTCkgewotKyNpZmRlZiBQS0NTMTFf REVGQVVMVF9QUk9WSURFUgotKwkJcHJvdmlkZXJfbW9kdWxlID0gc3RyZHVwKFBLQ1MxMV9ERUZB VUxUX1BST1ZJREVSKTsKLSsjZWxzZQotKwkJZXJyb3JfZigiTm8gbW9kdWxlIHBhdGggcHJvdmlk ZWQiKTsKLSsgCQlnb3RvIGZhaWw7Ci0rI2VuZGlmCi0rCX0gZWxzZSB7Ci0rCQlwcm92aWRlcl9t b2R1bGUgPSBzdHJkdXAodXJpLT5tb2R1bGVfcGF0aCk7Ci0rCX0KLSsJcCA9IHhjYWxsb2MoMSwg c2l6ZW9mKCpwKSk7Ci0rCXAtPm5hbWUgPSBwa2NzMTFfdXJpX2dldCh1cmkpOwotIAotLQlpZiAo cHJvdmlkZXJwID09IE5VTEwpCi0tCQlnb3RvIGZhaWw7Ci0tCSpwcm92aWRlcnAgPSBOVUxMOwot LQotLQlpZiAoa2V5cCAhPSBOVUxMKQotLQkJKmtleXAgPSBOVUxMOwotLQlpZiAobGFiZWxzcCAh PSBOVUxMKQotLQkJKmxhYmVsc3AgPSBOVUxMOwotLQotLQlpZiAocGtjczExX3Byb3ZpZGVyX2xv b2t1cChwcm92aWRlcl9pZCkgIT0gTlVMTCkgewotLQkJZGVidWdfZigicHJvdmlkZXIgYWxyZWFk eSByZWdpc3RlcmVkOiAlcyIsIHByb3ZpZGVyX2lkKTsKLSsJaWYgKGxpYl9jb250YWluc19zeW1i b2wocHJvdmlkZXJfbW9kdWxlLCAiQ19HZXRGdW5jdGlvbkxpc3QiKSAhPSAwKSB7Ci0rCQllcnJv cigicHJvdmlkZXIgJXMgaXMgbm90IGEgUEtDUzExIGxpYnJhcnkiLCBwcm92aWRlcl9tb2R1bGUp OwotIAkJZ290byBmYWlsOwotIAl9Ci0tCWlmIChsaWJfY29udGFpbnNfc3ltYm9sKHByb3ZpZGVy X2lkLCAiQ19HZXRGdW5jdGlvbkxpc3QiKSAhPSAwKSB7Ci0tCQllcnJvcigicHJvdmlkZXIgJXMg aXMgbm90IGEgUEtDUzExIGxpYnJhcnkiLCBwcm92aWRlcl9pZCk7Ci0tCQlnb3RvIGZhaWw7Ci0r CWlmICgobSA9IHBrY3MxMV9wcm92aWRlcl9sb29rdXBfbW9kdWxlKHByb3ZpZGVyX21vZHVsZSkp ICE9IE5VTEwKLSsJICAgJiYgbS0+dmFsaWQpIHsKLSsJCWRlYnVnX2YoInByb3ZpZGVyIG1vZHVs ZSBhbHJlYWR5IGluaXRpYWxpemVkOiAlcyIsIHByb3ZpZGVyX21vZHVsZSk7Ci0rCQlmcmVlKHBy b3ZpZGVyX21vZHVsZSk7Ci0rCQkvKiBTa2lwIHRoZSBpbml0aWFsaXphdGlvbiBvZiBQS0NTIzEx IG1vZHVsZSAqLwotKwkJbS0+cmVmY291bnQrKzsKLSsJCXAtPm1vZHVsZSA9IG07Ci0rCQlwLT52 YWxpZCA9IDE7Ci0rCQlUQUlMUV9JTlNFUlRfVEFJTCgmcGtjczExX3Byb3ZpZGVycywgcCwgbmV4 dCk7Ci0rCQlwLT5yZWZjb3VudCsrOwkvKiBhZGQgdG8gcHJvdmlkZXIgbGlzdCAqLwotKwkJKnBy b3ZpZGVycCA9IHA7Ci0rCQlyZXR1cm4gMDsKLSsJfSBlbHNlIHsKLSsJCW0gPSB4Y2FsbG9jKDEs IHNpemVvZigqbSkpOwotKwkJcC0+bW9kdWxlID0gbTsKLSsJCW0tPnJlZmNvdW50Kys7Ci0gCX0K LSsKLSAJLyogb3BlbiBzaGFyZWQgcGtjczExLWxpYnJhcnkgKi8KLS0JaWYgKChoYW5kbGUgPSBk bG9wZW4ocHJvdmlkZXJfaWQsIFJUTERfTk9XKSkgPT0gTlVMTCkgewotLQkJZXJyb3IoImRsb3Bl biAlcyBmYWlsZWQ6ICVzIiwgcHJvdmlkZXJfaWQsIGRsZXJyb3IoKSk7Ci0rCWlmICgoaGFuZGxl ID0gZGxvcGVuKHByb3ZpZGVyX21vZHVsZSwgUlRMRF9OT1cpKSA9PSBOVUxMKSB7Ci0rCQllcnJv cigiZGxvcGVuICVzIGZhaWxlZDogJXMiLCBwcm92aWRlcl9tb2R1bGUsIGRsZXJyb3IoKSk7Ci0g CQlnb3RvIGZhaWw7Ci0gCX0KLSAJaWYgKChnZXRmdW5jdGlvbmxpc3QgPSBkbHN5bShoYW5kbGUs ICJDX0dldEZ1bmN0aW9uTGlzdCIpKSA9PSBOVUxMKQotIAkJZmF0YWwoImRsc3ltKENfR2V0RnVu Y3Rpb25MaXN0KSBmYWlsZWQ6ICVzIiwgZGxlcnJvcigpKTsKLS0JcCA9IHhjYWxsb2MoMSwgc2l6 ZW9mKCpwKSk7Ci0tCXAtPm5hbWUgPSB4c3RyZHVwKHByb3ZpZGVyX2lkKTsKLS0JcC0+aGFuZGxl ID0gaGFuZGxlOwotLQkvKiBzZXQgdXAgdGhlIHBrY3MxMSBjYWxsYmFja3MgKi8KLSsJcC0+bW9k dWxlLT5oYW5kbGUgPSBoYW5kbGU7Ci0rCS8qIHNldHVwIHRoZSBwa2NzMTEgY2FsbGJhY2tzICov Ci0gCWlmICgocnYgPSAoKmdldGZ1bmN0aW9ubGlzdCkoJmYpKSAhPSBDS1JfT0spIHsKLSAJCWVy cm9yKCJDX0dldEZ1bmN0aW9uTGlzdCBmb3IgcHJvdmlkZXIgJXMgZmFpbGVkOiAlbHUiLAotLQkJ ICAgIHByb3ZpZGVyX2lkLCBydik7Ci0rCQkgICAgcHJvdmlkZXJfbW9kdWxlLCBydik7Ci0gCQln b3RvIGZhaWw7Ci0gCX0KLS0JcC0+ZnVuY3Rpb25fbGlzdCA9IGY7Ci0rCW0tPmZ1bmN0aW9uX2xp c3QgPSBmOwotIAlpZiAoKHJ2ID0gZi0+Q19Jbml0aWFsaXplKE5VTEwpKSAhPSBDS1JfT0spIHsK LSAJCWVycm9yKCJDX0luaXRpYWxpemUgZm9yIHByb3ZpZGVyICVzIGZhaWxlZDogJWx1IiwKLS0J CSAgICBwcm92aWRlcl9pZCwgcnYpOwotKwkJICAgIHByb3ZpZGVyX21vZHVsZSwgcnYpOwotIAkJ Z290byBmYWlsOwotIAl9Ci0gCW5lZWRfZmluYWxpemUgPSAxOwotLQlpZiAoKHJ2ID0gZi0+Q19H ZXRJbmZvKCZwLT5pbmZvKSkgIT0gQ0tSX09LKSB7Ci0rCWlmICgocnYgPSBmLT5DX0dldEluZm8o Jm0tPmluZm8pKSAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0dldEluZm8gZm9yIHByb3ZpZGVy ICVzIGZhaWxlZDogJWx1IiwKLS0JCSAgICBwcm92aWRlcl9pZCwgcnYpOwotKwkJICAgIHByb3Zp ZGVyX21vZHVsZSwgcnYpOwotIAkJZ290byBmYWlsOwotIAl9Ci0tCWRlYnVnKCJwcm92aWRlciAl czogbWFudWZhY3R1cmVySUQgPCUuKnM+IGNyeXB0b2tpVmVyc2lvbiAlZC4lZCIKLS0JICAgICIg bGlicmFyeURlc2NyaXB0aW9uIDwlLipzPiBsaWJyYXJ5VmVyc2lvbiAlZC4lZCIsCi0tCSAgICBw cm92aWRlcl9pZCwKLS0JICAgIFJNU1BBQ0UocC0+aW5mby5tYW51ZmFjdHVyZXJJRCksCi0tCSAg ICBwLT5pbmZvLmNyeXB0b2tpVmVyc2lvbi5tYWpvciwKLS0JICAgIHAtPmluZm8uY3J5cHRva2lW ZXJzaW9uLm1pbm9yLAotLQkgICAgUk1TUEFDRShwLT5pbmZvLmxpYnJhcnlEZXNjcmlwdGlvbiks Ci0tCSAgICBwLT5pbmZvLmxpYnJhcnlWZXJzaW9uLm1ham9yLAotLQkgICAgcC0+aW5mby5saWJy YXJ5VmVyc2lvbi5taW5vcik7Ci0tCWlmICgocnYgPSBmLT5DX0dldFNsb3RMaXN0KENLX1RSVUUs IE5VTEwsICZwLT5uc2xvdHMpKSAhPSBDS1JfT0spIHsKLSsJcm1zcGFjZShtLT5pbmZvLm1hbnVm YWN0dXJlcklELCBzaXplb2YobS0+aW5mby5tYW51ZmFjdHVyZXJJRCkpOwotKwlpZiAodXJpLT5s aWJfbWFudWYgIT0gTlVMTCAmJgotKwkgICAgc3RybmNtcCh1cmktPmxpYl9tYW51ZiwgbS0+aW5m by5tYW51ZmFjdHVyZXJJRCwgMzIpKSB7Ci0rCQlkZWJ1Z19mKCJTa2lwcGluZyBwcm92aWRlciAl cyBub3QgbWF0Y2hpbmcgbGlicmFyeV9tYW51ZmFjdHVyZXIiLAotKwkJICAgIG0tPmluZm8ubWFu dWZhY3R1cmVySUQpOwotKyAJCWdvdG8gZmFpbDsKLSsgCX0KLSsJcm1zcGFjZShtLT5pbmZvLmxp YnJhcnlEZXNjcmlwdGlvbiwgc2l6ZW9mKG0tPmluZm8ubGlicmFyeURlc2NyaXB0aW9uKSk7Ci0r CWRlYnVnKCJwcm92aWRlciAlczogbWFudWZhY3R1cmVySUQgPCUuMzJzPiBjcnlwdG9raVZlcnNp b24gJWQuJWQiCi0rCSAgICAiIGxpYnJhcnlEZXNjcmlwdGlvbiA8JS4zMnM+IGxpYnJhcnlWZXJz aW9uICVkLiVkIiwKLSsJICAgIHByb3ZpZGVyX21vZHVsZSwKLSsJICAgIG0tPmluZm8ubWFudWZh Y3R1cmVySUQsCi0rCSAgICBtLT5pbmZvLmNyeXB0b2tpVmVyc2lvbi5tYWpvciwKLSsJICAgIG0t PmluZm8uY3J5cHRva2lWZXJzaW9uLm1pbm9yLAotKwkgICAgbS0+aW5mby5saWJyYXJ5RGVzY3Jp cHRpb24sCi0rCSAgICBtLT5pbmZvLmxpYnJhcnlWZXJzaW9uLm1ham9yLAotKwkgICAgbS0+aW5m by5saWJyYXJ5VmVyc2lvbi5taW5vcik7Ci0rCi0rCWlmICgocnYgPSBmLT5DX0dldFNsb3RMaXN0 KENLX1RSVUUsIE5VTEwsICZtLT5uc2xvdHMpKSAhPSBDS1JfT0spIHsKLSAJCWVycm9yKCJDX0dl dFNsb3RMaXN0IGZhaWxlZDogJWx1IiwgcnYpOwotIAkJZ290byBmYWlsOwotIAl9Ci0tCWlmIChw LT5uc2xvdHMgPT0gMCkgewotLQkJZGVidWdfZigicHJvdmlkZXIgJXMgcmV0dXJuZWQgbm8gc2xv dHMiLCBwcm92aWRlcl9pZCk7Ci0rCWlmIChtLT5uc2xvdHMgPT0gMCkgewotKwkJZGVidWdfZigi cHJvdmlkZXIgJXMgcmV0dXJuZWQgbm8gc2xvdHMiLCBwcm92aWRlcl9tb2R1bGUpOwotIAkJcmV0 ID0gLVNTSF9QS0NTMTFfRVJSX05PX1NMT1RTOwotIAkJZ290byBmYWlsOwotIAl9Ci0tCXAtPnNs b3RsaXN0ID0geGNhbGxvYyhwLT5uc2xvdHMsIHNpemVvZihDS19TTE9UX0lEKSk7Ci0tCWlmICgo cnYgPSBmLT5DX0dldFNsb3RMaXN0KENLX1RSVUUsIHAtPnNsb3RsaXN0LCAmcC0+bnNsb3RzKSkK LSsJbS0+c2xvdGxpc3QgPSB4Y2FsbG9jKG0tPm5zbG90cywgc2l6ZW9mKENLX1NMT1RfSUQpKTsK LSsJaWYgKChydiA9IGYtPkNfR2V0U2xvdExpc3QoQ0tfVFJVRSwgbS0+c2xvdGxpc3QsICZtLT5u c2xvdHMpKQotIAkgICAgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigiQ19HZXRTbG90TGlzdCBmb3Ig cHJvdmlkZXIgJXMgZmFpbGVkOiAlbHUiLAotLQkJICAgIHByb3ZpZGVyX2lkLCBydik7Ci0rCQkg ICAgcHJvdmlkZXJfbW9kdWxlLCBydik7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0KLS0JcC0+c2xvdGlu Zm8gPSB4Y2FsbG9jKHAtPm5zbG90cywgc2l6ZW9mKHN0cnVjdCBwa2NzMTFfc2xvdGluZm8pKTsK LSsJbS0+c2xvdGluZm8gPSB4Y2FsbG9jKG0tPm5zbG90cywgc2l6ZW9mKHN0cnVjdCBwa2NzMTFf c2xvdGluZm8pKTsKLSAJcC0+dmFsaWQgPSAxOwotLQlua2V5cyA9IDA7Ci0tCWZvciAoaSA9IDA7 IGkgPCBwLT5uc2xvdHM7IGkrKykgewotLQkJdG9rZW4gPSAmcC0+c2xvdGluZm9baV0udG9rZW47 Ci0tCQlpZiAoKHJ2ID0gZi0+Q19HZXRUb2tlbkluZm8ocC0+c2xvdGxpc3RbaV0sIHRva2VuKSkK LSsJbS0+dmFsaWQgPSAxOwotKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnNsb3RzOyBpKyspIHsKLSsJ CXRva2VuID0gJm0tPnNsb3RpbmZvW2ldLnRva2VuOwotKwkJaWYgKChydiA9IGYtPkNfR2V0VG9r ZW5JbmZvKG0tPnNsb3RsaXN0W2ldLCB0b2tlbikpCi0gCQkgICAgIT0gQ0tSX09LKSB7Ci0gCQkJ ZXJyb3IoIkNfR2V0VG9rZW5JbmZvIGZvciBwcm92aWRlciAlcyBzbG90ICVsdSAiCi0tCQkJICAg ICJmYWlsZWQ6ICVsdSIsIHByb3ZpZGVyX2lkLCAodV9sb25nKWksIHJ2KTsKLS0JCQljb250aW51 ZTsKLS0JCX0KLS0JCWlmICgodG9rZW4tPmZsYWdzICYgQ0tGX1RPS0VOX0lOSVRJQUxJWkVEKSA9 PSAwKSB7Ci0tCQkJZGVidWcyX2YoImlnbm9yaW5nIHVuaW5pdGlhbGlzZWQgdG9rZW4gaW4gIgot LQkJCSAgICAicHJvdmlkZXIgJXMgc2xvdCAlbHUiLCBwcm92aWRlcl9pZCwgKHVfbG9uZylpKTsK LSsJCQkgICAgImZhaWxlZDogJWx1IiwgcHJvdmlkZXJfbW9kdWxlLCAodV9sb25nKWksIHJ2KTsK LSAJCQljb250aW51ZTsKLSAJCX0KLSAJCWRlYnVnKCJwcm92aWRlciAlcyBzbG90ICVsdTogbGFi ZWwgPCUuKnM+ICIKLSAJCSAgICAibWFudWZhY3R1cmVySUQgPCUuKnM+IG1vZGVsIDwlLipzPiBz ZXJpYWwgPCUuKnM+ICIKLSAJCSAgICAiZmxhZ3MgMHglbHgiLAotLQkJICAgIHByb3ZpZGVyX2lk LCAodW5zaWduZWQgbG9uZylpLAotKwkJICAgIHByb3ZpZGVyX21vZHVsZSwgKHVuc2lnbmVkIGxv bmcpaSwKLSAJCSAgICBSTVNQQUNFKHRva2VuLT5sYWJlbCksIFJNU1BBQ0UodG9rZW4tPm1hbnVm YWN0dXJlcklEKSwKLSAJCSAgICBSTVNQQUNFKHRva2VuLT5tb2RlbCksIFJNU1BBQ0UodG9rZW4t PnNlcmlhbE51bWJlciksCi0gCQkgICAgdG9rZW4tPmZsYWdzKTsKLS0JCS8qCi0tCQkgKiBvcGVu IHNlc3Npb24sIGxvZ2luIHdpdGggcGluIGFuZCByZXRyaWV2ZSBwdWJsaWMKLS0JCSAqIGtleXMg KGlmIGtleXAgaXMgcHJvdmlkZWQpCi0tCQkgKi8KLS0JCWlmICgocmV0ID0gcGtjczExX29wZW5f c2Vzc2lvbihwLCBpLCBwaW4sIHVzZXIpKSAhPSAwIHx8Ci0tCQkgICAga2V5cCA9PSBOVUxMKQot LQkJCWNvbnRpbnVlOwotLQkJcGtjczExX2ZldGNoX2tleXMocCwgaSwga2V5cCwgbGFiZWxzcCwg Jm5rZXlzKTsKLS0jaWZkZWYgV0lUSF9PUEVOU1NMCi0tCQlwa2NzMTFfZmV0Y2hfY2VydHMocCwg aSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzKTsKLS0jZW5kaWYKLS0JCWlmIChua2V5cyA9PSAwICYm ICFwLT5zbG90aW5mb1tpXS5sb2dnZWRfaW4gJiYKLS0JCSAgICBwa2NzMTFfaW50ZXJhY3RpdmUp IHsKLS0JCQkvKgotLQkJCSAqIFNvbWUgdG9rZW5zIHJlcXVpcmUgbG9naW4gYmVmb3JlIHRoZXkg d2lsbAotLQkJCSAqIGV4cG9zZSBrZXlzLgotLQkJCSAqLwotLQkJCWlmIChwa2NzMTFfbG9naW5f c2xvdChwLCAmcC0+c2xvdGluZm9baV0sCi0tCQkJICAgIENLVV9VU0VSKSA8IDApIHsKLS0JCQkJ ZXJyb3IoImxvZ2luIGZhaWxlZCIpOwotLQkJCQljb250aW51ZTsKLS0JCQl9Ci0tCQkJcGtjczEx X2ZldGNoX2tleXMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzKTsKLS0jaWZkZWYgV0lUSF9P UEVOU1NMCi0tCQkJcGtjczExX2ZldGNoX2NlcnRzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5 cyk7Ci0tI2VuZGlmCi0tCQl9Ci0gCX0KLSsJbS0+bW9kdWxlX3BhdGggPSBwcm92aWRlcl9tb2R1 bGU7Ci0rCXByb3ZpZGVyX21vZHVsZSA9IE5VTEw7Ci0gCi0gCS8qIG5vdyBvd25lZCBieSBjYWxs ZXIgKi8KLSAJKnByb3ZpZGVycCA9IHA7Ci1AQCAtMTk4OCwyMSArMjE2NCwyMiBAQCBwa2NzMTFf cmVnaXN0ZXJfcHJvdmlkZXIoY2hhciAqcHJvdmlkZXJfaWQsIGNoYXIgKnBpbiwKLSAJVEFJTFFf SU5TRVJUX1RBSUwoJnBrY3MxMV9wcm92aWRlcnMsIHAsIG5leHQpOwotIAlwLT5yZWZjb3VudCsr OwkvKiBhZGQgdG8gcHJvdmlkZXIgbGlzdCAqLwotIAotLQlyZXR1cm4gKG5rZXlzKTsKLSsJcmV0 dXJuIDA7Ci0gZmFpbDoKLSAJaWYgKG5lZWRfZmluYWxpemUgJiYgKHJ2ID0gZi0+Q19GaW5hbGl6 ZShOVUxMKSkgIT0gQ0tSX09LKQotIAkJZXJyb3IoIkNfRmluYWxpemUgZm9yIHByb3ZpZGVyICVz IGZhaWxlZDogJWx1IiwKLS0JCSAgICBwcm92aWRlcl9pZCwgcnYpOwotKwkJICAgIHByb3ZpZGVy X21vZHVsZSwgcnYpOwotKwlmcmVlKHByb3ZpZGVyX21vZHVsZSk7Ci0rCWlmIChtKSB7Ci0rCQlm cmVlKG0tPnNsb3RsaXN0KTsKLSsJCWZyZWUobSk7Ci0rCX0KLSAJaWYgKHApIHsKLSAJCWZyZWUo cC0+bmFtZSk7Ci0tCQlmcmVlKHAtPnNsb3RsaXN0KTsKLS0JCWZyZWUocC0+c2xvdGluZm8pOwot IAkJZnJlZShwKTsKLSAJfQotIAlpZiAoaGFuZGxlKQotIAkJZGxjbG9zZShoYW5kbGUpOwotLQlp ZiAocmV0ID4gMCkKLS0JCXJldCA9IC0xOwotIAlyZXR1cm4gKHJldCk7Ci0gfQotIAotQEAgLTIw MzgsMTggKzIyMTUsMTYzIEBAIHBrY3MxMV90ZXJtaW5hdGUodm9pZCkKLSB9Ci0gCi0gLyoKLS0g KiByZWdpc3RlciBhIG5ldyBwcm92aWRlciBhbmQgZ2V0IG51bWJlciBvZiBrZXlzIGhvbGQgYnkg dGhlIHRva2VuLAotLSAqIGZhaWxzIGlmIHByb3ZpZGVyIGFscmVhZHkgZXhpc3RzCi0rICogcmVn aXN0ZXIgYSBuZXcgcHJvdmlkZXIsIGZhaWxzIGlmIHByb3ZpZGVyIGFscmVhZHkgZXhpc3RzLiBp ZgotKyAqIGtleXAgaXMgcHJvdmlkZWQsIGZldGNoIGtleXMuCi0gICovCi0rc3RhdGljIGludAot K3BrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKnVyaSwg Y2hhciAqcGluLAotKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsIGNoYXIgKioqbGFiZWxzcCwg c3RydWN0IHBrY3MxMV9wcm92aWRlciAqKnByb3ZpZGVycCwKLSsgICAgQ0tfVUxPTkcgdXNlcikK LSt7Ci0rCWludCBua2V5czsKLSsJaW50IHJldCA9IC0xOwotKwlzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyICpwID0gTlVMTDsKLSsJQ0tfVUxPTkcgaTsKLSsJQ0tfVE9LRU5fSU5GTyAqdG9rZW47Ci0r CWNoYXIgKnByb3ZpZGVyX3VyaSA9IE5VTEw7Ci0rCi0rCWlmIChwcm92aWRlcnAgPT0gTlVMTCkK LSsJCWdvdG8gZmFpbDsKLSsJKnByb3ZpZGVycCA9IE5VTEw7Ci0rCi0rCWlmIChrZXlwICE9IE5V TEwpCi0rCQkqa2V5cCA9IE5VTEw7Ci0rCi0rCWlmICgocmV0ID0gcGtjczExX2luaXRpYWxpemVf cHJvdmlkZXIodXJpLCAmcCkpICE9IDApIHsKLSsJCWdvdG8gZmFpbDsKLSsJfQotKwotKwlwcm92 aWRlcl91cmkgPSBwa2NzMTFfdXJpX2dldCh1cmkpOwotKwlpZiAocGluID09IE5VTEwgJiYgdXJp LT5waW4gIT0gTlVMTCkgewotKwkJcGluID0gdXJpLT5waW47Ci0rCX0KLSsJbmtleXMgPSAwOwot Kwlmb3IgKGkgPSAwOyBpIDwgcC0+bW9kdWxlLT5uc2xvdHM7IGkrKykgewotKwkJdG9rZW4gPSAm cC0+bW9kdWxlLT5zbG90aW5mb1tpXS50b2tlbjsKLSsJCWlmICgodG9rZW4tPmZsYWdzICYgQ0tG X1RPS0VOX0lOSVRJQUxJWkVEKSA9PSAwKSB7Ci0rCQkJZGVidWcyX2YoImlnbm9yaW5nIHVuaW5p dGlhbGlzZWQgdG9rZW4gaW4gIgotKwkJCSAgICAicHJvdmlkZXIgJXMgc2xvdCAlbHUiLCBwcm92 aWRlcl91cmksICh1X2xvbmcpaSk7Ci0rCQkJY29udGludWU7Ci0rCQl9Ci0rCQlpZiAodXJpLT50 b2tlbiAhPSBOVUxMICYmCi0rCQkgICAgc3RybmNtcCh0b2tlbi0+bGFiZWwsIHVyaS0+dG9rZW4s IDMyKSAhPSAwKSB7Ci0rCQkJZGVidWcyX2YoImlnbm9yaW5nIHRva2VuIG5vdCBtYXRjaGluZyBs YWJlbCAoJS4zMnMpICIKLSsJCQkgICAgInNwZWNpZmllZCBieSBQS0NTIzExIFVSSSBpbiBzbG90 ICVsdSIsCi0rCQkJICAgIHRva2VuLT5sYWJlbCwgKHVuc2lnbmVkIGxvbmcpaSk7Ci0rCQkJY29u dGludWU7Ci0rCQl9Ci0rCQlpZiAodXJpLT5tYW51ZiAhPSBOVUxMICYmCi0rCQkgICAgc3RybmNt cCh0b2tlbi0+bWFudWZhY3R1cmVySUQsIHVyaS0+bWFudWYsIDMyKSAhPSAwKSB7Ci0rCQkJZGVi dWcyX2YoImlnbm9yaW5nIHRva2VuIG5vdCBtYXRjaGluZyByZXF1cmVzdGVkICIKLSsJCQkgICAg Im1hbnVmYWN0dXJlcklEICglLjMycykgc3BlY2lmaWVkIGJ5IFBLQ1MjMTEgVVJJIGluICIKLSsJ CQkgICAgInNsb3QgJWx1IiwgdG9rZW4tPm1hbnVmYWN0dXJlcklELCAodW5zaWduZWQgbG9uZylp KTsKLSsJCQljb250aW51ZTsKLSsJCX0KLSsJCWlmICh1cmktPnNlcmlhbCAhPSBOVUxMICYmCi0r CQkgICAgc3RybmNtcCh0b2tlbi0+c2VyaWFsTnVtYmVyLCB1cmktPnNlcmlhbCwgMTYpICE9IDAp IHsKLSsJCQlkZWJ1ZzJfZigiaWdub3JpbmcgdG9rZW4gbm90IG1hdGNoaW5nIHJlcXVyZXN0ZWQg IgotKwkJCSAgICAic2VyaWFsTnVtYmVyICglcykgc3BlY2lmaWVkIGJ5IFBLQ1MjMTEgVVJJIGlu ICIKLSsJCQkgICAgInNsb3QgJWx1IiwgdG9rZW4tPnNlcmlhbE51bWJlciwgKHVuc2lnbmVkIGxv bmcpaSk7Ci0rCQkJY29udGludWU7Ci0rCQl9Ci0rCQlkZWJ1ZygicHJvdmlkZXIgJXMgc2xvdCAl bHU6IGxhYmVsIDwlLjMycz4gbWFudWZhY3R1cmVySUQgPCUuMzJzPiAiCi0rCQkgICAgIm1vZGVs IDwlLjE2cz4gc2VyaWFsIDwlLjE2cz4gZmxhZ3MgMHglbHgiLAotKwkJICAgIHByb3ZpZGVyX3Vy aSwgKHVuc2lnbmVkIGxvbmcpaSwKLSsJCSAgICB0b2tlbi0+bGFiZWwsIHRva2VuLT5tYW51ZmFj dHVyZXJJRCwgdG9rZW4tPm1vZGVsLAotKwkJICAgIHRva2VuLT5zZXJpYWxOdW1iZXIsIHRva2Vu LT5mbGFncyk7Ci0rCQkvKgotKwkJICogb3BlbiBzZXNzaW9uIGlmIG5vdCB5ZXQgb3BlbmVkLCBs b2dpbiB3aXRoIHBpbiBhbmQKLSsJCSAqIHJldHJpZXZlIHB1YmxpYyBrZXlzIChpZiBrZXlwIGlz IHByb3ZpZGVkKQotKwkJICovCi0rCQlpZiAoKHAtPm1vZHVsZS0+c2xvdGluZm9baV0uc2Vzc2lv biAhPSAwIHx8Ci0rCQkgICAgKHJldCA9IHBrY3MxMV9vcGVuX3Nlc3Npb24ocCwgaSwgcGluLCB1 c2VyKSkgIT0gMCkgJiYgLyogPz8/ICovCi0rCQkgICAga2V5cCA9PSBOVUxMKQotKwkJCWNvbnRp bnVlOwotKwkJcGtjczExX2ZldGNoX2tleXMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1 cmkpOwotKwkJcGtjczExX2ZldGNoX2NlcnRzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cywg dXJpKTsKLSsJCWlmIChua2V5cyA9PSAwICYmICFwLT5tb2R1bGUtPnNsb3RpbmZvW2ldLmxvZ2dl ZF9pbiAmJgotKwkJICAgIHBrY3MxMV9pbnRlcmFjdGl2ZSkgewotKwkJCS8qCi0rCQkJICogU29t ZSB0b2tlbnMgcmVxdWlyZSBsb2dpbiBiZWZvcmUgdGhleSB3aWxsCi0rCQkJICogZXhwb3NlIGtl eXMuCi0rCQkJICovCi0rCQkJZGVidWczX2YoIlRyeWluZyB0byBsb2dpbiBhcyB0aGVyZSB3ZXJl IG5vIGtleXMgZm91bmQiKTsKLSsJCQlpZiAocGtjczExX2xvZ2luX3Nsb3QocCwgJnAtPm1vZHVs ZS0+c2xvdGluZm9baV0sCi0rCQkJICAgIENLVV9VU0VSKSA8IDApIHsKLSsJCQkJZXJyb3IoImxv Z2luIGZhaWxlZCIpOwotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQkJcGtjczExX2ZldGNoX2tl eXMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOwotKwkJCXBrY3MxMV9mZXRjaF9j ZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMsIHVyaSk7Ci0rCQl9Ci0rCQlpZiAobmtl eXMgPT0gMCAmJiB1cmktPm9iamVjdCAhPSBOVUxMKSB7Ci0rCQkJZGVidWczX2YoIk5vIGtleXMg Zm91bmQuIFJldHJ5aW5nIHdpdGhvdXQgbGFiZWwgKCUuMzJzKSAiLAotKwkJCSAgICB1cmktPm9i amVjdCk7Ci0rCQkJLyogVHJ5IG9uY2UgbW9yZSB3aXRob3V0IHRoZSBsYWJlbCBmaWx0ZXIgKi8K LSsJCQljaGFyICpsYWJlbCA9IHVyaS0+b2JqZWN0OwotKwkJCXVyaS0+b2JqZWN0ID0gTlVMTDsg LyogWFhYIGNsb25lIHVyaT8gKi8KLSsJCQlwa2NzMTFfZmV0Y2hfa2V5cyhwLCBpLCBrZXlwLCBs YWJlbHNwLCAmbmtleXMsIHVyaSk7Ci0rCQkJcGtjczExX2ZldGNoX2NlcnRzKHAsIGksIGtleXAs IGxhYmVsc3AsICZua2V5cywgdXJpKTsKLSsJCQl1cmktPm9iamVjdCA9IGxhYmVsOwotKwkJfQot Kwl9Ci0rCXBpbiA9IE5VTEw7IC8qIFdpbGwgYmUgY2xlYW5lZCB1cCB3aXRoIFVSSSAqLwotKwot KwkvKiBub3cgb3duZWQgYnkgY2FsbGVyICovCi0rCSpwcm92aWRlcnAgPSBwOwotKwotKwlmcmVl KHByb3ZpZGVyX3VyaSk7Ci0rCXJldHVybiAobmtleXMpOwotKyBmYWlsOgotKwlpZiAocCkgewot KwkJVEFJTFFfUkVNT1ZFKCZwa2NzMTFfcHJvdmlkZXJzLCBwLCBuZXh0KTsKLSsJICAgICAJcGtj czExX3Byb3ZpZGVyX3VucmVmKHApOwotKwl9Ci0rCWlmIChyZXQgPiAwKQotKwkJcmV0ID0gLTE7 Ci0rCXJldHVybiAocmV0KTsKLSt9Ci0rCi0rI2lmZGVmIFdJVEhfUEtDUzExX0tFWUdFTgotK3N0 YXRpYyBpbnQKLStwa2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXIoY2hhciAqcHJvdmlkZXJfaWQsIGNo YXIgKnBpbiwgc3RydWN0IHNzaGtleSAqKiprZXlwLAotKyAgICBjaGFyICoqKmxhYmVsc3AsIHN0 cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipwcm92aWRlcnAsIENLX1VMT05HIHVzZXIpCi0rewotKwlz dHJ1Y3QgcGtjczExX3VyaSAqdXJpID0gTlVMTDsKLSsJaW50IHI7Ci0rCi0rCWRlYnVnX2YoImNh bGxlZCwgcHJvdmlkZXJfaWQgPSAlcyIsIHByb3ZpZGVyX2lkKTsKLSsKLSsJdXJpID0gcGtjczEx X3VyaV9pbml0KCk7Ci0rCWlmICh1cmkgPT0gTlVMTCkKLSsJCWZhdGFsKCJmYWlsZWQgdG8gaW5p dCBQS0NTIzExIFVSSSIpOwotKwotKwlpZiAoc3RybGVuKHByb3ZpZGVyX2lkKSA+PSBzdHJsZW4o UEtDUzExX1VSSV9TQ0hFTUUpICYmCi0rCSAgICBzdHJuY21wKHByb3ZpZGVyX2lkLCBQS0NTMTFf VVJJX1NDSEVNRSwgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkgewotKwkJaWYgKHBr Y3MxMV91cmlfcGFyc2UocHJvdmlkZXJfaWQsIHVyaSkgIT0gMCkKLSsJCQlmYXRhbCgiRmFpbGVk IHRvIHBhcnNlIFBLQ1MjMTEgVVJJIik7Ci0rCX0gZWxzZSB7Ci0rCQl1cmktPm1vZHVsZV9wYXRo ID0gc3RyZHVwKHByb3ZpZGVyX2lkKTsKLSsJfQotKwotKwlyID0gcGtjczExX3JlZ2lzdGVyX3By b3ZpZGVyX2J5X3VyaSh1cmksIHBpbiwga2V5cCwgbGFiZWxzcCwgcHJvdmlkZXJwLCB1c2VyKTsK LSsJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7Ci0rCi0rCXJldHVybiByOwotK30KLSsjZW5kaWYK LSsKLSBpbnQKLS1wa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpw aW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwKLS0gICAgY2hhciAqKipsYWJlbHNwKQotK3BrY3Mx MV9hZGRfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBwa2NzMTFfdXJpICp1cmksIGNoYXIgKnBpbiwK LSsgICAgc3RydWN0IHNzaGtleSAqKiprZXlwLCBjaGFyICoqKmxhYmVsc3ApCi0gewotIAlzdHJ1 Y3QgcGtjczExX3Byb3ZpZGVyICpwID0gTlVMTDsKLSAJaW50IG5rZXlzOwotKwljaGFyICpwcm92 aWRlcl91cmkgPSBwa2NzMTFfdXJpX2dldCh1cmkpOwotIAotLQlua2V5cyA9IHBrY3MxMV9yZWdp c3Rlcl9wcm92aWRlcihwcm92aWRlcl9pZCwgcGluLCBrZXlwLCBsYWJlbHNwLAotLQkgICAgJnAs IENLVV9VU0VSKTsKLSsJZGVidWdfZigiY2FsbGVkLCBwcm92aWRlcl91cmkgPSAlcyIsIHByb3Zp ZGVyX3VyaSk7Ci0rCi0rCW5rZXlzID0gcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyX2J5X3VyaSh1 cmksIHBpbiwga2V5cCwgbGFiZWxzcCwgJnAsIENLVV9VU0VSKTsKLSAKLSAJLyogbm8ga2V5cyBm b3VuZCBvciBzb21lIG90aGVyIGVycm9yLCBkZS1yZWdpc3RlciBwcm92aWRlciAqLwotIAlpZiAo bmtleXMgPD0gMCAmJiBwICE9IE5VTEwpIHsKLUBAIC0yMDU4LDExICsyMzgwLDM4IEBAIHBrY3Mx MV9hZGRfcHJvdmlkZXIoY2hhciAqcHJvdmlkZXJfaWQsIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtl eSAqKiprZXlwLAotIAkJcGtjczExX3Byb3ZpZGVyX3VucmVmKHApOwotIAl9Ci0gCWlmIChua2V5 cyA9PSAwKQotLQkJZGVidWdfZigicHJvdmlkZXIgJXMgcmV0dXJuZWQgbm8ga2V5cyIsIHByb3Zp ZGVyX2lkKTsKLSsJCWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVybmVkIG5vIGtleXMiLCBwcm92 aWRlcl91cmkpOwotIAotKwlmcmVlKHByb3ZpZGVyX3VyaSk7Ci0gCXJldHVybiAobmtleXMpOwot IH0KLSAKLStpbnQKLStwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFy ICpwaW4sCi0rICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwgY2hhciAqKipsYWJlbHNwKQotK3sK LSsJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKLSsJaW50IG5rZXlzOwotKwotKwl1cmkgPSBwa2Nz MTFfdXJpX2luaXQoKTsKLSsJaWYgKHVyaSA9PSBOVUxMKQotKwkJZmF0YWwoIkZhaWxlZCB0byBp bml0IFBLQ1MjMTEgVVJJIik7Ci0rCi0rCWlmIChzdHJsZW4ocHJvdmlkZXJfaWQpID49IHN0cmxl bihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKLSsJICAgIHN0cm5jbXAocHJvdmlkZXJfaWQsIFBLQ1Mx MV9VUklfU0NIRU1FLCBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7Ci0rCQlpZiAo cGtjczExX3VyaV9wYXJzZShwcm92aWRlcl9pZCwgdXJpKSAhPSAwKQotKwkJCWZhdGFsKCJGYWls ZWQgdG8gcGFyc2UgUEtDUyMxMSBVUkkiKTsKLSsJfSBlbHNlIHsKLSsJCXVyaS0+bW9kdWxlX3Bh dGggPSBzdHJkdXAocHJvdmlkZXJfaWQpOwotKwl9Ci0rCi0rCW5rZXlzID0gcGtjczExX2FkZF9w cm92aWRlcl9ieV91cmkodXJpLCBwaW4sIGtleXAsIGxhYmVsc3ApOwotKwlwa2NzMTFfdXJpX2Ns ZWFudXAodXJpKTsKLSsKLSsgCXJldHVybiAobmtleXMpOwotK30KLSsKLSsKLSBpbnQKLSBwa2Nz MTFfc2lnbihzdHJ1Y3Qgc3Noa2V5ICprZXksCi0gICAgIHVfY2hhciAqKnNpZ3AsIHNpemVfdCAq bGVucCwKLWRpZmYgLS1naXQgYS9zc2gtcGtjczExLmggYi9zc2gtcGtjczExLmgKLWluZGV4IDFk MDI3N2E2ZC4uMTM0NTk2NDRjIDEwMDY0NAotLS0tIGEvc3NoLXBrY3MxMS5oCi0rKysgYi9zc2gt cGtjczExLmgKLUBAIC0yNCwxMiArMjQsMTYgQEAKLSAjZGVmaW5lCVNTSF9QS0NTMTFfRVJSX1BJ Tl9SRVFVSVJFRAkJNAotICNkZWZpbmUJU1NIX1BLQ1MxMV9FUlJfUElOX0xPQ0tFRAkJNQotIAot KyNpbmNsdWRlICJzc2gtcGtjczExLXVyaS5oIgotKwotIHN0cnVjdCBzc2hrZXk7Ci0gCi0gaW50 CXBrY3MxMV9pbml0KGludCk7Ci0gdm9pZAlwa2NzMTFfdGVybWluYXRlKHZvaWQpOwotIGludAlw a2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKiwgY2hhciAqLCBzdHJ1Y3Qgc3Noa2V5ICoqKiwgY2hh ciAqKiopOwotK2ludAlwa2NzMTFfYWRkX3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtjczExX3Vy aSAqLCBjaGFyICosIHN0cnVjdCBzc2hrZXkgKioqLCBjaGFyICoqKik7Ci0gaW50CXBrY3MxMV9k ZWxfcHJvdmlkZXIoY2hhciAqKTsKLStpbnQJcGtjczExX3VyaV93cml0ZShjb25zdCBzdHJ1Y3Qg c3Noa2V5ICosIEZJTEUgKik7Ci0gaW50CXBrY3MxMV9zaWduKHN0cnVjdCBzc2hrZXkgKiwgdV9j aGFyICoqLCBzaXplX3QgKiwKLSAJICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqLAotIAkgICAgY29uc3QgY2hhciAqLCB1X2ludCk7Ci1kaWZmIC0t Z2l0IGEvc3NoLmMgYi9zc2guYwotaW5kZXggNGExN2MwYTdkLi5iNDFhZTgyZDIgMTAwNjQ0Ci0t LS0gYS9zc2guYwotKysrIGIvc3NoLmMKLUBAIC04NjIsNiArODYyLDE0IEBAIG1haW4oaW50IGFj LCBjaGFyICoqYXYpCi0gCQkJb3B0aW9ucy5nc3NfZGVsZWdfY3JlZHMgPSAxOwotIAkJCWJyZWFr OwotIAkJY2FzZSAnaSc6Ci0rI2lmZGVmIEVOQUJMRV9QS0NTMTEKLSsJCQlpZiAoc3RybGVuKG9w dGFyZykgPj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgotKwkJCSAgICBzdHJuY21wKG9w dGFyZywgUEtDUzExX1VSSV9TQ0hFTUUsCi0rCQkJICAgIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVN RSkpID09IDApIHsKLSsJCQkJYWRkX2lkZW50aXR5X2ZpbGUoJm9wdGlvbnMsIE5VTEwsIG9wdGFy ZywgMSk7Ci0rCQkJCWJyZWFrOwotKwkJCX0KLSsjZW5kaWYKLSAJCQlwID0gdGlsZGVfZXhwYW5k X2ZpbGVuYW1lKG9wdGFyZywgZ2V0dWlkKCkpOwotIAkJCWlmIChzdGF0KHAsICZzdCkgPT0gLTEp Ci0gCQkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogSWRlbnRpdHkgZmlsZSAlcyAiCi1AQCAt MTgzOCw2ICsxODQ2LDcgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKLSAKLSAjaWZkZWYgRU5B QkxFX1BLQ1MxMQotIAkodm9pZClwa2NzMTFfZGVsX3Byb3ZpZGVyKG9wdGlvbnMucGtjczExX3By b3ZpZGVyKTsKLSsJcGtjczExX3Rlcm1pbmF0ZSgpOwotICNlbmRpZgotIAotICBza2lwX2Nvbm5l Y3Q6Ci1AQCAtMjM0OSw2ICsyMzU4LDQ1IEBAIHNzaF9zZXNzaW9uMihzdHJ1Y3Qgc3NoICpzc2gs IGNvbnN0IHN0cnVjdCBzc2hfY29ubl9pbmZvICpjaW5mbykKLSAJICAgIG9wdGlvbnMuZXNjYXBl X2NoYXIgOiBTU0hfRVNDQVBFQ0hBUl9OT05FLCBpZCk7Ci0gfQotIAotKyNpZmRlZiBFTkFCTEVf UEtDUzExCi0rc3RhdGljIHZvaWQKLStsb2FkX3BrY3MxMV9pZGVudGl0eShjaGFyICpwa2NzMTFf dXJpLCBjaGFyICppZGVudGl0eV9maWxlc1tdLAotKyAgICBzdHJ1Y3Qgc3Noa2V5ICppZGVudGl0 eV9rZXlzW10sIGludCAqbl9pZHMpCi0rewotKwlpbnQgbmtleXMsIGk7Ci0rCXN0cnVjdCBzc2hr ZXkgKiprZXlzOwotKwlzdHJ1Y3QgcGtjczExX3VyaSAqdXJpOwotKwotKwlkZWJ1ZygiaWRlbnRp dHkgZmlsZSAnJXMnIGZyb20gcGtjcyMxMSIsIHBrY3MxMV91cmkpOwotKwl1cmkgPSBwa2NzMTFf dXJpX2luaXQoKTsKLSsJaWYgKHVyaSA9PSBOVUxMKQotKwkJZmF0YWwoIkZhaWxlZCB0byBpbml0 IFBLQ1MjMTEgVVJJIik7Ci0rCi0rCWlmIChwa2NzMTFfdXJpX3BhcnNlKHBrY3MxMV91cmksIHVy aSkgIT0gMCkKLSsJZmF0YWwoIkZhaWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSAlcyIsIHBrY3Mx MV91cmkpOwotKwotKwkvKiB3ZSBuZWVkIHRvIG1lcmdlIFVSSSBhbmQgcHJvdmlkZXIgdG9nZXRo ZXIgKi8KLSsJaWYgKG9wdGlvbnMucGtjczExX3Byb3ZpZGVyICE9IE5VTEwgJiYgdXJpLT5tb2R1 bGVfcGF0aCA9PSBOVUxMKQotKwkJdXJpLT5tb2R1bGVfcGF0aCA9IHN0cmR1cChvcHRpb25zLnBr Y3MxMV9wcm92aWRlcik7Ci0rCi0rCWlmIChvcHRpb25zLm51bV9pZGVudGl0eV9maWxlcyA8IFNT SF9NQVhfSURFTlRJVFlfRklMRVMgJiYKLSsJICAgIChua2V5cyA9IHBrY3MxMV9hZGRfcHJvdmlk ZXJfYnlfdXJpKHVyaSwgTlVMTCwgJmtleXMsIE5VTEwpKSA+IDApIHsKLSsJCWZvciAoaSA9IDA7 IGkgPCBua2V5czsgaSsrKSB7Ci0rCQkJaWYgKCpuX2lkcyA+PSBTU0hfTUFYX0lERU5USVRZX0ZJ TEVTKSB7Ci0rCQkJCXNzaGtleV9mcmVlKGtleXNbaV0pOwotKwkJCQljb250aW51ZTsKLSsJCQl9 Ci0rCQkJaWRlbnRpdHlfa2V5c1sqbl9pZHNdID0ga2V5c1tpXTsKLSsJCQlpZGVudGl0eV9maWxl c1sqbl9pZHNdID0gcGtjczExX3VyaV9nZXQodXJpKTsKLSsJCQkoKm5faWRzKSsrOwotKwkJfQot KwkJZnJlZShrZXlzKTsKLSsJfQotKwotKwlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKLSt9Ci0r I2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEgKi8KLSsKLSAvKiBMb2FkcyBhbGwgSWRlbnRpdHlGaWxl IGFuZCBDZXJ0aWZpY2F0ZUZpbGUga2V5cyAqLwotIHN0YXRpYyB2b2lkCi0gbG9hZF9wdWJsaWNf aWRlbnRpdHlfZmlsZXMoY29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQotQEAgLTIz NjMsMTEgKzI0MTEsNiBAQCBsb2FkX3B1YmxpY19pZGVudGl0eV9maWxlcyhjb25zdCBzdHJ1Y3Qg c3NoX2Nvbm5faW5mbyAqY2luZm8pCi0gCWNoYXIgKmNlcnRpZmljYXRlX2ZpbGVzW1NTSF9NQVhf Q0VSVElGSUNBVEVfRklMRVNdOwotIAlzdHJ1Y3Qgc3Noa2V5ICpjZXJ0aWZpY2F0ZXNbU1NIX01B WF9DRVJUSUZJQ0FURV9GSUxFU107Ci0gCWludCBjZXJ0aWZpY2F0ZV9maWxlX3VzZXJwcm92aWRl ZFtTU0hfTUFYX0NFUlRJRklDQVRFX0ZJTEVTXTsKLS0jaWZkZWYgRU5BQkxFX1BLQ1MxMQotLQlz dHJ1Y3Qgc3Noa2V5ICoqa2V5cyA9IE5VTEw7Ci0tCWNoYXIgKipjb21tZW50cyA9IE5VTEw7Ci0t CWludCBua2V5czsKLS0jZW5kaWYgLyogUEtDUzExICovCi0gCi0gCW5faWRzID0gbl9jZXJ0cyA9 IDA7Ci0gCW1lbXNldChpZGVudGl0eV9maWxlcywgMCwgc2l6ZW9mKGlkZW50aXR5X2ZpbGVzKSk7 Ci1AQCAtMjM4MCwzMyArMjQyMyw0NiBAQCBsb2FkX3B1YmxpY19pZGVudGl0eV9maWxlcyhjb25z dCBzdHJ1Y3Qgc3NoX2Nvbm5faW5mbyAqY2luZm8pCi0gCSAgICBzaXplb2YoY2VydGlmaWNhdGVf ZmlsZV91c2VycHJvdmlkZWQpKTsKLSAKLSAjaWZkZWYgRU5BQkxFX1BLQ1MxMQotLQlpZiAob3B0 aW9ucy5wa2NzMTFfcHJvdmlkZXIgIT0gTlVMTCAmJgotLQkgICAgb3B0aW9ucy5udW1faWRlbnRp dHlfZmlsZXMgPCBTU0hfTUFYX0lERU5USVRZX0ZJTEVTICYmCi0tCSAgICAocGtjczExX2luaXQo IW9wdGlvbnMuYmF0Y2hfbW9kZSkgPT0gMCkgJiYKLS0JICAgIChua2V5cyA9IHBrY3MxMV9hZGRf cHJvdmlkZXIob3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIsIE5VTEwsCi0tCSAgICAma2V5cywgJmNv bW1lbnRzKSkgPiAwKSB7Ci0tCQlmb3IgKGkgPSAwOyBpIDwgbmtleXM7IGkrKykgewotLQkJCWlm IChuX2lkcyA+PSBTU0hfTUFYX0lERU5USVRZX0ZJTEVTKSB7Ci0tCQkJCXNzaGtleV9mcmVlKGtl eXNbaV0pOwotLQkJCQlmcmVlKGNvbW1lbnRzW2ldKTsKLS0JCQkJY29udGludWU7Ci0tCQkJfQot LQkJCWlkZW50aXR5X2tleXNbbl9pZHNdID0ga2V5c1tpXTsKLS0JCQlpZGVudGl0eV9maWxlc1tu X2lkc10gPSBjb21tZW50c1tpXTsgLyogdHJhbnNmZXJyZWQgKi8KLS0JCQluX2lkcysrOwotLQkJ fQotLQkJZnJlZShrZXlzKTsKLS0JCWZyZWUoY29tbWVudHMpOwotKwkvKiBoYW5kbGUgZmFsbGJh Y2sgZnJvbSBQS0NTMTFQcm92aWRlciBvcHRpb24gKi8KLSsJcGtjczExX2luaXQoIW9wdGlvbnMu YmF0Y2hfbW9kZSk7Ci0rCi0rCWlmIChvcHRpb25zLnBrY3MxMV9wcm92aWRlciAhPSBOVUxMKSB7 Ci0rCQlzdHJ1Y3QgcGtjczExX3VyaSAqdXJpOwotKwotKwkJdXJpID0gcGtjczExX3VyaV9pbml0 KCk7Ci0rCQlpZiAodXJpID09IE5VTEwpCi0rCQkJZmF0YWwoIkZhaWxlZCB0byBpbml0IFBLQ1Mj MTEgVVJJIik7Ci0rCi0rCQkvKiBDb25zdHJ1Y3Qgc2ltcGxlIFBLQ1MjMTEgVVJJIHRvIHNpbXBs aWZ5IGFjY2VzcyAqLwotKwkJdXJpLT5tb2R1bGVfcGF0aCA9IHN0cmR1cChvcHRpb25zLnBrY3Mx MV9wcm92aWRlcik7Ci0rCi0rCQkvKiBBZGQgaXQgYXMgYW55IG90aGVyIElkZW50aXR5RmlsZSAq LwotKwkJY3AgPSBwa2NzMTFfdXJpX2dldCh1cmkpOwotKwkJYWRkX2lkZW50aXR5X2ZpbGUoJm9w dGlvbnMsIE5VTEwsIGNwLCAxKTsKLSsJCWZyZWUoY3ApOwotKwotKwkJcGtjczExX3VyaV9jbGVh bnVwKHVyaSk7Ci0gCX0KLSAjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAqLwotIAlmb3IgKGkgPSAw OyBpIDwgb3B0aW9ucy5udW1faWRlbnRpdHlfZmlsZXM7IGkrKykgewotKwkJY2hhciAqbmFtZSA9 IG9wdGlvbnMuaWRlbnRpdHlfZmlsZXNbaV07Ci0gCQlpZiAobl9pZHMgPj0gU1NIX01BWF9JREVO VElUWV9GSUxFUyB8fAotLQkJICAgIHN0cmNhc2VjbXAob3B0aW9ucy5pZGVudGl0eV9maWxlc1tp XSwgIm5vbmUiKSA9PSAwKSB7Ci0rCQkgICAgc3RyY2FzZWNtcChuYW1lLCAibm9uZSIpID09IDAp IHsKLSAJCQlmcmVlKG9wdGlvbnMuaWRlbnRpdHlfZmlsZXNbaV0pOwotIAkJCW9wdGlvbnMuaWRl bnRpdHlfZmlsZXNbaV0gPSBOVUxMOwotIAkJCWNvbnRpbnVlOwotIAkJfQotLQkJY3AgPSB0aWxk ZV9leHBhbmRfZmlsZW5hbWUob3B0aW9ucy5pZGVudGl0eV9maWxlc1tpXSwgZ2V0dWlkKCkpOwot KyNpZmRlZiBFTkFCTEVfUEtDUzExCi0rCQlpZiAoc3RybGVuKG5hbWUpID49IHN0cmxlbihQS0NT MTFfVVJJX1NDSEVNRSkgJiYKLSsJCSAgICBzdHJuY21wKG5hbWUsIFBLQ1MxMV9VUklfU0NIRU1F LAotKwkJICAgIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsKLSsJCQlsb2FkX3Br Y3MxMV9pZGVudGl0eShuYW1lLCBpZGVudGl0eV9maWxlcywKLSsJCQkgICAgaWRlbnRpdHlfa2V5 cywgJm5faWRzKTsKLSsJCQlmcmVlKG9wdGlvbnMuaWRlbnRpdHlfZmlsZXNbaV0pOwotKwkJCWNv bnRpbnVlOwotKwkJfQotKyNlbmRpZiAvKiBFTkFCTEVfUEtDUzExICovCi0rCQljcCA9IHRpbGRl X2V4cGFuZF9maWxlbmFtZShuYW1lLCBnZXR1aWQoKSk7Ci0gCQlmaWxlbmFtZSA9IGRlZmF1bHRf Y2xpZW50X3BlcmNlbnRfZG9sbGFyX2V4cGFuZChjcCwgY2luZm8pOwotIAkJZnJlZShjcCk7Ci0g CQljaGVja19sb2FkKHNzaGtleV9sb2FkX3B1YmxpYyhmaWxlbmFtZSwgJnB1YmxpYywgTlVMTCks Ci1kaWZmIC0tZ2l0IGEvc3NoX2NvbmZpZy41IGIvc3NoX2NvbmZpZy41Ci1pbmRleCBhYjk4YzE3 MmYuLjY5OWIzZjY3ZCAxMDA2NDQKLS0tLSBhL3NzaF9jb25maWcuNQotKysrIGIvc3NoX2NvbmZp Zy41Ci1AQCAtMTI2Miw2ICsxMjYyLDIxIEBAIG1heSBhbHNvIGJlIHVzZWQgaW4gY29uanVuY3Rp b24gd2l0aAotIC5DbSBDZXJ0aWZpY2F0ZUZpbGUKLSBpbiBvcmRlciB0byBwcm92aWRlIGFueSBj ZXJ0aWZpY2F0ZSBhbHNvIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24gd2l0aAotIHRoZSBpZGVu dGl0eS4KLSsuUHAKLStUaGUgYXV0aGVudGljYXRpb24gaWRlbnRpdHkgY2FuIGJlIGFsc28gc3Bl Y2lmaWVkIGluIGEgZm9ybSBvZiBQS0NTIzExIFVSSQotK3N0YXJ0aW5nIHdpdGggYSBzdHJpbmcK LSsuQ20gcGtjczExOiAuCi0rVGhlcmUgaXMgc3VwcG9ydGVkIGEgc3Vic2V0IG9mIHRoZSBQS0NT IzExIFVSSSBhcyBkZWZpbmVkCi0raW4gUkZDIDc1MTIgKGltcGxlbWVudGVkIHBhdGggYXJndW1l bnRzCi0rLkNtIGlkICwKLSsuQ20gbWFudWZhY3R1cmVyICwKLSsuQ20gb2JqZWN0ICwKLSsuQ20g dG9rZW4KLSthbmQgcXVlcnkgYXJndW1lbnRzCi0rLkNtIG1vZHVsZS1wYXRoCi0rYW5kCi0rLkNt IHBpbi12YWx1ZQotKykuIFRoZSBVUkkgY2FuIG5vdCBiZSBpbiBxdW90ZXMuCi0gLkl0IENtIEln bm9yZVVua25vd24KLSBTcGVjaWZpZXMgYSBwYXR0ZXJuLWxpc3Qgb2YgdW5rbm93biBvcHRpb25z IHRvIGJlIGlnbm9yZWQgaWYgdGhleSBhcmUKLSBlbmNvdW50ZXJlZCBpbiBjb25maWd1cmF0aW9u IHBhcnNpbmcuCi1kaWZmIC0tZ2l0IGEvc3Noa2V5LmMgYi9zc2hrZXkuYwotaW5kZXggNTIyNWVh YmYyLi41ODNmNjQyMWQgMTAwNjQ0Ci0tLS0gYS9zc2hrZXkuYwotKysrIGIvc3Noa2V5LmMKLUBA IC04NTYsOCArODU2LDEwIEBAIHNzaGtleV9mcmVlX2NvbnRlbnRzKHN0cnVjdCBzc2hrZXkgKmsp Ci0gCi0gCWlmIChrID09IE5VTEwpCi0gCQlyZXR1cm47Ci0rI2lmZGVmIEVOQUJMRV9QS0NTMTEK LSAJaWYgKChrLT5mbGFncyAmIFNTSEtFWV9GTEFHX0VYVCkgIT0gMCkKLSAJCXBrY3MxMV9rZXlf ZnJlZShrKTsKLSsjZW5kaWYKLSAJaWYgKChpbXBsID0gc3Noa2V5X2ltcGxfZnJvbV90eXBlKGst PnR5cGUpKSAhPSBOVUxMICYmCi0gCSAgICBpbXBsLT5mdW5jcy0+Y2xlYW51cCAhPSBOVUxMKQot IAkJaW1wbC0+ZnVuY3MtPmNsZWFudXAoayk7Ci1AQCAtMjMwNCw5ICsyMzA2LDExIEBAIHNzaGtl eV9zaWduKHN0cnVjdCBzc2hrZXkgKmtleSwKLSAJaWYgKHNzaGtleV9pc19zayhrZXkpKSB7Ci0g CQlyID0gc3Noc2tfc2lnbihza19wcm92aWRlciwga2V5LCBzaWdwLCBsZW5wLCBkYXRhLAotIAkJ ICAgIGRhdGFsZW4sIGNvbXBhdCwgc2tfcGluKTsKLSsjaWZkZWYgRU5BQkxFX1BLQ1MxMQotIAl9 IGVsc2UgaWYgKChrZXktPmZsYWdzICYgU1NIS0VZX0ZMQUdfRVhUKSAhPSAwKSB7Ci0gCQlyID0g cGtjczExX3NpZ24oa2V5LCBzaWdwLCBsZW5wLCBkYXRhLCBkYXRhbGVuLAotIAkJICAgIGFsZywg c2tfcHJvdmlkZXIsIHNrX3BpbiwgY29tcGF0KTsKLSsjZW5kaWYKLSAJfSBlbHNlIHsKLSAJCWlm IChpbXBsLT5mdW5jcy0+c2lnbiA9PSBOVUxMKQotIAkJCXIgPSBTU0hfRVJSX1NJR05fQUxHX1VO U1VQUE9SVEVEOwotLS0gCi0yLjUzLjAKLQoKZGlmZiAtLWdpdCBhLzAwNTQtZ3NzYXBpLXRlc3Rz LnBhdGNoIGIvMDA1NC1nc3NhcGktdGVzdHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDBmMmI1NTQuLjAwMDAwMDAKLS0tIGEvMDA1NC1nc3NhcGktdGVzdHMucGF0Y2gKKysr IC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvTWFrZWZp bGUgYi9yZWdyZXNzL01ha2VmaWxlCi1pbmRleCBjYmU3YTk2MTAuLmViOWY3YWQwMCAxMDA2NDQK LS0tLSBhL3JlZ3Jlc3MvTWFrZWZpbGUKLSsrKyBiL3JlZ3Jlc3MvTWFrZWZpbGUKLUBAIC0xMjcs NiArMTI3LDcgQEAgSU5URVJPUF9URVNUUys9CWRyb3BiZWFyLWNpcGhlcnMgZHJvcGJlYXIta2V4 IGRyb3BiZWFyLXNlcnZlcgotICNJTlRFUk9QX1RFU1RTKz1zc2gtY29tIHNzaC1jb20tY2xpZW50 IHNzaC1jb20ta2V5Z2VuIHNzaC1jb20tc2Z0cAotIAotIEVYVFJBX1RFU1RTPQlhZ2VudC1wa2Nz MTEKLStFWFRSQV9URVNUUys9CWdzcy1hdXRoIGdzcy1rZXgKLSAjRVhUUkFfVEVTVFMrPSAJY2lw aGVyLXNwZWVkCi0gCi0gVVNFUk5BTUU9CQkke0xPR05BTUV9Ci1kaWZmIC0tZ2l0IGEvcmVncmVz cy9nc3Mta2V4LnNoIGIvcmVncmVzcy9nc3Mta2V4LnNoCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAot aW5kZXggMDAwMDAwMDAwLi4xN2EzYmY2ZjEKLS0tLSAvZGV2L251bGwKLSsrKyBiL3JlZ3Jlc3Mv Z3NzLWtleC5zaAotQEAgLTAsMCArMSwyMjIgQEAKLSt0aWQ9IkdTUy1BUEkgS2V5IEV4Y2hhbmdl IgotKwotKyMgU2tpcCB0aGUgdGVzdCBpZiBHU1NBUEkgc3VwcG9ydCBpcyBub3QgY29uZmlndXJl ZAotK2lmICEgZ3JlcCAtRSAnXiNkZWZpbmUgR1NTQVBJJyAiJEJVSUxERElSL2NvbmZpZy5oIiA+ L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgc2tpcCAiR1NTQVBJIG5vdCBlbmFibGVkIgotK2Zp Ci0rCi0rIyBXZSB0ZXN0IHdpdGggTUlUIEtlcmJlcm9zIEtEQywgc2tpcCBpZiBub3QgaW5zdGFs bGVkCi0raWYgISB3aGljaCBrcmI1a2RjID4vZGV2L251bGwgMj4mMTsgdGhlbgotKyAgICBza2lw ICJNSVQgS2VyYmVyb3MgS0RDIG5vdCBpbnN0YWxsZWQiCi0rZmkKLSsKLSsjIFRoZSB0ZXN0IG5l ZWRzIG5zc193cmFwcGVyIHRvIGVtdWxhdGUgZ2V0aG9zdG5hbWUoKSBhbmQgL2V0Yy9ob3N0cywK LSsjIHdlIHNraXAgaWYgdGhlIHNoYXJlZCBsaWJyYXJ5IGlzIG5vdCBpbnN0YWxsZWQKLStuc3Nf d3JhcHBlcj0ibGlibnNzX3dyYXBwZXIuc28iCi0raWYgISBsZGNvbmZpZyAtcCB8IGdyZXAgIiRu c3Nfd3JhcHBlciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0rICAgIHNraXAgIiRuc3Nfd3JhcHBl ciBub3QgaW5zdGFsbGVkIgotK2ZpCi0rCi0rIyBTZXQgdXAgdGhlIHVzZXJuYW1lIG9mIHRoZSBT U0ggY2xpZW50Ci0rY2xpZW50PSIkTE9HTkFNRSIKLStpZiBbICJ4JGNsaWVudCIgPSAieCIgXTsg dGhlbgotKwljbGllbnQ9IiQod2hvYW1pKSIKLStmaQotKwotKyMgU2V0IHVwIFNTSEQgYW5kIEtE QyBob3N0bmFtZXMgYW5kIHJlc29sdmUgYm90aCB0byBsb2NhbGhvc3QKLStzc2hkX2hvc3RuYW1l PSJzc2hkLmV4YW1wbGUub3JnIgotK2tkY19ob3N0bmFtZT0ia2RjLmV4YW1wbGUub3JnIgotK2tk Y19wb3J0PTIwODgKLStob3N0cz0iJE9CSi9ob3N0cyIKLStlY2hvICIxMjcuMC4wLjEgJHNzaGRf aG9zdG5hbWUgJGtkY19ob3N0bmFtZSIgPiAiJGhvc3RzIgotKwotKyMgU2V0IHVwIGEgZGlyZWN0 b3J5IHRvIHN0b3JlIEtlcmJlcm9zIGRhdGEKLStnc3NkaXI9IiRPQkovZ3NzIgotK21rZGlyIC1w ICIkZ3NzZGlyIgotK2V4cG9ydCBLUkI1Q0NOQU1FPSIkZ3NzZGlyL2NjIgotK2V4cG9ydCBLUkI1 X0NPTkZJRz0iJGdzc2Rpci9rcmI1LmNvbmYiCi0rZXhwb3J0IEtSQjVfS0RDX1BST0ZJTEU9IiRn c3NkaXIva2RjLmNvbmYiCi0rZXhwb3J0IEtSQjVfS1ROQU1FPSIkZ3NzZGlyL3NzaC5rZXl0YWIi Ci0rZXhwb3J0IEtSQjVSQ0FDSEVUWVBFPSJub25lIgotK2tkY19waWRmaWxlPSIkZ3NzZGlyL3Bp ZCIKLSsKLSsjIENvbmZpZ3VyZSBLZXJiZXJvcwotK2NhdDw8RU9GID4gIiRLUkI1X0tEQ19QUk9G SUxFIgotK1tyZWFsbXNdCi0rICAgIEVYQU1QTEUuT1JHID0gewotKyAgICAgICAgZGF0YWJhc2Vf bmFtZSA9ICRnc3NkaXIvcHJpbmNpcGFsCi0rICAgICAgICBrZXlfc3Rhc2hfZmlsZSA9ICRnc3Nk aXIvc3Rhc2gKLSsgICAgICAgIGtkY19saXN0ZW4gPSAka2RjX2hvc3RuYW1lOiRrZGNfcG9ydAot KyAgICAgICAga2RjX3RjcF9saXN0ZW4gPSAka2RjX2hvc3RuYW1lOiRrZGNfcG9ydAotKyAgICB9 Ci0rW2xvZ2dpbmddCi0rICAgIGtkYyA9IEZJTEU6JGdzc2Rpci9rZGMubG9nCi0rICAgIGRlYnVn ID0gdHJ1ZQotK0VPRgotKwotK2NhdDw8RU9GID4gIiRLUkI1X0NPTkZJRyIKLStbbGliZGVmYXVs dHNdCi0rICAgIGRlZmF1bHRfcmVhbG0gPSBFWEFNUExFLk9SRwotK1tyZWFsbXNdCi0rICAgIEVY QU1QTEUuT1JHID0gewotKyAgICAgICAga2RjID0gJGtkY19ob3N0bmFtZToka2RjX3BvcnQKLSsg ICAgfQotK0VPRgotKwotKyMgQmFjayB1cCB0aGUgZGVmYXVsdCBzc2hkX2NvbmZpZwotK2NwICIk T0JKL3NzaGRfY29uZmlnIiAiJE9CSi9zc2hkX2NvbmZpZy5vcmlnIgotKwotK3NldHVwX3NzaGQo KSB7Ci0rICAgIGtleF9hbGc9IiQxIgotKwotKyAgICBjcCAiJE9CSi9zc2hkX2NvbmZpZy5vcmln IiAiJE9CSi9zc2hkX2NvbmZpZyIKLSsKLSsgICAgY2F0PDxFT0YgPj4gIiRPQkovc3NoZF9jb25m aWciCi0rUHVia2V5QXV0aGVudGljYXRpb24gbm8KLStQYXNzd29yZEF1dGhlbnRpY2F0aW9uIG5v Ci0rR1NTQVBJQXV0aGVudGljYXRpb24geWVzCi0rR1NTQVBJS2V5RXhjaGFuZ2UgeWVzCi0rR1NT QVBJS2V4QWxnb3JpdGhtcyAka2V4X2FsZwotK0dTU0FQSVN0cmljdEFjY2VwdG9yQ2hlY2sgbm8K LStFT0YKLSsKLSsgICAgdGVzdF9zc2hfc3NoZF9lbnZfYmFja3VwPSIkVEVTVF9TU0hfU1NIRF9F TlYiCi0rICAgIFRFU1RfU1NIX1NTSERfRU5WPSIkVEVTVF9TU0hfU1NIRF9FTlYgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICBMRF9QUkVMT0FEPSRuc3Nfd3JhcHBl ciAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICBOU1NfV1JBUFBFUl9IT1NU Uz0kaG9zdHMgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICBOU1NfV1JBUFBF Ul9IT1NUTkFNRT0kc3NoZF9ob3N0bmFtZSBcCi0rICAgICAgICAgICAgICAgICAgICAgICBLUkI1 X0NPTkZJRz0kS1JCNV9DT05GSUcgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAg ICBLUkI1X0tEQ19QUk9GSUxFPSRLUkI1X0tEQ19QUk9GSUxFICBcCi0rICAgICAgICAgICAgICAg ICAgICAgICBLUkI1Q0NOQU1FPSRLUkI1Q0NOQU1FICAgICAgICAgICAgICBcCi0rICAgICAgICAg ICAgICAgICAgICAgICBLUkI1X0tUTkFNRT0kS1JCNV9LVE5BTUUgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgICAgICAgICAgICBLUkI1UkNBQ0hFVFlQRT0kS1JCNVJDQUNIRVRZUEUiCi0rICAg IHN0YXJ0X3NzaGQKLSt9Ci0rCi0rdGVhcmRvd25fc3NoZCgpIHsKLSsgICAgVEVTVF9TU0hfU1NI RF9FTlY9IiR0ZXN0X3NzaF9zc2hkX2Vudl9iYWNrdXAiCi0rICAgIHN0b3Bfc3NoZAotK30KLSsK LStzZXR1cF9rZGMoKSB7Ci0rICAgIGtkYjVfdXRpbCBjcmVhdGUgLVAgImZvbyIgLXMKLSsgICAg a3JiNWtkYyAtdyAxIC1QICIka2RjX3BpZGZpbGUiCi0rICAgIGk9MDsKLSsgICAgd2hpbGUgWyAh IC1mICIka2RjX3BpZGZpbGUiIC1hICRpIC1sdCAxMCBdOyBkbwotKyAgICAgICAgaT0kKChpICsg MSkpCi0rICAgICAgICBzbGVlcCAxCi0rICAgIGRvbmUKLSsgICAgdGVzdCAtZiAiJGtkY19waWRm aWxlIiB8fCBmYXRhbCAiS0RDIGZhaWxlZCB0byBzdGFydCIKLSt9Ci0rCi0rdGVhcmRvd25fa2Rj KCkgewotKyAgICBraWxsICIkKGNhdCAiJGtkY19waWRmaWxlIikiCi0rICAgIGtkZXN0cm95Ci0r ICAgIHJtIC1mICIkS1JCNV9LVE5BTUUiICIka2RjX3BpZGZpbGUiCi0rICAgIGtkYjVfdXRpbCBk ZXN0cm95IC1mCi0rfQotKwotK3NldHVwX25zc19lbXVsYXRpb24oKSB7Ci0rICAgIGV4cG9ydCBM RF9QUkVMT0FEPSIkbnNzX3dyYXBwZXIiCi0rICAgIGV4cG9ydCBOU1NfV1JBUFBFUl9IT1NUUz0i JGhvc3RzIgotK30KLSsKLSt0ZWFyZG93bl9uc3NfZW11bGF0aW9uKCkgewotKyAgICB1bnNldCBM RF9QUkVMT0FECi0rICAgIHVuc2V0IE5TU19XUkFQUEVSX0hPU1RTCi0rfQotKwotKyMgR1NTIGtl eCBmYW1pbHkgcHJlZml4ZXMgdG8gdGVzdC4KLSsjIEdTU0FQSUtleEFsZ29yaXRobXMgYWNjZXB0 cyB0aGVzZSBwcmVmaXhlczsgdGhlIGZ1bGwgYWxnb3JpdGhtIG5hbWVzCi0rIyAocHJlZml4ICsg QmFzZTY0KE1ENShPSUQpKSkgYXJlIGNvbnN0cnVjdGVkIGR1cmluZyBuZWdvdGlhdGlvbi4KLStn c3Nfa2V4X2ZhbWlsaWVzPSIKLSsgICAgZ3NzLWdyb3VwMTQtc2hhMjU2LQotKyAgICBnc3MtZ3Jv dXAxNi1zaGE1MTItCi0rICAgIGdzcy1uaXN0cDI1Ni1zaGEyNTYtCi0rICAgIGdzcy1jdXJ2ZTI1 NTE5LXNoYTI1Ni0KLSsgICAgZ3NzLWdyb3VwMTQtc2hhMS0KLSsgICAgZ3NzLWdleC1zaGExLQot KyIKLSsKLSsjIFBvc2l0aXZlIHRlc3RzOiBlYWNoIEdTUyBrZXggYWxnb3JpdGhtIGNvbm5lY3Rz IHN1Y2Nlc3NmdWxseQotK2ZvciBrZXhfZmFtaWx5IGluICRnc3Nfa2V4X2ZhbWlsaWVzOyBkbwot KyAgICAjIENoZWNrIGlmIHRoZSBhbGdvcml0aG0gZmFtaWx5IGlzIHJlY29nbml6ZWQgYnkgc3No Ci0rICAgIGlmICEgJHtTU0h9IC1HIC1GICIkT0JKL3NzaF9jb25maWciIFwKLSsgICAgICAgIC1v ICJHU1NBUElLZXlFeGNoYW5nZSB5ZXMiIFwKLSsgICAgICAgIC1vICJHU1NBUElLZXhBbGdvcml0 aG1zICRrZXhfZmFtaWx5IiBcCi0rICAgICAgICAiJGNsaWVudEAkc3NoZF9ob3N0bmFtZSIgPi9k ZXYvbnVsbCAyPiYxOyB0aGVuCi0rICAgICAgICB2ZXJib3NlICJnc3Mga2V4ICRrZXhfZmFtaWx5 IG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIgotKyAgICAgICAgY29udGludWUKLSsgICAgZmkKLSsK LSsgICAgdmVyYm9zZSAiZ3NzIGtleCAka2V4X2ZhbWlseSIKLSsKLSsgICAgc2V0dXBfbnNzX2Vt dWxhdGlvbgotKyAgICBzZXR1cF9rZGMKLSsKLSsgICAga2FkbWluLmxvY2FsIGFkZF9wcmluY2lw YWwgLXJhbmRrZXkgImhvc3QvJHNzaGRfaG9zdG5hbWUiCi0rICAgIGthZG1pbi5sb2NhbCBrdGFk ZCAiaG9zdC8kc3NoZF9ob3N0bmFtZSIKLSsgICAga2FkbWluLmxvY2FsIGFkZF9wcmluY2lwYWwg LXB3ICJmb28iICIkY2xpZW50IgotKyAgICBlY2hvICJmb28iIHwga2luaXQgIiRjbGllbnQiCi0r Ci0rICAgIHNldHVwX3NzaGQgIiRrZXhfZmFtaWx5IgotKwotKyAgICAke1NTSH0gLUYgIiRPQkov c3NoX2NvbmZpZyIgXAotKyAgICAgICAgLW8gIkdTU0FQSUF1dGhlbnRpY2F0aW9uIHllcyIgXAot KyAgICAgICAgLW8gIkdTU0FQSUtleUV4Y2hhbmdlIHllcyIgXAotKyAgICAgICAgLW8gIkdTU0FQ SUtleEFsZ29yaXRobXMgJGtleF9mYW1pbHkiIFwKLSsgICAgICAgIC1vICJHU1NBUElEZWxlZ2F0 ZUNyZWRlbnRpYWxzIG5vIiBcCi0rICAgICAgICAiJGNsaWVudEAkc3NoZF9ob3N0bmFtZSIgdHJ1 ZQotKyAgICBzdGF0dXM9JD8KLSsKLSsgICAgdGVhcmRvd25fc3NoZAotKyAgICB0ZWFyZG93bl9r ZGMKLSsgICAgdGVhcmRvd25fbnNzX2VtdWxhdGlvbgotKwotKyAgICBpZiBbICRzdGF0dXMgLW5l IDAgXTsgdGhlbgotKyAgICAgICAgZmFpbCAiZ3NzIGtleCAka2V4X2ZhbWlseSBmYWlsZWQiCi0r ICAgIGZpCi0rZG9uZQotKwotKyMgTmVnYXRpdmUgdGVzdDogY29ubmVjdGlvbiBtdXN0IGZhaWwg d2hlbiBrZXl0YWIgaXMgbWlzc2luZwotK3ZlcmJvc2UgImdzcyBrZXggbmVnYXRpdmUgdGVzdDog bm8ga2V5dGFiIgotK2tleF9uZWc9Imdzcy1ncm91cDE0LXNoYTI1Ni0iCi0rCi0raWYgJHtTU0h9 IC1HIC1GICIkT0JKL3NzaF9jb25maWciIFwKLSsgICAgLW8gIkdTU0FQSUtleUV4Y2hhbmdlIHll cyIgXAotKyAgICAtbyAiR1NTQVBJS2V4QWxnb3JpdGhtcyAka2V4X25lZyIgXAotKyAgICAiJGNs aWVudEAkc3NoZF9ob3N0bmFtZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0rCi0rICAgIHNldHVw X25zc19lbXVsYXRpb24KLSsgICAgc2V0dXBfa2RjCi0rCi0rICAgICMgQ3JlYXRlIGhvc3QgcHJp bmNpcGFsIGJ1dCBkbyBOT1QgZXhwb3J0IHRvIGtleXRhYgotKyAgICBrYWRtaW4ubG9jYWwgYWRk X3ByaW5jaXBhbCAtcmFuZGtleSAiaG9zdC8kc3NoZF9ob3N0bmFtZSIKLSsgICAga2FkbWluLmxv Y2FsIGFkZF9wcmluY2lwYWwgLXB3ICJmb28iICIkY2xpZW50IgotKyAgICBlY2hvICJmb28iIHwg a2luaXQgIiRjbGllbnQiCi0rCi0rICAgIHNldHVwX3NzaGQgIiRrZXhfbmVnIgotKwotKyAgICAk e1NTSH0gLUYgIiRPQkovc3NoX2NvbmZpZyIgXAotKyAgICAgICAgLW8gIkdTU0FQSUF1dGhlbnRp Y2F0aW9uIHllcyIgXAotKyAgICAgICAgLW8gIkdTU0FQSUtleUV4Y2hhbmdlIHllcyIgXAotKyAg ICAgICAgLW8gIkdTU0FQSUtleEFsZ29yaXRobXMgJGtleF9uZWciIFwKLSsgICAgICAgIC1vICJH U1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIG5vIiBcCi0rICAgICAgICAiJGNsaWVudEAkc3NoZF9o b3N0bmFtZSIgdHJ1ZQotKyAgICBzdGF0dXM9JD8KLSsKLSsgICAgdGVhcmRvd25fc3NoZAotKyAg ICB0ZWFyZG93bl9rZGMKLSsgICAgdGVhcmRvd25fbnNzX2VtdWxhdGlvbgotKwotKyAgICBpZiBb ICRzdGF0dXMgLWVxIDAgXTsgdGhlbgotKyAgICAgICAgZmFpbCAiZ3NzIGtleCBzdWNjZWVkZWQg d2l0aG91dCBrZXl0YWIiCi0rICAgIGZpCi0rZmkKLSsKLSt1bnNldCBLUkI1Q0NOQU1FCi0rdW5z ZXQgS1JCNV9DT05GSUcKLSt1bnNldCBLUkI1X0tEQ19QUk9GSUxFCi0rdW5zZXQgS1JCNV9LVE5B TUUKLSt1bnNldCBLUkI1UkNBQ0hFVFlQRQotK3JtIC1yZiAiJGdzc2RpciIKCmRpZmYgLS1naXQg YS8xMDAwLW9wZW5zc2gtNi43cDEtY292ZXJpdHkucGF0Y2ggYi8xMDAwLW9wZW5zc2gtNi43cDEt Y292ZXJpdHkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NTU1NzEuLjAw MDAwMDAKLS0tIGEvMTAwMC1vcGVuc3NoLTYuN3AxLWNvdmVyaXR5LnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMjMwICswLDAgQEAKLUZyb20gZDAyMjViY2RiYzBkNzgzZGY4NzhjY2ZiNTEyOGJk Y2I3ODdkODJlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZz a2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMTIgRGVjIDIwMjUgMTQ6MjU6NDEg KzAxMDAKLVN1YmplY3Q6IFtQQVRDSCA1NC81NF0gb3BlbnNzaC02LjdwMS1jb3Zlcml0eQotCi1o dHRwczovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgxCi0tLS0KLSBh dXRoLWtyYjUuYyAgICAgICAgICAgICAgICAgICB8IDIgKysKLSBnc3MtZ2Vuci5jICAgICAgICAg ICAgICAgICAgICB8IDMgKystCi0ga3JsLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICsr KwotIGxvZ2lucmVjLmMgICAgICAgICAgICAgICAgICAgIHwgMiArKwotIG1pc2MuYyAgICAgICAg ICAgICAgICAgICAgICAgIHwgMyArKysKLSBtb25pdG9yLmMgICAgICAgICAgICAgICAgICAgICB8 IDQgKystLQotIG9wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jIHwgMiArLQotIG9wZW5ic2Qt Y29tcGF0L2JzZC1wc2VsZWN0LmMgIHwgOCArKysrLS0tLQotIHJlYWRjb25mLmMgICAgICAgICAg ICAgICAgICAgIHwgMSArCi0gc2VydmNvbmYuYyAgICAgICAgICAgICAgICAgICAgfCA1ICsrKy0t Ci0gc2VydmVybG9vcC5jICAgICAgICAgICAgICAgICAgfCAyICstCi0gMTEgZmlsZXMgY2hhbmdl ZCwgMjQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9hdXRo LWtyYjUuYyBiL2F1dGgta3JiNS5jCi1pbmRleCA3ZDRmYmNjM2QuLjljZDM2MThiMiAxMDA2NDQK LS0tLSBhL2F1dGgta3JiNS5jCi0rKysgYi9hdXRoLWtyYjUuYwotQEAgLTQyNyw2ICs0MjcsNyBA QCBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGtyYjVfY29udGV4dCBjdHgsIGtyYjVfY2NhY2hlICpj Y2FjaGUsIGludCAqbmVlZF9lbnZpcm9ubQotIAkJdW1hc2sob2xkX3VtYXNrKTsKLSAJCWlmICh0 bXBmZCA9PSAtMSkgewotIAkJCWxvZ2l0KCJta3N0ZW1wKCk6ICUuMTAwcyIsIHN0cmVycm9yKG9l cnJubykpOwotKwkJCWZyZWUoY2NuYW1lKTsKLSAJCQlyZXR1cm4gb2Vycm5vOwotIAkJfQotIAot QEAgLTQzNCw2ICs0MzUsNyBAQCBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGtyYjVfY29udGV4dCBj dHgsIGtyYjVfY2NhY2hlICpjY2FjaGUsIGludCAqbmVlZF9lbnZpcm9ubQotIAkJCW9lcnJubyA9 IGVycm5vOwotIAkJCWxvZ2l0KCJmY2htb2QoKTogJS4xMDBzIiwgc3RyZXJyb3Iob2Vycm5vKSk7 Ci0gCQkJY2xvc2UodG1wZmQpOwotKwkJCWZyZWUoY2NuYW1lKTsKLSAJCQlyZXR1cm4gb2Vycm5v OwotIAkJfQotIAkJLyogbWFrZSBzdXJlIHRoZSBLUkI1Q0NOQU1FIGlzIHNldCBmb3Igbm9uLXN0 YW5kYXJkIGxvY2F0aW9uICovCi1kaWZmIC0tZ2l0IGEvZ3NzLWdlbnIuYyBiL2dzcy1nZW5yLmMK LWluZGV4IGEwN2RiZjUxMi4uZWMyYzljNmRkIDEwMDY0NAotLS0tIGEvZ3NzLWdlbnIuYwotKysr IGIvZ3NzLWdlbnIuYwotQEAgLTE3OCw4ICsxNzgsOSBAQCBzc2hfZ3NzYXBpX2tleF9tZWNocyhn c3NfT0lEX3NldCBnc3Nfc3VwcG9ydGVkLCBzc2hfZ3NzYXBpX2NoZWNrX2ZuICpjaGVjaywKLSAJ CQllbmNsZW4gPSBfX2I2NF9udG9wKGRpZ2VzdCwKLSAJCQkgICAgc3NoX2RpZ2VzdF9ieXRlcyhT U0hfRElHRVNUX01ENSksIGVuY29kZWQsCi0gCQkJICAgIHNzaF9kaWdlc3RfYnl0ZXMoU1NIX0RJ R0VTVF9NRDUpICogMik7Ci0tCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N0 cmluZ29wLW92ZXJmbG93IgotIAkJCWNwID0gc3RybmNweShzLCBrZXgsIHN0cmxlbihrZXgpKTsK LSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotIAkJCWZvciAoKHAgPSBzdHJzZXAoJmNwLCAi LCIpKTsgcCAmJiAqcCAhPSAnXDAnOwotIAkJCQkocCA9IHN0cnNlcCgmY3AsICIsIikpKSB7Ci0g CQkJCWlmIChzc2hidWZfbGVuKGJ1ZikgIT0gMCAmJgotZGlmZiAtLWdpdCBhL2tybC5jIGIva3Js LmMKLWluZGV4IDBlMmI1ZjE1NS4uZjJkMTA1ZjIzIDEwMDY0NAotLS0tIGEva3JsLmMKLSsrKyBi L2tybC5jCi1AQCAtMTIwMiw2ICsxMjAyLDcgQEAgaXNfa2V5X3Jldm9rZWQoc3RydWN0IHNzaF9r cmwgKmtybCwgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5KQotIAkJcmV0dXJuIHI7Ci0gCWVyYiA9 IFJCX0ZJTkQocmV2b2tlZF9ibG9iX3RyZWUsICZrcmwtPnJldm9rZWRfc2hhMXMsICZyYik7Ci0g CWZyZWUocmIuYmxvYik7Ci0rCXJiLmJsb2IgPSBOVUxMOyAvKiBtYWtlIGNvdmVyaXR5IGhhcHB5 ICovCi0gCWlmIChlcmIgIT0gTlVMTCkgewotIAkJS1JMX0RCRygoInJldm9rZWQgYnkga2V5IFNI QTEiKSk7Ci0gCQlyZXR1cm4gU1NIX0VSUl9LRVlfUkVWT0tFRDsKLUBAIC0xMjEyLDYgKzEyMTMs NyBAQCBpc19rZXlfcmV2b2tlZChzdHJ1Y3Qgc3NoX2tybCAqa3JsLCBjb25zdCBzdHJ1Y3Qgc3No a2V5ICprZXkpCi0gCQlyZXR1cm4gcjsKLSAJZXJiID0gUkJfRklORChyZXZva2VkX2Jsb2JfdHJl ZSwgJmtybC0+cmV2b2tlZF9zaGEyNTZzLCAmcmIpOwotIAlmcmVlKHJiLmJsb2IpOwotKwlyYi5i bG9iID0gTlVMTDsgLyogbWFrZSBjb3Zlcml0eSBoYXBweSAqLwotIAlpZiAoZXJiICE9IE5VTEwp IHsKLSAJCUtSTF9EQkcoKCJyZXZva2VkIGJ5IGtleSBTSEEyNTYiKSk7Ci0gCQlyZXR1cm4gU1NI X0VSUl9LRVlfUkVWT0tFRDsKLUBAIC0xMjIzLDYgKzEyMjUsNyBAQCBpc19rZXlfcmV2b2tlZChz dHJ1Y3Qgc3NoX2tybCAqa3JsLCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXkpCi0gCQlyZXR1cm4g cjsKLSAJZXJiID0gUkJfRklORChyZXZva2VkX2Jsb2JfdHJlZSwgJmtybC0+cmV2b2tlZF9rZXlz LCAmcmIpOwotIAlmcmVlKHJiLmJsb2IpOwotKwlyYi5ibG9iID0gTlVMTDsgLyogbWFrZSBjb3Zl cml0eSBoYXBweSAqLwotIAlpZiAoZXJiICE9IE5VTEwpIHsKLSAJCUtSTF9EQkcoKCJyZXZva2Vk IGJ5IGV4cGxpY2l0IGtleSIpKTsKLSAJCXJldHVybiBTU0hfRVJSX0tFWV9SRVZPS0VEOwotZGlm ZiAtLWdpdCBhL2xvZ2lucmVjLmMgYi9sb2dpbnJlYy5jCi1pbmRleCA3NDk5YWE5NzUuLjI4MDdj YWQ0YSAxMDA2NDQKLS0tLSBhL2xvZ2lucmVjLmMKLSsrKyBiL2xvZ2lucmVjLmMKLUBAIC02ODAs OSArNjgwLDExIEBAIGNvbnN0cnVjdF91dG1wKHN0cnVjdCBsb2dpbmluZm8gKmxpLAotIAkgKi8K LSAKLSAJLyogVXNlIHN0cm5jcHkgYmVjYXVzZSB3ZSBkb24ndCBuZWNlc3NhcmlseSB3YW50IG51 bGwgdGVybWluYXRpb24gKi8KLSsJLyogY292ZXJpdHlbYnVmZmVyX3NpemVfd2FybmluZyA6IEZB TFNFXSAqLwotIAlzdHJuY3B5KHV0LT51dF9uYW1lLCBsaS0+dXNlcm5hbWUsCi0gCSAgICBNSU5f U0laRU9GKHV0LT51dF9uYW1lLCBsaS0+dXNlcm5hbWUpKTsKLSAjIGlmZGVmIEhBVkVfSE9TVF9J Tl9VVE1QCi0rCS8qIGNvdmVyaXR5W2J1ZmZlcl9zaXplX3dhcm5pbmcgOiBGQUxTRV0gKi8KLSAJ c3RybmNweSh1dC0+dXRfaG9zdCwgbGktPmhvc3RuYW1lLAotIAkgICAgTUlOX1NJWkVPRih1dC0+ dXRfaG9zdCwgbGktPmhvc3RuYW1lKSk7Ci0gIyBlbmRpZgotZGlmZiAtLWdpdCBhL21pc2MuYyBi L21pc2MuYwotaW5kZXggZTk2ZmE4ZDYxLi41NTZjMTEyYzMgMTAwNjQ0Ci0tLS0gYS9taXNjLmMK LSsrKyBiL21pc2MuYwotQEAgLTE2MjAsNiArMTYyMCw4IEBAIHNhbml0aXNlX3N0ZGZkKHZvaWQp Ci0gCX0KLSAJaWYgKG51bGxmZCA+IFNUREVSUl9GSUxFTk8pCi0gCQljbG9zZShudWxsZmQpOwot KwkvKiBjb3Zlcml0eVtsZWFrZWRfaGFuZGxlIDogRkFMU0VdKi8KLSsJLyogY292ZXJpdHlbbGVh a2VkX2hhbmRsZSA6IEZBTFNFXSovCi0gfQotIAotIGNoYXIgKgotQEAgLTI4MjEsNiArMjgyMyw3 IEBAIHN0ZGZkX2Rldm51bGwoaW50IGRvX3N0ZGluLCBpbnQgZG9fc3Rkb3V0LCBpbnQgZG9fc3Rk ZXJyKQotIAl9Ci0gCWlmIChkZXZudWxsID4gU1RERVJSX0ZJTEVOTykKLSAJCWNsb3NlKGRldm51 bGwpOwotKwkvKiBjb3Zlcml0eVtsZWFrZWRfaGFuZGxlIDogRkFMU0VdKi8KLSAJcmV0dXJuIHJl dDsKLSB9Ci0gCi1kaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCi1pbmRleCAzNmRi MWFmZWUuLjNiNjAwNTlhOSAxMDA2NDQKLS0tLSBhL21vbml0b3IuYwotKysrIGIvbW9uaXRvci5j Ci1AQCAtNDEwLDcgKzQxMCw3IEBAIG1vbml0b3JfY2hpbGRfcHJlYXV0aChzdHJ1Y3Qgc3NoICpz c2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRvcikKLSAJbW1fZ2V0X2tleXN0YXRlKHNzaCwgcG1v bml0b3IpOwotIAotIAkvKiBEcmFpbiBhbnkgYnVmZmVyZWQgbWVzc2FnZXMgZnJvbSB0aGUgY2hp bGQgKi8KLS0Jd2hpbGUgKHBtb25pdG9yLT5tX2xvZ19yZWN2ZmQgIT0gLTEgJiYgbW9uaXRvcl9y ZWFkX2xvZyhwbW9uaXRvcikgPT0gMCkKLSsJd2hpbGUgKHBtb25pdG9yLT5tX2xvZ19yZWN2ZmQg Pj0gMCAmJiBtb25pdG9yX3JlYWRfbG9nKHBtb25pdG9yKSA9PSAwKQotIAkJOwotIAotIAkvKiBX YWl0IGZvciB0aGUgY2hpbGQncyBleGl0IHN0YXR1cyAqLwotQEAgLTE4NTUsNyArMTg1NSw3IEBA IG1tX2Fuc3dlcl9wdHkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAq bSkKLSAJcy0+cHR5bWFzdGVyID0gcy0+cHR5ZmQ7Ci0gCi0gCWRlYnVnM19mKCJ0dHkgJXMgcHR5 ZmQgJWQiLCBzLT50dHksIHMtPnR0eWZkKTsKLS0KLSsJLyogY292ZXJpdHlbbGVha2VkX2hhbmRs ZSA6IEZBTFNFXSAqLwotIAlyZXR1cm4gKDApOwotIAotICBlcnJvcjoKLWRpZmYgLS1naXQgYS9v cGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYyBiL29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9y dC5jCi1pbmRleCAzNDZjN2ZlNTYuLmY0Mjc5MmZkZSAxMDA2NDQKLS0tLSBhL29wZW5ic2QtY29t cGF0L2JpbmRyZXN2cG9ydC5jCi0rKysgYi9vcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYwot QEAgLTU5LDcgKzU5LDcgQEAgYmluZHJlc3Zwb3J0X3NhKGludCBzZCwgc3RydWN0IHNvY2thZGRy ICpzYSkKLSAJc3RydWN0IHNvY2thZGRyX2luNiAqaW42OwotIAl1X2ludDE2X3QgKnBvcnRwOwot IAl1X2ludDE2X3QgcG9ydDsKLS0Jc29ja2xlbl90IHNhbGVuOwotKwlzb2NrbGVuX3Qgc2FsZW4g PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpOwotIAlpbnQgaTsKLSAKLSAJaWYgKHNh ID09IE5VTEwpIHsKLWRpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBhdC9ic2QtcHNlbGVjdC5jIGIv b3BlbmJzZC1jb21wYXQvYnNkLXBzZWxlY3QuYwotaW5kZXggMjZiZGMzZTA4Li44ZTI5MzliOTUg MTAwNjQ0Ci0tLS0gYS9vcGVuYnNkLWNvbXBhdC9ic2QtcHNlbGVjdC5jCi0rKysgYi9vcGVuYnNk LWNvbXBhdC9ic2QtcHNlbGVjdC5jCi1AQCAtODUsMTMgKzg1LDEzIEBAIHBzZWxlY3Rfbm90aWZ5 X3NldHVwKHZvaWQpCi0gc3RhdGljIHZvaWQKLSBwc2VsZWN0X25vdGlmeV9wYXJlbnQodm9pZCkK LSB7Ci0tCWlmIChub3RpZnlfcGlwZVsxXSAhPSAtMSkKLSsJaWYgKG5vdGlmeV9waXBlWzFdID49 IDApCi0gCQkodm9pZCl3cml0ZShub3RpZnlfcGlwZVsxXSwgIiIsIDEpOwotIH0KLSBzdGF0aWMg dm9pZAotIHBzZWxlY3Rfbm90aWZ5X3ByZXBhcmUoZmRfc2V0ICpyZWFkc2V0KQotIHsKLS0JaWYg KG5vdGlmeV9waXBlWzBdICE9IC0xKQotKwlpZiAobm90aWZ5X3BpcGVbMF0gPj0gMCkKLSAJCUZE X1NFVChub3RpZnlfcGlwZVswXSwgcmVhZHNldCk7Ci0gfQotIHN0YXRpYyB2b2lkCi1AQCAtOTks OCArOTksOCBAQCBwc2VsZWN0X25vdGlmeV9kb25lKGZkX3NldCAqcmVhZHNldCkKLSB7Ci0gCWNo YXIgYzsKLSAKLS0JaWYgKG5vdGlmeV9waXBlWzBdICE9IC0xICYmIEZEX0lTU0VUKG5vdGlmeV9w aXBlWzBdLCByZWFkc2V0KSkgewotLQkJd2hpbGUgKHJlYWQobm90aWZ5X3BpcGVbMF0sICZjLCAx KSAhPSAtMSkKLSsJaWYgKG5vdGlmeV9waXBlWzBdID49IDAgJiYgRkRfSVNTRVQobm90aWZ5X3Bp cGVbMF0sIHJlYWRzZXQpKSB7Ci0rCQl3aGlsZSAocmVhZChub3RpZnlfcGlwZVswXSwgJmMsIDEp ID49IDApCi0gCQkJZGVidWcyX2YoInJlYWRpbmciKTsKLSAJCUZEX0NMUihub3RpZnlfcGlwZVsw XSwgcmVhZHNldCk7Ci0gCX0KLWRpZmYgLS1naXQgYS9yZWFkY29uZi5jIGIvcmVhZGNvbmYuYwot aW5kZXggMDU4ZTUzY2YxLi4xNGYxNDljYzEgMTAwNjQ0Ci0tLS0gYS9yZWFkY29uZi5jCi0rKysg Yi9yZWFkY29uZi5jCi1AQCAtMjE2NCw2ICsyMTY0LDcgQEAgcGFyc2VfcHVia2V5X2FsZ29zOgot IAkJCX0gZWxzZSBpZiAociAhPSAwKSB7Ci0gCQkJCWVycm9yKCIlLjIwMHMgbGluZSAlZDogZ2xv YiBmYWlsZWQgZm9yICVzLiIsCi0gCQkJCSAgICBmaWxlbmFtZSwgbGluZW51bSwgYXJnMik7Ci0r CQkJCWZyZWUoYXJnMik7Ci0gCQkJCWdvdG8gb3V0OwotIAkJCX0KLSAJCQlmcmVlKGFyZzIpOwot ZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCBlMDVhMzE1ODQuLjNm ZmE0OWMzYSAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmMKLSsrKyBiL3NlcnZjb25mLmMKLUBAIC0y MzgyLDggKzIzODIsOSBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJP cHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAotIAkJaWYgKCphY3RpdmVwICYmICpjaGFycHRy ID09IE5VTEwpIHsKLSAJCQkqY2hhcnB0ciA9IHRpbGRlX2V4cGFuZF9maWxlbmFtZShhcmcsIGdl dHVpZCgpKTsKLSAJCQkvKiBpbmNyZWFzZSBvcHRpb25hbCBjb3VudGVyICovCi0tCQkJaWYgKGlu dHB0ciAhPSBOVUxMKQotLQkJCQkqaW50cHRyID0gKmludHB0ciArIDE7Ci0rCQkJLyogREVBRCBD T0RFIGludHB0ciBpcyBzdGlsbCBOVUxMIDspCi0rICAJCQkgaWYgKGludHB0ciAhPSBOVUxMKQot KwkJCQkqaW50cHRyID0gKmludHB0ciArIDE7ICovCi0gCQl9Ci0gCQlicmVhazsKLSAKLWRpZmYg LS1naXQgYS9zZXJ2ZXJsb29wLmMgYi9zZXJ2ZXJsb29wLmMKLWluZGV4IDEwODdhNmM3ZC4uYjY1 YzlkZDY2IDEwMDY0NAotLS0tIGEvc2VydmVybG9vcC5jCi0rKysgYi9zZXJ2ZXJsb29wLmMKLUBA IC01MzYsNyArNTM2LDcgQEAgc2VydmVyX3JlcXVlc3RfdHVuKHN0cnVjdCBzc2ggKnNzaCkKLSAJ CWRlYnVnX2YoImludmFsaWQgdHVuIik7Ci0gCQlnb3RvIGRvbmU7Ci0gCX0KLS0JaWYgKGF1dGhf b3B0cy0+Zm9yY2VfdHVuX2RldmljZSAhPSAtMSkgewotKwlpZiAoYXV0aF9vcHRzLT5mb3JjZV90 dW5fZGV2aWNlID49IDApIHsKLSAJCWlmICh0dW4gIT0gU1NIX1RVTklEX0FOWSAmJgotIAkJICAg IGF1dGhfb3B0cy0+Zm9yY2VfdHVuX2RldmljZSAhPSAoaW50KXR1bikKLSAJCQlnb3RvIGRvbmU7 Ci0tLSAKLTIuNTMuMAotCgpkaWZmIC0tZ2l0IGEvMjAwMC1vcGVuc3NoLTEwLjNwMS1nc2lzc2gu cGF0Y2ggYi8yMDAwLW9wZW5zc2gtMTAuM3AxLWdzaXNzaC5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggYzUwMDA4OS4uMDAwMDAwMAotLS0gYS8yMDAwLW9wZW5zc2gtMTAuM3Ax LWdzaXNzaC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI0MzYgKzAsMCBAQAotZGlmZiAtTnVy IG9wZW5zc2gtMTAuM3AxLm9yaWcvYXV0aDIuYyBvcGVuc3NoLTEwLjNwMS9hdXRoMi5jCi0tLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoMi5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuNjIxODY2MDI5 ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvYXV0aDIuYwkyMDI2LTA3LTAxIDEwOjU0OjU2LjQ3 NjgwMjc2NiArMDIwMAotQEAgLTI4Niw3ICsyODYsMjggQEAKLSAJICAgIChyID0gc3NocGt0X2dl dF9jc3RyaW5nKHNzaCwgJnNlcnZpY2UsIE5VTEwpKSAhPSAwIHx8Ci0gCSAgICAociA9IHNzaHBr dF9nZXRfY3N0cmluZyhzc2gsICZtZXRob2QsIE5VTEwpKSAhPSAwKQotIAkJZ290byBvdXQ7Ci0t CWRlYnVnKCJ1c2VyYXV0aC1yZXF1ZXN0IGZvciB1c2VyICVzIHNlcnZpY2UgJXMgbWV0aG9kICVz IiwgdXNlciwgc2VydmljZSwgbWV0aG9kKTsKLSsKLSsjaWZkZWYgR1NTQVBJCi0rCWlmICh1c2Vy WzBdID09ICdcMCcpIHsKLSsJCWRlYnVnKCJyZWNlaXZlZCBlbXB0eSB1c2VybmFtZSBmb3IgJXMi LCBtZXRob2QpOwotKwkJaWYgKHN0cmNtcChtZXRob2QsICJnc3NhcGkta2V5ZXgiKSA9PSAwKSB7 Ci0rCQkJY2hhciAqbG5hbWUgPSBOVUxMOwotKwkJCW1tX3NzaF9nc3NhcGlfbG9jYWxuYW1lKCZs bmFtZSk7Ci0rCQkJaWYgKGxuYW1lICYmIGxuYW1lWzBdICE9ICdcMCcpIHsKLSsJCQkJZnJlZSh1 c2VyKTsKLSsJCQkJdXNlciA9IGxuYW1lOwotKwkJCQlkZWJ1Zygic2V0IHVzZXJuYW1lIHRvICVz IGZyb20gZ3NzYXBpIGNvbnRleHQiLCB1c2VyKTsKLSsJCQl9IGVsc2UgewotKwkJCQlkZWJ1Zygi ZmFpbGVkIHRvIHNldCB1c2VybmFtZSBmcm9tIGdzc2FwaSBjb250ZXh0Iik7Ci0rCQkJCXNzaF9w YWNrZXRfc2VuZF9kZWJ1Zyhzc2gsCi0rCQkJCSAgICAiZmFpbGVkIHRvIHNldCB1c2VybmFtZSBm cm9tIGdzc2FwaSBjb250ZXh0Iik7Ci0rCQkJfQotKwkJfQotKwl9Ci0rI2VuZGlmCi0rCi0rCWRl YnVnKCJ1c2VyYXV0aC1yZXF1ZXN0IGZvciB1c2VyICVzIHNlcnZpY2UgJXMgbWV0aG9kICVzIiwK LSsJICAgIHVzZXJbMF0gPyB1c2VyIDogIjxpbXBsaWNpdD4iLCBzZXJ2aWNlLCBtZXRob2QpOwot IAlkZWJ1ZygiYXR0ZW1wdCAlZCBmYWlsdXJlcyAlZCIsIGF1dGhjdHh0LT5hdHRlbXB0LCBhdXRo Y3R4dC0+ZmFpbHVyZXMpOwotIAotICNpZmRlZiBXSVRIX1NFTElOVVgKLUBAIC0yOTksMTYgKzMy MCwzOCBAQAotIAotIAlpZiAoYXV0aGN0eHQtPmF0dGVtcHQgPj0gMTAyNCkKLSAJCWF1dGhfbWF4 dHJpZXNfZXhjZWVkZWQoc3NoKTsKLS0JaWYgKGF1dGhjdHh0LT5hdHRlbXB0KysgPT0gMCkgewot LQkJLyogc2V0dXAgYXV0aCBjb250ZXh0ICovCi0tCQlhdXRoY3R4dC0+cHcgPSBtbV9nZXRwd25h bWFsbG93KHNzaCwgdXNlcik7Ci0rCS8qIElmIGZpcnN0IHRpbWUgb3IgdXNlcm5hbWUgY2hhbmdl ZCBvciBlbXB0eSB1c2VybmFtZSwKLSsJICAgc2V0dXAvcmVzZXQgYXV0aGVudGljYXRpb24gY29u dGV4dC4gKi8KLSsJaWYgKChhdXRoY3R4dC0+YXR0ZW1wdCsrID09IDApIHx8Ci0rCSAgICAoc3Ry Y21wKHVzZXIsIGF1dGhjdHh0LT51c2VyKSAhPSAwKSB8fAotKwkgICAgKHN0cmNtcCh1c2VyLCAi IikgPT0gMCkpIHsKLSsJCWlmIChhdXRoY3R4dC0+dXNlcikgewotKwkJCWZyZWUoYXV0aGN0eHQt PnVzZXIpOwotKwkJCWF1dGhjdHh0LT51c2VyID0gTlVMTDsKLSsJCX0KLSsJCWF1dGhjdHh0LT52 YWxpZCA9IDA7Ci0gCQlhdXRoY3R4dC0+dXNlciA9IHhzdHJkdXAodXNlcik7Ci0gCQlhdXRoY3R4 dC0+c2VydmljZSA9IHhzdHJkdXAoc2VydmljZSk7Ci0gCQlhdXRoY3R4dC0+c3R5bGUgPSBzdHls ZSA/IHhzdHJkdXAoc3R5bGUpIDogTlVMTDsKLSAjaWZkZWYgV0lUSF9TRUxJTlVYCi0gCQlhdXRo Y3R4dC0+cm9sZSA9IHJvbGUgPyB4c3RyZHVwKHJvbGUpIDogTlVMTDsKLSAjZW5kaWYKLS0JCWlm IChhdXRoY3R4dC0+cHcgJiYgc3RyY21wKHNlcnZpY2UsICJzc2gtY29ubmVjdGlvbiIpPT0wKSB7 Ci0rCQlpZiAoc3RyY21wKHNlcnZpY2UsICJzc2gtY29ubmVjdGlvbiIpICE9IDApIHsKLSsJCQlz c2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiVW5zdXBwb3J0ZWQgc2VydmljZSAlcyIsCi0rCQkJ ICAgIHNlcnZpY2UpOwotKwkJfQotKyNpZmRlZiBHU1NBUEkKLSsJCS8qIElmIHdlJ3JlIGdvaW5n IHRvIHNldCB0aGUgdXNlcm5hbWUgYmFzZWQgb24gdGhlCi0rCQkgICBHU1NBUEkgY29udGV4dCBs YXRlciwgdGhlbiB3YWl0IHVudGlsIHRoZW4gdG8KLSsJCSAgIHZlcmlmeSBpdC4gSnVzdCBwdXQg aW4gcGxhY2Vob2xkZXJzIGZvciBub3cuICovCi0rCQlpZiAoKHN0cmNtcCh1c2VyLCAiIikgPT0g MCkgJiYKLSsJCSAgICAoKHN0cmNtcChtZXRob2QsICJnc3NhcGkiKSA9PSAwKSB8fAotKwkJICAg ICAoc3RyY21wKG1ldGhvZCwgImdzc2FwaS13aXRoLW1pYyIpID09IDApKSkgewotKwkJCWF1dGhj dHh0LT5wdyA9IGZha2VwdygpOwotKwkJfSBlbHNlIHsKLSsjZW5kaWYKLSsJCWF1dGhjdHh0LT5w dyA9IG1tX2dldHB3bmFtYWxsb3coc3NoLCB1c2VyKTsKLSsJCWlmIChhdXRoY3R4dC0+cHcpIHsK LSAJCQlhdXRoY3R4dC0+dmFsaWQgPSAxOwotIAkJCWRlYnVnMl9mKCJzZXR0aW5nIHVwIGF1dGhj dHh0IGZvciAlcyIsIHVzZXIpOwotIAkJfSBlbHNlIHsKLUBAIC0zMTYsNiArMzU5LDkgQEAKLSAJ CQkvKiBJbnZhbGlkIHVzZXIsIGZha2UgcGFzc3dvcmQgaW5mb3JtYXRpb24gKi8KLSAJCQlhdXRo Y3R4dC0+cHcgPSBmYWtlcHcoKTsKLSAJCX0KLSsjaWZkZWYgR1NTQVBJCi0rCQl9IC8qIGVuZGlm IGZvciBzZXR0aW5nIHVzZXJuYW1lIGJhc2VkIG9uIEdTU0FQSSBjb250ZXh0ICovCi0rI2VuZGlm Ci0gI2lmZGVmIFVTRV9QQU0KLSAJCWlmIChvcHRpb25zLnVzZV9wYW0pCi0gCQkJbW1fc3RhcnRf cGFtKHNzaCk7Ci1AQCAtMzIzLDYgKzM2OSw3IEBACi0gCQlzc2hfcGFja2V0X3NldF9sb2dfcHJl YW1ibGUoc3NoLCAiJXN1c2VyICVzIiwKLSAJCSAgICBhdXRoY3R4dC0+dmFsaWQgPyAiYXV0aGVu dGljYXRpbmcgIiA6ICJpbnZhbGlkICIsIHVzZXIpOwotIAkJc2V0cHJvY3RpdGxlKCIlcyBbbmV0 XSIsIGF1dGhjdHh0LT52YWxpZCA/IHVzZXIgOiAidW5rbm93biIpOwotKwkJaWYgKGF1dGhjdHh0 LT5hdHRlbXB0ID09IDEpIHsKLSAJCW1tX2luZm9ybV9hdXRoc2VydihzZXJ2aWNlLCBzdHlsZSk7 Ci0gI2lmZGVmIFdJVEhfU0VMSU5VWAotICAgICAgICAgIAltbV9pbmZvcm1fYXV0aHJvbGUocm9s ZSk7Ci1AQCAtMzMzLDkgKzM4MCwxMCBAQAotIAkJaWYgKGF1dGgyX3NldHVwX21ldGhvZHNfbGlz dHMoYXV0aGN0eHQpICE9IDApCi0gCQkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwKLSAJCQkg ICAgIm5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgZW5hYmxlZCIpOwotLQl9IGVsc2UgaWYgKHN0 cmNtcCh1c2VyLCBhdXRoY3R4dC0+dXNlcikgIT0gMCB8fAotLQkgICAgc3RyY21wKHNlcnZpY2Us IGF1dGhjdHh0LT5zZXJ2aWNlKSAhPSAwKSB7Ci0tCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3No LCAiQ2hhbmdlIG9mIHVzZXJuYW1lIG9yIHNlcnZpY2UgIgotKwkJfQotKwl9Ci0rCWlmIChzdHJj bXAoc2VydmljZSwgYXV0aGN0eHQtPnNlcnZpY2UpICE9IDApIHsKLSsJCXNzaF9wYWNrZXRfZGlz Y29ubmVjdChzc2gsICJDaGFuZ2Ugb2Ygc2VydmljZSAiCi0gCQkgICAgIm5vdCBhbGxvd2VkOiAo JXMsJXMpIC0+ICglcywlcykiLAotIAkJICAgIGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+c2Vy dmljZSwgdXNlciwgc2VydmljZSk7Ci0gCX0KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmln L2F1dGgyLWdzcy5jIG9wZW5zc2gtMTAuM3AxL2F1dGgyLWdzcy5jCi0tLS0gb3BlbnNzaC0xMC4z cDEub3JpZy9hdXRoMi1nc3MuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjMxODQ4MTAwMiArMDIwMAot KysrIG9wZW5zc2gtMTAuM3AxL2F1dGgyLWdzcy5jCTIwMjYtMDctMDEgMTA6NTY6NTEuNDc5NzA4 NDUzICswMjAwCi1AQCAtNTQsNiArNTQsNyBAQAotIGV4dGVybiBzdHJ1Y3QgYXV0aG1ldGhvZF9j ZmcgbWV0aG9kY2ZnX2dzc2tleWV4OwotIGV4dGVybiBzdHJ1Y3QgYXV0aG1ldGhvZF9jZmcgbWV0 aG9kY2ZnX2dzc2FwaTsKLSAKLStzdGF0aWMgdm9pZCBzc2hfZ3NzYXBpX3VzZXJhdXRoX2Vycm9y KEdzc2N0eHQgKmN0eHQsIHN0cnVjdCBzc2ggKnNzaCk7Ci0gc3RhdGljIGludCBpbnB1dF9nc3Nh cGlfdG9rZW4oaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCk7Ci0gc3Rh dGljIGludCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qg c3NoICpzc2gpOwotIHN0YXRpYyBpbnQgaW5wdXRfZ3NzYXBpX2V4Y2hhbmdlX2NvbXBsZXRlKGlu dCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpOwotQEAgLTY3LDggKzY4LDgg QEAKLSB7Ci0gCUF1dGhjdHh0ICphdXRoY3R4dCA9IHNzaC0+YXV0aGN0eHQ7Ci0gCWludCByLCBh dXRoZW50aWNhdGVkID0gMDsKLS0Jc3RydWN0IHNzaGJ1ZiAqYiA9IE5VTEw7Ci0tCWdzc19idWZm ZXJfZGVzYyBtaWMsIGdzc2J1ZjsKLSsJc3RydWN0IHNzaGJ1ZiAqYiA9IE5VTEwsICpiMiA9IE5V TEw7Ci0rCWdzc19idWZmZXJfZGVzYyBtaWMsIGdzc2J1ZiwgZ3NzYnVmMjsKLSAJdV9jaGFyICpw OwotIAlzaXplX3QgbGVuOwotIAotQEAgLTc5LDYgKzgwLDkgQEAKLSAJaWYgKChiID0gc3NoYnVm X25ldygpKSA9PSBOVUxMKQotIAkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKLSAKLSsJ aWYgKChiMiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCWZhdGFsX2YoInNzaGJ1Zl9uZXcg ZmFpbGVkIik7Ci0rCi0gCW1pYy52YWx1ZSA9IHA7Ci0gCW1pYy5sZW5ndGggPSBsZW47Ci0gCi1A QCAtODksMTMgKzkzLDI4IEBACi0gCQlmYXRhbF9mKCJzc2hidWZfbXV0YWJsZV9wdHIgZmFpbGVk Iik7Ci0gCWdzc2J1Zi5sZW5ndGggPSBzc2hidWZfbGVuKGIpOwotIAotKwkvKiBjbGllbnQgbWF5 IGhhdmUgdXNlZCBlbXB0eSB1c2VybmFtZSB0byBkZXRlcm1pbmUgdGFyZ2V0Ci0rCSAgIG5hbWUg ZnJvbSBHU1NBUEkgY29udGV4dCAqLwotKwlzc2hfZ3NzYXBpX2J1aWxkbWljKGIyLCAiIiwgYXV0 aGN0eHQtPnNlcnZpY2UsICJnc3NhcGkta2V5ZXgiLAotKwkgICAgc3NoLT5rZXgtPnNlc3Npb25f aWQpOwotKwotKwlpZiAoKGdzc2J1ZjIudmFsdWUgPSBzc2hidWZfbXV0YWJsZV9wdHIoYjIpKSA9 PSBOVUxMKQotKwkJZmF0YWxfZigic3NoYnVmX211dGFibGVfcHRyIGZhaWxlZCIpOwotKwlnc3Ni dWYyLmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYjIpOwotKwotIAkvKiBnc3Nfa2V4X2NvbnRleHQgaXMg TlVMTCB3aXRoIHByaXZzZXAsIHNvIHdlIGNhbid0IGNoZWNrIGl0IGhlcmUgKi8KLSAJaWYgKCFH U1NfRVJST1IobW1fc3NoX2dzc2FwaV9jaGVja21pYyhnc3Nfa2V4X2NvbnRleHQsCi0tCSAgICAm Z3NzYnVmLCAmbWljKSkpCi0tCQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2so YXV0aGN0eHQtPnVzZXIsCi0tCQkgICAgYXV0aGN0eHQtPnB3LCAxKTsKLSsJICAgICZnc3NidWYs ICZtaWMpKSB8fAotKwkgICAgIUdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKGdzc19r ZXhfY29udGV4dCwKLSsJICAgICZnc3NidWYyLCAmbWljKSkpIHsKLSsJCWlmIChhdXRoY3R4dC0+ dmFsaWQgJiYgYXV0aGN0eHQtPnVzZXIgJiYgYXV0aGN0eHQtPnVzZXJbMF0pIHsKLSsJCQlhdXRo ZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsCi0rCQkJICAg IGF1dGhjdHh0LT5wdywgMSk7Ci0rCQl9Ci0rCX0KLSAKLSAJc3NoYnVmX2ZyZWUoYik7Ci0rCXNz aGJ1Zl9mcmVlKGIyKTsKLSAJZnJlZShtaWMudmFsdWUpOwotIAotIAlyZXR1cm4gKGF1dGhlbnRp Y2F0ZWQpOwotQEAgLTE1NCw3ICsxNzMsOSBAQAotIAkJcmV0dXJuICgwKTsKLSAJfQotIAotLQlp ZiAoIWF1dGhjdHh0LT52YWxpZCB8fCBhdXRoY3R4dC0+dXNlciA9PSBOVUxMKSB7Ci0rCS8qIGF1 dGhjdHh0LT52YWxpZCBtYXkgYmUgMCBpZiB3ZSBoYXZlbid0IHlldCBkZXRlcm1pbmVkCi0rCSAg IHVzZXJuYW1lIGZyb20gZ3NzYXBpIGNvbnRleHQuICovCi0rCWlmIChhdXRoY3R4dC0+dXNlciA9 PSBOVUxMKSB7Ci0gCQlkZWJ1ZzJfZigiZGlzYWJsZWQgYmVjYXVzZSBvZiBpbnZhbGlkIHVzZXIi KTsKLSAJCWZyZWUoZG9pZCk7Ci0gCQlyZXR1cm4gKDApOwotQEAgLTE5Miw3ICsyMTMsNyBAQAot IAlHc3NjdHh0ICpnc3NjdHh0OwotIAlnc3NfYnVmZmVyX2Rlc2Mgc2VuZF90b2sgPSBHU1NfQ19F TVBUWV9CVUZGRVI7Ci0gCWdzc19idWZmZXJfZGVzYyByZWN2X3RvazsKLS0JT01fdWludDMyIG1h al9zdGF0dXMsIG1pbl9zdGF0dXMsIGZsYWdzOwotKwlPTV91aW50MzIgbWFqX3N0YXR1cywgbWlu X3N0YXR1cywgZmxhZ3MgPSAwOwotIAl1X2NoYXIgKnA7Ci0gCXNpemVfdCBsZW47Ci0gCWludCBy OwotQEAgLTIxMyw2ICsyMzQsNyBAQAotIAlmcmVlKHApOwotIAotIAlpZiAoR1NTX0VSUk9SKG1h al9zdGF0dXMpKSB7Ci0rCQlzc2hfZ3NzYXBpX3VzZXJhdXRoX2Vycm9yKGdzc2N0eHQsIHNzaCk7 Ci0gCQlpZiAoc2VuZF90b2subGVuZ3RoICE9IDApIHsKLSAJCQlpZiAoKHIgPSBzc2hwa3Rfc3Rh cnQoc3NoLAotIAkJCSAgICBTU0gyX01TR19VU0VSQVVUSF9HU1NBUElfRVJSVE9LKSkgIT0gMCB8 fAotQEAgLTI4Nyw2ICszMDksMzQgQEAKLSAJcmV0dXJuIDA7Ci0gfQotIAotK3N0YXRpYyB2b2lk Ci0rZ3NzYXBpX3NldF91c2VybmFtZShzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwlBdXRoY3R4dCAq YXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OwotKwljaGFyICpsbmFtZSA9IE5VTEw7Ci0rCi0rCWlm ICgoYXV0aGN0eHQtPnVzZXIgPT0gTlVMTCkgfHwgKGF1dGhjdHh0LT51c2VyWzBdID09ICdcMCcp KSB7Ci0rCQltbV9zc2hfZ3NzYXBpX2xvY2FsbmFtZSgmbG5hbWUpOwotKwkJaWYgKGxuYW1lICYm IGxuYW1lWzBdICE9ICdcMCcpIHsKLSsJCQlpZiAoYXV0aGN0eHQtPnVzZXIpIGZyZWUoYXV0aGN0 eHQtPnVzZXIpOwotKwkJCWF1dGhjdHh0LT51c2VyID0gbG5hbWU7Ci0rCQkJZGVidWcoInNldCB1 c2VybmFtZSB0byAlcyBmcm9tIGdzc2FwaSBjb250ZXh0IiwgbG5hbWUpOwotKwkJCWF1dGhjdHh0 LT5wdyA9IG1tX2dldHB3bmFtYWxsb3coc3NoLCBhdXRoY3R4dC0+dXNlcik7Ci0rCQkJaWYgKGF1 dGhjdHh0LT5wdykgewotKwkJCQlhdXRoY3R4dC0+dmFsaWQgPSAxOwotKyNpZmRlZiBVU0VfUEFN Ci0rCQkJCWlmIChvcHRpb25zLnVzZV9wYW0pCi0rCQkJCQltbV9zdGFydF9wYW0oc3NoKTsKLSsj ZW5kaWYKLSsJCQl9Ci0rCQl9IGVsc2UgewotKwkJCWRlYnVnKCJmYWlsZWQgdG8gc2V0IHVzZXJu YW1lIGZyb20gZ3NzYXBpIGNvbnRleHQiKTsKLSsJCQlzc2hfcGFja2V0X3NlbmRfZGVidWcoc3No LAotKwkJCSAgICAiZmFpbGVkIHRvIHNldCB1c2VybmFtZSBmcm9tIGdzc2FwaSBjb250ZXh0Iik7 Ci0rCQl9Ci0rCX0KLSt9Ci0rCi0gLyoKLSAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjbGll bnQgdGhpbmtzIHdlJ3ZlIGNvbXBsZXRlZCBhdXRoZW50aWNhdGlvbi4KLSAgKiBJdCBzaG91bGQg b25seSBiZSBlbmFibGVkIGluIHRoZSBkaXNwYXRjaCBoYW5kbGVyIGJ5IHRoZSBmdW5jdGlvbiBh Ym92ZSwKLUBAIC0yOTcsMTEgKzM0NywxMyBAQAotIGlucHV0X2dzc2FwaV9leGNoYW5nZV9jb21w bGV0ZShpbnQgdHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKQotIHsKLSAJQXV0 aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRoY3R4dDsKLS0JaW50IHIsIGF1dGhlbnRpY2F0ZWQ7 Ci0rCWludCByLCBhdXRoZW50aWNhdGVkID0gMDsKLSAKLSAJaWYgKGF1dGhjdHh0ID09IE5VTEwp Ci0gCQlmYXRhbCgiTm8gYXV0aGVudGljYXRpb24gb3IgR1NTQVBJIGNvbnRleHQiKTsKLSAKLSsJ Z3NzYXBpX3NldF91c2VybmFtZShzc2gpOwotKwotIAkvKgotIAkgKiBXZSBkb24ndCBuZWVkIHRv IGNoZWNrIHRoZSBzdGF0dXMsIGJlY2F1c2Ugd2UncmUgb25seSBlbmFibGVkIGluCi0gCSAqIHRo ZSBkaXNwYXRjaGVyIG9uY2UgdGhlIGV4Y2hhbmdlIGlzIGNvbXBsZXRlCi1AQCAtMzEwLDcgKzM2 MiwxMSBAQAotIAlpZiAoKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQotIAkJZmF0YWxf ZnIociwgInBhcnNlIHBhY2tldCIpOwotIAotLSAJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3Nh cGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+cHcsIDEpOwotKwkvKiB1c2VyIHNo b3VsZCBiZSBzZXQgaWYgdmFsaWQgYnV0IHdlIGRvdWJsZS1jaGVjayBoZXJlICovCi0rCWlmIChh dXRoY3R4dC0+dmFsaWQgJiYgYXV0aGN0eHQtPnVzZXIgJiYgYXV0aGN0eHQtPnVzZXJbMF0pIHsK LSsJCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlciwK LSsJCSAgICBhdXRoY3R4dC0+cHcsIDEpOwotKwl9Ci0gCi0gCWF1dGhjdHh0LT5wb3N0cG9uZWQg PSAwOwotIAlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfVVNFUkFVVEhfR1NTQVBJX1RP S0VOLCBOVUxMKTsKLUBAIC0zNTcsMTAgKzQxMywxNiBAQAotIAkJZmF0YWxfZigic3NoYnVmX211 dGFibGVfcHRyIGZhaWxlZCIpOwotIAlnc3NidWYubGVuZ3RoID0gc3NoYnVmX2xlbihiKTsKLSAK LS0JaWYgKCFHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9jaGVja21pYyhnc3NjdHh0LCAmZ3NzYnVm LCAmbWljKSkpCi0tCQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0 eHQtPnVzZXIsIGF1dGhjdHh0LT5wdywgMCk7Ci0tCWVsc2UKLSsJZ3NzYXBpX3NldF91c2VybmFt ZShzc2gpOwotKwotKwlpZiAoIUdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKGdzc2N0 eHQsICZnc3NidWYsICZtaWMpKSkgewotKwkJaWYgKGF1dGhjdHh0LT52YWxpZCAmJiBhdXRoY3R4 dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNlclswXSkgewotKwkJCWF1dGhlbnRpY2F0ZWQgPSBtbV9z c2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlciwKLSsJCQkgICAgYXV0aGN0eHQtPnB3LCAw KTsKLSsJCX0KLSsJfSBlbHNlIHsKLSAJCWxvZ2l0KCJHU1NBUEkgTUlDIGNoZWNrIGZhaWxlZCIp OwotKwl9Ci0gCi0gCXNzaGJ1Zl9mcmVlKGIpOwotIAlpZiAobWljdXNlciAhPSBhdXRoY3R4dC0+ dXNlcikKLUBAIC0zNzYsNiArNDM4LDI2IEBACi0gCXJldHVybiAwOwotIH0KLSAKLStzdGF0aWMg dm9pZCBzc2hfZ3NzYXBpX3VzZXJhdXRoX2Vycm9yKEdzc2N0eHQgKmN0eHQsIHN0cnVjdCBzc2gg KnNzaCkgewotKwljaGFyICplcnJzdHI7Ci0rCU9NX3VpbnQzMiBtYWosIG1pbjsKLSsJaW50IHI7 Ci0rCi0rCWVycnN0ciA9IG1tX3NzaF9nc3NhcGlfbGFzdF9lcnJvcihjdHh0LCAmbWFqLCAmbWlu KTsKLSsJaWYgKGVycnN0cikgewotKwkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwKLSsJCSAg ICBTU0gyX01TR19VU0VSQVVUSF9HU1NBUElfRVJST1IpKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBz c2hwa3RfcHV0X3UzMihzc2gsIG1haikpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBrdF9wdXRf dTMyKHNzaCwgbWluKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNz aCwgZXJyc3RyKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwg IiIpKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwIHx8Ci0rCQkg ICAgKHIgPSBzc2hfcGFja2V0X3dyaXRlX3dhaXQoc3NoKSkgIT0gMCkKLSsJCQlmYXRhbF9mcihy LCAiIik7Ci0rCQlmcmVlKGVycnN0cik7Ci0rCX0KLSt9Ci0rCi0gQXV0aG1ldGhvZCBtZXRob2Rf Z3Nza2V5ZXggPSB7Ci0gCSZtZXRob2RjZmdfZ3Nza2V5ZXgsCi0gCXVzZXJhdXRoX2dzc2tleWV4 LAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvYXV0aC5jIG9wZW5zc2gtMTAuM3AxL2F1 dGguYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvYXV0aC5jCTIwMjYtMDctMDEgMDk6Mzg6MDAu NjIxNDQ5MTMzICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvYXV0aC5jCTIwMjYtMDctMDEgMTA6 Mzk6NDMuNTY4NTY1MTExICswMjAwCi1AQCAtMjk2LDcgKzI5Niw4IEBACi0gCSAgICBtZXRob2Qs Ci0gCSAgICBzdWJtZXRob2QgIT0gTlVMTCA/ICIvIiA6ICIiLCBzdWJtZXRob2QgPT0gTlVMTCA/ ICIiIDogc3VibWV0aG9kLAotIAkgICAgYXV0aGN0eHQtPnZhbGlkID8gIiIgOiAiaW52YWxpZCB1 c2VyICIsCi0tCSAgICBhdXRoY3R4dC0+dXNlciwKLSsJICAgIChhdXRoY3R4dC0+dXNlciAmJiBh dXRoY3R4dC0+dXNlclswXSkgPwotKwkJYXV0aGN0eHQtPnVzZXIgOiAidW5rbm93biIsCi0gCSAg ICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLAotIAkgICAgc3NoX3JlbW90ZV9wb3J0KHNzaCksCi0g CSAgICBleHRyYSAhPSBOVUxMID8gIjogIiA6ICIiLAotQEAgLTQ4OCwxMyArNDg5LDE4IEBACi0g I2VuZGlmCi0gCi0gCXB3ID0gZ2V0cHduYW0odXNlcik7Ci0rI2lmZGVmIFVTRV9QQU0KLSsJaWYg KG9wdGlvbnMudXNlX3BhbSAmJiBvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UgJiYgcHcg PT0gTlVMTCkKLSsJCXB3ID0gc3NocGFtX2dldHB3KHVzZXIpOwotKyNlbmRpZgotIAotICNpZiBk ZWZpbmVkKF9BSVgpICYmIGRlZmluZWQoSEFWRV9TRVRBVVRIREIpCi0gCWFpeF9yZXN0b3JlYXV0 aGRiKCk7Ci0gI2VuZGlmCi0gCWlmIChwdyA9PSBOVUxMKSB7Ci0gCQlsb2dpdCgiSW52YWxpZCB1 c2VyICUuMTAwcyBmcm9tICUuMTAwcyBwb3J0ICVkIiwKLS0JCSAgICB1c2VyLCBzc2hfcmVtb3Rl X2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSk7Ci0rCQkgICAgKHVzZXIgJiYgdXNl clswXSkgPyB1c2VyIDogInVua25vd24iLAotKwkJICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCks IHNzaF9yZW1vdGVfcG9ydChzc2gpKTsKLSAjaWZkZWYgQ1VTVE9NX0ZBSUxFRF9MT0dJTgotIAkJ cmVjb3JkX2ZhaWxlZF9sb2dpbihzc2gsIHVzZXIsCi0gCQkgICAgYXV0aF9nZXRfY2Fub25pY2Fs X2hvc3RuYW1lKHNzaCwgb3B0aW9ucy51c2VfZG5zKSwgInNzaCIpOwotZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvYXV0aC5oIG9wZW5zc2gtMTAuM3AxL2F1dGguaAotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvYXV0aC5oCTIwMjYtMDctMDEgMDk6Mzg6MDAuNjIxNTUxNjE5ICswMjAwCi0r Kysgb3BlbnNzaC0xMC4zcDEvYXV0aC5oCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTY5NjQ4NDk4ICsw MjAwCi1AQCAtODUsNiArODUsOCBAQAotIAlrcmI1X3ByaW5jaXBhbAkga3JiNV91c2VyOwotIAlj aGFyCQkqa3JiNV90aWNrZXRfZmlsZTsKLSAJY2hhcgkJKmtyYjVfY2NuYW1lOwotKyNlbmRpZgot KyNpZmRlZiBHU1NBUEkKLSAJaW50CQkga3JiNV9zZXRfZW52OwotICNlbmRpZgotIAlzdHJ1Y3Qg c3NoYnVmCSpsb2dpbm1zZzsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2F1dGgtcGFt LmMgb3BlbnNzaC0xMC4zcDEvYXV0aC1wYW0uYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvYXV0 aC1wYW0uYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjg1NzEyMDA2MyArMDIwMAotKysrIG9wZW5zc2gt MTAuM3AxL2F1dGgtcGFtLmMJMjAyNi0wNy0wMSAxMDozOTo0My41NzAzOTczMjYgKzAyMDAKLUBA IC0yNTQsNiArMjU0LDcgQEAKLSBzdGF0aWMgY29uc3QgY2hhciAqc3NocGFtX3Bhc3N3b3JkID0g TlVMTDsKLSBzdGF0aWMgY2hhciAqc3NocGFtX3Job3N0ID0gTlVMTDsKLSBzdGF0aWMgY2hhciAq c3NocGFtX2xhZGRyID0gTlVMTDsKLStzdGF0aWMgc3RydWN0IHNzaCAqc3NocGFtX3NzaCA9IE5V TEw7Ci0gCi0gLyogU29tZSBQQU0gaW1wbGVtZW50YXRpb25zIGRvbid0IGltcGxlbWVudCB0aGlz ICovCi0gI2lmbmRlZiBIQVZFX1BBTV9HRVRFTlZMSVNUCi1AQCAtMjc3LDYgKzI3OCw1NiBAQAot IH0KLSAjZW5kaWYgLyogSEFWRV9QQU1fUFVURU5WICovCi0gCi0rc3RydWN0IHBhc3N3ZCAqCi0r c3NocGFtX2dldHB3KGNvbnN0IGNoYXIgKnVzZXIpCi0rewotKwlzdHJ1Y3QgcGFzc3dkICpwdzsK LSsKLSsJaWYgKChwdyA9IGdldHB3bmFtKHVzZXIpKSAhPSBOVUxMKQotKwkJcmV0dXJuKHB3KTsK LSsKLSsJZGVidWcoIlBBTTogZmFraW5nIHBhc3N3ZCBzdHJ1Y3QgZm9yIHVzZXIgJyUuMTAwcyci LCB1c2VyKTsKLSsJaWYgKChwdyA9IGdldHB3bmFtKFNTSF9QUklWU0VQX1VTRVIpKSA9PSBOVUxM KQotKwkJcmV0dXJuIE5VTEw7Ci0rCXB3LT5wd19uYW1lID0geHN0cmR1cCh1c2VyKTsJLyogWFhY IGxlYWsgKi8KLSsJcHctPnB3X3NoZWxsID0gIi9iaW4vdHJ1ZSI7Ci0rCXB3LT5wd19nZWNvcyA9 ICJzc2hkIGZha2UgUEFNIHVzZXIiOwotKwlyZXR1cm4gKHB3KTsKLSt9Ci0rCi0rdm9pZAotK3Nz aHBhbV9jaGVja191c2VyY2hhbmdlZCh2b2lkKQotK3sKLSsJaW50IHNzaHBhbV9lcnI7Ci0rCXN0 cnVjdCBwYXNzd2QgKnB3OwotKwljb25zdCBjaGFyICp1c2VyOwotKwotKwlkZWJ1Zygic3NocGFt X2NoZWNrX3VzZXJjaGFuZ2VkIik7Ci0rCXNzaHBhbV9lcnIgPSBwYW1fZ2V0X2l0ZW0oc3NocGFt X2hhbmRsZSwgUEFNX1VTRVIsCi0rCQkJCSAgKHNzaHBhbV9jb25zdCB2b2lkICoqKSZ1c2VyKTsK LSsJaWYgKHNzaHBhbV9lcnIgIT0gUEFNX1NVQ0NFU1MpCi0rCQlmYXRhbCgiUEFNOiBjb3VsZCBu b3QgZ2V0IFBBTV9VU0VSOiAlcyIsCi0rCQkgICAgcGFtX3N0cmVycm9yKHNzaHBhbV9oYW5kbGUs IHNzaHBhbV9lcnIpKTsKLSsJZGVidWcoInNzaHBhbV9jaGVja191c2VyY2hhbmdlZDogdXNlciB3 YXMgJyUuMTAwcyciLAotKwkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7Ci0rCWlm IChzdHJjbXAodXNlciwgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSkgIT0gMCkgewotKwkJ ZGVidWcoIlBBTTogdXNlciBtYXBwZWQgZnJvbSAnJS4xMDBzJyB0byAnJS4xMDBzJyIsCi0rCQkg ICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSwgdXNlcik7Ci0rCQlpZiAoKHB3ID0gZ2V0 cHduYW0odXNlcikpID09IE5VTEwpCi0rCQkJZmF0YWwoIlBBTTogY291bGQgbm90IGdldCBwYXNz d2QgZW50cnkgZm9yIHVzZXIgIgotKwkJCSAgICAiJyUuMTAwcycgcHJvdmlkZWQgYnkgUEFNX1VT RVIiLCB1c2VyKTsKLSsJCXB3ZnJlZShzc2hwYW1fYXV0aGN0eHQtPnB3KTsKLSsJCXNzaHBhbV9h dXRoY3R4dC0+cHcgPSBwd2NvcHkocHcpOwotKwkJc3NocGFtX2F1dGhjdHh0LT52YWxpZCA9IGFs bG93ZWRfdXNlcihzc2hwYW1fc3NoLCBwdyk7Ci0rCQlmcmVlKHNzaHBhbV9hdXRoY3R4dC0+dXNl cik7Ci0rCQlzc2hwYW1fYXV0aGN0eHQtPnVzZXIgPSB4c3RyZHVwKHVzZXIpOwotKwkJZGVidWco IlBBTTogdXNlciAnJS4xMDBzJyBub3cgJXN2YWxpZCIsIHVzZXIsCi0rCQkgICAgc3NocGFtX2F1 dGhjdHh0LT52YWxpZCA/ICIiIDogImluIik7Ci0rCX0KLSsJZGVidWcoInNzaHBhbV9jaGVja191 c2VyY2hhbmdlZDogdXNlciBpcyAnJS4xMDBzJyIsCi0rCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3 LT5wd19uYW1lKTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBzc2hwYW1fcGFzc3dvcmRfY2hhbmdl X3JlcXVpcmVkKGludCByZXFkKQotIHsKLUBAIC0zMDgsNyArMzU5LDcgQEAKLSBzdGF0aWMgdm9p ZAotIGltcG9ydF9lbnZpcm9ubWVudHMoc3RydWN0IHNzaGJ1ZiAqYikKLSB7Ci0tCWNoYXIgKmVu djsKLSsJY2hhciAqZW52LCAqdXNlcjsKLSAJdV9pbnQgbiwgaSwgbnVtX2VudjsKLSAJaW50IHI7 Ci0gCi1AQCAtMzI0LDYgKzM3NSwxOSBAQAotIAlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihiLCAm bikpICE9IDApCi0gCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0gCXNzaHBhbV9wYXNz d29yZF9jaGFuZ2VfcmVxdWlyZWQobiAhPSAwKTsKLSsJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91 c2VyX2NoYW5nZSkgewotKwkJaWYgKChyID0gc3NoYnVmX2dldF9jc3RyaW5nKGIsICZ1c2VyLCBO VUxMKSkgIT0gMCkKLSsJCQlmYXRhbCgiJXM6IGJ1ZmZlciBlcnJvcjogJXMiLCBfX2Z1bmNfXywg c3NoX2VycihyKSk7Ci0rCQlkZWJ1ZygiUEFNOiB1c2VyIGlzICclLjEwMHMnIiwKLSsJCSAgICBz c2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKLSsJCWRlYnVnKCJQQU06IGdvdCB1c2VybmFt ZSAnJS4xMDBzJyBmcm9tIHRocmVhZCIsIHVzZXIpOwotKwkJaWYgKChzc2hwYW1fZXJyID0gcGFt X3NldF9pdGVtKHNzaHBhbV9oYW5kbGUsIFBBTV9VU0VSLCB1c2VyKSkKLSsJCSAgICAhPSBQQU1f U1VDQ0VTUykKLSsJCQlmYXRhbCgiUEFNOiBmYWlsZWQgdG8gc2V0IFBBTV9VU0VSOiAlcyIsCi0r CQkJICAgIHBhbV9zdHJlcnJvcihzc2hwYW1faGFuZGxlLCBzc2hwYW1fZXJyKSk7Ci0rCQlwd2Zy ZWUoc3NocGFtX2F1dGhjdHh0LT5wdyk7Ci0rCQlzc2hwYW1fYXV0aGN0eHQtPnB3ID0gcHdjb3B5 KHNzaHBhbV9nZXRwdyh1c2VyKSk7Ci0rCX0KLSAKLSAJLyogSW1wb3J0IGVudmlyb25tZW50IGZy b20gc3VicHJvY2VzcyAqLwotIAlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihiLCAmbnVtX2Vudikp ICE9IDApCi1AQCAtNTM2LDYgKzYwMCwxMyBAQAotIAlpZiAoKHNzaHBhbV9lcnIgPSBjaGVja19w YW1fdXNlcihzc2hwYW1fYXV0aGN0eHQpKSAhPSBQQU1fU1VDQ0VTUykKLSAJCWdvdG8gYXV0aF9m YWlsOwotIAotKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKSB7Ci0rCQlkZWJ1 Zygic3NocGFtX3RocmVhZDogdXNlciBpcyAnJS4xMDBzJyIsCi0rCQkgICAgc3NocGFtX2F1dGhj dHh0LT5wdy0+cHdfbmFtZSk7Ci0rCQlzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQoKTsKLSsJCWRl YnVnKCJzc2hwYW1fdGhyZWFkOiB1c2VyIGlzICclLjEwMHMnIiwKLSsJCSAgICBzc2hwYW1fYXV0 aGN0eHQtPnB3LT5wd19uYW1lKTsKLSsJfQotIAlpZiAoIWRvX3BhbV9hY2NvdW50KCkpIHsKLSAJ CS8qIFByZXNlcnZlIFBBTV9QRVJNX0RFTklFRCBhbmQgUEFNX1VTRVJfVU5LTk9XTi4KLSAJCSAq IEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIG90aGVyIGVycm9ycy4gKi8KLUBAIC01NjAsNiAr NjMxLDEzIEBACi0gCWlmICgociA9IHNzaGJ1Zl9wdXRfdTMyKGJ1ZmZlciwgc3NocGFtX2FjY291 bnRfc3RhdHVzKSkgIT0gMCB8fAotIAkgICAgKHIgPSBzc2hidWZfcHV0X3UzMihidWZmZXIsIHNz aHBhbV9hdXRoY3R4dC0+Zm9yY2VfcHdjaGFuZ2UpKSAhPSAwKQotIAkJZmF0YWxfZnIociwgImJ1 ZmZlciBlcnJvciIpOwotKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKSB7Ci0r CQlkZWJ1Zygic3NocGFtX3RocmVhZDogdXNlciBpcyAnJS4xMDBzJyIsCi0rCQkgICAgc3NocGFt X2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7Ci0rCQlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmco YnVmZmVyLAotKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3X25hbWUpKSAhPSAwKQotKwkJ CWZhdGFsKCIlczogYnVmZmVyIGVycm9yOiAlcyIsIF9fZnVuY19fLCBzc2hfZXJyKHIpKTsKLSsJ fQotIAotIAkvKiBFeHBvcnQgYW55IGVudmlyb25tZW50IHN0cmluZ3Mgc2V0IGluIGNoaWxkICov Ci0gCWZvciAoaSA9IDA7IGVudmlyb25baV0gIT0gTlVMTDsgaSsrKSB7Ci1AQCAtNzQ5LDYgKzgy Nyw4IEBACi0gCQkgICAgb3B0aW9ucy51c2VfZG5zKSk7Ci0gCQlzc2hwYW1fbGFkZHIgPSBnZXRf bG9jYWxfaXBhZGRyKAotIAkJICAgIHNzaF9wYWNrZXRfZ2V0X2Nvbm5lY3Rpb25faW4oc3NoKSk7 Ci0rCQkvKiBTYXZlIHNvIGFsbG93ZWRfdXNlciBjYW4gYmUgY2FsbGVkIGxhdGVyICovCi0rCQlz c2hwYW1fc3NoID0gc3NoOwotIAl9Ci0gCWlmIChzc2hwYW1fcmhvc3QgIT0gTlVMTCAmJiBzdHJj bXAoc3NocGFtX3Job3N0LCAiVU5LTk9XTiIpICE9IDApIHsKLSAJCWRlYnVnKCJQQU06IHNldHRp bmcgUEFNX1JIT1NUIHRvIFwiJXNcIiIsIHNzaHBhbV9yaG9zdCk7Ci1AQCAtMTA4Myw2ICsxMTYz LDE4IEBACi0gCWRlYnVnMygiUEFNOiAlcyBwYW1fYWNjdF9tZ210ID0gJWQgKCVzKSIsIF9fZnVu Y19fLCBzc2hwYW1fZXJyLAotIAkgICAgcGFtX3N0cmVycm9yKHNzaHBhbV9oYW5kbGUsIHNzaHBh bV9lcnIpKTsKLSAKLSsJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSkgewotKwkJ ZGVidWcoImRvX3BhbV9hY2NvdW50OiB1c2VyIGlzICclLjEwMHMnIiwKLSsJCSAgICBzc2hwYW1f YXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKLSsJCXNzaHBhbV9jaGVja191c2VyY2hhbmdlZCgpOwot KwkJZGVidWcoImRvX3BhbV9hY2NvdW50OiB1c2VyIGlzICclLjEwMHMnIiwKLSsJCSAgICBzc2hw YW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKLSsJCWlmIChnZXRwd25hbShzc2hwYW1fYXV0aGN0 eHQtPnB3LT5wd19uYW1lKSA9PSBOVUxMKQotKwkJCWZhdGFsKCJQQU06IGNvbXBsZXRlZCBhdXRo ZW50aWNhdGlvbiBidXQgUEFNIGFjY291bnQgaW52YWxpZCIpOwotKwkJZGVidWcoImRvX3BhbV9h Y2NvdW50OiB1c2VyIGlzICclLjEwMHMnIiwKLSsJCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5w d19uYW1lKTsKLSsJfQotKwotIAlpZiAoc3NocGFtX2VyciAhPSBQQU1fU1VDQ0VTUyAmJiBzc2hw YW1fZXJyICE9IFBBTV9ORVdfQVVUSFRPS19SRVFEKSB7Ci0gCQlzc2hwYW1fYWNjb3VudF9zdGF0 dXMgPSAwOwotIAkJcmV0dXJuIChzc2hwYW1fYWNjb3VudF9zdGF0dXMpOwotQEAgLTEyOTEsNiAr MTM4Myw5IEBACi0gCWV4cG9zZV9hdXRoaW5mbyhfX2Z1bmNfXyk7Ci0gCi0gCXNzaHBhbV9lcnIg PSBwYW1fYXV0aGVudGljYXRlKHNzaHBhbV9oYW5kbGUsIGZsYWdzKTsKLSsJaWYgKG9wdGlvbnMu cGVybWl0X3BhbV91c2VyX2NoYW5nZSkgewotKwkJc3NocGFtX2NoZWNrX3VzZXJjaGFuZ2VkKCk7 Ci0rCX0KLSAJc3NocGFtX3Bhc3N3b3JkID0gTlVMTDsKLSAJZnJlZShmYWtlKTsKLSAJaWYgKHNz aHBhbV9lcnIgPT0gUEFNX1NVQ0NFU1MpCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9h dXRoLXBhbS5oIG9wZW5zc2gtMTAuM3AxL2F1dGgtcGFtLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL2F1dGgtcGFtLmgJMjAyNi0wNy0wMSAwOTozODowMC4xODQwNDIzNDEgKzAyMDAKLSsrKyBv cGVuc3NoLTEwLjNwMS9hdXRoLXBhbS5oCTIwMjYtMDctMDEgMTA6NTg6MTAuMDQ5NjQ0MDIxICsw MjAwCi1AQCAtNDQsNSArNDQsNiBAQAotIHZvaWQgc3NocGFtX3NldF9tYXh0cmllc19yZWFjaGVk KGludCk7Ci0gaW50IGlzX3BhbV9zZXNzaW9uX29wZW4odm9pZCk7Ci0gaW50IHNzaHBhbV9wcml2 X2tiZGludF9hdXRoZG9uZSh2b2lkICpjdHh0cCk7Ci0rc3RydWN0IHBhc3N3ZCAqc3NocGFtX2dl dHB3KGNvbnN0IGNoYXIgKik7Ci0gCi0gI2VuZGlmIC8qIFVTRV9QQU0gKi8KLWRpZmYgLU51ciBv cGVuc3NoLTEwLjNwMS5vcmlnL2Nhbm9ob3N0LmMgb3BlbnNzaC0xMC4zcDEvY2Fub2hvc3QuYwot LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2Fub2hvc3QuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjMx ODcyNDY4MSArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2Nhbm9ob3N0LmMJMjAyNi0wNy0wMSAx MDozOTo0My41NzEyOTg2ODIgKzAyMDAKLUBAIC0xNyw2ICsxNyw3IEBACi0gI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgotICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0gI2luY2x1ZGUgPHN5cy91bi5o PgotKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gICAgICAgICAgLyogZm9yIE1BWEhPU1ROQU1FTEVO ICovCi0gCi0gI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+ Ci1AQCAtMzAwLDMgKzMwMSwzMyBAQAotIHsKLSAJcmV0dXJuIGdldF9zb2NrX3BvcnQoc29jaywg MSk7Ci0gfQotKwotK3ZvaWQKLStyZXNvbHZlX2xvY2FsaG9zdChjaGFyICoqaG9zdCkKLSt7Ci0r CXN0cnVjdCBob3N0ZW50ICpob3N0aW5mbzsKLSsKLSsJaG9zdGluZm8gPSBnZXRob3N0YnluYW1l KCpob3N0KTsKLSsJaWYgKGhvc3RpbmZvID09IE5VTEwgfHwgaG9zdGluZm8tPmhfbmFtZSA9PSBO VUxMKSB7Ci0rCQlkZWJ1ZygiZ2V0aG9zdGJ5bmFtZSglcykgZmFpbGVkIiwgKmhvc3QpOwotKwkJ cmV0dXJuOwotKwl9Ci0rCWlmIChob3N0aW5mby0+aF9hZGRydHlwZSA9PSBBRl9JTkVUKSB7Ci0r CQlzdHJ1Y3QgaW5fYWRkciBhZGRyOwotKwkJYWRkciA9ICooc3RydWN0IGluX2FkZHIgKikoaG9z dGluZm8tPmhfYWRkcik7Ci0rCQlpZiAobnRvaGwoYWRkci5zX2FkZHIpID09IElOQUREUl9MT09Q QkFDSykgewotKwkJCWNoYXIgYnVmW01BWEhPU1ROQU1FTEVOXTsKLSsJCQlpZiAoZ2V0aG9zdG5h bWUoYnVmLCBzaXplb2YoYnVmKSkgPCAwKSB7Ci0rCQkJCWRlYnVnKCJnZXRob3N0bmFtZSgpIGZh aWxlZCIpOwotKwkJCQlyZXR1cm47Ci0rCQkJfQotKwkJCWhvc3RpbmZvID0gZ2V0aG9zdGJ5bmFt ZShidWYpOwotKwkJCWZyZWUoKmhvc3QpOwotKwkJCWlmIChob3N0aW5mbyA9PSBOVUxMIHx8IGhv c3RpbmZvLT5oX25hbWUgPT0gTlVMTCkgewotKwkJCQkqaG9zdCA9IHhzdHJkdXAoYnVmKTsKLSsJ CQl9IGVsc2UgewotKwkJCQkqaG9zdCA9IHhzdHJkdXAoaG9zdGluZm8tPmhfbmFtZSk7Ci0rCQkJ fQotKwkJfQotKwl9Ci0rfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2Fub2hvc3Qu aCBvcGVuc3NoLTEwLjNwMS9jYW5vaG9zdC5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jYW5v aG9zdC5oCTIwMjYtMDctMDEgMDk6Mzg6MDAuMzE4Nzc3Mzc4ICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvY2Fub2hvc3QuaAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3MTYxOTY1NiArMDIwMAotQEAg LTI2LDQgKzI2LDYgQEAKLSAKLSAjZW5kaWYgLyogX0NBTk9IT1NUX0ggKi8KLSAKLSt2b2lkCQkg cmVzb2x2ZV9sb2NhbGhvc3QoY2hhciAqKmhvc3QpOwotKwotIHZvaWQJCSBpcHY2NF9ub3JtYWxp c2VfbWFwcGVkKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICosIHNvY2tsZW5fdCAqKTsKLWRpZmYg LU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NvbmZpZ3VyZS5hYyBvcGVuc3NoLTEwLjNwMS9jb25m aWd1cmUuYWMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDI2LTA3LTAx IDA5OjM4OjAwLjg4NTEyOTk1OSArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2NvbmZpZ3VyZS5h YwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3MjU3MDg2MSArMDIwMAotQEAgLTUxNTMsNiArNTE1Mywx NCBAQAotIAkJCQlBQ19DSEVDS19IRUFERVIoW2dzc2FwaV9rcmI1LmhdLCAsCi0gCQkJCQkJWyBD UFBGTEFHUz0iJG9sZENQUCIgXSkKLSAKLSsJCQkJIyBJZiB3ZSdyZSB1c2luZyBzb21lIG90aGVy IEdTU0FQSQotKwkJCQlpZiB0ZXN0IC1uICIkR1NTQVBJIiA7IHRoZW4KLSsJCQkJCUFDX01TR19F UlJPUihbUHJldmlvdXNseSBjb25maWd1cmVkIEdTU0FQSSBsaWJyYXJ5IGNvbmZsaWN0cyB3aXRo IEtlcmJlcm9zIEdTSS5dKQotKwkJCQlmaQotKwkKLSsJCQkJaWYgdGVzdCAteiAiJEdTU0FQSSI7 IHRoZW4KLSsJCQkJCUdTU0FQST0iS1JCNSI7Ci0rCQkJCWZpCi0gCQkJZmkKLSAJCWZpCi0gCQlp ZiB0ZXN0IC1uICIke3JwYXRoX29wdH0iIDsgdGhlbgotQEAgLTUyMDEsNiArNTIwOSw0MCBAQAot IEFDX1NVQlNUKFtLNUxJQlNdKQotIEFDX1NVQlNUKFtDSEFOTkVMTElCU10pCi0gCi0rIyBDaGVj ayB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIEdTSSAoR2xvYnVzKSBzdXBwb3J0Ci0rZ3NpPSJubyIK LStBQ19BUkdfV0lUSChnc2ksCi0rCVsgIC0td2l0aC1nc2kgICAgICAgICAgICAgIEVuYWJsZSBH bG9idXMgR1NJIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRdLAotKwlbCi0rCQlnc2k9IiR3aXRodmFs IgotKwldCi0rKQotKwotK2lmIHRlc3QgIngkZ3NpIiAhPSAieG5vIiA7IHRoZW4KLSsJIyBHbG9i dXMgR1NTQVBJIGNvbmZpZ3VyYXRpb24KLSsJQUNfTVNHX0NIRUNLSU5HKGZvciBHbG9idXMgR1NJ KQotKwlBQ19ERUZJTkUoR1NJLCAxLCBbRGVmaW5lIGlmIHlvdSB3YW50IEdTSS9HbG9idXMgYXV0 aGVudGljYXRpb24gc3VwcG9ydC5dKQotKwotKwlpZiB0ZXN0IC1uICIkR1NTQVBJIiA7IHRoZW4K LSsJCUFDX01TR19FUlJPUihbUHJldmlvdXNseSBjb25maWd1cmVkIEdTU0FQSSBsaWJyYXJ5IGNv bmZsaWN0cyB3aXRoIEdsb2J1cyBHU0kuXSkKLSsJZmkKLSsKLSsJaWYgdGVzdCAteiAiJEdTU0FQ SSIgOyB0aGVuCi0rCQlHU1NBUEk9IkdTSSIKLSsJZmkKLSsKLSsJQUNfUEFUSF9UT09MKFtQS0dD T05GSUddLCBbcGtnLWNvbmZpZ10sIFtub10pCi0rCWlmIHRlc3QgIngkUEtHQ09ORklHIiAhPSAi eG5vIjsgdGhlbgotKwkJTElCUz0iJExJQlMgYCRQS0dDT05GSUcgLS1saWJzIGdsb2J1cy1nc3Mt YXNzaXN0IGdsb2J1cy1nc3NhcGktZ3NpIGdsb2J1cy1jb21tb25gIgotKwkJQ1BQRkxBR1M9IiRD UFBGTEFHUyBgJFBLR0NPTkZJRyAtLWNmbGFncyBnbG9idXMtZ3NzLWFzc2lzdCBnbG9idXMtZ3Nz YXBpLWdzaSBnbG9idXMtY29tbW9uYCIKLSsJZmkKLSsKLSsJQUNfREVGSU5FKEdTU0FQSSkKLSsJ QUNfREVGSU5FKEhBVkVfR1NTQVBJX0gpCi0rCi0rCUFDX0NIRUNLX0ZVTkNTKGdsb2J1c19nc3Nf YXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKQotK2ZpCi0rCi0gIyBMb29raW5nIGZvciBwcm9ncmFt cywgcGF0aHMgYW5kIGZpbGVzCi0gCi0gUFJJVlNFUF9QQVRIPS92YXIvZW1wdHkKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2dzcy1nZW5yLmMgb3BlbnNzaC0xMC4zcDEvZ3NzLWdlbnIu YwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLWdlbnIuYwkyMDI2LTA3LTAxIDA5OjM4OjAw LjkxMjgzMTUwNyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2dzcy1nZW5yLmMJMjAyNi0wNy0w MSAxMDozOTo0My41NzMzNDY4ODQgKzAyMDAKLUBAIC00MSw2ICs0MSw3IEBACi0gI2luY2x1ZGUg InNzaGVyci5oIgotICNpbmNsdWRlICJzc2hidWYuaCIKLSAjaW5jbHVkZSAibG9nLmgiCi0rI2lu Y2x1ZGUgImNhbm9ob3N0LmgiCi0gI2luY2x1ZGUgInNzaDIuaCIKLSAjaW5jbHVkZSAiY2lwaGVy LmgiCi0gI2luY2x1ZGUgInNzaGtleS5oIgotQEAgLTQyNiw5ICs0MjcsMTggQEAKLSBzc2hfZ3Nz YXBpX2ltcG9ydF9uYW1lKEdzc2N0eHQgKmN0eCwgY29uc3QgY2hhciAqaG9zdCkKLSB7Ci0gCWdz c19idWZmZXJfZGVzYyBnc3NidWY7Ci0rCWNoYXIgKnhob3N0OwotIAljaGFyICp2YWw7Ci0gCi0t CXhhc3ByaW50ZigmdmFsLCAiaG9zdEAlcyIsIGhvc3QpOwotKwkvKiBNYWtlIGEgY29weSBvZiB0 aGUgaG9zdCBuYW1lLCBpbiBjYXNlIGl0IHdhcyByZXR1cm5lZCBieSBhCi0rCSAqIHByZXZpb3Vz IGNhbGwgdG8gZ2V0aG9zdGJ5bmFtZSgpLiAqLwotKwl4aG9zdCA9IHhzdHJkdXAoaG9zdCk7Ci0r Ci0rCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBGUUROLiBTb21lIEdTU0FQSSBpbXBsZW1lbnRh dGlvbnMgZG9uJ3QgZG8KLSsJICogdGhpcyBmb3IgdXMgdGhlbXNlbHZlcyAqLwotKwlyZXNvbHZl X2xvY2FsaG9zdCgmeGhvc3QpOwotKwotKwl4YXNwcmludGYoJnZhbCwgImhvc3RAJXMiLCB4aG9z dCk7Ci0gCWdzc2J1Zi52YWx1ZSA9IHZhbDsKLSAJZ3NzYnVmLmxlbmd0aCA9IHN0cmxlbihnc3Ni dWYudmFsdWUpOwotIAotQEAgLTQzNiw2ICs0NDYsNyBAQAotIAkgICAgJmdzc2J1ZiwgR1NTX0Nf TlRfSE9TVEJBU0VEX1NFUlZJQ0UsICZjdHgtPm5hbWUpKSkKLSAJCXNzaF9nc3NhcGlfZXJyb3Io Y3R4KTsKLSAKLSsJZnJlZSh4aG9zdCk7Ci0gCWZyZWUoZ3NzYnVmLnZhbHVlKTsKLSAJcmV0dXJu IChjdHgtPm1ham9yKTsKLSB9Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9nc3Mtc2Vy di5jIG9wZW5zc2gtMTAuM3AxL2dzcy1zZXJ2LmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2dz cy1zZXJ2LmMJMjAyNi0wNy0wMSAwOTozODowMC44NjgyMTQ3ODIgKzAyMDAKLSsrKyBvcGVuc3No LTEwLjNwMS9nc3Mtc2Vydi5jCTIwMjYtMDctMDEgMTQ6MDU6MzkuMDQ1NjQwMDU5ICswMjAwCi1A QCAtNTIsMTAgKzUyLDEyIEBACi0gI2luY2x1ZGUgIm1vbml0b3Jfd3JhcC5oIgotIAotIGV4dGVy biBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0rZXh0ZXJuIEF1dGhjdHh0ICp0aGVfYXV0aGN0eHQ7 Ci0gCi0gc3RhdGljIHNzaF9nc3NhcGlfY2xpZW50IGdzc2FwaV9jbGllbnQgPQotLSAgICB7IEdT U19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFM LAotLSAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TH0sIDAsIDAsIE5VTEwsIDB9OwotKyAgICB7IHswLCBOVUxMfSwgR1NTX0NfRU1QVFlfQlVGRkVS LCBHU1NfQ19FTVBUWV9CVUZGRVIsIEdTU19DX05PX0NSRURFTlRJQUwsCi0rICAgICAgR1NTX0Nf Tk9fTkFNRSwgR1NTX0NfTk9fTkFNRSwgTlVMTCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEx9LAotKyAgICAgIEdTU19DX05PX0NPTlRFWFQsIDAsIDAsIE5VTEwsIDB9OwotIAotIHNzaF9n c3NhcGlfbWVjaCBnc3NhcGlfbnVsbF9tZWNoID0KLSAgICAgeyBOVUxMLCBOVUxMLCB7MCwgTlVM TH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OwotQEAgLTYzLDE0ICs2NSwyNiBAQAot ICNpZmRlZiBLUkI1Ci0gZXh0ZXJuIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfa2VyYmVyb3NfbWVj aDsKLSAjZW5kaWYKLSsjaWZkZWYgR1NJCi0rZXh0ZXJuIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlf Z3NpX21lY2g7Ci0rZXh0ZXJuIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfZ3NpX21lY2hfbWljdjI7 Ci0rI2VuZGlmCi0gCi0gc3NoX2dzc2FwaV9tZWNoKiBzdXBwb3J0ZWRfbWVjaHNbXT0gewotICNp ZmRlZiBLUkI1Ci0gCSZnc3NhcGlfa2VyYmVyb3NfbWVjaCwKLSAjZW5kaWYKLSsjaWZkZWYgR1NJ Ci0rCSZnc3NhcGlfZ3NpX21lY2hfbWljdjIsCi0rCSZnc3NhcGlfZ3NpX21lY2gsCi0rI2VuZGlm Ci0gCSZnc3NhcGlfbnVsbF9tZWNoLAotIH07Ci0gCi0rI2lmZGVmIEdTU19DX0dMT0JVU19MSU1J VEVEX1BST1hZX0ZMQUcKLStzdGF0aWMgaW50IGxpbWl0ZWQgPSAwOwotKyNlbmRpZgotKwotIC8q Ci0gICogc3NoX2dzc2FwaV9zdXBwb3J0ZWRfb2lkcygpIGNhbiBjYXVzZSBzYW5kYm94IHZpb2xh dGlvbnMsIHNvIHByZXBhcmUgdGhlCi0gICogbGlzdCBvZiBzdXBwb3J0ZWQgbWVjaGFuaXNtcyBi ZWZvcmUgcHJpdnNlcCBpcyBzZXQgdXAuCi1AQCAtMjMxLDYgKzI0NSwxMCBAQAotIAkgICAgKCpm bGFncyAmIEdTU19DX0lOVEVHX0ZMQUcpKSkgJiYgKGN0eC0+bWFqb3IgPT0gR1NTX1NfQ09NUExF VEUpKSB7Ci0gCQlpZiAoc3NoX2dzc2FwaV9nZXRjbGllbnQoY3R4LCAmZ3NzYXBpX2NsaWVudCkp Ci0gCQkJZmF0YWwoIkNvdWxkbid0IGNvbnZlcnQgY2xpZW50IG5hbWUiKTsKLSsjaWZkZWYgR1NT X0NfR0xPQlVTX0xJTUlURURfUFJPWFlfRkxBRwotKwkJaWYgKGZsYWdzICYmICgqZmxhZ3MgJiBH U1NfQ19HTE9CVVNfTElNSVRFRF9QUk9YWV9GTEFHKSkKLSsJCQlsaW1pdGVkPTE7Ci0rI2VuZGlm Ci0gCX0KLSAKLSAJcmV0dXJuIChzdGF0dXMpOwotQEAgLTI1MCw2ICsyNjgsMjAgQEAKLSAKLSAJ dG9rID0gZW5hbWUtPnZhbHVlOwotIAotKyNpZmRlZiBHU0kgLyogR1NJIGdzc19leHBvcnRfbmFt ZSgpIGlzIGJyb2tlbi4gKi8KLSsJaWYgKCgoY3R4LT5vaWQtPmxlbmd0aCA9PSBnc3NhcGlfZ3Np X21lY2gub2lkLmxlbmd0aCkgJiYKLSsJICAgICAobWVtY21wKGN0eC0+b2lkLT5lbGVtZW50cywg Z3NzYXBpX2dzaV9tZWNoLm9pZC5lbGVtZW50cywKLSsJCSAgICAgZ3NzYXBpX2dzaV9tZWNoLm9p ZC5sZW5ndGgpID09IDApKSB8fAotKwkgICAgKChjdHgtPm9pZC0+bGVuZ3RoID09IGdzc2FwaV9n c2lfbWVjaF9taWN2Mi5vaWQubGVuZ3RoKSAmJgotKwkgICAgIChtZW1jbXAoY3R4LT5vaWQtPmVs ZW1lbnRzLCBnc3NhcGlfZ3NpX21lY2hfbWljdjIub2lkLmVsZW1lbnRzLAotKwkJICAgICBnc3Nh cGlfZ3NpX21lY2hfbWljdjIub2lkLmxlbmd0aCkgPT0gMCkpKSB7Ci0rCQluYW1lLT5sZW5ndGgg PSBlbmFtZS0+bGVuZ3RoOwotKwkJbmFtZS0+dmFsdWUgPSB4bWFsbG9jKGVuYW1lLT5sZW5ndGgr MSk7Ci0rCQltZW1jcHkobmFtZS0+dmFsdWUsIGVuYW1lLT52YWx1ZSwgZW5hbWUtPmxlbmd0aCk7 Ci0rCQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7Ci0rCX0KLSsjZW5kaWYKLSsKLSAJLyoKLSAJICog Q2hlY2sgdGhhdCBlbmFtZSBpcyBsb25nIGVub3VnaCBmb3IgYWxsIG9mIHRoZSBmaXhlZCBsZW5n dGgKLSAJICogaGVhZGVyLCBhbmQgdGhhdCB0aGUgaW5pdGlhbCBJRCBieXRlcyBhcmUgY29ycmVj dAotQEAgLTI5OCw2ICszMzAsNyBAQAotIH0KLSAKLSAKLSsjaWZkZWYgS1JCNQotIC8qIEV4dHJh Y3QgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBmcm9tIHRoZSBLZXJiZXJvcyB0aWNrZXQuIEF1 dGhlbnRpY2F0aW9uCi0gICogaW5kaWNhdG9ycyBhcmUgR1NTQVBJIG5hbWUgYXR0cmlidXRlcyBm b3IgdGhlIG5hbWUgImF1dGgtaW5kaWNhdG9ycyIuCi0gICogTXVsdGlwbGUgaW5kaWNhdG9ycyBt aWdodCBiZSBwcmVzZW50IGluIHRoZSB0aWNrZXQuCi1AQCAtMzg1LDYgKzQxOCw3IEBACi0gCWdz c19yZWxlYXNlX2J1ZmZlcl9zZXQoJmN0eC0+bWlub3IsICZhdHRycyk7Ci0gCXJldHVybiBjdHgt Pm1ham9yOwotIH0KLSsjZW5kaWYKLSAKLSAvKiBFeHRyYWN0IHRoZSBjbGllbnQgZGV0YWlscyBm cm9tIGEgZ2l2ZW4gY29udGV4dC4gVGhpcyBjYW4gb25seSByZWxpYWJseQotICAqIGJlIGNhbGxl ZCBvbmNlIGZvciBhIGNvbnRleHQgKi8KLUBAIC0zOTksMjEgKzQzMywyNCBAQAotIAlnc3NfYnVm ZmVyX2Rlc2MgZW5hbWUgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0gCi0gCWlmIChvcHRpb25zLmdz c19zdG9yZV9yZWtleSAmJiBjbGllbnQtPnVzZWQgJiYgY3R4LT5jbGllbnRfY3JlZHMpIHsKLS0J CWlmIChjbGllbnQtPm1lY2gtPm9pZC5sZW5ndGggIT0gY3R4LT5vaWQtPmxlbmd0aCB8fAotLQkJ ICAgIChtZW1jbXAoY2xpZW50LT5tZWNoLT5vaWQuZWxlbWVudHMsCi0rCQlpZiAoY2xpZW50LT5v aWQubGVuZ3RoICE9IGN0eC0+b2lkLT5sZW5ndGggfHwKLSsJCSAgICAobWVtY21wKGNsaWVudC0+ b2lkLmVsZW1lbnRzLAotIAkJICAgICBjdHgtPm9pZC0+ZWxlbWVudHMsIGN0eC0+b2lkLT5sZW5n dGgpICE9MCkpIHsKLSAJCQlkZWJ1ZygiUmVrZXllZCBjcmVkZW50aWFscyBoYXZlIGRpZmZlcmVu dCBtZWNoYW5pc20iKTsKLSAJCQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7Ci0gCQl9Ci0gCi0tCQlp ZiAoKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVkX2J5X21lY2goJmN0eC0+bWlub3IsCi0t CQkgICAgY3R4LT5jbGllbnRfY3JlZHMsIGN0eC0+b2lkLCAmbmV3X25hbWUsCi0rCQkvKiBDYWxs IGdzc19pbnF1aXJlX2NyZWQgcmF0aGVyIHRoYW4gZ3NzX2lucXVpcmVfY3JlZF9ieV9tZWNoCi0r CQkgICBiZWNhdXNlIEdTSSBkb2Vzbid0IHN1cHBvcnQgdGhlIGxhdHRlci4gLWpiYXNuZXkgKi8K LSsKLSsJCWlmICgoY3R4LT5tYWpvciA9IGdzc19pbnF1aXJlX2NyZWQoJmN0eC0+bWlub3IsCi0r CQkgICAgY3R4LT5jbGllbnRfY3JlZHMsICZuZXdfbmFtZSwKLSAJCSAgICBOVUxMLCBOVUxMLCBO VUxMKSkpIHsKLSAJCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0gCQkJcmV0dXJuIChjdHgtPm1h am9yKTsKLSAJCX0KLSAKLS0JCWN0eC0+bWFqb3IgPSBnc3NfY29tcGFyZV9uYW1lKCZjdHgtPm1p bm9yLCBjbGllbnQtPm5hbWUsCi0rCQljdHgtPm1ham9yID0gZ3NzX2NvbXBhcmVfbmFtZSgmY3R4 LT5taW5vciwgY2xpZW50LT5jcmVkX25hbWUsCi0gCQkgICAgbmV3X25hbWUsICZlcXVhbCk7Ci0g Ci0gCQlpZiAoR1NTX0VSUk9SKGN0eC0+bWFqb3IpKSB7Ci1AQCAtNDI4LDkgKzQ2NSw5IEBACi0g Ci0gCQlkZWJ1ZygiTWFya2luZyByZWtleWVkIGNyZWRlbnRpYWxzIGZvciBleHBvcnQiKTsKLSAK LS0JCWdzc19yZWxlYXNlX25hbWUoJmN0eC0+bWlub3IsICZjbGllbnQtPm5hbWUpOwotKwkJZ3Nz X3JlbGVhc2VfbmFtZSgmY3R4LT5taW5vciwgJmNsaWVudC0+Y3JlZF9uYW1lKTsKLSAJCWdzc19y ZWxlYXNlX2NyZWQoJmN0eC0+bWlub3IsICZjbGllbnQtPmNyZWRzKTsKLS0JCWNsaWVudC0+bmFt ZSA9IG5ld19uYW1lOwotKwkJY2xpZW50LT5jcmVkX25hbWUgPSBuZXdfbmFtZTsKLSAJCWNsaWVu dC0+Y3JlZHMgPSBjdHgtPmNsaWVudF9jcmVkczsKLSAJCWN0eC0+Y2xpZW50X2NyZWRzID0gR1NT X0NfTk9fQ1JFREVOVElBTDsKLSAJCWNsaWVudC0+dXBkYXRlZCA9IDE7Ci1AQCAtNDQ3LDEyICs0 ODQsMTcgQEAKLSAJCWkrKzsKLSAJfQotIAotKwlpZiAoY2xpZW50LT5vaWQuZWxlbWVudHMgPT0g TlVMTCkKLSsJCWNsaWVudC0+b2lkID0gKmN0eC0+b2lkOwotIAlpZiAoY2xpZW50LT5tZWNoID09 IE5VTEwpCi0gCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKLSAKLSsJLyogQ2FsbCBnc3NfaW5xdWly ZV9jcmVkIHJhdGhlciB0aGFuIGdzc19pbnF1aXJlX2NyZWRfYnlfbWVjaAotKwkgICBiZWNhdXNl IEdTSSBkb2Vzbid0IHN1cHBvcnQgdGhlIGxhdHRlci4gLWpiYXNuZXkgKi8KLSsKLSAJaWYgKGN0 eC0+Y2xpZW50X2NyZWRzICYmCi0tCSAgICAoY3R4LT5tYWpvciA9IGdzc19pbnF1aXJlX2NyZWRf YnlfbWVjaCgmY3R4LT5taW5vciwKLS0JICAgICBjdHgtPmNsaWVudF9jcmVkcywgY3R4LT5vaWQs ICZjbGllbnQtPm5hbWUsIE5VTEwsIE5VTEwsIE5VTEwpKSkgewotKwkgICAgKGN0eC0+bWFqb3Ig PSBnc3NfaW5xdWlyZV9jcmVkKCZjdHgtPm1pbm9yLAotKwkgICAgIGN0eC0+Y2xpZW50X2NyZWRz LCAmY2xpZW50LT5jcmVkX25hbWUsIE5VTEwsIE5VTEwsIE5VTEwpKSkgewotIAkJc3NoX2dzc2Fw aV9lcnJvcihjdHgpOwotIAkJcmV0dXJuIChjdHgtPm1ham9yKTsKLSAJfQotQEAgLTQ2OSwyNSAr NTExLDM3IEBACi0gCQlyZXR1cm4gKGN0eC0+bWFqb3IpOwotIAl9Ci0gCi0tCWlmICgoY3R4LT5t YWpvciA9IHNzaF9nc3NhcGlfcGFyc2VfZW5hbWUoY3R4LCZlbmFtZSwKLSsJaWYgKChjbGllbnQt Pm1lY2gtPm9pZC5lbGVtZW50cyAhPSBOVUxMKSAmJgotKwkgICAgKGN0eC0+bWFqb3IgPSBzc2hf Z3NzYXBpX3BhcnNlX2VuYW1lKGN0eCwmZW5hbWUsCi0gCSAgICAmY2xpZW50LT5leHBvcnRlZG5h bWUpKSkgewotIAkJcmV0dXJuIChjdHgtPm1ham9yKTsKLSAJfQotIAotKwlpZiAoKGN0eC0+bWFq b3IgPSBnc3NfZHVwbGljYXRlX25hbWUoJmN0eC0+bWlub3IsIGN0eC0+Y2xpZW50LAotKwkgICAg JmNsaWVudC0+Y3R4X25hbWUpKSkKLSsJCXJldHVybiBjdHgtPm1ham9yOwotKwotIAlnc3NfcmVs ZWFzZV9idWZmZXIoJmN0eC0+bWlub3IsICZlbmFtZSk7Ci0rI2lmZGVmIEtSQjUKLSAJLyogUmV0 cmlldmUgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycywgaWYgdGhleSBleGlzdCAqLwotIAlpZiAo KGN0eC0+bWFqb3IgPSBzc2hfZ3NzYXBpX2dldGluZGljYXRvcnMoY3R4LAotIAkgICAgY3R4LT5j bGllbnQsIGNsaWVudCkpKSB7Ci0gCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0gCQlyZXR1cm4g KGN0eC0+bWFqb3IpOwotIAl9Ci0rI2VuZGlmCi0gCi0gCS8qIFdlIGNhbid0IGNvcHkgdGhpcyBz dHJ1Y3R1cmUsIHNvIHdlIGp1c3QgbW92ZSB0aGUgcG9pbnRlciB0byBpdCAqLwotIAljbGllbnQt PmNyZWRzID0gY3R4LT5jbGllbnRfY3JlZHM7Ci0gCWN0eC0+Y2xpZW50X2NyZWRzID0gR1NTX0Nf Tk9fQ1JFREVOVElBTDsKLSsKLSsJLyogbmVlZGVkIGZvciBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBf YW5kX2F1dGhvcml6ZSgpICovCi0rCWNsaWVudC0+Y29udGV4dCA9IGN0eC0+Y29udGV4dDsKLSsK LSAJcmV0dXJuIChjdHgtPm1ham9yKTsKLSB9Ci0gCi0rI2lmZGVmIEtSQjUKLSAvKiBSZXR1cm5z IG5vbi16ZXJvIGlmIEtlcmJlcm9zIGNyZWRlbnRpYWxzIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3Jl ZC4gKi8KLSBpbnQKLSBzc2hfZ3NzYXBpX2NyZWRlbnRpYWxzX3N0b3JlZCh2b2lkKQotQEAgLTg0 NywxMiArOTAxLDE5IEBACi0gCi0gCXVuc2V0ZW52KCJLUkI1Q0NOQU1FIik7Ci0gfQotKyNlbmRp ZgotIAotICNpZm5kZWYgS1JCNQotIC8qIEFzIHVzZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhpdDsg ZnVsbCBpbXBsZW1lbnRhdGlvbiBpbiBnc3Mtc2Vydi1rcmI1LmMgKi8KLSB2b2lkCi0gc3NoX2dz c2FwaV9jbGVhbnVwX2NyZWRzKHZvaWQpCi0gewotKwlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5m aWxlbmFtZSAhPSBOVUxMKSB7Ci0rCQkvKiBVbmxpbmsgcHJvYmFibHkgaXNuJ3Qgc3VmZmljaWVu dCAqLwotKwkJZGVidWcoInJlbW92aW5nIGdzc2FwaSBjcmVkIGZpbGVcIiVzXCIiLAotKwkJICAg IGdzc2FwaV9jbGllbnQuc3RvcmUuZmlsZW5hbWUpOwotKwkJdW5saW5rKGdzc2FwaV9jbGllbnQu c3RvcmUuZmlsZW5hbWUpOwotKwl9Ci0gfQotIAotIC8qCi1AQCAtODc1LDYgKzkzNiwxMSBAQAot IAl9Ci0gCi0gCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNoLT5z dG9yZWNyZWRzKSB7Ci0rCQlpZiAob3B0aW9ucy5nc3NfY3JlZHNfcGF0aCkgewotKwkJCWdzc2Fw aV9jbGllbnQuc3RvcmUuZmlsZW5hbWUgPQotKwkJCSAgICBleHBhbmRfYXV0aG9yaXplZF9rZXlz KG9wdGlvbnMuZ3NzX2NyZWRzX3BhdGgsCi0rCQkJICAgIHRoZV9hdXRoY3R4dC0+cHcpOwotKwkJ fQotIAkJcmV0dXJuICgqZ3NzYXBpX2NsaWVudC5tZWNoLT5zdG9yZWNyZWRzKSgmZ3NzYXBpX2Ns aWVudCk7Ci0gCX0gZWxzZQotIAkJZGVidWcoInNzaF9nc3NhcGlfc3RvcmVjcmVkczogTm90IGEg R1NTQVBJIG1lY2hhbmlzbSIpOwotQEAgLTkwOCwxMSArOTc0LDEzIEBACi0gCi0gCSh2b2lkKSBr ZXg7IC8qIHVzZWQgaW4gcHJpdmlsZWdlIHNlcGFyYXRpb24gKi8KLSAKLS0JaWYgKGdzc2FwaV9j bGllbnQuZXhwb3J0ZWRuYW1lLmxlbmd0aCA9PSAwIHx8Ci0tCSAgICBnc3NhcGlfY2xpZW50LmV4 cG9ydGVkbmFtZS52YWx1ZSA9PSBOVUxMKSB7Ci0tCQlkZWJ1ZygiTm8gc3VpdGFibGUgY2xpZW50 IGRhdGEiKTsKLSsjaWZkZWYgR1NTX0NfR0xPQlVTX0xJTUlURURfUFJPWFlfRkxBRwotKwlpZiAo bGltaXRlZCAmJiBvcHRpb25zLmdzaV9hbGxvd19saW1pdGVkX3Byb3h5ICE9IDEpIHsKLSsJCWRl YnVnKCJsaW1pdGVkIHByb3h5IG5vdCBhY2NlcHRhYmxlIGZvciByZW1vdGUgbG9naW4iKTsKLSAJ CXJldHVybiAwOwotIAl9Ci0rI2VuZGlmCi0rCi0gCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYg Z3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2spCi0gCQlpZiAoKCpnc3NhcGlfY2xpZW50Lm1lY2gt PnVzZXJvaykoJmdzc2FwaV9jbGllbnQsIHVzZXIpKSB7Ci0gCQkJZ3NzYXBpX2NsaWVudC51c2Vk ID0gMTsKLUBAIC05MjMsNiArOTkxLDcgQEAKLSAJCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxtaW4s ICZnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1lKTsKLSAJCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxt aW4sICZnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZSk7Ci0gCQkJZ3NzX3JlbGVhc2VfY3JlZCgm bG1pbiwgJmdzc2FwaV9jbGllbnQuY3JlZHMpOwotKwkJCWdzc19yZWxlYXNlX25hbWUoJmxtaW4s ICZnc3NhcGlfY2xpZW50LmN0eF9uYW1lKTsKLSAKLSAJCQlpZiAoZ3NzYXBpX2NsaWVudC5pbmRp Y2F0b3JzICE9IE5VTEwpIHsKLSAJCQkJZm9yIChpID0gMDsgZ3NzYXBpX2NsaWVudC5pbmRpY2F0 b3JzW2ldICE9IE5VTEw7IGkrKykKLUBAIC05MzgsNiArMTAwNywyNCBAQAotIAlyZXR1cm4gKDAp OwotIH0KLSAKLSsvKiBQcml2aWxlZGdlZCAqLwotK2ludAotK3NzaF9nc3NhcGlfbG9jYWxuYW1l KGNoYXIgKip1c2VyKQotK3sKLSsJKnVzZXIgPSBOVUxMOwotKwlpZiAoZ3NzYXBpX2NsaWVudC5k aXNwbGF5bmFtZS5sZW5ndGggPT0gMCB8fAotKwkgICAgZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFt ZS52YWx1ZSA9PSBOVUxMKSB7Ci0rCQlkZWJ1ZygiTm8gc3VpdGFibGUgY2xpZW50IGRhdGEiKTsK LSsJCXJldHVybiAoMCk7Ci0rCX0KLSsJaWYgKGdzc2FwaV9jbGllbnQubWVjaCAmJiBnc3NhcGlf Y2xpZW50Lm1lY2gtPmxvY2FsbmFtZSkgewotKwkJcmV0dXJuKCgqZ3NzYXBpX2NsaWVudC5tZWNo LT5sb2NhbG5hbWUpKCZnc3NhcGlfY2xpZW50LHVzZXIpKTsKLSsJfSBlbHNlIHsKLSsJCWRlYnVn KCJVbmtub3duIGNsaWVudCBhdXRoZW50aWNhdGlvbiB0eXBlIik7Ci0rCX0KLSsJcmV0dXJuICgw KTsKLSt9Ci0rCi0gLyogVGhlc2UgYml0cyBhcmUgb25seSB1c2VkIGZvciByZWtleWluZy4gVGhl IHVucHJpdmlsZWRnZWQgY2hpbGQgaXMgcnVubmluZwotICAqIGFzIHRoZSB1c2VyLCB0aGUgbW9u aXRvciBpcyByb290LgotICAqCi1AQCAtOTY0LDkgKzEwNTEsMTEgQEAKLSAJcGFtX2hhbmRsZV90 ICpwYW1oID0gTlVMTDsKLSAJc3RydWN0IHBhbV9jb252IHBhbWNvbnYgPSB7c3NoX2dzc2FwaV9z aW1wbGVfY29udiwgTlVMTH07Ci0gCWNoYXIgKmVudnN0cjsKLSsJY2hhciAqKnA7IGNoYXIgKipw dzsKLSAjZW5kaWYKLSAKLS0JaWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZW52dmFsID09IE5VTEwp Ci0rCWlmIChnc3NhcGlfY2xpZW50LnN0b3JlLmZpbGVuYW1lID09IE5VTEwgJiYKLSsJICAgIGdz c2FwaV9jbGllbnQuc3RvcmUuZW52dmFsID09IE5VTEwpCi0gCQlyZXR1cm47Ci0gCi0gCW9rID0g bW1fc3NoX2dzc2FwaV91cGRhdGVfY3JlZHMoJmdzc2FwaV9jbGllbnQuc3RvcmUpOwotQEAgLTk4 Niw2ICsxMDc1LDE4IEBACi0gCWlmIChyZXQpCi0gCQlyZXR1cm47Ci0gCi0rCS8qIFB1dCBzc2gg cGFtIHN0YWNrIGVudiB2YXJpYWJsZXMgaW4gdGhpcyBuZXcgcGFtIHN0YWNrIGVudgotKwkgKiBV c2luZyBwYW0tcGtpbml0LCBLUkI1Q0NOQU1FIGlzIHNldCBkdXJpbmcgZG9fcGFtX3Nlc3Npb24K LSsJICogdGhpcyBhZGRpdGlvbiBlbmFibGVzIHBhbS1wa2luaXQgdG8gYWNjZXNzIEtSQjVDQ05B TUUgaWYgdXNlZAotKwkgKiBpbiBzc2hkLXJla2V5IHN0YWNrIHRvbwotKwkgKi8KLSsJcHcgPSBw ID0gZmV0Y2hfcGFtX2Vudmlyb25tZW50KCk7Ci0rCXdoaWxlICggKnB3ICE9IE5VTEwgKSB7Ci0r CQlwYW1fcHV0ZW52KHBhbWgsICpwdyk7Ci0rCQlwdysrOwotKwl9Ci0rCWZyZWVfcGFtX2Vudmly b25tZW50KHApOwotKwotIAl4YXNwcmludGYoJmVudnN0ciwgIiVzPSVzIiwgZ3NzYXBpX2NsaWVu dC5zdG9yZS5lbnZ2YXIsCi0gCSAgICBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCk7Ci0gCi1k aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9nc3Mtc2Vydi1nc2kuYyBvcGVuc3NoLTEwLjNw MS9nc3Mtc2Vydi1nc2kuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLXNlcnYtZ3NpLmMJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9n c3Mtc2Vydi1nc2kuYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3NDQ0ODU3OCArMDIwMAotQEAgLTAs MCArMSwzMjggQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIFNpbW9uIFdpbGtp bnNvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgQVMgSVMnJyBBTkQgQU5ZIEVY UFJFU1MgT1IKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0rICogT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSsgKiBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsCi0rICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotKyAqIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWQotKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSsgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSsgKiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqLwotKwotKyNpbmNsdWRlICJpbmNsdWRlcy5oIgotKwotKyNpZmRlZiBHU1NBUEkK LSsjaWZkZWYgR1NJCi0rCi0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKwotKyNpbmNsdWRlIDxz dGRhcmcuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgInhtYWxsb2MuaCIK LSsjaW5jbHVkZSAiaG9zdGZpbGUuaCIKLSsjaW5jbHVkZSAiYXV0aC5oIgotKyNpbmNsdWRlICJs b2cuaCIKLSsjaW5jbHVkZSAibWlzYy5oIgotKyNpbmNsdWRlICJzZXJ2Y29uZi5oIgotKyNpbmNs dWRlICJzc2gtZ3NzLmgiCi0rCi0rZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsKLSsKLSsj aW5jbHVkZSA8Z2xvYnVzX2dzc19hc3Npc3QuaD4KLSsKLStzdGF0aWMgaW50IHNzaF9nc3NhcGlf Z3NpX3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICpuYW1lKTsKLStzdGF0 aWMgaW50IHNzaF9nc3NhcGlfZ3NpX2xvY2FsbmFtZShzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50 LCBjaGFyICoqdXNlcik7Ci0rc3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzKHNz aF9nc3NhcGlfY2xpZW50ICpjbGllbnQpOwotK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfc3Rv cmVjcmVkc19taWN2Mihzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KTsKLStzdGF0aWMgaW50IHNz aF9nc3NhcGlfZ3NpX3VwZGF0ZWNyZWRzKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSwKLSsgICAg c3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCk7Ci0rc3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV91 cGRhdGVjcmVkc19taWN2Mihzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsCi0rICAgIHNzaF9nc3Nh cGlfY2xpZW50ICpjbGllbnQpOwotKwotK3NzaF9nc3NhcGlfbWVjaCBnc3NhcGlfZ3NpX21lY2gg PSB7Ci0rCSJkWnVJZWJNamdVcWF4dmJGN2hEYkF3PT0iLAotKwkiR1NJIiwKLSsJezksICJceDJC XHgwNlx4MDFceDA0XHgwMVx4OUJceDUwXHgwMVx4MDEifSwKLSsJTlVMTCwKLSsJJnNzaF9nc3Nh cGlfZ3NpX3VzZXJvaywKLSsJJnNzaF9nc3NhcGlfZ3NpX2xvY2FsbmFtZSwKLSsJJnNzaF9nc3Nh cGlfZ3NpX3N0b3JlY3JlZHMsCi0rCSZzc2hfZ3NzYXBpX2dzaV91cGRhdGVjcmVkcwotK307Ci0r Ci0rc3NoX2dzc2FwaV9tZWNoIGdzc2FwaV9nc2lfbWVjaF9taWN2MiA9IHsKLSsJInZ6OEoxRTlQ ekxyOGIxSyswcmVtVGc9PSIsCi0rCSJHU0kiLAotKwl7MTAsICJceDJiXHgwNlx4MDFceDA0XHgw MVx4OWJceDUwXHgwMVx4MDFceDAxIn0sCi0rCU5VTEwsCi0rCSZzc2hfZ3NzYXBpX2dzaV91c2Vy b2ssCi0rCSZzc2hfZ3NzYXBpX2dzaV9sb2NhbG5hbWUsCi0rCSZzc2hfZ3NzYXBpX2dzaV9zdG9y ZWNyZWRzX21pY3YyLAotKwkmc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHNfbWljdjIKLSt9Owot KwotKy8qCi0rICogQ2hlY2sgaWYgdGhpcyB1c2VyIGlzIE9LIHRvIGxvZ2luIHVuZGVyIEdTSS4g VXNlciBoYXMgYmVlbiBhdXRoZW50aWNhdGVkCi0rICogYXMgaWRlbnRpdHkgaW4gZ2xvYmFsICdj bGllbnRfbmFtZS52YWx1ZScgYW5kIGlzIHRyeWluZyB0byBsb2cgaW4gYXMgcGFzc2VkCi0rICog dXNlcm5hbWUgaW4gJ25hbWUnLgotKyAqCi0rICogUmV0dXJucyBub24temVybyBpZiB1c2VyIGlz IGF1dGhvcml6ZWQsIDAgb3RoZXJ3aXNlLgotKyAqLwotK3N0YXRpYyBpbnQKLStzc2hfZ3NzYXBp X2dzaV91c2Vyb2soc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSkKLSt7Ci0r ICAgIGludCBhdXRob3JpemVkID0gMDsKLSsgICAgZ2xvYnVzX3Jlc3VsdF90IHJlczsKLSsjaWZk ZWYgSEFWRV9HTE9CVVNfR1NTX0FTU0lTVF9NQVBfQU5EX0FVVEhPUklaRQotKyAgICBjaGFyIGxu YW1lWzI1Nl0gPSAiIjsKLSsjZW5kaWYKLSsKLSsjaWZkZWYgR0xPQlVTX0dTSV9HU1NfQVNTSVNU X01PRFVMRQotKyAgICBpZiAoZ2xvYnVzX21vZHVsZV9hY3RpdmF0ZShHTE9CVVNfR1NJX0dTU19B U1NJU1RfTU9EVUxFKSAhPSAwKSB7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRp ZgotKwotKy8qIHVzZSBuZXcgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoKSBp bnRlcmZhY2UgaWYgYXZhaWxhYmxlICovCi0rI2lmZGVmIEhBVkVfR0xPQlVTX0dTU19BU1NJU1Rf TUFQX0FORF9BVVRIT1JJWkUKLSsgICAgZGVidWcoImNhbGxpbmcgZ2xvYnVzX2dzc19hc3Npc3Rf bWFwX2FuZF9hdXRob3JpemUoKSIpOwotKyAgICBpZiAoR0xPQlVTX1NVQ0NFU1MgIT0KLSsgICAg ICAgIChyZXMgPSBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZShjbGllbnQtPmNv bnRleHQsICJzc2giLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5hbWUsIGxuYW1lLCAyNTYpKSkgewotKyAgICAgICAgZGVidWcoIiVzIiwgZ2xv YnVzX2Vycm9yX3ByaW50X2NoYWluKGdsb2J1c19lcnJvcl9nZXQocmVzKSkpOwotKyAgICB9IGVs c2UgaWYgKGxuYW1lWzBdICYmIHN0cmNtcChuYW1lLCBsbmFtZSkgIT0gMCkgewotKyAgICAgICAg ZGVidWcoIkdTSSB1c2VyIG1hcHMgdG8gJXMsIG5vdCAlcyIsIGxuYW1lLCBuYW1lKTsKLSsgICAg fSBlbHNlIHsKLSsgICAgICAgIGF1dGhvcml6ZWQgPSAxOwotKyAgICB9Ci0rI2Vsc2UKLSsgICAg ZGVidWcoImNhbGxpbmcgZ2xvYnVzX2dzc19hc3Npc3RfdXNlcm9rKCkiKTsKLSsgICAgaWYgKEdM T0JVU19TVUNDRVNTICE9Ci0rICAgICAgICAocmVzID0gKGdsb2J1c19nc3NfYXNzaXN0X3VzZXJv ayhjbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmFtZSkpKSkgewotKyAgICAgICAgZGVidWcoIiVzIiwgZ2xvYnVzX2Vy cm9yX3ByaW50X2NoYWluKGdsb2J1c19lcnJvcl9nZXQocmVzKSkpOwotKyAgICB9IGVsc2Ugewot KyAgICAgICAgYXV0aG9yaXplZCA9IDE7Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSsgICAgbG9naXQo IkdTSSB1c2VyICVzIGlzJXMgYXV0aG9yaXplZCBhcyB0YXJnZXQgdXNlciAlcyIsCi0rICAgICAg ICAoY2hhciAqKSBjbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlLCAoYXV0aG9yaXplZCA/ICIiIDog IiBub3QiKSwgbmFtZSk7Ci0rCi0rICAgIHJldHVybiBhdXRob3JpemVkOwotK30KLSsKLSsvKgot KyAqIFJldHVybiB0aGUgbG9jYWwgdXNlcm5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBHU0kgY3Jl ZGVudGlhbHMuCi0rICovCi0raW50Ci0rc3NoX2dzc2FwaV9nc2lfbG9jYWxuYW1lKHNzaF9nc3Nh cGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKip1c2VyKQotK3sKLSsgICAgZ2xvYnVzX3Jlc3VsdF90 IHJlczsKLSsjaWZkZWYgSEFWRV9HTE9CVVNfR1NTX0FTU0lTVF9NQVBfQU5EX0FVVEhPUklaRQot KyAgICBjaGFyIGxuYW1lWzI1Nl0gPSAiIjsKLSsjZW5kaWYKLSsKLSsjaWZkZWYgR0xPQlVTX0dT SV9HU1NfQVNTSVNUX01PRFVMRQotKyAgICBpZiAoZ2xvYnVzX21vZHVsZV9hY3RpdmF0ZShHTE9C VVNfR1NJX0dTU19BU1NJU1RfTU9EVUxFKSAhPSAwKSB7Ci0rICAgICAgICByZXR1cm4gMDsKLSsg ICAgfQotKyNlbmRpZgotKwotKy8qIHVzZSBuZXcgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9h dXRob3JpemUoKSBpbnRlcmZhY2UgaWYgYXZhaWxhYmxlICovCi0rI2lmZGVmIEhBVkVfR0xPQlVT X0dTU19BU1NJU1RfTUFQX0FORF9BVVRIT1JJWkUKLSsgICAgZGVidWcoImNhbGxpbmcgZ2xvYnVz X2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoKSIpOwotKyAgICBpZiAoR0xPQlVTX1NVQ0NF U1MgIT0KLSsgICAgICAgIChyZXMgPSBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6 ZShjbGllbnQtPmNvbnRleHQsICJzc2giLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGxuYW1lLCAyNTYpKSkgewotKyAgICAgICAgZGVi dWcoIiVzIiwgZ2xvYnVzX2Vycm9yX3ByaW50X2NoYWluKGdsb2J1c19lcnJvcl9nZXQocmVzKSkp OwotKyAgICAgICAgbG9naXQoImZhaWxlZCB0byBtYXAgR1NJIHVzZXIgJXMiLCAoY2hhciAqKWNs aWVudC0+ZGlzcGxheW5hbWUudmFsdWUpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsg ICAgKnVzZXIgPSBzdHJkdXAobG5hbWUpOwotKyNlbHNlCi0rICAgIGRlYnVnKCJjYWxsaW5nIGds b2J1c19nc3NfYXNzaXN0X2dyaWRtYXAoKSIpOwotKyAgICBpZiAoR0xPQlVTX1NVQ0NFU1MgIT0K LSsgICAgICAgIChyZXMgPSBnbG9idXNfZ3NzX2Fzc2lzdF9ncmlkbWFwKGNsaWVudC0+ZGlzcGxh eW5hbWUudmFsdWUsIHVzZXIpKSkgewotKyAgICAgICAgZGVidWcoIiVzIiwgZ2xvYnVzX2Vycm9y X3ByaW50X2NoYWluKGdsb2J1c19lcnJvcl9nZXQocmVzKSkpOwotKyAgICAgICAgbG9naXQoImZh aWxlZCB0byBtYXAgR1NJIHVzZXIgJXMiLCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFs dWUpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSsgICAgbG9naXQo IkdTSSB1c2VyICVzIG1hcHBlZCB0byB0YXJnZXQgdXNlciAlcyIsCi0rICAgICAgICAoY2hhciAq KSBjbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlLCAqdXNlcik7Ci0rCi0rICAgIHJldHVybiAxOwot K30KLSsKLSsvKgotKyAqIEV4cG9ydCBHU0kgY3JlZGVudGlhbHMgdG8gZGlzay4KLSsgKi8KLStz dGF0aWMgaW50Ci0rc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVudCAq Y2xpZW50KQotK3sKLSsJT01fdWludDMyCW1ham9yX3N0YXR1czsKLSsJT01fdWludDMyCW1pbm9y X3N0YXR1czsKLSsJZ3NzX2J1ZmZlcl9kZXNjCWV4cG9ydF9jcmVkID0gR1NTX0NfRU1QVFlfQlVG RkVSOwotKwljaGFyICoJCXA7Ci0rCi0rCWlmICghY2xpZW50IHx8ICFjbGllbnQtPmNyZWRzKSB7 Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotKwltYWpvcl9zdGF0dXMgPSBnc3NfZXhwb3J0X2NyZWQo Jm1pbm9yX3N0YXR1cywKLSsJCQkJICAgICAgIGNsaWVudC0+Y3JlZHMsCi0rCQkJCSAgICAgICBH U1NfQ19OT19PSUQsCi0rCQkJCSAgICAgICAxLAotKwkJCQkgICAgICAgJmV4cG9ydF9jcmVkKTsK LSsJaWYgKEdTU19FUlJPUihtYWpvcl9zdGF0dXMpICYmIG1ham9yX3N0YXR1cyAhPSBHU1NfU19V TkFWQUlMQUJMRSkgewotKwkJR3NzY3R4dCAqY3R4OwotKwkJc3NoX2dzc2FwaV9idWlsZF9jdHgo JmN0eCk7Ci0rCQljdHgtPm1ham9yID0gbWFqb3Jfc3RhdHVzOwotKwkJY3R4LT5taW5vciA9IG1p bm9yX3N0YXR1czsKLSsJCXNzaF9nc3NhcGlfc2V0X29pZChjdHgsICZnc3NhcGlfZ3NpX21lY2gu b2lkKTsKLSsJCXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKLSsJCXNzaF9nc3NhcGlfZGVsZXRlX2N0 eCgmY3R4KTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCXAgPSBzdHJjaHIoKGNoYXIgKikgZXhw b3J0X2NyZWQudmFsdWUsICc9Jyk7Ci0rCWlmIChwID09IE5VTEwpIHsKLSsJCWxvZ2l0KCJGYWls ZWQgdG8gcGFyc2UgZXhwb3J0ZWQgY3JlZGVudGlhbHMgc3RyaW5nICclLjEwMHMnIiwKLSsJCSAg ICAoY2hhciAqKWV4cG9ydF9jcmVkLnZhbHVlKTsKLSsJCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlu b3Jfc3RhdHVzLCAmZXhwb3J0X2NyZWQpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsJKnArKyA9ICdc MCc7Ci0rCWlmIChzdHJjbXAoKGNoYXIgKilleHBvcnRfY3JlZC52YWx1ZSwiWDUwOV9VU0VSX0RF TEVHX1BST1hZIikgPT0gMCkgewotKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSBzdHJkdXAoIlg1 MDlfVVNFUl9QUk9YWSIpOwotKwl9IGVsc2UgewotKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSBz dHJkdXAoKGNoYXIgKilleHBvcnRfY3JlZC52YWx1ZSk7Ci0rCX0KLSsJaWYgKGFjY2VzcyhwLCBS X09LKSA9PSAwKSB7Ci0rCQlpZiAoY2xpZW50LT5zdG9yZS5maWxlbmFtZSkgewotKwkJCWlmIChy ZW5hbWUocCwgY2xpZW50LT5zdG9yZS5maWxlbmFtZSkgPCAwKSB7Ci0rCQkJCWxvZ2l0KCJGYWls ZWQgdG8gcmVuYW1lICVzIHRvICVzOiAlcyIsIHAsCi0rCQkJCSAgICBjbGllbnQtPnN0b3JlLmZp bGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotKwkJCQlmcmVlKGNsaWVudC0+c3RvcmUuZmlsZW5h bWUpOwotKwkJCQljbGllbnQtPnN0b3JlLmZpbGVuYW1lID0gc3RyZHVwKHApOwotKwkJCX0gZWxz ZSB7Ci0rCQkJCXAgPSBjbGllbnQtPnN0b3JlLmZpbGVuYW1lOwotKwkJCX0KLSsJCX0gZWxzZSB7 Ci0rCQkJY2xpZW50LT5zdG9yZS5maWxlbmFtZSA9IHN0cmR1cChwKTsKLSsJCX0KLSsJfQotKwlj bGllbnQtPnN0b3JlLmVudnZhbCA9IHN0cmR1cChwKTsKLSsjaWZkZWYgVVNFX1BBTQotKwlpZiAo b3B0aW9ucy51c2VfcGFtKQotKwkJZG9fcGFtX3B1dGVudihjbGllbnQtPnN0b3JlLmVudnZhciwg Y2xpZW50LT5zdG9yZS5lbnZ2YWwpOwotKyNlbmRpZgotKwlnc3NfcmVsZWFzZV9idWZmZXIoJm1p bm9yX3N0YXR1cywgJmV4cG9ydF9jcmVkKTsKLSsKLSsJcmV0dXJuIDE7Ci0rfQotKwotKy8qCi0r ICogRXhwb3J0IEdTSSBjcmVkZW50aWFscyB0byBkaXNrLgotKyAqLwotK3N0YXRpYyBpbnQKLStz c2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQp Ci0rewotKwlPTV91aW50MzIJbWFqb3Jfc3RhdHVzOwotKwlPTV91aW50MzIJbWlub3Jfc3RhdHVz OwotKwlnc3NfYnVmZmVyX2Rlc2MJZXhwb3J0X2NyZWQgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0r CWNoYXIgKgkJcDsKLSsKLSsJaWYgKCFjbGllbnQgfHwgIWNsaWVudC0+Y3JlZHMpIHsKLSsJCXJl dHVybiAwOwotKwl9Ci0rCi0rCW1ham9yX3N0YXR1cyA9IGdzc19leHBvcnRfY3JlZCgmbWlub3Jf c3RhdHVzLAotKwkJCQkgICAgICAgY2xpZW50LT5jcmVkcywKLSsJCQkJICAgICAgIEdTU19DX05P X09JRCwKLSsJCQkJICAgICAgIDEsCi0rCQkJCSAgICAgICAmZXhwb3J0X2NyZWQpOwotKwlpZiAo R1NTX0VSUk9SKG1ham9yX3N0YXR1cykgJiYgbWFqb3Jfc3RhdHVzICE9IEdTU19TX1VOQVZBSUxB QkxFKSB7Ci0rCQlHc3NjdHh0ICpjdHg7Ci0rCQlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgmY3R4KTsK LSsJCWN0eC0+bWFqb3IgPSBtYWpvcl9zdGF0dXM7Ci0rCQljdHgtPm1pbm9yID0gbWlub3Jfc3Rh dHVzOwotKwkJc3NoX2dzc2FwaV9zZXRfb2lkKGN0eCwgJmdzc2FwaV9nc2lfbWVjaF9taWN2Mi5v aWQpOwotKwkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOwotKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4 KCZjdHgpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJcCA9IHN0cmNocigoY2hhciAqKSBleHBv cnRfY3JlZC52YWx1ZSwgJz0nKTsKLSsJaWYgKHAgPT0gTlVMTCkgewotKwkJbG9naXQoIkZhaWxl ZCB0byBwYXJzZSBleHBvcnRlZCBjcmVkZW50aWFscyBzdHJpbmcgJyUuMTAwcyciLAotKwkJICAg IChjaGFyICopZXhwb3J0X2NyZWQudmFsdWUpOwotKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5v cl9zdGF0dXMsICZleHBvcnRfY3JlZCk7Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwkqcCsrID0gJ1ww JzsKLSsJaWYgKHN0cmNtcCgoY2hhciAqKWV4cG9ydF9jcmVkLnZhbHVlLCJYNTA5X1VTRVJfREVM RUdfUFJPWFkiKSA9PSAwKSB7Ci0rCQljbGllbnQtPnN0b3JlLmVudnZhciA9IHN0cmR1cCgiWDUw OV9VU0VSX1BST1hZIik7Ci0rCX0gZWxzZSB7Ci0rCQljbGllbnQtPnN0b3JlLmVudnZhciA9IHN0 cmR1cCgoY2hhciAqKWV4cG9ydF9jcmVkLnZhbHVlKTsKLSsJfQotKwlpZiAoYWNjZXNzKHAsIFJf T0spID09IDApIHsKLSsJCWlmIChjbGllbnQtPnN0b3JlLmZpbGVuYW1lKSB7Ci0rCQkJaWYgKHJl bmFtZShwLCBjbGllbnQtPnN0b3JlLmZpbGVuYW1lKSA8IDApIHsKLSsJCQkJbG9naXQoIkZhaWxl ZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzIiwgcCwKLSsJCQkJICAgIGNsaWVudC0+c3RvcmUuZmls ZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0rCQkJCWZyZWUoY2xpZW50LT5zdG9yZS5maWxlbmFt ZSk7Ci0rCQkJCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUgPSBzdHJkdXAocCk7Ci0rCQkJfSBlbHNl IHsKLSsJCQkJcCA9IGNsaWVudC0+c3RvcmUuZmlsZW5hbWU7Ci0rCQkJfQotKwkJfSBlbHNlIHsK LSsJCQljbGllbnQtPnN0b3JlLmZpbGVuYW1lID0gc3RyZHVwKHApOwotKwkJfQotKwl9Ci0rCWNs aWVudC0+c3RvcmUuZW52dmFsID0gc3RyZHVwKHApOwotKyNpZmRlZiBVU0VfUEFNCi0rCWlmIChv cHRpb25zLnVzZV9wYW0pCi0rCQlkb19wYW1fcHV0ZW52KGNsaWVudC0+c3RvcmUuZW52dmFyLCBj bGllbnQtPnN0b3JlLmVudnZhbCk7Ci0rI2VuZGlmCi0rCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlu b3Jfc3RhdHVzLCAmZXhwb3J0X2NyZWQpOwotKwotKwlyZXR1cm4gMTsKLSt9Ci0rCi0rLyoKLSsg KiBFeHBvcnQgdXBkYXRlZCBHU0kgY3JlZGVudGlhbHMgdG8gZGlzay4KLSsgKi8KLStzdGF0aWMg aW50Ci0rc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3Jl LHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCi0rewotKwlyZXR1cm4gc3NoX2dzc2FwaV9nc2lf c3RvcmVjcmVkcyhjbGllbnQpOwotK30KLSsKLSsvKgotKyAqIEV4cG9ydCB1cGRhdGVkIEdTSSBj cmVkZW50aWFscyB0byBkaXNrLgotKyAqLwotK3N0YXRpYyBpbnQKLStzc2hfZ3NzYXBpX2dzaV91 cGRhdGVjcmVkc19taWN2Mihzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsc3NoX2dzc2FwaV9jbGll bnQgKmNsaWVudCkKLSt7Ci0rCXJldHVybiBzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzX21pY3Yy KGNsaWVudCk7Ci0rfQotKwotKyNlbmRpZiAvKiBHU0kgKi8KLSsjZW5kaWYgLyogR1NTQVBJICov Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9nc3Mtc2Vydi1rcmI1LmMgb3BlbnNzaC0x MC4zcDEvZ3NzLXNlcnYta3JiNS5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9nc3Mtc2Vydi1r cmI1LmMJMjAyNi0wNy0wMSAwOTozODowMC44NjgwNDk5MjggKzAyMDAKLSsrKyBvcGVuc3NoLTEw LjNwMS9nc3Mtc2Vydi1rcmI1LmMJMjAyNi0wNy0wMSAxMDozOTo0My41NzQ4MDg2MzQgKzAyMDAK LUBAIC00NTAsNiArNDUwLDM0IEBACi0gCXJldHVybiBmb3VuZF9wcmluY2lwYWw7Ci0gfQotICAK LSsvKiBSZXRyaWV2ZSB0aGUgbG9jYWwgdXNlcm5hbWUgYXNzb2NpYXRlZCB3aXRoIGEgc2V0IG9m IEtlcmJlcm9zCi0rICogY3JlZGVudGlhbHMuIEhvcGVmdWxseSB3ZSBjYW4gdXNlIHRoaXMgZm9y IHRoZSAnZW1wdHknIHVzZXJuYW1lCi0rICogbG9naW5zIGRpc2N1c3NlZCBpbiB0aGUgZHJhZnQg ICovCi0rc3RhdGljIGludAotK3NzaF9nc3NhcGlfa3JiNV9sb2NhbG5hbWUoc3NoX2dzc2FwaV9j bGllbnQgKmNsaWVudCwgY2hhciAqKnVzZXIpIHsKLSsJa3JiNV9wcmluY2lwYWwgcHJpbmM7Ci0r CWludCByZXR2YWw7Ci0rCi0rCWlmIChzc2hfZ3NzYXBpX2tyYjVfaW5pdCgpID09IDApCi0rCQly ZXR1cm4gMDsKLSsKLSsJaWYgKChyZXR2YWw9a3JiNV9wYXJzZV9uYW1lKGtyYl9jb250ZXh0LCBj bGllbnQtPmRpc3BsYXluYW1lLnZhbHVlLAotKwkgICAgJnByaW5jKSkpIHsKLSsJCWxvZ2l0KCJr cmI1X3BhcnNlX25hbWUoKTogJS4xMDBzIiwKLSsJCSAgICBrcmI1X2dldF9lcnJfdGV4dChrcmJf Y29udGV4dCxyZXR2YWwpKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCS8qIFdlJ3ZlIGdvdCB0 byByZXR1cm4gYSBtYWxsb2MnZCBzdHJpbmcgKi8KLSsJKnVzZXIgPSAoY2hhciAqKXhtYWxsb2Mo MjU2KTsKLSsJaWYgKGtyYjVfYW5hbWVfdG9fbG9jYWxuYW1lKGtyYl9jb250ZXh0LCBwcmluYywg MjU2LCAqdXNlcikpIHsKLSsJCWZyZWUoKnVzZXIpOwotKwkJKnVzZXIgPSBOVUxMOwotKwkJcmV0 dXJuKDApOwotKwl9Ci0rCi0rCXJldHVybigxKTsKLSt9Ci0gCi0gLyogVGhpcyB3cml0ZXMgb3V0 IGFueSBmb3J3YXJkZWQgY3JlZGVudGlhbHMgZnJvbSB0aGUgc3RydWN0dXJlIHBvcHVsYXRlZAot ICAqIGR1cmluZyB1c2VyYXV0aC4gQ2FsbGVkIGFmdGVyIHdlIGhhdmUgc2V0dWlkIHRvIHRoZSB1 c2VyICovCi1AQCAtNTQ0LDcgKzU3Miw3IEBACi0gCXJldHVybiBzZXRfZW52OwotIH0KLSAKLS1p bnQKLStzdGF0aWMgaW50Ci0gc3NoX2dzc2FwaV9rcmI1X3VwZGF0ZWNyZWRzKHNzaF9nc3NhcGlf Y2NhY2hlICpzdG9yZSwKLSAgICAgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKLSB7Ci1AQCAt ODQwLDcgKzg2OCw3IEBACi0gCXs5LCAiXHgyQVx4ODZceDQ4XHg4Nlx4RjdceDEyXHgwMVx4MDJc eDAyIn0sCi0gCU5VTEwsCi0gCSZzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rLAotLQlOVUxMLAotKwkm c3NoX2dzc2FwaV9rcmI1X2xvY2FsbmFtZSwKLSAJJnNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRz LAotIAkmc3NoX2dzc2FwaV9rcmI1X3VwZGF0ZWNyZWRzCi0gfTsKLWRpZmYgLU51ciBvcGVuc3No LTEwLjNwMS5vcmlnL2tleGdzc3MuYyBvcGVuc3NoLTEwLjNwMS9rZXhnc3NzLmMKLS0tLSBvcGVu c3NoLTEwLjNwMS5vcmlnL2tleGdzc3MuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjMyMDY4MDE3MiAr MDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2tleGdzc3MuYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3 NTE2NDcyMyArMDIwMAotQEAgLTQ4LDYgKzQ4LDcgQEAKLSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0g I2luY2x1ZGUgInNzaGVyci5oIgotIAotK3N0YXRpYyB2b2lkIGtleF9nc3Nfc2VuZF9lcnJvcihH c3NjdHh0ICpjdHh0LCBzdHJ1Y3Qgc3NoICpzc2gpOwotIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9w dGlvbnM7Ci0gCi0gc3RhdGljIGludCBpbnB1dF9rZXhnc3NfaW5pdChpbnQsIHVfaW50MzJfdCwg c3RydWN0IHNzaCAqKTsKLUBAIC04MSw4ICs4MiwxMCBAQAotIAotIAlkZWJ1ZzJfZigiQWNxdWly aW5nIGNyZWRlbnRpYWxzIik7Ci0gCi0tCWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9zZXJ2 ZXJfY3R4KCZrZXgtPmdzcywgb2lkKSkpCi0rCWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9z ZXJ2ZXJfY3R4KCZrZXgtPmdzcywgb2lkKSkpIHsKLSsJCWtleF9nc3Nfc2VuZF9lcnJvcihrZXgt Pmdzcywgc3NoKTsKLSAJCWZhdGFsKCJVbmFibGUgdG8gYWNxdWlyZSBjcmVkZW50aWFscyBmb3Ig dGhlIHNlcnZlciIpOwotKwl9Ci0gCi0gCXNzaF9nc3NhcGlfYnVpbGRfY3R4KCZrZXgtPmdzcyk7 Ci0gCWlmIChrZXgtPmdzcyA9PSBOVUxMKQotQEAgLTEzOSwxMyArMTQyLDE0IEBACi0gCXNzaF9k aXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUsIE5VTEwpOwotIAotIAlp ZiAoR1NTX0VSUk9SKGdzcy0+bWFqb3IpKSB7Ci0rCQlrZXhfZ3NzX3NlbmRfZXJyb3Ioa2V4LT5n c3MsIHNzaCk7Ci0gCQlpZiAoc2VuZF90b2stPmxlbmd0aCA+IDApIHsKLSAJCQlpZiAoKHIgPSBz c2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUpKSAhPSAwIHx8Ci0gCQkJ ICAgIChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBzZW5kX3Rvay0+dmFsdWUsIHNlbmRfdG9r LT5sZW5ndGgpKSAhPSAwIHx8Ci0gCQkJICAgIChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkK LSAJCQkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7Ci0gCQl9Ci0tCQlm YXRhbCgiYWNjZXB0X2N0eCBkaWVkIik7Ci0rCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAi R1NTQVBJIEtleSBFeGNoYW5nZSBoYW5kc2hha2UgZmFpbGVkIik7Ci0gCX0KLSAKLSAJaWYgKCEo KnJldF9mbGFncyAmIEdTU19DX01VVFVBTF9GTEFHKSkKLUBAIC02MDAsNCArNjA0LDI2IEBACi0g CXJldHVybiBrZXhnc3NnZXhfZmluYWwoc3NoLCAmc2VuZF90b2ssICZyZXRfZmxhZ3MpOwotIH0K LSAKLStzdGF0aWMgdm9pZAotK2tleF9nc3Nfc2VuZF9lcnJvcihHc3NjdHh0ICpjdHh0LCBzdHJ1 Y3Qgc3NoICpzc2gpIHsKLSsJY2hhciAqZXJyc3RyOwotKwlPTV91aW50MzIgbWFqLCBtaW47Ci0r CWludCByOwotKwotKwllcnJzdHIgPSBtbV9zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoY3R4dCwgJm1h aiwgJm1pbik7Ci0rCWlmIChlcnJzdHIpIHsKLSsJCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gs IFNTSDJfTVNHX0tFWEdTU19FUlJPUikpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBrdF9wdXRf dTMyKHNzaCwgbWFqKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3NocGt0X3B1dF91MzIoc3NoLCBt aW4pKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBlcnJzdHIp KSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCAiIikpICE9IDAg fHwKLSsJCSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApCi0rCQkJZmF0YWwoInNzaHBr dCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7Ci0rCQlpZiAoKHIgPSBzc2hfcGFja2V0X3dyaXRl X3dhaXQoc3NoKSkgIT0gMCkKLSsJCQlmYXRhbCgic3NoX3BhY2tldF93cml0ZV93YWl0OiAlcyIs IHNzaF9lcnIocikpOwotKwkJLyogWFhYIC0gV2Ugc2hvdWxkIHByb2JhYmx5IGxvZyB0aGUgZXJy b3IgbG9jYWxseSBoZXJlICovCi0rCQlmcmVlKGVycnN0cik7Ci0rCX0KLSt9Ci0rCi0gI2VuZGlm IC8qIGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkgKi8KLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL01ha2VmaWxlLmluIG9wZW5zc2gtMTAuM3AxL01ha2VmaWxl LmluCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9NYWtlZmlsZS5pbgkyMDI2LTA3LTAxIDA5OjM4 OjAwLjkyMTYwMDc2NiArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL01ha2VmaWxlLmluCTIwMjYt MDctMDEgMTA6Mzk6NDMuNTc1NDYwMzQ5ICswMjAwCi1AQCAtMTMzLDcgKzEzMyw3IEBACi0gCWF1 dGgtYnNkYXV0aC5vIGF1dGgyLWhvc3RiYXNlZC5vIGF1dGgyLWtiZGludC5vIFwKLSAJYXV0aDIt bm9uZS5vIGF1dGgyLXBhc3N3ZC5vIGF1dGgyLXB1YmtleS5vIGF1dGgyLXB1YmtleWZpbGUubyBc Ci0gCW1vbml0b3IubyBtb25pdG9yX3dyYXAubyBhdXRoLWtyYjUubyBrZXhnc3NzLm8gXAotLQlh dXRoMi1nc3MubyBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBcCi0rCWF1dGgyLWdzcy5vIGdz cy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGdzcy1zZXJ2LWdzaS5vIFwKLSAJbG9naW5yZWMubyBh dXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0aC1zaWEubyBcCi0gCXNmdHAtc2VydmVyLm8gc2Z0 cC1jb21tb24ubyBcCi0gCXVpZHN3YXAubyBwbGF0Zm9ybS1saXN0ZW4ubyAkKFAxMU9CSlMpICQo U0tPQkpTKQotQEAgLTE0NCw3ICsxNDQsNyBAQAotIAlzZXJ2ZXJsb29wLm8gYXV0aC5vIGF1dGgy Lm8gYXV0aC1vcHRpb25zLm8gc2Vzc2lvbi5vIGF1dGgyLWNoYWxsLm8gXAotIAlncm91cGFjY2Vz cy5vIGF1dGgtYnNkYXV0aC5vIGF1dGgyLWhvc3RiYXNlZC5vIGF1dGgyLWtiZGludC5vIFwKLSAJ YXV0aDItbm9uZS5vIGF1dGgyLXBhc3N3ZC5vIGF1dGgyLXB1YmtleS5vIGF1dGgyLXB1YmtleWZp bGUubyBcCi0tCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGtleGdzc3Mu byBcCi0rCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGdzcy1zZXJ2LWdz aS5vIGtleGdzc3MubyBcCi0gCW1vbml0b3Jfd3JhcC5vIGF1dGgta3JiNS5vIFwKLSAJYXVkaXQu byBhdWRpdC1ic20ubyBhdWRpdC1saW51eC5vIHBsYXRmb3JtLm8gXAotIAlsb2dpbnJlYy5vIGF1 dGgtcGFtLm8gYXV0aC1zaGFkb3cubyBhdXRoLXNpYS5vIFwKLWRpZmYgLU51ciBvcGVuc3NoLTEw LjNwMS5vcmlnL21pc2MuYyBvcGVuc3NoLTEwLjNwMS9taXNjLmMKLS0tLSBvcGVuc3NoLTEwLjNw MS5vcmlnL21pc2MuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjkxMzYxNzcwOSArMDIwMAotKysrIG9w ZW5zc2gtMTAuM3AxL21pc2MuYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3NTU2NTEwNiArMDIwMAot QEAgLTQ2NCwxMSArNDY0LDE0IEBACi0gI2RlZmluZSBXSElURVNQQUNFICIgXHRcclxuIgotICNk ZWZpbmUgUVVPVEUJIlwiIgotIAotKy8qIENoYXJhY3RlcnMgY29uc2lkZXJlZCBhcyBxdW90YXRp b25zLiAqLwotKyNkZWZpbmUgUVVPVEVTICInXCIiCi0rCi0gLyogcmV0dXJuIG5leHQgdG9rZW4g aW4gY29uZmlndXJhdGlvbiBsaW5lICovCi0gc3RhdGljIGNoYXIgKgotIHN0cmRlbGltX2ludGVy bmFsKGNoYXIgKipzLCBpbnQgc3BsaXRfZXF1YWxzKQotIHsKLS0JY2hhciAqb2xkOwotKwljaGFy ICpvbGQsICpwLCAqcTsKLSAJaW50IHdzcGFjZSA9IDA7Ci0gCi0gCWlmICgqcyA9PSBOVUxMKQot QEAgLTQ3Niw2ICs0NzksMjEgQEAKLSAKLSAJb2xkID0gKnM7Ci0gCi0rCWlmICgocT1zdHJjaHIo UVVPVEVTLCAoaW50KSAqb2xkKSkgJiYgKnEpCi0rCXsKLSsJCS8qIGZpbmQgbmV4dCBxdW90ZSBj aGFyYWN0ZXIsIHBvaW50IG9sZCB0byBzdGFydCBvZiBxdW90ZWQKLSsJCSAqIHN0cmluZyAqLwot KwkJZm9yIChwID0gKytvbGQ7ICpwICYmICpwICE9ICpxOyBwKyspCi0rCQkJOwotKwotKwkJLyog ZmluZCBzdGFydCBvZiBuZXh0IHRva2VuICovCi0rCQkqcyA9ICgqcCkgPyBwICsgc3Ryc3BuKHAg KyAxLCBXSElURVNQQUNFKSArIDEgOiBOVUxMOwotKwotKwkJLyogdGVybWluYXRlICdvbGQnIHRv a2VuICovCi0rCQkqcCA9ICdcMCc7Ci0rCQlyZXR1cm4gKG9sZCk7Ci0rCX0KLSsKLSAJKnMgPSBz dHJwYnJrKCpzLAotIAkgICAgc3BsaXRfZXF1YWxzID8gV0hJVEVTUEFDRSBRVU9URSAiPSIgOiBX SElURVNQQUNFIFFVT1RFKTsKLSAJaWYgKCpzID09IE5VTEwpCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4zcDEub3JpZy9tb25pdG9yLmMgb3BlbnNzaC0xMC4zcDEvbW9uaXRvci5jCi0tLS0gb3BlbnNz aC0xMC4zcDEub3JpZy9tb25pdG9yLmMJMjAyNi0wNy0wMSAwOTozODowMC45MTM5MDIwMjQgKzAy MDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9tb25pdG9yLmMJMjAyNi0wNy0wMSAxMDozOTo0My41NzY3 NDYyMTUgKzAyMDAKLUBAIC0xNDIsNiArMTQyLDkgQEAKLSBpbnQgbW1fYW5zd2VyX2dzc191c2Vy b2soc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1tX2Fuc3dlcl9n c3NfY2hlY2ttaWMoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1t X2Fuc3dlcl9nc3Nfc2lnbihzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKLStp bnQgbW1fYW5zd2VyX2dzc19lcnJvcihzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAq KTsKLStpbnQgbW1fYW5zd2VyX2dzc19pbmRpY2F0ZV9tZWNocyhzdHJ1Y3Qgc3NoICosIGludCwg c3RydWN0IHNzaGJ1ZiAqKTsKLStpbnQgbW1fYW5zd2VyX2dzc19sb2NhbG5hbWUoc3RydWN0IHNz aCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1tX2Fuc3dlcl9nc3NfdXBkYXRlY3Jl ZHMoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gI2VuZGlmCi0gCi1AQCAt MTk5LDcgKzIwMiw3IEBACi0gI2VuZGlmCi0gICAgIHtNT05JVE9SX1JFUV9TRVRDT01QQVQsIE1P Tl9PTkNFLCBtbV9hbnN3ZXJfc2V0Y29tcGF0fSwKLSAgICAge01PTklUT1JfUkVRX1NJR04sIE1P Tl9PTkNFLCBtbV9hbnN3ZXJfc2lnbn0sCi0tICAgIHtNT05JVE9SX1JFUV9QV05BTSwgTU9OX09O Q0UsIG1tX2Fuc3dlcl9wd25hbWFsbG93fSwKLSsgICAge01PTklUT1JfUkVRX1BXTkFNLCBNT05f QVVUSCwgbW1fYW5zd2VyX3B3bmFtYWxsb3d9LAotICAgICB7TU9OSVRPUl9SRVFfQVVUSFNFUlYs IE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0aHNlcnZ9LAotICNpZmRlZiBXSVRIX1NFTElOVVgKLSAg ICAge01PTklUT1JfUkVRX0FVVEhST0xFLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGhyb2xlfSwK LUBAIC0yMDcsNyArMjEwLDcgQEAKLSAgICAge01PTklUT1JfUkVRX0FVVEgyX1JFQURfQkFOTkVS LCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFubmVyfSwKLSAgICAge01PTklUT1Jf UkVRX0FVVEhQQVNTV09SRCwgTU9OX0FVVEgsIG1tX2Fuc3dlcl9hdXRocGFzc3dvcmR9LAotICNp ZmRlZiBVU0VfUEFNCi0tICAgIHtNT05JVE9SX1JFUV9QQU1fU1RBUlQsIE1PTl9PTkNFLCBtbV9h bnN3ZXJfcGFtX3N0YXJ0fSwKLSsgICAge01PTklUT1JfUkVRX1BBTV9TVEFSVCwgTU9OX0lTQVVU SCwgbW1fYW5zd2VyX3BhbV9zdGFydH0sCi0gICAgIHtNT05JVE9SX1JFUV9QQU1fQUNDT1VOVCwg MCwgbW1fYW5zd2VyX3BhbV9hY2NvdW50fSwKLSAgICAge01PTklUT1JfUkVRX1BBTV9JTklUX0NU WCwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9wYW1faW5pdF9jdHh9LAotICAgICB7TU9OSVRPUl9SRVFf UEFNX1FVRVJZLCAwLCBtbV9hbnN3ZXJfcGFtX3F1ZXJ5fSwKLUBAIC0yMzEsOCArMjM0LDExIEBA Ci0gICAgIHtNT05JVE9SX1JFUV9HU1NTRVRVUCwgTU9OX0lTQVVUSCwgbW1fYW5zd2VyX2dzc19z ZXR1cF9jdHh9LAotICAgICB7TU9OSVRPUl9SRVFfR1NTU1RFUCwgMCwgbW1fYW5zd2VyX2dzc19h Y2NlcHRfY3R4fSwKLSAgICAge01PTklUT1JfUkVRX0dTU1VTRVJPSywgTU9OX09OQ0V8TU9OX0FV VEhERUNJREUsIG1tX2Fuc3dlcl9nc3NfdXNlcm9rfSwKLS0gICAge01PTklUT1JfUkVRX0dTU0NI RUNLTUlDLCBNT05fT05DRSwgbW1fYW5zd2VyX2dzc19jaGVja21pY30sCi0rICAgIHtNT05JVE9S X1JFUV9HU1NDSEVDS01JQywgTU9OX0lTQVVUSCwgbW1fYW5zd2VyX2dzc19jaGVja21pY30sCi0g ICAgIHtNT05JVE9SX1JFUV9HU1NTSUdOLCBNT05fT05DRSwgbW1fYW5zd2VyX2dzc19zaWdufSwK LSsgICAge01PTklUT1JfUkVRX0dTU0VSUiwgTU9OX0lTQVVUSCB8IE1PTl9PTkNFLCBtbV9hbnN3 ZXJfZ3NzX2Vycm9yfSwKLSsgICAge01PTklUT1JfUkVRX0dTU01FQ0hTLCBNT05fSVNBVVRILCBt bV9hbnN3ZXJfZ3NzX2luZGljYXRlX21lY2hzfSwKLSsgICAge01PTklUT1JfUkVRX0dTU0xPQ0FM TkFNRSwgTU9OX0lTQVVUSCwgbW1fYW5zd2VyX2dzc19sb2NhbG5hbWV9LAotICNlbmRpZgotICAg ICB7MCwgMCwgTlVMTH0KLSB9OwotQEAgLTI0Miw2ICsyNDgsOCBAQAotICAgICB7TU9OSVRPUl9S RVFfR1NTU0VUVVAsIDAsIG1tX2Fuc3dlcl9nc3Nfc2V0dXBfY3R4fSwKLSAgICAge01PTklUT1Jf UkVRX0dTU1NURVAsIDAsIG1tX2Fuc3dlcl9nc3NfYWNjZXB0X2N0eH0sCi0gICAgIHtNT05JVE9S X1JFUV9HU1NTSUdOLCAwLCBtbV9hbnN3ZXJfZ3NzX3NpZ259LAotKyAgICB7TU9OSVRPUl9SRVFf R1NTRVJSLCAwLCBtbV9hbnN3ZXJfZ3NzX2Vycm9yfSwKLSsgICAge01PTklUT1JfUkVRX0dTU01F Q0hTLCAwLCBtbV9hbnN3ZXJfZ3NzX2luZGljYXRlX21lY2hzfSwKLSAgICAge01PTklUT1JfUkVR X0dTU1VQQ1JFRFMsIDAsIG1tX2Fuc3dlcl9nc3NfdXBkYXRlY3JlZHN9LAotICNlbmRpZgotICAg ICB7TU9OSVRPUl9SRVFfU1RBVEUsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfc3RhdGV9LAotQEAgLTMy Myw2ICszMzEsOCBAQAotICNpZmRlZiBHU1NBUEkKLSAJLyogYW5kIGZvciB0aGUgR1NTQVBJIGtl eSBleGNoYW5nZSAqLwotIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVR X0dTU1NFVFVQLCAxKTsKLSsJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JF UV9HU1NFUlIsIDEpOwotKwltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVR X0dTU01FQ0hTLCAxKTsKLSAjZW5kaWYKLSAKLSAJLyogVGhlIGZpcnN0IGZldyByZXF1ZXN0cyBk byBub3QgcmVxdWlyZSBhc3luY2hyb25vdXMgYWNjZXNzICovCi1AQCAtNDc0LDYgKzQ4NCw4IEBA Ci0gI2lmZGVmIEdTU0FQSQotIAkvKiBhbmQgZm9yIHRoZSBHU1NBUEkga2V5IGV4Y2hhbmdlICov Ci0gCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTU0VUVVAsIDEp OwotKwltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU0VSUiwgMSk7 Ci0rCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTTUVDSFMsIDEp OwotICNlbmRpZgotIAotIAlpZiAoYXV0aF9vcHRzLT5wZXJtaXRfcHR5X2ZsYWcpIHsKLUBAIC05 MzYsMTQgKzk0OCwxNyBAQAotIAlpZiAoIWNvbXBhdF9zZXQpCi0gCQlmYXRhbF9mKCJzdGF0ZSBl cnJvcjogc2V0Y29tcGF0IG5ldmVyIGNhbGxlZCIpOwotIAotLQlpZiAoYXV0aGN0eHQtPmF0dGVt cHQrKyAhPSAwKQotLQkJZmF0YWxfZigibXVsdGlwbGUgYXR0ZW1wdHMgZm9yIGdldHB3bmFtIik7 Ci0tCi0rCWlmIChhdXRoY3R4dC0+dXNlcikgZnJlZShhdXRoY3R4dC0+dXNlcik7Ci0gCWlmICgo ciA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhtLCAmYXV0aGN0eHQtPnVzZXIsIE5VTEwpKSAhPSAwKQot IAkJZmF0YWxfZnIociwgInBhcnNlIik7Ci0gCi0gCXB3ZW50ID0gZ2V0cHduYW1hbGxvdyhzc2gs IGF1dGhjdHh0LT51c2VyKTsKLSAKLSsjaWZkZWYgVVNFX1BBTQotKwlpZiAob3B0aW9ucy5wZXJt aXRfcGFtX3VzZXJfY2hhbmdlKQotKwkJc2V0cHJvY3RpdGxlKCIlcyBbcHJpdl0iLCBwd2VudCA/ ICJbcGFtXSIgOiAidW5rbm93biIpOwotKwllbHNlCi0rI2VuZGlmCi0gCXNldHByb2N0aXRsZSgi JXMgW3ByaXZdIiwgcHdlbnQgPyBhdXRoY3R4dC0+dXNlciA6ICJ1bmtub3duIik7Ci0gCi0gCXNz aGJ1Zl9yZXNldChtKTsKLUBAIC0yMjk5LDYgKzIzMTQsNzkgQEAKLSB9Ci0gCi0gaW50Ci0rbW1f YW5zd2VyX2dzc19lcnJvcihzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hi dWYgKm0pCi0rewotKwlPTV91aW50MzIgbWFqb3IsIG1pbm9yOwotKwljaGFyICptc2c7Ci0rCWlu dCByOwotKwotKwltc2c9c3NoX2dzc2FwaV9sYXN0X2Vycm9yKGdzc2NvbnRleHQsICZtYWpvciwg Jm1pbm9yKTsKLSsJc3NoYnVmX3Jlc2V0KG0pOwotKwlpZiAoKHIgPSBzc2hidWZfcHV0X3UzMiht LCBtYWpvcikpICE9IDAgfHwKLSsJICAgIChyID0gc3NoYnVmX3B1dF91MzIobSwgbWlub3IpKSAh PSAwIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCBtc2cpKSAhPSAwKQotKwkJ ZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwotKwltbV9yZXF1ZXN0X3NlbmQoc29ja2V0 LCBNT05JVE9SX0FOU19HU1NFUlIsIG0pOwotKwotKwlmcmVlKG1zZyk7Ci0rCi0rCXJldHVybigw KTsKLSt9Ci0rCi0raW50Ci0rbW1fYW5zd2VyX2dzc19pbmRpY2F0ZV9tZWNocyhzdHJ1Y3Qgc3No ICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCi0rewotKwlPTV91aW50MzIgbWFq b3IsIG1pbm9yOwotKwlnc3NfT0lEX3NldCBtZWNoX3NldDsKLSsJc2l6ZV90IGk7Ci0rCWludCBy OwotKwotKwltYWpvcj1nc3NfaW5kaWNhdGVfbWVjaHMoJm1pbm9yLCAmbWVjaF9zZXQpOwotKwot Kwlzc2hidWZfcmVzZXQobSk7Ci0rCWlmICgociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIG1ham9yKSkg IT0gMCB8fAotKwkgICAgKHIgPSBzc2hidWZfcHV0X3UzMihtLCBtZWNoX3NldC0+Y291bnQpKSAh PSAwKQotKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwlmb3IgKGkgPSAwOyBpIDwg bWVjaF9zZXQtPmNvdW50OyBpKyspIHsKLSsJCWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKG0s IG1lY2hfc2V0LT5lbGVtZW50c1tpXS5lbGVtZW50cywKLSsJCSAgICBtZWNoX3NldC0+ZWxlbWVu dHNbaV0ubGVuZ3RoKSkgIT0gMCkKLSsJCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0r CX0KLSsKLSsJZ3NzX3JlbGVhc2Vfb2lkX3NldCgmbWlub3IsICZtZWNoX3NldCk7Ci0rCi0rCW1t X3JlcXVlc3Rfc2VuZChzb2NrZXQsIE1PTklUT1JfQU5TX0dTU01FQ0hTLCBtKTsKLSsKLSsJcmV0 dXJuKDApOwotK30KLSsKLStpbnQKLSttbV9hbnN3ZXJfZ3NzX2xvY2FsbmFtZShzdHJ1Y3Qgc3No ICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCi0rewotKwljaGFyICpuYW1lOwot KwlpbnQgcjsKLSsKLSsJc3NoX2dzc2FwaV9sb2NhbG5hbWUoJm5hbWUpOwotKwotKwlzc2hidWZf cmVzZXQobSk7Ci0rCWlmIChuYW1lKSB7Ci0rCQlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmco bSwgbmFtZSkpICE9IDApCi0rCQkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwkJZGVi dWczX2YoInNlbmRpbmcgcmVzdWx0ICVzIiwgbmFtZSk7Ci0rCQlmcmVlKG5hbWUpOwotKwl9IGVs c2UgewotKwkJaWYgKChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sICIiKSkgIT0gMCkKLSsJCQlm YXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCQlkZWJ1ZzNfZigic2VuZGluZyByZXN1bHQg XCJcIiIpOwotKwl9Ci0rCi0rCW1tX3JlcXVlc3Rfc2VuZChzb2NrZXQsIE1PTklUT1JfQU5TX0dT U0xPQ0FMTkFNRSwgbSk7Ci0rCi0rCXJldHVybigwKTsKLSt9Ci0rCi0raW50Ci0gbW1fYW5zd2Vy X2dzc19zaWduKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkK LSB7Ci0gCWdzc19idWZmZXJfZGVzYyBkYXRhOwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9y aWcvbW9uaXRvci5oIG9wZW5zc2gtMTAuM3AxL21vbml0b3IuaAotLS0tIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvbW9uaXRvci5oCTIwMjYtMDctMDEgMDk6Mzg6MDAuNjIyOTExODkyICswMjAwCi0rKysg b3BlbnNzaC0xMC4zcDEvbW9uaXRvci5oCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc3MDcwNDEwICsw MjAwCi1AQCAtNzcsNiArNzcsMTAgQEAKLSAKLSAJTU9OSVRPUl9SRVFfR1NTU0lHTiA9IDE1MCwg TU9OSVRPUl9BTlNfR1NTU0lHTiA9IDE1MSwKLSAJTU9OSVRPUl9SRVFfR1NTVVBDUkVEUyA9IDE1 MiwgTU9OSVRPUl9BTlNfR1NTVVBDUkVEUyA9IDE1MywKLSsKLSsJTU9OSVRPUl9SRVFfR1NTTUVD SFMgPSAyMDAsIE1PTklUT1JfQU5TX0dTU01FQ0hTID0gMjAxLAotKwlNT05JVE9SX1JFUV9HU1NM T0NBTE5BTUUgPSAyMDIsIE1PTklUT1JfQU5TX0dTU0xPQ0FMTkFNRSA9IDIwMywKLSsJTU9OSVRP Ul9SRVFfR1NTRVJSID0gMjA0LCBNT05JVE9SX0FOU19HU1NFUlIgPSAyMDUKLSB9OwotIAotIHN0 cnVjdCBzc2g7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9tb25pdG9yX3dyYXAuYyBv cGVuc3NoLTEwLjNwMS9tb25pdG9yX3dyYXAuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvbW9u aXRvcl93cmFwLmMJMjAyNi0wNy0wMSAwOTozODowMC42NDI2NjY5NzEgKzAyMDAKLSsrKyBvcGVu c3NoLTEwLjNwMS9tb25pdG9yX3dyYXAuYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3Nzc2ODgwNyAr MDIwMAotQEAgLTEyMjYsNiArMTIyNiw5NCBAQAotIAlyZXR1cm4gKGF1dGhlbnRpY2F0ZWQpOwot IH0KLSAKLStjaGFyICoKLSttbV9zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoR3NzY3R4dCAqY3R4LCBP TV91aW50MzIgKm1ham9yLCBPTV91aW50MzIgKm1pbm9yKQotK3sKLSsJc3RydWN0IHNzaGJ1ZiAq bSA9IE5VTEw7Ci0rCU9NX3VpbnQzMiBtYWosbWluOwotKwljaGFyICplcnJzdHI7Ci0rCWludCBy OwotKwotKwlpZiAoKG0gPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hi dWZfbmV3IGZhaWxlZCIpOwotKwotKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZk LCBNT05JVE9SX1JFUV9HU1NFUlIsIG0pOwotKwltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBt b25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9BTlNfR1NTRVJSLCBtKTsKLSsKLSsJaWYgKChyID0g c3NoYnVmX2dldF91MzIobSwgJm1haikpICE9IDAgfHwKLSsJICAgIChyID0gc3NoYnVmX2dldF91 MzIobSwgJm1pbikpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCi0r CWlmIChtYWpvcikgKm1ham9yPW1hajsKLSsJaWYgKG1pbm9yKSAqbWlub3I9bWluOwotKwotKwlp ZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcobSwgJmVycnN0ciwgTlVMTCkpICE9IDApCi0rCQlm YXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCi0rCXNzaGJ1Zl9mcmVlKG0pOwotKwotKwly ZXR1cm4oZXJyc3RyKTsKLSt9Ci0rCi0rT01fdWludDMyCi0rbW1fZ3NzX2luZGljYXRlX21lY2hz KE9NX3VpbnQzMiAqbWlub3Jfc3RhdHVzLCBnc3NfT0lEX3NldCAqbWVjaF9zZXQpCi0rewotKwlz dHJ1Y3Qgc3NoYnVmICptID0gTlVMTDsKLSsJT01fdWludDMyIG1ham9yLG1pbm9yOwotKwlpbnQg Y291bnQ7Ci0rCWdzc19PSURfZGVzYyBvaWQ7Ci0rCXNpemVfdCBsZW5ndGg7Ci0rCWludCByOwot KwotKwlpZiAoKG0gPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hidWZf bmV3IGZhaWxlZCIpOwotKwotKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZkLCBN T05JVE9SX1JFUV9HU1NNRUNIUywgbSk7Ci0rCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBlY3QocG1v bml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX0FOU19HU1NNRUNIUywgbSk7Ci0rCWlmICgociA9IHNz aGJ1Zl9nZXRfdTMyKG0sICZtYWpvcikpICE9IDAgfHwKLSsJICAgIChyID0gc3NoYnVmX2dldF91 MzIobSwgJmNvdW50KSkgIT0gMCkKLSsJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKLSsK LSsJZ3NzX2NyZWF0ZV9lbXB0eV9vaWRfc2V0KCZtaW5vciwgbWVjaF9zZXQpOwotKwl3aGlsZShj b3VudC0tPjApIHsKLSsJICAgIGlmICgociA9IHNzaGJ1Zl9nZXRfc3RyaW5nKG0sICh1X2NoYXIg KiopJm9pZC5lbGVtZW50cywgJmxlbmd0aCkpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVmZmVy IGVycm9yIik7Ci0rCSAgICBvaWQubGVuZ3RoID0gbGVuZ3RoOwotKwkgICAgZ3NzX2FkZF9vaWRf c2V0X21lbWJlcigmbWlub3IsICZvaWQsIG1lY2hfc2V0KTsKLSsJfQotKwotKwlzc2hidWZfZnJl ZShtKTsKLSsKLSsJcmV0dXJuKG1ham9yKTsKLSt9Ci0rCi0raW50Ci0rbW1fc3NoX2dzc2FwaV9s b2NhbG5hbWUoY2hhciAqKmxuYW1lKQotK3sKLSsJc3RydWN0IHNzaGJ1ZiAqbSA9IE5VTEw7Ci0r CWludCByOwotKwotKwlpZiAoKG0gPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9m KCJzc2hidWZfbmV3IGZhaWxlZCIpOwotKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVj dmZkLCBNT05JVE9SX1JFUV9HU1NMT0NBTE5BTUUsIG0pOwotKwotKwlkZWJ1ZzNfZigid2FpdGlu ZyBmb3IgTU9OSVRPUl9BTlNfR1NTTE9DQUxOQU1FIik7Ci0rCW1tX3JlcXVlc3RfcmVjZWl2ZV9l eHBlY3QocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX0FOU19HU1NMT0NBTE5BTUUsCi0rCSAg ICBtKTsKLSsKLSsJaWYgKChyID0gc3NoYnVmX2dldF9jc3RyaW5nKG0sIGxuYW1lLCBOVUxMKSkg IT0gMCkKLSsJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKLSsKLSsJc3NoYnVmX2ZyZWUo bSk7Ci0rCWlmICgoKmxuYW1lID09IE5VTEwpIHx8ICgqbG5hbWVbMF0gPT0gJ1wwJykpIHsKLSsJ CWRlYnVnM19mKCJnc3NhcGkgaWRlbnRpdHkgbWFwcGluZyBmYWlsZWQiKTsKLSsJfSBlbHNlIHsK LSsJCWRlYnVnM19mKCJnc3NhcGkgaWRlbnRpdHkgbWFwcGVkIHRvICVzIiwgKmxuYW1lKTsKLSsJ fQotKwotKwlyZXR1cm4oMCk7Ci0rfQotKwotIE9NX3VpbnQzMgotIG1tX3NzaF9nc3NhcGlfc2ln bihHc3NjdHh0ICpjdHgsIGdzc19idWZmZXJfZGVzYyAqZGF0YSwgZ3NzX2J1ZmZlcl9kZXNjICpo YXNoKQotIHsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL21vbml0b3Jfd3JhcC5oIG9w ZW5zc2gtMTAuM3AxL21vbml0b3Jfd3JhcC5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9tb25p dG9yX3dyYXAuaAkyMDI2LTA3LTAxIDA5OjM4OjAwLjY0MjgzMDQxNyArMDIwMAotKysrIG9wZW5z c2gtMTAuM3AxL21vbml0b3Jfd3JhcC5oCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc4NDgzMTY1ICsw MjAwCi1AQCAtNzcsNiArNzcsMTAgQEAKLSBpbnQgbW1fc3NoX2dzc2FwaV91c2Vyb2soY2hhciAq dXNlciwgc3RydWN0IHBhc3N3ZCAqLCBpbnQga2V4KTsKLSBPTV91aW50MzIgbW1fc3NoX2dzc2Fw aV9jaGVja21pYyhHc3NjdHh0ICosIGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90KTsKLSBPTV91 aW50MzIgbW1fc3NoX2dzc2FwaV9zaWduKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVm ZmVyX3QpOwotK2ludCBtbV9zc2hfZ3NzYXBpX2xvY2FsbmFtZShjaGFyICoqdXNlcik7Ci0rT01f dWludDMyIG1tX2dzc19pbmRpY2F0ZV9tZWNocyhPTV91aW50MzIgKm1pbm9yX3N0YXR1cywKLSsg ICAgZ3NzX09JRF9zZXQgKm1lY2hfc2V0KTsKLStjaGFyICptbV9zc2hfZ3NzYXBpX2xhc3RfZXJy b3IoR3NzY3R4dCAqY3R4dCwgT01fdWludDMyICptYWosIE9NX3VpbnQzMiAqbWluKTsKLSBpbnQg bW1fc3NoX2dzc2FwaV91cGRhdGVfY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKik7Ci0gI2VuZGlm Ci0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9yZWFkY29uZi5jIG9wZW5zc2gtMTAu M3AxL3JlYWRjb25mLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3JlYWRjb25mLmMJMjAyNi0w Ny0wMSAwOTozODowMC45MTQzNDYyNTEgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9yZWFkY29u Zi5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc4NTY1MTAzICswMjAwCi1AQCAtMjk0MywxMSArMjk0 MywxMSBAQAotIAlpZiAob3B0aW9ucy0+cHVia2V5X2F1dGhlbnRpY2F0aW9uID09IC0xKQotIAkJ b3B0aW9ucy0+cHVia2V5X2F1dGhlbnRpY2F0aW9uID0gU1NIX1BVQktFWV9BVVRIX0FMTDsKLSAJ aWYgKG9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9PSAtMSkKLS0JCW9wdGlvbnMtPmdzc19h dXRoZW50aWNhdGlvbiA9IDA7Ci0rCQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAxOwot IAlpZiAob3B0aW9ucy0+Z3NzX2tleWV4ID09IC0xKQotLQkJb3B0aW9ucy0+Z3NzX2tleWV4ID0g MDsKLSsJCW9wdGlvbnMtPmdzc19rZXlleCA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3NfZGVsZWdf Y3JlZHMgPT0gLTEpCi0tCQlvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAwOwotKwkJb3B0aW9u cy0+Z3NzX2RlbGVnX2NyZWRzID0gMTsKLSAJaWYgKG9wdGlvbnMtPmdzc190cnVzdF9kbnMgPT0g LTEpCi0gCQlvcHRpb25zLT5nc3NfdHJ1c3RfZG5zID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19y ZW5ld2FsX3Jla2V5ID09IC0xKQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcmVhZGNv bmYuaCBvcGVuc3NoLTEwLjNwMS9yZWFkY29uZi5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9y ZWFkY29uZi5oCTIwMjYtMDctMDEgMDk6Mzg6MDAuMzIxNjM2MjMyICswMjAwCi0rKysgb3BlbnNz aC0xMC4zcDEvcmVhZGNvbmYuaAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3OTU2NTEwMiArMDIwMAot QEAgLTgwLDYgKzgwLDggQEAKLSAJY2hhciAgICpob3N0X2tleV9hbGlhczsJLyogaG9zdG5hbWUg YWxpYXMgZm9yIC5zc2gva25vd25faG9zdHMgKi8KLSAJY2hhciAgICpwcm94eV9jb21tYW5kOwkv KiBQcm94eSBjb21tYW5kIGZvciBjb25uZWN0aW5nIHRoZSBob3N0LiAqLwotIAljaGFyICAgKnVz ZXI7CQkvKiBVc2VyIHRvIGxvZyBpbiBhcy4gKi8KLSsJaW50ICAgICBpbXBsaWNpdDsJLyogTG9n aW4gdXNlciB3YXMgbm90IHNwZWNpZmllZC4KLSsJCQkJICAgU2VydmVyIG1heSBjaG9vc2UgYmFz ZWQgb24gYXV0aGN0eHQuICovCi0gCWludCAgICAgZXNjYXBlX2NoYXI7CS8qIEVzY2FwZSBjaGFy YWN0ZXI7IC0yID0gbm9uZSAqLwotIAotIAl1X2ludAludW1fc3lzdGVtX2hvc3RmaWxlczsJLyog UGF0aHMgZm9yIC9ldGMvc3NoL3NzaF9rbm93bl9ob3N0cyAqLwotZGlmZiAtTnVyIG9wZW5zc2gt MTAuM3AxLm9yaWcvc2VydmNvbmYuYyBvcGVuc3NoLTEwLjNwMS9zZXJ2Y29uZi5jCi0tLS0gb3Bl bnNzaC0xMC4zcDEub3JpZy9zZXJ2Y29uZi5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuOTE0NjM3ODUw ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc2VydmNvbmYuYwkyMDI2LTA3LTAxIDExOjQ2OjQy LjQ4Mjk4NjE4OCArMDIwMAotQEAgLTk2LDYgKzk2LDcgQEAKLSAJLyogUG9ydGFibGUtc3BlY2lm aWMgb3B0aW9ucyAqLwotIAlvcHRpb25zLT51c2VfcGFtID0gLTE7Ci0gCW9wdGlvbnMtPnBhbV9z ZXJ2aWNlX25hbWUgPSBOVUxMOwotKwlvcHRpb25zLT5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlID0g LTE7Ci0gCi0gCS8qIFN0YW5kYXJkIE9wdGlvbnMgKi8KLSAJb3B0aW9ucy0+bnVtX3BvcnRzID0g MDsKLUBAIC0xNDYsNiArMTQ3LDcgQEAKLSAJb3B0aW9ucy0+Z3NzX2NsZWFudXBfY3JlZHMgPSAt MTsKLSAJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19zdHJp Y3RfYWNjZXB0b3IgPSAtMTsKLSsJb3B0aW9ucy0+Z3NpX2FsbG93X2xpbWl0ZWRfcHJveHkgPSAt MTsKLSAJb3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPSBOVUxMOwotIAlvcHRpb25zLT5nc3Nfc3Rv cmVfcmVrZXkgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0gTlVMTDsKLUBA IC0zMjMsNiArMzI1LDggQEAKLSAJCW9wdGlvbnMtPnVzZV9wYW0gPSAwOwotIAlpZiAob3B0aW9u cy0+cGFtX3NlcnZpY2VfbmFtZSA9PSBOVUxMKQotIAkJb3B0aW9ucy0+cGFtX3NlcnZpY2VfbmFt ZSA9IHhzdHJkdXAoU1NIRF9QQU1fU0VSVklDRSk7Ci0rCWlmIChvcHRpb25zLT5wZXJtaXRfcGFt X3VzZXJfY2hhbmdlID09IC0xKQotKwkJb3B0aW9ucy0+cGVybWl0X3BhbV91c2VyX2NoYW5nZSA9 IDA7Ci0gCi0gCS8qIFN0YW5kYXJkIE9wdGlvbnMgKi8KLSAJaWYgKG9wdGlvbnMtPm51bV9ob3N0 X2tleV9maWxlcyA9PSAwKSB7Ci1AQCAtNDAwLDE1ICs0MDQsMTcgQEAKLSAJaWYgKG9wdGlvbnMt PmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUgPT0gLTEpCi0gCQlvcHRpb25zLT5rZXJiZXJvc191bmlx dWVfY2NhY2hlID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9PSAtMSkK LS0JCW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IDA7Ci0rCQlvcHRpb25zLT5nc3NfYXV0 aGVudGljYXRpb24gPSAxOwotIAlpZiAob3B0aW9ucy0+Z3NzX2tleWV4ID09IC0xKQotLQkJb3B0 aW9ucy0+Z3NzX2tleWV4ID0gMDsKLSsJCW9wdGlvbnMtPmdzc19rZXlleCA9IDE7Ci0gCWlmIChv cHRpb25zLT5nc3NfY2xlYW51cF9jcmVkcyA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19jbGVhbnVw X2NyZWRzID0gMTsKLSAJaWYgKG9wdGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9PSAtMSkKLSAJCW9w dGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3Nfc3RyaWN0X2Fj Y2VwdG9yID09IC0xKQotIAkJb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9IDE7Ci0rCWlm IChvcHRpb25zLT5nc2lfYWxsb3dfbGltaXRlZF9wcm94eSA9PSAtMSkKLSsJCW9wdGlvbnMtPmdz aV9hbGxvd19saW1pdGVkX3Byb3h5ID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19hbGxvd19zNHUy c2VsZiA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19hbGxvd19zNHUyc2VsZiA9IDA7Ci0gCWlmIChv cHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkgPT0gLTEpCi1AQCAtNTg4LDcgKzU5NCw3IEBACi0gdHlw ZWRlZiBlbnVtIHsKLSAJc0JhZE9wdGlvbiwJCS8qID09IHVua25vd24gb3B0aW9uICovCi0gCS8q IFBvcnRhYmxlLXNwZWNpZmljIG9wdGlvbnMgKi8KLS0Jc1VzZVBBTSwgc1BBTVNlcnZpY2VOYW1l LAotKwlzVXNlUEFNLCBzUEFNU2VydmljZU5hbWUsIHNQZXJtaXRQQU1Vc2VyQ2hhbmdlLAotIAkv KiBTdGFuZGFyZCBPcHRpb25zICovCi0gCXNQb3J0LCBzSG9zdEtleUZpbGUsIHNMb2dpbkdyYWNl VGltZSwKLSAJc1Blcm1pdFJvb3RMb2dpbiwgc0xvZ0ZhY2lsaXR5LCBzTG9nTGV2ZWwsIHNMb2dW ZXJib3NlLAotQEAgLTYxMCw2ICs2MTYsOCBAQAotIAlzQ2xpZW50QWxpdmVJbnRlcnZhbCwgc0Ns aWVudEFsaXZlQ291bnRNYXgsIHNBdXRob3JpemVkS2V5c0ZpbGUsCi0gCXNHc3NBbGxvd1M0VTJT ZWxmLCBzR3NzUHJveHlTNFUyU2VydmljZXMsCi0gCXNHc3NBdXRoZW50aWNhdGlvbiwgc0dzc0Ns ZWFudXBDcmVkcywgc0dzc0RlbGVnYXRlQ3JlZHMsIHNHc3NFbmFibGVrNXVzZXJzLCBzR3NzU3Ry aWN0QWNjZXB0b3IsCi0rCXNHc3NDcmVkc1BhdGgsCi0rCXNHc2lBbGxvd0xpbWl0ZWRQcm94eSwK LSAJc0dzc0luZGljYXRvcnMsIHNHc3NLZXlFeCwgc0dzc0tleEFsZ29yaXRobXMsIHNHc3NTdG9y ZVJla2V5LAotIAlzQWNjZXB0RW52LCBzU2V0RW52LCBzUGVybWl0VHVubmVsLAotIAlzTWF0Y2gs IHNQZXJtaXRPcGVuLCBzUGVybWl0TGlzdGVuLCBzRm9yY2VDb21tYW5kLCBzQ2hyb290RGlyZWN0 b3J5LAotQEAgLTY0NCw5ICs2NTIsMTEgQEAKLSAjaWZkZWYgVVNFX1BBTQotIAl7ICJ1c2VwYW0i LCBzVXNlUEFNLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgInBhbXNlcnZpY2VuYW1lIiwgc1BBTVNl cnZpY2VOYW1lLCBTU0hDRkdfQUxMIH0sCi0rCXsgInBlcm1pdHBhbXVzZXJjaGFuZ2UiLCBzUGVy bWl0UEFNVXNlckNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbHNlCi0gCXsgInVzZXBhbSIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJwYW1zZXJ2aWNlbmFtZSIsIHNV bnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJwZXJtaXRwYW11c2VyY2hhbmdlIiwgc1Vu c3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gI2VuZGlmCi0gCXsgInBhbWF1dGhlbnRpY2F0 aW9udmlha2JkaW50Iiwgc0RlcHJlY2F0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJLyogU3RhbmRh cmQgT3B0aW9ucyAqLwotQEAgLTcwMiw2ICs3MTIsMTIgQEAKLSAJeyAiZ3NzYXBpY2xlYW51cGNy ZWRlbnRpYWxzIiwgc0dzc0NsZWFudXBDcmVkcywgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3Nh cGljbGVhbnVwY3JlZHMiLCBzR3NzQ2xlYW51cENyZWRzLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsg Imdzc2FwaWRlbGVnYXRlY3JlZGVudGlhbHMiLCBzR3NzRGVsZWdhdGVDcmVkcywgU1NIQ0ZHX0dM T0JBTCB9LAotKwl7ICJnc3NhcGljcmVkZW50aWFsc3BhdGgiLCBzR3NzQ3JlZHNQYXRoLCBTU0hD RkdfR0xPQkFMIH0sCi0rI2lmZGVmIEdTSQotKwl7ICJnc2lhbGxvd2xpbWl0ZWRwcm94eSIsIHNH c2lBbGxvd0xpbWl0ZWRQcm94eSwgU1NIQ0ZHX0dMT0JBTCB9LAotKyNlbHNlCi0rCXsgImdzaWFs bG93bGltaXRlZHByb3h5Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0rI2VuZGlm Ci0gCXsgImdzc2FwaXN0cmljdGFjY2VwdG9yY2hlY2siLCBzR3NzU3RyaWN0QWNjZXB0b3IsIFNT SENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpa2V5ZXhjaGFuZ2UiLCBzR3NzS2V5RXgsIFNTSENG R19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpc3RvcmVjcmVkZW50aWFsc29ucmVrZXkiLCBzR3NzU3Rv cmVSZWtleSwgU1NIQ0ZHX0dMT0JBTCB9LAotQEAgLTcxNSw2ICs3MzEsOCBAQAotIAl7ICJnc3Nh cGljbGVhbnVwY3JlZGVudGlhbHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJ eyAiZ3NzYXBpY2xlYW51cGNyZWRzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0g CXsgImdzc2FwaWRlbGVnYXRlY3JlZGVudGlhbHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9C QUwgfSwKLSsJeyAiZ3NzYXBpY3JlZGVudGlhbHNwYXRoIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdf R0xPQkFMIH0sCi0rCXsgImdzaWFsbG93bGltaXRlZHByb3h5Iiwgc1Vuc3VwcG9ydGVkLCBTU0hD RkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0cmljdGFjY2VwdG9yY2hlY2siLCBzVW5zdXBwb3J0 ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpa2V5ZXhjaGFuZ2UiLCBzVW5zdXBwb3J0 ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpc3RvcmVjcmVkZW50aWFsc29ucmVrZXki LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC03OTEsNiArODA5LDggQEAKLSAJ eyAicGVybWl0bGlzdGVuIiwgc1Blcm1pdExpc3RlbiwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJmb3Jj ZWNvbW1hbmQiLCBzRm9yY2VDb21tYW5kLCBTU0hDRkdfQUxMIH0sCi0gCXsgImNocm9vdGRpcmVj dG9yeSIsIHNDaHJvb3REaXJlY3RvcnksIFNTSENGR19BTEwgfSwKLSsJeyAiZGlzYWJsZXVzYWdl c3RhdHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUx9LAotKwl7ICJ1c2FnZXN0YXRzdGFy Z2V0cyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTH0sCi0gCXsgImhvc3RjZXJ0aWZpY2F0 ZSIsIHNIb3N0Q2VydGlmaWNhdGUsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAicmV2b2tlZGtleXMi LCBzUmV2b2tlZEtleXMsIFNTSENGR19BTEwgfSwKLSAJeyAidHJ1c3RlZHVzZXJjYWtleXMiLCBz VHJ1c3RlZFVzZXJDQUtleXMsIFNTSENGR19BTEwgfSwKLUBAIC0xNDcyLDYgKzE0OTIsMTAgQEAK LSAJCQkqY2hhcnB0ciA9IHhzdHJkdXAoYXJnKTsKLSAJCWJyZWFrOwotIAotKwljYXNlIHNQZXJt aXRQQU1Vc2VyQ2hhbmdlOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPnBlcm1pdF9wYW1fdXNlcl9j aGFuZ2U7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0gCS8qIFN0YW5kYXJkIE9wdGlvbnMgKi8K LSAJY2FzZSBzQmFkT3B0aW9uOgotIAkJZ290byBvdXQ7Ci1AQCAtMTczNSw2ICsxNzU5LDEwIEBA Ci0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzOwotIAkJZ290byBwYXJzZV9m bGFnOwotIAotKwljYXNlIHNHc3NDcmVkc1BhdGg6Ci0rCQljaGFycHRyID0gJm9wdGlvbnMtPmdz c19jcmVkc19wYXRoOwotKwkJZ290byBwYXJzZV9maWxlbmFtZTsKLSsKLSAJY2FzZSBzR3NzU3Ry aWN0QWNjZXB0b3I6Ci0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvcjsK LSAJCWdvdG8gcGFyc2VfZmxhZzsKLUBAIC0xODAyLDYgKzE4MzAsMTIgQEAKLSAJCX0KLSAJCWJy ZWFrOwotIAotKyNpZmRlZiBHU0kKLSsJY2FzZSBzR3NpQWxsb3dMaW1pdGVkUHJveHk6Ci0rCQlp bnRwdHIgPSAmb3B0aW9ucy0+Z3NpX2FsbG93X2xpbWl0ZWRfcHJveHk7Ci0rCQlnb3RvIHBhcnNl X2ZsYWc7Ci0rI2VuZGlmCi0rCi0gCWNhc2Ugc1Bhc3N3b3JkQXV0aGVudGljYXRpb246Ci0gCQlp bnRwdHIgPSAmb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb247Ci0gCQlnb3RvIHBhcnNl X2ZsYWc7Ci1AQCAtMzEwMyw2ICszMTM3LDcgQEAKLSAJTV9DUF9JTlRPUFQocGFzc3dvcmRfYXV0 aGVudGljYXRpb24pOwotIAlNX0NQX0lOVE9QVChnc3NfYXV0aGVudGljYXRpb24pOwotIAlNX0NQ X0lOVE9QVChnc3NfYWxsb3dfczR1MnNlbGYpOwotKwlNX0NQX0lOVE9QVChnc3NfZGVsZWdfY3Jl ZHMpOwotIAlNX0NQX0lOVE9QVChwdWJrZXlfYXV0aGVudGljYXRpb24pOwotIAlNX0NQX0lOVE9Q VChwdWJrZXlfYXV0aF9vcHRpb25zKTsKLSAJTV9DUF9JTlRPUFQoa2VyYmVyb3NfYXV0aGVudGlj YXRpb24pOwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2VydmNvbmYuaCBvcGVuc3No LTEwLjNwMS9zZXJ2Y29uZi5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zZXJ2Y29uZi5oCTIw MjYtMDctMDEgMDk6Mzg6MDAuODY4NjUwODMzICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc2Vy dmNvbmYuaAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4MTM1ODQ5NyArMDIwMAotQEAgLTE1NiwxMCAr MTU2LDEyIEBACi0gCQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNzaW9uIGNjYWNoZSAqLwot IAlpbnQJdXNlX2t1c2Vyb2s7Ci0gCWludAkJZW5hYmxlX2s1dXNlcnM7Ci0rCWludCAgICAgZ3Np X2FsbG93X2xpbWl0ZWRfcHJveHk7CS8qIElmIHRydWUsIGFjY2VwdCBsaW1pdGVkIHByb3hpZXMg Ki8KLSAJaW50ICAgICBnc3NfYXV0aGVudGljYXRpb247CS8qIElmIHRydWUsIHBlcm1pdCBHU1NB UEkgYXV0aGVudGljYXRpb24gKi8KLSAJaW50ICAgICBnc3Nfa2V5ZXg7CQkvKiBJZiB0cnVlLCBw ZXJtaXQgR1NTQVBJIGtleSBleGNoYW5nZSAqLwotIAlpbnQgICAgIGdzc19jbGVhbnVwX2NyZWRz OwkvKiBJZiB0cnVlLCBkZXN0cm95IGNyZWQgY2FjaGUgb24gbG9nb3V0ICovCi0gCWludCAgICAg Z3NzX2RlbGVnX2NyZWRzOwkvKiBJZiB0cnVlLCBhY2NlcHQgZGVsZWdhdGVkIEdTUyBjcmVkZW50 aWFscyAqLwotKwljaGFyICAgKmdzc19jcmVkc19wYXRoOwkJLyogVXNlIG5vbi1kZWZhdWx0IGNy ZWRlbnRpYWxzIHBhdGggKi8KLSAJaW50ICAgICBnc3Nfc3RyaWN0X2FjY2VwdG9yOwkvKiBJZiB0 cnVlLCByZXN0cmljdCB0aGUgR1NTQVBJIGFjY2VwdG9yIG5hbWUgKi8KLSAJaW50ICAgICBnc3Nf YWxsb3dfczR1MnNlbGY7IC8qIDA9bm8sIElOVF9NQVg9eWVzIChHU1NfQ19JTkRFRklOSVRFKSwg PjA9dGlja2V0IGxpZmV0aW1lIHMgKi8KLSAJY2hhciAgKipnc3NfcHJveHlfc2VydmljZXM7IC8q IFM0VTJQcm94eSB0YXJnZXQgc2VydmljZSBwcmluY2lwYWxzICovCi1AQCAtMjI3LDYgKzIyOSw3 IEBACi0gCi0gCWludAl1c2VfcGFtOwkJLyogRW5hYmxlIGF1dGggdmlhIFBBTSAqLwotIAljaGFy ICAgKnBhbV9zZXJ2aWNlX25hbWU7Ci0rCWludAlwZXJtaXRfcGFtX3VzZXJfY2hhbmdlOwkvKiBB bGxvdyBQQU0gdG8gY2hhbmdlIHVzZXIgbmFtZSAqLwotIAotIAlpbnQJcGVybWl0X3R1bjsKLSAK LWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC4xIG9wZW5zc2gtMTAuM3AxL3NzaC4x Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2guMQkyMDI2LTA3LTAxIDA5OjM4OjAwLjMyMjQz NzI5MiArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NzaC4xCTIwMjYtMDctMDEgMTA6Mzk6NDMu NTgxODQwMDkyICswMjAwCi1AQCAtMTUzMSw2ICsxNTMxLDE4IEBACi0gb24gdG8gbmV3IGNvbm5l Y3Rpb25zKS4KLSAuSXQgRXYgVVNFUgotIFNldCB0byB0aGUgbmFtZSBvZiB0aGUgdXNlciBsb2dn aW5nIGluLgotKy5JdCBFdiBYNTA5X0NFUlRfRElSCi0rVXNlZCBmb3IgR1NJIGF1dGhlbnRpY2F0 aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQotK0NBIGNlcnRp ZmljYXRlcyBkaXJlY3RvcnkuCi0rLkl0IEV2IFg1MDlfVVNFUl9DRVJUCi0rVXNlZCBmb3IgR1NJ IGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRo ZQotK2NlcnRpZmljYXRlIHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBzZXJ2 ZXIuCi0rLkl0IEV2IFg1MDlfVVNFUl9LRVkKLStVc2VkIGZvciBHU0kgYXV0aGVudGljYXRpb24u IFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCi0rcHJpdmF0ZSBrZXkg dG8gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhlIHNlcnZlci4KLSsuSXQgRXYgWDUw OV9VU0VSX1BST1hZCi0rVXNlZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBu b24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQotK3Byb3h5IGNyZWRlbnRpYWwgdG8gYmUgdXNl ZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhlIHNlcnZlci4KLSAuRWwKLSAuUHAKLSBBZGRpdGlv bmFsbHksCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2guYyBvcGVuc3NoLTEwLjNw MS9zc2guYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoLmMJMjAyNi0wNy0wMSAwOTozODow MC44ODY0NjU5MzIgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2guYwkyMDI2LTA3LTAxIDEw OjM5OjQzLjU4MjQ2NTc1MSArMDIwMAotQEAgLTU3OSw2ICs1NzksMzggQEAKLSAJCQlmYXRhbCgi Q2FuJ3Qgb3BlbiB1c2VyIGNvbmZpZyBmaWxlICUuMTAwczogIgotIAkJCSAgICAiJS4xMDBzIiwg Y29uZmlnLCBzdHJlcnJvcihlcnJubykpOwotIAl9IGVsc2UgewotKwkgICAgLyoKLSsJICAgICAq IFNpbmNlIHRoZSBjb25maWcgZmlsZSBwYXJzaW5nIGNvZGUgYWJvcnRzIGlmIGl0IHNlZXMKLSsJ ICAgICAqIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUsIGFsbG93IHVzZXJzIHRvIHB1dAot KwkgICAgICogb3B0aW9ucyBzcGVjaWZpYyB0byBjb21waWxlLXRpbWUgYWRkLW9ucyBpbiBhbHRl cm5hdGUKLSsJICAgICAqIGNvbmZpZyBmaWxlcyBzbyB0aGVpciBwcmltYXJ5IGNvbmZpZyBmaWxl IHdpbGwKLSsJICAgICAqIGludGVyb3BlcmF0ZSBTU0ggdmVyc2lvbnMgdGhhdCBkb24ndCBzdXBw b3J0IHRob3NlCi0rCSAgICAgKiBvcHRpb25zLgotKwkgICAgICovCi0rI2lmZGVmIEdTU0FQSQot KwkJciA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzLyVzLmdzc2FwaSIsIHB3LT5wd19k aXIsCi0rCQkgICAgX1BBVEhfU1NIX1VTRVJfQ09ORkZJTEUpOwotKwkJaWYgKHIgPiAwICYmIChz aXplX3QpciA8IHNpemVvZihidWYpKQotKwkJCSh2b2lkKXJlYWRfY29uZmlnX2ZpbGUoYnVmLCBw dywgaG9zdCwgaG9zdF9uYW1lLCBjbWQsCi0rCQkJICAgICZvcHRpb25zLCBTU0hDT05GX0NIRUNL UEVSTSB8IFNTSENPTkZfVVNFUkNPTkYgfAotKwkJCSAgICAoZmluYWxfcGFzcyA/IFNTSENPTkZf RklOQUwgOiAwKSwgd2FudF9maW5hbF9wYXNzKTsKLSsjaWZkZWYgR1NJCi0rCQlyID0gc25wcmlu dGYoYnVmLCBzaXplb2YgYnVmLCAiJXMvJXMuZ3NpIiwgcHctPnB3X2RpciwKLSsJCSAgICBfUEFU SF9TU0hfVVNFUl9DT05GRklMRSk7Ci0rCQlpZiAociA+IDAgJiYgKHNpemVfdClyIDwgc2l6ZW9m KGJ1ZikpCi0rCQkJKHZvaWQpcmVhZF9jb25maWdfZmlsZShidWYsIHB3LCBob3N0LCBob3N0X25h bWUsIGNtZCwKLSsJCQkgICAgJm9wdGlvbnMsIFNTSENPTkZfQ0hFQ0tQRVJNIHwgU1NIQ09ORl9V U0VSQ09ORiB8Ci0rCQkJICAgIChmaW5hbF9wYXNzID8gU1NIQ09ORl9GSU5BTCA6IDApLCB3YW50 X2ZpbmFsX3Bhc3MpOwotKyNlbmRpZgotKyNpZiBkZWZpbmVkKEtSQjUpCi0rCQlyID0gc25wcmlu dGYoYnVmLCBzaXplb2YgYnVmLCAiJXMvJXMua3JiIiwgcHctPnB3X2RpciwKLSsJCSAgICBfUEFU SF9TU0hfVVNFUl9DT05GRklMRSk7Ci0rCQlpZiAociA+IDAgJiYgKHNpemVfdClyIDwgc2l6ZW9m KGJ1ZikpCi0rCQkJKHZvaWQpcmVhZF9jb25maWdfZmlsZShidWYsIHB3LCBob3N0LCBob3N0X25h bWUsIGNtZCwKLSsJCQkgICAgJm9wdGlvbnMsIFNTSENPTkZfQ0hFQ0tQRVJNIHwgU1NIQ09ORl9V U0VSQ09ORiB8Ci0rCQkJICAgIChmaW5hbF9wYXNzID8gU1NIQ09ORl9GSU5BTCA6IDApLCB3YW50 X2ZpbmFsX3Bhc3MpOwotKyNlbmRpZgotKyNlbmRpZgotIAkJciA9IHNucHJpbnRmKGJ1Ziwgc2l6 ZW9mIGJ1ZiwgIiVzLyVzIiwgcHctPnB3X2RpciwKLSAJCSAgICBfUEFUSF9TU0hfVVNFUl9DT05G RklMRSk7Ci0gCQlpZiAociA+IDAgJiYgKHNpemVfdClyIDwgc2l6ZW9mKGJ1ZikpCi1AQCAtMTI5 Nyw2ICsxMzI5LDkgQEAKLSAJaWYgKG9wdGlvbnMudXNlciA9PSBOVUxMKSB7Ci0gCQl1c2VyX3dh c19kZWZhdWx0ID0gMTsKLSAJCW9wdGlvbnMudXNlciA9IHhzdHJkdXAocHctPnB3X25hbWUpOwot KwkJb3B0aW9ucy5pbXBsaWNpdCA9IDE7Ci0rCX0gZWxzZSB7Ci0rCQlvcHRpb25zLmltcGxpY2l0 ID0gMDsKLSAJfQotIAotIAkvKgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoX2Nv bmZpZyBvcGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9z c2hfY29uZmlnCTIwMjYtMDctMDEgMDk6Mzg6MDAuMzIyNzY4NTg4ICswMjAwCi0rKysgb3BlbnNz aC0xMC4zcDEvc3NoX2NvbmZpZwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4MjcyNTQ5NiArMDIwMAot QEAgLTIyLDkgKzIyLDkgQEAKLSAjICAgRm9yd2FyZFgxMSBubwotICMgICBQYXNzd29yZEF1dGhl bnRpY2F0aW9uIHllcwotICMgICBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubwotLSMgICBHU1NB UElBdXRoZW50aWNhdGlvbiBubwotLSMgICBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIG5vCi0t IyAgIEdTU0FQSUtleUV4Y2hhbmdlIG5vCi0rIyAgIEdTU0FQSUF1dGhlbnRpY2F0aW9uIHllcwot KyMgICBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIHllcwotKyMgICBHU1NBUElLZXlFeGNoYW5n ZSB5ZXMKLSAjICAgR1NTQVBJVHJ1c3RETlMgbm8KLSAjICAgQmF0Y2hNb2RlIG5vCi0gIyAgIENo ZWNrSG9zdElQIG5vCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hfY29uZmlnLjUg b3BlbnNzaC0xMC4zcDEvc3NoX2NvbmZpZy41Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hf Y29uZmlnLjUJMjAyNi0wNy0wMSAwOTozODowMC44ODY2MTAxNzAgKzAyMDAKLSsrKyBvcGVuc3No LTEwLjNwMS9zc2hfY29uZmlnLjUJMjAyNi0wNy0wMSAxMDozOTo0My41ODMyMzI0MzggKzAyMDAK LUBAIC01Miw2ICs1MiwxMiBAQAotIHVzZXIncyBjb25maWd1cmF0aW9uIGZpbGUKLSAuUHEgUGEg fi8uc3NoL2NvbmZpZwotIC5JdAotK0dTU0FQSSBjb25maWd1cmF0aW9uIGZpbGUKLSsuUHEgUGEg JEhPTUUvLnNzaC9jb25maWcuZ3NzYXBpCi0rLkl0Ci0rS2VyYmVyb3MgY29uZmlndXJhdGlvbiBm aWxlCi0rLlBxIFBhICRIT01FLy5zc2gvY29uZmlnLmtyYgotKy5JdAotIHN5c3RlbS13aWRlIGNv bmZpZ3VyYXRpb24gZmlsZQotIC5QcSBQYSAvZXRjL3NzaC9zc2hfY29uZmlnCi0gLkVsCi1AQCAt OTY5LDcgKzk3NSw3IEBACi0gLkl0IENtIEdTU0FQSUF1dGhlbnRpY2F0aW9uCi0gU3BlY2lmaWVz IHdoZXRoZXIgdXNlciBhdXRoZW50aWNhdGlvbiBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4K LSBUaGUgZGVmYXVsdCBpcwotLS5DbSBubyAuCi0rLkNtIHllcyAuCi0gLkl0IENtIEdTU0FQSUNs aWVudElkZW50aXR5Ci0gSWYgc2V0LCBzcGVjaWZpZXMgdGhlIEdTU0FQSSBjbGllbnQgaWRlbnRp dHkgdGhhdCBzc2ggc2hvdWxkIHVzZSB3aGVuCi0gY29ubmVjdGluZyB0byB0aGUgc2VydmVyLiBU aGUgZGVmYXVsdCBpcyB1bnNldCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGVmYXVsdAotQEAgLTk3 NywxMiArOTgzLDEyIEBACi0gLkl0IENtIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMKLSBGb3J3 YXJkIChkZWxlZ2F0ZSkgY3JlZGVudGlhbHMgdG8gdGhlIHNlcnZlci4KLSBUaGUgZGVmYXVsdCBp cwotLS5DbSBubyAuCi0rLkNtIHllcyAuCi0gLkl0IENtIEdTU0FQSUtleUV4Y2hhbmdlCi0gU3Bl Y2lmaWVzIHdoZXRoZXIga2V5IGV4Y2hhbmdlIGJhc2VkIG9uIEdTU0FQSSBtYXkgYmUgdXNlZC4g V2hlbiB1c2luZwotIEdTU0FQSSBrZXkgZXhjaGFuZ2UgdGhlIHNlcnZlciBuZWVkIG5vdCBoYXZl IGEgaG9zdCBrZXkuCi0gVGhlIGRlZmF1bHQgaXMKLS0uRHEgbm8gLgotKy5EcSB5ZXMgLgotIC5J dCBDbSBHU1NBUElSZW5ld2FsRm9yY2VzUmVrZXkKLSBJZiBzZXQgdG8KLSAuRHEgeWVzCi1AQCAt MTY0Niw3ICsxNjUyLDcgQEAKLSAuQ20gcGFzc3dvcmQgKSAuCi0gVGhlIGRlZmF1bHQgaXM6Ci0g LkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50Ci0tZ3NzYXBpLXdpdGgtbWljLGhvc3RiYXNlZCxw dWJsaWNrZXksCi0rZ3NzYXBpLWtleWV4LGdzc2FwaS13aXRoLW1pYyxob3N0YmFzZWQscHVibGlj a2V5LAotIGtleWJvYXJkLWludGVyYWN0aXZlLHBhc3N3b3JkCi0gLkVkCi0gLkl0IENtIFByb3h5 Q29tbWFuZAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoY29ubmVjdDIuYyBvcGVu c3NoLTEwLjNwMS9zc2hjb25uZWN0Mi5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25u ZWN0Mi5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuODEyMjc4NzE5ICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvc3NoY29ubmVjdDIuYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4Mzg2NzAzMiArMDIwMAot QEAgLTg2Myw2ICs4NjMsMTEgQEAKLSAJZ3NzX09JRCBtZWNoID0gTlVMTDsKLSAJY2hhciAqZ3Nz X2hvc3QgPSBOVUxMOwotIAotKwlpZiAoIW9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uKSB7Ci0r CQl2ZXJib3NlKCJHU1NBUEkgYXV0aGVudGljYXRpb24gZGlzYWJsZWQuIik7Ci0rCQlyZXR1cm4g MDsKLSsJfQotKwotIAlpZiAob3B0aW9ucy5nc3Nfc2VydmVyX2lkZW50aXR5KSB7Ci0gCQlnc3Nf aG9zdCA9IHhzdHJkdXAob3B0aW9ucy5nc3Nfc2VydmVyX2lkZW50aXR5KTsKLSAJfSBlbHNlIGlm IChvcHRpb25zLmdzc190cnVzdF9kbnMpIHsKLUBAIC05NzEsNyArOTc2LDggQEAKLSAKLSAJaWYg KHN0YXR1cyA9PSBHU1NfU19DT01QTEVURSkgewotIAkJLyogc2VuZCBlaXRoZXIgY29tcGxldGUg b3IgTUlDLCBkZXBlbmRpbmcgb24gbWVjaGFuaXNtICovCi0tCQlpZiAoIShmbGFncyAmIEdTU19D X0lOVEVHX0ZMQUcpKSB7Ci0rCQlpZiAoc3RyY21wKGF1dGhjdHh0LT5tZXRob2QtPm5hbWUsICJn c3NhcGkiKSA9PSAwIHx8Ci0rCQkgICAgIShmbGFncyAmIEdTU19DX0lOVEVHX0ZMQUcpKSB7Ci0g CQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwKLSAJCQkgICAgU1NIMl9NU0dfVVNFUkFVVEhf R1NTQVBJX0VYQ0hBTkdFX0NPTVBMRVRFKSkgIT0gMCB8fAotIAkJCSAgICAociA9IHNzaHBrdF9z ZW5kKHNzaCkpICE9IDApCi1AQCAtMTEzOCw2ICsxMTQ0LDIwIEBACi0gCXJldHVybiByOwotIH0K LSAKLSsjaWZkZWYgR1NJCi0rZXh0ZXJuCi0rY29uc3QgZ3NzX09JRF9kZXNjICogY29uc3QgZ3Nz X21lY2hfZ2xvYnVzX2dzc2FwaV9vcGVuc3NsOwotK2V4dGVybgotK2NvbnN0IGdzc19PSURfZGVz YyAqIGNvbnN0IGdzc19tZWNoX2dsb2J1c19nc3NhcGlfb3BlbnNzbF9taWN2MjsKLSsjZGVmaW5l IGlzX2dzaV9vaWQob2lkKSBcCi0rICAoKG9pZC0+bGVuZ3RoID09IGdzc19tZWNoX2dsb2J1c19n c3NhcGlfb3BlbnNzbC0+bGVuZ3RoICYmIFwKLSsgICAgKG1lbWNtcChvaWQtPmVsZW1lbnRzLCBn c3NfbWVjaF9nbG9idXNfZ3NzYXBpX29wZW5zc2wtPmVsZW1lbnRzLCBcCi0rCSAgICBvaWQtPmxl bmd0aCkgPT0gMCkpIHx8IFwKLSsgICAob2lkLT5sZW5ndGggPT0gZ3NzX21lY2hfZ2xvYnVzX2dz c2FwaV9vcGVuc3NsX21pY3YyLT5sZW5ndGggJiYgXAotKyAgICAobWVtY21wKG9pZC0+ZWxlbWVu dHMsIGdzc19tZWNoX2dsb2J1c19nc3NhcGlfb3BlbnNzbF9taWN2Mi0+ZWxlbWVudHMsIFwKLSsJ ICAgIG9pZC0+bGVuZ3RoKSA9PSAwKSkpCi0rI2VuZGlmCi0rCi0gaW50Ci0gdXNlcmF1dGhfZ3Nz a2V5ZXgoc3RydWN0IHNzaCAqc3NoKQotIHsKLUBAIC0xMTYwLDYgKzExODAsMTIgQEAKLSAJaWYg KChiID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotIAkJZmF0YWxfZigic3NoYnVmX25ldyBmYWls ZWQiKTsKLSAKLSsjaWZkZWYgR1NJCi0rCWlmIChvcHRpb25zLmltcGxpY2l0ICYmIGlzX2dzaV9v aWQoZ3NzX2tleF9jb250ZXh0LT5vaWQpKQotKwkJc3NoX2dzc2FwaV9idWlsZG1pYyhiLCAiIiwg YXV0aGN0eHQtPnNlcnZpY2UsCi0rCQkgICAgImdzc2FwaS1rZXlleCIsIHNzaC0+a2V4LT5zZXNz aW9uX2lkKTsKLSsJZWxzZQotKyNlbmRpZgotIAlzc2hfZ3NzYXBpX2J1aWxkbWljKGIsIGF1dGhj dHh0LT5zZXJ2ZXJfdXNlciwgYXV0aGN0eHQtPnNlcnZpY2UsCi0gCSAgICAiZ3NzYXBpLWtleWV4 Iiwgc3NoLT5rZXgtPnNlc3Npb25faWQpOwotIAotQEAgLTExNzMsNyArMTE5OSw5IEBACi0gCX0K LSAKLSAJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfVVNFUkFVVEhfUkVRVUVT VCkpICE9IDAgfHwKLS0JICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgYXV0aGN0eHQt PnNlcnZlcl91c2VyKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3No LAotKwkJKG9wdGlvbnMuaW1wbGljaXQgJiYgaXNfZ3NpX29pZChnc3Nfa2V4X2NvbnRleHQtPm9p ZCkpID8KLSsJCSIiIDogYXV0aGN0eHQtPnNlcnZlcl91c2VyKSkgIT0gMCB8fAotIAkgICAgKHIg PSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBhdXRoY3R4dC0+c2VydmljZSkpICE9IDAgfHwKLSAJ ICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgYXV0aGN0eHQtPm1ldGhvZC0+bmFtZSkp ICE9IDAgfHwKLSAJICAgIChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBtaWMudmFsdWUsIG1p Yy5sZW5ndGgpKSAhPSAwIHx8Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLjgg b3BlbnNzaC0xMC4zcDEvc3NoZC44Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLjgJMjAy Ni0wNy0wMSAwOTozODowMC4zNzU5ODQxNzQgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hk LjgJMjAyNi0wNy0wMSAxMDozOTo0My41ODQ0MTI3NDQgKzAyMDAKLUBAIC04NDAsNiArODQwLDI5 IEBACi0gIyBBIENBIGtleSwgYWNjZXB0ZWQgZm9yIGFueSBob3N0IGluICoubXlkb21haW4uY29t IG9yICoubXlkb21haW4ub3JnCi0gQGNlcnQtYXV0aG9yaXR5ICoubXlkb21haW4ub3JnLCoubXlk b21haW4uY29tIHNzaC1yc2EgQUFBQUI1Vy4uLgotIC5FZAotKy5TaCBFTlZJUk9OTUVOVAotKy5O bQotK3dpbGwgbm9ybWFsbHkgc2V0IHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVz OgotKy5CbCAtdGFnIC13aWR0aCAiU1NIX09SSUdJTkFMX0NPTU1BTkQiCi0rLkl0IEV2IEdSSURN QVAKLStBcHBsaWVzIHRvIEdTSSBhdXRoZW50aWNhdGlvbi9hdXRob3JpemF0aW9uLiBTcGVjaWZp ZXMgdGhlIGxvY2F0aW9uIG9mIHRoZQotK2dyaWRtYXBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0 aGUgZ3JpZG1hcCBmaWxlIGlzIGFzc3VtZWQgdG8gYmUgYXZhaWxhYmxlIGF0Ci0rL2V0Yy9ncmlk LXNlY3VyaXR5L2dyaWQtbWFwZmlsZSBmb3Igc2VydmljZXMgcnVubmluZyBhcyByb290IGFuZCBh dAotK0hPTUUvLmdyaWRtYXAgZm9yIHNlcnZpY2VzIHJ1bm5pbmcgYXMgbm9uLXJvb3Qgd2hlcmUg SE9NRSBpcyB0aGUgaG9tZSBkaXJlY3RvcnkKLStvZiB0aGUgZWZmZWN0aXZlIHVzZXIgZnJvbSB0 aGUgcGFzc3dvcmQgZmlsZSBlbnRyeS4KLSsuSXQgRXYgWDUwOV9DRVJUX0RJUgotK1VzZWQgZm9y IEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZv ciB0aGUKLStDQSBjZXJ0aWZpY2F0ZXMgZGlyZWN0b3J5LgotKy5JdCBFdiBYNTA5X1VTRVJfQ0VS VAotK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJk IGxvY2F0aW9uIGZvciB0aGUKLStjZXJ0aWZpY2F0ZSB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNh dGlvbiB0byB0aGUgY2xpZW50LgotKy5JdCBFdiBYNTA5X1VTRVJfS0VZCi0rVXNlZCBmb3IgR1NJ IGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRo ZQotK3ByaXZhdGUga2V5IHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBjbGll bnQuCi0rLkl0IEV2IFg1MDlfVVNFUl9QUk9YWQotK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlv bi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKLStwcm94eSBjcmVk ZW50aWFsIHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBjbGllbnQuCi0rLkVs Ci0gLlNoIEZJTEVTCi0gLkJsIC10YWcgLXdpZHRoIERzIC1jb21wYWN0Ci0gLkl0IFBhIH4vLmh1 c2hsb2dpbgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZF9jb25maWcgb3BlbnNz aC0xMC4zcDEvc3NoZF9jb25maWcKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGRfY29uZmln CTIwMjYtMDctMDEgMDk6Mzg6MDAuNDQxOTU0MTM4ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEv c3NoZF9jb25maWcJMjAyNi0wNy0wMSAxMDozOTo0My41ODQ4MDc5ODggKzAyMDAKLUBAIC03OCwx MCArNzgsMTEgQEAKLSAjS2VyYmVyb3NVc2VLdXNlcm9rIHllcwotIAotICMgR1NTQVBJIG9wdGlv bnMKLS0jR1NTQVBJQXV0aGVudGljYXRpb24gbm8KLSsjR1NTQVBJQXV0aGVudGljYXRpb24geWVz Ci0rI0dTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMgeWVzCi0gI0dTU0FQSUNsZWFudXBDcmVkZW50 aWFscyB5ZXMKLSAjR1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjayB5ZXMKLS0jR1NTQVBJS2V5RXhj aGFuZ2Ugbm8KLSsjR1NTQVBJS2V5RXhjaGFuZ2UgeWVzCi0gI0dTU0FQSUVuYWJsZWs1dXNlcnMg bm8KLSAKLSAjIFNldCB0aGlzIHRvICd5ZXMnIHRvIGVuYWJsZSBQQU0gYXV0aGVudGljYXRpb24s IGFjY291bnQgcHJvY2Vzc2luZywKLUBAIC05Nyw2ICs5OCwxMCBAQAotICMgcHJvYmxlbXMuCi0g I1VzZVBBTSBubwotIAotKyMgU2V0IHRvICd5ZXMnIHRvIGFsbG93IHRoZSBQQU0gc3RhY2sgdG8g Y2hhbmdlIHRoZSB1c2VyIG5hbWUgZHVyaW5nCi0rIyBjYWxscyB0byBhdXRoZW50aWNhdGlvbgot KyNQZXJtaXRQQU1Vc2VyQ2hhbmdlIG5vCi0rCi0gI0FsbG93QWdlbnRGb3J3YXJkaW5nIHllcwot ICNBbGxvd1RjcEZvcndhcmRpbmcgeWVzCi0gI0dhdGV3YXlQb3J0cyBubwotZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcvc3NoZF9jb25maWcuNSBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZp Zy41Ci0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkX2NvbmZpZy41CTIwMjYtMDctMDEgMDk6 Mzg6MDAuODY5MDE5MDcyICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoZF9jb25maWcuNQky MDI2LTA3LTAxIDEwOjM5OjQzLjU4NTI0NjA4OSArMDIwMAotQEAgLTczNiwxNSArNzM2LDMwIEBA Ci0gdG8gYWxsb3cgdGhlIGNsaWVudCB0byBzZWxlY3QgdGhlIGFkZHJlc3MgdG8gd2hpY2ggdGhl IGZvcndhcmRpbmcgaXMgYm91bmQuCi0gVGhlIGRlZmF1bHQgaXMKLSAuQ20gbm8gLgotKy5JdCBD bSBHU0lBbGxvd0xpbWl0ZWRQcm94eQotK1NwZWNpZmllcyB3aGV0aGVyIHRvIGFjY2VwdCBsaW1p dGVkIHByb3h5IGNyZWRlbnRpYWxzIGZvciBhdXRoZW50aWNhdGlvbi4KLStUaGUgZGVmYXVsdCBp cwotKy5DbSBubyAuCi0gLkl0IENtIEdTU0FQSUF1dGhlbnRpY2F0aW9uCi0gU3BlY2lmaWVzIHdo ZXRoZXIgdXNlciBhdXRoZW50aWNhdGlvbiBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4KLSBU aGUgZGVmYXVsdCBpcwotLS5DbSBubyAuCi0rLkNtIHllcyAuCi0gLkl0IENtIEdTU0FQSUNsZWFu dXBDcmVkZW50aWFscwotIFNwZWNpZmllcyB3aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgZGVzdHJv eSB0aGUgdXNlcidzIGNyZWRlbnRpYWxzIGNhY2hlCi0gb24gbG9nb3V0LgotIFRoZSBkZWZhdWx0 IGlzCi0gLkNtIHllcyAuCi0rLkl0IENtIEdTU0FQSUNyZWRlbnRpYWxzUGF0aAotK0lmIHNwZWNp ZmllZCwgdGhlIGRlbGVnYXRlZCBHU1NBUEkgY3JlZGVudGlhbCBpcyBzdG9yZWQgaW4gdGhlCi0r Z2l2ZW4gcGF0aCwgb3ZlcndyaXRpbmcgYW55IGV4aXN0aW5nIGNyZWRlbnRpYWxzLgotK1BhdGhz IGNhbiBiZSBzcGVjaWZpZWQgd2l0aCBzeW50YXggc2ltaWxhciB0byB0aGUgQXV0aG9yaXplZEtl eXNGaWxlCi0rb3B0aW9uIChpLmUuLCBhY2NlcHRpbmcgJWggYW5kICV1IHRva2VucykuCi0rV2hl biB1c2luZyB0aGlzIG9wdGlvbiwKLStzZXR0aW5nICdHc3NhcGlDbGVhbnVwQ3JlZGVudGlhbHMg bm8nIGlzIHJlY29tbWVuZGVkLAotK3NvIGxvZ2dpbmcgb3V0IG9mIG9uZSBzZXNzaW9uCi0rZG9l c24ndCByZW1vdmUgdGhlIGNyZWRlbnRpYWxzIGluIHVzZSBieSBhbm90aGVyIHNlc3Npb24gb2YK LSt0aGUgc2FtZSB1c2VyLgotK0N1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgR1NJ IG1lY2hhbmlzbS4KLSAuSXQgQ20gR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscwotIEFjY2VwdCBk ZWxlZ2F0ZWQgY3JlZGVudGlhbHMgb24gdGhlIHNlcnZlciBzaWRlLiAgVGhlIGRlZmF1bHQgaXMK LSAuQ00geWVzIC4KLUBAIC03NTgsNyArNzczLDcgQEAKLSBTcGVjaWZpZXMgd2hldGhlciBrZXkg ZXhjaGFuZ2UgYmFzZWQgb24gR1NTQVBJIGlzIGFsbG93ZWQuIEdTU0FQSSBrZXkgZXhjaGFuZ2UK LSBkb2Vzbid0IHJlbHkgb24gc3NoIGtleXMgdG8gdmVyaWZ5IGhvc3QgaWRlbnRpdHkuCi0gVGhl IGRlZmF1bHQgaXMKLS0uQ20gbm8gLgotKy5DbSB5ZXMgLgotIC5JdCBDbSBHU1NBUElTdHJpY3RB Y2NlcHRvckNoZWNrCi0gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGJlIHN0cmljdCBhYm91dCB0aGUg aWRlbnRpdHkgb2YgdGhlIEdTU0FQSSBhY2NlcHRvcgotIGEgY2xpZW50IGF1dGhlbnRpY2F0ZXMg YWdhaW5zdC4KLUBAIC0yMTkzLDYgKzIyMDgsMTIgQEAKLSBhcyBhIG5vbi1yb290IHVzZXIuCi0g VGhlIGRlZmF1bHQgaXMKLSAuQ20gbm8gLgotKy5JdCBDbSBQZXJtaXRQQU1Vc2VyQ2hhbmdlCi0r SWYgc2V0IHRvCi0rLkNtIHllcwotK3RoaXMgd2lsbCBlbmFibGUgUEFNIGF1dGhlbnRpY2F0aW9u IHRvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgdXNlciBiZWluZwotK2F1dGhlbnRpY2F0ZWQuICBU aGUgZGVmYXVsdCBpcwotKy5DbSBubyAuCi0gLkl0IENtIFZlcnNpb25BZGRlbmR1bQotIE9wdGlv bmFsbHkgc3BlY2lmaWVzIGFkZGl0aW9uYWwgdGV4dCB0byBhcHBlbmQgdG8gdGhlIFNTSCBwcm90 b2NvbCBiYW5uZXIKLSBzZW50IGJ5IHRoZSBzZXJ2ZXIgdXBvbiBjb25uZWN0aW9uLgotZGlmZiAt TnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZF9jb25maWdfcmVkaGF0IG9wZW5zc2gtMTAuM3Ax L3NzaGRfY29uZmlnX3JlZGhhdAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZF9jb25maWdf cmVkaGF0CTIwMjYtMDctMDEgMDk6Mzg6MDAuOTIzMjY2MjkwICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvc3NoZF9jb25maWdfcmVkaGF0CTIwMjYtMDctMDEgMTA6Mzk6NDMuNTg1NTIwNDE5ICsw MjAwCi1AQCAtMiw5ICsyLDYgQEAKLSAKLSBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uIG5v Ci0gCi0tR1NTQVBJQXV0aGVudGljYXRpb24geWVzCi0tR1NTQVBJQ2xlYW51cENyZWRlbnRpYWxz IG5vCi0tCi0gVXNlUEFNIHllcwotIAotIFgxMUZvcndhcmRpbmcgeWVzCi1kaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9zc2hkLXNlc3Npb24uYyBvcGVuc3NoLTEwLjNwMS9zc2hkLXNlc3Np b24uYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZC1zZXNzaW9uLmMJMjAyNi0wNy0wMSAw OTozODowMC44Njg4MzA4NjMgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hkLXNlc3Npb24u YwkyMDI2LTA3LTAxIDE0OjI0OjM0LjA4NTc0ODk2NCArMDIwMAotQEAgLTEzODgsMTEgKzEzODgs MTIgQEAKLSAjZW5kaWYKLSAKLSAjaWZkZWYgR1NTQVBJCi0tCWlmIChvcHRpb25zLmdzc19hdXRo ZW50aWNhdGlvbikgewotKwlpZiAob3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24gJiYgb3B0aW9u cy5nc3NfZGVsZWdfY3JlZHMpIHsKLSAJCXRlbXBvcmFyaWx5X3VzZV91aWQoYXV0aGN0eHQtPnB3 KTsKLSAJCWF1dGhjdHh0LT5rcmI1X3NldF9lbnYgPSBzc2hfZ3NzYXBpX3N0b3JlY3JlZHMoKTsK LSAJCXJlc3RvcmVfdWlkKCk7Ci0gCX0KLSsjaWZkZWYgS1JCNQotIAkvKgotIAkgKiBHU1NBUElB bGxvd1M0VTJTZWxmIC8gR1NTQVBJUHJveHlTNFUyU2VydmljZXM6IGlmIG5vIGNyZWRlbnRpYWxz IHdlcmUgc3RvcmVkCi0gCSAqIGFib3ZlIChpLmUuIG5vIEdTU0FQSSBhdXRoIHdpdGggZGVsZWdh dGlvbiBvY2N1cnJlZCksIHVzZSBTNFUyU2VsZgotQEAgLTE0OTIsNiArMTQ5Myw3IEBACi0gCQl9 Ci0gCX0KLSAjZW5kaWYKLSsjZW5kaWYKLSAjaWZkZWYgV0lUSF9TRUxJTlVYCi0gCXNzaGRfc2Vs aW51eF9zZXR1cF9leGVjX2NvbnRleHQoYXV0aGN0eHQtPnB3LT5wd19uYW1lLAotIAkgICAgaW5l dGRfZmxhZywgZG9fcGFtX3B1dGVudiwgdGhlX2F1dGhjdHh0LAotZGlmZiAtTnVyIG9wZW5zc2gt MTAuM3AxLm9yaWcvc3NoLWdzcy5oIG9wZW5zc2gtMTAuM3AxL3NzaC1nc3MuaAotLS0tIG9wZW5z c2gtMTAuM3AxLm9yaWcvc3NoLWdzcy5oCTIwMjYtMDctMDEgMDk6Mzg6MDAuODY4NzIxNjEyICsw MjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoLWdzcy5oCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTg2 Mjk3NTIyICswMjAwCi1AQCAtMTEwLDEyICsxMTAsMTQgQEAKLSB9IHNzaF9nc3NhcGlfY2NhY2hl OwotIAotIHR5cGVkZWYgc3RydWN0IHsKLSsJZ3NzX09JRF9kZXNjIG9pZDsKLSAJZ3NzX2J1ZmZl cl9kZXNjIGRpc3BsYXluYW1lOwotIAlnc3NfYnVmZmVyX2Rlc2MgZXhwb3J0ZWRuYW1lOwotIAln c3NfY3JlZF9pZF90IGNyZWRzOwotLQlnc3NfbmFtZV90IG5hbWU7Ci0rCWdzc19uYW1lX3QgY3Jl ZF9uYW1lLCBjdHhfbmFtZTsKLSAJc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3QgKm1lY2g7 Ci0gCXNzaF9nc3NhcGlfY2NhY2hlIHN0b3JlOwotKwlnc3NfY3R4X2lkX3QgY29udGV4dDsgLyog bmVlZGVkIGZvciBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpICovCi0gCWlu dCB1c2VkOwotIAlpbnQgdXBkYXRlZDsKLSAJY2hhciAqKmluZGljYXRvcnM7IC8qIGF1dGggaW5k aWNhdG9ycyAqLwotQEAgLTEzOCw3ICsxNDAsNyBAQAotIAlPTV91aW50MzIJbWlub3I7IC8qIGJv dGggKi8KLSAJZ3NzX2N0eF9pZF90CWNvbnRleHQ7IC8qIGJvdGggKi8KLSAJZ3NzX25hbWVfdAlu YW1lOyAvKiBib3RoICovCi0tCWdzc19PSUQJCW9pZDsgLyogY2xpZW50ICovCi0rCWdzc19PSUQJ CW9pZDsgLyogYm90aCAqLwotIAlnc3NfY3JlZF9pZF90CWNyZWRzOyAvKiBzZXJ2ZXIgKi8KLSAJ Z3NzX25hbWVfdAljbGllbnQ7IC8qIHNlcnZlciAqLwotIAlnc3NfY3JlZF9pZF90CWNsaWVudF9j cmVkczsgLyogYm90aCAqLwotQEAgLTE4NSw2ICsxODcsOSBAQAotIE9NX3VpbnQzMiBzc2hfZ3Nz YXBpX2NsaWVudF9pZGVudGl0eShHc3NjdHh0ICosIGNvbnN0IGNoYXIgKik7Ci0gaW50IHNzaF9n c3NhcGlfY3JlZGVudGlhbHNfdXBkYXRlZChHc3NjdHh0ICopOwotIAotK2ludCBzc2hfZ3NzYXBp X2xvY2FsbmFtZShjaGFyICoqbmFtZSk7Ci0rdm9pZCBzc2hfZ3NzYXBpX3Jla2V5X2NyZWRzKCk7 Ci0rCi0gLyogSW4gdGhlIHNlcnZlciAqLwotIHR5cGVkZWYgaW50IHNzaF9nc3NhcGlfY2hlY2tf Zm4oR3NzY3R4dCAqKiwgZ3NzX09JRCwgY29uc3QgY2hhciAqLAotICAgICBjb25zdCBjaGFyICop OwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvdmVyc2lvbi5oIG9wZW5zc2gtMTAuM3Ax L3ZlcnNpb24uaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvdmVyc2lvbi5oCTIwMjYtMDQtMDIg MTA6MDk6MDMuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvdmVyc2lvbi5oCTIw MjYtMDctMDEgMTA6Mzk6NDMuNTg2NDc5MTIzICswMjAwCi1AQCAtMiw1ICsyLDE5IEBACi0gCi0g I2RlZmluZSBTU0hfVkVSU0lPTgkiT3BlblNTSF8xMC4zIgotIAotKyNpZmRlZiBHU0kKLSsjZGVm aW5lIEdTSV9WRVJTSU9OCSIgR1NJIgotKyNlbHNlCi0rI2RlZmluZSBHU0lfVkVSU0lPTgkiIgot KyNlbmRpZgotKwotKyNpZmRlZiBLUkI1Ci0rI2RlZmluZSBLUkI1X1ZFUlNJT04JIiBLUkI1Igot KyNlbHNlCi0rI2RlZmluZSBLUkI1X1ZFUlNJT04JIiIKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIFNT SF9QT1JUQUJMRQkicDEiCi0tI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hfVkVSU0lPTiBTU0hfUE9S VEFCTEUKLSsjZGVmaW5lIEdTSV9QT1JUQUJMRQkiYy1HU0kiCi0rI2RlZmluZSBTU0hfUkVMRUFT RQlTU0hfVkVSU0lPTiBTU0hfUE9SVEFCTEUgR1NJX1BPUlRBQkxFIFwKLSsJCQlHU0lfVkVSU0lP TiBLUkI1X1ZFUlNJT04KCmRpZmYgLS1naXQgYS8yMDAwLW9wZW5zc2gtMTAuNXAxLWdzaXNzaC5w YXRjaCBiLzIwMDAtb3BlbnNzaC0xMC41cDEtZ3Npc3NoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmEwMzY0M2EKLS0tIC9kZXYvbnVsbAorKysgYi8yMDAwLW9wZW5z c2gtMTAuNXAxLWdzaXNzaC5wYXRjaApAQCAtMCwwICsxLDI0MDEgQEAKK2RpZmYgLU51ciBvcGVu c3NoLTEwLjVwMS5vcmlnL2F1dGgyLmMgb3BlbnNzaC0xMC41cDEvYXV0aDIuYworLS0tIG9wZW5z c2gtMTAuNXAxLm9yaWcvYXV0aDIuYwkyMDI2LTA5LTIxIDA1OjQwOjU4LjE1ODczMzE1MiArMDIw MAorKysrIG9wZW5zc2gtMTAuNXAxL2F1dGgyLmMJMjAyNi0wOS0yMSAwNTo0MTozMC44MjcyNDg4 MDYgKzAyMDAKK0BAIC0yOTIsNyArMjkyLDI4IEBACisgCSAgICAociA9IHNzaHBrdF9nZXRfY3N0 cmluZyhzc2gsICZzZXJ2aWNlLCBOVUxMKSkgIT0gMCB8fAorIAkgICAgKHIgPSBzc2hwa3RfZ2V0 X2NzdHJpbmcoc3NoLCAmbWV0aG9kLCBOVUxMKSkgIT0gMCkKKyAJCWdvdG8gb3V0OworLQlkZWJ1 ZygidXNlcmF1dGgtcmVxdWVzdCBmb3IgdXNlciAlcyBzZXJ2aWNlICVzIG1ldGhvZCAlcyIsIHVz ZXIsIHNlcnZpY2UsIG1ldGhvZCk7CisrCisrI2lmZGVmIEdTU0FQSQorKwlpZiAodXNlclswXSA9 PSAnXDAnKSB7CisrCQlkZWJ1ZygicmVjZWl2ZWQgZW1wdHkgdXNlcm5hbWUgZm9yICVzIiwgbWV0 aG9kKTsKKysJCWlmIChzdHJjbXAobWV0aG9kLCAiZ3NzYXBpLWtleWV4IikgPT0gMCkgeworKwkJ CWNoYXIgKmxuYW1lID0gTlVMTDsKKysJCQltbV9zc2hfZ3NzYXBpX2xvY2FsbmFtZSgmbG5hbWUp OworKwkJCWlmIChsbmFtZSAmJiBsbmFtZVswXSAhPSAnXDAnKSB7CisrCQkJCWZyZWUodXNlcik7 CisrCQkJCXVzZXIgPSBsbmFtZTsKKysJCQkJZGVidWcoInNldCB1c2VybmFtZSB0byAlcyBmcm9t IGdzc2FwaSBjb250ZXh0IiwgdXNlcik7CisrCQkJfSBlbHNlIHsKKysJCQkJZGVidWcoImZhaWxl ZCB0byBzZXQgdXNlcm5hbWUgZnJvbSBnc3NhcGkgY29udGV4dCIpOworKwkJCQlzc2hfcGFja2V0 X3NlbmRfZGVidWcoc3NoLAorKwkJCQkgICAgImZhaWxlZCB0byBzZXQgdXNlcm5hbWUgZnJvbSBn c3NhcGkgY29udGV4dCIpOworKwkJCX0KKysJCX0KKysJfQorKyNlbmRpZgorKworKwlkZWJ1Zygi dXNlcmF1dGgtcmVxdWVzdCBmb3IgdXNlciAlcyBzZXJ2aWNlICVzIG1ldGhvZCAlcyIsCisrCSAg ICB1c2VyWzBdID8gdXNlciA6ICI8aW1wbGljaXQ+Iiwgc2VydmljZSwgbWV0aG9kKTsKKyAJZGVi dWcoImF0dGVtcHQgJWQgZmFpbHVyZXMgJWQiLCBhdXRoY3R4dC0+YXR0ZW1wdCwgYXV0aGN0eHQt PmZhaWx1cmVzKTsKKyAKKyAjaWZkZWYgV0lUSF9TRUxJTlVYCitAQCAtMzA1LDE2ICszMjYsMzgg QEAKKyAKKyAJaWYgKGF1dGhjdHh0LT5hdHRlbXB0ID49IDEwMjQpCisgCQlhdXRoX21heHRyaWVz X2V4Y2VlZGVkKHNzaCk7CistCWlmIChhdXRoY3R4dC0+YXR0ZW1wdCsrID09IDApIHsKKy0JCS8q IHNldHVwIGF1dGggY29udGV4dCAqLworLQkJYXV0aGN0eHQtPnB3ID0gbW1fZ2V0cHduYW1hbGxv dyhzc2gsIHVzZXIpOworKwkvKiBJZiBmaXJzdCB0aW1lIG9yIHVzZXJuYW1lIGNoYW5nZWQgb3Ig ZW1wdHkgdXNlcm5hbWUsCisrCSAgIHNldHVwL3Jlc2V0IGF1dGhlbnRpY2F0aW9uIGNvbnRleHQu ICovCisrCWlmICgoYXV0aGN0eHQtPmF0dGVtcHQrKyA9PSAwKSB8fAorKwkgICAgKHN0cmNtcCh1 c2VyLCBhdXRoY3R4dC0+dXNlcikgIT0gMCkgfHwKKysJICAgIChzdHJjbXAodXNlciwgIiIpID09 IDApKSB7CisrCQlpZiAoYXV0aGN0eHQtPnVzZXIpIHsKKysJCQlmcmVlKGF1dGhjdHh0LT51c2Vy KTsKKysJCQlhdXRoY3R4dC0+dXNlciA9IE5VTEw7CisrCQl9CisrCQlhdXRoY3R4dC0+dmFsaWQg PSAwOworIAkJYXV0aGN0eHQtPnVzZXIgPSB4c3RyZHVwKHVzZXIpOworIAkJYXV0aGN0eHQtPnNl cnZpY2UgPSB4c3RyZHVwKHNlcnZpY2UpOworIAkJYXV0aGN0eHQtPnN0eWxlID0gc3R5bGUgPyB4 c3RyZHVwKHN0eWxlKSA6IE5VTEw7CisgI2lmZGVmIFdJVEhfU0VMSU5VWAorIAkJYXV0aGN0eHQt PnJvbGUgPSByb2xlID8geHN0cmR1cChyb2xlKSA6IE5VTEw7CisgI2VuZGlmCistCQlpZiAoYXV0 aGN0eHQtPnB3ICYmIHN0cmNtcChzZXJ2aWNlLCAic3NoLWNvbm5lY3Rpb24iKT09MCkgeworKwkJ aWYgKHN0cmNtcChzZXJ2aWNlLCAic3NoLWNvbm5lY3Rpb24iKSAhPSAwKSB7CisrCQkJc3NoX3Bh Y2tldF9kaXNjb25uZWN0KHNzaCwgIlVuc3VwcG9ydGVkIHNlcnZpY2UgJXMiLAorKwkJCSAgICBz ZXJ2aWNlKTsKKysJCX0KKysjaWZkZWYgR1NTQVBJCisrCQkvKiBJZiB3ZSdyZSBnb2luZyB0byBz ZXQgdGhlIHVzZXJuYW1lIGJhc2VkIG9uIHRoZQorKwkJICAgR1NTQVBJIGNvbnRleHQgbGF0ZXIs IHRoZW4gd2FpdCB1bnRpbCB0aGVuIHRvCisrCQkgICB2ZXJpZnkgaXQuIEp1c3QgcHV0IGluIHBs YWNlaG9sZGVycyBmb3Igbm93LiAqLworKwkJaWYgKChzdHJjbXAodXNlciwgIiIpID09IDApICYm CisrCQkgICAgKChzdHJjbXAobWV0aG9kLCAiZ3NzYXBpIikgPT0gMCkgfHwKKysJCSAgICAgKHN0 cmNtcChtZXRob2QsICJnc3NhcGktd2l0aC1taWMiKSA9PSAwKSkpIHsKKysJCQlhdXRoY3R4dC0+ cHcgPSBmYWtlcHcoKTsKKysJCX0gZWxzZSB7CisrI2VuZGlmCisrCQlhdXRoY3R4dC0+cHcgPSBt bV9nZXRwd25hbWFsbG93KHNzaCwgdXNlcik7CisrCQlpZiAoYXV0aGN0eHQtPnB3KSB7CisgCQkJ YXV0aGN0eHQtPnZhbGlkID0gMTsKKyAJCQlkZWJ1ZzJfZigic2V0dGluZyB1cCBhdXRoY3R4dCBm b3IgJXMiLCB1c2VyKTsKKyAJCX0gZWxzZSB7CitAQCAtMzIyLDYgKzM2NSw5IEBACisgCQkJLyog SW52YWxpZCB1c2VyLCBmYWtlIHBhc3N3b3JkIGluZm9ybWF0aW9uICovCisgCQkJYXV0aGN0eHQt PnB3ID0gZmFrZXB3KCk7CisgCQl9CisrI2lmZGVmIEdTU0FQSQorKwkJfSAvKiBlbmRpZiBmb3Ig c2V0dGluZyB1c2VybmFtZSBiYXNlZCBvbiBHU1NBUEkgY29udGV4dCAqLworKyNlbmRpZgorICNp ZmRlZiBVU0VfUEFNCisgCQlpZiAob3B0aW9ucy51c2VfcGFtKQorIAkJCW1tX3N0YXJ0X3BhbShz c2gpOworQEAgLTMyOSw2ICszNzUsNyBAQAorIAkJc3NoX3BhY2tldF9zZXRfbG9nX3ByZWFtYmxl KHNzaCwgIiVzdXNlciAlcyIsCisgCQkgICAgYXV0aGN0eHQtPnZhbGlkID8gImF1dGhlbnRpY2F0 aW5nICIgOiAiaW52YWxpZCAiLCB1c2VyKTsKKyAJCXNldHByb2N0aXRsZSgiJXMgW25ldF0iLCBh dXRoY3R4dC0+dmFsaWQgPyB1c2VyIDogInVua25vd24iKTsKKysJCWlmIChhdXRoY3R4dC0+YXR0 ZW1wdCA9PSAxKSB7CisgCQltbV9pbmZvcm1fYXV0aHNlcnYoc2VydmljZSwgc3R5bGUpOworICNp ZmRlZiBXSVRIX1NFTElOVVgKKyAgICAgICAgICAJbW1faW5mb3JtX2F1dGhyb2xlKHJvbGUpOwor QEAgLTMzOSw5ICszODYsMTAgQEAKKyAJCWlmIChhdXRoMl9zZXR1cF9tZXRob2RzX2xpc3RzKGF1 dGhjdHh0KSAhPSAwKQorIAkJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsCisgCQkJICAgICJu byBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGVuYWJsZWQiKTsKKy0JfSBlbHNlIGlmIChzdHJjbXAo dXNlciwgYXV0aGN0eHQtPnVzZXIpICE9IDAgfHwKKy0JICAgIHN0cmNtcChzZXJ2aWNlLCBhdXRo Y3R4dC0+c2VydmljZSkgIT0gMCkgeworLQkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwgIkNo YW5nZSBvZiB1c2VybmFtZSBvciBzZXJ2aWNlICIKKysJCX0KKysJfQorKwlpZiAoc3RyY21wKHNl cnZpY2UsIGF1dGhjdHh0LT5zZXJ2aWNlKSAhPSAwKSB7CisrCQlzc2hfcGFja2V0X2Rpc2Nvbm5l Y3Qoc3NoLCAiQ2hhbmdlIG9mIHNlcnZpY2UgIgorIAkJICAgICJub3QgYWxsb3dlZDogKCVzLCVz KSAtPiAoJXMsJXMpIiwKKyAJCSAgICBhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQtPnNlcnZpY2Us IHVzZXIsIHNlcnZpY2UpOworIAl9CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9hdXRo Mi1nc3MuYyBvcGVuc3NoLTEwLjVwMS9hdXRoMi1nc3MuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9y aWcvYXV0aDItZ3NzLmMJMjAyNi0wOS0yMSAwNTo0MDo1Ny44Njc3MzkyNzEgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjVwMS9hdXRoMi1nc3MuYwkyMDI2LTA5LTIxIDA1OjQxOjMwLjgyNzk4ODg3MCAr MDIwMAorQEAgLTU0LDYgKzU0LDcgQEAKKyBleHRlcm4gc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1l dGhvZGNmZ19nc3NrZXlleDsKKyBleHRlcm4gc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1ldGhvZGNm Z19nc3NhcGk7CisgCisrc3RhdGljIHZvaWQgc3NoX2dzc2FwaV91c2VyYXV0aF9lcnJvcihHc3Nj dHh0ICpjdHh0LCBzdHJ1Y3Qgc3NoICpzc2gpOworIHN0YXRpYyBpbnQgaW5wdXRfZ3NzYXBpX3Rv a2VuKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpOworIHN0YXRpYyBp bnQgaW5wdXRfZ3NzYXBpX21pYyhpbnQgdHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAq c3NoKTsKKyBzdGF0aWMgaW50IGlucHV0X2dzc2FwaV9leGNoYW5nZV9jb21wbGV0ZShpbnQgdHlw ZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKTsKK0BAIC02Nyw4ICs2OCw4IEBACisg eworIAlBdXRoY3R4dCAqYXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OworIAlpbnQgciwgYXV0aGVu dGljYXRlZCA9IDA7CistCXN0cnVjdCBzc2hidWYgKmIgPSBOVUxMOworLQlnc3NfYnVmZmVyX2Rl c2MgbWljLCBnc3NidWY7CisrCXN0cnVjdCBzc2hidWYgKmIgPSBOVUxMLCAqYjIgPSBOVUxMOwor Kwlnc3NfYnVmZmVyX2Rlc2MgbWljLCBnc3NidWYsIGdzc2J1ZjI7CisgCXVfY2hhciAqcDsKKyAJ c2l6ZV90IGxlbjsKKyAKK0BAIC03OSw2ICs4MCw5IEBACisgCWlmICgoYiA9IHNzaGJ1Zl9uZXco KSkgPT0gTlVMTCkKKyAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7CisgCisrCWlmICgo YjIgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisrCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxl ZCIpOworKworIAltaWMudmFsdWUgPSBwOworIAltaWMubGVuZ3RoID0gbGVuOworIAorQEAgLTg5 LDEzICs5MywyOCBAQAorIAkJZmF0YWxfZigic3NoYnVmX211dGFibGVfcHRyIGZhaWxlZCIpOwor IAlnc3NidWYubGVuZ3RoID0gc3NoYnVmX2xlbihiKTsKKyAKKysJLyogY2xpZW50IG1heSBoYXZl IHVzZWQgZW1wdHkgdXNlcm5hbWUgdG8gZGV0ZXJtaW5lIHRhcmdldAorKwkgICBuYW1lIGZyb20g R1NTQVBJIGNvbnRleHQgKi8KKysJc3NoX2dzc2FwaV9idWlsZG1pYyhiMiwgIiIsIGF1dGhjdHh0 LT5zZXJ2aWNlLCAiZ3NzYXBpLWtleWV4IiwKKysJICAgIHNzaC0+a2V4LT5zZXNzaW9uX2lkKTsK KysKKysJaWYgKChnc3NidWYyLnZhbHVlID0gc3NoYnVmX211dGFibGVfcHRyKGIyKSkgPT0gTlVM TCkKKysJCWZhdGFsX2YoInNzaGJ1Zl9tdXRhYmxlX3B0ciBmYWlsZWQiKTsKKysJZ3NzYnVmMi5s ZW5ndGggPSBzc2hidWZfbGVuKGIyKTsKKysKKyAJLyogZ3NzX2tleF9jb250ZXh0IGlzIE5VTEwg d2l0aCBwcml2c2VwLCBzbyB3ZSBjYW4ndCBjaGVjayBpdCBoZXJlICovCisgCWlmICghR1NTX0VS Uk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzX2tleF9jb250ZXh0LAorLQkgICAgJmdzc2J1 ZiwgJm1pYykpKQorLQkJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhj dHh0LT51c2VyLAorLQkJICAgIGF1dGhjdHh0LT5wdywgMSk7CisrCSAgICAmZ3NzYnVmLCAmbWlj KSkgfHwKKysJICAgICFHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9jaGVja21pYyhnc3Nfa2V4X2Nv bnRleHQsCisrCSAgICAmZ3NzYnVmMiwgJm1pYykpKSB7CisrCQlpZiAoYXV0aGN0eHQtPnZhbGlk ICYmIGF1dGhjdHh0LT51c2VyICYmIGF1dGhjdHh0LT51c2VyWzBdKSB7CisrCQkJYXV0aGVudGlj YXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLAorKwkJCSAgICBhdXRo Y3R4dC0+cHcsIDEpOworKwkJfQorKwl9CisgCisgCXNzaGJ1Zl9mcmVlKGIpOworKwlzc2hidWZf ZnJlZShiMik7CisgCWZyZWUobWljLnZhbHVlKTsKKyAKKyAJcmV0dXJuIChhdXRoZW50aWNhdGVk KTsKK0BAIC0xODYsNyArMjA1LDcgQEAKKyAJR3NzY3R4dCAqZ3NzY3R4dDsKKyAJZ3NzX2J1ZmZl cl9kZXNjIHNlbmRfdG9rID0gR1NTX0NfRU1QVFlfQlVGRkVSOworIAlnc3NfYnVmZmVyX2Rlc2Mg cmVjdl90b2s7CistCU9NX3VpbnQzMiBtYWpfc3RhdHVzLCBtaW5fc3RhdHVzLCBmbGFnczsKKysJ T01fdWludDMyIG1hal9zdGF0dXMsIG1pbl9zdGF0dXMsIGZsYWdzID0gMDsKKyAJdV9jaGFyICpw OworIAlzaXplX3QgbGVuOworIAlpbnQgcjsKK0BAIC0yMDcsNiArMjI2LDcgQEAKKyAJZnJlZShw KTsKKyAKKyAJaWYgKEdTU19FUlJPUihtYWpfc3RhdHVzKSkgeworKwkJc3NoX2dzc2FwaV91c2Vy YXV0aF9lcnJvcihnc3NjdHh0LCBzc2gpOworIAkJaWYgKHNlbmRfdG9rLmxlbmd0aCAhPSAwKSB7 CisgCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwKKyAJCQkgICAgU1NIMl9NU0dfVVNFUkFV VEhfR1NTQVBJX0VSUlRPSykpICE9IDAgfHwKK0BAIC0yODAsNiArMzAwLDM0IEBACisgCXJldHVy biAwOworIH0KKyAKKytzdGF0aWMgdm9pZAorK2dzc2FwaV9zZXRfdXNlcm5hbWUoc3RydWN0IHNz aCAqc3NoKQorK3sKKysJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRoY3R4dDsKKysJY2hh ciAqbG5hbWUgPSBOVUxMOworKworKwlpZiAoKGF1dGhjdHh0LT51c2VyID09IE5VTEwpIHx8IChh dXRoY3R4dC0+dXNlclswXSA9PSAnXDAnKSkgeworKwkJbW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUo JmxuYW1lKTsKKysJCWlmIChsbmFtZSAmJiBsbmFtZVswXSAhPSAnXDAnKSB7CisrCQkJaWYgKGF1 dGhjdHh0LT51c2VyKSBmcmVlKGF1dGhjdHh0LT51c2VyKTsKKysJCQlhdXRoY3R4dC0+dXNlciA9 IGxuYW1lOworKwkJCWRlYnVnKCJzZXQgdXNlcm5hbWUgdG8gJXMgZnJvbSBnc3NhcGkgY29udGV4 dCIsIGxuYW1lKTsKKysJCQlhdXRoY3R4dC0+cHcgPSBtbV9nZXRwd25hbWFsbG93KHNzaCwgYXV0 aGN0eHQtPnVzZXIpOworKwkJCWlmIChhdXRoY3R4dC0+cHcpIHsKKysJCQkJYXV0aGN0eHQtPnZh bGlkID0gMTsKKysjaWZkZWYgVVNFX1BBTQorKwkJCQlpZiAob3B0aW9ucy51c2VfcGFtKQorKwkJ CQkJbW1fc3RhcnRfcGFtKHNzaCk7CisrI2VuZGlmCisrCQkJfQorKwkJfSBlbHNlIHsKKysJCQlk ZWJ1ZygiZmFpbGVkIHRvIHNldCB1c2VybmFtZSBmcm9tIGdzc2FwaSBjb250ZXh0Iik7CisrCQkJ c3NoX3BhY2tldF9zZW5kX2RlYnVnKHNzaCwKKysJCQkgICAgImZhaWxlZCB0byBzZXQgdXNlcm5h bWUgZnJvbSBnc3NhcGkgY29udGV4dCIpOworKwkJfQorKwl9CisrfQorKworIC8qCisgICogVGhp cyBpcyBjYWxsZWQgd2hlbiB0aGUgY2xpZW50IHRoaW5rcyB3ZSd2ZSBjb21wbGV0ZWQgYXV0aGVu dGljYXRpb24uCisgICogSXQgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBpbiB0aGUgZGlzcGF0Y2gg aGFuZGxlciBieSB0aGUgZnVuY3Rpb24gYWJvdmUsCitAQCAtMjkwLDEyICszMzgsMTQgQEAKKyBp bnB1dF9nc3NhcGlfZXhjaGFuZ2VfY29tcGxldGUoaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0 cnVjdCBzc2ggKnNzaCkKKyB7CisgCUF1dGhjdHh0ICphdXRoY3R4dCA9IHNzaC0+YXV0aGN0eHQ7 CistCWludCByLCBhdXRoZW50aWNhdGVkOworKwlpbnQgciwgYXV0aGVudGljYXRlZCA9IDA7Cisg CWRvdWJsZSB0c3RhcnQgPSBtb25vdGltZV9kb3VibGUoKTsKKyAKKyAJaWYgKGF1dGhjdHh0ID09 IE5VTEwpCisgCQlmYXRhbCgiTm8gYXV0aGVudGljYXRpb24gb3IgR1NTQVBJIGNvbnRleHQiKTsK KyAKKysJZ3NzYXBpX3NldF91c2VybmFtZShzc2gpOworKworIAkvKgorIAkgKiBXZSBkb24ndCBu ZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMsIGJlY2F1c2Ugd2UncmUgb25seSBlbmFibGVkIGluCisg CSAqIHRoZSBkaXNwYXRjaGVyIG9uY2UgdGhlIGV4Y2hhbmdlIGlzIGNvbXBsZXRlCitAQCAtMzA0 LDcgKzM1NCwxMiBAQAorIAlpZiAoKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQorIAkJ ZmF0YWxfZnIociwgInBhcnNlIHBhY2tldCIpOworIAorLSAJYXV0aGVudGljYXRlZCA9IG1tX3Nz aF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+cHcsIDEpOworKwkvKiB1 c2VyIHNob3VsZCBiZSBzZXQgaWYgdmFsaWQgYnV0IHdlIGRvdWJsZS1jaGVjayBoZXJlICovCisr CWlmIChhdXRoY3R4dC0+dmFsaWQgJiYgYXV0aGN0eHQtPnVzZXIgJiYgYXV0aGN0eHQtPnVzZXJb MF0pIHsKKysJCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+ dXNlciwKKysJCSAgICBhdXRoY3R4dC0+cHcsIDEpOworKwl9CisrCisgCWlmICghYXV0aGVudGlj YXRlZCkKKyAJCWF1dGhfZmFpbHVyZV9kZWxheShhdXRoY3R4dCwgdHN0YXJ0KTsKKyAKK0BAIC0z NTQsMTAgKzQwOSwxNiBAQAorIAkJZmF0YWxfZigic3NoYnVmX211dGFibGVfcHRyIGZhaWxlZCIp OworIAlnc3NidWYubGVuZ3RoID0gc3NoYnVmX2xlbihiKTsKKyAKKy0JaWYgKCFHU1NfRVJST1Io bW1fc3NoX2dzc2FwaV9jaGVja21pYyhnc3NjdHh0LCAmZ3NzYnVmLCAmbWljKSkpCistCQlhdXRo ZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0 LT5wdywgMCk7CistCWVsc2UKKysJZ3NzYXBpX3NldF91c2VybmFtZShzc2gpOworKworKwlpZiAo IUdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKGdzc2N0eHQsICZnc3NidWYsICZtaWMp KSkgeworKwkJaWYgKGF1dGhjdHh0LT52YWxpZCAmJiBhdXRoY3R4dC0+dXNlciAmJiBhdXRoY3R4 dC0+dXNlclswXSkgeworKwkJCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhh dXRoY3R4dC0+dXNlciwKKysJCQkgICAgYXV0aGN0eHQtPnB3LCAwKTsKKysJCX0KKysJfSBlbHNl IHsKKyAJCWxvZ2l0KCJHU1NBUEkgTUlDIGNoZWNrIGZhaWxlZCIpOworKwl9CisgCisgCXNzaGJ1 Zl9mcmVlKGIpOworIAlpZiAobWljdXNlciAhPSBhdXRoY3R4dC0+dXNlcikKK0BAIC0zNzYsNiAr NDM3LDI2IEBACisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgdm9pZCBzc2hfZ3NzYXBpX3Vz ZXJhdXRoX2Vycm9yKEdzc2N0eHQgKmN0eHQsIHN0cnVjdCBzc2ggKnNzaCkgeworKwljaGFyICpl cnJzdHI7CisrCU9NX3VpbnQzMiBtYWosIG1pbjsKKysJaW50IHI7CisrCisrCWVycnN0ciA9IG1t X3NzaF9nc3NhcGlfbGFzdF9lcnJvcihjdHh0LCAmbWFqLCAmbWluKTsKKysJaWYgKGVycnN0cikg eworKwkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwKKysJCSAgICBTU0gyX01TR19VU0VSQVVU SF9HU1NBUElfRVJST1IpKSAhPSAwIHx8CisrCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gs IG1haikpICE9IDAgfHwKKysJCSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNzaCwgbWluKSkgIT0g MCB8fAorKwkJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgZXJyc3RyKSkgIT0gMCB8 fAorKwkJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgIiIpKSAhPSAwIHx8CisrCQkg ICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwIHx8CisrCQkgICAgKHIgPSBzc2hfcGFja2V0 X3dyaXRlX3dhaXQoc3NoKSkgIT0gMCkKKysJCQlmYXRhbF9mcihyLCAiIik7CisrCQlmcmVlKGVy cnN0cik7CisrCX0KKyt9CisrCisgQXV0aG1ldGhvZCBtZXRob2RfZ3Nza2V5ZXggPSB7CisgCSZt ZXRob2RjZmdfZ3Nza2V5ZXgsCisgCXVzZXJhdXRoX2dzc2tleWV4LAorZGlmZiAtTnVyIG9wZW5z c2gtMTAuNXAxLm9yaWcvYXV0aC5jIG9wZW5zc2gtMTAuNXAxL2F1dGguYworLS0tIG9wZW5zc2gt MTAuNXAxLm9yaWcvYXV0aC5jCTIwMjYtMDktMjEgMDU6NDA6NTguMTU4MzM0NTU3ICswMjAwCisr Kysgb3BlbnNzaC0xMC41cDEvYXV0aC5jCTIwMjYtMDktMjEgMDU6NDE6MzAuODI4NjQ4MzA4ICsw MjAwCitAQCAtMjk2LDcgKzI5Niw4IEBACisgCSAgICBtZXRob2QsCisgCSAgICBzdWJtZXRob2Qg IT0gTlVMTCA/ICIvIiA6ICIiLCBzdWJtZXRob2QgPT0gTlVMTCA/ICIiIDogc3VibWV0aG9kLAor IAkgICAgYXV0aGN0eHQtPnZhbGlkID8gIiIgOiAiaW52YWxpZCB1c2VyICIsCistCSAgICBhdXRo Y3R4dC0+dXNlciwKKysJICAgIChhdXRoY3R4dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNlclswXSkg PworKwkJYXV0aGN0eHQtPnVzZXIgOiAidW5rbm93biIsCisgCSAgICBzc2hfcmVtb3RlX2lwYWRk cihzc2gpLAorIAkgICAgc3NoX3JlbW90ZV9wb3J0KHNzaCksCisgCSAgICBleHRyYSAhPSBOVUxM ID8gIjogIiA6ICIiLAorQEAgLTQ5MSwxMyArNDkyLDE4IEBACisgI2VuZGlmCisgCisgCXB3ID0g Z2V0cHduYW0odXNlcik7CisrI2lmZGVmIFVTRV9QQU0KKysJaWYgKG9wdGlvbnMudXNlX3BhbSAm JiBvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UgJiYgcHcgPT0gTlVMTCkKKysJCXB3ID0g c3NocGFtX2dldHB3KHVzZXIpOworKyNlbmRpZgorIAorICNpZiBkZWZpbmVkKF9BSVgpICYmIGRl ZmluZWQoSEFWRV9TRVRBVVRIREIpCisgCWFpeF9yZXN0b3JlYXV0aGRiKCk7CisgI2VuZGlmCisg CWlmIChwdyA9PSBOVUxMKSB7CisgCQlsb2dpdCgiSW52YWxpZCB1c2VyICUuMTAwcyBmcm9tICUu MTAwcyBwb3J0ICVkIiwKKy0JCSAgICB1c2VyLCBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hf cmVtb3RlX3BvcnQoc3NoKSk7CisrCQkgICAgKHVzZXIgJiYgdXNlclswXSkgPyB1c2VyIDogInVu a25vd24iLAorKwkJICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChz c2gpKTsKKyAjaWZkZWYgQ1VTVE9NX0ZBSUxFRF9MT0dJTgorIAkJcmVjb3JkX2ZhaWxlZF9sb2dp bihzc2gsIHVzZXIsCisgCQkgICAgYXV0aF9nZXRfY2Fub25pY2FsX2hvc3RuYW1lKHNzaCwgb3B0 aW9ucy51c2VfZG5zKSwgInNzaCIpOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvYXV0 aC5oIG9wZW5zc2gtMTAuNXAxL2F1dGguaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvYXV0aC5o CTIwMjYtMDktMjEgMDU6NDA6NTguMTU4NDI3OTkzICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEv YXV0aC5oCTIwMjYtMDktMjEgMDU6NDE6MzAuODI5MjU3MzE4ICswMjAwCitAQCAtODUsNiArODUs OCBAQAorIAlrcmI1X3ByaW5jaXBhbAkga3JiNV91c2VyOworIAljaGFyCQkqa3JiNV90aWNrZXRf ZmlsZTsKKyAJY2hhcgkJKmtyYjVfY2NuYW1lOworKyNlbmRpZgorKyNpZmRlZiBHU1NBUEkKKyAJ aW50CQkga3JiNV9zZXRfZW52OworICNlbmRpZgorIAlzdHJ1Y3Qgc3NoYnVmCSpsb2dpbm1zZzsK K2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2F1dGgtcGFtLmMgb3BlbnNzaC0xMC41cDEv YXV0aC1wYW0uYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvYXV0aC1wYW0uYwkyMDI2LTA5LTIx IDA1OjQwOjU4LjM3MTU3NzI0OCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2F1dGgtcGFtLmMJ MjAyNi0wOS0yMSAwNTo0MTozMC44Mjk1OTg0ODcgKzAyMDAKK0BAIC0yNTQsNiArMjU0LDcgQEAK KyBzdGF0aWMgY29uc3QgY2hhciAqc3NocGFtX3Bhc3N3b3JkID0gTlVMTDsKKyBzdGF0aWMgY2hh ciAqc3NocGFtX3Job3N0ID0gTlVMTDsKKyBzdGF0aWMgY2hhciAqc3NocGFtX2xhZGRyID0gTlVM TDsKKytzdGF0aWMgc3RydWN0IHNzaCAqc3NocGFtX3NzaCA9IE5VTEw7CisgCisgLyogU29tZSBQ QU0gaW1wbGVtZW50YXRpb25zIGRvbid0IGltcGxlbWVudCB0aGlzICovCisgI2lmbmRlZiBIQVZF X1BBTV9HRVRFTlZMSVNUCitAQCAtMjc3LDYgKzI3OCw1NiBAQAorIH0KKyAjZW5kaWYgLyogSEFW RV9QQU1fUFVURU5WICovCisgCisrc3RydWN0IHBhc3N3ZCAqCisrc3NocGFtX2dldHB3KGNvbnN0 IGNoYXIgKnVzZXIpCisreworKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKysKKysJaWYgKChwdyA9IGdl dHB3bmFtKHVzZXIpKSAhPSBOVUxMKQorKwkJcmV0dXJuKHB3KTsKKysKKysJZGVidWcoIlBBTTog ZmFraW5nIHBhc3N3ZCBzdHJ1Y3QgZm9yIHVzZXIgJyUuMTAwcyciLCB1c2VyKTsKKysJaWYgKChw dyA9IGdldHB3bmFtKFNTSF9QUklWU0VQX1VTRVIpKSA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7 CisrCXB3LT5wd19uYW1lID0geHN0cmR1cCh1c2VyKTsJLyogWFhYIGxlYWsgKi8KKysJcHctPnB3 X3NoZWxsID0gIi9iaW4vdHJ1ZSI7CisrCXB3LT5wd19nZWNvcyA9ICJzc2hkIGZha2UgUEFNIHVz ZXIiOworKwlyZXR1cm4gKHB3KTsKKyt9CisrCisrdm9pZAorK3NzaHBhbV9jaGVja191c2VyY2hh bmdlZCh2b2lkKQorK3sKKysJaW50IHNzaHBhbV9lcnI7CisrCXN0cnVjdCBwYXNzd2QgKnB3Owor Kwljb25zdCBjaGFyICp1c2VyOworKworKwlkZWJ1Zygic3NocGFtX2NoZWNrX3VzZXJjaGFuZ2Vk Iik7CisrCXNzaHBhbV9lcnIgPSBwYW1fZ2V0X2l0ZW0oc3NocGFtX2hhbmRsZSwgUEFNX1VTRVIs CisrCQkJCSAgKHNzaHBhbV9jb25zdCB2b2lkICoqKSZ1c2VyKTsKKysJaWYgKHNzaHBhbV9lcnIg IT0gUEFNX1NVQ0NFU1MpCisrCQlmYXRhbCgiUEFNOiBjb3VsZCBub3QgZ2V0IFBBTV9VU0VSOiAl cyIsCisrCQkgICAgcGFtX3N0cmVycm9yKHNzaHBhbV9oYW5kbGUsIHNzaHBhbV9lcnIpKTsKKysJ ZGVidWcoInNzaHBhbV9jaGVja191c2VyY2hhbmdlZDogdXNlciB3YXMgJyUuMTAwcyciLAorKwkg ICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7CisrCWlmIChzdHJjbXAodXNlciwgc3No cGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSkgIT0gMCkgeworKwkJZGVidWcoIlBBTTogdXNlciBt YXBwZWQgZnJvbSAnJS4xMDBzJyB0byAnJS4xMDBzJyIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0 LT5wdy0+cHdfbmFtZSwgdXNlcik7CisrCQlpZiAoKHB3ID0gZ2V0cHduYW0odXNlcikpID09IE5V TEwpCisrCQkJZmF0YWwoIlBBTTogY291bGQgbm90IGdldCBwYXNzd2QgZW50cnkgZm9yIHVzZXIg IgorKwkJCSAgICAiJyUuMTAwcycgcHJvdmlkZWQgYnkgUEFNX1VTRVIiLCB1c2VyKTsKKysJCXB3 ZnJlZShzc2hwYW1fYXV0aGN0eHQtPnB3KTsKKysJCXNzaHBhbV9hdXRoY3R4dC0+cHcgPSBwd2Nv cHkocHcpOworKwkJc3NocGFtX2F1dGhjdHh0LT52YWxpZCA9IGFsbG93ZWRfdXNlcihzc2hwYW1f c3NoLCBwdyk7CisrCQlmcmVlKHNzaHBhbV9hdXRoY3R4dC0+dXNlcik7CisrCQlzc2hwYW1fYXV0 aGN0eHQtPnVzZXIgPSB4c3RyZHVwKHVzZXIpOworKwkJZGVidWcoIlBBTTogdXNlciAnJS4xMDBz JyBub3cgJXN2YWxpZCIsIHVzZXIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT52YWxpZCA/ICIi IDogImluIik7CisrCX0KKysJZGVidWcoInNzaHBhbV9jaGVja191c2VyY2hhbmdlZDogdXNlciBp cyAnJS4xMDBzJyIsCisrCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKKyt9Cisr Cisgc3RhdGljIHZvaWQKKyBzc2hwYW1fcGFzc3dvcmRfY2hhbmdlX3JlcXVpcmVkKGludCByZXFk KQorIHsKK0BAIC0zMDgsNyArMzU5LDcgQEAKKyBzdGF0aWMgdm9pZAorIGltcG9ydF9lbnZpcm9u bWVudHMoc3RydWN0IHNzaGJ1ZiAqYikKKyB7CistCWNoYXIgKmVudjsKKysJY2hhciAqZW52LCAq dXNlcjsKKyAJdV9pbnQgbiwgaSwgbnVtX2VudjsKKyAJaW50IHI7CisgCitAQCAtMzI0LDYgKzM3 NSwxOSBAQAorIAlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihiLCAmbikpICE9IDApCisgCQlmYXRh bF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisgCXNzaHBhbV9wYXNzd29yZF9jaGFuZ2VfcmVxdWly ZWQobiAhPSAwKTsKKysJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSkgeworKwkJ aWYgKChyID0gc3NoYnVmX2dldF9jc3RyaW5nKGIsICZ1c2VyLCBOVUxMKSkgIT0gMCkKKysJCQlm YXRhbCgiJXM6IGJ1ZmZlciBlcnJvcjogJXMiLCBfX2Z1bmNfXywgc3NoX2VycihyKSk7CisrCQlk ZWJ1ZygiUEFNOiB1c2VyIGlzICclLjEwMHMnIiwKKysJCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3 LT5wd19uYW1lKTsKKysJCWRlYnVnKCJQQU06IGdvdCB1c2VybmFtZSAnJS4xMDBzJyBmcm9tIHRo cmVhZCIsIHVzZXIpOworKwkJaWYgKChzc2hwYW1fZXJyID0gcGFtX3NldF9pdGVtKHNzaHBhbV9o YW5kbGUsIFBBTV9VU0VSLCB1c2VyKSkKKysJCSAgICAhPSBQQU1fU1VDQ0VTUykKKysJCQlmYXRh bCgiUEFNOiBmYWlsZWQgdG8gc2V0IFBBTV9VU0VSOiAlcyIsCisrCQkJICAgIHBhbV9zdHJlcnJv cihzc2hwYW1faGFuZGxlLCBzc2hwYW1fZXJyKSk7CisrCQlwd2ZyZWUoc3NocGFtX2F1dGhjdHh0 LT5wdyk7CisrCQlzc2hwYW1fYXV0aGN0eHQtPnB3ID0gcHdjb3B5KHNzaHBhbV9nZXRwdyh1c2Vy KSk7CisrCX0KKyAKKyAJLyogSW1wb3J0IGVudmlyb25tZW50IGZyb20gc3VicHJvY2VzcyAqLwor IAlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihiLCAmbnVtX2VudikpICE9IDApCitAQCAtNTM2LDYg KzYwMCwxMyBAQAorIAlpZiAoKHNzaHBhbV9lcnIgPSBjaGVja19wYW1fdXNlcihzc2hwYW1fYXV0 aGN0eHQpKSAhPSBQQU1fU1VDQ0VTUykKKyAJCWdvdG8gYXV0aF9mYWlsOworIAorKwlpZiAob3B0 aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKSB7CisrCQlkZWJ1Zygic3NocGFtX3RocmVhZDog dXNlciBpcyAnJS4xMDBzJyIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSk7 CisrCQlzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQoKTsKKysJCWRlYnVnKCJzc2hwYW1fdGhyZWFk OiB1c2VyIGlzICclLjEwMHMnIiwKKysJCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1l KTsKKysJfQorIAlpZiAoIWRvX3BhbV9hY2NvdW50KCkpIHsKKyAJCS8qIFByZXNlcnZlIFBBTV9Q RVJNX0RFTklFRCBhbmQgUEFNX1VTRVJfVU5LTk9XTi4KKyAJCSAqIEJhY2t3YXJkIGNvbXBhdGli aWxpdHkgZm9yIG90aGVyIGVycm9ycy4gKi8KK0BAIC01NjAsNiArNjMxLDEzIEBACisgCWlmICgo ciA9IHNzaGJ1Zl9wdXRfdTMyKGJ1ZmZlciwgc3NocGFtX2FjY291bnRfc3RhdHVzKSkgIT0gMCB8 fAorIAkgICAgKHIgPSBzc2hidWZfcHV0X3UzMihidWZmZXIsIHNzaHBhbV9hdXRoY3R4dC0+Zm9y Y2VfcHdjaGFuZ2UpKSAhPSAwKQorIAkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOworKwlp ZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKSB7CisrCQlkZWJ1Zygic3NocGFtX3Ro cmVhZDogdXNlciBpcyAnJS4xMDBzJyIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdf bmFtZSk7CisrCQlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYnVmZmVyLAorKwkJICAgIHNz aHBhbV9hdXRoY3R4dC0+cHctPnB3X25hbWUpKSAhPSAwKQorKwkJCWZhdGFsKCIlczogYnVmZmVy IGVycm9yOiAlcyIsIF9fZnVuY19fLCBzc2hfZXJyKHIpKTsKKysJfQorIAorIAkvKiBFeHBvcnQg YW55IGVudmlyb25tZW50IHN0cmluZ3Mgc2V0IGluIGNoaWxkICovCisgCWZvciAoaSA9IDA7IGVu dmlyb25baV0gIT0gTlVMTDsgaSsrKSB7CitAQCAtNzQ5LDYgKzgyNyw4IEBACisgCQkgICAgb3B0 aW9ucy51c2VfZG5zKSk7CisgCQlzc2hwYW1fbGFkZHIgPSBnZXRfbG9jYWxfaXBhZGRyKAorIAkJ ICAgIHNzaF9wYWNrZXRfZ2V0X2Nvbm5lY3Rpb25faW4oc3NoKSk7CisrCQkvKiBTYXZlIHNvIGFs bG93ZWRfdXNlciBjYW4gYmUgY2FsbGVkIGxhdGVyICovCisrCQlzc2hwYW1fc3NoID0gc3NoOwor IAl9CisgCWlmIChzc2hwYW1fcmhvc3QgIT0gTlVMTCAmJiBzdHJjbXAoc3NocGFtX3Job3N0LCAi VU5LTk9XTiIpICE9IDApIHsKKyAJCWRlYnVnKCJQQU06IHNldHRpbmcgUEFNX1JIT1NUIHRvIFwi JXNcIiIsIHNzaHBhbV9yaG9zdCk7CitAQCAtMTA4Myw2ICsxMTYzLDE4IEBACisgCWRlYnVnMygi UEFNOiAlcyBwYW1fYWNjdF9tZ210ID0gJWQgKCVzKSIsIF9fZnVuY19fLCBzc2hwYW1fZXJyLAor IAkgICAgcGFtX3N0cmVycm9yKHNzaHBhbV9oYW5kbGUsIHNzaHBhbV9lcnIpKTsKKyAKKysJaWYg KG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSkgeworKwkJZGVidWcoImRvX3BhbV9hY2Nv dW50OiB1c2VyIGlzICclLjEwMHMnIiwKKysJCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19u YW1lKTsKKysJCXNzaHBhbV9jaGVja191c2VyY2hhbmdlZCgpOworKwkJZGVidWcoImRvX3BhbV9h Y2NvdW50OiB1c2VyIGlzICclLjEwMHMnIiwKKysJCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5w d19uYW1lKTsKKysJCWlmIChnZXRwd25hbShzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKSA9 PSBOVUxMKQorKwkJCWZhdGFsKCJQQU06IGNvbXBsZXRlZCBhdXRoZW50aWNhdGlvbiBidXQgUEFN IGFjY291bnQgaW52YWxpZCIpOworKwkJZGVidWcoImRvX3BhbV9hY2NvdW50OiB1c2VyIGlzICcl LjEwMHMnIiwKKysJCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKKysJfQorKwor IAlpZiAoc3NocGFtX2VyciAhPSBQQU1fU1VDQ0VTUyAmJiBzc2hwYW1fZXJyICE9IFBBTV9ORVdf QVVUSFRPS19SRVFEKSB7CisgCQlzc2hwYW1fYWNjb3VudF9zdGF0dXMgPSAwOworIAkJcmV0dXJu IChzc2hwYW1fYWNjb3VudF9zdGF0dXMpOworQEAgLTEyOTEsNiArMTM4Myw5IEBACisgCWV4cG9z ZV9hdXRoaW5mbyhfX2Z1bmNfXyk7CisgCisgCXNzaHBhbV9lcnIgPSBwYW1fYXV0aGVudGljYXRl KHNzaHBhbV9oYW5kbGUsIGZsYWdzKTsKKysJaWYgKG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2No YW5nZSkgeworKwkJc3NocGFtX2NoZWNrX3VzZXJjaGFuZ2VkKCk7CisrCX0KKyAJc3NocGFtX3Bh c3N3b3JkID0gTlVMTDsKKyAJZnJlZShmYWtlKTsKKyAJaWYgKHNzaHBhbV9lcnIgPT0gUEFNX1NV Q0NFU1MpCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9hdXRoLXBhbS5oIG9wZW5zc2gt MTAuNXAxL2F1dGgtcGFtLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2F1dGgtcGFtLmgJMjAy Ni0wOS0yMSAwNTo0MDo1Ny43NDY2NDYzNjcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9hdXRo LXBhbS5oCTIwMjYtMDktMjEgMDU6NDE6MzAuODMwMzM1MTQwICswMjAwCitAQCAtNDQsNSArNDQs NiBAQAorIHZvaWQgc3NocGFtX3NldF9tYXh0cmllc19yZWFjaGVkKGludCk7CisgaW50IGlzX3Bh bV9zZXNzaW9uX29wZW4odm9pZCk7CisgaW50IHNzaHBhbV9wcml2X2tiZGludF9hdXRoZG9uZSh2 b2lkICpjdHh0cCk7Cisrc3RydWN0IHBhc3N3ZCAqc3NocGFtX2dldHB3KGNvbnN0IGNoYXIgKik7 CisgCisgI2VuZGlmIC8qIFVTRV9QQU0gKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmln L2Nhbm9ob3N0LmMgb3BlbnNzaC0xMC41cDEvY2Fub2hvc3QuYworLS0tIG9wZW5zc2gtMTAuNXAx Lm9yaWcvY2Fub2hvc3QuYwkyMDI2LTA5LTIxIDA1OjQwOjU3Ljg2ODAwNDE3MiArMDIwMAorKysr IG9wZW5zc2gtMTAuNXAxL2Nhbm9ob3N0LmMJMjAyNi0wOS0yMSAwNTo0MTozMC44MzA1MjAxNjgg KzAyMDAKK0BAIC0xNyw2ICsxNyw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNs dWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPHN5cy91bi5oPgorKyNpbmNsdWRlIDxzeXMv cGFyYW0uaD4gICAgICAgICAgLyogZm9yIE1BWEhPU1ROQU1FTEVOICovCisgCisgI2luY2x1ZGUg PG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CitAQCAtMzAwLDMgKzMwMSwz MyBAQAorIHsKKyAJcmV0dXJuIGdldF9zb2NrX3BvcnQoc29jaywgMSk7CisgfQorKworK3ZvaWQK KytyZXNvbHZlX2xvY2FsaG9zdChjaGFyICoqaG9zdCkKKyt7CisrCXN0cnVjdCBob3N0ZW50ICpo b3N0aW5mbzsKKysKKysJaG9zdGluZm8gPSBnZXRob3N0YnluYW1lKCpob3N0KTsKKysJaWYgKGhv c3RpbmZvID09IE5VTEwgfHwgaG9zdGluZm8tPmhfbmFtZSA9PSBOVUxMKSB7CisrCQlkZWJ1Zygi Z2V0aG9zdGJ5bmFtZSglcykgZmFpbGVkIiwgKmhvc3QpOworKwkJcmV0dXJuOworKwl9CisrCWlm IChob3N0aW5mby0+aF9hZGRydHlwZSA9PSBBRl9JTkVUKSB7CisrCQlzdHJ1Y3QgaW5fYWRkciBh ZGRyOworKwkJYWRkciA9ICooc3RydWN0IGluX2FkZHIgKikoaG9zdGluZm8tPmhfYWRkcik7Cisr CQlpZiAobnRvaGwoYWRkci5zX2FkZHIpID09IElOQUREUl9MT09QQkFDSykgeworKwkJCWNoYXIg YnVmW01BWEhPU1ROQU1FTEVOXTsKKysJCQlpZiAoZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2YoYnVm KSkgPCAwKSB7CisrCQkJCWRlYnVnKCJnZXRob3N0bmFtZSgpIGZhaWxlZCIpOworKwkJCQlyZXR1 cm47CisrCQkJfQorKwkJCWhvc3RpbmZvID0gZ2V0aG9zdGJ5bmFtZShidWYpOworKwkJCWZyZWUo Kmhvc3QpOworKwkJCWlmIChob3N0aW5mbyA9PSBOVUxMIHx8IGhvc3RpbmZvLT5oX25hbWUgPT0g TlVMTCkgeworKwkJCQkqaG9zdCA9IHhzdHJkdXAoYnVmKTsKKysJCQl9IGVsc2UgeworKwkJCQkq aG9zdCA9IHhzdHJkdXAoaG9zdGluZm8tPmhfbmFtZSk7CisrCQkJfQorKwkJfQorKwl9CisrfQor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2Fub2hvc3QuaCBvcGVuc3NoLTEwLjVwMS9j YW5vaG9zdC5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9jYW5vaG9zdC5oCTIwMjYtMDktMjEg MDU6NDA6NTcuODY4MDYxMTkyICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvY2Fub2hvc3QuaAky MDI2LTA5LTIxIDA1OjQxOjMwLjgzMDgzNzkxMSArMDIwMAorQEAgLTI2LDQgKzI2LDYgQEAKKyAK KyAjZW5kaWYgLyogX0NBTk9IT1NUX0ggKi8KKyAKKyt2b2lkCQkgcmVzb2x2ZV9sb2NhbGhvc3Qo Y2hhciAqKmhvc3QpOworKworIHZvaWQJCSBpcHY2NF9ub3JtYWxpc2VfbWFwcGVkKHN0cnVjdCBz b2NrYWRkcl9zdG9yYWdlICosIHNvY2tsZW5fdCAqKTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVw MS5vcmlnL2NvbmZpZ3VyZS5hYyBvcGVuc3NoLTEwLjVwMS9jb25maWd1cmUuYWMKKy0tLSBvcGVu c3NoLTEwLjVwMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDI2LTA5LTIxIDA1OjQwOjU4LjQwNzE3NjE1 NSArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NvbmZpZ3VyZS5hYwkyMDI2LTA5LTIxIDA1OjQx OjMwLjgzMTI1NjA0OSArMDIwMAorQEAgLTUwODMsNiArNTA4MywxNCBAQAorIAkJCQlBQ19DSEVD S19IRUFERVIoW2dzc2FwaV9rcmI1LmhdLCAsCisgCQkJCQkJWyBDUFBGTEFHUz0iJG9sZENQUCIg XSkKKyAKKysJCQkJIyBJZiB3ZSdyZSB1c2luZyBzb21lIG90aGVyIEdTU0FQSQorKwkJCQlpZiB0 ZXN0IC1uICIkR1NTQVBJIiA7IHRoZW4KKysJCQkJCUFDX01TR19FUlJPUihbUHJldmlvdXNseSBj b25maWd1cmVkIEdTU0FQSSBsaWJyYXJ5IGNvbmZsaWN0cyB3aXRoIEtlcmJlcm9zIEdTSS5dKQor KwkJCQlmaQorKwkKKysJCQkJaWYgdGVzdCAteiAiJEdTU0FQSSI7IHRoZW4KKysJCQkJCUdTU0FQ ST0iS1JCNSI7CisrCQkJCWZpCisgCQkJZmkKKyAJCWZpCisgCQlpZiB0ZXN0IC1uICIke3JwYXRo X29wdH0iIDsgdGhlbgorQEAgLTUxMzEsNiArNTEzOSw0MCBAQAorIEFDX1NVQlNUKFtLNUxJQlNd KQorIEFDX1NVQlNUKFtDSEFOTkVMTElCU10pCisgCisrIyBDaGVjayB3aGV0aGVyIHRoZSB1c2Vy IHdhbnRzIEdTSSAoR2xvYnVzKSBzdXBwb3J0CisrZ3NpPSJubyIKKytBQ19BUkdfV0lUSChnc2ks CisrCVsgIC0td2l0aC1nc2kgICAgICAgICAgICAgIEVuYWJsZSBHbG9idXMgR1NJIGF1dGhlbnRp Y2F0aW9uIHN1cHBvcnRdLAorKwlbCisrCQlnc2k9IiR3aXRodmFsIgorKwldCisrKQorKworK2lm IHRlc3QgIngkZ3NpIiAhPSAieG5vIiA7IHRoZW4KKysJIyBHbG9idXMgR1NTQVBJIGNvbmZpZ3Vy YXRpb24KKysJQUNfTVNHX0NIRUNLSU5HKGZvciBHbG9idXMgR1NJKQorKwlBQ19ERUZJTkUoR1NJ LCAxLCBbRGVmaW5lIGlmIHlvdSB3YW50IEdTSS9HbG9idXMgYXV0aGVudGljYXRpb24gc3VwcG9y dC5dKQorKworKwlpZiB0ZXN0IC1uICIkR1NTQVBJIiA7IHRoZW4KKysJCUFDX01TR19FUlJPUihb UHJldmlvdXNseSBjb25maWd1cmVkIEdTU0FQSSBsaWJyYXJ5IGNvbmZsaWN0cyB3aXRoIEdsb2J1 cyBHU0kuXSkKKysJZmkKKysKKysJaWYgdGVzdCAteiAiJEdTU0FQSSIgOyB0aGVuCisrCQlHU1NB UEk9IkdTSSIKKysJZmkKKysKKysJQUNfUEFUSF9UT09MKFtQS0dDT05GSUddLCBbcGtnLWNvbmZp Z10sIFtub10pCisrCWlmIHRlc3QgIngkUEtHQ09ORklHIiAhPSAieG5vIjsgdGhlbgorKwkJTElC Uz0iJExJQlMgYCRQS0dDT05GSUcgLS1saWJzIGdsb2J1cy1nc3MtYXNzaXN0IGdsb2J1cy1nc3Nh cGktZ3NpIGdsb2J1cy1jb21tb25gIgorKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJFBLR0NPTkZJ RyAtLWNmbGFncyBnbG9idXMtZ3NzLWFzc2lzdCBnbG9idXMtZ3NzYXBpLWdzaSBnbG9idXMtY29t bW9uYCIKKysJZmkKKysKKysJQUNfREVGSU5FKEdTU0FQSSkKKysJQUNfREVGSU5FKEhBVkVfR1NT QVBJX0gpCisrCisrCUFDX0NIRUNLX0ZVTkNTKGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0 aG9yaXplKQorK2ZpCisrCisgIyBMb29raW5nIGZvciBwcm9ncmFtcywgcGF0aHMgYW5kIGZpbGVz CisgCisgUFJJVlNFUF9QQVRIPS92YXIvZW1wdHkKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5v cmlnL2dzcy1nZW5yLmMgb3BlbnNzaC0xMC41cDEvZ3NzLWdlbnIuYworLS0tIG9wZW5zc2gtMTAu NXAxLm9yaWcvZ3NzLWdlbnIuYwkyMDI2LTA5LTIxIDA1OjQwOjU3Ljg2ODg5MDY2NyArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL2dzcy1nZW5yLmMJMjAyNi0wOS0yMSAwNTo0MTozMC44MzM0NzEz MTQgKzAyMDAKK0BAIC00MSw2ICs0MSw3IEBACisgI2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNs dWRlICJzc2hidWYuaCIKKyAjaW5jbHVkZSAibG9nLmgiCisrI2luY2x1ZGUgImNhbm9ob3N0Lmgi CisgI2luY2x1ZGUgInNzaDIuaCIKKyAjaW5jbHVkZSAiY2lwaGVyLmgiCisgI2luY2x1ZGUgInNz aGtleS5oIgorQEAgLTQyNiw5ICs0MjcsMTggQEAKKyBzc2hfZ3NzYXBpX2ltcG9ydF9uYW1lKEdz c2N0eHQgKmN0eCwgY29uc3QgY2hhciAqaG9zdCkKKyB7CisgCWdzc19idWZmZXJfZGVzYyBnc3Ni dWY7CisrCWNoYXIgKnhob3N0OworIAljaGFyICp2YWw7CisgCistCXhhc3ByaW50ZigmdmFsLCAi aG9zdEAlcyIsIGhvc3QpOworKwkvKiBNYWtlIGEgY29weSBvZiB0aGUgaG9zdCBuYW1lLCBpbiBj YXNlIGl0IHdhcyByZXR1cm5lZCBieSBhCisrCSAqIHByZXZpb3VzIGNhbGwgdG8gZ2V0aG9zdGJ5 bmFtZSgpLiAqLworKwl4aG9zdCA9IHhzdHJkdXAoaG9zdCk7CisrCisrCS8qIE1ha2Ugc3VyZSB3 ZSBoYXZlIHRoZSBGUUROLiBTb21lIEdTU0FQSSBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgZG8KKysJ ICogdGhpcyBmb3IgdXMgdGhlbXNlbHZlcyAqLworKwlyZXNvbHZlX2xvY2FsaG9zdCgmeGhvc3Qp OworKworKwl4YXNwcmludGYoJnZhbCwgImhvc3RAJXMiLCB4aG9zdCk7CisgCWdzc2J1Zi52YWx1 ZSA9IHZhbDsKKyAJZ3NzYnVmLmxlbmd0aCA9IHN0cmxlbihnc3NidWYudmFsdWUpOworIAorQEAg LTQzNiw2ICs0NDYsNyBAQAorIAkgICAgJmdzc2J1ZiwgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJ Q0UsICZjdHgtPm5hbWUpKSkKKyAJCXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKKyAKKysJZnJlZSh4 aG9zdCk7CisgCWZyZWUoZ3NzYnVmLnZhbHVlKTsKKyAJcmV0dXJuIChjdHgtPm1ham9yKTsKKyB9 CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9nc3Mtc2Vydi5jIG9wZW5zc2gtMTAuNXAx L2dzcy1zZXJ2LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2dzcy1zZXJ2LmMJMjAyNi0wOS0y MSAwNTo0MDo1OC4zODgwNzYwNzMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9nc3Mtc2Vydi5j CTIwMjYtMDktMjEgMDU6NDE6MzAuODMzNzk1NzIwICswMjAwCitAQCAtNTIsMTAgKzUyLDEyIEBA CisgI2luY2x1ZGUgIm1vbml0b3Jfd3JhcC5oIgorIAorIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9w dGlvbnM7CisrZXh0ZXJuIEF1dGhjdHh0ICp0aGVfYXV0aGN0eHQ7CisgCisgc3RhdGljIHNzaF9n c3NhcGlfY2xpZW50IGdzc2FwaV9jbGllbnQgPQorLSAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwg R1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFMLAorLSAgICBHU1NfQ19OT19O QU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5VTEwsIDB9 OworKyAgICB7IHswLCBOVUxMfSwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19FTVBUWV9CVUZG RVIsIEdTU19DX05PX0NSRURFTlRJQUwsCisrICAgICAgR1NTX0NfTk9fTkFNRSwgR1NTX0NfTk9f TkFNRSwgTlVMTCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LAorKyAgICAgIEdTU19D X05PX0NPTlRFWFQsIDAsIDAsIE5VTEwsIDB9OworIAorIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlf bnVsbF9tZWNoID0KKyAgICAgeyBOVUxMLCBOVUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEx9OworQEAgLTYzLDE0ICs2NSwyNiBAQAorICNpZmRlZiBLUkI1CisgZXh0 ZXJuIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfa2VyYmVyb3NfbWVjaDsKKyAjZW5kaWYKKysjaWZk ZWYgR1NJCisrZXh0ZXJuIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfZ3NpX21lY2g7CisrZXh0ZXJu IHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfZ3NpX21lY2hfbWljdjI7CisrI2VuZGlmCisgCisgc3No X2dzc2FwaV9tZWNoKiBzdXBwb3J0ZWRfbWVjaHNbXT0geworICNpZmRlZiBLUkI1CisgCSZnc3Nh cGlfa2VyYmVyb3NfbWVjaCwKKyAjZW5kaWYKKysjaWZkZWYgR1NJCisrCSZnc3NhcGlfZ3NpX21l Y2hfbWljdjIsCisrCSZnc3NhcGlfZ3NpX21lY2gsCisrI2VuZGlmCisgCSZnc3NhcGlfbnVsbF9t ZWNoLAorIH07CisgCisrI2lmZGVmIEdTU19DX0dMT0JVU19MSU1JVEVEX1BST1hZX0ZMQUcKKytz dGF0aWMgaW50IGxpbWl0ZWQgPSAwOworKyNlbmRpZgorKworIC8qCisgICogc3NoX2dzc2FwaV9z dXBwb3J0ZWRfb2lkcygpIGNhbiBjYXVzZSBzYW5kYm94IHZpb2xhdGlvbnMsIHNvIHByZXBhcmUg dGhlCisgICogbGlzdCBvZiBzdXBwb3J0ZWQgbWVjaGFuaXNtcyBiZWZvcmUgcHJpdnNlcCBpcyBz ZXQgdXAuCitAQCAtMjMxLDYgKzI0NSwxMCBAQAorIAkgICAgKCpmbGFncyAmIEdTU19DX0lOVEVH X0ZMQUcpKSkgJiYgKGN0eC0+bWFqb3IgPT0gR1NTX1NfQ09NUExFVEUpKSB7CisgCQlpZiAoc3No X2dzc2FwaV9nZXRjbGllbnQoY3R4LCAmZ3NzYXBpX2NsaWVudCkpCisgCQkJZmF0YWwoIkNvdWxk bid0IGNvbnZlcnQgY2xpZW50IG5hbWUiKTsKKysjaWZkZWYgR1NTX0NfR0xPQlVTX0xJTUlURURf UFJPWFlfRkxBRworKwkJaWYgKGZsYWdzICYmICgqZmxhZ3MgJiBHU1NfQ19HTE9CVVNfTElNSVRF RF9QUk9YWV9GTEFHKSkKKysJCQlsaW1pdGVkPTE7CisrI2VuZGlmCisgCX0KKyAKKyAJcmV0dXJu IChzdGF0dXMpOworQEAgLTI1MCw2ICsyNjgsMjAgQEAKKyAKKyAJdG9rID0gZW5hbWUtPnZhbHVl OworIAorKyNpZmRlZiBHU0kgLyogR1NJIGdzc19leHBvcnRfbmFtZSgpIGlzIGJyb2tlbi4gKi8K KysJaWYgKCgoY3R4LT5vaWQtPmxlbmd0aCA9PSBnc3NhcGlfZ3NpX21lY2gub2lkLmxlbmd0aCkg JiYKKysJICAgICAobWVtY21wKGN0eC0+b2lkLT5lbGVtZW50cywgZ3NzYXBpX2dzaV9tZWNoLm9p ZC5lbGVtZW50cywKKysJCSAgICAgZ3NzYXBpX2dzaV9tZWNoLm9pZC5sZW5ndGgpID09IDApKSB8 fAorKwkgICAgKChjdHgtPm9pZC0+bGVuZ3RoID09IGdzc2FwaV9nc2lfbWVjaF9taWN2Mi5vaWQu bGVuZ3RoKSAmJgorKwkgICAgIChtZW1jbXAoY3R4LT5vaWQtPmVsZW1lbnRzLCBnc3NhcGlfZ3Np X21lY2hfbWljdjIub2lkLmVsZW1lbnRzLAorKwkJICAgICBnc3NhcGlfZ3NpX21lY2hfbWljdjIu b2lkLmxlbmd0aCkgPT0gMCkpKSB7CisrCQluYW1lLT5sZW5ndGggPSBlbmFtZS0+bGVuZ3RoOwor KwkJbmFtZS0+dmFsdWUgPSB4bWFsbG9jKGVuYW1lLT5sZW5ndGgrMSk7CisrCQltZW1jcHkobmFt ZS0+dmFsdWUsIGVuYW1lLT52YWx1ZSwgZW5hbWUtPmxlbmd0aCk7CisrCQlyZXR1cm4gR1NTX1Nf Q09NUExFVEU7CisrCX0KKysjZW5kaWYKKysKKyAJLyoKKyAJICogQ2hlY2sgdGhhdCBlbmFtZSBp cyBsb25nIGVub3VnaCBmb3IgYWxsIG9mIHRoZSBmaXhlZCBsZW5ndGgKKyAJICogaGVhZGVyLCBh bmQgdGhhdCB0aGUgaW5pdGlhbCBJRCBieXRlcyBhcmUgY29ycmVjdAorQEAgLTI5OCw2ICszMzAs NyBAQAorIH0KKyAKKyAKKysjaWZkZWYgS1JCNQorIC8qIEV4dHJhY3QgYXV0aGVudGljYXRpb24g aW5kaWNhdG9ycyBmcm9tIHRoZSBLZXJiZXJvcyB0aWNrZXQuIEF1dGhlbnRpY2F0aW9uCisgICog aW5kaWNhdG9ycyBhcmUgR1NTQVBJIG5hbWUgYXR0cmlidXRlcyBmb3IgdGhlIG5hbWUgImF1dGgt aW5kaWNhdG9ycyIuCisgICogTXVsdGlwbGUgaW5kaWNhdG9ycyBtaWdodCBiZSBwcmVzZW50IGlu IHRoZSB0aWNrZXQuCitAQCAtMzg5LDYgKzQyMiw3IEBACisgCWdzc19yZWxlYXNlX2J1ZmZlcl9z ZXQoJmN0eC0+bWlub3IsICZhdHRycyk7CisgCXJldHVybiBjdHgtPm1ham9yOworIH0KKysjZW5k aWYKKyAKKyAvKiBFeHRyYWN0IHRoZSBjbGllbnQgZGV0YWlscyBmcm9tIGEgZ2l2ZW4gY29udGV4 dC4gVGhpcyBjYW4gb25seSByZWxpYWJseQorICAqIGJlIGNhbGxlZCBvbmNlIGZvciBhIGNvbnRl eHQgKi8KK0BAIC00MDMsMjEgKzQzNywyNCBAQAorIAlnc3NfYnVmZmVyX2Rlc2MgZW5hbWUgPSBH U1NfQ19FTVBUWV9CVUZGRVI7CisgCisgCWlmIChvcHRpb25zLmdzc19zdG9yZV9yZWtleSAmJiBj bGllbnQtPnVzZWQgJiYgY3R4LT5jbGllbnRfY3JlZHMpIHsKKy0JCWlmIChjbGllbnQtPm1lY2gt Pm9pZC5sZW5ndGggIT0gY3R4LT5vaWQtPmxlbmd0aCB8fAorLQkJICAgIChtZW1jbXAoY2xpZW50 LT5tZWNoLT5vaWQuZWxlbWVudHMsCisrCQlpZiAoY2xpZW50LT5vaWQubGVuZ3RoICE9IGN0eC0+ b2lkLT5sZW5ndGggfHwKKysJCSAgICAobWVtY21wKGNsaWVudC0+b2lkLmVsZW1lbnRzLAorIAkJ ICAgICBjdHgtPm9pZC0+ZWxlbWVudHMsIGN0eC0+b2lkLT5sZW5ndGgpICE9MCkpIHsKKyAJCQlk ZWJ1ZygiUmVrZXllZCBjcmVkZW50aWFscyBoYXZlIGRpZmZlcmVudCBtZWNoYW5pc20iKTsKKyAJ CQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7CisgCQl9CisgCistCQlpZiAoKGN0eC0+bWFqb3IgPSBn c3NfaW5xdWlyZV9jcmVkX2J5X21lY2goJmN0eC0+bWlub3IsCistCQkgICAgY3R4LT5jbGllbnRf Y3JlZHMsIGN0eC0+b2lkLCAmbmV3X25hbWUsCisrCQkvKiBDYWxsIGdzc19pbnF1aXJlX2NyZWQg cmF0aGVyIHRoYW4gZ3NzX2lucXVpcmVfY3JlZF9ieV9tZWNoCisrCQkgICBiZWNhdXNlIEdTSSBk b2Vzbid0IHN1cHBvcnQgdGhlIGxhdHRlci4gLWpiYXNuZXkgKi8KKysKKysJCWlmICgoY3R4LT5t YWpvciA9IGdzc19pbnF1aXJlX2NyZWQoJmN0eC0+bWlub3IsCisrCQkgICAgY3R4LT5jbGllbnRf Y3JlZHMsICZuZXdfbmFtZSwKKyAJCSAgICBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKKyAJCQlzc2hf Z3NzYXBpX2Vycm9yKGN0eCk7CisgCQkJcmV0dXJuIChjdHgtPm1ham9yKTsKKyAJCX0KKyAKKy0J CWN0eC0+bWFqb3IgPSBnc3NfY29tcGFyZV9uYW1lKCZjdHgtPm1pbm9yLCBjbGllbnQtPm5hbWUs CisrCQljdHgtPm1ham9yID0gZ3NzX2NvbXBhcmVfbmFtZSgmY3R4LT5taW5vciwgY2xpZW50LT5j cmVkX25hbWUsCisgCQkgICAgbmV3X25hbWUsICZlcXVhbCk7CisgCisgCQlpZiAoR1NTX0VSUk9S KGN0eC0+bWFqb3IpKSB7CitAQCAtNDMyLDkgKzQ2OSw5IEBACisgCisgCQlkZWJ1ZygiTWFya2lu ZyByZWtleWVkIGNyZWRlbnRpYWxzIGZvciBleHBvcnQiKTsKKyAKKy0JCWdzc19yZWxlYXNlX25h bWUoJmN0eC0+bWlub3IsICZjbGllbnQtPm5hbWUpOworKwkJZ3NzX3JlbGVhc2VfbmFtZSgmY3R4 LT5taW5vciwgJmNsaWVudC0+Y3JlZF9uYW1lKTsKKyAJCWdzc19yZWxlYXNlX2NyZWQoJmN0eC0+ bWlub3IsICZjbGllbnQtPmNyZWRzKTsKKy0JCWNsaWVudC0+bmFtZSA9IG5ld19uYW1lOworKwkJ Y2xpZW50LT5jcmVkX25hbWUgPSBuZXdfbmFtZTsKKyAJCWNsaWVudC0+Y3JlZHMgPSBjdHgtPmNs aWVudF9jcmVkczsKKyAJCWN0eC0+Y2xpZW50X2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsK KyAJCWNsaWVudC0+dXBkYXRlZCA9IDE7CitAQCAtNDUxLDEyICs0ODgsMTcgQEAKKyAJCWkrKzsK KyAJfQorIAorKwlpZiAoY2xpZW50LT5vaWQuZWxlbWVudHMgPT0gTlVMTCkKKysJCWNsaWVudC0+ b2lkID0gKmN0eC0+b2lkOworIAlpZiAoY2xpZW50LT5tZWNoID09IE5VTEwpCisgCQlyZXR1cm4g R1NTX1NfRkFJTFVSRTsKKyAKKysJLyogQ2FsbCBnc3NfaW5xdWlyZV9jcmVkIHJhdGhlciB0aGFu IGdzc19pbnF1aXJlX2NyZWRfYnlfbWVjaAorKwkgICBiZWNhdXNlIEdTSSBkb2Vzbid0IHN1cHBv cnQgdGhlIGxhdHRlci4gLWpiYXNuZXkgKi8KKysKKyAJaWYgKGN0eC0+Y2xpZW50X2NyZWRzICYm CistCSAgICAoY3R4LT5tYWpvciA9IGdzc19pbnF1aXJlX2NyZWRfYnlfbWVjaCgmY3R4LT5taW5v ciwKKy0JICAgICBjdHgtPmNsaWVudF9jcmVkcywgY3R4LT5vaWQsICZjbGllbnQtPm5hbWUsIE5V TEwsIE5VTEwsIE5VTEwpKSkgeworKwkgICAgKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVk KCZjdHgtPm1pbm9yLAorKwkgICAgIGN0eC0+Y2xpZW50X2NyZWRzLCAmY2xpZW50LT5jcmVkX25h bWUsIE5VTEwsIE5VTEwsIE5VTEwpKSkgeworIAkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOworIAkJ cmV0dXJuIChjdHgtPm1ham9yKTsKKyAJfQorQEAgLTQ3MywyNSArNTE1LDM3IEBACisgCQlyZXR1 cm4gKGN0eC0+bWFqb3IpOworIAl9CisgCistCWlmICgoY3R4LT5tYWpvciA9IHNzaF9nc3NhcGlf cGFyc2VfZW5hbWUoY3R4LCZlbmFtZSwKKysJaWYgKChjbGllbnQtPm1lY2gtPm9pZC5lbGVtZW50 cyAhPSBOVUxMKSAmJgorKwkgICAgKGN0eC0+bWFqb3IgPSBzc2hfZ3NzYXBpX3BhcnNlX2VuYW1l KGN0eCwmZW5hbWUsCisgCSAgICAmY2xpZW50LT5leHBvcnRlZG5hbWUpKSkgeworIAkJcmV0dXJu IChjdHgtPm1ham9yKTsKKyAJfQorIAorKwlpZiAoKGN0eC0+bWFqb3IgPSBnc3NfZHVwbGljYXRl X25hbWUoJmN0eC0+bWlub3IsIGN0eC0+Y2xpZW50LAorKwkgICAgJmNsaWVudC0+Y3R4X25hbWUp KSkKKysJCXJldHVybiBjdHgtPm1ham9yOworKworIAlnc3NfcmVsZWFzZV9idWZmZXIoJmN0eC0+ bWlub3IsICZlbmFtZSk7CisrI2lmZGVmIEtSQjUKKyAJLyogUmV0cmlldmUgYXV0aGVudGljYXRp b24gaW5kaWNhdG9ycywgaWYgdGhleSBleGlzdCAqLworIAlpZiAoKGN0eC0+bWFqb3IgPSBzc2hf Z3NzYXBpX2dldGluZGljYXRvcnMoY3R4LAorIAkgICAgY3R4LT5jbGllbnQsIGNsaWVudCkpKSB7 CisgCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7CisgCQlyZXR1cm4gKGN0eC0+bWFqb3IpOworIAl9 CisrI2VuZGlmCisgCisgCS8qIFdlIGNhbid0IGNvcHkgdGhpcyBzdHJ1Y3R1cmUsIHNvIHdlIGp1 c3QgbW92ZSB0aGUgcG9pbnRlciB0byBpdCAqLworIAljbGllbnQtPmNyZWRzID0gY3R4LT5jbGll bnRfY3JlZHM7CisgCWN0eC0+Y2xpZW50X2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKKysK KysJLyogbmVlZGVkIGZvciBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpICov CisrCWNsaWVudC0+Y29udGV4dCA9IGN0eC0+Y29udGV4dDsKKysKKyAJcmV0dXJuIChjdHgtPm1h am9yKTsKKyB9CisgCisrI2lmZGVmIEtSQjUKKyAvKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEtlcmJl cm9zIGNyZWRlbnRpYWxzIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3JlZC4gKi8KKyBpbnQKKyBzc2hf Z3NzYXBpX2NyZWRlbnRpYWxzX3N0b3JlZCh2b2lkKQorQEAgLTg1MSwxMiArOTA1LDE5IEBACisg CisgCXVuc2V0ZW52KCJLUkI1Q0NOQU1FIik7CisgfQorKyNlbmRpZgorIAorICNpZm5kZWYgS1JC NQorIC8qIEFzIHVzZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhpdDsgZnVsbCBpbXBsZW1lbnRhdGlv biBpbiBnc3Mtc2Vydi1rcmI1LmMgKi8KKyB2b2lkCisgc3NoX2dzc2FwaV9jbGVhbnVwX2NyZWRz KHZvaWQpCisgeworKwlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSAhPSBOVUxMKSB7 CisrCQkvKiBVbmxpbmsgcHJvYmFibHkgaXNuJ3Qgc3VmZmljaWVudCAqLworKwkJZGVidWcoInJl bW92aW5nIGdzc2FwaSBjcmVkIGZpbGVcIiVzXCIiLAorKwkJICAgIGdzc2FwaV9jbGllbnQuc3Rv cmUuZmlsZW5hbWUpOworKwkJdW5saW5rKGdzc2FwaV9jbGllbnQuc3RvcmUuZmlsZW5hbWUpOwor Kwl9CisgfQorIAorIC8qCitAQCAtODc5LDYgKzk0MCwxMSBAQAorIAl9CisgCisgCWlmIChnc3Nh cGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNoLT5zdG9yZWNyZWRzKSB7CisrCQlp ZiAob3B0aW9ucy5nc3NfY3JlZHNfcGF0aCkgeworKwkJCWdzc2FwaV9jbGllbnQuc3RvcmUuZmls ZW5hbWUgPQorKwkJCSAgICBleHBhbmRfYXV0aG9yaXplZF9rZXlzKG9wdGlvbnMuZ3NzX2NyZWRz X3BhdGgsCisrCQkJICAgIHRoZV9hdXRoY3R4dC0+cHcpOworKwkJfQorIAkJcmV0dXJuICgqZ3Nz YXBpX2NsaWVudC5tZWNoLT5zdG9yZWNyZWRzKSgmZ3NzYXBpX2NsaWVudCk7CisgCX0gZWxzZQor IAkJZGVidWcoInNzaF9nc3NhcGlfc3RvcmVjcmVkczogTm90IGEgR1NTQVBJIG1lY2hhbmlzbSIp OworQEAgLTkxMiwxMSArOTc4LDEzIEBACisgCisgCSh2b2lkKSBrZXg7IC8qIHVzZWQgaW4gcHJp dmlsZWdlIHNlcGFyYXRpb24gKi8KKyAKKy0JaWYgKGdzc2FwaV9jbGllbnQuZXhwb3J0ZWRuYW1l Lmxlbmd0aCA9PSAwIHx8CistCSAgICBnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS52YWx1ZSA9 PSBOVUxMKSB7CistCQlkZWJ1ZygiTm8gc3VpdGFibGUgY2xpZW50IGRhdGEiKTsKKysjaWZkZWYg R1NTX0NfR0xPQlVTX0xJTUlURURfUFJPWFlfRkxBRworKwlpZiAobGltaXRlZCAmJiBvcHRpb25z LmdzaV9hbGxvd19saW1pdGVkX3Byb3h5ICE9IDEpIHsKKysJCWRlYnVnKCJsaW1pdGVkIHByb3h5 IG5vdCBhY2NlcHRhYmxlIGZvciByZW1vdGUgbG9naW4iKTsKKyAJCXJldHVybiAwOworIAl9Cisr I2VuZGlmCisrCisgCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNo LT51c2Vyb2spCisgCQlpZiAoKCpnc3NhcGlfY2xpZW50Lm1lY2gtPnVzZXJvaykoJmdzc2FwaV9j bGllbnQsIHVzZXIpKSB7CisgCQkJZ3NzYXBpX2NsaWVudC51c2VkID0gMTsKK0BAIC05MjcsNiAr OTk1LDcgQEAKKyAJCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxtaW4sICZnc3NhcGlfY2xpZW50LmRp c3BsYXluYW1lKTsKKyAJCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxtaW4sICZnc3NhcGlfY2xpZW50 LmV4cG9ydGVkbmFtZSk7CisgCQkJZ3NzX3JlbGVhc2VfY3JlZCgmbG1pbiwgJmdzc2FwaV9jbGll bnQuY3JlZHMpOworKwkJCWdzc19yZWxlYXNlX25hbWUoJmxtaW4sICZnc3NhcGlfY2xpZW50LmN0 eF9uYW1lKTsKKyAKKyAJCQlpZiAoZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzICE9IE5VTEwpIHsK KyAJCQkJZm9yIChpID0gMDsgZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzW2ldICE9IE5VTEw7IGkr KykKK0BAIC05NDIsNiArMTAxMSwyNCBAQAorIAlyZXR1cm4gKDApOworIH0KKyAKKysvKiBQcml2 aWxlZGdlZCAqLworK2ludAorK3NzaF9nc3NhcGlfbG9jYWxuYW1lKGNoYXIgKip1c2VyKQorK3sK KysJKnVzZXIgPSBOVUxMOworKwlpZiAoZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZS5sZW5ndGgg PT0gMCB8fAorKwkgICAgZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZS52YWx1ZSA9PSBOVUxMKSB7 CisrCQlkZWJ1ZygiTm8gc3VpdGFibGUgY2xpZW50IGRhdGEiKTsKKysJCXJldHVybiAoMCk7Cisr CX0KKysJaWYgKGdzc2FwaV9jbGllbnQubWVjaCAmJiBnc3NhcGlfY2xpZW50Lm1lY2gtPmxvY2Fs bmFtZSkgeworKwkJcmV0dXJuKCgqZ3NzYXBpX2NsaWVudC5tZWNoLT5sb2NhbG5hbWUpKCZnc3Nh cGlfY2xpZW50LHVzZXIpKTsKKysJfSBlbHNlIHsKKysJCWRlYnVnKCJVbmtub3duIGNsaWVudCBh dXRoZW50aWNhdGlvbiB0eXBlIik7CisrCX0KKysJcmV0dXJuICgwKTsKKyt9CisrCisgLyogVGhl c2UgYml0cyBhcmUgb25seSB1c2VkIGZvciByZWtleWluZy4gVGhlIHVucHJpdmlsZWRnZWQgY2hp bGQgaXMgcnVubmluZworICAqIGFzIHRoZSB1c2VyLCB0aGUgbW9uaXRvciBpcyByb290LgorICAq CitAQCAtOTY4LDkgKzEwNTUsMTEgQEAKKyAJcGFtX2hhbmRsZV90ICpwYW1oID0gTlVMTDsKKyAJ c3RydWN0IHBhbV9jb252IHBhbWNvbnYgPSB7c3NoX2dzc2FwaV9zaW1wbGVfY29udiwgTlVMTH07 CisgCWNoYXIgKmVudnN0cjsKKysJY2hhciAqKnA7IGNoYXIgKipwdzsKKyAjZW5kaWYKKyAKKy0J aWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZW52dmFsID09IE5VTEwpCisrCWlmIChnc3NhcGlfY2xp ZW50LnN0b3JlLmZpbGVuYW1lID09IE5VTEwgJiYKKysJICAgIGdzc2FwaV9jbGllbnQuc3RvcmUu ZW52dmFsID09IE5VTEwpCisgCQlyZXR1cm47CisgCisgCW9rID0gbW1fc3NoX2dzc2FwaV91cGRh dGVfY3JlZHMoJmdzc2FwaV9jbGllbnQuc3RvcmUpOworQEAgLTk5MCw2ICsxMDc5LDE4IEBACisg CWlmIChyZXQpCisgCQlyZXR1cm47CisgCisrCS8qIFB1dCBzc2ggcGFtIHN0YWNrIGVudiB2YXJp YWJsZXMgaW4gdGhpcyBuZXcgcGFtIHN0YWNrIGVudgorKwkgKiBVc2luZyBwYW0tcGtpbml0LCBL UkI1Q0NOQU1FIGlzIHNldCBkdXJpbmcgZG9fcGFtX3Nlc3Npb24KKysJICogdGhpcyBhZGRpdGlv biBlbmFibGVzIHBhbS1wa2luaXQgdG8gYWNjZXNzIEtSQjVDQ05BTUUgaWYgdXNlZAorKwkgKiBp biBzc2hkLXJla2V5IHN0YWNrIHRvbworKwkgKi8KKysJcHcgPSBwID0gZmV0Y2hfcGFtX2Vudmly b25tZW50KCk7CisrCXdoaWxlICggKnB3ICE9IE5VTEwgKSB7CisrCQlwYW1fcHV0ZW52KHBhbWgs ICpwdyk7CisrCQlwdysrOworKwl9CisrCWZyZWVfcGFtX2Vudmlyb25tZW50KHApOworKworIAl4 YXNwcmludGYoJmVudnN0ciwgIiVzPSVzIiwgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YXIsCisg CSAgICBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCk7CisgCitkaWZmIC1OdXIgb3BlbnNzaC0x MC41cDEub3JpZy9nc3Mtc2Vydi1nc2kuYyBvcGVuc3NoLTEwLjVwMS9nc3Mtc2Vydi1nc2kuYwor LS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvZ3NzLXNlcnYtZ3NpLmMJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9nc3Mtc2Vydi1nc2kuYwkyMDI2 LTA5LTIxIDA1OjQxOjMwLjgzNDI1MzAxNyArMDIwMAorQEAgLTAsMCArMSwzMjggQEAKKysvKgor KyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIFNpbW9uIFdpbGtpbnNvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIEFVVEhPUiBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF RCBXQVJSQU5USUVTCisrICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKysgKiBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisrICogSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKyAqIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQKKysgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKysgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqLworKworKyNp bmNsdWRlICJpbmNsdWRlcy5oIgorKworKyNpZmRlZiBHU1NBUEkKKysjaWZkZWYgR1NJCisrCisr I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgInhtYWxsb2MuaCIKKysjaW5jbHVkZSAiaG9zdGZp bGUuaCIKKysjaW5jbHVkZSAiYXV0aC5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVkZSAi bWlzYy5oIgorKyNpbmNsdWRlICJzZXJ2Y29uZi5oIgorKyNpbmNsdWRlICJzc2gtZ3NzLmgiCisr CisrZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsKKysKKysjaW5jbHVkZSA8Z2xvYnVzX2dz c19hc3Npc3QuaD4KKysKKytzdGF0aWMgaW50IHNzaF9nc3NhcGlfZ3NpX3VzZXJvayhzc2hfZ3Nz YXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICpuYW1lKTsKKytzdGF0aWMgaW50IHNzaF9nc3NhcGlf Z3NpX2xvY2FsbmFtZShzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICoqdXNlcik7Cisr c3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xpZW50ICpj bGllbnQpOworK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkc19taWN2Mihzc2hf Z3NzYXBpX2NsaWVudCAqY2xpZW50KTsKKytzdGF0aWMgaW50IHNzaF9nc3NhcGlfZ3NpX3VwZGF0 ZWNyZWRzKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSwKKysgICAgc3NoX2dzc2FwaV9jbGllbnQg KmNsaWVudCk7Cisrc3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV91cGRhdGVjcmVkc19taWN2Mihz c2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsCisrICAgIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQp OworKworK3NzaF9nc3NhcGlfbWVjaCBnc3NhcGlfZ3NpX21lY2ggPSB7CisrCSJkWnVJZWJNamdV cWF4dmJGN2hEYkF3PT0iLAorKwkiR1NJIiwKKysJezksICJceDJCXHgwNlx4MDFceDA0XHgwMVx4 OUJceDUwXHgwMVx4MDEifSwKKysJTlVMTCwKKysJJnNzaF9nc3NhcGlfZ3NpX3VzZXJvaywKKysJ JnNzaF9nc3NhcGlfZ3NpX2xvY2FsbmFtZSwKKysJJnNzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHMs CisrCSZzc2hfZ3NzYXBpX2dzaV91cGRhdGVjcmVkcworK307CisrCisrc3NoX2dzc2FwaV9tZWNo IGdzc2FwaV9nc2lfbWVjaF9taWN2MiA9IHsKKysJInZ6OEoxRTlQekxyOGIxSyswcmVtVGc9PSIs CisrCSJHU0kiLAorKwl7MTAsICJceDJiXHgwNlx4MDFceDA0XHgwMVx4OWJceDUwXHgwMVx4MDFc eDAxIn0sCisrCU5VTEwsCisrCSZzc2hfZ3NzYXBpX2dzaV91c2Vyb2ssCisrCSZzc2hfZ3NzYXBp X2dzaV9sb2NhbG5hbWUsCisrCSZzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzX21pY3YyLAorKwkm c3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHNfbWljdjIKKyt9OworKworKy8qCisrICogQ2hlY2sg aWYgdGhpcyB1c2VyIGlzIE9LIHRvIGxvZ2luIHVuZGVyIEdTSS4gVXNlciBoYXMgYmVlbiBhdXRo ZW50aWNhdGVkCisrICogYXMgaWRlbnRpdHkgaW4gZ2xvYmFsICdjbGllbnRfbmFtZS52YWx1ZScg YW5kIGlzIHRyeWluZyB0byBsb2cgaW4gYXMgcGFzc2VkCisrICogdXNlcm5hbWUgaW4gJ25hbWUn LgorKyAqCisrICogUmV0dXJucyBub24temVybyBpZiB1c2VyIGlzIGF1dGhvcml6ZWQsIDAgb3Ro ZXJ3aXNlLgorKyAqLworK3N0YXRpYyBpbnQKKytzc2hfZ3NzYXBpX2dzaV91c2Vyb2soc3NoX2dz c2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSkKKyt7CisrICAgIGludCBhdXRob3JpemVk ID0gMDsKKysgICAgZ2xvYnVzX3Jlc3VsdF90IHJlczsKKysjaWZkZWYgSEFWRV9HTE9CVVNfR1NT X0FTU0lTVF9NQVBfQU5EX0FVVEhPUklaRQorKyAgICBjaGFyIGxuYW1lWzI1Nl0gPSAiIjsKKysj ZW5kaWYKKysKKysjaWZkZWYgR0xPQlVTX0dTSV9HU1NfQVNTSVNUX01PRFVMRQorKyAgICBpZiAo Z2xvYnVzX21vZHVsZV9hY3RpdmF0ZShHTE9CVVNfR1NJX0dTU19BU1NJU1RfTU9EVUxFKSAhPSAw KSB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorKworKy8qIHVzZSBuZXcg Z2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoKSBpbnRlcmZhY2UgaWYgYXZhaWxh YmxlICovCisrI2lmZGVmIEhBVkVfR0xPQlVTX0dTU19BU1NJU1RfTUFQX0FORF9BVVRIT1JJWkUK KysgICAgZGVidWcoImNhbGxpbmcgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUo KSIpOworKyAgICBpZiAoR0xPQlVTX1NVQ0NFU1MgIT0KKysgICAgICAgIChyZXMgPSBnbG9idXNf Z3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZShjbGllbnQtPmNvbnRleHQsICJzc2giLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxu YW1lLCAyNTYpKSkgeworKyAgICAgICAgZGVidWcoIiVzIiwgZ2xvYnVzX2Vycm9yX3ByaW50X2No YWluKGdsb2J1c19lcnJvcl9nZXQocmVzKSkpOworKyAgICB9IGVsc2UgaWYgKGxuYW1lWzBdICYm IHN0cmNtcChuYW1lLCBsbmFtZSkgIT0gMCkgeworKyAgICAgICAgZGVidWcoIkdTSSB1c2VyIG1h cHMgdG8gJXMsIG5vdCAlcyIsIGxuYW1lLCBuYW1lKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAg IGF1dGhvcml6ZWQgPSAxOworKyAgICB9CisrI2Vsc2UKKysgICAgZGVidWcoImNhbGxpbmcgZ2xv YnVzX2dzc19hc3Npc3RfdXNlcm9rKCkiKTsKKysgICAgaWYgKEdMT0JVU19TVUNDRVNTICE9Cisr ICAgICAgICAocmVzID0gKGdsb2J1c19nc3NfYXNzaXN0X3VzZXJvayhjbGllbnQtPmRpc3BsYXlu YW1lLnZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt ZSkpKSkgeworKyAgICAgICAgZGVidWcoIiVzIiwgZ2xvYnVzX2Vycm9yX3ByaW50X2NoYWluKGds b2J1c19lcnJvcl9nZXQocmVzKSkpOworKyAgICB9IGVsc2UgeworKyAgICAgICAgYXV0aG9yaXpl ZCA9IDE7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgbG9naXQoIkdTSSB1c2VyICVzIGlzJXMg YXV0aG9yaXplZCBhcyB0YXJnZXQgdXNlciAlcyIsCisrICAgICAgICAoY2hhciAqKSBjbGllbnQt PmRpc3BsYXluYW1lLnZhbHVlLCAoYXV0aG9yaXplZCA/ICIiIDogIiBub3QiKSwgbmFtZSk7Cisr CisrICAgIHJldHVybiBhdXRob3JpemVkOworK30KKysKKysvKgorKyAqIFJldHVybiB0aGUgbG9j YWwgdXNlcm5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBHU0kgY3JlZGVudGlhbHMuCisrICovCisr aW50Cisrc3NoX2dzc2FwaV9nc2lfbG9jYWxuYW1lKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQs IGNoYXIgKip1c2VyKQorK3sKKysgICAgZ2xvYnVzX3Jlc3VsdF90IHJlczsKKysjaWZkZWYgSEFW RV9HTE9CVVNfR1NTX0FTU0lTVF9NQVBfQU5EX0FVVEhPUklaRQorKyAgICBjaGFyIGxuYW1lWzI1 Nl0gPSAiIjsKKysjZW5kaWYKKysKKysjaWZkZWYgR0xPQlVTX0dTSV9HU1NfQVNTSVNUX01PRFVM RQorKyAgICBpZiAoZ2xvYnVzX21vZHVsZV9hY3RpdmF0ZShHTE9CVVNfR1NJX0dTU19BU1NJU1Rf TU9EVUxFKSAhPSAwKSB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorKwor Ky8qIHVzZSBuZXcgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoKSBpbnRlcmZh Y2UgaWYgYXZhaWxhYmxlICovCisrI2lmZGVmIEhBVkVfR0xPQlVTX0dTU19BU1NJU1RfTUFQX0FO RF9BVVRIT1JJWkUKKysgICAgZGVidWcoImNhbGxpbmcgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2Fu ZF9hdXRob3JpemUoKSIpOworKyAgICBpZiAoR0xPQlVTX1NVQ0NFU1MgIT0KKysgICAgICAgIChy ZXMgPSBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZShjbGllbnQtPmNvbnRleHQs ICJzc2giLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsIGxuYW1lLCAyNTYpKSkgeworKyAgICAgICAgZGVidWcoIiVzIiwgZ2xvYnVzX2Vy cm9yX3ByaW50X2NoYWluKGdsb2J1c19lcnJvcl9nZXQocmVzKSkpOworKyAgICAgICAgbG9naXQo ImZhaWxlZCB0byBtYXAgR1NJIHVzZXIgJXMiLCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUu dmFsdWUpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgKnVzZXIgPSBzdHJkdXAo bG5hbWUpOworKyNlbHNlCisrICAgIGRlYnVnKCJjYWxsaW5nIGdsb2J1c19nc3NfYXNzaXN0X2dy aWRtYXAoKSIpOworKyAgICBpZiAoR0xPQlVTX1NVQ0NFU1MgIT0KKysgICAgICAgIChyZXMgPSBn bG9idXNfZ3NzX2Fzc2lzdF9ncmlkbWFwKGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsIHVzZXIp KSkgeworKyAgICAgICAgZGVidWcoIiVzIiwgZ2xvYnVzX2Vycm9yX3ByaW50X2NoYWluKGdsb2J1 c19lcnJvcl9nZXQocmVzKSkpOworKyAgICAgICAgbG9naXQoImZhaWxlZCB0byBtYXAgR1NJIHVz ZXIgJXMiLCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUpOworKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgbG9naXQoIkdTSSB1c2VyICVzIG1hcHBl ZCB0byB0YXJnZXQgdXNlciAlcyIsCisrICAgICAgICAoY2hhciAqKSBjbGllbnQtPmRpc3BsYXlu YW1lLnZhbHVlLCAqdXNlcik7CisrCisrICAgIHJldHVybiAxOworK30KKysKKysvKgorKyAqIEV4 cG9ydCBHU0kgY3JlZGVudGlhbHMgdG8gZGlzay4KKysgKi8KKytzdGF0aWMgaW50Cisrc3NoX2dz c2FwaV9nc2lfc3RvcmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQorK3sKKysJT01f dWludDMyCW1ham9yX3N0YXR1czsKKysJT01fdWludDMyCW1pbm9yX3N0YXR1czsKKysJZ3NzX2J1 ZmZlcl9kZXNjCWV4cG9ydF9jcmVkID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwljaGFyICoJCXA7 CisrCisrCWlmICghY2xpZW50IHx8ICFjbGllbnQtPmNyZWRzKSB7CisrCQlyZXR1cm4gMDsKKysJ fQorKworKwltYWpvcl9zdGF0dXMgPSBnc3NfZXhwb3J0X2NyZWQoJm1pbm9yX3N0YXR1cywKKysJ CQkJICAgICAgIGNsaWVudC0+Y3JlZHMsCisrCQkJCSAgICAgICBHU1NfQ19OT19PSUQsCisrCQkJ CSAgICAgICAxLAorKwkJCQkgICAgICAgJmV4cG9ydF9jcmVkKTsKKysJaWYgKEdTU19FUlJPUiht YWpvcl9zdGF0dXMpICYmIG1ham9yX3N0YXR1cyAhPSBHU1NfU19VTkFWQUlMQUJMRSkgeworKwkJ R3NzY3R4dCAqY3R4OworKwkJc3NoX2dzc2FwaV9idWlsZF9jdHgoJmN0eCk7CisrCQljdHgtPm1h am9yID0gbWFqb3Jfc3RhdHVzOworKwkJY3R4LT5taW5vciA9IG1pbm9yX3N0YXR1czsKKysJCXNz aF9nc3NhcGlfc2V0X29pZChjdHgsICZnc3NhcGlfZ3NpX21lY2gub2lkKTsKKysJCXNzaF9nc3Nh cGlfZXJyb3IoY3R4KTsKKysJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgmY3R4KTsKKysJCXJldHVy biAwOworKwl9CisrCisrCXAgPSBzdHJjaHIoKGNoYXIgKikgZXhwb3J0X2NyZWQudmFsdWUsICc9 Jyk7CisrCWlmIChwID09IE5VTEwpIHsKKysJCWxvZ2l0KCJGYWlsZWQgdG8gcGFyc2UgZXhwb3J0 ZWQgY3JlZGVudGlhbHMgc3RyaW5nICclLjEwMHMnIiwKKysJCSAgICAoY2hhciAqKWV4cG9ydF9j cmVkLnZhbHVlKTsKKysJCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3Jfc3RhdHVzLCAmZXhwb3J0 X2NyZWQpOworKwkJcmV0dXJuIDA7CisrCX0KKysJKnArKyA9ICdcMCc7CisrCWlmIChzdHJjbXAo KGNoYXIgKilleHBvcnRfY3JlZC52YWx1ZSwiWDUwOV9VU0VSX0RFTEVHX1BST1hZIikgPT0gMCkg eworKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSBzdHJkdXAoIlg1MDlfVVNFUl9QUk9YWSIpOwor Kwl9IGVsc2UgeworKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSBzdHJkdXAoKGNoYXIgKilleHBv cnRfY3JlZC52YWx1ZSk7CisrCX0KKysJaWYgKGFjY2VzcyhwLCBSX09LKSA9PSAwKSB7CisrCQlp ZiAoY2xpZW50LT5zdG9yZS5maWxlbmFtZSkgeworKwkJCWlmIChyZW5hbWUocCwgY2xpZW50LT5z dG9yZS5maWxlbmFtZSkgPCAwKSB7CisrCQkJCWxvZ2l0KCJGYWlsZWQgdG8gcmVuYW1lICVzIHRv ICVzOiAlcyIsIHAsCisrCQkJCSAgICBjbGllbnQtPnN0b3JlLmZpbGVuYW1lLCBzdHJlcnJvcihl cnJubykpOworKwkJCQlmcmVlKGNsaWVudC0+c3RvcmUuZmlsZW5hbWUpOworKwkJCQljbGllbnQt PnN0b3JlLmZpbGVuYW1lID0gc3RyZHVwKHApOworKwkJCX0gZWxzZSB7CisrCQkJCXAgPSBjbGll bnQtPnN0b3JlLmZpbGVuYW1lOworKwkJCX0KKysJCX0gZWxzZSB7CisrCQkJY2xpZW50LT5zdG9y ZS5maWxlbmFtZSA9IHN0cmR1cChwKTsKKysJCX0KKysJfQorKwljbGllbnQtPnN0b3JlLmVudnZh bCA9IHN0cmR1cChwKTsKKysjaWZkZWYgVVNFX1BBTQorKwlpZiAob3B0aW9ucy51c2VfcGFtKQor KwkJZG9fcGFtX3B1dGVudihjbGllbnQtPnN0b3JlLmVudnZhciwgY2xpZW50LT5zdG9yZS5lbnZ2 YWwpOworKyNlbmRpZgorKwlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yX3N0YXR1cywgJmV4cG9y dF9jcmVkKTsKKysKKysJcmV0dXJuIDE7CisrfQorKworKy8qCisrICogRXhwb3J0IEdTSSBjcmVk ZW50aWFscyB0byBkaXNrLgorKyAqLworK3N0YXRpYyBpbnQKKytzc2hfZ3NzYXBpX2dzaV9zdG9y ZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCisreworKwlPTV91aW50MzIJ bWFqb3Jfc3RhdHVzOworKwlPTV91aW50MzIJbWlub3Jfc3RhdHVzOworKwlnc3NfYnVmZmVyX2Rl c2MJZXhwb3J0X2NyZWQgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCWNoYXIgKgkJcDsKKysKKysJ aWYgKCFjbGllbnQgfHwgIWNsaWVudC0+Y3JlZHMpIHsKKysJCXJldHVybiAwOworKwl9CisrCisr CW1ham9yX3N0YXR1cyA9IGdzc19leHBvcnRfY3JlZCgmbWlub3Jfc3RhdHVzLAorKwkJCQkgICAg ICAgY2xpZW50LT5jcmVkcywKKysJCQkJICAgICAgIEdTU19DX05PX09JRCwKKysJCQkJICAgICAg IDEsCisrCQkJCSAgICAgICAmZXhwb3J0X2NyZWQpOworKwlpZiAoR1NTX0VSUk9SKG1ham9yX3N0 YXR1cykgJiYgbWFqb3Jfc3RhdHVzICE9IEdTU19TX1VOQVZBSUxBQkxFKSB7CisrCQlHc3NjdHh0 ICpjdHg7CisrCQlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgmY3R4KTsKKysJCWN0eC0+bWFqb3IgPSBt YWpvcl9zdGF0dXM7CisrCQljdHgtPm1pbm9yID0gbWlub3Jfc3RhdHVzOworKwkJc3NoX2dzc2Fw aV9zZXRfb2lkKGN0eCwgJmdzc2FwaV9nc2lfbWVjaF9taWN2Mi5vaWQpOworKwkJc3NoX2dzc2Fw aV9lcnJvcihjdHgpOworKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZjdHgpOworKwkJcmV0dXJu IDA7CisrCX0KKysKKysJcCA9IHN0cmNocigoY2hhciAqKSBleHBvcnRfY3JlZC52YWx1ZSwgJz0n KTsKKysJaWYgKHAgPT0gTlVMTCkgeworKwkJbG9naXQoIkZhaWxlZCB0byBwYXJzZSBleHBvcnRl ZCBjcmVkZW50aWFscyBzdHJpbmcgJyUuMTAwcyciLAorKwkJICAgIChjaGFyICopZXhwb3J0X2Ny ZWQudmFsdWUpOworKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vcl9zdGF0dXMsICZleHBvcnRf Y3JlZCk7CisrCQlyZXR1cm4gMDsKKysJfQorKwkqcCsrID0gJ1wwJzsKKysJaWYgKHN0cmNtcCgo Y2hhciAqKWV4cG9ydF9jcmVkLnZhbHVlLCJYNTA5X1VTRVJfREVMRUdfUFJPWFkiKSA9PSAwKSB7 CisrCQljbGllbnQtPnN0b3JlLmVudnZhciA9IHN0cmR1cCgiWDUwOV9VU0VSX1BST1hZIik7Cisr CX0gZWxzZSB7CisrCQljbGllbnQtPnN0b3JlLmVudnZhciA9IHN0cmR1cCgoY2hhciAqKWV4cG9y dF9jcmVkLnZhbHVlKTsKKysJfQorKwlpZiAoYWNjZXNzKHAsIFJfT0spID09IDApIHsKKysJCWlm IChjbGllbnQtPnN0b3JlLmZpbGVuYW1lKSB7CisrCQkJaWYgKHJlbmFtZShwLCBjbGllbnQtPnN0 b3JlLmZpbGVuYW1lKSA8IDApIHsKKysJCQkJbG9naXQoIkZhaWxlZCB0byByZW5hbWUgJXMgdG8g JXM6ICVzIiwgcCwKKysJCQkJICAgIGNsaWVudC0+c3RvcmUuZmlsZW5hbWUsIHN0cmVycm9yKGVy cm5vKSk7CisrCQkJCWZyZWUoY2xpZW50LT5zdG9yZS5maWxlbmFtZSk7CisrCQkJCWNsaWVudC0+ c3RvcmUuZmlsZW5hbWUgPSBzdHJkdXAocCk7CisrCQkJfSBlbHNlIHsKKysJCQkJcCA9IGNsaWVu dC0+c3RvcmUuZmlsZW5hbWU7CisrCQkJfQorKwkJfSBlbHNlIHsKKysJCQljbGllbnQtPnN0b3Jl LmZpbGVuYW1lID0gc3RyZHVwKHApOworKwkJfQorKwl9CisrCWNsaWVudC0+c3RvcmUuZW52dmFs ID0gc3RyZHVwKHApOworKyNpZmRlZiBVU0VfUEFNCisrCWlmIChvcHRpb25zLnVzZV9wYW0pCisr CQlkb19wYW1fcHV0ZW52KGNsaWVudC0+c3RvcmUuZW52dmFyLCBjbGllbnQtPnN0b3JlLmVudnZh bCk7CisrI2VuZGlmCisrCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3Jfc3RhdHVzLCAmZXhwb3J0 X2NyZWQpOworKworKwlyZXR1cm4gMTsKKyt9CisrCisrLyoKKysgKiBFeHBvcnQgdXBkYXRlZCBH U0kgY3JlZGVudGlhbHMgdG8gZGlzay4KKysgKi8KKytzdGF0aWMgaW50Cisrc3NoX2dzc2FwaV9n c2lfdXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlLHNzaF9nc3NhcGlfY2xpZW50 ICpjbGllbnQpCisreworKwlyZXR1cm4gc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkcyhjbGllbnQp OworK30KKysKKysvKgorKyAqIEV4cG9ydCB1cGRhdGVkIEdTSSBjcmVkZW50aWFscyB0byBkaXNr LgorKyAqLworK3N0YXRpYyBpbnQKKytzc2hfZ3NzYXBpX2dzaV91cGRhdGVjcmVkc19taWN2Mihz c2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyt7Cisr CXJldHVybiBzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzX21pY3YyKGNsaWVudCk7CisrfQorKwor KyNlbmRpZiAvKiBHU0kgKi8KKysjZW5kaWYgLyogR1NTQVBJICovCitkaWZmIC1OdXIgb3BlbnNz aC0xMC41cDEub3JpZy9nc3Mtc2Vydi1rcmI1LmMgb3BlbnNzaC0xMC41cDEvZ3NzLXNlcnYta3Ji NS5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9nc3Mtc2Vydi1rcmI1LmMJMjAyNi0wOS0yMSAw NTo0MDo1OC4zODc4OTIzOTggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9nc3Mtc2Vydi1rcmI1 LmMJMjAyNi0wOS0yMSAwNTo0MTozMC44MzQzNTgzNTYgKzAyMDAKK0BAIC00NTAsNiArNDUwLDM0 IEBACisgCXJldHVybiBmb3VuZF9wcmluY2lwYWw7CisgfQorICAKKysvKiBSZXRyaWV2ZSB0aGUg bG9jYWwgdXNlcm5hbWUgYXNzb2NpYXRlZCB3aXRoIGEgc2V0IG9mIEtlcmJlcm9zCisrICogY3Jl ZGVudGlhbHMuIEhvcGVmdWxseSB3ZSBjYW4gdXNlIHRoaXMgZm9yIHRoZSAnZW1wdHknIHVzZXJu YW1lCisrICogbG9naW5zIGRpc2N1c3NlZCBpbiB0aGUgZHJhZnQgICovCisrc3RhdGljIGludAor K3NzaF9nc3NhcGlfa3JiNV9sb2NhbG5hbWUoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hh ciAqKnVzZXIpIHsKKysJa3JiNV9wcmluY2lwYWwgcHJpbmM7CisrCWludCByZXR2YWw7CisrCisr CWlmIChzc2hfZ3NzYXBpX2tyYjVfaW5pdCgpID09IDApCisrCQlyZXR1cm4gMDsKKysKKysJaWYg KChyZXR2YWw9a3JiNV9wYXJzZV9uYW1lKGtyYl9jb250ZXh0LCBjbGllbnQtPmRpc3BsYXluYW1l LnZhbHVlLAorKwkgICAgJnByaW5jKSkpIHsKKysJCWxvZ2l0KCJrcmI1X3BhcnNlX25hbWUoKTog JS4xMDBzIiwKKysJCSAgICBrcmI1X2dldF9lcnJfdGV4dChrcmJfY29udGV4dCxyZXR2YWwpKTsK KysJCXJldHVybiAwOworKwl9CisrCisrCS8qIFdlJ3ZlIGdvdCB0byByZXR1cm4gYSBtYWxsb2Mn ZCBzdHJpbmcgKi8KKysJKnVzZXIgPSAoY2hhciAqKXhtYWxsb2MoMjU2KTsKKysJaWYgKGtyYjVf YW5hbWVfdG9fbG9jYWxuYW1lKGtyYl9jb250ZXh0LCBwcmluYywgMjU2LCAqdXNlcikpIHsKKysJ CWZyZWUoKnVzZXIpOworKwkJKnVzZXIgPSBOVUxMOworKwkJcmV0dXJuKDApOworKwl9CisrCisr CXJldHVybigxKTsKKyt9CisgCisgLyogVGhpcyB3cml0ZXMgb3V0IGFueSBmb3J3YXJkZWQgY3Jl ZGVudGlhbHMgZnJvbSB0aGUgc3RydWN0dXJlIHBvcHVsYXRlZAorICAqIGR1cmluZyB1c2VyYXV0 aC4gQ2FsbGVkIGFmdGVyIHdlIGhhdmUgc2V0dWlkIHRvIHRoZSB1c2VyICovCitAQCAtNTQ0LDcg KzU3Miw3IEBACisgCXJldHVybiBzZXRfZW52OworIH0KKyAKKy1pbnQKKytzdGF0aWMgaW50Cisg c3NoX2dzc2FwaV9rcmI1X3VwZGF0ZWNyZWRzKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSwKKyAg ICAgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyB7CitAQCAtODQwLDcgKzg2OCw3IEBACisg CXs5LCAiXHgyQVx4ODZceDQ4XHg4Nlx4RjdceDEyXHgwMVx4MDJceDAyIn0sCisgCU5VTEwsCisg CSZzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rLAorLQlOVUxMLAorKwkmc3NoX2dzc2FwaV9rcmI1X2xv Y2FsbmFtZSwKKyAJJnNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRzLAorIAkmc3NoX2dzc2FwaV9r cmI1X3VwZGF0ZWNyZWRzCisgfTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2tleGdz c3MuYyBvcGVuc3NoLTEwLjVwMS9rZXhnc3NzLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2tl eGdzc3MuYwkyMDI2LTA5LTIxIDA1OjQwOjU3Ljg2OTc3OTE0OCArMDIwMAorKysrIG9wZW5zc2gt MTAuNXAxL2tleGdzc3MuYwkyMDI2LTA5LTIxIDA1OjQxOjMwLjgzNDg5MjQzNCArMDIwMAorQEAg LTQ4LDYgKzQ4LDcgQEAKKyAjaW5jbHVkZSAiZGlnZXN0LmgiCisgI2luY2x1ZGUgInNzaGVyci5o IgorIAorK3N0YXRpYyB2b2lkIGtleF9nc3Nfc2VuZF9lcnJvcihHc3NjdHh0ICpjdHh0LCBzdHJ1 Y3Qgc3NoICpzc2gpOworIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgCisgc3RhdGlj IGludCBpbnB1dF9rZXhnc3NfaW5pdChpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKK0BA IC04MSw4ICs4MiwxMCBAQAorIAorIAlkZWJ1ZzJfZigiQWNxdWlyaW5nIGNyZWRlbnRpYWxzIik7 CisgCistCWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9zZXJ2ZXJfY3R4KCZrZXgtPmdzcywg b2lkKSkpCisrCWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9zZXJ2ZXJfY3R4KCZrZXgtPmdz cywgb2lkKSkpIHsKKysJCWtleF9nc3Nfc2VuZF9lcnJvcihrZXgtPmdzcywgc3NoKTsKKyAJCWZh dGFsKCJVbmFibGUgdG8gYWNxdWlyZSBjcmVkZW50aWFscyBmb3IgdGhlIHNlcnZlciIpOworKwl9 CisgCisgCXNzaF9nc3NhcGlfYnVpbGRfY3R4KCZrZXgtPmdzcyk7CisgCWlmIChrZXgtPmdzcyA9 PSBOVUxMKQorQEAgLTEzOSwxMyArMTQyLDE0IEBACisgCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBT U0gyX01TR19LRVhHU1NfQ09OVElOVUUsIE5VTEwpOworIAorIAlpZiAoR1NTX0VSUk9SKGdzcy0+ bWFqb3IpKSB7CisrCQlrZXhfZ3NzX3NlbmRfZXJyb3Ioa2V4LT5nc3MsIHNzaCk7CisgCQlpZiAo c2VuZF90b2stPmxlbmd0aCA+IDApIHsKKyAJCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBT U0gyX01TR19LRVhHU1NfQ09OVElOVUUpKSAhPSAwIHx8CisgCQkJICAgIChyID0gc3NocGt0X3B1 dF9zdHJpbmcoc3NoLCBzZW5kX3Rvay0+dmFsdWUsIHNlbmRfdG9rLT5sZW5ndGgpKSAhPSAwIHx8 CisgCQkJICAgIChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKKyAJCQkJZmF0YWwoInNzaHBr dCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7CisgCQl9CistCQlmYXRhbCgiYWNjZXB0X2N0eCBk aWVkIik7CisrCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiR1NTQVBJIEtleSBFeGNoYW5n ZSBoYW5kc2hha2UgZmFpbGVkIik7CisgCX0KKyAKKyAJaWYgKCEoKnJldF9mbGFncyAmIEdTU19D X01VVFVBTF9GTEFHKSkKK0BAIC02MDAsNCArNjA0LDI2IEBACisgCXJldHVybiBrZXhnc3NnZXhf ZmluYWwoc3NoLCAmc2VuZF90b2ssICZyZXRfZmxhZ3MpOworIH0KKyAKKytzdGF0aWMgdm9pZAor K2tleF9nc3Nfc2VuZF9lcnJvcihHc3NjdHh0ICpjdHh0LCBzdHJ1Y3Qgc3NoICpzc2gpIHsKKysJ Y2hhciAqZXJyc3RyOworKwlPTV91aW50MzIgbWFqLCBtaW47CisrCWludCByOworKworKwllcnJz dHIgPSBtbV9zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoY3R4dCwgJm1haiwgJm1pbik7CisrCWlmIChl cnJzdHIpIHsKKysJCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19F UlJPUikpICE9IDAgfHwKKysJCSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNzaCwgbWFqKSkgIT0g MCB8fAorKwkJICAgIChyID0gc3NocGt0X3B1dF91MzIoc3NoLCBtaW4pKSAhPSAwIHx8CisrCQkg ICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBlcnJzdHIpKSAhPSAwIHx8CisrCQkgICAg KHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCAiIikpICE9IDAgfHwKKysJCSAgICAociA9IHNz aHBrdF9zZW5kKHNzaCkpICE9IDApCisrCQkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3No X2VycihyKSk7CisrCQlpZiAoKHIgPSBzc2hfcGFja2V0X3dyaXRlX3dhaXQoc3NoKSkgIT0gMCkK KysJCQlmYXRhbCgic3NoX3BhY2tldF93cml0ZV93YWl0OiAlcyIsIHNzaF9lcnIocikpOworKwkJ LyogWFhYIC0gV2Ugc2hvdWxkIHByb2JhYmx5IGxvZyB0aGUgZXJyb3IgbG9jYWxseSBoZXJlICov CisrCQlmcmVlKGVycnN0cik7CisrCX0KKyt9CisrCisgI2VuZGlmIC8qIGRlZmluZWQoR1NTQVBJ KSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkgKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5v cmlnL01ha2VmaWxlLmluIG9wZW5zc2gtMTAuNXAxL01ha2VmaWxlLmluCistLS0gb3BlbnNzaC0x MC41cDEub3JpZy9NYWtlZmlsZS5pbgkyMDI2LTA5LTIxIDA1OjQwOjU4LjQwNjU0MDcxOCArMDIw MAorKysrIG9wZW5zc2gtMTAuNXAxL01ha2VmaWxlLmluCTIwMjYtMDktMjEgMDU6NDE6MzAuODM1 MTc4ODIwICswMjAwCitAQCAtMTM0LDcgKzEzNCw3IEBACisgCWF1dGgtYnNkYXV0aC5vIGF1dGgy LWhvc3RiYXNlZC5vIGF1dGgyLWtiZGludC5vIFwKKyAJYXV0aDItbm9uZS5vIGF1dGgyLXBhc3N3 ZC5vIGF1dGgyLXB1YmtleS5vIGF1dGgyLXB1YmtleWZpbGUubyBcCisgCW1vbml0b3IubyBtb25p dG9yX3dyYXAubyBhdXRoLWtyYjUubyBrZXhnc3NzLm8gXAorLQlhdXRoMi1nc3MubyBnc3Mtc2Vy di5vIGdzcy1zZXJ2LWtyYjUubyBcCisrCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYt a3JiNS5vIGdzcy1zZXJ2LWdzaS5vIFwKKyAJbG9naW5yZWMubyBhdXRoLXBhbS5vIGF1dGgtc2hh ZG93Lm8gYXV0aC1zaWEubyBcCisgCXNmdHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubyBcCisgCXVp ZHN3YXAubyBwbGF0Zm9ybS1saXN0ZW4ubyAkKFAxMU9CSlMpICQoU0tPQkpTKQorQEAgLTE0NSw3 ICsxNDUsNyBAQAorIAlzZXJ2ZXJsb29wLm8gYXV0aC5vIGF1dGgyLm8gYXV0aC1vcHRpb25zLm8g c2Vzc2lvbi5vIGF1dGgyLWNoYWxsLm8gXAorIAlncm91cGFjY2Vzcy5vIGF1dGgtYnNkYXV0aC5v IGF1dGgyLWhvc3RiYXNlZC5vIGF1dGgyLWtiZGludC5vIFwKKyAJYXV0aDItbm9uZS5vIGF1dGgy LXBhc3N3ZC5vIGF1dGgyLXB1YmtleS5vIGF1dGgyLXB1YmtleWZpbGUubyBcCistCWF1dGgyLWdz cy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGtleGdzc3MubyBcCisrCWF1dGgyLWdzcy5v IGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGdzcy1zZXJ2LWdzaS5vIGtleGdzc3MubyBcCisg CW1vbml0b3Jfd3JhcC5vIGF1dGgta3JiNS5vIFwKKyAJYXVkaXQubyBhdWRpdC1ic20ubyBhdWRp dC1saW51eC5vIHBsYXRmb3JtLm8gXAorIAlsb2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFk b3cubyBhdXRoLXNpYS5vIFwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL21pc2MuYyBv cGVuc3NoLTEwLjVwMS9taXNjLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL21pc2MuYwkyMDI2 LTA5LTIxIDA1OjQwOjU3LjczMjE0MDA1NiArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL21pc2Mu YwkyMDI2LTA5LTIxIDA1OjQxOjMwLjgzNTU2MDc1MyArMDIwMAorQEAgLTQ2NCwxMSArNDY0LDE0 IEBACisgI2RlZmluZSBXSElURVNQQUNFICIgXHRcclxuIgorICNkZWZpbmUgUVVPVEUJIlwiIgor IAorKy8qIENoYXJhY3RlcnMgY29uc2lkZXJlZCBhcyBxdW90YXRpb25zLiAqLworKyNkZWZpbmUg UVVPVEVTICInXCIiCisrCisgLyogcmV0dXJuIG5leHQgdG9rZW4gaW4gY29uZmlndXJhdGlvbiBs aW5lICovCisgc3RhdGljIGNoYXIgKgorIHN0cmRlbGltX2ludGVybmFsKGNoYXIgKipzLCBpbnQg c3BsaXRfZXF1YWxzKQorIHsKKy0JY2hhciAqb2xkOworKwljaGFyICpvbGQsICpwLCAqcTsKKyAJ aW50IHdzcGFjZSA9IDA7CisgCisgCWlmICgqcyA9PSBOVUxMKQorQEAgLTQ3Niw2ICs0NzksMjEg QEAKKyAKKyAJb2xkID0gKnM7CisgCisrCWlmICgocT1zdHJjaHIoUVVPVEVTLCAoaW50KSAqb2xk KSkgJiYgKnEpCisrCXsKKysJCS8qIGZpbmQgbmV4dCBxdW90ZSBjaGFyYWN0ZXIsIHBvaW50IG9s ZCB0byBzdGFydCBvZiBxdW90ZWQKKysJCSAqIHN0cmluZyAqLworKwkJZm9yIChwID0gKytvbGQ7 ICpwICYmICpwICE9ICpxOyBwKyspCisrCQkJOworKworKwkJLyogZmluZCBzdGFydCBvZiBuZXh0 IHRva2VuICovCisrCQkqcyA9ICgqcCkgPyBwICsgc3Ryc3BuKHAgKyAxLCBXSElURVNQQUNFKSAr IDEgOiBOVUxMOworKworKwkJLyogdGVybWluYXRlICdvbGQnIHRva2VuICovCisrCQkqcCA9ICdc MCc7CisrCQlyZXR1cm4gKG9sZCk7CisrCX0KKysKKyAJKnMgPSBzdHJwYnJrKCpzLAorIAkgICAg c3BsaXRfZXF1YWxzID8gV0hJVEVTUEFDRSBRVU9URSAiPSIgOiBXSElURVNQQUNFIFFVT1RFKTsK KyAJaWYgKCpzID09IE5VTEwpCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9tb25pdG9y LmMgb3BlbnNzaC0xMC41cDEvbW9uaXRvci5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9tb25p dG9yLmMJMjAyNi0wOS0yMSAwNTo0MDo1OC4zMzA0MDM2NDggKzAyMDAKKysrKyBvcGVuc3NoLTEw LjVwMS9tb25pdG9yLmMJMjAyNi0wOS0yMSAwNTo0MTozMC44MzYyMTQyNzEgKzAyMDAKK0BAIC0x NDIsNiArMTQyLDkgQEAKKyBpbnQgbW1fYW5zd2VyX2dzc191c2Vyb2soc3RydWN0IHNzaCAqLCBp bnQsIHN0cnVjdCBzc2hidWYgKik7CisgaW50IG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWMoc3RydWN0 IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisgaW50IG1tX2Fuc3dlcl9nc3Nfc2lnbihz dHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKytpbnQgbW1fYW5zd2VyX2dzc19l cnJvcihzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKytpbnQgbW1fYW5zd2Vy X2dzc19pbmRpY2F0ZV9tZWNocyhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsK KytpbnQgbW1fYW5zd2VyX2dzc19sb2NhbG5hbWUoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBz c2hidWYgKik7CisgaW50IG1tX2Fuc3dlcl9nc3NfdXBkYXRlY3JlZHMoc3RydWN0IHNzaCAqLCBp bnQsIHN0cnVjdCBzc2hidWYgKik7CisgI2VuZGlmCisgCitAQCAtMTk5LDcgKzIwMiw3IEBACisg I2VuZGlmCisgICAgIHtNT05JVE9SX1JFUV9TRVRDT01QQVQsIE1PTl9PTkNFLCBtbV9hbnN3ZXJf c2V0Y29tcGF0fSwKKyAgICAge01PTklUT1JfUkVRX1NJR04sIE1PTl9PTkNFLCBtbV9hbnN3ZXJf c2lnbn0sCistICAgIHtNT05JVE9SX1JFUV9QV05BTSwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9wd25h bWFsbG93fSwKKysgICAge01PTklUT1JfUkVRX1BXTkFNLCBNT05fQVVUSCwgbW1fYW5zd2VyX3B3 bmFtYWxsb3d9LAorICAgICB7TU9OSVRPUl9SRVFfQVVUSFNFUlYsIE1PTl9PTkNFLCBtbV9hbnN3 ZXJfYXV0aHNlcnZ9LAorICNpZmRlZiBXSVRIX1NFTElOVVgKKyAgICAge01PTklUT1JfUkVRX0FV VEhST0xFLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGhyb2xlfSwKK0BAIC0yMDcsNyArMjEwLDcg QEAKKyAgICAge01PTklUT1JfUkVRX0FVVEgyX1JFQURfQkFOTkVSLCBNT05fT05DRSwgbW1fYW5z d2VyX2F1dGgyX3JlYWRfYmFubmVyfSwKKyAgICAge01PTklUT1JfUkVRX0FVVEhQQVNTV09SRCwg TU9OX0FVVEgsIG1tX2Fuc3dlcl9hdXRocGFzc3dvcmR9LAorICNpZmRlZiBVU0VfUEFNCistICAg IHtNT05JVE9SX1JFUV9QQU1fU1RBUlQsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfcGFtX3N0YXJ0fSwK KysgICAge01PTklUT1JfUkVRX1BBTV9TVEFSVCwgTU9OX0lTQVVUSCwgbW1fYW5zd2VyX3BhbV9z dGFydH0sCisgICAgIHtNT05JVE9SX1JFUV9QQU1fQUNDT1VOVCwgMCwgbW1fYW5zd2VyX3BhbV9h Y2NvdW50fSwKKyAgICAge01PTklUT1JfUkVRX1BBTV9JTklUX0NUWCwgTU9OX09OQ0UsIG1tX2Fu c3dlcl9wYW1faW5pdF9jdHh9LAorICAgICB7TU9OSVRPUl9SRVFfUEFNX1FVRVJZLCAwLCBtbV9h bnN3ZXJfcGFtX3F1ZXJ5fSwKK0BAIC0yMzEsOCArMjM0LDExIEBACisgICAgIHtNT05JVE9SX1JF UV9HU1NTRVRVUCwgTU9OX0lTQVVUSCwgbW1fYW5zd2VyX2dzc19zZXR1cF9jdHh9LAorICAgICB7 TU9OSVRPUl9SRVFfR1NTU1RFUCwgMCwgbW1fYW5zd2VyX2dzc19hY2NlcHRfY3R4fSwKKyAgICAg e01PTklUT1JfUkVRX0dTU1VTRVJPSywgTU9OX09OQ0V8TU9OX0FVVEhERUNJREUsIG1tX2Fuc3dl cl9nc3NfdXNlcm9rfSwKKy0gICAge01PTklUT1JfUkVRX0dTU0NIRUNLTUlDLCBNT05fT05DRSwg bW1fYW5zd2VyX2dzc19jaGVja21pY30sCisrICAgIHtNT05JVE9SX1JFUV9HU1NDSEVDS01JQywg TU9OX0lTQVVUSCwgbW1fYW5zd2VyX2dzc19jaGVja21pY30sCisgICAgIHtNT05JVE9SX1JFUV9H U1NTSUdOLCBNT05fT05DRSwgbW1fYW5zd2VyX2dzc19zaWdufSwKKysgICAge01PTklUT1JfUkVR X0dTU0VSUiwgTU9OX0lTQVVUSCB8IE1PTl9PTkNFLCBtbV9hbnN3ZXJfZ3NzX2Vycm9yfSwKKysg ICAge01PTklUT1JfUkVRX0dTU01FQ0hTLCBNT05fSVNBVVRILCBtbV9hbnN3ZXJfZ3NzX2luZGlj YXRlX21lY2hzfSwKKysgICAge01PTklUT1JfUkVRX0dTU0xPQ0FMTkFNRSwgTU9OX0lTQVVUSCwg bW1fYW5zd2VyX2dzc19sb2NhbG5hbWV9LAorICNlbmRpZgorICAgICB7MCwgMCwgTlVMTH0KKyB9 OworQEAgLTI0Miw2ICsyNDgsOCBAQAorICAgICB7TU9OSVRPUl9SRVFfR1NTU0VUVVAsIDAsIG1t X2Fuc3dlcl9nc3Nfc2V0dXBfY3R4fSwKKyAgICAge01PTklUT1JfUkVRX0dTU1NURVAsIDAsIG1t X2Fuc3dlcl9nc3NfYWNjZXB0X2N0eH0sCisgICAgIHtNT05JVE9SX1JFUV9HU1NTSUdOLCAwLCBt bV9hbnN3ZXJfZ3NzX3NpZ259LAorKyAgICB7TU9OSVRPUl9SRVFfR1NTRVJSLCAwLCBtbV9hbnN3 ZXJfZ3NzX2Vycm9yfSwKKysgICAge01PTklUT1JfUkVRX0dTU01FQ0hTLCAwLCBtbV9hbnN3ZXJf Z3NzX2luZGljYXRlX21lY2hzfSwKKyAgICAge01PTklUT1JfUkVRX0dTU1VQQ1JFRFMsIDAsIG1t X2Fuc3dlcl9nc3NfdXBkYXRlY3JlZHN9LAorICNlbmRpZgorICAgICB7TU9OSVRPUl9SRVFfU1RB VEUsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfc3RhdGV9LAorQEAgLTMyMyw2ICszMzEsOCBAQAorICNp ZmRlZiBHU1NBUEkKKyAJLyogYW5kIGZvciB0aGUgR1NTQVBJIGtleSBleGNoYW5nZSAqLworIAlt b25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU1NFVFVQLCAxKTsKKysJ bW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NFUlIsIDEpOworKwlt b25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU01FQ0hTLCAxKTsKKyAj ZW5kaWYKKyAKKyAJLyogVGhlIGZpcnN0IGZldyByZXF1ZXN0cyBkbyBub3QgcmVxdWlyZSBhc3lu Y2hyb25vdXMgYWNjZXNzICovCitAQCAtNDc0LDYgKzQ4NCw4IEBACisgI2lmZGVmIEdTU0FQSQor IAkvKiBhbmQgZm9yIHRoZSBHU1NBUEkga2V5IGV4Y2hhbmdlICovCisgCW1vbml0b3JfcGVybWl0 KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTU0VUVVAsIDEpOworKwltb25pdG9yX3Blcm1p dChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU0VSUiwgMSk7CisrCW1vbml0b3JfcGVybWl0 KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTTUVDSFMsIDEpOworICNlbmRpZgorIAorIAlp ZiAoYXV0aF9vcHRzLT5wZXJtaXRfcHR5X2ZsYWcpIHsKK0BAIC05MjIsMTQgKzkzNCwxNyBAQAor IAlpZiAoIWNvbXBhdF9zZXQpCisgCQlmYXRhbF9mKCJzdGF0ZSBlcnJvcjogc2V0Y29tcGF0IG5l dmVyIGNhbGxlZCIpOworIAorLQlpZiAoYXV0aGN0eHQtPmF0dGVtcHQrKyAhPSAwKQorLQkJZmF0 YWxfZigibXVsdGlwbGUgYXR0ZW1wdHMgZm9yIGdldHB3bmFtIik7CistCisrCWlmIChhdXRoY3R4 dC0+dXNlcikgZnJlZShhdXRoY3R4dC0+dXNlcik7CisgCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0 cmluZyhtLCAmYXV0aGN0eHQtPnVzZXIsIE5VTEwpKSAhPSAwKQorIAkJZmF0YWxfZnIociwgInBh cnNlIik7CisgCisgCXB3ZW50ID0gZ2V0cHduYW1hbGxvdyhzc2gsIGF1dGhjdHh0LT51c2VyKTsK KyAKKysjaWZkZWYgVVNFX1BBTQorKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdl KQorKwkJc2V0cHJvY3RpdGxlKCIlcyBbcHJpdl0iLCBwd2VudCA/ICJbcGFtXSIgOiAidW5rbm93 biIpOworKwllbHNlCisrI2VuZGlmCisgCXNldHByb2N0aXRsZSgiJXMgW3ByaXZdIiwgcHdlbnQg PyBhdXRoY3R4dC0+dXNlciA6ICJ1bmtub3duIik7CisgCisgCXNzaGJ1Zl9yZXNldChtKTsKK0BA IC0yMjgzLDYgKzIyOTgsNzkgQEAKKyB9CisgCisgaW50CisrbW1fYW5zd2VyX2dzc19lcnJvcihz dHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCisreworKwlPTV91 aW50MzIgbWFqb3IsIG1pbm9yOworKwljaGFyICptc2c7CisrCWludCByOworKworKwltc2c9c3No X2dzc2FwaV9sYXN0X2Vycm9yKGdzc2NvbnRleHQsICZtYWpvciwgJm1pbm9yKTsKKysJc3NoYnVm X3Jlc2V0KG0pOworKwlpZiAoKHIgPSBzc2hidWZfcHV0X3UzMihtLCBtYWpvcikpICE9IDAgfHwK KysJICAgIChyID0gc3NoYnVmX3B1dF91MzIobSwgbWlub3IpKSAhPSAwIHx8CisrCSAgICAociA9 IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCBtc2cpKSAhPSAwKQorKwkJZmF0YWxfZnIociwgImJ1ZmZl ciBlcnJvciIpOworKworKwltbV9yZXF1ZXN0X3NlbmQoc29ja2V0LCBNT05JVE9SX0FOU19HU1NF UlIsIG0pOworKworKwlmcmVlKG1zZyk7CisrCisrCXJldHVybigwKTsKKyt9CisrCisraW50Cisr bW1fYW5zd2VyX2dzc19pbmRpY2F0ZV9tZWNocyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQs IHN0cnVjdCBzc2hidWYgKm0pCisreworKwlPTV91aW50MzIgbWFqb3IsIG1pbm9yOworKwlnc3Nf T0lEX3NldCBtZWNoX3NldDsKKysJc2l6ZV90IGk7CisrCWludCByOworKworKwltYWpvcj1nc3Nf aW5kaWNhdGVfbWVjaHMoJm1pbm9yLCAmbWVjaF9zZXQpOworKworKwlzc2hidWZfcmVzZXQobSk7 CisrCWlmICgociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIG1ham9yKSkgIT0gMCB8fAorKwkgICAgKHIg PSBzc2hidWZfcHV0X3UzMihtLCBtZWNoX3NldC0+Y291bnQpKSAhPSAwKQorKwkJZmF0YWxfZnIo ciwgImJ1ZmZlciBlcnJvciIpOworKwlmb3IgKGkgPSAwOyBpIDwgbWVjaF9zZXQtPmNvdW50OyBp KyspIHsKKysJCWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKG0sIG1lY2hfc2V0LT5lbGVtZW50 c1tpXS5lbGVtZW50cywKKysJCSAgICBtZWNoX3NldC0+ZWxlbWVudHNbaV0ubGVuZ3RoKSkgIT0g MCkKKysJCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCX0KKysKKysJZ3NzX3JlbGVh c2Vfb2lkX3NldCgmbWlub3IsICZtZWNoX3NldCk7CisrCisrCW1tX3JlcXVlc3Rfc2VuZChzb2Nr ZXQsIE1PTklUT1JfQU5TX0dTU01FQ0hTLCBtKTsKKysKKysJcmV0dXJuKDApOworK30KKysKKytp bnQKKyttbV9hbnN3ZXJfZ3NzX2xvY2FsbmFtZShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQs IHN0cnVjdCBzc2hidWYgKm0pCisreworKwljaGFyICpuYW1lOworKwlpbnQgcjsKKysKKysJc3No X2dzc2FwaV9sb2NhbG5hbWUoJm5hbWUpOworKworKwlzc2hidWZfcmVzZXQobSk7CisrCWlmIChu YW1lKSB7CisrCQlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgbmFtZSkpICE9IDApCisr CQkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOworKwkJZGVidWczX2YoInNlbmRpbmcgcmVz dWx0ICVzIiwgbmFtZSk7CisrCQlmcmVlKG5hbWUpOworKwl9IGVsc2UgeworKwkJaWYgKChyID0g c3NoYnVmX3B1dF9jc3RyaW5nKG0sICIiKSkgIT0gMCkKKysJCQlmYXRhbF9mcihyLCAiYnVmZmVy IGVycm9yIik7CisrCQlkZWJ1ZzNfZigic2VuZGluZyByZXN1bHQgXCJcIiIpOworKwl9CisrCisr CW1tX3JlcXVlc3Rfc2VuZChzb2NrZXQsIE1PTklUT1JfQU5TX0dTU0xPQ0FMTkFNRSwgbSk7Cisr CisrCXJldHVybigwKTsKKyt9CisrCisraW50CisgbW1fYW5zd2VyX2dzc19zaWduKHN0cnVjdCBz c2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkKKyB7CisgCWdzc19idWZmZXJf ZGVzYyBkYXRhOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvbW9uaXRvci5oIG9wZW5z c2gtMTAuNXAxL21vbml0b3IuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbW9uaXRvci5oCTIw MjYtMDktMjEgMDU6NDA6NTguMTU5NjIzNjI1ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvbW9u aXRvci5oCTIwMjYtMDktMjEgMDU6NDE6MzAuODM2NzA2MDIyICswMjAwCitAQCAtNzcsNiArNzcs MTAgQEAKKyAKKyAJTU9OSVRPUl9SRVFfR1NTU0lHTiA9IDE1MCwgTU9OSVRPUl9BTlNfR1NTU0lH TiA9IDE1MSwKKyAJTU9OSVRPUl9SRVFfR1NTVVBDUkVEUyA9IDE1MiwgTU9OSVRPUl9BTlNfR1NT VVBDUkVEUyA9IDE1MywKKysKKysJTU9OSVRPUl9SRVFfR1NTTUVDSFMgPSAyMDAsIE1PTklUT1Jf QU5TX0dTU01FQ0hTID0gMjAxLAorKwlNT05JVE9SX1JFUV9HU1NMT0NBTE5BTUUgPSAyMDIsIE1P TklUT1JfQU5TX0dTU0xPQ0FMTkFNRSA9IDIwMywKKysJTU9OSVRPUl9SRVFfR1NTRVJSID0gMjA0 LCBNT05JVE9SX0FOU19HU1NFUlIgPSAyMDUKKyB9OworIAorIHN0cnVjdCBzc2g7CitkaWZmIC1O dXIgb3BlbnNzaC0xMC41cDEub3JpZy9tb25pdG9yX3dyYXAuYyBvcGVuc3NoLTEwLjVwMS9tb25p dG9yX3dyYXAuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbW9uaXRvcl93cmFwLmMJMjAyNi0w OS0yMSAwNTo0MDo1OC4xNzYzMDg0MTEgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9tb25pdG9y X3dyYXAuYwkyMDI2LTA5LTIxIDA1OjQxOjMwLjgzNjg5NjAyNiArMDIwMAorQEAgLTExNzYsNiAr MTE3Niw5NCBAQAorIAlyZXR1cm4gKGF1dGhlbnRpY2F0ZWQpOworIH0KKyAKKytjaGFyICoKKytt bV9zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoR3NzY3R4dCAqY3R4LCBPTV91aW50MzIgKm1ham9yLCBP TV91aW50MzIgKm1pbm9yKQorK3sKKysJc3RydWN0IHNzaGJ1ZiAqbSA9IE5VTEw7CisrCU9NX3Vp bnQzMiBtYWosbWluOworKwljaGFyICplcnJzdHI7CisrCWludCByOworKworKwlpZiAoKG0gPSBz c2hidWZfbmV3KCkpID09IE5VTEwpCisrCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwor KworKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9HU1NF UlIsIG0pOworKwltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5tX3JlY3ZmZCwg TU9OSVRPUl9BTlNfR1NTRVJSLCBtKTsKKysKKysJaWYgKChyID0gc3NoYnVmX2dldF91MzIobSwg Jm1haikpICE9IDAgfHwKKysJICAgIChyID0gc3NoYnVmX2dldF91MzIobSwgJm1pbikpICE9IDAp CisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCWlmIChtYWpvcikgKm1ham9y PW1hajsKKysJaWYgKG1pbm9yKSAqbWlub3I9bWluOworKworKwlpZiAoKHIgPSBzc2hidWZfZ2V0 X2NzdHJpbmcobSwgJmVycnN0ciwgTlVMTCkpICE9IDApCisrCQlmYXRhbF9mcihyLCAiYnVmZmVy IGVycm9yIik7CisrCisrCXNzaGJ1Zl9mcmVlKG0pOworKworKwlyZXR1cm4oZXJyc3RyKTsKKyt9 CisrCisrT01fdWludDMyCisrbW1fZ3NzX2luZGljYXRlX21lY2hzKE9NX3VpbnQzMiAqbWlub3Jf c3RhdHVzLCBnc3NfT0lEX3NldCAqbWVjaF9zZXQpCisreworKwlzdHJ1Y3Qgc3NoYnVmICptID0g TlVMTDsKKysJT01fdWludDMyIG1ham9yLG1pbm9yOworKwlpbnQgY291bnQ7CisrCWdzc19PSURf ZGVzYyBvaWQ7CisrCXNpemVfdCBsZW5ndGg7CisrCWludCByOworKworKwlpZiAoKG0gPSBzc2hi dWZfbmV3KCkpID09IE5VTEwpCisrCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworKwor KwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9HU1NNRUNI UywgbSk7CisrCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBlY3QocG1vbml0b3ItPm1fcmVjdmZkLCBN T05JVE9SX0FOU19HU1NNRUNIUywgbSk7CisrCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZt YWpvcikpICE9IDAgfHwKKysJICAgIChyID0gc3NoYnVmX2dldF91MzIobSwgJmNvdW50KSkgIT0g MCkKKysJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKKysKKysJZ3NzX2NyZWF0ZV9lbXB0 eV9vaWRfc2V0KCZtaW5vciwgbWVjaF9zZXQpOworKwl3aGlsZShjb3VudC0tPjApIHsKKysJICAg IGlmICgociA9IHNzaGJ1Zl9nZXRfc3RyaW5nKG0sICh1X2NoYXIgKiopJm9pZC5lbGVtZW50cywg Jmxlbmd0aCkpICE9IDApCisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCSAgICBv aWQubGVuZ3RoID0gbGVuZ3RoOworKwkgICAgZ3NzX2FkZF9vaWRfc2V0X21lbWJlcigmbWlub3Is ICZvaWQsIG1lY2hfc2V0KTsKKysJfQorKworKwlzc2hidWZfZnJlZShtKTsKKysKKysJcmV0dXJu KG1ham9yKTsKKyt9CisrCisraW50CisrbW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUoY2hhciAqKmxu YW1lKQorK3sKKysJc3RydWN0IHNzaGJ1ZiAqbSA9IE5VTEw7CisrCWludCByOworKworKwlpZiAo KG0gPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisrCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxl ZCIpOworKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9H U1NMT0NBTE5BTUUsIG0pOworKworKwlkZWJ1ZzNfZigid2FpdGluZyBmb3IgTU9OSVRPUl9BTlNf R1NTTE9DQUxOQU1FIik7CisrCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBlY3QocG1vbml0b3ItPm1f cmVjdmZkLCBNT05JVE9SX0FOU19HU1NMT0NBTE5BTUUsCisrCSAgICBtKTsKKysKKysJaWYgKChy ID0gc3NoYnVmX2dldF9jc3RyaW5nKG0sIGxuYW1lLCBOVUxMKSkgIT0gMCkKKysJCWZhdGFsX2Zy KHIsICJidWZmZXIgZXJyb3IiKTsKKysKKysJc3NoYnVmX2ZyZWUobSk7CisrCWlmICgoKmxuYW1l ID09IE5VTEwpIHx8ICgqbG5hbWVbMF0gPT0gJ1wwJykpIHsKKysJCWRlYnVnM19mKCJnc3NhcGkg aWRlbnRpdHkgbWFwcGluZyBmYWlsZWQiKTsKKysJfSBlbHNlIHsKKysJCWRlYnVnM19mKCJnc3Nh cGkgaWRlbnRpdHkgbWFwcGVkIHRvICVzIiwgKmxuYW1lKTsKKysJfQorKworKwlyZXR1cm4oMCk7 CisrfQorKworIE9NX3VpbnQzMgorIG1tX3NzaF9nc3NhcGlfc2lnbihHc3NjdHh0ICpjdHgsIGdz c19idWZmZXJfZGVzYyAqZGF0YSwgZ3NzX2J1ZmZlcl9kZXNjICpoYXNoKQorIHsKK2RpZmYgLU51 ciBvcGVuc3NoLTEwLjVwMS5vcmlnL21vbml0b3Jfd3JhcC5oIG9wZW5zc2gtMTAuNXAxL21vbml0 b3Jfd3JhcC5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9tb25pdG9yX3dyYXAuaAkyMDI2LTA5 LTIxIDA1OjQwOjU4LjE3NjU3Njk5NCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL21vbml0b3Jf d3JhcC5oCTIwMjYtMDktMjEgMDU6NDE6MzAuODM3NjU4NDY3ICswMjAwCitAQCAtNzcsNiArNzcs MTAgQEAKKyBpbnQgbW1fc3NoX2dzc2FwaV91c2Vyb2soY2hhciAqdXNlciwgc3RydWN0IHBhc3N3 ZCAqLCBpbnQga2V4KTsKKyBPTV91aW50MzIgbW1fc3NoX2dzc2FwaV9jaGVja21pYyhHc3NjdHh0 ICosIGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90KTsKKyBPTV91aW50MzIgbW1fc3NoX2dzc2Fw aV9zaWduKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOworK2ludCBtbV9z c2hfZ3NzYXBpX2xvY2FsbmFtZShjaGFyICoqdXNlcik7CisrT01fdWludDMyIG1tX2dzc19pbmRp Y2F0ZV9tZWNocyhPTV91aW50MzIgKm1pbm9yX3N0YXR1cywKKysgICAgZ3NzX09JRF9zZXQgKm1l Y2hfc2V0KTsKKytjaGFyICptbV9zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoR3NzY3R4dCAqY3R4dCwg T01fdWludDMyICptYWosIE9NX3VpbnQzMiAqbWluKTsKKyBpbnQgbW1fc3NoX2dzc2FwaV91cGRh dGVfY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKik7CisgI2VuZGlmCisgCitkaWZmIC1OdXIgb3Bl bnNzaC0xMC41cDEub3JpZy9yZWFkY29uZi5jIG9wZW5zc2gtMTAuNXAxL3JlYWRjb25mLmMKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL3JlYWRjb25mLmMJMjAyNi0wOS0yMSAwNTo0MDo1OC4yMDA5 NzEzMzMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9yZWFkY29uZi5jCTIwMjYtMDktMjEgMDU6 NDE6MzAuODM4Mjk2ODI0ICswMjAwCitAQCAtMjk0MywxMSArMjk0MywxMSBAQAorIAlpZiAob3B0 aW9ucy0+cHVia2V5X2F1dGhlbnRpY2F0aW9uID09IC0xKQorIAkJb3B0aW9ucy0+cHVia2V5X2F1 dGhlbnRpY2F0aW9uID0gU1NIX1BVQktFWV9BVVRIX0FMTDsKKyAJaWYgKG9wdGlvbnMtPmdzc19h dXRoZW50aWNhdGlvbiA9PSAtMSkKKy0JCW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IDA7 CisrCQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAxOworIAlpZiAob3B0aW9ucy0+Z3Nz X2tleWV4ID09IC0xKQorLQkJb3B0aW9ucy0+Z3NzX2tleWV4ID0gMDsKKysJCW9wdGlvbnMtPmdz c19rZXlleCA9IDE7CisgCWlmIChvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPT0gLTEpCistCQlv cHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAwOworKwkJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRz ID0gMTsKKyAJaWYgKG9wdGlvbnMtPmdzc190cnVzdF9kbnMgPT0gLTEpCisgCQlvcHRpb25zLT5n c3NfdHJ1c3RfZG5zID0gMDsKKyAJaWYgKG9wdGlvbnMtPmdzc19yZW5ld2FsX3Jla2V5ID09IC0x KQorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvcmVhZGNvbmYuaCBvcGVuc3NoLTEwLjVw MS9yZWFkY29uZi5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9yZWFkY29uZi5oCTIwMjYtMDkt MjEgMDU6NDA6NTcuODcwNDE0NjYyICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvcmVhZGNvbmYu aAkyMDI2LTA5LTIxIDA1OjQxOjMwLjgzOTc0NTcwNSArMDIwMAorQEAgLTgwLDYgKzgwLDggQEAK KyAJY2hhciAgICpob3N0X2tleV9hbGlhczsJLyogaG9zdG5hbWUgYWxpYXMgZm9yIC5zc2gva25v d25faG9zdHMgKi8KKyAJY2hhciAgICpwcm94eV9jb21tYW5kOwkvKiBQcm94eSBjb21tYW5kIGZv ciBjb25uZWN0aW5nIHRoZSBob3N0LiAqLworIAljaGFyICAgKnVzZXI7CQkvKiBVc2VyIHRvIGxv ZyBpbiBhcy4gKi8KKysJaW50ICAgICBpbXBsaWNpdDsJLyogTG9naW4gdXNlciB3YXMgbm90IHNw ZWNpZmllZC4KKysJCQkJICAgU2VydmVyIG1heSBjaG9vc2UgYmFzZWQgb24gYXV0aGN0eHQuICov CisgCWludCAgICAgZXNjYXBlX2NoYXI7CS8qIEVzY2FwZSBjaGFyYWN0ZXI7IC0yID0gbm9uZSAq LworIAorIAl1X2ludAludW1fc3lzdGVtX2hvc3RmaWxlczsJLyogUGF0aHMgZm9yIC9ldGMvc3No L3NzaF9rbm93bl9ob3N0cyAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2VydmNv bmYuYyBvcGVuc3NoLTEwLjVwMS9zZXJ2Y29uZi5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9z ZXJ2Y29uZi5jCTIwMjYtMDktMjEgMDU6NDA6NTguMzg4MzQzMDkwICswMjAwCisrKysgb3BlbnNz aC0xMC41cDEvc2VydmNvbmYuYwkyMDI2LTA5LTIxIDA2OjQxOjIyLjUzMjM5NTg5NCArMDIwMAor QEAgLTEyMDEsNiArMTIwMSw5IEBACisgCQlpZiAoKmFjdGl2ZXAgJiYgKmNoYXJwdHIgPT0gTlVM TCkKKyAJCQkqY2hhcnB0ciA9IHhzdHJkdXAoYXJnKTsKKyAJCWJyZWFrOworKwljYXNlIHNQZXJt aXRQQU1Vc2VyQ2hhbmdlOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPnBlcm1pdF9wYW1fdXNlcl9j aGFuZ2U7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisgI2VuZGlmCisgCisgCS8qIFN0YW5kYXJkIE9w dGlvbnMgKi8KK0BAIC0xNDQyLDE4ICsxNDQ1LDI5IEBACisgCWNhc2Ugc0tlcmJlcm9zVGlja2V0 Q2xlYW51cDoKKyAJCWludHB0ciA9ICZvcHRpb25zLT5rZXJiZXJvc190aWNrZXRfY2xlYW51cDsK KyAJCWdvdG8gcGFyc2VfZmxhZzsKKysKKyAjaWZkZWYgVVNFX0FGUworIAljYXNlIHNLZXJiZXJv c0dldEFGU1Rva2VuOgorIAkJaW50cHRyID0gJm9wdGlvbnMtPmtlcmJlcm9zX2dldF9hZnNfdG9r ZW47CisgCQlnb3RvIHBhcnNlX2ZsYWc7CisgI2VuZGlmIC8qIFVTRV9BRlMgKi8KKy0jZW5kaWYg LyogS1JCNSAqLworIAorIAljYXNlIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZToKKyAJCWludHB0ciA9 ICZvcHRpb25zLT5rZXJiZXJvc191bmlxdWVfY2NhY2hlOworIAkJZ290byBwYXJzZV9mbGFnOwor IAorKwljYXNlIHNLZXJiZXJvc1VzZUt1c2Vyb2s6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+dXNl X2t1c2Vyb2s7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrI2VuZGlmIC8qIEtSQjUgKi8KKysKKyAj aWZkZWYgR1NTQVBJCisrI2lmZGVmIEdTSQorKwljYXNlIHNHU0lBbGxvd0xpbWl0ZWRQcm94eToK KysJCWludHB0ciA9ICZvcHRpb25zLT5nc2lfYWxsb3dfbGltaXRlZF9wcm94eTsKKysJCWdvdG8g cGFyc2VfZmxhZzsKKysjZW5kaWYKKysKKyAJY2FzZSBzR1NTQVBJQXV0aGVudGljYXRpb246Cisg CQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uOworIAkJZ290byBwYXJzZV9m bGFnOworQEAgLTE0NzAsNiArMTQ4NCwxMCBAQAorIAkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19k ZWxlZ19jcmVkczsKKyAJCWdvdG8gcGFyc2VfZmxhZzsKKyAKKysJY2FzZSBzR1NTQVBJQ3JlZGVu dGlhbHNQYXRoOgorKwkJY2hhcnB0ciA9ICZvcHRpb25zLT5nc3NfY3JlZHNfcGF0aDsKKysJCWdv dG8gcGFyc2VfZmlsZW5hbWU7CisrCisgCWNhc2Ugc0dTU0FQSVN0cmljdEFjY2VwdG9yQ2hlY2s6 CisgCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvcjsKKyAJCWdvdG8gcGFy c2VfZmxhZzsKK0BAIC0yMjkzLDEwICsyMzExLDYgQEAKKyAJCX0KKyAJCWJyZWFrOworIAorLQlj YXNlIHNLZXJiZXJvc1VzZUt1c2Vyb2s6CistCQlpbnRwdHIgPSAmb3B0aW9ucy0+dXNlX2t1c2Vy b2s7CistCQlnb3RvIHBhcnNlX2ZsYWc7CistCisgCWNhc2Ugc0dTU0FQSUVuYWJsZWs1dXNlcnM6 CisgCQlpbnRwdHIgPSAmb3B0aW9ucy0+ZW5hYmxlX2s1dXNlcnM7CisgCQlnb3RvIHBhcnNlX2Zs YWc7CitAQCAtNDI4Nyw2ICs0MzAxLDcgQEAKKyAjaWZkZWYgVVNFX1BBTQorIAlkdW1wX2NmZ19m bXRpbnQoc1VzZVBBTSwgby0+dXNlX3BhbSk7CisgCWR1bXBfY2ZnX3N0cmluZyhzUEFNU2Vydmlj ZU5hbWUsIG8tPnBhbV9zZXJ2aWNlX25hbWUpOworKwlkdW1wX2NmZ19mbXRpbnQoc1Blcm1pdFBB TVVzZXJDaGFuZ2UsIG8tPnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpOworICNlbmRpZgorIAlkdW1w X2NmZ19pbnQoc0xvZ2luR3JhY2VUaW1lLCBvLT5sb2dpbl9ncmFjZV90aW1lKTsKKyAJZHVtcF9j ZmdfaW50KHNYMTFEaXNwbGF5T2Zmc2V0LCBvLT54MTFfZGlzcGxheV9vZmZzZXQpOworQEAgLTQz MTksOSArNDMzNCwxMyBAQAorIAlkdW1wX2NmZ19mbXRpbnQoc0dTU0FQSUVuYWJsZWs1dXNlcnMs IG8tPmVuYWJsZV9rNXVzZXJzKTsKKyAjZW5kaWYKKyAjaWZkZWYgR1NTQVBJCisrI2lmZGVmIEdT SQorKwlkdW1wX2NmZ19mbXRpbnQoc0dTSUFsbG93TGltaXRlZFByb3h5LCBvLT5nc2lfYWxsb3df bGltaXRlZF9wcm94eSk7CisrI2VuZGlmCisgCWR1bXBfY2ZnX2ZtdGludChzR1NTQVBJQXV0aGVu dGljYXRpb24sIG8tPmdzc19hdXRoZW50aWNhdGlvbik7CisgCWR1bXBfY2ZnX2ZtdGludChzR1NT QVBJQ2xlYW51cENyZWRlbnRpYWxzLCBvLT5nc3NfY2xlYW51cF9jcmVkcyk7CisgCWR1bXBfY2Zn X2ZtdGludChzR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscywgby0+Z3NzX2RlbGVnX2NyZWRzKTsK KysJZHVtcF9jZmdfc3RyaW5nKHNHU1NBUElDcmVkZW50aWFsc1BhdGgsIG8tPmdzc19jcmVkc19w YXRoKTsKKyAJZHVtcF9jZmdfZm10aW50KHNHU1NBUElLZXlFeGNoYW5nZSwgby0+Z3NzX2tleWV4 KTsKKyAJZHVtcF9jZmdfZm10aW50KHNHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrLCBvLT5nc3Nf c3RyaWN0X2FjY2VwdG9yKTsKKyAJZHVtcF9jZmdfZm10aW50KHNHU1NBUElTdG9yZUNyZWRlbnRp YWxzT25SZWtleSwgby0+Z3NzX3N0b3JlX3Jla2V5KTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVw MS5vcmlnL3NlcnZjb25mLmggb3BlbnNzaC0xMC41cDEvc2VydmNvbmYuaAorLS0tIG9wZW5zc2gt MTAuNXAxLm9yaWcvc2VydmNvbmYuaAkyMDI2LTA5LTIxIDA1OjQwOjU4LjM4ODU3MDU3MyArMDIw MAorKysrIG9wZW5zc2gtMTAuNXAxL3NlcnZjb25mLmgJMjAyNi0wOS0yMSAwNjozMzowNC43NTIx NTYwMjMgKzAyMDAKK0BAIC0yNzUsMTEgKzI3NSwxMyBAQAorICNpZmRlZiBVU0VfUEFNCisgI2Rl ZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTX1BBTSBcCisgU1NIQ09ORl9JTlRGTEFHKHVzZV9wYW0s IFVzZVBBTSwgU1NIQ0ZHX0dMT0JBTCwgMCwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorLVNTSENPTkZf U1RSSU5HKHBhbV9zZXJ2aWNlX25hbWUsIFBBTVNlcnZpY2VOYW1lLCBTU0hDRkdfQUxMLCBTU0hD RkdfQ09QWV9OT05FKQorK1NTSENPTkZfU1RSSU5HKHBhbV9zZXJ2aWNlX25hbWUsIFBBTVNlcnZp Y2VOYW1lLCBTU0hDRkdfQUxMLCBTU0hDRkdfQ09QWV9OT05FKSBcCisrU1NIQ09ORl9JTlRGTEFH KHBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UsIFBlcm1pdFBBTVVzZXJDaGFuZ2UsIFNTSENGR19HTE9C QUwsIDAsIFNTSENGR19DT1BZX05PTkUpCisgI2Vsc2UKKyAjZGVmaW5lIFNTSERfQ09ORklHX0VO VFJJRVNfUEFNIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVCh1c2VfcGFtLCBVc2VQQU0sIFNT SENGR19HTE9CQUwpIFwKKy1TU0hDT05GX1VOU1VQUE9SVEVEX1NUUklORyhwYW1fc2VydmljZV9u YW1lLCBQQU1TZXJ2aWNlTmFtZSwgU1NIQ0ZHX0FMTCkKKytTU0hDT05GX1VOU1VQUE9SVEVEX1NU UklORyhwYW1fc2VydmljZV9uYW1lLCBQQU1TZXJ2aWNlTmFtZSwgU1NIQ0ZHX0FMTCkgXAorK1NT SENPTkZfVU5TVVBQT1JURURfSU5UKHBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UsIFBlcm1pdFBBTVVz ZXJDaGFuZ2UsIFNTSENGR19HTE9CQUwpCisgI2VuZGlmCisgCisgI2lmZGVmIERJU0FCTEVfTEFT VExPRworQEAgLTMxOCwxNCArMzIwLDIzIEBACisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoa2Vy YmVyb3NfZ2V0X2Fmc190b2tlbiwgS2VyYmVyb3NHZXRBRlNUb2tlbiwgU1NIQ0ZHX0dMT0JBTCkK KyAjZW5kaWYgLyogS1JCNSAqLworIAorKyNpZmRlZiBHU0kKKysjZGVmaW5lIFNTSERfQ09ORklH X0VOVFJJRVNfR1NJIFwKKytTU0hDT05GX0lOVEZMQUcoZ3NpX2FsbG93X2xpbWl0ZWRfcHJveHks IEdTSUFsbG93TGltaXRlZFByb3h5LCBTU0hDRkdfQUxMLCAwLCBTU0hDRkdfQ09QWV9OT05FKQor KyNlbHNlCisrI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTX0dTSSBcCisrU1NIQ09ORl9VTlNV UFBPUlRFRF9JTlQoZ3NpX2FsbG93X2xpbWl0ZWRfcHJveHksIEdTSUFsbG93TGltaXRlZFByb3h5 LCBTU0hDRkdfQUxMKQorKyNlbmRpZgorKworICNpZmRlZiBHU1NBUEkKKyAjZGVmaW5lIFNTSERf Q09ORklHX0VOVFJJRVNfR1NTIFwKKy1TU0hDT05GX0lOVEZMQUcoZ3NzX2F1dGhlbnRpY2F0aW9u LCBHU1NBUElBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFUQ0gp IFwKKytTU0hDT05GX0lOVEZMQUcoZ3NzX2F1dGhlbnRpY2F0aW9uLCBHU1NBUElBdXRoZW50aWNh dGlvbiwgU1NIQ0ZHX0FMTCwgMSwgU1NIQ0ZHX0NPUFlfTUFUQ0gpIFwKKyBTU0hDT05GX0lOVEZM QUcoZ3NzX2NsZWFudXBfY3JlZHMsIEdTU0FQSUNsZWFudXBDcmVkZW50aWFscywgU1NIQ0ZHX0dM T0JBTCwgMSwgU1NIQ0ZHX0NPUFlfTk9ORSkgXAorIFNTSENPTkZfQUxJQVMoR1NTQVBJQ2xlYW51 cENyZWRzLCBHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQUwpIFwKKy1TU0hD T05GX0lOVEZMQUcoZ3NzX2RlbGVnX2NyZWRzLCBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzLCBT U0hDRkdfR0xPQkFMLCAxLCBTU0hDRkdfQ09QWV9OT05FKSBcCisrU1NIQ09ORl9JTlRGTEFHKGdz c19kZWxlZ19jcmVkcywgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscywgU1NIQ0ZHX0dMT0JBTCwg MSwgU1NIQ0ZHX0NPUFlfTUFUQ0gpIFwKKytTU0hDT05GX1NUUklORyhnc3NfY3JlZHNfcGF0aCwg R1NTQVBJQ3JlZGVudGlhbHNQYXRoLCBTU0hDRkdfR0xPQkFMLCBTU0hDRkdfQ09QWV9OT05FKSBc CisgU1NIQ09ORl9JTlRGTEFHKGdzc19zdHJpY3RfYWNjZXB0b3IsIEdTU0FQSVN0cmljdEFjY2Vw dG9yQ2hlY2ssIFNTSENGR19HTE9CQUwsIDEsIFNTSENGR19DT1BZX05PTkUpIFwKKy1TU0hDT05G X0lOVEZMQUcoZ3NzX2tleWV4LCBHU1NBUElLZXlFeGNoYW5nZSwgU1NIQ0ZHX0dMT0JBTCwgMCwg U1NIQ0ZHX0NPUFlfTk9ORSkgXAorK1NTSENPTkZfSU5URkxBRyhnc3Nfa2V5ZXgsIEdTU0FQSUtl eUV4Y2hhbmdlLCBTU0hDRkdfR0xPQkFMLCAxLCBTU0hDRkdfQ09QWV9OT05FKSBcCisgU1NIQ09O Rl9JTlRGTEFHKGdzc19zdG9yZV9yZWtleSwgR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXks IFNTSENGR19HTE9CQUwsIDAsIFNTSENGR19DT1BZX05PTkUpIFwKKyBTU0hDT05GX1NUUklORyhn c3Nfa2V4X2FsZ29yaXRobXMsIEdTU0FQSUtleEFsZ29yaXRobXMsIFNTSENGR19HTE9CQUwsIFNT SENGR19DT1BZX05PTkUpIFwKKyBTU0hDT05GX0lOVEZMQUcoZW5hYmxlX2s1dXNlcnMsIEdTU0FQ SUVuYWJsZWs1dXNlcnMsIFNTSENGR19BTEwsIDAsIFNTSENGR19DT1BZX01BVENIKSBcCitAQCAt MzM3LDYgKzM0OCw3IEBACisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX2F1dGhlbnRpY2F0 aW9uLCBHU1NBUElBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCkgXAorIFNTSENPTkZfVU5TVVBQ T1JURURfSU5UKGdzc19jbGVhbnVwX2NyZWRzLCBHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMsIFNT SENGR19HTE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3NfZGVsZWdfY3JlZHMs IEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMsIFNTSENGR19HTE9CQUwpIFwKKytTU0hDT05GX1VO U1VQUE9SVEVEX1NUUklORyhnc3NfY3JlZHNfcGF0aCwgR1NTQVBJQ3JlZGVudGlhbHNQYXRoLCBT U0hDRkdfR0xPQkFMKSBcCisgU1NIQ09ORl9VTlNVUFBPUlRFRF9JTlQoZ3NzX3N0cmljdF9hY2Nl cHRvciwgR1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjaywgU1NIQ0ZHX0dMT0JBTCkgXAorIFNTSENP TkZfVU5TVVBQT1JURURfSU5UKGdzc19rZXlleCwgR1NTQVBJS2V5RXhjaGFuZ2UsIFNTSENGR19H TE9CQUwpIFwKKyBTU0hDT05GX1VOU1VQUE9SVEVEX0lOVChnc3Nfc3RvcmVfcmVrZXksIEdTU0FQ SVN0b3JlQ3JlZGVudGlhbHNPblJla2V5LCBTU0hDRkdfR0xPQkFMKSBcCitAQCAtMzUwLDYgKzM2 Miw3IEBACisgI2RlZmluZSBTU0hEX0NPTkZJR19FTlRSSUVTIFwKKyAJU1NIRF9DT05GSUdfRU5U UklFU19CQVNFIFwKKyAJU1NIRF9DT05GSUdfRU5UUklFU19LUkI1IFwKKysJU1NIRF9DT05GSUdf RU5UUklFU19HU0kgXAorIAlTU0hEX0NPTkZJR19FTlRSSUVTX0dTUyBcCisgCisgLyogTWFjcm9z IHRvIGRlY2xhcmUgU2VydmVyT3B0aW9ucyBtZW1iZXIgdmFyaWFibGVzICovCitkaWZmIC1OdXIg b3BlbnNzaC0xMC41cDEub3JpZy9zc2guMSBvcGVuc3NoLTEwLjVwMS9zc2guMQorLS0tIG9wZW5z c2gtMTAuNXAxLm9yaWcvc3NoLjEJMjAyNi0wOS0yMSAwNTo0MDo1Ny44NzA5NjcwMjUgKzAyMDAK KysrKyBvcGVuc3NoLTEwLjVwMS9zc2guMQkyMDI2LTA5LTIxIDA1OjQxOjMwLjg0MTA0NjY5MiAr MDIwMAorQEAgLTE0MzIsNiArMTQzMiwxOCBAQAorIG9uIHRvIG5ldyBjb25uZWN0aW9ucykuCisg Lkl0IEV2IFVTRVIKKyBTZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHVzZXIgbG9nZ2luZyBpbi4KKysu SXQgRXYgWDUwOV9DRVJUX0RJUgorK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lm aWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKKytDQSBjZXJ0aWZpY2F0ZXMgZGly ZWN0b3J5LgorKy5JdCBFdiBYNTA5X1VTRVJfQ0VSVAorK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNh dGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKKytjZXJ0aWZp Y2F0ZSB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB0byB0aGUgc2VydmVyLgorKy5JdCBF diBYNTA5X1VTRVJfS0VZCisrVXNlZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMg YSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQorK3ByaXZhdGUga2V5IHRvIGJlIHVzZWQg Zm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBzZXJ2ZXIuCisrLkl0IEV2IFg1MDlfVVNFUl9QUk9Y WQorK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJk IGxvY2F0aW9uIGZvciB0aGUKKytwcm94eSBjcmVkZW50aWFsIHRvIGJlIHVzZWQgZm9yIGF1dGhl bnRpY2F0aW9uIHRvIHRoZSBzZXJ2ZXIuCisgLkVsCisgLlBwCisgQWRkaXRpb25hbGx5LAorZGlm ZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoLmMgb3BlbnNzaC0xMC41cDEvc3NoLmMKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaC5jCTIwMjYtMDktMjEgMDU6NDA6NTguNDA5ODA0NjMy ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoLmMJMjAyNi0wOS0yMSAwNTo0MTozMC44NDE0 MDMwMjkgKzAyMDAKK0BAIC01ODAsNiArNTgwLDM4IEBACisgCQkJZmF0YWwoIkNhbid0IG9wZW4g dXNlciBjb25maWcgZmlsZSAlLjEwMHM6ICIKKyAJCQkgICAgIiUuMTAwcyIsIGNvbmZpZywgc3Ry ZXJyb3IoZXJybm8pKTsKKyAJfSBlbHNlIHsKKysJICAgIC8qCisrCSAgICAgKiBTaW5jZSB0aGUg Y29uZmlnIGZpbGUgcGFyc2luZyBjb2RlIGFib3J0cyBpZiBpdCBzZWVzCisrCSAgICAgKiBvcHRp b25zIGl0IGRvZXNuJ3QgcmVjb2duaXplLCBhbGxvdyB1c2VycyB0byBwdXQKKysJICAgICAqIG9w dGlvbnMgc3BlY2lmaWMgdG8gY29tcGlsZS10aW1lIGFkZC1vbnMgaW4gYWx0ZXJuYXRlCisrCSAg ICAgKiBjb25maWcgZmlsZXMgc28gdGhlaXIgcHJpbWFyeSBjb25maWcgZmlsZSB3aWxsCisrCSAg ICAgKiBpbnRlcm9wZXJhdGUgU1NIIHZlcnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aG9zZQor KwkgICAgICogb3B0aW9ucy4KKysJICAgICAqLworKyNpZmRlZiBHU1NBUEkKKysJCXIgPSBzbnBy aW50ZihidWYsIHNpemVvZiBidWYsICIlcy8lcy5nc3NhcGkiLCBwdy0+cHdfZGlyLAorKwkJICAg IF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxFKTsKKysJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIgPCBz aXplb2YoYnVmKSkKKysJCQkodm9pZClyZWFkX2NvbmZpZ19maWxlKGJ1ZiwgcHcsIGhvc3QsIGhv c3RfbmFtZSwgY21kLAorKwkJCSAgICAmb3B0aW9ucywgU1NIQ09ORl9DSEVDS1BFUk0gfCBTU0hD T05GX1VTRVJDT05GIHwKKysJCQkgICAgKGZpbmFsX3Bhc3MgPyBTU0hDT05GX0ZJTkFMIDogMCks IHdhbnRfZmluYWxfcGFzcyk7CisrI2lmZGVmIEdTSQorKwkJciA9IHNucHJpbnRmKGJ1Ziwgc2l6 ZW9mIGJ1ZiwgIiVzLyVzLmdzaSIsIHB3LT5wd19kaXIsCisrCQkgICAgX1BBVEhfU1NIX1VTRVJf Q09ORkZJTEUpOworKwkJaWYgKHIgPiAwICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQorKwkJ CSh2b2lkKXJlYWRfY29uZmlnX2ZpbGUoYnVmLCBwdywgaG9zdCwgaG9zdF9uYW1lLCBjbWQsCisr CQkJICAgICZvcHRpb25zLCBTU0hDT05GX0NIRUNLUEVSTSB8IFNTSENPTkZfVVNFUkNPTkYgfAor KwkJCSAgICAoZmluYWxfcGFzcyA/IFNTSENPTkZfRklOQUwgOiAwKSwgd2FudF9maW5hbF9wYXNz KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChLUkI1KQorKwkJciA9IHNucHJpbnRmKGJ1Ziwgc2l6 ZW9mIGJ1ZiwgIiVzLyVzLmtyYiIsIHB3LT5wd19kaXIsCisrCQkgICAgX1BBVEhfU1NIX1VTRVJf Q09ORkZJTEUpOworKwkJaWYgKHIgPiAwICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQorKwkJ CSh2b2lkKXJlYWRfY29uZmlnX2ZpbGUoYnVmLCBwdywgaG9zdCwgaG9zdF9uYW1lLCBjbWQsCisr CQkJICAgICZvcHRpb25zLCBTU0hDT05GX0NIRUNLUEVSTSB8IFNTSENPTkZfVVNFUkNPTkYgfAor KwkJCSAgICAoZmluYWxfcGFzcyA/IFNTSENPTkZfRklOQUwgOiAwKSwgd2FudF9maW5hbF9wYXNz KTsKKysjZW5kaWYKKysjZW5kaWYKKyAJCXIgPSBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIl cy8lcyIsIHB3LT5wd19kaXIsCisgCQkgICAgX1BBVEhfU1NIX1VTRVJfQ09ORkZJTEUpOworIAkJ aWYgKHIgPiAwICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQorQEAgLTEyODMsNiArMTMxNSw5 IEBACisgCWlmIChvcHRpb25zLnVzZXIgPT0gTlVMTCkgeworIAkJdXNlcl93YXNfZGVmYXVsdCA9 IDE7CisgCQlvcHRpb25zLnVzZXIgPSB4c3RyZHVwKHB3LT5wd19uYW1lKTsKKysJCW9wdGlvbnMu aW1wbGljaXQgPSAxOworKwl9IGVsc2UgeworKwkJb3B0aW9ucy5pbXBsaWNpdCA9IDA7CisgCX0K KyAKKyAJLyoKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaF9jb25maWcgb3BlbnNz aC0xMC41cDEvc3NoX2NvbmZpZworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoX2NvbmZpZwky MDI2LTA5LTIxIDA1OjQwOjU3Ljg3MTE3MTcyNSArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3Nz aF9jb25maWcJMjAyNi0wOS0yMSAwNTo0MTozMC44NDE4NDMyODIgKzAyMDAKK0BAIC0yMiw5ICsy Miw5IEBACisgIyAgIEZvcndhcmRYMTEgbm8KKyAjICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5 ZXMKKyAjICAgSG9zdGJhc2VkQXV0aGVudGljYXRpb24gbm8KKy0jICAgR1NTQVBJQXV0aGVudGlj YXRpb24gbm8KKy0jICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubworLSMgICBHU1NBUElL ZXlFeGNoYW5nZSBubworKyMgICBHU1NBUElBdXRoZW50aWNhdGlvbiB5ZXMKKysjICAgR1NTQVBJ RGVsZWdhdGVDcmVkZW50aWFscyB5ZXMKKysjICAgR1NTQVBJS2V5RXhjaGFuZ2UgeWVzCisgIyAg IEdTU0FQSVRydXN0RE5TIG5vCisgIyAgIEJhdGNoTW9kZSBubworICMgICBDaGVja0hvc3RJUCBu bworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoX2NvbmZpZy41IG9wZW5zc2gtMTAu NXAxL3NzaF9jb25maWcuNQorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoX2NvbmZpZy41CTIw MjYtMDktMjEgMDU6NDA6NTguNDEwMDYyOTc4ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3No X2NvbmZpZy41CTIwMjYtMDktMjEgMDU6NDE6MzAuODQyMDMyOTk0ICswMjAwCitAQCAtNTIsNiAr NTIsMTIgQEAKKyB1c2VyJ3MgY29uZmlndXJhdGlvbiBmaWxlCisgLlBxIFBhIH4vLnNzaC9jb25m aWcKKyAuSXQKKytHU1NBUEkgY29uZmlndXJhdGlvbiBmaWxlCisrLlBxIFBhICRIT01FLy5zc2gv Y29uZmlnLmdzc2FwaQorKy5JdAorK0tlcmJlcm9zIGNvbmZpZ3VyYXRpb24gZmlsZQorKy5QcSBQ YSAkSE9NRS8uc3NoL2NvbmZpZy5rcmIKKysuSXQKKyBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9u IGZpbGUKKyAuUHEgUGEgL2V0Yy9zc2gvc3NoX2NvbmZpZworIC5FbAorQEAgLTEwMDYsNyArMTAx Miw3IEBACisgLkl0IENtIEdTU0FQSUF1dGhlbnRpY2F0aW9uCisgU3BlY2lmaWVzIHdoZXRoZXIg dXNlciBhdXRoZW50aWNhdGlvbiBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4KKyBUaGUgZGVm YXVsdCBpcworLS5DbSBubyAuCisrLkNtIHllcyAuCisgLkl0IENtIEdTU0FQSUNsaWVudElkZW50 aXR5CisgSWYgc2V0LCBzcGVjaWZpZXMgdGhlIEdTU0FQSSBjbGllbnQgaWRlbnRpdHkgdGhhdCBz c2ggc2hvdWxkIHVzZSB3aGVuCisgY29ubmVjdGluZyB0byB0aGUgc2VydmVyLiBUaGUgZGVmYXVs dCBpcyB1bnNldCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGVmYXVsdAorQEAgLTEwMTQsMTIgKzEw MjAsMTIgQEAKKyAuSXQgQ20gR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscworIEZvcndhcmQgKGRl bGVnYXRlKSBjcmVkZW50aWFscyB0byB0aGUgc2VydmVyLgorIFRoZSBkZWZhdWx0IGlzCistLkNt IG5vIC4KKysuQ20geWVzIC4KKyAuSXQgQ20gR1NTQVBJS2V5RXhjaGFuZ2UKKyBTcGVjaWZpZXMg d2hldGhlciBrZXkgZXhjaGFuZ2UgYmFzZWQgb24gR1NTQVBJIG1heSBiZSB1c2VkLiBXaGVuIHVz aW5nCisgR1NTQVBJIGtleSBleGNoYW5nZSB0aGUgc2VydmVyIG5lZWQgbm90IGhhdmUgYSBob3N0 IGtleS4KKyBUaGUgZGVmYXVsdCBpcworLS5EcSBubyAuCisrLkRxIHllcyAuCisgLkl0IENtIEdT U0FQSVJlbmV3YWxGb3JjZXNSZWtleQorIElmIHNldCB0bworIC5EcSB5ZXMKK0BAIC0xNjYzLDcg KzE2NjksNyBAQAorIC5DbSBwYXNzd29yZCApIC4KKyBUaGUgZGVmYXVsdCBpczoKKyAuQmQgLWxp dGVyYWwgLW9mZnNldCBpbmRlbnQKKy1nc3NhcGktd2l0aC1taWMsaG9zdGJhc2VkLHB1YmxpY2tl eSwKKytnc3NhcGkta2V5ZXgsZ3NzYXBpLXdpdGgtbWljLGhvc3RiYXNlZCxwdWJsaWNrZXksCisg a2V5Ym9hcmQtaW50ZXJhY3RpdmUscGFzc3dvcmQKKyAuRWQKKyAuSXQgQ20gUHJveHlDb21tYW5k CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hjb25uZWN0Mi5jIG9wZW5zc2gtMTAu NXAxL3NzaGNvbm5lY3QyLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGNvbm5lY3QyLmMJ MjAyNi0wOS0yMSAwNTo0MDo1OC4zMzA5Nzg0NDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9z c2hjb25uZWN0Mi5jCTIwMjYtMDktMjEgMDU6NDE6MzAuODQyNDc1OTc2ICswMjAwCitAQCAtODYy LDYgKzg2MiwxMSBAQAorIAlnc3NfT0lEIG1lY2ggPSBOVUxMOworIAljaGFyICpnc3NfaG9zdCA9 IE5VTEw7CisgCisrCWlmICghb3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24pIHsKKysJCXZlcmJv c2UoIkdTU0FQSSBhdXRoZW50aWNhdGlvbiBkaXNhYmxlZC4iKTsKKysJCXJldHVybiAwOworKwl9 CisrCisgCWlmIChvcHRpb25zLmdzc19zZXJ2ZXJfaWRlbnRpdHkpIHsKKyAJCWdzc19ob3N0ID0g eHN0cmR1cChvcHRpb25zLmdzc19zZXJ2ZXJfaWRlbnRpdHkpOworIAl9IGVsc2UgaWYgKG9wdGlv bnMuZ3NzX3RydXN0X2RucykgeworQEAgLTk3MCw3ICs5NzUsOCBAQAorIAorIAlpZiAoc3RhdHVz ID09IEdTU19TX0NPTVBMRVRFKSB7CisgCQkvKiBzZW5kIGVpdGhlciBjb21wbGV0ZSBvciBNSUMs IGRlcGVuZGluZyBvbiBtZWNoYW5pc20gKi8KKy0JCWlmICghKGZsYWdzICYgR1NTX0NfSU5URUdf RkxBRykpIHsKKysJCWlmIChzdHJjbXAoYXV0aGN0eHQtPm1ldGhvZC0+bmFtZSwgImdzc2FwaSIp ID09IDAgfHwKKysJCSAgICAhKGZsYWdzICYgR1NTX0NfSU5URUdfRkxBRykpIHsKKyAJCQlpZiAo KHIgPSBzc2hwa3Rfc3RhcnQoc3NoLAorIAkJCSAgICBTU0gyX01TR19VU0VSQVVUSF9HU1NBUElf RVhDSEFOR0VfQ09NUExFVEUpKSAhPSAwIHx8CisgCQkJICAgIChyID0gc3NocGt0X3NlbmQoc3No KSkgIT0gMCkKK0BAIC0xMTM3LDYgKzExNDMsMjAgQEAKKyAJcmV0dXJuIHI7CisgfQorIAorKyNp ZmRlZiBHU0kKKytleHRlcm4KKytjb25zdCBnc3NfT0lEX2Rlc2MgKiBjb25zdCBnc3NfbWVjaF9n bG9idXNfZ3NzYXBpX29wZW5zc2w7CisrZXh0ZXJuCisrY29uc3QgZ3NzX09JRF9kZXNjICogY29u c3QgZ3NzX21lY2hfZ2xvYnVzX2dzc2FwaV9vcGVuc3NsX21pY3YyOworKyNkZWZpbmUgaXNfZ3Np X29pZChvaWQpIFwKKysgICgob2lkLT5sZW5ndGggPT0gZ3NzX21lY2hfZ2xvYnVzX2dzc2FwaV9v cGVuc3NsLT5sZW5ndGggJiYgXAorKyAgICAobWVtY21wKG9pZC0+ZWxlbWVudHMsIGdzc19tZWNo X2dsb2J1c19nc3NhcGlfb3BlbnNzbC0+ZWxlbWVudHMsIFwKKysJICAgIG9pZC0+bGVuZ3RoKSA9 PSAwKSkgfHwgXAorKyAgIChvaWQtPmxlbmd0aCA9PSBnc3NfbWVjaF9nbG9idXNfZ3NzYXBpX29w ZW5zc2xfbWljdjItPmxlbmd0aCAmJiBcCisrICAgIChtZW1jbXAob2lkLT5lbGVtZW50cywgZ3Nz X21lY2hfZ2xvYnVzX2dzc2FwaV9vcGVuc3NsX21pY3YyLT5lbGVtZW50cywgXAorKwkgICAgb2lk LT5sZW5ndGgpID09IDApKSkKKysjZW5kaWYKKysKKyBpbnQKKyB1c2VyYXV0aF9nc3NrZXlleChz dHJ1Y3Qgc3NoICpzc2gpCisgeworQEAgLTExNTksNiArMTE3OSwxMiBAQAorIAlpZiAoKGIgPSBz c2hidWZfbmV3KCkpID09IE5VTEwpCisgCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwor IAorKyNpZmRlZiBHU0kKKysJaWYgKG9wdGlvbnMuaW1wbGljaXQgJiYgaXNfZ3NpX29pZChnc3Nf a2V4X2NvbnRleHQtPm9pZCkpCisrCQlzc2hfZ3NzYXBpX2J1aWxkbWljKGIsICIiLCBhdXRoY3R4 dC0+c2VydmljZSwKKysJCSAgICAiZ3NzYXBpLWtleWV4Iiwgc3NoLT5rZXgtPnNlc3Npb25faWQp OworKwllbHNlCisrI2VuZGlmCisgCXNzaF9nc3NhcGlfYnVpbGRtaWMoYiwgYXV0aGN0eHQtPnNl cnZlcl91c2VyLCBhdXRoY3R4dC0+c2VydmljZSwKKyAJICAgICJnc3NhcGkta2V5ZXgiLCBzc2gt PmtleC0+c2Vzc2lvbl9pZCk7CisgCitAQCAtMTE3Miw3ICsxMTk4LDkgQEAKKyAJfQorIAorIAlp ZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19VU0VSQVVUSF9SRVFVRVNUKSkgIT0g MCB8fAorLQkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBhdXRoY3R4dC0+c2VydmVy X3VzZXIpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsCisrCQko b3B0aW9ucy5pbXBsaWNpdCAmJiBpc19nc2lfb2lkKGdzc19rZXhfY29udGV4dC0+b2lkKSkgPwor KwkJIiIgOiBhdXRoY3R4dC0+c2VydmVyX3VzZXIpKSAhPSAwIHx8CisgCSAgICAociA9IHNzaHBr dF9wdXRfY3N0cmluZyhzc2gsIGF1dGhjdHh0LT5zZXJ2aWNlKSkgIT0gMCB8fAorIAkgICAgKHIg PSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBhdXRoY3R4dC0+bWV0aG9kLT5uYW1lKSkgIT0gMCB8 fAorIAkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIG1pYy52YWx1ZSwgbWljLmxlbmd0 aCkpICE9IDAgfHwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGQuOCBvcGVuc3No LTEwLjVwMS9zc2hkLjgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGQuOAkyMDI2LTA5LTIx IDA1OjQwOjU3LjkyNzE5MzAwMiArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaGQuOAkyMDI2 LTA5LTIxIDA1OjQxOjMwLjg0Mjg2OTIwOSArMDIwMAorQEAgLTg0NCw2ICs4NDQsMjkgQEAKKyAj IEEgQ0Ega2V5LCBhY2NlcHRlZCBmb3IgYW55IGhvc3QgaW4gKi5teWRvbWFpbi5jb20gb3IgKi5t eWRvbWFpbi5vcmcKKyBAY2VydC1hdXRob3JpdHkgKi5teWRvbWFpbi5vcmcsKi5teWRvbWFpbi5j b20gc3NoLXJzYSBBQUFBQjVXLi4uCisgLkVkCisrLlNoIEVOVklST05NRU5UCisrLk5tCisrd2ls bCBub3JtYWxseSBzZXQgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisrLkJs IC10YWcgLXdpZHRoICJTU0hfT1JJR0lOQUxfQ09NTUFORCIKKysuSXQgRXYgR1JJRE1BUAorK0Fw cGxpZXMgdG8gR1NJIGF1dGhlbnRpY2F0aW9uL2F1dGhvcml6YXRpb24uIFNwZWNpZmllcyB0aGUg bG9jYXRpb24gb2YgdGhlCisrZ3JpZG1hcGZpbGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBncmlk bWFwIGZpbGUgaXMgYXNzdW1lZCB0byBiZSBhdmFpbGFibGUgYXQKKysvZXRjL2dyaWQtc2VjdXJp dHkvZ3JpZC1tYXBmaWxlIGZvciBzZXJ2aWNlcyBydW5uaW5nIGFzIHJvb3QgYW5kIGF0CisrSE9N RS8uZ3JpZG1hcCBmb3Igc2VydmljZXMgcnVubmluZyBhcyBub24tcm9vdCB3aGVyZSBIT01FIGlz IHRoZSBob21lIGRpcmVjdG9yeQorK29mIHRoZSBlZmZlY3RpdmUgdXNlciBmcm9tIHRoZSBwYXNz d29yZCBmaWxlIGVudHJ5LgorKy5JdCBFdiBYNTA5X0NFUlRfRElSCisrVXNlZCBmb3IgR1NJIGF1 dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQor K0NBIGNlcnRpZmljYXRlcyBkaXJlY3RvcnkuCisrLkl0IEV2IFg1MDlfVVNFUl9DRVJUCisrVXNl ZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRp b24gZm9yIHRoZQorK2NlcnRpZmljYXRlIHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRv IHRoZSBjbGllbnQuCisrLkl0IEV2IFg1MDlfVVNFUl9LRVkKKytVc2VkIGZvciBHU0kgYXV0aGVu dGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCisrcHJp dmF0ZSBrZXkgdG8gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhlIGNsaWVudC4KKysu SXQgRXYgWDUwOV9VU0VSX1BST1hZCisrVXNlZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVj aWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQorK3Byb3h5IGNyZWRlbnRpYWwg dG8gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhlIGNsaWVudC4KKysuRWwKKyAuU2gg RklMRVMKKyAuQmwgLXRhZyAtd2lkdGggRHMgLWNvbXBhY3QKKyAuSXQgUGEgfi8uaHVzaGxvZ2lu CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkX2NvbmZpZyBvcGVuc3NoLTEwLjVw MS9zc2hkX2NvbmZpZworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoZF9jb25maWcJMjAyNi0w OS0yMSAwNTo0MDo1Ny45ODg1OTcyOTUgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hkX2Nv bmZpZwkyMDI2LTA5LTIxIDA1OjQxOjMwLjg0MzA5NjQzOCArMDIwMAorQEAgLTc5LDEwICs3OSwx MSBAQAorICNLZXJiZXJvc1VzZUt1c2Vyb2sgeWVzCisgCisgIyBHU1NBUEkgb3B0aW9ucworLSNH U1NBUElBdXRoZW50aWNhdGlvbiBubworKyNHU1NBUElBdXRoZW50aWNhdGlvbiB5ZXMKKysjR1NT QVBJRGVsZWdhdGVDcmVkZW50aWFscyB5ZXMKKyAjR1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzIHll cworICNHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrIHllcworLSNHU1NBUElLZXlFeGNoYW5nZSBu bworKyNHU1NBUElLZXlFeGNoYW5nZSB5ZXMKKyAjR1NTQVBJRW5hYmxlazV1c2VycyBubworIAor ICMgU2V0IHRoaXMgdG8gJ3llcycgdG8gZW5hYmxlIFBBTSBhdXRoZW50aWNhdGlvbiwgYWNjb3Vu dCBwcm9jZXNzaW5nLAorQEAgLTk4LDYgKzk5LDEwIEBACisgIyBwcm9ibGVtcy4KKyAjVXNlUEFN IG5vCisgCisrIyBTZXQgdG8gJ3llcycgdG8gYWxsb3cgdGhlIFBBTSBzdGFjayB0byBjaGFuZ2Ug dGhlIHVzZXIgbmFtZSBkdXJpbmcKKysjIGNhbGxzIHRvIGF1dGhlbnRpY2F0aW9uCisrI1Blcm1p dFBBTVVzZXJDaGFuZ2Ugbm8KKysKKyAjQWxsb3dBZ2VudEZvcndhcmRpbmcgeWVzCisgI0FsbG93 VGNwRm9yd2FyZGluZyB5ZXMKKyAjR2F0ZXdheVBvcnRzIG5vCitkaWZmIC1OdXIgb3BlbnNzaC0x MC41cDEub3JpZy9zc2hkX2NvbmZpZy41IG9wZW5zc2gtMTAuNXAxL3NzaGRfY29uZmlnLjUKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGRfY29uZmlnLjUJMjAyNi0wOS0yMSAwNTo0MDo1OC4z ODg5NzU5MDkgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hkX2NvbmZpZy41CTIwMjYtMDkt MjEgMDU6NDE6MzAuODQzMjQ1NjU1ICswMjAwCitAQCAtNzQzLDE1ICs3NDMsMzAgQEAKKyB0byBh bGxvdyB0aGUgY2xpZW50IHRvIHNlbGVjdCB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUgZm9yd2Fy ZGluZyBpcyBib3VuZC4KKyBUaGUgZGVmYXVsdCBpcworIC5DbSBubyAuCisrLkl0IENtIEdTSUFs bG93TGltaXRlZFByb3h5CisrU3BlY2lmaWVzIHdoZXRoZXIgdG8gYWNjZXB0IGxpbWl0ZWQgcHJv eHkgY3JlZGVudGlhbHMgZm9yIGF1dGhlbnRpY2F0aW9uLgorK1RoZSBkZWZhdWx0IGlzCisrLkNt IG5vIC4KKyAuSXQgQ20gR1NTQVBJQXV0aGVudGljYXRpb24KKyBTcGVjaWZpZXMgd2hldGhlciB1 c2VyIGF1dGhlbnRpY2F0aW9uIGJhc2VkIG9uIEdTU0FQSSBpcyBhbGxvd2VkLgorIFRoZSBkZWZh dWx0IGlzCistLkNtIG5vIC4KKysuQ20geWVzIC4KKyAuSXQgQ20gR1NTQVBJQ2xlYW51cENyZWRl bnRpYWxzCisgU3BlY2lmaWVzIHdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBkZXN0cm95IHRoZSB1 c2VyJ3MgY3JlZGVudGlhbHMgY2FjaGUKKyBvbiBsb2dvdXQuCisgVGhlIGRlZmF1bHQgaXMKKyAu Q20geWVzIC4KKysuSXQgQ20gR1NTQVBJQ3JlZGVudGlhbHNQYXRoCisrSWYgc3BlY2lmaWVkLCB0 aGUgZGVsZWdhdGVkIEdTU0FQSSBjcmVkZW50aWFsIGlzIHN0b3JlZCBpbiB0aGUKKytnaXZlbiBw YXRoLCBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcgY3JlZGVudGlhbHMuCisrUGF0aHMgY2FuIGJl IHNwZWNpZmllZCB3aXRoIHN5bnRheCBzaW1pbGFyIHRvIHRoZSBBdXRob3JpemVkS2V5c0ZpbGUK KytvcHRpb24gKGkuZS4sIGFjY2VwdGluZyAlaCBhbmQgJXUgdG9rZW5zKS4KKytXaGVuIHVzaW5n IHRoaXMgb3B0aW9uLAorK3NldHRpbmcgJ0dzc2FwaUNsZWFudXBDcmVkZW50aWFscyBubycgaXMg cmVjb21tZW5kZWQsCisrc28gbG9nZ2luZyBvdXQgb2Ygb25lIHNlc3Npb24KKytkb2Vzbid0IHJl bW92ZSB0aGUgY3JlZGVudGlhbHMgaW4gdXNlIGJ5IGFub3RoZXIgc2Vzc2lvbiBvZgorK3RoZSBz YW1lIHVzZXIuCisrQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBHU0kgbWVjaGFu aXNtLgorIC5JdCBDbSBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCisgQWNjZXB0IGRlbGVnYXRl ZCBjcmVkZW50aWFscyBvbiB0aGUgc2VydmVyIHNpZGUuICBUaGUgZGVmYXVsdCBpcworIC5DTSB5 ZXMgLgorQEAgLTc2NSw3ICs3ODAsNyBAQAorIFNwZWNpZmllcyB3aGV0aGVyIGtleSBleGNoYW5n ZSBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4gR1NTQVBJIGtleSBleGNoYW5nZQorIGRvZXNu J3QgcmVseSBvbiBzc2gga2V5cyB0byB2ZXJpZnkgaG9zdCBpZGVudGl0eS4KKyBUaGUgZGVmYXVs dCBpcworLS5DbSBubyAuCisrLkNtIHllcyAuCisgLkl0IENtIEdTU0FQSVN0cmljdEFjY2VwdG9y Q2hlY2sKKyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYmUgc3RyaWN0IGFib3V0IHRoZSBpZGVudGl0 eSBvZiB0aGUgR1NTQVBJIGFjY2VwdG9yCisgYSBjbGllbnQgYXV0aGVudGljYXRlcyBhZ2FpbnN0 LgorQEAgLTIyMDcsNiArMjIyMiwxMiBAQAorIGFzIGEgbm9uLXJvb3QgdXNlci4KKyBUaGUgZGVm YXVsdCBpcworIC5DbSBubyAuCisrLkl0IENtIFBlcm1pdFBBTVVzZXJDaGFuZ2UKKytJZiBzZXQg dG8KKysuQ20geWVzCisrdGhpcyB3aWxsIGVuYWJsZSBQQU0gYXV0aGVudGljYXRpb24gdG8gY2hh bmdlIHRoZSBuYW1lIG9mIHRoZSB1c2VyIGJlaW5nCisrYXV0aGVudGljYXRlZC4gIFRoZSBkZWZh dWx0IGlzCisrLkNtIG5vIC4KKyAuSXQgQ20gVmVyc2lvbkFkZGVuZHVtCisgT3B0aW9uYWxseSBz cGVjaWZpZXMgYWRkaXRpb25hbCB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgU1NIIHByb3RvY29sIGJh bm5lcgorIHNlbnQgYnkgdGhlIHNlcnZlciB1cG9uIGNvbm5lY3Rpb24uCitkaWZmIC1OdXIgb3Bl bnNzaC0xMC41cDEub3JpZy9zc2hkX2NvbmZpZ19yZWRoYXQgb3BlbnNzaC0xMC41cDEvc3NoZF9j b25maWdfcmVkaGF0CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkX2NvbmZpZ19yZWRoYXQJ MjAyNi0wOS0yMSAwNTo0MDo1Ny44NDQwMDA2NzAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9z c2hkX2NvbmZpZ19yZWRoYXQJMjAyNi0wOS0yMSAwNTo0MTozMC44NDM1OTk2MzAgKzAyMDAKK0BA IC0yLDkgKzIsNiBAQAorIAorIEtiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24gbm8KKyAKKy1H U1NBUElBdXRoZW50aWNhdGlvbiB5ZXMKKy1HU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgbm8KKy0K KyBVc2VQQU0geWVzCisgCisgWDExRm9yd2FyZGluZyB5ZXMKK2RpZmYgLU51ciBvcGVuc3NoLTEw LjVwMS5vcmlnL3NzaGQtc2Vzc2lvbi5jIG9wZW5zc2gtMTAuNXAxL3NzaGQtc2Vzc2lvbi5jCist LS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLXNlc3Npb24uYwkyMDI2LTA5LTIxIDA1OjQwOjU4 LjM4ODc3MzIzMyArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaGQtc2Vzc2lvbi5jCTIwMjYt MDktMjEgMDU6NDE6MzAuODQzNzEwMDQ2ICswMjAwCitAQCAtMTM5MSwxMSArMTM5MSwxMiBAQAor ICNlbmRpZgorIAorICNpZmRlZiBHU1NBUEkKKy0JaWYgKG9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0 aW9uKSB7CisrCWlmIChvcHRpb25zLmdzc19hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmdzc19k ZWxlZ19jcmVkcykgeworIAkJdGVtcG9yYXJpbHlfdXNlX3VpZChhdXRoY3R4dC0+cHcpOworIAkJ YXV0aGN0eHQtPmtyYjVfc2V0X2VudiA9IHNzaF9nc3NhcGlfc3RvcmVjcmVkcygpOworIAkJcmVz dG9yZV91aWQoKTsKKyAJfQorKyNpZmRlZiBLUkI1CisgCS8qCisgCSAqIEdTU0FQSUFsbG93UzRV MlNlbGYgLyBHU1NBUElQcm94eVM0VTJTZXJ2aWNlczogaWYgbm8gY3JlZGVudGlhbHMgd2VyZSBz dG9yZWQKKyAJICogYWJvdmUgKGkuZS4gbm8gR1NTQVBJIGF1dGggd2l0aCBkZWxlZ2F0aW9uIG9j Y3VycmVkKSwgdXNlIFM0VTJTZWxmCitAQCAtMTQ5NSw2ICsxNDk2LDcgQEAKKyAJCX0KKyAJfQor ICNlbmRpZgorKyNlbmRpZgorICNpZmRlZiBXSVRIX1NFTElOVVgKKyAJc3NoZF9zZWxpbnV4X3Nl dHVwX2V4ZWNfY29udGV4dChhdXRoY3R4dC0+cHctPnB3X25hbWUsCisgCSAgICBpbmV0ZF9mbGFn LCBkb19wYW1fcHV0ZW52LCB0aGVfYXV0aGN0eHQsCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEu b3JpZy9zc2gtZ3NzLmggb3BlbnNzaC0xMC41cDEvc3NoLWdzcy5oCistLS0gb3BlbnNzaC0xMC41 cDEub3JpZy9zc2gtZ3NzLmgJMjAyNi0wOS0yMSAwNTo0MDo1OC4zODg2NTI4MDAgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjVwMS9zc2gtZ3NzLmgJMjAyNi0wOS0yMSAwNTo0MTozMC44NDQwMDE5MjYg KzAyMDAKK0BAIC0xMTAsMTIgKzExMCwxNCBAQAorIH0gc3NoX2dzc2FwaV9jY2FjaGU7CisgCisg dHlwZWRlZiBzdHJ1Y3QgeworKwlnc3NfT0lEX2Rlc2Mgb2lkOworIAlnc3NfYnVmZmVyX2Rlc2Mg ZGlzcGxheW5hbWU7CisgCWdzc19idWZmZXJfZGVzYyBleHBvcnRlZG5hbWU7CisgCWdzc19jcmVk X2lkX3QgY3JlZHM7CistCWdzc19uYW1lX3QgbmFtZTsKKysJZ3NzX25hbWVfdCBjcmVkX25hbWUs IGN0eF9uYW1lOworIAlzdHJ1Y3Qgc3NoX2dzc2FwaV9tZWNoX3N0cnVjdCAqbWVjaDsKKyAJc3No X2dzc2FwaV9jY2FjaGUgc3RvcmU7CisrCWdzc19jdHhfaWRfdCBjb250ZXh0OyAvKiBuZWVkZWQg Zm9yIGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKCkgKi8KKyAJaW50IHVzZWQ7 CisgCWludCB1cGRhdGVkOworIAljaGFyICoqaW5kaWNhdG9yczsgLyogYXV0aCBpbmRpY2F0b3Jz ICovCitAQCAtMTM4LDcgKzE0MCw3IEBACisgCU9NX3VpbnQzMgltaW5vcjsgLyogYm90aCAqLwor IAlnc3NfY3R4X2lkX3QJY29udGV4dDsgLyogYm90aCAqLworIAlnc3NfbmFtZV90CW5hbWU7IC8q IGJvdGggKi8KKy0JZ3NzX09JRAkJb2lkOyAvKiBjbGllbnQgKi8KKysJZ3NzX09JRAkJb2lkOyAv KiBib3RoICovCisgCWdzc19jcmVkX2lkX3QJY3JlZHM7IC8qIHNlcnZlciAqLworIAlnc3NfbmFt ZV90CWNsaWVudDsgLyogc2VydmVyICovCisgCWdzc19jcmVkX2lkX3QJY2xpZW50X2NyZWRzOyAv KiBib3RoICovCitAQCAtMTg1LDYgKzE4Nyw5IEBACisgT01fdWludDMyIHNzaF9nc3NhcGlfY2xp ZW50X2lkZW50aXR5KEdzc2N0eHQgKiwgY29uc3QgY2hhciAqKTsKKyBpbnQgc3NoX2dzc2FwaV9j cmVkZW50aWFsc191cGRhdGVkKEdzc2N0eHQgKik7CisgCisraW50IHNzaF9nc3NhcGlfbG9jYWxu YW1lKGNoYXIgKipuYW1lKTsKKyt2b2lkIHNzaF9nc3NhcGlfcmVrZXlfY3JlZHMoKTsKKysKKyAv KiBJbiB0aGUgc2VydmVyICovCisgdHlwZWRlZiBpbnQgc3NoX2dzc2FwaV9jaGVja19mbihHc3Nj dHh0ICoqLCBnc3NfT0lELCBjb25zdCBjaGFyICosCisgICAgIGNvbnN0IGNoYXIgKik7CitkaWZm IC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy92ZXJzaW9uLmggb3BlbnNzaC0xMC41cDEvdmVyc2lv bi5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy92ZXJzaW9uLmgJMjAyNi0wOC0xMSAwNDoyMjox Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS92ZXJzaW9uLmgJMjAyNi0wOS0y MSAwNTo0MTozMC44NDQxMTg4MTIgKzAyMDAKK0BAIC0yLDUgKzIsMTkgQEAKKyAKKyAjZGVmaW5l IFNTSF9WRVJTSU9OCSJPcGVuU1NIXzEwLjUiCisgCisrI2lmZGVmIEdTSQorKyNkZWZpbmUgR1NJ X1ZFUlNJT04JIiBHU0kiCisrI2Vsc2UKKysjZGVmaW5lIEdTSV9WRVJTSU9OCSIiCisrI2VuZGlm CisrCisrI2lmZGVmIEtSQjUKKysjZGVmaW5lIEtSQjVfVkVSU0lPTgkiIEtSQjUiCisrI2Vsc2UK KysjZGVmaW5lIEtSQjVfVkVSU0lPTgkiIgorKyNlbmRpZgorKworICNkZWZpbmUgU1NIX1BPUlRB QkxFCSJwMSIKKy0jZGVmaW5lIFNTSF9SRUxFQVNFCVNTSF9WRVJTSU9OIFNTSF9QT1JUQUJMRQor KyNkZWZpbmUgR1NJX1BPUlRBQkxFCSJjLUdTSSIKKysjZGVmaW5lIFNTSF9SRUxFQVNFCVNTSF9W RVJTSU9OIFNTSF9QT1JUQUJMRSBHU0lfUE9SVEFCTEUgXAorKwkJCUdTSV9WRVJTSU9OIEtSQjVf VkVSU0lPTgoKZGlmZiAtLWdpdCBhLzIwMDEtb3BlbnNzaC0xMC4zcDEtaHBuLTE4LjkuMC5wYXRj aCBiLzIwMDEtb3BlbnNzaC0xMC4zcDEtaHBuLTE4LjkuMC5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggYzY2MWMzZS4uMDAwMDAwMAotLS0gYS8yMDAxLW9wZW5zc2gtMTAuM3Ax LWhwbi0xOC45LjAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNTY3OSArMCwwIEBACi1kaWZm IC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoMi5jIG9wZW5zc2gtMTAuM3AxL2F1dGgyLmMK LS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2F1dGgyLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQx OTU0NDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9hdXRoMi5jCTIwMjYtMDctMDIgMDc6MDI6 MDQuMjYwOTEwMzIwICswMjAwCi1AQCAtNTIsNiArNTIsOCBAQAotICNpbmNsdWRlICJkaXNwYXRj aC5oIgotICNpbmNsdWRlICJwYXRobmFtZXMuaCIKLSAjaW5jbHVkZSAic3NoZXJyLmgiCi0rI2lu Y2x1ZGUgImNhbm9ob3N0LmgiCi0rCi0gI2lmZGVmIEdTU0FQSQotICNpbmNsdWRlICJzc2gtZ3Nz LmgiCi0gI2VuZGlmCi1AQCAtNzUsNiArNzcsOCBAQAotIGV4dGVybiBBdXRobWV0aG9kIG1ldGhv ZF9nc3NhcGk7Ci0gI2VuZGlmCi0gCi0rc3RhdGljIGludCBsb2dfZmxhZyA9IDA7Ci0rCi0gQXV0 aG1ldGhvZCAqYXV0aG1ldGhvZHNbXSA9IHsKLSAJJm1ldGhvZF9ub25lLAotIAkmbWV0aG9kX3B1 YmtleSwKLUBAIC0xMDQsNiArMTA4LDkgQEAKLSAjZGVmaW5lIE1BVENIX1BBUlRJQUwJMwkvKiBt ZXRob2QgbWF0Y2hlcywgc3VibWV0aG9kIGNhbid0IGJlIGNoZWNrZWQgKi8KLSBzdGF0aWMgaW50 IGxpc3Rfc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg Kik7Ci0gCi0rLyogcmVhZCB0aGUgdXNlciBiYW5uZXIgZnJvbSB0aGUgcGF0aCBpbiBzc2hkX2Nv bmZpZwotKyAqIHRoaXMgaXNuJ3QgdG8gcmVhZCBpdCBvbiB0aGUgY2xpZW50IHNpZGUgYnV0IHRv IHJlYWQKLSsgKiBpdCBpbnRvIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQgb24gdGhlIHNlcnZl ciBzaWRlICovCi0gY2hhciAqCi0gYXV0aDJfcmVhZF9iYW5uZXIodm9pZCkKLSB7Ci1AQCAtMzA4 LDYgKzMxNSwxMSBAQAotIAotIAlkZWJ1ZygidXNlcmF1dGgtcmVxdWVzdCBmb3IgdXNlciAlcyBz ZXJ2aWNlICVzIG1ldGhvZCAlcyIsCi0gCSAgICB1c2VyWzBdID8gdXNlciA6ICI8aW1wbGljaXQ+ Iiwgc2VydmljZSwgbWV0aG9kKTsKLSsJaWYgKCFsb2dfZmxhZykgewotKwkJbG9naXQoIlNTSDog U2VydmVyO0x0eXBlOiBBdXRobmFtZTtSZW1vdGU6ICVzLSVkO05hbWU6ICVzIiwKLSsJCSAgICBz c2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSwgdXNlcik7Ci0rCQls b2dfZmxhZyA9IDE7Ci0rCX0KLSAJZGVidWcoImF0dGVtcHQgJWQgZmFpbHVyZXMgJWQiLCBhdXRo Y3R4dC0+YXR0ZW1wdCwgYXV0aGN0eHQtPmZhaWx1cmVzKTsKLSAKLSAjaWZkZWYgV0lUSF9TRUxJ TlVYCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmMgb3BlbnNzaC0xMC4zcDEv Ymlubi5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmMJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9iaW5uLmMJMjAyNi0wNy0wMiAw MDoyNzoyOS43MTg2MDQ2NDAgKzAyMDAKLUBAIC0wLDAgKzEsMzU0MSBAQAotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RkaW50Lmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxtZW1vcnkuaD4KLSsjaW5jbHVkZSAiYmlubi5o IgotKwotKyNkZWZpbmUgVU5VU0VEKHgpICh2b2lkKSh4KQotKyNkZWZpbmUgcm91bmR2YWwoZGJs KSBkYmwgPj0gMC4wID8gKGludCkoZGJsICsgMC41KSA6ICgoZGJsIC0gKGRvdWJsZSkoaW50KWRi bCkgPD0gLTAuNSA/IChpbnQpZGJsIDogKGludCkoZGJsIC0gMC41KSkKLSsKLSsvLyBtYWdpYyBu dW1iZXI6ICAweDFGIDB4YjEgMHgyMiAweDFGICA9PiAgMHgxRkIxMjIxRiBvciAweDFGMjJCMTFG Ci0rLy8gYmVjYXVzZSB0aGUgQklOTl9TVE9SQUdFX05PQllURVMgKGJpbmFyeSAwMDApIG1heSBu b3QgaGF2ZSBzbyBtYW55IHN1Yi10eXBlcyAoQklOTl9TVE9SQUdFX0hBU19NT1JFID0gMHgxMCkK LSsjZGVmaW5lIEJJTk5fTUFHSUMgICAgICAgICAgICAweDFGMjJCMTFGCi0rCi0rI2RlZmluZSBN QVhfQklOTl9IRUFERVIgICAgICAgOSAgLy8gWzE6dHlwZV1bNDpzaXplXVs0OmNvdW50XQotKyNk ZWZpbmUgTUlOX0JJTk5fU0laRSAgICAgICAgIDMgIC8vIFsxOnR5cGVdWzE6c2l6ZV1bMTpjb3Vu dF0KLSsjZGVmaW5lIENIVU5LX1NJWkUgICAgICAgICAgICAyNTYgIC8vIDEwMjQKLSsKLSsjZGVm aW5lIEJJTk5fU1RSVUNUICAgICAgICAxCi0rI2RlZmluZSBCSU5OX0JVRkZFUiAgICAgICAgMgot KwotK3ZvaWQqICgqbWFsbG9jX2ZuKShzaXplX3QgbGVuKSA9IDA7Ci0rdm9pZCogKCpyZWFsbG9j X2ZuKSh2b2lkICpwdHIsIHNpemVfdCBsZW4pID0gMDsKLSt2b2lkICAoKmZyZWVfZm4pKHZvaWQg KnB0cikgPSAwOwotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rI2lmIGRlZmluZWQoX19h bHBoYV9fKSB8fCBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZp bmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykKLSsjZGVmaW5lIEJJTk5fT05M WV9BTElHTkVEX0FDQ0VTUwotKyNlbGlmICggZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9f YWFyY2g2NF9fKSApICYmICFkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEKQotKyNkZWZp bmUgQklOTl9PTkxZX0FMSUdORURfQUNDRVNTCi0rI2VuZGlmCi0rCi0rI2lmIGRlZmluZWQoX1dJ TjMyKQotKyNkZWZpbmUgQklHX0VORElBTiAgICAgIDB4MTAwMAotKyNkZWZpbmUgTElUVExFX0VO RElBTiAgIDB4MDAwMQotKyNkZWZpbmUgQllURV9PUkRFUiAgICAgIExJVFRMRV9FTkRJQU4KLSsj ZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSsvKiBtYWNyb3MgYWxyZWFkeSBkZWZpbmVkICovCi0r I2VsaWYgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZp bmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0rI2luY2x1ZGUgPHN5 cy9lbmRpYW4uaD4KLSsjZWxpZiBkZWZpbmVkKF9BSVgpCi0rI2luY2x1ZGUgPHN5cy9tYWNoaW5l Lmg+Ci0rI2Vsc2UKLSsjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0rI2VuZGlmCi0rCi0rI2lmbmRlZiBC WVRFX09SREVSCi0rI2Vycm9yICJCWVRFX09SREVSIG5vdCBkZWZpbmVkIgotKyNlbmRpZgotKyNp Zm5kZWYgQklHX0VORElBTgotKyNlcnJvciAiQklHX0VORElBTiBub3QgZGVmaW5lZCIKLSsjZW5k aWYKLSsjaWZuZGVmIExJVFRMRV9FTkRJQU4KLSsjZXJyb3IgIkxJVFRMRV9FTkRJQU4gbm90IGRl ZmluZWQiCi0rI2VuZGlmCi0rI2lmIEJJR19FTkRJQU4gPT0gTElUVExFX0VORElBTgotKyNlcnJv ciAiQklHX0VORElBTiA9PSBMSVRUTEVfRU5ESUFOIgotKyNlbmRpZgotKyNpZiBCWVRFX09SREVS IT1CSUdfRU5ESUFOICYmIEJZVEVfT1JERVIhPUxJVFRMRV9FTkRJQU4KLSsjZXJyb3IgIkJZVEVf T1JERVIgbm90IHN1cHBvcnRlZCIKLSsjZW5kaWYKLSsKLSt0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IGludCAgICAgdTE2OwotK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICB1MzI7Ci0rdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHU2NDsKLSsKLStCSU5OX1BSSVZBVEUgdm9pZCBj b3B5X2JlMTYodTE2ICpwZGVzdCwgdTE2ICpwc291cmNlKSB7Ci0rI2lmIEJZVEVfT1JERVIgPT0g TElUVExFX0VORElBTgotKyAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIg KikgcHNvdXJjZTsKLSsgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBw ZGVzdDsKLSsgIGRlc3RbMF0gPSBzb3VyY2VbMV07Ci0rICBkZXN0WzFdID0gc291cmNlWzBdOwot KyNlbHNlIC8vIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotKyNpZmRlZiBCSU5OX09OTFlf QUxJR05FRF9BQ0NFU1MKLSsgIGlmICgodWludHB0cl90KXBzb3VyY2UgJSAyID09IDApeyAgLy8g YWRkcmVzcyBhbGlnbmVkIHRvIDE2IGJpdAotKyAgICAqcGRlc3QgPSAqcHNvdXJjZTsKLSsgIH0g ZWxzZSB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICopIHBz b3VyY2U7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVz dDsKLSsgICAgZGVzdFswXSA9IHNvdXJjZVswXTsgIC8vIGluZGV4ZXMgYXJlIHRoZSBzYW1lCi0r ICAgIGRlc3RbMV0gPSBzb3VyY2VbMV07Ci0rICB9Ci0rI2Vsc2UKLSsgICpwZGVzdCA9ICpwc291 cmNlOwotKyNlbmRpZgotKyNlbmRpZgotK30KLSsKLStCSU5OX1BSSVZBVEUgdm9pZCBjb3B5X2Jl MzIodTMyICpwZGVzdCwgdTMyICpwc291cmNlKSB7Ci0rI2lmIEJZVEVfT1JERVIgPT0gTElUVExF X0VORElBTgotKyAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNv dXJjZTsKLSsgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVzdDsK LSsgIGRlc3RbMF0gPSBzb3VyY2VbM107Ci0rICBkZXN0WzFdID0gc291cmNlWzJdOwotKyAgZGVz dFsyXSA9IHNvdXJjZVsxXTsKLSsgIGRlc3RbM10gPSBzb3VyY2VbMF07Ci0rI2Vsc2UgLy8gaWYg QllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0rI2lmZGVmIEJJTk5fT05MWV9BTElHTkVEX0FDQ0VT UwotKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAlIDQgPT0gMCl7ICAvLyBhZGRyZXNzIGFsaWdu ZWQgdG8gMzIgYml0Ci0rICAgICpwZGVzdCA9ICpwc291cmNlOwotKyAgfSBlbHNlIHsKLSsgICAg dW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKLSsgICAg dW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OwotKyAgICBkZXN0 WzBdID0gc291cmNlWzBdOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKLSsgICAgZGVzdFsxXSA9 IHNvdXJjZVsxXTsKLSsgICAgZGVzdFsyXSA9IHNvdXJjZVsyXTsKLSsgICAgZGVzdFszXSA9IHNv dXJjZVszXTsKLSsgIH0KLSsjZWxzZQotKyAgKnBkZXN0ID0gKnBzb3VyY2U7Ci0rI2VuZGlmCi0r I2VuZGlmCi0rfQotKwotK0JJTk5fUFJJVkFURSB2b2lkIGNvcHlfYmU2NCh1NjQgKnBkZXN0LCB1 NjQgKnBzb3VyY2UpIHsKLSsjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCi0rICB1bnNp Z25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNlOwotKyAgdW5zaWdu ZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OwotKyAgaW50IGk7Ci0rICBm b3IgKGk9MDsgaSA8IDg7IGkrKykgewotKyAgICBkZXN0W2ldID0gc291cmNlWzctaV07Ci0rICB9 Ci0rI2Vsc2UgLy8gaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0rI2lmZGVmIEJJTk5fT05M WV9BTElHTkVEX0FDQ0VTUwotKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAlIDggPT0gMCl7ICAv LyBhZGRyZXNzIGFsaWduZWQgdG8gNjQgYml0Ci0rICAgICpwZGVzdCA9ICpwc291cmNlOwotKyAg fSBlbHNlIHsKLSsgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikg cHNvdXJjZTsKLSsgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBk ZXN0OwotKyAgICBpbnQgaTsKLSsgICAgZm9yIChpPTA7IGkgPCA4OyBpKyspIHsKLSsgICAgICBk ZXN0W2ldID0gc291cmNlW2ldOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKLSsgICAgfQotKyAg fQotKyNlbHNlCi0rICAqcGRlc3QgPSAqcHNvdXJjZTsKLSsjZW5kaWYKLSsjZW5kaWYKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsjaWZuZGVmIF9NU0NfVkVSCi0rI2RlZmluZSBz dHJpY21wIHN0cmNhc2VjbXAKLSsjZGVmaW5lIHN0cm5pY21wIHN0cm5jYXNlY21wCi0rI2VuZGlm Ci0rCi0rQklOTl9QUklWQVRFIEJPT0wgSXNWYWxpZEJpbm5IZWFkZXIoY29uc3Qgdm9pZCAqcGJ1 ZiwgaW50ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAqcHNpemUsIGludCAqcGhlYWRlcnNpemUp OwotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rY2hhciAqIEFQSUVOVFJZIGJpbm5fdmVy c2lvbigpIHsKLSsgIHJldHVybiBCSU5OX1ZFUlNJT047Ci0rfQotKwotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rdm9pZCBBUElFTlRSWSBiaW5uX3NldF9hbGxvY19mdW5jdGlvbnModm9pZCog KCpuZXdfbWFsbG9jKShzaXplX3QpLCB2b2lkKiAoKm5ld19yZWFsbG9jKSh2b2lkKixzaXplX3Qp LCB2b2lkICgqbmV3X2ZyZWUpKHZvaWQqKSkgewotKwotKyAgbWFsbG9jX2ZuID0gbmV3X21hbGxv YzsKLSsgIHJlYWxsb2NfZm4gPSBuZXdfcmVhbGxvYzsKLSsgIGZyZWVfZm4gPSBuZXdfZnJlZTsK LSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdm9pZCBj aGVja19hbGxvY19mdW5jdGlvbnMoKSB7Ci0rCi0rICBpZiAobWFsbG9jX2ZuID09IDApIG1hbGxv Y19mbiA9ICZtYWxsb2M7Ci0rICBpZiAocmVhbGxvY19mbiA9PSAwKSByZWFsbG9jX2ZuID0gJnJl YWxsb2M7Ci0rICBpZiAoZnJlZV9mbiA9PSAwKSBmcmVlX2ZuID0gJmZyZWU7Ci0rCi0rfQotKwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIHZvaWQgKiBiaW5uX21hbGxv YyhpbnQgc2l6ZSkgewotKyAgY2hlY2tfYWxsb2NfZnVuY3Rpb25zKCk7Ci0rICByZXR1cm4gbWFs bG9jX2ZuKHNpemUpOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJ VkFURSB2b2lkICogYmlubl9tZW1kdXAoY29uc3Qgdm9pZCAqc3JjLCBpbnQgc2l6ZSkgewotKyAg dm9pZCAqZGVzdDsKLSsKLSsgIGlmIChzcmMgPT0gTlVMTCB8fCBzaXplIDw9IDApIHJldHVybiBO VUxMOwotKyAgZGVzdCA9IGJpbm5fbWFsbG9jKHNpemUpOwotKyAgaWYgKGRlc3QgPT0gTlVMTCkg cmV0dXJuIE5VTEw7Ci0rICBtZW1jcHkoZGVzdCwgc3JjLCBzaXplKTsKLSsgIHJldHVybiBkZXN0 OwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBzaXpl X3Qgc3RybGVuMihjaGFyICpzdHIpIHsKLSsKLSsgIGlmIChzdHIgPT0gTlVMTCkgcmV0dXJuIDA7 Ci0rICByZXR1cm4gc3RybGVuKHN0cik7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0raW50IEFQSUVOVFJZIGJpbm5fY3JlYXRlX3R5cGUoaW50IHN0b3JhZ2VfdHlwZSwgaW50 IGRhdGFfdHlwZV9pbmRleCkgewotKyAgaWYgKGRhdGFfdHlwZV9pbmRleCA8IDApIHJldHVybiAt MTsKLSsgIGlmIChzdG9yYWdlX3R5cGUgPCBCSU5OX1NUT1JBR0VfTUlOIHx8IHN0b3JhZ2VfdHlw ZSA+IEJJTk5fU1RPUkFHRV9NQVgpIHJldHVybiAtMTsKLSsgIGlmIChkYXRhX3R5cGVfaW5kZXgg PCAxNikKLSsgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZSB8IGRhdGFfdHlwZV9pbmRleDsKLSsgIGVs c2UgaWYgKGRhdGFfdHlwZV9pbmRleCA8IDQwOTYpIHsKLSsgICAgc3RvcmFnZV90eXBlIHw9IEJJ Tk5fU1RPUkFHRV9IQVNfTU9SRTsKLSsgICAgc3RvcmFnZV90eXBlIDw8PSA4OwotKyAgICBkYXRh X3R5cGVfaW5kZXggPj49IDQ7Ci0rICAgIHJldHVybiBzdG9yYWdlX3R5cGUgfCBkYXRhX3R5cGVf aW5kZXg7Ci0rICB9IGVsc2UKLSsgICAgcmV0dXJuIC0xOwotK30KLSsKLSsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfdHlwZV9pbmZvKGludCBsb25nX3R5 cGUsIGludCAqcHN0b3JhZ2VfdHlwZSwgaW50ICpwZXh0cmFfdHlwZSkgewotKyAgaW50IHN0b3Jh Z2VfdHlwZSwgZXh0cmFfdHlwZTsKLSsgIEJPT0wgcmV0dmFsPVRSVUU7Ci0rCi0rYWdhaW46Ci0r Ci0rICBpZiAobG9uZ190eXBlIDwgMCkgewotKyAgICBnb3RvIGxvY19pbnZhbGlkOwotKyAgfSBl bHNlIGlmIChsb25nX3R5cGUgPD0gMHhmZikgewotKyAgICBzdG9yYWdlX3R5cGUgPSBsb25nX3R5 cGUgJiBCSU5OX1NUT1JBR0VfTUFTSzsKLSsgICAgZXh0cmFfdHlwZSA9IGxvbmdfdHlwZSAmIEJJ Tk5fVFlQRV9NQVNLOwotKyAgfSBlbHNlIGlmIChsb25nX3R5cGUgPD0gMHhmZmZmKSB7Ci0rICAg IHN0b3JhZ2VfdHlwZSA9IGxvbmdfdHlwZSAmIEJJTk5fU1RPUkFHRV9NQVNLMTY7Ci0rICAgIHN0 b3JhZ2VfdHlwZSA+Pj0gODsKLSsgICAgZXh0cmFfdHlwZSA9IGxvbmdfdHlwZSAmIEJJTk5fVFlQ RV9NQVNLMTY7Ci0rICAgIGV4dHJhX3R5cGUgPj49IDQ7Ci0rICB9IGVsc2UgaWYgKGxvbmdfdHlw ZSAmIEJJTk5fU1RPUkFHRV9WSVJUVUFMKSB7Ci0rICAgIC8vc3RvcmFnZV90eXBlID0gQklOTl9T VE9SQUdFX1ZJUlRVQUw7Ci0rICAgIC8vZXh0cmFfdHlwZSA9IHh4eDsKLSsgICAgbG9uZ190eXBl ICY9IDB4ZmZmZjsKLSsgICAgZ290byBhZ2FpbjsKLSsgIH0gZWxzZSB7Ci0rbG9jX2ludmFsaWQ6 Ci0rICAgIHN0b3JhZ2VfdHlwZSA9IC0xOwotKyAgICBleHRyYV90eXBlID0gLTE7Ci0rICAgIHJl dHZhbCA9IEZBTFNFOwotKyAgfQotKwotKyAgaWYgKHBzdG9yYWdlX3R5cGUpICpwc3RvcmFnZV90 eXBlID0gc3RvcmFnZV90eXBlOwotKyAgaWYgKHBleHRyYV90eXBlKSAqcGV4dHJhX3R5cGUgPSBl eHRyYV90eXBlOwotKwotKyAgcmV0dXJuIHJldHZhbDsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlKGJpbm4gKml0ZW0sIGludCB0 eXBlLCBpbnQgc2l6ZSwgdm9pZCAqcG9pbnRlcikgewotKyAgQk9PTCByZXR2YWw9RkFMU0U7Ci0r Ci0rICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgY2FzZSBCSU5OX0xJU1Q6Ci0rICAgIGNhc2UgQklO Tl9NQVA6Ci0rICAgIGNhc2UgQklOTl9PQkpFQ1Q6Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1 bHQ6Ci0rICAgICAgZ290byBsb2NfZXhpdDsKLSsgIH0KLSsKLSsgIGlmIChpdGVtID09IE5VTEwg fHwgc2l6ZSA8IDApIGdvdG8gbG9jX2V4aXQ7Ci0rICBpZiAoc2l6ZSA8IE1JTl9CSU5OX1NJWkUp IHsKLSsgICAgaWYgKHBvaW50ZXIpIGdvdG8gbG9jX2V4aXQ7Ci0rICAgIGVsc2Ugc2l6ZSA9IDA7 Ci0rICB9Ci0rCi0rICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChw b2ludGVyKSB7Ci0rICAgIGl0ZW0tPnByZV9hbGxvY2F0ZWQgPSBUUlVFOwotKyAgfSBlbHNlIHsK LSsgICAgaXRlbS0+cHJlX2FsbG9jYXRlZCA9IEZBTFNFOwotKyAgICBpZiAoc2l6ZSA9PSAwKSBz aXplID0gQ0hVTktfU0laRTsKLSsgICAgcG9pbnRlciA9IGJpbm5fbWFsbG9jKHNpemUpOwotKyAg ICBpZiAocG9pbnRlciA9PSAwKSByZXR1cm4gSU5WQUxJRF9CSU5OOwotKyAgfQotKwotKyAgaXRl bS0+cGJ1ZiA9IHBvaW50ZXI7Ci0rICBpdGVtLT5hbGxvY19zaXplID0gc2l6ZTsKLSsKLSsgIGl0 ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7Ci0rICAvL2l0ZW0tPmFsbG9jYXRlZCA9IEZBTFNFOyAg IC0tIGFscmVhZHkgemVyb2VkCi0rICBpdGVtLT53cml0YWJsZSA9IFRSVUU7Ci0rICBpdGVtLT51 c2VkX3NpemUgPSBNQVhfQklOTl9IRUFERVI7ICAvLyBzYXZlIHNwYWNlIGZvciB0aGUgaGVhZGVy Ci0rICBpdGVtLT50eXBlID0gdHlwZTsKLSsgIC8vaXRlbS0+Y291bnQgPSAwOyAgICAgICAgICAg LS0gYWxyZWFkeSB6ZXJvZWQKLSsgIGl0ZW0tPmRpcnR5ID0gVFJVRTsgICAgICAgICAgLy8gdGhl IGhlYWRlciBpcyBub3Qgd3JpdHRlbiB0byB0aGUgYnVmZmVyCi0rCi0rICByZXR2YWwgPSBUUlVF OwotKwotK2xvY19leGl0OgotKyAgcmV0dXJuIHJldHZhbDsKLSsKLSt9Ci0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9uZXcoaW50IHR5cGUsIGludCBz aXplLCB2b2lkICpwb2ludGVyKSB7Ci0rICBiaW5uICppdGVtOwotKwotKyAgaXRlbSA9IChiaW5u KikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX2NyZWF0ZShpdGVt LCB0eXBlLCBzaXplLCBwb2ludGVyKSA9PSBGQUxTRSkgewotKyAgICBmcmVlX2ZuKGl0ZW0pOwot KyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIGl0ZW0tPmFsbG9jYXRlZCA9IFRSVUU7Ci0r ICByZXR1cm4gaXRlbTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9saXN0KGJpbm4gKmxpc3QpIHsKLSsKLSsg IHJldHVybiBiaW5uX2NyZWF0ZShsaXN0LCBCSU5OX0xJU1QsIDAsIE5VTEwpOwotKwotK30KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5f Y3JlYXRlX21hcChiaW5uICptYXApIHsKLSsKLSsgIHJldHVybiBiaW5uX2NyZWF0ZShtYXAsIEJJ Tk5fTUFQLCAwLCBOVUxMKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9vYmplY3QoYmlubiAqb2JqZWN0KSB7 Ci0rCi0rICByZXR1cm4gYmlubl9jcmVhdGUob2JqZWN0LCBCSU5OX09CSkVDVCwgMCwgTlVMTCk7 Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJp bm5fbGlzdCgpIHsKLSsgIHJldHVybiBiaW5uX25ldyhCSU5OX0xJU1QsIDAsIDApOwotK30KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcCgpIHsK LSsgIHJldHVybiBiaW5uX25ldyhCSU5OX01BUCwgMCwgMCk7Ci0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0KCkgewotKyAgcmV0dXJu IGJpbm5fbmV3KEJJTk5fT0JKRUNULCAwLCAwKTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9jb3B5KGNvbnN0IHZvaWQgKm9sZCkgewotKyAg aW50IHR5cGUsIGNvdW50LCBzaXplLCBoZWFkZXJfc2l6ZTsKLSsgIHVuc2lnbmVkIGNoYXIgKm9s ZF9wdHIgPSBiaW5uX3B0cihvbGQpOwotKyAgYmlubiAqaXRlbTsKLSsKLSsgIHNpemUgPSAwOwot KyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihvbGRfcHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6ZSwg JmhlYWRlcl9zaXplKSkgcmV0dXJuIE5VTEw7Ci0rCi0rICBpdGVtID0gYmlubl9uZXcodHlwZSwg c2l6ZSAtIGhlYWRlcl9zaXplICsgTUFYX0JJTk5fSEVBREVSLCBOVUxMKTsKLSsgIGlmKCBpdGVt ICl7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Q7Ci0rICAgIGRlc3QgPSAoKHVuc2lnbmVkIGNo YXIgKikgaXRlbS0+cGJ1ZikgKyBNQVhfQklOTl9IRUFERVI7Ci0rICAgIG1lbWNweShkZXN0LCBv bGRfcHRyICsgaGVhZGVyX3NpemUsIHNpemUgLSBoZWFkZXJfc2l6ZSk7Ci0rICAgIGl0ZW0tPnVz ZWRfc2l6ZSA9IE1BWF9CSU5OX0hFQURFUiArIHNpemUgLSBoZWFkZXJfc2l6ZTsKLSsgICAgaXRl bS0+Y291bnQgPSBjb3VudDsKLSsgIH0KLSsgIHJldHVybiBpdGVtOwotKwotK30KLSsKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsvLyBkZXByZWNhdGVkOiB1bnNlY3VyZS4g dGhlIHNpemUgY2FuIGJlIGNvcnJ1cHRlZCBhY2NpZGVudGFsbHkgb3IgaW50ZW50aW9uYWxseQot K0JPT0wgQVBJRU5UUlkgYmlubl9sb2FkKGNvbnN0IHZvaWQgKmRhdGEsIGJpbm4gKnZhbHVlKSB7 Ci0rCi0rICBpZiAoZGF0YSA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsK LSsgIG1lbXNldCh2YWx1ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKLSsgIHZhbHVlLT5oZWFkZXIgPSBC SU5OX01BR0lDOwotKyAgLy92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAgYWxyZWFkeSB6 ZXJvZWQKLSsgIC8vdmFsdWUtPndyaXRhYmxlID0gRkFMU0U7Ci0rCi0rICBpZiAoYmlubl9pc192 YWxpZChkYXRhLCAmdmFsdWUtPnR5cGUsICZ2YWx1ZS0+Y291bnQsICZ2YWx1ZS0+c2l6ZSkgPT0g RkFMU0UpIHJldHVybiBGQUxTRTsKLSsgIHZhbHVlLT5wdHIgPSAodm9pZCopIGRhdGE7Ci0rICBy ZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xvYWRfZXgoY29uc3Qg dm9pZCAqZGF0YSwgaW50IHNpemUsIGJpbm4gKnZhbHVlKSB7Ci0rCi0rICBpZiAoZGF0YSA9PSBO VUxMIHx8IHZhbHVlID09IE5VTEwgfHwgc2l6ZSA8PSAwKSByZXR1cm4gRkFMU0U7Ci0rICBtZW1z ZXQodmFsdWUsIDAsIHNpemVvZihiaW5uKSk7Ci0rICB2YWx1ZS0+aGVhZGVyID0gQklOTl9NQUdJ QzsKLSsgIC8vdmFsdWUtPmFsbG9jYXRlZCA9IEZBTFNFOyAgLS0gIGFscmVhZHkgemVyb2VkCi0r ICAvL3ZhbHVlLT53cml0YWJsZSA9IEZBTFNFOwotKwotKyAgaWYgKGJpbm5faXNfdmFsaWRfZXgo ZGF0YSwgJnZhbHVlLT50eXBlLCAmdmFsdWUtPmNvdW50LCAmc2l6ZSkgPT0gRkFMU0UpIHJldHVy biBGQUxTRTsKLSsgIHZhbHVlLT5wdHIgPSAodm9pZCopIGRhdGE7Ci0rICB2YWx1ZS0+c2l6ZSA9 IHNpemU7Ci0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fb3Blbihjb25zdCB2b2lkICpkYXRh KSB7Ci0rICBiaW5uICppdGVtOwotKwotKyAgaXRlbSA9IChiaW5uKikgYmlubl9tYWxsb2Moc2l6 ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX2xvYWQoZGF0YSwgaXRlbSkgPT0gRkFMU0UpIHsK LSsgICAgZnJlZV9mbihpdGVtKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICBpdGVt LT5hbGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIGl0ZW07Ci0rCi0rfQotKwotK2Jpbm4gKiBB UElFTlRSWSBiaW5uX29wZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUpIHsKLSsgIGJp bm4gKml0ZW07Ci0rCi0rICBpdGVtID0gKGJpbm4qKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikp OwotKwotKyAgaWYgKGJpbm5fbG9hZF9leChkYXRhLCBzaXplLCBpdGVtKSA9PSBGQUxTRSkgewot KyAgICBmcmVlX2ZuKGl0ZW0pOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIGl0ZW0t PmFsbG9jYXRlZCA9IFRSVUU7Ci0rICByZXR1cm4gaXRlbTsKLSsKLSt9Ci0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgaW50IGJpbm5fZ2V0X3B0cl90eXBlKGNvbnN0 IHZvaWQgKnB0cikgewotKwotKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm4gMDsKLSsKLSsgIHN3 aXRjaCAoKih1bnNpZ25lZCBpbnQgKilwdHIpIHsKLSsgIGNhc2UgQklOTl9NQUdJQzoKLSsgICAg cmV0dXJuIEJJTk5fU1RSVUNUOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEJJTk5fQlVGRkVS OwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5U UlkgYmlubl9pc19zdHJ1Y3QoY29uc3Qgdm9pZCAqcHRyKSB7Ci0rCi0rICBpZiAocHRyID09IE5V TEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICgoKih1bnNpZ25lZCBpbnQgKilwdHIpID09IEJJ Tk5fTUFHSUMpIHsKLSsgICAgcmV0dXJuIFRSVUU7Ci0rICB9IGVsc2UgewotKyAgICByZXR1cm4g RkFMU0U7Ci0rICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9Q UklWQVRFIGludCBDYWxjQWxsb2NhdGlvbihpbnQgbmVlZGVkX3NpemUsIGludCBhbGxvY19zaXpl KSB7Ci0rICBpbnQgY2FsY19zaXplOwotKwotKyAgY2FsY19zaXplID0gYWxsb2Nfc2l6ZTsKLSsg IHdoaWxlIChjYWxjX3NpemUgPCBuZWVkZWRfc2l6ZSkgewotKyAgICBjYWxjX3NpemUgPDw9IDE7 ICAvLyBzYW1lIGFzICo9IDIKLSsgICAgLy9jYWxjX3NpemUgKz0gQ0hVTktfU0laRTsgIC0tIHRo aXMgaXMgc2xvd2VyIHRoYW4gdGhlIGFib3ZlIGxpbmUsIGJlY2F1c2UgdGhlcmUgYXJlIG1vcmUg cmVhbGxvY2F0aW9ucwotKyAgfQotKyAgcmV0dXJuIGNhbGNfc2l6ZTsKLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9PTCBDaGVja0FsbG9jYXRpb24o YmlubiAqaXRlbSwgaW50IGFkZF9zaXplKSB7Ci0rICBpbnQgIGFsbG9jX3NpemU7Ci0rICB2b2lk ICpwdHI7Ci0rCi0rICBpZiAoaXRlbS0+dXNlZF9zaXplICsgYWRkX3NpemUgPiBpdGVtLT5hbGxv Y19zaXplKSB7Ci0rICAgIGlmIChpdGVtLT5wcmVfYWxsb2NhdGVkKSByZXR1cm4gRkFMU0U7Ci0r ICAgIGFsbG9jX3NpemUgPSBDYWxjQWxsb2NhdGlvbihpdGVtLT51c2VkX3NpemUgKyBhZGRfc2l6 ZSwgaXRlbS0+YWxsb2Nfc2l6ZSk7Ci0rICAgIHB0ciA9IHJlYWxsb2NfZm4oaXRlbS0+cGJ1Ziwg YWxsb2Nfc2l6ZSk7Ci0rICAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKyAgICBp dGVtLT5wYnVmID0gcHRyOwotKyAgICBpdGVtLT5hbGxvY19zaXplID0gYWxsb2Nfc2l6ZTsKLSsg IH0KLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLSsKLStCSU5OX1BSSVZBVEUgaW50IGdl dF9zdG9yYWdlX3NpemUoaW50IHN0b3JhZ2VfdHlwZSkgewotKwotKyAgc3dpdGNoIChzdG9yYWdl X3R5cGUpIHsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAgIHJldHVybiAwOwot KyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKLSsgICAgcmV0dXJuIDE7Ci0rICBjYXNlIEJJTk5f U1RPUkFHRV9XT1JEOgotKyAgICByZXR1cm4gMjsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JE OgotKyAgICByZXR1cm4gNDsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgotKyAgICByZXR1 cm4gODsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiAwOwotKyAgfQotKwotK30KLSsKLSsjZW5k aWYKLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSB1bnNpZ25lZCBj aGFyICogQWR2YW5jZURhdGFQb3ModW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqcGxp bWl0KSB7Ci0rICB1bnNpZ25lZCBjaGFyIGJ5dGU7Ci0rICBpbnQgIHN0b3JhZ2VfdHlwZSwgRGF0 YVNpemU7Ci0rCi0rICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIDA7Ci0rCi0rICBieXRlID0gKnA7 IHArKzsKLSsgIHN0b3JhZ2VfdHlwZSA9IGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFTSzsKLSsgIGlm IChieXRlICYgQklOTl9TVE9SQUdFX0hBU19NT1JFKSBwKys7Ci0rCi0rICBzd2l0Y2ggKHN0b3Jh Z2VfdHlwZSkgewotKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKLSsgICAgLy9wICs9IDA7 Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKLSsgICAgcCArKzsKLSsg ICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgotKyAgICBwICs9IDI7Ci0rICAg IGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6Ci0rICAgIHAgKz0gNDsKLSsgICAg YnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgcCArPSA4OwotKyAgICBi cmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9T VFJJTkc6Ci0rICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gMDsKLSsgICAgRGF0YVNpemUgPSAq KCh1bnNpZ25lZCBjaGFyKilwKTsKLSsgICAgaWYgKERhdGFTaXplICYgMHg4MCkgewotKyAgICAg IGlmIChwICsgc2l6ZW9mKGludCkgLSAxID4gcGxpbWl0KSByZXR1cm4gMDsKLSsgICAgICBjb3B5 X2JlMzIoKHUzMiopJkRhdGFTaXplLCAodTMyKilwKTsKLSsgICAgICBEYXRhU2l6ZSAmPSAweDdG RkZGRkZGOwotKyAgICAgIHArPTQ7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgcCsrOwotKyAgICB9 Ci0rICAgIHAgKz0gRGF0YVNpemU7Ci0rICAgIGlmIChzdG9yYWdlX3R5cGUgPT0gQklOTl9TVE9S QUdFX1NUUklORykgewotKyAgICAgIHArKzsgIC8vIG51bGwgdGVybWluYXRvci4KLSsgICAgfQot KyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKLSsgICAgaWYgKHAg PiBwbGltaXQpIHJldHVybiAwOwotKyAgICBEYXRhU2l6ZSA9ICooKHVuc2lnbmVkIGNoYXIqKXAp OwotKyAgICBpZiAoRGF0YVNpemUgJiAweDgwKSB7Ci0rICAgICAgaWYgKHAgKyBzaXplb2YoaW50 KSAtIDEgPiBwbGltaXQpIHJldHVybiAwOwotKyAgICAgIGNvcHlfYmUzMigodTMyKikmRGF0YVNp emUsICh1MzIqKXApOwotKyAgICAgIERhdGFTaXplICY9IDB4N0ZGRkZGRkY7Ci0rICAgIH0KLSsg ICAgRGF0YVNpemUtLTsgIC8vIHJlbW92ZSB0aGUgdHlwZSBieXRlIGFscmVhZHkgYWRkZWQgYmVm b3JlCi0rICAgIHAgKz0gRGF0YVNpemU7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAg cmV0dXJuIDA7Ci0rICB9Ci0rCi0rICByZXR1cm4gcDsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLSsKLSsvKgotKwotK1RoZSBpZCBjYW4gYmUgc3RvcmVkIHdpdGggMSB0byA1IGJ5 dGVzCi0rCi0rUyA9IHNpZ25hbCBiaXQKLStYID0gYml0IHBhcnQgb2YgaWQKLSsKLSsgIDBTWFgg WFhYWAotKyAgMTAwUyBYWFhYICsgMSBieXRlCi0rICAxMDFTIFhYWFggKyAyIGJ5dGVzCi0rICAx MTBTIFhYWFggKyAzIGJ5dGVzCi0rICAxMTEwIDAwMDAgKyA0IGJ5dGVzCi0rCi0rKi8KLStCSU5O X1BSSVZBVEUgaW50IHJlYWRfbWFwX2lkKHVuc2lnbmVkIGNoYXIgKipwcCwgdW5zaWduZWQgY2hh ciAqcGxpbWl0KSB7Ci0rICB1bnNpZ25lZCBjaGFyICpwLCBjLCBzaWduLCB0eXBlOwotKyAgaW50 IGlkLCBleHRyYV9ieXRlczsKLSsKLSsgIHAgPSAqcHA7Ci0rICBpZiAocCA+IHBsaW1pdCkgcmV0 dXJuIDA7Ci0rCi0rICBjID0gKnArKzsKLSsKLSsgIGlmIChjICYgMHg4MCkgewotKyAgICBleHRy YV9ieXRlcyA9ICgoYyAmIDB4NjApID4+IDUpICsgMTsKLSsgICAgaWYgKHAgKyBleHRyYV9ieXRl cyA+IHBsaW1pdCApIHsKLSsgICAgICAqcHAgPSBwICsgZXh0cmFfYnl0ZXM7Ci0rICAgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHR5cGUgPSBjICYgMHhFMDsKLSsgIHNpZ24gPSBj ICYgMHgxMDsKLSsKLSsgIGlmICgoYyAmIDB4ODApID09IDApIHsKLSsgICAgc2lnbiA9IGMgJiAw eDQwOwotKyAgICBpZCA9IGMgJiAweDNGOwotKyAgfSBlbHNlIGlmICh0eXBlID09IDB4ODApIHsK LSsgICAgaWQgPSBjICYgMHgwRjsKLSsgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOwotKyAgfSBl bHNlIGlmICh0eXBlID09IDB4QTApIHsKLSsgICAgaWQgPSBjICYgMHgwRjsKLSsgICAgaWQgPSAo aWQgPDwgOCkgfCAqcCsrOwotKyAgICBpZCA9IChpZCA8PCA4KSB8ICpwKys7Ci0rICB9IGVsc2Ug aWYgKHR5cGUgPT0gMHhDMCkgewotKyAgICBpZCA9IGMgJiAweDBGOwotKyAgICBpZCA9IChpZCA8 PCA4KSB8ICpwKys7Ci0rICAgIGlkID0gKGlkIDw8IDgpIHwgKnArKzsKLSsgICAgaWQgPSAoaWQg PDwgOCkgfCAqcCsrOwotKyAgfSBlbHNlIGlmICh0eXBlID09IDB4RTApIHsKLSsgICAgY29weV9i ZTMyKCh1MzIqKSZpZCwgKHUzMiopcCk7Ci0rICAgIHAgKz0gNDsKLSsgIH0gZWxzZSB7Ci0rICAg ICpwcCA9IHBsaW1pdCArIDI7Ci0rICAgIHJldHVybiAwOwotKyAgfQotKwotKyAgaWYgKHNpZ24p IGlkID0gLWlkOwotKwotKyAgKnBwID0gcDsKLSsKLSsgIHJldHVybiBpZDsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdW5zaWduZWQgY2hhciAqIFNlYXJj aEZvcklEKHVuc2lnbmVkIGNoYXIgKnAsIGludCBoZWFkZXJfc2l6ZSwgaW50IHNpemUsIGludCBu dW1pdGVtcywgaW50IGlkKSB7Ci0rICB1bnNpZ25lZCBjaGFyICpwbGltaXQsICpiYXNlOwotKyAg aW50ICBpLCBpbnQzMjsKLSsKLSsgIGJhc2UgPSBwOwotKyAgcGxpbWl0ID0gcCArIHNpemUgLSAx OwotKyAgcCArPSBoZWFkZXJfc2l6ZTsKLSsKLSsgIC8vIHNlYXJjaCBmb3IgdGhlIElEIGluIGFs bCB0aGUgYXJndW1lbnRzLgotKyAgZm9yIChpID0gMDsgaSA8IG51bWl0ZW1zOyBpKyspIHsKLSsg ICAgaW50MzIgPSByZWFkX21hcF9pZCgmcCwgcGxpbWl0KTsKLSsgICAgaWYgKHAgPiBwbGltaXQp IGJyZWFrOwotKyAgICAvLyBDb21wYXJlIGlmIHRoZSBJRHMgYXJlIGVxdWFsLgotKyAgICBpZiAo aW50MzIgPT0gaWQpIHJldHVybiBwOwotKyAgICAvLyB4eHgKLSsgICAgcCA9IEFkdmFuY2VEYXRh UG9zKHAsIHBsaW1pdCk7Ci0rICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIGJyZWFrOwotKyAg fQotKwotKyAgcmV0dXJuIE5VTEw7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r Ci0rQklOTl9QUklWQVRFIHVuc2lnbmVkIGNoYXIgKiBTZWFyY2hGb3JLZXkodW5zaWduZWQgY2hh ciAqcCwgaW50IGhlYWRlcl9zaXplLCBpbnQgc2l6ZSwgaW50IG51bWl0ZW1zLCBjb25zdCBjaGFy ICprZXkpIHsKLSsgIHVuc2lnbmVkIGNoYXIgbGVuLCAqcGxpbWl0LCAqYmFzZTsKLSsgIGludCAg aSwga2V5bGVuOwotKwotKyAgYmFzZSA9IHA7Ci0rICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7Ci0r ICBwICs9IGhlYWRlcl9zaXplOwotKwotKyAga2V5bGVuID0gc3RybGVuKGtleSk7Ci0rCi0rICAv LyBzZWFyY2ggZm9yIHRoZSBrZXkgaW4gYWxsIHRoZSBhcmd1bWVudHMuCi0rICBmb3IgKGkgPSAw OyBpIDwgbnVtaXRlbXM7IGkrKykgewotKyAgICBpZiAocCA+IHBsaW1pdCkgYnJlYWs7Ci0rICAg IGxlbiA9ICooKHVuc2lnbmVkIGNoYXIgKilwKTsKLSsgICAgcCsrOwotKyAgICBpZiAocCArIGxl biA+IHBsaW1pdCkgYnJlYWs7Ci0rICAgIC8vIENvbXBhcmUgaWYgdGhlIHN0cmluZ3MgYXJlIGVx dWFsLgotKyAgICBpZiAobGVuID4gMCkgewotKyAgICAgIGlmIChzdHJuaWNtcCgoY2hhciopcCwg a2V5LCBsZW4pID09IDApIHsgICAvLyBub3RlIHRoYXQgdGhlcmUgaXMgbm8gbnVsbCB0ZXJtaW5h dG9yIGhlcmUKLSsgICAgICAgIGlmIChrZXlsZW4gPT0gbGVuKSB7Ci0rICAgICAgICAgIHAgKz0g bGVuOwotKyAgICAgICAgICByZXR1cm4gcDsKLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAg cCArPSBsZW47Ci0rICAgIH0gZWxzZSBpZiAobGVuID09IGtleWxlbikgeyAgIC8vIGluIHRoZSBj YXNlIG9mIGVtcHR5IHN0cmluZzogIiIKLSsgICAgICByZXR1cm4gcDsKLSsgICAgfQotKyAgICAv LyB4eHgKLSsgICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7Ci0rICAgIGlmIChwID09 IDAgfHwgcCA8IGJhc2UpIGJyZWFrOwotKyAgfQotKwotKyAgcmV0dXJuIE5VTEw7Ci0rCi0rfQot KwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgQWRkVmFsdWUo YmlubiAqaXRlbSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOwotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9saXN0X2FkZF9yYXco YmlubiAqaXRlbSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKLSsKLSsgIGlm IChpdGVtID09IE5VTEwgfHwgaXRlbS0+dHlwZSAhPSBCSU5OX0xJU1QgfHwgaXRlbS0+d3JpdGFi bGUgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIC8vaWYgKENoZWNrQWxsb2NhdGlvbihp dGVtLCA0KSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOyAgLy8gNCBieXRlcyB1c2VkIGZvciBkYXRh X3N0b3JlIGFuZCBkYXRhX2Zvcm1hdC4KLSsKLSsgIGlmIChBZGRWYWx1ZShpdGVtLCB0eXBlLCBw dmFsdWUsIHNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpdGVtLT5jb3VudCsr OwotKwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r Ci0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9vYmplY3Rfc2V0X3JhdyhiaW5uICppdGVtLCBjb25z dCBjaGFyICprZXksIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7Ci0rICB1bnNp Z25lZCBjaGFyICpwLCBsZW47Ci0rICBpbnQgaW50MzI7Ci0rCi0rICBpZiAoaXRlbSA9PSBOVUxM IHx8IGl0ZW0tPnR5cGUgIT0gQklOTl9PQkpFQ1QgfHwgaXRlbS0+d3JpdGFibGUgPT0gRkFMU0Up IHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChrZXkgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKyAg aW50MzIgPSBzdHJsZW4oa2V5KTsKLSsgIGlmIChpbnQzMiA+IDI1NSkgcmV0dXJuIEZBTFNFOwot KwotKyAgLy8gaXMgdGhlIGtleSBhbHJlYWR5IGluIGl0PwotKyAgcCA9IFNlYXJjaEZvcktleShp dGVtLT5wYnVmLCBNQVhfQklOTl9IRUFERVIsIGl0ZW0tPnVzZWRfc2l6ZSwgaXRlbS0+Y291bnQs IGtleSk7Ci0rICBpZiAocCkgcmV0dXJuIEZBTFNFOwotKwotKyAgLy8gc3RhcnQgYWRkaW5nIGl0 Ci0rCi0rICBpZiAoQ2hlY2tBbGxvY2F0aW9uKGl0ZW0sIDEgKyBpbnQzMikgPT0gRkFMU0UpIHJl dHVybiBGQUxTRTsgIC8vIGJ5dGVzIHVzZWQgZm9yIHRoZSBrZXkgc2l6ZSBhbmQgdGhlIGtleSBp dHNlbGYuCi0rCi0rICBwID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWYpICsgaXRlbS0+ dXNlZF9zaXplOwotKyAgbGVuID0gaW50MzI7Ci0rICAqcCA9IGxlbjsKLSsgIHArKzsKLSsgIG1l bWNweShwLCBrZXksIGludDMyKTsKLSsgIGludDMyKys7ICAvLyBub3cgY29udGFpbnMgdGhlIHN0 cmxlbiArIDEgYnl0ZSBmb3IgdGhlIGxlbgotKyAgaXRlbS0+dXNlZF9zaXplICs9IGludDMyOwot KwotKyAgaWYgKEFkZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSkgPT0gRkFMU0UpIHsK LSsgICAgaXRlbS0+dXNlZF9zaXplIC09IGludDMyOwotKyAgICByZXR1cm4gRkFMU0U7Ci0rICB9 Ci0rCi0rICBpdGVtLT5jb3VudCsrOwotKwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9tYXBfc2V0X3Jh dyhiaW5uICppdGVtLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7 Ci0rICB1bnNpZ25lZCBjaGFyICpiYXNlLCAqcCwgc2lnbjsKLSsgIGludCBpZF9zaXplOwotKwot KyAgaWYgKGl0ZW0gPT0gTlVMTCB8fCBpdGVtLT50eXBlICE9IEJJTk5fTUFQIHx8IGl0ZW0tPndy aXRhYmxlID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBpcyB0aGUgSUQgYWxyZWFk eSBpbiBpdD8KLSsgIHAgPSBTZWFyY2hGb3JJRChpdGVtLT5wYnVmLCBNQVhfQklOTl9IRUFERVIs IGl0ZW0tPnVzZWRfc2l6ZSwgaXRlbS0+Y291bnQsIGlkKTsKLSsgIGlmIChwKSByZXR1cm4gRkFM U0U7Ci0rCi0rICAvLyBzdGFydCBhZGRpbmcgaXQKLSsKLSsgIGlmIChDaGVja0FsbG9jYXRpb24o aXRlbSwgNSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsgIC8vIG1heCA1IGJ5dGVzIHVzZWQgZm9y IHRoZSBpZC4KLSsKLSsgIHAgPSBiYXNlID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWYp ICsgaXRlbS0+dXNlZF9zaXplOwotKwotKyAgc2lnbiA9IChpZCA8IDApOwotKyAgaWYgKHNpZ24p IGlkID0gLWlkOwotKwotKyAgaWYgKGlkIDw9IDB4M0YpIHsKLSsgICAgKnArKyA9IChzaWduIDw8 IDYpIHwgaWQ7Ci0rICB9IGVsc2UgaWYgKGlkIDw9IDB4RkZGKSB7Ci0rICAgICpwKysgPSAweDgw IHwgKHNpZ24gPDwgNCkgfCAoKGlkICYgMHhGMDApID4+IDgpOwotKyAgICAqcCsrID0gaWQgJiAw eEZGOwotKyAgfSBlbHNlIGlmIChpZCA8PSAweEZGRkZGKSB7Ci0rICAgICpwKysgPSAweEEwIHwg KHNpZ24gPDwgNCkgfCAoKGlkICYgMHhGMDAwMCkgPj4gMTYpOwotKyAgICAqcCsrID0gKGlkICYg MHhGRjAwKSA+PiA4OwotKyAgICAqcCsrID0gaWQgJiAweEZGOwotKyAgfSBlbHNlIGlmIChpZCA8 PSAweEZGRkZGRkYpIHsKLSsgICAgKnArKyA9IDB4QzAgfCAoc2lnbiA8PCA0KSB8ICgoaWQgJiAw eEYwMDAwMDApID4+IDI0KTsKLSsgICAgKnArKyA9IChpZCAmIDB4RkYwMDAwKSA+PiAxNjsKLSsg ICAgKnArKyA9IChpZCAmIDB4RkYwMCkgPj4gODsKLSsgICAgKnArKyA9IGlkICYgMHhGRjsKLSsg IH0gZWxzZSB7Ci0rICAgICpwKysgPSAweEUwOwotKyAgICBpZiAoc2lnbikgaWQgPSAtaWQ7Ci0r ICAgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKikmaWQpOwotKyAgICBwICs9IDQ7Ci0rICB9Ci0r Ci0rICBpZF9zaXplID0gKHAgLSBiYXNlKTsKLSsgIGl0ZW0tPnVzZWRfc2l6ZSArPSBpZF9zaXpl OwotKwotKyAgaWYgKEFkZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSkgPT0gRkFMU0Up IHsKLSsgICAgaXRlbS0+dXNlZF9zaXplIC09IGlkX3NpemU7Ci0rICAgIHJldHVybiBGQUxTRTsK LSsgIH0KLSsKLSsgIGl0ZW0tPmNvdW50Kys7Ci0rCi0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdm9pZCAqIGNvbXByZXNz X2ludChpbnQgKnBzdG9yYWdlX3R5cGUsIGludCAqcHR5cGUsIHZvaWQgKnBzb3VyY2UpIHsKLSsg IGludCBzdG9yYWdlX3R5cGUsIHN0b3JhZ2VfdHlwZTIsIHR5cGUsIHR5cGUyPTA7Ci0rICBpbnQ2 NCAgdmludCA9IDA7Ci0rICB1aW50NjQgdnVpbnQ7Ci0rICBjaGFyICpwdmFsdWU7Ci0rI2lmIEJZ VEVfT1JERVIgPT0gQklHX0VORElBTgotKyAgaW50IHNpemUxLCBzaXplMjsKLSsjZW5kaWYKLSsK LSsgIHN0b3JhZ2VfdHlwZSA9ICpwc3RvcmFnZV90eXBlOwotKyAgaWYgKHN0b3JhZ2VfdHlwZSA9 PSBCSU5OX1NUT1JBR0VfQllURSkgcmV0dXJuIHBzb3VyY2U7Ci0rCi0rICB0eXBlID0gKnB0eXBl OwotKwotKyAgc3dpdGNoICh0eXBlKSB7Ci0rICBjYXNlIEJJTk5fSU5UNjQ6Ci0rICAgIHZpbnQg PSAqKGludDY0Kilwc291cmNlOwotKyAgICBnb3RvIGxvY19zaWduZWQ7Ci0rICBjYXNlIEJJTk5f SU5UMzI6Ci0rICAgIHZpbnQgPSAqKGludCopcHNvdXJjZTsKLSsgICAgZ290byBsb2Nfc2lnbmVk OwotKyAgY2FzZSBCSU5OX0lOVDE2OgotKyAgICB2aW50ID0gKihzaG9ydCopcHNvdXJjZTsKLSsg ICAgZ290byBsb2Nfc2lnbmVkOwotKyAgY2FzZSBCSU5OX1VJTlQ2NDoKLSsgICAgdnVpbnQgPSAq KHVpbnQ2NCopcHNvdXJjZTsKLSsgICAgZ290byBsb2NfcG9zaXRpdmU7Ci0rICBjYXNlIEJJTk5f VUlOVDMyOgotKyAgICB2dWludCA9ICoodW5zaWduZWQgaW50Kilwc291cmNlOwotKyAgICBnb3Rv IGxvY19wb3NpdGl2ZTsKLSsgIGNhc2UgQklOTl9VSU5UMTY6Ci0rICAgIHZ1aW50ID0gKih1bnNp Z25lZCBzaG9ydCopcHNvdXJjZTsKLSsgICAgZ290byBsb2NfcG9zaXRpdmU7Ci0rICB9Ci0rCi0r bG9jX3NpZ25lZDoKLSsKLSsgIGlmICh2aW50ID49IDApIHsKLSsgICAgdnVpbnQgPSB2aW50Owot KyAgICBnb3RvIGxvY19wb3NpdGl2ZTsKLSsgIH0KLSsKLSsvL2xvY19uZWdhdGl2ZToKLSsKLSsg IGlmICh2aW50ID49IElOVDhfTUlOKSB7Ci0rICAgIHR5cGUyID0gQklOTl9JTlQ4OwotKyAgfSBl bHNlCi0rICBpZiAodmludCA+PSBJTlQxNl9NSU4pIHsKLSsgICAgdHlwZTIgPSBCSU5OX0lOVDE2 OwotKyAgfSBlbHNlCi0rICBpZiAodmludCA+PSBJTlQzMl9NSU4pIHsKLSsgICAgdHlwZTIgPSBC SU5OX0lOVDMyOwotKyAgfQotKyAgZ290byBsb2NfZXhpdDsKLSsKLStsb2NfcG9zaXRpdmU6Ci0r Ci0rICBpZiAodnVpbnQgPD0gVUlOVDhfTUFYKSB7Ci0rICAgIHR5cGUyID0gQklOTl9VSU5UODsK LSsgIH0gZWxzZQotKyAgaWYgKHZ1aW50IDw9IFVJTlQxNl9NQVgpIHsKLSsgICAgdHlwZTIgPSBC SU5OX1VJTlQxNjsKLSsgIH0gZWxzZQotKyAgaWYgKHZ1aW50IDw9IFVJTlQzMl9NQVgpIHsKLSsg ICAgdHlwZTIgPSBCSU5OX1VJTlQzMjsKLSsgIH0KLSsKLStsb2NfZXhpdDoKLSsKLSsgIHB2YWx1 ZSA9IChjaGFyICopIHBzb3VyY2U7Ci0rCi0rICBpZiAodHlwZTIgJiYgdHlwZTIgIT0gdHlwZSkg ewotKyAgICAqcHR5cGUgPSB0eXBlMjsKLSsgICAgc3RvcmFnZV90eXBlMiA9IGJpbm5fZ2V0X3dy aXRlX3N0b3JhZ2UodHlwZTIpOwotKyAgICAqcHN0b3JhZ2VfdHlwZSA9IHN0b3JhZ2VfdHlwZTI7 Ci0rI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotKyAgICBzaXplMSA9IGdldF9zdG9yYWdl X3NpemUoc3RvcmFnZV90eXBlKTsKLSsgICAgc2l6ZTIgPSBnZXRfc3RvcmFnZV9zaXplKHN0b3Jh Z2VfdHlwZTIpOwotKyAgICBwdmFsdWUgKz0gKHNpemUxIC0gc2l6ZTIpOwotKyNlbmRpZgotKyAg fQotKwotKyAgcmV0dXJuIHB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LSsKLStCSU5OX1BSSVZBVEUgaW50IHR5cGVfZmFtaWx5KGludCB0eXBlKTsKLSsKLStCSU5OX1BS SVZBVEUgQk9PTCBBZGRWYWx1ZShiaW5uICppdGVtLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBp bnQgc2l6ZSkgewotKyAgaW50IGludDMyLCBBcmdTaXplLCBzdG9yYWdlX3R5cGUsIGV4dHJhX3R5 cGU7Ci0rICB1bnNpZ25lZCBjaGFyICpwOwotKwotKyAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUs ICZzdG9yYWdlX3R5cGUsICZleHRyYV90eXBlKTsKLSsKLSsgIGlmIChwdmFsdWUgPT0gTlVMTCkg ewotKyAgICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkgewotKyAgICAgIGNhc2UgQklOTl9TVE9SQUdF X05PQllURVM6Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9C OgotKyAgICAgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgICAgICAgIGlmIChzaXplID09 IDApIGJyZWFrOyAvLyB0aGUgMiBhYm92ZSBhcmUgYWxsb3dlZCB0byBoYXZlIDAgbGVuZ3RoCi0r CS8qIGZhbGwgdGhyb3VnaCAqLwotKyAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICByZXR1cm4gRkFM U0U7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIGlmICh0eXBlX2ZhbWlseSh0eXBlKSA9PSBCSU5OX0ZB TUlMWV9JTlQgJiYgaXRlbS0+ZGlzYWJsZV9pbnRfY29tcHJlc3Npb24gPT0gRkFMU0UpCi0rICAg IHB2YWx1ZSA9IGNvbXByZXNzX2ludCgmc3RvcmFnZV90eXBlLCAmdHlwZSwgcHZhbHVlKTsKLSsK LSsgIHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX05PQllU RVM6Ci0rICAgICAgc2l6ZSA9IDA7Ci0rICAgICAgQXJnU2l6ZSA9IHNpemU7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6Ci0rICAgICAgc2l6ZSA9IDE7Ci0rICAg ICAgQXJnU2l6ZSA9IHNpemU7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdF X1dPUkQ6Ci0rICAgICAgc2l6ZSA9IDI7Ci0rICAgICAgQXJnU2l6ZSA9IHNpemU7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgotKyAgICAgIHNpemUgPSA0Owot KyAgICAgIEFyZ1NpemUgPSBzaXplOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RP UkFHRV9RV09SRDoKLSsgICAgICBzaXplID0gODsKLSsgICAgICBBcmdTaXplID0gc2l6ZTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKLSsgICAgICBpZiAoc2l6 ZSA8IDApIHJldHVybiBGQUxTRTsKLSsgICAgICAvL2lmIChzaXplID09IDApIC4uLgotKyAgICAg IEFyZ1NpemUgPSBzaXplICsgNDsgLy8gYXQgbGVhc3QgdGhpcyBzaXplCi0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgICAgICBpZiAoc2l6ZSA8IDApIHJl dHVybiBGQUxTRTsKLSsgICAgICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gc3RybGVuMiggKGNoYXIg KikgcHZhbHVlKTsKLSsgICAgICBBcmdTaXplID0gc2l6ZSArIDU7IC8vIGF0IGxlYXN0IHRoaXMg c2l6ZQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6Ci0r ICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIEZBTFNFOwotKyAgICAgIEFyZ1NpemUgPSBzaXpl OwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIHJldHVybiBGQUxTRTsKLSsg IH0KLSsKLSsgIEFyZ1NpemUgKz0gMjsgIC8vIGF0IGxlYXN0IDIgYnl0ZXMgdXNlZCBmb3IgZGF0 YV90eXBlLgotKyAgaWYgKENoZWNrQWxsb2NhdGlvbihpdGVtLCBBcmdTaXplKSA9PSBGQUxTRSkg cmV0dXJuIEZBTFNFOwotKwotKyAgLy8gR2V0cyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBwbGFj ZSBpbiBidWZmZXIKLSsgIHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBpdGVt LT51c2VkX3NpemU7Ci0rCi0rICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgYSBjb250YWluZXIsIHN0 b3JlIHRoZSBkYXRhIHR5cGUKLSsgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklOTl9TVE9SQUdFX0NP TlRBSU5FUikgewotKyAgICBpZiAodHlwZSA+IDI1NSkgewotKyAgICAgIHUxNiB0eXBlMTYgPSB0 eXBlOwotKyAgICAgIGNvcHlfYmUxNigodTE2KilwLCAodTE2KikmdHlwZTE2KTsKLSsgICAgICBw ICs9IDI7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDI7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgKnAgPSB0eXBlOwotKyAgICAgIHArKzsKLSsgICAgICBpdGVtLT51c2VkX3NpemUrKzsKLSsg ICAgfQotKyAgfQotKwotKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKLSsgICAgY2FzZSBCSU5O X1NUT1JBR0VfTk9CWVRFUzoKLSsgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRFOgotKyAgICAgICooKGNoYXIgKikgcCkgPSAq KChjaGFyICopIHB2YWx1ZSk7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDE7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6Ci0rICAgICAgY29weV9iZTE2KCh1 MTYqKXAsICh1MTYqKXB2YWx1ZSk7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDI7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgotKyAgICAgIGNvcHlfYmUz MigodTMyKilwLCAodTMyKilwdmFsdWUpOwotKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSA0Owot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgICBjb3B5 X2JlNjQoKHU2NCopcCwgKHU2NCopcHZhbHVlKTsKLSsgICAgICBpdGVtLT51c2VkX3NpemUgKz0g ODsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKLSsgICAgY2Fz ZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAgICAgIGlmIChzaXplID4gMTI3KSB7Ci0rICAgICAg ICBpbnQzMiA9IHNpemUgfCAweDgwMDAwMDAwOwotKyAgICAgICAgY29weV9iZTMyKCh1MzIqKXAs ICh1MzIqKSZpbnQzMik7Ci0rICAgICAgICBwICs9IDQ7Ci0rICAgICAgICBpdGVtLT51c2VkX3Np emUgKz0gNDsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKSBw KSA9IHNpemU7Ci0rICAgICAgICBwKys7Ci0rICAgICAgICBpdGVtLT51c2VkX3NpemUrKzsKLSsg ICAgICB9Ci0rICAgICAgbWVtY3B5KHAsIHB2YWx1ZSwgc2l6ZSk7Ci0rICAgICAgaWYgKHN0b3Jh Z2VfdHlwZSA9PSBCSU5OX1NUT1JBR0VfU1RSSU5HKSB7Ci0rICAgICAgICBwICs9IHNpemU7Ci0r ICAgICAgICAqKChjaGFyICopIHApID0gKGNoYXIpIDA7Ci0rICAgICAgICBzaXplKys7ICAvLyBu dWxsIHRlcm1pbmF0b3IKLSsgICAgICB9Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9IHNpemU7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKLSsgICAg ICBtZW1jcHkocCwgcHZhbHVlLCBzaXplKTsKLSsgICAgICBpdGVtLT51c2VkX3NpemUgKz0gc2l6 ZTsKLSsgICAgICBicmVhazsKLSsgIH0KLSsKLSsgIGl0ZW0tPmRpcnR5ID0gVFJVRTsKLSsKLSsg IHJldHVybiBUUlVFOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJ VkFURSBCT09MIGJpbm5fc2F2ZV9oZWFkZXIoYmlubiAqaXRlbSkgewotKyAgdW5zaWduZWQgY2hh ciBieXRlLCAqcDsKLSsgIGludCBpbnQzMiwgc2l6ZTsKLSsKLSsgIGlmIChpdGVtID09IE5VTEwp IHJldHVybiBGQUxTRTsKLSsKLSsjaWZuZGVmIEJJTk5fRElTQUJMRV9TTUFMTF9IRUFERVIKLSsK LSsgIHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBNQVhfQklOTl9IRUFERVI7 Ci0rICBzaXplID0gaXRlbS0+dXNlZF9zaXplIC0gTUFYX0JJTk5fSEVBREVSICsgMzsgIC8vIGF0 IGxlYXN0IDMgYnl0ZXMgZm9yIHRoZSBoZWFkZXIKLSsKLSsgIC8vIHdyaXRlIHRoZSBjb3VudAot KyAgaWYgKGl0ZW0tPmNvdW50ID4gMTI3KSB7Ci0rICAgIHAgLT0gNDsKLSsgICAgc2l6ZSArPSAz OwotKyAgICBpbnQzMiA9IGl0ZW0tPmNvdW50IHwgMHg4MDAwMDAwMDsKLSsgICAgY29weV9iZTMy KCh1MzIqKXAsICh1MzIqKSZpbnQzMik7Ci0rICB9IGVsc2UgewotKyAgICBwLS07Ci0rICAgICpw ID0gKHVuc2lnbmVkIGNoYXIpIGl0ZW0tPmNvdW50OwotKyAgfQotKwotKyAgLy8gd3JpdGUgdGhl IHNpemUKLSsgIGlmIChzaXplID4gMTI3KSB7Ci0rICAgIHAgLT0gNDsKLSsgICAgc2l6ZSArPSAz OwotKyAgICBpbnQzMiA9IHNpemUgfCAweDgwMDAwMDAwOwotKyAgICBjb3B5X2JlMzIoKHUzMiop cCwgKHUzMiopJmludDMyKTsKLSsgIH0gZWxzZSB7Ci0rICAgIHAtLTsKLSsgICAgKnAgPSAodW5z aWduZWQgY2hhcikgc2l6ZTsKLSsgIH0KLSsKLSsgIC8vIHdyaXRlIHRoZSB0eXBlLgotKyAgcC0t OwotKyAgKnAgPSAodW5zaWduZWQgY2hhcikgaXRlbS0+dHlwZTsKLSsKLSsgIC8vIHNldCB0aGUg dmFsdWVzCi0rICBpdGVtLT5wdHIgPSBwOwotKyAgaXRlbS0+c2l6ZSA9IHNpemU7Ci0rCi0rICBV TlVTRUQoYnl0ZSk7Ci0rCi0rI2Vsc2UKLSsKLSsgIHAgPSAodW5zaWduZWQgY2hhciAqKSBpdGVt LT5wYnVmOwotKwotKyAgLy8gd3JpdGUgdGhlIHR5cGUuCi0rICBieXRlID0gaXRlbS0+dHlwZTsK LSsgICpwID0gYnl0ZTsgcCsrOwotKyAgLy8gd3JpdGUgdGhlIHNpemUKLSsgIGludDMyID0gaXRl bS0+dXNlZF9zaXplIHwgMHg4MDAwMDAwMDsKLSsgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKikm aW50MzIpOwotKyAgcCs9NDsKLSsgIC8vIHdyaXRlIHRoZSBjb3VudAotKyAgaW50MzIgPSBpdGVt LT5jb3VudCB8IDB4ODAwMDAwMDA7Ci0rICBjb3B5X2JlMzIoKHUzMiopcCwgKHUzMiopJmludDMy KTsKLSsKLSsgIGl0ZW0tPnB0ciA9IGl0ZW0tPnBidWY7Ci0rICBpdGVtLT5zaXplID0gaXRlbS0+ dXNlZF9zaXplOwotKwotKyNlbmRpZgotKwotKyAgaXRlbS0+ZGlydHkgPSBGQUxTRTsKLSsKLSsg IHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK3ZvaWQg QVBJRU5UUlkgYmlubl9mcmVlKGJpbm4gKml0ZW0pIHsKLSsKLSsgIGlmIChpdGVtID09IE5VTEwp IHJldHVybjsKLSsKLSsgIGlmIChpdGVtLT53cml0YWJsZSAmJiBpdGVtLT5wcmVfYWxsb2NhdGVk ID09IEZBTFNFKSB7Ci0rICAgIGZyZWVfZm4oaXRlbS0+cGJ1Zik7Ci0rICB9Ci0rCi0rICBpZiAo aXRlbS0+ZnJlZWZuKSBpdGVtLT5mcmVlZm4oaXRlbS0+cHRyKTsKLSsKLSsgIGlmIChpdGVtLT5h bGxvY2F0ZWQpIHsKLSsgICAgZnJlZV9mbihpdGVtKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1lbXNl dChpdGVtLCAwLCBzaXplb2YoYmlubikpOwotKyAgICBpdGVtLT5oZWFkZXIgPSBCSU5OX01BR0lD OwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8vIGZyZWUgdGhlIGJp bm4gc3RydWN0dXJlIGJ1dCBrZWVwcyB0aGUgYmlubiBidWZmZXIgYWxsb2NhdGVkLCByZXR1cm5p bmcgYSBwb2ludGVyIHRvIGl0LiB1c2UgdGhlIGZyZWUgZnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUg YnVmZmVyIGxhdGVyCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fcmVsZWFzZShiaW5uICppdGVtKSB7 Ci0rICB2b2lkICpkYXRhOwotKwotKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0r Ci0rICBkYXRhID0gYmlubl9wdHIoaXRlbSk7Ci0rCi0rICBpZiAoZGF0YSA+IGl0ZW0tPnBidWYp IHsKLSsgICAgbWVtbW92ZShpdGVtLT5wYnVmLCBkYXRhLCBpdGVtLT5zaXplKTsKLSsgICAgZGF0 YSA9IGl0ZW0tPnBidWY7Ci0rICB9Ci0rCi0rICBpZiAoaXRlbS0+YWxsb2NhdGVkKSB7Ci0rICAg IGZyZWVfZm4oaXRlbSk7Ci0rICB9IGVsc2UgewotKyAgICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9m KGJpbm4pKTsKLSsgICAgaXRlbS0+aGVhZGVyID0gQklOTl9NQUdJQzsKLSsgIH0KLSsKLSsgIHJl dHVybiBkYXRhOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJ VkFURSBCT09MIElzVmFsaWRCaW5uSGVhZGVyKGNvbnN0IHZvaWQgKnBidWYsIGludCAqcHR5cGUs IGludCAqcGNvdW50LCBpbnQgKnBzaXplLCBpbnQgKnBoZWFkZXJzaXplKSB7Ci0rICB1bnNpZ25l ZCBjaGFyIGJ5dGUsICpwLCAqcGxpbWl0PTA7Ci0rICBpbnQgaW50MzIsIHR5cGUsIHNpemUsIGNv dW50OwotKwotKyAgaWYgKHBidWYgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAgcCA9ICh1 bnNpZ25lZCBjaGFyICopIHBidWY7Ci0rCi0rICBpZiAocHNpemUgJiYgKnBzaXplID4gMCkgewot KyAgICBpZiAoKnBzaXplIDwgTUlOX0JJTk5fU0laRSkgcmV0dXJuIEZBTFNFOwotKyAgICBwbGlt aXQgPSBwICsgKnBzaXplIC0gMTsKLSsgIH0KLSsKLSsgIC8vIGdldCB0aGUgdHlwZQotKyAgYnl0 ZSA9ICpwOyBwKys7Ci0rICBpZiAoKGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFTSykgIT0gQklOTl9T VE9SQUdFX0NPTlRBSU5FUikgcmV0dXJuIEZBTFNFOwotKyAgaWYgKGJ5dGUgJiBCSU5OX1NUT1JB R0VfSEFTX01PUkUpIHJldHVybiBGQUxTRTsKLSsgIHR5cGUgPSBieXRlOwotKwotKyAgc3dpdGNo ICh0eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9MSVNUOgotKyAgICBjYXNlIEJJTk5fTUFQOgotKyAg ICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAg IHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIC8vIGdldCB0aGUgc2l6ZQotKyAgaWYgKHBsaW1p dCAmJiBwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0rICBpbnQzMiA9ICooKHVuc2lnbmVkIGNo YXIqKXApOwotKyAgaWYgKGludDMyICYgMHg4MCkgewotKyAgICBpZiAocGxpbWl0ICYmIHAgKyBz aXplb2YoaW50KSAtIDEgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgY29weV9iZTMyKCh1 MzIqKSZpbnQzMiwgKHUzMiopcCk7Ci0rICAgIGludDMyICY9IDB4N0ZGRkZGRkY7Ci0rICAgIHAr PTQ7Ci0rICB9IGVsc2UgewotKyAgICBwKys7Ci0rICB9Ci0rICBzaXplID0gaW50MzI7Ci0rCi0r ICAvLyBnZXQgdGhlIGNvdW50Ci0rICBpZiAocGxpbWl0ICYmIHAgPiBwbGltaXQpIHJldHVybiBG QUxTRTsKLSsgIGludDMyID0gKigodW5zaWduZWQgY2hhciopcCk7Ci0rICBpZiAoaW50MzIgJiAw eDgwKSB7Ci0rICAgIGlmIChwbGltaXQgJiYgcCArIHNpemVvZihpbnQpIC0gMSA+IHBsaW1pdCkg cmV0dXJuIEZBTFNFOwotKyAgICBjb3B5X2JlMzIoKHUzMiopJmludDMyLCAodTMyKilwKTsKLSsg ICAgaW50MzIgJj0gMHg3RkZGRkZGRjsKLSsgICAgcCs9NDsKLSsgIH0gZWxzZSB7Ci0rICAgIHAr KzsKLSsgIH0KLSsgIGNvdW50ID0gaW50MzI7Ci0rCi0rICBpZiAoc2l6ZSA8IE1JTl9CSU5OX1NJ WkUgfHwgY291bnQgPCAwKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyByZXR1cm4gdGhlIHZhbHVl cwotKyAgaWYgKHB0eXBlKSAgKnB0eXBlICA9IHR5cGU7Ci0rICBpZiAocGNvdW50KSAqcGNvdW50 ID0gY291bnQ7Ci0rICBpZiAocHNpemUpICAqcHNpemUgID0gc2l6ZTsKLSsgIGlmIChwaGVhZGVy c2l6ZSkgKnBoZWFkZXJzaXplID0gKGludCkgKHAgLSAodW5zaWduZWQgY2hhciopcGJ1Zik7Ci0r ICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BS SVZBVEUgaW50IGJpbm5fYnVmX3R5cGUoY29uc3Qgdm9pZCAqcGJ1ZikgewotKyAgaW50ICB0eXBl OwotKwotKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihwYnVmLCAmdHlwZSwgTlVMTCwgTlVMTCwg TlVMTCkpIHJldHVybiBJTlZBTElEX0JJTk47Ci0rCi0rICByZXR1cm4gdHlwZTsKLSsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgaW50IGJpbm5fYnVmX2Nv dW50KGNvbnN0IHZvaWQgKnBidWYpIHsKLSsgIGludCAgbml0ZW1zOwotKwotKyAgaWYgKCFJc1Zh bGlkQmlubkhlYWRlcihwYnVmLCBOVUxMLCAmbml0ZW1zLCBOVUxMLCBOVUxMKSkgcmV0dXJuIDA7 Ci0rCi0rICByZXR1cm4gbml0ZW1zOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK0JJTk5fUFJJVkFURSBpbnQgYmlubl9idWZfc2l6ZShjb25zdCB2b2lkICpwYnVmKSB7Ci0r ICBpbnQgIHNpemU9MDsKLSsKLSsgIGlmICghSXNWYWxpZEJpbm5IZWFkZXIocGJ1ZiwgTlVMTCwg TlVMTCwgJnNpemUsIE5VTEwpKSByZXR1cm4gMDsKLSsKLSsgIHJldHVybiBzaXplOwotKwotK30K LSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX3B0cihj b25zdCB2b2lkICpwdHIpIHsKLSsgIGJpbm4gKml0ZW07Ci0rCi0rICBzd2l0Y2ggKGJpbm5fZ2V0 X3B0cl90eXBlKHB0cikpIHsKLSsgIGNhc2UgQklOTl9TVFJVQ1Q6Ci0rICAgIGl0ZW0gPSAoYmlu biopIHB0cjsKLSsgICAgaWYgKGl0ZW0tPndyaXRhYmxlICYmIGl0ZW0tPmRpcnR5KSB7Ci0rICAg ICAgYmlubl9zYXZlX2hlYWRlcihpdGVtKTsKLSsgICAgfQotKyAgICByZXR1cm4gaXRlbS0+cHRy OwotKyAgY2FzZSBCSU5OX0JVRkZFUjoKLSsgICAgcmV0dXJuICh2b2lkKilwdHI7Ci0rICBkZWZh dWx0OgotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLSsKLStpbnQgQVBJRU5UUlkgYmlubl9zaXplKGNvbnN0IHZvaWQgKnB0cikgewotKyAg YmlubiAqaXRlbTsKLSsKLSsgIHN3aXRjaCAoYmlubl9nZXRfcHRyX3R5cGUocHRyKSkgewotKyAg Y2FzZSBCSU5OX1NUUlVDVDoKLSsgICAgaXRlbSA9IChiaW5uKikgcHRyOwotKyAgICBpZiAoaXRl bS0+d3JpdGFibGUgJiYgaXRlbS0+ZGlydHkpIHsKLSsgICAgICBiaW5uX3NhdmVfaGVhZGVyKGl0 ZW0pOwotKyAgICB9Ci0rICAgIHJldHVybiBpdGVtLT5zaXplOwotKyAgY2FzZSBCSU5OX0JVRkZF UjoKLSsgICAgcmV0dXJuIGJpbm5fYnVmX3NpemUocHRyKTsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJl dHVybiAwOwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK2ludCBB UElFTlRSWSBiaW5uX3R5cGUoY29uc3Qgdm9pZCAqcHRyKSB7Ci0rICBiaW5uICppdGVtOwotKwot KyAgc3dpdGNoIChiaW5uX2dldF9wdHJfdHlwZShwdHIpKSB7Ci0rICBjYXNlIEJJTk5fU1RSVUNU OgotKyAgICBpdGVtID0gKGJpbm4qKSBwdHI7Ci0rICAgIHJldHVybiBpdGVtLT50eXBlOwotKyAg Y2FzZSBCSU5OX0JVRkZFUjoKLSsgICAgcmV0dXJuIGJpbm5fYnVmX3R5cGUocHRyKTsKLSsgIGRl ZmF1bHQ6Ci0rICAgIHJldHVybiAtMTsKLSsgIH0KLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLSsKLStpbnQgQVBJRU5UUlkgYmlubl9jb3VudChjb25zdCB2b2lkICpwdHIpIHsKLSsg IGJpbm4gKml0ZW07Ci0rCi0rICBzd2l0Y2ggKGJpbm5fZ2V0X3B0cl90eXBlKHB0cikpIHsKLSsg IGNhc2UgQklOTl9TVFJVQ1Q6Ci0rICAgIGl0ZW0gPSAoYmlubiopIHB0cjsKLSsgICAgcmV0dXJu IGl0ZW0tPmNvdW50OwotKyAgY2FzZSBCSU5OX0JVRkZFUjoKLSsgICAgcmV0dXJuIGJpbm5fYnVm X2NvdW50KHB0cik7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gLTE7Ci0rICB9Ci0rCi0rfQot KwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLy8gdGhlIGNvbnRhaW5lciBjYW4gYmUgc21h bGxlciB0aGFuIHRoZSBpbmZvcm1lZCBzaXplCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9pc192 YWxpZF9leDIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50ICpw c2l6ZSkgewotKyAgaW50ICBpLCB0eXBlLCBjb3VudCwgc2l6ZSwgaGVhZGVyX3NpemU7Ci0rICB1 bnNpZ25lZCBjaGFyICpwLCAqcGxpbWl0LCAqYmFzZSwgbGVuOwotKwotKyAgaWYgKHB0ciA9PSBO VUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1lZCBzaXplPwot KyAgaWYgKHBzaXplICYmICpwc2l6ZSA+IDApIHsKLSsgICAgc2l6ZSA9ICpwc2l6ZTsKLSsgIH0g ZWxzZSB7Ci0rICAgIHNpemUgPSAwOwotKyAgfQotKwotKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRl cihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpKSByZXR1cm4gRkFMU0U7 Ci0rCi0rICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1lZCBzaXplPwotKyAgaWYgKHBzaXplICYmICpw c2l6ZSA+IDApIHsKLSsgICAgLy8gaXMgaXQgYmlnZ2VyIHRoYW4gdGhlIGJ1ZmZlcj8KLSsgICAg aWYgKHNpemUgPiAqcHNpemUpIHJldHVybiBGQUxTRTsKLSsgIH0KLSsgIC8vIGlzIHRoZXJlIGFu IGluZm9ybWVkIGNvdW50PwotKyAgaWYgKHBjb3VudCAmJiAqcGNvdW50ID4gMCkgewotKyAgICAv LyBpcyBpdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIHRoZSBidWZmZXI/Ci0rICAgIGlmIChjb3Vu dCAhPSAqcGNvdW50KSByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rICAvLyBpcyB0aGVyZSBhbiBpbmZv cm1lZCB0eXBlPwotKyAgaWYgKHB0eXBlICYmICpwdHlwZSAhPSAwKSB7Ci0rICAgIC8vIGlzIGl0 IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gdGhlIGJ1ZmZlcj8KLSsgICAgaWYgKHR5cGUgIT0gKnB0 eXBlKSByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICBwID0gKHVuc2lnbmVkIGNoYXIgKilwdHI7 Ci0rICBiYXNlID0gcDsKLSsgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKLSsKLSsgIHAgKz0gaGVh ZGVyX3NpemU7Ci0rCi0rICAvLyBwcm9jZXNzIGVhY2ggKGtleSBhbmQpIHZhbHVlCi0rICBmb3Ig KGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotKyAgICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgICBj YXNlIEJJTk5fT0JKRUNUOgotKyAgICAgICAgaWYgKHAgPiBwbGltaXQpIGdvdG8gSW52YWxpZDsK LSsgICAgICAgIC8vIGdldCB0aGUga2V5IChzdHJpbmcpIHNpemUKLSsgICAgICAgIGxlbiA9ICpw OwotKyAgICAgICAgcCsrOwotKyAgICAgICAgLy9pZiAobGVuID09IDApIGdvdG8gSW52YWxpZDsK LSsgICAgICAgIC8vIGFkdmFuY2Ugb3ZlciB0aGUga2V5Ci0rICAgICAgICBwICs9IGxlbjsKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgQklOTl9NQVA6Ci0rICAgICAgICAvLyBhZHZhbmNl IG92ZXIgdGhlIGtleQotKyAgICAgICAgcmVhZF9tYXBfaWQoJnAsIHBsaW1pdCk7Ci0rICAgICAg ICBicmVhazsKLSsgICAgICBjYXNlIEJJTk5fTElTVDoKLSsgICAgICAgIC8vIG5vIGtleQotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIGdvdG8gSW52YWxpZDsKLSsg ICAgfQotKyAgICAvLyBjaGVjayB0aGUgdmFsdWUKLSsgICAgaWYgKHAgPiBwbGltaXQpIGdvdG8g SW52YWxpZDsKLSsgICAgaWYgKCgqcCAmIEJJTk5fU1RPUkFHRV9NQVNLKSA9PSBCSU5OX1NUT1JB R0VfQ09OVEFJTkVSKSB7Ci0rICAgICAgLy8gcmVjdXJzaXZlbHkgY2hlY2sgdGhlIGludGVybmFs IGNvbnRhaW5lcgotKyAgICAgIGludCBzaXplMiA9IHBsaW1pdCAtIHAgKyAxOyAgLy8gbWF4aW11 bSBjb250YWluZXIgc2l6ZQotKyAgICAgIGlmIChiaW5uX2lzX3ZhbGlkX2V4MihwLCBOVUxMLCBO VUxMLCAmc2l6ZTIpID09IEZBTFNFKSBnb3RvIEludmFsaWQ7Ci0rICAgICAgcCArPSBzaXplMjsK LSsgICAgfSBlbHNlIHsKLSsgICAgICAvLyBhZHZhbmNlIG92ZXIgdGhlIHZhbHVlCi0rICAgICAg cCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7Ci0rICAgICAgaWYgKHAgPT0gMCB8fCBwIDwg YmFzZSkgZ290byBJbnZhbGlkOwotKyAgICB9Ci0rICB9Ci0rCi0rICBpZiAocHR5cGUgICYmICpw dHlwZT09MCkgKnB0eXBlID0gdHlwZTsKLSsgIGlmIChwY291bnQgJiYgKnBjb3VudD09MCkgKnBj b3VudCA9IGNvdW50OwotKyAgaWYgKHBzaXplKSAqcHNpemUgPSBzaXplOwotKyAgcmV0dXJuIFRS VUU7Ci0rCi0rSW52YWxpZDoKLSsgIHJldHVybiBGQUxTRTsKLSsKLSt9Ci0rCi0rLy8gdGhlIGNv bnRhaW5lciBtdXN0IGhhdmUgdGhlIGluZm9ybWVkIHNpemUsIGlmIGluZm9ybWVkCi0rQk9PTCBB UElFTlRSWSBiaW5uX2lzX3ZhbGlkX2V4KGNvbnN0IHZvaWQgKnB0ciwgaW50ICpwdHlwZSwgaW50 ICpwY291bnQsIGludCAqcHNpemUpIHsKLSsgIGludCBzaXplOwotKwotKyAgaWYgKHBzaXplICYm ICpwc2l6ZSA+IDApIHsKLSsgICAgc2l6ZSA9ICpwc2l6ZTsKLSsgIH0gZWxzZSB7Ci0rICAgIHNp emUgPSAwOwotKyAgfQotKwotKyAgaWYgKGJpbm5faXNfdmFsaWRfZXgyKHB0ciwgcHR5cGUsIHBj b3VudCwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAocHNpemUpIHsK LSsgICAgaWYgKCpwc2l6ZSA+IDApIHsKLSsgICAgICBpZiAoc2l6ZSAhPSAqcHNpemUpIHJldHVy biBGQUxTRTsKLSsgICAgfSBlbHNlIGlmICgqcHNpemU9PTApIHsKLSsgICAgICAqcHNpemUgPSBz aXplOwotKyAgICB9Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5faXNfdmFsaWQoY29uc3Qgdm9pZCAq cHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50ICpwc2l6ZSkgewotKwotKyAgaWYgKHB0 eXBlKSAgKnB0eXBlICA9IDA7Ci0rICBpZiAocGNvdW50KSAqcGNvdW50ID0gMDsKLSsgIGlmIChw c2l6ZSkgICpwc2l6ZSAgPSAwOwotKwotKyAgcmV0dXJuIGJpbm5faXNfdmFsaWRfZXgocHRyLCBw dHlwZSwgcGNvdW50LCBwc2l6ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r LyoqKiBJTlRFUk5BTCBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJ VkFURSBCT09MIEdldFZhbHVlKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKnBsaW1p dCwgYmlubiAqdmFsdWUpIHsKLSsgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKLSsgIGludCAgIGRhdGFf dHlwZSwgc3RvcmFnZV90eXBlOyAgLy8sIGV4dHJhX3R5cGU7Ci0rICBpbnQgICBEYXRhU2l6ZTsK LSsgIHZvaWQgKnAyOwotKwotKyAgaWYgKHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsg IG1lbXNldCh2YWx1ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKLSsgIHZhbHVlLT5oZWFkZXIgPSBCSU5O X01BR0lDOwotKyAgLy92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAgYWxyZWFkeSB6ZXJv ZWQKLSsgIC8vdmFsdWUtPndyaXRhYmxlID0gRkFMU0U7Ci0rCi0rICAvLyBzYXZlcyBmb3IgdXNl IHdpdGggQklOTl9TVE9SQUdFX0NPTlRBSU5FUgotKyAgcDIgPSBwOwotKwotKyAgLy8gcmVhZCB0 aGUgZGF0YSB0eXBlCi0rICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgYnl0ZSA9 ICpwOyBwKys7Ci0rICBzdG9yYWdlX3R5cGUgPSBieXRlICYgQklOTl9TVE9SQUdFX01BU0s7Ci0r ICBpZiAoYnl0ZSAmIEJJTk5fU1RPUkFHRV9IQVNfTU9SRSkgewotKyAgICBkYXRhX3R5cGUgPSBi eXRlIDw8IDg7Ci0rICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0rICAgIGJ5dGUg PSAqcDsgcCsrOwotKyAgICBkYXRhX3R5cGUgfD0gYnl0ZTsKLSsgICAgLy9leHRyYV90eXBlID0g ZGF0YV90eXBlICYgQklOTl9UWVBFX01BU0sxNjsKLSsgIH0gZWxzZSB7Ci0rICAgIGRhdGFfdHlw ZSA9IGJ5dGU7Ci0rICAgIC8vZXh0cmFfdHlwZSA9IGJ5dGUgJiBCSU5OX1RZUEVfTUFTSzsKLSsg IH0KLSsKLSsgIC8vdmFsdWUtPnN0b3JhZ2VfdHlwZSA9IHN0b3JhZ2VfdHlwZTsKLSsgIHZhbHVl LT50eXBlID0gZGF0YV90eXBlOwotKwotKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKLSsgIGNh c2UgQklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JB R0VfQllURToKLSsgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgdmFsdWUt PnZ1aW50OCA9ICooKHVuc2lnbmVkIGNoYXIgKikgcCk7Ci0rICAgIHZhbHVlLT5wdHIgPSBwOyAg IC8vdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dnVpbnQ4OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklO Tl9TVE9SQUdFX1dPUkQ6Ci0rICAgIGlmIChwICsgMSA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwot KyAgICBjb3B5X2JlMTYoKHUxNiopJnZhbHVlLT52aW50MTYsICh1MTYqKXApOwotKyAgICB2YWx1 ZS0+cHRyID0gJnZhbHVlLT52aW50MTY7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JB R0VfRFdPUkQ6Ci0rICAgIGlmIChwICsgMyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICBj b3B5X2JlMzIoKHUzMiopJnZhbHVlLT52aW50MzIsICh1MzIqKXApOwotKyAgICB2YWx1ZS0+cHRy ID0gJnZhbHVlLT52aW50MzI7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdP UkQ6Ci0rICAgIGlmIChwICsgNyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICBjb3B5X2Jl NjQoKHU2NCopJnZhbHVlLT52aW50NjQsICh1NjQqKXApOwotKyAgICB2YWx1ZS0+cHRyID0gJnZh bHVlLT52aW50NjQ7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKLSsg IGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiBG QUxTRTsKLSsgICAgRGF0YVNpemUgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsKLSsgICAgaWYgKERh dGFTaXplICYgMHg4MCkgewotKyAgICAgIGlmIChwICsgMyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNF OwotKyAgICAgIGNvcHlfYmUzMigodTMyKikmRGF0YVNpemUsICh1MzIqKXApOwotKyAgICAgIERh dGFTaXplICY9IDB4N0ZGRkZGRkY7Ci0rICAgICAgcCs9NDsKLSsgICAgfSBlbHNlIHsKLSsgICAg ICBwKys7Ci0rICAgIH0KLSsgICAgaWYgKHAgKyBEYXRhU2l6ZSAtIDEgPiBwbGltaXQpIHJldHVy biBGQUxTRTsKLSsgICAgdmFsdWUtPnNpemUgPSBEYXRhU2l6ZTsKLSsgICAgdmFsdWUtPnB0ciA9 IHA7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgotKyAgICB2 YWx1ZS0+cHRyID0gcDI7ICAvLyA8LS0gaXQgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgY29u dGFpbmVyLCBub3QgdGhlIGRhdGEKLSsgICAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHAyLCBOVUxM LCAmdmFsdWUtPmNvdW50LCAmdmFsdWUtPnNpemUsIE5VTEwpID09IEZBTFNFKSByZXR1cm4gRkFM U0U7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAgfQot KwotKyAgLy8gY29udmVydCB0aGUgcmV0dXJuZWQgdmFsdWUsIGlmIG5lZWRlZAotKwotKyAgc3dp dGNoICh2YWx1ZS0+dHlwZSkgewotKyAgICBjYXNlIEJJTk5fVFJVRToKLSsgICAgICB2YWx1ZS0+ dHlwZSA9IEJJTk5fQk9PTDsKLSsgICAgICB2YWx1ZS0+dmJvb2wgPSBUUlVFOwotKyAgICAgIHZh bHVlLT5wdHIgPSAmdmFsdWUtPnZib29sOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5f RkFMU0U6Ci0rICAgICAgdmFsdWUtPnR5cGUgPSBCSU5OX0JPT0w7Ci0rICAgICAgdmFsdWUtPnZi b29sID0gRkFMU0U7Ci0rICAgICAgdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dmJvb2w7Ci0rICAgICAg YnJlYWs7Ci0rI2lmZGVmIEJJTk5fRVhURU5ERUQKLSsgICAgY2FzZSBCSU5OX1NJTkdMRV9TVFI6 Ci0rICAgICAgdmFsdWUtPnR5cGUgPSBCSU5OX1NJTkdMRTsKLSsgICAgICB2YWx1ZS0+dmZsb2F0 ID0gKGZsb2F0KSBhdG9mKChjb25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8vIGNvbnZlcnRzIGZy b20gc3RyaW5nIHRvIGRvdWJsZSwgYW5kIHRoZW4gdG8gZmxvYXQKLSsgICAgICB2YWx1ZS0+cHRy ID0gJnZhbHVlLT52ZmxvYXQ7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9ET1VCTEVf U1RSOgotKyAgICAgIHZhbHVlLT50eXBlID0gQklOTl9ET1VCTEU7Ci0rICAgICAgdmFsdWUtPnZk b3VibGUgPSBhdG9mKChjb25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8vIGNvbnZlcnRzIGZyb20g c3RyaW5nIHRvIGRvdWJsZQotKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFsdWUtPnZkb3VibGU7Ci0r ICAgICAgYnJlYWs7Ci0rI2VuZGlmCi0rICAgIC8qCi0rICAgIGNhc2UgQklOTl9ERUNJTUFMOgot KyAgICBjYXNlIEJJTk5fQ1VSUkVOQ1lTVFI6Ci0rICAgIGNhc2UgQklOTl9EQVRFOgotKyAgICBj YXNlIEJJTk5fREFURVRJTUU6Ci0rICAgIGNhc2UgQklOTl9USU1FOgotKyAgICAqLwotKyAgfQot KwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r I2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotKwotKy8vIG9uIGxpdHRsZS1lbmRpYW4g ZGV2aWNlcyB3ZSBzdG9yZSB0aGUgdmFsdWUgc28gd2UgY2FuIHJldHVybiBhIHBvaW50ZXIgdG8g aW50ZWdlcnMuCi0rLy8gaXQncyB2YWxpZCBvbmx5IGZvciBzaW5nbGUtdGhyZWFkZWQgYXBwcy4g bXVsdGktdGhyZWFkZWQgYXBwcyBtdXN0IHVzZSB0aGUgX2dldF8gZnVuY3Rpb25zIGluc3RlYWQu Ci0rCi0rYmlubiBsb2NhbF92YWx1ZTsKLSsKLStCSU5OX1BSSVZBVEUgdm9pZCAqIHN0b3JlX3Zh bHVlKGJpbm4gKnZhbHVlKSB7Ci0rCi0rICBtZW1jcHkoJmxvY2FsX3ZhbHVlLCB2YWx1ZSwgc2l6 ZW9mKGJpbm4pKTsKLSsKLSsgIHN3aXRjaCAoYmlubl9nZXRfcmVhZF9zdG9yYWdlKHZhbHVlLT50 eXBlKSkgewotKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKLSsgICAgLy8gcmV0dXJuIGEg dmFsaWQgcG9pbnRlcgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfV09SRDoKLSsgIGNhc2UgQklOTl9T VE9SQUdFX0RXT1JEOgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6Ci0rICAgIHJldHVybiAm bG9jYWxfdmFsdWUudmludDMyOyAgLy8gcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgY29udmVy dGVkIHZhbHVlLCBmcm9tIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbgotKyAgfQotKwotKyAg cmV0dXJuIHZhbHVlLT5wdHI7ICAgLy8gcmV0dXJucyBmcm9tIHRoZSBvbiBzdGFjayB2YWx1ZSB0 byBiZSB0aHJlYWQtc2FmZSAoZm9yIGxpc3QsIG1hcCwgb2JqZWN0LCBzdHJpbmcgYW5kIGJsb2Ip Ci0rCi0rfQotKwotKyNlbmRpZgotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKiBSRUFE IEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlu bl9vYmplY3RfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwgY29uc3QgY2hhciAqa2V5LCBiaW5u ICp2YWx1ZSkgewotKyAgaW50IHR5cGUsIGNvdW50LCBzaXplPTAsIGhlYWRlcl9zaXplOwotKyAg dW5zaWduZWQgY2hhciAqcCwgKnBsaW1pdDsKLSsKLSsgIHB0ciA9IGJpbm5fcHRyKHB0cik7Ci0r ICBpZiAocHRyID09IE5VTEwgfHwga2V5ID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkgcmV0dXJu IEZBTFNFOwotKwotKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgotKyAgaWYgKElzVmFsaWRCaW5uSGVh ZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkgPT0gRkFMU0UpIHJl dHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlICE9IEJJTk5fT0JKRUNUKSByZXR1cm4gRkFMU0U7 Ci0rICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIEZBTFNFOwotKwotKyAgcCA9ICh1bnNpZ25lZCBj aGFyICopIHB0cjsKLSsgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKLSsKLSsgIHAgPSBTZWFyY2hG b3JLZXkocCwgaGVhZGVyX3NpemUsIHNpemUsIGNvdW50LCBrZXkpOwotKyAgaWYgKHAgPT0gRkFM U0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVl KTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJp bm5fbWFwX2dldF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGludCBpZCwgYmlubiAqdmFsdWUpIHsK LSsgIGludCB0eXBlLCBjb3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKLSsgIHVuc2lnbmVkIGNo YXIgKnAsICpwbGltaXQ7Ci0rCi0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwotKyAgaWYgKHB0ciA9 PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIC8vIGNoZWNrIHRo ZSBoZWFkZXIKLSsgIGlmIChJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZz aXplLCAmaGVhZGVyX3NpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAodHlw ZSAhPSBCSU5OX01BUCkgcmV0dXJuIEZBTFNFOwotKyAgaWYgKGNvdW50ID09IDApIHJldHVybiBG QUxTRTsKLSsKLSsgIHAgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7Ci0rICBwbGltaXQgPSBwICsg c2l6ZSAtIDE7Ci0rCi0rICBwID0gU2VhcmNoRm9ySUQocCwgaGVhZGVyX3NpemUsIHNpemUsIGNv dW50LCBpZCk7Ci0rICBpZiAocCA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgcmV0dXJu IEdldFZhbHVlKHAsIHBsaW1pdCwgdmFsdWUpOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2dldF92YWx1ZShjb25zdCB2b2lkICpw dHIsIGludCBwb3MsIGJpbm4gKnZhbHVlKSB7Ci0rICBpbnQgIGksIHR5cGUsIGNvdW50LCBzaXpl PTAsIGhlYWRlcl9zaXplOwotKyAgdW5zaWduZWQgY2hhciAqcCwgKnBsaW1pdCwgKmJhc2U7Ci0r Ci0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwotKyAgaWYgKHB0ciA9PSBOVUxMIHx8IHZhbHVlID09 IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIC8vIGNoZWNrIHRoZSBoZWFkZXIKLSsgIGlmIChJ c1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUp ID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAodHlwZSAhPSBCSU5OX0xJU1QpIHJl dHVybiBGQUxTRTsKLSsgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gRkFMU0U7Ci0rICBpZiAocG9z IDw9IDAgfHwgcG9zID4gY291bnQpIHJldHVybiBGQUxTRTsKLSsgIHBvcy0tOyAgLy8gY29udmVy dCBmcm9tIGJhc2UgMSB0byBiYXNlIDAKLSsKLSsgIHAgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7 Ci0rICBiYXNlID0gcDsKLSsgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKLSsgIHAgKz0gaGVhZGVy X3NpemU7Ci0rCi0rICBmb3IgKGkgPSAwOyBpIDwgcG9zOyBpKyspIHsKLSsgICAgcCA9IEFkdmFu Y2VEYXRhUG9zKHAsIHBsaW1pdCk7Ci0rICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIHJldHVy biBGQUxTRTsKLSsgIH0KLSsKLSsgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVlKTsK LSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqIFJFQUQgUEFJUiBCWSBQT1NJ VElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9yZWFkX3Bh aXIoaW50IGV4cGVjdGVkX3R5cGUsIGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQs IGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKSB7Ci0rICBpbnQgIHR5cGUsIGNvdW50LCBzaXplPTAs IGhlYWRlcl9zaXplOwotKyAgaW50ICBpLCBpbnQzMiwgaWQgPSAwLCBjb3VudGVyPTA7Ci0rICB1 bnNpZ25lZCBjaGFyICpwLCAqcGxpbWl0LCAqYmFzZSwgKmtleSA9IE5VTEwsIGxlbiA9IDA7Ci0r Ci0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwotKwotKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgotKyAg aWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJf c2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlICE9IGV4cGVjdGVk X3R5cGUgfHwgY291bnQgPT0gMCB8fCBwb3MgPCAxIHx8IHBvcyA+IGNvdW50KSByZXR1cm4gRkFM U0U7Ci0rCi0rICBwID0gKHVuc2lnbmVkIGNoYXIgKikgcHRyOwotKyAgYmFzZSA9IHA7Ci0rICBw bGltaXQgPSBwICsgc2l6ZSAtIDE7Ci0rICBwICs9IGhlYWRlcl9zaXplOwotKwotKyAgZm9yIChp ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSsgICAgc3dpdGNoICh0eXBlKSB7Ci0rICAgICAgY2Fz ZSBCSU5OX01BUDoKLSsgICAgICAgIGludDMyID0gcmVhZF9tYXBfaWQoJnAsIHBsaW1pdCk7Ci0r ICAgICAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICAgICAgaWQgPSBpbnQz MjsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgQklOTl9PQkpFQ1Q6Ci0rICAgICAgICBs ZW4gPSAqKCh1bnNpZ25lZCBjaGFyICopcCk7IHArKzsKLSsgICAgICAgIGlmIChwID4gcGxpbWl0 KSByZXR1cm4gRkFMU0U7Ci0rICAgICAgICBrZXkgPSBwOwotKyAgICAgICAgcCArPSBsZW47Ci0r ICAgICAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICAgICAgYnJlYWs7Ci0r ICAgIH0KLSsgICAgY291bnRlcisrOwotKyAgICBpZiAoY291bnRlciA9PSBwb3MpIGdvdG8gZm91 bmQ7Ci0rICAgIC8vCi0rICAgIHAgPSBBZHZhbmNlRGF0YVBvcyhwLCBwbGltaXQpOwotKyAgICBp ZiAocCA9PSAwIHx8IHAgPCBiYXNlKSByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICByZXR1cm4g RkFMU0U7Ci0rCi0rZm91bmQ6Ci0rCi0rICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgY2FzZSBCSU5O X01BUDoKLSsgICAgICBpZiAocGlkKSAqcGlkID0gaWQ7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2UgQklOTl9PQkpFQ1Q6Ci0rICAgICAgaWYgKHBrZXkpIHsKLSsgICAgICAgIG1lbWNweShwa2V5 LCBrZXksIGxlbik7Ci0rICAgICAgICBwa2V5W2xlbl0gPSAwOwotKyAgICAgIH0KLSsgICAgICBi cmVhazsKLSsgIH0KLSsKLSsgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVlKTsKLSsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFw X2dldF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQsIGJpbm4gKnZhbHVl KSB7Ci0rCi0rICByZXR1cm4gYmlubl9yZWFkX3BhaXIoQklOTl9NQVAsIHB0ciwgcG9zLCBwaWQs IE5VTEwsIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09M IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywg Y2hhciAqcGtleSwgYmlubiAqdmFsdWUpIHsKLSsKLSsgIHJldHVybiBiaW5uX3JlYWRfcGFpcihC SU5OX09CSkVDVCwgcHRyLCBwb3MsIE5VTEwsIHBrZXksIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfcGFpcihjb25z dCB2b2lkICptYXAsIGludCBwb3MsIGludCAqcGlkKSB7Ci0rICBiaW5uICp2YWx1ZTsKLSsKLSsg IHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChi aW5uX3JlYWRfcGFpcihCSU5OX01BUCwgbWFwLCBwb3MsIHBpZCwgTlVMTCwgdmFsdWUpID09IEZB TFNFKSB7Ci0rICAgIGZyZWVfZm4odmFsdWUpOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsK LSsgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF9w YWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSkgewotKyAgYmlubiAqdmFs dWU7Ci0rCi0rICB2YWx1ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7Ci0r Ci0rICBpZiAoYmlubl9yZWFkX3BhaXIoQklOTl9PQkpFQ1QsIG9iaiwgcG9zLCBOVUxMLCBwa2V5 LCB2YWx1ZSkgPT0gRkFMU0UpIHsKLSsgICAgZnJlZV9mbih2YWx1ZSk7Ci0rICAgIHJldHVybiBO VUxMOwotKyAgfQotKwotKyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7Ci0rICByZXR1cm4gdmFs dWU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZF9wYWlyKGNvbnN0IHZvaWQgKnB0 ciwgaW50IHBvcywgaW50ICpwaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKLSsgIGJpbm4g dmFsdWU7Ci0rCi0rICBpZiAoYmlubl9tYXBfZ2V0X3BhaXIocHRyLCBwb3MsIHBpZCwgJnZhbHVl KSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7Ci0rICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5 cGU7Ci0rICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7Ci0rI2lmIEJZVEVfT1JERVIg PT0gTElUVExFX0VORElBTgotKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7Ci0rI2Vsc2UK LSsgIHJldHVybiB2YWx1ZS5wdHI7Ci0rI2VuZGlmCi0rCi0rfQotKwotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3JlYWRfcGFpcihjb25zdCB2 b2lkICpwdHIsIGludCBwb3MsIGNoYXIgKnBrZXksIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsK LSsgIGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9vYmplY3RfZ2V0X3BhaXIocHRyLCBwb3Ms IHBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOwotKyAgaWYgKHB0eXBlKSAqcHR5 cGUgPSB2YWx1ZS50eXBlOwotKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwotKyNp ZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KLSsgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFs dWUpOwotKyNlbHNlCi0rICByZXR1cm4gdmFsdWUucHRyOwotKyNlbmRpZgotKwotK30KLSsKLSsv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotKy8qKiogU0VRVUVOVElBTCBSRUFEIEZVTkNUSU9OUyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5faXRlcl9pbml0KGJpbm5faXRlciAqaXRl ciwgY29uc3Qgdm9pZCAqcHRyLCBpbnQgZXhwZWN0ZWRfdHlwZSkgewotKyAgaW50ICB0eXBlLCBj b3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKLSsKLSsgIHB0ciA9IGJpbm5fcHRyKHB0cik7Ci0r ICBpZiAocHRyID09IE5VTEwgfHwgaXRlciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rICBtZW1z ZXQoaXRlciwgMCwgc2l6ZW9mKGJpbm5faXRlcikpOwotKwotKyAgLy8gY2hlY2sgdGhlIGhlYWRl cgotKyAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZo ZWFkZXJfc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlICE9IGV4 cGVjdGVkX3R5cGUpIHJldHVybiBGQUxTRTsKLSsgIC8vaWYgKGNvdW50ID09IDApIHJldHVybiBG QUxTRTsgIC0tIHNob3VsZCBub3QgYmUgdXNlZAotKwotKyAgaXRlci0+cGxpbWl0ID0gKHVuc2ln bmVkIGNoYXIgKilwdHIgKyBzaXplIC0gMTsKLSsgIGl0ZXItPnBuZXh0ID0gKHVuc2lnbmVkIGNo YXIgKilwdHIgKyBoZWFkZXJfc2l6ZTsKLSsgIGl0ZXItPmNvdW50ID0gY291bnQ7Ci0rICBpdGVy LT5jdXJyZW50ID0gMDsKLSsgIGl0ZXItPnR5cGUgPSB0eXBlOwotKwotKyAgcmV0dXJuIFRSVUU7 Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xp c3RfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGJpbm4gKnZhbHVlKSB7Ci0rICB1bnNpZ25lZCBjaGFy ICpwbm93OwotKwotKyAgaWYgKGl0ZXIgPT0gTlVMTCB8fCBpdGVyLT5wbmV4dCA9PSBOVUxMIHx8 IGl0ZXItPnBuZXh0ID4gaXRlci0+cGxpbWl0IHx8IGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5jb3Vu dCB8fCBpdGVyLT50eXBlICE9IEJJTk5fTElTVCkgcmV0dXJuIEZBTFNFOwotKwotKyAgaXRlci0+ Y3VycmVudCsrOwotKyAgaWYgKGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5jb3VudCkgcmV0dXJuIEZB TFNFOwotKwotKyAgcG5vdyA9IGl0ZXItPnBuZXh0OwotKyAgaXRlci0+cG5leHQgPSBBZHZhbmNl RGF0YVBvcyhwbm93LCBpdGVyLT5wbGltaXQpOwotKyAgaWYgKGl0ZXItPnBuZXh0ICE9IDAgJiYg aXRlci0+cG5leHQgPCBwbm93KSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR1cm4gR2V0VmFsdWUo cG5vdywgaXRlci0+cGxpbWl0LCB2YWx1ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9yZWFkX25leHRfcGFpcihpbnQgZXhwZWN0 ZWRfdHlwZSwgYmlubl9pdGVyICppdGVyLCBpbnQgKnBpZCwgY2hhciAqcGtleSwgYmlubiAqdmFs dWUpIHsKLSsgIGludCAgaW50MzIsIGlkOwotKyAgdW5zaWduZWQgY2hhciAqcCwgKmtleTsKLSsg IHVuc2lnbmVkIHNob3J0IGxlbjsKLSsKLSsgIGlmIChpdGVyID09IE5VTEwgfHwgaXRlci0+cG5l eHQgPT0gTlVMTCB8fCBpdGVyLT5wbmV4dCA+IGl0ZXItPnBsaW1pdCB8fCBpdGVyLT5jdXJyZW50 ID4gaXRlci0+Y291bnQgfHwgaXRlci0+dHlwZSAhPSBleHBlY3RlZF90eXBlKSByZXR1cm4gRkFM U0U7Ci0rCi0rICBpdGVyLT5jdXJyZW50Kys7Ci0rICBpZiAoaXRlci0+Y3VycmVudCA+IGl0ZXIt PmNvdW50KSByZXR1cm4gRkFMU0U7Ci0rCi0rICBwID0gaXRlci0+cG5leHQ7Ci0rCi0rICBzd2l0 Y2ggKGV4cGVjdGVkX3R5cGUpIHsKLSsgICAgY2FzZSBCSU5OX01BUDoKLSsgICAgICBpbnQzMiA9 IHJlYWRfbWFwX2lkKCZwLCBpdGVyLT5wbGltaXQpOwotKyAgICAgIGlmIChwID4gaXRlci0+cGxp bWl0KSByZXR1cm4gRkFMU0U7Ci0rICAgICAgaWQgPSBpbnQzMjsKLSsgICAgICBpZiAocGlkKSAq cGlkID0gaWQ7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9PQkpFQ1Q6Ci0rICAgICAg bGVuID0gKigodW5zaWduZWQgY2hhciAqKXApOyBwKys7Ci0rICAgICAga2V5ID0gcDsKLSsgICAg ICBwICs9IGxlbjsKLSsgICAgICBpZiAocCA+IGl0ZXItPnBsaW1pdCkgcmV0dXJuIEZBTFNFOwot KyAgICAgIGlmIChwa2V5KSB7Ci0rICAgICAgICBtZW1jcHkocGtleSwga2V5LCBsZW4pOwotKyAg ICAgICAgcGtleVtsZW5dID0gMDsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICB9Ci0rCi0r ICBpdGVyLT5wbmV4dCA9IEFkdmFuY2VEYXRhUG9zKHAsIGl0ZXItPnBsaW1pdCk7Ci0rICBpZiAo aXRlci0+cG5leHQgIT0gMCAmJiBpdGVyLT5wbmV4dCA8IHApIHJldHVybiBGQUxTRTsKLSsKLSsg IHJldHVybiBHZXRWYWx1ZShwLCBpdGVyLT5wbGltaXQsIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX25leHQoYmlubl9p dGVyICppdGVyLCBpbnQgKnBpZCwgYmlubiAqdmFsdWUpIHsKLSsKLSsgIHJldHVybiBiaW5uX3Jl YWRfbmV4dF9wYWlyKEJJTk5fTUFQLCBpdGVyLCBwaWQsIE5VTEwsIHZhbHVlKTsKLSsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X25l eHQoYmlubl9pdGVyICppdGVyLCBjaGFyICpwa2V5LCBiaW5uICp2YWx1ZSkgewotKwotKyAgcmV0 dXJuIGJpbm5fcmVhZF9uZXh0X3BhaXIoQklOTl9PQkpFQ1QsIGl0ZXIsIE5VTEwsIHBrZXksIHZh bHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3RfbmV4dF92YWx1ZShiaW5uX2l0ZXIg Kml0ZXIpIHsKLSsgIGJpbm4gKnZhbHVlOwotKwotKyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21h bGxvYyhzaXplb2YoYmlubikpOwotKwotKyAgaWYgKGJpbm5fbGlzdF9uZXh0KGl0ZXIsIHZhbHVl KSA9PSBGQUxTRSkgewotKyAgICBmcmVlX2ZuKHZhbHVlKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0r ICB9Ci0rCi0rICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsKLSsgIHJldHVybiB2YWx1ZTsKLSsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9t YXBfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKSB7Ci0rICBiaW5uICp2YWx1 ZTsKLSsKLSsgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsK LSsgIGlmIChiaW5uX21hcF9uZXh0KGl0ZXIsIHBpZCwgdmFsdWUpID09IEZBTFNFKSB7Ci0rICAg IGZyZWVfZm4odmFsdWUpOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIHZhbHVlLT5h bGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsKLSsvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF9uZXh0X3ZhbHVlKGJp bm5faXRlciAqaXRlciwgY2hhciAqcGtleSkgewotKyAgYmlubiAqdmFsdWU7Ci0rCi0rICB2YWx1 ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7Ci0rCi0rICBpZiAoYmlubl9v YmplY3RfbmV4dChpdGVyLCBwa2V5LCB2YWx1ZSkgPT0gRkFMU0UpIHsKLSsgICAgZnJlZV9mbih2 YWx1ZSk7Ci0rICAgIHJldHVybiBOVUxMOwotKyAgfQotKwotKyAgdmFsdWUtPmFsbG9jYXRlZCA9 IFRSVUU7Ci0rICByZXR1cm4gdmFsdWU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X3Jl YWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKLSsgIGJp bm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9saXN0X25leHQoaXRlciwgJnZhbHVlKSA9PSBGQUxT RSkgcmV0dXJuIE5VTEw7Ci0rICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7Ci0rICBp ZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7Ci0rI2lmIEJZVEVfT1JERVIgPT0gTElUVExF X0VORElBTgotKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7Ci0rI2Vsc2UKLSsgIHJldHVy biB2YWx1ZS5wdHI7Ci0rI2VuZGlmCi0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r Ci0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGlu dCAqcGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5uIHZhbHVlOwotKwotKyAg aWYgKGJpbm5fbWFwX25leHQoaXRlciwgcGlkLCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4gTlVM TDsKLSsgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKLSsgIGlmIChwc2l6ZSkgKnBz aXplID0gdmFsdWUuc2l6ZTsKLSsjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCi0rICBy ZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKLSsjZWxzZQotKyAgcmV0dXJuIHZhbHVlLnB0cjsK LSsjZW5kaWYKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSt2b2lkICogQVBJ RU5UUlkgYmlubl9vYmplY3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSwg aW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgewotKyAgYmlubiB2YWx1ZTsKLSsKLSsgIGlmIChiaW5u X29iamVjdF9uZXh0KGl0ZXIsIHBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOwot KyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOwotKyAgaWYgKHBzaXplKSAqcHNpemUg PSB2YWx1ZS5zaXplOwotKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KLSsgIHJldHVy biBzdG9yZV92YWx1ZSgmdmFsdWUpOwotKyNlbHNlCi0rICByZXR1cm4gdmFsdWUucHRyOwotKyNl bmRpZgotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioq IEVYVEVOREVEIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqIG5vbmUgb2YgdGhlIGZ1bmN0aW9ucyBh Ym92ZSBjYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3cgKioqKioqKioqKioqKioqKioqKioqKioqKi8K LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStpbnQgQVBJRU5UUlkgYmlubl9n ZXRfd3JpdGVfc3RvcmFnZShpbnQgdHlwZSkgewotKyAgaW50IHN0b3JhZ2VfdHlwZTsKLSsKLSsg IHN3aXRjaCAodHlwZSkgewotKyAgICBjYXNlIEJJTk5fU0lOR0xFX1NUUjoKLSsgICAgY2FzZSBC SU5OX0RPVUJMRV9TVFI6Ci0rICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9TVFJJTkc7Ci0rCi0r ICAgIGNhc2UgQklOTl9CT09MOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfTk9CWVRFUzsK LSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBiaW5uX2dldF90eXBlX2luZm8odHlwZSwgJnN0b3Jh Z2VfdHlwZSwgTlVMTCk7Ci0rICAgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZTsKLSsgIH0KLSsKLSt9 Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0raW50IEFQSUVOVFJZIGJp bm5fZ2V0X3JlYWRfc3RvcmFnZShpbnQgdHlwZSkgewotKyAgaW50IHN0b3JhZ2VfdHlwZTsKLSsK LSsgIHN3aXRjaCAodHlwZSkgewotKyNpZmRlZiBCSU5OX0VYVEVOREVECi0rICAgIGNhc2UgQklO Tl9TSU5HTEVfU1RSOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfRFdPUkQ7Ci0rICAgIGNh c2UgQklOTl9ET1VCTEVfU1RSOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfUVdPUkQ7Ci0r I2VuZGlmCi0rICAgIGNhc2UgQklOTl9CT09MOgotKyAgICBjYXNlIEJJTk5fVFJVRToKLSsgICAg Y2FzZSBCSU5OX0ZBTFNFOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfRFdPUkQ7Ci0rICAg IGRlZmF1bHQ6Ci0rICAgICAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUsICZzdG9yYWdlX3R5cGUs IE5VTEwpOwotKyAgICAgIHJldHVybiBzdG9yYWdlX3R5cGU7Ci0rICB9Ci0rCi0rfQotKwotKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBCT09MIEdldFdy aXRlQ29udmVydGVkRGF0YShpbnQgKnB0eXBlLCB2b2lkICoqcHB2YWx1ZSwgaW50ICpwc2l6ZSkg ewotKyAgaW50ICB0eXBlOwotKyAgZmxvYXQgIGYxOwotKyAgZG91YmxlIGQxOwotKyAgY2hhciBw c3RyWzEyOF07Ci0rCi0rICBVTlVTRUQocHN0cik7Ci0rICBVTlVTRUQoZDEpOwotKyAgVU5VU0VE KGYxKTsKLSsKLSsgIHR5cGUgPSAqcHR5cGU7Ci0rCi0rICBpZiAoKnBwdmFsdWUgPT0gTlVMTCkg ewotKyAgICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgICBjYXNlIEJJTk5fTlVMTDoKLSsgICAgICBj YXNlIEJJTk5fVFJVRToKLSsgICAgICBjYXNlIEJJTk5fRkFMU0U6Ci0rICAgICAgICBicmVhazsK LSsgICAgICBjYXNlIEJJTk5fU1RSSU5HOgotKyAgICAgIGNhc2UgQklOTl9CTE9COgotKyAgICAg ICAgaWYgKCpwc2l6ZSA9PSAwKSBicmVhazsKLSsJLyogZmFsbCB0aHJvdWdoICovCi0rICAgICAg ZGVmYXVsdDoKLSsgICAgICAgIHJldHVybiBGQUxTRTsKLSsgICAgfQotKyAgfQotKwotKyAgc3dp dGNoICh0eXBlKSB7Ci0rI2lmZGVmIEJJTk5fRVhURU5ERUQKLSsgICAgY2FzZSBCSU5OX1NJTkdM RToKLSsgICAgICBmMSA9ICoqKGZsb2F0KiopcHB2YWx1ZTsKLSsgICAgICBkMSA9IGYxOyAgLy8g Y29udmVydCBmcm9tIGZsb2F0ICgzMmJpdHMpIHRvIGRvdWJsZSAoNjRiaXRzKQotKyAgICAgIHR5 cGUgPSBCSU5OX1NJTkdMRV9TVFI7Ci0rICAgICAgZ290byBjb252X2RvdWJsZTsKLSsgICAgY2Fz ZSBCSU5OX0RPVUJMRToKLSsgICAgICBkMSA9ICoqKGRvdWJsZSoqKXBwdmFsdWU7Ci0rICAgICAg dHlwZSA9IEJJTk5fRE9VQkxFX1NUUjsKLStjb252X2RvdWJsZToKLSsgICAgICAvLyB0aGUgJyUu MTdlJyBpcyBtb3JlIHByZWNpc2UgdGhhbiB0aGUgJyVnJwotKyAgICAgIHNucHJpbnRmKHBzdHIs IDEyNywgIiUuMTdlIiwgZDEpOwotKyAgICAgICpwcHZhbHVlID0gcHN0cjsKLSsgICAgICAqcHR5 cGUgPSB0eXBlOwotKyAgICAgIGJyZWFrOwotKyNlbmRpZgotKyAgICBjYXNlIEJJTk5fREVDSU1B TDoKLSsgICAgY2FzZSBCSU5OX0NVUlJFTkNZU1RSOgotKyAgICAgIC8qCi0rICAgICAgaWYgKGJp bm5fbWFsbG9jX2V4dHB0cigxMjgpID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsgICAgICBzbnBy aW50ZihzcHRyLCAxMjcsICIlRSIsICoqcHB2YWx1ZSk7Ci0rICAgICAgKnBwdmFsdWUgPSBzcHRy OwotKyAgICAgICovCi0rICAgICAgcmV0dXJuIFRSVUU7ICAvLyEgdGVtcG9yYXJ5Ci0rICAgICAg YnJlYWs7Ci0rCi0rICAgIGNhc2UgQklOTl9EQVRFOgotKyAgICBjYXNlIEJJTk5fREFURVRJTUU6 Ci0rICAgIGNhc2UgQklOTl9USU1FOgotKyAgICAgIHJldHVybiBUUlVFOyAgLy8hIHRlbXBvcmFy eQotKyAgICAgIGJyZWFrOwotKwotKyAgICBjYXNlIEJJTk5fQk9PTDoKLSsgICAgICBpZiAoKioo KEJPT0wqKilwcHZhbHVlKSA9PSBGQUxTRSkgewotKyAgICAgICAgdHlwZSA9IEJJTk5fRkFMU0U7 Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHR5cGUgPSBCSU5OX1RSVUU7Ci0rICAgICAgfQot KyAgICAgICpwdHlwZSA9IHR5cGU7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICB9Ci0rCi0rICByZXR1 cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r QklOTl9QUklWQVRFIGludCB0eXBlX2ZhbWlseShpbnQgdHlwZSkgIHsKLSsKLSsgIHN3aXRjaCAo dHlwZSkgewotKyAgICBjYXNlIEJJTk5fTElTVDoKLSsgICAgY2FzZSBCSU5OX01BUDoKLSsgICAg Y2FzZSBCSU5OX09CSkVDVDoKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlfQklOTjsKLSsKLSsg ICAgY2FzZSBCSU5OX0lOVDg6Ci0rICAgIGNhc2UgQklOTl9JTlQxNjoKLSsgICAgY2FzZSBCSU5O X0lOVDMyOgotKyAgICBjYXNlIEJJTk5fSU5UNjQ6Ci0rICAgIGNhc2UgQklOTl9VSU5UODoKLSsg ICAgY2FzZSBCSU5OX1VJTlQxNjoKLSsgICAgY2FzZSBCSU5OX1VJTlQzMjoKLSsgICAgY2FzZSBC SU5OX1VJTlQ2NDoKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlfSU5UOwotKwotKyAgICBjYXNl IEJJTk5fRkxPQVQzMjoKLSsgICAgY2FzZSBCSU5OX0ZMT0FUNjQ6Ci0rICAgIC8vY2FzZSBCSU5O X1NJTkdMRToKLSsgICAgY2FzZSBCSU5OX1NJTkdMRV9TVFI6Ci0rICAgIC8vY2FzZSBCSU5OX0RP VUJMRToKLSsgICAgY2FzZSBCSU5OX0RPVUJMRV9TVFI6Ci0rICAgICAgcmV0dXJuIEJJTk5fRkFN SUxZX0ZMT0FUOwotKwotKyAgICBjYXNlIEJJTk5fU1RSSU5HOgotKyAgICBjYXNlIEJJTk5fSFRN TDoKLSsgICAgY2FzZSBCSU5OX0NTUzoKLSsgICAgY2FzZSBCSU5OX1hNTDoKLSsgICAgY2FzZSBC SU5OX0pTT046Ci0rICAgIGNhc2UgQklOTl9KQVZBU0NSSVBUOgotKyAgICAgIHJldHVybiBCSU5O X0ZBTUlMWV9TVFJJTkc7Ci0rCi0rICAgIGNhc2UgQklOTl9CTE9COgotKyAgICBjYXNlIEJJTk5f SlBFRzoKLSsgICAgY2FzZSBCSU5OX0dJRjoKLSsgICAgY2FzZSBCSU5OX1BORzoKLSsgICAgY2Fz ZSBCSU5OX0JNUDoKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlfQkxPQjsKLSsKLSsgICAgY2Fz ZSBCSU5OX0RFQ0lNQUw6Ci0rICAgIGNhc2UgQklOTl9DVVJSRU5DWToKLSsgICAgY2FzZSBCSU5O X0RBVEU6Ci0rICAgIGNhc2UgQklOTl9USU1FOgotKyAgICBjYXNlIEJJTk5fREFURVRJTUU6Ci0r ICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX1NUUklORzsKLSsKLSsgICAgY2FzZSBCSU5OX0JPT0w6 Ci0rICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX0JPT0w7Ci0rCi0rICAgIGNhc2UgQklOTl9OVUxM OgotKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9OVUxMOwotKwotKyAgICBkZWZhdWx0OgotKyAg ICAgIC8vIGlmIGl0IHdhc24ndCBmb3VuZAotKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9OT05F OwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStC SU5OX1BSSVZBVEUgaW50IGludF90eXBlKGludCB0eXBlKSAgewotKwotKyAgc3dpdGNoICh0eXBl KSB7Ci0rICBjYXNlIEJJTk5fSU5UODoKLSsgIGNhc2UgQklOTl9JTlQxNjoKLSsgIGNhc2UgQklO Tl9JTlQzMjoKLSsgIGNhc2UgQklOTl9JTlQ2NDoKLSsgICAgcmV0dXJuIEJJTk5fU0lHTkVEX0lO VDsKLSsKLSsgIGNhc2UgQklOTl9VSU5UODoKLSsgIGNhc2UgQklOTl9VSU5UMTY6Ci0rICBjYXNl IEJJTk5fVUlOVDMyOgotKyAgY2FzZSBCSU5OX1VJTlQ2NDoKLSsgICAgcmV0dXJuIEJJTk5fVU5T SUdORURfSU5UOwotKwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIDA7Ci0rICB9Ci0rCi0rfQot KwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBCT09M IGNvcHlfcmF3X3ZhbHVlKGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgZGF0 YV9zdG9yZSkgewotKwotKyAgc3dpdGNoIChkYXRhX3N0b3JlKSB7Ci0rICBjYXNlIEJJTk5fU1RP UkFHRV9OT0JZVEVTOgotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6Ci0r ICAgICooKGNoYXIgKikgcGRlc3QpID0gKihjaGFyICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0r ICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgotKyAgICAqKChzaG9ydCAqKSBwZGVzdCkgPSAqKHNo b3J0ICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9EV09SRDoK LSsgICAgKigoaW50ICopIHBkZXN0KSA9ICooaW50ICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0r ICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgKigodWludDY0ICopIHBkZXN0KSA9ICoo dWludDY0ICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9C OgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09O VEFJTkVSOgotKyAgICAqKChjaGFyICoqKSBwZGVzdCkgPSAoY2hhciAqKXBzb3VyY2U7Ci0rICAg IGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAgfQotKwotKyAgcmV0 dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwot K0JJTk5fUFJJVkFURSBCT09MIGNvcHlfaW50X3ZhbHVlKGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZv aWQgKnBkZXN0LCBpbnQgc291cmNlX3R5cGUsIGludCBkZXN0X3R5cGUpIHsKLSsgIHVpbnQ2NCB2 dWludDY0ID0gMDsgaW50NjQgdmludDY0ID0gMDsKLSsKLSsgIHN3aXRjaCAoc291cmNlX3R5cGUp IHsKLSsgIGNhc2UgQklOTl9JTlQ4OgotKyAgICB2aW50NjQgPSAqKHNpZ25lZCBjaGFyICopcHNv dXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fSU5UMTY6Ci0rICAgIHZpbnQ2NCA9ICoo c2hvcnQgKilwc291cmNlOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9JTlQzMjoKLSsgICAg dmludDY0ID0gKihpbnQgKilwc291cmNlOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9JTlQ2 NDoKLSsgICAgdmludDY0ID0gKihpbnQ2NCAqKXBzb3VyY2U7Ci0rICAgIGJyZWFrOwotKwotKyAg Y2FzZSBCSU5OX1VJTlQ4OgotKyAgICB2dWludDY0ID0gKih1bnNpZ25lZCBjaGFyICopcHNvdXJj ZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fVUlOVDE2OgotKyAgICB2dWludDY0ID0gKih1 bnNpZ25lZCBzaG9ydCAqKXBzb3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1VJTlQz MjoKLSsgICAgdnVpbnQ2NCA9ICoodW5zaWduZWQgaW50ICopcHNvdXJjZTsKLSsgICAgYnJlYWs7 Ci0rICBjYXNlIEJJTk5fVUlOVDY0OgotKyAgICB2dWludDY0ID0gKih1aW50NjQgKilwc291cmNl OwotKyAgICBicmVhazsKLSsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiBGQUxTRTsKLSsgIH0K LSsKLSsKLSsgIC8vIGNvcHkgZnJvbSBpbnQ2NCB0byB1aW50NjQsIGlmIHBvc3NpYmxlCi0rCi0r ICBpZiAoaW50X3R5cGUoc291cmNlX3R5cGUpID09IEJJTk5fVU5TSUdORURfSU5UICYmIGludF90 eXBlKGRlc3RfdHlwZSkgPT0gQklOTl9TSUdORURfSU5UKSB7Ci0rICAgIGlmICh2dWludDY0ID4g SU5UNjRfTUFYKSByZXR1cm4gRkFMU0U7Ci0rICAgIHZpbnQ2NCA9IHZ1aW50NjQ7Ci0rICB9IGVs c2UgaWYgKGludF90eXBlKHNvdXJjZV90eXBlKSA9PSBCSU5OX1NJR05FRF9JTlQgJiYgaW50X3R5 cGUoZGVzdF90eXBlKSA9PSBCSU5OX1VOU0lHTkVEX0lOVCkgewotKyAgICBpZiAodmludDY0IDwg MCkgcmV0dXJuIEZBTFNFOwotKyAgICB2dWludDY0ID0gdmludDY0OwotKyAgfQotKwotKwotKyAg c3dpdGNoIChkZXN0X3R5cGUpIHsKLSsgIGNhc2UgQklOTl9JTlQ4OgotKyAgICBpZiAodmludDY0 IDwgSU5UOF9NSU4gfHwgdmludDY0ID4gSU5UOF9NQVgpIHJldHVybiBGQUxTRTsKLSsgICAgKihz aWduZWQgY2hhciAqKXBkZXN0ID0gKHNpZ25lZCBjaGFyKSB2aW50NjQ7Ci0rICAgIGJyZWFrOwot KyAgY2FzZSBCSU5OX0lOVDE2OgotKyAgICBpZiAodmludDY0IDwgSU5UMTZfTUlOIHx8IHZpbnQ2 NCA+IElOVDE2X01BWCkgcmV0dXJuIEZBTFNFOwotKyAgICAqKHNob3J0ICopcGRlc3QgPSAoc2hv cnQpIHZpbnQ2NDsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fSU5UMzI6Ci0rICAgIGlmICh2 aW50NjQgPCBJTlQzMl9NSU4gfHwgdmludDY0ID4gSU5UMzJfTUFYKSByZXR1cm4gRkFMU0U7Ci0r ICAgICooaW50ICopcGRlc3QgPSAoaW50KSB2aW50NjQ7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBC SU5OX0lOVDY0OgotKyAgICAqKGludDY0ICopcGRlc3QgPSB2aW50NjQ7Ci0rICAgIGJyZWFrOwot KwotKyAgY2FzZSBCSU5OX1VJTlQ4OgotKyAgICBpZiAodnVpbnQ2NCA+IFVJTlQ4X01BWCkgcmV0 dXJuIEZBTFNFOwotKyAgICAqKHVuc2lnbmVkIGNoYXIgKilwZGVzdCA9ICh1bnNpZ25lZCBjaGFy KSB2dWludDY0OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9VSU5UMTY6Ci0rICAgIGlmICh2 dWludDY0ID4gVUlOVDE2X01BWCkgcmV0dXJuIEZBTFNFOwotKyAgICAqKHVuc2lnbmVkIHNob3J0 ICopcGRlc3QgPSAodW5zaWduZWQgc2hvcnQpIHZ1aW50NjQ7Ci0rICAgIGJyZWFrOwotKyAgY2Fz ZSBCSU5OX1VJTlQzMjoKLSsgICAgaWYgKHZ1aW50NjQgPiBVSU5UMzJfTUFYKSByZXR1cm4gRkFM U0U7Ci0rICAgICoodW5zaWduZWQgaW50ICopcGRlc3QgPSAodW5zaWduZWQgaW50KSB2dWludDY0 OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9VSU5UNjQ6Ci0rICAgICoodWludDY0ICopcGRl c3QgPSB2dWludDY0OwotKyAgICBicmVhazsKLSsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiBG QUxTRTsKLSsgIH0KLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9PTCBjb3B5X2Zsb2F0X3ZhbHVl KGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291cmNlX3R5cGUsIGludCBk ZXN0X3R5cGUpIHsKLSsKLSsgIHN3aXRjaCAoc291cmNlX3R5cGUpIHsKLSsgIGNhc2UgQklOTl9G TE9BVDMyOgotKyAgICAqKGRvdWJsZSAqKXBkZXN0ID0gKihmbG9hdCAqKXBzb3VyY2U7Ci0rICAg IGJyZWFrOwotKyAgY2FzZSBCSU5OX0ZMT0FUNjQ6Ci0rICAgICooZmxvYXQgKilwZGVzdCA9IChm bG9hdCkgKihkb3VibGUgKilwc291cmNlOwotKyAgICBicmVhazsKLSsgIGRlZmF1bHQ6Ci0rICAg IHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdm9pZCB6ZXJvX3Zh bHVlKGNvbnN0IHZvaWQgKnB2YWx1ZSwgaW50IHR5cGUpIHsKLSsgIC8vaW50IHNpemU9MDsKLSsK LSsgIHN3aXRjaCAoYmlubl9nZXRfcmVhZF9zdG9yYWdlKHR5cGUpKSB7Ci0rICBjYXNlIEJJTk5f U1RPUkFHRV9OT0JZVEVTOgotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6 Ci0rICAgICooKGNoYXIgKikgcHZhbHVlKSA9IDA7Ci0rICAgIC8vc2l6ZT0xOwotKyAgICBicmVh azsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6Ci0rICAgICooKHNob3J0ICopIHB2YWx1ZSkg PSAwOwotKyAgICAvL3NpemU9MjsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9E V09SRDoKLSsgICAgKigoaW50ICopIHB2YWx1ZSkgPSAwOwotKyAgICAvL3NpemU9NDsKLSsgICAg YnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgKigodWludDY0ICopIHB2 YWx1ZSkgPSAwOwotKyAgICAvL3NpemU9ODsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RP UkFHRV9CTE9COgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAgY2FzZSBCSU5OX1NU T1JBR0VfQ09OVEFJTkVSOgotKyAgICAqKGNoYXIgKiopcHZhbHVlID0gTlVMTDsKLSsgICAgYnJl YWs7Ci0rICB9Ci0rCi0rICAvL2lmIChzaXplPjApIG1lbXNldChwdmFsdWUsIDAsIHNpemUpOwot KwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZB VEUgQk9PTCBjb3B5X3ZhbHVlKHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291cmNl X3R5cGUsIGludCBkZXN0X3R5cGUsIGludCBkYXRhX3N0b3JlKSB7Ci0rCi0rICBpZiAodHlwZV9m YW1pbHkoc291cmNlX3R5cGUpICE9IHR5cGVfZmFtaWx5KGRlc3RfdHlwZSkpIHJldHVybiBGQUxT RTsKLSsKLSsgIGlmICh0eXBlX2ZhbWlseShzb3VyY2VfdHlwZSkgPT0gQklOTl9GQU1JTFlfSU5U ICYmIHNvdXJjZV90eXBlICE9IGRlc3RfdHlwZSkgewotKyAgICByZXR1cm4gY29weV9pbnRfdmFs dWUocHNvdXJjZSwgcGRlc3QsIHNvdXJjZV90eXBlLCBkZXN0X3R5cGUpOwotKyAgfSBlbHNlIGlm ICh0eXBlX2ZhbWlseShzb3VyY2VfdHlwZSkgPT0gQklOTl9GQU1JTFlfRkxPQVQgJiYgc291cmNl X3R5cGUgIT0gZGVzdF90eXBlKSB7Ci0rICAgIHJldHVybiBjb3B5X2Zsb2F0X3ZhbHVlKHBzb3Vy Y2UsIHBkZXN0LCBzb3VyY2VfdHlwZSwgZGVzdF90eXBlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIHJl dHVybiBjb3B5X3Jhd192YWx1ZShwc291cmNlLCBwZGVzdCwgZGF0YV9zdG9yZSk7Ci0rICB9Ci0r Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKiogV1JJVEUgRlVO Q1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JP T0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZChiaW5uICpsaXN0LCBpbnQgdHlwZSwgdm9pZCAqcHZh bHVlLCBpbnQgc2l6ZSkgewotKwotKyAgaWYgKEdldFdyaXRlQ29udmVydGVkRGF0YSgmdHlwZSwg JnB2YWx1ZSwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR1cm4gYmlu bl9saXN0X2FkZF9yYXcobGlzdCwgdHlwZSwgcHZhbHVlLCBzaXplKTsKLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX21hcF9z ZXQoYmlubiAqbWFwLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7 Ci0rCi0rICBpZiAoR2V0V3JpdGVDb252ZXJ0ZWREYXRhKCZ0eXBlLCAmcHZhbHVlLCAmc2l6ZSkg PT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHVybiBiaW5uX21hcF9zZXRfcmF3KG1h cCwgaWQsIHR5cGUsIHB2YWx1ZSwgc2l6ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0KGJpbm4gKm9i aiwgY29uc3QgY2hhciAqa2V5LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgewot KwotKyAgaWYgKEdldFdyaXRlQ29udmVydGVkRGF0YSgmdHlwZSwgJnB2YWx1ZSwgJnNpemUpID09 IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0X3Jhdyhv YmosIGtleSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rLy8gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSB3cmFw cGVycwotK0JPT0wgQVBJRU5UUlkgYmlubl9hZGRfdmFsdWUoYmlubiAqaXRlbSwgaW50IGJpbm5f dHlwZSwgaW50IGlkLCBjaGFyICpuYW1lLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6 ZSkgewotKwotKyAgc3dpdGNoIChiaW5uX3R5cGUpIHsKLSsgICAgY2FzZSBCSU5OX0xJU1Q6Ci0r ICAgICAgcmV0dXJuIGJpbm5fbGlzdF9hZGQoaXRlbSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKLSsg ICAgY2FzZSBCSU5OX01BUDoKLSsgICAgICByZXR1cm4gYmlubl9tYXBfc2V0KGl0ZW0sIGlkLCB0 eXBlLCBwdmFsdWUsIHNpemUpOwotKyAgICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICAgIHJldHVy biBiaW5uX29iamVjdF9zZXQoaXRlbSwgbmFtZSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKLSsgICAg ZGVmYXVsdDoKLSsgICAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rfQotKwotKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlzdCwgYmlubiAqdmFs dWUpIHsKLSsgIEJPT0wgcmV0dmFsOwotKwotKyAgcmV0dmFsID0gYmlubl9saXN0X2FkZF92YWx1 ZShsaXN0LCB2YWx1ZSk7Ci0rICBpZiAodmFsdWUpIGZyZWVfZm4odmFsdWUpOwotKyAgcmV0dXJu IHJldHZhbDsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r Qk9PTCBBUElFTlRSWSBiaW5uX21hcF9zZXRfbmV3KGJpbm4gKm1hcCwgaW50IGlkLCBiaW5uICp2 YWx1ZSkgewotKyAgQk9PTCByZXR2YWw7Ci0rCi0rICByZXR2YWwgPSBiaW5uX21hcF9zZXRfdmFs dWUobWFwLCBpZCwgdmFsdWUpOwotKyAgaWYgKHZhbHVlKSBmcmVlX2ZuKHZhbHVlKTsKLSsgIHJl dHVybiByZXR2YWw7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0X25ldyhiaW5uICpvYmosIGNvbnN0IGNo YXIgKmtleSwgYmlubiAqdmFsdWUpIHsKLSsgIEJPT0wgcmV0dmFsOwotKwotKyAgcmV0dmFsID0g Ymlubl9vYmplY3Rfc2V0X3ZhbHVlKG9iaiwga2V5LCB2YWx1ZSk7Ci0rICBpZiAodmFsdWUpIGZy ZWVfZm4odmFsdWUpOwotKyAgcmV0dXJuIHJldHZhbDsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rLyoqKiBSRUFEIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbGlz dF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGludCBwb3MpIHsKLSsgIGJpbm4gKnZhbHVlOwotKwot KyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOwotKwotKyAgaWYg KGJpbm5fbGlzdF9nZXRfdmFsdWUocHRyLCBwb3MsIHZhbHVlKSA9PSBGQUxTRSkgewotKyAgICBm cmVlX2ZuKHZhbHVlKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICB2YWx1ZS0+YWxs b2NhdGVkID0gVFJVRTsKLSsgIHJldHVybiB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3ZhbHVlKGNv bnN0IHZvaWQgKnB0ciwgaW50IGlkKSB7Ci0rICBiaW5uICp2YWx1ZTsKLSsKLSsgIHZhbHVlID0g KGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX21hcF9n ZXRfdmFsdWUocHRyLCBpZCwgdmFsdWUpID09IEZBTFNFKSB7Ci0rICAgIGZyZWVfZm4odmFsdWUp OwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVF OwotKyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfdmFsdWUoY29uc3Qgdm9pZCAq cHRyLCBjb25zdCBjaGFyICprZXkpIHsKLSsgIGJpbm4gKnZhbHVlOwotKwotKyAgdmFsdWUgPSAo YmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOwotKwotKyAgaWYgKGJpbm5fb2JqZWN0 X2dldF92YWx1ZShwdHIsIGtleSwgdmFsdWUpID09IEZBTFNFKSB7Ci0rICAgIGZyZWVfZm4odmFs dWUpOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIHZhbHVlLT5hbGxvY2F0ZWQgPSBU UlVFOwotKyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9yZWFk KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKLSsg IGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9saXN0X2dldF92YWx1ZShsaXN0LCBwb3MsICZ2 YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOwotKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1 ZS50eXBlOwotKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwotKyNpZiBCWVRFX09S REVSID09IExJVFRMRV9FTkRJQU4KLSsgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOwotKyNl bHNlCi0rICByZXR1cm4gdmFsdWUucHRyOwotKyNlbmRpZgotKwotK30KLSsKLSsvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9yZWFkKGNvbnN0IHZvaWQg Km1hcCwgaW50IGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5uIHZhbHVlOwot KwotKyAgaWYgKGJpbm5fbWFwX2dldF92YWx1ZShtYXAsIGlkLCAmdmFsdWUpID09IEZBTFNFKSBy ZXR1cm4gTlVMTDsKLSsgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKLSsgIGlmIChw c2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5E SUFOCi0rICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKLSsjZWxzZQotKyAgcmV0dXJuIHZh bHVlLnB0cjsKLSsjZW5kaWYKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSt2 b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgewotKyAgYmlubiB2YWx1ZTsKLSsKLSsg IGlmIChiaW5uX29iamVjdF9nZXRfdmFsdWUob2JqLCBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJl dHVybiBOVUxMOwotKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOwotKyAgaWYgKHBz aXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwotKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJ QU4KLSsgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOwotKyNlbHNlCi0rICByZXR1cm4gdmFs dWUucHRyOwotKyNlbmRpZgotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0KGNvbnN0IHZv aWQgKnB0ciwgaW50IHBvcywgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSkgewot KyAgYmlubiB2YWx1ZTsKLSsgIGludCBzdG9yYWdlX3R5cGU7Ci0rCi0rICBzdG9yYWdlX3R5cGUg PSBiaW5uX2dldF9yZWFkX3N0b3JhZ2UodHlwZSk7Ci0rICBpZiAoc3RvcmFnZV90eXBlICE9IEJJ Tk5fU1RPUkFHRV9OT0JZVEVTICYmIHB2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0r ICB6ZXJvX3ZhbHVlKHB2YWx1ZSwgdHlwZSk7Ci0rCi0rICBpZiAoYmlubl9saXN0X2dldF92YWx1 ZShwdHIsIHBvcywgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKGNv cHlfdmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlw ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFs dWUuc2l6ZTsKLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0KGNvbnN0IHZvaWQgKnB0ciwgaW50 IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5uIHZhbHVl OwotKyAgaW50IHN0b3JhZ2VfdHlwZTsKLSsKLSsgIHN0b3JhZ2VfdHlwZSA9IGJpbm5fZ2V0X3Jl YWRfc3RvcmFnZSh0eXBlKTsKLSsgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklOTl9TVE9SQUdFX05P QllURVMgJiYgcHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIHplcm9fdmFsdWUo cHZhbHVlLCB0eXBlKTsKLSsKLSsgIGlmIChiaW5uX21hcF9nZXRfdmFsdWUocHRyLCBpZCwgJnZh bHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKGNvcHlfdmFsdWUodmFsdWUu cHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJl dHVybiBGQUxTRTsKLSsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsKLSsg IHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKy8vICAg aWYgKGJpbm5fb2JqZWN0X2dldChvYmosICJtdWx0aXBsaWVyIiwgQklOTl9JTlQzMiwgJm11bHRp cGxpZXIsIE5VTEwpID09IEZBTFNFKSB4eHg7Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX29iamVj dF9nZXQoY29uc3Qgdm9pZCAqcHRyLCBjb25zdCBjaGFyICprZXksIGludCB0eXBlLCB2b2lkICpw dmFsdWUsIGludCAqcHNpemUpIHsKLSsgIGJpbm4gdmFsdWU7Ci0rICBpbnQgc3RvcmFnZV90eXBl OwotKwotKyAgc3RvcmFnZV90eXBlID0gYmlubl9nZXRfcmVhZF9zdG9yYWdlKHR5cGUpOwotKyAg aWYgKHN0b3JhZ2VfdHlwZSAhPSBCSU5OX1NUT1JBR0VfTk9CWVRFUyAmJiBwdmFsdWUgPT0gTlVM TCkgcmV0dXJuIEZBTFNFOwotKwotKyAgemVyb192YWx1ZShwdmFsdWUsIHR5cGUpOwotKwotKyAg aWYgKGJpbm5fb2JqZWN0X2dldF92YWx1ZShwdHIsIGtleSwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0 dXJuIEZBTFNFOwotKwotKyAgaWYgKGNvcHlfdmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZhbHVl LnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsg IGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsKLSsgIHJldHVybiBUUlVFOwotKwot K30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r Ly8gdGhlc2UgZnVuY3Rpb25zIGJlbG93IG1heSBub3QgYmUgaW1wbGVtZW50ZWQgYXMgaW5saW5l IGZ1bmN0aW9ucywgYmVjYXVzZQotKy8vIHRoZXkgdXNlIGEgbG90IG9mIHNwYWNlLCBldmVuIGZv ciB0aGUgdmFyaWFibGUuIHNvIHRoZXkgd2lsbCBiZSBleHBvcnRlZC4KLSsKLSsvLyBidXQgd2hh dCBhYm91dCB1c2luZyBhcyBzdGF0aWM/Ci0rLy8gICAgaXMgdGhlcmUgYW55IHByb2JsZW0gd2l0 aCB3cmFwcGVycz8gY2FuIHRoZXNlIHdyYXBwZXJzIGltcGxlbWVudCB0aGVzZSBmdW5jdGlvbnMg dXNpbmcgdGhlIGhlYWRlcj8KLSsvLyAgICBpZiBhcyBzdGF0aWMsIHdpbGwgdGhleSBiZSBwcmVz ZW50IGV2ZW4gb24gbW9kdWxlcyB0aGF0IGRvbid0IHVzZSB0aGUgZnVuY3Rpb25zPwotKwotK3Np Z25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MpIHsKLSsgIHNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBw b3MsIEJJTk5fSU5UOCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0r Ci0rc2hvcnQgQVBJRU5UUlkgYmlubl9saXN0X2ludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MpIHsKLSsgIHNob3J0IHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJ Tk5fSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2lu dCBBUElFTlRSWSBiaW5uX2xpc3RfaW50MzIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewot KyAgaW50IHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UMzIs ICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2ludDY0IEFQSUVO VFJZIGJpbm5fbGlzdF9pbnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0rICBpbnQ2 NCB2YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDY0LCAmdmFs dWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt1bnNpZ25lZCBjaGFyIEFQ SUVOVFJZIGJpbm5fbGlzdF91aW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0rICB1 bnNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5f VUlOVDgsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Vuc2ln bmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50 IHBvcykgewotKyAgdW5zaWduZWQgc2hvcnQgdmFsdWU7Ci0rCi0rICBiaW5uX2xpc3RfZ2V0KGxp c3QsIHBvcywgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7 Ci0rfQotKwotK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX2xpc3RfdWludDMyKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIHVuc2lnbmVkIGludCB2YWx1ZTsKLSsKLSsgIGJpbm5f bGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJl dHVybiB2YWx1ZTsKLSt9Ci0rCi0rdWludDY0IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50NjQoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgdWludDY0IHZhbHVlOwotKwotKyAgYmlubl9s aXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0 dXJuIHZhbHVlOwotK30KLSsKLStmbG9hdCBBUElFTlRSWSBiaW5uX2xpc3RfZmxvYXQoY29uc3Qg dm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgZmxvYXQgdmFsdWU7Ci0rCi0rICBiaW5uX2xpc3Rf Z2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJu IHZhbHVlOwotK30KLSsKLStkb3VibGUgQVBJRU5UUlkgYmlubl9saXN0X2RvdWJsZShjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0rICBkb3VibGUgdmFsdWU7Ci0rCi0rICBiaW5uX2xpc3Rf Z2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJu IHZhbHVlOwotK30KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9ib29sKGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpIHsKLSsgIEJPT0wgdmFsdWUgPSBUUlVFOwotKwotKyAgYmlubl9saXN0 X2dldChsaXN0LCBwb3MsIEJJTk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2 YWx1ZTsKLSt9Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfbnVsbChjb25zdCB2b2lkICps aXN0LCBpbnQgcG9zKSB7Ci0rCi0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJ Tk5fTlVMTCwgTlVMTCwgTlVMTCk7Ci0rCi0rfQotKwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX2xp c3Rfc3RyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIGNoYXIgKnZhbHVlOwotKwot KyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fU1RSSU5HLCAmdmFsdWUsIE5VTEwpOwot KwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X2Js b2IoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwc2l6ZSkgewotKyAgdm9pZCAqdmFs dWU7Ci0rCi0rICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9CTE9CLCAmdmFsdWUsIHBz aXplKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5f bGlzdF9saXN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIHZvaWQgKnZhbHVlOwot KwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTElTVCwgJnZhbHVlLCBOVUxMKTsK LSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9t YXAoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBi aW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9NQVAsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICBy ZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3Rfb2JqZWN0KGNv bnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9s aXN0X2dldChsaXN0LCBwb3MsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0 dXJuIHZhbHVlOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK3NpZ25lZCBjaGFy IEFQSUVOVFJZIGJpbm5fbWFwX2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHNp Z25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UOCwg JnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rc2hvcnQgQVBJRU5U UlkgYmlubl9tYXBfaW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHNob3J0IHZh bHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMTYsICZ2YWx1ZSwgTlVM TCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2ludCBBUElFTlRSWSBiaW5uX21hcF9p bnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKyAgaW50IHZhbHVlOwotKwotKyAgYmlu bl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1 cm4gdmFsdWU7Ci0rfQotKwotK2ludDY0IEFQSUVOVFJZIGJpbm5fbWFwX2ludDY0KGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkKSB7Ci0rICBpbnQ2NCB2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dldCht YXAsIGlkLCBCSU5OX0lOVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwot K30KLSsKLSt1bnNpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ4KGNvbnN0IHZvaWQg Km1hcCwgaW50IGlkKSB7Ci0rICB1bnNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9tYXBf Z2V0KG1hcCwgaWQsIEJJTk5fVUlOVDgsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFs dWU7Ci0rfQotKwotK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQxNihjb25z dCB2b2lkICptYXAsIGludCBpZCkgewotKyAgdW5zaWduZWQgc2hvcnQgdmFsdWU7Ci0rCi0rICBi aW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICBy ZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX21hcF91aW50 MzIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHVuc2lnbmVkIGludCB2YWx1ZTsKLSsK LSsgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxMKTsKLSsK LSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdWludDY0IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ2 NChjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKyAgdWludDY0IHZhbHVlOwotKwotKyAgYmlu bl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0 dXJuIHZhbHVlOwotK30KLSsKLStmbG9hdCBBUElFTlRSWSBiaW5uX21hcF9mbG9hdChjb25zdCB2 b2lkICptYXAsIGludCBpZCkgewotKyAgZmxvYXQgdmFsdWU7Ci0rCi0rICBiaW5uX21hcF9nZXQo bWFwLCBpZCwgQklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVl OwotK30KLSsKLStkb3VibGUgQVBJRU5UUlkgYmlubl9tYXBfZG91YmxlKGNvbnN0IHZvaWQgKm1h cCwgaW50IGlkKSB7Ci0rICBkb3VibGUgdmFsdWU7Ci0rCi0rICBiaW5uX21hcF9nZXQobWFwLCBp ZCwgQklOTl9GTE9BVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30K LSsKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2Jvb2woY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQp IHsKLSsgIEJPT0wgdmFsdWUgPSBUUlVFOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJ Tk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rQk9P TCBBUElFTlRSWSBiaW5uX21hcF9udWxsKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rCi0r ICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTlVMTCwgTlVMTCwgTlVMTCk7Ci0r Ci0rfQotKwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX21hcF9zdHIoY29uc3Qgdm9pZCAqbWFwLCBp bnQgaWQpIHsKLSsgIGNoYXIgKnZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJ Tk5fU1RSSU5HLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt2 b2lkICogQVBJRU5UUlkgYmlubl9tYXBfYmxvYihjb25zdCB2b2lkICptYXAsIGludCBpZCwgaW50 ICpwc2l6ZSkgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX21hcF9nZXQobWFwLCBpZCwg QklOTl9CTE9CLCAmdmFsdWUsIHBzaXplKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0r dm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX2xpc3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsK LSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTElTVCwg JnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVO VFJZIGJpbm5fbWFwX21hcChjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKyAgdm9pZCAqdmFs dWU7Ci0rCi0rICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9NQVAsICZ2YWx1ZSwgTlVMTCk7 Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9v YmplY3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAg Ymlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwpOwotKwotKyAg cmV0dXJuIHZhbHVlOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK3NpZ25lZCBj aGFyIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDgoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFy ICprZXkpIHsKLSsgIHNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9i aiwga2V5LCBCSU5OX0lOVDgsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0r fQotKwotK3Nob3J0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDE2KGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5KSB7Ci0rICBzaG9ydCB2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dl dChvYmosIGtleSwgQklOTl9JTlQxNiwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1 ZTsKLSt9Ci0rCi0raW50IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDMyKGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICBpbnQgdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9n ZXQob2JqLCBrZXksIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFs dWU7Ci0rfQotKwotK2ludDY0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0KGNvbnN0IHZvaWQg Km9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICBpbnQ2NCB2YWx1ZTsKLSsKLSsgIGJpbm5fb2Jq ZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVy biB2YWx1ZTsKLSt9Ci0rCi0rdW5zaWduZWQgY2hhciBBUElFTlRSWSBiaW5uX29iamVjdF91aW50 OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgdW5zaWduZWQgY2hhciB2 YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UOCwgJnZhbHVl LCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdW5zaWduZWQgc2hvcnQgQVBJ RU5UUlkgYmlubl9vYmplY3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 KSB7Ci0rICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmos IGtleSwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0r fQotKwotK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX29iamVjdF91aW50MzIoY29uc3Qgdm9p ZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKLSsgIHVuc2lnbmVkIGludCB2YWx1ZTsKLSsKLSsg IGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgTlVMTCk7Ci0r Ci0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3VpbnQ2NCBBUElFTlRSWSBiaW5uX29iamVjdF91 aW50NjQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKLSsgIHVpbnQ2NCB2YWx1 ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UNjQsICZ2YWx1ZSwg TlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2Zsb2F0IEFQSUVOVFJZIGJpbm5f b2JqZWN0X2Zsb2F0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICBmbG9h dCB2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9GTE9BVDMyLCAm dmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStkb3VibGUgQVBJRU5U UlkgYmlubl9vYmplY3RfZG91YmxlKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7 Ci0rICBkb3VibGUgdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5f RkxPQVQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rQk9P TCBBUElFTlRSWSBiaW5uX29iamVjdF9ib29sKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAq a2V5KSB7Ci0rICBCT09MIHZhbHVlID0gVFJVRTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmos IGtleSwgQklOTl9CT09MLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30K LSsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X251bGwoY29uc3Qgdm9pZCAqb2JqLCBjb25z dCBjaGFyICprZXkpIHsKLSsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJ Tk5fTlVMTCwgTlVMTCwgTlVMTCk7Ci0rCi0rfQotKwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX29i amVjdF9zdHIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKLSsgIGNoYXIgKnZh bHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgJnZhbHVl LCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVOVFJZIGJp bm5fb2JqZWN0X2Jsb2IoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGludCAqcHNp emUpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBC SU5OX0JMT0IsICZ2YWx1ZSwgcHNpemUpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt2 b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfbGlzdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSkgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2JqLCBr ZXksIEJJTk5fTElTVCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0r Ci0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X21hcChjb25zdCB2b2lkICpvYmosIGNvbnN0 IGNoYXIgKmtleSkgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2Jq LCBrZXksIEJJTk5fTUFQLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30K LSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3Rfb2JqZWN0KGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5KSB7Ci0rICB2b2lkICp2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dl dChvYmosIGtleSwgQklOTl9PQkpFQ1QsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFs dWU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBiaW5uICogYmlubl9hbGxvY19p dGVtKCkgewotKyAgYmlubiAqaXRlbTsKLSsgIGl0ZW0gPSAoYmlubiAqKSBiaW5uX21hbGxvYyhz aXplb2YoYmlubikpOwotKyAgaWYgKGl0ZW0pIHsKLSsgICAgbWVtc2V0KGl0ZW0sIDAsIHNpemVv ZihiaW5uKSk7Ci0rICAgIGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7Ci0rICAgIGl0ZW0tPmFs bG9jYXRlZCA9IFRSVUU7Ci0rICAgIC8vaXRlbS0+d3JpdGFibGUgPSBGQUxTRTsgIC0tIGFscmVh ZHkgemVyb2VkCi0rICB9Ci0rICByZXR1cm4gaXRlbTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fdmFsdWUoaW50IHR5cGUs IHZvaWQgKnB2YWx1ZSwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgZnJlZWZuKSB7Ci0rICBpbnQg c3RvcmFnZV90eXBlOwotKyAgYmlubiAqaXRlbSA9IGJpbm5fYWxsb2NfaXRlbSgpOwotKyAgaWYg KGl0ZW0pIHsKLSsgICAgaXRlbS0+dHlwZSA9IHR5cGU7Ci0rICAgIGJpbm5fZ2V0X3R5cGVfaW5m byh0eXBlLCAmc3RvcmFnZV90eXBlLCBOVUxMKTsKLSsgICAgc3dpdGNoIChzdG9yYWdlX3R5cGUp IHsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAgICAgIGlmIChzaXplID09IDApIHNpemUgPSBz dHJsZW4oKGNoYXIqKXB2YWx1ZSkgKyAxOwotKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotKyAg ICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlO RVI6Ci0rICAgICAgaWYgKGZyZWVmbiA9PSBCSU5OX1RSQU5TSUVOVCkgewotKyAgICAgICAgaXRl bS0+cHRyID0gYmlubl9tZW1kdXAocHZhbHVlLCBzaXplKTsKLSsgICAgICAgIGlmIChpdGVtLT5w dHIgPT0gTlVMTCkgewotKyAgICAgICAgICBmcmVlX2ZuKGl0ZW0pOwotKyAgICAgICAgICByZXR1 cm4gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAgIGl0ZW0tPmZyZWVmbiA9IGZyZWVfZm47Ci0r ICAgICAgICBpZiAoc3RvcmFnZV90eXBlID09IEJJTk5fU1RPUkFHRV9TVFJJTkcpIHNpemUtLTsK LSsgICAgICB9IGVsc2UgewotKyAgICAgICAgaXRlbS0+cHRyID0gcHZhbHVlOwotKyAgICAgICAg aXRlbS0+ZnJlZWZuID0gZnJlZWZuOwotKyAgICAgIH0KLSsgICAgICBpdGVtLT5zaXplID0gc2l6 ZTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBpdGVtLT5wdHIgPSAmaXRl bS0+dmludDMyOwotKyAgICAgIGNvcHlfcmF3X3ZhbHVlKHB2YWx1ZSwgaXRlbS0+cHRyLCBzdG9y YWdlX3R5cGUpOwotKyAgICB9Ci0rICB9Ci0rICByZXR1cm4gaXRlbTsKLSt9Ci0rCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX3NldF9zdHJp bmcoYmlubiAqaXRlbSwgY2hhciAqc3RyLCBiaW5uX21lbV9mcmVlIHBmcmVlKSB7Ci0rCi0rICBp ZiAoaXRlbSA9PSBOVUxMIHx8IHN0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAo cGZyZWUgPT0gQklOTl9UUkFOU0lFTlQpIHsKLSsgICAgaXRlbS0+cHRyID0gYmlubl9tZW1kdXAo c3RyLCBzdHJsZW4oc3RyKSArIDEpOwotKyAgICBpZiAoaXRlbS0+cHRyID09IE5VTEwpIHJldHVy biBGQUxTRTsKLSsgICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKLSsgIH0gZWxzZSB7Ci0rICAg IGl0ZW0tPnB0ciA9IHN0cjsKLSsgICAgaXRlbS0+ZnJlZWZuID0gcGZyZWU7Ci0rICB9Ci0rCi0r ICBpdGVtLT50eXBlID0gQklOTl9TVFJJTkc7Ci0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX3Nl dF9ibG9iKGJpbm4gKml0ZW0sIHZvaWQgKnB0ciwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgcGZy ZWUpIHsKLSsKLSsgIGlmIChpdGVtID09IE5VTEwgfHwgcHRyID09IE5VTEwpIHJldHVybiBGQUxT RTsKLSsKLSsgIGlmIChwZnJlZSA9PSBCSU5OX1RSQU5TSUVOVCkgewotKyAgICBpdGVtLT5wdHIg PSBiaW5uX21lbWR1cChwdHIsIHNpemUpOwotKyAgICBpZiAoaXRlbS0+cHRyID09IE5VTEwpIHJl dHVybiBGQUxTRTsKLSsgICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKLSsgIH0gZWxzZSB7Ci0r ICAgIGl0ZW0tPnB0ciA9IHB0cjsKLSsgICAgaXRlbS0+ZnJlZWZuID0gcGZyZWU7Ci0rICB9Ci0r Ci0rICBpdGVtLT50eXBlID0gQklOTl9CTE9COwotKyAgaXRlbS0+c2l6ZSA9IHNpemU7Ci0rICBy ZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r LyoqKiBSRUFEIENPTlZFUlRFRCBWQUxVRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rI2lmZGVmIF9NU0NfVkVSCi0rI2RlZmluZSBhdG9pNjQgX2F0b2k2NAotKyNl bHNlCi0raW50NjQgYXRvaTY0KGNoYXIgKnN0cikgewotKyAgaW50NjQgcmV0dmFsOwotKyAgaW50 IGlzX25lZ2F0aXZlPTA7Ci0rCi0rICBpZiAoKnN0ciA9PSAnLScpIHsKLSsgICAgaXNfbmVnYXRp dmUgPSAxOwotKyAgICBzdHIrKzsKLSsgIH0KLSsgIHJldHZhbCA9IDA7Ci0rICBmb3IgKDsgKnN0 cjsgc3RyKyspIHsKLSsgICAgcmV0dmFsID0gMTAgKiByZXR2YWwgKyAoKnN0ciAtICcwJyk7Ci0r ICB9Ci0rICBpZiAoaXNfbmVnYXRpdmUpIHJldHZhbCAqPSAtMTsKLSsgIHJldHVybiByZXR2YWw7 Ci0rfQotKyNlbmRpZgotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZB VEUgQk9PTCBpc19pbnRlZ2VyKGNoYXIgKnApIHsKLSsgIEJPT0wgcmV0dmFsOwotKwotKyAgaWYg KHAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKyAgaWYgKCpwID09ICctJykgcCsrOwotKyAgaWYg KCpwID09IDApIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHZhbCA9IFRSVUU7Ci0rCi0rICBmb3Ig KDsgKnA7IHArKykgewotKyAgICBpZiAoICgqcCA8ICcwJyB8fCAqcCA+ICc5JykgKSB7Ci0rICAg ICAgcmV0dmFsID0gRkFMU0U7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHJldHVybiByZXR2YWw7Ci0r fQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9PTCBpc19m bG9hdChjaGFyICpwKSB7Ci0rICBCT09MIHJldHZhbCwgbnVtYmVyX2ZvdW5kPUZBTFNFOwotKwot KyAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKyAgaWYgKCpwID09ICctJykgcCsrOwot KyAgaWYgKCpwID09IDApIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHZhbCA9IFRSVUU7Ci0rCi0r ICBmb3IgKDsgKnA7IHArKykgewotKyAgICBpZiAoKnAgPT0gJy4nIHx8ICpwID09ICcsJykgewot KyAgICAgIGlmICghbnVtYmVyX2ZvdW5kKSByZXR2YWwgPSBGQUxTRTsKLSsgICAgfSBlbHNlIGlm ICggKnAgPj0gJzAnICYmICpwIDw9ICc5JyApIHsKLSsgICAgICBudW1iZXJfZm91bmQgPSBUUlVF OwotKyAgICB9IGVsc2UgewotKyAgICAgIHJldHVybiBGQUxTRTsKLSsgICAgfQotKyAgfQotKwot KyAgcmV0dXJuIHJldHZhbDsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rQklOTl9QUklWQVRFIEJPT0wgaXNfYm9vbF9zdHIoY2hhciAqc3RyLCBCT09MICpwYm9v bCkgewotKyAgaW50NjQgIHZpbnQ7Ci0rICBkb3VibGUgdmRvdWJsZTsKLSsKLSsgIGlmIChzdHIg PT0gTlVMTCB8fCBwYm9vbCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAoc3RyaWNt cChzdHIsICJ0cnVlIikgPT0gMCkgZ290byBsb2NfdHJ1ZTsKLSsgIGlmIChzdHJpY21wKHN0ciwg InllcyIpID09IDApIGdvdG8gbG9jX3RydWU7Ci0rICBpZiAoc3RyaWNtcChzdHIsICJvbiIpID09 IDApIGdvdG8gbG9jX3RydWU7Ci0rICAvL2lmIChzdHJpY21wKHN0ciwgIjEiKSA9PSAwKSBnb3Rv IGxvY190cnVlOwotKwotKyAgaWYgKHN0cmljbXAoc3RyLCAiZmFsc2UiKSA9PSAwKSBnb3RvIGxv Y19mYWxzZTsKLSsgIGlmIChzdHJpY21wKHN0ciwgIm5vIikgPT0gMCkgZ290byBsb2NfZmFsc2U7 Ci0rICBpZiAoc3RyaWNtcChzdHIsICJvZmYiKSA9PSAwKSBnb3RvIGxvY19mYWxzZTsKLSsgIC8v aWYgKHN0cmljbXAoc3RyLCAiMCIpID09IDApIGdvdG8gbG9jX2ZhbHNlOwotKwotKyAgaWYgKGlz X2ludGVnZXIoc3RyKSkgewotKyAgICB2aW50ID0gYXRvaTY0KHN0cik7Ci0rICAgICpwYm9vbCA9 ICh2aW50ICE9IDApID8gVFJVRSA6IEZBTFNFOwotKyAgICByZXR1cm4gVFJVRTsKLSsgIH0gZWxz ZSBpZiAoaXNfZmxvYXQoc3RyKSkgewotKyAgICB2ZG91YmxlID0gYXRvZihzdHIpOwotKyAgICAq cGJvb2wgPSAodmRvdWJsZSAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKLSsgICAgcmV0dXJuIFRSVUU7 Ci0rICB9Ci0rCi0rICByZXR1cm4gRkFMU0U7Ci0rCi0rbG9jX3RydWU6Ci0rICAqcGJvb2wgPSBU UlVFOwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rbG9jX2ZhbHNlOgotKyAgKnBib29sID0gRkFMU0U7 Ci0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2dldF9pbnQzMihiaW5uICp2YWx1ZSwgaW50ICpw aW50KSB7Ci0rCi0rICBpZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09IE5VTEwpIHJldHVybiBG QUxTRTsKLSsKLSsgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlf SU5UKSB7Ci0rICAgIHJldHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCBwaW50LCB2YWx1 ZS0+dHlwZSwgQklOTl9JTlQzMik7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7 Ci0rICBjYXNlIEJJTk5fRkxPQVQ6Ci0rICAgIGlmICh2YWx1ZS0+dmZsb2F0IDwgKGZsb2F0KUlO VDMyX01JTiB8fCB2YWx1ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDMyX01BWCkgcmV0dXJuIEZBTFNF OwotKyAgICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOwotKyAgICBicmVhazsKLSsg IGNhc2UgQklOTl9ET1VCTEU6Ci0rICAgIGlmICh2YWx1ZS0+dmRvdWJsZSA8IChkb3VibGUpSU5U MzJfTUlOIHx8IHZhbHVlLT52ZG91YmxlID4gKGRvdWJsZSlJTlQzMl9NQVgpIHJldHVybiBGQUxT RTsKLSsgICAgKnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7Ci0rICAgIGJyZWFrOwot KyAgY2FzZSBCSU5OX1NUUklORzoKLSsgICAgaWYgKGlzX2ludGVnZXIoKGNoYXIqKXZhbHVlLT5w dHIpKQotKyAgICAgICpwaW50ID0gYXRvaSgoY2hhciopdmFsdWUtPnB0cik7Ci0rICAgIGVsc2Ug aWYgKGlzX2Zsb2F0KChjaGFyKil2YWx1ZS0+cHRyKSkKLSsgICAgICAqcGludCA9IHJvdW5kdmFs KGF0b2YoKGNoYXIqKXZhbHVlLT5wdHIpKTsKLSsgICAgZWxzZQotKyAgICAgIHJldHVybiBGQUxT RTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fQk9PTDoKLSsgICAgKnBpbnQgPSB2YWx1ZS0+ dmJvb2w7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAg fQotKwotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfaW50NjQoYmlubiAqdmFsdWUsIGludDY0 ICpwaW50KSB7Ci0rCi0rICBpZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09IE5VTEwpIHJldHVy biBGQUxTRTsKLSsKLSsgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1J TFlfSU5UKSB7Ci0rICAgIHJldHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCBwaW50LCB2 YWx1ZS0+dHlwZSwgQklOTl9JTlQ2NCk7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKHZhbHVlLT50eXBl KSB7Ci0rICBjYXNlIEJJTk5fRkxPQVQ6Ci0rICAgIGlmICh2YWx1ZS0+dmZsb2F0IDwgKGZsb2F0 KUlOVDY0X01JTiB8fCB2YWx1ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDY0X01BWCkgcmV0dXJuIEZB TFNFOwotKyAgICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOwotKyAgICBicmVhazsK LSsgIGNhc2UgQklOTl9ET1VCTEU6Ci0rICAgIGlmICh2YWx1ZS0+dmRvdWJsZSA8IChkb3VibGUp SU5UNjRfTUlOIHx8IHZhbHVlLT52ZG91YmxlID4gKGRvdWJsZSlJTlQ2NF9NQVgpIHJldHVybiBG QUxTRTsKLSsgICAgKnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7Ci0rICAgIGJyZWFr OwotKyAgY2FzZSBCSU5OX1NUUklORzoKLSsgICAgaWYgKGlzX2ludGVnZXIoKGNoYXIqKXZhbHVl LT5wdHIpKQotKyAgICAgICpwaW50ID0gYXRvaTY0KChjaGFyKil2YWx1ZS0+cHRyKTsKLSsgICAg ZWxzZSBpZiAoaXNfZmxvYXQoKGNoYXIqKXZhbHVlLT5wdHIpKQotKyAgICAgICpwaW50ID0gcm91 bmR2YWwoYXRvZigoY2hhciopdmFsdWUtPnB0cikpOwotKyAgICBlbHNlCi0rICAgICAgcmV0dXJu IEZBTFNFOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9CT09MOgotKyAgICAqcGludCA9IHZh bHVlLT52Ym9vbDsKLSsgICAgYnJlYWs7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gRkFMU0U7 Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUoYmlubiAqdmFsdWUs IGRvdWJsZSAqcGZsb2F0KSB7Ci0rICBpbnQ2NCB2aW50OwotKwotKyAgaWYgKHZhbHVlID09IE5V TEwgfHwgcGZsb2F0ID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlX2ZhbWls eSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7Ci0rICAgIGlmIChjb3B5X2ludF92 YWx1ZSh2YWx1ZS0+cHRyLCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5UNjQpID09IEZBTFNF KSByZXR1cm4gRkFMU0U7Ci0rICAgICpwZmxvYXQgPSAoZG91YmxlKSB2aW50OwotKyAgICByZXR1 cm4gVFJVRTsKLSsgIH0KLSsKLSsgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKLSsgIGNhc2UgQklO Tl9GTE9BVDoKLSsgICAgKnBmbG9hdCA9IHZhbHVlLT52ZmxvYXQ7Ci0rICAgIGJyZWFrOwotKyAg Y2FzZSBCSU5OX0RPVUJMRToKLSsgICAgKnBmbG9hdCA9IHZhbHVlLT52ZG91YmxlOwotKyAgICBi cmVhazsKLSsgIGNhc2UgQklOTl9TVFJJTkc6Ci0rICAgIGlmIChpc19pbnRlZ2VyKChjaGFyKil2 YWx1ZS0+cHRyKSkKLSsgICAgICAqcGZsb2F0ID0gKGRvdWJsZSkgYXRvaTY0KChjaGFyKil2YWx1 ZS0+cHRyKTsKLSsgICAgZWxzZSBpZiAoaXNfZmxvYXQoKGNoYXIqKXZhbHVlLT5wdHIpKQotKyAg ICAgICpwZmxvYXQgPSBhdG9mKChjaGFyKil2YWx1ZS0+cHRyKTsKLSsgICAgZWxzZQotKyAgICAg IHJldHVybiBGQUxTRTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fQk9PTDoKLSsgICAgKnBm bG9hdCA9IHZhbHVlLT52Ym9vbDsKLSsgICAgYnJlYWs7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1 cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2dldF9ib29sKGJpbm4g KnZhbHVlLCBCT09MICpwYm9vbCkgewotKyAgaW50NjQgdmludDsKLSsKLSsgIGlmICh2YWx1ZSA9 PSBOVUxMIHx8IHBib29sID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlX2Zh bWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7Ci0rICAgIGlmIChjb3B5X2lu dF92YWx1ZSh2YWx1ZS0+cHRyLCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5UNjQpID09IEZB TFNFKSByZXR1cm4gRkFMU0U7Ci0rICAgICpwYm9vbCA9ICh2aW50ICE9IDApID8gVFJVRSA6IEZB TFNFOwotKyAgICByZXR1cm4gVFJVRTsKLSsgIH0KLSsKLSsgIHN3aXRjaCAodmFsdWUtPnR5cGUp IHsKLSsgIGNhc2UgQklOTl9CT09MOgotKyAgICAqcGJvb2wgPSB2YWx1ZS0+dmJvb2w7Ci0rICAg IGJyZWFrOwotKyAgY2FzZSBCSU5OX0ZMT0FUOgotKyAgICAqcGJvb2wgPSAodmFsdWUtPnZmbG9h dCAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fRE9VQkxF OgotKyAgICAqcGJvb2wgPSAodmFsdWUtPnZkb3VibGUgIT0gMCkgPyBUUlVFIDogRkFMU0U7Ci0r ICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUUklORzoKLSsgICAgcmV0dXJuIGlzX2Jvb2xfc3Ry KChjaGFyKil2YWx1ZS0+cHRyLCBwYm9vbCk7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gRkFM U0U7Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rCi0rY2hhciAqIEFQSUVOVFJZIGJpbm5fZ2V0X3N0cihiaW5uICp2YWx1 ZSkgewotKyAgaW50NjQgdmludDsKLSsgIGNoYXIgYnVmWzEyOF07Ci0rCi0rICBpZiAodmFsdWUg PT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0rCi0rICBpZiAodHlwZV9mYW1pbHkodmFsdWUtPnR5cGUp ID09IEJJTk5fRkFNSUxZX0lOVCkgewotKyAgICBpZiAoY29weV9pbnRfdmFsdWUodmFsdWUtPnB0 ciwgJnZpbnQsIHZhbHVlLT50eXBlLCBCSU5OX0lOVDY0KSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7 Ci0rICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiUiIElOVDY0X0ZPUk1BVCwgdmludCk7 Ci0rICAgIGdvdG8gbG9jX2NvbnZlcnRfdmFsdWU7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKHZhbHVl LT50eXBlKSB7Ci0rICBjYXNlIEJJTk5fRkxPQVQ6Ci0rICAgIHZhbHVlLT52ZG91YmxlID0gdmFs dWUtPnZmbG9hdDsKLSsgICAgLyogZmFsbCB0aHJvdWdoICovCi0rICBjYXNlIEJJTk5fRE9VQkxF OgotKyAgICBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlZyIsIHZhbHVlLT52ZG91YmxlKTsK LSsgICAgZ290byBsb2NfY29udmVydF92YWx1ZTsKLSsgIGNhc2UgQklOTl9TVFJJTkc6Ci0rICAg IHJldHVybiAoY2hhciopIHZhbHVlLT5wdHI7Ci0rICBjYXNlIEJJTk5fQk9PTDoKLSsgICAgaWYg KHZhbHVlLT52Ym9vbCkKLSsgICAgICBzdHJjcHkoYnVmLCAidHJ1ZSIpOwotKyAgICBlbHNlCi0r ICAgICAgc3RyY3B5KGJ1ZiwgImZhbHNlIik7Ci0rICAgIGdvdG8gbG9jX2NvbnZlcnRfdmFsdWU7 Ci0rICB9Ci0rCi0rICByZXR1cm4gTlVMTDsKLSsKLStsb2NfY29udmVydF92YWx1ZToKLSsKLSsg IC8vdmFsdWUtPnZpbnQ2NCA9IDA7Ci0rICB2YWx1ZS0+cHRyID0gc3RyZHVwKGJ1Zik7Ci0rICBp ZiAodmFsdWUtPnB0ciA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLSsgIHZhbHVlLT5mcmVlZm4gPSBm cmVlOwotKyAgdmFsdWUtPnR5cGUgPSBCSU5OX1NUUklORzsKLSsgIHJldHVybiAoY2hhciopIHZh bHVlLT5wdHI7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8q KiogR0VORVJBTCBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9pc19jb250YWluZXIoYmlubiAqaXRlbSkgewot KwotKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAgc3dpdGNoIChpdGVt LT50eXBlKSB7Ci0rICBjYXNlIEJJTk5fTElTVDoKLSsgIGNhc2UgQklOTl9NQVA6Ci0rICBjYXNl IEJJTk5fT0JKRUNUOgotKyAgICByZXR1cm4gVFJVRTsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVy biBGQUxTRTsKLSsgIH0KLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmggb3BlbnNzaC0xMC4zcDEvYmlu bi5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmgJMTk3MC0wMS0wMSAwMTowMDowMC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9iaW5uLmgJMjAyNi0wNy0wMiAwMDoy NzoyOS43MTg5NDQwODggKzAyMDAKLUBAIC0wLDAgKzEsOTQ1IEBACi0rCi0rLy8gVE8gRU5BQkxF IElOTElORSBGVU5DVElPTlM6Ci0rLy8gICBPTiBNU1ZDOiBlbmFibGUgdGhlICdJbmxpbmUgRnVu Y3Rpb24gRXhwYW5zaW9uJyAoL09iMikgY29tcGlsZXIgb3B0aW9uLCBhbmQgbWF5YmUgdGhlCi0r Ly8gICAgICAgICAgICAnV2hvbGUgUHJvZ3JhbSBPcHRpbWl0YXppb24nICgvR0wpLCB0aGF0IHJl cXVpcmVzIHRoZQotKy8vICAgICAgICAgICAgJ0xpbmsgVGltZSBDb2RlIEdlbmVyYXRpb24nICgv TFRDRykgbGlua2VyIG9wdGlvbiB0byBiZSBlbmFibGVkIHRvbwotKwotKyNpZm5kZWYgQklOTl9I Ci0rI2RlZmluZSBCSU5OX0gKLSsKLSsjaWZkZWYgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsK LSsjZW5kaWYKLSsKLSsjZGVmaW5lIEJJTk5fVkVSU0lPTiAiMy4wLjAiICAvKiB1c2luZyBzZW1h bnRpYyB2ZXJzaW9uaW5nICovCi0rCi0rI2lmbmRlZiBOVUxMCi0rI2lmZGVmIF9fY3BsdXNwbHVz Ci0rI2RlZmluZSBOVUxMICAgIDAKLSsjZWxzZQotKyNkZWZpbmUgTlVMTCAgICAoKHZvaWQgKikw KQotKyNlbmRpZgotKyNlbmRpZgotKwotKyNpZm5kZWYgVFJVRQotKyNkZWZpbmUgVFJVRSAgMQot KyNlbmRpZgotKwotKyNpZm5kZWYgRkFMU0UKLSsjZGVmaW5lIEZBTFNFIDAKLSsjZW5kaWYKLSsK LSsjaWZuZGVmIEJPT0wKLSt0eXBlZGVmIGludCBCT09MOwotKyNlbmRpZgotKwotKyNpZm5kZWYg QVBJRU5UUlkKLSsgI2lmZGVmIF9XSU4zMgotKyAgI2RlZmluZSBBUElFTlRSWSBfX3N0ZGNhbGwK LSsgI2Vsc2UKLSsgIC8vI2RlZmluZSBBUElFTlRSWSBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkK LSsgICNkZWZpbmUgQVBJRU5UUlkgCi0rICNlbmRpZgotKyNlbmRpZgotKwotKyNpZm5kZWYgQklO Tl9QUklWQVRFCi0rICNpZmRlZiBERUJVRwotKyAgI2RlZmluZSBCSU5OX1BSSVZBVEUKLSsgI2Vs c2UKLSsgICNkZWZpbmUgQklOTl9QUklWQVRFICBzdGF0aWMKLSsgI2VuZGlmCi0rI2VuZGlmCi0r Ci0rI2lmZGVmIF9NU0NfVkVSCi0rICAjZGVmaW5lIElOTElORSAgICAgICAgIF9faW5saW5lCi0r ICAjZGVmaW5lIEFMV0FZU19JTkxJTkUgIF9fZm9yY2VpbmxpbmUKLSsjZWxzZQotKyAgLy8geW91 IGNhbiBjaGFuZ2UgdG8gJ2V4dGVybiBpbmxpbmUnIGlmIHVzaW5nIHRoZSBnY2Mgb3B0aW9uIC1m bHRvCi0rICAjZGVmaW5lIElOTElORSAgICAgICAgIHN0YXRpYyBpbmxpbmUKLSsgICNkZWZpbmUg QUxXQVlTX0lOTElORSAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l KSkKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIGludDY0Ci0rI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8 IGRlZmluZWQoX19CT1JMQU5EQ19fKQotKyAgdHlwZWRlZiBfX2ludDY0IGludDY0OwotKyAgdHlw ZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NDsKLSsjZWxzZQotKyAgdHlwZWRlZiBsb25nIGxv bmcgaW50IGludDY0OwotKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NDsK LSsjZW5kaWYKLSsjZW5kaWYKLSsKLSsjaWZkZWYgX1dJTjMyCi0rI2RlZmluZSBJTlQ2NF9GT1JN QVQgICJJNjRpIgotKyNkZWZpbmUgVUlOVDY0X0ZPUk1BVCAiSTY0dSIKLSsjZGVmaW5lIElOVDY0 X0hFWF9GT1JNQVQgICJJNjR4IgotKyNlbHNlCi0rI2RlZmluZSBJTlQ2NF9GT1JNQVQgICJsbGki Ci0rI2RlZmluZSBVSU5UNjRfRk9STUFUICJsbHUiCi0rI2RlZmluZSBJTlQ2NF9IRVhfRk9STUFU ICAibGx4IgotKyNlbmRpZgotKwotKwotKy8vIEJJTk4gQ09OU1RBTlRTICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rI2RlZmluZSBJTlZBTElEX0JJTk4gICAg ICAgICAwCi0rCi0rLy8gU3RvcmFnZSBEYXRhIFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSsKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9OT0JZVEVTICAgMHgwMAot KyNkZWZpbmUgQklOTl9TVE9SQUdFX0JZVEUgICAgICAweDIwICAvLyAgOCBiaXRzCi0rI2RlZmlu ZSBCSU5OX1NUT1JBR0VfV09SRCAgICAgIDB4NDAgIC8vIDE2IGJpdHMgLS0gdGhlIGVuZGlhbmVz cyAoYnl0ZSBvcmRlcikgaXMgYXV0b21hdGljYWxseSBjb3JyZWN0ZWQKLSsjZGVmaW5lIEJJTk5f U1RPUkFHRV9EV09SRCAgICAgMHg2MCAgLy8gMzIgYml0cyAtLSB0aGUgZW5kaWFuZXNzIChieXRl IG9yZGVyKSBpcyBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZAotKyNkZWZpbmUgQklOTl9TVE9SQUdF X1FXT1JEICAgICAweDgwICAvLyA2NCBiaXRzIC0tIHRoZSBlbmRpYW5lc3MgKGJ5dGUgb3JkZXIp IGlzIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkCi0rI2RlZmluZSBCSU5OX1NUT1JBR0VfU1RSSU5H ICAgIDB4QTAgIC8vIEFyZSBzdG9yZWQgd2l0aCBudWxsIHRlcm1pbmF0aW9uCi0rI2RlZmluZSBC SU5OX1NUT1JBR0VfQkxPQiAgICAgIDB4QzAKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9DT05UQUlO RVIgMHhFMAotKyNkZWZpbmUgQklOTl9TVE9SQUdFX1ZJUlRVQUwgICAweDgwMDAwCi0rCi0rI2Rl ZmluZSBCSU5OX1NUT1JBR0VfTUlOICAgICAgIEJJTk5fU1RPUkFHRV9OT0JZVEVTCi0rI2RlZmlu ZSBCSU5OX1NUT1JBR0VfTUFYICAgICAgIEJJTk5fU1RPUkFHRV9DT05UQUlORVIKLSsKLSsjZGVm aW5lIEJJTk5fU1RPUkFHRV9NQVNLICAgICAgMHhFMAotKyNkZWZpbmUgQklOTl9TVE9SQUdFX01B U0sxNiAgICAweEUwMDAKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9IQVNfTU9SRSAgMHgxMAotKyNk ZWZpbmUgQklOTl9UWVBFX01BU0sgICAgICAgICAweDBGCi0rI2RlZmluZSBCSU5OX1RZUEVfTUFT SzE2ICAgICAgIDB4MEZGRgotKwotKyNkZWZpbmUgQklOTl9NQVhfVkFMVUVfTUFTSyAgICAweEZG RkZGCi0rCi0rCi0rLy8gRGF0YSBGb3JtYXRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSsKLSsjZGVmaW5lIEJJTk5fTElTVCAgICAgIDB4RTAKLSsjZGVmaW5l IEJJTk5fTUFQICAgICAgIDB4RTEKLSsjZGVmaW5lIEJJTk5fT0JKRUNUICAgIDB4RTIKLSsKLSsj ZGVmaW5lIEJJTk5fTlVMTCAgICAgIDB4MDAKLSsjZGVmaW5lIEJJTk5fVFJVRSAgICAgIDB4MDEK LSsjZGVmaW5lIEJJTk5fRkFMU0UgICAgIDB4MDIKLSsKLSsjZGVmaW5lIEJJTk5fVUlOVDggICAg IDB4MjAgIC8vIChCWVRFKSAodW5zaWduZWQgYnl0ZSkgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZv ciB0aGUgQllURSB0eXBlCi0rI2RlZmluZSBCSU5OX0lOVDggICAgICAweDIxICAvLyAoQllURSkg KHNpZ25lZCBieXRlLCBmcm9tIC0xMjggdG8gKzEyNy4gVGhlIDB4ODAgaXMgdGhlIHNpZ24gYml0 LCBzbyB0aGUgcmFuZ2UgaW4gaGV4IGlzIGZyb20gMHg4MCBbLTEyOF0gdG8gMHg3RiBbMTI3XSwg YmVpbmcgMHgwMCA9IDAgYW5kIDB4RkYgPSAtMSkKLSsjZGVmaW5lIEJJTk5fVUlOVDE2ICAgIDB4 NDAgIC8vIChXT1JEKSAodW5zaWduZWQgaW50ZWdlcikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZv ciB0aGUgV09SRCB0eXBlCi0rI2RlZmluZSBCSU5OX0lOVDE2ICAgICAweDQxICAvLyAoV09SRCkg KHNpZ25lZCBpbnRlZ2VyKQotKyNkZWZpbmUgQklOTl9VSU5UMzIgICAgMHg2MCAgLy8gKERXT1JE KSAodW5zaWduZWQgaW50ZWdlcikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZvciB0aGUgRFdPUkQg dHlwZQotKyNkZWZpbmUgQklOTl9JTlQzMiAgICAgMHg2MSAgLy8gKERXT1JEKSAoc2lnbmVkIGlu dGVnZXIpCi0rI2RlZmluZSBCSU5OX1VJTlQ2NCAgICAweDgwICAvLyAoUVdPUkQpICh1bnNpZ25l ZCBpbnRlZ2VyKSBJcyB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBRV09SRCB0eXBlCi0rI2Rl ZmluZSBCSU5OX0lOVDY0ICAgICAweDgxICAvLyAoUVdPUkQpIChzaWduZWQgaW50ZWdlcikKLSsK LSsjZGVmaW5lIEJJTk5fU0NIQVIgICAgIEJJTk5fSU5UOAotKyNkZWZpbmUgQklOTl9VQ0hBUiAg ICAgQklOTl9VSU5UOAotKwotKyNkZWZpbmUgQklOTl9TVFJJTkcgICAgMHhBMCAgLy8gKFNUUklO RykgUmF3IFN0cmluZwotKyNkZWZpbmUgQklOTl9EQVRFVElNRSAgMHhBMSAgLy8gKFNUUklORykg aXNvODYwMSBmb3JtYXQgLS0gWVlZWS1NTS1ERCBISDpNTTpTUwotKyNkZWZpbmUgQklOTl9EQVRF ICAgICAgMHhBMiAgLy8gKFNUUklORykgaXNvODYwMSBmb3JtYXQgLS0gWVlZWS1NTS1ERAotKyNk ZWZpbmUgQklOTl9USU1FICAgICAgMHhBMyAgLy8gKFNUUklORykgaXNvODYwMSBmb3JtYXQgLS0g SEg6TU06U1MKLSsjZGVmaW5lIEJJTk5fREVDSU1BTCAgIDB4QTQgIC8vIChTVFJJTkcpIEhpZ2gg cHJlY2lzaW9uIG51bWJlciAtIHVzZWQgZm9yIGdlbmVyaWMgZGVjaW1hbCB2YWx1ZXMgYW5kIGZv ciB0aG9zZSBvbmVzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRoZSBmbG9hdDY0IGZv cm1hdC4KLSsjZGVmaW5lIEJJTk5fQ1VSUkVOQ1lTVFIgIDB4QTUgIC8vIChTVFJJTkcpIFdpdGgg Y3VycmVuY3kgdW5pdC9zeW1ib2wgLSBjaGVjayBmb3Igc29tZSBpc28gc3RhbmRhcmQgZm9ybWF0 Ci0rI2RlZmluZSBCSU5OX1NJTkdMRV9TVFIgICAweEE2ICAvLyAoU1RSSU5HKSBDYW4gYmUgcmVz dG9yZWQgdG8gZmxvYXQzMgotKyNkZWZpbmUgQklOTl9ET1VCTEVfU1RSICAgMHhBNyAgLy8gKFNU UklORykgTWF5IGJlIHJlc3RvcmVkIHRvIGZsb2F0NjQKLSsKLSsjZGVmaW5lIEJJTk5fRkxPQVQz MiAgIDB4NjIgIC8vIChEV09SRCkgCi0rI2RlZmluZSBCSU5OX0ZMT0FUNjQgICAweDgyICAvLyAo UVdPUkQpIAotKyNkZWZpbmUgQklOTl9GTE9BVCAgICAgQklOTl9GTE9BVDMyCi0rI2RlZmluZSBC SU5OX1NJTkdMRSAgICBCSU5OX0ZMT0FUMzIKLSsjZGVmaW5lIEJJTk5fRE9VQkxFICAgIEJJTk5f RkxPQVQ2NAotKwotKyNkZWZpbmUgQklOTl9DVVJSRU5DWSAgMHg4MyAgLy8gKFFXT1JEKQotKwot KyNkZWZpbmUgQklOTl9CTE9CICAgICAgMHhDMCAgLy8gKEJMT0IpIFJhdyBCbG9iCi0rCi0rCi0r Ly8gdmlydHVhbCB0eXBlczoKLSsKLSsjZGVmaW5lIEJJTk5fQk9PTCAgICAgIDB4ODAwNjEgIC8v IChEV09SRCkgVGhlIHZhbHVlIG1heSBiZSAwIG9yIDEKLSsKLSsjaWZkZWYgQklOTl9FWFRFTkRF RAotKy8vI2RlZmluZSBCSU5OX1NJTkdMRSAgICAweDgwMEExICAvLyAoU1RSSU5HKSBDYW4gYmUg cmVzdG9yZWQgdG8gZmxvYXQzMgotKy8vI2RlZmluZSBCSU5OX0RPVUJMRSAgICAweDgwMEEyICAv LyAoU1RSSU5HKSBNYXkgYmUgcmVzdG9yZWQgdG8gZmxvYXQ2NAotKyNlbmRpZgotKwotKy8vI2Rl ZmluZSBCSU5OX0JJTk4gICAgICAweDgwMEUxICAvLyAoQ09OVEFJTkVSKQotKy8vI2RlZmluZSBC SU5OX0JJTk5fQlVGRkVSICAweDgwMEMxICAvLyAoQkxPQikgdXNlciBiaW5uLiBpdCdzIG5vdCBv cGVuIGJ5IHRoZSBwYXJzZXIKLSsKLSsKLSsvLyBleHRlbmRlZCBjb250ZW50IHR5cGVzOgotKwot Ky8vIHN0cmluZ3M6Ci0rCi0rI2RlZmluZSBCSU5OX0hUTUwgICAgICAweEIwMDEKLSsjZGVmaW5l IEJJTk5fWE1MICAgICAgIDB4QjAwMgotKyNkZWZpbmUgQklOTl9KU09OICAgICAgMHhCMDAzCi0r I2RlZmluZSBCSU5OX0pBVkFTQ1JJUFQgMHhCMDA0Ci0rI2RlZmluZSBCSU5OX0NTUyAgICAgICAw eEIwMDUKLSsKLSsvLyBibG9iczoKLSsKLSsjZGVmaW5lIEJJTk5fSlBFRyAgICAgIDB4RDAwMQot KyNkZWZpbmUgQklOTl9HSUYgICAgICAgMHhEMDAyCi0rI2RlZmluZSBCSU5OX1BORyAgICAgICAw eEQwMDMKLSsjZGVmaW5lIEJJTk5fQk1QICAgICAgIDB4RDAwNAotKwotKwotKy8vIHR5cGUgZmFt aWxpZXMKLSsjZGVmaW5lIEJJTk5fRkFNSUxZX05PTkUgICAweDAwCi0rI2RlZmluZSBCSU5OX0ZB TUlMWV9OVUxMICAgMHhmMQotKyNkZWZpbmUgQklOTl9GQU1JTFlfSU5UICAgIDB4ZjIKLSsjZGVm aW5lIEJJTk5fRkFNSUxZX0ZMT0FUICAweGYzCi0rI2RlZmluZSBCSU5OX0ZBTUlMWV9TVFJJTkcg MHhmNAotKyNkZWZpbmUgQklOTl9GQU1JTFlfQkxPQiAgIDB4ZjUKLSsjZGVmaW5lIEJJTk5fRkFN SUxZX0JPT0wgICAweGY2Ci0rI2RlZmluZSBCSU5OX0ZBTUlMWV9CSU5OICAgMHhmNwotKwotKy8v IGludGVnZXIgdHlwZXMgcmVsYXRlZCB0byBzaWduYWwKLSsjZGVmaW5lIEJJTk5fU0lHTkVEX0lO VCAgICAgMTEKLSsjZGVmaW5lIEJJTk5fVU5TSUdORURfSU5UICAgMjIKLSsKLSsKLSt0eXBlZGVm IHZvaWQgKCpiaW5uX21lbV9mcmVlKSh2b2lkKik7Ci0rI2RlZmluZSBCSU5OX1NUQVRJQyAgICAg ICgoYmlubl9tZW1fZnJlZSkwKQotKyNkZWZpbmUgQklOTl9UUkFOU0lFTlQgICAoKGJpbm5fbWVt X2ZyZWUpLTEpCi0rCi0rCi0rLy8gLS0tIEJJTk4gU1RSVUNUVVJFIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rCi0rc3Ry dWN0IGJpbm5fc3RydWN0IHsKLSsgIGludCAgICBoZWFkZXI7ICAgICAvLyB0aGlzIHN0cnVjdCBo ZWFkZXIgaG9sZHMgdGhlIG1hZ2ljIG51bWJlciAoQklOTl9NQUdJQykgdGhhdCBpZGVudGlmaWVz IHRoaXMgbWVtb3J5IGJsb2NrIGFzIGEgYmlubiBzdHJ1Y3R1cmUKLSsgIEJPT0wgICBhbGxvY2F0 ZWQ7ICAvLyB0aGUgc3RydWN0IGNhbiBiZSBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jX2ZuKCkgb3Ig Y2FuIGJlIG9uIHRoZSBzdGFjawotKyAgQk9PTCAgIHdyaXRhYmxlOyAgIC8vIGRpZCBpdCB3YXMg Y3JlYXRlIGZvciB3cml0aW5nPyBpdCBjYW4gdXNlIHRoZSBwYnVmIGlmIG5vdCB1bmlmaWVkIHdp dGggcHRyCi0rICBCT09MICAgZGlydHk7ICAgICAgLy8gdGhlIGNvbnRhaW5lciBoZWFkZXIgaXMg bm90IHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlcgotKyAgLy8KLSsgIHZvaWQgICpwYnVmOyAgICAgICAv LyB1c2UgKnB0ciBiZWxvdz8KLSsgIEJPT0wgICBwcmVfYWxsb2NhdGVkOwotKyAgaW50ICAgIGFs bG9jX3NpemU7Ci0rICBpbnQgICAgdXNlZF9zaXplOwotKyAgLy8KLSsgIGludCAgICB0eXBlOwot KyAgdm9pZCAgKnB0cjsKLSsgIGludCAgICBzaXplOwotKyAgaW50ICAgIGNvdW50OwotKyAgLy8K LSsgIGJpbm5fbWVtX2ZyZWUgZnJlZWZuOyAgLy8gdXNlZCBvbmx5IHdoZW4gdHlwZSA9PSBCSU5O X1NUUklORyBvciBCSU5OX0JMT0IKLSsgIC8vCi0rICB1bmlvbiB7Ci0rICAgIHNpZ25lZCBjaGFy ICAgIHZpbnQ4OwotKyAgICBzaWduZWQgc2hvcnQgICB2aW50MTY7Ci0rICAgIHNpZ25lZCBpbnQg ICAgIHZpbnQzMjsKLSsgICAgaW50NjQgICAgICAgICAgdmludDY0OwotKyAgICB1bnNpZ25lZCBj aGFyICB2dWludDg7Ci0rICAgIHVuc2lnbmVkIHNob3J0IHZ1aW50MTY7Ci0rICAgIHVuc2lnbmVk IGludCAgIHZ1aW50MzI7Ci0rICAgIHVpbnQ2NCAgICAgICAgIHZ1aW50NjQ7Ci0rICAgIC8vCi0r ICAgIHNpZ25lZCBjaGFyICAgIHZjaGFyOwotKyAgICB1bnNpZ25lZCBjaGFyICB2dWNoYXI7Ci0r ICAgIHNpZ25lZCBzaG9ydCAgIHZzaG9ydDsKLSsgICAgdW5zaWduZWQgc2hvcnQgdnVzaG9ydDsK LSsgICAgc2lnbmVkIGludCAgICAgdmludDsKLSsgICAgdW5zaWduZWQgaW50ICAgdnVpbnQ7Ci0r ICAgIC8vCi0rICAgIGZsb2F0ICAgICAgICAgIHZmbG9hdDsKLSsgICAgZG91YmxlICAgICAgICAg dmRvdWJsZTsKLSsgICAgLy8KLSsgICAgQk9PTCAgICAgICAgICAgdmJvb2w7Ci0rICB9OwotKyAg Ly8KLSsgIEJPT0wgICBkaXNhYmxlX2ludF9jb21wcmVzc2lvbjsKLSt9OwotKwotK3R5cGVkZWYg c3RydWN0IGJpbm5fc3RydWN0IGJpbm47Ci0rCi0rCi0rCi0rLy8gLS0tIEdFTkVSQUwgRlVOQ1RJ T05TICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0rCi0rY2hhciAqIEFQSUVOVFJZIGJpbm5fdmVyc2lvbigpOwotKwotK3ZvaWQgICBB UElFTlRSWSBiaW5uX3NldF9hbGxvY19mdW5jdGlvbnModm9pZCogKCpuZXdfbWFsbG9jKShzaXpl X3QpLCB2b2lkKiAoKm5ld19yZWFsbG9jKSh2b2lkKixzaXplX3QpLCB2b2lkICgqbmV3X2ZyZWUp KHZvaWQqKSk7Ci0rCi0raW50ICAgIEFQSUVOVFJZIGJpbm5fY3JlYXRlX3R5cGUoaW50IHN0b3Jh Z2VfdHlwZSwgaW50IGRhdGFfdHlwZV9pbmRleCk7Ci0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0 X3R5cGVfaW5mbyhpbnQgbG9uZ190eXBlLCBpbnQgKnBzdG9yYWdlX3R5cGUsIGludCAqcGV4dHJh X3R5cGUpOwotKwotK2ludCAgICBBUElFTlRSWSBiaW5uX2dldF93cml0ZV9zdG9yYWdlKGludCB0 eXBlKTsKLStpbnQgICAgQVBJRU5UUlkgYmlubl9nZXRfcmVhZF9zdG9yYWdlKGludCB0eXBlKTsK LSsKLStCT09MICAgQVBJRU5UUlkgYmlubl9pc19jb250YWluZXIoYmlubiAqaXRlbSk7Ci0rCi0r Ci0rLy8gLS0tIFdSSVRFIEZVTkNUSU9OUyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rLy8gY3JlYXRlIGEgbmV3IGJpbm4g YWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSBzdHJ1Y3R1cmUKLStiaW5uICogQVBJRU5UUlkgYmlu bl9uZXcoaW50IHR5cGUsIGludCBzaXplLCB2b2lkICpidWZmZXIpOwotK2Jpbm4gKiBBUElFTlRS WSBiaW5uX2xpc3QoKTsKLStiaW5uICogQVBJRU5UUlkgYmlubl9tYXAoKTsKLStiaW5uICogQVBJ RU5UUlkgYmlubl9vYmplY3QoKTsKLSsKLSsvLyBjcmVhdGUgYSBuZXcgYmlubiBzdG9yaW5nIHRo ZSBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrCi0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZShiaW5u ICppdGVtLCBpbnQgdHlwZSwgaW50IHNpemUsIHZvaWQgKmJ1ZmZlcik7Ci0rQk9PTCBBUElFTlRS WSBiaW5uX2NyZWF0ZV9saXN0KGJpbm4gKmxpc3QpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9jcmVh dGVfbWFwKGJpbm4gKm1hcCk7Ci0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9vYmplY3QoYmlu biAqb2JqZWN0KTsKLSsKLSsvLyBjcmVhdGUgYSBuZXcgYmlubiBhcyBhIGNvcHkgZnJvbSBhbm90 aGVyCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fY29weShjb25zdCB2b2lkICpvbGQpOwotKwotKwot K0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlzdCwgYmlubiAqdmFsdWUp OwotK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfc2V0X25ldyhiaW5uICptYXAsIGludCBpZCwgYmlu biAqdmFsdWUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0X25ldyhiaW5uICpvYmos IGNvbnN0IGNoYXIgKmtleSwgYmlubiAqdmFsdWUpOwotKwotKwotKy8vIGV4dGVuZGVkIGludGVy ZmFjZQotKwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2xpc3RfYWRkKGJpbm4gKmxpc3QsIGludCB0 eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKTsKLStCT09MICAgQVBJRU5UUlkgYmlubl9tYXBf c2V0KGJpbm4gKm1hcCwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSk7 Ci0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3NldChiaW5uICpvYmosIGNvbnN0IGNoYXIg KmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOwotKwotKwotKy8vIHJlbGVh c2UgbWVtb3J5Ci0rCi0rdm9pZCAgIEFQSUVOVFJZIGJpbm5fZnJlZShiaW5uICppdGVtKTsKLSt2 b2lkICogQVBJRU5UUlkgYmlubl9yZWxlYXNlKGJpbm4gKml0ZW0pOyAvLyBmcmVlIHRoZSBiaW5u IHN0cnVjdHVyZSBidXQga2VlcHMgdGhlIGJpbm4gYnVmZmVyIGFsbG9jYXRlZCwgcmV0dXJuaW5n IGEgcG9pbnRlciB0byBpdC4gdXNlIHRoZSBmcmVlIGZ1bmN0aW9uIHRvIHJlbGVhc2UgdGhlIGJ1 ZmZlciBsYXRlcgotKwotKwotKy8vIC0tLSBDUkVBVElORyBWQUxVRVMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rYmlubiAqIEFQSUVOVFJZ IGJpbm5fdmFsdWUoaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUsIGJpbm5fbWVtX2Zy ZWUgZnJlZWZuKTsKLSsKLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2ludDgoc2lnbmVkIGNo YXIgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UOCwgJnZhbHVlLCAwLCBO VUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9pbnQxNihzaG9ydCB2YWx1ZSkg ewotKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9JTlQxNiwgJnZhbHVlLCAwLCBOVUxMKTsKLSt9 Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9pbnQzMihpbnQgdmFsdWUpIHsKLSsgIHJldHVy biBiaW5uX3ZhbHVlKEJJTk5fSU5UMzIsICZ2YWx1ZSwgMCwgTlVMTCk7Ci0rfQotK0FMV0FZU19J TkxJTkUgYmlubiAqIGJpbm5faW50NjQoaW50NjQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3Zh bHVlKEJJTk5fSU5UNjQsICZ2YWx1ZSwgMCwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgYmlu biAqIGJpbm5fdWludDgodW5zaWduZWQgY2hhciB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fdmFs dWUoQklOTl9VSU5UOCwgJnZhbHVlLCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5u ICogYmlubl91aW50MTYodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3Zh bHVlKEJJTk5fVUlOVDE2LCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJp bm4gKiBiaW5uX3VpbnQzMih1bnNpZ25lZCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3Zh bHVlKEJJTk5fVUlOVDMyLCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJp bm4gKiBiaW5uX3VpbnQ2NCh1aW50NjQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJ Tk5fVUlOVDY0LCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBi aW5uX2Zsb2F0KGZsb2F0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5OX0ZMT0FU LCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2RvdWJs ZShkb3VibGUgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fRE9VQkxFLCAmdmFs dWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Jvb2woQk9PTCB2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9CT09MLCAmdmFsdWUsIDAsIE5VTEwp OwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX251bGwoKSB7Ci0rICByZXR1cm4gYmlu bl92YWx1ZShCSU5OX05VTEwsIE5VTEwsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJp bm4gKiBiaW5uX3N0cmluZyhjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUgZnJlZWZuKSB7Ci0rICBy ZXR1cm4gYmlubl92YWx1ZShCSU5OX1NUUklORywgc3RyLCAwLCBmcmVlZm4pOwotK30KLStBTFdB WVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Jsb2Iodm9pZCAqcHRyLCBpbnQgc2l6ZSwgYmlubl9tZW1f ZnJlZSBmcmVlZm4pIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fQkxPQiwgcHRyLCBzaXpl LCBmcmVlZm4pOwotK30KLSsKLSsKLSsvLyAtLS0gUkVBRCBGVU5DVElPTlMgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSsv LyB0aGVzZSBmdW5jdGlvbnMgYWNjZXB0IHBvaW50ZXIgdG8gdGhlIGJpbm4gc3RydWN0dXJlIGFu ZCBwb2ludGVyIHRvIHRoZSBiaW5uIGJ1ZmZlcgotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX3B0cihj b25zdCB2b2lkICpwdHIpOwotK2ludCAgICBBUElFTlRSWSBiaW5uX3NpemUoY29uc3Qgdm9pZCAq cHRyKTsKLStpbnQgICAgQVBJRU5UUlkgYmlubl90eXBlKGNvbnN0IHZvaWQgKnB0cik7Ci0raW50 ICAgIEFQSUVOVFJZIGJpbm5fY291bnQoY29uc3Qgdm9pZCAqcHRyKTsKLSsKLStCT09MICAgQVBJ RU5UUlkgYmlubl9pc192YWxpZChjb25zdCB2b2lkICpwdHIsIGludCAqcHR5cGUsIGludCAqcGNv dW50LCBpbnQgKnBzaXplKTsKLSsvKiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWVzICh0 eXBlLCBjb3VudCBhbmQgc2l6ZSkgYW5kIHRoZXkgZG9uJ3QgbmVlZCB0byBiZQotKyAgIGluaXRp YWxpemVkLiB0aGVzZSB2YWx1ZXMgYXJlIHJlYWQgZnJvbSB0aGUgYnVmZmVyLiBleGFtcGxlOgot KwotKyAgIGludCB0eXBlLCBjb3VudCwgc2l6ZTsKLSsgICByZXN1bHQgPSBiaW5uX2lzX3ZhbGlk KHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUpOwotKyovCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5f aXNfdmFsaWRfZXgoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50 ICpwc2l6ZSk7Ci0rLyogaWYgc29tZSB2YWx1ZSBpcyBpbmZvcm1lZCAodHlwZSwgY291bnQgb3Ig c2l6ZSkgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiAKLSsgICB0aGUgdmFsdWUgcmV0 dXJuZWQgZnJvbSB0aGUgc2VyaWFsaXplZCBkYXRhIG1hdGNoZXMgdGhlIGluZm9ybWVkIHZhbHVl LiBvdGhlcndpc2UKLSsgICB0aGUgdmFsdWVzIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4g ZXhhbXBsZToKLSsKLSsgICBpbnQgdHlwZT0wLCBjb3VudD0wLCBzaXplID0ga25vd25fc2l6ZTsK LSsgICByZXN1bHQgPSBiaW5uX2lzX3ZhbGlkX2V4KHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUp OwotKyovCi0rCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5faXNfc3RydWN0KGNvbnN0IHZvaWQgKnB0 cik7Ci0rCi0rCi0rLy8gTG9hZGluZyBhIGJpbm4gYnVmZmVyIGludG8gYSBiaW5uIHZhbHVlIC0g dGhpcyBpcyBvcHRpb25hbAotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29wZW4oY29uc3Qgdm9p ZCAqZGF0YSk7ICAgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgLSB1bnNlY3VyZQotK2Jpbm4gKiBB UElFTlRSWSBiaW5uX29wZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUpOyAvLyBhbGxv Y2F0ZWQgLSBzZWN1cmUKLStCT09MICAgQVBJRU5UUlkgYmlubl9sb2FkKGNvbnN0IHZvaWQgKmRh dGEsIGJpbm4gKml0ZW0pOyAgLy8gb24gc3RhY2sgLSB1bnNlY3VyZQotK0JPT0wgICBBUElFTlRS WSBiaW5uX2xvYWRfZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUsIGJpbm4gKnZhbHVlKTsg Ly8gc2VjdXJlCi0rCi0rCi0rLy8gZWFzaWVzdCBpbnRlcmZhY2UgdG8gdXNlLCBidXQgZG9uJ3Qg Y2hlY2sgaWYgdGhlIHZhbHVlIGlzIHRoZXJlCi0rCi0rc2lnbmVkIGNoYXIgICAgQVBJRU5UUlkg Ymlubl9saXN0X2ludDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rc2hvcnQgICAgICAg ICAgQVBJRU5UUlkgYmlubl9saXN0X2ludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwot K2ludCAgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQzMihjb25zdCB2b2lkICpsaXN0 LCBpbnQgcG9zKTsKLStpbnQ2NCAgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfaW50NjQoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rdW5zaWduZWQgY2hhciAgQVBJRU5UUlkgYmlubl9s aXN0X3VpbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK3Vuc2lnbmVkIHNob3J0IEFQ SUVOVFJZIGJpbm5fbGlzdF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rdW5z aWduZWQgaW50ICAgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQzMihjb25zdCB2b2lkICpsaXN0LCBp bnQgcG9zKTsKLSt1aW50NjQgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfdWludDY0KGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK2Zsb2F0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlz dF9mbG9hdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLStkb3VibGUgICAgICAgICBBUElF TlRSWSBiaW5uX2xpc3RfZG91YmxlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK0JPT0wg ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9ib29sKGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MpOwotK0JPT0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9udWxsKGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpOwotK2NoYXIgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9zdHIo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlu bl9saXN0X2Jsb2IoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwc2l6ZSk7Ci0rdm9p ZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2xpc3QoY29uc3Qgdm9pZCAqbGlzdCwgaW50 IHBvcyk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X21hcChjb25zdCB2b2lk ICpsaXN0LCBpbnQgcG9zKTsKLSt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3Rfb2Jq ZWN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotKwotK3NpZ25lZCBjaGFyICAgIEFQSUVO VFJZIGJpbm5fbWFwX2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3Nob3J0ICAgICAg ICAgIEFQSUVOVFJZIGJpbm5fbWFwX2ludDE2KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStp bnQgICAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9pbnQzMihjb25zdCB2b2lkICptYXAsIGlu dCBpZCk7Ci0raW50NjQgICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfaW50NjQoY29uc3Qgdm9p ZCAqbWFwLCBpbnQgaWQpOwotK3Vuc2lnbmVkIGNoYXIgIEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ4 KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLSt1bnNpZ25lZCBzaG9ydCBBUElFTlRSWSBiaW5u X21hcF91aW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3Vuc2lnbmVkIGludCAgIEFQ SUVOVFJZIGJpbm5fbWFwX3VpbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rdWludDY0 ICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfdWludDY0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlk KTsKLStmbG9hdCAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9mbG9hdChjb25zdCB2b2lkICpt YXAsIGludCBpZCk7Ci0rZG91YmxlICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfZG91YmxlKGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStCT09MICAgICAgICAgICBBUElFTlRSWSBiaW5uX21h cF9ib29sKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStCT09MICAgICAgICAgICBBUElFTlRS WSBiaW5uX21hcF9udWxsKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStjaGFyICogICAgICAg ICBBUElFTlRSWSBiaW5uX21hcF9zdHIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3ZvaWQg KiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2Jsb2IoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQs IGludCAqcHNpemUpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2xpc3QoY29u c3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFw X21hcChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5UUlkg Ymlubl9tYXBfb2JqZWN0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLSsKLStzaWduZWQgY2hh ciAgICBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQ4KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5KTsKLStzaG9ydCAgICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQxNihjb25z dCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0raW50ICAgICAgICAgICAgQVBJRU5UUlkg Ymlubl9vYmplY3RfaW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK2lu dDY0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0KGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5KTsKLSt1bnNpZ25lZCBjaGFyICBBUElFTlRSWSBiaW5uX29iamVjdF91 aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rdW5zaWduZWQgc2hvcnQg QVBJRU5UUlkgYmlubl9vYmplY3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAq a2V5KTsKLSt1bnNpZ25lZCBpbnQgICBBUElFTlRSWSBiaW5uX29iamVjdF91aW50MzIoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK3VpbnQ2NCAgICAgICAgIEFQSUVOVFJZIGJp bm5fb2JqZWN0X3VpbnQ2NChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rZmxv YXQgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfZmxvYXQoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXkpOwotK2RvdWJsZSAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2Rv dWJsZShjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rQk9PTCAgICAgICAgICAg QVBJRU5UUlkgYmlubl9vYmplY3RfYm9vbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtl eSk7Ci0rQk9PTCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfbnVsbChjb25zdCB2b2lk ICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rY2hhciAqICAgICAgICAgQVBJRU5UUlkgYmlubl9v YmplY3Rfc3RyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKLSt2b2lkICogICAg ICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9ibG9iKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5LCBpbnQgKnBzaXplKTsKLSt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX29iamVj dF9saXN0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKLSt2b2lkICogICAgICAg ICBBUElFTlRSWSBiaW5uX29iamVjdF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICpr ZXkpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X29iamVjdChjb25zdCB2 b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rCi0rCi0rLy8gcmV0dXJuIGEgcG9pbnRlciB0 byBhbiBhbGxvY2F0ZWQgYmlubiBzdHJ1Y3R1cmUgLSBtdXN0IGJlIHJlbGVhc2VkIHdpdGggdGhl IGZyZWUoKSBmdW5jdGlvbiBvciBlcXVpdmFsZW50IHNldCBpbiBiaW5uX3NldF9hbGxvY19mdW5j dGlvbnMoKQotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3RfdmFsdWUoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcyk7Ci0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3ZhbHVlKGNvbnN0IHZvaWQg Km1hcCwgaW50IGlkKTsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfdmFsdWUoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotKwotKy8vIHJlYWQgdGhlIHZhbHVlIHRvIGEg YmlubiBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0 X3ZhbHVlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGJpbm4gKnZhbHVlKTsKLStCT09MIEFQ SUVOVFJZIGJpbm5fbWFwX2dldF92YWx1ZShjb25zdCB2b2lkICptYXAsIGludCBpZCwgYmlubiAq dmFsdWUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQg Km9iaiwgY29uc3QgY2hhciAqa2V5LCBiaW5uICp2YWx1ZSk7Ci0rCi0rLy8gc2luZ2xlIGludGVy ZmFjZSAtIHRoZXNlIGZ1bmN0aW9ucyBjaGVjayB0aGUgZGF0YSB0eXBlCi0rQk9PTCBBUElFTlRS WSBiaW5uX2xpc3RfZ2V0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCB0eXBlLCB2b2lk ICpwdmFsdWUsIGludCAqcHNpemUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0KGNvbnN0 IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKTsK LStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSk7Ci0rCi0rLy8gdGhl c2UgMyBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5kIHRoZSBkYXRh IHR5cGUKLSsvLyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRldmljZXMKLSsv LyBvbiBsaXR0bGUtZW5kaWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUgb25seSB0byBy ZXR1cm4gcG9pbnRlcnMgdG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0cmluZ3MKLSsv LyB0aGUgcmV0dXJuZWQgcG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFsdWVzIG11c3Qg YmUgdXNlZCBvbmx5IGJ5IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKLSt2b2lkICogQVBJ RU5UUlkgYmlubl9saXN0X3JlYWQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwdHlw ZSwgaW50ICpwc2l6ZSk7Ci0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWQoY29uc3Qgdm9p ZCAqbWFwLCBpbnQgaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpOwotK3ZvaWQgKiBBUElFTlRS WSBiaW5uX29iamVjdF9yZWFkKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQg KnB0eXBlLCBpbnQgKnBzaXplKTsKLSsKLSsKLSsvLyBSRUFEIFBBSVIgRlVOQ1RJT05TCi0rCi0r Ly8gdGhlc2UgZnVuY3Rpb25zIHVzZSBiYXNlIDEgaW4gdGhlICdwb3MnIGFyZ3VtZW50Ci0rCi0r Ly8gb24gc3RhY2sKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldF9wYWlyKGNvbnN0IHZvaWQg Km1hcCwgaW50IHBvcywgaW50ICpwaWQsIGJpbm4gKnZhbHVlKTsKLStCT09MIEFQSUVOVFJZIGJp bm5fb2JqZWN0X2dldF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSwg YmlubiAqdmFsdWUpOyAgLy8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsy NTZdOwotKwotKy8vIGFsbG9jYXRlZAotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF9wYWlyKGNv bnN0IHZvaWQgKm1hcCwgaW50IHBvcywgaW50ICpwaWQpOwotK2Jpbm4gKiBBUElFTlRSWSBiaW5u X29iamVjdF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSk7ICAvLyB0 aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07Ci0rCi0rLy8gdGhlc2Ug MiBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5kIHRoZSBkYXRhIHR5 cGUKLSsvLyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRldmljZXMKLSsvLyBv biBsaXR0bGUtZW5kaWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUgb25seSB0byByZXR1 cm4gcG9pbnRlcnMgdG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0cmluZ3MKLSsvLyB0 aGUgcmV0dXJuZWQgcG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFsdWVzIG11c3QgYmUg dXNlZCBvbmx5IGJ5IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKLSt2b2lkICogQVBJRU5U UlkgYmlubl9tYXBfcmVhZF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQs IGludCAqcHR5cGUsIGludCAqcHNpemUpOwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX29iamVjdF9y ZWFkX3BhaXIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zLCBjaGFyICpwa2V5LCBpbnQgKnB0eXBl LCBpbnQgKnBzaXplKTsKLSsKLSsKLSsvLyBTRVFVRU5USUFMIFJFQUQgRlVOQ1RJT05TCi0rCi0r dHlwZWRlZiBzdHJ1Y3QgYmlubl9pdGVyX3N0cnVjdCB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnBu ZXh0OwotKyAgICB1bnNpZ25lZCBjaGFyICpwbGltaXQ7Ci0rICAgIGludCAgIHR5cGU7Ci0rICAg IGludCAgIGNvdW50OwotKyAgICBpbnQgICBjdXJyZW50OwotK30gYmlubl9pdGVyOwotKwotK0JP T0wgICBBUElFTlRSWSBiaW5uX2l0ZXJfaW5pdChiaW5uX2l0ZXIgKml0ZXIsIGNvbnN0IHZvaWQg KnBidWYsIGludCB0eXBlKTsKLSsKLSsvLyBhbGxvY2F0ZWQKLStiaW5uICogQVBJRU5UUlkgYmlu bl9saXN0X25leHRfdmFsdWUoYmlubl9pdGVyICppdGVyKTsKLStiaW5uICogQVBJRU5UUlkgYmlu bl9tYXBfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKTsKLStiaW5uICogQVBJ RU5UUlkgYmlubl9vYmplY3RfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXkp OyAgLy8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsyNTZdOwotKwotKy8v IG9uIHN0YWNrCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fbGlzdF9uZXh0KGJpbm5faXRlciAqaXRl ciwgYmlubiAqdmFsdWUpOwotK0JPT0wgICBBUElFTlRSWSBiaW5uX21hcF9uZXh0KGJpbm5faXRl ciAqaXRlciwgaW50ICpwaWQsIGJpbm4gKnZhbHVlKTsKLStCT09MICAgQVBJRU5UUlkgYmlubl9v YmplY3RfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKTsgIC8v IHRoZSBrZXkgbXVzdCBiZSBkZWNsYXJlZCBhczogY2hhciBrZXlbMjU2XTsKLSsKLSsvLyB0aGVz ZSAzIGZ1bmN0aW9ucyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBhbmQgdGhlIGRhdGEg dHlwZQotKy8vIHRoZXkgYXJlIHRocmVhZC1zYWZlIG9uIGJpZy1lbmRpYW4gZGV2aWNlcwotKy8v IG9uIGxpdHRsZS1lbmRpYW4gZGV2aWNlcyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbmx5IHRvIHJl dHVybiBwb2ludGVycyB0byBsaXN0LCBtYXAsIG9iamVjdCwgYmxvYiBhbmQgc3RyaW5ncwotKy8v IHRoZSByZXR1cm5lZCBwb2ludGVyIHRvIDE2LCAzMiBhbmQgNjQgYml0cyB2YWx1ZXMgbXVzdCBi ZSB1c2VkIG9ubHkgYnkgc2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9ucwotK3ZvaWQgKiBBUElF TlRSWSBiaW5uX2xpc3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgaW50ICpwdHlwZSwgaW50 ICpwc2l6ZSk7Ci0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfbmV4dChiaW5uX2l0ZXIg Kml0ZXIsIGludCAqcGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKLSt2b2lkICogQVBJRU5U UlkgYmlubl9vYmplY3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSwgaW50 ICpwdHlwZSwgaW50ICpwc2l6ZSk7ICAvLyB0aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNo YXIga2V5WzI1Nl07Ci0rCi0rCi0rLy8gLS0tIE1BQ1JPUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSsKLSsjZGVmaW5lIGJp bm5faXNfd3JpdGFibGUoaXRlbSkgKGl0ZW0pLT53cml0YWJsZTsKLSsKLSsKLSsvLyBzZXQgdmFs dWVzIG9uIHN0YWNrIGFsbG9jYXRlZCBiaW5uIHN0cnVjdHVyZXMKLSsKLSsjZGVmaW5lIGJpbm5f c2V0X251bGwoaXRlbSkgICAgICAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fTlVMTDsgfSB3 aGlsZSAoMCkKLSsKLSsjZGVmaW5lIGJpbm5fc2V0X2Jvb2woaXRlbSx2YWx1ZSkgICBkbyB7IChp dGVtKS0+dHlwZSA9IEJJTk5fQk9PTDsgKGl0ZW0pLT52Ym9vbCA9IHZhbHVlOyAoaXRlbSktPnB0 ciA9ICYoKGl0ZW0pLT52Ym9vbCk7IH0gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBiaW5uX3NldF9p bnQoaXRlbSx2YWx1ZSkgICAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX0lOVDMyOyAoaXRlbSkt PnZpbnQzMiA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52aW50MzIpOyB9IHdoaWxl ICgwKQotKyNkZWZpbmUgYmlubl9zZXRfaW50NjQoaXRlbSx2YWx1ZSkgIGRvIHsgKGl0ZW0pLT50 eXBlID0gQklOTl9JTlQ2NDsgKGl0ZW0pLT52aW50NjQgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAm KChpdGVtKS0+dmludDY0KTsgfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIGJpbm5fc2V0X3VpbnQo aXRlbSx2YWx1ZSkgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fVUlOVDMyOyAoaXRlbSktPnZ1 aW50MzIgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dnVpbnQzMik7IH0gd2hpbGUg KDApCi0rI2RlZmluZSBiaW5uX3NldF91aW50NjQoaXRlbSx2YWx1ZSkgZG8geyAoaXRlbSktPnR5 cGUgPSBCSU5OX1VJTlQ2NDsgKGl0ZW0pLT52dWludDY0ID0gdmFsdWU7IChpdGVtKS0+cHRyID0g JigoaXRlbSktPnZ1aW50NjQpOyB9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgYmlubl9zZXRfZmxv YXQoaXRlbSx2YWx1ZSkgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9GTE9BVDsgIChpdGVtKS0+ dmZsb2F0ICA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZmxvYXQpOyB9IHdoaWxl ICgwKQotKyNkZWZpbmUgYmlubl9zZXRfZG91YmxlKGl0ZW0sdmFsdWUpIGRvIHsgKGl0ZW0pLT50 eXBlID0gQklOTl9ET1VCTEU7IChpdGVtKS0+dmRvdWJsZSA9IHZhbHVlOyAoaXRlbSktPnB0ciA9 ICYoKGl0ZW0pLT52ZG91YmxlKTsgfSB3aGlsZSAoMCkKLSsKLSsvLyNkZWZpbmUgYmlubl9zZXRf c3RyaW5nKGl0ZW0sc3RyLHBmcmVlKSAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fU1RSSU5H OyAoaXRlbSktPnB0ciA9IHN0cjsgKGl0ZW0pLT5mcmVlZm4gPSBwZnJlZTsgfSB3aGlsZSAoMCkK LSsvLyNkZWZpbmUgYmlubl9zZXRfYmxvYihpdGVtLHB0cixzaXplLHBmcmVlKSBkbyB7IChpdGVt KS0+dHlwZSA9IEJJTk5fQkxPQjsgICAoaXRlbSktPnB0ciA9IHB0cjsgKGl0ZW0pLT5mcmVlZm4g PSBwZnJlZTsgKGl0ZW0pLT5zaXplID0gc2l6ZTsgfSB3aGlsZSAoMCkKLStCT09MIEFQSUVOVFJZ IGJpbm5fc2V0X3N0cmluZyhiaW5uICppdGVtLCBjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUgcGZy ZWUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9zZXRfYmxvYihiaW5uICppdGVtLCB2b2lkICpwdHIs IGludCBzaXplLCBiaW5uX21lbV9mcmVlIHBmcmVlKTsKLSsKLSsKLSsvLyNkZWZpbmUgYmlubl9k b3VibGUodmFsdWUpIHsgICAgICAgKGl0ZW0pLT50eXBlID0gQklOTl9ET1VCTEU7IChpdGVtKS0+ dmRvdWJsZSA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZG91YmxlKSB9Ci0rCi0r Ci0rCi0rLy8gRk9SRUFDSCBNQUNST1MKLSsvLyAtLS0tLS0tLS0tLS0tLQotKy8vCi0rLy8gV2Ug bXVzdCB1c2UgdGhlc2UgZGVjbGFyYXRpb25zIGluc2lkZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2ls bCB1c2UgdGhlIG1hY3JvczoKLSsvLwotKy8vICBiaW5uX2l0ZXIgaXRlcjsKLSsvLyAgYmlubiB2 YWx1ZTsKLSsvLyAgY2hhciBrZXlbMjU2XTsgIC8vIG9ubHkgZm9yIG9iamVjdHMKLSsvLyAgaW50 ICBpZDsgICAgICAgIC8vIG9ubHkgZm9yIG1hcHMKLSsKLSsjZGVmaW5lIGJpbm5fb2JqZWN0X2Zv cmVhY2gob2JqZWN0LCBrZXksIHZhbHVlKSAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIs IG9iamVjdCwgQklOTl9PQkpFQ1QpOyAgIFwKLSsgICAgd2hpbGUgKGJpbm5fb2JqZWN0X25leHQo Jml0ZXIsIGtleSwgJnZhbHVlKSkKLSsKLSsjZGVmaW5lIGJpbm5fbWFwX2ZvcmVhY2gobWFwLCBp ZCwgdmFsdWUpICAgICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIsIG1hcCwgQklO Tl9NQVApOyAgICAgICAgIFwKLSsgICAgd2hpbGUgKGJpbm5fbWFwX25leHQoJml0ZXIsICZpZCwg JnZhbHVlKSkKLSsKLSsjZGVmaW5lIGJpbm5fbGlzdF9mb3JlYWNoKGxpc3QsIHZhbHVlKSAgICAg ICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIsIGxpc3QsIEJJTk5fTElTVCk7ICAg ICAgIFwKLSsgICAgd2hpbGUgKGJpbm5fbGlzdF9uZXh0KCZpdGVyLCAmdmFsdWUpKQotKwotKy8v IElmIHlvdSBuZWVkIG5lc3RlZCBmb3JlYWNoIGxvb3BzLCB1c2UgdGhlIG1hY3JvcyBiZWxvdyBm b3IgdGhlIG5lc3RlZCBsb29wCi0rLy8gQWxzbyB3ZSBuZWVkIHRvIGFkZCBhbiBhZGRpdGlvbmFs IGRlY2xhcmF0aW9uIG9uIHRoZSBmdW5jdGlvbiB0byBob2xkIHRoZSBpdGVyYXRvcgotKy8vIFdl IGNhbiBhZGQgaW4gdGhlIHNhbWUgbGluZSBhcyB0aGUgZmlyc3QgaXRlcmF0b3I6Ci0rLy8KLSsv LyAgYmlubl9pdGVyIGl0ZXIsIGl0ZXIyOwotKwotKyNkZWZpbmUgYmlubl9vYmplY3RfZm9yZWFj aDIob2JqZWN0LCBrZXksIHZhbHVlKSAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBv YmplY3QsIEJJTk5fT0JKRUNUKTsgICBcCi0rICAgIHdoaWxlIChiaW5uX29iamVjdF9uZXh0KCZp dGVyMiwga2V5LCAmdmFsdWUpKQotKwotKyNkZWZpbmUgYmlubl9tYXBfZm9yZWFjaDIobWFwLCBp ZCwgdmFsdWUpICAgICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBtYXAsIEJJ Tk5fTUFQKTsgICAgICAgICBcCi0rICAgIHdoaWxlIChiaW5uX21hcF9uZXh0KCZpdGVyMiwgJmlk LCAmdmFsdWUpKQotKwotKyNkZWZpbmUgYmlubl9saXN0X2ZvcmVhY2gyKGxpc3QsIHZhbHVlKSAg ICAgICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBsaXN0LCBCSU5OX0xJU1Qp OyAgICAgICBcCi0rICAgIHdoaWxlIChiaW5uX2xpc3RfbmV4dCgmaXRlcjIsICZ2YWx1ZSkpCi0r Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKiBTRVQgRlVOQ1RJT05T ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfaW50OChiaW5uICpsaXN0LCBzaWduZWQgY2hhciB2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9JTlQ4LCAmdmFsdWUs IDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9pbnQxNihiaW5uICps aXN0LCBzaG9ydCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9J TlQxNiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRf aW50MzIoYmlubiAqbGlzdCwgaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2FkZChs aXN0LCBCSU5OX0lOVDMyLCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlu bl9saXN0X2FkZF9pbnQ2NChiaW5uICpsaXN0LCBpbnQ2NCB2YWx1ZSkgewotKyAgcmV0dXJuIGJp bm5fbGlzdF9hZGQobGlzdCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDgoYmlubiAqbGlzdCwgdW5zaWduZWQgY2hhciB2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9VSU5UOCwgJnZhbHVl LCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDE2KGJpbm4g Kmxpc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2FkZChs aXN0LCBCSU5OX1VJTlQxNiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbGlzdF9hZGRfdWludDMyKGJpbm4gKmxpc3QsIHVuc2lnbmVkIGludCB2YWx1ZSkgewotKyAg cmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgMCk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3VpbnQ2NChiaW5uICpsaXN0LCB1aW50 NjQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fVUlOVDY0LCAm dmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9mbG9hdChi aW5uICpsaXN0LCBmbG9hdCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwg QklOTl9GTE9BVDMyLCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9s aXN0X2FkZF9kb3VibGUoYmlubiAqbGlzdCwgZG91YmxlIHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9saXN0X2FkZChsaXN0LCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2Jvb2woYmlubiAqbGlzdCwgQk9PTCB2YWx1ZSkgewot KyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9CT09MLCAmdmFsdWUsIDApOwotK30K LStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9udWxsKGJpbm4gKmxpc3QpIHsKLSsg IHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fTlVMTCwgTlVMTCwgMCk7Ci0rfQotK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3N0cihiaW5uICpsaXN0LCBjaGFyICpzdHIp IHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fU1RSSU5HLCBzdHIsIDApOwot K30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9ibG9iKGJpbm4gKmxpc3QsIHZv aWQgKnB0ciwgaW50IHNpemUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5f QkxPQiwgcHRyLCBzaXplKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRf bGlzdChiaW5uICpsaXN0LCB2b2lkICpsaXN0MikgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQo bGlzdCwgQklOTl9MSVNULCBiaW5uX3B0cihsaXN0MiksIGJpbm5fc2l6ZShsaXN0MikpOwotK30K LStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9tYXAoYmlubiAqbGlzdCwgdm9pZCAq bWFwKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX01BUCwgYmlubl9wdHIo bWFwKSwgYmlubl9zaXplKG1hcCkpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0 X2FkZF9vYmplY3QoYmlubiAqbGlzdCwgdm9pZCAqb2JqKSB7Ci0rICByZXR1cm4gYmlubl9saXN0 X2FkZChsaXN0LCBCSU5OX09CSkVDVCwgYmlubl9wdHIob2JqKSwgYmlubl9zaXplKG9iaikpOwot K30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF92YWx1ZShiaW5uICpsaXN0LCBi aW5uICp2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgdmFsdWUtPnR5cGUs IGJpbm5fcHRyKHZhbHVlKSwgYmlubl9zaXplKHZhbHVlKSk7Ci0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotKwotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRf aW50OChiaW5uICptYXAsIGludCBpZCwgc2lnbmVkIGNoYXIgdmFsdWUpIHsKLSsgIHJldHVybiBi aW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQ4LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2ludDE2KGJpbm4gKm1hcCwgaW50IGlkLCBzaG9ydCB2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0lOVDE2LCAmdmFs dWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2ludDMyKGJpbm4g Km1hcCwgaW50IGlkLCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBp ZCwgQklOTl9JTlQzMiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5f bWFwX3NldF9pbnQ2NChiaW5uICptYXAsIGludCBpZCwgaW50NjQgdmFsdWUpIHsKLSsgIHJldHVy biBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxX QVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF91aW50OChiaW5uICptYXAsIGludCBpZCwgdW5z aWduZWQgY2hhciB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5O X1VJTlQ4LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0 X3VpbnQxNihiaW5uICptYXAsIGludCBpZCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKLSsgIHJl dHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgMCk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdWludDMyKGJpbm4gKm1hcCwgaW50IGlk LCB1bnNpZ25lZCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwg QklOTl9VSU5UMzIsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21h cF9zZXRfdWludDY0KGJpbm4gKm1hcCwgaW50IGlkLCB1aW50NjQgdmFsdWUpIHsKLSsgIHJldHVy biBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UNjQsICZ2YWx1ZSwgMCk7Ci0rfQotK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfZmxvYXQoYmlubiAqbWFwLCBpbnQgaWQsIGZs b2F0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQz MiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9kb3Vi bGUoYmlubiAqbWFwLCBpbnQgaWQsIGRvdWJsZSB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFw X3NldChtYXAsIGlkLCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX21hcF9zZXRfYm9vbChiaW5uICptYXAsIGludCBpZCwgQk9PTCB2YWx1ZSkg ewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0JPT0wsICZ2YWx1ZSwgMCk7 Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfbnVsbChiaW5uICptYXAsIGlu dCBpZCkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX05VTEwsIE5VTEws IDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3N0cihiaW5uICptYXAs IGludCBpZCwgY2hhciAqc3RyKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJ Tk5fU1RSSU5HLCBzdHIsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0 X2Jsb2IoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKnB0ciwgaW50IHNpemUpIHsKLSsgIHJldHVy biBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9CTE9CLCBwdHIsIHNpemUpOwotK30KLStBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2xpc3QoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQg Kmxpc3QpIHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9MSVNULCBiaW5u X3B0cihsaXN0KSwgYmlubl9zaXplKGxpc3QpKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbWFwX3NldF9tYXAoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKm1hcDIpIHsKLSsgIHJldHVy biBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9NQVAsIGJpbm5fcHRyKG1hcDIpLCBiaW5uX3Np emUobWFwMikpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X29iamVjdChi aW5uICptYXAsIGludCBpZCwgdm9pZCAqb2JqKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1h cCwgaWQsIEJJTk5fT0JKRUNULCBiaW5uX3B0cihvYmopLCBiaW5uX3NpemUob2JqKSk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdmFsdWUoYmlubiAqbWFwLCBpbnQgaWQs IGJpbm4gKnZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIHZhbHVlLT50 eXBlLCBiaW5uX3B0cih2YWx1ZSksIGJpbm5fc2l6ZSh2YWx1ZSkpOwotK30KLSsKLSsvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmpl Y3Rfc2V0X2ludDgoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHNpZ25lZCBjaGFyIHZhbHVl KSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDgsICZ2YWx1 ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfaW50MTYoYmlu biAqb2JqLCBjb25zdCBjaGFyICprZXksIHNob3J0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9v YmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDE2LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2ludDMyKGJpbm4gKm9iaiwgY29uc3QgY2hhciAq a2V5LCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJ Tk5fSU5UMzIsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVj dF9zZXRfaW50NjQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGludDY0IHZhbHVlKSB7Ci0r ICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDY0LCAmdmFsdWUsIDAp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm4gKm9i aiwgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ4LCAmdmFsdWUsIDApOwotK30KLStBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQxNihiaW5uICpvYmosIGNvbnN0IGNo YXIgKmtleSwgdW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9z ZXQob2JqLCBrZXksIEJJTk5fVUlOVDE2LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwg dW5zaWduZWQgaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5 LCBCSU5OX1VJTlQzMiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5f b2JqZWN0X3NldF91aW50NjQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHVpbnQ2NCB2YWx1 ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9VSU5UNjQsICZ2 YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfZmxvYXQo YmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGZsb2F0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0ZMT0FUMzIsICZ2YWx1ZSwgMCk7Ci0rfQotK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfZG91YmxlKGJpbm4gKm9iaiwgY29uc3Qg Y2hhciAqa2V5LCBkb3VibGUgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2Jq LCBrZXksIEJJTk5fRkxPQVQ2NCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09M IGJpbm5fb2JqZWN0X3NldF9ib29sKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBCT09MIHZh bHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0JPT0wsICZ2 YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfbnVsbChi aW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChv YmosIGtleSwgQklOTl9OVUxMLCBOVUxMLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fb2JqZWN0X3NldF9zdHIoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGNoYXIgKnN0cikg ewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9TVFJJTkcsIHN0ciwg MCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfYmxvYihiaW5uICpv YmosIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqcHRyLCBpbnQgc2l6ZSkgewotKyAgcmV0dXJuIGJp bm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9CTE9CLCBwdHIsIHNpemUpOwotK30KLStBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2xpc3QoYmlubiAqb2JqLCBjb25zdCBjaGFy ICprZXksIHZvaWQgKmxpc3QpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXks IEJJTk5fTElTVCwgYmlubl9wdHIobGlzdCksIGJpbm5fc2l6ZShsaXN0KSk7Ci0rfQotK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfbWFwKGJpbm4gKm9iaiwgY29uc3QgY2hhciAq a2V5LCB2b2lkICptYXApIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJ Tk5fTUFQLCBiaW5uX3B0cihtYXApLCBiaW5uX3NpemUobWFwKSk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX29iamVjdF9zZXRfb2JqZWN0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5 LCB2b2lkICpvYmoyKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5O X09CSkVDVCwgYmlubl9wdHIob2JqMiksIGJpbm5fc2l6ZShvYmoyKSk7Ci0rfQotK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfdmFsdWUoYmlubiAqb2JqLCBjb25zdCBjaGFyICpr ZXksIGJpbm4gKnZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCB2 YWx1ZS0+dHlwZSwgYmlubl9wdHIodmFsdWUpLCBiaW5uX3NpemUodmFsdWUpKTsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKiBHRVQgRlVOQ1RJT05TICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fbGlzdF9nZXRfaW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBzaWdu ZWQgY2hhciAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJ Tk5fSU5UOCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlz dF9nZXRfaW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgc2hvcnQgKnB2YWx1ZSkgewot KyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDE2LCBwdmFsdWUsIE5V TEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9pbnQzMihjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9n ZXQobGlzdCwgcG9zLCBCSU5OX0lOVDMyLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9saXN0X2dldF9pbnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBp bnQ2NCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5f SU5UNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3Rf Z2V0X3VpbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVkIGNoYXIgKnB2YWx1 ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQ4LCBwdmFs dWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50MTYo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdW5zaWduZWQgc2hvcnQgKnB2YWx1ZSkgewotKyAg cmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQxNiwgcHZhbHVlLCBOVUxM KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfdWludDMyKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVkIGludCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDMyLCBwdmFsdWUsIE5VTEwpOwotK30KLStB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50NjQoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcywgdWludDY0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3Qs IHBvcywgQklOTl9VSU5UNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX2xpc3RfZ2V0X2Zsb2F0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGZsb2F0ICpw dmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDMy LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9k b3VibGUoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgZG91YmxlICpwdmFsdWUpIHsKLSsgIHJl dHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDY0LCBwdmFsdWUsIE5VTEwp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9ib29sKGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MsIEJPT0wgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQo bGlzdCwgcG9zLCBCSU5OX0JPT0wsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX2xpc3RfZ2V0X3N0cihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBjaGFyICoq cHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fU1RSSU5H LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9i bG9iKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUsIGludCAqcHNpemUp IHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9CTE9CLCBwdmFsdWUs IHBzaXplKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfbGlzdChjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9s aXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfbWFwKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3Ms IHZvaWQgKipwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklO Tl9NQVAsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3Rf Z2V0X29iamVjdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoqcHZhbHVlKSB7Ci0r ICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fT0JKRUNULCBwdmFsdWUsIE5V TEwpOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX21hcF9nZXRfaW50OChjb25zdCB2b2lkICptYXAsIGludCBpZCwgc2lnbmVkIGNoYXIg KnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDgsIHB2 YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfaW50MTYo Y29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHNob3J0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5u X21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQxNiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9pbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCwg aW50ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQz MiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9p bnQ2NChjb25zdCB2b2lkICptYXAsIGludCBpZCwgaW50NjQgKnB2YWx1ZSkgewotKyAgcmV0dXJu IGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDY0LCBwdmFsdWUsIE5VTEwpOwotK30KLStB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X3VpbnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50 IGlkLCB1bnNpZ25lZCBjaGFyICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFw LCBpZCwgQklOTl9VSU5UOCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbWFwX2dldF91aW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHVuc2lnbmVkIHNo b3J0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5U MTYsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRf dWludDMyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkgewot KyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQzMiwgcHZhbHVlLCBOVUxM KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF91aW50NjQoY29uc3Qgdm9p ZCAqbWFwLCBpbnQgaWQsIHVpbnQ2NCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0 KG1hcCwgaWQsIEJJTk5fVUlOVDY0LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9tYXBfZ2V0X2Zsb2F0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBmbG9hdCAq cHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQzMiwg cHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9kb3Vi bGUoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGRvdWJsZSAqcHZhbHVlKSB7Ci0rICByZXR1cm4g Ymlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQ2NCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0r QUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9ib29sKGNvbnN0IHZvaWQgKm1hcCwgaW50 IGlkLCBCT09MICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklO Tl9CT09MLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBf Z2V0X3N0cihjb25zdCB2b2lkICptYXAsIGludCBpZCwgY2hhciAqKnB2YWx1ZSkgewotKyAgcmV0 dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1NUUklORywgcHZhbHVlLCBOVUxMKTsKLSt9 Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9ibG9iKGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkLCB2b2lkICoqcHZhbHVlLCBpbnQgKnBzaXplKSB7Ci0rICByZXR1cm4gYmlubl9tYXBf Z2V0KG1hcCwgaWQsIEJJTk5fQkxPQiwgcHZhbHVlLCBwc2l6ZSk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX21hcF9nZXRfbGlzdChjb25zdCB2b2lkICptYXAsIGludCBpZCwgdm9pZCAq KnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0xJU1QsIHB2 YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfbWFwKGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkLCB2b2lkICoqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9t YXBfZ2V0KG1hcCwgaWQsIEJJTk5fTUFQLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9tYXBfZ2V0X29iamVjdChjb25zdCB2b2lkICptYXAsIGludCBpZCwgdm9p ZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX09CSkVD VCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsvLyB1 c2FnZToKLSsvLyAgIGlmIChiaW5uX29iamVjdF9nZXRfaW50MzIob2JqLCAia2V5IiwgJnZhbHVl KSA9PSBGQUxTRSkgeHh4OwotKwotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRf aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgc2lnbmVkIGNoYXIgKnB2YWx1 ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQ4LCBwdmFs dWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2ludDE2 KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBzaG9ydCAqcHZhbHVlKSB7Ci0rICBy ZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0lOVDE2LCBwdmFsdWUsIE5VTEwp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2ludDMyKGNvbnN0IHZv aWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5f b2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQzMiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxX QVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9pbnQ2NChjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSwgaW50NjQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dl dChvYmosIGtleSwgQklOTl9JTlQ2NCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fb2JqZWN0X2dldF91aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSwgdW5zaWduZWQgY2hhciAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0 KG9iaiwga2V5LCBCSU5OX1VJTlQ4LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9vYmplY3RfZ2V0X3VpbnQxNihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSwgdW5zaWduZWQgc2hvcnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dl dChvYmosIGtleSwgQklOTl9VSU5UMTYsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX29iamVjdF9nZXRfdWludDMyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5LCB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dl dChvYmosIGtleSwgQklOTl9VSU5UMzIsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX29iamVjdF9nZXRfdWludDY0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5LCB1aW50NjQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmos IGtleSwgQklOTl9VSU5UNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX29iamVjdF9nZXRfZmxvYXQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXks IGZsb2F0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJ Tk5fRkxPQVQzMiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5f b2JqZWN0X2dldF9kb3VibGUoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGRvdWJs ZSAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0ZM T0FUNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVj dF9nZXRfYm9vbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgQk9PTCAqcHZhbHVl KSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JPT0wsIHB2YWx1 ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfc3RyKGNv bnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBjaGFyICoqcHZhbHVlKSB7Ci0rICByZXR1 cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgcHZhbHVlLCBOVUxMKTsK LSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9ibG9iKGNvbnN0IHZvaWQg Km9iaiwgY29uc3QgY2hhciAqa2V5LCB2b2lkICoqcHZhbHVlLCBpbnQgKnBzaXplKSB7Ci0rICBy ZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JMT0IsIHB2YWx1ZSwgcHNpemUp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2xpc3QoY29uc3Qgdm9p ZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHZvaWQgKipwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5u X29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxX QVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBjb25z dCBjaGFyICprZXksIHZvaWQgKipwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQo b2JqLCBrZXksIEJJTk5fTUFQLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9vYmplY3RfZ2V0X29iamVjdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtl eSwgdm9pZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwg QklOTl9PQkpFQ1QsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0X2ludDMyKGJpbm4gKnZhbHVlLCBpbnQgKnBp bnQpOwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF9pbnQ2NChiaW5uICp2YWx1ZSwgaW50NjQg KnBpbnQpOwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUoYmlubiAqdmFsdWUsIGRv dWJsZSAqcGZsb2F0KTsKLStCT09MICAgQVBJRU5UUlkgYmlubl9nZXRfYm9vbChiaW5uICp2YWx1 ZSwgQk9PTCAqcGJvb2wpOwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX2dldF9zdHIoYmlubiAqdmFs dWUpOwotKwotKy8vIGJvb2xlYW4gc3RyaW5nIHZhbHVlczoKLSsvLyAxLCB0cnVlLCB5ZXMsIG9u Ci0rLy8gMCwgZmFsc2UsIG5vLCBvZmYKLSsKLSsvLyBib29sZWFuIG51bWJlciB2YWx1ZXM6Ci0r Ly8gIT0wIFt0cnVlXQotKy8vID09MCBbZmFsc2VdCi0rCi0rCi0rI2lmZGVmIF9fY3BsdXNwbHVz Ci0rfQotKyNlbmRpZgotKwotKyNlbmRpZiAvL0JJTk5fSAotZGlmZiAtTnVyIG9wZW5zc2gtMTAu M3AxLm9yaWcvY2hhbm5lbHMuYyBvcGVuc3NoLTEwLjNwMS9jaGFubmVscy5jCi0tLS0gb3BlbnNz aC0xMC4zcDEub3JpZy9jaGFubmVscy5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICsw MjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY2hhbm5lbHMuYwkyMDI2LTA3LTAyIDA4OjAxOjUxLjQ2 MzAxMDg0OSArMDIwMAotQEAgLTkwLDYgKzkwLDExIEBACi0gLyogTWF4aW11bSBudW1iZXIgb2Yg ZmFrZSBYMTEgZGlzcGxheXMgdG8gdHJ5LiAqLwotICNkZWZpbmUgTUFYX0RJU1BMQVlTICAxMDAw Ci0gCi0rLyogaW4gdmVyc2lvbiBvZiBPcGVuU1NIIGxhdGVyIHRoYW4gOC44IGlmIHdlIGFkdmVy dGlzZSBhIHdpbmRvdwotKyAqIDE2TUIgb3IgbGFyZ2VyIGlzIGNhdXNlcyBhIHBhdGhvbG9naWNh bCBiZWhhdmlvdXIgdGhhdCByZWR1Y2VzCi0rICogdGhyb3VnaHB1dC4gVGhpcyBpcyBub3QgYSBn cmVhdCBzb2x1dGlvbi4gKi8KLSsjZGVmaW5lIE5PTl9IUE5fV0lORE9XX01BWCAoMTUgKiAxMDI0 ICogMTAyNCkKLSsKLSAvKiBQZXItY2hhbm5lbCBjYWxsYmFjayBmb3IgcHJlL3Bvc3QgSU8gYWN0 aW9ucyAqLwotIHR5cGVkZWYgdm9pZCBjaGFuX2ZuKHN0cnVjdCBzc2ggKiwgQ2hhbm5lbCAqYyk7 Ci0gCi1AQCAtMjIyLDYgKzIyNyw5IEBACi0gLyogU2V0dXAgaGVscGVyICovCi0gc3RhdGljIHZv aWQgY2hhbm5lbF9oYW5kbGVyX2luaXQoc3RydWN0IHNzaF9jaGFubmVscyAqc2MpOwotIAotKy8q IGRlZmF1bHQgdmFsdWVzIHRvIGVuYWJsZSBocG4gYW5kIHRoZSBpbml0aWFsIGJ1ZmZlciBzaXpl ICovCi0rc3RhdGljIGludCBocG5fZGlzYWJsZWQgPSAwOwotKwotIC8qIC0tIGNoYW5uZWwgY29y ZSAqLwotIAotIHZvaWQKLUBAIC01MzgsNiArNTQ2LDE2IEBACi0gCSAgICAoYy0+b3V0cHV0ID0g c3NoYnVmX25ldygpKSA9PSBOVUxMIHx8Ci0gCSAgICAoYy0+ZXh0ZW5kZWQgPSBzc2hidWZfbmV3 KCkpID09IE5VTEwpCi0gCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwotKwotKwkvKiB0 aGVzZSBidWZmZXJzIGFyZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgdHJhY2tpbmcgY2hhbm5lbAot KwkgKiBidWZmZXIgdXNhZ2Ugc28gbGFiZWwgYW5kIHR5cGUgdGhlbSB3aXRoIGRlc2NyaXB0aXZl IG5hbWVzICovCi0rCXNzaGJ1Zl9yZWxhYmVsKGMtPmlucHV0LCAiY2hhbm5lbCBpbnB1dCIpOwot Kwlzc2hidWZfdHlwZShjLT5pbnB1dCwgQlVGX0NIQU5ORUxfSU5QVVQpOwotKwlzc2hidWZfcmVs YWJlbChjLT5vdXRwdXQsICJjaGFubmVsIG91dHB1dCIpOwotKwlzc2hidWZfdHlwZShjLT5vdXRw dXQsIEJVRl9DSEFOTkVMX09VVFBVVCk7Ci0rCXNzaGJ1Zl9yZWxhYmVsKGMtPmV4dGVuZGVkLCAi Y2hhbm5lbCBleHRlbmRlZCIpOwotKwlzc2hidWZfdHlwZShjLT5leHRlbmRlZCwgQlVGX0NIQU5O RUxfRVhURU5ERUQpOwotKwotIAlpZiAoKHIgPSBzc2hidWZfc2V0X21heF9zaXplKGMtPmlucHV0 LCBDSEFOX0lOUFVUX01BWCkpICE9IDApCi0gCQlmYXRhbF9mcihyLCAic3NoYnVmX3NldF9tYXhf c2l6ZSIpOwotIAljLT5vc3RhdGUgPSBDSEFOX09VVFBVVF9PUEVOOwotQEAgLTU0OSw2ICs1Njcs NyBAQAotIAljLT5sb2NhbF93aW5kb3cgPSB3aW5kb3c7Ci0gCWMtPmxvY2FsX3dpbmRvd19tYXgg PSB3aW5kb3c7Ci0gCWMtPmxvY2FsX21heHBhY2tldCA9IG1heHBhY2s7Ci0rCWMtPmR5bmFtaWNf d2luZG93ID0gMDsKLSAJYy0+cmVtb3RlX25hbWUgPSB4c3RyZHVwKHJlbW90ZV9uYW1lKTsKLSAJ Yy0+Y3RsX2NoYW4gPSAtMTsKLSAJYy0+ZGVsYXllZCA9IDE7CQkvKiBwcmV2ZW50IGNhbGwgdG8g Y2hhbm5lbF9wb3N0IGhhbmRsZXIgKi8KLUBAIC0xMzIzLDYgKzEzNDIsNDIgQEAKLSAJYy0+aW9f d2FudCA9IFNTSF9DSEFOX0lPX1NPQ0tfVzsKLSB9Ci0gCi0rc3RhdGljIGludAotK2NoYW5uZWxf dGNwd2luc3ooc3RydWN0IHNzaCAqc3NoKQotK3sKLSsJdV9pbnQzMl90IHRjcHdpbnN6ID0gMDsK LSsJc29ja2xlbl90IG9wdHN6ID0gc2l6ZW9mKHRjcHdpbnN6KTsKLSsJaW50IHJldCA9IC0xOwot KwotKwkvKiBpZiB3ZSBhcmVuJ3Qgb24gYSBzb2NrZXQgcmV0dXJuIDEyOEtCICovCi0rCWlmICgh c3NoX3BhY2tldF9jb25uZWN0aW9uX2lzX29uX3NvY2tldChzc2gpKQotKwkJcmV0dXJuIDEyOCAq IDEwMjQ7Ci0rCi0rCS8qIGdldCB0aGUgY3VycmVudCBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZl ciAqLwotKwlyZXQgPSBnZXRzb2Nrb3B0KHNzaF9wYWNrZXRfZ2V0X2Nvbm5lY3Rpb25faW4oc3No KSwKLSsJICAgIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJnRjcHdpbnN6LCAmb3B0c3opOwotKwot KwkvKiBlcnJvciBvbiB0aGUgc29ja2V0IC0gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0r CS8qIHJldHVybiBPcGVuU1NIJ3MgbWF4IHdpbmRvdyBzaXplICovCi0rCWlmIChyZXQgIT0gMCkg ewotKwkJZGVidWdfZigiZ2V0c29ja29wdCBTT19SQ1ZCVUYgZmFpbGVkOiAlcyIsIHN0cmVycm9y KGVycm5vKSk7Ci0rCQlyZXR1cm4gKDIgKiAxMDI0ICogMTAyNCk7Ci0rCX0KLSsKLSsJLyogcmV0 dXJuIG5vIG1vcmUgdGhhbiBTU0hCVUZfU0laRV9NQVggKGN1cnJlbnRseSAxMjhNQikgKi8KLSsJ aWYgKHRjcHdpbnN6ID4gU1NIQlVGX1NJWkVfTUFYKQotKwkJdGNwd2luc3ogPSBTU0hCVUZfU0la RV9NQVg7Ci0rCi0rCS8qIGlmIHRoZSByZW1vdGUgc2lkZSBpcyBPcGVuU1NIIGFmdGVyIHZlcnNp b24gOC44IHdlIG5lZWQgdG8gcmVzdHJpY3QKLSsJICogdGhlIHNpemUgb2YgdGhlIGFkdmVydGlz ZWQgd2luZG93LiBOb3cgdGhpcyBtZWFucyB0aGF0IGFueSBIUE4gdG8gbm9uLUhQTgotKwkgKiBj b25uZWN0aW9uIHdpbGwgYmUgd2luZG93IGxpbWl0ZWQgdG8gMTVNQiBvZiByZWNlaXZlIHNwYWNl LiBUaGlzIGlzIGEKLSsJICogbm9uLW9wdGltYWwgc29sdXRpb24uCi0rCSAqLwotKwlpZiAoKHNz aC0+Y29tcGF0ICYgU1NIX1JFU1RSSUNUX1dJTkRPVykgJiYgKHRjcHdpbnN6ID4gTk9OX0hQTl9X SU5ET1dfTUFYKSkKLSsJCXRjcHdpbnN6ID0gTk9OX0hQTl9XSU5ET1dfTUFYOwotKwlyZXR1cm4g KHRjcHdpbnN6KTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBjaGFubmVsX3ByZV9vcGVuKHN0cnVj dCBzc2ggKnNzaCwgQ2hhbm5lbCAqYykKLSB7Ci1AQCAtMjE3OCw4ICsyMjMzLDYgQEAKLSBzdGF0 aWMgaW50Ci0gY2hhbm5lbF9oYW5kbGVfcmZkKHN0cnVjdCBzc2ggKnNzaCwgQ2hhbm5lbCAqYykK LSB7Ci0tCWNoYXIgYnVmW0NIQU5fUkJVRl07Ci0tCXNzaXplX3QgbGVuOwotIAlpbnQgciwgZm9y Y2U7Ci0gCXNpemVfdCBuciA9IDAsIGhhdmUsIGF2YWlsLCBtYXhsZW4gPSBDSEFOTkVMX01BWF9S RUFEOwotIAlpbnQgcHR5X3plcm9yZWFkID0gMDsKLUBAIC0yMjIzLDYgKzIyNzYsMzAgQEAKLSAJ CXJldHVybiAxOwotIAl9Ci0gCi0rCS8qCi0rCSAqIERhdGFncmFtIG9yIGZpbHRlcmVkIGNoYW5u ZWwgcGF0aDogbmVlZHMgYSB0ZW1wb3Jhcnkgc3RhY2sgYnVmZmVyCi0rCSAqIGJlY2F1c2UgdGhl IGRhdGEgbXVzdCBwYXNzIHRocm91Z2ggaW5wdXRfZmlsdGVyKCkgb3IgYmUgZnJhbWVkIGFzCi0r CSAqIGEgZGF0YWdyYW0gYmVmb3JlIGVudGVyaW5nIGMtPmlucHV0LgotKwkgKgotKwkgKiBidWZb XSAoQ0hBTl9SQlVGID0gMzJLQikgaXMgZGVjbGFyZWQgaW4gdGhpcyBpbm5lciBzY29wZSByYXRo ZXIKLSsJICogdGhhbiBhdCBmdW5jdGlvbiBsZXZlbCB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIHBl bmFsdHkgZnJvbQotKwkgKiAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvLCB3aGljaCBjYXVz ZXMgdGhlIGNvbXBpbGVyIHRvIGVtaXQKLSsJICogYSBtZW1zZXQoKSBmb3IgZXZlcnkgbG9jYWwg dmFyaWFibGUgb24gZnVuY3Rpb24gZW50cnkuICBXaXRoIGJ1ZgotKwkgKiBhdCBmdW5jdGlvbiBz Y29wZSB0aGUgMzJLQiB6ZXJvaW5nIGhhcHBlbnMgb24gZXZlcnkgY2FsbCwgZXZlbgotKwkgKiB0 aG91Z2ggdGhlIHNpbXBsZS1jaGFubmVsIGZhc3QgcGF0aCBhYm92ZSAodGhlIGNvbW1vbiBjYXNl IGZvcgotKwkgKiBidWxrIGRhdGEpIG5ldmVyIHRvdWNoZXMgYnVmLiAgQ1BVIHByb2ZpbGluZyBz aG93ZWQgdGhpcyBkZWFkCi0rCSAqIHplcm9pbmcgY29uc3VtaW5nIH4xMCUgb2YgY2xpZW50IENQ VSBkdXJpbmcgaGlnaC10aHJvdWdocHV0Ci0rCSAqIHRyYW5zZmVycy4gIE1vdmluZyBidWYgaW50 byB0aGlzIHNjb3BlIGxpbWl0cyB0aGUgemVyb2luZyB0bwotKwkgKiBjYWxscyB0aGF0IGFjdHVh bGx5IHRha2UgdGhlIGRhdGFncmFtL2ZpbHRlciBwYXRoLgotKwkgKgotKwkgKiBTZWN1cml0eSBu b3RlOiBidWYgaXMgc3RpbGwgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgdXNlIGluCi0r CSAqIHRoaXMgcGF0aC4gIFRoZSBzaW1wbGUtY2hhbm5lbCBwYXRoIG5ldmVyIGFsbG9jYXRlcyBi dWYgYXQgYWxsLAotKwkgKiBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBv c3VyZS4KLSsJICovCi0rCXsKLSsJY2hhciBidWZbQ0hBTl9SQlVGXTsKLSsJc3NpemVfdCBsZW47 Ci0rCi0gCWVycm5vID0gMDsKLSAJbGVuID0gcmVhZChjLT5yZmQsIGJ1Ziwgc2l6ZW9mKGJ1Zikp OwotIAkvKiBmaXh1cCBBSVggemVyby1sZW5ndGggcmVhZCB3aXRoIGVycm5vIHNldCB0byBsb29r IG1vcmUgbGlrZSBlcnJvcnMgKi8KLUBAIC0yMjM1LDE1ICsyMzEyLDcgQEAKLSAJCWRlYnVnMigi Y2hhbm5lbCAlZDogcmVhZDw9MCByZmQgJWQgbGVuICV6ZDogJXMiLAotIAkJICAgIGMtPnNlbGYs IGMtPnJmZCwgbGVuLAotIAkJICAgIGxlbiA9PSAwID8gImNsb3NlZCIgOiBzdHJlcnJvcihlcnJu bykpOwotLSByZmFpbDoKLS0JCWlmIChjLT50eXBlICE9IFNTSF9DSEFOTkVMX09QRU4pIHsKLS0J CQlkZWJ1ZzIoImNoYW5uZWwgJWQ6IG5vdCBvcGVuIiwgYy0+c2VsZik7Ci0tCQkJY2hhbl9tYXJr X2RlYWQoc3NoLCBjKTsKLS0JCQlyZXR1cm4gLTE7Ci0tCQl9IGVsc2UgewotLQkJCWNoYW5fcmVh ZF9mYWlsZWQoc3NoLCBjKTsKLS0JCX0KLS0JCXJldHVybiAtMTsKLSsJCWdvdG8gcmZhaWw7Ci0g CX0KLSAJY2hhbm5lbF9zZXRfdXNlZF90aW1lKHNzaCwgYyk7Ci0gCWlmIChjLT5pbnB1dF9maWx0 ZXIgIT0gTlVMTCkgewotQEAgLTIyNTgsNiArMjMyNywxNyBAQAotIAkJZmF0YWxfZnIociwgImNo YW5uZWwgJWk6IHB1dCBkYXRhIiwgYy0+c2VsZik7Ci0gCi0gCXJldHVybiAxOwotKwl9IC8qIGVu ZCBkYXRhZ3JhbS9maWx0ZXIgYnVmW10gc2NvcGUgKi8KLSsKLSsgcmZhaWw6Ci0rCWlmIChjLT50 eXBlICE9IFNTSF9DSEFOTkVMX09QRU4pIHsKLSsJCWRlYnVnMigiY2hhbm5lbCAlZDogbm90IG9w ZW4iLCBjLT5zZWxmKTsKLSsJCWNoYW5fbWFya19kZWFkKHNzaCwgYyk7Ci0rCQlyZXR1cm4gLTE7 Ci0rCX0gZWxzZSB7Ci0rCQljaGFuX3JlYWRfZmFpbGVkKHNzaCwgYyk7Ci0rCX0KLSsJcmV0dXJu IC0xOwotIH0KLSAKLSBzdGF0aWMgaW50Ci1AQCAtMjQzOCwxOCArMjUxOCwyOSBAQAotIAkgICAg Yy0+bG9jYWxfbWF4cGFja2V0KjMpIHx8Ci0gCSAgICBjLT5sb2NhbF93aW5kb3cgPCBjLT5sb2Nh bF93aW5kb3dfbWF4LzIpICYmCi0gCSAgICBjLT5sb2NhbF9jb25zdW1lZCA+IDApIHsKLSsJCWlu dCBhZGRpdGlvbiA9IDA7Ci0rCQl1X2ludDMyX3QgdGNwd2luc3ogPSBjaGFubmVsX3RjcHdpbnN6 KHNzaCk7Ci0rCQkvKiBhZGp1c3QgbWF4IHdpbmRvdyBzaXplIGlmIHdlIGFyZSBpbiBhIGR5bmFt aWMgZW52aXJvbm1lbnQKLSsJCSAqIGFuZCB0aGUgdGNwIHJlY2VpdmUgYnVmZmVyIGlzIGxhcmdl ciB0aGFuIHRoZSBzc2ggd2luZG93ICovCi0rCQlpZiAoYy0+ZHluYW1pY193aW5kb3cgJiYgKHRj cHdpbnN6ID4gYy0+bG9jYWxfd2luZG93X21heCkpIHsKLSsJCQkvKiBhZ2dyZXNzaXZlbHkgZ3Jv dyB0aGUgd2luZG93ICovCi0rCQkJYWRkaXRpb24gPSB0Y3B3aW5zeiAtIGMtPmxvY2FsX3dpbmRv d19tYXg7Ci0rCQkJYy0+bG9jYWxfd2luZG93X21heCArPSBhZGRpdGlvbjsKLSsJCQlkZWJ1Z19m KCJDaGFubmVsICVkOiBXaW5kb3cgZ3Jvd3RoIHRvICVkIGJ5ICVkIGJ5dGVzIixjLT5zZWxmLAot KwkJCSAgICAgIGMtPmxvY2FsX3dpbmRvd19tYXgsIGFkZGl0aW9uKTsKLSsJCX0KLSAJCWlmICgh Yy0+aGF2ZV9yZW1vdGVfaWQpCi0gCQkJZmF0YWxfZigiY2hhbm5lbCAlZDogbm8gcmVtb3RlIGlk IiwgYy0+c2VsZik7Ci0gCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLAotIAkJICAgIFNTSDJf TVNHX0NIQU5ORUxfV0lORE9XX0FESlVTVCkpICE9IDAgfHwKLSAJCSAgICAociA9IHNzaHBrdF9w dXRfdTMyKHNzaCwgYy0+cmVtb3RlX2lkKSkgIT0gMCB8fAotLQkJICAgIChyID0gc3NocGt0X3B1 dF91MzIoc3NoLCBjLT5sb2NhbF9jb25zdW1lZCkpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBr dF9wdXRfdTMyKHNzaCwgYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbikpICE9IDAgfHwKLSAJ CSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApIHsKLSAJCQlmYXRhbF9mcihyLCAiY2hh bm5lbCAlaSIsIGMtPnNlbGYpOwotIAkJfQotIAkJZGVidWcyKCJjaGFubmVsICVkOiB3aW5kb3cg JWQgc2VudCBhZGp1c3QgJWQiLCBjLT5zZWxmLAotLQkJICAgIGMtPmxvY2FsX3dpbmRvdywgYy0+ bG9jYWxfY29uc3VtZWQpOwotLQkJYy0+bG9jYWxfd2luZG93ICs9IGMtPmxvY2FsX2NvbnN1bWVk OwotKwkJICAgIGMtPmxvY2FsX3dpbmRvdywgYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbik7 Ci0rCQljLT5sb2NhbF93aW5kb3cgKz0gYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbjsKLSAJ CWMtPmxvY2FsX2NvbnN1bWVkID0gMDsKLSAJfQotIAlyZXR1cm4gMTsKLUBAIC0zMDM4LDkgKzMx MjksNyBAQAotIAkJCSAqIGluIHVzZS4KLSAJCQkgKi8KLSAJCQlpZiAoQ0hBTk5FTF9FRkRfSU5Q VVRfQUNUSVZFKGMpKQotLQkJCQlkZWJ1ZzIoImNoYW5uZWwgJWQ6ICIKLS0JCQkJICAgICJpYnVm X2VtcHR5IGRlbGF5ZWQgZWZkICVkLyglenUpIiwKLS0JCQkJICAgIGMtPnNlbGYsIGMtPmVmZCwg c3NoYnVmX2xlbihjLT5leHRlbmRlZCkpOwotKwkJCQl7fQotIAkJCWVsc2UKLSAJCQkJY2hhbl9p YnVmX2VtcHR5KHNzaCwgYyk7Ci0gCQl9Ci1AQCAtMzc1Miw3ICszODQxLDcgQEAKLSAJCWVycm9y X2ZyKHIsICJwYXJzZSBhZGp1c3QiKTsKLSAJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsICJJ bnZhbGlkIHdpbmRvdyBhZGp1c3QgbWVzc2FnZSIpOwotIAl9Ci0tCWRlYnVnMigiY2hhbm5lbCAl ZDogcmN2ZCBhZGp1c3QgJXUiLCBjLT5zZWxmLCBhZGp1c3QpOwotKwlkZWJ1ZzNfZigiY2hhbm5l bCAlZDogcmN2ZCBhZGp1c3QgJXUiLCBjLT5zZWxmLCBhZGp1c3QpOwotIAlpZiAoKG5ld19yd2lu ID0gYy0+cmVtb3RlX3dpbmRvdyArIGFkanVzdCkgPCBjLT5yZW1vdGVfd2luZG93KSB7Ci0gCQlm YXRhbCgiY2hhbm5lbCAlZDogYWRqdXN0ICV1IG92ZXJmbG93cyByZW1vdGUgd2luZG93ICV1IiwK LSAJCSAgICBjLT5zZWxmLCBhZGp1c3QsIGMtPnJlbW90ZV93aW5kb3cpOwotQEAgLTM4NjcsNiAr Mzk1NiwxMyBAQAotIAlyZXR1cm4gYWRkcjsKLSB9Ci0gCi0rdm9pZAotK2NoYW5uZWxfc2V0X2hw bl9kaXNhYmxlZChpbnQgZXh0ZXJuYWxfaHBuX2Rpc2FibGVkKQotK3sKLSsJaHBuX2Rpc2FibGVk ID0gZXh0ZXJuYWxfaHBuX2Rpc2FibGVkOwotKwlkZWJ1ZygiSFBOIERpc2FibGVkOiAlZCIsIGhw bl9kaXNhYmxlZCk7Ci0rfQotKwotIHN0YXRpYyBpbnQKLSBjaGFubmVsX3NldHVwX2Z3ZF9saXN0 ZW5lcl90Y3BpcChzdHJ1Y3Qgc3NoICpzc2gsIGludCB0eXBlLAotICAgICBzdHJ1Y3QgRm9yd2Fy ZCAqZndkLCBpbnQgKmFsbG9jYXRlZF9saXN0ZW5fcG9ydCwKLWRpZmYgLU51ciBvcGVuc3NoLTEw LjNwMS5vcmlnL2NoYW5uZWxzLmggb3BlbnNzaC0xMC4zcDEvY2hhbm5lbHMuaAotLS0tIG9wZW5z c2gtMTAuM3AxLm9yaWcvY2hhbm5lbHMuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyAr MDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2NoYW5uZWxzLmgJMjAyNi0wNy0wMiAwMDoyNzoyOS43 MjA1NzU1MzQgKzAyMDAKLUBAIC0xODAsNiArMTgwLDcgQEAKLSAJdV9pbnQJbG9jYWxfd2luZG93 X21heDsKLSAJdV9pbnQJbG9jYWxfY29uc3VtZWQ7Ci0gCXVfaW50CWxvY2FsX21heHBhY2tldDsK LSsJaW50CWR5bmFtaWNfd2luZG93OwotIAlpbnQgICAgIGV4dGVuZGVkX3VzYWdlOwotIAlpbnQJ YWdlbnRfbmV3OwkvKiBGb3IgYWdlbnQgbGlzdGVuZXJzLCB1c2UgUkZDIFhYWCByZXFlc3RzICov Ci0gCWludAlzaW5nbGVfY29ubmVjdGlvbjsKLUBAIC0yNjMsNyArMjY0LDcgQEAKLSAjZGVmaW5l IFNTSF9DSEFOX0lPX1NPQ0sJCShTU0hfQ0hBTl9JT19TT0NLX1J8U1NIX0NIQU5fSU9fU09DS19X KQotIAotIC8qIFJlYWQgYnVmZmVyIHNpemUgKi8KLS0jZGVmaW5lIENIQU5fUkJVRgkoMTYqMTAy NCkKLSsjZGVmaW5lIENIQU5fUkJVRglDSEFOX1NFU19QQUNLRVRfREVGQVVMVAotIAotIC8qIE1h eGltdW0gc2l6ZSBmb3IgZGlyZWN0IHJlYWRzIHRvIGJ1ZmZlcnMgKi8KLSAjZGVmaW5lIENIQU5O RUxfTUFYX1JFQUQJQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQKLUBAIC00MTMsNCArNDE0LDYgQEAK LSB2b2lkCSBjaGFuX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgc3NoICosIENoYW5uZWwgKik7Ci0gdm9p ZAkgY2hhbl9vYnVmX2VtcHR5KHN0cnVjdCBzc2ggKiwgQ2hhbm5lbCAqKTsKLSAKLSsvKiBocG4g aGFuZGxlciAqLwotK3ZvaWQJIGNoYW5uZWxfc2V0X2hwbl9kaXNhYmxlZChpbnQpOwotICNlbmRp ZgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLmMgb3BlbnNzaC0xMC4zcDEv Y2lwaGVyLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci5jCTIwMjYtMDctMDIgMDA6 Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLmMJMjAyNi0w Ny0wMiAwODowNTozNS42NTE3OTIxMDYgKzAyMDAKLUBAIC00NywyMyArNDcsNDAgQEAKLSAjaW5j bHVkZSAibWlzYy5oIgotICNpbmNsdWRlICJzc2hidWYuaCIKLSAjaW5jbHVkZSAic3NoZXJyLmgi Ci0rI2luY2x1ZGUgImRpZ2VzdC5oIgotKyNpbmNsdWRlICJsb2cuaCIKLSAKLSAjaW5jbHVkZSAi b3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaCIKLSAKLSsvKiBmb3IgcHJvdmlkZXIgZnVu Y3Rpb25zICovCi0rI2lmZGVmIFdJVEhfT1BFTlNTTDMKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9wYXJhbXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9wcm92 aWRlci5oPgotKyNlbmRpZgotKwotICNpZm5kZWYgV0lUSF9PUEVOU1NMCi0gI2RlZmluZSBFVlBf Q0lQSEVSX0NUWCB2b2lkCi0rI2RlZmluZSBFVlBfQ0lQSEVSIHZvaWQKLSsjZWxzZQotKy8qIGZv ciBtdWx0aS10aHJlYWRlZCBhZXMtY3RyIGNpcGhlciAqLwotK2V4dGVybiBjb25zdCBFVlBfQ0lQ SEVSICpldnBfYWVzX2N0cl9tdCh2b2lkKTsKLSAjZW5kaWYKLSAKLSBzdHJ1Y3Qgc3NoY2lwaGVy X2N0eCB7Ci0gCWludAlwbGFpbnRleHQ7Ci0gCWludAllbmNyeXB0OwotIAlFVlBfQ0lQSEVSX0NU WCAqZXZwOwotKwljb25zdCBFVlBfQ0lQSEVSICptZXRoX3B0cjsgLyp1c2VkIHRvIGZyZWUgbWVt b3J5IGluIGFlc19jdHJfbXQgKi8KLSAJc3RydWN0IGNoYWNoYXBvbHlfY3R4ICpjcF9jdHg7Ci0r I2lmZGVmIFdJVEhfT1BFTlNTTAotKwlzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNwX2N0eF9t dDsKLSsjZW5kaWYKLSAJc3RydWN0IGFlc2N0cl9jdHggYWNfY3R4OyAvKiBYWFggdW5pb24gd2l0 aCBldnA/ICovCi0gCWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcjsKLSB9OwotIAotLXN0 YXRpYyBjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyIGNpcGhlcnNbXSA9IHsKLStzdGF0aWMgc3RydWN0 IHNzaGNpcGhlciBjaXBoZXJzW10gPSB7Ci0gI2lmZGVmIFdJVEhfT1BFTlNTTAotICNpZm5kZWYg T1BFTlNTTF9OT19ERVMKLSAJeyAiM2Rlcy1jYmMiLAkJOCwgMjQsIDAsIDAsIENGTEFHX0NCQywg RVZQX2Rlc19lZGUzX2NiYyB9LAotQEAgLTg1LDYgKzEwMiwxMCBAQAotICNlbmRpZgotIAl7ICJj aGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSIsCi0gCQkJCTgsIDY0LCAwLCAxNiwgQ0ZMQUdf Q0hBQ0hBUE9MWSwgTlVMTCB9LAotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsJeyAiY2hhY2hhMjAt cG9seTEzMDUtbXRAaHBuc3NoLm9yZyIsCi0rCQkJCTgsIDY0LCAwLCAxNiwgQ0ZMQUdfQ0hBQ0hB UE9MWXxDRkxBR19NVCwgTlVMTCB9LAotKyNlbmRpZgotIAl7ICJub25lIiwJCTgsIDAsIDAsIDAs IENGTEFHX05PTkUsIE5VTEwgfSwKLSAKLSAJeyBOVUxMLAkJCTAsIDAsIDAsIDAsIDAsIE5VTEwg fQotQEAgLTEyMSwxMiArMTQyLDYzIEBACi0gI2VuZGlmCi0gfQotIAotKy8qIHVzZWQgdG8gZ2V0 IHRoZSBjaXBoZXIgbmFtZSB3aGVuIHdlIGFyZSB0ZXN0aW5nIHRvCi0rICogc2VlIGlmIHdlIGNh biBtb3ZlIGZyb20gYSBzZXJpYWwgdG8gcGFyYWxsZWwgY2lwaGVyCi0rICogb25seSBjYWxsZWQg aW4gY2lwaGVyLXN3aXRjaC5jCi0rICovCi0rY29uc3QgY2hhciAqCi0rY2lwaGVyX2N0eF9uYW1l KGNvbnN0IHN0cnVjdCBzc2hjaXBoZXJfY3R4ICpjYykKLSt7Ci0rCXJldHVybiBjYy0+Y2lwaGVy LT5uYW1lOwotK30KLSsKLSB1X2ludAotIGNpcGhlcl9ibG9ja3NpemUoY29uc3Qgc3RydWN0IHNz aGNpcGhlciAqYykKLSB7Ci0gCXJldHVybiAoYy0+YmxvY2tfc2l6ZSk7Ci0gfQotIAotK3VpbnQ2 NF90Ci0rY2lwaGVyX3Jla2V5X2Jsb2Nrcyhjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQotK3sK LSsJLyoKLSsJICogQ2hhY2hhMjAtUG9seTEzMDUgZG9lcyBub3QgYmVuZWZpdCBmcm9tIGRhdGEt YmFzZWQgcmVrZXlpbmcsCi0rCSAqIHBlciAiVGhlIFNlY3VyaXR5IG9mIENoYUNoYTIwLVBvbHkx MzA1IGluIHRoZSBNdWx0aS11c2VyIFNldHRpbmciLAotKwkgKiBEZWdhYnJpZWxlLCBKLiBQLiwg R292aW5kZW4sIEosIEd1bnRoZXIsIEYuIGFuZCBQYXRlcnNvbiBLLgotKwkgKiBBQ00gQ0NTIDIw MjE7IGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMjMvMDg1LnBkZgotKwkgKgotKwkgKiBDcnlw dGFuYWx5c2lzIGFzaWRlLCB3ZSBkbyBzdGlsbCB3YW50IGRvIG5lZWQgdG8gcHJldmVudCB0aGUg U1NICi0rCSAqIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZyBhbmQgYWxzbyB0byByZWtleSB0byBw cm92aWRlIHNvbWUKLSsJICogcHJvdGVjdGlvbiBmb3IgbG9uZyBsaXZlZCBzZXNzaW9ucyBhZ2Fp bnN0IGtleSBkaXNjbG9zdXJlIGF0IHRoZQotKwkgKiBlbmRwb2ludHMsIHNvIGFycmFuZ2UgZm9y IHJla2V5aW5nIGV2ZXJ5IDIqKjMyIGJsb2NrcyBhcyB0aGUKLSsJICogMTI4LWJpdCBibG9jayBj aXBoZXJzIGRvIChpLmUuIGV2ZXJ5IDMyR0IgZGF0YSkuCi0rCSAqLwotKwlpZiAoKGMtPmZsYWdz ICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkKLSsJCXJldHVybiAodWludDY0X3QpMSA8PCAzMjsK LSsKLSsJLyogdGhlcmUgaXMgbm8gYWN0dWFsIG5lZWQgdG8gcmVrZXkgdGhlIE5VTEwgY2lwaGVy IGJ1dAotKwkgKiByZWtleWluZyBpcyBhIG5lY2Vzc2FyeSBzdGVwLiBJbiBwYXJ0LCBhcyBtZW50 aW9uZWQgYWJvdmUsCi0rCSAqIHRvIGtlZXAgdGhlIHNlcW5yIGZyb20gd3JhcHBpbmcuIFNvIHdl IHNldCBpdCB0byB0aGUKLSsJICogbWF4aW11bSBwb3NzaWJsZSAtY2pyIDQvMTAvMjMgKi8KLSsJ aWYgKChjLT5mbGFncyAmIENGTEFHX05PTkUpICE9IDApCi0rCQlyZXR1cm4gKHVpbnQ2NF90KTEg PDwgMzI7Ci0rCi0rCS8qCi0rCSAqIFRoZSAyXihibG9ja3NpemUqMikgbGltaXQgaXMgdG9vIGV4 cGVuc2l2ZSBmb3IgM0RFUywKLSsJICogc28gZW5mb3JjZSBhIDFHQiBkYXRhIGxpbWl0IGZvciBz bWFsbCBibG9ja3NpemVzLgotKwkgKiBTZWUgZGlzY3Vzc2lvbiBpbiBSRkM0MzQ0IHNlY3Rpb24g My4yLgotKwkgKi8KLSsJaWYgKGMtPmJsb2NrX3NpemUgPCAxNikKLSsJCXJldHVybiAoKHVpbnQ2 NF90KTEgPDwgMzApIC8gYy0+YmxvY2tfc2l6ZTsKLSsJLyoKLSsJICogT3RoZXJ3aXNlLCB1c2Ug dGhlIFJGQzQzNDQgczMuMiByZWNvbW1lbmRhdGlvbiBvZiAyKiooTC80KSBibG9ja3MKLSsJICog YmVmb3JlIHJla2V5aW5nIHdoZXJlIEwgaXMgdGhlIGJsb2Nrc2l6ZSBpbiBiaXRzLgotKwkgKiBN b3N0IG90aGVyIGNpcGhlcnMgaGF2ZSBhIDEyOCBiaXQgYmxvY2tzaXplLCBzbyB0aGlzIGVxdWF0 ZXMgdG8KLSsJICogMioqMzIgYmxvY2tzIC8gNjRHQiBkYXRhLgotKwkgKi8KLSsJcmV0dXJuICh1 aW50NjRfdCkxIDw8IChjLT5ibG9ja19zaXplICogMik7Ci0rfQotKwotIHVfaW50Ci0gY2lwaGVy X2tleWxlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQotIHsKLUBAIC0xNzAsMTAgKzI0Miwx MCBAQAotIAlyZXR1cm4gY2MtPnBsYWludGV4dDsKLSB9Ci0gCi0tY29uc3Qgc3RydWN0IHNzaGNp cGhlciAqCi0rc3RydWN0IHNzaGNpcGhlciAqCi0gY2lwaGVyX2J5X25hbWUoY29uc3QgY2hhciAq bmFtZSkKLSB7Ci0tCWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmM7Ci0rCXN0cnVjdCBzc2hjaXBo ZXIgKmM7Ci0gCWZvciAoYyA9IGNpcGhlcnM7IGMtPm5hbWUgIT0gTlVMTDsgYysrKQotIAkJaWYg KHN0cmNtcChjLT5uYW1lLCBuYW1lKSA9PSAwKQotIAkJCXJldHVybiBjOwotQEAgLTE5NSw3ICsy NjcsOCBAQAotIAlmb3IgKChwID0gc3Ryc2VwKCZjcCwgQ0lQSEVSX1NFUCkpOyBwICYmICpwICE9 ICdcMCc7Ci0gCSAgICAocCA9IHN0cnNlcCgmY3AsIENJUEhFUl9TRVApKSkgewotIAkJYyA9IGNp cGhlcl9ieV9uYW1lKHApOwotLQkJaWYgKGMgPT0gTlVMTCB8fCAoYy0+ZmxhZ3MgJiBDRkxBR19J TlRFUk5BTCkgIT0gMCkgewotKwkJaWYgKGMgPT0gTlVMTCB8fCAoKGMtPmZsYWdzICYgQ0ZMQUdf SU5URVJOQUwpICE9IDAgJiYKLSsJCQkJICAoYy0+ZmxhZ3MgJiBDRkxBR19OT05FKSAhPSAwKSkg ewotIAkJCWZyZWUoY2lwaGVyX2xpc3QpOwotIAkJCXJldHVybiAwOwotIAkJfQotQEAgLTIxNiw3 ICsyODksNyBAQAotIGludAotIGNpcGhlcl9pbml0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICoqY2Nw LCBjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXIsCi0gICAgIGNvbnN0IHVfY2hhciAqa2V5 LCB1X2ludCBrZXlsZW4sIGNvbnN0IHVfY2hhciAqaXYsIHVfaW50IGl2bGVuLAotLSAgICBpbnQg ZG9fZW5jcnlwdCkKLSsgICAgdV9pbnQgc2VxbnIsIGludCBkb19lbmNyeXB0LCBpbnQgZW5hYmxl X3RocmVhZHMpCi0gewotIAlzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MgPSBOVUxMOwotIAlpbnQg cmV0ID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLUBAIC0yMzEsNiArMzA0LDcgQEAKLSAKLSAJ Y2MtPnBsYWludGV4dCA9IChjaXBoZXItPmZsYWdzICYgQ0ZMQUdfTk9ORSkgIT0gMDsKLSAJY2Mt PmVuY3J5cHQgPSBkb19lbmNyeXB0OwotKwljYy0+bWV0aF9wdHIgPSBOVUxMOwotIAotIAlpZiAo a2V5bGVuIDwgY2lwaGVyLT5rZXlfbGVuIHx8Ci0gCSAgICAoaXYgIT0gTlVMTCAmJiBpdmxlbiA8 IGNpcGhlcl9pdmxlbihjaXBoZXIpKSkgewotQEAgLTI0MCw4ICszMTQsMTkgQEAKLSAKLSAJY2Mt PmNpcGhlciA9IGNpcGhlcjsKLSAJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX0NIQUNI QVBPTFkpICE9IDApIHsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCQlpZiAoKGNjLT5jaXBoZXIt PmZsYWdzICYgQ0ZMQUdfTVQpICE9IDApIHsKLSsJCQljYy0+Y3BfY3R4X210ID0gY2hhY2hhcG9s eV9uZXdfbXQoc2VxbnIsIGtleSwga2V5bGVuKTsKLSsJCQlyZXQgPSBjYy0+Y3BfY3R4X210ICE9 IE5VTEwgPyAwIDoKLSsJCQkgICAgU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwotKwkJfSBlbHNl IHsKLSsJCQljYy0+Y3BfY3R4ID0gY2hhY2hhcG9seV9uZXcoa2V5LCBrZXlsZW4pOwotKwkJCXJl dCA9IGNjLT5jcF9jdHggIT0gTlVMTCA/IDAgOiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0r CQl9Ci0rI2Vsc2UKLSAJCWNjLT5jcF9jdHggPSBjaGFjaGFwb2x5X25ldyhrZXksIGtleWxlbik7 Ci0gCQlyZXQgPSBjYy0+Y3BfY3R4ICE9IE5VTEwgPyAwIDogU1NIX0VSUl9JTlZBTElEX0FSR1VN RU5UOwotKyNlbmRpZgotIAkJZ290byBvdXQ7Ci0gCX0KLSAJaWYgKChjYy0+Y2lwaGVyLT5mbGFn cyAmIENGTEFHX05PTkUpICE9IDApIHsKLUBAIC0yNjMsNiArMzQ4LDUzIEBACi0gCQlyZXQgPSBT U0hfRVJSX0FMTE9DX0ZBSUw7Ci0gCQlnb3RvIG91dDsKLSAJfQotKwkvKiB0aGUgZm9sbG93aW5n IGJsb2NrIGlzIGZvciBBRVMtQ1RSLU1UIGNpcGhlciBzd2l0Y2hpbmcKLSsJICogaWYgd2UgYXJl IHVzaW5nIHRoZSBjdHIgY2lwaGVyIGFuZCB3ZSBhcmUgcG9zdC1hdXRoIHRoZW4KLSsJICogc3Rh cnQgdGhlIHRocmVhZGVkIGNpcGhlci4gSWYgT1NTTCBzdXBwb3J0cyBwcm92aWRlcnMgKE9TU0wg My4wKykgdGhlbgotKwkgKiB3ZSBsb2FkIG91ciBocG5zc2ggcHJvdmlkZXIuIElmIGl0IGRvZXNu J3QgKE9TU0wgPCAxLjEpIHRoZW4gd2UgdXNlIHRoZQotKwkgKiBfbWV0aF9uZXcgcHJvY2VzcyBm b3VuZCBpbiBjaXBoZXItY3RyLW10LmMgKi8KLSsJaWYgKHN0cnN0cihjYy0+Y2lwaGVyLT5uYW1l LCAiY3RyIikgJiYgZW5hYmxlX3RocmVhZHMpIHsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMMwotKwkJ LyogdGhpcyB2ZXJzaW9uIG9mIG9wZW5zc2wgdXNlcyBwcm92aWRlcnMgKi8KLSsJCU9TU0xfTElC X0NUWCAqYWVzX2xpYiA9IE5VTEw7IC8qIHByb2JhYmx5IG5vdCBuZWVkZWQgKi8KLSsJCU9TU0xf UFJPVklERVIgKmFlc19tdF9wcm92aWRlciA9IE5VTEw7Ci0rCQl0eXBlID0gTlVMTDsKLSsKLSsJ CWlmIChPU1NMX1BST1ZJREVSX2FkZF9idWlsdGluKGFlc19saWIsICJocG5zc2giLAotKwkJCQkJ ICAgICAgT1NTTF9wcm92aWRlcl9pbml0KSAhPSAxKSB7Ci0rCQkJZmF0YWwoIkZhaWxlZCB0byBh ZGQgSFBOU1NIIHByb3ZpZGVyIGZvciBBRVMtQ1RSIik7Ci0rCQl9Ci0rCQlhZXNfbXRfcHJvdmlk ZXIgPSBPU1NMX1BST1ZJREVSX2xvYWQoYWVzX2xpYiwgImhwbnNzaCIpOwotKwotKwkJaWYgKGFl c19tdF9wcm92aWRlciAhPSBOVUxMKSB7Ci0rCQkJLyogdXNlIHRoZSBwcmV2aW91cyBrZXkgbGVu Z3RoIHRvIGRldGVybWluZSB3aGljaCBjaXBoZXIgdG8gbG9hZCAqLwotKwkJCWlmIChjaXBoZXIt PmtleV9sZW4gPT0gMzIpCi0rCQkJCXR5cGUgPSBFVlBfQ0lQSEVSX2ZldGNoKGFlc19saWIsICJh ZXNfY3RyX210XzI1NiIsIE5VTEwpOwotKwkJCWlmIChjaXBoZXItPmtleV9sZW4gPT0gMjQpCi0r CQkJCXR5cGUgPSBFVlBfQ0lQSEVSX2ZldGNoKGFlc19saWIsICJhZXNfY3RyX210XzE5MiIsIE5V TEwpOwotKwkJCWlmIChjaXBoZXItPmtleV9sZW4gPT0gMTYpCi0rCQkJCXR5cGUgPSBFVlBfQ0lQ SEVSX2ZldGNoKGFlc19saWIsICJhZXNfY3RyX210XzEyOCIsIE5VTEwpOwotKwkJCWlmICh0eXBl ID09IE5VTEwpIHsKLSsJCQkJRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotKwkJCQlmYXRh bCgiRkFJTEVEIFRPIExPQUQgYWVzX2N0cl9tdCIpOwotKwkJCX0gZWxzZSB7Ci0rCQkJCWRlYnVn KCJMT0FERUQgYWVzX2N0cl9tdCIpOwotKwkJCX0KLSsJCX0KLSsJCWVsc2UgewotKwkJCUVSUl9w cmludF9lcnJvcnNfZnAoc3RkZXJyKTsKLSsJCQlmYXRhbCgiRmFpbGVkIHRvIGxvYWQgSFBOLVNT SCBBRVMtQ1RSLU1UIHByb3ZpZGVyLiIpOwotKwkJfQotKyNlbHNlCi0rCQl0eXBlID0gKCpldnBf YWVzX2N0cl9tdCkoKTsgLyogc2VlIGNpcGhlci1jdHItbXQuYyAqLwotKwkJLyogd2UgbmVlZCB0 byBmcmVlIHRoaXMgbGF0ZXIgaWYgdXNpbmcgYWVzX2N0cl9tdAotKwkJICogdW5kZXIgT1NTTCAx LjEuIEhvbmVzdGx5LCB3ZSBjb3VsZCBhdm9pZCB0aGlzIGJ5IG1ha2luZwotKwkJICogaXQgYSBn bG9iYWwgaW4gY2lwaGVyLWN0cl9tdC5jIGFuZCBleHBvcnRpbmcgaXQgaGVyZQotKwkJICogdGhl biB3ZSdkIG9ubHkgaGF2ZSB0byBjYWxsIEVWUF9DSVBIRVJfbWV0aCBvbmNlIGJ1dCB0aGlzCi0r CQkgKiB3b3JrcyBmb3Igbm93LiBUT0RPOiBUaGlzLiBjanIgMDIuMjIuMjAyMyAqLwotKwkJY2Mt Pm1ldGhfcHRyID0gdHlwZTsKLSsjZW5kaWYgLyogV0lUSF9PUEVOU1NMMyAqLwotKwl9IC8qIGlm IChzdHJzdHIoKSkgKi8KLSAJaWYgKEVWUF9DaXBoZXJJbml0KGNjLT5ldnAsIHR5cGUsIE5VTEws ICh1X2NoYXIgKilpdiwKLSAJICAgIChkb19lbmNyeXB0ID09IENJUEhFUl9FTkNSWVBUKSkgPT0g MCkgewotIAkJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci1AQCAtMzE3LDYgKzQ0OSwx MiBAQAotICAgIGNvbnN0IHVfY2hhciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwgdV9p bnQgYXV0aGxlbikKLSB7Ci0gCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQ T0xZKSAhPSAwKSB7Ci0rI2lmZGVmIFdJVEhfT1BFTlNTTAotKwkJaWYgKChjYy0+Y2lwaGVyLT5m bGFncyAmIENGTEFHX01UKSAhPSAwKSB7Ci0rCQkJcmV0dXJuIGNoYWNoYXBvbHlfY3J5cHRfbXQo Y2MtPmNwX2N0eF9tdCwgc2VxbnIsIGRlc3QsCi0rCQkJICAgIHNyYywgbGVuLCBhYWRsZW4sIGF1 dGhsZW4sIGNjLT5lbmNyeXB0KTsKLSsJCX0KLSsjZW5kaWYKLSAJCXJldHVybiBjaGFjaGFwb2x5 X2NyeXB0KGNjLT5jcF9jdHgsIHNlcW5yLCBkZXN0LCBzcmMsCi0gCQkgICAgbGVuLCBhYWRsZW4s IGF1dGhsZW4sIGNjLT5lbmNyeXB0KTsKLSAJfQotQEAgLTM3OSw5ICs1MTcsMTYgQEAKLSBjaXBo ZXJfZ2V0X2xlbmd0aChzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MsIHVfaW50ICpwbGVucCwgdV9p bnQgc2VxbnIsCi0gICAgIGNvbnN0IHVfY2hhciAqY3AsIHVfaW50IGxlbikKLSB7Ci0tCWlmICgo Y2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAhPSAwKQotKwlpZiAoKGNjLT5j aXBoZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkgewotKyNpZmRlZiBXSVRIX09Q RU5TU0wKLSsJCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19NVCkgIT0gMCkgewotKwkJ CXJldHVybiBjaGFjaGFwb2x5X2dldF9sZW5ndGhfbXQoY2MtPmNwX2N0eF9tdCwgcGxlbnAsCi0r CQkJICAgIHNlcW5yLCBjcCwgbGVuKTsKLSsJCX0KLSsjZW5kaWYKLSAJCXJldHVybiBjaGFjaGFw b2x5X2dldF9sZW5ndGgoY2MtPmNwX2N0eCwgcGxlbnAsIHNlcW5yLAotIAkJICAgIGNwLCBsZW4p OwotKwl9Ci0gCWlmIChsZW4gPCA0KQotIAkJcmV0dXJuIFNTSF9FUlJfTUVTU0FHRV9JTkNPTVBM RVRFOwotIAkqcGxlbnAgPSBQRUVLX1UzMihjcCk7Ci1AQCAtMzk0LDEzICs1MzksMzUgQEAKLSAJ aWYgKGNjID09IE5VTEwgfHwgY2MtPmNpcGhlciA9PSBOVUxMKQotIAkJcmV0dXJuOwotIAlpZiAo KGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkgewotKyNpZmRlZiBX SVRIX09QRU5TU0wKLSsJCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19NVCkgIT0gMCkg ewotKwkJCWNoYWNoYXBvbHlfZnJlZV9tdChjYy0+Y3BfY3R4X210KTsKLSsJCQljYy0+Y3BfY3R4 X210ID0gTlVMTDsKLSsJCX0gZWxzZSB7Ci0rCQkJY2hhY2hhcG9seV9mcmVlKGNjLT5jcF9jdHgp OwotKwkJCWNjLT5jcF9jdHggPSBOVUxMOwotKwkJfQotKyNlbHNlCi0gCQljaGFjaGFwb2x5X2Zy ZWUoY2MtPmNwX2N0eCk7Ci0gCQljYy0+Y3BfY3R4ID0gTlVMTDsKLSsjZW5kaWYKLSAJfSBlbHNl IGlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19BRVNDVFIpICE9IDApCi0gCQlleHBsaWNp dF9iemVybygmY2MtPmFjX2N0eCwgc2l6ZW9mKGNjLT5hY19jdHgpKTsKLSAjaWZkZWYgV0lUSF9P UEVOU1NMCi0gCUVWUF9DSVBIRVJfQ1RYX2ZyZWUoY2MtPmV2cCk7Ci0gCWNjLT5ldnAgPSBOVUxM OwotKwkvKiBpZiBtZXRoX3B0ciBpc24ndCBudWxsIHRoZW4gd2UgYXJlIHVzaW5nIHRoZSBhZXNf Y3RyX210Ci0rCSAqIGV2cF9jaXBoZXJfbWV0aF9uZXcoKSBpbiBjaXBoZXItY3RyLW10LmMgdW5k ZXIgT1NTTCAxLjEKLSsJICogaWYgd2UgZG9uJ3QgZXhwbGljaXRseSBmcmVlIGl0IHRoZW4sIGV2 ZW4gdGhvdWdoIHdlIGZyZWUKLSsJICogdGhlIGN0eCBpdCBpcyBhIHBhcnQgb2YgaXQgZG9lc24n dCBnZXQgZnJlZWQuIFNvLi4uCi0rCSAqIGNqciAyLzcvMjAyMwotKwkgKi8KLSsjaWYgIWRlZmlu ZWQoV0lUSF9PUEVOU1NMMykKLSsJaWYgKGNjLT5tZXRoX3B0ciAhPSBOVUxMKSB7Ci0rCQlFVlBf Q0lQSEVSX21ldGhfZnJlZSgodm9pZCAqKShFVlBfQ0lQSEVSICopY2MtPm1ldGhfcHRyKTsKLSsJ CWNjLT5tZXRoX3B0ciA9IE5VTEw7Ci0rCX0KLSsjZW5kaWYKLSAjZW5kaWYKLSAJZnJlZXplcm8o Y2MsIHNpemVvZigqY2MpKTsKLSB9Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBo ZXItY2hhY2hhcG9seS5jIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LmMKLS0tLSBv cGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LmMJMjAyNi0wNy0wMiAwMDoyNzow Ni4wOTI1ODg3ODMgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY2hhY2hhcG9seS5j CTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIxMTQ0NDk2ICswMjAwCi1AQCAtODgsNyArODgsNyBAQAot IAlpZiAoIWRvX2VuY3J5cHQpIHsKLSAJCWNvbnN0IHVfY2hhciAqdGFnID0gc3JjICsgYWFkbGVu ICsgbGVuOwotIAotLQkJcG9seTEzMDVfYXV0aChleHBlY3RlZF90YWcsIHNyYywgYWFkbGVuICsg bGVuLCBwb2x5X2tleSk7Ci0rCQlwb2x5MTMwNV9hdXRoKE5VTEwsIGV4cGVjdGVkX3RhZywgc3Jj LCBhYWRsZW4gKyBsZW4sIHBvbHlfa2V5KTsKLSAJCWlmICh0aW1pbmdzYWZlX2JjbXAoZXhwZWN0 ZWRfdGFnLCB0YWcsIFBPTFkxMzA1X1RBR0xFTikgIT0gMCkgewotIAkJCXIgPSBTU0hfRVJSX01B Q19JTlZBTElEOwotIAkJCWdvdG8gb3V0OwotQEAgLTEwOCw3ICsxMDgsNyBAQAotIAotIAkvKiBJ ZiBlbmNyeXB0aW5nLCBjYWxjdWxhdGUgYW5kIGFwcGVuZCB0YWcgKi8KLSAJaWYgKGRvX2VuY3J5 cHQpIHsKLS0JCXBvbHkxMzA1X2F1dGgoZGVzdCArIGFhZGxlbiArIGxlbiwgZGVzdCwgYWFkbGVu ICsgbGVuLAotKwkJcG9seTEzMDVfYXV0aChOVUxMLCBkZXN0ICsgYWFkbGVuICsgbGVuLCBkZXN0 LCBhYWRsZW4gKyBsZW4sCi0gCQkgICAgcG9seV9rZXkpOwotIAl9Ci0gCXIgPSAwOwotZGlmZiAt TnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLmMgb3Bl bnNzaC0xMC4zcDEvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLmMKLS0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by5jCTIwMjYtMDctMDIgMDA6Mjc6 MDYuMDkyNTg4NzgzICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLWNoYWNoYXBvbHkt bGliY3J5cHRvLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjEzMzUxNjcgKzAyMDAKLUBAIC0zMiw4 ICszMiwxOCBAQAotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAiY2lwaGVyLWNoYWNo YXBvbHkuaCIKLSAKLSsKLSsvKiB1c2luZyB0aGUgRVZQX01BQyBpbnRlcmZhY2UgZm9yIHBvbHkx MzA1IGlzIHNpZ25pZmljYW50bHkKLSsgKiBmYXN0ZXIgdGhhbiB0aGUgdmVyc2lvbiBidW5kbGVk IHdpdGggT3BlblNTSC4gSG93ZXZlciwKLSsgKiB0aGlzIGludGVyZmFjZSBpcyBvbmx5IGF2YWls YWJsZSBpbiBPcGVuU1NMIDMuMCsKLSsgKiAtY2pyIDEwLzIxLzIwMjIgKi8KLSBzdHJ1Y3QgY2hh Y2hhcG9seV9jdHggewotIAlFVlBfQ0lQSEVSX0NUWCAqbWFpbl9ldnAsICpoZWFkZXJfZXZwOwot KyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKLSsJRVZQX01BQ19DVFggICAgKnBvbHlfY3R4 OwotKyNlbHNlCi0rCWNoYXIgICAgICAgICAgICpwb2x5X2N0eDsKLSsjZW5kaWYKLSB9OwotIAot IHN0cnVjdCBjaGFjaGFwb2x5X2N0eCAqCi1AQCAtNTQsNiArNjQsMTUgQEAKLSAJCWdvdG8gZmFp bDsKLSAJaWYgKEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aChjdHgtPmhlYWRlcl9ldnApICE9IDE2 KQotIAkJZ290byBmYWlsOwotKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKLSsJRVZQX01B QyAqbWFjID0gTlVMTDsKLSsJaWYgKChtYWMgPSBFVlBfTUFDX2ZldGNoKE5VTEwsICJQT0xZMTMw NSIsIE5VTEwpKSA9PSBOVUxMKQotKwkJZ290byBmYWlsOwotKwlpZiAoKGN0eC0+cG9seV9jdHgg PSBFVlBfTUFDX0NUWF9uZXcobWFjKSkgPT0gTlVMTCkKLSsJCWdvdG8gZmFpbDsKLSsjZWxzZQot KwljdHgtPnBvbHlfY3R4ID0gTlVMTDsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eDsKLSAgZmFpbDoK LSAJY2hhY2hhcG9seV9mcmVlKGN0eCk7Ci1AQCAtNjcsNiArODYsOSBAQAotIAkJcmV0dXJuOwot IAlFVlBfQ0lQSEVSX0NUWF9mcmVlKGNwY3R4LT5tYWluX2V2cCk7Ci0gCUVWUF9DSVBIRVJfQ1RY X2ZyZWUoY3BjdHgtPmhlYWRlcl9ldnApOwotKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAK LSsJRVZQX01BQ19DVFhfZnJlZShjcGN0eC0+cG9seV9jdHgpOwotKyNlbmRpZgotIAlmcmVlemVy byhjcGN0eCwgc2l6ZW9mKCpjcGN0eCkpOwotIH0KLSAKLUBAIC0xMDUsNyArMTI3LDcgQEAKLSAJ aWYgKCFkb19lbmNyeXB0KSB7Ci0gCQljb25zdCB1X2NoYXIgKnRhZyA9IHNyYyArIGFhZGxlbiAr IGxlbjsKLSAKLS0JCXBvbHkxMzA1X2F1dGgoZXhwZWN0ZWRfdGFnLCBzcmMsIGFhZGxlbiArIGxl biwgcG9seV9rZXkpOwotKwkJcG9seTEzMDVfYXV0aChjdHgtPnBvbHlfY3R4LCBleHBlY3RlZF90 YWcsIHNyYywgYWFkbGVuICsgbGVuLCBwb2x5X2tleSk7Ci0gCQlpZiAodGltaW5nc2FmZV9iY21w KGV4cGVjdGVkX3RhZywgdGFnLCBQT0xZMTMwNV9UQUdMRU4pICE9IDApIHsKLSAJCQlyID0gU1NI X0VSUl9NQUNfSU5WQUxJRDsKLSAJCQlnb3RvIG91dDsKLUBAIC0xMzEsNyArMTUzLDcgQEAKLSAK LSAJLyogSWYgZW5jcnlwdGluZywgY2FsY3VsYXRlIGFuZCBhcHBlbmQgdGFnICovCi0gCWlmIChk b19lbmNyeXB0KSB7Ci0tCQlwb2x5MTMwNV9hdXRoKGRlc3QgKyBhYWRsZW4gKyBsZW4sIGRlc3Qs IGFhZGxlbiArIGxlbiwKLSsJCXBvbHkxMzA1X2F1dGgoY3R4LT5wb2x5X2N0eCwgZGVzdCArIGFh ZGxlbiArIGxlbiwgZGVzdCwgYWFkbGVuICsgbGVuLAotIAkJICAgIHBvbHlfa2V5KTsKLSAJfQot IAlyID0gMDsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5 LWxpYmNyeXB0by1tdC5jIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0 by1tdC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlw dG8tbXQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2gt MTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5jCTIwMjYtMDctMDIgMDA6Mjc6 MjkuNzIxNTQxMDI0ICswMjAwCi1AQCAtMCwwICsxLDcwNSBAQAotKy8qCi0rICogQ29weXJpZ2h0 IChjKSAyMDIzIFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVy c2l0eS4KLSsgKgotKyAqICBBdXRob3I6IE1pdGNoZWxsIERvcnJlbGwgPG13ZEBwc2MuZWR1Pgot KyAqICBBdXRob3I6IENocmlzIFJhcGllciAgPHJhcGllckBwc2MuZWR1PgotKyAqCi0rICogVGhp cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgotKyAq Ci0rICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0rICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0rICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0rICoKLSsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBN SVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKLSsgKiBpZiBub3QsIHNlZSBodHRw Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgotKyAqCi0rICovCi0rCi0rLyogVE9ETzog YXVkaXQgaW5jbHVkZXMgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsjaWZkZWYgV0lU SF9PUEVOU1NMCi0rI2luY2x1ZGUgIm9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmgiCi0r I2VuZGlmCi0rCi0rI2lmIGRlZmluZWQoSEFWRV9FVlBfQ0hBQ0hBMjApICYmICFkZWZpbmVkKEhB VkVfQlJPS0VOX0NIQUNIQTIwKQotKwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVk ZSA8dW5pc3RkLmg+IC8qIG5lZWRlZCBmb3IgZ2V0cGlkIHVuZGVyIEM5OSAqLwotKyNpbmNsdWRl IDxzdGRhcmcuaD4gLyogbmVlZGVkIGZvciBsb2cuaCAqLwotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIG5lZWRlZCBmb3IgbWlzYy5oICovCi0rI2luY2x1ZGUg PHB0aHJlYWQuaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLSsjaW5jbHVkZSAi ZGVmaW5lcy5oIgotKyNpbmNsdWRlICJsb2cuaCIKLSsjaW5jbHVkZSAic3NoYnVmLmgiCi0rI2lu Y2x1ZGUgInNzaGVyci5oIgotKwotKyNpbmNsdWRlICJ4bWFsbG9jLmgiCi0rI2luY2x1ZGUgImNp cGhlci1jaGFjaGFwb2x5LmgiCi0rI2luY2x1ZGUgImNpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0 by1tdC5oIgotKwotKyNpZm5kZWYgbGlrZWx5Ci0rIyBkZWZpbmUgbGlrZWx5KHgpICAgX19idWls dGluX2V4cGVjdCghISh4KSwgMSkKLSsjZW5kaWYKLSsjaWZuZGVmIHVubGlrZWx5Ci0rIyBkZWZp bmUgdW5saWtlbHkoeCkgX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKLSsjZW5kaWYKLSsKLSsv KiBTaXplIG9mIGtleXN0cmVhbSB0byBwcmVnZW5lcmF0ZSwgbWVhc3VyZWQgaW4gYnl0ZXMKLSsg KiB3ZSB3YW50IHRvIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IGNoYWNoYSBibG9jayBhbmQgaGF2 ZQotKyAqIDEyOCBieXRlcyBmb3Igb3ZlcmhlYWQgKi8KLSsjZGVmaW5lIFJPVU5EX1VQKHgseSkg KCgoKCh4KS0xKS8oeSkpKzEpKih5KSkKLSsjZGVmaW5lIEtFWVNUUkVBTUxFTiAoUk9VTkRfVVAo KFNTSF9JT0JVRlNaKSArIDEyOCwgKENIQUNIQV9CTE9DS0xFTikpKQotKwotKy8qIEJFR0lOIFRV TkFCTEVTICovCi0rCi0rLyogTnVtYmVyIG9mIHdvcmtlciB0aHJlYWRzIHRvIHNwYXduLiAqLwot Ky8qIHRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IG1haW4gaXMgbmV2ZXIKLSsgKiB3YWl0aW5n IG9uIHRoZSB3b3JrZXIgdGhyZWFkcyBmb3Iga2V5c3RyZWFtIGRhdGEgKi8KLSsjZGVmaW5lIE5V TVRIUkVBRFMgMQotKwotKy8qIDY0IHNlZW1zIHRvIGJlIGEgcHJldHR5IGJsYW5jZSBiZXR3ZWVu IG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UKLSsgKiAxMjggaXMgYW5vdGhlciBvcHRpb24gd2l0aCBz b21ld2hhdCBoaWdoZXIgbWVtb3J5IGNvbnN1bXB0aW9uICovCi0rI2RlZmluZSBOVU1TVFJFQU1T IDY0Ci0rCi0rLyogRU5EIFRVTkFCTEVTICovCi0rCi0rc3RydWN0IG10X2tleXN0cmVhbSB7Ci0r CXVfY2hhciBwb2x5X2tleVtQT0xZMTMwNV9LRVlMRU5dOyAgICAgLyogUE9MWTEzMDVfS0VZTEVO ID09IDMyICovCi0rCXVfY2hhciBoZWFkZXJTdHJlYW1bQ0hBQ0hBX0JMT0NLTEVOXTsgLyogQ0hB Q0hBX0JMT0NLTEVOID09IDY0ICovCi0rCXVfY2hhciBtYWluU3RyZWFtW0tFWVNUUkVBTUxFTl07 ICAgICAgLyogS0VZU1RSRUFNTEVOID09IDMyNzY4ICovCi0rfTsKLSsKLStzdHJ1Y3QgdGhyZWFk RGF0YSB7Ci0rCUVWUF9DSVBIRVJfQ1RYICogbWFpbl9ldnA7Ci0rCUVWUF9DSVBIRVJfQ1RYICog aGVhZGVyX2V2cDsKLSsJdV9jaGFyIHNlcWJ1ZlsxNl07Ci0rfTsKLSsKLStzdHJ1Y3QgbXRfa2V5 c3RyZWFtX2JhdGNoIHsKLSsJdV9pbnQgYmF0Y2hJRDsKLSsJc3RydWN0IHRocmVhZERhdGEgdGRz W05VTVRIUkVBRFNdOwotKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtIHN0cmVhbXNbTlVNU1RSRUFNU107 Ci0rfTsKLSsKLStzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgewotKwl1X2ludCBzZXFucjsKLSsJ dV9pbnQgYmF0Y2hJRDsKLSsKLSsJc3RydWN0IG10X2tleXN0cmVhbV9iYXRjaCBiYXRjaGVzWzJd OwotKwotKwlwdGhyZWFkX3QgbWFuYWdlcl90aWRbMl07Ci0rCXB0aHJlYWRfdCBzZWxmX3RpZDsK LSsKLSsJcGlkX3QgbWFpbnBpZDsKLSsJdV9jaGFyIHplcm9zW0tFWVNUUkVBTUxFTl07IC8qIEtF WVNUUkVBTUxFTiA9PSAzMjc2OCAqLwotKwotKyAgLyogaWYgT3BlblNTTCBoYXMgc3VwcG9ydCBm b3IgUG9seTEzMDUgaW4gdGhlIE1BQyBFVlBzCi0rICAgKiB1c2UgdGhhdCAoT1NTTCA+PSAzLjAp IGlmIG5vdCB0aGVuIGl0J3MgT1NTTCAxLjEgc28KLSsgICAqIHVzZSB0aGUgUG9seTEzMDUgZGln ZXN0IG1ldGhvZHMuIEZhaWxpbmcgdGhhdCB1c2UgdGhlCi0rICAgKiBpbnRlcm5hbCBwb2x5MTMw NSBtZXRob2RzICovCi0rI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAotKwlFVlBfTUFDX0NU WCAgICAqcG9seV9jdHg7Ci0rI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5l ZChFVlBfUEtFWV9QT0xZMTMwNSkKLSsJRVZQX1BLRVlfQ1RYICAgKnBvbHlfY3R4OwotKwlFVlBf TURfQ1RYICAgICAqbWRfY3R4OwotKwlFVlBfUEtFWSAgICAgICAqcGtleTsKLSsJc2l6ZV90ICAg ICAgICAgcHRhZ2xlbjsKLSsjZWxzZQotKwljaGFyICAgICAgICAgICAqcG9seV9jdHg7Ci0rI2Vu ZGlmCi0rfTsKLSsKLStzdHJ1Y3QgbWFuYWdlcl90aHJlYWRfYXJncyB7Ci0rCXN0cnVjdCBjaGFj aGFwb2x5X2N0eF9tdCAqIGN0eF9tdDsKLSsJdV9pbnQgb2xkQmF0Y2hJRDsKLSsJaW50IHJldHZh bDsKLSt9OwotKwotK3N0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgewotKwl1X2ludCBiYXRjaElE OwotKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNoICogYmF0Y2g7Ci0rCWludCB0aHJlYWRJbmRl eDsKLSsJdV9jaGFyICogemVyb3M7Ci0rCWludCByZXR2YWw7Ci0rfTsKLSsKLSsvKiBnZW5lcmF0 ZSB0aGUga2V5c3RyZWFtIGFuZCBoZWFkZXIKLSsgKiB3ZSB1c2UgbnVsbHMgZm9yIHRoZSAiZGF0 YSIgKHRoZSB6ZXJvcyB2YXJpYWJsZSkgaW4gb3JkZXIgdG8KLSsgKiBnZXQgdGhlIHJhdyBrZXlz dHJlYW0KLSsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZSAqLwotK2lu dAotK2dlbmVyYXRlX2tleXN0cmVhbShzdHJ1Y3QgbXRfa2V5c3RyZWFtICoga3MsIHVfaW50IHNl cW5yLAotKyAgICBzdHJ1Y3QgdGhyZWFkRGF0YSAqIHRkLCB1X2NoYXIgKiB6ZXJvcykKLSt7Ci0r CS8qIGdlbmVyYXRlIHBvbHkxMzA1IGtleSAqLwotKwltZW1zZXQodGQtPnNlcWJ1ZiwgMCwgc2l6 ZW9mKHRkLT5zZXFidWYpKTsKLSsJUE9LRV9VNjQodGQtPnNlcWJ1ZiArIDgsIHNlcW5yKTsKLSsJ bWVtc2V0KGtzLT5wb2x5X2tleSAsIDAsIHNpemVvZihrcy0+cG9seV9rZXkpKTsKLSsJaWYgKCFF VlBfQ2lwaGVySW5pdCh0ZC0+bWFpbl9ldnAsIE5VTEwsIE5VTEwsIHRkLT5zZXFidWYsIDEpIHx8 Ci0rCSAgICBFVlBfQ2lwaGVyKHRkLT5tYWluX2V2cCwga3MtPnBvbHlfa2V5LCBrcy0+cG9seV9r ZXksCi0rCSAgICBzaXplb2Yoa3MtPnBvbHlfa2V5KSkgPCAwKQotKwkJcmV0dXJuIC0xOwotKwot KwkvKiBnZW5lcmF0ZSBoZWFkZXIga2V5c3RyZWFtIGZvciBlbmNyeXB0aW5nIHBheWxvYWQgbGVu Z3RoICovCi0rCWlmICghRVZQX0NpcGhlckluaXQodGQtPmhlYWRlcl9ldnAsIE5VTEwsIE5VTEws IHRkLT5zZXFidWYsIDEpIHx8Ci0rCSAgICBFVlBfQ2lwaGVyKHRkLT5oZWFkZXJfZXZwLCBrcy0+ aGVhZGVyU3RyZWFtLCB6ZXJvcywgQ0hBQ0hBX0JMT0NLTEVOKQotKwkgICAgPCAwICkKLSsJCXJl dHVybiAtMTsKLSsKLSsJLyogZ2VuZXJhdGUgbWFpbiBrZXlzdHJlYW0gZm9yIGVuY3J5cHRpbmcg cGF5bG9hZCAqLwotKwl0ZC0+c2VxYnVmWzBdID0gMTsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCh0 ZC0+bWFpbl9ldnAsIE5VTEwsIE5VTEwsIHRkLT5zZXFidWYsIDEpIHx8Ci0rCSAgICBFVlBfQ2lw aGVyKHRkLT5tYWluX2V2cCwga3MtPm1haW5TdHJlYW0sIHplcm9zLCBLRVlTVFJFQU1MRU4pIDwg MCkKLSsJCXJldHVybiAtMTsKLSsKLSsJcmV0dXJuIDA7Ci0rfQotKwotKy8qIGZyZWUgdGhlIEVW UCBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmUgdGhyZWFkICovCi0rdm9pZAotK2Zy ZWVfdGhyZWFkRGF0YShzdHJ1Y3QgdGhyZWFkRGF0YSAqIHRkKQotK3sKLSsJaWYgKHRkID09IE5V TEwpCi0rCQlyZXR1cm47Ci0rCWlmICh0ZC0+bWFpbl9ldnApIC8qIGZhbHNlIGlmIGluaXRpYWxp emF0aW9uIGRpZG4ndCBnZXQgdGhpcyBmYXIgKi8KLSsJCUVWUF9DSVBIRVJfQ1RYX2ZyZWUodGQt Pm1haW5fZXZwKTsKLSsJaWYgKHRkLT5oZWFkZXJfZXZwKSAvKiBmYWxzZSBpZiBpbml0aWFsaXph dGlvbiBkaWRuJ3QgZ2V0IHRoaXMgZmFyICovCi0rCQlFVlBfQ0lQSEVSX0NUWF9mcmVlKHRkLT5o ZWFkZXJfZXZwKTsKLSsJZXhwbGljaXRfYnplcm8odGQsIHNpemVvZigqdGQpKTsKLSt9Ci0rCi0r LyogaW5pdGlhbGl6ZSB0aGUgRVZQcyB1c2VkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkCi0rICAgUmV0 dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUgKi8KLStpbnQKLStpbml0aWFsaXpl X3RocmVhZERhdGEoc3RydWN0IHRocmVhZERhdGEgKiB0ZCwgY29uc3QgdV9jaGFyICprZXkpCi0r ewotKwltZW1zZXQodGQsMCxzaXplb2YoKnRkKSk7Ci0rCWlmICgodGQtPm1haW5fZXZwID0gRVZQ X0NJUEhFUl9DVFhfbmV3KCkpID09IE5VTEwgfHwKLSsJICAgICh0ZC0+aGVhZGVyX2V2cCA9IEVW UF9DSVBIRVJfQ1RYX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBmYWlsOwotKwlpZiAoIUVWUF9D aXBoZXJJbml0KHRkLT5tYWluX2V2cCwgRVZQX2NoYWNoYTIwKCksIGtleSwgTlVMTCwgMSkpCi0r CQlnb3RvIGZhaWw7Ci0rCWlmICghRVZQX0NpcGhlckluaXQodGQtPmhlYWRlcl9ldnAsIEVWUF9j aGFjaGEyMCgpLCBrZXkgKyAzMiwgTlVMTCwgMSkpCi0rCQlnb3RvIGZhaWw7Ci0rCWlmIChFVlBf Q0lQSEVSX0NUWF9pdl9sZW5ndGgodGQtPmhlYWRlcl9ldnApICE9IDE2KQotKwkJZ290byBmYWls OwotKwlyZXR1cm4gMDsKLSsgZmFpbDoKLSsJZnJlZV90aHJlYWREYXRhKHRkKTsKLSsJcmV0dXJu IC0xOwotK30KLSsKLStzdHJ1Y3Qgd29ya2VyX3RocmVhZF9hcmdzICoKLSt3b3JrZXJfdGhyZWFk KHN0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgKiBhcmdzKQotK3sKLSsJLyogY2hlY2sgZmlyc3Qg Ki8KLSsJaWYgKGFyZ3MgPT0gTlVMTCkKLSsJCXJldHVybiBOVUxMOwotKwlpZiAoYXJncy0+YmF0 Y2ggPT0gTlVMTCB8fCBhcmdzLT56ZXJvcyA9PSBOVUxMKSB7Ci0rCQlhcmdzLT5yZXR2YWwgPSAx OwotKwkJcmV0dXJuIGFyZ3M7Ci0rCX0KLSsKLSsJaW50IHRocmVhZEluZGV4ID0gYXJncy0+dGhy ZWFkSW5kZXg7Ci0rCXN0cnVjdCB0aHJlYWREYXRhICogdGQgPSAmKGFyZ3MtPmJhdGNoLT50ZHNb dGhyZWFkSW5kZXhdKTsKLSsJdV9pbnQgcmVmc2VxbnIgPSBhcmdzLT5iYXRjaElEICogTlVNU1RS RUFNUzsKLSsKLSsJZm9yIChpbnQgaSA9IHRocmVhZEluZGV4OyBpIDwgTlVNU1RSRUFNUzsgaSAr PSBOVU1USFJFQURTKSB7Ci0rCQlpZiAoZ2VuZXJhdGVfa2V5c3RyZWFtKCYoYXJncy0+YmF0Y2gt PnN0cmVhbXNbaV0pLCByZWZzZXFuciArIGksCi0rCQkgICAgdGQsIGFyZ3MtPnplcm9zKSA9PSAt MSkgewotKwkJCWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQkJcmV0dXJuIGFyZ3M7Ci0rCQl9Ci0rCX0K LSsKLSsJYXJncy0+cmV0dmFsID0gMDsKLSsJcmV0dXJuIGFyZ3M7Ci0rfQotKwotK2ludAotK2pv aW5fbWFuYWdlcl90aHJlYWQocHRocmVhZF90IG1hbmFnZXJfdGlkKQotK3sKLSsJc3RydWN0IG1h bmFnZXJfdGhyZWFkX2FyZ3MgKiBhcmdzOwotKwlpZiAocHRocmVhZF9qb2luKG1hbmFnZXJfdGlk LCAodm9pZCAqKikgJmFyZ3MpID09IDApIHsKLSsJCWlmIChhcmdzID09IE5VTEwpIHsKLSsJCQlk ZWJ1Z19mKCJNYW5hZ2VyIHRocmVhZCByZXR1cm5lZCBOVUxMISIpOwotKwkJCXJldHVybiAxOwot KwkJfSBlbHNlIGlmIChhcmdzID09IFBUSFJFQURfQ0FOQ0VMRUQpIHsKLSsJCQlkZWJ1Z19mKCJN YW5hZ2VyIHRocmVhZCBjYW5jZWxlZCEiKTsKLSsJCQlyZXR1cm4gMTsKLSsJCX0gZWxzZSBpZiAo YXJncy0+cmV0dmFsICE9IDApIHsKLSsJCQlkZWJ1Z19mKCJNYW5hZ2VyIHRocmVhZCBlcnJvciAo JWQpIiwgYXJncy0+cmV0dmFsKTsKLSsJCQlmcmVlKGFyZ3MpOwotKwkJCXJldHVybiAxOwotKwkJ fSBlbHNlIHsKLSsJCQlmcmVlKGFyZ3MpOwotKwkJCXJldHVybiAwOwotKwkJfQotKwl9IGVsc2Ug ewotKwkJZGVidWdfZigicHRocmVhZF9qb2luIGVycm9yISIpOwotKwkJcmV0dXJuIDE7Ci0rCX0K LSt9Ci0rCi0rdm9pZAotK2NoYWNoYXBvbHlfZnJlZV9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhf bXQgKiBjdHhfbXQpCi0rewotKwlpZiAoY3R4X210ID09IE5VTEwpCi0rCQlyZXR1cm47Ci0rCi0r I2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAotKwlpZiAoY3R4X210LT5wb2x5X2N0eCAhPSBO VUxMKSB7Ci0rCQlFVlBfTUFDX0NUWF9mcmVlKGN0eF9tdC0+cG9seV9jdHgpOwotKwkJY3R4X210 LT5wb2x5X2N0eCA9IE5VTEw7Ci0rCX0KLSsjZWxpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAm JiBkZWZpbmVkKEVWUF9QS0VZX1BPTFkxMzA1KQotKwlpZiAoY3R4X210LT5tZF9jdHggIT0gTlVM TCkgewotKwkJRVZQX01EX0NUWF9mcmVlKGN0eF9tdC0+bWRfY3R4KTsKLSsJCWN0eF9tdC0+bWRf Y3R4ID0gTlVMTDsKLSsJfQotKwlpZiAoY3R4X210LT5wa2V5ICE9IE5VTEwpIHsKLSsJCUVWUF9Q S0VZX2ZyZWUoY3R4X210LT5wa2V5KTsKLSsJCWN0eF9tdC0+cGtleSA9IE5VTEw7Ci0rCX0KLSsj ZW5kaWYKLSsKLSsJLyoKLSsJICogT25seSBjbGVhbnVwIHRoZSBtYW5hZ2VyIHRocmVhZHMgaWYg d2UgYXJlIHRoZSBQSUQgdGhhdCBpbml0aWFsaXplZAotKwkgKiB0aGVtISBJZiB3ZSdyZSBhIGZv cmssIHRoZSB0aHJlYWRzIGRvbid0IHJlYWxseSBleGlzdC4KLSsJICovCi0rCi0rCWlmIChnZXRw aWQoKSA9PSBjdHhfbXQtPm1haW5waWQpIHsKLSsJCWlmIChjdHhfbXQtPm1hbmFnZXJfdGlkWzBd ICE9IGN0eF9tdC0+c2VsZl90aWQpIHsKLSsJCQlqb2luX21hbmFnZXJfdGhyZWFkKGN0eF9tdC0+ bWFuYWdlcl90aWRbMF0pOwotKwkJCWN0eF9tdC0+bWFuYWdlcl90aWRbMF0gPSBjdHhfbXQtPnNl bGZfdGlkOwotKwkJfQotKwkJaWYgKGN0eF9tdC0+bWFuYWdlcl90aWRbMV0gIT0gY3R4X210LT5z ZWxmX3RpZCkgewotKwkJCWpvaW5fbWFuYWdlcl90aHJlYWQoY3R4X210LT5tYW5hZ2VyX3RpZFsx XSk7Ci0rCQkJY3R4X210LT5tYW5hZ2VyX3RpZFsxXSA9IGN0eF9tdC0+c2VsZl90aWQ7Ci0rCQl9 Ci0rCX0KLSsKLSsJLyogQ2xlYW51cCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzLiAqLwotKwlmb3Ig KGludCBpPTA7IGk8MjsgaSsrKQotKwkJZm9yIChpbnQgaj0wOyBqPE5VTVRIUkVBRFM7IGorKykK LSsJCQlmcmVlX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbaV0udGRzW2pdKSk7Ci0rCi0r CS8qIFplcm8gYW5kIGZyZWUgdGhlIHdob2xlIG11bHRpdGhyZWFkZWQgY2lwaGVyIGNvbnRleHQu ICovCi0rCWZyZWV6ZXJvKGN0eF9tdCwgc2l6ZW9mKCpjdHhfbXQpKTsKLSsKLSsJcmV0dXJuOwot K30KLSsKLStzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKgotK2NoYWNoYXBvbHlfbmV3X210KHVf aW50IHN0YXJ0c2VxbnIsIGNvbnN0IHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuKQotK3sKLSsJ c3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICogY3R4X210ID0geG1hbGxvYyhzaXplb2YoKmN0eF9t dCkpOwotKwltZW1zZXQoY3R4X210LCAwLCBzaXplb2YoKmN0eF9tdCkpOwotKwkvKiBJbml0aWFs aXplIHRoZSBzZXF1ZW5jZSBudW1iZXIuIFdoZW4gcmVrZXlpbmcsIHRoaXMgd29uJ3QgYmUgemVy by4gKi8KLSsJY3R4X210LT5zZXFuciA9IHN0YXJ0c2VxbnI7Ci0rCWN0eF9tdC0+YmF0Y2hJRCA9 IHN0YXJ0c2VxbnIgLyBOVU1TVFJFQU1TOwotKwlzdHJ1Y3QgdGhyZWFkRGF0YSBtYWluRGF0YTsK LSsJaW50IHREYXRhSTsKLSsJaW50IGdlbktTZmFpbGVkID0gMDsKLSsKLSsjaWZkZWYgT1BFTlNT TF9IQVZFX1BPTFlfRVZQCi0rCUVWUF9NQUMgKm1hYyA9IE5VTEw7Ci0rCWlmICgobWFjID0gRVZQ X01BQ19mZXRjaChOVUxMLCAiUE9MWTEzMDUiLCBOVUxMKSkgPT0gTlVMTCkKLSsJCWdvdG8gZmFp bDsKLSsJaWYgKChjdHhfbXQtPnBvbHlfY3R4ID0gRVZQX01BQ19DVFhfbmV3KG1hYykpID09IE5V TEwpCi0rCQlnb3RvIGZhaWw7Ci0rI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVm aW5lZChFVlBfUEtFWV9QT0xZMTMwNSkKLSsJaWYgKChjdHhfbXQtPm1kX2N0eCA9IEVWUF9NRF9D VFhfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGZhaWw7Ci0rCWlmICgoY3R4X210LT5wa2V5ID0g RVZQX1BLRVlfbmV3X21hY19rZXkoRVZQX1BLRVlfUE9MWTEzMDUsIE5VTEwsCi0rCSAgICBjdHhf bXQtPnplcm9zLCBQT0xZMTMwNV9LRVlMRU4pKSA9PSBOVUxMKQotKwkJZ290byBmYWlsOwotKwlp ZiAoRVZQX0RpZ2VzdFNpZ25Jbml0KGN0eF9tdC0+bWRfY3R4LCAmY3R4X210LT5wb2x5X2N0eCwg TlVMTCwgTlVMTCwKLSsJICAgIGN0eF9tdC0+cGtleSkgPT0gMCkKLSsJCWdvdG8gZmFpbDsKLSsj ZWxzZQotKwljdHhfbXQtPnBvbHlfY3R4ID0gTlVMTDsKLSsjZW5kaWYKLSsKLSsJY3R4X210LT5i YXRjaGVzW2N0eF9tdC0+YmF0Y2hJRCAlIDJdLmJhdGNoSUQgPSBjdHhfbXQtPmJhdGNoSUQ7Ci0r CWN0eF9tdC0+YmF0Y2hlc1soY3R4X210LT5iYXRjaElEICsgMSkgJSAyXS5iYXRjaElEID0KLSsJ ICAgIGN0eF9tdC0+YmF0Y2hJRCArIDE7Ci0rCi0rCS8qIGluaXRpYWxpemUgYmF0Y2hlc1swXSB0 ZHMgKi8KLSsJZm9yICh0RGF0YUkgPSAwOyB0RGF0YUkgPCBOVU1USFJFQURTOyB0RGF0YUkrKykg ewotKwkJaWYgKGluaXRpYWxpemVfdGhyZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1swXS50ZHNb dERhdGFJXSksCi0rCQkgICAga2V5KSAhPSAwKQotKwkJCWJyZWFrOwotKwl9Ci0rCWlmICh0RGF0 YUkgPCBOVU1USFJFQURTKSB7Ci0rCQkvKiBCYWNrdHJhY2sgc3RhcnRpbmcgd2l0aCAndERhdGFJ IC0gMScgKi8KLSsJCWZvciAodERhdGFJLS07IHREYXRhSSA+PSAwOyB0RGF0YUktLSkKLSsJCQlm cmVlX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMF0udGRzW3REYXRhSV0pKTsKLSsJCWdv dG8gZmFpbDsKLSsJfQotKwkvKiBpbml0aWFsaXplIGJhdGNoZXNbMV0gdGRzICovCi0rCWZvciAo dERhdGFJID0gMDsgdERhdGFJIDwgTlVNVEhSRUFEUzsgdERhdGFJKyspIHsKLSsJCWlmIChpbml0 aWFsaXplX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMV0udGRzW3REYXRhSV0pLAotKwkJ ICAgIGtleSkgIT0gMCkKLSsJCQlicmVhazsKLSsJfQotKwlpZiAodERhdGFJIDwgTlVNVEhSRUFE UykgewotKwkJLyogQmFja3RyYWNrIHN0YXJ0aW5nIHdpdGggJ3REYXRhSSAtIDEnICovCi0rCQlm b3IgKHREYXRhSS0tOyB0RGF0YUkgPj0gMDsgdERhdGFJLS0pCi0rCQkJZnJlZV90aHJlYWREYXRh KCYoY3R4X210LT5iYXRjaGVzWzFdLnRkc1t0RGF0YUldKSk7Ci0rCQkvKiBGcmVlIHRoZSBiYXRj aGVzWzBdIHRkcyB0b28gKi8KLSsJCWZvciAodERhdGFJID0gTlVNVEhSRUFEUzsgdERhdGFJID49 IDA7IHREYXRhSS0tKQotKwkJCWZyZWVfdGhyZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1swXS50 ZHNbdERhdGFJXSkpOwotKwkJZ290byBmYWlsOwotKwl9Ci0rCi0rCWlmIChpbml0aWFsaXplX3Ro cmVhZERhdGEoJm1haW5EYXRhLCBrZXkpICE9IDApIHsKLSsJCWNoYWNoYXBvbHlfZnJlZV9tdChj dHhfbXQpOwotKwkJZXhwbGljaXRfYnplcm8oJnN0YXJ0c2VxbnIsIHNpemVvZihzdGFydHNlcW5y KSk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlmb3IgKGludCBpPTA7IGk8MjsgaSsrKSB7 Ci0rCQl1X2ludCByZWZzZXFuciA9IGN0eF9tdC0+YmF0Y2hlc1tpXS5iYXRjaElEICogTlVNU1RS RUFNUzsKLSsJCWZvciAoaW50IGogPSBzdGFydHNlcW5yID4gcmVmc2VxbnIgPyBzdGFydHNlcW5y IC0gcmVmc2VxbnIgOiAwOwotKwkJICAgICBqPE5VTVNUUkVBTVM7IGorKykgewotKwkJCWlmIChn ZW5lcmF0ZV9rZXlzdHJlYW0oJihjdHhfbXQtPmJhdGNoZXNbaV0uc3RyZWFtc1tqXSksCi0rCQkJ ICAgIHJlZnNlcW5yICsgaiwgJm1haW5EYXRhLCBjdHhfbXQtPnplcm9zKSA9PSAtMSkgewotKwkJ CQlkZWJ1Z19mKCJnZW5lcmF0ZV9rZXlzdHJlYW0gZmFpbGVkIGluICIKLSsJCQkJICAgICJjaGFj aGEyMC1wb2x5MTMwNUBocG5zc2gub3JnIik7Ci0rCQkJCWdlbktTZmFpbGVkID0gMTsKLSsJCQkJ YnJlYWs7IC8qIGltcGVyZmVjdCwgYnV0IGl0IGhlbHBzICovCi0rCQkJfQotKwkJfQotKwl9Ci0r Ci0rCWZyZWVfdGhyZWFkRGF0YSgmbWFpbkRhdGEpOwotKwotKwlpZiAoZ2VuS1NmYWlsZWQgIT0g MCkgewotKwkJY2hhY2hhcG9seV9mcmVlX210KGN0eF9tdCk7Ci0rCQlleHBsaWNpdF9iemVybygm c3RhcnRzZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0r Ci0rCS8qIFN0b3JlIHRoZSBQSUQgc28gdGhhdCBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gdGVsbCBp ZiB3ZSdyZSBhIGZvcmsgKi8KLSsJY3R4X210LT5tYWlucGlkID0gZ2V0cGlkKCk7Ci0rCWN0eF9t dC0+c2VsZl90aWQgPSBwdGhyZWFkX3NlbGYoKTsKLSsJY3R4X210LT5tYW5hZ2VyX3RpZFswXSA9 IGN0eF9tdC0+c2VsZl90aWQ7Ci0rCWN0eF9tdC0+bWFuYWdlcl90aWRbMV0gPSBjdHhfbXQtPnNl bGZfdGlkOwotKwkvKiB3YXMgcmVwb3J0aW5nIHRoZSBUSUQgdXNpbmcgZ2V0dGlkKCkgYnV0IGl0 J3Mgbm90IHBvcnRhYmxlICovCi0rCWRlYnVnMl9mKCI8bWFpbiB0aHJlYWQ6IHBpZD0ldSwgcHRp ZD0weCVseD4iLCBnZXRwaWQoKSwgcHRocmVhZF9zZWxmKCkpOwotKwotKwkvKiBTdWNjZXNzISAq LwotKwlleHBsaWNpdF9iemVybygmc3RhcnRzZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsKLSsJ cmV0dXJuIGN0eF9tdDsKLSsKLSsgZmFpbDoKLSsjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQ Ci0rCWlmIChjdHhfbXQtPnBvbHlfY3R4ICE9IE5VTEwpIHsKLSsJCUVWUF9NQUNfQ1RYX2ZyZWUo Y3R4X210LT5wb2x5X2N0eCk7Ci0rCQljdHhfbXQtPnBvbHlfY3R4ID0gTlVMTDsKLSsJfQotKyNl bGlmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQX1BLRVlfUE9MWTEzMDUp Ci0rCWlmIChjdHhfbXQtPm1kX2N0eCAhPSBOVUxMKSB7Ci0rCQlFVlBfTURfQ1RYX2ZyZWUoY3R4 X210LT5tZF9jdHgpOwotKwkJY3R4X210LT5tZF9jdHggPSBOVUxMOwotKwl9Ci0rCWlmIChjdHhf bXQtPnBrZXkgIT0gTlVMTCkgewotKwkJRVZQX1BLRVlfZnJlZShjdHhfbXQtPnBrZXkpOwotKwkJ Y3R4X210LT5wa2V5ID0gTlVMTDsKLSsJfQotKyNlbmRpZgotKwlmcmVlemVybyhjdHhfbXQsIHNp emVvZigqY3R4X210KSk7Ci0rCWV4cGxpY2l0X2J6ZXJvKCZzdGFydHNlcW5yLCBzaXplb2Yoc3Rh cnRzZXFucikpOwotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0rLyogUG9ydGFibGUgRmFzdFhPUiB1 c2luZyBtZW1jcHkgdG8gYXZvaWQgc3RyaWN0LWFsaWFzaW5nIGFuZCBhbGlnbm1lbnQgVUIuCi0r ICogVXNlcyAxMjgtYml0IGNodW5rcyBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IF9fdWludDEy OF90IChHQ0MvQ2xhbmcgb24KLSsgKiA2NC1iaXQgcGxhdGZvcm1zKSwgZmFsbHMgYmFjayB0byB1 aW50NjRfdCBlbHNld2hlcmUuICovCi0rc3RhdGljIGlubGluZSB2b2lkCi0rZmFzdFhPUjIodV9j aGFyICpkZXN0LCBjb25zdCB1X2NoYXIgKnNyYywgY29uc3QgdV9jaGFyICprZXlzdHJlYW0sIHVf aW50IGxlbikKLSt7Ci0rI2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCi0rCXR5cGVkZWYg X191aW50MTI4X3QgY2h1bms7Ci0rI2Vsc2UKLSsJdHlwZWRlZiB1aW50NjRfdCBjaHVuazsKLSsj ZW5kaWYKLSsJc2l6ZV90IGkgPSAwOwotKwl3aGlsZSAoaSArIHNpemVvZihjaHVuaykgPD0gbGVu KSB7Ci0rCQljaHVuayBhLCBiLCByOwotKwkJbWVtY3B5KCZhLCBzcmMgKyBpLCBzaXplb2YoYSkp OwotKwkJbWVtY3B5KCZiLCBrZXlzdHJlYW0gKyBpLCBzaXplb2YoYikpOwotKwkJciA9IGEgXiBi OwotKwkJbWVtY3B5KGRlc3QgKyBpLCAmciwgc2l6ZW9mKHIpKTsKLSsJCWkgKz0gc2l6ZW9mKGNo dW5rKTsKLSsJfQotKwl3aGlsZSAoaSA8IGxlbikgewotKwkJZGVzdFtpXSA9IHNyY1tpXSBeIGtl eXN0cmVhbVtpXTsKLSsJCWkrKzsKLSsJfQotK30KLSsKLStzdHJ1Y3QgbWFuYWdlcl90aHJlYWRf YXJncyAqCi0rbWFuYWdlcl90aHJlYWQoc3RydWN0IG1hbmFnZXJfdGhyZWFkX2FyZ3MgKiBtYXJn cykgewotKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2YWxpZCBkYXRhIGJlZm9yZSBwcm9jZWVkaW5n ICovCi0rCWlmIChtYXJncyA9PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXN0cnVjdCBj aGFjaGFwb2x5X2N0eF9tdCAqIGN0eF9tdCA9IG1hcmdzLT5jdHhfbXQ7Ci0rCWlmIChjdHhfbXQg PT0gTlVMTCkgewotKwkJbWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQlyZXR1cm4gbWFyZ3M7Ci0rCX0K LSsKLSsJdV9pbnQgb2xkQmF0Y2hJRCA9IG1hcmdzLT5vbGRCYXRjaElEOwotKwotKwlzdHJ1Y3Qg bXRfa2V5c3RyZWFtX2JhdGNoICogYmF0Y2ggPSAmKGN0eF9tdC0+YmF0Y2hlc1tvbGRCYXRjaElE ICUgMl0pOwotKwlpZiAoYmF0Y2gtPmJhdGNoSUQgIT0gb2xkQmF0Y2hJRCkgewotKwkJZGVidWdf ZigiUG9zdC1jcnlwdCBiYXRjaCBtaXNzISBTZWVraW5nICV1LCBmb3VuZCAldS4gRmFpbGluZy4i LAotKwkJICAgIG9sZEJhdGNoSUQsIGJhdGNoLT5iYXRjaElEKTsKLSsJCW1hcmdzLT5yZXR2YWwg PSAxOwotKwkJcmV0dXJuIG1hcmdzOwotKwl9Ci0rCi0rCW1hcmdzLT5yZXR2YWwgPSAwOwotKwl1 X2ludCBiYXRjaElEID0gb2xkQmF0Y2hJRCArIDI7Ci0rCi0rCXB0aHJlYWRfdCB0aWRbTlVNVEhS RUFEU107Ci0rCXN0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgKiB3YXJncyA9IG1hbGxvYyhOVU1U SFJFQURTICogc2l6ZW9mKCp3YXJncykpOwotKwlpbnQgdGk7Ci0rCi0rCWZvciAodGkgPSAwOyB0 aSA8IE5VTVRIUkVBRFM7IHRpKyspIHsKLSsJCXdhcmdzW3RpXS5iYXRjaElEID0gYmF0Y2hJRDsK LSsJCXdhcmdzW3RpXS5iYXRjaCA9IGJhdGNoOwotKwkJd2FyZ3NbdGldLnRocmVhZEluZGV4ID0g dGk7Ci0rCQl3YXJnc1t0aV0uemVyb3MgPSBjdHhfbXQtPnplcm9zOwotKwkJaWYgKHB0aHJlYWRf Y3JlYXRlKCYodGlkW3RpXSksIE5VTEwsICh2b2lkICopIHdvcmtlcl90aHJlYWQsCi0rCQkgICAg Jih3YXJnc1t0aV0pKSAhPSAwKSB7Ci0rCQkJbWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQkJYnJlYWs7 Ci0rCQl9Ci0rCX0KLSsJZm9yICg7IHRpIDwgTlVNVEhSRUFEUzsgdGkrKykgLyogZm9yIGVycm9y IGNvbmRpdGlvbiAqLwotKwkJdGlkW3RpXSA9IHB0aHJlYWRfc2VsZigpOwotKwotKwlzdHJ1Y3Qg d29ya2VyX3RocmVhZF9hcmdzICogcmV0d2FyZ3M7Ci0rCi0rCWZvciAodGkgPSAwOyB0aSA8IE5V TVRIUkVBRFM7IHRpKyspIHsKLSsJCWlmICh0aWRbdGldID09IHB0aHJlYWRfc2VsZigpKSB7Ci0r CQkJbWFyZ3MtPnJldHZhbCA9IDE7IC8qIHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzICovCi0rCQkJ Y29udGludWU7Ci0rCQl9Ci0rCQlpZiAocHRocmVhZF9qb2luKHRpZFt0aV0sICh2b2lkICoqKSAm cmV0d2FyZ3MpID09IDApIHsKLSsJCQlpZiAocmV0d2FyZ3MgPT0gTlVMTCkgewotKwkJCQlkZWJ1 Z19mKCJXb3JrZXIgdGhyZWFkIHJldHVybmVkIE5VTEwhIik7Ci0rCQkJCW1hcmdzLT5yZXR2YWwg PSAxOwotKwkJCX0gZWxzZSBpZiAocmV0d2FyZ3MgPT0gUFRIUkVBRF9DQU5DRUxFRCkgewotKwkJ CQlkZWJ1Z19mKCJXb3JrZXIgdGhyZWFkIGNhbmNlbGVkISIpOwotKwkJCQltYXJncy0+cmV0dmFs ID0gMTsKLSsJCQl9IGVsc2UgewotKwkJCQlpZiAocmV0d2FyZ3MtPnJldHZhbCAhPSAwKSB7Ci0r CQkJCQlkZWJ1Z19mKCJXb3JrZXIgdGhyZWFkIGVycm9yICglZCkiLAotKwkJCQkJICAgIHJldHdh cmdzLT5yZXR2YWwpOwotKwkJCQkJbWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQkJCX0KLSsJCQkJaWYg KHJldHdhcmdzICE9ICYod2FyZ3NbdGldKSkgewotKwkJCQkJZGVidWdfZigiV29ya2VyIHRocmVh ZCBkaWRuJ3QgcmV0dXJuICIKLSsJCQkJCSAgICAiZXhwZWN0ZWQgc3RydWN0dXJlISIpOwotKwkJ CQkJbWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQkJCX0KLSsJCQl9Ci0rCQl9IGVsc2UgewotKwkJCWRl YnVnX2YoInB0aHJlYWRfam9pbiBlcnJvciEiKTsKLSsJCQltYXJncy0+cmV0dmFsID0gMTsKLSsJ CX0KLSsJfQotKwlmcmVlKHdhcmdzKTsKLSsKLSsJaWYgKG1hcmdzLT5yZXR2YWwgPT0gMCkgewot KwkJYmF0Y2gtPmJhdGNoSUQgPSBiYXRjaElEOwotKwl9Ci0rCi0rCXJldHVybiBtYXJnczsKLSt9 Ci0rCi0raW50Ci0rY2hhY2hhcG9seV9jcnlwdF9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQg KmN0eF9tdCwgdV9pbnQgc2VxbnIsIHVfY2hhciAqZGVzdCwKLSsgICAgY29uc3QgdV9jaGFyICpz cmMsIHVfaW50IGxlbiwgdV9pbnQgYWFkbGVuLCB1X2ludCBhdXRobGVuLCBpbnQgZG9fZW5jcnlw dCkKLSt7Ci0rI2lmZGVmIFNBRkVUWQotKwlpZiAoY3R4X210LT5tYWlucGlkICE9IGdldHBpZCgp KSB7IC8qIHdlJ3JlIGEgZm9yayAqLwotKwkJLyoKLSsJCSAqIFRPRE86IHRoaXMgaXMgRVhUUkVN RUxZIFJBUkUsIG1heSBuZXZlciBoYXBwZW4gYXQgYWxsIChvbmx5Ci0rCQkgKiBpZiB0aGUgZm9y ayBjYWxscyBjcnlwdCksIHNvIHdlIHNob3VsZCB0ZWxsIHRoZSBjb21waWxlci4KLSsJCSAqLwot KwkJLyogVGhlIHdvcmtlciB0aHJlYWRzIGRvbid0IGV4aXN0LCB3ZSBjb3VsZCBzcGF3biB0aGVt PyAqLwotKwkJZGVidWdfZigiRm9yayBjYWxsZWQgY3J5cHQgd2l0aG91dCB3b3JrZXJzISIpOwot KwkJY2hhY2hhcG9seV9mcmVlX210KGN0eF9tdCk7Ci0rCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5B TF9FUlJPUjsKLSsJfQotKyNlbmRpZgotKwotKwlwdGhyZWFkX3QgKiBtYW5hZ2VyX3RpZCA9ICYo Y3R4X210LT5tYW5hZ2VyX3RpZFtjdHhfbXQtPmJhdGNoSUQgJSAyXSk7Ci0rCWlmICh1bmxpa2Vs eSgqbWFuYWdlcl90aWQgIT0gY3R4X210LT5zZWxmX3RpZCkpIHsKLSsJCWludCByZXQgPSBqb2lu X21hbmFnZXJfdGhyZWFkKCptYW5hZ2VyX3RpZCk7Ci0rCQkqbWFuYWdlcl90aWQgPSBjdHhfbXQt PnNlbGZfdGlkOwotKwkJaWYgKHJldCAhPSAwKQotKwkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFM X0VSUk9SOwotKwl9Ci0rCi0rCXN0cnVjdCBtdF9rZXlzdHJlYW1fYmF0Y2ggKiBiYXRjaCA9Ci0r CSAgICAmKGN0eF9tdC0+YmF0Y2hlc1tjdHhfbXQtPmJhdGNoSUQgJSAyXSk7Ci0rCi0rCXN0cnVj dCBtdF9rZXlzdHJlYW0gKiBrcyA9ICYoYmF0Y2gtPnN0cmVhbXNbc2VxbnIgJSBOVU1TVFJFQU1T XSk7Ci0rCi0rCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsKLSsjaWZkZWYgU0FG RVRZCi0rCWlmIChiYXRjaC0+YmF0Y2hJRCA9PSBjdHhfbXQtPmJhdGNoSUQpIHsgLyogU2FmZXR5 IGNoZWNrICovCi0rI2VuZGlmCi0rCQkvKiBjaGVjayB0YWcgYmVmb3JlIGFueXRoaW5nIGVsc2Ug Ki8KLSsJCWlmICghZG9fZW5jcnlwdCkgewotKwkJCWNvbnN0IHVfY2hhciAqdGFnID0gc3JjICsg YWFkbGVuICsgbGVuOwotKwkJCXVfY2hhciBleHBlY3RlZF90YWdbUE9MWTEzMDVfVEFHTEVOXTsK LSsjaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5lZChFVlBfUEtFWV9QT0xZMTMw NSkKLSsJCQlpZiAoKEVWUF9QS0VZX0NUWF9jdHJsKGN0eF9tdC0+cG9seV9jdHgsIC0xLAotKwkJ CSAgICBFVlBfUEtFWV9PUF9TSUdOQ1RYLCBFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLAotKwkJ CSAgICBQT0xZMTMwNV9LRVlMRU4sIGtzLT5wb2x5X2tleSkgPD0gMCkgfHwKLSsJCQkgICAgKEVW UF9EaWdlc3RTaWduVXBkYXRlKGN0eF9tdC0+bWRfY3R4LCBzcmMsIGFhZGxlbiArIGxlbikgPT0g MCkpIHsKLSsJCQkJZGVidWdfZigiU1NMIGVycm9yIHdoaWxlIGRlY3J5cHRpbmcgcG9seTEzMDUg dGFnIik7Ci0rCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwkJCX0KLSsJCQlj dHhfbXQtPnB0YWdsZW4gPSBQT0xZMTMwNV9UQUdMRU47Ci0rCQkJaWYgKEVWUF9EaWdlc3RTaWdu RmluYWwoY3R4X210LT5tZF9jdHgsIGV4cGVjdGVkX3RhZywKLSsJCQkgICAgJmN0eF9tdC0+cHRh Z2xlbikgPT0gMCkgewotKwkJCQlkZWJ1Z19mKCJTU0wgZXJyb3Igd2hpbGUgZmluYWxpemluZyBk ZWN5cnB0ZWQgcG9seTEzMDUiKTsKLSsJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7 Ci0rCQkJfQotKyNlbHNlCi0rCQkJcG9seTEzMDVfYXV0aChjdHhfbXQtPnBvbHlfY3R4LCBleHBl Y3RlZF90YWcsIHNyYywKLSsJCQkgICAgYWFkbGVuICsgbGVuLCBrcy0+cG9seV9rZXkpOwotKyNl bmRpZgotKwkJCWlmICh0aW1pbmdzYWZlX2JjbXAoZXhwZWN0ZWRfdGFnLCB0YWcsIFBPTFkxMzA1 X1RBR0xFTikKLSsJCQkgICAgIT0gMCkKLSsJCQkJciA9IFNTSF9FUlJfTUFDX0lOVkFMSUQ7Ci0r CQkJZXhwbGljaXRfYnplcm8oZXhwZWN0ZWRfdGFnLCBzaXplb2YoZXhwZWN0ZWRfdGFnKSk7Ci0r CQl9Ci0rCQlpZiAociAhPSBTU0hfRVJSX01BQ19JTlZBTElEKSB7Ci0rCQkJLyogQ3J5cHQgYWRk aXRpb25hbCBkYXRhIChpLmUuLCBwYWNrZXQgbGVuZ3RoKSAqLwotKwkJCS8qIFRPRE86IGlzIGFh ZGxlbiBhbHdheXMgZm91ciBieXRlcz8gKi8KLSsJCQkvKiBUT0RPOiBkbyB3ZSBhbHdheXMgaGF2 ZSBhbiBhYWRsZW4/ICovCi0rCQkJaWYgKGFhZGxlbikKLSsJCQkJZm9yICh1X2ludCBpPTA7IGk8 YWFkbGVuOyBpKyspCi0rCQkJCQlkZXN0W2ldID0ga3MtPmhlYWRlclN0cmVhbVtpXSBeIHNyY1tp XTsKLSsJCQkvKiBDcnlwdCBwYXlsb2FkICovCi0rCQkJZmFzdFhPUjIoZGVzdCthYWRsZW4sc3Jj K2FhZGxlbixrcy0+bWFpblN0cmVhbSxsZW4pOwotKwkJCS8qIGNhbGN1bGF0ZSBhbmQgYXBwZW5k IHRhZyAqLwotKyNpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9QS0VZ X1BPTFkxMzA1KQotKwkJCWlmIChkb19lbmNyeXB0KSB7Ci0rCQkJCWlmICgoRVZQX1BLRVlfQ1RY X2N0cmwoY3R4X210LT5wb2x5X2N0eCwgLTEsCi0rCQkJCSAgICBFVlBfUEtFWV9PUF9TSUdOQ1RY LCBFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLAotKwkJCQkgICAgUE9MWTEzMDVfS0VZTEVOLCBr cy0+cG9seV9rZXkpIDw9MCkgfHwKLSsJCQkJICAgIChFVlBfRGlnZXN0U2lnblVwZGF0ZShjdHhf bXQtPm1kX2N0eCwgZGVzdCwgYWFkbGVuICsgbGVuKSA9PSAwKSkgewotKwkJCQkJZGVidWdfZiAo IlNTTCBlcnJvciB3aGlsZSBlbmNyeXB0aW5nIHBvbHkxMzA1IHRhZyIpOwotKwkJCQkJcmV0dXJu IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCQkJCX0KLSsJCQkJY3R4X210LT5wdGFnbGVuID0g UE9MWTEzMDVfVEFHTEVOOwotKwkJCQlpZiAoRVZQX0RpZ2VzdFNpZ25GaW5hbChjdHhfbXQtPm1k X2N0eCwgZGVzdCthYWRsZW4rbGVuLAotKwkJCQkgICAgJmN0eF9tdC0+cHRhZ2xlbikgPT0gMCkg ewotKwkJCQkJZGVidWdfZigiU1NMIGVycm9yIHdoaWxlIGZpbmFsaXppbmcgZGVjeXJwdGVkIHBv bHkxMzA1Iik7Ci0rCQkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJCQkJfQot KwkJCX0KLSsjZWxzZQotKwkJCWlmIChkb19lbmNyeXB0KQotKwkJCQlwb2x5MTMwNV9hdXRoKGN0 eF9tdC0+cG9seV9jdHgsIGRlc3QrYWFkbGVuK2xlbiwKLSsJCQkJICAgIGRlc3QsIGFhZGxlbits ZW4sIGtzLT5wb2x5X2tleSk7Ci0rI2VuZGlmCi0rCQkJcj0wOyAvKiBTdWNjZXNzISAqLwotKwkJ fQotKwkJaWYgKHIpIC8qIEFueXRoaW5nIG5vbnplcm8gaXMgYW4gZXJyb3IuICovCi0rCQkJcmV0 dXJuIHI7Ci0rCi0rCQljdHhfbXQtPnNlcW5yID0gc2VxbnIgKyAxOwotKwotKwkJaWYgKHVubGlr ZWx5KGN0eF9tdC0+c2VxbnIgLyBOVU1TVFJFQU1TID4gY3R4X210LT5iYXRjaElEKSkgewotKwkJ CXN0cnVjdCBtYW5hZ2VyX3RocmVhZF9hcmdzICogYXJncyA9Ci0rCQkJICAgIG1hbGxvYyhzaXpl b2YoKmFyZ3MpKTsKLSsJCQlpZiAoYXJncyA9PSBOVUxMKSB7Ci0rCQkJCXJldHVybiBTU0hfRVJS X0lOVEVSTkFMX0VSUk9SOwotKwkJCX0KLSsJCQlhcmdzLT5jdHhfbXQgPSBjdHhfbXQ7Ci0rCQkJ YXJncy0+b2xkQmF0Y2hJRCA9IGN0eF9tdC0+YmF0Y2hJRDsKLSsJCQlpZiAocHRocmVhZF9jcmVh dGUoJihjdHhfbXQtPm1hbmFnZXJfdGlkW2N0eF9tdC0+YmF0Y2hJRAotKwkJCSAgICAlIDJdKSwg TlVMTCwgKHZvaWQgKikgbWFuYWdlcl90aHJlYWQsIGFyZ3MpICE9IDApIHsKLSsJCQkJZnJlZShh cmdzKTsKLSsJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCQkJfQotKwkJCWN0 eF9tdC0+YmF0Y2hJRCA9IGN0eF9tdC0+c2VxbnIgLyBOVU1TVFJFQU1TOwotKwkJfQotKwotKwkJ LyogVE9ETzogTm90aGluZyB3ZSBuZWVkIHRvIHNhbml0aXplIGhlcmU/ICovCi0rCi0rCQlyZXR1 cm4gMDsKLSsjaWZkZWYgU0FGRVRZCi0rCX0gZWxzZSB7IC8qIEJhZCwgaXQncyB0aGUgd3Jvbmcg YmF0Y2guICovCi0rCQlkZWJ1Z19mKCAiUHJlLWNyeXB0IGJhdGNoIG1pc3MhIFNlZWtpbmcgJXUs IGZvdW5kICV1LiBGYWlsaW5nLiIsCi0rCQkgICAgY3R4X210LT5iYXRjaElELCBiYXRjaC0+YmF0 Y2hJRCk7Ci0rCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJfQotKyNlbmRpZgot K30KLSsKLStpbnQKLStjaGFjaGFwb2x5X2dldF9sZW5ndGhfbXQoc3RydWN0IGNoYWNoYXBvbHlf Y3R4X210ICpjdHhfbXQsIHVfaW50ICpwbGVucCwKLSsgICAgdV9pbnQgc2VxbnIsIGNvbnN0IHVf Y2hhciAqY3AsIHVfaW50IGxlbikKLSt7Ci0rCS8qIFRPRE86IGFkZCBjb21waWxlciBoaW50cyAq LwotKyNpZmRlZiBTQUZFVFkKLSsJaWYgKGN0eF9tdC0+bWFpbnBpZCAhPSBnZXRwaWQoKSkgeyAv KiBVc2Ugc2VyaWFsIG1vZGUgaWYgd2UncmUgYSBmb3JrICovCi0rCQlkZWJ1Z19mKCJXZSdyZSBh IGZvcmsuIEZhaWxpbmcuIik7Ci0rCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJ fQotKyNlbmRpZgotKwotKwlpZiAobGVuIDwgNCkKLSsJCXJldHVybiBTU0hfRVJSX01FU1NBR0Vf SU5DT01QTEVURTsKLSsKLSsJcHRocmVhZF90ICogbWFuYWdlcl90aWQgPSAmKGN0eF9tdC0+bWFu YWdlcl90aWRbY3R4X210LT5iYXRjaElEICUgMl0pOwotKwlpZiAodW5saWtlbHkoKm1hbmFnZXJf dGlkICE9IGN0eF9tdC0+c2VsZl90aWQpKSB7Ci0rCQlpbnQgcmV0ID0gam9pbl9tYW5hZ2VyX3Ro cmVhZCgqbWFuYWdlcl90aWQpOwotKwkJKm1hbmFnZXJfdGlkID0gY3R4X210LT5zZWxmX3RpZDsK LSsJCWlmIChyZXQgIT0gMCkKLSsJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJ fQotKwotKwl1X2NoYXIgYnVmWzRdOwotKyNpZmRlZiBTQUZFVFkKLSsJdV9pbnQgc291Z2h0X2Jh dGNoSUQgPSBzZXFuciAvIE5VTVNUUkVBTVM7Ci0rI2VuZGlmCi0rCXN0cnVjdCBtdF9rZXlzdHJl YW1fYmF0Y2ggKiBiYXRjaCA9Ci0rCSAgICAmKGN0eF9tdC0+YmF0Y2hlc1tjdHhfbXQtPmJhdGNo SUQgJSAyXSk7Ci0rCXN0cnVjdCBtdF9rZXlzdHJlYW0gKiBrcyA9ICYoYmF0Y2gtPnN0cmVhbXNb c2VxbnIgJSBOVU1TVFJFQU1TXSk7Ci0rI2lmZGVmIFNBRkVUWQotKwlpZiAoYmF0Y2gtPmJhdGNo SUQgPT0gc291Z2h0X2JhdGNoSUQpIHsKLSsjZW5kaWYKLSsJCWZvciAodV9pbnQgaT0wOyBpIDwg c2l6ZW9mKGJ1Zik7IGkrKykKLSsJCQlidWZbaV09a3MtPmhlYWRlclN0cmVhbVtpXSBeIGNwW2ld OwotKwkJKnBsZW5wID0gUEVFS19VMzIoYnVmKTsKLSsJCXJldHVybiAwOwotKyNpZmRlZiBTQUZF VFkKLSsJfSBlbHNlIHsKLSsJCWRlYnVnX2YoIkJhdGNoIG1pc3MhIFNlZWtpbmcgJXUsIGZvdW5k ICV1LiBGYWlsaW5nLiIsCi0rCQkgICAgc291Z2h0X2JhdGNoSUQsIGJhdGNoLT5iYXRjaElEKTsK LSsJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwl9Ci0rI2VuZGlmCi0rfQotKyNl bmRpZiAvKiBkZWZpbmVkKEhBVkVfRVZQX0NIQUNIQTIwKSAmJiAhZGVmaW5lZChIQVZFX0JST0tF Tl9DSEFDSEEyMCkgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jaGFj aGFwb2x5LWxpYmNyeXB0by1tdC5oIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxp YmNyeXB0by1tdC5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS1s aWJjcnlwdG8tbXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5oCTIwMjYtMDctMDIg MDA6Mjc6MjkuNzIxNjI3MzAyICswMjAwCi1AQCAtMCwwICsxLDQ1IEBACi0rLyoKLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMjMgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBV bml2ZXJzaXR5LgotKyAqCi0rICogIEF1dGhvcjogTWl0Y2hlbGwgRG9ycmVsbCA8bXdkQHBzYy5l ZHU+Ci0rICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyICA8cmFwaWVyQHBzYy5lZHU+Ci0rICoKLSsg KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdAotKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2Uu Ci0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSsgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSsgKgotKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OwotKyAqIGlmIG5vdCwgc2Vl IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCi0rICoKLSsgKi8KLSsKLSsjaWZu ZGVmIENIQUNIQV9QT0xZX0xJQkNSWVBUT19NVF9ICi0rI2RlZmluZSBDSEFDSEFfUE9MWV9MSUJD UllQVE9fTVRfSAotKwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVkZSAiY2hhY2hh LmgiCi0rI2luY2x1ZGUgInBvbHkxMzA1LmgiCi0rCi0rI2lmbmRlZiBDSEFDSEFfS0VZTEVOCi0r I2RlZmluZSBDSEFDSEFfS0VZTEVOCTMyIC8qIE9ubHkgMjU2IGJpdCBrZXlzIHVzZWQgaGVyZSAq LwotKyNlbmRpZgotKwotK3N0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdDsgLyogZGVmaW5lZCBpbiBj aXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuYyAqLwotKwotK3N0cnVjdCBjaGFjaGFwb2x5 X2N0eF9tdCAqY2hhY2hhcG9seV9uZXdfbXQodV9pbnQgc3RhcnRzZXFuciwgY29uc3QgdV9jaGFy ICprZXksIHVfaW50IGtleWxlbikKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fYnVmZmVyX18sIDIsIDMpKSk7 Ci0rCi0rdm9pZCAgIGNoYWNoYXBvbHlfZnJlZV9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQg KmNwY3R4KTsKLSsKLStpbnQgICAgY2hhY2hhcG9seV9jcnlwdF9tdChzdHJ1Y3QgY2hhY2hhcG9s eV9jdHhfbXQgKmNwY3R4LCB1X2ludCBzZXFuciwKLSsJCQkgICB1X2NoYXIgKmRlc3QsIGNvbnN0 IHVfY2hhciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwKLSsJCQkgICB1X2ludCBhdXRo bGVuLCBpbnQgZG9fZW5jcnlwdCk7Ci0rCi0raW50ICAgIGNoYWNoYXBvbHlfZ2V0X2xlbmd0aF9t dChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNwY3R4LAotKwkJCQl1X2ludCAqcGxlbnAsIHVf aW50IHNlcW5yLCBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCBsZW4pCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX2J1ZmZlcl9fLCA0 LCA1KSkpOwotKwotKyNlbmRpZiAvKiBDSEFDSEFfUE9MWV9MSUJDUllQVE9fTVRfSCAqLwotZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWN0ci1tdC5jIG9wZW5zc2gtMTAuM3Ax L2NpcGhlci1jdHItbXQuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWN0ci1tdC5j CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEv Y2lwaGVyLWN0ci1tdC5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIxNzU3NDA3ICswMjAwCi1AQCAt MCwwICsxLDY4MSBAQAotKy8qCi0rICogT3BlblNTSCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RSIENp cGhlcgotKyAqCi0rICogQXV0aG9yOiBCZW5qYW1pbiBCZW5uZXR0IDxiZW5AcHNjLmVkdT4KLSsg KiBBdXRob3I6IE1pa2UgVGFzb3RhIDx0YXNvdGFAZ21haWwuY29tPgotKyAqIEF1dGhvcjogQ2hy aXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAyMSBQ aXR0c2J1cmdoIFN1cGVyY29tcHV0aW5nIENlbnRlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIEJhc2VkIG9uIG9yaWdpbmFsIE9wZW5TU0ggQUVTLUNUUiBjaXBoZXIuIFNtYWxsIHBv cnRpb25zIHJlbWFpbiB1bmNoYW5nZWQsCi0rICogQ29weXJpZ2h0IChjKSAyMDAzIE1hcmt1cyBG cmllZGwgPG1hcmt1c0BvcGVuYnNkLm9yZz4KLSsgKgotKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBj b3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyAqIHB1 cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhh dCB0aGUgYWJvdmUKLSsgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotKyAqCi0rICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0rICog V0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO VElFUyBPRgotKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0rICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5E SVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotKyAqIFdIQVRT T0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhF UiBJTiBBTgotKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU SU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0rICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsjaW5jbHVkZSAi aW5jbHVkZXMuaCIKLSsKLSsjaWYgZGVmaW5lZChXSVRIX09QRU5TU0wpICYmICFkZWZpbmVkKFdJ VEhfT1BFTlNTTDMpCi0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKwotKyNpbmNsdWRlIDxzdGRh cmcuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rCi0rI2luY2x1ZGUgInhtYWxsb2MuaCIKLSsjaW5jbHVkZSAibG9nLmgiCi0rI2luY2x1ZGUg PHVuaXN0ZC5oPgotKyNpbmNsdWRlICJ1dGhhc2guaCIKLSsKLSsvKiBjb21wYXRpYmlsaXR5IHdp dGggb2xkIG9yIGJyb2tlbiBPcGVuU1NMIHZlcnNpb25zICovCi0rI2luY2x1ZGUgIm9wZW5ic2Qt Y29tcGF0L29wZW5zc2wtY29tcGF0LmgiCi0rCi0rI2lmbmRlZiBVU0VfQlVJTFRJTl9SSUpOREFF TAotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxwdGhy ZWFkLmg+Ci0rCi0rI2lmZGVmIF9fQVBQTEVfXwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsj aW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotKyNlbmRpZgotKwotKy8qIG5vdGUgcmVnYXJkaW5nIHRo cmVhZHMgYW5kIHF1ZXVlcyAqLwotKy8qIGluaXRpYWxseSB0aGlzIGNpcGhlciB3YXMgd3JpdHRl biBpbiBhIHdheSB0aGF0Ci0rICogdGhlIGtleSBzdHJlYW0gd2FzIGdlbmVyYXRlZCBpbiBhIHBl ciBjaXBoZXIgYmxvY2sKLSsgKiBsb29wLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGtleSBzdHJlYW0g cXVldWUgbGVuZ3RoIHdhcwotKyAqIDE2ayBhbmQgdGhlIGNpcGhlciBibG9jayBzaXplIHdhcyAx NiBieXRlcyBpdCB3b3VsZAotKyAqIGZpbGwgdGhlIHF1ZXVlIDE2IGJ5dGVzIGF0IGEgdGltZS4g TWl0Y2ggRG9ycmVsbCBwb2ludGVkCi0rICogb3V0IHRoYXQgd2UgY291bGQgZmlsbCB0aGUgcXVl dWUgaW4gb25jZSBjYWxsIGVsaW1pbmF0aW5nCi0rICogbG9vcCBhbmQgbXVsdGlwbGUgY2FsbHMg dG8gRVZQX0VuY3J5cHRVcGRhdGUuIERvaW5nIHNvCi0rICogZHJhbWF0aWNhbGx5IHJlZHVjZWQg Q1BVIGxvYWQgaW4gdGhlIHRocmVhZHMgYW5kIGluZGljYXRlZAotKyAqIHRoYXQgd2UgY291bGQg YWxzbyBlbGltaW5hdGUgbW9zdCBvZiB0aGUgdGhyZWFkcyBhbmQgcXVldWVzCi0rICogYXMgaXQg d291bGQgdGFrZSBmYXIgbGVzcyB0aW1lIGZvciBhIHF1ZXVlIHRvIGVidGVyIEtRX0ZVTEwKLSsg KiBzdGF0ZS4gQXMgc3VjaCwgd2UndmUgcmVkdWNlZCB0aGUgZGVmYXVsdCBudW1iZXIgb2YgdGhy ZWFkcwotKyAqIGFuZCBxdWV1ZXMgZnJvbSAyIGFuZCA4IChyZXNwZWN0aXZlbHkpIHRvIDEgYW5k IDIuIFdlJ3ZlIGFsc28KLSsgKiBlbGltbmF0ZWQgdGhlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBw aHlzaWNhbCBudW1iZXIgb2YgY29yZXMgb24KLSsgKiB0aGUgc3lzdGVtIGFuZCwgaWYgdGhlIHVz ZXIgZGVzaXJlcywgY2FuIHNwaW4gdXAgbW9yZSB0aHJlYWRzCi0rICogdXNpbmcgYW4gZW52aXJv bm1lbnQgdmFyaWFibGUuIEFkZGl0aW9uYWxseSwgcXVldWVzIGlzIG5vdyBmaXhlZAotKyAqIGF0 IHRocmVhZF9jb3VudCArIDEuCi0rICogY2pyIDEwLzE5LzIwMjIgKi8KLSsKLSsvKi0tLS0tLS0t LS0tLS0tLS0tLS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsvKiBtYXhpbXVt IG51bWJlciBvZiB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KLSsjZGVmaW5lIE1BWF9USFJFQURTICAg ICAgNAotKyNkZWZpbmUgTUFYX05VTUtRICAgICAgICAoTUFYX1RIUkVBRFMgKyAxKQotKwotKy8q IE51bWJlciBvZiBwcmVnZW4gdGhyZWFkcyB0byB1c2UgKi8KLSsvKiB0aGlzIGlzIGEgZGVmYXVs dCB2YWx1ZS4gVGhlIGFjdHVhbCBudW1iZXIgaXMKLSsgKiBkZXRlcm1pbmVkIGR1cmluZyBpbml0 IGFzIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJlcgotKyAqIG9mIGF2YWlsYWJsZSBjb3JlcyAqLwot K2ludCBjaXBoZXJfdGhyZWFkcyA9IDE7Ci0rCi0rLyogTnVtYmVyIG9mIGtleXN0cmVhbSBxdWV1 ZXMgKi8KLSsvKiBpZGVhbGx5IHRoaXMgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCBzbyB0aGF0IHRo ZXJlIGlzCi0rICogYWx3YXlzIGEga2V5IHF1ZXVlIGZvciBhIHRocmVhZCB0byB3b3JrIG9uCi0r ICogc28gbWF5YmUgZG91YmxlIG9mIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gQWdhaW4gdGhpcwot KyAqIGlzIGEgZGVmYXVsdCBhbmQgdGhlIGFjdHVhbCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGluIGlu aXQqLwotK2ludCBudW1rcSA9IDI7Ci0rCi0rLyogTGVuZ3RoIG9mIGEga2V5c3RyZWFtIHF1ZXVl ICovCi0rLyogb25lIHF1ZXVlIGhvbGRzIDUxMktCICgxMDI0ICogMzIgKiAxNikgb2Yga2V5IGRh dGEKLSsgKiBiZWluZyB0aGF0IHRoZSBxdWV1ZXMgYXJlIGRlc3Ryb3llZCBhZnRlciBhIHJla2V5 Ci0rICogYW5kIGF0IGxlYXRzIG9uZSBoYXMgdG8gYmUgZnVsbHkgZmlsbGVkIHByaW9yIHRvCi0r ICogZW5jaXBoZXJpbmcgZGF0YSB3ZSBkb24ndCB3YW50IHRoaXMgdG8gYmUgdG9vIGxhcmdlICov Ci0rI2RlZmluZSBLUUxFTiAoMTAyNCAqIDMyKQotKwotKy8qIFByb2Nlc3NvciBjYWNoZWxpbmUg bGVuZ3RoICovCi0rI2RlZmluZSBDQUNIRUxJTkVfTEVOCTY0Ci0rCi0rLyogQ2FuIHRoZSBzeXN0 ZW0gZG8gdW5hbGlnbmVkIGxvYWRzIG5hdGl2ZWx5PyAqLwotKyNpZiBkZWZpbmVkKF9fYWFyY2g2 NF9fKSB8fCBcCi0rICAgIGRlZmluZWQoX19pMzg2X18pICAgIHx8IFwKLSsgICAgZGVmaW5lZChf X3Bvd2VycGNfXykgfHwgXAotKyAgICBkZWZpbmVkKF9feDg2XzY0X18pCi0rIyBkZWZpbmUgQ0lQ SEVSX1VOQUxJR05FRF9PSwotKyNlbmRpZgotKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9f KQotKyMgZGVmaW5lIENJUEhFUl9JTlQxMjhfT0sKLSsjZW5kaWYKLSsvKi0tLS0tLS0tLS0tLS0t LS0tLS0tIEVORCBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rI2RlZmluZSBI QVZFX05PTkUgICAgICAgMAotKyNkZWZpbmUgSEFWRV9LRVkgICAgICAgIDEKLSsjZGVmaW5lIEhB VkVfSVYgICAgICAgICAyCi0raW50IFggPSAwOwotKwotK2NvbnN0IEVWUF9DSVBIRVIgKmV2cF9h ZXNfY3RyX210KHZvaWQpOwotKwotKy8qIEtleXN0cmVhbSBRdWV1ZSBzdGF0ZSAqLwotK2VudW0g ewotKwlLUUlOSVQsCi0rCUtRRU1QVFksCi0rCUtRRklMTElORywKLSsJS1FGVUxMLAotKwlLUURS QUlOSU5HCi0rfTsKLSsKLSsvKiBLZXlzdHJlYW0gUXVldWUgc3RydWN0ICovCi0rc3RydWN0IGtx IHsKLSsJdV9jaGFyCQlrZXlzW0tRTEVOXVtBRVNfQkxPQ0tfU0laRV07IC8qIFszMjc2OF1bMTZC XSAqLwotKwl1X2NoYXIJCWN0cltBRVNfQkxPQ0tfU0laRV07IC8qIDE2QiAqLwotKwl1X2NoYXIg ICAgICAgICAgcGFkMFtDQUNIRUxJTkVfTEVOXTsKLSsJcHRocmVhZF9tdXRleF90CWxvY2s7Ci0r CXB0aHJlYWRfY29uZF90CWNvbmQ7Ci0rCWludCAgICAgICAgICAgICBxc3RhdGU7Ci0rCXVfY2hh ciAgICAgICAgICBwYWQxW0NBQ0hFTElORV9MRU5dOwotK307Ci0rCi0rLyogQ29udGV4dCBzdHJ1 Y3QgKi8KLStzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210Ci0rewotKwlsb25nIHVuc2lnbmVkIGlu dCBzdHJ1Y3RfaWQ7Ci0rCWludCAgICAgICAgICAgICAgIGtleWxlbjsKLSsJaW50CQkgIHN0YXRl OwotKwlpbnQJCSAgcWlkeDsKLSsJaW50CQkgIHJpZHg7Ci0rCWludCAgICAgICAgICAgICAgIGlk W01BWF9USFJFQURTXTsgLyogMzIgKi8KLSsJQUVTX0tFWSAgICAgICAgICAgYWVzX2tleTsKLSsJ Y29uc3QgdV9jaGFyICAgICAqb3JpZ19rZXk7Ci0rCXVfY2hhcgkJICBhZXNfY291bnRlcltBRVNf QkxPQ0tfU0laRV07IC8qIDE2QiAqLwotKwlwdGhyZWFkX3QJICB0aWRbTUFYX1RIUkVBRFNdOyAv KiAzMiAqLwotKwlwdGhyZWFkX3J3bG9ja190ICB0aWRfbG9jazsKLSsJc3RydWN0IGtxCSAgcVtN QVhfTlVNS1FdOyAvKiAzMyAqLwotKyNpZmRlZiBfX0FQUExFX18KLSsJcHRocmVhZF9yd2xvY2tf dCAgc3RvcF9sb2NrOwotKwlpbnQJCSAgZXhpdF9mbGFnOwotKyNlbmRpZiAvKiBfX0FQUExFX18g Ki8KLSt9OwotKwotKy8qIHRoaXMgZGVmaW5lcyB0aGUgaGFzaCBhbmQgZWxlbWVudHMgb2YgZXZw IGNvbnRleHQgcG9pbnRlcnMKLSsgKiB0aGF0IGFyZSBjcmVhdGVkIGluIHRocmVhZF9sb29wLiBX ZSB1c2UgdGhpcyB0byBjbGVhciBhbmQKLSsgKiBmcmVlIHRoZSBjb250ZXh0cyBpbiBzdG9wX2Fu ZF9wcmVqb2luCi0rICovCi0rc3RydWN0IGFlc19tdF9jdHhfcHRycyB7Ci0rCXB0aHJlYWRfdCAg ICAgICB0aWQ7Ci0rCUVWUF9DSVBIRVJfQ1RYICpwb2ludGVyOyAvKiAzMiAqLwotKwlVVF9oYXNo X2hhbmRsZSBoaDsKLSt9OwotKwotKy8qIGdsb2JhbHMgKi8KLSsvKiBob3cgd2UgaW5jcmVtZW50 IHRoZSBpZCB0aGUgc3RydWN0cyB3ZSBjcmVhdGUgKi8KLStsb25nIHVuc2lnbmVkIGludCBnbG9i YWxfc3RydWN0X2lkID0gMDsKLSsKLSsvKiBrZWVwIGEgY29weSBvZiB0aGUgcG9pbnRlcnMgY3Jl YXRlZCBpbiB0aHJlYWRfbG9vcCB0byBmcmVlIGxhdGVyICovCi0rc3RydWN0IGFlc19tdF9jdHhf cHRycyAqZXZwX3B0cnMgPSBOVUxMOwotKwotKy8qCi0rICogQWRkIG51bSB0byBjb3VudGVyICdj dHInCi0rICovCi0rc3RhdGljIHZvaWQKLStzc2hfY3RyX2FkZCh1X2NoYXIgKmN0ciwgdWludDMy X3QgbnVtLCB1X2ludCBsZW4pCi0rewotKwlpbnQgaTsKLSsJdWludDE2X3QgbjsKLSsKLSsJZm9y IChuID0gMCwgaSA9IGxlbiAtIDE7IGkgPj0gMCAmJiAobnVtIHx8IG4pOyBpLS0pIHsKLSsJCW4g PSBjdHJbaV0gKyAobnVtICYgMHhmZikgKyBuOwotKwkJbnVtID4+PSA4OwotKwkJY3RyW2ldID0g biAmIDB4ZmY7Ci0rCQluID4+PSA4OwotKwl9Ci0rfQotKwotKy8qCi0rICogVGhyZWFkcyBtYXkg YmUgY2FuY2VsbGVkIGluIGEgcHRocmVhZF9jb25kX3dhaXQsIHdlIG11c3QgZnJlZSB0aGUgbXV0 ZXgKLSsgKi8KLStzdGF0aWMgdm9pZAotK3RocmVhZF9sb29wX2NsZWFudXAodm9pZCAqeCkKLSt7 Ci0rCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QgKil4KTsKLSt9Ci0rCi0r I2lmZGVmIF9fQVBQTEVfXwotKy8qIENoZWNrIGlmIHdlIHNob3VsZCBleGl0LCB3ZSBhcmUgZG9p bmcgYm90aCBjYW5jZWwgYW5kIGV4aXQgY29uZGl0aW9uCi0rICogc2luY2Ugb24gT1NYIHRocmVh ZHMgc2VlbSB0byBvY2Nhc2lvbmFsbHkgZmFpbCB0byBub3RpY2Ugd2hlbiB0aGV5IGhhdmUKLSsg KiBiZWVuIGNhbmNlbGxlZC4gV2Ugd2FudCB0byBoYXZlIGEgYmFja3VwIHRvIG1ha2Ugc3VyZSB0 aGF0IHdlIHdvbid0IGhhbmcKLSsgKiB3aGVuIHRoZSBtYWluIHByb2Nlc3Mgam9pbigpLXMgdGhl IGNhbmNlbGxlZCB0aHJlYWQuCi0rICovCi0rc3RhdGljIHZvaWQKLSt0aHJlYWRfbG9vcF9jaGVj a19leGl0KHN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmMpCi0rewotKwlpbnQgZXhpdF9mbGFn OwotKwotKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmMtPnN0b3BfbG9jayk7Ci0rCWV4aXRfZmxh ZyA9IGMtPmV4aXRfZmxhZzsKLSsJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZjLT5zdG9wX2xvY2sp OwotKwotKwlpZiAoZXhpdF9mbGFnKQotKwkJcHRocmVhZF9leGl0KE5VTEwpOwotK30KLSsjZWxz ZQotKyMgZGVmaW5lIHRocmVhZF9sb29wX2NoZWNrX2V4aXQocykKLSsjZW5kaWYgLyogX19BUFBM RV9fICovCi0rCi0rLyoKLSsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdGVybWluYXRlIHRoZSBoZWxw ZXIgdGhyZWFkcwotKyAqLwotK3N0YXRpYyB2b2lkCi0rc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhy ZWFkcyhzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjKQotK3sKLSsJaW50IGk7Ci0rCi0rI2lm ZGVmIF9fQVBQTEVfXwotKwkvKiBub3RpZnkgdGhyZWFkcyB0aGF0IHRoZXkgc2hvdWxkIGV4aXQg Ki8KLSsJcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZjLT5zdG9wX2xvY2spOwotKwljLT5leGl0X2Zs YWcgPSBUUlVFOwotKwlwdGhyZWFkX3J3bG9ja191bmxvY2soJmMtPnN0b3BfbG9jayk7Ci0rI2Vu ZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKwkvKiBDYW5jZWwgcHJlZ2VuIHRocmVhZHMgKi8KLSsJ Zm9yIChpID0gMDsgaSA8IGNpcGhlcl90aHJlYWRzOyBpKyspIHsKLSsJCWRlYnVnICgiQ2FuY2Vs ZWQgJWx1ICglbHUsJWQpIiwgYy0+dGlkW2ldLCBjLT5zdHJ1Y3RfaWQsIGMtPmlkW2ldKTsKLSsJ CXB0aHJlYWRfY2FuY2VsKGMtPnRpZFtpXSk7Ci0rCX0KLSsgICAgICAgIGZvciAoaSA9IDA7IGkg PCBudW1rcTsgaSsrKSB7Ci0rICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmYy0+ cVtpXS5sb2NrKTsKLSsgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmYy0+ cVtpXS5jb25kKTsKLSsgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmMtPnFb aV0ubG9jayk7Ci0rICAgICAgICB9Ci0rCWZvciAoaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsg aSsrKSB7Ci0rCQlpZiAocHRocmVhZF9raWxsKGMtPnRpZFtpXSwgMCkgIT0gMCkKLSsJCQlkZWJ1 ZzMoIkFFUy1DVFIgTVQgcHRocmVhZF9qb2luIGZhaWx1cmU6IEludmFsaWQgdGhyZWFkIGlkICVs dSBpbiAlcyIsCi0rCQkJICAgICAgIGMtPnRpZFtpXSwgX19GVU5DVElPTl9fKTsKLSsJCWVsc2Ug ewotKwkJCWRlYnVnICgiSm9pbmluZyAlbHUgKCVsdSwgJWQpIiwgYy0+dGlkW2ldLCBjLT5zdHJ1 Y3RfaWQsIGMtPmlkW2ldKTsKLSsJCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmMtPnFbaV0ubG9j ayk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJmMtPnFb aV0uY29uZCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9qb2luKGMtPnRpZFtp XSwgTlVMTCk7Ci0rCQkJLyogdGhpcyBmaW5kcyB0aGUgZW50cnkgaW4gdGhlIGhhc2ggdGhhdCBj b3JyZXNwb25kaW5nIHRvIHRoZQotKwkJCSAqIHRocmVhZCBpZC4gVGhhdCdzIHVzZWQgdG8gZmlu ZCB0aGUgcG9pbnRlciB0byB0aGUgY2lwaGVyIHN0cnVjdAotKwkJCSAqIGNyZWF0ZWQgaW4gdGhy ZWFkX2xvb3AuICovCi0rCQkJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRyOwotKwkJCUhBU0hf RklORF9JTlQoZXZwX3B0cnMsICZjLT50aWRbaV0sIHB0cik7Ci0rCQkJRVZQX0NJUEhFUl9DVFhf ZnJlZShwdHItPnBvaW50ZXIpOwotKwkJCUhBU0hfREVMKGV2cF9wdHJzLCBwdHIpOwotKwkJCWZy ZWUocHRyKTsgICAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsJcHRocmVhZF9yd2xvY2tfZGVz dHJveSgmYy0+dGlkX2xvY2spOwotK30KLSsKLSsvKgotKyAqIFRoZSBsaWZlIG9mIGEgcHJlZ2Vu IHRocmVhZDoKLSsgKiAgICBGaW5kIGVtcHR5IGtleXN0cmVhbSBxdWV1ZXMgYW5kIGZpbGwgdGhl bSB1c2luZyB0aGVpciBjb3VudGVyLgotKyAqICAgIFdoZW4gZG9uZSwgdXBkYXRlIGNvdW50ZXIg Zm9yIHRoZSBuZXh0IGZpbGwuCi0rICovCi0rLyogcHJldmlvdXNseSB0aGlzIHVzZWQgdGhlIGxv dyBsZXZlbCBpbnRlcmZhY2Ugd2hpY2ggaXMsIHNhZGx5LAotKyAqIHNsb3dlciB0aGFuIHRoZSBF VlAgaW50ZXJmYWNlIGJ5IGEgbG9uZyBzaG90LiBUaGUgb3JpZ2luYWwgY3R4IChmcm9tIHRoZQot KyAqIGJvZHkgb2YgdGhlIGNvZGUpIGlzbid0IHBhc3NlZCBpbiBoZXJlIGJ1dCB3ZSBoYXZlIHRo ZSBrZXkgYW5kIHRoZSBjb3VudGVyCi0rICogd2hpY2ggbWVhbnMgd2Ugc2hvdWxkIGJlIGFibGUg dG8gY3JlYXRlIHRoZSBleGFjdCBzYW1lIGN0eCBhbmQgdXNlIHRoYXQgdG8KLSsgKiBmaWxsIHRo ZSBrZXlzdHJlYW0gcXVldWVzLiBJJ20gY29uY2VybmVkIGFib3V0IGFkZGl0aW9uYWwgb3Zlcmhl YWQgYnV0IHRoZQotKyAqIGFkZGl0aW9uYWwgc3BlZWQgZnJvbSBBRVNOSSBzaG91bGQgbWFrZSB1 cCBmb3IgaXQuICAqLwotKy8qIFRoZSBhYm92ZSBjb21tZW50IHdhcyBtYWRlIHdoZW4gSSB0aG91 Z2h0IEkgbmVlZGVkIHRvIGRvIGEgbmV3IEVWUCBpbml0IGZvcgotKyAqIGVhY2ggY291bnRlciBp bmNyZW1lbnQuIFR1cm5zIG91dCBub3QgdG8gYmUgdGhlIGNhc2UgLWNqciAxMC8xNS8yMSovCi0r Ci0rc3RhdGljIHZvaWQgKgotK3RocmVhZF9sb29wKHZvaWQgKngpCi0rewotKwlFVlBfQ0lQSEVS X0NUWCAqIHZvbGF0aWxlIGFlc25pX2N0eDsKLSsJc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdCAq YyA9IHg7Ci0rCXN0cnVjdCBrcSAqcTsKLSsJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRyOwot KwlpbnQgcWlkeDsKLSsJcHRocmVhZF90IGZpcnN0X3RpZDsKLSsJaW50IG91dGxlbjsKLSsJdV9j aGFyIG15bnVsbFtLUUxFTiAqIEFFU19CTE9DS19TSVpFXTsKLSsJbWVtc2V0KCZteW51bGwsIDAs IEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOwotKwotKwkvKiBnZXQgdGhlIHRocmVhZCBpZCB0byBz ZWUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgb25lICovCi0rCXB0aHJlYWRfcndsb2NrX3JkbG9jaygm Yy0+dGlkX2xvY2spOwotKwlmaXJzdF90aWQgPSBjLT50aWRbMF07Ci0rCXB0aHJlYWRfcndsb2Nr X3VubG9jaygmYy0+dGlkX2xvY2spOwotKwotKwkvKiBjcmVhdGUgdGhlIGNvbnRleHQgZm9yIHRo aXMgdGhyZWFkICovCi0rCWFlc25pX2N0eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOwotKwotKwkv KiBrZWVwIHRyYWNrIG9mIHRoZSBwb2ludGVyIGZvciB0aGUgZXZwIGluIHRoaXMgc3RydWN0Ci0r CSAqIHNvIHdlIGNhbiBmcmVlIGl0IGxhdGVyLiBTbyB3ZSBwbGFjZSBpdCBpbiBhIGhhc2ggaW5k ZXhlZCBvbiB0aGUKLSsJICogdGhyZWFkIGlkLCB3aGljaCBpcyBhdmFpbGFibGUgdG8gdXMgaW4g dGhlIGZyZWUgZnVuY3Rpb24uCi0rCSAqIE5vdGUsIHRoZSB0aHJlYWQgaWQgaXNuJ3QgbmVjZXNz YXJ5IHVuaXF1ZSBhY3Jvc3MgcmVrZXlzIGJ1dAotKwkgKiB0aGF0J3Mgb2theSBhcyB0aGV5IGFy ZSB1bmlxdWUgZHVyaW5nIGEga2V5LiAqLwotKwlwdHIgPSBtYWxsb2Moc2l6ZW9mICpwdHIpOyAv KmZyZWVkIGluIHN0b3AgJiBwcmVqb2luICovCi0rCXB0ci0+dGlkID0gcHRocmVhZF9zZWxmKCk7 IC8qIGluZGV4IGZvciBoYXNoICovCi0rCXB0ci0+cG9pbnRlciA9IGFlc25pX2N0eDsKLSsJSEFT SF9BRERfSU5UKGV2cF9wdHJzLCB0aWQsIHB0cik7Ci0rCi0rCS8qIGluaXRpYWxpemUgdGhlIGNp cGhlciBjdHggd2l0aCB0aGUga2V5IHByb3ZpZGVkCi0rCSAqIGRldGVybWluZSB3aGljaCBjaXBo ZXIgdG8gdXNlIGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSAqLwotKwlpZiAoYy0+a2V5bGVuID09IDI1 NikKLSsJCUVWUF9FbmNyeXB0SW5pdF9leChhZXNuaV9jdHgsIEVWUF9hZXNfMjU2X2N0cigpLCBO VUxMLCBjLT5vcmlnX2tleSwgTlVMTCk7Ci0rCWVsc2UgaWYgKGMtPmtleWxlbiA9PSAxMjgpCi0r CQlFVlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBFVlBfYWVzXzEyOF9jdHIoKSwgTlVMTCwg Yy0+b3JpZ19rZXksIE5VTEwpOwotKwllbHNlIGlmIChjLT5rZXlsZW4gPT0gMTkyKQotKwkJRVZQ X0VuY3J5cHRJbml0X2V4KGFlc25pX2N0eCwgRVZQX2Flc18xOTJfY3RyKCksIE5VTEwsIGMtPm9y aWdfa2V5LCBOVUxMKTsKLSsJZWxzZSB7Ci0rCQlsb2dpdCgiSW52YWxpZCBrZXkgbGVuZ3RoIG9m ICVkIGluIEFFUyBDVFIgTVQuIEV4aXRpbmciLCBjLT5rZXlsZW4pOwotKwkJZXhpdCgxKTsKLSsJ fQotKwotKwkvKgotKwkgKiBIYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBzdGFydHVwLCBvbmUg dGhyZWFkIG11c3QgZmlsbAotKwkgKiB0aGUgZmlyc3QgS1EgdGhlbiBtYXJrIGl0IGFzIGRyYWlu aW5nLiBMb2NrIGhlbGQgdGhyb3VnaG91dC4KLSsJICovCi0rCi0rCWlmIChwdGhyZWFkX2VxdWFs KHB0aHJlYWRfc2VsZigpLCBmaXJzdF90aWQpKSB7Ci0rCQkvKiBnZXQgdGhlIGZpcnN0IGVsZW1l bnQgb2YgdGhlIGtleXF1ZSBzdHJ1Y3QgKi8KLSsJCXEgPSAmYy0+cVswXTsKLSsJCXB0aHJlYWRf bXV0ZXhfbG9jaygmcS0+bG9jayk7Ci0rCQkvKiBpZiB3ZSBhcmUgaW4gdGhlIElOSVQgc3RhdGUg dGhlbiBmaWxsIHRoZSBxdWV1ZSAqLwotKwkJaWYgKHEtPnFzdGF0ZSA9PSBLUUlOSVQpIHsKLSsJ CQkvKiBzZXQgdGhlIGluaXRpYWwgY291bnRlciAqLwotKwkJCUVWUF9FbmNyeXB0SW5pdF9leChh ZXNuaV9jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIHEtPmN0cik7Ci0rCi0rCQkJLyogZW5jeXBoZXIg YSBibG9jayBzaXplZCBudWxsIHN0cmluZyAobXludWxsKSB3aXRoIHRoZSBrZXkuIFRoaXMKLSsJ CQkgKiByZXR1cm5zIHRoZSBrZXlzdHJlYW0gYmVjYXVzZSB4b3JpbmcgdGhlIGtleXN0cmVhbQot KwkJCSAqIGFnYWluc3QgbnVsbCByZXR1cm5zIHRoZSBrZXlzdHJlYW0uIFN0b3JlIHRoYXQgaW4g dGhlIGFwcHJvcHJpYXRlIHF1ZXVlICovCi0rCQkJRVZQX0VuY3J5cHRVcGRhdGUoYWVzbmlfY3R4 LCBxLT5rZXlzWzBdLCAmb3V0bGVuLCBteW51bGwsIEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOwot KwotKwkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBjcmVhdGVzIHRvIHRoZSBhZXMgY291 bnRlciAqLwotKwkJCXNzaF9jdHJfYWRkKHEtPmN0ciwgS1FMRU4gKiBudW1rcSwgQUVTX0JMT0NL X1NJWkUpOwotKwkJCXEtPnFzdGF0ZSA9IEtRRFJBSU5JTkc7Ci0rCQkJcHRocmVhZF9jb25kX2Jy b2FkY2FzdCgmcS0+Y29uZCk7Ci0rCQl9Ci0rCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9j ayk7Ci0rCX0KLSsKLSsJLyoKLSsJICogTm9ybWFsIGNhc2UgaXMgdG8gZmluZCBlbXB0eSBxdWV1 ZXMgYW5kIGZpbGwgdGhlbSwgc2tpcHBpbmcgb3ZlcgotKwkgKiBxdWV1ZXMgYWxyZWFkeSBmaWxs ZWQgYnkgb3RoZXIgdGhyZWFkcyBhbmQgc3RvcHBpbmcgdG8gd2FpdCBmb3IKLSsJICogYSBkcmFp bmluZyBxdWV1ZSB0byBiZWNvbWUgZW1wdHkuCi0rCSAqCi0rCSAqIE11bHRpcGxlIHRocmVhZHMg bWF5IGJlIHdhaXRpbmcgb24gYSBkcmFpbmluZyBxdWV1ZSBhbmQgYXdva2VuCi0rCSAqIHdoZW4g ZW1wdHkuICBUaGUgZmlyc3QgdGhyZWFkIHRvIHdha2Ugd2lsbCBtYXJrIGl0IGFzIGZpbGxpbmcs Ci0rCSAqIG90aGVycyB3aWxsIG1vdmUgb24gdG8gZmlsbCwgc2tpcCwgb3Igd2FpdCBvbiB0aGUg bmV4dCBxdWV1ZS4KLSsJICovCi0rCWZvciAocWlkeCA9IDE7OyBxaWR4ID0gKHFpZHggKyAxKSAl IG51bWtxKSB7Ci0rCQkvKiBDaGVjayBpZiBJIHdhcyBjYW5jZWxsZWQsIGFsc28gY2hlY2tlZCBp biBjb25kX3dhaXQgKi8KLSsJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwotKwotKwkJLyogQ2hlY2sg aWYgd2Ugc2hvdWxkIGV4aXQgYXMgd2VsbCAqLwotKwkJdGhyZWFkX2xvb3BfY2hlY2tfZXhpdChj KTsKLSsKLSsJCS8qIExvY2sgcXVldWUgYW5kIGJsb2NrIGlmIGl0cyBkcmFpbmluZyAqLwotKwkJ cSA9ICZjLT5xW3FpZHhdOwotKwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsKLSsJCXB0 aHJlYWRfY2xlYW51cF9wdXNoKHRocmVhZF9sb29wX2NsZWFudXAsICZxLT5sb2NrKTsKLSsJCXdo aWxlIChxLT5xc3RhdGUgPT0gS1FEUkFJTklORyB8fCBxLT5xc3RhdGUgPT0gS1FJTklUKSB7Ci0r CQkJdGhyZWFkX2xvb3BfY2hlY2tfZXhpdChjKTsKLSsJCQlwdGhyZWFkX2NvbmRfd2FpdCgmcS0+ Y29uZCwgJnEtPmxvY2spOwotKwkJfQotKwkJcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsKLSsKLSsJ CS8qIElmIGZpbGxpbmcgb3IgZnVsbCwgc29tZWJvZHkgZWxzZSBnb3QgaXQsIHNraXAgKi8KLSsJ CWlmIChxLT5xc3RhdGUgIT0gS1FFTVBUWSkgewotKwkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZx LT5sb2NrKTsKLSsJCQljb250aW51ZTsKLSsJCX0KLSsKLSsJCS8qCi0rCQkgKiBFbXB0eSwgbGV0 J3MgZmlsbCBpdC4KLSsJCSAqIFF1ZXVlIGxvY2sgaXMgcmVsaW5xdWlzaGVkIHdoaWxlIHdlIGRv IHRoaXMgc28gb3RoZXJzCi0rCQkgKiBjYW4gc2VlIHRoYXQgaXQncyBiZWluZyBmaWxsZWQuCi0r CQkgKi8KLSsJCXEtPnFzdGF0ZSA9IEtRRklMTElORzsKLSsJCXB0aHJlYWRfY29uZF9icm9hZGNh c3QoJnEtPmNvbmQpOwotKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOwotKwotKwkJ Lyogc2V0IHRoZSBpbml0aWFsIGNvdW50ZXIgKi8KLSsJCUVWUF9FbmNyeXB0SW5pdF9leChhZXNu aV9jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIHEtPmN0cik7Ci0rCi0rCQkvKiBzZWUgY29yZXNwb25k aW5nIGJsb2NrIGFib3ZlIGZvciB1c2VmdWwgY29tbWVudHMgKi8KLSsJCUVWUF9FbmNyeXB0VXBk YXRlKGFlc25pX2N0eCwgcS0+a2V5c1swXSwgJm91dGxlbiwgbXludWxsLCBLUUxFTiAqIEFFU19C TE9DS19TSVpFKTsKLSsKLSsJCS8qIFJlLWxvY2ssIG1hcmsgZnVsbCBhbmQgc2lnbmFsIGNvbnN1 bWVyICovCi0rCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2spOwotKwkJc3NoX2N0cl9hZGQo cS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlxLT5xc3RhdGUgPSBL UUZVTEw7Ci0rCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKLSsJCXB0aHJlYWRf bXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKLSsJfQotKwotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0r LyogdGhpcyBpcyB3aGVyZSB0aGUgZGF0YSBpcyBhY3R1YWxseSBlbmNpcGhlcmVkIGFuZCBkZWNp cGhlcmVkICovCi0rLyogdGhpcyBtYXkgYWxzbyBiZW5lZml0IGZyb20gdXBncmFkaW5nIHRvIHRo ZSBFVlAgQVBJICovCi0rc3RhdGljIGludAotK3NzaF9hZXNfY3RyKEVWUF9DSVBIRVJfQ1RYICpj dHgsIHVfY2hhciAqZGVzdCwgY29uc3QgdV9jaGFyICpzcmMsCi0rICAgIHNpemVfdCBsZW4pCi0r ewotKwl0eXBlZGVmIHVuaW9uIHsKLSsjaWZkZWYgQ0lQSEVSX0lOVDEyOF9PSwotKwkJX191aW50 MTI4X3QgKnUxMjg7Ci0rI2VuZGlmCi0rCQl1aW50NjRfdCAqdTY0OwotKwkJdWludDMyX3QgKnUz MjsKLSsJCXVpbnQ4X3QgKnU4OwotKwkJY29uc3QgdWludDhfdCAqY3U4OwotKwkJdWludHB0cl90 IHU7Ci0rCX0gcHRyc190OwotKwlwdHJzX3QgZGVzdHAsIHNyY3AsIGJ1ZnA7Ci0rCXVpbnRwdHJf dCBhbGlnbjsKLSsJc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdCAqYzsKLSsJc3RydWN0IGtxICpx LCAqb2xkcTsKLSsJaW50IHJpZHg7Ci0rCXVfY2hhciAqYnVmOwotKwotKwlpZiAobGVuID09IDAp Ci0rCQlyZXR1cm4gMTsKLSsJaWYgKChjID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGN0 eCkpID09IE5VTEwpCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9ICZjLT5xW2MtPnFpZHhdOwotKwly aWR4ID0gYy0+cmlkeDsKLSsKLSsJLyogc3JjIGFscmVhZHkgcGFkZGVkIHRvIGJsb2NrIG11bHRp cGxlICovCi0rCXNyY3AuY3U4ID0gc3JjOwotKwlkZXN0cC51OCA9IGRlc3Q7Ci0rCWRvIHsgLyog ZG8gdW50aWwgbGVuIGlzIDAgKi8KLSsJCWJ1ZiA9IHEtPmtleXNbcmlkeF07Ci0rCQlidWZwLnU4 ID0gYnVmOwotKwotKwkJLyogZmlndXJlIG91dCB0aGUgYWxpZ25tZW50IG9uIHRoZSBmbHkgKi8K LSsjaWZkZWYgQ0lQSEVSX1VOQUxJR05FRF9PSwotKwkJYWxpZ24gPSAwOwotKyNlbHNlCi0rCQlh bGlnbiA9IGRlc3RwLnUgfCBzcmNwLnUgfCBidWZwLnU7Ci0rI2VuZGlmCi0rCi0rCQkvKiB4b3Ig dGhlIHNyYyBhZ2FpbnN0IHRoZSBrZXkgKGJ1ZikKLSsJCSAqIGRpZmZlcmVudCBzeXN0ZW1zIGNh biBkbyBhbGwgMTYgYnl0ZXMgYXQgb25jZSBvcgotKwkJICogbWF5IG5lZWQgdG8gZG8gaXQgaW4g OCBvciA0IGJ5dGVzIGNodW5rcwotKwkJICogd29yc3QgY2FzZSBpcyBkb2luZyBpdCBhcyBhIGxv b3AgKi8KLSsjaWZkZWYgQ0lQSEVSX0lOVDEyOF9PSwotKwkJLyogd2l0aCBHQ0MgMTMgd2UgaGF2 ZSBoYXZpbmcgY29uc2lzdGVudCBzZWcgZmF1bHRzCi0rCQkgKiBpbiB0aGlzIHNlY3Rpb24gb2Yg Y29kZS4gU2luY2UgdGhpcyBpcyBhIGNyaXRpY2FsCi0rCQkgKiBjb2RlIHBhdGggd2UgYXJlIHJl bW92aW5nIHRoaXMgdW50aWwgd2UgaGF2ZSBhIHNvbHV0aW9uCi0rCQkgKiBpbiBwbGFjZSAtY2py IDAyLzIyLzI0Ci0rCQkgKiBUT0RPOiBGSVggVEhJUwotKwkJICovCi0rCQkvKiBpZiAoKGFsaWdu ICYgMHhmKSA9PSAwKSB7ICovCi0rCQkvKiAJZGVzdHAudTEyOFswXSA9IHNyY3AudTEyOFswXSBe IGJ1ZnAudTEyOFswXTsgKi8KLSsJCS8qIH0gZWxzZSAqLwotKyNlbmRpZgotKwkJLyogdGhpcyBp cyBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gc2FuaXRpemVycwotKwkJICogdGhpcyBp cyBhbm5veWluZyBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQKLSsJCSAqIGJ1dCBVQiBpcyBu b3Qgc29tZXRoaW5nIEkgd2FudCB0byByZXRhaW4gKi8KLSsJCS8qIDY0IGJpdHMgKi8KLSsJCS8q IGlmICgoYWxpZ24gJiAweDcpID09IDApIHsgKi8KLSsJCS8qIAlkZXN0cC51NjRbMF0gPSBzcmNw LnU2NFswXSBeIGJ1ZnAudTY0WzBdOyAqLwotKwkJLyogCWRlc3RwLnU2NFsxXSA9IHNyY3AudTY0 WzFdIF4gYnVmcC51NjRbMV07ICovCi0rCQkvKiAvXCogMzIgYml0cyAqXC8gKi8KLSsJCS8qIH0g ZWxzZSAqLwotKwkJaWYgKChhbGlnbiAmIDB4MykgPT0gMCkgewotKwkJCWRlc3RwLnUzMlswXSA9 IHNyY3AudTMyWzBdIF4gYnVmcC51MzJbMF07Ci0rCQkJZGVzdHAudTMyWzFdID0gc3JjcC51MzJb MV0gXiBidWZwLnUzMlsxXTsKLSsJCQlkZXN0cC51MzJbMl0gPSBzcmNwLnUzMlsyXSBeIGJ1ZnAu dTMyWzJdOwotKwkJCWRlc3RwLnUzMlszXSA9IHNyY3AudTMyWzNdIF4gYnVmcC51MzJbM107Ci0r CQl9IGVsc2UgewotKwkJCS8qMSBieXRlIGF0IGEgdGltZSovCi0rCQkJc2l6ZV90IGk7Ci0rCQkJ Zm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFOyArK2kpCi0rCQkJCWRlc3RbaV0gPSBzcmNb aV0gXiBidWZbaV07Ci0rCQl9Ci0rCi0rCQkvKiBpbmMvZGVjcmVtZW50IHRoZSBwb2ludGVycyBi eSB0aGUgYmxvY2sgc2l6ZSAoMTYpKi8KLSsJCWRlc3RwLnUgKz0gQUVTX0JMT0NLX1NJWkU7Ci0r CQlzcmNwLnUgKz0gQUVTX0JMT0NLX1NJWkU7Ci0rCi0rCQkvKiBJbmNyZW1lbnQgcmVhZCBpbmRl eCwgc3dpdGNoIHF1ZXVlcyBvbiByb2xsb3ZlciAqLwotKwkJaWYgKChyaWR4ID0gKHJpZHggKyAx KSAlIEtRTEVOKSA9PSAwKSB7Ci0rCQkJb2xkcSA9IHE7Ci0rCi0rCQkJLyogTWFyayBuZXh0IHF1 ZXVlIGRyYWluaW5nLCBtYXkgbmVlZCB0byB3YWl0ICovCi0rCQkJYy0+cWlkeCA9IChjLT5xaWR4 ICsgMSkgJSBudW1rcTsKLSsJCQlxID0gJmMtPnFbYy0+cWlkeF07Ci0rCQkJcHRocmVhZF9tdXRl eF9sb2NrKCZxLT5sb2NrKTsKLSsJCQl3aGlsZSAocS0+cXN0YXRlICE9IEtRRlVMTCkgewotKwkJ CQlwdGhyZWFkX2NvbmRfd2FpdCgmcS0+Y29uZCwgJnEtPmxvY2spOwotKwkJCX0KLSsJCQlxLT5x c3RhdGUgPSBLUURSQUlOSU5HOwotKwkJCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNvbmQp OwotKwkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKLSsKLSsJCQkvKiBNYXJrIGNv bnN1bWVkIHF1ZXVlIGVtcHR5IGFuZCBzaWduYWwgcHJvZHVjZXJzICovCi0rCQkJcHRocmVhZF9t dXRleF9sb2NrKCZvbGRxLT5sb2NrKTsKLSsJCQlvbGRxLT5xc3RhdGUgPSBLUUVNUFRZOwotKwkJ CXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJm9sZHEtPmNvbmQpOwotKwkJCXB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZvbGRxLT5sb2NrKTsKLSsJCX0KLSsJfSB3aGlsZSAobGVuIC09IEFFU19CTE9DS19T SVpFKTsKLSsJYy0+cmlkeCA9IHJpZHg7Ci0rCXJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50 Ci0rc3NoX2Flc19jdHJfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1X2NoYXIgKmtl eSwgY29uc3QgdV9jaGFyICppdiwKLSsgICAgaW50IGVuYykKLSt7Ci0rCXN0cnVjdCBzc2hfYWVz X2N0cl9jdHhfbXQgKmM7Ci0rCWludCBpOwotKwotKwljaGFyICphZXNfdGhyZWFkcyA9IGdldGVu digiU1NIX0NJUEhFUl9USFJFQURTIik7Ci0rICAgICAgICBpZiAoYWVzX3RocmVhZHMgIT0gTlVM TCAmJiBzdHJsZW4oYWVzX3RocmVhZHMpICE9IDApCi0rCQljaXBoZXJfdGhyZWFkcyA9IGF0b2ko YWVzX3RocmVhZHMpOwotKwllbHNlCi0rCQljaXBoZXJfdGhyZWFkcyA9IDE7Ci0rCi0rCWlmIChj aXBoZXJfdGhyZWFkcyA8IDEpCi0rIAkJY2lwaGVyX3RocmVhZHMgPSAxOwotKwotKwlpZiAoY2lw aGVyX3RocmVhZHMgPiBNQVhfVEhSRUFEUykKLSsJCWNpcGhlcl90aHJlYWRzID0gTUFYX1RIUkVB RFM7Ci0rCi0rCW51bWtxID0gY2lwaGVyX3RocmVhZHMgKyAxOwotKwotKwlpZiAobnVta3EgPiBN QVhfTlVNS1EpCi0rCQludW1rcSA9IE1BWF9OVU1LUTsKLSsKLSsJZGVidWcoIlN0YXJ0aW5nICVk IHRocmVhZHMgYW5kICVkIHF1ZXVlc1xuIiwgY2lwaGVyX3RocmVhZHMsIG51bWtxKTsKLSsKLSsJ Lyogc2V0IHVwIHRoZSBpbml0aWFsIHN0YXRlIG9mIGMgKG91ciBjaXBoZXIgc3RyZWFtIHN0cnVj dCkgKi8KLSsgCWlmICgoYyA9IEVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjdHgpKSA9PSBO VUxMKSB7Ci0rCQljID0geG1hbGxvYyhzaXplb2YoKmMpKTsKLSsJCXB0aHJlYWRfcndsb2NrX2lu aXQoJmMtPnRpZF9sb2NrLCBOVUxMKTsKLSsjaWZkZWYgX19BUFBMRV9fCi0rCQlwdGhyZWFkX3J3 bG9ja19pbml0KCZjLT5zdG9wX2xvY2ssIE5VTEwpOwotKwkJYy0+ZXhpdF9mbGFnID0gRkFMU0U7 Ci0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKwkJYy0+c3RhdGUgPSBIQVZFX05PTkU7Ci0r Ci0rCQkvKiBpbml0aWFsaXplIHRoZSBtdXRleHMgYW5kIGNvbmRpdGlvbnMgZm9yIGVhY2ggbG9j ayBpbiBvdXIgc3RydWN0ICovCi0rCQlmb3IgKGkgPSAwOyBpIDwgbnVta3E7IGkrKykgewotKwkJ CXB0aHJlYWRfbXV0ZXhfaW5pdCgmYy0+cVtpXS5sb2NrLCBOVUxMKTsKLSsJCQlwdGhyZWFkX2Nv bmRfaW5pdCgmYy0+cVtpXS5jb25kLCBOVUxMKTsKLSsJCX0KLSsKLSsJCS8qIGF0dGFjaCBvdXIg c3RydWN0IHRvIHRoZSBjb250ZXh0ICovCi0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGEo Y3R4LCBjKTsKLSsJfQotKwotKwkvKiB3ZSBhcmUgaW5pdGlhbGl6aW5nIGJ1dCB0aGUgY3VycmVu dCBzdHJ1Y3R1cmUgYWxyZWFkeQotKwkgICBoYXMgYW4gSVYgYW5kIGtleSBzbyB3ZSB3YW50IHRv IGtpbGwgdGhlIGV4aXN0aW5nIGtleSBkYXRhCi0rCSAgIGFuZCBzdGFydCBvdmVyLiBUaGlzIGlz IGltcG9ydGFudCB3aGVuIHdlIG5lZWQgdG8gcmVrZXkgdGhlIGRhdGEgc3RyZWFtICovCi0rCWlm IChjLT5zdGF0ZSA9PSAoSEFWRV9LRVkgfCBIQVZFX0lWKSkgewotKwkJLyogdGVsbCB0aGUgcHJl Z2VuIHRocmVhZHMgdG8gZXhpdCAqLwotKwkJc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFkcyhj KTsKLSsKLSsjaWZkZWYgX19BUFBMRV9fCi0rCQkvKiByZXNldCB0aGUgZXhpdCBmbGFnICovCi0r CQljLT5leGl0X2ZsYWcgPSBGQUxTRTsKLSsjZW5kaWYgLyogX19BUFBMRV9fICovCi0rCi0rCQkv KiBTdGFydCBvdmVyIGdldHRpbmcga2V5ICYgaXYgKi8KLSsJCWMtPnN0YXRlID0gSEFWRV9OT05F OwotKwl9Ci0rCi0rCS8qIHNldCB0aGUgaW5pdGlhbCBrZXkgZm9yIHRoaXMga2V5IHN0cmVhbSBx dWV1ZSAqLwotKwlpZiAoa2V5ICE9IE5VTEwpIHsKLSsJCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5 LCBFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoKGN0eCkgKiA4LAotKwkJICAgJmMtPmFlc19rZXkp OwotKwkJYy0+b3JpZ19rZXkgPSBrZXk7Ci0rCQljLT5rZXlsZW4gPSBFVlBfQ0lQSEVSX0NUWF9r ZXlfbGVuZ3RoKGN0eCkgKiA4OwotKwkJYy0+c3RhdGUgfD0gSEFWRV9LRVk7Ci0rCX0KLSsKLSsJ Lyogc2V0IHRoZSBJViAqLwotKwlpZiAoaXYgIT0gTlVMTCkgewotKwkJLyogaW5pdCB0aGUgY291 bnRlciB0aGlzIGlzIGp1c3QgYSAxNmJ5dGUgdWNoYXIgKi8KLSsJCW1lbWNweShjLT5hZXNfY291 bnRlciwgaXYsIEFFU19CTE9DS19TSVpFKTsKLSsJCWMtPnN0YXRlIHw9IEhBVkVfSVY7Ci0rCX0K LSsKLSsJaWYgKGMtPnN0YXRlID09IChIQVZFX0tFWSB8IEhBVkVfSVYpKSB7Ci0rCQkvKiBDbGVh ciBxdWV1ZXMgKi8KLSsJCS8qIHNldCB0aGUgZmlyc3Qga2V5IGluIHRoZSBrZXkgcXVldWUgdG8g dGhlIGN1cnJlbnQgY291bnRlciAqLwotKwkJbWVtY3B5KGMtPnFbMF0uY3RyLCBjLT5hZXNfY291 bnRlciwgQUVTX0JMT0NLX1NJWkUpOwotKwkJLyogaW5kaWNhdGUgdGhhdCBpdCBuZWVkcyB0byBi ZSBpbml0aWFsaXplZCAqLwotKwkJYy0+cVswXS5xc3RhdGUgPSBLUUlOSVQ7Ci0rCQkvKiBmb3Ig ZWFjaCBvZiB0aGUgcmVtYWluaW5nIHF1ZXVlcyBzZXQgdGhlIGZpcnN0IGNvdW50ZXIgdG8gdGhl Ci0rCQkgKiBjb3VudGVyIGFuZCB0aGVuIGFkZCB0aGUgc2l6ZSBvZiB0aGUgcXVldWUgdG8gdGhl IGNvdW50ZXIgKi8KLSsJCWZvciAoaSA9IDE7IGkgPCBudW1rcTsgaSsrKSB7Ci0rCQkJbWVtY3B5 KGMtPnFbaV0uY3RyLCBjLT5hZXNfY291bnRlciwgQUVTX0JMT0NLX1NJWkUpOwotKwkJCXNzaF9j dHJfYWRkKGMtPnFbaV0uY3RyLCBpICogS1FMRU4sIEFFU19CTE9DS19TSVpFKTsKLSsJCQljLT5x W2ldLnFzdGF0ZSA9IEtRRU1QVFk7Ci0rCQl9Ci0rCQljLT5xaWR4ID0gMDsKLSsJCWMtPnJpZHgg PSAwOwotKwkJYy0+c3RydWN0X2lkID0gZ2xvYmFsX3N0cnVjdF9pZCsrOwotKwotKwotKwkJLyog U3RhcnQgdGhyZWFkcyAqLwotKyNkZWZpbmUgU1RBQ0tfU0laRSAoMTAyNCAqIDEwMjQpCi0rCQlw dGhyZWFkX2F0dHJfdCBhdHRyOwotKwkJcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotKwkJcHRo cmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgU1RBQ0tfU0laRSk7Ci0rCQlmb3IgKGkgPSAw OyBpIDwgY2lwaGVyX3RocmVhZHM7IGkrKykgewotKwkJCXB0aHJlYWRfcndsb2NrX3dybG9jaygm Yy0+dGlkX2xvY2spOwotKwkJCWlmIChwdGhyZWFkX2NyZWF0ZSgmYy0+dGlkW2ldLCAmYXR0ciwg dGhyZWFkX2xvb3AsIGMpICE9IDApCi0rCQkJCWZhdGFsICgiQUVTLUNUUiBNVCBDb3VsZCBub3Qg Y3JlYXRlIHRocmVhZCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKnNob3VsZCBkaWUgaGVyZSAqLwotKwkJCWVsc2UgewotKwkJCQljLT5p ZFtpXSA9IGk7Ci0rCQkJCWRlYnVnICgiQUVTLUNUUiBNVCBzcGF3bmVkIGEgdGhyZWFkIHdpdGgg aWQgJWx1IGluICVzICglbHUsICVkKSIsCi0rCQkJCSAgICAgICBjLT50aWRbaV0sIF9fRlVOQ1RJ T05fXywgYy0+c3RydWN0X2lkLCBjLT5pZFtpXSk7Ci0rCQkJfQotKwkJCXB0aHJlYWRfcndsb2Nr X3VubG9jaygmYy0+dGlkX2xvY2spOwotKwkJfQotKwkJcHRocmVhZF9tdXRleF9sb2NrKCZjLT5x WzBdLmxvY2spOwotKwkJLy8gd2FpdCBmb3IgYWxsIG9mIHRoZSB0aHJlYWRzIHRvIGJlIGluaXRp YWxpemVkCi0rCQl3aGlsZSAoYy0+cVswXS5xc3RhdGUgPT0gS1FJTklUKQotKwkJCXB0aHJlYWRf Y29uZF93YWl0KCZjLT5xWzBdLmNvbmQsICZjLT5xWzBdLmxvY2spOwotKwkJcHRocmVhZF9tdXRl eF91bmxvY2soJmMtPnFbMF0ubG9jayk7Ci0rCX0KLSsJcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRp YyBpbnQKLStzc2hfYWVzX2N0cl9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjdHgpCi0rewotKwlz dHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjOwotKwotKwlpZiAoKGMgPSBFVlBfQ0lQSEVSX0NU WF9nZXRfYXBwX2RhdGEoY3R4KSkgIT0gTlVMTCkgewotKwkJc3RvcF9hbmRfam9pbl9wcmVnZW5f dGhyZWFkcyhjKTsKLSsKLSsJCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSsJCWZyZWUoYyk7 Ci0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGEoY3R4LCBOVUxMKTsKLSsJfQotKwlyZXR1 cm4gMTsKLSt9Ci0rCi0rLyogPGZyaWVkbD4gKi8KLStjb25zdCBFVlBfQ0lQSEVSICoKLStldnBf YWVzX2N0cl9tdCh2b2lkKQotK3sKLSsJc3RhdGljIEVWUF9DSVBIRVIgKmFlc19jdHI7Ci0rCWFl c19jdHIgPSBFVlBfQ0lQSEVSX21ldGhfbmV3KE5JRF91bmRlZiwgMTYvKmJsb2NrKi8sIDE2Lypr ZXkqLyk7Ci0rCUVWUF9DSVBIRVJfbWV0aF9zZXRfaXZfbGVuZ3RoKGFlc19jdHIsIEFFU19CTE9D S19TSVpFKTsKLSsJRVZQX0NJUEhFUl9tZXRoX3NldF9pbml0KGFlc19jdHIsIHNzaF9hZXNfY3Ry X2luaXQpOwotKwlFVlBfQ0lQSEVSX21ldGhfc2V0X2NsZWFudXAoYWVzX2N0ciwgc3NoX2Flc19j dHJfY2xlYW51cCk7Ci0rCUVWUF9DSVBIRVJfbWV0aF9zZXRfZG9fY2lwaGVyKGFlc19jdHIsIHNz aF9hZXNfY3RyKTsKLSsjICBpZm5kZWYgU1NIX09MRF9FVlAKLSsJRVZQX0NJUEhFUl9tZXRoX3Nl dF9mbGFncyhhZXNfY3RyLCBFVlBfQ0lQSF9DQkNfTU9ERQotKwkJCQkgICAgICB8IEVWUF9DSVBI X1ZBUklBQkxFX0xFTkdUSAotKwkJCQkgICAgICB8IEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQK LSsJCQkJICAgICAgfCBFVlBfQ0lQSF9DVVNUT01fSVYpOwotKyMgIGVuZGlmIC8qU1NIX09MRF9F VlAqLwotKwlyZXR1cm4gYWVzX2N0cjsKLSt9Ci0rI2VuZGlmIC8qIE9TU0wgQ2hlY2sgKi8KLWRp ZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jdHItbXQtZnVuY3Rpb25zLmMgb3Bl bnNzaC0xMC4zcDEvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuYwotLS0tIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jdHItbXQtZnVuY3Rpb25zLmMJ MjAyNi0wNy0wMiAwMDoyNzoyOS43MjE5MTg5ODcgKzAyMDAKLUBAIC0wLDAgKzEsNjgyIEBACi0r LyoKLSsgKiBPcGVuU1NIIE11bHRpLXRocmVhZGVkIEFFUy1DVFIgQ2lwaGVyIFByb3ZpZGVyIGZv ciBPcGVuU1NMIDMKLSsgKgotKyAqIEF1dGhvcjogQmVuamFtaW4gQmVubmV0dCA8YmVuQHBzYy5l ZHU+Ci0rICogQXV0aG9yOiBNaWtlIFRhc290YSA8dGFzb3RhQGdtYWlsLmNvbT4KLSsgKiBBdXRo b3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+Ci0rICogQ29weXJpZ2h0IChjKSAyMDA4 LTIwMjIgUGl0dHNidXJnaCBTdXBlcmNvbXB1dGluZyBDZW50ZXIuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBCYXNlZCBvbiBvcmlnaW5hbCBPcGVuU1NIIEFFUy1DVFIgY2lwaGVyLiBT bWFsbCBwb3J0aW9ucyByZW1haW4gdW5jaGFuZ2VkLAotKyAqIENvcHlyaWdodCAoYykgMjAwMyBN YXJrdXMgRnJpZWRsIDxtYXJrdXNAb3BlbmJzZC5vcmc+Ci0rICoKLSsgKiBQZXJtaXNzaW9uIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkK LSsgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3Zp ZGVkIHRoYXQgdGhlIGFib3ZlCi0rICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSsgKgotKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElF UwotKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVE IFdBUlJBTlRJRVMgT0YKLSsgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotKyAqIEFOWSBTUEVDSUFMLCBESVJF Q1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSsg KiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMs IFdIRVRIRVIgSU4gQU4KLSsgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RI RVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotKyAqIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0rICovCi0rCi0r I2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rCi0rLyogb25seSBmb3Igc3lzdGVtcyB3aXRoIE9TU0wg MyAqLwotKyNpZmRlZiBXSVRIX09QRU5TU0wzCi0rI2luY2x1ZGUgPHN0ZGFyZy5oPgotKyNpbmNs dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSAieG1h bGxvYy5oIgotKyNpbmNsdWRlIDx1bmlzdGQuaD4KLSsjaW5jbHVkZSAiY2lwaGVyLWN0ci1tdC1m dW5jdGlvbnMuaCIKLSsjaW5jbHVkZSAibG9nLmgiCi0rCi0rLyogZm9yIHByb3ZpZGVyIGVycm9y IHN0cnVjdCAqLwotKyNpbmNsdWRlICJvc3NsMy1wcm92aWRlci1lcnIuaCIKLSsjaW5jbHVkZSAi bnVtLmgiCi0rCi0rLyogbm90ZSByZWdhcmRpbmcgdGhyZWFkcyBhbmQgcXVldWVzICovCi0rLyog aW5pdGlhbGx5IHRoaXMgY2lwaGVyIHdhcyB3cml0dGVuIGluIGEgd2F5IHRoYXQKLSsgKiB0aGUg a2V5IHN0cmVhbSB3YXMgZ2VuZXJhdGVkIGluIGEgcGVyIGNpcGhlciBibG9jawotKyAqIGxvb3Au IEZvciBleGFtcGxlLCBpZiB0aGUga2V5IHN0cmVhbSBxdWV1ZSBsZW5ndGggd2FzCi0rICogMTZr IGFuZCB0aGUgY2lwaGVyIGJsb2NrIHNpemUgd2FzIDE2IGJ5dGVzIGl0IHdvdWxkCi0rICogZmls bCB0aGUgcXVldWUgMTYgYnl0ZXMgYXQgYSB0aW1lLiBNaXRjaCBEb3JyZWxsIHBvaW50ZWQKLSsg KiBvdXQgdGhhdCB3ZSBjb3VsZCBmaWxsIHRoZSBxdWV1ZSBpbiBvbmNlIGNhbGwgZWxpbWluYXRp bmcKLSsgKiBsb29wIGFuZCBtdWx0aXBsZSBjYWxscyB0byBFVlBfRW5jcnlwdFVwZGF0ZS4gRG9p bmcgc28KLSsgKiBkcmFtYXRpY2FsbHkgcmVkdWNlZCBDUFUgbG9hZCBpbiB0aGUgdGhyZWFkcyBh bmQgaW5kaWNhdGVkCi0rICogdGhhdCB3ZSBjb3VsZCBhbHNvIGVsaW1pbmF0ZSBtb3N0IG9mIHRo ZSB0aHJlYWRzIGFuZCBxdWV1ZXMKLSsgKiBhcyBpdCB3b3VsZCB0YWtlIGZhciBsZXNzIHRpbWUg Zm9yIGEgcXVldWUgdG8gZWJ0ZXIgS1FfRlVMTAotKyAqIHN0YXRlLiBBcyBzdWNoLCB3ZSd2ZSBy ZWR1Y2VkIHRoZSBkZWZhdWx0IG51bWJlciBvZiB0aHJlYWRzCi0rICogYW5kIHF1ZXVlcyBmcm9t IDIgYW5kIDggKHJlc3BlY3RpdmVseSkgdG8gMSBhbmQgMi4gV2UndmUgYWxzbwotKyAqIGVsaW1u YXRlZCB0aGUgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHBoeXNpY2FsIG51bWJlciBvZiBjb3JlcyBv bgotKyAqIHRoZSBzeXN0ZW0gYW5kLCBpZiB0aGUgdXNlciBkZXNpcmVzLCBjYW4gc3BpbiB1cCBt b3JlIHRocmVhZHMKLSsgKiB1c2luZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWRkaXRpb25h bGx5LCBxdWV1ZXMgaXMgbm93IGZpeGVkCi0rICogYXQgdGhyZWFkX2NvdW50ICsgMS4KLSsgKiBj anIgMTAvMTkvMjAyMiAqLwotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVOQUJMRVMgLS0t LS0tLS0tLS0tLS0tLS0tLS0qLwotKy8qIE51bWJlciBvZiBwcmVnZW4gdGhyZWFkcyB0byB1c2Ug Ki8KLSsvKiB0aGlzIGlzIGEgZGVmYXVsdCB2YWx1ZS4gVGhlIGFjdHVhbCBudW1iZXIgaXMKLSsg KiBkZXRlcm1pbmVkIGR1cmluZyBpbml0IGFzIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJlcgotKyAq IG9mIGF2YWlsYWJsZSBjb3JlcyAqLwotK2ludCBjaXBoZXJfdGhyZWFkcyA9IDE7Ci0rCi0rLyog TnVtYmVyIG9mIGtleXN0cmVhbSBxdWV1ZXMgKi8KLSsvKiBpZGVhbGx5IHRoaXMgc2hvdWxkIGJl IGxhcmdlIGVub3VnaCBzbyB0aGF0IHRoZXJlIGlzCi0rICogYWx3YXlzIGEga2V5IHF1ZXVlIGZv ciBhIHRocmVhZCB0byB3b3JrIG9uCi0rICogc28gbWF5YmUgZG91YmxlIG9mIHRoZSBudW1iZXIg b2YgdGhyZWFkcy4gQWdhaW4gdGhpcwotKyAqIGlzIGEgZGVmYXVsdCBhbmQgdGhlIGFjdHVhbCB2 YWx1ZSBpcyBkZXRlcm1pbmVkIGluIGluaXQqLwotK2ludCBudW1rcSA9IDI7Ci0rLyotLS0tLS0t LS0tLS0tLS0tLS0tLSBFTkQgVFVOQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKy8q IGdsb2JhbHMgKi8KLSsvKiBob3cgd2UgaW5jcmVtZW50IHRoZSBpZCB0aGUgc3RydWN0cyB3ZSBj cmVhdGUgKi8KLStsb25nIHVuc2lnbmVkIGludCBnbG9iYWxfc3RydWN0X2lkID0gMDsKLSsKLSsv KiBrZWVwIGEgY29weSBvZiB0aGUgcG9pbnRlcnMgY3JlYXRlZCBpbiB0aHJlYWRfbG9vcCB0byBm cmVlIGxhdGVyICovCi0rc3RydWN0IGFlc19tdF9jdHhfcHRycyAqZXZwX3B0cnMgPSBOVUxMOwot KwotKy8qIHByaXZhdGUgZnVuY3Rpb25zICovCi0rCi0rLyoKLSsgKiBBZGQgbnVtIHRvIGNvdW50 ZXIgJ2N0cicKLSsgKi8KLStzdGF0aWMgdm9pZAotK3NzaF9jdHJfYWRkKHVfY2hhciAqY3RyLCB1 aW50MzJfdCBudW0sIHVfaW50IGxlbikKLSt7Ci0rCWludCBpOwotKwl1aW50MTZfdCBuOwotKwot Kwlmb3IgKG4gPSAwLCBpID0gbGVuIC0gMTsgaSA+PSAwICYmIChudW0gfHwgbik7IGktLSkgewot KwkJbiA9IGN0cltpXSArIChudW0gJiAweGZmKSArIG47Ci0rCQludW0gPj49IDg7Ci0rCQljdHJb aV0gPSBuICYgMHhmZjsKLSsJCW4gPj49IDg7Ci0rCX0KLSt9Ci0rCi0rLyoKLSsgKiBUaHJlYWRz IG1heSBiZSBjYW5jZWxsZWQgaW4gYSBwdGhyZWFkX2NvbmRfd2FpdCwgd2UgbXVzdCBmcmVlIHRo ZSBtdXRleAotKyAqLwotK3N0YXRpYyB2b2lkCi0rdGhyZWFkX2xvb3BfY2xlYW51cCh2b2lkICp4 KQotK3sKLSsJcHRocmVhZF9tdXRleF91bmxvY2soKHB0aHJlYWRfbXV0ZXhfdCAqKXgpOwotK30K LSsKLSsjaWZkZWYgX19BUFBMRV9fCi0rLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIGV4aXQsIHdlIGFy ZSBkb2luZyBib3RoIGNhbmNlbCBhbmQgZXhpdCBjb25kaXRpb24KLSsgKiBzaW5jZSBvbiBPU1gg dGhyZWFkcyBzZWVtIHRvIG9jY2FzaW9uYWxseSBmYWlsIHRvIG5vdGljZSB3aGVuIHRoZXkgaGF2 ZQotKyAqIGJlZW4gY2FuY2VsbGVkLiBXZSB3YW50IHRvIGhhdmUgYSBiYWNrdXAgdG8gbWFrZSBz dXJlIHRoYXQgd2Ugd29uJ3QgaGFuZwotKyAqIHdoZW4gdGhlIG1haW4gcHJvY2VzcyBqb2luKCkt cyB0aGUgY2FuY2VsbGVkIHRocmVhZC4KLSsgKi8KLStzdGF0aWMgdm9pZAotK3RocmVhZF9sb29w X2NoZWNrX2V4aXQoc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHgpCi0rewotKwlpbnQg ZXhpdF9mbGFnOwotKwotKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmFlc19tdF9jdHgtPnN0b3Bf bG9jayk7Ci0rCWV4aXRfZmxhZyA9IGFlc19tdF9jdHgtPmV4aXRfZmxhZzsKLSsJcHRocmVhZF9y d2xvY2tfdW5sb2NrKCZhZXNfbXRfY3R4LT5zdG9wX2xvY2spOwotKwotKwlpZiAoZXhpdF9mbGFn KQotKwkJcHRocmVhZF9leGl0KE5VTEwpOwotK30KLSsjZWxzZQotKyMgZGVmaW5lIHRocmVhZF9s b29wX2NoZWNrX2V4aXQocykKLSsjZW5kaWYgLyogX19BUFBMRV9fICovCi0rCi0rLyoKLSsgKiBI ZWxwZXIgZnVuY3Rpb24gdG8gdGVybWluYXRlIHRoZSBoZWxwZXIgdGhyZWFkcwotKyAqLwotK3N0 YXRpYyB2b2lkCi0rc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFkcyhzdHJ1Y3QgYWVzX210X2N0 eF9zdCAqYWVzX210X2N0eCkKLSt7Ci0rCWludCBpOwotKwotKyNpZmRlZiBfX0FQUExFX18KLSsJ Lyogbm90aWZ5IHRocmVhZHMgdGhhdCB0aGV5IHNob3VsZCBleGl0ICovCi0rCXB0aHJlYWRfcnds b2NrX3dybG9jaygmYWVzX210X2N0eC0+c3RvcF9sb2NrKTsKLSsJYWVzX210X2N0eC0+ZXhpdF9m bGFnID0gVFJVRTsKLSsJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZhZXNfbXRfY3R4LT5zdG9wX2xv Y2spOwotKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KLSsKLSsJLyogQ2FuY2VsIHByZWdlbiB0aHJl YWRzICovCi0rCWZvciAoaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7Ci0rCQlkZWJ1 Z19mICgiQ2FuY2VsZWQgJWx1ICglbHUsJWQpIiwgYWVzX210X2N0eC0+dGlkW2ldLCBhZXNfbXRf Y3R4LT5zdHJ1Y3RfaWQsCi0rCQkgICAgICAgYWVzX210X2N0eC0+aWRbaV0pOwotKwkJcHRocmVh ZF9jYW5jZWwoYWVzX210X2N0eC0+dGlkW2ldKTsKLSsJfQotKwlmb3IgKGkgPSAwOyBpIDwgY2lw aGVyX3RocmVhZHM7IGkrKykgewotKwkJaWYgKHB0aHJlYWRfa2lsbChhZXNfbXRfY3R4LT50aWRb aV0sIDApICE9IDApCi0rCQkJZGVidWczKCJBRVMtQ1RSIE1UIHB0aHJlYWRfam9pbiBmYWlsdXJl OiBJbnZhbGlkIHRocmVhZCBpZCAlbHUgaW4gJXMiLAotKwkJCSAgICAgICBhZXNfbXRfY3R4LT50 aWRbaV0sIF9fZnVuY19fKTsKLSsJCWVsc2UgewotKwkJCWRlYnVnX2YgKCJKb2luaW5nICVsdSAo JWx1LCAlZCkiLCBhZXNfbXRfY3R4LT50aWRbaV0sIGFlc19tdF9jdHgtPnN0cnVjdF9pZCwKLSsJ CQkJIGFlc19tdF9jdHgtPmlkW2ldKTsKLSsJCQlwdGhyZWFkX2pvaW4oYWVzX210X2N0eC0+dGlk W2ldLCBOVUxMKTsKLSsJCQkvKiB0aGlzIGZpbmRzIHRoZSBlbnRyeSBpbiB0aGUgaGFzaCB0aGF0 IGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0rCQkJICogdGhyZWFkIGlkLiBUaGF0J3MgdXNlZCB0byBm aW5kIHRoZSBwb2ludGVyIHRvIHRoZSBjaXBoZXIgc3RydWN0Ci0rCQkJICogY3JlYXRlZCBpbiB0 aHJlYWRfbG9vcC4gKi8KLSsJCQlzdHJ1Y3QgYWVzX210X2N0eF9wdHJzICpwdHI7Ci0rCQkJSEFT SF9GSU5EX0lOVChldnBfcHRycywgJmFlc19tdF9jdHgtPnRpZFtpXSwgcHRyKTsKLSsJCQlFVlBf Q0lQSEVSX0NUWF9mcmVlKHB0ci0+cG9pbnRlcik7Ci0rCQkJSEFTSF9ERUwoZXZwX3B0cnMsIHB0 cik7Ci0rCQkJZnJlZShwdHIpOwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rCXB0 aHJlYWRfcndsb2NrX2Rlc3Ryb3koJmFlc19tdF9jdHgtPnRpZF9sb2NrKTsKLSt9Ci0rCi0rLyog ZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byB1c2UKLSsgKiBUZXN0aW5nIGluZGlj YXRlcyB0aGF0IGluIG1vc3QgYWxsIHNpdHVhdGlvbnMgdGhlIG9wdGltYWwgbnVtYmVyIG9mCi0r ICogdGhyZWFkcyBpcyAxIG1lYW5pbmcgMSBmb3IgaW5ib3VuZCBhbmQgMSBmb3Igb3V0Ym91bmQu IFRoZSBvcHRpbWFsCi0rICogcXVldWUgY291bnQgaGFzIGFsc28gYmVlbiBkZXRlcm1pbmVkIHRv IGJlIHRocmVhZF9jb3VudCArIDEuCi0rICogbm90ZSB0aGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdHdv IGdsb2JhbHMgLSBudW1rcSBhbmQgY2lwaGVyX3RocmVhZHMKLSsgKiBpdCByZXR1cm5zIHRoZSB2 YWx1ZSBvZiBjaXBoZXJfdGhyZWFkcyBidXQgaXQgZG9lc24ndCBuZWVkIHRvICovCi0rc3RhdGlj IGludCBnZXRfdGhyZWFkX2NvdW50KCkgewotKwotKwljaGFyICogYWVzX3RocmVhZHMgPSBnZXRl bnYoIlNTSF9DSVBIRVJfVEhSRUFEUyIpOwotKwlkZWJ1Z19mICgiU1NIIHRocmVhZCBjb3VudCBp cyAlcyIsIGFlc190aHJlYWRzKTsKLSsgICAgICAgIGlmIChhZXNfdGhyZWFkcyAhPSBOVUxMICYm IHN0cmxlbihhZXNfdGhyZWFkcykgIT0gMCkKLSsJCWNpcGhlcl90aHJlYWRzID0gYXRvaShhZXNf dGhyZWFkcyk7Ci0rCWVsc2UKLSsJCWNpcGhlcl90aHJlYWRzID0gMTsKLSsKLSsJaWYgKGNpcGhl cl90aHJlYWRzIDwgMSkKLSsgCQljaXBoZXJfdGhyZWFkcyA9IDE7Ci0rCi0rCWlmIChjaXBoZXJf dGhyZWFkcyA+IE1BWF9USFJFQURTKQotKwkJY2lwaGVyX3RocmVhZHMgPSBNQVhfVEhSRUFEUzsK LSsKLSsJbnVta3EgPSBjaXBoZXJfdGhyZWFkcyArIDE7Ci0rCi0rCWlmIChudW1rcSA+IE1BWF9O VU1LUSkKLSsJCW51bWtxID0gTUFYX05VTUtROwotKwotKwlkZWJ1Z19mICgiU3RhcnRpbmcgJWQg dGhyZWFkcyBhbmQgJWQgcXVldWVzXG4iLCBjaXBoZXJfdGhyZWFkcywgbnVta3EpOwotKwotKwly ZXR1cm4gKGNpcGhlcl90aHJlYWRzKTsKLSt9Ci0rCi0rCi0rLyoKLSsgKiBUaGUgbGlmZSBvZiBh IHByZWdlbiB0aHJlYWQ6Ci0rICogICAgRmluZCBlbXB0eSBrZXlzdHJlYW0gcXVldWVzIGFuZCBm aWxsIHRoZW0gdXNpbmcgdGhlaXIgY291bnRlci4KLSsgKiAgICBXaGVuIGRvbmUsIHVwZGF0ZSBj b3VudGVyIGZvciB0aGUgbmV4dCBmaWxsLgotKyAqLwotK3N0YXRpYyB2b2lkICoKLSt0aHJlYWRf bG9vcCh2b2lkICpqb2IpCi0rewotKwlFVlBfQ0lQSEVSX0NUWCAqIHZvbGF0aWxlIGV2cF9jdHg7 Ci0rCXN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4ID0gam9iOwotKwlzdHJ1Y3Qga3Eg KnE7Ci0rCXN0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKnB0cjsKLSsJcHRocmVhZF90IGZpcnN0X3Rp ZDsKLSsJaW50IG91dGxlbjsKLSsJdV9jaGFyIG15bnVsbFtLUUxFTiAqIEFFU19CTE9DS19TSVpF XTsKLSsJbWVtc2V0KCZteW51bGwsIDAsIEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOwotKwotKwkv KiBnZXQgdGhlIHRocmVhZCBpZCB0byBzZWUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgb25lICovCi0r CXB0aHJlYWRfcndsb2NrX3JkbG9jaygmYWVzX210X2N0eC0+dGlkX2xvY2spOwotKwlmaXJzdF90 aWQgPSBhZXNfbXRfY3R4LT50aWRbMF07Ci0rCXB0aHJlYWRfcndsb2NrX3VubG9jaygmYWVzX210 X2N0eC0+dGlkX2xvY2spOwotKwotKwkvKiBjcmVhdGUgdGhlIGNvbnRleHQgZm9yIHRoaXMgdGhy ZWFkICovCi0rCWV2cF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKLSsKLSsJLyoga2VlcCB0 cmFjayBvZiB0aGUgcG9pbnRlciBmb3IgdGhlIGV2cCBpbiB0aGlzIHN0cnVjdAotKwkgKiBzbyB3 ZSBjYW4gZnJlZSBpdCBsYXRlci4gU28gd2UgcGxhY2UgaXQgaW4gYSBoYXNoIGluZGV4ZWQgb24g dGhlCi0rCSAqIHRocmVhZCBpZCwgd2hpY2ggaXMgYXZhaWxhYmxlIHRvIHVzIGluIHRoZSBmcmVl IGZ1bmN0aW9uLgotKwkgKiBOb3RlLCB0aGUgdGhyZWFkIGlkIGlzbid0IG5lY2Vzc2FyeSB1bmlx dWUgYWNyb3NzIHJla2V5cyBidXQKLSsJICogdGhhdCdzIG9rYXkgYXMgdGhleSBhcmUgdW5pcXVl IGR1cmluZyBhIGtleS4gKi8KLSsJcHRyID0gbWFsbG9jKHNpemVvZiAqcHRyKTsgLypmcmVlZCBp biBzdG9wICYgcHJlam9pbiAqLwotKwlwdHItPnRpZCA9IHB0aHJlYWRfc2VsZigpOyAvKiBpbmRl eCBmb3IgaGFzaCAqLwotKwlwdHItPnBvaW50ZXIgPSBldnBfY3R4OwotKwlIQVNIX0FERF9JTlQo ZXZwX3B0cnMsIHRpZCwgcHRyKTsKLSsKLSsJLyogaW5pdGlhbGl6ZSB0aGUgY2lwaGVyIGN0eCB3 aXRoIHRoZSBrZXkgcHJvdmlkZWQKLSsJICogZGV0ZXJtaW5iZSB3aGljaCBjaXBoZXIgdG8gdXNl IGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSAqLwotKwlpZiAoYWVzX210X2N0eC0+a2V5bGVuID09IDI1 NikKLSsJCUVWUF9FbmNyeXB0SW5pdF9leChldnBfY3R4LCBFVlBfYWVzXzI1Nl9jdHIoKSwgTlVM TCwgYWVzX210X2N0eC0+b3JpZ19rZXksIE5VTEwpOwotKwllbHNlIGlmIChhZXNfbXRfY3R4LT5r ZXlsZW4gPT0gMTI4KQotKwkJRVZQX0VuY3J5cHRJbml0X2V4KGV2cF9jdHgsIEVWUF9hZXNfMTI4 X2N0cigpLCBOVUxMLCBhZXNfbXRfY3R4LT5vcmlnX2tleSwgTlVMTCk7Ci0rCWVsc2UgaWYgKGFl c19tdF9jdHgtPmtleWxlbiA9PSAxOTIpCi0rCQlFVlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0eCwg RVZQX2Flc18xOTJfY3RyKCksIE5VTEwsIGFlc19tdF9jdHgtPm9yaWdfa2V5LCBOVUxMKTsKLSsJ ZWxzZQotKwkJZmF0YWwoIkludmFsaWQga2V5IGxlbmd0aCBvZiAlZCBpbiBBRVMgQ1RSIE1ULiBF eGl0aW5nIiwgYWVzX210X2N0eC0+a2V5bGVuKTsKLSsKLSsJLyoKLSsJICogSGFuZGxlIHRoZSBz cGVjaWFsIGNhc2Ugb2Ygc3RhcnR1cCwgb25lIHRocmVhZCBtdXN0IGZpbGwKLSsJICogdGhlIGZp cnN0IEtRIHRoZW4gbWFyayBpdCBhcyBkcmFpbmluZy4gTG9jayBoZWxkIHRocm91Z2hvdXQuCi0r CSAqLwotKwlpZiAocHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgZmlyc3RfdGlkKSkgewot KwkJLyogZ2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBrZXkgcXVldWUgc3RydWN0ICovCi0r CQlxID0gJmFlc19tdF9jdHgtPnFbMF07Ci0rCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2sp OwotKwkJLyogaWYgd2UgYXJlIGluIHRoZSBJTklUIHN0YXRlIHRoZW4gZmlsbCB0aGUgcXVldWUg Ki8KLSsJCWlmIChxLT5xc3RhdGUgPT0gS1FJTklUKSB7Ci0rCQkJLyogc2V0IHRoZSBpbml0aWFs IGNvdW50ZXIgKi8KLSsJCQlFVlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0eCwgTlVMTCwgTlVMTCwg TlVMTCwgcS0+Y3RyKTsKLSsJCQkvKiBlbmN5cGhlciBhIGJsb2NrIHNpemVkIG51bGwgc3RyaW5n IChteW51bGwpIHdpdGggdGhlIGtleS4gVGhpcwotKwkJCSAqIHJldHVybnMgdGhlIGtleXN0cmVh bSBiZWNhdXNlIHhvcmluZyB0aGUga2V5c3RyZWFtCi0rCQkJICogYWdhaW5zdCBudWxsIHJldHVy bnMgdGhlIGtleXN0cmVhbS4gU3RvcmUgdGhhdCBpbiB0aGUgYXBwcm9wcmlhdGUgcXVldWUgKi8K LSsJCQlFVlBfRW5jcnlwdFVwZGF0ZShldnBfY3R4LCBxLT5rZXlzWzBdLCAmb3V0bGVuLCBteW51 bGwsIEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOwotKwkJCS8qIFVwZGF0ZSB0aGUgYWVzIGNvdW50 ZXIgKi8KLSsJCQlzc2hfY3RyX2FkZChxLT5jdHIsIEtRTEVOICogbnVta3EsIEFFU19CTE9DS19T SVpFKTsKLSsJCQkvKiBzaW5jZSB0aGlzIGlzIHRoZSBmaXJzdCB0aHJlYWQgc2V0IGl0IHRvIGRy YWluaW5nICovCi0rCQkJcS0+cXN0YXRlID0gS1FEUkFJTklORzsKLSsJCQlwdGhyZWFkX2NvbmRf YnJvYWRjYXN0KCZxLT5jb25kKTsKLSsJCX0KLSsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5s b2NrKTsKLSsJfQotKwotKwkvKgotKwkgKiBOb3JtYWwgY2FzZSBpcyB0byBmaW5kIGVtcHR5IHF1 ZXVlcyBhbmQgZmlsbCB0aGVtLCBza2lwcGluZyBvdmVyCi0rCSAqIHF1ZXVlcyBhbHJlYWR5IGZp bGxlZCBieSBvdGhlciB0aHJlYWRzIGFuZCBzdG9wcGluZyB0byB3YWl0IGZvcgotKwkgKiBhIGRy YWluaW5nIHF1ZXVlIHRvIGJlY29tZSBlbXB0eS4KLSsJICoKLSsJICogTXVsdGlwbGUgdGhyZWFk cyBtYXkgYmUgd2FpdGluZyBvbiBhIGRyYWluaW5nIHF1ZXVlIGFuZCBhd29rZW4KLSsJICogd2hl biBlbXB0eS4gVGhlIGZpcnN0IHRocmVhZCB0byB3YWtlIHdpbGwgbWFyayBpdCBhcyBmaWxsaW5n LAotKwkgKiBvdGhlcnMgd2lsbCBtb3ZlIG9uIHRvIGZpbGwsIHNraXAsIG9yIHdhaXQgb24gdGhl IG5leHQgcXVldWUuCi0rCSAqIFdlIGluaXQgcWlkeCBoZXJlIGJlY2F1c2UgaWYgd2UgZG8gaXQg YXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24KLSsJICogd2UgZ2V0IGEgd2FybmluZyBhYm91dCBp dCBwb3NzaWJseSBiZWluZyBjbG9iYmVyZWQuIFRoZSBleGFjdCByZWFzb24KLSsJICogZG9lc24n dCBtYWtlIGEgbG90IG9mIHNlbnNlIGJ1dCBpdCBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQotKwkg KiBmaXJzdCBwdGhyZWFkX3J3bG9ja19yZGxvY2soKS4gTWlnaHQgaGF2ZSBzb21ldGhpbmcgdG8g ZG8gd2l0aAotKwkgKiBpbmNvcnJlY3QgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4KLSsJICovCi0r CWludCBxaWR4OwotKwlmb3IgKHFpZHggPSAxOzsgcWlkeCA9IChxaWR4ICsgMSkgJSBudW1rcSkg ewotKwkJLyogQ2hlY2sgaWYgSSB3YXMgY2FuY2VsbGVkLCBhbHNvIGNoZWNrZWQgaW4gY29uZF93 YWl0ICovCi0rCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKLSsKLSsJCS8qIENoZWNrIGlmIHdlIHNo b3VsZCBleGl0IGFzIHdlbGwgKi8KLSsJCXRocmVhZF9sb29wX2NoZWNrX2V4aXQoYWVzX210X2N0 eCk7Ci0rCi0rCQkvKiBMb2NrIHF1ZXVlIGFuZCBibG9jayBpZiBpdHMgZHJhaW5pbmcgKi8KLSsJ CXEgPSAmYWVzX210X2N0eC0+cVtxaWR4XTsKLSsJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9j ayk7Ci0rCQlwdGhyZWFkX2NsZWFudXBfcHVzaCh0aHJlYWRfbG9vcF9jbGVhbnVwLCAmcS0+bG9j ayk7Ci0rCQl3aGlsZSAocS0+cXN0YXRlID09IEtRRFJBSU5JTkcgfHwgcS0+cXN0YXRlID09IEtR SU5JVCkgewotKwkJCXRocmVhZF9sb29wX2NoZWNrX2V4aXQoYWVzX210X2N0eCk7Ci0rCQkJcHRo cmVhZF9jb25kX3dhaXQoJnEtPmNvbmQsICZxLT5sb2NrKTsKLSsJCX0KLSsJCXB0aHJlYWRfY2xl YW51cF9wb3AoMCk7Ci0rCi0rCQkvKiBJZiBmaWxsaW5nIG9yIGZ1bGwsIHNvbWVib2R5IGVsc2Ug Z290IGl0LCBza2lwICovCi0rCQlpZiAocS0+cXN0YXRlICE9IEtRRU1QVFkpIHsKLSsJCQlwdGhy ZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7Ci0rCQkJY29udGludWU7Ci0rCQl9Ci0rCi0rCQkv KgotKwkJICogRW1wdHksIGxldCdzIGZpbGwgaXQuCi0rCQkgKiBRdWV1ZSBsb2NrIGlzIHJlbGlu cXVpc2hlZCB3aGlsZSB3ZSBkbyB0aGlzIHNvIG90aGVycwotKwkJICogY2FuIHNlZSB0aGF0IGl0 J3MgYmVpbmcgZmlsbGVkLgotKwkJICovCi0rCQlxLT5xc3RhdGUgPSBLUUZJTExJTkc7Ci0rCQlw dGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKLSsJCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZxLT5sb2NrKTsKLSsKLSsJCS8qIHNldCB0aGUgaW5pdGlhbCBjb3VudGVyICovCi0rCQlFVlBf RW5jcnlwdEluaXRfZXgoZXZwX2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgcS0+Y3RyKTsKLSsKLSsJ CS8qIHNlZSBjb3Jlc3BvbmRpbmcgYmxvY2sgYWJvdmUgZm9yIHVzZWZ1bCBjb21tZW50cyAqLwot KwkJRVZQX0VuY3J5cHRVcGRhdGUoZXZwX2N0eCwgcS0+a2V5c1swXSwgJm91dGxlbiwgbXludWxs LCBLUUxFTiAqIEFFU19CTE9DS19TSVpFKTsKLSsKLSsJCS8qIFJlLWxvY2ssIG1hcmsgZnVsbCBh bmQgc2lnbmFsIGNvbnN1bWVyICovCi0rCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2spOwot KwkJc3NoX2N0cl9hZGQocS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBBRVNfQkxPQ0tfU0laRSk7Ci0r CQlxLT5xc3RhdGUgPSBLUUZVTEw7Ci0rCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5jb25k KTsKLSsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKLSsJfQotKwotKwlyZXR1cm4g TlVMTDsKLSt9Ci0rCi0rCi0rLyogT3VyIHZlcnNpb24gb2YgdGhlIEVWUCBmdW5jdGlvbnMKLSsg KiB0aGVzZSBhcmUgcHVibGljIGFzIHRoZXkgYXJlIHVzZWQgYnkgdGhlIHByb3ZpZGVyICovCi0r Ci0rLyogaW5zdGFudGlhdGUgdGhlIGNpcGhlciBjb250ZXh0LgotKyAqIGluIHRoaXMgd2UgY3Jl YXRlIHRoZSBFVlAgY3R4IGFuZCB0aGUgQUVTIGN0eCwgc2V0dXAgdGhlIEFFUyBjdHgKLSsgKiBp bml0aWFsaXplIHRoZSBFVlAgYW5kIHRoZW4gYXR0YWNoIHRoZSBBRVMgY3R4IHRvIHRoZSBFVlAg Y3R4LgotKyAqIFRoZSAqb25seSogZGlmZmVyZW5jZSBiZXR3ZWVuIGFlc19tdF9uZXdjdHhfMjU2 fDE5MnwxMjggaXMgdGhlCi0rICoga2V5bGVuZ3RoIG9mIHRoZSBjaXBoZXIgdXNlZCBpbiBFVlBf Q2lwaGVySW5pdAotKyAqIHBhcmFtZXRlcnM6IHByb3ZpZGVyIGNvbnRleHQKLSsgKiByZXR1cm5z OiBFVlAgY29udGV4dAotKyAqLwotKy8qIGhvbmVzdGx5IHRoZSB3YXkgdGhpcyB3b3JrcyBtYWtl cyBtZSB0aGluayB0aGF0IHRoZXJlIGhhcyB0byBiZQotKyAqIGEgYmV0dGVyIHdheSBvZiBkb2lu ZyB0aGlzIGhvd2V2ZXIsIEkndmUgeWV0IHRvIGZpbmQgb25lIHRoYXQgZG9lc24ndAotKyAqIGlu dm9sdmUgbW9yZSBtYWRuZXNzLiBJIHRoaW5rIHRoYXQncyBtb3N0bHkgYmVjYXNlIEkgZG9uJ3Qg dW5kZXJzdGFuZAotKyAqIGhvdyBwYXJhbXMgd29yayBwcm9wZXJseS4gSSBmZWVsIGxpa2UgSSBz aG91ZGwgYmUgYWJsZSB0byB1c2UgdGhlbQotKyAqIHRvIHNwZWNpZnkgdGhlIGtleSBsZW5ndGgg YnV0Li4uIGFsc28sIEknZCB0aGluayBJJ2QgYmUgYWJsZSB0bwotKyAqIHNldCBhZXNfbXRfY3R4 X3N0LT5rZXlsZW4gdG8gdGhlIGtleWxlbmd0aCBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8KLSsg KiB3b3JrIGVpdGhlci4gVGhhdCBzYWlkLCB0aGlzIGRvZXMgd29yayBldmVuIGlmIGl0J3MgYSBi aXQgY2x1bmt5LgotKyAqIC1janIgMDkvMDgvMjAyMiAqLwotK3ZvaWQgKmFlc19tdF9uZXdjdHhf MjU2KHZvaWQgKnByb3ZjdHgpCi0rewotKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0 eCA9IG1hbGxvYyhzaXplb2YoKmFlc19tdF9jdHgpKTsKLSsJRVZQX0NJUEhFUl9DVFggKmV2cF9j dHggPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKLSsKLSsJaWYgKChhZXNfbXRfY3R4ICE9IE5VTEwp ICYmIChldnBfY3R4ICE9IE5VTEwpKSB7Ci0rCQlnZXRfdGhyZWFkX2NvdW50KCk7IC8qIHVwZGF0 ZSBjaXBoZXJfdGhyZWFkcyBhbmQgbnVta3EgKi8KLSsJCXB0aHJlYWRfcndsb2NrX2luaXQoJmFl c19tdF9jdHgtPnRpZF9sb2NrLCBOVUxMKTsKLSsjaWZkZWYgX19BUFBMRV9fCi0rCQlwdGhyZWFk X3J3bG9ja19pbml0KCZhZXNfbXRfY3R4LT5zdG9wX2xvY2ssIE5VTEwpOwotKwkJYWVzX210X2N0 eC0+ZXhpdF9mbGFnID0gRkFMU0U7Ci0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKwkJYWVz X210X2N0eC0+c3RhdGUgPSBIQVZFX05PTkU7Ci0rCi0rCQkvKiBpbml0aWFsaXplIHRoZSBtdXRl eHMgYW5kIGNvbmRpdGlvbnMgZm9yIGVhY2ggbG9jayBpbiBvdXIgc3RydWN0ICovCi0rCQlmb3Ig KGludCBpID0gMDsgaSA8IG51bWtxOyBpKyspIHsKLSsJCQlwdGhyZWFkX211dGV4X2luaXQoJmFl c19tdF9jdHgtPnFbaV0ubG9jaywgTlVMTCk7Ci0rCQkJcHRocmVhZF9jb25kX2luaXQoJmFlc19t dF9jdHgtPnFbaV0uY29uZCwgTlVMTCk7Ci0rCQl9Ci0rCQlhZXNfbXRfY3R4LT5wcm92Y3R4ID0g cHJvdmN0eDsKLSsJCUVWUF9DaXBoZXJJbml0KGV2cF9jdHgsIEVWUF9hZXNfMjU2X2N0cigpLCBO VUxMLCBOVUxMLCAwKTsKLSsJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YShldnBfY3R4LCBh ZXNfbXRfY3R4KTsKLSsJCXJldHVybiBldnBfY3R4OwotKwl9Ci0rCXJldHVybiBOVUxMOwotK30K LSsKLSt2b2lkICphZXNfbXRfbmV3Y3R4XzE5Mih2b2lkICpwcm92Y3R4KQotK3sKLSsJc3RydWN0 IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHggPSBtYWxsb2Moc2l6ZW9mKCphZXNfbXRfY3R4KSk7 Ci0rCUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7Ci0rCi0r CWlmICgoYWVzX210X2N0eCAhPSBOVUxMKSAmJiAoZXZwX2N0eCAhPSBOVUxMKSkgewotKwkJZ2V0 X3RocmVhZF9jb3VudCgpOyAvKiB1cGRhdGUgY2lwaGVyX3RocmVhZHMgYW5kIG51bWtxICovCi0r CQlwdGhyZWFkX3J3bG9ja19pbml0KCZhZXNfbXRfY3R4LT50aWRfbG9jaywgTlVMTCk7Ci0rI2lm ZGVmIF9fQVBQTEVfXwotKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVzX210X2N0eC0+c3RvcF9s b2NrLCBOVUxMKTsKLSsJCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IEZBTFNFOwotKyNlbmRpZiAv KiBfX0FQUExFX18gKi8KLSsKLSsJCWFlc19tdF9jdHgtPnN0YXRlID0gSEFWRV9OT05FOwotKwot KwkJLyogaW5pdGlhbGl6ZSB0aGUgbXV0ZXhzIGFuZCBjb25kaXRpb25zIGZvciBlYWNoIGxvY2sg aW4gb3VyIHN0cnVjdCAqLwotKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1rcTsgaSsrKSB7Ci0r CQkJcHRocmVhZF9tdXRleF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmxvY2ssIE5VTEwpOwotKwkJ CXB0aHJlYWRfY29uZF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmNvbmQsIE5VTEwpOwotKwkJfQot KwkJYWVzX210X2N0eC0+cHJvdmN0eCA9IHByb3ZjdHg7Ci0rCQlFVlBfQ2lwaGVySW5pdChldnBf Y3R4LCBFVlBfYWVzXzE5Ml9jdHIoKSwgTlVMTCwgTlVMTCwgMCk7Ci0rCQlFVlBfQ0lQSEVSX0NU WF9zZXRfYXBwX2RhdGEoZXZwX2N0eCwgYWVzX210X2N0eCk7Ci0rCQlyZXR1cm4gZXZwX2N0eDsK LSsJfQotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0rdm9pZCAqYWVzX210X25ld2N0eF8xMjgodm9p ZCAqcHJvdmN0eCkKLSt7Ci0rCXN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4ID0gbWFs bG9jKHNpemVvZigqYWVzX210X2N0eCkpOwotKwlFVlBfQ0lQSEVSX0NUWCAqZXZwX2N0eCA9IEVW UF9DSVBIRVJfQ1RYX25ldygpOwotKwotKwlpZiAoKGFlc19tdF9jdHggIT0gTlVMTCkgJiYgKGV2 cF9jdHggIT0gTlVMTCkpIHsKLSsJCWdldF90aHJlYWRfY291bnQoKTsgLyogdXBkYXRlIGNpcGhl cl90aHJlYWRzIGFuZCBudW1rcSAqLwotKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVzX210X2N0 eC0+dGlkX2xvY2ssIE5VTEwpOwotKyNpZmRlZiBfX0FQUExFX18KLSsJCXB0aHJlYWRfcndsb2Nr X2luaXQoJmFlc19tdF9jdHgtPnN0b3BfbG9jaywgTlVMTCk7Ci0rCQlhZXNfbXRfY3R4LT5leGl0 X2ZsYWcgPSBGQUxTRTsKLSsjZW5kaWYgLyogX19BUFBMRV9fICovCi0rCi0rCQlhZXNfbXRfY3R4 LT5zdGF0ZSA9IEhBVkVfTk9ORTsKLSsKLSsJCS8qIGluaXRpYWxpemUgdGhlIG11dGV4cyBhbmQg Y29uZGl0aW9ucyBmb3IgZWFjaCBsb2NrIGluIG91ciBzdHJ1Y3QgKi8KLSsJCWZvciAoaW50IGkg PSAwOyBpIDwgbnVta3E7IGkrKykgewotKwkJCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYWVzX210X2N0 eC0+cVtpXS5sb2NrLCBOVUxMKTsKLSsJCQlwdGhyZWFkX2NvbmRfaW5pdCgmYWVzX210X2N0eC0+ cVtpXS5jb25kLCBOVUxMKTsKLSsJCX0KLSsJCWFlc19tdF9jdHgtPnByb3ZjdHggPSBwcm92Y3R4 OwotKwkJRVZQX0NpcGhlckluaXQoZXZwX2N0eCwgRVZQX2Flc18xMjhfY3RyKCksIE5VTEwsIE5V TEwsIDApOwotKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGV2cF9jdHgsIGFlc19tdF9j dHgpOwotKwkJcmV0dXJuIGV2cF9jdHg7Ci0rCX0KLSsJcmV0dXJuIE5VTEw7Ci0rfQotKwotKy8q IHRoaXMgZnVuY3Rpb24gZXhwZWN0cyBhIHZvaWQgYnV0IHdlIG5lZWQgdGhlIGFjdHVhbCBjb250 ZXh0Ci0rICogdG8gZ2V0IHRoZSBhcHBfZGF0YS4KLSsgKi8KLSt2b2lkIGFlc19tdF9mcmVlY3R4 KHZvaWQgKnZldnBfY3R4KQotK3sKLSsJRVZQX0NJUEhFUl9DVFggKmV2cF9jdHggPSB2ZXZwX2N0 eDsKLSsJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHg7Ci0rCi0rCWlmICgoYWVzX210 X2N0eCA9IEVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShldnBfY3R4KSkgIT0gTlVMTCkgewot KwkJc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFkcyhhZXNfbXRfY3R4KTsKLSsKLSsJCW1lbXNl dChhZXNfbXRfY3R4LCAwLCBzaXplb2YoKmFlc19tdF9jdHgpKTsKLSsJCWZyZWUoYWVzX210X2N0 eCk7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGEoZXZwX2N0eCwgTlVMTCk7Ci0rCX0K LSsJRVZQX0NJUEhFUl9DVFhfZnJlZShldnBfY3R4KTsKLSt9Ci0rCi0rLyogdGhpcyBmdW5jdGlv biB0YWtlcyB0aGUgRVZQIGNvbnRleHQsIGdldHMgdGhlIEFFUyBjb250ZXh0Ci0rICogYW5kIHN0 YXJ0cyB0aGUgdmFyaW91cyB0aHJlYWRzIHdlIG5lZWQgKi8KLStpbnQgYWVzX210X3N0YXJ0X3Ro cmVhZHModm9pZCAqdmV2cF9jdHgsIGNvbnN0IHVfY2hhciAqa2V5LAotKwkJCSBzaXplX3Qga2V5 bGVuLCBjb25zdCB1X2NoYXIgKml2LAotKwkJCSBzaXplX3QgaXZsZW4sIGNvbnN0IE9TU0xfUEFS QU0gKm9zc2xfcGFyYW1zKQotK3sKLSsJRVZQX0NJUEhFUl9DVFggKmV2cF9jdHggPSB2ZXZwX2N0 eDsKLSsJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHg7Ci0rCi0rCi0rCS8qIGdldCB0 aGUgaW5pdGlhbCBzdGF0ZSBvZiBhZXNfbXRfY3R4IChvdXIgY2lwaGVyIHN0cmVhbSBzdHJ1Y3Qp ICovCi0rIAlpZiAoKGFlc19tdF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEoZXZw X2N0eCkpID09IE5VTEwpIHsKLSsJCWZhdGFsKCJNaXNzaW5nIEFFUyBNVCBjb250ZXh0IGRhdGEh Iik7Ci0rCX0KLSsKLSsJLyogd2UgYXJlIGluaXRpYWxpemluZyBidXQgdGhlIGN1cnJlbnQgc3Ry dWN0dXJlIGFscmVhZHkKLSsJICogaGFzIGFuIElWIGFuZCBrZXkgc28gd2Ugd2FudCB0byBraWxs IHRoZSBleGlzdGluZyBrZXkgZGF0YQotKwkgKiBhbmQgc3RhcnQgb3Zlci4gVGhpcyBpcyBpbXBv cnRhbnQgd2hlbiB3ZSBuZWVkIHRvIHJla2V5IHRoZSBkYXRhIHN0cmVhbSAqLwotKwlpZiAoYWVz X210X2N0eC0+c3RhdGUgPT0gKEhBVkVfS0VZIHwgSEFWRV9JVikpIHsKLSsJCS8qIHRlbGwgdGhl IHByZWdlbiB0aHJlYWRzIHRvIGV4aXQgKi8KLSsJCXN0b3BfYW5kX2pvaW5fcHJlZ2VuX3RocmVh ZHMoYWVzX210X2N0eCk7Ci0rCi0rI2lmZGVmIF9fQVBQTEVfXwotKwkJLyogcmVzZXQgdGhlIGV4 aXQgZmxhZyAqLwotKwkJYWVzX210X2N0eC0+ZXhpdF9mbGFnID0gRkFMU0U7Ci0rI2VuZGlmIC8q IF9fQVBQTEVfXyAqLwotKwotKwkJLyogU3RhcnQgb3ZlciBnZXR0aW5nIGtleSAmIGl2ICovCi0r CQlhZXNfbXRfY3R4LT5zdGF0ZSA9IEhBVkVfTk9ORTsKLSsJfQotKwotKwkvKiBzZXQgdGhlIGlu aXRpYWwga2V5IGZvciB0aGlzIGtleSBzdHJlYW0gcXVldWUgKi8KLSsJaWYgKGtleSAhPSBOVUxM KSB7Ci0rCQlhZXNfbXRfY3R4LT5rZXlsZW4gPSBFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoKGV2 cF9jdHgpICogODsKLSsJCWFlc19tdF9jdHgtPm9yaWdfa2V5ID0ga2V5OwotKwkJYWVzX210X2N0 eC0+c3RhdGUgfD0gSEFWRV9LRVk7Ci0rCX0KLSsKLSsJLyogc2V0IHRoZSBJViAqLwotKwlpZiAo aXYgIT0gTlVMTCkgewotKwkJLyogaW5pdCB0aGUgY291bnRlciB0aGlzIGlzIGp1c3QgYSAxNmJ5 dGUgdWNoYXIgKi8KLSsJCW1lbWNweShhZXNfbXRfY3R4LT5hZXNfY291bnRlciwgaXYsIEFFU19C TE9DS19TSVpFKTsKLSsJCWFlc19tdF9jdHgtPnN0YXRlIHw9IEhBVkVfSVY7Ci0rCX0KLSsKLSsJ aWYgKGFlc19tdF9jdHgtPnN0YXRlID09IChIQVZFX0tFWSB8IEhBVkVfSVYpKSB7Ci0rCQkvKiBD bGVhciBxdWV1ZXMgKi8KLSsJCS8qIHNldCB0aGUgZmlyc3Qga2V5IGluIHRoZSBrZXkgcXVldWUg dG8gdGhlIGN1cnJlbnQgY291bnRlciAqLwotKwkJbWVtY3B5KGFlc19tdF9jdHgtPnFbMF0uY3Ry LCBhZXNfbXRfY3R4LT5hZXNfY291bnRlciwgQUVTX0JMT0NLX1NJWkUpOwotKwkJLyogaW5kaWNh dGUgdGhhdCBpdCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCAqLwotKwkJYWVzX210X2N0eC0+cVsw XS5xc3RhdGUgPSBLUUlOSVQ7Ci0rCQkvKiBmb3IgZWFjaCBvZiB0aGUgcmVtYWluaW5nIHF1ZXVl cyBzZXQgdGhlIGZpcnN0IGNvdW50ZXIgdG8gdGhlCi0rCQkgKiBjb3VudGVyIGFuZCB0aGVuIGFk ZCB0aGUgc2l6ZSBvZiB0aGUgcXVldWUgdG8gdGhlIGNvdW50ZXIgKi8KLSsJCWZvciAoaW50IGkg PSAxOyBpIDwgbnVta3E7IGkrKykgewotKwkJCW1lbWNweShhZXNfbXRfY3R4LT5xW2ldLmN0ciwg YWVzX210X2N0eC0+YWVzX2NvdW50ZXIsIEFFU19CTE9DS19TSVpFKTsKLSsJCQlzc2hfY3RyX2Fk ZChhZXNfbXRfY3R4LT5xW2ldLmN0ciwgaSAqIEtRTEVOLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQkJ YWVzX210X2N0eC0+cVtpXS5xc3RhdGUgPSBLUUVNUFRZOwotKwkJfQotKwkJYWVzX210X2N0eC0+ cWlkeCA9IDA7Ci0rCQlhZXNfbXRfY3R4LT5yaWR4ID0gMDsKLSsJCWFlc19tdF9jdHgtPnN0cnVj dF9pZCA9IGdsb2JhbF9zdHJ1Y3RfaWQrKzsKLSsKLSsJCS8qIFN0YXJ0IHRocmVhZHMuIE1ha2Ug c3VyZSB3ZSBoYXZlIGVub3VnaCBzdGFjayBzcGFjZSAodW5kZXIgYWxwaW5lKQotKwkJKiBhbmQg YXJlbid0IHVzaW5nIG1vcmUgdGhhbiB3ZSBuZWVkIChsaW51eCkuIFRoaXMgY2FuIGJlIGFzIGxv dyBhcwotKwkJKiA1MTJLQiBidXQgdGhhdCdzIGEgbWluaW11bS4gMTAyNEtCIGdpdmVzIHVzIGEg bGl0dGxlIGhlYWRyb29tIGlmIHdlCi0rCQkqIG5lZWQgaXQgKi8KLSsjZGVmaW5lIFNUQUNLX1NJ WkUgKDEwMjQgKiAxMDI0KQotKyAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOwot KyAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7Ci0rICAgICAgICAgICAg ICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHIsIFNUQUNLX1NJWkUpOwotKwkJZm9y IChpbnQgaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7Ci0rCQkJcHRocmVhZF9yd2xv Y2tfd3Jsb2NrKCZhZXNfbXRfY3R4LT50aWRfbG9jayk7Ci0rCQkJaWYgKHB0aHJlYWRfY3JlYXRl KCZhZXNfbXRfY3R4LT50aWRbaV0sICZhdHRyLCB0aHJlYWRfbG9vcCwgYWVzX210X2N0eCkgIT0g MCkKLSsJCQkJZmF0YWwgKCJBRVMtQ1RSIE1UIENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkIGluICVz IiwgX19mdW5jX18pOwotKwkJCWVsc2UgewotKwkJCQlhZXNfbXRfY3R4LT5pZFtpXSA9IGk7Ci0r CQkJCWRlYnVnX2YgKCJBRVMtQ1RSIE1UIHNwYXduZWQgYSB0aHJlYWQgd2l0aCBpZCAlbHUgKCVs dSwgJWQpIiwKLSsJCQkJCSBhZXNfbXRfY3R4LT50aWRbaV0sIGFlc19tdF9jdHgtPnN0cnVjdF9p ZCwKLSsJCQkJCSBhZXNfbXRfY3R4LT5pZFtpXSk7Ci0rCQkJfQotKwkJCXB0aHJlYWRfcndsb2Nr X3VubG9jaygmYWVzX210X2N0eC0+dGlkX2xvY2spOwotKwkJfQotKwkJcHRocmVhZF9tdXRleF9s b2NrKCZhZXNfbXRfY3R4LT5xWzBdLmxvY2spOwotKwkJLy8gd2FpdCBmb3IgYWxsIG9mIHRoZSB0 aHJlYWRzIHRvIGJlIGluaXRpYWxpemVkCi0rCQl3aGlsZSAoYWVzX210X2N0eC0+cVswXS5xc3Rh dGUgPT0gS1FJTklUKQotKwkJCXB0aHJlYWRfY29uZF93YWl0KCZhZXNfbXRfY3R4LT5xWzBdLmNv bmQsICZhZXNfbXRfY3R4LT5xWzBdLmxvY2spOwotKwkJcHRocmVhZF9tdXRleF91bmxvY2soJmFl c19tdF9jdHgtPnFbMF0ubG9jayk7Ci0rCX0KLSsJcmV0dXJuIDE7Ci0rfQotKwotKy8qIHRoaXMg c2hvdWxkIGNvcnJlc3BvbmQgdG8gc3NoX2Flc19jdHIKLSsgKiBPU1NMX0NPUkVfTUFLRV9GVU5D KGludCwgY2lwaGVyX2NpcGhlciwKLSsgKiAgICAgICAgICAgICAgICAgICAgICh2b2lkICpjY3R4 LAotKyAqICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91 dGwsIHNpemVfdCBvdXRzaXplLAotKyAqICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpKQotKyAqLwotKwotK2ludCBhZXNfbXRfZG9fY2lwaGVy KHZvaWQgKnZldnBfY3R4LAotKwkJCSAgICB1X2NoYXIgKmRlc3QsIHNpemVfdCAqZGVzdGxlbiwg c2l6ZV90IGRlc3RzaXplLAotKwkJCSAgICBjb25zdCB1X2NoYXIgKnNyYywgc2l6ZV90IGxlbikK LSt7Ci0rCXR5cGVkZWYgdW5pb24gewotKyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCi0rCQlfX3Vp bnQxMjhfdCAqdTEyODsKLSsjZW5kaWYKLSsJCXVpbnQ2NF90ICp1NjQ7Ci0rCQl1aW50MzJfdCAq dTMyOwotKwkJdWludDhfdCAqdTg7Ci0rCQljb25zdCB1aW50OF90ICpjdTg7Ci0rCQl1aW50cHRy X3QgdTsKLSsJfSBwdHJzX3Q7Ci0rCXB0cnNfdCBkZXN0cCwgc3JjcCwgYnVmcDsKLSsJdWludHB0 cl90IGFsaWduOwotKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0eDsKLSsJc3RydWN0 IGtxICpxLCAqb2xkcTsKLSsJaW50IHJpZHg7Ci0rCXVfY2hhciAqYnVmOwotKwlFVlBfQ0lQSEVS X0NUWCAqZXZwX2N0eCA9IHZldnBfY3R4OwotKwl1aW50NjRfdCBzcmNfYSwga2V5X2E7Ci0rCQot KwlpZiAobGVuID09IDApCi0rCQlyZXR1cm4gMTsKLSsKLSsJaWYgKChhZXNfbXRfY3R4ID0gRVZQ X0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGV2cF9jdHgpKSA9PSBOVUxMKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCXEgPSAmYWVzX210X2N0eC0+cVthZXNfbXRfY3R4LT5xaWR4XTsKLSsJcmlkeCA9IGFl c19tdF9jdHgtPnJpZHg7Ci0rCi0rCS8qIHNyYyBhbHJlYWR5IHBhZGRlZCB0byBibG9jayBtdWx0 aXBsZSAqLwotKwlzcmNwLmN1OCA9IHNyYzsKLSsJZGVzdHAudTggPSBkZXN0OwotKwlkbyB7IC8q IGRvIHVudGlsIGxlbiBpcyAwICovCi0rCQlidWYgPSBxLT5rZXlzW3JpZHhdOwotKwkJYnVmcC51 OCA9IGJ1ZjsKLSsKLSsJCS8qIGZpZ3VyZSBvdXQgdGhlIGFsaWdubWVudCBvbiB0aGUgZmx5ICov Ci0rI2lmZGVmIENJUEhFUl9VTkFMSUdORURfT0sKLSsJCWFsaWduID0gMDsKLSsjZWxzZQotKwkJ YWxpZ24gPSBkZXN0cC51IHwgc3JjcC51IHwgYnVmcC51OwotKyNlbmRpZgotKwotKwkJLyogeG9y IHRoZSBzcmMgYWdhaW5zdCB0aGUga2V5IChidWYpCi0rCQkgKiBkaWZmZXJlbnQgc3lzdGVtcyBj YW4gZG8gYWxsIDE2IGJ5dGVzIGF0IG9uY2Ugb3IKLSsJCSAqIG1heSBuZWVkIHRvIGRvIGl0IGlu IDggb3IgNCBieXRlcyBjaHVua3MKLSsJCSAqIHdvcnN0IGNhc2UgaXMgZG9pbmcgaXQgYXMgYSBs b29wICovCi0rI2lmZGVmIENJUEhFUl9JTlQxMjhfT0sKLSsJCS8qIHdpdGggR0NDIDEzIHdlIGhh dmUgaGF2aW5nIGNvbnNpc3RlbnQgc2VnIGZhdWx0cwotKwkJICogaW4gdGhpcyBzZWN0aW9uIG9m IGNvZGUuIFNpbmNlIHRoaXMgaXMgYSBjcml0aWNhbAotKwkJICogY29kZSBwYXRoIHdlIGFyZSBy ZW1vdmluZyB0aGlzIHVudGlsIHdlIGhhdmUgYSBzb2x1dGlvbgotKwkJICogaW4gcGxhY2UgLWNq ciAwMi8yMi8yNAotKwkJICogVE9ETzogRklYIFRISVMKLSsJCSAqLwotKwkJLyogaWYgKChhbGln biAmIDB4ZikgPT0gMCkgeyAqLwotKwkJLyogCWRlc3RwLnUxMjhbMF0gPSBzcmNwLnUxMjhbMF0g XiBidWZwLnUxMjhbMF07ICovCi0rCQkvKiB9IGVsc2UgKi8KLSsjZW5kaWYKLSsJCS8qIDY0IGJp dHMgKi8KLSsJCS8qIHRoaXMgaXMgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3VyIGluIHNhbml0 aXplcnMKLSsJCSAqIHRoaXMgaXMgYW5ub3lpbmcgYmVjYXVzZSBpdCdzIG1vcmUgZWZmaWNpZW50 Ci0rCQkgKiBidXQgVUIgaXMgbm90IHNvbWV0aGluZyBJIHdhbnQgdG8gcmV0YWluICovCi0rCQlp ZiAoKGFsaWduICYgMHg3KSA9PSAwKSB7Ci0rCQkJLyogdGhpcyBzaG91bGQgcmVzb2x2ZSB0aGUg c3RyaWN0IGFsaWFzaW5nIFVCCi0rCQkJICogYW5kIHRoZSBwZXJmb3JtYW5jZSBkb2Vzbid0IHNl ZW0gdG8gY2hhbmdlIG11Y2gKLSsJCQkgKiBidXQgdGhlIG1lbWNweXMgYXJlIGtpbGxpbmcgbWUg My01LTI2IGNqciovCi0rCQkJbWVtY3B5KCZzcmNfYSwgJnNyY3AudTY0WzBdLCBzaXplb2YodWlu dDY0X3QpKTsKLSsJCQltZW1jcHkoJmtleV9hLCAmYnVmcC51NjRbMF0sIHNpemVvZih1aW50NjRf dCkpOwotKwkJCWRlc3RwLnU2NFswXSA9IHNyY19hIF4ga2V5X2E7Ci0rCQkJbWVtY3B5KCZzcmNf YSwgJnNyY3AudTY0WzFdLCBzaXplb2YodWludDY0X3QpKTsKLSsJCQltZW1jcHkoJmtleV9hLCAm YnVmcC51NjRbMV0sIHNpemVvZih1aW50NjRfdCkpOwotKwkJCWRlc3RwLnU2NFsxXSA9IHNyY19h IF4ga2V5X2E7Ci0rCQkJLyogZGVzdHAudTY0WzBdID0gc3JjcC51NjRbMF0gXiBidWZwLnU2NFsw XTsgKi8KLSsJCQkvKiBkZXN0cC51NjRbMV0gPSBzcmNwLnU2NFsxXSBeIGJ1ZnAudTY0WzFdOyAq LwotKyAgICAgICAgICAgICAgICAvKiAzMiBiaXRzICovCi0rCQl9IGVsc2UKLSsJCWlmICgoYWxp Z24gJiAweDMpID09IDApIHsKLSsJCQlkZXN0cC51MzJbMF0gPSBzcmNwLnUzMlswXSBeIGJ1ZnAu dTMyWzBdOwotKwkJCWRlc3RwLnUzMlsxXSA9IHNyY3AudTMyWzFdIF4gYnVmcC51MzJbMV07Ci0r CQkJZGVzdHAudTMyWzJdID0gc3JjcC51MzJbMl0gXiBidWZwLnUzMlsyXTsKLSsJCQlkZXN0cC51 MzJbM10gPSBzcmNwLnUzMlszXSBeIGJ1ZnAudTMyWzNdOwotKwkJfSBlbHNlIHsKLSsJCQkvKjEg Ynl0ZSBhdCBhIHRpbWUqLwotKwkJCXNpemVfdCBpOwotKwkJCWZvciAoaSA9IDA7IGkgPCBBRVNf QkxPQ0tfU0laRTsgKytpKQotKwkJCQlkZXN0W2ldID0gc3JjW2ldIF4gYnVmW2ldOwotKwkJfQot KwotKwkJLyogaW5jL2RlY3JlbWVudCB0aGUgcG9pbnRlcnMgYnkgdGhlIGJsb2NrIHNpemUgKDE2 KSovCi0rCQlkZXN0cC51ICs9IEFFU19CTE9DS19TSVpFOwotKwkJc3JjcC51ICs9IEFFU19CTE9D S19TSVpFOwotKwotKwkJLyogSW5jcmVtZW50IHJlYWQgaW5kZXgsIHN3aXRjaCBxdWV1ZXMgb24g cm9sbG92ZXIgKi8KLSsJCWlmICgocmlkeCA9IChyaWR4ICsgMSkgJSBLUUxFTikgPT0gMCkgewot KwkJCW9sZHEgPSBxOwotKwotKwkJCS8qIE1hcmsgbmV4dCBxdWV1ZSBkcmFpbmluZywgbWF5IG5l ZWQgdG8gd2FpdCAqLwotKwkJCWFlc19tdF9jdHgtPnFpZHggPSAoYWVzX210X2N0eC0+cWlkeCAr IDEpICUgbnVta3E7Ci0rCQkJcSA9ICZhZXNfbXRfY3R4LT5xW2Flc19tdF9jdHgtPnFpZHhdOwot KwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7Ci0rCQkJd2hpbGUgKHEtPnFzdGF0ZSAh PSBLUUZVTEwpIHsKLSsJCQkJcHRocmVhZF9jb25kX3dhaXQoJnEtPmNvbmQsICZxLT5sb2NrKTsK LSsJCQl9Ci0rCQkJcS0+cXN0YXRlID0gS1FEUkFJTklORzsKLSsJCQlwdGhyZWFkX2NvbmRfYnJv YWRjYXN0KCZxLT5jb25kKTsKLSsJCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7Ci0r Ci0rCQkJLyogTWFyayBjb25zdW1lZCBxdWV1ZSBlbXB0eSBhbmQgc2lnbmFsIHByb2R1Y2VycyAq LwotKwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmb2xkcS0+bG9jayk7Ci0rCQkJb2xkcS0+cXN0YXRl ID0gS1FFTVBUWTsKLSsJCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZvbGRxLT5jb25kKTsKLSsJ CQlwdGhyZWFkX211dGV4X3VubG9jaygmb2xkcS0+bG9jayk7Ci0rCQl9Ci0rCX0gd2hpbGUgKGxl biAtPSBBRVNfQkxPQ0tfU0laRSk7Ci0rCWFlc19tdF9jdHgtPnJpZHggPSByaWR4OwotKwlyZXR1 cm4gMTsKLSt9Ci0rCi0rI2VuZGlmIC8qV0lUSF9PUEVOU1NMMyovCi1kaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5oIG9wZW5zc2gtMTAuM3AxL2Np cGhlci1jdHItbXQtZnVuY3Rpb25zLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1j dHItbXQtZnVuY3Rpb25zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5oCTIwMjYtMDctMDIgMDA6 Mjc6MjkuNzIyMDExNDkyICswMjAwCi1AQCAtMCwwICsxLDE0MiBAQAotKy8qCi0rICogT3BlblNT SCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RSIENpcGhlciBQcm92aWRlciBmb3IgT3BlblNTTCAzCi0r ICoKLSsgKiBBdXRob3I6IEJlbmphbWluIEJlbm5ldHQgPGJlbkBwc2MuZWR1PgotKyAqIEF1dGhv cjogTWlrZSBUYXNvdGEgPHRhc290YUBnbWFpbC5jb20+Ci0rICogQXV0aG9yOiBDaHJpcyBSYXBp ZXIgPHJhcGllckBwc2MuZWR1PgotKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDIyIFBpdHRzYnVy Z2ggU3VwZXJjb21wdXRpbmcgQ2VudGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog QmFzZWQgb24gb3JpZ2luYWwgT3BlblNTSCBBRVMtQ1RSIGNpcGhlci4gU21hbGwgcG9ydGlvbnMg cmVtYWluIHVuY2hhbmdlZCwKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWFya3VzIEZyaWVkbCA8 bWFya3VzQG9wZW5ic2Qub3JnPgotKyAqCi0rICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1v ZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0rICogcHVycG9zZSB3 aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBh Ym92ZQotKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBw ZWFyIGluIGFsbCBjb3BpZXMuCi0rICoKLSsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSsgKiBXSVRIIFJF R0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9G Ci0rICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIEJFIExJQUJMRSBGT1IKLSsgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0rICogV0hBVFNPRVZFUiBS RVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFO Ci0rICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFD VElPTiwgQVJJU0lORyBPVVQgT0YKLSsgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBP UiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotKyAqLwotKwotKyNpZm5kZWYgQ1RSX01U X0ZVTkNTCi0rI2RlZmluZSBDVFJfTVRfRlVOQ1MKLSsKLSsvKiBpbmNsdWRlcyAqLwotKyNpbmNs dWRlICJpbmNsdWRlcy5oIiAvKiBuZWVkZWQgdG8gZ2V0IHZlcnNpb24gbnVtYmVyICovCi0rI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgotKyNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0rI2luY2x1ZGUgImNp cGhlci1hZXNjdHIuaCIKLSsjaW5jbHVkZSAidXRoYXNoLmgiCi0rCi0rI2lmbmRlZiBVU0VfQlVJ TFRJTl9SSUpOREFFTAotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNlbmRpZgotKwotKy8q IG9ubHkgZm9yIHN5c3RlbXMgd2l0aCBPU1NMIDMgKi8KLSsjaWZkZWYgV0lUSF9PUEVOU1NMMwot KwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVOQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0q LwotKy8qIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgYW5kIHF1ZXVlcyAqLwotKyNkZWZpbmUg TUFYX1RIUkVBRFMgICAgICAzMgotKyNkZWZpbmUgTUFYX05VTUtRICAgICAgICAoTUFYX1RIUkVB RFMgKyAxKQotKwotKy8qIG9uZSBxdWV1ZSBob2xkcyA4MTkyICogNCAqIDE2QiAoNTEyS0IpICBv ZiBrZXkgZGF0YSAKLSsgKiBiZWluZyB0aGF0IHRoZSBxdWV1ZXMgYXJlIGRlc3Ryb3llZCBhZnRl ciBhIHJla2V5Ci0rICogYW5kIGF0IGxlYXRzIG9uZSBoYXMgdG8gYmUgZnVsbHkgZmlsbGVkIHBy aW9yIHRvCi0rICogZW5jaXBoZXJpbmcgZGF0YSB3ZSBkb24ndCB3YW50IHRoaXMgdG8gYmUgdG9v IGxhcmdlICovCi0rI2RlZmluZSBLUUxFTiAoODE5MiAqIDQpCi0rCi0rLyogUHJvY2Vzc29yIGNh Y2hlbGluZSBsZW5ndGggKi8KLSsjZGVmaW5lIENBQ0hFTElORV9MRU4JNjQKLSsKLSsvKiBDYW4g dGhlIHN5c3RlbSBkbyB1bmFsaWduZWQgbG9hZHMgbmF0aXZlbHk/ICovCi0rI2lmIGRlZmluZWQo X19hYXJjaDY0X18pIHx8IFwKLSsgICAgZGVmaW5lZChfX2kzODZfXykgICAgfHwgXAotKyAgICBk ZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBcCi0rICAgIGRlZmluZWQoX194ODZfNjRfXykKLSsjIGRl ZmluZSBDSVBIRVJfVU5BTElHTkVEX09LCi0rI2VuZGlmCi0rI2lmIGRlZmluZWQoX19TSVpFT0Zf SU5UMTI4X18pCi0rIyBkZWZpbmUgQ0lQSEVSX0lOVDEyOF9PSwotKyNlbmRpZgotKwotKy8qIGNv bnRleHQgc3RhdGVzICovCi0rI2RlZmluZSBIQVZFX05PTkUgICAgICAgMAotKyNkZWZpbmUgSEFW RV9LRVkgICAgICAgIDEKLSsjZGVmaW5lIEhBVkVfSVYgICAgICAgICAyCi0rCi0rLyogS2V5c3Ry ZWFtIFF1ZXVlIHN0YXRlICovCi0rZW51bSB7Ci0rCUtRSU5JVCwKLSsJS1FFTVBUWSwKLSsJS1FG SUxMSU5HLAotKwlLUUZVTEwsCi0rCUtRRFJBSU5JTkcKLSt9OwotKwotKy8qIHN0cnVjdHMgKi8K LSsKLSsvKiBwcm92aWRlciBzdHJ1Y3QgKi8KLStzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0IHsKLSsJ Y29uc3QgT1NTTF9DT1JFX0hBTkRMRSAqY29yZV9oYW5kbGU7Ci0rCXN0cnVjdCBwcm92ZXJyX2Z1 bmN0aW9uc19zdCAqcHJvdmVycl9oYW5kbGU7Ci0rfTsKLSsKLSsvKiBLZXlzdHJlYW0gUXVldWUg c3RydWN0ICovCi0rc3RydWN0IGtxIHsKLSsJdV9jaGFyCQlrZXlzW0tRTEVOXVtBRVNfQkxPQ0tf U0laRV07IC8qIFszMjc2OF1bMTZCXSAqLwotKwl1X2NoYXIJCWN0cltBRVNfQkxPQ0tfU0laRV07 IC8qIDE2QiAqLwotKwl1X2NoYXIgICAgICAgICAgcGFkMFtDQUNIRUxJTkVfTEVOXTsKLSsJcHRo cmVhZF9tdXRleF90CWxvY2s7Ci0rCXB0aHJlYWRfY29uZF90CWNvbmQ7Ci0rCWludCAgICAgICAg ICAgICBxc3RhdGU7Ci0rCXVfY2hhciAgICAgICAgICBwYWQxW0NBQ0hFTElORV9MRU5dOwotK307 Ci0rCi0rLyogQUVTIE1UIGNvbnRleHQgc3RydWN0ICovCi0rc3RydWN0IGFlc19tdF9jdHhfc3Qg ewotKwlzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0ICpwcm92Y3R4OwotKwlsb25nIHVuc2lnbmVkIGlu dCAgICAgICBzdHJ1Y3RfaWQ7Ci0rCWludCAgICAgICAgICAgICAgICAgICAgIGtleWxlbjsKLSsJ aW50CQkgICAgICAgIHN0YXRlOwotKwlpbnQJCSAgICAgICAgcWlkeDsKLSsJaW50CQkgICAgICAg IHJpZHg7Ci0rCWludCAgICAgICAgICAgICAgICAgICAgIGlkW01BWF9USFJFQURTXTsgLyogMzIg Ki8KLSsJQUVTX0tFWSAgICAgICAgICAgICAgICAgYWVzX2tleTsKLSsJY29uc3QgdV9jaGFyICAg ICAgICAgICAqb3JpZ19rZXk7Ci0rCXVfY2hhcgkJICAgICAgICBhZXNfY291bnRlcltBRVNfQkxP Q0tfU0laRV07IC8qIDE2QiAqLwotKwlwdGhyZWFkX3QJICAgICAgICB0aWRbTUFYX1RIUkVBRFNd OyAvKiAzMiAqLwotKwlwdGhyZWFkX3J3bG9ja190ICAgICAgICB0aWRfbG9jazsKLSsJc3RydWN0 IGtxCSAgICAgICAgcVtNQVhfTlVNS1FdOyAvKiAzMyAqLwotKyNpZmRlZiBfX0FQUExFX18KLSsJ cHRocmVhZF9yd2xvY2tfdCAgICAgICAgc3RvcF9sb2NrOwotKwlpbnQJCSAgICAgICAgZXhpdF9m bGFnOwotKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KLSsJaW50ICAgICAgICAgICAgICAgICAgICAg b25nb2luZzsgLyogcG9zc2libHkgbm90IG5lZWRlZCAqLwotK307Ci0rCi0rLyogdGhpcyBob2xk cyBhbiBhcnJheSBvZiBldnAgY29udGV4dCBwb2ludGVycyB0aGF0IGFyZQotKyAqIGNyZWF0ZWQg aW4gdGhyZWFkX2xvb3AuIFNpbmNlIHdlIGNhbid0IGVmZmVjdGl2ZWx5IGZyZWUgdGhvc2UKLSsg KiBjb250ZXh0cyBpbiB0aHJlYWRfbG9vcCB3ZSBrZWVwIGEgY29weSBvZiB0aG9zZSBwb2ludGVy cyBoZXJlCi0rICogYW5kIHRoZW4gZnJlZSB0aGVtIGluIHN0b3BfYW5kX2pvaW5fcHJlZ2VudGhy ZWFkcwotKyAqIGNqciAyLzIvMjAyMwotKyAqLwotK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMgewot KwlFVlBfQ0lQSEVSX0NUWCAqcG9pbnRlcjsKLSsgICAgICAgIHB0aHJlYWRfdCAgICAgICB0aWQ7 Ci0rCVVUX2hhc2hfaGFuZGxlICBoaDsKLSt9OwotKwotK2ludCBhZXNfbXRfZG9fY2lwaGVyKHZv aWQgKiwgdV9jaGFyICosIHNpemVfdCAqLCBzaXplX3QsIGNvbnN0IHVfY2hhciAqLCBzaXplX3Qp OwotK2ludCBhZXNfbXRfc3RhcnRfdGhyZWFkcyh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBzaXpl X3QsIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IE9TU0xfUEFSQU0gKik7Ci0rdm9pZCBh ZXNfbXRfZnJlZWN0eCh2b2lkICopOwotK3ZvaWQgKmFlc19tdF9uZXdjdHhfMjU2KHZvaWQgKik7 Ci0rdm9pZCAqYWVzX210X25ld2N0eF8xOTIodm9pZCAqKTsKLSt2b2lkICphZXNfbXRfbmV3Y3R4 XzEyOCh2b2lkICopOwotKwotKyNlbmRpZiAvKiBXSVRIIE9QRU5TU0wgKi8KLSsjZW5kaWYgLyog Q1RSX01UX0ZVTkNTICovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY3Ry LW10LXByb3ZpZGVyLmMgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLWN0ci1tdC1wcm92aWRlci5jCi0t LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY3RyLW10LXByb3ZpZGVyLmMJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY3Ry LW10LXByb3ZpZGVyLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjIxMDUzNDcgKzAyMDAKLUBAIC0w LDAgKzEsMzkwIEBACi0rLyoKLSsgKiBPcGVuU1NIIE11bHRpLXRocmVhZGVkIEFFUy1DVFIgQ2lw aGVyIFByb3ZpZGVyIGZvciBPcGVuU1NMIDMKLSsgKgotKyAqIEF1dGhvcjogQ2hyaXMgUmFwaWVy IDxyYXBpZXJAcHNjLmVkdT4KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgUGl0dHNidXJnaCBTdXBl cmNvbXB1dGluZyBDZW50ZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBQZXJtaXNz aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZv ciBhbnkKLSsgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQs IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0rICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSsgKgotKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FS UkFOVElFUwotKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YKLSsgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotKyAqIEFOWSBTUEVDSUFM LCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFH RVMKLSsgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBS T0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSsgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0Ug T1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotKyAqIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0rICov Ci0rCi0rLyogYmFzZWQgb24gdmllbmVyZS5jIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Byb3Zp ZGVyLWNvcm5lci92aWdlbmVyZSBieQotKyAqIFJpY2hhcmQgTGV2aXR0ZSBwcm92aWRlZCB1bmRl ciBhIENDMCBQdWJsaWMgTGljZW5zZS4gKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsK LSsvKiBvbmx5IGZvciBzeXN0ZW1zIHdpdGggT1NTTCAzLjArICovCi0rI2lmZGVmIFdJVEhfT1BF TlNTTDMKLSsKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2NvcmUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX2Rpc3Bh dGNoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY29yZV9uYW1lcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlICJ4bWFsbG9jLmgiCi0rI2luY2x1ZGUgIm9zc2wzLXByb3Zp ZGVyLWVyci5oIgotKyNpbmNsdWRlICJudW0uaCIKLSsjaW5jbHVkZSAiY2lwaGVyLWN0ci1tdC1m dW5jdGlvbnMuaCIKLSsKLSsjZGVmaW5lIEVSUl9IQU5ETEUoY3R4KSAoKGN0eCktPnByb3ZjdHgt PnByb3ZlcnJfaGFuZGxlKQotKwotKy8qIGZvcndhcmQgZGVjbGFydGlvbiBvZiBjaXBoZXIgZnVu Y3Rpb25zICovCi0rLyogY2lwaGVyIGNvbnRleHQgZnVuY3Rpb25zICovCi0rT1NTTF9GVU5DX2Np cGhlcl9uZXdjdHhfZm4gYWVzX210X25ld2N0eF8yNTY7Ci0rT1NTTF9GVU5DX2NpcGhlcl9uZXdj dHhfZm4gYWVzX210X25ld2N0eF8xOTI7Ci0rT1NTTF9GVU5DX2NpcGhlcl9uZXdjdHhfZm4gYWVz X210X25ld2N0eF8xMjg7Ci0rT1NTTF9GVU5DX2NpcGhlcl9mcmVlY3R4X2ZuIGFlc19tdF9mcmVl Y3R4OwotKwotKy8qIHBhcmFtIHJlbGF0ZWQgZnVuY3Rpb24qLwotK3N0YXRpYyBPU1NMX0ZVTkNf Y2lwaGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMjU2OwotK3N0YXRpYyBPU1NM X0ZVTkNfY2lwaGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMTkyOwotK3N0YXRp YyBPU1NMX0ZVTkNfY2lwaGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMTI4Owot K3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX2dldHRhYmxlX3BhcmFtc19mbiBhZXNfbXRfZ2V0dGFi bGVfcGFyYW1zOwotK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX3NldF9jdHhfcGFyYW1zX2ZuIGFl c19tdF9zZXRfY3R4X3BhcmFtczsKLStzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9nZXRfY3R4X3Bh cmFtc19mbiBhZXNfbXRfZ2V0X2N0eF9wYXJhbXM7Ci0rc3RhdGljIE9TU0xfRlVOQ19jaXBoZXJf c2V0dGFibGVfY3R4X3BhcmFtc19mbiBhZXNfbXRfc2V0dGFibGVfY3R4X3BhcmFtczsKLStzdGF0 aWMgT1NTTF9GVU5DX2NpcGhlcl9nZXR0YWJsZV9jdHhfcGFyYW1zX2ZuIGFlc19tdF9nZXR0YWJs ZV9jdHhfcGFyYW1zOwotKwotKy8qIGVuL2RlY2lwaGVyIGZ1bmN0aW9ucyAqLwotK09TU0xfRlVO Q19jaXBoZXJfZW5jcnlwdF9pbml0X2ZuIGFlc19tdF9zdGFydF90aHJlYWRzOwotK09TU0xfRlVO Q19jaXBoZXJfZGVjcnlwdF9pbml0X2ZuIGFlc19tdF9zdGFydF90aHJlYWRzOwotK09TU0xfRlVO Q19jaXBoZXJfdXBkYXRlX2ZuIGFlc19tdF9kb19jaXBoZXI7Ci0rCi0rLyogcHJvdmlkZXIgY29u dGV4dCAqLwotK3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfcXVlcnlfb3BlcmF0aW9uX2ZuIGFl c19tdF9wcm92X3F1ZXJ5OwotK3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfZ2V0X3JlYXNvbl9z dHJpbmdzX2ZuIGFlc19tdF9wcm92X3JlYXNvbnM7Ci0rc3RhdGljIE9TU0xfRlVOQ19wcm92aWRl cl90ZWFyZG93bl9mbiBhZXNfbXRfcHJvdl90ZWFyZG93bjsKLStzdGF0aWMgT1NTTF9GVU5DX3By b3ZpZGVyX2dldF9wYXJhbXNfZm4gYWVzX210X3Byb3ZfZ2V0X3BhcmFtczsgCi0rT1NTTF9wcm92 aWRlcl9pbml0X2ZuIE9TU0xfcHJvdmlkZXJfaW5pdDsgLyogbmVlZCB0aGlzPyAqLwotKwotKy8q IGVycm9yIGZ1bmN0aW9ucyAqLwotK09TU0xfRlVOQ19jb3JlX25ld19lcnJvcl9mbiAqY19uZXdf ZXJyb3I7Ci0rT1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX2RlYnVnX2ZuICpjX3NldF9lcnJvcl9k ZWJ1ZzsKLStPU1NMX0ZVTkNfY29yZV92c2V0X2Vycm9yX2ZuICpjX3ZzZXRfZXJyb3I7Ci0rT1NT TF9GVU5DX2NvcmVfc2V0X2Vycm9yX21hcmtfZm4gKmNfc2V0X2Vycm9yX21hcms7Ci0rT1NTTF9G VU5DX2NvcmVfY2xlYXJfbGFzdF9lcnJvcl9tYXJrX2ZuICpjX2NsZWFyX2xhc3RfZXJyb3JfbWFy azsKLStPU1NMX0ZVTkNfY29yZV9wb3BfZXJyb3JfdG9fbWFya19mbiAqY19wb3BfZXJyb3JfdG9f bWFyazsKLSsKLSsvKiBFcnJvcnMgdXNlZCBpbiB0aGlzIHByb3ZpZGVyICovCi0rI2RlZmluZSBB RVNfTVRfRV9NQUxMT0MgICAgICAgICAgIDEKLSsjZGVmaW5lIEFFU19NVF9PTkdPSU5HX09QRVJB VElPTiAgMgotKyNkZWZpbmUgQUVTX01UX0JBRF9LRVlMRU4gICAgICAgICAzCi0rCi0rLyogdHlw ZWRlZiBmb3IgZnVuY3Rpb24gcG9pbnRlcnMgKi8KLSt0eXBlZGVmIHZvaWQoKmZwdHJfdCkodm9p ZCk7Ci0rCi0rLyogYWxsIG9mIHRoZSB2YXJpb3VzIGFycmF5cyB3ZSBuZWVkICovCi0rCi0rLyog QkFEX0tFWUxFTiBpc24ndCBiZWluZyB1c2VkIGF0IHRoZSBtb21lbnQgKi8KLStjb25zdCBPU1NM X0lURU0gcmVhc29uc1tdID0gewotKwl7IEFFU19NVF9FX01BTExPQywgIk1lbW9yeSBhbGxvY2F0 aW9uIGZhaWx1cmUiIH0sCi0rCXsgQUVTX01UX09OR09JTkdfT1BFUkFUSU9OLCAiT3BlcmF0aW9u IHVuZGVyd2F5IiB9LAotKwl7IEFFU19NVF9CQURfS0VZTEVOLCAiT25seSAyNTYsIDE5MiwgYW5k IDEyOCBLZXkgbGVuZ3RocyBhcmUgc3VwcG9ydGVkIiB9LAotKwl7IDAsIE5VTEwgfSAvKiBUZXJt aW5hdGlvbiAqLwotK307Ci0rCi0rLyogZnVuY3Rpb24gbWFwcGluZyBmb3IgMjU2fDE5MnwxMjgg a2V5IGxlbmd0aHMgKi8KLStjb25zdCBPU1NMX0RJU1BBVENIIGFlc19tdF9mdW5jc18yNTZbXSA9 IHsKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX05FV0NUWCwgKGZwdHJfdClhZXNfbXRfbmV3Y3R4XzI1 NiB9ICwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0ZSRUVDVFgsIChmcHRyX3QpYWVzX210X2ZyZWVj dHggfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0VOQ1JZUFRfSU5JVCwgKGZwdHJfdClhZXNfbXRf c3RhcnRfdGhyZWFkcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfREVDUllQVF9JTklULCAoZnB0 cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9VUERBVEUs IChmcHRyX3QpYWVzX210X2RvX2NpcGhlciB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUX1BB UkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X3BhcmFtc18yNTYgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQ SEVSX0dFVFRBQkxFX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfcGFyYW1zIH0sCi0r CXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X2N0 eF9wYXJhbXMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVFRBQkxFX0NUWF9QQVJBTVMsCi0r CSAgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfY3R4X3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19D SVBIRVJfU0VUX0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X3NldF9jdHhfcGFyYW1zIH0sCi0r CXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRUQUJMRV9DVFhfUEFSQU1TLAotKwkgIChmcHRyX3QpYWVz X210X3NldHRhYmxlX2N0eF9wYXJhbXMgfSwKLSsJeyAwLCBOVUxMIH0KLSt9OwotKwotK2NvbnN0 IE9TU0xfRElTUEFUQ0ggYWVzX210X2Z1bmNzXzE5MltdID0gewotKwl7IE9TU0xfRlVOQ19DSVBI RVJfTkVXQ1RYLCAoZnB0cl90KWFlc19tdF9uZXdjdHhfMTkyIH0gLAotKwl7IE9TU0xfRlVOQ19D SVBIRVJfRlJFRUNUWCwgKGZwdHJfdClhZXNfbXRfZnJlZWN0eCB9LAotKwl7IE9TU0xfRlVOQ19D SVBIRVJfRU5DUllQVF9JTklULCAoZnB0cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCi0rCXsg T1NTTF9GVU5DX0NJUEhFUl9ERUNSWVBUX0lOSVQsIChmcHRyX3QpYWVzX210X3N0YXJ0X3RocmVh ZHMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX1VQREFURSwgKGZwdHJfdClhZXNfbXRfZG9fY2lw aGVyIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9n ZXRfcGFyYW1zXzE5MiB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUVEFCTEVfUEFSQU1TLCAo ZnB0cl90KWFlc19tdF9nZXR0YWJsZV9wYXJhbXMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dF VF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXRfY3R4X3BhcmFtcyB9LAotKwl7IE9TU0xf RlVOQ19DSVBIRVJfR0VUVEFCTEVfQ1RYX1BBUkFNUywKLSsJICAoZnB0cl90KWFlc19tdF9nZXR0 YWJsZV9jdHhfcGFyYW1zIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRfQ1RYX1BBUkFNUywg KGZwdHJfdClhZXNfbXRfc2V0X2N0eF9wYXJhbXMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX1NF VFRBQkxFX0NUWF9QQVJBTVMsCi0rCSAgKGZwdHJfdClhZXNfbXRfc2V0dGFibGVfY3R4X3BhcmFt cyB9LAotKwl7IDAsIE5VTEwgfQotK307Ci0rCi0rY29uc3QgT1NTTF9ESVNQQVRDSCBhZXNfbXRf ZnVuY3NfMTI4W10gPSB7Ci0rCXsgT1NTTF9GVU5DX0NJUEhFUl9ORVdDVFgsIChmcHRyX3QpYWVz X210X25ld2N0eF8xMjggfSAsCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9GUkVFQ1RYLCAoZnB0cl90 KWFlc19tdF9mcmVlY3R4IH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9FTkNSWVBUX0lOSVQsIChm cHRyX3QpYWVzX210X3N0YXJ0X3RocmVhZHMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0RFQ1JZ UFRfSU5JVCwgKGZwdHJfdClhZXNfbXRfc3RhcnRfdGhyZWFkcyB9LAotKwl7IE9TU0xfRlVOQ19D SVBIRVJfVVBEQVRFLCAoZnB0cl90KWFlc19tdF9kb19jaXBoZXIgfSwKLSsJeyBPU1NMX0ZVTkNf Q0lQSEVSX0dFVF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldF9wYXJhbXNfMTI4IH0sCi0rCXsg T1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldHRhYmxl X3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUX0NUWF9QQVJBTVMsIChmcHRyX3Qp YWVzX210X2dldF9jdHhfcGFyYW1zIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9D VFhfUEFSQU1TLAotKwkgIChmcHRyX3QpYWVzX210X2dldHRhYmxlX2N0eF9wYXJhbXMgfSwKLSsJ eyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9zZXRfY3R4 X3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfU0VUVEFCTEVfQ1RYX1BBUkFNUywKLSsJ ICAoZnB0cl90KWFlc19tdF9zZXR0YWJsZV9jdHhfcGFyYW1zIH0sCi0rCXsgMCwgTlVMTCB9Ci0r fTsKLSsKLSsvKiB0aGUgY2lwaGVycyBmb3VuZCBpbiB0aGlzIHByb3ZpZGVyICovCi0rY29uc3Qg T1NTTF9BTEdPUklUSE0gYWVzX210X2NpcGhlcnNbXSA9IHsKLSsJeyAiYWVzX2N0cl9tdF8yNTYi LCAicHJvdmlkZXI9aHBuc3NoIiwgYWVzX210X2Z1bmNzXzI1NiwgTlVMTCB9LAotKwl7ICJhZXNf Y3RyX210XzE5MiIsICJwcm92aWRlcj1ocG5zc2giLCBhZXNfbXRfZnVuY3NfMTkyLCBOVUxMIH0s Ci0rCXsgImFlc19jdHJfbXRfMTI4IiwgInByb3ZpZGVyPWhwbnNzaCIsIGFlc19tdF9mdW5jc18x MjgsIE5VTEwgfSwKLSsJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KLSt9OwotKwotKy8qIGZ1 bmN0aW9uIG1hcHBpbmcgZm9yIHByb3ZpZGVyIG1ldGhvZHMgKi8KLStjb25zdCBPU1NMX0RJU1BB VENIIHByb3ZpZGVyX2Z1bmN0aW9uc1tdID0gewotKwl7IE9TU0xfRlVOQ19QUk9WSURFUl9URUFS RE9XTiwgKGZwdHJfdClhZXNfbXRfcHJvdl90ZWFyZG93biB9LAotKwl7IE9TU0xfRlVOQ19QUk9W SURFUl9RVUVSWV9PUEVSQVRJT04sIChmcHRyX3QpYWVzX210X3Byb3ZfcXVlcnkgfSwKLSsJeyBP U1NMX0ZVTkNfUFJPVklERVJfR0VUX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfcHJvdl9nZXRfcGFy YW1zIH0sCi0rCXsgT1NTTF9GVU5DX1BST1ZJREVSX0dFVF9SRUFTT05fU1RSSU5HUywgKGZwdHJf dClhZXNfbXRfcHJvdl9yZWFzb25zIH0sCi0rCXsgMCwgTlVMTCB9Ci0rfTsKLSsKLStzdGF0aWMg Y29uc3QgT1NTTF9QQVJBTSBjdHhfZ2V0X3BhcmFtX3RhYmxlW10gPSB7Ci0rICAgICAgICB7ICJr ZXlsZW4iLCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIsIE5VTEwsIHNpemVvZihzaXplX3Qp LCAwIH0sCi0rICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwKLSt9OwotKwotK3N0YXRp YyBjb25zdCBPU1NMX1BBUkFNIGNpcGhlcl9nZXRfcGFyYW1fdGFibGVbXSA9IHsKLSsgICAgICAg IHsgImJsb2Nrc2l6ZSIsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUiwgTlVMTCwgc2l6ZW9m KHNpemVfdCksIDAgfSwKLSsgICAgICAgIHsgImtleWxlbiIsIE9TU0xfUEFSQU1fVU5TSUdORURf SU5URUdFUiwgTlVMTCwgc2l6ZW9mKHNpemVfdCksIDAgfSwKLSsgICAgICAgIHsgTlVMTCwgMCwg TlVMTCwgMCwgMCB9LAotK307Ci0rCi0rc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gY2lwaGVyX3Nl dF9wYXJhbV90YWJsZVtdID0gewotKwl7ICJrZXlsZW4iLCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lO VEVHRVIsIE5VTEwsIHNpemVvZihzaXplX3QpLCAwIH0sCi0rCXsgTlVMTCwgMCwgTlVMTCwgMCwg MCB9LAotK307Ci0rCi0rCi0rLyogcHJvdmlkZXIgZnVuY3Rpb25zIHN0YXJ0IGhlcmUgKi8KLSsK LStzdGF0aWMgdm9pZCBwcm92aWRlcl9jdHhfZnJlZShzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0ICpj dHgpCi0rewotKyAgICBpZiAoY3R4ICE9IE5VTEwpCi0rICAgICAgICBwcm92ZXJyX2ZyZWVfaGFu ZGxlKGN0eC0+cHJvdmVycl9oYW5kbGUpOwotKyAgICBmcmVlKGN0eCk7Ci0rfQotKwotK3N0YXRp YyBzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0ICpwcm92aWRlcl9jdHhfbmV3KGNvbnN0IE9TU0xfQ09S RV9IQU5ETEUgKmNvcmUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgT1NTTF9ESVNQQVRDSCAqaW4pCi0rewotKyAgICBzdHJ1Y3QgcHJvdmlk ZXJfY3R4X3N0ICpjdHg7Ci0rCi0rICAgIGlmICgoY3R4ID0gbWFsbG9jKHNpemVvZigqY3R4KSkp ICE9IE5VTEwKLSsgICAgICAgICYmIChjdHgtPnByb3ZlcnJfaGFuZGxlID0gcHJvdmVycl9uZXdf aGFuZGxlKGNvcmUsIGluKSkgIT0gTlVMTCkgewotKyAgICAgICAgY3R4LT5jb3JlX2hhbmRsZSA9 IGNvcmU7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBwcm92aWRlcl9jdHhfZnJlZShjdHgpOwot KyAgICAgICAgY3R4ID0gTlVMTDsKLSsgICAgfQotKyAgICByZXR1cm4gY3R4OwotK30KLSsKLSsK LSsvKiByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBhbGdvIHRhYmxlIGZvciB0aGUgcmVxdWVzdGVk IGZ1bmN0aW9uCi0rICogaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBvbmx5IGJlIHdvcmtpbmcgd2l0 aCBPUF9DSVBIRVIgKi8KLStjb25zdCBPU1NMX0FMR09SSVRITSAqYWVzX210X3Byb3ZfcXVlcnko dm9pZCAqcHJvdmN0eCwgaW50IG9wZXJhdGlvbl9pZCwKLSsJCQkJICAgICBpbnQgKm5vX3N0b3Jl KQotK3sKLSsJc3dpdGNoIChvcGVyYXRpb25faWQpIHsKLSsJY2FzZSBPU1NMX09QX0NJUEhFUjoK LSsJCXJldHVybiBhZXNfbXRfY2lwaGVyczsKLSsJfQotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0r Y29uc3QgT1NTTF9JVEVNICphZXNfbXRfcHJvdl9yZWFzb25zKHZvaWQgKnByb3ZjdHgpCi0rewot KwlyZXR1cm4gcmVhc29uczsKLSt9Ci0rCi0rc3RhdGljIGludCBhZXNfbXRfcHJvdl9nZXRfcGFy YW1zKHZvaWQgKnByb3ZjdHgsIE9TU0xfUEFSQU0gKnBhcmFtcykKLSt7Ci0rCU9TU0xfUEFSQU0g KnA7Ci0rCWludCBvayA9IDE7Ci0rCi0rCWNoYXIgKlZFUlNJT049IjEuMCI7Ci0rCWNoYXIgKkJV SUxEVFlQRT0iYWVzX2N0cl9tdEBocG5zc2gub3JnIjsKLSsJCi0rCWZvcihwID0gcGFyYW1zOyBw LT5rZXkgIT0gTlVMTDsgcCsrKQotKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAidmVyc2lvbiIp ID09IDApIHsKLSsJCQkqKGNvbnN0IHZvaWQgKiopcC0+ZGF0YSA9IFZFUlNJT047Ci0rCQkJcC0+ cmV0dXJuX3NpemUgPSBzdHJsZW4oVkVSU0lPTik7Ci0rCQl9IGVsc2UgaWYgKHN0cmNhc2VjbXAo cC0+a2V5LCAiYnVpbGRpbmZvIikgPT0gMAotKwkJCSAgICYmIEJVSUxEVFlQRVswXSAhPSAnXDAn KSB7Ci0rCQkJKihjb25zdCB2b2lkICoqKXAtPmRhdGEgPSBCVUlMRFRZUEU7Ci0rCQkJcC0+cmV0 dXJuX3NpemUgPSBzdHJsZW4oQlVJTERUWVBFKTsKLSsJCX0KLSsJcmV0dXJuIG9rOwotK30KLSsK LSsvKiBUaGUgZnVuY3Rpb24gdGhhdCB0ZWFycyBkb3duIHRoaXMgcHJvdmlkZXIgKi8KLStzdGF0 aWMgdm9pZCBhZXNfbXRfcHJvdl90ZWFyZG93bih2b2lkICp2cHJvdmN0eCkKLSt7Ci0rICAgIHBy b3ZpZGVyX2N0eF9mcmVlKHZwcm92Y3R4KTsKLSt9Ci0rCi0raW50IE9TU0xfcHJvdmlkZXJfaW5p dChjb25zdCBPU1NMX0NPUkVfSEFORExFICpjb3JlLAotKwkJICAgICAgIGNvbnN0IE9TU0xfRElT UEFUQ0ggKmluLAotKwkJICAgICAgIGNvbnN0IE9TU0xfRElTUEFUQ0ggKipvdXQsCi0rCQkgICAg ICAgdm9pZCAqKnZwcm92Y3R4KQotK3sKLSsgICAgaWYgKCgqdnByb3ZjdHggPSBwcm92aWRlcl9j dHhfbmV3KGNvcmUsIGluKSkgPT0gTlVMTCkKLSsJICAgIHJldHVybiAwOwotKyAgICAqb3V0ID0g cHJvdmlkZXJfZnVuY3Rpb25zOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogcGFyYW1ldGVy IGZ1bmN0aW9ucyBmb3IgMjU2fDE5MnwxMjggYml0IGtleSBsZW5ndGhzICovCi0rc3RhdGljIGlu dCBhZXNfbXRfZ2V0X3BhcmFtc18yNTYoT1NTTF9QQVJBTSBwYXJhbXNbXSkKLSt7Ci0rCU9TU0xf UEFSQU0gKnA7Ci0rCWludCBvayA9IDE7Ci0rCQotKwlmb3IgKHAgPSBwYXJhbXM7IHAtPmtleSAh PSBOVUxMOyBwKyspIHsKLSsJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgImJsb2Nrc2l6ZSIpID09 IDApCi0rCQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBBRVNfQkxPQ0tfU0laRSkgPCAwKSB7 Ci0rCQkJCW9rID0gMDsKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKHN0cmNhc2VjbXAo cC0+a2V5LCAia2V5bGVuIikgPT0gMCkgewotKwkJCXNpemVfdCBrZXlsID0gMzI7Ci0rCQkJCi0r CQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBrZXlsKSA8IDApIHsKLSsJCQkJb2sgPSAwOwot KwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJcmV0dXJuIG9rOwotK30KLSsKLStz dGF0aWMgaW50IGFlc19tdF9nZXRfcGFyYW1zXzE5MihPU1NMX1BBUkFNIHBhcmFtc1tdKQotK3sK LSsJT1NTTF9QQVJBTSAqcDsKLSsJaW50IG9rID0gMTsKLSsJCi0rCWZvciAocCA9IHBhcmFtczsg cC0+a2V5ICE9IE5VTEw7IHArKykgewotKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYmxvY2tz aXplIikgPT0gMCkKLSsJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIEFFU19CTE9DS19TSVpF KSA8IDApIHsKLSsJCQkJb2sgPSAwOwotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoc3Ry Y2FzZWNtcChwLT5rZXksICJrZXlsZW4iKSA9PSAwKSB7Ci0rCQkJc2l6ZV90IGtleWwgPSAyNDsK LSsJCQkKLSsJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIGtleWwpIDwgMCkgewotKwkJCQlv ayA9IDA7Ci0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCX0KLSsJfQotKwlyZXR1cm4gb2s7Ci0r fQotKwotK3N0YXRpYyBpbnQgYWVzX210X2dldF9wYXJhbXNfMTI4KE9TU0xfUEFSQU0gcGFyYW1z W10pCi0rewotKwlPU1NMX1BBUkFNICpwOwotKwlpbnQgb2sgPSAxOwotKwkKLSsJZm9yIChwID0g cGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKSB7Ci0rCQlpZiAoc3RyY2FzZWNtcChwLT5rZXks ICJibG9ja3NpemUiKSA9PSAwKQotKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwgQUVTX0JM T0NLX1NJWkUpIDwgMCkgewotKwkJCQlvayA9IDA7Ci0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJ CWlmIChzdHJjYXNlY21wKHAtPmtleSwgImtleWxlbiIpID09IDApIHsKLSsJCQlzaXplX3Qga2V5 bCA9IDE2OwotKwkJCQotKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwga2V5bCkgPCAwKSB7 Ci0rCQkJCW9rID0gMDsKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJfQotKwl9Ci0rCXJldHVy biBvazsKLSt9Ci0rCi0rLyogUGFyYW1ldGVycyB0aGF0IGxpYmNyeXB0byBjYW4gZ2V0IGZyb20g dGhpcyBpbXBsZW1lbnRhdGlvbiAqLwotK3N0YXRpYyBjb25zdCBPU1NMX1BBUkFNICphZXNfbXRf Z2V0dGFibGVfcGFyYW1zKHZvaWQgKnByb3ZjdHgpCi0rewotKwlyZXR1cm4gY2lwaGVyX2dldF9w YXJhbV90YWJsZTsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gKmFlc19tdF9nZXR0 YWJsZV9jdHhfcGFyYW1zKHZvaWQgKmNjdHgsIHZvaWQgKnByb3ZjdHgpCi0rewotKwlyZXR1cm4g Y3R4X2dldF9wYXJhbV90YWJsZTsKLSt9Ci0rCi0rc3RhdGljIGludCBhZXNfbXRfZ2V0X2N0eF9w YXJhbXModm9pZCAqdmN0eCwgT1NTTF9QQVJBTSBwYXJhbXNbXSkKLSt7Ci0rICAgIHN0cnVjdCBh ZXNfbXRfY3R4X3N0ICpjdHggPSB2Y3R4OwotKyAgICBpbnQgb2sgPSAxOwotKwotKyAgICBpZiAo Y3R4LT5rZXlsZW4gPiAwKSB7Ci0rICAgICAgICBPU1NMX1BBUkFNICpwOwotKwotKyAgICAgICAg Zm9yIChwID0gcGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKQotKyAgICAgICAgICAgIGlmIChz dHJjYXNlY21wKHAtPmtleSwgImtleWxlbiIpID09IDAKLSsgICAgICAgICAgICAgICAgJiYgcHJv dm51bV9zZXRfc2l6ZV90KHAsIGN0eC0+a2V5bGVuKSA8IDApIHsKLSsgICAgICAgICAgICAgICAg b2sgPSAwOwotKyAgICAgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgICAgICB9Ci0rICAg IH0KLSsgICAgcmV0dXJuIG9rOwotK30KLSsKLSsvKiBQYXJhbWV0ZXJzIHRoYXQgbGliY3J5cHRv IGNhbiBzZW5kIHRvIHRoaXMgaW1wbGVtZW50YXRpb24gKi8KLStzdGF0aWMgY29uc3QgT1NTTF9Q QVJBTSAqYWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXModm9pZCAqY2N0eCwgdm9pZCAqcHJvdmN0 eCkKLSt7Ci0rICAgIHJldHVybiBjaXBoZXJfc2V0X3BhcmFtX3RhYmxlOwotK30KLSsKLStzdGF0 aWMgaW50IGFlc19tdF9zZXRfY3R4X3BhcmFtcyh2b2lkICp2Y3R4LCBjb25zdCBPU1NMX1BBUkFN IHBhcmFtc1tdKQotK3sKLSsgICAgc3RydWN0IGFlc19tdF9jdHhfc3QgKmN0eCA9IHZjdHg7Ci0r ICAgIGNvbnN0IE9TU0xfUEFSQU0gKnA7Ci0rICAgIGludCBvayA9IDE7Ci0rCi0rICAgIGlmIChj dHgtPm9uZ29pbmcpIHsKLSsgICAgICAgIEVSUl9yYWlzZShFUlJfSEFORExFKGN0eCksIEFFU19N VF9PTkdPSU5HX09QRVJBVElPTik7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAg ICBmb3IgKHAgPSBwYXJhbXM7IHAtPmtleSAhPSBOVUxMOyBwKyspCi0rICAgICAgICBpZiAoc3Ry Y2FzZWNtcChwLT5rZXksICJrZXlsZW4iKSA9PSAwKSB7Ci0rICAgICAgICAgICAgc2l6ZV90IGtl eWwgPSAwOwotKwotKyAgICAgICAgICAgIGlmIChwcm92bnVtX2dldF9zaXplX3QoJmtleWwsIHAp IDwgMCkgewotKyAgICAgICAgICAgICAgICBvayA9IDA7Ci0rICAgICAgICAgICAgICAgIGNvbnRp bnVlOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBjdHgtPmtleWxlbiA9IGtleWw7Ci0r ICAgICAgICB9Ci0rICAgIHJldHVybiBvazsKLSt9Ci0rCi0rI2VuZGlmIC8qV0lUSF9PUEVOU1NM MyovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXIuaCBvcGVuc3NoLTEwLjNw MS9jaXBoZXIuaAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLmgJMjAyNi0wNy0wMiAw MDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXIuaAkyMDI2 LTA3LTAyIDAwOjQ2OjMzLjI4Nzc2Njc1OCArMDIwMAotQEAgLTQyLDExICs0MiwxNyBAQAotICNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNlbmRpZgotICNpbmNsdWRlICJjaXBoZXItY2hhY2hh cG9seS5oIgotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBv bHktbGliY3J5cHRvLW10LmgiCi0rI2VuZGlmCi0gI2luY2x1ZGUgImNpcGhlci1hZXNjdHIuaCIK LSAKLSAjZGVmaW5lIENJUEhFUl9FTkNSWVBUCQkxCi0gI2RlZmluZSBDSVBIRVJfREVDUllQVAkJ MAotIAotKyNkZWZpbmUgQ0lQSEVSX01VTFRJVEhSRUFECTEKLSsjZGVmaW5lIENJUEhFUl9TRVJJ QUwJCTAKLSsKLSBzdHJ1Y3Qgc3NoY2lwaGVyIHsKLSAJY2hhcgkqbmFtZTsKLSAJdV9pbnQJYmxv Y2tfc2l6ZTsKLUBAIC02MCw2ICs2Niw3IEBACi0gI2RlZmluZSBDRkxBR19OT05FCQkoMTw8MykK LSAjZGVmaW5lIENGTEFHX0lOVEVSTkFMCQlDRkxBR19OT05FIC8qIERvbid0IHVzZSAibm9uZSIg Zm9yIHBhY2tldHMgKi8KLSAjaWZkZWYgV0lUSF9PUEVOU1NMCi0rI2RlZmluZSBDRkxBR19NVAkJ KDE8PDQpCi0gCWNvbnN0IEVWUF9DSVBIRVIJKigqZXZwdHlwZSkodm9pZCk7Ci0gI2Vsc2UKLSAJ dm9pZAkqaWdub3JlZDsKLUBAIC02OCwyNCArNzUsMjcgQEAKLSAKLSBzdHJ1Y3Qgc3NoY2lwaGVy X2N0eDsKLSAKLS1jb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXJfYnlfbmFtZShjb25zdCBj aGFyICopOwotK3N0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcl9ieV9uYW1lKGNvbnN0IGNoYXIgKik7 Ci0gY29uc3QgY2hhciAqY2lwaGVyX3dhcm5pbmdfbWVzc2FnZShjb25zdCBzdHJ1Y3Qgc3NoY2lw aGVyX2N0eCAqKTsKLSBpbnQJIGNpcGhlcnNfdmFsaWQoY29uc3QgY2hhciAqKTsKLSBjaGFyCSpj aXBoZXJfYWxnX2xpc3QoY2hhciwgaW50KTsKLSBjb25zdCBjaGFyICpjb21wcmVzc2lvbl9hbGdf bGlzdChpbnQpOwotIGludAkgY2lwaGVyX2luaXQoc3RydWN0IHNzaGNpcGhlcl9jdHggKiosIGNv bnN0IHN0cnVjdCBzc2hjaXBoZXIgKiwKLS0gICAgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25z dCB1X2NoYXIgKiwgdV9pbnQsIGludCk7Ci0rICAgIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29u c3QgdV9jaGFyICosIHVfaW50LCB1X2ludCwgaW50LCBpbnQpOwotIGludAkgY2lwaGVyX2NyeXB0 KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICosIHVfaW50LCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICos Ci0gICAgIHVfaW50LCB1X2ludCwgdV9pbnQpOwotIGludAkgY2lwaGVyX2dldF9sZW5ndGgoc3Ry dWN0IHNzaGNpcGhlcl9jdHggKiwgdV9pbnQgKiwgdV9pbnQsCi0gICAgIGNvbnN0IHVfY2hhciAq LCB1X2ludCk7Ci0gdm9pZAkgY2lwaGVyX2ZyZWUoc3RydWN0IHNzaGNpcGhlcl9jdHggKik7Ci0g dV9pbnQJIGNpcGhlcl9ibG9ja3NpemUoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKLSt1aW50 NjRfdCBjaXBoZXJfcmVrZXlfYmxvY2tzKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7Ci0gdV9p bnQJIGNpcGhlcl9rZXlsZW4oY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKLSB1X2ludAkgY2lw aGVyX3NlY2xlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOwotIHVfaW50CSBjaXBoZXJfYXV0 aGxlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOwotIHVfaW50CSBjaXBoZXJfaXZsZW4oY29u c3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKLSB1X2ludAkgY2lwaGVyX2lzX2NiYyhjb25zdCBzdHJ1 Y3Qgc3NoY2lwaGVyICopOwotK3ZvaWQJIGNpcGhlcl9yZXNldF9tdWx0aXRocmVhZGVkKHZvaWQp OwotK2NvbnN0IGNoYXIgKmNpcGhlcl9jdHhfbmFtZShjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyX2N0 eCAqKTsKLSAKLSB1X2ludAkgY2lwaGVyX2N0eF9pc19wbGFpbnRleHQoc3RydWN0IHNzaGNpcGhl cl9jdHggKik7Ci0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItc3dpdGNo LmMgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLXN3aXRjaC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3Jp Zy9jaXBoZXItc3dpdGNoLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItc3dpdGNoLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjIz NjMyNjggKzAyMDAKLUBAIC0wLDAgKzEsNzMgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAy MyBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCi0r ICoKLSsgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgotKyAqCi0rICog VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgot KyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0rICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0rICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0rICoKLSsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKLSsgKiBpZiBub3QsIHNlZSBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgotKyAqCi0rICovCi0rCi0rLyogVGhp cyBwcm92aWRlcyB0aGUgZnVuY3Rpb24gdG8gc3dpdGNoIGZyb20gYSBzZXJpYWwgdG8gcGFyYWxs ZWwKLSsgKiBjaXBoZXIuIFRoaXMgaGFzIGJlZW4gbW92ZWQgaW50byBpdCdzIG93biBmaWxlIGlu IG9yZGVyIHRvIG1ha2UgaXQKLSsgKiBhdmFpbGFibGUgdG8gYm90aCB0aGUgY2xpZW50IGFuZCBz ZXJ2ZXIgd2l0aG91dCBoYXZpbmcgdG8gY2x1dHRlcgotKyAqIHVwIG90aGVyIGZpbGVzLgotKyAq LwotKwotKyNpbmNsdWRlICJpbmNsdWRlcy5oIgotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgImNpcGhlci5oIgotKyNpbmNsdWRlICJsb2cu aCIKLSsjaW5jbHVkZSAicGFja2V0LmgiCi0rCi0rCi0rLyogaWYgd2UgYXJlIHVzaW5nIGEgcGFy YWxsZWwgY2lwaGVyIHRoZXJlIGNhbiBiZSBpc3N1ZXMgaW4gZWl0aGVyCi0rICogYSBmb3JrIG9y IHNhbmRib3guIEVzc2VudGlhbGx5LCBpZiB3ZSBzd2l0Y2ggdG9vIGVhcmx5IHRoZQotKyAqIHRo cmVhZHMgZ2V0IGxvc3QgYW5kIHRoZSBhcHBsaWNhdGlvbiBoYW5ncy4gU28gd2hhdCB3ZSBkbyBp cwotKyAqIHRlc3QgaWYgZWl0aGVyIHRoZSBzZW5kIG9yIHJlY2VpdmUgY29udGV4dCBjaXBoZXIg bmFtZQotKyAqIG1hdGNoZXMgdGhlIGtub3duIGF2YWlsYWJsZSBwYXJhbGxlbCBjaXBoZXJzLiBJ ZiBpdCBkb2VzCi0rICogdGhlbiB3ZSBmb3JjZSBhIHJla2V5IHdoaWNoIGF1dG9tYXRpY2FsbHkg bG9hZHMgdGhlIHBhcmFsbGVsCi0rICogY2lwaGVyLiAqLwotKwotK3ZvaWQKLStjaXBoZXJfc3dp dGNoKHN0cnVjdCBzc2ggKnNzaCkgewotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsJLyogZ2V0IHRo ZSBzZW5kIGFuZCByZWNlaXZlIGNvbnRleHQgYW5kIGV4dHJhY3QgdGhlIGNpcGhlciBuYW1lICov Ci0rCWNvbnN0IHZvaWQgKnNlbmRfY2MgPSBzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQoc3No KTsKLSsJY29uc3Qgdm9pZCAqcmVjdl9jYyA9IHNzaF9wYWNrZXRfZ2V0X3JlY2VpdmVfY29udGV4 dChzc2gpOwotKwljb25zdCBjaGFyICpzZW5kID0gY2lwaGVyX2N0eF9uYW1lKHNlbmRfY2MpOwot Kwljb25zdCBjaGFyICpyZWN2ID0gY2lwaGVyX2N0eF9uYW1lKHJlY3ZfY2MpOwotKwotKwlkZWJ1 Z19mKCJTZW5kOiAlcyBSZWN2OiAlcyIsIHNlbmQsIHJlY3YpOwotKwkKLSsJLyogaWYgdGhlIG5h bWUgb2YgdGhlIGNpcGhlciBtYXRjaGVzIHRoZW4gd2Ugc2V0IHRoZSBjb250ZXh0Ci0rCSAqIHRv IGF1dGhlbnRpY2F0ZWQgKGl0IGxpa2VseSBhbHJlYWR5IGlzIHRob3VnaCkgYW5kIHRoZW4KLSsJ ICogZm9yY2UgdGhlIHJla2V5LiBFaXRoZXIgc2lkZSBjYW4gZG8gdGhpcy4gT25lIGRvd25zaWRl IG9mCi0rCSAqIHRoaXMgbWV0aG9kIGlzIHRoYXQgYm90aCBzaWRlcyBjYW4gcmVxdWVzdCBhIHJl a2V5IHNvIHlvdQotKwkgKiBjYW4gZW5kIHVwIGR1cGxpY2F0aW5nIHdvcmsuIFRoaXMgaXMgYW5u b3lpbmcgYnV0IHRoZQotKwkgKiBwZXJmb3JtYW5jZSBnYWlucyBtYWtlIGl0IHdvcnRod2hpbGUu IEFsc28gSQotKwkgKiB1c2Ugc3Ryc3RyIGhlcmUgYmVjYXVzZSBzdHJjbXAgd291bGQgcmVxdWly ZSBhIDYgcGFydAotKwkgKiBpZiBzdGF0ZW1lbnQgKi8KLSsJaWYgKHN0cnN0cihzZW5kLCAiY3Ry IikgfHwgc3Ryc3RyKHJlY3YsICJjdHIiKSkgewotKwkJZGVidWcoIlNlcmlhbCB0byBwYXJhbGxl bCBBRVMtQ1RSIGNpcGhlciBzd2FwIik7Ci0rCQkvKiBjaXBoZXJfcmVzZXRfbXVsdGl0aHJlYWRl ZCgpOyAqLwotKwkJc3NoX3BhY2tldF9zZXRfYXV0aGVudGljYXRlZChzc2gpOwotKwkJcGFja2V0 X3JlcXVlc3RfcmVrZXlpbmcoKTsKLSsJfQotKwkvKiBkbyB0aGUgc2FtZSBmb3IgbXVsdGl0aHJl YWRlZCBjaGFjaGEyMCBidXQgd2l0aCBzdHJjbXAgKi8KLSsJaWYgKChzdHJjbXAoc2VuZCwgImNo YWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIikgPT0gMCkgfHwKLSsJICAgIChzdHJjbXAocmVj diwgImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIikgPT0gMCkpIHsKLSsJCWRlYnVnKCJT ZXJpYWwgdG8gcGFyYWxsZWwgQ2hhY2hhMjAtcG9seTEzMDUgY2lwaGVyIHN3YXAiKTsKLSsJCXNz aF9wYWNrZXRfc2V0X2F1dGhlbnRpY2F0ZWQoc3NoKTsKLSsJCXBhY2tldF9yZXF1ZXN0X3Jla2V5 aW5nKCk7Ci0rCX0KLSsjZW5kaWYKLSt9Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9j aXBoZXItc3dpdGNoLmggb3BlbnNzaC0xMC4zcDEvY2lwaGVyLXN3aXRjaC5oCi0tLS0gb3BlbnNz aC0xMC4zcDEub3JpZy9jaXBoZXItc3dpdGNoLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItc3dpdGNoLmgJMjAyNi0wNy0wMiAw MDoyNzoyOS43MjI0MTAzNDEgKzAyMDAKLUBAIC0wLDAgKzEsMTggQEAKLSsvKgotKyAqIENvcHly aWdodCAoYykgMjAxNSBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVu aXZlcnNpdHkuCi0rICoKLSsgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1 PgotKyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1J VCBMaWNlbnNlLgotKyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0rICogQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9y Ci0rICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0rICoKLSsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKLSsgKiBp ZiBub3QsIHNlZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgotKyAqCi0rICov Ci0rCi0rdm9pZCBjaXBoZXJfc3dpdGNoIChzdHJ1Y3Qgc3NoICopOwotZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvY2xpZW50bG9vcC5jIG9wZW5zc2gtMTAuM3AxL2NsaWVudGxvb3AuYwot LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2xpZW50bG9vcC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYu MTAzMjc1MzA3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY2xpZW50bG9vcC5jCTIwMjYtMDct MDIgMDA6Mjc6MjkuNzIyNjAxNDYxICswMjAwCi1AQCAtMTAwLDYgKzEwMCw3IEBACi0gI2luY2x1 ZGUgIm1hdGNoLmgiCi0gI2luY2x1ZGUgInNzaGVyci5oIgotICNpbmNsdWRlICJob3N0ZmlsZS5o IgotKyNpbmNsdWRlICJtZXRyaWNzLmgiCi0gCi0gI2lmZGVmIEdTU0FQSQotICNpbmNsdWRlICJz c2gtZ3NzLmgiCi1AQCAtMTU4LDYgKzE1OSwxMCBAQAotIAotIHN0YXRpYyB2b2lkIGNsaWVudF9p bml0X2Rpc3BhdGNoKHN0cnVjdCBzc2ggKnNzaCk7Ci0gaW50CXNlc3Npb25faWRlbnQgPSAtMTsK LStpbnQJbWV0cmljc19oZHJfcmVtb3RlX2ZsYWcgPSAwOwotK2ludAltZXRyaWNzX2hkcl9sb2Nh bF9mbGFnID0gMDsKLStpbnQJcmVtb3RlX25vX3BvbGxfZmxhZyA9IDA7Ci0raW50CWxvY2FsX25v X3BvbGxfZmxhZyA9IDA7Ci0gCi0gLyogVHJhY2sgZXNjYXBlIHBlciBwcm90bzIgY2hhbm5lbCAq LwotIHN0cnVjdCBlc2NhcGVfZmlsdGVyX2N0eCB7Ci1AQCAtMTg0LDYgKzE4OSw4IEBACi0gc3Rh dGljIHN0cnVjdCBnbG9iYWxfY29uZmlybXMgZ2xvYmFsX2NvbmZpcm1zID0KLSAgICAgVEFJTFFf SEVBRF9JTklUSUFMSVpFUihnbG9iYWxfY29uZmlybXMpOwotIAotK3ZvaWQgY2xpZW50X3JlcXVl c3RfbWV0cmljcyhzdHJ1Y3Qgc3NoICopOwotKwotIHN0YXRpYyB2b2lkIHF1aXRfbWVzc2FnZShj b25zdCBjaGFyICpmbXQsIC4uLikKLSAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJp bnRmLCAxLCAyKSkpOwotIAotQEAgLTE0NjAsNiArMTQ2Nyw3IEBACi0gCWRvdWJsZSBzdGFydF90 aW1lLCB0b3RhbF90aW1lOwotIAlpbnQgaW50ZXJhY3RpdmUgPSAtMSwgY2hhbm5lbF9kaWRfZW5x dWV1ZSA9IDAsIHI7Ci0gCXVpbnQ2NF90IGlieXRlcywgb2J5dGVzOwotKwl0aW1lX3QgcHJldmlv dXNfdGltZTsKLSAJaW50IGNvbm5faW5fcmVhZHksIGNvbm5fb3V0X3JlYWR5OwotIAlzaWdzZXRf dCBic2lnc2V0LCBvc2lnc2V0OwotIAotQEAgLTE1MDMsNiArMTUxMSw3IEBACi0gCWNsaWVudF9y ZXBsZWRnZSgpOwotIAotIAlzdGFydF90aW1lID0gbW9ub3RpbWVfZG91YmxlKCk7Ci0rCXByZXZp b3VzX3RpbWUgPSB0aW1lKE5VTEwpOyAvKiBmb3IgbWV0cmljcyBwb2xsaW5nICovCi0gCi0gCS8q IEluaXRpYWxpemUgdmFyaWFibGVzLiAqLwotIAlsYXN0X3dhc19jciA9IDE7Ci1AQCAtMTU0Nyw2 ICsxNTU2LDggQEAKLSAJfQotIAotIAlzY2hlZHVsZV9zZXJ2ZXJfYWxpdmVfY2hlY2soKTsKLSsJ aWYgKG9wdGlvbnMubWV0cmljcykKLSsJCWNsaWVudF9yZXF1ZXN0X21ldHJpY3Moc3NoKTsgLyog aW5pdGlhbCBtZXRyaWNzIHBvbGxpbmcgKi8KLSAKLSAJaWYgKHNpZ2VtcHR5c2V0KCZic2lnc2V0 KSA9PSAtMSB8fAotIAkgICAgc2lnYWRkc2V0KCZic2lnc2V0LCBTSUdIVVApID09IC0xIHx8Ci1A QCAtMTU1OSw4ICsxNTcwLDI3IEBACi0gCQllcnJvcl9mKCJic2lnc2V0IHNldHVwOiAlcyIsIHN0 cmVycm9yKGVycm5vKSk7Ci0gI2VuZGlmCi0gCi0rCS8qCi0rCSAqIEJsb2NrIHRlcm1pbmF0aW9u L2luZm8gc2lnbmFscyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBtYWluIGxvb3AuCi0rCSAqIHBw b2xsKCkgYXRvbWljYWxseSByZXN0b3JlcyB0aGUgb2xkIG1hc2sgKG9zaWdzZXQpIHdoaWxlIHdh aXRpbmcsCi0rCSAqIHNvIHNpZ25hbHMgYXJlIHN0aWxsIGRlbGl2ZXJlZCBwcm9tcHRseSBkdXJp bmcgdGhlIHBvbGwuICBLZWVwaW5nCi0rCSAqIHRoZW0gYmxvY2tlZCBkdXJpbmcgdGhlIGRhdGEt cHJvY2Vzc2luZyBwaGFzZSBhdm9pZHMgdHdvCi0rCSAqIHNpZ3Byb2NtYXNrIHN5c2NhbGxzIHBl ciBpdGVyYXRpb24gKH43Nmsvc2VjIGR1cmluZyBidWxrIHRyYW5zZmVyLAotKwkgKiB+NS42JSBv ZiBDUFUgaW4gcHJvZmlsZXMpLiAgU2lnbmFsLWZsYWcgY2hlY2tzIChxdWl0X3BlbmRpbmcsCi0r CSAqIHNpZ2luZm9fcmVjZWl2ZWQpIHN0aWxsIHdvcmsgYmVjYXVzZSB0aGUgaGFuZGxlcnMgcnVu IGluc2lkZQotKwkgKiBwcG9sbCdzIGF0b21pYyB1bmJsb2NrIHdpbmRvdy4KLSsJICovCi0rCWlm IChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZic2lnc2V0LCAmb3NpZ3NldCkgPT0gLTEpCi0rCQll cnJvcl9mKCJic2lnc2V0IHNpZ3Byb2NtYXNrOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0rCi0g CS8qIE1haW4gbG9vcCBvZiB0aGUgY2xpZW50IGZvciB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbiBt b2RlLiAqLwotIAl3aGlsZSAoIXF1aXRfcGVuZGluZykgewotKwkJaWYgKG9wdGlvbnMubWV0cmlj cykgewotKwkJCWlmICgodGltZShOVUxMKSAtIHByZXZpb3VzX3RpbWUpID49IG9wdGlvbnMubWV0 cmljc19pbnRlcnZhbCkgewotKwkJCQljbGllbnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7Ci0rCQkJ CXByZXZpb3VzX3RpbWUgPSB0aW1lKE5VTEwpOwotKwkJCX0KLSsJCX0KLSAJCWNoYW5uZWxfZGlk X2VucXVldWUgPSAwOwotIAotIAkJLyogUHJvY2VzcyBidWZmZXJlZCBwYWNrZXRzIHNlbnQgYnkg dGhlIHNlcnZlci4gKi8KLUBAIC0xNTk1LDggKzE2MjUsNiBAQAotIAkJICogV2FpdCB1bnRpbCB3 ZSBoYXZlIHNvbWV0aGluZyB0byBkbyAoc29tZXRoaW5nIGJlY29tZXMKLSAJCSAqIGF2YWlsYWJs ZSBvbiBvbmUgb2YgdGhlIGRlc2NyaXB0b3JzKS4KLSAJCSAqLwotLQkJaWYgKHNpZ3Byb2NtYXNr KFNJR19CTE9DSywgJmJzaWdzZXQsICZvc2lnc2V0KSA9PSAtMSkKLS0JCQllcnJvcl9mKCJic2ln c2V0IHNpZ3Byb2NtYXNrOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0gCQlpZiAoc2lnaW5mb19y ZWNlaXZlZCkgewotIAkJCXNpZ2luZm9fcmVjZWl2ZWQgPSAwOwotIAkJCWNoYW5uZWxfcmVwb3J0 X29wZW4oc3NoLCBTWVNMT0dfTEVWRUxfSU5GTyk7Ci1AQCAtMTYwNiw4ICsxNjM0LDYgQEAKLSAJ CWNsaWVudF93YWl0X3VudGlsX2Nhbl9kb19zb21ldGhpbmcoc3NoLCAmcGZkLCAmbnBmZF9hbGxv YywKLSAJCSAgICAmbnBmZF9hY3RpdmUsIGNoYW5uZWxfZGlkX2VucXVldWUsICZvc2lnc2V0LAot IAkJICAgICZjb25uX2luX3JlYWR5LCAmY29ubl9vdXRfcmVhZHkpOwotLQkJaWYgKHNpZ3Byb2Nt YXNrKFNJR19TRVRNQVNLLCAmb3NpZ3NldCwgTlVMTCkgPT0gLTEpCi0tCQkJZXJyb3JfZigib3Np Z3NldCBzaWdwcm9jbWFzazogJXMiLCBzdHJlcnJvcihlcnJubykpOwotIAotIAkJaWYgKHF1aXRf cGVuZGluZykKLSAJCQlicmVhazsKLUBAIC0xNjYzLDYgKzE2ODksMTQgQEAKLSAJCQl9Ci0gCQl9 Ci0gCX0KLSsKLSsJLyogUmVzdG9yZSB0aGUgcHJlLWxvb3Agc2lnbmFsIG1hc2sgbm93IHRoYXQg d2UgYXJlIGRvbmUgcG9sbGluZy4gKi8KLSsJaWYgKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAm b3NpZ3NldCwgTlVMTCkgPT0gLTEpCi0rCQllcnJvcl9mKCJvc2lnc2V0IHNpZ3Byb2NtYXNrOiAl cyIsIHN0cmVycm9yKGVycm5vKSk7Ci0rCi0rCWlmIChvcHRpb25zLm1ldHJpY3MpCi0rCQljbGll bnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7IC8qIGZpbmFsIG1ldHJpY3MgcG9sbGluZyAqLwotKwot IAlmcmVlKHBmZCk7Ci0gCi0gCS8qIFRlcm1pbmF0ZSB0aGUgc2Vzc2lvbi4gKi8KLUBAIC0yNjc2 LDYgKzI3MTAsMTY3IEBACi0gCXJldHVybiAxOwotIH0KLSAKLSsvKiB0YWtlIHRoZSByZXNwb25z ZSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHBhcnNlIG91dCB0aGUgZGF0YS4KLSsgKiB0aGUgX2N0eCBz aG91bGQgYmUgbnVsbC4gSXQncyBqdXN0IGhlcmUgYmVjYXVzZSB0aGUgZm9ybWF0Ci0rICogb2Yg dGhlIGNhbGxiYWNrIGhhbmRsZXIgZXhwZWN0cyBpdC4gTGlrZXdpc2UsIHNlcSBpcwotKyAqIG5v dCB1c2VkLiAqLwotK3N0YXRpYyB2b2lkCi0rY2xpZW50X3Byb2Nlc3NfcmVxdWVzdF9tZXRyaWNz IChzdHJ1Y3Qgc3NoICpzc2gsIGludCB0eXBlLCB1X2ludDMyX3Qgc2VxLCB2b2lkICpfY3R4KSB7 Ci0rCXN0cnVjdCB0Y3BfaW5mbyBsb2NhbF90Y3BfaW5mbzsKLSsJY29uc3QgdV9jaGFyICpibG9i OwotKwlGSUxFICpyZW1mcHRyOwotKwlGSUxFICpsb2NhbGZwdHI7Ci0rCWNoYXIgcmVtZmlsZW5h bWVbMTAyNF07Ci0rCWNoYXIgbG9jYWxmaWxlbmFtZVsxMDI0XTsKLSsJdGltZV90IG5vdzsKLSsJ c3RydWN0IHRtICppbmZvOwotKwljaGFyIHRpbWVzdGFtcFs0MF07Ci0rCWNoYXIgKm1ldHJpY3Nz dHJpbmcgPSBOVUxMOwotKwlzaXplX3QgdGNwaV9sZW4sIGxlbiA9IDA7Ci0rCWJpbm4gKm1ldHJp Y3NvYmogPSBOVUxMOwotKwlpbnQgciwga2VybmVsX3ZlcnNpb24gPSAwOwotKwotKwl0aW1lKCZu b3cpOwotKwlpbmZvID0gbG9jYWx0aW1lKCZub3cpOwotKwlzdHJmdGltZSh0aW1lc3RhbXAsIDQw LCAiJWQtJW0tJVkgJUg6JU06JVMiLCBpbmZvKTsKLSsKLSsJLyogbWFsbG9jIHRoZSBzdHJpbmcg MUtCIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggKi8KLSsJbWV0cmljc3N0cmluZyA9IG1hbGxvYygx MDI0KTsKLSsKLSsJLyogZ2V0IHRoZSBsb2NhbCBzb2NrZXQgaW5mb3JtYXRpb24gKi8KLSsJaW50 IHNvY2tfaW4gPSBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX2luKHNzaCk7Ci0rCi0rCS8qIHRo ZSB1c2VyIGNhbiBzcGVjaWZ5IGEgbmFtZS9wYXRoIHdpdGggb3B0aW9ucy5tZXRyaWNzX3BhdGgK LSsJICogYnV0IGlmIGl0J3Mgbm90IGRlZmluZWQgd2UnbGwgdXNlIGEgZGVmYXVsdCBuYW1lLiBJ biBlaXRoZXIgY2FzZQotKwkgKiB0aGUgbmFtZSB3aWxsIGhhdmUgYSBzdWZmaXggb2YgbG9jYWwg Zm9yIHRoZSBsb2NhbCBkYXRhIGFuZCByZW1vdGUgZm9yCi0rCSAqIHRoZSByZW1vdGUgZGF0YSAq LwotKwlpZiAob3B0aW9ucy5tZXRyaWNzX3BhdGggPT0gTlVMTCkgewotKwkJc25wcmludGYocmVt ZmlsZW5hbWUsIDEwMjQsICIlcyIsICIuL3NzaF9zdGFja19tZXRyaWNzLnJlbW90ZSIpOwotKwkJ c25wcmludGYobG9jYWxmaWxlbmFtZSwgMTAyNCwgIiVzIiwgIi4vc3NoX3N0YWNrX21ldHJpY3Mu bG9jYWwiKTsKLSsJfSBlbHNlIHsKLSsJCXNucHJpbnRmKHJlbWZpbGVuYW1lLCAxMDI0LCAiJXMu JXMiLCBvcHRpb25zLm1ldHJpY3NfcGF0aCwgInJlbW90ZSIpOwotKwkJc25wcmludGYobG9jYWxm aWxlbmFtZSwgMTAyNCwgIiVzLiVzIiwgb3B0aW9ucy5tZXRyaWNzX3BhdGgsICJsb2NhbCIpOwot Kwl9Ci0rCi0rCS8qIHNob3VsZCBiZSB0eXBlIDgxIGFuZCBpZiBpdCdzIG5vdCB0aGVuIGl0cyBs aWtsZXkgdGhhdAotKwkqIHRoZSByZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBwb2xsaW5nLiBXZSBj YW4gc3RpbGwgZ2V0IGxvY2FsIGRhdGEgdGhvdWdoCi0rCSovCi0rCWlmICh0eXBlICE9IFNTSDJf TVNHX1JFUVVFU1RfU1VDQ0VTUykgewotKwkJaWYgKHJlbW90ZV9ub19wb2xsX2ZsYWcgPT0gMCkg ewotKwkJCWVycm9yKCJSZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBzdGFjayBtZXRyaWMgcG9sbGlu Zy4gTG9jYWwgZGF0YSBvbmx5LiIpOwotKwkJCXJlbW90ZV9ub19wb2xsX2ZsYWcgPSAxOwotKwkJ fQotKwkJZ290byBsb2NhbG9ubHk7Ci0rCX0KLSsKLSsJLyogb3BlbiB0aGUgZmlsZSBoYW5kbGUg dG8gd3JpdGUgdGhlIHJlbW90ZSBkYXRhKi8KLSsJcmVtZnB0ciA9IGZvcGVuKHJlbWZpbGVuYW1l LCAiYSIpOwotKwlpZiAocmVtZnB0ciA9PSBOVUxMKQotKwkJZmF0YWwoIkVycm9yIG9wZW5pbmcg JXM6ICVzIiwgcmVtZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0rCi0rCS8qIHJlYWQgdGhl IGVudGlyZSBwYWNrZXQgc3RyaW5nIGludG8gYmxvYgotKwkgKiBibG9iIGhhcyB0byBiZSBhIGNv bnN0IHVjaGFyIGFzIHRoYXQncyB3aGF0IHN0cmluZ19kaXJlY3QgZXhwZWN0cwotKwkgKiB3ZSBj YXN0IGl0IGFzIGEgdm9pZCBmb3IgdGhlIGJpbm4gZnVuY3Rpb25zICovCi0rCXNzaHBrdF9nZXRf c3RyaW5nX2RpcmVjdChzc2gsICZibG9iLCAmbGVuKTsKLSsJaWYgKGxlbiA9PSAwKSB7Ci0rCQkv KiByZWNlaXZlZCBubyBkYXRhLiB3aGljaCBpcyB3ZWlyZCAqLwotKwkJZXJyb3IoIlJlY2VpdmVk IG5vIHJlbW90ZSBtZXRyaWNzIGRhdGEuIENvbnRpbnVpbmcuIik7Ci0rCX0KLSsKLSsJLyogZ2V0 IHRoZSBrZXJuZWwgdmVyc2lvbiBwcmludGluZyB0aGUgaGVhZGVyICovCi0rCWtlcm5lbF92ZXJz aW9uID0gYmlubl9vYmplY3RfaW50MzIoKHZvaWQgKilibG9iLCAia2VybmVsX3ZlcnNpb24iKTsK LSsKLSsJLyogY3JlYXRlIGEgc3RyaW5nIG9mIHRoZSBkYXRhIGZyb20gdGhlIGJpbm4gb2JqZWN0 IGJsb2IgKi8KLSsJbWV0cmljc19yZWFkX2Jpbm5fb2JqZWN0KCh2b2lkICopYmxvYiwgbWV0cmlj c3N0cmluZyk7Ci0rCi0rCS8qIGhhdmUgd2UgcHJpbnRlZCB0aGUgaGVhZGVyPyAqLwotKwlpZiAo bWV0cmljc19oZHJfcmVtb3RlX2ZsYWcgPT0gMCkgewotKwkJbWV0cmljc19wcmludF9oZWFkZXIo cmVtZnB0ciwgIlJFTU9URSBDT05ORUNUSU9OIiwga2VybmVsX3ZlcnNpb24pOwotKwkJbWV0cmlj c19oZHJfcmVtb3RlX2ZsYWcgPSAxOwotKwl9Ci0rCWZwcmludGYocmVtZnB0ciwgIiVzLCAiLCB0 aW1lc3RhbXApOwotKwlmcHJpbnRmKHJlbWZwdHIsICIlc1xuIiwgbWV0cmljc3N0cmluZyk7Ci0r Ci0rCS8qIGNsb3NlIHJlbW90ZSBmaWxlIHBvaW50ZXIqLwotKwlmY2xvc2UocmVtZnB0cik7Ci0r Ci0rCS8qIGdvdCB0aGUgcmVtb3RlIGRhdGEsIG5vdyBnZXQgdGhlIGxvY2FsICovCi0rbG9jYWxv bmx5OgotKy8qIFRDUF9JTkZPIGlzIGRlZmluZWQgaW4gbWV0cmljcy5oKi8KLSsjaWYgIWRlZmlu ZWQgVENQX0lORk8KLSsJaWYgKGxvY2FsX25vX3BvbGxfZmxhZyA9PSAwKSB7Ci0rCQllcnJvcigi TG9jYWwgaG9zdCBkb2VzIG5vdCBzdXBwb3J0IG1ldHJpYyBwb2xsaW5nLiBSZW1vdGUgZGF0YSBv bmx5LiIpOwotKwkJbG9jYWxfbm9fcG9sbF9mbGFnID0gMTsKLSsJfQotKyNlbHNlCi0rCS8qIG9w ZW4gZmlsZSBoYW5kbGUgZm9yIGxvY2FsIGRhdGEgKi8KLSsJbG9jYWxmcHRyID0gZm9wZW4obG9j YWxmaWxlbmFtZSwgImEiKTsKLSsJaWYobG9jYWxmcHRyID09IE5VTEwpCi0rCQlmYXRhbCgiRXJy b3Igb3BlbmluZyAlczogJXMiLCBsb2NhbGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotKwot KwkvKiBjcmVhdGUgdGhlIGJpbm4gb2JqZWN0Ki8KLSsJbWV0cmljc29iaiA9IGJpbm5fb2JqZWN0 KCk7Ci0rCWlmIChtZXRyaWNzb2JqID09IE5VTEwpIHsKLSsJCWZhdGFsKCJDb3VsZCBub3QgY3Jl YXRlIG1ldHJpY3Mgb2JqZWN0Iik7Ci0rCX0KLSsKLSsJdGNwaV9sZW4gPSAoc2l6ZV90KXNpemVv Zihsb2NhbF90Y3BfaW5mbyk7Ci0rCWlmICgociA9IGdldHNvY2tvcHQoc29ja19pbiwgSVBQUk9U T19UQ1AsIFRDUF9JTkZPLCAodm9pZCAqKSZsb2NhbF90Y3BfaW5mbywKLSsJCQkgICAgKHNvY2ts ZW5fdCAqKSZ0Y3BpX2xlbikpICE9IDApewotKwkJZXJyb3IoIkNvdWxkIG5vdCByZWFkIHRjcF9p bmZvIGZyb20gc29ja2V0Iik7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwkvKiB3ZSB3cml0ZSBh bmQgcmVhZCB0byBhIGJpbm4gb2JqZWN0IGJlY2F1c2UgaXQgbGV0cyB1cwotKwkgKiBmb3JtYXQg dGhlIGRhdGEgY29uc2lzdGVudGx5ICovCi0rCW1ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3QoJmxv Y2FsX3RjcF9pbmZvLCBtZXRyaWNzb2JqKTsKLSsKLSsJLyogY3JlYXRlIGEgc3RyaW5nIG9mIHRo ZSBkYXRhIGZyb20gdGhlIGJpbm4gb2JqZWN0IG1ldHJpY3NvYmogKi8KLSsJbWV0cmljc19yZWFk X2Jpbm5fb2JqZWN0KCh2b2lkICopbWV0cmljc29iaiwgbWV0cmljc3N0cmluZyk7Ci0rCi0rCS8q IGdldCB0aGUga2VybmVsIHZlcnNpb24gcHJpbnRpbmcgdGhlIGhlYWRlciAqLwotKwlrZXJuZWxf dmVyc2lvbiA9IGJpbm5fb2JqZWN0X2ludDMyKG1ldHJpY3NvYmosICJrZXJuZWxfdmVyc2lvbiIp OwotKwotKwlpZiAobWV0cmljc19oZHJfbG9jYWxfZmxhZyA9PSAwKSB7Ci0rCQltZXRyaWNzX3By aW50X2hlYWRlcihsb2NhbGZwdHIsICJMT0NBTCBDT05ORUNUSU9OIiwga2VybmVsX3ZlcnNpb24p OwotKwkJbWV0cmljc19oZHJfbG9jYWxfZmxhZyA9IDE7Ci0rCX0KLSsKLSsJZnByaW50Zihsb2Nh bGZwdHIsICIlcywgIiwgdGltZXN0YW1wKTsKLSsJZnByaW50Zihsb2NhbGZwdHIsICIlc1xuIiwg bWV0cmljc3N0cmluZyk7Ci0rCWZjbG9zZSAobG9jYWxmcHRyKTsKLSsjZW5kaWYgLyogVENQX0lO Rk8gKi8KLStvdXQ6Ci0rCWZyZWUobWV0cmljc3N0cmluZyk7Ci0rfQotKwotKy8qIFVzZSB0aGUg U1NIMl9NU0dfR0xPQkFMX1JFUVVFU1QgcHJvdG9jb2wgdG8KLSsgKiBhc2sgdGhlIHNlcnZlciB0 byBzZW5kIG1ldHJpY3MgYmFjayB0byB0aGUgY2xpZW50LgotKyAqIHdlIHVzZSB0aGUgbm9uLWNh bm9uaWNhbCBzdHJpbmcgc3RhY2stbWV0cmljc0BocG5zc2gub3JnCi0rICogdG8gaW5kaWNhdGUg dGhlIHR5cGUgb2YgcmVxdWVzdCB3ZSB3YW50LiBJZiB0aGUgcmVjZWl2ZXIgZG9lc24ndAotKyAq IHVuZGVyc3RhbmQgaXQgdGhlbiB0aGUgcmVzcG9uc2UgaW5kaWFjdGVzIGEgZmFpbHVyZS4KLSsg KiBJIGNhbiBwcm9iYWJseSBkbyB0aGlzIGJ5IHVzaW5nIGNsaW50X2lucHV0X2dsb2JhbF9yZXF1 ZXN0IGJ1dAotKyAqIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLgotKyAqLwotK3Zv aWQgY2xpZW50X3JlcXVlc3RfbWV0cmljcyhzdHJ1Y3Qgc3NoICpzc2gpIHsKLSsJaW50IHI7Ci0r Ci0rCWRlYnVnX2YoIkFza2luZyBzZXJ2ZXIgZm9yIFRDUCBzdGFjayBtZXRyaWNzIik7Ci0rCS8q IGNyZWF0ZSBhIHBha2NldCBvZiBHTE9CQUxfUkVRVUVTVCB0eXBlICovCi0rCWlmICgociA9IHNz aHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0dMT0JBTF9SRVFVRVNUKSkgIT0gMCB8fAotKwkgICAg LyogZGVmaW5lIHRoZSB0eXBlIG9mIEdMT0JBTF9SRVFVRVNUIG1lc3NhZ2UgKi8KLSsJICAgIChy ID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwKLSsJICAgICJzdGFjay1tZXRyaWNzQGhwbnNzaC5v cmciKSkgIT0gMCB8fAotKwkgICAgLyogaW5kaWNhdGUgaWYgd2Ugd2FudCBhIHJlc3BvbnNlLiAx IGZvciB5ZXMgMCBmb3Igbm8gKi8KLSsJICAgIChyID0gc3NocGt0X3B1dF91OChzc2gsIDEpKSAh PSAwKQotKwkJZmF0YWxfZnIociwgInByZXBhcmUgc3RhY2sgcmVxdWVzdCBmYWlsdXJlIik7Ci0r CS8qIHNlbmQgdGhlIHBhY2tldCAqLwotKwlpZiAoKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAw KQotKwkJZmF0YWxfZnIociwgInNlbmQgc3RhY2sgcmVxdWVzdCIpOwotKwkvKiBpIGJlbGlldmUg dGhpcyBpbmRpY2F0ZXMgd2hhdCB3ZSBhcmUgdG8gdXNlIGZvciBhIGNhbGxiYWNrICovCi0rCWNs aWVudF9yZWdpc3Rlcl9nbG9iYWxfY29uZmlybShjbGllbnRfcHJvY2Vzc19yZXF1ZXN0X21ldHJp Y3MsIE5VTEwpOwotK30KLSsKLSBzdGF0aWMgaW50Ci0gY2xpZW50X2lucHV0X2dsb2JhbF9yZXF1 ZXN0KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSB7Ci1AQCAtMjc5 OCw2ICsyOTkzLDQzIEBACi0gCi0gCWxlbiA9IHNzaGJ1Zl9sZW4oY21kKTsKLSAJaWYgKGxlbiA+ IDApIHsKLSsJCS8qIHdlIG1heSBiZSBjb25uZWN0aW5nIHRvIGEgc2VydmVyIHRoYXQgaGFzIGhw biBwcmVmaXhlZAotKwkJICogYmluYXJpZXMgaW5zdGFsbGVkLiBJbiB0aGF0IGNhc2Ugd2UgbmVl ZCB0byByZXdyaXRlIGFueQotKwkJICogc2NwIGNvbW1hbmRzIHRvIGxvb2sgZm9yIGhwbnNjcCBp bnN0ZWFkLgotKwkJICovCi0rCQlpZiAoc3NoLT5jb21wYXQgJiBTU0hfSFBOU1NIX1BSRUZJWCkg ewotKwkJCWNoYXIgKm5ld19jbWQ7Ci0rCQkJbmV3X2NtZCA9IG1hbGxvYyhsZW4rNCk7Ci0rCQkJ LyogcmVhZCB0aGUgZXhpc3RpbmcgY29tbWFuZCBpbnRvIGEgdGVtcCBidWZmZXIgKi8KLSsJCQlz cHJpbnRmKG5ld19jbWQsICIlcyIsIChjb25zdCB1X2NoYXIqKXNzaGJ1Zl9wdHIoY21kKSk7Ci0r CQkJY29uc3QgY2hhciAqcG9zOwotKwkJCS8qIHNlZSBpZiB0aGUgY29tbWFuZCBzdGFydHMgd2l0 aCBzY3AgKi8KLSsJCQlwb3MgPSBzdHJzdHIobmV3X2NtZCwgInNjcCIpOwotKwkJCS8qIGJ5IHN1 YnN0cmFjdGluZyB0aGUgcG9pbnRlciBuZXdfY21kIGZyb20gdGhlIHBvaW50ZXIKLSsJCQkgKiBw b3Mgd2UgZW5kIHVwIHdpdGggdGhlIHBvc2l0aW9uIG9mIHRoZSBuZWVkbGUgaW4gdGhlCi0rCQkJ ICogaGF5c3RhY2suIElmIGl0J3MgMCB0aGVuIHdlIGNhbiBtZXNzIHdpdGggaXQKLSsJCQkgKi8K LSsJCQlpZiAocG9zIC0gbmV3X2NtZCA9PSAwKSB7Ci0rCQkJCWRlYnVnX2YoIlJld3JpdGluZyBz Y3AgY29tbWFuZCBmb3IgaHBuc2NwLiIpOwotKwkJCQlzcHJpbnRmKG5ld19jbWQsICJocG4lcyIs IChjb25zdCB1X2NoYXIqKXNzaGJ1Zl9wdHIoY21kKSk7Ci0rCQkJCWRlYnVnX2YoIkNvbW1hbmQg d2FzOiAlcyBhbmQgaXMgbm93ICVzIiwKLSsJCQkJICAgICAgKGNvbnN0IHVfY2hhciopc3NoYnVm X3B0cihjbWQpLCBuZXdfY21kKTsKLSsJCQkJLyogZnJlZSB0aGUgZXhpc3Rpbmcgc3NoYnVmICdj bWQnCi0rCQkJCSAqIHJlY3JlYXRlIGl0IGFuZCB0aGVuIHdyaXRlIG91ciBuZXdfY21kIGludG8K LSsJCQkJICogdGhlIHNzaGJ1ZiBzdHJ1Y3QKLSsJCQkJICovCi0rCQkJCXNzaGJ1Zl9mcmVlKGNt ZCk7Ci0rCQkJCWlmICgoY21kID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotKwkJCQkJZmF0YWwo InNzaGJ1Zl9uZXcgZmFpbGVkIGluIHNjcCByZXdyaXRlIik7Ci0rCQkJCXNzaGJ1Zl9wdXRmKGNt ZCwgIiVzIiwgbmV3X2NtZCk7Ci0rCQkJCS8qIHdlIHVzZSBsZW4gbGF0ZXIgb24gc28gZG9uJ3Qg Zm9yZ2V0IHRvCi0rCQkJCSAqIGluY3JlbWVudCBpdCBieSB0aGUgbnVtYmVyIG9mIG5ldyBjaGFy cyBpbiB0aGUKLSsJCQkJICogY29tbWFuZAotKwkJCQkgKi8KLSsJCQkJbGVuICs9IDM7Ci0rCQkJ CWZyZWUobmV3X2NtZCk7Ci0rCQkJfQotKwkJfQotIAkJaWYgKGxlbiA+IDkwMCkKLSAJCQlsZW4g PSA5MDA7Ci0gCQlpZiAod2FudF9zdWJzeXN0ZW0pIHsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNw MS5vcmlnL2NvbXBhdC5jIG9wZW5zc2gtMTAuM3AxL2NvbXBhdC5jCi0tLS0gb3BlbnNzaC0xMC4z cDEub3JpZy9jb21wYXQuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAotKysr IG9wZW5zc2gtMTAuM3AxL2NvbXBhdC5jCTIwMjYtMDctMDIgMDc6NTM6MjcuMjU4NTAyODY4ICsw MjAwCi1AQCAtMjksNiArMjksNyBAQAotIAotICNpbmNsdWRlIDxzdGRpbnQuaD4KLSAjaW5jbHVk ZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxzdGRhcmcuaD4K LSAKLSAjaW5jbHVkZSAieG1hbGxvYy5oIgotQEAgLTEzNiw2ICsxMzcsMzUgQEAKLSAJCQlzc2gt PmNvbXBhdCA9IGNoZWNrW2ldLmJ1Z3M7Ci0gCWlmIChmb3JiaWRfc3NoX3JzYSkKLSAJCXNzaC0+ Y29tcGF0IHw9IFNTSF9SSF9SU0FTSUdTSEE7Ci0rCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBy ZW1vdGUgc2lkZSBpcyBPcGVuU1NIIGFuZCBub3QgSFBOICovCi0rCQkJLyogVE9ETzogU2VlIGlm IHdlIGNhbiB3b3JrIHRoaXMgaW50byB0aGUgbmV3IG1ldGhvZCBmb3IgYnVnIGNoZWNrcyAqLwot KwkJCWlmIChzdHJzdHIodmVyc2lvbiwgIk9wZW5TU0giKSAhPSBOVUxMKSB7Ci0rCQkJCS8qIGNo ZWNrIGlmIHRoZSByZW1vdGUgaXMgaHBuIGFuZCBpZiB0aGUgdmVyc2lvbgotKwkJCQkgKiB1c2Vz IGhwbiBwcmVmaXhlZCBiaW5hcmllcyAqLwotKwkJCQljb25zdCBjaGFyICpvcDsKLSsJCQkJaWYg KChvcCA9IHN0cnN0cih2ZXJzaW9uLCAiaHBuIikpICE9IE5VTEwpIHsKLSsJCQkJCWludCBocG52 ZXIgPSAwOwotKwkJCQkJc3NoLT5jb21wYXQgfD0gU1NIX0hQTlNTSDsKLSsJCQkJCWRlYnVnKCJS ZW1vdGUgaXMgSFBOIGVuYWJsZWQiKTsKLSsJCQkJCWlmIChzc2NhbmYob3AsICJocG4lZCIsICZo cG52ZXIpID09IDEgJiYKLSsJCQkJCSAgICBocG52ZXIgPj0gMTYpIHsKLSsJCQkJCQlzc2gtPmNv bXBhdCB8PSBTU0hfSFBOU1NIX1BSRUZJWDsKLSsJCQkJCQlkZWJ1ZygiUmVtb3RlIHVzZXMgSFBO U1NIIHByZWZpeGVzLiIpOwotKwkJCQkJfQotKwkJCQl9Ci0rCQkJCS8qIFJlc3RyaWN0IGFkdmVy dGlzZWQgd2luZG93IGZvciBub24tSFBOIE9wZW5TU0ggPj0gOC45LiAqLwotKwkJCQlpZiAoIShz c2gtPmNvbXBhdCAmIFNTSF9IUE5TU0gpKSB7Ci0rCQkJCQljb25zdCBjaGFyICpvcDsKLSsJCQkJ CWludCBvbWFqID0gMCwgb21pbiA9IDA7Ci0rCQkJCQlpZiAoKG9wID0gc3Ryc3RyKHZlcnNpb24s ICJPcGVuU1NIXyIpKSAhPSBOVUxMICYmCi0rCQkJCQkgICAgc3NjYW5mKG9wLCAiT3BlblNTSF8l ZC4lZCIsICZvbWFqLCAmb21pbikgPT0gMiAmJgotKwkJCQkJICAgIChvbWFqID49IDkgfHwgKG9t YWogPT0gOCAmJiBvbWluID49IDkpKSkgewotKwkJCQkJCXNzaC0+Y29tcGF0IHw9IFNTSF9SRVNU UklDVF9XSU5ET1c7Ci0rCQkJCQkJZGVidWcoIlJlc3RyaWN0aW5nIGFkdmVydGlzZWQgd2luZG93 IHNpemUuIik7Ci0rCQkJCQl9Ci0rCQkJCX0KLSsJCQl9Ci0rCQkJZGVidWcoInNzaC0+Y29tcGF0 IGlzICV1Iiwgc3NoLT5jb21wYXQpOwotIAkJCXJldHVybjsKLSAJCX0KLSAJfQotZGlmZiAtTnVy IG9wZW5zc2gtMTAuM3AxLm9yaWcvY29tcGF0Lmggb3BlbnNzaC0xMC4zcDEvY29tcGF0LmgKLS0t LSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NvbXBhdC5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1 NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvY29tcGF0LmgJMjAyNi0wNy0wMiAwODo1Mzo0 NS4yNDg2NTgzNjMgKzAyMDAKLUBAIC00NiwxMiArNDYsMTIgQEAKLSAvKiAjZGVmaW5lIHVudXNl ZAkJMHgwMDAxMDAwMCAqLwotIC8qICNkZWZpbmUgdW51c2VkCQkweDAwMDIwMDAwICovCi0gLyog I2RlZmluZSB1bnVzZWQJCTB4MDAwNDAwMDAgKi8KLS0vKiAjZGVmaW5lIHVudXNlZAkJMHgwMDEw MDAwMCAqLwotKyNkZWZpbmUgU1NIX0hQTlNTSAkJMHgwMDEwMDAwMCAvKiBiYXNpY2FsbHkgYSBu b3RpY2UgdGhhdCB0aGlzIGlzIEhQTiBhd2FyZSAqLwotICNkZWZpbmUgU1NIX0JVR19FWFRFT0YJ CTB4MDAyMDAwMDAKLSAjZGVmaW5lIFNTSF9CVUdfUFJPQkUJCTB4MDA0MDAwMDAKLS0vKiAjZGVm aW5lIHVudXNlZAkJMHgwMDgwMDAwMCAqLwotKyNkZWZpbmUgU1NIX1JFU1RSSUNUX1dJTkRPVwkw eDAwODAwMDAwIC8qIHJlc3RyaWN0IGFkdmVydGlzZWQgd2luZG93IHRvIE9wZW5TU0ggY2xpZW50 cyAqLwotICNkZWZpbmUgU1NIX09MRF9GT1JXQVJEX0FERFIJMHgwMTAwMDAwMAotLS8qICNkZWZp bmUgdW51c2VkCQkweDAyMDAwMDAwICovCi0rI2RlZmluZSBTU0hfSFBOU1NIX1BSRUZJWAkweDAy MDAwMDAwIC8qIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgaHBuIHByZWZpeGVzIGJpbmFyaWVzICov Ci0gI2RlZmluZSBTU0hfTkVXX09QRU5TU0gJCTB4MDQwMDAwMDAKLSAjZGVmaW5lIFNTSF9CVUdf RFlOQU1JQ19SUE9SVAkweDA4MDAwMDAwCi0gI2RlZmluZSBTU0hfQlVHX0NVUlZFMjU1MTlQQUQJ MHgxMDAwMDAwMAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY29uZmlndXJlLmFjIG9w ZW5zc2gtMTAuM3AxL2NvbmZpZ3VyZS5hYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY29uZmln dXJlLmFjCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0x MC4zcDEvY29uZmlndXJlLmFjCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIzNDU3Njk3ICswMjAwCi1A QCAtMjc2Miw2ICsyNzYyLDM5IEBACi0gCSkKLSBmaQotIAotKwotKyMgVGVzdGluZyBNUFRDUCBT dXBwb3J0Ci0rIyBEb2VzIHRoZSBPUyBzdXBwb3J0IE1QVENQPwotKyMgV2UgZG9uJ3QgdXNlIHRo aXMgYXQgdGhlIG1vbWVudAotKyMgYnV0IEkgYW0gaG9sZGluZyBpdCBpbiByZXNydmUgLWNqciAw NC8wNC8yMDI1Ci0rCUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgT1Mgc3VwcG9ydHMgTVBU Q1BdKQotKwlBQ19SVU5fSUZFTFNFKAotKwkJW0FDX0xBTkdfUFJPR1JBTShbWwotKwkJI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rCQkjaW5jbHVkZSA8c3RkbGliLmg+Ci0rCQkjaW5jbHVkZSA8dW5pc3Rk Lmg+Ci0rCQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rCQkjaW5jbHVkZSA8c3lzL3NvY2tldC5o PgotKwkJI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSsJCSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0r Ci0rCQldXSwgW1sKLSsJCWludCBzb2NrID0gLTE7Ci0rCQlzb2NrID0gc29ja2V0KEFGX0lORVQs IFNPQ0tfU1RSRUFNLCBJUFBST1RPX01QVENQKTsKLSsJCWlmIChzb2NrIDwgMCkgewotKwkJICAg ZXhpdCgxKTsKLSsJCSAgIH0KLSsJCV1dKV0sCi0rCQlbCi0rCQkJQUNfTVNHX1JFU1VMVChbeWVz XSkKLSsJCQlBQ19ERUZJTkUoW0hBVkVfTVBUQ1BdLCBbMV0sCi0rCQkJICAgIFtPUyBTdXBwb3J0 cyBNUFRDUF0pCi0rCQldLAotKwkJWwotKwkJCUFDX01TR19SRVNVTFQoW25vXSkKLSsJCV0KLSsJ KQotKwotIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRhZGRyaW5mbyIgPSAieHllcyIgJiYgXAot ICAgICB0ZXN0ICJ4JGNoZWNrX2Zvcl9ocHV4X2Jyb2tlbl9nZXRhZGRyaW5mbyIgPSAieDEiOyB0 aGVuCi0gCUFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gc2VlbXMgdG8gd29ya10pCi1A QCAtMzE3Nyw4ICszMjEwLDggQEAKLSAJCQkyMDAqKSAgICMgTGlicmVTU0wKLSAJCQkJbHZlcj1g ZWNobyAiJHNzbHZlciIgfCBzZWQgJ3MvLipsaWJyZXNzbC0vLydgCi0gCQkJCWNhc2UgIiRsdmVy IiBpbgotLQkJCQkyKnwzMDAqKSAjIDIueCwgMy4wLjAKLS0JCQkJCUFDX01TR19FUlJPUihbTGli cmVTU0wgPj0gMy4xLjAgcmVxdWlyZWQgKGhhdmUgIiRzc2xfc2hvd3ZlciIpXSkKLSsJCQkJMip8 MzAwKnwzMDEqfDMwMip8MzAzKnwzMDQqfDMwNiopICMgMi54LCAzLjAuMAotKwkJCQkJQUNfTVNH X0VSUk9SKFtMaWJyZVNTTCA+PSAzLjcuMCByZXF1aXJlZCAoaGF2ZSAiJHNzbF9zaG93dmVyIild KQotIAkJCQkJOzsKLSAJCQkJKikgOzsJIyBBc3N1bWUgYWxsIG90aGVyIHZlcnNpb25zIGFyZSBn b29kLgotIAkJCQllc2FjCi1AQCAtMzE4Nyw2ICszMjIwLDcgQEAKLSAJCQkJIyBPcGVuU1NMIDMg JiA0OyB3ZSB1c2UgdGhlIDEuMXggQVBJCi0gCQkJCSMgaHR0cHM6Ly9vcGVuc3NsLm9yZy9wb2xp Y2llcy9nZW5lcmFsL3ZlcnNpb25pbmctcG9saWN5Lmh0bWwKLSAJCQkJQ1BQRkxBR1M9IiRDUFBG TEFHUyAtRE9QRU5TU0xfQVBJX0NPTVBBVD0weDEwMTAwMDAwTCIKLSsJCQkJQUNfREVGSU5FKFtX SVRIX09QRU5TU0wzXSwgWzFdLCBbV2l0aCBPcGVuU1NMM10pCi0gCQkJCTs7Ci0gCQkgICAgICAg ICopCi0gCQkJCUFDX01TR19FUlJPUihbVW5rbm93bi91bnN1cHBvcnRlZCBPcGVuU1NMIHZlcnNp b24gKCIkc3NsX3Nob3d2ZXIiKV0pCi1AQCAtMzMwMCw2ICszMzM0LDI5IEBACi0gCQlFVlBfQ0lQ SEVSX0NUWF9zZXRfaXYgXAotIAldKQotIAotKwkjIE9wZW5TU0wgMy4wIEFQSQotKwkjIERvZXMg T3BlblNTTCBzdXBwb3J0IHRoZSBFVlBfTUFDIGZ1bmN0aW9ucyBmb3IgUG9seTEzMDU/Ci0rCUFD X01TR19DSEVDS0lORyhbd2hldGhlciBPcGVuU1NMIHN1cHBvcnRzIFBvbHkxMzA1IE1BQyBFVlBd KQotKwlBQ19SVU5fSUZFTFNFKAotKwkJW0FDX0xBTkdfUFJPR1JBTShbWwotKwkjaW5jbHVkZSA8 c3RkbGliLmg+Ci0rCSNpbmNsdWRlIDxzdGRpby5oPgotKwkjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsJCV1dLCBbWwotKwkJRVZQX01BQyAqbWFjID0gRVZQX01BQ19mZXRjaChOVUxMLCAicG9s eTEzMDUiLCBOVUxMKTsKLSsJCWlmIChtYWMgPT0gTlVMTCkKLSsJCSAgIGV4aXQoMSk7Ci0rCQld XSldLAotKwkJWwotKwkJCUFDX01TR19SRVNVTFQoW3llc10pCi0rCQkJQUNfREVGSU5FKFtPUEVO U1NMX0hBVkVfUE9MWV9FVlBdLCBbMV0sCi0rCQkJICAgIFtMaWJjcnlwdG8gc3VwcG9ydHMgUG9s eTEzMDUgTUFDIEVWUF0pCi0rCQldLAotKwkJWwotKwkJCUFDX01TR19SRVNVTFQoW25vXSkKLSsJ CV0KLSsJKQotKwotIAlpZiB0ZXN0ICJ4JG9wZW5zc2xfZW5naW5lIiA9ICJ4eWVzIiA7IHRoZW4K LSAJCUFDX01TR19DSEVDS0lORyhbZm9yIE9wZW5TU0wgRU5HSU5FIHN1cHBvcnRdKQotIAkJQUNf Q09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwotZGlmZiAtTnVyIG9wZW5zc2gtMTAu M3AxLm9yaWcvZGVmaW5lcy5oIG9wZW5zc2gtMTAuM3AxL2RlZmluZXMuaAotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvZGVmaW5lcy5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMDkyNTg4NzgzICswMjAw Ci0rKysgb3BlbnNzaC0xMC4zcDEvZGVmaW5lcy5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIzODgz MzY5ICswMjAwCi1AQCAtOTQ0LDcgKzk0NCwxMSBAQAotICNlbmRpZgotIAotICNpZm5kZWYgU1NI X0lPQlVGU1oKLS0jIGRlZmluZSBTU0hfSU9CVUZTWiA4MTkyCi0rIyBkZWZpbmUgU1NIX0lPQlVG U1ogKDMyKjEwMjQpCi0rI2VuZGlmCi0rCi0rI2lmbmRlZiBJUFBST1RPX01QVENQCi0rI2RlZmlu ZSBJUFBST1RPX01QVENQIDI2MgotICNlbmRpZgotIAotIC8qCi1AQCAtMTAwMCwzICsxMDA0LDEy IEBACi0gI2VuZGlmCi0gCi0gI2VuZGlmIC8qIF9ERUZJTkVTX0ggKi8KLSsKLSsvKiB1c2VkIHRv IGVuYWJsZSBjaGVja2luZyBsaW51eCBrZXJuZWwgdmVyc2lvbnMgKi8KLSsjaWYgZGVmaW5lZChf X2xpbnV4X18pICYmICFkZWZpbmVkKF9fYWxwaW5lX18pCi0rI2luY2x1ZGUgPGxpbnV4L3ZlcnNp b24uaD4KLSsjZW5kaWYKLSsKLSsjaWZuZGVmIEtFUk5FTF9WRVJTSU9OIC8qIHNob3VsZG4ndCBi ZSBuZWNlc3NhcnkgdG8gZGVmaW5lIHRoaXMgKi8KLSsjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEs YixjKSAoKChhKSA8PDE2KSArICgoYikgPDwgOCkgKyhjKSkKLSsjZW5kaWYKLWRpZmYgLU51ciBv cGVuc3NoLTEwLjNwMS5vcmlnL2RpZ2VzdC5oIG9wZW5zc2gtMTAuM3AxL2RpZ2VzdC5oCi0tLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9kaWdlc3QuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5MjU4ODc4 MyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2RpZ2VzdC5oCTIwMjYtMDctMDIgMDA6Mjc6Mjku NzI0MTcwNjA3ICswMjAwCi1AQCAtMjcsNyArMjcsOCBAQAotICNkZWZpbmUgU1NIX0RJR0VTVF9T SEEyNTYJMgotICNkZWZpbmUgU1NIX0RJR0VTVF9TSEEzODQJMwotICNkZWZpbmUgU1NIX0RJR0VT VF9TSEE1MTIJNAotLSNkZWZpbmUgU1NIX0RJR0VTVF9NQVgJCTUKLSsjZGVmaW5lIFNTSF9ESUdF U1RfTlVMTAkJNQotKyNkZWZpbmUgU1NIX0RJR0VTVF9NQVgJCTYKLSAKLSBzdHJ1Y3Qgc3NoYnVm OwotIHN0cnVjdCBzc2hfZGlnZXN0X2N0eDsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmln L2RpZ2VzdC1vcGVuc3NsLmMgb3BlbnNzaC0xMC4zcDEvZGlnZXN0LW9wZW5zc2wuYwotLS0tIG9w ZW5zc2gtMTAuM3AxLm9yaWcvZGlnZXN0LW9wZW5zc2wuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5 MjU4ODc4MyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL2RpZ2VzdC1vcGVuc3NsLmMJMjAyNi0w Ny0wMiAwMDoyNzoyOS43MjQyNTQ1ODEgKzAyMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gCXsgU1NI X0RJR0VTVF9TSEEyNTYsCSJTSEEyNTYiLAkzMiwJRVZQX3NoYTI1NiB9LAotIAl7IFNTSF9ESUdF U1RfU0hBMzg0LAkiU0hBMzg0IiwJNDgsCUVWUF9zaGEzODQgfSwKLSAJeyBTU0hfRElHRVNUX1NI QTUxMiwJIlNIQTUxMiIsCTY0LAlFVlBfc2hhNTEyIH0sCi0rCXsgU1NIX0RJR0VTVF9OVUxMLAki Tk9ORU1BQyIsCTAsCUVWUF9tZF9udWxsfSwKLSAJeyAtMSwJCQlOVUxMLAkJMCwJTlVMTCB9LAot IH07Ci0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9GVU5ESU5HLnltbCBvcGVuc3No LTEwLjNwMS9GVU5ESU5HLnltbAotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvRlVORElORy55bWwJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9G VU5ESU5HLnltbAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNDM5NjE2NyArMDIwMAotQEAgLTAsMCAr MSwxMiBAQAotKyMgVGhlc2UgYXJlIHN1cHBvcnRlZCBmdW5kaW5nIG1vZGVsIHBsYXRmb3Jtcwot KwotK2dpdGh1YjpyYXBpZXIxICMgUmVwbGFjZSB3aXRoIHVwIHRvIDQgR2l0SHViIFNwb25zb3Jz LWVuYWJsZWQgdXNlcm5hbWVzIGUuZy4sIFt1c2VyMSwgdXNlcjJdCi0rI3BhdHJlb246ICMgUmVw bGFjZSB3aXRoIGEgc2luZ2xlIFBhdHJlb24gdXNlcm5hbWUKLSsjb3Blbl9jb2xsZWN0aXZlOiAj IFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPcGVuIENvbGxlY3RpdmUgdXNlcm5hbWUKLSsja29fZmk6 ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIEtvLWZpIHVzZXJuYW1lCi0rI3RpZGVsaWZ0OiAjIFJl cGxhY2Ugd2l0aCBhIHNpbmdsZSBUaWRlbGlmdCBwbGF0Zm9ybS1uYW1lL3BhY2thZ2UtbmFtZSBl LmcuLCBucG0vYmFiZWwKLSsjY29tbXVuaXR5X2JyaWRnZTogIyBSZXBsYWNlIHdpdGggYSBzaW5n bGUgQ29tbXVuaXR5IEJyaWRnZSBwcm9qZWN0LW5hbWUgZS5nLiwgY2xvdWQtZm91bmRyeQotKyNs aWJlcmFwYXk6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIExpYmVyYXBheSB1c2VybmFtZQotKyNp c3N1ZWh1bnQ6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIElzc3VlSHVudCB1c2VybmFtZQotKyNv dGVjaGllOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPdGVjaGllIHVzZXJuYW1lCi0rI2N1c3Rv bTogIyBSZXBsYWNlIHdpdGggdXAgdG8gNCBjdXN0b20gc3BvbnNvcnNoaXAgVVJMcyBlLmcuLCBb J2xpbmsxJywgJ2xpbmsyJ10KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2hhcHB5ZXll YmFsbHMuYyBvcGVuc3NoLTEwLjNwMS9oYXBweWV5ZWJhbGxzLmMKLS0tLSBvcGVuc3NoLTEwLjNw MS5vcmlnL2hhcHB5ZXllYmFsbHMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2gtMTAuM3AxL2hhcHB5ZXllYmFsbHMuYwkyMDI2LTA3LTAyIDAwOjI3OjI5 LjcyNDQ4Mjk1NCArMDIwMAotQEAgLTAsMCArMSwzMTMgQEAKLSsvKgotKyAqIENvcHlyaWdodCAo YykgMjAyNSBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNp dHkuCi0rICoKLSsgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgotKyAq ICBBdXRob3I6IEtpbSBNaWhuIEthcGxhbiAoa2FwbGFuIGF0IGtpbS1taWhuLmNvbSkKLSsgKgot KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5z ZS4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgTUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBz ZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKy8qIFRo aXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUkZDIDgzMDUgYmFzZWQgb24gYSBwYXRjaAotKyAq IHN1cHBsaWVkIGJ5IEtpbSBNaW5oIEthcGxhbiAoa2FwbGFuIGF0IGtpbS1taW5oLmNvbSkuCi0r ICogSW5mb3JtYXRpb24gYWJvdXQgUkZDIDgzMDUgY2FuIGJlIGZvdW5kIGF0Ci0rICogaHR0cHM6 Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzgzMDUKLSsgKiBUaGlzIHZlcnNpb24gKmRvZXMg bm90KiBwcm92aWRlIHN1cHBvcnQgZm9yCi0rICogU2VjdGlvbiAzIHdoZXJlIGFzeWNocm9ub3Vz IHBvbGxpbmcgb2YgRE5TIHNlcnZlcnMKLSsgKiBpcyBhIFNIT1VMRC4KLSsgKiBTZWN0aW9uIDQg cmVxdWlyZXMgc29ydGluZyBvZiBETlMgcmVzdWx0cyBhcyBwZXIKLSsgKiBSRkMgNjcyNC4gVGhp cyBpcyBwcm92aWRlZCBieSB0aGUgZ2V0YWRkcmluZm8gY2FsbAotKyAqIGZyb20gZ2NjLiBUaGlz IG1heSBub3QgYmUgYXZhaWxhYmxlIHZpYSBtdXNsLgotKyAqIEludGVybGVhdmluZyBvZiBhZGRy ZXNzZXMgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCi0rICogU2VjdGlvbiA1IGlzIGltcGxl bWVudGVkLgotKyAqIFNlY3Rpb24gNiBpcyBub3QgaW1wbGVtZW50ZWQgb3V0c2lkZSBvZiBnZXRh ZGRyaW5mbwotKyAqIFNlY3Rpb24gNyBpbiB1bmRlciBjb25zaWRlcmF0aW9uCi0rICovCi0rCi0r Ci0rLyogTk9URTogVGhlcmUgYXJlIGEgbG90IG9mIGRlYnVnIHN0YXRlbWVudHMgaW4gaGVyZQot KyAqIGJlY2F1c2Ugd2UgYXJlIHN0aWxsIHRyZWF0aW5nIHRoaXMgYXMgc29tZXdoYXQKLSsgKiBl eHBlcmltZW50YWwuIEEgZnV0dXJlIHZlcnNpb24gd2lsbCBwcm9tb3RlIHRoaXMKLSsgKiB0byBz dGFibGUgYW5kIHdlJ2xsIHJlbW92ZSBhIGxvdCBvZiB0aGUgbGV2ZWwgMgotKyAqIGRlYnVnIHN0 YXRlbWVudHMgdGhlbi4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsjaWZkZWYg SEFWRV9TWVNfVElNRV9ICi0rIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotKyNlbmRpZgotKyNpbmNs dWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8bmV0L2lmLmg+Ci0rI2luY2x1ZGUgPG5ldGluZXQv aW4uaD4KLSsjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDx1bmlzdGQuaD4KLSsKLSsjaW5jbHVkZSAiaGFwcHlleWViYWxscy5oIgotKyNpbmNs dWRlICJzc2hjb25uZWN0LmgiCi0rI2luY2x1ZGUgInNzaC5oIgotKyNpbmNsdWRlICJtaXNjLmgi Ci0rI2luY2x1ZGUgImxvZy5oIgotKyNpbmNsdWRlICJyZWFkY29uZi5oIgotKwotKy8qIHRoaXMg aXMgZnJvbSBzc2hjb25uZWN0LmMgKi8KLStleHRlcm4gaW50IHNzaF9jcmVhdGVfc29ja2V0KHN0 cnVjdCBhZGRyaW5mbyAqYWkpOwotKwotKy8qIGdldCB0aGUgb3B0aW9ucyBzdHJ1Y3QgaWYgZm9y IHRoZSBkZWxheSB0aW1lICovCi0rZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKLSsKLSsvKiBoYXZl IHdlIHRpbWVkIG91dD8gKi8KLStzdGF0aWMgaW50Ci0rdGltZW91dChzdHJ1Y3QgdGltZXZhbCAq dHYsIGludCB0aW1lb3V0X21zKQotKyB7Ci0rCWlmICh0aW1lb3V0X21zIDw9IDApCi0rCQlyZXR1 cm4gMDsKLSsJbXNfc3VidHJhY3RfZGlmZih0diwgJnRpbWVvdXRfbXMpOwotKwlyZXR1cm4gdGlt ZW91dF9tcyA8PSAwOwotK30KLSsKLSsvKiB1c2VkIHRvIHByb3ZpZGUgZGVidWcgbWVzc2FnZSBp biBzc2hjb25uZWN0ICovCi0rY2hhciBnbG9iYWxfbnRvcFtOSV9NQVhIT1NUXTsKLSsKLSsvKiB1 c2VkIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gZm9yIGRlYnVnIHN0YXRlbWVudHMgKi8KLStjaGFy ICpyZXR1cm5fZmFtKGludCBmYW0pIHsKLSsJaWYgKGZhbSA9PSAxMCkKLSsJCXJldHVybiAiSVB2 NiI7Ci0rCWVsc2UKLSsJCXJldHVybiAiSVB2NCI7Ci0rfQotKwotKy8qCi0rICogUmV0dXJuIDAg aWYgdGhlIGFkZHJpbmZvIHdhcyBub3QgdHJpZWQuIFJldHVybiAtMSBpZiB1c2luZyBpdAotKyAq IGZhaWxlZC4gUmV0dXJuIDEgaWYgaXQgd2FzIHVzZWQuCi0rICovCi0rc3RhdGljIGludAotK2hh cHB5X2V5ZWJhbGxzX2luaXRpYXRlKGNvbnN0IGNoYXIgKmhvc3QsIHN0cnVjdCBhZGRyaW5mbyAq YWksCi0rCQkJCSAgICBpbnQgKnRpbWVvdXRfbXMsCi0rCQkJCSAgICBzdHJ1Y3QgdGltZXZhbCAq aW5pdGlhdGUsCi0rCQkJCSAgICBpbnQgKm5mZHMsIGZkX3NldCAqZmRzLAotKwkJCQkgICAgc3Ry dWN0IGFkZHJpbmZvICpmZF9haVtdKQotK3sKLSsJaW50IG9lcnJubywgc29jazsKLSsJY2hhciBu dG9wW05JX01BWEhPU1RdLCBzdHJwb3J0W05JX01BWFNFUlZdOwotKwotKwlkZWJ1ZzJfZiAoIkhh cHB5IGV5ZWJhbGxzIGluaXRpYXRpbmciKTsKLSsJbWVtc2V0KG50b3AsIDAsIHNpemVvZihudG9w KSk7Ci0rCW1lbXNldChzdHJwb3J0LCAwLCBzaXplb2Yoc3RycG9ydCkpOwotKwkvKiBJZiAqbmZk cyAhPSAwIHRoZW4gKmluaXRpYXRlIGlzIGluaXRpYWxpc2VkLiAqLwotKwlpZiAoKm5mZHMgJiYK LSsJICAgIChhaSA9PSBOVUxMIHx8Ci0rCSAgICAgIXRpbWVvdXQoaW5pdGlhdGUsIG9wdGlvbnMu aGFwcHlfZGVsYXkpKSkgewotKwkJLyogRG8gbm90IGluaXRpYXRlIG5ldyBjb25uZWN0aW9ucyB5 ZXQgKi8KLSsJCWRlYnVnMl9mICgiV2FpdGluZyB0byBpbml0aWF0ZSBuZXcgY29ubmVjdGlvbiIp OwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsJLyogdHJ5aW5nIHRvIHVzZSBhIGZhbWlseSB3ZSBkb24n dCBzdXBwb3J0ICovCi0rCWlmIChhaS0+YWlfZmFtaWx5ICE9IEFGX0lORVQgJiYgYWktPmFpX2Zh bWlseSAhPSBBRl9JTkVUNikgewotKwkJZGVidWcyX2YgKCJBZGRyZXNzIGZhbWlseSBub3Qgc3Vw cG9ydGVkIik7Ci0rCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKLSsJCXJldHVybiAtMTsKLSsJfQot KwotKwlkZWJ1ZzJfZiAoIlJ1bm5pbmcgZ2V0bmFtZWluZm8gZm9yICVzIGFuZCAlZCIsIGhvc3Qs IGFpLT5haV9mYW1pbHkpOwotKwlpZiAoZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9h ZGRybGVuLAotKwkJCW50b3AsIHNpemVvZihudG9wKSwKLSsJCQlzdHJwb3J0LCBzaXplb2Yoc3Ry cG9ydCksCi0rCQkJTklfTlVNRVJJQ0hPU1R8TklfTlVNRVJJQ1NFUlYpICE9IDApIHsKLSsJCW9l cnJubyA9IGVycm5vOwotKwkJZXJyb3IoIiVzOiBnZXRuYW1laW5mbyBmYWlsZWQiLCBfX2Z1bmNf Xyk7Ci0rCQllcnJubyA9IG9lcnJubzsKLSsJCXJldHVybiAtMTsKLSsJfQotKwltZW1jcHkoZ2xv YmFsX250b3AsbnRvcCxzaXplb2YobnRvcCkpOwotKwlkZWJ1ZzJfZigiUkZDIDgzMDUgY29ubmVj dGluZyB0byAlLjIwMHMgWyUuMTAwc10gcG9ydCAlcy4iLAotKwkgICAgICBob3N0LCBudG9wLCBz dHJwb3J0KTsKLSsJZGVidWcyX2YoIlJGQyA4MzA1OiAlLjIwMHMiLCBnbG9iYWxfbnRvcCk7Ci0r CS8qIENyZWF0ZSBhIHNvY2tldCBmb3IgY29ubmVjdGluZyAqLwotKwlzb2NrID0gc3NoX2NyZWF0 ZV9zb2NrZXQoYWkpOwotKwlpZiAoc29jayA8IDApIHsKLSsJCS8qIEFueSBlcnJvciBpcyBhbHJl YWR5IG91dHB1dCAqLwotKwkJZXJybm8gPSAwOwotKwkJcmV0dXJuIC0xOwotKwl9Ci0rCWlmIChz b2NrID49IEZEX1NFVFNJWkUpIHsKLSsJCWVycm9yKCJzb2NrZXQgbnVtYmVyIHRvIGJpZyBmb3Ig c2VsZWN0OiAlZCIsIHNvY2spOwotKwkJY2xvc2Uoc29jayk7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0K LSsJZmRfYWlbc29ja10gPSBhaTsKLSsJLyogdXNpbmcgbm9uYmxvY2tpbmcgc29ja2V0cyB3aXRo IHNlbGVjdCBhbGxvd3MKLSsJICogdXMgdG8gZmlyZSBvZmYgbmV3IHNvY2tldHMgd2l0aG91dCB3 YWl0aW5nIGZvciBhCi0rCSAqIGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQuIFRoaXMgbGV0 cyB1cyBhdm9pZAotKwkgKiB0aGUgdXNlIG9mIHRocmVhZHMuIHNldF9ub25ibG9jayBpcyBpbiBt aXNjLmMKLSsJICogYW5kIHVzZXMgZm5jdGwgKi8KLSsJc2V0X25vbmJsb2NrKHNvY2spOwotKwlk ZWJ1ZzJfZigiUkZDIDgzMDUgcHJlLWNvbm5lY3QgZm9yICVzIiwgcmV0dXJuX2ZhbShhaS0+YWlf ZmFtaWx5KSk7Ci0rCWlmIChjb25uZWN0KHNvY2ssIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxl bikgPCAwICYmCi0rCSAgICBlcnJubyAhPSBFSU5QUk9HUkVTUykgewotKwkJZXJyb3IoImNvbm5l Y3QgdG8gYWRkcmVzcyAlcyBwb3J0ICVzOiAlcyIsCi0rCQkgICAgICBudG9wLCBzdHJwb3J0LCBz dHJlcnJvcihlcnJubykpOwotKwkJZXJybm8gPSAwOwotKwkJY2xvc2Uoc29jayk7Ci0rCQlyZXR1 cm4gLTE7Ci0rCX0KLSsJZGVidWdfZigiUkZDIDgzMDUgcG9zdCBjb25uZWN0IGZvciAlcyIsIHJl dHVybl9mYW0oYWktPmFpX2ZhbWlseSkpOwotKwltb25vdGltZV90dihpbml0aWF0ZSk7Ci0rCUZE X1NFVChzb2NrLCBmZHMpOwotKwkqbmZkcyA9IE1BWElNVU0oKm5mZHMsIHNvY2sgKyAxKTsKLSsJ cmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStoYXBweV9leWViYWxsc19wcm9jZXNzKGlu dCAqbmZkcywgZmRfc2V0ICpmZHMsCi0rCQkJCSAgIHN0cnVjdCBhZGRyaW5mbyAqZmRfYWlbXSwK LSsJCQkJICAgaW50IHJlYWR5LCBmZF9zZXQgKndmZHMpCi0rewotKwlzb2NrbGVuX3Qgb3B0bGVu OwotKwlpbnQgc29jaywgb3B0dmFsID0gMDsKLSsJY2hhciBudG9wW05JX01BWEhPU1RdLCBzdHJw b3J0W05JX01BWFNFUlZdOwotKwotKwlkZWJ1ZzJfZigiUHJvY2Vzc2luZyBSRkMgODMwNSBjb25u ZWN0aW9ucyIpOwotKwlmb3IgKHNvY2sgPSAqbmZkcyAtIDE7IHJlYWR5ID4gMCAmJiBzb2NrID49 IDA7IHNvY2stLSkgewotKwkJZGVidWcyX2YoIlJGQyA4MzA1OiBQcm9jZXNzaW5nIGZvciAlczog JWQiLCByZXR1cm5fZmFtKGZkX2FpW3NvY2tdLT5haV9mYW1pbHkpLCBzb2NrKTsKLSsJCWlmIChG RF9JU1NFVChzb2NrLCB3ZmRzKSkgewotKwkJCWRlYnVnMl9mKCJSRkMgODMwNTogRkRfSVNTRVQg dHJ1ZSBmb3IgJWQiLCBzb2NrKTsKLSsJCQlyZWFkeS0tOwotKwkJCW9wdGxlbiA9IHNpemVvZihv cHR2YWwpOwotKwkJCWRlYnVnX2YoIlJGQyA4MzA1OiBvcHR2YWwgaXMgJWQgZm9yICVkIiwgb3B0 dmFsLCBzb2NrKTsKLSsJCQlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19FUlJP UiwKLSsJCQkJICAgICAgICZvcHR2YWwsICZvcHRsZW4pIDwgMCkgewotKwkJCQlvcHR2YWwgPSBl cnJubzsKLSsJCQkJZXJyb3IoImdldHNvY2tvcHQgZmFpbGVkOiAlcyIsCi0rCQkJCSAgICAgIHN0 cmVycm9yKGVycm5vKSk7Ci0rCQkJfSBlbHNlIGlmIChvcHR2YWwgIT0gMCkgewotKwkJCQlkZWJ1 Z19mKCJSRkMgODMwNTogQ29weWluZyBkYXRhIGZvciAlZCBvbiAlcyIsIG9wdHZhbCwgcmV0dXJu X2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSk7Ci0rCQkJCW1lbXNldChudG9wLCAwLCBzaXpl b2YobnRvcCkpOwotKwkJCQltZW1zZXQoc3RycG9ydCwgMCwgc2l6ZW9mKHN0cnBvcnQpKTsKLSsJ CQkJaWYgKGdldG5hbWVpbmZvKGZkX2FpW3NvY2tdLT5haV9hZGRyLAotKwkJCQkJCWZkX2FpW3Nv Y2tdLT5haV9hZGRybGVuLAotKwkJCQkJCW50b3AsIHNpemVvZihudG9wKSwKLSsJCQkJCQlzdHJw b3J0LCBzaXplb2Yoc3RycG9ydCksCi0rCQkJCQkJTklfTlVNRVJJQ0hPU1R8TklfTlVNRVJJQ1NF UlYpICE9IDApCi0rCQkJCQllcnJvcigiY29ubmVjdCBmaW5hbGx5IGZhaWxlZDogJXMiLAotKwkJ CQkJICAgICAgc3RyZXJyb3Iob3B0dmFsKSk7Ci0rCQkJCWVsc2UKLSsJCQkJCWVycm9yKCJjb25u ZWN0IHRvIGFkZHJlc3MgJXMgcG9ydCAlcyBmaW5hbGx5OiAlcyIsCi0rCQkJCQkgICAgICBudG9w LCBzdHJwb3J0LCBzdHJlcnJvcihvcHR2YWwpKTsKLSsJCQl9Ci0rCQkJRkRfQ0xSKHNvY2ssIGZk cyk7Ci0rCQkJd2hpbGUgKCpuZmRzID4gMCAmJiAhIEZEX0lTU0VUKCpuZmRzIC0gMSwgZmRzKSkK LSsJCQkJLS0qbmZkczsKLSsJCQlpZiAob3B0dmFsID09IDApIHsKLSsJCQkJZGVidWdfZigiUkZD IDgzMDU6IHVuc2V0dGluZyBub25ibG9jayBmb3IgJXMgb24gJWQiLAotKwkJCQkgICAgcmV0dXJu X2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSwgc29jayk7Ci0rCQkJCXVuc2V0X25vbmJsb2Nr KHNvY2spOwotKwkJCQlyZXR1cm4gc29jazsKLSsJCQl9Ci0rCQkJY2xvc2Uoc29jayk7Ci0rCQkJ ZXJybm8gPSBvcHR2YWw7Ci0rCQl9Ci0rCX0KLSsJcmV0dXJuIC0xOwotK30KLSsKLStpbnQKLSto YXBweV9leWViYWxscyhjb25zdCBjaGFyICogaG9zdCwgc3RydWN0IGFkZHJpbmZvICphaSwKLSsJ CQkgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFkZHIsIGludCAqdGltZW91dF9tcykK LSt7Ci0rCXN0cnVjdCBhZGRyaW5mbyAqZmRfYWlbRkRfU0VUU0laRV07IC8qIDEwMjQgKi8KLSsJ c3RydWN0IHRpbWV2YWwgaW5pdGlhdGVfdHYsIHN0YXJ0X3R2LCBzZWxlY3RfdHYsICp0djsKLSsJ ZmRfc2V0IGZkcywgd2ZkczsKLSsJaW50IHJlcywgb2Vycm5vLCBkaWZmLCBkaWZmMCwgbmZkcyA9 IDAsIHNvY2sgPSAtMTsKLSsKLSsJZGVidWdfZigiU3RhcnRpbmcgUkZDIDgzMDUvSGFwcHkgRXll YmFsbHMgY29ubmVjdGlvbiIpOwotKwotKwlGRF9aRVJPKCZmZHMpOwotKwlpZiAoKnRpbWVvdXRf bXMgPiAwKSAvKiBkZWZhdWx0IHZhbHVlIG9mIG5vIHRpbWVvdXQgLSB1c2UgVENQIGRlZmF1bHQg aW5zdGVhZCAqLwotKwkJbW9ub3RpbWVfdHYoJnN0YXJ0X3R2KTsgLyogbW9ub3RpbWVfdHYgaXMg aW4gbWlzYy5jICovCi0rCi0rCS8qIHJ1biB0aHJvdWdoIHBvdGVudGlhbHMgdW5sZXNzIHdlIGhh dmUgdGltZWQgb3V0ICovCi0rCS8qIHRpbWVvdXRfbXMgYmVpbmcgdGhlIHVzZXIgZGVmaW5lZCBj b25uZWN0aW9uIHRpbWVvdXQgaWYKLSsJICogdGhleSBhcmVuJ3QgdXNpbmcgdGhlIHRjcCB0aW1l b3V0ICovCi0rCXdoaWxlICgoYWkgIT0gTlVMTCB8fCBuZmRzID4gMCkgJiYKLSsJICAgICAgICEg dGltZW91dCgmc3RhcnRfdHYsICp0aW1lb3V0X21zKSkgewotKwkJLyogc2V0IHVwIHRoZSBzb2Nr ZXRzICovCi0rCQlyZXMgPSBoYXBweV9leWViYWxsc19pbml0aWF0ZShob3N0LCBhaSwKLSsJCSAg ICAgdGltZW91dF9tcywgJmluaXRpYXRlX3R2LCAmbmZkcywgJmZkcywgZmRfYWkpOwotKwkJaWYg KHJlcyAhPSAwKQotKwkJCWFpID0gYWktPmFpX25leHQ7Ci0rCQlpZiAocmVzID09IC0xKQotKwkJ CWNvbnRpbnVlOwotKwkJdHYgPSBOVUxMOwotKwotKwkJLyogdGhpcyBpcyBqdXN0IHRvIGRldGVy bWluZSB0aGUgcGF1c2UgYmV0d2VlbgotKwkJICogY2FsbHMgdG8gc2VsZWN0LiAqLwotKyAgCQlp ZiAoYWkgIT0gTlVMTCB8fCAqdGltZW91dF9tcyA+IDApIHsKLSsJCQlkZWJ1ZzJfZiAoIlJGQyA4 MzA1OiBJbiBwYXVzZS4uLiIpOwotKwkJCXR2ID0gJnNlbGVjdF90djsKLSsJCQlpZiAoYWkgIT0g TlVMTCkgewotKwkJCQlkaWZmID0gb3B0aW9ucy5oYXBweV9kZWxheTsKLSsJCQkJbXNfc3VidHJh Y3RfZGlmZigmaW5pdGlhdGVfdHYsICZkaWZmKTsKLSsJCQkJaWYgKCp0aW1lb3V0X21zID4gMCkg ewotKwkJCQkJZGlmZjAgPSAqdGltZW91dF9tczsKLSsJCQkJCW1zX3N1YnRyYWN0X2RpZmYoJnN0 YXJ0X3R2LCAmZGlmZjApOwotKwkJCQkJZGlmZiA9IE1JTklNVU0oZGlmZiwgZGlmZjApOwotKwkJ CQl9Ci0rCQkJfSBlbHNlIHsKLSsJCQkJZGlmZiA9ICp0aW1lb3V0X21zOwotKwkJCQltc19zdWJ0 cmFjdF9kaWZmKCZzdGFydF90diwgJmRpZmYpOwotKwkJCX0KLSsJCQl0di0+dHZfc2VjID0gZGlm ZiAvIDEwMDA7Ci0rCQkJdHYtPnR2X3VzZWMgPSAoZGlmZiAlIDEwMDApICogMTAwMDsKLSsJCX0K LSsKLSsJCS8qIGNyZWF0ZSBhIHdyaXRlYWJsZSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyAqLwot KwkJd2ZkcyA9IGZkczsKLSsJCS8qIHNlbGVjdCB3aWxsIHBhdXNlIGZvciB0aW1lIHR2IGRldGVy bWluZWQgYnkgdGhlIGFib3ZlCi0rCQkgKiB0aW1pbmcgY2FjdWxhdGlvbnMgKi8KLSsJCWRlYnVn Ml9mKCJSRkMgODMwNTogU3RhcnRpbmcgc2VsZWN0Iik7Ci0rCQlyZXMgPSBzZWxlY3QobmZkcywg TlVMTCwgJndmZHMsIE5VTEwsIHR2KTsKLSsJCWRlYnVnMl9mKCJSRkMgODMwNTogTGVhdmluZyBz ZWxlY3QiKTsKLSsKLSsJCS8qIHByZXNlcnZlIGFueSBlcnJvcnMgKi8KLSsJCW9lcnJubyA9IGVy cm5vOwotKwkJaWYgKHJlcyA8IDApIHsKLSsJCQllcnJvcigic2VsZWN0IGZhaWxlZDogJXMiLCBz dHJlcnJvcihlcnJubykpOwotKwkJCWVycm5vID0gb2Vycm5vOwotKwkJCWNvbnRpbnVlOwotKwkJ fQotKwkJLyogc3RhcnQgcHJvY2Vzc2luZyB0aGUgc29ja2V0cyAqLwotKwkJZGVidWcyX2YgKCJS RkMgODMwNTogUHJvY2Vzc2luZyBoYXBweSBleWViYWxscyBmZHMiKTsKLSsJCXNvY2sgPSBoYXBw eV9leWViYWxsc19wcm9jZXNzKCZuZmRzLCAmZmRzLCBmZF9haSwKLSsJCQkJCQkJICByZXMsICZ3 ZmRzKTsKLSsJCWlmIChzb2NrID49IDApIHsKLSsJCQlkZWJ1Z19mICgiUkZDIDgzMDUgLyBIYXBw eSBFeWViYWxscyBjb25uZWN0ZWQiKTsKLSsJCQkvKiB3ZSBoYXZlIGEgY29ubmVjdGlvbiAqLwot KwkJCW1lbWNweShob3N0YWRkciwgZmRfYWlbc29ja10tPmFpX2FkZHIsCi0rCQkJICAgICAgIGZk X2FpW3NvY2tdLT5haV9hZGRybGVuKTsKLSsJCQlicmVhazsKLSsJCX0KLSsJCWRlYnVnX2YoIlJG QyA4MzA1OiBSZXN0YXJ0aW5nIHdoaWxlIGxvb3AuIik7Ci0rCX0KLSsJb2Vycm5vID0gZXJybm87 Ci0rCS8qIGNsb3NlIG90aGVyIGNvbm5lY3Rpb24gYXR0ZW1wdHMvc29ja2V0cyAqLwotKwlkZWJ1 ZzJfZigiUkZDIDgzMDU6IE5GRFMgaXMgJWQiLCBuZmRzKTsKLSsJd2hpbGUgKG5mZHMtLSA+IDAp IHsKLSsJCWRlYnVnMl9mKCJSRkMgODMwNTogUnVubmluZyBGRF9JU1NFVCBvbiAlZCIsIG5mZHMp OwotKwkJaWYgKEZEX0lTU0VUKG5mZHMsICZmZHMpKQotKwkJCWNsb3NlKG5mZHMpOwotKwl9Ci0r CS8qIHdlIHRpbWVkIG91dCB3aXRoIG5vIHZhbGlkIGNvbm5lY3Rpb25zICovCi0rCWlmICh0aW1l b3V0KCZzdGFydF90diwgKnRpbWVvdXRfbXMpKQotKwkJZXJybm8gPSBFVElNRURPVVQ7Ci0rCWVs c2UKLSsJCWVycm5vID0gb2Vycm5vOwotKwlyZXR1cm4gc29jazsKLSt9Ci1kaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9oYXBweWV5ZWJhbGxzLmggb3BlbnNzaC0xMC4zcDEvaGFwcHlleWVi YWxscy5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9oYXBweWV5ZWJhbGxzLmgJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9oYXBweWV5ZWJh bGxzLmgJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjQ1NDMzMzggKzAyMDAKLUBAIC0wLDAgKzEsMjMg QEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAyNSBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2Yg Q2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCi0rICoKLSsgKiAgQXV0aG9yOiBDaHJpcyBSYXBp ZXIgPHJhcGllckBwc2MuZWR1PgotKyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSsgKiB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgotKyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VU Ci0rICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZIG9yCi0rICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rICoKLSsgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRo aXMgbGlicmFyeTsKLSsgKiBpZiBub3QsIHNlZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5z ZXMvTUlULgotKyAqCi0rICovCi0rLyoKLSsgKiBSRkMgODMwNSBIYXBweSBFeWViYWxscyBWZXJz aW9uIDI6IEJldHRlciBDb25uZWN0aXZpdHkgVXNpbmcgQ29uY3VycmVuY3kKLSsgKgotKyAqLwot KwotK2ludCBoYXBweV9leWViYWxscyhjb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqLAot KwkJICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKiwgaW50ICopOwotZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvSFBOLVJFQURNRSBvcGVuc3NoLTEwLjNwMS9IUE4tUkVBRE1FCi0tLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9IUE4tUkVBRE1FCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvSFBOLVJFQURNRQkyMDI2LTA3LTAyIDAwOjI3 OjI5LjcyNDYyMjU0NyArMDIwMAotQEAgLTAsMCArMSwyMDAgQEAKLStOb3RlczoKLSsKLStGSVBT IE1vZGUgYW5kIFBhcmFsbGVsIENpcGhlcnMgaW4gMTguNy4xCi0rVXNpbmcgSFBOLVNTSCBpbiBv cGVyYXRpbmcgc3lzdGVtcyB3b3JraW5nIGluIEZJUFMgbW9kZSAoZS5nLiBSSEVMIHdpdGgKLStG SVBTIGVuYWJsZWQpIHByZWNsdWRlIHRoZSB1c2Ugb2YgcGFyYWxsZWwgY2lwaGVycy4gVGhpcyBp cyBiZWNhdXNlCi0rdGhlIHBhcmFsbGVsIEFFUy1DVFIgaW1wbGVtZW50YXRpb24gaXMgbm90IEZJ UFMgY2VydGlmaWVkIGFuZCB3aWxsIGNhdXNlIEZJUFMKLSt0byBleGl0IHdpdGggYW4gZXJyb3Ig d2hlbiBsb2FkZWQuIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJhbGxlbCBDaGFDaGEyMCBjaXBoZXIK LSt0aGUgYWxnb3JpdGhtIGl0c2VsZiBoYXMgbm90IGJlZW4gRklQUyBjZXJ0aWZpZWQgYW5kIG5v IGltcGxlbWVudGF0aW9uIG9mCi0rQ2hhQ2hhMjAgc2hvdWxkIGJlIGFsbG93ZWQgaW4gRklQUyBt b2RlLiBXZSBzdWdnZXN0IHRoZSB1c2Ugb2YgdGhlIEFFUy1HQ00KLStjaXBoZXIgd2hlbiBvcGVy YXRpbmcgdW5kZXIgRklQUyBtb2RlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLiAKLSsKLStIYXBw eSBFeWViYWxscyBTdXBwb3J0IGluIDE4LjcuMSAKLStIYXBweSBFeWViYWxscyAoUkZDIDgzMDUp IGlzIGZvciB1c2Ugb24gZHVhbCBzdGFjayBzeXN0ZW1zIG1lYW5pbmcgdGhhdCB0aGV5IGhhdmUg Ym90aCAKLStJUHY0IGFuZCBJUHY2IFRDUCBzdGFja3MuIFdoZW4gZW5hYmxlZCB0aGlzIG9wdGlv biB3aWxsIHRyeSB0byBjb25uZWN0IHRvIHRoZQotK3RhcmdldCBvdmVyIGJvdGggSVB2NCBhbmQg SVB2NiB3aXRoIHByZWZlcmVuY2UgZ2l2ZW4gdG8gSVB2Ni4gVGhlIGZpcnN0IGNvbm5lY3Rpb24g Ci0rdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IHdpbGwgYmUgdXNlZC4gQW55IG91dHN0YW5k aW5nIGNvbm5lY3Rpb24gYXR0ZW1wdHMgd2lsbAotK2JlIGNsb3NlZC4gQXMgb2YgdmVyc2lvbiAx OC43LjEgdGhpcyBvcHRpb24gc2hvdWxkIGJlIGNvbnNpZGVyZWQgc29tZXdoYXQgZXhwZXJpbWVu dGFsLgotKwotK3VzYWdlOgotKy1vSGFwcHlFeWVzPVtZZXN8Tm9dIHdpbGwgZW5hYmxlIEhhcHB5 IEV5ZWJhbGxzLiBUaGUgZGVmYXVsdCBpcyBuby4gCi0rLW9IYXBweURlbGF5PVtOXSB3aGVyZSBO IGlzIGEgcG9zaXRpdmUgaW50ZWdlciBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzLgotKyAgICAg ICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgMjUwbXMgaXMgc3VnZ2VzdGVkIGJ5IFJG QyA4MzA1LgotKwotK01QVENQIFN1cHBvcnQgaW4gMTguNy4wOgotK011bHRpcGF0aCBUQ1AgaXMg bm93IGF2YWlsYWJsZSBhcyBhIHJ1bnRpbWUgb3B0aW9uIGZvciBIUE4tU1NILiBNUFRDUAotK2lz IGF2YWlsYWJsZSBvbmx5IG9uIExpbnV4IGFuZCBNYWMgT1NYIG9wZXJhdGluZyBzeXN0ZW1zLiBV c2luZyBNUFRDUCBvbiBhIHN5c3RlbSB0aGF0Ci0rZG9lc24ndCBzdXBwb3J0IGl0IHdpbGwgcmVz dWx0IGluIGEgbm90aWNlIGFuZCBmYWlsdXJlLiBUaGUgdXNlIGNhc2VzIGZvciBNUFRDUCBpbmNs dWRlCi0rc2VhbWxlc3MgaGFuZG92ZXJzIHdoZW4gY2hhbmdpbmcgbmV0d29ya3MgYW5kIGFnZ3Jl Z2F0aW5nIG11bHRpcGxlIGludGVyZmFjZXMgdG8gaW1wcm92ZQotK2F2YWlsYWJsZSBiYW5kd2lk dGguIEFzIG9mIDE4LjcuMCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBzb21ld2hh dCBleHBlcmltZW50YWwuCi0rCi0rVXNhZ2U6Ci0rLW9Vc2VNUFRDUD1bWWVzfE5vXSB3aWxsIGVu YWJsZSBNUFRDUC4gVGhlIGRlZmF1bHQgaXMgbm8uCi0rCi0rTGlicmVTU0wgU3VwcG9ydDoKLStD aGFuZ2VzIGluIExpYnJlU1NMIHZlcnNpb24gMy41IGFuZCAzLjYgcHJldmVudCB0aGUgdXNlIG9m IHRoZSB0aHJlYWRlZCBBRVMgQ1RSIGNpcGhlci4KLStJbiB0aG9zZSBjYXNlcyBIUE5TU0ggd2ls bCBmYWxsYmFjayB0byB0aGUgc2VyaWFsIHZlcnNpb24gb2YgdGhlIEFFUyBDVFIgY2lwaGVyLiBB IHdhcm5pbmcKLStpcyBwcmludGVkIHRvIHN0ZGVyci4KLSsKLStBdXRvbWF0aWMgUG9ydCBGYWxs YmFjayAoaW4gdmVyc2lvbiAxN3YzKQotK1RoZSBocG5zc2ggY2xpZW50IG5vdyB1c2VzIFRDUCBw b3J0IDIyMjIgdG8gY29ubmVjdCBhdXRvbWF0aWNhbGx5IGFzIHRoaXMgaXMgdGhlCi0rZGVmYXVs dCBocG5zc2hkIHBvcnQuIEhvd2V2ZXIsIHdlIHVuZGVyc3RhbmQgdGhhdCBtYW55IHVzZXJzIHdp bGwgYmUgZW5kIHVwIGNvbm5lY3RpbmcKLStzdGFuZGFyZCBTU0ggc2VydmVycyBvbiBwb3J0IDIy LiBUbyBtYWtlIHRoZSBlYXNpZXIgZm9yIHVzZXJzIHRoZSBjbGllbnQgd2lsbCBmYWxsIGJhY2sg dG8KLStwb3J0IDIyIGluIHRoZSBldmVudCB0aGF0IHRoZXJlIGlzIG5vIGhwbnNzaCBzZXJ2ZXIg cnVubmluZyBvbiBwb3J0IDIyMjIuIFRoZSBiZWhhdmlvdXIgY2FuCi0rYmUgbW9kaWZlZCBhcyBm b2xsb3dzOgotKy1vRmFsbGJhY2s9W3llc3xub10gd2lsbCBlbmFibGUgb3IgZGlzYWJsZSBwb3J0 IGZhbGxiYWNrLiBEZWZhdWx0IGlzIHllcy4KLSstb0ZhbGxiYWNrUG9ydD1bTl0gd2hlcmUgTiBp cyB0aGUgcG9ydCBudW1iZXIgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgZmFsbCBiYWNrLgotKyAg ICBEZWZhdWx0IGlzIDIyLgotKwotK1RDUF9JTkZPIE1ldHJpY3MKLStUaGlzIGZlYXR1cmVzIGFs bG93cyB0aGUgY2xpZW50IHRvIHJlcXVlc3QgdGNwIG5ldHdvcmtpbmcgaW5mb3JtYXRpb24gZnJv bSB0aGUKLStUQ1BfSU5GTyBzdHJ1Y3QuIFRoaXMgaW5jbHVkZXMgZGF0YSBvbiByZXRyYW5zbWl0 cywgcm91bmQgdHJpcCB0aW1lLCBsb3N0IHBhY2tldHMsCi0rZGF0YSB0cmFuc2ZlcnJlZCwgYW5k IHRoZSBsaWtlLiBUaGUgbWV0cmljcyBhcmUgcG9sbGVkIHBlcmlvZGljYWxseSB0aHJvdWdoIHRo ZQotK2xpZmUgb2YgdGhlIGNvbm5lY3Rpb24uIEJ5IGRlZmF1bHQgdGhpcyBpcyBldmVyeSA1IHNl Y29uZHMgYnV0IHVzZXJzIGNhbiBwaWNrIGRpZmZlcmVudAotK3BvbGxpbmcgcGVyaW9kcy4gVGhl IHJlc3VsdGluZyBkYXRhIGlzIHN0b3JlZCBpbiB0d28gZGlzdGluY3QgZmlsZXM7IG9uZSBmb3Ig bG9jYWwKLSttZXRyaWNzIGFuZCBvbmUgZm9yIHJlbW90ZSBtZXRyaWNzLiBSZW1vdGUgbWV0cmlj cyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlIHJlbW90ZQotK3N1cHBvcnRzIHRoaXMgZmVhdHVy ZS4gVGhpcyBmZWF0dXJlIHdpbGwgKm5vdCogZGlhZ25vc2UgYSBwb29ybHkgcGVyZm9ybWluZyBj b25uZWN0aW9uCi0rYnV0IG1heSBwcm92aWRlIGluc2lnaHQgaW50byB3aGF0IGlzIGhhcHBlbmlu ZyBkdXJpbmcgdGhlIGNvbm5lY3Rpb24uCi0rCi0rVXNhZ2U6Ci0rLW9NZXRyaWNzPVt5ZXN8bm9d IHdpbGwgZW5hYmxlIG1ldHJpY3MgcG9sbGluZy4gRGVmYXVsdDogTm8uCi0rLW9NZXRyaWNzSW50 ZXJ2YWw9W05dIHdoZXJlIE4gaXMgdGhlIHBvbGxpbmcgcGVyaW9kIGluIHNlY29uZHMuIERlZmF1 bHQ6IDUgc2Vjb25kcy4KLSstb01ldHJpY3NQYXRoPVsvZmlsZXBhdGgvZmlsZW5hbWVdIGlzIHRo ZSBuYW1lIG9mIHRoZSBmaWxlIHdoZXJlIHRoZSByZW1vdGUgYW5kCi0rICAgIGxvY2FsIGRhdGEg d2lsbCBiZSBzdG9yZWQuIERlZmF1bHQ6IC4vc3NoX3N0YWNrX21ldHJpY3MuW2xvY2FsfHJlbW90 ZV0uCi0rICAgIEFueSBvdGhlciBvcHRpb24gY2hvc2VuIGJ5IHRoZSB1c2VyIHdpbGwgaGF2ZSBh IC5sb2NhbCBvciAucmVtb3RlIHN1ZmZpeCBhcHBlbmRlZCB0byBpdC4KLSsKLStUaGUgbnVtYmVy IG9mIGluc3RydW1lbnRzIHBvbGxlZCBieSB0aGlzIGZlYXR1cmVzIGlzIGRlcGVuZGVudCBvbiB0 aGUga2VybmVsIG9mIHRoZSBob3N0LgotK1RoaXMgbWVhbnMgdGhhdCBhIHJlbW90ZSBob3N0IHdp dGggYW4gb2xkZXIga2VybmVsIG1heSByZXBvcnQgZmV3ZXIgaW5zdHJ1bWVudHMgdGhhbiBhIGNs aWVudAotK2hvc3QgcnVubmluZyBhIGN1cnJlbnQga2VybmVsIG9yIHZpY2UgdmVyc2EuIElmIHRo ZXJlIGlzIGEgZGlzY3JlcGVuY3kgaW4gdGhlIG51bWJlciBvZiBpbnN0cnVtZW50cwotK2luIHRo ZSBzc2hfc3RhY2tfbWV0cmljcy5sb2NhbCBhbmQgLnJlbW90ZSBmaWxlIHRoaXMgaXMgdGhlIG1v c3QgbGlrZWx5IHJlYXNvbi4KLSsKLStBZGRpdGlvbmFsbHksIGRldGVybWluaW5nIHdoaWNoIGZp bGUgcmVwcmVzZW50cyBzZW5kZXIgc2lkZSB2ZXJzdXMgcmVjZWl2ZXIgc2lkZSBpcyBkZXBlbmRl bnQKLStvbiB0aGUgbmF0dXJlIG9mIHRoZSBjb25uZWN0aW9uLiBUaGVyZm9yZSwgaXQncyB1cCB0 byB0aGUgdXNlciB0byBtYWtlIHRoYXQgZGV0ZXJtaW5hdGlvbi4KLSsKLStMaW51eCBOb3RlOiBD dXJyZW50bHkgdGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBMaW51eCBrZXJuZWwgdmVyc2lvbnMg My43IGFuZCBncmVhdGVyLiBOZXdlciBrZXJuZWxzCi0rbWF5IGhhdmUgbW9yZSBpbnN0cnVtZW50 cyBhdmFpbGFibGUgdG8gcG9sbCB0aGFuIG9sZGVyIGtlcm5lbHMuCi0rCi0rRnJlZUJTRCBOb3Rl OiBUaGlzIGlzIHN1cHBvcnRlZCBvbiBSZWxlYXNlIDYgYW5kIGhpZ2hlci4gSG93ZXZlciwgRnJl ZUJTRCBoYXMgZmV3ZXIgYXZhaWxhYmxlCi0raW5zdHJ1bWVudHMgdGhhbiBuZXcgTGludXgga2Vy bmVscy4KLSsKLStNdWx0aXBsZXhpbmcgTm90ZTogVGhlIG1ldHJpY3MgYXJlIHJlcG9ydGVkIGZy b20gdGhlIFRDUCBzb2NrZXQgd2hpY2ggbWVhbnMgdGhhdCBnYXRoZXJpbmcKLSttZXRyaWNzIGZy b20gbXVsdGlwbGV4ZWQgc2Vzc2lvbnMgd2lsbCByZXBvcnQgb24gdGhlIGFjdGl2aXR5IG9mIGFs bCBzZXNzaW9ucyBvbiB0aGF0IHNvY2tldC4KLStUaGlzIHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBs ZXNzIGNsZWFyIHJlc3VsdHMgYW5kLCBhcyBzdWNoLCB3ZSBzdWdnZXN0IG9ubHkgZ2F0aGVyaW5n IG1ldHJpY3MKLStmcm9tIG5vbi1tdWx0aXBsZXhlZCBzZXNzaW9uLgotKwotK0hQTlNDUCB3aXRo IFJlc3VtZSBmdW5jdGlvbmFsaXR5Ci0rVGhpcyBmZWF0dXJlIGFsbG93cyBocG5zY3AgdG8gcmVz dW1lIGZhaWxlZCB0cmFuc2ZlcnMuIEluIHRoZSBldmVudCBvZiBhIGZhaWxlZCB0cmFuc2Zlcgot K2lzc3VlcyB0aGUgc2FtZSBzY3AgY29tbWFuZCB3aXRoIHRoZSAnLVInIG9wdGlvbi4gRm9yIGV4 YW1wbGUgLSBpZiB5b3UgaXNzdWVkOgotKydocG5zY3AgbXlodWdlZmlsZSBtZUBob3N0On4nCi0r YW5kIGl0IGRpZXMgaGFsZndheSB0aHJvdWdoIHRoZSB0cmFuc2ZlciBpc3N1aW5nCi0rJ2hwbnNj cCAtWiBteWh1Z2VmaWxlIG1lQGhvc3Q6ficKLSt3aWxsIHJlc3VtZSB0aGUgdHJhbnNmZXIgYXQg dGhlIHBvaW50IHdoZXJlIGl0IGxlZnQgb2ZmLgotKwotK1RoaXMgaXMgaW1wbGVtZW50ZWQgYnkg aGF2aW5nIHRoZSBzb3VyY2UgaG9zdCBzZW5kIGEgaGFzaCAoYmxha2UyYjUxMikgb2YgdGhlIGZp bGUgdG8gdGhlCi0rdGFyZ2V0IGhvc3QuIFRoZSB0YXJnZXQgaG9zdCB0aGVuIGNvbXB1dGVzIGl0 J3Mgb3duIGhhc2ggb2YgdGhlIHRhcmdldCBmaWxlLiBJZiB0aGUgaGFzaGVzIG1hdGNoCi0rdGhl biB0aGUgZmlsZSBpcyBza2lwcGVkIGFzIHRoaXMgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCB0cmFu c2Zlci4gSG93ZXZlciwgaWYgdGhlIGhhc2hlcyBkbyBub3QKLSttYXRjaCB0aGVuIHRoZSB0YXJn ZXQgc2VuZHMgdGhlIHNvdXJjZSBpdHMgaGFzaCBhbG9uZyB3aXRoIHRoZSBzaXplIG9mIHRoZSBm aWxlLiBUaGUgc291cmNlIHRoZW4KLStjb21wdXRlcyB0aGUgaGFzaCBvZiB0aGUgZmlsZSAqdXAg dG8qIHRoZSBzaXplIG9mIHRoZSB0YXJnZXQgZmlsZS4gSWYgdGhvc2UgaGFzaGVzIG1hdGNoIHRo ZW4KLSt0aGUgc291cmNlIG9ubHkgc2VuZCB0aGUgbmVjZXNzYXJ5IGJ5dGVzIHRvIGNvbXBsZXRl IHRoZSB0cmFuc2Zlci4gSWYgdGhlIGhhc2hlcyBkbyBub3QgbWF0Y2ggdGhlbgotK3RoZSBlbnRp cmUgZmlsZSBpcyByZXNlbnQuIElmIHRoZSB0YXJnZXQgZmlsZSBpcyBsYXJnZXIgdGhlbiB0aGUg c291cmNlIGZpbGUgdGhlbiB0aGUgZW50aXJlCi0rc291cmNlIGZpbGUgaXMgc2VudCBhbmQgYW55 IGV4aXN0aW5nIHRhcmdldCBmaWxlIGlzIG92ZXJ3cml0dGVuLgotKwotK01VTFRJLVRIUkVBREVE IEFFUyBDSVBIRVI6Ci0rVGhlIEFFUyBjaXBoZXIgaW4gQ1RSIG1vZGUgaGFzIGJlZW4gbXVsdGl0 aHJlYWRlZCAoTVRSLUFFUy1DVFIpLiBUaGlzIHdpbGwgYWxsb3cgc3NoIGluc3RhbGxhdGlvbnMK LStvbiBob3N0cyB3aXRoIG11bHRpcGxlIGNvcmVzIHRvIHVzZSBtb3JlIHRoYW4gb25lIHByb2Nl c3NpbmcgY29yZSBkdXJpbmcgZW5jcnlwdGlvbi4KLStUZXN0cyBoYXZlIHNob3cgc2lnbmlmaWNh bnQgdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBpbmNyZWFzZXMgd2hlbiB1c2luZyBNVFItQUVTLUNU UiB1cAotK3RvIGFuZCBpbmNsdWRpbmcgYSBmdWxsIGdpZ2FiaXQgcGVyIHNlY29uZCBvbiBxdWFk IGNvcmUgc3lzdGVtcy4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvCi0rYWNoaWV2ZSBmdWxsIGxp bmUgcmF0ZSBvbiBkdWFsIGNvcmUgc3lzdGVtcyBidXQgT1MgYW5kIGRhdGEgbWFuYWdlbWVudCBv dmVyaGVhZCBtYWtlcyB0aGlzCi0rbW9yZSBkaWZmaWN1bHQgdG8gYWNoaWV2ZS4gVGhlIGNpcGhl ciBzdHJlYW0gZnJvbSBNVFItQUVTLUNUUiBpcyBlbnRpcmVseSBjb21wYXRpYmxlIHdpdGggc2lu Z2xlCi0rdGhyZWFkIEFFUy1DVFIgKFNULUFFUy1DVFIpIGltcGxlbWVudGF0aW9ucyBhbmQgc2hv dWxkIGJlIDEwMCUgYmFja3dhcmQgY29tcGF0aWJsZS4gT3B0aW1hbAotK3BlcmZvcm1hbmNlIHJl cXVpcmVzIHRoZSBNVFItQUVTLUNUUiBtb2RlIGJlIGVuYWJsZWQgb24gYm90aCBlbmRzIG9mIHRo ZSBjb25uZWN0aW9uLgotK1RoZSBNVFItQUVTLUNUUiByZXBsYWNlcyBTVC1BRVMtQ1RSIGFuZCBp cyB1c2VkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IHdpdGggdGhlIHNhbWUKLStub21lbmNsYXR1 cmUuCi0rVXNhZ2UgZXhhbXBsZXM6Ci0rCQlzc2ggLWNhZXMxMjgtY3RyIHlvdUBob3N0LmNvbQot KwkJc2NwIC1vQ2lwaGVyPWFlczI1Ni1jdHIgZmlsZSB5b3VAaG9zdC5jb206fi9maWxlCi0rCi0r TVVMVEktVEhSRUFERUQgQ2hhQ2hhMjAtUG9seTEzMDUgQ0lQSEVSOgotK1RoZSBkZWZhdWx0IGNp cGhlciB1c2VkIGJ5IEhQTi1TU0ggaXMgbm93IGEgdGhyZWFkZWQgaW1wbGVtZW50YXRpb24gb2Yg dGhlCi0rQ2hhQ2hhMjAtUG9seTEzMDUgY2lwaGVyLiBJbiB0ZXN0cyB0aGlzIGNpcGhlciByZXN1 bHRzIGluIGFuIGFwcHJveGltYXRlbHkgOTAlIGdhaW4gaW4KLSt0aHJvdWdocHV0IHBlcmZvcm1h bmNlIGluIGNvbXBhcmlzb24gdG8gdGhlIHNlcmlhbCBpbXBsZW1lbnRhdGlvbiBmb3VuZCBpbiBP cGVuU1NILgotK1RoaXMgY2lwaGVyIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBhbGwga25vd24g ZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIG9mIENoYUNoYTIwLVBvbHkxMzA1LgotKwotK0ludGVy bmFsbHkgdGhpcyBjaXBoZXIgaXMgcmVmZXJyZWQgdG8gYXMgY2hhY2hhMjAtcG9seTEzMDUtbXRA aHBuc3NoLm9yZyAoQ0MyMC1NVCkKLStzaW1pbGFyIHRvIGhvdyB0aGUgT3BlblNTSCBpbXBsZW1l bnRhdGlvbiBpcyBrbm93biBhcyBjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbQotKyhDQzIw LVMgKGZvciBzZXJpYWwpKS4gTm8gY2hhbmdlcyBhcmUgcmVxdWlyZWQgb24gdGhlIHBhcnQgb2Yg dGhlIHVzZXIgdG8gbWFrZSB1c2Ugb2YgQ0MyMC1NVC4KLStIb3dldmVyLCBpZiB0aGUgdXNlcnMg ZG9lc24ndCB3YW50IHRvIG1ha2UgdXNlIG9mIHRoaXMgY2lwaGVyIHRoZXkgY2FuIGV4cGxpY2l0 bHkgbG9hZCBDQzIwLVMgdXNpbmcKLSsnLWNjaGFjaDIwLXBvbHkxMzA1QG9wZW5zc2guY29tYCBv biB0aGUgY29tbWFuZCBsaW5lLgotKwotK05PTkUgQ0lQSEVSOgotK1RvIHVzZSB0aGUgTk9ORSBv cHRpb24geW91IG11c3QgaGF2ZSB0aGUgTm9uZUVuYWJsZWQgc3dpdGNoIHNldCBvbiB0aGUgc2Vy dmVyIGFuZAotK3lvdSAqbXVzdCogaGF2ZSAqYm90aCogTm9uZUVuYWJsZWQgYW5kIE5vbmVTd2l0 Y2ggc2V0IHRvIHllcyBvbiB0aGUgY2xpZW50LiBUaGUgTk9ORQotK2ZlYXR1cmUgd29ya3Mgd2l0 aCBBTEwgc3NoIHN1YnN5c3RlbXMgKGFzIGZhciBhcyB3ZSBjYW4gdGVsbCkgKkFTIExPTkcgQVMq IGEgdHR5IGlzIG5vdAotK3NwYXduZWQuIElmIGEgdXNlciB1c2VzIHRoZSAtVCBzd2l0Y2ggdG8g cHJldmVudCBhIHR0eSBiZWluZyBjcmVhdGVkIHRoZSBOT05FIGNpcGhlciB3aWxsCi0rYmUgZGlz YWJsZWQuCi0rCi0rVGhlIHBlcmZvcm1hbmNlIGluY3JlYXNlIHdpbGwgb25seSBiZSBhcyBnb29k IGFzIHRoZSBuZXR3b3JrIGFuZCBUQ1Agc3RhY2sgdHVuaW5nCi0rb24gdGhlIHJlY2lldmVyIHNp ZGUgb2YgdGhlIGNvbm5lY3Rpb24gYWxsb3dzLiBBcyBhIHJ1bGUgb2YgdGh1bWIgYSB1c2VyIHdp bGwgbmVlZAotK2F0IGxlYXN0IDEwTWIvcyBjb25uZWN0aW9uIHdpdGggYSAxMDBtcyBSVFQgdG8g c2VlIGEgZG91Ymxpbmcgb2YgcGVyZm9ybWFuY2UuIFRoZQotK0hQTi1TU0ggaG9tZSBwYWdlIGRl c2NyaWJlcyB0aGlzIGluIGdyZWF0ZXIgZGV0YWlsLgotKwotK2h0dHA6Ly93d3cucHNjLmVkdS9u ZXR3b3JraW5nL3Byb2plY3RzL2hwbi1zc2gKLSsKLStOT05FIE1BQzoKLStTdGFydGluZyB3aXRo IEhQTiAxNXYxIHVzZXJzIHdpbGwgaGF2ZSB0aGUgb3B0aW9uIHRvIGRpc2FibGUgSE1BQyAobWVz c2FnZQotK2F1dGhlbnRpY2F0aW9uIGNpcGhlcnMpIHdoZW4gdXNpbmcgdGhlIE5PTkUgY2lwaGVy LiBZb3UgbXVzdCBlbmFibGUgdGhlIGZvbGxvd2luZzoKLStOb25lRW5hYmxlZCwgTm9uZVN3aXRj aCwgYW5kIE5vbmVNYWNFbmFibGVkLiBJZiBhbGwgdGhyZWUgYXJlIG5vdCBlbmFibGVkIHRoZSBO b25lIE1BQwotK3dpbGwgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZC4gSW4gdGVzdHMgdGhlIHVz ZSBvZiB0aGUgTm9uZSBNQUMgaW1wcm92ZWQgdGhyb3VwdXQgYnkKLSttb3JlIHRoYW4gMzAlLgot KwotK2V4OiBzY3AgLW9Ob25lU3dpdGNoPXllcyAtb05vbmVFbmFibGVkPXllcyAtb05vbmVNYWNF bmFibGVkPXllcyBmaWxlIGhvc3Q6fgotKwotK0hQTiBTcGVjaWZpYyBDb25maWd1cmF0aW9uIG9w dGlvbnMKLSsKLStUY3BSY3ZCdWZQb2xsPVt5ZXMvbm9dIGNsaWVudC9zZXJ2ZXIKLSsgICAgICBF bmFibGUgb2YgZGlzYWJsZSB0aGUgcG9sbGluZyBvZiB0aGUgdGNwIHJlY2VpdmUgYnVmZmVyIHRo cm91Z2ggdGhlIGxpZmUKLStvZiB0aGUgY29ubmVjdGlvbi4gWW91IHdvdWxkIHdhbnQgdG8gbWFr ZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZAotK2ZvciBzeXN0ZW1zIG1ha2luZyB1 c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQrLCAyLjYsIE1TIFZpc3RhKQot K2RlZmF1bHQgaXMgeWVzLgotKwotK05vbmVFbmFibGVkPVt5ZXMvbm9dIGNsaWVudC9zZXJ2ZXIK LSsgICAgICBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIGNpcGhlci4gQ2Fy ZSBtdXN0IGFsd2F5cyBiZSB1c2VkCi0rd2hlbiBlbmFibGluZyB0aGlzIGFzIGl0IHdpbGwgYWxs b3cgdXNlcnMgdG8gc2VuZCBkYXRhIGluIHRoZSBjbGVhci4gSG93ZXZlciwKLStpdCBpcyBpbXBv cnRhbnQgdG8gbm90ZSB0aGF0IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIHJlbWFpbnMgZW5j cnlwdGVkCi0rZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBTZXQgdG8gbm8gYnkgZGVm YXVsdC4KLSsKLStOb25lTWFjRW5hYmxlZD1beWVzL25vXSBjbGllbnQvc2VydmVyCi0rICAgICAg RW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBNQUMuIFdoZW4gdGhpcyBpcyBl bmFibGVkIHNzaAotK3dpbGwgKm5vdCogcHJvdmlkZSBkYXRhIGludGVncml0eSBvZiBhbnkgZGF0 YSBiZWluZyB0cmFuc21pdHRlZCBiZXR3ZWVuIGhvc3RzLiBVc2UKLSt3aXRoIGNhdXRpb24gYXMg aXQsIHVubGlrZSBqdXN0IHVzaW5nIE5vbmVFbmFibGVkLCBkb2Vzbid0IHByb3ZpZGUgZGF0YSBp bnRlZ3JpdHkgYW5kCi0rcHJvdGVjdGlvbiBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFj a3MuIEFzIHdpdGggTm9uZUVuYWJsZWQgYWxsIGF1dGhlbnRpY2F0aW9uCi0rcmVtYWlucyBlbmNy eXB0ZWQgYW5kIGludGVncml0eSBpcyBlbnN1cmVkLiBEZWZhdWx0IGlzIG5vLgotKwotK05vbmVT d2l0Y2g9W3llcy9ub10gY2xpZW50Ci0rICAgICBTd2l0Y2ggdGhlIGVuY3J5cHRpb24gY2lwaGVy IGJlaW5nIHVzZWQgdG8gdGhlIE5vbmUgY2lwaGVyIGFmdGVyCi0rYXV0aGVudGljYXRpb24gdGFr ZXMgcGxhY2UuIE5vbmVFbmFibGVkIG11c3QgYmUgZW5hYmxlZCBvbiBib3RoIHRoZSBjbGllbnQK LSthbmQgc2VydmVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uIFdoZW4gdGhlIGNvbm5lY3Rpb24g c3dpdGNoZXMgdG8gdGhlIE5PTkUKLStjaXBoZXIgYSB3YXJuaW5nIGlzIHNlbnQgdG8gU1RERVJS LiBUaGUgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwgZmFpbCB3aXRoIGFuCi0rZXJyb3IgaWYgYSBj bGllbnQgcmVxdWVzdHMgYSBOb25lU3dpdGNoIGZyb20gdGhlIHNlcnZlciB0aGF0IGRvZXMgbm90 IGV4cGxpY2l0bHkKLStoYXZlIE5vbmVFbmFibGVkIHNldCB0byB5ZXMuIE5vdGU6IFRoZSBOT05F IGNpcGhlciBjYW5ub3QgYmUgdXNlZCBpbgotK2ludGVyYWN0aXZlIChzaGVsbCkgc2Vzc2lvbnMg YW5kIGl0IHdpbGwgZmFpbCBzaWxlbnRseS4gU2V0IHRvIG5vIGJ5IGRlZmF1bHQuCi0rCi0rSFBO RGlzYWJsZWQ9W3llcy9ub10gY2xpZW50L3NlcnZlcgotKyAgICAgSW4gc29tZSBzaXR1YXRpb25z LCBzdWNoIGFzIHRyYW5zZmVycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywgdGhlIGltcGFjdAot K29mIHRoZSBIUE4gY29kZSBwcm9kdWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBwZXJmb3JtYW5jZS4g SW4gdGhlc2UgY2FzZXMgaXQgaXMKLStoZWxwZnVsIHRvIGRpc2FibGUgdGhlIEhQTiBmdW5jdGlv bmFsaXR5LiBCeSBkZWZhdWx0IEhQTkRpc2FibGVkIGlzIHNldCB0byBuby4KLSsKLStDcmVkaXRz OiBUaGlzIHBhdGNoIHdhcyBjb25jZWl2ZWQsIGRlc2lnbmVkLCBhbmQgbGVkIGJ5IENocmlzIFJh cGllciAocmFwaWVyQHBzYy5lZHUpCi0rICAgICAgICAgVGhlIG1ham9yaXR5IG9mIHRoZSBhY3R1 YWwgY29kaW5nIGZvciB2ZXJzaW9ucyB1cCB0byBIUE4xMnYxIHdhcyBwZXJmb3JtZWQKLSsgICAg ICAgICBieSBNaWNoYWVsIFN0ZXZlbnMgKG1zdGV2ZW5zQGFuZHJldy5jbXUuZWR1KS4gVGhlIE1U LUFFUy1DVFIgY2lwaGVyIHdhcwotKyAgICAgICAgIGltcGxlbWVudGVkIGJ5IEJlbiBCZW5uZXQg KGJlbkBwc2MuZWR1KSBhbmQgaW1wcm92ZWQgYnkgTWlrZSBUYXNvdGEKLSsgICAgICAgICAodGFz b3RhQGdtYWlsLmNvbSkgYW4gTlNGIFJFVSBncmFudCByZWNpcGllbnQgZm9yIDIwMTMuCi0rCSBB bGxhbiBKdWRlIHByb3ZpZGVkIHRoZSBjb2RlIGZvciB0aGUgTm9uZU1hYyBhbmQgYnVmZmVyIG5v cm1hbGl6YXRpb24uCi0rICAgICAgICAgVGhpcyB3b3JrIHdhcyBmaW5hbmNlZCwgaW4gcGFydCwg YnkgQ2lzY28gU3lzdGVtLCBJbmMuLCB0aGUgTmF0aW9uYWwKLSsgICAgICAgICBMaWJyYXJ5IG9m IE1lZGljaW5lLCBhbmQgdGhlIE5hdGlvbmFsIFNjaWVuY2UgRm91bmRhdGlvbi4KLSsKLStTcG9u c29yczogVGhhbmtzIHRvIE5pa2xhcyBIYW1idWNoZW4gZm9yIGJlaW5nIHRoZSBmaXJzdCBzcG9u c29yIG9mIEhQTi1TU0gKLSsJICB2aWEgZ2l0aHViJ3Mgc3BvbnNvciBwcm9ncmFtIQotKwotKwot K0VkaXRlZDogU2VwdGVtYmVyIDE5LCAyMDI1Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9IUE5TU0hJbnN0YWxsYXRpb24udHh0IG9wZW5zc2gtMTAuM3AxL0hQTlNTSEluc3RhbGxhdGlv bi50eHQKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL0hQTlNTSEluc3RhbGxhdGlvbi50eHQJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9IUE5T U0hJbnN0YWxsYXRpb24udHh0CTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI0NzI0ODQ0ICswMjAwCi1A QCAtMCwwICsxLDM1NCBAQAotK++7v0hQTi1TU0ggSW5zdGFsbGF0aW9uCi0rCi0rVGhlIHByb2Nl c3Mgb2YgaW5zdGFsbGluZyBIUE4tU1NIIGZyb20gc291cmNlIGlzIGEgcmVsYXRpdmVseSBwYWlu bGVzcyBwcm9jZXNzCi0rYnV0IGRvZXMgaGF2ZSBzb21lIG51YW5jZXMuIFRoaXMgZG9jdW1lbnQg d2lsbCBnbyB0aHJvdWdoIHRoZSBwcm9jZXNzIHN0ZXAgYnkKLStzdGVwIHRvIGhlbHAgeW91IGdl dCB0aGUgbW9zdCBmcm9tIHlvdXIgaW5zdGFsbGF0aW9uLiBJZiB5b3UgZmluZCBhbnkgZXJyb3Jz Ci0rcGxlYXNlIGNvbnRhY3QgdXMgYXQgaHBuc3NoQHBzYy5lZHUuCi0rCi0rCi0rU3RlcCAxOiBH ZXQgdGhlIHNvdXJjZSBjb2RlLgotKwotK1RoZSBvZmZpY2lhbCByZXBvc2l0b3J5IGZvciBIUE4t U1NIIGlzIGZvdW5kIGF0Ci0raHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaC4gR2V0 IGEgY29weSB3aXRoCi0rImdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vcmFwaWVyMS9ocG4t c3No4oCdLgotKwotKwotK1N0ZXAgMjogSW5zdGFsbCBkZXBlbmRlbmNpZXMuCi0rCi0rV2hhdCB5 b3UgbmVlZCB0byBpbnN0YWxsIGlzIGRlcGVuZGVudCBvbiB5b3VyIGRpc3RyaWJ1dGlvbiBidXQg d2lsbCBpbmNsdWRlOgotKyogT3BlblNTTCBkZXZlbG9wbWVudCBwYWNrYWdlCi0rICAgKiBEZWJp YW46IGxpYnNzbC1kZXYKLSsgICAqIEZlZG9yYTogb3BlbnNzbC1kZXZlbAotKyogQWx0ZXJuYXRp dmVseSB5b3UgY2FuIHVzZSBMSWJyZVNTTAotKyAgICogSG93ZXZlciwgaW4gdGhpcyBjYXNlIHdl IHN1Z2dlc3QgY29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nIGxpYnJlc3NsIG1hbnVhbGx5IGFzCi0r ICAgICB0aGVyZSBhcmUgZmV3IG1haW50YWluZWQgbGludXggcGFja2FnZXMgZm9yIExpYnJlU1NM LgotKyAgICogQWxzbywgTGlicmVTU0wgdjMuNSBhbmQgdjMuNiBkbyBub3Qgc3VwcG9ydCB0aGUg dGhyZWFkZWQgQUVTLUNUUiBjaXBoZXIuCi0rICAgICBJZiB0aGF04oCZcyBpbXBvcnRhbnQgdG8g eW91IHRoZW4geW91IHNob3VsZCB1c2UgT3BlblNTTC4KLSsqIFogY29tcHJlc3Npb24gbGlicmFy eQotKyAgICogRGViaWFuOiB6bGliMWctZGV2Ci0rICAgKiBGZWRvcmE6IHpsaWItZGV2ZWwKLSsq IEF1dG9jb25mCi0rKiBBdXRvbWFrZQotKwotKwotK1N0ZXAgMzogSW5zdGFsbCBvcHRpb25hbCBk ZXBlbmRlbmNpZXMuCi0rCi0rVGhpcyBvcHRpb25hbCBsaWJyYXJpZXMgd2lsbCBleHRlbmQgdGhl IGZ1bmN0aW9uYWxpdHkgb2YgSFBOLVNTSCB0byBhbGxvdyB0aGUgdXNlIG9mIFBBTQotK2F1dGhl bnRpY2F0aW9uLCBLZXJiZXJvcywgZ3JhcGhpY2FsIHBhc3N3b3JkIHRvb2xzLCBldGMuCi0rKiBQ QU0KLSsqIEtlcmJlcm9zCi0rKiBHVEsKLSsKLSsKLStTdGVwIDQ6IEJ1aWxkIHRoZSBjb25maWd1 cmUgZmlsZQotKwotK2dlbmVyYXRlIC4vY29uZmlndXJlIHdpdGgg4oCcYXV0b3JlY29uZiAtZiAt aeKAnQotKwotKwotK1N0ZXAgNTogQ29uZmlndXJhdGlvbgotKwotK0NvbmZpZ3VyZSB0aGUgaW5z dGFsbGF0aW9uLiBZb3UgY2FuIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZG8g dGhpcyBieQotK2lzc3Vpbmcg4oCcLi9jb25maWd1cmUgLS1oZWxw4oCdLiBIb3dldmVyLCBjb21t b25seSB5b3Ugd2lsbCB3YW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24KLSts b2NhdGlvbiBvZiB0aGUgYmluYXJpZXMuIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCDigJwtLXByZWZp eD0vW2Rlc2lyZWRfcGF0aF3igJ0uIEZvciBleGFtcGxlLAotK2lmIHlvdSB3YW50IHRoZSBiaW5h cmllcyBpbnN0YWxsZWQgaW50byAvdXNyL2JpbiBhcyBvcHBvc2VkIHRvIHRoZSBkZWZhdWx0IG9m Ci0rL3Vzci9sb2NhbC9iaW4geW914oCZZCB1c2Ug4oCcLi9jb25maWd1cmUgLS1wcmVmaXg9L3Vz cuKAnS4gT3RoZXIgY29tbW9uIG9wdGlvbnMgd291bGQgYmUgdG8KLStpbmNvcnBvcmF0ZSBwYW0s IGtlcmJlcm9zLCBhbHRlcm5hdGl2ZSBTU0wgbGlicmFyaWVzLCBhbmQgc28gZm9ydGguIEhvd2V2 ZXIsIGZvciBtb3N0IHVzZXJzCi0rZWl0aGVyIG5vIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBv cHRpb25zIG9yIG1vZGlmeWluZyB0aGUgcHJlZml4IHdpbGwgc3VmZmljZS4KLSsKLSsKLStTdGVw IDY6IE1ha2UKLSsKLStNYWtlIHRoZSBhcHBsaWNhdGlvbiB3aXRoIOKAnG1ha2UgLWpbbnVtIGNv cmVzXeKAnS4gU28gaWYgeW91IGhhdmUgYW4gOCBjb3JlIHN5c3RlbQotK3lvdeKAmWQgdXNlIOKA nG1ha2UgLWo44oCdCi0rCi0rCi0rU3RlcCA3OiBTZXQgdXAgdGhlIGhwbnNzaGQgdXNlci4gCi0r Ci0rVGhpcyB1c2VyIGlzIHBhcnQgb2YgdGhlIHByaXZpbGVnZSBzZXBhcmF0aW9uIHJvdXRpbmVz IHVzZWQgaW4gdGhlIAotK3ByZS1hdXRoZW50aWNhdGlvbiBzYW5kYm94LiBJIHN1Z2dlc3QgdXNp bmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOiAKLSsKLStzdWRvIHVzZXJhZGQgLS1zeXN0ZW0gLS1z aGVsbCAvdXNyL3NiaW4vbm9sb2dpbiAtLWNvbW1lbnQ9IlByaXZpbGVnZSBzZXBhcmF0ZWQgSFBO U1NIIFVzZXIiIFwgCi0rLS1ob21lPS9ydW4vaHBuc3NoZCBocG5zc2hkCi0rCi0rQWx0ZXJuYXRp dmVseSwgeW91IGNhbiB1c2UgdmlwdyB0byBhZGQgdGhlIHVzZXIgbWFudWFsbHkuIAotKwotKwot K1N0ZXAgODogSW5zdGFsbGF0aW9uCi0rCi0rQWZ0ZXIgSFBOLVNTSCBzdWNjZXNzZnVsbHkgYnVp bGRzLCBpbnN0YWxsIGl0IHdpdGgg4oCcc3VkbyBtYWtlIGluc3RhbGzigJ0uIFRoaXMgd2lsbCBp bnN0YWxsIHRoZQotK2JpbmFyaWVzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZ2VuZXJhdGUg dGhlIHVuaXF1ZSBob3N0IGtleXMgdXNlZC4gQXQgdGhpcyBwb2ludCB5b3UgY2FuCi0rbWFrZSBj aGFuZ2VzIHRvIHRoZSBzc2ggY2xpZW50IGFuZCBzZXJ2ZXIgZGVmYXVsdCBjb25maWd1cmF0aW9u LiBUaGVzZSBmaWxlcyBhcmUKLStmb3VuZCwgZ2VuZXJhbGx5LCBpbiAvZXRjL2hwbnNzaC9zc2hf Y29uZmlnIGFuZCBzc2hkX2NvbmZpZyByZXNwZWN0aXZlbHkuIFlvdSBtYXkgd2FudCB0bwotK2No YW5nZSB0aGUgZGVmYXVsdCBwb3J0IGZyb20gMjIyMiB0byBzb21lIG90aGVyIHZhbHVlLiBZb3Ug bWF5IGFsc28gd2FudCB0byBlbmFibGUgdGhlCi0rTm9uZUNpcGhlciBhbmQgTm9uZU1hYyBvcHRp b25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiB1c2Ug4oCcbWFuIGhwbnNzaGRfY29uZmln4oCdIGFu ZAotK+KAnG1hbiBocG5zc2hfY29uZmln4oCdLiBOb3RlOiBUaGUgaHBuc3NoIGNsaWVudCBleHBl Y3RzIHRoZSBzZXJ2ZXIgdG8gYmUgb24gcG9ydCAyMjIyIGJ1dCB3aWxsCi0rZmFsbGJhY2sgdG8g MjIgaWYgaXTigJlzIG5vdCBmb3VuZCB0aGVyZS4gU28gaWYgeW91IGRvIGNoYW5nZSB0aGUgZGVm YXVsdCBwb3J0IHlvdeKAmWxsIG5lZWQgdG8KLSttYWtlIHN1cmUgdGhlIGNsaWVudHMgcG9pbnQg YXQgdGhlIGNvcnJlY3QgcG9ydC4KLSsKLStTdGVwIDk6IEZpbmlzaGluZyB1cC4KLSsKLStBdCB0 aGlzIHBvaW50IHlvdSBjYW4gc3RhcnQgaHBuc3NoZCBtYW51YWxseSBieSBydW5uaW5nIOKAnHN1 ZG8gL3Vzci9zYmluL2hwbnNzaGTigJ0KLStvciB3aGF0ZXZlciB0aGUgZnVsbCBwYXRoIHRvIHRo ZSBocG5zc2hkIGJpbmFyeSBtaWdodCBiZS4gSG93ZXZlciwgdGhpcyB3b27igJl0Ci0rcmVzdGFy dCBhdXRvbWF0aWNhbGx5IG9uIHJlYm9vdC4gVG8gZG8gdGhpcyB5b3XigJlsbCBuZWVkIHRvIGlu c3RhbGwgYW4gYXBwcm9wcmlhdGUKLStzeXN0ZW1kIGNvbmZpZ3VyYXRpb24gZmlsZS4gSWYgdGhh dCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIHlvdSB0aGVuIGZvbGxvd2luZyBzdGVwcyBtYXkg YmUKLStvZiBoZWxwLiBPdGhlcndpc2UsIHlvdSBhcmUgZG9uZS4gRW5qb3khCi0rCi0rCi0rU3Rl cCAxMDogSW5zdGFsbGluZyBhIHN5c3RlbWQgc3RhcnR1cCBmaWxlLgotKwotK1RoZSBjb3JyZWN0 IHN5c3RlbWQgc3RhcnR1cCBmaWxlIGRlcGVuZHMgb24gdGhlIGRpc3RyaWJ1dGlvbiB5b3UgYXJl IHVzaW5nLiBGb3Igc3lzdGVtCi0rdXNpbmcgc3lzdGVtZCAoeW91IHN0YXJ0IGEgc2VydmljZSB3 aXRoIHN5c3RlbWN0bCkgY3JlYXRlIGEgZmlsZSBhdCAvbGliL3N5c3RlbWQvc3lzdGVtL2hwbnNz aGQuc2VydmljZQotK3dpdGggdGhlIGZvbGxvd2luZyBjb250ZW50cyBOQjogeW91IG1heSBuZWVk IHRvIHVwZGF0ZSB0aGUgcGF0aHMgdG8gbWF0Y2ggeW91ciBpbnN0YWxsYXRpb246Ci0rCi0rW1Vu aXRdCi0rRGVzY3JpcHRpb249SFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcgotK0RvY3Vt ZW50YXRpb249bWFuOmhwbnNzaGQoOCkgbWFuOmhwbnNzaGRfY29uZmlnKDUpCi0rQWZ0ZXI9bmV0 d29yay50YXJnZXQgYXVkaXRkLnNlcnZpY2UKLStDb25kaXRpb25QYXRoRXhpc3RzPSEvZXRjL2hw bnNzaC9zc2hkX25vdF90b19iZV9ydW4KLSsKLStbU2VydmljZV0KLStFbnZpcm9ubWVudEZpbGU9 LS9ldGMvZGVmYXVsdC9ocG5zc2gKLStFeGVjU3RhcnRQcmU9L3Vzci9zYmluL2hwbnNzaGQgLXQK LStFeGVjU3RhcnQ9L3Vzci9zYmluL2hwbnNzaGQgLUQgJFNTSERfT1BUUwotK0V4ZWNSZWxvYWQ9 L3Vzci9zYmluL2hwbnNzaGQgLXQKLStFeGVjUmVsb2FkPS9iaW4va2lsbCAtSFVQICRNQUlOUElE Ci0rS2lsbE1vZGU9cHJvY2VzcwotK1Jlc3RhcnQ9b24tZmFpbHVyZQotK1Jlc3RhcnRQcmV2ZW50 RXhpdFN0YXR1cz0yNTUKLStUeXBlPW5vdGlmeQotK1J1bnRpbWVEaXJlY3Rvcnk9aHBuc3NoZAot K1J1bnRpbWVEaXJlY3RvcnlNb2RlPTA3NTUKLSsKLStbSW5zdGFsbF0KLStXYW50ZWRCeT1tdWx0 aS11c2VyLnRhcmdldAotK0FsaWFzPWhwbnNzaGQuc2VydmljZQotKwotK0FsdGVybmF0aXZlbHks IHRoZSAuL2NvbmZpZ3VyZSBjb21tYW5kIHdpbGwgZ2VuZXJhdGUgYSBocG5zc2hkLnNlcnZpY2Ug ZmlsZSBmcm9tCi0raHBuc3NoZC5zZXJ2aWNlLmluLiBZb3UgY2FuIHVzZSB0aGlzIGZpbGUgYnkg Y29weWluZyBpdCB0bwotKy9saWJzeXN0ZW1kL3N5c3RlbS9ocG5zc2hkLnNlcnZpY2UgaW5zdGVh ZCBvZiBjb3B5aW5nIHRoZSBhYm92ZSB0ZXh0LgotKwotK1RoZW4gY3JlYXRlIHRoZSBkZWZhdWx0 cyBmaWxlIGF0IC9ldGMvZGVmYXVsdC9ocG5zc2hkIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50 OgotKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3Igb3BlbnNzaC1zZXJ2ZXIuCi0rIyBPcHRpb25zIHRv IHBhc3MgdG8gc3NoZAotK1NTSERfT1BUUz0KLSsKLStFbnRlciBhbnkgcnVudGltZSBvcHRpb25z IHlvdSB3YW50IG9uIHRoZSBTU0hEX09QVFMgbGluZS4gSWYgeW91IGNhbuKAmXQgdGhpbmsgb2Yg YW55LCBzaW1wbHkKLStsZWF2ZSBpdCBibGFuay4gQSBzYW1wbGUgL2V0Yy9kZWZhdWxzL2hwbnNz aCBmaWxlIG1heSBiZSBmb3VuZCBpbiBkZWZhdWx0cy5ocG5zc2hkLgotKwotK1lvdSBtdXN0IHRo ZW4gcmVsb2FkIHRoZSBzeXN0ZW1kIHNlcnZpY2UgdG8gbWFrZSBpdCBhd2FyZSBvZiB0aGlzIG5l dyBzZXJ2aWNlIHdpdGgKLStzdWRvIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCi0rCi0rSWYgeW91 IGFyZSB1c2luZyBhbiBpbml0LmQgKHlvdSBzdGFydCBhIHNlcnZpY2Ugd2l0aCDigJhzeXN0ZW3i gJkpIHRoZW4geW91IG5lZWQgdG8gaW5zdGFsbCBhbgotK2luaXQuZC4gQ3JlYXRlIHRoZSBmaWxl IC9ldGMvaW5pdC5kL2hwbnNzaCBhbmQgY29weSB0aGUgZm9sbG93aW5nIGludG8gaXQuIE5COiBU aGUgZm9sbG93aW5nIGlzCi0rZm9yIHdoZXJlIGhwbnNzaGQgaXMgZm91bmQgYXQgL3Vzci9zYmlu L2hwbnNzaGQuIElmIGl0IGlzIG5vdCBpbiB0aGF0IGxvY2F0aW9uIHlvdeKAmWxsIG5lZWQgdG8K LSt1cGRhdGUgdGhlIHBhdGhzLgotKwotK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgdXNlIHRoZSBo cG5zc2hkLmluaXQgZmlsZSBjcmVhdGVkIGR1cmluZyBjb25maWd1cmUuIFRoaXMgd2lsbCBiZQot K3ByZXBvcHVsYXRlZCB3aXRoIHRoZSBjb3JyZWN0IHBhdGhzIGJ5IHRoZSBjb25maWd1cmUgc2Ny aXB0LgotKwotKyMhIC9iaW4vc2gKLSsKLSsjIyMgQkVHSU4gSU5JVCBJTkZPCi0rIyBQcm92aWRl czogICAgICAgICAgICAgICAgaHBuc3NoZAotKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICAkcmVt b3RlX2ZzICRzeXNsb2cKLSsjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICRzeXNs b2cKLSsjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1Ci0rIyBEZWZhdWx0LVN0b3A6Ci0r IyBTaG9ydC1EZXNjcmlwdGlvbjogICAgICAgIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciB3 aXRoIEhQTgotKyMjIyBFTkQgSU5JVCBJTkZPCi0rCi0rc2V0IC1lCi0rCi0rIyAvZXRjL2luaXQu ZC9ocG5zc2g6IHN0YXJ0IGFuZCBzdG9wIHRoZSBPcGVuQlNEICJzZWN1cmUgc2hlbGwodG0pIiBk YWVtb24KLSsKLSt0ZXN0IC14IC91c3Ivc2Jpbi9ocG5zc2hkIHx8IGV4aXQgMAotKyggL3Vzci9z YmluL2hwbnNzaGQgLVw/IDI+JjEgfCBncmVwIC1xIE9wZW5TU0ggKSAyPi9kZXYvbnVsbCB8fCBl eGl0IDAKLSsKLSt1bWFzayAwMjIKLSsKLStpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9ocG5zc2g7 IHRoZW4KLSsgICAgLiAvZXRjL2RlZmF1bHQvaHBuc3NoCi0rZmkKLSsKLSsuIC9saWIvbHNiL2lu aXQtZnVuY3Rpb25zCi0rCi0rCi0raWYgWyAtbiAiJDIiIF07IHRoZW4KLSsgICAgU1NIRF9PUFRT PSIkU1NIRF9PUFRTICQyIgotK2ZpCi0rCi0rIyBBcmUgd2UgcnVubmluZyBmcm9tIGluaXQ/Ci0r cnVuX2J5X2luaXQoKSB7Ci0rICAgIChbICIkcHJldmlvdXMiIF0gJiYgWyAiJHJ1bmxldmVsIiBd KSB8fCBbICIkcnVubGV2ZWwiID0gUyBdCi0rfQotKwotK2NoZWNrX2Zvcl9ub19zdGFydCgpIHsK LSsgICAgIyBmb3JnZXQgaXQgaWYgd2UncmUgdHJ5aW5nIHRvIHN0YXJ0LCBhbmQgL2V0Yy9ocG5z c2gvc3NoZF9ub3RfdG9fYmVfcnVuIGV4aXN0cwotKyAgICBpZiBbIC1lIC9ldGMvaHBuc3NoL3Nz aGRfbm90X3RvX2JlX3J1biBdOyB0aGVuCi0rICAgICAgICBpZiBbICIkMSIgPSBsb2dfZW5kX21z ZyBdOyB0aGVuCi0rICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCi0rICAgICAgICBm aQotKyAgICAgICAgaWYgISBydW5fYnlfaW5pdDsgdGhlbgotKyAgICAgICAgICAgIGxvZ19hY3Rp b25fbXNnICJIUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIG5vdCBpbiB1c2UgKC9ldGMv aHBuc3NoL3NzaGRfbm90X3RvX2JlX3J1bikiIHx8IHRydWUKLSsgICAgICAgIGZpCi0rICAgICAg ICBleGl0IDAKLSsgICAgZmkKLSt9Ci0rCi0rY2hlY2tfZGV2X251bGwoKSB7Ci0rICAgIGlmIFsg ISAtYyAvZGV2L251bGwgXTsgdGhlbgotKyAgICAgICAgaWYgWyAiJDEiID0gbG9nX2VuZF9tc2cg XTsgdGhlbgotKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQotKyAgICAgICAgZmkK LSsgICAgICAgIGlmICEgcnVuX2J5X2luaXQ7IHRoZW4KLSsgICAgICAgICAgICBsb2dfYWN0aW9u X21zZyAiL2Rldi9udWxsIGlzIG5vdCBhIGNoYXJhY3RlciBkZXZpY2UhIiB8fCB0cnVlCi0rICAg ICAgICBmaQotKyAgICAgICAgZXhpdCAxCi0rICAgIGZpCi0rfQotKwotK2NoZWNrX3ByaXZzZXBf ZGlyKCkgewotKyAgICAjIENyZWF0ZSB0aGUgUHJpdlNlcCBlbXB0eSBkaXIgaWYgbmVjZXNzYXJ5 Ci0rICAgIGlmIFsgISAtZCAvcnVuL2hwbnNzaGQgXTsgdGhlbgotKyAgICAgICAgbWtkaXIgL3J1 bi9ocG5zc2hkCi0rICAgICAgICBjaG1vZCAwNzU1IC9ydW4vaHBuc3NoZAotKyAgICBmaQotK30K LSsKLStjaGVja19jb25maWcoKSB7Ci0rICAgIGlmIFsgISAtZSAvZXRjL2hwbnNzaC9zc2hkX25v dF90b19iZV9ydW4gXTsgdGhlbgotKyAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2 Ci0rICAgICAgICAvdXNyL3NiaW4vaHBuc3NoZCAkU1NIRF9PUFRTIC10IHx8IGV4aXQgMQotKyAg ICBmaQotK30KLSsKLStleHBvcnQgUEFUSD0iJHtQQVRIOiskUEFUSDp9L3Vzci9zYmluOi9zYmlu IgotKwotK2Nhc2UgIiQxIiBpbgotKyAgc3RhcnQpCi0rICAgICAgICBjaGVja19wcml2c2VwX2Rp cgotKyAgICAgICAgY2hlY2tfZm9yX25vX3N0YXJ0Ci0rICAgICAgICBjaGVja19kZXZfbnVsbAot KyAgICAgICAgbG9nX2RhZW1vbl9tc2cgIlN0YXJ0aW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVs bCBzZXJ2ZXIiICJocG5zc2hkIiB8fCB0cnVlCi0rICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJs ZT1TQzIwODYKLSsgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAt LW9rbm9kbyAtLWNodWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vz ci9zYmluL2hwbnNzaGQgLS0gJFNTSERfT1BUUzsgdGhlbgotKyAgICAgICAgICAgIGxvZ19lbmRf bXNnIDAgfHwgdHJ1ZQotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEg fHwgdHJ1ZQotKyAgICAgICAgZmkKLSsgICAgICAgIDs7Ci0rICBzdG9wKQotKyAgICAgICAgbG9n X2RhZW1vbl9tc2cgIlN0b3BwaW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIiICJo cG5zc2hkIiB8fCB0cnVlCi0rICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1x dWlldCAtLW9rbm9kbyAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmlu L2hwbnNzaGQ7IHRoZW4KLSsgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKLSsgICAg ICAgIGVsc2UKLSsgICAgICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUKLSsgICAgICAgIGZp Ci0rICAgICAgICA7OwotKwotKwotKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKLSsgICAgICAgIGNo ZWNrX2Zvcl9ub19zdGFydAotKyAgICAgICAgY2hlY2tfY29uZmlnCi0rICAgICAgICBsb2dfZGFl bW9uX21zZyAiUmVsb2FkaW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIncyBjb25m aWd1cmF0aW9uIiAiaHBuc3NoZCIgfHwgdHJ1ZQotKyAgICAgICAgaWYgc3RhcnQtc3RvcC1kYWVt b24gLS1zdG9wIC0tc2lnbmFsIDEgLS1xdWlldCAtLW9rbm9kbyAtLXBpZGZpbGUgL3J1bi9ocG5z c2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hwbnNzaGQ7IHRoZW4KLSsgICAgICAgICAgICBsb2df ZW5kX21zZyAwIHx8IHRydWUKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgICBsb2dfZW5kX21z ZyAxIHx8IHRydWUKLSsgICAgICAgIGZpCi0rICAgICAgICA7OwotKwotKwotKyAgcmVzdGFydCkK LSsgICAgICAgIGNoZWNrX3ByaXZzZXBfZGlyCi0rICAgICAgICBjaGVja19jb25maWcKLSsgICAg ICAgIGxvZ19kYWVtb25fbXNnICJSZXN0YXJ0aW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBz ZXJ2ZXIiICJocG5zc2hkIiB8fCB0cnVlCi0rICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0 b3AgLS1xdWlldCAtLW9rbm9kbyAtLXJldHJ5IDMwIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlk IC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZAotKyAgICAgICAgY2hlY2tfZm9yX25vX3N0YXJ0IGxv Z19lbmRfbXNnCi0rICAgICAgICBjaGVja19kZXZfbnVsbCBsb2dfZW5kX21zZwotKyAgICAgICAg IyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2Ci0rICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1v biAtLXN0YXJ0IC0tcXVpZXQgLS1va25vZG8gLS1jaHVpZCAwOjAgLS1waWRmaWxlIC9ydW4vaHBu c3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkIC0tICRTU0hEX09QVFM7IHRoZW4KLSsg ICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKLSsgICAgICAgIGVsc2UKLSsgICAgICAg ICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUKLSsgICAgICAgIGZpCi0rICAgICAgICA7OwotKwot KwotKyAgdHJ5LXJlc3RhcnQpCi0rICAgICAgICBjaGVja19wcml2c2VwX2RpcgotKyAgICAgICAg Y2hlY2tfY29uZmlnCi0rICAgICAgICBsb2dfZGFlbW9uX21zZyAiUmVzdGFydGluZyBIUE4vT3Bl bkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIiAiaHBuc3NoZCIgfHwgdHJ1ZQotKyAgICAgICAgUkVU PTAKLSsgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMzAg LS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkIHx8IFJF VD0iJD8iCi0rICAgICAgICBjYXNlICRSRVQgaW4KLSsgICAgICAgICAgICAwKQotKyAgICAgICAg ICAgICAgICAjIG9sZCBkYWVtb24gc3RvcHBlZAotKyAgICAgICAgICAgICAgICBjaGVja19mb3Jf bm9fc3RhcnQgbG9nX2VuZF9tc2cKLSsgICAgICAgICAgICAgICAgY2hlY2tfZGV2X251bGwgbG9n X2VuZF9tc2cKLSsgICAgICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2Ci0r ICAgICAgICAgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLW9r bm9kbyAtLWNodWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9z YmluL2hwbnNzaGQgLS0gJFNTSERfT1BUUzsgdGhlbgotKyAgICAgICAgICAgICAgICAgICAgbG9n X2VuZF9tc2cgMCB8fCB0cnVlCi0rICAgICAgICAgICAgICAgIGVsc2UKLSsgICAgICAgICAgICAg ICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQotKyAgICAgICAgICAgICAgICBmaQotKyAgICAg ICAgICAgICAgICA7OwotKyAgICAgICAgICAgIDEpCi0rICAgICAgICAgICAgICAgICMgZGFlbW9u IG5vdCBydW5uaW5nCi0rICAgICAgICAgICAgICAgIGxvZ19wcm9ncmVzc19tc2cgIihub3QgcnVu bmluZykiIHx8IHRydWUKLSsgICAgICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCi0r ICAgICAgICAgICAgICAgIDs7Ci0rICAgICAgICAgICAgKikKLSsgICAgICAgICAgICAgICAgIyBm YWlsZWQgdG8gc3RvcAotKyAgICAgICAgICAgICAgICBsb2dfcHJvZ3Jlc3NfbXNnICIoZmFpbGVk IHRvIHN0b3ApIiB8fCB0cnVlCi0rICAgICAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1 ZQotKyAgICAgICAgICAgICAgICA7OwotKyAgICAgICAgZXNhYwotKyAgICAgICAgOzsKLSsKLSsK LSsgIHN0YXR1cykKLSsgICAgICAgIHN0YXR1c19vZl9wcm9jIC1wIC9ydW4vaHBuc3NoZC5waWQg L3Vzci9zYmluL2hwbnNzaGQgaHBuc3NoZCAmJiBleGl0IDAgfHwgZXhpdCAkPwotKyAgICAgICAg OzsKLSsKLSsKLSsgICopCi0rICAgICAgICBsb2dfYWN0aW9uX21zZyAiVXNhZ2U6IC9ldGMvaW5p dC5kL2hwbnNzaCB7c3RhcnR8c3RvcHxyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR8dHJ5LXJl c3RhcnR8c3RhdHVzfSIgfHwgdHJ1ZQotKyAgICAgICAgZXhpdCAxCi0rZXNhYwotKwotK2V4aXQg MAotKwotKwotK1N0ZXAgMTA6IFdvcmtpbmcgd2l0aCBTRUxpbnV4LgotKwotK0lmIHlvdSBhcmUg dXNpbmcgU0VMaW51eCB5b3XigJlsbCBuZWVkIHRvIHJ1biBhIGZldyBtb3JlIGNvbW1hbmRzIGlu IG9yZGVyIHRvIGdyYW50IGhwbnNzaCB0aGUKLStuZWNlc3NhcnkgZXhjZXB0aW9ucyB0byBvcGVu IHNvY2tldHMsIGZpbGVzLCByZWFkIGtleXMsIGFuZCBzbyBmb3J0aC4gUnVuIHRoZSBmb2xsb3dp bmcgY29tbWFuZHMKLSt0byBhbGxvdyB0aGlzLiBOb3RlLCBJ4oCZbSBub3Qgc3VyZSBldmVyeSBz aW5nbGUgb25lIG9mIHRoZXNlIGlzIG5lZWRlZCBzbyBpZiBzb21lb25lIGtub3dzIGJldHRlcgot K3BsZWFzZSBsZXQgbWUga25vdy4gQWdhaW4sIGRvdWJsZSBjaGVjayB0aGUgcGF0aHMgb2YgdGhl IGZpbGVzIGJlaW5nIHVwZGF0ZWQuCi0rCi0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBz c2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9kc2Ffa2V5Ci0rc2VtYW5hZ2UgZmNvbnRl eHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9yc2Ffa2V5Ci0r c2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hf aG9zdF9lY2RzYV9rZXkKLStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5X3Qg IC9ldGMvaHBuc3NoL3NzaF9ob3N0X2VkMjU1MTlfa2V5Ci0rc2VtYW5hZ2UgZmNvbnRleHQgLWEg LWYgZiAtdCBzc2hkX2tleV90IC9ldGMvaHBuc3NoL3NzaF9ob3N0X2RzYV9rZXkucHViCi0rc2Vt YW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90IC9ldGMvaHBuc3NoL3NzaF9ob3N0 X3JzYV9rZXkucHViCi0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAv ZXRjL2hwbnNzaC9zc2hfaG9zdF9lY2RzYV9rZXkucHViCi0rc2VtYW5hZ2UgZmNvbnRleHQgLWEg LWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9lZDI1NTE5X2tleS5wdWIK LStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfZXhlY190IC91c3Ivc2Jpbi9ocG5z c2hkCi0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleWdlbl9leGVjX3QgL3Vz ci9saWJleGVjL2hwbnNzaC9ocG5zc2hkLWtleWdlbgotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1m IGYgLXQgYmluX3QgL3Vzci9saWJleGVjL2hwbnNzaC9ocG5zZnRwLXNlcnZlcgotK3NlbWFuYWdl IGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoX2V4ZWNfdCAvdXNyL2Jpbi9ocG5zc2gKLStzZW1hbmFn ZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaF9hZ2VudF9leGVjX3QgL3Vzci9iaW4vaHBuc3NoLWFn ZW50Ci0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hfa2V5Z2VuX2V4ZWNfdCAvdXNy L2Jpbi9ocG5zc2gta2V5Z2VuCi0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBldGNfdCAv ZXRjL3BhbS5kL2hwbnNzaGQKLStzZW1hbmFnZSBwb3J0IC1hIC10IHNzaF9wb3J0X3QgLXAgdGNw IDIyMjIKLStyZXN0b3JlY29uIC91c3Ivc2Jpbi9ocG5zc2hkCi0rcmVzdG9yZWNvbiAvZXRjL2hw bnNzaC9zc2gqX2tleQotK3Jlc3RvcmVjb24gL2V0Yy9ocG5zc2gvc3NoKl9rZXlcLnB1YgotK3Jl c3RvcmVjb24gL3Vzci9saWJleGVjL2hwbnNzaC9ocG5zc2hkLWtleWdlbgotK3Jlc3RvcmVjb24g L3Vzci9saWJleGVjL2hwbnNzaC9ocG5zZnRwLXNlcnZlcgotK3Jlc3RvcmVjb24gL3Vzci9iaW4v aHBuc3NoCi0rcmVzdG9yZWNvbiAvdXNyL2Jpbi9ocG5zc2gtYWdlbnQKLStyZXN0b3JlY29uIC91 c3IvYmluL2hwbnNzaC1rZXlnZW4KLStyZXN0b3JlY29uIC9ldGMvcGFtLmQvaHBuc3NoZAotZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcva2V4LmMgb3BlbnNzaC0xMC4zcDEva2V4LmMKLS0t LSBvcGVuc3NoLTEwLjNwMS5vcmlnL2tleC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3 ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEva2V4LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjQ4 NzMxODMgKzAyMDAKLUBAIC02Myw2ICs2Myw3IEBACi0gCi0gI2luY2x1ZGUgInNzaGVyci5oIgot ICNpbmNsdWRlICJzc2hidWYuaCIKLSsjaW5jbHVkZSAiY2Fub2hvc3QuaCIKLSAjaW5jbHVkZSAi ZGlnZXN0LmgiCi0gI2luY2x1ZGUgInhtYWxsb2MuaCIKLSAjaW5jbHVkZSAiYXVkaXQuaCIKLUBA IC03ODEsMTcgKzc4Miw4MyBAQAotIAlmcmVlKGtleCk7Ci0gfQotIAotKy8qCi0rICogVGhpcyBm dW5jdGlvbiBzZWVrcyB0aHJvdWdoIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgYW5kIGNoZWNrcyBm b3IgaW5zdGFuY2VzCi0rICogb2YgdGhlIG11bHRpdGhyZWFkZWQgQ0MyMCBjaXBoZXIuIElmIGZv dW5kLCBpdCB0aGVuIGVuc3VyZXMgdGhhdCB0aGUgc2VyaWFsCi0rICogQ0MyMCBjaXBoZXIgaXMg YWxzbyBpbiB0aGUgbGlzdCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS4KLSsgKi8KLStjaGFyICoK LStwYXRjaF9saXN0KGNoYXIgKiBvcmlnKQotK3sKLSsJY2hhciAqIGFkaiA9IHhzdHJkdXAob3Jp Zyk7Ci0rCWNoYXIgKiBtYXRjaDsKLSsJdV9pbnQgbmV4dDsKLSsKLSsJY29uc3QgY2hhciAqIGNj cHN0ciA9ICJjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSI7Ci0rCWNvbnN0IGNoYXIgKiBj Y3BtdHN0ciA9ICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIjsKLSsKLSsJbWF0Y2gg PSBtYXRjaF9saXN0KGNjcG10c3RyLCBvcmlnLCAmbmV4dCk7Ci0rCWlmIChtYXRjaCAhPSBOVUxM KSB7IC8qIENDMjAtTVQgZm91bmQgaW4gdGhlIGxpc3QgKi8KLSsJCWZyZWUobWF0Y2gpOwotKwkJ bWF0Y2ggPSBtYXRjaF9saXN0KGNjcHN0ciwgb3JpZywgTlVMTCk7Ci0rCQlpZiAobWF0Y2ggPT0g TlVMTCkgeyAvKiBDQzIwLVNlcmlhbCBOT1QgZm91bmQgaW4gdGhlIGxpc3QgKi8KLSsJCQlhZGog PSB4cmVhbGxvY2FycmF5KGFkaiwKLSsJCQkgICAgc3RybGVuKGFkaikgLyogb3JpZ2luYWwgc3Ry aW5nIGxlbmd0aCAqLwotKwkJCSAgICArIDEgLyogZm9yIHRoZSBvcmlnaW5hbCBudWxsLXRlcm1p bmF0b3IgKi8KLSsJCQkgICAgKyBzdHJsZW4oY2Nwc3RyKSAvKiBtYWtlIHJvb20gZm9yIGNjcHN0 ciAqLwotKwkJCSAgICArIDEgLyogbWFrZSByb29tIGZvciB0aGUgY29tbWEgZGVsaW1pdGVyICov Ci0rCQkJICAgICwgc2l6ZW9mKGNoYXIpKTsKLSsJCQkvKgotKwkJCSAqIGFkaltuZXh0XSBwb2lu dHMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgQ0MyMC1NVAotKwkJCSAqIHN0cmluZy4gYWRq W25leHRdIG1pZ2h0IGJlICcsJyBvciAnXDAnIGF0IHRoaXMgcG9pbnQuCi0rCQkJICovCi0rCQkJ YWRqW25leHRdID0gJywnOwotKwkJCS8qIGFkaiArIG5leHQgKyAxIGlzIHRoZSBjaGFyYWN0ZXIg YWZ0ZXIgdGhhdCBjb21tYSAqLwotKwkJCW1lbWNweShhZGogKyBuZXh0ICsgMSwgY2Nwc3RyLCBz dHJsZW4oY2Nwc3RyKSk7Ci0rCQkJLyogcmV3cml0ZSB0aGUgcmVzdCBvZiB0aGUgb3JpZ2luYWwg bGlzdCAqLwotKwkJCW1lbWNweShhZGogKyBuZXh0ICsgMSArIHN0cmxlbihjY3BzdHIpLCBvcmln ICsgbmV4dCwKLSsJCQkgICAgc3RybGVuKG9yaWcgKyBuZXh0KSArIDEpOwotKwkJfSBlbHNlIHsg LyogQ0MyMC1TZXJpYWwgZm91bmQgaW4gdGhlIGxpc3QsIG5vdGhpbmcgdG8gZG8gKi8KLSsJCQlm cmVlKG1hdGNoKTsKLSsJCX0KLSsJfQotKwotKwlyZXR1cm4gYWRqOwotK30KLSsKLSBpbnQKLSBr ZXhfcmVhZHkoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpwcm9wb3NhbFtQUk9QT1NBTF9NQVhdKQot IHsKLS0JaW50IHI7Ci0rCWludCByID0gMDsKLSsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCWNo YXIgKiBvcmlnX2N0b3MgPSBwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXTsKLSsJY2hh ciAqIG9yaWdfc3RvYyA9IHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdOwotKwlwcm9w b3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXSA9Ci0rCSAgICBwYXRjaF9saXN0KHByb3Bvc2Fs W1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdKTsKLSsJcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1Nf U1RPQ10gPQotKwkgICAgcGF0Y2hfbGlzdChwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19TVE9D XSk7Ci0rCi0rCS8qCi0rCSAqIFRPRE86IExpa2VseSBtZW1vcnkgbGVhayBoZXJlLiBUaGUgb3Jp Z2luYWwgY29udGVudHMgb2YKLSsJICogcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RPU10g YXJlIG5vIGxvbmdlciBhY2Nlc3NpYmxlIG9yCi0rCSAqIGZyZWVhYmxlLgotKwkgKi8KLSsjZW5k aWYKLSAKLSAJaWYgKChyID0ga2V4X3Byb3AyYnVmKHNzaC0+a2V4LT5teSwgcHJvcG9zYWwpKSAh PSAwKQotLQkJcmV0dXJuIHI7Ci0rCQlnb3RvIHJlc3RvcmVQcm9wb3NhbDsKLSAJc3NoLT5rZXgt PmZsYWdzID0gS0VYX0lOSVRJQUw7Ci0gCWtleF9yZXNldF9kaXNwYXRjaChzc2gpOwotIAlzc2hf ZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYSU5JVCwgJmtleF9pbnB1dF9rZXhpbml0KTsK LS0JcmV0dXJuIDA7Ci0rIHJlc3RvcmVQcm9wb3NhbDoKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0r CWZyZWUocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RPU10pOwotKwlmcmVlKHByb3Bvc2Fs W1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdKTsKLSsJcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1Nf Q1RPU10gPSBvcmlnX2N0b3M7Ci0rCXByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdID0g b3JpZ19zdG9jOwotKyNlbmRpZgotKwlyZXR1cm4gcjsKLSB9Ci0gCi0gaW50Ci1AQCAtOTgwLDYg KzEwNDcsMTEgQEAKLSAJaW50IG5lbmMsIG5tYWMsIG5jb21wOwotIAl1X2ludCBtb2RlLCBjdG9z LCBuZWVkLCBkaF9uZWVkLCBhdXRobGVuOwotIAlpbnQgciwgZmlyc3Rfa2V4X2ZvbGxvd3M7Ci0r CWludCBhdXRoX2ZsYWcgPSAwOwotKwlpbnQgbG9nX2ZsYWcgPSAwOwotKwotKwlhdXRoX2ZsYWcg PSBwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoc3NoKTsKLSsJZGVidWcoIkFVVEggU1RBVEUg SVMgJWQiLCBhdXRoX2ZsYWcpOwotIAotIAlkZWJ1ZzIoImxvY2FsICVzIEtFWElOSVQgcHJvcG9z YWwiLCBrZXgtPnNlcnZlciA/ICJzZXJ2ZXIiIDogImNsaWVudCIpOwotIAlpZiAoKHIgPSBrZXhf YnVmMnByb3Aoa2V4LT5teSwgTlVMTCwgJm15KSkgIT0gMCkKLUBAIC0xMDU2LDYgKzExMjgsMzEg QEAKLSAJCQlwZWVyW25lbmNdID0gTlVMTDsKLSAJCQlnb3RvIG91dDsKLSAJCX0KLSsjaWZkZWYg V0lUSF9PUEVOU1NMCi0rCQlpZiAoKHN0cmNtcChuZXdrZXlzLT5lbmMubmFtZSwgImNoYWNoYTIw LXBvbHkxMzA1QG9wZW5zc2guY29tIikKLSsJCSAgICA9PSAwKSAmJiAobWF0Y2hfbGlzdCgiY2hh Y2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIsCi0rCQkgICAgbXlbbmVuY10sIE5VTEwpICE9 IE5VTEwpKSB7Ci0rCQkJLyoKLSsJCQkgKiBpZiB3ZSdyZSB1c2luZyB0aGUgc2VyaWFsIENDMjAg Y2lwaGVyIHdoaWxlIHRoZQotKwkJCSAqIG11bHRpdGhyZWFkZWQgaW1wbGVtZW50YXRpb24gaXMg YW4gb3B0aW9uLi4uCi0rCQkJICovCi0rCQkJZnJlZShuZXdrZXlzLT5lbmMubmFtZSk7Ci0rCQkJ bmV3a2V5cy0+ZW5jLmNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKAotKwkJCSAgICAiY2hhY2hhMjAt cG9seTEzMDUtbXRAaHBuc3NoLm9yZyIpOwotKwkJCWlmIChuZXdrZXlzLT5lbmMuY2lwaGVyID09 IE5VTEwpIHsKLSsJCQkJZXJyb3JfZigiJXMgY2lwaGVyIG5vdCBmb3VuZC4iLAotKwkJCQkgICAg ImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmciKTsKLSsJCQkJciA9IFNTSF9FUlJfSU5U RVJOQUxfRVJST1I7Ci0rCQkJCWtleC0+ZmFpbGVkX2Nob2ljZSA9IHBlZXJbbmVuY107Ci0rCQkJ CXBlZXJbbmVuY10gPSBOVUxMOwotKwkJCQlnb3RvIG91dDsKLSsJCQl9IGVsc2UgewotKwkJCQlu ZXdrZXlzLT5lbmMubmFtZSA9IHhzdHJkdXAoCi0rCQkJCSAgICAiY2hhY2hhMjAtcG9seTEzMDUt bXRAaHBuc3NoLm9yZyIpOwotKwkJCX0KLSsJCQkvKiB3ZSBwcm9tb3RlIHRvIHRoZSBtdWx0aXRo cmVhZGVkIGltcGxlbWVudGF0aW9uICovCi0rCQl9Ci0rI2VuZGlmCi0gCQlhdXRobGVuID0gY2lw aGVyX2F1dGhsZW4obmV3a2V5cy0+ZW5jLmNpcGhlcik7Ci0gCQkvKiBpZ25vcmUgbWFjIGZvciBh dXRoZW50aWNhdGVkIGVuY3J5cHRpb24gKi8KLSAJCWlmIChhdXRobGVuID09IDAgJiYKLUBAIC0x MDcxLDExICsxMTY4LDQzIEBACi0gCQkJcGVlcltuY29tcF0gPSBOVUxMOwotIAkJCWdvdG8gb3V0 OwotIAkJfQotKwkJZGVidWcoIlJFUVVFU1RFRCBFTkMuTkFNRSBpcyAnJXMnIiwgbmV3a2V5cy0+ ZW5jLm5hbWUpOwotKwkJZGVidWcoIlJFUVVFU1RFRCBNQUMuTkFNRSBpcyAnJXMnIiwgbmV3a2V5 cy0+bWFjLm5hbWUpOwotKwkJaWYgKHN0cmNtcChuZXdrZXlzLT5lbmMubmFtZSwgIm5vbmUiKSA9 PSAwKSB7Ci0rCQkJaWYgKGF1dGhfZmxhZyA9PSAxKSB7Ci0rCQkJCWRlYnVnKCJOb25lIHJlcXVl c3RlZCBwb3N0IGF1dGhlbnRpY2F0aW9uLiIpOwotKwkJCQlzc2gtPm5vbmUgPSAxOwotKwkJCX0K LSsJCQllbHNlCi0rCQkJCWZhdGFsKCJQcmUtYXV0aGVudGljYXRpb24gbm9uZSBjaXBoZXIgcmVx dWVzdHMgYXJlIG5vdCBhbGxvd2VkLiIpOwotKwotKwkJCWlmIChuZXdrZXlzLT5tYWMubmFtZSAh PSBOVUxMICYmIHN0cmNtcChuZXdrZXlzLT5tYWMubmFtZSwgIm5vbmUiKSA9PSAwKSB7Ci0rCQkJ CWRlYnVnKCJSZXF1ZXN0aW5nOiBOT05FTUFDLiBBdXRoZmxhZyBpcyAlZCIsIGF1dGhfZmxhZyk7 Ci0rCQkJCXNzaC0+bm9uZV9tYWMgPSAxOwotKwkJCX0KLSsJCX0KLSsKLSAJCWRlYnVnKCJrZXg6 ICVzIGNpcGhlcjogJXMgTUFDOiAlcyBjb21wcmVzc2lvbjogJXMiLAotIAkJICAgIGN0b3MgPyAi Y2xpZW50LT5zZXJ2ZXIiIDogInNlcnZlci0+Y2xpZW50IiwKLSAJCSAgICBuZXdrZXlzLT5lbmMu bmFtZSwKLSAJCSAgICBhdXRobGVuID09IDAgPyBuZXdrZXlzLT5tYWMubmFtZSA6ICI8aW1wbGlj aXQ+IiwKLSAJCSAgICBuZXdrZXlzLT5jb21wLm5hbWUpOwotKwkJLyoKLSsJCSAqIGNsaWVudCBz dGFydHMgd2l0aCBjdG9zID0gMCAmJiBsb2cgZmxhZyA9IDAgYW5kIG5vIGxvZy4KLSsJCSAqIDJu ZCBjbGllbnQgcGFzcyBjdG9zID0gMSBhbmQgZmxhZyA9IDEgc28gbm8gbG9nLgotKwkJICogc2Vy dmVyIHN0YXJ0cyB3aXRoIGN0b3MgPSAxICYmIGxvZ19mbGFnID0gMCBzbyBsb2cuCi0rCQkgKiAy bmQgc2V2ZXIgcGFzcyBjdG9zID0gMSAmJiBsb2cgZmxhZyA9IDEgc28gbm8gbG9nLgotKwkJICog LWNqcgotKwkJICovCi0rCQlpZiAoY3RvcyAmJiAhbG9nX2ZsYWcpIHsKLSsJCQlsb2dpdCgiU1NI OiBTZXJ2ZXI7THR5cGU6IEtleDtSZW1vdGU6ICVzLSVkO0VuYzogJXM7TUFDOiAlcztDb21wOiAl cyIsCi0rCQkJICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksCi0rCQkJICAgIHNzaF9yZW1vdGVf cG9ydChzc2gpLAotKwkJCSAgICBuZXdrZXlzLT5lbmMubmFtZSwKLSsJCQkgICAgYXV0aGxlbiA9 PSAwID8gbmV3a2V5cy0+bWFjLm5hbWUgOiAiPGltcGxpY2l0PiIsCi0rCQkJICAgIG5ld2tleXMt PmNvbXAubmFtZSk7Ci0rCQl9Ci0rCQlsb2dfZmxhZyA9IDE7Ci0gCX0KLSAJbmVlZCA9IGRoX25l ZWQgPSAwOwotIAlmb3IgKG1vZGUgPSAwOyBtb2RlIDwgTU9ERV9NQVg7IG1vZGUrKykgewotQEAg LTE0MzUsNyArMTU2NCw3IEBACi0gCWlmICh2ZXJzaW9uX2FkZGVuZHVtICE9IE5VTEwgJiYgKnZl cnNpb25fYWRkZW5kdW0gPT0gJ1wwJykKLSAJCXZlcnNpb25fYWRkZW5kdW0gPSBOVUxMOwotIAlp ZiAoKHIgPSBzc2hidWZfcHV0ZihvdXJfdmVyc2lvbiwgIlNTSC0lZC4lZC0lcyVzJXNcclxuIiwK LS0JICAgIFBST1RPQ09MX01BSk9SXzIsIFBST1RPQ09MX01JTk9SXzIsIFNTSF9WRVJTSU9OLAot KwkgICAgUFJPVE9DT0xfTUFKT1JfMiwgUFJPVE9DT0xfTUlOT1JfMiwgU1NIX1JFTEVBU0UsCi0g CSAgICB2ZXJzaW9uX2FkZGVuZHVtID09IE5VTEwgPyAiIiA6ICIgIiwKLSAJICAgIHZlcnNpb25f YWRkZW5kdW0gPT0gTlVMTCA/ICIiIDogdmVyc2lvbl9hZGRlbmR1bSkpICE9IDApIHsKLSAJCW9l cnJubyA9IGVycm5vOwotQEAgLTE1NzEsOSArMTcwMCwyNCBAQAotIAkJciA9IFNTSF9FUlJfSU5W QUxJRF9GT1JNQVQ7Ci0gCQlnb3RvIG91dDsKLSAJfQotKwotKwkvKiByZXBvcnQgdGhlIHZlcnNp b24gaW5mb3JtYXRpb24gdG8gc3lzbG9nIGlmIHRoaXMgaXMgdGhlIHNlcnZlciAqLwotKyAgICAg ICAgaWYgKHRpbWVvdXRfbXMgPT0gLTEpIHsgLyogb25seSB0aGUgc2VydmVyIHVzZXMgdGhpcyB2 YWx1ZSAqLwotKwkJbG9naXQoIlNTSDogU2VydmVyO0x0eXBlOiBWZXJzaW9uO1JlbW90ZTogJXMt JWQ7UHJvdG9jb2w6ICVkLiVkO0NsaWVudDogJS4xMDBzIiwKLSsJCSAgICAgIHNzaF9yZW1vdGVf aXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpLAotKwkJICAgICAgcmVtb3RlX21ham9y LCByZW1vdGVfbWlub3IsIHJlbW90ZV92ZXJzaW9uKTsKLSsJfQotKwotIAlkZWJ1ZygiUmVtb3Rl IHByb3RvY29sIHZlcnNpb24gJWQuJWQsIHJlbW90ZSBzb2Z0d2FyZSB2ZXJzaW9uICUuMTAwcyIs Ci0gCSAgICByZW1vdGVfbWFqb3IsIHJlbW90ZV9taW5vciwgcmVtb3RlX3ZlcnNpb24pOwotIAlj b21wYXRfYmFubmVyKHNzaCwgcmVtb3RlX3ZlcnNpb24pOwotKwlpZiAoc3NoLT5jb21wYXQgJiBT U0hfSFBOU1NIKQotKwkJZGVidWcoIkhQTiB0byBIUE4gQ29ubmVjdGlvbi4iKTsKLSsJZWxzZQot KwkJZGVidWcoIk5vbi1IUE4gdG8gSFBOIENvbm5lY3Rpb24uIik7Ci0rCi0rCWlmKHNzaC0+Y29t cGF0ICYgU1NIX1JFU1RSSUNUX1dJTkRPVykKLSsJCWRlYnVnICgiV2luZG93IHNpemUgcmVzdHJp Y3RlZC4iKTsKLSAKLSAJbWlzbWF0Y2ggPSAwOwotIAlzd2l0Y2ggKHJlbW90ZV9tYWpvcikgewot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvbG9nLmMgb3BlbnNzaC0xMC4zcDEvbG9nLmMK LS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2xvZy5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTAzMjc1 MzA3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvbG9nLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43 MjUxMjU0ODEgKzAyMDAKLUBAIC00Nyw2ICs0NywxMSBAQAotICNpbmNsdWRlIDxzdHJpbmcuaD4K LSAjaW5jbHVkZSA8c3lzbG9nLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxl cnJuby5oPgotKyNpbmNsdWRlICJwYWNrZXQuaCIgLyogbmVlZGVkIGZvciBob3N0IGFuZCBwb3J0 IGxvb2sgdXBzICovCi0rI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotKyMgaW5jbHVkZSA8c3lzL3Rp bWUuaD4gLyogdG8gZ2V0IGN1cnJlbnQgdGltZSAqLwotKyNlbmRpZgotICNpZiBkZWZpbmVkKEhB VkVfU1RSTlZJUykgJiYgZGVmaW5lZChIQVZFX1ZJU19IKSAmJiAhZGVmaW5lZChCUk9LRU5fU1RS TlZJUykKLSAjIGluY2x1ZGUgPHZpcy5oPgotICNlbmRpZgotQEAgLTY1LDYgKzcwLDggQEAKLSBz dGF0aWMgc2l6ZV90IG5sb2dfdmVyYm9zZTsKLSBleHRlcm4gY2hhciAqX19wcm9nbmFtZTsKLSAK LStleHRlcm4gc3RydWN0IHNzaCAqYWN0aXZlX3N0YXRlOwotKwotICNkZWZpbmUgTE9HX1NZU0xP R19WSVMJKFZJU19DU1RZTEV8VklTX05MfFZJU19UQUJ8VklTX09DVEFMKQotICNkZWZpbmUgTE9H X1NUREVSUl9WSVMJKFZJU19TQUZFfFZJU19PQ1RBTCkKLSAKLWRpZmYgLU51ciBvcGVuc3NoLTEw LjNwMS5vcmlnL21hYy5jIG9wZW5zc2gtMTAuM3AxL21hYy5jCi0tLS0gb3BlbnNzaC0xMC4zcDEu b3JpZy9tYWMuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAotKysrIG9wZW5z c2gtMTAuM3AxL21hYy5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI1MzYyNDU1ICswMjAwCi1AQCAt NjMsNiArNjMsNyBAQAotIAl7ICJobWFjLXNoYTItNTEyIiwJCQlTU0hfRElHRVNULCBTU0hfRElH RVNUX1NIQTUxMiwgMCwgMCwgMCwgMCB9LAotIAl7ICJobWFjLW1kNSIsCQkJCVNTSF9ESUdFU1Qs IFNTSF9ESUdFU1RfTUQ1LCAwLCAwLCAwLCAwIH0sCi0gCXsgImhtYWMtbWQ1LTk2IiwJCQlTU0hf RElHRVNULCBTU0hfRElHRVNUX01ENSwgOTYsIDAsIDAsIDAgfSwKLSsJeyAibm9uZSIsCQkJCVNT SF9ESUdFU1QsIFNTSF9ESUdFU1RfTlVMTCwgMCwgMCwgMCwgMCB9LAotIAl7ICJ1bWFjLTY0QG9w ZW5zc2guY29tIiwJCVNTSF9VTUFDLCAwLCAwLCAxMjgsIDY0LCAwIH0sCi0gCXsgInVtYWMtMTI4 QG9wZW5zc2guY29tIiwJCVNTSF9VTUFDMTI4LCAwLCAwLCAxMjgsIDEyOCwgMCB9LAotIAotZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvTWFrZWZpbGUuaW4gb3BlbnNzaC0xMC4zcDEvTWFr ZWZpbGUuaW4KLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL01ha2VmaWxlLmluCTIwMjYtMDctMDIg MDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvTWFrZWZpbGUuaW4J MjAyNi0wNy0wMiAwMToxODoyNy43NDA1NzIyMTcgKzAyMDAKLUBAIC01NCw3ICs1NCw3IEBACi0g Q0ZMQUdTX05PUElFPUBDRkxBR1NfTk9QSUVACi0gQ1BQRkxBR1M9LUkuIC1JJChzcmNkaXIpIC1J JChDT01QQVRJTkNMVURFUykgQENQUEZMQUdTQCAkKFBBVEhTKSBAREVGU0AKLSBQSUNGTEFHPUBQ SUNGTEFHQAotLUxJQlM9QExJQlNACi0rTElCUz1ATElCU0AgLWxwdGhyZWFkCi0gQ0hBTk5FTExJ QlM9QENIQU5ORUxMSUJTQAotIEs1TElCUz1ASzVMSUJTQAotIEdTU0xJQlM9QEdTU0xJQlNACi1A QCAtOTMsNyArOTMsNyBAQAotIExJQlNTSF9PQkpTPSR7TElCT1BFTlNTSF9PQkpTfSBcCi0gCWF1 dGhmZC5vIGF1dGhmaWxlLm8gXAotIAljYW5vaG9zdC5vIGNoYW5uZWxzLm8gY2lwaGVyLm8gY2lw aGVyLWFlcy5vIGNpcGhlci1hZXNjdHIubyBcCi0tCWNsZWFudXAubyBcCi0rCWNsZWFudXAubyBj aXBoZXItY3RyLW10Lm8gXAotIAljb21wYXQubyBmYXRhbC5vIGhvc3RmaWxlLm8gXAotIAlsb2cu byBtYXRjaC5vIG1vZHVsaS5vIG5jaGFuLm8gcGFja2V0Lm8gXAotIAlyZWFkcGFzcy5vIHR0eW1v ZGVzLm8geG1hbGxvYy5vIGFkZHIubyBhZGRybWF0Y2gubyBcCi1AQCAtMTAzLDYgKzEwMyw3IEBA Ci0gCW1zZy5vIGRucy5vIGVudHJvcHkubyBnc3MtZ2Vuci5vIHVtYWMubyB1bWFjMTI4Lm8gXAot IAlzbXVsdF9jdXJ2ZTI1NTE5X3JlZi5vIFwKLSAJcG9seTEzMDUubyBjaGFjaGEubyBjaXBoZXIt Y2hhY2hhcG9seS5vIGNpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by5vIFwKLSsJY2lwaGVyLWNo YWNoYXBvbHktbGliY3J5cHRvLW10Lm8gXAotIAlzc2gtZWQyNTUxOS5vIGRpZ2VzdC1vcGVuc3Ns Lm8gZGlnZXN0LWxpYmMubyBcCi0gCWhtYWMubyBlZDI1NTE5Lm8gZWQyNTUxOS1vcGVuc3NsLm8g XAotIAlrZXgubyBrZXgtbmFtZXMubyBrZXhkaC5vIGtleGdleC5vIGtleGVjZGgubyBrZXhjMjU1 MTkubyBcCi1AQCAtMTEwLDE0ICsxMTEsMTYgQEAKLSAJa2V4c250cnVwNzYxeDI1NTE5Lm8ga2V4 bWxrZW03Njh4MjU1MTkubyBzbnRydXA3NjEubyBrZXhnZW4ubyBcCi0gCWtleGdzc2MubyBcCi0g CXNmdHAtcmVhbHBhdGgubyBwbGF0Zm9ybS1wbGVkZ2UubyBwbGF0Zm9ybS10cmFjaW5nLm8gcGxh dGZvcm0tbWlzYy5vIFwKLS0Jc3NoYnVmLWlvLm8gbWlzYy1hZ2VudC5vIHNzaGVyci1saWJjcnlw dG8ubyBhdWRpdHN0dWIubwotKwlzc2hidWYtaW8ubyBtaXNjLWFnZW50Lm8gc3NoZXJyLWxpYmNy eXB0by5vIGF1ZGl0c3R1Yi5vIFwKLSsJbWV0cmljcy5vIGJpbm4ubyBoYXBweWV5ZWJhbGxzLm8g Y2lwaGVyLWN0ci1tdC1wcm92aWRlci5vIFwKLSsJY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMubyBv c3NsMy1wcm92aWRlci1lcnIubyBudW0ubwotIAotIFAxMU9CSlM9IHNzaC1wa2NzMTEtY2xpZW50 Lm8gc3NoLXBrY3MxMS11cmkubwotIAotIFNLT0JKUz0Jc3NoLXNrLWNsaWVudC5vCi0gCi0gU1NI T0JKUz0gc3NoLm8gcmVhZGNvbmYubyBjbGllbnRsb29wLm8gc3NodHR5Lm8gXAotLQlzc2hjb25u ZWN0Lm8gc3NoY29ubmVjdDIubyBtdXgubyBzc2gtcGtjczExLm8gc3NoLXBrY3MxMS11cmkubyAk KFNLT0JKUykKLSsJc3NoY29ubmVjdC5vIHNzaGNvbm5lY3QyLm8gbXV4Lm8gY2lwaGVyLXN3aXRj aC5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQotIAotIFNTSERPQkpT PXNzaGQubyBcCi0gCXBsYXRmb3JtLWxpc3Rlbi5vIFwKLUBAIC0xMzYsNyArMTM5LDcgQEAKLSAJ YXV0aDItZ3NzLm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gZ3NzLXNlcnYtZ3NpLm8gXAot IAlsb2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFkb3cubyBhdXRoLXNpYS5vIFwKLSAJc2Z0 cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKLS0JdWlkc3dhcC5vIHBsYXRmb3JtLWxpc3Rlbi5v ICQoUDExT0JKUykgJChTS09CSlMpCi0rCXVpZHN3YXAubyBwbGF0Zm9ybS1saXN0ZW4ubyBjaXBo ZXItc3dpdGNoLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKLSAKLSBTU0hEX0FVVEhfT0JKUz1zc2hk LWF1dGgubyBcCi0gCWF1dGgyLW1ldGhvZHMubyBcCi1AQCAtMTUxLDcgKzE1NCw3IEBACi0gCXNh bmRib3gtbnVsbC5vIHNhbmRib3gtcmxpbWl0Lm8gc2FuZGJveC1kYXJ3aW4ubyBcCi0gCXNhbmRi b3gtc2VjY29tcC1maWx0ZXIubyBzYW5kYm94LWNhcHNpY3VtLm8gIHNhbmRib3gtc29sYXJpcy5v IFwKLSAJc2Z0cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKLS0JdWlkc3dhcC5vICQoUDExT0JK UykgJChTS09CSlMpCi0rCXVpZHN3YXAubyBjaXBoZXItc3dpdGNoLm8gJChQMTFPQkpTKSAkKFNL T0JKUykKLSAKLSBTRlRQX0NMSUVOVF9PQkpTPXNmdHAtY29tbW9uLm8gc2Z0cC1jbGllbnQubyBz ZnRwLWdsb2IubyBzc2hlcnItbm9saWJjcnlwdG8ubwotIAotQEAgLTIzNSw3ICsyMzgsNyBAQAot IAkkKExEKSAtbyAkQCAkKFNTSERfQVVUSF9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJz ZC1jb21wYXQgJChTU0hETElCUykgJChMSUJTKSAkKEdTU0xJQlMpICQoSzVMSUJTKSAkKENIQU5O RUxMSUJTKSAkKExJQldUTVBEQikKLSAKLSBzY3AkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJz c2guYSAkKFNDUF9PQkpTKQotLQkkKExEKSAtbyAkQCAkKFNDUF9PQkpTKSAkKExERkxBR1MpIC1s c3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKQotKwkkKExEKSAtbyAkQCAkKFNDUF9PQkpTKSAk KExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKSAkKENIQU5ORUxMSUJTKQot IAotIHNzaC1hZGQkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNTSEFERF9PQkpT KQotIAkkKExEKSAtbyAkQCAkKFNTSEFERF9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJz ZC1jb21wYXQgJChMSUJTKSAkKENIQU5ORUxMSUJTKQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvbWV0cmljcy5jIG9wZW5zc2gtMTAuM3AxL21ldHJpY3MuYwotLS0tIG9wZW5zc2gtMTAu M3AxLm9yaWcvbWV0cmljcy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzaC0xMC4zcDEvbWV0cmljcy5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI1ODY5MDI2 ICswMjAwCi1AQCAtMCwwICsxLDQzOSBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDIyIFRo ZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KLSsgKgot KyAqICBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+Ci0rICoKLSsgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAotKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCi0rICoK LSsgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSsgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSsgKgotKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIE1J VCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OwotKyAqIGlmIG5vdCwgc2VlIGh0dHA6 Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSAi aW5jbHVkZXMuaCIKLSsjaW5jbHVkZSAibWV0cmljcy5oIgotKyNpbmNsdWRlICJzc2hlcnIuaCIK LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0rLyoga2VybmVs IHZlcnNpb24gbWFjcm8gbW92ZWQgdG8gZGVmaW5lcy5oICovCi0rCi0rLyogYWRkIHRoZSBpbmZv cm1hdGlvbiBmcm9tIHRoZSB0Y3BfaW5mbyBzdHJ1Y3QgdG8gdGhlCi0rICogc2VyaWFsaXplZCBi aW5hcnkgb2JqZWN0Ci0rICovCi0rdm9pZAotK21ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3Qoc3Ry dWN0IHRjcF9pbmZvICpkYXRhLCBzdHJ1Y3QgYmlubl9zdHJ1Y3QgKmJpbm5vYmopIHsKLSsjaWYg IWRlZmluZWQgVENQX0lORk8KLSsJLyp0Y3AgaW5mbyBpc24ndCBzdXBwb3J0ZWQgb24gdGhpcyBz eXN0ZW0gKi8KLSsJcmV0dXJuOwotKyNlbHNlCi0rCi0rLyogdGhlIGJhc2Ugc2V0IG9mIHRjcGlf IG1lYXN1cmVtZW50cyBzdGFydGluZyBmcm9tIGtlcm5lbCAzLjcuMAotKyAqIHRoZXNlIG1lYXN1 cmVtZW50cyBleGlzdGVkIGluIHByZXZpb3VzIGtlcm5lbHMgYnV0IHRoZSBvbGRlc3QgdGhpcwot KyAqIGlzIGdvaW5nIHRvIHN1cHBvcnQgaXMgMy43LjAuIFdlIGRvIG5lZWQgdG8gc3RvcmUgdGhl IGtlcm5lbCB2ZXJzaW9uIGFzIHdlbGwgKi8KLSsKLSsvKiBvYnZpb3Vsc3kgdGhlIHZlcnNpb24g Y29kZSBtYWNybyBvbmx5IGV4aXN0cyB1bmRlciBsaW51eCBzbwotKyAqIG9uIG5vbiBsaW51eCBz eXN0ZW1zIHdlIHNldCB0aGUga2VybmVsIHZlcnNpb24gdG8gMAotKyAqIHdoaWNoIHdpbGwgZ2V0 IHVzIHRoZSBiYXNlIHNldCBvZiBtZXRyaWNzIGZyb20gbmV0aW5ldC90Y3AuaAotKyAqLwotKyNp ZiAoZGVmaW5lZCBfX2xpbnV4X18pICYmICFkZWZpbmVkKF9fYWxwaW5lX18pCi0rCWJpbm5fb2Jq ZWN0X3NldF91aW50MzIoYmlubm9iaiwgImtlcm5lbF92ZXJzaW9uIiwgTElOVVhfVkVSU0lPTl9D T0RFKTsKLSsjZWxzZQotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJrZXJuZWxf dmVyc2lvbiIsIDApOwotKyNlbmRpZgotKwotKwkvKiB0aGUgZm9sbG93aW5nIGFyZSBjb21tb24g dW5kZXIgYm90aCBsaW51eCBhbmQgQlNEICovCi0rCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5u b2JqLCAidGNwaV9zbmRfd3NjYWxlIiwKLSsJCQkgICAgICBkYXRhLT50Y3BpX3NuZF93c2NhbGUp OwotKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfcmN2X3dzY2FsZSIsCi0r CQkJICAgICAgZGF0YS0+dGNwaV9yY3Zfd3NjYWxlKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4 KGJpbm5vYmosICJ0Y3BpX3N0YXRlIiwKLSsJCQkgICAgICBkYXRhLT50Y3BpX3N0YXRlKTsKLSsJ Ymlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX29wdGlvbnMiLAotKwkJCSAgICAg IGRhdGEtPnRjcGlfb3B0aW9ucyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwg InRjcGlfc25kX3NzdGhyZXNoIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRfc3N0aHJlc2gp OwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dCIsCi0rCQkJICAg ICAgIGRhdGEtPnRjcGlfcnR0KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9sYXN0X2RhdGFfcmVjdiIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfbGFzdF9kYXRhX3Jl Y3YpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dHZhciIsCi0r CQkJICAgICAgIGRhdGEtPnRjcGlfcnR0dmFyKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihi aW5ub2JqLCAidGNwaV9zbmRfY3duZCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfc25kX2N3bmQp OwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9tc3MiLAotKwkJ CSAgICAgICBkYXRhLT50Y3BpX3Jjdl9tc3MpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJp bm5vYmosICJ0Y3BpX3J0byIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfcnRvKTsKLSsJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfbXNzIiwKLSsJCQkgICAgICAgZGF0 YS0+dGNwaV9zbmRfbXNzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNw aV9yY3Zfc3BhY2UiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9zcGFjZSk7Ci0rCi0rLyog dGhlIGZvbGxvd2luZyBleGlzdCB1bmRlciBib3RoIGJ1dCB3aXRoIGRpZmZlcmVudCBuYW1lcyAq LwotKyNpZmRlZiBfX2xpbnV4X18KLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0 Y3BpX2NhX3N0YXRlIiwKLSsJCQkgICAgICBkYXRhLT50Y3BpX2NhX3N0YXRlKTsKLSsJYmlubl9v YmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Byb2JlcyIsCi0rCQkJICAgICAgZGF0YS0+ dGNwaV9wcm9iZXMpOwotKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfYmFj a29mZiIsCi0rCQkJICAgICAgZGF0YS0+dGNwaV9iYWNrb2ZmKTsKLSsJYmlubl9vYmplY3Rfc2V0 X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3JldHJhbnNtaXRzIiwKLSsJCQkgICAgICBkYXRhLT50Y3Bp X3JldHJhbnNtaXRzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9y Y3Zfc3N0aHJlc2giLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9zc3RocmVzaCk7Ci0rCWJp bm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Fja2VkIiwKLSsJCQkgICAgICAg ZGF0YS0+dGNwaV9zYWNrZWQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0 Y3BpX3BtdHUiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3BtdHUpOwotKwliaW5uX29iamVjdF9z ZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2ZhY2tldHMiLAotKwkJCSAgICAgICBkYXRhLT50Y3Bp X2ZhY2tldHMpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xvc3Qi LAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2xvc3QpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMy KGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3NlbnQiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2xh c3RfYWNrX3NlbnQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Vu YWNrZWQiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3VuYWNrZWQpOwotKwliaW5uX29iamVjdF9z ZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfZGF0YV9zZW50IiwKLSsJCQkgICAgICAgZGF0 YS0+dGNwaV9sYXN0X2RhdGFfc2VudCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9i aiwgInRjcGlfbGFzdF9hY2tfcmVjdiIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfbGFzdF9hY2tf cmVjdik7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRlcmlu ZyIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfcmVvcmRlcmluZyk7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfYWR2bXNzIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9h ZHZtc3MpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3JldHJhbnMi LAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3JldHJhbnMpOwotKwliaW5uX29iamVjdF9zZXRfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX2F0byIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfYXRvKTsKLSsJ Ymlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfcnR0IiwKLSsJCQkgICAg ICAgZGF0YS0+dGNwaV9yY3ZfcnR0KTsKLSsjZWxzZQotKwliaW5uX29iamVjdF9zZXRfdWludDgo Ymlubm9iaiwgInRjcGlfYmFja29mZiIsCi0rCQkJICAgICAgZGF0YS0+X190Y3BpX2JhY2tvZmYp OwotKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfY2Ffc3RhdGUiLAotKwkJ CSAgICAgIGRhdGEtPl9fdGNwaV9jYV9zdGF0ZSk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50OChi aW5ub2JqLCAidGNwaV9wcm9iZXMiLAotKwkJCSAgICAgIGRhdGEtPl9fdGNwaV9wcm9iZXMpOwot KwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfcmV0cmFuc21pdHMiLAotKwkJ CSAgICAgIGRhdGEtPl9fdGNwaV9yZXRyYW5zbWl0cyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50 MzIoYmlubm9iaiwgInRjcGlfcmN2X3NzdGhyZXNoIiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3Bp X3Jjdl9zc3RocmVzaCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlf c2Fja2VkIiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX3NhY2tlZCk7Ci0rCWJpbm5fb2JqZWN0 X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcG10dSIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNw aV9wbXR1KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9mYWNrZXRz IiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX2ZhY2tldHMpOwotKwliaW5uX29iamVjdF9zZXRf dWludDMyKGJpbm5vYmosICJ0Y3BpX2xvc3QiLAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfbG9z dCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfc2Vu dCIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9sYXN0X2Fja19zZW50KTsKLSsJYmlubl9vYmpl Y3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV91bmFja2VkIiwKLSsJCQkgICAgICAgZGF0YS0+ X190Y3BpX3VuYWNrZWQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X2xhc3RfZGF0YV9zZW50IiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX2xhc3RfZGF0YV9zZW50 KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19yZWN2 IiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX2xhc3RfYWNrX3JlY3YpOwotKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jlb3JkZXJpbmciLAotKwkJCSAgICAgICBkYXRh LT5fX3RjcGlfcmVvcmRlcmluZyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwg InRjcGlfYWR2bXNzIiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX2Fkdm1zcyk7Ci0rCWJpbm5f b2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmV0cmFucyIsCi0rCQkJICAgICAgIGRh dGEtPl9fdGNwaV9yZXRyYW5zKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9hdG8iLAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfYXRvKTsKLSsJYmlubl9vYmplY3Rf c2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfcnR0IiwKLSsJCQkgICAgICAgZGF0YS0+X190 Y3BpX3Jjdl9ydHQpOwotKyNlbmRpZgotKwotKy8qIFVuZGVyIEJTRCBzbmRfcmV4bWl0cGFjayBp cyB0aGUgc2FtZSBhcyBsaW51eCB0b3RhbF9yZXRyYW5zKi8KLSsjaWZkZWYgX19saW51eF9fCi0r CWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfdG90YWxfcmV0cmFucyIsCi0r CQkJICAgICAgIGRhdGEtPnRjcGlfdG90YWxfcmV0cmFucyk7Ci0rI2Vsc2UKLSsJYmlubl9vYmpl Y3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV90b3RhbF9yZXRyYW5zIiwKLSsJCQkgICAgICAg ZGF0YS0+dGNwaV9zbmRfcmV4bWl0cGFjayk7Ci0rI2VuZGlmCi0rCi0rLyogVGhlIGxhc3Qgc2Vj dGlvbiBhcmUgZm9yIGtlcm5lbCBzcGVjaWZpYyBtZXRyaWNzIGluIGxpbnV4ICovCi0rI2lmZGVm IF9fbGludXhfXwotKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMywx NSwwKQotKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX21heF9wYWNpbmdf cmF0ZSIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfbWF4X3BhY2luZ19yYXRlKTsKLSsJYmlubl9v YmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9wYWNpbmdfcmF0ZSIsCi0rCQkJICAgICAg IGRhdGEtPnRjcGlfcGFjaW5nX3JhdGUpOwotKyNlbmRpZgotKwotKyNpZiBMSU5VWF9WRVJTSU9O X0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCwxLDApCi0rCWJpbm5fb2JqZWN0X3NldF91aW50NjQo Ymlubm9iaiwgInRjcGlfYnl0ZXNfYWNrZWQiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2J5dGVz X2Fja2VkKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19y ZWNlaXZlZCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfYnl0ZXNfcmVjZWl2ZWQpOwotKyNlbmRp ZgotKwotKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCwyLDApCi0r CWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Vnc19pbiIsCi0rCQkJICAg ICAgIGRhdGEtPnRjcGlfc2Vnc19pbik7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9i aiwgInRjcGlfc2Vnc19vdXQiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3NlZ3Nfb3V0KTsKLSsj ZW5kaWYKLSsKLSsjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsNiww KQotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX25vdHNlbnRfYnl0ZXMi LAotKwkJCSAgICAgICBkYXRhLT50Y3BpX25vdHNlbnRfYnl0ZXMpOwotKwliaW5uX29iamVjdF9z ZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX21pbl9ydHQiLAotKwkJCSAgICAgICBkYXRhLT50Y3Bp X21pbl9ydHQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RhdGFf c2Vnc19pbiIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfZGF0YV9zZWdzX2luKTsKLSsJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3Nfb3V0IiwKLSsJCQkgICAg ICAgZGF0YS0+dGNwaV9kYXRhX3NlZ3Nfb3V0KTsKLSsjZW5kaWYKLSsKLSsjaWYgTElOVVhfVkVS U0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsOSwwKQotKwliaW5uX29iamVjdF9zZXRfdWlu dDgoYmlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZV9hcHBfbGltaXRlZCIsCi0rCQkJICAgICAg ZGF0YS0+dGNwaV9kZWxpdmVyeV9yYXRlX2FwcF9saW1pdGVkKTsKLSsJYmlubl9vYmplY3Rfc2V0 X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9yYXRlIiwKLSsJCQkgICAgICAgZGF0YS0+ dGNwaV9kZWxpdmVyeV9yYXRlKTsKLSsjZW5kaWYKLSsKLSsjaWYgTElOVVhfVkVSU0lPTl9DT0RF ID49IEtFUk5FTF9WRVJTSU9OKDQsMTAsMCkKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5u b2JqLCAidGNwaV9idXN5X3RpbWUiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2J1c3lfdGltZSk7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfc25kYnVmX2xpbWl0ZWQi LAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZGJ1Zl9saW1pdGVkKTsKLSsJYmlubl9vYmplY3Rf c2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9yd25kX2xpbWl0ZWQiLAotKwkJCSAgICAgICBkYXRh LT50Y3BpX3J3bmRfbGltaXRlZCk7Ci0rI2VuZGlmCi0rCi0rI2lmIExJTlVYX1ZFUlNJT05fQ09E RSA+PSBLRVJORUxfVkVSU0lPTig0LDE4LDApCi0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlu bm9iaiwgInRjcGlfZGVsaXZlcmVkIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9kZWxpdmVyZWQp OwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJlZF9jZSIs Ci0rCQkJICAgICAgIGRhdGEtPnRjcGlfZGVsaXZlcmVkX2NlKTsKLSsjZW5kaWYKLSsKLSsjaWYg TElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsMTksMCkKLSsJYmlubl9vYmpl Y3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19zZW50IiwKLSsJCQkgICAgICAgZGF0 YS0+dGNwaV9ieXRlc19zZW50KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAi dGNwaV9ieXRlc19yZXRyYW5zIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9ieXRlc19yZXRyYW5z KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kc2Fja19kdXBzIiwK LSsJCQkgICAgICAgZGF0YS0+dGNwaV9kc2Fja19kdXBzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZF9zZWVuIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9y ZW9yZF9zZWVuKTsKLSsjZW5kaWYKLSsKLSsjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5F TF9WRVJTSU9OKDUsNCwwKQotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X3NuZF93bmQiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZF93bmQpOwotKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9vb29wYWNrIiwKLSsJCQkgICAgICAgZGF0 YS0+dGNwaV9yY3Zfb29vcGFjayk7Ci0rI2VuZGlmCi0rCi0rI2lmIExJTlVYX1ZFUlNJT05fQ09E RSA+PSBLRVJORUxfVkVSU0lPTig1LDUsMCkKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5v YmosICJ0Y3BpX2Zhc3RvcGVuX2NsaWVudF9mYWlsIiwKLSsJCQkgICAgICBkYXRhLT50Y3BpX2Zh c3RvcGVuX2NsaWVudF9mYWlsKTsKLSsjZW5kaWYKLSsjZW5kaWYgLyplbmRpZiBmb3IgI2lmZGVm IF9fbGludXhfXyAqLwotKyNlbmRpZiAvKmVuZGlmIGZvciBUQ1BfSU5GTyAqLwotK30KLSsKLSsv KiB0aGlzIHJlYWRzIG91dCB0aGUgdGNwX2luZm8gYmlubiBvYmplY3QgYW5kIGZvcm1hdHMgaXQg aW50byBhIHNpbmdsZSBsaW5lCi0rICogdGhlIG9iamVjdCB3aWxsIG5vdCBuZWNlc3NhcmlseSBo YXZlIGFsbCBvZiB0aGUgZWxlbWVudHMuIElmIGl0J3MgZW1wdHkgaXQKLSsgKiBjdXJyZW50IGp1 c3Qgc3BpdHMgb3V0IDAuIFRoaXMgaXNuJ3Qgb3B0aW1hbCBhcyAwIGNhbiBhbHNvIGJlIGEgdmFs aWQgdmFsdWUgKi8KLSt2b2lkCi0rbWV0cmljc19yZWFkX2Jpbm5fb2JqZWN0ICh2b2lkICpiaW5u b2JqLCBjaGFyICpvdXRwdXQpIHsKLSsJaW50IGxlbiA9IDA7Ci0rCWludCBidWZsZW4gPSAxMDIz OwotKwlpbnQga2VybmVsX3ZlcnNpb24gPSAwOwotKwlpZiAoYmlubm9iaiA9PSBOVUxMKSB7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIk1ldHJpYyBwb2xsaW5nIHJldHVybmVkIGJhZCBkYXRhLlxuIik7 Ci0rCQlyZXR1cm47Ci0rCX0KLSsJa2VybmVsX3ZlcnNpb24gPSBiaW5uX29iamVjdF91aW50MzIo Ymlubm9iaiwgImtlcm5lbF92ZXJzaW9uIik7Ci0rCi0rCS8qIGJhc2Ugc2V0IG9mIG1ldHJpY3Mg Ki8KLSsJbGVuID0gc25wcmludGYob3V0cHV0LCBidWZsZW4sICIlZCwgJWQsICVkLCAlZCwgJWQs ICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwg JWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQiLAotKwkJ ICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3N0YXRlIiksCi0rCQkgICAg ICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfY2Ffc3RhdGUiKSwKLSsJCSAgICAg ICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9yZXRyYW5zbWl0cyIpLAotKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Byb2JlcyIpLAotKwkJICAgICAg IGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2JhY2tvZmYiKSwKLSsJCSAgICAgICBi aW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9vcHRpb25zIiksCi0rCQkgICAgICAgYmlu bl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfc25kX3dzY2FsZSIpLAotKwkJICAgICAgIGJp bm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Jjdl93c2NhbGUiKSwKLSsJCSAgICAgICBi aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcnRvIiksCi0rCQkgICAgICAgYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2F0byIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfbXNzIiksCi0rCQkgICAgICAgYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9tc3MiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfdW5hY2tlZCIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9zYWNrZWQiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50 MzIoYmlubm9iaiwgInRjcGlfbG9zdCIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihi aW5ub2JqLCAidGNwaV9yZXRyYW5zIiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJp bm5vYmosICJ0Y3BpX2ZhY2tldHMiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlu bm9iaiwgInRjcGlfbGFzdF9kYXRhX3NlbnQiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50 MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfc2VudCIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2RhdGFfcmVjdiIpLAotKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19yZWN2IiksCi0rCQkgICAgICAg Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3BtdHUiKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NzdGhyZXNoIiksCi0rCQkgICAgICAg Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dCIpLAotKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHR2YXIiKSwKLSsJCSAgICAgICBiaW5uX29i amVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX3NzdGhyZXNoIiksCi0rCQkgICAgICAgYmlu bl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF9jd25kIiksCi0rCQkgICAgICAgYmlu bl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2Fkdm1zcyIpLAotKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZGVyaW5nIiksCi0rCQkgICAgICAgYmlu bl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9ydHQiKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NwYWNlIiksCi0rCQkgICAgICAgYmlu bl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3RvdGFsX3JldHJhbnMiKQotKwkJKTsKLSsK LSsJLyogY29tcGFyZSB0aGUgcmVjZWl2ZWQga2VybmVsIHZlcnNpb24gdG8gdGhlIHZlcnNpb24g dGhhdCBzdXBwb3J0cwotKwkgKiBhbnkgZ2l2ZW4gbWV0cmljLiBUaGlzIG1lYW5zIHRoYXQgYSBy ZW1vdGUgaG9zdCB0aGF0IGhhcyBhIGRpZmZlcmVudAotKwkgKiBrZXJuZWwgdGhhdCB0aGUgbG9j YWwgaG9zdCB3aWxsIGJlIGFibGUgdG8gcHJvY2VzcyB0aGUgZGF0YSBpbiB0ZXJtcyBvZgotKwkg KiB0aGUgcmVtb3RlIGtlcm5lbCB2ZXJzaW9uLiBPbmx5IG5lY2Vzc2FyeSB1bmRlciBsaW51eCov Ci0rI2lmZGVmIF9fbGludXhfXwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJ T04oMywxNSwwKSkgewotKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVu KSwgIiwgJWxsdSwgJWxsdSIsCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNw aV9tYXhfcGFjaW5nX3JhdGUiKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmosICJ0 Y3BpX3BhY2luZ19yYXRlIikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+ PSBLRVJORUxfVkVSU0lPTig0LDEsMCkpIHsKLSsJCWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVu LCAoYnVmbGVuLWxlbiksICIsICVsbHUsICVsbHUiLAotKwkJCQliaW5uX29iamVjdF91aW50NjQo Ymlubm9iaiwgInRjcGlfYnl0ZXNfYWNrZWQiKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJp bm5vYmosICJ0Y3BpX2J5dGVzX3JlY2VpdmVkIikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJu ZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDIsMCkpIHsKLSsJCWxlbiArPSBzbnByaW50 ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlZCIsCi0rCQkJCWJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zZWdzX2luIiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9zZWdzX291dCIpCi0rCQkJKTsKLSsJfQotKwotKwlpZiAoa2VybmVs X3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCw2LDApKSB7Ci0rCQlsZW4gKz0gc25wcmludGYo b3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQsICVkLCAlZCIsCi0rCQkJCWJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ub3RzZW50X2J5dGVzIiksCi0rCQkJCWJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9taW5fcnR0IiksCi0rCQkJCWJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3NfaW4iKSwKLSsJCQkJYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX2RhdGFfc2Vnc19vdXQiKQotKwkJCSk7Ci0rCX0KLSsKLSsJ aWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsOSwwKSkgewotKwkJbGVuICs9 IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVsbHUiLAotKwkJCQli aW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9yYXRlX2FwcF9saW1pdGVk IiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9yYXRl IikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lP Tig0LDEwLDApKSB7Ci0rCQlsZW4gKz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4p LCAiLCAlbGx1LCAlbGx1LCAlbGx1IiwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmos ICJ0Y3BpX2J1c3lfdGltZSIpLAotKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRj cGlfc25kYnVmX2xpbWl0ZWQiKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmosICJ0 Y3BpX3J3bmRfbGltaXRlZCIpCi0rCQkJKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24g Pj0gS0VSTkVMX1ZFUlNJT04oNCwxOCwwKSkgewotKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCts ZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkIiwKLSsJCQkJYmlubl9vYmplY3RfdWludDMyKGJp bm5vYmosICJ0Y3BpX2RlbGl2ZXJlZCIpLAotKwkJCQliaW5uX29iamVjdF91aW50MzIoYmlubm9i aiwgInRjcGlfZGVsaXZlcmVkX2NlIikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVy c2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDE5LDApKSB7Ci0rCQlsZW4gKz0gc25wcmludGYob3V0 cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlbGx1LCAlbGx1LCAlZCwgJWQiLAotKwkJCQliaW5u X29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfc2VudCIpLAotKwkJCQliaW5uX29i amVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfcmV0cmFucyIpLAotKwkJCQliaW5uX29i amVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfZHNhY2tfZHVwcyIpLAotKwkJCQliaW5uX29iamVj dF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRfc2VlbiIpCi0rCQkJKTsKLSsJfQotKwotKwlp ZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNSw0LDApKSB7Ci0rCQlsZW4gKz0g c25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQiLAotKwkJCQliaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX3duZCIpLAotKwkJCQliaW5uX29iamVj dF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X29vb3BhY2siKQotKwkJCSk7Ci0rCX0KLSsKLSsJ aWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNSwwKSkgewotKwkJbGVuICs9 IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQiLAotKwkJCQliaW5uX29i amVjdF91aW50OChiaW5ub2JqLCAidGNwaV9mYXN0b3Blbl9jbGllbnRfZmFpbCIpCi0rCQkJKTsK LSsJfQotKyNlbmRpZiAvKiBpZmRlZiBfX2xpbnV4X18gKi8KLSt9Ci0rCi0rLyogUHJpbnQgb3V0 IHRoZSBoZWFkZXIgdG8gdGhlIGZpbGUgc28gdGhhdCB0aGUgY29sdW1uIGhlYWRlciBtYXRjaGVz IHRoZQotKyAqIGRhdGEgaW4gdGhlIG1ldHJpY3Mgb2JqZWN0LiBUaGF0IHZhcmllcyBieSBrZXJu ZWwgdmVyc2lvbiBzbyB3ZSBoYXZlIHRvCi0rICogZG8gdGVzdHMgZm9yIGVhY2ggcG9zc2libGUg dmVyc2lvbiB3aGVyZSB0aGV5IGFkZGVkIG5ldyB2YWx1ZXMgdG8gdGNwX2luZm8KLSsgKiBOT1RF OiBUaGlzIGRvZXNuJ3QgcHV0IHRoZSB2YWx1ZXMvaGVhZGVycyBpbiB0aGUgbW9zdCB1c2VmdWwg b3JkZXIgYnV0IHRoZQotKyAqIHJlc3VsdGluZyBmaWxlIGlzIHByb2JhYmx5IGdvaW5nIHRvIGdl dCBwcm9jZXNzZWQgYnkgc29tZXRoaW5nICovCi0rdm9pZAotK21ldHJpY3NfcHJpbnRfaGVhZGVy KEZJTEUgKmZwdHIsIGNoYXIgKmV4dHJhX3RleHQsIGludCBrZXJuZWxfdmVyc2lvbikgewotKwlp ZiAoZXh0cmFfdGV4dCAhPSBOVUxMKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIlc1xuIiwgZXh0cmFf dGV4dCk7Ci0rCX0KLSsJZnByaW50ZihmcHRyLCAidGltZXN0YW1wLCBzdGF0ZSwgY2Ffc3RhdGUs IHJldHJhbnNtaXRzLCBwcm9iZXMsIGJhY2tvZmYsIG9wdGlvbnMsICIpOwotKwlmcHJpbnRmKGZw dHIsICJzbmRfd3NjYWxlLCByY3Zfd3NjYWxlLCBydG8sIGF0bywgc25kX21zcywgcmN2X21zcywg dW5hY2tlZCwgc2Fja2VkLCBsb3N0LCByZXRyYW5zLCAiKTsKLSsJZnByaW50ZihmcHRyLCAiZmFj a2V0cywgbGFzdF9kYXRhX3NlbnQsIGxhc3RfYWNrX3NlbnQsIGxhc3RfZGF0YV9yZWN2LCAiKTsK LSsJZnByaW50ZihmcHRyLCAibGFzdF9hY2tfcmVjdiwgcG10dSwgcmN2X3NzdGhyZXNoLCBydHQs IHJ0dHZhciwgc25kX3NzdGhyZXNoLCAiKTsKLSsJZnByaW50ZihmcHRyLCAic25kX2N3bmQsIGFk dm1zcywgcmVvcmRlcmluZywgcmN2X3J0dCwgcmN2X3NwYWNlLCB0b3RhbF9yZXRyYW5zIik7Ci0r Ci0rCS8qIGNvbXBhcmUgdGhlIHJlY2VpdmVkIGtlcm5lbCB2ZXJzaW9uIHRvIHRoZSB2ZXJzaW9u IHRoYXQgc3VwcG9ydHMKLSsJICogYW55IGdpdmVuIG1ldHJpYy4gVGhpcyB3YXkgd2UgY2FuIHBy aW50IGNvbnNpc3RlbnQgaGVhZGVycy4KLSsJICogT25seSBuZWNlc3NhcnkgdW5kZXIgbGludXgq LwotKyNpZmRlZiBfX2xpbnV4X18KLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJT SU9OKDMsMTUsMCkpIHsKLSsJCWZwcmludGYoZnB0ciwgIiwgbWF4X3BhY2luZ19yYXRlLCBwYWNp bmdfcmF0ZSIpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lP Tig0LDEsMCkpIHsKLSsJCWZwcmludGYoZnB0ciwgIiwgYnl0ZXNfYWNrZWQsIGJ5dGVzX3JlY2Vp dmVkIik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQs MiwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBzZWdzX2luLCBzZWdzX291dCIpOwotKwl9Ci0r Ci0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDYsMCkpIHsKLSsJCWZw cmludGYoZnB0ciwgIiwgbm90c2VudF9ieXRlcywgbWluX3J0dCwgZGF0YV9zZWdzX2luLCBkYXRh X3NlZ19vdXQiKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJ T04oNCw5LDApKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIGRlbGl2ZXJ5X3JhdGVfYXBwX2xpbWl0 ZWQsIGRlbGl2ZXJ5X3JhdGUiKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VS TkVMX1ZFUlNJT04oNCwxMCwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBidXN5X3RpbWUsIHNu ZGJ1Zl9saW1pdGVkLCByd25kX2xpbWl0ZWQiKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNp b24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxOCwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBkZWxp dmVyZWQsIGRlbGl2ZXJlZF9jZSIpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBL RVJORUxfVkVSU0lPTig0LDE5LDApKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIGJ5dGVzX3NlbnQs IGJ5dGVzX3JldHJhbnMsIGRzYWNrX2R1cHMsIHJlb3JkX3NlZW4iKTsKLSsJfQotKwotKwlpZiAo a2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNSw0LDApKSB7Ci0rCQlmcHJpbnRmKGZw dHIsICIsIHNuZF93bmQsIHJjdl9vb29wYWNrIik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJz aW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNSwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBmYXN0 b3Blbl9jbGllbnRfZmFpbCIpOwotKwl9Ci0rI2VuZGlmIC8qIGlmZGVmIF9fbGludXhfXyAqLwot KwlmcHJpbnRmKGZwdHIsICJcblxuIik7Ci0rfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9y aWcvbWV0cmljcy5oIG9wZW5zc2gtMTAuM3AxL21ldHJpY3MuaAotLS0tIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvbWV0cmljcy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzaC0xMC4zcDEvbWV0cmljcy5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI1OTQ2MDA0ICsw MjAwCi1AQCAtMCwwICsxLDQ1IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgVGhlIEJv YXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAqCi0rICog IEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKgotKyAqIFRoaXMgbGli cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KLSsgKgotKyAq IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExp Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBzZWUgaHR0cDovL29w ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKwotKyNpZm5kZWYgTUVUUklD U19ICi0rI2RlZmluZSBNRVRSSUNTX0gKLSsKLSsjaW5jbHVkZSAiYmlubi5oIgotKwotKy8qIGxp bnV4LCBmcmVlYnNkLCBhbmQgbmV0YnNkIGhhdmUgdGNwX2luZm8gc3RydWN0cy4KLSsgKiBJIGRv bid0IGtub3cgYWJvdXQgb3RoZXIgc3lzdGVtcyBzbyB3ZSBkaXNhYmxlIHRoaXMKLSsgKiBmdW5j dGlvbmFsaXR5IGZvciB0aGVtICovCi0rI2lmIGRlZmluZWQgX19saW51eF9fIHx8IGRlZmluZWQg X19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX05ldEJTRF9fICYmICFkZWZpbmVkKF9fYWxwaW5lX18p Ci0rI2RlZmluZSBUQ1BfSU5GTyAxCi0rI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZpbmVk KF9fYWxwaW5lX18pCi0rI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotKyNlbHNlCi0rI2luY2x1ZGUg PG5ldGluZXQvdGNwLmg+Ci0rI2VuZGlmCi0rI2Vsc2UKLSsvKiBtYWtlIGEgbnVsbCBzdHJ1Y3Qg Zm9yIHRjcF9pbmZvIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0Ki8KLSt0eXBlZGVm IHN0cnVjdCB0Y3BfaW5mbyB7Ci0rCXZvaWQgICAgICpkdW1teTsKLSt9IHRjcF9pbmZvOwotKyNl bmRpZgotKwotK3ZvaWQgbWV0cmljc193cml0ZV9iaW5uX29iamVjdChzdHJ1Y3QgdGNwX2luZm8g Kiwgc3RydWN0IGJpbm5fc3RydWN0ICopOwotK3ZvaWQgbWV0cmljc19yZWFkX2Jpbm5fb2JqZWN0 KHZvaWQgKiwgY2hhciAqKTsKLSt2b2lkIG1ldHJpY3NfcHJpbnRfaGVhZGVyKEZJTEUgKiwgY2hh ciAqLCBpbnQpOwotKwotKwotKyNlbmRpZiAvKiBkZWZpbmUgbWV0cmljc19oICovCi1kaWZmIC1O dXIgb3BlbnNzaC0xMC4zcDEub3JpZy9taXNjLmMgb3BlbnNzaC0xMC4zcDEvbWlzYy5jCi0tLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9taXNjLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcg KzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9taXNjLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjYw ODQ5MjMgKzAyMDAKLUBAIC02Niw2ICs2Niw4MiBAQAotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAj aW5jbHVkZSAicGxhdGZvcm0uaCIKLSAKLSsvKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgRklQ UyBpcyBlbmFibGVkIG9yIG5vdC4KLSsgKiBXZSBhc3N1bWUgdGhhdCBmaXBzIGlzIG5vdCBlbmFi bGVkIGFuZCB0aGVuIHRlc3QgZnJvbSB0aGVyZS4KLSsgKiBUaGUgaWRlYSBpcyB0aGF0IGlmIHRo ZXJlIGlzIGFuIGVycm9yIG9yIHdlIGNhbid0IHJlYWQgdGhlIHZhbHVlCi0rICogdGhlbiBlaXRo ZXIgdGhlIE9TIGRvZXNuJ3Qgc3VwcG9ydCBGSVBTIG9yIHRoYXQgRklQUyB3aWxsCi0rICogY2F0 Y2ggYW55dGhpbmcgd2UgdHJ5IHRvIGRvIHRoYXQncyBub3QgRklQUyBjb21wbGlhbnQuCi0rICog VGhhdCB3b3VsZCBiZSBsaW1pdGVkIHRvIHRyeWluZyB0byB1c2Ugb25lIG9mIHRoZSBwYXJhbGxl bCBjaXBoZXJzLgotKyAqLwotK2ludAotK2ZpcHNfZW5hYmxlZCgpCi0rewotKwlpbnQgbW9kZSA9 IDA7Ci0rCWNvbnN0IGNoYXIqIGZpcHNfcGF0aCA9ICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5h YmxlZCI7Ci0rCUZJTEUgKmZpcHNfZW5hYmxlZCA9IE5VTEw7Ci0rCi0rCWRlYnVnMl9mKCJDaGVj a2luZyBmb3IgRklQUyIpOwotKwotKwkvKiBpZiB3ZSBjYW4ndCBvcGVuIHRoZSBwYXRoIHRvIGZp cHNfZW5hYmxlZCBpdAotKwkgKiBlaXRoZXIgZG9lc24ndCBleGlzdCBvciB0aGVyZSBpcyBhbiBl cnJvci4gSW4gZWl0aGVyCi0rCSAqIGNhc2Ugd2UgdHJlYXQgaXQgYXMgaWYgZmlwcyBpcyAqbm90 KiBlbmFibGVkLgotKwkgKiBUaGlzIGlzIGJlY2F1c2UgSSB3YW50IHRvIGZhaWwgdG93YXJkcyB0 aGUgbW9zdAotKwkgKiBjb21tb24gc2NlbmFyaW8gd2hpY2ggaXMgdGhhdCBmaXBzX2VuYWJsZWQg ZWl0aGVyCi0rCSAqIGRvZXNuJ3QgZXhpc3QgKG5vbi1mZWRvcmEgdmFyaWFudHMpIG9yIGlzbid0 Ci0rCSAqIGVuYWJsZWQuCi0rCSAqLwotKwlmaXBzX2VuYWJsZWQgPSBmb3BlbihmaXBzX3BhdGgs ICJyIik7Ci0rCWlmICghZmlwc19lbmFibGVkKSB7Ci0rCQlkZWJ1ZzNfZigiQ2Fubm90IG9wZW4g cGF0aCB0byBmaXBzX2VuYWJsZWQuIik7Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotKwkvKiBmaXBz X2VuYWJsZWQgZG9lcyBleGlzdCBzbyByZWFkIHRoZSB2YWx1ZS4KLSsJICogSXQgc2hvdWxkIGJl IGVpdGhlciAwIChkaXNhYmxlZCkgb3IgMSAoZW5hYmxlZCkKLSsJICovCi0rCWlmICggMSAhPSBm c2NhbmYoZmlwc19lbmFibGVkLCIlZCIsICZtb2RlKSApIHsKLSsJCS8qIGlmIHdlIGdldCBzb21l IGVycm9yIGhlcmUgdGhlbiB3ZQotKwkJICogYWdhaW4gZmFpbCB0byByZXR1cm5pbmcgZmlwcyBi ZWluZyBkaXNhYmxlZAotKwkJICovCi0rCQlkZWJ1ZzNfZigiRXJyb3IgcHJvY2Vzc2luZyBmaXBz X2VuYWJsZWQuIik7Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotKwkvKiBsZXQgdGhlIHVzZXIga25v dyB0aGUgc3RhdHVzICovCi0rCWlmIChtb2RlID09IDApCi0rCQlkZWJ1ZzNfZigiRklQUyBtb2Rl IGlzIGRpc2FibGVkLiIpOwotKwllbHNlCi0rCQlkZWJ1ZzNfZigiRklQUyBtb2RlIGlzIGVuYWJs ZWQuIik7Ci0rCi0rCXJldHVybiBtb2RlOwotK30KLSsKLSsvKiBoZWxwZXIgZnVuY3Rpb24gdXNl ZCB0byBkZXRlcm1pbmUgbWVtb3J5IHVzYWdlIGR1cmluZwotKyAqIGRldmVsb3BtZW50IHByb2Nl c3MuIE5vdCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24uCi0rICovCi0rdm9pZAotK3JlYWRfbWVt X3N0YXRzKHN0YXRtX3QgKnJlc3VsdCwgaW50IHBvc3RfYXV0aCkKLSt7Ci0rCWlmICghcG9zdF9h dXRoKQotKwkJcmV0dXJuOwotKwotKwljb25zdCBjaGFyKiBzdGF0bV9wYXRoID0gIi9wcm9jL3Nl bGYvc3RhdG0iOwotKwotKwlGSUxFICpmID0gZm9wZW4oc3RhdG1fcGF0aCwiciIpOwotKwlpZigh Zil7Ci0rCQlwZXJyb3Ioc3RhdG1fcGF0aCk7Ci0rCQlhYm9ydCgpOwotKwl9Ci0rCWlmKDcgIT0g ZnNjYW5mKGYsIiVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIsCi0rCQkgICAgICAgJnJlc3Vs dC0+c2l6ZSwgJnJlc3VsdC0+cmVzaWRlbnQsICZyZXN1bHQtPnNoYXJlLCAmcmVzdWx0LT50ZXh0 LCAmcmVzdWx0LT5saWIsCi0rCQkgICAgICAgJnJlc3VsdC0+ZGF0YSwgJnJlc3VsdC0+ZHQpKQot Kwl7Ci0rCQlwZXJyb3Ioc3RhdG1fcGF0aCk7Ci0rCQlhYm9ydCgpOwotKwl9Ci0rCWZjbG9zZShm KTsKLSt9Ci0rCi0gLyogcmVtb3ZlIG5ld2xpbmUgYXQgZW5kIG9mIHN0cmluZyAqLwotIGNoYXIg KgotIGNob3AoY2hhciAqcykKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL21pc2MuaCBv cGVuc3NoLTEwLjNwMS9taXNjLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL21pc2MuaAkyMDI2 LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL21pc2Mu aAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNjYxMDI1NCArMDIwMAotQEAgLTI3Niw0ICsyNzYsMTcg QEAKLSAJCSAgICBzdHJlcnJvcihlcnJubykpOyBcCi0gfSB3aGlsZSAoMCkKLSAKLSt0eXBlZGVm IHN0cnVjdCBzdGF0bV90IHsKLSsgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKLSsgIHVuc2lnbmVkIGxv bmcgcmVzaWRlbnQ7Ci0rICB1bnNpZ25lZCBsb25nIHNoYXJlOwotKyAgdW5zaWduZWQgbG9uZyB0 ZXh0OwotKyAgdW5zaWduZWQgbG9uZyBsaWI7Ci0rICB1bnNpZ25lZCBsb25nIGRhdGE7Ci0rICB1 bnNpZ25lZCBsb25nIGR0OwotK30gc3RhdG1fdDsKLSsKLSt2b2lkIHJlYWRfbWVtX3N0YXRzKHN0 cnVjdCBzdGF0bV90ICosIGludCk7Ci0raW50IGZpcHNfZW5hYmxlZCgpOwotKwotICNlbmRpZiAv KiBfTUlTQ19IICovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9teXByb3Bvc2FsLmgg b3BlbnNzaC0xMC4zcDEvbXlwcm9wb3NhbC5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9teXBy b3Bvc2FsLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3No LTEwLjNwMS9teXByb3Bvc2FsLmgJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjY4MjQ5MDMgKzAyMDAK LUBAIC03NCwxMCArNzQsMjAgQEAKLSAJInJzYS1zaGEyLTUxMiwiIFwKLSAJInJzYS1zaGEyLTI1 NiIKLSAKLSsvKmlmIHdlIGFyZW4ndCB1c2luZyBPcGVuU1NMIHdlIG5lZWQgdG8gcmVtb3ZlCi0r ICogdGhlIHBhcmFsbGVsIENoYUNoYTIwIGNpcGhlciBmcm9tIHRoZSBsaXN0ICovCi0rI2lmZGVm IFdJVEhfT1BFTlNTTAotICNkZWZpbmUJS0VYX1NFUlZFUl9FTkNSWVBUIFwKLSsJImNoYWNoYTIw LXBvbHkxMzA1LW10QGhwbnNzaC5vcmcsIiAgXAotIAkiY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNz aC5jb20sIiBcCi0gCSJhZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFlczI1Ni1nY21Ab3BlbnNzaC5j b20sIiBcCi0gCSJhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0ciIKLSsjZWxzZQotKyNk ZWZpbmUJS0VYX1NFUlZFUl9FTkNSWVBUIFwKLSsJImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2gu Y29tLCIgXAotKwkiYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSxhZXMyNTYtZ2NtQG9wZW5zc2guY29t LCIgXAotKwkiYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIiCi0rI2VuZGlmCi0gCi0g I2RlZmluZSBLRVhfQ0xJRU5UX0VOQ1JZUFQgS0VYX1NFUlZFUl9FTkNSWVBUCi0gCi1kaWZmIC1O dXIgb3BlbnNzaC0xMC4zcDEub3JpZy9udW0uYyBvcGVuc3NoLTEwLjNwMS9udW0uYwotLS0tIG9w ZW5zc2gtMTAuM3AxLm9yaWcvbnVtLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9udW0uYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNjk3NTk4 NSArMDIwMAotQEAgLTAsMCArMSwxNTYgQEAKLSsvKiBDQzAgbGljZW5zZSBhcHBsaWVkLCBzZWUg TElDRU5DRS5tZCAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSAibnVtLmgi Ci0rCi0rI2lmZGVmIFdJVEhfT1BFTlNTTDMKLSsKLSt0eXBlZGVmIGVudW0geyBCSUcgPSAxLCBM SVRUTEUgPSAtMSB9ICBlbmRpYW5fdDsKLSt0eXBlZGVmIGVudW0geyBORUdBVElWRSA9IDB4ZmYs IFBPU0lUSVZFID0gMHgwMCB9IHNpZ25fdDsKLSsKLStzdGF0aWMgZW5kaWFuX3QgbmF0aXZlZW5k aWFuKHZvaWQpCi0rewotKyAgICBjb25zdCBpbnQgZW5kaWFudGVzdCA9IDE7Ci0rCi0rICAgIHJl dHVybiAqKChjaGFyICopJmVuZGlhbnRlc3QpID09IDEgPyBMSVRUTEUgOiBCSUc7Ci0rfQotKwot K3N0YXRpYyBzaWduX3QgcGFyYW1zaWduKGNvbnN0IE9TU0xfUEFSQU0gKnBhcmFtKQotK3sKLSsg ICAgc2l6ZV90IHNyY21zYiA9IG5hdGl2ZWVuZGlhbigpID09IEJJRyA/IDAgOiBwYXJhbS0+ZGF0 YV9zaXplIC0gMTsKLSsKLSsgICAgcmV0dXJuCi0rICAgICAgICBwYXJhbS0+ZGF0YV90eXBlID09 IE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUgotKyAgICAgICAgPyBQT1NJVElWRQotKyAgICAg ICAgOiAoKCh1bnNpZ25lZCBjaGFyICopcGFyYW0tPmRhdGEpW3NyY21zYl0gJiAweDgwCi0rICAg ICAgICAgICA/IE5FR0FUSVZFCi0rICAgICAgICAgICA6IFBPU0lUSVZFKTsKLSt9Ci0rCi0rc3Ry dWN0IG51bWRlc2MgewotKyAgICB2b2lkICpkYXRhOwotKyAgICB1bnNpZ25lZCBpbnQgZGF0YV90 eXBlOyAgICAgLyogVGhlIE9TU0xfUEFSQU0gZGF0YSB0eXBlICovCi0rCi0rICAgIC8qIFRoZXNl IGZpZWxkcyBjb25jZXJuIHRoZSB3aG9sZSBudW1iZXIgKi8KLSsgICAgc2l6ZV90IHNpemU7Ci0r ICAgIGVuZGlhbl90IGVuZGlhbjsKLSsgICAgc2lnbl90IHNpZ247Ci0rCi0rICAgIC8qIFRoZXNl IGZpZWxkcyBjb25jZXJuIHRoZSBsaW1icyBvZiB0aGUgbnVtYmVyICovCi0rICAgIHNpemVfdCBs aW1ic2l6ZTsKLSsgICAgZW5kaWFuX3QgbGltYmVuZGlhbjsKLSsgICAgLyogVGhpcyBpcyBmb3Ig b2RkIGFyY2hzLiAqLwotKyAgICAvKiBzZWUgdGhlIG1hbnVhbCBmb3IgbXB6X2ltcG9ydCgpIGZv ciBhbiBpbiBkZXB0aCBleHBsYW5hdGlvbi4gKi8KLSsgICAgc2l6ZV90IGxpbWJuYWlsYml0czsK LSt9OwotKwotK3N0cnVjdCByZXN1bHRkZXNjIHsKLSsgICAgc2l6ZV90IHNpemU7Ci0rICAgIGlu dCByZXN1bHQ7ICAgICAgICAgICAgICAgICAvKiAxIG9yIChuZWdhdGl2ZSkgZXJyb3IgKi8KLSt9 OwotKwotK3N0YXRpYyBzdHJ1Y3QgcmVzdWx0ZGVzYyBwcm92bnVtX2NvcHkoc3RydWN0IG51bWRl c2MgZGVzdCwgc3RydWN0IG51bWRlc2Mgc3JjKQotK3sKLSsgICAgc3RydWN0IHJlc3VsdGRlc2Mg cmVzdWx0ID0geyBkZXN0LnNpemUsIDEsIH07Ci0rCi0rICAgIGlmIChzcmMuZGF0YV90eXBlICE9 IE9TU0xfUEFSQU1fSU5URUdFUgotKyAgICAgICAgJiYgc3JjLmRhdGFfdHlwZSAhPSBPU1NMX1BB UkFNX1VOU0lHTkVEX0lOVEVHRVIpIHsKLSsgICAgICAgIHJlc3VsdC5yZXN1bHQgPSBQUk9WTlVN X0VfV1JPTkdfVFlQRTsKLSsgICAgICAgIHJldHVybiByZXN1bHQ7Ci0rICAgIH0KLSsKLSsgICAg aWYgKHNyYy5zaXplID09IDApIHsKLSsgICAgICAgIG1lbXNldChkZXN0LmRhdGEsIDAsIGRlc3Qu c2l6ZSk7Ci0rICAgICAgICByZXR1cm4gcmVzdWx0OwotKyAgICB9Ci0rCi0rICAgIC8qIEV4dHJh IGRhdGEgKi8KLSsgICAgc2l6ZV90IHNyY21zYiA9IHNyYy5lbmRpYW4gPT0gQklHID8gMCA6IHNy Yy5zaXplIC0gMTsKLSsgICAgaW50IHNyY21zYjJsc2IgPSBzcmMuZW5kaWFuID09IEJJRyA/IDEg OiAtMTsKLSsKLSsgICAgLyoKLSsgICAgICogSWYgdGhlIHNvdXJjZSBpcyBiaWdnZXIgdGhhbiB0 aGUgZGVzdGluYXRpb24sIGFuYWx5c2UgdG8gc2VlIGlmIHRoZQotKyAgICAgKiBtb3N0IHNpZ25p ZmljYW50IGJ5dGUgaXMganVzdCBwYWRkaW5nIHRoYXQgY2FuIGJlIGlnbm9yZWQuCi0rICAgICAq IFRoZSBydWxlcyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpcyBq dXN0IHBhZGRpbmcKLSsgICAgICogYXJlOgotKyAgICAgKgotKyAgICAgKiAxLiB0aGUgbW9zdCBz aWduaWZpY2FudCBieXRlIGVxdWFscyBzcmNzaWduZWQsIHdoaWNoIGp1c3Qgc28gaGFwcGVucwot KyAgICAgKiAgICB0byBoYXZlIHRoZSAyJ3MgY29tcGxlbWVudCBwYWRkaW5nIHZhbHVlLgotKyAg ICAgKiAyLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIG5leHQgdG8gbW9zdCBzaWdu aWZpY2FudCBieXRlCi0rICAgICAqICAgIGVxdWFscyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQg b2Ygc3Jjc2lnbmVkLgotKyAgICAgKi8KLSsgICAgc2l6ZV90IGVuZCA9IGRlc3QuZGF0YSA9PSBO VUxMID8gMSA6IGRlc3Quc2l6ZTsKLSsgICAgZm9yICg7IHNyYy5zaXplID4gZW5kOyBzcmNtc2Ig Kz0gc3JjbXNiMmxzYiwgc3JjLnNpemUtLSkKLSsgICAgICAgIGlmICgoKHVuc2lnbmVkIGNoYXIg KilzcmMuZGF0YSlbc3JjbXNiXSAhPSBzcmMuc2lnbgotKyAgICAgICAgICAgIHx8ICgoKCh1bnNp Z25lZCBjaGFyICopc3JjLmRhdGEpW3NyY21zYiArIHNyY21zYjJsc2JdICYgMHg4MCkKLSsgICAg ICAgICAgICAgICAgIT0gKHNyYy5zaWduICYgMHg4MCkpKQotKyAgICAgICAgICAgIGJyZWFrOwot KwotKyAgICBpZiAoc3JjLnNpemUgPiBkZXN0LnNpemUpIHsKLSsgICAgICAgIHJlc3VsdC5yZXN1 bHQgPSBQUk9WTlVNX0VfVE9PQklHOwotKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSsgICAgfQot KwotKyAgICBzaXplX3Qgc3JjbHNiID0gc3JjbXNiICsgc3JjbXNiMmxzYiAqIChzcmMuc2l6ZSAt IDEpOwotKwotKyAgICAvKiBTaW1wbGUgY2FzZSwgYWxsIHNpZ25pZmljYW50IGRldGFpbHMgbWF0 Y2ggKi8KLSsgICAgaWYgKGRlc3QuZW5kaWFuID09IHNyYy5lbmRpYW4KLSsgICAgICAgICYmIGRl c3QubGltYnNpemUgPT0gMQotKyAgICAgICAgJiYgZGVzdC5saW1ibmFpbGJpdHMgPT0gMAotKyAg ICAgICAgJiYgKGRlc3QuZGF0YV90eXBlID09IE9TU0xfUEFSQU1fSU5URUdFUiB8fCBzcmMuc2ln biA9PSBQT1NJVElWRSkpIHsKLSsKLSsgICAgICAgIGlmIChzcmMuc2l6ZSA8IGRlc3Quc2l6ZSkg ewotKyAgICAgICAgICAgIHNpemVfdCBwYWRzdGFydCA9IGRlc3QuZW5kaWFuID09IEJJRyA/IDAg OiBkZXN0LnNpemUgLSBzcmMuc2l6ZTsKLSsKLSsgICAgICAgICAgICBtZW1zZXQoKHVuc2lnbmVk IGNoYXIgKilkZXN0LmRhdGEgKyBwYWRzdGFydCwgc3JjLnNpZ24sCi0rICAgICAgICAgICAgICAg ICAgIGRlc3Quc2l6ZSAtIHNyYy5zaXplKTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIHNpemVf dCBkZXN0c3RhcnQgPSBkZXN0LmVuZGlhbiA9PSBCSUcgPyBkZXN0LnNpemUgLSBzcmMuc2l6ZSA6 IDA7Ci0rICAgICAgICBzaXplX3Qgc3Jjc3RhcnQgPSBzcmMuZW5kaWFuID09IEJJRyA/IHNyY21z YiA6IHNyY2xzYjsKLSsKLSsgICAgICAgIG1lbWNweSgodW5zaWduZWQgY2hhciAqKWRlc3QuZGF0 YSArIGRlc3RzdGFydCwKLSsgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNyYy5kYXRh ICsgc3Jjc3RhcnQsCi0rICAgICAgICAgICAgICAgc3JjLnNpemUpOwotKyAgICAgICAgcmV0dXJu IHJlc3VsdDsKLSsgICAgfQotKwotKyAgICAvKiBDb21wbGV4IGNhc2UsIGZvciBzaWduIG9yIGxp bWIgY29udmVyc2lvbi4gIEN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotKyAgICByZXN1bHQucmVz dWx0ID0gUFJPVk5VTV9FX1VOU1VQUE9SVEVEOwotKyAgICByZXR1cm4gcmVzdWx0OwotK30KLSsK LSsjZGVmaW5lIGltcGxlbWVudF9wcm92bnVtKFQsIERUKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBpbnQgcHJvdm51bV9nZXRfIyNUKFQgKmRlc3QsIGNvbnN0IE9TU0xf UEFSQU0gKnBhcmFtKSAgICAgICBcCi0rICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIGVuZGlhbl90IGVuZGlh biA9IG5hdGl2ZWVuZGlhbigpOyAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgc3Ry dWN0IG51bWRlc2MgZGVzdG5kID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgICAgZGVzdCwgRFQsIHNpemVvZihUKSwgZW5kaWFuLCBQT1NJVElWRSwgMSwgZW5k aWFuLCAwIFwKLSsgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgc3RydWN0IG51bWRlc2Mgc3JjbmQgPSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgcGFyYW0tPmRhdGEs IHBhcmFtLT5kYXRhX3R5cGUsIHBhcmFtLT5kYXRhX3NpemUsICAgIFwKLSsgICAgICAgICAgICBl bmRpYW4sIHBhcmFtc2lnbihwYXJhbSksIDEsIGVuZGlhbiwgMCAgICAgICAgICAgICAgXAotKyAg ICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIHN0cnVjdCByZXN1bHRkZXNjIHJlc3VsdCA9IHBy b3ZudW1fY29weShkZXN0bmQsIHNyY25kKTsgXAotKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1 bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg aW50IHByb3ZudW1fc2V0XyMjVChPU1NMX1BBUkFNICpwYXJhbSwgVCBzcmMpICAgICAgICAgXAot KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICBlbmRpYW5fdCBlbmRpYW4gPSBuYXRpdmVlbmRpYW4oKTsgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIHN0cnVjdCBudW1kZXNjIGRlc3RuZCA9IHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIHBhcmFtLT5kYXRh LCBwYXJhbS0+ZGF0YV90eXBlLCBwYXJhbS0+ZGF0YV9zaXplLCAgICBcCi0rICAgICAgICAgICAg ZW5kaWFuLCBQT1NJVElWRSwgMSwgZW5kaWFuLCAwICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgc3RydWN0IG51bWRlc2Mgc3JjbmQgPSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgJnNyYywgRFQsIHNpemVvZihUKSwgZW5k aWFuLCBQT1NJVElWRSwgMSwgZW5kaWFuLCAwIFwKLSsgICAgICAgIH07ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICBzdHJ1Y3QgcmVzdWx0ZGVzYyByZXN1bHQgPSBwcm92bnVtX2NvcHkoZGVzdG5kLCBzcmNu ZCk7IFwKLSsgICAgICAgIHBhcmFtLT5yZXR1cm5fc2l6ZSA9IHJlc3VsdC5zaXplOyAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0KLSsKLStpbXBsZW1lbnRfcHJvdm51 bShzaXplX3QsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUikKLSsKLSsjZW5kaWYgLyogV0lU SF9PUEVOU1NMMyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvbnVtLmggb3BlbnNz aC0xMC4zcDEvbnVtLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL251bS5oCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4zcDEvbnVtLmgJMjAyNi0w Ny0wMiAwMDoyNzoyOS43MjcwMjcwMzMgKzAyMDAKLUBAIC0wLDAgKzEsMTUgQEAKLSsvKiBDQzAg bGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAqLwotKwotKyNpbmNsdWRlICJpbmNsdWRl cy5oIgotKyNpZmRlZiBXSVRIX09QRU5TU0wzCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY29yZS5o PgotKwotKy8qIENvbnZlcnQgYmV0d2VlbiBPU1NMX1BBUkFNIGFuZCBzaXplX3QgKi8KLStpbnQg cHJvdm51bV9nZXRfc2l6ZV90KHNpemVfdCAqZGVzdCwgY29uc3QgT1NTTF9QQVJBTSAqcGFyYW0p OwotK2ludCBwcm92bnVtX3NldF9zaXplX3QoT1NTTF9QQVJBTSAqcGFyYW0sIHNpemVfdCBzcmMp OwotKwotKyNkZWZpbmUgUFJPVk5VTV9FX1dST05HX1RZUEUgICAgLTEKLSsjZGVmaW5lIFBST1ZO VU1fRV9UT09CSUcgICAgICAgIC0yCi0rI2RlZmluZSBQUk9WTlVNX0VfVU5TVVBQT1JURUQgICAt MwotKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wzICovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEu b3JpZy9vc3NsMy1wcm92aWRlci1lcnIuYyBvcGVuc3NoLTEwLjNwMS9vc3NsMy1wcm92aWRlci1l cnIuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvb3NzbDMtcHJvdmlkZXItZXJyLmMJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9vc3NsMy1w cm92aWRlci1lcnIuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNzA4NDE0OSArMDIwMAotQEAgLTAs MCArMSwxMDggQEAKLSsvKiBDQzAgbGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAqLwot KwotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUg Im9zc2wzLXByb3ZpZGVyLWVyci5oIgotKwotKyNpZmRlZiBXSVRIX09QRU5TU0wzCi0rCi0rc3Ry dWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0IHsKLSsgIGNvbnN0IE9TU0xfQ09SRV9IQU5ETEUgKmNv cmU7Ci0rICBPU1NMX0ZVTkNfY29yZV9uZXdfZXJyb3JfZm4gKmNvcmVfbmV3X2Vycm9yOwotKyAg T1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX2RlYnVnX2ZuICpjb3JlX3NldF9lcnJvcl9kZWJ1ZzsK LSsgIE9TU0xfRlVOQ19jb3JlX3ZzZXRfZXJyb3JfZm4gKmNvcmVfdnNldF9lcnJvcjsKLSt9Owot KwotK3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCi0rcHJvdmVycl9uZXdfaGFuZGxlKGNv bnN0IE9TU0xfQ09SRV9IQU5ETEUgKmNvcmUsIGNvbnN0IE9TU0xfRElTUEFUQ0ggKmRpc3BhdGNo KQotK3sKLSsgIC8qCi0rICAgKiBsaWJjcnlwdG8gZ2l2ZXMgcHJvdmlkZXJzIHRoZSB0b29scyB0 byBjcmVhdGUgZXJyb3Igcm91dGluZXMgc2ltaWxhcgotKyAgICogdG8gdGhlIG9uZXMgZGVmaW5l ZCBpbiA8b3BlbnNzbC9lcnIuaD4KLSsgICAqLwotKyAgT1NTTF9GVU5DX2NvcmVfbmV3X2Vycm9y X2ZuICpjX25ld19lcnJvciA9IE5VTEw7Ci0rICBPU1NMX0ZVTkNfY29yZV9zZXRfZXJyb3JfZGVi dWdfZm4gKmNfc2V0X2Vycm9yX2RlYnVnID0gTlVMTDsKLSsgIE9TU0xfRlVOQ19jb3JlX3ZzZXRf ZXJyb3JfZm4gKmNfdnNldF9lcnJvciA9IE5VTEw7Ci0rICBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlv bnNfc3QgKmhhbmRsZSA9IE5VTEw7Ci0rCi0rICBhc3NlcnQoY29yZSAhPSBOVUxMKTsKLSsgIGFz c2VydChkaXNwYXRjaCAhPSBOVUxMKTsKLSsKLSsjaWZuZGVmIERFQlVHCi0rICBpZiAoY29yZSA9 PSBOVUxMIHx8IGRpc3BhdGNoID09IE5VTEwpCi0rICAgIHJldHVybiBOVUxMOwotKyNlbmRpZgot KwotKyAgZm9yICg7IGRpc3BhdGNoLT5mdW5jdGlvbl9pZCAhPSAwOyBkaXNwYXRjaCsrKQotKyAg ICBzd2l0Y2ggKGRpc3BhdGNoLT5mdW5jdGlvbl9pZCkgewotKyAgICBjYXNlIE9TU0xfRlVOQ19D T1JFX05FV19FUlJPUjoKLSsgICAgICBjX25ld19lcnJvciA9IE9TU0xfRlVOQ19jb3JlX25ld19l cnJvcihkaXNwYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgT1NTTF9GVU5DX0NPUkVf U0VUX0VSUk9SX0RFQlVHOgotKyAgICAgIGNfc2V0X2Vycm9yX2RlYnVnID0gT1NTTF9GVU5DX2Nv cmVfc2V0X2Vycm9yX2RlYnVnKGRpc3BhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBP U1NMX0ZVTkNfQ09SRV9WU0VUX0VSUk9SOgotKyAgICAgIGNfdnNldF9lcnJvciA9IE9TU0xfRlVO Q19jb3JlX3ZzZXRfZXJyb3IoZGlzcGF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0r ICBhc3NlcnQoY19uZXdfZXJyb3IgIT0gTlVMTCk7Ci0rICBhc3NlcnQoY19zZXRfZXJyb3JfZGVi dWcgIT0gTlVMTCk7Ci0rICBhc3NlcnQoY192c2V0X2Vycm9yICE9IE5VTEwpOwotKwotKyNpZmRl ZiBOREVCVUcKLSsgIGlmIChjX25ld19lcnJvciA9PSBOVUxMIHx8IGNfc2V0X2Vycm9yX2RlYnVn ID09IE5VTEwgfHwgY192c2V0X2Vycm9yID09IE5VTEwpCi0rICAgIHJldHVybiBOVUxMOwotKyNl bmRpZgotKwotKyAgaWYgKChoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKCpoYW5kbGUpKSkgIT0gTlVM TCkgewotKyAgICBoYW5kbGUtPmNvcmUgPSBjb3JlOwotKyAgICBoYW5kbGUtPmNvcmVfbmV3X2Vy cm9yID0gY19uZXdfZXJyb3I7Ci0rICAgIGhhbmRsZS0+Y29yZV9zZXRfZXJyb3JfZGVidWcgPSBj X3NldF9lcnJvcl9kZWJ1ZzsKLSsgICAgaGFuZGxlLT5jb3JlX3ZzZXRfZXJyb3IgPSBjX3ZzZXRf ZXJyb3I7Ci0rICB9Ci0rICByZXR1cm4gaGFuZGxlOwotK30KLSsKLStzdHJ1Y3QgcHJvdmVycl9m dW5jdGlvbnNfc3QgKgotK3Byb3ZlcnJfZHVwX2hhbmRsZShzdHJ1Y3QgcHJvdmVycl9mdW5jdGlv bnNfc3QgKnNyYykKLSt7Ci0rICBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmRzdCA9IE5V TEw7Ci0rCi0rICBpZiAoc3JjICE9IE5VTEwKLSsgICAgICAmJiAoZHN0ID0gbWFsbG9jKHNpemVv ZigqZHN0KSkpICE9IE5VTEwpIHsKLSsgICAgZHN0LT5jb3JlID0gc3JjLT5jb3JlOwotKyAgICBk c3QtPmNvcmVfbmV3X2Vycm9yID0gc3JjLT5jb3JlX25ld19lcnJvcjsKLSsgICAgZHN0LT5jb3Jl X3NldF9lcnJvcl9kZWJ1ZyA9IHNyYy0+Y29yZV9zZXRfZXJyb3JfZGVidWc7Ci0rICAgIGRzdC0+ Y29yZV92c2V0X2Vycm9yID0gc3JjLT5jb3JlX3ZzZXRfZXJyb3I7Ci0rICB9Ci0rICByZXR1cm4g ZHN0OwotK30KLSsKLSt2b2lkIHByb3ZlcnJfZnJlZV9oYW5kbGUoc3RydWN0IHByb3ZlcnJfZnVu Y3Rpb25zX3N0ICpoYW5kbGUpCi0rewotKyAgZnJlZShoYW5kbGUpOwotK30KLSsKLSt2b2lkIHBy b3ZlcnJfbmV3X2Vycm9yKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxl KQotK3sKLSsgIGhhbmRsZS0+Y29yZV9uZXdfZXJyb3IoaGFuZGxlLT5jb3JlKTsKLSt9Ci0rCi0r dm9pZCBwcm92ZXJyX3NldF9lcnJvcl9kZWJ1Zyhjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlv bnNfc3QgKmhhbmRsZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jKQotK3sKLSsgIGhhbmRsZS0+Y29yZV9z ZXRfZXJyb3JfZGVidWcoaGFuZGxlLT5jb3JlLCBmaWxlLCBsaW5lLCBmdW5jKTsKLSt9Ci0rCi0r dm9pZCBwcm92ZXJyX3NldF9lcnJvcihjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3Qg KmhhbmRsZSwKLSsgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlYXNvbiwgY29uc3Qg Y2hhciAqZm10LCAuLi4pCi0rewotKyAgdmFfbGlzdCBhcDsKLSsKLSsgIHZhX3N0YXJ0KGFwLCBm bXQpOwotKyAgaGFuZGxlLT5jb3JlX3ZzZXRfZXJyb3IoaGFuZGxlLT5jb3JlLCByZWFzb24sIGZt dCwgYXApOwotKyAgdmFfZW5kKGFwKTsKLSt9Ci0rCi0rI2VuZGlmIC8qIFdJVEhfT1BFTlNTTDMg Ki8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5oIG9w ZW5zc2gtMTAuM3AxL29zc2wzLXByb3ZpZGVyLWVyci5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3Jp Zy9vc3NsMy1wcm92aWRlci1lcnIuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2gtMTAuM3AxL29zc2wzLXByb3ZpZGVyLWVyci5oCTIwMjYtMDctMDIgMDA6 Mjc6MjkuNzI3MTM2NTUwICswMjAwCi1AQCAtMCwwICsxLDczIEBACi0rLyogQ0MwIGxpY2Vuc2Ug YXBwbGllZCwgc2VlIExJQ0VOQ0UubWQgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsj aWZkZWYgV0lUSF9PUEVOU1NMMwotKyNpbmNsdWRlIDxzdGRpbnQuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9jb3JlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY29yZV9kaXNwYXRjaC5oPgotKwotKy8q Ci0rICogVGhlIGlkZWEgd2l0aCB0aGlzIGxpYnJhcnkgaXMgdG8gcmVwbGFjZSBPcGVuU1NMJ3Mg RVJSX3JhaXNlKCkgYW5kCi0rICogRVJSX3JhaXNlX2RhdGEoKSB3aXRoIHZhcmlhbnRzIHRoYXQg YXJlIG1vcmUgc3VpdGFibGUgZm9yIHByb3ZpZGVycyB0aGF0Ci0rICogaGF2ZSB0aGVpciBvd24g ZXJyb3IgcmVhc29uIHRhYmxlLgotKyAqCi0rICogVGhpcyBhc3N1bWVzIHZhcmlhZGljIGZ1bmN0 aW9uLWxpa2UgbWFjcm9zLCBpLmUuIEM5OSBvciBuZXdlci4KLSsgKgotKyAqIEEgbWluaW1hbCBh bW91bnQgb2YgcHJlcGFyYXRpb24gaXMgbmVlZGVkIG9uIHByb3ZpZGVyIGluaXRpYWxpemF0aW9u IGFuZAotKyAqIHRha2Vkb3duOgotKyAqCi0rICogMS4gIFRoZSBwcm92aWRlcidzIG91dGdvaW5n IE9TU0xfRElTUEFUQ0ggdGFibGUgbXVzdCBpbmNsdWRlIGFuIGVudHJ5Ci0rICogICAgIGdvdCBP U1NMX0ZVTkNfUFJPVklERVJfR0VUX1JFQVNPTl9TVFJJTkdTLCB3aXRoIGEgZnVuY3Rpb24gdGhh dCByZXR1cm5zCi0rICogICAgIHRoZSBwcm92aWRlcidzIHRhYmxlIG9mIHJlYXNvbnMuCi0rICog ICAgIFRoYXQgdGFibGUgb2YgcmVhc29ucyBpcyBhIHNpbXBsZSBPU1NMX0lURU0gYXJyYXksIHdo ZXJlIGVhY2ggZWxlbWVudAotKyAqICAgICBjb250YWlucyBhIG51bWVyaWMgcmVhc29uIGlkZW50 aXR5IGZvciB0aGUgcmVhc29uLCBhbmQgdGhlIGRlc2NyaXB0aW9uCi0rICogICAgIHRleHQgc3Ry aW5nIGZvciB0aGF0IHJlYXNvbi4KLSsgKiAgICAgRWFjaCBudW1lcmljIHJlYXNvbiBpZGVudGl0 eSBNVVNUIGJlIHVuaXF1ZSB3aXRoaW4gdGhpcyBhcnJheS4KLSsgKgotKyAqIDIuICBPbiBwcm92 aWRlciBpbml0aWFsaXphdGlvbiwgYW4gZXJyb3IgaGFuZGxlIG11c3QgYmUgY3JlYXRlZCB1c2lu ZwotKyAqICAgICBwcm92ZXJyX25ld19oYW5kbGUoKS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIGlz IHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudAotKyAqICAgICB0byBFUlJfcmFpc2UoKSBhbmQgRVJS X3JhaXNlX2RhdGEoKS4KLSsgKgotKyAqIDMuICBPbiBwcm92aWRlciB0YWtlZG93biwgdGhlIGVy cm9yIGhhbmRsZSBtdXN0IGJlIGZyZWVkLCB1c2luZwotKyAqICAgICBwcm92ZXJyX2ZyZWVfaGFu ZGxlKCkuCi0rICoKLSsgKiBXaXRoIHRoaXMgcHJlcGFyYXRpb24sIHRoZSBwcm92aWRlciBjb2Rl IGNhbiB1c2UgRVJSX3JhaXNlKCkgYW5kCi0rICogRVJSX3JhaXNlX2RhdGEoKSAiYXMgdXN1YWwi LCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMKLSsgKiB0aGUg ZXJyb3IgaGFuZGxlIGluc3RlYWQgb2Ygb25lIG9mIHRoZSBPcGVuU1NMIEVSUl9MSUJfIG1hY3Jv cy4KLSsgKi8KLSsKLSsvKgotKyAqIEluIGNhc2UgPG9wZW5zc2wvZXJyLmg+IHdhcyBpbmNsdWRl ZCwgd2UgdGhyb3cgYXdheSBpdHMgZXJyb3IgcmVjb3JkaW5nCi0rICogbWFjcm9zLgotKyAqIE5v dGUgdGhhdCBFUlJfcHV0X2Vycm9yKCkgaXMgTk9UIHJlY3JlYXRlZC4gIEl0J3MgZGVwcmVjYXRl ZCBhbmQgc2hvdWxkIG5vdAotKyAqIGJlIHVzZWQgYW55IG1vcmUuCi0rICovCi0rI3VuZGVmIEVS Ul9wdXRfZXJyb3IKLSsjdW5kZWYgRVJSX3JhaXNlCi0rI3VuZGVmIEVSUl9yYWlzZV9kYXRhCi0r Ci0rI2RlZmluZSBFUlJfcmFpc2UoaGFuZGxlLCByZWFzb24pIEVSUl9yYWlzZV9kYXRhKChoYW5k bGUpLChyZWFzb24pLE5VTEwpCi0rCi0rI2RlZmluZSBFUlJfcmFpc2VfZGF0YShoYW5kbGUsIHJl YXNvbiwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChwcm92ZXJy X25ld19lcnJvcihoYW5kbGUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgIHByb3ZlcnJfc2V0X2Vycm9yX2RlYnVnKGhhbmRsZSwgT1BFTlNTTF9G SUxFLE9QRU5TU0xfTElORSxPUEVOU1NMX0ZVTkMpLCBcCi0rICAgcHJvdmVycl9zZXRfZXJyb3Io aGFuZGxlLCByZWFzb24sIF9fVkFfQVJHU19fKSkKLSsKLSsvKgotKyAqIFRoZSBzdHJ1Y3R1cmUg d2hlcmUgdGhlIGxpYmNyeXB0byBjb3JlIGhhbmRsZSBhbmQgY29yZSBmdW5jdGlvbnMgYXJlCi0r ICogY2FwdHVyZWQuCi0rICovCi0rc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0OwotKwotK3N0 cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCi0rcHJvdmVycl9uZXdfaGFuZGxlKGNvbnN0IE9T U0xfQ09SRV9IQU5ETEUgKmNvcmUsIGNvbnN0IE9TU0xfRElTUEFUQ0ggKmluKTsKLStzdHJ1Y3Qg cHJvdmVycl9mdW5jdGlvbnNfc3QgKgotK3Byb3ZlcnJfZHVwX2hhbmRsZShzdHJ1Y3QgcHJvdmVy cl9mdW5jdGlvbnNfc3QgKnNyYyk7Ci0rdm9pZCBwcm92ZXJyX2ZyZWVfaGFuZGxlKHN0cnVjdCBw cm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlKTsKLSsKLSt2b2lkIHByb3ZlcnJfbmV3X2Vycm9y KGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlKTsKLSt2b2lkIHByb3Zl cnJfc2V0X2Vycm9yX2RlYnVnKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFu ZGxlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50 IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMpOwotK3ZvaWQgcHJvdmVycl9zZXRfZXJyb3IoY29uc3Qg c3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUsCi0rICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCByZWFzb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLSsjZW5kaWYgLyog V0lUSF9PUEVOU1NMMyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcGFja2V0LmMg b3BlbnNzaC0xMC4zcDEvcGFja2V0LmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3BhY2tldC5j CTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEv cGFja2V0LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjcyODI5OTQgKzAyMDAKLUBAIC04Niw2ICs4 Niw3IEBACi0gI2luY2x1ZGUgIm1hYy5oIgotICNpbmNsdWRlICJsb2cuaCIKLSAjaW5jbHVkZSAi Y2Fub2hvc3QuaCIKLSsjaW5jbHVkZSAiY2hhbm5lbHMuaCIKLSAjaW5jbHVkZSAibWlzYy5oIgot ICNpbmNsdWRlICJwYWNrZXQuaCIKLSAjaW5jbHVkZSAic3NoZXJyLmgiCi1AQCAtOTcsNyArOTgs MjAgQEAKLSAjZGVmaW5lIERCRyh4KQotICNlbmRpZgotIAotLSNkZWZpbmUgUEFDS0VUX01BWF9T SVpFICgyNTYgKiAxMDI0KQotKy8qIE9wZW5TU0ggdXNpbmdzIDI1NktCIHBhY2tldCBzaXplIG1h eCBidXQgdGhhdCBjb25zdW1lcyBhCi0rICogbG90IG9mIG1lbW9yeSB3aXRoIHRoZSBidWZmZXJz IHdlIGFyZSB1c2luZy4gSG93ZXZlciwgd2UgbmVlZAotKyAqIGEgbGFyZ2UgcGFja2V0IHNpemUg aWYgdGhlIGJhbm5lciB0aGF0J3MgYmVpbmcgc2VudCBpcyBsYXJnZS4KLSsgKiBTbyB3ZSBuZWVk IGEgMjU2S0IgcGFja2V0IHByZSBhdXRoZW50aWNhdGlvbiBhbmQgYSBzbWFsbGVyIG9uZQotKyAq IGluIHRoaXMgY2FzZSBTU0hfSU9CVUZTWiArIDFLQiwgYWZ0ZXJ3YXJkcy4gU28gd2UgY2hhbmdl Ci0rICogUEFDS0VUX01BWF9TSVpFIGZyb20gYSAjZGVmaW5lIHRvIGEgZ2xvYmFsLiBUaGVuLCBp biB0aGUgZnVuY3Rpb24KLSsgKiBzc2hfcGFja2V0X3NldF9hdXRoZW50Y2F0ZWQgd2UgcmVkdWNl IHRoZSBzaXplIHRvIHNvbWV0aGluZwotKyAqIG1vcmUgbWVtb3J5IGVmZmljaWVudC4gLWNqciAw NC8wNy8yMwotKyAqLwotK3VfaW50IHBhY2tldF9tYXhfc2l6ZSA9IDI1NiAqIDEwMjQ7Ci0rCi0r LyogZ2xvYmFsIHRvIHN1cHBvcnQgZm9yY2VkIHJla2V5aW5nICovCi0raW50IHJla2V5X3JlcXVl c3RlZCA9IDA7Ci0rCi0gCi0gc3RydWN0IHBhY2tldF9zdGF0ZSB7Ci0gCXVpbnQzMl90IHNlcW5y OwotQEAgLTI0NCwxMiArMjU4LDIzIEBACi0gCSAgICAoc3RhdGUtPm91dGdvaW5nX3BhY2tldCA9 IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCB8fAotIAkgICAgKHN0YXRlLT5pbmNvbWluZ19wYWNrZXQg PSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0gCQlnb3RvIGZhaWw7Ci0rCS8qIHRoZXNlIGJ1ZmZl cnMgYXJlIGltcG9ydGFudCBpbiB0ZXJtcyBvZiB0cmFja2luZyBidWZmZXIgdXNhZ2UKLSsJICog c28gd2UgZXhwbGljaXRseSBsYWJlbCBhbmQgdHlwZSB0aGVtIHdpdGggZGVzY3JpcHRpdmUgbmFt ZXMgKi8KLSsJc3NoYnVmX3JlbGFiZWwoc3RhdGUtPmlucHV0LCAiaW5wdXQiKTsKLSsJc3NoYnVm X3R5cGUoc3RhdGUtPmlucHV0LCBCVUZfUEFDS0VUX0lOUFVUKTsKLSsJc3NoYnVmX3JlbGFiZWwo c3RhdGUtPmluY29taW5nX3BhY2tldCwgImlucGFja2V0Iik7Ci0rCXNzaGJ1Zl90eXBlKHN0YXRl LT5pbmNvbWluZ19wYWNrZXQsIEJVRl9QQUNLRVRfSU5DT01JTkcpOwotKwlzc2hidWZfcmVsYWJl bChzdGF0ZS0+b3V0cHV0LCAib3V0cHV0Iik7Ci0rCXNzaGJ1Zl90eXBlKHN0YXRlLT5vdXRwdXQs IEJVRl9QQUNLRVRfT1VUUFVUKTsKLSsJc3NoYnVmX3JlbGFiZWwoc3RhdGUtPm91dGdvaW5nX3Bh Y2tldCwgIm91dHBhY2tldCIpOwotKwlzc2hidWZfdHlwZShzdGF0ZS0+b3V0Z29pbmdfcGFja2V0 LCBCVUZfUEFDS0VUX09VVEdPSU5HKTsKLSsKLSAJVEFJTFFfSU5JVCgmc3RhdGUtPm91dGdvaW5n KTsKLSAJVEFJTFFfSU5JVCgmc3NoLT5wcml2YXRlX2tleXMpOwotIAlUQUlMUV9JTklUKCZzc2gt PnB1YmxpY19rZXlzKTsKLSAJc3RhdGUtPmNvbm5lY3Rpb25faW4gPSAtMTsKLSAJc3RhdGUtPmNv bm5lY3Rpb25fb3V0ID0gLTE7Ci0tCXN0YXRlLT5tYXhfcGFja2V0X3NpemUgPSAzMjc2ODsKLSsJ c3RhdGUtPm1heF9wYWNrZXRfc2l6ZSA9IENIQU5fU0VTX1BBQ0tFVF9ERUZBVUxUOwotIAlzdGF0 ZS0+cGFja2V0X3RpbWVvdXRfbXMgPSAtMTsKLSAJc3RhdGUtPmludGVyYWN0aXZlX21vZGUgPSAx OwotIAlzdGF0ZS0+cW9zX2ludGVyYWN0aXZlID0gc3RhdGUtPnFvc19vdGhlciA9IC0xOwotQEAg LTI5OSw3ICszMjQsNyBAQAotIHNzaF9wYWNrZXRfc2V0X2Nvbm5lY3Rpb24oc3RydWN0IHNzaCAq c3NoLCBpbnQgZmRfaW4sIGludCBmZF9vdXQpCi0gewotIAlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0ZSAq c3RhdGU7Ci0tCWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKm5vbmUgPSBjaXBoZXJfYnlfbmFtZSgi bm9uZSIpOwotKwlzdHJ1Y3Qgc3NoY2lwaGVyICpub25lID0gY2lwaGVyX2J5X25hbWUoIm5vbmUi KTsKLSAJaW50IHI7Ci0gCi0gCWlmIChub25lID09IE5VTEwpIHsKLUBAIC0zMTYsOSArMzQxLDEx IEBACi0gCXN0YXRlLT5jb25uZWN0aW9uX2luID0gZmRfaW47Ci0gCXN0YXRlLT5jb25uZWN0aW9u X291dCA9IGZkX291dDsKLSAJaWYgKChyID0gY2lwaGVyX2luaXQoJnN0YXRlLT5zZW5kX2NvbnRl eHQsIG5vbmUsCi0tCSAgICAoY29uc3QgdV9jaGFyICopIiIsIDAsIE5VTEwsIDAsIENJUEhFUl9F TkNSWVBUKSkgIT0gMCB8fAotKwkgICAgKGNvbnN0IHVfY2hhciAqKSIiLCAwLCBOVUxMLCAwLCAw LCBDSVBIRVJfRU5DUllQVCwKLSsJICAgIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbikpICE9 IDAgfHwKLSAJICAgIChyID0gY2lwaGVyX2luaXQoJnN0YXRlLT5yZWNlaXZlX2NvbnRleHQsIG5v bmUsCi0tCSAgICAoY29uc3QgdV9jaGFyICopIiIsIDAsIE5VTEwsIDAsIENJUEhFUl9ERUNSWVBU KSkgIT0gMCkgewotKwkgICAgKGNvbnN0IHVfY2hhciAqKSIiLCAwLCBOVUxMLCAwLCAwLCBDSVBI RVJfREVDUllQVCwKLSsJICAgIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbikpICE9IDApIHsK LSAJCWVycm9yX2ZyKHIsICJjaXBoZXJfaW5pdCBmYWlsZWQiKTsKLSAJCWZyZWUoc3NoKTsgLyog WFhYIG5lZWQgc3NoX2ZyZWVfc2Vzc2lvbl9zdGF0ZT8gKi8KLSAJCXJldHVybiBOVUxMOwotQEAg LTM4OSw3ICs0MTYsNyBAQAotIAotIAlpZiAoc3RhdGUtPnBhY2tldF9kaXNjYXJkX21hYykgewot IAkJY2hhciBidWZbMTAyNF07Ci0tCQlzaXplX3QgZGxlbiA9IFBBQ0tFVF9NQVhfU0laRTsKLSsJ CXNpemVfdCBkbGVuID0gcGFja2V0X21heF9zaXplOwotIAotIAkJaWYgKGRsZW4gPiBzdGF0ZS0+ cGFja2V0X2Rpc2NhcmRfbWFjX2FscmVhZHkpCi0gCQkJZGxlbiAtPSBzdGF0ZS0+cGFja2V0X2Rp c2NhcmRfbWFjX2FscmVhZHk7Ci1AQCAtOTk1LDYgKzEwMjIsNyBAQAotIAljb25zdCBjaGFyICp3 bXNnOwotIAlpbnQgciwgY3J5cHRfdHlwZTsKLSAJY29uc3QgY2hhciAqZGlyID0gbW9kZSA9PSBN T0RFX09VVCA/ICJvdXQiIDogImluIjsKLSsJY2hhciBibG9ja3Nfc1tGTVRfU0NBTEVEX1NUUlNJ WkVdLCBieXRlc19zW0ZNVF9TQ0FMRURfU1RSU0laRV07Ci0gCi0gCWRlYnVnMl9mKCJtb2RlICVk IiwgbW9kZSk7Ci0gCi1AQCAtMTAzNSwxMiArMTA2MywzMiBAQAotIAkJaWYgKChyID0gbWFjX2lu aXQobWFjKSkgIT0gMCkKLSAJCQlyZXR1cm4gcjsKLSAJfQotLQltYWMtPmVuYWJsZWQgPSAxOwot KwotKwkvKiBpZiB3ZSBhcmUgdXNpbmcgTk9ORSBNQUMgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGVu YWJsZSB0aGUKLSsJICogbWFjIHJvdXRpbmVzLiBUaGlzIGRpc2FibGVzIHRoZW0gYW5kIHdlIGNh biBjbGF3IGJhY2sgc29tZSBjeWNsZXMKLSsJICogZnJvbSB0aGUgQ1BVIC1janIgMy8yMS8yMDIz ICovCi0rCWlmIChzc2gtPm5vbmVfbWFjICE9IDEpCi0rCQltYWMtPmVuYWJsZWQgPSAxOwotKwot IAlEQkcoZGVidWdfZigiY2lwaGVyX2luaXQ6ICVzIiwgZGlyKSk7Ci0gCWNpcGhlcl9mcmVlKCpj Y3ApOwotIAkqY2NwID0gTlVMTDsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCWlmIChzdHJjbXAo ZW5jLT5uYW1lLCAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIpID09IDApIHsKLSsJ CWlmIChzdGF0ZS0+YWZ0ZXJfYXV0aGVudGljYXRpb24pCi0rCQkJZW5jLT5jaXBoZXIgPSBjaXBo ZXJfYnlfbmFtZSgKLSsJCQkgICAgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmciKTsK LSsJCWVsc2UKLSsJCQllbmMtPmNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKAotKwkJCSAgICAiY2hh Y2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20iKTsKLSsJCWlmIChlbmMtPmNpcGhlciA9PSBOVUxM KQotKwkJCXJldHVybiByOwotKwl9Ci0rI2VuZGlmCi0gCWlmICgociA9IGNpcGhlcl9pbml0KGNj cCwgZW5jLT5jaXBoZXIsIGVuYy0+a2V5LCBlbmMtPmtleV9sZW4sCi0tCSAgICBlbmMtPml2LCBl bmMtPml2X2xlbiwgY3J5cHRfdHlwZSkpICE9IDApCi0rCSAgICBlbmMtPml2LCBlbmMtPml2X2xl biwKLSsJICAgIGNyeXB0X3R5cGUgPyBzdGF0ZS0+cF9zZW5kLnNlcW5yIDogc3RhdGUtPnBfcmVh ZC5zZXFuciwKLSsJICAgIGNyeXB0X3R5cGUsIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbikp ICE9IDApCi0gCQlyZXR1cm4gcjsKLSAJaWYgKCFzdGF0ZS0+Y2lwaGVyX3dhcm5pbmdfZG9uZSAm JgotIAkgICAgKHdtc2cgPSBjaXBoZXJfd2FybmluZ19tZXNzYWdlKCpjY3ApKSAhPSBOVUxMKSB7 Ci1AQCAtMTA2NCwyNSArMTExMiw0NiBAQAotIAkJfQotIAkJY29tcC0+ZW5hYmxlZCA9IDE7Ci0g CX0KLS0JLyoKLS0JICogVGhlIDJeKGJsb2Nrc2l6ZSoyKSBsaW1pdCBpcyB0b28gZXhwZW5zaXZl IGZvciAzREVTLAotLQkgKiBzbyBlbmZvcmNlIGEgMUdCIGxpbWl0IGZvciBzbWFsbCBibG9ja3Np emVzLgotLQkgKiBTZWUgUkZDNDM0NCBzZWN0aW9uIDMuMi4KLS0JICovCi0tCWlmIChlbmMtPmJs b2NrX3NpemUgPj0gMTYpCi0tCQkqaGFyZF9tYXhfYmxvY2tzID0gKHVpbnQ2NF90KTEgPDwgKGVu Yy0+YmxvY2tfc2l6ZSoyKTsKLS0JZWxzZQotLQkJKmhhcmRfbWF4X2Jsb2NrcyA9ICgodWludDY0 X3QpMSA8PCAzMCkgLyBlbmMtPmJsb2NrX3NpemU7Ci0rCS8qIGdldCB0aGUgbWF4aW11bSBudW1i ZXIgb2YgYmxvY2tzIHRoZSBjaXBoZXIgY2FuCi0rCSAqIGhhbmRsZSBzYWZlbHkgKi8KLSsJKmhh cmRfbWF4X2Jsb2NrcyA9IGNpcGhlcl9yZWtleV9ibG9ja3MoZW5jLT5jaXBoZXIpOwotIAkqbWF4 X2Jsb2NrcyA9ICpoYXJkX21heF9ibG9ja3M7Ci0rCi0rCS8qIGlmIHdlIGhhdmUgYSBjdXN0b20g b1Jla2V5TGltaXQgdXNlIHRoYXQuICovCi0gCWlmIChzdGF0ZS0+cmVrZXlfbGltaXQpIHsKLSAJ CSptYXhfYmxvY2tzID0gTUlOSU1VTSgqbWF4X2Jsb2NrcywKLSAJCSAgICBzdGF0ZS0+cmVrZXlf bGltaXQgLyBlbmMtPmJsb2NrX3NpemUpOwotIAl9Ci0tCWRlYnVnKCJyZWtleSAlcyBhZnRlciAl bGx1IGJsb2NrcyIsIGRpciwKLS0JICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKm1heF9ibG9ja3Mp OwotKwotKwkvKiB0aGVzZSBsaW5lcyBzdXBwb3J0IHRoZSBkZWJ1ZyAqLwotKwlzdHJsY3B5KGJs b2Nrc19zLCAiPyIsIHNpemVvZihibG9ja3NfcykpOwotKwlzdHJsY3B5KGJ5dGVzX3MsICI/Iiwg c2l6ZW9mKGJ5dGVzX3MpKTsKLSsJaWYgKCptYXhfYmxvY2tzICogZW5jLT5ibG9ja19zaXplIDwg TExPTkdfTUFYKSB7Ci0rCQlmbXRfc2NhbGVkKChsb25nIGxvbmcpKm1heF9ibG9ja3MsIGJsb2Nr c19zKTsKLSsJCWZtdF9zY2FsZWQoKGxvbmcgbG9uZykqbWF4X2Jsb2NrcyAqIGVuYy0+YmxvY2tf c2l6ZSwgYnl0ZXNfcyk7Ci0rCX0KLSsJZGVidWcoInJla2V5ICVzIGFmdGVyICVzIGJsb2NrcyAv ICVzQiBkYXRhIiwgZGlyLCBibG9ja3NfcywgYnl0ZXNfcyk7Ci0rCi0gCXJldHVybiAwOwotIH0K LSAKLSsvKiB0aGlzIHN1cHBvcnRzIHRoZSBmb3JjZWQgcmVrZXlpbmcgcmVxdWlyZWQgZm9yIHRo ZSBOT05FIGNpcGhlciAqLwotK3ZvaWQKLStwYWNrZXRfcmVxdWVzdF9yZWtleWluZyh2b2lkKQot K3sKLSsJcmVrZXlfcmVxdWVzdGVkID0gMTsKLSt9Ci0rCi0rLyogdXNlZCB0byBkZXRlcm1pbmUg aWYgcHJlIG9yIHBvc3QgYXV0aCB3aGVuIHJla2V5aW5nIGZvciBhZXMtY3RyCi0rICogYW5kIG5v bmUgY2lwaGVyIHN3aXRjaCAqLwotK2ludAotK3BhY2tldF9hdXRoZW50aWNhdGlvbl9zdGF0ZShj b25zdCBzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0ZSAqc3RhdGUg PSBzc2gtPnN0YXRlOwotKwotKwlyZXR1cm4gc3RhdGUtPmFmdGVyX2F1dGhlbnRpY2F0aW9uOwot K30KLSsKLSAjZGVmaW5lIE1BWF9QQUNLRVRTCSgxVTw8MzEpCi0gLyoKLSAgKiBDaGVja3Mgd2hl dGhlciB0aGUgcGFja2V0LSBvciBibG9jay0gYmFzZWQgcmVrZXlpbmcgbGltaXRzIGhhdmUgYmVl bgotQEAgLTExNDAsNiArMTIwOSwxNCBAQAotIAlpZiAoc3RhdGUtPnBfc2VuZC5wYWNrZXRzID09 IDAgJiYgc3RhdGUtPnBfcmVhZC5wYWNrZXRzID09IDApCi0gCQlyZXR1cm4gMDsKLSAKLSsgICAg ICAgIC8qIHVzZWQgdG8gZm9yY2UgcmVrZXlpbmcgd2hlbiBjYWxsZWQgZm9yIGJ5IHRoZSBub25l Ci0rICAgICAgICAgKiBjaXBoZXIgc3dpdGNoIGFuZCBhZXMtbXQtY3RyIG1ldGhvZHMgLWNqciAq LwotKyAgICAgICAgaWYgKHJla2V5X3JlcXVlc3RlZCA9PSAxKSB7Ci0rCQlkZWJ1Z19mKCJHb3Qg dGhlIHJla2V5IHJlcXVlc3QiKTsKLSsJCXJla2V5X3JlcXVlc3RlZCA9IDA7Ci0rICAgICAgICAg ICAgICAgIHJldHVybiAxOwotKyAgICAgICAgfQotKwotIAkvKiBUaW1lLWJhc2VkIHJla2V5aW5n ICovCi0gCWlmIChzdGF0ZS0+cmVrZXlfaW50ZXJ2YWwgIT0gMCAmJgotIAkgICAgKGludDY0X3Qp c3RhdGUtPnJla2V5X3RpbWUgKyBzdGF0ZS0+cmVrZXlfaW50ZXJ2YWwgPD0gbW9ub3RpbWUoKSkK LUBAIC0xNTA2LDcgKzE1ODMsNyBAQAotIAlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0ZSAqc3RhdGUgPSBz c2gtPnN0YXRlOwotIAlpbnQgbGVuLCByLCBtc19yZW1haW4gPSAwOwotIAlzdHJ1Y3QgcG9sbGZk IHBmZDsKLS0JY2hhciBidWZbODE5Ml07Ci0rCWNoYXIgYnVmW1NTSF9JT0JVRlNaXTsKLSAJc3Ry dWN0IHRpbWV2YWwgc3RhcnQ7Ci0gCXN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlYywgKnRpbWVzcGVj cCA9IE5VTEw7Ci0gCi1AQCAtMTYxMCw3ICsxNjg3LDcgQEAKLSAJCQlyZXR1cm4gMDsgLyogcGFj a2V0IGlzIGluY29tcGxldGUgKi8KLSAJCXN0YXRlLT5wYWNrbGVuID0gUEVFS19VMzIoY3ApOwot IAkJaWYgKHN0YXRlLT5wYWNrbGVuIDwgNCArIDEgfHwKLS0JCSAgICBzdGF0ZS0+cGFja2xlbiA+ IFBBQ0tFVF9NQVhfU0laRSkKLSsJCSAgICBzdGF0ZS0+cGFja2xlbiA+IHBhY2tldF9tYXhfc2l6 ZSkKLSAJCQlyZXR1cm4gU1NIX0VSUl9NRVNTQUdFX0lOQ09NUExFVEU7Ci0gCX0KLSAJbmVlZCA9 IHN0YXRlLT5wYWNrbGVuICsgNDsKLUBAIC0xNjY5LDcgKzE3NDYsNyBAQAotIAkJICAgIHNzaGJ1 Zl9wdHIoc3RhdGUtPmlucHV0KSwgc3NoYnVmX2xlbihzdGF0ZS0+aW5wdXQpKSAhPSAwKQotIAkJ CXJldHVybiAwOwotIAkJaWYgKHN0YXRlLT5wYWNrbGVuIDwgMSArIDQgfHwKLS0JCSAgICBzdGF0 ZS0+cGFja2xlbiA+IFBBQ0tFVF9NQVhfU0laRSkgewotKwkJICAgIHN0YXRlLT5wYWNrbGVuID4g cGFja2V0X21heF9zaXplKSB7Ci0gI2lmZGVmIFBBQ0tFVF9ERUJVRwotIAkJCXNzaGJ1Zl9kdW1w KHN0YXRlLT5pbnB1dCwgc3RkZXJyKTsKLSAjZW5kaWYKLUBAIC0xNjk2LDcgKzE3NzMsNyBAQAot IAkJCWdvdG8gb3V0OwotIAkJc3RhdGUtPnBhY2tsZW4gPSBQRUVLX1UzMihzc2hidWZfcHRyKHN0 YXRlLT5pbmNvbWluZ19wYWNrZXQpKTsKLSAJCWlmIChzdGF0ZS0+cGFja2xlbiA8IDEgKyA0IHx8 Ci0tCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBQQUNLRVRfTUFYX1NJWkUpIHsKLSsJCSAgICBzdGF0 ZS0+cGFja2xlbiA+IHBhY2tldF9tYXhfc2l6ZSkgewotICNpZmRlZiBQQUNLRVRfREVCVUcKLSAJ CQlmcHJpbnRmKHN0ZGVyciwgImlucHV0OiBcbiIpOwotIAkJCXNzaGJ1Zl9kdW1wKHN0YXRlLT5p bnB1dCwgc3RkZXJyKTsKLUBAIC0xNzA1LDcgKzE3ODIsNyBAQAotICNlbmRpZgotIAkJCWxvZ2l0 KCJCYWQgcGFja2V0IGxlbmd0aCAldS4iLCBzdGF0ZS0+cGFja2xlbik7Ci0gCQkJcmV0dXJuIHNz aF9wYWNrZXRfc3RhcnRfZGlzY2FyZChzc2gsIGVuYywgbWFjLCAwLAotLQkJCSAgICBQQUNLRVRf TUFYX1NJWkUpOwotKwkJCSAgICBwYWNrZXRfbWF4X3NpemUpOwotIAkJfQotIAkJaWYgKChyID0g c3NoYnVmX2NvbnN1bWUoc3RhdGUtPmlucHV0LCBibG9ja19zaXplKSkgIT0gMCkKLSAJCQlnb3Rv IG91dDsKLUBAIC0xNzI4LDcgKzE4MDUsNyBAQAotIAkJbG9naXQoInBhZGRpbmcgZXJyb3I6IG5l ZWQgJWQgYmxvY2sgJWQgbW9kICVkIiwKLSAJCSAgICBuZWVkLCBibG9ja19zaXplLCBuZWVkICUg YmxvY2tfc2l6ZSk7Ci0gCQlyZXR1cm4gc3NoX3BhY2tldF9zdGFydF9kaXNjYXJkKHNzaCwgZW5j LCBtYWMsIDAsCi0tCQkgICAgUEFDS0VUX01BWF9TSVpFIC0gYmxvY2tfc2l6ZSk7Ci0rCQkgICAg cGFja2V0X21heF9zaXplIC0gYmxvY2tfc2l6ZSk7Ci0gCX0KLSAJLyoKLSAJICogY2hlY2sgaWYg dGhlIGVudGlyZSBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kCi1AQCAtMTc3MiwxMSArMTg0 OSwxMSBAQAotIAkJCWlmIChyICE9IFNTSF9FUlJfTUFDX0lOVkFMSUQpCi0gCQkJCWdvdG8gb3V0 OwotIAkJCWxvZ2l0KCJDb3JydXB0ZWQgTUFDIG9uIGlucHV0LiIpOwotLQkJCWlmIChuZWVkICsg YmxvY2tfc2l6ZSA+IFBBQ0tFVF9NQVhfU0laRSkKLSsJCQlpZiAobmVlZCArIGJsb2NrX3NpemUg PiBwYWNrZXRfbWF4X3NpemUpCi0gCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwot IAkJCXJldHVybiBzc2hfcGFja2V0X3N0YXJ0X2Rpc2NhcmQoc3NoLCBlbmMsIG1hYywKLSAJCQkg ICAgc3NoYnVmX2xlbihzdGF0ZS0+aW5jb21pbmdfcGFja2V0KSwKLS0JCQkgICAgUEFDS0VUX01B WF9TSVpFIC0gbmVlZCAtIGJsb2NrX3NpemUpOwotKwkJCSAgICBwYWNrZXRfbWF4X3NpemUgLSBu ZWVkIC0gYmxvY2tfc2l6ZSk7Ci0gCQl9Ci0gCQkvKiBSZW1vdmUgTUFDIGZyb20gaW5wdXQgYnVm ZmVyICovCi0gCQlEQkcoZGVidWcoIk1BQyAjJWQgb2siLCBzdGF0ZS0+cF9yZWFkLnNlcW5yKSk7 Ci1AQCAtMTk5OCw3ICsyMDc1LDcgQEAKLSAJaW50IHI7Ci0gCXNpemVfdCBybGVuOwotIAotLQlp ZiAoKHIgPSBzc2hidWZfcmVhZChmZCwgc3RhdGUtPmlucHV0LCBQQUNLRVRfTUFYX1NJWkUsICZy bGVuKSkgIT0gMCkKLSsJaWYgKChyID0gc3NoYnVmX3JlYWQoZmQsIHN0YXRlLT5pbnB1dCwgcGFj a2V0X21heF9zaXplLCAmcmxlbikpICE9IDApCi0gCQlyZXR1cm4gcjsKLSAKLSAJaWYgKHN0YXRl LT5wYWNrZXRfZGlzY2FyZCkgewotQEAgLTIwNzcsMTcgKzIxNTQsMjEgQEAKLSAJc3dpdGNoIChy KSB7Ci0gCWNhc2UgU1NIX0VSUl9DT05OX0NMT1NFRDoKLSAJCXNzaF9wYWNrZXRfY2xlYXJfa2V5 cyhzc2gpOwotKwkJc3NocGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOwotIAkJbG9nZGllKCJDb25u ZWN0aW9uIGNsb3NlZCBieSAlcyIsIHJlbW90ZV9pZCk7Ci0gCWNhc2UgU1NIX0VSUl9DT05OX1RJ TUVPVVQ6Ci0gCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3NoKTsKLSsJCXNzaHBrdF9maW5hbF9s b2dfZW50cnkoc3NoKTsKLSAJCWxvZ2RpZSgiQ29ubmVjdGlvbiAlcyAlcyB0aW1lZCBvdXQiLAot IAkJICAgIHNzaC0+c3RhdGUtPnNlcnZlcl9zaWRlID8gImZyb20iIDogInRvIiwgcmVtb3RlX2lk KTsKLSAJY2FzZSBTU0hfRVJSX0RJU0NPTk5FQ1RFRDoKLSAJCXNzaF9wYWNrZXRfY2xlYXJfa2V5 cyhzc2gpOwotKwkJc3NocGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOwotIAkJbG9nZGllKCJEaXNj b25uZWN0ZWQgZnJvbSAlcyIsIHJlbW90ZV9pZCk7Ci0gCWNhc2UgU1NIX0VSUl9TWVNURU1fRVJS T1I6Ci0gCQlpZiAoZXJybm8gPT0gRUNPTk5SRVNFVCkgewotIAkJCXNzaF9wYWNrZXRfY2xlYXJf a2V5cyhzc2gpOwotKwkJCXNzaHBrdF9maW5hbF9sb2dfZW50cnkoc3NoKTsKLSAJCQlsb2dkaWUo IkNvbm5lY3Rpb24gcmVzZXQgYnkgJXMiLCByZW1vdGVfaWQpOwotIAkJfQotIAkJLyogRkFMTFRI Uk9VR0ggKi8KLUBAIC0yMTI5LDYgKzIyMTAsMjQgQEAKLSAJbG9nZGllX2YoInNob3VsZCBoYXZl IGV4aXRlZCIpOwotIH0KLSAKLSsvKiB0aGlzIHByaW50cyBvdXQgdGhlIGZpbmFsIGxvZyBlbnRy eSAqLwotK3ZvaWQKLStzc2hwa3RfZmluYWxfbG9nX2VudHJ5IChzdHJ1Y3Qgc3NoICpzc2gpIHsK LSsJZG91YmxlIHRvdGFsX3RpbWU7Ci0rCi0rCWlmIChzc2gtPnN0YXJ0X3RpbWUgPCAxKQotKwkJ LyogdGhpcyB3aWxsIHByb2R1Y2UgYSBOYU4gaW4gdGhlIG91dHB1dC4gLWNqciAqLwotKwkJdG90 YWxfdGltZSA9IDA7Ci0rCWVsc2UKLSsJCXRvdGFsX3RpbWUgPSBtb25vdGltZV9kb3VibGUoKSAt IHNzaC0+c3RhcnRfdGltZTsKLSsKLSsJbG9naXQoIlNTSDogU2VydmVyO0xUeXBlOiBUaHJvdWdo cHV0O1JlbW90ZTogJXMtJWQ7SU46ICVsdTtPVVQ6ICVsdTtEdXJhdGlvbjogJS4xZjt0UHV0X2lu OiAlLjFmO3RQdXRfb3V0OiAlLjFmIiwKLSsJICAgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwg c3NoX3JlbW90ZV9wb3J0KHNzaCksCi0rCSAgICAgIHNzaC0+c3RkaW5fYnl0ZXMsIHNzaC0+ZmRv dXRfYnl0ZXMsIHRvdGFsX3RpbWUsCi0rCSAgICAgIHNzaC0+c3RkaW5fYnl0ZXMgLyB0b3RhbF90 aW1lLAotKwkgICAgICBzc2gtPmZkb3V0X2J5dGVzIC8gdG90YWxfdGltZSk7Ci0rfQotKwotIC8q Ci0gICogTG9ncyB0aGUgZXJyb3IgcGx1cyBjb25zdHJ1Y3RzIGFuZCBzZW5kcyBhIGRpc2Nvbm5l Y3QgcGFja2V0LCBjbG9zZXMgdGhlCi0gICogY29ubmVjdGlvbiwgYW5kIGV4aXRzLiAgVGhpcyBm dW5jdGlvbiBuZXZlciByZXR1cm5zLiBUaGUgZXJyb3IgbWVzc2FnZQotQEAgLTIzODMsMTAgKzI0 ODIsMTkgQEAKLSAJc3NoLT5rZXgtPnNlcnZlciA9IDE7IC8qIFhYWCB1bmlmeT8gKi8KLSB9Ci0g Ci0rLyogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiB0byBwb3N0IGF1dGgKLSsgKiBX aGlsZSB3ZSBhcmUgaGVyZSBhbHNvIGRlY3JlYXNlIHRoZSBzaXplIG9mCi0rICogcGFja2V0X21h eF9zaXplIHRvIHNvbWV0aGluZyBtb3JlIHJlYXNvbmFibGUuCi0rICogSW4gdGhpcyBjYXNlIHRo YXRzIDMzay4gV2hpY2ggaXMgdGhlIHNpemUgb2YKLSsgKiB0aGUgbGFyZ2VzdCBwYWNrZXQgd2Ug ZXhwZWN0IHRvIHNlZSBhbmQgc29tZSBzcGFjZQotKyAqIGZvciBvdmVyaGVhZC4gVGhpcyByZWR1 Y2VzIG1lbW9yeSB1c2FnZSBpbiBoaWdoCi0rICogQkRQIGVudmlyb25tZW50cyB3aXRob3V0IGlt cGFjdGluZyBwZXJmb3JtYW5jZQotKyAqIC1janIgNC8xMS8yMyAqLwotIHZvaWQKLSBzc2hfcGFj a2V0X3NldF9hdXRoZW50aWNhdGVkKHN0cnVjdCBzc2ggKnNzaCkKLSB7Ci0gCXNzaC0+c3RhdGUt PmFmdGVyX2F1dGhlbnRpY2F0aW9uID0gMTsKLSsJcGFja2V0X21heF9zaXplID0gU1NIX0lPQlVG U1ogKyAxMDI0OwotIH0KLSAKLSB2b2lkICoKLUBAIC0zMDI1LDYgKzMxMzMsMjAgQEAKLSAJcmV0 dXJuIDA7Ci0gfQotIAotKy8qIHVzZWQgZm9yIGNpcGhlciBzd2l0Y2hpbmcKLSsgKiBvbmx5IGNh bGxlZCBpbiBjaXBoZXItc3d0aWNoLmMgKi8KLSt2b2lkICoKLStzc2hfcGFja2V0X2dldF9zZW5k X2NvbnRleHQoc3RydWN0IHNzaCAqc3NoKQotK3sKLSsgICAgICAgIHJldHVybiBzc2gtPnN0YXRl LT5zZW5kX2NvbnRleHQ7Ci0rfQotKwotK3ZvaWQgKgotK3NzaF9wYWNrZXRfZ2V0X3JlY2VpdmVf Y29udGV4dChzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKyAgICAgICAgcmV0dXJuIHNzaC0+c3RhdGUt PnJlY2VpdmVfY29udGV4dDsKLSt9Ci0rCi0gc3RhdGljIGNoYXIgKgotIGZvcm1hdF90cmFmZmlj X3N0YXRzKHN0cnVjdCBwYWNrZXRfc3RhdGUgKnBzKQotIHsKLWRpZmYgLU51ciBvcGVuc3NoLTEw LjNwMS5vcmlnL3BhY2tldC5oIG9wZW5zc2gtMTAuM3AxL3BhY2tldC5oCi0tLS0gb3BlbnNzaC0x MC4zcDEub3JpZy9wYWNrZXQuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAot KysrIG9wZW5zc2gtMTAuM3AxL3BhY2tldC5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI3NjM2MjIz ICswMjAwCi1AQCAtODksNiArODksMTcgQEAKLSAKLSAJLyogQVBQIGRhdGEgKi8KLSAJdm9pZCAq YXBwX2RhdGE7Ci0rCi0rCS8qIGxvZ2dpbmcgZGF0YSBmb3IgU2VydmVyTG9nZ2luZyBwYXRjaCov Ci0rCWRvdWJsZSBzdGFydF90aW1lOwotKwl1X2xvbmcgZmRvdXRfYnl0ZXM7Ci0rCXVfbG9uZyBz dGRpbl9ieXRlczsKLSsKLSsJLyogdHJhY2sgdGhhdCB3ZSBhcmUgaW4gYSBub25lIGNpcGhlciBz dGF0ZSAqLwotKwlpbnQgbm9uZTsKLSsKLSsJLyogdHJhY2sgaWYgd2UgaGF2ZSBkaXNhYmxlZCB0 aGUgbWFjIGFzIHdlbGwgKi8KLSsJaW50IG5vbmVfbWFjOwotIH07Ci0gCi0gdHlwZWRlZiBpbnQg KHNzaF9wYWNrZXRfaG9va19mbikoc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3NoYnVmICosCi1AQCAt MTU4LDYgKzE2OSw4IEBACi0gaW50CSBzc2hfcGFja2V0X3NldF9tYXhzaXplKHN0cnVjdCBzc2gg KiwgdV9pbnQpOwotIHVfaW50CSBzc2hfcGFja2V0X2dldF9tYXhzaXplKHN0cnVjdCBzc2ggKik7 Ci0gCi0raW50CSBwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoY29uc3Qgc3RydWN0IHNzaCAq KTsKLSsKLSBpbnQJIHNzaF9wYWNrZXRfZ2V0X3N0YXRlKHN0cnVjdCBzc2ggKiwgc3RydWN0IHNz aGJ1ZiAqKTsKLSBpbnQJIHNzaF9wYWNrZXRfc2V0X3N0YXRlKHN0cnVjdCBzc2ggKiwgc3RydWN0 IHNzaGJ1ZiAqKTsKLSAKLUBAIC0xNzMsNiArMTg2LDEzIEBACi0gCi0gdm9pZAkqc3NoX3BhY2tl dF9nZXRfaW5wdXQoc3RydWN0IHNzaCAqKTsKLSB2b2lkCSpzc2hfcGFja2V0X2dldF9vdXRwdXQo c3RydWN0IHNzaCAqKTsKLSt2b2lkCSpzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQoc3Ry dWN0IHNzaCAqKTsKLSt2b2lkCSpzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQoc3RydWN0IHNz aCAqKTsKLSsKLSsvKiBmb3IgZm9yY2VkIHBhY2tldCByZWtleWluZyBwb3N0IGF1dGggKi8KLSt2 b2lkCSBwYWNrZXRfcmVxdWVzdF9yZWtleWluZyh2b2lkKTsKLSsvKiBmaW5hbCBsb2cgZW50cnkg c3VwcG9ydCAqLwotK3ZvaWQJIHNzaHBrdF9maW5hbF9sb2dfZW50cnkgKHN0cnVjdCBzc2ggKik7 Ci0gCi0gLyogbmV3IEFQSSAqLwotIGludAlzc2hwa3Rfc3RhcnQoc3RydWN0IHNzaCAqc3NoLCB1 X2NoYXIgdHlwZSk7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9wb2x5MTMwNS5jIG9w ZW5zc2gtMTAuM3AxL3BvbHkxMzA1LmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3BvbHkxMzA1 LmMJMjAyNi0wNy0wMiAwMDoyNzowNi4wOTcyMzQ0NjcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNw MS9wb2x5MTMwNS5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI3OTIxNDc5ICswMjAwCi1AQCAtMTEs NiArMTEsMTYgQEAKLSAKLSAjaW5jbHVkZSAicG9seTEzMDUuaCIKLSAKLSsjaWZkZWYgT1BFTlNT TF9IQVZFX1BPTFlfRVZQCi0rdm9pZAotK3BvbHkxMzA1X2F1dGgoRVZQX01BQ19DVFggKnBvbHlf Y3R4LCB1bnNpZ25lZCBjaGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBjb25zdCB1bnNpZ25lZCBj aGFyICptLCBzaXplX3QgaW5sZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W1BPTFkxMzA1X0tF WUxFTl0pIHsKLSsJc2l6ZV90IHBvbHlfb3V0X2xlbjsKLSsJRVZQX01BQ19pbml0KHBvbHlfY3R4 LCAoY29uc3QgdV9jaGFyICopa2V5LCBQT0xZMTMwNV9LRVlMRU4sIE5VTEwpOwotKwlFVlBfTUFD X3VwZGF0ZShwb2x5X2N0eCwgbSwgaW5sZW4pOwotKwlFVlBfTUFDX2ZpbmFsKHBvbHlfY3R4LCBv dXQsICZwb2x5X291dF9sZW4sIChzaXplX3QpUE9MWTEzMDVfVEFHTEVOKTsKLSt9Ci0rI2Vsc2UK LSsKLSAjZGVmaW5lIG11bDMyeDMyXzY0KGEsYikgKCh1aW50NjRfdCkoYSkgKiAoYikpCi0gCi0g I2RlZmluZSBVOFRPMzJfTEUocCkgXAotQEAgLTI4LDcgKzM4LDcgQEAKLSAJfSB3aGlsZSAoMCkK LSAKLSB2b2lkCi0tcG9seTEzMDVfYXV0aCh1bnNpZ25lZCBjaGFyIG91dFtQT0xZMTMwNV9UQUdM RU5dLCBjb25zdCB1bnNpZ25lZCBjaGFyICptLCBzaXplX3QgaW5sZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIga2V5W1BPTFkxMzA1X0tFWUxFTl0pIHsKLStwb2x5MTMwNV9hdXRoKGNoYXIgKnVudXNl ZCwgdW5zaWduZWQgY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdW5zaWduZWQgY2hh ciAqbSwgc2l6ZV90IGlubGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtQT0xZMTMwNV9LRVlM RU5dKSB7Ci0gCXVpbnQzMl90IHQwLHQxLHQyLHQzOwotIAl1aW50MzJfdCBoMCxoMSxoMixoMyxo NDsKLSAJdWludDMyX3QgcjAscjEscjIscjMscjQ7Ci1AQCAtMTU1LDMgKzE2NSw0IEBACi0gCVUz MlRPOF9MRSgmb3V0WyA4XSwgZjIpOyBmMyArPSAoZjIgPj4gMzIpOwotIAlVMzJUTzhfTEUoJm91 dFsxMl0sIGYzKTsKLSB9Ci0rI2VuZGlmIC8qIE9QRU5TU0xfSEFWRV9QT0xZX0VWUCAqLwotZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcG9seTEzMDUuaCBvcGVuc3NoLTEwLjNwMS9wb2x5 MTMwNS5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9wb2x5MTMwNS5oCTIwMjYtMDctMDIgMDA6 Mjc6MDYuMDk3MjM0NDY3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvcG9seTEzMDUuaAkyMDI2 LTA3LTAyIDAwOjI3OjI5LjcyODI5OTAwNSArMDIwMAotQEAgLTEzLDggKzEzLDE1IEBACi0gI2Rl ZmluZSBQT0xZMTMwNV9LRVlMRU4JCTMyCi0gI2RlZmluZSBQT0xZMTMwNV9UQUdMRU4JCTE2Ci0g Ci0tdm9pZCBwb2x5MTMwNV9hdXRoKHVfY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3Qg dV9jaGFyICptLCBzaXplX3QgaW5sZW4sCi0rI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAot KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotK3ZvaWQgcG9seTEzMDVfYXV0aChFVlBfTUFD X0NUWCAqcG9seV9rZXksIHVfY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdV9jaGFy ICptLCBzaXplX3QgaW5sZW4sCi0rICAgIGNvbnN0IHVfY2hhciBrZXlbUE9MWTEzMDVfS0VZTEVO XSkKLSsjZWxzZQotK3ZvaWQgcG9seTEzMDVfYXV0aChjaGFyICp1bnVzZWQsIHVfY2hhciBvdXRb UE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdV9jaGFyICptLCBzaXplX3QgaW5sZW4sCi0gICAgIGNv bnN0IHVfY2hhciBrZXlbUE9MWTEzMDVfS0VZTEVOXSkKLSsjZW5kaWYKLSAgICAgX19hdHRyaWJ1 dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCBQT0xZMTMwNV9UQUdMRU4pKSkKLSAg ICAgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19idWZmZXJfXywgMiwgMykpKQotICAgICBf X2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDQsIFBPTFkxMzA1X0tFWUxF TikpKTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3Byb2dyZXNzbWV0ZXIuYyBvcGVu c3NoLTEwLjNwMS9wcm9ncmVzc21ldGVyLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3Byb2dy ZXNzbWV0ZXIuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5NzIzNDQ2NyArMDIwMAotKysrIG9wZW5z c2gtMTAuM3AxL3Byb2dyZXNzbWV0ZXIuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyODQxMzMyMiAr MDIwMAotQEAgLTY1LDYgKzY1LDggQEAKLSBzdGF0aWMgb2ZmX3Qgc3RhcnRfcG9zOwkJLyogaW5p dGlhbCBwb3NpdGlvbiBvZiB0cmFuc2ZlciAqLwotIHN0YXRpYyBvZmZfdCBlbmRfcG9zOwkJLyog ZW5kaW5nIHBvc2l0aW9uIG9mIHRyYW5zZmVyICovCi0gc3RhdGljIG9mZl90IGN1cl9wb3M7CQkv KiB0cmFuc2ZlciBwb3NpdGlvbiBhcyBvZiBsYXN0IHJlZnJlc2ggKi8KLStzdGF0aWMgb2ZmX3Qg bGFzdF9wb3M7Ci0rc3RhdGljIG9mZl90IG1heF9kZWx0YV9wb3MgPSAwOwotIHN0YXRpYyB2b2xh dGlsZSBvZmZfdCAqY291bnRlcjsJLyogcHJvZ3Jlc3MgY291bnRlciAqLwotIHN0YXRpYyBsb25n IHN0YWxsZWQ7CQkvKiBob3cgbG9uZyB3ZSBoYXZlIGJlZW4gc3RhbGxlZCAqLwotIHN0YXRpYyBs b25nIGxvbmcgYnl0ZXNfcGVyX3NlY29uZDsgLyogY3VycmVudCBzcGVlZCBpbiBieXRlcyBwZXIg c2Vjb25kICovCi1AQCAtMTMxLDYgKzEzMyw3IEBACi0gCWxvbmcgbG9uZyBjdXJfc3BlZWQ7Ci0g CWludCBob3VycywgbWludXRlcywgc2Vjb25kczsKLSAJaW50IGZpbGVfbGVuLCBjb2xzOwotKwlv ZmZfdCBkZWx0YV9wb3M7Ci0gCi0gCWlmIChmaWxlID09IE5VTEwgfHwgKCFmb3JjZV91cGRhdGUg JiYgIWFsYXJtX2ZpcmVkICYmICF3aW5fcmVzaXplZCkgfHwKLSAJICAgICFjYW5fb3V0cHV0KCkp Ci1AQCAtMTQ3LDYgKzE1MCwxMCBAQAotIAlub3cgPSBtb25vdGltZV9kb3VibGUoKTsKLSAJYnl0 ZXNfbGVmdCA9IGVuZF9wb3MgLSBjdXJfcG9zOwotIAotKwlkZWx0YV9wb3MgPSBjdXJfcG9zIC0g bGFzdF9wb3M7Ci0rCWlmIChkZWx0YV9wb3MgPiBtYXhfZGVsdGFfcG9zKQotKwkJbWF4X2RlbHRh X3BvcyA9IGRlbHRhX3BvczsKLSsKLSAJaWYgKGJ5dGVzX2xlZnQgPiAwKQotIAkJZWxhcHNlZCA9 IG5vdyAtIGxhc3RfdXBkYXRlOwotIAllbHNlIHsKLUBAIC0xNzYsNyArMTgzLDcgQEAKLSAJCXJl dHVybjsKLSAKLSAJLyogZmlsZW5hbWUgKi8KLS0JZmlsZV9sZW4gPSBjb2xzID0gd2luX3NpemUg LSAzNjsKLSsJZmlsZV9sZW4gPSBjb2xzID0gd2luX3NpemUgLSA0NTsKLSAJaWYgKGZpbGVfbGVu ID4gMCkgewotIAkJYXNtcHJpbnRmKCZidWYsIElOVF9NQVgsICZjb2xzLCAiJS0qcyIsIGZpbGVf bGVuLCBmaWxlKTsKLSAJCS8qIElmIHdlIHVzZWQgZmV3ZXIgY29sdW1ucyB0aGFuIGV4cGVjdGVk IHRoZW4gcGFkICovCi1AQCAtMTkzLDYgKzIwMCwxMiBAQAotIAl4ZXh0ZW5kZigmYnVmLCBOVUxM LCAiICUzZCUlICVzICVzL3MgIiwgcGVyY2VudCwgZm9ybWF0X3NpemUoY3VyX3BvcyksCi0gCSAg ICBmb3JtYXRfcmF0ZSgob2ZmX3QpYnl0ZXNfcGVyX3NlY29uZCkpOwotIAotKwkvKiBpbnN0YW50 YW5lb3VzIHJhdGUgKi8KLSsJaWYgKGJ5dGVzX2xlZnQgPiAwKQotKwkJeGV4dGVuZGYoJmJ1Ziwg TlVMTCwgIiVzL3MiLCBmb3JtYXRfcmF0ZSgob2ZmX3QpZGVsdGFfcG9zKSk7Ci0rCWVsc2UKLSsJ CXhleHRlbmRmKCZidWYsIE5VTEwsICIlcy9zIiwgZm9ybWF0X3JhdGUoKG9mZl90KW1heF9kZWx0 YV9wb3MpKTsKLSsKLSAJLyogRVRBICovCi0gCWlmICghdHJhbnNmZXJyZWQpCi0gCQlzdGFsbGVk ICs9IGVsYXBzZWQ7Ci1AQCAtMjM1LDYgKzI0OCw3IEBACi0gCX0KLSAJZnJlZShidWYpOwotIAlm cmVlKG9idWYpOwotKwlsYXN0X3BvcyA9IGN1cl9wb3M7Ci0gfQotIAotIHN0YXRpYyB2b2lkCi1k aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9yZWFkY29uZi5jIG9wZW5zc2gtMTAuM3AxL3Jl YWRjb25mLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3JlYWRjb25mLmMJMjAyNi0wNy0wMiAw MDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9yZWFkY29uZi5jCTIw MjYtMDctMDIgMDA6Mjc6MjkuNzI4ODU0ODk3ICswMjAwCi1AQCAtNjIsNiArNjIsNyBAQAotICNp bmNsdWRlICJtYWMuaCIKLSAjaW5jbHVkZSAibXlwcm9wb3NhbC5oIgotICNpbmNsdWRlICJkaWdl c3QuaCIKLSsjaW5jbHVkZSAic3NoYnVmLmgiCi0gI2luY2x1ZGUgInZlcnNpb24uaCIKLSAjaW5j bHVkZSAic3NoLWdzcy5oIgotIAotQEAgLTE2NSw2ICsxNjYsMTAgQEAKLSAJb0hhc2hLbm93bkhv c3RzLAotIAlvVHVubmVsLCBvVHVubmVsRGV2aWNlLAotIAlvTG9jYWxDb21tYW5kLCBvUGVybWl0 TG9jYWxDb21tYW5kLCBvUmVtb3RlQ29tbWFuZCwKLSsJb1RjcFJjdkJ1ZlBvbGwsIG9IUE5EaXNh YmxlZCwKLSsJb05vbmVFbmFibGVkLCBvTm9uZU1hY0VuYWJsZWQsIG9Ob25lU3dpdGNoLAotKwlv RGlzYWJsZU1UQUVTLCBvVXNlTVBUQ1AsIG9IYXBweUV5ZXMsIG9IYXBweURlbGF5LAotKwlvTWV0 cmljcywgb01ldHJpY3NQYXRoLCBvTWV0cmljc0ludGVydmFsLCBvRmFsbGJhY2ssIG9GYWxsYmFj a1BvcnQsCi0gCW9WaXN1YWxIb3N0S2V5LAotIAlvS2V4QWxnb3JpdGhtcywgb0lQUW9TLCBvUmVx dWVzdFRUWSwgb1Nlc3Npb25UeXBlLCBvU3RkaW5OdWxsLAotIAlvRm9ya0FmdGVyQXV0aGVudGlj YXRpb24sIG9JZ25vcmVVbmtub3duLCBvUHJveHlVc2VGZHBhc3MsCi1AQCAtMzEyLDYgKzMxNywx OCBAQAotIAl7ICJrZXhhbGdvcml0aG1zIiwgb0tleEFsZ29yaXRobXMgfSwKLSAJeyAiaXBxb3Mi LCBvSVBRb1MgfSwKLSAJeyAicmVxdWVzdHR0eSIsIG9SZXF1ZXN0VFRZIH0sCi0rCXsgIm5vbmVl bmFibGVkIiwgb05vbmVFbmFibGVkIH0sCi0rCXsgIm5vbmVtYWNlbmFibGVkIiwgb05vbmVNYWNF bmFibGVkIH0sCi0rCXsgIm5vbmVzd2l0Y2giLCBvTm9uZVN3aXRjaCB9LAotKwl7ICJ1c2VtcHRj cCIsIG9Vc2VNUFRDUH0sCi0rCXsgImhhcHB5ZXllcyIsIG9IYXBweUV5ZXMgfSwKLSsJeyAiaGFw cHlkZWxheSIsIG9IYXBweURlbGF5IH0sCi0rCXsgImRpc2FibGVtdGFlcyIsIG9EaXNhYmxlTVRB RVMgfSwKLSsJeyAibWV0cmljcyIsIG9NZXRyaWNzIH0sCi0rCXsgIm1ldHJpY3NwYXRoIiwgb01l dHJpY3NQYXRoIH0sCi0rCXsgIm1ldHJpY3NpbnRlcnZhbCIsIG9NZXRyaWNzSW50ZXJ2YWwgfSwK LSsJeyAiZmFsbGJhY2siLCBvRmFsbGJhY2sgfSwKLSsJeyAiZmFsbGJhY2twb3J0Iiwgb0ZhbGxi YWNrUG9ydCB9LAotIAl7ICJzZXNzaW9udHlwZSIsIG9TZXNzaW9uVHlwZSB9LAotIAl7ICJzdGRp bm51bGwiLCBvU3RkaW5OdWxsIH0sCi0gCXsgImZvcmthZnRlcmF1dGhlbnRpY2F0aW9uIiwgb0Zv cmtBZnRlckF1dGhlbnRpY2F0aW9uIH0sCi1AQCAtMzM0LDYgKzM1MSw4IEBACi0gCXsgInByb3h5 anVtcCIsIG9Qcm94eUp1bXAgfSwKLSAJeyAic2VjdXJpdHlrZXlwcm92aWRlciIsIG9TZWN1cml0 eUtleVByb3ZpZGVyIH0sCi0gCXsgImtub3duaG9zdHNjb21tYW5kIiwgb0tub3duSG9zdHNDb21t YW5kIH0sCi0rCXsgInRjcHJjdmJ1ZnBvbGwiLCBvVGNwUmN2QnVmUG9sbCB9LAotKwl7ICJocG5k aXNhYmxlZCIsIG9IUE5EaXNhYmxlZCB9LAotIAl7ICJyZXF1aXJlZHJzYXNpemUiLCBvUmVxdWly ZWRSU0FTaXplIH0sCi0gCXsgImVuYWJsZWVzY2FwZWNvbW1hbmRsaW5lIiwgb0VuYWJsZUVzY2Fw ZUNvbW1hbmRsaW5lIH0sCi0gCXsgIm9ic2N1cmVrZXlzdHJva2V0aW1pbmciLCBvT2JzY3VyZUtl eXN0cm9rZVRpbWluZyB9LAotQEAgLTUzNCw3ICs1NTMsNyBAQAotIAotIAlpZiAocG9ydCA9PSAw KSB7Ci0gCQlzcCA9IGdldHNlcnZieW5hbWUoU1NIX1NFUlZJQ0VfTkFNRSwgInRjcCIpOwotLQkJ cG9ydCA9IHNwID8gbnRvaHMoc3AtPnNfcG9ydCkgOiBTU0hfREVGQVVMVF9QT1JUOwotKwkJcG9y dCA9IHNwID8gbnRvaHMoc3AtPnNfcG9ydCkgOiBIUE5TU0hfREVGQVVMVF9QT1JUOwotIAl9Ci0g CXJldHVybiBwb3J0OwotIH0KLUBAIC0xMzg0LDYgKzE0MDMsNzUgQEAKLSAJCWludHB0ciA9ICZv cHRpb25zLT5jaGVja19ob3N0X2lwOwotIAkJZ290byBwYXJzZV9mbGFnOwotIAotKwljYXNlIG9I UE5EaXNhYmxlZDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5ocG5fZGlzYWJsZWQ7Ci0rCQlnb3Rv IHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugb1RjcFJjdkJ1ZlBvbGw6Ci0rCQlpbnRwdHIgPSAmb3B0 aW9ucy0+dGNwX3Jjdl9idWZfcG9sbDsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBv Tm9uZUVuYWJsZWQ6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZV9lbmFibGVkOwotKwkJZ290 byBwYXJzZV9mbGFnOwotKwotKwljYXNlIG9Ob25lTWFjRW5hYmxlZDoKLSsJCWludHB0ciA9ICZv cHRpb25zLT5ub25lbWFjX2VuYWJsZWQ7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ug b1VzZU1QVENQOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPnVzZV9tcHRjcDsKLSsJCWdvdG8gcGFy c2VfZmxhZzsKLSsKLSsJY2FzZSBvSGFwcHlFeWVzOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPnVz ZV9oYXBweWV5ZXM7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugb0hhcHB5RGVsYXk6 Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+aGFwcHlfZGVsYXk7Ci0rCQlnb3RvIHBhcnNlX2ludDsK LSsKLSsJY2FzZSBvRGlzYWJsZU1UQUVTOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPmRpc2FibGVf bXVsdGl0aHJlYWRlZDsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBvTWV0cmljczoK LSsJCWludHB0ciA9ICZvcHRpb25zLT5tZXRyaWNzOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwot KwljYXNlIG9NZXRyaWNzSW50ZXJ2YWw6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+bWV0cmljc19p bnRlcnZhbDsKLSsJCWdvdG8gcGFyc2VfaW50OwotKwotKwljYXNlIG9NZXRyaWNzUGF0aDoKLSsJ CWNoYXJwdHIgPSAmb3B0aW9ucy0+bWV0cmljc19wYXRoOwotKwkJb3B0aW9ucy0+bWV0cmljcyA9 IDE7Ci0rCQlnb3RvIHBhcnNlX3N0cmluZzsKLSsKLSsJY2FzZSBvRmFsbGJhY2s6Ci0rCQlpbnRw dHIgPSAmb3B0aW9ucy0+ZmFsbGJhY2s7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ug b0ZhbGxiYWNrUG9ydDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5mYWxsYmFja19wb3J0OwotKwkJ Z290byBwYXJzZV9pbnQ7Ci0rCi0rCS8qCi0rCSAqIFdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgY29t bWFuZCBjb21lcyBmcm9tIHRoZSBjb21tYW5kCi0rCSAqIGxpbmUgb3Igbm90LiBJZiBpdCBkb2Vz IHRoZW4gZW5hYmxlIGl0IG90aGVyd2lzZSBmYWlsLgotKwkgKiAgTk9ORSBzaG91bGQgbmV2ZXIg YmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCi0rCSAqLwotKwljYXNlIG9Ob25lU3dpdGNoOgot KwkJaWYgKHN0cmNtcChmaWxlbmFtZSwgImNvbW1hbmQtbGluZSIpID09IDApIHsKLSsJCQlpbnRw dHIgPSAmb3B0aW9ucy0+bm9uZV9zd2l0Y2g7Ci0rCQkJZ290byBwYXJzZV9mbGFnOwotKwkJfSBl bHNlIHsKLSsJCQllcnJvcigiTm9uZVN3aXRjaCBpcyBmb3VuZCBpbiAlLjIwMHMuXG5Zb3UgbWF5 IG9ubHkgdXNlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnJvbSB0aGUgY29tbWFuZCBsaW5l IiwgZmlsZW5hbWUpOwotKwkJCWVycm9yKCJDb250aW51aW5nLi4uIik7Ci0rCQkJZGVidWcoIk5v bmVTd2l0Y2ggZGlyZWN0aXZlIGZvdW5kIGluICUuMjAwcy4iLCBmaWxlbmFtZSk7Ci0rCQkJcmV0 dXJuIDA7Ci0rCQl9Ci0rCi0gCWNhc2Ugb1ZlcmlmeUhvc3RLZXlETlM6Ci0gCQlpbnRwdHIgPSAm b3B0aW9ucy0+dmVyaWZ5X2hvc3Rfa2V5X2RuczsKLSAJCW11bHRpc3RhdGVfcHRyID0gbXVsdGlz dGF0ZV95ZXNub2FzazsKLUBAIC0yODU4LDYgKzI5NDYsMjAgQEAKLSAJb3B0aW9ucy0+aXBfcW9z X2ludGVyYWN0aXZlID0gLTE7Ci0gCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gLTE7Ci0gCW9wdGlv bnMtPnJlcXVlc3RfdHR5ID0gLTE7Ci0rCW9wdGlvbnMtPm5vbmVfc3dpdGNoID0gLTE7Ci0rCW9w dGlvbnMtPm5vbmVfZW5hYmxlZCA9IC0xOwotKwlvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQgPSAt MTsKLSsJb3B0aW9ucy0+dXNlX21wdGNwID0gLTE7Ci0rCW9wdGlvbnMtPnVzZV9oYXBweWV5ZXMg PSAtMTsKLSsJb3B0aW9ucy0+aGFwcHlfZGVsYXkgPSAtMTsKLSsJb3B0aW9ucy0+ZGlzYWJsZV9t dWx0aXRocmVhZGVkID0gLTE7Ci0rCW9wdGlvbnMtPm1ldHJpY3MgPSAtMTsKLSsJb3B0aW9ucy0+ bWV0cmljc19wYXRoID0gTlVMTDsKLSsJb3B0aW9ucy0+bWV0cmljc19pbnRlcnZhbCA9IC0xOwot KwlvcHRpb25zLT5ocG5fZGlzYWJsZWQgPSAtMTsKLSsJb3B0aW9ucy0+ZmFsbGJhY2sgPSAtMTsK LSsJb3B0aW9ucy0+ZmFsbGJhY2tfcG9ydCA9IC0xOwotKwlvcHRpb25zLT50Y3BfcmN2X2J1Zl9w b2xsID0gLTE7Ci0gCW9wdGlvbnMtPnNlc3Npb25fdHlwZSA9IC0xOwotIAlvcHRpb25zLT5zdGRp bl9udWxsID0gLTE7Ci0gCW9wdGlvbnMtPmZvcmtfYWZ0ZXJfYXV0aGVudGljYXRpb24gPSAtMTsK LUBAIC0zMDQwLDggKzMxNDIsNDcgQEAKLSAJCW9wdGlvbnMtPnNlcnZlcl9hbGl2ZV9pbnRlcnZh bCA9IDA7Ci0gCWlmIChvcHRpb25zLT5zZXJ2ZXJfYWxpdmVfY291bnRfbWF4ID09IC0xKQotIAkJ b3B0aW9ucy0+c2VydmVyX2FsaXZlX2NvdW50X21heCA9IDM7Ci0rCWlmIChvcHRpb25zLT5ocG5f ZGlzYWJsZWQgPT0gLTEpCi0rCQlvcHRpb25zLT5ocG5fZGlzYWJsZWQgPSAwOwotKwlpZiAob3B0 aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9PSAtMSkKLSsJCW9wdGlvbnMtPnRjcF9yY3ZfYnVmX3Bv bGwgPSAxOwotKwlpZiAob3B0aW9ucy0+bm9uZV9zd2l0Y2ggPT0gLTEpCi0rCQlvcHRpb25zLT5u b25lX3N3aXRjaCA9IDA7Ci0rCWlmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gLTEpCi0rCQlv cHRpb25zLT5ub25lX2VuYWJsZWQgPSAwOwotKwlpZiAob3B0aW9ucy0+bm9uZV9lbmFibGVkID09 IDAgJiYgb3B0aW9ucy0+bm9uZV9zd2l0Y2ggPiAwKSB7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk5v bmVFbmFibGVkIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgdGhlIE5vbmUgU3dpdGNoIG9wdGlvbi4g Tm9uZSBjaXBoZXIgZGlzYWJsZWQuXG4iKTsKLSsJCW9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9IDA7 Ci0rCX0KLSsJaWYgKG9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZCA9PSAtMSkKLSsJCW9wdGlvbnMt Pm5vbmVtYWNfZW5hYmxlZCA9IDA7Ci0rCWlmIChvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQgPiAw ICYmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gMCB8fAotKwkJCQkJICAgICBvcHRpb25zLT5u b25lX3N3aXRjaCA9PSAwKSkgewotKwkJZnByaW50ZihzdGRlcnIsICJOb25lIE1BQyBjYW4gb25s eSBiZSB1c2VkIHdpdGggdGhlIE5vbmUgY2lwaGVyLiBOb25lIE1BQyBkaXNhYmxlZC5cbiIpOwot KwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gMDsKLSsJfQotKwlpZiAob3B0aW9ucy0+dXNl X21wdGNwID09IC0xKQotKwkJb3B0aW9ucy0+dXNlX21wdGNwID0gMDsKLSsJaWYgKG9wdGlvbnMt PnVzZV9oYXBweWV5ZXMgPT0gLTEpCi0rCQlvcHRpb25zLT51c2VfaGFwcHlleWVzID0gMDsKLSsJ LyogaWYgdGhlIHVzZXIgdHJpZXMgdG8gc2V0IHRoZSBkZWxheSB0byAwIHRoZW4gaW4ganVzdCBs b29wcyBmb3JldmVyCi0rCSAqIHNvIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YW5kYXJkIC0xIHRl c3Qgd2UgdXNlIDwgMSB0byBtYWtlIHN1cmUgdGhlCi0rCSAqIHVzZXIgaXNuJ3QgYmVpbmcgdG9v IGNsZXZlciBmb3IgdGhlaXIgb3duIGdvb2QKLSsJICovCi0rCWlmIChvcHRpb25zLT5oYXBweV9k ZWxheSA8IDEpCi0rCQlvcHRpb25zLT5oYXBweV9kZWxheSA9IDI1MDsgLyogZGVmYXVsdCAyNTBt cyBhcyBwZXIgUkZDIDgzMDUgU2VjdGlvbiA1ICovCi0rCWlmIChvcHRpb25zLT5kaXNhYmxlX211 bHRpdGhyZWFkZWQgPT0gLTEpCi0rCQlvcHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQgPSAw OwotKwlpZiAob3B0aW9ucy0+bWV0cmljcyA9PSAtMSkKLSsJCW9wdGlvbnMtPm1ldHJpY3MgPSAw OwotKwlpZiAob3B0aW9ucy0+bWV0cmljc19pbnRlcnZhbCA9PSAtMSkKLSsJCW9wdGlvbnMtPm1l dHJpY3NfaW50ZXJ2YWwgPSA1OwotIAlpZiAob3B0aW9ucy0+Y29udHJvbF9tYXN0ZXIgPT0gLTEp Ci0gCQlvcHRpb25zLT5jb250cm9sX21hc3RlciA9IDA7Ci0rCWlmIChvcHRpb25zLT5mYWxsYmFj ayA9PSAtMSkKLSsJCW9wdGlvbnMtPmZhbGxiYWNrID0gMTsKLSsJaWYgKG9wdGlvbnMtPmZhbGxi YWNrX3BvcnQgPT0gLTEpCi0rCQlvcHRpb25zLT5mYWxsYmFja19wb3J0ID0gU1NIX0RFRkFVTFRf UE9SVDsKLSAJaWYgKG9wdGlvbnMtPmNvbnRyb2xfcGVyc2lzdCA9PSAtMSkgewotIAkJb3B0aW9u cy0+Y29udHJvbF9wZXJzaXN0ID0gMDsKLSAJCW9wdGlvbnMtPmNvbnRyb2xfcGVyc2lzdF90aW1l b3V0ID0gMDsKLUBAIC0zMDU4LDEwICszMTk5LDIyIEBACi0gCQlvcHRpb25zLT5wZXJtaXRfbG9j YWxfY29tbWFuZCA9IDA7Ci0gCWlmIChvcHRpb25zLT52aXN1YWxfaG9zdF9rZXkgPT0gLTEpCi0g CQlvcHRpb25zLT52aXN1YWxfaG9zdF9rZXkgPSAwOwotLQlpZiAob3B0aW9ucy0+aXBfcW9zX2lu dGVyYWN0aXZlID09IC0xKQotKwkvKiBpbiB0aGUgZXZlbnQgd2UgYXJlIHVzaW5nIFJGQyA4MzA1 IHRoZW4gd2UKLSsJICogbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBRT1MgYXMgdGhlc2UK LSsJICogaW50ZXJmZXJlIHdpdGggdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBpbiBvdXIKLSsJICog dGVzdCBlbnZpcm9ubWVudC4gSSBkb24ndCBrbm93IGlmIGl0IGhhcyBhIHJlYWwgd29ybGQKLSsJ ICogaW1wYWN0IGJ1dCBUT0RPIHRyeSB0byBmaW5kIGEgcmVhbCB3b3JsZCB3YXkgdG8gdGVzdCB0 aGlzLgotKwkgKi8KLSsJaWYgKG9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9PSAtMSkgewot IAkJb3B0aW9ucy0+aXBfcW9zX2ludGVyYWN0aXZlID0gSVBUT1NfRFNDUF9FRjsKLS0JaWYgKG9w dGlvbnMtPmlwX3Fvc19idWxrID09IC0xKQotKwkJaWYgKG9wdGlvbnMtPnVzZV9oYXBweWV5ZXMg PT0gMSkKLSsJCQlvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPSBJUFRPU19MT1dERUxBWTsK LSsJfQotKwlpZiAob3B0aW9ucy0+aXBfcW9zX2J1bGsgPT0gLTEpIHsKLSAJCW9wdGlvbnMtPmlw X3Fvc19idWxrID0gSVBUT1NfRFNDUF9DUzA7Ci0rCQlpZiAob3B0aW9ucy0+dXNlX2hhcHB5ZXll cyA9PSAxKQotKwkJCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gSVBUT1NfVEhST1VHSFBVVDsKLSsJ fQotIAlpZiAob3B0aW9ucy0+cmVxdWVzdF90dHkgPT0gLTEpCi0gCQlvcHRpb25zLT5yZXF1ZXN0 X3R0eSA9IFJFUVVFU1RfVFRZX0FVVE87Ci0gCWlmIChvcHRpb25zLT5zZXNzaW9uX3R5cGUgPT0g LTEpCi1AQCAtMzg3MCw2ICs0MDIzLDE1IEBACi0gCWR1bXBfY2ZnX2ZtdGludChvVmlzdWFsSG9z dEtleSwgby0+dmlzdWFsX2hvc3Rfa2V5KTsKLSAJZHVtcF9jZmdfZm10aW50KG9VcGRhdGVIb3N0 a2V5cywgby0+dXBkYXRlX2hvc3RrZXlzKTsKLSAJZHVtcF9jZmdfZm10aW50KG9FbmFibGVFc2Nh cGVDb21tYW5kbGluZSwgby0+ZW5hYmxlX2VzY2FwZV9jb21tYW5kbGluZSk7Ci0rCWR1bXBfY2Zn X2ZtdGludChvVGNwUmN2QnVmUG9sbCwgby0+dGNwX3Jjdl9idWZfcG9sbCk7Ci0rCWR1bXBfY2Zn X2ZtdGludChvSFBORGlzYWJsZWQsIG8tPmhwbl9kaXNhYmxlZCk7Ci0rCWR1bXBfY2ZnX2ZtdGlu dChvTm9uZVN3aXRjaCwgby0+bm9uZV9zd2l0Y2gpOwotKwlkdW1wX2NmZ19mbXRpbnQob05vbmVF bmFibGVkLCBvLT5ub25lX2VuYWJsZWQpOwotKwlkdW1wX2NmZ19mbXRpbnQob05vbmVNYWNFbmFi bGVkLCBvLT5ub25lbWFjX2VuYWJsZWQpOwotKwlkdW1wX2NmZ19mbXRpbnQob0ZhbGxiYWNrLCBv LT5mYWxsYmFjayk7Ci0rCWR1bXBfY2ZnX2ZtdGludChvTWV0cmljcywgby0+bWV0cmljcyk7Ci0r CWR1bXBfY2ZnX2ZtdGludChvVXNlTVBUQ1AsIG8tPnVzZV9tcHRjcCk7Ci0rCWR1bXBfY2ZnX2Zt dGludChvSGFwcHlFeWVzLCBvLT51c2VfaGFwcHlleWVzKTsKLSAJZHVtcF9jZmdfZm10aW50KG9X YXJuV2Vha0NyeXB0bywgby0+d2Fybl93ZWFrX2NyeXB0byk7Ci0gCi0gCS8qIEludGVnZXIgb3B0 aW9ucyAqLwotQEAgLTM4ODIsNiArNDA0NCw5IEBACi0gCWR1bXBfY2ZnX2ludChvUmVxdWlyZWRS U0FTaXplLCBvLT5yZXF1aXJlZF9yc2Ffc2l6ZSk7Ci0gCWR1bXBfY2ZnX2ludChvT2JzY3VyZUtl eXN0cm9rZVRpbWluZywKLSAJICAgIG8tPm9ic2N1cmVfa2V5c3Ryb2tlX3RpbWluZ19pbnRlcnZh bCk7Ci0rCWR1bXBfY2ZnX2ludChvTWV0cmljc0ludGVydmFsLCBvLT5tZXRyaWNzX2ludGVydmFs KTsKLSsJZHVtcF9jZmdfaW50KG9GYWxsYmFja1BvcnQsIG8tPmZhbGxiYWNrX3BvcnQpOwotKwlk dW1wX2NmZ19pbnQob0hhcHB5RGVsYXksIG8tPmhhcHB5X2RlbGF5KTsKLSAKLSAJLyogU3RyaW5n IG9wdGlvbnMgKi8KLSAJZHVtcF9jZmdfc3RyaW5nKG9CaW5kQWRkcmVzcywgby0+YmluZF9hZGRy ZXNzKTsKLUBAIC0zOTA5LDYgKzQwNzQsNyBAQAotIAlkdW1wX2NmZ19zdHJpbmcob1hBdXRoTG9j YXRpb24sIG8tPnhhdXRoX2xvY2F0aW9uKTsKLSAJZHVtcF9jZmdfc3RyaW5nKG9Lbm93bkhvc3Rz Q29tbWFuZCwgby0+a25vd25faG9zdHNfY29tbWFuZCk7Ci0gCWR1bXBfY2ZnX3N0cmluZyhvVGFn LCBvLT50YWcpOwotKwlkdW1wX2NmZ19zdHJpbmcob01ldHJpY3NQYXRoLCBvLT5tZXRyaWNzX3Bh dGgpOwotIAlkdW1wX2NmZ19zdHJpbmcob1ZlcnNpb25BZGRlbmR1bSwgby0+dmVyc2lvbl9hZGRl bmR1bSk7Ci0gCi0gCS8qIEZvcndhcmRzICovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9yZWFkY29uZi5oIG9wZW5zc2gtMTAuM3AxL3JlYWRjb25mLmgKLS0tLSBvcGVuc3NoLTEwLjNw MS5vcmlnL3JlYWRjb25mLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsr KyBvcGVuc3NoLTEwLjNwMS9yZWFkY29uZi5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI5MTc2ODA5 ICswMjAwCi1AQCAtMTI5LDYgKzEyOSwyMyBAQAotIAlpbnQJZW5hYmxlX3NzaF9rZXlzaWduOwot IAlpbnQ2NF90IHJla2V5X2xpbWl0OwotIAlpbnQJcmVrZXlfaW50ZXJ2YWw7Ci0rCi0rCS8qIGhw bnNzaCBvcHRpb25zICovCi0rCWludCAgICAgdGNwX3Jjdl9idWZfcG9sbDsgLyogT3B0aW9uIHRv IHBvbGwgcmVjdiBidWYgZXZlcnkgd2luZG93IHRyYW5zZmVyICovCi0rCWludCAgICAgaHBuX2Rp c2FibGVkOyAgICAgLyogU3dpdGNoIHRvIGRpc2FibGUgSFBOIGJ1ZmZlciBtYW5hZ2VtZW50ICov Ci0rCWludCAgICAgbm9uZV9zd2l0Y2g7ICAgIC8qIFVzZSBub25lIGNpcGhlciAqLwotKwlpbnQg ICAgIG5vbmVfZW5hYmxlZDsgICAvKiBBbGxvdyBub25lIHRvIGJlIHVzZWQgKi8KLSsJaW50ICAg ICBub25lbWFjX2VuYWJsZWQ7ICAgLyogQWxsb3cgbm9uZSB0byBiZSB1c2VkICovCi0rCWludCAg ICAgZGlzYWJsZV9tdWx0aXRocmVhZGVkOyAvKiBEaXNhYmxlIG11bHRpdGhyZWFkZWQgYWVzLWN0 ciAqLwotKwlpbnQgICAgIG1ldHJpY3M7IC8qIGVuYWJsZSBtZXRyaWNzICovCi0rCWludCAgICAg bWV0cmljc19pbnRlcnZhbDsgLyogdGltZSBpbiBzZWNvbmRzIGJldHdlZW4gcG9sbHMgKi8KLSsJ Y2hhciAgICptZXRyaWNzX3BhdGg7IC8qIHBhdGggZm9yIHRoZSBtZXRyaWNzIGZpbGVzICovCi0r CWludCAgICAgZmFsbGJhY2s7IC8qIGVufGRpc2FibGUgZmFsbGJhY2sgcG9ydCAoZGVmOiB0cnVl KSAqLwotKwlpbnQgICAgIGZhbGxiYWNrX3BvcnQ7IC8qIHBvcnQgdG8gZmFsbGJhY2sgdG8gKGRl ZjogMjIpICovCi0rCWludCAgICAgdXNlX21wdGNwOyAvKiB1c2UgTXVsdGlQYXRoIFRDUCAqLwot KwlpbnQgICAgIHVzZV9oYXBweWV5ZXM7IC8qIHVzZSBSRkMgODMwNSAtIEhhcHB5IEV5ZWJhbGxz ICovCi0rCWludCAgICAgaGFwcHlfZGVsYXk7IC8qIHVzZXIgZGVmaW5lZCBkbGVheSBmb3IgUkZD IDgzMDUgKi8KLSsKLSAJaW50CW5vX2hvc3RfYXV0aGVudGljYXRpb25fZm9yX2xvY2FsaG9zdDsK LSAJaW50CWlkZW50aXRpZXNfb25seTsKLSAJaW50CXNlcnZlcl9hbGl2ZV9pbnRlcnZhbDsKLWRp ZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL1JFQURNRS5tZCBvcGVuc3NoLTEwLjNwMS9SRUFE TUUubWQKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL1JFQURNRS5tZAkyMDI2LTA3LTAyIDAwOjI3 OjA2LjA4OTM5NDI4MCArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL1JFQURNRS5tZAkyMDI2LTA3 LTAyIDA4OjQ2OjI0LjgyMDAxOTU4OCArMDIwMAotQEAgLTEsMTkgKzEsMjMgQEAKLS0jIFBvcnRh YmxlIE9wZW5TU0gKLSsjIEhQTlNTSDogQmFzZWQgb24gUG9ydGFibGUgT3BlblNTSAotK0hQTi1T U0ggaXMgYSBoaWdoIHBlcmZvcm1hbmNlIHNvZnQgZm9yayBvZiBPcGVuU1NIIHRoYXQgY2FuIHBy b3ZpZGUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhyb3VnaHB1dCBmb3IgYnVsayBkYXRhIHRyYW5z ZmVycyBvdmVyIGEgd2lkZSByYW5nZSBvZiBuZXR3b3JrIHBhdGhzLiBJbiBzb21lIHNpdHVhdGlv bnMgd2UndmUgc2VlbiB0aHJvdWdocHV0IHJhdGVzIG1vcmUgdGhhbiAxMDAgdGltZXMgZmFzdGVy IHRoYW4gT3BlblNTSC4gSFBOLVNTSCBpcyBhYmxlIHRvIGRvIHRoaXMgYnkgb3B0aW1pemluZyB0 aGUgYXBwbGljYXRpb24gbGF5ZXIgcmVjZWl2ZSBidWZmZXIgdG8gbWF0Y2ggdGhlIFRDUCByZWNl aXZlIGJ1ZmZlci4gTm90YWJseSwgdG8gc2VlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBIUE4t U1NIIG9ubHkgbmVlZHMgdG8gYmUgdGhlIGRhdGEgcmVjZWl2ZXIgc28gdXNlcnMgY2FuIHNlZSBu b3RhYmxlIGltcHJvdmVtZW50cyB3aXRoIG1hbnkgb3RoZXIgU1NIIGltcGxlbWVudGF0aW9ucy4g SFBOLVNTSCBhbHNvIGluY29ycG9yYXRlcyB0d28gcGFyYWxsZWxpemVkIGNpcGhlcnMsIEFFUy1D VFIgYW5kIENoYWNoYTIwICh0aGUgZGVmYXVsdCkuIFdoZW4gdXNpbmcgdGhlc2UgY2lwaGVycyBh IHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgaW5jcmVhc2Ugb2YgMzAlIGlzIHR5cGljYWwuIE1vcmUg aW5mb3JtYXRpb24gb24gaG93IHdlIGRvIHRoaXMgd29yayBhbmQgb3RoZXIgZmVhdHVyZXMgb2Yg SFBOLVNTSCBpcyBhdmFpbGFibGUgZnJvbSBbaHR0cHM6Ly9ocG5zc2gub3JnXShodHRwczovL2hw bnNzaC5vcmcpLgotIAotLVshW0MvQysrIENJXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy9jLWNw cC55bWwvYmFkZ2Uuc3ZnKV0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3MvYy1jcHAueW1sKQotLVsh W1ZNIENJXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy92bS55bWwvYmFkZ2Uuc3ZnKV0oLi4vLi4v YWN0aW9ucy93b3JrZmxvd3Mvdm0ueW1sKQotLVshW0MvQysrIENJIHNlbGYtaG9zdGVkXShodHRw czovL2dpdGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlLXNlbGZob3N0ZWQvYWN0aW9u cy93b3JrZmxvd3Mvc2VsZmhvc3RlZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29t L29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS1zZWxmaG9zdGVkL2FjdGlvbnMvd29ya2Zsb3dzL3Nl bGZob3N0ZWQueW1sKQotLVshW0NJRnV6el0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3MvY2lmdXp6 LnltbC9iYWRnZS5zdmcpXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy9jaWZ1enoueW1sKQotLVsh W0Z1enppbmcgU3RhdHVzXShodHRwczovL29zcy1mdXp6LWJ1aWxkLWxvZ3Muc3RvcmFnZS5nb29n bGVhcGlzLmNvbS9iYWRnZXMvb3BlbnNzaC5zdmcpXShodHRwczovL2lzc3Vlcy5vc3MtZnV6ei5j b20vaXNzdWVzP3E9IlByb2plY3Q6K29wZW5zc2giK2lzOm9wZW4pCi0tWyFbQ292ZXJpdHkgU3Rh dHVzXShodHRwczovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzLzIxMzQxL2JhZGdlLnN2Zyld KGh0dHBzOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvb3BlbnNzaC1wb3J0YWJsZSkKLStT dGFydGluZyB3aXRoIHZlcnNpb24gSFBOMTd2MCB0aGVyZSB3aWxsIGJlIHNpZ25pZmljYW50IGNo YW5nZXMgdG8gdGhlIG5hbWluZyBjb252ZW50aW9uIHVzZWQgZm9yIGV4ZWN1dGFibGVzIGFuZCBp bnN0YWxsYXRpb24gbG9jYXRpb25zLiBUaGUgbGFzdCB2ZXJzaW9uIHRoYXQgZG9lcyBub3QgaW5j bHVkZSB0aGVzZSBjaGFuZ2VzIGlzIEhQTjE2djEgY29ycmVzcG9uZGluZyB0byB0aGUgSFBOLThf OF9QMSB0YWcgb24gdGhlIG1hc3RlciBicmFuY2guCi0gCi0tT3BlblNTSCBpcyBhIGNvbXBsZXRl IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTU0ggcHJvdG9jb2wgKHZlcnNpb24gMikgZm9yIHNlY3Vy ZSByZW1vdGUgbG9naW4sIGNvbW1hbmQgZXhlY3V0aW9uIGFuZCBmaWxlIHRyYW5zZmVyLiBJdCBp bmNsdWRlcyBhIGNsaWVudCBgYHNzaGBgIGFuZCBzZXJ2ZXIgYGBzc2hkYGAsIGZpbGUgdHJhbnNm ZXIgdXRpbGl0aWVzIGBgc2NwYGAgYW5kIGBgc2Z0cGBgIGFzIHdlbGwgYXMgdG9vbHMgZm9yIGtl eSBnZW5lcmF0aW9uIChgYHNzaC1rZXlnZW5gYCksIHJ1bi10aW1lIGtleSBzdG9yYWdlIChgYHNz aC1hZ2VudGBgKSBhbmQgYSBudW1iZXIgb2Ygc3VwcG9ydGluZyBwcm9ncmFtcy4KLStIUE5TU0gg aXMgYSB2YXJpYW50IG9mIE9wZW5TU0guIEl0IGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2Yg dGhlIFNTSCBwcm90b2NvbCAodmVyc2lvbiAyKSBmb3Igc2VjdXJlIHJlbW90ZSBsb2dpbiwgY29t bWFuZCBleGVjdXRpb24gYW5kIGZpbGUgdHJhbnNmZXIuIEl0IGluY2x1ZGVzIGEgY2xpZW50IGBg aHBuc3NoYGAgYW5kIHNlcnZlciBgYGhwbnNzaGRgYCwgZmlsZSB0cmFuc2ZlciB1dGlsaXRpZXMg YGBocG5zY3BgYCBhbmQgYGBocG5zZnRwYGAgYXMgd2VsbCBhcyB0b29scyBmb3Iga2V5IGdlbmVy YXRpb24gKGBgaHBuc3NoLWtleWdlbmBgKSwgcnVuLXRpbWUga2V5IHN0b3JhZ2UgKGBgaHBuc3No LWFnZW50YGApIGFuZCBhIG51bWJlciBvZiBzdXBwb3J0aW5nIHByb2dyYW1zLiBJdCBpbmNsdWRl cyBudW1lcm91cyBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eSBlbmhhbmNlbWVudHMgZm9j dXNlZCBvbiBoaWdoIHBlcmZvcm1hbmNlIG5ldHdvcmtzIGFuZCBjb21wdXRpbmcgZW52cmlyb25t ZW50cy4gQ29tcGxldGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBIUE4tUkVBRE1F IGZpbGUuCi0gCi0tVGhpcyBpcyBhIHBvcnQgb2YgT3BlbkJTRCdzIFtPcGVuU1NIXShodHRwczov L29wZW5zc2guY29tKSB0byBtb3N0IFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcywgaW5jbHVk aW5nIExpbnV4LCBPUyBYIGFuZCBDeWd3aW4uIFBvcnRhYmxlIE9wZW5TU0ggcG9seWZpbGxzIE9w ZW5CU0QgQVBJcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZSwgYWRkcyBzc2hkIHNh bmRib3hpbmcgZm9yIG1vcmUgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGluY2x1ZGVzIHN1cHBvcnQg Zm9yIE9TLW5hdGl2ZSBhdXRoZW50aWNhdGlvbiBhbmQgYXVkaXRpbmcgKGUuZy4gdXNpbmcgUEFN KS4KLStJdCBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggYWxsIGNvbXBsaWFudCBpbXBsZW1lbnRh dGlvbnMgb2YgdGhlIFNTSCBwcm90b2NvbCBhbmQgT3BlblNTSCBpbiBwYXJ0aWN1bGFyLgotKwot K1RoaXMgdmVyc2lvbiBvZiBIUE5TU0ggaXMgc2lnbmlmaWNhbnQgZGVwYXJ0dXJlIGluIHRlcm1z IG9mIG5hbWluZyBleGVjdXRhYmxlcyBhbmQgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucy4gU3BlY2lm aWNhbGx5LCBhbGwgZXhlY3V0YWJsZXMgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIGBgaHBuYGAuIFNv IGBgc3NoYGAgYmVjb21lcyBgYGhwbnNzaGBgIGFuZCBgYHNjcGBgIGlzIG5vdyBgYGhwbnNjcGBg LiBDb25maWd1YXRpb24gZmlsZXMgYW5kIGhvc3Qga2V5cyBjYW4gbm93IGJlIGZvdW5kIGluIGBg L2V0Yy9ocG5zc2hgYC4gQnkgZGVmYXVsdCBgYGhwbnNzaGRgYCBub3cgcnVucyBvbiBwb3J0IDIy MjIgYnV0IHRoaXMgaXMgY29uZmlndXJhYmxlLiBUaGlzIGNoYW5nZSB3YXMgbWFkZSBpbiBvcmRl ciB0byBwcmV2ZW50IGluc3RhbGxhdGlvbnMgb2YgaHBuc3NoLCBwYXJ0aWN1bGFybHkgZnJvbSBw YWNrYWdlIGRpc3RyaWJ1dGlvbnMsIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBkZWZhdWx0IGluc3Rh bGxhdGlvbnMgb2YgT3BlblNTSC4gSFBOU1NIIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGgg YWxsIHZlcnNpb25zIG9mIE9wZW5TU0ggaW5jbHVkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGtl eXMsIGFuZCBydW4gdGltZSBvcHRpb25zLiBBZGRpdGlvbmFsbHksIHRoZSBjbGllbnQgd2lsbCwg YnkgZGVmYXVsdCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gcG9ydCAyMjIyIGJ1dCB3aWxsIGF1dG9t YXRpY2FsbHkgZmFsbCBiYWNrIHRvIHBvcnQgMjIuIFRoaXMgaXMgYWxzbyB1c2VyIGNvbmZpZ3Vy YWJsZS4KLSsKLStIUE5TU0ggaXMgYmFzZWQgb24gT3BlblNTSCBwb3J0YWJsZS4gVGhpcyBpcyBh IHBvcnQgb2YgT3BlbkJTRCdzIFtPcGVuU1NIXShodHRwczovL29wZW5zc2guY29tKSB0byBtb3N0 IFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcywgaW5jbHVkaW5nIExpbnV4LCBPUyBYIGFuZCBD eWd3aW4uIFBvcnRhYmxlIE9wZW5TU0ggcG9seWZpbGxzIE9wZW5CU0QgQVBJcyB0aGF0IGFyZSBu b3QgYXZhaWxhYmxlIGVsc2V3aGVyZSwgYWRkcyBzc2hkIHNhbmRib3hpbmcgZm9yIG1vcmUgb3Bl cmF0aW5nIHN5c3RlbXMgYW5kIGluY2x1ZGVzIHN1cHBvcnQgZm9yIE9TLW5hdGl2ZSBhdXRoZW50 aWNhdGlvbiBhbmQgYXVkaXRpbmcgKGUuZy4gdXNpbmcgUEFNKS4KLSsKLStUaGlzIGRvY3VtZW50 IHdpbGwgYmUgY2hhbmdpbmcgb3ZlciB0aW1lIHRvIHJlZmxlY3QgbmV3IGNoYW5nZXMgYW5kIGZl YXR1cmVzLiBUaGlzIGRvY3VtZW50IGlzIGJ1aWx0IG9mZiBvZiB0aGUgT3BlblNTSCBSRUFETUUu bWQKLSsKLStDdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHJlbGVhc2UgZmVhdHVyZXMgYXJlIGF2 YWlsYWJsZSBpbiB0aGUgSFBOLVJFQURNRSBkb2N1bWVudC4KLSAKLSAjIyBEb2N1bWVudGF0aW9u Ci0gCi0tVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gZm9yIE9wZW5TU0ggYXJlIHRoZSBtYW4g cGFnZXMgZm9yIGVhY2ggdG9vbDoKLStUaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3IgSFBO LVNTSCBhcmUgdGhlIG1hbiBwYWdlcyBmb3IgZWFjaCB0b29sLgotIAotICogW3NzaCgxKV0oaHR0 cHM6Ly9tYW4ub3BlbmJzZC5vcmcvc3NoLjEpCi0gKiBbc3NoZCg4KV0oaHR0cHM6Ly9tYW4ub3Bl bmJzZC5vcmcvc3NoZC44KQotQEAgLTI0LDE3ICsyOCwxOCBAQAotICogW3NzaC1rZXlzY2FuKDgp XShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zc2gta2V5c2Nhbi44KQotICogW3NmdHAtc2VydmVy KDgpXShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zZnRwLXNlcnZlci44KQotIAotLSMjIFN0YWJs ZSBSZWxlYXNlcwotK0FsbCBvcHRpb25zIGluIE9wZW5TU0ggYXJlIHJlc3BlY3RlZCBieSBIUE4t U1NILgotIAotLVN0YWJsZSByZWxlYXNlIHRhcmJhbGxzIGFyZSBhdmFpbGFibGUgZnJvbSBhIG51 bWJlciBvZiBbZG93bmxvYWQgbWlycm9yc10oaHR0cHM6Ly93d3cub3BlbnNzaC5jb20vcG9ydGFi bGUuaHRtbCNkb3dubG9hZHMpLiBXZSByZWNvbW1lbmQgdGhlIHVzZSBvZiBhIHN0YWJsZSByZWxl YXNlIGZvciBtb3N0IHVzZXJzLiBQbGVhc2UgcmVhZCB0aGUgW3JlbGVhc2Ugbm90ZXNdKGh0dHBz Oi8vd3d3Lm9wZW5zc2guY29tL3JlbGVhc2Vub3Rlcy5odG1sKSBmb3IgZGV0YWlscyBvZiByZWNl bnQgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGluY29tcGF0aWJpbGl0aWVzLgotKyMjIEJ1aWxkaW5n IEhQTlNTSAotIAotLSMjIEJ1aWxkaW5nIFBvcnRhYmxlIE9wZW5TU0gKLStEZXRhaWxlZCBzdGVw IGJ5IHN0ZXAgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBmb3VuZCBhdCBodHRwczovL3BzYy5lZHUvaHBu LXNzaC1ob21lLwotIAotICMjIyBEZXBlbmRlbmNpZXMKLSAKLS1Qb3J0YWJsZSBPcGVuU1NIIGlz IGJ1aWx0IHVzaW5nIGF1dG9jb25mIGFuZCBtYWtlLiBJdCByZXF1aXJlcyBhIHdvcmtpbmcgQyBj b21waWxlciwgc3RhbmRhcmQgbGlicmFyeSBhbmQgaGVhZGVycy4KLStIUE5TU0ggaXMgYnVpbHQg dXNpbmcgYXV0b2NvbmYgYW5kIG1ha2UuIEl0IHJlcXVpcmVzIGEgd29ya2luZyBDIGNvbXBpbGVy LCBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBoZWFkZXJzLgotIAotLWBgbGliY3J5cHRvYGAgZnJvbSBv bmUgb2YgW0xpYnJlU1NMXShodHRwczovL3d3dy5saWJyZXNzbC5vcmcvKSwgW09wZW5TU0xdKGh0 dHBzOi8vd3d3Lm9wZW5zc2wub3JnKSwgW0FXUy1MQ10oaHR0cHM6Ly9naXRodWIuY29tL2F3cy9h d3MtbGMpIG9yIFtCb3JpbmdTU0xdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvYm9yaW5nc3Ns KSBtYXkgYWxzbyBiZSB1c2VkLiAgT3BlblNTSCBtYXkgYmUgYnVpbHQgd2l0aG91dCBlaXRoZXIg b2YgdGhlc2UsIGJ1dCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgaGF2ZSBvbmx5IGEgc3Vi c2V0IG9mIHRoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgbm9ybWFsbHkgYXZhaWxhYmxlLgot K2BgbGliY3J5cHRvYGAgZnJvbSBvbmUgb2YgW0xpYnJlU1NMXShodHRwczovL3d3dy5saWJyZXNz bC5vcmcvKSwgW09wZW5TU0xdKGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnKSwgW0FXUy1MQ10oaHR0 cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtbGMpIG9yIFtCb3JpbmdTU0xdKGh0dHBzOi8vZ2l0aHVi LmNvbS9nb29nbGUvYm9yaW5nc3NsKSBtYXkgYWxzbyBiZSB1c2VkLiBIUE4tU1NIIG1heSBiZSBi dWlsdCB3aXRob3V0IGVpdGhlciBvZiB0aGVzZSwgYnV0IHRoZSByZXN1bHRpbmcgYmluYXJpZXMg d2lsbCBoYXZlIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcyBu b3JtYWxseSBhdmFpbGFibGUuCi0rVGhlIGRldmVsb3BlcnMgb2YgSFBOLVNTSCBzdHJvbmdseSBz dWdnZXN0IHRoZSB1c2Ugb2YgT3BlblNTTCAzLjAgb3IgaGlnaGVyIHRvIHN1cHBvcnQgdGhlIGFk dmFuY2VkIGNyeXB0b2dyYXBoeSBtZXRob2RzIHVzZWQuCi0gCi0gW3psaWJdKGh0dHBzOi8vd3d3 LnpsaWIubmV0LykgaXMgb3B0aW9uYWw7IHdpdGhvdXQgaXQgdHJhbnNwb3J0IGNvbXByZXNzaW9u IGlzIG5vdCBzdXBwb3J0ZWQuCi0gCi1AQCAtNDcsOCArNTIsOSBAQAotIFJlbGVhc2UgdGFyYmFs bHMgYW5kIHJlbGVhc2UgYnJhbmNoZXMgaW4gZ2l0IGluY2x1ZGUgYSBwcmUtYnVpbHQgY29weSBv ZiB0aGUgYGBjb25maWd1cmVgYCBzY3JpcHQgYW5kIG1heSBiZSBidWlsdCB1c2luZzoKLSAKLSBg YGAKLS10YXIgenh2ZiBvcGVuc3NoLVguWXBaLnRhci5negotLWNkIG9wZW5zc2gKLSt0YXIgenh2 ZiBocG5zc2gtWC5ZcFoudGFyLmd6Ci0rY2QgaHBuLXNzaAotK2F1dG9yZWNvbmYgLWYgLWkKLSAu L2NvbmZpZ3VyZSAjIFtvcHRpb25zXQotIG1ha2UgJiYgbWFrZSB0ZXN0cwotIGBgYAotQEAgLTU3 LDE5ICs2MywxOSBAQAotIAotICMjIyBCdWlsZGluZyBmcm9tIGdpdAotIAotLUlmIGJ1aWxkaW5n IGZyb20gdGhlIGdpdCBtYXN0ZXIgYnJhbmNoLCB5b3UnbGwgbmVlZCBbYXV0b2NvbmZdKGh0dHBz Oi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvKSBpbnN0YWxsZWQgdG8gYnVpbGQgdGhl IGBgY29uZmlndXJlYGAgc2NyaXB0LiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHdpbGwgY2hlY2sg b3V0IGFuZCBidWlsZCBwb3J0YWJsZSBPcGVuU1NIIGZyb20gZ2l0OgotK0lmIGJ1aWxkaW5nIGZy b20gdGhlIGdpdCBtYXN0ZXIgYnJhbmNoLCB5b3UnbGwgbmVlZCBbYXV0b2NvbmZdKGh0dHBzOi8v d3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvKSBpbnN0YWxsZWQgdG8gYnVpbGQgdGhlIGBg Y29uZmlndXJlYGAgc2NyaXB0LiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHdpbGwgY2hlY2sgb3V0 IGFuZCBidWlsZCBIUE4tU1NIIGZyb20gZ2l0OgotIAotIGBgYAotLWdpdCBjbG9uZSBodHRwczov L2dpdGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlICMgb3IgaHR0cHM6Ly9hbm9uZ2l0 Lm1pbmRyb3Qub3JnL29wZW5zc2guZ2l0Ci0tY2Qgb3BlbnNzaC1wb3J0YWJsZQotLWF1dG9yZWNv bmYKLStnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaAotK2NkIGhw bi1zc2gKLSthdXRvcmVjb25mIC1mIC1pCi0gLi9jb25maWd1cmUKLSBtYWtlICYmIG1ha2UgdGVz dHMKLSBgYGAKLSAKLSAjIyMgQnVpbGQtdGltZSBDdXN0b21pc2F0aW9uCi0gCi0tVGhlcmUgYXJl IG1hbnkgYnVpbGQtdGltZSBjdXN0b21pc2F0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBBbGwgQXV0 b2NvbmYgZGVzdGluYXRpb24gcGF0aCBmbGFncyAoZS5nLiBgYC0tcHJlZml4YGApIGFyZSBzdXBw b3J0ZWQgKGFuZCBhcmUgdXN1YWxseSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIE9w ZW5TU0gpLgotK1RoZXJlIGFyZSBtYW55IGJ1aWxkLXRpbWUgY3VzdG9taXNhdGlvbiBvcHRpb25z IGF2YWlsYWJsZS4gQWxsIEF1dG9jb25mIGRlc3RpbmF0aW9uIHBhdGggZmxhZ3MgKGUuZy4gYGAt LXByZWZpeGBgKSBhcmUgc3VwcG9ydGVkIChhbmQgYXJlIHVzdWFsbHkgcmVxdWlyZWQgaWYgeW91 IHdhbnQgdG8gaW5zdGFsbCBIUE4tU1NIKS4KLSAKLSBGb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxh YmxlIGZsYWdzLCBydW4gYGAuL2NvbmZpZ3VyZSAtLWhlbHBgYCBidXQgYSBmZXcgb2YgdGhlIG1v cmUgZnJlcXVlbnRseS11c2VkIG9uZXMgYXJlIGRlc2NyaWJlZCBiZWxvdy4gU29tZSBvZiB0aGVz ZSBmbGFncyB3aWxsIHJlcXVpcmUgYWRkaXRpb25hbCBsaWJyYXJpZXMgYW5kL29yIGhlYWRlcnMg YmUgaW5zdGFsbGVkLgotIAotQEAgLTc5LDExICs4NSwxMyBAQAotIGBgLS13aXRoLWxpYmVkaXRg YCB8IEVuYWJsZSBbbGliZWRpdF0oaHR0cHM6Ly93d3cudGhyeXNvZWUuZGsvZWRpdGxpbmUvKSBz dXBwb3J0IGZvciBzZnRwLgotIGBgLS13aXRoLWtlcmJlcm9zNWBgIHwgRW5hYmxlIEtlcmJlcm9z L0dTU0FQSSBzdXBwb3J0LiBCb3RoIFtIZWltZGFsXShodHRwczovL3d3dy5oNWwub3JnLykgYW5k IFtNSVRdKGh0dHBzOi8vd2ViLm1pdC5lZHUva2VyYmVyb3MvKSBLZXJiZXJvcyBpbXBsZW1lbnRh dGlvbnMgYXJlIHN1cHBvcnRlZC4KLSBgYC0td2l0aC1zZWxpbnV4YGAgfCBFbmFibGUgW1NFTGlu dXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NlY3VyaXR5LUVuaGFuY2VkX0xpbnV4 KSBzdXBwb3J0LgotK2BgLS13aXRoLXNlY3VyaXR5LWtleS1idWlsdGluYGAgfCBJbmNsdWRlIGJ1 aWx0LWluIHN1cHBvcnQgZm9yIFUyRi9GSURPMiBzZWN1cml0eSBrZXlzLiBUaGlzIHJlcXVpcmVz IFtsaWJmaWRvMl0oaHR0cHM6Ly9naXRodWIuY29tL1l1Ymljby9saWJmaWRvMikgYmUgaW5zdGFs bGVkLgotIAotICMjIERldmVsb3BtZW50Ci0gCi0gUG9ydGFibGUgT3BlblNTSCBkZXZlbG9wbWVu dCBpcyBkaXNjdXNzZWQgb24gdGhlIFtvcGVuc3NoLXVuaXgtZGV2IG1haWxpbmcgbGlzdF0oaHR0 cHM6Ly9saXN0cy5taW5kcm90Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL29wZW5zc2gtdW5peC1kZXYp IChbYXJjaGl2ZSBtaXJyb3JdKGh0dHBzOi8vbWFyYy5pbmZvLz9sPW9wZW5zc2gtdW5peC1kZXYp KS4gQnVncyBhbmQgZmVhdHVyZSByZXF1ZXN0cyBhcmUgdHJhY2tlZCBvbiBvdXIgW0J1Z3ppbGxh XShodHRwczovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnLykuCi0rSFBOLVNTSCBkZXZlbG9wbWVudCBp cyBkaXNjdXNzZWQgb24gdGhlIFtocG5zc2gtY29tbXVuaXR5IG1haWxpbmcgbGlzdF0oaHR0cHM6 Ly9saXN0cy5wc2MuZWR1L21haWxtYW4vbGlzdGluZm8vaHBuc3NoLWNvbW11bml0eSkgYW5kIG9u IHRoZSBbR2l0SHViIERpc2N1c3Npb25zIHBhZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9yYXBpZXIx L2hwbi1zc2gvZGlzY3Vzc2lvbnMpLgotIAotICMjIFJlcG9ydGluZyBidWdzCi0gCi0tX05vbi1z ZWN1cml0eV8gYnVncyBtYXkgYmUgcmVwb3J0ZWQgdG8gdGhlIGRldmVsb3BlcnMgdmlhIFtCdWd6 aWxsYV0oaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy8pIG9yIHZpYSB0aGUgbWFpbGluZyBs aXN0IGFib3ZlLiBTZWN1cml0eSBidWdzIHNob3VsZCBiZSByZXBvcnRlZCB0byBbb3BlbnNzaEBv cGVuc3NoLmNvbV0obWFpbHRvOm9wZW5zc2gub3BlbnNzaC5jb20pLgotK19Ob24tc2VjdXJpdHlf IGJ1Z3MgbWF5IGJlIHJlcG9ydGVkIHRvIHRoZSBkZXZlbG9wZXJzIHZpYSBbR2l0SHViIElzc3Vl c10oaHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaC9pc3N1ZXMpIG9yIHZpYSB0aGUg bWFpbGluZyBsaXN0IGFib3ZlLiBTZWN1cml0eSBidWdzIHNob3VsZCBiZSByZXBvcnRlZCB0byBb aHBuc3NoQHBzYy5lZHVdKG1haWx0bzpocG5zc2hAcHNjLmVkdSkuCi1kaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMgb3BlbnNzaC0xMC4zcDEvc2Fu ZGJveC1zZWNjb21wLWZpbHRlci5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zYW5kYm94LXNl Y2NvbXAtZmlsdGVyLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBv cGVuc3NoLTEwLjNwMS9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMJMjAyNi0wNy0wMiAwMDoyNzoy OS43Mjk3MTI1NDggKzAyMDAKLUBAIC0zMjMsNiArMzIzLDkgQEAKLSAjaWZkZWYgX19OUl9nZXRl dWlkMzIKLSAJU0NfQUxMT1coX19OUl9nZXRldWlkMzIpLAotICNlbmRpZgotKyNpZmRlZiBfX05S X2dldHBlZXJuYW1lIC8qIG5vdCBkZWZpbmVkIG9uIGFyY2hzIHRoYXQgZ28gdmlhIHNvY2tldGNh bGwoMikgKi8KLSsJU0NfQUxMT1coX19OUl9nZXRwZWVybmFtZSksCi0rI2VuZGlmCi0gI2lmZGVm IF9fTlJfZ2V0cGdpZAotIAlTQ19BTExPVyhfX05SX2dldHBnaWQpLAotICNlbmRpZgotQEAgLTQ0 NCw2ICs0NDcsOSBAQAotICNpZmRlZiBfX05SX3NpZ3Byb2NtYXNrCi0gCVNDX0FMTE9XKF9fTlJf c2lncHJvY21hc2spLAotICNlbmRpZgotKyNpZmRlZiBfX05SX3NvY2tldGNhbGwKLSsJU0NfQUxM T1coX19OUl9zb2NrZXRjYWxsKSwKLSsjZW5kaWYKLSAjaWZkZWYgX19OUl90aW1lCi0gCVNDX0FM TE9XKF9fTlJfdGltZSksCi0gI2VuZGlmCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9z Y3AuMSBvcGVuc3NoLTEwLjNwMS9zY3AuMQotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2NwLjEJ MjAyNi0wNy0wMiAwMDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9z Y3AuMQkyMDI2LTA3LTAyIDA5OjE4OjIxLjAxMTUxNzM3NSArMDIwMAotQEAgLTE4LDcgKzE4LDcg QEAKLSAuTmQgT3BlblNTSCBzZWN1cmUgZmlsZSBjb3B5Ci0gLlNoIFNZTk9QU0lTCi0gLk5tIHNj cAotLS5PcCBGbCAzNDZBQkNPcHFScnNUdgotKy5PcCBGbCAzNDZBQkNPcHFScnNUdloKLSAuT3Ag RmwgYyBBciBjaXBoZXIKLSAuT3AgRmwgRCBBciBzZnRwX3NlcnZlcl9wYXRoCi0gLk9wIEZsIEYg QXIgc3NoX2NvbmZpZwotQEAgLTMzLDYgKzMzLDggQEAKLSAuU2ggREVTQ1JJUFRJT04KLSAuTm0K LSBjb3BpZXMgZmlsZXMgYmV0d2VlbiBob3N0cyBvbiBhIG5ldHdvcmsuCi0rSXQgaXMgYmluYXJ5 IGNvbXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc2NwIGluY2x1ZGluZwotK3RoZSB1c2Ugb2YgdGhl IHNhbWUgZGlyZWN0aXZlcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4Y2VwdCB3aGVyZSBu b3RlZC4gCi0gLlBwCi0gLk5tCi0gdXNlcyB0aGUgU0ZUUCBwcm90b2NvbCBvdmVyIGFuCi1AQCAt MjU4LDYgKzI2MCw3IEBACi0gLkl0IFR1bm5lbAotIC5JdCBUdW5uZWxEZXZpY2UKLSAuSXQgVXBk YXRlSG9zdEtleXMKLSsuSXQgVXNlTVBUQ1AKLSAuSXQgVXNlcgotIC5JdCBVc2VyS25vd25Ib3N0 c0ZpbGUKLSAuSXQgVmVyaWZ5SG9zdEtleUROUwotQEAgLTI5NCw2ICsyOTcsMTAgQEAKLSBOb3Rl IHRoYXQKLSAuTm0KLSBmb2xsb3dzIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkIGluIHRoZSB0 cmVlIHRyYXZlcnNhbC4KLSsuSXQgRmwgWgotK1Jlc3VtZSBmYWlsZWQgb3IgaW50ZXJydXB0ZWQg dHJhbnNmZXIuIElkZW50aWNhbCBmaWxlcyB3aWxsIGJlIHNraXBwZWQuIFJlbW90ZSBtdXN0IGhh dmUgcmVzdW1lIG9wdGlvbi4KLSsuTm0KLStvbmx5IG9wdGlvbi4KLSAuSXQgRmwgUyBBciBwcm9n cmFtCi0gTmFtZSBvZgotIC5BciBwcm9ncmFtCi1AQCAtMzAxLDYgKzMwOCwxNCBAQAotIFRoZSBw cm9ncmFtIG11c3QgdW5kZXJzdGFuZAotIC5YciBzc2ggMQotIG9wdGlvbnMuCi0rLkl0IEZsIHog QXIgcHJvZ3JhbQotK1BhdGggdG8gaHBuc2NwIG9uIHJlbW90ZSBzeXN0ZW0uIFVzZWZ1bCBpZiBy ZW1vdGUgaGFzIG11bHRpcGxlIHNjcCBpbnN0YWxscy4KLStGb3IgZXhhbXBsZSwgdXNpbmcgdGhl IHJlc3VtZSBvcHRpb24gYnV0IHRoZSBkZWZhdWx0IHJlbW90ZSBzY3AgZG9lcyBub3QgaGF2ZSB0 aGUgcmVzdW1lIG9wdGlvbi4KLStVc2UgLXogdG8gcG9pbnQgdGhlIHZlcnNpb24gdGhhdCBkb2Vz IC0gZS5nLiAteiAvb3B0L2hwbnNzaC9iaW4vaHBuc2NwLgotKy5ObQotK29ubHkgb3B0aW9uLiAK LSsuSXQgRmwgcwotK1VzZSB0aGUgU0ZUUCBwcm90b2NvbCBmb3IgdHJhbnNmZXJzIHJhdGhlciB0 aGFuIHRoZSBvcmlnaW5hbCBzY3AgcHJvdG9jb2wuCi0gLkl0IEZsIFQKLSBEaXNhYmxlIHN0cmlj dCBmaWxlbmFtZSBjaGVja2luZy4KLSBCeSBkZWZhdWx0IHdoZW4gY29weWluZyBmaWxlcyBmcm9t IGEgcmVtb3RlIGhvc3QgdG8gYSBsb2NhbCBkaXJlY3RvcnkKLUBAIC0zMjcsMTAgKzM0MiwxMyBA QAotIC5JdCBDbSBucmVxdWVzdHMgTnMgPSBOcyBBciB2YWx1ZQotIENvbnRyb2xzIGhvdyBtYW55 IGNvbmN1cnJlbnQgU0ZUUCByZWFkIG9yIHdyaXRlIHJlcXVlc3RzIG1heSBiZSBpbiBwcm9ncmVz cwotIGF0IGFueSBwb2ludCBpbiB0aW1lIGR1cmluZyBhIGRvd25sb2FkIG9yIHVwbG9hZC4KLS1C eSBkZWZhdWx0IDY0IHJlcXVlc3RzIG1heSBiZSBhY3RpdmUgY29uY3VycmVudGx5LgotK1RoaXMg dmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDgxOTIuCi0rQnkgZGVmYXVsdCAxMDI0IHJlcXVl c3RzIG1heSBiZSBhY3RpdmUgY29uY3VycmVudGx5LgotIC5JdCBDbSBidWZmZXIgTnMgPSBOcyBB ciB2YWx1ZQotIENvbnRyb2xzIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplIGZvciBhIHNpbmdsZSBT RlRQIHJlYWQvd3JpdGUgb3BlcmF0aW9uIHVzZWQKLSBkdXJpbmcgZG93bmxvYWQgb3IgdXBsb2Fk LgotK1RoaXMgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDFCIGFuZCAyNTVLQi4gWW91IG1heSB1c2UK LSt0aGUgSyB1bml0IGZvciB0aGUgc2l6ZS4gRS5nLiAzMjc2OCBvciAzMksuCi0gQnkgZGVmYXVs dCBhIDMyS0IgYnVmZmVyIGlzIHVzZWQuCi0gLkVsCi0gLkVsCi1AQCAtMzY0LDYgKzM4Miw3IEBA Ci0gLlNoIEFVVEhPUlMKLSAuQW4gVGltbyBSaW5uZSBBcSBNdCB0cmlAaWtpLmZpCi0gLkFuIFRh dHUgWWxvbmVuIEFxIE10IHlsb0Bjcy5odXQuZmkKLSsuQW4gQ2hyaXMgUmFwaWVyIEFxIE10IHJh cGllckBwc2MuZWR1Ci0gLlNoIENBVkVBVFMKLSBUaGUgbGVnYWN5IFNDUCBwcm90b2NvbCAoc2Vs ZWN0ZWQgYnkgdGhlCi0gLkZsIE8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NjcC5j IG9wZW5zc2gtMTAuM3AxL3NjcC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zY3AuYwkyMDI2 LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NjcC5j CTIwMjYtMDctMDIgMTA6MTY6MTYuMzI3Mjc5NTc1ICswMjAwCi1AQCAtMTcsNiArMTcsNyBAQAot IC8qCi0gICogQ29weXJpZ2h0IChjKSAxOTk5IFRoZW8gZGUgUmFhZHQuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotICAqIENvcHlyaWdodCAoYykgMTk5OSBBYXJvbiBDYW1wYmVsbC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICogQ29weXJpZ2h0IChjKSAyMDIxIENocmlzIFJhcGllci4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotQEAgLTEx Myw2ICsxMTQsMTIgQEAKLSAjaW5jbHVkZSAibWlzYy5oIgotICNpbmNsdWRlICJwcm9ncmVzc21l dGVyLmgiCi0gI2luY2x1ZGUgInV0ZjguaCIKLSsvKiBsaWJyZXNzbCBkb2Vzbid0IHN1cHBvcnQg dGhlIGJsYWtlMmI1MTIgZGlnZXN0IHNvCi0rICogd2UgbmVlZCB0byBwcmV2ZW50IGxpYnJlc3Ns IGZyb20gdXNpbmcgdGhlIHJlc3VtZSBmZWF0dXJlCi0rICogY2pyIDcvMTgvMjAyMyAqLwotKyNp ZiAoZGVmaW5lZCBXSVRIX09QRU5TU0wpICYmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVN QkVSKQotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNlbmRpZgotICNpbmNsdWRlICJzZnRw LmgiCi0gCi0gI2luY2x1ZGUgInNmdHAtY29tbW9uLmgiCi1AQCAtMTU1LDYgKzE2MiwxMCBAQAot IC8qIFRoaXMgaXMgdGhlIHByb2dyYW0gdG8gZXhlY3V0ZSBmb3IgdGhlIHNlY3VyZSBjb25uZWN0 aW9uLiAoInNzaCIgb3IgLVMpICovCi0gY2hhciAqc3NoX3Byb2dyYW0gPSBfUEFUSF9TU0hfUFJP R1JBTTsKLSAKLSsvKiB0aGlzIGlzIHBhdGggdG8gdGhlIHJlbW90ZSBzY3AgcHJvZ3JhbSBhbGxv d2luZyB0aGUgdXNlciB0byBzcGVjaWZ5Ci0rICogYSBub24tZGVmYXVsdCBzY3AgKi8KLStjaGFy ICpyZW1vdGVfcGF0aDsKLSsKLSAvKiBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHBpZCBvZiBz c2hfcHJvZ3JhbSAqLwotIHBpZF90IGRvX2NtZF9waWQgPSAtMTsKLSBwaWRfdCBkb19jbWRfcGlk MiA9IC0xOwotQEAgLTE2OSw2ICsxODAsMTcgQEAKLSBpbnQgc2Z0cF9nbG9iKHN0cnVjdCBzZnRw X2Nvbm4gKiwgY29uc3QgY2hhciAqLCBpbnQsCi0gICAgIGludCAoKikoY29uc3QgY2hhciAqLCBp bnQpLCBnbG9iX3QgKik7IC8qIHByb3RvIGZvciBzZnRwLWdsb2IuYyAqLwotIAotKy8qIEZsYWcg dG8gaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGEgZmlsZSByZXN1bWUgKi8KLStpbnQgcmVzdW1lX2Zs YWcgPSAwOyAvKiAwIGlzIG9mZiwgMSBpcyBvbiAqLwotKwotKy8qIHdlIHdhbnQgdGhlIGhvc3Qg bmFtZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCi0rY2hhciBob3N0bmFtZVtIT1NUX05BTUVf TUFYICsgMV07Ci0rCi0rLyogZGVmaW5lcyBmb3IgdGhlIHJlc3VtZSBmdW5jdGlvbi4gTmVlZCB0 aGVtIGV2ZW4gaWYgbm90IHN1cHBvcnRlZCAqLwotKyNkZWZpbmUgSEFTSF9MRU4gMTI4ICAgICAg ICAgICAgICAgLyo0MCBzaGExLCA2NCBibGFrZTJzMjU2IDEyOCBibGFrZTJiNTEyKi8KLSsjZGVm aW5lIEJVRl9BTkRfSEFTSCBIQVNIX0xFTiArIDY0IC8qIGxlbmd0aCBvZiB0aGUgaGFzaCBhbmQg b3RoZXIgZGF0YSB0byBnZXQgc2l6ZSBvZiBidWZmZXIgKi8KLSsjZGVmaW5lIEhBU0hfQlVGTEVO IDgxOTIJICAgLyogODE5MiBzZWVtcyB0byBiZSBhIGdvb2QgYmFsYW5jZSBiZXR3ZWVuIGZyZWFk cwotKwkJCQkgICAgKiBhbmQgdGhlIGRpZ2VzdCBmdW5jKi8KLSBzdGF0aWMgdm9pZAotIGtpbGxj aGlsZChpbnQgc2lnbm8pCi0gewotQEAgLTIxNiw2ICsyMzgsOSBAQAotIAlpbnQgc3RhdHVzOwot IAlwaWRfdCBwaWQ7Ci0gCi0rI2lmZGVmIERFQlVHCi0rCWZwcmludGYoc3RkZXJyLCAiSW4gZG9f bG9jYWxfY21kXG4iKTsKLSsjZW5kaWYKLSAJaWYgKGEtPm51bSA9PSAwKQotIAkJZmF0YWwoImRv X2xvY2FsX2NtZDogbm8gYXJndW1lbnRzIik7Ci0gCi1AQCAtNDQxLDYgKzQ2Niw4IEBACi0gdm9p ZCB0b2xvY2FsKGludCwgY2hhciAqW10sIGVudW0gc2NwX21vZGVfZSwgY2hhciAqc2Z0cF9kaXJl Y3QpOwotIHZvaWQgdG9yZW1vdGUoaW50LCBjaGFyICpbXSwgZW51bSBzY3BfbW9kZV9lLCBjaGFy ICpzZnRwX2RpcmVjdCk7Ci0gdm9pZCB1c2FnZSh2b2lkKTsKLSt2b2lkIGNhbGN1bGF0ZV9oYXNo KGNoYXIgKiwgY2hhciAqLCBvZmZfdCk7IC8qZ2V0IHRoZSBoYXNoIG9mIGZpbGUgdG8gbGVuZ3Ro Ki8KLSt2b2lkIHJhbmRfc3RyKGNoYXIgKiwgc2l6ZV90KTsgLypnZW4gcmFuZG9tZSBjaGFyIHN0 cmluZyAqLwotIAotIHZvaWQgc291cmNlX3NmdHAoaW50LCBjaGFyICosIGNoYXIgKiwgc3RydWN0 IHNmdHBfY29ubiAqKTsKLSB2b2lkIHNpbmtfc2Z0cChpbnQsIGNoYXIgKiwgY29uc3QgY2hhciAq LCBzdHJ1Y3Qgc2Z0cF9jb25uICopOwotQEAgLTQ1OSwxMSArNDg2LDE4IEBACi0gCWNoYXIgKnNm dHBfZGlyZWN0ID0gTlVMTDsKLSAJbG9uZyBsb25nIGxsdjsKLSAKLSsJLyogd2UgdXNlIHRoaXMg dG8gcHJlcGVuZCB0aGUgZGVidWdnaW5nIHN0YXRlbWVudHMKLSsJICogc28gd2Uga25vdyB3aGlj aCBzaWRlIGlzIHNheWluZyB3aGF0ICovCi0rCWdldGhvc3RuYW1lKGhvc3RuYW1lLCBIT1NUX05B TUVfTUFYICsgMSk7Ci0rCi0gCS8qIEVuc3VyZSB0aGF0IGZkcyAwLCAxIGFuZCAyIGFyZSBvcGVu IG9yIGRpcmVjdGVkIHRvIC9kZXYvbnVsbCAqLwotIAlzYW5pdGlzZV9zdGRmZCgpOwotIAotIAlt c2V0bG9jYWxlKCk7Ci0gCi0rCS8qIGZvciB1c2Ugd2l0aCByYW5kIGZ1bmN0aW9uIHdoZW4gcmVz dW1lIG9wdGlvbiBpcyB1c2VkKi8KLSsJc3JhbmQodGltZShOVUxMKSk7Ci0rCi0gCS8qIENvcHkg YXJndiwgYmVjYXVzZSB3ZSBtb2RpZnkgaXQgKi8KLSAJYXJndjAgPSBhcmd2WzBdOwotIAluZXdh cmd2ID0geGNhbGxvYyhNQVhJTVVNKGFyZ2MgKyAxLCAxKSwgc2l6ZW9mKCpuZXdhcmd2KSk7Ci1A QCAtNDg4LDcgKzUyMiw3IEBACi0gCi0gCWZmbGFnID0gVGZsYWcgPSB0ZmxhZyA9IDA7Ci0gCXdo aWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwKLS0JICAgICIxMjM0NkFCQ1RkZk9wcVJyc3R2 RDpGOko6TTpQOlM6YzppOmw6bzpYOiIpKSAhPSAtMSkgewotKwkgICAgIjEyMzQ2QUJDVGRmT3Bx UnJzdHZaRDpGOko6TTpQOlM6YzppOmw6bzpYOiIpKSAhPSAtMSkgewotIAkJc3dpdGNoIChjaCkg ewotIAkJLyogVXNlci12aXNpYmxlIGZsYWdzLiAqLwotIAkJY2FzZSAnMSc6Ci1AQCAtNTY5LDI0 ICs2MDMsMzYgQEAKLSAJCQlhZGRhcmdzKCZyZW1vdGVfcmVtb3RlX2FyZ3MsICItcSIpOwotIAkJ CXNob3dwcm9ncmVzcyA9IDA7Ci0gCQkJYnJlYWs7Ci0rI2lmIChkZWZpbmVkIFdJVEhfT1BFTlNT TCkgJiYgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCi0rCQljYXNlICdaJzoKLSsJ CQkvKiBjdXJyZW50bHkgcmVzdW1lIG9ubHkgd29ya3MgaW4gU0NQIG1vZGUgKi8KLSsJCQlyZXN1 bWVfZmxhZyA9IDE7Ci0rCQkJbW9kZSA9IE1PREVfU0NQOwotKwkJCWJyZWFrOwotKyNlbmRpZgot IAkJY2FzZSAnWCc6Ci0gCQkJLyogUGxlYXNlIGtlZXAgaW4gc3luYyB3aXRoIHNmdHAuYyAtWCAq LwotIAkJCWlmIChzdHJuY21wKG9wdGFyZywgImJ1ZmZlcj0iLCA3KSA9PSAwKSB7Ci0gCQkJCXIg PSBzY2FuX3NjYWxlZChvcHRhcmcgKyA3LCAmbGx2KTsKLS0JCQkJaWYgKHIgPT0gMCAmJiAobGx2 IDw9IDAgfHwgbGx2ID4gMjU2ICogMTAyNCkpIHsKLSsJCQkJLyogZG9uJ3QgYXNrIGZvciBhIGJ1 ZmZlciBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bQotKwkJCQkgKiBzaXplIHRoYXQgU0ZUUCBjYW4g aGFuZGxlICovCi0rCQkJCWlmIChyID09IDAgJiYgKGxsdiA8PSAwIHx8IGxsdiA+IChTRlRQX01B WF9NU0dfTEVOR1RIIC0gMTAyNCkpKSB7Ci0gCQkJCQlyID0gLTE7Ci0gCQkJCQllcnJubyA9IEVJ TlZBTDsKLSAJCQkJfQotIAkJCQlpZiAociA9PSAtMSkgewotLQkJCQkJZmF0YWwoIkludmFsaWQg YnVmZmVyIHNpemUgXCIlc1wiOiAlcyIsCi0tCQkJCQkgICAgIG9wdGFyZyArIDcsIHN0cmVycm9y KGVycm5vKSk7Ci0rCQkJCQlmYXRhbCgiSW52YWxpZCBidWZmZXIgc2l6ZS4gTXVzdCBiZSBiZXR3 ZWVuIDFCIGFuZCAyNTVLQi4iCi0rCQkJCQkgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyA3LCBz dHJlcnJvcihlcnJubykpOwotIAkJCQl9Ci0gCQkJCXNmdHBfY29weV9idWZsZW4gPSAoc2l6ZV90 KWxsdjsKLSAJCQl9IGVsc2UgaWYgKHN0cm5jbXAob3B0YXJnLCAibnJlcXVlc3RzPSIsIDEwKSA9 PSAwKSB7Ci0tCQkJCWxsdiA9IHN0cnRvbnVtKG9wdGFyZyArIDEwLCAxLCAyNTYgKiAxMDI0LAot KwkJCQkvKiBtb3JlIHRoYW4gMTBrIHRvIDE1ayByZXF1ZXN0cyBzdGFydHMgc3RhbGxpbmcgdGhl IGNvbm5lY3Rpb24KLSsJCQkJICogODE5MiAqIGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgMjU2TUIg b2Ygb3V0c3RhbmRpbmcgZGF0YS4KLSsJCQkJICogaWYgdXNlcnMgbmVlZCBtb3JlIHRoZW4gdGhl eSBuZWVkIHRvIHVwIHRoZSBidWZmZXIgc2l6ZSAqLwotKwkJCQlsbHYgPSBzdHJ0b251bShvcHRh cmcgKyAxMCwgMSwgOCAqIDEwMjQsCi0gCQkJCSAgICAmZXJyc3RyKTsKLSAJCQkJaWYgKGVycnN0 ciAhPSBOVUxMKSB7Ci0tCQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMgIgot KwkJCQkJZmF0YWwoIkludmFsaWQgbnVtYmVyIG9mIHJlcXVlc3RzLiBNdXN0IGJlIGJldHdlZW4g MSBhbmQgODE5Mi4gIgotIAkJCQkJICAgICJcIiVzXCI6ICVzIiwgb3B0YXJnICsgMTAsIGVycnN0 cik7Ci0gCQkJCX0KLSAJCQkJc2Z0cF9ucmVxdWVzdHMgPSAoc2l6ZV90KWxsdjsKLUBAIC02NzQs MTEgKzcyMCwxOSBAQAotIAlyZW1pbiA9IHJlbW91dCA9IC0xOwotIAlkb19jbWRfcGlkID0gLTE7 Ci0gCS8qIENvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgb24gcmVtb3RlIHN5c3RlbSB1c2luZyAic3No Ii4gKi8KLS0JKHZvaWQpIHNucHJpbnRmKGNtZCwgc2l6ZW9mIGNtZCwgInNjcCVzJXMlcyVzIiwK LSsJLyogSW4gdGhlIGV2ZW50IG9mIGFuIGhwbiB0byBocG4gY29ubmVjdGlvbiB0aGUgc2NwCi0r CSAqIGNvbW1hbmQgaXMgcmV3cml0dGVuIHRvIGhwbnNjcC4gVGhpcyBoYXBwZW5zIGluCi0rCSAq IGNsaWVudGxvb3AuYyAtY2pyIDEyLzEyLzIwMjIgKi8KLSsKLSsJKHZvaWQpIHNucHJpbnRmKGNt ZCwgc2l6ZW9mIGNtZCwgIiVzJXMlcyVzJXMlcyIsCi0rCSAgICByZW1vdGVfcGF0aCA/IHJlbW90 ZV9wYXRoIDogInNjcCIsCi0gCSAgICB2ZXJib3NlX21vZGUgPyAiIC12IiA6ICIiLAotIAkgICAg aWFtcmVjdXJzaXZlID8gIiAtciIgOiAiIiwgcGZsYWcgPyAiIC1wIiA6ICIiLAotLQkgICAgdGFy Z2V0c2hvdWxkYmVkaXJlY3RvcnkgPyAiIC1kIiA6ICIiKTsKLS0KLSsJICAgIHRhcmdldHNob3Vs ZGJlZGlyZWN0b3J5ID8gIiAtZCIgOiAiIiwKLSsJICAgIHJlc3VtZV9mbGFnID8gIiAtWiIgOiAi Iik7Ci0rI2lmZGVmIERFQlVHCi0rCWZwcmludGYoc3RkZXJyLCAiJXM6IFNlbmRpbmcgY21kICVz XG4iLCBob3N0bmFtZSwgY21kKTsKLSsjZW5kaWYKLSAJKHZvaWQpIHNzaF9zaWduYWwoU0lHUElQ RSwgbG9zdGNvbm4pOwotIAotIAlpZiAoY29sb24oYXJndlthcmdjIC0gMV0pKQkvKiBEZXN0IGlz IHJlbW90ZSBob3N0LiAqLwotQEAgLTY4OCw2ICs3NDIsNyBAQAotIAkJCXZlcmlmeWRpcihhcmd2 W2FyZ2MgLSAxXSk7Ci0gCQl0b2xvY2FsKGFyZ2MsIGFyZ3YsIG1vZGUsIHNmdHBfZGlyZWN0KTsJ LyogRGVzdCBpcyBsb2NhbCBob3N0LiAqLwotIAl9Ci0rCi0gCS8qCi0gCSAqIEZpbmFsbHkgY2hl Y2sgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBzc2ggcHJvY2VzcywgaWYgb25lIHdhcyBmb3JrZWQK LSAJICogYW5kIG5vIGVycm9yIGhhcyBvY2N1cnJlZCB5ZXQKLUBAIC0xMzA5LDYgKzEzNjQsNzQg QEAKLSAJc2Z0cF9mcmVlKGNvbm4pOwotIH0KLSAKLSsvKiBjYWxjdWxhdGUgdGhlIGhhc2ggb2Yg YSBmaWxlIHVwIHRvIGxlbmd0aCBieXRlcwotKyAqIHRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUg aWYgcmVtb3RlIGFuZCBsb2NhbCBmaWxlCi0rICogZnJhZ21lbnRzIG1hdGNoLiBUaGVyZSBtYXkg YmUgYSBtb3JlIGVmZmljaWVudCBwcm9jZXNzIGZvciB0aGUgaGFzaGluZwotKyAqIE5vdGU6IExp YnJlU1NMIGRvZXNuJ3Qgc3VwcG9ydCBibGFrZTJiNTEyIHNvIHdlIGNhbid0IG9mZmVyIHRoZW0K LSsgKiB0aGUgcmVzdW1lIGZlYXR1cmUgY2pyIDcvMTgvMjAyMyAqLwotKyNpZiAoZGVmaW5lZCBX SVRIX09QRU5TU0wpICYmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQotK3ZvaWQg Y2FsY3VsYXRlX2hhc2goY2hhciAqZmlsZW5hbWUsIGNoYXIgKm91dHB1dCwgb2ZmX3QgbGVuZ3Ro KQotK3sKLSsJaW50IG4sIG1kX2xlbjsKLSsJRVZQX01EX0NUWCAqYzsKLSsJY29uc3QgRVZQX01E ICptZDsKLSsJY2hhciBidWZbSEFTSF9CVUZMRU5dOwotKwlzc2l6ZV90IGJ5dGVzOwotKwl1bnNp Z25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKwljaGFyIHRtcFszXTsKLSsJRklMRSAq ZmlsZV9wdHI7Ci0rCSpvdXRwdXQgPSAnXDAnOwotKwotKwkvKiBvcGVuIGZpbGUgZm9yIGNhbGN1 bGF0aW5nIGhhc2ggKi8KLSsJZmlsZV9wdHIgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKLSsJaWYg KGZpbGVfcHRyPT1OVUxMKQotKwl7Ci0rCQlpZiAodmVyYm9zZV9tb2RlKSB7Ci0rCQkJZnByaW50 ZihzdGRlcnIsICIlczogZXJyb3Igb3BlbmluZyBmaWxlICVzXG4iLCBob3N0bmFtZSwgZmlsZW5h bWUpOwotKwkJCS8qIGZpbGUgdGhlIGV4cGVjdGVkIG91dHB1dCB3aXRoIHNwYWNlcyAqLwotKwkJ CXNucHJpbnRmKG91dHB1dCwgSEFTSF9MRU4sICIlcyIsICAiICIpOwotKwkJfQotKwkJcmV0dXJu OwotKwl9Ci0rCi0rCW1kID0gRVZQX2dldF9kaWdlc3RieW5hbWUoImJsYWtlMmI1MTIiKTsKLSsJ YyA9IEVWUF9NRF9DVFhfbmV3KCk7Ci0rCUVWUF9EaWdlc3RJbml0X2V4KGMsIG1kLCBOVUxMKTsK LSsKLSsJd2hpbGUgKGxlbmd0aCA+IDApIHsKLSsJCWlmIChsZW5ndGggPiBIQVNIX0JVRkxFTikK LSsJCQkvKiBmcmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVhZC4KLSsJCQkg KiBpbiB0aGlzIGNhc2UgMS4gTXVsdGlwbHkgYnkgdGhlIGxlbmd0aCB0byBnZXQgdGhlIGJ5dGVz ICovCi0rCQkJYnl0ZXM9ZnJlYWQoYnVmLCBIQVNIX0JVRkxFTiwgMSwgZmlsZV9wdHIpICogSEFT SF9CVUZMRU47Ci0rCQllbHNlCi0rCQkJYnl0ZXM9ZnJlYWQoYnVmLCBsZW5ndGgsIDEsIGZpbGVf cHRyKSAqIGxlbmd0aDsKLSsJCUVWUF9EaWdlc3RVcGRhdGUoYywgYnVmLCBieXRlcyk7Ci0rCQls ZW5ndGggLT0gSEFTSF9CVUZMRU47Ci0rCX0KLSsJRVZQX0RpZ2VzdEZpbmFsKGMsIG91dCwgJm1k X2xlbik7Ci0rCUVWUF9NRF9DVFhfZnJlZShjKTsKLSsJLyogY29udmVydCB0aGUgaGFzaCBpbnRv IGEgc3RyaW5nICovCi0rCWZvcihuPTA7IG4gPCBtZF9sZW47IG4rKykgewotKwkJc25wcmludGYo dG1wLCAzLCAiJTAyeCIsIG91dFtuXSk7Ci0rCQlzdHJuY2F0KG91dHB1dCwgdG1wLCAzKTsKLSsJ fQotKyNpZmRlZiBERUJVRwotKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBIQVNIIElTICclcycgb2Yg bGVuZ3RoICVsZFxuIiwgaG9zdG5hbWUsIG91dHB1dCwgc3RybGVuKG91dHB1dCkpOwotKyNlbmRp ZgotKwlmY2xvc2UoZmlsZV9wdHIpOwotK30KLSsjZWxzZQotK3ZvaWQgY2FsY3VsYXRlX2hhc2go Y2hhciAqZmlsZW5hbWUsIGNoYXIgKm91dHB1dCwgb2ZmX3QgbGVuZ3RoKQotK3sKLSsgIC8qIGVt cHR5IGZ1bmN0aW9uIGZvciBidWlsZHMgd2l0aG91dCBvcGVuc3NsIG9yIGFyZSB1c2luZyBsaWJy ZXNzbCAqLwotK30KLSsjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCi0rCi0rI2RlZmluZSBUWVBF X09WRVJGTE9XKHR5cGUsIHZhbCkgXAotKwkoKHNpemVvZih0eXBlKSA9PSA0ICYmICh2YWwpID4g SU5UMzJfTUFYKSB8fCBcCi0rCSAoc2l6ZW9mKHR5cGUpID09IDggJiYgKHZhbCkgPiBJTlQ2NF9N QVgpIHx8IFwKLSsJIChzaXplb2YodHlwZSkgIT0gNCAmJiBzaXplb2YodHlwZSkgIT0gOCkpCi0r Ci0gLyogUHJlcGFyZSByZW1vdGUgcGF0aCwgaGFuZGxpbmcgfiBieSBhc3N1bWluZyBjd2QgaXMg dGhlIGhvbWVkaXIgKi8KLSBzdGF0aWMgY2hhciAqCi0gcHJlcGFyZV9yZW1vdGVfcGF0aChzdHJ1 Y3Qgc2Z0cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpwYXRoKQotQEAgLTEzOTYsMTQgKzE1MTks MjMgQEAKLSAJc3RydWN0IHN0YXQgc3RiOwotIAlzdGF0aWMgQlVGIGJ1ZmZlcjsKLSAJQlVGICpi cDsKLS0Jb2ZmX3QgaSwgc3RhdGJ5dGVzOwotKwlvZmZfdCBpLCBzdGF0Ynl0ZXMsIHhmZXJfc2l6 ZTsKLSAJc2l6ZV90IGFtdCwgbnI7Ci0gCWludCBmZCA9IC0xLCBoYWRlcnIsIGluZHg7Ci0tCWNo YXIgKmxhc3QsICpuYW1lLCBidWZbUEFUSF9NQVggKyAxMjhdLCBlbmNuYW1lW1BBVEhfTUFYXTsK LSsJY2hhciAqY3AsICpsYXN0LCAqbmFtZSwgYnVmW1BBVEhfTUFYICsgQlVGX0FORF9IQVNIXSwg ZW5jbmFtZVtQQVRIX01BWF07Ci0gCWludCBsZW47Ci0rCWNoYXIgaGFzaHN1bVtIQVNIX0xFTisx XSwgdGVzdF9oYXNoc3VtW0hBU0hfTEVOKzFdOwotKwljaGFyIGluYnVmW1BBVEhfTUFYICsgQlVG X0FORF9IQVNIXTsKLSsJc2l6ZV90IGluc2l6ZTsKLSsJdW5zaWduZWQgbG9uZyBsb25nIHVsbDsK LSsJY2hhciAqbWF0Y2g7IC8qIHVzZWQgdG8gY29tbXVuaWNhdGUgZnJhZ21lbnQgbWF0Y2ggKi8K LSsJbWF0Y2ggPSAiXDAiOyAvKmRlZmF1bHQgaXMgdG8gZmFpbCB0aGUgbWF0Y2guIE5VTEwgYW5k IEYgYm90aCBpbmRpY2F0ZSBmYWlsKi8KLSAKLSAJZm9yIChpbmR4ID0gMDsgaW5keCA8IGFyZ2M7 ICsraW5keCkgewotIAkJbmFtZSA9IGFyZ3ZbaW5keF07Ci0rI2lmZGVmIERFQlVHCi0rCQlmcHJp bnRmKHN0ZGVyciwgIiVzIGluZGV4IGlzICVkLCBuYW1lIGlzICVzXG4iLCBob3N0bmFtZSwgaW5k eCwgbmFtZSk7Ci0rI2VuZGlmCi0gCQlzdGF0Ynl0ZXMgPSAwOwotIAkJbGVuID0gc3RybGVuKG5h bWUpOwotIAkJd2hpbGUgKGxlbiA+IDEgJiYgbmFtZVtsZW4tMV0gPT0gJy8nKQotQEAgLTE0MjUs NiArMTU1NywxNCBAQAotIAkJdW5zZXRfbm9uYmxvY2soZmQpOwotIAkJc3dpdGNoIChzdGIuc3Rf bW9kZSAmIFNfSUZNVCkgewotIAkJY2FzZSBTX0lGUkVHOgotKwkJCS8qIG9ubHkgY2FsY3VsYXRl IGhhc2ggaWYgd2UgYXJlIGluIHJlc3VtZSBtb2RlIGFuZCBhIGZpbGUqLwotKwkJCWlmIChyZXN1 bWVfZmxhZykgewotKwkJCQljYWxjdWxhdGVfaGFzaChuYW1lLCBoYXNoc3VtLCBzdGIuc3Rfc2l6 ZSk7Ci0rI2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IE5hbWUgaXMgJyVz JyBhbmQgaGFzaCAnJXMnXG4iLCBob3N0bmFtZSwgbmFtZSwgaGFzaHN1bSk7Ci0rCQkJCWZwcmlu dGYgKHN0ZGVyciwiJXM6IHNpemUgb2YgJXMgaXMgJWxkXG4iLCBob3N0bmFtZSwgbmFtZSwgc3Ri LnN0X3NpemUpOwotKyNlbmRpZgotKwkJCX0KLSAJCQlicmVhazsKLSAJCWNhc2UgU19JRkRJUjoK LSAJCQlpZiAoaWFtcmVjdXJzaXZlKSB7Ci1AQCAtMTQ0NiwxNCArMTU4NiwxMzMgQEAKLSAJCQkJ Z290byBuZXh0OwotIAkJfQotICNkZWZpbmUJRklMRU1PREVNQVNLCShTX0lTVUlEfFNfSVNHSUR8 U19JUldYVXxTX0lSV1hHfFNfSVJXWE8pCi0tCQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsICJD JTA0byAlbGxkICVzXG4iLAotLQkJICAgICh1X2ludCkgKHN0Yi5zdF9tb2RlICYgRklMRU1PREVN QVNLKSwKLS0JCSAgICAobG9uZyBsb25nKXN0Yi5zdF9zaXplLCBsYXN0KTsKLS0JCWlmICh2ZXJi b3NlX21vZGUpCi0tCQkJZm1wcmludGYoc3RkZXJyLCAiU2VuZGluZyBmaWxlIG1vZGVzOiAlcyIs IGJ1Zik7Ci0rCQkvKiBBZGQgYSBoYXNoIG9mIHRoZSBmaWxlIGFsb25nIHdpdGggdGhlIGZpbGVt b2RlIGlmIGluIHJlc3VtZSAqLwotKwkJaWYgKHJlc3VtZV9mbGFnKQotKwkJCXNucHJpbnRmKGJ1 Ziwgc2l6ZW9mIGJ1ZiwgIkMlMDRvICVsbGQgJXMgJXNcbiIsCi0rCQkJCSAodV9pbnQpIChzdGIu c3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCi0rCQkJCSAobG9uZyBsb25nKXN0Yi5zdF9zaXplLCBo YXNoc3VtLCBsYXN0KTsKLSsJCWVsc2UKLSsJCQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsICJD JTA0byAlbGxkICVzXG4iLAotKwkJCQkgKHVfaW50KSAoc3RiLnN0X21vZGUgJiBGSUxFTU9ERU1B U0spLAotKwkJCQkgKGxvbmcgbG9uZylzdGIuc3Rfc2l6ZSwgbGFzdCk7Ci0rCi0rI2lmZGVmIERF QlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBTZW5kaW5nIGZpbGUgbW9kZXM6ICVzIiwgaG9z dG5hbWUsIGJ1Zik7Ci0rI2VuZGlmCi0gCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQs IGJ1Ziwgc3RybGVuKGJ1ZikpOwotLQkJaWYgKHJlc3BvbnNlKCkgPCAwKQotKwotKyNpZmRlZiBE RUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogaW5idWYgbGVuZ3RoICVsZCBidWYgbGVuZ3Ro ICVsZFxuIiwgaG9zdG5hbWUsIHN0cmxlbihpbmJ1ZiksIHN0cmxlbihidWYpKTsKLSsjZW5kaWYK LSsJCWlmIChyZXN1bWVfZmxhZykgeyAvKiBnZXQgdGhlIGhhc2ggcmVzcG9uc2UgZnJvbSB0aGUg cmVtb3RlICovCi0rCQkJKHZvaWQpIGF0b21pY2lvKHJlYWQsIHJlbWluLCBpbmJ1ZiwgQlVGX0FO RF9IQVNIIC0gMSk7Ci0rI2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHdl IGdvdCAnJXMnIGluIGluYnVmIGxlbmd0aCAlbGQgYnVmIHdhcyAlbGRcbiIsCi0rCQkJCQlob3N0 bmFtZSwgaW5idWYsIHN0cmxlbihpbmJ1ZiksIHN0cmxlbihidWYpKTsKLSsjZW5kaWYKLSsJCX0K LSsJCWlmIChyZXNwb25zZSgpIDwgMCkgewotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IHJlc3BvbnNlIGlzIGxlc3MgdGhhbiAwXG4iLCBob3N0bmFtZSk7Ci0rI2VuZGlm Ci0gCQkJZ290byBuZXh0OwotKwkJfQotKwkJeGZlcl9zaXplID0gc3RiLnN0X3NpemU7Ci0rCi0r CQkvKiB3ZSBvbmx5IGRvIHRoZSBmb2xsb3dpbmcgaW4gcmVzdW1lIG1vZGUgYmVjYXVzZSB3ZSBo YXZlIGEKLSsJCSAqIG5ldyBidWYgZnJvbSB0aGUgcmVtb3RlIHRvIHBhcnNlICovCi0rCQlpZiAo cmVzdW1lX2ZsYWcpIHsKLSsJCQljcCA9IGluYnVmOwotKwkJCWlmICgqY3AgPT0gJ1InKSB7IC8q IHJlc3VtZSBmaWxlIHRyYW5zZmVyKi8KLSsJCQkJY2hhciAqaW5faGFzaHN1bTsgLyogd2hlcmUg dG8gaG9sZCB0aGUgaW5jb21pbmcgaGFzaCAqLwotKwkJCQlpbl9oYXNoc3VtID0gY2FsbG9jKEhB U0hfTEVOKzEsIHNpemVvZihjaGFyKSk7Ci0rCQkJCWZvciAoKytjcDsgY3AgPCBpbmJ1ZiArIDU7 IGNwKyspIHsKLSsJCQkJCS8qIHNraXAgb3ZlciB0aGUgbW9kZSAqLwotKwkJCQl9Ci0rCQkJCWlm ICgqY3ArKyAhPSAnICcpIHsKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IG1vZGUgbm90IGRl bGluZWF0ZWQhXG4iLCBob3N0bmFtZSk7Ci0rCQkJCX0KLSsKLSsJCQkJaWYgKCFpc2RpZ2l0KCh1 bnNpZ25lZCBjaGFyKSpjcCkpCi0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzaXplIG5vdCBw cmVzZW50XG4iLCBob3N0bmFtZSk7Ci0rCQkJCXVsbCA9IHN0cnRvdWxsKGNwLCAmY3AsIDEwKTsK LSsJCQkJaWYgKCFjcCB8fCAqY3ArKyAhPSAnICcpCi0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiBzaXplIG5vdCBkZWxpbWl0ZWRcbiIsIGhvc3RuYW1lKTsKLSsJCQkJaWYgKFRZUEVfT1ZFUkZM T1cob2ZmX3QsIHVsbCkpCi0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzaXplIG91dCBvZiBy YW5nZVxuIiwgaG9zdG5hbWUpOwotKwkJCQlpbnNpemUgPSAob2ZmX3QpdWxsOwotKwotKyNpZmRl ZiBERUJVRwotKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogcmVjZWl2ZWQgc2l6ZSBvZiAlbGRc biIsIGhvc3RuYW1lLCBpbnNpemUpOwotKyNlbmRpZgotKwotKwkJCQkvKiBjb3B5IHRoZSBjcCBw b2ludGVyIGJ5dGUgYnkgYnl0ZSAqLwotKwkJCQlpbnQgaTsKLSsJCQkJZm9yIChpID0gMDsgaSA8 IEhBU0hfTEVOOyBpKyspIHsKLSsJCQkJCXN0cm5jYXQoaW5faGFzaHN1bSwgY3ArKywgMSk7Ci0r CQkJCX0KLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IGluX2hhc2hz dW0gJyVzJ1xuIiwgaG9zdG5hbWUsIGluX2hhc2hzdW0pOwotKyNlbmRpZgotKwotKwkJCQkvKmdl dCB0aGUgaGFzaCBvZiB0aGUgc291cmNlIGZpbGUgdG8gdGhlIGJ5dGUgbGVuZ3RoIHdlIGp1c3Qg Z290Ki8KLSsJCQkJY2FsY3VsYXRlX2hhc2gobmFtZSwgdGVzdF9oYXNoc3VtLCBpbnNpemUpOwot KyNpZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYWxjdWxhdGVkIGhhc2hz dW0gb2YgbG9jYWwgJXMgdG8gJWxkIGlzICVzXG4iLAotKwkJCQkJaG9zdG5hbWUsIGxhc3QsIGlu c2l6ZSwgdGVzdF9oYXNoc3VtKTsKLSsjZW5kaWYKLSsJCQkJLyogY29tcGFyZSB0aGUgaW5jb21p bmcgaGFzaCB0byB0aGUgaGFzaCBvZiB0aGUgbG9jYWwgZmlsZSovCi0rCQkJCWlmIChzdHJjbXAo aW5faGFzaHN1bSwgdGVzdF9oYXNoc3VtKSA9PSAwKSB7Ci0rCQkJCQkvKiB0aGUgZnJhZ21lbnRz IG1hdGNoIHNvIHdlIHNob3VsZCBzZWVrIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUK LSsJCQkJCSAqIGxvY2FsIGZpbGUgYW5kIHNldCB0aGUgcmVtb3RlIGZpbGUgdG8gYXBwZW5kICov Ci0rI2lmZGVmIERFQlVHCi0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBGaWxlIGZyYWdtZW50 cyBtYXRjaFxuIiwgaG9zdG5hbWUpOwotKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogc2Vla2lu ZyB0byAlbGRcbiIsIGhvc3RuYW1lLCBpbnNpemUpOwotKyNlbmRpZgotKwkJCQkJeGZlcl9zaXpl ID0gc3RiLnN0X3NpemUgLSBpbnNpemU7Ci0rI2lmZGVmIERFQlVHCi0rCQkJCQlmcHJpbnRmKHN0 ZGVyciwgIiVzOiB4ZmVyX3NpemU6ICVsZCwgc3RiLnN0X3NpemU6ICVsZCBpbnNpemU6ICVsZFxu IiwKLSsJCQkJCQlob3N0bmFtZSwgeGZlcl9zaXplLCBzdGIuc3Rfc2l6ZSwgaW5zaXplKTsKLSsj ZW5kaWYKLSsJCQkJCWlmIChsc2VlayhmZCwgaW5zaXplLCBTRUVLX0NVUikgIT0gKG9mZl90KWlu c2l6ZSkgewotKyNpZmRlZiBERUJVRwotKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGxzZWVr IGRpZCBub3QgcmV0dXJuICVsZFxuIiwgaG9zdG5hbWUsIGluc2l6ZSkgOwotKyNlbmRpZgotKwkJ CQkJCWdvdG8gbmV4dDsKLSsJCQkJCX0KLSsJCQkJCW1hdGNoID0gIk0iOwotKwkJCQl9IGVsc2Ug ewotKwkJCQkJLyogdGhlIGZyYWdtZW50cyBkb24ndCBtYXRjaCBzbyB3ZSBzaG91bGQgc3RhcnQg b3ZlciBmcm9tIHRoZSBiZWdpbmluZyAqLwotKyNpZmRlZiBERUJVRwotKwkJCQkJZnByaW50Zihz dGRlcnIsICIlczogRmlsZSBmcmFnbWVudHMgZG8gbm90IG1hdGNoICclcycoaW4pICclcycobG9j YWwpXG4iLAotKwkJCQkgICAgICAgCQlob3N0bmFtZSwgaW5faGFzaHN1bSwgdGVzdF9oYXNoc3Vt KTsKLSsjZW5kaWYKLSsJCQkJCW1hdGNoID0gIkYiOwotKwkJCQkJeGZlcl9zaXplID0gc3RiLnN0 X3NpemU7Ci0rCQkJCX0KLSsJCQkJZnJlZShpbl9oYXNoc3VtKTsKLSsJCQl9Ci0rCQkJaWYgKCpj cCA9PSAnUycpIHsgLyogc2tpcCBmaWxlICovCi0rI2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYo c3RkZXJyLCAiJXM6IFNob3VsZCBiZSBza2lwcGluZyB0aGlzIGZpbGVcbiIsIGhvc3RuYW1lKTsK LSsjZW5kaWYKLSsJCQkJZ290byBuZXh0OwotKwkJCX0KLSsJCQlpZiAoKmNwID09ICdDJykgeyAv KnRyYW5zZmVyIGVudGlyZSBmaWxlKi8KLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZihzdGRl cnIsICIlczogUmVzZW5kaW5nIGVudGlyZSBmaWxlXG4iLCBob3N0bmFtZSk7Ci0rI2VuZGlmCi0r CQkJCXhmZXJfc2l6ZSA9IHN0Yi5zdF9zaXplOwotKwkJCX0KLSsJCQkvKiBuZWVkIHRvIHNlbmQg dGhlIG1hdGNoIHN0YXR1cwotKwkJCSAqIFdlIGFsd2F5cyBzZW5kIHRoZSBtYXRjaCBzdGF0dXMg b3Igd2UgZ2V0IG91dCBvZiBzeW5jCi0rCQkJICovCi0rI2lmZGVmIERFQlVHCi0rCQkJZnByaW50 ZihzdGRlcnIsICIlczogc2VuZGluZyBtYXRjaCAlc1xuIiwgaG9zdG5hbWUsIG1hdGNoKTsKLSsj ZW5kaWYKLSsJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIG1hdGNoLCAxKTsKLSsJ CX0KLSsKLSAJCWlmICgoYnAgPSBhbGxvY2J1ZigmYnVmZmVyLCBmZCwgQ09QWV9CVUZMRU4pKSA9 PSBOVUxMKSB7Ci0gbmV4dDoJCQlpZiAoZmQgIT0gLTEpIHsKLSAJCQkJKHZvaWQpIGNsb3NlKGZk KTsKLUBAIC0xNDYxLDEzICsxNzIwLDE3IEBACi0gCQkJfQotIAkJCWNvbnRpbnVlOwotIAkJfQot KwotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogZ29pbmcgdG8geGZlciAl bGRcbiIsIGhvc3RuYW1lLCB4ZmVyX3NpemUpOwotKyNlbmRpZgotIAkJaWYgKHNob3dwcm9ncmVz cykKLS0JCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCBzdGIuc3Rfc2l6ZSwgJnN0YXRi eXRlcyk7Ci0rCQkJc3RhcnRfcHJvZ3Jlc3NfbWV0ZXIoY3VyZmlsZSwgeGZlcl9zaXplLCAmc3Rh dGJ5dGVzKTsKLSAJCXNldF9ub25ibG9jayhyZW1vdXQpOwotLQkJZm9yIChoYWRlcnIgPSBpID0g MDsgaSA8IHN0Yi5zdF9zaXplOyBpICs9IGJwLT5jbnQpIHsKLSsJCWZvciAoaGFkZXJyID0gaSA9 IDA7IGkgPCB4ZmVyX3NpemU7IGkgKz0gYnAtPmNudCkgewotIAkJCWFtdCA9IGJwLT5jbnQ7Ci0t CQkJaWYgKGkgKyAob2ZmX3QpYW10ID4gc3RiLnN0X3NpemUpCi0tCQkJCWFtdCA9IHN0Yi5zdF9z aXplIC0gaTsKLSsJCQlpZiAoaSArIChvZmZfdClhbXQgPiB4ZmVyX3NpemUpCi0rCQkJCWFtdCA9 IHhmZXJfc2l6ZSAtIGk7Ci0gCQkJaWYgKCFoYWRlcnIpIHsKLSAJCQkJaWYgKChuciA9IGF0b21p Y2lvKHJlYWQsIGZkLAotIAkJCQkgICAgYnAtPmJ1ZiwgYW10KSkgIT0gYW10KSB7Ci1AQCAtMTY2 OCwyNCArMTkzMSwzNiBAQAotIHNpbmsoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFy ICpzcmMpCi0gewotIAlzdGF0aWMgQlVGIGJ1ZmZlcjsKLS0Jc3RydWN0IHN0YXQgc3RiOwotKwlz dHJ1Y3Qgc3RhdCBzdGIsIGNwc3RhdCwgbnBzdGF0OwotIAlCVUYgKmJwOwotIAlvZmZfdCBpOwot IAlzaXplX3QgaiwgY291bnQ7Ci0gCWludCBhbXQsIGV4aXN0cywgZmlyc3QsIG9mZDsKLSAJbW9k ZV90IG1vZGUsIG9tb2RlLCBtYXNrOwotLQlvZmZfdCBzaXplLCBzdGF0Ynl0ZXM7Ci0rCW9mZl90 IHNpemUsIHN0YXRieXRlcywgeGZlcl9zaXplOwotIAl1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwot IAlpbnQgc2V0aW1lcywgdGFyZ2lzZGlyLCB3cmVycjsKLS0JY2hhciBjaCwgKmNwLCAqbnAsICp0 YXJnLCAqd2h5LCAqdmVjdFsxXSwgYnVmWzIwNDhdLCB2aXNidWZbMjA0OF07Ci0rCWNoYXIgY2gs ICpjcCwgKm5wLCAqbnBfdG1wLCAqdGFyZywgKndoeSwgKnZlY3RbMV0sIGJ1ZlsxNjM4NF0sIHZp c2J1ZlsxNjM4NF07Ci0gCWNoYXIgKipwYXR0ZXJucyA9IE5VTEw7Ci0gCXNpemVfdCBuLCBucGF0 dGVybnMgPSAwOwotIAlzdHJ1Y3QgdGltZXZhbCB0dlsyXTsKLSsJY2hhciByZW1vdGVfaGFzaHN1 bVtIQVNIX0xFTisxXTsKLSsJY2hhciBsb2NhbF9oYXNoc3VtW0hBU0hfTEVOKzFdOwotKwljaGFy IHRtcGJ1ZltCVUZfQU5EX0hBU0hdOwotKwljaGFyIG91dGJ1ZltCVUZfQU5EX0hBU0hdOwotKwlj aGFyIG1hdGNoOwotKwlpbnQgYmFkX21hdGNoX2ZsYWcgPSAwOwotKwlucCA9IE5VTEw7IC8qIHRo aXMgd2FzIG9yaWdpbmFsbHkgJy8wJyBidXQgdGhhdCdzIHdyb25nICovCi0rCW5wX3RtcCA9IE5V TEw7Ci0rCi0gCi0gI2RlZmluZQlhdGltZQl0dlswXQotICNkZWZpbmUJbXRpbWUJdHZbMV0KLSAj ZGVmaW5lCVNDUkVXVVAoc3RyKQl7IHdoeSA9IHN0cjsgZ290byBzY3Jld3VwOyB9Ci0gCi0rI2lm ZGVmIERFQlVHCi0rICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBMT0NBTCBJbiBzaW5rIHdp dGggJXNcbiIsIGhvc3RuYW1lLCBzcmMpOwotKyNlbmRpZgotIAlpZiAoVFlQRV9PVkVSRkxPVyh0 aW1lX3QsIDApIHx8IFRZUEVfT1ZFUkZMT1cob2ZmX3QsIDApKQotIAkJU0NSRVdVUCgiVW5leHBl Y3RlZCBvZmZfdC90aW1lX3Qgc2l6ZSIpOwotIAotQEAgLTE3MDMsOSArMTk3OCwxNiBAQAotIAlp ZiAodGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkpCi0gCQl2ZXJpZnlkaXIodGFyZyk7Ci0gCi0rI2lm ZGVmIERFQlVHCi0rCWZwcmludGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0 LlxuIixob3N0bmFtZSk7Ci0rI2VuZGlmCi0gCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91 dCwgIiIsIDEpOwotIAlpZiAoc3RhdCh0YXJnLCAmc3RiKSA9PSAwICYmIFNfSVNESVIoc3RiLnN0 X21vZGUpKQotIAkJdGFyZ2lzZGlyID0gMTsKLSsKLSsjaWZkZWYgREVCVUcKLSsJZnByaW50Zihz dGRlcnIsICIlczogVGFyZ2V0IGlzICVzIHdpdGggYSBzaXplIG9mICVsZFxuIiwgaG9zdG5hbWUs IHRhcmcsIHN0Yi5zdF9zaXplKTsKLSsjZW5kaWYKLSAJaWYgKHNyYyAhPSBOVUxMICYmICFpYW1y ZWN1cnNpdmUgJiYgIVRmbGFnKSB7Ci0gCQkvKgotIAkJICogUHJlcGFyZSB0byB0cnkgdG8gcmVz dHJpY3QgaW5jb21pbmcgZmlsZW5hbWVzIHRvIG1hdGNoCi1AQCAtMTcxNCw3ICsxOTk2LDEyIEBA Ci0gCQlpZiAoYnJhY2VfZXhwYW5kKHNyYywgJnBhdHRlcm5zLCAmbnBhdHRlcm5zKSAhPSAwKQot IAkJCWZhdGFsX2YoImNvdWxkIG5vdCBleHBhbmQgcGF0dGVybiIpOwotIAl9Ci0rCi0gCWZvciAo Zmlyc3QgPSAxOzsgZmlyc3QgPSAwKSB7Ci0rCQliYWRfbWF0Y2hfZmxhZyA9IDA7IC8qIHVzZWQg aW4gcmVzdW1lIG1vZGUuICovCi0rI2lmZGVmIERFQlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiBBdCBzdGFydCBvZiBsb29wIGJ1ZiBpcyAlc1xuIiwgaG9zdG5hbWUsIGJ1Zik7Ci0rI2VuZGlm Ci0gCQljcCA9IGJ1ZjsKLSAJCWlmIChhdG9taWNpbyhyZWFkLCByZW1pbiwgY3AsIDEpICE9IDEp Ci0gCQkJZ290byBkb25lOwotQEAgLTE3NDIsNiArMjAyOSw5IEBACi0gCQkJY29udGludWU7Ci0g CQl9Ci0gCQlpZiAoYnVmWzBdID09ICdFJykgewotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYg KHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOwotKyNl bmRpZgotIAkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOwotIAkJCWdv dG8gZG9uZTsKLSAJCX0KLUBAIC0xNzQ5LDYgKzIwMzksOSBAQAotIAkJCSotLWNwID0gMDsKLSAK LSAJCWNwID0gYnVmOwotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogYnVm IGlzICVzXG4iLCBob3N0bmFtZSwgYnVmKTsKLSsjZW5kaWYKLSAJCWlmICgqY3AgPT0gJ1QnKSB7 Ci0gCQkJc2V0aW1lcysrOwotIAkJCWNwKys7Ci1AQCAtMTc3Niw5ICsyMDY5LDE5IEBACi0gCQkJ aWYgKCFjcCB8fCAqY3ArKyAhPSAnXDAnIHx8IGF0aW1lLnR2X3VzZWMgPCAwIHx8Ci0gCQkJICAg IGF0aW1lLnR2X3VzZWMgPiA5OTk5OTkpCi0gCQkJCVNDUkVXVVAoImF0aW1lLnVzZWMgbm90IGRl bGltaXRlZCIpOwotKwotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBT ZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOwotKyNlbmRpZgotIAkJCSh2b2lk KSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOwotIAkJCWNvbnRpbnVlOwotIAkJfQot KwkJaWYgKCpjcCA9PSAnUicpIHsgLypyZXN1bWUgZmlsZSB0cmFuc2ZlciAoZG9udCcgdGhpbmsg SSBuZWVkIHRoaXMgaGVyZSkqLwotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYoc3RkZXJyLCAi JXM6IFJlY2VpdmVkIGEgUkVTVU1FIHJlcXVlc3Qgd2l0aCAlc1xuIiwgaG9zdG5hbWUsIGNwKTsK LSsjZW5kaWYKLSsJCQlyZXN1bWVfZmxhZyA9IDE7Ci0rCQl9Ci0gCQlpZiAoKmNwICE9ICdDJyAm JiAqY3AgIT0gJ0QnKSB7Ci0gCQkJLyoKLSAJCQkgKiBDaGVjayBmb3IgdGhlIGNhc2UgInJjcCBy ZW1vdGU6Zm9vXCogbG9jYWw6YmFyIi4KLUBAIC0xNzk0LDYgKzIwOTcsMTggQEAKLSAJCQlTQ1JF V1VQKCJleHBlY3RlZCBjb250cm9sIHJlY29yZCIpOwotIAkJfQotIAkJbW9kZSA9IDA7Ci0rI2lm ZGVmIERFQlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBidWYgaXMgJXNcbiIsIGhvc3RuYW1l LCBidWYpOwotKwkJZnByaW50ZihzdGRlcnIsICIlczogY3AgaXMgJXNcbiIsIGhvc3RuYW1lLCBj cCk7Ci0rI2VuZGlmCi0rCQkvKiB3ZSBuZWVkIHRvIHRyYWNrIGlmIHRoaXMgb2JqZWN0IGlzIGEg ZGlyZWN0b3J5Ci0rCQkgKiBiZWZvcmUgd2UgbW92ZSB0aGUgcG9pbnRlci4gSWYgd2UgYXJlIGlu IHJlc3VtZSBtb2RlCi0rCQkgKiB3ZSBtaWdodCBlbmQgdXAgdHJ5aW5nIHRvIGdldCBhbiBtZHN1 bSBvbiBhIGRpcmVjdG9yeQotKwkJICogYW5kIHRoYXQgZG9lc24ndCB3b3JrICovCi0rCQlpbnQg ZGlyX2ZsYWcgPSAwOwotKwkJaWYgKCpjcCA9PSAnRCcpCi0rCQkJZGlyX2ZsYWcgPSAxOwotKwot IAkJZm9yICgrK2NwOyBjcCA8IGJ1ZiArIDU7IGNwKyspIHsKLSAJCQlpZiAoKmNwIDwgJzAnIHx8 ICpjcCA+ICc3JykKLSAJCQkJU0NSRVdVUCgiYmFkIG1vZGUiKTsKLUBAIC0xODA0LDYgKzIxMTks MTAgQEAKLSAJCWlmICgqY3ArKyAhPSAnICcpCi0gCQkJU0NSRVdVUCgibW9kZSBub3QgZGVsaW1p dGVkIik7Ci0gCi0rI2lmZGVmIERFQlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjcCBpcyAl c1xuIiwgaG9zdG5hbWUsIGNwKTsKLSsjZW5kaWYKLSsKLSAJCWlmICghaXNkaWdpdCgodW5zaWdu ZWQgY2hhcikqY3ApKQotIAkJCVNDUkVXVVAoInNpemUgbm90IHByZXNlbnQiKTsKLSAJCXVsbCA9 IHN0cnRvdWxsKGNwLCAmY3AsIDEwKTsKLUBAIC0xODEzLDExICsyMTMyLDMyIEBACi0gCQkJU0NS RVdVUCgic2l6ZSBvdXQgb2YgcmFuZ2UiKTsKLSAJCXNpemUgPSAob2ZmX3QpdWxsOwotIAotKyNp ZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogY3AgaXMgJXNcbiIsIGhvc3RuYW1l LCBjcCk7Ci0rI2VuZGlmCi0rCQlpZiAocmVzdW1lX2ZsYWcgJiYgIWRpcl9mbGFnKSB7Ci0rCQkJ KnJlbW90ZV9oYXNoc3VtID0gJ1wwJzsKLSsJCQlpbnQgaTsKLSsJCQlmb3IgKGkgPSAwOyBpIDwg SEFTSF9MRU47IGkrKykgewotKwkJCQlzdHJuY2F0IChyZW1vdGVfaGFzaHN1bSwgY3ArKywgMSk7 Ci0rCQkJfQotKyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiAnJXMnXG4i LCBob3N0bmFtZSwgcmVtb3RlX2hhc2hzdW0pOwotKyNlbmRpZgotKwkJCWlmICghY3AgfHwgKmNw KysgIT0gJyAnKQotKwkJCQlTQ1JFV1VQKCJoYXNoIG5vdCBkZWxpbWl0ZWQiKTsKLSsJCX0KLSsj aWZkZWYgREVCVUcKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0bmFt ZSwgY3ApOwotKyNlbmRpZgotIAkJaWYgKCpjcCA9PSAnXDAnIHx8IHN0cmNocihjcCwgJy8nKSAh PSBOVUxMIHx8Ci0gCQkgICAgc3RyY21wKGNwLCAiLiIpID09IDAgfHwgc3RyY21wKGNwLCAiLi4i KSA9PSAwKSB7Ci0gCQkJcnVuX2VycigiZXJyb3I6IHVuZXhwZWN0ZWQgZmlsZW5hbWU6ICVzIiwg Y3ApOwotIAkJCWV4aXQoMSk7Ci0gCQl9Ci0rI2lmZGVmIERFQlVHCi0rCQlmcHJpbnRmKHN0ZGVy ciwgIiVzIGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3ApOwotKyNlbmRpZgotIAkJaWYgKG5wYXR0 ZXJucyA+IDApIHsKLSAJCQlmb3IgKG4gPSAwOyBuIDwgbnBhdHRlcm5zOyBuKyspIHsKLSAJCQkJ aWYgKHN0cmNtcChwYXR0ZXJuc1tuXSwgY3ApID09IDAgfHwKLUBAIC0xODg3LDExICsyMjI3LDE5 NSBAQAotIAkJfQotIAkJb21vZGUgPSBtb2RlOwotIAkJbW9kZSB8PSBTX0lXVVNSOwotKwkJc3Rh dChjcCwgJmNwc3RhdCk7Ci0rCQl4ZmVyX3NpemUgPSBzaXplOwotKwkJaWYgKHJlc3VtZV9mbGFn KSB7Ci0rI2lmZGVmIERFQlVHCi0rCQkJZnByaW50ZihzdGRlcnIsICIlczogbnAgaXMgJXNcbiIs IGhvc3RuYW1lLCBucCk7Ci0rI2VuZGlmCi0rCQkJLyogZG9lcyB0aGUgZmlsZSBleGlzdCBhbmQg aWYgaXQgZG9lcyBpdCB3cml0YWJsZT8gKi8KLSsJCQlpZiAoc3RhdChucCwgJm5wc3RhdCkgPT0g LTEpIHsKLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlcyBMb2NhbCBmaWxl IGRvZXMgbm90IGV4aXN0IHNpemUgaXMgJWxkIVxuIiwKLSsJCQkJCWhvc3RuYW1lLCBucHN0YXQu c3Rfc2l6ZSk7Ci0rI2VuZGlmCi0rCQkJCW5wc3RhdC5zdF9zaXplID0gMDsKLSsJCQl9IGVsc2Ug ewotKwkJCQkvKiBjaGVjayB0byBzZWUgaWYgdGhlIGZpbGUgaXMgd3JpdGVhYmxlCi0rCQkJCSAq IGlmIGl0IGlzbid0IHRoZW4gd2UgbmVlZCB0byBza2lwIGl0IGJ1dAotKwkJCQkgKiBiZWZvcmUg d2Ugc2tpcCBpdCB3ZSBuZWVkIHRvIHNlbmQgdGhlIHJlbW90ZQotKwkJCQkgKiB3aGF0IHRoZXkg YXJlIGV4cGVjdGluZyBzbyBCVUZfQU5EX0hBU0ggYnl0ZXMgYW5kIHRoZW4KLSsJCQkJICogYSBu dWxsLgotKwkJCQkgKiBOT1RFISEhIFRoZSBmb3JtYXQgaW4gdGhlIHNucHJpbnRmIG5lZWRzIHRo ZSBhY3R1YWwgbnVtZXJpYwotKwkJCQkgKiBiZWNhdXNlIHVzaW5nIGEgZGVmaW5lIGlzbid0IHdv cmtpbmcgKi8KLSsJCQkJaWYgKGFjY2VzcyAobnAsIFdfT0spICE9IDApIHsKLSsJCQkJCWZwcmlu dGYoc3RkZXJyLCAic2NwOiAlczogUGVybWlzc2lvbiBkZW5pZWQgb24gJXNcbiIsIG5wLCBob3N0 bmFtZSk7Ci0rCQkJCQlzbnByaW50ZihvdXRidWYsIEJVRl9BTkRfSEFTSCwgIlMlLSpzIiwgQlVG X0FORF9IQVNILTIsICIgIik7Ci0rCQkJCQkodm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwg b3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7Ci0rCQkJCQkodm9pZClhdG9taWNpbyh2d3JpdGUsIHJl bW91dCwgIiIsIDEpOwotKwkJCQkJY29udGludWU7Ci0rCQkJCX0KLSsJCQl9Ci0rCQkJLyogdGhp cyBmaWxlIGlzIGFscmVhZHkgaGVyZSBkbyB3ZSBuZWVkIHRvIG1vdmUgaXQ/Ci0rCQkJICogQ2hl Y2sgdG8gbWFrZSBzdXJlIG5wc3RhdC5zdF9zaXplID4gMC4gSWYgaXQgaXMgMCB0aGVuIHdlCi0r CQkJICogbWF5IHRyeWluZyB0byBiZSBtb3ZpbmcgYSB6ZXJvIGJ5dGUgZmlsZSBpbiB3aGljaCBj YXNlIHRoaXMKLSsJCQkgKiBmb2xsb3dpbmcgYmxvY2sgZmFpbHMuIFNlZSBvbiAwIGJ5dGUgZmls ZXMgdGhlIGhhc2hlcyB3aWxsCi0rCQkJICogYWx3YXlzIG1hdGNoIGFuZCB0aGUgZmlsZSB3b24n dCBiZSBjcmVhdGVkIGV2ZW4gdGhvdWdoIGl0IHNob3VsZAotKwkJCSAqLwotKwkJCWlmICh4ZmVy X3NpemUgPT0gbnBzdGF0LnN0X3NpemUgJiYgKG5wc3RhdC5zdF9zaXplID4gMCkpIHsKLSsJCQkJ Y2FsY3VsYXRlX2hhc2gobnAsIGxvY2FsX2hhc2hzdW0sIG5wc3RhdC5zdF9zaXplKTsKLSsJCQkJ aWYgKHN0cmNtcChsb2NhbF9oYXNoc3VtLHJlbW90ZV9oYXNoc3VtKSA9PSAwKSB7Ci0rCQkJCQkv KiB3ZSBjYW4gc2tpcCB0aGlzIGZpbGUgaWYgd2Ugd2FudCB0by4gKi8KLSsjaWZkZWYgREVCVUcK LSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZpbGVzIGFyZSB0aGUgc2FtZVxuIiwgaG9zdG5h bWUpOwotKyNlbmRpZgotKwkJCQkJLyogdGhlIHJlbW90ZSBpcyBleHBlY3Rpbmcgc29tZXRoaW5n IHNvIHdlIG5lZWQgdG8gc2VuZCB0aGVtIHNvbWV0aGluZyovCi0rCQkJCQlzbnByaW50ZihvdXRi dWYsIEJVRl9BTkRfSEFTSCwgIlMlLSpzIiwgQlVGX0FORF9IQVNILTIsICIgIik7Ci0rCQkJCQko dm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgb3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7Ci0r I2lmZGVmIERFQlVHCi0rCQkJCQlmcHJpbnRmKHN0ZGVyciwiJXM6IHNlbnQgJyVzJyB0byByZW1v dGVcbiIsIGhvc3RuYW1lLCBvdXRidWYpOwotKyNlbmRpZgotKwkJCQkJLyogdGhlIHJlbW90ZSBp cyB3YWl0aW5nIG9uIGFuIGFjayBzbyBzZW5kIGEgbnVsbCAqLwotKwkJCQkJKHZvaWQpYXRvbWlj aW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKLSsJCQkJCWlmIChzaG93cHJvZ3Jlc3MpCi0rCQkJ CQkJZnByaW50ZiAoc3RkZXJyLCAiU2tpcHBpbmcgaWRlbnRpY2FsIGZpbGU6ICVzXG4iLCBucCk7 Ci0rCQkJCQljb250aW51ZTsKLSsJCQkJfSBlbHNlIHsKLSsJCQkJCS8qIGZpbGUgc2l6ZXMgYXJl IHRoZSBzYW1lIGJ1dCB0aGV5IGRvbid0IG1hdGNoICovCi0rI2lmZGVmIERFQlVHCi0rCQkJCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiB0YXJnZXQoJWxkKSBpcyBkaWZmZXJlbnQgdGhhbiBzb3VyY2Uo JWxkKSFcbiIsCi0rCQkJCQkJaG9zdG5hbWUsIG5wc3RhdC5zdF9zaXplLCBzaXplKTsKLSsjZW5k aWYKLSsJCQkJCXNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mIG91dGJ1ZiwgIkMlMDRvICVsbGQgJXMi LAotKwkJCQkJCSAodV9pbnQpIChucHN0YXQuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCi0rCQkJ CQkJIChsb25nIGxvbmcpbnBzdGF0LnN0X3NpemUsIGxvY2FsX2hhc2hzdW0pOwotKwkJCQkJc25w cmludGYob3V0YnVmLCBCVUZfQU5EX0hBU0gsICIlLSpzIiwgQlVGX0FORF9IQVNILTEsIHRtcGJ1 Zik7Ci0rCQkJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIG91dGJ1Ziwgc3RybGVu KG91dGJ1ZikpOwotKwkJCQkJYmFkX21hdGNoX2ZsYWcgPSAxOwotKwkJCQl9Ci0rCQkJfQotKwkJ CS8qIGlmIG5wc3RhdC5zdF9zaXplIGlzIDAgdGhlbiB0aGUgbG9jYWwgZmlsZSBkb2Vzbid0IGV4 aXN0IGFuZAotKwkJCSAqIHdlIGhhdmUgdG8gbW92ZSBpdC4gU2luY2Ugd2UgYXJlIGluIHJlc3Vt ZSBtb2RlIHRyZWF0IGl0IGFzIGEgcmVzdW1lICovCi0rCQkJaWYgKG5wc3RhdC5zdF9zaXplIDwg eGZlcl9zaXplIHx8IChucHN0YXQuc3Rfc2l6ZSA9PSAwKSkgewotKwkJCQljaGFyIHJhbmRfc3Ry aW5nWzldOwotKyNpZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogJXMgaXMg c21hbGxlciB0aGFuICVzXG4iLCBob3N0bmFtZSwgbnAsIGNwKTsKLSsjZW5kaWYKLSsJCQkJY2Fs Y3VsYXRlX2hhc2gobnAsIGxvY2FsX2hhc2hzdW0sIG5wc3RhdC5zdF9zaXplKTsKLSsjZGVmaW5l CUZJTEVNT0RFTUFTSwkoU19JU1VJRHxTX0lTR0lEfFNfSVJXWFV8U19JUldYR3xTX0lSV1hPKQot KwkJCQlzbnByaW50Zih0bXBidWYsIHNpemVvZiBvdXRidWYsICJSJTA0byAlbGxkICVzIiwKLSsJ CQkJCSAodV9pbnQpIChucHN0YXQuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCi0rCQkJCQkgKGxv bmcgbG9uZylucHN0YXQuc3Rfc2l6ZSwgbG9jYWxfaGFzaHN1bSk7Ci0rCQkJCXNucHJpbnRmKG91 dGJ1ZiwgQlVGX0FORF9IQVNILCAiJS0qcyIsIEJVRl9BTkRfSEFTSC0xLCB0bXBidWYpOwotKyNp ZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogbmV3IGJ1ZiBpcyAlcyBvZiBs ZW5ndGggJWxkXG4iLAotKwkJCQkJIGhvc3RuYW1lLCBvdXRidWYsIHN0cmxlbihvdXRidWYpKTsK LSsJCQkJZnByaW50ZihzdGRlcnIsICIlczogU2VuZGluZyBuZXcgZmlsZSAoJXMpIG1vZGVzOiAl c1xuIiwKLSsJCQkJCWhvc3RuYW1lLCBucCwgb3V0YnVmKTsKLSsjZW5kaWYKLSsJCQkJLypub3cg d2UgaGF2ZSB0byBzZW5kIG5wJ3MgbGVuZ3RoIGFuZCBoYXNoIHRvIHRoZSBvdGhlciBlbmQKLSsJ CQkJICogaWYgdGhlIGNvbXB1dGVkIGhhc2hlcyBtYXRjaCB0aGVuIHdlIHNlZWsgdG8gbnAncyBs ZW5ndGggaW4KLSsJCQkJICogZmlsZSBhbmQgYXBwZW5kIHRvIG5wIHN0YXJ0aW5nIGZyb20gdGhl cmUgKi8KLSsJCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBvdXRidWYsIHN0cmxl bihvdXRidWYpKTsKLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlczogTmV3 IHNpemU6ICVsZCwgc2l6ZTogJWxkLCBzdF9zaXplOiAlbGRcbiIsCi0rCQkJCQlob3N0bmFtZSwg c2l6ZSAtIG5wc3RhdC5zdF9zaXplLCBzaXplLCBucHN0YXQuc3Rfc2l6ZSk7Ci0rI2VuZGlmCi0r CQkJCXhmZXJfc2l6ZSA9IHNpemUgLSBucHN0YXQuc3Rfc2l6ZTsKLSsJCQkJcmVzdW1lX2ZsYWcg PSAxOwotKwkJCQlucF90bXAgPSB4c3RyZHVwKG5wKTsKLSsJCQkJLyogV2Ugc2hvdWxkIGhhdmUg YSByYW5kb20gY29tcG9uZW50IHRvIGF2b2lkIGNsb2JiZXJpbmcgYQotKwkJCQkgKiBsb2NhbCBm aWxlICovCi0rCQkJCXJhbmRfc3RyKHJhbmRfc3RyaW5nLCA4KTsKLSsJCQkJc3RyY2F0KG5wLCBy YW5kX3N0cmluZyk7Ci0rI2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IFdp bGwgY29uY2F0ICVzIHRvICVzIGFmdGVyIHhmZXJcbiIsCi0rCQkJCQlob3N0bmFtZSwgbnAsIG5w X3RtcCk7Ci0rI2VuZGlmCi0rCQkJfSBlbHNlIGlmIChucHN0YXQuc3Rfc2l6ZSA+IHNpemUpIHsK LSsJCQkvKiB0aGUgdGFyZ2V0IGZpbGUgaXMgbGFyZ2VyIHRoYW4gdGhlIHNvdXJjZS4KLSsJCQkg KiBzbyB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSBpdC4gV2UgZG9uJ3QgbmVlZCB0byBzZW5kIHRoZSBo YXNoIHRob3VnaC4gKi8KLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlczog dGFyZ2V0KCVsZCkgaXMgbGFyZ2VyIHRoYW4gc291cmNlKCVsZCkhXG4iLAotKwkJCQkJaG9zdG5h bWUsIG5wc3RhdC5zdF9zaXplLCBzaXplKTsKLSsjZW5kaWYKLSsJCQkJc25wcmludGYodG1wYnVm LCBzaXplb2Ygb3V0YnVmLCAiQyUwNG8gJWxsZCIsCi0rCQkJCQkgKHVfaW50KSAobnBzdGF0LnN0 X21vZGUgJiBGSUxFTU9ERU1BU0spLAotKwkJCQkJIChsb25nIGxvbmcpbnBzdGF0LnN0X3NpemUp OwotKwkJCQlzbnByaW50ZihvdXRidWYsIEJVRl9BTkRfSEFTSCwgIiUtKnMiLCBCVUZfQU5EX0hB U0gtMSwgdG1wYnVmKTsKLSsJCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBvdXRi dWYsIHN0cmxlbihvdXRidWYpKTsKLSsJCQkJYmFkX21hdGNoX2ZsYWcgPSAxOwotKwkJCX0KLSsK LSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogQ1AgaXMgJXMoJWxkKSBO UCBpcyAlcyglbGQpXG4iLAotKwkJCQkgaG9zdG5hbWUsIGNwLCBzaXplLCBucCwgbnBzdGF0LnN0 X3NpemUpOwotKyNlbmRpZgotKwkJCS8qIHdlIGFyZSBpbiByZXN1bWUgbW9kZSBzbyB3ZSBuZWVk IHRoaXMgKmhlcmUqIGFuZCBub3QgbGF0ZXIKLSsJCQkgKiBiZWNhdXNlIHdlIG5lZWQgdG8gZ2V0 IHRoZSBmaWxlIG1hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlbW90ZQotKwkJCSAqIG91dHNp ZGUgb2YgcmVzdW1lIG1vZGUgd2UgZG9uJ3QgZ2V0IHRoYXQgc28gd2UgZ2V0IG91dCBvZiBzeW5j Ci0rCQkJICogc28gd2UgaGF2ZSBhIHRlc3QgZm9yIHRoZSByZXN1bWVfZmxhZyBhZnRlciB0aGlz IGJsb2NrICovCi0rI2lmZGVmIERFQlVHCi0rCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRp bmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0bmFtZSk7Ci0rI2VuZGlmCi0rCQkJKHZvaWQpIGF0 b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7Ci0rCi0rCQkJLyogdGhlIHJlbW90ZSBpcyBh bHdheXMgZ29pbmcgdG8gc2VuZCBhIG1hdGNoIHN0YXR1cwotKwkJCSAqIHNvIHdlIG5lZWQgdG8g cmVhZCBpdCBzbyB3ZSBkb24ndCBnZXQgb3V0IG9mIHN5bmMgKi8KLSsJCQkodm9pZCkgYXRvbWlj aW8ocmVhZCwgcmVtaW4sICZtYXRjaCwgMSk7Ci0rCQkJaWYgKG1hdGNoICE9ICdNJykgey8qZnJh Z21lbnRzIGRvIG5vdCBtYXRjaCovCi0rCQkJCS8qIGV4cGVjdGVkIHJlc3BvbnNlIG9mIEYsIE0g YW5kIE5VTEwgKmJ1dCoKLSsJCQkJICogYW55dGhpbmcgb3RoZXIgdGhhbiBNIGlzIGEgZmFpbHVy ZQotKwkJCQkgKiBpZiBpdCdzIGEgTlVMTCB0aGVuIHdlIHJlc2V0IHhmZXJfc2l6ZSBidXQKLSsJ CQkJICogd2UgcmV0YWluIHRoZSBmaWxlIHBvaW50ZXJzICovCi0rCQkJCXhmZXJfc2l6ZSA9IHNp emU7Ci0rCQkJCWJhZF9tYXRjaF9mbGFnID0gMTsKLSsJCQkJaWYgKG1hdGNoID09ICdGJykgewot KwkJCQkJLyogZ290IGFuIEYgZm9yIGZhaWx1cmUgYW5kIG5vdCBOVUxMCi0rCQkJCQkgKiBzbyB3 ZSB3YW50IHRvIHN3YXAgb3ZlciB0aGUgZmlsZW5hbWUgZnJvbQotKwkJCQkJICogdGhlIHRlbXAg YmFjayB0byB0aGUgb3JpZ2luYWwgKi8KLSsjaWZkZWYgREVCVUcKLSsJCQkJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IG1hdGNoIHN0YXR1cyBpcyBGXG4iLCBob3N0bmFtZSk7Ci0rI2VuZGlmCi0rCQkJ CQlpZiAobnBfdG1wICE9IE5VTEwpCi0rCQkJCQkJbnAgPSBucF90bXA7Ci0rCQkJCQllbHNlIHsK LSsJCQkJCQljb250aW51ZTsKLSsJCQkJCX0KLSsJCQkJfSBlbHNlIHsKLSsjaWZkZWYgREVCVUcK LSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IG1hdGNoIHJlY2VpdmVkIGlzIE5VTExcbiIsIGhv c3RuYW1lKTsKLSsjZW5kaWYKLSsJCQkJfQotKwkJCX0gZWxzZSB7Ci0rI2lmZGVmIERFQlVHCi0r CQkJCWZwcmludGYoc3RkZXJyLCAiJXMgbWF0Y2ggc3RhdHVzIGlzIE1cbiIsIGhvc3RuYW1lKTsK LSsjZW5kaWYKLSsJCQkJYmFkX21hdGNoX2ZsYWcgPSAwOyAvKiB3aGlsZSB0aGlzIGlzIHNldCBh dCB0aGUgYmVnaW5uaW5nIG9mIHRoZQotKwkJCQkJCSAgICAgKiBsb29wIEknbSBzZXR0aW5nIGl0 IGhlcmUgZXhwbGljaXRseSBhcyB3ZWxsICovCi0rCQkJfQotKwkJfQotKwotKyNpZmRlZiBERUJV RwotKwkJZnByaW50ZihzdGRlcnIsICIlczogQ3JlYXRpbmcgZmlsZS4gbW9kZSBpcyAlZCBmb3Ig JXNcbiIsCi0rCQkJaG9zdG5hbWUsIG1vZGUsIG5wKTsKLSsjZW5kaWYKLSAJCWlmICgob2ZkID0g b3BlbihucCwgT19XUk9OTFl8T19DUkVBVCwgbW9kZSkpID09IC0xKSB7Ci0gYmFkOgkJCXJ1bl9l cnIoIiVzOiAlcyIsIG5wLCBzdHJlcnJvcihlcnJubykpOwotIAkJCWNvbnRpbnVlOwotIAkJfQot LQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7Ci0rCi0rCQkvKiBpbiB0 aGUgY2FzZSBvZiBub3QgdXNpbmcgdGhlIHJlc3VtZSBmdW5jdGlvbiB3ZSBuZWVkIHRoaXMgdndy aXRlIGhlcmUKLSsJCSAqIGluIHRoZSBjYXNlIG9mIHVzaW5nIHRoZSByZXN1bWUgZmxhZyBpdCBj b21lcyBpbiB0aGUgYWJvdmUgaWYgKHJlc3VtZV9mbGFnKSBibG9jawotKwkJICogd2h5PyBiZWNh dXNlIHNjcCBpcyB3ZWlyZCBhbmQgZGVwZW5kcyBvbiBhbiBpbnRyaWNhdGUgYW5kIHNpbGx5IGRh bmNlIG9mCi0rCQkgKiBjYWxsIGFuZCByZXNwb25zZSBhdCBqdXN0IHRoZSByaWdodCB0aW1lLiBU aGF0J3Mgd2h5ICovCi0rCQlpZiAoIXJlc3VtZV9mbGFnKSB7Ci0rI2lmZGVmIERFQlVHCi0rCQkJ ZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0bmFt ZSk7Ci0rI2VuZGlmCi0rCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7 Ci0rCQl9Ci0rCi0gCQlpZiAoKGJwID0gYWxsb2NidWYoJmJ1ZmZlciwgb2ZkLCBDT1BZX0JVRkxF TikpID09IE5VTEwpIHsKLSAJCQkodm9pZCkgY2xvc2Uob2ZkKTsKLSAJCQljb250aW51ZTsKLUBA IC0xOTA2LDEzICsyNDMwLDE3IEBACi0gCQkgKi8KLSAJCXN0YXRieXRlcyA9IDA7Ci0gCQlpZiAo c2hvd3Byb2dyZXNzKQotLQkJCXN0YXJ0X3Byb2dyZXNzX21ldGVyKGN1cmZpbGUsIHNpemUsICZz dGF0Ynl0ZXMpOwotKwkJCXN0YXJ0X3Byb2dyZXNzX21ldGVyKGN1cmZpbGUsIHhmZXJfc2l6ZSwg JnN0YXRieXRlcyk7Ci0gCQlzZXRfbm9uYmxvY2socmVtaW4pOwotLQkJZm9yIChjb3VudCA9IGkg PSAwOyBpIDwgc2l6ZTsgaSArPSBicC0+Y250KSB7Ci0rI2lmZGVmIERFQlVHCi0rCQlmcHJpbnRm KHN0ZGVyciwgIiVzOiB4ZmVyX3NpemUgaXMgJWxkXG4iLCBob3N0bmFtZSwgeGZlcl9zaXplKTsK LSsjZW5kaWYKLSsJCWZvciAoY291bnQgPSBpID0gMDsgaSA8IHhmZXJfc2l6ZTsgaSArPSBicC0+ Y250KSB7Ci0gCQkJYW10ID0gYnAtPmNudDsKLS0JCQlpZiAoaSArIGFtdCA+IHNpemUpCi0tCQkJ CWFtdCA9IHNpemUgLSBpOwotKwkJCWlmIChpICsgYW10ID4geGZlcl9zaXplKQotKwkJCQlhbXQg PSB4ZmVyX3NpemUgLSBpOwotIAkJCWNvdW50ICs9IGFtdDsKLSsJCQkvKiByZWFkIHRoZSBkYXRh IGZyb20gdGhlIHNvY2tldCovCi0gCQkJZG8gewotIAkJCQlqID0gYXRvbWljaW82KHJlYWQsIHJl bWluLCBjcCwgYW10LAotIAkJCQkgICAgc2NwaW8sICZzdGF0Ynl0ZXMpOwotQEAgLTE5NDcsOCAr MjQ3NSw3OCBAQAotIAkJCXdyZXJyID0gMTsKLSAJCX0KLSAJCWlmICghd3JlcnIgJiYgKCFleGlz dHMgfHwgU19JU1JFRyhzdGIuc3RfbW9kZSkpICYmCi0tCQkgICAgZnRydW5jYXRlKG9mZCwgc2l6 ZSkgIT0gMCkKLSsJCSAgICBmdHJ1bmNhdGUob2ZkLCB4ZmVyX3NpemUpICE9IDApCi0gCQkJbm90 ZV9lcnIoIiVzOiB0cnVuY2F0ZTogJXMiLCBucCwgc3RyZXJyb3IoZXJybm8pKTsKLSsKLSsJCS8q IGlmIG5wX3RtcCBpc24ndCBzZXQgdGhlbiB3ZSBkb24ndCBoYXZlIGEgcmVzdW1lIGZpbGUgdG8g Y2F0ICovCi0rCQkvKiBsaWtld2lzZSwgYmFkIG1hdGNoIGZsYWcgbWVhbnMgbm8gcmVzdW1lIGZs YWcgKi8KLSsjaWZkZWYgREVCVUcKLSsJCWZwcmludGYgKHN0ZGVyciwgIiVzOiByZXN1bWVfZmxh ZzogJWQsIG5wX3RtcDogJXMsIGJhZF9tYXRjaF9mbGFnOiAlZFxuIiwKLSsJCQkgaG9zdG5hbWUs IHJlc3VtZV9mbGFnLCBucF90bXAsIGJhZF9tYXRjaF9mbGFnKTsKLSsjZW5kaWYKLSsJCWlmIChy ZXN1bWVfZmxhZyAmJiBucF90bXAgJiYgIWJhZF9tYXRjaF9mbGFnKSB7Ci0rCQkJRklMRSAqb3Jp ZywgKnJlc3VtZTsKLSsJCQljaGFyIHJlc19idWZbNTEyXTsgLyogc2V0IGF0IDUxMiBqdXN0IGJl Y2F1c2UsIG1pZ2h0IHdhbnQgdG8gaW5jcmVhc2UqLwotKwkJCXNzaXplX3QgcmVzX2J5dGVzID0g MDsKLSsJCQlvZmZfdCBzdW0gPSAwOwotKwkJCXN0cnVjdCBzdGF0IHJlc19zdGF0OwotKwkJCSpy ZXNfYnVmID0gJ1wwJzsKLSsJCQlvcmlnID0gTlVMTDsgLypzdXByZXNzIHdhcm5pbmdzKi8KLSsJ CQlyZXN1bWUgPSBOVUxMOyAvKnN1cHJlc3Mgd2FybmluZ3MqLwotKyNpZmRlZiBERUJVRwotKwkJ CWZwcmludGYoc3RkZXJyLCAiJXM6IFJlc3VtZSBmbGFnIGlzIHNldC4gR29pbmcgdG8gY29uY2F0 ICVzIHRvICVzICBub3dcbiIsCi0rCQkJCWhvc3RuYW1lLCBucCwgbnBfdG1wKTsKLSsjZW5kaWYK LSsJCQkvKiBucC9vZmQgaXMgdGhlIHJlc3VtZSBmaWxlIHNvIG9wZW4gbnBfdG1wIGZvciBhcHBl bmRpbmcKLSsJCQkgKiBjbG9zZSBvZmQgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gYmUgc2hpZnRp bmcgaXQKLSsJCQkgKiBhbmQgSSBkb24ndCB3bmF0IHRoZSBzYW1lIGZpbGUgb3BlbiBpbiBtdWx0 aXBsZSBkZXNjcmlwdG9ycyAqLwotKwkJCWlmIChjbG9zZShvZmQpID09IC0xKQotKwkJCQlub3Rl X2VycigiJXM6IGNsb3NlOiAlcyIsIG5wLCBzdHJlcnJvcihlcnJubykpOwotKwkJCS8qIG9yaWcg aXMgdGhlIHRhcmdldCBmaWxlLCByZXN1bWUgaXMgdGhlIHRlbXAgZmlsZSAqLwotKwkJCW9yaWcg PSBmb3BlbihucF90bXAsICJhIik7IC8qb3BlbiBmb3IgYXBwZW5kaW5nKi8KLSsJCQlpZiAob3Jp ZyA9PSBOVUxMKSB7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IENvdWxkIG5vdCBvcGVuICVz IGZvciBhcHBlbmRpbmcuIiwgaG9zdG5hbWUsIG5wX3RtcCk7Ci0rCQkJCWdvdG8gc3RvcGNhdDsK LSsJCQl9Ci0rCQkJcmVzdW1lID0gZm9wZW4obnAsICJyIik7IC8qb3BlbiBmb3IgcmVhZGluZyBv bmx5Ki8KLSsJCQlpZiAocmVzdW1lID09IE5VTEwpIHsKLSsJCQkJZnByaW50ZihzdGRlcnIsICIl czogQ291bGQgbm90IG9wZW4gJXMgZm9yIHJlYWRpbmcuIiwgaG9zdG5hbWUsIG5wKTsKLSsJCQkJ Z290byBzdG9wY2F0OwotKwkJCX0KLSsJCQkvKiBnZXQgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0 aGUgdGVtcCBmaWxlKi8KLSsJCQlpZiAoZnN0YXQoZmlsZW5vKHJlc3VtZSksICZyZXNfc3RhdCkg PT0gLTEpIHsKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlczogQ291bGQgbm90IHN0YXQgJXMiLCBo b3N0bmFtZSwgbnApOwotKwkJCQlnb3RvIHN0b3BjYXQ7Ci0rCQkJfQotKwkJCS8qIHdoaWxlIHRo ZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIHRoZSB0ZW1wIGZpbGUKLSsJCQkgKiBpcyBsZXNz IHRoYW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgcmVhZCBpbiBhIGNodW5rIGFuZAotKwkJCSAqIHdy aXRlIGl0IHRvIHRoZSB0YXJnZXQgZmlsZSAqLwotKwkJCWRvIHsKLSsJCQkJcmVzX2J5dGVzID0g ZnJlYWQocmVzX2J1ZiwgMSwgNTEyLCByZXN1bWUpOwotKwkJCQlmd3JpdGUocmVzX2J1ZiwgMSwg cmVzX2J5dGVzLCBvcmlnKTsKLSsJCQkJc3VtICs9IHJlc19ieXRlczsKLSsJCQl9IHdoaWxlIChz dW0gPCByZXNfc3RhdC5zdF9zaXplKTsKLSsKLStzdG9wY2F0OgkJaWYgKG9yaWcpCi0rCQkJCWZj bG9zZShvcmlnKTsKLSsJCQlpZiAocmVzdW1lKQotKwkJCQlmY2xvc2UocmVzdW1lKTsKLSsJCQkv KiBkZWxldGUgdGhlIHJlc3VtZSBmaWxlICovCi0rCQkJcmVtb3ZlKG5wKTsKLSsjaWZkZWYgREVC VUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogbnAoJXMpIGFuZCBucF90bXAoJXMpXG4iLCBo b3N0bmFtZSwgbnAsIG5wX3RtcCk7Ci0rI2VuZGlmCi0rCQkJbnAgPSBucF90bXA7Ci0rI2lmZGVm IERFQlVHCi0rCQkJZnByaW50ZiAoc3RkZXJyLCAiJXMgbnAoJXMpIGFuZCBucF90bXAoJXMpXG4i LCBob3N0bmFtZSwgbnAsIG5wX3RtcCk7Ci0rI2VuZGlmCi0rCQkJLyogcmVzZXQgb2ZkIHRvIHRo ZSBvcmlnaW5hbCBucCAqLwotKwkJCWlmICgob2ZkID0gb3BlbihucF90bXAsIE9fV1JPTkxZKSkg PT0gLTEpIHsKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3Qgb3BlbiAlcyBpbiBh cHBlbmQgZnVuY3Rpb25cbiIsIGhvc3RuYW1lLCBucF90bXApOwotKwkJCQlhdG9taWNpbyh2d3Jp dGUsIHJlbW91dCwgIiIsIDEpOwotKwkJCQlnb3RvIGJhZDsKLSsJCQl9Ci0rCQl9Ci0gCQlpZiAo cGZsYWcpIHsKLSAJCQlpZiAoZXhpc3RzIHx8IG9tb2RlICE9IG1vZGUpCi0gI2lmZGVmIEhBVkVf RkNITU9ECi1AQCAtMTk4Myw4ICsyNTgxLDE3IEBACi0gCQkJfQotIAkJfQotIAkJLyogSWYgbm8g ZXJyb3Igd2FzIG5vdGVkIHRoZW4gc2lnbmFsIHN1Y2Nlc3MgZm9yIHRoaXMgZmlsZSAqLwotLQkJ aWYgKG5vdGVfZXJyKE5VTEwpID09IDApCi0rCQlpZiAobm90ZV9lcnIoTlVMTCkgPT0gMCkgewot KyNpZmRlZiBERUJVRwotKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8g cmVtb3V0LlxuIiwgaG9zdG5hbWUpOwotKyNlbmRpZgotIAkJCSh2b2lkKSBhdG9taWNpbyh2d3Jp dGUsIHJlbW91dCwgIiIsIDEpOwotKwkJfQotKwkJLyogd2UgYXJlIGluIHJlc3VtZSBtb2RlIGFu ZCB3ZSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIG5wX3RtcCAqLwotKwkJaWYgKHJlc3VtZV9m bGFnICYmIG5wX3RtcCAhPSBOVUxMKSB7Ci0rCQkJZnJlZShucF90bXApOwotKwkJCW5wX3RtcCA9 IE5VTEw7Ci0rCQl9Ci0gCX0KLSBkb25lOgotIAlmb3IgKG4gPSAwOyBuIDwgbnBhdHRlcm5zOyBu KyspCi1AQCAtMjEyOCwxMSArMjczNSwxOSBAQAotIHZvaWQKLSB1c2FnZSh2b2lkKQotIHsKLSsj aWYgKGRlZmluZWQgV0lUSF9PUEVOU1NMKSAmJiAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05V TUJFUikKLSsJKHZvaWQpIGZwcmludGYoc3RkZXJyLAotKwkgICAgInVzYWdlOiBzY3AgWy0zNDZB QkNPcHFScnNUdlpdIFstYyBjaXBoZXJdIFstRCBzZnRwX3NlcnZlcl9wYXRoXSBbLUYgc3NoX2Nv bmZpZ11cbiIKLSsJICAgICIgICAgICAgICAgIFstaSBpZGVudGl0eV9maWxlXSBbLUogZGVzdGlu YXRpb25dIFstbCBsaW1pdF0gWy1vIHNzaF9vcHRpb25dXG4iCi0rCSAgICAiICAgICAgICAgICBb LVAgcG9ydF0gWy1TIHByb2dyYW1dIFstWCBzZnRwX29wdGlvbl0gc291cmNlIC4uLiB0YXJnZXRc biIpOwotKwlleGl0KDEpOwotKyNlbHNlCi0gCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKLSAJICAg ICJ1c2FnZTogc2NwIFstMzQ2QUJDT3BxUnJzVHZdIFstYyBjaXBoZXJdIFstRCBzZnRwX3NlcnZl cl9wYXRoXSBbLUYgc3NoX2NvbmZpZ11cbiIKLSAJICAgICIgICAgICAgICAgIFstaSBpZGVudGl0 eV9maWxlXSBbLUogZGVzdGluYXRpb25dIFstbCBsaW1pdF0gWy1vIHNzaF9vcHRpb25dXG4iCi0g CSAgICAiICAgICAgICAgICBbLVAgcG9ydF0gWy1TIHByb2dyYW1dIFstWCBzZnRwX29wdGlvbl0g c291cmNlIC4uLiB0YXJnZXRcbiIpOwotIAlleGl0KDEpOwotKyNlbmRpZgotIH0KLSAKLSB2b2lk Ci1AQCAtMjI3MSw2ICsyODg2LDE4IEBACi0gCQlleGl0KDEpOwotIH0KLSAKLSt2b2lkIHJhbmRf c3RyKGNoYXIgKmRlc3QsIHNpemVfdCBsZW5ndGgpIHsKLSsJY2hhciBjaGFyc2V0W10gPSAiMDEy MzQ1Njc4OSIKLSsJCSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKLSsJCSJBQkNERUZHSElK S0xNTk9QUVJTVFVWV1hZWiI7Ci0rCi0rCXdoaWxlIChsZW5ndGgtLSA+IDApIHsKLSsJCXNpemVf dCBpbmRleCA9IChkb3VibGUpIHJhbmQoKSAvIFJBTkRfTUFYICogKHNpemVvZiBjaGFyc2V0IC0g MSk7Ci0rCQkqZGVzdCsrID0gY2hhcnNldFtpbmRleF07Ci0rCX0KLSsJKmRlc3QgPSAnXDAnOwot K30KLSsKLSB2b2lkCi0gY2xlYW51cF9leGl0KGludCBpKQotIHsKLWRpZmYgLU51ciBvcGVuc3No LTEwLjNwMS5vcmlnL3NlcnZjb25mLmMgb3BlbnNzaC0xMC4zcDEvc2VydmNvbmYuYwotLS0tIG9w ZW5zc2gtMTAuM3AxLm9yaWcvc2VydmNvbmYuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0 NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NlcnZjb25mLmMJMjAyNi0wNy0wMiAwMToxOTo0 Ny4wMzk0OTY0NTYgKzAyMDAKLUBAIC02OSw2ICs2OSw3IEBACi0gI2luY2x1ZGUgImF1dGguaCIK LSAjaW5jbHVkZSAibXlwcm9wb3NhbC5oIgotICNpbmNsdWRlICJkaWdlc3QuaCIKLSsjaW5jbHVk ZSAic3NoYnVmLmgiCi0gI2luY2x1ZGUgInZlcnNpb24uaCIKLSAjaW5jbHVkZSAic3NoLWdzcy5o IgotIAotQEAgLTIyMiw2ICsyMjMsMTIgQEAKLSAJb3B0aW9ucy0+YXV0aG9yaXplZF9wcmluY2lw YWxzX2ZpbGUgPSBOVUxMOwotIAlvcHRpb25zLT5hdXRob3JpemVkX3ByaW5jaXBhbHNfY29tbWFu ZCA9IE5VTEw7Ci0gCW9wdGlvbnMtPmF1dGhvcml6ZWRfcHJpbmNpcGFsc19jb21tYW5kX3VzZXIg PSBOVUxMOwotKwlvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsID0gLTE7Ci0rCW9wdGlvbnMtPmhw bl9kaXNhYmxlZCA9IC0xOwotKwlvcHRpb25zLT5ub25lX2VuYWJsZWQgPSAtMTsKLSsJb3B0aW9u cy0+bm9uZW1hY19lbmFibGVkID0gLTE7Ci0rCW9wdGlvbnMtPnVzZV9tcHRjcCA9IC0xOwotKwlv cHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQgPSAtMTsKLSAJb3B0aW9ucy0+aXBfcW9zX2lu dGVyYWN0aXZlID0gLTE7Ci0gCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gLTE7Ci0gCW9wdGlvbnMt PnZlcnNpb25fYWRkZW5kdW0gPSBOVUxMOwotQEAgLTUxNiw2ICs1MjMsMjIgQEAKLSAJfQotIAlp ZiAob3B0aW9ucy0+cGVybWl0X3R1biA9PSAtMSkKLSAJCW9wdGlvbnMtPnBlcm1pdF90dW4gPSBT U0hfVFVOTU9ERV9OTzsKLSsJaWYgKG9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9PSAtMSkKLSsJCW9w dGlvbnMtPm5vbmVfZW5hYmxlZCA9IDA7Ci0rCWlmIChvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQg PT0gLTEpCi0rCQlvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQgPSAwOwotKwlpZiAob3B0aW9ucy0+ bm9uZW1hY19lbmFibGVkID4gMCAmJiBvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gMCkgewotKwkJ ZGVidWcgKCJBdHRlbXB0ZWQgdG8gZW5hYmxlZCBOb25lIE1BQyB3aXRob3V0IHNldHRpbmcgTm9u ZSBFbmFibGVkIHRvIHRydWUuIE5vbmUgTUFDIGRpc2FibGVkLiIpOwotKwkJb3B0aW9ucy0+bm9u ZW1hY19lbmFibGVkID0gMDsKLSsJfQotKwlpZiAob3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9 PSAtMSkKLSsJCW9wdGlvbnMtPnRjcF9yY3ZfYnVmX3BvbGwgPSAxOwotKwlpZiAob3B0aW9ucy0+ ZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IC0xKQotKwkJb3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRo cmVhZGVkID0gMDsKLSsJaWYgKG9wdGlvbnMtPmhwbl9kaXNhYmxlZCA9PSAtMSkKLSsJCW9wdGlv bnMtPmhwbl9kaXNhYmxlZCA9IDA7Ci0rCWlmIChvcHRpb25zLT51c2VfbXB0Y3AgPT0gLTEpCi0r CQlvcHRpb25zLT51c2VfbXB0Y3AgPSAwOwotIAlpZiAob3B0aW9ucy0+aXBfcW9zX2ludGVyYWN0 aXZlID09IC0xKQotIAkJb3B0aW9ucy0+aXBfcW9zX2ludGVyYWN0aXZlID0gSVBUT1NfRFNDUF9F RjsKLSAJaWYgKG9wdGlvbnMtPmlwX3Fvc19idWxrID09IC0xKQotQEAgLTYwMiw2ICs2MjUsOCBA QAotIAlzS2VyYmVyb3NHZXRBRlNUb2tlbiwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBzS2VyYmVy b3NVc2VLdXNlcm9rLCBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwKLSAJc0tiZEludGVyYWN0aXZl QXV0aGVudGljYXRpb24sIHNMaXN0ZW5BZGRyZXNzLCBzQWRkcmVzc0ZhbWlseSwKLSAJc1ByaW50 TW90ZCwgc1ByaW50TGFzdExvZywgc0lnbm9yZVJob3N0cywKLSsJc05vbmVFbmFibGVkLCBzTm9u ZU1hY0VuYWJsZWQsIHNUY3BSY3ZCdWZQb2xsLCBzSFBORGlzYWJsZWQsCi0rCXNEaXNhYmxlTVRB RVMsIHNVc2VNUFRDUCwKLSAJc1gxMUZvcndhcmRpbmcsIHNYMTFEaXNwbGF5T2Zmc2V0LCBzWDEx TWF4RGlzcGxheXMsIHNYMTFVc2VMb2NhbGhvc3QsCi0gCXNQZXJtaXRUVFksIHNTdHJpY3RNb2Rl cywgc0VtcHR5UGFzc3dkLCBzVENQS2VlcEFsaXZlLAotIAlzUGVybWl0VXNlckVudmlyb25tZW50 LCBzQWxsb3dUY3BGb3J3YXJkaW5nLCBzQ29tcHJlc3Npb24sCi1AQCAtODE1LDYgKzg0MCwxMiBA QAotIAl7ICJyZXZva2Vka2V5cyIsIHNSZXZva2VkS2V5cywgU1NIQ0ZHX0FMTCB9LAotIAl7ICJ0 cnVzdGVkdXNlcmNha2V5cyIsIHNUcnVzdGVkVXNlckNBS2V5cywgU1NIQ0ZHX0FMTCB9LAotIAl7 ICJhdXRob3JpemVkcHJpbmNpcGFsc2ZpbGUiLCBzQXV0aG9yaXplZFByaW5jaXBhbHNGaWxlLCBT U0hDRkdfQUxMIH0sCi0rCXsgImhwbmRpc2FibGVkIiwgc0hQTkRpc2FibGVkLCBTU0hDRkdfQUxM IH0sCi0rCXsgInRjcHJjdmJ1ZnBvbGwiLCBzVGNwUmN2QnVmUG9sbCwgU1NIQ0ZHX0FMTCB9LAot Kwl7ICJub25lZW5hYmxlZCIsIHNOb25lRW5hYmxlZCwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJub25l bWFjZW5hYmxlZCIsIHNOb25lTWFjRW5hYmxlZCwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJ1c2VtcHRj cCIsIHNVc2VNUFRDUCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJkaXNhYmxlTVRBRVMiLCBzRGlz YWJsZU1UQUVTLCBTU0hDRkdfQUxMIH0sCi0gCXsgImtleGFsZ29yaXRobXMiLCBzS2V4QWxnb3Jp dGhtcywgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJpbmNsdWRlIiwgc0luY2x1ZGUsIFNTSENGR19B TEwgfSwKLSAJeyAiaXBxb3MiLCBzSVBRb1MsIFNTSENGR19BTEwgfSwKLUBAIC04NzksNiArOTEw LDcgQEAKLSAKLSAJZm9yIChpID0gMDsga2V5d29yZHNbaV0ubmFtZTsgaSsrKQotIAkJaWYgKHN0 cmNhc2VjbXAoY3AsIGtleXdvcmRzW2ldLm5hbWUpID09IDApIHsKLSsJCQlkZWJ1ZygiQ29uZmln IHRva2VuIGlzICVzIiwga2V5d29yZHNbaV0ubmFtZSk7Ci0gCQkJKmZsYWdzID0ga2V5d29yZHNb aV0uZmxhZ3M7Ci0gCQkJcmV0dXJuIGtleXdvcmRzW2ldLm9wY29kZTsKLSAJCX0KLUBAIC0xNjUy LDYgKzE2ODQsMzAgQEAKLSAJCW11bHRpc3RhdGVfcHRyID0gbXVsdGlzdGF0ZV9pZ25vcmVfcmhv c3RzOwotIAkJZ290byBwYXJzZV9tdWx0aXN0YXRlOwotIAotKwljYXNlIHNUY3BSY3ZCdWZQb2xs OgotKwkJaW50cHRyID0gJm9wdGlvbnMtPnRjcF9yY3ZfYnVmX3BvbGw7Ci0rCQlnb3RvIHBhcnNl X2ZsYWc7Ci0rCi0rCWNhc2Ugc0hQTkRpc2FibGVkOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPmhw bl9kaXNhYmxlZDsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBzTm9uZUVuYWJsZWQ6 Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZV9lbmFibGVkOwotKwkJZ290byBwYXJzZV9mbGFn OwotKwotKwljYXNlIHNOb25lTWFjRW5hYmxlZDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5ub25l bWFjX2VuYWJsZWQ7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugc0Rpc2FibGVNVEFF UzoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQ7Ci0rCQlnb3Rv IHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugc1VzZU1QVENQOgotKwkJaW50cHRyID0gJm9wdGlvbnMt PnVzZV9tcHRjcDsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsKLSAJY2FzZSBzSWdub3JlVXNlcktu b3duSG9zdHM6Ci0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+aWdub3JlX3VzZXJfa25vd25faG9zdHM7 Ci0gIHBhcnNlX2ZsYWc6Ci1AQCAtMzUyNiw2ICszNTgyLDExIEBACi0gCWR1bXBfY2ZnX2ZtdGlu dChzU3RyZWFtTG9jYWxCaW5kVW5saW5rLCBvLT5md2Rfb3B0cy5zdHJlYW1sb2NhbF9iaW5kX3Vu bGluayk7Ci0gCWR1bXBfY2ZnX2ZtdGludChzRmluZ2VycHJpbnRIYXNoLCBvLT5maW5nZXJwcmlu dF9oYXNoKTsKLSAJZHVtcF9jZmdfZm10aW50KHNFeHBvc2VBdXRoSW5mbywgby0+ZXhwb3NlX3Vz ZXJhdXRoX2luZm8pOwotKwlkdW1wX2NmZ19mbXRpbnQoc0hQTkRpc2FibGVkLCBvLT5ocG5fZGlz YWJsZWQpOwotKwlkdW1wX2NmZ19mbXRpbnQoc1RjcFJjdkJ1ZlBvbGwsIG8tPnRjcF9yY3ZfYnVm X3BvbGwpOwotKwlkdW1wX2NmZ19mbXRpbnQoc05vbmVFbmFibGVkLCBvLT5ub25lX2VuYWJsZWQp OwotKwlkdW1wX2NmZ19mbXRpbnQoc05vbmVNYWNFbmFibGVkLCBvLT5ub25lbWFjX2VuYWJsZWQp OwotKwlkdW1wX2NmZ19mbXRpbnQoc1VzZU1QVENQLCBvLT51c2VfbXB0Y3ApOwotIAlkdW1wX2Nm Z19mbXRpbnQoc1JlZnVzZUNvbm5lY3Rpb24sIG8tPnJlZnVzZV9jb25uZWN0aW9uKTsKLSAKLSAJ Lyogc3RyaW5nIGFyZ3VtZW50cyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2Vy dmNvbmYuaCBvcGVuc3NoLTEwLjNwMS9zZXJ2Y29uZi5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3Jp Zy9zZXJ2Y29uZi5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCi0rKysgb3Bl bnNzaC0xMC4zcDEvc2VydmNvbmYuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjczMDU1NzYzMCArMDIw MAotQEAgLTIzMSw2ICsyMzEsMTQgQEAKLSAJY2hhciAgICpwYW1fc2VydmljZV9uYW1lOwotIAlp bnQJcGVybWl0X3BhbV91c2VyX2NoYW5nZTsJLyogQWxsb3cgUEFNIHRvIGNoYW5nZSB1c2VyIG5h bWUgKi8KLSAKLSsJLyogaHBuc3NoIG9wdGlvbnMgKi8KLSsJaW50CXRjcF9yY3ZfYnVmX3BvbGw7 CS8qIHBvbGwgdGNwIHJjdiB3aW5kb3cgaW4gYXV0b3R1bmluZyBrZXJuZWxzKi8KLSsJaW50CWhw bl9kaXNhYmxlZDsJCS8qIGRpc2FibGUgaHBuIGZ1bmN0aW9uYWxpdHkuIGZhbHNlIGJ5IGRlZmF1 bHQgKi8KLSsJaW50CW5vbmVfZW5hYmxlZDsJCS8qIEVuYWJsZSBOT05FIGNpcGhlciBzd2l0Y2gg Ki8KLSsJaW50CW5vbmVtYWNfZW5hYmxlZDsJLyogRW5hYmxlIE5PTkUgTUFDIHN3aXRjaCAqLwot KwlpbnQJdXNlX21wdGNwOwkJLyogVXNlIE1QVENQIC0gTGludXggb25seSAqLwotKwlpbnQJZGlz YWJsZV9tdWx0aXRocmVhZGVkOwkvKiBEaXNhYmxlIG11bHRpdGhyZWFkZWQgYWVzLWN0ciBjaXBo ZXIgKi8KLSsKLSAJaW50CXBlcm1pdF90dW47Ci0gCi0gCWNoYXIgICAqKnBlcm1pdHRlZF9vcGVu czsJLyogTWF5IGFsc28gYmUgb25lIG9mIFBFUk1JVE9QRU5fKiAqLwotZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvc2VydmVybG9vcC5jIG9wZW5zc2gtMTAuM3AxL3NlcnZlcmxvb3AuYwot LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2VydmVybG9vcC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYu MTA0MTk1NDQ3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc2VydmVybG9vcC5jCTIwMjYtMDct MDIgMTA6MTE6MzQuNjM0NTE2OTg1ICswMjAwCi1AQCAtNzcsNiArNzcsOCBAQAotICNpbmNsdWRl ICJzZXJ2ZXJsb29wLmgiCi0gI2luY2x1ZGUgInNzaGVyci5oIgotICNpbmNsdWRlICJjb21wYXQu aCIKLSsjaW5jbHVkZSAibWV0cmljcy5oIgotKyNpbmNsdWRlICJjaXBoZXItc3dpdGNoLmgiCi0g Ci0gZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsKLSAKLUBAIC0zNDEsNiArMzQzLDcgQEAK LSAJc2lnc2V0X3QgYnNpZ3NldCwgb3NpZ3NldDsKLSAKLSAJZGVidWcoIkVudGVyaW5nIGludGVy YWN0aXZlIHNlc3Npb24gZm9yIFNTSDIuIik7Ci0rCXNzaC0+c3RhcnRfdGltZSA9IG1vbm90aW1l X2RvdWJsZSgpOwotIAotIAlpZiAoc2lnZW1wdHlzZXQoJmJzaWdzZXQpID09IC0xIHx8Ci0gCSAg ICBzaWdhZGRzZXQoJmJzaWdzZXQsIFNJR0NITEQpID09IC0xKQotQEAgLTM5NSw5ICszOTgsMTUg QEAKLSAJY29sbGVjdF9jaGlsZHJlbihzc2gpOwotIAlmcmVlKHBmZCk7Ci0gCi0rCS8qIHdyaXRl IGZpbmFsIGxvZyBlbnRyeSAoZG8gd2UgbmVlZCB0aGlzIGhlcmU/IC1janIpKi8KLSsJc3NocGt0 X2ZpbmFsX2xvZ19lbnRyeShzc2gpOwotKwotIAkvKiBmcmVlIGFsbCBjaGFubmVscywgbm8gbW9y ZSByZWFkcyBhbmQgd3JpdGVzICovCi0gCWNoYW5uZWxfZnJlZV9hbGwoc3NoKTsKLSAKLSsJLyog ZmluYWwgZW50cnkgbXVzdCBjb21lIGFmdGVyIGNoYW5uZWxzIGNsb3NlIC1janIgKi8KLSsJc3No cGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOwotKwotIAkvKiBmcmVlIHJlbWFpbmluZyBzZXNzaW9u cywgZS5nLiByZW1vdmUgd3RtcCBlbnRyaWVzICovCi0gCXNlc3Npb25fZGVzdHJveV9hbGwoc3No LCBOVUxMKTsKLSB9Ci1AQCAtNTk5LDYgKzYwOCw4IEBACi0gCWMgPSBjaGFubmVsX25ldyhzc2gs ICJzZXNzaW9uIiwgU1NIX0NIQU5ORUxfTEFSVkFMLAotIAkgICAgLTEsIC0xLCAtMSwgLyp3aW5k b3cgc2l6ZSovMCwgQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQsCi0gCSAgICAwLCAic2VydmVyLXNl c3Npb24iLCAxKTsKLSsJaWYgKChvcHRpb25zLnRjcF9yY3ZfYnVmX3BvbGwpICYmICghb3B0aW9u cy5ocG5fZGlzYWJsZWQpKQotKwkJYy0+ZHluYW1pY193aW5kb3cgPSAxOwotIAlpZiAoc2Vzc2lv bl9vcGVuKHRoZV9hdXRoY3R4dCwgYy0+c2VsZikgIT0gMSkgewotIAkJZGVidWcoInNlc3Npb24g b3BlbiBmYWlsZWQsIGZyZWUgY2hhbm5lbCAlZCIsIGMtPnNlbGYpOwotIAkJY2hhbm5lbF9mcmVl KHNzaCwgYyk7Ci1AQCAtNjY3LDYgKzY3OCw2NyBAQAotIAlyZXR1cm4gMDsKLSB9Ci0gCi0rLyog d2UgbmVlZCB0byBnZXQgdGhlIGFjdHVhbCBzb2NrZXQgaW4gdXNlIGFuZCBmcm9tIHRoZXJlCi0r ICogcmVhZCB0aGUgdmFsdWVzIGluIHRoZSBUQ1BfSU5GTyBzdHJ1Y3QuCi0rICogc2hvdXQgb3V0 IHRvIFJlbmUgUGZpZmZlciBmb3IgdGhlIGFydGljbGUgaHR0cHM6Ly9saW51eGdhemV0dGUubmV0 LzEzNi9wZmVpZmZlci5odG1sCi0rICogZm9yIGdldHRpbmcgbWUgc3RhcnRlZC4gVGhpcyBvbmx5 IHdvcmtzIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZSB0Y3BfaW5mbwotKyAqIHN0cnVjdDsg bGludXgsIGZyZWVic2QsIG5ldGJzZCBhcyBvZiBub3cuIEFwcGxlIGhhcyBvbmUgYnV0IGl0J3Mg Y29tcGxldGVseSBkaWZmZXJlbnQKLSsgKiB0aGFuIGFueSBvZiB0aGUgb3RoZXJzLgotKyAqLwot K3N0YXRpYyBpbnQKLStzZXJ2ZXJfaW5wdXRfbWV0cmljc19yZXF1ZXN0KHN0cnVjdCBzc2ggKnNz aCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQotK3sKLSsJaW50IHN1Y2Nlc3MgPSAwOwotKwkvKiBU Q1BfSU5GTyBpcyBkZWZpbmVkIGluIG1ldHJpY3MuaAotKwkgKiBpZiBpdCdzIG5vdCBkZWZpbmVk IHRoZW4gd2UgZG9uJ3Qgc3VwcG9ydCB0Y3BfaW5mbwotKwkgKiBzbyBqdXN0IHJldHVybiBhIGZh aWx1cmUgY29kZSAqLwotKyNpZiAhZGVmaW5lZCBUQ1BfSU5GTwotKwlyZXR1cm4gc3VjY2VzczsK LSsjZWxzZQotKwlzdHJ1Y3QgdGNwX2luZm8gdGNwX2luZm87Ci0rCXN0cnVjdCBzc2hidWYgKnJl c3AgPSBOVUxMOwotKwlpbnQgdGNwX2luZm9fbGVuOwotKwkvKiB0aGlzIGlzIHRoZSBzb2NrZXQg b2YgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLwotKwlpbnQgc29ja19pbiA9IHNzaF9wYWNrZXRf Z2V0X2Nvbm5lY3Rpb25faW4oc3NoKTsKLSsJaW50IHI7Ci0rCWJpbm4gKm1ldHJpY3NvYmo7Ci0r Ci0rCXRjcF9pbmZvX2xlbiA9IHNpemVvZih0Y3BfaW5mbyk7IC8qZXhwZWN0IGFyb3VuZCAzMzAg Ynl0ZXMgKi8KLSsJaWYgKChyZXNwID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotKwkJZmF0YWxf Zigic3NoYnVmX25ldyIpOwotKwotKwkvKiBjcmVhdGUgdGhlIGJpbm4gb2JqZWN0IHRvIGhvbGQg dGhlIHNlcmlhbGl6ZWQgbWV0cmljcyAqLwotKwltZXRyaWNzb2JqID0gYmlubl9vYmplY3QoKTsK LSsJaWYgKG1ldHJpY3NvYmogPT0gTlVMTCkgewotKwkJZXJyb3JfZigiQ291bGQgbm90IGNyZWF0 ZSBtZXRyaWNzIG9iamVjdCIpOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsKLSsJZGVidWcoIlN0YWNr IG1ldHJpY3MgcmVxdWVzdCBmb3IgY29ubmVjdGlvbiAlZCIsIHNvY2tfaW4pOwotKwlpZiAoKHIg PSBnZXRzb2Nrb3B0KHNvY2tfaW4sIElQUFJPVE9fVENQLCBUQ1BfSU5GTywgKHZvaWQgKikmdGNw X2luZm8sCi0rCQkJICAgKHNvY2tsZW5fdCAqKSZ0Y3BfaW5mb19sZW4pKSAhPSAwKSB7Ci0rCQll cnJvcl9mKCJDb3VsZCBub3QgcmVhZCB0Y3BfaW5mbyBmcm9tIHNvY2tldCIpOwotKwkJZ290byBv dXQ7Ci0rCX0KLSsJLyogd3JpdGUgdGhlIHRjcF9pbmZvIGRhdGEgdG8gdGhlIGJpbm4gb2JqZWN0 ICovCi0rCW1ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3QoJnRjcF9pbmZvLCBtZXRyaWNzb2JqKTsK LSsJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmcocmVzcCwgYmlubl9wdHIobWV0cmljc29iaiks Ci0rCQkJCSAgIGJpbm5fc2l6ZShtZXRyaWNzb2JqKSkpICE9IDApIHsKLSsJCWVycm9yX2ZyKHIs ICJGYWlsZWQgdG8gYnVpbGQgdGNwX2luZm8gb2JqZWN0Iik7Ci0rCQlnb3RvIG91dDsKLSsJfQot KwkvKiBjb3B5IHRoZSBwb2ludGVyIG9mIHRoZSByZXNwb25zZSB0byB0aGUgcGFzc2VkIGluIHJl c3BvbnNlIHBvaW50ZXIgKi8KLSsJKnJlc3BwID0gcmVzcDsKLSsJcmVzcCA9IE5VTEw7IC8qIGRv bid0IGZyZWUgaXQgKi8KLSsJLyogZXZlcnl0aGluZyB3b3JrZWQgc28gc2V0IHN1Y2Nlc3MgdG8g dHJ1ZSAqLwotKwlzdWNjZXNzID0gMTsKLStvdXQ6Ci0rCXNzaGJ1Zl9mcmVlKHJlc3ApOwotKwli aW5uX2ZyZWUobWV0cmljc29iaik7Ci0rCXJldHVybiBzdWNjZXNzOwotKyNlbmRpZiAvKiBUQ1Bf SU5GTyAqLwotK30KLSsKLSBzdGF0aWMgaW50Ci0gc2VydmVyX2lucHV0X2hvc3RrZXlzX3Byb3Zl KHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQotIHsKLUBAIC04NDMsNiAr OTE1LDEwIEBACi0gCQlzdWNjZXNzID0gMTsKLSAJfSBlbHNlIGlmIChzdHJjbXAocnR5cGUsICJo b3N0a2V5cy1wcm92ZS0wMEBvcGVuc3NoLmNvbSIpID09IDApIHsKLSAJCXN1Y2Nlc3MgPSBzZXJ2 ZXJfaW5wdXRfaG9zdGtleXNfcHJvdmUoc3NoLCAmcmVzcCk7Ci0rCX0gZWxzZSBpZiAoc3RyY21w KHJ0eXBlLCAic3RhY2stbWV0cmljc0BocG5zc2gub3JnIikgPT0gMCkgewotKwkJLyogcmVzcCBp cyB0aGUgcmVzcG9uc2UgKHNzaGJ1ZiBzdHJ1Y3QpIGZyb20gdGhlIGZ1bmN0aW9uIHdoaWNoIGlz Ci0rCQkgKiBoYW5kbGVkIGJlbG93IGluIHRoZSB3YW50X3JlcGx5IHN0YW56YSAqLwotKwkJc3Vj Y2VzcyA9IHNlcnZlcl9pbnB1dF9tZXRyaWNzX3JlcXVlc3Qoc3NoLCAmcmVzcCk7Ci0gCX0KLSAJ LyogWFhYIHNzaHBrdF9nZXRfZW5kKCkgKi8KLSAJaWYgKHdhbnRfcmVwbHkpIHsKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nlc3Npb24uYyBvcGVuc3NoLTEwLjNwMS9zZXNzaW9uLmMK LS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nlc3Npb24uYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEw NDE5NTQ0NyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3Nlc3Npb24uYwkyMDI2LTA3LTAyIDAw OjI3OjI5LjczMDk0MTczNSArMDIwMAotQEAgLTkwLDYgKzkwLDcgQEAKLSAjaW5jbHVkZSAibW9u aXRvcl93cmFwLmgiCi0gI2luY2x1ZGUgInNmdHAuaCIKLSAjaW5jbHVkZSAiYXRvbWljaW8uaCIK LSsjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgotIAotICNpZiBkZWZpbmVkKEtSQjUpICYmIGRl ZmluZWQoVVNFX0FGUykKLSAjaW5jbHVkZSA8a2Fmcy5oPgotQEAgLTIxMiw2ICsyMTMsNyBAQAot IAlyZXN0b3JlX3VpZCgpOwotIAotIAkvKiBBbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIHRoZSBhdXRo ZW50aWNhdGlvbiBhZ2VudCBzb2NrZXQuICovCi0rCS8qIHRoaXMgc2hvdWxkbid0IG1hdHRlciBp ZiBpdHMgaHBuIG9yIG5vdCAtIGNqciAqLwotIAluYyA9IGNoYW5uZWxfbmV3KHNzaCwgImF1dGgt bGlzdGVuZXIiLAotIAkgICAgU1NIX0NIQU5ORUxfQVVUSF9TT0NLRVQsIHNvY2ssIHNvY2ssIC0x LAotIAkgICAgQ0hBTl9YMTFfV0lORE9XX0RFRkFVTFQsIENIQU5fWDExX1BBQ0tFVF9ERUZBVUxU LAotQEAgLTM3NSw2ICszNzcsNyBAQAotIGRvX2V4ZWNfbm9fcHR5KHN0cnVjdCBzc2ggKnNzaCwg U2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKLSB7Ci0gCXBpZF90IHBpZDsKLSsJaW50 IGZpcHMgPSAwOwotICNpZmRlZiBVU0VfUElQRVMKLSAJaW50IHBpblsyXSwgcG91dFsyXSwgcGVy clsyXTsKLSAKLUBAIC01MzAsNiArNTMzLDE3IEBACi0gCXNlc3Npb25fc2V0X2Zkcyhzc2gsIHMs IGlub3V0WzFdLCBpbm91dFsxXSwgZXJyWzFdLAotIAkgICAgcy0+aXNfc3Vic3lzdGVtLCAwKTsK LSAjZW5kaWYKLSsJLyogc3dpdGNoIHRvIHRoZSBwYXJhbGxlbCBjaXBoZXJzIGlmIG5lY2Vzc2Fy eQotKwkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxs ZWwgY2lwaGVycy4KLSsJICovCi0rCWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsKLSsJaWYgKGZpcHMp Ci0rCQlkZWJ1ZzJfZigiRklQUyBtb2RlIGlzIGVuYWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJl IGRpc2FibGVkIik7Ci0rCWVsc2UKLSsJCWRlYnVnMl9mKCJGSVBTIG1vZGUgbm90IGZvdW5kIG9y IGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFibGVkIik7Ci0rCi0rCWlmICgob3B0 aW9ucy5kaXNhYmxlX211bHRpdGhyZWFkZWQgPT0gMCkgJiYgKGZpcHMgPT0gMCkpCi0rCQljaXBo ZXJfc3dpdGNoKHNzaCk7Ci0gCXJldHVybiAwOwotIH0KLSAKLUBAIC01NDQsNiArNTU4LDcgQEAK LSB7Ci0gCWludCBmZG91dCwgcHR5ZmQsIHR0eWZkLCBwdHltYXN0ZXI7Ci0gCXBpZF90IHBpZDsK LSsJaW50IGZpcHMgPSAwOwotIAotIAlpZiAocyA9PSBOVUxMKQotIAkJZmF0YWwoImRvX2V4ZWNf cHR5OiBubyBzZXNzaW9uIik7Ci1AQCAtNjQxLDYgKzY1NiwxNyBAQAotIAkvKiBFbnRlciBpbnRl cmFjdGl2ZSBzZXNzaW9uLiAqLwotIAlzLT5wdHltYXN0ZXIgPSBwdHltYXN0ZXI7Ci0gCXNlc3Np b25fc2V0X2Zkcyhzc2gsIHMsIHB0eWZkLCBmZG91dCwgLTEsIDEsIDEpOwotKwkvKiBzd2l0Y2gg dG8gdGhlIHBhcmFsbGVsIGNpcGhlciBpZiBhcHByb3ByaWF0ZQotKwkgKiBJZiBGSVBTIG1vZGUg ZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxsZWwgY2lwaGVycy4KLSsJICovCi0r CWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsKLSsJaWYgKGZpcHMpCi0rCQlkZWJ1ZzJfZigiRklQUyBt b2RlIGlzIGVuYWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJlIGRpc2FibGVkIik7Ci0rCWVsc2UK LSsJCWRlYnVnMl9mKCJGSVBTIG1vZGUgbm90IGZvdW5kIG9yIGRpc2FibGVkLiBQYXJhbGxlbCBj aXBoZXJzIGFyZSBlbmFibGVkIik7Ci0rCi0rCWlmICgob3B0aW9ucy5kaXNhYmxlX211bHRpdGhy ZWFkZWQgPT0gMCkgJiYgKGZpcHMgPT0gMCkpCi0rCQljaXBoZXJfc3dpdGNoKHNzaCk7Ci0gCXJl dHVybiAwOwotIH0KLSAKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NmdHAuMSBvcGVu c3NoLTEwLjNwMS9zZnRwLjEKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NmdHAuMQkyMDI2LTA3 LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NmdHAuMQky MDI2LTA3LTAyIDAwOjI3OjI5LjczMTEyMDE3NiArMDIwMAotQEAgLTU1LDYgKzU1LDkgQEAKLSB0 cmFuc3BvcnQuCi0gSXQgbWF5IGFsc28gdXNlIG1hbnkgZmVhdHVyZXMgb2Ygc3NoLCBzdWNoIGFz IHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gYW5kCi0gY29tcHJlc3Npb24uCi0rLk5tCi0raXMg YmluYXJ5IGNvbXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc2Z0cCBhbmQgdXNlcyB0aGUgc2FtZSBk aXJlY3RpdmUgYW5kIGNvbmZpZ3VyYXRpb24KLStvcHRpb25zIGV4Y2VwdCB3aGVyZSBub3RlZC4g Ci0gLlBwCi0gVGhlCi0gLkFyIGRlc3RpbmF0aW9uCi1AQCAtMzE5LDYgKzMyMiw3IEBACi0gLkl0 IFR1bm5lbAotIC5JdCBUdW5uZWxEZXZpY2UKLSAuSXQgVXBkYXRlSG9zdEtleXMKLSsuSXQgVXNl TVBUQ1AKLSAuSXQgVXNlcgotIC5JdCBVc2VyS25vd25Ib3N0c0ZpbGUKLSAuSXQgVmVyaWZ5SG9z dEtleUROUwotQEAgLTMzOCw3ICszNDIsOCBAQAotIFNwZWNpZnkgaG93IG1hbnkgcmVxdWVzdHMg bWF5IGJlIG91dHN0YW5kaW5nIGF0IGFueSBvbmUgdGltZS4KLSBJbmNyZWFzaW5nIHRoaXMgbWF5 IHNsaWdodGx5IGltcHJvdmUgZmlsZSB0cmFuc2ZlciBzcGVlZAotIGJ1dCB3aWxsIGluY3JlYXNl IG1lbW9yeSB1c2FnZS4KLS1UaGUgZGVmYXVsdCBpcyA2NCBvdXRzdGFuZGluZyByZXF1ZXN0cy4K LStUaGUgZGVmYXVsdCBpcyAxMDI0IG91dHN0YW5kaW5nIHJlcXVlc3RzIHByb3ZpZGluZyBmb3Ig MzJNQgotK29mIG91dHN0YW5kaW5nIGRhdGEgd2l0aCBhIDMyS0IgYnVmZmVyLgotIC5JdCBGbCBy Ci0gUmVjdXJzaXZlbHkgY29weSBlbnRpcmUgZGlyZWN0b3JpZXMgd2hlbiB1cGxvYWRpbmcgYW5k IGRvd25sb2FkaW5nLgotIE5vdGUgdGhhdAotQEAgLTM2NywxMCArMzcyLDEzIEBACi0gLkl0IENt IG5yZXF1ZXN0cyBOcyA9IE5zIEFyIHZhbHVlCi0gQ29udHJvbHMgaG93IG1hbnkgY29uY3VycmVu dCBTRlRQIHJlYWQgb3Igd3JpdGUgcmVxdWVzdHMgbWF5IGJlIGluIHByb2dyZXNzCi0gYXQgYW55 IHBvaW50IGluIHRpbWUgZHVyaW5nIGEgZG93bmxvYWQgb3IgdXBsb2FkLgotLUJ5IGRlZmF1bHQg NjQgcmVxdWVzdHMgbWF5IGJlIGFjdGl2ZSBjb25jdXJyZW50bHkuCi0rVGhpcyB2YWx1ZSBtdXN0 IGJlIGJldHdlZW4gMSBhbmQgODE5Mi4KLStCeSBkZWZhdWx0IDEwMjQgcmVxdWVzdHMgbWF5IGJl IGFjdGl2ZSBjb25jdXJyZW50bHkuCi0gLkl0IENtIGJ1ZmZlciBOcyA9IE5zIEFyIHZhbHVlCi0g Q29udHJvbHMgdGhlIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIGEgc2luZ2xlIFNGVFAgcmVhZC93 cml0ZSBvcGVyYXRpb24gdXNlZAotIGR1cmluZyBkb3dubG9hZCBvciB1cGxvYWQuCi0rVGhpcyB2 YWx1ZSBtdXN0IGJlIGJldHdlZW4gMUIgYW5kIDI1NUtCLiBZb3UgbWF5IHVzZQotK3RoZSBLIHVu aXQgZm9yIHRoZSBzaXplLiBFLmcuIDMyNzY4IG9yIDMySy4KLSBCeSBkZWZhdWx0IGEgMzJLQiBi dWZmZXIgaXMgdXNlZC4KLSAuRWwKLSAuRWwKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmln L3NmdHAuYyBvcGVuc3NoLTEwLjNwMS9zZnRwLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nm dHAuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAotKysrIG9wZW5zc2gtMTAu M3AxL3NmdHAuYwkyMDI2LTA3LTAyIDEwOjE5OjE2LjAzNTEyODEwOSArMDIwMAotQEAgLTI1ODks MjAgKzI1ODksMjUgQEAKLSAJCQkvKiBQbGVhc2Uga2VlcCBpbiBzeW5jIHdpdGggc3NoLmMgLVgg Ki8KLSAJCQlpZiAoc3RybmNtcChvcHRhcmcsICJidWZmZXI9IiwgNykgPT0gMCkgewotIAkJCQly ID0gc2Nhbl9zY2FsZWQob3B0YXJnICsgNywgJmxsdik7Ci0tCQkJCWlmIChyID09IDAgJiYgKGxs diA8PSAwIHx8IGxsdiA+IDI1NiAqIDEwMjQpKSB7Ci0rCQkJCS8qIGRvbid0IGFzayBmb3IgYSBi dWZmZXIgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0KLSsJCQkJICogc2l6ZSB0aGF0IFNGVFAgY2Fu IGhhbmRsZSAqLwotKwkJCQlpZiAociA9PSAwICYmIChsbHYgPD0gMCB8fCBsbHYgPiAoU0ZUUF9N QVhfTVNHX0xFTkdUSCAtIDEwMjQpKSkgewotIAkJCQkJciA9IC0xOwotIAkJCQkJZXJybm8gPSBF SU5WQUw7Ci0gCQkJCX0KLSAJCQkJaWYgKHIgPT0gLTEpIHsKLS0JCQkJCWZhdGFsKCJJbnZhbGlk IGJ1ZmZlciBzaXplIFwiJXNcIjogJXMiLAotLQkJCQkJICAgICBvcHRhcmcgKyA3LCBzdHJlcnJv cihlcnJubykpOwotKwkJCQkJZmF0YWwoIkludmFsaWQgYnVmZmVyIHNpemUuIE11c3QgYmUgYmV0 d2VlbiAxQiBhbmQgMjU1S0IuIgotKwkJCQkJICAgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyA3 LCBzdHJlcnJvcihlcnJubykpOwotIAkJCQl9Ci0gCQkJCWNvcHlfYnVmZmVyX2xlbiA9IChzaXpl X3QpbGx2OwotIAkJCX0gZWxzZSBpZiAoc3RybmNtcChvcHRhcmcsICJucmVxdWVzdHM9IiwgMTAp ID09IDApIHsKLS0JCQkJbGx2ID0gc3RydG9udW0ob3B0YXJnICsgMTAsIDEsIDI1NiAqIDEwMjQs Ci0rCQkJCS8qIG1vcmUgdGhhbiAxMGsgdG8gMTVrIHJlcXVlc3RzIHN0YXJ0cyBzdGFsbGluZyB0 aGUgY29ubmVjdGlvbgotKwkJCQkgKiA4MTkyICogZGVmYXVsdCBidWZmZXIgc2l6ZSBpcyAyNTZN QiBvZiBvdXRzdGFuZGluZyBkYXRhLgotKwkJCQkgKiBpZiB1c2VycyBuZWVkIG1vcmUgdGhlbiB0 aGV5IG5lZWQgdG8gdXAgdGhlIGJ1ZmZlciBzaXplICovCi0rCQkJCWxsdiA9IHN0cnRvbnVtKG9w dGFyZyArIDEwLCAxLCA4ICogMTAyNCwKLSAJCQkJICAgICZlcnJzdHIpOwotIAkJCQlpZiAoZXJy c3RyICE9IE5VTEwpIHsKLS0JCQkJCWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiByZXF1ZXN0cyAi Ci0rCQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMuIE11c3QgYmUgYmV0d2Vl biAxIGFuZCA4MTkyLiAiCi0gCQkJCQkgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyAxMCwgZXJy c3RyKTsKLSAJCQkJfQotIAkJCQludW1fcmVxdWVzdHMgPSAoc2l6ZV90KWxsdjsKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NmdHAtY2xpZW50LmMgb3BlbnNzaC0xMC4zcDEvc2Z0cC1j bGllbnQuYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2Z0cC1jbGllbnQuYwkyMDI2LTA3LTAy IDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NmdHAtY2xpZW50 LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzE4NTUwMDEgKzAyMDAKLUBAIC02MCw3ICs2MCw4IEBA Ci0gI2RlZmluZSBERUZBVUxUX0NPUFlfQlVGTEVOCTMyNzY4Ci0gCi0gLyogRGVmYXVsdCBudW1i ZXIgb2YgY29uY3VycmVudCB4ZmVyIHJlcXVlc3RzIChmaXggc2Z0cC4xIHNjcC4xIGlmIGNoYW5n ZWQpICovCi0tI2RlZmluZSBERUZBVUxUX05VTV9SRVFVRVNUUwk2NAotKy8qIDEwMjQgeGZlciBy ZXF1ZXN0cyBnaXZlcyB1cyAzMk1CIG9mIHJlY2VpdmUgYnVmZmVyIHNwYWNlICovCi0rI2RlZmlu ZSBERUZBVUxUX05VTV9SRVFVRVNUUwkxMDI0Ci0gCi0gLyogTWluaW11bSBhbW91bnQgb2YgZGF0 YSB0byByZWFkIGF0IGEgdGltZSAqLwotICNkZWZpbmUgTUlOX1JFQURfU0laRQk1MTIKLWRpZmYg LU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC4xIG9wZW5zc2gtMTAuM3AxL3NzaC4xCi0tLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9zc2guMQkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyAr MDIwMAotKysrIG9wZW5zc2gtMTAuM3AxL3NzaC4xCTIwMjYtMDctMDIgMDE6NDU6MjAuNjkxOTMx NTMzICswMjAwCi1AQCAtNzcsNiArNzcsMTQgQEAKLSBYMTEgY29ubmVjdGlvbnMsIGFyYml0cmFy eSBUQ1AgcG9ydHMgYW5kCi0gLlV4IE5zIC1kb21haW4KLSBzb2NrZXRzIGNhbiBhbHNvIGJlIGZv cndhcmRlZCBvdmVyIHRoZSBzZWN1cmUgY2hhbm5lbC4KLSsuTm0KLStpcyBiaW5hcnkgY29tcGF0 aWJsZSB3aXRoIHRoZSBtb3JlIHdlbGwga25vd24gT3BlblNTSCBhbmQgdXNlcyB0aGUgc2FtZSBj b25maWd1cmF0aW9uCi0rZGlyZWN0aXZlcywgbWV0aG9kcywgYW5kIGtleXdvcmRzIGV4Y2VwdCB3 aGVyZSBub3RlZCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRlZmF1bHQgcG9ydC4KLStIUE4t U1NIIHNlcnZlcnMsIGJ5IGRlZmF1bHQsIHVzZSBwb3J0IDIyMjIgZm9yIGNvbm5lY3Rpb24sIGFu ZCBhcyBzdWNoLAotKy5ObQotK2NsaWVudHMKLSthdHRlbXB0IHRvIGNvbm5lY3Qgb24gdGhhdCBw b3J0LiBJZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IG9uIHBvcnQgMjIyMiBmYWlscyBpdCB3aWxs IGZhbGxiYWNrIHRvCi0rcG9ydCAyMi4gUGxlYXNlIHNlZSB0aGUgLXAgc3dpdGNoIGZvciBtb3Jl IGluZm9ybWF0aW9uLgotIC5QcAotIC5ObQotIGNvbm5lY3RzIGFuZCBsb2dzIGludG8gdGhlIHNw ZWNpZmllZAotQEAgLTUzMSwxMSArNTM5LDEzIEBACi0gLkl0IENvbnRyb2xNYXN0ZXIKLSAuSXQg Q29udHJvbFBhdGgKLSAuSXQgQ29udHJvbFBlcnNpc3QKLSsuSXQgRGlzYWJsZU1UQUVTKgotIC5J dCBEeW5hbWljRm9yd2FyZAotIC5JdCBFbmFibGVFc2NhcGVDb21tYW5kbGluZQotIC5JdCBFbmFi bGVTU0hLZXlzaWduCi0gLkl0IEVzY2FwZUNoYXIKLSAuSXQgRXhpdE9uRm9yd2FyZEZhaWx1cmUK LSsuSXQgRmFsbGJhY2tQb3J0Ci0gLkl0IEZpbmdlcnByaW50SGFzaAotIC5JdCBGb3JrQWZ0ZXJB dXRoZW50aWNhdGlvbgotIC5JdCBGb3J3YXJkQWdlbnQKLUBAIC01NDgsNiArNTU4LDggQEAKLSAu SXQgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscwotIC5JdCBHYXRld2F5UG9ydHMKLSAuSXQgR2xv YmFsS25vd25Ib3N0c0ZpbGUKLSsuSXQgSGFwcHlFeWVzCi0rLkl0IEhhcHB5RGVsYXkKLSAuSXQg R1NTQVBJS2V4QWxnb3JpdGhtcwotIC5JdCBHU1NBUElSZW5ld2FsRm9yY2VzUmVrZXkKLSAuSXQg R1NTQVBJU2VydmVySWRlbnRpdHkKLUBAIC01NTksNiArNTcxLDcgQEAKLSAuSXQgSG9zdGJhc2Vk QWNjZXB0ZWRBbGdvcml0aG1zCi0gLkl0IEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uCi0gLkl0IEhv c3RuYW1lCi0rLkl0IEhQTkRpc2FibGVkKgotIC5JdCBJUFFvUwotIC5JdCBJZGVudGl0aWVzT25s eQotIC5JdCBJZGVudGl0eUFnZW50Ci1AQCAtNTc0LDcgKzU4NywxMyBAQAotIC5JdCBMb2dMZXZl bAotIC5JdCBMb2dWZXJib3NlCi0gLkl0IE1BQ3MKLSsuSXQgTWV0cmljcwotKy5JdCBNZXRyaWNz SW50ZXJ2YWwKLSsuSXQgTWV0cmljc1BhdGgKLSAuSXQgTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JM b2NhbGhvc3QKLSsuSXQgTm9uZUNpcGhlckVuYWJsZWQqCi0rLkl0IE5vbmVFbmFibGVkKgotKy5J dCBOb25lTWFjRW5hYmxlZCoKLSAuSXQgTnVtYmVyT2ZQYXNzd29yZFByb21wdHMKLSAuSXQgT2Jz Y3VyZUtleXN0cm9rZVRpbWluZwotIC5JdCBQS0NTMTFQcm92aWRlcgotQEAgLTYwNiwxNSArNjI1 LDE5IEBACi0gLkl0IFN0cmljdEhvc3RLZXlDaGVja2luZwotIC5JdCBTeXNsb2dGYWNpbGl0eQot IC5JdCBUQ1BLZWVwQWxpdmUKLSsuSXQgVGNwUmN2QnVmUG9sbCoKLSAuSXQgVGFnCi0gLkl0IFR1 bm5lbAotIC5JdCBUdW5uZWxEZXZpY2UKLSAuSXQgVXBkYXRlSG9zdEtleXMKLSsuSXQgVXNlTVBU Q1AKLSAuSXQgVXNlcgotIC5JdCBVc2VyS25vd25Ib3N0c0ZpbGUKLSAuSXQgVmVyaWZ5SG9zdEtl eUROUwotIC5JdCBWaXN1YWxIb3N0S2V5Ci0gLkl0IFhBdXRoTG9jYXRpb24KLSsuUHAKLSsuSXQg KiBIcG5zc2ggc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24uCi0gLkVsCi0gLlBwCi0gLkl0 IEZsIFAgQXIgdGFnCi1AQCAtNjMxLDYgKzY1NCwxMyBAQAotIFBvcnQgdG8gY29ubmVjdCB0byBv biB0aGUgcmVtb3RlIGhvc3QuCi0gVGhpcyBjYW4gYmUgc3BlY2lmaWVkIG9uIGEKLSBwZXItaG9z dCBiYXNpcyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgotK0hQTi1TU0ggdXNlcyBhIGRlZmF1 bHQgcG9ydCBvZiAyMjIyLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkKLStmYWxsYmFjayB0byB1c2Ug dGhlIFNTSCBzdGFuZGFyZCBwb3J0IDIyIGlmIGl0IGNhbm5vdCBjb25uZWN0Ci0rb24gcG9ydCAy MjIyLiBUaGlzIGZhbGxiYWNrIGJlaGF2aW91ciBjYW4gYmUgbW9kaWZpZWQgd2l0aCB0aGUKLStG YWxsYmFja1BvcnQgb3B0aW9uLiBOb3RlOiBpZiBvdXRib3VuZCBwb3J0IDIyMjIgaXMKLStibG9j a2VkIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgaHBuc3NoIGNsaWVudCBpcyBub24tcmVzcG9uc2l2 ZS4gSW4gdGhhdCBldmVudCwKLStlaXRoZXIgc3BlY2lmeSB0aGUgY29ycmVjdCBwb3J0IG9yIHVz ZSB0aGUgQ29ubmVjdFRpbWVvdXQgb3B0aW9uCi0rdG8gdHJpZ2dlciB0aGUgcG9ydCBmYWxsYmFj ayBtb3JlIHF1aWNrbHkuCi0gLlBwCi0gLkl0IEZsIFEgQXIgcXVlcnlfb3B0aW9uCi0gUXVlcmll cyBmb3IgdGhlIGFsZ29yaXRobXMgc3VwcG9ydGVkIGJ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGZl YXR1cmVzOgotQEAgLTE4MjQsMyArMTg1NCw3IEBACi0gY3JlYXRlZCBPcGVuU1NILgotIE1hcmt1 cyBGcmllZGwgY29udHJpYnV0ZWQgdGhlIHN1cHBvcnQgZm9yIFNTSAotIHByb3RvY29sIHZlcnNp b25zIDEuNSBhbmQgMi4wLgotK0NocmlzIFJhcGllciwgTWljaGFlbCBTdGV2ZW5zLCBCZW4gQmVu bmV0LCBhbmQgTWlrZSBUYXNvdGEgZGV2ZWxvcGVkCi0rdGhlIEhQTiBleHRlbnNpb25zIGF0IHRo ZSBQaXR0c2J1cmdoIFN1cGVyY29tdXRpbmcgQ2VudGVyIHdpdGggZ3JhbnRzCi0rZnJvbSBDaXNj bywgdGhlIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUsIGFuZCB0aGUgTmF0aW9uYWwgU2Np ZW5jZQotK0ZvdW5kYXRpb24uCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hfYXBp LmMgb3BlbnNzaC0xMC4zcDEvc3NoX2FwaS5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hf YXBpLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEw LjNwMS9zc2hfYXBpLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzI1NjUwMzIgKzAyMDAKLUBAIC00 MzEsNyArNDMxLDcgQEAKLSAJY2hhciAqY3A7Ci0gCWludCByOwotIAotLQlpZiAoKHIgPSBzc2hi dWZfcHV0ZihiYW5uZXIsICJTU0gtMi4wLSUuMTAwc1xyXG4iLCBTU0hfVkVSU0lPTikpICE9IDAp Ci0rCWlmICgociA9IHNzaGJ1Zl9wdXRmKGJhbm5lciwgIlNTSC0yLjAtJS4xMDBzXHJcbiIsIFNT SF9SRUxFQVNFKSkgIT0gMCkKLSAJCXJldHVybiByOwotIAlpZiAoKHIgPSBzc2hidWZfcHV0Yihz c2hfcGFja2V0X2dldF9vdXRwdXQoc3NoKSwgYmFubmVyKSkgIT0gMCkKLSAJCXJldHVybiByOwot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoYnVmLmMgb3BlbnNzaC0xMC4zcDEvc3No YnVmLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGJ1Zi5jCTIwMjYtMDctMDIgMDA6Mjc6 MDYuMTAzMjc1MzA3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoYnVmLmMJMjAyNi0wNy0w MiAwMDoyNzoyOS43MzI2NzI3MjkgKzAyMDAKLUBAIC0yOCw2ICsyOCw4IEBACi0gI2luY2x1ZGUg InNzaGJ1Zi5oIgotICNpbmNsdWRlICJtaXNjLmgiCi0gCi0rI2RlZmluZSBCVUZfV0FURVJTSEVE IDI1NioxMDI0Ci0rCi0gI2lmZGVmIFNTSEJVRl9ERUJVRwotICMgZGVmaW5lIFNTSEJVRl9URUxM KHdoYXQpIGRvIHsgXAotIAkJcHJpbnRmKCIlczolZCAlczogJXMgc2l6ZSAlenUgYWxsb2MgJXp1 IG9mZiAlenUgbWF4ICV6dVxuIiwgXAotQEAgLTQ5LDggKzUxLDI5IEBACi0gCWludCByZWFkb25s eTsJCS8qIFJlZmVycyB0byBleHRlcm5hbCwgY29uc3QgZGF0YSAqLwotIAl1X2ludCByZWZjb3Vu dDsJCS8qIFRyYWNrcyBzZWxmIGFuZCBudW1iZXIgb2YgY2hpbGQgYnVmZmVycyAqLwotIAlzdHJ1 Y3Qgc3NoYnVmICpwYXJlbnQ7CS8qIElmIGNoaWxkLCBwb2ludGVyIHRvIHBhcmVudCAqLwotKwlj aGFyIGxhYmVsW01BWF9MQUJFTF9MRU5dOyAgIC8qIFN0cmluZyBmb3IgYnVmZmVyIGxhYmVsIC0g ZGVidWdnaW5nIHVzZSAqLwotKwlpbnQgdHlwZTsgICAgICAgICAgICAgICAvKiB0eXBlIG9mIGJ1 ZmZlciBlbnVtIChzc2hidWZfdHlwZXMpKi8KLSB9OwotIAotKy8qIHVwZGF0ZSB0aGUgbGFiZWwg c3RyaW5nIGZvciBhIGdpdmVuIHNzaGJ1Zi4gVXNlZnVsCi0rICogZm9yIGRlYnVnZ2luZyAqLwot K3ZvaWQKLStzc2hidWZfcmVsYWJlbChzdHJ1Y3Qgc3NoYnVmICpidWYsIGNvbnN0IGNoYXIgKmxh YmVsKQotK3sKLSsJaWYgKGxhYmVsICE9IE5VTEwpCi0rCQlzdHJuY3B5KGJ1Zi0+bGFiZWwsIGxh YmVsLCBNQVhfTEFCRUxfTEVOLTEpOwotK30KLSsKLSsvKiBzZXQgdGhlIHR5cGUgKGZyb20gZW51 bSBzc2hidWZfdHlwZSkgb2YgdGhlIGdpdmVuIHNzaGJ1Zi4KLSsgKiBUaGUgcHVycG9zZSBpcyB0 byBhbGxvdyBkaWZmZXJlbnQgY2xhc3NlcyBvZiBidWZmZXJzIHRvCi0rICogZm9sbG93IGRpZmZl cmVudCBjb2RlIHBhdGhzIGlmIG5lY2Vzc2FyeSAqLwotK3ZvaWQKLStzc2hidWZfdHlwZShzdHJ1 Y3Qgc3NoYnVmICpidWYsIGludCB0eXBlKQotK3sKLSsJaWYgKHR5cGUgPCBCVUZfTUFYX1RZUEUp Ci0rCQlidWYtPnR5cGUgPSB0eXBlOwotK30KLSsKLSBzdGF0aWMgaW5saW5lIGludAotIHNzaGJ1 Zl9jaGVja19zYW5pdHkoY29uc3Qgc3RydWN0IHNzaGJ1ZiAqYnVmKQotIHsKLUBAIC05MCw3ICsx MTMsNyBAQAotIH0KLSAKLSBzdHJ1Y3Qgc3NoYnVmICoKLS1zc2hidWZfbmV3KHZvaWQpCi0rc3No YnVmX25ld19sYWJlbCAoY29uc3QgY2hhciAqbGFiZWwpCi0gewotIAlzdHJ1Y3Qgc3NoYnVmICpy ZXQ7Ci0gCi1AQCAtMTAxLDYgKzEyNCw4IEBACi0gCXJldC0+cmVhZG9ubHkgPSAwOwotIAlyZXQt PnJlZmNvdW50ID0gMTsKLSAJcmV0LT5wYXJlbnQgPSBOVUxMOwotKwlpZiAobGFiZWwgIT0gTlVM TCkKLSsJCXN0cm5jcHkocmV0LT5sYWJlbCwgbGFiZWwsIE1BWF9MQUJFTF9MRU4tMSk7Ci0gCWlm ICgocmV0LT5jZCA9IHJldC0+ZCA9IGNhbGxvYygxLCByZXQtPmFsbG9jKSkgPT0gTlVMTCkgewot IAkJZnJlZShyZXQpOwotIAkJcmV0dXJuIE5VTEw7Ci1AQCAtMjkwLDcgKzMxNSwyMSBAQAotIHsK LSAJaWYgKHNzaGJ1Zl9jaGVja19zYW5pdHkoYnVmKSAhPSAwIHx8IGJ1Zi0+cmVhZG9ubHkgfHwg YnVmLT5yZWZjb3VudCA+IDEpCi0gCQlyZXR1cm4gMDsKLS0JcmV0dXJuIGJ1Zi0+bWF4X3NpemUg LSAoYnVmLT5zaXplIC0gYnVmLT5vZmYpOwotKwkvKiBSZXNlcnZlIH40Ljc2JSAoMS8yMSkgaGVh ZHJvb20gb24gY2hhbm5lbCBpbnB1dCBidWZmZXJzIHRvIHByZXZlbnQKLSsJICogYSBwYXRob2xv Z2ljYWwgc3RhdGUgZHVyaW5nIGJ1bGsgZGF0YSB0cmFuc2ZlcnMuIFRoZSBoZWFkcm9vbSBzY2Fs ZXMKLSsJICogd2l0aCBidWZmZXIgc2l6ZSBhbmQgZ2l2ZXMgdGhlIGNoYW5uZWwgdGltZSB0byBk cmFpbiBiZWZvcmUgYWNjZXB0aW5nCi0rCSAqIG1vcmUgZGF0YSwgc21vb3RoaW5nIGZsb3cgY29u dHJvbCBhbmQgcmVkdWNpbmcgYnVmZmVyIHJlYWxsb2NhdGlvbi4KLSsJICogV2hlbiB0aGUgYnVm ZmVyIGlzIGZ1bGxlciB0aGFuIHRoZSBoZWFkcm9vbSBhbGxvd3Mgd2UgbXVzdCByZXR1cm4gMCwK LSsJICogbm90IHVuZGVyZmxvdzogc2l6ZV90IGlzIHVuc2lnbmVkIHNvIGEgbmFpdmUgc3VidHJh Y3Rpb24gd3JhcHMgdG8KLSsJICogU0laRV9NQVgsIGNhdXNpbmcgdGhlIGNhbGxlciB0byByZWFk IGludG8gYSBuZWFybHktZnVsbCBidWZmZXIgYW5kCi0rCSAqIHRocmFzaCB3aW5kb3cgdXBkYXRl cy4gT25seSBhcHBsaWVkIHRvIGNoYW5uZWwgaW5wdXQgYnVmZmVycyBhcwotKwkgKiBvdGhlciBi dWZmZXIgdHlwZXMgZmFpbCB0aGUgcmVncmVzc2lvbiB1bml0IHRlc3RzIHdpdGggaGVhZHJvb20u ICovCi0rCWlmIChidWYtPnR5cGUgPT0gQlVGX0NIQU5ORUxfSU5QVVQpIHsKLSsJCXNpemVfdCBo ZWFkcm9vbSA9IGJ1Zi0+bWF4X3NpemUgLSBidWYtPm1heF9zaXplIC8gMjE7Ci0rCQlzaXplX3Qg dXNlZCA9IGJ1Zi0+c2l6ZSAtIGJ1Zi0+b2ZmOwotKwkJcmV0dXJuICh1c2VkID49IGhlYWRyb29t KSA/IDAgOiBoZWFkcm9vbSAtIHVzZWQ7Ci0rCX0gZWxzZQotKwkJcmV0dXJuIGJ1Zi0+bWF4X3Np emUgLSAoYnVmLT5zaXplIC0gYnVmLT5vZmYpOwotIH0KLSAKLSBjb25zdCB1X2NoYXIgKgotQEAg LTM1MCw5ICszODksMzYgQEAKLSAJICovCi0gCW5lZWQgPSBsZW4gKyBidWYtPnNpemUgLSBidWYt PmFsbG9jOwotIAlybGVuID0gUk9VTkRVUChidWYtPmFsbG9jICsgbmVlZCwgU1NIQlVGX1NJWkVf SU5DKTsKLSsJLyogV2l0aCB0aGUgY2hhbmdlcyBpbiA4LjkgdGhlIG91dHB1dCBidWZmZXIgZW5k IHVwIGdyb3dpbmcgcHJldHR5Ci0rCSAqIHNsb3dseS4gSXQncyBrbm93cyB0aGF0IGl0IG5lZWRz IHRvIGdyb3cgYnV0IGl0IG9ubHkgZG9lcyBzbyAzMksKLSsJICogYXQgYSB0aW1lLiBUaGlzIG1l YW5zIGEgbG90IG9mIGNhbGxzIHRvIHJlYWxsb2MgYW5kIG1lbWNweSB3aGljaAotKwkgKiBraWxs cyBwZXJmb3JtYW5jZSB1bnRpbCB0aGUgYnVmZmVyIHJlYWNoZXMgc29tZSBtYXhpbXVtIHNpemUu Ci0rCSAqIFNvIHdlIGV4cGxpY2l0bHkgdGVzdCBmb3IgYSBidWZmZXIgdGhhdCdzIHRyeWluZyB0 byBncm93IGFuZAotKwkgKiBpZiBpdCBpcyB0aGVuIHdlIHB1c2ggdGhlIGdyb3d0aCBieSA0TUIg YXQgYSB0aW1lLiBUaGlzIGNhbiByZXN1bHQgaW4KLSsJICogdGhlIGJ1ZmZlciBiZWluZyBvdmVy IGFsbG9jYXRlZCAoaW4gdGVybXMgb2YgYWN0dWFsIG5lZWRzKSBidXQgdGhlCi0rCSAqIHByb2Nl c3MgaXMgZmFzdC4gVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMgb3ZlcmhlYWQKLSsJICogYW5k IGltcHJvdmVzIHBlcmZvcm1hbmNlLiBJbiB0aGlzIGNhc2Ugd2UgbG9vayBmb3IgYSBidWZmZXIg dGhhdCBpcyB0cnlpbmcKLSsJICogdG8gZ3JvdyBsYXJnZXIgdGhhbiBCVUZfV0FURVJTSEVEICgy NTYqMTAyNCB0YWtlbiBmcm9tIFBBQ0tFVF9NQVhfU0laRSkKLSsJICogYW5kIGV4cGxjaXRseSBj aGVjayB0aGF0IHRoZSBidWZmZXIgaXMgYmVpbmcgdXNlZCBmb3IgaW5ib3VuZCBvdXRib3VuZAot KwkgKiBjaGFubmVsIGJ1ZmZlcmluZy4KLSsJICogVXBkYXRlZCBmb3IgMTguNC4xIC1janIgMDQv MjAvMjQKLSsJICovCi0rCWlmIChybGVuID4gQlVGX1dBVEVSU0hFRCAmJiAoYnVmLT50eXBlID09 IEJVRl9DSEFOTkVMX09VVFBVVCB8fCBidWYtPnR5cGUgPT0gQlVGX0NIQU5ORUxfSU5QVVQpKSB7 Ci0rCQkvKiBkZWJ1Z19mICgiUHJpb3I6IGxhYmVsOiAlcywgJXAsIHJsZW4gaXMgJXp1IG5lZWQg aXMgJXp1IG1heF9zaXplIGlzICV6dSIsCi0rCQkgICBidWYtPmxhYmVsLCBidWYsIHJsZW4sIG5l ZWQsIGJ1Zi0+bWF4X3NpemUpOyAqLwotKwkJLyogZWFzaWVzdCB0aGluZyB0byBkbyBpcyBncm93 IHRoZSBudWZmZXIgYnkgNE1CIGVhY2ggdGltZS4gSXQgbWlnaHQgZW5kCi0rCQkgKiB1cCBiZWlu ZyBzb21ld2hhdCBvdmVyYWxsb2NhdGVkIGJ1dCB3b3JrcyBxdWlja2x5ICovCi0rCQluZWVkID0g KDQqMTAyNCoxMDI0KTsKLSsJCXJsZW4gPSBST1VORFVQKGJ1Zi0+YWxsb2MgKyBuZWVkLCBTU0hC VUZfU0laRV9JTkMpOwotKwkJLyogZGVidWdfZiAoIlBvc3Q6IGxhYmVsOiAlcywgJXAsIHJsZW4g aXMgJXp1IG5lZWQgaXMgJXp1IG1heF9zaXplIGlzICV6dSIsICovCi0rCQkvKiAJIGJ1Zi0+bGFi ZWwsIGJ1ZiwgcmxlbiwgbmVlZCwgYnVmLT5tYXhfc2l6ZSk7ICovCi0rCX0KLSAJU1NIQlVGX0RC RygoIm5lZWQgJXp1IGluaXRpYWwgcmxlbiAlenUiLCBuZWVkLCBybGVuKSk7Ci0rCi0rCS8qIHJs ZW4gbWlnaHQgYmUgYWJvdmUgdGhlIG1heCBhbGxvY2F0aW9uICovCi0gCWlmIChybGVuID4gYnVm LT5tYXhfc2l6ZSkKLS0JCXJsZW4gPSBidWYtPmFsbG9jICsgbmVlZDsKLSsJCXJsZW4gPSBidWYt Pm1heF9zaXplOwotKwotIAlTU0hCVUZfREJHKCgiYWRqdXN0ZWQgcmxlbiAlenUiLCBybGVuKSk7 Ci0gCWlmICgoZHAgPSByZWNhbGxvY2FycmF5KGJ1Zi0+ZCwgYnVmLT5hbGxvYywgcmxlbiwgMSkp ID09IE5VTEwpIHsKLSAJCVNTSEJVRl9EQkcoKCJyZWFsbG9jIGZhaWwiKSk7Ci1kaWZmIC1OdXIg b3BlbnNzaC0xMC4zcDEub3JpZy9zc2hidWYuaCBvcGVuc3NoLTEwLjNwMS9zc2hidWYuaAotLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoYnVmLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDMyNzUz MDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hidWYuaAkyMDI2LTA3LTAyIDA5OjQwOjAx Ljc3ODA0NDgxMiArMDIwMAotQEAgLTMwLDE4ICszMCw0OSBAQAotICMgZW5kaWYgLyogT1BFTlNT TF9IQVNfRUNDICovCi0gI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwotIAotLSNkZWZpbmUgU1NI QlVGX1NJWkVfTUFYCQkweDgwMDAwMDAJLyogSGFyZCBtYXhpbXVtIHNpemUgKi8KLSsjZGVmaW5l IFNTSEJVRl9TSVpFX01BWAkJMHg4MDAwMDAwCS8qIEhhcmQgbWF4aW11bSBzaXplIDEyOE1CICov Ci0gI2RlZmluZSBTU0hCVUZfUkVGU19NQVgJCTB4MTAwMDAwCS8qIE1heCBjaGlsZCBidWZmZXJz ICovCi0gI2RlZmluZSBTU0hCVUZfTUFYX0JJR05VTQkoMTYzODQgLyA4KQkvKiBNYXggYmlnbnVt ICpieXRlcyogKi8KLSAjZGVmaW5lIFNTSEJVRl9NQVhfRUNQT0lOVAkoKDUyOCAqIDIgLyA4KSAr IDEpIC8qIE1heCBFQyBwb2ludCAqYnl0ZXMqICovCi0rI2RlZmluZSBNQVhfTEFCRUxfTEVOCQk2 NCAvKm1heGltdW0gc2l6ZSBvZiBzc2hidWYgbGFiZWwgKi8KLSsjZGVmaW5lIHNzaGJ1Zl9uZXco KSBzc2hidWZfbmV3X2xhYmVsKF9fZnVuY19fKQotIAotIHN0cnVjdCBzc2hidWY7Ci0gCi0rZW51 bSBidWZmZXJfdHlwZXMgewotKwlCVUZfQ0hBTk5FTF9PVVRQVVQsCi0rCUJVRl9DSEFOTkVMX0lO UFVULAotKwlCVUZfQ0hBTk5FTF9FWFRFTkRFRCwKLSsJQlVGX1BBQ0tFVF9JTlBVVCwKLSsJQlVG X1BBQ0tFVF9JTkNPTUlORywKLSsJQlVGX1BBQ0tFVF9PVVRQVVQsCi0rCUJVRl9QQUNLRVRfT1VU R09JTkcsCi0rCUJVRl9NQVhfVFlQRQotK307Ci0rCi0gLyoKLSAgKiBDcmVhdGUgYSBuZXcgc3No YnVmIGJ1ZmZlci4KLSAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYnVmZmVyIG9uIHN1Y2Nlc3MsIG9y IE5VTEwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgotICAqLwotLXN0cnVjdCBzc2hidWYgKnNzaGJ1 Zl9uZXcodm9pZCk7Ci0rLyogc3RydWN0IHNzaGJ1ZiAqc3NoYnVmX25ldyh2b2lkKTsqLwotKwot Ky8qCi0rICogQ3JlYXRlIGEgbmV3IGxhYmVsZWQgc3NoYnVmIGJ1ZmZlci4KLSsgKiBSZXR1cm5z IHBvaW50ZXIgdG8gYnVmZmVyIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gYWxsb2NhdGlvbiBmYWls dXJlLgotKyAqLwotK3N0cnVjdCBzc2hidWYgKnNzaGJ1Zl9uZXdfbGFiZWwoY29uc3QgY2hhciAq KTsKLSsKLSsvKgotKyAqIHJlbGFiZWwgdGhlIHNzaGJ1ZiBzdHJ1Y3QKLSsgKi8KLSt2b2lkIHNz aGJ1Zl9yZWxhYmVsKHN0cnVjdCBzc2hidWYgKiwgY29uc3QgY2hhciAqKTsKLSsKLSsvKgotKyAq IGFzc2lnbiBhIHR5cGUgKGZyb20gdGhlIGJ1ZmZlcl90eXBlcyBlbnVtKSB0bwotKyAqIHRoZSBi dWZmZXIuIFVzZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcHVycG9zZSBvZgotKyAqIHRoZSBi dWZmZXIuCi0rICovCi0rdm9pZCBzc2hidWZfdHlwZShzdHJ1Y3Qgc3NoYnVmICosIGludCk7Ci0g Ci0gLyoKLSAgKiBDcmVhdGUgYSBuZXcsIHJlYWQtb25seSBzc2hidWYgYnVmZmVyIGZyb20gZXhp c3RpbmcgZGF0YS4KLUBAIC03OCwxMiArMTA5LDEzIEBACi0gdm9pZAlzc2hidWZfcmVzZXQoc3Ry dWN0IHNzaGJ1ZiAqYnVmKTsKLSAKLSAvKgotLSAqIFJldHVybiB0aGUgbWF4aW11bSBzaXplIG9m IGJ1ZgotKyAqIFJldHVybiB0aGUgbWF4aW11bSB1c2FibGUgc2l6ZSBvZiBidWYKLSAgKi8KLSBz aXplX3QJc3NoYnVmX21heF9zaXplKGNvbnN0IHN0cnVjdCBzc2hidWYgKmJ1Zik7Ci0gCi0gLyoK LS0gKiBTZXQgdGhlIG1heGltdW0gc2l6ZSBvZiBidWYKLSsgKiBTZXQgdGhlIG1heGltdW0gdXNh YmxlIHNpemUgb2YgYnVmLiBOb3RlIHRoYXQgdGhlIGJ1ZmZlciBtYXkgY29uc3VtZSB1cAotKyAq IHRvIDJ4IHRoaXMgbWVtb3J5IHBsdXMgYm9va2tlZXBpbmcgb3ZlcmhlYWQuCi0gICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgU1NIX0VSUl8qIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KLSAgKi8KLSBpbnQJc3NoYnVmX3NldF9tYXhfc2l6ZShzdHJ1Y3Qgc3NoYnVmICpidWYs IHNpemVfdCBtYXhfc2l6ZSk7Ci1AQCAtMzgxLDYgKzQxMyw5IEBACi0gCQkoKHVfY2hhciAqKShw KSlbMV0gPSBfX3YgJiAweGZmOyBcCi0gCX0gd2hpbGUgKDApCi0gCi0rCi0rdm9pZCBzc2hidWZf c2V0X3dpbmRvd19tYXgoc3RydWN0IHNzaGJ1ZiAqYnVmICwgc2l6ZV90IGxlbik7Ci0rCi0gLyog SW50ZXJuYWwgZGVmaW5pdGlvbnMgZm9sbG93LiBFeHBvc2VkIGZvciByZWdyZXNzIHRlc3RzICov Ci0gI2lmZGVmIFNTSEJVRl9JTlRFUk5BTAotIAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9y aWcvc3NoLmMgb3BlbnNzaC0xMC4zcDEvc3NoLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nz aC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCi0rKysgb3BlbnNzaC0xMC4z cDEvc3NoLmMJMjAyNi0wNy0wMiAxMToyMjowNS44NjkzNTM5MDIgKzAyMDAKLUBAIC05OCw2ICs5 OCw3IEBACi0gI2luY2x1ZGUgInNzaGVyci5oIgotICNpbmNsdWRlICJ1dGY4LmgiCi0gI2luY2x1 ZGUgImhvc3RmaWxlLmgiCi0rI2luY2x1ZGUgImNpcGhlci1zd2l0Y2guaCIKLSAKLSAjaWZkZWYg RU5BQkxFX1BLQ1MxMQotICNpbmNsdWRlICJzc2gtcGtjczExLmgiCi1AQCAtMTA5NCw2ICsxMDk1 LDEwIEBACi0gCQkJYnJlYWs7Ci0gCQljYXNlICdUJzoKLSAJCQlvcHRpb25zLnJlcXVlc3RfdHR5 ID0gUkVRVUVTVF9UVFlfTk87Ci0rCQkJLyogZW5zdXJlIHRoYXQgdGhlIHVzZXIgZG9lc24ndCB0 cnkgdG8gYmFja2Rvb3IgYSAqLwotKwkJCS8qIG51bGwgY2lwaGVyIHN3aXRjaCBvbiBhbiBpbnRl cmFjdGl2ZSBzZXNzaW9uICovCi0rCQkJLyogc28gZXhwbGljaXRseSBkaXNhYmxlIGl0IG5vIG1h dHRlciB3aGF0ICovCi0rCQkJb3B0aW9ucy5ub25lX3N3aXRjaD0wOwotIAkJCWJyZWFrOwotIAkJ Y2FzZSAnbyc6Ci0gCQkJbGluZSA9IHhzdHJkdXAob3B0YXJnKTsKLUBAIC0xNzM5LDEwICsxNzQ0 LDM2IEBACi0gCX0KLSAKLSAJLyogT3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBob3N0 LiAqLwotKwkvKiB3ZSB0cnkgaW5pdGlhbGx5IG9uIHRoZSBkZWZhdWx0IGhwbnNzaCBwb3J0IHJl dHVybmVkIGJ5Ci0rCSAqIGRlZmF1bHRfc3NoX3BvcnQoKSB3aGljaCBub3cgcmV0dXJucyBIUE5T U0hfREVGQVVMVF9QT1JUCi0rCSAqIGlmIHRoYXQgZmFpbHMgd2UgcmVzZXQgdGhlIHBvcnQgdG8g U1NIX0RFRkFVTFRfUE9SVAotKwkgKiAtY2pyIDgvMTcvMjAyMgotKwkgKi8KLSt0cnlhZ2FpbjoK LSAJaWYgKHNzaF9jb25uZWN0KHNzaCwgaG9zdCwgb3B0aW9ucy5ob3N0X2FyZywgYWRkcnMsICZo b3N0YWRkciwKLSAJICAgIG9wdGlvbnMucG9ydCwgb3B0aW9ucy5jb25uZWN0aW9uX2F0dGVtcHRz LAotLQkgICAgJnRpbWVvdXRfbXMsIG9wdGlvbnMudGNwX2tlZXBfYWxpdmUpICE9IDApCi0rCSAg ICAmdGltZW91dF9tcywgb3B0aW9ucy50Y3Bfa2VlcF9hbGl2ZSkgIT0gMCkgewotKwkJLyogY291 bGQgbm90IGNvbm5lY3QuIElmIHRoZSBwb3J0IHJlcXVlc3RlZCBpcyB0aGUgc2FtZSBhcwotKwkJ ICogaHBuc3NoIGRlZmF1bHQgcG9ydCB0aGVuIGZhbGxiYWNrLiBPdGhlcndpc2UsIGV4aXQgKi8K LSsJCWlmICgob3B0aW9ucy5wb3J0ID09IGRlZmF1bHRfc3NoX3BvcnQoKSkgJiYgb3B0aW9ucy5m YWxsYmFjaykgewotKwkJCWludCBwb3J0ID0gb3B0aW9ucy5mYWxsYmFja19wb3J0OwotKwkJCW9w dGlvbnMucG9ydCA9IHBvcnQ7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJIUE5TU0ggc2VydmVyIG5v dCBhdmFpbGFibGUgb24gZGVmYXVsdCBwb3J0ICVkXG4iLAotKwkJCQlkZWZhdWx0X3NzaF9wb3J0 KCkpOwotKwkJCWlmIChwb3J0ID09IDIyKQotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkZhbGxpbmcg YmFjayB0byBPcGVuU1NIIGRlZmF1bHQgcG9ydCAlZFxuIiwKLSsJCQkJCXBvcnQpOwotKwkJCWVs c2UKLSsJCQkJZnByaW50ZihzdGRlcnIsICJGYWxsaW5nIGJhY2sgdG8gdXNlciBkZWZpbmVkIHBv cnQgJWRcbiIsCi0rCQkJCQlwb3J0KTsKLSsJCQlhZGRycyA9IHJlc29sdmVfaG9zdChob3N0LCBw b3J0LCAxLAotKwkJCQkJICAgICBjbmFtZSwgc2l6ZW9mKGNuYW1lKSk7Ci0rCQkJZ290byB0cnlh Z2FpbjsKLSsJCX0gZWxzZSB7Ci0rCQkJZXhpdCgyNTUpOwotKwkJfQotIAkJZXhpdCgyNTUpOwot Kwl9Ci0gCi0gCi0gCXNzaF9wYWNrZXRfc2V0X3RpbWVvdXQoc3NoLCBvcHRpb25zLnNlcnZlcl9h bGl2ZV9pbnRlcnZhbCwKLUBAIC0xOTQ1LDggKzE5NzYsMTAgQEAKLSAKLSAvKiBEbyBmb3JrKCkg YWZ0ZXIgYXV0aGVudGljYXRpb24uIFVzZWQgYnkgInNzaCAtZiIgKi8KLSBzdGF0aWMgdm9pZAot LWZvcmtfcG9zdGF1dGgodm9pZCkKLStmb3JrX3Bvc3RhdXRoKHN0cnVjdCBzc2ggKnNzaCkKLSB7 Ci0rCWludCBmaXBzID0gMDsKLSsKLSAJaWYgKG5lZWRfY29udHJvbHBlcnNpc3RfZGV0YWNoKQot IAkJY29udHJvbF9wZXJzaXN0X2RldGFjaCgpOwotIAlkZWJ1ZygiZm9ya2luZyB0byBiYWNrZ3Jv dW5kIik7Ci1AQCAtMTk1NSwxNyArMTk4OCwyOSBAQAotIAkJZmF0YWwoImRhZW1vbigpIGZhaWxl ZDogJS4yMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAJaWYgKHN0ZGZkX2Rldm51bGwoMSwgMSwg IShsb2dfaXNfb25fc3RkZXJyKCkgJiYgZGVidWdfZmxhZykpID09IC0xKQotIAkJZXJyb3JfZigi c3RkZmRfZGV2bnVsbCBmYWlsZWQiKTsKLSsJLyogd2UgZG8gdGhlIGNpcGhlciBzd2l0Y2ggaGVy ZSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgY2xpZW50Ci0rCSAqIGlzIGZvcmtpbmcgb3IgaGFzIGEg ZGVsYXllZCBmb3JrLgotKwkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRo ZW4gbm8gcGFyYWxsZWwgY2lwaGVycy4KLSsJICovCi0rCWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsK LSsJaWYgKGZpcHMpCi0rCQlkZWJ1ZzJfZigiRklQUyBtb2RlIGlzIGVuYWJsZWQuIFBhcmFsbGVs IGNpcGhlcnMgYXJlIGRpc2FibGVkIik7Ci0rCWVsc2UKLSsJCWRlYnVnMl9mKCJGSVBTIG1vZGUg bm90IGZvdW5kIG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFibGVkIik7Ci0r Ci0rCWlmICgob3B0aW9ucy5kaXNhYmxlX211bHRpdGhyZWFkZWQgPT0gMCkgJiYgKGZpcHMgPT0g MCkpCi0rCQljaXBoZXJfc3dpdGNoKHNzaCk7Ci0gfQotIAotIHN0YXRpYyB2b2lkCi0tZm9yd2Fy ZGluZ19zdWNjZXNzKHZvaWQpCi0rZm9yd2FyZGluZ19zdWNjZXNzKHN0cnVjdCBzc2ggKnNzaCkK LSB7Ci0gCWlmIChmb3J3YXJkX2NvbmZpcm1zX3BlbmRpbmcgPT0gLTEpCi0gCQlyZXR1cm47Ci0g CWlmICgtLWZvcndhcmRfY29uZmlybXNfcGVuZGluZyA9PSAwKSB7Ci0gCQlkZWJ1Z19mKCJhbGwg ZXhwZWN0ZWQgZm9yd2FyZGluZyByZXBsaWVzIHJlY2VpdmVkIik7Ci0gCQlpZiAob3B0aW9ucy5m b3JrX2FmdGVyX2F1dGhlbnRpY2F0aW9uKQotLQkJCWZvcmtfcG9zdGF1dGgoKTsKLSsJCQlmb3Jr X3Bvc3RhdXRoKHNzaCk7Ci0gCX0gZWxzZSB7Ci0gCQlkZWJ1ZzJfZigiJWQgZXhwZWN0ZWQgZm9y d2FyZGluZyByZXBsaWVzIHJlbWFpbmluZyIsCi0gCQkgICAgZm9yd2FyZF9jb25maXJtc19wZW5k aW5nKTsKLUBAIC0yMDMyLDcgKzIwNzcsNyBAQAotIAkJCQkgICAgImZvciBsaXN0ZW4gcG9ydCAl ZCIsIHJmd2QtPmxpc3Rlbl9wb3J0KTsKLSAJCX0KLSAJfQotLQlmb3J3YXJkaW5nX3N1Y2Nlc3Mo KTsKLSsJZm9yd2FyZGluZ19zdWNjZXNzKHNzaCk7Ci0gfQotIAotIHN0YXRpYyB2b2lkCi1AQCAt MjA1OSw3ICsyMTA0LDcgQEAKLSAJfQotIAotIAlkZWJ1Z19mKCJ0dW5uZWwgZm9yd2FyZCBlc3Rh Ymxpc2hlZCwgaWQ9JWQiLCBpZCk7Ci0tCWZvcndhcmRpbmdfc3VjY2VzcygpOwotKwlmb3J3YXJk aW5nX3N1Y2Nlc3Moc3NoKTsKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLUBAIC0yMjUwLDYgKzIyOTUs MTUgQEAKLSAJICAgIE5VTEwsIGZpbGVubyhzdGRpbiksIGNvbW1hbmQsIGVudmlyb24pOwotIH0K LSAKLSsvKiB0aGlzIHVzZWQgdG8gZG8gYSBsb3QgbW9yZSBidXQgbm93IGl0IGp1c3QgY2hlY2tz IHRvIHNlZQotKyAqIGlmIHdlIGFyZSBkaXNhYmxpbmcgaHBuICovCi0rc3RhdGljIHZvaWQKLSto cG5fb3B0aW9uc19pbml0KHN0cnVjdCBzc2ggKnNzaCkKLSt7Ci0rCWNoYW5uZWxfc2V0X2hwbl9k aXNhYmxlZChvcHRpb25zLmhwbl9kaXNhYmxlZCk7Ci0rCWRlYnVnX2YoIkhQTiBkaXNhYmxlZDog JWQiLCBvcHRpb25zLmhwbl9kaXNhYmxlZCk7Ci0rfQotKwotIC8qIG9wZW4gbmV3IGNoYW5uZWwg Zm9yIGEgc2Vzc2lvbiAqLwotIHN0YXRpYyBpbnQKLSBzc2hfc2Vzc2lvbjJfb3BlbihzdHJ1Y3Qg c3NoICpzc2gpCi1AQCAtMjI3MSw2ICsyMzI1LDcgQEAKLSAJd2luZG93ID0gQ0hBTl9TRVNfV0lO RE9XX0RFRkFVTFQ7Ci0gCXBhY2tldG1heCA9IENIQU5fU0VTX1BBQ0tFVF9ERUZBVUxUOwotIAlp ZiAodHR5X2ZsYWcpIHsKLSsJCXdpbmRvdyA9IENIQU5fU0VTX1dJTkRPV19ERUZBVUxUOwotIAkJ d2luZG93ID4+PSAxOwotIAkJcGFja2V0bWF4ID4+PSAxOwotIAl9Ci1AQCAtMjI3OCw2ICsyMzMz LDEzIEBACi0gCSAgICAic2Vzc2lvbiIsIFNTSF9DSEFOTkVMX09QRU5JTkcsIGluLCBvdXQsIGVy ciwKLSAJICAgIHdpbmRvdywgcGFja2V0bWF4LCBDSEFOX0VYVEVOREVEX1dSSVRFLAotIAkgICAg ImNsaWVudC1zZXNzaW9uIiwgQ0hBTk5FTF9OT05CTE9DS19TVERJTyk7Ci0rCi0rCS8qIFRPRE86 IElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGVzZSBvcHRpb25zPyAqLwotKwlpZiAob3B0 aW9ucy50Y3BfcmN2X2J1Zl9wb2xsID4gMCAmJiAhb3B0aW9ucy5ocG5fZGlzYWJsZWQpIHsKLSsJ CWMtPmR5bmFtaWNfd2luZG93ID0gMTsKLSsJCWRlYnVnKCJFbmFibGVkIER5bmFtaWMgV2luZG93 IFNjYWxpbmciKTsKLSsJfQotKwotIAlpZiAodHR5X2ZsYWcpCi0gCQljaGFubmVsX3NldF90dHko c3NoLCBjKTsKLSAJZGVidWczX2YoImNoYW5uZWxfbmV3OiAlZCVzIiwgYy0+c2VsZiwgdHR5X2Zs YWcgPyAiICh0dHkpIiA6ICIiKTsKLUBAIC0yMjk1LDYgKzIzNTcsMTQgQEAKLSB7Ci0gCWludCBy LCBpZCA9IC0xOwotIAljaGFyICpjcCwgKnR1bl9md2RfaWZuYW1lID0gTlVMTDsKLSsJaW50IGZp cHMgPSAwOwotKwotKwkvKgotKwkgKiBXZSBuZWVkIHRvIGluaXRpYWxpemUgdGhpcyBlYXJseSBi ZWNhdXNlIHRoZSBmb3J3YXJkaW5nIGxvZ2ljIGJlbG93Ci0rCSAqIG1pZ2h0IG9wZW4gY2hhbm5l bHMgdGhhdCB1c2UgdGhlIGhwbiBidWZmZXIgc2l6ZXMuICBXZSBjYW4ndCBzZW5kIGEKLSsJICog d2luZG93IG9mIC0xICh0aGUgZGVmYXVsdCkgdG8gdGhlIHNlcnZlciBhcyBpdCBicmVha3MgdGhp bmdzLgotKwkgKi8KLSsJaHBuX29wdGlvbnNfaW5pdChzc2gpOwotIAotIAkvKiBYWFggc2hvdWxk IGJlIHByZS1zZXNzaW9uICovCi0gCWlmICghb3B0aW9ucy5jb250cm9sX3BlcnNpc3QpCi1AQCAt MjM4Niw3ICsyNDU2LDIxIEBACi0gCQkJZGVidWcoImRlZmVycmluZyBwb3N0YXV0aCBmb3JrIHVu dGlsIHJlbW90ZSBmb3J3YXJkICIKLSAJCQkgICAgImNvbmZpcm1hdGlvbiByZWNlaXZlZCIpOwot IAkJfSBlbHNlCi0tCQkJZm9ya19wb3N0YXV0aCgpOwotKwkJCWZvcmtfcG9zdGF1dGgoc3NoKTsK LSsJfSBlbHNlIHsKLSsJCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgc3dpdGNoaW5nIGNpcGhl cnMgdG8KLSsJCSAqIG9uZSBvZiBvdXIgcGFyYWxsZWwgdmVyc2lvbnMuIElmIHRoZSBjbGllbnQg aXMKLSsJCSAqIGZvcmtpbmcgdGhlbiB3ZSBoYW5kbGUgaXQgaW4gZm9ya19wb3N0YXV0aCgpCi0r CQkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxsZWwg Y2lwaGVycy4KLSsJCSAqLwotKwkJZmlwcyA9IGZpcHNfZW5hYmxlZCgpOwotKwkJaWYgKGZpcHMp Ci0rCQkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFy ZSBkaXNhYmxlZCIpOwotKwkJZWxzZQotKwkJCWRlYnVnMl9mKCJGSVBTIG1vZGUgbm90IGZvdW5k IG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFibGVkIik7Ci0rCQlpZiAoKG9w dGlvbnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IDApCi0rCQkgICAgJiYgKGZpcHMgPT0gMCkp Ci0rCQkJY2lwaGVyX3N3aXRjaChzc2gpOwotIAl9Ci0gCi0gCXJldHVybiBjbGllbnRfbG9vcChz c2gsIHR0eV9mbGFnLCB0dHlfZmxhZyA/Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9z c2hfY29uZmlnIG9wZW5zc2gtMTAuM3AxL3NzaF9jb25maWcKLS0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL3NzaF9jb25maWcJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAyMDAKLSsrKyBv cGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnCTIwMjYtMDctMDIgMDI6MTI6NDMuMzczODI5NzEwICsw MjAwCi1AQCAtNDUsNiArNDUsOCBAQAotICMgICBQcm94eUNvbW1hbmQgc3NoIC1xIC1XICVoOiVw IGdhdGV3YXkuZXhhbXBsZS5jb20KLSAjICAgUmVrZXlMaW1pdCAxRyAxaAotICMgICBVc2VyS25v d25Ib3N0c0ZpbGUgfi8uc3NoL2tub3duX2hvc3RzLmQvJWsKLSsjICAgVXNlTVBUQ1Agbm8KLSsj ICAgSGFwcHlFeWVzIG5vCi0gIwotICMgVGhpcyBzeXN0ZW0gaXMgZm9sbG93aW5nIHN5c3RlbS13 aWRlIGNyeXB0byBwb2xpY3kuCi0gIyBUbyBtb2RpZnkgdGhlIGNyeXB0byBwcm9wZXJ0aWVzIChD aXBoZXJzLCBNQUNzLCAuLi4pLCBjcmVhdGUgYSAgKi5jb25mCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4zcDEub3JpZy9zc2hfY29uZmlnLjUgb3BlbnNzaC0xMC4zcDEvc3NoX2NvbmZpZy41Ci0tLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9zc2hfY29uZmlnLjUJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUx OTU0NDYgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnLjUJMjAyNi0wNy0wMiAw MDoyNzoyOS43MzM0MDAzNjcgKzAyMDAKLUBAIC02Miw2ICs2MiwxOSBAQAotIC5QcSBQYSAvZXRj L3NzaC9zc2hfY29uZmlnCi0gLkVsCi0gLlBwCi0rLlhyIGhwbnNzaCAxCi0raXMgZnVsbHkgY29t cGF0aWJsZSB3aXRoIE9wZW5TU0gncyBzc2ggYW5kIHVzZXMgdGhlIHNhbWUgY29uZmlndXJhdGlv biBmb3JtYXQsIGRpcmVjdGl2ZXMsIGFuZCBvcHRpb25zLgotKy5YciBocG5zc2ggMQotK2NhbiB1 c2UgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBmaWxlIGFzCi0rLlhyIHNzaCAxCi0rdGhvdWdoIHRo ZSBpbnZlcnNlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLiBUaGlzIGlzIGJlY2F1c2UKLSsuWHIg aHBuc3NoIDEKLStoYXMgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgd2hpY2ggYXJlIGRpc2N1c3Nl ZCBiZWxvdy4gQXMgc3VjaCB1c2VycyBzaG91bGQgZWl0aGVyIG5vdAotK3VzZQotKy5YciBocG5z c2ggMQotK3NwZWNpZmljIGRpcmVjdGl2ZXMgaW4gdGhlaXIgZGVmYXVsdCBzc2hfY29uZmlnIGZp bGVzIG9yIGVuc3VyZSB0aGF0IHRoZXkgYWx3YXlzIHVzZSBhCi0rY3VzdG9tIGNvbmZpZyBmaWxl LgotKy5QcAotIFVubGVzcyBub3RlZCBvdGhlcndpc2UsIGZvciBlYWNoIHBhcmFtZXRlciwgdGhl IGZpcnN0IG9idGFpbmVkIHZhbHVlCi0gd2lsbCBiZSB1c2VkLgotIFRoZSBjb25maWd1cmF0aW9u IGZpbGVzIGNvbnRhaW4gc2VjdGlvbnMgc2VwYXJhdGVkIGJ5Ci1AQCAtODMzLDYgKzg0Niw5IEBA Ci0gb3IKLSAuQ20gbm8KLSAodGhlIGRlZmF1bHQpLgotKy5JdCBDbSBGYWxsYmFja1BvcnQKLStT cGVjaWZpZXMgdGhlIHBvcnQgaHBuc3NoIHNob3VsZCB0cnkgdG8gY29ubmVjdCB0byBpZiBpdCBm YWlscyBjb25uZWN0aW5nIHRvIHRoZQotK2RlZmF1bHQgaHBuc3NoZCBwb3J0IG9mIDIyMjIuIFRo ZSBkZWZhdWx0IGlzIHBvcnQgMjIuIEhQTi1TU0ggb25seS4KLSAuSXQgQ20gRmluZ2VycHJpbnRI YXNoCi0gU3BlY2lmaWVzIHRoZSBoYXNoIGFsZ29yaXRobSB1c2VkIHdoZW4gZGlzcGxheWluZyBr ZXkgZmluZ2VycHJpbnRzLgotIFZhbGlkIG9wdGlvbnMgYXJlOgotQEAgLTEwNTgsNiArMTA3NCwy MyBAQAotIHdpbGwgbm90IGJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5LAotIGJ1dCBtYXkgYmUg bWFudWFsbHkgaGFzaGVkIHVzaW5nCi0gLlhyIHNzaC1rZXlnZW4gMSAuCi0rLkl0IENtIEhhcHB5 RXllcwotK0lmIHNldCB0bwotKy5DbSB5ZXMKLSt0aGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0 aGUgY2xpZW50IHNob3VsZCB1c2UgdGhlIEhhcHB5IEV5ZWJhbGxzIGNvbm5lY3Rpb24KLSttZXRo b2QgYXMgZGVzY3JpYmVkIGJ5IFJGQyA4MzA1LiBXaGVuIGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0 byBhCi0rdGFyZ2V0IHRoYXQgc3VwcG9ydHMgSVB2NCBhbmQgSVB2NiB0aGUgY2xpZW50IHdpbGwg dHJ5IHRvIGNvbm5lY3QKLStvbiBJUHY2IGZpcnN0LCBkZWxheSBhIHNldCB0aW1lICgyNTBtcyBk ZWZhdWx0KSwgYW5kIHRoZW4gdHJ5IElQdjQuCi0rVGhlIGNsaWVudCB3aWxsIHVzZSB3aGljaCBl dmVyIHNvY2tldCBpcyByZXR1cm5lZCBmaXJzdC4gTm90ZToKLStUaGlzIHByb2Nlc3MgbWF5LCBy YXJlbHksIHByb2R1Y2UgZmFsc2UgcG9zaXRpdmVzIGluIHNvbWUgbW9uaXRvcmluZyB0b29scwot K2R1ZSB0byBtdWx0aXBsZSBjb25uZWN0aW9uIGF0dGVtcHRzIHByaW9yIHRvIGF1dGhlbnRpY2F0 aW9uLgotK1RoZSBkZWZhdWx0IGlzCi0rLkNtIG5vCi0rLkl0IENtIEhhcHB5RGVsYXkKLStUaGlz IG9wdGlvbnMgc3BlY2lmaWVzIGhvdyBsb25nIHRoZSBIYXBweUV5ZXMgY29ubmVjdGlvbiBtZXRo b2Qgc2hvdWxkCi0rd2FpdCBiZWZvcmUgdHJ5aW5nIElQdjQgYWZ0ZXIgdGhlIGluaXRpYWwgSVB2 NiBjb25uZWN0aW9uLiBUaGlzIHZhbHVlIGlzCi0rYSBwb3NpdGl2ZSBpbnRlZ2VyIG9mIG1pbGxp c2Vjb25kcyB3aXRoIGEgZGVmYXVsdCBvZgotKy5DbSAyNTBtcy4KLSAuSXQgQ20gSG9zdGJhc2Vk QWNjZXB0ZWRBbGdvcml0aG1zCi0gVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBi eQotIC5YciBjcnlwdG8tcG9saWNpZXMgNyAuCi1AQCAtMTE2MSw2ICsxMTk0LDExIEBACi0gLkNt IEhvc3RuYW1lCi0gc3BlY2lmaWNhdGlvbnMpLgotIFRoZSBkZWZhdWx0IGlzIHRoZSBuYW1lIGdp dmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0rLkl0IENtIEhQTkRpc2FibGVkCi0rSW4gc29tZSBz aXR1YXRpb25zLCBzdWNoIGFzIHRyYW5zZmVycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywgdGhl IGltcGFjdAotK29mIHRoZSBIUE4gY29kZSBwcm9kdWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBwZXJm b3JtYW5jZS4gSW4gdGhlc2UgY2FzZXMgaXQgaXMKLStoZWxwZnVsIHRvIGRpc2FibGUgdGhlIEhQ TiBmdW5jdGlvbmFsaXR5LiBCeSBkZWZhdWx0IEhQTkRpc2FibGVkIGlzIHNldCB0bwotKy5DbSBu by4gSFBOU1NIIG9ubHkuCi0gLkl0IENtIElkZW50aXRpZXNPbmx5Ci0gU3BlY2lmaWVzIHRoYXQK LSAuWHIgc3NoIDEKLUBAIC0xMzYwLDYgKzEzOTgsMTIgQEAKLSAuQ20gbm9uZQotICh0aGUgb3Bl cmF0aW5nIHN5c3RlbSBkZWZhdWx0KQotIGZvciBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMuCi0r SWYgdXNpbmcgdGhlCi0rLkNtIEhhcHB5RXllcwotK29wdGlvbiB0aGVzZSBkZWZhdWx0IHRvCi0r LkNtIGxvd2xhdGVuY3kgYW5kCi0rLm0gdGhyb3VnaHB1dCAsCi0rcmVzcGVjdGl2ZWx5LgotIC5J dCBDbSBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uCi0gU3BlY2lmaWVzIHdoZXRoZXIgdG8g dXNlIGtleWJvYXJkLWludGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9uLgotIFRoZSBhcmd1bWVudCB0 byB0aGlzIGtleXdvcmQgbXVzdCBiZQotQEAgLTE1NDgsNiArMTU5Miw2MyBAQAotIC5QcAotIFRo ZSBsaXN0IG9mIGF2YWlsYWJsZSBNQUMgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1 c2luZwotIC5RcSBzc2ggLVEgbWFjIC4KLSsuSXQgQ20gTWV0cmljcwotK0luZGljYXRlIHRoYXQg dGhlIHNzaCBjbGllbnQgc2hvdWxkIGdhdGhlciBhbmQgd3JpdGUgVENQIHN0YWNrIG1ldHJpY3Mg ZnJvbSB0aGUKLStUQ1BfSU5GTyBzb2NrZXQgc3RydWN0dXJlIG9uIGNvbXBsaWFudCBvcGVyYXRp bmcgc3lzdGVtcyB0byBhIHRleHQgZmlsZS4KLStUaGVzZSBtZXRyaWNzIHdpbGwgYmUgY29sbGVj dGVkIGZyb20gYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBob3N0cyBpZiBtZXRyaWNzCi0rYXJl IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiBTU0ggYW5kIFRDUF9JTkZPIGlzIHN1cHBvcnRl ZCBieSB0aGUKLStvcGVyYXRpbmcgc3lzdGVtLiBDdXJyZW50bHkgb3BlcmF0aW5nIHN5c3RlbSBz dXBwb3J0IGlzIGxpbWl0ZWQgdG8gTGludXgKLSt2ZXJzaW9uIDMuNyBhbmQgZ3JlYXRlciwgTmV0 QlNELCBhbmQgRnJlZUJTRCAodmVyc2lvbiA2IG9yIGdyZWF0ZXIpLgotKwotK0lmIG9uZSBvZiB0 aGUgaG9zdHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgTWV0cmljcyBvcHRpb24gdGhlbiBvbmx5IGRh dGEKLStmcm9tIHRoZSB0aGUgaG9zdCB0aGF0IGRvZXMgd2lsbCBiZSByZXBvcnRlZC4gU2VlIHRo ZSBIUE4tUkVBRE1FIGZpbGUKLStmb3IgbW9yZSBkZXRhaWwuCi0rCi0rVGhlIGFyZ3VtZW50IHRv IHRoZSBrZXl3b3JkIG11c3QgYmUKLSsuQ20geWVzCi0rb3IKLSsuQ20gbm8KLSsodGhlIGRlZmF1 bHQpLgotKwotK1NlZQotKy5DbSBNZXRyaWNzSW50ZXJ2YWwKLSthbmQKLSsuQ20gTWV0cmljc1Bh dGgKLStmb3IgbW9yZSBtZXRyaWNzIG9wdGlvbnMuCi0rLkNtIEhQTlNTSCBvbmx5LgotKy5JdCBD bSBNZXRyaWNzSW50ZXJ2YWwKLStUaGUgZnJlcXVlbmN5LCBpbiBzZWNvbmRzLCB3aXRoIHdoaWNo IHRoZSBUQ1BfSU5GTyBzdHJ1Y3Qgd2lsbCBiZSBwb2xsZWQuIFRoZQotK2RlZmF1bHQgdmFsdWUg aXMgNSBzZWNvbmRzLgotKwotKy5DbSBNZXRyaWNzCi0rbXVzdCBiZSBzZXQgdG8KLSsuQ20geWVz Ci0rZm90IHRoaXMgb3B0aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4KLSsuQ20gSFBOU1NIIG9ubHku Ci0rLkl0IENtIE1ldHJpY3NQYXRoCi0rVGhlIGZpbGUgcGF0aCB3aGVyZQotKy5DbSBNZXRyaWNz Ci0rc2hvdWxkIHdyaXRlIHRoZSBUQ1Agc3RhY2sgbWV0cmljcy4KLSsKLStUaGUgZGVmYXVsdCBp cwotKy5TbSBvZmYKLSsuQXIgLi9zc2hfc3RhY2tfbWV0cmljcy5sb2NhbAotKyBhbmQKLSsuQXIg Li9zc2hfc3RhY2tfbWV0cmljcy5yZW1vdGUKLSsuU20gb24KLSsKLStUaGUgdXNlciBtYXkgc3Bl Y2lmeSBhbnkgb3RoZXIgZmlsZXBhdGggYW5kIGZpbGVuYW1lIHRoYXQgdGhleSBoYXZlIHdyaXRl Ci0rYWNjZXNzIHRvLiBFLmcuIE1ldHJpY3NQYXRoPS90bXAvbXlfbWV0cmljcy4gVGhlIHN1ZmZp eCBvZiAubG9jYWwKLSthbmQgLnJlbW90ZSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgcGF0aC4g RmlsZXMgYXJlCi0rLkNtIG5vdAotK292ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgbWV0cmljcyBz ZXNzaW9ucy4gSW5zdGVhZCwgZGF0YSBmcm9tIG5ldyBzZXNzaW9ucwotK3dpbGwgYmUgYXBwZW5k ZWQgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuCi0rCi0rLkNtIE1ldHJpY3MKLSttdXN0IGJl IHNldCB0bwotKy5DbSB5ZXMKLStmb3QgdGhpcyBvcHRpb24gdG8gaGF2ZSBhbnkgZWZmZWN0Lgot Ky5DbSBIUE5TU0ggb25seS4KLSAuSXQgQ20gTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JMb2NhbGhv c3QKLSBEaXNhYmxlIGhvc3QgYXV0aGVudGljYXRpb24gZm9yIGxvY2FsaG9zdCAobG9vcGJhY2sg YWRkcmVzc2VzKS4KLSBUaGUgYXJndW1lbnQgdG8gdGhpcyBrZXl3b3JkIG11c3QgYmUKLUBAIC0x NTU1LDYgKzE2NTYsMzYgQEAKLSBvcgotIC5DbSBubwotICh0aGUgZGVmYXVsdCkuCi0rLkl0IENt IE5vbmVFbmFibGVkCi0rRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBjaXBo ZXIuIENhcmUgbXVzdCBhbHdheXMgYmUgdXNlZAotK3doZW4gZW5hYmxpbmcgdGhpcyBhcyBpdCB3 aWxsIGFsbG93IHVzZXJzIHRvIHNlbmQgZGF0YSBpbiB0aGUgY2xlYXIuIEhvd2V2ZXIsCi0raXQg aXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiByZW1h aW5zIGVuY3J5cHRlZAotK2V2ZW4gaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gRGVmYXVsdCBp cwotKy5DbSBuby4gSFBOU1NIIG9ubHkuCi0rLkl0IENtIE5vbmVNYWNFbmFibGVkCi0rRW5hYmxl IG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBNQUMuIFdoZW4gdGhpcyBpcyBlbmFibGVk IHNzaAotK3dpbGwgKm5vdCogcHJvdmlkZSBkYXRhIGludGVncml0eSBvZiBhbnkgZGF0YSBiZWlu ZyB0cmFuc21pdHRlZCBiZXR3ZWVuIGhvc3RzLiBVc2UKLSt3aXRoIGNhdXRpb24gYXMgaXQsIHVu bGlrZSBqdXN0IHVzaW5nIE5vbmVFbmFibGVkLCBkb2Vzbid0IHByb3ZpZGUgZGF0YSBpbnRlZ3Jp dHkgYW5kCi0rcHJvdGVjdGlvbiBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIEFz IHdpdGggTm9uZUVuYWJsZWQgYWxsIGF1dGhlbnRpY2F0aW9uCi0rcmVtYWlucyBlbmNyeXB0ZWQg YW5kIGludGVncml0eSBpcyBlbnN1cmVkLiBEZWZhdWx0IGlzCi0rLkNtIG5vLiBIUE5TU0ggb25s eS4KLSsuSXQgQ20gTm9uZVN3aXRjaAotK1N3aXRjaCB0aGUgZW5jcnlwdGlvbiBjaXBoZXIgYmVp bmcgdXNlZCB0byB0aGUgTm9uZSBjaXBoZXIgYWZ0ZXIKLSthdXRoZW50aWNhdGlvbiB0YWtlcyBw bGFjZS4gTm9uZUVuYWJsZWQgbXVzdCBiZSBlbmFibGVkIG9uIGJvdGggdGhlIGNsaWVudAotK2Fu ZCBzZXJ2ZXIgc2lkZSBvZiB0aGUgY29ubmVjdGlvbi4gV2hlbiB0aGUgY29ubmVjdGlvbiBzd2l0 Y2hlcyB0byB0aGUgTk9ORQotK2NpcGhlciBhIHdhcm5pbmcgaXMgc2VudCB0byBTVERFUlIuIFRo ZSBjb25uZWN0aW9uIGF0dGVtcHQgd2lsbCBmYWlsIHdpdGggYW4KLStlcnJvciBpZiBhIGNsaWVu dCByZXF1ZXN0cyBhIE5vbmVTd2l0Y2ggZnJvbSB0aGUgc2VydmVyIHRoYXQgZG9lcyBub3QgZXhw bGljaXRseQotK2hhdmUgTm9uZUVuYWJsZWQgc2V0IHRvIHllcy4gTm90ZTogVGhlIE5PTkUgY2lw aGVyIGNhbm5vdCBiZSB1c2VkIGluCi0raW50ZXJhY3RpdmUgKHNoZWxsKSBzZXNzaW9ucyBhbmQg aXQgd2lsbCBmYWlsIHNpbGVudGx5LiBTZXQgdG8KLSsuQ20gbm8KLStieSBkZWZhdWx0LgotKy5D bSBIUE5TU0ggb25seS4KLSsuUHAKLSsuQ20gTm90ZToKLSt0aGlzIG9wdGlvbnMgY2Fubm90IGFj dHVhbHkgYmUgc2V0IGluIHRoZSBzc2hfY29uZmlnIGZpbGUuIEl0IG11c3QgYmUKLStzZXQgb24g dGhlIGNvbW1hbmQgbGluZSB1c2UgLW9Ob25lRW5hYmxlZC4gVGhpcyBpcyB0byBwcmV2ZW50IGl0 IGZyb20gYmVpbmcKLSt1c2VkIGFjY2lkZW50YWxseS4gSXQgaXMgaW5jbHVkZWQgaGVyZSBmb3Ig Y29tcGxldGVuZXNzIGFzIG5laXRoZXIgTm9uZU1hY0VuYWJsZWQKLStvciBOb25lQ2lwaGVyRW5h YmxlZCBoYXZlIGFueSBlZmZlY3Qgd2l0aG91dCB0aGlzIG9wdGlvbi4KLSAuSXQgQ20gTnVtYmVy T2ZQYXNzd29yZFByb21wdHMKLSBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwYXNzd29yZCBwcm9t cHRzIGJlZm9yZSBnaXZpbmcgdXAuCi0gVGhlIGFyZ3VtZW50IHRvIHRoaXMga2V5d29yZCBtdXN0 IGJlIGFuIGludGVnZXIuCi1AQCAtMjEzNCw2ICsyMjY1LDEyIEBACi0gU3BlY2lmeSBhIGNvbmZp Z3VyYXRpb24gdGFnIG5hbWUgdGhhdCBtYXkgYmUgbGF0ZXIgdXNlZCBieSBhCi0gLkNtIE1hdGNo Ci0gZGlyZWN0aXZlIHRvIHNlbGVjdCBhIGJsb2NrIG9mIGNvbmZpZ3VyYXRpb24uCi0rLkl0IENt IFRjcFJjdkJ1ZlBvbGwKLStFbmFibGUgb2YgZGlzYWJsZSB0aGUgcG9sbGluZyBvZiB0aGUgdGNw IHJlY2VpdmUgYnVmZmVyIHRocm91Z2ggdGhlIGxpZmUKLStvZiB0aGUgY29ubmVjdGlvbi4gWW91 IHdvdWxkIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZAotK2Zv ciBzeXN0ZW1zIG1ha2luZyB1c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQr LCAyLjYsIE1TIFZpc3RhKS4KLStEZWZhdWx0IGlzCi0rLkNtIHllcy4gSFBOU1NIIG9ubHkuCi0g Lkl0IENtIFR1bm5lbAotIFJlcXVlc3QKLSAuWHIgdHVuIDQKLUBAIC0yMjE5LDYgKzIzNTYsMTIg QEAKLSBmcm9tIE9wZW5TU0ggNi44IGFuZCBncmVhdGVyIHN1cHBvcnQgdGhlCi0gLlFxIGhvc3Rr ZXlzQG9wZW5zc2guY29tCi0gcHJvdG9jb2wgZXh0ZW5zaW9uIHVzZWQgdG8gaW5mb3JtIHRoZSBj bGllbnQgb2YgYWxsIHRoZSBzZXJ2ZXIncyBob3N0a2V5cy4KLSsuSXQgQ20gVXNlTVBUQ1AKLStJ ZiBzZXQgdG8KLSsuQ20geWVzICwKLSt0aGlzIHdpbGwgZW5hYmxlIE11bHRpcGF0aCBUQ1AgKE1Q VENQKSBpbnN0ZWFkIG9mIFRDUCAodGhpcyBvbmx5IHdvcmtzIG9uIExpbnV4KS4KLStUaGUgZGVm YXVsdCBpcwotKy5DbSBubyAuCi0gLkl0IENtIFVzZXIKLSBTcGVjaWZpZXMgdGhlIHVzZXIgdG8g bG9nIGluIGFzLgotIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGEgZGlmZmVyZW50IHVzZXIgbmFt ZSBpcyB1c2VkIG9uIGRpZmZlcmVudCBtYWNoaW5lcy4KLUBAIC0yNTI4LDMgKzI2NzEsMTEgQEAK LSBjcmVhdGVkIE9wZW5TU0guCi0gLkFuIE1hcmt1cyBGcmllZGwKLSBjb250cmlidXRlZCB0aGUg c3VwcG9ydCBmb3IgU1NIIHByb3RvY29sIHZlcnNpb25zIDEuNSBhbmQgMi4wLgotKy5BbiBDaHJp cyBSYXBpZXIsCi0rLkFuIE1pY2hhZWwgU3RldmVucywKLSsuQW4gQmVuIEJlbm5ldCwKLSthbmQK LSsuQW4gTWlrZSBUYXNvdGEKLStkZXZlbG9wZWQgdGhlIEhQTiBleHRlbnNpb25zIGF0IHRoZSBQ aXR0c2J1cmdoIFN1cGVyY29tdXRpbmcgQ2VudGVyCi0rd2l0aCBncmFudHMgZnJvbSBDaXNjbywg dGhlIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUsIGFuZAotK3RoZSBOYXRpb25hbCBTY2ll bmNlIEZvdW5kYXRpb24uCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25uZWN0 Mi5jIG9wZW5zc2gtMTAuM3AxL3NzaGNvbm5lY3QyLmMKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmln L3NzaGNvbm5lY3QyLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAyMDAKLSsrKyBv cGVuc3NoLTEwLjNwMS9zc2hjb25uZWN0Mi5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzMzNjQ5MDgx ICswMjAwCi1AQCAtNzQsNiArNzQsNyBAQAotICNpbmNsdWRlICJ1dGY4LmgiCi0gI2luY2x1ZGUg InNzaC1zay5oIgotICNpbmNsdWRlICJzay1hcGkuaCIKLSsjaW5jbHVkZSAiY2lwaGVyLXN3aXRj aC5oIgotIAotICNpZmRlZiBHU1NBUEkKLSAjaW5jbHVkZSAic3NoLWdzcy5oIgotQEAgLTgzLDYg Kzg0LDEzIEBACi0gZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKLSAKLSAvKgotKyAqIHR0eV9mbGFn IGlzIHNldCBpbiBzc2guYy4gVXNlIHRoaXMgaW4gc3NoX3VzZXJhdXRoMjoKLSsgKiBpZiBpdCBp cyBzZXQsIHRoZW4gcHJldmVudCB0aGUgc3dpdGNoIHRvIHRoZSBudWxsIGNpcGhlci4KLSsgKi8K LSsKLStleHRlcm4gaW50IHR0eV9mbGFnOwotKwotKy8qCi0gICogU1NIMiBrZXkgZXhjaGFuZ2UK LSAgKi8KLSAKLUBAIC01NzksNiArNTg3LDQyIEBACi0gCi0gCWlmICghYXV0aGN0eHQuc3VjY2Vz cykKLSAJCWZhdGFsKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIik7Ci0rCi0rCS8qCi0rCSAqIElm IHRoZSB1c2VyIHdhbnRzIHRvIHVzZSB0aGUgbm9uZSBjaXBoZXIgYW5kL29yIG5vbmUgbWFjLCBk byBpdCBwb3N0IGF1dGhlbnRpY2F0aW9uCi0rCSAqIGFuZCBvbmx5IGlmIHRoZSByaWdodCBjb25k aXRpb25zIGFyZSBtZXQgLS0gYm90aCBvZiB0aGUgTk9ORSBjb21tYW5kcwotKwkgKiBtdXN0IGJl IHRydWUgYW5kIHRoZXJlIG11c3QgYmUgbm8gdHR5IGFsbG9jYXRlZC4KLSsJICovCi0rCWlmIChv cHRpb25zLm5vbmVfc3dpdGNoID09IDEgJiYgb3B0aW9ucy5ub25lX2VuYWJsZWQgPT0gMSkgewot KwkJY2hhciAqbXlwcm9wb3NhbFtQUk9QT1NBTF9NQVhdOwotKwkJY2hhciAqcyA9IE5VTEw7Ci0r CQljb25zdCBjaGFyICpub25lX2NpcGhlciA9ICJub25lIjsKLSsJCWlmICghdHR5X2ZsYWcpIHsg Lyogbm8gbnVsbCBvbiB0dHkgc2Vzc2lvbnMgKi8KLSsJCQlkZWJ1ZygiUmVxdWVzdGluZyBub25l IHJla2V5aW5nLi4uIik7Ci0rCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3NoLCBt eXByb3Bvc2FsLCBzLCBub25lX2NpcGhlciwKLSsJCQkJCQkgICAgICBvcHRpb25zLm1hY3MsCi0r CQkJCQkJICAgICAgY29tcHJlc3Npb25fYWxnX2xpc3Qob3B0aW9ucy5jb21wcmVzc2lvbiksCi0r CQkJCQkJICAgICAgb3B0aW9ucy5ob3N0a2V5YWxnb3JpdGhtcyk7Ci0rCQkJZnByaW50ZihzdGRl cnIsICJXQVJOSU5HOiBFTkFCTEVEIE5PTkUgQ0lQSEVSISEhXG4iKTsKLSsKLSsJCQkvKiBOT05F TUFDIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29udGV4dCBvZiB0aGUgTk9ORSBDSVBIRVIgKi8KLSsJ CQlpZiAob3B0aW9ucy5ub25lbWFjX2VuYWJsZWQgPT0gMSkgewotKwkJCQljb25zdCBjaGFyICpu b25lX21hYyA9ICJub25lIjsKLSsJCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3No LCBteXByb3Bvc2FsLCBzLCBub25lX2NpcGhlciwKLSsJCQkJCQkJICAgICAgbm9uZV9tYWMsCi0r CQkJCQkJCSAgICAgIGNvbXByZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29tcHJlc3Npb24pLAot KwkJCQkJCQkgICAgICBvcHRpb25zLmhvc3RrZXlhbGdvcml0aG1zKTsKLSsJCQkJZnByaW50Zihz dGRlcnIsICJXQVJOSU5HOiBFTkFCTEVEIE5PTkUgTUFDXG4iKTsKLSsJCQl9Ci0rCQkJa2V4X3By b3AyYnVmKHNzaC0+a2V4LT5teSwgbXlwcm9wb3NhbCk7Ci0rCQkJcGFja2V0X3JlcXVlc3RfcmVr ZXlpbmcoKTsKLSsJCX0gZWxzZSB7Ci0rCQkJLyogcmVxdWVzdGVkIE5PTkUgY2lwaGVyIHdoZW4g aW4gYSB0dHkgKi8KLSsJCQlkZWJ1ZygiQ2Fubm90IHN3aXRjaCB0byBOT05FIGNpcGhlciB3aXRo IHR0eSBhbGxvY2F0ZWQiKTsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIk5PTkUgY2lwaGVyIHN3aXRj aCBkaXNhYmxlZCB3aGVuIGEgVFRZIGlzIGFsbG9jYXRlZFxuIik7Ci0rCQl9Ci0rCX0KLSsKLSAJ aWYgKHNzaF9wYWNrZXRfY29ubmVjdGlvbl9pc19vbl9zb2NrZXQoc3NoKSkgewotIAkJdmVyYm9z ZSgiQXV0aGVudGljYXRlZCB0byAlcyAoWyVzXTolZCkgdXNpbmcgXCIlc1wiLiIsIGhvc3QsCi0g CQkgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksCi1kaWZm IC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25uZWN0LmMgb3BlbnNzaC0xMC4zcDEvc3No Y29ubmVjdC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25uZWN0LmMJMjAyNi0wNy0w MiAwMDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hjb25uZWN0 LmMJMjAyNi0wNy0wMiAxMDoyNTo0Ni41NDk3OTg5NTkgKzAyMDAKLUBAIC01NSw2ICs1NSw3IEBA Ci0gI2luY2x1ZGUgInNzaGVyci5oIgotICNpbmNsdWRlICJhdXRoZmQuaCIKLSAjaW5jbHVkZSAi a2V4LmgiCi0rI2luY2x1ZGUgImhhcHB5ZXllYmFsbHMuaCIKLSAKLSBzdHJ1Y3Qgc3Noa2V5ICpw cmV2aW91c19ob3N0X2tleSA9IE5VTEw7Ci0gCi1AQCAtNjYsNiArNjcsNyBAQAotIGV4dGVybiBp bnQgZGVidWdfZmxhZzsKLSBleHRlcm4gT3B0aW9ucyBvcHRpb25zOwotIGV4dGVybiBjaGFyICpf X3Byb2duYW1lOwotK2V4dGVybiBjaGFyIGdsb2JhbF9udG9wW05JX01BWEhPU1RdOwotIAotIHN0 YXRpYyBpbnQgc2hvd19vdGhlcl9rZXlzKHN0cnVjdCBob3N0a2V5cyAqLCBzdHJ1Y3Qgc3Noa2V5 ICopOwotIHN0YXRpYyB2b2lkIHdhcm5fY2hhbmdlZF9rZXkoc3RydWN0IHNzaGtleSAqKTsKLUBA IC0zMzMsNyArMzM1LDcgQEAKLSAvKgotICAqIENyZWF0ZXMgYSBzb2NrZXQgZm9yIHVzZSBhcyB0 aGUgc3NoIGNvbm5lY3Rpb24uCi0gICovCi0tc3RhdGljIGludAotK2ludAotIHNzaF9jcmVhdGVf c29ja2V0KHN0cnVjdCBhZGRyaW5mbyAqYWkpCi0gewotIAlpbnQgc29jaywgcjsKLUBAIC0zNDUs OSArMzQ3LDE2IEBACi0gI2VuZGlmCi0gCWNoYXIgbnRvcFtOSV9NQVhIT1NUXTsKLSAKLS0Jc29j ayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsIGFpLT5haV9wcm90b2Nv bCk7Ci0rCS8qIHVzZXIgcmVxdWVzdCBmb3IgTXVsdGlwYXRoIFRDUCAqLwotKwlpZiAob3B0aW9u cy51c2VfbXB0Y3ApCi0rCQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2Nr dHlwZSwgSVBQUk9UT19NUFRDUCk7Ci0rCWVsc2UKLSsJCXNvY2sgPSBzb2NrZXQoYWktPmFpX2Zh bWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOwotKwotIAlpZiAoc29jayA9 PSAtMSkgewotIAkJZXJyb3IoInNvY2tldDogJXMiLCBzdHJlcnJvcihlcnJubykpOwotKwkJaWYg KG9wdGlvbnMudXNlX21wdGNwKQotKwkJCWVycm9yICgiWW91IGFza2VkIHRvIHVzZSBNUFRDUC4g UGxlYXNlIGVuc3VyZSBpdCBpcyBlbmFibGVkLiIpOwotIAkJcmV0dXJuIC0xOwotIAl9Ci0gCSh2 b2lkKWZjbnRsKHNvY2ssIEZfU0VURkQsIEZEX0NMT0VYRUMpOwotQEAgLTQ1MCw2ICs0NTksMTUg QEAKLSAJCQlzbGVlcCgxKTsKLSAJCQlkZWJ1ZygiVHJ5aW5nIGFnYWluLi4uIik7Ci0gCQl9Ci0r CQlpZiAob3B0aW9ucy51c2VfaGFwcHlleWVzID09IDEpIHsKLSsJCQlkZWJ1Z19mICgiQXR0ZW1w dGluZyBSRkMgODMwNSAvIEhhcHB5IEV5ZWJhbGxzIGNvbm5lY3Rpb24uIik7Ci0rCQkJc29jayA9 IGhhcHB5X2V5ZWJhbGxzKGhvc3QsIGFpdG9wLAotKwkJCSAgICBob3N0YWRkciwgdGltZW91dF9t cyk7Ci0rCQkJaWYgKHNvY2sgIT0gLTEpIHsKLSsJCQkJZGVidWdfZiAoIlJGQyA4MzA1IC8gSGFw cHkgRXllYmFsbHMgY29ubmVjdGlvbiBzdWNjZXNzZnVsLiIpOwotKwkJCQlicmVhazsJLyogU3Vj Y2Vzc2Z1bCBjb25uZWN0aW9uLiAqLwotKyAJCQl9Ci0rCQl9IGVsc2UgewotIAkJLyoKLSAJCSAq IExvb3AgdGhyb3VnaCBhZGRyZXNzZXMgZm9yIHRoaXMgaG9zdCwgYW5kIHRyeSBlYWNoIG9uZSBp bgotIAkJICogc2VxdWVuY2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gc3VjY2VlZHMuCi1AQCAtNTA0 LDYgKzUyMiw3IEBACi0gCQl9Ci0gCQlpZiAoc29jayAhPSAtMSkKLSAJCQlicmVhazsJLyogU3Vj Y2Vzc2Z1bCBjb25uZWN0aW9uLiAqLwotKwkJfQotIAl9Ci0gCi0gCS8qIFJldHVybiBmYWlsdXJl IGlmIHdlIGRpZG4ndCBnZXQgYSBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICovCi1AQCAtMTYxNSw2 ICsxNjM0LDkgQEAKLSAJLyoga2V5IGV4Y2hhbmdlICovCi0gCS8qIGF1dGhlbnRpY2F0ZSB1c2Vy ICovCi0gCWRlYnVnKCJBdXRoZW50aWNhdGluZyB0byAlczolZCBhcyAnJXMnIiwgaG9zdCwgcG9y dCwgc2VydmVyX3VzZXIpOwotKwkvKiBpZiB1c2luZyBSRkMgODMwNSBjbGVhcmx5IHN0YXRlIHdo aWNoIGFkZHJlc3Mgd2UgYXJlIGNvbm5lY3RlZCB0byAqLwotKwlpZiAob3B0aW9ucy51c2VfaGFw cHlleWVzID09IDEpCi0rCQlkZWJ1ZygiUkZDIDgzMDUgYXV0aGVudGljYXRpbmcgdG8gJS4yMDBz IiwgZ2xvYmFsX250b3ApOwotIAlzc2hfa2V4Mihzc2gsIGhvc3QsIGhvc3RhZGRyLCBwb3J0LCBj aW5mbyk7Ci0gCWlmICghb3B0aW9ucy5rZXhfYWxnb3JpdGhtc19zZXQgJiYgc3NoLT5rZXggIT0g TlVMTCAmJgotIAkgICAgc3NoLT5rZXgtPm5hbWUgIT0gTlVMTCAmJiBvcHRpb25zLndhcm5fd2Vh a19jcnlwdG8gJiYKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGQtYXV0aC5jIG9w ZW5zc2gtMTAuM3AxL3NzaGQtYXV0aC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLWF1 dGguYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAotKysrIG9wZW5zc2gtMTAu M3AxL3NzaGQtYXV0aC5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzM0MTEzMDgwICswMjAwCi1AQCAt Nzk4LDYgKzc5OCwyNSBAQAotIAlzdHJ1Y3Qga2V4ICprZXg7Ci0gCWludCByOwotIAotKwkvKiB0 aGlzIHVzZWQgdG8gYmUgaW4gc3NoZC5jIHdoZW4gd2UgcmVhZCB0aGUgY29uZmlndXJhdGlvbiBm aWxlCi0rCSAqIGJ1dCBuZWVkZWQgdG8gYmUgbW92ZWQgaGVyZSBhcyBkb19zc2gyX2tleCBpbiBz c2hkLWF1dGggd2Fzbid0Ci0rCSAqIHBpY2tpbmcgdXAgdGhlIG5vbmUgb3B0aW9ucy4gQ0pSIDQv MTAvMjAyNQotKwkgKi8KLSsJaWYgKG9wdGlvbnMubm9uZV9lbmFibGVkID09IDEpIHsKLSsJCWRl YnVnKCJXQVJOSU5HOiBOb25lIGNpcGhlciBlbmFibGVkIik7Ci0rCQljaGFyICpvbGRfY2lwaGVy cyA9IG9wdGlvbnMuY2lwaGVyczsKLSsJCXhhc3ByaW50Zigmb3B0aW9ucy5jaXBoZXJzLCAiJXMs bm9uZSIsIG9sZF9jaXBoZXJzKTsKLSsJCWZyZWUob2xkX2NpcGhlcnMpOwotKwotKwkJLyogb25s eSBlbmFibGUgdGhlIG5vbmUgTUFDIGluIGNvbnRleHQgb2YgdGhlIG5vbmUgY2lwaGVyIC1janIg Ki8KLSsJCWlmIChvcHRpb25zLm5vbmVtYWNfZW5hYmxlZCA9PSAxKSB7Ci0rCQkJZGVidWcoIldB Uk5JTkc6IE5vbmUgTUFDIGVuYWJsZWQiKTsKLSsJCQljaGFyICpvbGRfbWFjcyA9IG9wdGlvbnMu bWFjczsKLSsJCQl4YXNwcmludGYoJm9wdGlvbnMubWFjcywgIiVzLG5vbmUiLCBvbGRfbWFjcyk7 Ci0rCQkJZnJlZShvbGRfbWFjcyk7Ci0rCQl9Ci0rCX0KLSsKLSAJaWYgKG9wdGlvbnMucmVrZXlf bGltaXQgfHwgb3B0aW9ucy5yZWtleV9pbnRlcnZhbCkKLSAJCXNzaF9wYWNrZXRfc2V0X3Jla2V5 X2xpbWl0cyhzc2gsIG9wdGlvbnMucmVrZXlfbGltaXQsCi0gCQkgICAgb3B0aW9ucy5yZWtleV9p bnRlcnZhbCk7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLmMgb3BlbnNzaC0x MC4zcDEvc3NoZC5jCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLmMJMjAyNi0wNy0wMiAw MDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hkLmMJMjAyNi0w Ny0wMiAwMDoyNzoyOS43MzQyOTg2MjEgKzAyMDAKLUBAIC04MjYsNiArODI2LDggQEAKLSAJaW50 IHJldCwgbGlzdGVuX3NvY2s7Ci0gCXN0cnVjdCBhZGRyaW5mbyAqYWk7Ci0gCWNoYXIgbnRvcFtO SV9NQVhIT1NUXSwgc3RycG9ydFtOSV9NQVhTRVJWXTsKLSsJaW50IHNvY2tzaXplOwotKwlpbnQg c29ja3NpemVsZW4gPSBzaXplb2YoaW50KTsKLSAKLSAJZm9yIChhaSA9IGxhLT5hZGRyczsgYWk7 IGFpID0gYWktPmFpX25leHQpIHsKLSAJCWlmIChhaS0+YWlfZmFtaWx5ICE9IEFGX0lORVQgJiYg YWktPmFpX2ZhbWlseSAhPSBBRl9JTkVUNikKLUBAIC04NDEsMTEgKzg0MywxOCBAQAotIAkJCWNv bnRpbnVlOwotIAkJfQotIAkJLyogQ3JlYXRlIHNvY2tldCBmb3IgbGlzdGVuaW5nLiAqLwotLQkJ bGlzdGVuX3NvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAotLQkJ ICAgIGFpLT5haV9wcm90b2NvbCk7Ci0rCQlpZiAob3B0aW9ucy51c2VfbXB0Y3ApCi0rCQkJbGlz dGVuX3NvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAotKwkJCSAg ICBJUFBST1RPX01QVENQKTsKLSsJCWVsc2UKLSsJCQlsaXN0ZW5fc29jayA9IHNvY2tldChhaS0+ YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCi0rCQkJICAgIGFpLT5haV9wcm90b2NvbCk7Ci0r Ci0gCQlpZiAobGlzdGVuX3NvY2sgPT0gLTEpIHsKLSAJCQkvKiBrZXJuZWwgbWF5IG5vdCBzdXBw b3J0IGlwdjYgKi8KLSAJCQl2ZXJib3NlKCJzb2NrZXQ6ICUuMTAwcyIsIHN0cmVycm9yKGVycm5v KSk7Ci0rCQkJaWYgKG9wdGlvbnMudXNlX21wdGNwKQotKwkJCQl2ZXJib3NlKCJNUFRDUCByZXF1 ZXN0ZWQgYnV0IG1heSBub3QgYmUgYXZhaWxhYmxlLiIpOwotIAkJCWNvbnRpbnVlOwotIAkJfQot IAkJaWYgKHNldF9ub25ibG9jayhsaXN0ZW5fc29jaykgPT0gLTEpIHsKLUBAIC04NzEsNiArODgw LDEwIEBACi0gCi0gCQlkZWJ1ZygiQmluZCB0byBwb3J0ICVzIG9uICVzLiIsIHN0cnBvcnQsIG50 b3ApOwotIAotKwkJZ2V0c29ja29wdChsaXN0ZW5fc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVG LAotKwkJCQkgICAmc29ja3NpemUsICZzb2Nrc2l6ZWxlbik7Ci0rCQlkZWJ1ZygiU2VydmVyIFRD UCBSV0lOIHNvY2tldCBzaXplOiAlZCIsIHNvY2tzaXplKTsKLSsKLSAJCS8qIEJpbmQgdGhlIHNv Y2tldCB0byB0aGUgZGVzaXJlZCBwb3J0LiAqLwotIAkJaWYgKGJpbmQobGlzdGVuX3NvY2ssIGFp LT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPT0gLTEpIHsKLSAJCQllcnJvcigiQmluZCB0byBw b3J0ICVzIG9uICVzIGZhaWxlZDogJS4yMDBzLiIsCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEu b3JpZy9zc2hkX2NvbmZpZyBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZwotLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvc3NoZF9jb25maWcJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAy MDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZwkyMDI2LTA3LTAyIDAxOjQ4OjI5LjQx NDk4ODE2NiArMDIwMAotQEAgLTE4LDcgKzE4LDcgQEAKLSAjIFNFTGludXggYWJvdXQgdGhpcyBj aGFuZ2UuCi0gIyBzZW1hbmFnZSBwb3J0IC1hIC10IHNzaF9wb3J0X3QgLXAgdGNwICNQT1JUTlVN QkVSCi0gIwotLSNQb3J0IDIyCi0rUG9ydCAyMjIyCi0gI0FkZHJlc3NGYW1pbHkgYW55Ci0gI0xp c3RlbkFkZHJlc3MgMC4wLjAuMAotICNMaXN0ZW5BZGRyZXNzIDo6Ci1AQCAtMTIyLDYgKzEyMiw3 IEBACi0gI1Blcm1pdFR1bm5lbCBubwotICNDaHJvb3REaXJlY3Rvcnkgbm9uZQotICNWZXJzaW9u QWRkZW5kdW0gbm9uZQotKyNVc2VNUFRDUCBubwotIAotICMgbm8gZGVmYXVsdCBiYW5uZXIgcGF0 aAotICNCYW5uZXIgbm9uZQotQEAgLTEyOSw2ICsxMzAsMTkgQEAKLSAjIG92ZXJyaWRlIGRlZmF1 bHQgb2Ygbm8gc3Vic3lzdGVtcwotIFN1YnN5c3RlbQlzZnRwCS91c3IvbGliZXhlYy9zZnRwLXNl cnZlcgotIAotKyMgdGhlIGZvbGxvd2luZyBhcmUgSFBOIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBv cHRpb25zCi0rIyB0Y3AgcmVjZWl2ZSBidWZmZXIgcG9sbGluZy4gZGlzYWJsZSBpbiBub24gYXV0 b3R1bmluZyBrZXJuZWxzCi0rI1RjcFJjdkJ1ZlBvbGwgeWVzCi0rCi0rIyBkaXNhYmxlIGhwbiBw ZXJmb3JtYW5jZSBib29zdHMKLSsjSFBORGlzYWJsZWQgbm8KLSsKLSsjIGFsbG93IHRoZSB1c2Ug b2YgdGhlIG5vbmUgY2lwaGVyCi0rI05vbmVFbmFibGVkIG5vCi0rCi0rIyBhbGxvdyB0aGUgdXNl IG9mIHRoZSBub25lIE1BQwotKyNOb25lTWFjRW5hYmxlZCBubwotKwotICMgRXhhbXBsZSBvZiBv dmVycmlkaW5nIHNldHRpbmdzIG9uIGEgcGVyLXVzZXIgYmFzaXMKLSAjTWF0Y2ggVXNlciBhbm9u Y3ZzCi0gIwlYMTFGb3J3YXJkaW5nIG5vCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9z c2hkX2NvbmZpZy41IG9wZW5zc2gtMTAuM3AxL3NzaGRfY29uZmlnLjUKLS0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL3NzaGRfY29uZmlnLjUJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAy MDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZy41CTIwMjYtMDctMDIgMDA6Mjc6Mjku NzM0NTk3NjUxICswMjAwCi1AQCAtNTYsNiArNTYsMTYgQEAKLSAuUHEgXCYiCi0gaW4gb3JkZXIg dG8gcmVwcmVzZW50IGFyZ3VtZW50cyBjb250YWluaW5nIHNwYWNlcy4KLSAuUHAKLSsuWHIgaHBu c3NoZCA4Ci0raXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIE9wZW5TU0gncyBzc2hkIGFuZCB1c2Vz IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gZm9ybWF0LCBkaXJlY3RpdmVzLCBhbmQgb3B0aW9ucy4K LSsuWHIgaHBuc3NoZCA4Ci0rY2FuIHVzZSB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGZpbGUgYXMK LSsuWHIgc3NoZCA4Ci0rdGhvdWdoIHRoZSBpbnZlcnNlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVl LiBUaGlzIGlzIGJlY2F1c2UKLSsuWHIgaHBuc3NoIDgKLStoYXMgc29tZSBhZGRpdGlvbmFsIG9w dGlvbnMgd2hpY2ggYXJlIGRpc2N1c3NlZCBiZWxvdy4gQXMgc3VjaCBhZG1pbmlzdHJhdG9ycyBz aG91bGQgbWFpbnRhaW4KLStzZXBlcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBlYWNoLgot Ky5QcAotIFRoZSBwb3NzaWJsZQotIGtleXdvcmRzIGFuZCB0aGVpciBtZWFuaW5ncyBhcmUgYXMg Zm9sbG93cyAobm90ZSB0aGF0Ci0ga2V5d29yZHMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGFy Z3VtZW50cyBhcmUgY2FzZS1zZW5zaXRpdmUpOgotQEAgLTY3MSw2ICs2ODEsMTAgQEAKLSBUQ1Ag YW5kIFN0cmVhbUxvY2FsLgotIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBhbGwgb3RoZXIgZm9yd2Fy ZGluZy1yZWxhdGVkIG9wdGlvbnMgYW5kIG1heQotIHNpbXBsaWZ5IHJlc3RyaWN0ZWQgY29uZmln dXJhdGlvbnMuCi0rLkl0IENtIERpc2FibGVNVEFFUwotK1N3aXRjaCB0aGUgZW5jcnlwdGlvbiBj aXBoZXIgYmVpbmcgdXNlZCBmcm9tIHRoZSBtdWx0aXRocmVhZGVkIE1ULUFFUy1DVFIgY2lwaGVy Ci0rYmFjayB0byB0aGUgc3RvY2sgc2luZ2xlLXRocmVhZGVkIEFFUy1DVFIgY2lwaGVyLiBEZWZh dWx0IGlzIAotKy5DbSBuby4gSFBOU1NIIG9ubHkuIAotIC5JdCBDbSBFeHBvc2VBdXRoSW5mbwot IFdyaXRlcyBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGF1dGhlbnRpY2F0 aW9uIG1ldGhvZHMgYW5kCi0gcHVibGljIGNyZWRlbnRpYWxzIChlLmcuIGtleXMpIHVzZWQgdG8g YXV0aGVudGljYXRlIHRoZSB1c2VyLgotQEAgLTEwMjYsNiArMTA0MCwxMSBAQAotIHRoYXQgdGhl IHNlcnZlciBvZmZlcnMuCi0gVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNpZ25hdHVyZSBhbGdvcml0 aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCi0gLlFxIHNzaCAtUSBIb3N0S2V5QWxnb3Jp dGhtcyAuCi0rLkl0IENtIEhQTkRpc2FibGVkCi0rSW4gc29tZSBzaXR1YXRpb25zLCBzdWNoIGFz IHRyYW5zZmVycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywgdGhlIGltcGFjdAotK29mIHRoZSBI UE4gY29kZSBwcm9kdWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBwZXJmb3JtYW5jZS4gSW4gdGhlc2Ug Y2FzZXMgaXQgaXMKLStoZWxwZnVsIHRvIGRpc2FibGUgdGhlIEhQTiBmdW5jdGlvbmFsaXR5LiBC eSBkZWZhdWx0IEhQTkRpc2FibGVkIGlzIHNldCB0byAKLSsuQ20gbm8uCi0gLkl0IENtIElnbm9y ZVJob3N0cwotIFNwZWNpZmllcyB3aGV0aGVyIHRvIGlnbm9yZSBwZXItdXNlcgotIC5QYSAucmhv c3RzCi1AQCAtMTU0OCw2ICsxNTY3LDE5IEBACi0ga2V5IGV4Y2hhbmdlIG1ldGhvZHMuCi0gVGhl IGRlZmF1bHQgaXMKLSAuUGEgL2V0Yy9tb2R1bGkgLgotKy5JdCBDbSBOb25lRW5hYmxlZAotK0Vu YWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgY2lwaGVyLiBDYXJlIG11c3QgYWx3 YXlzIGJlIHVzZWQKLSt3aGVuIGVuYWJsaW5nIHRoaXMgYXMgaXQgd2lsbCBhbGxvdyB1c2VycyB0 byBzZW5kIGRhdGEgaW4gdGhlIGNsZWFyLiBIb3dldmVyLAotK2l0IGlzIGltcG9ydGFudCB0byBu b3RlIHRoYXQgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gcmVtYWlucyBlbmNyeXB0ZWQKLStl dmVuIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIERlZmF1bHQgaXMgCi0rLkNtIG5vCi0rLkl0 IENtIE5vbmVNYWNFbmFibGVkCi0rRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9u ZSBNQUMuIFdoZW4gdGhpcyBpcyBlbmFibGVkIHNzaAotK3dpbGwgKm5vdCogcHJvdmlkZSBkYXRh IGludGVncml0eSBvZiBhbnkgZGF0YSBiZWluZyB0cmFuc21pdHRlZCBiZXR3ZWVuIGhvc3RzLiBV c2UKLSt3aXRoIGNhdXRpb24gYXMgaXQsIHVubGlrZSBqdXN0IHVzaW5nIE5vbmVFbmFibGVkLCBk b2Vzbid0IHByb3ZpZGUgZGF0YSBpbnRlZ3JpdHkgYW5kCi0rcHJvdGVjdGlvbiBhZ2FpbnN0IG1h bi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIEFzIHdpdGggTm9uZUVuYWJsZWQgYWxsIGF1dGhlbnRp Y2F0aW9uCi0rcmVtYWlucyBlbmNyeXB0ZWQgYW5kIGludGVncml0eSBpcyBlbnN1cmVkLiBEZWZh dWx0IGlzIAotKy5DbSBuby4KLSAuSXQgQ20gUEFNU2VydmljZU5hbWUKLSBTcGVjaWZpZXMgdGhl IHNlcnZpY2UgbmFtZSB1c2VkIGZvciBQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcyAo UEFNKQotIGF1dGhlbnRpY2F0aW9uLCBhdXRob3Jpc2F0aW9uIGFuZCBzZXNzaW9uIGNvbnRyb2xz IHdoZW4KLUBAIC0yMTI0LDYgKzIxNTYsMTMgQEAKLSAuUHAKLSBUbyBkaXNhYmxlIFRDUCBrZWVw YWxpdmUgbWVzc2FnZXMsIHRoZSB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvCi0gLkNtIG5vIC4KLSsu SXQgQ20gVGNwUmN2QnVmUG9sbAotK0VuYWJsZSBvZiBkaXNhYmxlIHRoZSBwb2xsaW5nIG9mIHRo ZSB0Y3AgcmVjZWl2ZSBidWZmZXIgdGhyb3VnaG91dCB0aGUgbGlmZQotK29mIHRoZSBjb25uZWN0 aW9uLiBNYWtlIHN1cmUgdGhhdCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGZvciBzeXN0ZW1zIG1h a2luZyAKLSt1c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQrLCAyLjYsIE1T IFZpc3RhKSBpbiBvcmRlciB0bwotK21heGltaXplIHRocm91Z2hwdXQgb24gaGlnaCBwZXJmb3Jt YW5jZSBuZXR3b3Jrcy4gCi0rRGVmYXVsdCBpcyAKLSsuQ20geWVzLgotIC5JdCBDbSBUcnVzdGVk VXNlckNBS2V5cwotIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyBwdWJsaWMga2V5cyBvZiBj ZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyB0aGF0IGFyZQotIHRydXN0ZWQgdG8gc2lnbiB1c2VyIGNl cnRpZmljYXRlcyBmb3IgYXV0aGVudGljYXRpb24sIG9yCi1AQCAtMjE4NCw2ICsyMjIzLDEyIEBA Ci0gLkNtIE1hdGNoCi0gLkNtIEhvc3QKLSBkaXJlY3RpdmVzLgotKy5JdCBDbSBVc2VNUFRDUAot K0lmIHNldCB0bwotKy5DbSB5ZXMgLAotK3RoaXMgd2lsbCBlbmFibGUgTXVsdGlwYXRoIFRDUCAo TVBUQ1ApIGluc3RlYWQgb2YgVENQICh0aGlzIG9ubHkgd29ya3Mgb24gTGludXgpLgotK1RoZSBk ZWZhdWx0IGlzCi0rLkNtIG5vIC4KLSAuSXQgQ20gVXNlUEFNCi0gRW5hYmxlcyB0aGUgUGx1Z2dh YmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZSBpbnRlcmZhY2UuCi0gSWYgc2V0IHRvCi1AQCAtMjQy OSwzICsyNDc0LDExIEBACi0gYW5kCi0gLkFuIE1hcmt1cyBGcmllZGwKLSBjb250cmlidXRlZCBz dXBwb3J0IGZvciBwcml2aWxlZ2Ugc2VwYXJhdGlvbi4KLSsuQW4gQ2hyaXMgUmFwaWVyLCAKLSsu QW4gTWljaGFlbCBTdGV2ZW5zLCAKLSsuQW4gQmVuIEJlbm5ldCwgCi0rYW5kIAotKy5BbiBNaWtl IFRhc290YSAKLStkZXZlbG9wZWQgdGhlIEhQTiBleHRlbnNpb25zIGF0IHRoZSBQaXR0c2J1cmdo IFN1cGVyY29tdXRpbmcgQ2VudGVyIAotK3dpdGggZ3JhbnRzIGZyb20gQ2lzY28sIHRoZSBOYXRp b25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lLCBhbmQgCi0rdGhlIE5hdGlvbmFsIFNjaWVuY2UgRm91 bmRhdGlvbi4gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLXNlc3Npb24uYyBv cGVuc3NoLTEwLjNwMS9zc2hkLXNlc3Npb24uYwotLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3No ZC1zZXNzaW9uLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAyMDAKLSsrKyBvcGVu c3NoLTEwLjNwMS9zc2hkLXNlc3Npb24uYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjczNDgwNDY4MSAr MDIwMAotQEAgLTExMDYsNiArMTEwNiwyMCBAQAotIAl9Ci0gCWVuZHB3ZW50KCk7Ci0gCi0rCS8q IGdldCBOT05FIG9wdGlvbnMgKi8KLSsJaWYgKG9wdGlvbnMubm9uZV9lbmFibGVkID09IDEpIHsK LSsJCWNoYXIgKm9sZF9jaXBoZXJzID0gb3B0aW9ucy5jaXBoZXJzOwotKwkJeGFzcHJpbnRmKCZv cHRpb25zLmNpcGhlcnMsICIlcyxub25lIiwgb2xkX2NpcGhlcnMpOwotKwkJZnJlZShvbGRfY2lw aGVycyk7Ci0rCi0rCQkvKiBvbmx5IGVuYWJsZSB0aGUgbm9uZSBNQUMgaW4gY29udGV4dCBvZiB0 aGUgbm9uZSBjaXBoZXIgLWNqciAqLwotKwkJaWYgKG9wdGlvbnMubm9uZW1hY19lbmFibGVkID09 IDEpIHsKLSsJCQljaGFyICpvbGRfbWFjcyA9IG9wdGlvbnMubWFjczsKLSsJCQl4YXNwcmludGYo Jm9wdGlvbnMubWFjcywgIiVzLG5vbmUiLCBvbGRfbWFjcyk7Ci0rCQkJZnJlZShvbGRfbWFjcyk7 Ci0rCQl9Ci0rCX0KLSsKLSAJaWYgKCFkZWJ1Z19mbGFnICYmICFpbmV0ZF9mbGFnKSB7Ci0gCQlp ZiAoKHN0YXJ0dXBfcGlwZSA9IGR1cChSRUVYRUNfQ09ORklHX1BBU1NfRkQpKSA9PSAtMSkKLSAJ CQlmYXRhbCgiaW50ZXJuYWwgZXJyb3I6IG5vIHN0YXJ0dXAgcGlwZSIpOwotQEAgLTEzMTksNiAr MTMzMyw5IEBACi0gCSAgICByZG9tYWluID09IE5VTEwgPyAiIiA6ICJcIiIpOwotIAlmcmVlKGxh ZGRyKTsKLSAKLSsJLyogc2V0IHRoZSBIUE4gb3B0aW9ucyBmb3IgdGhlIGNoaWxkICovCi0rCWNo YW5uZWxfc2V0X2hwbl9kaXNhYmxlZChvcHRpb25zLmhwbl9kaXNhYmxlZCk7Ci0rCi0gCS8qCi0g CSAqIFdlIGRvbid0IHdhbnQgdG8gbGlzdGVuIGZvcmV2ZXIgdW5sZXNzIHRoZSBvdGhlciBzaWRl Ci0gCSAqIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVzIGl0c2VsZi4gIFNvIHdlIHNldCB1cCBh biBhbGFybSB3aGljaCBpcwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoLmggb3Bl bnNzaC0xMC4zcDEvc3NoLmgKLS0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC5oCTIwMjYtMDct MDIgMDA6Mjc6MDYuMTAzMjc1MzA3ICswMjAwCi0rKysgb3BlbnNzaC0xMC4zcDEvc3NoLmgJMjAy Ni0wNy0wMiAxMDowMjowMi40NTU5NjkzNzcgKzAyMDAKLUBAIC0xNCw2ICsxNCw3IEBACi0gCi0g LyogRGVmYXVsdCBwb3J0IG51bWJlci4gKi8KLSAjZGVmaW5lIFNTSF9ERUZBVUxUX1BPUlQJMjIK LSsjZGVmaW5lIEhQTlNTSF9ERUZBVUxUX1BPUlQgICAgMjIyMgotIAotIC8qCi0gICogTWF4aW11 bSBudW1iZXIgb2YgY2VydGlmaWNhdGUgZmlsZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkCi1AQCAt NDMsNyArNDQsNyBAQAotICAqIE5hbWUgZm9yIHRoZSBzZXJ2aWNlLiAgVGhlIHBvcnQgbmFtZWQg YnkgdGhpcyBzZXJ2aWNlIG92ZXJyaWRlcyB0aGUKLSAgKiBkZWZhdWx0IHBvcnQgaWYgcHJlc2Vu dC4KLSAgKi8KLS0jZGVmaW5lIFNTSF9TRVJWSUNFX05BTUUJInNzaCIKLSsjZGVmaW5lIFNTSF9T RVJWSUNFX05BTUUJImhwbnNzaCIKLSAKLSAvKgotICAqIE5hbWUgb2YgdGhlIGVudmlyb25tZW50 IHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3MgSUQgb2YgdGhlCi1kaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9zc2hrZXkuYyBvcGVuc3NoLTEwLjNwMS9zc2hrZXkuYwotLS0tIG9w ZW5zc2gtMTAuM3AxLm9yaWcvc3Noa2V5LmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcg KzAyMDAKLSsrKyBvcGVuc3NoLTEwLjNwMS9zc2hrZXkuYwkyMDI2LTA3LTAyIDAwOjI3OjI5Ljcz NTA4OTE1NyArMDIwMAotQEAgLTE3NjcsNyArMTc2Nyw4IEBACi0gCSAgICBzdGRlcnIpOwotICNl bmRpZgotIAlpZiAoKHIgPSBjaXBoZXJfaW5pdCgmY2N0eCwgY2lwaGVyLCBrZXlpdiwgY2lwaGVy X2tleWxlbihjaXBoZXIpLAotLQkgICAga2V5aXYgKyBjaXBoZXJfa2V5bGVuKGNpcGhlciksIGNp cGhlcl9pdmxlbihjaXBoZXIpLCAxKSkgIT0gMCkKLSsJICAgIGtleWl2ICsgY2lwaGVyX2tleWxl bihjaXBoZXIpLCBjaXBoZXJfaXZsZW4oY2lwaGVyKSwgMCwKLSsJICAgIENJUEhFUl9FTkNSWVBU LCBDSVBIRVJfU0VSSUFMKSkgIT0gMCkKLSAJCWdvdG8gb3V0OwotIAotIAkvKiBTZXJpYWxpc2Ug YW5kIGVuY3J5cHQgdGhlIHByaXZhdGUga2V5IHVzaW5nIHRoZSBlcGhlbWVyYWwga2V5ICovCi1A QCAtMTkwMSw3ICsxOTAyLDggQEAKLSAJICAgIGtleWl2LCBTU0hfRElHRVNUX01BWF9MRU5HVEgp KSAhPSAwKQotIAkJZ290byBvdXQ7Ci0gCWlmICgociA9IGNpcGhlcl9pbml0KCZjY3R4LCBjaXBo ZXIsIGtleWl2LCBjaXBoZXJfa2V5bGVuKGNpcGhlciksCi0tCSAgICBrZXlpdiArIGNpcGhlcl9r ZXlsZW4oY2lwaGVyKSwgY2lwaGVyX2l2bGVuKGNpcGhlciksIDApKSAhPSAwKQotKwkgICAga2V5 aXYgKyBjaXBoZXJfa2V5bGVuKGNpcGhlciksIGNpcGhlcl9pdmxlbihjaXBoZXIpLCAwLAotKwkg ICAgQ0lQSEVSX0RFQ1JZUFQsIENJUEhFUl9TRVJJQUwpKSAhPSAwKQotIAkJZ290byBvdXQ7Ci0g I2lmZGVmIERFQlVHX1BLCi0gCWZwcmludGYoc3RkZXJyLCAiJXM6IGtleStpdlxuIiwgX19mdW5j X18pOwotQEAgLTI5NDUsNiArMjk0NywxMyBAQAotIAkJa2RmbmFtZSA9ICJub25lIjsKLSAJfSBl bHNlIGlmIChjaXBoZXJuYW1lID09IE5VTEwpCi0gCQljaXBoZXJuYW1lID0gREVGQVVMVF9DSVBI RVJOQU1FOwotKwkvKgotKwkgKiBOT1RFOiBXaXRob3V0IE9wZW5TU0wsIHRoaXMgc3RyaW5nIGNv bXBhcmlzb24gaXMgc3RpbGwgc2FmZSwgZXZlbgotKwkgKiB0aG91Z2ggaXQgd2lsbCBuZXZlciBt YXRjaCBiZWNhdXNlIHRoZSBtdWx0aXRocmVhZGVkIGNpcGhlciBpcyBub3QKLSsJICogZW5hYmxl ZC4KLSsJICovCi0rCWVsc2UgaWYgKHN0cmNtcChjaXBoZXJuYW1lLCAiY2hhY2hhMjAtcG9seTEz MDUtbXRAaHBuc3NoLm9yZyIpID09IDApCi0rCQljaXBoZXJuYW1lID0gImNoYWNoYTIwLXBvbHkx MzA1QG9wZW5zc2guY29tIjsKLSAJaWYgKChjaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShjaXBoZXJu YW1lKSkgPT0gTlVMTCkgewotIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSAJCWdv dG8gb3V0OwotQEAgLTI5ODAsNyArMjk4OSw3IEBACi0gCQlnb3RvIG91dDsKLSAJfQotIAlpZiAo KHIgPSBjaXBoZXJfaW5pdCgmY2lwaGVyY29udGV4dCwgY2lwaGVyLCBrZXksIGtleWxlbiwKLS0J ICAgIGtleSArIGtleWxlbiwgaXZsZW4sIDEpKSAhPSAwKQotKwkgICAga2V5ICsga2V5bGVuLCBp dmxlbiwgMCwgQ0lQSEVSX0VOQ1JZUFQsIENJUEhFUl9TRVJJQUwpKSAhPSAwKQotIAkJZ290byBv dXQ7Ci0gCi0gCWlmICgociA9IHNzaGJ1Zl9wdXQoZW5jb2RlZCwgQVVUSF9NQUdJQywgc2l6ZW9m KEFVVEhfTUFHSUMpKSkgIT0gMCB8fAotQEAgLTMxNjYsNiArMzE3NSw4IEBACi0gCSAgICAociA9 IHNzaGJ1Zl9nZXRfdTMyKGRlY29kZWQsICZlbmNyeXB0ZWRfbGVuKSkgIT0gMCkKLSAJCWdvdG8g b3V0OwotIAotKwlpZiAoc3RyY21wKGNpcGhlcm5hbWUsICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBo cG5zc2gub3JnIikgPT0gMCkKLSsJCXN0cmNweShjaXBoZXJuYW1lLCAiY2hhY2hhMjAtcG9seTEz MDVAb3BlbnNzaC5jb20iKTsKLSAJaWYgKChjaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShjaXBoZXJu YW1lKSkgPT0gTlVMTCkgewotIAkJciA9IFNTSF9FUlJfS0VZX1VOS05PV05fQ0lQSEVSOwotIAkJ Z290byBvdXQ7Ci1AQCAtMzIyMSw3ICszMjMyLDcgQEAKLSAJLyogZGVjcnlwdCBwcml2YXRlIHBv cnRpb24gb2Yga2V5ICovCi0gCWlmICgociA9IHNzaGJ1Zl9yZXNlcnZlKGRlY3J5cHRlZCwgZW5j cnlwdGVkX2xlbiwgJmRwKSkgIT0gMCB8fAotIAkgICAgKHIgPSBjaXBoZXJfaW5pdCgmY2lwaGVy Y29udGV4dCwgY2lwaGVyLCBrZXksIGtleWxlbiwKLS0JICAgIGtleSArIGtleWxlbiwgaXZsZW4s IDApKSAhPSAwKQotKwkgICAga2V5ICsga2V5bGVuLCBpdmxlbiwgMCwgQ0lQSEVSX0RFQ1JZUFQs IENJUEhFUl9TRVJJQUwpKSAhPSAwKQotIAkJZ290byBvdXQ7Ci0gCWlmICgociA9IGNpcGhlcl9j cnlwdChjaXBoZXJjb250ZXh0LCAwLCBkcCwgc3NoYnVmX3B0cihkZWNvZGVkKSwKLSAJICAgIGVu Y3J5cHRlZF9sZW4sIDAsIGF1dGhsZW4pKSAhPSAwKSB7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4z cDEub3JpZy91bWFjLmMgb3BlbnNzaC0xMC4zcDEvdW1hYy5jCi0tLS0gb3BlbnNzaC0xMC4zcDEu b3JpZy91bWFjLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKLSsrKyBvcGVu c3NoLTEwLjNwMS91bWFjLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzU0NTAwODUgKzAyMDAKLUBA IC0xMzYsMTUgKzEzNiw0OCBAQAotIC8qIC0tLSBFbmRpYW4gQ29udmVyc2lvbiAtLS0gRm9yY2lu ZyBhc3NlbWJseSBvbiBzb21lIHBsYXRmb3JtcyAgICAgICAgICAgKi8KLSAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCi0gCi0rCi0rLyogVXNpbmcgbG9jYWwgc3RhdGljYWxseSBkZWZpbmVkIHZlcnNpb25z IG9mIHRoZSBnZXQvcHV0IGZ1bmN0aW9ucwotKyAqIGZvdW5kIGluIG1pc2MuYyBhbGxvd3MgdGhl bSB0byBiZSBpbmxpbmVkLiBUaGlzIGltcHJvdmVzIHRocm91Z2hwdXQKLSsgKiBwZXJmb3JtYW5j ZSBieSAxMCUgdG8gMTUlIG9uIHdlbGwgY29ubmVjdGVkICgxMEdiL3MrKSBzeXN0ZW1zLiAKLSsg KiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PiAyMDIyLTAzLTA5ICovCi0rCi0rc3RhdGlj ICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEsIDQpKSkKLSt1X2lu dDMyX3QgdW1hY19nZXRfdTMyX2xlKGNvbnN0IHZvaWQgKnZwKQotK3sKLSsgICAgICAgIGNvbnN0 IHVfY2hhciAqcCA9IChjb25zdCB1X2NoYXIgKil2cDsKLSsgICAgICAgIHVfaW50MzJfdCB2Owot KwotKyAgICAgICAgdiAgPSAodV9pbnQzMl90KXBbMF07Ci0rICAgICAgICB2IHw9ICh1X2ludDMy X3QpcFsxXSA8PCA4OwotKyAgICAgICAgdiB8PSAodV9pbnQzMl90KXBbMl0gPDwgMTY7Ci0rICAg ICAgICB2IHw9ICh1X2ludDMyX3QpcFszXSA8PCAyNDsKLSsKLSsgICAgICAgIHJldHVybiAodik7 Ci0rfQotKwotKyNpZiAwIC8qIGNvbXBpbGUgdGltZSB3YXJuaW5nIHRocm93biBvdGhlcndpc2Ug Ki8KLStzdGF0aWMgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCA0 KSkpOwotK3ZvaWQgdW1hY19wdXRfdTMyX2xlKHZvaWQgKnZwLCB1X2ludDMyX3QgdikKLSt7Ci0r ICAgICAgICB1X2NoYXIgKnAgPSAodV9jaGFyICopdnA7Ci0rCi0rICAgICAgICBwWzBdID0gKHVf Y2hhcil2ICYgMHhmZjsKLSsgICAgICAgIHBbMV0gPSAodV9jaGFyKSh2ID4+IDgpICYgMHhmZjsK LSsgICAgICAgIHBbMl0gPSAodV9jaGFyKSh2ID4+IDE2KSAmIDB4ZmY7Ci0rICAgICAgICBwWzNd ID0gKHVfY2hhcikodiA+PiAyNCkgJiAweGZmOwotK30KLSsjZW5kaWYKLSsKLSAjaWYgKF9fTElU VExFX0VORElBTl9fKQotICNkZWZpbmUgTE9BRF9VSU5UMzJfUkVWRVJTRUQocCkJCWdldF91MzIo cCkKLSAjZGVmaW5lIFNUT1JFX1VJTlQzMl9SRVZFUlNFRChwLHYpCXB1dF91MzIocCx2KQotICNl bHNlCi0tI2RlZmluZSBMT0FEX1VJTlQzMl9SRVZFUlNFRChwKQkJZ2V0X3UzMl9sZShwKQotLSNk ZWZpbmUgU1RPUkVfVUlOVDMyX1JFVkVSU0VEKHAsdikJcHV0X3UzMl9sZShwLHYpCi0rI2RlZmlu ZSBMT0FEX1VJTlQzMl9SRVZFUlNFRChwKQkJdW1hY19nZXRfdTMyX2xlKHApCi0rI2RlZmluZSBT VE9SRV9VSU5UMzJfUkVWRVJTRUQocCx2KQl1bWFjX3B1dF91MzJfbGUocCx2KQotICNlbmRpZgot IAotLSNkZWZpbmUgTE9BRF9VSU5UMzJfTElUVExFKHApCQkoZ2V0X3UzMl9sZShwKSkKLSsjZGVm aW5lIExPQURfVUlOVDMyX0xJVFRMRShwKQkJKHVtYWNfZ2V0X3UzMl9sZShwKSkKLSAjZGVmaW5l IFNUT1JFX1VJTlQzMl9CSUcocCx2KQkJcHV0X3UzMihwLCB2KQotIAotIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3V0aGFzaC5oIG9wZW5zc2gtMTAu M3AxL3V0aGFzaC5oCi0tLS0gb3BlbnNzaC0xMC4zcDEub3JpZy91dGhhc2guaAkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuM3AxL3V0aGFzaC5oCTIw MjYtMDctMDIgMDA6Mjc6MjkuNzM1ODA3Mjk0ICswMjAwCi1AQCAtMCwwICsxLDExNDAgQEAKLSsv KgotK0NvcHlyaWdodCAoYykgMjAwMy0yMDIyLCBUcm95IEQuIEhhbnNvbiAgaHR0cHM6Ly90cm95 ZGhhbnNvbi5naXRodWIuaW8vdXRoYXNoLwotK0FsbCByaWdodHMgcmVzZXJ2ZWQuCi0rCi0rUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0rCi0rICAgICogUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgICAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu Ci0rCi0rVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg QU5EIENPTlRSSUJVVE9SUyAiQVMKLStJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLStUTywgVEhFIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKLStQQVJUSUNVTEFS IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg T1dORVIKLStPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLStFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0rUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0rUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRgotK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HCi0rTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0rU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rKi8KLSsKLSsjaWZuZGVm IFVUSEFTSF9ICi0rI2RlZmluZSBVVEhBU0hfSAotKwotKyNkZWZpbmUgVVRIQVNIX1ZFUlNJT04g Mi4zLjAKLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+ICAgLyogbWVtY21wLCBtZW1zZXQsIHN0cmxl biAqLwotKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBwdHJkaWZmX3QgKi8KLSsjaW5jbHVkZSA8 c3RkbGliLmg+ICAgLyogZXhpdCAqLwotKwotKyNpZiBkZWZpbmVkKEhBU0hfREVGSU5FX09XTl9T VERJTlQpICYmIEhBU0hfREVGSU5FX09XTl9TVERJTlQKLSsvKiBUaGlzIGNvZGVwYXRoIGlzIHBy b3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBidXQgSSBwbGFuIHRvIHJlbW92ZSBp dC4gKi8KLSsjd2FybmluZyAiSEFTSF9ERUZJTkVfT1dOX1NURElOVCBpcyBkZXByZWNhdGVkOyBw bGVhc2UgdXNlIEhBU0hfTk9fU1RESU5UIGluc3RlYWQiCi0rdHlwZWRlZiB1bnNpZ25lZCBpbnQg dWludDMyX3Q7Ci0rdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Ci0rI2VsaWYgZGVmaW5l ZChIQVNIX05PX1NURElOVCkgJiYgSEFTSF9OT19TVERJTlQKLSsjZWxzZQotKyNpbmNsdWRlIDxz dGRpbnQuaD4gICAvKiB1aW50OF90LCB1aW50MzJfdCAqLwotKyNlbmRpZgotKwotKy8qIFRoZXNl IG1hY3JvcyB1c2UgZGVjbHR5cGUgb3IgdGhlIGVhcmxpZXIgX190eXBlb2YgR05VIGV4dGVuc2lv bi4KLSsgICBBcyBkZWNsdHlwZSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBuZXdlciBjb21waWxlcnMg KFZTMjAxMCBvciBnY2MgNC4zKwotKyAgIHdoZW4gY29tcGlsaW5nIGMrKyBzb3VyY2UpIHRoaXMg Y29kZSB1c2VzIHdoYXRldmVyIG1ldGhvZCBpcyBuZWVkZWQKLSsgICBvciwgZm9yIFZTMjAwOCB3 aGVyZSBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgdXNlcyBjYXN0aW5nIHdvcmthcm91bmRzLiAqLwot KyNpZiAhZGVmaW5lZChERUNMVFlQRSkgJiYgIWRlZmluZWQoTk9fREVDTFRZUEUpCi0rI2lmIGRl ZmluZWQoX01TQ19WRVIpICAgLyogTVMgY29tcGlsZXIgKi8KLSsjaWYgX01TQ19WRVIgPj0gMTYw MCAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAgLyogVlMyMDEwIG9yIG5ld2VyIGluIEMrKyBtb2Rl ICovCi0rI2RlZmluZSBERUNMVFlQRSh4KSAoZGVjbHR5cGUoeCkpCi0rI2Vsc2UgICAgICAgICAg ICAgICAgICAgLyogVlMyMDA4IG9yIG9sZGVyIChvciBWUzIwMTAgaW4gQyBtb2RlKSAqLwotKyNk ZWZpbmUgTk9fREVDTFRZUEUKLSsjZW5kaWYKLSsjZWxpZiBkZWZpbmVkKF9fTUNTVF9fKSAgLyog RWxicnVzIEMgQ29tcGlsZXIgKi8KLSsjZGVmaW5lIERFQ0xUWVBFKHgpIChfX3R5cGVvZih4KSkK LSsjZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX0lDQ0FSTV9fKSB8fCBk ZWZpbmVkKF9fTENDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCi0rI2RlZmluZSBOT19ERUNM VFlQRQotKyNlbHNlICAgICAgICAgICAgICAgICAgIC8qIEdOVSwgU3VuIGFuZCBvdGhlciBjb21w aWxlcnMgKi8KLSsjZGVmaW5lIERFQ0xUWVBFKHgpIChfX3R5cGVvZih4KSkKLSsjZW5kaWYKLSsj ZW5kaWYKLSsKLSsjaWZkZWYgTk9fREVDTFRZUEUKLSsjZGVmaW5lIERFQ0xUWVBFKHgpCi0rI2Rl ZmluZSBERUNMVFlQRV9BU1NJR04oZHN0LHNyYykgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGNo YXIgKipfZGFfZHN0ID0gKGNoYXIqKikoJihkc3QpKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAqX2RhX2RzdCA9IChjaGFyKikoc3JjKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hp bGUgKDApCi0rI2Vsc2UKLSsjZGVmaW5lIERFQ0xUWVBFX0FTU0lHTihkc3Qsc3JjKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgKGRzdCkgPSBERUNMVFlQRShkc3QpKHNyYyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQot KyNlbmRpZgotKwotKyNpZm5kZWYgdXRoYXNoX21hbGxvYwotKyNkZWZpbmUgdXRoYXNoX21hbGxv YyhzeikgbWFsbG9jKHN6KSAgICAgIC8qIG1hbGxvYyBmY24gICAgICAgICAgICAgICAgICAgICAg Ki8KLSsjZW5kaWYKLSsjaWZuZGVmIHV0aGFzaF9mcmVlCi0rI2RlZmluZSB1dGhhc2hfZnJlZShw dHIsc3opIGZyZWUocHRyKSAgICAgLyogZnJlZSBmY24gICAgICAgICAgICAgICAgICAgICAgICAq LwotKyNlbmRpZgotKyNpZm5kZWYgdXRoYXNoX2J6ZXJvCi0rI2RlZmluZSB1dGhhc2hfYnplcm8o YSxuKSBtZW1zZXQoYSwnXDAnLG4pCi0rI2VuZGlmCi0rI2lmbmRlZiB1dGhhc2hfc3RybGVuCi0r I2RlZmluZSB1dGhhc2hfc3RybGVuKHMpIHN0cmxlbihzKQotKyNlbmRpZgotKwotKyNpZm5kZWYg SEFTSF9GVU5DVElPTgotKyNkZWZpbmUgSEFTSF9GVU5DVElPTihrZXlwdHIsa2V5bGVuLGhhc2h2 KSBIQVNIX0pFTihrZXlwdHIsIGtleWxlbiwgaGFzaHYpCi0rI2VuZGlmCi0rCi0rI2lmbmRlZiBI QVNIX0tFWUNNUAotKyNkZWZpbmUgSEFTSF9LRVlDTVAoYSxiLG4pIG1lbWNtcChhLGIsbikKLSsj ZW5kaWYKLSsKLSsjaWZuZGVmIHV0aGFzaF9ub2V4cGFuZF9meWkKLSsjZGVmaW5lIHV0aGFzaF9u b2V4cGFuZF9meWkodGJsKSAgICAgICAgICAvKiBjYW4gYmUgZGVmaW5lZCB0byBsb2cgbm9leHBh bmQgICovCi0rI2VuZGlmCi0rI2lmbmRlZiB1dGhhc2hfZXhwYW5kX2Z5aQotKyNkZWZpbmUgdXRo YXNoX2V4cGFuZF9meWkodGJsKSAgICAgICAgICAgIC8qIGNhbiBiZSBkZWZpbmVkIHRvIGxvZyBl eHBhbmRzICAgKi8KLSsjZW5kaWYKLSsKLSsjaWZuZGVmIEhBU0hfTk9ORkFUQUxfT09NCi0rI2Rl ZmluZSBIQVNIX05PTkZBVEFMX09PTSAwCi0rI2VuZGlmCi0rCi0rI2lmIEhBU0hfTk9ORkFUQUxf T09NCi0rLyogbWFsbG9jIGZhaWx1cmVzIGNhbiBiZSByZWNvdmVyZWQgZnJvbSAqLwotKwotKyNp Zm5kZWYgdXRoYXNoX25vbmZhdGFsX29vbQotKyNkZWZpbmUgdXRoYXNoX25vbmZhdGFsX29vbShv YmopIGRvIHt9IHdoaWxlICgwKSAgICAvKiBub24tZmF0YWwgT09NIGVycm9yICovCi0rI2VuZGlm Ci0rCi0rI2RlZmluZSBIQVNIX1JFQ09SRF9PT00ob29tZWQpIGRvIHsgKG9vbWVkKSA9IDE7IH0g d2hpbGUgKDApCi0rI2RlZmluZSBJRl9IQVNIX05PTkZBVEFMX09PTSh4KSB4Ci0rCi0rI2Vsc2UK LSsvKiBtYWxsb2MgZmFpbHVyZXMgcmVzdWx0IGluIGxvc3QgbWVtb3J5LCBoYXNoIHRhYmxlcyBh cmUgdW51c2FibGUgKi8KLSsKLSsjaWZuZGVmIHV0aGFzaF9mYXRhbAotKyNkZWZpbmUgdXRoYXNo X2ZhdGFsKG1zZykgZXhpdCgtMSkgICAgICAgIC8qIGZhdGFsIE9PTSBlcnJvciAqLwotKyNlbmRp ZgotKwotKyNkZWZpbmUgSEFTSF9SRUNPUkRfT09NKG9vbWVkKSB1dGhhc2hfZmF0YWwoIm91dCBv ZiBtZW1vcnkiKQotKyNkZWZpbmUgSUZfSEFTSF9OT05GQVRBTF9PT00oeCkKLSsKLSsjZW5kaWYK LSsKLSsvKiBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzICovCi0rI2RlZmluZSBIQVNIX0lOSVRJ QUxfTlVNX0JVQ0tFVFMgMzJVICAgICAvKiBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzICAgICAg ICAqLwotKyNkZWZpbmUgSEFTSF9JTklUSUFMX05VTV9CVUNLRVRTX0xPRzIgNVUgLyogbGcyIG9m IGluaXRpYWwgbnVtYmVyIG9mIGJ1Y2tldHMgKi8KLSsjZGVmaW5lIEhBU0hfQktUX0NBUEFDSVRZ X1RIUkVTSCAxMFUgICAgIC8qIGV4cGFuZCB3aGVuIGJ1Y2tldCBjb3VudCByZWFjaGVzICovCi0r Ci0rLyogY2FsY3VsYXRlIHRoZSBlbGVtZW50IHdob3NlIGhhc2ggaGFuZGxlIGFkZHJlc3MgaXMg aGhwICovCi0rI2RlZmluZSBFTE1UX0ZST01fSEgodGJsLGhocCkgKCh2b2lkKikoKChjaGFyKiko aGhwKSkgLSAoKHRibCktPmhobykpKQotKy8qIGNhbGN1bGF0ZSB0aGUgaGFzaCBoYW5kbGUgZnJv bSBlbGVtZW50IGFkZHJlc3MgZWxwICovCi0rI2RlZmluZSBISF9GUk9NX0VMTVQodGJsLGVscCkg KChVVF9oYXNoX2hhbmRsZSopKHZvaWQqKSgoKGNoYXIqKShlbHApKSArICgodGJsKS0+aGhvKSkp Ci0rCi0rI2RlZmluZSBIQVNIX1JPTExCQUNLX0JLVChoaCwgaGVhZCwgaXRlbXB0cmhoKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqX2hkX2hoX2l0ZW0gPSAoaXRlbXB0cmhoKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaGRfYmt0OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgSEFTSF9UT19CS1QoX2hkX2hoX2l0ZW0tPmhhc2h2LCAoaGVhZCktPmhoLnRibC0+bnVt X2J1Y2tldHMsIF9oZF9ia3QpOyAgICAgICAgIFwKLSsgIChoZWFkKS0+aGgudGJsLT5idWNrZXRz W19oZF9ia3RdLmNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICBfaGRfaGhfaXRlbS0+aGhfbmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgX2hkX2hoX2l0ZW0tPmhoX3ByZXYgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9WQUxVRShrZXlwdHIsa2V5bGVuLGhhc2h2 KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBIQVNIX0ZVTkNUSU9OKGtleXB0ciwga2V5bGVuLCBoYXNodik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDAp Ci0rCi0rI2RlZmluZSBIQVNIX0ZJTkRfQllIQVNIVkFMVUUoaGgsaGVhZCxrZXlwdHIsa2V5bGVu LGhhc2h2YWwsb3V0KSAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIChvdXQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBpZiAoaGVhZCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICB1bnNpZ25lZCBfaGZfYmt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9UT19CS1QoaGFzaHZhbCwg KGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzLCBfaGZfYmt0KTsgICAgICAgICAgICAgICAgICBc Ci0rICAgIGlmIChIQVNIX0JMT09NX1RFU1QoKGhlYWQpLT5oaC50YmwsIGhhc2h2YWwpICE9IDAp IHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hfRklORF9JTl9CS1QoKGhl YWQpLT5oaC50YmwsIGhoLCAoaGVhZCktPmhoLnRibC0+YnVja2V0c1sgX2hmX2JrdCBdLCBrZXlw dHIsIGtleWxlbiwgaGFzaHZhbCwgb3V0KTsgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhB U0hfRklORChoaCxoZWFkLGtleXB0cixrZXlsZW4sb3V0KSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKG91dCkgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIGlmIChoZWFkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHVuc2lnbmVk IF9oZl9oYXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICBIQVNIX1ZBTFVFKGtleXB0ciwga2V5bGVuLCBfaGZfaGFzaHYp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9GSU5E X0JZSEFTSFZBTFVFKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbiwgX2hmX2hhc2h2LCBvdXQpOyAg ICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0r Ci0rI2lmZGVmIEhBU0hfQkxPT00KLSsjZGVmaW5lIEhBU0hfQkxPT01fQklUTEVOICgxVUwgPDwg SEFTSF9CTE9PTSkKLSsjZGVmaW5lIEhBU0hfQkxPT01fQllURUxFTiAoSEFTSF9CTE9PTV9CSVRM RU4vOFVMKSArICgoKEhBU0hfQkxPT01fQklUTEVOJThVTCkhPTBVTCkgPyAxVUwgOiAwVUwpCi0r I2RlZmluZSBIQVNIX0JMT09NX01BS0UodGJsLG9vbWVkKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICh0YmwpLT5ibG9vbV9uYml0cyA9IEhBU0hfQkxPT007ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAodGJsKS0+Ymxvb21fYnYgPSAodWludDhfdCop dXRoYXNoX21hbGxvYyhIQVNIX0JMT09NX0JZVEVMRU4pOyAgICAgICAgICAgICAgICAgXAotKyAg aWYgKCEodGJsKS0+Ymxvb21fYnYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9SRUNPUkRfT09NKG9vbWVkKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1dGhhc2hfYnplcm8oKHRibCktPmJsb29tX2J2 LCBIQVNIX0JMT09NX0JZVEVMRU4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg KHRibCktPmJsb29tX3NpZyA9IEhBU0hfQkxPT01fU0lHTkFUVVJFOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hp bGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0JMT09NX0ZSRUUodGJsKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIHV0aGFzaF9mcmVlKCh0YmwpLT5ibG9vbV9idiwgSEFTSF9CTE9PTV9CWVRF TEVOKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsj ZGVmaW5lIEhBU0hfQkxPT01fQklUU0VUKGJ2LGlkeCkgKGJ2WyhpZHgpLzhVXSB8PSAoMVUgPDwg KChpZHgpJThVKSkpCi0rI2RlZmluZSBIQVNIX0JMT09NX0JJVFRFU1QoYnYsaWR4KSAoYnZbKGlk eCkvOFVdICYgKDFVIDw8ICgoaWR4KSU4VSkpKQotKwotKyNkZWZpbmUgSEFTSF9CTE9PTV9BREQo dGJsLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIEhBU0hfQkxPT01fQklUU0VUKCh0YmwpLT5ibG9vbV9idiwgKChoYXNodikgJiAodWlu dDMyX3QpKCgxVUwgPDwgKHRibCktPmJsb29tX25iaXRzKSAtIDFVKSkpCi0rCi0rI2RlZmluZSBI QVNIX0JMT09NX1RFU1QodGJsLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgSEFTSF9CTE9PTV9CSVRURVNUKCh0YmwpLT5ibG9vbV9idiwg KChoYXNodikgJiAodWludDMyX3QpKCgxVUwgPDwgKHRibCktPmJsb29tX25iaXRzKSAtIDFVKSkp Ci0rCi0rI2Vsc2UKLSsjZGVmaW5lIEhBU0hfQkxPT01fTUFLRSh0Ymwsb29tZWQpCi0rI2RlZmlu ZSBIQVNIX0JMT09NX0ZSRUUodGJsKQotKyNkZWZpbmUgSEFTSF9CTE9PTV9BREQodGJsLGhhc2h2 KQotKyNkZWZpbmUgSEFTSF9CTE9PTV9URVNUKHRibCxoYXNodikgKDEpCi0rI2RlZmluZSBIQVNI X0JMT09NX0JZVEVMRU4gMFUKLSsjZW5kaWYKLSsKLSsjZGVmaW5lIEhBU0hfTUFLRV9UQUJMRSho aCxoZWFkLG9vbWVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGhlYWQpLT5oaC50YmwgPSAoVVRfaGFz aF90YWJsZSopdXRoYXNoX21hbGxvYyhzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAgIFwK LSsgIGlmICghKGhlYWQpLT5oaC50YmwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfUkVDT1JEX09PTShvb21lZCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdXRoYXNoX2J6ZXJvKChoZWFkKS0+aGgu dGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIChoZWFkKS0+aGgudGJsLT50YWlsID0gJigoaGVhZCktPmhoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tl dHMgPSBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFM7ICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgKGhlYWQpLT5oaC50YmwtPmxvZzJfbnVtX2J1Y2tldHMgPSBIQVNIX0lOSVRJQUxfTlVNX0JV Q0tFVFNfTE9HMjsgICAgICAgICAgICBcCi0rICAgIChoZWFkKS0+aGgudGJsLT5oaG8gPSAoY2hh ciopKCYoaGVhZCktPmhoKSAtIChjaGFyKikoaGVhZCk7ICAgICAgICAgICAgICAgICAgXAotKyAg ICAoaGVhZCktPmhoLnRibC0+YnVja2V0cyA9IChVVF9oYXNoX2J1Y2tldCopdXRoYXNoX21hbGxv YyggICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VU UyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQpKTsgICAgICAgICAgICAgICBcCi0rICAg IChoZWFkKS0+aGgudGJsLT5zaWduYXR1cmUgPSBIQVNIX1NJR05BVFVSRTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBpZiAoIShoZWFkKS0+aGgudGJsLT5idWNrZXRz KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICBIQVNIX1JFQ09SRF9PT00ob29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50Ymws IHNpemVvZihVVF9oYXNoX3RhYmxlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB1dGhhc2hfYnplcm8oKGhlYWQpLT5oaC50Ymwt PmJ1Y2tldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VUUyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNr ZXQpKTsgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hfQkxPT01fTUFLRSgoaGVhZCktPmhoLnRi bCwgb29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBJ Rl9IQVNIX05PTkZBVEFMX09PTSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBpZiAob29tZWQpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICB1dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibC0+YnVja2V0cywgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VU UypzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgICAgICAgICBcCi0rICAgICAgICAg IHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICApICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9SRVBMQUNFX0JZ SEFTSFZBTFVFX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWwsYWRk LHJlcGxhY2VkLGNtcGZjbikgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChyZXBs YWNlZCkgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0ZJTkRfQllIQVNIVkFMVUUoaGgsIGhlYWQsICYo KGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgcmVwbGFjZWQpOyBcCi0rICBp ZiAocmVwbGFjZWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX0RFTEVURShoaCwgaGVhZCwgcmVwbGFj ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5P UkRFUihoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBoYXNodmFsLCBh ZGQsIGNtcGZjbik7IFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9SRVBMQUNFX0JZ SEFTSFZBTFVFKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixoYXNodmFsLGFkZCxyZXBsYWNl ZCkgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChyZXBsYWNlZCkgPSBOVUxMOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBIQVNIX0ZJTkRfQllIQVNIVkFMVUUoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFt ZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgcmVwbGFjZWQpOyBcCi0rICBpZiAocmVwbGFjZWQpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICBIQVNIX0RFTEVURShoaCwgaGVhZCwgcmVwbGFjZWQpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUUoaGgsIGhlYWQsICYoKGFkZCkt PmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkKTsgXAotK30gd2hpbGUgKDApCi0r Ci0rI2RlZmluZSBIQVNIX1JFUExBQ0UoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGFkZCxy ZXBsYWNlZCkgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIHVuc2lnbmVkIF9ocl9oYXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX1ZBTFVFKCYoKGFkZCktPmZpZWxk bmFtZSksIGtleWxlbl9pbiwgX2hyX2hhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgSEFTSF9SRVBMQUNFX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCBmaWVsZG5hbWUsIGtleWxlbl9p biwgX2hyX2hhc2h2LCBhZGQsIHJlcGxhY2VkKTsgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmlu ZSBIQVNIX1JFUExBQ0VfSU5PUkRFUihoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4sYWRkLHJl cGxhY2VkLGNtcGZjbikgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVuc2ln bmVkIF9ocl9oYXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX1ZBTFVFKCYoKGFkZCktPmZpZWxkbmFtZSksIGtl eWxlbl9pbiwgX2hyX2hhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9S RVBMQUNFX0JZSEFTSFZBTFVFX0lOT1JERVIoaGgsIGhlYWQsIGZpZWxkbmFtZSwga2V5bGVuX2lu LCBfaHJfaGFzaHYsIGFkZCwgcmVwbGFjZWQsIGNtcGZjbik7IFwKLSt9IHdoaWxlICgwKQotKwot KyNkZWZpbmUgSEFTSF9BUFBFTkRfTElTVChoaCwgaGVhZCwgYWRkKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAoYWRkKS0+aGgubmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFkZCktPmhoLnByZXYgPSBFTE1UX0ZST01f SEgoKGhlYWQpLT5oaC50YmwsIChoZWFkKS0+aGgudGJsLT50YWlsKTsgICAgICAgICAgIFwKLSsg IChoZWFkKS0+aGgudGJsLT50YWlsLT5uZXh0ID0gKGFkZCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAoaGVhZCktPmhoLnRibC0+dGFpbCA9ICYoKGFk ZCktPmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30g d2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0FLQklfSU5ORVJfTE9PUChoaCxoZWFkLGFkZCxj bXBmY24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChjbXBmY24o REVDTFRZUEUoaGVhZCkoX2hzX2l0ZXIpLCBhZGQpID4gMCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB9IHdoaWxlICgoX2hzX2l0ZXIgPSBISF9GUk9NX0VMTVQoKGhlYWQpLT5o aC50YmwsIF9oc19pdGVyKS0+bmV4dCkpOyAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0r I2lmZGVmIE5PX0RFQ0xUWVBFCi0rI3VuZGVmIEhBU0hfQUtCSV9JTk5FUl9MT09QCi0rI2RlZmlu ZSBIQVNIX0FLQklfSU5ORVJfTE9PUChoaCxoZWFkLGFkZCxjbXBmY24pICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGNoYXIg Kl9oc19zYXZlZF9oZWFkID0gKGNoYXIqKShoZWFkKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBERUNM VFlQRV9BU1NJR04oaGVhZCwgX2hzX2l0ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgaWYgKGNtcGZjbihoZWFkLCBhZGQpID4gMCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgREVD TFRZUEVfQVNTSUdOKGhlYWQsIF9oc19zYXZlZF9oZWFkKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIERFQ0xUWVBFX0FTU0lHTihoZWFkLCBfaHNfc2F2ZWRfaGVh ZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSB3aGlsZSAo KF9oc19pdGVyID0gSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfaXRlciktPm5leHQp KTsgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKyNlbmRpZgotKwotKyNpZiBIQVNIX05PTkZB VEFMX09PTQotKwotKyNkZWZpbmUgSEFTSF9BRERfVE9fVEFCTEUoaGgsaGVhZCxrZXlwdHIsa2V5 bGVuX2luLGhhc2h2YWwsYWRkLG9vbWVkKSAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICBpZiAoIShvb21lZCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1bnNpZ25lZCBfaGFf Ymt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcysrOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfVE9fQktUKGhh c2h2YWwsIChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hhX2JrdCk7ICAgICAgICAgICAg ICAgICAgXAotKyAgICBIQVNIX0FERF9UT19CS1QoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbX2hh X2JrdF0sIGhoLCAmKGFkZCktPmhoLCBvb21lZCk7ICAgIFwKLSsgICAgaWYgKG9vbWVkKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgSEFTSF9ST0xMQkFDS19CS1QoaGgsIGhlYWQsICYoYWRkKS0+aGgpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hfREVMRVRFX0hI KGhoLCBoZWFkLCAmKGFkZCktPmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAoYWRkKS0+aGgudGJsID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgdXRoYXNoX25vbmZhdGFs X29vbShhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBIQVNIX0JMT09NX0FERCgo aGVhZCktPmhoLnRibCwgaGFzaHZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgSEFTSF9FTUlUX0tFWShoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW5faW4pOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChhZGQpLT5oaC50YmwgPSBOVUxM OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICB1dGhhc2hfbm9uZmF0YWxfb29tKGFkZCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rfSB3aGlsZSAoMCkKLSsKLSsjZWxzZQotKwotKyNkZWZpbmUgSEFTSF9BRERfVE9fVEFCTEUo aGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGhhc2h2YWwsYWRkLG9vbWVkKSAgICAgICAgICAgIFwK LStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaGFfYmt0OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfVE9fQktUKGhhc2h2YWwsIChoZWFk KS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hhX2JrdCk7ICAgICAgICAgICAgICAgICAgICBcCi0r ICBIQVNIX0FERF9UT19CS1QoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbX2hhX2JrdF0sIGhoLCAm KGFkZCktPmhoLCBvb21lZCk7ICAgICAgXAotKyAgSEFTSF9CTE9PTV9BREQoKGhlYWQpLT5oaC50 YmwsIGhhc2h2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IEhBU0hfRU1JVF9LRVkoaGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZW5kaWYKLSsKLSsK LSsjZGVmaW5lIEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLGhlYWQsa2V5 cHRyLGtleWxlbl9pbixoYXNodmFsLGFkZCxjbXBmY24pIFwKLStkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICBJRl9IQVNIX05PTkZBVEFMX09PTSggaW50IF9oYV9vb21lZCA9IDA7ICkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFkZCktPmhoLmhhc2h2ID0g KGhhc2h2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIChhZGQpLT5oaC5rZXkgPSAoY2hhciopIChrZXlwdHIpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAoYWRkKS0+aGgua2V5bGVuID0g KHVuc2lnbmVkKSAoa2V5bGVuX2luKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgaWYgKCEoaGVhZCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGFkZCktPmhoLm5leHQgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgIChhZGQpLT5oaC5wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX01BS0VfVEFCTEUoaGgs IGFkZCwgX2hhX29vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGlmICghX2hhX29vbWVkKSB7ICkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgKGhlYWQpID0gKGFkZCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICBJRl9IQVNIX05PTkZBVEFMX09PTSggfSApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIHZvaWQgKl9oc19pdGVyID0gKGhlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoYWRkKS0+aGgudGJsID0gKGhlYWQp LT5oaC50Ymw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgSEFTSF9BS0JJX0lOTkVSX0xPT1AoaGgsIGhlYWQsIGFkZCwgY21wZmNuKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChfaHNfaXRlcikgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgIChhZGQpLT5oaC5uZXh0ID0gX2hzX2l0ZXI7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBpZiAoKChhZGQpLT5oaC5wcmV2ID0g SEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfaXRlciktPnByZXYpKSB7ICAgICBcCi0r ICAgICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIChhZGQpLT5oaC5wcmV2KS0+bmV4 dCA9IChhZGQpOyAgICAgICAgICAgICAgXAotKyAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgIChoZWFkKSA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0ZXIpLT5wcmV2ID0gKGFkZCk7 ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgSEFTSF9BUFBFTkRfTElTVChoaCwgaGVhZCwgYWRkKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0FERF9UT19UQUJMRShoaCwgaGVhZCwga2V5 cHRyLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCwgX2hhX29vbWVkKTsgICAgICAgXAotKyAgSEFT SF9GU0NLKGhoLCBoZWFkLCAiSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lOT1JERVIiKTsg ICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9BRERf S0VZUFRSX0lOT1JERVIoaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGFkZCxjbXBmY24pICAgICAg ICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaHNfaGFz aHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgSEFTSF9WQUxVRShrZXlwdHIsIGtleWxlbl9pbiwgX2hzX2hhc2h2KTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfQUREX0tFWVBUUl9C WUhBU0hWQUxVRV9JTk9SREVSKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbiwgX2hzX2hhc2h2 LCBhZGQsIGNtcGZjbik7IFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9BRERfQllI QVNIVkFMVUVfSU5PUkRFUihoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZhbCxhZGQs Y21wZmNuKSBcCi0rICBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5PUkRFUihoaCwgaGVh ZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBoYXNodmFsLCBhZGQsIGNtcGZjbikK LSsKLSsjZGVmaW5lIEhBU0hfQUREX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2lu LGFkZCxjbXBmY24pICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0FERF9LRVlQVFJfSU5PUkRF UihoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBhZGQsIGNtcGZjbikK LSsKLSsjZGVmaW5lIEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRShoaCxoZWFkLGtleXB0cixr ZXlsZW5faW4saGFzaHZhbCxhZGQpICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGludCBfaGFfb29tZWQgPSAwOyApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGQpLT5oaC5oYXNodiA9IChoYXNo dmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAoYWRkKS0+aGgua2V5ID0gKGNvbnN0IHZvaWQqKSAoa2V5cHRyKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFkZCktPmhoLmtleWxlbiA9ICh1bnNp Z25lZCkgKGtleWxlbl9pbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIGlmICghKGhlYWQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChhZGQpLT5oaC5uZXh0ID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAoYWRkKS0+aGgucHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9NQUtFX1RBQkxFKGhoLCBhZGQs IF9oYV9vb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCBpZiAoIV9oYV9vb21lZCkgeyApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChoZWFkKSA9IChhZGQpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIH0gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAoYWRkKS0+aGgudGJsID0gKGhlYWQpLT5oaC50Ymw7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9BUFBFTkRfTElTVChoaCwgaGVhZCwg YWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfVE9fVEFCTEUoaGgsIGhlYWQsIGtl eXB0ciwga2V5bGVuX2luLCBoYXNodmFsLCBhZGQsIF9oYV9vb21lZCk7ICAgICAgIFwKLSsgIEhB U0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRSIpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfQURE X0tFWVBUUihoaCxoZWFkLGtleXB0cixrZXlsZW5faW4sYWRkKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hhX2hh c2h2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIEhBU0hfVkFMVUUoa2V5cHRyLCBrZXlsZW5faW4sIF9oYV9oYXNodik7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0FERF9LRVlQVFJf QllIQVNIVkFMVUUoaGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luLCBfaGFfaGFzaHYsIGFkZCk7 ICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0FERF9CWUhBU0hWQUxVRSho aCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZhbCxhZGQpICAgICAgICAgICAgXAotKyAg SEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5hbWUp LCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCkKLSsKLSsjZGVmaW5lIEhBU0hfQUREKGhoLGhlYWQs ZmllbGRuYW1lLGtleWxlbl9pbixhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICBIQVNIX0FERF9LRVlQVFIoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxl bl9pbiwgYWRkKQotKwotKyNkZWZpbmUgSEFTSF9UT19CS1QoaGFzaHYsbnVtX2JrdHMsYmt0KSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICBia3QgPSAoKGhhc2h2KSAmICgobnVtX2JrdHMpIC0gMVUpKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0r Ci0rLyogZGVsZXRlICJkZWxwdHIiIGZyb20gdGhlIGhhc2ggdGFibGUuCi0rICogInRoZSB1c3Vh bCIgcGF0Y2gtdXAgcHJvY2VzcyBmb3IgdGhlIGFwcC1vcmRlciBkb3VibHktbGlua2VkLWxpc3Qu Ci0rICogVGhlIHVzZSBvZiBfaGRfaGhfZGVsIGJlbG93IGRlc2VydmVzIHNwZWNpYWwgZXhwbGFu YXRpb24uCi0rICogVGhlc2UgdXNlZCB0byBiZSBleHByZXNzZWQgdXNpbmcgKGRlbHB0cikgYnV0 IHRoYXQgbGVkIHRvIGEgYnVnCi0rICogaWYgc29tZW9uZSB1c2VkIHRoZSBzYW1lIHN5bWJvbCBm b3IgdGhlIGhlYWQgYW5kIGRlbGV0ZWUsIGxpa2UKLSsgKiAgSEFTSF9ERUxFVEUoaGgsdXNlcnMs dXNlcnMpOwotKyAqIFdlIHdhbnQgdGhhdCB0byB3b3JrLCBidXQgYnkgY2hhbmdpbmcgdGhlIGhl YWQgKHVzZXJzKSBiZWxvdwotKyAqIHdlIHdlcmUgZm9yZmVpdGluZyBvdXIgYWJpbGl0eSB0byBm dXJ0aGVyIHJlZmVyIHRvIHRoZSBkZWxldGVlICh1c2VycykKLSsgKiBpbiB0aGUgcGF0Y2gtdXAg cHJvY2Vzcy4gU29sdXRpb246IHVzZSBzY3JhdGNoIHNwYWNlIHRvCi0rICogY29weSB0aGUgZGVs ZXRlZSBwb2ludGVyLCB0aGVuIHRoZSBsYXR0ZXIgcmVmZXJlbmNlcyBhcmUgdmlhIHRoYXQKLSsg KiBzY3JhdGNoIHBvaW50ZXIgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGUgcmVwb2ludGVkICh1c2Vy cykgc3ltYm9sLgotKyAqLwotKyNkZWZpbmUgSEFTSF9ERUxFVEUoaGgsaGVhZCxkZWxwdHIpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9E RUxFVEVfSEgoaGgsIGhlYWQsICYoZGVscHRyKS0+aGgpCi0rCi0rI2RlZmluZSBIQVNIX0RFTEVU RV9ISChoaCxoZWFkLGRlbHB0cmhoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGNvbnN0IHN0cnVjdCBVVF9o YXNoX2hhbmRsZSAqX2hkX2hoX2RlbCA9IChkZWxwdHJoaCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICBpZiAoKF9oZF9oaF9kZWwtPnByZXYgPT0gTlVMTCkgJiYgKF9oZF9oaF9kZWwt Pm5leHQgPT0gTlVMTCkpIHsgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX0JMT09NX0ZSRUUo KGhlYWQpLT5oaC50YmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHMsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgIChoZWFk KS0+aGgudGJsLT5udW1fYnVja2V0cyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQpKTsg ICAgXAotKyAgICB1dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibCwgc2l6ZW9mKFVUX2hhc2hfdGFi bGUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGhlYWQpID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1bnNpZ25lZCBfaGRfYmt0OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgaWYgKF9oZF9oaF9kZWwgPT0gKGhlYWQpLT5oaC50YmwtPnRhaWwpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgKGhlYWQpLT5oaC50YmwtPnRh aWwgPSBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oZF9oaF9kZWwtPnByZXYpOyAgICAg XAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaWYgKF9oZF9oaF9kZWwtPnByZXYg IT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaGRfaGhfZGVsLT5wcmV2KS0+ bmV4dCA9IF9oZF9oaF9kZWwtPm5leHQ7ICAgXAotKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICBERUNMVFlQRV9BU1NJR04oaGVhZCwgX2hkX2hoX2RlbC0+bmV4dCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICBpZiAoX2hkX2hoX2RlbC0+bmV4dCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5o aC50YmwsIF9oZF9oaF9kZWwtPm5leHQpLT5wcmV2ID0gX2hkX2hoX2RlbC0+cHJldjsgICBcCi0r ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX1RPX0JLVChfaGRfaGhfZGVsLT5o YXNodiwgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzLCBfaGRfYmt0KTsgICAgICAgIFwKLSsg ICAgSEFTSF9ERUxfSU5fQktUKChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19oZF9ia3RdLCBfaGRf aGhfZGVsKTsgICAgICAgICAgICAgICBcCi0rICAgIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMt LTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hfREVM RVRFX0hIIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3 aGlsZSAoMCkKLSsKLSsvKiBjb252ZW5pZW5jZSBmb3JtcyBvZiBIQVNIX0ZJTkQvSEFTSF9BREQv SEFTSF9ERUwgKi8KLSsjZGVmaW5lIEhBU0hfRklORF9TVFIoaGVhZCxmaW5kc3RyLG91dCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICB1bnNpZ25lZCBfdXRoYXNoX2hmc3RyX2tleWxlbiA9ICh1bnNpZ25l ZCl1dGhhc2hfc3RybGVuKGZpbmRzdHIpOyAgICAgICAgICAgIFwKLSsgICAgSEFTSF9GSU5EKGho LCBoZWFkLCBmaW5kc3RyLCBfdXRoYXNoX2hmc3RyX2tleWxlbiwgb3V0KTsgICAgICAgICAgICAg ICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsjZGVmaW5lIEhBU0hfQUREX1NUUihoZWFkLHN0cmZp ZWxkLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1bnNpZ25lZCBfdXRoYXNoX2hhc3RyX2tleWxl biA9ICh1bnNpZ25lZCl1dGhhc2hfc3RybGVuKChhZGQpLT5zdHJmaWVsZCk7ICAgIFwKLSsgICAg SEFTSF9BREQoaGgsIGhlYWQsIHN0cmZpZWxkWzBdLCBfdXRoYXNoX2hhc3RyX2tleWxlbiwgYWRk KTsgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsjZGVmaW5lIEhBU0hfUkVQTEFD RV9TVFIoaGVhZCxzdHJmaWVsZCxhZGQscmVwbGFjZWQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1bnNpZ25lZCBfdXRoYXNo X2hyc3RyX2tleWxlbiA9ICh1bnNpZ25lZCl1dGhhc2hfc3RybGVuKChhZGQpLT5zdHJmaWVsZCk7 ICAgIFwKLSsgICAgSEFTSF9SRVBMQUNFKGhoLCBoZWFkLCBzdHJmaWVsZFswXSwgX3V0aGFzaF9o cnN0cl9rZXlsZW4sIGFkZCwgcmVwbGFjZWQpOyAgICBcCi0rfSB3aGlsZSAoMCkKLSsjZGVmaW5l IEhBU0hfRklORF9JTlQoaGVhZCxmaW5kaW50LG91dCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfRklORChoaCxoZWFkLGZpbmRpbnQsc2l6ZW9m KGludCksb3V0KQotKyNkZWZpbmUgSEFTSF9BRERfSU5UKGhlYWQsaW50ZmllbGQsYWRkKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9BREQoaGgs aGVhZCxpbnRmaWVsZCxzaXplb2YoaW50KSxhZGQpCi0rI2RlZmluZSBIQVNIX1JFUExBQ0VfSU5U KGhlYWQsaW50ZmllbGQsYWRkLHJlcGxhY2VkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICBIQVNIX1JFUExBQ0UoaGgsaGVhZCxpbnRmaWVsZCxzaXplb2YoaW50KSxhZGQscmVw bGFjZWQpCi0rI2RlZmluZSBIQVNIX0ZJTkRfUFRSKGhlYWQsZmluZHB0cixvdXQpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX0ZJTkQoaGgsaGVh ZCxmaW5kcHRyLHNpemVvZih2b2lkICopLG91dCkKLSsjZGVmaW5lIEhBU0hfQUREX1BUUihoZWFk LHB0cmZpZWxkLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIEhBU0hfQUREKGhoLGhlYWQscHRyZmllbGQsc2l6ZW9mKHZvaWQgKiksYWRkKQotKyNk ZWZpbmUgSEFTSF9SRVBMQUNFX1BUUihoZWFkLHB0cmZpZWxkLGFkZCxyZXBsYWNlZCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9SRVBMQUNFKGhoLGhlYWQscHRyZmll bGQsc2l6ZW9mKHZvaWQgKiksYWRkLHJlcGxhY2VkKQotKyNkZWZpbmUgSEFTSF9ERUwoaGVhZCxk ZWxwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgSEFTSF9ERUxFVEUoaGgsaGVhZCxkZWxwdHIpCi0rCi0rLyogSEFTSF9GU0NLIGNo ZWNrcyBoYXNoIGludGVncml0eSBvbiBldmVyeSBhZGQvZGVsZXRlIHdoZW4gSEFTSF9ERUJVRyBp cyBkZWZpbmVkLgotKyAqIFRoaXMgaXMgZm9yIHV0aGFzaCBkZXZlbG9wZXIgb25seTsgaXQgY29t cGlsZXMgYXdheSBpZiBIQVNIX0RFQlVHIGlzbid0IGRlZmluZWQuCi0rICovCi0rI2lmZGVmIEhB U0hfREVCVUcKLSsjaW5jbHVkZSA8c3RkaW8uaD4gICAvKiBmcHJpbnRmLCBzdGRlcnIgKi8KLSsj ZGVmaW5lIEhBU0hfT09QUyguLi4pIGRvIHsgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKTsg ZXhpdCgtMSk7IH0gd2hpbGUgKDApCi0rI2RlZmluZSBIQVNIX0ZTQ0soaGgsaGVhZCx3aGVyZSkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqX3RoaDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBpZiAo aGVhZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICB1bnNpZ25lZCBfYmt0X2k7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5z aWduZWQgX2NvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIGNoYXIgKl9wcmV2OyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBmb3Ig KF9ia3RfaSA9IDA7IF9ia3RfaSA8IChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0czsgKytfYmt0 X2kpIHsgICAgICAgICAgIFwKLSsgICAgICB1bnNpZ25lZCBfYmt0X2NvdW50ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgX3Ro aCA9IChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19ia3RfaV0uaGhfaGVhZDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgIF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB3aGls ZSAoX3RoaCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgICBpZiAoX3ByZXYgIT0gKGNoYXIqKShfdGhoLT5oaF9w cmV2KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBI QVNIX09PUFMoIiVzOiBpbnZhbGlkIGhoX3ByZXYgJXAsIGFjdHVhbCAlcFxuIiwgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICh3aGVyZSksICh2b2lkKilfdGhoLT5oaF9w cmV2LCAodm9pZCopX3ByZXYpOyAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgX2JrdF9jb3VudCsrOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9wcmV2 ID0gKGNoYXIqKShfdGhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICBfdGhoID0gX3RoaC0+aGhfbmV4dDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICBfY291bnQgKz0gX2JrdF9jb3VudDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgaWYgKChoZWFk KS0+aGgudGJsLT5idWNrZXRzW19ia3RfaV0uY291bnQgIT0gIF9ia3RfY291bnQpIHsgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgSEFTSF9PT1BTKCIlczogaW52YWxpZCBidWNrZXQgY291bnQg JXUsIGFjdHVhbCAldVxuIiwgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAod2hl cmUpLCAoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfYmt0X2ldLmNvdW50LCBfYmt0X2NvdW50KTsg ICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgaWYgKF9jb3VudCAhPSAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgSEFTSF9PT1BTKCIl czogaW52YWxpZCBoaCBpdGVtIGNvdW50ICV1LCBhY3R1YWwgJXVcbiIsICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICAod2hlcmUpLCAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zLCBf Y291bnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgIF9jb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBfcHJldiA9IE5VTEw7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgX3RoaCA9ICAmKGhlYWQpLT5oaDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHdoaWxlIChfdGhoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgIF9jb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBpZiAoX3ByZXYgIT0gKGNo YXIqKV90aGgtPnByZXYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICBIQVNIX09PUFMoIiVzOiBpbnZhbGlkIHByZXYgJXAsIGFjdHVhbCAlcFxu IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICh3aGVyZSksICh2 b2lkKilfdGhoLT5wcmV2LCAodm9pZCopX3ByZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgX3ByZXYgPSAoY2hhciopRUxN VF9GUk9NX0hIKChoZWFkKS0+aGgudGJsLCBfdGhoKTsgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgIF90aGggPSAoX3RoaC0+bmV4dCA/IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRi bCwgX3RoaC0+bmV4dCkgOiBOVUxMKTsgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIGlmIChfY291bnQgIT0gKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcykgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hfT09QUygiJXM6IGludmFs aWQgYXBwIGl0ZW0gY291bnQgJXUsIGFjdHVhbCAldVxuIiwgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgKHdoZXJlKSwgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcywgX2NvdW50KTsg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKyNlbHNlCi0rI2RlZmlu ZSBIQVNIX0ZTQ0soaGgsaGVhZCx3aGVyZSkKLSsjZW5kaWYKLSsKLSsvKiBXaGVuIGNvbXBpbGVk IHdpdGggLURIQVNIX0VNSVRfS0VZUywgbGVuZ3RoLXByZWZpeGVkIGtleXMgYXJlIGVtaXR0ZWQg dG8KLSsgKiB0aGUgZGVzY3JpcHRvciB0byB3aGljaCB0aGlzIG1hY3JvIGlzIGRlZmluZWQgZm9y IHR1bmluZyB0aGUgaGFzaCBmdW5jdGlvbi4KLSsgKiBUaGUgYXBwIGNhbiAjaW5jbHVkZSA8dW5p c3RkLmg+IHRvIGdldCB0aGUgcHJvdG90eXBlIGZvciB3cml0ZSgyKS4gKi8KLSsjaWZkZWYgSEFT SF9FTUlUX0tFWVMKLSsjZGVmaW5lIEhBU0hfRU1JVF9LRVkoaGgsaGVhZCxrZXlwdHIsZmllbGRs ZW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgdW5zaWduZWQgX2tsZW4gPSBmaWVsZGxlbjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHdyaXRlKEhBU0hfRU1J VF9LRVlTLCAmX2tsZW4sIHNpemVvZihfa2xlbikpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB3cml0ZShIQVNIX0VNSVRfS0VZUywga2V5cHRyLCAodW5zaWduZWQgbG9u ZylmaWVsZGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rI2Vs c2UKLSsjZGVmaW5lIEhBU0hfRU1JVF9LRVkoaGgsaGVhZCxrZXlwdHIsZmllbGRsZW4pCi0rI2Vu ZGlmCi0rCi0rLyogVGhlIEJlcm5zdGVpbiBoYXNoIGZ1bmN0aW9uLCB1c2VkIGluIFBlcmwgcHJp b3IgdG8gdjUuNi4gTm90ZSAoeDw8NSt4KT14KjMzLiAqLwotKyNkZWZpbmUgSEFTSF9CRVIoa2V5 LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaGJfa2V5bGVu ID0gKHVuc2lnbmVkKWtleWxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgY29uc3QgdW5zaWduZWQgY2hhciAqX2hiX2tleSA9IChjb25zdCB1bnNpZ25lZCBj aGFyKikoa2V5KTsgICAgICAgICAgICAgICAgICAgIFwKLSsgIChoYXNodikgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICB3aGlsZSAoX2hiX2tleWxlbi0tICE9IDBVKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoaGFzaHYpID0gKCgoaGFzaHYp IDw8IDUpICsgKGhhc2h2KSkgKyAqX2hiX2tleSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsKLSsvKiBT QVgvRk5WL09BVC9KRU4gaGFzaCBmdW5jdGlvbnMgYXJlIG1hY3JvIHZhcmlhbnRzIG9mIHRob3Nl IGxpc3RlZCBhdAotKyAqIGh0dHA6Ly9ldGVybmFsbHljb25mdXp6bGVkLmNvbS90dXRzL2FsZ29y aXRobXMvanN3X3R1dF9oYXNoaW5nLmFzcHgKLSsgKiAoYXJjaGl2ZSBsaW5rOiBodHRwczovL2Fy Y2hpdmUuaXMvSXZjYW4gKQotKyAqLwotKyNkZWZpbmUgSEFTSF9TQVgoa2V5LGtleWxlbixoYXNo dikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfc3hfaTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgY29u c3QgdW5zaWduZWQgY2hhciAqX2hzX2tleSA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikoa2V5KTsg ICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2ID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBmb3Ig KF9zeF9pPTA7IF9zeF9pIDwga2V5bGVuOyBfc3hfaSsrKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICBoYXNodiBePSAoaGFzaHYgPDwgNSkgKyAoaGFzaHYg Pj4gMikgKyBfaHNfa2V5W19zeF9pXTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsvKiBGTlYtMWEgdmFyaWF0aW9uICov Ci0rI2RlZmluZSBIQVNIX0ZOVihrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIHVuc2lnbmVkIF9mbl9pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBjb25zdCB1bnNpZ25lZCBjaGFyICpfaGZf a2V5ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShrZXkpOyAgICAgICAgICAgICAgICAgICAgXAot KyAgKGhhc2h2KSA9IDIxNjYxMzYyNjFVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGZvciAoX2ZuX2k9MDsgX2ZuX2kgPCBrZXls ZW47IF9mbl9pKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIGhhc2h2ID0gaGFzaHYgXiBfaGZfa2V5W19mbl9pXTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBoYXNodiA9IGhhc2h2ICogMTY3Nzc2MTlV OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hf T0FUKGtleSxrZXlsZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hv X2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9ob19rZXk9KGNvbnN0IHVuc2ln bmVkIGNoYXIqKShrZXkpOyAgICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgZm9yKF9ob19pPTA7IF9ob19pIDwga2V5bGVuOyBfaG9faSsrKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBoYXNodiArPSBf aG9fa2V5W19ob19pXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgaGFzaHYgKz0gKGhhc2h2IDw8IDEwKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIGhhc2h2IF49ICho YXNodiA+PiA2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiArPSAoaGFzaHYg PDwgMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgaGFzaHYgXj0gKGhhc2h2ID4+IDExKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2ICs9IChoYXNodiA8 PCAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfSkVOX01JWChhLGIsYykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgYSAtPSBiOyBhIC09IGM7IGEgXj0gKCBjID4+IDEz ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGIg LT0gYzsgYiAtPSBhOyBiIF49ICggYSA8PCA4ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICBjIC09IGE7IGMgLT0gYjsgYyBePSAoIGIgPj4gMTMg KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgYSAt PSBiOyBhIC09IGM7IGEgXj0gKCBjID4+IDEyICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIGIgLT0gYzsgYiAtPSBhOyBiIF49ICggYSA8PCAxNiAp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBjIC09 IGE7IGMgLT0gYjsgYyBePSAoIGIgPj4gNSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgYSAtPSBiOyBhIC09IGM7IGEgXj0gKCBjID4+IDMgKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGIgLT0g YzsgYiAtPSBhOyBiIF49ICggYSA8PCAxMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBjIC09IGE7IGMgLT0gYjsgYyBePSAoIGIgPj4gMTUgKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUg KDApCi0rCi0rI2RlZmluZSBIQVNIX0pFTihrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIHVuc2lnbmVkIF9oal9pLF9oal9qLF9oal9rOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBjb25zdCBjaGFy ICpfaGpfa2V5PSh1bnNpZ25lZCBjb25zdCBjaGFyKikoa2V5KTsgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgaGFzaHYgPSAweGZlZWRiZWVmdTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIF9oal9pID0gX2hqX2ogPSAweDll Mzc3OWI5dTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBfaGpfayA9ICh1bnNpZ25lZCkoa2V5bGVuKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgd2hpbGUgKF9oal9rID49IDEyVSkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgX2hqX2kgKz0gICAgKF9oal9rZXlbMF0gKyAoICh1bnNpZ25lZClfaGpfa2V5WzFd IDw8IDggKSAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICArICggKHVuc2lnbmVkKV9o al9rZXlbMl0gPDwgMTYgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzNdIDw8IDI0ICkgKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX2hqX2ogKz0gICAgKF9oal9rZXlb NF0gKyAoICh1bnNpZ25lZClfaGpfa2V5WzVdIDw8IDggKSAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICArICggKHVuc2lnbmVkKV9oal9rZXlbNl0gPDwgMTYgKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpf a2V5WzddIDw8IDI0ICkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgaGFzaHYgKz0gKF9oal9rZXlbOF0gKyAoICh1bnNpZ25lZClfaGpfa2V5WzldIDw8IDgg KSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICArICggKHVuc2lnbmVkKV9oal9r ZXlbMTBdIDw8IDE2ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzExXSA8PCAyNCApICk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICBIQVNIX0pFTl9NSVgoX2hqX2ksIF9oal9qLCBoYXNodik7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgIF9oal9rZXkgKz0gMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICBfaGpfayAtPSAxMlU7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2ICs9ICh1bnNpZ25lZCkoa2V5bGVuKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBz d2l0Y2ggKCBfaGpfayApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBjYXNlIDExOiBoYXNodiArPSAoICh1bnNpZ25l ZClfaGpfa2V5WzEwXSA8PCAyNCApOyAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKLSsgICAg Y2FzZSAxMDogaGFzaHYgKz0gKCAodW5zaWduZWQpX2hqX2tleVs5XSA8PCAxNiApOyAgLyogRkFM TFRIUk9VR0ggKi8gICAgICAgICBcCi0rICAgIGNhc2UgOTogIGhhc2h2ICs9ICggKHVuc2lnbmVk KV9oal9rZXlbOF0gPDwgOCApOyAgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAotKyAgICBj YXNlIDg6ICBfaGpfaiArPSAoICh1bnNpZ25lZClfaGpfa2V5WzddIDw8IDI0ICk7ICAvKiBGQUxM VEhST1VHSCAqLyAgICAgICAgIFwKLSsgICAgY2FzZSA3OiAgX2hqX2ogKz0gKCAodW5zaWduZWQp X2hqX2tleVs2XSA8PCAxNiApOyAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCi0rICAgIGNh c2UgNjogIF9oal9qICs9ICggKHVuc2lnbmVkKV9oal9rZXlbNV0gPDwgOCApOyAgIC8qIEZBTExU SFJPVUdIICovICAgICAgICAgXAotKyAgICBjYXNlIDU6ICBfaGpfaiArPSBfaGpfa2V5WzRdOyAg ICAgICAgICAgICAgICAgICAgICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKLSsgICAgY2Fz ZSA0OiAgX2hqX2kgKz0gKCAodW5zaWduZWQpX2hqX2tleVszXSA8PCAyNCApOyAgLyogRkFMTFRI Uk9VR0ggKi8gICAgICAgICBcCi0rICAgIGNhc2UgMzogIF9oal9pICs9ICggKHVuc2lnbmVkKV9o al9rZXlbMl0gPDwgMTYgKTsgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAotKyAgICBjYXNl IDI6ICBfaGpfaSArPSAoICh1bnNpZ25lZClfaGpfa2V5WzFdIDw8IDggKTsgICAvKiBGQUxMVEhS T1VHSCAqLyAgICAgICAgIFwKLSsgICAgY2FzZSAxOiAgX2hqX2kgKz0gX2hqX2tleVswXTsgICAg ICAgICAgICAgICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCi0rICAgIGRlZmF1 bHQ6IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfSkVO X01JWChfaGpfaSwgX2hqX2osIGhhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsvKiBUaGUgUGF1bCBIc2llaCBoYXNo IGZ1bmN0aW9uICovCi0rI3VuZGVmIGdldDE2Yml0cwotKyNpZiAoZGVmaW5lZChfX0dOVUNfXykg JiYgZGVmaW5lZChfX2kzODZfXykpIHx8IGRlZmluZWQoX19XQVRDT01DX18pICAgICAgICAgICAg IFwKLSsgIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQgKF9fQk9STEFORENfXykgfHwg ZGVmaW5lZCAoX19UVVJCT0NfXykKLSsjZGVmaW5lIGdldDE2Yml0cyhkKSAoKigoY29uc3QgdWlu dDE2X3QgKikgKGQpKSkKLSsjZW5kaWYKLSsKLSsjaWYgIWRlZmluZWQgKGdldDE2Yml0cykKLSsj ZGVmaW5lIGdldDE2Yml0cyhkKSAoKCgodWludDMyX3QpKCgoY29uc3QgdWludDhfdCAqKShkKSlb MV0pKSA8PCA4KSAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICArKHVpbnQz Ml90KSgoKGNvbnN0IHVpbnQ4X3QgKikoZCkpWzBdKSApCi0rI2VuZGlmCi0rI2RlZmluZSBIQVNI X1NGSChrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVuc2lnbmVkIGNv bnN0IGNoYXIgKl9zZmhfa2V5PSh1bnNpZ25lZCBjb25zdCBjaGFyKikoa2V5KTsgICAgICAgICAg ICAgICAgICAgICBcCi0rICB1aW50MzJfdCBfc2ZoX3RtcCwgX3NmaF9sZW4gPSAodWludDMyX3Qp a2V5bGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIHVuc2lnbmVkIF9zZmhfcmVtID0gX3NmaF9sZW4gJiAzVTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBfc2ZoX2xlbiA+Pj0g MjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgaGFzaHYgPSAweGNhZmViYWJldTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAvKiBNYWluIGxvb3AgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgZm9yICg7X3NmaF9sZW4g PiAwVTsgX3NmaF9sZW4tLSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgaGFzaHYgICAgKz0gZ2V0MTZiaXRzIChfc2ZoX2tleSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9zZmhfdG1wICA9ICgo dWludDMyX3QpKGdldDE2Yml0cyAoX3NmaF9rZXkrMikpIDw8IDExKSBeIGhhc2h2OyAgICAgICAg ICAgICAgXAotKyAgICBoYXNodiAgICAgPSAoaGFzaHYgPDwgMTYpIF4gX3NmaF90bXA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX3NmaF9rZXkgKz0gMlUq c2l6ZW9mICh1aW50MTZfdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgIGhhc2h2ICAgICs9IGhhc2h2ID4+IDExOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAvKiBIYW5kbGUgZW5kIGNhc2Vz ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgc3dpdGNoIChfc2ZoX3JlbSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgY2FzZSAzOiBoYXNodiArPSBn ZXQxNmJpdHMgKF9zZmhfa2V5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgICAgaGFzaHYgXj0gaGFzaHYgPDwgMTY7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGhhc2h2IF49ICh1 aW50MzJfdCkoX3NmaF9rZXlbc2l6ZW9mICh1aW50MTZfdCldKSA8PCAxODsgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICBoYXNodiArPSBoYXNodiA+PiAxMTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgYnJlYWs7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICBjYXNlIDI6IGhhc2h2ICs9IGdldDE2Yml0cyAoX3NmaF9rZXkpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBoYXNodiBePSBoYXNo diA8PCAxMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgICAgaGFzaHYgKz0gaGFzaHYgPj4gMTc7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgY2FzZSAxOiBoYXNodiArPSAqX3NmaF9rZXk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgaGFzaHYgXj0gaGFzaHYg PDwgMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICAgIGhhc2h2ICs9IGhhc2h2ID4+IDE7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBicmVhazsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIGRlZmF1bHQ6IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAvKiBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZp bmFsIDEyNyBiaXRzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg aGFzaHYgXj0gaGFzaHYgPDwgMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2ICs9IGhhc2h2ID4+IDU7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBo YXNodiBePSBoYXNodiA8PCA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgaGFzaHYgKz0gaGFzaHYgPj4gMTc7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGhh c2h2IF49IGhhc2h2IDw8IDI1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiArPSBoYXNodiA+PiA2OyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hp bGUgKDApCi0rCi0rLyogaXRlcmF0ZSBvdmVyIGl0ZW1zIGluIGEga25vd24gYnVja2V0IHRvIGZp bmQgZGVzaXJlZCBpdGVtICovCi0rI2RlZmluZSBIQVNIX0ZJTkRfSU5fQktUKHRibCxoaCxoZWFk LGtleXB0cixrZXlsZW5faW4saGFzaHZhbCxvdXQpICAgICAgICAgICAgICAgXAotK2RvIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIGlmICgoaGVhZCkuaGhfaGVhZCAhPSBOVUxMKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIERFQ0xU WVBFX0FTU0lHTihvdXQsIEVMTVRfRlJPTV9ISCh0YmwsIChoZWFkKS5oaF9oZWFkKSk7ICAgICAg ICAgICAgICAgICAgICAgXAotKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKG91dCkg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgd2hpbGUgKChv dXQpICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgaWYgKChvdXQpLT5oaC5oYXNodiA9PSAoaGFzaHZhbCkgJiYg KG91dCktPmhoLmtleWxlbiA9PSAoa2V5bGVuX2luKSkgeyAgICAgICBcCi0rICAgICAgaWYgKEhB U0hfS0VZQ01QKChvdXQpLT5oaC5rZXksIGtleXB0ciwga2V5bGVuX2luKSA9PSAwKSB7ICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBpZiAoKG91dCkt PmhoLmhoX25leHQgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICBERUNMVFlQRV9BU1NJR04ob3V0LCBFTE1UX0ZST01fSEgodGJs LCAob3V0KS0+aGguaGhfbmV4dCkpOyAgICAgICAgICAgICAgICBcCi0rICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgIChvdXQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0r LyogYWRkIGFuIGl0ZW0gdG8gYSBidWNrZXQgICovCi0rI2RlZmluZSBIQVNIX0FERF9UT19CS1Qo aGVhZCxoaCxhZGRoaCxvb21lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIFVUX2hhc2hfYnVja2V0ICpfaGFfaGVh ZCA9ICYoaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICBfaGFfaGVhZC0+Y291bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFkZGhoKS0+aGhfbmV4dCA9IF9oYV9o ZWFkLT5oaF9oZWFkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIChhZGRoaCktPmhoX3ByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBpZiAoX2hhX2hlYWQtPmhoX2hlYWQgIT0g TlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICBfaGFfaGVhZC0+aGhfaGVhZC0+aGhfcHJldiA9IChhZGRoaCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICBfaGFfaGVhZC0+aGhfaGVhZCA9IChhZGRoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKChfaGFfaGVhZC0+Y291bnQgPj0gKChf aGFfaGVhZC0+ZXhwYW5kX211bHQgKyAxVSkgKiBIQVNIX0JLVF9DQVBBQ0lUWV9USFJFU0gpKSBc Ci0rICAgICAgJiYgIShhZGRoaCktPnRibC0+bm9leHBhbmQpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX0VYUEFORF9CVUNLRVRTKGFk ZGhoLChhZGRoaCktPnRibCwgb29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgaWYgKG9vbWVkKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgSEFTSF9ERUxfSU5fQktUKGhlYWQsYWRkaGgpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9 IHdoaWxlICgwKQotKwotKy8qIHJlbW92ZSBhbiBpdGVtIGZyb20gYSBnaXZlbiBidWNrZXQgKi8K LSsjZGVmaW5lIEhBU0hfREVMX0lOX0JLVChoZWFkLGRlbGhoKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgVVRfaGFzaF9idWNrZXQgKl9oZF9oZWFkID0gJihoZWFkKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIF9oZF9oZWFkLT5jb3VudC0tOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICBpZiAoX2hkX2hlYWQtPmhoX2hlYWQgPT0gKGRlbGhoKSkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBfaGRfaGVhZC0+aGhfaGVhZCA9IChkZWxo aCktPmhoX25leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBpZiAoKGRlbGhoKS0+aGhfcHJldikgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAoZGVsaGgpLT5oaF9wcmV2LT5oaF9uZXh0ID0gKGRlbGhoKS0+aGhfbmV4dDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBp ZiAoKGRlbGhoKS0+aGhfbmV4dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoZGVsaGgpLT5oaF9uZXh0LT5oaF9wcmV2ID0g KGRlbGhoKS0+aGhfcHJldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsvKiBCdWNrZXQgZXhwYW5z aW9uIGhhcyB0aGUgZWZmZWN0IG9mIGRvdWJsaW5nIHRoZSBudW1iZXIgb2YgYnVja2V0cwotKyAq IGFuZCByZWRpc3RyaWJ1dGluZyB0aGUgaXRlbXMgaW50byB0aGUgbmV3IGJ1Y2tldHMuIElkZWFs bHkgdGhlCi0rICogaXRlbXMgd2lsbCBkaXN0cmlidXRlIG1vcmUgb3IgbGVzcyBldmVubHkgaW50 byB0aGUgbmV3IGJ1Y2tldHMKLSsgKiAodGhlIGV4dGVudCB0byB3aGljaCB0aGlzIGlzIHRydWUg aXMgYSBtZWFzdXJlIG9mIHRoZSBxdWFsaXR5IG9mCi0rICogdGhlIGhhc2ggZnVuY3Rpb24gYXMg aXQgYXBwbGllcyB0byB0aGUga2V5IGRvbWFpbikuCi0rICoKLSsgKiBXaXRoIHRoZSBpdGVtcyBk aXN0cmlidXRlZCBpbnRvIG1vcmUgYnVja2V0cywgdGhlIGNoYWluIGxlbmd0aAotKyAqIChpdGVt IGNvdW50KSBpbiBlYWNoIGJ1Y2tldCBpcyByZWR1Y2VkLiBUaHVzIGJ5IGV4cGFuZGluZyBidWNr ZXRzCi0rICogdGhlIGhhc2gga2VlcHMgYSBib3VuZCBvbiB0aGUgY2hhaW4gbGVuZ3RoLiBUaGlz IGJvdW5kZWQgY2hhaW4KLSsgKiBsZW5ndGggaXMgdGhlIGVzc2VuY2Ugb2YgaG93IGEgaGFzaCBw cm92aWRlcyBjb25zdGFudCB0aW1lIGxvb2t1cC4KLSsgKgotKyAqIFRoZSBjYWxjdWxhdGlvbiBv ZiB0YmwtPmlkZWFsX2NoYWluX21heGxlbiBiZWxvdyBkZXNlcnZlcyBzb21lCi0rICogZXhwbGFu YXRpb24uIEZpcnN0LCBrZWVwIGluIG1pbmQgdGhhdCB3ZSdyZSBjYWxjdWxhdGluZyB0aGUgaWRl YWwKLSsgKiBtYXhpbXVtIGNoYWluIGxlbmd0aCBiYXNlZCBvbiB0aGUgKm5ldyogKGRvdWJsZWQp IGJ1Y2tldCBjb3VudC4KLSsgKiBJbiBmcmFjdGlvbnMgdGhpcyBpcyBqdXN0IG4vYiAobj1udW1i ZXIgb2YgaXRlbXMsYj1uZXcgbnVtIGJ1Y2tldHMpLgotKyAqIFNpbmNlIHRoZSBpZGVhbCBjaGFp biBsZW5ndGggaXMgYW4gaW50ZWdlciwgd2Ugd2FudCB0byBjYWxjdWxhdGUKLSsgKiBjZWlsKG4v YikuIFdlIGRvbid0IGRlcGVuZCBvbiBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGluIHRoaXMK LSsgKiBoYXNoLCBzbyB0byBjYWxjdWxhdGUgY2VpbChuL2IpIHdpdGggaW50ZWdlcnMgd2UgY291 bGQgd3JpdGUKLSsgKgotKyAqICAgICAgY2VpbChuL2IpID0gKG4vYikgKyAoKG4lYik/MTowKQot KyAqCi0rICogYW5kIGluIGZhY3QgYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgaGFzaCBkaWQg anVzdCB0aGF0LgotKyAqIEJ1dCBub3cgd2UgaGF2ZSBpbXByb3ZlZCB0aGluZ3MgYSBiaXQgYnkg cmVjb2duaXppbmcgdGhhdCBiIGlzCi0rICogYWx3YXlzIGEgcG93ZXIgb2YgdHdvLiBXZSBrZWVw IGl0cyBiYXNlIDIgbG9nIGhhbmR5IChjYWxsIGl0IGxiKSwKLSsgKiBzbyBub3cgd2UgY2FuIHdy aXRlIHRoaXMgd2l0aCBhIGJpdCBzaGlmdCBhbmQgbG9naWNhbCBBTkQ6Ci0rICoKLSsgKiAgICAg IGNlaWwobi9iKSA9IChuPj5sYikgKyAoIChuICYgKGItMSkpID8gMTowKQotKyAqCi0rICovCi0r I2RlZmluZSBIQVNIX0VYUEFORF9CVUNLRVRTKGhoLHRibCxvb21lZCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IHVuc2lnbmVkIF9oZV9ia3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaGVfYmt0X2k7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg c3RydWN0IFVUX2hhc2hfaGFuZGxlICpfaGVfdGhoLCAqX2hlX2hoX254dDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIFVUX2hhc2hfYnVja2V0ICpfaGVfbmV3X2J1Y2tl dHMsICpfaGVfbmV3Ymt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBf aGVfbmV3X2J1Y2tldHMgPSAoVVRfaGFzaF9idWNrZXQqKXV0aGFzaF9tYWxsb2MoICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBVVF9oYXNo X2J1Y2tldCkgKiAodGJsKS0+bnVtX2J1Y2tldHMgKiAyVSk7ICAgICAgICAgICAgIFwKLSsgIGlm ICghX2hlX25ld19idWNrZXRzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfUkVDT1JEX09PTShvb21lZCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdXRoYXNoX2J6ZXJvKF9oZV9uZXdfYnVja2V0cywg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSAqICh0YmwpLT5udW1fYnVja2V0cyAqIDJV KTsgICAgICAgICAgICAgICAgXAotKyAgICAodGJsKS0+aWRlYWxfY2hhaW5fbWF4bGVuID0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg KCh0YmwpLT5udW1faXRlbXMgPj4gKCh0YmwpLT5sb2cyX251bV9idWNrZXRzKzFVKSkgKyAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICgoKCh0YmwpLT5udW1faXRlbXMgJiAoKCh0Ymwp LT5udW1fYnVja2V0cyoyVSktMVUpKSAhPSAwVSkgPyAxVSA6IDBVKTsgICAgXAotKyAgICAodGJs KS0+bm9uaWRlYWxfaXRlbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgZm9yIChfaGVfYmt0X2kgPSAwOyBfaGVfYmt0X2kgPCAo dGJsKS0+bnVtX2J1Y2tldHM7IF9oZV9ia3RfaSsrKSB7ICAgICAgICAgICBcCi0rICAgICAgX2hl X3RoaCA9ICh0YmwpLT5idWNrZXRzWyBfaGVfYmt0X2kgXS5oaF9oZWFkOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgIHdoaWxlIChfaGVfdGhoICE9IE5VTEwpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9o ZV9oaF9ueHQgPSBfaGVfdGhoLT5oaF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgICBIQVNIX1RPX0JLVChfaGVfdGhoLT5oYXNodiwgKHRi bCktPm51bV9idWNrZXRzICogMlUsIF9oZV9ia3QpOyAgICAgICAgICAgXAotKyAgICAgICAgX2hl X25ld2JrdCA9ICYoX2hlX25ld19idWNrZXRzW19oZV9ia3RdKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgIGlmICgrKyhfaGVfbmV3Ymt0LT5jb3VudCkgPiAodGJs KS0+aWRlYWxfY2hhaW5fbWF4bGVuKSB7ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICh0 YmwpLT5ub25pZGVhbF9pdGVtcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgICBpZiAoX2hlX25ld2JrdC0+Y291bnQgPiBfaGVfbmV3 Ymt0LT5leHBhbmRfbXVsdCAqICh0YmwpLT5pZGVhbF9jaGFpbl9tYXhsZW4pIHsgXAotKyAgICAg ICAgICAgIF9oZV9uZXdia3QtPmV4cGFuZF9tdWx0Kys7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgX2hlX3RoaC0+aGhfcHJldiA9IE5VTEw7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg IF9oZV90aGgtPmhoX25leHQgPSBfaGVfbmV3Ymt0LT5oaF9oZWFkOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBpZiAoX2hlX25ld2JrdC0+aGhfaGVhZCAhPSBO VUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICBfaGVfbmV3Ymt0LT5oaF9oZWFkLT5oaF9wcmV2ID0gX2hlX3RoaDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBf aGVfbmV3Ymt0LT5oaF9oZWFkID0gX2hlX3RoaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgX2hlX3RoaCA9IF9oZV9oaF9ueHQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1dGhhc2hf ZnJlZSgodGJsKS0+YnVja2V0cywgKHRibCktPm51bV9idWNrZXRzICogc2l6ZW9mKHN0cnVjdCBV VF9oYXNoX2J1Y2tldCkpOyBcCi0rICAgICh0YmwpLT5udW1fYnVja2V0cyAqPSAyVTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAodGJs KS0+bG9nMl9udW1fYnVja2V0cysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgKHRibCktPmJ1Y2tldHMgPSBfaGVfbmV3X2J1Y2tldHM7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICh0Ymwp LT5pbmVmZl9leHBhbmRzID0gKCh0YmwpLT5ub25pZGVhbF9pdGVtcyA+ICgodGJsKS0+bnVtX2l0 ZW1zID4+IDEpKSA/ICAgXAotKyAgICAgICAgKCh0YmwpLT5pbmVmZl9leHBhbmRzKzFVKSA6IDBV OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaWYgKCh0 YmwpLT5pbmVmZl9leHBhbmRzID4gMVUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgKHRibCktPm5vZXhwYW5kID0gMTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIHV0aGFz aF9ub2V4cGFuZF9meWkodGJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHV0aGFzaF9l eHBhbmRfZnlpKHRibCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQot KwotKwotKy8qIFRoaXMgaXMgYW4gYWRhcHRhdGlvbiBvZiBTaW1vbiBUYXRoYW0ncyBPKG4gbG9n KG4pKSBtZXJnZXNvcnQgKi8KLSsvKiBOb3RlIHRoYXQgSEFTSF9TT1JUIGFzc3VtZXMgdGhlIGhh c2ggaGFuZGxlIG5hbWUgdG8gYmUgaGguCi0rICogSEFTSF9TUlQgd2FzIGFkZGVkIHRvIGFsbG93 IHRoZSBoYXNoIGhhbmRsZSBuYW1lIHRvIGJlIHBhc3NlZCBpbi4gKi8KLSsjZGVmaW5lIEhBU0hf U09SVChoZWFkLGNtcGZjbikgSEFTSF9TUlQoaGgsaGVhZCxjbXBmY24pCi0rI2RlZmluZSBIQVNI X1NSVChoaCxoZWFkLGNtcGZjbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVuc2lnbmVkIF9o c19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaHNfbG9vcGluZyxfaHNfbm1lcmdlcyxfaHNfaW5z aXplLF9oc19wc2l6ZSxfaHNfcXNpemU7ICAgICAgICAgICAgICAgXAotKyAgc3RydWN0IFVUX2hh c2hfaGFuZGxlICpfaHNfcCwgKl9oc19xLCAqX2hzX2UsICpfaHNfbGlzdCwgKl9oc190YWlsOyAg ICAgICAgICAgIFwKLSsgIGlmIChoZWFkICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9oc19pbnNpemUg PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBfaHNfbG9vcGluZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX2hzX2xpc3QgPSAm KChoZWFkKS0+aGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIHdoaWxlIChfaHNfbG9vcGluZyAhPSAwVSkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIF9oc19wID0gX2hz X2xpc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICBfaHNfbGlzdCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgX2hzX3RhaWwgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgIF9oc19ubWVyZ2VzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB3aGlsZSAoX2hzX3Ag IT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICBfaHNfbm1lcmdlcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgX2hzX3EgPSBfaHNf cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgIF9oc19wc2l6ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBmb3IgKF9oc19pID0g MDsgX2hzX2kgPCBfaHNfaW5zaXplOyArK19oc19pKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgICBfaHNfcHNpemUrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgX2hzX3EgPSAoKF9o c19xLT5uZXh0ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcS0+bmV4 dCkgOiBOVUxMKTsgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBpZiAoX2hzX3EgPT0g TlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9oc19xc2l6ZSA9IF9oc19p bnNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICB3aGlsZSAoKF9oc19wc2l6ZSAhPSAwVSkgfHwgKChfaHNfcXNpemUgIT0gMFUp ICYmIChfaHNfcSAhPSBOVUxMKSkpIHsgICAgXAotKyAgICAgICAgICBpZiAoX2hzX3BzaXplID09 IDBVKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgICBfaHNfZSA9IF9oc19xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hzX3EgPSAoKF9oc19x LT5uZXh0ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcS0+bmV4dCkg OiBOVUxMKTsgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBfaHNfcXNpemUtLTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgIH0gZWxzZSBpZiAoKF9oc19xc2l6ZSA9PSAwVSkgfHwgKF9oc19xID09IE5VTEwp KSB7ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc19lID0gX2hzX3A7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgICAgICBpZiAoX2hzX3AgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICBfaHNfcCA9ICgoX2hzX3At Pm5leHQgIT0gTlVMTCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgICAgICAgICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19wLT5uZXh0KSA6 IE5VTEwpOyAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgX2hzX3BzaXplLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9IGVsc2UgaWYgKChjbXBmY24oICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgICAgICAgICAgREVDTFRZUEUoaGVhZCkoRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJsLCBf aHNfcCkpLCAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgIERFQ0xUWVBFKGhlYWQpKEVM TVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hzX3EpKSAgICAgICAgICAgICAgXAotKyAgICAg ICAgICAgICAgICApKSA8PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBfaHNfZSA9IF9oc19wOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICAgaWYgKF9oc19wICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgX2hzX3AgPSAoKF9oc19wLT5uZXh0 ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcC0+bmV4dCkgOiBOVUxM KTsgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICAgIF9oc19wc2l6ZS0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAg ICAgX2hzX2UgPSBfaHNfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc19xID0gKChfaHNfcS0+bmV4dCAhPSBO VUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg ICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3EtPm5leHQpIDogTlVMTCk7ICAg ICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hzX3FzaXplLS07ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKCBfaHNfdGFpbCAhPSBOVUxMICkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAg X2hzX3RhaWwtPm5leHQgPSAoKF9oc19lICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJs LCBfaHNfZSkgOiBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hzX2xpc3QgPSBfaHNfZTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKF9oc19lICE9IE5VTEwpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hz X2UtPnByZXYgPSAoKF9oc190YWlsICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgICAgICAgRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJsLCBf aHNfdGFpbCkgOiBOVUxMKTsgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgIF9oc190YWlsID0gX2hzX2U7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgIF9oc19wID0gX2hzX3E7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgIGlmIChfaHNfdGFpbCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9oc190YWlsLT5u ZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIGlmIChfaHNfbm1lcmdl cyA8PSAxVSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgIF9oc19sb29waW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAoaGVhZCktPmhoLnRi bC0+dGFpbCA9IF9oc190YWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgREVDTFRZUEVfQVNTSUdOKGhlYWQsIEVMTVRfRlJPTV9ISCgoaGVhZCkt PmhoLnRibCwgX2hzX2xpc3QpKTsgICAgICAgICAgIFwKLSsgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgX2hzX2luc2l6ZSAqPSAyVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgSEFTSF9GU0NLKGhoLCBoZWFkLCAiSEFTSF9TUlQiKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotK30gd2hpbGUgKDApCi0rCi0rLyogVGhpcyBmdW5jdGlvbiBzZWxlY3RzIGl0ZW1zIGZyb20g b25lIGhhc2ggaW50byBhbm90aGVyIGhhc2guCi0rICogVGhlIGVuZCByZXN1bHQgaXMgdGhhdCB0 aGUgc2VsZWN0ZWQgaXRlbXMgaGF2ZSBkdWFsIHByZXNlbmNlCi0rICogaW4gYm90aCBoYXNoZXMu IFRoZXJlIGlzIG5vIGNvcHkgb2YgdGhlIGl0ZW1zIG1hZGU7IHJhdGhlcgotKyAqIHRoZXkgYXJl IGFkZGVkIGludG8gdGhlIG5ldyBoYXNoIHRocm91Z2ggYSBzZWNvbmRhcnkgaGFzaAotKyAqIGhh c2ggaGFuZGxlIHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBzdHJ1Y3R1cmUuICovCi0rI2Rl ZmluZSBIQVNIX1NFTEVDVChoaF9kc3QsIGRzdCwgaGhfc3JjLCBzcmMsIGNvbmQpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVu c2lnbmVkIF9zcmNfYmt0LCBfZHN0X2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB2b2lkICpfbGFzdF9lbHQgPSBOVUxMLCAqX2VsdDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgVVRf aGFzaF9oYW5kbGUgKl9zcmNfaGgsICpfZHN0X2hoLCAqX2xhc3RfZWx0X2hoPU5VTEw7ICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIHB0cmRpZmZfdCBfZHN0X2hobyA9ICgoY2hhciopKCYo ZHN0KS0+aGhfZHN0KSAtIChjaGFyKikoZHN0KSk7ICAgICAgICAgICAgICAgICBcCi0rICBpZiAo KHNyYykgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICBmb3IgKF9zcmNfYmt0PTA7IF9zcmNfYmt0IDwgKHNy YyktPmhoX3NyYy50YmwtPm51bV9idWNrZXRzOyBfc3JjX2JrdCsrKSB7ICAgIFwKLSsgICAgICBm b3IgKF9zcmNfaGggPSAoc3JjKS0+aGhfc3JjLnRibC0+YnVja2V0c1tfc3JjX2JrdF0uaGhfaGVh ZDsgICAgICAgICAgICAgICBcCi0rICAgICAgICBfc3JjX2hoICE9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg X3NyY19oaCA9IF9zcmNfaGgtPmhoX25leHQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9lbHQgPSBFTE1UX0ZST01fSEgoKHNyYyktPmho X3NyYy50YmwsIF9zcmNfaGgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBp ZiAoY29uZChfZWx0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBJRl9IQVNIX05PTkZBVEFMX09PTSggaW50IF9o c19vb21lZCA9IDA7ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg X2RzdF9oaCA9IChVVF9oYXNoX2hhbmRsZSopKHZvaWQqKSgoKGNoYXIqKV9lbHQpICsgX2RzdF9o aG8pOyAgICAgICAgICBcCi0rICAgICAgICAgIF9kc3RfaGgtPmtleSA9IF9zcmNfaGgtPmtleTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBf ZHN0X2hoLT5rZXlsZW4gPSBfc3JjX2hoLT5rZXlsZW47ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgICAgX2RzdF9oaC0+aGFzaHYgPSBfc3JjX2hoLT5oYXNo djsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIF9k c3RfaGgtPnByZXYgPSBfbGFzdF9lbHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgICBfZHN0X2hoLT5uZXh0ID0gTlVMTDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYg KF9sYXN0X2VsdF9oaCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2xhc3RfZWx0X2hoLT5uZXh0ID0gX2VsdDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKChkc3QpID09IE5VTEwpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgREVD TFRZUEVfQVNTSUdOKGRzdCwgX2VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgICAgIEhBU0hfTUFLRV9UQUJMRShoaF9kc3QsIGRzdCwgX2hz X29vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBJRl9I QVNIX05PTkZBVEFMX09PTSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgICBpZiAoX2hzX29vbWVkKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICB1 dGhhc2hfbm9uZmF0YWxfb29tKF9lbHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKGRzdCkgPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgIGNv bnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9kc3RfaGgt PnRibCA9IChkc3QpLT5oaF9kc3QudGJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIEhBU0hfVE9fQktU KF9kc3RfaGgtPmhhc2h2LCBfZHN0X2hoLT50YmwtPm51bV9idWNrZXRzLCBfZHN0X2JrdCk7ICAg ICAgXAotKyAgICAgICAgICBIQVNIX0FERF9UT19CS1QoX2RzdF9oaC0+dGJsLT5idWNrZXRzW19k c3RfYmt0XSwgaGhfZHN0LCBfZHN0X2hoLCBfaHNfb29tZWQpOyBcCi0rICAgICAgICAgIChkc3Qp LT5oaF9kc3QudGJsLT5udW1faXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgICBJRl9IQVNIX05PTkZBVEFMX09PTSggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBpZiAo X2hzX29vbWVkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgICBIQVNIX1JPTExCQUNLX0JLVChoaF9kc3QsIGRzdCwg X2RzdF9oaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgSEFT SF9ERUxFVEVfSEgoaGhfZHN0LCBkc3QsIF9kc3RfaGgpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgICAgIF9kc3RfaGgtPnRibCA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICB1dGhh c2hfbm9uZmF0YWxfb29tKF9lbHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBIQVNIX0JMT09N X0FERChfZHN0X2hoLT50YmwsIF9kc3RfaGgtPmhhc2h2KTsgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgX2xhc3RfZWx0ID0gX2VsdDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIF9sYXN0X2VsdF9o aCA9IF9kc3RfaGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIEhBU0hfRlNDSyhoaF9kc3QsIGRzdCwgIkhBU0hfU0VMRUNUIik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5l IEhBU0hfQ0xFQVIoaGgsaGVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKCho ZWFkKSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9CTE9PTV9GUkVFKChoZWFkKS0+aGgudGJsKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHV0aGFz aF9mcmVlKChoZWFkKS0+aGgudGJsLT5idWNrZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoaGVhZCktPmhoLnRibC0+bnVtX2J1 Y2tldHMqc2l6ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICAgIFwKLSsgICAgdXRoYXNo X2ZyZWUoKGhlYWQpLT5oaC50YmwsIHNpemVvZihVVF9oYXNoX3RhYmxlKSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIChoZWFkKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9PVkVSSEVBRCho aCxoZWFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgKCgoaGVhZCkgIT0gTlVMTCkgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rIChzaXplX3QpKCgoaGVhZCktPmhoLnRi bC0+bnVtX2l0ZW1zICAgKiBzaXplb2YoVVRfaGFzaF9oYW5kbGUpKSAgICsgICAgICAgICAgICAg XAotKyAgICAgICAgICAoKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzICogc2l6ZW9mKFVUX2hh c2hfYnVja2V0KSkgICArICAgICAgICAgICAgIFwKLSsgICAgICAgICAgIHNpemVvZihVVF9oYXNo X3RhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgICAgICBc Ci0rICAgICAgICAgICAoSEFTSF9CTE9PTV9CWVRFTEVOKSkpIDogMFUpCi0rCi0rI2lmZGVmIE5P X0RFQ0xUWVBFCi0rI2RlZmluZSBIQVNIX0lURVIoaGgsaGVhZCxlbCx0bXApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2ZvcigoKGVsKT0oaGVhZCkp LCAoKCooY2hhcioqKSgmKHRtcCkpKT0oY2hhciopKChoZWFkIT1OVUxMKT8oaGVhZCktPmhoLm5l eHQ6TlVMTCkpOyBcCi0rICAoZWwpICE9IE5VTEw7ICgoZWwpPSh0bXApKSwgKCgqKGNoYXIqKiko Jih0bXApKSk9KGNoYXIqKSgodG1wIT1OVUxMKT8odG1wKS0+aGgubmV4dDpOVUxMKSkpCi0rI2Vs c2UKLSsjZGVmaW5lIEhBU0hfSVRFUihoaCxoZWFkLGVsLHRtcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZm9yKCgoZWwpPShoZWFkKSksICgodG1w KT1ERUNMVFlQRShlbCkoKGhlYWQhPU5VTEwpPyhoZWFkKS0+aGgubmV4dDpOVUxMKSk7ICAgICAg XAotKyAgKGVsKSAhPSBOVUxMOyAoKGVsKT0odG1wKSksICgodG1wKT1ERUNMVFlQRShlbCkoKHRt cCE9TlVMTCk/KHRtcCktPmhoLm5leHQ6TlVMTCkpKQotKyNlbmRpZgotKwotKy8qIG9idGFpbiBh IGNvdW50IG9mIGl0ZW1zIGluIHRoZSBoYXNoICovCi0rI2RlZmluZSBIQVNIX0NPVU5UKGhlYWQp IEhBU0hfQ05UKGhoLGhlYWQpCi0rI2RlZmluZSBIQVNIX0NOVChoaCxoZWFkKSAoKGhlYWQgIT0g TlVMTCk/KChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMpOjBVKQotKwotK3R5cGVkZWYgc3RydWN0 IFVUX2hhc2hfYnVja2V0IHsKLSsgICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKmhoX2hlYWQ7Ci0r ICAgdW5zaWduZWQgY291bnQ7Ci0rCi0rICAgLyogZXhwYW5kX211bHQgaXMgbm9ybWFsbHkgc2V0 IHRvIDAuIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgbWF4IGNoYWluIGxlbmd0aAotKyAgICAqIHRo cmVzaG9sZCBpcyBlbmZvcmNlZCBhdCBpdHMgZGVmYXVsdCB2YWx1ZSwgSEFTSF9CS1RfQ0FQQUNJ VFlfVEhSRVNILiAoSWYKLSsgICAgKiB0aGUgYnVja2V0J3MgY2hhaW4gZXhjZWVkcyB0aGlzIGxl bmd0aCwgYnVja2V0IGV4cGFuc2lvbiBpcyB0cmlnZ2VyZWQpLgotKyAgICAqIEhvd2V2ZXIsIHNl dHRpbmcgZXhwYW5kX211bHQgdG8gYSBub24temVybyB2YWx1ZSBkZWxheXMgYnVja2V0IGV4cGFu c2lvbgotKyAgICAqICh0aGF0IHdvdWxkIGJlIHRyaWdnZXJlZCBieSBhZGRpdGlvbnMgdG8gdGhp cyBwYXJ0aWN1bGFyIGJ1Y2tldCkKLSsgICAgKiB1bnRpbCBpdHMgY2hhaW4gbGVuZ3RoIHJlYWNo ZXMgYSAqbXVsdGlwbGUqIG9mIEhBU0hfQktUX0NBUEFDSVRZX1RIUkVTSC4KLSsgICAgKiAoVGhl IG11bHRpcGxpZXIgaXMgc2ltcGx5IGV4cGFuZF9tdWx0KzEpLiBUaGUgd2hvbGUgaWRlYSBvZiB0 aGlzCi0rICAgICogbXVsdGlwbGllciBpcyB0byByZWR1Y2UgYnVja2V0IGV4cGFuc2lvbnMsIHNp bmNlIHRoZXkgYXJlIGV4cGVuc2l2ZSwgaW4KLSsgICAgKiBzaXR1YXRpb25zIHdoZXJlIHdlIGtu b3cgdGhhdCBhIHBhcnRpY3VsYXIgYnVja2V0IHRlbmRzIHRvIGJlIG92ZXJ1c2VkLgotKyAgICAq IEl0IGlzIGJldHRlciB0byBsZXQgaXRzIGNoYWluIGxlbmd0aCBncm93IHRvIGEgbG9uZ2VyIHll dC1zdGlsbC1ib3VuZGVkCi0rICAgICogdmFsdWUsIHRoYW4gdG8gZG8gYW4gTyhuKSBidWNrZXQg ZXhwYW5zaW9uIHRvbyBvZnRlbi4KLSsgICAgKi8KLSsgICB1bnNpZ25lZCBleHBhbmRfbXVsdDsK LSsKLSt9IFVUX2hhc2hfYnVja2V0OwotKwotKy8qIHJhbmRvbSBzaWduYXR1cmUgdXNlZCBvbmx5 IHRvIGZpbmQgaGFzaCB0YWJsZXMgaW4gZXh0ZXJuYWwgYW5hbHlzaXMgKi8KLSsjZGVmaW5lIEhB U0hfU0lHTkFUVVJFIDB4YTAxMTFmZTF1Ci0rI2RlZmluZSBIQVNIX0JMT09NX1NJR05BVFVSRSAw eGIxMjIyMGYydQotKwotK3R5cGVkZWYgc3RydWN0IFVUX2hhc2hfdGFibGUgewotKyAgIFVUX2hh c2hfYnVja2V0ICpidWNrZXRzOwotKyAgIHVuc2lnbmVkIG51bV9idWNrZXRzLCBsb2cyX251bV9i dWNrZXRzOwotKyAgIHVuc2lnbmVkIG51bV9pdGVtczsKLSsgICBzdHJ1Y3QgVVRfaGFzaF9oYW5k bGUgKnRhaWw7IC8qIHRhaWwgaGggaW4gYXBwIG9yZGVyLCBmb3IgZmFzdCBhcHBlbmQgICAgKi8K LSsgICBwdHJkaWZmX3QgaGhvOyAvKiBoYXNoIGhhbmRsZSBvZmZzZXQgKGJ5dGUgcG9zIG9mIGhh c2ggaGFuZGxlIGluIGVsZW1lbnQgKi8KLSsKLSsgICAvKiBpbiBhbiBpZGVhbCBzaXR1YXRpb24g KGFsbCBidWNrZXRzIHVzZWQgZXF1YWxseSksIG5vIGJ1Y2tldCB3b3VsZCBoYXZlCi0rICAgICog bW9yZSB0aGFuIGNlaWwoI2l0ZW1zLyNidWNrZXRzKSBpdGVtcy4gdGhhdCdzIHRoZSBpZGVhbCBj aGFpbiBsZW5ndGguICovCi0rICAgdW5zaWduZWQgaWRlYWxfY2hhaW5fbWF4bGVuOwotKwotKyAg IC8qIG5vbmlkZWFsX2l0ZW1zIGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGhhc2ggd2hv c2UgY2hhaW4gcG9zaXRpb24KLSsgICAgKiBleGNlZWRzIHRoZSBpZGVhbCBjaGFpbiBtYXhsZW4u IHRoZXNlIGl0ZW1zIHBheSB0aGUgcGVuYWx0eSBmb3IgYW4gdW5ldmVuCi0rICAgICogaGFzaCBk aXN0cmlidXRpb247IHJlYWNoaW5nIHRoZW0gaW4gYSBjaGFpbiB0cmF2ZXJzYWwgdGFrZXMgPmlk ZWFsIHN0ZXBzICovCi0rICAgdW5zaWduZWQgbm9uaWRlYWxfaXRlbXM7Ci0rCi0rICAgLyogaW5l ZmZlY3RpdmUgZXhwYW5kcyBvY2N1ciB3aGVuIGEgYnVja2V0IGRvdWJsaW5nIHdhcyBwZXJmb3Jt ZWQsIGJ1dAotKyAgICAqIGFmdGVyd2FyZCwgbW9yZSB0aGFuIGhhbGYgdGhlIGl0ZW1zIGluIHRo ZSBoYXNoIGhhZCBub25pZGVhbCBjaGFpbgotKyAgICAqIHBvc2l0aW9ucy4gSWYgdGhpcyBoYXBw ZW5zIG9uIHR3byBjb25zZWN1dGl2ZSBleHBhbnNpb25zIHdlIGluaGliaXQgYW55Ci0rICAgICog ZnVydGhlciBleHBhbnNpb24sIGFzIGl0J3Mgbm90IGhlbHBpbmc7IHRoaXMgaGFwcGVucyB3aGVu IHRoZSBoYXNoCi0rICAgICogZnVuY3Rpb24gaXNuJ3QgYSBnb29kIGZpdCBmb3IgdGhlIGtleSBk b21haW4uIFdoZW4gZXhwYW5zaW9uIGlzIGluaGliaXRlZAotKyAgICAqIHRoZSBoYXNoIHdpbGwg c3RpbGwgd29yaywgYWxiZWl0IG5vIGxvbmdlciBpbiBjb25zdGFudCB0aW1lLiAqLwotKyAgIHVu c2lnbmVkIGluZWZmX2V4cGFuZHMsIG5vZXhwYW5kOwotKwotKyAgIHVpbnQzMl90IHNpZ25hdHVy ZTsgLyogdXNlZCBvbmx5IHRvIGZpbmQgaGFzaCB0YWJsZXMgaW4gZXh0ZXJuYWwgYW5hbHlzaXMg Ki8KLSsjaWZkZWYgSEFTSF9CTE9PTQotKyAgIHVpbnQzMl90IGJsb29tX3NpZzsgLyogdXNlZCBv bmx5IHRvIHRlc3QgYmxvb20gZXhpc3RzIGluIGV4dGVybmFsIGFuYWx5c2lzICovCi0rICAgdWlu dDhfdCAqYmxvb21fYnY7Ci0rICAgdWludDhfdCBibG9vbV9uYml0czsKLSsjZW5kaWYKLSsKLSt9 IFVUX2hhc2hfdGFibGU7Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgewotKyAg IHN0cnVjdCBVVF9oYXNoX3RhYmxlICp0Ymw7Ci0rICAgdm9pZCAqcHJldjsgICAgICAgICAgICAg ICAgICAgICAgIC8qIHByZXYgZWxlbWVudCBpbiBhcHAgb3JkZXIgICAgICAqLwotKyAgIHZvaWQg Km5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGVsZW1lbnQgaW4gYXBwIG9yZGVy ICAgICAgKi8KLSsgICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKmhoX3ByZXY7ICAgLyogcHJldmlv dXMgaGggaW4gYnVja2V0IG9yZGVyICAgICovCi0rICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpo aF9uZXh0OyAgIC8qIG5leHQgaGggaW4gYnVja2V0IG9yZGVyICAgICAgICAqLwotKyAgIGNvbnN0 IHZvaWQgKmtleTsgICAgICAgICAgICAgICAgICAvKiBwdHIgdG8gZW5jbG9zaW5nIHN0cnVjdCdz IGtleSAgKi8KLSsgICB1bnNpZ25lZCBrZXlsZW47ICAgICAgICAgICAgICAgICAgLyogZW5jbG9z aW5nIHN0cnVjdCdzIGtleSBsZW4gICAgICovCi0rICAgdW5zaWduZWQgaGFzaHY7ICAgICAgICAg ICAgICAgICAgIC8qIHJlc3VsdCBvZiBoYXNoLWZjbihrZXkpICAgICAgICAqLwotK30gVVRfaGFz aF9oYW5kbGU7Ci0rCi0rI2VuZGlmIC8qIFVUSEFTSF9IICovCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4zcDEub3JpZy92ZXJzaW9uLmggb3BlbnNzaC0xMC4zcDEvdmVyc2lvbi5oCi0tLS0gb3BlbnNz aC0xMC4zcDEub3JpZy92ZXJzaW9uLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAy MDAKLSsrKyBvcGVuc3NoLTEwLjNwMS92ZXJzaW9uLmgJMjAyNi0wNy0wMiAwMjowNjo1NC4wOTA5 NjU2MDggKzAyMDAKLUBAIC0xNiw1ICsxNiw2IEBACi0gCi0gI2RlZmluZSBTU0hfUE9SVEFCTEUJ InAxIgotICNkZWZpbmUgR1NJX1BPUlRBQkxFCSJjLUdTSSIKLS0jZGVmaW5lIFNTSF9SRUxFQVNF CVNTSF9WRVJTSU9OIFNTSF9QT1JUQUJMRSBHU0lfUE9SVEFCTEUgXAotKyNkZWZpbmUgU1NIX0hQ TgkJIl9ocG4xOC45LjAiCi0rI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hfVkVSU0lPTiBTU0hfUE9S VEFCTEUgR1NJX1BPUlRBQkxFIFNTSF9IUE4gXAotIAkJCUdTSV9WRVJTSU9OIEtSQjVfVkVSU0lP TgoKZGlmZiAtLWdpdCBhLzIwMDEtb3BlbnNzaC0xMC41cDEtaHBuLTE4LjExLjEucGF0Y2ggYi8y MDAxLW9wZW5zc2gtMTAuNXAxLWhwbi0xOC4xMS4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmNjM2E4NGUKLS0tIC9kZXYvbnVsbAorKysgYi8yMDAxLW9wZW5zc2gt MTAuNXAxLWhwbi0xOC4xMS4xLnBhdGNoCkBAIC0wLDAgKzEsMTU2NTIgQEAKK2RpZmYgLU51ciBv cGVuc3NoLTEwLjVwMS5vcmlnL2F1dGgyLmMgb3BlbnNzaC0xMC41cDEvYXV0aDIuYworLS0tIG9w ZW5zc2gtMTAuNXAxLm9yaWcvYXV0aDIuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjU1NTIxMzczOCAr MDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2F1dGgyLmMJMjAyNi0wOS0yMSAxMDo0MDozMS4xMjkx NzQ3MzYgKzAyMDAKK0BAIC01Miw2ICs1Miw4IEBACisgI2luY2x1ZGUgImRpc3BhdGNoLmgiCisg I2luY2x1ZGUgInBhdGhuYW1lcy5oIgorICNpbmNsdWRlICJzc2hlcnIuaCIKKysjaW5jbHVkZSAi Y2Fub2hvc3QuaCIKKysKKyAjaWZkZWYgR1NTQVBJCisgI2luY2x1ZGUgInNzaC1nc3MuaCIKKyAj ZW5kaWYKK0BAIC03NSw2ICs3Nyw4IEBACisgZXh0ZXJuIEF1dGhtZXRob2QgbWV0aG9kX2dzc2Fw aTsKKyAjZW5kaWYKKyAKKytzdGF0aWMgaW50IGxvZ19mbGFnID0gMDsKKysKKyBBdXRobWV0aG9k ICphdXRobWV0aG9kc1tdID0geworIAkmbWV0aG9kX25vbmUsCisgCSZtZXRob2RfcHVia2V5LAor QEAgLTEwNCw2ICsxMDgsOSBAQAorICNkZWZpbmUgTUFUQ0hfUEFSVElBTAkzCS8qIG1ldGhvZCBt YXRjaGVzLCBzdWJtZXRob2QgY2FuJ3QgYmUgY2hlY2tlZCAqLworIHN0YXRpYyBpbnQgbGlzdF9z dGFydHNfd2l0aChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKyAK KysvKiByZWFkIHRoZSB1c2VyIGJhbm5lciBmcm9tIHRoZSBwYXRoIGluIHNzaGRfY29uZmlnCisr ICogdGhpcyBpc24ndCB0byByZWFkIGl0IG9uIHRoZSBjbGllbnQgc2lkZSBidXQgdG8gcmVhZAor KyAqIGl0IGludG8gd2hhdCB3ZSBhcmUgZ29pbmcgdG8gc2VuZCBvbiB0aGUgc2VydmVyIHNpZGUg Ki8KKyBjaGFyICoKKyBhdXRoMl9yZWFkX2Jhbm5lcih2b2lkKQorIHsKK0BAIC0zMTQsNiArMzIx LDExIEBACisgCisgCWRlYnVnKCJ1c2VyYXV0aC1yZXF1ZXN0IGZvciB1c2VyICVzIHNlcnZpY2Ug JXMgbWV0aG9kICVzIiwKKyAJICAgIHVzZXJbMF0gPyB1c2VyIDogIjxpbXBsaWNpdD4iLCBzZXJ2 aWNlLCBtZXRob2QpOworKwlpZiAoIWxvZ19mbGFnKSB7CisrCQlsb2dpdCgiU1NIOiBTZXJ2ZXI7 THR5cGU6IEF1dGhuYW1lO1JlbW90ZTogJXMtJWQ7TmFtZTogJXMiLAorKwkJICAgIHNzaF9yZW1v dGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpLCB1c2VyKTsKKysJCWxvZ19mbGFn ID0gMTsKKysJfQorIAlkZWJ1ZygiYXR0ZW1wdCAlZCBmYWlsdXJlcyAlZCIsIGF1dGhjdHh0LT5h dHRlbXB0LCBhdXRoY3R4dC0+ZmFpbHVyZXMpOworIAorICNpZmRlZiBXSVRIX1NFTElOVVgKK2Rp ZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2Jpbm4uYyBvcGVuc3NoLTEwLjVwMS9iaW5uLmMK Ky0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2Jpbm4uYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL2Jpbm4uYwkyMDI2LTA5LTIxIDA3OjA2OjU5 Ljg4MDQ1NjY4NCArMDIwMAorQEAgLTAsMCArMSwzNTQxIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG1lbW9yeS5oPgorKyNpbmNsdWRlICJiaW5uLmgiCisrCisr I2RlZmluZSBVTlVTRUQoeCkgKHZvaWQpKHgpCisrI2RlZmluZSByb3VuZHZhbChkYmwpIGRibCA+ PSAwLjAgPyAoaW50KShkYmwgKyAwLjUpIDogKChkYmwgLSAoZG91YmxlKShpbnQpZGJsKSA8PSAt MC41ID8gKGludClkYmwgOiAoaW50KShkYmwgLSAwLjUpKQorKworKy8vIG1hZ2ljIG51bWJlcjog IDB4MUYgMHhiMSAweDIyIDB4MUYgID0+ICAweDFGQjEyMjFGIG9yIDB4MUYyMkIxMUYKKysvLyBi ZWNhdXNlIHRoZSBCSU5OX1NUT1JBR0VfTk9CWVRFUyAoYmluYXJ5IDAwMCkgbWF5IG5vdCBoYXZl IHNvIG1hbnkgc3ViLXR5cGVzIChCSU5OX1NUT1JBR0VfSEFTX01PUkUgPSAweDEwKQorKyNkZWZp bmUgQklOTl9NQUdJQyAgICAgICAgICAgIDB4MUYyMkIxMUYKKysKKysjZGVmaW5lIE1BWF9CSU5O X0hFQURFUiAgICAgICA5ICAvLyBbMTp0eXBlXVs0OnNpemVdWzQ6Y291bnRdCisrI2RlZmluZSBN SU5fQklOTl9TSVpFICAgICAgICAgMyAgLy8gWzE6dHlwZV1bMTpzaXplXVsxOmNvdW50XQorKyNk ZWZpbmUgQ0hVTktfU0laRSAgICAgICAgICAgIDI1NiAgLy8gMTAyNAorKworKyNkZWZpbmUgQklO Tl9TVFJVQ1QgICAgICAgIDEKKysjZGVmaW5lIEJJTk5fQlVGRkVSICAgICAgICAyCisrCisrdm9p ZCogKCptYWxsb2NfZm4pKHNpemVfdCBsZW4pID0gMDsKKyt2b2lkKiAoKnJlYWxsb2NfZm4pKHZv aWQgKnB0ciwgc2l6ZV90IGxlbikgPSAwOworK3ZvaWQgICgqZnJlZV9mbikodm9pZCAqcHRyKSA9 IDA7CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaWYgZGVmaW5lZChfX2FscGhhX18p IHx8IGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19w b3dlcnBjX18pIHx8IGRlZmluZWQoX19zcGFyY19fKQorKyNkZWZpbmUgQklOTl9PTkxZX0FMSUdO RURfQUNDRVNTCisrI2VsaWYgKCBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0 X18pICkgJiYgIWRlZmluZWQoX19BUk1fRkVBVFVSRV9VTkFMSUdORUQpCisrI2RlZmluZSBCSU5O X09OTFlfQUxJR05FRF9BQ0NFU1MKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChfV0lOMzIpCisr I2RlZmluZSBCSUdfRU5ESUFOICAgICAgMHgxMDAwCisrI2RlZmluZSBMSVRUTEVfRU5ESUFOICAg MHgwMDAxCisrI2RlZmluZSBCWVRFX09SREVSICAgICAgTElUVExFX0VORElBTgorKyNlbGlmIGRl ZmluZWQoX19BUFBMRV9fKQorKy8qIG1hY3JvcyBhbHJlYWR5IGRlZmluZWQgKi8KKysjZWxpZiBk ZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19G cmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykKKysjaW5jbHVkZSA8c3lzL2VuZGlh bi5oPgorKyNlbGlmIGRlZmluZWQoX0FJWCkKKysjaW5jbHVkZSA8c3lzL21hY2hpbmUuaD4KKysj ZWxzZQorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIEJZVEVfT1JE RVIKKysjZXJyb3IgIkJZVEVfT1JERVIgbm90IGRlZmluZWQiCisrI2VuZGlmCisrI2lmbmRlZiBC SUdfRU5ESUFOCisrI2Vycm9yICJCSUdfRU5ESUFOIG5vdCBkZWZpbmVkIgorKyNlbmRpZgorKyNp Zm5kZWYgTElUVExFX0VORElBTgorKyNlcnJvciAiTElUVExFX0VORElBTiBub3QgZGVmaW5lZCIK KysjZW5kaWYKKysjaWYgQklHX0VORElBTiA9PSBMSVRUTEVfRU5ESUFOCisrI2Vycm9yICJCSUdf RU5ESUFOID09IExJVFRMRV9FTkRJQU4iCisrI2VuZGlmCisrI2lmIEJZVEVfT1JERVIhPUJJR19F TkRJQU4gJiYgQllURV9PUkRFUiE9TElUVExFX0VORElBTgorKyNlcnJvciAiQllURV9PUkRFUiBu b3Qgc3VwcG9ydGVkIgorKyNlbmRpZgorKworK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50ICAg ICB1MTY7CisrdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgIHUzMjsKKyt0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgdTY0OworKworK0JJTk5fUFJJVkFURSB2b2lkIGNvcHlfYmUx Nih1MTYgKnBkZXN0LCB1MTYgKnBzb3VyY2UpIHsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVf RU5ESUFOCisrICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291 cmNlOworKyAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0Owor KyAgZGVzdFswXSA9IHNvdXJjZVsxXTsKKysgIGRlc3RbMV0gPSBzb3VyY2VbMF07CisrI2Vsc2Ug Ly8gaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisrI2lmZGVmIEJJTk5fT05MWV9BTElHTkVE X0FDQ0VTUworKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAlIDIgPT0gMCl7ICAvLyBhZGRyZXNz IGFsaWduZWQgdG8gMTYgYml0CisrICAgICpwZGVzdCA9ICpwc291cmNlOworKyAgfSBlbHNlIHsK KysgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsK KysgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OworKyAg ICBkZXN0WzBdID0gc291cmNlWzBdOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKKysgICAgZGVz dFsxXSA9IHNvdXJjZVsxXTsKKysgIH0KKysjZWxzZQorKyAgKnBkZXN0ID0gKnBzb3VyY2U7Cisr I2VuZGlmCisrI2VuZGlmCisrfQorKworK0JJTk5fUFJJVkFURSB2b2lkIGNvcHlfYmUzMih1MzIg KnBkZXN0LCB1MzIgKnBzb3VyY2UpIHsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFO CisrICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNlOwor KyAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OworKyAgZGVz dFswXSA9IHNvdXJjZVszXTsKKysgIGRlc3RbMV0gPSBzb3VyY2VbMl07CisrICBkZXN0WzJdID0g c291cmNlWzFdOworKyAgZGVzdFszXSA9IHNvdXJjZVswXTsKKysjZWxzZSAvLyBpZiBCWVRFX09S REVSID09IEJJR19FTkRJQU4KKysjaWZkZWYgQklOTl9PTkxZX0FMSUdORURfQUNDRVNTCisrICBp ZiAoKHVpbnRwdHJfdClwc291cmNlICUgNCA9PSAwKXsgIC8vIGFkZHJlc3MgYWxpZ25lZCB0byAz MiBiaXQKKysgICAgKnBkZXN0ID0gKnBzb3VyY2U7CisrICB9IGVsc2UgeworKyAgICB1bnNpZ25l ZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNlOworKyAgICB1bnNpZ25l ZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIgKikgcGRlc3Q7CisrICAgIGRlc3RbMF0gPSBz b3VyY2VbMF07ICAvLyBpbmRleGVzIGFyZSB0aGUgc2FtZQorKyAgICBkZXN0WzFdID0gc291cmNl WzFdOworKyAgICBkZXN0WzJdID0gc291cmNlWzJdOworKyAgICBkZXN0WzNdID0gc291cmNlWzNd OworKyAgfQorKyNlbHNlCisrICAqcGRlc3QgPSAqcHNvdXJjZTsKKysjZW5kaWYKKysjZW5kaWYK Kyt9CisrCisrQklOTl9QUklWQVRFIHZvaWQgY29weV9iZTY0KHU2NCAqcGRlc3QsIHU2NCAqcHNv dXJjZSkgeworKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKysgIHVuc2lnbmVkIGNo YXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICopIHBzb3VyY2U7CisrICB1bnNpZ25lZCBjaGFy ICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIgKikgcGRlc3Q7CisrICBpbnQgaTsKKysgIGZvciAoaT0w OyBpIDwgODsgaSsrKSB7CisrICAgIGRlc3RbaV0gPSBzb3VyY2VbNy1pXTsKKysgIH0KKysjZWxz ZSAvLyBpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKysjaWZkZWYgQklOTl9PTkxZX0FMSUdO RURfQUNDRVNTCisrICBpZiAoKHVpbnRwdHJfdClwc291cmNlICUgOCA9PSAwKXsgIC8vIGFkZHJl c3MgYWxpZ25lZCB0byA2NCBiaXQKKysgICAgKnBkZXN0ID0gKnBzb3VyY2U7CisrICB9IGVsc2Ug eworKyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNl OworKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIgKikgcGRlc3Q7Cisr ICAgIGludCBpOworKyAgICBmb3IgKGk9MDsgaSA8IDg7IGkrKykgeworKyAgICAgIGRlc3RbaV0g PSBzb3VyY2VbaV07ICAvLyBpbmRleGVzIGFyZSB0aGUgc2FtZQorKyAgICB9CisrICB9CisrI2Vs c2UKKysgICpwZGVzdCA9ICpwc291cmNlOworKyNlbmRpZgorKyNlbmRpZgorK30KKysKKysvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworKyNpZm5kZWYgX01TQ19WRVIKKysjZGVmaW5lIHN0cmljbXAg c3RyY2FzZWNtcAorKyNkZWZpbmUgc3RybmljbXAgc3RybmNhc2VjbXAKKysjZW5kaWYKKysKKytC SU5OX1BSSVZBVEUgQk9PTCBJc1ZhbGlkQmlubkhlYWRlcihjb25zdCB2b2lkICpwYnVmLCBpbnQg KnB0eXBlLCBpbnQgKnBjb3VudCwgaW50ICpwc2l6ZSwgaW50ICpwaGVhZGVyc2l6ZSk7CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytjaGFyICogQVBJRU5UUlkgYmlubl92ZXJzaW9uKCkg eworKyAgcmV0dXJuIEJJTk5fVkVSU0lPTjsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KysKKyt2b2lkIEFQSUVOVFJZIGJpbm5fc2V0X2FsbG9jX2Z1bmN0aW9ucyh2b2lkKiAoKm5ld19t YWxsb2MpKHNpemVfdCksIHZvaWQqICgqbmV3X3JlYWxsb2MpKHZvaWQqLHNpemVfdCksIHZvaWQg KCpuZXdfZnJlZSkodm9pZCopKSB7CisrCisrICBtYWxsb2NfZm4gPSBuZXdfbWFsbG9jOworKyAg cmVhbGxvY19mbiA9IG5ld19yZWFsbG9jOworKyAgZnJlZV9mbiA9IG5ld19mcmVlOworKworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSB2b2lkIGNoZWNrX2Fs bG9jX2Z1bmN0aW9ucygpIHsKKysKKysgIGlmIChtYWxsb2NfZm4gPT0gMCkgbWFsbG9jX2ZuID0g Jm1hbGxvYzsKKysgIGlmIChyZWFsbG9jX2ZuID09IDApIHJlYWxsb2NfZm4gPSAmcmVhbGxvYzsK KysgIGlmIChmcmVlX2ZuID09IDApIGZyZWVfZm4gPSAmZnJlZTsKKysKKyt9CisrCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdm9pZCAqIGJpbm5fbWFsbG9jKGludCBz aXplKSB7CisrICBjaGVja19hbGxvY19mdW5jdGlvbnMoKTsKKysgIHJldHVybiBtYWxsb2NfZm4o c2l6ZSk7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIHZv aWQgKiBiaW5uX21lbWR1cChjb25zdCB2b2lkICpzcmMsIGludCBzaXplKSB7CisrICB2b2lkICpk ZXN0OworKworKyAgaWYgKHNyYyA9PSBOVUxMIHx8IHNpemUgPD0gMCkgcmV0dXJuIE5VTEw7Cisr ICBkZXN0ID0gYmlubl9tYWxsb2Moc2l6ZSk7CisrICBpZiAoZGVzdCA9PSBOVUxMKSByZXR1cm4g TlVMTDsKKysgIG1lbWNweShkZXN0LCBzcmMsIHNpemUpOworKyAgcmV0dXJuIGRlc3Q7CisrCisr fQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIHNpemVfdCBzdHJs ZW4yKGNoYXIgKnN0cikgeworKworKyAgaWYgKHN0ciA9PSBOVUxMKSByZXR1cm4gMDsKKysgIHJl dHVybiBzdHJsZW4oc3RyKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytp bnQgQVBJRU5UUlkgYmlubl9jcmVhdGVfdHlwZShpbnQgc3RvcmFnZV90eXBlLCBpbnQgZGF0YV90 eXBlX2luZGV4KSB7CisrICBpZiAoZGF0YV90eXBlX2luZGV4IDwgMCkgcmV0dXJuIC0xOworKyAg aWYgKHN0b3JhZ2VfdHlwZSA8IEJJTk5fU1RPUkFHRV9NSU4gfHwgc3RvcmFnZV90eXBlID4gQklO Tl9TVE9SQUdFX01BWCkgcmV0dXJuIC0xOworKyAgaWYgKGRhdGFfdHlwZV9pbmRleCA8IDE2KQor KyAgICByZXR1cm4gc3RvcmFnZV90eXBlIHwgZGF0YV90eXBlX2luZGV4OworKyAgZWxzZSBpZiAo ZGF0YV90eXBlX2luZGV4IDwgNDA5NikgeworKyAgICBzdG9yYWdlX3R5cGUgfD0gQklOTl9TVE9S QUdFX0hBU19NT1JFOworKyAgICBzdG9yYWdlX3R5cGUgPDw9IDg7CisrICAgIGRhdGFfdHlwZV9p bmRleCA+Pj0gNDsKKysgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZSB8IGRhdGFfdHlwZV9pbmRleDsK KysgIH0gZWxzZQorKyAgICByZXR1cm4gLTE7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2dldF90eXBlX2luZm8oaW50IGxvbmdfdHlwZSwgaW50 ICpwc3RvcmFnZV90eXBlLCBpbnQgKnBleHRyYV90eXBlKSB7CisrICBpbnQgc3RvcmFnZV90eXBl LCBleHRyYV90eXBlOworKyAgQk9PTCByZXR2YWw9VFJVRTsKKysKKythZ2FpbjoKKysKKysgIGlm IChsb25nX3R5cGUgPCAwKSB7CisrICAgIGdvdG8gbG9jX2ludmFsaWQ7CisrICB9IGVsc2UgaWYg KGxvbmdfdHlwZSA8PSAweGZmKSB7CisrICAgIHN0b3JhZ2VfdHlwZSA9IGxvbmdfdHlwZSAmIEJJ Tk5fU1RPUkFHRV9NQVNLOworKyAgICBleHRyYV90eXBlID0gbG9uZ190eXBlICYgQklOTl9UWVBF X01BU0s7CisrICB9IGVsc2UgaWYgKGxvbmdfdHlwZSA8PSAweGZmZmYpIHsKKysgICAgc3RvcmFn ZV90eXBlID0gbG9uZ190eXBlICYgQklOTl9TVE9SQUdFX01BU0sxNjsKKysgICAgc3RvcmFnZV90 eXBlID4+PSA4OworKyAgICBleHRyYV90eXBlID0gbG9uZ190eXBlICYgQklOTl9UWVBFX01BU0sx NjsKKysgICAgZXh0cmFfdHlwZSA+Pj0gNDsKKysgIH0gZWxzZSBpZiAobG9uZ190eXBlICYgQklO Tl9TVE9SQUdFX1ZJUlRVQUwpIHsKKysgICAgLy9zdG9yYWdlX3R5cGUgPSBCSU5OX1NUT1JBR0Vf VklSVFVBTDsKKysgICAgLy9leHRyYV90eXBlID0geHh4OworKyAgICBsb25nX3R5cGUgJj0gMHhm ZmZmOworKyAgICBnb3RvIGFnYWluOworKyAgfSBlbHNlIHsKKytsb2NfaW52YWxpZDoKKysgICAg c3RvcmFnZV90eXBlID0gLTE7CisrICAgIGV4dHJhX3R5cGUgPSAtMTsKKysgICAgcmV0dmFsID0g RkFMU0U7CisrICB9CisrCisrICBpZiAocHN0b3JhZ2VfdHlwZSkgKnBzdG9yYWdlX3R5cGUgPSBz dG9yYWdlX3R5cGU7CisrICBpZiAocGV4dHJhX3R5cGUpICpwZXh0cmFfdHlwZSA9IGV4dHJhX3R5 cGU7CisrCisrICByZXR1cm4gcmV0dmFsOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKworK0JPT0wgQVBJRU5UUlkgYmlubl9jcmVhdGUoYmlubiAqaXRlbSwgaW50IHR5cGUsIGlu dCBzaXplLCB2b2lkICpwb2ludGVyKSB7CisrICBCT09MIHJldHZhbD1GQUxTRTsKKysKKysgIHN3 aXRjaCAodHlwZSkgeworKyAgICBjYXNlIEJJTk5fTElTVDoKKysgICAgY2FzZSBCSU5OX01BUDoK KysgICAgY2FzZSBCSU5OX09CSkVDVDoKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysg ICAgICBnb3RvIGxvY19leGl0OworKyAgfQorKworKyAgaWYgKGl0ZW0gPT0gTlVMTCB8fCBzaXpl IDwgMCkgZ290byBsb2NfZXhpdDsKKysgIGlmIChzaXplIDwgTUlOX0JJTk5fU0laRSkgeworKyAg ICBpZiAocG9pbnRlcikgZ290byBsb2NfZXhpdDsKKysgICAgZWxzZSBzaXplID0gMDsKKysgIH0K KysKKysgIG1lbXNldChpdGVtLCAwLCBzaXplb2YoYmlubikpOworKworKyAgaWYgKHBvaW50ZXIp IHsKKysgICAgaXRlbS0+cHJlX2FsbG9jYXRlZCA9IFRSVUU7CisrICB9IGVsc2UgeworKyAgICBp dGVtLT5wcmVfYWxsb2NhdGVkID0gRkFMU0U7CisrICAgIGlmIChzaXplID09IDApIHNpemUgPSBD SFVOS19TSVpFOworKyAgICBwb2ludGVyID0gYmlubl9tYWxsb2Moc2l6ZSk7CisrICAgIGlmIChw b2ludGVyID09IDApIHJldHVybiBJTlZBTElEX0JJTk47CisrICB9CisrCisrICBpdGVtLT5wYnVm ID0gcG9pbnRlcjsKKysgIGl0ZW0tPmFsbG9jX3NpemUgPSBzaXplOworKworKyAgaXRlbS0+aGVh ZGVyID0gQklOTl9NQUdJQzsKKysgIC8vaXRlbS0+YWxsb2NhdGVkID0gRkFMU0U7ICAgLS0gYWxy ZWFkeSB6ZXJvZWQKKysgIGl0ZW0tPndyaXRhYmxlID0gVFJVRTsKKysgIGl0ZW0tPnVzZWRfc2l6 ZSA9IE1BWF9CSU5OX0hFQURFUjsgIC8vIHNhdmUgc3BhY2UgZm9yIHRoZSBoZWFkZXIKKysgIGl0 ZW0tPnR5cGUgPSB0eXBlOworKyAgLy9pdGVtLT5jb3VudCA9IDA7ICAgICAgICAgICAtLSBhbHJl YWR5IHplcm9lZAorKyAgaXRlbS0+ZGlydHkgPSBUUlVFOyAgICAgICAgICAvLyB0aGUgaGVhZGVy IGlzIG5vdCB3cml0dGVuIHRvIHRoZSBidWZmZXIKKysKKysgIHJldHZhbCA9IFRSVUU7CisrCisr bG9jX2V4aXQ6CisrICByZXR1cm4gcmV0dmFsOworKworK30KKysKKysvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX25ldyhpbnQgdHlwZSwgaW50IHNpemUsIHZv aWQgKnBvaW50ZXIpIHsKKysgIGJpbm4gKml0ZW07CisrCisrICBpdGVtID0gKGJpbm4qKSBiaW5u X21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJpbm5fY3JlYXRlKGl0ZW0sIHR5cGUs IHNpemUsIHBvaW50ZXIpID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4oaXRlbSk7CisrICAgIHJl dHVybiBOVUxMOworKyAgfQorKworKyAgaXRlbS0+YWxsb2NhdGVkID0gVFJVRTsKKysgIHJldHVy biBpdGVtOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytC T09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlX2xpc3QoYmlubiAqbGlzdCkgeworKworKyAgcmV0dXJu IGJpbm5fY3JlYXRlKGxpc3QsIEJJTk5fTElTVCwgMCwgTlVMTCk7CisrCisrfQorKworKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9jcmVhdGVf bWFwKGJpbm4gKm1hcCkgeworKworKyAgcmV0dXJuIGJpbm5fY3JlYXRlKG1hcCwgQklOTl9NQVAs IDAsIE5VTEwpOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK KytCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlX29iamVjdChiaW5uICpvYmplY3QpIHsKKysKKysg IHJldHVybiBiaW5uX2NyZWF0ZShvYmplY3QsIEJJTk5fT0JKRUNULCAwLCBOVUxMKTsKKysKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9saXN0 KCkgeworKyAgcmV0dXJuIGJpbm5fbmV3KEJJTk5fTElTVCwgMCwgMCk7CisrfQorKworKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwKCkgeworKyAgcmV0 dXJuIGJpbm5fbmV3KEJJTk5fTUFQLCAwLCAwKTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3QoKSB7CisrICByZXR1cm4gYmlubl9u ZXcoQklOTl9PQkpFQ1QsIDAsIDApOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwor K2Jpbm4gKiBBUElFTlRSWSBiaW5uX2NvcHkoY29uc3Qgdm9pZCAqb2xkKSB7CisrICBpbnQgdHlw ZSwgY291bnQsIHNpemUsIGhlYWRlcl9zaXplOworKyAgdW5zaWduZWQgY2hhciAqb2xkX3B0ciA9 IGJpbm5fcHRyKG9sZCk7CisrICBiaW5uICppdGVtOworKworKyAgc2l6ZSA9IDA7CisrICBpZiAo IUlzVmFsaWRCaW5uSGVhZGVyKG9sZF9wdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVy X3NpemUpKSByZXR1cm4gTlVMTDsKKysKKysgIGl0ZW0gPSBiaW5uX25ldyh0eXBlLCBzaXplIC0g aGVhZGVyX3NpemUgKyBNQVhfQklOTl9IRUFERVIsIE5VTEwpOworKyAgaWYoIGl0ZW0gKXsKKysg ICAgdW5zaWduZWQgY2hhciAqZGVzdDsKKysgICAgZGVzdCA9ICgodW5zaWduZWQgY2hhciAqKSBp dGVtLT5wYnVmKSArIE1BWF9CSU5OX0hFQURFUjsKKysgICAgbWVtY3B5KGRlc3QsIG9sZF9wdHIg KyBoZWFkZXJfc2l6ZSwgc2l6ZSAtIGhlYWRlcl9zaXplKTsKKysgICAgaXRlbS0+dXNlZF9zaXpl ID0gTUFYX0JJTk5fSEVBREVSICsgc2l6ZSAtIGhlYWRlcl9zaXplOworKyAgICBpdGVtLT5jb3Vu dCA9IGNvdW50OworKyAgfQorKyAgcmV0dXJuIGl0ZW07CisrCisrfQorKworKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKworKy8vIGRlcHJlY2F0ZWQ6IHVuc2VjdXJlLiB0aGUgc2l6 ZSBjYW4gYmUgY29ycnVwdGVkIGFjY2lkZW50YWxseSBvciBpbnRlbnRpb25hbGx5CisrQk9PTCBB UElFTlRSWSBiaW5uX2xvYWQoY29uc3Qgdm9pZCAqZGF0YSwgYmlubiAqdmFsdWUpIHsKKysKKysg IGlmIChkYXRhID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAgbWVt c2V0KHZhbHVlLCAwLCBzaXplb2YoYmlubikpOworKyAgdmFsdWUtPmhlYWRlciA9IEJJTk5fTUFH SUM7CisrICAvL3ZhbHVlLT5hbGxvY2F0ZWQgPSBGQUxTRTsgIC0tICBhbHJlYWR5IHplcm9lZAor KyAgLy92YWx1ZS0+d3JpdGFibGUgPSBGQUxTRTsKKysKKysgIGlmIChiaW5uX2lzX3ZhbGlkKGRh dGEsICZ2YWx1ZS0+dHlwZSwgJnZhbHVlLT5jb3VudCwgJnZhbHVlLT5zaXplKSA9PSBGQUxTRSkg cmV0dXJuIEZBTFNFOworKyAgdmFsdWUtPnB0ciA9ICh2b2lkKikgZGF0YTsKKysgIHJldHVybiBU UlVFOworKworK30KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbG9hZF9leChjb25zdCB2b2lkICpk YXRhLCBpbnQgc2l6ZSwgYmlubiAqdmFsdWUpIHsKKysKKysgIGlmIChkYXRhID09IE5VTEwgfHwg dmFsdWUgPT0gTlVMTCB8fCBzaXplIDw9IDApIHJldHVybiBGQUxTRTsKKysgIG1lbXNldCh2YWx1 ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKKysgIHZhbHVlLT5oZWFkZXIgPSBCSU5OX01BR0lDOworKyAg Ly92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAgYWxyZWFkeSB6ZXJvZWQKKysgIC8vdmFs dWUtPndyaXRhYmxlID0gRkFMU0U7CisrCisrICBpZiAoYmlubl9pc192YWxpZF9leChkYXRhLCAm dmFsdWUtPnR5cGUsICZ2YWx1ZS0+Y291bnQsICZzaXplKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNF OworKyAgdmFsdWUtPnB0ciA9ICh2b2lkKikgZGF0YTsKKysgIHZhbHVlLT5zaXplID0gc2l6ZTsK KysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9vcGVuKGNvbnN0IHZvaWQgKmRhdGEpIHsKKysg IGJpbm4gKml0ZW07CisrCisrICBpdGVtID0gKGJpbm4qKSBiaW5uX21hbGxvYyhzaXplb2YoYmlu bikpOworKworKyAgaWYgKGJpbm5fbG9hZChkYXRhLCBpdGVtKSA9PSBGQUxTRSkgeworKyAgICBm cmVlX2ZuKGl0ZW0pOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIGl0ZW0tPmFsbG9j YXRlZCA9IFRSVUU7CisrICByZXR1cm4gaXRlbTsKKysKKyt9CisrCisrYmlubiAqIEFQSUVOVFJZ IGJpbm5fb3Blbl9leChjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkgeworKyAgYmlubiAqaXRl bTsKKysKKysgIGl0ZW0gPSAoYmlubiopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7CisrCisr ICBpZiAoYmlubl9sb2FkX2V4KGRhdGEsIHNpemUsIGl0ZW0pID09IEZBTFNFKSB7CisrICAgIGZy ZWVfZm4oaXRlbSk7CisrICAgIHJldHVybiBOVUxMOworKyAgfQorKworKyAgaXRlbS0+YWxsb2Nh dGVkID0gVFJVRTsKKysgIHJldHVybiBpdGVtOworKworK30KKysKKysvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKworK0JJTk5fUFJJVkFURSBpbnQgYmlubl9nZXRfcHRyX3R5cGUoY29uc3Qgdm9pZCAq cHRyKSB7CisrCisrICBpZiAocHRyID09IE5VTEwpIHJldHVybiAwOworKworKyAgc3dpdGNoICgq KHVuc2lnbmVkIGludCAqKXB0cikgeworKyAgY2FzZSBCSU5OX01BR0lDOgorKyAgICByZXR1cm4g QklOTl9TVFJVQ1Q7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gQklOTl9CVUZGRVI7CisrICB9 CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5u X2lzX3N0cnVjdChjb25zdCB2b2lkICpwdHIpIHsKKysKKysgIGlmIChwdHIgPT0gTlVMTCkgcmV0 dXJuIEZBTFNFOworKworKyAgaWYgKCgqKHVuc2lnbmVkIGludCAqKXB0cikgPT0gQklOTl9NQUdJ QykgeworKyAgICByZXR1cm4gVFJVRTsKKysgIH0gZWxzZSB7CisrICAgIHJldHVybiBGQUxTRTsK KysgIH0KKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUg aW50IENhbGNBbGxvY2F0aW9uKGludCBuZWVkZWRfc2l6ZSwgaW50IGFsbG9jX3NpemUpIHsKKysg IGludCBjYWxjX3NpemU7CisrCisrICBjYWxjX3NpemUgPSBhbGxvY19zaXplOworKyAgd2hpbGUg KGNhbGNfc2l6ZSA8IG5lZWRlZF9zaXplKSB7CisrICAgIGNhbGNfc2l6ZSA8PD0gMTsgIC8vIHNh bWUgYXMgKj0gMgorKyAgICAvL2NhbGNfc2l6ZSArPSBDSFVOS19TSVpFOyAgLS0gdGhpcyBpcyBz bG93ZXIgdGhhbiB0aGUgYWJvdmUgbGluZSwgYmVjYXVzZSB0aGVyZSBhcmUgbW9yZSByZWFsbG9j YXRpb25zCisrICB9CisrICByZXR1cm4gY2FsY19zaXplOworKworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIENoZWNrQWxsb2NhdGlvbihiaW5uICpp dGVtLCBpbnQgYWRkX3NpemUpIHsKKysgIGludCAgYWxsb2Nfc2l6ZTsKKysgIHZvaWQgKnB0cjsK KysKKysgIGlmIChpdGVtLT51c2VkX3NpemUgKyBhZGRfc2l6ZSA+IGl0ZW0tPmFsbG9jX3NpemUp IHsKKysgICAgaWYgKGl0ZW0tPnByZV9hbGxvY2F0ZWQpIHJldHVybiBGQUxTRTsKKysgICAgYWxs b2Nfc2l6ZSA9IENhbGNBbGxvY2F0aW9uKGl0ZW0tPnVzZWRfc2l6ZSArIGFkZF9zaXplLCBpdGVt LT5hbGxvY19zaXplKTsKKysgICAgcHRyID0gcmVhbGxvY19mbihpdGVtLT5wYnVmLCBhbGxvY19z aXplKTsKKysgICAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrICAgIGl0ZW0tPnBi dWYgPSBwdHI7CisrICAgIGl0ZW0tPmFsbG9jX3NpemUgPSBhbGxvY19zaXplOworKyAgfQorKwor KyAgcmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2lm IEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorKworK0JJTk5fUFJJVkFURSBpbnQgZ2V0X3N0b3Jh Z2Vfc2l6ZShpbnQgc3RvcmFnZV90eXBlKSB7CisrCisrICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkg eworKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgcmV0dXJuIDA7CisrICBjYXNl IEJJTk5fU1RPUkFHRV9CWVRFOgorKyAgICByZXR1cm4gMTsKKysgIGNhc2UgQklOTl9TVE9SQUdF X1dPUkQ6CisrICAgIHJldHVybiAyOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6CisrICAg IHJldHVybiA0OworKyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6CisrICAgIHJldHVybiA4Owor KyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIDA7CisrICB9CisrCisrfQorKworKyNlbmRpZgorKwor Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIHVuc2lnbmVkIGNoYXIgKiBB ZHZhbmNlRGF0YVBvcyh1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBjaGFyICpwbGltaXQpIHsK KysgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKysgIGludCAgc3RvcmFnZV90eXBlLCBEYXRhU2l6ZTsK KysKKysgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gMDsKKysKKysgIGJ5dGUgPSAqcDsgcCsrOwor KyAgc3RvcmFnZV90eXBlID0gYnl0ZSAmIEJJTk5fU1RPUkFHRV9NQVNLOworKyAgaWYgKGJ5dGUg JiBCSU5OX1NUT1JBR0VfSEFTX01PUkUpIHArKzsKKysKKysgIHN3aXRjaCAoc3RvcmFnZV90eXBl KSB7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgorKyAgICAvL3AgKz0gMDsKKysgICAg YnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRFOgorKyAgICBwICsrOworKyAgICBicmVh azsKKysgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6CisrICAgIHAgKz0gMjsKKysgICAgYnJlYWs7 CisrICBjYXNlIEJJTk5fU1RPUkFHRV9EV09SRDoKKysgICAgcCArPSA0OworKyAgICBicmVhazsK KysgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgorKyAgICBwICs9IDg7CisrICAgIGJyZWFrOwor KyAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKKysgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoK KysgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiAwOworKyAgICBEYXRhU2l6ZSA9ICooKHVuc2ln bmVkIGNoYXIqKXApOworKyAgICBpZiAoRGF0YVNpemUgJiAweDgwKSB7CisrICAgICAgaWYgKHAg KyBzaXplb2YoaW50KSAtIDEgPiBwbGltaXQpIHJldHVybiAwOworKyAgICAgIGNvcHlfYmUzMigo dTMyKikmRGF0YVNpemUsICh1MzIqKXApOworKyAgICAgIERhdGFTaXplICY9IDB4N0ZGRkZGRkY7 CisrICAgICAgcCs9NDsKKysgICAgfSBlbHNlIHsKKysgICAgICBwKys7CisrICAgIH0KKysgICAg cCArPSBEYXRhU2l6ZTsKKysgICAgaWYgKHN0b3JhZ2VfdHlwZSA9PSBCSU5OX1NUT1JBR0VfU1RS SU5HKSB7CisrICAgICAgcCsrOyAgLy8gbnVsbCB0ZXJtaW5hdG9yLgorKyAgICB9CisrICAgIGJy ZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgorKyAgICBpZiAocCA+IHBsaW1p dCkgcmV0dXJuIDA7CisrICAgIERhdGFTaXplID0gKigodW5zaWduZWQgY2hhciopcCk7CisrICAg IGlmIChEYXRhU2l6ZSAmIDB4ODApIHsKKysgICAgICBpZiAocCArIHNpemVvZihpbnQpIC0gMSA+ IHBsaW1pdCkgcmV0dXJuIDA7CisrICAgICAgY29weV9iZTMyKCh1MzIqKSZEYXRhU2l6ZSwgKHUz MiopcCk7CisrICAgICAgRGF0YVNpemUgJj0gMHg3RkZGRkZGRjsKKysgICAgfQorKyAgICBEYXRh U2l6ZS0tOyAgLy8gcmVtb3ZlIHRoZSB0eXBlIGJ5dGUgYWxyZWFkeSBhZGRlZCBiZWZvcmUKKysg ICAgcCArPSBEYXRhU2l6ZTsKKysgICAgYnJlYWs7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4g MDsKKysgIH0KKysKKysgIHJldHVybiBwOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKworKy8qCisrCisrVGhlIGlkIGNhbiBiZSBzdG9yZWQgd2l0aCAxIHRvIDUgYnl0ZXMKKysK KytTID0gc2lnbmFsIGJpdAorK1ggPSBiaXQgcGFydCBvZiBpZAorKworKyAgMFNYWCBYWFhYCisr ICAxMDBTIFhYWFggKyAxIGJ5dGUKKysgIDEwMVMgWFhYWCArIDIgYnl0ZXMKKysgIDExMFMgWFhY WCArIDMgYnl0ZXMKKysgIDExMTAgMDAwMCArIDQgYnl0ZXMKKysKKysqLworK0JJTk5fUFJJVkFU RSBpbnQgcmVhZF9tYXBfaWQodW5zaWduZWQgY2hhciAqKnBwLCB1bnNpZ25lZCBjaGFyICpwbGlt aXQpIHsKKysgIHVuc2lnbmVkIGNoYXIgKnAsIGMsIHNpZ24sIHR5cGU7CisrICBpbnQgaWQsIGV4 dHJhX2J5dGVzOworKworKyAgcCA9ICpwcDsKKysgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gMDsK KysKKysgIGMgPSAqcCsrOworKworKyAgaWYgKGMgJiAweDgwKSB7CisrICAgIGV4dHJhX2J5dGVz ID0gKChjICYgMHg2MCkgPj4gNSkgKyAxOworKyAgICBpZiAocCArIGV4dHJhX2J5dGVzID4gcGxp bWl0ICkgeworKyAgICAgICpwcCA9IHAgKyBleHRyYV9ieXRlczsKKysgICAgICByZXR1cm4gMDsK KysgICAgfQorKyAgfQorKworKyAgdHlwZSA9IGMgJiAweEUwOworKyAgc2lnbiA9IGMgJiAweDEw OworKworKyAgaWYgKChjICYgMHg4MCkgPT0gMCkgeworKyAgICBzaWduID0gYyAmIDB4NDA7Cisr ICAgIGlkID0gYyAmIDB4M0Y7CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMHg4MCkgeworKyAgICBp ZCA9IGMgJiAweDBGOworKyAgICBpZCA9IChpZCA8PCA4KSB8ICpwKys7CisrICB9IGVsc2UgaWYg KHR5cGUgPT0gMHhBMCkgeworKyAgICBpZCA9IGMgJiAweDBGOworKyAgICBpZCA9IChpZCA8PCA4 KSB8ICpwKys7CisrICAgIGlkID0gKGlkIDw8IDgpIHwgKnArKzsKKysgIH0gZWxzZSBpZiAodHlw ZSA9PSAweEMwKSB7CisrICAgIGlkID0gYyAmIDB4MEY7CisrICAgIGlkID0gKGlkIDw8IDgpIHwg KnArKzsKKysgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOworKyAgICBpZCA9IChpZCA8PCA4KSB8 ICpwKys7CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMHhFMCkgeworKyAgICBjb3B5X2JlMzIoKHUz MiopJmlkLCAodTMyKilwKTsKKysgICAgcCArPSA0OworKyAgfSBlbHNlIHsKKysgICAgKnBwID0g cGxpbWl0ICsgMjsKKysgICAgcmV0dXJuIDA7CisrICB9CisrCisrICBpZiAoc2lnbikgaWQgPSAt aWQ7CisrCisrICAqcHAgPSBwOworKworKyAgcmV0dXJuIGlkOworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK0JJTk5fUFJJVkFURSB1bnNpZ25lZCBjaGFyICogU2VhcmNoRm9ySUQo dW5zaWduZWQgY2hhciAqcCwgaW50IGhlYWRlcl9zaXplLCBpbnQgc2l6ZSwgaW50IG51bWl0ZW1z LCBpbnQgaWQpIHsKKysgIHVuc2lnbmVkIGNoYXIgKnBsaW1pdCwgKmJhc2U7CisrICBpbnQgIGks IGludDMyOworKworKyAgYmFzZSA9IHA7CisrICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7CisrICBw ICs9IGhlYWRlcl9zaXplOworKworKyAgLy8gc2VhcmNoIGZvciB0aGUgSUQgaW4gYWxsIHRoZSBh cmd1bWVudHMuCisrICBmb3IgKGkgPSAwOyBpIDwgbnVtaXRlbXM7IGkrKykgeworKyAgICBpbnQz MiA9IHJlYWRfbWFwX2lkKCZwLCBwbGltaXQpOworKyAgICBpZiAocCA+IHBsaW1pdCkgYnJlYWs7 CisrICAgIC8vIENvbXBhcmUgaWYgdGhlIElEcyBhcmUgZXF1YWwuCisrICAgIGlmIChpbnQzMiA9 PSBpZCkgcmV0dXJuIHA7CisrICAgIC8vIHh4eAorKyAgICBwID0gQWR2YW5jZURhdGFQb3MocCwg cGxpbWl0KTsKKysgICAgaWYgKHAgPT0gMCB8fCBwIDwgYmFzZSkgYnJlYWs7CisrICB9CisrCisr ICByZXR1cm4gTlVMTDsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5O X1BSSVZBVEUgdW5zaWduZWQgY2hhciAqIFNlYXJjaEZvcktleSh1bnNpZ25lZCBjaGFyICpwLCBp bnQgaGVhZGVyX3NpemUsIGludCBzaXplLCBpbnQgbnVtaXRlbXMsIGNvbnN0IGNoYXIgKmtleSkg eworKyAgdW5zaWduZWQgY2hhciBsZW4sICpwbGltaXQsICpiYXNlOworKyAgaW50ICBpLCBrZXls ZW47CisrCisrICBiYXNlID0gcDsKKysgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKKysgIHAgKz0g aGVhZGVyX3NpemU7CisrCisrICBrZXlsZW4gPSBzdHJsZW4oa2V5KTsKKysKKysgIC8vIHNlYXJj aCBmb3IgdGhlIGtleSBpbiBhbGwgdGhlIGFyZ3VtZW50cy4KKysgIGZvciAoaSA9IDA7IGkgPCBu dW1pdGVtczsgaSsrKSB7CisrICAgIGlmIChwID4gcGxpbWl0KSBicmVhazsKKysgICAgbGVuID0g KigodW5zaWduZWQgY2hhciAqKXApOworKyAgICBwKys7CisrICAgIGlmIChwICsgbGVuID4gcGxp bWl0KSBicmVhazsKKysgICAgLy8gQ29tcGFyZSBpZiB0aGUgc3RyaW5ncyBhcmUgZXF1YWwuCisr ICAgIGlmIChsZW4gPiAwKSB7CisrICAgICAgaWYgKHN0cm5pY21wKChjaGFyKilwLCBrZXksIGxl bikgPT0gMCkgeyAgIC8vIG5vdGUgdGhhdCB0aGVyZSBpcyBubyBudWxsIHRlcm1pbmF0b3IgaGVy ZQorKyAgICAgICAgaWYgKGtleWxlbiA9PSBsZW4pIHsKKysgICAgICAgICAgcCArPSBsZW47Cisr ICAgICAgICAgIHJldHVybiBwOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBwICs9IGxl bjsKKysgICAgfSBlbHNlIGlmIChsZW4gPT0ga2V5bGVuKSB7ICAgLy8gaW4gdGhlIGNhc2Ugb2Yg ZW1wdHkgc3RyaW5nOiAiIgorKyAgICAgIHJldHVybiBwOworKyAgICB9CisrICAgIC8vIHh4eAor KyAgICBwID0gQWR2YW5jZURhdGFQb3MocCwgcGxpbWl0KTsKKysgICAgaWYgKHAgPT0gMCB8fCBw IDwgYmFzZSkgYnJlYWs7CisrICB9CisrCisrICByZXR1cm4gTlVMTDsKKysKKyt9CisrCisrLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBBZGRWYWx1ZShiaW5uICpp dGVtLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSk7CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBiaW5uX2xpc3RfYWRkX3JhdyhiaW5uICpp dGVtLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgeworKworKyAgaWYgKGl0ZW0g PT0gTlVMTCB8fCBpdGVtLT50eXBlICE9IEJJTk5fTElTVCB8fCBpdGVtLT53cml0YWJsZSA9PSBG QUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgLy9pZiAoQ2hlY2tBbGxvY2F0aW9uKGl0ZW0sIDQp ID09IEZBTFNFKSByZXR1cm4gRkFMU0U7ICAvLyA0IGJ5dGVzIHVzZWQgZm9yIGRhdGFfc3RvcmUg YW5kIGRhdGFfZm9ybWF0LgorKworKyAgaWYgKEFkZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwg c2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGl0ZW0tPmNvdW50Kys7CisrCisr ICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5O X1BSSVZBVEUgQk9PTCBiaW5uX29iamVjdF9zZXRfcmF3KGJpbm4gKml0ZW0sIGNvbnN0IGNoYXIg KmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKKysgIHVuc2lnbmVkIGNo YXIgKnAsIGxlbjsKKysgIGludCBpbnQzMjsKKysKKysgIGlmIChpdGVtID09IE5VTEwgfHwgaXRl bS0+dHlwZSAhPSBCSU5OX09CSkVDVCB8fCBpdGVtLT53cml0YWJsZSA9PSBGQUxTRSkgcmV0dXJu IEZBTFNFOworKworKyAgaWYgKGtleSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrICBpbnQzMiA9 IHN0cmxlbihrZXkpOworKyAgaWYgKGludDMyID4gMjU1KSByZXR1cm4gRkFMU0U7CisrCisrICAv LyBpcyB0aGUga2V5IGFscmVhZHkgaW4gaXQ/CisrICBwID0gU2VhcmNoRm9yS2V5KGl0ZW0tPnBi dWYsIE1BWF9CSU5OX0hFQURFUiwgaXRlbS0+dXNlZF9zaXplLCBpdGVtLT5jb3VudCwga2V5KTsK KysgIGlmIChwKSByZXR1cm4gRkFMU0U7CisrCisrICAvLyBzdGFydCBhZGRpbmcgaXQKKysKKysg IGlmIChDaGVja0FsbG9jYXRpb24oaXRlbSwgMSArIGludDMyKSA9PSBGQUxTRSkgcmV0dXJuIEZB TFNFOyAgLy8gYnl0ZXMgdXNlZCBmb3IgdGhlIGtleSBzaXplIGFuZCB0aGUga2V5IGl0c2VsZi4K KysKKysgIHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBpdGVtLT51c2VkX3Np emU7CisrICBsZW4gPSBpbnQzMjsKKysgICpwID0gbGVuOworKyAgcCsrOworKyAgbWVtY3B5KHAs IGtleSwgaW50MzIpOworKyAgaW50MzIrKzsgIC8vIG5vdyBjb250YWlucyB0aGUgc3RybGVuICsg MSBieXRlIGZvciB0aGUgbGVuCisrICBpdGVtLT51c2VkX3NpemUgKz0gaW50MzI7CisrCisrICBp ZiAoQWRkVmFsdWUoaXRlbSwgdHlwZSwgcHZhbHVlLCBzaXplKSA9PSBGQUxTRSkgeworKyAgICBp dGVtLT51c2VkX3NpemUgLT0gaW50MzI7CisrICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysg IGl0ZW0tPmNvdW50Kys7CisrCisrICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBiaW5uX21hcF9zZXRfcmF3KGJpbm4g Kml0ZW0sIGludCBpZCwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKKysgIHVu c2lnbmVkIGNoYXIgKmJhc2UsICpwLCBzaWduOworKyAgaW50IGlkX3NpemU7CisrCisrICBpZiAo aXRlbSA9PSBOVUxMIHx8IGl0ZW0tPnR5cGUgIT0gQklOTl9NQVAgfHwgaXRlbS0+d3JpdGFibGUg PT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIC8vIGlzIHRoZSBJRCBhbHJlYWR5IGluIGl0 PworKyAgcCA9IFNlYXJjaEZvcklEKGl0ZW0tPnBidWYsIE1BWF9CSU5OX0hFQURFUiwgaXRlbS0+ dXNlZF9zaXplLCBpdGVtLT5jb3VudCwgaWQpOworKyAgaWYgKHApIHJldHVybiBGQUxTRTsKKysK KysgIC8vIHN0YXJ0IGFkZGluZyBpdAorKworKyAgaWYgKENoZWNrQWxsb2NhdGlvbihpdGVtLCA1 KSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOyAgLy8gbWF4IDUgYnl0ZXMgdXNlZCBmb3IgdGhlIGlk LgorKworKyAgcCA9IGJhc2UgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBpdGVt LT51c2VkX3NpemU7CisrCisrICBzaWduID0gKGlkIDwgMCk7CisrICBpZiAoc2lnbikgaWQgPSAt aWQ7CisrCisrICBpZiAoaWQgPD0gMHgzRikgeworKyAgICAqcCsrID0gKHNpZ24gPDwgNikgfCBp ZDsKKysgIH0gZWxzZSBpZiAoaWQgPD0gMHhGRkYpIHsKKysgICAgKnArKyA9IDB4ODAgfCAoc2ln biA8PCA0KSB8ICgoaWQgJiAweEYwMCkgPj4gOCk7CisrICAgICpwKysgPSBpZCAmIDB4RkY7Cisr ICB9IGVsc2UgaWYgKGlkIDw9IDB4RkZGRkYpIHsKKysgICAgKnArKyA9IDB4QTAgfCAoc2lnbiA8 PCA0KSB8ICgoaWQgJiAweEYwMDAwKSA+PiAxNik7CisrICAgICpwKysgPSAoaWQgJiAweEZGMDAp ID4+IDg7CisrICAgICpwKysgPSBpZCAmIDB4RkY7CisrICB9IGVsc2UgaWYgKGlkIDw9IDB4RkZG RkZGRikgeworKyAgICAqcCsrID0gMHhDMCB8IChzaWduIDw8IDQpIHwgKChpZCAmIDB4RjAwMDAw MCkgPj4gMjQpOworKyAgICAqcCsrID0gKGlkICYgMHhGRjAwMDApID4+IDE2OworKyAgICAqcCsr ID0gKGlkICYgMHhGRjAwKSA+PiA4OworKyAgICAqcCsrID0gaWQgJiAweEZGOworKyAgfSBlbHNl IHsKKysgICAgKnArKyA9IDB4RTA7CisrICAgIGlmIChzaWduKSBpZCA9IC1pZDsKKysgICAgY29w eV9iZTMyKCh1MzIqKXAsICh1MzIqKSZpZCk7CisrICAgIHAgKz0gNDsKKysgIH0KKysKKysgIGlk X3NpemUgPSAocCAtIGJhc2UpOworKyAgaXRlbS0+dXNlZF9zaXplICs9IGlkX3NpemU7CisrCisr ICBpZiAoQWRkVmFsdWUoaXRlbSwgdHlwZSwgcHZhbHVlLCBzaXplKSA9PSBGQUxTRSkgeworKyAg ICBpdGVtLT51c2VkX3NpemUgLT0gaWRfc2l6ZTsKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQor KworKyAgaXRlbS0+Y291bnQrKzsKKysKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSB2b2lkICogY29tcHJlc3NfaW50KGlu dCAqcHN0b3JhZ2VfdHlwZSwgaW50ICpwdHlwZSwgdm9pZCAqcHNvdXJjZSkgeworKyAgaW50IHN0 b3JhZ2VfdHlwZSwgc3RvcmFnZV90eXBlMiwgdHlwZSwgdHlwZTI9MDsKKysgIGludDY0ICB2aW50 ID0gMDsKKysgIHVpbnQ2NCB2dWludDsKKysgIGNoYXIgKnB2YWx1ZTsKKysjaWYgQllURV9PUkRF UiA9PSBCSUdfRU5ESUFOCisrICBpbnQgc2l6ZTEsIHNpemUyOworKyNlbmRpZgorKworKyAgc3Rv cmFnZV90eXBlID0gKnBzdG9yYWdlX3R5cGU7CisrICBpZiAoc3RvcmFnZV90eXBlID09IEJJTk5f U1RPUkFHRV9CWVRFKSByZXR1cm4gcHNvdXJjZTsKKysKKysgIHR5cGUgPSAqcHR5cGU7CisrCisr ICBzd2l0Y2ggKHR5cGUpIHsKKysgIGNhc2UgQklOTl9JTlQ2NDoKKysgICAgdmludCA9ICooaW50 NjQqKXBzb3VyY2U7CisrICAgIGdvdG8gbG9jX3NpZ25lZDsKKysgIGNhc2UgQklOTl9JTlQzMjoK KysgICAgdmludCA9ICooaW50Kilwc291cmNlOworKyAgICBnb3RvIGxvY19zaWduZWQ7CisrICBj YXNlIEJJTk5fSU5UMTY6CisrICAgIHZpbnQgPSAqKHNob3J0Kilwc291cmNlOworKyAgICBnb3Rv IGxvY19zaWduZWQ7CisrICBjYXNlIEJJTk5fVUlOVDY0OgorKyAgICB2dWludCA9ICoodWludDY0 Kilwc291cmNlOworKyAgICBnb3RvIGxvY19wb3NpdGl2ZTsKKysgIGNhc2UgQklOTl9VSU5UMzI6 CisrICAgIHZ1aW50ID0gKih1bnNpZ25lZCBpbnQqKXBzb3VyY2U7CisrICAgIGdvdG8gbG9jX3Bv c2l0aXZlOworKyAgY2FzZSBCSU5OX1VJTlQxNjoKKysgICAgdnVpbnQgPSAqKHVuc2lnbmVkIHNo b3J0Kilwc291cmNlOworKyAgICBnb3RvIGxvY19wb3NpdGl2ZTsKKysgIH0KKysKKytsb2Nfc2ln bmVkOgorKworKyAgaWYgKHZpbnQgPj0gMCkgeworKyAgICB2dWludCA9IHZpbnQ7CisrICAgIGdv dG8gbG9jX3Bvc2l0aXZlOworKyAgfQorKworKy8vbG9jX25lZ2F0aXZlOgorKworKyAgaWYgKHZp bnQgPj0gSU5UOF9NSU4pIHsKKysgICAgdHlwZTIgPSBCSU5OX0lOVDg7CisrICB9IGVsc2UKKysg IGlmICh2aW50ID49IElOVDE2X01JTikgeworKyAgICB0eXBlMiA9IEJJTk5fSU5UMTY7CisrICB9 IGVsc2UKKysgIGlmICh2aW50ID49IElOVDMyX01JTikgeworKyAgICB0eXBlMiA9IEJJTk5fSU5U MzI7CisrICB9CisrICBnb3RvIGxvY19leGl0OworKworK2xvY19wb3NpdGl2ZToKKysKKysgIGlm ICh2dWludCA8PSBVSU5UOF9NQVgpIHsKKysgICAgdHlwZTIgPSBCSU5OX1VJTlQ4OworKyAgfSBl bHNlCisrICBpZiAodnVpbnQgPD0gVUlOVDE2X01BWCkgeworKyAgICB0eXBlMiA9IEJJTk5fVUlO VDE2OworKyAgfSBlbHNlCisrICBpZiAodnVpbnQgPD0gVUlOVDMyX01BWCkgeworKyAgICB0eXBl MiA9IEJJTk5fVUlOVDMyOworKyAgfQorKworK2xvY19leGl0OgorKworKyAgcHZhbHVlID0gKGNo YXIgKikgcHNvdXJjZTsKKysKKysgIGlmICh0eXBlMiAmJiB0eXBlMiAhPSB0eXBlKSB7CisrICAg ICpwdHlwZSA9IHR5cGUyOworKyAgICBzdG9yYWdlX3R5cGUyID0gYmlubl9nZXRfd3JpdGVfc3Rv cmFnZSh0eXBlMik7CisrICAgICpwc3RvcmFnZV90eXBlID0gc3RvcmFnZV90eXBlMjsKKysjaWYg QllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisrICAgIHNpemUxID0gZ2V0X3N0b3JhZ2Vfc2l6ZShz dG9yYWdlX3R5cGUpOworKyAgICBzaXplMiA9IGdldF9zdG9yYWdlX3NpemUoc3RvcmFnZV90eXBl Mik7CisrICAgIHB2YWx1ZSArPSAoc2l6ZTEgLSBzaXplMik7CisrI2VuZGlmCisrICB9CisrCisr ICByZXR1cm4gcHZhbHVlOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJ Tk5fUFJJVkFURSBpbnQgdHlwZV9mYW1pbHkoaW50IHR5cGUpOworKworK0JJTk5fUFJJVkFURSBC T09MIEFkZFZhbHVlKGJpbm4gKml0ZW0sIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXpl KSB7CisrICBpbnQgaW50MzIsIEFyZ1NpemUsIHN0b3JhZ2VfdHlwZSwgZXh0cmFfdHlwZTsKKysg IHVuc2lnbmVkIGNoYXIgKnA7CisrCisrICBiaW5uX2dldF90eXBlX2luZm8odHlwZSwgJnN0b3Jh Z2VfdHlwZSwgJmV4dHJhX3R5cGUpOworKworKyAgaWYgKHB2YWx1ZSA9PSBOVUxMKSB7CisrICAg IHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7CisrICAgICAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRF UzoKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6CisrICAg ICAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgICAgICAgaWYgKHNpemUgPT0gMCkgYnJl YWs7IC8vIHRoZSAyIGFib3ZlIGFyZSBhbGxvd2VkIHRvIGhhdmUgMCBsZW5ndGgKKysJLyogZmFs bCB0aHJvdWdoICovCisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIHJldHVybiBGQUxTRTsKKysg ICAgfQorKyAgfQorKworKyAgaWYgKHR5cGVfZmFtaWx5KHR5cGUpID09IEJJTk5fRkFNSUxZX0lO VCAmJiBpdGVtLT5kaXNhYmxlX2ludF9jb21wcmVzc2lvbiA9PSBGQUxTRSkKKysgICAgcHZhbHVl ID0gY29tcHJlc3NfaW50KCZzdG9yYWdlX3R5cGUsICZ0eXBlLCBwdmFsdWUpOworKworKyAgc3dp dGNoIChzdG9yYWdlX3R5cGUpIHsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKKysg ICAgICBzaXplID0gMDsKKysgICAgICBBcmdTaXplID0gc2l6ZTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKKysgICAgICBzaXplID0gMTsKKysgICAgICBBcmdT aXplID0gc2l6ZTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfV09SRDoK KysgICAgICBzaXplID0gMjsKKysgICAgICBBcmdTaXplID0gc2l6ZTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6CisrICAgICAgc2l6ZSA9IDQ7CisrICAgICAg QXJnU2l6ZSA9IHNpemU7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX1FX T1JEOgorKyAgICAgIHNpemUgPSA4OworKyAgICAgIEFyZ1NpemUgPSBzaXplOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgorKyAgICAgIGlmIChzaXplIDwgMCkg cmV0dXJuIEZBTFNFOworKyAgICAgIC8vaWYgKHNpemUgPT0gMCkgLi4uCisrICAgICAgQXJnU2l6 ZSA9IHNpemUgKyA0OyAvLyBhdCBsZWFzdCB0aGlzIHNpemUKKysgICAgICBicmVhazsKKysgICAg Y2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgICAgIGlmIChzaXplIDwgMCkgcmV0dXJuIEZB TFNFOworKyAgICAgIGlmIChzaXplID09IDApIHNpemUgPSBzdHJsZW4yKCAoY2hhciAqKSBwdmFs dWUpOworKyAgICAgIEFyZ1NpemUgPSBzaXplICsgNTsgLy8gYXQgbGVhc3QgdGhpcyBzaXplCisr ICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKKysgICAgICBp ZiAoc2l6ZSA8PSAwKSByZXR1cm4gRkFMU0U7CisrICAgICAgQXJnU2l6ZSA9IHNpemU7CisrICAg ICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKwor KyAgQXJnU2l6ZSArPSAyOyAgLy8gYXQgbGVhc3QgMiBieXRlcyB1c2VkIGZvciBkYXRhX3R5cGUu CisrICBpZiAoQ2hlY2tBbGxvY2F0aW9uKGl0ZW0sIEFyZ1NpemUpID09IEZBTFNFKSByZXR1cm4g RkFMU0U7CisrCisrICAvLyBHZXRzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IHBsYWNlIGluIGJ1 ZmZlcgorKyAgcCA9ICgodW5zaWduZWQgY2hhciAqKSBpdGVtLT5wYnVmKSArIGl0ZW0tPnVzZWRf c2l6ZTsKKysKKysgIC8vIElmIHRoZSBkYXRhIGlzIG5vdCBhIGNvbnRhaW5lciwgc3RvcmUgdGhl IGRhdGEgdHlwZQorKyAgaWYgKHN0b3JhZ2VfdHlwZSAhPSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVS KSB7CisrICAgIGlmICh0eXBlID4gMjU1KSB7CisrICAgICAgdTE2IHR5cGUxNiA9IHR5cGU7Cisr ICAgICAgY29weV9iZTE2KCh1MTYqKXAsICh1MTYqKSZ0eXBlMTYpOworKyAgICAgIHAgKz0gMjsK KysgICAgICBpdGVtLT51c2VkX3NpemUgKz0gMjsKKysgICAgfSBlbHNlIHsKKysgICAgICAqcCA9 IHR5cGU7CisrICAgICAgcCsrOworKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSsrOworKyAgICB9Cisr ICB9CisrCisrICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkgeworKyAgICBjYXNlIEJJTk5fU1RPUkFH RV9OT0JZVEVTOgorKyAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisrICAgICAgYnJlYWs7CisrICAg IGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6CisrICAgICAgKigoY2hhciAqKSBwKSA9ICooKGNoYXIg KikgcHZhbHVlKTsKKysgICAgICBpdGVtLT51c2VkX3NpemUgKz0gMTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSBCSU5OX1NUT1JBR0VfV09SRDoKKysgICAgICBjb3B5X2JlMTYoKHUxNiopcCwg KHUxNiopcHZhbHVlKTsKKysgICAgICBpdGVtLT51c2VkX3NpemUgKz0gMjsKKysgICAgICBicmVh azsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6CisrICAgICAgY29weV9iZTMyKCh1MzIq KXAsICh1MzIqKXB2YWx1ZSk7CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDQ7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgorKyAgICAgIGNvcHlfYmU2NCgo dTY0KilwLCAodTY0KilwdmFsdWUpOworKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSA4OworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgorKyAgICBjYXNlIEJJTk5f U1RPUkFHRV9TVFJJTkc6CisrICAgICAgaWYgKHNpemUgPiAxMjcpIHsKKysgICAgICAgIGludDMy ID0gc2l6ZSB8IDB4ODAwMDAwMDA7CisrICAgICAgICBjb3B5X2JlMzIoKHUzMiopcCwgKHUzMiop JmludDMyKTsKKysgICAgICAgIHAgKz0gNDsKKysgICAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSA0 OworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopIHApID0gc2l6 ZTsKKysgICAgICAgIHArKzsKKysgICAgICAgIGl0ZW0tPnVzZWRfc2l6ZSsrOworKyAgICAgIH0K KysgICAgICBtZW1jcHkocCwgcHZhbHVlLCBzaXplKTsKKysgICAgICBpZiAoc3RvcmFnZV90eXBl ID09IEJJTk5fU1RPUkFHRV9TVFJJTkcpIHsKKysgICAgICAgIHAgKz0gc2l6ZTsKKysgICAgICAg ICooKGNoYXIgKikgcCkgPSAoY2hhcikgMDsKKysgICAgICAgIHNpemUrKzsgIC8vIG51bGwgdGVy bWluYXRvcgorKyAgICAgIH0KKysgICAgICBpdGVtLT51c2VkX3NpemUgKz0gc2l6ZTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgorKyAgICAgIG1lbWNw eShwLCBwdmFsdWUsIHNpemUpOworKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSBzaXplOworKyAg ICAgIGJyZWFrOworKyAgfQorKworKyAgaXRlbS0+ZGlydHkgPSBUUlVFOworKworKyAgcmV0dXJu IFRSVUU7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJP T0wgYmlubl9zYXZlX2hlYWRlcihiaW5uICppdGVtKSB7CisrICB1bnNpZ25lZCBjaGFyIGJ5dGUs ICpwOworKyAgaW50IGludDMyLCBzaXplOworKworKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJu IEZBTFNFOworKworKyNpZm5kZWYgQklOTl9ESVNBQkxFX1NNQUxMX0hFQURFUgorKworKyAgcCA9 ICgodW5zaWduZWQgY2hhciAqKSBpdGVtLT5wYnVmKSArIE1BWF9CSU5OX0hFQURFUjsKKysgIHNp emUgPSBpdGVtLT51c2VkX3NpemUgLSBNQVhfQklOTl9IRUFERVIgKyAzOyAgLy8gYXQgbGVhc3Qg MyBieXRlcyBmb3IgdGhlIGhlYWRlcgorKworKyAgLy8gd3JpdGUgdGhlIGNvdW50CisrICBpZiAo aXRlbS0+Y291bnQgPiAxMjcpIHsKKysgICAgcCAtPSA0OworKyAgICBzaXplICs9IDM7CisrICAg IGludDMyID0gaXRlbS0+Y291bnQgfCAweDgwMDAwMDAwOworKyAgICBjb3B5X2JlMzIoKHUzMiop cCwgKHUzMiopJmludDMyKTsKKysgIH0gZWxzZSB7CisrICAgIHAtLTsKKysgICAgKnAgPSAodW5z aWduZWQgY2hhcikgaXRlbS0+Y291bnQ7CisrICB9CisrCisrICAvLyB3cml0ZSB0aGUgc2l6ZQor KyAgaWYgKHNpemUgPiAxMjcpIHsKKysgICAgcCAtPSA0OworKyAgICBzaXplICs9IDM7CisrICAg IGludDMyID0gc2l6ZSB8IDB4ODAwMDAwMDA7CisrICAgIGNvcHlfYmUzMigodTMyKilwLCAodTMy KikmaW50MzIpOworKyAgfSBlbHNlIHsKKysgICAgcC0tOworKyAgICAqcCA9ICh1bnNpZ25lZCBj aGFyKSBzaXplOworKyAgfQorKworKyAgLy8gd3JpdGUgdGhlIHR5cGUuCisrICBwLS07CisrICAq cCA9ICh1bnNpZ25lZCBjaGFyKSBpdGVtLT50eXBlOworKworKyAgLy8gc2V0IHRoZSB2YWx1ZXMK KysgIGl0ZW0tPnB0ciA9IHA7CisrICBpdGVtLT5zaXplID0gc2l6ZTsKKysKKysgIFVOVVNFRChi eXRlKTsKKysKKysjZWxzZQorKworKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWY7 CisrCisrICAvLyB3cml0ZSB0aGUgdHlwZS4KKysgIGJ5dGUgPSBpdGVtLT50eXBlOworKyAgKnAg PSBieXRlOyBwKys7CisrICAvLyB3cml0ZSB0aGUgc2l6ZQorKyAgaW50MzIgPSBpdGVtLT51c2Vk X3NpemUgfCAweDgwMDAwMDAwOworKyAgY29weV9iZTMyKCh1MzIqKXAsICh1MzIqKSZpbnQzMik7 CisrICBwKz00OworKyAgLy8gd3JpdGUgdGhlIGNvdW50CisrICBpbnQzMiA9IGl0ZW0tPmNvdW50 IHwgMHg4MDAwMDAwMDsKKysgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKikmaW50MzIpOworKwor KyAgaXRlbS0+cHRyID0gaXRlbS0+cGJ1ZjsKKysgIGl0ZW0tPnNpemUgPSBpdGVtLT51c2VkX3Np emU7CisrCisrI2VuZGlmCisrCisrICBpdGVtLT5kaXJ0eSA9IEZBTFNFOworKworKyAgcmV0dXJu IFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrdm9pZCBBUElFTlRS WSBiaW5uX2ZyZWUoYmlubiAqaXRlbSkgeworKworKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJu OworKworKyAgaWYgKGl0ZW0tPndyaXRhYmxlICYmIGl0ZW0tPnByZV9hbGxvY2F0ZWQgPT0gRkFM U0UpIHsKKysgICAgZnJlZV9mbihpdGVtLT5wYnVmKTsKKysgIH0KKysKKysgIGlmIChpdGVtLT5m cmVlZm4pIGl0ZW0tPmZyZWVmbihpdGVtLT5wdHIpOworKworKyAgaWYgKGl0ZW0tPmFsbG9jYXRl ZCkgeworKyAgICBmcmVlX2ZuKGl0ZW0pOworKyAgfSBlbHNlIHsKKysgICAgbWVtc2V0KGl0ZW0s IDAsIHNpemVvZihiaW5uKSk7CisrICAgIGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7CisrICB9 CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLy8gZnJlZSB0aGUgYmlubiBzdHJ1 Y3R1cmUgYnV0IGtlZXBzIHRoZSBiaW5uIGJ1ZmZlciBhbGxvY2F0ZWQsIHJldHVybmluZyBhIHBv aW50ZXIgdG8gaXQuIHVzZSB0aGUgZnJlZSBmdW5jdGlvbiB0byByZWxlYXNlIHRoZSBidWZmZXIg bGF0ZXIKKyt2b2lkICogQVBJRU5UUlkgYmlubl9yZWxlYXNlKGJpbm4gKml0ZW0pIHsKKysgIHZv aWQgKmRhdGE7CisrCisrICBpZiAoaXRlbSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKysKKysgIGRh dGEgPSBiaW5uX3B0cihpdGVtKTsKKysKKysgIGlmIChkYXRhID4gaXRlbS0+cGJ1ZikgeworKyAg ICBtZW1tb3ZlKGl0ZW0tPnBidWYsIGRhdGEsIGl0ZW0tPnNpemUpOworKyAgICBkYXRhID0gaXRl bS0+cGJ1ZjsKKysgIH0KKysKKysgIGlmIChpdGVtLT5hbGxvY2F0ZWQpIHsKKysgICAgZnJlZV9m bihpdGVtKTsKKysgIH0gZWxzZSB7CisrICAgIG1lbXNldChpdGVtLCAwLCBzaXplb2YoYmlubikp OworKyAgICBpdGVtLT5oZWFkZXIgPSBCSU5OX01BR0lDOworKyAgfQorKworKyAgcmV0dXJuIGRh dGE7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJP T0wgSXNWYWxpZEJpbm5IZWFkZXIoY29uc3Qgdm9pZCAqcGJ1ZiwgaW50ICpwdHlwZSwgaW50ICpw Y291bnQsIGludCAqcHNpemUsIGludCAqcGhlYWRlcnNpemUpIHsKKysgIHVuc2lnbmVkIGNoYXIg Ynl0ZSwgKnAsICpwbGltaXQ9MDsKKysgIGludCBpbnQzMiwgdHlwZSwgc2l6ZSwgY291bnQ7Cisr CisrICBpZiAocGJ1ZiA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICBwID0gKHVuc2lnbmVk IGNoYXIgKikgcGJ1ZjsKKysKKysgIGlmIChwc2l6ZSAmJiAqcHNpemUgPiAwKSB7CisrICAgIGlm ICgqcHNpemUgPCBNSU5fQklOTl9TSVpFKSByZXR1cm4gRkFMU0U7CisrICAgIHBsaW1pdCA9IHAg KyAqcHNpemUgLSAxOworKyAgfQorKworKyAgLy8gZ2V0IHRoZSB0eXBlCisrICBieXRlID0gKnA7 IHArKzsKKysgIGlmICgoYnl0ZSAmIEJJTk5fU1RPUkFHRV9NQVNLKSAhPSBCSU5OX1NUT1JBR0Vf Q09OVEFJTkVSKSByZXR1cm4gRkFMU0U7CisrICBpZiAoYnl0ZSAmIEJJTk5fU1RPUkFHRV9IQVNf TU9SRSkgcmV0dXJuIEZBTFNFOworKyAgdHlwZSA9IGJ5dGU7CisrCisrICBzd2l0Y2ggKHR5cGUp IHsKKysgICAgY2FzZSBCSU5OX0xJU1Q6CisrICAgIGNhc2UgQklOTl9NQVA6CisrICAgIGNhc2Ug QklOTl9PQkpFQ1Q6CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJu IEZBTFNFOworKyAgfQorKworKyAgLy8gZ2V0IHRoZSBzaXplCisrICBpZiAocGxpbWl0ICYmIHAg PiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgIGludDMyID0gKigodW5zaWduZWQgY2hhciopcCk7 CisrICBpZiAoaW50MzIgJiAweDgwKSB7CisrICAgIGlmIChwbGltaXQgJiYgcCArIHNpemVvZihp bnQpIC0gMSA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICBjb3B5X2JlMzIoKHUzMiopJmlu dDMyLCAodTMyKilwKTsKKysgICAgaW50MzIgJj0gMHg3RkZGRkZGRjsKKysgICAgcCs9NDsKKysg IH0gZWxzZSB7CisrICAgIHArKzsKKysgIH0KKysgIHNpemUgPSBpbnQzMjsKKysKKysgIC8vIGdl dCB0aGUgY291bnQKKysgIGlmIChwbGltaXQgJiYgcCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwor KyAgaW50MzIgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsKKysgIGlmIChpbnQzMiAmIDB4ODApIHsK KysgICAgaWYgKHBsaW1pdCAmJiBwICsgc2l6ZW9mKGludCkgLSAxID4gcGxpbWl0KSByZXR1cm4g RkFMU0U7CisrICAgIGNvcHlfYmUzMigodTMyKikmaW50MzIsICh1MzIqKXApOworKyAgICBpbnQz MiAmPSAweDdGRkZGRkZGOworKyAgICBwKz00OworKyAgfSBlbHNlIHsKKysgICAgcCsrOworKyAg fQorKyAgY291bnQgPSBpbnQzMjsKKysKKysgIGlmIChzaXplIDwgTUlOX0JJTk5fU0laRSB8fCBj b3VudCA8IDApIHJldHVybiBGQUxTRTsKKysKKysgIC8vIHJldHVybiB0aGUgdmFsdWVzCisrICBp ZiAocHR5cGUpICAqcHR5cGUgID0gdHlwZTsKKysgIGlmIChwY291bnQpICpwY291bnQgPSBjb3Vu dDsKKysgIGlmIChwc2l6ZSkgICpwc2l6ZSAgPSBzaXplOworKyAgaWYgKHBoZWFkZXJzaXplKSAq cGhlYWRlcnNpemUgPSAoaW50KSAocCAtICh1bnNpZ25lZCBjaGFyKilwYnVmKTsKKysgIHJldHVy biBUUlVFOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBp bnQgYmlubl9idWZfdHlwZShjb25zdCB2b2lkICpwYnVmKSB7CisrICBpbnQgIHR5cGU7CisrCisr ICBpZiAoIUlzVmFsaWRCaW5uSGVhZGVyKHBidWYsICZ0eXBlLCBOVUxMLCBOVUxMLCBOVUxMKSkg cmV0dXJuIElOVkFMSURfQklOTjsKKysKKysgIHJldHVybiB0eXBlOworKworK30KKysKKysvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBpbnQgYmlubl9idWZfY291bnQoY29u c3Qgdm9pZCAqcGJ1ZikgeworKyAgaW50ICBuaXRlbXM7CisrCisrICBpZiAoIUlzVmFsaWRCaW5u SGVhZGVyKHBidWYsIE5VTEwsICZuaXRlbXMsIE5VTEwsIE5VTEwpKSByZXR1cm4gMDsKKysKKysg IHJldHVybiBuaXRlbXM7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklO Tl9QUklWQVRFIGludCBiaW5uX2J1Zl9zaXplKGNvbnN0IHZvaWQgKnBidWYpIHsKKysgIGludCAg c2l6ZT0wOworKworKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihwYnVmLCBOVUxMLCBOVUxMLCAm c2l6ZSwgTlVMTCkpIHJldHVybiAwOworKworKyAgcmV0dXJuIHNpemU7CisrCisrfQorKworKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fcHRyKGNvbnN0IHZv aWQgKnB0cikgeworKyAgYmlubiAqaXRlbTsKKysKKysgIHN3aXRjaCAoYmlubl9nZXRfcHRyX3R5 cGUocHRyKSkgeworKyAgY2FzZSBCSU5OX1NUUlVDVDoKKysgICAgaXRlbSA9IChiaW5uKikgcHRy OworKyAgICBpZiAoaXRlbS0+d3JpdGFibGUgJiYgaXRlbS0+ZGlydHkpIHsKKysgICAgICBiaW5u X3NhdmVfaGVhZGVyKGl0ZW0pOworKyAgICB9CisrICAgIHJldHVybiBpdGVtLT5wdHI7CisrICBj YXNlIEJJTk5fQlVGRkVSOgorKyAgICByZXR1cm4gKHZvaWQqKXB0cjsKKysgIGRlZmF1bHQ6Cisr ICAgIHJldHVybiBOVUxMOworKyAgfQorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor KworK2ludCBBUElFTlRSWSBiaW5uX3NpemUoY29uc3Qgdm9pZCAqcHRyKSB7CisrICBiaW5uICpp dGVtOworKworKyAgc3dpdGNoIChiaW5uX2dldF9wdHJfdHlwZShwdHIpKSB7CisrICBjYXNlIEJJ Tk5fU1RSVUNUOgorKyAgICBpdGVtID0gKGJpbm4qKSBwdHI7CisrICAgIGlmIChpdGVtLT53cml0 YWJsZSAmJiBpdGVtLT5kaXJ0eSkgeworKyAgICAgIGJpbm5fc2F2ZV9oZWFkZXIoaXRlbSk7Cisr ICAgIH0KKysgICAgcmV0dXJuIGl0ZW0tPnNpemU7CisrICBjYXNlIEJJTk5fQlVGRkVSOgorKyAg ICByZXR1cm4gYmlubl9idWZfc2l6ZShwdHIpOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIDA7 CisrICB9CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisraW50IEFQSUVOVFJZ IGJpbm5fdHlwZShjb25zdCB2b2lkICpwdHIpIHsKKysgIGJpbm4gKml0ZW07CisrCisrICBzd2l0 Y2ggKGJpbm5fZ2V0X3B0cl90eXBlKHB0cikpIHsKKysgIGNhc2UgQklOTl9TVFJVQ1Q6CisrICAg IGl0ZW0gPSAoYmlubiopIHB0cjsKKysgICAgcmV0dXJuIGl0ZW0tPnR5cGU7CisrICBjYXNlIEJJ Tk5fQlVGRkVSOgorKyAgICByZXR1cm4gYmlubl9idWZfdHlwZShwdHIpOworKyAgZGVmYXVsdDoK KysgICAgcmV0dXJuIC0xOworKyAgfQorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor KworK2ludCBBUElFTlRSWSBiaW5uX2NvdW50KGNvbnN0IHZvaWQgKnB0cikgeworKyAgYmlubiAq aXRlbTsKKysKKysgIHN3aXRjaCAoYmlubl9nZXRfcHRyX3R5cGUocHRyKSkgeworKyAgY2FzZSBC SU5OX1NUUlVDVDoKKysgICAgaXRlbSA9IChiaW5uKikgcHRyOworKyAgICByZXR1cm4gaXRlbS0+ Y291bnQ7CisrICBjYXNlIEJJTk5fQlVGRkVSOgorKyAgICByZXR1cm4gYmlubl9idWZfY291bnQo cHRyKTsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiAtMTsKKysgIH0KKysKKyt9CisrCisrLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKysKKysvLyB0aGUgY29udGFpbmVyIGNhbiBiZSBzbWFsbGVyIHRo YW4gdGhlIGluZm9ybWVkIHNpemUKKytCSU5OX1BSSVZBVEUgQk9PTCBiaW5uX2lzX3ZhbGlkX2V4 Mihjb25zdCB2b2lkICpwdHIsIGludCAqcHR5cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXplKSB7 CisrICBpbnQgIGksIHR5cGUsIGNvdW50LCBzaXplLCBoZWFkZXJfc2l6ZTsKKysgIHVuc2lnbmVk IGNoYXIgKnAsICpwbGltaXQsICpiYXNlLCBsZW47CisrCisrICBpZiAocHRyID09IE5VTEwpIHJl dHVybiBGQUxTRTsKKysKKysgIC8vIGlzIHRoZXJlIGFuIGluZm9ybWVkIHNpemU/CisrICBpZiAo cHNpemUgJiYgKnBzaXplID4gMCkgeworKyAgICBzaXplID0gKnBzaXplOworKyAgfSBlbHNlIHsK KysgICAgc2l6ZSA9IDA7CisrICB9CisrCisrICBpZiAoIUlzVmFsaWRCaW5uSGVhZGVyKHB0ciwg JnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkpIHJldHVybiBGQUxTRTsKKysKKysg IC8vIGlzIHRoZXJlIGFuIGluZm9ybWVkIHNpemU/CisrICBpZiAocHNpemUgJiYgKnBzaXplID4g MCkgeworKyAgICAvLyBpcyBpdCBiaWdnZXIgdGhhbiB0aGUgYnVmZmVyPworKyAgICBpZiAoc2l6 ZSA+ICpwc2l6ZSkgcmV0dXJuIEZBTFNFOworKyAgfQorKyAgLy8gaXMgdGhlcmUgYW4gaW5mb3Jt ZWQgY291bnQ/CisrICBpZiAocGNvdW50ICYmICpwY291bnQgPiAwKSB7CisrICAgIC8vIGlzIGl0 IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gdGhlIGJ1ZmZlcj8KKysgICAgaWYgKGNvdW50ICE9ICpw Y291bnQpIHJldHVybiBGQUxTRTsKKysgIH0KKysgIC8vIGlzIHRoZXJlIGFuIGluZm9ybWVkIHR5 cGU/CisrICBpZiAocHR5cGUgJiYgKnB0eXBlICE9IDApIHsKKysgICAgLy8gaXMgaXQgdGhlIHNh bWUgYXMgdGhlIG9uZSBpbiB0aGUgYnVmZmVyPworKyAgICBpZiAodHlwZSAhPSAqcHR5cGUpIHJl dHVybiBGQUxTRTsKKysgIH0KKysKKysgIHAgPSAodW5zaWduZWQgY2hhciAqKXB0cjsKKysgIGJh c2UgPSBwOworKyAgcGxpbWl0ID0gcCArIHNpemUgLSAxOworKworKyAgcCArPSBoZWFkZXJfc2l6 ZTsKKysKKysgIC8vIHByb2Nlc3MgZWFjaCAoa2V5IGFuZCkgdmFsdWUKKysgIGZvciAoaSA9IDA7 IGkgPCBjb3VudDsgaSsrKSB7CisrICAgIHN3aXRjaCAodHlwZSkgeworKyAgICAgIGNhc2UgQklO Tl9PQkpFQ1Q6CisrICAgICAgICBpZiAocCA+IHBsaW1pdCkgZ290byBJbnZhbGlkOworKyAgICAg ICAgLy8gZ2V0IHRoZSBrZXkgKHN0cmluZykgc2l6ZQorKyAgICAgICAgbGVuID0gKnA7CisrICAg ICAgICBwKys7CisrICAgICAgICAvL2lmIChsZW4gPT0gMCkgZ290byBJbnZhbGlkOworKyAgICAg ICAgLy8gYWR2YW5jZSBvdmVyIHRoZSBrZXkKKysgICAgICAgIHAgKz0gbGVuOworKyAgICAgICAg YnJlYWs7CisrICAgICAgY2FzZSBCSU5OX01BUDoKKysgICAgICAgIC8vIGFkdmFuY2Ugb3ZlciB0 aGUga2V5CisrICAgICAgICByZWFkX21hcF9pZCgmcCwgcGxpbWl0KTsKKysgICAgICAgIGJyZWFr OworKyAgICAgIGNhc2UgQklOTl9MSVNUOgorKyAgICAgICAgLy8gbm8ga2V5CisrICAgICAgICBi cmVhazsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgZ290byBJbnZhbGlkOworKyAgICB9Cisr ICAgIC8vIGNoZWNrIHRoZSB2YWx1ZQorKyAgICBpZiAocCA+IHBsaW1pdCkgZ290byBJbnZhbGlk OworKyAgICBpZiAoKCpwICYgQklOTl9TVE9SQUdFX01BU0spID09IEJJTk5fU1RPUkFHRV9DT05U QUlORVIpIHsKKysgICAgICAvLyByZWN1cnNpdmVseSBjaGVjayB0aGUgaW50ZXJuYWwgY29udGFp bmVyCisrICAgICAgaW50IHNpemUyID0gcGxpbWl0IC0gcCArIDE7ICAvLyBtYXhpbXVtIGNvbnRh aW5lciBzaXplCisrICAgICAgaWYgKGJpbm5faXNfdmFsaWRfZXgyKHAsIE5VTEwsIE5VTEwsICZz aXplMikgPT0gRkFMU0UpIGdvdG8gSW52YWxpZDsKKysgICAgICBwICs9IHNpemUyOworKyAgICB9 IGVsc2UgeworKyAgICAgIC8vIGFkdmFuY2Ugb3ZlciB0aGUgdmFsdWUKKysgICAgICBwID0gQWR2 YW5jZURhdGFQb3MocCwgcGxpbWl0KTsKKysgICAgICBpZiAocCA9PSAwIHx8IHAgPCBiYXNlKSBn b3RvIEludmFsaWQ7CisrICAgIH0KKysgIH0KKysKKysgIGlmIChwdHlwZSAgJiYgKnB0eXBlPT0w KSAqcHR5cGUgPSB0eXBlOworKyAgaWYgKHBjb3VudCAmJiAqcGNvdW50PT0wKSAqcGNvdW50ID0g Y291bnQ7CisrICBpZiAocHNpemUpICpwc2l6ZSA9IHNpemU7CisrICByZXR1cm4gVFJVRTsKKysK KytJbnZhbGlkOgorKyAgcmV0dXJuIEZBTFNFOworKworK30KKysKKysvLyB0aGUgY29udGFpbmVy IG11c3QgaGF2ZSB0aGUgaW5mb3JtZWQgc2l6ZSwgaWYgaW5mb3JtZWQKKytCT09MIEFQSUVOVFJZ IGJpbm5faXNfdmFsaWRfZXgoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3Vu dCwgaW50ICpwc2l6ZSkgeworKyAgaW50IHNpemU7CisrCisrICBpZiAocHNpemUgJiYgKnBzaXpl ID4gMCkgeworKyAgICBzaXplID0gKnBzaXplOworKyAgfSBlbHNlIHsKKysgICAgc2l6ZSA9IDA7 CisrICB9CisrCisrICBpZiAoYmlubl9pc192YWxpZF9leDIocHRyLCBwdHlwZSwgcGNvdW50LCAm c2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChwc2l6ZSkgeworKyAgICBp ZiAoKnBzaXplID4gMCkgeworKyAgICAgIGlmIChzaXplICE9ICpwc2l6ZSkgcmV0dXJuIEZBTFNF OworKyAgICB9IGVsc2UgaWYgKCpwc2l6ZT09MCkgeworKyAgICAgICpwc2l6ZSA9IHNpemU7Cisr ICAgIH0KKysgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9pc192YWxpZChjb25zdCB2b2lkICpwdHIsIGlu dCAqcHR5cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXplKSB7CisrCisrICBpZiAocHR5cGUpICAq cHR5cGUgID0gMDsKKysgIGlmIChwY291bnQpICpwY291bnQgPSAwOworKyAgaWYgKHBzaXplKSAg KnBzaXplICA9IDA7CisrCisrICByZXR1cm4gYmlubl9pc192YWxpZF9leChwdHIsIHB0eXBlLCBw Y291bnQsIHBzaXplKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqIElO VEVSTkFMIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJP T0wgR2V0VmFsdWUodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqcGxpbWl0LCBiaW5u ICp2YWx1ZSkgeworKyAgdW5zaWduZWQgY2hhciBieXRlOworKyAgaW50ICAgZGF0YV90eXBlLCBz dG9yYWdlX3R5cGU7ICAvLywgZXh0cmFfdHlwZTsKKysgIGludCAgIERhdGFTaXplOworKyAgdm9p ZCAqcDI7CisrCisrICBpZiAodmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAgbWVtc2V0 KHZhbHVlLCAwLCBzaXplb2YoYmlubikpOworKyAgdmFsdWUtPmhlYWRlciA9IEJJTk5fTUFHSUM7 CisrICAvL3ZhbHVlLT5hbGxvY2F0ZWQgPSBGQUxTRTsgIC0tICBhbHJlYWR5IHplcm9lZAorKyAg Ly92YWx1ZS0+d3JpdGFibGUgPSBGQUxTRTsKKysKKysgIC8vIHNhdmVzIGZvciB1c2Ugd2l0aCBC SU5OX1NUT1JBR0VfQ09OVEFJTkVSCisrICBwMiA9IHA7CisrCisrICAvLyByZWFkIHRoZSBkYXRh IHR5cGUKKysgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICBieXRlID0gKnA7IHAr KzsKKysgIHN0b3JhZ2VfdHlwZSA9IGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFTSzsKKysgIGlmIChi eXRlICYgQklOTl9TVE9SQUdFX0hBU19NT1JFKSB7CisrICAgIGRhdGFfdHlwZSA9IGJ5dGUgPDwg ODsKKysgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgICAgYnl0ZSA9ICpwOyBw Kys7CisrICAgIGRhdGFfdHlwZSB8PSBieXRlOworKyAgICAvL2V4dHJhX3R5cGUgPSBkYXRhX3R5 cGUgJiBCSU5OX1RZUEVfTUFTSzE2OworKyAgfSBlbHNlIHsKKysgICAgZGF0YV90eXBlID0gYnl0 ZTsKKysgICAgLy9leHRyYV90eXBlID0gYnl0ZSAmIEJJTk5fVFlQRV9NQVNLOworKyAgfQorKwor KyAgLy92YWx1ZS0+c3RvcmFnZV90eXBlID0gc3RvcmFnZV90eXBlOworKyAgdmFsdWUtPnR5cGUg PSBkYXRhX3R5cGU7CisrCisrICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkgeworKyAgY2FzZSBCSU5O X1NUT1JBR0VfTk9CWVRFUzoKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRF OgorKyAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICB2YWx1ZS0+dnVpbnQ4 ID0gKigodW5zaWduZWQgY2hhciAqKSBwKTsKKysgICAgdmFsdWUtPnB0ciA9IHA7ICAgLy92YWx1 ZS0+cHRyID0gJnZhbHVlLT52dWludDg7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JB R0VfV09SRDoKKysgICAgaWYgKHAgKyAxID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgIGNv cHlfYmUxNigodTE2KikmdmFsdWUtPnZpbnQxNiwgKHUxNiopcCk7CisrICAgIHZhbHVlLT5wdHIg PSAmdmFsdWUtPnZpbnQxNjsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9EV09S RDoKKysgICAgaWYgKHAgKyAzID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgIGNvcHlfYmUz MigodTMyKikmdmFsdWUtPnZpbnQzMiwgKHUzMiopcCk7CisrICAgIHZhbHVlLT5wdHIgPSAmdmFs dWUtPnZpbnQzMjsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysg ICAgaWYgKHAgKyA3ID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgIGNvcHlfYmU2NCgodTY0 KikmdmFsdWUtPnZpbnQ2NCwgKHU2NCopcCk7CisrICAgIHZhbHVlLT5wdHIgPSAmdmFsdWUtPnZp bnQ2NDsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgorKyAgY2FzZSBC SU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwor KyAgICBEYXRhU2l6ZSA9ICooKHVuc2lnbmVkIGNoYXIqKXApOworKyAgICBpZiAoRGF0YVNpemUg JiAweDgwKSB7CisrICAgICAgaWYgKHAgKyAzID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAg ICAgY29weV9iZTMyKCh1MzIqKSZEYXRhU2l6ZSwgKHUzMiopcCk7CisrICAgICAgRGF0YVNpemUg Jj0gMHg3RkZGRkZGRjsKKysgICAgICBwKz00OworKyAgICB9IGVsc2UgeworKyAgICAgIHArKzsK KysgICAgfQorKyAgICBpZiAocCArIERhdGFTaXplIC0gMSA+IHBsaW1pdCkgcmV0dXJuIEZBTFNF OworKyAgICB2YWx1ZS0+c2l6ZSA9IERhdGFTaXplOworKyAgICB2YWx1ZS0+cHRyID0gcDsKKysg ICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6CisrICAgIHZhbHVlLT5w dHIgPSBwMjsgIC8vIDwtLSBpdCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBjb250YWluZXIs IG5vdCB0aGUgZGF0YQorKyAgICBpZiAoSXNWYWxpZEJpbm5IZWFkZXIocDIsIE5VTEwsICZ2YWx1 ZS0+Y291bnQsICZ2YWx1ZS0+c2l6ZSwgTlVMTCkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysg ICAgYnJlYWs7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICAv LyBjb252ZXJ0IHRoZSByZXR1cm5lZCB2YWx1ZSwgaWYgbmVlZGVkCisrCisrICBzd2l0Y2ggKHZh bHVlLT50eXBlKSB7CisrICAgIGNhc2UgQklOTl9UUlVFOgorKyAgICAgIHZhbHVlLT50eXBlID0g QklOTl9CT09MOworKyAgICAgIHZhbHVlLT52Ym9vbCA9IFRSVUU7CisrICAgICAgdmFsdWUtPnB0 ciA9ICZ2YWx1ZS0+dmJvb2w7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9GQUxTRToK KysgICAgICB2YWx1ZS0+dHlwZSA9IEJJTk5fQk9PTDsKKysgICAgICB2YWx1ZS0+dmJvb2wgPSBG QUxTRTsKKysgICAgICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52Ym9vbDsKKysgICAgICBicmVhazsK KysjaWZkZWYgQklOTl9FWFRFTkRFRAorKyAgICBjYXNlIEJJTk5fU0lOR0xFX1NUUjoKKysgICAg ICB2YWx1ZS0+dHlwZSA9IEJJTk5fU0lOR0xFOworKyAgICAgIHZhbHVlLT52ZmxvYXQgPSAoZmxv YXQpIGF0b2YoKGNvbnN0IGNoYXIqKXZhbHVlLT5wdHIpOyAgLy8gY29udmVydHMgZnJvbSBzdHJp bmcgdG8gZG91YmxlLCBhbmQgdGhlbiB0byBmbG9hdAorKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFs dWUtPnZmbG9hdDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBCSU5OX0RPVUJMRV9TVFI6Cisr ICAgICAgdmFsdWUtPnR5cGUgPSBCSU5OX0RPVUJMRTsKKysgICAgICB2YWx1ZS0+dmRvdWJsZSA9 IGF0b2YoKGNvbnN0IGNoYXIqKXZhbHVlLT5wdHIpOyAgLy8gY29udmVydHMgZnJvbSBzdHJpbmcg dG8gZG91YmxlCisrICAgICAgdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dmRvdWJsZTsKKysgICAgICBi cmVhazsKKysjZW5kaWYKKysgICAgLyoKKysgICAgY2FzZSBCSU5OX0RFQ0lNQUw6CisrICAgIGNh c2UgQklOTl9DVVJSRU5DWVNUUjoKKysgICAgY2FzZSBCSU5OX0RBVEU6CisrICAgIGNhc2UgQklO Tl9EQVRFVElNRToKKysgICAgY2FzZSBCSU5OX1RJTUU6CisrICAgICovCisrICB9CisrCisrICBy ZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaWYgQllU RV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisrCisrLy8gb24gbGl0dGxlLWVuZGlhbiBkZXZpY2Vz IHdlIHN0b3JlIHRoZSB2YWx1ZSBzbyB3ZSBjYW4gcmV0dXJuIGEgcG9pbnRlciB0byBpbnRlZ2Vy cy4KKysvLyBpdCdzIHZhbGlkIG9ubHkgZm9yIHNpbmdsZS10aHJlYWRlZCBhcHBzLiBtdWx0aS10 aHJlYWRlZCBhcHBzIG11c3QgdXNlIHRoZSBfZ2V0XyBmdW5jdGlvbnMgaW5zdGVhZC4KKysKKyti aW5uIGxvY2FsX3ZhbHVlOworKworK0JJTk5fUFJJVkFURSB2b2lkICogc3RvcmVfdmFsdWUoYmlu biAqdmFsdWUpIHsKKysKKysgIG1lbWNweSgmbG9jYWxfdmFsdWUsIHZhbHVlLCBzaXplb2YoYmlu bikpOworKworKyAgc3dpdGNoIChiaW5uX2dldF9yZWFkX3N0b3JhZ2UodmFsdWUtPnR5cGUpKSB7 CisrICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgorKyAgICAvLyByZXR1cm4gYSB2YWxpZCBw b2ludGVyCisrICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgorKyAgY2FzZSBCSU5OX1NUT1JBR0Vf RFdPUkQ6CisrICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgcmV0dXJuICZsb2NhbF92 YWx1ZS52aW50MzI7ICAvLyByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBjb252ZXJ0ZWQgdmFs dWUsIGZyb20gYmlnLWVuZGlhbiB0byBsaXR0bGUtZW5kaWFuCisrICB9CisrCisrICByZXR1cm4g dmFsdWUtPnB0cjsgICAvLyByZXR1cm5zIGZyb20gdGhlIG9uIHN0YWNrIHZhbHVlIHRvIGJlIHRo cmVhZC1zYWZlIChmb3IgbGlzdCwgbWFwLCBvYmplY3QsIHN0cmluZyBhbmQgYmxvYikKKysKKyt9 CisrCisrI2VuZGlmCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqIFJFQUQgRlVOQ1RJ T05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX29iamVj dF9nZXRfdmFsdWUoY29uc3Qgdm9pZCAqcHRyLCBjb25zdCBjaGFyICprZXksIGJpbm4gKnZhbHVl KSB7CisrICBpbnQgdHlwZSwgY291bnQsIHNpemU9MCwgaGVhZGVyX3NpemU7CisrICB1bnNpZ25l ZCBjaGFyICpwLCAqcGxpbWl0OworKworKyAgcHRyID0gYmlubl9wdHIocHRyKTsKKysgIGlmIChw dHIgPT0gTlVMTCB8fCBrZXkgPT0gTlVMTCB8fCB2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7 CisrCisrICAvLyBjaGVjayB0aGUgaGVhZGVyCisrICBpZiAoSXNWYWxpZEJpbm5IZWFkZXIocHRy LCAmdHlwZSwgJmNvdW50LCAmc2l6ZSwgJmhlYWRlcl9zaXplKSA9PSBGQUxTRSkgcmV0dXJuIEZB TFNFOworKworKyAgaWYgKHR5cGUgIT0gQklOTl9PQkpFQ1QpIHJldHVybiBGQUxTRTsKKysgIGlm IChjb3VudCA9PSAwKSByZXR1cm4gRkFMU0U7CisrCisrICBwID0gKHVuc2lnbmVkIGNoYXIgKikg cHRyOworKyAgcGxpbWl0ID0gcCArIHNpemUgLSAxOworKworKyAgcCA9IFNlYXJjaEZvcktleShw LCBoZWFkZXJfc2l6ZSwgc2l6ZSwgY291bnQsIGtleSk7CisrICBpZiAocCA9PSBGQUxTRSkgcmV0 dXJuIEZBTFNFOworKworKyAgcmV0dXJuIEdldFZhbHVlKHAsIHBsaW1pdCwgdmFsdWUpOworKwor K30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBf Z2V0X3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwgaW50IGlkLCBiaW5uICp2YWx1ZSkgeworKyAgaW50 IHR5cGUsIGNvdW50LCBzaXplPTAsIGhlYWRlcl9zaXplOworKyAgdW5zaWduZWQgY2hhciAqcCwg KnBsaW1pdDsKKysKKysgIHB0ciA9IGJpbm5fcHRyKHB0cik7CisrICBpZiAocHRyID09IE5VTEwg fHwgdmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgLy8gY2hlY2sgdGhlIGhlYWRl cgorKyAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZo ZWFkZXJfc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlICE9IEJJ Tk5fTUFQKSByZXR1cm4gRkFMU0U7CisrICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIEZBTFNFOwor KworKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKKysgIHBsaW1pdCA9IHAgKyBzaXplIC0g MTsKKysKKysgIHAgPSBTZWFyY2hGb3JJRChwLCBoZWFkZXJfc2l6ZSwgc2l6ZSwgY291bnQsIGlk KTsKKysgIGlmIChwID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gR2V0VmFs dWUocCwgcGxpbWl0LCB2YWx1ZSk7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwgaW50 IHBvcywgYmlubiAqdmFsdWUpIHsKKysgIGludCAgaSwgdHlwZSwgY291bnQsIHNpemU9MCwgaGVh ZGVyX3NpemU7CisrICB1bnNpZ25lZCBjaGFyICpwLCAqcGxpbWl0LCAqYmFzZTsKKysKKysgIHB0 ciA9IGJpbm5fcHRyKHB0cik7CisrICBpZiAocHRyID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkg cmV0dXJuIEZBTFNFOworKworKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgorKyAgaWYgKElzVmFsaWRC aW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkgPT0gRkFM U0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlICE9IEJJTk5fTElTVCkgcmV0dXJuIEZB TFNFOworKyAgaWYgKGNvdW50ID09IDApIHJldHVybiBGQUxTRTsKKysgIGlmIChwb3MgPD0gMCB8 fCBwb3MgPiBjb3VudCkgcmV0dXJuIEZBTFNFOworKyAgcG9zLS07ICAvLyBjb252ZXJ0IGZyb20g YmFzZSAxIHRvIGJhc2UgMAorKworKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKKysgIGJh c2UgPSBwOworKyAgcGxpbWl0ID0gcCArIHNpemUgLSAxOworKyAgcCArPSBoZWFkZXJfc2l6ZTsK KysKKysgIGZvciAoaSA9IDA7IGkgPCBwb3M7IGkrKykgeworKyAgICBwID0gQWR2YW5jZURhdGFQ b3MocCwgcGxpbWl0KTsKKysgICAgaWYgKHAgPT0gMCB8fCBwIDwgYmFzZSkgcmV0dXJuIEZBTFNF OworKyAgfQorKworKyAgcmV0dXJuIEdldFZhbHVlKHAsIHBsaW1pdCwgdmFsdWUpOworKworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKiogUkVBRCBQQUlSIEJZIFBPU0lUSU9OICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBiaW5uX3JlYWRfcGFpcihpbnQg ZXhwZWN0ZWRfdHlwZSwgY29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zLCBpbnQgKnBpZCwgY2hhciAq cGtleSwgYmlubiAqdmFsdWUpIHsKKysgIGludCAgdHlwZSwgY291bnQsIHNpemU9MCwgaGVhZGVy X3NpemU7CisrICBpbnQgIGksIGludDMyLCBpZCA9IDAsIGNvdW50ZXI9MDsKKysgIHVuc2lnbmVk IGNoYXIgKnAsICpwbGltaXQsICpiYXNlLCAqa2V5ID0gTlVMTCwgbGVuID0gMDsKKysKKysgIHB0 ciA9IGJpbm5fcHRyKHB0cik7CisrCisrICAvLyBjaGVjayB0aGUgaGVhZGVyCisrICBpZiAoSXNW YWxpZEJpbm5IZWFkZXIocHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6ZSwgJmhlYWRlcl9zaXplKSA9 PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKHR5cGUgIT0gZXhwZWN0ZWRfdHlwZSB8 fCBjb3VudCA9PSAwIHx8IHBvcyA8IDEgfHwgcG9zID4gY291bnQpIHJldHVybiBGQUxTRTsKKysK KysgIHAgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7CisrICBiYXNlID0gcDsKKysgIHBsaW1pdCA9 IHAgKyBzaXplIC0gMTsKKysgIHAgKz0gaGVhZGVyX3NpemU7CisrCisrICBmb3IgKGkgPSAwOyBp IDwgY291bnQ7IGkrKykgeworKyAgICBzd2l0Y2ggKHR5cGUpIHsKKysgICAgICBjYXNlIEJJTk5f TUFQOgorKyAgICAgICAgaW50MzIgPSByZWFkX21hcF9pZCgmcCwgcGxpbWl0KTsKKysgICAgICAg IGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgICAgICBpZCA9IGludDMyOworKyAg ICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBCSU5OX09CSkVDVDoKKysgICAgICAgIGxlbiA9ICoo KHVuc2lnbmVkIGNoYXIgKilwKTsgcCsrOworKyAgICAgICAgaWYgKHAgPiBwbGltaXQpIHJldHVy biBGQUxTRTsKKysgICAgICAgIGtleSA9IHA7CisrICAgICAgICBwICs9IGxlbjsKKysgICAgICAg IGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgICAgICBicmVhazsKKysgICAgfQor KyAgICBjb3VudGVyKys7CisrICAgIGlmIChjb3VudGVyID09IHBvcykgZ290byBmb3VuZDsKKysg ICAgLy8KKysgICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7CisrICAgIGlmIChwID09 IDAgfHwgcCA8IGJhc2UpIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysgIHJldHVybiBGQUxTRTsK KysKKytmb3VuZDoKKysKKysgIHN3aXRjaCAodHlwZSkgeworKyAgICBjYXNlIEJJTk5fTUFQOgor KyAgICAgIGlmIChwaWQpICpwaWQgPSBpZDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBCSU5O X09CSkVDVDoKKysgICAgICBpZiAocGtleSkgeworKyAgICAgICAgbWVtY3B5KHBrZXksIGtleSwg bGVuKTsKKysgICAgICAgIHBrZXlbbGVuXSA9IDA7CisrICAgICAgfQorKyAgICAgIGJyZWFrOwor KyAgfQorKworKyAgcmV0dXJuIEdldFZhbHVlKHAsIHBsaW1pdCwgdmFsdWUpOworKworK30KKysK KysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0X3Bh aXIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zLCBpbnQgKnBpZCwgYmlubiAqdmFsdWUpIHsKKysK KysgIHJldHVybiBiaW5uX3JlYWRfcGFpcihCSU5OX01BUCwgcHRyLCBwb3MsIHBpZCwgTlVMTCwg dmFsdWUpOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5U UlkgYmlubl9vYmplY3RfZ2V0X3BhaXIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zLCBjaGFyICpw a2V5LCBiaW5uICp2YWx1ZSkgeworKworKyAgcmV0dXJuIGJpbm5fcmVhZF9wYWlyKEJJTk5fT0JK RUNULCBwdHIsIHBvcywgTlVMTCwgcGtleSwgdmFsdWUpOworKworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF9wYWlyKGNvbnN0IHZvaWQg Km1hcCwgaW50IHBvcywgaW50ICpwaWQpIHsKKysgIGJpbm4gKnZhbHVlOworKworKyAgdmFsdWUg PSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJpbm5fcmVh ZF9wYWlyKEJJTk5fTUFQLCBtYXAsIHBvcywgcGlkLCBOVUxMLCB2YWx1ZSkgPT0gRkFMU0UpIHsK KysgICAgZnJlZV9mbih2YWx1ZSk7CisrICAgIHJldHVybiBOVUxMOworKyAgfQorKworKyAgdmFs dWUtPmFsbG9jYXRlZCA9IFRSVUU7CisrICByZXR1cm4gdmFsdWU7CisrCisrfQorKworKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3BhaXIoY29u c3Qgdm9pZCAqb2JqLCBpbnQgcG9zLCBjaGFyICpwa2V5KSB7CisrICBiaW5uICp2YWx1ZTsKKysK KysgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlm IChiaW5uX3JlYWRfcGFpcihCSU5OX09CSkVDVCwgb2JqLCBwb3MsIE5VTEwsIHBrZXksIHZhbHVl KSA9PSBGQUxTRSkgeworKyAgICBmcmVlX2ZuKHZhbHVlKTsKKysgICAgcmV0dXJuIE5VTEw7Cisr ICB9CisrCisrICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsKKysgIHJldHVybiB2YWx1ZTsKKysK Kyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwor K3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9yZWFkX3BhaXIoY29uc3Qgdm9pZCAqcHRyLCBpbnQg cG9zLCBpbnQgKnBpZCwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1ZTsK KysKKysgIGlmIChiaW5uX21hcF9nZXRfcGFpcihwdHIsIHBvcywgcGlkLCAmdmFsdWUpID09IEZB TFNFKSByZXR1cm4gTlVMTDsKKysgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKKysg IGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRU TEVfRU5ESUFOCisrICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKKysjZWxzZQorKyAgcmV0 dXJuIHZhbHVlLnB0cjsKKysjZW5kaWYKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZF9wYWlyKGNvbnN0IHZvaWQgKnB0 ciwgaW50IHBvcywgY2hhciAqcGtleSwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgeworKyAgYmlu biB2YWx1ZTsKKysKKysgIGlmIChiaW5uX29iamVjdF9nZXRfcGFpcihwdHIsIHBvcywgcGtleSwg JnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7CisrICBpZiAocHR5cGUpICpwdHlwZSA9IHZh bHVlLnR5cGU7CisrICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7CisrI2lmIEJZVEVf T1JERVIgPT0gTElUVExFX0VORElBTgorKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7Cisr I2Vsc2UKKysgIHJldHVybiB2YWx1ZS5wdHI7CisrI2VuZGlmCisrCisrfQorKworKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrLyoqKiBTRVFVRU5USUFMIFJFQUQgRlVOQ1RJT05TICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKworK0JPT0wgQVBJRU5UUlkgYmlubl9pdGVyX2luaXQoYmlubl9pdGVyICppdGVyLCBjb25z dCB2b2lkICpwdHIsIGludCBleHBlY3RlZF90eXBlKSB7CisrICBpbnQgIHR5cGUsIGNvdW50LCBz aXplPTAsIGhlYWRlcl9zaXplOworKworKyAgcHRyID0gYmlubl9wdHIocHRyKTsKKysgIGlmIChw dHIgPT0gTlVMTCB8fCBpdGVyID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysgIG1lbXNldChpdGVy LCAwLCBzaXplb2YoYmlubl9pdGVyKSk7CisrCisrICAvLyBjaGVjayB0aGUgaGVhZGVyCisrICBp ZiAoSXNWYWxpZEJpbm5IZWFkZXIocHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6ZSwgJmhlYWRlcl9z aXplKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKHR5cGUgIT0gZXhwZWN0ZWRf dHlwZSkgcmV0dXJuIEZBTFNFOworKyAgLy9pZiAoY291bnQgPT0gMCkgcmV0dXJuIEZBTFNFOyAg LS0gc2hvdWxkIG5vdCBiZSB1c2VkCisrCisrICBpdGVyLT5wbGltaXQgPSAodW5zaWduZWQgY2hh ciAqKXB0ciArIHNpemUgLSAxOworKyAgaXRlci0+cG5leHQgPSAodW5zaWduZWQgY2hhciAqKXB0 ciArIGhlYWRlcl9zaXplOworKyAgaXRlci0+Y291bnQgPSBjb3VudDsKKysgIGl0ZXItPmN1cnJl bnQgPSAwOworKyAgaXRlci0+dHlwZSA9IHR5cGU7CisrCisrICByZXR1cm4gVFJVRTsKKyt9Cisr CisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9uZXh0 KGJpbm5faXRlciAqaXRlciwgYmlubiAqdmFsdWUpIHsKKysgIHVuc2lnbmVkIGNoYXIgKnBub3c7 CisrCisrICBpZiAoaXRlciA9PSBOVUxMIHx8IGl0ZXItPnBuZXh0ID09IE5VTEwgfHwgaXRlci0+ cG5leHQgPiBpdGVyLT5wbGltaXQgfHwgaXRlci0+Y3VycmVudCA+IGl0ZXItPmNvdW50IHx8IGl0 ZXItPnR5cGUgIT0gQklOTl9MSVNUKSByZXR1cm4gRkFMU0U7CisrCisrICBpdGVyLT5jdXJyZW50 Kys7CisrICBpZiAoaXRlci0+Y3VycmVudCA+IGl0ZXItPmNvdW50KSByZXR1cm4gRkFMU0U7Cisr CisrICBwbm93ID0gaXRlci0+cG5leHQ7CisrICBpdGVyLT5wbmV4dCA9IEFkdmFuY2VEYXRhUG9z KHBub3csIGl0ZXItPnBsaW1pdCk7CisrICBpZiAoaXRlci0+cG5leHQgIT0gMCAmJiBpdGVyLT5w bmV4dCA8IHBub3cpIHJldHVybiBGQUxTRTsKKysKKysgIHJldHVybiBHZXRWYWx1ZShwbm93LCBp dGVyLT5wbGltaXQsIHZhbHVlKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK KytCSU5OX1BSSVZBVEUgQk9PTCBiaW5uX3JlYWRfbmV4dF9wYWlyKGludCBleHBlY3RlZF90eXBl LCBiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkLCBjaGFyICpwa2V5LCBiaW5uICp2YWx1ZSkgewor KyAgaW50ICBpbnQzMiwgaWQ7CisrICB1bnNpZ25lZCBjaGFyICpwLCAqa2V5OworKyAgdW5zaWdu ZWQgc2hvcnQgbGVuOworKworKyAgaWYgKGl0ZXIgPT0gTlVMTCB8fCBpdGVyLT5wbmV4dCA9PSBO VUxMIHx8IGl0ZXItPnBuZXh0ID4gaXRlci0+cGxpbWl0IHx8IGl0ZXItPmN1cnJlbnQgPiBpdGVy LT5jb3VudCB8fCBpdGVyLT50eXBlICE9IGV4cGVjdGVkX3R5cGUpIHJldHVybiBGQUxTRTsKKysK KysgIGl0ZXItPmN1cnJlbnQrKzsKKysgIGlmIChpdGVyLT5jdXJyZW50ID4gaXRlci0+Y291bnQp IHJldHVybiBGQUxTRTsKKysKKysgIHAgPSBpdGVyLT5wbmV4dDsKKysKKysgIHN3aXRjaCAoZXhw ZWN0ZWRfdHlwZSkgeworKyAgICBjYXNlIEJJTk5fTUFQOgorKyAgICAgIGludDMyID0gcmVhZF9t YXBfaWQoJnAsIGl0ZXItPnBsaW1pdCk7CisrICAgICAgaWYgKHAgPiBpdGVyLT5wbGltaXQpIHJl dHVybiBGQUxTRTsKKysgICAgICBpZCA9IGludDMyOworKyAgICAgIGlmIChwaWQpICpwaWQgPSBp ZDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBCSU5OX09CSkVDVDoKKysgICAgICBsZW4gPSAq KCh1bnNpZ25lZCBjaGFyICopcCk7IHArKzsKKysgICAgICBrZXkgPSBwOworKyAgICAgIHAgKz0g bGVuOworKyAgICAgIGlmIChwID4gaXRlci0+cGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgICAg aWYgKHBrZXkpIHsKKysgICAgICAgIG1lbWNweShwa2V5LCBrZXksIGxlbik7CisrICAgICAgICBw a2V5W2xlbl0gPSAwOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgIH0KKysKKysgIGl0ZXIt PnBuZXh0ID0gQWR2YW5jZURhdGFQb3MocCwgaXRlci0+cGxpbWl0KTsKKysgIGlmIChpdGVyLT5w bmV4dCAhPSAwICYmIGl0ZXItPnBuZXh0IDwgcCkgcmV0dXJuIEZBTFNFOworKworKyAgcmV0dXJu IEdldFZhbHVlKHAsIGl0ZXItPnBsaW1pdCwgdmFsdWUpOworKworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfbmV4dChiaW5uX2l0ZXIgKml0 ZXIsIGludCAqcGlkLCBiaW5uICp2YWx1ZSkgeworKworKyAgcmV0dXJuIGJpbm5fcmVhZF9uZXh0 X3BhaXIoQklOTl9NQVAsIGl0ZXIsIHBpZCwgTlVMTCwgdmFsdWUpOworKworK30KKysKKysvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3RfbmV4dChiaW5u X2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKSB7CisrCisrICByZXR1cm4gYmlu bl9yZWFkX25leHRfcGFpcihCSU5OX09CSkVDVCwgaXRlciwgTlVMTCwgcGtleSwgdmFsdWUpOwor KworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbGlzdF9uZXh0X3ZhbHVlKGJpbm5faXRlciAqaXRlcikg eworKyAgYmlubiAqdmFsdWU7CisrCisrICB2YWx1ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNp emVvZihiaW5uKSk7CisrCisrICBpZiAoYmlubl9saXN0X25leHQoaXRlciwgdmFsdWUpID09IEZB TFNFKSB7CisrICAgIGZyZWVfZm4odmFsdWUpOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysK KysgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOworKyAgcmV0dXJuIHZhbHVlOworKworK30KKysK KysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF9uZXh0 X3ZhbHVlKGJpbm5faXRlciAqaXRlciwgaW50ICpwaWQpIHsKKysgIGJpbm4gKnZhbHVlOworKwor KyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYg KGJpbm5fbWFwX25leHQoaXRlciwgcGlkLCB2YWx1ZSkgPT0gRkFMU0UpIHsKKysgICAgZnJlZV9m bih2YWx1ZSk7CisrICAgIHJldHVybiBOVUxMOworKyAgfQorKworKyAgdmFsdWUtPmFsbG9jYXRl ZCA9IFRSVUU7CisrICByZXR1cm4gdmFsdWU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X25leHRfdmFsdWUoYmlubl9pdGVy ICppdGVyLCBjaGFyICpwa2V5KSB7CisrICBiaW5uICp2YWx1ZTsKKysKKysgIHZhbHVlID0gKGJp bm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX29iamVjdF9u ZXh0KGl0ZXIsIHBrZXksIHZhbHVlKSA9PSBGQUxTRSkgeworKyAgICBmcmVlX2ZuKHZhbHVlKTsK KysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrCisrICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsK KysgIHJldHVybiB2YWx1ZTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3RfcmVhZF9uZXh0 KGJpbm5faXRlciAqaXRlciwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1 ZTsKKysKKysgIGlmIChiaW5uX2xpc3RfbmV4dChpdGVyLCAmdmFsdWUpID09IEZBTFNFKSByZXR1 cm4gTlVMTDsKKysgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKKysgIGlmIChwc2l6 ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFO CisrICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKKysjZWxzZQorKyAgcmV0dXJuIHZhbHVl LnB0cjsKKysjZW5kaWYKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKyt2b2lk ICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgaW50ICpwaWQs IGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7CisrCisrICBpZiAoYmlu bl9tYXBfbmV4dChpdGVyLCBwaWQsICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOworKyAg aWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2 YWx1ZS5zaXplOworKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKysgIHJldHVybiBz dG9yZV92YWx1ZSgmdmFsdWUpOworKyNlbHNlCisrICByZXR1cm4gdmFsdWUucHRyOworKyNlbmRp ZgorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3ZvaWQgKiBBUElFTlRSWSBi aW5uX29iamVjdF9yZWFkX25leHQoYmlubl9pdGVyICppdGVyLCBjaGFyICpwa2V5LCBpbnQgKnB0 eXBlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZhbHVlOworKworKyAgaWYgKGJpbm5fb2JqZWN0 X25leHQoaXRlciwgcGtleSwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7CisrICBpZiAo cHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7CisrICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVl LnNpemU7CisrI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorKyAgcmV0dXJuIHN0b3Jl X3ZhbHVlKCZ2YWx1ZSk7CisrI2Vsc2UKKysgIHJldHVybiB2YWx1ZS5wdHI7CisrI2VuZGlmCisr CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKiogRVhURU5E RUQgSU5URVJGQUNFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKy8qKioqKiogbm9uZSBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlIGNh bGwgdGhlIGZ1bmN0aW9ucyBiZWxvdyAqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKworK2ludCBBUElFTlRSWSBiaW5uX2dldF93cml0 ZV9zdG9yYWdlKGludCB0eXBlKSB7CisrICBpbnQgc3RvcmFnZV90eXBlOworKworKyAgc3dpdGNo ICh0eXBlKSB7CisrICAgIGNhc2UgQklOTl9TSU5HTEVfU1RSOgorKyAgICBjYXNlIEJJTk5fRE9V QkxFX1NUUjoKKysgICAgICByZXR1cm4gQklOTl9TVE9SQUdFX1NUUklORzsKKysKKysgICAgY2Fz ZSBCSU5OX0JPT0w6CisrICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9OT0JZVEVTOworKworKyAg ICBkZWZhdWx0OgorKyAgICAgIGJpbm5fZ2V0X3R5cGVfaW5mbyh0eXBlLCAmc3RvcmFnZV90eXBl LCBOVUxMKTsKKysgICAgICByZXR1cm4gc3RvcmFnZV90eXBlOworKyAgfQorKworK30KKysKKysv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytpbnQgQVBJRU5UUlkgYmlubl9nZXRf cmVhZF9zdG9yYWdlKGludCB0eXBlKSB7CisrICBpbnQgc3RvcmFnZV90eXBlOworKworKyAgc3dp dGNoICh0eXBlKSB7CisrI2lmZGVmIEJJTk5fRVhURU5ERUQKKysgICAgY2FzZSBCSU5OX1NJTkdM RV9TVFI6CisrICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9EV09SRDsKKysgICAgY2FzZSBCSU5O X0RPVUJMRV9TVFI6CisrICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9RV09SRDsKKysjZW5kaWYK KysgICAgY2FzZSBCSU5OX0JPT0w6CisrICAgIGNhc2UgQklOTl9UUlVFOgorKyAgICBjYXNlIEJJ Tk5fRkFMU0U6CisrICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9EV09SRDsKKysgICAgZGVmYXVs dDoKKysgICAgICBiaW5uX2dldF90eXBlX2luZm8odHlwZSwgJnN0b3JhZ2VfdHlwZSwgTlVMTCk7 CisrICAgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZTsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgR2V0V3JpdGVDb252 ZXJ0ZWREYXRhKGludCAqcHR5cGUsIHZvaWQgKipwcHZhbHVlLCBpbnQgKnBzaXplKSB7CisrICBp bnQgIHR5cGU7CisrICBmbG9hdCAgZjE7CisrICBkb3VibGUgZDE7CisrICBjaGFyIHBzdHJbMTI4 XTsKKysKKysgIFVOVVNFRChwc3RyKTsKKysgIFVOVVNFRChkMSk7CisrICBVTlVTRUQoZjEpOwor KworKyAgdHlwZSA9ICpwdHlwZTsKKysKKysgIGlmICgqcHB2YWx1ZSA9PSBOVUxMKSB7CisrICAg IHN3aXRjaCAodHlwZSkgeworKyAgICAgIGNhc2UgQklOTl9OVUxMOgorKyAgICAgIGNhc2UgQklO Tl9UUlVFOgorKyAgICAgIGNhc2UgQklOTl9GQUxTRToKKysgICAgICAgIGJyZWFrOworKyAgICAg IGNhc2UgQklOTl9TVFJJTkc6CisrICAgICAgY2FzZSBCSU5OX0JMT0I6CisrICAgICAgICBpZiAo KnBzaXplID09IDApIGJyZWFrOworKwkvKiBmYWxsIHRocm91Z2ggKi8KKysgICAgICBkZWZhdWx0 OgorKyAgICAgICAgcmV0dXJuIEZBTFNFOworKyAgICB9CisrICB9CisrCisrICBzd2l0Y2ggKHR5 cGUpIHsKKysjaWZkZWYgQklOTl9FWFRFTkRFRAorKyAgICBjYXNlIEJJTk5fU0lOR0xFOgorKyAg ICAgIGYxID0gKiooZmxvYXQqKilwcHZhbHVlOworKyAgICAgIGQxID0gZjE7ICAvLyBjb252ZXJ0 IGZyb20gZmxvYXQgKDMyYml0cykgdG8gZG91YmxlICg2NGJpdHMpCisrICAgICAgdHlwZSA9IEJJ Tk5fU0lOR0xFX1NUUjsKKysgICAgICBnb3RvIGNvbnZfZG91YmxlOworKyAgICBjYXNlIEJJTk5f RE9VQkxFOgorKyAgICAgIGQxID0gKiooZG91YmxlKiopcHB2YWx1ZTsKKysgICAgICB0eXBlID0g QklOTl9ET1VCTEVfU1RSOworK2NvbnZfZG91YmxlOgorKyAgICAgIC8vIHRoZSAnJS4xN2UnIGlz IG1vcmUgcHJlY2lzZSB0aGFuIHRoZSAnJWcnCisrICAgICAgc25wcmludGYocHN0ciwgMTI3LCAi JS4xN2UiLCBkMSk7CisrICAgICAgKnBwdmFsdWUgPSBwc3RyOworKyAgICAgICpwdHlwZSA9IHR5 cGU7CisrICAgICAgYnJlYWs7CisrI2VuZGlmCisrICAgIGNhc2UgQklOTl9ERUNJTUFMOgorKyAg ICBjYXNlIEJJTk5fQ1VSUkVOQ1lTVFI6CisrICAgICAgLyoKKysgICAgICBpZiAoYmlubl9tYWxs b2NfZXh0cHRyKDEyOCkgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAgICAgIHNucHJpbnRmKHNw dHIsIDEyNywgIiVFIiwgKipwcHZhbHVlKTsKKysgICAgICAqcHB2YWx1ZSA9IHNwdHI7CisrICAg ICAgKi8KKysgICAgICByZXR1cm4gVFJVRTsgIC8vISB0ZW1wb3JhcnkKKysgICAgICBicmVhazsK KysKKysgICAgY2FzZSBCSU5OX0RBVEU6CisrICAgIGNhc2UgQklOTl9EQVRFVElNRToKKysgICAg Y2FzZSBCSU5OX1RJTUU6CisrICAgICAgcmV0dXJuIFRSVUU7ICAvLyEgdGVtcG9yYXJ5CisrICAg ICAgYnJlYWs7CisrCisrICAgIGNhc2UgQklOTl9CT09MOgorKyAgICAgIGlmICgqKigoQk9PTCoq KXBwdmFsdWUpID09IEZBTFNFKSB7CisrICAgICAgICB0eXBlID0gQklOTl9GQUxTRTsKKysgICAg ICB9IGVsc2UgeworKyAgICAgICAgdHlwZSA9IEJJTk5fVFJVRTsKKysgICAgICB9CisrICAgICAg KnB0eXBlID0gdHlwZTsKKysgICAgICBicmVhazsKKysKKysgIH0KKysKKysgIHJldHVybiBUUlVF OworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BS SVZBVEUgaW50IHR5cGVfZmFtaWx5KGludCB0eXBlKSAgeworKworKyAgc3dpdGNoICh0eXBlKSB7 CisrICAgIGNhc2UgQklOTl9MSVNUOgorKyAgICBjYXNlIEJJTk5fTUFQOgorKyAgICBjYXNlIEJJ Tk5fT0JKRUNUOgorKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9CSU5OOworKworKyAgICBjYXNl IEJJTk5fSU5UODoKKysgICAgY2FzZSBCSU5OX0lOVDE2OgorKyAgICBjYXNlIEJJTk5fSU5UMzI6 CisrICAgIGNhc2UgQklOTl9JTlQ2NDoKKysgICAgY2FzZSBCSU5OX1VJTlQ4OgorKyAgICBjYXNl IEJJTk5fVUlOVDE2OgorKyAgICBjYXNlIEJJTk5fVUlOVDMyOgorKyAgICBjYXNlIEJJTk5fVUlO VDY0OgorKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9JTlQ7CisrCisrICAgIGNhc2UgQklOTl9G TE9BVDMyOgorKyAgICBjYXNlIEJJTk5fRkxPQVQ2NDoKKysgICAgLy9jYXNlIEJJTk5fU0lOR0xF OgorKyAgICBjYXNlIEJJTk5fU0lOR0xFX1NUUjoKKysgICAgLy9jYXNlIEJJTk5fRE9VQkxFOgor KyAgICBjYXNlIEJJTk5fRE9VQkxFX1NUUjoKKysgICAgICByZXR1cm4gQklOTl9GQU1JTFlfRkxP QVQ7CisrCisrICAgIGNhc2UgQklOTl9TVFJJTkc6CisrICAgIGNhc2UgQklOTl9IVE1MOgorKyAg ICBjYXNlIEJJTk5fQ1NTOgorKyAgICBjYXNlIEJJTk5fWE1MOgorKyAgICBjYXNlIEJJTk5fSlNP TjoKKysgICAgY2FzZSBCSU5OX0pBVkFTQ1JJUFQ6CisrICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZ X1NUUklORzsKKysKKysgICAgY2FzZSBCSU5OX0JMT0I6CisrICAgIGNhc2UgQklOTl9KUEVHOgor KyAgICBjYXNlIEJJTk5fR0lGOgorKyAgICBjYXNlIEJJTk5fUE5HOgorKyAgICBjYXNlIEJJTk5f Qk1QOgorKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9CTE9COworKworKyAgICBjYXNlIEJJTk5f REVDSU1BTDoKKysgICAgY2FzZSBCSU5OX0NVUlJFTkNZOgorKyAgICBjYXNlIEJJTk5fREFURToK KysgICAgY2FzZSBCSU5OX1RJTUU6CisrICAgIGNhc2UgQklOTl9EQVRFVElNRToKKysgICAgICBy ZXR1cm4gQklOTl9GQU1JTFlfU1RSSU5HOworKworKyAgICBjYXNlIEJJTk5fQk9PTDoKKysgICAg ICByZXR1cm4gQklOTl9GQU1JTFlfQk9PTDsKKysKKysgICAgY2FzZSBCSU5OX05VTEw6CisrICAg ICAgcmV0dXJuIEJJTk5fRkFNSUxZX05VTEw7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgLy8g aWYgaXQgd2Fzbid0IGZvdW5kCisrICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX05PTkU7CisrICB9 CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJ VkFURSBpbnQgaW50X3R5cGUoaW50IHR5cGUpICB7CisrCisrICBzd2l0Y2ggKHR5cGUpIHsKKysg IGNhc2UgQklOTl9JTlQ4OgorKyAgY2FzZSBCSU5OX0lOVDE2OgorKyAgY2FzZSBCSU5OX0lOVDMy OgorKyAgY2FzZSBCSU5OX0lOVDY0OgorKyAgICByZXR1cm4gQklOTl9TSUdORURfSU5UOworKwor KyAgY2FzZSBCSU5OX1VJTlQ4OgorKyAgY2FzZSBCSU5OX1VJTlQxNjoKKysgIGNhc2UgQklOTl9V SU5UMzI6CisrICBjYXNlIEJJTk5fVUlOVDY0OgorKyAgICByZXR1cm4gQklOTl9VTlNJR05FRF9J TlQ7CisrCisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gMDsKKysgIH0KKysKKyt9CisrCisrLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgY29weV9y YXdfdmFsdWUoY29uc3Qgdm9pZCAqcHNvdXJjZSwgdm9pZCAqcGRlc3QsIGludCBkYXRhX3N0b3Jl KSB7CisrCisrICBzd2l0Y2ggKGRhdGFfc3RvcmUpIHsKKysgIGNhc2UgQklOTl9TVE9SQUdFX05P QllURVM6CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKKysgICAgKigo Y2hhciAqKSBwZGVzdCkgPSAqKGNoYXIgKilwc291cmNlOworKyAgICBicmVhazsKKysgIGNhc2Ug QklOTl9TVE9SQUdFX1dPUkQ6CisrICAgICooKHNob3J0ICopIHBkZXN0KSA9ICooc2hvcnQgKilw c291cmNlOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgorKyAgICAq KChpbnQgKikgcGRlc3QpID0gKihpbnQgKilwc291cmNlOworKyAgICBicmVhazsKKysgIGNhc2Ug QklOTl9TVE9SQUdFX1FXT1JEOgorKyAgICAqKCh1aW50NjQgKikgcGRlc3QpID0gKih1aW50NjQg Kilwc291cmNlOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6CisrICBj YXNlIEJJTk5fU1RPUkFHRV9TVFJJTkc6CisrICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6 CisrICAgICooKGNoYXIgKiopIHBkZXN0KSA9IChjaGFyICopcHNvdXJjZTsKKysgICAgYnJlYWs7 CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICByZXR1cm4gVFJV RTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9Q UklWQVRFIEJPT0wgY29weV9pbnRfdmFsdWUoY29uc3Qgdm9pZCAqcHNvdXJjZSwgdm9pZCAqcGRl c3QsIGludCBzb3VyY2VfdHlwZSwgaW50IGRlc3RfdHlwZSkgeworKyAgdWludDY0IHZ1aW50NjQg PSAwOyBpbnQ2NCB2aW50NjQgPSAwOworKworKyAgc3dpdGNoIChzb3VyY2VfdHlwZSkgeworKyAg Y2FzZSBCSU5OX0lOVDg6CisrICAgIHZpbnQ2NCA9ICooc2lnbmVkIGNoYXIgKilwc291cmNlOwor KyAgICBicmVhazsKKysgIGNhc2UgQklOTl9JTlQxNjoKKysgICAgdmludDY0ID0gKihzaG9ydCAq KXBzb3VyY2U7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0lOVDMyOgorKyAgICB2aW50NjQg PSAqKGludCAqKXBzb3VyY2U7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0lOVDY0OgorKyAg ICB2aW50NjQgPSAqKGludDY0ICopcHNvdXJjZTsKKysgICAgYnJlYWs7CisrCisrICBjYXNlIEJJ Tk5fVUlOVDg6CisrICAgIHZ1aW50NjQgPSAqKHVuc2lnbmVkIGNoYXIgKilwc291cmNlOworKyAg ICBicmVhazsKKysgIGNhc2UgQklOTl9VSU5UMTY6CisrICAgIHZ1aW50NjQgPSAqKHVuc2lnbmVk IHNob3J0ICopcHNvdXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fVUlOVDMyOgorKyAg ICB2dWludDY0ID0gKih1bnNpZ25lZCBpbnQgKilwc291cmNlOworKyAgICBicmVhazsKKysgIGNh c2UgQklOTl9VSU5UNjQ6CisrICAgIHZ1aW50NjQgPSAqKHVpbnQ2NCAqKXBzb3VyY2U7CisrICAg IGJyZWFrOworKworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKworKwor KyAgLy8gY29weSBmcm9tIGludDY0IHRvIHVpbnQ2NCwgaWYgcG9zc2libGUKKysKKysgIGlmIChp bnRfdHlwZShzb3VyY2VfdHlwZSkgPT0gQklOTl9VTlNJR05FRF9JTlQgJiYgaW50X3R5cGUoZGVz dF90eXBlKSA9PSBCSU5OX1NJR05FRF9JTlQpIHsKKysgICAgaWYgKHZ1aW50NjQgPiBJTlQ2NF9N QVgpIHJldHVybiBGQUxTRTsKKysgICAgdmludDY0ID0gdnVpbnQ2NDsKKysgIH0gZWxzZSBpZiAo aW50X3R5cGUoc291cmNlX3R5cGUpID09IEJJTk5fU0lHTkVEX0lOVCAmJiBpbnRfdHlwZShkZXN0 X3R5cGUpID09IEJJTk5fVU5TSUdORURfSU5UKSB7CisrICAgIGlmICh2aW50NjQgPCAwKSByZXR1 cm4gRkFMU0U7CisrICAgIHZ1aW50NjQgPSB2aW50NjQ7CisrICB9CisrCisrCisrICBzd2l0Y2gg KGRlc3RfdHlwZSkgeworKyAgY2FzZSBCSU5OX0lOVDg6CisrICAgIGlmICh2aW50NjQgPCBJTlQ4 X01JTiB8fCB2aW50NjQgPiBJTlQ4X01BWCkgcmV0dXJuIEZBTFNFOworKyAgICAqKHNpZ25lZCBj aGFyICopcGRlc3QgPSAoc2lnbmVkIGNoYXIpIHZpbnQ2NDsKKysgICAgYnJlYWs7CisrICBjYXNl IEJJTk5fSU5UMTY6CisrICAgIGlmICh2aW50NjQgPCBJTlQxNl9NSU4gfHwgdmludDY0ID4gSU5U MTZfTUFYKSByZXR1cm4gRkFMU0U7CisrICAgICooc2hvcnQgKilwZGVzdCA9IChzaG9ydCkgdmlu dDY0OworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9JTlQzMjoKKysgICAgaWYgKHZpbnQ2NCA8 IElOVDMyX01JTiB8fCB2aW50NjQgPiBJTlQzMl9NQVgpIHJldHVybiBGQUxTRTsKKysgICAgKihp bnQgKilwZGVzdCA9IChpbnQpIHZpbnQ2NDsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fSU5U NjQ6CisrICAgICooaW50NjQgKilwZGVzdCA9IHZpbnQ2NDsKKysgICAgYnJlYWs7CisrCisrICBj YXNlIEJJTk5fVUlOVDg6CisrICAgIGlmICh2dWludDY0ID4gVUlOVDhfTUFYKSByZXR1cm4gRkFM U0U7CisrICAgICoodW5zaWduZWQgY2hhciAqKXBkZXN0ID0gKHVuc2lnbmVkIGNoYXIpIHZ1aW50 NjQ7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1VJTlQxNjoKKysgICAgaWYgKHZ1aW50NjQg PiBVSU5UMTZfTUFYKSByZXR1cm4gRkFMU0U7CisrICAgICoodW5zaWduZWQgc2hvcnQgKilwZGVz dCA9ICh1bnNpZ25lZCBzaG9ydCkgdnVpbnQ2NDsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5f VUlOVDMyOgorKyAgICBpZiAodnVpbnQ2NCA+IFVJTlQzMl9NQVgpIHJldHVybiBGQUxTRTsKKysg ICAgKih1bnNpZ25lZCBpbnQgKilwZGVzdCA9ICh1bnNpZ25lZCBpbnQpIHZ1aW50NjQ7CisrICAg IGJyZWFrOworKyAgY2FzZSBCSU5OX1VJTlQ2NDoKKysgICAgKih1aW50NjQgKilwZGVzdCA9IHZ1 aW50NjQ7CisrICAgIGJyZWFrOworKworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOwor KyAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIGNvcHlfZmxvYXRfdmFsdWUoY29uc3Qg dm9pZCAqcHNvdXJjZSwgdm9pZCAqcGRlc3QsIGludCBzb3VyY2VfdHlwZSwgaW50IGRlc3RfdHlw ZSkgeworKworKyAgc3dpdGNoIChzb3VyY2VfdHlwZSkgeworKyAgY2FzZSBCSU5OX0ZMT0FUMzI6 CisrICAgICooZG91YmxlICopcGRlc3QgPSAqKGZsb2F0ICopcHNvdXJjZTsKKysgICAgYnJlYWs7 CisrICBjYXNlIEJJTk5fRkxPQVQ2NDoKKysgICAgKihmbG9hdCAqKXBkZXN0ID0gKGZsb2F0KSAq KGRvdWJsZSAqKXBzb3VyY2U7CisrICAgIGJyZWFrOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJu IEZBTFNFOworKyAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSB2b2lkIHplcm9fdmFsdWUoY29u c3Qgdm9pZCAqcHZhbHVlLCBpbnQgdHlwZSkgeworKyAgLy9pbnQgc2l6ZT0wOworKworKyAgc3dp dGNoIChiaW5uX2dldF9yZWFkX3N0b3JhZ2UodHlwZSkpIHsKKysgIGNhc2UgQklOTl9TVE9SQUdF X05PQllURVM6CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKKysgICAg KigoY2hhciAqKSBwdmFsdWUpID0gMDsKKysgICAgLy9zaXplPTE7CisrICAgIGJyZWFrOworKyAg Y2FzZSBCSU5OX1NUT1JBR0VfV09SRDoKKysgICAgKigoc2hvcnQgKikgcHZhbHVlKSA9IDA7Cisr ICAgIC8vc2l6ZT0yOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgor KyAgICAqKChpbnQgKikgcHZhbHVlKSA9IDA7CisrICAgIC8vc2l6ZT00OworKyAgICBicmVhazsK KysgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgorKyAgICAqKCh1aW50NjQgKikgcHZhbHVlKSA9 IDA7CisrICAgIC8vc2l6ZT04OworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0JM T0I6CisrICBjYXNlIEJJTk5fU1RPUkFHRV9TVFJJTkc6CisrICBjYXNlIEJJTk5fU1RPUkFHRV9D T05UQUlORVI6CisrICAgICooY2hhciAqKilwdmFsdWUgPSBOVUxMOworKyAgICBicmVhazsKKysg IH0KKysKKysgIC8vaWYgKHNpemU+MCkgbWVtc2V0KHB2YWx1ZSwgMCwgc2l6ZSk7CisrCisrfQor KworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09M IGNvcHlfdmFsdWUodm9pZCAqcHNvdXJjZSwgdm9pZCAqcGRlc3QsIGludCBzb3VyY2VfdHlwZSwg aW50IGRlc3RfdHlwZSwgaW50IGRhdGFfc3RvcmUpIHsKKysKKysgIGlmICh0eXBlX2ZhbWlseShz b3VyY2VfdHlwZSkgIT0gdHlwZV9mYW1pbHkoZGVzdF90eXBlKSkgcmV0dXJuIEZBTFNFOworKwor KyAgaWYgKHR5cGVfZmFtaWx5KHNvdXJjZV90eXBlKSA9PSBCSU5OX0ZBTUlMWV9JTlQgJiYgc291 cmNlX3R5cGUgIT0gZGVzdF90eXBlKSB7CisrICAgIHJldHVybiBjb3B5X2ludF92YWx1ZShwc291 cmNlLCBwZGVzdCwgc291cmNlX3R5cGUsIGRlc3RfdHlwZSk7CisrICB9IGVsc2UgaWYgKHR5cGVf ZmFtaWx5KHNvdXJjZV90eXBlKSA9PSBCSU5OX0ZBTUlMWV9GTE9BVCAmJiBzb3VyY2VfdHlwZSAh PSBkZXN0X3R5cGUpIHsKKysgICAgcmV0dXJuIGNvcHlfZmxvYXRfdmFsdWUocHNvdXJjZSwgcGRl c3QsIHNvdXJjZV90eXBlLCBkZXN0X3R5cGUpOworKyAgfSBlbHNlIHsKKysgICAgcmV0dXJuIGNv cHlfcmF3X3ZhbHVlKHBzb3VyY2UsIHBkZXN0LCBkYXRhX3N0b3JlKTsKKysgIH0KKysKKyt9Cisr CisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBXUklURSBGVU5DVElPTlMg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElF TlRSWSBiaW5uX2xpc3RfYWRkKGJpbm4gKmxpc3QsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGlu dCBzaXplKSB7CisrCisrICBpZiAoR2V0V3JpdGVDb252ZXJ0ZWREYXRhKCZ0eXBlLCAmcHZhbHVl LCAmc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIHJldHVybiBiaW5uX2xpc3Rf YWRkX3JhdyhsaXN0LCB0eXBlLCBwdmFsdWUsIHNpemUpOworKworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFwX3NldChiaW5u ICptYXAsIGludCBpZCwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKKysKKysg IGlmIChHZXRXcml0ZUNvbnZlcnRlZERhdGEoJnR5cGUsICZwdmFsdWUsICZzaXplKSA9PSBGQUxT RSkgcmV0dXJuIEZBTFNFOworKworKyAgcmV0dXJuIGJpbm5fbWFwX3NldF9yYXcobWFwLCBpZCwg dHlwZSwgcHZhbHVlLCBzaXplKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX29iamVjdF9zZXQoYmlubiAqb2JqLCBjb25z dCBjaGFyICprZXksIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7CisrCisrICBp ZiAoR2V0V3JpdGVDb252ZXJ0ZWREYXRhKCZ0eXBlLCAmcHZhbHVlLCAmc2l6ZSkgPT0gRkFMU0Up IHJldHVybiBGQUxTRTsKKysKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXRfcmF3KG9iaiwga2V5 LCB0eXBlLCBwdmFsdWUsIHNpemUpOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKysvLyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHdyYXBwZXJzCisr Qk9PTCBBUElFTlRSWSBiaW5uX2FkZF92YWx1ZShiaW5uICppdGVtLCBpbnQgYmlubl90eXBlLCBp bnQgaWQsIGNoYXIgKm5hbWUsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7Cisr CisrICBzd2l0Y2ggKGJpbm5fdHlwZSkgeworKyAgICBjYXNlIEJJTk5fTElTVDoKKysgICAgICBy ZXR1cm4gYmlubl9saXN0X2FkZChpdGVtLCB0eXBlLCBwdmFsdWUsIHNpemUpOworKyAgICBjYXNl IEJJTk5fTUFQOgorKyAgICAgIHJldHVybiBiaW5uX21hcF9zZXQoaXRlbSwgaWQsIHR5cGUsIHB2 YWx1ZSwgc2l6ZSk7CisrICAgIGNhc2UgQklOTl9PQkpFQ1Q6CisrICAgICAgcmV0dXJuIGJpbm5f b2JqZWN0X3NldChpdGVtLCBuYW1lLCB0eXBlLCBwdmFsdWUsIHNpemUpOworKyAgICBkZWZhdWx0 OgorKyAgICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9P TCBBUElFTlRSWSBiaW5uX2xpc3RfYWRkX25ldyhiaW5uICpsaXN0LCBiaW5uICp2YWx1ZSkgewor KyAgQk9PTCByZXR2YWw7CisrCisrICByZXR2YWwgPSBiaW5uX2xpc3RfYWRkX3ZhbHVlKGxpc3Qs IHZhbHVlKTsKKysgIGlmICh2YWx1ZSkgZnJlZV9mbih2YWx1ZSk7CisrICByZXR1cm4gcmV0dmFs OworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQ SUVOVFJZIGJpbm5fbWFwX3NldF9uZXcoYmlubiAqbWFwLCBpbnQgaWQsIGJpbm4gKnZhbHVlKSB7 CisrICBCT09MIHJldHZhbDsKKysKKysgIHJldHZhbCA9IGJpbm5fbWFwX3NldF92YWx1ZShtYXAs IGlkLCB2YWx1ZSk7CisrICBpZiAodmFsdWUpIGZyZWVfZm4odmFsdWUpOworKyAgcmV0dXJuIHJl dHZhbDsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9P TCBBUElFTlRSWSBiaW5uX29iamVjdF9zZXRfbmV3KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5 LCBiaW5uICp2YWx1ZSkgeworKyAgQk9PTCByZXR2YWw7CisrCisrICByZXR2YWwgPSBiaW5uX29i amVjdF9zZXRfdmFsdWUob2JqLCBrZXksIHZhbHVlKTsKKysgIGlmICh2YWx1ZSkgZnJlZV9mbih2 YWx1ZSk7CisrICByZXR1cm4gcmV0dmFsOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysvKioqIFJFQUQgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9saXN0X3ZhbHVl KGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcykgeworKyAgYmlubiAqdmFsdWU7CisrCisrICB2YWx1 ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7CisrCisrICBpZiAoYmlubl9s aXN0X2dldF92YWx1ZShwdHIsIHBvcywgdmFsdWUpID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4o dmFsdWUpOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIHZhbHVlLT5hbGxvY2F0ZWQg PSBUUlVFOworKyAgcmV0dXJuIHZhbHVlOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfdmFsdWUoY29uc3Qgdm9p ZCAqcHRyLCBpbnQgaWQpIHsKKysgIGJpbm4gKnZhbHVlOworKworKyAgdmFsdWUgPSAoYmlubiAq KSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJpbm5fbWFwX2dldF92YWx1 ZShwdHIsIGlkLCB2YWx1ZSkgPT0gRkFMU0UpIHsKKysgICAgZnJlZV9mbih2YWx1ZSk7CisrICAg IHJldHVybiBOVUxMOworKyAgfQorKworKyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7CisrICBy ZXR1cm4gdmFsdWU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor KworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGNv bnN0IGNoYXIgKmtleSkgeworKyAgYmlubiAqdmFsdWU7CisrCisrICB2YWx1ZSA9IChiaW5uICop IGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7CisrCisrICBpZiAoYmlubl9vYmplY3RfZ2V0X3Zh bHVlKHB0ciwga2V5LCB2YWx1ZSkgPT0gRkFMU0UpIHsKKysgICAgZnJlZV9mbih2YWx1ZSk7Cisr ICAgIHJldHVybiBOVUxMOworKyAgfQorKworKyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7Cisr ICByZXR1cm4gdmFsdWU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X3JlYWQoY29uc3Qg dm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgeworKyAgYmlubiB2 YWx1ZTsKKysKKysgIGlmIChiaW5uX2xpc3RfZ2V0X3ZhbHVlKGxpc3QsIHBvcywgJnZhbHVlKSA9 PSBGQUxTRSkgcmV0dXJuIE5VTEw7CisrICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7 CisrICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7CisrI2lmIEJZVEVfT1JERVIgPT0g TElUVExFX0VORElBTgorKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7CisrI2Vsc2UKKysg IHJldHVybiB2YWx1ZS5wdHI7CisrI2VuZGlmCisrCisrfQorKworKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWQoY29uc3Qgdm9pZCAqbWFwLCBp bnQgaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7CisrCisrICBp ZiAoYmlubl9tYXBfZ2V0X3ZhbHVlKG1hcCwgaWQsICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBO VUxMOworKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYgKHBzaXplKSAq cHNpemUgPSB2YWx1ZS5zaXplOworKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKysg IHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOworKyNlbHNlCisrICByZXR1cm4gdmFsdWUucHRy OworKyNlbmRpZgorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3ZvaWQgKiBB UElFTlRSWSBiaW5uX29iamVjdF9yZWFkKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 LCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZhbHVlOworKworKyAgaWYgKGJp bm5fb2JqZWN0X2dldF92YWx1ZShvYmosIGtleSwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5V TEw7CisrICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7CisrICBpZiAocHNpemUpICpw c2l6ZSA9IHZhbHVlLnNpemU7CisrI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorKyAg cmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7CisrI2Vsc2UKKysgIHJldHVybiB2YWx1ZS5wdHI7 CisrI2VuZGlmCisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9nZXQoY29uc3Qgdm9pZCAqcHRy LCBpbnQgcG9zLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKSB7CisrICBiaW5u IHZhbHVlOworKyAgaW50IHN0b3JhZ2VfdHlwZTsKKysKKysgIHN0b3JhZ2VfdHlwZSA9IGJpbm5f Z2V0X3JlYWRfc3RvcmFnZSh0eXBlKTsKKysgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklOTl9TVE9S QUdFX05PQllURVMgJiYgcHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIHplcm9f dmFsdWUocHZhbHVlLCB0eXBlKTsKKysKKysgIGlmIChiaW5uX2xpc3RfZ2V0X3ZhbHVlKHB0ciwg cG9zLCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAoY29weV92YWx1 ZSh2YWx1ZS5wdHIsIHB2YWx1ZSwgdmFsdWUudHlwZSwgdHlwZSwgc3RvcmFnZV90eXBlKSA9PSBG QUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXpl OworKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrQk9PTCBBUElFTlRSWSBiaW5uX21hcF9nZXQoY29uc3Qgdm9pZCAqcHRyLCBpbnQgaWQsIGlu dCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7CisrICBp bnQgc3RvcmFnZV90eXBlOworKworKyAgc3RvcmFnZV90eXBlID0gYmlubl9nZXRfcmVhZF9zdG9y YWdlKHR5cGUpOworKyAgaWYgKHN0b3JhZ2VfdHlwZSAhPSBCSU5OX1NUT1JBR0VfTk9CWVRFUyAm JiBwdmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgemVyb192YWx1ZShwdmFsdWUs IHR5cGUpOworKworKyAgaWYgKGJpbm5fbWFwX2dldF92YWx1ZShwdHIsIGlkLCAmdmFsdWUpID09 IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAoY29weV92YWx1ZSh2YWx1ZS5wdHIsIHB2 YWx1ZSwgdmFsdWUudHlwZSwgdHlwZSwgc3RvcmFnZV90eXBlKSA9PSBGQUxTRSkgcmV0dXJuIEZB TFNFOworKworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOworKworKyAgcmV0dXJu IFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLy8gICBpZiAoYmlu bl9vYmplY3RfZ2V0KG9iaiwgIm11bHRpcGxpZXIiLCBCSU5OX0lOVDMyLCAmbXVsdGlwbGllciwg TlVMTCkgPT0gRkFMU0UpIHh4eDsKKysKKytCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldChj b25zdCB2b2lkICpwdHIsIGNvbnN0IGNoYXIgKmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwg aW50ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1ZTsKKysgIGludCBzdG9yYWdlX3R5cGU7CisrCisr ICBzdG9yYWdlX3R5cGUgPSBiaW5uX2dldF9yZWFkX3N0b3JhZ2UodHlwZSk7CisrICBpZiAoc3Rv cmFnZV90eXBlICE9IEJJTk5fU1RPUkFHRV9OT0JZVEVTICYmIHB2YWx1ZSA9PSBOVUxMKSByZXR1 cm4gRkFMU0U7CisrCisrICB6ZXJvX3ZhbHVlKHB2YWx1ZSwgdHlwZSk7CisrCisrICBpZiAoYmlu bl9vYmplY3RfZ2V0X3ZhbHVlKHB0ciwga2V5LCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4gRkFM U0U7CisrCisrICBpZiAoY29weV92YWx1ZSh2YWx1ZS5wdHIsIHB2YWx1ZSwgdmFsdWUudHlwZSwg dHlwZSwgc3RvcmFnZV90eXBlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKHBz aXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOworKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKwor Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvLyB0aGVz ZSBmdW5jdGlvbnMgYmVsb3cgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBhcyBpbmxpbmUgZnVuY3Rp b25zLCBiZWNhdXNlCisrLy8gdGhleSB1c2UgYSBsb3Qgb2Ygc3BhY2UsIGV2ZW4gZm9yIHRoZSB2 YXJpYWJsZS4gc28gdGhleSB3aWxsIGJlIGV4cG9ydGVkLgorKworKy8vIGJ1dCB3aGF0IGFib3V0 IHVzaW5nIGFzIHN0YXRpYz8KKysvLyAgICBpcyB0aGVyZSBhbnkgcHJvYmxlbSB3aXRoIHdyYXBw ZXJzPyBjYW4gdGhlc2Ugd3JhcHBlcnMgaW1wbGVtZW50IHRoZXNlIGZ1bmN0aW9ucyB1c2luZyB0 aGUgaGVhZGVyPworKy8vICAgIGlmIGFzIHN0YXRpYywgd2lsbCB0aGV5IGJlIHByZXNlbnQgZXZl biBvbiBtb2R1bGVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBmdW5jdGlvbnM/CisrCisrc2lnbmVkIGNo YXIgQVBJRU5UUlkgYmlubl9saXN0X2ludDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewor KyAgc2lnbmVkIGNoYXIgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklO Tl9JTlQ4LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytzaG9y dCBBUElFTlRSWSBiaW5uX2xpc3RfaW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewor KyAgc2hvcnQgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9JTlQx NiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisraW50IEFQSUVO VFJZIGJpbm5fbGlzdF9pbnQzMihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7CisrICBpbnQg dmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9JTlQzMiwgJnZhbHVl LCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisraW50NjQgQVBJRU5UUlkgYmlu bl9saXN0X2ludDY0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIGludDY0IHZhbHVl OworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UNjQsICZ2YWx1ZSwgTlVM TCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Vuc2lnbmVkIGNoYXIgQVBJRU5UUlkg Ymlubl9saXN0X3VpbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIHVuc2lnbmVk IGNoYXIgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9VSU5UOCwg JnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdW5zaWduZWQgc2hv cnQgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQxNihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7 CisrICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKysKKysgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9z LCBCSU5OX1VJTlQxNiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9Cisr CisrdW5zaWduZWQgaW50IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50MzIoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcykgeworKyAgdW5zaWduZWQgaW50IHZhbHVlOworKworKyAgYmlubl9saXN0X2dl dChsaXN0LCBwb3MsIEJJTk5fVUlOVDMyLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZh bHVlOworK30KKysKKyt1aW50NjQgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQ2NChjb25zdCB2b2lk ICpsaXN0LCBpbnQgcG9zKSB7CisrICB1aW50NjQgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0 KGxpc3QsIHBvcywgQklOTl9VSU5UNjQsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFs dWU7CisrfQorKworK2Zsb2F0IEFQSUVOVFJZIGJpbm5fbGlzdF9mbG9hdChjb25zdCB2b2lkICps aXN0LCBpbnQgcG9zKSB7CisrICBmbG9hdCB2YWx1ZTsKKysKKysgIGJpbm5fbGlzdF9nZXQobGlz dCwgcG9zLCBCSU5OX0ZMT0FUMzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7 CisrfQorKworK2RvdWJsZSBBUElFTlRSWSBiaW5uX2xpc3RfZG91YmxlKGNvbnN0IHZvaWQgKmxp c3QsIGludCBwb3MpIHsKKysgIGRvdWJsZSB2YWx1ZTsKKysKKysgIGJpbm5fbGlzdF9nZXQobGlz dCwgcG9zLCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7 CisrfQorKworK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2Jvb2woY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcykgeworKyAgQk9PTCB2YWx1ZSA9IFRSVUU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxp c3QsIHBvcywgQklOTl9CT09MLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOwor K30KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9udWxsKGNvbnN0IHZvaWQgKmxpc3QsIGlu dCBwb3MpIHsKKysKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9OVUxM LCBOVUxMLCBOVUxMKTsKKysKKyt9CisrCisrY2hhciAqIEFQSUVOVFJZIGJpbm5fbGlzdF9zdHIo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgeworKyAgY2hhciAqdmFsdWU7CisrCisrICBiaW5u X2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9TVFJJTkcsICZ2YWx1ZSwgTlVMTCk7CisrCisrICBy ZXR1cm4gdmFsdWU7CisrfQorKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3RfYmxvYihjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgKnBzaXplKSB7CisrICB2b2lkICp2YWx1ZTsKKysK KysgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0JMT0IsICZ2YWx1ZSwgcHNpemUpOwor KworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X2xp c3QoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBi aW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9MSVNULCAmdmFsdWUsIE5VTEwpOworKworKyAg cmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X21hcChjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7CisrICB2b2lkICp2YWx1ZTsKKysKKysgIGJpbm5fbGlz dF9nZXQobGlzdCwgcG9zLCBCSU5OX01BUCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2 YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9vYmplY3QoY29uc3Qgdm9p ZCAqbGlzdCwgaW50IHBvcykgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0 KGxpc3QsIHBvcywgQklOTl9PQkpFQ1QsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFs dWU7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrc2lnbmVkIGNoYXIgQVBJRU5U UlkgYmlubl9tYXBfaW50OChjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgc2lnbmVkIGNo YXIgdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQ4LCAmdmFsdWUs IE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytzaG9ydCBBUElFTlRSWSBiaW5u X21hcF9pbnQxNihjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgc2hvcnQgdmFsdWU7Cisr CisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQxNiwgJnZhbHVlLCBOVUxMKTsKKysK KysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisraW50IEFQSUVOVFJZIGJpbm5fbWFwX2ludDMyKGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7CisrICBpbnQgdmFsdWU7CisrCisrICBiaW5uX21hcF9n ZXQobWFwLCBpZCwgQklOTl9JTlQzMiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1 ZTsKKyt9CisrCisraW50NjQgQVBJRU5UUlkgYmlubl9tYXBfaW50NjQoY29uc3Qgdm9pZCAqbWFw LCBpbnQgaWQpIHsKKysgIGludDY0IHZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQs IEJJTk5fSU5UNjQsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKwor K3Vuc2lnbmVkIGNoYXIgQVBJRU5UUlkgYmlubl9tYXBfdWludDgoY29uc3Qgdm9pZCAqbWFwLCBp bnQgaWQpIHsKKysgIHVuc2lnbmVkIGNoYXIgdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFw LCBpZCwgQklOTl9VSU5UOCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9 CisrCisrdW5zaWduZWQgc2hvcnQgQVBJRU5UUlkgYmlubl9tYXBfdWludDE2KGNvbnN0IHZvaWQg Km1hcCwgaW50IGlkKSB7CisrICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKysKKysgIGJpbm5fbWFw X2dldChtYXAsIGlkLCBCSU5OX1VJTlQxNiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2 YWx1ZTsKKyt9CisrCisrdW5zaWduZWQgaW50IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQzMihjb25z dCB2b2lkICptYXAsIGludCBpZCkgeworKyAgdW5zaWduZWQgaW50IHZhbHVlOworKworKyAgYmlu bl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDMyLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0 dXJuIHZhbHVlOworK30KKysKKyt1aW50NjQgQVBJRU5UUlkgYmlubl9tYXBfdWludDY0KGNvbnN0 IHZvaWQgKm1hcCwgaW50IGlkKSB7CisrICB1aW50NjQgdmFsdWU7CisrCisrICBiaW5uX21hcF9n ZXQobWFwLCBpZCwgQklOTl9VSU5UNjQsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFs dWU7CisrfQorKworK2Zsb2F0IEFQSUVOVFJZIGJpbm5fbWFwX2Zsb2F0KGNvbnN0IHZvaWQgKm1h cCwgaW50IGlkKSB7CisrICBmbG9hdCB2YWx1ZTsKKysKKysgIGJpbm5fbWFwX2dldChtYXAsIGlk LCBCSU5OX0ZMT0FUMzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQor KworK2RvdWJsZSBBUElFTlRSWSBiaW5uX21hcF9kb3VibGUoY29uc3Qgdm9pZCAqbWFwLCBpbnQg aWQpIHsKKysgIGRvdWJsZSB2YWx1ZTsKKysKKysgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5O X0ZMT0FUNjQsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK0JP T0wgQVBJRU5UUlkgYmlubl9tYXBfYm9vbChjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAg Qk9PTCB2YWx1ZSA9IFRSVUU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9CT09M LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytCT09MIEFQSUVO VFJZIGJpbm5fbWFwX251bGwoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysKKysgIHJldHVy biBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9OVUxMLCBOVUxMLCBOVUxMKTsKKysKKyt9Cisr CisrY2hhciAqIEFQSUVOVFJZIGJpbm5fbWFwX3N0cihjb25zdCB2b2lkICptYXAsIGludCBpZCkg eworKyAgY2hhciAqdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9TVFJJ TkcsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3ZvaWQgKiBB UElFTlRSWSBiaW5uX21hcF9ibG9iKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQgKnBzaXpl KSB7CisrICB2b2lkICp2YWx1ZTsKKysKKysgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0JM T0IsICZ2YWx1ZSwgcHNpemUpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICog QVBJRU5UUlkgYmlubl9tYXBfbGlzdChjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgdm9p ZCAqdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9MSVNULCAmdmFsdWUs IE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkgYmlu bl9tYXBfbWFwKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7CisrICB2b2lkICp2YWx1ZTsKKysK KysgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX01BUCwgJnZhbHVlLCBOVUxMKTsKKysKKysg IHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX29iamVjdChj b25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX21h cF9nZXQobWFwLCBpZCwgQklOTl9PQkpFQ1QsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4g dmFsdWU7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrc2lnbmVkIGNoYXIgQVBJ RU5UUlkgYmlubl9vYmplY3RfaW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkg eworKyAgc2lnbmVkIGNoYXIgdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXks IEJJTk5fSU5UOCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisr c2hvcnQgQVBJRU5UUlkgYmlubl9vYmplY3RfaW50MTYoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBj aGFyICprZXkpIHsKKysgIHNob3J0IHZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwg a2V5LCBCSU5OX0lOVDE2LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30K KysKKytpbnQgQVBJRU5UUlkgYmlubl9vYmplY3RfaW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25z dCBjaGFyICprZXkpIHsKKysgIGludCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmos IGtleSwgQklOTl9JTlQzMiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9 CisrCisraW50NjQgQVBJRU5UUlkgYmlubl9vYmplY3RfaW50NjQoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXkpIHsKKysgIGludDY0IHZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0 KG9iaiwga2V5LCBCSU5OX0lOVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVl OworK30KKysKKyt1bnNpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3VpbnQ4KGNvbnN0 IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICB1bnNpZ25lZCBjaGFyIHZhbHVlOwor KworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ4LCAmdmFsdWUsIE5VTEwp OworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt1bnNpZ25lZCBzaG9ydCBBUElFTlRSWSBi aW5uX29iamVjdF91aW50MTYoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysg IHVuc2lnbmVkIHNob3J0IHZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBC SU5OX1VJTlQxNiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisr dW5zaWduZWQgaW50IEFQSUVOVFJZIGJpbm5fb2JqZWN0X3VpbnQzMihjb25zdCB2b2lkICpvYmos IGNvbnN0IGNoYXIgKmtleSkgeworKyAgdW5zaWduZWQgaW50IHZhbHVlOworKworKyAgYmlubl9v YmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJl dHVybiB2YWx1ZTsKKyt9CisrCisrdWludDY0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X3VpbnQ2NChj b25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgeworKyAgdWludDY0IHZhbHVlOworKwor KyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ2NCwgJnZhbHVlLCBOVUxMKTsK KysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrZmxvYXQgQVBJRU5UUlkgYmlubl9vYmplY3Rf ZmxvYXQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIGZsb2F0IHZhbHVl OworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0ZMT0FUMzIsICZ2YWx1ZSwg TlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK2RvdWJsZSBBUElFTlRSWSBiaW5u X29iamVjdF9kb3VibGUoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIGRv dWJsZSB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9GTE9BVDY0 LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytCT09MIEFQSUVO VFJZIGJpbm5fb2JqZWN0X2Jvb2woY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsK KysgIEJPT0wgdmFsdWUgPSBUUlVFOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBC SU5OX0JPT0wsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK0JP T0wgQVBJRU5UUlkgYmlubl9vYmplY3RfbnVsbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSkgeworKworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9OVUxM LCBOVUxMLCBOVUxMKTsKKysKKyt9CisrCisrY2hhciAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3N0 cihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgeworKyAgY2hhciAqdmFsdWU7Cisr CisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fU1RSSU5HLCAmdmFsdWUsIE5VTEwp OworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9vYmpl Y3RfYmxvYihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50ICpwc2l6ZSkgewor KyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fQkxP QiwgJnZhbHVlLCBwc2l6ZSk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3ZvaWQgKiBB UElFTlRSWSBiaW5uX29iamVjdF9saXN0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 KSB7CisrICB2b2lkICp2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9MSVNULCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lk ICogQVBJRU5UUlkgYmlubl9vYmplY3RfbWFwKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAq a2V5KSB7CisrICB2b2lkICp2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwg QklOTl9NQVAsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Zv aWQgKiBBUElFTlRSWSBiaW5uX29iamVjdF9vYmplY3QoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBj aGFyICprZXkpIHsKKysgIHZvaWQgKnZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwg a2V5LCBCSU5OX09CSkVDVCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIGJpbm4gKiBiaW5uX2FsbG9jX2l0ZW0oKSB7 CisrICBiaW5uICppdGVtOworKyAgaXRlbSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihi aW5uKSk7CisrICBpZiAoaXRlbSkgeworKyAgICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKGJpbm4p KTsKKysgICAgaXRlbS0+aGVhZGVyID0gQklOTl9NQUdJQzsKKysgICAgaXRlbS0+YWxsb2NhdGVk ID0gVFJVRTsKKysgICAgLy9pdGVtLT53cml0YWJsZSA9IEZBTFNFOyAgLS0gYWxyZWFkeSB6ZXJv ZWQKKysgIH0KKysgIHJldHVybiBpdGVtOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl92YWx1ZShpbnQgdHlwZSwgdm9pZCAq cHZhbHVlLCBpbnQgc2l6ZSwgYmlubl9tZW1fZnJlZSBmcmVlZm4pIHsKKysgIGludCBzdG9yYWdl X3R5cGU7CisrICBiaW5uICppdGVtID0gYmlubl9hbGxvY19pdGVtKCk7CisrICBpZiAoaXRlbSkg eworKyAgICBpdGVtLT50eXBlID0gdHlwZTsKKysgICAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUs ICZzdG9yYWdlX3R5cGUsIE5VTEwpOworKyAgICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkgeworKyAg ICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJ Tk5fU1RPUkFHRV9TVFJJTkc6CisrICAgICAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IHN0cmxlbigo Y2hhciopcHZhbHVlKSArIDE7CisrICAgICAgLyogZmFsbCB0aHJvdWdoICovCisrICAgIGNhc2Ug QklOTl9TVE9SQUdFX0JMT0I6CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKKysg ICAgICBpZiAoZnJlZWZuID09IEJJTk5fVFJBTlNJRU5UKSB7CisrICAgICAgICBpdGVtLT5wdHIg PSBiaW5uX21lbWR1cChwdmFsdWUsIHNpemUpOworKyAgICAgICAgaWYgKGl0ZW0tPnB0ciA9PSBO VUxMKSB7CisrICAgICAgICAgIGZyZWVfZm4oaXRlbSk7CisrICAgICAgICAgIHJldHVybiBOVUxM OworKyAgICAgICAgfQorKyAgICAgICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKKysgICAgICAg IGlmIChzdG9yYWdlX3R5cGUgPT0gQklOTl9TVE9SQUdFX1NUUklORykgc2l6ZS0tOworKyAgICAg IH0gZWxzZSB7CisrICAgICAgICBpdGVtLT5wdHIgPSBwdmFsdWU7CisrICAgICAgICBpdGVtLT5m cmVlZm4gPSBmcmVlZm47CisrICAgICAgfQorKyAgICAgIGl0ZW0tPnNpemUgPSBzaXplOworKyAg ICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGl0ZW0tPnB0ciA9ICZpdGVtLT52aW50 MzI7CisrICAgICAgY29weV9yYXdfdmFsdWUocHZhbHVlLCBpdGVtLT5wdHIsIHN0b3JhZ2VfdHlw ZSk7CisrICAgIH0KKysgIH0KKysgIHJldHVybiBpdGVtOworK30KKysKKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fc2V0X3N0cmluZyhiaW5u ICppdGVtLCBjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUgcGZyZWUpIHsKKysKKysgIGlmIChpdGVt ID09IE5VTEwgfHwgc3RyID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChwZnJlZSA9 PSBCSU5OX1RSQU5TSUVOVCkgeworKyAgICBpdGVtLT5wdHIgPSBiaW5uX21lbWR1cChzdHIsIHN0 cmxlbihzdHIpICsgMSk7CisrICAgIGlmIChpdGVtLT5wdHIgPT0gTlVMTCkgcmV0dXJuIEZBTFNF OworKyAgICBpdGVtLT5mcmVlZm4gPSBmcmVlX2ZuOworKyAgfSBlbHNlIHsKKysgICAgaXRlbS0+ cHRyID0gc3RyOworKyAgICBpdGVtLT5mcmVlZm4gPSBwZnJlZTsKKysgIH0KKysKKysgIGl0ZW0t PnR5cGUgPSBCSU5OX1NUUklORzsKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fc2V0X2Jsb2Io YmlubiAqaXRlbSwgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgYmlubl9tZW1fZnJlZSBwZnJlZSkgewor KworKyAgaWYgKGl0ZW0gPT0gTlVMTCB8fCBwdHIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKwor KyAgaWYgKHBmcmVlID09IEJJTk5fVFJBTlNJRU5UKSB7CisrICAgIGl0ZW0tPnB0ciA9IGJpbm5f bWVtZHVwKHB0ciwgc2l6ZSk7CisrICAgIGlmIChpdGVtLT5wdHIgPT0gTlVMTCkgcmV0dXJuIEZB TFNFOworKyAgICBpdGVtLT5mcmVlZm4gPSBmcmVlX2ZuOworKyAgfSBlbHNlIHsKKysgICAgaXRl bS0+cHRyID0gcHRyOworKyAgICBpdGVtLT5mcmVlZm4gPSBwZnJlZTsKKysgIH0KKysKKysgIGl0 ZW0tPnR5cGUgPSBCSU5OX0JMT0I7CisrICBpdGVtLT5zaXplID0gc2l6ZTsKKysgIHJldHVybiBU UlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqIFJF QUQgQ09OVkVSVEVEIFZBTFVFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KysKKysjaWZkZWYgX01TQ19WRVIKKysjZGVmaW5lIGF0b2k2NCBfYXRvaTY0CisrI2Vsc2UKKytp bnQ2NCBhdG9pNjQoY2hhciAqc3RyKSB7CisrICBpbnQ2NCByZXR2YWw7CisrICBpbnQgaXNfbmVn YXRpdmU9MDsKKysKKysgIGlmICgqc3RyID09ICctJykgeworKyAgICBpc19uZWdhdGl2ZSA9IDE7 CisrICAgIHN0cisrOworKyAgfQorKyAgcmV0dmFsID0gMDsKKysgIGZvciAoOyAqc3RyOyBzdHIr KykgeworKyAgICByZXR2YWwgPSAxMCAqIHJldHZhbCArICgqc3RyIC0gJzAnKTsKKysgIH0KKysg IGlmIChpc19uZWdhdGl2ZSkgcmV0dmFsICo9IC0xOworKyAgcmV0dXJuIHJldHZhbDsKKyt9Cisr I2VuZGlmCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09M IGlzX2ludGVnZXIoY2hhciAqcCkgeworKyAgQk9PTCByZXR2YWw7CisrCisrICBpZiAocCA9PSBO VUxMKSByZXR1cm4gRkFMU0U7CisrICBpZiAoKnAgPT0gJy0nKSBwKys7CisrICBpZiAoKnAgPT0g MCkgcmV0dXJuIEZBTFNFOworKworKyAgcmV0dmFsID0gVFJVRTsKKysKKysgIGZvciAoOyAqcDsg cCsrKSB7CisrICAgIGlmICggKCpwIDwgJzAnIHx8ICpwID4gJzknKSApIHsKKysgICAgICByZXR2 YWwgPSBGQUxTRTsKKysgICAgfQorKyAgfQorKworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIGlzX2Zsb2F0KGNo YXIgKnApIHsKKysgIEJPT0wgcmV0dmFsLCBudW1iZXJfZm91bmQ9RkFMU0U7CisrCisrICBpZiAo cCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrICBpZiAoKnAgPT0gJy0nKSBwKys7CisrICBpZiAo KnAgPT0gMCkgcmV0dXJuIEZBTFNFOworKworKyAgcmV0dmFsID0gVFJVRTsKKysKKysgIGZvciAo OyAqcDsgcCsrKSB7CisrICAgIGlmICgqcCA9PSAnLicgfHwgKnAgPT0gJywnKSB7CisrICAgICAg aWYgKCFudW1iZXJfZm91bmQpIHJldHZhbCA9IEZBTFNFOworKyAgICB9IGVsc2UgaWYgKCAqcCA+ PSAnMCcgJiYgKnAgPD0gJzknICkgeworKyAgICAgIG51bWJlcl9mb3VuZCA9IFRSVUU7CisrICAg IH0gZWxzZSB7CisrICAgICAgcmV0dXJuIEZBTFNFOworKyAgICB9CisrICB9CisrCisrICByZXR1 cm4gcmV0dmFsOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytC SU5OX1BSSVZBVEUgQk9PTCBpc19ib29sX3N0cihjaGFyICpzdHIsIEJPT0wgKnBib29sKSB7Cisr ICBpbnQ2NCAgdmludDsKKysgIGRvdWJsZSB2ZG91YmxlOworKworKyAgaWYgKHN0ciA9PSBOVUxM IHx8IHBib29sID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChzdHJpY21wKHN0ciwg InRydWUiKSA9PSAwKSBnb3RvIGxvY190cnVlOworKyAgaWYgKHN0cmljbXAoc3RyLCAieWVzIikg PT0gMCkgZ290byBsb2NfdHJ1ZTsKKysgIGlmIChzdHJpY21wKHN0ciwgIm9uIikgPT0gMCkgZ290 byBsb2NfdHJ1ZTsKKysgIC8vaWYgKHN0cmljbXAoc3RyLCAiMSIpID09IDApIGdvdG8gbG9jX3Ry dWU7CisrCisrICBpZiAoc3RyaWNtcChzdHIsICJmYWxzZSIpID09IDApIGdvdG8gbG9jX2ZhbHNl OworKyAgaWYgKHN0cmljbXAoc3RyLCAibm8iKSA9PSAwKSBnb3RvIGxvY19mYWxzZTsKKysgIGlm IChzdHJpY21wKHN0ciwgIm9mZiIpID09IDApIGdvdG8gbG9jX2ZhbHNlOworKyAgLy9pZiAoc3Ry aWNtcChzdHIsICIwIikgPT0gMCkgZ290byBsb2NfZmFsc2U7CisrCisrICBpZiAoaXNfaW50ZWdl cihzdHIpKSB7CisrICAgIHZpbnQgPSBhdG9pNjQoc3RyKTsKKysgICAgKnBib29sID0gKHZpbnQg IT0gMCkgPyBUUlVFIDogRkFMU0U7CisrICAgIHJldHVybiBUUlVFOworKyAgfSBlbHNlIGlmIChp c19mbG9hdChzdHIpKSB7CisrICAgIHZkb3VibGUgPSBhdG9mKHN0cik7CisrICAgICpwYm9vbCA9 ICh2ZG91YmxlICE9IDApID8gVFJVRSA6IEZBTFNFOworKyAgICByZXR1cm4gVFJVRTsKKysgIH0K KysKKysgIHJldHVybiBGQUxTRTsKKysKKytsb2NfdHJ1ZToKKysgICpwYm9vbCA9IFRSVUU7Cisr ICByZXR1cm4gVFJVRTsKKysKKytsb2NfZmFsc2U6CisrICAqcGJvb2wgPSBGQUxTRTsKKysgIHJl dHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK KytCT09MIEFQSUVOVFJZIGJpbm5fZ2V0X2ludDMyKGJpbm4gKnZhbHVlLCBpbnQgKnBpbnQpIHsK KysKKysgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHBpbnQgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwor KworKyAgaWYgKHR5cGVfZmFtaWx5KHZhbHVlLT50eXBlKSA9PSBCSU5OX0ZBTUlMWV9JTlQpIHsK KysgICAgcmV0dXJuIGNvcHlfaW50X3ZhbHVlKHZhbHVlLT5wdHIsIHBpbnQsIHZhbHVlLT50eXBl LCBCSU5OX0lOVDMyKTsKKysgIH0KKysKKysgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKKysgIGNh c2UgQklOTl9GTE9BVDoKKysgICAgaWYgKHZhbHVlLT52ZmxvYXQgPCAoZmxvYXQpSU5UMzJfTUlO IHx8IHZhbHVlLT52ZmxvYXQgPiAoZmxvYXQpSU5UMzJfTUFYKSByZXR1cm4gRkFMU0U7CisrICAg ICpwaW50ID0gcm91bmR2YWwodmFsdWUtPnZmbG9hdCk7CisrICAgIGJyZWFrOworKyAgY2FzZSBC SU5OX0RPVUJMRToKKysgICAgaWYgKHZhbHVlLT52ZG91YmxlIDwgKGRvdWJsZSlJTlQzMl9NSU4g fHwgdmFsdWUtPnZkb3VibGUgPiAoZG91YmxlKUlOVDMyX01BWCkgcmV0dXJuIEZBTFNFOworKyAg ICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZG91YmxlKTsKKysgICAgYnJlYWs7CisrICBjYXNl IEJJTk5fU1RSSU5HOgorKyAgICBpZiAoaXNfaW50ZWdlcigoY2hhciopdmFsdWUtPnB0cikpCisr ICAgICAgKnBpbnQgPSBhdG9pKChjaGFyKil2YWx1ZS0+cHRyKTsKKysgICAgZWxzZSBpZiAoaXNf ZmxvYXQoKGNoYXIqKXZhbHVlLT5wdHIpKQorKyAgICAgICpwaW50ID0gcm91bmR2YWwoYXRvZigo Y2hhciopdmFsdWUtPnB0cikpOworKyAgICBlbHNlCisrICAgICAgcmV0dXJuIEZBTFNFOworKyAg ICBicmVhazsKKysgIGNhc2UgQklOTl9CT09MOgorKyAgICAqcGludCA9IHZhbHVlLT52Ym9vbDsK KysgICAgYnJlYWs7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisr ICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrQk9PTCBBUElFTlRSWSBiaW5uX2dldF9pbnQ2NChiaW5uICp2YWx1ZSwgaW50NjQgKnBpbnQp IHsKKysKKysgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHBpbnQgPT0gTlVMTCkgcmV0dXJuIEZBTFNF OworKworKyAgaWYgKHR5cGVfZmFtaWx5KHZhbHVlLT50eXBlKSA9PSBCSU5OX0ZBTUlMWV9JTlQp IHsKKysgICAgcmV0dXJuIGNvcHlfaW50X3ZhbHVlKHZhbHVlLT5wdHIsIHBpbnQsIHZhbHVlLT50 eXBlLCBCSU5OX0lOVDY0KTsKKysgIH0KKysKKysgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKKysg IGNhc2UgQklOTl9GTE9BVDoKKysgICAgaWYgKHZhbHVlLT52ZmxvYXQgPCAoZmxvYXQpSU5UNjRf TUlOIHx8IHZhbHVlLT52ZmxvYXQgPiAoZmxvYXQpSU5UNjRfTUFYKSByZXR1cm4gRkFMU0U7Cisr ICAgICpwaW50ID0gcm91bmR2YWwodmFsdWUtPnZmbG9hdCk7CisrICAgIGJyZWFrOworKyAgY2Fz ZSBCSU5OX0RPVUJMRToKKysgICAgaWYgKHZhbHVlLT52ZG91YmxlIDwgKGRvdWJsZSlJTlQ2NF9N SU4gfHwgdmFsdWUtPnZkb3VibGUgPiAoZG91YmxlKUlOVDY0X01BWCkgcmV0dXJuIEZBTFNFOwor KyAgICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZG91YmxlKTsKKysgICAgYnJlYWs7CisrICBj YXNlIEJJTk5fU1RSSU5HOgorKyAgICBpZiAoaXNfaW50ZWdlcigoY2hhciopdmFsdWUtPnB0cikp CisrICAgICAgKnBpbnQgPSBhdG9pNjQoKGNoYXIqKXZhbHVlLT5wdHIpOworKyAgICBlbHNlIGlm IChpc19mbG9hdCgoY2hhciopdmFsdWUtPnB0cikpCisrICAgICAgKnBpbnQgPSByb3VuZHZhbChh dG9mKChjaGFyKil2YWx1ZS0+cHRyKSk7CisrICAgIGVsc2UKKysgICAgICByZXR1cm4gRkFMU0U7 CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0JPT0w6CisrICAgICpwaW50ID0gdmFsdWUtPnZi b29sOworKyAgICBicmVhazsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxTRTsKKysgIH0K KysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fZ2V0X2RvdWJsZShiaW5uICp2YWx1ZSwgZG91Ymxl ICpwZmxvYXQpIHsKKysgIGludDY0IHZpbnQ7CisrCisrICBpZiAodmFsdWUgPT0gTlVMTCB8fCBw ZmxvYXQgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKHR5cGVfZmFtaWx5KHZhbHVl LT50eXBlKSA9PSBCSU5OX0ZBTUlMWV9JTlQpIHsKKysgICAgaWYgKGNvcHlfaW50X3ZhbHVlKHZh bHVlLT5wdHIsICZ2aW50LCB2YWx1ZS0+dHlwZSwgQklOTl9JTlQ2NCkgPT0gRkFMU0UpIHJldHVy biBGQUxTRTsKKysgICAgKnBmbG9hdCA9IChkb3VibGUpIHZpbnQ7CisrICAgIHJldHVybiBUUlVF OworKyAgfQorKworKyAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgeworKyAgY2FzZSBCSU5OX0ZMT0FU OgorKyAgICAqcGZsb2F0ID0gdmFsdWUtPnZmbG9hdDsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJ Tk5fRE9VQkxFOgorKyAgICAqcGZsb2F0ID0gdmFsdWUtPnZkb3VibGU7CisrICAgIGJyZWFrOwor KyAgY2FzZSBCSU5OX1NUUklORzoKKysgICAgaWYgKGlzX2ludGVnZXIoKGNoYXIqKXZhbHVlLT5w dHIpKQorKyAgICAgICpwZmxvYXQgPSAoZG91YmxlKSBhdG9pNjQoKGNoYXIqKXZhbHVlLT5wdHIp OworKyAgICBlbHNlIGlmIChpc19mbG9hdCgoY2hhciopdmFsdWUtPnB0cikpCisrICAgICAgKnBm bG9hdCA9IGF0b2YoKGNoYXIqKXZhbHVlLT5wdHIpOworKyAgICBlbHNlCisrICAgICAgcmV0dXJu IEZBTFNFOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9CT09MOgorKyAgICAqcGZsb2F0ID0g dmFsdWUtPnZib29sOworKyAgICBicmVhazsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxT RTsKKysgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fZ2V0X2Jvb2woYmlubiAqdmFsdWUs IEJPT0wgKnBib29sKSB7CisrICBpbnQ2NCB2aW50OworKworKyAgaWYgKHZhbHVlID09IE5VTEwg fHwgcGJvb2wgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKHR5cGVfZmFtaWx5KHZh bHVlLT50eXBlKSA9PSBCSU5OX0ZBTUlMWV9JTlQpIHsKKysgICAgaWYgKGNvcHlfaW50X3ZhbHVl KHZhbHVlLT5wdHIsICZ2aW50LCB2YWx1ZS0+dHlwZSwgQklOTl9JTlQ2NCkgPT0gRkFMU0UpIHJl dHVybiBGQUxTRTsKKysgICAgKnBib29sID0gKHZpbnQgIT0gMCkgPyBUUlVFIDogRkFMU0U7Cisr ICAgIHJldHVybiBUUlVFOworKyAgfQorKworKyAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgeworKyAg Y2FzZSBCSU5OX0JPT0w6CisrICAgICpwYm9vbCA9IHZhbHVlLT52Ym9vbDsKKysgICAgYnJlYWs7 CisrICBjYXNlIEJJTk5fRkxPQVQ6CisrICAgICpwYm9vbCA9ICh2YWx1ZS0+dmZsb2F0ICE9IDAp ID8gVFJVRSA6IEZBTFNFOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9ET1VCTEU6CisrICAg ICpwYm9vbCA9ICh2YWx1ZS0+dmRvdWJsZSAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKKysgICAgYnJl YWs7CisrICBjYXNlIEJJTk5fU1RSSU5HOgorKyAgICByZXR1cm4gaXNfYm9vbF9zdHIoKGNoYXIq KXZhbHVlLT5wdHIsIHBib29sKTsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxTRTsKKysg IH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKysKKytjaGFyICogQVBJRU5UUlkgYmlubl9nZXRfc3RyKGJpbm4gKnZhbHVlKSB7Cisr ICBpbnQ2NCB2aW50OworKyAgY2hhciBidWZbMTI4XTsKKysKKysgIGlmICh2YWx1ZSA9PSBOVUxM KSByZXR1cm4gTlVMTDsKKysKKysgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklO Tl9GQU1JTFlfSU5UKSB7CisrICAgIGlmIChjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCAmdmlu dCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5UNjQpID09IEZBTFNFKSByZXR1cm4gTlVMTDsKKysgICAg c25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJSIgSU5UNjRfRk9STUFULCB2aW50KTsKKysgICAg Z290byBsb2NfY29udmVydF92YWx1ZTsKKysgIH0KKysKKysgIHN3aXRjaCAodmFsdWUtPnR5cGUp IHsKKysgIGNhc2UgQklOTl9GTE9BVDoKKysgICAgdmFsdWUtPnZkb3VibGUgPSB2YWx1ZS0+dmZs b2F0OworKyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKysgIGNhc2UgQklOTl9ET1VCTEU6CisrICAg IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVnIiwgdmFsdWUtPnZkb3VibGUpOworKyAgICBn b3RvIGxvY19jb252ZXJ0X3ZhbHVlOworKyAgY2FzZSBCSU5OX1NUUklORzoKKysgICAgcmV0dXJu IChjaGFyKikgdmFsdWUtPnB0cjsKKysgIGNhc2UgQklOTl9CT09MOgorKyAgICBpZiAodmFsdWUt PnZib29sKQorKyAgICAgIHN0cmNweShidWYsICJ0cnVlIik7CisrICAgIGVsc2UKKysgICAgICBz dHJjcHkoYnVmLCAiZmFsc2UiKTsKKysgICAgZ290byBsb2NfY29udmVydF92YWx1ZTsKKysgIH0K KysKKysgIHJldHVybiBOVUxMOworKworK2xvY19jb252ZXJ0X3ZhbHVlOgorKworKyAgLy92YWx1 ZS0+dmludDY0ID0gMDsKKysgIHZhbHVlLT5wdHIgPSBzdHJkdXAoYnVmKTsKKysgIGlmICh2YWx1 ZS0+cHRyID09IE5VTEwpIHJldHVybiBOVUxMOworKyAgdmFsdWUtPmZyZWVmbiA9IGZyZWU7Cisr ICB2YWx1ZS0+dHlwZSA9IEJJTk5fU1RSSU5HOworKyAgcmV0dXJuIChjaGFyKikgdmFsdWUtPnB0 cjsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBHRU5F UkFMIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrQk9PTCBBUElFTlRSWSBiaW5uX2lzX2NvbnRhaW5lcihiaW5uICppdGVtKSB7CisrCisrICBp ZiAoaXRlbSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICBzd2l0Y2ggKGl0ZW0tPnR5cGUp IHsKKysgIGNhc2UgQklOTl9MSVNUOgorKyAgY2FzZSBCSU5OX01BUDoKKysgIGNhc2UgQklOTl9P QkpFQ1Q6CisrICAgIHJldHVybiBUUlVFOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNF OworKyAgfQorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RpZmYg LU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2Jpbm4uaCBvcGVuc3NoLTEwLjVwMS9iaW5uLmgKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL2Jpbm4uaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL2Jpbm4uaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4 MDgxNDU4MyArMDIwMAorQEAgLTAsMCArMSw5NDUgQEAKKysKKysvLyBUTyBFTkFCTEUgSU5MSU5F IEZVTkNUSU9OUzoKKysvLyAgIE9OIE1TVkM6IGVuYWJsZSB0aGUgJ0lubGluZSBGdW5jdGlvbiBF eHBhbnNpb24nICgvT2IyKSBjb21waWxlciBvcHRpb24sIGFuZCBtYXliZSB0aGUKKysvLyAgICAg ICAgICAgICdXaG9sZSBQcm9ncmFtIE9wdGltaXRhemlvbicgKC9HTCksIHRoYXQgcmVxdWlyZXMg dGhlCisrLy8gICAgICAgICAgICAnTGluayBUaW1lIENvZGUgR2VuZXJhdGlvbicgKC9MVENHKSBs aW5rZXIgb3B0aW9uIHRvIGJlIGVuYWJsZWQgdG9vCisrCisrI2lmbmRlZiBCSU5OX0gKKysjZGVm aW5lIEJJTk5fSAorKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRp ZgorKworKyNkZWZpbmUgQklOTl9WRVJTSU9OICIzLjAuMCIgIC8qIHVzaW5nIHNlbWFudGljIHZl cnNpb25pbmcgKi8KKysKKysjaWZuZGVmIE5VTEwKKysjaWZkZWYgX19jcGx1c3BsdXMKKysjZGVm aW5lIE5VTEwgICAgMAorKyNlbHNlCisrI2RlZmluZSBOVUxMICAgICgodm9pZCAqKTApCisrI2Vu ZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBUUlVFCisrI2RlZmluZSBUUlVFICAxCisrI2VuZGlm CisrCisrI2lmbmRlZiBGQUxTRQorKyNkZWZpbmUgRkFMU0UgMAorKyNlbmRpZgorKworKyNpZm5k ZWYgQk9PTAorK3R5cGVkZWYgaW50IEJPT0w7CisrI2VuZGlmCisrCisrI2lmbmRlZiBBUElFTlRS WQorKyAjaWZkZWYgX1dJTjMyCisrICAjZGVmaW5lIEFQSUVOVFJZIF9fc3RkY2FsbAorKyAjZWxz ZQorKyAgLy8jZGVmaW5lIEFQSUVOVFJZIF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKQorKyAgI2Rl ZmluZSBBUElFTlRSWSAKKysgI2VuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBCSU5OX1BSSVZB VEUKKysgI2lmZGVmIERFQlVHCisrICAjZGVmaW5lIEJJTk5fUFJJVkFURQorKyAjZWxzZQorKyAg I2RlZmluZSBCSU5OX1BSSVZBVEUgIHN0YXRpYworKyAjZW5kaWYKKysjZW5kaWYKKysKKysjaWZk ZWYgX01TQ19WRVIKKysgICNkZWZpbmUgSU5MSU5FICAgICAgICAgX19pbmxpbmUKKysgICNkZWZp bmUgQUxXQVlTX0lOTElORSAgX19mb3JjZWlubGluZQorKyNlbHNlCisrICAvLyB5b3UgY2FuIGNo YW5nZSB0byAnZXh0ZXJuIGlubGluZScgaWYgdXNpbmcgdGhlIGdjYyBvcHRpb24gLWZsdG8KKysg ICNkZWZpbmUgSU5MSU5FICAgICAgICAgc3RhdGljIGlubGluZQorKyAgI2RlZmluZSBBTFdBWVNf SU5MSU5FICBzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorKyNl bmRpZgorKworKyNpZm5kZWYgaW50NjQKKysjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5l ZChfX0JPUkxBTkRDX18pCisrICB0eXBlZGVmIF9faW50NjQgaW50NjQ7CisrICB0eXBlZGVmIHVu c2lnbmVkIF9faW50NjQgdWludDY0OworKyNlbHNlCisrICB0eXBlZGVmIGxvbmcgbG9uZyBpbnQg aW50NjQ7CisrICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0OworKyNlbmRp ZgorKyNlbmRpZgorKworKyNpZmRlZiBfV0lOMzIKKysjZGVmaW5lIElOVDY0X0ZPUk1BVCAgIkk2 NGkiCisrI2RlZmluZSBVSU5UNjRfRk9STUFUICJJNjR1IgorKyNkZWZpbmUgSU5UNjRfSEVYX0ZP Uk1BVCAgIkk2NHgiCisrI2Vsc2UKKysjZGVmaW5lIElOVDY0X0ZPUk1BVCAgImxsaSIKKysjZGVm aW5lIFVJTlQ2NF9GT1JNQVQgImxsdSIKKysjZGVmaW5lIElOVDY0X0hFWF9GT1JNQVQgICJsbHgi CisrI2VuZGlmCisrCisrCisrLy8gQklOTiBDT05TVEFOVFMgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysjZGVmaW5lIElOVkFMSURfQklOTiAgICAgICAgIDAK KysKKysvLyBTdG9yYWdlIERhdGEgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorKworKyNkZWZpbmUgQklOTl9TVE9SQUdFX05PQllURVMgICAweDAwCisrI2RlZmlu ZSBCSU5OX1NUT1JBR0VfQllURSAgICAgIDB4MjAgIC8vICA4IGJpdHMKKysjZGVmaW5lIEJJTk5f U1RPUkFHRV9XT1JEICAgICAgMHg0MCAgLy8gMTYgYml0cyAtLSB0aGUgZW5kaWFuZXNzIChieXRl IG9yZGVyKSBpcyBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZAorKyNkZWZpbmUgQklOTl9TVE9SQUdF X0RXT1JEICAgICAweDYwICAvLyAzMiBiaXRzIC0tIHRoZSBlbmRpYW5lc3MgKGJ5dGUgb3JkZXIp IGlzIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkCisrI2RlZmluZSBCSU5OX1NUT1JBR0VfUVdPUkQg ICAgIDB4ODAgIC8vIDY0IGJpdHMgLS0gdGhlIGVuZGlhbmVzcyAoYnl0ZSBvcmRlcikgaXMgYXV0 b21hdGljYWxseSBjb3JyZWN0ZWQKKysjZGVmaW5lIEJJTk5fU1RPUkFHRV9TVFJJTkcgICAgMHhB MCAgLy8gQXJlIHN0b3JlZCB3aXRoIG51bGwgdGVybWluYXRpb24KKysjZGVmaW5lIEJJTk5fU1RP UkFHRV9CTE9CICAgICAgMHhDMAorKyNkZWZpbmUgQklOTl9TVE9SQUdFX0NPTlRBSU5FUiAweEUw CisrI2RlZmluZSBCSU5OX1NUT1JBR0VfVklSVFVBTCAgIDB4ODAwMDAKKysKKysjZGVmaW5lIEJJ Tk5fU1RPUkFHRV9NSU4gICAgICAgQklOTl9TVE9SQUdFX05PQllURVMKKysjZGVmaW5lIEJJTk5f U1RPUkFHRV9NQVggICAgICAgQklOTl9TVE9SQUdFX0NPTlRBSU5FUgorKworKyNkZWZpbmUgQklO Tl9TVE9SQUdFX01BU0sgICAgICAweEUwCisrI2RlZmluZSBCSU5OX1NUT1JBR0VfTUFTSzE2ICAg IDB4RTAwMAorKyNkZWZpbmUgQklOTl9TVE9SQUdFX0hBU19NT1JFICAweDEwCisrI2RlZmluZSBC SU5OX1RZUEVfTUFTSyAgICAgICAgIDB4MEYKKysjZGVmaW5lIEJJTk5fVFlQRV9NQVNLMTYgICAg ICAgMHgwRkZGCisrCisrI2RlZmluZSBCSU5OX01BWF9WQUxVRV9NQVNLICAgIDB4RkZGRkYKKysK KysKKysvLyBEYXRhIEZvcm1hdHMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorKworKyNkZWZpbmUgQklOTl9MSVNUICAgICAgMHhFMAorKyNkZWZpbmUgQklOTl9N QVAgICAgICAgMHhFMQorKyNkZWZpbmUgQklOTl9PQkpFQ1QgICAgMHhFMgorKworKyNkZWZpbmUg QklOTl9OVUxMICAgICAgMHgwMAorKyNkZWZpbmUgQklOTl9UUlVFICAgICAgMHgwMQorKyNkZWZp bmUgQklOTl9GQUxTRSAgICAgMHgwMgorKworKyNkZWZpbmUgQklOTl9VSU5UOCAgICAgMHgyMCAg Ly8gKEJZVEUpICh1bnNpZ25lZCBieXRlKSBJcyB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBC WVRFIHR5cGUKKysjZGVmaW5lIEJJTk5fSU5UOCAgICAgIDB4MjEgIC8vIChCWVRFKSAoc2lnbmVk IGJ5dGUsIGZyb20gLTEyOCB0byArMTI3LiBUaGUgMHg4MCBpcyB0aGUgc2lnbiBiaXQsIHNvIHRo ZSByYW5nZSBpbiBoZXggaXMgZnJvbSAweDgwIFstMTI4XSB0byAweDdGIFsxMjddLCBiZWluZyAw eDAwID0gMCBhbmQgMHhGRiA9IC0xKQorKyNkZWZpbmUgQklOTl9VSU5UMTYgICAgMHg0MCAgLy8g KFdPUkQpICh1bnNpZ25lZCBpbnRlZ2VyKSBJcyB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBX T1JEIHR5cGUKKysjZGVmaW5lIEJJTk5fSU5UMTYgICAgIDB4NDEgIC8vIChXT1JEKSAoc2lnbmVk IGludGVnZXIpCisrI2RlZmluZSBCSU5OX1VJTlQzMiAgICAweDYwICAvLyAoRFdPUkQpICh1bnNp Z25lZCBpbnRlZ2VyKSBJcyB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBEV09SRCB0eXBlCisr I2RlZmluZSBCSU5OX0lOVDMyICAgICAweDYxICAvLyAoRFdPUkQpIChzaWduZWQgaW50ZWdlcikK KysjZGVmaW5lIEJJTk5fVUlOVDY0ICAgIDB4ODAgIC8vIChRV09SRCkgKHVuc2lnbmVkIGludGVn ZXIpIElzIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgdGhlIFFXT1JEIHR5cGUKKysjZGVmaW5lIEJJ Tk5fSU5UNjQgICAgIDB4ODEgIC8vIChRV09SRCkgKHNpZ25lZCBpbnRlZ2VyKQorKworKyNkZWZp bmUgQklOTl9TQ0hBUiAgICAgQklOTl9JTlQ4CisrI2RlZmluZSBCSU5OX1VDSEFSICAgICBCSU5O X1VJTlQ4CisrCisrI2RlZmluZSBCSU5OX1NUUklORyAgICAweEEwICAvLyAoU1RSSU5HKSBSYXcg U3RyaW5nCisrI2RlZmluZSBCSU5OX0RBVEVUSU1FICAweEExICAvLyAoU1RSSU5HKSBpc284NjAx IGZvcm1hdCAtLSBZWVlZLU1NLUREIEhIOk1NOlNTCisrI2RlZmluZSBCSU5OX0RBVEUgICAgICAw eEEyICAvLyAoU1RSSU5HKSBpc284NjAxIGZvcm1hdCAtLSBZWVlZLU1NLURECisrI2RlZmluZSBC SU5OX1RJTUUgICAgICAweEEzICAvLyAoU1RSSU5HKSBpc284NjAxIGZvcm1hdCAtLSBISDpNTTpT UworKyNkZWZpbmUgQklOTl9ERUNJTUFMICAgMHhBNCAgLy8gKFNUUklORykgSGlnaCBwcmVjaXNp b24gbnVtYmVyIC0gdXNlZCBmb3IgZ2VuZXJpYyBkZWNpbWFsIHZhbHVlcyBhbmQgZm9yIHRob3Nl IG9uZXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGZsb2F0NjQgZm9ybWF0Lgor KyNkZWZpbmUgQklOTl9DVVJSRU5DWVNUUiAgMHhBNSAgLy8gKFNUUklORykgV2l0aCBjdXJyZW5j eSB1bml0L3N5bWJvbCAtIGNoZWNrIGZvciBzb21lIGlzbyBzdGFuZGFyZCBmb3JtYXQKKysjZGVm aW5lIEJJTk5fU0lOR0xFX1NUUiAgIDB4QTYgIC8vIChTVFJJTkcpIENhbiBiZSByZXN0b3JlZCB0 byBmbG9hdDMyCisrI2RlZmluZSBCSU5OX0RPVUJMRV9TVFIgICAweEE3ICAvLyAoU1RSSU5HKSBN YXkgYmUgcmVzdG9yZWQgdG8gZmxvYXQ2NAorKworKyNkZWZpbmUgQklOTl9GTE9BVDMyICAgMHg2 MiAgLy8gKERXT1JEKSAKKysjZGVmaW5lIEJJTk5fRkxPQVQ2NCAgIDB4ODIgIC8vIChRV09SRCkg CisrI2RlZmluZSBCSU5OX0ZMT0FUICAgICBCSU5OX0ZMT0FUMzIKKysjZGVmaW5lIEJJTk5fU0lO R0xFICAgIEJJTk5fRkxPQVQzMgorKyNkZWZpbmUgQklOTl9ET1VCTEUgICAgQklOTl9GTE9BVDY0 CisrCisrI2RlZmluZSBCSU5OX0NVUlJFTkNZICAweDgzICAvLyAoUVdPUkQpCisrCisrI2RlZmlu ZSBCSU5OX0JMT0IgICAgICAweEMwICAvLyAoQkxPQikgUmF3IEJsb2IKKysKKysKKysvLyB2aXJ0 dWFsIHR5cGVzOgorKworKyNkZWZpbmUgQklOTl9CT09MICAgICAgMHg4MDA2MSAgLy8gKERXT1JE KSBUaGUgdmFsdWUgbWF5IGJlIDAgb3IgMQorKworKyNpZmRlZiBCSU5OX0VYVEVOREVECisrLy8j ZGVmaW5lIEJJTk5fU0lOR0xFICAgIDB4ODAwQTEgIC8vIChTVFJJTkcpIENhbiBiZSByZXN0b3Jl ZCB0byBmbG9hdDMyCisrLy8jZGVmaW5lIEJJTk5fRE9VQkxFICAgIDB4ODAwQTIgIC8vIChTVFJJ TkcpIE1heSBiZSByZXN0b3JlZCB0byBmbG9hdDY0CisrI2VuZGlmCisrCisrLy8jZGVmaW5lIEJJ Tk5fQklOTiAgICAgIDB4ODAwRTEgIC8vIChDT05UQUlORVIpCisrLy8jZGVmaW5lIEJJTk5fQklO Tl9CVUZGRVIgIDB4ODAwQzEgIC8vIChCTE9CKSB1c2VyIGJpbm4uIGl0J3Mgbm90IG9wZW4gYnkg dGhlIHBhcnNlcgorKworKworKy8vIGV4dGVuZGVkIGNvbnRlbnQgdHlwZXM6CisrCisrLy8gc3Ry aW5nczoKKysKKysjZGVmaW5lIEJJTk5fSFRNTCAgICAgIDB4QjAwMQorKyNkZWZpbmUgQklOTl9Y TUwgICAgICAgMHhCMDAyCisrI2RlZmluZSBCSU5OX0pTT04gICAgICAweEIwMDMKKysjZGVmaW5l IEJJTk5fSkFWQVNDUklQVCAweEIwMDQKKysjZGVmaW5lIEJJTk5fQ1NTICAgICAgIDB4QjAwNQor KworKy8vIGJsb2JzOgorKworKyNkZWZpbmUgQklOTl9KUEVHICAgICAgMHhEMDAxCisrI2RlZmlu ZSBCSU5OX0dJRiAgICAgICAweEQwMDIKKysjZGVmaW5lIEJJTk5fUE5HICAgICAgIDB4RDAwMwor KyNkZWZpbmUgQklOTl9CTVAgICAgICAgMHhEMDA0CisrCisrCisrLy8gdHlwZSBmYW1pbGllcwor KyNkZWZpbmUgQklOTl9GQU1JTFlfTk9ORSAgIDB4MDAKKysjZGVmaW5lIEJJTk5fRkFNSUxZX05V TEwgICAweGYxCisrI2RlZmluZSBCSU5OX0ZBTUlMWV9JTlQgICAgMHhmMgorKyNkZWZpbmUgQklO Tl9GQU1JTFlfRkxPQVQgIDB4ZjMKKysjZGVmaW5lIEJJTk5fRkFNSUxZX1NUUklORyAweGY0Cisr I2RlZmluZSBCSU5OX0ZBTUlMWV9CTE9CICAgMHhmNQorKyNkZWZpbmUgQklOTl9GQU1JTFlfQk9P TCAgIDB4ZjYKKysjZGVmaW5lIEJJTk5fRkFNSUxZX0JJTk4gICAweGY3CisrCisrLy8gaW50ZWdl ciB0eXBlcyByZWxhdGVkIHRvIHNpZ25hbAorKyNkZWZpbmUgQklOTl9TSUdORURfSU5UICAgICAx MQorKyNkZWZpbmUgQklOTl9VTlNJR05FRF9JTlQgICAyMgorKworKworK3R5cGVkZWYgdm9pZCAo KmJpbm5fbWVtX2ZyZWUpKHZvaWQqKTsKKysjZGVmaW5lIEJJTk5fU1RBVElDICAgICAgKChiaW5u X21lbV9mcmVlKTApCisrI2RlZmluZSBCSU5OX1RSQU5TSUVOVCAgICgoYmlubl9tZW1fZnJlZSkt MSkKKysKKysKKysvLyAtLS0gQklOTiBTVFJVQ1RVUkUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysKKytzdHJ1Y3QgYmlu bl9zdHJ1Y3QgeworKyAgaW50ICAgIGhlYWRlcjsgICAgIC8vIHRoaXMgc3RydWN0IGhlYWRlciBo b2xkcyB0aGUgbWFnaWMgbnVtYmVyIChCSU5OX01BR0lDKSB0aGF0IGlkZW50aWZpZXMgdGhpcyBt ZW1vcnkgYmxvY2sgYXMgYSBiaW5uIHN0cnVjdHVyZQorKyAgQk9PTCAgIGFsbG9jYXRlZDsgIC8v IHRoZSBzdHJ1Y3QgY2FuIGJlIGFsbG9jYXRlZCB1c2luZyBtYWxsb2NfZm4oKSBvciBjYW4gYmUg b24gdGhlIHN0YWNrCisrICBCT09MICAgd3JpdGFibGU7ICAgLy8gZGlkIGl0IHdhcyBjcmVhdGUg Zm9yIHdyaXRpbmc/IGl0IGNhbiB1c2UgdGhlIHBidWYgaWYgbm90IHVuaWZpZWQgd2l0aCBwdHIK KysgIEJPT0wgICBkaXJ0eTsgICAgICAvLyB0aGUgY29udGFpbmVyIGhlYWRlciBpcyBub3Qgd3Jp dHRlbiB0byB0aGUgYnVmZmVyCisrICAvLworKyAgdm9pZCAgKnBidWY7ICAgICAgIC8vIHVzZSAq cHRyIGJlbG93PworKyAgQk9PTCAgIHByZV9hbGxvY2F0ZWQ7CisrICBpbnQgICAgYWxsb2Nfc2l6 ZTsKKysgIGludCAgICB1c2VkX3NpemU7CisrICAvLworKyAgaW50ICAgIHR5cGU7CisrICB2b2lk ICAqcHRyOworKyAgaW50ICAgIHNpemU7CisrICBpbnQgICAgY291bnQ7CisrICAvLworKyAgYmlu bl9tZW1fZnJlZSBmcmVlZm47ICAvLyB1c2VkIG9ubHkgd2hlbiB0eXBlID09IEJJTk5fU1RSSU5H IG9yIEJJTk5fQkxPQgorKyAgLy8KKysgIHVuaW9uIHsKKysgICAgc2lnbmVkIGNoYXIgICAgdmlu dDg7CisrICAgIHNpZ25lZCBzaG9ydCAgIHZpbnQxNjsKKysgICAgc2lnbmVkIGludCAgICAgdmlu dDMyOworKyAgICBpbnQ2NCAgICAgICAgICB2aW50NjQ7CisrICAgIHVuc2lnbmVkIGNoYXIgIHZ1 aW50ODsKKysgICAgdW5zaWduZWQgc2hvcnQgdnVpbnQxNjsKKysgICAgdW5zaWduZWQgaW50ICAg dnVpbnQzMjsKKysgICAgdWludDY0ICAgICAgICAgdnVpbnQ2NDsKKysgICAgLy8KKysgICAgc2ln bmVkIGNoYXIgICAgdmNoYXI7CisrICAgIHVuc2lnbmVkIGNoYXIgIHZ1Y2hhcjsKKysgICAgc2ln bmVkIHNob3J0ICAgdnNob3J0OworKyAgICB1bnNpZ25lZCBzaG9ydCB2dXNob3J0OworKyAgICBz aWduZWQgaW50ICAgICB2aW50OworKyAgICB1bnNpZ25lZCBpbnQgICB2dWludDsKKysgICAgLy8K KysgICAgZmxvYXQgICAgICAgICAgdmZsb2F0OworKyAgICBkb3VibGUgICAgICAgICB2ZG91Ymxl OworKyAgICAvLworKyAgICBCT09MICAgICAgICAgICB2Ym9vbDsKKysgIH07CisrICAvLworKyAg Qk9PTCAgIGRpc2FibGVfaW50X2NvbXByZXNzaW9uOworK307CisrCisrdHlwZWRlZiBzdHJ1Y3Qg Ymlubl9zdHJ1Y3QgYmlubjsKKysKKysKKysKKysvLyAtLS0gR0VORVJBTCBGVU5DVElPTlMgIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KysKKytjaGFyICogQVBJRU5UUlkgYmlubl92ZXJzaW9uKCk7CisrCisrdm9pZCAgIEFQSUVOVFJZ IGJpbm5fc2V0X2FsbG9jX2Z1bmN0aW9ucyh2b2lkKiAoKm5ld19tYWxsb2MpKHNpemVfdCksIHZv aWQqICgqbmV3X3JlYWxsb2MpKHZvaWQqLHNpemVfdCksIHZvaWQgKCpuZXdfZnJlZSkodm9pZCop KTsKKysKKytpbnQgICAgQVBJRU5UUlkgYmlubl9jcmVhdGVfdHlwZShpbnQgc3RvcmFnZV90eXBl LCBpbnQgZGF0YV90eXBlX2luZGV4KTsKKytCT09MICAgQVBJRU5UUlkgYmlubl9nZXRfdHlwZV9p bmZvKGludCBsb25nX3R5cGUsIGludCAqcHN0b3JhZ2VfdHlwZSwgaW50ICpwZXh0cmFfdHlwZSk7 CisrCisraW50ICAgIEFQSUVOVFJZIGJpbm5fZ2V0X3dyaXRlX3N0b3JhZ2UoaW50IHR5cGUpOwor K2ludCAgICBBUElFTlRSWSBiaW5uX2dldF9yZWFkX3N0b3JhZ2UoaW50IHR5cGUpOworKworK0JP T0wgICBBUElFTlRSWSBiaW5uX2lzX2NvbnRhaW5lcihiaW5uICppdGVtKTsKKysKKysKKysvLyAt LS0gV1JJVEUgRlVOQ1RJT05TICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysvLyBjcmVhdGUgYSBuZXcgYmlubiBhbGxvY2F0 aW5nIG1lbW9yeSBmb3IgdGhlIHN0cnVjdHVyZQorK2Jpbm4gKiBBUElFTlRSWSBiaW5uX25ldyhp bnQgdHlwZSwgaW50IHNpemUsIHZvaWQgKmJ1ZmZlcik7CisrYmlubiAqIEFQSUVOVFJZIGJpbm5f bGlzdCgpOworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcCgpOworK2Jpbm4gKiBBUElFTlRSWSBi aW5uX29iamVjdCgpOworKworKy8vIGNyZWF0ZSBhIG5ldyBiaW5uIHN0b3JpbmcgdGhlIHN0cnVj dHVyZSBvbiB0aGUgc3RhY2sKKytCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlKGJpbm4gKml0ZW0s IGludCB0eXBlLCBpbnQgc2l6ZSwgdm9pZCAqYnVmZmVyKTsKKytCT09MIEFQSUVOVFJZIGJpbm5f Y3JlYXRlX2xpc3QoYmlubiAqbGlzdCk7CisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9tYXAo YmlubiAqbWFwKTsKKytCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlX29iamVjdChiaW5uICpvYmpl Y3QpOworKworKy8vIGNyZWF0ZSBhIG5ldyBiaW5uIGFzIGEgY29weSBmcm9tIGFub3RoZXIKKyti aW5uICogQVBJRU5UUlkgYmlubl9jb3B5KGNvbnN0IHZvaWQgKm9sZCk7CisrCisrCisrQk9PTCBB UElFTlRSWSBiaW5uX2xpc3RfYWRkX25ldyhiaW5uICpsaXN0LCBiaW5uICp2YWx1ZSk7CisrQk9P TCBBUElFTlRSWSBiaW5uX21hcF9zZXRfbmV3KGJpbm4gKm1hcCwgaW50IGlkLCBiaW5uICp2YWx1 ZSk7CisrQk9PTCBBUElFTlRSWSBiaW5uX29iamVjdF9zZXRfbmV3KGJpbm4gKm9iaiwgY29uc3Qg Y2hhciAqa2V5LCBiaW5uICp2YWx1ZSk7CisrCisrCisrLy8gZXh0ZW5kZWQgaW50ZXJmYWNlCisr CisrQk9PTCAgIEFQSUVOVFJZIGJpbm5fbGlzdF9hZGQoYmlubiAqbGlzdCwgaW50IHR5cGUsIHZv aWQgKnB2YWx1ZSwgaW50IHNpemUpOworK0JPT0wgICBBUElFTlRSWSBiaW5uX21hcF9zZXQoYmlu biAqbWFwLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKTsKKytCT09M ICAgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBp bnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSk7CisrCisrCisrLy8gcmVsZWFzZSBtZW1v cnkKKysKKyt2b2lkICAgQVBJRU5UUlkgYmlubl9mcmVlKGJpbm4gKml0ZW0pOworK3ZvaWQgKiBB UElFTlRSWSBiaW5uX3JlbGVhc2UoYmlubiAqaXRlbSk7IC8vIGZyZWUgdGhlIGJpbm4gc3RydWN0 dXJlIGJ1dCBrZWVwcyB0aGUgYmlubiBidWZmZXIgYWxsb2NhdGVkLCByZXR1cm5pbmcgYSBwb2lu dGVyIHRvIGl0LiB1c2UgdGhlIGZyZWUgZnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUgYnVmZmVyIGxh dGVyCisrCisrCisrLy8gLS0tIENSRUFUSU5HIFZBTFVFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl92 YWx1ZShpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSwgYmlubl9tZW1fZnJlZSBmcmVl Zm4pOworKworK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5faW50OChzaWduZWQgY2hhciB2YWx1 ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9JTlQ4LCAmdmFsdWUsIDAsIE5VTEwpOwor K30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2ludDE2KHNob3J0IHZhbHVlKSB7CisrICBy ZXR1cm4gYmlubl92YWx1ZShCSU5OX0lOVDE2LCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdB WVNfSU5MSU5FIGJpbm4gKiBiaW5uX2ludDMyKGludCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f dmFsdWUoQklOTl9JTlQzMiwgJnZhbHVlLCAwLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBi aW5uICogYmlubl9pbnQ2NChpbnQ2NCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklO Tl9JTlQ2NCwgJnZhbHVlLCAwLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBiaW5uICogYmlu bl91aW50OCh1bnNpZ25lZCBjaGFyIHZhbHVlKSB7CisrICByZXR1cm4gYmlubl92YWx1ZShCSU5O X1VJTlQ4LCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5u X3VpbnQxNih1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklO Tl9VSU5UMTYsICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJp bm5fdWludDMyKHVuc2lnbmVkIGludCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklO Tl9VSU5UMzIsICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJp bm5fdWludDY0KHVpbnQ2NCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9VSU5U NjQsICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5fZmxv YXQoZmxvYXQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fRkxPQVQsICZ2YWx1 ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5fZG91YmxlKGRvdWJs ZSB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9ET1VCTEUsICZ2YWx1ZSwgMCwg TlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5fYm9vbChCT09MIHZhbHVlKSB7 CisrICByZXR1cm4gYmlubl92YWx1ZShCSU5OX0JPT0wsICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQor K0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5fbnVsbCgpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVl KEJJTk5fTlVMTCwgTlVMTCwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgYmlubiAqIGJp bm5fc3RyaW5nKGNoYXIgKnN0ciwgYmlubl9tZW1fZnJlZSBmcmVlZm4pIHsKKysgIHJldHVybiBi aW5uX3ZhbHVlKEJJTk5fU1RSSU5HLCBzdHIsIDAsIGZyZWVmbik7CisrfQorK0FMV0FZU19JTkxJ TkUgYmlubiAqIGJpbm5fYmxvYih2b2lkICpwdHIsIGludCBzaXplLCBiaW5uX21lbV9mcmVlIGZy ZWVmbikgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9CTE9CLCBwdHIsIHNpemUsIGZyZWVm bik7CisrfQorKworKworKy8vIC0tLSBSRUFEIEZVTkNUSU9OUyAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKy8vIHRoZXNl IGZ1bmN0aW9ucyBhY2NlcHQgcG9pbnRlciB0byB0aGUgYmlubiBzdHJ1Y3R1cmUgYW5kIHBvaW50 ZXIgdG8gdGhlIGJpbm4gYnVmZmVyCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fcHRyKGNvbnN0IHZv aWQgKnB0cik7CisraW50ICAgIEFQSUVOVFJZIGJpbm5fc2l6ZShjb25zdCB2b2lkICpwdHIpOwor K2ludCAgICBBUElFTlRSWSBiaW5uX3R5cGUoY29uc3Qgdm9pZCAqcHRyKTsKKytpbnQgICAgQVBJ RU5UUlkgYmlubl9jb3VudChjb25zdCB2b2lkICpwdHIpOworKworK0JPT0wgICBBUElFTlRSWSBi aW5uX2lzX3ZhbGlkKGNvbnN0IHZvaWQgKnB0ciwgaW50ICpwdHlwZSwgaW50ICpwY291bnQsIGlu dCAqcHNpemUpOworKy8qIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZXMgKHR5cGUsIGNv dW50IGFuZCBzaXplKSBhbmQgdGhleSBkb24ndCBuZWVkIHRvIGJlCisrICAgaW5pdGlhbGl6ZWQu IHRoZXNlIHZhbHVlcyBhcmUgcmVhZCBmcm9tIHRoZSBidWZmZXIuIGV4YW1wbGU6CisrCisrICAg aW50IHR5cGUsIGNvdW50LCBzaXplOworKyAgIHJlc3VsdCA9IGJpbm5faXNfdmFsaWQocHRyLCAm dHlwZSwgJmNvdW50LCAmc2l6ZSk7CisrKi8KKytCT09MICAgQVBJRU5UUlkgYmlubl9pc192YWxp ZF9leChjb25zdCB2b2lkICpwdHIsIGludCAqcHR5cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXpl KTsKKysvKiBpZiBzb21lIHZhbHVlIGlzIGluZm9ybWVkICh0eXBlLCBjb3VudCBvciBzaXplKSB0 aGVuIHRoZSBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIAorKyAgIHRoZSB2YWx1ZSByZXR1cm5lZCBm cm9tIHRoZSBzZXJpYWxpemVkIGRhdGEgbWF0Y2hlcyB0aGUgaW5mb3JtZWQgdmFsdWUuIG90aGVy d2lzZQorKyAgIHRoZSB2YWx1ZXMgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBleGFtcGxl OgorKworKyAgIGludCB0eXBlPTAsIGNvdW50PTAsIHNpemUgPSBrbm93bl9zaXplOworKyAgIHJl c3VsdCA9IGJpbm5faXNfdmFsaWRfZXgocHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6ZSk7CisrKi8K KysKKytCT09MICAgQVBJRU5UUlkgYmlubl9pc19zdHJ1Y3QoY29uc3Qgdm9pZCAqcHRyKTsKKysK KysKKysvLyBMb2FkaW5nIGEgYmlubiBidWZmZXIgaW50byBhIGJpbm4gdmFsdWUgLSB0aGlzIGlz IG9wdGlvbmFsCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fb3Blbihjb25zdCB2b2lkICpkYXRh KTsgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZCAtIHVuc2VjdXJlCisrYmlubiAqIEFQSUVOVFJZ IGJpbm5fb3Blbl9leChjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7IC8vIGFsbG9jYXRlZCAt IHNlY3VyZQorK0JPT0wgICBBUElFTlRSWSBiaW5uX2xvYWQoY29uc3Qgdm9pZCAqZGF0YSwgYmlu biAqaXRlbSk7ICAvLyBvbiBzdGFjayAtIHVuc2VjdXJlCisrQk9PTCAgIEFQSUVOVFJZIGJpbm5f bG9hZF9leChjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSwgYmlubiAqdmFsdWUpOyAvLyBzZWN1 cmUKKysKKysKKysvLyBlYXNpZXN0IGludGVyZmFjZSB0byB1c2UsIGJ1dCBkb24ndCBjaGVjayBp ZiB0aGUgdmFsdWUgaXMgdGhlcmUKKysKKytzaWduZWQgY2hhciAgICBBUElFTlRSWSBiaW5uX2xp c3RfaW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKKytzaG9ydCAgICAgICAgICBBUElF TlRSWSBiaW5uX2xpc3RfaW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7CisraW50ICAg ICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2ludDMyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MpOworK2ludDY0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQ2NChjb25zdCB2b2lk ICpsaXN0LCBpbnQgcG9zKTsKKyt1bnNpZ25lZCBjaGFyICBBUElFTlRSWSBiaW5uX2xpc3RfdWlu dDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7CisrdW5zaWduZWQgc2hvcnQgQVBJRU5UUlkg Ymlubl9saXN0X3VpbnQxNihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKKyt1bnNpZ25lZCBp bnQgICBBUElFTlRSWSBiaW5uX2xpc3RfdWludDMyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3Mp OworK3VpbnQ2NCAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF91aW50NjQoY29uc3Qgdm9pZCAq bGlzdCwgaW50IHBvcyk7CisrZmxvYXQgICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2Zsb2F0 KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworK2RvdWJsZSAgICAgICAgIEFQSUVOVFJZIGJp bm5fbGlzdF9kb3VibGUoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7CisrQk9PTCAgICAgICAg ICAgQVBJRU5UUlkgYmlubl9saXN0X2Jvb2woY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Cisr Qk9PTCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X251bGwoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcyk7CisrY2hhciAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X3N0cihjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zKTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3Rf YmxvYihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgKnBzaXplKTsKKyt2b2lkICogICAg ICAgICBBUElFTlRSWSBiaW5uX2xpc3RfbGlzdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsK Kyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfbWFwKGNvbnN0IHZvaWQgKmxpc3Qs IGludCBwb3MpOworK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9vYmplY3QoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7CisrCisrc2lnbmVkIGNoYXIgICAgQVBJRU5UUlkgYmlu bl9tYXBfaW50OChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Cisrc2hvcnQgICAgICAgICAgQVBJ RU5UUlkgYmlubl9tYXBfaW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK2ludCAgICAg ICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2ludDMyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsK KytpbnQ2NCAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9pbnQ2NChjb25zdCB2b2lkICptYXAs IGludCBpZCk7CisrdW5zaWduZWQgY2hhciAgQVBJRU5UUlkgYmlubl9tYXBfdWludDgoY29uc3Qg dm9pZCAqbWFwLCBpbnQgaWQpOworK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbWFwX3Vp bnQxNihjb25zdCB2b2lkICptYXAsIGludCBpZCk7CisrdW5zaWduZWQgaW50ICAgQVBJRU5UUlkg Ymlubl9tYXBfdWludDMyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKyt1aW50NjQgICAgICAg ICBBUElFTlRSWSBiaW5uX21hcF91aW50NjQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK2Zs b2F0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2Zsb2F0KGNvbnN0IHZvaWQgKm1hcCwgaW50 IGlkKTsKKytkb3VibGUgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9kb3VibGUoY29uc3Qgdm9p ZCAqbWFwLCBpbnQgaWQpOworK0JPT0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2Jvb2wo Y29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK0JPT0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5f bWFwX251bGwoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK2NoYXIgKiAgICAgICAgIEFQSUVO VFJZIGJpbm5fbWFwX3N0cihjb25zdCB2b2lkICptYXAsIGludCBpZCk7Cisrdm9pZCAqICAgICAg ICAgQVBJRU5UUlkgYmlubl9tYXBfYmxvYihjb25zdCB2b2lkICptYXAsIGludCBpZCwgaW50ICpw c2l6ZSk7Cisrdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfbGlzdChjb25zdCB2b2lk ICptYXAsIGludCBpZCk7Cisrdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfbWFwKGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX21h cF9vYmplY3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworKworK3NpZ25lZCBjaGFyICAgIEFQ SUVOVFJZIGJpbm5fb2JqZWN0X2ludDgoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkp OworK3Nob3J0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDE2KGNvbnN0IHZvaWQg Km9iaiwgY29uc3QgY2hhciAqa2V5KTsKKytpbnQgICAgICAgICAgICBBUElFTlRSWSBiaW5uX29i amVjdF9pbnQzMihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisraW50NjQgICAg ICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfaW50NjQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBj aGFyICprZXkpOworK3Vuc2lnbmVkIGNoYXIgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3VpbnQ4KGNv bnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKyt1bnNpZ25lZCBzaG9ydCBBUElFTlRS WSBiaW5uX29iamVjdF91aW50MTYoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwor K3Vuc2lnbmVkIGludCAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3VpbnQzMihjb25zdCB2b2lkICpv YmosIGNvbnN0IGNoYXIgKmtleSk7CisrdWludDY0ICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmpl Y3RfdWludDY0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKytmbG9hdCAgICAg ICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9mbG9hdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSk7CisrZG91YmxlICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfZG91YmxlKGNv bnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKytCT09MICAgICAgICAgICBBUElFTlRS WSBiaW5uX29iamVjdF9ib29sKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKytC T09MICAgICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9udWxsKGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5KTsKKytjaGFyICogICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9z dHIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOworK3ZvaWQgKiAgICAgICAgIEFQ SUVOVFJZIGJpbm5fb2JqZWN0X2Jsb2IoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXks IGludCAqcHNpemUpOworK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2xpc3Qo Y29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOworK3ZvaWQgKiAgICAgICAgIEFQSUVO VFJZIGJpbm5fb2JqZWN0X21hcChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Cisr dm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3Rfb2JqZWN0KGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KTsKKysKKysKKysvLyByZXR1cm4gYSBwb2ludGVyIHRvIGFuIGFs bG9jYXRlZCBiaW5uIHN0cnVjdHVyZSAtIG11c3QgYmUgcmVsZWFzZWQgd2l0aCB0aGUgZnJlZSgp IGZ1bmN0aW9uIG9yIGVxdWl2YWxlbnQgc2V0IGluIGJpbm5fc2V0X2FsbG9jX2Z1bmN0aW9ucygp CisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbGlzdF92YWx1ZShjb25zdCB2b2lkICpsaXN0LCBpbnQg cG9zKTsKKytiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfdmFsdWUoY29uc3Qgdm9pZCAqbWFwLCBp bnQgaWQpOworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF92YWx1ZShjb25zdCB2b2lkICpv YmosIGNvbnN0IGNoYXIgKmtleSk7CisrCisrLy8gcmVhZCB0aGUgdmFsdWUgdG8gYSBiaW5uIHN0 cnVjdHVyZSBvbiB0aGUgc3RhY2sKKytCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9nZXRfdmFsdWUo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgYmlubiAqdmFsdWUpOworK0JPT0wgQVBJRU5UUlkg Ymlubl9tYXBfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBiaW5uICp2YWx1ZSk7 CisrQk9PTCBBUElFTlRSWSBiaW5uX29iamVjdF9nZXRfdmFsdWUoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXksIGJpbm4gKnZhbHVlKTsKKysKKysvLyBzaW5nbGUgaW50ZXJmYWNlIC0g dGhlc2UgZnVuY3Rpb25zIGNoZWNrIHRoZSBkYXRhIHR5cGUKKytCT09MIEFQSUVOVFJZIGJpbm5f bGlzdF9nZXQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50IHR5cGUsIHZvaWQgKnB2YWx1 ZSwgaW50ICpwc2l6ZSk7CisrQk9PTCBBUElFTlRSWSBiaW5uX21hcF9nZXQoY29uc3Qgdm9pZCAq bWFwLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCAqcHNpemUpOworK0JPT0wg QVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKTsKKysKKysvLyB0aGVzZSAzIGZ1 bmN0aW9ucyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBhbmQgdGhlIGRhdGEgdHlwZQor Ky8vIHRoZXkgYXJlIHRocmVhZC1zYWZlIG9uIGJpZy1lbmRpYW4gZGV2aWNlcworKy8vIG9uIGxp dHRsZS1lbmRpYW4gZGV2aWNlcyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbmx5IHRvIHJldHVybiBw b2ludGVycyB0byBsaXN0LCBtYXAsIG9iamVjdCwgYmxvYiBhbmQgc3RyaW5ncworKy8vIHRoZSBy ZXR1cm5lZCBwb2ludGVyIHRvIDE2LCAzMiBhbmQgNjQgYml0cyB2YWx1ZXMgbXVzdCBiZSB1c2Vk IG9ubHkgYnkgc2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9ucworK3ZvaWQgKiBBUElFTlRSWSBi aW5uX2xpc3RfcmVhZChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgKnB0eXBlLCBpbnQg KnBzaXplKTsKKyt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZChjb25zdCB2b2lkICptYXAs IGludCBpZCwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSk7Cisrdm9pZCAqIEFQSUVOVFJZIGJpbm5f b2JqZWN0X3JlYWQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGludCAqcHR5cGUs IGludCAqcHNpemUpOworKworKworKy8vIFJFQUQgUEFJUiBGVU5DVElPTlMKKysKKysvLyB0aGVz ZSBmdW5jdGlvbnMgdXNlIGJhc2UgMSBpbiB0aGUgJ3BvcycgYXJndW1lbnQKKysKKysvLyBvbiBz dGFjaworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0X3BhaXIoY29uc3Qgdm9pZCAqbWFwLCBp bnQgcG9zLCBpbnQgKnBpZCwgYmlubiAqdmFsdWUpOworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmpl Y3RfZ2V0X3BhaXIoY29uc3Qgdm9pZCAqb2JqLCBpbnQgcG9zLCBjaGFyICpwa2V5LCBiaW5uICp2 YWx1ZSk7ICAvLyB0aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07Cisr CisrLy8gYWxsb2NhdGVkCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3BhaXIoY29uc3Qgdm9p ZCAqbWFwLCBpbnQgcG9zLCBpbnQgKnBpZCk7CisrYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0 X3BhaXIoY29uc3Qgdm9pZCAqb2JqLCBpbnQgcG9zLCBjaGFyICpwa2V5KTsgIC8vIHRoZSBrZXkg bXVzdCBiZSBkZWNsYXJlZCBhczogY2hhciBrZXlbMjU2XTsKKysKKysvLyB0aGVzZSAyIGZ1bmN0 aW9ucyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBhbmQgdGhlIGRhdGEgdHlwZQorKy8v IHRoZXkgYXJlIHRocmVhZC1zYWZlIG9uIGJpZy1lbmRpYW4gZGV2aWNlcworKy8vIG9uIGxpdHRs ZS1lbmRpYW4gZGV2aWNlcyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbmx5IHRvIHJldHVybiBwb2lu dGVycyB0byBsaXN0LCBtYXAsIG9iamVjdCwgYmxvYiBhbmQgc3RyaW5ncworKy8vIHRoZSByZXR1 cm5lZCBwb2ludGVyIHRvIDE2LCAzMiBhbmQgNjQgYml0cyB2YWx1ZXMgbXVzdCBiZSB1c2VkIG9u bHkgYnkgc2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9ucworK3ZvaWQgKiBBUElFTlRSWSBiaW5u X21hcF9yZWFkX3BhaXIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zLCBpbnQgKnBpZCwgaW50ICpw dHlwZSwgaW50ICpwc2l6ZSk7Cisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3JlYWRfcGFp cihjb25zdCB2b2lkICpwdHIsIGludCBwb3MsIGNoYXIgKnBrZXksIGludCAqcHR5cGUsIGludCAq cHNpemUpOworKworKworKy8vIFNFUVVFTlRJQUwgUkVBRCBGVU5DVElPTlMKKysKKyt0eXBlZGVm IHN0cnVjdCBiaW5uX2l0ZXJfc3RydWN0IHsKKysgICAgdW5zaWduZWQgY2hhciAqcG5leHQ7Cisr ICAgIHVuc2lnbmVkIGNoYXIgKnBsaW1pdDsKKysgICAgaW50ICAgdHlwZTsKKysgICAgaW50ICAg Y291bnQ7CisrICAgIGludCAgIGN1cnJlbnQ7CisrfSBiaW5uX2l0ZXI7CisrCisrQk9PTCAgIEFQ SUVOVFJZIGJpbm5faXRlcl9pbml0KGJpbm5faXRlciAqaXRlciwgY29uc3Qgdm9pZCAqcGJ1Ziwg aW50IHR5cGUpOworKworKy8vIGFsbG9jYXRlZAorK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3Rf bmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIpOworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF9u ZXh0X3ZhbHVlKGJpbm5faXRlciAqaXRlciwgaW50ICpwaWQpOworK2Jpbm4gKiBBUElFTlRSWSBi aW5uX29iamVjdF9uZXh0X3ZhbHVlKGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSk7ICAvLyB0 aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07CisrCisrLy8gb24gc3Rh Y2sKKytCT09MICAgQVBJRU5UUlkgYmlubl9saXN0X25leHQoYmlubl9pdGVyICppdGVyLCBiaW5u ICp2YWx1ZSk7CisrQk9PTCAgIEFQSUVOVFJZIGJpbm5fbWFwX25leHQoYmlubl9pdGVyICppdGVy LCBpbnQgKnBpZCwgYmlubiAqdmFsdWUpOworK0JPT0wgICBBUElFTlRSWSBiaW5uX29iamVjdF9u ZXh0KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSwgYmlubiAqdmFsdWUpOyAgLy8gdGhlIGtl eSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsyNTZdOworKworKy8vIHRoZXNlIDMgZnVu Y3Rpb25zIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGFuZCB0aGUgZGF0YSB0eXBlCisr Ly8gdGhleSBhcmUgdGhyZWFkLXNhZmUgb24gYmlnLWVuZGlhbiBkZXZpY2VzCisrLy8gb24gbGl0 dGxlLWVuZGlhbiBkZXZpY2VzIHRoZXkgYXJlIHRocmVhZC1zYWZlIG9ubHkgdG8gcmV0dXJuIHBv aW50ZXJzIHRvIGxpc3QsIG1hcCwgb2JqZWN0LCBibG9iIGFuZCBzdHJpbmdzCisrLy8gdGhlIHJl dHVybmVkIHBvaW50ZXIgdG8gMTYsIDMyIGFuZCA2NCBiaXRzIHZhbHVlcyBtdXN0IGJlIHVzZWQg b25seSBieSBzaW5nbGUtdGhyZWFkZWQgYXBwbGljYXRpb25zCisrdm9pZCAqIEFQSUVOVFJZIGJp bm5fbGlzdF9yZWFkX25leHQoYmlubl9pdGVyICppdGVyLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXpl KTsKKyt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwg aW50ICpwaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpOworK3ZvaWQgKiBBUElFTlRSWSBiaW5u X29iamVjdF9yZWFkX25leHQoYmlubl9pdGVyICppdGVyLCBjaGFyICpwa2V5LCBpbnQgKnB0eXBl LCBpbnQgKnBzaXplKTsgIC8vIHRoZSBrZXkgbXVzdCBiZSBkZWNsYXJlZCBhczogY2hhciBrZXlb MjU2XTsKKysKKysKKysvLyAtLS0gTUFDUk9TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKworKyNkZWZpbmUgYmlubl9pc193 cml0YWJsZShpdGVtKSAoaXRlbSktPndyaXRhYmxlOworKworKworKy8vIHNldCB2YWx1ZXMgb24g c3RhY2sgYWxsb2NhdGVkIGJpbm4gc3RydWN0dXJlcworKworKyNkZWZpbmUgYmlubl9zZXRfbnVs bChpdGVtKSAgICAgICAgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9OVUxMOyB9IHdoaWxlICgw KQorKworKyNkZWZpbmUgYmlubl9zZXRfYm9vbChpdGVtLHZhbHVlKSAgIGRvIHsgKGl0ZW0pLT50 eXBlID0gQklOTl9CT09MOyAoaXRlbSktPnZib29sID0gdmFsdWU7IChpdGVtKS0+cHRyID0gJigo aXRlbSktPnZib29sKTsgfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIGJpbm5fc2V0X2ludChpdGVt LHZhbHVlKSAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fSU5UMzI7IChpdGVtKS0+dmludDMy ID0gdmFsdWU7IChpdGVtKS0+cHRyID0gJigoaXRlbSktPnZpbnQzMik7IH0gd2hpbGUgKDApCisr I2RlZmluZSBiaW5uX3NldF9pbnQ2NChpdGVtLHZhbHVlKSAgZG8geyAoaXRlbSktPnR5cGUgPSBC SU5OX0lOVDY0OyAoaXRlbSktPnZpbnQ2NCA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0p LT52aW50NjQpOyB9IHdoaWxlICgwKQorKworKyNkZWZpbmUgYmlubl9zZXRfdWludChpdGVtLHZh bHVlKSAgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9VSU5UMzI7IChpdGVtKS0+dnVpbnQzMiA9 IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52dWludDMyKTsgfSB3aGlsZSAoMCkKKysj ZGVmaW5lIGJpbm5fc2V0X3VpbnQ2NChpdGVtLHZhbHVlKSBkbyB7IChpdGVtKS0+dHlwZSA9IEJJ Tk5fVUlOVDY0OyAoaXRlbSktPnZ1aW50NjQgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVt KS0+dnVpbnQ2NCk7IH0gd2hpbGUgKDApCisrCisrI2RlZmluZSBiaW5uX3NldF9mbG9hdChpdGVt LHZhbHVlKSAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX0ZMT0FUOyAgKGl0ZW0pLT52ZmxvYXQg ID0gdmFsdWU7IChpdGVtKS0+cHRyID0gJigoaXRlbSktPnZmbG9hdCk7IH0gd2hpbGUgKDApCisr I2RlZmluZSBiaW5uX3NldF9kb3VibGUoaXRlbSx2YWx1ZSkgZG8geyAoaXRlbSktPnR5cGUgPSBC SU5OX0RPVUJMRTsgKGl0ZW0pLT52ZG91YmxlID0gdmFsdWU7IChpdGVtKS0+cHRyID0gJigoaXRl bSktPnZkb3VibGUpOyB9IHdoaWxlICgwKQorKworKy8vI2RlZmluZSBiaW5uX3NldF9zdHJpbmco aXRlbSxzdHIscGZyZWUpICAgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9TVFJJTkc7IChpdGVt KS0+cHRyID0gc3RyOyAoaXRlbSktPmZyZWVmbiA9IHBmcmVlOyB9IHdoaWxlICgwKQorKy8vI2Rl ZmluZSBiaW5uX3NldF9ibG9iKGl0ZW0scHRyLHNpemUscGZyZWUpIGRvIHsgKGl0ZW0pLT50eXBl ID0gQklOTl9CTE9COyAgIChpdGVtKS0+cHRyID0gcHRyOyAoaXRlbSktPmZyZWVmbiA9IHBmcmVl OyAoaXRlbSktPnNpemUgPSBzaXplOyB9IHdoaWxlICgwKQorK0JPT0wgQVBJRU5UUlkgYmlubl9z ZXRfc3RyaW5nKGJpbm4gKml0ZW0sIGNoYXIgKnN0ciwgYmlubl9tZW1fZnJlZSBwZnJlZSk7Cisr Qk9PTCBBUElFTlRSWSBiaW5uX3NldF9ibG9iKGJpbm4gKml0ZW0sIHZvaWQgKnB0ciwgaW50IHNp emUsIGJpbm5fbWVtX2ZyZWUgcGZyZWUpOworKworKworKy8vI2RlZmluZSBiaW5uX2RvdWJsZSh2 YWx1ZSkgeyAgICAgICAoaXRlbSktPnR5cGUgPSBCSU5OX0RPVUJMRTsgKGl0ZW0pLT52ZG91Ymxl ID0gdmFsdWU7IChpdGVtKS0+cHRyID0gJigoaXRlbSktPnZkb3VibGUpIH0KKysKKysKKysKKysv LyBGT1JFQUNIIE1BQ1JPUworKy8vIC0tLS0tLS0tLS0tLS0tCisrLy8KKysvLyBXZSBtdXN0IHVz ZSB0aGVzZSBkZWNsYXJhdGlvbnMgaW5zaWRlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIHVzZSB0 aGUgbWFjcm9zOgorKy8vCisrLy8gIGJpbm5faXRlciBpdGVyOworKy8vICBiaW5uIHZhbHVlOwor Ky8vICBjaGFyIGtleVsyNTZdOyAgLy8gb25seSBmb3Igb2JqZWN0cworKy8vICBpbnQgIGlkOyAg ICAgICAgLy8gb25seSBmb3IgbWFwcworKworKyNkZWZpbmUgYmlubl9vYmplY3RfZm9yZWFjaChv YmplY3QsIGtleSwgdmFsdWUpICAgXAorKyAgICBiaW5uX2l0ZXJfaW5pdCgmaXRlciwgb2JqZWN0 LCBCSU5OX09CSkVDVCk7ICAgXAorKyAgICB3aGlsZSAoYmlubl9vYmplY3RfbmV4dCgmaXRlciwg a2V5LCAmdmFsdWUpKQorKworKyNkZWZpbmUgYmlubl9tYXBfZm9yZWFjaChtYXAsIGlkLCB2YWx1 ZSkgICAgICAgICAgXAorKyAgICBiaW5uX2l0ZXJfaW5pdCgmaXRlciwgbWFwLCBCSU5OX01BUCk7 ICAgICAgICAgXAorKyAgICB3aGlsZSAoYmlubl9tYXBfbmV4dCgmaXRlciwgJmlkLCAmdmFsdWUp KQorKworKyNkZWZpbmUgYmlubl9saXN0X2ZvcmVhY2gobGlzdCwgdmFsdWUpICAgICAgICAgICAg XAorKyAgICBiaW5uX2l0ZXJfaW5pdCgmaXRlciwgbGlzdCwgQklOTl9MSVNUKTsgICAgICAgXAor KyAgICB3aGlsZSAoYmlubl9saXN0X25leHQoJml0ZXIsICZ2YWx1ZSkpCisrCisrLy8gSWYgeW91 IG5lZWQgbmVzdGVkIGZvcmVhY2ggbG9vcHMsIHVzZSB0aGUgbWFjcm9zIGJlbG93IGZvciB0aGUg bmVzdGVkIGxvb3AKKysvLyBBbHNvIHdlIG5lZWQgdG8gYWRkIGFuIGFkZGl0aW9uYWwgZGVjbGFy YXRpb24gb24gdGhlIGZ1bmN0aW9uIHRvIGhvbGQgdGhlIGl0ZXJhdG9yCisrLy8gV2UgY2FuIGFk ZCBpbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBmaXJzdCBpdGVyYXRvcjoKKysvLworKy8vICBiaW5u X2l0ZXIgaXRlciwgaXRlcjI7CisrCisrI2RlZmluZSBiaW5uX29iamVjdF9mb3JlYWNoMihvYmpl Y3QsIGtleSwgdmFsdWUpICAgXAorKyAgICBiaW5uX2l0ZXJfaW5pdCgmaXRlcjIsIG9iamVjdCwg QklOTl9PQkpFQ1QpOyAgIFwKKysgICAgd2hpbGUgKGJpbm5fb2JqZWN0X25leHQoJml0ZXIyLCBr ZXksICZ2YWx1ZSkpCisrCisrI2RlZmluZSBiaW5uX21hcF9mb3JlYWNoMihtYXAsIGlkLCB2YWx1 ZSkgICAgICAgICAgXAorKyAgICBiaW5uX2l0ZXJfaW5pdCgmaXRlcjIsIG1hcCwgQklOTl9NQVAp OyAgICAgICAgIFwKKysgICAgd2hpbGUgKGJpbm5fbWFwX25leHQoJml0ZXIyLCAmaWQsICZ2YWx1 ZSkpCisrCisrI2RlZmluZSBiaW5uX2xpc3RfZm9yZWFjaDIobGlzdCwgdmFsdWUpICAgICAgICAg ICAgXAorKyAgICBiaW5uX2l0ZXJfaW5pdCgmaXRlcjIsIGxpc3QsIEJJTk5fTElTVCk7ICAgICAg IFwKKysgICAgd2hpbGUgKGJpbm5fbGlzdF9uZXh0KCZpdGVyMiwgJnZhbHVlKSkKKysKKysKKysv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqIFNFVCBGVU5DVElPTlMgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9saXN0X2FkZF9pbnQ4KGJpbm4gKmxpc3QsIHNpZ25lZCBjaGFyIHZhbHVlKSB7 CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX0lOVDgsICZ2YWx1ZSwgMCk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2ludDE2KGJpbm4gKmxpc3QsIHNo b3J0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX0lOVDE2LCAm dmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9pbnQzMihi aW5uICpsaXN0LCBpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJ Tk5fSU5UMzIsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3Rf YWRkX2ludDY0KGJpbm4gKmxpc3QsIGludDY0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0 X2FkZChsaXN0LCBCSU5OX0lOVDY0LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9saXN0X2FkZF91aW50OChiaW5uICpsaXN0LCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7 CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX1VJTlQ4LCAmdmFsdWUsIDApOwor K30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF91aW50MTYoYmlubiAqbGlzdCwg dW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJ Tk5fVUlOVDE2LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0 X2FkZF91aW50MzIoYmlubiAqbGlzdCwgdW5zaWduZWQgaW50IHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9saXN0X2FkZChsaXN0LCBCSU5OX1VJTlQzMiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDY0KGJpbm4gKmxpc3QsIHVpbnQ2NCB2YWx1 ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9VSU5UNjQsICZ2YWx1ZSwg MCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2Zsb2F0KGJpbm4gKmxp c3QsIGZsb2F0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX0ZM T0FUMzIsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRk X2RvdWJsZShiaW5uICpsaXN0LCBkb3VibGUgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3Rf YWRkKGxpc3QsIEJJTk5fRkxPQVQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBC T09MIGJpbm5fbGlzdF9hZGRfYm9vbChiaW5uICpsaXN0LCBCT09MIHZhbHVlKSB7CisrICByZXR1 cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX0JPT0wsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX251bGwoYmlubiAqbGlzdCkgeworKyAgcmV0dXJu IGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9OVUxMLCBOVUxMLCAwKTsKKyt9CisrQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbGlzdF9hZGRfc3RyKGJpbm4gKmxpc3QsIGNoYXIgKnN0cikgeworKyAg cmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9TVFJJTkcsIHN0ciwgMCk7CisrfQorK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2Jsb2IoYmlubiAqbGlzdCwgdm9pZCAqcHRy LCBpbnQgc2l6ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9CTE9CLCBw dHIsIHNpemUpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9saXN0KGJp bm4gKmxpc3QsIHZvaWQgKmxpc3QyKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBC SU5OX0xJU1QsIGJpbm5fcHRyKGxpc3QyKSwgYmlubl9zaXplKGxpc3QyKSk7CisrfQorK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX21hcChiaW5uICpsaXN0LCB2b2lkICptYXApIHsK KysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fTUFQLCBiaW5uX3B0cihtYXApLCBi aW5uX3NpemUobWFwKSk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX29i amVjdChiaW5uICpsaXN0LCB2b2lkICpvYmopIHsKKysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxp c3QsIEJJTk5fT0JKRUNULCBiaW5uX3B0cihvYmopLCBiaW5uX3NpemUob2JqKSk7CisrfQorK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3ZhbHVlKGJpbm4gKmxpc3QsIGJpbm4gKnZh bHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCB2YWx1ZS0+dHlwZSwgYmlubl9w dHIodmFsdWUpLCBiaW5uX3NpemUodmFsdWUpKTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9pbnQ4KGJp bm4gKm1hcCwgaW50IGlkLCBzaWduZWQgY2hhciB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFw X3NldChtYXAsIGlkLCBCSU5OX0lOVDgsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX21hcF9zZXRfaW50MTYoYmlubiAqbWFwLCBpbnQgaWQsIHNob3J0IHZhbHVlKSB7 CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fSU5UMTYsICZ2YWx1ZSwgMCk7 CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfaW50MzIoYmlubiAqbWFwLCBp bnQgaWQsIGludCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5O X0lOVDMyLCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0 X2ludDY0KGJpbm4gKm1hcCwgaW50IGlkLCBpbnQ2NCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f bWFwX3NldChtYXAsIGlkLCBCSU5OX0lOVDY0LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9tYXBfc2V0X3VpbnQ4KGJpbm4gKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBj aGFyIHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fVUlOVDgs ICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdWludDE2 KGJpbm4gKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeworKyAgcmV0dXJuIGJp bm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX1VJTlQxNiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbWFwX3NldF91aW50MzIoYmlubiAqbWFwLCBpbnQgaWQsIHVuc2ln bmVkIGludCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX1VJ TlQzMiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF91 aW50NjQoYmlubiAqbWFwLCBpbnQgaWQsIHVpbnQ2NCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f bWFwX3NldChtYXAsIGlkLCBCSU5OX1VJTlQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbWFwX3NldF9mbG9hdChiaW5uICptYXAsIGludCBpZCwgZmxvYXQgdmFs dWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9GTE9BVDMyLCAmdmFs dWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2RvdWJsZShiaW5u ICptYXAsIGludCBpZCwgZG91YmxlIHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1h cCwgaWQsIEJJTk5fRkxPQVQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbWFwX3NldF9ib29sKGJpbm4gKm1hcCwgaW50IGlkLCBCT09MIHZhbHVlKSB7CisrICBy ZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fQk9PTCwgJnZhbHVlLCAwKTsKKyt9Cisr QUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9udWxsKGJpbm4gKm1hcCwgaW50IGlkKSB7 CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fTlVMTCwgTlVMTCwgMCk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfc3RyKGJpbm4gKm1hcCwgaW50IGlk LCBjaGFyICpzdHIpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9TVFJJ TkcsIHN0ciwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfYmxvYihi aW5uICptYXAsIGludCBpZCwgdm9pZCAqcHRyLCBpbnQgc2l6ZSkgeworKyAgcmV0dXJuIGJpbm5f bWFwX3NldChtYXAsIGlkLCBCSU5OX0JMT0IsIHB0ciwgc2l6ZSk7CisrfQorK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX21hcF9zZXRfbGlzdChiaW5uICptYXAsIGludCBpZCwgdm9pZCAqbGlzdCkg eworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0xJU1QsIGJpbm5fcHRyKGxp c3QpLCBiaW5uX3NpemUobGlzdCkpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBf c2V0X21hcChiaW5uICptYXAsIGludCBpZCwgdm9pZCAqbWFwMikgeworKyAgcmV0dXJuIGJpbm5f bWFwX3NldChtYXAsIGlkLCBCSU5OX01BUCwgYmlubl9wdHIobWFwMiksIGJpbm5fc2l6ZShtYXAy KSk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfb2JqZWN0KGJpbm4gKm1h cCwgaW50IGlkLCB2b2lkICpvYmopIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwg QklOTl9PQkpFQ1QsIGJpbm5fcHRyKG9iaiksIGJpbm5fc2l6ZShvYmopKTsKKyt9CisrQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbWFwX3NldF92YWx1ZShiaW5uICptYXAsIGludCBpZCwgYmlubiAq dmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgdmFsdWUtPnR5cGUsIGJp bm5fcHRyKHZhbHVlKSwgYmlubl9zaXplKHZhbHVlKSk7CisrfQorKworKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRf aW50OChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgc2lnbmVkIGNoYXIgdmFsdWUpIHsKKysg IHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fSU5UOCwgJnZhbHVlLCAwKTsK Kyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9pbnQxNihiaW5uICpvYmos IGNvbnN0IGNoYXIgKmtleSwgc2hvcnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9z ZXQob2JqLCBrZXksIEJJTk5fSU5UMTYsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX29iamVjdF9zZXRfaW50MzIoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGlu dCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9JTlQz MiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9p bnQ2NChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50NjQgdmFsdWUpIHsKKysgIHJldHVy biBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fSU5UNjQsICZ2YWx1ZSwgMCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfdWludDgoYmlubiAqb2JqLCBjb25z dCBjaGFyICprZXksIHVuc2lnbmVkIGNoYXIgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVj dF9zZXQob2JqLCBrZXksIEJJTk5fVUlOVDgsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX29iamVjdF9zZXRfdWludDE2KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5 LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmos IGtleSwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX29iamVjdF9zZXRfdWludDMyKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25l ZCBpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5f VUlOVDMyLCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rf c2V0X3VpbnQ2NChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdWludDY0IHZhbHVlKSB7Cisr ICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ2NCwgJnZhbHVlLCAw KTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9mbG9hdChiaW5uICpv YmosIGNvbnN0IGNoYXIgKmtleSwgZmxvYXQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVj dF9zZXQob2JqLCBrZXksIEJJTk5fRkxPQVQzMiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lO TElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9kb3VibGUoYmlubiAqb2JqLCBjb25zdCBjaGFyICpr ZXksIGRvdWJsZSB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwg QklOTl9GTE9BVDY0LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9v YmplY3Rfc2V0X2Jvb2woYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIEJPT0wgdmFsdWUpIHsK KysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fQk9PTCwgJnZhbHVlLCAw KTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9udWxsKGJpbm4gKm9i aiwgY29uc3QgY2hhciAqa2V5KSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5 LCBCSU5OX05VTEwsIE5VTEwsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmpl Y3Rfc2V0X3N0cihiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgY2hhciAqc3RyKSB7CisrICBy ZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgc3RyLCAwKTsKKyt9 CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9ibG9iKGJpbm4gKm9iaiwgY29u c3QgY2hhciAqa2V5LCB2b2lkICpwdHIsIGludCBzaXplKSB7CisrICByZXR1cm4gYmlubl9vYmpl Y3Rfc2V0KG9iaiwga2V5LCBCSU5OX0JMT0IsIHB0ciwgc2l6ZSk7CisrfQorK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX29iamVjdF9zZXRfbGlzdChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwg dm9pZCAqbGlzdCkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9M SVNULCBiaW5uX3B0cihsaXN0KSwgYmlubl9zaXplKGxpc3QpKTsKKyt9CisrQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fb2JqZWN0X3NldF9tYXAoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHZv aWQgKm1hcCkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9NQVAs IGJpbm5fcHRyKG1hcCksIGJpbm5fc2l6ZShtYXApKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fb2JqZWN0X3NldF9vYmplY3QoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHZvaWQg Km9iajIpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fT0JKRUNU LCBiaW5uX3B0cihvYmoyKSwgYmlubl9zaXplKG9iajIpKTsKKyt9CisrQUxXQVlTX0lOTElORSBC T09MIGJpbm5fb2JqZWN0X3NldF92YWx1ZShiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgYmlu biAqdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXksIHZhbHVlLT50 eXBlLCBiaW5uX3B0cih2YWx1ZSksIGJpbm5fc2l6ZSh2YWx1ZSkpOworK30KKysKKysvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqIEdFVCBGVU5DVElPTlMgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9saXN0X2dldF9pbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHNpZ25lZCBjaGFy ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9JTlQ4 LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9p bnQxNihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBzaG9ydCAqcHZhbHVlKSB7CisrICByZXR1 cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UMTYsIHB2YWx1ZSwgTlVMTCk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X2ludDMyKGNvbnN0IHZvaWQgKmxp c3QsIGludCBwb3MsIGludCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0 LCBwb3MsIEJJTk5fSU5UMzIsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX2xpc3RfZ2V0X2ludDY0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludDY0ICpw dmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9JTlQ2NCwg cHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfdWlu dDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdW5zaWduZWQgY2hhciAqcHZhbHVlKSB7Cisr ICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDgsIHB2YWx1ZSwgTlVM TCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X3VpbnQxNihjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zLCB1bnNpZ25lZCBzaG9ydCAqcHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDE2LCBwdmFsdWUsIE5VTEwpOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50MzIoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcywgdW5zaWduZWQgaW50ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3Rf Z2V0KGxpc3QsIHBvcywgQklOTl9VSU5UMzIsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X3VpbnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9z LCB1aW50NjQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBC SU5OX1VJTlQ2NCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5f bGlzdF9nZXRfZmxvYXQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgZmxvYXQgKnB2YWx1ZSkg eworKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0ZMT0FUMzIsIHB2YWx1 ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X2RvdWJsZShj b25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBkb3VibGUgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJp bm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0ZMT0FUNjQsIHB2YWx1ZSwgTlVMTCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X2Jvb2woY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcywgQk9PTCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBw b3MsIEJJTk5fQk9PTCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbGlzdF9nZXRfc3RyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGNoYXIgKipwdmFsdWUp IHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9TVFJJTkcsIHB2YWx1 ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X2Jsb2IoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdm9pZCAqKnB2YWx1ZSwgaW50ICpwc2l6ZSkgeworKyAg cmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0JMT0IsIHB2YWx1ZSwgcHNpemUp OworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9saXN0KGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0 KGxpc3QsIHBvcywgQklOTl9MSVNULCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9saXN0X2dldF9tYXAoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdm9pZCAq KnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX01BUCwg cHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfb2Jq ZWN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUpIHsKKysgIHJldHVy biBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9PQkpFQ1QsIHB2YWx1ZSwgTlVMTCk7Cisr fQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5f bWFwX2dldF9pbnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBzaWduZWQgY2hhciAqcHZhbHVl KSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UOCwgcHZhbHVlLCBO VUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9pbnQxNihjb25zdCB2 b2lkICptYXAsIGludCBpZCwgc2hvcnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dl dChtYXAsIGlkLCBCSU5OX0lOVDE2LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9tYXBfZ2V0X2ludDMyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQgKnB2 YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDMyLCBwdmFs dWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X2ludDY0KGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQ2NCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9t YXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UNjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfdWludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHVu c2lnbmVkIGNoYXIgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBC SU5OX1VJTlQ4LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9t YXBfZ2V0X3VpbnQxNihjb25zdCB2b2lkICptYXAsIGludCBpZCwgdW5zaWduZWQgc2hvcnQgKnB2 YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQxNiwgcHZh bHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF91aW50MzIo Y29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHVuc2lnbmVkIGludCAqcHZhbHVlKSB7CisrICByZXR1 cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDMyLCBwdmFsdWUsIE5VTEwpOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X3VpbnQ2NChjb25zdCB2b2lkICptYXAs IGludCBpZCwgdWludDY0ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBp ZCwgQklOTl9VSU5UNjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX21hcF9nZXRfZmxvYXQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGZsb2F0ICpwdmFsdWUp IHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9GTE9BVDMyLCBwdmFsdWUs IE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X2RvdWJsZShjb25z dCB2b2lkICptYXAsIGludCBpZCwgZG91YmxlICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21h cF9nZXQobWFwLCBpZCwgQklOTl9GTE9BVDY0LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X2Jvb2woY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIEJP T0wgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0JPT0ws IHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfc3Ry KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBjaGFyICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlu bl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fU1RSSU5HLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X2Jsb2IoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQs IHZvaWQgKipwdmFsdWUsIGludCAqcHNpemUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFw LCBpZCwgQklOTl9CTE9CLCBwdmFsdWUsIHBzaXplKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbWFwX2dldF9saXN0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB2b2lkICoqcHZhbHVl KSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTElTVCwgcHZhbHVlLCBO VUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9tYXAoY29uc3Qgdm9p ZCAqbWFwLCBpbnQgaWQsIHZvaWQgKipwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQo bWFwLCBpZCwgQklOTl9NQVAsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX21hcF9nZXRfb2JqZWN0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB2b2lkICoqcHZh bHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fT0JKRUNULCBwdmFs dWUsIE5VTEwpOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8vIHVzYWdlOgor Ky8vICAgaWYgKGJpbm5fb2JqZWN0X2dldF9pbnQzMihvYmosICJrZXkiLCAmdmFsdWUpID09IEZB TFNFKSB4eHg7CisrCisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9pbnQ4KGNv bnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBzaWduZWQgY2hhciAqcHZhbHVlKSB7Cisr ICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0lOVDgsIHB2YWx1ZSwgTlVM TCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfaW50MTYoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHNob3J0ICpwdmFsdWUpIHsKKysgIHJldHVybiBi aW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fSU5UMTYsIHB2YWx1ZSwgTlVMTCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfaW50MzIoY29uc3Qgdm9pZCAqb2Jq LCBjb25zdCBjaGFyICprZXksIGludCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rf Z2V0KG9iaiwga2V5LCBCSU5OX0lOVDMyLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2ludDY0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5LCBpbnQ2NCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwg a2V5LCBCSU5OX0lOVDY0LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9vYmplY3RfZ2V0X3VpbnQ4KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCB1 bnNpZ25lZCBjaGFyICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBr ZXksIEJJTk5fVUlOVDgsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX29iamVjdF9nZXRfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCB1 bnNpZ25lZCBzaG9ydCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwg a2V5LCBCSU5OX1VJTlQxNiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fb2JqZWN0X2dldF91aW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXks IHVuc2lnbmVkIGludCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwg a2V5LCBCSU5OX1VJTlQzMiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fb2JqZWN0X2dldF91aW50NjQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXks IHVpbnQ2NCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBC SU5OX1VJTlQ2NCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5f b2JqZWN0X2dldF9mbG9hdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgZmxvYXQg KnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9GTE9B VDMyLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rf Z2V0X2RvdWJsZShjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgZG91YmxlICpwdmFs dWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fRkxPQVQ2NCwg cHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9i b29sKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBCT09MICpwdmFsdWUpIHsKKysg IHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fQk9PTCwgcHZhbHVlLCBOVUxM KTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9zdHIoY29uc3Qgdm9p ZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGNoYXIgKipwdmFsdWUpIHsKKysgIHJldHVybiBiaW5u X29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fU1RSSU5HLCBwdmFsdWUsIE5VTEwpOworK30KKytB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2Jsb2IoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXksIHZvaWQgKipwdmFsdWUsIGludCAqcHNpemUpIHsKKysgIHJldHVybiBi aW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fQkxPQiwgcHZhbHVlLCBwc2l6ZSk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfbGlzdChjb25zdCB2b2lkICpvYmos IGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0 X2dldChvYmosIGtleSwgQklOTl9MSVNULCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X21hcChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSwgdm9pZCAqKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtl eSwgQklOTl9NQVAsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5u X29iamVjdF9nZXRfb2JqZWN0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCB2b2lk ICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX09C SkVDVCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytC T09MICAgQVBJRU5UUlkgYmlubl9nZXRfaW50MzIoYmlubiAqdmFsdWUsIGludCAqcGludCk7Cisr Qk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0X2ludDY0KGJpbm4gKnZhbHVlLCBpbnQ2NCAqcGludCk7 CisrQk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0X2RvdWJsZShiaW5uICp2YWx1ZSwgZG91YmxlICpw ZmxvYXQpOworK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF9ib29sKGJpbm4gKnZhbHVlLCBCT09M ICpwYm9vbCk7CisrY2hhciAqIEFQSUVOVFJZIGJpbm5fZ2V0X3N0cihiaW5uICp2YWx1ZSk7Cisr CisrLy8gYm9vbGVhbiBzdHJpbmcgdmFsdWVzOgorKy8vIDEsIHRydWUsIHllcywgb24KKysvLyAw LCBmYWxzZSwgbm8sIG9mZgorKworKy8vIGJvb2xlYW4gbnVtYmVyIHZhbHVlczoKKysvLyAhPTAg W3RydWVdCisrLy8gPT0wIFtmYWxzZV0KKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9Cisr I2VuZGlmCisrCisrI2VuZGlmIC8vQklOTl9ICitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3Jp Zy9jaGFubmVscy5jIG9wZW5zc2gtMTAuNXAxL2NoYW5uZWxzLmMKKy0tLSBvcGVuc3NoLTEwLjVw MS5vcmlnL2NoYW5uZWxzLmMJMjAyNi0wOS0yMSAwNzowNjowNS40NzA2NjczNDIgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjVwMS9jaGFubmVscy5jCTIwMjYtMDktMjEgMTA6NDM6MTMuMjMxMjM2NDY5 ICswMjAwCitAQCAtOTAsNiArOTAsMTEgQEAKKyAvKiBNYXhpbXVtIG51bWJlciBvZiBmYWtlIFgx MSBkaXNwbGF5cyB0byB0cnkuICovCisgI2RlZmluZSBNQVhfRElTUExBWVMgIDEwMDAKKyAKKysv KiBpbiB2ZXJzaW9uIG9mIE9wZW5TU0ggbGF0ZXIgdGhhbiA4LjggaWYgd2UgYWR2ZXJ0aXNlIGEg d2luZG93CisrICogMTZNQiBvciBsYXJnZXIgaXMgY2F1c2VzIGEgcGF0aG9sb2dpY2FsIGJlaGF2 aW91ciB0aGF0IHJlZHVjZXMKKysgKiB0aHJvdWdocHV0LiBUaGlzIGlzIG5vdCBhIGdyZWF0IHNv bHV0aW9uLiAqLworKyNkZWZpbmUgTk9OX0hQTl9XSU5ET1dfTUFYICgxNSAqIDEwMjQgKiAxMDI0 KQorKworIC8qIFBlci1jaGFubmVsIGNhbGxiYWNrIGZvciBwcmUvcG9zdCBJTyBhY3Rpb25zICov CisgdHlwZWRlZiB2b2lkIGNoYW5fZm4oc3RydWN0IHNzaCAqLCBDaGFubmVsICpjKTsKKyAKK0BA IC0yMjIsNiArMjI3LDkgQEAKKyAvKiBTZXR1cCBoZWxwZXIgKi8KKyBzdGF0aWMgdm9pZCBjaGFu bmVsX2hhbmRsZXJfaW5pdChzdHJ1Y3Qgc3NoX2NoYW5uZWxzICpzYyk7CisgCisrLyogZGVmYXVs dCB2YWx1ZXMgdG8gZW5hYmxlIGhwbiBhbmQgdGhlIGluaXRpYWwgYnVmZmVyIHNpemUgKi8KKytz dGF0aWMgaW50IGhwbl9kaXNhYmxlZCA9IDA7CisrCisgLyogLS0gY2hhbm5lbCBjb3JlICovCisg Cisgdm9pZAorQEAgLTU0Miw2ICs1NTAsMTYgQEAKKyAJICAgIChjLT5vdXRwdXQgPSBzc2hidWZf bmV3KCkpID09IE5VTEwgfHwKKyAJICAgIChjLT5leHRlbmRlZCA9IHNzaGJ1Zl9uZXcoKSkgPT0g TlVMTCkKKyAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7CisrCisrCS8qIHRoZXNlIGJ1 ZmZlcnMgYXJlIGltcG9ydGFudCBpbiB0ZXJtcyBvZiB0cmFja2luZyBjaGFubmVsCisrCSAqIGJ1 ZmZlciB1c2FnZSBzbyBsYWJlbCBhbmQgdHlwZSB0aGVtIHdpdGggZGVzY3JpcHRpdmUgbmFtZXMg Ki8KKysJc3NoYnVmX3JlbGFiZWwoYy0+aW5wdXQsICJjaGFubmVsIGlucHV0Iik7CisrCXNzaGJ1 Zl90eXBlKGMtPmlucHV0LCBCVUZfQ0hBTk5FTF9JTlBVVCk7CisrCXNzaGJ1Zl9yZWxhYmVsKGMt Pm91dHB1dCwgImNoYW5uZWwgb3V0cHV0Iik7CisrCXNzaGJ1Zl90eXBlKGMtPm91dHB1dCwgQlVG X0NIQU5ORUxfT1VUUFVUKTsKKysJc3NoYnVmX3JlbGFiZWwoYy0+ZXh0ZW5kZWQsICJjaGFubmVs IGV4dGVuZGVkIik7CisrCXNzaGJ1Zl90eXBlKGMtPmV4dGVuZGVkLCBCVUZfQ0hBTk5FTF9FWFRF TkRFRCk7CisrCisgCWlmICgociA9IHNzaGJ1Zl9zZXRfbWF4X3NpemUoYy0+aW5wdXQsIENIQU5f SU5QVVRfTUFYKSkgIT0gMCkKKyAJCWZhdGFsX2ZyKHIsICJzc2hidWZfc2V0X21heF9zaXplIik7 CisgCWMtPm9zdGF0ZSA9IENIQU5fT1VUUFVUX09QRU47CitAQCAtNTUzLDYgKzU3MSw3IEBACisg CWMtPmxvY2FsX3dpbmRvdyA9IHdpbmRvdzsKKyAJYy0+bG9jYWxfd2luZG93X21heCA9IHdpbmRv dzsKKyAJYy0+bG9jYWxfbWF4cGFja2V0ID0gbWF4cGFjazsKKysJYy0+ZHluYW1pY193aW5kb3cg PSAwOworIAljLT5yZW1vdGVfbmFtZSA9IHhzdHJkdXAocmVtb3RlX25hbWUpOworIAljLT5jdGxf Y2hhbiA9IC0xOworIAljLT5kZWxheWVkID0gMTsJCS8qIHByZXZlbnQgY2FsbCB0byBjaGFubmVs X3Bvc3QgaGFuZGxlciAqLworQEAgLTEzMjcsNiArMTM0Niw0MiBAQAorIAljLT5pb193YW50ID0g U1NIX0NIQU5fSU9fU09DS19XOworIH0KKyAKKytzdGF0aWMgaW50CisrY2hhbm5lbF90Y3B3aW5z eihzdHJ1Y3Qgc3NoICpzc2gpCisreworKwl1X2ludDMyX3QgdGNwd2luc3ogPSAwOworKwlzb2Nr bGVuX3Qgb3B0c3ogPSBzaXplb2YodGNwd2luc3opOworKwlpbnQgcmV0ID0gLTE7CisrCisrCS8q IGlmIHdlIGFyZW4ndCBvbiBhIHNvY2tldCByZXR1cm4gMTI4S0IgKi8KKysJaWYgKCFzc2hfcGFj a2V0X2Nvbm5lY3Rpb25faXNfb25fc29ja2V0KHNzaCkpCisrCQlyZXR1cm4gMTI4ICogMTAyNDsK KysKKysJLyogZ2V0IHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCisr CXJldCA9IGdldHNvY2tvcHQoc3NoX3BhY2tldF9nZXRfY29ubmVjdGlvbl9pbihzc2gpLAorKwkg ICAgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmdGNwd2luc3osICZvcHRzeik7CisrCisrCS8qIGVy cm9yIG9uIHRoZSBzb2NrZXQgLSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKysJLyogcmV0 dXJuIE9wZW5TU0gncyBtYXggd2luZG93IHNpemUgKi8KKysJaWYgKHJldCAhPSAwKSB7CisrCQlk ZWJ1Z19mKCJnZXRzb2Nrb3B0IFNPX1JDVkJVRiBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8p KTsKKysJCXJldHVybiAoMiAqIDEwMjQgKiAxMDI0KTsKKysJfQorKworKwkvKiByZXR1cm4gbm8g bW9yZSB0aGFuIFNTSEJVRl9TSVpFX01BWCAoY3VycmVudGx5IDEyOE1CKSAqLworKwlpZiAodGNw d2luc3ogPiBTU0hCVUZfU0laRV9NQVgpCisrCQl0Y3B3aW5zeiA9IFNTSEJVRl9TSVpFX01BWDsK KysKKysJLyogaWYgdGhlIHJlbW90ZSBzaWRlIGlzIE9wZW5TU0ggYWZ0ZXIgdmVyc2lvbiA4Ljgg d2UgbmVlZCB0byByZXN0cmljdAorKwkgKiB0aGUgc2l6ZSBvZiB0aGUgYWR2ZXJ0aXNlZCB3aW5k b3cuIE5vdyB0aGlzIG1lYW5zIHRoYXQgYW55IEhQTiB0byBub24tSFBOCisrCSAqIGNvbm5lY3Rp b24gd2lsbCBiZSB3aW5kb3cgbGltaXRlZCB0byAxNU1CIG9mIHJlY2VpdmUgc3BhY2UuIFRoaXMg aXMgYQorKwkgKiBub24tb3B0aW1hbCBzb2x1dGlvbi4KKysJICovCisrCWlmICgoc3NoLT5jb21w YXQgJiBTU0hfUkVTVFJJQ1RfV0lORE9XKSAmJiAodGNwd2luc3ogPiBOT05fSFBOX1dJTkRPV19N QVgpKQorKwkJdGNwd2luc3ogPSBOT05fSFBOX1dJTkRPV19NQVg7CisrCXJldHVybiAodGNwd2lu c3opOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNoYW5uZWxfcHJlX29wZW4oc3RydWN0IHNzaCAq c3NoLCBDaGFubmVsICpjKQorIHsKK0BAIC0yMTg3LDggKzIyNDIsNiBAQAorIHN0YXRpYyBpbnQK KyBjaGFubmVsX2hhbmRsZV9yZmQoc3RydWN0IHNzaCAqc3NoLCBDaGFubmVsICpjKQorIHsKKy0J Y2hhciBidWZbQ0hBTl9SQlVGXTsKKy0Jc3NpemVfdCBsZW47CisgCWludCByLCBmb3JjZTsKKyAJ c2l6ZV90IG5yID0gMCwgaGF2ZSwgYXZhaWwsIG1heGxlbiA9IENIQU5ORUxfTUFYX1JFQUQ7Cisg CWludCBwdHlfemVyb3JlYWQgPSAwOworQEAgLTIyMzIsNiArMjI4NSwzMCBAQAorIAkJcmV0dXJu IDE7CisgCX0KKyAKKysJLyoKKysJICogRGF0YWdyYW0gb3IgZmlsdGVyZWQgY2hhbm5lbCBwYXRo OiBuZWVkcyBhIHRlbXBvcmFyeSBzdGFjayBidWZmZXIKKysJICogYmVjYXVzZSB0aGUgZGF0YSBt dXN0IHBhc3MgdGhyb3VnaCBpbnB1dF9maWx0ZXIoKSBvciBiZSBmcmFtZWQgYXMKKysJICogYSBk YXRhZ3JhbSBiZWZvcmUgZW50ZXJpbmcgYy0+aW5wdXQuCisrCSAqCisrCSAqIGJ1ZltdIChDSEFO X1JCVUYgPSAzMktCKSBpcyBkZWNsYXJlZCBpbiB0aGlzIGlubmVyIHNjb3BlIHJhdGhlcgorKwkg KiB0aGFuIGF0IGZ1bmN0aW9uIGxldmVsIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgcGVuYWx0eSBm cm9tCisrCSAqIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8sIHdoaWNoIGNhdXNlcyB0aGUg Y29tcGlsZXIgdG8gZW1pdAorKwkgKiBhIG1lbXNldCgpIGZvciBldmVyeSBsb2NhbCB2YXJpYWJs ZSBvbiBmdW5jdGlvbiBlbnRyeS4gIFdpdGggYnVmCisrCSAqIGF0IGZ1bmN0aW9uIHNjb3BlIHRo ZSAzMktCIHplcm9pbmcgaGFwcGVucyBvbiBldmVyeSBjYWxsLCBldmVuCisrCSAqIHRob3VnaCB0 aGUgc2ltcGxlLWNoYW5uZWwgZmFzdCBwYXRoIGFib3ZlICh0aGUgY29tbW9uIGNhc2UgZm9yCisr CSAqIGJ1bGsgZGF0YSkgbmV2ZXIgdG91Y2hlcyBidWYuICBDUFUgcHJvZmlsaW5nIHNob3dlZCB0 aGlzIGRlYWQKKysJICogemVyb2luZyBjb25zdW1pbmcgfjEwJSBvZiBjbGllbnQgQ1BVIGR1cmlu ZyBoaWdoLXRocm91Z2hwdXQKKysJICogdHJhbnNmZXJzLiAgTW92aW5nIGJ1ZiBpbnRvIHRoaXMg c2NvcGUgbGltaXRzIHRoZSB6ZXJvaW5nIHRvCisrCSAqIGNhbGxzIHRoYXQgYWN0dWFsbHkgdGFr ZSB0aGUgZGF0YWdyYW0vZmlsdGVyIHBhdGguCisrCSAqCisrCSAqIFNlY3VyaXR5IG5vdGU6IGJ1 ZiBpcyBzdGlsbCB6ZXJvZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSB1c2UgaW4KKysJICogdGhp cyBwYXRoLiAgVGhlIHNpbXBsZS1jaGFubmVsIHBhdGggbmV2ZXIgYWxsb2NhdGVzIGJ1ZiBhdCBh bGwsCisrCSAqIHNvIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLgor KwkgKi8KKysJeworKwljaGFyIGJ1ZltDSEFOX1JCVUZdOworKwlzc2l6ZV90IGxlbjsKKysKKyAJ ZXJybm8gPSAwOworIAlsZW4gPSByZWFkKGMtPnJmZCwgYnVmLCBzaXplb2YoYnVmKSk7CisgCS8q IGZpeHVwIEFJWCB6ZXJvLWxlbmd0aCByZWFkIHdpdGggZXJybm8gc2V0IHRvIGxvb2sgbW9yZSBs aWtlIGVycm9ycyAqLworQEAgLTIyNDQsMTUgKzIzMjEsNyBAQAorIAkJZGVidWcyKCJjaGFubmVs ICVkOiByZWFkPD0wIHJmZCAlZCBsZW4gJXpkOiAlcyIsCisgCQkgICAgYy0+c2VsZiwgYy0+cmZk LCBsZW4sCisgCQkgICAgbGVuID09IDAgPyAiY2xvc2VkIiA6IHN0cmVycm9yKGVycm5vKSk7Cist IHJmYWlsOgorLQkJaWYgKGMtPnR5cGUgIT0gU1NIX0NIQU5ORUxfT1BFTikgeworLQkJCWRlYnVn MigiY2hhbm5lbCAlZDogbm90IG9wZW4iLCBjLT5zZWxmKTsKKy0JCQljaGFuX21hcmtfZGVhZChz c2gsIGMpOworLQkJCXJldHVybiAtMTsKKy0JCX0gZWxzZSB7CistCQkJY2hhbl9yZWFkX2ZhaWxl ZChzc2gsIGMpOworLQkJfQorLQkJcmV0dXJuIC0xOworKwkJZ290byByZmFpbDsKKyAJfQorIAlj aGFubmVsX3NldF91c2VkX3RpbWUoc3NoLCBjKTsKKyAJaWYgKGMtPmlucHV0X2ZpbHRlciAhPSBO VUxMKSB7CitAQCAtMjI2Nyw2ICsyMzM2LDE3IEBACisgCQlmYXRhbF9mcihyLCAiY2hhbm5lbCAl aTogcHV0IGRhdGEiLCBjLT5zZWxmKTsKKyAKKyAJcmV0dXJuIDE7CisrCX0gLyogZW5kIGRhdGFn cmFtL2ZpbHRlciBidWZbXSBzY29wZSAqLworKworKyByZmFpbDoKKysJaWYgKGMtPnR5cGUgIT0g U1NIX0NIQU5ORUxfT1BFTikgeworKwkJZGVidWcyKCJjaGFubmVsICVkOiBub3Qgb3BlbiIsIGMt PnNlbGYpOworKwkJY2hhbl9tYXJrX2RlYWQoc3NoLCBjKTsKKysJCXJldHVybiAtMTsKKysJfSBl bHNlIHsKKysJCWNoYW5fcmVhZF9mYWlsZWQoc3NoLCBjKTsKKysJfQorKwlyZXR1cm4gLTE7Cisg fQorIAorIHN0YXRpYyBpbnQKK0BAIC0yNDQ0LDIxICsyNTI0LDMyIEBACisgCWlmIChjLT50eXBl ID09IFNTSF9DSEFOTkVMX09QRU4gJiYKKyAJICAgICEoYy0+ZmxhZ3MgJiAoQ0hBTl9DTE9TRV9T RU5UfENIQU5fQ0xPU0VfUkNWRCkpICYmCisgCSAgICAoKGMtPmxvY2FsX3dpbmRvd19tYXggLSBj LT5sb2NhbF93aW5kb3cgPgorLQkgICAgYy0+bG9jYWxfbWF4cGFja2V0KjMpIHx8CisrCSAgICBj LT5sb2NhbF9tYXhwYWNrZXQgKiA4KSB8fAorIAkgICAgYy0+bG9jYWxfd2luZG93IDwgYy0+bG9j YWxfd2luZG93X21heC8yKSAmJgorIAkgICAgYy0+bG9jYWxfY29uc3VtZWQgPiAwKSB7CisrCQlp bnQgYWRkaXRpb24gPSAwOworKwkJdV9pbnQzMl90IHRjcHdpbnN6ID0gY2hhbm5lbF90Y3B3aW5z eihzc2gpOworKwkJLyogYWRqdXN0IG1heCB3aW5kb3cgc2l6ZSBpZiB3ZSBhcmUgaW4gYSBkeW5h bWljIGVudmlyb25tZW50CisrCQkgKiBhbmQgdGhlIHRjcCByZWNlaXZlIGJ1ZmZlciBpcyBsYXJn ZXIgdGhhbiB0aGUgc3NoIHdpbmRvdyAqLworKwkJaWYgKGMtPmR5bmFtaWNfd2luZG93ICYmICh0 Y3B3aW5zeiA+IGMtPmxvY2FsX3dpbmRvd19tYXgpKSB7CisrCQkJLyogYWdncmVzc2l2ZWx5IGdy b3cgdGhlIHdpbmRvdyAqLworKwkJCWFkZGl0aW9uID0gdGNwd2luc3ogLSBjLT5sb2NhbF93aW5k b3dfbWF4OworKwkJCWMtPmxvY2FsX3dpbmRvd19tYXggKz0gYWRkaXRpb247CisrCQkJZGVidWdf ZigiQ2hhbm5lbCAlZDogV2luZG93IGdyb3d0aCB0byAlZCBieSAlZCBieXRlcyIsYy0+c2VsZiwK KysJCQkgICAgICBjLT5sb2NhbF93aW5kb3dfbWF4LCBhZGRpdGlvbik7CisrCQl9CisgCQlpZiAo IWMtPmhhdmVfcmVtb3RlX2lkKQorIAkJCWZhdGFsX2YoImNoYW5uZWwgJWQ6IG5vIHJlbW90ZSBp ZCIsIGMtPnNlbGYpOworIAkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwKKyAJCSAgICBTU0gy X01TR19DSEFOTkVMX1dJTkRPV19BREpVU1QpKSAhPSAwIHx8CisgCQkgICAgKHIgPSBzc2hwa3Rf cHV0X3UzMihzc2gsIGMtPnJlbW90ZV9pZCkpICE9IDAgfHwKKy0JCSAgICAociA9IHNzaHBrdF9w dXRfdTMyKHNzaCwgYy0+bG9jYWxfY29uc3VtZWQpKSAhPSAwIHx8CisrCQkgICAgKHIgPSBzc2hw a3RfcHV0X3UzMihzc2gsIGMtPmxvY2FsX2NvbnN1bWVkICsgYWRkaXRpb24pKSAhPSAwIHx8Cisg CQkgICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKSB7CisgCQkJZmF0YWxfZnIociwgImNo YW5uZWwgJWkiLCBjLT5zZWxmKTsKKyAJCX0KKyAJCWRlYnVnMigiY2hhbm5lbCAlZDogd2luZG93 ICVkIHNlbnQgYWRqdXN0ICVkIiwgYy0+c2VsZiwKKy0JCSAgICBjLT5sb2NhbF93aW5kb3csIGMt PmxvY2FsX2NvbnN1bWVkKTsKKy0JCWMtPmxvY2FsX3dpbmRvdyArPSBjLT5sb2NhbF9jb25zdW1l ZDsKKysJCSAgICBjLT5sb2NhbF93aW5kb3csIGMtPmxvY2FsX2NvbnN1bWVkICsgYWRkaXRpb24p OworKwkJYy0+bG9jYWxfd2luZG93ICs9IGMtPmxvY2FsX2NvbnN1bWVkICsgYWRkaXRpb247Cisg CQljLT5sb2NhbF9jb25zdW1lZCA9IDA7CisgCX0KKyAJcmV0dXJuIDE7CitAQCAtMzA0Nyw5ICsz MTM4LDcgQEAKKyAJCQkgKiBpbiB1c2UuCisgCQkJICovCisgCQkJaWYgKENIQU5ORUxfRUZEX0lO UFVUX0FDVElWRShjKSkKKy0JCQkJZGVidWcyKCJjaGFubmVsICVkOiAiCistCQkJCSAgICAiaWJ1 Zl9lbXB0eSBkZWxheWVkIGVmZCAlZC8oJXp1KSIsCistCQkJCSAgICBjLT5zZWxmLCBjLT5lZmQs IHNzaGJ1Zl9sZW4oYy0+ZXh0ZW5kZWQpKTsKKysJCQkJe30KKyAJCQllbHNlCisgCQkJCWNoYW5f aWJ1Zl9lbXB0eShzc2gsIGMpOworIAkJfQorQEAgLTM4NzYsNiArMzk2NSwxMyBAQAorIAlyZXR1 cm4gYWRkcjsKKyB9CisgCisrdm9pZAorK2NoYW5uZWxfc2V0X2hwbl9kaXNhYmxlZChpbnQgZXh0 ZXJuYWxfaHBuX2Rpc2FibGVkKQorK3sKKysJaHBuX2Rpc2FibGVkID0gZXh0ZXJuYWxfaHBuX2Rp c2FibGVkOworKwlkZWJ1ZygiSFBOIERpc2FibGVkOiAlZCIsIGhwbl9kaXNhYmxlZCk7CisrfQor KworIHN0YXRpYyBpbnQKKyBjaGFubmVsX3NldHVwX2Z3ZF9saXN0ZW5lcl90Y3BpcChzdHJ1Y3Qg c3NoICpzc2gsIGludCB0eXBlLAorICAgICBzdHJ1Y3QgRm9yd2FyZCAqZndkLCBpbnQgKmFsbG9j YXRlZF9saXN0ZW5fcG9ydCwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NoYW5uZWxz Lmggb3BlbnNzaC0xMC41cDEvY2hhbm5lbHMuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2hh bm5lbHMuaAkyMDI2LTA5LTIxIDA3OjA2OjA1LjQ3MTA1ODU0OCArMDIwMAorKysrIG9wZW5zc2gt MTAuNXAxL2NoYW5uZWxzLmgJMjAyNi0wOS0yMSAwNzowNjo1OS44ODI1MDc5ODcgKzAyMDAKK0BA IC0xODEsNiArMTgxLDcgQEAKKyAJdV9pbnQJbG9jYWxfd2luZG93X21heDsKKyAJdV9pbnQJbG9j YWxfY29uc3VtZWQ7CisgCXVfaW50CWxvY2FsX21heHBhY2tldDsKKysJaW50CWR5bmFtaWNfd2lu ZG93OworIAlpbnQgICAgIGV4dGVuZGVkX3VzYWdlOworIAlpbnQJYWdlbnRfbmV3OwkvKiBGb3Ig YWdlbnQgbGlzdGVuZXJzLCB1c2UgUkZDIFhYWCByZXFlc3RzICovCisgCWludAlzaW5nbGVfY29u bmVjdGlvbjsKK0BAIC0yNjQsNyArMjY1LDcgQEAKKyAjZGVmaW5lIFNTSF9DSEFOX0lPX1NPQ0sJ CShTU0hfQ0hBTl9JT19TT0NLX1J8U1NIX0NIQU5fSU9fU09DS19XKQorIAorIC8qIFJlYWQgYnVm ZmVyIHNpemUgKi8KKy0jZGVmaW5lIENIQU5fUkJVRgkoMTYqMTAyNCkKKysjZGVmaW5lIENIQU5f UkJVRglDSEFOX1NFU19QQUNLRVRfREVGQVVMVAorIAorIC8qIE1heGltdW0gc2l6ZSBmb3IgZGly ZWN0IHJlYWRzIHRvIGJ1ZmZlcnMgKi8KKyAjZGVmaW5lIENIQU5ORUxfTUFYX1JFQUQJQ0hBTl9T RVNfUEFDS0VUX0RFRkFVTFQKK0BAIC00MTQsNCArNDE1LDYgQEAKKyB2b2lkCSBjaGFuX3dyaXRl X2ZhaWxlZChzdHJ1Y3Qgc3NoICosIENoYW5uZWwgKik7Cisgdm9pZAkgY2hhbl9vYnVmX2VtcHR5 KHN0cnVjdCBzc2ggKiwgQ2hhbm5lbCAqKTsKKyAKKysvKiBocG4gaGFuZGxlciAqLworK3ZvaWQJ IGNoYW5uZWxfc2V0X2hwbl9kaXNhYmxlZChpbnQpOworICNlbmRpZgorZGlmZiAtTnVyIG9wZW5z c2gtMTAuNXAxLm9yaWcvY2lwaGVyLmMgb3BlbnNzaC0xMC41cDEvY2lwaGVyLmMKKy0tLSBvcGVu c3NoLTEwLjVwMS5vcmlnL2NpcGhlci5jCTIwMjYtMDktMjEgMDc6MDY6MDUuMjkwMTI1MDE1ICsw MjAwCisrKysgb3BlbnNzaC0xMC41cDEvY2lwaGVyLmMJMjAyNi0wOS0yMSAxMDo0NTowMi4xMzIy ODE1MDYgKzAyMDAKK0BAIC00NywyMyArNDcsNDAgQEAKKyAjaW5jbHVkZSAibWlzYy5oIgorICNp bmNsdWRlICJzc2hidWYuaCIKKyAjaW5jbHVkZSAic3NoZXJyLmgiCisrI2luY2x1ZGUgImRpZ2Vz dC5oIgorKyNpbmNsdWRlICJsb2cuaCIKKyAKKyAjaW5jbHVkZSAib3BlbmJzZC1jb21wYXQvb3Bl bnNzbC1jb21wYXQuaCIKKyAKKysvKiBmb3IgcHJvdmlkZXIgZnVuY3Rpb25zICovCisrI2lmZGVm IFdJVEhfT1BFTlNTTDMKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9wYXJhbXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9wcm92aWRlci5oPgorKyNlbmRpZgor KworICNpZm5kZWYgV0lUSF9PUEVOU1NMCisgI2RlZmluZSBFVlBfQ0lQSEVSX0NUWCB2b2lkCisr I2RlZmluZSBFVlBfQ0lQSEVSIHZvaWQKKysjZWxzZQorKy8qIGZvciBtdWx0aS10aHJlYWRlZCBh ZXMtY3RyIGNpcGhlciAqLworK2V4dGVybiBjb25zdCBFVlBfQ0lQSEVSICpldnBfYWVzX2N0cl9t dCh2b2lkKTsKKyAjZW5kaWYKKyAKKyBzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCB7CisgCWludAlwbGFp bnRleHQ7CisgCWludAllbmNyeXB0OworIAlFVlBfQ0lQSEVSX0NUWCAqZXZwOworKwljb25zdCBF VlBfQ0lQSEVSICptZXRoX3B0cjsgLyp1c2VkIHRvIGZyZWUgbWVtb3J5IGluIGFlc19jdHJfbXQg Ki8KKyAJc3RydWN0IGNoYWNoYXBvbHlfY3R4ICpjcF9jdHg7CisrI2lmZGVmIFdJVEhfT1BFTlNT TAorKwlzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNwX2N0eF9tdDsKKysjZW5kaWYKKyAJc3Ry dWN0IGFlc2N0cl9jdHggYWNfY3R4OyAvKiBYWFggdW5pb24gd2l0aCBldnA/ICovCisgCWNvbnN0 IHN0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcjsKKyB9OworIAorLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg c3NoY2lwaGVyIGNpcGhlcnNbXSA9IHsKKytzdGF0aWMgc3RydWN0IHNzaGNpcGhlciBjaXBoZXJz W10gPSB7CisgI2lmZGVmIFdJVEhfT1BFTlNTTAorICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAJ eyAiM2Rlcy1jYmMiLAkJOCwgMjQsIDAsIDAsIENGTEFHX0NCQywgRVZQX2Rlc19lZGUzX2NiYyB9 LAorQEAgLTg1LDYgKzEwMiwxMCBAQAorICNlbmRpZgorIAl7ICJjaGFjaGEyMC1wb2x5MTMwNUBv cGVuc3NoLmNvbSIsCisgCQkJCTgsIDY0LCAwLCAxNiwgQ0ZMQUdfQ0hBQ0hBUE9MWSwgTlVMTCB9 LAorKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJeyAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3No Lm9yZyIsCisrCQkJCTgsIDY0LCAwLCAxNiwgQ0ZMQUdfQ0hBQ0hBUE9MWXxDRkxBR19NVCwgTlVM TCB9LAorKyNlbmRpZgorIAl7ICJub25lIiwJCTgsIDAsIDAsIDAsIENGTEFHX05PTkUsIE5VTEwg fSwKKyAKKyAJeyBOVUxMLAkJCTAsIDAsIDAsIDAsIDAsIE5VTEwgfQorQEAgLTEyMSwxMiArMTQy LDYzIEBACisgI2VuZGlmCisgfQorIAorKy8qIHVzZWQgdG8gZ2V0IHRoZSBjaXBoZXIgbmFtZSB3 aGVuIHdlIGFyZSB0ZXN0aW5nIHRvCisrICogc2VlIGlmIHdlIGNhbiBtb3ZlIGZyb20gYSBzZXJp YWwgdG8gcGFyYWxsZWwgY2lwaGVyCisrICogb25seSBjYWxsZWQgaW4gY2lwaGVyLXN3aXRjaC5j CisrICovCisrY29uc3QgY2hhciAqCisrY2lwaGVyX2N0eF9uYW1lKGNvbnN0IHN0cnVjdCBzc2hj aXBoZXJfY3R4ICpjYykKKyt7CisrCXJldHVybiBjYy0+Y2lwaGVyLT5uYW1lOworK30KKysKKyB1 X2ludAorIGNpcGhlcl9ibG9ja3NpemUoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqYykKKyB7Cisg CXJldHVybiAoYy0+YmxvY2tfc2l6ZSk7CisgfQorIAorK3VpbnQ2NF90CisrY2lwaGVyX3Jla2V5 X2Jsb2Nrcyhjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQorK3sKKysJLyoKKysJICogQ2hhY2hh MjAtUG9seTEzMDUgZG9lcyBub3QgYmVuZWZpdCBmcm9tIGRhdGEtYmFzZWQgcmVrZXlpbmcsCisr CSAqIHBlciAiVGhlIFNlY3VyaXR5IG9mIENoYUNoYTIwLVBvbHkxMzA1IGluIHRoZSBNdWx0aS11 c2VyIFNldHRpbmciLAorKwkgKiBEZWdhYnJpZWxlLCBKLiBQLiwgR292aW5kZW4sIEosIEd1bnRo ZXIsIEYuIGFuZCBQYXRlcnNvbiBLLgorKwkgKiBBQ00gQ0NTIDIwMjE7IGh0dHBzOi8vZXByaW50 LmlhY3Iub3JnLzIwMjMvMDg1LnBkZgorKwkgKgorKwkgKiBDcnlwdGFuYWx5c2lzIGFzaWRlLCB3 ZSBkbyBzdGlsbCB3YW50IGRvIG5lZWQgdG8gcHJldmVudCB0aGUgU1NICisrCSAqIHNlcXVlbmNl IG51bWJlciB3cmFwcGluZyBhbmQgYWxzbyB0byByZWtleSB0byBwcm92aWRlIHNvbWUKKysJICog cHJvdGVjdGlvbiBmb3IgbG9uZyBsaXZlZCBzZXNzaW9ucyBhZ2FpbnN0IGtleSBkaXNjbG9zdXJl IGF0IHRoZQorKwkgKiBlbmRwb2ludHMsIHNvIGFycmFuZ2UgZm9yIHJla2V5aW5nIGV2ZXJ5IDIq KjMyIGJsb2NrcyBhcyB0aGUKKysJICogMTI4LWJpdCBibG9jayBjaXBoZXJzIGRvIChpLmUuIGV2 ZXJ5IDMyR0IgZGF0YSkuCisrCSAqLworKwlpZiAoKGMtPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9M WSkgIT0gMCkKKysJCXJldHVybiAodWludDY0X3QpMSA8PCAzMjsKKysKKysJLyogdGhlcmUgaXMg bm8gYWN0dWFsIG5lZWQgdG8gcmVrZXkgdGhlIE5VTEwgY2lwaGVyIGJ1dAorKwkgKiByZWtleWlu ZyBpcyBhIG5lY2Vzc2FyeSBzdGVwLiBJbiBwYXJ0LCBhcyBtZW50aW9uZWQgYWJvdmUsCisrCSAq IHRvIGtlZXAgdGhlIHNlcW5yIGZyb20gd3JhcHBpbmcuIFNvIHdlIHNldCBpdCB0byB0aGUKKysJ ICogbWF4aW11bSBwb3NzaWJsZSAtY2pyIDQvMTAvMjMgKi8KKysJaWYgKChjLT5mbGFncyAmIENG TEFHX05PTkUpICE9IDApCisrCQlyZXR1cm4gKHVpbnQ2NF90KTEgPDwgMzI7CisrCisrCS8qCisr CSAqIFRoZSAyXihibG9ja3NpemUqMikgbGltaXQgaXMgdG9vIGV4cGVuc2l2ZSBmb3IgM0RFUywK KysJICogc28gZW5mb3JjZSBhIDFHQiBkYXRhIGxpbWl0IGZvciBzbWFsbCBibG9ja3NpemVzLgor KwkgKiBTZWUgZGlzY3Vzc2lvbiBpbiBSRkM0MzQ0IHNlY3Rpb24gMy4yLgorKwkgKi8KKysJaWYg KGMtPmJsb2NrX3NpemUgPCAxNikKKysJCXJldHVybiAoKHVpbnQ2NF90KTEgPDwgMzApIC8gYy0+ YmxvY2tfc2l6ZTsKKysJLyoKKysJICogT3RoZXJ3aXNlLCB1c2UgdGhlIFJGQzQzNDQgczMuMiBy ZWNvbW1lbmRhdGlvbiBvZiAyKiooTC80KSBibG9ja3MKKysJICogYmVmb3JlIHJla2V5aW5nIHdo ZXJlIEwgaXMgdGhlIGJsb2Nrc2l6ZSBpbiBiaXRzLgorKwkgKiBNb3N0IG90aGVyIGNpcGhlcnMg aGF2ZSBhIDEyOCBiaXQgYmxvY2tzaXplLCBzbyB0aGlzIGVxdWF0ZXMgdG8KKysJICogMioqMzIg YmxvY2tzIC8gNjRHQiBkYXRhLgorKwkgKi8KKysJcmV0dXJuICh1aW50NjRfdCkxIDw8IChjLT5i bG9ja19zaXplICogMik7CisrfQorKworIHVfaW50CisgY2lwaGVyX2tleWxlbihjb25zdCBzdHJ1 Y3Qgc3NoY2lwaGVyICpjKQorIHsKK0BAIC0xNzYsMTAgKzI0OCwxMCBAQAorIAlyZXR1cm4gY2Mt PnBsYWludGV4dDsKKyB9CisgCistY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqCisrc3RydWN0IHNz aGNpcGhlciAqCisgY2lwaGVyX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKKyB7CistCWNvbnN0 IHN0cnVjdCBzc2hjaXBoZXIgKmM7CisrCXN0cnVjdCBzc2hjaXBoZXIgKmM7CisgCWZvciAoYyA9 IGNpcGhlcnM7IGMtPm5hbWUgIT0gTlVMTDsgYysrKQorIAkJaWYgKHN0cmNtcChjLT5uYW1lLCBu YW1lKSA9PSAwKQorIAkJCXJldHVybiBjOworQEAgLTIwMiw3ICsyNzQsOCBAQAorIAlmb3IgKChw ID0gc3Ryc2VwKCZjcCwgQ0lQSEVSX1NFUCkpOyBwICYmICpwICE9ICdcMCc7CisgCSAgICAocCA9 IHN0cnNlcCgmY3AsIENJUEhFUl9TRVApKSkgeworIAkJYyA9IGNpcGhlcl9ieV9uYW1lKHApOwor LQkJaWYgKGMgPT0gTlVMTCB8fCAoYy0+ZmxhZ3MgJiBDRkxBR19JTlRFUk5BTCkgIT0gMCkgewor KwkJaWYgKGMgPT0gTlVMTCB8fCAoKGMtPmZsYWdzICYgQ0ZMQUdfSU5URVJOQUwpICE9IDAgJiYK KysJCQkJICAoYy0+ZmxhZ3MgJiBDRkxBR19OT05FKSAhPSAwKSkgeworIAkJCWZyZWUoY2lwaGVy X2xpc3QpOworIAkJCXJldHVybiAwOworIAkJfSBlbHNlCitAQCAtMjI0LDcgKzI5Nyw3IEBACisg aW50CisgY2lwaGVyX2luaXQoc3RydWN0IHNzaGNpcGhlcl9jdHggKipjY3AsIGNvbnN0IHN0cnVj dCBzc2hjaXBoZXIgKmNpcGhlciwKKyAgICAgY29uc3QgdV9jaGFyICprZXksIHVfaW50IGtleWxl biwgY29uc3QgdV9jaGFyICppdiwgdV9pbnQgaXZsZW4sCistICAgIGludCBkb19lbmNyeXB0KQor KyAgICB1X2ludCBzZXFuciwgaW50IGRvX2VuY3J5cHQsIGludCBlbmFibGVfdGhyZWFkcykKKyB7 CisgCXN0cnVjdCBzc2hjaXBoZXJfY3R4ICpjYyA9IE5VTEw7CisgCWludCByZXQgPSBTU0hfRVJS X0lOVEVSTkFMX0VSUk9SOworQEAgLTIzOSw2ICszMTIsNyBAQAorIAorIAljYy0+cGxhaW50ZXh0 ID0gKGNpcGhlci0+ZmxhZ3MgJiBDRkxBR19OT05FKSAhPSAwOworIAljYy0+ZW5jcnlwdCA9IGRv X2VuY3J5cHQ7CisrCWNjLT5tZXRoX3B0ciA9IE5VTEw7CisgCisgCWlmIChrZXlsZW4gPCBjaXBo ZXItPmtleV9sZW4gfHwKKyAJICAgIChpdiAhPSBOVUxMICYmIGl2bGVuIDwgY2lwaGVyX2l2bGVu KGNpcGhlcikpKSB7CitAQCAtMjQ4LDggKzMyMiwxOSBAQAorIAorIAljYy0+Y2lwaGVyID0gY2lw aGVyOworIAlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkg eworKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxB R19NVCkgIT0gMCkgeworKwkJCWNjLT5jcF9jdHhfbXQgPSBjaGFjaGFwb2x5X25ld19tdChzZXFu ciwga2V5LCBrZXlsZW4pOworKwkJCXJldCA9IGNjLT5jcF9jdHhfbXQgIT0gTlVMTCA/IDAgOgor KwkJCSAgICBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisrCQl9IGVsc2UgeworKwkJCWNjLT5j cF9jdHggPSBjaGFjaGFwb2x5X25ldyhrZXksIGtleWxlbik7CisrCQkJcmV0ID0gY2MtPmNwX2N0 eCAhPSBOVUxMID8gMCA6IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKysJCX0KKysjZWxzZQor IAkJY2MtPmNwX2N0eCA9IGNoYWNoYXBvbHlfbmV3KGtleSwga2V5bGVuKTsKKyAJCXJldCA9IGNj LT5jcF9jdHggIT0gTlVMTCA/IDAgOiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisrI2VuZGlm CisgCQlnb3RvIG91dDsKKyAJfQorIAlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfTk9O RSkgIT0gMCkgeworQEAgLTI3MSw2ICszNTYsNTMgQEAKKyAJCXJldCA9IFNTSF9FUlJfQUxMT0Nf RkFJTDsKKyAJCWdvdG8gb3V0OworIAl9CisrCS8qIHRoZSBmb2xsb3dpbmcgYmxvY2sgaXMgZm9y IEFFUy1DVFItTVQgY2lwaGVyIHN3aXRjaGluZworKwkgKiBpZiB3ZSBhcmUgdXNpbmcgdGhlIGN0 ciBjaXBoZXIgYW5kIHdlIGFyZSBwb3N0LWF1dGggdGhlbgorKwkgKiBzdGFydCB0aGUgdGhyZWFk ZWQgY2lwaGVyLiBJZiBPU1NMIHN1cHBvcnRzIHByb3ZpZGVycyAoT1NTTCAzLjArKSB0aGVuCisr CSAqIHdlIGxvYWQgb3VyIGhwbnNzaCBwcm92aWRlci4gSWYgaXQgZG9lc24ndCAoT1NTTCA8IDEu MSkgdGhlbiB3ZSB1c2UgdGhlCisrCSAqIF9tZXRoX25ldyBwcm9jZXNzIGZvdW5kIGluIGNpcGhl ci1jdHItbXQuYyAqLworKwlpZiAoc3Ryc3RyKGNjLT5jaXBoZXItPm5hbWUsICJjdHIiKSAmJiBl bmFibGVfdGhyZWFkcykgeworKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrCQkvKiB0aGlzIHZlcnNp b24gb2Ygb3BlbnNzbCB1c2VzIHByb3ZpZGVycyAqLworKwkJT1NTTF9MSUJfQ1RYICphZXNfbGli ID0gTlVMTDsgLyogcHJvYmFibHkgbm90IG5lZWRlZCAqLworKwkJT1NTTF9QUk9WSURFUiAqYWVz X210X3Byb3ZpZGVyID0gTlVMTDsKKysJCXR5cGUgPSBOVUxMOworKworKwkJaWYgKE9TU0xfUFJP VklERVJfYWRkX2J1aWx0aW4oYWVzX2xpYiwgImhwbnNzaCIsCisrCQkJCQkgICAgICBPU1NMX3By b3ZpZGVyX2luaXQpICE9IDEpIHsKKysJCQlmYXRhbCgiRmFpbGVkIHRvIGFkZCBIUE5TU0ggcHJv dmlkZXIgZm9yIEFFUy1DVFIiKTsKKysJCX0KKysJCWFlc19tdF9wcm92aWRlciA9IE9TU0xfUFJP VklERVJfbG9hZChhZXNfbGliLCAiaHBuc3NoIik7CisrCisrCQlpZiAoYWVzX210X3Byb3ZpZGVy ICE9IE5VTEwpIHsKKysJCQkvKiB1c2UgdGhlIHByZXZpb3VzIGtleSBsZW5ndGggdG8gZGV0ZXJt aW5lIHdoaWNoIGNpcGhlciB0byBsb2FkICovCisrCQkJaWYgKGNpcGhlci0+a2V5X2xlbiA9PSAz MikKKysJCQkJdHlwZSA9IEVWUF9DSVBIRVJfZmV0Y2goYWVzX2xpYiwgImFlc19jdHJfbXRfMjU2 IiwgTlVMTCk7CisrCQkJaWYgKGNpcGhlci0+a2V5X2xlbiA9PSAyNCkKKysJCQkJdHlwZSA9IEVW UF9DSVBIRVJfZmV0Y2goYWVzX2xpYiwgImFlc19jdHJfbXRfMTkyIiwgTlVMTCk7CisrCQkJaWYg KGNpcGhlci0+a2V5X2xlbiA9PSAxNikKKysJCQkJdHlwZSA9IEVWUF9DSVBIRVJfZmV0Y2goYWVz X2xpYiwgImFlc19jdHJfbXRfMTI4IiwgTlVMTCk7CisrCQkJaWYgKHR5cGUgPT0gTlVMTCkgewor KwkJCQlFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisrCQkJCWZhdGFsKCJGQUlMRUQgVE8g TE9BRCBhZXNfY3RyX210Iik7CisrCQkJfSBlbHNlIHsKKysJCQkJZGVidWcoIkxPQURFRCBhZXNf Y3RyX210Iik7CisrCQkJfQorKwkJfQorKwkJZWxzZSB7CisrCQkJRVJSX3ByaW50X2Vycm9yc19m cChzdGRlcnIpOworKwkJCWZhdGFsKCJGYWlsZWQgdG8gbG9hZCBIUE4tU1NIIEFFUy1DVFItTVQg cHJvdmlkZXIuIik7CisrCQl9CisrI2Vsc2UKKysJCXR5cGUgPSAoKmV2cF9hZXNfY3RyX210KSgp OyAvKiBzZWUgY2lwaGVyLWN0ci1tdC5jICovCisrCQkvKiB3ZSBuZWVkIHRvIGZyZWUgdGhpcyBs YXRlciBpZiB1c2luZyBhZXNfY3RyX210CisrCQkgKiB1bmRlciBPU1NMIDEuMS4gSG9uZXN0bHks IHdlIGNvdWxkIGF2b2lkIHRoaXMgYnkgbWFraW5nCisrCQkgKiBpdCBhIGdsb2JhbCBpbiBjaXBo ZXItY3RyX210LmMgYW5kIGV4cG9ydGluZyBpdCBoZXJlCisrCQkgKiB0aGVuIHdlJ2Qgb25seSBo YXZlIHRvIGNhbGwgRVZQX0NJUEhFUl9tZXRoIG9uY2UgYnV0IHRoaXMKKysJCSAqIHdvcmtzIGZv ciBub3cuIFRPRE86IFRoaXMuIGNqciAwMi4yMi4yMDIzICovCisrCQljYy0+bWV0aF9wdHIgPSB0 eXBlOworKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wzICovCisrCX0gLyogaWYgKHN0cnN0cigpKSAq LworIAlpZiAoRVZQX0NpcGhlckluaXQoY2MtPmV2cCwgdHlwZSwgTlVMTCwgKHVfY2hhciAqKWl2 LAorIAkgICAgKGRvX2VuY3J5cHQgPT0gQ0lQSEVSX0VOQ1JZUFQpKSA9PSAwKSB7CisgCQlyZXQg PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKK0BAIC0zMjUsNiArNDU3LDEyIEBACisgICAgY29u c3QgdV9jaGFyICpzcmMsIHVfaW50IGxlbiwgdV9pbnQgYWFkbGVuLCB1X2ludCBhdXRobGVuKQor IHsKKyAJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDApIHsK KysjaWZkZWYgV0lUSF9PUEVOU1NMCisrCQlpZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdf TVQpICE9IDApIHsKKysJCQlyZXR1cm4gY2hhY2hhcG9seV9jcnlwdF9tdChjYy0+Y3BfY3R4X210 LCBzZXFuciwgZGVzdCwKKysJCQkgICAgc3JjLCBsZW4sIGFhZGxlbiwgYXV0aGxlbiwgY2MtPmVu Y3J5cHQpOworKwkJfQorKyNlbmRpZgorIAkJcmV0dXJuIGNoYWNoYXBvbHlfY3J5cHQoY2MtPmNw X2N0eCwgc2VxbnIsIGRlc3QsIHNyYywKKyAJCSAgICBsZW4sIGFhZGxlbiwgYXV0aGxlbiwgY2Mt PmVuY3J5cHQpOworIAl9CitAQCAtMzg3LDkgKzUyNSwxNiBAQAorIGNpcGhlcl9nZXRfbGVuZ3Ro KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICpjYywgdV9pbnQgKnBsZW5wLCB1X2ludCBzZXFuciwKKyAg ICAgY29uc3QgdV9jaGFyICpjcCwgdV9pbnQgbGVuKQorIHsKKy0JaWYgKChjYy0+Y2lwaGVyLT5m bGFncyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDApCisrCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3Mg JiBDRkxBR19DSEFDSEFQT0xZKSAhPSAwKSB7CisrI2lmZGVmIFdJVEhfT1BFTlNTTAorKwkJaWYg KChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX01UKSAhPSAwKSB7CisrCQkJcmV0dXJuIGNoYWNo YXBvbHlfZ2V0X2xlbmd0aF9tdChjYy0+Y3BfY3R4X210LCBwbGVucCwKKysJCQkgICAgc2VxbnIs IGNwLCBsZW4pOworKwkJfQorKyNlbmRpZgorIAkJcmV0dXJuIGNoYWNoYXBvbHlfZ2V0X2xlbmd0 aChjYy0+Y3BfY3R4LCBwbGVucCwgc2VxbnIsCisgCQkgICAgY3AsIGxlbik7CisrCX0KKyAJaWYg KGxlbiA8IDQpCisgCQlyZXR1cm4gU1NIX0VSUl9NRVNTQUdFX0lOQ09NUExFVEU7CisgCSpwbGVu cCA9IFBFRUtfVTMyKGNwKTsKK0BAIC00MDIsMTMgKzU0NywzNSBAQAorIAlpZiAoY2MgPT0gTlVM TCB8fCBjYy0+Y2lwaGVyID09IE5VTEwpCisgCQlyZXR1cm47CisgCWlmICgoY2MtPmNpcGhlci0+ ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAhPSAwKSB7CisrI2lmZGVmIFdJVEhfT1BFTlNTTAor KwkJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX01UKSAhPSAwKSB7CisrCQkJY2hhY2hh cG9seV9mcmVlX210KGNjLT5jcF9jdHhfbXQpOworKwkJCWNjLT5jcF9jdHhfbXQgPSBOVUxMOwor KwkJfSBlbHNlIHsKKysJCQljaGFjaGFwb2x5X2ZyZWUoY2MtPmNwX2N0eCk7CisrCQkJY2MtPmNw X2N0eCA9IE5VTEw7CisrCQl9CisrI2Vsc2UKKyAJCWNoYWNoYXBvbHlfZnJlZShjYy0+Y3BfY3R4 KTsKKyAJCWNjLT5jcF9jdHggPSBOVUxMOworKyNlbmRpZgorIAl9IGVsc2UgaWYgKChjYy0+Y2lw aGVyLT5mbGFncyAmIENGTEFHX0FFU0NUUikgIT0gMCkKKyAJCWV4cGxpY2l0X2J6ZXJvKCZjYy0+ YWNfY3R4LCBzaXplb2YoY2MtPmFjX2N0eCkpOworICNpZmRlZiBXSVRIX09QRU5TU0wKKyAJRVZQ X0NJUEhFUl9DVFhfZnJlZShjYy0+ZXZwKTsKKyAJY2MtPmV2cCA9IE5VTEw7CisrCS8qIGlmIG1l dGhfcHRyIGlzbid0IG51bGwgdGhlbiB3ZSBhcmUgdXNpbmcgdGhlIGFlc19jdHJfbXQKKysJICog ZXZwX2NpcGhlcl9tZXRoX25ldygpIGluIGNpcGhlci1jdHItbXQuYyB1bmRlciBPU1NMIDEuMQor KwkgKiBpZiB3ZSBkb24ndCBleHBsaWNpdGx5IGZyZWUgaXQgdGhlbiwgZXZlbiB0aG91Z2ggd2Ug ZnJlZQorKwkgKiB0aGUgY3R4IGl0IGlzIGEgcGFydCBvZiBpdCBkb2Vzbid0IGdldCBmcmVlZC4g U28uLi4KKysJICogY2pyIDIvNy8yMDIzCisrCSAqLworKyNpZiAhZGVmaW5lZChXSVRIX09QRU5T U0wzKQorKwlpZiAoY2MtPm1ldGhfcHRyICE9IE5VTEwpIHsKKysJCUVWUF9DSVBIRVJfbWV0aF9m cmVlKCh2b2lkICopKEVWUF9DSVBIRVIgKiljYy0+bWV0aF9wdHIpOworKwkJY2MtPm1ldGhfcHRy ID0gTlVMTDsKKysJfQorKyNlbmRpZgorICNlbmRpZgorIAlmcmVlemVybyhjYywgc2l6ZW9mKCpj YykpOworIH0KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5 LmMgb3BlbnNzaC0xMC41cDEvY2lwaGVyLWNoYWNoYXBvbHkuYworLS0tIG9wZW5zc2gtMTAuNXAx Lm9yaWcvY2lwaGVyLWNoYWNoYXBvbHkuYwkyMDI2LTA4LTExIDA0OjIyOjE3LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NpcGhlci1jaGFjaGFwb2x5LmMJMjAyNi0wOS0yMSAw NzowNjo1OS44ODM4MDQ0OTIgKzAyMDAKK0BAIC04OCw3ICs4OCw3IEBACisgCWlmICghZG9fZW5j cnlwdCkgeworIAkJY29uc3QgdV9jaGFyICp0YWcgPSBzcmMgKyBhYWRsZW4gKyBsZW47CisgCist CQlwb2x5MTMwNV9hdXRoKGV4cGVjdGVkX3RhZywgc3JjLCBhYWRsZW4gKyBsZW4sIHBvbHlfa2V5 KTsKKysJCXBvbHkxMzA1X2F1dGgoTlVMTCwgZXhwZWN0ZWRfdGFnLCBzcmMsIGFhZGxlbiArIGxl biwgcG9seV9rZXkpOworIAkJaWYgKHRpbWluZ3NhZmVfYmNtcChleHBlY3RlZF90YWcsIHRhZywg UE9MWTEzMDVfVEFHTEVOKSAhPSAwKSB7CisgCQkJciA9IFNTSF9FUlJfTUFDX0lOVkFMSUQ7Cisg CQkJZ290byBvdXQ7CitAQCAtMTA4LDcgKzEwOCw3IEBACisgCisgCS8qIElmIGVuY3J5cHRpbmcs IGNhbGN1bGF0ZSBhbmQgYXBwZW5kIHRhZyAqLworIAlpZiAoZG9fZW5jcnlwdCkgeworLQkJcG9s eTEzMDVfYXV0aChkZXN0ICsgYWFkbGVuICsgbGVuLCBkZXN0LCBhYWRsZW4gKyBsZW4sCisrCQlw b2x5MTMwNV9hdXRoKE5VTEwsIGRlc3QgKyBhYWRsZW4gKyBsZW4sIGRlc3QsIGFhZGxlbiArIGxl biwKKyAJCSAgICBwb2x5X2tleSk7CisgCX0KKyAJciA9IDA7CitkaWZmIC1OdXIgb3BlbnNzaC0x MC41cDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8uYyBvcGVuc3NoLTEwLjVwMS9j aXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8uYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lw aGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLmMJMjAyNi0wOC0xMSAwNDoyMjoxNy4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8uYwky MDI2LTA5LTIxIDA3OjA2OjU5Ljg4NDA2MzY2OSArMDIwMAorQEAgLTMyLDggKzMyLDE4IEBACisg I2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNsdWRlICJjaXBoZXItY2hhY2hhcG9seS5oIgorIAor KworKy8qIHVzaW5nIHRoZSBFVlBfTUFDIGludGVyZmFjZSBmb3IgcG9seTEzMDUgaXMgc2lnbmlm aWNhbnRseQorKyAqIGZhc3RlciB0aGFuIHRoZSB2ZXJzaW9uIGJ1bmRsZWQgd2l0aCBPcGVuU1NI LiBIb3dldmVyLAorKyAqIHRoaXMgaW50ZXJmYWNlIGlzIG9ubHkgYXZhaWxhYmxlIGluIE9wZW5T U0wgMy4wKworKyAqIC1janIgMTAvMjEvMjAyMiAqLworIHN0cnVjdCBjaGFjaGFwb2x5X2N0eCB7 CisgCUVWUF9DSVBIRVJfQ1RYICptYWluX2V2cCwgKmhlYWRlcl9ldnA7CisrI2lmZGVmIE9QRU5T U0xfSEFWRV9QT0xZX0VWUAorKwlFVlBfTUFDX0NUWCAgICAqcG9seV9jdHg7CisrI2Vsc2UKKysJ Y2hhciAgICAgICAgICAgKnBvbHlfY3R4OworKyNlbmRpZgorIH07CisgCisgc3RydWN0IGNoYWNo YXBvbHlfY3R4ICoKK0BAIC01NCw2ICs2NCwxNSBAQAorIAkJZ290byBmYWlsOworIAlpZiAoRVZQ X0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGN0eC0+aGVhZGVyX2V2cCkgIT0gMTYpCisgCQlnb3RvIGZh aWw7CisrI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAorKwlFVlBfTUFDICptYWMgPSBOVUxM OworKwlpZiAoKG1hYyA9IEVWUF9NQUNfZmV0Y2goTlVMTCwgIlBPTFkxMzA1IiwgTlVMTCkpID09 IE5VTEwpCisrCQlnb3RvIGZhaWw7CisrCWlmICgoY3R4LT5wb2x5X2N0eCA9IEVWUF9NQUNfQ1RY X25ldyhtYWMpKSA9PSBOVUxMKQorKwkJZ290byBmYWlsOworKyNlbHNlCisrCWN0eC0+cG9seV9j dHggPSBOVUxMOworKyNlbmRpZgorIAlyZXR1cm4gY3R4OworICBmYWlsOgorIAljaGFjaGFwb2x5 X2ZyZWUoY3R4KTsKK0BAIC02Nyw2ICs4Niw5IEBACisgCQlyZXR1cm47CisgCUVWUF9DSVBIRVJf Q1RYX2ZyZWUoY3BjdHgtPm1haW5fZXZwKTsKKyAJRVZQX0NJUEhFUl9DVFhfZnJlZShjcGN0eC0+ aGVhZGVyX2V2cCk7CisrI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAorKwlFVlBfTUFDX0NU WF9mcmVlKGNwY3R4LT5wb2x5X2N0eCk7CisrI2VuZGlmCisgCWZyZWV6ZXJvKGNwY3R4LCBzaXpl b2YoKmNwY3R4KSk7CisgfQorIAorQEAgLTEwNSw3ICsxMjcsNyBAQAorIAlpZiAoIWRvX2VuY3J5 cHQpIHsKKyAJCWNvbnN0IHVfY2hhciAqdGFnID0gc3JjICsgYWFkbGVuICsgbGVuOworIAorLQkJ cG9seTEzMDVfYXV0aChleHBlY3RlZF90YWcsIHNyYywgYWFkbGVuICsgbGVuLCBwb2x5X2tleSk7 CisrCQlwb2x5MTMwNV9hdXRoKGN0eC0+cG9seV9jdHgsIGV4cGVjdGVkX3RhZywgc3JjLCBhYWRs ZW4gKyBsZW4sIHBvbHlfa2V5KTsKKyAJCWlmICh0aW1pbmdzYWZlX2JjbXAoZXhwZWN0ZWRfdGFn LCB0YWcsIFBPTFkxMzA1X1RBR0xFTikgIT0gMCkgeworIAkJCXIgPSBTU0hfRVJSX01BQ19JTlZB TElEOworIAkJCWdvdG8gb3V0OworQEAgLTEzMSw3ICsxNTMsNyBAQAorIAorIAkvKiBJZiBlbmNy eXB0aW5nLCBjYWxjdWxhdGUgYW5kIGFwcGVuZCB0YWcgKi8KKyAJaWYgKGRvX2VuY3J5cHQpIHsK Ky0JCXBvbHkxMzA1X2F1dGgoZGVzdCArIGFhZGxlbiArIGxlbiwgZGVzdCwgYWFkbGVuICsgbGVu LAorKwkJcG9seTEzMDVfYXV0aChjdHgtPnBvbHlfY3R4LCBkZXN0ICsgYWFkbGVuICsgbGVuLCBk ZXN0LCBhYWRsZW4gKyBsZW4sCisgCQkgICAgcG9seV9rZXkpOworIAl9CisgCXIgPSAwOworZGlm ZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10 LmMgb3BlbnNzaC0xMC41cDEvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmMKKy0tLSBv cGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5jCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvY2lwaGVy LWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODQzNTM0NTkg KzAyMDAKK0BAIC0wLDAgKzEsNzA4IEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMjMgVGhl IEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgorKyAqCisr ICogIEF1dGhvcjogTWl0Y2hlbGwgRG9ycmVsbCA8bXdkQHBzYy5lZHU+CisrICogIEF1dGhvcjog Q2hyaXMgUmFwaWVyICA8cmFwaWVyQHBzYy5lZHU+CisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor KyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCisrICoKKysgKiBUaGlzIGxp YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwg YnV0IFdJVEhPVVQKKysgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKysgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgor KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIE1JVCBMaWNlbnNlIGFs b25nIHdpdGggdGhpcyBsaWJyYXJ5OworKyAqIGlmIG5vdCwgc2VlIGh0dHA6Ly9vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9NSVQuCisrICoKKysgKi8KKysKKysvKiBUT0RPOiBhdWRpdCBpbmNsdWRl cyAqLworKworKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorKyNpZmRlZiBXSVRIX09QRU5TU0wKKysj aW5jbHVkZSAib3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaCIKKysjZW5kaWYKKysKKysj aWYgZGVmaW5lZChIQVZFX0VWUF9DSEFDSEEyMCkgJiYgIWRlZmluZWQoSEFWRV9CUk9LRU5fQ0hB Q0hBMjApCisrCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4g LyogbmVlZGVkIGZvciBnZXRwaWQgdW5kZXIgQzk5ICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPiAv KiBuZWVkZWQgZm9yIGxvZy5oICovCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxz dGRpby5oPiAgLyogbmVlZGVkIGZvciBtaXNjLmggKi8KKysjaW5jbHVkZSA8cHRocmVhZC5oPgor KworKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworKyNpbmNsdWRlICJkZWZpbmVzLmgiCisr I2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRlICJzc2hidWYuaCIKKysjaW5jbHVkZSAic3NoZXJy LmgiCisrCisrI2luY2x1ZGUgInhtYWxsb2MuaCIKKysjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBv bHkuaCIKKysjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmgiCisrCisr I2lmbmRlZiBsaWtlbHkKKysjIGRlZmluZSBsaWtlbHkoeCkgICBfX2J1aWx0aW5fZXhwZWN0KCEh KHgpLCAxKQorKyNlbmRpZgorKyNpZm5kZWYgdW5saWtlbHkKKysjIGRlZmluZSB1bmxpa2VseSh4 KSBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAwKQorKyNlbmRpZgorKworKy8qIFNpemUgb2Yga2V5 c3RyZWFtIHRvIHByZWdlbmVyYXRlLCBtZWFzdXJlZCBpbiBieXRlcworKyAqIHdlIHdhbnQgdG8g cm91bmQgdXAgdG8gdGhlIG5lYXJlc3QgY2hhY2hhIGJsb2NrIGFuZCBoYXZlCisrICogMTI4IGJ5 dGVzIGZvciBvdmVyaGVhZCAqLworKyNkZWZpbmUgUk9VTkRfVVAoeCx5KSAoKCgoKHgpLTEpLyh5 KSkrMSkqKHkpKQorKyNkZWZpbmUgS0VZU1RSRUFNTEVOIChST1VORF9VUCgoU1NIX0lPQlVGU1op ICsgMTI4LCAoQ0hBQ0hBX0JMT0NLTEVOKSkpCisrCisrLyogQkVHSU4gVFVOQUJMRVMgKi8KKysK KysvKiBOdW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgdG8gc3Bhd24uICovCisrLyogdGhlIGdvYWwg aXMgdG8gZW5zdXJlIHRoYXQgbWFpbiBpcyBuZXZlcgorKyAqIHdhaXRpbmcgb24gdGhlIHdvcmtl ciB0aHJlYWRzIGZvciBrZXlzdHJlYW0gZGF0YSAqLworKyNkZWZpbmUgTlVNVEhSRUFEUyAxCisr CisrLyogNjQgc2VlbXMgdG8gYmUgYSBwcmV0dHkgYmxhbmNlIGJldHdlZW4gbWVtb3J5IGFuZCBw ZXJmb3JtYW5jZQorKyAqIDEyOCBpcyBhbm90aGVyIG9wdGlvbiB3aXRoIHNvbWV3aGF0IGhpZ2hl ciBtZW1vcnkgY29uc3VtcHRpb24gKi8KKysjZGVmaW5lIE5VTVNUUkVBTVMgNjQKKysKKysvKiBF TkQgVFVOQUJMRVMgKi8KKysKKytzdHJ1Y3QgbXRfa2V5c3RyZWFtIHsKKysJdV9jaGFyIHBvbHlf a2V5W1BPTFkxMzA1X0tFWUxFTl07ICAgICAvKiBQT0xZMTMwNV9LRVlMRU4gPT0gMzIgKi8KKysJ dV9jaGFyIGhlYWRlclN0cmVhbVtDSEFDSEFfQkxPQ0tMRU5dOyAvKiBDSEFDSEFfQkxPQ0tMRU4g PT0gNjQgKi8KKysJdV9jaGFyIG1haW5TdHJlYW1bS0VZU1RSRUFNTEVOXTsgICAgICAvKiBLRVlT VFJFQU1MRU4gPT0gMzI3NjggKi8KKyt9OworKworK3N0cnVjdCB0aHJlYWREYXRhIHsKKysJRVZQ X0NJUEhFUl9DVFggKiBtYWluX2V2cDsKKysJRVZQX0NJUEhFUl9DVFggKiBoZWFkZXJfZXZwOwor Kwl1X2NoYXIgc2VxYnVmWzE2XTsKKyt9OworKworK3N0cnVjdCBtdF9rZXlzdHJlYW1fYmF0Y2gg eworKwl1X2ludCBiYXRjaElEOworKwlzdHJ1Y3QgdGhyZWFkRGF0YSB0ZHNbTlVNVEhSRUFEU107 CisrCXN0cnVjdCBtdF9rZXlzdHJlYW0gc3RyZWFtc1tOVU1TVFJFQU1TXTsKKyt9OworKworK3N0 cnVjdCBjaGFjaGFwb2x5X2N0eF9tdCB7CisrCXVfaW50IHNlcW5yOworKwl1X2ludCBiYXRjaElE OworKworKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNoIGJhdGNoZXNbMl07CisrCisrCXB0aHJl YWRfdCBtYW5hZ2VyX3RpZFsyXTsKKysJcHRocmVhZF90IHNlbGZfdGlkOworKworKwlwaWRfdCBt YWlucGlkOworKwl1X2NoYXIgemVyb3NbS0VZU1RSRUFNTEVOXTsgLyogS0VZU1RSRUFNTEVOID09 IDMyNzY4ICovCisrCisrICAvKiBpZiBPcGVuU1NMIGhhcyBzdXBwb3J0IGZvciBQb2x5MTMwNSBp biB0aGUgTUFDIEVWUHMKKysgICAqIHVzZSB0aGF0IChPU1NMID49IDMuMCkgaWYgbm90IHRoZW4g aXQncyBPU1NMIDEuMSBzbworKyAgICogdXNlIHRoZSBQb2x5MTMwNSBkaWdlc3QgbWV0aG9kcy4g RmFpbGluZyB0aGF0IHVzZSB0aGUKKysgICAqIGludGVybmFsIHBvbHkxMzA1IG1ldGhvZHMgKi8K KysjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQCisrCUVWUF9NQUNfQ1RYICAgICpwb2x5X2N0 eDsKKysjZWxpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9QS0VZX1BP TFkxMzA1KQorKwlFVlBfUEtFWV9DVFggICAqcG9seV9jdHg7CisrCUVWUF9NRF9DVFggICAgICpt ZF9jdHg7CisrCUVWUF9QS0VZICAgICAgICpwa2V5OworKwlzaXplX3QgICAgICAgICBwdGFnbGVu OworKyNlbHNlCisrCWNoYXIgICAgICAgICAgICpwb2x5X2N0eDsKKysjZW5kaWYKKyt9OworKwor K3N0cnVjdCBtYW5hZ2VyX3RocmVhZF9hcmdzIHsKKysJc3RydWN0IGNoYWNoYXBvbHlfY3R4X210 ICogY3R4X210OworKwl1X2ludCBvbGRCYXRjaElEOworKwlpbnQgcmV0dmFsOworK307CisrCisr c3RydWN0IHdvcmtlcl90aHJlYWRfYXJncyB7CisrCXVfaW50IGJhdGNoSUQ7CisrCXN0cnVjdCBt dF9rZXlzdHJlYW1fYmF0Y2ggKiBiYXRjaDsKKysJaW50IHRocmVhZEluZGV4OworKwl1X2NoYXIg KiB6ZXJvczsKKysJaW50IHJldHZhbDsKKyt9OworKworKy8qIGdlbmVyYXRlIHRoZSBrZXlzdHJl YW0gYW5kIGhlYWRlcgorKyAqIHdlIHVzZSBudWxscyBmb3IgdGhlICJkYXRhIiAodGhlIHplcm9z IHZhcmlhYmxlKSBpbiBvcmRlciB0bworKyAqIGdldCB0aGUgcmF3IGtleXN0cmVhbQorKyAqIFJl dHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlICovCisraW50CisrZ2VuZXJhdGVf a2V5c3RyZWFtKHN0cnVjdCBtdF9rZXlzdHJlYW0gKiBrcywgdV9pbnQgc2VxbnIsCisrICAgIHN0 cnVjdCB0aHJlYWREYXRhICogdGQsIHVfY2hhciAqIHplcm9zKQorK3sKKysJLyogZ2VuZXJhdGUg cG9seTEzMDUga2V5ICovCisrCW1lbXNldCh0ZC0+c2VxYnVmLCAwLCBzaXplb2YodGQtPnNlcWJ1 ZikpOworKwlQT0tFX1U2NCh0ZC0+c2VxYnVmICsgOCwgc2VxbnIpOworKwltZW1zZXQoa3MtPnBv bHlfa2V5ICwgMCwgc2l6ZW9mKGtzLT5wb2x5X2tleSkpOworKwlpZiAoIUVWUF9DaXBoZXJJbml0 KHRkLT5tYWluX2V2cCwgTlVMTCwgTlVMTCwgdGQtPnNlcWJ1ZiwgMSkgfHwKKysJICAgIEVWUF9D aXBoZXIodGQtPm1haW5fZXZwLCBrcy0+cG9seV9rZXksIGtzLT5wb2x5X2tleSwKKysJICAgIHNp emVvZihrcy0+cG9seV9rZXkpKSA8IDApCisrCQlyZXR1cm4gLTE7CisrCisrCS8qIGdlbmVyYXRl IGhlYWRlciBrZXlzdHJlYW0gZm9yIGVuY3J5cHRpbmcgcGF5bG9hZCBsZW5ndGggKi8KKysJaWYg KCFFVlBfQ2lwaGVySW5pdCh0ZC0+aGVhZGVyX2V2cCwgTlVMTCwgTlVMTCwgdGQtPnNlcWJ1Ziwg MSkgfHwKKysJICAgIEVWUF9DaXBoZXIodGQtPmhlYWRlcl9ldnAsIGtzLT5oZWFkZXJTdHJlYW0s IHplcm9zLCBDSEFDSEFfQkxPQ0tMRU4pCisrCSAgICA8IDAgKQorKwkJcmV0dXJuIC0xOworKwor KwkvKiBnZW5lcmF0ZSBtYWluIGtleXN0cmVhbSBmb3IgZW5jcnlwdGluZyBwYXlsb2FkICovCisr CXRkLT5zZXFidWZbMF0gPSAxOworKwlpZiAoIUVWUF9DaXBoZXJJbml0KHRkLT5tYWluX2V2cCwg TlVMTCwgTlVMTCwgdGQtPnNlcWJ1ZiwgMSkgfHwKKysJICAgIEVWUF9DaXBoZXIodGQtPm1haW5f ZXZwLCBrcy0+bWFpblN0cmVhbSwgemVyb3MsIEtFWVNUUkVBTUxFTikgPCAwKQorKwkJcmV0dXJu IC0xOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyogZnJlZSB0aGUgRVZQIGNvbnRleHRzIGFz c29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZSB0aHJlYWQgKi8KKyt2b2lkCisrZnJlZV90aHJlYWREYXRh KHN0cnVjdCB0aHJlYWREYXRhICogdGQpCisreworKwlpZiAodGQgPT0gTlVMTCkKKysJCXJldHVy bjsKKysJaWYgKHRkLT5tYWluX2V2cCkgLyogZmFsc2UgaWYgaW5pdGlhbGl6YXRpb24gZGlkbid0 IGdldCB0aGlzIGZhciAqLworKwkJRVZQX0NJUEhFUl9DVFhfZnJlZSh0ZC0+bWFpbl9ldnApOwor KwlpZiAodGQtPmhlYWRlcl9ldnApIC8qIGZhbHNlIGlmIGluaXRpYWxpemF0aW9uIGRpZG4ndCBn ZXQgdGhpcyBmYXIgKi8KKysJCUVWUF9DSVBIRVJfQ1RYX2ZyZWUodGQtPmhlYWRlcl9ldnApOwor KwlleHBsaWNpdF9iemVybyh0ZCwgc2l6ZW9mKCp0ZCkpOworK30KKysKKysvKiBpbml0aWFsaXpl IHRoZSBFVlBzIHVzZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQKKysgICBSZXR1cm5zIDAgb24gc3Vj Y2VzcyBhbmQgLTEgb24gZmFpbHVyZSAqLworK2ludAorK2luaXRpYWxpemVfdGhyZWFkRGF0YShz dHJ1Y3QgdGhyZWFkRGF0YSAqIHRkLCBjb25zdCB1X2NoYXIgKmtleSkKKyt7CisrCW1lbXNldCh0 ZCwwLHNpemVvZigqdGQpKTsKKysJaWYgKCh0ZC0+bWFpbl9ldnAgPSBFVlBfQ0lQSEVSX0NUWF9u ZXcoKSkgPT0gTlVMTCB8fAorKwkgICAgKHRkLT5oZWFkZXJfZXZwID0gRVZQX0NJUEhFUl9DVFhf bmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGZhaWw7CisrCWlmICghRVZQX0NpcGhlckluaXQodGQt Pm1haW5fZXZwLCBFVlBfY2hhY2hhMjAoKSwga2V5LCBOVUxMLCAxKSkKKysJCWdvdG8gZmFpbDsK KysJaWYgKCFFVlBfQ2lwaGVySW5pdCh0ZC0+aGVhZGVyX2V2cCwgRVZQX2NoYWNoYTIwKCksIGtl eSArIDMyLCBOVUxMLCAxKSkKKysJCWdvdG8gZmFpbDsKKysJaWYgKEVWUF9DSVBIRVJfQ1RYX2l2 X2xlbmd0aCh0ZC0+aGVhZGVyX2V2cCkgIT0gMTYpCisrCQlnb3RvIGZhaWw7CisrCXJldHVybiAw OworKyBmYWlsOgorKwlmcmVlX3RocmVhZERhdGEodGQpOworKwlyZXR1cm4gLTE7CisrfQorKwor K3N0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgKgorK3dvcmtlcl90aHJlYWQoc3RydWN0IHdvcmtl cl90aHJlYWRfYXJncyAqIGFyZ3MpCisreworKwkvKiBjaGVjayBmaXJzdCAqLworKwlpZiAoYXJn cyA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7CisrCWlmIChhcmdzLT5iYXRjaCA9PSBOVUxMIHx8 IGFyZ3MtPnplcm9zID09IE5VTEwpIHsKKysJCWFyZ3MtPnJldHZhbCA9IDE7CisrCQlyZXR1cm4g YXJnczsKKysJfQorKworKwlpbnQgdGhyZWFkSW5kZXggPSBhcmdzLT50aHJlYWRJbmRleDsKKysJ c3RydWN0IHRocmVhZERhdGEgKiB0ZCA9ICYoYXJncy0+YmF0Y2gtPnRkc1t0aHJlYWRJbmRleF0p OworKwl1X2ludCByZWZzZXFuciA9IGFyZ3MtPmJhdGNoSUQgKiBOVU1TVFJFQU1TOworKworKwlm b3IgKGludCBpID0gdGhyZWFkSW5kZXg7IGkgPCBOVU1TVFJFQU1TOyBpICs9IE5VTVRIUkVBRFMp IHsKKysJCWlmIChnZW5lcmF0ZV9rZXlzdHJlYW0oJihhcmdzLT5iYXRjaC0+c3RyZWFtc1tpXSks IHJlZnNlcW5yICsgaSwKKysJCSAgICB0ZCwgYXJncy0+emVyb3MpID09IC0xKSB7CisrCQkJYXJn cy0+cmV0dmFsID0gMTsKKysJCQlyZXR1cm4gYXJnczsKKysJCX0KKysJfQorKworKwlhcmdzLT5y ZXR2YWwgPSAwOworKwlyZXR1cm4gYXJnczsKKyt9CisrCisraW50Cisram9pbl9tYW5hZ2VyX3Ro cmVhZChwdGhyZWFkX3QgbWFuYWdlcl90aWQpCisreworKwlzdHJ1Y3QgbWFuYWdlcl90aHJlYWRf YXJncyAqIGFyZ3M7CisrCWlmIChwdGhyZWFkX2pvaW4obWFuYWdlcl90aWQsICh2b2lkICoqKSAm YXJncykgPT0gMCkgeworKwkJaWYgKGFyZ3MgPT0gTlVMTCkgeworKwkJCWRlYnVnX2YoIk1hbmFn ZXIgdGhyZWFkIHJldHVybmVkIE5VTEwhIik7CisrCQkJcmV0dXJuIDE7CisrCQl9IGVsc2UgaWYg KGFyZ3MgPT0gUFRIUkVBRF9DQU5DRUxFRCkgeworKwkJCWRlYnVnX2YoIk1hbmFnZXIgdGhyZWFk IGNhbmNlbGVkISIpOworKwkJCXJldHVybiAxOworKwkJfSBlbHNlIGlmIChhcmdzLT5yZXR2YWwg IT0gMCkgeworKwkJCWRlYnVnX2YoIk1hbmFnZXIgdGhyZWFkIGVycm9yICglZCkiLCBhcmdzLT5y ZXR2YWwpOworKwkJCWZyZWUoYXJncyk7CisrCQkJcmV0dXJuIDE7CisrCQl9IGVsc2UgeworKwkJ CWZyZWUoYXJncyk7CisrCQkJcmV0dXJuIDA7CisrCQl9CisrCX0gZWxzZSB7CisrCQlkZWJ1Z19m KCJwdGhyZWFkX2pvaW4gZXJyb3IhIik7CisrCQlyZXR1cm4gMTsKKysJfQorK30KKysKKyt2b2lk CisrY2hhY2hhcG9seV9mcmVlX210KHN0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdCAqIGN0eF9tdCkK Kyt7CisrCWlmIChjdHhfbXQgPT0gTlVMTCkKKysJCXJldHVybjsKKysKKysjaWZkZWYgT1BFTlNT TF9IQVZFX1BPTFlfRVZQCisrCWlmIChjdHhfbXQtPnBvbHlfY3R4ICE9IE5VTEwpIHsKKysJCUVW UF9NQUNfQ1RYX2ZyZWUoY3R4X210LT5wb2x5X2N0eCk7CisrCQljdHhfbXQtPnBvbHlfY3R4ID0g TlVMTDsKKysJfQorKyNlbGlmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQ X1BLRVlfUE9MWTEzMDUpCisrCWlmIChjdHhfbXQtPm1kX2N0eCAhPSBOVUxMKSB7CisrCQlFVlBf TURfQ1RYX2ZyZWUoY3R4X210LT5tZF9jdHgpOworKwkJY3R4X210LT5tZF9jdHggPSBOVUxMOwor Kwl9CisrCWlmIChjdHhfbXQtPnBrZXkgIT0gTlVMTCkgeworKwkJRVZQX1BLRVlfZnJlZShjdHhf bXQtPnBrZXkpOworKwkJY3R4X210LT5wa2V5ID0gTlVMTDsKKysJfQorKyNlbmRpZgorKworKwkv KgorKwkgKiBPbmx5IGNsZWFudXAgdGhlIG1hbmFnZXIgdGhyZWFkcyBpZiB3ZSBhcmUgdGhlIFBJ RCB0aGF0IGluaXRpYWxpemVkCisrCSAqIHRoZW0hIElmIHdlJ3JlIGEgZm9yaywgdGhlIHRocmVh ZHMgZG9uJ3QgcmVhbGx5IGV4aXN0LgorKwkgKi8KKysKKysJaWYgKGdldHBpZCgpID09IGN0eF9t dC0+bWFpbnBpZCkgeworKwkJaWYgKGN0eF9tdC0+bWFuYWdlcl90aWRbMF0gIT0gY3R4X210LT5z ZWxmX3RpZCkgeworKwkJCWpvaW5fbWFuYWdlcl90aHJlYWQoY3R4X210LT5tYW5hZ2VyX3RpZFsw XSk7CisrCQkJY3R4X210LT5tYW5hZ2VyX3RpZFswXSA9IGN0eF9tdC0+c2VsZl90aWQ7CisrCQl9 CisrCQlpZiAoY3R4X210LT5tYW5hZ2VyX3RpZFsxXSAhPSBjdHhfbXQtPnNlbGZfdGlkKSB7Cisr CQkJam9pbl9tYW5hZ2VyX3RocmVhZChjdHhfbXQtPm1hbmFnZXJfdGlkWzFdKTsKKysJCQljdHhf bXQtPm1hbmFnZXJfdGlkWzFdID0gY3R4X210LT5zZWxmX3RpZDsKKysJCX0KKysJfQorKworKwkv KiBDbGVhbnVwIHRocmVhZCBkYXRhIHN0cnVjdHVyZXMuICovCisrCWZvciAoaW50IGk9MDsgaTwy OyBpKyspCisrCQlmb3IgKGludCBqPTA7IGo8TlVNVEhSRUFEUzsgaisrKQorKwkJCWZyZWVfdGhy ZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1tpXS50ZHNbal0pKTsKKysKKysJLyogWmVybyBhbmQg ZnJlZSB0aGUgd2hvbGUgbXVsdGl0aHJlYWRlZCBjaXBoZXIgY29udGV4dC4gKi8KKysJZnJlZXpl cm8oY3R4X210LCBzaXplb2YoKmN0eF9tdCkpOworKworKwlyZXR1cm47CisrfQorKworK3N0cnVj dCBjaGFjaGFwb2x5X2N0eF9tdCAqCisrY2hhY2hhcG9seV9uZXdfbXQodV9pbnQgc3RhcnRzZXFu ciwgY29uc3QgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4pCisreworKwlzdHJ1Y3QgY2hhY2hh cG9seV9jdHhfbXQgKiBjdHhfbXQgPSB4bWFsbG9jKHNpemVvZigqY3R4X210KSk7CisrCW1lbXNl dChjdHhfbXQsIDAsIHNpemVvZigqY3R4X210KSk7CisrCS8qIEluaXRpYWxpemUgdGhlIHNlcXVl bmNlIG51bWJlci4gV2hlbiByZWtleWluZywgdGhpcyB3b24ndCBiZSB6ZXJvLiAqLworKwljdHhf bXQtPnNlcW5yID0gc3RhcnRzZXFucjsKKysJY3R4X210LT5iYXRjaElEID0gc3RhcnRzZXFuciAv IE5VTVNUUkVBTVM7CisrCXN0cnVjdCB0aHJlYWREYXRhIG1haW5EYXRhOworKwlpbnQgdERhdGFJ OworKwlpbnQgZ2VuS1NmYWlsZWQgPSAwOworKworKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9F VlAKKysJRVZQX01BQyAqbWFjID0gTlVMTDsKKysJaWYgKChtYWMgPSBFVlBfTUFDX2ZldGNoKE5V TEwsICJQT0xZMTMwNSIsIE5VTEwpKSA9PSBOVUxMKQorKwkJZ290byBmYWlsOworKwlpZiAoKGN0 eF9tdC0+cG9seV9jdHggPSBFVlBfTUFDX0NUWF9uZXcobWFjKSkgPT0gTlVMTCkKKysJCWdvdG8g ZmFpbDsKKysJRVZQX01BQ19mcmVlKG1hYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKysJbWFj ID0gTlVMTDsKKysjZWxpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9Q S0VZX1BPTFkxMzA1KQorKwlpZiAoKGN0eF9tdC0+bWRfY3R4ID0gRVZQX01EX0NUWF9uZXcoKSkg PT0gTlVMTCkKKysJCWdvdG8gZmFpbDsKKysJaWYgKChjdHhfbXQtPnBrZXkgPSBFVlBfUEtFWV9u ZXdfbWFjX2tleShFVlBfUEtFWV9QT0xZMTMwNSwgTlVMTCwKKysJICAgIGN0eF9tdC0+emVyb3Ms IFBPTFkxMzA1X0tFWUxFTikpID09IE5VTEwpCisrCQlnb3RvIGZhaWw7CisrCWlmIChFVlBfRGln ZXN0U2lnbkluaXQoY3R4X210LT5tZF9jdHgsICZjdHhfbXQtPnBvbHlfY3R4LCBOVUxMLCBOVUxM LAorKwkgICAgY3R4X210LT5wa2V5KSA9PSAwKQorKwkJZ290byBmYWlsOworKyNlbHNlCisrCWN0 eF9tdC0+cG9seV9jdHggPSBOVUxMOworKyNlbmRpZgorKworKwljdHhfbXQtPmJhdGNoZXNbY3R4 X210LT5iYXRjaElEICUgMl0uYmF0Y2hJRCA9IGN0eF9tdC0+YmF0Y2hJRDsKKysJY3R4X210LT5i YXRjaGVzWyhjdHhfbXQtPmJhdGNoSUQgKyAxKSAlIDJdLmJhdGNoSUQgPQorKwkgICAgY3R4X210 LT5iYXRjaElEICsgMTsKKysKKysJLyogaW5pdGlhbGl6ZSBiYXRjaGVzWzBdIHRkcyAqLworKwlm b3IgKHREYXRhSSA9IDA7IHREYXRhSSA8IE5VTVRIUkVBRFM7IHREYXRhSSsrKSB7CisrCQlpZiAo aW5pdGlhbGl6ZV90aHJlYWREYXRhKCYoY3R4X210LT5iYXRjaGVzWzBdLnRkc1t0RGF0YUldKSwK KysJCSAgICBrZXkpICE9IDApCisrCQkJYnJlYWs7CisrCX0KKysJaWYgKHREYXRhSSA8IE5VTVRI UkVBRFMpIHsKKysJCS8qIEJhY2t0cmFjayBzdGFydGluZyB3aXRoICd0RGF0YUkgLSAxJyAqLwor KwkJZm9yICh0RGF0YUktLTsgdERhdGFJID49IDA7IHREYXRhSS0tKQorKwkJCWZyZWVfdGhyZWFk RGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1swXS50ZHNbdERhdGFJXSkpOworKwkJZ290byBmYWlsOwor Kwl9CisrCS8qIGluaXRpYWxpemUgYmF0Y2hlc1sxXSB0ZHMgKi8KKysJZm9yICh0RGF0YUkgPSAw OyB0RGF0YUkgPCBOVU1USFJFQURTOyB0RGF0YUkrKykgeworKwkJaWYgKGluaXRpYWxpemVfdGhy ZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1sxXS50ZHNbdERhdGFJXSksCisrCQkgICAga2V5KSAh PSAwKQorKwkJCWJyZWFrOworKwl9CisrCWlmICh0RGF0YUkgPCBOVU1USFJFQURTKSB7CisrCQkv KiBCYWNrdHJhY2sgc3RhcnRpbmcgd2l0aCAndERhdGFJIC0gMScgKi8KKysJCWZvciAodERhdGFJ LS07IHREYXRhSSA+PSAwOyB0RGF0YUktLSkKKysJCQlmcmVlX3RocmVhZERhdGEoJihjdHhfbXQt PmJhdGNoZXNbMV0udGRzW3REYXRhSV0pKTsKKysJCS8qIEZyZWUgdGhlIGJhdGNoZXNbMF0gdGRz IHRvbyAqLworKwkJZm9yICh0RGF0YUkgPSBOVU1USFJFQURTIC0gMTsgdERhdGFJID49IDA7IHRE YXRhSS0tKQorKwkJCWZyZWVfdGhyZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1swXS50ZHNbdERh dGFJXSkpOworKwkJZ290byBmYWlsOworKwl9CisrCisrCWlmIChpbml0aWFsaXplX3RocmVhZERh dGEoJm1haW5EYXRhLCBrZXkpICE9IDApIHsKKysJCWNoYWNoYXBvbHlfZnJlZV9tdChjdHhfbXQp OworKwkJZXhwbGljaXRfYnplcm8oJnN0YXJ0c2VxbnIsIHNpemVvZihzdGFydHNlcW5yKSk7Cisr CQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlmb3IgKGludCBpPTA7IGk8MjsgaSsrKSB7CisrCQl1 X2ludCByZWZzZXFuciA9IGN0eF9tdC0+YmF0Y2hlc1tpXS5iYXRjaElEICogTlVNU1RSRUFNUzsK KysJCWZvciAoaW50IGogPSBzdGFydHNlcW5yID4gcmVmc2VxbnIgPyBzdGFydHNlcW5yIC0gcmVm c2VxbnIgOiAwOworKwkJICAgICBqPE5VTVNUUkVBTVM7IGorKykgeworKwkJCWlmIChnZW5lcmF0 ZV9rZXlzdHJlYW0oJihjdHhfbXQtPmJhdGNoZXNbaV0uc3RyZWFtc1tqXSksCisrCQkJICAgIHJl ZnNlcW5yICsgaiwgJm1haW5EYXRhLCBjdHhfbXQtPnplcm9zKSA9PSAtMSkgeworKwkJCQlkZWJ1 Z19mKCJnZW5lcmF0ZV9rZXlzdHJlYW0gZmFpbGVkIGluICIKKysJCQkJICAgICJjaGFjaGEyMC1w b2x5MTMwNUBocG5zc2gub3JnIik7CisrCQkJCWdlbktTZmFpbGVkID0gMTsKKysJCQkJYnJlYWs7 IC8qIGltcGVyZmVjdCwgYnV0IGl0IGhlbHBzICovCisrCQkJfQorKwkJfQorKwl9CisrCisrCWZy ZWVfdGhyZWFkRGF0YSgmbWFpbkRhdGEpOworKworKwlpZiAoZ2VuS1NmYWlsZWQgIT0gMCkgewor KwkJY2hhY2hhcG9seV9mcmVlX210KGN0eF9tdCk7CisrCQlleHBsaWNpdF9iemVybygmc3RhcnRz ZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCS8q IFN0b3JlIHRoZSBQSUQgc28gdGhhdCBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gdGVsbCBpZiB3ZSdy ZSBhIGZvcmsgKi8KKysJY3R4X210LT5tYWlucGlkID0gZ2V0cGlkKCk7CisrCWN0eF9tdC0+c2Vs Zl90aWQgPSBwdGhyZWFkX3NlbGYoKTsKKysJY3R4X210LT5tYW5hZ2VyX3RpZFswXSA9IGN0eF9t dC0+c2VsZl90aWQ7CisrCWN0eF9tdC0+bWFuYWdlcl90aWRbMV0gPSBjdHhfbXQtPnNlbGZfdGlk OworKwkvKiB3YXMgcmVwb3J0aW5nIHRoZSBUSUQgdXNpbmcgZ2V0dGlkKCkgYnV0IGl0J3Mgbm90 IHBvcnRhYmxlICovCisrCWRlYnVnMl9mKCI8bWFpbiB0aHJlYWQ6IHBpZD0ldSwgcHRpZD0weCVs eD4iLCBnZXRwaWQoKSwgcHRocmVhZF9zZWxmKCkpOworKworKwkvKiBTdWNjZXNzISAqLworKwll eHBsaWNpdF9iemVybygmc3RhcnRzZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsKKysJcmV0dXJu IGN0eF9tdDsKKysKKysgZmFpbDoKKysjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQCisrCUVW UF9NQUNfZnJlZShtYWMpOworKwlpZiAoY3R4X210LT5wb2x5X2N0eCAhPSBOVUxMKSB7CisrCQlF VlBfTUFDX0NUWF9mcmVlKGN0eF9tdC0+cG9seV9jdHgpOworKwkJY3R4X210LT5wb2x5X2N0eCA9 IE5VTEw7CisrCX0KKysjZWxpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVW UF9QS0VZX1BPTFkxMzA1KQorKwlpZiAoY3R4X210LT5tZF9jdHggIT0gTlVMTCkgeworKwkJRVZQ X01EX0NUWF9mcmVlKGN0eF9tdC0+bWRfY3R4KTsKKysJCWN0eF9tdC0+bWRfY3R4ID0gTlVMTDsK KysJfQorKwlpZiAoY3R4X210LT5wa2V5ICE9IE5VTEwpIHsKKysJCUVWUF9QS0VZX2ZyZWUoY3R4 X210LT5wa2V5KTsKKysJCWN0eF9tdC0+cGtleSA9IE5VTEw7CisrCX0KKysjZW5kaWYKKysJZnJl ZXplcm8oY3R4X210LCBzaXplb2YoKmN0eF9tdCkpOworKwlleHBsaWNpdF9iemVybygmc3RhcnRz ZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsKKysJcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFBv cnRhYmxlIEZhc3RYT1IgdXNpbmcgbWVtY3B5IHRvIGF2b2lkIHN0cmljdC1hbGlhc2luZyBhbmQg YWxpZ25tZW50IFVCLgorKyAqIFVzZXMgMTI4LWJpdCBjaHVua3Mgb24gY29tcGlsZXJzIHRoYXQg c3VwcG9ydCBfX3VpbnQxMjhfdCAoR0NDL0NsYW5nIG9uCisrICogNjQtYml0IHBsYXRmb3Jtcyks IGZhbGxzIGJhY2sgdG8gdWludDY0X3QgZWxzZXdoZXJlLiAqLworK3N0YXRpYyBpbmxpbmUgdm9p ZAorK2Zhc3RYT1IyKHVfY2hhciAqZGVzdCwgY29uc3QgdV9jaGFyICpzcmMsIGNvbnN0IHVfY2hh ciAqa2V5c3RyZWFtLCB1X2ludCBsZW4pCisreworKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEy OF9fKQorKwl0eXBlZGVmIF9fdWludDEyOF90IGNodW5rOworKyNlbHNlCisrCXR5cGVkZWYgdWlu dDY0X3QgY2h1bms7CisrI2VuZGlmCisrCXNpemVfdCBpID0gMDsKKysJd2hpbGUgKGkgKyBzaXpl b2YoY2h1bmspIDw9IGxlbikgeworKwkJY2h1bmsgYSwgYiwgcjsKKysJCW1lbWNweSgmYSwgc3Jj ICsgaSwgc2l6ZW9mKGEpKTsKKysJCW1lbWNweSgmYiwga2V5c3RyZWFtICsgaSwgc2l6ZW9mKGIp KTsKKysJCXIgPSBhIF4gYjsKKysJCW1lbWNweShkZXN0ICsgaSwgJnIsIHNpemVvZihyKSk7Cisr CQlpICs9IHNpemVvZihjaHVuayk7CisrCX0KKysJd2hpbGUgKGkgPCBsZW4pIHsKKysJCWRlc3Rb aV0gPSBzcmNbaV0gXiBrZXlzdHJlYW1baV07CisrCQlpKys7CisrCX0KKyt9CisrCisrc3RydWN0 IG1hbmFnZXJfdGhyZWFkX2FyZ3MgKgorK21hbmFnZXJfdGhyZWFkKHN0cnVjdCBtYW5hZ2VyX3Ro cmVhZF9hcmdzICogbWFyZ3MpIHsKKysJLyogbWFrZSBzdXJlIHdlIGhhdmUgdmFsaWQgZGF0YSBi ZWZvcmUgcHJvY2VlZGluZyAqLworKwlpZiAobWFyZ3MgPT0gTlVMTCkKKysJCXJldHVybiBOVUxM OworKworKwlzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKiBjdHhfbXQgPSBtYXJncy0+Y3R4X210 OworKwlpZiAoY3R4X210ID09IE5VTEwpIHsKKysJCW1hcmdzLT5yZXR2YWwgPSAxOworKwkJcmV0 dXJuIG1hcmdzOworKwl9CisrCisrCXVfaW50IG9sZEJhdGNoSUQgPSBtYXJncy0+b2xkQmF0Y2hJ RDsKKysKKysJc3RydWN0IG10X2tleXN0cmVhbV9iYXRjaCAqIGJhdGNoID0gJihjdHhfbXQtPmJh dGNoZXNbb2xkQmF0Y2hJRCAlIDJdKTsKKysJaWYgKGJhdGNoLT5iYXRjaElEICE9IG9sZEJhdGNo SUQpIHsKKysJCWRlYnVnX2YoIlBvc3QtY3J5cHQgYmF0Y2ggbWlzcyEgU2Vla2luZyAldSwgZm91 bmQgJXUuIEZhaWxpbmcuIiwKKysJCSAgICBvbGRCYXRjaElELCBiYXRjaC0+YmF0Y2hJRCk7Cisr CQltYXJncy0+cmV0dmFsID0gMTsKKysJCXJldHVybiBtYXJnczsKKysJfQorKworKwltYXJncy0+ cmV0dmFsID0gMDsKKysJdV9pbnQgYmF0Y2hJRCA9IG9sZEJhdGNoSUQgKyAyOworKworKwlwdGhy ZWFkX3QgdGlkW05VTVRIUkVBRFNdOworKwlzdHJ1Y3Qgd29ya2VyX3RocmVhZF9hcmdzICogd2Fy Z3MgPSBtYWxsb2MoTlVNVEhSRUFEUyAqIHNpemVvZigqd2FyZ3MpKTsKKysJaW50IHRpOworKwor Kwlmb3IgKHRpID0gMDsgdGkgPCBOVU1USFJFQURTOyB0aSsrKSB7CisrCQl3YXJnc1t0aV0uYmF0 Y2hJRCA9IGJhdGNoSUQ7CisrCQl3YXJnc1t0aV0uYmF0Y2ggPSBiYXRjaDsKKysJCXdhcmdzW3Rp XS50aHJlYWRJbmRleCA9IHRpOworKwkJd2FyZ3NbdGldLnplcm9zID0gY3R4X210LT56ZXJvczsK KysJCWlmIChwdGhyZWFkX2NyZWF0ZSgmKHRpZFt0aV0pLCBOVUxMLCAodm9pZCAqKSB3b3JrZXJf dGhyZWFkLAorKwkJICAgICYod2FyZ3NbdGldKSkgIT0gMCkgeworKwkJCW1hcmdzLT5yZXR2YWwg PSAxOworKwkJCWJyZWFrOworKwkJfQorKwl9CisrCWZvciAoOyB0aSA8IE5VTVRIUkVBRFM7IHRp KyspIC8qIGZvciBlcnJvciBjb25kaXRpb24gKi8KKysJCXRpZFt0aV0gPSBwdGhyZWFkX3NlbGYo KTsKKysKKysJc3RydWN0IHdvcmtlcl90aHJlYWRfYXJncyAqIHJldHdhcmdzOworKworKwlmb3Ig KHRpID0gMDsgdGkgPCBOVU1USFJFQURTOyB0aSsrKSB7CisrCQlpZiAodGlkW3RpXSA9PSBwdGhy ZWFkX3NlbGYoKSkgeworKwkJCW1hcmdzLT5yZXR2YWwgPSAxOyAvKiByZWR1bmRhbnQsIGJ1dCBo YXJtbGVzcyAqLworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKHB0aHJlYWRfam9pbih0aWRb dGldLCAodm9pZCAqKikgJnJldHdhcmdzKSA9PSAwKSB7CisrCQkJaWYgKHJldHdhcmdzID09IE5V TEwpIHsKKysJCQkJZGVidWdfZigiV29ya2VyIHRocmVhZCByZXR1cm5lZCBOVUxMISIpOworKwkJ CQltYXJncy0+cmV0dmFsID0gMTsKKysJCQl9IGVsc2UgaWYgKHJldHdhcmdzID09IFBUSFJFQURf Q0FOQ0VMRUQpIHsKKysJCQkJZGVidWdfZigiV29ya2VyIHRocmVhZCBjYW5jZWxlZCEiKTsKKysJ CQkJbWFyZ3MtPnJldHZhbCA9IDE7CisrCQkJfSBlbHNlIHsKKysJCQkJaWYgKHJldHdhcmdzLT5y ZXR2YWwgIT0gMCkgeworKwkJCQkJZGVidWdfZigiV29ya2VyIHRocmVhZCBlcnJvciAoJWQpIiwK KysJCQkJCSAgICByZXR3YXJncy0+cmV0dmFsKTsKKysJCQkJCW1hcmdzLT5yZXR2YWwgPSAxOwor KwkJCQl9CisrCQkJCWlmIChyZXR3YXJncyAhPSAmKHdhcmdzW3RpXSkpIHsKKysJCQkJCWRlYnVn X2YoIldvcmtlciB0aHJlYWQgZGlkbid0IHJldHVybiAiCisrCQkJCQkgICAgImV4cGVjdGVkIHN0 cnVjdHVyZSEiKTsKKysJCQkJCW1hcmdzLT5yZXR2YWwgPSAxOworKwkJCQl9CisrCQkJfQorKwkJ fSBlbHNlIHsKKysJCQlkZWJ1Z19mKCJwdGhyZWFkX2pvaW4gZXJyb3IhIik7CisrCQkJbWFyZ3Mt PnJldHZhbCA9IDE7CisrCQl9CisrCX0KKysJZnJlZSh3YXJncyk7CisrCisrCWlmIChtYXJncy0+ cmV0dmFsID09IDApIHsKKysJCWJhdGNoLT5iYXRjaElEID0gYmF0Y2hJRDsKKysJfQorKworKwly ZXR1cm4gbWFyZ3M7CisrfQorKworK2ludAorK2NoYWNoYXBvbHlfY3J5cHRfbXQoc3RydWN0IGNo YWNoYXBvbHlfY3R4X210ICpjdHhfbXQsIHVfaW50IHNlcW5yLCB1X2NoYXIgKmRlc3QsCisrICAg IGNvbnN0IHVfY2hhciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwgdV9pbnQgYXV0aGxl biwgaW50IGRvX2VuY3J5cHQpCisreworKyNpZmRlZiBTQUZFVFkKKysJaWYgKGN0eF9tdC0+bWFp bnBpZCAhPSBnZXRwaWQoKSkgeyAvKiB3ZSdyZSBhIGZvcmsgKi8KKysJCS8qCisrCQkgKiBUT0RP OiB0aGlzIGlzIEVYVFJFTUVMWSBSQVJFLCBtYXkgbmV2ZXIgaGFwcGVuIGF0IGFsbCAob25seQor KwkJICogaWYgdGhlIGZvcmsgY2FsbHMgY3J5cHQpLCBzbyB3ZSBzaG91bGQgdGVsbCB0aGUgY29t cGlsZXIuCisrCQkgKi8KKysJCS8qIFRoZSB3b3JrZXIgdGhyZWFkcyBkb24ndCBleGlzdCwgd2Ug Y291bGQgc3Bhd24gdGhlbT8gKi8KKysJCWRlYnVnX2YoIkZvcmsgY2FsbGVkIGNyeXB0IHdpdGhv dXQgd29ya2VycyEiKTsKKysJCWNoYWNoYXBvbHlfZnJlZV9tdChjdHhfbXQpOworKwkJcmV0dXJu IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCX0KKysjZW5kaWYKKysKKysJcHRocmVhZF90ICog bWFuYWdlcl90aWQgPSAmKGN0eF9tdC0+bWFuYWdlcl90aWRbY3R4X210LT5iYXRjaElEICUgMl0p OworKwlpZiAodW5saWtlbHkoKm1hbmFnZXJfdGlkICE9IGN0eF9tdC0+c2VsZl90aWQpKSB7Cisr CQlpbnQgcmV0ID0gam9pbl9tYW5hZ2VyX3RocmVhZCgqbWFuYWdlcl90aWQpOworKwkJKm1hbmFn ZXJfdGlkID0gY3R4X210LT5zZWxmX3RpZDsKKysJCWlmIChyZXQgIT0gMCkKKysJCQlyZXR1cm4g U1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJfQorKworKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtX2Jh dGNoICogYmF0Y2ggPQorKwkgICAgJihjdHhfbXQtPmJhdGNoZXNbY3R4X210LT5iYXRjaElEICUg Ml0pOworKworKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtICoga3MgPSAmKGJhdGNoLT5zdHJlYW1zW3Nl cW5yICUgTlVNU1RSRUFNU10pOworKworKwlpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7 CisrCisrI2lmZGVmIFNBRkVUWQorKwlpZiAoYmF0Y2gtPmJhdGNoSUQgPT0gY3R4X210LT5iYXRj aElEKSB7IC8qIFNhZmV0eSBjaGVjayAqLworKyNlbmRpZgorKwkJLyogY2hlY2sgdGFnIGJlZm9y ZSBhbnl0aGluZyBlbHNlICovCisrCQlpZiAoIWRvX2VuY3J5cHQpIHsKKysJCQljb25zdCB1X2No YXIgKnRhZyA9IHNyYyArIGFhZGxlbiArIGxlbjsKKysJCQl1X2NoYXIgZXhwZWN0ZWRfdGFnW1BP TFkxMzA1X1RBR0xFTl07CisrI2lmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQo RVZQX1BLRVlfUE9MWTEzMDUpCisrCQkJaWYgKChFVlBfUEtFWV9DVFhfY3RybChjdHhfbXQtPnBv bHlfY3R4LCAtMSwKKysJCQkgICAgRVZQX1BLRVlfT1BfU0lHTkNUWCwgRVZQX1BLRVlfQ1RSTF9T RVRfTUFDX0tFWSwKKysJCQkgICAgUE9MWTEzMDVfS0VZTEVOLCBrcy0+cG9seV9rZXkpIDw9IDAp IHx8CisrCQkJICAgIChFVlBfRGlnZXN0U2lnblVwZGF0ZShjdHhfbXQtPm1kX2N0eCwgc3JjLCBh YWRsZW4gKyBsZW4pID09IDApKSB7CisrCQkJCWRlYnVnX2YoIlNTTCBlcnJvciB3aGlsZSBkZWNy eXB0aW5nIHBvbHkxMzA1IHRhZyIpOworKwkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJP UjsKKysJCQl9CisrCQkJY3R4X210LT5wdGFnbGVuID0gUE9MWTEzMDVfVEFHTEVOOworKwkJCWlm IChFVlBfRGlnZXN0U2lnbkZpbmFsKGN0eF9tdC0+bWRfY3R4LCBleHBlY3RlZF90YWcsCisrCQkJ ICAgICZjdHhfbXQtPnB0YWdsZW4pID09IDApIHsKKysJCQkJZGVidWdfZigiU1NMIGVycm9yIHdo aWxlIGZpbmFsaXppbmcgZGVjeXJwdGVkIHBvbHkxMzA1Iik7CisrCQkJCXJldHVybiBTU0hfRVJS X0lOVEVSTkFMX0VSUk9SOworKwkJCX0KKysjZWxzZQorKwkJCXBvbHkxMzA1X2F1dGgoY3R4X210 LT5wb2x5X2N0eCwgZXhwZWN0ZWRfdGFnLCBzcmMsCisrCQkJICAgIGFhZGxlbiArIGxlbiwga3Mt PnBvbHlfa2V5KTsKKysjZW5kaWYKKysJCQlpZiAodGltaW5nc2FmZV9iY21wKGV4cGVjdGVkX3Rh ZywgdGFnLCBQT0xZMTMwNV9UQUdMRU4pCisrCQkJICAgICE9IDApCisrCQkJCXIgPSBTU0hfRVJS X01BQ19JTlZBTElEOworKwkJCWV4cGxpY2l0X2J6ZXJvKGV4cGVjdGVkX3RhZywgc2l6ZW9mKGV4 cGVjdGVkX3RhZykpOworKwkJfQorKwkJaWYgKHIgIT0gU1NIX0VSUl9NQUNfSU5WQUxJRCkgewor KwkJCS8qIENyeXB0IGFkZGl0aW9uYWwgZGF0YSAoaS5lLiwgcGFja2V0IGxlbmd0aCkgKi8KKysJ CQkvKiBUT0RPOiBpcyBhYWRsZW4gYWx3YXlzIGZvdXIgYnl0ZXM/ICovCisrCQkJLyogVE9ETzog ZG8gd2UgYWx3YXlzIGhhdmUgYW4gYWFkbGVuPyAqLworKwkJCWlmIChhYWRsZW4pCisrCQkJCWZv ciAodV9pbnQgaT0wOyBpPGFhZGxlbjsgaSsrKQorKwkJCQkJZGVzdFtpXSA9IGtzLT5oZWFkZXJT dHJlYW1baV0gXiBzcmNbaV07CisrCQkJLyogQ3J5cHQgcGF5bG9hZCAqLworKwkJCWZhc3RYT1Iy KGRlc3QrYWFkbGVuLHNyYythYWRsZW4sa3MtPm1haW5TdHJlYW0sbGVuKTsKKysJCQkvKiBjYWxj dWxhdGUgYW5kIGFwcGVuZCB0YWcgKi8KKysjaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYg ZGVmaW5lZChFVlBfUEtFWV9QT0xZMTMwNSkKKysJCQlpZiAoZG9fZW5jcnlwdCkgeworKwkJCQlp ZiAoKEVWUF9QS0VZX0NUWF9jdHJsKGN0eF9tdC0+cG9seV9jdHgsIC0xLAorKwkJCQkgICAgRVZQ X1BLRVlfT1BfU0lHTkNUWCwgRVZQX1BLRVlfQ1RSTF9TRVRfTUFDX0tFWSwKKysJCQkJICAgIFBP TFkxMzA1X0tFWUxFTiwga3MtPnBvbHlfa2V5KSA8PTApIHx8CisrCQkJCSAgICAoRVZQX0RpZ2Vz dFNpZ25VcGRhdGUoY3R4X210LT5tZF9jdHgsIGRlc3QsIGFhZGxlbiArIGxlbikgPT0gMCkpIHsK KysJCQkJCWRlYnVnX2YgKCJTU0wgZXJyb3Igd2hpbGUgZW5jcnlwdGluZyBwb2x5MTMwNSB0YWci KTsKKysJCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKwkJCQl9CisrCQkJCWN0 eF9tdC0+cHRhZ2xlbiA9IFBPTFkxMzA1X1RBR0xFTjsKKysJCQkJaWYgKEVWUF9EaWdlc3RTaWdu RmluYWwoY3R4X210LT5tZF9jdHgsIGRlc3QrYWFkbGVuK2xlbiwKKysJCQkJICAgICZjdHhfbXQt PnB0YWdsZW4pID09IDApIHsKKysJCQkJCWRlYnVnX2YoIlNTTCBlcnJvciB3aGlsZSBmaW5hbGl6 aW5nIGRlY3lycHRlZCBwb2x5MTMwNSIpOworKwkJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxf RVJST1I7CisrCQkJCX0KKysJCQl9CisrI2Vsc2UKKysJCQlpZiAoZG9fZW5jcnlwdCkKKysJCQkJ cG9seTEzMDVfYXV0aChjdHhfbXQtPnBvbHlfY3R4LCBkZXN0K2FhZGxlbitsZW4sCisrCQkJCSAg ICBkZXN0LCBhYWRsZW4rbGVuLCBrcy0+cG9seV9rZXkpOworKyNlbmRpZgorKwkJCXI9MDsgLyog U3VjY2VzcyEgKi8KKysJCX0KKysJCWlmIChyKSAvKiBBbnl0aGluZyBub256ZXJvIGlzIGFuIGVy cm9yLiAqLworKwkJCXJldHVybiByOworKworKwkJY3R4X210LT5zZXFuciA9IHNlcW5yICsgMTsK KysKKysJCWlmICh1bmxpa2VseShjdHhfbXQtPnNlcW5yIC8gTlVNU1RSRUFNUyA+IGN0eF9tdC0+ YmF0Y2hJRCkpIHsKKysJCQlzdHJ1Y3QgbWFuYWdlcl90aHJlYWRfYXJncyAqIGFyZ3MgPQorKwkJ CSAgICBtYWxsb2Moc2l6ZW9mKCphcmdzKSk7CisrCQkJaWYgKGFyZ3MgPT0gTlVMTCkgeworKwkJ CQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJCQl9CisrCQkJYXJncy0+Y3R4X210 ID0gY3R4X210OworKwkJCWFyZ3MtPm9sZEJhdGNoSUQgPSBjdHhfbXQtPmJhdGNoSUQ7CisrCQkJ aWYgKHB0aHJlYWRfY3JlYXRlKCYoY3R4X210LT5tYW5hZ2VyX3RpZFtjdHhfbXQtPmJhdGNoSUQK KysJCQkgICAgJSAyXSksIE5VTEwsICh2b2lkICopIG1hbmFnZXJfdGhyZWFkLCBhcmdzKSAhPSAw KSB7CisrCQkJCWZyZWUoYXJncyk7CisrCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9S OworKwkJCX0KKysJCQljdHhfbXQtPmJhdGNoSUQgPSBjdHhfbXQtPnNlcW5yIC8gTlVNU1RSRUFN UzsKKysJCX0KKysKKysJCS8qIFRPRE86IE5vdGhpbmcgd2UgbmVlZCB0byBzYW5pdGl6ZSBoZXJl PyAqLworKworKwkJcmV0dXJuIDA7CisrI2lmZGVmIFNBRkVUWQorKwl9IGVsc2UgeyAvKiBCYWQs IGl0J3MgdGhlIHdyb25nIGJhdGNoLiAqLworKwkJZGVidWdfZiggIlByZS1jcnlwdCBiYXRjaCBt aXNzISBTZWVraW5nICV1LCBmb3VuZCAldS4gRmFpbGluZy4iLAorKwkJICAgIGN0eF9tdC0+YmF0 Y2hJRCwgYmF0Y2gtPmJhdGNoSUQpOworKwkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7 CisrCX0KKysjZW5kaWYKKyt9CisrCisraW50CisrY2hhY2hhcG9seV9nZXRfbGVuZ3RoX210KHN0 cnVjdCBjaGFjaGFwb2x5X2N0eF9tdCAqY3R4X210LCB1X2ludCAqcGxlbnAsCisrICAgIHVfaW50 IHNlcW5yLCBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCBsZW4pCisreworKwkvKiBUT0RPOiBhZGQg Y29tcGlsZXIgaGludHMgKi8KKysjaWZkZWYgU0FGRVRZCisrCWlmIChjdHhfbXQtPm1haW5waWQg IT0gZ2V0cGlkKCkpIHsgLyogVXNlIHNlcmlhbCBtb2RlIGlmIHdlJ3JlIGEgZm9yayAqLworKwkJ ZGVidWdfZigiV2UncmUgYSBmb3JrLiBGYWlsaW5nLiIpOworKwkJcmV0dXJuIFNTSF9FUlJfSU5U RVJOQUxfRVJST1I7CisrCX0KKysjZW5kaWYKKysKKysJaWYgKGxlbiA8IDQpCisrCQlyZXR1cm4g U1NIX0VSUl9NRVNTQUdFX0lOQ09NUExFVEU7CisrCisrCXB0aHJlYWRfdCAqIG1hbmFnZXJfdGlk ID0gJihjdHhfbXQtPm1hbmFnZXJfdGlkW2N0eF9tdC0+YmF0Y2hJRCAlIDJdKTsKKysJaWYgKHVu bGlrZWx5KCptYW5hZ2VyX3RpZCAhPSBjdHhfbXQtPnNlbGZfdGlkKSkgeworKwkJaW50IHJldCA9 IGpvaW5fbWFuYWdlcl90aHJlYWQoKm1hbmFnZXJfdGlkKTsKKysJCSptYW5hZ2VyX3RpZCA9IGN0 eF9tdC0+c2VsZl90aWQ7CisrCQlpZiAocmV0ICE9IDApCisrCQkJcmV0dXJuIFNTSF9FUlJfSU5U RVJOQUxfRVJST1I7CisrCX0KKysKKysJdV9jaGFyIGJ1Zls0XTsKKysjaWZkZWYgU0FGRVRZCisr CXVfaW50IHNvdWdodF9iYXRjaElEID0gc2VxbnIgLyBOVU1TVFJFQU1TOworKyNlbmRpZgorKwlz dHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNoICogYmF0Y2ggPQorKwkgICAgJihjdHhfbXQtPmJhdGNo ZXNbY3R4X210LT5iYXRjaElEICUgMl0pOworKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtICoga3MgPSAm KGJhdGNoLT5zdHJlYW1zW3NlcW5yICUgTlVNU1RSRUFNU10pOworKyNpZmRlZiBTQUZFVFkKKysJ aWYgKGJhdGNoLT5iYXRjaElEID09IHNvdWdodF9iYXRjaElEKSB7CisrI2VuZGlmCisrCQlmb3Ig KHVfaW50IGk9MDsgaSA8IHNpemVvZihidWYpOyBpKyspCisrCQkJYnVmW2ldPWtzLT5oZWFkZXJT dHJlYW1baV0gXiBjcFtpXTsKKysJCSpwbGVucCA9IFBFRUtfVTMyKGJ1Zik7CisrCQlyZXR1cm4g MDsKKysjaWZkZWYgU0FGRVRZCisrCX0gZWxzZSB7CisrCQlkZWJ1Z19mKCJCYXRjaCBtaXNzISBT ZWVraW5nICV1LCBmb3VuZCAldS4gRmFpbGluZy4iLAorKwkJICAgIHNvdWdodF9iYXRjaElELCBi YXRjaC0+YmF0Y2hJRCk7CisrCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJfQor KyNlbmRpZgorK30KKysjZW5kaWYgLyogZGVmaW5lZChIQVZFX0VWUF9DSEFDSEEyMCkgJiYgIWRl ZmluZWQoSEFWRV9CUk9LRU5fQ0hBQ0hBMjApICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEu b3JpZy9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuaCBvcGVuc3NoLTEwLjVwMS9jaXBo ZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY2lw aGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8t bXQuaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4NDQ1ODc5OCArMDIwMAorQEAgLTAsMCArMSw0NSBA QAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDIzIFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBD YXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KKysgKgorKyAqICBBdXRob3I6IE1pdGNoZWxsIERv cnJlbGwgPG13ZEBwc2MuZWR1PgorKyAqICBBdXRob3I6IENocmlzIFJhcGllciAgPHJhcGllckBw c2MuZWR1PgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIE1JVCBMaWNlbnNlLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM SVRZIG9yCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1J VCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsK KysgKiBpZiBub3QsIHNlZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAq CisrICovCisrCisrI2lmbmRlZiBDSEFDSEFfUE9MWV9MSUJDUllQVE9fTVRfSAorKyNkZWZpbmUg Q0hBQ0hBX1BPTFlfTElCQ1JZUFRPX01UX0gKKysKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisr I2luY2x1ZGUgImNoYWNoYS5oIgorKyNpbmNsdWRlICJwb2x5MTMwNS5oIgorKworKyNpZm5kZWYg Q0hBQ0hBX0tFWUxFTgorKyNkZWZpbmUgQ0hBQ0hBX0tFWUxFTgkzMiAvKiBPbmx5IDI1NiBiaXQg a2V5cyB1c2VkIGhlcmUgKi8KKysjZW5kaWYKKysKKytzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQ7 IC8qIGRlZmluZWQgaW4gY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmMgKi8KKysKKytz dHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNoYWNoYXBvbHlfbmV3X210KHVfaW50IHN0YXJ0c2Vx bnIsIGNvbnN0IHVfY2hhciAqa2V5LCB1X2ludCBrZXlsZW4pCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX2J1 ZmZlcl9fLCAyLCAzKSkpOworKworK3ZvaWQgICBjaGFjaGFwb2x5X2ZyZWVfbXQoc3RydWN0IGNo YWNoYXBvbHlfY3R4X210ICpjcGN0eCk7CisrCisraW50ICAgIGNoYWNoYXBvbHlfY3J5cHRfbXQo c3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICpjcGN0eCwgdV9pbnQgc2VxbnIsCisrCQkJICAgdV9j aGFyICpkZXN0LCBjb25zdCB1X2NoYXIgKnNyYywgdV9pbnQgbGVuLCB1X2ludCBhYWRsZW4sCisr CQkJICAgdV9pbnQgYXV0aGxlbiwgaW50IGRvX2VuY3J5cHQpOworKworK2ludCAgICBjaGFjaGFw b2x5X2dldF9sZW5ndGhfbXQoc3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICpjcGN0eCwKKysJCQkJ dV9pbnQgKnBsZW5wLCB1X2ludCBzZXFuciwgY29uc3QgdV9jaGFyICpjcCwgdV9pbnQgbGVuKQor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVk X18oX19idWZmZXJfXywgNCwgNSkpKTsKKysKKysjZW5kaWYgLyogQ0hBQ0hBX1BPTFlfTElCQ1JZ UFRPX01UX0ggKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jdHItbXQu YyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY3RyLW10LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L2NpcGhlci1jdHItbXQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2gtMTAuNXAxL2NpcGhlci1jdHItbXQuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4NDYw OTM5NSArMDIwMAorQEAgLTAsMCArMSw2ODEgQEAKKysvKgorKyAqIE9wZW5TU0ggTXVsdGktdGhy ZWFkZWQgQUVTLUNUUiBDaXBoZXIKKysgKgorKyAqIEF1dGhvcjogQmVuamFtaW4gQmVubmV0dCA8 YmVuQHBzYy5lZHU+CisrICogQXV0aG9yOiBNaWtlIFRhc290YSA8dGFzb3RhQGdtYWlsLmNvbT4K KysgKiBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+CisrICogQ29weXJpZ2h0 IChjKSAyMDA4LTIwMjEgUGl0dHNidXJnaCBTdXBlcmNvbXB1dGluZyBDZW50ZXIuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBCYXNlZCBvbiBvcmlnaW5hbCBPcGVuU1NIIEFFUy1DVFIg Y2lwaGVyLiBTbWFsbCBwb3J0aW9ucyByZW1haW4gdW5jaGFuZ2VkLAorKyAqIENvcHlyaWdodCAo YykgMjAwMyBNYXJrdXMgRnJpZWRsIDxtYXJrdXNAb3BlbmJzZC5vcmc+CisrICoKKysgKiBQZXJt aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJl IGZvciBhbnkKKysgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50 ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysgKgorKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwg V0FSUkFOVElFUworKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFM TCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKysgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorKyAqIEFOWSBTUEVD SUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERB TUFHRVMKKysgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9S IFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKysgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VO Q0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorKyAqIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisr ICovCisrI2luY2x1ZGUgImluY2x1ZGVzLmgiCisrCisrI2lmIGRlZmluZWQoV0lUSF9PUEVOU1NM KSAmJiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKQorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysK KysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorKworKyNpbmNsdWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUgImxv Zy5oIgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSAidXRoYXNoLmgiCisrCisrLyog Y29tcGF0aWJpbGl0eSB3aXRoIG9sZCBvciBicm9rZW4gT3BlblNTTCB2ZXJzaW9ucyAqLworKyNp bmNsdWRlICJvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oIgorKworKyNpZm5kZWYgVVNF X0JVSUxUSU5fUklKTkRBRUwKKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjZW5kaWYKKysK KysjaW5jbHVkZSA8cHRocmVhZC5oPgorKworKyNpZmRlZiBfX0FQUExFX18KKysjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKysjZW5kaWYKKysKKysvKiBu b3RlIHJlZ2FyZGluZyB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KKysvKiBpbml0aWFsbHkgdGhpcyBj aXBoZXIgd2FzIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdAorKyAqIHRoZSBrZXkgc3RyZWFtIHdhcyBn ZW5lcmF0ZWQgaW4gYSBwZXIgY2lwaGVyIGJsb2NrCisrICogbG9vcC4gRm9yIGV4YW1wbGUsIGlm IHRoZSBrZXkgc3RyZWFtIHF1ZXVlIGxlbmd0aCB3YXMKKysgKiAxNmsgYW5kIHRoZSBjaXBoZXIg YmxvY2sgc2l6ZSB3YXMgMTYgYnl0ZXMgaXQgd291bGQKKysgKiBmaWxsIHRoZSBxdWV1ZSAxNiBi eXRlcyBhdCBhIHRpbWUuIE1pdGNoIERvcnJlbGwgcG9pbnRlZAorKyAqIG91dCB0aGF0IHdlIGNv dWxkIGZpbGwgdGhlIHF1ZXVlIGluIG9uY2UgY2FsbCBlbGltaW5hdGluZworKyAqIGxvb3AgYW5k IG11bHRpcGxlIGNhbGxzIHRvIEVWUF9FbmNyeXB0VXBkYXRlLiBEb2luZyBzbworKyAqIGRyYW1h dGljYWxseSByZWR1Y2VkIENQVSBsb2FkIGluIHRoZSB0aHJlYWRzIGFuZCBpbmRpY2F0ZWQKKysg KiB0aGF0IHdlIGNvdWxkIGFsc28gZWxpbWluYXRlIG1vc3Qgb2YgdGhlIHRocmVhZHMgYW5kIHF1 ZXVlcworKyAqIGFzIGl0IHdvdWxkIHRha2UgZmFyIGxlc3MgdGltZSBmb3IgYSBxdWV1ZSB0byBl YnRlciBLUV9GVUxMCisrICogc3RhdGUuIEFzIHN1Y2gsIHdlJ3ZlIHJlZHVjZWQgdGhlIGRlZmF1 bHQgbnVtYmVyIG9mIHRocmVhZHMKKysgKiBhbmQgcXVldWVzIGZyb20gMiBhbmQgOCAocmVzcGVj dGl2ZWx5KSB0byAxIGFuZCAyLiBXZSd2ZSBhbHNvCisrICogZWxpbW5hdGVkIHRoZSBuZWVkIHRv IGRldGVybWluZSB0aGUgcGh5c2ljYWwgbnVtYmVyIG9mIGNvcmVzIG9uCisrICogdGhlIHN5c3Rl bSBhbmQsIGlmIHRoZSB1c2VyIGRlc2lyZXMsIGNhbiBzcGluIHVwIG1vcmUgdGhyZWFkcworKyAq IHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiBBZGRpdGlvbmFsbHksIHF1ZXVlcyBpcyBu b3cgZml4ZWQKKysgKiBhdCB0aHJlYWRfY291bnQgKyAxLgorKyAqIGNqciAxMC8xOS8yMDIyICov CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLSBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrLyogbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyBhbmQgcXVldWVzICovCisrI2RlZmlu ZSBNQVhfVEhSRUFEUyAgICAgIDQKKysjZGVmaW5lIE1BWF9OVU1LUSAgICAgICAgKE1BWF9USFJF QURTICsgMSkKKysKKysvKiBOdW1iZXIgb2YgcHJlZ2VuIHRocmVhZHMgdG8gdXNlICovCisrLyog dGhpcyBpcyBhIGRlZmF1bHQgdmFsdWUuIFRoZSBhY3R1YWwgbnVtYmVyIGlzCisrICogZGV0ZXJt aW5lZCBkdXJpbmcgaW5pdCBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBudW1iZXIKKysgKiBvZiBhdmFp bGFibGUgY29yZXMgKi8KKytpbnQgY2lwaGVyX3RocmVhZHMgPSAxOworKworKy8qIE51bWJlciBv ZiBrZXlzdHJlYW0gcXVldWVzICovCisrLyogaWRlYWxseSB0aGlzIHNob3VsZCBiZSBsYXJnZSBl bm91Z2ggc28gdGhhdCB0aGVyZSBpcworKyAqIGFsd2F5cyBhIGtleSBxdWV1ZSBmb3IgYSB0aHJl YWQgdG8gd29yayBvbgorKyAqIHNvIG1heWJlIGRvdWJsZSBvZiB0aGUgbnVtYmVyIG9mIHRocmVh ZHMuIEFnYWluIHRoaXMKKysgKiBpcyBhIGRlZmF1bHQgYW5kIHRoZSBhY3R1YWwgdmFsdWUgaXMg ZGV0ZXJtaW5lZCBpbiBpbml0Ki8KKytpbnQgbnVta3EgPSAyOworKworKy8qIExlbmd0aCBvZiBh IGtleXN0cmVhbSBxdWV1ZSAqLworKy8qIG9uZSBxdWV1ZSBob2xkcyA1MTJLQiAoMTAyNCAqIDMy ICogMTYpIG9mIGtleSBkYXRhCisrICogYmVpbmcgdGhhdCB0aGUgcXVldWVzIGFyZSBkZXN0cm95 ZWQgYWZ0ZXIgYSByZWtleQorKyAqIGFuZCBhdCBsZWF0cyBvbmUgaGFzIHRvIGJlIGZ1bGx5IGZp bGxlZCBwcmlvciB0bworKyAqIGVuY2lwaGVyaW5nIGRhdGEgd2UgZG9uJ3Qgd2FudCB0aGlzIHRv IGJlIHRvbyBsYXJnZSAqLworKyNkZWZpbmUgS1FMRU4gKDEwMjQgKiAzMikKKysKKysvKiBQcm9j ZXNzb3IgY2FjaGVsaW5lIGxlbmd0aCAqLworKyNkZWZpbmUgQ0FDSEVMSU5FX0xFTgk2NAorKwor Ky8qIENhbiB0aGUgc3lzdGVtIGRvIHVuYWxpZ25lZCBsb2FkcyBuYXRpdmVseT8gKi8KKysjaWYg ZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgXAorKyAgICBkZWZpbmVkKF9faTM4Nl9fKSAgICB8fCBc CisrICAgIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IFwKKysgICAgZGVmaW5lZChfX3g4Nl82NF9f KQorKyMgZGVmaW5lIENJUEhFUl9VTkFMSUdORURfT0sKKysjZW5kaWYKKysjaWYgZGVmaW5lZChf X1NJWkVPRl9JTlQxMjhfXykKKysjIGRlZmluZSBDSVBIRVJfSU5UMTI4X09LCisrI2VuZGlmCisr LyotLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgVFVOQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworKworKyNkZWZpbmUgSEFWRV9OT05FICAgICAgIDAKKysjZGVmaW5lIEhBVkVfS0VZICAgICAg ICAxCisrI2RlZmluZSBIQVZFX0lWICAgICAgICAgMgorK2ludCBYID0gMDsKKysKKytjb25zdCBF VlBfQ0lQSEVSICpldnBfYWVzX2N0cl9tdCh2b2lkKTsKKysKKysvKiBLZXlzdHJlYW0gUXVldWUg c3RhdGUgKi8KKytlbnVtIHsKKysJS1FJTklULAorKwlLUUVNUFRZLAorKwlLUUZJTExJTkcsCisr CUtRRlVMTCwKKysJS1FEUkFJTklORworK307CisrCisrLyogS2V5c3RyZWFtIFF1ZXVlIHN0cnVj dCAqLworK3N0cnVjdCBrcSB7CisrCXVfY2hhcgkJa2V5c1tLUUxFTl1bQUVTX0JMT0NLX1NJWkVd OyAvKiBbMzI3NjhdWzE2Ql0gKi8KKysJdV9jaGFyCQljdHJbQUVTX0JMT0NLX1NJWkVdOyAvKiAx NkIgKi8KKysJdV9jaGFyICAgICAgICAgIHBhZDBbQ0FDSEVMSU5FX0xFTl07CisrCXB0aHJlYWRf bXV0ZXhfdAlsb2NrOworKwlwdGhyZWFkX2NvbmRfdAljb25kOworKwlpbnQgICAgICAgICAgICAg cXN0YXRlOworKwl1X2NoYXIgICAgICAgICAgcGFkMVtDQUNIRUxJTkVfTEVOXTsKKyt9OworKwor Ky8qIENvbnRleHQgc3RydWN0ICovCisrc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdAorK3sKKysJ bG9uZyB1bnNpZ25lZCBpbnQgc3RydWN0X2lkOworKwlpbnQgICAgICAgICAgICAgICBrZXlsZW47 CisrCWludAkJICBzdGF0ZTsKKysJaW50CQkgIHFpZHg7CisrCWludAkJICByaWR4OworKwlpbnQg ICAgICAgICAgICAgICBpZFtNQVhfVEhSRUFEU107IC8qIDMyICovCisrCUFFU19LRVkgICAgICAg ICAgIGFlc19rZXk7CisrCWNvbnN0IHVfY2hhciAgICAgKm9yaWdfa2V5OworKwl1X2NoYXIJCSAg YWVzX2NvdW50ZXJbQUVTX0JMT0NLX1NJWkVdOyAvKiAxNkIgKi8KKysJcHRocmVhZF90CSAgdGlk W01BWF9USFJFQURTXTsgLyogMzIgKi8KKysJcHRocmVhZF9yd2xvY2tfdCAgdGlkX2xvY2s7Cisr CXN0cnVjdCBrcQkgIHFbTUFYX05VTUtRXTsgLyogMzMgKi8KKysjaWZkZWYgX19BUFBMRV9fCisr CXB0aHJlYWRfcndsb2NrX3QgIHN0b3BfbG9jazsKKysJaW50CQkgIGV4aXRfZmxhZzsKKysjZW5k aWYgLyogX19BUFBMRV9fICovCisrfTsKKysKKysvKiB0aGlzIGRlZmluZXMgdGhlIGhhc2ggYW5k IGVsZW1lbnRzIG9mIGV2cCBjb250ZXh0IHBvaW50ZXJzCisrICogdGhhdCBhcmUgY3JlYXRlZCBp biB0aHJlYWRfbG9vcC4gV2UgdXNlIHRoaXMgdG8gY2xlYXIgYW5kCisrICogZnJlZSB0aGUgY29u dGV4dHMgaW4gc3RvcF9hbmRfcHJlam9pbgorKyAqLworK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMg eworKwlwdGhyZWFkX3QgICAgICAgdGlkOworKwlFVlBfQ0lQSEVSX0NUWCAqcG9pbnRlcjsgLyog MzIgKi8KKysJVVRfaGFzaF9oYW5kbGUgaGg7CisrfTsKKysKKysvKiBnbG9iYWxzICovCisrLyog aG93IHdlIGluY3JlbWVudCB0aGUgaWQgdGhlIHN0cnVjdHMgd2UgY3JlYXRlICovCisrbG9uZyB1 bnNpZ25lZCBpbnQgZ2xvYmFsX3N0cnVjdF9pZCA9IDA7CisrCisrLyoga2VlcCBhIGNvcHkgb2Yg dGhlIHBvaW50ZXJzIGNyZWF0ZWQgaW4gdGhyZWFkX2xvb3AgdG8gZnJlZSBsYXRlciAqLworK3N0 cnVjdCBhZXNfbXRfY3R4X3B0cnMgKmV2cF9wdHJzID0gTlVMTDsKKysKKysvKgorKyAqIEFkZCBu dW0gdG8gY291bnRlciAnY3RyJworKyAqLworK3N0YXRpYyB2b2lkCisrc3NoX2N0cl9hZGQodV9j aGFyICpjdHIsIHVpbnQzMl90IG51bSwgdV9pbnQgbGVuKQorK3sKKysJaW50IGk7CisrCXVpbnQx Nl90IG47CisrCisrCWZvciAobiA9IDAsIGkgPSBsZW4gLSAxOyBpID49IDAgJiYgKG51bSB8fCBu KTsgaS0tKSB7CisrCQluID0gY3RyW2ldICsgKG51bSAmIDB4ZmYpICsgbjsKKysJCW51bSA+Pj0g ODsKKysJCWN0cltpXSA9IG4gJiAweGZmOworKwkJbiA+Pj0gODsKKysJfQorK30KKysKKysvKgor KyAqIFRocmVhZHMgbWF5IGJlIGNhbmNlbGxlZCBpbiBhIHB0aHJlYWRfY29uZF93YWl0LCB3ZSBt dXN0IGZyZWUgdGhlIG11dGV4CisrICovCisrc3RhdGljIHZvaWQKKyt0aHJlYWRfbG9vcF9jbGVh bnVwKHZvaWQgKngpCisreworKwlwdGhyZWFkX211dGV4X3VubG9jaygocHRocmVhZF9tdXRleF90 ICopeCk7CisrfQorKworKyNpZmRlZiBfX0FQUExFX18KKysvKiBDaGVjayBpZiB3ZSBzaG91bGQg ZXhpdCwgd2UgYXJlIGRvaW5nIGJvdGggY2FuY2VsIGFuZCBleGl0IGNvbmRpdGlvbgorKyAqIHNp bmNlIG9uIE9TWCB0aHJlYWRzIHNlZW0gdG8gb2NjYXNpb25hbGx5IGZhaWwgdG8gbm90aWNlIHdo ZW4gdGhleSBoYXZlCisrICogYmVlbiBjYW5jZWxsZWQuIFdlIHdhbnQgdG8gaGF2ZSBhIGJhY2t1 cCB0byBtYWtlIHN1cmUgdGhhdCB3ZSB3b24ndCBoYW5nCisrICogd2hlbiB0aGUgbWFpbiBwcm9j ZXNzIGpvaW4oKS1zIHRoZSBjYW5jZWxsZWQgdGhyZWFkLgorKyAqLworK3N0YXRpYyB2b2lkCisr dGhyZWFkX2xvb3BfY2hlY2tfZXhpdChzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjKQorK3sK KysJaW50IGV4aXRfZmxhZzsKKysKKysJcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZjLT5zdG9wX2xv Y2spOworKwlleGl0X2ZsYWcgPSBjLT5leGl0X2ZsYWc7CisrCXB0aHJlYWRfcndsb2NrX3VubG9j aygmYy0+c3RvcF9sb2NrKTsKKysKKysJaWYgKGV4aXRfZmxhZykKKysJCXB0aHJlYWRfZXhpdChO VUxMKTsKKyt9CisrI2Vsc2UKKysjIGRlZmluZSB0aHJlYWRfbG9vcF9jaGVja19leGl0KHMpCisr I2VuZGlmIC8qIF9fQVBQTEVfXyAqLworKworKy8qCisrICogSGVscGVyIGZ1bmN0aW9uIHRvIHRl cm1pbmF0ZSB0aGUgaGVscGVyIHRocmVhZHMKKysgKi8KKytzdGF0aWMgdm9pZAorK3N0b3BfYW5k X2pvaW5fcHJlZ2VuX3RocmVhZHMoc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdCAqYykKKyt7Cisr CWludCBpOworKworKyNpZmRlZiBfX0FQUExFX18KKysJLyogbm90aWZ5IHRocmVhZHMgdGhhdCB0 aGV5IHNob3VsZCBleGl0ICovCisrCXB0aHJlYWRfcndsb2NrX3dybG9jaygmYy0+c3RvcF9sb2Nr KTsKKysJYy0+ZXhpdF9mbGFnID0gVFJVRTsKKysJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZjLT5z dG9wX2xvY2spOworKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKysKKysJLyogQ2FuY2VsIHByZWdl biB0aHJlYWRzICovCisrCWZvciAoaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7Cisr CQlkZWJ1ZyAoIkNhbmNlbGVkICVsdSAoJWx1LCVkKSIsIGMtPnRpZFtpXSwgYy0+c3RydWN0X2lk LCBjLT5pZFtpXSk7CisrCQlwdGhyZWFkX2NhbmNlbChjLT50aWRbaV0pOworKwl9CisrICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbnVta3E7IGkrKykgeworKyAgICAgICAgICAgICAgICBwdGhyZWFk X211dGV4X2xvY2soJmMtPnFbaV0ubG9jayk7CisrICAgICAgICAgICAgICAgIHB0aHJlYWRfY29u ZF9icm9hZGNhc3QoJmMtPnFbaV0uY29uZCk7CisrICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZjLT5xW2ldLmxvY2spOworKyAgICAgICAgfQorKwlmb3IgKGkgPSAwOyBpIDwg Y2lwaGVyX3RocmVhZHM7IGkrKykgeworKwkJaWYgKHB0aHJlYWRfa2lsbChjLT50aWRbaV0sIDAp ICE9IDApCisrCQkJZGVidWczKCJBRVMtQ1RSIE1UIHB0aHJlYWRfam9pbiBmYWlsdXJlOiBJbnZh bGlkIHRocmVhZCBpZCAlbHUgaW4gJXMiLAorKwkJCSAgICAgICBjLT50aWRbaV0sIF9fRlVOQ1RJ T05fXyk7CisrCQllbHNlIHsKKysJCQlkZWJ1ZyAoIkpvaW5pbmcgJWx1ICglbHUsICVkKSIsIGMt PnRpZFtpXSwgYy0+c3RydWN0X2lkLCBjLT5pZFtpXSk7CisrCQkJcHRocmVhZF9tdXRleF9kZXN0 cm95KCZjLT5xW2ldLmxvY2spOworKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY29u ZF9kZXN0cm95KCZjLT5xW2ldLmNvbmQpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJl YWRfam9pbihjLT50aWRbaV0sIE5VTEwpOworKwkJCS8qIHRoaXMgZmluZHMgdGhlIGVudHJ5IGlu IHRoZSBoYXNoIHRoYXQgY29ycmVzcG9uZGluZyB0byB0aGUKKysJCQkgKiB0aHJlYWQgaWQuIFRo YXQncyB1c2VkIHRvIGZpbmQgdGhlIHBvaW50ZXIgdG8gdGhlIGNpcGhlciBzdHJ1Y3QKKysJCQkg KiBjcmVhdGVkIGluIHRocmVhZF9sb29wLiAqLworKwkJCXN0cnVjdCBhZXNfbXRfY3R4X3B0cnMg KnB0cjsKKysJCQlIQVNIX0ZJTkRfSU5UKGV2cF9wdHJzLCAmYy0+dGlkW2ldLCBwdHIpOworKwkJ CUVWUF9DSVBIRVJfQ1RYX2ZyZWUocHRyLT5wb2ludGVyKTsKKysJCQlIQVNIX0RFTChldnBfcHRy cywgcHRyKTsKKysJCQlmcmVlKHB0cik7ICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrCXB0 aHJlYWRfcndsb2NrX2Rlc3Ryb3koJmMtPnRpZF9sb2NrKTsKKyt9CisrCisrLyoKKysgKiBUaGUg bGlmZSBvZiBhIHByZWdlbiB0aHJlYWQ6CisrICogICAgRmluZCBlbXB0eSBrZXlzdHJlYW0gcXVl dWVzIGFuZCBmaWxsIHRoZW0gdXNpbmcgdGhlaXIgY291bnRlci4KKysgKiAgICBXaGVuIGRvbmUs IHVwZGF0ZSBjb3VudGVyIGZvciB0aGUgbmV4dCBmaWxsLgorKyAqLworKy8qIHByZXZpb3VzbHkg dGhpcyB1c2VkIHRoZSBsb3cgbGV2ZWwgaW50ZXJmYWNlIHdoaWNoIGlzLCBzYWRseSwKKysgKiBz bG93ZXIgdGhhbiB0aGUgRVZQIGludGVyZmFjZSBieSBhIGxvbmcgc2hvdC4gVGhlIG9yaWdpbmFs IGN0eCAoZnJvbSB0aGUKKysgKiBib2R5IG9mIHRoZSBjb2RlKSBpc24ndCBwYXNzZWQgaW4gaGVy ZSBidXQgd2UgaGF2ZSB0aGUga2V5IGFuZCB0aGUgY291bnRlcgorKyAqIHdoaWNoIG1lYW5zIHdl IHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgZXhhY3Qgc2FtZSBjdHggYW5kIHVzZSB0aGF0 IHRvCisrICogZmlsbCB0aGUga2V5c3RyZWFtIHF1ZXVlcy4gSSdtIGNvbmNlcm5lZCBhYm91dCBh ZGRpdGlvbmFsIG92ZXJoZWFkIGJ1dCB0aGUKKysgKiBhZGRpdGlvbmFsIHNwZWVkIGZyb20gQUVT Tkkgc2hvdWxkIG1ha2UgdXAgZm9yIGl0LiAgKi8KKysvKiBUaGUgYWJvdmUgY29tbWVudCB3YXMg bWFkZSB3aGVuIEkgdGhvdWdodCBJIG5lZWRlZCB0byBkbyBhIG5ldyBFVlAgaW5pdCBmb3IKKysg KiBlYWNoIGNvdW50ZXIgaW5jcmVtZW50LiBUdXJucyBvdXQgbm90IHRvIGJlIHRoZSBjYXNlIC1j anIgMTAvMTUvMjEqLworKworK3N0YXRpYyB2b2lkICoKKyt0aHJlYWRfbG9vcCh2b2lkICp4KQor K3sKKysJRVZQX0NJUEhFUl9DVFggKiB2b2xhdGlsZSBhZXNuaV9jdHg7CisrCXN0cnVjdCBzc2hf YWVzX2N0cl9jdHhfbXQgKmMgPSB4OworKwlzdHJ1Y3Qga3EgKnE7CisrCXN0cnVjdCBhZXNfbXRf Y3R4X3B0cnMgKnB0cjsKKysJaW50IHFpZHg7CisrCXB0aHJlYWRfdCBmaXJzdF90aWQ7CisrCWlu dCBvdXRsZW47CisrCXVfY2hhciBteW51bGxbS1FMRU4gKiBBRVNfQkxPQ0tfU0laRV07CisrCW1l bXNldCgmbXludWxsLCAwLCBLUUxFTiAqIEFFU19CTE9DS19TSVpFKTsKKysKKysJLyogZ2V0IHRo ZSB0aHJlYWQgaWQgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG9uZSAqLworKwlwdGhyZWFk X3J3bG9ja19yZGxvY2soJmMtPnRpZF9sb2NrKTsKKysJZmlyc3RfdGlkID0gYy0+dGlkWzBdOwor KwlwdGhyZWFkX3J3bG9ja191bmxvY2soJmMtPnRpZF9sb2NrKTsKKysKKysJLyogY3JlYXRlIHRo ZSBjb250ZXh0IGZvciB0aGlzIHRocmVhZCAqLworKwlhZXNuaV9jdHggPSBFVlBfQ0lQSEVSX0NU WF9uZXcoKTsKKysKKysJLyoga2VlcCB0cmFjayBvZiB0aGUgcG9pbnRlciBmb3IgdGhlIGV2cCBp biB0aGlzIHN0cnVjdAorKwkgKiBzbyB3ZSBjYW4gZnJlZSBpdCBsYXRlci4gU28gd2UgcGxhY2Ug aXQgaW4gYSBoYXNoIGluZGV4ZWQgb24gdGhlCisrCSAqIHRocmVhZCBpZCwgd2hpY2ggaXMgYXZh aWxhYmxlIHRvIHVzIGluIHRoZSBmcmVlIGZ1bmN0aW9uLgorKwkgKiBOb3RlLCB0aGUgdGhyZWFk IGlkIGlzbid0IG5lY2Vzc2FyeSB1bmlxdWUgYWNyb3NzIHJla2V5cyBidXQKKysJICogdGhhdCdz IG9rYXkgYXMgdGhleSBhcmUgdW5pcXVlIGR1cmluZyBhIGtleS4gKi8KKysJcHRyID0gbWFsbG9j KHNpemVvZiAqcHRyKTsgLypmcmVlZCBpbiBzdG9wICYgcHJlam9pbiAqLworKwlwdHItPnRpZCA9 IHB0aHJlYWRfc2VsZigpOyAvKiBpbmRleCBmb3IgaGFzaCAqLworKwlwdHItPnBvaW50ZXIgPSBh ZXNuaV9jdHg7CisrCUhBU0hfQUREX0lOVChldnBfcHRycywgdGlkLCBwdHIpOworKworKwkvKiBp bml0aWFsaXplIHRoZSBjaXBoZXIgY3R4IHdpdGggdGhlIGtleSBwcm92aWRlZAorKwkgKiBkZXRl cm1pbmUgd2hpY2ggY2lwaGVyIHRvIHVzZSBiYXNlZCBvbiB0aGUga2V5IHNpemUgKi8KKysJaWYg KGMtPmtleWxlbiA9PSAyNTYpCisrCQlFVlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBFVlBf YWVzXzI1Nl9jdHIoKSwgTlVMTCwgYy0+b3JpZ19rZXksIE5VTEwpOworKwllbHNlIGlmIChjLT5r ZXlsZW4gPT0gMTI4KQorKwkJRVZQX0VuY3J5cHRJbml0X2V4KGFlc25pX2N0eCwgRVZQX2Flc18x MjhfY3RyKCksIE5VTEwsIGMtPm9yaWdfa2V5LCBOVUxMKTsKKysJZWxzZSBpZiAoYy0+a2V5bGVu ID09IDE5MikKKysJCUVWUF9FbmNyeXB0SW5pdF9leChhZXNuaV9jdHgsIEVWUF9hZXNfMTkyX2N0 cigpLCBOVUxMLCBjLT5vcmlnX2tleSwgTlVMTCk7CisrCWVsc2UgeworKwkJbG9naXQoIkludmFs aWQga2V5IGxlbmd0aCBvZiAlZCBpbiBBRVMgQ1RSIE1ULiBFeGl0aW5nIiwgYy0+a2V5bGVuKTsK KysJCWV4aXQoMSk7CisrCX0KKysKKysJLyoKKysJICogSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ug b2Ygc3RhcnR1cCwgb25lIHRocmVhZCBtdXN0IGZpbGwKKysJICogdGhlIGZpcnN0IEtRIHRoZW4g bWFyayBpdCBhcyBkcmFpbmluZy4gTG9jayBoZWxkIHRocm91Z2hvdXQuCisrCSAqLworKworKwlp ZiAocHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgZmlyc3RfdGlkKSkgeworKwkJLyogZ2V0 IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBrZXlxdWUgc3RydWN0ICovCisrCQlxID0gJmMtPnFb MF07CisrCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2spOworKwkJLyogaWYgd2UgYXJlIGlu IHRoZSBJTklUIHN0YXRlIHRoZW4gZmlsbCB0aGUgcXVldWUgKi8KKysJCWlmIChxLT5xc3RhdGUg PT0gS1FJTklUKSB7CisrCQkJLyogc2V0IHRoZSBpbml0aWFsIGNvdW50ZXIgKi8KKysJCQlFVlBf RW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBOVUxMLCBOVUxMLCBOVUxMLCBxLT5jdHIpOworKwor KwkJCS8qIGVuY3lwaGVyIGEgYmxvY2sgc2l6ZWQgbnVsbCBzdHJpbmcgKG15bnVsbCkgd2l0aCB0 aGUga2V5LiBUaGlzCisrCQkJICogcmV0dXJucyB0aGUga2V5c3RyZWFtIGJlY2F1c2UgeG9yaW5n IHRoZSBrZXlzdHJlYW0KKysJCQkgKiBhZ2FpbnN0IG51bGwgcmV0dXJucyB0aGUga2V5c3RyZWFt LiBTdG9yZSB0aGF0IGluIHRoZSBhcHByb3ByaWF0ZSBxdWV1ZSAqLworKwkJCUVWUF9FbmNyeXB0 VXBkYXRlKGFlc25pX2N0eCwgcS0+a2V5c1swXSwgJm91dGxlbiwgbXludWxsLCBLUUxFTiAqIEFF U19CTE9DS19TSVpFKTsKKysKKysJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBibG9ja3MgY3JlYXRl cyB0byB0aGUgYWVzIGNvdW50ZXIgKi8KKysJCQlzc2hfY3RyX2FkZChxLT5jdHIsIEtRTEVOICog bnVta3EsIEFFU19CTE9DS19TSVpFKTsKKysJCQlxLT5xc3RhdGUgPSBLUURSQUlOSU5HOworKwkJ CXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNvbmQpOworKwkJfQorKwkJcHRocmVhZF9tdXRl eF91bmxvY2soJnEtPmxvY2spOworKwl9CisrCisrCS8qCisrCSAqIE5vcm1hbCBjYXNlIGlzIHRv IGZpbmQgZW1wdHkgcXVldWVzIGFuZCBmaWxsIHRoZW0sIHNraXBwaW5nIG92ZXIKKysJICogcXVl dWVzIGFscmVhZHkgZmlsbGVkIGJ5IG90aGVyIHRocmVhZHMgYW5kIHN0b3BwaW5nIHRvIHdhaXQg Zm9yCisrCSAqIGEgZHJhaW5pbmcgcXVldWUgdG8gYmVjb21lIGVtcHR5LgorKwkgKgorKwkgKiBN dWx0aXBsZSB0aHJlYWRzIG1heSBiZSB3YWl0aW5nIG9uIGEgZHJhaW5pbmcgcXVldWUgYW5kIGF3 b2tlbgorKwkgKiB3aGVuIGVtcHR5LiAgVGhlIGZpcnN0IHRocmVhZCB0byB3YWtlIHdpbGwgbWFy ayBpdCBhcyBmaWxsaW5nLAorKwkgKiBvdGhlcnMgd2lsbCBtb3ZlIG9uIHRvIGZpbGwsIHNraXAs IG9yIHdhaXQgb24gdGhlIG5leHQgcXVldWUuCisrCSAqLworKwlmb3IgKHFpZHggPSAxOzsgcWlk eCA9IChxaWR4ICsgMSkgJSBudW1rcSkgeworKwkJLyogQ2hlY2sgaWYgSSB3YXMgY2FuY2VsbGVk LCBhbHNvIGNoZWNrZWQgaW4gY29uZF93YWl0ICovCisrCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsK KysKKysJCS8qIENoZWNrIGlmIHdlIHNob3VsZCBleGl0IGFzIHdlbGwgKi8KKysJCXRocmVhZF9s b29wX2NoZWNrX2V4aXQoYyk7CisrCisrCQkvKiBMb2NrIHF1ZXVlIGFuZCBibG9jayBpZiBpdHMg ZHJhaW5pbmcgKi8KKysJCXEgPSAmYy0+cVtxaWR4XTsKKysJCXB0aHJlYWRfbXV0ZXhfbG9jaygm cS0+bG9jayk7CisrCQlwdGhyZWFkX2NsZWFudXBfcHVzaCh0aHJlYWRfbG9vcF9jbGVhbnVwLCAm cS0+bG9jayk7CisrCQl3aGlsZSAocS0+cXN0YXRlID09IEtRRFJBSU5JTkcgfHwgcS0+cXN0YXRl ID09IEtRSU5JVCkgeworKwkJCXRocmVhZF9sb29wX2NoZWNrX2V4aXQoYyk7CisrCQkJcHRocmVh ZF9jb25kX3dhaXQoJnEtPmNvbmQsICZxLT5sb2NrKTsKKysJCX0KKysJCXB0aHJlYWRfY2xlYW51 cF9wb3AoMCk7CisrCisrCQkvKiBJZiBmaWxsaW5nIG9yIGZ1bGwsIHNvbWVib2R5IGVsc2UgZ290 IGl0LCBza2lwICovCisrCQlpZiAocS0+cXN0YXRlICE9IEtRRU1QVFkpIHsKKysJCQlwdGhyZWFk X211dGV4X3VubG9jaygmcS0+bG9jayk7CisrCQkJY29udGludWU7CisrCQl9CisrCisrCQkvKgor KwkJICogRW1wdHksIGxldCdzIGZpbGwgaXQuCisrCQkgKiBRdWV1ZSBsb2NrIGlzIHJlbGlucXVp c2hlZCB3aGlsZSB3ZSBkbyB0aGlzIHNvIG90aGVycworKwkJICogY2FuIHNlZSB0aGF0IGl0J3Mg YmVpbmcgZmlsbGVkLgorKwkJICovCisrCQlxLT5xc3RhdGUgPSBLUUZJTExJTkc7CisrCQlwdGhy ZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKKysJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZx LT5sb2NrKTsKKysKKysJCS8qIHNldCB0aGUgaW5pdGlhbCBjb3VudGVyICovCisrCQlFVlBfRW5j cnlwdEluaXRfZXgoYWVzbmlfY3R4LCBOVUxMLCBOVUxMLCBOVUxMLCBxLT5jdHIpOworKworKwkJ Lyogc2VlIGNvcmVzcG9uZGluZyBibG9jayBhYm92ZSBmb3IgdXNlZnVsIGNvbW1lbnRzICovCisr CQlFVlBfRW5jcnlwdFVwZGF0ZShhZXNuaV9jdHgsIHEtPmtleXNbMF0sICZvdXRsZW4sIG15bnVs bCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0laRSk7CisrCisrCQkvKiBSZS1sb2NrLCBtYXJrIGZ1bGwg YW5kIHNpZ25hbCBjb25zdW1lciAqLworKwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsK KysJCXNzaF9jdHJfYWRkKHEtPmN0ciwgS1FMRU4gKiBudW1rcSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJcS0+cXN0YXRlID0gS1FGVUxMOworKwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29u ZCk7CisrCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7CisrCX0KKysKKysJcmV0dXJu IE5VTEw7CisrfQorKworKy8qIHRoaXMgaXMgd2hlcmUgdGhlIGRhdGEgaXMgYWN0dWFsbHkgZW5j aXBoZXJlZCBhbmQgZGVjaXBoZXJlZCAqLworKy8qIHRoaXMgbWF5IGFsc28gYmVuZWZpdCBmcm9t IHVwZ3JhZGluZyB0byB0aGUgRVZQIEFQSSAqLworK3N0YXRpYyBpbnQKKytzc2hfYWVzX2N0cihF VlBfQ0lQSEVSX0NUWCAqY3R4LCB1X2NoYXIgKmRlc3QsIGNvbnN0IHVfY2hhciAqc3JjLAorKyAg ICBzaXplX3QgbGVuKQorK3sKKysJdHlwZWRlZiB1bmlvbiB7CisrI2lmZGVmIENJUEhFUl9JTlQx MjhfT0sKKysJCV9fdWludDEyOF90ICp1MTI4OworKyNlbmRpZgorKwkJdWludDY0X3QgKnU2NDsK KysJCXVpbnQzMl90ICp1MzI7CisrCQl1aW50OF90ICp1ODsKKysJCWNvbnN0IHVpbnQ4X3QgKmN1 ODsKKysJCXVpbnRwdHJfdCB1OworKwl9IHB0cnNfdDsKKysJcHRyc190IGRlc3RwLCBzcmNwLCBi dWZwOworKwl1aW50cHRyX3QgYWxpZ247CisrCXN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmM7 CisrCXN0cnVjdCBrcSAqcSwgKm9sZHE7CisrCWludCByaWR4OworKwl1X2NoYXIgKmJ1ZjsKKysK KysJaWYgKGxlbiA9PSAwKQorKwkJcmV0dXJuIDE7CisrCWlmICgoYyA9IEVWUF9DSVBIRVJfQ1RY X2dldF9hcHBfZGF0YShjdHgpKSA9PSBOVUxMKQorKwkJcmV0dXJuIDA7CisrCisrCXEgPSAmYy0+ cVtjLT5xaWR4XTsKKysJcmlkeCA9IGMtPnJpZHg7CisrCisrCS8qIHNyYyBhbHJlYWR5IHBhZGRl ZCB0byBibG9jayBtdWx0aXBsZSAqLworKwlzcmNwLmN1OCA9IHNyYzsKKysJZGVzdHAudTggPSBk ZXN0OworKwlkbyB7IC8qIGRvIHVudGlsIGxlbiBpcyAwICovCisrCQlidWYgPSBxLT5rZXlzW3Jp ZHhdOworKwkJYnVmcC51OCA9IGJ1ZjsKKysKKysJCS8qIGZpZ3VyZSBvdXQgdGhlIGFsaWdubWVu dCBvbiB0aGUgZmx5ICovCisrI2lmZGVmIENJUEhFUl9VTkFMSUdORURfT0sKKysJCWFsaWduID0g MDsKKysjZWxzZQorKwkJYWxpZ24gPSBkZXN0cC51IHwgc3JjcC51IHwgYnVmcC51OworKyNlbmRp ZgorKworKwkJLyogeG9yIHRoZSBzcmMgYWdhaW5zdCB0aGUga2V5IChidWYpCisrCQkgKiBkaWZm ZXJlbnQgc3lzdGVtcyBjYW4gZG8gYWxsIDE2IGJ5dGVzIGF0IG9uY2Ugb3IKKysJCSAqIG1heSBu ZWVkIHRvIGRvIGl0IGluIDggb3IgNCBieXRlcyBjaHVua3MKKysJCSAqIHdvcnN0IGNhc2UgaXMg ZG9pbmcgaXQgYXMgYSBsb29wICovCisrI2lmZGVmIENJUEhFUl9JTlQxMjhfT0sKKysJCS8qIHdp dGggR0NDIDEzIHdlIGhhdmUgaGF2aW5nIGNvbnNpc3RlbnQgc2VnIGZhdWx0cworKwkJICogaW4g dGhpcyBzZWN0aW9uIG9mIGNvZGUuIFNpbmNlIHRoaXMgaXMgYSBjcml0aWNhbAorKwkJICogY29k ZSBwYXRoIHdlIGFyZSByZW1vdmluZyB0aGlzIHVudGlsIHdlIGhhdmUgYSBzb2x1dGlvbgorKwkJ ICogaW4gcGxhY2UgLWNqciAwMi8yMi8yNAorKwkJICogVE9ETzogRklYIFRISVMKKysJCSAqLwor KwkJLyogaWYgKChhbGlnbiAmIDB4ZikgPT0gMCkgeyAqLworKwkJLyogCWRlc3RwLnUxMjhbMF0g PSBzcmNwLnUxMjhbMF0gXiBidWZwLnUxMjhbMF07ICovCisrCQkvKiB9IGVsc2UgKi8KKysjZW5k aWYKKysJCS8qIHRoaXMgaXMgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3VyIGluIHNhbml0aXpl cnMKKysJCSAqIHRoaXMgaXMgYW5ub3lpbmcgYmVjYXVzZSBpdCdzIG1vcmUgZWZmaWNpZW50Cisr CQkgKiBidXQgVUIgaXMgbm90IHNvbWV0aGluZyBJIHdhbnQgdG8gcmV0YWluICovCisrCQkvKiA2 NCBiaXRzICovCisrCQkvKiBpZiAoKGFsaWduICYgMHg3KSA9PSAwKSB7ICovCisrCQkvKiAJZGVz dHAudTY0WzBdID0gc3JjcC51NjRbMF0gXiBidWZwLnU2NFswXTsgKi8KKysJCS8qIAlkZXN0cC51 NjRbMV0gPSBzcmNwLnU2NFsxXSBeIGJ1ZnAudTY0WzFdOyAqLworKwkJLyogL1wqIDMyIGJpdHMg KlwvICovCisrCQkvKiB9IGVsc2UgKi8KKysJCWlmICgoYWxpZ24gJiAweDMpID09IDApIHsKKysJ CQlkZXN0cC51MzJbMF0gPSBzcmNwLnUzMlswXSBeIGJ1ZnAudTMyWzBdOworKwkJCWRlc3RwLnUz MlsxXSA9IHNyY3AudTMyWzFdIF4gYnVmcC51MzJbMV07CisrCQkJZGVzdHAudTMyWzJdID0gc3Jj cC51MzJbMl0gXiBidWZwLnUzMlsyXTsKKysJCQlkZXN0cC51MzJbM10gPSBzcmNwLnUzMlszXSBe IGJ1ZnAudTMyWzNdOworKwkJfSBlbHNlIHsKKysJCQkvKjEgYnl0ZSBhdCBhIHRpbWUqLworKwkJ CXNpemVfdCBpOworKwkJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgKytpKQorKwkJ CQlkZXN0W2ldID0gc3JjW2ldIF4gYnVmW2ldOworKwkJfQorKworKwkJLyogaW5jL2RlY3JlbWVu dCB0aGUgcG9pbnRlcnMgYnkgdGhlIGJsb2NrIHNpemUgKDE2KSovCisrCQlkZXN0cC51ICs9IEFF U19CTE9DS19TSVpFOworKwkJc3JjcC51ICs9IEFFU19CTE9DS19TSVpFOworKworKwkJLyogSW5j cmVtZW50IHJlYWQgaW5kZXgsIHN3aXRjaCBxdWV1ZXMgb24gcm9sbG92ZXIgKi8KKysJCWlmICgo cmlkeCA9IChyaWR4ICsgMSkgJSBLUUxFTikgPT0gMCkgeworKwkJCW9sZHEgPSBxOworKworKwkJ CS8qIE1hcmsgbmV4dCBxdWV1ZSBkcmFpbmluZywgbWF5IG5lZWQgdG8gd2FpdCAqLworKwkJCWMt PnFpZHggPSAoYy0+cWlkeCArIDEpICUgbnVta3E7CisrCQkJcSA9ICZjLT5xW2MtPnFpZHhdOwor KwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7CisrCQkJd2hpbGUgKHEtPnFzdGF0ZSAh PSBLUUZVTEwpIHsKKysJCQkJcHRocmVhZF9jb25kX3dhaXQoJnEtPmNvbmQsICZxLT5sb2NrKTsK KysJCQl9CisrCQkJcS0+cXN0YXRlID0gS1FEUkFJTklORzsKKysJCQlwdGhyZWFkX2NvbmRfYnJv YWRjYXN0KCZxLT5jb25kKTsKKysJCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7Cisr CisrCQkJLyogTWFyayBjb25zdW1lZCBxdWV1ZSBlbXB0eSBhbmQgc2lnbmFsIHByb2R1Y2VycyAq LworKwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmb2xkcS0+bG9jayk7CisrCQkJb2xkcS0+cXN0YXRl ID0gS1FFTVBUWTsKKysJCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZvbGRxLT5jb25kKTsKKysJ CQlwdGhyZWFkX211dGV4X3VubG9jaygmb2xkcS0+bG9jayk7CisrCQl9CisrCX0gd2hpbGUgKGxl biAtPSBBRVNfQkxPQ0tfU0laRSk7CisrCWMtPnJpZHggPSByaWR4OworKwlyZXR1cm4gMTsKKyt9 CisrCisrc3RhdGljIGludAorK3NzaF9hZXNfY3RyX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwg Y29uc3QgdV9jaGFyICprZXksIGNvbnN0IHVfY2hhciAqaXYsCisrICAgIGludCBlbmMpCisrewor KwlzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjOworKwlpbnQgaTsKKysKKysJY2hhciAqYWVz X3RocmVhZHMgPSBnZXRlbnYoIlNTSF9DSVBIRVJfVEhSRUFEUyIpOworKyAgICAgICAgaWYgKGFl c190aHJlYWRzICE9IE5VTEwgJiYgc3RybGVuKGFlc190aHJlYWRzKSAhPSAwKQorKwkJY2lwaGVy X3RocmVhZHMgPSBhdG9pKGFlc190aHJlYWRzKTsKKysJZWxzZQorKwkJY2lwaGVyX3RocmVhZHMg PSAxOworKworKwlpZiAoY2lwaGVyX3RocmVhZHMgPCAxKQorKyAJCWNpcGhlcl90aHJlYWRzID0g MTsKKysKKysJaWYgKGNpcGhlcl90aHJlYWRzID4gTUFYX1RIUkVBRFMpCisrCQljaXBoZXJfdGhy ZWFkcyA9IE1BWF9USFJFQURTOworKworKwludW1rcSA9IGNpcGhlcl90aHJlYWRzICsgMTsKKysK KysJaWYgKG51bWtxID4gTUFYX05VTUtRKQorKwkJbnVta3EgPSBNQVhfTlVNS1E7CisrCisrCWRl YnVnKCJTdGFydGluZyAlZCB0aHJlYWRzIGFuZCAlZCBxdWV1ZXNcbiIsIGNpcGhlcl90aHJlYWRz LCBudW1rcSk7CisrCisrCS8qIHNldCB1cCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBjIChvdXIgY2lw aGVyIHN0cmVhbSBzdHJ1Y3QpICovCisrIAlpZiAoKGMgPSBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBw X2RhdGEoY3R4KSkgPT0gTlVMTCkgeworKwkJYyA9IHhtYWxsb2Moc2l6ZW9mKCpjKSk7CisrCQlw dGhyZWFkX3J3bG9ja19pbml0KCZjLT50aWRfbG9jaywgTlVMTCk7CisrI2lmZGVmIF9fQVBQTEVf XworKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYy0+c3RvcF9sb2NrLCBOVUxMKTsKKysJCWMtPmV4 aXRfZmxhZyA9IEZBTFNFOworKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKysKKysJCWMtPnN0YXRl ID0gSEFWRV9OT05FOworKworKwkJLyogaW5pdGlhbGl6ZSB0aGUgbXV0ZXhzIGFuZCBjb25kaXRp b25zIGZvciBlYWNoIGxvY2sgaW4gb3VyIHN0cnVjdCAqLworKwkJZm9yIChpID0gMDsgaSA8IG51 bWtxOyBpKyspIHsKKysJCQlwdGhyZWFkX211dGV4X2luaXQoJmMtPnFbaV0ubG9jaywgTlVMTCk7 CisrCQkJcHRocmVhZF9jb25kX2luaXQoJmMtPnFbaV0uY29uZCwgTlVMTCk7CisrCQl9CisrCisr CQkvKiBhdHRhY2ggb3VyIHN0cnVjdCB0byB0aGUgY29udGV4dCAqLworKwkJRVZQX0NJUEhFUl9D VFhfc2V0X2FwcF9kYXRhKGN0eCwgYyk7CisrCX0KKysKKysJLyogd2UgYXJlIGluaXRpYWxpemlu ZyBidXQgdGhlIGN1cnJlbnQgc3RydWN0dXJlIGFscmVhZHkKKysJICAgaGFzIGFuIElWIGFuZCBr ZXkgc28gd2Ugd2FudCB0byBraWxsIHRoZSBleGlzdGluZyBrZXkgZGF0YQorKwkgICBhbmQgc3Rh cnQgb3Zlci4gVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB3ZSBuZWVkIHRvIHJla2V5IHRoZSBkYXRh IHN0cmVhbSAqLworKwlpZiAoYy0+c3RhdGUgPT0gKEhBVkVfS0VZIHwgSEFWRV9JVikpIHsKKysJ CS8qIHRlbGwgdGhlIHByZWdlbiB0aHJlYWRzIHRvIGV4aXQgKi8KKysJCXN0b3BfYW5kX2pvaW5f cHJlZ2VuX3RocmVhZHMoYyk7CisrCisrI2lmZGVmIF9fQVBQTEVfXworKwkJLyogcmVzZXQgdGhl IGV4aXQgZmxhZyAqLworKwkJYy0+ZXhpdF9mbGFnID0gRkFMU0U7CisrI2VuZGlmIC8qIF9fQVBQ TEVfXyAqLworKworKwkJLyogU3RhcnQgb3ZlciBnZXR0aW5nIGtleSAmIGl2ICovCisrCQljLT5z dGF0ZSA9IEhBVkVfTk9ORTsKKysJfQorKworKwkvKiBzZXQgdGhlIGluaXRpYWwga2V5IGZvciB0 aGlzIGtleSBzdHJlYW0gcXVldWUgKi8KKysJaWYgKGtleSAhPSBOVUxMKSB7CisrCQlBRVNfc2V0 X2VuY3J5cHRfa2V5KGtleSwgRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChjdHgpICogOCwKKysJ CSAgICZjLT5hZXNfa2V5KTsKKysJCWMtPm9yaWdfa2V5ID0ga2V5OworKwkJYy0+a2V5bGVuID0g RVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChjdHgpICogODsKKysJCWMtPnN0YXRlIHw9IEhBVkVf S0VZOworKwl9CisrCisrCS8qIHNldCB0aGUgSVYgKi8KKysJaWYgKGl2ICE9IE5VTEwpIHsKKysJ CS8qIGluaXQgdGhlIGNvdW50ZXIgdGhpcyBpcyBqdXN0IGEgMTZieXRlIHVjaGFyICovCisrCQlt ZW1jcHkoYy0+YWVzX2NvdW50ZXIsIGl2LCBBRVNfQkxPQ0tfU0laRSk7CisrCQljLT5zdGF0ZSB8 PSBIQVZFX0lWOworKwl9CisrCisrCWlmIChjLT5zdGF0ZSA9PSAoSEFWRV9LRVkgfCBIQVZFX0lW KSkgeworKwkJLyogQ2xlYXIgcXVldWVzICovCisrCQkvKiBzZXQgdGhlIGZpcnN0IGtleSBpbiB0 aGUga2V5IHF1ZXVlIHRvIHRoZSBjdXJyZW50IGNvdW50ZXIgKi8KKysJCW1lbWNweShjLT5xWzBd LmN0ciwgYy0+YWVzX2NvdW50ZXIsIEFFU19CTE9DS19TSVpFKTsKKysJCS8qIGluZGljYXRlIHRo YXQgaXQgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgKi8KKysJCWMtPnFbMF0ucXN0YXRlID0gS1FJ TklUOworKwkJLyogZm9yIGVhY2ggb2YgdGhlIHJlbWFpbmluZyBxdWV1ZXMgc2V0IHRoZSBmaXJz dCBjb3VudGVyIHRvIHRoZQorKwkJICogY291bnRlciBhbmQgdGhlbiBhZGQgdGhlIHNpemUgb2Yg dGhlIHF1ZXVlIHRvIHRoZSBjb3VudGVyICovCisrCQlmb3IgKGkgPSAxOyBpIDwgbnVta3E7IGkr KykgeworKwkJCW1lbWNweShjLT5xW2ldLmN0ciwgYy0+YWVzX2NvdW50ZXIsIEFFU19CTE9DS19T SVpFKTsKKysJCQlzc2hfY3RyX2FkZChjLT5xW2ldLmN0ciwgaSAqIEtRTEVOLCBBRVNfQkxPQ0tf U0laRSk7CisrCQkJYy0+cVtpXS5xc3RhdGUgPSBLUUVNUFRZOworKwkJfQorKwkJYy0+cWlkeCA9 IDA7CisrCQljLT5yaWR4ID0gMDsKKysJCWMtPnN0cnVjdF9pZCA9IGdsb2JhbF9zdHJ1Y3RfaWQr KzsKKysKKysKKysJCS8qIFN0YXJ0IHRocmVhZHMgKi8KKysjZGVmaW5lIFNUQUNLX1NJWkUgKDEw MjQgKiAxMDI0KQorKwkJcHRocmVhZF9hdHRyX3QgYXR0cjsKKysJCXB0aHJlYWRfYXR0cl9pbml0 KCZhdHRyKTsKKysJCXB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHIsIFNUQUNLX1NJWkUp OworKwkJZm9yIChpID0gMDsgaSA8IGNpcGhlcl90aHJlYWRzOyBpKyspIHsKKysJCQlwdGhyZWFk X3J3bG9ja193cmxvY2soJmMtPnRpZF9sb2NrKTsKKysJCQlpZiAocHRocmVhZF9jcmVhdGUoJmMt PnRpZFtpXSwgJmF0dHIsIHRocmVhZF9sb29wLCBjKSAhPSAwKQorKwkJCQlmYXRhbCAoIkFFUy1D VFIgTVQgQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzaG91bGQgZGllIGhlcmUgKi8KKysJCQll bHNlIHsKKysJCQkJYy0+aWRbaV0gPSBpOworKwkJCQlkZWJ1ZyAoIkFFUy1DVFIgTVQgc3Bhd25l ZCBhIHRocmVhZCB3aXRoIGlkICVsdSBpbiAlcyAoJWx1LCAlZCkiLAorKwkJCQkgICAgICAgYy0+ dGlkW2ldLCBfX0ZVTkNUSU9OX18sIGMtPnN0cnVjdF9pZCwgYy0+aWRbaV0pOworKwkJCX0KKysJ CQlwdGhyZWFkX3J3bG9ja191bmxvY2soJmMtPnRpZF9sb2NrKTsKKysJCX0KKysJCXB0aHJlYWRf bXV0ZXhfbG9jaygmYy0+cVswXS5sb2NrKTsKKysJCS8vIHdhaXQgZm9yIGFsbCBvZiB0aGUgdGhy ZWFkcyB0byBiZSBpbml0aWFsaXplZAorKwkJd2hpbGUgKGMtPnFbMF0ucXN0YXRlID09IEtRSU5J VCkKKysJCQlwdGhyZWFkX2NvbmRfd2FpdCgmYy0+cVswXS5jb25kLCAmYy0+cVswXS5sb2NrKTsK KysJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjLT5xWzBdLmxvY2spOworKwl9CisrCXJldHVybiAx OworK30KKysKKytzdGF0aWMgaW50Cisrc3NoX2Flc19jdHJfY2xlYW51cChFVlBfQ0lQSEVSX0NU WCAqY3R4KQorK3sKKysJc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdCAqYzsKKysKKysJaWYgKChj ID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGN0eCkpICE9IE5VTEwpIHsKKysJCXN0b3Bf YW5kX2pvaW5fcHJlZ2VuX3RocmVhZHMoYyk7CisrCisrCQltZW1zZXQoYywgMCwgc2l6ZW9mKCpj KSk7CisrCQlmcmVlKGMpOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGN0eCwgTlVM TCk7CisrCX0KKysJcmV0dXJuIDE7CisrfQorKworKy8qIDxmcmllZGw+ICovCisrY29uc3QgRVZQ X0NJUEhFUiAqCisrZXZwX2Flc19jdHJfbXQodm9pZCkKKyt7CisrCXN0YXRpYyBFVlBfQ0lQSEVS ICphZXNfY3RyOworKwlhZXNfY3RyID0gRVZQX0NJUEhFUl9tZXRoX25ldyhOSURfdW5kZWYsIDE2 LypibG9jayovLCAxNi8qa2V5Ki8pOworKwlFVlBfQ0lQSEVSX21ldGhfc2V0X2l2X2xlbmd0aChh ZXNfY3RyLCBBRVNfQkxPQ0tfU0laRSk7CisrCUVWUF9DSVBIRVJfbWV0aF9zZXRfaW5pdChhZXNf Y3RyLCBzc2hfYWVzX2N0cl9pbml0KTsKKysJRVZQX0NJUEhFUl9tZXRoX3NldF9jbGVhbnVwKGFl c19jdHIsIHNzaF9hZXNfY3RyX2NsZWFudXApOworKwlFVlBfQ0lQSEVSX21ldGhfc2V0X2RvX2Np cGhlcihhZXNfY3RyLCBzc2hfYWVzX2N0cik7CisrIyAgaWZuZGVmIFNTSF9PTERfRVZQCisrCUVW UF9DSVBIRVJfbWV0aF9zZXRfZmxhZ3MoYWVzX2N0ciwgRVZQX0NJUEhfQ0JDX01PREUKKysJCQkJ ICAgICAgfCBFVlBfQ0lQSF9WQVJJQUJMRV9MRU5HVEgKKysJCQkJICAgICAgfCBFVlBfQ0lQSF9B TFdBWVNfQ0FMTF9JTklUCisrCQkJCSAgICAgIHwgRVZQX0NJUEhfQ1VTVE9NX0lWKTsKKysjICBl bmRpZiAvKlNTSF9PTERfRVZQKi8KKysJcmV0dXJuIGFlc19jdHI7CisrfQorKyNlbmRpZiAvKiBP U1NMIENoZWNrICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXItY3RyLW10 LWZ1bmN0aW9ucy5jIG9wZW5zc2gtMTAuNXAxL2NpcGhlci1jdHItbXQtZnVuY3Rpb25zLmMKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jdHItbXQtZnVuY3Rpb25zLmMJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY3Ry LW10LWZ1bmN0aW9ucy5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODg0ODAyNDA2ICswMjAwCitAQCAt MCwwICsxLDY4MyBAQAorKy8qCisrICogT3BlblNTSCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RSIENp cGhlciBQcm92aWRlciBmb3IgT3BlblNTTCAzCisrICoKKysgKiBBdXRob3I6IEJlbmphbWluIEJl bm5ldHQgPGJlbkBwc2MuZWR1PgorKyAqIEF1dGhvcjogTWlrZSBUYXNvdGEgPHRhc290YUBnbWFp bC5jb20+CisrICogQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqIENv cHlyaWdodCAoYykgMjAwOC0yMDIyIFBpdHRzYnVyZ2ggU3VwZXJjb21wdXRpbmcgQ2VudGVyLiBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogQmFzZWQgb24gb3JpZ2luYWwgT3BlblNTSCBB RVMtQ1RSIGNpcGhlci4gU21hbGwgcG9ydGlvbnMgcmVtYWluIHVuY2hhbmdlZCwKKysgKiBDb3B5 cmlnaHQgKGMpIDIwMDMgTWFya3VzIEZyaWVkbCA8bWFya3VzQG9wZW5ic2Qub3JnPgorKyAqCisr ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBz b2Z0d2FyZSBmb3IgYW55CisrICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVi eSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorKyAqIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisrICoKKysg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJ TVMgQUxMIFdBUlJBTlRJRVMKKysgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrICogTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKysgKiBB TlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9S IEFOWSBEQU1BR0VTCisrICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwg REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisrICogQUNUSU9OIE9GIENPTlRSQUNULCBO RUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKysgKiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRX QVJFLgorKyAqLworKworKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorKworKy8qIG9ubHkgZm9yIHN5 c3RlbXMgd2l0aCBPU1NMIDMgKi8KKysjaWZkZWYgV0lUSF9PUEVOU1NMMworKyNpbmNsdWRlIDxz dGRhcmcuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisrI2luY2x1ZGUgInhtYWxsb2MuaCIKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUg ImNpcGhlci1jdHItbXQtZnVuY3Rpb25zLmgiCisrI2luY2x1ZGUgImxvZy5oIgorKworKy8qIGZv ciBwcm92aWRlciBlcnJvciBzdHJ1Y3QgKi8KKysjaW5jbHVkZSAib3NzbDMtcHJvdmlkZXItZXJy LmgiCisrI2luY2x1ZGUgIm51bS5oIgorKworKy8qIG5vdGUgcmVnYXJkaW5nIHRocmVhZHMgYW5k IHF1ZXVlcyAqLworKy8qIGluaXRpYWxseSB0aGlzIGNpcGhlciB3YXMgd3JpdHRlbiBpbiBhIHdh eSB0aGF0CisrICogdGhlIGtleSBzdHJlYW0gd2FzIGdlbmVyYXRlZCBpbiBhIHBlciBjaXBoZXIg YmxvY2sKKysgKiBsb29wLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGtleSBzdHJlYW0gcXVldWUgbGVu Z3RoIHdhcworKyAqIDE2ayBhbmQgdGhlIGNpcGhlciBibG9jayBzaXplIHdhcyAxNiBieXRlcyBp dCB3b3VsZAorKyAqIGZpbGwgdGhlIHF1ZXVlIDE2IGJ5dGVzIGF0IGEgdGltZS4gTWl0Y2ggRG9y cmVsbCBwb2ludGVkCisrICogb3V0IHRoYXQgd2UgY291bGQgZmlsbCB0aGUgcXVldWUgaW4gb25j ZSBjYWxsIGVsaW1pbmF0aW5nCisrICogbG9vcCBhbmQgbXVsdGlwbGUgY2FsbHMgdG8gRVZQX0Vu Y3J5cHRVcGRhdGUuIERvaW5nIHNvCisrICogZHJhbWF0aWNhbGx5IHJlZHVjZWQgQ1BVIGxvYWQg aW4gdGhlIHRocmVhZHMgYW5kIGluZGljYXRlZAorKyAqIHRoYXQgd2UgY291bGQgYWxzbyBlbGlt aW5hdGUgbW9zdCBvZiB0aGUgdGhyZWFkcyBhbmQgcXVldWVzCisrICogYXMgaXQgd291bGQgdGFr ZSBmYXIgbGVzcyB0aW1lIGZvciBhIHF1ZXVlIHRvIGVidGVyIEtRX0ZVTEwKKysgKiBzdGF0ZS4g QXMgc3VjaCwgd2UndmUgcmVkdWNlZCB0aGUgZGVmYXVsdCBudW1iZXIgb2YgdGhyZWFkcworKyAq IGFuZCBxdWV1ZXMgZnJvbSAyIGFuZCA4IChyZXNwZWN0aXZlbHkpIHRvIDEgYW5kIDIuIFdlJ3Zl IGFsc28KKysgKiBlbGltbmF0ZWQgdGhlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBwaHlzaWNhbCBu dW1iZXIgb2YgY29yZXMgb24KKysgKiB0aGUgc3lzdGVtIGFuZCwgaWYgdGhlIHVzZXIgZGVzaXJl cywgY2FuIHNwaW4gdXAgbW9yZSB0aHJlYWRzCisrICogdXNpbmcgYW4gZW52aXJvbm1lbnQgdmFy aWFibGUuIEFkZGl0aW9uYWxseSwgcXVldWVzIGlzIG5vdyBmaXhlZAorKyAqIGF0IHRocmVhZF9j b3VudCArIDEuCisrICogY2pyIDEwLzE5LzIwMjIgKi8KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0t LS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysvKiBOdW1iZXIgb2YgcHJlZ2Vu IHRocmVhZHMgdG8gdXNlICovCisrLyogdGhpcyBpcyBhIGRlZmF1bHQgdmFsdWUuIFRoZSBhY3R1 YWwgbnVtYmVyIGlzCisrICogZGV0ZXJtaW5lZCBkdXJpbmcgaW5pdCBhcyBhIGZ1bmN0aW9uIG9m IHRoZSBudW1iZXIKKysgKiBvZiBhdmFpbGFibGUgY29yZXMgKi8KKytpbnQgY2lwaGVyX3RocmVh ZHMgPSAxOworKworKy8qIE51bWJlciBvZiBrZXlzdHJlYW0gcXVldWVzICovCisrLyogaWRlYWxs eSB0aGlzIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggc28gdGhhdCB0aGVyZSBpcworKyAqIGFsd2F5 cyBhIGtleSBxdWV1ZSBmb3IgYSB0aHJlYWQgdG8gd29yayBvbgorKyAqIHNvIG1heWJlIGRvdWJs ZSBvZiB0aGUgbnVtYmVyIG9mIHRocmVhZHMuIEFnYWluIHRoaXMKKysgKiBpcyBhIGRlZmF1bHQg YW5kIHRoZSBhY3R1YWwgdmFsdWUgaXMgZGV0ZXJtaW5lZCBpbiBpbml0Ki8KKytpbnQgbnVta3Eg PSAyOworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0t LS0tLS0tKi8KKysKKysvKiBnbG9iYWxzICovCisrLyogaG93IHdlIGluY3JlbWVudCB0aGUgaWQg dGhlIHN0cnVjdHMgd2UgY3JlYXRlICovCisrbG9uZyB1bnNpZ25lZCBpbnQgZ2xvYmFsX3N0cnVj dF9pZCA9IDA7CisrCisrLyoga2VlcCBhIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGNyZWF0ZWQgaW4g dGhyZWFkX2xvb3AgdG8gZnJlZSBsYXRlciAqLworK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKmV2 cF9wdHJzID0gTlVMTDsKKysKKysvKiBwcml2YXRlIGZ1bmN0aW9ucyAqLworKworKy8qCisrICog QWRkIG51bSB0byBjb3VudGVyICdjdHInCisrICovCisrc3RhdGljIHZvaWQKKytzc2hfY3RyX2Fk ZCh1X2NoYXIgKmN0ciwgdWludDMyX3QgbnVtLCB1X2ludCBsZW4pCisreworKwlpbnQgaTsKKysJ dWludDE2X3QgbjsKKysKKysJZm9yIChuID0gMCwgaSA9IGxlbiAtIDE7IGkgPj0gMCAmJiAobnVt IHx8IG4pOyBpLS0pIHsKKysJCW4gPSBjdHJbaV0gKyAobnVtICYgMHhmZikgKyBuOworKwkJbnVt ID4+PSA4OworKwkJY3RyW2ldID0gbiAmIDB4ZmY7CisrCQluID4+PSA4OworKwl9CisrfQorKwor Ky8qCisrICogVGhyZWFkcyBtYXkgYmUgY2FuY2VsbGVkIGluIGEgcHRocmVhZF9jb25kX3dhaXQs IHdlIG11c3QgZnJlZSB0aGUgbXV0ZXgKKysgKi8KKytzdGF0aWMgdm9pZAorK3RocmVhZF9sb29w X2NsZWFudXAodm9pZCAqeCkKKyt7CisrCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211 dGV4X3QgKil4KTsKKyt9CisrCisrLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIGV4aXQsIHdlIGFyZSBk b2luZyBib3RoIGNhbmNlbCBhbmQgZXhpdCBjb25kaXRpb24KKysgKiBzaW5jZSB0aHJlYWRzIGNh biBmYWlsIHRvIG5vdGljZSB0aGF0IHRoZXkgaGF2ZSBiZWVuIGNhbmNlbGxlZDogb24gT1NYCisr ICogbmF0aXZlbHksIGFuZCBvbiBhbnkgcGxhdGZvcm0gd2hlbiBydW5uaW5nIHVuZGVyIHZhbGdy aW5kLCB3aG9zZQorKyAqIHNjaGVkdWxlciBkb2VzIG5vdCBkZWxpdmVyIGEgY2FuY2VsIHRvIGEg dGhyZWFkIHBhcmtlZCBpbgorKyAqIHB0aHJlYWRfY29uZF93YWl0KCkuIFdlIHdhbnQgYSBiYWNr dXAgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugd29uJ3QgaGFuZworKyAqIHdoZW4gdGhlIG1haW4gcHJv Y2VzcyBqb2luKCktcyB0aGUgY2FuY2VsbGVkIHRocmVhZC4KKysgKi8KKytzdGF0aWMgdm9pZAor K3RocmVhZF9sb29wX2NoZWNrX2V4aXQoc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHgp CisreworKwlpbnQgZXhpdF9mbGFnOworKworKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmFlc19t dF9jdHgtPnN0b3BfbG9jayk7CisrCWV4aXRfZmxhZyA9IGFlc19tdF9jdHgtPmV4aXRfZmxhZzsK KysJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZhZXNfbXRfY3R4LT5zdG9wX2xvY2spOworKworKwlp ZiAoZXhpdF9mbGFnKQorKwkJcHRocmVhZF9leGl0KE5VTEwpOworK30KKysKKysvKgorKyAqIEhl bHBlciBmdW5jdGlvbiB0byB0ZXJtaW5hdGUgdGhlIGhlbHBlciB0aHJlYWRzCisrICovCisrc3Rh dGljIHZvaWQKKytzdG9wX2FuZF9qb2luX3ByZWdlbl90aHJlYWRzKHN0cnVjdCBhZXNfbXRfY3R4 X3N0ICphZXNfbXRfY3R4KQorK3sKKysJaW50IGk7CisrCisrCS8qIG5vdGlmeSB0aHJlYWRzIHRo YXQgdGhleSBzaG91bGQgZXhpdCAqLworKwlwdGhyZWFkX3J3bG9ja193cmxvY2soJmFlc19tdF9j dHgtPnN0b3BfbG9jayk7CisrCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IDE7CisrCXB0aHJlYWRf cndsb2NrX3VubG9jaygmYWVzX210X2N0eC0+c3RvcF9sb2NrKTsKKysKKysJLyoKKysJICogV2Fr ZSBhbnl0aGluZyBwYXJrZWQgaW4gcHRocmVhZF9jb25kX3dhaXQoKSBzbyB0aGF0IGl0IHJlY2hl Y2tzCisrCSAqIHRoZSBleGl0IGZsYWcgYW5kIGxlYXZlcyB2aWEgdGhyZWFkX2xvb3BfY2hlY2tf ZXhpdCgpLiBXaXRob3V0CisrCSAqIHRoaXMgYSBwYXJrZWQgdGhyZWFkIGNhbiBvbmx5IGJlIHJl bW92ZWQgYnkgcHRocmVhZF9jYW5jZWwoKSwKKysJICogd2hpY2ggbGVhdmVzIHRoZSBqb2luIGJl bG93IGJsb2NrZWQgaW5kZWZpbml0ZWx5IHdoZW5ldmVyIHRoYXQKKysJICogY2FuY2VsIGlzIG5v dCBkZWxpdmVyZWQuCisrCSAqLworKwlmb3IgKGkgPSAwOyBpIDwgbnVta3E7IGkrKykgeworKwkJ cHRocmVhZF9tdXRleF9sb2NrKCZhZXNfbXRfY3R4LT5xW2ldLmxvY2spOworKwkJcHRocmVhZF9j b25kX2Jyb2FkY2FzdCgmYWVzX210X2N0eC0+cVtpXS5jb25kKTsKKysJCXB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZhZXNfbXRfY3R4LT5xW2ldLmxvY2spOworKwl9CisrCisrCS8qIENhbmNlbCBwcmVn ZW4gdGhyZWFkcyAqLworKwlmb3IgKGkgPSAwOyBpIDwgY2lwaGVyX3RocmVhZHM7IGkrKykgewor KwkJZGVidWdfZiAoIkNhbmNlbGVkICVsdSAoJWx1LCVkKSIsIGFlc19tdF9jdHgtPnRpZFtpXSwg YWVzX210X2N0eC0+c3RydWN0X2lkLAorKwkJICAgICAgIGFlc19tdF9jdHgtPmlkW2ldKTsKKysJ CXB0aHJlYWRfY2FuY2VsKGFlc19tdF9jdHgtPnRpZFtpXSk7CisrCX0KKysJZm9yIChpID0gMDsg aSA8IGNpcGhlcl90aHJlYWRzOyBpKyspIHsKKysJCWlmIChwdGhyZWFkX2tpbGwoYWVzX210X2N0 eC0+dGlkW2ldLCAwKSAhPSAwKQorKwkJCWRlYnVnMygiQUVTLUNUUiBNVCBwdGhyZWFkX2pvaW4g ZmFpbHVyZTogSW52YWxpZCB0aHJlYWQgaWQgJWx1IGluICVzIiwKKysJCQkgICAgICAgYWVzX210 X2N0eC0+dGlkW2ldLCBfX2Z1bmNfXyk7CisrCQllbHNlIHsKKysJCQlkZWJ1Z19mICgiSm9pbmlu ZyAlbHUgKCVsdSwgJWQpIiwgYWVzX210X2N0eC0+dGlkW2ldLCBhZXNfbXRfY3R4LT5zdHJ1Y3Rf aWQsCisrCQkJCSBhZXNfbXRfY3R4LT5pZFtpXSk7CisrCQkJcHRocmVhZF9qb2luKGFlc19tdF9j dHgtPnRpZFtpXSwgTlVMTCk7CisrCQkJLyogdGhpcyBmaW5kcyB0aGUgZW50cnkgaW4gdGhlIGhh c2ggdGhhdCBjb3JyZXNwb25kaW5nIHRvIHRoZQorKwkJCSAqIHRocmVhZCBpZC4gVGhhdCdzIHVz ZWQgdG8gZmluZCB0aGUgcG9pbnRlciB0byB0aGUgY2lwaGVyIHN0cnVjdAorKwkJCSAqIGNyZWF0 ZWQgaW4gdGhyZWFkX2xvb3AuICovCisrCQkJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRyOwor KwkJCUhBU0hfRklORF9JTlQoZXZwX3B0cnMsICZhZXNfbXRfY3R4LT50aWRbaV0sIHB0cik7Cisr CQkJRVZQX0NJUEhFUl9DVFhfZnJlZShwdHItPnBvaW50ZXIpOworKwkJCUhBU0hfREVMKGV2cF9w dHJzLCBwdHIpOworKwkJCWZyZWUocHRyKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAg fQorKwlwdGhyZWFkX3J3bG9ja19kZXN0cm95KCZhZXNfbXRfY3R4LT50aWRfbG9jayk7CisrfQor KworKy8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlCisrICogVGVzdGlu ZyBpbmRpY2F0ZXMgdGhhdCBpbiBtb3N0IGFsbCBzaXR1YXRpb25zIHRoZSBvcHRpbWFsIG51bWJl ciBvZgorKyAqIHRocmVhZHMgaXMgMSBtZWFuaW5nIDEgZm9yIGluYm91bmQgYW5kIDEgZm9yIG91 dGJvdW5kLiBUaGUgb3B0aW1hbAorKyAqIHF1ZXVlIGNvdW50IGhhcyBhbHNvIGJlZW4gZGV0ZXJt aW5lZCB0byBiZSB0aHJlYWRfY291bnQgKyAxLgorKyAqIG5vdGUgdGhpcyBmdW5jdGlvbiB1cGRh dGVzIHR3byBnbG9iYWxzIC0gbnVta3EgYW5kIGNpcGhlcl90aHJlYWRzCisrICogaXQgcmV0dXJu cyB0aGUgdmFsdWUgb2YgY2lwaGVyX3RocmVhZHMgYnV0IGl0IGRvZXNuJ3QgbmVlZCB0byAqLwor K3N0YXRpYyBpbnQgZ2V0X3RocmVhZF9jb3VudCgpIHsKKysKKysJY2hhciAqIGFlc190aHJlYWRz ID0gZ2V0ZW52KCJTU0hfQ0lQSEVSX1RIUkVBRFMiKTsKKysJZGVidWdfZiAoIlNTSCB0aHJlYWQg Y291bnQgaXMgJXMiLCBhZXNfdGhyZWFkcyk7CisrICAgICAgICBpZiAoYWVzX3RocmVhZHMgIT0g TlVMTCAmJiBzdHJsZW4oYWVzX3RocmVhZHMpICE9IDApCisrCQljaXBoZXJfdGhyZWFkcyA9IGF0 b2koYWVzX3RocmVhZHMpOworKwllbHNlCisrCQljaXBoZXJfdGhyZWFkcyA9IDE7CisrCisrCWlm IChjaXBoZXJfdGhyZWFkcyA8IDEpCisrIAkJY2lwaGVyX3RocmVhZHMgPSAxOworKworKwlpZiAo Y2lwaGVyX3RocmVhZHMgPiBNQVhfVEhSRUFEUykKKysJCWNpcGhlcl90aHJlYWRzID0gTUFYX1RI UkVBRFM7CisrCisrCW51bWtxID0gY2lwaGVyX3RocmVhZHMgKyAxOworKworKwlpZiAobnVta3Eg PiBNQVhfTlVNS1EpCisrCQludW1rcSA9IE1BWF9OVU1LUTsKKysKKysJZGVidWdfZiAoIlN0YXJ0 aW5nICVkIHRocmVhZHMgYW5kICVkIHF1ZXVlc1xuIiwgY2lwaGVyX3RocmVhZHMsIG51bWtxKTsK KysKKysJcmV0dXJuIChjaXBoZXJfdGhyZWFkcyk7CisrfQorKworKworKy8qCisrICogVGhlIGxp ZmUgb2YgYSBwcmVnZW4gdGhyZWFkOgorKyAqICAgIEZpbmQgZW1wdHkga2V5c3RyZWFtIHF1ZXVl cyBhbmQgZmlsbCB0aGVtIHVzaW5nIHRoZWlyIGNvdW50ZXIuCisrICogICAgV2hlbiBkb25lLCB1 cGRhdGUgY291bnRlciBmb3IgdGhlIG5leHQgZmlsbC4KKysgKi8KKytzdGF0aWMgdm9pZCAqCisr dGhyZWFkX2xvb3Aodm9pZCAqam9iKQorK3sKKysJRVZQX0NJUEhFUl9DVFggKiB2b2xhdGlsZSBl dnBfY3R4OworKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0eCA9IGpvYjsKKysJc3Ry dWN0IGtxICpxOworKwlzdHJ1Y3QgYWVzX210X2N0eF9wdHJzICpwdHI7CisrCXB0aHJlYWRfdCBm aXJzdF90aWQ7CisrCWludCBvdXRsZW47CisrCXVfY2hhciBteW51bGxbS1FMRU4gKiBBRVNfQkxP Q0tfU0laRV07CisrCW1lbXNldCgmbXludWxsLCAwLCBLUUxFTiAqIEFFU19CTE9DS19TSVpFKTsK KysKKysJLyogZ2V0IHRoZSB0aHJlYWQgaWQgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG9u ZSAqLworKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmFlc19tdF9jdHgtPnRpZF9sb2NrKTsKKysJ Zmlyc3RfdGlkID0gYWVzX210X2N0eC0+dGlkWzBdOworKwlwdGhyZWFkX3J3bG9ja191bmxvY2so JmFlc19tdF9jdHgtPnRpZF9sb2NrKTsKKysKKysJLyogY3JlYXRlIHRoZSBjb250ZXh0IGZvciB0 aGlzIHRocmVhZCAqLworKwlldnBfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7CisrCisrCS8q IGtlZXAgdHJhY2sgb2YgdGhlIHBvaW50ZXIgZm9yIHRoZSBldnAgaW4gdGhpcyBzdHJ1Y3QKKysJ ICogc28gd2UgY2FuIGZyZWUgaXQgbGF0ZXIuIFNvIHdlIHBsYWNlIGl0IGluIGEgaGFzaCBpbmRl eGVkIG9uIHRoZQorKwkgKiB0aHJlYWQgaWQsIHdoaWNoIGlzIGF2YWlsYWJsZSB0byB1cyBpbiB0 aGUgZnJlZSBmdW5jdGlvbi4KKysJICogTm90ZSwgdGhlIHRocmVhZCBpZCBpc24ndCBuZWNlc3Nh cnkgdW5pcXVlIGFjcm9zcyByZWtleXMgYnV0CisrCSAqIHRoYXQncyBva2F5IGFzIHRoZXkgYXJl IHVuaXF1ZSBkdXJpbmcgYSBrZXkuICovCisrCXB0ciA9IG1hbGxvYyhzaXplb2YgKnB0cik7IC8q ZnJlZWQgaW4gc3RvcCAmIHByZWpvaW4gKi8KKysJcHRyLT50aWQgPSBwdGhyZWFkX3NlbGYoKTsg LyogaW5kZXggZm9yIGhhc2ggKi8KKysJcHRyLT5wb2ludGVyID0gZXZwX2N0eDsKKysJSEFTSF9B RERfSU5UKGV2cF9wdHJzLCB0aWQsIHB0cik7CisrCisrCS8qIGluaXRpYWxpemUgdGhlIGNpcGhl ciBjdHggd2l0aCB0aGUga2V5IHByb3ZpZGVkCisrCSAqIGRldGVybWluYmUgd2hpY2ggY2lwaGVy IHRvIHVzZSBiYXNlZCBvbiB0aGUga2V5IHNpemUgKi8KKysJaWYgKGFlc19tdF9jdHgtPmtleWxl biA9PSAyNTYpCisrCQlFVlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0eCwgRVZQX2Flc18yNTZfY3Ry KCksIE5VTEwsIGFlc19tdF9jdHgtPm9yaWdfa2V5LCBOVUxMKTsKKysJZWxzZSBpZiAoYWVzX210 X2N0eC0+a2V5bGVuID09IDEyOCkKKysJCUVWUF9FbmNyeXB0SW5pdF9leChldnBfY3R4LCBFVlBf YWVzXzEyOF9jdHIoKSwgTlVMTCwgYWVzX210X2N0eC0+b3JpZ19rZXksIE5VTEwpOworKwllbHNl IGlmIChhZXNfbXRfY3R4LT5rZXlsZW4gPT0gMTkyKQorKwkJRVZQX0VuY3J5cHRJbml0X2V4KGV2 cF9jdHgsIEVWUF9hZXNfMTkyX2N0cigpLCBOVUxMLCBhZXNfbXRfY3R4LT5vcmlnX2tleSwgTlVM TCk7CisrCWVsc2UKKysJCWZhdGFsKCJJbnZhbGlkIGtleSBsZW5ndGggb2YgJWQgaW4gQUVTIENU UiBNVC4gRXhpdGluZyIsIGFlc19tdF9jdHgtPmtleWxlbik7CisrCisrCS8qCisrCSAqIEhhbmRs ZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHN0YXJ0dXAsIG9uZSB0aHJlYWQgbXVzdCBmaWxsCisrCSAq IHRoZSBmaXJzdCBLUSB0aGVuIG1hcmsgaXQgYXMgZHJhaW5pbmcuIExvY2sgaGVsZCB0aHJvdWdo b3V0LgorKwkgKi8KKysJaWYgKHB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksIGZpcnN0X3Rp ZCkpIHsKKysJCS8qIGdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUga2V5IHF1ZXVlIHN0cnVj dCAqLworKwkJcSA9ICZhZXNfbXRfY3R4LT5xWzBdOworKwkJcHRocmVhZF9tdXRleF9sb2NrKCZx LT5sb2NrKTsKKysJCS8qIGlmIHdlIGFyZSBpbiB0aGUgSU5JVCBzdGF0ZSB0aGVuIGZpbGwgdGhl IHF1ZXVlICovCisrCQlpZiAocS0+cXN0YXRlID09IEtRSU5JVCkgeworKwkJCS8qIHNldCB0aGUg aW5pdGlhbCBjb3VudGVyICovCisrCQkJRVZQX0VuY3J5cHRJbml0X2V4KGV2cF9jdHgsIE5VTEws IE5VTEwsIE5VTEwsIHEtPmN0cik7CisrCQkJLyogZW5jeXBoZXIgYSBibG9jayBzaXplZCBudWxs IHN0cmluZyAobXludWxsKSB3aXRoIHRoZSBrZXkuIFRoaXMKKysJCQkgKiByZXR1cm5zIHRoZSBr ZXlzdHJlYW0gYmVjYXVzZSB4b3JpbmcgdGhlIGtleXN0cmVhbQorKwkJCSAqIGFnYWluc3QgbnVs bCByZXR1cm5zIHRoZSBrZXlzdHJlYW0uIFN0b3JlIHRoYXQgaW4gdGhlIGFwcHJvcHJpYXRlIHF1 ZXVlICovCisrCQkJRVZQX0VuY3J5cHRVcGRhdGUoZXZwX2N0eCwgcS0+a2V5c1swXSwgJm91dGxl biwgbXludWxsLCBLUUxFTiAqIEFFU19CTE9DS19TSVpFKTsKKysJCQkvKiBVcGRhdGUgdGhlIGFl cyBjb3VudGVyICovCisrCQkJc3NoX2N0cl9hZGQocS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBBRVNf QkxPQ0tfU0laRSk7CisrCQkJLyogc2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgdGhyZWFkIHNldCBp dCB0byBkcmFpbmluZyAqLworKwkJCXEtPnFzdGF0ZSA9IEtRRFJBSU5JTkc7CisrCQkJcHRocmVh ZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29uZCk7CisrCQl9CisrCQlwdGhyZWFkX211dGV4X3VubG9j aygmcS0+bG9jayk7CisrCX0KKysKKysJLyoKKysJICogTm9ybWFsIGNhc2UgaXMgdG8gZmluZCBl bXB0eSBxdWV1ZXMgYW5kIGZpbGwgdGhlbSwgc2tpcHBpbmcgb3ZlcgorKwkgKiBxdWV1ZXMgYWxy ZWFkeSBmaWxsZWQgYnkgb3RoZXIgdGhyZWFkcyBhbmQgc3RvcHBpbmcgdG8gd2FpdCBmb3IKKysJ ICogYSBkcmFpbmluZyBxdWV1ZSB0byBiZWNvbWUgZW1wdHkuCisrCSAqCisrCSAqIE11bHRpcGxl IHRocmVhZHMgbWF5IGJlIHdhaXRpbmcgb24gYSBkcmFpbmluZyBxdWV1ZSBhbmQgYXdva2VuCisr CSAqIHdoZW4gZW1wdHkuIFRoZSBmaXJzdCB0aHJlYWQgdG8gd2FrZSB3aWxsIG1hcmsgaXQgYXMg ZmlsbGluZywKKysJICogb3RoZXJzIHdpbGwgbW92ZSBvbiB0byBmaWxsLCBza2lwLCBvciB3YWl0 IG9uIHRoZSBuZXh0IHF1ZXVlLgorKwkgKiBXZSBpbml0IHFpZHggaGVyZSBiZWNhdXNlIGlmIHdl IGRvIGl0IGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uCisrCSAqIHdlIGdldCBhIHdhcm5pbmcg YWJvdXQgaXQgcG9zc2libHkgYmVpbmcgY2xvYmJlcmVkLiBUaGUgZXhhY3QgcmVhc29uCisrCSAq IGRvZXNuJ3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBidXQgaXQgaGFzIHRvIGhhcHBlbiBhZnRlciB0 aGUKKysJICogZmlyc3QgcHRocmVhZF9yd2xvY2tfcmRsb2NrKCkuIE1pZ2h0IGhhdmUgc29tZXRo aW5nIHRvIGRvIHdpdGgKKysJICogaW5jb3JyZWN0IGNvbXBpbGVyIG9wdGltaXphdGlvbnMuCisr CSAqLworKwlpbnQgcWlkeDsKKysJZm9yIChxaWR4ID0gMTs7IHFpZHggPSAocWlkeCArIDEpICUg bnVta3EpIHsKKysJCS8qIENoZWNrIGlmIEkgd2FzIGNhbmNlbGxlZCwgYWxzbyBjaGVja2VkIGlu IGNvbmRfd2FpdCAqLworKwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7CisrCisrCQkvKiBDaGVjayBp ZiB3ZSBzaG91bGQgZXhpdCBhcyB3ZWxsICovCisrCQl0aHJlYWRfbG9vcF9jaGVja19leGl0KGFl c19tdF9jdHgpOworKworKwkJLyogTG9jayBxdWV1ZSBhbmQgYmxvY2sgaWYgaXRzIGRyYWluaW5n ICovCisrCQlxID0gJmFlc19tdF9jdHgtPnFbcWlkeF07CisrCQlwdGhyZWFkX211dGV4X2xvY2so JnEtPmxvY2spOworKwkJcHRocmVhZF9jbGVhbnVwX3B1c2godGhyZWFkX2xvb3BfY2xlYW51cCwg JnEtPmxvY2spOworKwkJd2hpbGUgKHEtPnFzdGF0ZSA9PSBLUURSQUlOSU5HIHx8IHEtPnFzdGF0 ZSA9PSBLUUlOSVQpIHsKKysJCQl0aHJlYWRfbG9vcF9jaGVja19leGl0KGFlc19tdF9jdHgpOwor KwkJCXB0aHJlYWRfY29uZF93YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7CisrCQl9CisrCQlwdGhy ZWFkX2NsZWFudXBfcG9wKDApOworKworKwkJLyogSWYgZmlsbGluZyBvciBmdWxsLCBzb21lYm9k eSBlbHNlIGdvdCBpdCwgc2tpcCAqLworKwkJaWYgKHEtPnFzdGF0ZSAhPSBLUUVNUFRZKSB7Cisr CQkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOworKwkJCWNvbnRpbnVlOworKwkJfQor KworKwkJLyoKKysJCSAqIEVtcHR5LCBsZXQncyBmaWxsIGl0LgorKwkJICogUXVldWUgbG9jayBp cyByZWxpbnF1aXNoZWQgd2hpbGUgd2UgZG8gdGhpcyBzbyBvdGhlcnMKKysJCSAqIGNhbiBzZWUg dGhhdCBpdCdzIGJlaW5nIGZpbGxlZC4KKysJCSAqLworKwkJcS0+cXN0YXRlID0gS1FGSUxMSU5H OworKwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29uZCk7CisrCQlwdGhyZWFkX211dGV4 X3VubG9jaygmcS0+bG9jayk7CisrCisrCQkvKiBzZXQgdGhlIGluaXRpYWwgY291bnRlciAqLwor KwkJRVZQX0VuY3J5cHRJbml0X2V4KGV2cF9jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIHEtPmN0cik7 CisrCisrCQkvKiBzZWUgY29yZXNwb25kaW5nIGJsb2NrIGFib3ZlIGZvciB1c2VmdWwgY29tbWVu dHMgKi8KKysJCUVWUF9FbmNyeXB0VXBkYXRlKGV2cF9jdHgsIHEtPmtleXNbMF0sICZvdXRsZW4s IG15bnVsbCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0laRSk7CisrCisrCQkvKiBSZS1sb2NrLCBtYXJr IGZ1bGwgYW5kIHNpZ25hbCBjb25zdW1lciAqLworKwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5s b2NrKTsKKysJCXNzaF9jdHJfYWRkKHEtPmN0ciwgS1FMRU4gKiBudW1rcSwgQUVTX0JMT0NLX1NJ WkUpOworKwkJcS0+cXN0YXRlID0gS1FGVUxMOworKwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgm cS0+Y29uZCk7CisrCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7CisrCX0KKysKKysJ cmV0dXJuIE5VTEw7CisrfQorKworKworKy8qIE91ciB2ZXJzaW9uIG9mIHRoZSBFVlAgZnVuY3Rp b25zCisrICogdGhlc2UgYXJlIHB1YmxpYyBhcyB0aGV5IGFyZSB1c2VkIGJ5IHRoZSBwcm92aWRl ciAqLworKworKy8qIGluc3RhbnRpYXRlIHRoZSBjaXBoZXIgY29udGV4dC4KKysgKiBpbiB0aGlz IHdlIGNyZWF0ZSB0aGUgRVZQIGN0eCBhbmQgdGhlIEFFUyBjdHgsIHNldHVwIHRoZSBBRVMgY3R4 CisrICogaW5pdGlhbGl6ZSB0aGUgRVZQIGFuZCB0aGVuIGF0dGFjaCB0aGUgQUVTIGN0eCB0byB0 aGUgRVZQIGN0eC4KKysgKiBUaGUgKm9ubHkqIGRpZmZlcmVuY2UgYmV0d2VlbiBhZXNfbXRfbmV3 Y3R4XzI1NnwxOTJ8MTI4IGlzIHRoZQorKyAqIGtleWxlbmd0aCBvZiB0aGUgY2lwaGVyIHVzZWQg aW4gRVZQX0NpcGhlckluaXQKKysgKiBwYXJhbWV0ZXJzOiBwcm92aWRlciBjb250ZXh0CisrICog cmV0dXJuczogRVZQIGNvbnRleHQKKysgKi8KKysvKiBob25lc3RseSB0aGUgd2F5IHRoaXMgd29y a3MgbWFrZXMgbWUgdGhpbmsgdGhhdCB0aGVyZSBoYXMgdG8gYmUKKysgKiBhIGJldHRlciB3YXkg b2YgZG9pbmcgdGhpcyBob3dldmVyLCBJJ3ZlIHlldCB0byBmaW5kIG9uZSB0aGF0IGRvZXNuJ3QK KysgKiBpbnZvbHZlIG1vcmUgbWFkbmVzcy4gSSB0aGluayB0aGF0J3MgbW9zdGx5IGJlY2FzZSBJ IGRvbid0IHVuZGVyc3RhbmQKKysgKiBob3cgcGFyYW1zIHdvcmsgcHJvcGVybHkuIEkgZmVlbCBs aWtlIEkgc2hvdWRsIGJlIGFibGUgdG8gdXNlIHRoZW0KKysgKiB0byBzcGVjaWZ5IHRoZSBrZXkg bGVuZ3RoIGJ1dC4uLiBhbHNvLCBJJ2QgdGhpbmsgSSdkIGJlIGFibGUgdG8KKysgKiBzZXQgYWVz X210X2N0eF9zdC0+a2V5bGVuIHRvIHRoZSBrZXlsZW5ndGggYnV0IHRoYXQgZG9lc24ndCBzZWVt IHRvCisrICogd29yayBlaXRoZXIuIFRoYXQgc2FpZCwgdGhpcyBkb2VzIHdvcmsgZXZlbiBpZiBp dCdzIGEgYml0IGNsdW5reS4KKysgKiAtY2pyIDA5LzA4LzIwMjIgKi8KKyt2b2lkICphZXNfbXRf bmV3Y3R4XzI1Nih2b2lkICpwcm92Y3R4KQorK3sKKysJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFl c19tdF9jdHggPSBtYWxsb2Moc2l6ZW9mKCphZXNfbXRfY3R4KSk7CisrCUVWUF9DSVBIRVJfQ1RY ICpldnBfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7CisrCisrCWlmICgoYWVzX210X2N0eCAh PSBOVUxMKSAmJiAoZXZwX2N0eCAhPSBOVUxMKSkgeworKwkJZ2V0X3RocmVhZF9jb3VudCgpOyAv KiB1cGRhdGUgY2lwaGVyX3RocmVhZHMgYW5kIG51bWtxICovCisrCQlwdGhyZWFkX3J3bG9ja19p bml0KCZhZXNfbXRfY3R4LT50aWRfbG9jaywgTlVMTCk7CisrCQlwdGhyZWFkX3J3bG9ja19pbml0 KCZhZXNfbXRfY3R4LT5zdG9wX2xvY2ssIE5VTEwpOworKwkJYWVzX210X2N0eC0+ZXhpdF9mbGFn ID0gMDsKKysKKysJCWFlc19tdF9jdHgtPnN0YXRlID0gSEFWRV9OT05FOworKworKwkJLyogaW5p dGlhbGl6ZSB0aGUgbXV0ZXhzIGFuZCBjb25kaXRpb25zIGZvciBlYWNoIGxvY2sgaW4gb3VyIHN0 cnVjdCAqLworKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1rcTsgaSsrKSB7CisrCQkJcHRocmVh ZF9tdXRleF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmxvY2ssIE5VTEwpOworKwkJCXB0aHJlYWRf Y29uZF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmNvbmQsIE5VTEwpOworKwkJfQorKwkJYWVzX210 X2N0eC0+cHJvdmN0eCA9IHByb3ZjdHg7CisrCQlFVlBfQ2lwaGVySW5pdChldnBfY3R4LCBFVlBf YWVzXzI1Nl9jdHIoKSwgTlVMTCwgTlVMTCwgMCk7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBw X2RhdGEoZXZwX2N0eCwgYWVzX210X2N0eCk7CisrCQlyZXR1cm4gZXZwX2N0eDsKKysJfQorKwly ZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZCAqYWVzX210X25ld2N0eF8xOTIodm9pZCAqcHJvdmN0 eCkKKyt7CisrCXN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4ID0gbWFsbG9jKHNpemVv ZigqYWVzX210X2N0eCkpOworKwlFVlBfQ0lQSEVSX0NUWCAqZXZwX2N0eCA9IEVWUF9DSVBIRVJf Q1RYX25ldygpOworKworKwlpZiAoKGFlc19tdF9jdHggIT0gTlVMTCkgJiYgKGV2cF9jdHggIT0g TlVMTCkpIHsKKysJCWdldF90aHJlYWRfY291bnQoKTsgLyogdXBkYXRlIGNpcGhlcl90aHJlYWRz IGFuZCBudW1rcSAqLworKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVzX210X2N0eC0+dGlkX2xv Y2ssIE5VTEwpOworKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVzX210X2N0eC0+c3RvcF9sb2Nr LCBOVUxMKTsKKysJCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IDA7CisrCisrCQlhZXNfbXRfY3R4 LT5zdGF0ZSA9IEhBVkVfTk9ORTsKKysKKysJCS8qIGluaXRpYWxpemUgdGhlIG11dGV4cyBhbmQg Y29uZGl0aW9ucyBmb3IgZWFjaCBsb2NrIGluIG91ciBzdHJ1Y3QgKi8KKysJCWZvciAoaW50IGkg PSAwOyBpIDwgbnVta3E7IGkrKykgeworKwkJCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYWVzX210X2N0 eC0+cVtpXS5sb2NrLCBOVUxMKTsKKysJCQlwdGhyZWFkX2NvbmRfaW5pdCgmYWVzX210X2N0eC0+ cVtpXS5jb25kLCBOVUxMKTsKKysJCX0KKysJCWFlc19tdF9jdHgtPnByb3ZjdHggPSBwcm92Y3R4 OworKwkJRVZQX0NpcGhlckluaXQoZXZwX2N0eCwgRVZQX2Flc18xOTJfY3RyKCksIE5VTEwsIE5V TEwsIDApOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGV2cF9jdHgsIGFlc19tdF9j dHgpOworKwkJcmV0dXJuIGV2cF9jdHg7CisrCX0KKysJcmV0dXJuIE5VTEw7CisrfQorKworK3Zv aWQgKmFlc19tdF9uZXdjdHhfMTI4KHZvaWQgKnByb3ZjdHgpCisreworKwlzdHJ1Y3QgYWVzX210 X2N0eF9zdCAqYWVzX210X2N0eCA9IG1hbGxvYyhzaXplb2YoKmFlc19tdF9jdHgpKTsKKysJRVZQ X0NJUEhFUl9DVFggKmV2cF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKKysKKysJaWYgKChh ZXNfbXRfY3R4ICE9IE5VTEwpICYmIChldnBfY3R4ICE9IE5VTEwpKSB7CisrCQlnZXRfdGhyZWFk X2NvdW50KCk7IC8qIHVwZGF0ZSBjaXBoZXJfdGhyZWFkcyBhbmQgbnVta3EgKi8KKysJCXB0aHJl YWRfcndsb2NrX2luaXQoJmFlc19tdF9jdHgtPnRpZF9sb2NrLCBOVUxMKTsKKysJCXB0aHJlYWRf cndsb2NrX2luaXQoJmFlc19tdF9jdHgtPnN0b3BfbG9jaywgTlVMTCk7CisrCQlhZXNfbXRfY3R4 LT5leGl0X2ZsYWcgPSAwOworKworKwkJYWVzX210X2N0eC0+c3RhdGUgPSBIQVZFX05PTkU7Cisr CisrCQkvKiBpbml0aWFsaXplIHRoZSBtdXRleHMgYW5kIGNvbmRpdGlvbnMgZm9yIGVhY2ggbG9j ayBpbiBvdXIgc3RydWN0ICovCisrCQlmb3IgKGludCBpID0gMDsgaSA8IG51bWtxOyBpKyspIHsK KysJCQlwdGhyZWFkX211dGV4X2luaXQoJmFlc19tdF9jdHgtPnFbaV0ubG9jaywgTlVMTCk7Cisr CQkJcHRocmVhZF9jb25kX2luaXQoJmFlc19tdF9jdHgtPnFbaV0uY29uZCwgTlVMTCk7CisrCQl9 CisrCQlhZXNfbXRfY3R4LT5wcm92Y3R4ID0gcHJvdmN0eDsKKysJCUVWUF9DaXBoZXJJbml0KGV2 cF9jdHgsIEVWUF9hZXNfMTI4X2N0cigpLCBOVUxMLCBOVUxMLCAwKTsKKysJCUVWUF9DSVBIRVJf Q1RYX3NldF9hcHBfZGF0YShldnBfY3R4LCBhZXNfbXRfY3R4KTsKKysJCXJldHVybiBldnBfY3R4 OworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiB0aGlzIGZ1bmN0aW9uIGV4cGVjdHMg YSB2b2lkIGJ1dCB3ZSBuZWVkIHRoZSBhY3R1YWwgY29udGV4dAorKyAqIHRvIGdldCB0aGUgYXBw X2RhdGEuCisrICovCisrdm9pZCBhZXNfbXRfZnJlZWN0eCh2b2lkICp2ZXZwX2N0eCkKKyt7Cisr CUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gdmV2cF9jdHg7CisrCXN0cnVjdCBhZXNfbXRfY3R4 X3N0ICphZXNfbXRfY3R4OworKworKwlpZiAoKGFlc19tdF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9n ZXRfYXBwX2RhdGEoZXZwX2N0eCkpICE9IE5VTEwpIHsKKysJCXN0b3BfYW5kX2pvaW5fcHJlZ2Vu X3RocmVhZHMoYWVzX210X2N0eCk7CisrCisrCQltZW1zZXQoYWVzX210X2N0eCwgMCwgc2l6ZW9m KCphZXNfbXRfY3R4KSk7CisrCQlmcmVlKGFlc19tdF9jdHgpOworKwkJRVZQX0NJUEhFUl9DVFhf c2V0X2FwcF9kYXRhKGV2cF9jdHgsIE5VTEwpOworKwl9CisrCUVWUF9DSVBIRVJfQ1RYX2ZyZWUo ZXZwX2N0eCk7CisrfQorKworKy8qIHRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIEVWUCBjb250ZXh0 LCBnZXRzIHRoZSBBRVMgY29udGV4dAorKyAqIGFuZCBzdGFydHMgdGhlIHZhcmlvdXMgdGhyZWFk cyB3ZSBuZWVkICovCisraW50IGFlc19tdF9zdGFydF90aHJlYWRzKHZvaWQgKnZldnBfY3R4LCBj b25zdCB1X2NoYXIgKmtleSwKKysJCQkgc2l6ZV90IGtleWxlbiwgY29uc3QgdV9jaGFyICppdiwK KysJCQkgc2l6ZV90IGl2bGVuLCBjb25zdCBPU1NMX1BBUkFNICpvc3NsX3BhcmFtcykKKyt7Cisr CUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gdmV2cF9jdHg7CisrCXN0cnVjdCBhZXNfbXRfY3R4 X3N0ICphZXNfbXRfY3R4OworKworKworKwkvKiBnZXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgYWVz X210X2N0eCAob3VyIGNpcGhlciBzdHJlYW0gc3RydWN0KSAqLworKyAJaWYgKChhZXNfbXRfY3R4 ID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGV2cF9jdHgpKSA9PSBOVUxMKSB7CisrCQlm YXRhbCgiTWlzc2luZyBBRVMgTVQgY29udGV4dCBkYXRhISIpOworKwl9CisrCisrCS8qIHdlIGFy ZSBpbml0aWFsaXppbmcgYnV0IHRoZSBjdXJyZW50IHN0cnVjdHVyZSBhbHJlYWR5CisrCSAqIGhh cyBhbiBJViBhbmQga2V5IHNvIHdlIHdhbnQgdG8ga2lsbCB0aGUgZXhpc3Rpbmcga2V5IGRhdGEK KysJICogYW5kIHN0YXJ0IG92ZXIuIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4gd2UgbmVlZCB0byBy ZWtleSB0aGUgZGF0YSBzdHJlYW0gKi8KKysJaWYgKGFlc19tdF9jdHgtPnN0YXRlID09IChIQVZF X0tFWSB8IEhBVkVfSVYpKSB7CisrCQkvKiB0ZWxsIHRoZSBwcmVnZW4gdGhyZWFkcyB0byBleGl0 ICovCisrCQlzdG9wX2FuZF9qb2luX3ByZWdlbl90aHJlYWRzKGFlc19tdF9jdHgpOworKworKwkJ LyogcmVzZXQgdGhlIGV4aXQgZmxhZyAqLworKwkJYWVzX210X2N0eC0+ZXhpdF9mbGFnID0gMDsK KysKKysJCS8qIFN0YXJ0IG92ZXIgZ2V0dGluZyBrZXkgJiBpdiAqLworKwkJYWVzX210X2N0eC0+ c3RhdGUgPSBIQVZFX05PTkU7CisrCX0KKysKKysJLyogc2V0IHRoZSBpbml0aWFsIGtleSBmb3Ig dGhpcyBrZXkgc3RyZWFtIHF1ZXVlICovCisrCWlmIChrZXkgIT0gTlVMTCkgeworKwkJYWVzX210 X2N0eC0+a2V5bGVuID0gRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChldnBfY3R4KSAqIDg7Cisr CQlhZXNfbXRfY3R4LT5vcmlnX2tleSA9IGtleTsKKysJCWFlc19tdF9jdHgtPnN0YXRlIHw9IEhB VkVfS0VZOworKwl9CisrCisrCS8qIHNldCB0aGUgSVYgKi8KKysJaWYgKGl2ICE9IE5VTEwpIHsK KysJCS8qIGluaXQgdGhlIGNvdW50ZXIgdGhpcyBpcyBqdXN0IGEgMTZieXRlIHVjaGFyICovCisr CQltZW1jcHkoYWVzX210X2N0eC0+YWVzX2NvdW50ZXIsIGl2LCBBRVNfQkxPQ0tfU0laRSk7Cisr CQlhZXNfbXRfY3R4LT5zdGF0ZSB8PSBIQVZFX0lWOworKwl9CisrCisrCWlmIChhZXNfbXRfY3R4 LT5zdGF0ZSA9PSAoSEFWRV9LRVkgfCBIQVZFX0lWKSkgeworKwkJLyogQ2xlYXIgcXVldWVzICov CisrCQkvKiBzZXQgdGhlIGZpcnN0IGtleSBpbiB0aGUga2V5IHF1ZXVlIHRvIHRoZSBjdXJyZW50 IGNvdW50ZXIgKi8KKysJCW1lbWNweShhZXNfbXRfY3R4LT5xWzBdLmN0ciwgYWVzX210X2N0eC0+ YWVzX2NvdW50ZXIsIEFFU19CTE9DS19TSVpFKTsKKysJCS8qIGluZGljYXRlIHRoYXQgaXQgbmVl ZHMgdG8gYmUgaW5pdGlhbGl6ZWQgKi8KKysJCWFlc19tdF9jdHgtPnFbMF0ucXN0YXRlID0gS1FJ TklUOworKwkJLyogZm9yIGVhY2ggb2YgdGhlIHJlbWFpbmluZyBxdWV1ZXMgc2V0IHRoZSBmaXJz dCBjb3VudGVyIHRvIHRoZQorKwkJICogY291bnRlciBhbmQgdGhlbiBhZGQgdGhlIHNpemUgb2Yg dGhlIHF1ZXVlIHRvIHRoZSBjb3VudGVyICovCisrCQlmb3IgKGludCBpID0gMTsgaSA8IG51bWtx OyBpKyspIHsKKysJCQltZW1jcHkoYWVzX210X2N0eC0+cVtpXS5jdHIsIGFlc19tdF9jdHgtPmFl c19jb3VudGVyLCBBRVNfQkxPQ0tfU0laRSk7CisrCQkJc3NoX2N0cl9hZGQoYWVzX210X2N0eC0+ cVtpXS5jdHIsIGkgKiBLUUxFTiwgQUVTX0JMT0NLX1NJWkUpOworKwkJCWFlc19tdF9jdHgtPnFb aV0ucXN0YXRlID0gS1FFTVBUWTsKKysJCX0KKysJCWFlc19tdF9jdHgtPnFpZHggPSAwOworKwkJ YWVzX210X2N0eC0+cmlkeCA9IDA7CisrCQlhZXNfbXRfY3R4LT5zdHJ1Y3RfaWQgPSBnbG9iYWxf c3RydWN0X2lkKys7CisrCisrCQkvKiBTdGFydCB0aHJlYWRzLiBNYWtlIHN1cmUgd2UgaGF2ZSBl bm91Z2ggc3RhY2sgc3BhY2UgKHVuZGVyIGFscGluZSkKKysJCSogYW5kIGFyZW4ndCB1c2luZyBt b3JlIHRoYW4gd2UgbmVlZCAobGludXgpLiBUaGlzIGNhbiBiZSBhcyBsb3cgYXMKKysJCSogNTEy S0IgYnV0IHRoYXQncyBhIG1pbmltdW0uIDEwMjRLQiBnaXZlcyB1cyBhIGxpdHRsZSBoZWFkcm9v bSBpZiB3ZQorKwkJKiBuZWVkIGl0ICovCisrI2RlZmluZSBTVEFDS19TSVpFICgxMDI0ICogMTAy NCkKKysgICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKKysgICAgICAgICAgICAg ICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOworKyAgICAgICAgICAgICAgICBwdGhyZWFkX2F0 dHJfc2V0c3RhY2tzaXplKCZhdHRyLCBTVEFDS19TSVpFKTsKKysJCWZvciAoaW50IGkgPSAwOyBp IDwgY2lwaGVyX3RocmVhZHM7IGkrKykgeworKwkJCXB0aHJlYWRfcndsb2NrX3dybG9jaygmYWVz X210X2N0eC0+dGlkX2xvY2spOworKwkJCWlmIChwdGhyZWFkX2NyZWF0ZSgmYWVzX210X2N0eC0+ dGlkW2ldLCAmYXR0ciwgdGhyZWFkX2xvb3AsIGFlc19tdF9jdHgpICE9IDApCisrCQkJCWZhdGFs ICgiQUVTLUNUUiBNVCBDb3VsZCBub3QgY3JlYXRlIHRocmVhZCBpbiAlcyIsIF9fZnVuY19fKTsK KysJCQllbHNlIHsKKysJCQkJYWVzX210X2N0eC0+aWRbaV0gPSBpOworKwkJCQlkZWJ1Z19mICgi QUVTLUNUUiBNVCBzcGF3bmVkIGEgdGhyZWFkIHdpdGggaWQgJWx1ICglbHUsICVkKSIsCisrCQkJ CQkgYWVzX210X2N0eC0+dGlkW2ldLCBhZXNfbXRfY3R4LT5zdHJ1Y3RfaWQsCisrCQkJCQkgYWVz X210X2N0eC0+aWRbaV0pOworKwkJCX0KKysJCQlwdGhyZWFkX3J3bG9ja191bmxvY2soJmFlc19t dF9jdHgtPnRpZF9sb2NrKTsKKysJCX0KKysJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYWVzX210X2N0 eC0+cVswXS5sb2NrKTsKKysJCS8vIHdhaXQgZm9yIGFsbCBvZiB0aGUgdGhyZWFkcyB0byBiZSBp bml0aWFsaXplZAorKwkJd2hpbGUgKGFlc19tdF9jdHgtPnFbMF0ucXN0YXRlID09IEtRSU5JVCkK KysJCQlwdGhyZWFkX2NvbmRfd2FpdCgmYWVzX210X2N0eC0+cVswXS5jb25kLCAmYWVzX210X2N0 eC0+cVswXS5sb2NrKTsKKysJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhZXNfbXRfY3R4LT5xWzBd LmxvY2spOworKwl9CisrCXJldHVybiAxOworK30KKysKKysvKiB0aGlzIHNob3VsZCBjb3JyZXNw b25kIHRvIHNzaF9hZXNfY3RyCisrICogT1NTTF9DT1JFX01BS0VfRlVOQyhpbnQsIGNpcGhlcl9j aXBoZXIsCisrICogICAgICAgICAgICAgICAgICAgICAodm9pZCAqY2N0eCwKKysgKiAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpvdXRsLCBzaXplX3Qgb3V0 c2l6ZSwKKysgKiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgaW5sKSkKKysgKi8KKysKKytpbnQgYWVzX210X2RvX2NpcGhlcih2b2lkICp2ZXZwX2N0 eCwKKysJCQkgICAgdV9jaGFyICpkZXN0LCBzaXplX3QgKmRlc3RsZW4sIHNpemVfdCBkZXN0c2l6 ZSwKKysJCQkgICAgY29uc3QgdV9jaGFyICpzcmMsIHNpemVfdCBsZW4pCisreworKwl0eXBlZGVm IHVuaW9uIHsKKysjaWZkZWYgQ0lQSEVSX0lOVDEyOF9PSworKwkJX191aW50MTI4X3QgKnUxMjg7 CisrI2VuZGlmCisrCQl1aW50NjRfdCAqdTY0OworKwkJdWludDMyX3QgKnUzMjsKKysJCXVpbnQ4 X3QgKnU4OworKwkJY29uc3QgdWludDhfdCAqY3U4OworKwkJdWludHB0cl90IHU7CisrCX0gcHRy c190OworKwlwdHJzX3QgZGVzdHAsIHNyY3AsIGJ1ZnA7CisrCXVpbnRwdHJfdCBhbGlnbjsKKysJ c3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHg7CisrCXN0cnVjdCBrcSAqcSwgKm9sZHE7 CisrCWludCByaWR4OworKwl1X2NoYXIgKmJ1ZjsKKysJRVZQX0NJUEhFUl9DVFggKmV2cF9jdHgg PSB2ZXZwX2N0eDsKKysJdWludDY0X3Qgc3JjX2EsIGtleV9hOworKwkKKysJaWYgKGxlbiA9PSAw KQorKwkJcmV0dXJuIDE7CisrCisrCWlmICgoYWVzX210X2N0eCA9IEVWUF9DSVBIRVJfQ1RYX2dl dF9hcHBfZGF0YShldnBfY3R4KSkgPT0gTlVMTCkKKysJCXJldHVybiAwOworKworKwlxID0gJmFl c19tdF9jdHgtPnFbYWVzX210X2N0eC0+cWlkeF07CisrCXJpZHggPSBhZXNfbXRfY3R4LT5yaWR4 OworKworKwkvKiBzcmMgYWxyZWFkeSBwYWRkZWQgdG8gYmxvY2sgbXVsdGlwbGUgKi8KKysJc3Jj cC5jdTggPSBzcmM7CisrCWRlc3RwLnU4ID0gZGVzdDsKKysJZG8geyAvKiBkbyB1bnRpbCBsZW4g aXMgMCAqLworKwkJYnVmID0gcS0+a2V5c1tyaWR4XTsKKysJCWJ1ZnAudTggPSBidWY7CisrCisr CQkvKiBmaWd1cmUgb3V0IHRoZSBhbGlnbm1lbnQgb24gdGhlIGZseSAqLworKyNpZmRlZiBDSVBI RVJfVU5BTElHTkVEX09LCisrCQlhbGlnbiA9IDA7CisrI2Vsc2UKKysJCWFsaWduID0gZGVzdHAu dSB8IHNyY3AudSB8IGJ1ZnAudTsKKysjZW5kaWYKKysKKysJCS8qIHhvciB0aGUgc3JjIGFnYWlu c3QgdGhlIGtleSAoYnVmKQorKwkJICogZGlmZmVyZW50IHN5c3RlbXMgY2FuIGRvIGFsbCAxNiBi eXRlcyBhdCBvbmNlIG9yCisrCQkgKiBtYXkgbmVlZCB0byBkbyBpdCBpbiA4IG9yIDQgYnl0ZXMg Y2h1bmtzCisrCQkgKiB3b3JzdCBjYXNlIGlzIGRvaW5nIGl0IGFzIGEgbG9vcCAqLworKyNpZmRl ZiBDSVBIRVJfSU5UMTI4X09LCisrCQkvKiB3aXRoIEdDQyAxMyB3ZSBoYXZlIGhhdmluZyBjb25z aXN0ZW50IHNlZyBmYXVsdHMKKysJCSAqIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBTaW5jZSB0 aGlzIGlzIGEgY3JpdGljYWwKKysJCSAqIGNvZGUgcGF0aCB3ZSBhcmUgcmVtb3ZpbmcgdGhpcyB1 bnRpbCB3ZSBoYXZlIGEgc29sdXRpb24KKysJCSAqIGluIHBsYWNlIC1janIgMDIvMjIvMjQKKysJ CSAqIFRPRE86IEZJWCBUSElTCisrCQkgKi8KKysJCS8qIGlmICgoYWxpZ24gJiAweGYpID09IDAp IHsgKi8KKysJCS8qIAlkZXN0cC51MTI4WzBdID0gc3JjcC51MTI4WzBdIF4gYnVmcC51MTI4WzBd OyAqLworKwkJLyogfSBlbHNlICovCisrI2VuZGlmCisrCQkvKiA2NCBiaXRzICovCisrCQkvKiB0 aGlzIGlzIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW91ciBpbiBzYW5pdGl6ZXJzCisrCQkgKiB0 aGlzIGlzIGFubm95aW5nIGJlY2F1c2UgaXQncyBtb3JlIGVmZmljaWVudAorKwkJICogYnV0IFVC IGlzIG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIHJldGFpbiAqLworKwkJaWYgKChhbGlnbiAmIDB4 NykgPT0gMCkgeworKwkJCS8qIHRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIHN0cmljdCBhbGlhc2lu ZyBVQgorKwkJCSAqIGFuZCB0aGUgcGVyZm9ybWFuY2UgZG9lc24ndCBzZWVtIHRvIGNoYW5nZSBt dWNoCisrCQkJICogYnV0IHRoZSBtZW1jcHlzIGFyZSBraWxsaW5nIG1lIDMtNS0yNiBjanIqLwor KwkJCW1lbWNweSgmc3JjX2EsICZzcmNwLnU2NFswXSwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrCQkJ bWVtY3B5KCZrZXlfYSwgJmJ1ZnAudTY0WzBdLCBzaXplb2YodWludDY0X3QpKTsKKysJCQlkZXN0 cC51NjRbMF0gPSBzcmNfYSBeIGtleV9hOworKwkJCW1lbWNweSgmc3JjX2EsICZzcmNwLnU2NFsx XSwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrCQkJbWVtY3B5KCZrZXlfYSwgJmJ1ZnAudTY0WzFdLCBz aXplb2YodWludDY0X3QpKTsKKysJCQlkZXN0cC51NjRbMV0gPSBzcmNfYSBeIGtleV9hOworKwkJ CS8qIGRlc3RwLnU2NFswXSA9IHNyY3AudTY0WzBdIF4gYnVmcC51NjRbMF07ICovCisrCQkJLyog ZGVzdHAudTY0WzFdID0gc3JjcC51NjRbMV0gXiBidWZwLnU2NFsxXTsgKi8KKysgICAgICAgICAg ICAgICAgLyogMzIgYml0cyAqLworKwkJfSBlbHNlCisrCQlpZiAoKGFsaWduICYgMHgzKSA9PSAw KSB7CisrCQkJZGVzdHAudTMyWzBdID0gc3JjcC51MzJbMF0gXiBidWZwLnUzMlswXTsKKysJCQlk ZXN0cC51MzJbMV0gPSBzcmNwLnUzMlsxXSBeIGJ1ZnAudTMyWzFdOworKwkJCWRlc3RwLnUzMlsy XSA9IHNyY3AudTMyWzJdIF4gYnVmcC51MzJbMl07CisrCQkJZGVzdHAudTMyWzNdID0gc3JjcC51 MzJbM10gXiBidWZwLnUzMlszXTsKKysJCX0gZWxzZSB7CisrCQkJLyoxIGJ5dGUgYXQgYSB0aW1l Ki8KKysJCQlzaXplX3QgaTsKKysJCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJWkU7ICsr aSkKKysJCQkJZGVzdFtpXSA9IHNyY1tpXSBeIGJ1ZltpXTsKKysJCX0KKysKKysJCS8qIGluYy9k ZWNyZW1lbnQgdGhlIHBvaW50ZXJzIGJ5IHRoZSBibG9jayBzaXplICgxNikqLworKwkJZGVzdHAu dSArPSBBRVNfQkxPQ0tfU0laRTsKKysJCXNyY3AudSArPSBBRVNfQkxPQ0tfU0laRTsKKysKKysJ CS8qIEluY3JlbWVudCByZWFkIGluZGV4LCBzd2l0Y2ggcXVldWVzIG9uIHJvbGxvdmVyICovCisr CQlpZiAoKHJpZHggPSAocmlkeCArIDEpICUgS1FMRU4pID09IDApIHsKKysJCQlvbGRxID0gcTsK KysKKysJCQkvKiBNYXJrIG5leHQgcXVldWUgZHJhaW5pbmcsIG1heSBuZWVkIHRvIHdhaXQgKi8K KysJCQlhZXNfbXRfY3R4LT5xaWR4ID0gKGFlc19tdF9jdHgtPnFpZHggKyAxKSAlIG51bWtxOwor KwkJCXEgPSAmYWVzX210X2N0eC0+cVthZXNfbXRfY3R4LT5xaWR4XTsKKysJCQlwdGhyZWFkX211 dGV4X2xvY2soJnEtPmxvY2spOworKwkJCXdoaWxlIChxLT5xc3RhdGUgIT0gS1FGVUxMKSB7Cisr CQkJCXB0aHJlYWRfY29uZF93YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7CisrCQkJfQorKwkJCXEt PnFzdGF0ZSA9IEtRRFJBSU5JTkc7CisrCQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29u ZCk7CisrCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOworKworKwkJCS8qIE1hcmsg Y29uc3VtZWQgcXVldWUgZW1wdHkgYW5kIHNpZ25hbCBwcm9kdWNlcnMgKi8KKysJCQlwdGhyZWFk X211dGV4X2xvY2soJm9sZHEtPmxvY2spOworKwkJCW9sZHEtPnFzdGF0ZSA9IEtRRU1QVFk7Cisr CQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmb2xkcS0+Y29uZCk7CisrCQkJcHRocmVhZF9tdXRl eF91bmxvY2soJm9sZHEtPmxvY2spOworKwkJfQorKwl9IHdoaWxlIChsZW4gLT0gQUVTX0JMT0NL X1NJWkUpOworKwlhZXNfbXRfY3R4LT5yaWR4ID0gcmlkeDsKKysJcmV0dXJuIDE7CisrfQorKwor KyNlbmRpZiAvKldJVEhfT1BFTlNTTDMqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcv Y2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuaCBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY3RyLW10LWZ1 bmN0aW9ucy5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXItY3RyLW10LWZ1bmN0aW9u cy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41 cDEvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4NDkzMTU3 NiArMDIwMAorQEAgLTAsMCArMSwxNDAgQEAKKysvKgorKyAqIE9wZW5TU0ggTXVsdGktdGhyZWFk ZWQgQUVTLUNUUiBDaXBoZXIgUHJvdmlkZXIgZm9yIE9wZW5TU0wgMworKyAqCisrICogQXV0aG9y OiBCZW5qYW1pbiBCZW5uZXR0IDxiZW5AcHNjLmVkdT4KKysgKiBBdXRob3I6IE1pa2UgVGFzb3Rh IDx0YXNvdGFAZ21haWwuY29tPgorKyAqIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNj LmVkdT4KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAyMiBQaXR0c2J1cmdoIFN1cGVyY29tcHV0 aW5nIENlbnRlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIEJhc2VkIG9uIG9yaWdp bmFsIE9wZW5TU0ggQUVTLUNUUiBjaXBoZXIuIFNtYWxsIHBvcnRpb25zIHJlbWFpbiB1bmNoYW5n ZWQsCisrICogQ29weXJpZ2h0IChjKSAyMDAzIE1hcmt1cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNk Lm9yZz4KKysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0 cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0 IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKysgKiBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29w aWVzLgorKyAqCisrICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBB VVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisrICogV0lUSCBSRUdBUkQgVE8gVEhJUyBT T0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorKyAqIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFC TEUgRk9SCisrICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorKyAqIEFDVElPTiBP RiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcg T1VUIE9GCisrICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0Ug T0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8KKysKKysjaWZuZGVmIENUUl9NVF9GVU5DUworKyNkZWZp bmUgQ1RSX01UX0ZVTkNTCisrCisrLyogaW5jbHVkZXMgKi8KKysjaW5jbHVkZSAiaW5jbHVkZXMu aCIgLyogbmVlZGVkIHRvIGdldCB2ZXJzaW9uIG51bWJlciAqLworKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KKysjaW5jbHVkZSA8cHRocmVhZC5oPgorKyNpbmNsdWRlICJjaXBoZXItYWVzY3RyLmgi CisrI2luY2x1ZGUgInV0aGFzaC5oIgorKworKyNpZm5kZWYgVVNFX0JVSUxUSU5fUklKTkRBRUwK KysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjZW5kaWYKKysKKysvKiBvbmx5IGZvciBzeXN0 ZW1zIHdpdGggT1NTTCAzICovCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMKKysKKysvKi0tLS0tLS0t LS0tLS0tLS0tLS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysvKiBtYXhpbXVt IG51bWJlciBvZiB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KKysjZGVmaW5lIE1BWF9USFJFQURTICAg ICAgMzIKKysjZGVmaW5lIE1BWF9OVU1LUSAgICAgICAgKE1BWF9USFJFQURTICsgMSkKKysKKysv KiBvbmUgcXVldWUgaG9sZHMgODE5MiAqIDQgKiAxNkIgKDUxMktCKSAgb2Yga2V5IGRhdGEgCisr ICogYmVpbmcgdGhhdCB0aGUgcXVldWVzIGFyZSBkZXN0cm95ZWQgYWZ0ZXIgYSByZWtleQorKyAq IGFuZCBhdCBsZWF0cyBvbmUgaGFzIHRvIGJlIGZ1bGx5IGZpbGxlZCBwcmlvciB0bworKyAqIGVu Y2lwaGVyaW5nIGRhdGEgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGJlIHRvbyBsYXJnZSAqLworKyNk ZWZpbmUgS1FMRU4gKDgxOTIgKiA0KQorKworKy8qIFByb2Nlc3NvciBjYWNoZWxpbmUgbGVuZ3Ro ICovCisrI2RlZmluZSBDQUNIRUxJTkVfTEVOCTY0CisrCisrLyogQ2FuIHRoZSBzeXN0ZW0gZG8g dW5hbGlnbmVkIGxvYWRzIG5hdGl2ZWx5PyAqLworKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8 fCBcCisrICAgIGRlZmluZWQoX19pMzg2X18pICAgIHx8IFwKKysgICAgZGVmaW5lZChfX3Bvd2Vy cGNfXykgfHwgXAorKyAgICBkZWZpbmVkKF9feDg2XzY0X18pCisrIyBkZWZpbmUgQ0lQSEVSX1VO QUxJR05FRF9PSworKyNlbmRpZgorKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKQorKyMg ZGVmaW5lIENJUEhFUl9JTlQxMjhfT0sKKysjZW5kaWYKKysKKysvKiBjb250ZXh0IHN0YXRlcyAq LworKyNkZWZpbmUgSEFWRV9OT05FICAgICAgIDAKKysjZGVmaW5lIEhBVkVfS0VZICAgICAgICAx CisrI2RlZmluZSBIQVZFX0lWICAgICAgICAgMgorKworKy8qIEtleXN0cmVhbSBRdWV1ZSBzdGF0 ZSAqLworK2VudW0geworKwlLUUlOSVQsCisrCUtRRU1QVFksCisrCUtRRklMTElORywKKysJS1FG VUxMLAorKwlLUURSQUlOSU5HCisrfTsKKysKKysvKiBzdHJ1Y3RzICovCisrCisrLyogcHJvdmlk ZXIgc3RydWN0ICovCisrc3RydWN0IHByb3ZpZGVyX2N0eF9zdCB7CisrCWNvbnN0IE9TU0xfQ09S RV9IQU5ETEUgKmNvcmVfaGFuZGxlOworKwlzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKnBy b3ZlcnJfaGFuZGxlOworK307CisrCisrLyogS2V5c3RyZWFtIFF1ZXVlIHN0cnVjdCAqLworK3N0 cnVjdCBrcSB7CisrCXVfY2hhcgkJa2V5c1tLUUxFTl1bQUVTX0JMT0NLX1NJWkVdOyAvKiBbMzI3 NjhdWzE2Ql0gKi8KKysJdV9jaGFyCQljdHJbQUVTX0JMT0NLX1NJWkVdOyAvKiAxNkIgKi8KKysJ dV9jaGFyICAgICAgICAgIHBhZDBbQ0FDSEVMSU5FX0xFTl07CisrCXB0aHJlYWRfbXV0ZXhfdAls b2NrOworKwlwdGhyZWFkX2NvbmRfdAljb25kOworKwlpbnQgICAgICAgICAgICAgcXN0YXRlOwor Kwl1X2NoYXIgICAgICAgICAgcGFkMVtDQUNIRUxJTkVfTEVOXTsKKyt9OworKworKy8qIEFFUyBN VCBjb250ZXh0IHN0cnVjdCAqLworK3N0cnVjdCBhZXNfbXRfY3R4X3N0IHsKKysJc3RydWN0IHBy b3ZpZGVyX2N0eF9zdCAqcHJvdmN0eDsKKysJbG9uZyB1bnNpZ25lZCBpbnQgICAgICAgc3RydWN0 X2lkOworKwlpbnQgICAgICAgICAgICAgICAgICAgICBrZXlsZW47CisrCWludAkJICAgICAgICBz dGF0ZTsKKysJaW50CQkgICAgICAgIHFpZHg7CisrCWludAkJICAgICAgICByaWR4OworKwlpbnQg ICAgICAgICAgICAgICAgICAgICBpZFtNQVhfVEhSRUFEU107IC8qIDMyICovCisrCUFFU19LRVkg ICAgICAgICAgICAgICAgIGFlc19rZXk7CisrCWNvbnN0IHVfY2hhciAgICAgICAgICAgKm9yaWdf a2V5OworKwl1X2NoYXIJCSAgICAgICAgYWVzX2NvdW50ZXJbQUVTX0JMT0NLX1NJWkVdOyAvKiAx NkIgKi8KKysJcHRocmVhZF90CSAgICAgICAgdGlkW01BWF9USFJFQURTXTsgLyogMzIgKi8KKysJ cHRocmVhZF9yd2xvY2tfdCAgICAgICAgdGlkX2xvY2s7CisrCXN0cnVjdCBrcQkgICAgICAgIHFb TUFYX05VTUtRXTsgLyogMzMgKi8KKysJcHRocmVhZF9yd2xvY2tfdCAgICAgICAgc3RvcF9sb2Nr OworKwlpbnQJCSAgICAgICAgZXhpdF9mbGFnOworKwlpbnQgICAgICAgICAgICAgICAgICAgICBv bmdvaW5nOyAvKiBwb3NzaWJseSBub3QgbmVlZGVkICovCisrfTsKKysKKysvKiB0aGlzIGhvbGRz IGFuIGFycmF5IG9mIGV2cCBjb250ZXh0IHBvaW50ZXJzIHRoYXQgYXJlCisrICogY3JlYXRlZCBp biB0aHJlYWRfbG9vcC4gU2luY2Ugd2UgY2FuJ3QgZWZmZWN0aXZlbHkgZnJlZSB0aG9zZQorKyAq IGNvbnRleHRzIGluIHRocmVhZF9sb29wIHdlIGtlZXAgYSBjb3B5IG9mIHRob3NlIHBvaW50ZXJz IGhlcmUKKysgKiBhbmQgdGhlbiBmcmVlIHRoZW0gaW4gc3RvcF9hbmRfam9pbl9wcmVnZW50aHJl YWRzCisrICogY2pyIDIvMi8yMDIzCisrICovCisrc3RydWN0IGFlc19tdF9jdHhfcHRycyB7Cisr CUVWUF9DSVBIRVJfQ1RYICpwb2ludGVyOworKyAgICAgICAgcHRocmVhZF90ICAgICAgIHRpZDsK KysJVVRfaGFzaF9oYW5kbGUgIGhoOworK307CisrCisraW50IGFlc19tdF9kb19jaXBoZXIodm9p ZCAqLCB1X2NoYXIgKiwgc2l6ZV90ICosIHNpemVfdCwgY29uc3QgdV9jaGFyICosIHNpemVfdCk7 CisraW50IGFlc19tdF9zdGFydF90aHJlYWRzKHZvaWQgKiwgY29uc3QgdV9jaGFyICosIHNpemVf dCwgY29uc3QgdV9jaGFyICosIHNpemVfdCwgY29uc3QgT1NTTF9QQVJBTSAqKTsKKyt2b2lkIGFl c19tdF9mcmVlY3R4KHZvaWQgKik7Cisrdm9pZCAqYWVzX210X25ld2N0eF8yNTYodm9pZCAqKTsK Kyt2b2lkICphZXNfbXRfbmV3Y3R4XzE5Mih2b2lkICopOworK3ZvaWQgKmFlc19tdF9uZXdjdHhf MTI4KHZvaWQgKik7CisrCisrI2VuZGlmIC8qIFdJVEggT1BFTlNTTCAqLworKyNlbmRpZiAvKiBD VFJfTVRfRlVOQ1MgKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jdHIt bXQtcHJvdmlkZXIuYyBvcGVuc3NoLTEwLjVwMS9jaXBoZXItY3RyLW10LXByb3ZpZGVyLmMKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1jdHItbXQtcHJvdmlkZXIuYwkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NpcGhlci1jdHIt bXQtcHJvdmlkZXIuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4NTA0NjY1NCArMDIwMAorQEAgLTAs MCArMSwzOTAgQEAKKysvKgorKyAqIE9wZW5TU0ggTXVsdGktdGhyZWFkZWQgQUVTLUNUUiBDaXBo ZXIgUHJvdmlkZXIgZm9yIE9wZW5TU0wgMworKyAqCisrICogQXV0aG9yOiBDaHJpcyBSYXBpZXIg PHJhcGllckBwc2MuZWR1PgorKyAqIENvcHlyaWdodCAoYykgMjAyMiBQaXR0c2J1cmdoIFN1cGVy Y29tcHV0aW5nIENlbnRlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFBlcm1pc3Np b24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9y IGFueQorKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwg cHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorKyAqCisrICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJS QU5USUVTCisrICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElN UExJRUQgV0FSUkFOVElFUyBPRgorKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisrICogQU5ZIFNQRUNJQUws IERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdF UworKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJP RklUUywgV0hFVEhFUiBJTiBBTgorKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBP UiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisrICogT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8K KysKKysvKiBiYXNlZCBvbiB2aWVuZXJlLmMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcHJvdmlk ZXItY29ybmVyL3ZpZ2VuZXJlIGJ5CisrICogUmljaGFyZCBMZXZpdHRlIHByb3ZpZGVkIHVuZGVy IGEgQ0MwIFB1YmxpYyBMaWNlbnNlLiAqLworKworKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorKwor Ky8qIG9ubHkgZm9yIHN5c3RlbXMgd2l0aCBPU1NMIDMuMCsgKi8KKysjaWZkZWYgV0lUSF9PUEVO U1NMMworKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvY29yZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NvcmVfZGlzcGF0 Y2guaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX25hbWVzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2luY2x1ZGUgInhtYWxsb2MuaCIKKysjaW5jbHVkZSAib3NzbDMtcHJvdmlk ZXItZXJyLmgiCisrI2luY2x1ZGUgIm51bS5oIgorKyNpbmNsdWRlICJjaXBoZXItY3RyLW10LWZ1 bmN0aW9ucy5oIgorKworKyNkZWZpbmUgRVJSX0hBTkRMRShjdHgpICgoY3R4KS0+cHJvdmN0eC0+ cHJvdmVycl9oYW5kbGUpCisrCisrLyogZm9yd2FyZCBkZWNsYXJ0aW9uIG9mIGNpcGhlciBmdW5j dGlvbnMgKi8KKysvKiBjaXBoZXIgY29udGV4dCBmdW5jdGlvbnMgKi8KKytPU1NMX0ZVTkNfY2lw aGVyX25ld2N0eF9mbiBhZXNfbXRfbmV3Y3R4XzI1NjsKKytPU1NMX0ZVTkNfY2lwaGVyX25ld2N0 eF9mbiBhZXNfbXRfbmV3Y3R4XzE5MjsKKytPU1NMX0ZVTkNfY2lwaGVyX25ld2N0eF9mbiBhZXNf bXRfbmV3Y3R4XzEyODsKKytPU1NMX0ZVTkNfY2lwaGVyX2ZyZWVjdHhfZm4gYWVzX210X2ZyZWVj dHg7CisrCisrLyogcGFyYW0gcmVsYXRlZCBmdW5jdGlvbiovCisrc3RhdGljIE9TU0xfRlVOQ19j aXBoZXJfZ2V0X3BhcmFtc19mbiBhZXNfbXRfZ2V0X3BhcmFtc18yNTY7Cisrc3RhdGljIE9TU0xf RlVOQ19jaXBoZXJfZ2V0X3BhcmFtc19mbiBhZXNfbXRfZ2V0X3BhcmFtc18xOTI7Cisrc3RhdGlj IE9TU0xfRlVOQ19jaXBoZXJfZ2V0X3BhcmFtc19mbiBhZXNfbXRfZ2V0X3BhcmFtc18xMjg7Cisr c3RhdGljIE9TU0xfRlVOQ19jaXBoZXJfZ2V0dGFibGVfcGFyYW1zX2ZuIGFlc19tdF9nZXR0YWJs ZV9wYXJhbXM7Cisrc3RhdGljIE9TU0xfRlVOQ19jaXBoZXJfc2V0X2N0eF9wYXJhbXNfZm4gYWVz X210X3NldF9jdHhfcGFyYW1zOworK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX2dldF9jdHhfcGFy YW1zX2ZuIGFlc19tdF9nZXRfY3R4X3BhcmFtczsKKytzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9z ZXR0YWJsZV9jdHhfcGFyYW1zX2ZuIGFlc19tdF9zZXR0YWJsZV9jdHhfcGFyYW1zOworK3N0YXRp YyBPU1NMX0ZVTkNfY2lwaGVyX2dldHRhYmxlX2N0eF9wYXJhbXNfZm4gYWVzX210X2dldHRhYmxl X2N0eF9wYXJhbXM7CisrCisrLyogZW4vZGVjaXBoZXIgZnVuY3Rpb25zICovCisrT1NTTF9GVU5D X2NpcGhlcl9lbmNyeXB0X2luaXRfZm4gYWVzX210X3N0YXJ0X3RocmVhZHM7CisrT1NTTF9GVU5D X2NpcGhlcl9kZWNyeXB0X2luaXRfZm4gYWVzX210X3N0YXJ0X3RocmVhZHM7CisrT1NTTF9GVU5D X2NpcGhlcl91cGRhdGVfZm4gYWVzX210X2RvX2NpcGhlcjsKKysKKysvKiBwcm92aWRlciBjb250 ZXh0ICovCisrc3RhdGljIE9TU0xfRlVOQ19wcm92aWRlcl9xdWVyeV9vcGVyYXRpb25fZm4gYWVz X210X3Byb3ZfcXVlcnk7Cisrc3RhdGljIE9TU0xfRlVOQ19wcm92aWRlcl9nZXRfcmVhc29uX3N0 cmluZ3NfZm4gYWVzX210X3Byb3ZfcmVhc29uczsKKytzdGF0aWMgT1NTTF9GVU5DX3Byb3ZpZGVy X3RlYXJkb3duX2ZuIGFlc19tdF9wcm92X3RlYXJkb3duOworK3N0YXRpYyBPU1NMX0ZVTkNfcHJv dmlkZXJfZ2V0X3BhcmFtc19mbiBhZXNfbXRfcHJvdl9nZXRfcGFyYW1zOyAKKytPU1NMX3Byb3Zp ZGVyX2luaXRfZm4gT1NTTF9wcm92aWRlcl9pbml0OyAvKiBuZWVkIHRoaXM/ICovCisrCisrLyog ZXJyb3IgZnVuY3Rpb25zICovCisrT1NTTF9GVU5DX2NvcmVfbmV3X2Vycm9yX2ZuICpjX25ld19l cnJvcjsKKytPU1NMX0ZVTkNfY29yZV9zZXRfZXJyb3JfZGVidWdfZm4gKmNfc2V0X2Vycm9yX2Rl YnVnOworK09TU0xfRlVOQ19jb3JlX3ZzZXRfZXJyb3JfZm4gKmNfdnNldF9lcnJvcjsKKytPU1NM X0ZVTkNfY29yZV9zZXRfZXJyb3JfbWFya19mbiAqY19zZXRfZXJyb3JfbWFyazsKKytPU1NMX0ZV TkNfY29yZV9jbGVhcl9sYXN0X2Vycm9yX21hcmtfZm4gKmNfY2xlYXJfbGFzdF9lcnJvcl9tYXJr OworK09TU0xfRlVOQ19jb3JlX3BvcF9lcnJvcl90b19tYXJrX2ZuICpjX3BvcF9lcnJvcl90b19t YXJrOworKworKy8qIEVycm9ycyB1c2VkIGluIHRoaXMgcHJvdmlkZXIgKi8KKysjZGVmaW5lIEFF U19NVF9FX01BTExPQyAgICAgICAgICAgMQorKyNkZWZpbmUgQUVTX01UX09OR09JTkdfT1BFUkFU SU9OICAyCisrI2RlZmluZSBBRVNfTVRfQkFEX0tFWUxFTiAgICAgICAgIDMKKysKKysvKiB0eXBl ZGVmIGZvciBmdW5jdGlvbiBwb2ludGVycyAqLworK3R5cGVkZWYgdm9pZCgqZnB0cl90KSh2b2lk KTsKKysKKysvKiBhbGwgb2YgdGhlIHZhcmlvdXMgYXJyYXlzIHdlIG5lZWQgKi8KKysKKysvKiBC QURfS0VZTEVOIGlzbid0IGJlaW5nIHVzZWQgYXQgdGhlIG1vbWVudCAqLworK2NvbnN0IE9TU0xf SVRFTSByZWFzb25zW10gPSB7CisrCXsgQUVTX01UX0VfTUFMTE9DLCAiTWVtb3J5IGFsbG9jYXRp b24gZmFpbHVyZSIgfSwKKysJeyBBRVNfTVRfT05HT0lOR19PUEVSQVRJT04sICJPcGVyYXRpb24g dW5kZXJ3YXkiIH0sCisrCXsgQUVTX01UX0JBRF9LRVlMRU4sICJPbmx5IDI1NiwgMTkyLCBhbmQg MTI4IEtleSBsZW5ndGhzIGFyZSBzdXBwb3J0ZWQiIH0sCisrCXsgMCwgTlVMTCB9IC8qIFRlcm1p bmF0aW9uICovCisrfTsKKysKKysvKiBmdW5jdGlvbiBtYXBwaW5nIGZvciAyNTZ8MTkyfDEyOCBr ZXkgbGVuZ3RocyAqLworK2NvbnN0IE9TU0xfRElTUEFUQ0ggYWVzX210X2Z1bmNzXzI1NltdID0g eworKwl7IE9TU0xfRlVOQ19DSVBIRVJfTkVXQ1RYLCAoZnB0cl90KWFlc19tdF9uZXdjdHhfMjU2 IH0gLAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfRlJFRUNUWCwgKGZwdHJfdClhZXNfbXRfZnJlZWN0 eCB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfRU5DUllQVF9JTklULCAoZnB0cl90KWFlc19tdF9z dGFydF90aHJlYWRzIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9ERUNSWVBUX0lOSVQsIChmcHRy X3QpYWVzX210X3N0YXJ0X3RocmVhZHMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX1VQREFURSwg KGZwdHJfdClhZXNfbXRfZG9fY2lwaGVyIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfUEFS QU1TLCAoZnB0cl90KWFlc19tdF9nZXRfcGFyYW1zXzI1NiB9LAorKwl7IE9TU0xfRlVOQ19DSVBI RVJfR0VUVEFCTEVfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9wYXJhbXMgfSwKKysJ eyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXRfY3R4 X3BhcmFtcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUVEFCTEVfQ1RYX1BBUkFNUywKKysJ ICAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9jdHhfcGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX0NJ UEhFUl9TRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfc2V0X2N0eF9wYXJhbXMgfSwKKysJ eyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVFRBQkxFX0NUWF9QQVJBTVMsCisrCSAgKGZwdHJfdClhZXNf bXRfc2V0dGFibGVfY3R4X3BhcmFtcyB9LAorKwl7IDAsIE5VTEwgfQorK307CisrCisrY29uc3Qg T1NTTF9ESVNQQVRDSCBhZXNfbXRfZnVuY3NfMTkyW10gPSB7CisrCXsgT1NTTF9GVU5DX0NJUEhF Ul9ORVdDVFgsIChmcHRyX3QpYWVzX210X25ld2N0eF8xOTIgfSAsCisrCXsgT1NTTF9GVU5DX0NJ UEhFUl9GUkVFQ1RYLCAoZnB0cl90KWFlc19tdF9mcmVlY3R4IH0sCisrCXsgT1NTTF9GVU5DX0NJ UEhFUl9FTkNSWVBUX0lOSVQsIChmcHRyX3QpYWVzX210X3N0YXJ0X3RocmVhZHMgfSwKKysJeyBP U1NMX0ZVTkNfQ0lQSEVSX0RFQ1JZUFRfSU5JVCwgKGZwdHJfdClhZXNfbXRfc3RhcnRfdGhyZWFk cyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfVVBEQVRFLCAoZnB0cl90KWFlc19tdF9kb19jaXBo ZXIgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dl dF9wYXJhbXNfMTkyIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9QQVJBTVMsIChm cHRyX3QpYWVzX210X2dldHRhYmxlX3BhcmFtcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VU X0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldF9jdHhfcGFyYW1zIH0sCisrCXsgT1NTTF9G VU5DX0NJUEhFUl9HRVRUQUJMRV9DVFhfUEFSQU1TLAorKwkgIChmcHRyX3QpYWVzX210X2dldHRh YmxlX2N0eF9wYXJhbXMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVF9DVFhfUEFSQU1TLCAo ZnB0cl90KWFlc19tdF9zZXRfY3R4X3BhcmFtcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfU0VU VEFCTEVfQ1RYX1BBUkFNUywKKysJICAoZnB0cl90KWFlc19tdF9zZXR0YWJsZV9jdHhfcGFyYW1z IH0sCisrCXsgMCwgTlVMTCB9CisrfTsKKysKKytjb25zdCBPU1NMX0RJU1BBVENIIGFlc19tdF9m dW5jc18xMjhbXSA9IHsKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX05FV0NUWCwgKGZwdHJfdClhZXNf bXRfbmV3Y3R4XzEyOCB9ICwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0ZSRUVDVFgsIChmcHRyX3Qp YWVzX210X2ZyZWVjdHggfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0VOQ1JZUFRfSU5JVCwgKGZw dHJfdClhZXNfbXRfc3RhcnRfdGhyZWFkcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfREVDUllQ VF9JTklULCAoZnB0cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCisrCXsgT1NTTF9GVU5DX0NJ UEhFUl9VUERBVEUsIChmcHRyX3QpYWVzX210X2RvX2NpcGhlciB9LAorKwl7IE9TU0xfRlVOQ19D SVBIRVJfR0VUX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X3BhcmFtc18xMjggfSwKKysJeyBP U1NMX0ZVTkNfQ0lQSEVSX0dFVFRBQkxFX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVf cGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClh ZXNfbXRfZ2V0X2N0eF9wYXJhbXMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVFRBQkxFX0NU WF9QQVJBTVMsCisrCSAgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfY3R4X3BhcmFtcyB9LAorKwl7 IE9TU0xfRlVOQ19DSVBIRVJfU0VUX0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X3NldF9jdHhf cGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRUQUJMRV9DVFhfUEFSQU1TLAorKwkg IChmcHRyX3QpYWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXMgfSwKKysJeyAwLCBOVUxMIH0KKyt9 OworKworKy8qIHRoZSBjaXBoZXJzIGZvdW5kIGluIHRoaXMgcHJvdmlkZXIgKi8KKytjb25zdCBP U1NMX0FMR09SSVRITSBhZXNfbXRfY2lwaGVyc1tdID0geworKwl7ICJhZXNfY3RyX210XzI1NiIs ICJwcm92aWRlcj1ocG5zc2giLCBhZXNfbXRfZnVuY3NfMjU2LCBOVUxMIH0sCisrCXsgImFlc19j dHJfbXRfMTkyIiwgInByb3ZpZGVyPWhwbnNzaCIsIGFlc19tdF9mdW5jc18xOTIsIE5VTEwgfSwK KysJeyAiYWVzX2N0cl9tdF8xMjgiLCAicHJvdmlkZXI9aHBuc3NoIiwgYWVzX210X2Z1bmNzXzEy OCwgTlVMTCB9LAorKwl7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQorK307CisrCisrLyogZnVu Y3Rpb24gbWFwcGluZyBmb3IgcHJvdmlkZXIgbWV0aG9kcyAqLworK2NvbnN0IE9TU0xfRElTUEFU Q0ggcHJvdmlkZXJfZnVuY3Rpb25zW10gPSB7CisrCXsgT1NTTF9GVU5DX1BST1ZJREVSX1RFQVJE T1dOLCAoZnB0cl90KWFlc19tdF9wcm92X3RlYXJkb3duIH0sCisrCXsgT1NTTF9GVU5DX1BST1ZJ REVSX1FVRVJZX09QRVJBVElPTiwgKGZwdHJfdClhZXNfbXRfcHJvdl9xdWVyeSB9LAorKwl7IE9T U0xfRlVOQ19QUk9WSURFUl9HRVRfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9wcm92X2dldF9wYXJh bXMgfSwKKysJeyBPU1NMX0ZVTkNfUFJPVklERVJfR0VUX1JFQVNPTl9TVFJJTkdTLCAoZnB0cl90 KWFlc19tdF9wcm92X3JlYXNvbnMgfSwKKysJeyAwLCBOVUxMIH0KKyt9OworKworK3N0YXRpYyBj b25zdCBPU1NMX1BBUkFNIGN0eF9nZXRfcGFyYW1fdGFibGVbXSA9IHsKKysgICAgICAgIHsgImtl eWxlbiIsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUiwgTlVMTCwgc2l6ZW9mKHNpemVfdCks IDAgfSwKKysgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgMCB9LAorK307CisrCisrc3RhdGlj IGNvbnN0IE9TU0xfUEFSQU0gY2lwaGVyX2dldF9wYXJhbV90YWJsZVtdID0geworKyAgICAgICAg eyAiYmxvY2tzaXplIiwgT1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VSLCBOVUxMLCBzaXplb2Yo c2l6ZV90KSwgMCB9LAorKyAgICAgICAgeyAia2V5bGVuIiwgT1NTTF9QQVJBTV9VTlNJR05FRF9J TlRFR0VSLCBOVUxMLCBzaXplb2Yoc2l6ZV90KSwgMCB9LAorKyAgICAgICAgeyBOVUxMLCAwLCBO VUxMLCAwLCAwIH0sCisrfTsKKysKKytzdGF0aWMgY29uc3QgT1NTTF9QQVJBTSBjaXBoZXJfc2V0 X3BhcmFtX3RhYmxlW10gPSB7CisrCXsgImtleWxlbiIsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5U RUdFUiwgTlVMTCwgc2l6ZW9mKHNpemVfdCksIDAgfSwKKysJeyBOVUxMLCAwLCBOVUxMLCAwLCAw IH0sCisrfTsKKysKKysKKysvKiBwcm92aWRlciBmdW5jdGlvbnMgc3RhcnQgaGVyZSAqLworKwor K3N0YXRpYyB2b2lkIHByb3ZpZGVyX2N0eF9mcmVlKHN0cnVjdCBwcm92aWRlcl9jdHhfc3QgKmN0 eCkKKyt7CisrICAgIGlmIChjdHggIT0gTlVMTCkKKysgICAgICAgIHByb3ZlcnJfZnJlZV9oYW5k bGUoY3R4LT5wcm92ZXJyX2hhbmRsZSk7CisrICAgIGZyZWUoY3R4KTsKKyt9CisrCisrc3RhdGlj IHN0cnVjdCBwcm92aWRlcl9jdHhfc3QgKnByb3ZpZGVyX2N0eF9uZXcoY29uc3QgT1NTTF9DT1JF X0hBTkRMRSAqY29yZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBPU1NMX0RJU1BBVENIICppbikKKyt7CisrICAgIHN0cnVjdCBwcm92aWRl cl9jdHhfc3QgKmN0eDsKKysKKysgICAgaWYgKChjdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKSkg IT0gTlVMTAorKyAgICAgICAgJiYgKGN0eC0+cHJvdmVycl9oYW5kbGUgPSBwcm92ZXJyX25ld19o YW5kbGUoY29yZSwgaW4pKSAhPSBOVUxMKSB7CisrICAgICAgICBjdHgtPmNvcmVfaGFuZGxlID0g Y29yZTsKKysgICAgfSBlbHNlIHsKKysgICAgICAgIHByb3ZpZGVyX2N0eF9mcmVlKGN0eCk7Cisr ICAgICAgICBjdHggPSBOVUxMOworKyAgICB9CisrICAgIHJldHVybiBjdHg7CisrfQorKworKwor Ky8qIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGFsZ28gdGFibGUgZm9yIHRoZSByZXF1ZXN0ZWQg ZnVuY3Rpb24KKysgKiBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIG9ubHkgYmUgd29ya2luZyB3aXRo IE9QX0NJUEhFUiAqLworK2NvbnN0IE9TU0xfQUxHT1JJVEhNICphZXNfbXRfcHJvdl9xdWVyeSh2 b2lkICpwcm92Y3R4LCBpbnQgb3BlcmF0aW9uX2lkLAorKwkJCQkgICAgIGludCAqbm9fc3RvcmUp CisreworKwlzd2l0Y2ggKG9wZXJhdGlvbl9pZCkgeworKwljYXNlIE9TU0xfT1BfQ0lQSEVSOgor KwkJcmV0dXJuIGFlc19tdF9jaXBoZXJzOworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKytj b25zdCBPU1NMX0lURU0gKmFlc19tdF9wcm92X3JlYXNvbnModm9pZCAqcHJvdmN0eCkKKyt7Cisr CXJldHVybiByZWFzb25zOworK30KKysKKytzdGF0aWMgaW50IGFlc19tdF9wcm92X2dldF9wYXJh bXModm9pZCAqcHJvdmN0eCwgT1NTTF9QQVJBTSAqcGFyYW1zKQorK3sKKysJT1NTTF9QQVJBTSAq cDsKKysJaW50IG9rID0gMTsKKysKKysJY2hhciAqVkVSU0lPTj0iMS4wIjsKKysJY2hhciAqQlVJ TERUWVBFPSJhZXNfY3RyX210QGhwbnNzaC5vcmciOworKwkKKysJZm9yKHAgPSBwYXJhbXM7IHAt PmtleSAhPSBOVUxMOyBwKyspCisrCQlpZiAoc3RyY2FzZWNtcChwLT5rZXksICJ2ZXJzaW9uIikg PT0gMCkgeworKwkJCSooY29uc3Qgdm9pZCAqKilwLT5kYXRhID0gVkVSU0lPTjsKKysJCQlwLT5y ZXR1cm5fc2l6ZSA9IHN0cmxlbihWRVJTSU9OKTsKKysJCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChw LT5rZXksICJidWlsZGluZm8iKSA9PSAwCisrCQkJICAgJiYgQlVJTERUWVBFWzBdICE9ICdcMCcp IHsKKysJCQkqKGNvbnN0IHZvaWQgKiopcC0+ZGF0YSA9IEJVSUxEVFlQRTsKKysJCQlwLT5yZXR1 cm5fc2l6ZSA9IHN0cmxlbihCVUlMRFRZUEUpOworKwkJfQorKwlyZXR1cm4gb2s7CisrfQorKwor Ky8qIFRoZSBmdW5jdGlvbiB0aGF0IHRlYXJzIGRvd24gdGhpcyBwcm92aWRlciAqLworK3N0YXRp YyB2b2lkIGFlc19tdF9wcm92X3RlYXJkb3duKHZvaWQgKnZwcm92Y3R4KQorK3sKKysgICAgcHJv dmlkZXJfY3R4X2ZyZWUodnByb3ZjdHgpOworK30KKysKKytpbnQgT1NTTF9wcm92aWRlcl9pbml0 KGNvbnN0IE9TU0xfQ09SRV9IQU5ETEUgKmNvcmUsCisrCQkgICAgICAgY29uc3QgT1NTTF9ESVNQ QVRDSCAqaW4sCisrCQkgICAgICAgY29uc3QgT1NTTF9ESVNQQVRDSCAqKm91dCwKKysJCSAgICAg ICB2b2lkICoqdnByb3ZjdHgpCisreworKyAgICBpZiAoKCp2cHJvdmN0eCA9IHByb3ZpZGVyX2N0 eF9uZXcoY29yZSwgaW4pKSA9PSBOVUxMKQorKwkgICAgcmV0dXJuIDA7CisrICAgICpvdXQgPSBw cm92aWRlcl9mdW5jdGlvbnM7CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBwYXJhbWV0ZXIg ZnVuY3Rpb25zIGZvciAyNTZ8MTkyfDEyOCBiaXQga2V5IGxlbmd0aHMgKi8KKytzdGF0aWMgaW50 IGFlc19tdF9nZXRfcGFyYW1zXzI1NihPU1NMX1BBUkFNIHBhcmFtc1tdKQorK3sKKysJT1NTTF9Q QVJBTSAqcDsKKysJaW50IG9rID0gMTsKKysJCisrCWZvciAocCA9IHBhcmFtczsgcC0+a2V5ICE9 IE5VTEw7IHArKykgeworKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYmxvY2tzaXplIikgPT0g MCkKKysJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIEFFU19CTE9DS19TSVpFKSA8IDApIHsK KysJCQkJb2sgPSAwOworKwkJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoc3RyY2FzZWNtcChw LT5rZXksICJrZXlsZW4iKSA9PSAwKSB7CisrCQkJc2l6ZV90IGtleWwgPSAzMjsKKysJCQkKKysJ CQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIGtleWwpIDwgMCkgeworKwkJCQlvayA9IDA7Cisr CQkJCWNvbnRpbnVlOworKwkJCX0KKysJCX0KKysJfQorKwlyZXR1cm4gb2s7CisrfQorKworK3N0 YXRpYyBpbnQgYWVzX210X2dldF9wYXJhbXNfMTkyKE9TU0xfUEFSQU0gcGFyYW1zW10pCisrewor KwlPU1NMX1BBUkFNICpwOworKwlpbnQgb2sgPSAxOworKwkKKysJZm9yIChwID0gcGFyYW1zOyBw LT5rZXkgIT0gTlVMTDsgcCsrKSB7CisrCQlpZiAoc3RyY2FzZWNtcChwLT5rZXksICJibG9ja3Np emUiKSA9PSAwKQorKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwgQUVTX0JMT0NLX1NJWkUp IDwgMCkgeworKwkJCQlvayA9IDA7CisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmIChzdHJj YXNlY21wKHAtPmtleSwgImtleWxlbiIpID09IDApIHsKKysJCQlzaXplX3Qga2V5bCA9IDI0Owor KwkJCQorKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwga2V5bCkgPCAwKSB7CisrCQkJCW9r ID0gMDsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJfQorKwl9CisrCXJldHVybiBvazsKKyt9 CisrCisrc3RhdGljIGludCBhZXNfbXRfZ2V0X3BhcmFtc18xMjgoT1NTTF9QQVJBTSBwYXJhbXNb XSkKKyt7CisrCU9TU0xfUEFSQU0gKnA7CisrCWludCBvayA9IDE7CisrCQorKwlmb3IgKHAgPSBw YXJhbXM7IHAtPmtleSAhPSBOVUxMOyBwKyspIHsKKysJCWlmIChzdHJjYXNlY21wKHAtPmtleSwg ImJsb2Nrc2l6ZSIpID09IDApCisrCQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBBRVNfQkxP Q0tfU0laRSkgPCAwKSB7CisrCQkJCW9rID0gMDsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJ aWYgKHN0cmNhc2VjbXAocC0+a2V5LCAia2V5bGVuIikgPT0gMCkgeworKwkJCXNpemVfdCBrZXls ID0gMTY7CisrCQkJCisrCQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBrZXlsKSA8IDApIHsK KysJCQkJb2sgPSAwOworKwkJCQljb250aW51ZTsKKysJCQl9CisrCQl9CisrCX0KKysJcmV0dXJu IG9rOworK30KKysKKysvKiBQYXJhbWV0ZXJzIHRoYXQgbGliY3J5cHRvIGNhbiBnZXQgZnJvbSB0 aGlzIGltcGxlbWVudGF0aW9uICovCisrc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gKmFlc19tdF9n ZXR0YWJsZV9wYXJhbXModm9pZCAqcHJvdmN0eCkKKyt7CisrCXJldHVybiBjaXBoZXJfZ2V0X3Bh cmFtX3RhYmxlOworK30KKysKKytzdGF0aWMgY29uc3QgT1NTTF9QQVJBTSAqYWVzX210X2dldHRh YmxlX2N0eF9wYXJhbXModm9pZCAqY2N0eCwgdm9pZCAqcHJvdmN0eCkKKyt7CisrCXJldHVybiBj dHhfZ2V0X3BhcmFtX3RhYmxlOworK30KKysKKytzdGF0aWMgaW50IGFlc19tdF9nZXRfY3R4X3Bh cmFtcyh2b2lkICp2Y3R4LCBPU1NMX1BBUkFNIHBhcmFtc1tdKQorK3sKKysgICAgc3RydWN0IGFl c19tdF9jdHhfc3QgKmN0eCA9IHZjdHg7CisrICAgIGludCBvayA9IDE7CisrCisrICAgIGlmIChj dHgtPmtleWxlbiA+IDApIHsKKysgICAgICAgIE9TU0xfUEFSQU0gKnA7CisrCisrICAgICAgICBm b3IgKHAgPSBwYXJhbXM7IHAtPmtleSAhPSBOVUxMOyBwKyspCisrICAgICAgICAgICAgaWYgKHN0 cmNhc2VjbXAocC0+a2V5LCAia2V5bGVuIikgPT0gMAorKyAgICAgICAgICAgICAgICAmJiBwcm92 bnVtX3NldF9zaXplX3QocCwgY3R4LT5rZXlsZW4pIDwgMCkgeworKyAgICAgICAgICAgICAgICBv ayA9IDA7CisrICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgIH0KKysgICAg fQorKyAgICByZXR1cm4gb2s7CisrfQorKworKy8qIFBhcmFtZXRlcnMgdGhhdCBsaWJjcnlwdG8g Y2FuIHNlbmQgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbiAqLworK3N0YXRpYyBjb25zdCBPU1NMX1BB UkFNICphZXNfbXRfc2V0dGFibGVfY3R4X3BhcmFtcyh2b2lkICpjY3R4LCB2b2lkICpwcm92Y3R4 KQorK3sKKysgICAgcmV0dXJuIGNpcGhlcl9zZXRfcGFyYW1fdGFibGU7CisrfQorKworK3N0YXRp YyBpbnQgYWVzX210X3NldF9jdHhfcGFyYW1zKHZvaWQgKnZjdHgsIGNvbnN0IE9TU0xfUEFSQU0g cGFyYW1zW10pCisreworKyAgICBzdHJ1Y3QgYWVzX210X2N0eF9zdCAqY3R4ID0gdmN0eDsKKysg ICAgY29uc3QgT1NTTF9QQVJBTSAqcDsKKysgICAgaW50IG9rID0gMTsKKysKKysgICAgaWYgKGN0 eC0+b25nb2luZykgeworKyAgICAgICAgRVJSX3JhaXNlKEVSUl9IQU5ETEUoY3R4KSwgQUVTX01U X09OR09JTkdfT1BFUkFUSU9OKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAg IGZvciAocCA9IHBhcmFtczsgcC0+a2V5ICE9IE5VTEw7IHArKykKKysgICAgICAgIGlmIChzdHJj YXNlY21wKHAtPmtleSwgImtleWxlbiIpID09IDApIHsKKysgICAgICAgICAgICBzaXplX3Qga2V5 bCA9IDA7CisrCisrICAgICAgICAgICAgaWYgKHByb3ZudW1fZ2V0X3NpemVfdCgma2V5bCwgcCkg PCAwKSB7CisrICAgICAgICAgICAgICAgIG9rID0gMDsKKysgICAgICAgICAgICAgICAgY29udGlu dWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGN0eC0+a2V5bGVuID0ga2V5bDsKKysg ICAgICAgIH0KKysgICAgcmV0dXJuIG9rOworK30KKysKKysjZW5kaWYgLypXSVRIX09QRU5TU0wz Ki8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci5oIG9wZW5zc2gtMTAuNXAx L2NpcGhlci5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXIuaAkyMDI2LTA5LTIxIDA3 OjA2OjA1LjI5MDIyOTgwNyArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NpcGhlci5oCTIwMjYt MDktMjEgMTA6NDU6NDUuMTc1Mjk5MzEwICswMjAwCitAQCAtNDIsMTEgKzQyLDE3IEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgImNpcGhlci1jaGFjaGFw b2x5LmgiCisrI2lmZGVmIFdJVEhfT1BFTlNTTAorKyNpbmNsdWRlICJjaXBoZXItY2hhY2hhcG9s eS1saWJjcnlwdG8tbXQuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAiY2lwaGVyLWFlc2N0ci5oIgor IAorICNkZWZpbmUgQ0lQSEVSX0VOQ1JZUFQJCTEKKyAjZGVmaW5lIENJUEhFUl9ERUNSWVBUCQkw CisgCisrI2RlZmluZSBDSVBIRVJfTVVMVElUSFJFQUQJMQorKyNkZWZpbmUgQ0lQSEVSX1NFUklB TAkJMAorKworIHN0cnVjdCBzc2hjaXBoZXIgeworIAljaGFyCSpuYW1lOworIAl1X2ludAlibG9j a19zaXplOworQEAgLTYwLDYgKzY2LDcgQEAKKyAjZGVmaW5lIENGTEFHX05PTkUJCSgxPDwzKQor ICNkZWZpbmUgQ0ZMQUdfSU5URVJOQUwJCUNGTEFHX05PTkUgLyogRG9uJ3QgdXNlICJub25lIiBm b3IgcGFja2V0cyAqLworICNpZmRlZiBXSVRIX09QRU5TU0wKKysjZGVmaW5lIENGTEFHX01UCQko MTw8NCkKKyAJY29uc3QgRVZQX0NJUEhFUgkqKCpldnB0eXBlKSh2b2lkKTsKKyAjZWxzZQorIAl2 b2lkCSppZ25vcmVkOworQEAgLTY4LDI0ICs3NSwyNyBAQAorIAorIHN0cnVjdCBzc2hjaXBoZXJf Y3R4OworIAorLWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcl9ieV9uYW1lKGNvbnN0IGNo YXIgKik7Cisrc3RydWN0IHNzaGNpcGhlciAqY2lwaGVyX2J5X25hbWUoY29uc3QgY2hhciAqKTsK KyBjb25zdCBjaGFyICpjaXBoZXJfd2FybmluZ19tZXNzYWdlKGNvbnN0IHN0cnVjdCBzc2hjaXBo ZXJfY3R4ICopOworIGludAkgY2lwaGVyc192YWxpZChjb25zdCBjaGFyICopOworIGNoYXIJKmNp cGhlcl9hbGdfbGlzdChjaGFyLCBpbnQpOworIGNvbnN0IGNoYXIgKmNvbXByZXNzaW9uX2FsZ19s aXN0KGludCk7CisgaW50CSBjaXBoZXJfaW5pdChzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqKiwgY29u c3Qgc3RydWN0IHNzaGNpcGhlciAqLAorLSAgICBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0 IHVfY2hhciAqLCB1X2ludCwgaW50KTsKKysgICAgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25z dCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50LCBpbnQsIGludCk7CisgaW50CSBjaXBoZXJfY3J5cHQo c3RydWN0IHNzaGNpcGhlcl9jdHggKiwgdV9pbnQsIHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwK KyAgICAgdV9pbnQsIHVfaW50LCB1X2ludCk7CisgaW50CSBjaXBoZXJfZ2V0X2xlbmd0aChzdHJ1 Y3Qgc3NoY2lwaGVyX2N0eCAqLCB1X2ludCAqLCB1X2ludCwKKyAgICAgY29uc3QgdV9jaGFyICos IHVfaW50KTsKKyB2b2lkCSBjaXBoZXJfZnJlZShzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqKTsKKyB1 X2ludAkgY2lwaGVyX2Jsb2Nrc2l6ZShjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOworK3VpbnQ2 NF90IGNpcGhlcl9yZWtleV9ibG9ja3MoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKKyB1X2lu dAkgY2lwaGVyX2tleWxlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOworIHVfaW50CSBjaXBo ZXJfc2VjbGVuKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7CisgdV9pbnQJIGNpcGhlcl9hdXRo bGVuKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7CisgdV9pbnQJIGNpcGhlcl9pdmxlbihjb25z dCBzdHJ1Y3Qgc3NoY2lwaGVyICopOworIHVfaW50CSBjaXBoZXJfaXNfY2JjKGNvbnN0IHN0cnVj dCBzc2hjaXBoZXIgKik7Cisrdm9pZAkgY2lwaGVyX3Jlc2V0X211bHRpdGhyZWFkZWQodm9pZCk7 CisrY29uc3QgY2hhciAqY2lwaGVyX2N0eF9uYW1lKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXJfY3R4 ICopOworIHVfaW50CSBjaXBoZXJfaXNfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAq KTsKKyAKKyB1X2ludAkgY2lwaGVyX2N0eF9pc19wbGFpbnRleHQoc3RydWN0IHNzaGNpcGhlcl9j dHggKik7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jaXBoZXItc3dpdGNoLmMgb3Bl bnNzaC0xMC41cDEvY2lwaGVyLXN3aXRjaC5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9jaXBo ZXItc3dpdGNoLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NoLTEwLjVwMS9jaXBoZXItc3dpdGNoLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODU0MjEwMzkg KzAyMDAKK0BAIC0wLDAgKzEsNzcgQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykgMjAyMyBUaGUg Qm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCisrICoKKysg KiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqCisrICogVGhpcyBs aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgorKyAqCisr ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQg TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNlZSBodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAqCisrICovCisrCisrLyogVGhpcyBwcm92 aWRlcyB0aGUgZnVuY3Rpb24gdG8gc3dpdGNoIGZyb20gYSBzZXJpYWwgdG8gcGFyYWxsZWwKKysg KiBjaXBoZXIuIFRoaXMgaGFzIGJlZW4gbW92ZWQgaW50byBpdCdzIG93biBmaWxlIGluIG9yZGVy IHRvIG1ha2UgaXQKKysgKiBhdmFpbGFibGUgdG8gYm90aCB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIg d2l0aG91dCBoYXZpbmcgdG8gY2x1dHRlcgorKyAqIHVwIG90aGVyIGZpbGVzLgorKyAqLworKwor KyNpbmNsdWRlICJpbmNsdWRlcy5oIgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgImNpcGhlci5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysj aW5jbHVkZSAicGFja2V0LmgiCisrCisrCisrLyogaWYgd2UgYXJlIHVzaW5nIGEgcGFyYWxsZWwg Y2lwaGVyIHRoZXJlIGNhbiBiZSBpc3N1ZXMgaW4gZWl0aGVyCisrICogYSBmb3JrIG9yIHNhbmRi b3guIEVzc2VudGlhbGx5LCBpZiB3ZSBzd2l0Y2ggdG9vIGVhcmx5IHRoZQorKyAqIHRocmVhZHMg Z2V0IGxvc3QgYW5kIHRoZSBhcHBsaWNhdGlvbiBoYW5ncy4gU28gd2hhdCB3ZSBkbyBpcworKyAq IHRlc3QgaWYgZWl0aGVyIHRoZSBzZW5kIG9yIHJlY2VpdmUgY29udGV4dCBjaXBoZXIgbmFtZQor KyAqIG1hdGNoZXMgdGhlIGtub3duIGF2YWlsYWJsZSBwYXJhbGxlbCBjaXBoZXJzLiBJZiBpdCBk b2VzCisrICogdGhlbiB3ZSBmb3JjZSBhIHJla2V5IHdoaWNoIGF1dG9tYXRpY2FsbHkgbG9hZHMg dGhlIHBhcmFsbGVsCisrICogY2lwaGVyLiAqLworKworK3ZvaWQKKytjaXBoZXJfc3dpdGNoKHN0 cnVjdCBzc2ggKnNzaCkgeworKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJLyogZ2V0IHRoZSBzZW5k IGFuZCByZWNlaXZlIGNvbnRleHQgYW5kIGV4dHJhY3QgdGhlIGNpcGhlciBuYW1lICovCisrCWNv bnN0IHZvaWQgKnNlbmRfY2MgPSBzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQoc3NoKTsKKysJ Y29uc3Qgdm9pZCAqcmVjdl9jYyA9IHNzaF9wYWNrZXRfZ2V0X3JlY2VpdmVfY29udGV4dChzc2gp OworKwljb25zdCBjaGFyICpzZW5kID0gY2lwaGVyX2N0eF9uYW1lKHNlbmRfY2MpOworKwljb25z dCBjaGFyICpyZWN2ID0gY2lwaGVyX2N0eF9uYW1lKHJlY3ZfY2MpOworKworKwlkZWJ1Z19mKCJT ZW5kOiAlcyBSZWN2OiAlcyIsIHNlbmQsIHJlY3YpOworKwkKKysJLyogaWYgdGhlIG5hbWUgb2Yg dGhlIGNpcGhlciBtYXRjaGVzIHRoZW4gd2Ugc2V0IHRoZSBjb250ZXh0CisrCSAqIHRvIGF1dGhl bnRpY2F0ZWQgKGl0IGxpa2VseSBhbHJlYWR5IGlzIHRob3VnaCkgYW5kIHRoZW4KKysJICogZm9y Y2UgdGhlIHJla2V5LiBFaXRoZXIgc2lkZSBjYW4gZG8gdGhpcy4gT25lIGRvd25zaWRlIG9mCisr CSAqIHRoaXMgbWV0aG9kIGlzIHRoYXQgYm90aCBzaWRlcyBjYW4gcmVxdWVzdCBhIHJla2V5IHNv IHlvdQorKwkgKiBjYW4gZW5kIHVwIGR1cGxpY2F0aW5nIHdvcmsuIFRoaXMgaXMgYW5ub3lpbmcg YnV0IHRoZQorKwkgKiBwZXJmb3JtYW5jZSBnYWlucyBtYWtlIGl0IHdvcnRod2hpbGUuIEFsc28g SQorKwkgKiB1c2Ugc3Ryc3RyIGhlcmUgYmVjYXVzZSBzdHJjbXAgd291bGQgcmVxdWlyZSBhIDYg cGFydAorKwkgKiBpZiBzdGF0ZW1lbnQgKi8KKysJaWYgKHN0cnN0cihzZW5kLCAiY3RyIikgfHwg c3Ryc3RyKHJlY3YsICJjdHIiKSkgeworKwkJZGVidWcoIlNlcmlhbCB0byBwYXJhbGxlbCBBRVMt Q1RSIGNpcGhlciBzd2FwIik7CisrCQkvKiBjaXBoZXJfcmVzZXRfbXVsdGl0aHJlYWRlZCgpOyAq LworKwkJLyogbWFyayBNVCBhY3RpdmUgc28gdGhlIHByb21vdGlvbiBpbiBzc2hfc2V0X25ld2tl eXMgb25seQorKwkJICogaGFwcGVucyB3aGVuIHdlIGRlbGliZXJhdGVseSBzd2l0Y2hlZCBoZXJl LiBXaXRob3V0IHRoaXMgYQorKwkJICogbGF0ZXIgcmVrZXkgd291bGQgcHJvbW90ZSB0byBNVCBl dmVuIHVuZGVyIERpc2FibGVNVEFFUy4gKi8KKysJCXNzaC0+bXRfZW5hYmxlZCA9IDE7CisrCQlz c2hfcGFja2V0X3NldF9hdXRoZW50aWNhdGVkKHNzaCk7CisrCQlwYWNrZXRfcmVxdWVzdF9yZWtl eWluZygpOworKwl9CisrCS8qIGRvIHRoZSBzYW1lIGZvciBtdWx0aXRocmVhZGVkIGNoYWNoYTIw IGJ1dCB3aXRoIHN0cmNtcCAqLworKwlpZiAoKHN0cmNtcChzZW5kLCAiY2hhY2hhMjAtcG9seTEz MDVAb3BlbnNzaC5jb20iKSA9PSAwKSB8fAorKwkgICAgKHN0cmNtcChyZWN2LCAiY2hhY2hhMjAt cG9seTEzMDVAb3BlbnNzaC5jb20iKSA9PSAwKSkgeworKwkJZGVidWcoIlNlcmlhbCB0byBwYXJh bGxlbCBDaGFjaGEyMC1wb2x5MTMwNSBjaXBoZXIgc3dhcCIpOworKwkJc3NoX3BhY2tldF9zZXRf YXV0aGVudGljYXRlZChzc2gpOworKwkJcGFja2V0X3JlcXVlc3RfcmVrZXlpbmcoKTsKKysJfQor KyNlbmRpZgorK30KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NpcGhlci1zd2l0Y2gu aCBvcGVuc3NoLTEwLjVwMS9jaXBoZXItc3dpdGNoLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L2NpcGhlci1zd2l0Y2guaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2gtMTAuNXAxL2NpcGhlci1zd2l0Y2guaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4NTQ4 Mjk0MCArMDIwMAorQEAgLTAsMCArMSwxOCBAQAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDE1 IFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KKysg KgorKyAqICBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+CisrICoKKysgKiBU aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCisr ICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKysgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKysgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OworKyAqIGlmIG5vdCwgc2VlIGh0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCisrICoKKysgKi8KKysKKyt2b2lkIGNp cGhlcl9zd2l0Y2ggKHN0cnVjdCBzc2ggKik7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3Jp Zy9jbGllbnRsb29wLmMgb3BlbnNzaC0xMC41cDEvY2xpZW50bG9vcC5jCistLS0gb3BlbnNzaC0x MC41cDEub3JpZy9jbGllbnRsb29wLmMJMjAyNi0wOS0yMSAwNzowNjowNC45NzY1MjgzODYgKzAy MDAKKysrKyBvcGVuc3NoLTEwLjVwMS9jbGllbnRsb29wLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44 ODU3Mjk1NDMgKzAyMDAKK0BAIC0xMDAsNiArMTAwLDcgQEAKKyAjaW5jbHVkZSAibWF0Y2guaCIK KyAjaW5jbHVkZSAic3NoZXJyLmgiCisgI2luY2x1ZGUgImhvc3RmaWxlLmgiCisrI2luY2x1ZGUg Im1ldHJpY3MuaCIKKyAKKyAjaWZkZWYgR1NTQVBJCisgI2luY2x1ZGUgInNzaC1nc3MuaCIKK0BA IC0xNjAsNiArMTYxLDEwIEBACisgCisgc3RhdGljIHZvaWQgY2xpZW50X2luaXRfZGlzcGF0Y2go c3RydWN0IHNzaCAqc3NoKTsKKyBpbnQJc2Vzc2lvbl9pZGVudCA9IC0xOworK2ludAltZXRyaWNz X2hkcl9yZW1vdGVfZmxhZyA9IDA7CisraW50CW1ldHJpY3NfaGRyX2xvY2FsX2ZsYWcgPSAwOwor K2ludAlyZW1vdGVfbm9fcG9sbF9mbGFnID0gMDsKKytpbnQJbG9jYWxfbm9fcG9sbF9mbGFnID0g MDsKKyAKKyAvKiBUcmFjayBlc2NhcGUgcGVyIHByb3RvMiBjaGFubmVsICovCisgc3RydWN0IGVz Y2FwZV9maWx0ZXJfY3R4IHsKK0BAIC0xODYsNiArMTkxLDggQEAKKyBzdGF0aWMgc3RydWN0IGds b2JhbF9jb25maXJtcyBnbG9iYWxfY29uZmlybXMgPQorICAgICBUQUlMUV9IRUFEX0lOSVRJQUxJ WkVSKGdsb2JhbF9jb25maXJtcyk7CisgCisrdm9pZCBjbGllbnRfcmVxdWVzdF9tZXRyaWNzKHN0 cnVjdCBzc2ggKik7CisrCisgc3RhdGljIHZvaWQgcXVpdF9tZXNzYWdlKGNvbnN0IGNoYXIgKmZt dCwgLi4uKQorICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDEsIDIpKSk7 CisgCitAQCAtMTQ2Miw2ICsxNDY5LDcgQEAKKyAJZG91YmxlIHN0YXJ0X3RpbWUsIHRvdGFsX3Rp bWU7CisgCWludCBpbnRlcmFjdGl2ZSA9IC0xLCBjaGFubmVsX2RpZF9lbnF1ZXVlID0gMCwgcjsK KyAJdWludDY0X3QgaWJ5dGVzLCBvYnl0ZXM7CisrCXRpbWVfdCBwcmV2aW91c190aW1lOworIAlp bnQgY29ubl9pbl9yZWFkeSwgY29ubl9vdXRfcmVhZHk7CisgCXNpZ3NldF90IGJzaWdzZXQsIG9z aWdzZXQ7CisgCitAQCAtMTUwNSw2ICsxNTEzLDcgQEAKKyAJY2xpZW50X3JlcGxlZGdlKCk7Cisg CisgCXN0YXJ0X3RpbWUgPSBtb25vdGltZV9kb3VibGUoKTsKKysJcHJldmlvdXNfdGltZSA9IHRp bWUoTlVMTCk7IC8qIGZvciBtZXRyaWNzIHBvbGxpbmcgKi8KKyAKKyAJLyogSW5pdGlhbGl6ZSB2 YXJpYWJsZXMuICovCisgCWxhc3Rfd2FzX2NyID0gMTsKK0BAIC0xNTQ5LDYgKzE1NTgsOCBAQAor IAl9CisgCisgCXNjaGVkdWxlX3NlcnZlcl9hbGl2ZV9jaGVjaygpOworKwlpZiAob3B0aW9ucy5t ZXRyaWNzKQorKwkJY2xpZW50X3JlcXVlc3RfbWV0cmljcyhzc2gpOyAvKiBpbml0aWFsIG1ldHJp Y3MgcG9sbGluZyAqLworIAorIAlpZiAoc2lnZW1wdHlzZXQoJmJzaWdzZXQpID09IC0xIHx8Cisg CSAgICBzaWdhZGRzZXQoJmJzaWdzZXQsIFNJR0hVUCkgPT0gLTEgfHwKK0BAIC0xNTYxLDggKzE1 NzIsMjcgQEAKKyAJCWVycm9yX2YoImJzaWdzZXQgc2V0dXA6ICVzIiwgc3RyZXJyb3IoZXJybm8p KTsKKyAjZW5kaWYKKyAKKysJLyoKKysJICogQmxvY2sgdGVybWluYXRpb24vaW5mbyBzaWduYWxz IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1haW4gbG9vcC4KKysJICogcHBvbGwoKSBhdG9taWNh bGx5IHJlc3RvcmVzIHRoZSBvbGQgbWFzayAob3NpZ3NldCkgd2hpbGUgd2FpdGluZywKKysJICog c28gc2lnbmFscyBhcmUgc3RpbGwgZGVsaXZlcmVkIHByb21wdGx5IGR1cmluZyB0aGUgcG9sbC4g IEtlZXBpbmcKKysJICogdGhlbSBibG9ja2VkIGR1cmluZyB0aGUgZGF0YS1wcm9jZXNzaW5nIHBo YXNlIGF2b2lkcyB0d28KKysJICogc2lncHJvY21hc2sgc3lzY2FsbHMgcGVyIGl0ZXJhdGlvbiAo fjc2ay9zZWMgZHVyaW5nIGJ1bGsgdHJhbnNmZXIsCisrCSAqIH41LjYlIG9mIENQVSBpbiBwcm9m aWxlcykuICBTaWduYWwtZmxhZyBjaGVja3MgKHF1aXRfcGVuZGluZywKKysJICogc2lnaW5mb19y ZWNlaXZlZCkgc3RpbGwgd29yayBiZWNhdXNlIHRoZSBoYW5kbGVycyBydW4gaW5zaWRlCisrCSAq IHBwb2xsJ3MgYXRvbWljIHVuYmxvY2sgd2luZG93LgorKwkgKi8KKysJaWYgKHNpZ3Byb2NtYXNr KFNJR19CTE9DSywgJmJzaWdzZXQsICZvc2lnc2V0KSA9PSAtMSkKKysJCWVycm9yX2YoImJzaWdz ZXQgc2lncHJvY21hc2s6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKysKKyAJLyogTWFpbiBsb29w IG9mIHRoZSBjbGllbnQgZm9yIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uIG1vZGUuICovCisgCXdo aWxlICghcXVpdF9wZW5kaW5nKSB7CisrCQlpZiAob3B0aW9ucy5tZXRyaWNzKSB7CisrCQkJaWYg KCh0aW1lKE5VTEwpIC0gcHJldmlvdXNfdGltZSkgPj0gb3B0aW9ucy5tZXRyaWNzX2ludGVydmFs KSB7CisrCQkJCWNsaWVudF9yZXF1ZXN0X21ldHJpY3Moc3NoKTsKKysJCQkJcHJldmlvdXNfdGlt ZSA9IHRpbWUoTlVMTCk7CisrCQkJfQorKwkJfQorIAkJY2hhbm5lbF9kaWRfZW5xdWV1ZSA9IDA7 CisgCisgCQkvKiBQcm9jZXNzIGJ1ZmZlcmVkIHBhY2tldHMgc2VudCBieSB0aGUgc2VydmVyLiAq LworQEAgLTE1OTcsOCArMTYyNyw2IEBACisgCQkgKiBXYWl0IHVudGlsIHdlIGhhdmUgc29tZXRo aW5nIHRvIGRvIChzb21ldGhpbmcgYmVjb21lcworIAkJICogYXZhaWxhYmxlIG9uIG9uZSBvZiB0 aGUgZGVzY3JpcHRvcnMpLgorIAkJICovCistCQlpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCAm YnNpZ3NldCwgJm9zaWdzZXQpID09IC0xKQorLQkJCWVycm9yX2YoImJzaWdzZXQgc2lncHJvY21h c2s6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCWlmIChzaWdpbmZvX3JlY2VpdmVkKSB7Cisg CQkJY2hhciBpZGVudFsyNTZdOworIAorQEAgLTE2MTIsOCArMTY0MCw2IEBACisgCQljbGllbnRf d2FpdF91bnRpbF9jYW5fZG9fc29tZXRoaW5nKHNzaCwgJnBmZCwgJm5wZmRfYWxsb2MsCisgCQkg ICAgJm5wZmRfYWN0aXZlLCBjaGFubmVsX2RpZF9lbnF1ZXVlLCAmb3NpZ3NldCwKKyAJCSAgICAm Y29ubl9pbl9yZWFkeSwgJmNvbm5fb3V0X3JlYWR5KTsKKy0JCWlmIChzaWdwcm9jbWFzayhTSUdf U0VUTUFTSywgJm9zaWdzZXQsIE5VTEwpID09IC0xKQorLQkJCWVycm9yX2YoIm9zaWdzZXQgc2ln cHJvY21hc2s6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAKKyAJCWlmIChxdWl0X3BlbmRpbmcp CisgCQkJYnJlYWs7CitAQCAtMTY2OSw2ICsxNjk1LDE0IEBACisgCQkJfQorIAkJfQorIAl9Cisr CisrCS8qIFJlc3RvcmUgdGhlIHByZS1sb29wIHNpZ25hbCBtYXNrIG5vdyB0aGF0IHdlIGFyZSBk b25lIHBvbGxpbmcuICovCisrCWlmIChzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9zaWdzZXQs IE5VTEwpID09IC0xKQorKwkJZXJyb3JfZigib3NpZ3NldCBzaWdwcm9jbWFzazogJXMiLCBzdHJl cnJvcihlcnJubykpOworKworKwlpZiAob3B0aW9ucy5tZXRyaWNzKQorKwkJY2xpZW50X3JlcXVl c3RfbWV0cmljcyhzc2gpOyAvKiBmaW5hbCBtZXRyaWNzIHBvbGxpbmcgKi8KKysKKyAJZnJlZShw ZmQpOworIAorIAkvKiBUZXJtaW5hdGUgdGhlIHNlc3Npb24uICovCitAQCAtMjY4Miw2ICsyNzE2 LDE2NyBAQAorIAlyZXR1cm4gMTsKKyB9CisgCisrLyogdGFrZSB0aGUgcmVzcG9uc2UgZnJvbSB0 aGUgc2VydmVyIGFuZCBwYXJzZSBvdXQgdGhlIGRhdGEuCisrICogdGhlIF9jdHggc2hvdWxkIGJl IG51bGwuIEl0J3MganVzdCBoZXJlIGJlY2F1c2UgdGhlIGZvcm1hdAorKyAqIG9mIHRoZSBjYWxs YmFjayBoYW5kbGVyIGV4cGVjdHMgaXQuIExpa2V3aXNlLCBzZXEgaXMKKysgKiBub3QgdXNlZC4g Ki8KKytzdGF0aWMgdm9pZAorK2NsaWVudF9wcm9jZXNzX3JlcXVlc3RfbWV0cmljcyAoc3RydWN0 IHNzaCAqc3NoLCBpbnQgdHlwZSwgdV9pbnQzMl90IHNlcSwgdm9pZCAqX2N0eCkgeworKwlzdHJ1 Y3QgdGNwX2luZm8gbG9jYWxfdGNwX2luZm87CisrCWNvbnN0IHVfY2hhciAqYmxvYjsKKysJRklM RSAqcmVtZnB0cjsKKysJRklMRSAqbG9jYWxmcHRyOworKwljaGFyIHJlbWZpbGVuYW1lWzEwMjRd OworKwljaGFyIGxvY2FsZmlsZW5hbWVbMTAyNF07CisrCXRpbWVfdCBub3c7CisrCXN0cnVjdCB0 bSAqaW5mbzsKKysJY2hhciB0aW1lc3RhbXBbNDBdOworKwljaGFyICptZXRyaWNzc3RyaW5nID0g TlVMTDsKKysJc2l6ZV90IHRjcGlfbGVuLCBsZW4gPSAwOworKwliaW5uICptZXRyaWNzb2JqID0g TlVMTDsKKysJaW50IHIsIGtlcm5lbF92ZXJzaW9uID0gMDsKKysKKysJdGltZSgmbm93KTsKKysJ aW5mbyA9IGxvY2FsdGltZSgmbm93KTsKKysJc3RyZnRpbWUodGltZXN0YW1wLCA0MCwgIiVkLSVt LSVZICVIOiVNOiVTIiwgaW5mbyk7CisrCisrCS8qIG1hbGxvYyB0aGUgc3RyaW5nIDFLQiBzaG91 bGQgYmUgbGFyZ2UgZW5vdWdoICovCisrCW1ldHJpY3NzdHJpbmcgPSBtYWxsb2MoMTAyNCk7Cisr CisrCS8qIGdldCB0aGUgbG9jYWwgc29ja2V0IGluZm9ybWF0aW9uICovCisrCWludCBzb2NrX2lu ID0gc3NoX3BhY2tldF9nZXRfY29ubmVjdGlvbl9pbihzc2gpOworKworKwkvKiB0aGUgdXNlciBj YW4gc3BlY2lmeSBhIG5hbWUvcGF0aCB3aXRoIG9wdGlvbnMubWV0cmljc19wYXRoCisrCSAqIGJ1 dCBpZiBpdCdzIG5vdCBkZWZpbmVkIHdlJ2xsIHVzZSBhIGRlZmF1bHQgbmFtZS4gSW4gZWl0aGVy IGNhc2UKKysJICogdGhlIG5hbWUgd2lsbCBoYXZlIGEgc3VmZml4IG9mIGxvY2FsIGZvciB0aGUg bG9jYWwgZGF0YSBhbmQgcmVtb3RlIGZvcgorKwkgKiB0aGUgcmVtb3RlIGRhdGEgKi8KKysJaWYg KG9wdGlvbnMubWV0cmljc19wYXRoID09IE5VTEwpIHsKKysJCXNucHJpbnRmKHJlbWZpbGVuYW1l LCAxMDI0LCAiJXMiLCAiLi9zc2hfc3RhY2tfbWV0cmljcy5yZW1vdGUiKTsKKysJCXNucHJpbnRm KGxvY2FsZmlsZW5hbWUsIDEwMjQsICIlcyIsICIuL3NzaF9zdGFja19tZXRyaWNzLmxvY2FsIik7 CisrCX0gZWxzZSB7CisrCQlzbnByaW50ZihyZW1maWxlbmFtZSwgMTAyNCwgIiVzLiVzIiwgb3B0 aW9ucy5tZXRyaWNzX3BhdGgsICJyZW1vdGUiKTsKKysJCXNucHJpbnRmKGxvY2FsZmlsZW5hbWUs IDEwMjQsICIlcy4lcyIsIG9wdGlvbnMubWV0cmljc19wYXRoLCAibG9jYWwiKTsKKysJfQorKwor KwkvKiBzaG91bGQgYmUgdHlwZSA4MSBhbmQgaWYgaXQncyBub3QgdGhlbiBpdHMgbGlrbGV5IHRo YXQKKysJKiB0aGUgcmVtb3RlIGRvZXMgbm90IHN1cHBvcnQgcG9sbGluZy4gV2UgY2FuIHN0aWxs IGdldCBsb2NhbCBkYXRhIHRob3VnaAorKwkqLworKwlpZiAodHlwZSAhPSBTU0gyX01TR19SRVFV RVNUX1NVQ0NFU1MpIHsKKysJCWlmIChyZW1vdGVfbm9fcG9sbF9mbGFnID09IDApIHsKKysJCQll cnJvcigiUmVtb3RlIGRvZXMgbm90IHN1cHBvcnQgc3RhY2sgbWV0cmljIHBvbGxpbmcuIExvY2Fs IGRhdGEgb25seS4iKTsKKysJCQlyZW1vdGVfbm9fcG9sbF9mbGFnID0gMTsKKysJCX0KKysJCWdv dG8gbG9jYWxvbmx5OworKwl9CisrCisrCS8qIG9wZW4gdGhlIGZpbGUgaGFuZGxlIHRvIHdyaXRl IHRoZSByZW1vdGUgZGF0YSovCisrCXJlbWZwdHIgPSBmb3BlbihyZW1maWxlbmFtZSwgImEiKTsK KysJaWYgKHJlbWZwdHIgPT0gTlVMTCkKKysJCWZhdGFsKCJFcnJvciBvcGVuaW5nICVzOiAlcyIs IHJlbWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworKworKwkvKiByZWFkIHRoZSBlbnRpcmUg cGFja2V0IHN0cmluZyBpbnRvIGJsb2IKKysJICogYmxvYiBoYXMgdG8gYmUgYSBjb25zdCB1Y2hh ciBhcyB0aGF0J3Mgd2hhdCBzdHJpbmdfZGlyZWN0IGV4cGVjdHMKKysJICogd2UgY2FzdCBpdCBh cyBhIHZvaWQgZm9yIHRoZSBiaW5uIGZ1bmN0aW9ucyAqLworKwlzc2hwa3RfZ2V0X3N0cmluZ19k aXJlY3Qoc3NoLCAmYmxvYiwgJmxlbik7CisrCWlmIChsZW4gPT0gMCkgeworKwkJLyogcmVjZWl2 ZWQgbm8gZGF0YS4gd2hpY2ggaXMgd2VpcmQgKi8KKysJCWVycm9yKCJSZWNlaXZlZCBubyByZW1v dGUgbWV0cmljcyBkYXRhLiBDb250aW51aW5nLiIpOworKwl9CisrCisrCS8qIGdldCB0aGUga2Vy bmVsIHZlcnNpb24gcHJpbnRpbmcgdGhlIGhlYWRlciAqLworKwlrZXJuZWxfdmVyc2lvbiA9IGJp bm5fb2JqZWN0X2ludDMyKCh2b2lkICopYmxvYiwgImtlcm5lbF92ZXJzaW9uIik7CisrCisrCS8q IGNyZWF0ZSBhIHN0cmluZyBvZiB0aGUgZGF0YSBmcm9tIHRoZSBiaW5uIG9iamVjdCBibG9iICov CisrCW1ldHJpY3NfcmVhZF9iaW5uX29iamVjdCgodm9pZCAqKWJsb2IsIG1ldHJpY3NzdHJpbmcp OworKworKwkvKiBoYXZlIHdlIHByaW50ZWQgdGhlIGhlYWRlcj8gKi8KKysJaWYgKG1ldHJpY3Nf aGRyX3JlbW90ZV9mbGFnID09IDApIHsKKysJCW1ldHJpY3NfcHJpbnRfaGVhZGVyKHJlbWZwdHIs ICJSRU1PVEUgQ09OTkVDVElPTiIsIGtlcm5lbF92ZXJzaW9uKTsKKysJCW1ldHJpY3NfaGRyX3Jl bW90ZV9mbGFnID0gMTsKKysJfQorKwlmcHJpbnRmKHJlbWZwdHIsICIlcywgIiwgdGltZXN0YW1w KTsKKysJZnByaW50ZihyZW1mcHRyLCAiJXNcbiIsIG1ldHJpY3NzdHJpbmcpOworKworKwkvKiBj bG9zZSByZW1vdGUgZmlsZSBwb2ludGVyKi8KKysJZmNsb3NlKHJlbWZwdHIpOworKworKwkvKiBn b3QgdGhlIHJlbW90ZSBkYXRhLCBub3cgZ2V0IHRoZSBsb2NhbCAqLworK2xvY2Fsb25seToKKysv KiBUQ1BfSU5GTyBpcyBkZWZpbmVkIGluIG1ldHJpY3MuaCovCisrI2lmICFkZWZpbmVkIFRDUF9J TkZPCisrCWlmIChsb2NhbF9ub19wb2xsX2ZsYWcgPT0gMCkgeworKwkJZXJyb3IoIkxvY2FsIGhv c3QgZG9lcyBub3Qgc3VwcG9ydCBtZXRyaWMgcG9sbGluZy4gUmVtb3RlIGRhdGEgb25seS4iKTsK KysJCWxvY2FsX25vX3BvbGxfZmxhZyA9IDE7CisrCX0KKysjZWxzZQorKwkvKiBvcGVuIGZpbGUg aGFuZGxlIGZvciBsb2NhbCBkYXRhICovCisrCWxvY2FsZnB0ciA9IGZvcGVuKGxvY2FsZmlsZW5h bWUsICJhIik7CisrCWlmKGxvY2FsZnB0ciA9PSBOVUxMKQorKwkJZmF0YWwoIkVycm9yIG9wZW5p bmcgJXM6ICVzIiwgbG9jYWxmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKysKKysJLyogY3Jl YXRlIHRoZSBiaW5uIG9iamVjdCovCisrCW1ldHJpY3NvYmogPSBiaW5uX29iamVjdCgpOworKwlp ZiAobWV0cmljc29iaiA9PSBOVUxMKSB7CisrCQlmYXRhbCgiQ291bGQgbm90IGNyZWF0ZSBtZXRy aWNzIG9iamVjdCIpOworKwl9CisrCisrCXRjcGlfbGVuID0gKHNpemVfdClzaXplb2YobG9jYWxf dGNwX2luZm8pOworKwlpZiAoKHIgPSBnZXRzb2Nrb3B0KHNvY2tfaW4sIElQUFJPVE9fVENQLCBU Q1BfSU5GTywgKHZvaWQgKikmbG9jYWxfdGNwX2luZm8sCisrCQkJICAgIChzb2NrbGVuX3QgKikm dGNwaV9sZW4pKSAhPSAwKXsKKysJCWVycm9yKCJDb3VsZCBub3QgcmVhZCB0Y3BfaW5mbyBmcm9t IHNvY2tldCIpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJLyogd2Ugd3JpdGUgYW5kIHJlYWQg dG8gYSBiaW5uIG9iamVjdCBiZWNhdXNlIGl0IGxldHMgdXMKKysJICogZm9ybWF0IHRoZSBkYXRh IGNvbnNpc3RlbnRseSAqLworKwltZXRyaWNzX3dyaXRlX2Jpbm5fb2JqZWN0KCZsb2NhbF90Y3Bf aW5mbywgbWV0cmljc29iaik7CisrCisrCS8qIGNyZWF0ZSBhIHN0cmluZyBvZiB0aGUgZGF0YSBm cm9tIHRoZSBiaW5uIG9iamVjdCBtZXRyaWNzb2JqICovCisrCW1ldHJpY3NfcmVhZF9iaW5uX29i amVjdCgodm9pZCAqKW1ldHJpY3NvYmosIG1ldHJpY3NzdHJpbmcpOworKworKwkvKiBnZXQgdGhl IGtlcm5lbCB2ZXJzaW9uIHByaW50aW5nIHRoZSBoZWFkZXIgKi8KKysJa2VybmVsX3ZlcnNpb24g PSBiaW5uX29iamVjdF9pbnQzMihtZXRyaWNzb2JqLCAia2VybmVsX3ZlcnNpb24iKTsKKysKKysJ aWYgKG1ldHJpY3NfaGRyX2xvY2FsX2ZsYWcgPT0gMCkgeworKwkJbWV0cmljc19wcmludF9oZWFk ZXIobG9jYWxmcHRyLCAiTE9DQUwgQ09OTkVDVElPTiIsIGtlcm5lbF92ZXJzaW9uKTsKKysJCW1l dHJpY3NfaGRyX2xvY2FsX2ZsYWcgPSAxOworKwl9CisrCisrCWZwcmludGYobG9jYWxmcHRyLCAi JXMsICIsIHRpbWVzdGFtcCk7CisrCWZwcmludGYobG9jYWxmcHRyLCAiJXNcbiIsIG1ldHJpY3Nz dHJpbmcpOworKwlmY2xvc2UgKGxvY2FsZnB0cik7CisrI2VuZGlmIC8qIFRDUF9JTkZPICovCisr b3V0OgorKwlmcmVlKG1ldHJpY3NzdHJpbmcpOworK30KKysKKysvKiBVc2UgdGhlIFNTSDJfTVNH X0dMT0JBTF9SRVFVRVNUIHByb3RvY29sIHRvCisrICogYXNrIHRoZSBzZXJ2ZXIgdG8gc2VuZCBt ZXRyaWNzIGJhY2sgdG8gdGhlIGNsaWVudC4KKysgKiB3ZSB1c2UgdGhlIG5vbi1jYW5vbmljYWwg c3RyaW5nIHN0YWNrLW1ldHJpY3NAaHBuc3NoLm9yZworKyAqIHRvIGluZGljYXRlIHRoZSB0eXBl IG9mIHJlcXVlc3Qgd2Ugd2FudC4gSWYgdGhlIHJlY2VpdmVyIGRvZXNuJ3QKKysgKiB1bmRlcnN0 YW5kIGl0IHRoZW4gdGhlIHJlc3BvbnNlIGluZGlhY3RlcyBhIGZhaWx1cmUuCisrICogSSBjYW4g cHJvYmFibHkgZG8gdGhpcyBieSB1c2luZyBjbGludF9pbnB1dF9nbG9iYWxfcmVxdWVzdCBidXQK KysgKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4KKysgKi8KKyt2b2lkIGNsaWVu dF9yZXF1ZXN0X21ldHJpY3Moc3RydWN0IHNzaCAqc3NoKSB7CisrCWludCByOworKworKwlkZWJ1 Z19mKCJBc2tpbmcgc2VydmVyIGZvciBUQ1Agc3RhY2sgbWV0cmljcyIpOworKwkvKiBjcmVhdGUg YSBwYWtjZXQgb2YgR0xPQkFMX1JFUVVFU1QgdHlwZSAqLworKwlpZiAoKHIgPSBzc2hwa3Rfc3Rh cnQoc3NoLCBTU0gyX01TR19HTE9CQUxfUkVRVUVTVCkpICE9IDAgfHwKKysJICAgIC8qIGRlZmlu ZSB0aGUgdHlwZSBvZiBHTE9CQUxfUkVRVUVTVCBtZXNzYWdlICovCisrCSAgICAociA9IHNzaHBr dF9wdXRfY3N0cmluZyhzc2gsCisrCSAgICAic3RhY2stbWV0cmljc0BocG5zc2gub3JnIikpICE9 IDAgfHwKKysJICAgIC8qIGluZGljYXRlIGlmIHdlIHdhbnQgYSByZXNwb25zZS4gMSBmb3IgeWVz IDAgZm9yIG5vICovCisrCSAgICAociA9IHNzaHBrdF9wdXRfdTgoc3NoLCAxKSkgIT0gMCkKKysJ CWZhdGFsX2ZyKHIsICJwcmVwYXJlIHN0YWNrIHJlcXVlc3QgZmFpbHVyZSIpOworKwkvKiBzZW5k IHRoZSBwYWNrZXQgKi8KKysJaWYgKChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKKysJCWZh dGFsX2ZyKHIsICJzZW5kIHN0YWNrIHJlcXVlc3QiKTsKKysJLyogaSBiZWxpZXZlIHRoaXMgaW5k aWNhdGVzIHdoYXQgd2UgYXJlIHRvIHVzZSBmb3IgYSBjYWxsYmFjayAqLworKwljbGllbnRfcmVn aXN0ZXJfZ2xvYmFsX2NvbmZpcm0oY2xpZW50X3Byb2Nlc3NfcmVxdWVzdF9tZXRyaWNzLCBOVUxM KTsKKyt9CisrCisgc3RhdGljIGludAorIGNsaWVudF9pbnB1dF9nbG9iYWxfcmVxdWVzdChpbnQg dHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCisgeworQEAgLTI4MDQsNiArMjk5 OSw0MyBAQAorIAorIAlsZW4gPSBzc2hidWZfbGVuKGNtZCk7CisgCWlmIChsZW4gPiAwKSB7Cisr CQkvKiB3ZSBtYXkgYmUgY29ubmVjdGluZyB0byBhIHNlcnZlciB0aGF0IGhhcyBocG4gcHJlZml4 ZWQKKysJCSAqIGJpbmFyaWVzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gcmV3 cml0ZSBhbnkKKysJCSAqIHNjcCBjb21tYW5kcyB0byBsb29rIGZvciBocG5zY3AgaW5zdGVhZC4K KysJCSAqLworKwkJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX0hQTlNTSF9QUkVGSVgpIHsKKysJCQlj aGFyICpuZXdfY21kOworKwkJCW5ld19jbWQgPSBtYWxsb2MobGVuKzQpOworKwkJCS8qIHJlYWQg dGhlIGV4aXN0aW5nIGNvbW1hbmQgaW50byBhIHRlbXAgYnVmZmVyICovCisrCQkJc3ByaW50Zihu ZXdfY21kLCAiJXMiLCAoY29uc3QgdV9jaGFyKilzc2hidWZfcHRyKGNtZCkpOworKwkJCWNvbnN0 IGNoYXIgKnBvczsKKysJCQkvKiBzZWUgaWYgdGhlIGNvbW1hbmQgc3RhcnRzIHdpdGggc2NwICov CisrCQkJcG9zID0gc3Ryc3RyKG5ld19jbWQsICJzY3AiKTsKKysJCQkvKiBieSBzdWJzdHJhY3Rp bmcgdGhlIHBvaW50ZXIgbmV3X2NtZCBmcm9tIHRoZSBwb2ludGVyCisrCQkJICogcG9zIHdlIGVu ZCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmVlZGxlIGluIHRoZQorKwkJCSAqIGhheXN0 YWNrLiBJZiBpdCdzIDAgdGhlbiB3ZSBjYW4gbWVzcyB3aXRoIGl0CisrCQkJICovCisrCQkJaWYg KHBvcyAtIG5ld19jbWQgPT0gMCkgeworKwkJCQlkZWJ1Z19mKCJSZXdyaXRpbmcgc2NwIGNvbW1h bmQgZm9yIGhwbnNjcC4iKTsKKysJCQkJc3ByaW50ZihuZXdfY21kLCAiaHBuJXMiLCAoY29uc3Qg dV9jaGFyKilzc2hidWZfcHRyKGNtZCkpOworKwkJCQlkZWJ1Z19mKCJDb21tYW5kIHdhczogJXMg YW5kIGlzIG5vdyAlcyIsCisrCQkJCSAgICAgIChjb25zdCB1X2NoYXIqKXNzaGJ1Zl9wdHIoY21k KSwgbmV3X2NtZCk7CisrCQkJCS8qIGZyZWUgdGhlIGV4aXN0aW5nIHNzaGJ1ZiAnY21kJworKwkJ CQkgKiByZWNyZWF0ZSBpdCBhbmQgdGhlbiB3cml0ZSBvdXIgbmV3X2NtZCBpbnRvCisrCQkJCSAq IHRoZSBzc2hidWYgc3RydWN0CisrCQkJCSAqLworKwkJCQlzc2hidWZfZnJlZShjbWQpOworKwkJ CQlpZiAoKGNtZCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCQkJCWZhdGFsKCJzc2hidWZf bmV3IGZhaWxlZCBpbiBzY3AgcmV3cml0ZSIpOworKwkJCQlzc2hidWZfcHV0ZihjbWQsICIlcyIs IG5ld19jbWQpOworKwkJCQkvKiB3ZSB1c2UgbGVuIGxhdGVyIG9uIHNvIGRvbid0IGZvcmdldCB0 bworKwkJCQkgKiBpbmNyZW1lbnQgaXQgYnkgdGhlIG51bWJlciBvZiBuZXcgY2hhcnMgaW4gdGhl CisrCQkJCSAqIGNvbW1hbmQKKysJCQkJICovCisrCQkJCWxlbiArPSAzOworKwkJCQlmcmVlKG5l d19jbWQpOworKwkJCX0KKysJCX0KKyAJCWlmICgoY21kc3RyaW5nID0gc3NoYnVmX2R1cF9zdHJp bmcoY21kKSkgPT0gTlVMTCkKKyAJCQlmYXRhbF9mKCJzc2hidWZfZHVwX3N0cmluZyBmYWlsZWQi KTsKKyAJCWlmIChsZW4gPiA5MDApCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9jb21w YXQuYyBvcGVuc3NoLTEwLjVwMS9jb21wYXQuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvY29t cGF0LmMJMjAyNi0wOS0yMSAwNzowNjowNS40NTMyNjc4NTMgKzAyMDAKKysrKyBvcGVuc3NoLTEw LjVwMS9jb21wYXQuYwkyMDI2LTA5LTIxIDA3OjUxOjE1Ljc4MjU1MjgzMyArMDIwMAorQEAgLTI5 LDYgKzI5LDcgQEAKKyAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5o PgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgCisgI2luY2x1 ZGUgInhtYWxsb2MuaCIKK0BAIC0xMjMsNiArMTI0LDggQEAKKyAJCQkJCVNTSF9CVUdfVVRGOFRU WU1PREUgfSwKKyAJCXsgIlR3aXN0ZWRfKiIsCQkwIH0sCisgCQl7ICJUd2lzdGVkKiIsCQlTU0hf QlVHX0RFQlVHIH0sCisrCQkvKiBNb2JhWHRlcm0ncyBTRlRQIGVuZ2luZSwgc2VlIGtleF9pbnB1 dF9uZXdrZXlzICovCisrCQl7ICJTZWN1cmVCbGFja2JveCoiLAlTU0hfQlVHX1NUUklDVF9LRVhf UkVLRVkgfSwKKyAJCXsgTlVMTCwJCQkwIH0KKyAJfTsKKyAKK0BAIC0xMzYsNiArMTM5LDM1IEBA CisgCQkJc3NoLT5jb21wYXQgPSBjaGVja1tpXS5idWdzOworIAlpZiAoZm9yYmlkX3NzaF9yc2Ep CisgCQlzc2gtPmNvbXBhdCB8PSBTU0hfUkhfUlNBU0lHU0hBOworKwkJCS8qIENoZWNrIHRvIHNl ZSBpZiB0aGUgcmVtb3RlIHNpZGUgaXMgT3BlblNTSCBhbmQgbm90IEhQTiAqLworKwkJCS8qIFRP RE86IFNlZSBpZiB3ZSBjYW4gd29yayB0aGlzIGludG8gdGhlIG5ldyBtZXRob2QgZm9yIGJ1ZyBj aGVja3MgKi8KKysJCQlpZiAoc3Ryc3RyKHZlcnNpb24sICJPcGVuU1NIIikgIT0gTlVMTCkgewor KwkJCQkvKiBjaGVjayBpZiB0aGUgcmVtb3RlIGlzIGhwbiBhbmQgaWYgdGhlIHZlcnNpb24KKysJ CQkJICogdXNlcyBocG4gcHJlZml4ZWQgYmluYXJpZXMgKi8KKysJCQkJY29uc3QgY2hhciAqb3A7 CisrCQkJCWlmICgob3AgPSBzdHJzdHIodmVyc2lvbiwgImhwbiIpKSAhPSBOVUxMKSB7CisrCQkJ CQlpbnQgaHBudmVyID0gMDsKKysJCQkJCXNzaC0+Y29tcGF0IHw9IFNTSF9IUE5TU0g7CisrCQkJ CQlkZWJ1ZygiUmVtb3RlIGlzIEhQTiBlbmFibGVkIik7CisrCQkJCQlpZiAoc3NjYW5mKG9wLCAi aHBuJWQiLCAmaHBudmVyKSA9PSAxICYmCisrCQkJCQkgICAgaHBudmVyID49IDE2KSB7CisrCQkJ CQkJc3NoLT5jb21wYXQgfD0gU1NIX0hQTlNTSF9QUkVGSVg7CisrCQkJCQkJZGVidWcoIlJlbW90 ZSB1c2VzIEhQTlNTSCBwcmVmaXhlcy4iKTsKKysJCQkJCX0KKysJCQkJfQorKwkJCQkvKiBSZXN0 cmljdCBhZHZlcnRpc2VkIHdpbmRvdyBmb3Igbm9uLUhQTiBPcGVuU1NIID49IDguOS4gKi8KKysJ CQkJaWYgKCEoc3NoLT5jb21wYXQgJiBTU0hfSFBOU1NIKSkgeworKwkJCQkJY29uc3QgY2hhciAq b3A7CisrCQkJCQlpbnQgb21haiA9IDAsIG9taW4gPSAwOworKwkJCQkJaWYgKChvcCA9IHN0cnN0 cih2ZXJzaW9uLCAiT3BlblNTSF8iKSkgIT0gTlVMTCAmJgorKwkJCQkJICAgIHNzY2FuZihvcCwg Ik9wZW5TU0hfJWQuJWQiLCAmb21haiwgJm9taW4pID09IDIgJiYKKysJCQkJCSAgICAob21haiA+ PSA5IHx8IChvbWFqID09IDggJiYgb21pbiA+PSA5KSkpIHsKKysJCQkJCQlzc2gtPmNvbXBhdCB8 PSBTU0hfUkVTVFJJQ1RfV0lORE9XOworKwkJCQkJCWRlYnVnKCJSZXN0cmljdGluZyBhZHZlcnRp c2VkIHdpbmRvdyBzaXplLiIpOworKwkJCQkJfQorKwkJCQl9CisrCQkJfQorKwkJCWRlYnVnKCJz c2gtPmNvbXBhdCBpcyAldSIsIHNzaC0+Y29tcGF0KTsKKyAJCQlyZXR1cm47CisgCQl9CisgCX0K K2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NvbXBhdC5oIG9wZW5zc2gtMTAuNXAxL2Nv bXBhdC5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9jb21wYXQuaAkyMDI2LTA5LTIxIDA3OjA2 OjA1LjQ1MzQwNjk5MyArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NvbXBhdC5oCTIwMjYtMDkt MjEgMTA6NDc6MTguMTg1MzM3NzcyICswMjAwCitAQCAtNDYsMTIgKzQ2LDEzIEBACisgLyogI2Rl ZmluZSB1bnVzZWQJCTB4MDAwMTAwMDAgKi8KKyAvKiAjZGVmaW5lIHVudXNlZAkJMHgwMDAyMDAw MCAqLworIC8qICNkZWZpbmUgdW51c2VkCQkweDAwMDQwMDAwICovCistLyogI2RlZmluZSB1bnVz ZWQJCTB4MDAxMDAwMDAgKi8KKysjZGVmaW5lIFNTSF9CVUdfU1RSSUNUX0tFWF9SRUtFWQkweDAw MDgwMDAwIC8qIHBlZXIgd2FudHMga2V4LXN0cmljdCBvbiByZWtleXMgKi8KKysjZGVmaW5lIFNT SF9IUE5TU0gJCTB4MDAxMDAwMDAgLyogYmFzaWNhbGx5IGEgbm90aWNlIHRoYXQgdGhpcyBpcyBI UE4gYXdhcmUgKi8KKyAjZGVmaW5lIFNTSF9CVUdfRVhURU9GCQkweDAwMjAwMDAwCisgI2RlZmlu ZSBTU0hfQlVHX1BST0JFCQkweDAwNDAwMDAwCistLyogI2RlZmluZSB1bnVzZWQJCTB4MDA4MDAw MDAgKi8KKysjZGVmaW5lIFNTSF9SRVNUUklDVF9XSU5ET1cJMHgwMDgwMDAwMCAvKiByZXN0cmlj dCBhZHZlcnRpc2VkIHdpbmRvdyB0byBPcGVuU1NIIGNsaWVudHMgKi8KKyAjZGVmaW5lIFNTSF9P TERfRk9SV0FSRF9BRERSCTB4MDEwMDAwMDAKKy0vKiAjZGVmaW5lIHVudXNlZAkJMHgwMjAwMDAw MCAqLworKyNkZWZpbmUgU1NIX0hQTlNTSF9QUkVGSVgJMHgwMjAwMDAwMCAvKiBpbmRpY2F0ZXMg dGhhdCB3ZSBoYXZlIGhwbiBwcmVmaXhlcyBiaW5hcmllcyAqLworICNkZWZpbmUgU1NIX05FV19P UEVOU1NICQkweDA0MDAwMDAwCisgI2RlZmluZSBTU0hfQlVHX0RZTkFNSUNfUlBPUlQJMHgwODAw MDAwMAorICNkZWZpbmUgU1NIX0JVR19DVVJWRTI1NTE5UEFECTB4MTAwMDAwMDAKK2RpZmYgLU51 ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2NvbmZpZ3VyZS5hYyBvcGVuc3NoLTEwLjVwMS9jb25maWd1 cmUuYWMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDI2LTA5LTIxIDA3 OjA2OjA1LjU1ODE4NTU4NCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2NvbmZpZ3VyZS5hYwky MDI2LTA5LTIxIDA3OjA2OjU5Ljg4Njg2MTQxMSArMDIwMAorQEAgLTI3NjIsNiArMjc2MiwzOSBA QAorIAkpCisgZmkKKyAKKysKKysjIFRlc3RpbmcgTVBUQ1AgU3VwcG9ydAorKyMgRG9lcyB0aGUg T1Mgc3VwcG9ydCBNUFRDUD8KKysjIFdlIGRvbid0IHVzZSB0aGlzIGF0IHRoZSBtb21lbnQKKysj IGJ1dCBJIGFtIGhvbGRpbmcgaXQgaW4gcmVzcnZlIC1janIgMDQvMDQvMjAyNQorKwlBQ19NU0df Q0hFQ0tJTkcoW3doZXRoZXIgdGhlIE9TIHN1cHBvcnRzIE1QVENQXSkKKysJQUNfUlVOX0lGRUxT RSgKKysJCVtBQ19MQU5HX1BST0dSQU0oW1sKKysJCSNpbmNsdWRlIDxzdGRpby5oPgorKwkJI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkJI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgorKwkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysJCSNpbmNsdWRlIDxzdGRi b29sLmg+CisrCQkjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKworKwkJXV0sIFtbCisrCQlpbnQg c29jayA9IC0xOworKwkJc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9U T19NUFRDUCk7CisrCQlpZiAoc29jayA8IDApIHsKKysJCSAgIGV4aXQoMSk7CisrCQkgICB9Cisr CQldXSldLAorKwkJWworKwkJCUFDX01TR19SRVNVTFQoW3llc10pCisrCQkJQUNfREVGSU5FKFtI QVZFX01QVENQXSwgWzFdLAorKwkJCSAgICBbT1MgU3VwcG9ydHMgTVBUQ1BdKQorKwkJXSwKKysJ CVsKKysJCQlBQ19NU0dfUkVTVUxUKFtub10pCisrCQldCisrCSkKKysKKyBpZiB0ZXN0ICJ4JGFj X2N2X2Z1bmNfZ2V0YWRkcmluZm8iID0gInh5ZXMiICYmIFwKKyAgICAgdGVzdCAieCRjaGVja19m b3JfaHB1eF9icm9rZW5fZ2V0YWRkcmluZm8iID0gIngxIjsgdGhlbgorIAlBQ19NU0dfQ0hFQ0tJ TkcoW2lmIGdldGFkZHJpbmZvIHNlZW1zIHRvIHdvcmtdKQorQEAgLTMxNzgsOCArMzIxMSw4IEBA CisgCQkJMjAwKikgICBvcGVuc3NsX2ltcGw9ImxpYnJlc3NsIgorIAkJCQlsdmVyPWBlY2hvICIk c3NsdmVyIiB8IHNlZCAncy8uKmxpYnJlc3NsLS8vJ2AKKyAJCQkJY2FzZSAiJGx2ZXIiIGluCist CQkJCTIqfDMwMCopICMgMi54LCAzLjAuMAorLQkJCQkJQUNfTVNHX0VSUk9SKFtMaWJyZVNTTCA+ PSAzLjEuMCByZXF1aXJlZCAoaGF2ZSAiJHNzbF9zaG93dmVyIildKQorKwkJCQkyKnwzMDAqfDMw MSp8MzAyKnwzMDMqfDMwNCp8MzA2KikgIyAyLngsIDMuMC4wCisrCQkJCQlBQ19NU0dfRVJST1Io W0xpYnJlU1NMID49IDMuNy4wIHJlcXVpcmVkIChoYXZlICIkc3NsX3Nob3d2ZXIiKV0pCisgCQkJ CQk7OworIAkJCQkqKSA7OwkjIEFzc3VtZSBhbGwgb3RoZXIgdmVyc2lvbnMgYXJlIGdvb2QuCisg CQkJCWVzYWMKK0BAIC0zMTg4LDYgKzMyMjEsNyBAQAorIAkJCQkjIE9wZW5TU0wgMyAmIDQ7IHdl IHVzZSB0aGUgMS4xeCBBUEkKKyAJCQkJIyBodHRwczovL29wZW5zc2wub3JnL3BvbGljaWVzL2dl bmVyYWwvdmVyc2lvbmluZy1wb2xpY3kuaHRtbAorIAkJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1E T1BFTlNTTF9BUElfQ09NUEFUPTB4MTAxMDAwMDBMIgorKwkJCQlBQ19ERUZJTkUoW1dJVEhfT1BF TlNTTDNdLCBbMV0sIFtXaXRoIE9wZW5TU0wzXSkKKyAJCQkJOzsKKyAJCSAgICAgICAgKikKKyAJ CQkJQUNfTVNHX0VSUk9SKFtVbmtub3duL3Vuc3VwcG9ydGVkIE9wZW5TU0wgdmVyc2lvbiAoIiRz c2xfc2hvd3ZlciIpXSkKK0BAIC0zMzEzLDYgKzMzNDcsMjkgQEAKKyAJCUVWUF9DSVBIRVJfQ1RY X3NldF9pdiBcCisgCV0pCisgCisrCSMgT3BlblNTTCAzLjAgQVBJCisrCSMgRG9lcyBPcGVuU1NM IHN1cHBvcnQgdGhlIEVWUF9NQUMgZnVuY3Rpb25zIGZvciBQb2x5MTMwNT8KKysJQUNfTVNHX0NI RUNLSU5HKFt3aGV0aGVyIE9wZW5TU0wgc3VwcG9ydHMgUG9seTEzMDUgTUFDIEVWUF0pCisrCUFD X1JVTl9JRkVMU0UoCisrCQlbQUNfTEFOR19QUk9HUkFNKFtbCisrCSNpbmNsdWRlIDxzdGRsaWIu aD4KKysJI2luY2x1ZGUgPHN0ZGlvLmg+CisrCSNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKwkJ XV0sIFtbCisrCQlFVlBfTUFDICptYWMgPSBFVlBfTUFDX2ZldGNoKE5VTEwsICJwb2x5MTMwNSIs IE5VTEwpOworKwkJaWYgKG1hYyA9PSBOVUxMKQorKwkJICAgZXhpdCgxKTsKKysJCV1dKV0sCisr CQlbCisrCQkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKysJCQlBQ19ERUZJTkUoW09QRU5TU0xfSEFW RV9QT0xZX0VWUF0sIFsxXSwKKysJCQkgICAgW0xpYmNyeXB0byBzdXBwb3J0cyBQb2x5MTMwNSBN QUMgRVZQXSkKKysJCV0sCisrCQlbCisrCQkJQUNfTVNHX1JFU1VMVChbbm9dKQorKwkJXQorKwkp CisrCisgCWlmIHRlc3QgIngkb3BlbnNzbF9lbmdpbmUiID0gInh5ZXMiIDsgdGhlbgorIAkJQUNf Q0hFQ0tfSEVBREVSUyhbb3BlbnNzbC9vcGVuc3NsY29uZi5oIG9wZW5zc2wvY29uZmlndXJhdGlv bi5oXSkKKyAJCUFDX01TR19DSEVDS0lORyhbZm9yIE9wZW5TU0wgRU5HSU5FIHN1cHBvcnRdKQor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvZGVmaW5lcy5oIG9wZW5zc2gtMTAuNXAxL2Rl ZmluZXMuaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvZGVmaW5lcy5oCTIwMjYtMDgtMTEgMDQ6 MjI6MTcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvZGVmaW5lcy5oCTIwMjYt MDktMjEgMDc6MDY6NTkuODg3Mzc3Mzc2ICswMjAwCitAQCAtOTUxLDcgKzk1MSwxMSBAQAorICNl bmRpZgorIAorICNpZm5kZWYgU1NIX0lPQlVGU1oKKy0jIGRlZmluZSBTU0hfSU9CVUZTWiA4MTky CisrIyBkZWZpbmUgU1NIX0lPQlVGU1ogKDMyKjEwMjQpCisrI2VuZGlmCisrCisrI2lmbmRlZiBJ UFBST1RPX01QVENQCisrI2RlZmluZSBJUFBST1RPX01QVENQIDI2MgorICNlbmRpZgorIAorIC8q CitAQCAtMTAwOCwzICsxMDEyLDEyIEBACisgI2VuZGlmCisgCisgI2VuZGlmIC8qIF9ERUZJTkVT X0ggKi8KKysKKysvKiB1c2VkIHRvIGVuYWJsZSBjaGVja2luZyBsaW51eCBrZXJuZWwgdmVyc2lv bnMgKi8KKysjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmICFkZWZpbmVkKF9fYWxwaW5lX18pCisr I2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIEtFUk5FTF9W RVJTSU9OIC8qIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgdG8gZGVmaW5lIHRoaXMgKi8KKysjZGVm aW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PDE2KSArICgoYikgPDwgOCkgKyhjKSkK KysjZW5kaWYKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2RpZ2VzdC5oIG9wZW5zc2gt MTAuNXAxL2RpZ2VzdC5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9kaWdlc3QuaAkyMDI2LTA4 LTExIDA0OjIyOjE3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2RpZ2VzdC5o CTIwMjYtMDktMjEgMDc6MDY6NTkuODg3NzQ1NjkzICswMjAwCitAQCAtMjcsNyArMjcsOCBAQAor ICNkZWZpbmUgU1NIX0RJR0VTVF9TSEEyNTYJMgorICNkZWZpbmUgU1NIX0RJR0VTVF9TSEEzODQJ MworICNkZWZpbmUgU1NIX0RJR0VTVF9TSEE1MTIJNAorLSNkZWZpbmUgU1NIX0RJR0VTVF9NQVgJ CTUKKysjZGVmaW5lIFNTSF9ESUdFU1RfTlVMTAkJNQorKyNkZWZpbmUgU1NIX0RJR0VTVF9NQVgJ CTYKKyAKKyBzdHJ1Y3Qgc3NoYnVmOworIHN0cnVjdCBzc2hfZGlnZXN0X2N0eDsKK2RpZmYgLU51 ciBvcGVuc3NoLTEwLjVwMS5vcmlnL2RpZ2VzdC1vcGVuc3NsLmMgb3BlbnNzaC0xMC41cDEvZGln ZXN0LW9wZW5zc2wuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvZGlnZXN0LW9wZW5zc2wuYwky MDI2LTA4LTExIDA0OjIyOjE3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL2Rp Z2VzdC1vcGVuc3NsLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44ODc5MzcwNDIgKzAyMDAKK0BAIC02 MSw2ICs2MSw3IEBACisgCXsgU1NIX0RJR0VTVF9TSEEyNTYsCSJTSEEyNTYiLAkzMiwJRVZQX3No YTI1NiB9LAorIAl7IFNTSF9ESUdFU1RfU0hBMzg0LAkiU0hBMzg0IiwJNDgsCUVWUF9zaGEzODQg fSwKKyAJeyBTU0hfRElHRVNUX1NIQTUxMiwJIlNIQTUxMiIsCTY0LAlFVlBfc2hhNTEyIH0sCisr CXsgU1NIX0RJR0VTVF9OVUxMLAkiTk9ORU1BQyIsCTAsCUVWUF9tZF9udWxsfSwKKyAJeyAtMSwJ CQlOVUxMLAkJMCwJTlVMTCB9LAorIH07CisgCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3Jp Zy9GVU5ESU5HLnltbCBvcGVuc3NoLTEwLjVwMS9GVU5ESU5HLnltbAorLS0tIG9wZW5zc2gtMTAu NXAxLm9yaWcvRlVORElORy55bWwJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NoLTEwLjVwMS9GVU5ESU5HLnltbAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4ODEz MjEwMCArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKyMgVGhlc2UgYXJlIHN1cHBvcnRlZCBmdW5k aW5nIG1vZGVsIHBsYXRmb3JtcworKworK2dpdGh1YjpyYXBpZXIxICMgUmVwbGFjZSB3aXRoIHVw IHRvIDQgR2l0SHViIFNwb25zb3JzLWVuYWJsZWQgdXNlcm5hbWVzIGUuZy4sIFt1c2VyMSwgdXNl cjJdCisrI3BhdHJlb246ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIFBhdHJlb24gdXNlcm5hbWUK Kysjb3Blbl9jb2xsZWN0aXZlOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPcGVuIENvbGxlY3Rp dmUgdXNlcm5hbWUKKysja29fZmk6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIEtvLWZpIHVzZXJu YW1lCisrI3RpZGVsaWZ0OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBUaWRlbGlmdCBwbGF0Zm9y bS1uYW1lL3BhY2thZ2UtbmFtZSBlLmcuLCBucG0vYmFiZWwKKysjY29tbXVuaXR5X2JyaWRnZTog IyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgQ29tbXVuaXR5IEJyaWRnZSBwcm9qZWN0LW5hbWUgZS5n LiwgY2xvdWQtZm91bmRyeQorKyNsaWJlcmFwYXk6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIExp YmVyYXBheSB1c2VybmFtZQorKyNpc3N1ZWh1bnQ6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIElz c3VlSHVudCB1c2VybmFtZQorKyNvdGVjaGllOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPdGVj aGllIHVzZXJuYW1lCisrI2N1c3RvbTogIyBSZXBsYWNlIHdpdGggdXAgdG8gNCBjdXN0b20gc3Bv bnNvcnNoaXAgVVJMcyBlLmcuLCBbJ2xpbmsxJywgJ2xpbmsyJ10KK2RpZmYgLU51ciBvcGVuc3No LTEwLjVwMS5vcmlnL2hhcHB5ZXllYmFsbHMuYyBvcGVuc3NoLTEwLjVwMS9oYXBweWV5ZWJhbGxz LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL2hhcHB5ZXllYmFsbHMuYwkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL2hhcHB5ZXllYmFsbHMu YwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4ODIzMzgyNiArMDIwMAorQEAgLTAsMCArMSwzMTMgQEAK KysvKgorKyAqIENvcHlyaWdodCAoYykgMjAyNSBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2Fy bmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCisrICoKKysgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIg PHJhcGllckBwc2MuZWR1PgorKyAqICBBdXRob3I6IEtpbSBNaWhuIEthcGxhbiAoa2FwbGFuIGF0 IGtpbS1taWhuLmNvbSkKKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICogdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorKyAq IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNI QU5UQUJJTElUWSBvcgorKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp YnJhcnk7CisrICogaWYgbm90LCBzZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01J VC4KKysgKgorKyAqLworKy8qIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUkZDIDgzMDUg YmFzZWQgb24gYSBwYXRjaAorKyAqIHN1cHBsaWVkIGJ5IEtpbSBNaW5oIEthcGxhbiAoa2FwbGFu IGF0IGtpbS1taW5oLmNvbSkuCisrICogSW5mb3JtYXRpb24gYWJvdXQgUkZDIDgzMDUgY2FuIGJl IGZvdW5kIGF0CisrICogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzgzMDUKKysg KiBUaGlzIHZlcnNpb24gKmRvZXMgbm90KiBwcm92aWRlIHN1cHBvcnQgZm9yCisrICogU2VjdGlv biAzIHdoZXJlIGFzeWNocm9ub3VzIHBvbGxpbmcgb2YgRE5TIHNlcnZlcnMKKysgKiBpcyBhIFNI T1VMRC4KKysgKiBTZWN0aW9uIDQgcmVxdWlyZXMgc29ydGluZyBvZiBETlMgcmVzdWx0cyBhcyBw ZXIKKysgKiBSRkMgNjcyNC4gVGhpcyBpcyBwcm92aWRlZCBieSB0aGUgZ2V0YWRkcmluZm8gY2Fs bAorKyAqIGZyb20gZ2NjLiBUaGlzIG1heSBub3QgYmUgYXZhaWxhYmxlIHZpYSBtdXNsLgorKyAq IEludGVybGVhdmluZyBvZiBhZGRyZXNzZXMgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisr ICogU2VjdGlvbiA1IGlzIGltcGxlbWVudGVkLgorKyAqIFNlY3Rpb24gNiBpcyBub3QgaW1wbGVt ZW50ZWQgb3V0c2lkZSBvZiBnZXRhZGRyaW5mbworKyAqIFNlY3Rpb24gNyBpbiB1bmRlciBjb25z aWRlcmF0aW9uCisrICovCisrCisrCisrLyogTk9URTogVGhlcmUgYXJlIGEgbG90IG9mIGRlYnVn IHN0YXRlbWVudHMgaW4gaGVyZQorKyAqIGJlY2F1c2Ugd2UgYXJlIHN0aWxsIHRyZWF0aW5nIHRo aXMgYXMgc29tZXdoYXQKKysgKiBleHBlcmltZW50YWwuIEEgZnV0dXJlIHZlcnNpb24gd2lsbCBw cm9tb3RlIHRoaXMKKysgKiB0byBzdGFibGUgYW5kIHdlJ2xsIHJlbW92ZSBhIGxvdCBvZiB0aGUg bGV2ZWwgMgorKyAqIGRlYnVnIHN0YXRlbWVudHMgdGhlbi4KKysgKi8KKysKKysjaW5jbHVkZSAi aW5jbHVkZXMuaCIKKysjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisrIyBpbmNsdWRlIDxzeXMvdGlt ZS5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8bmV0L2lmLmg+ CisrI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysKKysjaW5jbHVkZSAiaGFw cHlleWViYWxscy5oIgorKyNpbmNsdWRlICJzc2hjb25uZWN0LmgiCisrI2luY2x1ZGUgInNzaC5o IgorKyNpbmNsdWRlICJtaXNjLmgiCisrI2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRlICJyZWFk Y29uZi5oIgorKworKy8qIHRoaXMgaXMgZnJvbSBzc2hjb25uZWN0LmMgKi8KKytleHRlcm4gaW50 IHNzaF9jcmVhdGVfc29ja2V0KHN0cnVjdCBhZGRyaW5mbyAqYWkpOworKworKy8qIGdldCB0aGUg b3B0aW9ucyBzdHJ1Y3QgaWYgZm9yIHRoZSBkZWxheSB0aW1lICovCisrZXh0ZXJuIE9wdGlvbnMg b3B0aW9uczsKKysKKysvKiBoYXZlIHdlIHRpbWVkIG91dD8gKi8KKytzdGF0aWMgaW50CisrdGlt ZW91dChzdHJ1Y3QgdGltZXZhbCAqdHYsIGludCB0aW1lb3V0X21zKQorKyB7CisrCWlmICh0aW1l b3V0X21zIDw9IDApCisrCQlyZXR1cm4gMDsKKysJbXNfc3VidHJhY3RfZGlmZih0diwgJnRpbWVv dXRfbXMpOworKwlyZXR1cm4gdGltZW91dF9tcyA8PSAwOworK30KKysKKysvKiB1c2VkIHRvIHBy b3ZpZGUgZGVidWcgbWVzc2FnZSBpbiBzc2hjb25uZWN0ICovCisrY2hhciBnbG9iYWxfbnRvcFtO SV9NQVhIT1NUXTsKKysKKysvKiB1c2VkIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gZm9yIGRlYnVn IHN0YXRlbWVudHMgKi8KKytjaGFyICpyZXR1cm5fZmFtKGludCBmYW0pIHsKKysJaWYgKGZhbSA9 PSAxMCkKKysJCXJldHVybiAiSVB2NiI7CisrCWVsc2UKKysJCXJldHVybiAiSVB2NCI7CisrfQor KworKy8qCisrICogUmV0dXJuIDAgaWYgdGhlIGFkZHJpbmZvIHdhcyBub3QgdHJpZWQuIFJldHVy biAtMSBpZiB1c2luZyBpdAorKyAqIGZhaWxlZC4gUmV0dXJuIDEgaWYgaXQgd2FzIHVzZWQuCisr ICovCisrc3RhdGljIGludAorK2hhcHB5X2V5ZWJhbGxzX2luaXRpYXRlKGNvbnN0IGNoYXIgKmhv c3QsIHN0cnVjdCBhZGRyaW5mbyAqYWksCisrCQkJCSAgICBpbnQgKnRpbWVvdXRfbXMsCisrCQkJ CSAgICBzdHJ1Y3QgdGltZXZhbCAqaW5pdGlhdGUsCisrCQkJCSAgICBpbnQgKm5mZHMsIGZkX3Nl dCAqZmRzLAorKwkJCQkgICAgc3RydWN0IGFkZHJpbmZvICpmZF9haVtdKQorK3sKKysJaW50IG9l cnJubywgc29jazsKKysJY2hhciBudG9wW05JX01BWEhPU1RdLCBzdHJwb3J0W05JX01BWFNFUlZd OworKworKwlkZWJ1ZzJfZiAoIkhhcHB5IGV5ZWJhbGxzIGluaXRpYXRpbmciKTsKKysJbWVtc2V0 KG50b3AsIDAsIHNpemVvZihudG9wKSk7CisrCW1lbXNldChzdHJwb3J0LCAwLCBzaXplb2Yoc3Ry cG9ydCkpOworKwkvKiBJZiAqbmZkcyAhPSAwIHRoZW4gKmluaXRpYXRlIGlzIGluaXRpYWxpc2Vk LiAqLworKwlpZiAoKm5mZHMgJiYKKysJICAgIChhaSA9PSBOVUxMIHx8CisrCSAgICAgIXRpbWVv dXQoaW5pdGlhdGUsIG9wdGlvbnMuaGFwcHlfZGVsYXkpKSkgeworKwkJLyogRG8gbm90IGluaXRp YXRlIG5ldyBjb25uZWN0aW9ucyB5ZXQgKi8KKysJCWRlYnVnMl9mICgiV2FpdGluZyB0byBpbml0 aWF0ZSBuZXcgY29ubmVjdGlvbiIpOworKwkJcmV0dXJuIDA7CisrCX0KKysJLyogdHJ5aW5nIHRv IHVzZSBhIGZhbWlseSB3ZSBkb24ndCBzdXBwb3J0ICovCisrCWlmIChhaS0+YWlfZmFtaWx5ICE9 IEFGX0lORVQgJiYgYWktPmFpX2ZhbWlseSAhPSBBRl9JTkVUNikgeworKwkJZGVidWcyX2YgKCJB ZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIik7CisrCQllcnJubyA9IEVBRk5PU1VQUE9SVDsK KysJCXJldHVybiAtMTsKKysJfQorKworKwlkZWJ1ZzJfZiAoIlJ1bm5pbmcgZ2V0bmFtZWluZm8g Zm9yICVzIGFuZCAlZCIsIGhvc3QsIGFpLT5haV9mYW1pbHkpOworKwlpZiAoZ2V0bmFtZWluZm8o YWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLAorKwkJCW50b3AsIHNpemVvZihudG9wKSwKKysJ CQlzdHJwb3J0LCBzaXplb2Yoc3RycG9ydCksCisrCQkJTklfTlVNRVJJQ0hPU1R8TklfTlVNRVJJ Q1NFUlYpICE9IDApIHsKKysJCW9lcnJubyA9IGVycm5vOworKwkJZXJyb3IoIiVzOiBnZXRuYW1l aW5mbyBmYWlsZWQiLCBfX2Z1bmNfXyk7CisrCQllcnJubyA9IG9lcnJubzsKKysJCXJldHVybiAt MTsKKysJfQorKwltZW1jcHkoZ2xvYmFsX250b3AsbnRvcCxzaXplb2YobnRvcCkpOworKwlkZWJ1 ZzJfZigiUkZDIDgzMDUgY29ubmVjdGluZyB0byAlLjIwMHMgWyUuMTAwc10gcG9ydCAlcy4iLAor KwkgICAgICBob3N0LCBudG9wLCBzdHJwb3J0KTsKKysJZGVidWcyX2YoIlJGQyA4MzA1OiAlLjIw MHMiLCBnbG9iYWxfbnRvcCk7CisrCS8qIENyZWF0ZSBhIHNvY2tldCBmb3IgY29ubmVjdGluZyAq LworKwlzb2NrID0gc3NoX2NyZWF0ZV9zb2NrZXQoYWkpOworKwlpZiAoc29jayA8IDApIHsKKysJ CS8qIEFueSBlcnJvciBpcyBhbHJlYWR5IG91dHB1dCAqLworKwkJZXJybm8gPSAwOworKwkJcmV0 dXJuIC0xOworKwl9CisrCWlmIChzb2NrID49IEZEX1NFVFNJWkUpIHsKKysJCWVycm9yKCJzb2Nr ZXQgbnVtYmVyIHRvIGJpZyBmb3Igc2VsZWN0OiAlZCIsIHNvY2spOworKwkJY2xvc2Uoc29jayk7 CisrCQlyZXR1cm4gLTE7CisrCX0KKysJZmRfYWlbc29ja10gPSBhaTsKKysJLyogdXNpbmcgbm9u YmxvY2tpbmcgc29ja2V0cyB3aXRoIHNlbGVjdCBhbGxvd3MKKysJICogdXMgdG8gZmlyZSBvZmYg bmV3IHNvY2tldHMgd2l0aG91dCB3YWl0aW5nIGZvciBhCisrCSAqIGNvbm5lY3Rpb24gdG8gYmUg ZXN0YWJsaXNoZWQuIFRoaXMgbGV0cyB1cyBhdm9pZAorKwkgKiB0aGUgdXNlIG9mIHRocmVhZHMu IHNldF9ub25ibG9jayBpcyBpbiBtaXNjLmMKKysJICogYW5kIHVzZXMgZm5jdGwgKi8KKysJc2V0 X25vbmJsb2NrKHNvY2spOworKwlkZWJ1ZzJfZigiUkZDIDgzMDUgcHJlLWNvbm5lY3QgZm9yICVz IiwgcmV0dXJuX2ZhbShhaS0+YWlfZmFtaWx5KSk7CisrCWlmIChjb25uZWN0KHNvY2ssIGFpLT5h aV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwICYmCisrCSAgICBlcnJubyAhPSBFSU5QUk9HUkVT UykgeworKwkJZXJyb3IoImNvbm5lY3QgdG8gYWRkcmVzcyAlcyBwb3J0ICVzOiAlcyIsCisrCQkg ICAgICBudG9wLCBzdHJwb3J0LCBzdHJlcnJvcihlcnJubykpOworKwkJZXJybm8gPSAwOworKwkJ Y2xvc2Uoc29jayk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysJZGVidWdfZigiUkZDIDgzMDUgcG9z dCBjb25uZWN0IGZvciAlcyIsIHJldHVybl9mYW0oYWktPmFpX2ZhbWlseSkpOworKwltb25vdGlt ZV90dihpbml0aWF0ZSk7CisrCUZEX1NFVChzb2NrLCBmZHMpOworKwkqbmZkcyA9IE1BWElNVU0o Km5mZHMsIHNvY2sgKyAxKTsKKysJcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytoYXBw eV9leWViYWxsc19wcm9jZXNzKGludCAqbmZkcywgZmRfc2V0ICpmZHMsCisrCQkJCSAgIHN0cnVj dCBhZGRyaW5mbyAqZmRfYWlbXSwKKysJCQkJICAgaW50IHJlYWR5LCBmZF9zZXQgKndmZHMpCisr eworKwlzb2NrbGVuX3Qgb3B0bGVuOworKwlpbnQgc29jaywgb3B0dmFsID0gMDsKKysJY2hhciBu dG9wW05JX01BWEhPU1RdLCBzdHJwb3J0W05JX01BWFNFUlZdOworKworKwlkZWJ1ZzJfZigiUHJv Y2Vzc2luZyBSRkMgODMwNSBjb25uZWN0aW9ucyIpOworKwlmb3IgKHNvY2sgPSAqbmZkcyAtIDE7 IHJlYWR5ID4gMCAmJiBzb2NrID49IDA7IHNvY2stLSkgeworKwkJZGVidWcyX2YoIlJGQyA4MzA1 OiBQcm9jZXNzaW5nIGZvciAlczogJWQiLCByZXR1cm5fZmFtKGZkX2FpW3NvY2tdLT5haV9mYW1p bHkpLCBzb2NrKTsKKysJCWlmIChGRF9JU1NFVChzb2NrLCB3ZmRzKSkgeworKwkJCWRlYnVnMl9m KCJSRkMgODMwNTogRkRfSVNTRVQgdHJ1ZSBmb3IgJWQiLCBzb2NrKTsKKysJCQlyZWFkeS0tOwor KwkJCW9wdGxlbiA9IHNpemVvZihvcHR2YWwpOworKwkJCWRlYnVnX2YoIlJGQyA4MzA1OiBvcHR2 YWwgaXMgJWQgZm9yICVkIiwgb3B0dmFsLCBzb2NrKTsKKysJCQlpZiAoZ2V0c29ja29wdChzb2Nr LCBTT0xfU09DS0VULCBTT19FUlJPUiwKKysJCQkJICAgICAgICZvcHR2YWwsICZvcHRsZW4pIDwg MCkgeworKwkJCQlvcHR2YWwgPSBlcnJubzsKKysJCQkJZXJyb3IoImdldHNvY2tvcHQgZmFpbGVk OiAlcyIsCisrCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisrCQkJfSBlbHNlIGlmIChvcHR2 YWwgIT0gMCkgeworKwkJCQlkZWJ1Z19mKCJSRkMgODMwNTogQ29weWluZyBkYXRhIGZvciAlZCBv biAlcyIsIG9wdHZhbCwgcmV0dXJuX2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSk7CisrCQkJ CW1lbXNldChudG9wLCAwLCBzaXplb2YobnRvcCkpOworKwkJCQltZW1zZXQoc3RycG9ydCwgMCwg c2l6ZW9mKHN0cnBvcnQpKTsKKysJCQkJaWYgKGdldG5hbWVpbmZvKGZkX2FpW3NvY2tdLT5haV9h ZGRyLAorKwkJCQkJCWZkX2FpW3NvY2tdLT5haV9hZGRybGVuLAorKwkJCQkJCW50b3AsIHNpemVv ZihudG9wKSwKKysJCQkJCQlzdHJwb3J0LCBzaXplb2Yoc3RycG9ydCksCisrCQkJCQkJTklfTlVN RVJJQ0hPU1R8TklfTlVNRVJJQ1NFUlYpICE9IDApCisrCQkJCQllcnJvcigiY29ubmVjdCBmaW5h bGx5IGZhaWxlZDogJXMiLAorKwkJCQkJICAgICAgc3RyZXJyb3Iob3B0dmFsKSk7CisrCQkJCWVs c2UKKysJCQkJCWVycm9yKCJjb25uZWN0IHRvIGFkZHJlc3MgJXMgcG9ydCAlcyBmaW5hbGx5OiAl cyIsCisrCQkJCQkgICAgICBudG9wLCBzdHJwb3J0LCBzdHJlcnJvcihvcHR2YWwpKTsKKysJCQl9 CisrCQkJRkRfQ0xSKHNvY2ssIGZkcyk7CisrCQkJd2hpbGUgKCpuZmRzID4gMCAmJiAhIEZEX0lT U0VUKCpuZmRzIC0gMSwgZmRzKSkKKysJCQkJLS0qbmZkczsKKysJCQlpZiAob3B0dmFsID09IDAp IHsKKysJCQkJZGVidWdfZigiUkZDIDgzMDU6IHVuc2V0dGluZyBub25ibG9jayBmb3IgJXMgb24g JWQiLAorKwkJCQkgICAgcmV0dXJuX2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSwgc29jayk7 CisrCQkJCXVuc2V0X25vbmJsb2NrKHNvY2spOworKwkJCQlyZXR1cm4gc29jazsKKysJCQl9Cisr CQkJY2xvc2Uoc29jayk7CisrCQkJZXJybm8gPSBvcHR2YWw7CisrCQl9CisrCX0KKysJcmV0dXJu IC0xOworK30KKysKKytpbnQKKytoYXBweV9leWViYWxscyhjb25zdCBjaGFyICogaG9zdCwgc3Ry dWN0IGFkZHJpbmZvICphaSwKKysJCQkgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFk ZHIsIGludCAqdGltZW91dF9tcykKKyt7CisrCXN0cnVjdCBhZGRyaW5mbyAqZmRfYWlbRkRfU0VU U0laRV07IC8qIDEwMjQgKi8KKysJc3RydWN0IHRpbWV2YWwgaW5pdGlhdGVfdHYsIHN0YXJ0X3R2 LCBzZWxlY3RfdHYsICp0djsKKysJZmRfc2V0IGZkcywgd2ZkczsKKysJaW50IHJlcywgb2Vycm5v LCBkaWZmLCBkaWZmMCwgbmZkcyA9IDAsIHNvY2sgPSAtMTsKKysKKysJZGVidWdfZigiU3RhcnRp bmcgUkZDIDgzMDUvSGFwcHkgRXllYmFsbHMgY29ubmVjdGlvbiIpOworKworKwlGRF9aRVJPKCZm ZHMpOworKwlpZiAoKnRpbWVvdXRfbXMgPiAwKSAvKiBkZWZhdWx0IHZhbHVlIG9mIG5vIHRpbWVv dXQgLSB1c2UgVENQIGRlZmF1bHQgaW5zdGVhZCAqLworKwkJbW9ub3RpbWVfdHYoJnN0YXJ0X3R2 KTsgLyogbW9ub3RpbWVfdHYgaXMgaW4gbWlzYy5jICovCisrCisrCS8qIHJ1biB0aHJvdWdoIHBv dGVudGlhbHMgdW5sZXNzIHdlIGhhdmUgdGltZWQgb3V0ICovCisrCS8qIHRpbWVvdXRfbXMgYmVp bmcgdGhlIHVzZXIgZGVmaW5lZCBjb25uZWN0aW9uIHRpbWVvdXQgaWYKKysJICogdGhleSBhcmVu J3QgdXNpbmcgdGhlIHRjcCB0aW1lb3V0ICovCisrCXdoaWxlICgoYWkgIT0gTlVMTCB8fCBuZmRz ID4gMCkgJiYKKysJICAgICAgICEgdGltZW91dCgmc3RhcnRfdHYsICp0aW1lb3V0X21zKSkgewor KwkJLyogc2V0IHVwIHRoZSBzb2NrZXRzICovCisrCQlyZXMgPSBoYXBweV9leWViYWxsc19pbml0 aWF0ZShob3N0LCBhaSwKKysJCSAgICAgdGltZW91dF9tcywgJmluaXRpYXRlX3R2LCAmbmZkcywg JmZkcywgZmRfYWkpOworKwkJaWYgKHJlcyAhPSAwKQorKwkJCWFpID0gYWktPmFpX25leHQ7Cisr CQlpZiAocmVzID09IC0xKQorKwkJCWNvbnRpbnVlOworKwkJdHYgPSBOVUxMOworKworKwkJLyog dGhpcyBpcyBqdXN0IHRvIGRldGVybWluZSB0aGUgcGF1c2UgYmV0d2VlbgorKwkJICogY2FsbHMg dG8gc2VsZWN0LiAqLworKyAgCQlpZiAoYWkgIT0gTlVMTCB8fCAqdGltZW91dF9tcyA+IDApIHsK KysJCQlkZWJ1ZzJfZiAoIlJGQyA4MzA1OiBJbiBwYXVzZS4uLiIpOworKwkJCXR2ID0gJnNlbGVj dF90djsKKysJCQlpZiAoYWkgIT0gTlVMTCkgeworKwkJCQlkaWZmID0gb3B0aW9ucy5oYXBweV9k ZWxheTsKKysJCQkJbXNfc3VidHJhY3RfZGlmZigmaW5pdGlhdGVfdHYsICZkaWZmKTsKKysJCQkJ aWYgKCp0aW1lb3V0X21zID4gMCkgeworKwkJCQkJZGlmZjAgPSAqdGltZW91dF9tczsKKysJCQkJ CW1zX3N1YnRyYWN0X2RpZmYoJnN0YXJ0X3R2LCAmZGlmZjApOworKwkJCQkJZGlmZiA9IE1JTklN VU0oZGlmZiwgZGlmZjApOworKwkJCQl9CisrCQkJfSBlbHNlIHsKKysJCQkJZGlmZiA9ICp0aW1l b3V0X21zOworKwkJCQltc19zdWJ0cmFjdF9kaWZmKCZzdGFydF90diwgJmRpZmYpOworKwkJCX0K KysJCQl0di0+dHZfc2VjID0gZGlmZiAvIDEwMDA7CisrCQkJdHYtPnR2X3VzZWMgPSAoZGlmZiAl IDEwMDApICogMTAwMDsKKysJCX0KKysKKysJCS8qIGNyZWF0ZSBhIHdyaXRlYWJsZSBzZXQgb2Yg ZmlsZSBkZXNjcmlwdG9ycyAqLworKwkJd2ZkcyA9IGZkczsKKysJCS8qIHNlbGVjdCB3aWxsIHBh dXNlIGZvciB0aW1lIHR2IGRldGVybWluZWQgYnkgdGhlIGFib3ZlCisrCQkgKiB0aW1pbmcgY2Fj dWxhdGlvbnMgKi8KKysJCWRlYnVnMl9mKCJSRkMgODMwNTogU3RhcnRpbmcgc2VsZWN0Iik7Cisr CQlyZXMgPSBzZWxlY3QobmZkcywgTlVMTCwgJndmZHMsIE5VTEwsIHR2KTsKKysJCWRlYnVnMl9m KCJSRkMgODMwNTogTGVhdmluZyBzZWxlY3QiKTsKKysKKysJCS8qIHByZXNlcnZlIGFueSBlcnJv cnMgKi8KKysJCW9lcnJubyA9IGVycm5vOworKwkJaWYgKHJlcyA8IDApIHsKKysJCQllcnJvcigi c2VsZWN0IGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworKwkJCWVycm5vID0gb2Vycm5v OworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJLyogc3RhcnQgcHJvY2Vzc2luZyB0aGUgc29ja2V0 cyAqLworKwkJZGVidWcyX2YgKCJSRkMgODMwNTogUHJvY2Vzc2luZyBoYXBweSBleWViYWxscyBm ZHMiKTsKKysJCXNvY2sgPSBoYXBweV9leWViYWxsc19wcm9jZXNzKCZuZmRzLCAmZmRzLCBmZF9h aSwKKysJCQkJCQkJICByZXMsICZ3ZmRzKTsKKysJCWlmIChzb2NrID49IDApIHsKKysJCQlkZWJ1 Z19mICgiUkZDIDgzMDUgLyBIYXBweSBFeWViYWxscyBjb25uZWN0ZWQiKTsKKysJCQkvKiB3ZSBo YXZlIGEgY29ubmVjdGlvbiAqLworKwkJCW1lbWNweShob3N0YWRkciwgZmRfYWlbc29ja10tPmFp X2FkZHIsCisrCQkJICAgICAgIGZkX2FpW3NvY2tdLT5haV9hZGRybGVuKTsKKysJCQlicmVhazsK KysJCX0KKysJCWRlYnVnX2YoIlJGQyA4MzA1OiBSZXN0YXJ0aW5nIHdoaWxlIGxvb3AuIik7Cisr CX0KKysJb2Vycm5vID0gZXJybm87CisrCS8qIGNsb3NlIG90aGVyIGNvbm5lY3Rpb24gYXR0ZW1w dHMvc29ja2V0cyAqLworKwlkZWJ1ZzJfZigiUkZDIDgzMDU6IE5GRFMgaXMgJWQiLCBuZmRzKTsK KysJd2hpbGUgKG5mZHMtLSA+IDApIHsKKysJCWRlYnVnMl9mKCJSRkMgODMwNTogUnVubmluZyBG RF9JU1NFVCBvbiAlZCIsIG5mZHMpOworKwkJaWYgKEZEX0lTU0VUKG5mZHMsICZmZHMpKQorKwkJ CWNsb3NlKG5mZHMpOworKwl9CisrCS8qIHdlIHRpbWVkIG91dCB3aXRoIG5vIHZhbGlkIGNvbm5l Y3Rpb25zICovCisrCWlmICh0aW1lb3V0KCZzdGFydF90diwgKnRpbWVvdXRfbXMpKQorKwkJZXJy bm8gPSBFVElNRURPVVQ7CisrCWVsc2UKKysJCWVycm5vID0gb2Vycm5vOworKwlyZXR1cm4gc29j azsKKyt9CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9oYXBweWV5ZWJhbGxzLmggb3Bl bnNzaC0xMC41cDEvaGFwcHlleWViYWxscy5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9oYXBw eWV5ZWJhbGxzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NoLTEwLjVwMS9oYXBweWV5ZWJhbGxzLmgJMjAyNi0wOS0yMSAwNzowNjo1OS44ODgzMDczNzAg KzAyMDAKK0BAIC0wLDAgKzEsMjMgQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykgMjAyNSBUaGUg Qm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCisrICoKKysg KiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqCisrICogVGhpcyBs aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgorKyAqCisr ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQg TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNlZSBodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAqCisrICovCisrLyoKKysgKiBSRkMgODMw NSBIYXBweSBFeWViYWxscyBWZXJzaW9uIDI6IEJldHRlciBDb25uZWN0aXZpdHkgVXNpbmcgQ29u Y3VycmVuY3kKKysgKgorKyAqLworKworK2ludCBoYXBweV9leWViYWxscyhjb25zdCBjaGFyICos IHN0cnVjdCBhZGRyaW5mbyAqLAorKwkJICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKiwgaW50 ICopOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvSFBOLVJFQURNRSBvcGVuc3NoLTEw LjVwMS9IUE4tUkVBRE1FCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9IUE4tUkVBRE1FCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvSFBOLVJF QURNRQkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4ODQwNzk5MyArMDIwMAorQEAgLTAsMCArMSwyMDAg QEAKKytOb3RlczogCisrCisrRklQUyBNb2RlIGFuZCBQYXJhbGxlbCBDaXBoZXJzIGluIDE4Ljcu MQorK1VzaW5nIEhQTi1TU0ggaW4gb3BlcmF0aW5nIHN5c3RlbXMgd29ya2luZyBpbiBGSVBTIG1v ZGUgKGUuZy4gUkhFTCB3aXRoCisrRklQUyBlbmFibGVkKSBwcmVjbHVkZSB0aGUgdXNlIG9mIHBh cmFsbGVsIGNpcGhlcnMuIFRoaXMgaXMgYmVjYXVzZQorK3RoZSBwYXJhbGxlbCBBRVMtQ1RSIGlt cGxlbWVudGF0aW9uIGlzIG5vdCBGSVBTIGNlcnRpZmllZCBhbmQgd2lsbCBjYXVzZSBGSVBTCisr dG8gZXhpdCB3aXRoIGFuIGVycm9yIHdoZW4gbG9hZGVkLiBJbiB0aGUgY2FzZSBvZiB0aGUgcGFy YWxsZWwgQ2hhQ2hhMjAgY2lwaGVyCisrdGhlIGFsZ29yaXRobSBpdHNlbGYgaGFzIG5vdCBiZWVu IEZJUFMgY2VydGlmaWVkIGFuZCBubyBpbXBsZW1lbnRhdGlvbiBvZgorK0NoYUNoYTIwIHNob3Vs ZCBiZSBhbGxvd2VkIGluIEZJUFMgbW9kZS4gV2Ugc3VnZ2VzdCB0aGUgdXNlIG9mIHRoZSBBRVMt R0NNCisrY2lwaGVyIHdoZW4gb3BlcmF0aW5nIHVuZGVyIEZJUFMgbW9kZSBmb3Igb3B0aW1hbCBw ZXJmb3JtYW5jZS4gCisrCisrSGFwcHkgRXllYmFsbHMgU3VwcG9ydCBpbiAxOC43LjEgCisrSGFw cHkgRXllYmFsbHMgKFJGQyA4MzA1KSBpcyBmb3IgdXNlIG9uIGR1YWwgc3RhY2sgc3lzdGVtcyBt ZWFuaW5nIHRoYXQgdGhleSBoYXZlIGJvdGggCisrSVB2NCBhbmQgSVB2NiBUQ1Agc3RhY2tzLiBX aGVuIGVuYWJsZWQgdGhpcyBvcHRpb24gd2lsbCB0cnkgdG8gY29ubmVjdCB0byB0aGUKKyt0YXJn ZXQgb3ZlciBib3RoIElQdjQgYW5kIElQdjYgd2l0aCBwcmVmZXJlbmNlIGdpdmVuIHRvIElQdjYu IFRoZSBmaXJzdCBjb25uZWN0aW9uIAorK3RoYXQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSB3aWxs IGJlIHVzZWQuIEFueSBvdXRzdGFuZGluZyBjb25uZWN0aW9uIGF0dGVtcHRzIHdpbGwKKytiZSBj bG9zZWQuIEFzIG9mIHZlcnNpb24gMTguNy4xIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBjb25zaWRl cmVkIHNvbWV3aGF0IGV4cGVyaW1lbnRhbC4KKysKKyt1c2FnZToKKystb0hhcHB5RXllcz1bWWVz fE5vXSB3aWxsIGVuYWJsZSBIYXBweSBFeWViYWxscy4gVGhlIGRlZmF1bHQgaXMgbm8uIAorKy1v SGFwcHlEZWxheT1bTl0gd2hlcmUgTiBpcyBhIHBvc2l0aXZlIGludGVnZXIgZXhwcmVzc2VkIGlu IG1pbGxpc2Vjb25kcy4KKysgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDI1 MG1zIGlzIHN1Z2dlc3RlZCBieSBSRkMgODMwNS4KKysKKytNUFRDUCBTdXBwb3J0IGluIDE4Ljcu MDoKKytNdWx0aXBhdGggVENQIGlzIG5vdyBhdmFpbGFibGUgYXMgYSBydW50aW1lIG9wdGlvbiBm b3IgSFBOLVNTSC4gTVBUQ1AKKytpcyBhdmFpbGFibGUgb25seSBvbiBMaW51eCBhbmQgTWFjIE9T WCBvcGVyYXRpbmcgc3lzdGVtcy4gVXNpbmcgTVBUQ1Agb24gYSBzeXN0ZW0gdGhhdAorK2RvZXNu J3Qgc3VwcG9ydCBpdCB3aWxsIHJlc3VsdCBpbiBhIG5vdGljZSBhbmQgZmFpbHVyZS4gVGhlIHVz ZSBjYXNlcyBmb3IgTVBUQ1AgaW5jbHVkZQorK3NlYW1sZXNzIGhhbmRvdmVycyB3aGVuIGNoYW5n aW5nIG5ldHdvcmtzIGFuZCBhZ2dyZWdhdGluZyBtdWx0aXBsZSBpbnRlcmZhY2VzIHRvIGltcHJv dmUKKythdmFpbGFibGUgYmFuZHdpZHRoLiBBcyBvZiAxOC43LjAgdGhpcyBvcHRpb24gc2hvdWxk IGJlIGNvbnNpZGVyZWQgc29tZXdoYXQgZXhwZXJpbWVudGFsLgorKworK1VzYWdlOgorKy1vVXNl TVBUQ1A9W1llc3xOb10gd2lsbCBlbmFibGUgTVBUQ1AuIFRoZSBkZWZhdWx0IGlzIG5vLgorKwor K0xpYnJlU1NMIFN1cHBvcnQ6CisrQ2hhbmdlcyBpbiBMaWJyZVNTTCB2ZXJzaW9uIDMuNSBhbmQg My42IHByZXZlbnQgdGhlIHVzZSBvZiB0aGUgdGhyZWFkZWQgQUVTIENUUiBjaXBoZXIuCisrSW4g dGhvc2UgY2FzZXMgSFBOU1NIIHdpbGwgZmFsbGJhY2sgdG8gdGhlIHNlcmlhbCB2ZXJzaW9uIG9m IHRoZSBBRVMgQ1RSIGNpcGhlci4gQSB3YXJuaW5nCisraXMgcHJpbnRlZCB0byBzdGRlcnIuCisr CisrQXV0b21hdGljIFBvcnQgRmFsbGJhY2sgKGluIHZlcnNpb24gMTd2MykKKytUaGUgaHBuc3No IGNsaWVudCBub3cgdXNlcyBUQ1AgcG9ydCAyMjIyIHRvIGNvbm5lY3QgYXV0b21hdGljYWxseSBh cyB0aGlzIGlzIHRoZQorK2RlZmF1bHQgaHBuc3NoZCBwb3J0LiBIb3dldmVyLCB3ZSB1bmRlcnN0 YW5kIHRoYXQgbWFueSB1c2VycyB3aWxsIGJlIGVuZCB1cCBjb25uZWN0aW5nCisrc3RhbmRhcmQg U1NIIHNlcnZlcnMgb24gcG9ydCAyMi4gVG8gbWFrZSB0aGUgZWFzaWVyIGZvciB1c2VycyB0aGUg Y2xpZW50IHdpbGwgZmFsbCBiYWNrIHRvCisrcG9ydCAyMiBpbiB0aGUgZXZlbnQgdGhhdCB0aGVy ZSBpcyBubyBocG5zc2ggc2VydmVyIHJ1bm5pbmcgb24gcG9ydCAyMjIyLiBUaGUgYmVoYXZpb3Vy IGNhbgorK2JlIG1vZGlmZWQgYXMgZm9sbG93czoKKystb0ZhbGxiYWNrPVt5ZXN8bm9dIHdpbGwg ZW5hYmxlIG9yIGRpc2FibGUgcG9ydCBmYWxsYmFjay4gRGVmYXVsdCBpcyB5ZXMuCisrLW9GYWxs YmFja1BvcnQ9W05dIHdoZXJlIE4gaXMgdGhlIHBvcnQgbnVtYmVyIHRoYXQgc2hvdWxkIGJlIHVz ZWQgZm9yIGZhbGwgYmFjay4KKysgICAgRGVmYXVsdCBpcyAyMi4KKysKKytUQ1BfSU5GTyBNZXRy aWNzCisrVGhpcyBmZWF0dXJlcyBhbGxvd3MgdGhlIGNsaWVudCB0byByZXF1ZXN0IHRjcCBuZXR3 b3JraW5nIGluZm9ybWF0aW9uIGZyb20gdGhlCisrVENQX0lORk8gc3RydWN0LiBUaGlzIGluY2x1 ZGVzIGRhdGEgb24gcmV0cmFuc21pdHMsIHJvdW5kIHRyaXAgdGltZSwgbG9zdCBwYWNrZXRzLAor K2RhdGEgdHJhbnNmZXJyZWQsIGFuZCB0aGUgbGlrZS4gVGhlIG1ldHJpY3MgYXJlIHBvbGxlZCBw ZXJpb2RpY2FsbHkgdGhyb3VnaCB0aGUKKytsaWZlIG9mIHRoZSBjb25uZWN0aW9uLiBCeSBkZWZh dWx0IHRoaXMgaXMgZXZlcnkgNSBzZWNvbmRzIGJ1dCB1c2VycyBjYW4gcGljayBkaWZmZXJlbnQK Kytwb2xsaW5nIHBlcmlvZHMuIFRoZSByZXN1bHRpbmcgZGF0YSBpcyBzdG9yZWQgaW4gdHdvIGRp c3RpbmN0IGZpbGVzOyBvbmUgZm9yIGxvY2FsCisrbWV0cmljcyBhbmQgb25lIGZvciByZW1vdGUg bWV0cmljcy4gUmVtb3RlIG1ldHJpY3MgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSByZW1vdGUK KytzdXBwb3J0cyB0aGlzIGZlYXR1cmUuIFRoaXMgZmVhdHVyZSB3aWxsICpub3QqIGRpYWdub3Nl IGEgcG9vcmx5IHBlcmZvcm1pbmcgY29ubmVjdGlvbgorK2J1dCBtYXkgcHJvdmlkZSBpbnNpZ2h0 IGludG8gd2hhdCBpcyBoYXBwZW5pbmcgZHVyaW5nIHRoZSBjb25uZWN0aW9uLgorKworK1VzYWdl OgorKy1vTWV0cmljcz1beWVzfG5vXSB3aWxsIGVuYWJsZSBtZXRyaWNzIHBvbGxpbmcuIERlZmF1 bHQ6IE5vLgorKy1vTWV0cmljc0ludGVydmFsPVtOXSB3aGVyZSBOIGlzIHRoZSBwb2xsaW5nIHBl cmlvZCBpbiBzZWNvbmRzLiBEZWZhdWx0OiA1IHNlY29uZHMuCisrLW9NZXRyaWNzUGF0aD1bL2Zp bGVwYXRoL2ZpbGVuYW1lXSBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB0aGUgcmVtb3Rl IGFuZAorKyAgICBsb2NhbCBkYXRhIHdpbGwgYmUgc3RvcmVkLiBEZWZhdWx0OiAuL3NzaF9zdGFj a19tZXRyaWNzLltsb2NhbHxyZW1vdGVdLgorKyAgICBBbnkgb3RoZXIgb3B0aW9uIGNob3NlbiBi eSB0aGUgdXNlciB3aWxsIGhhdmUgYSAubG9jYWwgb3IgLnJlbW90ZSBzdWZmaXggYXBwZW5kZWQg dG8gaXQuCisrCisrVGhlIG51bWJlciBvZiBpbnN0cnVtZW50cyBwb2xsZWQgYnkgdGhpcyBmZWF0 dXJlcyBpcyBkZXBlbmRlbnQgb24gdGhlIGtlcm5lbCBvZiB0aGUgaG9zdC4KKytUaGlzIG1lYW5z IHRoYXQgYSByZW1vdGUgaG9zdCB3aXRoIGFuIG9sZGVyIGtlcm5lbCBtYXkgcmVwb3J0IGZld2Vy IGluc3RydW1lbnRzIHRoYW4gYSBjbGllbnQKKytob3N0IHJ1bm5pbmcgYSBjdXJyZW50IGtlcm5l bCBvciB2aWNlIHZlcnNhLiBJZiB0aGVyZSBpcyBhIGRpc2NyZXBlbmN5IGluIHRoZSBudW1iZXIg b2YgaW5zdHJ1bWVudHMKKytpbiB0aGUgc3NoX3N0YWNrX21ldHJpY3MubG9jYWwgYW5kIC5yZW1v dGUgZmlsZSB0aGlzIGlzIHRoZSBtb3N0IGxpa2VseSByZWFzb24uCisrCisrQWRkaXRpb25hbGx5 LCBkZXRlcm1pbmluZyB3aGljaCBmaWxlIHJlcHJlc2VudHMgc2VuZGVyIHNpZGUgdmVyc3VzIHJl Y2VpdmVyIHNpZGUgaXMgZGVwZW5kZW50Cisrb24gdGhlIG5hdHVyZSBvZiB0aGUgY29ubmVjdGlv bi4gVGhlcmZvcmUsIGl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gbWFrZSB0aGF0IGRldGVybWluYXRp b24uCisrCisrTGludXggTm90ZTogQ3VycmVudGx5IHRoaXMgaXMgb25seSBzdXBwb3J0ZWQgb24g TGludXgga2VybmVsIHZlcnNpb25zIDMuNyBhbmQgZ3JlYXRlci4gTmV3ZXIga2VybmVscworK21h eSBoYXZlIG1vcmUgaW5zdHJ1bWVudHMgYXZhaWxhYmxlIHRvIHBvbGwgdGhhbiBvbGRlciBrZXJu ZWxzLgorKworK0ZyZWVCU0QgTm90ZTogVGhpcyBpcyBzdXBwb3J0ZWQgb24gUmVsZWFzZSA2IGFu ZCBoaWdoZXIuIEhvd2V2ZXIsIEZyZWVCU0QgaGFzIGZld2VyIGF2YWlsYWJsZQorK2luc3RydW1l bnRzIHRoYW4gbmV3IExpbnV4IGtlcm5lbHMuCisrCisrTXVsdGlwbGV4aW5nIE5vdGU6IFRoZSBt ZXRyaWNzIGFyZSByZXBvcnRlZCBmcm9tIHRoZSBUQ1Agc29ja2V0IHdoaWNoIG1lYW5zIHRoYXQg Z2F0aGVyaW5nCisrbWV0cmljcyBmcm9tIG11bHRpcGxleGVkIHNlc3Npb25zIHdpbGwgcmVwb3J0 IG9uIHRoZSBhY3Rpdml0eSBvZiBhbGwgc2Vzc2lvbnMgb24gdGhhdCBzb2NrZXQuCisrVGhpcyB3 aWxsIGxpa2VseSByZXN1bHQgaW4gbGVzcyBjbGVhciByZXN1bHRzIGFuZCwgYXMgc3VjaCwgd2Ug c3VnZ2VzdCBvbmx5IGdhdGhlcmluZyBtZXRyaWNzCisrZnJvbSBub24tbXVsdGlwbGV4ZWQgc2Vz c2lvbi4KKysKKytIUE5TQ1Agd2l0aCBSZXN1bWUgZnVuY3Rpb25hbGl0eQorK1RoaXMgZmVhdHVy ZSBhbGxvd3MgaHBuc2NwIHRvIHJlc3VtZSBmYWlsZWQgdHJhbnNmZXJzLiBJbiB0aGUgZXZlbnQg b2YgYSBmYWlsZWQgdHJhbnNmZXIKKytpc3N1ZXMgdGhlIHNhbWUgc2NwIGNvbW1hbmQgd2l0aCB0 aGUgJy1SJyBvcHRpb24uIEZvciBleGFtcGxlIC0gaWYgeW91IGlzc3VlZDoKKysnaHBuc2NwIG15 aHVnZWZpbGUgbWVAaG9zdDp+JworK2FuZCBpdCBkaWVzIGhhbGZ3YXkgdGhyb3VnaCB0aGUgdHJh bnNmZXIgaXNzdWluZworKydocG5zY3AgLVogbXlodWdlZmlsZSBtZUBob3N0On4nCisrd2lsbCBy ZXN1bWUgdGhlIHRyYW5zZmVyIGF0IHRoZSBwb2ludCB3aGVyZSBpdCBsZWZ0IG9mZi4KKysKKytU aGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmluZyB0aGUgc291cmNlIGhvc3Qgc2VuZCBhIGhhc2gg KGJsYWtlMmI1MTIpIG9mIHRoZSBmaWxlIHRvIHRoZQorK3RhcmdldCBob3N0LiBUaGUgdGFyZ2V0 IGhvc3QgdGhlbiBjb21wdXRlcyBpdCdzIG93biBoYXNoIG9mIHRoZSB0YXJnZXQgZmlsZS4gSWYg dGhlIGhhc2hlcyBtYXRjaAorK3RoZW4gdGhlIGZpbGUgaXMgc2tpcHBlZCBhcyB0aGlzIGluZGlj YXRlcyBhIHN1Y2Nlc3NmdWwgdHJhbnNmZXIuIEhvd2V2ZXIsIGlmIHRoZSBoYXNoZXMgZG8gbm90 CisrbWF0Y2ggdGhlbiB0aGUgdGFyZ2V0IHNlbmRzIHRoZSBzb3VyY2UgaXRzIGhhc2ggYWxvbmcg d2l0aCB0aGUgc2l6ZSBvZiB0aGUgZmlsZS4gVGhlIHNvdXJjZSB0aGVuCisrY29tcHV0ZXMgdGhl IGhhc2ggb2YgdGhlIGZpbGUgKnVwIHRvKiB0aGUgc2l6ZSBvZiB0aGUgdGFyZ2V0IGZpbGUuIElm IHRob3NlIGhhc2hlcyBtYXRjaCB0aGVuCisrdGhlIHNvdXJjZSBvbmx5IHNlbmQgdGhlIG5lY2Vz c2FyeSBieXRlcyB0byBjb21wbGV0ZSB0aGUgdHJhbnNmZXIuIElmIHRoZSBoYXNoZXMgZG8gbm90 IG1hdGNoIHRoZW4KKyt0aGUgZW50aXJlIGZpbGUgaXMgcmVzZW50LiBJZiB0aGUgdGFyZ2V0IGZp bGUgaXMgbGFyZ2VyIHRoZW4gdGhlIHNvdXJjZSBmaWxlIHRoZW4gdGhlIGVudGlyZQorK3NvdXJj ZSBmaWxlIGlzIHNlbnQgYW5kIGFueSBleGlzdGluZyB0YXJnZXQgZmlsZSBpcyBvdmVyd3JpdHRl bi4KKysKKytNVUxUSS1USFJFQURFRCBBRVMgQ0lQSEVSOgorK1RoZSBBRVMgY2lwaGVyIGluIENU UiBtb2RlIGhhcyBiZWVuIG11bHRpdGhyZWFkZWQgKE1UUi1BRVMtQ1RSKS4gVGhpcyB3aWxsIGFs bG93IHNzaCBpbnN0YWxsYXRpb25zCisrb24gaG9zdHMgd2l0aCBtdWx0aXBsZSBjb3JlcyB0byB1 c2UgbW9yZSB0aGFuIG9uZSBwcm9jZXNzaW5nIGNvcmUgZHVyaW5nIGVuY3J5cHRpb24uCisrVGVz dHMgaGF2ZSBzaG93IHNpZ25pZmljYW50IHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgaW5jcmVhc2Vz IHdoZW4gdXNpbmcgTVRSLUFFUy1DVFIgdXAKKyt0byBhbmQgaW5jbHVkaW5nIGEgZnVsbCBnaWdh Yml0IHBlciBzZWNvbmQgb24gcXVhZCBjb3JlIHN5c3RlbXMuIEl0IHNob3VsZCBiZSBwb3NzaWJs ZSB0bworK2FjaGlldmUgZnVsbCBsaW5lIHJhdGUgb24gZHVhbCBjb3JlIHN5c3RlbXMgYnV0IE9T IGFuZCBkYXRhIG1hbmFnZW1lbnQgb3ZlcmhlYWQgbWFrZXMgdGhpcworK21vcmUgZGlmZmljdWx0 IHRvIGFjaGlldmUuIFRoZSBjaXBoZXIgc3RyZWFtIGZyb20gTVRSLUFFUy1DVFIgaXMgZW50aXJl bHkgY29tcGF0aWJsZSB3aXRoIHNpbmdsZQorK3RocmVhZCBBRVMtQ1RSIChTVC1BRVMtQ1RSKSBp bXBsZW1lbnRhdGlvbnMgYW5kIHNob3VsZCBiZSAxMDAlIGJhY2t3YXJkIGNvbXBhdGlibGUuIE9w dGltYWwKKytwZXJmb3JtYW5jZSByZXF1aXJlcyB0aGUgTVRSLUFFUy1DVFIgbW9kZSBiZSBlbmFi bGVkIG9uIGJvdGggZW5kcyBvZiB0aGUgY29ubmVjdGlvbi4KKytUaGUgTVRSLUFFUy1DVFIgcmVw bGFjZXMgU1QtQUVTLUNUUiBhbmQgaXMgdXNlZCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSB3aXRo IHRoZSBzYW1lCisrbm9tZW5jbGF0dXJlLgorK1VzYWdlIGV4YW1wbGVzOgorKwkJc3NoIC1jYWVz MTI4LWN0ciB5b3VAaG9zdC5jb20KKysJCXNjcCAtb0NpcGhlcj1hZXMyNTYtY3RyIGZpbGUgeW91 QGhvc3QuY29tOn4vZmlsZQorKworK01VTFRJLVRIUkVBREVEIENoYUNoYTIwLVBvbHkxMzA1IENJ UEhFUjoKKytUaGUgZGVmYXVsdCBjaXBoZXIgdXNlZCBieSBIUE4tU1NIIGlzIG5vdyBhIHRocmVh ZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQorK0NoYUNoYTIwLVBvbHkxMzA1IGNpcGhlci4gSW4g dGVzdHMgdGhpcyBjaXBoZXIgcmVzdWx0cyBpbiBhbiBhcHByb3hpbWF0ZWx5IDkwJSBnYWluIGlu CisrdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBpbiBjb21wYXJpc29uIHRvIHRoZSBzZXJpYWwgaW1w bGVtZW50YXRpb24gZm91bmQgaW4gT3BlblNTSC4KKytUaGlzIGNpcGhlciBpcyBmdWxseSBjb21w YXRpYmxlIHdpdGggYWxsIGtub3duIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyBvZiBDaGFDaGEy MC1Qb2x5MTMwNS4KKysKKytJbnRlcm5hbGx5IHRoaXMgY2lwaGVyIGlzIHJlZmVycmVkIHRvIGFz IGNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmcgKENDMjAtTVQpCisrc2ltaWxhciB0byBo b3cgdGhlIE9wZW5TU0ggaW1wbGVtZW50YXRpb24gaXMga25vd24gYXMgY2hhY2hhMjAtcG9seTEz MDVAb3BlbnNzaC5jb20KKysoQ0MyMC1TIChmb3Igc2VyaWFsKSkuIE5vIGNoYW5nZXMgYXJlIHJl cXVpcmVkIG9uIHRoZSBwYXJ0IG9mIHRoZSB1c2VyIHRvIG1ha2UgdXNlIG9mIENDMjAtTVQuCisr SG93ZXZlciwgaWYgdGhlIHVzZXJzIGRvZXNuJ3Qgd2FudCB0byBtYWtlIHVzZSBvZiB0aGlzIGNp cGhlciB0aGV5IGNhbiBleHBsaWNpdGx5IGxvYWQgQ0MyMC1TIHVzaW5nCisrJy1jY2hhY2gyMC1w b2x5MTMwNUBvcGVuc3NoLmNvbWAgb24gdGhlIGNvbW1hbmQgbGluZS4KKysKKytOT05FIENJUEhF UjoKKytUbyB1c2UgdGhlIE5PTkUgb3B0aW9uIHlvdSBtdXN0IGhhdmUgdGhlIE5vbmVFbmFibGVk IHN3aXRjaCBzZXQgb24gdGhlIHNlcnZlciBhbmQKKyt5b3UgKm11c3QqIGhhdmUgKmJvdGgqIE5v bmVFbmFibGVkIGFuZCBOb25lU3dpdGNoIHNldCB0byB5ZXMgb24gdGhlIGNsaWVudC4gVGhlIE5P TkUKKytmZWF0dXJlIHdvcmtzIHdpdGggQUxMIHNzaCBzdWJzeXN0ZW1zIChhcyBmYXIgYXMgd2Ug Y2FuIHRlbGwpICpBUyBMT05HIEFTKiBhIHR0eSBpcyBub3QKKytzcGF3bmVkLiBJZiBhIHVzZXIg dXNlcyB0aGUgLVQgc3dpdGNoIHRvIHByZXZlbnQgYSB0dHkgYmVpbmcgY3JlYXRlZCB0aGUgTk9O RSBjaXBoZXIgd2lsbAorK2JlIGRpc2FibGVkLgorKworK1RoZSBwZXJmb3JtYW5jZSBpbmNyZWFz ZSB3aWxsIG9ubHkgYmUgYXMgZ29vZCBhcyB0aGUgbmV0d29yayBhbmQgVENQIHN0YWNrIHR1bmlu ZworK29uIHRoZSByZWNpZXZlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uIGFsbG93cy4gQXMgYSBy dWxlIG9mIHRodW1iIGEgdXNlciB3aWxsIG5lZWQKKythdCBsZWFzdCAxME1iL3MgY29ubmVjdGlv biB3aXRoIGEgMTAwbXMgUlRUIHRvIHNlZSBhIGRvdWJsaW5nIG9mIHBlcmZvcm1hbmNlLiBUaGUK KytIUE4tU1NIIGhvbWUgcGFnZSBkZXNjcmliZXMgdGhpcyBpbiBncmVhdGVyIGRldGFpbC4KKysK KytodHRwOi8vd3d3LnBzYy5lZHUvbmV0d29ya2luZy9wcm9qZWN0cy9ocG4tc3NoCisrCisrTk9O RSBNQUM6CisrU3RhcnRpbmcgd2l0aCBIUE4gMTV2MSB1c2VycyB3aWxsIGhhdmUgdGhlIG9wdGlv biB0byBkaXNhYmxlIEhNQUMgKG1lc3NhZ2UKKythdXRoZW50aWNhdGlvbiBjaXBoZXJzKSB3aGVu IHVzaW5nIHRoZSBOT05FIGNpcGhlci4gWW91IG11c3QgZW5hYmxlIHRoZSBmb2xsb3dpbmc6Cisr Tm9uZUVuYWJsZWQsIE5vbmVTd2l0Y2gsIGFuZCBOb25lTWFjRW5hYmxlZC4gSWYgYWxsIHRocmVl IGFyZSBub3QgZW5hYmxlZCB0aGUgTm9uZSBNQUMKKyt3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGlz YWJsZWQuIEluIHRlc3RzIHRoZSB1c2Ugb2YgdGhlIE5vbmUgTUFDIGltcHJvdmVkIHRocm91cHV0 IGJ5CisrbW9yZSB0aGFuIDMwJS4KKysKKytleDogc2NwIC1vTm9uZVN3aXRjaD15ZXMgLW9Ob25l RW5hYmxlZD15ZXMgLW9Ob25lTWFjRW5hYmxlZD15ZXMgZmlsZSBob3N0On4KKysKKytIUE4gU3Bl Y2lmaWMgQ29uZmlndXJhdGlvbiBvcHRpb25zCisrCisrVGNwUmN2QnVmUG9sbD1beWVzL25vXSBj bGllbnQvc2VydmVyCisrICAgICAgRW5hYmxlIG9mIGRpc2FibGUgdGhlIHBvbGxpbmcgb2YgdGhl IHRjcCByZWNlaXZlIGJ1ZmZlciB0aHJvdWdoIHRoZSBsaWZlCisrb2YgdGhlIGNvbm5lY3Rpb24u IFlvdSB3b3VsZCB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQK Kytmb3Igc3lzdGVtcyBtYWtpbmcgdXNlIG9mIGF1dG90dW5pbmcga2VybmVscyAobGludXggMi40 LjI0KywgMi42LCBNUyBWaXN0YSkKKytkZWZhdWx0IGlzIHllcy4KKysKKytOb25lRW5hYmxlZD1b eWVzL25vXSBjbGllbnQvc2VydmVyCisrICAgICAgRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBv ZiB0aGUgTm9uZSBjaXBoZXIuIENhcmUgbXVzdCBhbHdheXMgYmUgdXNlZAorK3doZW4gZW5hYmxp bmcgdGhpcyBhcyBpdCB3aWxsIGFsbG93IHVzZXJzIHRvIHNlbmQgZGF0YSBpbiB0aGUgY2xlYXIu IEhvd2V2ZXIsCisraXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBhdXRoZW50aWNhdGlvbiBp bmZvcm1hdGlvbiByZW1haW5zIGVuY3J5cHRlZAorK2V2ZW4gaWYgdGhpcyBvcHRpb24gaXMgZW5h YmxlZC4gU2V0IHRvIG5vIGJ5IGRlZmF1bHQuCisrCisrTm9uZU1hY0VuYWJsZWQ9W3llcy9ub10g Y2xpZW50L3NlcnZlcgorKyAgICAgIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5v bmUgTUFDLiBXaGVuIHRoaXMgaXMgZW5hYmxlZCBzc2gKKyt3aWxsICpub3QqIHByb3ZpZGUgZGF0 YSBpbnRlZ3JpdHkgb2YgYW55IGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQgYmV0d2VlbiBob3N0cy4g VXNlCisrd2l0aCBjYXV0aW9uIGFzIGl0LCB1bmxpa2UganVzdCB1c2luZyBOb25lRW5hYmxlZCwg ZG9lc24ndCBwcm92aWRlIGRhdGEgaW50ZWdyaXR5IGFuZAorK3Byb3RlY3Rpb24gYWdhaW5zdCBt YW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBBcyB3aXRoIE5vbmVFbmFibGVkIGFsbCBhdXRoZW50 aWNhdGlvbgorK3JlbWFpbnMgZW5jcnlwdGVkIGFuZCBpbnRlZ3JpdHkgaXMgZW5zdXJlZC4gRGVm YXVsdCBpcyBuby4KKysKKytOb25lU3dpdGNoPVt5ZXMvbm9dIGNsaWVudAorKyAgICAgU3dpdGNo IHRoZSBlbmNyeXB0aW9uIGNpcGhlciBiZWluZyB1c2VkIHRvIHRoZSBOb25lIGNpcGhlciBhZnRl cgorK2F1dGhlbnRpY2F0aW9uIHRha2VzIHBsYWNlLiBOb25lRW5hYmxlZCBtdXN0IGJlIGVuYWJs ZWQgb24gYm90aCB0aGUgY2xpZW50CisrYW5kIHNlcnZlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9u LiBXaGVuIHRoZSBjb25uZWN0aW9uIHN3aXRjaGVzIHRvIHRoZSBOT05FCisrY2lwaGVyIGEgd2Fy bmluZyBpcyBzZW50IHRvIFNUREVSUi4gVGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsIGZhaWwg d2l0aCBhbgorK2Vycm9yIGlmIGEgY2xpZW50IHJlcXVlc3RzIGEgTm9uZVN3aXRjaCBmcm9tIHRo ZSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBleHBsaWNpdGx5CisraGF2ZSBOb25lRW5hYmxlZCBzZXQg dG8geWVzLiBOb3RlOiBUaGUgTk9ORSBjaXBoZXIgY2Fubm90IGJlIHVzZWQgaW4KKytpbnRlcmFj dGl2ZSAoc2hlbGwpIHNlc3Npb25zIGFuZCBpdCB3aWxsIGZhaWwgc2lsZW50bHkuIFNldCB0byBu byBieSBkZWZhdWx0LgorKworK0hQTkRpc2FibGVkPVt5ZXMvbm9dIGNsaWVudC9zZXJ2ZXIKKysg ICAgIEluIHNvbWUgc2l0dWF0aW9ucywgc3VjaCBhcyB0cmFuc2ZlcnMgb24gYSBsb2NhbCBhcmVh IG5ldHdvcmssIHRoZSBpbXBhY3QKKytvZiB0aGUgSFBOIGNvZGUgcHJvZHVjZXMgYSBuZXQgZGVj cmVhc2UgaW4gcGVyZm9ybWFuY2UuIEluIHRoZXNlIGNhc2VzIGl0IGlzCisraGVscGZ1bCB0byBk aXNhYmxlIHRoZSBIUE4gZnVuY3Rpb25hbGl0eS4gQnkgZGVmYXVsdCBIUE5EaXNhYmxlZCBpcyBz ZXQgdG8gbm8uCisrCisrQ3JlZGl0czogVGhpcyBwYXRjaCB3YXMgY29uY2VpdmVkLCBkZXNpZ25l ZCwgYW5kIGxlZCBieSBDaHJpcyBSYXBpZXIgKHJhcGllckBwc2MuZWR1KQorKyAgICAgICAgIFRo ZSBtYWpvcml0eSBvZiB0aGUgYWN0dWFsIGNvZGluZyBmb3IgdmVyc2lvbnMgdXAgdG8gSFBOMTJ2 MSB3YXMgcGVyZm9ybWVkCisrICAgICAgICAgYnkgTWljaGFlbCBTdGV2ZW5zIChtc3RldmVuc0Bh bmRyZXcuY211LmVkdSkuIFRoZSBNVC1BRVMtQ1RSIGNpcGhlciB3YXMKKysgICAgICAgICBpbXBs ZW1lbnRlZCBieSBCZW4gQmVubmV0IChiZW5AcHNjLmVkdSkgYW5kIGltcHJvdmVkIGJ5IE1pa2Ug VGFzb3RhCisrICAgICAgICAgKHRhc290YUBnbWFpbC5jb20pIGFuIE5TRiBSRVUgZ3JhbnQgcmVj aXBpZW50IGZvciAyMDEzLgorKwkgQWxsYW4gSnVkZSBwcm92aWRlZCB0aGUgY29kZSBmb3IgdGhl IE5vbmVNYWMgYW5kIGJ1ZmZlciBub3JtYWxpemF0aW9uLgorKyAgICAgICAgIFRoaXMgd29yayB3 YXMgZmluYW5jZWQsIGluIHBhcnQsIGJ5IENpc2NvIFN5c3RlbSwgSW5jLiwgdGhlIE5hdGlvbmFs CisrICAgICAgICAgTGlicmFyeSBvZiBNZWRpY2luZSwgYW5kIHRoZSBOYXRpb25hbCBTY2llbmNl IEZvdW5kYXRpb24uCisrCisrU3BvbnNvcnM6IFRoYW5rcyB0byBOaWtsYXMgSGFtYnVjaGVuIGZv ciBiZWluZyB0aGUgZmlyc3Qgc3BvbnNvciBvZiBIUE4tU1NICisrCSAgdmlhIGdpdGh1YidzIHNw b25zb3IgcHJvZ3JhbSEKKysKKysKKytFZGl0ZWQ6IFNlcHRlbWJlciAxOSwgMjAyNQorZGlmZiAt TnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvSFBOU1NISW5zdGFsbGF0aW9uLnR4dCBvcGVuc3NoLTEw LjVwMS9IUE5TU0hJbnN0YWxsYXRpb24udHh0CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9IUE5T U0hJbnN0YWxsYXRpb24udHh0CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzaC0xMC41cDEvSFBOU1NISW5zdGFsbGF0aW9uLnR4dAkyMDI2LTA5LTIxIDA3OjA2 OjU5Ljg4ODUzMDIxMyArMDIwMAorQEAgLTAsMCArMSwzNjEgQEAKKyvvu79IUE4tU1NIIEluc3Rh bGxhdGlvbgorKworK1RoZSBwcm9jZXNzIG9mIGluc3RhbGxpbmcgSFBOLVNTSCBmcm9tIHNvdXJj ZSBpcyBhIHJlbGF0aXZlbHkgcGFpbmxlc3MgcHJvY2VzcworK2J1dCBkb2VzIGhhdmUgc29tZSBu dWFuY2VzLiBUaGlzIGRvY3VtZW50IHdpbGwgZ28gdGhyb3VnaCB0aGUgcHJvY2VzcyBzdGVwIGJ5 Cisrc3RlcCB0byBoZWxwIHlvdSBnZXQgdGhlIG1vc3QgZnJvbSB5b3VyIGluc3RhbGxhdGlvbi4g SWYgeW91IGZpbmQgYW55IGVycm9ycworK3BsZWFzZSBjb250YWN0IHVzIGF0IGhwbnNzaEBwc2Mu ZWR1LgorKworKworK1N0ZXAgMTogR2V0IHRoZSBzb3VyY2UgY29kZS4KKysKKytUaGUgb2ZmaWNp YWwgcmVwb3NpdG9yeSBmb3IgSFBOLVNTSCBpcyBmb3VuZCBhdAorK2h0dHBzOi8vZ2l0aHViLmNv bS9yYXBpZXIxL2hwbi1zc2guIEdldCBhIGNvcHkgd2l0aAorKyJnaXQgY2xvbmUgaHR0cHM6Ly9n aXRodWIuY29tL3JhcGllcjEvaHBuLXNzaOKAnS4KKysKKysKKytTdGVwIDI6IEluc3RhbGwgZGVw ZW5kZW5jaWVzLgorKworK1doYXQgeW91IG5lZWQgdG8gaW5zdGFsbCBpcyBkZXBlbmRlbnQgb24g eW91ciBkaXN0cmlidXRpb24gYnV0IHdpbGwgaW5jbHVkZToKKysqIE9wZW5TU0wgZGV2ZWxvcG1l bnQgcGFja2FnZQorKyAgICogRGViaWFuOiBsaWJzc2wtZGV2CisrICAgKiBGZWRvcmE6IG9wZW5z c2wtZGV2ZWwKKysgICAqIE9wZW5TU0wgbXVzdCBiZSBidWlsdCB3aXRoIHRocmVhZCBzdXBwb3J0 LiBUaGlzIGlzIHRoZSBkZWZhdWx0LCBzbworKyAgICAgcGFja2FnZWQgdmVyc2lvbnMgd2lsbCB3 b3JrLiBJZiB5b3UgYnVpbGQgT3BlblNTTCB5b3Vyc2VsZiwgZG8gbm90CisrICAgICBwYXNzICJu by10aHJlYWRzIiB0byBpdHMgY29uZmlnIHNjcmlwdC4gSFBOLVNTSCB1c2VzIHRocmVhZHMgZm9y IHRoZQorKyAgICAgcGFyYWxsZWwgQ2hhQ2hhMjAgYW5kIEFFUy1DVFIgY2lwaGVycywgYW5kIHdp dGhvdXQgdGhyZWFkIHN1cHBvcnQgaW4KKysgICAgIE9wZW5TU0wgc2Vzc2lvbnMgY2FuIGFib3J0 IHdpdGggYSBtZW1vcnkgZXJyb3IgZHVyaW5nIHRyYW5zZmVycy4KKysgICAgIFRvIGNoZWNrIGFu IGluc3RhbGxhdGlvbiB5b3UgYWxyZWFkeSBoYXZlOgorKyAgICAgICAgZ3JlcCAtciBPUEVOU1NM X1RIUkVBRFMgPG9wZW5zc2wtcHJlZml4Pi9pbmNsdWRlL29wZW5zc2wvCisrKiBBbHRlcm5hdGl2 ZWx5IHlvdSBjYW4gdXNlIExJYnJlU1NMCisrICAgKiBIb3dldmVyLCBpbiB0aGlzIGNhc2Ugd2Ug c3VnZ2VzdCBjb21waWxpbmcgYW5kIGluc3RhbGxpbmcgbGlicmVzc2wgbWFudWFsbHkgYXMKKysg ICAgIHRoZXJlIGFyZSBmZXcgbWFpbnRhaW5lZCBsaW51eCBwYWNrYWdlcyBmb3IgTGlicmVTU0wu CisrICAgKiBBbHNvLCBMaWJyZVNTTCB2My41IGFuZCB2My42IGRvIG5vdCBzdXBwb3J0IHRoZSB0 aHJlYWRlZCBBRVMtQ1RSIGNpcGhlci4KKysgICAgIElmIHRoYXTigJlzIGltcG9ydGFudCB0byB5 b3UgdGhlbiB5b3Ugc2hvdWxkIHVzZSBPcGVuU1NMLgorKyogWiBjb21wcmVzc2lvbiBsaWJyYXJ5 CisrICAgKiBEZWJpYW46IHpsaWIxZy1kZXYKKysgICAqIEZlZG9yYTogemxpYi1kZXZlbAorKyog QXV0b2NvbmYKKysqIEF1dG9tYWtlCisrCisrCisrU3RlcCAzOiBJbnN0YWxsIG9wdGlvbmFsIGRl cGVuZGVuY2llcy4KKysKKytUaGlzIG9wdGlvbmFsIGxpYnJhcmllcyB3aWxsIGV4dGVuZCB0aGUg ZnVuY3Rpb25hbGl0eSBvZiBIUE4tU1NIIHRvIGFsbG93IHRoZSB1c2Ugb2YgUEFNCisrYXV0aGVu dGljYXRpb24sIEtlcmJlcm9zLCBncmFwaGljYWwgcGFzc3dvcmQgdG9vbHMsIGV0Yy4KKysqIFBB TQorKyogS2VyYmVyb3MKKysqIEdUSworKworKworK1N0ZXAgNDogQnVpbGQgdGhlIGNvbmZpZ3Vy ZSBmaWxlCisrCisrZ2VuZXJhdGUgLi9jb25maWd1cmUgd2l0aCDigJxhdXRvcmVjb25mIC1mIC1p 4oCdCisrCisrCisrU3RlcCA1OiBDb25maWd1cmF0aW9uCisrCisrQ29uZmlndXJlIHRoZSBpbnN0 YWxsYXRpb24uIFlvdSBjYW4gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyB0 aGlzIGJ5CisraXNzdWluZyDigJwuL2NvbmZpZ3VyZSAtLWhlbHDigJ0uIEhvd2V2ZXIsIGNvbW1v bmx5IHlvdSB3aWxsIHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbgorK2xv Y2F0aW9uIG9mIHRoZSBiaW5hcmllcy4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIOKAnC0tcHJlZml4 PS9bZGVzaXJlZF9wYXRoXeKAnS4gRm9yIGV4YW1wbGUsCisraWYgeW91IHdhbnQgdGhlIGJpbmFy aWVzIGluc3RhbGxlZCBpbnRvIC91c3IvYmluIGFzIG9wcG9zZWQgdG8gdGhlIGRlZmF1bHQgb2YK KysvdXNyL2xvY2FsL2JpbiB5b3XigJlkIHVzZSDigJwuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNy 4oCdLiBPdGhlciBjb21tb24gb3B0aW9ucyB3b3VsZCBiZSB0bworK2luY29ycG9yYXRlIHBhbSwg a2VyYmVyb3MsIGFsdGVybmF0aXZlIFNTTCBsaWJyYXJpZXMsIGFuZCBzbyBmb3J0aC4gSG93ZXZl ciwgZm9yIG1vc3QgdXNlcnMKKytlaXRoZXIgbm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9w dGlvbnMgb3IgbW9kaWZ5aW5nIHRoZSBwcmVmaXggd2lsbCBzdWZmaWNlLgorKworKworK1N0ZXAg NjogTWFrZQorKworK01ha2UgdGhlIGFwcGxpY2F0aW9uIHdpdGgg4oCcbWFrZSAtaltudW0gY29y ZXNd4oCdLiBTbyBpZiB5b3UgaGF2ZSBhbiA4IGNvcmUgc3lzdGVtCisreW914oCZZCB1c2Ug4oCc bWFrZSAtajjigJ0KKysKKysKKytTdGVwIDc6IFNldCB1cCB0aGUgaHBuc3NoZCB1c2VyLiAKKysK KytUaGlzIHVzZXIgaXMgcGFydCBvZiB0aGUgcHJpdmlsZWdlIHNlcGFyYXRpb24gcm91dGluZXMg dXNlZCBpbiB0aGUgCisrcHJlLWF1dGhlbnRpY2F0aW9uIHNhbmRib3guIEkgc3VnZ2VzdCB1c2lu ZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IAorKworK3N1ZG8gdXNlcmFkZCAtLXN5c3RlbSAtLXNo ZWxsIC91c3Ivc2Jpbi9ub2xvZ2luIC0tY29tbWVudD0iUHJpdmlsZWdlIHNlcGFyYXRlZCBIUE5T U0ggVXNlciIgXCAKKystLWhvbWU9L3J1bi9ocG5zc2hkIGhwbnNzaGQKKysKKytBbHRlcm5hdGl2 ZWx5LCB5b3UgY2FuIHVzZSB2aXB3IHRvIGFkZCB0aGUgdXNlciBtYW51YWxseS4gCisrCisrCisr U3RlcCA4OiBJbnN0YWxsYXRpb24KKysKKytBZnRlciBIUE4tU1NIIHN1Y2Nlc3NmdWxseSBidWls ZHMsIGluc3RhbGwgaXQgd2l0aCDigJxzdWRvIG1ha2UgaW5zdGFsbOKAnS4gVGhpcyB3aWxsIGlu c3RhbGwgdGhlCisrYmluYXJpZXMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBnZW5lcmF0ZSB0 aGUgdW5pcXVlIGhvc3Qga2V5cyB1c2VkLiBBdCB0aGlzIHBvaW50IHlvdSBjYW4KKyttYWtlIGNo YW5nZXMgdG8gdGhlIHNzaCBjbGllbnQgYW5kIHNlcnZlciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24u IFRoZXNlIGZpbGVzIGFyZQorK2ZvdW5kLCBnZW5lcmFsbHksIGluIC9ldGMvaHBuc3NoL3NzaF9j b25maWcgYW5kIHNzaGRfY29uZmlnIHJlc3BlY3RpdmVseS4gWW91IG1heSB3YW50IHRvCisrY2hh bmdlIHRoZSBkZWZhdWx0IHBvcnQgZnJvbSAyMjIyIHRvIHNvbWUgb3RoZXIgdmFsdWUuIFlvdSBt YXkgYWxzbyB3YW50IHRvIGVuYWJsZSB0aGUKKytOb25lQ2lwaGVyIGFuZCBOb25lTWFjIG9wdGlv bnMuIEZvciBtb3JlIGluZm9ybWF0aW9uIHVzZSDigJxtYW4gaHBuc3NoZF9jb25maWfigJ0gYW5k Cisr4oCcbWFuIGhwbnNzaF9jb25maWfigJ0uIE5vdGU6IFRoZSBocG5zc2ggY2xpZW50IGV4cGVj dHMgdGhlIHNlcnZlciB0byBiZSBvbiBwb3J0IDIyMjIgYnV0IHdpbGwKKytmYWxsYmFjayB0byAy MiBpZiBpdOKAmXMgbm90IGZvdW5kIHRoZXJlLiBTbyBpZiB5b3UgZG8gY2hhbmdlIHRoZSBkZWZh dWx0IHBvcnQgeW914oCZbGwgbmVlZCB0bworK21ha2Ugc3VyZSB0aGUgY2xpZW50cyBwb2ludCBh dCB0aGUgY29ycmVjdCBwb3J0LgorKworK1N0ZXAgOTogRmluaXNoaW5nIHVwLgorKworK0F0IHRo aXMgcG9pbnQgeW91IGNhbiBzdGFydCBocG5zc2hkIG1hbnVhbGx5IGJ5IHJ1bm5pbmcg4oCcc3Vk byAvdXNyL3NiaW4vaHBuc3NoZOKAnQorK29yIHdoYXRldmVyIHRoZSBmdWxsIHBhdGggdG8gdGhl IGhwbnNzaGQgYmluYXJ5IG1pZ2h0IGJlLiBIb3dldmVyLCB0aGlzIHdvbuKAmXQKKytyZXN0YXJ0 IGF1dG9tYXRpY2FsbHkgb24gcmVib290LiBUbyBkbyB0aGlzIHlvdeKAmWxsIG5lZWQgdG8gaW5z dGFsbCBhbiBhcHByb3ByaWF0ZQorK3N5c3RlbWQgY29uZmlndXJhdGlvbiBmaWxlLiBJZiB0aGF0 IHNlZW1zIGxpa2UgYSBnb29kIGlkZWEgdG8geW91IHRoZW4gZm9sbG93aW5nIHN0ZXBzIG1heSBi ZQorK29mIGhlbHAuIE90aGVyd2lzZSwgeW91IGFyZSBkb25lLiBFbmpveSEKKysKKysKKytTdGVw IDEwOiBJbnN0YWxsaW5nIGEgc3lzdGVtZCBzdGFydHVwIGZpbGUuCisrCisrVGhlIGNvcnJlY3Qg c3lzdGVtZCBzdGFydHVwIGZpbGUgZGVwZW5kcyBvbiB0aGUgZGlzdHJpYnV0aW9uIHlvdSBhcmUg dXNpbmcuIEZvciBzeXN0ZW0KKyt1c2luZyBzeXN0ZW1kICh5b3Ugc3RhcnQgYSBzZXJ2aWNlIHdp dGggc3lzdGVtY3RsKSBjcmVhdGUgYSBmaWxlIGF0IC9saWIvc3lzdGVtZC9zeXN0ZW0vaHBuc3No ZC5zZXJ2aWNlCisrd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzIE5COiB5b3UgbWF5IG5lZWQg dG8gdXBkYXRlIHRoZSBwYXRocyB0byBtYXRjaCB5b3VyIGluc3RhbGxhdGlvbjoKKysKKytbVW5p dF0KKytEZXNjcmlwdGlvbj1IUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyCisrRG9jdW1l bnRhdGlvbj1tYW46aHBuc3NoZCg4KSBtYW46aHBuc3NoZF9jb25maWcoNSkKKytBZnRlcj1uZXR3 b3JrLnRhcmdldCBhdWRpdGQuc2VydmljZQorK0NvbmRpdGlvblBhdGhFeGlzdHM9IS9ldGMvaHBu c3NoL3NzaGRfbm90X3RvX2JlX3J1bgorKworK1tTZXJ2aWNlXQorK0Vudmlyb25tZW50RmlsZT0t L2V0Yy9kZWZhdWx0L2hwbnNzaAorK0V4ZWNTdGFydFByZT0vdXNyL3NiaW4vaHBuc3NoZCAtdAor K0V4ZWNTdGFydD0vdXNyL3NiaW4vaHBuc3NoZCAtRCAkU1NIRF9PUFRTCisrRXhlY1JlbG9hZD0v dXNyL3NiaW4vaHBuc3NoZCAtdAorK0V4ZWNSZWxvYWQ9L2Jpbi9raWxsIC1IVVAgJE1BSU5QSUQK KytLaWxsTW9kZT1wcm9jZXNzCisrUmVzdGFydD1vbi1mYWlsdXJlCisrUmVzdGFydFByZXZlbnRF eGl0U3RhdHVzPTI1NQorK1R5cGU9bm90aWZ5CisrUnVudGltZURpcmVjdG9yeT1ocG5zc2hkCisr UnVudGltZURpcmVjdG9yeU1vZGU9MDc1NQorKworK1tJbnN0YWxsXQorK1dhbnRlZEJ5PW11bHRp LXVzZXIudGFyZ2V0CisrQWxpYXM9aHBuc3NoZC5zZXJ2aWNlCisrCisrQWx0ZXJuYXRpdmVseSwg dGhlIC4vY29uZmlndXJlIGNvbW1hbmQgd2lsbCBnZW5lcmF0ZSBhIGhwbnNzaGQuc2VydmljZSBm aWxlIGZyb20KKytocG5zc2hkLnNlcnZpY2UuaW4uIFlvdSBjYW4gdXNlIHRoaXMgZmlsZSBieSBj b3B5aW5nIGl0IHRvCisrL2xpYnN5c3RlbWQvc3lzdGVtL2hwbnNzaGQuc2VydmljZSBpbnN0ZWFk IG9mIGNvcHlpbmcgdGhlIGFib3ZlIHRleHQuCisrCisrVGhlbiBjcmVhdGUgdGhlIGRlZmF1bHRz IGZpbGUgYXQgL2V0Yy9kZWZhdWx0L2hwbnNzaGQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnQ6 CisrIyBEZWZhdWx0IHNldHRpbmdzIGZvciBvcGVuc3NoLXNlcnZlci4KKysjIE9wdGlvbnMgdG8g cGFzcyB0byBzc2hkCisrU1NIRF9PUFRTPQorKworK0VudGVyIGFueSBydW50aW1lIG9wdGlvbnMg eW91IHdhbnQgb24gdGhlIFNTSERfT1BUUyBsaW5lLiBJZiB5b3UgY2Fu4oCZdCB0aGluayBvZiBh bnksIHNpbXBseQorK2xlYXZlIGl0IGJsYW5rLiBBIHNhbXBsZSAvZXRjL2RlZmF1bHMvaHBuc3No IGZpbGUgbWF5IGJlIGZvdW5kIGluIGRlZmF1bHRzLmhwbnNzaGQuCisrCisrWW91IG11c3QgdGhl biByZWxvYWQgdGhlIHN5c3RlbWQgc2VydmljZSB0byBtYWtlIGl0IGF3YXJlIG9mIHRoaXMgbmV3 IHNlcnZpY2Ugd2l0aAorK3N1ZG8gc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKKysKKytJZiB5b3Ug YXJlIHVzaW5nIGFuIGluaXQuZCAoeW91IHN0YXJ0IGEgc2VydmljZSB3aXRoIOKAmHN5c3RlbeKA mSkgdGhlbiB5b3UgbmVlZCB0byBpbnN0YWxsIGFuCisraW5pdC5kLiBDcmVhdGUgdGhlIGZpbGUg L2V0Yy9pbml0LmQvaHBuc3NoIGFuZCBjb3B5IHRoZSBmb2xsb3dpbmcgaW50byBpdC4gTkI6IFRo ZSBmb2xsb3dpbmcgaXMKKytmb3Igd2hlcmUgaHBuc3NoZCBpcyBmb3VuZCBhdCAvdXNyL3NiaW4v aHBuc3NoZC4gSWYgaXQgaXMgbm90IGluIHRoYXQgbG9jYXRpb24geW914oCZbGwgbmVlZCB0bwor K3VwZGF0ZSB0aGUgcGF0aHMuCisrCisrQWx0ZXJuYXRpdmVseSwgeW91IG1heSB1c2UgdGhlIGhw bnNzaGQuaW5pdCBmaWxlIGNyZWF0ZWQgZHVyaW5nIGNvbmZpZ3VyZS4gVGhpcyB3aWxsIGJlCisr cHJlcG9wdWxhdGVkIHdpdGggdGhlIGNvcnJlY3QgcGF0aHMgYnkgdGhlIGNvbmZpZ3VyZSBzY3Jp cHQuCisrCisrIyEgL2Jpbi9zaAorKworKyMjIyBCRUdJTiBJTklUIElORk8KKysjIFByb3ZpZGVz OiAgICAgICAgICAgICAgICBocG5zc2hkCisrIyBSZXF1aXJlZC1TdGFydDogICAgICAgICRyZW1v dGVfZnMgJHN5c2xvZworKyMgUmVxdWlyZWQtU3RvcDogICAgICAgICRyZW1vdGVfZnMgJHN5c2xv ZworKyMgRGVmYXVsdC1TdGFydDogICAgICAgIDIgMyA0IDUKKysjIERlZmF1bHQtU3RvcDoKKysj IFNob3J0LURlc2NyaXB0aW9uOiAgICAgICAgT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIHdp dGggSFBOCisrIyMjIEVORCBJTklUIElORk8KKysKKytzZXQgLWUKKysKKysjIC9ldGMvaW5pdC5k L2hwbnNzaDogc3RhcnQgYW5kIHN0b3AgdGhlIE9wZW5CU0QgInNlY3VyZSBzaGVsbCh0bSkiIGRh ZW1vbgorKworK3Rlc3QgLXggL3Vzci9zYmluL2hwbnNzaGQgfHwgZXhpdCAwCisrKCAvdXNyL3Ni aW4vaHBuc3NoZCAtXD8gMj4mMSB8IGdyZXAgLXEgT3BlblNTSCApIDI+L2Rldi9udWxsIHx8IGV4 aXQgMAorKworK3VtYXNrIDAyMgorKworK2lmIHRlc3QgLWYgL2V0Yy9kZWZhdWx0L2hwbnNzaDsg dGhlbgorKyAgICAuIC9ldGMvZGVmYXVsdC9ocG5zc2gKKytmaQorKworKy4gL2xpYi9sc2IvaW5p dC1mdW5jdGlvbnMKKysKKysKKytpZiBbIC1uICIkMiIgXTsgdGhlbgorKyAgICBTU0hEX09QVFM9 IiRTU0hEX09QVFMgJDIiCisrZmkKKysKKysjIEFyZSB3ZSBydW5uaW5nIGZyb20gaW5pdD8KKyty dW5fYnlfaW5pdCgpIHsKKysgICAgKFsgIiRwcmV2aW91cyIgXSAmJiBbICIkcnVubGV2ZWwiIF0p IHx8IFsgIiRydW5sZXZlbCIgPSBTIF0KKyt9CisrCisrY2hlY2tfZm9yX25vX3N0YXJ0KCkgewor KyAgICAjIGZvcmdldCBpdCBpZiB3ZSdyZSB0cnlpbmcgdG8gc3RhcnQsIGFuZCAvZXRjL2hwbnNz aC9zc2hkX25vdF90b19iZV9ydW4gZXhpc3RzCisrICAgIGlmIFsgLWUgL2V0Yy9ocG5zc2gvc3No ZF9ub3RfdG9fYmVfcnVuIF07IHRoZW4KKysgICAgICAgIGlmIFsgIiQxIiA9IGxvZ19lbmRfbXNn IF07IHRoZW4KKysgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKKysgICAgICAgIGZp CisrICAgICAgICBpZiAhIHJ1bl9ieV9pbml0OyB0aGVuCisrICAgICAgICAgICAgbG9nX2FjdGlv bl9tc2cgIkhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIgbm90IGluIHVzZSAoL2V0Yy9o cG5zc2gvc3NoZF9ub3RfdG9fYmVfcnVuKSIgfHwgdHJ1ZQorKyAgICAgICAgZmkKKysgICAgICAg IGV4aXQgMAorKyAgICBmaQorK30KKysKKytjaGVja19kZXZfbnVsbCgpIHsKKysgICAgaWYgWyAh IC1jIC9kZXYvbnVsbCBdOyB0aGVuCisrICAgICAgICBpZiBbICIkMSIgPSBsb2dfZW5kX21zZyBd OyB0aGVuCisrICAgICAgICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0cnVlCisrICAgICAgICBmaQor KyAgICAgICAgaWYgISBydW5fYnlfaW5pdDsgdGhlbgorKyAgICAgICAgICAgIGxvZ19hY3Rpb25f bXNnICIvZGV2L251bGwgaXMgbm90IGEgY2hhcmFjdGVyIGRldmljZSEiIHx8IHRydWUKKysgICAg ICAgIGZpCisrICAgICAgICBleGl0IDEKKysgICAgZmkKKyt9CisrCisrY2hlY2tfcHJpdnNlcF9k aXIoKSB7CisrICAgICMgQ3JlYXRlIHRoZSBQcml2U2VwIGVtcHR5IGRpciBpZiBuZWNlc3NhcnkK KysgICAgaWYgWyAhIC1kIC9ydW4vaHBuc3NoZCBdOyB0aGVuCisrICAgICAgICBta2RpciAvcnVu L2hwbnNzaGQKKysgICAgICAgIGNobW9kIDA3NTUgL3J1bi9ocG5zc2hkCisrICAgIGZpCisrfQor KworK2NoZWNrX2NvbmZpZygpIHsKKysgICAgaWYgWyAhIC1lIC9ldGMvaHBuc3NoL3NzaGRfbm90 X3RvX2JlX3J1biBdOyB0aGVuCisrICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwODYK KysgICAgICAgIC91c3Ivc2Jpbi9ocG5zc2hkICRTU0hEX09QVFMgLXQgfHwgZXhpdCAxCisrICAg IGZpCisrfQorKworK2V4cG9ydCBQQVRIPSIke1BBVEg6KyRQQVRIOn0vdXNyL3NiaW46L3NiaW4i CisrCisrY2FzZSAiJDEiIGluCisrICBzdGFydCkKKysgICAgICAgIGNoZWNrX3ByaXZzZXBfZGly CisrICAgICAgICBjaGVja19mb3Jfbm9fc3RhcnQKKysgICAgICAgIGNoZWNrX2Rldl9udWxsCisr ICAgICAgICBsb2dfZGFlbW9uX21zZyAiU3RhcnRpbmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxs IHNlcnZlciIgImhwbnNzaGQiIHx8IHRydWUKKysgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxl PVNDMjA4NgorKyAgICAgICAgaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0t b2tub2RvIC0tY2h1aWQgMDowIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAvdXNy L3NiaW4vaHBuc3NoZCAtLSAkU1NIRF9PUFRTOyB0aGVuCisrICAgICAgICAgICAgbG9nX2VuZF9t c2cgMCB8fCB0cnVlCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgbG9nX2VuZF9tc2cgMSB8 fCB0cnVlCisrICAgICAgICBmaQorKyAgICAgICAgOzsKKysgIHN0b3ApCisrICAgICAgICBsb2df ZGFlbW9uX21zZyAiU3RvcHBpbmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciIgImhw bnNzaGQiIHx8IHRydWUKKysgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1 aWV0IC0tb2tub2RvIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAvdXNyL3NiaW4v aHBuc3NoZDsgdGhlbgorKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDAgfHwgdHJ1ZQorKyAgICAg ICAgZWxzZQorKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQorKyAgICAgICAgZmkK KysgICAgICAgIDs7CisrCisrCisrICByZWxvYWR8Zm9yY2UtcmVsb2FkKQorKyAgICAgICAgY2hl Y2tfZm9yX25vX3N0YXJ0CisrICAgICAgICBjaGVja19jb25maWcKKysgICAgICAgIGxvZ19kYWVt b25fbXNnICJSZWxvYWRpbmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcidzIGNvbmZp Z3VyYXRpb24iICJocG5zc2hkIiB8fCB0cnVlCisrICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1v biAtLXN0b3AgLS1zaWduYWwgMSAtLXF1aWV0IC0tb2tub2RvIC0tcGlkZmlsZSAvcnVuL2hwbnNz aGQucGlkIC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZDsgdGhlbgorKyAgICAgICAgICAgIGxvZ19l bmRfbXNnIDAgfHwgdHJ1ZQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGxvZ19lbmRfbXNn IDEgfHwgdHJ1ZQorKyAgICAgICAgZmkKKysgICAgICAgIDs7CisrCisrCisrICByZXN0YXJ0KQor KyAgICAgICAgY2hlY2tfcHJpdnNlcF9kaXIKKysgICAgICAgIGNoZWNrX2NvbmZpZworKyAgICAg ICAgbG9nX2RhZW1vbl9tc2cgIlJlc3RhcnRpbmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNl cnZlciIgImhwbnNzaGQiIHx8IHRydWUKKysgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3Rv cCAtLXF1aWV0IC0tb2tub2RvIC0tcmV0cnkgMzAgLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQg LS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkCisrICAgICAgICBjaGVja19mb3Jfbm9fc3RhcnQgbG9n X2VuZF9tc2cKKysgICAgICAgIGNoZWNrX2Rldl9udWxsIGxvZ19lbmRfbXNnCisrICAgICAgICAj IHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwODYKKysgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9u IC0tc3RhcnQgLS1xdWlldCAtLW9rbm9kbyAtLWNodWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5z c2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hwbnNzaGQgLS0gJFNTSERfT1BUUzsgdGhlbgorKyAg ICAgICAgICAgIGxvZ19lbmRfbXNnIDAgfHwgdHJ1ZQorKyAgICAgICAgZWxzZQorKyAgICAgICAg ICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQorKyAgICAgICAgZmkKKysgICAgICAgIDs7CisrCisr CisrICB0cnktcmVzdGFydCkKKysgICAgICAgIGNoZWNrX3ByaXZzZXBfZGlyCisrICAgICAgICBj aGVja19jb25maWcKKysgICAgICAgIGxvZ19kYWVtb25fbXNnICJSZXN0YXJ0aW5nIEhQTi9PcGVu QlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIiICJocG5zc2hkIiB8fCB0cnVlCisrICAgICAgICBSRVQ9 MAorKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1yZXRyeSAzMCAt LXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hwbnNzaGQgfHwgUkVU PSIkPyIKKysgICAgICAgIGNhc2UgJFJFVCBpbgorKyAgICAgICAgICAgIDApCisrICAgICAgICAg ICAgICAgICMgb2xkIGRhZW1vbiBzdG9wcGVkCisrICAgICAgICAgICAgICAgIGNoZWNrX2Zvcl9u b19zdGFydCBsb2dfZW5kX21zZworKyAgICAgICAgICAgICAgICBjaGVja19kZXZfbnVsbCBsb2df ZW5kX21zZworKyAgICAgICAgICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwODYKKysg ICAgICAgICAgICAgICAgaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tb2tu b2RvIC0tY2h1aWQgMDowIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAvdXNyL3Ni aW4vaHBuc3NoZCAtLSAkU1NIRF9PUFRTOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBsb2df ZW5kX21zZyAwIHx8IHRydWUKKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAg ICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0cnVlCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAg ICAgICAgICAgIDs7CisrICAgICAgICAgICAgMSkKKysgICAgICAgICAgICAgICAgIyBkYWVtb24g bm90IHJ1bm5pbmcKKysgICAgICAgICAgICAgICAgbG9nX3Byb2dyZXNzX21zZyAiKG5vdCBydW5u aW5nKSIgfHwgdHJ1ZQorKyAgICAgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKKysg ICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAjIGZh aWxlZCB0byBzdG9wCisrICAgICAgICAgICAgICAgIGxvZ19wcm9ncmVzc19tc2cgIihmYWlsZWQg dG8gc3RvcCkiIHx8IHRydWUKKysgICAgICAgICAgICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0cnVl CisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgICA7OworKworKwor KyAgc3RhdHVzKQorKyAgICAgICAgc3RhdHVzX29mX3Byb2MgLXAgL3J1bi9ocG5zc2hkLnBpZCAv dXNyL3NiaW4vaHBuc3NoZCBocG5zc2hkICYmIGV4aXQgMCB8fCBleGl0ICQ/CisrICAgICAgICA7 OworKworKworKyAgKikKKysgICAgICAgIGxvZ19hY3Rpb25fbXNnICJVc2FnZTogL2V0Yy9pbml0 LmQvaHBuc3NoIHtzdGFydHxzdG9wfHJlbG9hZHxmb3JjZS1yZWxvYWR8cmVzdGFydHx0cnktcmVz dGFydHxzdGF0dXN9IiB8fCB0cnVlCisrICAgICAgICBleGl0IDEKKytlc2FjCisrCisrZXhpdCAw CisrCisrCisrU3RlcCAxMDogV29ya2luZyB3aXRoIFNFTGludXguCisrCisrSWYgeW91IGFyZSB1 c2luZyBTRUxpbnV4IHlvdeKAmWxsIG5lZWQgdG8gcnVuIGEgZmV3IG1vcmUgY29tbWFuZHMgaW4g b3JkZXIgdG8gZ3JhbnQgaHBuc3NoIHRoZQorK25lY2Vzc2FyeSBleGNlcHRpb25zIHRvIG9wZW4g c29ja2V0cywgZmlsZXMsIHJlYWQga2V5cywgYW5kIHNvIGZvcnRoLiBSdW4gdGhlIGZvbGxvd2lu ZyBjb21tYW5kcworK3RvIGFsbG93IHRoaXMuIE5vdGUsIEnigJltIG5vdCBzdXJlIGV2ZXJ5IHNp bmdsZSBvbmUgb2YgdGhlc2UgaXMgbmVlZGVkIHNvIGlmIHNvbWVvbmUga25vd3MgYmV0dGVyCisr cGxlYXNlIGxldCBtZSBrbm93LiBBZ2FpbiwgZG91YmxlIGNoZWNrIHRoZSBwYXRocyBvZiB0aGUg ZmlsZXMgYmVpbmcgdXBkYXRlZC4KKysKKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNz aGRfa2V5X3QgIC9ldGMvaHBuc3NoL3NzaF9ob3N0X2RzYV9rZXkKKytzZW1hbmFnZSBmY29udGV4 dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgIC9ldGMvaHBuc3NoL3NzaF9ob3N0X3JzYV9rZXkKKytz ZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgIC9ldGMvaHBuc3NoL3NzaF9o b3N0X2VjZHNhX2tleQorK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoZF9rZXlfdCAg L2V0Yy9ocG5zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkKKytzZW1hbmFnZSBmY29udGV4dCAtYSAt ZiBmIC10IHNzaGRfa2V5X3QgL2V0Yy9ocG5zc2gvc3NoX2hvc3RfZHNhX2tleS5wdWIKKytzZW1h bmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgL2V0Yy9ocG5zc2gvc3NoX2hvc3Rf cnNhX2tleS5wdWIKKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgIC9l dGMvaHBuc3NoL3NzaF9ob3N0X2VjZHNhX2tleS5wdWIKKytzZW1hbmFnZSBmY29udGV4dCAtYSAt ZiBmIC10IHNzaGRfa2V5X3QgIC9ldGMvaHBuc3NoL3NzaF9ob3N0X2VkMjU1MTlfa2V5LnB1Ygor K3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoZF9leGVjX3QgL3Vzci9zYmluL2hwbnNz aGQKKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5Z2VuX2V4ZWNfdCAvdXNy L2xpYmV4ZWMvaHBuc3NoL2hwbnNzaGQta2V5Z2VuCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYg ZiAtdCBiaW5fdCAvdXNyL2xpYmV4ZWMvaHBuc3NoL2hwbnNmdHAtc2VydmVyCisrc2VtYW5hZ2Ug ZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hfZXhlY190IC91c3IvYmluL2hwbnNzaAorK3NlbWFuYWdl IGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoX2FnZW50X2V4ZWNfdCAvdXNyL2Jpbi9ocG5zc2gtYWdl bnQKKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaF9rZXlnZW5fZXhlY190IC91c3Iv YmluL2hwbnNzaC1rZXlnZW4KKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IGV0Y190IC9l dGMvcGFtLmQvaHBuc3NoZAorK3NlbWFuYWdlIHBvcnQgLWEgLXQgc3NoX3BvcnRfdCAtcCB0Y3Ag MjIyMgorK3Jlc3RvcmVjb24gL3Vzci9zYmluL2hwbnNzaGQKKytyZXN0b3JlY29uIC9ldGMvaHBu c3NoL3NzaCpfa2V5CisrcmVzdG9yZWNvbiAvZXRjL2hwbnNzaC9zc2gqX2tleVwucHViCisrcmVz dG9yZWNvbiAvdXNyL2xpYmV4ZWMvaHBuc3NoL2hwbnNzaGQta2V5Z2VuCisrcmVzdG9yZWNvbiAv dXNyL2xpYmV4ZWMvaHBuc3NoL2hwbnNmdHAtc2VydmVyCisrcmVzdG9yZWNvbiAvdXNyL2Jpbi9o cG5zc2gKKytyZXN0b3JlY29uIC91c3IvYmluL2hwbnNzaC1hZ2VudAorK3Jlc3RvcmVjb24gL3Vz ci9iaW4vaHBuc3NoLWtleWdlbgorK3Jlc3RvcmVjb24gL2V0Yy9wYW0uZC9ocG5zc2hkCitkaWZm IC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9rZXguYyBvcGVuc3NoLTEwLjVwMS9rZXguYworLS0t IG9wZW5zc2gtMTAuNXAxLm9yaWcva2V4LmMJMjAyNi0wOS0yMSAwNzowNjowNS40NTM3NTU3MzUg KzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9rZXguYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4ODc0 ODg5NyArMDIwMAorQEAgLTYzLDYgKzYzLDcgQEAKKyAKKyAjaW5jbHVkZSAic3NoZXJyLmgiCisg I2luY2x1ZGUgInNzaGJ1Zi5oIgorKyNpbmNsdWRlICJjYW5vaG9zdC5oIgorICNpbmNsdWRlICJk aWdlc3QuaCIKKyAjaW5jbHVkZSAieG1hbGxvYy5oIgorICNpbmNsdWRlICJhdWRpdC5oIgorQEAg LTU1Nyw2ICs1NTgsNyBAQAorIAlzdHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKKyAJaW50IHIs IGluaXRpYWwgPSAoa2V4LT5mbGFncyAmIEtFWF9JTklUSUFMKSAhPSAwOworIAljaGFyICpjcCwg Kipwcm9wOworKwljb25zdCBjaGFyICpyZWtleV9kZW55bGlzdDsKKyAKKyAJZGVidWcoIlNTSDJf TVNHX05FV0tFWVMgcmVjZWl2ZWQiKTsKKyAJaWYgKGtleC0+ZXh0X2luZm9fYyAmJiBpbml0aWFs KQorQEAgLTU2OCwxMyArNTcwLDI3IEBACisgCWlmICgociA9IHNzaF9zZXRfbmV3a2V5cyhzc2gs IE1PREVfSU4pKSAhPSAwKQorIAkJcmV0dXJuIHI7CisgCWlmIChpbml0aWFsKSB7CistCQkvKiBS ZW1vdmUgaW5pdGlhbCBLRVggc2lnbmFsbGluZyBmcm9tIHByb3Bvc2FsIGZvciByZWtleWluZyAq LworKwkJLyoKKysJCSAqIFJlbW92ZSBpbml0aWFsIEtFWCBzaWduYWxsaW5nIGZyb20gcHJvcG9z YWwgZm9yIHJla2V5aW5nLgorKwkJICogU2VjdXJlQmxhY2tib3ggcmUtZGVyaXZlcyBzdHJpY3Qg S0VYIGZyb20gZXZlcnkgS0VYSU5JVAorKwkJICogaW5zdGVhZCBvZiBsYXRjaGluZyBpdCBhdCB0 aGUgaW5pdGlhbCBleGNoYW5nZS4gV2l0aG91dAorKwkJICogdGhlIG1hcmtlciBpbiB0aGUgcmVr ZXkgaXQgc3RvcHMgcmVzZXR0aW5nIGl0cyBzZXF1ZW5jZQorKwkJICogbnVtYmVyIHdoaWxlIHdl IHN0aWxsIHJlc2V0IG91cnMgYW5kIHRoZSBNQUMgZGVzeW5jcywgc28KKysJCSAqIGtlZXAgYWR2 ZXJ0aXNpbmcga2V4LXN0cmljdCB0byBpdCBvbiByZWtleXMuIENvbXBsaWFudAorKwkJICogcGVl cnMgaWdub3JlIHRoZSBtYXJrZXIgYWZ0ZXIgdGhlIGluaXRpYWwgZXhjaGFuZ2UuCisrCQkgKi8K KysJCWlmIChzc2gtPmNvbXBhdCAmIFNTSF9CVUdfU1RSSUNUX0tFWF9SRUtFWSkgeworKwkJCXJl a2V5X2RlbnlsaXN0ID0ga2V4LT5zZXJ2ZXIgPworKwkJCSAgICAiZXh0LWluZm8tcyIgOiAiZXh0 LWluZm8tYyI7CisrCQl9IGVsc2UgeworKwkJCXJla2V5X2RlbnlsaXN0ID0ga2V4LT5zZXJ2ZXIg PworKwkJCSAgICAiZXh0LWluZm8tcyxrZXgtc3RyaWN0LXMtdjAwQG9wZW5zc2guY29tIiA6Cisr CQkJICAgICJleHQtaW5mby1jLGtleC1zdHJpY3QtYy12MDBAb3BlbnNzaC5jb20iOworKwkJfQor IAkJaWYgKChyID0ga2V4X2J1ZjJwcm9wKGtleC0+bXksIE5VTEwsICZwcm9wKSkgIT0gMCkKKyAJ CQlyZXR1cm4gcjsKKyAJCWlmICgoY3AgPSBtYXRjaF9maWx0ZXJfZGVueWxpc3QocHJvcFtQUk9Q T1NBTF9LRVhfQUxHU10sCistCQkgICAga2V4LT5zZXJ2ZXIgPworLQkJICAgICJleHQtaW5mby1z LGtleC1zdHJpY3Qtcy12MDBAb3BlbnNzaC5jb20iIDoKKy0JCSAgICAiZXh0LWluZm8tYyxrZXgt c3RyaWN0LWMtdjAwQG9wZW5zc2guY29tIikpID09IE5VTEwpIHsKKysJCSAgICByZWtleV9kZW55 bGlzdCkpID09IE5VTEwpIHsKKyAJCQllcnJvcl9mKCJtYXRjaF9maWx0ZXJfZGVueWxpc3QgZmFp bGVkIik7CisgCQkJZ290byBmYWlsOworIAkJfQorQEAgLTc4NCwxNyArODAwLDgzIEBACisgCWZy ZWUoa2V4KTsKKyB9CisgCisrLyoKKysgKiBUaGlzIGZ1bmN0aW9uIHNlZWtzIHRocm91Z2ggYSBj b21tYS1zZXBhcmF0ZWQgbGlzdCBhbmQgY2hlY2tzIGZvciBpbnN0YW5jZXMKKysgKiBvZiB0aGUg bXVsdGl0aHJlYWRlZCBDQzIwIGNpcGhlci4gSWYgZm91bmQsIGl0IHRoZW4gZW5zdXJlcyB0aGF0 IHRoZSBzZXJpYWwKKysgKiBDQzIwIGNpcGhlciBpcyBhbHNvIGluIHRoZSBsaXN0LCBhZGRpbmcg aXQgaWYgbmVjZXNzYXJ5LgorKyAqLworK2NoYXIgKgorK3BhdGNoX2xpc3QoY2hhciAqIG9yaWcp CisreworKwljaGFyICogYWRqID0geHN0cmR1cChvcmlnKTsKKysJY2hhciAqIG1hdGNoOworKwl1 X2ludCBuZXh0OworKworKwljb25zdCBjaGFyICogY2Nwc3RyID0gImNoYWNoYTIwLXBvbHkxMzA1 QG9wZW5zc2guY29tIjsKKysJY29uc3QgY2hhciAqIGNjcG10c3RyID0gImNoYWNoYTIwLXBvbHkx MzA1LW10QGhwbnNzaC5vcmciOworKworKwltYXRjaCA9IG1hdGNoX2xpc3QoY2NwbXRzdHIsIG9y aWcsICZuZXh0KTsKKysJaWYgKG1hdGNoICE9IE5VTEwpIHsgLyogQ0MyMC1NVCBmb3VuZCBpbiB0 aGUgbGlzdCAqLworKwkJZnJlZShtYXRjaCk7CisrCQltYXRjaCA9IG1hdGNoX2xpc3QoY2Nwc3Ry LCBvcmlnLCBOVUxMKTsKKysJCWlmIChtYXRjaCA9PSBOVUxMKSB7IC8qIENDMjAtU2VyaWFsIE5P VCBmb3VuZCBpbiB0aGUgbGlzdCAqLworKwkJCWFkaiA9IHhyZWFsbG9jYXJyYXkoYWRqLAorKwkJ CSAgICBzdHJsZW4oYWRqKSAvKiBvcmlnaW5hbCBzdHJpbmcgbGVuZ3RoICovCisrCQkJICAgICsg MSAvKiBmb3IgdGhlIG9yaWdpbmFsIG51bGwtdGVybWluYXRvciAqLworKwkJCSAgICArIHN0cmxl bihjY3BzdHIpIC8qIG1ha2Ugcm9vbSBmb3IgY2Nwc3RyICovCisrCQkJICAgICsgMSAvKiBtYWtl IHJvb20gZm9yIHRoZSBjb21tYSBkZWxpbWl0ZXIgKi8KKysJCQkgICAgLCBzaXplb2YoY2hhcikp OworKwkJCS8qCisrCQkJICogYWRqW25leHRdIHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIGFmdGVy IHRoZSBDQzIwLU1UCisrCQkJICogc3RyaW5nLiBhZGpbbmV4dF0gbWlnaHQgYmUgJywnIG9yICdc MCcgYXQgdGhpcyBwb2ludC4KKysJCQkgKi8KKysJCQlhZGpbbmV4dF0gPSAnLCc7CisrCQkJLyog YWRqICsgbmV4dCArIDEgaXMgdGhlIGNoYXJhY3RlciBhZnRlciB0aGF0IGNvbW1hICovCisrCQkJ bWVtY3B5KGFkaiArIG5leHQgKyAxLCBjY3BzdHIsIHN0cmxlbihjY3BzdHIpKTsKKysJCQkvKiBy ZXdyaXRlIHRoZSByZXN0IG9mIHRoZSBvcmlnaW5hbCBsaXN0ICovCisrCQkJbWVtY3B5KGFkaiAr IG5leHQgKyAxICsgc3RybGVuKGNjcHN0ciksIG9yaWcgKyBuZXh0LAorKwkJCSAgICBzdHJsZW4o b3JpZyArIG5leHQpICsgMSk7CisrCQl9IGVsc2UgeyAvKiBDQzIwLVNlcmlhbCBmb3VuZCBpbiB0 aGUgbGlzdCwgbm90aGluZyB0byBkbyAqLworKwkJCWZyZWUobWF0Y2gpOworKwkJfQorKwl9Cisr CisrCXJldHVybiBhZGo7CisrfQorKworIGludAorIGtleF9yZWFkeShzdHJ1Y3Qgc3NoICpzc2gs IGNoYXIgKnByb3Bvc2FsW1BST1BPU0FMX01BWF0pCisgeworLQlpbnQgcjsKKysJaW50IHIgPSAw OworKworKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJY2hhciAqIG9yaWdfY3RvcyA9IHByb3Bvc2Fs W1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdOworKwljaGFyICogb3JpZ19zdG9jID0gcHJvcG9zYWxb UFJPUE9TQUxfRU5DX0FMR1NfU1RPQ107CisrCXByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX0NU T1NdID0KKysJICAgIHBhdGNoX2xpc3QocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RPU10p OworKwlwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19TVE9DXSA9CisrCSAgICBwYXRjaF9saXN0 KHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdKTsKKysKKysJLyoKKysJICogVE9ETzog TGlrZWx5IG1lbW9yeSBsZWFrIGhlcmUuIFRoZSBvcmlnaW5hbCBjb250ZW50cyBvZgorKwkgKiBw cm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXSBhcmUgbm8gbG9uZ2VyIGFjY2Vzc2libGUg b3IKKysJICogZnJlZWFibGUuCisrCSAqLworKyNlbmRpZgorIAorIAlpZiAoKHIgPSBrZXhfcHJv cDJidWYoc3NoLT5rZXgtPm15LCBwcm9wb3NhbCkpICE9IDApCistCQlyZXR1cm4gcjsKKysJCWdv dG8gcmVzdG9yZVByb3Bvc2FsOworIAlzc2gtPmtleC0+ZmxhZ3MgPSBLRVhfSU5JVElBTDsKKyAJ a2V4X3Jlc2V0X2Rpc3BhdGNoKHNzaCk7CisgCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01T R19LRVhJTklULCAma2V4X2lucHV0X2tleGluaXQpOworLQlyZXR1cm4gMDsKKysgcmVzdG9yZVBy b3Bvc2FsOgorKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJZnJlZShwcm9wb3NhbFtQUk9QT1NBTF9F TkNfQUxHU19DVE9TXSk7CisrCWZyZWUocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfU1RPQ10p OworKwlwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXSA9IG9yaWdfY3RvczsKKysJcHJv cG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfU1RPQ10gPSBvcmlnX3N0b2M7CisrI2VuZGlmCisrCXJl dHVybiByOworIH0KKyAKKyBpbnQKK0BAIC05ODMsNiArMTA2NSwxMSBAQAorIAlpbnQgbmVuYywg bm1hYywgbmNvbXA7CisgCXVfaW50IG1vZGUsIGN0b3MsIG5lZWQsIGRoX25lZWQsIGF1dGhsZW47 CisgCWludCByLCBmaXJzdF9rZXhfZm9sbG93czsKKysJaW50IGF1dGhfZmxhZyA9IDA7CisrCWlu dCBsb2dfZmxhZyA9IDA7CisrCisrCWF1dGhfZmxhZyA9IHBhY2tldF9hdXRoZW50aWNhdGlvbl9z dGF0ZShzc2gpOworKwlkZWJ1ZygiQVVUSCBTVEFURSBJUyAlZCIsIGF1dGhfZmxhZyk7CisgCisg CWRlYnVnMigibG9jYWwgJXMgS0VYSU5JVCBwcm9wb3NhbCIsIGtleC0+c2VydmVyID8gInNlcnZl ciIgOiAiY2xpZW50Iik7CisgCWlmICgociA9IGtleF9idWYycHJvcChrZXgtPm15LCBOVUxMLCAm bXkpKSAhPSAwKQorQEAgLTEwNTksNiArMTE0NiwzMSBAQAorIAkJCXBlZXJbbmVuY10gPSBOVUxM OworIAkJCWdvdG8gb3V0OworIAkJfQorKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJCWlmICgoc3Ry Y21wKG5ld2tleXMtPmVuYy5uYW1lLCAiY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20iKQor KwkJICAgID09IDApICYmIChtYXRjaF9saXN0KCJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gu b3JnIiwKKysJCSAgICBteVtuZW5jXSwgTlVMTCkgIT0gTlVMTCkpIHsKKysJCQkvKgorKwkJCSAq IGlmIHdlJ3JlIHVzaW5nIHRoZSBzZXJpYWwgQ0MyMCBjaXBoZXIgd2hpbGUgdGhlCisrCQkJICog bXVsdGl0aHJlYWRlZCBpbXBsZW1lbnRhdGlvbiBpcyBhbiBvcHRpb24uLi4KKysJCQkgKi8KKysJ CQlmcmVlKG5ld2tleXMtPmVuYy5uYW1lKTsKKysJCQluZXdrZXlzLT5lbmMuY2lwaGVyID0gY2lw aGVyX2J5X25hbWUoCisrCQkJICAgICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIik7 CisrCQkJaWYgKG5ld2tleXMtPmVuYy5jaXBoZXIgPT0gTlVMTCkgeworKwkJCQllcnJvcl9mKCIl cyBjaXBoZXIgbm90IGZvdW5kLiIsCisrCQkJCSAgICAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBu c3NoLm9yZyIpOworKwkJCQlyID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJCQkJa2V4LT5m YWlsZWRfY2hvaWNlID0gcGVlcltuZW5jXTsKKysJCQkJcGVlcltuZW5jXSA9IE5VTEw7CisrCQkJ CWdvdG8gb3V0OworKwkJCX0gZWxzZSB7CisrCQkJCW5ld2tleXMtPmVuYy5uYW1lID0geHN0cmR1 cCgKKysJCQkJICAgICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIik7CisrCQkJfQor KwkJCS8qIHdlIHByb21vdGUgdG8gdGhlIG11bHRpdGhyZWFkZWQgaW1wbGVtZW50YXRpb24gKi8K KysJCX0KKysjZW5kaWYKKyAJCWF1dGhsZW4gPSBjaXBoZXJfYXV0aGxlbihuZXdrZXlzLT5lbmMu Y2lwaGVyKTsKKyAJCS8qIGlnbm9yZSBtYWMgZm9yIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiAq LworIAkJaWYgKGF1dGhsZW4gPT0gMCAmJgorQEAgLTEwNzQsMTEgKzExODYsNDMgQEAKKyAJCQlw ZWVyW25jb21wXSA9IE5VTEw7CisgCQkJZ290byBvdXQ7CisgCQl9CisrCQlkZWJ1ZygiUkVRVUVT VEVEIEVOQy5OQU1FIGlzICclcyciLCBuZXdrZXlzLT5lbmMubmFtZSk7CisrCQlkZWJ1ZygiUkVR VUVTVEVEIE1BQy5OQU1FIGlzICclcyciLCBuZXdrZXlzLT5tYWMubmFtZSk7CisrCQlpZiAoc3Ry Y21wKG5ld2tleXMtPmVuYy5uYW1lLCAibm9uZSIpID09IDApIHsKKysJCQlpZiAoYXV0aF9mbGFn ID09IDEpIHsKKysJCQkJZGVidWcoIk5vbmUgcmVxdWVzdGVkIHBvc3QgYXV0aGVudGljYXRpb24u Iik7CisrCQkJCXNzaC0+bm9uZSA9IDE7CisrCQkJfQorKwkJCWVsc2UKKysJCQkJZmF0YWwoIlBy ZS1hdXRoZW50aWNhdGlvbiBub25lIGNpcGhlciByZXF1ZXN0cyBhcmUgbm90IGFsbG93ZWQuIik7 CisrCisrCQkJaWYgKG5ld2tleXMtPm1hYy5uYW1lICE9IE5VTEwgJiYgc3RyY21wKG5ld2tleXMt Pm1hYy5uYW1lLCAibm9uZSIpID09IDApIHsKKysJCQkJZGVidWcoIlJlcXVlc3Rpbmc6IE5PTkVN QUMuIEF1dGhmbGFnIGlzICVkIiwgYXV0aF9mbGFnKTsKKysJCQkJc3NoLT5ub25lX21hYyA9IDE7 CisrCQkJfQorKwkJfQorKworIAkJZGVidWcoImtleDogJXMgY2lwaGVyOiAlcyBNQUM6ICVzIGNv bXByZXNzaW9uOiAlcyIsCisgCQkgICAgY3RvcyA/ICJjbGllbnQtPnNlcnZlciIgOiAic2VydmVy LT5jbGllbnQiLAorIAkJICAgIG5ld2tleXMtPmVuYy5uYW1lLAorIAkJICAgIGF1dGhsZW4gPT0g MCA/IG5ld2tleXMtPm1hYy5uYW1lIDogIjxpbXBsaWNpdD4iLAorIAkJICAgIG5ld2tleXMtPmNv bXAubmFtZSk7CisrCQkvKgorKwkJICogY2xpZW50IHN0YXJ0cyB3aXRoIGN0b3MgPSAwICYmIGxv ZyBmbGFnID0gMCBhbmQgbm8gbG9nLgorKwkJICogMm5kIGNsaWVudCBwYXNzIGN0b3MgPSAxIGFu ZCBmbGFnID0gMSBzbyBubyBsb2cuCisrCQkgKiBzZXJ2ZXIgc3RhcnRzIHdpdGggY3RvcyA9IDEg JiYgbG9nX2ZsYWcgPSAwIHNvIGxvZy4KKysJCSAqIDJuZCBzZXZlciBwYXNzIGN0b3MgPSAxICYm IGxvZyBmbGFnID0gMSBzbyBubyBsb2cuCisrCQkgKiAtY2pyCisrCQkgKi8KKysJCWlmIChjdG9z ICYmICFsb2dfZmxhZykgeworKwkJCWxvZ2l0KCJTU0g6IFNlcnZlcjtMdHlwZTogS2V4O1JlbW90 ZTogJXMtJWQ7RW5jOiAlcztNQUM6ICVzO0NvbXA6ICVzIiwKKysJCQkgICAgc3NoX3JlbW90ZV9p cGFkZHIoc3NoKSwKKysJCQkgICAgc3NoX3JlbW90ZV9wb3J0KHNzaCksCisrCQkJICAgIG5ld2tl eXMtPmVuYy5uYW1lLAorKwkJCSAgICBhdXRobGVuID09IDAgPyBuZXdrZXlzLT5tYWMubmFtZSA6 ICI8aW1wbGljaXQ+IiwKKysJCQkgICAgbmV3a2V5cy0+Y29tcC5uYW1lKTsKKysJCX0KKysJCWxv Z19mbGFnID0gMTsKKyAJfQorIAluZWVkID0gZGhfbmVlZCA9IDA7CisgCWZvciAobW9kZSA9IDA7 IG1vZGUgPCBNT0RFX01BWDsgbW9kZSsrKSB7CitAQCAtMTQzOCw3ICsxNTgyLDcgQEAKKyAJaWYg KHZlcnNpb25fYWRkZW5kdW0gIT0gTlVMTCAmJiAqdmVyc2lvbl9hZGRlbmR1bSA9PSAnXDAnKQor IAkJdmVyc2lvbl9hZGRlbmR1bSA9IE5VTEw7CisgCWlmICgociA9IHNzaGJ1Zl9wdXRmKG91cl92 ZXJzaW9uLCAiU1NILSVkLiVkLSVzJXMlc1xyXG4iLAorLQkgICAgUFJPVE9DT0xfTUFKT1JfMiwg UFJPVE9DT0xfTUlOT1JfMiwgU1NIX1ZFUlNJT04sCisrCSAgICBQUk9UT0NPTF9NQUpPUl8yLCBQ Uk9UT0NPTF9NSU5PUl8yLCBTU0hfUkVMRUFTRSwKKyAJICAgIHZlcnNpb25fYWRkZW5kdW0gPT0g TlVMTCA/ICIiIDogIiAiLAorIAkgICAgdmVyc2lvbl9hZGRlbmR1bSA9PSBOVUxMID8gIiIgOiB2 ZXJzaW9uX2FkZGVuZHVtKSkgIT0gMCkgeworIAkJb2Vycm5vID0gZXJybm87CitAQCAtMTU3NCw5 ICsxNzE4LDI0IEBACisgCQlyID0gU1NIX0VSUl9JTlZBTElEX0ZPUk1BVDsKKyAJCWdvdG8gb3V0 OworIAl9CisrCisrCS8qIHJlcG9ydCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiB0byBzeXNsb2cg aWYgdGhpcyBpcyB0aGUgc2VydmVyICovCisrICAgICAgICBpZiAodGltZW91dF9tcyA9PSAtMSkg eyAvKiBvbmx5IHRoZSBzZXJ2ZXIgdXNlcyB0aGlzIHZhbHVlICovCisrCQlsb2dpdCgiU1NIOiBT ZXJ2ZXI7THR5cGU6IFZlcnNpb247UmVtb3RlOiAlcy0lZDtQcm90b2NvbDogJWQuJWQ7Q2xpZW50 OiAlLjEwMHMiLAorKwkJICAgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9w b3J0KHNzaCksCisrCQkgICAgICByZW1vdGVfbWFqb3IsIHJlbW90ZV9taW5vciwgcmVtb3RlX3Zl cnNpb24pOworKwl9CisrCisgCWRlYnVnKCJSZW1vdGUgcHJvdG9jb2wgdmVyc2lvbiAlZC4lZCwg cmVtb3RlIHNvZnR3YXJlIHZlcnNpb24gJS4xMDBzIiwKKyAJICAgIHJlbW90ZV9tYWpvciwgcmVt b3RlX21pbm9yLCByZW1vdGVfdmVyc2lvbik7CisgCWNvbXBhdF9iYW5uZXIoc3NoLCByZW1vdGVf dmVyc2lvbik7CisrCWlmIChzc2gtPmNvbXBhdCAmIFNTSF9IUE5TU0gpCisrCQlkZWJ1ZygiSFBO IHRvIEhQTiBDb25uZWN0aW9uLiIpOworKwllbHNlCisrCQlkZWJ1ZygiTm9uLUhQTiB0byBIUE4g Q29ubmVjdGlvbi4iKTsKKysKKysJaWYoc3NoLT5jb21wYXQgJiBTU0hfUkVTVFJJQ1RfV0lORE9X KQorKwkJZGVidWcgKCJXaW5kb3cgc2l6ZSByZXN0cmljdGVkLiIpOworIAorIAltaXNtYXRjaCA9 IDA7CisgCXN3aXRjaCAocmVtb3RlX21ham9yKSB7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEu b3JpZy9sb2cuYyBvcGVuc3NoLTEwLjVwMS9sb2cuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcv bG9nLmMJMjAyNi0wOS0yMSAwNzowNjowNS4wNzI4ODY2MTggKzAyMDAKKysrKyBvcGVuc3NoLTEw LjVwMS9sb2cuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg4OTEwNjgyNSArMDIwMAorQEAgLTQ3LDYg KzQ3LDExIEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKyAj aW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgInBhY2tl dC5oIiAvKiBuZWVkZWQgZm9yIGhvc3QgYW5kIHBvcnQgbG9vayB1cHMgKi8KKysjaWZkZWYgSEFW RV9TWVNfVElNRV9ICisrIyBpbmNsdWRlIDxzeXMvdGltZS5oPiAvKiB0byBnZXQgY3VycmVudCB0 aW1lICovCisrI2VuZGlmCisgI2lmIGRlZmluZWQoSEFWRV9TVFJOVklTKSAmJiBkZWZpbmVkKEhB VkVfVklTX0gpICYmICFkZWZpbmVkKEJST0tFTl9TVFJOVklTKQorICMgaW5jbHVkZSA8dmlzLmg+ CisgI2VuZGlmCitAQCAtNjUsNiArNzAsOCBAQAorIHN0YXRpYyBzaXplX3QgbmxvZ192ZXJib3Nl OworIGV4dGVybiBjaGFyICpfX3Byb2duYW1lOworIAorK2V4dGVybiBzdHJ1Y3Qgc3NoICphY3Rp dmVfc3RhdGU7CisrCisgI2RlZmluZSBMT0dfU1lTTE9HX1ZJUwkoVklTX0NTVFlMRXxWSVNfTkx8 VklTX1RBQnxWSVNfT0NUQUwpCisgI2RlZmluZSBMT0dfU1RERVJSX1ZJUwkoVklTX1NBRkV8VklT X09DVEFMKQorIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvbWFjLmMgb3BlbnNzaC0x MC41cDEvbWFjLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL21hYy5jCTIwMjYtMDktMjEgMDc6 MDY6MDUuMjkwNjQzNTE0ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvbWFjLmMJMjAyNi0wOS0y MSAwNzowNjo1OS44ODk0NjQ1NjUgKzAyMDAKK0BAIC02Myw2ICs2Myw3IEBACisgCXsgImhtYWMt c2hhMi01MTIiLAkJCVNTSF9ESUdFU1QsIFNTSF9ESUdFU1RfU0hBNTEyLCAwLCAwLCAwLCAwIH0s CisgCXsgImhtYWMtbWQ1IiwJCQkJU1NIX0RJR0VTVCwgU1NIX0RJR0VTVF9NRDUsIDAsIDAsIDAs IDAgfSwKKyAJeyAiaG1hYy1tZDUtOTYiLAkJCVNTSF9ESUdFU1QsIFNTSF9ESUdFU1RfTUQ1LCA5 NiwgMCwgMCwgMCB9LAorKwl7ICJub25lIiwJCQkJU1NIX0RJR0VTVCwgU1NIX0RJR0VTVF9OVUxM LCAwLCAwLCAwLCAwIH0sCisgCXsgInVtYWMtNjRAb3BlbnNzaC5jb20iLAkJU1NIX1VNQUMsIDAs IDAsIDEyOCwgNjQsIDAgfSwKKyAJeyAidW1hYy0xMjhAb3BlbnNzaC5jb20iLAkJU1NIX1VNQUMx MjgsIDAsIDAsIDEyOCwgMTI4LCAwIH0sCisgCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3Jp Zy9NYWtlZmlsZS5pbiBvcGVuc3NoLTEwLjVwMS9NYWtlZmlsZS5pbgorLS0tIG9wZW5zc2gtMTAu NXAxLm9yaWcvTWFrZWZpbGUuaW4JMjAyNi0wOS0yMSAwNzowNjowNS41NjA1NzQ5ODAgKzAyMDAK KysrKyBvcGVuc3NoLTEwLjVwMS9NYWtlZmlsZS5pbgkyMDI2LTA5LTIxIDA3OjUzOjU0LjQ0NzQ1 OTY0MSArMDIwMAorQEAgLTU0LDcgKzU0LDcgQEAKKyBDRkxBR1NfTk9QSUU9QENGTEFHU19OT1BJ RUAKKyBDUFBGTEFHUz0tSS4gLUkkKHNyY2RpcikgLUkkKENPTVBBVElOQ0xVREVTKSBAQ1BQRkxB R1NAICQoUEFUSFMpIEBERUZTQAorIFBJQ0ZMQUc9QFBJQ0ZMQUdACistTElCUz1ATElCU0AKKytM SUJTPUBMSUJTQCAtbHB0aHJlYWQKKyBDSEFOTkVMTElCUz1AQ0hBTk5FTExJQlNACisgSzVMSUJT PUBLNUxJQlNACisgR1NTTElCUz1AR1NTTElCU0AKK0BAIC05Myw3ICs5Myw3IEBACisgTElCU1NI X09CSlM9JHtMSUJPUEVOU1NIX09CSlN9IFwKKyAJYXV0aGZkLm8gYXV0aGZpbGUubyBcCisgCWNh bm9ob3N0Lm8gY2hhbm5lbHMubyBjaXBoZXIubyBjaXBoZXItYWVzLm8gY2lwaGVyLWFlc2N0ci5v IFwKKy0JY2xlYW51cC5vIFwKKysJY2xlYW51cC5vIGNpcGhlci1jdHItbXQubyBcCisgCWNvbXBh dC5vIGZhdGFsLm8gaG9zdGZpbGUubyBcCisgCWxvZy5vIG1hdGNoLm8gbW9kdWxpLm8gbmNoYW4u byBwYWNrZXQubyBcCisgCXJlYWRwYXNzLm8gdHR5bW9kZXMubyB4bWFsbG9jLm8gYWRkci5vIGFk ZHJtYXRjaC5vIFwKK0BAIC0xMDMsNiArMTAzLDcgQEAKKyAJbXNnLm8gZG5zLm8gZW50cm9weS5v IGdzcy1nZW5yLm8gdW1hYy5vIHVtYWMxMjgubyBcCisgCXNtdWx0X2N1cnZlMjU1MTlfcmVmLm8g XAorIAlwb2x5MTMwNS5vIGNoYWNoYS5vIGNpcGhlci1jaGFjaGFwb2x5Lm8gY2lwaGVyLWNoYWNo YXBvbHktbGliY3J5cHRvLm8gXAorKwljaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQubyBc CisgCXNzaC1lZDI1NTE5Lm8gZGlnZXN0LW9wZW5zc2wubyBkaWdlc3QtbGliYy5vIFwKKyAJbGli Y3J1eC1tbGtlbS1tbGRzYS5vIHNzaC1tbGRzYS1lZGRzYS5vIFwKKyAJaG1hYy5vIGVkMjU1MTku byBlZDI1NTE5LW9wZW5zc2wubyBcCitAQCAtMTExLDE0ICsxMTIsMTYgQEAKKyAJa2V4c250cnVw NzYxeDI1NTE5Lm8ga2V4bWxrZW03Njh4MjU1MTkubyBzbnRydXA3NjEubyBrZXhnZW4ubyBcCisg CWtleGdzc2MubyBcCisgCXNmdHAtcmVhbHBhdGgubyBwbGF0Zm9ybS1wbGVkZ2UubyBwbGF0Zm9y bS10cmFjaW5nLm8gcGxhdGZvcm0tbWlzYy5vIFwKKy0Jc3NoYnVmLWlvLm8gbWlzYy1hZ2VudC5v IHNzaGVyci1saWJjcnlwdG8ubyBhdWRpdHN0dWIubworKwlzc2hidWYtaW8ubyBtaXNjLWFnZW50 Lm8gc3NoZXJyLWxpYmNyeXB0by5vIGF1ZGl0c3R1Yi5vIFwKKysJbWV0cmljcy5vIGJpbm4ubyBo YXBweWV5ZWJhbGxzLm8gY2lwaGVyLWN0ci1tdC1wcm92aWRlci5vIFwKKysJY2lwaGVyLWN0ci1t dC1mdW5jdGlvbnMubyBvc3NsMy1wcm92aWRlci1lcnIubyBudW0ubworIAorIFAxMU9CSlM9IHNz aC1wa2NzMTEtY2xpZW50Lm8gc3NoLXBrY3MxMS11cmkubworIAorIFNLT0JKUz0Jc3NoLXNrLWNs aWVudC5vCisgCisgU1NIT0JKUz0gc3NoLm8gcmVhZGNvbmYubyBjbGllbnRsb29wLm8gc3NodHR5 Lm8gXAorLQlzc2hjb25uZWN0Lm8gc3NoY29ubmVjdDIubyBtdXgubyBzc2gtcGtjczExLm8gc3No LXBrY3MxMS11cmkubyAkKFNLT0JKUykKKysJc3NoY29ubmVjdC5vIHNzaGNvbm5lY3QyLm8gbXV4 Lm8gY2lwaGVyLXN3aXRjaC5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpT KQorIAorIFNTSERPQkpTPXNzaGQubyBcCisgCXBsYXRmb3JtLWxpc3Rlbi5vIFwKK0BAIC0xMzcs NyArMTQwLDcgQEAKKyAJYXV0aDItZ3NzLm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gZ3Nz LXNlcnYtZ3NpLm8gXAorIAlsb2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFkb3cubyBhdXRo LXNpYS5vIFwKKyAJc2Z0cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKKy0JdWlkc3dhcC5vIHBs YXRmb3JtLWxpc3Rlbi5vICQoUDExT0JKUykgJChTS09CSlMpCisrCXVpZHN3YXAubyBwbGF0Zm9y bS1saXN0ZW4ubyBjaXBoZXItc3dpdGNoLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKKyAKKyBTU0hE X0FVVEhfT0JKUz1zc2hkLWF1dGgubyBcCisgCWF1dGgyLW1ldGhvZHMubyBcCitAQCAtMTUyLDcg KzE1NSw3IEBACisgCXNhbmRib3gtbnVsbC5vIHNhbmRib3gtcmxpbWl0Lm8gc2FuZGJveC1kYXJ3 aW4ubyBcCisgCXNhbmRib3gtc2VjY29tcC1maWx0ZXIubyBzYW5kYm94LWNhcHNpY3VtLm8gIHNh bmRib3gtc29sYXJpcy5vIFwKKyAJc2Z0cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKKy0JdWlk c3dhcC5vICQoUDExT0JKUykgJChTS09CSlMpCisrCXVpZHN3YXAubyBjaXBoZXItc3dpdGNoLm8g JChQMTFPQkpTKSAkKFNLT0JKUykKKyAKKyBTRlRQX0NMSUVOVF9PQkpTPXNmdHAtY29tbW9uLm8g c2Z0cC1jbGllbnQubyBzZnRwLWdsb2IubyBzc2hlcnItbm9saWJjcnlwdG8ubworIAorQEAgLTIz Niw3ICsyMzksNyBAQAorIAkkKExEKSAtbyAkQCAkKFNTSERfQVVUSF9PQkpTKSAkKExERkxBR1Mp IC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChTU0hETElCUykgJChMSUJTKSAkKEdTU0xJQlMpICQo SzVMSUJTKSAkKENIQU5ORUxMSUJTKSAkKExJQldUTVBEQikKKyAKKyBzY3AkKEVYRUVYVCk6ICQo TElCQ09NUEFUKSBsaWJzc2guYSAkKFNDUF9PQkpTKQorLQkkKExEKSAtbyAkQCAkKFNDUF9PQkpT KSAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKQorKwkkKExEKSAtbyAk QCAkKFNDUF9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKSAk KENIQU5ORUxMSUJTKQorIAorIHNzaC1hZGQkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2gu YSAkKFNTSEFERF9PQkpTKQorIAkkKExEKSAtbyAkQCAkKFNTSEFERF9PQkpTKSAkKExERkxBR1Mp IC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKSAkKENIQU5ORUxMSUJTKQorZGlmZiAtTnVy IG9wZW5zc2gtMTAuNXAxLm9yaWcvbWV0cmljcy5jIG9wZW5zc2gtMTAuNXAxL21ldHJpY3MuYwor LS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbWV0cmljcy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvbWV0cmljcy5jCTIwMjYtMDktMjEgMDc6 MDY6NTkuODg5ODY5MjQzICswMjAwCitAQCAtMCwwICsxLDQzOSBAQAorKy8qCisrICogQ29weXJp Z2h0IChjKSAyMDIyIFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5p dmVyc2l0eS4KKysgKgorKyAqICBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+ CisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlU IExpY2Vuc2UuCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKysgKiBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK KysgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OworKyAqIGlm IG5vdCwgc2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCisrICoKKysgKi8K KysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysjaW5jbHVkZSAibWV0cmljcy5oIgorKyNpbmNs dWRlICJzc2hlcnIuaCIKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrCisrLyoga2VybmVsIHZlcnNpb24gbWFjcm8gbW92ZWQgdG8gZGVmaW5lcy5oICovCisrCisr LyogYWRkIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0Y3BfaW5mbyBzdHJ1Y3QgdG8gdGhlCisr ICogc2VyaWFsaXplZCBiaW5hcnkgb2JqZWN0CisrICovCisrdm9pZAorK21ldHJpY3Nfd3JpdGVf Ymlubl9vYmplY3Qoc3RydWN0IHRjcF9pbmZvICpkYXRhLCBzdHJ1Y3QgYmlubl9zdHJ1Y3QgKmJp bm5vYmopIHsKKysjaWYgIWRlZmluZWQgVENQX0lORk8KKysJLyp0Y3AgaW5mbyBpc24ndCBzdXBw b3J0ZWQgb24gdGhpcyBzeXN0ZW0gKi8KKysJcmV0dXJuOworKyNlbHNlCisrCisrLyogdGhlIGJh c2Ugc2V0IG9mIHRjcGlfIG1lYXN1cmVtZW50cyBzdGFydGluZyBmcm9tIGtlcm5lbCAzLjcuMAor KyAqIHRoZXNlIG1lYXN1cmVtZW50cyBleGlzdGVkIGluIHByZXZpb3VzIGtlcm5lbHMgYnV0IHRo ZSBvbGRlc3QgdGhpcworKyAqIGlzIGdvaW5nIHRvIHN1cHBvcnQgaXMgMy43LjAuIFdlIGRvIG5l ZWQgdG8gc3RvcmUgdGhlIGtlcm5lbCB2ZXJzaW9uIGFzIHdlbGwgKi8KKysKKysvKiBvYnZpb3Vs c3kgdGhlIHZlcnNpb24gY29kZSBtYWNybyBvbmx5IGV4aXN0cyB1bmRlciBsaW51eCBzbworKyAq IG9uIG5vbiBsaW51eCBzeXN0ZW1zIHdlIHNldCB0aGUga2VybmVsIHZlcnNpb24gdG8gMAorKyAq IHdoaWNoIHdpbGwgZ2V0IHVzIHRoZSBiYXNlIHNldCBvZiBtZXRyaWNzIGZyb20gbmV0aW5ldC90 Y3AuaAorKyAqLworKyNpZiAoZGVmaW5lZCBfX2xpbnV4X18pICYmICFkZWZpbmVkKF9fYWxwaW5l X18pCisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgImtlcm5lbF92ZXJzaW9uIiwg TElOVVhfVkVSU0lPTl9DT0RFKTsKKysjZWxzZQorKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJp bm5vYmosICJrZXJuZWxfdmVyc2lvbiIsIDApOworKyNlbmRpZgorKworKwkvKiB0aGUgZm9sbG93 aW5nIGFyZSBjb21tb24gdW5kZXIgYm90aCBsaW51eCBhbmQgQlNEICovCisrCWJpbm5fb2JqZWN0 X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9zbmRfd3NjYWxlIiwKKysJCQkgICAgICBkYXRhLT50 Y3BpX3NuZF93c2NhbGUpOworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlf cmN2X3dzY2FsZSIsCisrCQkJICAgICAgZGF0YS0+dGNwaV9yY3Zfd3NjYWxlKTsKKysJYmlubl9v YmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3N0YXRlIiwKKysJCQkgICAgICBkYXRhLT50 Y3BpX3N0YXRlKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX29wdGlv bnMiLAorKwkJCSAgICAgIGRhdGEtPnRjcGlfb3B0aW9ucyk7CisrCWJpbm5fb2JqZWN0X3NldF91 aW50MzIoYmlubm9iaiwgInRjcGlfc25kX3NzdGhyZXNoIiwKKysJCQkgICAgICAgZGF0YS0+dGNw aV9zbmRfc3N0aHJlc2gpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X3J0dCIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfcnR0KTsKKysJYmlubl9vYmplY3Rfc2V0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2RhdGFfcmVjdiIsCisrCQkJICAgICAgIGRhdGEtPnRj cGlfbGFzdF9kYXRhX3JlY3YpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0 Y3BpX3J0dHZhciIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfcnR0dmFyKTsKKysJYmlubl9vYmpl Y3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfY3duZCIsCisrCQkJICAgICAgIGRhdGEt PnRjcGlfc25kX2N3bmQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X3Jjdl9tc3MiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9tc3MpOworKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0byIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlf cnRvKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfbXNzIiwK KysJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRfbXNzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9yY3Zfc3BhY2UiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9z cGFjZSk7CisrCisrLyogdGhlIGZvbGxvd2luZyBleGlzdCB1bmRlciBib3RoIGJ1dCB3aXRoIGRp ZmZlcmVudCBuYW1lcyAqLworKyNpZmRlZiBfX2xpbnV4X18KKysJYmlubl9vYmplY3Rfc2V0X3Vp bnQ4KGJpbm5vYmosICJ0Y3BpX2NhX3N0YXRlIiwKKysJCQkgICAgICBkYXRhLT50Y3BpX2NhX3N0 YXRlKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Byb2JlcyIsCisr CQkJICAgICAgZGF0YS0+dGNwaV9wcm9iZXMpOworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlu bm9iaiwgInRjcGlfYmFja29mZiIsCisrCQkJICAgICAgZGF0YS0+dGNwaV9iYWNrb2ZmKTsKKysJ Ymlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3JldHJhbnNtaXRzIiwKKysJCQkg ICAgICBkYXRhLT50Y3BpX3JldHJhbnNtaXRzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihi aW5ub2JqLCAidGNwaV9yY3Zfc3N0aHJlc2giLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9z c3RocmVzaCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Fja2Vk IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9zYWNrZWQpOworKwliaW5uX29iamVjdF9zZXRfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX3BtdHUiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3BtdHUpOwor KwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2ZhY2tldHMiLAorKwkJCSAg ICAgICBkYXRhLT50Y3BpX2ZhY2tldHMpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5v YmosICJ0Y3BpX2xvc3QiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2xvc3QpOworKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3NlbnQiLAorKwkJCSAgICAg ICBkYXRhLT50Y3BpX2xhc3RfYWNrX3NlbnQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJp bm5vYmosICJ0Y3BpX3VuYWNrZWQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3VuYWNrZWQpOwor KwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfZGF0YV9zZW50IiwK KysJCQkgICAgICAgZGF0YS0+dGNwaV9sYXN0X2RhdGFfc2VudCk7CisrCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfcmVjdiIsCisrCQkJICAgICAgIGRhdGEt PnRjcGlfbGFzdF9hY2tfcmVjdik7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwg InRjcGlfcmVvcmRlcmluZyIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfcmVvcmRlcmluZyk7Cisr CWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfYWR2bXNzIiwKKysJCQkgICAg ICAgZGF0YS0+dGNwaV9hZHZtc3MpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmos ICJ0Y3BpX3JldHJhbnMiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3JldHJhbnMpOworKwliaW5u X29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2F0byIsCisrCQkJICAgICAgIGRhdGEt PnRjcGlfYXRvKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3Zf cnR0IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9yY3ZfcnR0KTsKKysjZWxzZQorKwliaW5uX29i amVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfYmFja29mZiIsCisrCQkJICAgICAgZGF0YS0+ X190Y3BpX2JhY2tvZmYpOworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlf Y2Ffc3RhdGUiLAorKwkJCSAgICAgIGRhdGEtPl9fdGNwaV9jYV9zdGF0ZSk7CisrCWJpbm5fb2Jq ZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9wcm9iZXMiLAorKwkJCSAgICAgIGRhdGEtPl9f dGNwaV9wcm9iZXMpOworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfcmV0 cmFuc21pdHMiLAorKwkJCSAgICAgIGRhdGEtPl9fdGNwaV9yZXRyYW5zbWl0cyk7CisrCWJpbm5f b2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NzdGhyZXNoIiwKKysJCQkgICAg ICAgZGF0YS0+X190Y3BpX3Jjdl9zc3RocmVzaCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIo Ymlubm9iaiwgInRjcGlfc2Fja2VkIiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX3NhY2tlZCk7 CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcG10dSIsCisrCQkJICAg ICAgIGRhdGEtPl9fdGNwaV9wbXR1KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9mYWNrZXRzIiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2ZhY2tldHMpOworKwli aW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xvc3QiLAorKwkJCSAgICAgICBk YXRhLT5fX3RjcGlfbG9zdCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRj cGlfbGFzdF9hY2tfc2VudCIsCisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9sYXN0X2Fja19zZW50 KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV91bmFja2VkIiwKKysJ CQkgICAgICAgZGF0YS0+X190Y3BpX3VuYWNrZWQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMy KGJpbm5vYmosICJ0Y3BpX2xhc3RfZGF0YV9zZW50IiwKKysJCQkgICAgICAgZGF0YS0+X190Y3Bp X2xhc3RfZGF0YV9zZW50KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNw aV9sYXN0X2Fja19yZWN2IiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2xhc3RfYWNrX3JlY3Yp OworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jlb3JkZXJpbmciLAor KwkJCSAgICAgICBkYXRhLT5fX3RjcGlfcmVvcmRlcmluZyk7CisrCWJpbm5fb2JqZWN0X3NldF91 aW50MzIoYmlubm9iaiwgInRjcGlfYWR2bXNzIiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2Fk dm1zcyk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmV0cmFucyIs CisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9yZXRyYW5zKTsKKysJYmlubl9vYmplY3Rfc2V0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9hdG8iLAorKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfYXRvKTsK KysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfcnR0IiwKKysJCQkg ICAgICAgZGF0YS0+X190Y3BpX3Jjdl9ydHQpOworKyNlbmRpZgorKworKy8qIFVuZGVyIEJTRCBz bmRfcmV4bWl0cGFjayBpcyB0aGUgc2FtZSBhcyBsaW51eCB0b3RhbF9yZXRyYW5zKi8KKysjaWZk ZWYgX19saW51eF9fCisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfdG90 YWxfcmV0cmFucyIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfdG90YWxfcmV0cmFucyk7CisrI2Vs c2UKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV90b3RhbF9yZXRyYW5z IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRfcmV4bWl0cGFjayk7CisrI2VuZGlmCisrCisr LyogVGhlIGxhc3Qgc2VjdGlvbiBhcmUgZm9yIGtlcm5lbCBzcGVjaWZpYyBtZXRyaWNzIGluIGxp bnV4ICovCisrI2lmZGVmIF9fbGludXhfXworKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VS TkVMX1ZFUlNJT04oMywxNSwwKQorKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0 Y3BpX21heF9wYWNpbmdfcmF0ZSIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfbWF4X3BhY2luZ19y YXRlKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9wYWNpbmdfcmF0 ZSIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfcGFjaW5nX3JhdGUpOworKyNlbmRpZgorKworKyNp ZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCwxLDApCisrCWJpbm5fb2Jq ZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfYWNrZWQiLAorKwkJCSAgICAgICBk YXRhLT50Y3BpX2J5dGVzX2Fja2VkKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2Jq LCAidGNwaV9ieXRlc19yZWNlaXZlZCIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfYnl0ZXNfcmVj ZWl2ZWQpOworKyNlbmRpZgorKworKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZF UlNJT04oNCwyLDApCisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Vn c19pbiIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfc2Vnc19pbik7CisrCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Vnc19vdXQiLAorKwkJCSAgICAgICBkYXRhLT50Y3Bp X3NlZ3Nfb3V0KTsKKysjZW5kaWYKKysKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5F TF9WRVJTSU9OKDQsNiwwKQorKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X25vdHNlbnRfYnl0ZXMiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX25vdHNlbnRfYnl0ZXMpOwor KwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX21pbl9ydHQiLAorKwkJCSAg ICAgICBkYXRhLT50Y3BpX21pbl9ydHQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5v YmosICJ0Y3BpX2RhdGFfc2Vnc19pbiIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfZGF0YV9zZWdz X2luKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3Nf b3V0IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9kYXRhX3NlZ3Nfb3V0KTsKKysjZW5kaWYKKysK KysjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsOSwwKQorKwliaW5u X29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZV9hcHBfbGltaXRl ZCIsCisrCQkJICAgICAgZGF0YS0+dGNwaV9kZWxpdmVyeV9yYXRlX2FwcF9saW1pdGVkKTsKKysJ Ymlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9yYXRlIiwKKysJ CQkgICAgICAgZGF0YS0+dGNwaV9kZWxpdmVyeV9yYXRlKTsKKysjZW5kaWYKKysKKysjaWYgTElO VVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsMTAsMCkKKysJYmlubl9vYmplY3Rf c2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9idXN5X3RpbWUiLAorKwkJCSAgICAgICBkYXRhLT50 Y3BpX2J1c3lfdGltZSk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlf c25kYnVmX2xpbWl0ZWQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZGJ1Zl9saW1pdGVkKTsK KysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9yd25kX2xpbWl0ZWQiLAor KwkJCSAgICAgICBkYXRhLT50Y3BpX3J3bmRfbGltaXRlZCk7CisrI2VuZGlmCisrCisrI2lmIExJ TlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDE4LDApCisrCWJpbm5fb2JqZWN0 X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfZGVsaXZlcmVkIiwKKysJCQkgICAgICAgZGF0YS0+ dGNwaV9kZWxpdmVyZWQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X2RlbGl2ZXJlZF9jZSIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfZGVsaXZlcmVkX2NlKTsKKysj ZW5kaWYKKysKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsMTks MCkKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19zZW50IiwK KysJCQkgICAgICAgZGF0YS0+dGNwaV9ieXRlc19zZW50KTsKKysJYmlubl9vYmplY3Rfc2V0X3Vp bnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19yZXRyYW5zIiwKKysJCQkgICAgICAgZGF0YS0+dGNw aV9ieXRlc19yZXRyYW5zKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNw aV9kc2Fja19kdXBzIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9kc2Fja19kdXBzKTsKKysJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZF9zZWVuIiwKKysJCQkgICAg ICAgZGF0YS0+dGNwaV9yZW9yZF9zZWVuKTsKKysjZW5kaWYKKysKKysjaWYgTElOVVhfVkVSU0lP Tl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDUsNCwwKQorKwliaW5uX29iamVjdF9zZXRfdWludDMy KGJpbm5vYmosICJ0Y3BpX3NuZF93bmQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZF93bmQp OworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9vb29wYWNrIiwK KysJCQkgICAgICAgZGF0YS0+dGNwaV9yY3Zfb29vcGFjayk7CisrI2VuZGlmCisrCisrI2lmIExJ TlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig1LDUsMCkKKysJYmlubl9vYmplY3Rf c2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2Zhc3RvcGVuX2NsaWVudF9mYWlsIiwKKysJCQkgICAg ICBkYXRhLT50Y3BpX2Zhc3RvcGVuX2NsaWVudF9mYWlsKTsKKysjZW5kaWYKKysjZW5kaWYgLypl bmRpZiBmb3IgI2lmZGVmIF9fbGludXhfXyAqLworKyNlbmRpZiAvKmVuZGlmIGZvciBUQ1BfSU5G TyAqLworK30KKysKKysvKiB0aGlzIHJlYWRzIG91dCB0aGUgdGNwX2luZm8gYmlubiBvYmplY3Qg YW5kIGZvcm1hdHMgaXQgaW50byBhIHNpbmdsZSBsaW5lCisrICogdGhlIG9iamVjdCB3aWxsIG5v dCBuZWNlc3NhcmlseSBoYXZlIGFsbCBvZiB0aGUgZWxlbWVudHMuIElmIGl0J3MgZW1wdHkgaXQK KysgKiBjdXJyZW50IGp1c3Qgc3BpdHMgb3V0IDAuIFRoaXMgaXNuJ3Qgb3B0aW1hbCBhcyAwIGNh biBhbHNvIGJlIGEgdmFsaWQgdmFsdWUgKi8KKyt2b2lkCisrbWV0cmljc19yZWFkX2Jpbm5fb2Jq ZWN0ICh2b2lkICpiaW5ub2JqLCBjaGFyICpvdXRwdXQpIHsKKysJaW50IGxlbiA9IDA7CisrCWlu dCBidWZsZW4gPSAxMDIzOworKwlpbnQga2VybmVsX3ZlcnNpb24gPSAwOworKwlpZiAoYmlubm9i aiA9PSBOVUxMKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1ldHJpYyBwb2xsaW5nIHJldHVybmVk IGJhZCBkYXRhLlxuIik7CisrCQlyZXR1cm47CisrCX0KKysJa2VybmVsX3ZlcnNpb24gPSBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgImtlcm5lbF92ZXJzaW9uIik7CisrCisrCS8qIGJhc2Ug c2V0IG9mIG1ldHJpY3MgKi8KKysJbGVuID0gc25wcmludGYob3V0cHV0LCBidWZsZW4sICIlZCwg JWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAl ZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVk LCAlZCwgJWQiLAorKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3N0 YXRlIiksCisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfY2Ffc3Rh dGUiKSwKKysJCSAgICAgICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9yZXRyYW5z bWl0cyIpLAorKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Byb2Jl cyIpLAorKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2JhY2tvZmYi KSwKKysJCSAgICAgICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9vcHRpb25zIiks CisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfc25kX3dzY2FsZSIp LAorKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Jjdl93c2NhbGUi KSwKKysJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcnRvIiksCisr CQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2F0byIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfbXNzIiksCisrCQkgICAg ICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9tc3MiKSwKKysJCSAgICAg ICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfdW5hY2tlZCIpLAorKwkJICAgICAg IGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zYWNrZWQiKSwKKysJCSAgICAgICBi aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfbG9zdCIpLAorKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZXRyYW5zIiksCisrCQkgICAgICAgYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2ZhY2tldHMiKSwKKysJCSAgICAgICBiaW5uX29i amVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9kYXRhX3NlbnQiKSwKKysJCSAgICAgICBi aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfc2VudCIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2RhdGFfcmVjdiIpLAor KwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19yZWN2 IiksCisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3BtdHUiKSwK KysJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NzdGhyZXNo IiksCisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dCIpLAor KwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHR2YXIiKSwKKysJ CSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX3NzdGhyZXNoIiks CisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF9jd25kIiks CisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2Fkdm1zcyIpLAor KwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZGVyaW5nIiks CisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9ydHQiKSwK KysJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NwYWNlIiks CisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3RvdGFsX3JldHJh bnMiKQorKwkJKTsKKysKKysJLyogY29tcGFyZSB0aGUgcmVjZWl2ZWQga2VybmVsIHZlcnNpb24g dG8gdGhlIHZlcnNpb24gdGhhdCBzdXBwb3J0cworKwkgKiBhbnkgZ2l2ZW4gbWV0cmljLiBUaGlz IG1lYW5zIHRoYXQgYSByZW1vdGUgaG9zdCB0aGF0IGhhcyBhIGRpZmZlcmVudAorKwkgKiBrZXJu ZWwgdGhhdCB0aGUgbG9jYWwgaG9zdCB3aWxsIGJlIGFibGUgdG8gcHJvY2VzcyB0aGUgZGF0YSBp biB0ZXJtcyBvZgorKwkgKiB0aGUgcmVtb3RlIGtlcm5lbCB2ZXJzaW9uLiBPbmx5IG5lY2Vzc2Fy eSB1bmRlciBsaW51eCovCisrI2lmZGVmIF9fbGludXhfXworKwlpZiAoa2VybmVsX3ZlcnNpb24g Pj0gS0VSTkVMX1ZFUlNJT04oMywxNSwwKSkgeworKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCts ZW4sIChidWZsZW4tbGVuKSwgIiwgJWxsdSwgJWxsdSIsCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQ2 NChiaW5ub2JqLCAidGNwaV9tYXhfcGFjaW5nX3JhdGUiKSwKKysJCQkJYmlubl9vYmplY3RfdWlu dDY0KGJpbm5vYmosICJ0Y3BpX3BhY2luZ19yYXRlIikKKysJCQkpOworKwl9CisrCisrCWlmIChr ZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDEsMCkpIHsKKysJCWxlbiArPSBzbnBy aW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVsbHUsICVsbHUiLAorKwkJCQliaW5u X29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfYWNrZWQiKSwKKysJCQkJYmlubl9v YmplY3RfdWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3JlY2VpdmVkIikKKysJCQkpOworKwl9 CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDIsMCkpIHsKKysJ CWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlZCIsCisr CQkJCWJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zZWdzX2luIiksCisrCQkJCWJp bm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zZWdzX291dCIpCisrCQkJKTsKKysJfQor KworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCw2LDApKSB7CisrCQls ZW4gKz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQsICVkLCAl ZCIsCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ub3RzZW50X2J5dGVz IiksCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9taW5fcnR0IiksCisr CQkJCWJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3NfaW4iKSwKKysJ CQkJYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RhdGFfc2Vnc19vdXQiKQorKwkJ CSk7CisrCX0KKysKKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsOSww KSkgeworKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQs ICVsbHUiLAorKwkJCQliaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9y YXRlX2FwcF9saW1pdGVkIiksCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNw aV9kZWxpdmVyeV9yYXRlIikKKysJCQkpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+ PSBLRVJORUxfVkVSU0lPTig0LDEwLDApKSB7CisrCQlsZW4gKz0gc25wcmludGYob3V0cHV0K2xl biwgKGJ1Zmxlbi1sZW4pLCAiLCAlbGx1LCAlbGx1LCAlbGx1IiwKKysJCQkJYmlubl9vYmplY3Rf dWludDY0KGJpbm5vYmosICJ0Y3BpX2J1c3lfdGltZSIpLAorKwkJCQliaW5uX29iamVjdF91aW50 NjQoYmlubm9iaiwgInRjcGlfc25kYnVmX2xpbWl0ZWQiKSwKKysJCQkJYmlubl9vYmplY3RfdWlu dDY0KGJpbm5vYmosICJ0Y3BpX3J3bmRfbGltaXRlZCIpCisrCQkJKTsKKysJfQorKworKwlpZiAo a2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxOCwwKSkgeworKwkJbGVuICs9IHNu cHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkIiwKKysJCQkJYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJlZCIpLAorKwkJCQliaW5uX29iamVj dF91aW50MzIoYmlubm9iaiwgInRjcGlfZGVsaXZlcmVkX2NlIikKKysJCQkpOworKwl9CisrCisr CWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDE5LDApKSB7CisrCQlsZW4g Kz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlbGx1LCAlbGx1LCAlZCwg JWQiLAorKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfc2VudCIp LAorKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfcmV0cmFucyIp LAorKwkJCQliaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfZHNhY2tfZHVwcyIpLAor KwkJCQliaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRfc2VlbiIpCisrCQkJ KTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNSw0LDAp KSB7CisrCQlsZW4gKz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwg JWQiLAorKwkJCQliaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX3duZCIpLAor KwkJCQliaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X29vb3BhY2siKQorKwkJ CSk7CisrCX0KKysKKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNSww KSkgeworKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQi LAorKwkJCQliaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9mYXN0b3Blbl9jbGllbnRf ZmFpbCIpCisrCQkJKTsKKysJfQorKyNlbmRpZiAvKiBpZmRlZiBfX2xpbnV4X18gKi8KKyt9Cisr CisrLyogUHJpbnQgb3V0IHRoZSBoZWFkZXIgdG8gdGhlIGZpbGUgc28gdGhhdCB0aGUgY29sdW1u IGhlYWRlciBtYXRjaGVzIHRoZQorKyAqIGRhdGEgaW4gdGhlIG1ldHJpY3Mgb2JqZWN0LiBUaGF0 IHZhcmllcyBieSBrZXJuZWwgdmVyc2lvbiBzbyB3ZSBoYXZlIHRvCisrICogZG8gdGVzdHMgZm9y IGVhY2ggcG9zc2libGUgdmVyc2lvbiB3aGVyZSB0aGV5IGFkZGVkIG5ldyB2YWx1ZXMgdG8gdGNw X2luZm8KKysgKiBOT1RFOiBUaGlzIGRvZXNuJ3QgcHV0IHRoZSB2YWx1ZXMvaGVhZGVycyBpbiB0 aGUgbW9zdCB1c2VmdWwgb3JkZXIgYnV0IHRoZQorKyAqIHJlc3VsdGluZyBmaWxlIGlzIHByb2Jh Ymx5IGdvaW5nIHRvIGdldCBwcm9jZXNzZWQgYnkgc29tZXRoaW5nICovCisrdm9pZAorK21ldHJp Y3NfcHJpbnRfaGVhZGVyKEZJTEUgKmZwdHIsIGNoYXIgKmV4dHJhX3RleHQsIGludCBrZXJuZWxf dmVyc2lvbikgeworKwlpZiAoZXh0cmFfdGV4dCAhPSBOVUxMKSB7CisrCQlmcHJpbnRmKGZwdHIs ICIlc1xuIiwgZXh0cmFfdGV4dCk7CisrCX0KKysJZnByaW50ZihmcHRyLCAidGltZXN0YW1wLCBz dGF0ZSwgY2Ffc3RhdGUsIHJldHJhbnNtaXRzLCBwcm9iZXMsIGJhY2tvZmYsIG9wdGlvbnMsICIp OworKwlmcHJpbnRmKGZwdHIsICJzbmRfd3NjYWxlLCByY3Zfd3NjYWxlLCBydG8sIGF0bywgc25k X21zcywgcmN2X21zcywgdW5hY2tlZCwgc2Fja2VkLCBsb3N0LCByZXRyYW5zLCAiKTsKKysJZnBy aW50ZihmcHRyLCAiZmFja2V0cywgbGFzdF9kYXRhX3NlbnQsIGxhc3RfYWNrX3NlbnQsIGxhc3Rf ZGF0YV9yZWN2LCAiKTsKKysJZnByaW50ZihmcHRyLCAibGFzdF9hY2tfcmVjdiwgcG10dSwgcmN2 X3NzdGhyZXNoLCBydHQsIHJ0dHZhciwgc25kX3NzdGhyZXNoLCAiKTsKKysJZnByaW50ZihmcHRy LCAic25kX2N3bmQsIGFkdm1zcywgcmVvcmRlcmluZywgcmN2X3J0dCwgcmN2X3NwYWNlLCB0b3Rh bF9yZXRyYW5zIik7CisrCisrCS8qIGNvbXBhcmUgdGhlIHJlY2VpdmVkIGtlcm5lbCB2ZXJzaW9u IHRvIHRoZSB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMKKysJICogYW55IGdpdmVuIG1ldHJpYy4gVGhp cyB3YXkgd2UgY2FuIHByaW50IGNvbnNpc3RlbnQgaGVhZGVycy4KKysJICogT25seSBuZWNlc3Nh cnkgdW5kZXIgbGludXgqLworKyNpZmRlZiBfX2xpbnV4X18KKysJaWYgKGtlcm5lbF92ZXJzaW9u ID49IEtFUk5FTF9WRVJTSU9OKDMsMTUsMCkpIHsKKysJCWZwcmludGYoZnB0ciwgIiwgbWF4X3Bh Y2luZ19yYXRlLCBwYWNpbmdfcmF0ZSIpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+ PSBLRVJORUxfVkVSU0lPTig0LDEsMCkpIHsKKysJCWZwcmludGYoZnB0ciwgIiwgYnl0ZXNfYWNr ZWQsIGJ5dGVzX3JlY2VpdmVkIik7CisrCX0KKysKKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtF Uk5FTF9WRVJTSU9OKDQsMiwwKSkgeworKwkJZnByaW50ZihmcHRyLCAiLCBzZWdzX2luLCBzZWdz X291dCIpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0 LDYsMCkpIHsKKysJCWZwcmludGYoZnB0ciwgIiwgbm90c2VudF9ieXRlcywgbWluX3J0dCwgZGF0 YV9zZWdzX2luLCBkYXRhX3NlZ19vdXQiKTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24g Pj0gS0VSTkVMX1ZFUlNJT04oNCw5LDApKSB7CisrCQlmcHJpbnRmKGZwdHIsICIsIGRlbGl2ZXJ5 X3JhdGVfYXBwX2xpbWl0ZWQsIGRlbGl2ZXJ5X3JhdGUiKTsKKysJfQorKworKwlpZiAoa2VybmVs X3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxMCwwKSkgeworKwkJZnByaW50ZihmcHRyLCAi LCBidXN5X3RpbWUsIHNuZGJ1Zl9saW1pdGVkLCByd25kX2xpbWl0ZWQiKTsKKysJfQorKworKwlp ZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxOCwwKSkgeworKwkJZnByaW50 ZihmcHRyLCAiLCBkZWxpdmVyZWQsIGRlbGl2ZXJlZF9jZSIpOworKwl9CisrCisrCWlmIChrZXJu ZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDE5LDApKSB7CisrCQlmcHJpbnRmKGZwdHIs ICIsIGJ5dGVzX3NlbnQsIGJ5dGVzX3JldHJhbnMsIGRzYWNrX2R1cHMsIHJlb3JkX3NlZW4iKTsK KysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNSw0LDApKSB7 CisrCQlmcHJpbnRmKGZwdHIsICIsIHNuZF93bmQsIHJjdl9vb29wYWNrIik7CisrCX0KKysKKysJ aWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNSwwKSkgeworKwkJZnByaW50 ZihmcHRyLCAiLCBmYXN0b3Blbl9jbGllbnRfZmFpbCIpOworKwl9CisrI2VuZGlmIC8qIGlmZGVm IF9fbGludXhfXyAqLworKwlmcHJpbnRmKGZwdHIsICJcblxuIik7CisrfQorZGlmZiAtTnVyIG9w ZW5zc2gtMTAuNXAxLm9yaWcvbWV0cmljcy5oIG9wZW5zc2gtMTAuNXAxL21ldHJpY3MuaAorLS0t IG9wZW5zc2gtMTAuNXAxLm9yaWcvbWV0cmljcy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvbWV0cmljcy5oCTIwMjYtMDktMjEgMDc6MDY6 NTkuODg5OTI1ODQ0ICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrLyoKKysgKiBDb3B5cmlnaHQg KGMpIDIwMjIgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJz aXR5LgorKyAqCisrICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KKysg KgorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGlj ZW5zZS4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorKyAqIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgTUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7CisrICogaWYgbm90 LCBzZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KKysgKgorKyAqLworKwor KyNpZm5kZWYgTUVUUklDU19ICisrI2RlZmluZSBNRVRSSUNTX0gKKysKKysjaW5jbHVkZSAiYmlu bi5oIgorKworKy8qIGxpbnV4LCBmcmVlYnNkLCBhbmQgbmV0YnNkIGhhdmUgdGNwX2luZm8gc3Ry dWN0cy4KKysgKiBJIGRvbid0IGtub3cgYWJvdXQgb3RoZXIgc3lzdGVtcyBzbyB3ZSBkaXNhYmxl IHRoaXMKKysgKiBmdW5jdGlvbmFsaXR5IGZvciB0aGVtICovCisrI2lmIGRlZmluZWQgX19saW51 eF9fIHx8IGRlZmluZWQgX19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX05ldEJTRF9fICYmICFkZWZp bmVkKF9fYWxwaW5lX18pCisrI2RlZmluZSBUQ1BfSU5GTyAxCisrI2lmIGRlZmluZWQgX19saW51 eF9fICYmICFkZWZpbmVkKF9fYWxwaW5lX18pCisrI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorKyNl bHNlCisrI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisrI2VuZGlmCisrI2Vsc2UKKysvKiBtYWtl IGEgbnVsbCBzdHJ1Y3QgZm9yIHRjcF9pbmZvIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0 IGl0Ki8KKyt0eXBlZGVmIHN0cnVjdCB0Y3BfaW5mbyB7CisrCXZvaWQgICAgICpkdW1teTsKKyt9 IHRjcF9pbmZvOworKyNlbmRpZgorKworK3ZvaWQgbWV0cmljc193cml0ZV9iaW5uX29iamVjdChz dHJ1Y3QgdGNwX2luZm8gKiwgc3RydWN0IGJpbm5fc3RydWN0ICopOworK3ZvaWQgbWV0cmljc19y ZWFkX2Jpbm5fb2JqZWN0KHZvaWQgKiwgY2hhciAqKTsKKyt2b2lkIG1ldHJpY3NfcHJpbnRfaGVh ZGVyKEZJTEUgKiwgY2hhciAqLCBpbnQpOworKworKworKyNlbmRpZiAvKiBkZWZpbmUgbWV0cmlj c19oICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9taXNjLmMgb3BlbnNzaC0xMC41 cDEvbWlzYy5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9taXNjLmMJMjAyNi0wOS0yMSAwNzow NjowNS41NjA5NTgwODIgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9taXNjLmMJMjAyNi0wOS0y MSAwNzowNjo1OS44OTAwMzE1NTEgKzAyMDAKK0BAIC02Niw2ICs2Niw4NCBAQAorICNpbmNsdWRl ICJzc2hlcnIuaCIKKyAjaW5jbHVkZSAicGxhdGZvcm0uaCIKKyAKKysvKiBGdW5jdGlvbiB0byBk ZXRlcm1pbmUgaWYgRklQUyBpcyBlbmFibGVkIG9yIG5vdC4KKysgKiBXZSBhc3N1bWUgdGhhdCBm aXBzIGlzIG5vdCBlbmFibGVkIGFuZCB0aGVuIHRlc3QgZnJvbSB0aGVyZS4KKysgKiBUaGUgaWRl YSBpcyB0aGF0IGlmIHRoZXJlIGlzIGFuIGVycm9yIG9yIHdlIGNhbid0IHJlYWQgdGhlIHZhbHVl CisrICogdGhlbiBlaXRoZXIgdGhlIE9TIGRvZXNuJ3Qgc3VwcG9ydCBGSVBTIG9yIHRoYXQgRklQ UyB3aWxsCisrICogY2F0Y2ggYW55dGhpbmcgd2UgdHJ5IHRvIGRvIHRoYXQncyBub3QgRklQUyBj b21wbGlhbnQuCisrICogVGhhdCB3b3VsZCBiZSBsaW1pdGVkIHRvIHRyeWluZyB0byB1c2Ugb25l IG9mIHRoZSBwYXJhbGxlbCBjaXBoZXJzLgorKyAqLworK2ludAorK2ZpcHNfZW5hYmxlZCgpCisr eworKwlpbnQgbW9kZSA9IDA7CisrCWNvbnN0IGNoYXIqIGZpcHNfcGF0aCA9ICIvcHJvYy9zeXMv Y3J5cHRvL2ZpcHNfZW5hYmxlZCI7CisrCUZJTEUgKmZpcHNfZW5hYmxlZCA9IE5VTEw7CisrCisr CWRlYnVnMl9mKCJDaGVja2luZyBmb3IgRklQUyIpOworKworKwkvKiBpZiB3ZSBjYW4ndCBvcGVu IHRoZSBwYXRoIHRvIGZpcHNfZW5hYmxlZCBpdAorKwkgKiBlaXRoZXIgZG9lc24ndCBleGlzdCBv ciB0aGVyZSBpcyBhbiBlcnJvci4gSW4gZWl0aGVyCisrCSAqIGNhc2Ugd2UgdHJlYXQgaXQgYXMg aWYgZmlwcyBpcyAqbm90KiBlbmFibGVkLgorKwkgKiBUaGlzIGlzIGJlY2F1c2UgSSB3YW50IHRv IGZhaWwgdG93YXJkcyB0aGUgbW9zdAorKwkgKiBjb21tb24gc2NlbmFyaW8gd2hpY2ggaXMgdGhh dCBmaXBzX2VuYWJsZWQgZWl0aGVyCisrCSAqIGRvZXNuJ3QgZXhpc3QgKG5vbi1mZWRvcmEgdmFy aWFudHMpIG9yIGlzbid0CisrCSAqIGVuYWJsZWQuCisrCSAqLworKwlmaXBzX2VuYWJsZWQgPSBm b3BlbihmaXBzX3BhdGgsICJyIik7CisrCWlmICghZmlwc19lbmFibGVkKSB7CisrCQlkZWJ1ZzNf ZigiQ2Fubm90IG9wZW4gcGF0aCB0byBmaXBzX2VuYWJsZWQuIik7CisrCQlyZXR1cm4gMDsKKysJ fQorKworKwkvKiBmaXBzX2VuYWJsZWQgZG9lcyBleGlzdCBzbyByZWFkIHRoZSB2YWx1ZS4KKysJ ICogSXQgc2hvdWxkIGJlIGVpdGhlciAwIChkaXNhYmxlZCkgb3IgMSAoZW5hYmxlZCkKKysJICov CisrCWlmICggMSAhPSBmc2NhbmYoZmlwc19lbmFibGVkLCIlZCIsICZtb2RlKSApIHsKKysJCS8q IGlmIHdlIGdldCBzb21lIGVycm9yIGhlcmUgdGhlbiB3ZQorKwkJICogYWdhaW4gZmFpbCB0byBy ZXR1cm5pbmcgZmlwcyBiZWluZyBkaXNhYmxlZAorKwkJICovCisrCQlkZWJ1ZzNfZigiRXJyb3Ig cHJvY2Vzc2luZyBmaXBzX2VuYWJsZWQuIik7CisrCQlmY2xvc2UoZmlwc19lbmFibGVkKTsKKysJ CXJldHVybiAwOworKwl9CisrCisrCS8qIGxldCB0aGUgdXNlciBrbm93IHRoZSBzdGF0dXMgKi8K KysJaWYgKG1vZGUgPT0gMCkKKysJCWRlYnVnM19mKCJGSVBTIG1vZGUgaXMgZGlzYWJsZWQuIik7 CisrCWVsc2UKKysJCWRlYnVnM19mKCJGSVBTIG1vZGUgaXMgZW5hYmxlZC4iKTsKKysKKysJZmNs b3NlKGZpcHNfZW5hYmxlZCk7CisrCXJldHVybiBtb2RlOworK30KKysKKysvKiBoZWxwZXIgZnVu Y3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgbWVtb3J5IHVzYWdlIGR1cmluZworKyAqIGRldmVsb3Bt ZW50IHByb2Nlc3MuIE5vdCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24uCisrICovCisrdm9pZAor K3JlYWRfbWVtX3N0YXRzKHN0YXRtX3QgKnJlc3VsdCwgaW50IHBvc3RfYXV0aCkKKyt7CisrCWlm ICghcG9zdF9hdXRoKQorKwkJcmV0dXJuOworKworKwljb25zdCBjaGFyKiBzdGF0bV9wYXRoID0g Ii9wcm9jL3NlbGYvc3RhdG0iOworKworKwlGSUxFICpmID0gZm9wZW4oc3RhdG1fcGF0aCwiciIp OworKwlpZighZil7CisrCQlwZXJyb3Ioc3RhdG1fcGF0aCk7CisrCQlhYm9ydCgpOworKwl9Cisr CWlmKDcgIT0gZnNjYW5mKGYsIiVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIsCisrCQkgICAg ICAgJnJlc3VsdC0+c2l6ZSwgJnJlc3VsdC0+cmVzaWRlbnQsICZyZXN1bHQtPnNoYXJlLCAmcmVz dWx0LT50ZXh0LCAmcmVzdWx0LT5saWIsCisrCQkgICAgICAgJnJlc3VsdC0+ZGF0YSwgJnJlc3Vs dC0+ZHQpKQorKwl7CisrCQlwZXJyb3Ioc3RhdG1fcGF0aCk7CisrCQlhYm9ydCgpOworKwl9Cisr CWZjbG9zZShmKTsKKyt9CisrCisgLyogcmVtb3ZlIG5ld2xpbmUgYXQgZW5kIG9mIHN0cmluZyAq LworIGNoYXIgKgorIGNob3AoY2hhciAqcykKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmln L21pc2MuaCBvcGVuc3NoLTEwLjVwMS9taXNjLmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL21p c2MuaAkyMDI2LTA5LTIxIDA3OjA2OjA0Ljg2MjA1MTA4NiArMDIwMAorKysrIG9wZW5zc2gtMTAu NXAxL21pc2MuaAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MDU5NTUxNiArMDIwMAorQEAgLTI3Niw0 ICsyNzYsMTcgQEAKKyAJCSAgICBzdHJlcnJvcihlcnJubykpOyBcCisgfSB3aGlsZSAoMCkKKyAK Kyt0eXBlZGVmIHN0cnVjdCBzdGF0bV90IHsKKysgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKysgIHVu c2lnbmVkIGxvbmcgcmVzaWRlbnQ7CisrICB1bnNpZ25lZCBsb25nIHNoYXJlOworKyAgdW5zaWdu ZWQgbG9uZyB0ZXh0OworKyAgdW5zaWduZWQgbG9uZyBsaWI7CisrICB1bnNpZ25lZCBsb25nIGRh dGE7CisrICB1bnNpZ25lZCBsb25nIGR0OworK30gc3RhdG1fdDsKKysKKyt2b2lkIHJlYWRfbWVt X3N0YXRzKHN0cnVjdCBzdGF0bV90ICosIGludCk7CisraW50IGZpcHNfZW5hYmxlZCgpOworKwor ICNlbmRpZiAvKiBfTUlTQ19IICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9teXBy b3Bvc2FsLmggb3BlbnNzaC0xMC41cDEvbXlwcm9wb3NhbC5oCistLS0gb3BlbnNzaC0xMC41cDEu b3JpZy9teXByb3Bvc2FsLmgJMjAyNi0wOS0yMSAwNzowNjowNS40NTQ1NjM3OTUgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjVwMS9teXByb3Bvc2FsLmgJMjAyNi0wOS0yMSAwNzowNjo1OS44OTA3OTkw NTYgKzAyMDAKK0BAIC03NCwxMCArNzQsMjAgQEAKKyAJInJzYS1zaGEyLTUxMiwiIFwKKyAJInJz YS1zaGEyLTI1NiIKKyAKKysvKmlmIHdlIGFyZW4ndCB1c2luZyBPcGVuU1NMIHdlIG5lZWQgdG8g cmVtb3ZlCisrICogdGhlIHBhcmFsbGVsIENoYUNoYTIwIGNpcGhlciBmcm9tIHRoZSBsaXN0ICov CisrI2lmZGVmIFdJVEhfT1BFTlNTTAorICNkZWZpbmUJS0VYX1NFUlZFUl9FTkNSWVBUIFwKKysJ ImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmcsIiBcCisgCSJjaGFjaGEyMC1wb2x5MTMw NUBvcGVuc3NoLmNvbSwiIFwKKyAJImFlczEyOC1nY21Ab3BlbnNzaC5jb20sYWVzMjU2LWdjbUBv cGVuc3NoLmNvbSwiIFwKKyAJImFlczEyOC1jdHIsYWVzMTkyLWN0cixhZXMyNTYtY3RyIgorKyNl bHNlCisrI2RlZmluZQlLRVhfU0VSVkVSX0VOQ1JZUFQgXAorKwkiY2hhY2hhMjAtcG9seTEzMDVA b3BlbnNzaC5jb20sIiBcCisrCSJhZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFlczI1Ni1nY21Ab3Bl bnNzaC5jb20sIiBcCisrCSJhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0ciIKKysjZW5k aWYKKyAKKyAjZGVmaW5lIEtFWF9DTElFTlRfRU5DUllQVCBLRVhfU0VSVkVSX0VOQ1JZUFQKKyAK K2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL251bS5jIG9wZW5zc2gtMTAuNXAxL251bS5j CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9udW0uYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAxL251bS5jCTIwMjYtMDktMjEgMDc6MDY6NTku ODkwOTAxNTUzICswMjAwCitAQCAtMCwwICsxLDE1NiBAQAorKy8qIENDMCBsaWNlbnNlIGFwcGxp ZWQsIHNlZSBMSUNFTkNFLm1kICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl ICJudW0uaCIKKysKKysjaWZkZWYgV0lUSF9PUEVOU1NMMworKworK3R5cGVkZWYgZW51bSB7IEJJ RyA9IDEsIExJVFRMRSA9IC0xIH0gIGVuZGlhbl90OworK3R5cGVkZWYgZW51bSB7IE5FR0FUSVZF ID0gMHhmZiwgUE9TSVRJVkUgPSAweDAwIH0gc2lnbl90OworKworK3N0YXRpYyBlbmRpYW5fdCBu YXRpdmVlbmRpYW4odm9pZCkKKyt7CisrICAgIGNvbnN0IGludCBlbmRpYW50ZXN0ID0gMTsKKysK KysgICAgcmV0dXJuICooKGNoYXIgKikmZW5kaWFudGVzdCkgPT0gMSA/IExJVFRMRSA6IEJJRzsK Kyt9CisrCisrc3RhdGljIHNpZ25fdCBwYXJhbXNpZ24oY29uc3QgT1NTTF9QQVJBTSAqcGFyYW0p CisreworKyAgICBzaXplX3Qgc3JjbXNiID0gbmF0aXZlZW5kaWFuKCkgPT0gQklHID8gMCA6IHBh cmFtLT5kYXRhX3NpemUgLSAxOworKworKyAgICByZXR1cm4KKysgICAgICAgIHBhcmFtLT5kYXRh X3R5cGUgPT0gT1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VSCisrICAgICAgICA/IFBPU0lUSVZF CisrICAgICAgICA6ICgoKHVuc2lnbmVkIGNoYXIgKilwYXJhbS0+ZGF0YSlbc3JjbXNiXSAmIDB4 ODAKKysgICAgICAgICAgID8gTkVHQVRJVkUKKysgICAgICAgICAgIDogUE9TSVRJVkUpOworK30K KysKKytzdHJ1Y3QgbnVtZGVzYyB7CisrICAgIHZvaWQgKmRhdGE7CisrICAgIHVuc2lnbmVkIGlu dCBkYXRhX3R5cGU7ICAgICAvKiBUaGUgT1NTTF9QQVJBTSBkYXRhIHR5cGUgKi8KKysKKysgICAg LyogVGhlc2UgZmllbGRzIGNvbmNlcm4gdGhlIHdob2xlIG51bWJlciAqLworKyAgICBzaXplX3Qg c2l6ZTsKKysgICAgZW5kaWFuX3QgZW5kaWFuOworKyAgICBzaWduX3Qgc2lnbjsKKysKKysgICAg LyogVGhlc2UgZmllbGRzIGNvbmNlcm4gdGhlIGxpbWJzIG9mIHRoZSBudW1iZXIgKi8KKysgICAg c2l6ZV90IGxpbWJzaXplOworKyAgICBlbmRpYW5fdCBsaW1iZW5kaWFuOworKyAgICAvKiBUaGlz IGlzIGZvciBvZGQgYXJjaHMuICovCisrICAgIC8qIHNlZSB0aGUgbWFudWFsIGZvciBtcHpfaW1w b3J0KCkgZm9yIGFuIGluIGRlcHRoIGV4cGxhbmF0aW9uLiAqLworKyAgICBzaXplX3QgbGltYm5h aWxiaXRzOworK307CisrCisrc3RydWN0IHJlc3VsdGRlc2MgeworKyAgICBzaXplX3Qgc2l6ZTsK KysgICAgaW50IHJlc3VsdDsgICAgICAgICAgICAgICAgIC8qIDEgb3IgKG5lZ2F0aXZlKSBlcnJv ciAqLworK307CisrCisrc3RhdGljIHN0cnVjdCByZXN1bHRkZXNjIHByb3ZudW1fY29weShzdHJ1 Y3QgbnVtZGVzYyBkZXN0LCBzdHJ1Y3QgbnVtZGVzYyBzcmMpCisreworKyAgICBzdHJ1Y3QgcmVz dWx0ZGVzYyByZXN1bHQgPSB7IGRlc3Quc2l6ZSwgMSwgfTsKKysKKysgICAgaWYgKHNyYy5kYXRh X3R5cGUgIT0gT1NTTF9QQVJBTV9JTlRFR0VSCisrICAgICAgICAmJiBzcmMuZGF0YV90eXBlICE9 IE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUikgeworKyAgICAgICAgcmVzdWx0LnJlc3VsdCA9 IFBST1ZOVU1fRV9XUk9OR19UWVBFOworKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKysgICAgfQor KworKyAgICBpZiAoc3JjLnNpemUgPT0gMCkgeworKyAgICAgICAgbWVtc2V0KGRlc3QuZGF0YSwg MCwgZGVzdC5zaXplKTsKKysgICAgICAgIHJldHVybiByZXN1bHQ7CisrICAgIH0KKysKKysgICAg LyogRXh0cmEgZGF0YSAqLworKyAgICBzaXplX3Qgc3JjbXNiID0gc3JjLmVuZGlhbiA9PSBCSUcg PyAwIDogc3JjLnNpemUgLSAxOworKyAgICBpbnQgc3JjbXNiMmxzYiA9IHNyYy5lbmRpYW4gPT0g QklHID8gMSA6IC0xOworKworKyAgICAvKgorKyAgICAgKiBJZiB0aGUgc291cmNlIGlzIGJpZ2dl ciB0aGFuIHRoZSBkZXN0aW5hdGlvbiwgYW5hbHlzZSB0byBzZWUgaWYgdGhlCisrICAgICAqIG1v c3Qgc2lnbmlmaWNhbnQgYnl0ZSBpcyBqdXN0IHBhZGRpbmcgdGhhdCBjYW4gYmUgaWdub3JlZC4K KysgICAgICogVGhlIHJ1bGVzIHRvIGRldGVybWluZSBpZiB0aGUgbW9zdCBzaWduaWZpY2FudCBi eXRlIGlzIGp1c3QgcGFkZGluZworKyAgICAgKiBhcmU6CisrICAgICAqCisrICAgICAqIDEuIHRo ZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZXF1YWxzIHNyY3NpZ25lZCwgd2hpY2gganVzdCBzbyBo YXBwZW5zCisrICAgICAqICAgIHRvIGhhdmUgdGhlIDIncyBjb21wbGVtZW50IHBhZGRpbmcgdmFs dWUuCisrICAgICAqIDIuIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgbmV4dCB0byBt b3N0IHNpZ25pZmljYW50IGJ5dGUKKysgICAgICogICAgZXF1YWxzIHRoZSBtb3N0IHNpZ25pZmlj YW50IGJpdCBvZiBzcmNzaWduZWQuCisrICAgICAqLworKyAgICBzaXplX3QgZW5kID0gZGVzdC5k YXRhID09IE5VTEwgPyAxIDogZGVzdC5zaXplOworKyAgICBmb3IgKDsgc3JjLnNpemUgPiBlbmQ7 IHNyY21zYiArPSBzcmNtc2IybHNiLCBzcmMuc2l6ZS0tKQorKyAgICAgICAgaWYgKCgodW5zaWdu ZWQgY2hhciAqKXNyYy5kYXRhKVtzcmNtc2JdICE9IHNyYy5zaWduCisrICAgICAgICAgICAgfHwg KCgoKHVuc2lnbmVkIGNoYXIgKilzcmMuZGF0YSlbc3JjbXNiICsgc3JjbXNiMmxzYl0gJiAweDgw KQorKyAgICAgICAgICAgICAgICAhPSAoc3JjLnNpZ24gJiAweDgwKSkpCisrICAgICAgICAgICAg YnJlYWs7CisrCisrICAgIGlmIChzcmMuc2l6ZSA+IGRlc3Quc2l6ZSkgeworKyAgICAgICAgcmVz dWx0LnJlc3VsdCA9IFBST1ZOVU1fRV9UT09CSUc7CisrICAgICAgICByZXR1cm4gcmVzdWx0Owor KyAgICB9CisrCisrICAgIHNpemVfdCBzcmNsc2IgPSBzcmNtc2IgKyBzcmNtc2IybHNiICogKHNy Yy5zaXplIC0gMSk7CisrCisrICAgIC8qIFNpbXBsZSBjYXNlLCBhbGwgc2lnbmlmaWNhbnQgZGV0 YWlscyBtYXRjaCAqLworKyAgICBpZiAoZGVzdC5lbmRpYW4gPT0gc3JjLmVuZGlhbgorKyAgICAg ICAgJiYgZGVzdC5saW1ic2l6ZSA9PSAxCisrICAgICAgICAmJiBkZXN0LmxpbWJuYWlsYml0cyA9 PSAwCisrICAgICAgICAmJiAoZGVzdC5kYXRhX3R5cGUgPT0gT1NTTF9QQVJBTV9JTlRFR0VSIHx8 IHNyYy5zaWduID09IFBPU0lUSVZFKSkgeworKworKyAgICAgICAgaWYgKHNyYy5zaXplIDwgZGVz dC5zaXplKSB7CisrICAgICAgICAgICAgc2l6ZV90IHBhZHN0YXJ0ID0gZGVzdC5lbmRpYW4gPT0g QklHID8gMCA6IGRlc3Quc2l6ZSAtIHNyYy5zaXplOworKworKyAgICAgICAgICAgIG1lbXNldCgo dW5zaWduZWQgY2hhciAqKWRlc3QuZGF0YSArIHBhZHN0YXJ0LCBzcmMuc2lnbiwKKysgICAgICAg ICAgICAgICAgICAgZGVzdC5zaXplIC0gc3JjLnNpemUpOworKyAgICAgICAgfQorKworKyAgICAg ICAgc2l6ZV90IGRlc3RzdGFydCA9IGRlc3QuZW5kaWFuID09IEJJRyA/IGRlc3Quc2l6ZSAtIHNy Yy5zaXplIDogMDsKKysgICAgICAgIHNpemVfdCBzcmNzdGFydCA9IHNyYy5lbmRpYW4gPT0gQklH ID8gc3JjbXNiIDogc3JjbHNiOworKworKyAgICAgICAgbWVtY3B5KCh1bnNpZ25lZCBjaGFyICop ZGVzdC5kYXRhICsgZGVzdHN0YXJ0LAorKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICop c3JjLmRhdGEgKyBzcmNzdGFydCwKKysgICAgICAgICAgICAgICBzcmMuc2l6ZSk7CisrICAgICAg ICByZXR1cm4gcmVzdWx0OworKyAgICB9CisrCisrICAgIC8qIENvbXBsZXggY2FzZSwgZm9yIHNp Z24gb3IgbGltYiBjb252ZXJzaW9uLiAgQ3VycmVudGx5IHVuc3VwcG9ydGVkICovCisrICAgIHJl c3VsdC5yZXN1bHQgPSBQUk9WTlVNX0VfVU5TVVBQT1JURUQ7CisrICAgIHJldHVybiByZXN1bHQ7 CisrfQorKworKyNkZWZpbmUgaW1wbGVtZW50X3Byb3ZudW0oVCwgRFQpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIGludCBwcm92bnVtX2dldF8jI1QoVCAqZGVzdCwgY29u c3QgT1NTTF9QQVJBTSAqcGFyYW0pICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZW5kaWFu X3QgZW5kaWFuID0gbmF0aXZlZW5kaWFuKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICBzdHJ1Y3QgbnVtZGVzYyBkZXN0bmQgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICBkZXN0LCBEVCwgc2l6ZW9mKFQpLCBlbmRpYW4sIFBPU0lUSVZF LCAxLCBlbmRpYW4sIDAgXAorKyAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBzdHJ1Y3QgbnVtZGVzYyBzcmNu ZCA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBwYXJh bS0+ZGF0YSwgcGFyYW0tPmRhdGFfdHlwZSwgcGFyYW0tPmRhdGFfc2l6ZSwgICAgXAorKyAgICAg ICAgICAgIGVuZGlhbiwgcGFyYW1zaWduKHBhcmFtKSwgMSwgZW5kaWFuLCAwICAgICAgICAgICAg ICBcCisrICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RydWN0IHJlc3VsdGRlc2MgcmVz dWx0ID0gcHJvdm51bV9jb3B5KGRlc3RuZCwgc3JjbmQpOyBcCisrICAgICAgICByZXR1cm4gcmVz dWx0LnJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICBpbnQgcHJvdm51bV9zZXRfIyNUKE9TU0xfUEFSQU0gKnBhcmFtLCBUIHNyYykgICAg ICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGVuZGlhbl90IGVuZGlhbiA9IG5hdGl2ZWVuZGlh bigpOyAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RydWN0IG51bWRlc2MgZGVz dG5kID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcGFy YW0tPmRhdGEsIHBhcmFtLT5kYXRhX3R5cGUsIHBhcmFtLT5kYXRhX3NpemUsICAgIFwKKysgICAg ICAgICAgICBlbmRpYW4sIFBPU0lUSVZFLCAxLCBlbmRpYW4sIDAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICBzdHJ1Y3QgbnVtZGVzYyBzcmNuZCA9IHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAmc3JjLCBEVCwgc2l6ZW9m KFQpLCBlbmRpYW4sIFBPU0lUSVZFLCAxLCBlbmRpYW4sIDAgXAorKyAgICAgICAgfTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgIHN0cnVjdCByZXN1bHRkZXNjIHJlc3VsdCA9IHByb3ZudW1fY29weShkZXN0 bmQsIHNyY25kKTsgXAorKyAgICAgICAgcGFyYW0tPnJldHVybl9zaXplID0gcmVzdWx0LnNpemU7 ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworK2ltcGxlbWVu dF9wcm92bnVtKHNpemVfdCwgT1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VSKQorKworKyNlbmRp ZiAvKiBXSVRIX09QRU5TU0wzICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9udW0u aCBvcGVuc3NoLTEwLjVwMS9udW0uaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvbnVtLmgJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9udW0u aAkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MDk0NDI5MiArMDIwMAorQEAgLTAsMCArMSwxNSBAQAor Ky8qIENDMCBsaWNlbnNlIGFwcGxpZWQsIHNlZSBMSUNFTkNFLm1kICovCisrCisrI2luY2x1ZGUg ImluY2x1ZGVzLmgiCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMKKysKKysjaW5jbHVkZSA8b3BlbnNz bC9jb3JlLmg+CisrCisrLyogQ29udmVydCBiZXR3ZWVuIE9TU0xfUEFSQU0gYW5kIHNpemVfdCAq LworK2ludCBwcm92bnVtX2dldF9zaXplX3Qoc2l6ZV90ICpkZXN0LCBjb25zdCBPU1NMX1BBUkFN ICpwYXJhbSk7CisraW50IHByb3ZudW1fc2V0X3NpemVfdChPU1NMX1BBUkFNICpwYXJhbSwgc2l6 ZV90IHNyYyk7CisrCisrI2RlZmluZSBQUk9WTlVNX0VfV1JPTkdfVFlQRSAgICAtMQorKyNkZWZp bmUgUFJPVk5VTV9FX1RPT0JJRyAgICAgICAgLTIKKysjZGVmaW5lIFBST1ZOVU1fRV9VTlNVUFBP UlRFRCAgIC0zCisrI2VuZGlmIC8qIFdJVEhfT1BFTlNTTDMgKi8KK2RpZmYgLU51ciBvcGVuc3No LTEwLjVwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5jIG9wZW5zc2gtMTAuNXAxL29zc2wzLXBy b3ZpZGVyLWVyci5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9vc3NsMy1wcm92aWRlci1lcnIu YwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuNXAx L29zc2wzLXByb3ZpZGVyLWVyci5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODkwOTgyMjA0ICswMjAw CitAQCAtMCwwICsxLDEwOCBAQAorKy8qIENDMCBsaWNlbnNlIGFwcGxpZWQsIHNlZSBMSUNFTkNF Lm1kICovCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysj aW5jbHVkZSAib3NzbDMtcHJvdmlkZXItZXJyLmgiCisrCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMK KysKKytzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgeworKyAgY29uc3QgT1NTTF9DT1JFX0hB TkRMRSAqY29yZTsKKysgIE9TU0xfRlVOQ19jb3JlX25ld19lcnJvcl9mbiAqY29yZV9uZXdfZXJy b3I7CisrICBPU1NMX0ZVTkNfY29yZV9zZXRfZXJyb3JfZGVidWdfZm4gKmNvcmVfc2V0X2Vycm9y X2RlYnVnOworKyAgT1NTTF9GVU5DX2NvcmVfdnNldF9lcnJvcl9mbiAqY29yZV92c2V0X2Vycm9y OworK307CisrCisrc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICoKKytwcm92ZXJyX25ld19o YW5kbGUoY29uc3QgT1NTTF9DT1JFX0hBTkRMRSAqY29yZSwgY29uc3QgT1NTTF9ESVNQQVRDSCAq ZGlzcGF0Y2gpCisreworKyAgLyoKKysgICAqIGxpYmNyeXB0byBnaXZlcyBwcm92aWRlcnMgdGhl IHRvb2xzIHRvIGNyZWF0ZSBlcnJvciByb3V0aW5lcyBzaW1pbGFyCisrICAgKiB0byB0aGUgb25l cyBkZWZpbmVkIGluIDxvcGVuc3NsL2Vyci5oPgorKyAgICovCisrICBPU1NMX0ZVTkNfY29yZV9u ZXdfZXJyb3JfZm4gKmNfbmV3X2Vycm9yID0gTlVMTDsKKysgIE9TU0xfRlVOQ19jb3JlX3NldF9l cnJvcl9kZWJ1Z19mbiAqY19zZXRfZXJyb3JfZGVidWcgPSBOVUxMOworKyAgT1NTTF9GVU5DX2Nv cmVfdnNldF9lcnJvcl9mbiAqY192c2V0X2Vycm9yID0gTlVMTDsKKysgIHN0cnVjdCBwcm92ZXJy X2Z1bmN0aW9uc19zdCAqaGFuZGxlID0gTlVMTDsKKysKKysgIGFzc2VydChjb3JlICE9IE5VTEwp OworKyAgYXNzZXJ0KGRpc3BhdGNoICE9IE5VTEwpOworKworKyNpZm5kZWYgREVCVUcKKysgIGlm IChjb3JlID09IE5VTEwgfHwgZGlzcGF0Y2ggPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7Cisr I2VuZGlmCisrCisrICBmb3IgKDsgZGlzcGF0Y2gtPmZ1bmN0aW9uX2lkICE9IDA7IGRpc3BhdGNo KyspCisrICAgIHN3aXRjaCAoZGlzcGF0Y2gtPmZ1bmN0aW9uX2lkKSB7CisrICAgIGNhc2UgT1NT TF9GVU5DX0NPUkVfTkVXX0VSUk9SOgorKyAgICAgIGNfbmV3X2Vycm9yID0gT1NTTF9GVU5DX2Nv cmVfbmV3X2Vycm9yKGRpc3BhdGNoKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPU1NMX0ZV TkNfQ09SRV9TRVRfRVJST1JfREVCVUc6CisrICAgICAgY19zZXRfZXJyb3JfZGVidWcgPSBPU1NM X0ZVTkNfY29yZV9zZXRfZXJyb3JfZGVidWcoZGlzcGF0Y2gpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIE9TU0xfRlVOQ19DT1JFX1ZTRVRfRVJST1I6CisrICAgICAgY192c2V0X2Vycm9yID0g T1NTTF9GVU5DX2NvcmVfdnNldF9lcnJvcihkaXNwYXRjaCk7CisrICAgICAgYnJlYWs7CisrICAg IH0KKysKKysgIGFzc2VydChjX25ld19lcnJvciAhPSBOVUxMKTsKKysgIGFzc2VydChjX3NldF9l cnJvcl9kZWJ1ZyAhPSBOVUxMKTsKKysgIGFzc2VydChjX3ZzZXRfZXJyb3IgIT0gTlVMTCk7Cisr CisrI2lmZGVmIE5ERUJVRworKyAgaWYgKGNfbmV3X2Vycm9yID09IE5VTEwgfHwgY19zZXRfZXJy b3JfZGVidWcgPT0gTlVMTCB8fCBjX3ZzZXRfZXJyb3IgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5V TEw7CisrI2VuZGlmCisrCisrICBpZiAoKGhhbmRsZSA9IG1hbGxvYyhzaXplb2YoKmhhbmRsZSkp KSAhPSBOVUxMKSB7CisrICAgIGhhbmRsZS0+Y29yZSA9IGNvcmU7CisrICAgIGhhbmRsZS0+Y29y ZV9uZXdfZXJyb3IgPSBjX25ld19lcnJvcjsKKysgICAgaGFuZGxlLT5jb3JlX3NldF9lcnJvcl9k ZWJ1ZyA9IGNfc2V0X2Vycm9yX2RlYnVnOworKyAgICBoYW5kbGUtPmNvcmVfdnNldF9lcnJvciA9 IGNfdnNldF9lcnJvcjsKKysgIH0KKysgIHJldHVybiBoYW5kbGU7CisrfQorKworK3N0cnVjdCBw cm92ZXJyX2Z1bmN0aW9uc19zdCAqCisrcHJvdmVycl9kdXBfaGFuZGxlKHN0cnVjdCBwcm92ZXJy X2Z1bmN0aW9uc19zdCAqc3JjKQorK3sKKysgIHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAq ZHN0ID0gTlVMTDsKKysKKysgIGlmIChzcmMgIT0gTlVMTAorKyAgICAgICYmIChkc3QgPSBtYWxs b2Moc2l6ZW9mKCpkc3QpKSkgIT0gTlVMTCkgeworKyAgICBkc3QtPmNvcmUgPSBzcmMtPmNvcmU7 CisrICAgIGRzdC0+Y29yZV9uZXdfZXJyb3IgPSBzcmMtPmNvcmVfbmV3X2Vycm9yOworKyAgICBk c3QtPmNvcmVfc2V0X2Vycm9yX2RlYnVnID0gc3JjLT5jb3JlX3NldF9lcnJvcl9kZWJ1ZzsKKysg ICAgZHN0LT5jb3JlX3ZzZXRfZXJyb3IgPSBzcmMtPmNvcmVfdnNldF9lcnJvcjsKKysgIH0KKysg IHJldHVybiBkc3Q7CisrfQorKworK3ZvaWQgcHJvdmVycl9mcmVlX2hhbmRsZShzdHJ1Y3QgcHJv dmVycl9mdW5jdGlvbnNfc3QgKmhhbmRsZSkKKyt7CisrICBmcmVlKGhhbmRsZSk7CisrfQorKwor K3ZvaWQgcHJvdmVycl9uZXdfZXJyb3IoY29uc3Qgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0 ICpoYW5kbGUpCisreworKyAgaGFuZGxlLT5jb3JlX25ld19lcnJvcihoYW5kbGUtPmNvcmUpOwor K30KKysKKyt2b2lkIHByb3ZlcnJfc2V0X2Vycm9yX2RlYnVnKGNvbnN0IHN0cnVjdCBwcm92ZXJy X2Z1bmN0aW9uc19zdCAqaGFuZGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMpCisreworKyAgaGFuZGxl LT5jb3JlX3NldF9lcnJvcl9kZWJ1ZyhoYW5kbGUtPmNvcmUsIGZpbGUsIGxpbmUsIGZ1bmMpOwor K30KKysKKyt2b2lkIHByb3ZlcnJfc2V0X2Vycm9yKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0 aW9uc19zdCAqaGFuZGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVhc29u LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFwOworKworKyAgdmFfc3Rh cnQoYXAsIGZtdCk7CisrICBoYW5kbGUtPmNvcmVfdnNldF9lcnJvcihoYW5kbGUtPmNvcmUsIHJl YXNvbiwgZm10LCBhcCk7CisrICB2YV9lbmQoYXApOworK30KKysKKysjZW5kaWYgLyogV0lUSF9P UEVOU1NMMyAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvb3NzbDMtcHJvdmlkZXIt ZXJyLmggb3BlbnNzaC0xMC41cDEvb3NzbDMtcHJvdmlkZXItZXJyLmgKKy0tLSBvcGVuc3NoLTEw LjVwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzaC0xMC41cDEvb3NzbDMtcHJvdmlkZXItZXJyLmgJMjAyNi0w OS0yMSAwNzowNjo1OS44OTEwMTk4NDUgKzAyMDAKK0BAIC0wLDAgKzEsNzMgQEAKKysvKiBDQzAg bGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAqLworKworKyNpbmNsdWRlICJpbmNsdWRl cy5oIgorKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2NvcmUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX2Rpc3BhdGNoLmg+ CisrCisrLyoKKysgKiBUaGUgaWRlYSB3aXRoIHRoaXMgbGlicmFyeSBpcyB0byByZXBsYWNlIE9w ZW5TU0wncyBFUlJfcmFpc2UoKSBhbmQKKysgKiBFUlJfcmFpc2VfZGF0YSgpIHdpdGggdmFyaWFu dHMgdGhhdCBhcmUgbW9yZSBzdWl0YWJsZSBmb3IgcHJvdmlkZXJzIHRoYXQKKysgKiBoYXZlIHRo ZWlyIG93biBlcnJvciByZWFzb24gdGFibGUuCisrICoKKysgKiBUaGlzIGFzc3VtZXMgdmFyaWFk aWMgZnVuY3Rpb24tbGlrZSBtYWNyb3MsIGkuZS4gQzk5IG9yIG5ld2VyLgorKyAqCisrICogQSBt aW5pbWFsIGFtb3VudCBvZiBwcmVwYXJhdGlvbiBpcyBuZWVkZWQgb24gcHJvdmlkZXIgaW5pdGlh bGl6YXRpb24gYW5kCisrICogdGFrZWRvd246CisrICoKKysgKiAxLiAgVGhlIHByb3ZpZGVyJ3Mg b3V0Z29pbmcgT1NTTF9ESVNQQVRDSCB0YWJsZSBtdXN0IGluY2x1ZGUgYW4gZW50cnkKKysgKiAg ICAgZ290IE9TU0xfRlVOQ19QUk9WSURFUl9HRVRfUkVBU09OX1NUUklOR1MsIHdpdGggYSBmdW5j dGlvbiB0aGF0IHJldHVybnMKKysgKiAgICAgdGhlIHByb3ZpZGVyJ3MgdGFibGUgb2YgcmVhc29u cy4KKysgKiAgICAgVGhhdCB0YWJsZSBvZiByZWFzb25zIGlzIGEgc2ltcGxlIE9TU0xfSVRFTSBh cnJheSwgd2hlcmUgZWFjaCBlbGVtZW50CisrICogICAgIGNvbnRhaW5zIGEgbnVtZXJpYyByZWFz b24gaWRlbnRpdHkgZm9yIHRoZSByZWFzb24sIGFuZCB0aGUgZGVzY3JpcHRpb24KKysgKiAgICAg dGV4dCBzdHJpbmcgZm9yIHRoYXQgcmVhc29uLgorKyAqICAgICBFYWNoIG51bWVyaWMgcmVhc29u IGlkZW50aXR5IE1VU1QgYmUgdW5pcXVlIHdpdGhpbiB0aGlzIGFycmF5LgorKyAqCisrICogMi4g IE9uIHByb3ZpZGVyIGluaXRpYWxpemF0aW9uLCBhbiBlcnJvciBoYW5kbGUgbXVzdCBiZSBjcmVh dGVkIHVzaW5nCisrICogICAgIHByb3ZlcnJfbmV3X2hhbmRsZSgpLiAgVGhlIHJldHVybmVkIHBv aW50ZXIgaXMgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50CisrICogICAgIHRvIEVSUl9yYWlzZSgp IGFuZCBFUlJfcmFpc2VfZGF0YSgpLgorKyAqCisrICogMy4gIE9uIHByb3ZpZGVyIHRha2Vkb3du LCB0aGUgZXJyb3IgaGFuZGxlIG11c3QgYmUgZnJlZWQsIHVzaW5nCisrICogICAgIHByb3ZlcnJf ZnJlZV9oYW5kbGUoKS4KKysgKgorKyAqIFdpdGggdGhpcyBwcmVwYXJhdGlvbiwgdGhlIHByb3Zp ZGVyIGNvZGUgY2FuIHVzZSBFUlJfcmFpc2UoKSBhbmQKKysgKiBFUlJfcmFpc2VfZGF0YSgpICJh cyB1c3VhbCIsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBpcwor KyAqIHRoZSBlcnJvciBoYW5kbGUgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIE9wZW5TU0wgRVJSX0xJ Ql8gbWFjcm9zLgorKyAqLworKworKy8qCisrICogSW4gY2FzZSA8b3BlbnNzbC9lcnIuaD4gd2Fz IGluY2x1ZGVkLCB3ZSB0aHJvdyBhd2F5IGl0cyBlcnJvciByZWNvcmRpbmcKKysgKiBtYWNyb3Mu CisrICogTm90ZSB0aGF0IEVSUl9wdXRfZXJyb3IoKSBpcyBOT1QgcmVjcmVhdGVkLiAgSXQncyBk ZXByZWNhdGVkIGFuZCBzaG91bGQgbm90CisrICogYmUgdXNlZCBhbnkgbW9yZS4KKysgKi8KKysj dW5kZWYgRVJSX3B1dF9lcnJvcgorKyN1bmRlZiBFUlJfcmFpc2UKKysjdW5kZWYgRVJSX3JhaXNl X2RhdGEKKysKKysjZGVmaW5lIEVSUl9yYWlzZShoYW5kbGUsIHJlYXNvbikgRVJSX3JhaXNlX2Rh dGEoKGhhbmRsZSksKHJlYXNvbiksTlVMTCkKKysKKysjZGVmaW5lIEVSUl9yYWlzZV9kYXRhKGhh bmRsZSwgcmVhc29uLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg KHByb3ZlcnJfbmV3X2Vycm9yKGhhbmRsZSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgcHJvdmVycl9zZXRfZXJyb3JfZGVidWcoaGFuZGxlLCBP UEVOU1NMX0ZJTEUsT1BFTlNTTF9MSU5FLE9QRU5TU0xfRlVOQyksIFwKKysgICBwcm92ZXJyX3Nl dF9lcnJvcihoYW5kbGUsIHJlYXNvbiwgX19WQV9BUkdTX18pKQorKworKy8qCisrICogVGhlIHN0 cnVjdHVyZSB3aGVyZSB0aGUgbGliY3J5cHRvIGNvcmUgaGFuZGxlIGFuZCBjb3JlIGZ1bmN0aW9u cyBhcmUKKysgKiBjYXB0dXJlZC4KKysgKi8KKytzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3Q7 CisrCisrc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICoKKytwcm92ZXJyX25ld19oYW5kbGUo Y29uc3QgT1NTTF9DT1JFX0hBTkRMRSAqY29yZSwgY29uc3QgT1NTTF9ESVNQQVRDSCAqaW4pOwor K3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCisrcHJvdmVycl9kdXBfaGFuZGxlKHN0cnVj dCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqc3JjKTsKKyt2b2lkIHByb3ZlcnJfZnJlZV9oYW5kbGUo c3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUpOworKworK3ZvaWQgcHJvdmVycl9u ZXdfZXJyb3IoY29uc3Qgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUpOworK3Zv aWQgcHJvdmVycl9zZXRfZXJyb3JfZGVidWcoY29uc3Qgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25z X3N0ICpoYW5kbGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpm aWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYyk7Cisrdm9pZCBwcm92ZXJyX3NldF9lcnJv cihjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmhhbmRsZSwKKysgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IHJlYXNvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworKyNl bmRpZiAvKiBXSVRIX09QRU5TU0wzICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9w YWNrZXQuYyBvcGVuc3NoLTEwLjVwMS9wYWNrZXQuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcv cGFja2V0LmMJMjAyNi0wOS0yMSAwNzowNjowNS4yOTE0Nzc4NzcgKzAyMDAKKysrKyBvcGVuc3No LTEwLjVwMS9wYWNrZXQuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MTEzMTYzOCArMDIwMAorQEAg LTg0LDYgKzg0LDcgQEAKKyAjaW5jbHVkZSAibWFjLmgiCisgI2luY2x1ZGUgImxvZy5oIgorICNp bmNsdWRlICJjYW5vaG9zdC5oIgorKyNpbmNsdWRlICJjaGFubmVscy5oIgorICNpbmNsdWRlICJt aXNjLmgiCisgI2luY2x1ZGUgInBhY2tldC5oIgorICNpbmNsdWRlICJzc2hlcnIuaCIKK0BAIC05 NSw3ICs5NiwyMCBAQAorICNkZWZpbmUgREJHKHgpCisgI2VuZGlmCisgCistI2RlZmluZSBQQUNL RVRfTUFYX1NJWkUgKDI1NiAqIDEwMjQpCisrLyogT3BlblNTSCB1c2luZ3MgMjU2S0IgcGFja2V0 IHNpemUgbWF4IGJ1dCB0aGF0IGNvbnN1bWVzIGEKKysgKiBsb3Qgb2YgbWVtb3J5IHdpdGggdGhl IGJ1ZmZlcnMgd2UgYXJlIHVzaW5nLiBIb3dldmVyLCB3ZSBuZWVkCisrICogYSBsYXJnZSBwYWNr ZXQgc2l6ZSBpZiB0aGUgYmFubmVyIHRoYXQncyBiZWluZyBzZW50IGlzIGxhcmdlLgorKyAqIFNv IHdlIG5lZWQgYSAyNTZLQiBwYWNrZXQgcHJlIGF1dGhlbnRpY2F0aW9uIGFuZCBhIHNtYWxsZXIg b25lCisrICogaW4gdGhpcyBjYXNlIFNTSF9JT0JVRlNaICsgMUtCLCBhZnRlcndhcmRzLiBTbyB3 ZSBjaGFuZ2UKKysgKiBQQUNLRVRfTUFYX1NJWkUgZnJvbSBhICNkZWZpbmUgdG8gYSBnbG9iYWwu IFRoZW4sIGluIHRoZSBmdW5jdGlvbgorKyAqIHNzaF9wYWNrZXRfc2V0X2F1dGhlbnRjYXRlZCB3 ZSByZWR1Y2UgdGhlIHNpemUgdG8gc29tZXRoaW5nCisrICogbW9yZSBtZW1vcnkgZWZmaWNpZW50 LiAtY2pyIDA0LzA3LzIzCisrICovCisrdV9pbnQgcGFja2V0X21heF9zaXplID0gMjU2ICogMTAy NDsKKysKKysvKiBnbG9iYWwgdG8gc3VwcG9ydCBmb3JjZWQgcmVrZXlpbmcgKi8KKytpbnQgcmVr ZXlfcmVxdWVzdGVkID0gMDsKKysKKyAKKyBzdHJ1Y3QgcGFja2V0X3N0YXRlIHsKKyAJdWludDMy X3Qgc2VxbnI7CitAQCAtMjQ1LDEyICsyNTksMjMgQEAKKyAJICAgIChzdGF0ZS0+b3V0Z29pbmdf cGFja2V0ID0gc3NoYnVmX25ldygpKSA9PSBOVUxMIHx8CisgCSAgICAoc3RhdGUtPmluY29taW5n X3BhY2tldCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKyAJCWdvdG8gZmFpbDsKKysJLyogdGhl c2UgYnVmZmVycyBhcmUgaW1wb3J0YW50IGluIHRlcm1zIG9mIHRyYWNraW5nIGJ1ZmZlciB1c2Fn ZQorKwkgKiBzbyB3ZSBleHBsaWNpdGx5IGxhYmVsIGFuZCB0eXBlIHRoZW0gd2l0aCBkZXNjcmlw dGl2ZSBuYW1lcyAqLworKwlzc2hidWZfcmVsYWJlbChzdGF0ZS0+aW5wdXQsICJpbnB1dCIpOwor Kwlzc2hidWZfdHlwZShzdGF0ZS0+aW5wdXQsIEJVRl9QQUNLRVRfSU5QVVQpOworKwlzc2hidWZf cmVsYWJlbChzdGF0ZS0+aW5jb21pbmdfcGFja2V0LCAiaW5wYWNrZXQiKTsKKysJc3NoYnVmX3R5 cGUoc3RhdGUtPmluY29taW5nX3BhY2tldCwgQlVGX1BBQ0tFVF9JTkNPTUlORyk7CisrCXNzaGJ1 Zl9yZWxhYmVsKHN0YXRlLT5vdXRwdXQsICJvdXRwdXQiKTsKKysJc3NoYnVmX3R5cGUoc3RhdGUt Pm91dHB1dCwgQlVGX1BBQ0tFVF9PVVRQVVQpOworKwlzc2hidWZfcmVsYWJlbChzdGF0ZS0+b3V0 Z29pbmdfcGFja2V0LCAib3V0cGFja2V0Iik7CisrCXNzaGJ1Zl90eXBlKHN0YXRlLT5vdXRnb2lu Z19wYWNrZXQsIEJVRl9QQUNLRVRfT1VUR09JTkcpOworKworIAlUQUlMUV9JTklUKCZzdGF0ZS0+ b3V0Z29pbmcpOworIAlUQUlMUV9JTklUKCZzc2gtPnByaXZhdGVfa2V5cyk7CisgCVRBSUxRX0lO SVQoJnNzaC0+cHVibGljX2tleXMpOworIAlzdGF0ZS0+Y29ubmVjdGlvbl9pbiA9IC0xOworIAlz dGF0ZS0+Y29ubmVjdGlvbl9vdXQgPSAtMTsKKy0Jc3RhdGUtPm1heF9wYWNrZXRfc2l6ZSA9IDMy NzY4OworKwlzdGF0ZS0+bWF4X3BhY2tldF9zaXplID0gQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQ7 CisgCXN0YXRlLT5wYWNrZXRfdGltZW91dF9tcyA9IC0xOworIAlzdGF0ZS0+aW50ZXJhY3RpdmVf bW9kZSA9IDE7CisgCXN0YXRlLT5xb3NfaW50ZXJhY3RpdmUgPSBzdGF0ZS0+cW9zX290aGVyID0g LTE7CitAQCAtMzE4LDkgKzM0MywxMSBAQAorIAlzdGF0ZS0+Y29ubmVjdGlvbl9pbiA9IGZkX2lu OworIAlzdGF0ZS0+Y29ubmVjdGlvbl9vdXQgPSBmZF9vdXQ7CisgCWlmICgociA9IGNpcGhlcl9p bml0KCZzdGF0ZS0+c2VuZF9jb250ZXh0LCBub25lLAorLQkgICAgKGNvbnN0IHVfY2hhciAqKSIi LCAwLCBOVUxMLCAwLCBDSVBIRVJfRU5DUllQVCkpICE9IDAgfHwKKysJICAgIChjb25zdCB1X2No YXIgKikiIiwgMCwgTlVMTCwgMCwgMCwgQ0lQSEVSX0VOQ1JZUFQsCisrCSAgICBzdGF0ZS0+YWZ0 ZXJfYXV0aGVudGljYXRpb24pKSAhPSAwIHx8CisgCSAgICAociA9IGNpcGhlcl9pbml0KCZzdGF0 ZS0+cmVjZWl2ZV9jb250ZXh0LCBub25lLAorLQkgICAgKGNvbnN0IHVfY2hhciAqKSIiLCAwLCBO VUxMLCAwLCBDSVBIRVJfREVDUllQVCkpICE9IDApIHsKKysJICAgIChjb25zdCB1X2NoYXIgKiki IiwgMCwgTlVMTCwgMCwgMCwgQ0lQSEVSX0RFQ1JZUFQsCisrCSAgICBzdGF0ZS0+YWZ0ZXJfYXV0 aGVudGljYXRpb24pKSAhPSAwKSB7CisgCQllcnJvcl9mcihyLCAiY2lwaGVyX2luaXQgZmFpbGVk Iik7CisgCQlpZiAod2FzbnVsbCkKKyAJCQlmcmVlKHNzaCk7IC8qIFhYWCBuZWVkIHNzaF9mcmVl X3Nlc3Npb25fc3RhdGU/ICovCitAQCAtMzkyLDcgKzQxOSw3IEBACisgCisgCWlmIChzdGF0ZS0+ cGFja2V0X2Rpc2NhcmRfbWFjKSB7CisgCQljaGFyIGJ1ZlsxMDI0XTsKKy0JCXNpemVfdCBkbGVu ID0gUEFDS0VUX01BWF9TSVpFOworKwkJc2l6ZV90IGRsZW4gPSBwYWNrZXRfbWF4X3NpemU7Cisg CisgCQlpZiAoZGxlbiA+IHN0YXRlLT5wYWNrZXRfZGlzY2FyZF9tYWNfYWxyZWFkeSkKKyAJCQlk bGVuIC09IHN0YXRlLT5wYWNrZXRfZGlzY2FyZF9tYWNfYWxyZWFkeTsKK0BAIC05OTgsNiArMTAy NSw3IEBACisgCWNvbnN0IGNoYXIgKndtc2c7CisgCWludCByLCBjcnlwdF90eXBlOworIAljb25z dCBjaGFyICpkaXIgPSBtb2RlID09IE1PREVfT1VUID8gIm91dCIgOiAiaW4iOworKwljaGFyIGJs b2Nrc19zW0ZNVF9TQ0FMRURfU1RSU0laRV0sIGJ5dGVzX3NbRk1UX1NDQUxFRF9TVFJTSVpFXTsK KyAKKyAJZGVidWcyX2YoIm1vZGUgJWQiLCBtb2RlKTsKKyAKK0BAIC0xMDM4LDEyICsxMDY2LDMy IEBACisgCQlpZiAoKHIgPSBtYWNfaW5pdChtYWMpKSAhPSAwKQorIAkJCXJldHVybiByOworIAl9 CistCW1hYy0+ZW5hYmxlZCA9IDE7CisrCisrCS8qIGlmIHdlIGFyZSB1c2luZyBOT05FIE1BQyB0 aGVuIHdlIGRvbid0IG5lZWQgdG8gZW5hYmxlIHRoZQorKwkgKiBtYWMgcm91dGluZXMuIFRoaXMg ZGlzYWJsZXMgdGhlbSBhbmQgd2UgY2FuIGNsYXcgYmFjayBzb21lIGN5Y2xlcworKwkgKiBmcm9t IHRoZSBDUFUgLWNqciAzLzIxLzIwMjMgKi8KKysJaWYgKHNzaC0+bm9uZV9tYWMgIT0gMSkKKysJ CW1hYy0+ZW5hYmxlZCA9IDE7CisrCisgCURCRyhkZWJ1Z19mKCJjaXBoZXJfaW5pdDogJXMiLCBk aXIpKTsKKyAJY2lwaGVyX2ZyZWUoKmNjcCk7CisgCSpjY3AgPSBOVUxMOworKyNpZmRlZiBXSVRI X09QRU5TU0wKKysJaWYgKHN0cmNtcChlbmMtPm5hbWUsICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBo cG5zc2gub3JnIikgPT0gMCkgeworKwkJaWYgKHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbikK KysJCQllbmMtPmNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKAorKwkJCSAgICAiY2hhY2hhMjAtcG9s eTEzMDUtbXRAaHBuc3NoLm9yZyIpOworKwkJZWxzZQorKwkJCWVuYy0+Y2lwaGVyID0gY2lwaGVy X2J5X25hbWUoCisrCQkJICAgICJjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSIpOworKwkJ aWYgKGVuYy0+Y2lwaGVyID09IE5VTEwpCisrCQkJcmV0dXJuIHI7CisrCX0KKysjZW5kaWYKKyAJ aWYgKChyID0gY2lwaGVyX2luaXQoY2NwLCBlbmMtPmNpcGhlciwgZW5jLT5rZXksIGVuYy0+a2V5 X2xlbiwKKy0JICAgIGVuYy0+aXYsIGVuYy0+aXZfbGVuLCBjcnlwdF90eXBlKSkgIT0gMCkKKysJ ICAgIGVuYy0+aXYsIGVuYy0+aXZfbGVuLAorKwkgICAgY3J5cHRfdHlwZSA/IHN0YXRlLT5wX3Nl bmQuc2VxbnIgOiBzdGF0ZS0+cF9yZWFkLnNlcW5yLAorKwkgICAgY3J5cHRfdHlwZSwgc3RhdGUt PmFmdGVyX2F1dGhlbnRpY2F0aW9uICYmIHNzaC0+bXRfZW5hYmxlZCkpICE9IDApCisgCQlyZXR1 cm4gcjsKKyAJaWYgKCFzdGF0ZS0+Y2lwaGVyX3dhcm5pbmdfZG9uZSAmJgorIAkgICAgKHdtc2cg PSBjaXBoZXJfd2FybmluZ19tZXNzYWdlKCpjY3ApKSAhPSBOVUxMKSB7CitAQCAtMTA2NywyNSAr MTExNSw0NiBAQAorIAkJfQorIAkJY29tcC0+ZW5hYmxlZCA9IDE7CisgCX0KKy0JLyoKKy0JICog VGhlIDJeKGJsb2Nrc2l6ZSoyKSBsaW1pdCBpcyB0b28gZXhwZW5zaXZlIGZvciAzREVTLAorLQkg KiBzbyBlbmZvcmNlIGEgMUdCIGxpbWl0IGZvciBzbWFsbCBibG9ja3NpemVzLgorLQkgKiBTZWUg UkZDNDM0NCBzZWN0aW9uIDMuMi4KKy0JICovCistCWlmIChlbmMtPmJsb2NrX3NpemUgPj0gMTYp CistCQkqaGFyZF9tYXhfYmxvY2tzID0gKHVpbnQ2NF90KTEgPDwgKGVuYy0+YmxvY2tfc2l6ZSoy KTsKKy0JZWxzZQorLQkJKmhhcmRfbWF4X2Jsb2NrcyA9ICgodWludDY0X3QpMSA8PCAzMCkgLyBl bmMtPmJsb2NrX3NpemU7CisrCS8qIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHRo ZSBjaXBoZXIgY2FuCisrCSAqIGhhbmRsZSBzYWZlbHkgKi8KKysJKmhhcmRfbWF4X2Jsb2NrcyA9 IGNpcGhlcl9yZWtleV9ibG9ja3MoZW5jLT5jaXBoZXIpOworIAkqbWF4X2Jsb2NrcyA9ICpoYXJk X21heF9ibG9ja3M7CisrCisrCS8qIGlmIHdlIGhhdmUgYSBjdXN0b20gb1Jla2V5TGltaXQgdXNl IHRoYXQuICovCisgCWlmIChzdGF0ZS0+cmVrZXlfbGltaXQpIHsKKyAJCSptYXhfYmxvY2tzID0g TUlOSU1VTSgqbWF4X2Jsb2NrcywKKyAJCSAgICBzdGF0ZS0+cmVrZXlfbGltaXQgLyBlbmMtPmJs b2NrX3NpemUpOworIAl9CistCWRlYnVnKCJyZWtleSAlcyBhZnRlciAlbGx1IGJsb2NrcyIsIGRp ciwKKy0JICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKm1heF9ibG9ja3MpOworKworKwkvKiB0aGVz ZSBsaW5lcyBzdXBwb3J0IHRoZSBkZWJ1ZyAqLworKwlzdHJsY3B5KGJsb2Nrc19zLCAiPyIsIHNp emVvZihibG9ja3NfcykpOworKwlzdHJsY3B5KGJ5dGVzX3MsICI/Iiwgc2l6ZW9mKGJ5dGVzX3Mp KTsKKysJaWYgKCptYXhfYmxvY2tzICogZW5jLT5ibG9ja19zaXplIDwgTExPTkdfTUFYKSB7Cisr CQlmbXRfc2NhbGVkKChsb25nIGxvbmcpKm1heF9ibG9ja3MsIGJsb2Nrc19zKTsKKysJCWZtdF9z Y2FsZWQoKGxvbmcgbG9uZykqbWF4X2Jsb2NrcyAqIGVuYy0+YmxvY2tfc2l6ZSwgYnl0ZXNfcyk7 CisrCX0KKysJZGVidWcoInJla2V5ICVzIGFmdGVyICVzIGJsb2NrcyAvICVzQiBkYXRhIiwgZGly LCBibG9ja3NfcywgYnl0ZXNfcyk7CisrCisgCXJldHVybiAwOworIH0KKyAKKysvKiB0aGlzIHN1 cHBvcnRzIHRoZSBmb3JjZWQgcmVrZXlpbmcgcmVxdWlyZWQgZm9yIHRoZSBOT05FIGNpcGhlciAq LworK3ZvaWQKKytwYWNrZXRfcmVxdWVzdF9yZWtleWluZyh2b2lkKQorK3sKKysJcmVrZXlfcmVx dWVzdGVkID0gMTsKKyt9CisrCisrLyogdXNlZCB0byBkZXRlcm1pbmUgaWYgcHJlIG9yIHBvc3Qg YXV0aCB3aGVuIHJla2V5aW5nIGZvciBhZXMtY3RyCisrICogYW5kIG5vbmUgY2lwaGVyIHN3aXRj aCAqLworK2ludAorK3BhY2tldF9hdXRoZW50aWNhdGlvbl9zdGF0ZShjb25zdCBzdHJ1Y3Qgc3No ICpzc2gpCisreworKwlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0ZSAqc3RhdGUgPSBzc2gtPnN0YXRlOwor KworKwlyZXR1cm4gc3RhdGUtPmFmdGVyX2F1dGhlbnRpY2F0aW9uOworK30KKysKKyAjZGVmaW5l IE1BWF9QQUNLRVRTCSgxVTw8MzEpCisgLyoKKyAgKiBDaGVja3Mgd2hldGhlciB0aGUgcGFja2V0 LSBvciBibG9jay0gYmFzZWQgcmVrZXlpbmcgbGltaXRzIGhhdmUgYmVlbgorQEAgLTExNDMsNiAr MTIxMiwxNCBAQAorIAlpZiAoc3RhdGUtPnBfc2VuZC5wYWNrZXRzID09IDAgJiYgc3RhdGUtPnBf cmVhZC5wYWNrZXRzID09IDApCisgCQlyZXR1cm4gMDsKKyAKKysgICAgICAgIC8qIHVzZWQgdG8g Zm9yY2UgcmVrZXlpbmcgd2hlbiBjYWxsZWQgZm9yIGJ5IHRoZSBub25lCisrICAgICAgICAgKiBj aXBoZXIgc3dpdGNoIGFuZCBhZXMtbXQtY3RyIG1ldGhvZHMgLWNqciAqLworKyAgICAgICAgaWYg KHJla2V5X3JlcXVlc3RlZCA9PSAxKSB7CisrCQlkZWJ1Z19mKCJHb3QgdGhlIHJla2V5IHJlcXVl c3QiKTsKKysJCXJla2V5X3JlcXVlc3RlZCA9IDA7CisrICAgICAgICAgICAgICAgIHJldHVybiAx OworKyAgICAgICAgfQorKworIAkvKiBUaW1lLWJhc2VkIHJla2V5aW5nICovCisgCWlmIChzdGF0 ZS0+cmVrZXlfaW50ZXJ2YWwgIT0gMCAmJgorIAkgICAgKGludDY0X3Qpc3RhdGUtPnJla2V5X3Rp bWUgKyBzdGF0ZS0+cmVrZXlfaW50ZXJ2YWwgPD0gbW9ub3RpbWUoKSkKK0BAIC0xNTA5LDcgKzE1 ODYsNyBAQAorIAlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0ZSAqc3RhdGUgPSBzc2gtPnN0YXRlOworIAlp bnQgbGVuLCByLCBtc19yZW1haW4gPSAwOworIAlzdHJ1Y3QgcG9sbGZkIHBmZDsKKy0JY2hhciBi dWZbODE5Ml07CisrCWNoYXIgYnVmW1NTSF9JT0JVRlNaXTsKKyAJc3RydWN0IHRpbWV2YWwgc3Rh cnQ7CisgCXN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlYywgKnRpbWVzcGVjcCA9IE5VTEw7CisgCitA QCAtMTYxMyw3ICsxNjkwLDcgQEAKKyAJCQlyZXR1cm4gMDsgLyogcGFja2V0IGlzIGluY29tcGxl dGUgKi8KKyAJCXN0YXRlLT5wYWNrbGVuID0gUEVFS19VMzIoY3ApOworIAkJaWYgKHN0YXRlLT5w YWNrbGVuIDwgNCArIDEgfHwKKy0JCSAgICBzdGF0ZS0+cGFja2xlbiA+IFBBQ0tFVF9NQVhfU0la RSkKKysJCSAgICBzdGF0ZS0+cGFja2xlbiA+IHBhY2tldF9tYXhfc2l6ZSkKKyAJCQlyZXR1cm4g U1NIX0VSUl9NRVNTQUdFX0lOQ09NUExFVEU7CisgCX0KKyAJbmVlZCA9IHN0YXRlLT5wYWNrbGVu ICsgNDsKK0BAIC0xNjcyLDcgKzE3NDksNyBAQAorIAkJICAgIHNzaGJ1Zl9wdHIoc3RhdGUtPmlu cHV0KSwgc3NoYnVmX2xlbihzdGF0ZS0+aW5wdXQpKSAhPSAwKQorIAkJCXJldHVybiAwOworIAkJ aWYgKHN0YXRlLT5wYWNrbGVuIDwgMSArIDQgfHwKKy0JCSAgICBzdGF0ZS0+cGFja2xlbiA+IFBB Q0tFVF9NQVhfU0laRSkgeworKwkJICAgIHN0YXRlLT5wYWNrbGVuID4gcGFja2V0X21heF9zaXpl KSB7CisgI2lmZGVmIFBBQ0tFVF9ERUJVRworIAkJCXNzaGJ1Zl9kdW1wKHN0YXRlLT5pbnB1dCwg c3RkZXJyKTsKKyAjZW5kaWYKK0BAIC0xNjk5LDcgKzE3NzYsNyBAQAorIAkJCWdvdG8gb3V0Owor IAkJc3RhdGUtPnBhY2tsZW4gPSBQRUVLX1UzMihzc2hidWZfcHRyKHN0YXRlLT5pbmNvbWluZ19w YWNrZXQpKTsKKyAJCWlmIChzdGF0ZS0+cGFja2xlbiA8IDEgKyA0IHx8CistCQkgICAgc3RhdGUt PnBhY2tsZW4gPiBQQUNLRVRfTUFYX1NJWkUpIHsKKysJCSAgICBzdGF0ZS0+cGFja2xlbiA+IHBh Y2tldF9tYXhfc2l6ZSkgeworICNpZmRlZiBQQUNLRVRfREVCVUcKKyAJCQlmcHJpbnRmKHN0ZGVy ciwgImlucHV0OiBcbiIpOworIAkJCXNzaGJ1Zl9kdW1wKHN0YXRlLT5pbnB1dCwgc3RkZXJyKTsK K0BAIC0xNzA4LDcgKzE3ODUsNyBAQAorICNlbmRpZgorIAkJCWxvZ2l0KCJCYWQgcGFja2V0IGxl bmd0aCAldS4iLCBzdGF0ZS0+cGFja2xlbik7CisgCQkJcmV0dXJuIHNzaF9wYWNrZXRfc3RhcnRf ZGlzY2FyZChzc2gsIGVuYywgbWFjLCAwLAorLQkJCSAgICBQQUNLRVRfTUFYX1NJWkUpOworKwkJ CSAgICBwYWNrZXRfbWF4X3NpemUpOworIAkJfQorIAkJaWYgKChyID0gc3NoYnVmX2NvbnN1bWUo c3RhdGUtPmlucHV0LCBibG9ja19zaXplKSkgIT0gMCkKKyAJCQlnb3RvIG91dDsKK0BAIC0xNzMx LDcgKzE4MDgsNyBAQAorIAkJbG9naXQoInBhZGRpbmcgZXJyb3I6IG5lZWQgJWQgYmxvY2sgJWQg bW9kICVkIiwKKyAJCSAgICBuZWVkLCBibG9ja19zaXplLCBuZWVkICUgYmxvY2tfc2l6ZSk7Cisg CQlyZXR1cm4gc3NoX3BhY2tldF9zdGFydF9kaXNjYXJkKHNzaCwgZW5jLCBtYWMsIDAsCistCQkg ICAgUEFDS0VUX01BWF9TSVpFIC0gYmxvY2tfc2l6ZSk7CisrCQkgICAgcGFja2V0X21heF9zaXpl IC0gYmxvY2tfc2l6ZSk7CisgCX0KKyAJLyoKKyAJICogY2hlY2sgaWYgdGhlIGVudGlyZSBwYWNr ZXQgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kCitAQCAtMTc3NSwxMSArMTg1MiwxMSBAQAorIAkJCWlm IChyICE9IFNTSF9FUlJfTUFDX0lOVkFMSUQpCisgCQkJCWdvdG8gb3V0OworIAkJCWxvZ2l0KCJD b3JydXB0ZWQgTUFDIG9uIGlucHV0LiIpOworLQkJCWlmIChuZWVkICsgYmxvY2tfc2l6ZSA+IFBB Q0tFVF9NQVhfU0laRSkKKysJCQlpZiAobmVlZCArIGJsb2NrX3NpemUgPiBwYWNrZXRfbWF4X3Np emUpCisgCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworIAkJCXJldHVybiBzc2hf cGFja2V0X3N0YXJ0X2Rpc2NhcmQoc3NoLCBlbmMsIG1hYywKKyAJCQkgICAgc3NoYnVmX2xlbihz dGF0ZS0+aW5jb21pbmdfcGFja2V0KSwKKy0JCQkgICAgUEFDS0VUX01BWF9TSVpFIC0gbmVlZCAt IGJsb2NrX3NpemUpOworKwkJCSAgICBwYWNrZXRfbWF4X3NpemUgLSBuZWVkIC0gYmxvY2tfc2l6 ZSk7CisgCQl9CisgCQkvKiBSZW1vdmUgTUFDIGZyb20gaW5wdXQgYnVmZmVyICovCisgCQlEQkco ZGVidWcoIk1BQyAjJWQgb2siLCBzdGF0ZS0+cF9yZWFkLnNlcW5yKSk7CitAQCAtMjAwOCw3ICsy MDg1LDcgQEAKKyAJaW50IHI7CisgCXNpemVfdCBybGVuOworIAorLQlpZiAoKHIgPSBzc2hidWZf cmVhZChmZCwgc3RhdGUtPmlucHV0LCBQQUNLRVRfTUFYX1NJWkUsICZybGVuKSkgIT0gMCkKKysJ aWYgKChyID0gc3NoYnVmX3JlYWQoZmQsIHN0YXRlLT5pbnB1dCwgcGFja2V0X21heF9zaXplLCAm cmxlbikpICE9IDApCisgCQlyZXR1cm4gcjsKKyAKKyAJaWYgKHN0YXRlLT5wYWNrZXRfZGlzY2Fy ZCkgeworQEAgLTIwODcsMTcgKzIxNjQsMjEgQEAKKyAJc3dpdGNoIChyKSB7CisgCWNhc2UgU1NI X0VSUl9DT05OX0NMT1NFRDoKKyAJCXNzaF9wYWNrZXRfY2xlYXJfa2V5cyhzc2gpOworKwkJc3No cGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOworIAkJbG9nZGllKCJDb25uZWN0aW9uIGNsb3NlZCBi eSAlcyIsIHJlbW90ZV9pZCk7CisgCWNhc2UgU1NIX0VSUl9DT05OX1RJTUVPVVQ6CisgCQlzc2hf cGFja2V0X2NsZWFyX2tleXMoc3NoKTsKKysJCXNzaHBrdF9maW5hbF9sb2dfZW50cnkoc3NoKTsK KyAJCWxvZ2RpZSgiQ29ubmVjdGlvbiAlcyAlcyB0aW1lZCBvdXQiLAorIAkJICAgIHNzaC0+c3Rh dGUtPnNlcnZlcl9zaWRlID8gImZyb20iIDogInRvIiwgcmVtb3RlX2lkKTsKKyAJY2FzZSBTU0hf RVJSX0RJU0NPTk5FQ1RFRDoKKyAJCXNzaF9wYWNrZXRfY2xlYXJfa2V5cyhzc2gpOworKwkJc3No cGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOworIAkJbG9nZGllKCJEaXNjb25uZWN0ZWQgZnJvbSAl cyIsIHJlbW90ZV9pZCk7CisgCWNhc2UgU1NIX0VSUl9TWVNURU1fRVJST1I6CisgCQlpZiAoZXJy bm8gPT0gRUNPTk5SRVNFVCkgeworIAkJCXNzaF9wYWNrZXRfY2xlYXJfa2V5cyhzc2gpOworKwkJ CXNzaHBrdF9maW5hbF9sb2dfZW50cnkoc3NoKTsKKyAJCQlsb2dkaWUoIkNvbm5lY3Rpb24gcmVz ZXQgYnkgJXMiLCByZW1vdGVfaWQpOworIAkJfQorIAkJLyogRkFMTFRIUk9VR0ggKi8KK0BAIC0y MTM5LDYgKzIyMjAsMjQgQEAKKyAJbG9nZGllX2YoInNob3VsZCBoYXZlIGV4aXRlZCIpOworIH0K KyAKKysvKiB0aGlzIHByaW50cyBvdXQgdGhlIGZpbmFsIGxvZyBlbnRyeSAqLworK3ZvaWQKKytz c2hwa3RfZmluYWxfbG9nX2VudHJ5IChzdHJ1Y3Qgc3NoICpzc2gpIHsKKysJZG91YmxlIHRvdGFs X3RpbWU7CisrCisrCWlmIChzc2gtPnN0YXJ0X3RpbWUgPCAxKQorKwkJLyogdGhpcyB3aWxsIHBy b2R1Y2UgYSBOYU4gaW4gdGhlIG91dHB1dC4gLWNqciAqLworKwkJdG90YWxfdGltZSA9IDA7Cisr CWVsc2UKKysJCXRvdGFsX3RpbWUgPSBtb25vdGltZV9kb3VibGUoKSAtIHNzaC0+c3RhcnRfdGlt ZTsKKysKKysJbG9naXQoIlNTSDogU2VydmVyO0xUeXBlOiBUaHJvdWdocHV0O1JlbW90ZTogJXMt JWQ7SU46ICVsdTtPVVQ6ICVsdTtEdXJhdGlvbjogJS4xZjt0UHV0X2luOiAlLjFmO3RQdXRfb3V0 OiAlLjFmIiwKKysJICAgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0 KHNzaCksCisrCSAgICAgIHNzaC0+c3RkaW5fYnl0ZXMsIHNzaC0+ZmRvdXRfYnl0ZXMsIHRvdGFs X3RpbWUsCisrCSAgICAgIHNzaC0+c3RkaW5fYnl0ZXMgLyB0b3RhbF90aW1lLAorKwkgICAgICBz c2gtPmZkb3V0X2J5dGVzIC8gdG90YWxfdGltZSk7CisrfQorKworIC8qCisgICogTG9ncyB0aGUg ZXJyb3IgcGx1cyBjb25zdHJ1Y3RzIGFuZCBzZW5kcyBhIGRpc2Nvbm5lY3QgcGFja2V0LCBjbG9z ZXMgdGhlCisgICogY29ubmVjdGlvbiwgYW5kIGV4aXRzLiAgVGhpcyBmdW5jdGlvbiBuZXZlciBy ZXR1cm5zLiBUaGUgZXJyb3IgbWVzc2FnZQorQEAgLTIzOTYsMTAgKzI0OTUsMTkgQEAKKyAJc3No LT5rZXgtPnNlcnZlciA9IDE7IC8qIFhYWCB1bmlmeT8gKi8KKyB9CisgCisrLyogU2V0IHRoZSBz dGF0ZSBvZiB0aGUgY29ubmVjdGlvbiB0byBwb3N0IGF1dGgKKysgKiBXaGlsZSB3ZSBhcmUgaGVy ZSBhbHNvIGRlY3JlYXNlIHRoZSBzaXplIG9mCisrICogcGFja2V0X21heF9zaXplIHRvIHNvbWV0 aGluZyBtb3JlIHJlYXNvbmFibGUuCisrICogSW4gdGhpcyBjYXNlIHRoYXRzIDMzay4gV2hpY2gg aXMgdGhlIHNpemUgb2YKKysgKiB0aGUgbGFyZ2VzdCBwYWNrZXQgd2UgZXhwZWN0IHRvIHNlZSBh bmQgc29tZSBzcGFjZQorKyAqIGZvciBvdmVyaGVhZC4gVGhpcyByZWR1Y2VzIG1lbW9yeSB1c2Fn ZSBpbiBoaWdoCisrICogQkRQIGVudmlyb25tZW50cyB3aXRob3V0IGltcGFjdGluZyBwZXJmb3Jt YW5jZQorKyAqIC1janIgNC8xMS8yMyAqLworIHZvaWQKKyBzc2hfcGFja2V0X3NldF9hdXRoZW50 aWNhdGVkKHN0cnVjdCBzc2ggKnNzaCkKKyB7CisgCXNzaC0+c3RhdGUtPmFmdGVyX2F1dGhlbnRp Y2F0aW9uID0gMTsKKysJcGFja2V0X21heF9zaXplID0gU1NIX0lPQlVGU1ogKyAxMDI0OworIH0K KyAKKyB2b2lkICoKK0BAIC0zMDQ1LDYgKzMxNTMsMjAgQEAKKyAJcmV0dXJuIDA7CisgfQorIAor Ky8qIHVzZWQgZm9yIGNpcGhlciBzd2l0Y2hpbmcKKysgKiBvbmx5IGNhbGxlZCBpbiBjaXBoZXIt c3d0aWNoLmMgKi8KKyt2b2lkICoKKytzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQoc3RydWN0 IHNzaCAqc3NoKQorK3sKKysgICAgICAgIHJldHVybiBzc2gtPnN0YXRlLT5zZW5kX2NvbnRleHQ7 CisrfQorKworK3ZvaWQgKgorK3NzaF9wYWNrZXRfZ2V0X3JlY2VpdmVfY29udGV4dChzdHJ1Y3Qg c3NoICpzc2gpCisreworKyAgICAgICAgcmV0dXJuIHNzaC0+c3RhdGUtPnJlY2VpdmVfY29udGV4 dDsKKyt9CisrCisgc3RhdGljIGNoYXIgKgorIGZvcm1hdF90cmFmZmljX3N0YXRzKHN0cnVjdCBw YWNrZXRfc3RhdGUgKnBzKQorIHsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3BhY2tl dC5oIG9wZW5zc2gtMTAuNXAxL3BhY2tldC5oCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9wYWNr ZXQuaAkyMDI2LTA5LTIxIDA3OjA2OjA1LjI5MTYzMzg1OCArMDIwMAorKysrIG9wZW5zc2gtMTAu NXAxL3BhY2tldC5oCTIwMjYtMDktMjEgMDc6MDY6NTkuODkxNDA4NDYxICswMjAwCitAQCAtODMs NiArODMsMjQgQEAKKyAKKyAJLyogQVBQIGRhdGEgKi8KKyAJdm9pZCAqYXBwX2RhdGE7CisrCisr CS8qIGxvZ2dpbmcgZGF0YSBmb3IgU2VydmVyTG9nZ2luZyBwYXRjaCovCisrCWRvdWJsZSBzdGFy dF90aW1lOworKwl1X2xvbmcgZmRvdXRfYnl0ZXM7CisrCXVfbG9uZyBzdGRpbl9ieXRlczsKKysK KysJLyogdHJhY2sgdGhhdCB3ZSBhcmUgaW4gYSBub25lIGNpcGhlciBzdGF0ZSAqLworKwlpbnQg bm9uZTsKKysKKysJLyogdHJhY2sgaWYgd2UgaGF2ZSBkaXNhYmxlZCB0aGUgbWFjIGFzIHdlbGwg Ki8KKysJaW50IG5vbmVfbWFjOworKworKwkvKiBIUE46IE1UIGNpcGhlcnMgYXJlIGFjdGl2ZSBm b3IgdGhpcyBjb25uZWN0aW9uLiBTZXQgb25seSBieQorKwkgKiBjaXBoZXJfc3dpdGNoKCksIHdo aWNoIHJ1bnMgc29sZWx5IHdoZW4gdGhlIE1UIGNpcGhlcnMgYXJlIG5vdAorKwkgKiBkaXNhYmxl ZCBieSBjb25maWcgKERpc2FibGVNVEFFUykgYW5kIEZJUFMgbW9kZSBpcyBvZmYuIEdhdGVzIHRo ZQorKwkgKiBwb3N0LWF1dGggcHJvbW90aW9uIG9mIGFlcy1jdHIgdG8gdGhlIHRocmVhZGVkIGlt cGxlbWVudGF0aW9uIHNvIGEKKysJICogbGF0ZXIgcmVrZXkgY2Fubm90IHNpbGVudGx5IHN3aXRj aCB0byBNVCBvbmNlIGl0IHdhcyBkaXNhYmxlZC4gKi8KKysJaW50IG10X2VuYWJsZWQ7CisgfTsK KyAKKyB0eXBlZGVmIGludCAoc3NoX3BhY2tldF9ob29rX2ZuKShzdHJ1Y3Qgc3NoICosIHN0cnVj dCBzc2hidWYgKiwKK0BAIC0xNTIsNiArMTcwLDggQEAKKyBpbnQJIHNzaF9wYWNrZXRfc2V0X21h eHNpemUoc3RydWN0IHNzaCAqLCB1X2ludCk7CisgdV9pbnQJIHNzaF9wYWNrZXRfZ2V0X21heHNp emUoc3RydWN0IHNzaCAqKTsKKyAKKytpbnQJIHBhY2tldF9hdXRoZW50aWNhdGlvbl9zdGF0ZShj b25zdCBzdHJ1Y3Qgc3NoICopOworKworIGludAkgc3NoX3BhY2tldF9nZXRfc3RhdGUoc3RydWN0 IHNzaCAqLCBzdHJ1Y3Qgc3NoYnVmICopOworIGludAkgc3NoX3BhY2tldF9zZXRfc3RhdGUoc3Ry dWN0IHNzaCAqLCBzdHJ1Y3Qgc3NoYnVmICopOworIAorQEAgLTE2Nyw2ICsxODcsMTMgQEAKKyAK KyB2b2lkCSpzc2hfcGFja2V0X2dldF9pbnB1dChzdHJ1Y3Qgc3NoICopOworIHZvaWQJKnNzaF9w YWNrZXRfZ2V0X291dHB1dChzdHJ1Y3Qgc3NoICopOworK3ZvaWQJKnNzaF9wYWNrZXRfZ2V0X3Jl Y2VpdmVfY29udGV4dChzdHJ1Y3Qgc3NoICopOworK3ZvaWQJKnNzaF9wYWNrZXRfZ2V0X3NlbmRf Y29udGV4dChzdHJ1Y3Qgc3NoICopOworKworKy8qIGZvciBmb3JjZWQgcGFja2V0IHJla2V5aW5n IHBvc3QgYXV0aCAqLworK3ZvaWQJIHBhY2tldF9yZXF1ZXN0X3Jla2V5aW5nKHZvaWQpOworKy8q IGZpbmFsIGxvZyBlbnRyeSBzdXBwb3J0ICovCisrdm9pZAkgc3NocGt0X2ZpbmFsX2xvZ19lbnRy eSAoc3RydWN0IHNzaCAqKTsKKyAKKyAvKiBuZXcgQVBJICovCisgaW50CXNzaHBrdF9zdGFydChz dHJ1Y3Qgc3NoICpzc2gsIHVfY2hhciB0eXBlKTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5v cmlnL3BvbHkxMzA1LmMgb3BlbnNzaC0xMC41cDEvcG9seTEzMDUuYworLS0tIG9wZW5zc2gtMTAu NXAxLm9yaWcvcG9seTEzMDUuYwkyMDI2LTA4LTExIDA0OjIyOjE3LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL3BvbHkxMzA1LmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTE1Mzc3 MDcgKzAyMDAKK0BAIC0xMSw2ICsxMSwxNiBAQAorIAorICNpbmNsdWRlICJwb2x5MTMwNS5oIgor IAorKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKKyt2b2lkCisrcG9seTEzMDVfYXV0aChF VlBfTUFDX0NUWCAqcG9seV9jdHgsIHVuc2lnbmVkIGNoYXIgb3V0W1BPTFkxMzA1X1RBR0xFTl0s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sIHNpemVfdCBpbmxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciBrZXlbUE9MWTEzMDVfS0VZTEVOXSkgeworKwlzaXplX3QgcG9seV9vdXRfbGVuOworKwlFVlBf TUFDX2luaXQocG9seV9jdHgsIChjb25zdCB1X2NoYXIgKilrZXksIFBPTFkxMzA1X0tFWUxFTiwg TlVMTCk7CisrCUVWUF9NQUNfdXBkYXRlKHBvbHlfY3R4LCBtLCBpbmxlbik7CisrCUVWUF9NQUNf ZmluYWwocG9seV9jdHgsIG91dCwgJnBvbHlfb3V0X2xlbiwgKHNpemVfdClQT0xZMTMwNV9UQUdM RU4pOworK30KKysjZWxzZQorKworICNkZWZpbmUgbXVsMzJ4MzJfNjQoYSxiKSAoKHVpbnQ2NF90 KShhKSAqIChiKSkKKyAKKyAjZGVmaW5lIFU4VE8zMl9MRShwKSBcCitAQCAtMjgsNyArMzgsNyBA QAorIAl9IHdoaWxlICgwKQorIAorIHZvaWQKKy1wb2x5MTMwNV9hdXRoKHVuc2lnbmVkIGNoYXIg b3V0W1BPTFkxMzA1X1RBR0xFTl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sIHNpemVfdCBpbmxl biwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbUE9MWTEzMDVfS0VZTEVOXSkgeworK3BvbHkxMzA1 X2F1dGgoY2hhciAqdW51c2VkLCB1bnNpZ25lZCBjaGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBj b25zdCB1bnNpZ25lZCBjaGFyICptLCBzaXplX3QgaW5sZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2V5W1BPTFkxMzA1X0tFWUxFTl0pIHsKKyAJdWludDMyX3QgdDAsdDEsdDIsdDM7CisgCXVpbnQz Ml90IGgwLGgxLGgyLGgzLGg0OworIAl1aW50MzJfdCByMCxyMSxyMixyMyxyNDsKK0BAIC0xNTUs MyArMTY1LDQgQEAKKyAJVTMyVE84X0xFKCZvdXRbIDhdLCBmMik7IGYzICs9IChmMiA+PiAzMik7 CisgCVUzMlRPOF9MRSgmb3V0WzEyXSwgZjMpOworIH0KKysjZW5kaWYgLyogT1BFTlNTTF9IQVZF X1BPTFlfRVZQICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9wb2x5MTMwNS5oIG9w ZW5zc2gtMTAuNXAxL3BvbHkxMzA1LmgKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3BvbHkxMzA1 LmgJMjAyNi0wOC0xMSAwNDoyMjoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVw MS9wb2x5MTMwNS5oCTIwMjYtMDktMjEgMDc6MDY6NTkuODkxNjUzNzA1ICswMjAwCitAQCAtMTMs OCArMTMsMTUgQEAKKyAjZGVmaW5lIFBPTFkxMzA1X0tFWUxFTgkJMzIKKyAjZGVmaW5lIFBPTFkx MzA1X1RBR0xFTgkJMTYKKyAKKy12b2lkIHBvbHkxMzA1X2F1dGgodV9jaGFyIG91dFtQT0xZMTMw NV9UQUdMRU5dLCBjb25zdCB1X2NoYXIgKm0sIHNpemVfdCBpbmxlbiwKKysjaWZkZWYgT1BFTlNT TF9IQVZFX1BPTFlfRVZQCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrCisrdm9pZCBwb2x5 MTMwNV9hdXRoKEVWUF9NQUNfQ1RYICpwb2x5X2tleSwgdV9jaGFyIG91dFtQT0xZMTMwNV9UQUdM RU5dLCBjb25zdCB1X2NoYXIgKm0sIHNpemVfdCBpbmxlbiwKKysgICAgY29uc3QgdV9jaGFyIGtl eVtQT0xZMTMwNV9LRVlMRU5dKQorKyNlbHNlCisrdm9pZCBwb2x5MTMwNV9hdXRoKGNoYXIgKnVu dXNlZCwgdV9jaGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBjb25zdCB1X2NoYXIgKm0sIHNpemVf dCBpbmxlbiwKKyAgICAgY29uc3QgdV9jaGFyIGtleVtQT0xZMTMwNV9LRVlMRU5dKQorKyNlbmRp ZgorICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEsIFBPTFkx MzA1X1RBR0xFTikpKQorICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX2J1ZmZlcl9f LCAyLCAzKSkpCisgICAgIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fbWluYnl0ZXNfXywg NCwgUE9MWTEzMDVfS0VZTEVOKSkpOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvcHJv Z3Jlc3NtZXRlci5jIG9wZW5zc2gtMTAuNXAxL3Byb2dyZXNzbWV0ZXIuYworLS0tIG9wZW5zc2gt MTAuNXAxLm9yaWcvcHJvZ3Jlc3NtZXRlci5jCTIwMjYtMDgtMTEgMDQ6MjI6MTcuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvcHJvZ3Jlc3NtZXRlci5jCTIwMjYtMDktMjEgMDc6 MDY6NTkuODkxNzQwNDQwICswMjAwCitAQCAtNjUsNiArNjUsOCBAQAorIHN0YXRpYyBvZmZfdCBz dGFydF9wb3M7CQkvKiBpbml0aWFsIHBvc2l0aW9uIG9mIHRyYW5zZmVyICovCisgc3RhdGljIG9m Zl90IGVuZF9wb3M7CQkvKiBlbmRpbmcgcG9zaXRpb24gb2YgdHJhbnNmZXIgKi8KKyBzdGF0aWMg b2ZmX3QgY3VyX3BvczsJCS8qIHRyYW5zZmVyIHBvc2l0aW9uIGFzIG9mIGxhc3QgcmVmcmVzaCAq LworK3N0YXRpYyBvZmZfdCBsYXN0X3BvczsKKytzdGF0aWMgb2ZmX3QgbWF4X2RlbHRhX3BvcyA9 IDA7Cisgc3RhdGljIHZvbGF0aWxlIG9mZl90ICpjb3VudGVyOwkvKiBwcm9ncmVzcyBjb3VudGVy ICovCisgc3RhdGljIGxvbmcgc3RhbGxlZDsJCS8qIGhvdyBsb25nIHdlIGhhdmUgYmVlbiBzdGFs bGVkICovCisgc3RhdGljIGxvbmcgbG9uZyBieXRlc19wZXJfc2Vjb25kOyAvKiBjdXJyZW50IHNw ZWVkIGluIGJ5dGVzIHBlciBzZWNvbmQgKi8KK0BAIC0xMzEsNiArMTMzLDcgQEAKKyAJbG9uZyBs b25nIGN1cl9zcGVlZDsKKyAJaW50IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzOworIAlpbnQgZmls ZV9sZW4sIGNvbHM7CisrCW9mZl90IGRlbHRhX3BvczsKKyAKKyAJaWYgKGZpbGUgPT0gTlVMTCB8 fCAoIWZvcmNlX3VwZGF0ZSAmJiAhYWxhcm1fZmlyZWQgJiYgIXdpbl9yZXNpemVkKSB8fAorIAkg ICAgIWNhbl9vdXRwdXQoKSkKK0BAIC0xNDcsNiArMTUwLDEwIEBACisgCW5vdyA9IG1vbm90aW1l X2RvdWJsZSgpOworIAlieXRlc19sZWZ0ID0gZW5kX3BvcyAtIGN1cl9wb3M7CisgCisrCWRlbHRh X3BvcyA9IGN1cl9wb3MgLSBsYXN0X3BvczsKKysJaWYgKGRlbHRhX3BvcyA+IG1heF9kZWx0YV9w b3MpCisrCQltYXhfZGVsdGFfcG9zID0gZGVsdGFfcG9zOworKworIAlpZiAoYnl0ZXNfbGVmdCA+ IDApCisgCQllbGFwc2VkID0gbm93IC0gbGFzdF91cGRhdGU7CisgCWVsc2UgeworQEAgLTE3Niw3 ICsxODMsNyBAQAorIAkJcmV0dXJuOworIAorIAkvKiBmaWxlbmFtZSAqLworLQlmaWxlX2xlbiA9 IGNvbHMgPSB3aW5fc2l6ZSAtIDM2OworKwlmaWxlX2xlbiA9IGNvbHMgPSB3aW5fc2l6ZSAtIDQ1 OworIAlpZiAoZmlsZV9sZW4gPiAwKSB7CisgCQlhc21wcmludGYoJmJ1ZiwgSU5UX01BWCwgJmNv bHMsICIlLSpzIiwgZmlsZV9sZW4sIGZpbGUpOworIAkJLyogSWYgd2UgdXNlZCBmZXdlciBjb2x1 bW5zIHRoYW4gZXhwZWN0ZWQgdGhlbiBwYWQgKi8KK0BAIC0xOTMsNiArMjAwLDEyIEBACisgCXhl eHRlbmRmKCZidWYsIE5VTEwsICIgJTNkJSUgJXMgJXMvcyAiLCBwZXJjZW50LCBmb3JtYXRfc2l6 ZShjdXJfcG9zKSwKKyAJICAgIGZvcm1hdF9yYXRlKChvZmZfdClieXRlc19wZXJfc2Vjb25kKSk7 CisgCisrCS8qIGluc3RhbnRhbmVvdXMgcmF0ZSAqLworKwlpZiAoYnl0ZXNfbGVmdCA+IDApCisr CQl4ZXh0ZW5kZigmYnVmLCBOVUxMLCAiJXMvcyIsIGZvcm1hdF9yYXRlKChvZmZfdClkZWx0YV9w b3MpKTsKKysJZWxzZQorKwkJeGV4dGVuZGYoJmJ1ZiwgTlVMTCwgIiVzL3MiLCBmb3JtYXRfcmF0 ZSgob2ZmX3QpbWF4X2RlbHRhX3BvcykpOworKworIAkvKiBFVEEgKi8KKyAJaWYgKCF0cmFuc2Zl cnJlZCkKKyAJCXN0YWxsZWQgKz0gZWxhcHNlZDsKK0BAIC0yMzUsNiArMjQ4LDcgQEAKKyAJfQor IAlmcmVlKGJ1Zik7CisgCWZyZWUob2J1Zik7CisrCWxhc3RfcG9zID0gY3VyX3BvczsKKyB9Cisg Cisgc3RhdGljIHZvaWQKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3JlYWRjb25mLmMg b3BlbnNzaC0xMC41cDEvcmVhZGNvbmYuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvcmVhZGNv bmYuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2MjcwMzg4MSArMDIwMAorKysrIG9wZW5zc2gtMTAu NXAxL3JlYWRjb25mLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTIwMTQ2MjkgKzAyMDAKK0BAIC02 Miw2ICs2Miw3IEBACisgI2luY2x1ZGUgIm1hYy5oIgorICNpbmNsdWRlICJteXByb3Bvc2FsLmgi CisgI2luY2x1ZGUgImRpZ2VzdC5oIgorKyNpbmNsdWRlICJzc2hidWYuaCIKKyAjaW5jbHVkZSAi dmVyc2lvbi5oIgorICNpbmNsdWRlICJzc2gtZ3NzLmgiCisgCitAQCAtMTY1LDYgKzE2NiwxMCBA QAorIAlvSGFzaEtub3duSG9zdHMsCisgCW9UdW5uZWwsIG9UdW5uZWxEZXZpY2UsCisgCW9Mb2Nh bENvbW1hbmQsIG9QZXJtaXRMb2NhbENvbW1hbmQsIG9SZW1vdGVDb21tYW5kLAorKwlvVGNwUmN2 QnVmUG9sbCwgb0hQTkRpc2FibGVkLAorKwlvTm9uZUVuYWJsZWQsIG9Ob25lTWFjRW5hYmxlZCwg b05vbmVTd2l0Y2gsCisrCW9EaXNhYmxlTVRBRVMsIG9Vc2VNUFRDUCwgb0hhcHB5RXllcywgb0hh cHB5RGVsYXksCisrCW9NZXRyaWNzLCBvTWV0cmljc1BhdGgsIG9NZXRyaWNzSW50ZXJ2YWwsIG9G YWxsYmFjaywgb0ZhbGxiYWNrUG9ydCwKKyAJb1Zpc3VhbEhvc3RLZXksCisgCW9LZXhBbGdvcml0 aG1zLCBvSVBRb1MsIG9SZXF1ZXN0VFRZLCBvU2Vzc2lvblR5cGUsIG9TdGRpbk51bGwsCisgCW9G b3JrQWZ0ZXJBdXRoZW50aWNhdGlvbiwgb0lnbm9yZVVua25vd24sIG9Qcm94eVVzZUZkcGFzcywK K0BAIC0zMTIsNiArMzE3LDE4IEBACisgCXsgImtleGFsZ29yaXRobXMiLCBvS2V4QWxnb3JpdGht cyB9LAorIAl7ICJpcHFvcyIsIG9JUFFvUyB9LAorIAl7ICJyZXF1ZXN0dHR5Iiwgb1JlcXVlc3RU VFkgfSwKKysJeyAibm9uZWVuYWJsZWQiLCBvTm9uZUVuYWJsZWQgfSwKKysJeyAibm9uZW1hY2Vu YWJsZWQiLCBvTm9uZU1hY0VuYWJsZWQgfSwKKysJeyAibm9uZXN3aXRjaCIsIG9Ob25lU3dpdGNo IH0sCisrCXsgInVzZW1wdGNwIiwgb1VzZU1QVENQfSwKKysJeyAiaGFwcHlleWVzIiwgb0hhcHB5 RXllcyB9LAorKwl7ICJoYXBweWRlbGF5Iiwgb0hhcHB5RGVsYXkgfSwKKysJeyAiZGlzYWJsZW10 YWVzIiwgb0Rpc2FibGVNVEFFUyB9LAorKwl7ICJtZXRyaWNzIiwgb01ldHJpY3MgfSwKKysJeyAi bWV0cmljc3BhdGgiLCBvTWV0cmljc1BhdGggfSwKKysJeyAibWV0cmljc2ludGVydmFsIiwgb01l dHJpY3NJbnRlcnZhbCB9LAorKwl7ICJmYWxsYmFjayIsIG9GYWxsYmFjayB9LAorKwl7ICJmYWxs YmFja3BvcnQiLCBvRmFsbGJhY2tQb3J0IH0sCisgCXsgInNlc3Npb250eXBlIiwgb1Nlc3Npb25U eXBlIH0sCisgCXsgInN0ZGlubnVsbCIsIG9TdGRpbk51bGwgfSwKKyAJeyAiZm9ya2FmdGVyYXV0 aGVudGljYXRpb24iLCBvRm9ya0FmdGVyQXV0aGVudGljYXRpb24gfSwKK0BAIC0zMzQsNiArMzUx LDggQEAKKyAJeyAicHJveHlqdW1wIiwgb1Byb3h5SnVtcCB9LAorIAl7ICJzZWN1cml0eWtleXBy b3ZpZGVyIiwgb1NlY3VyaXR5S2V5UHJvdmlkZXIgfSwKKyAJeyAia25vd25ob3N0c2NvbW1hbmQi LCBvS25vd25Ib3N0c0NvbW1hbmQgfSwKKysJeyAidGNwcmN2YnVmcG9sbCIsIG9UY3BSY3ZCdWZQ b2xsIH0sCisrCXsgImhwbmRpc2FibGVkIiwgb0hQTkRpc2FibGVkIH0sCisgCXsgInJlcXVpcmVk cnNhc2l6ZSIsIG9SZXF1aXJlZFJTQVNpemUgfSwKKyAJeyAiZW5hYmxlZXNjYXBlY29tbWFuZGxp bmUiLCBvRW5hYmxlRXNjYXBlQ29tbWFuZGxpbmUgfSwKKyAJeyAib2JzY3VyZWtleXN0cm9rZXRp bWluZyIsIG9PYnNjdXJlS2V5c3Ryb2tlVGltaW5nIH0sCitAQCAtNTM0LDcgKzU1Myw3IEBACisg CisgCWlmIChwb3J0ID09IDApIHsKKyAJCXNwID0gZ2V0c2VydmJ5bmFtZShTU0hfU0VSVklDRV9O QU1FLCAidGNwIik7CistCQlwb3J0ID0gc3AgPyBudG9ocyhzcC0+c19wb3J0KSA6IFNTSF9ERUZB VUxUX1BPUlQ7CisrCQlwb3J0ID0gc3AgPyBudG9ocyhzcC0+c19wb3J0KSA6IEhQTlNTSF9ERUZB VUxUX1BPUlQ7CisgCX0KKyAJcmV0dXJuIHBvcnQ7CisgfQorQEAgLTEzODQsNiArMTQwMyw3NSBA QAorIAkJaW50cHRyID0gJm9wdGlvbnMtPmNoZWNrX2hvc3RfaXA7CisgCQlnb3RvIHBhcnNlX2Zs YWc7CisgCisrCWNhc2Ugb0hQTkRpc2FibGVkOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmhwbl9k aXNhYmxlZDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBvVGNwUmN2QnVmUG9sbDoK KysJCWludHB0ciA9ICZvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsOworKwkJZ290byBwYXJzZV9m bGFnOworKworKwljYXNlIG9Ob25lRW5hYmxlZDoKKysJCWludHB0ciA9ICZvcHRpb25zLT5ub25l X2VuYWJsZWQ7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugb05vbmVNYWNFbmFibGVk OgorKwkJaW50cHRyID0gJm9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZDsKKysJCWdvdG8gcGFyc2Vf ZmxhZzsKKysKKysJY2FzZSBvVXNlTVBUQ1A6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+dXNlX21w dGNwOworKwkJZ290byBwYXJzZV9mbGFnOworKworKwljYXNlIG9IYXBweUV5ZXM6CisrCQlpbnRw dHIgPSAmb3B0aW9ucy0+dXNlX2hhcHB5ZXllczsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJ Y2FzZSBvSGFwcHlEZWxheToKKysJCWludHB0ciA9ICZvcHRpb25zLT5oYXBweV9kZWxheTsKKysJ CWdvdG8gcGFyc2VfaW50OworKworKwljYXNlIG9EaXNhYmxlTVRBRVM6CisrCQlpbnRwdHIgPSAm b3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRocmVhZGVkOworKwkJZ290byBwYXJzZV9mbGFnOworKwor KwljYXNlIG9NZXRyaWNzOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPm1ldHJpY3M7CisrCQlnb3Rv IHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugb01ldHJpY3NJbnRlcnZhbDoKKysJCWludHB0ciA9ICZv cHRpb25zLT5tZXRyaWNzX2ludGVydmFsOworKwkJZ290byBwYXJzZV9pbnQ7CisrCisrCWNhc2Ug b01ldHJpY3NQYXRoOgorKwkJY2hhcnB0ciA9ICZvcHRpb25zLT5tZXRyaWNzX3BhdGg7CisrCQlv cHRpb25zLT5tZXRyaWNzID0gMTsKKysJCWdvdG8gcGFyc2Vfc3RyaW5nOworKworKwljYXNlIG9G YWxsYmFjazoKKysJCWludHB0ciA9ICZvcHRpb25zLT5mYWxsYmFjazsKKysJCWdvdG8gcGFyc2Vf ZmxhZzsKKysKKysJY2FzZSBvRmFsbGJhY2tQb3J0OgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmZh bGxiYWNrX3BvcnQ7CisrCQlnb3RvIHBhcnNlX2ludDsKKysKKysJLyoKKysJICogV2UgY2hlY2sg dG8gc2VlIGlmIHRoZSBjb21tYW5kIGNvbWVzIGZyb20gdGhlIGNvbW1hbmQKKysJICogbGluZSBv ciBub3QuIElmIGl0IGRvZXMgdGhlbiBlbmFibGUgaXQgb3RoZXJ3aXNlIGZhaWwuCisrCSAqICBO T05FIHNob3VsZCBuZXZlciBiZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKysJICovCisrCWNh c2Ugb05vbmVTd2l0Y2g6CisrCQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiY29tbWFuZC1saW5lIikg PT0gMCkgeworKwkJCWludHB0ciA9ICZvcHRpb25zLT5ub25lX3N3aXRjaDsKKysJCQlnb3RvIHBh cnNlX2ZsYWc7CisrCQl9IGVsc2UgeworKwkJCWVycm9yKCJOb25lU3dpdGNoIGlzIGZvdW5kIGlu ICUuMjAwcy5cbllvdSBtYXkgb25seSB1c2UgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBmcm9t IHRoZSBjb21tYW5kIGxpbmUiLCBmaWxlbmFtZSk7CisrCQkJZXJyb3IoIkNvbnRpbnVpbmcuLi4i KTsKKysJCQlkZWJ1ZygiTm9uZVN3aXRjaCBkaXJlY3RpdmUgZm91bmQgaW4gJS4yMDBzLiIsIGZp bGVuYW1lKTsKKysJCQlyZXR1cm4gMDsKKysJCX0KKysKKyAJY2FzZSBvVmVyaWZ5SG9zdEtleURO UzoKKyAJCWludHB0ciA9ICZvcHRpb25zLT52ZXJpZnlfaG9zdF9rZXlfZG5zOworIAkJbXVsdGlz dGF0ZV9wdHIgPSBtdWx0aXN0YXRlX3llc25vYXNrOworQEAgLTI4NTgsNiArMjk0NiwyMCBAQAor IAlvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPSAtMTsKKyAJb3B0aW9ucy0+aXBfcW9zX2J1 bGsgPSAtMTsKKyAJb3B0aW9ucy0+cmVxdWVzdF90dHkgPSAtMTsKKysJb3B0aW9ucy0+bm9uZV9z d2l0Y2ggPSAtMTsKKysJb3B0aW9ucy0+bm9uZV9lbmFibGVkID0gLTE7CisrCW9wdGlvbnMtPm5v bmVtYWNfZW5hYmxlZCA9IC0xOworKwlvcHRpb25zLT51c2VfbXB0Y3AgPSAtMTsKKysJb3B0aW9u cy0+dXNlX2hhcHB5ZXllcyA9IC0xOworKwlvcHRpb25zLT5oYXBweV9kZWxheSA9IC0xOworKwlv cHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQgPSAtMTsKKysJb3B0aW9ucy0+bWV0cmljcyA9 IC0xOworKwlvcHRpb25zLT5tZXRyaWNzX3BhdGggPSBOVUxMOworKwlvcHRpb25zLT5tZXRyaWNz X2ludGVydmFsID0gLTE7CisrCW9wdGlvbnMtPmhwbl9kaXNhYmxlZCA9IC0xOworKwlvcHRpb25z LT5mYWxsYmFjayA9IC0xOworKwlvcHRpb25zLT5mYWxsYmFja19wb3J0ID0gLTE7CisrCW9wdGlv bnMtPnRjcF9yY3ZfYnVmX3BvbGwgPSAtMTsKKyAJb3B0aW9ucy0+c2Vzc2lvbl90eXBlID0gLTE7 CisgCW9wdGlvbnMtPnN0ZGluX251bGwgPSAtMTsKKyAJb3B0aW9ucy0+Zm9ya19hZnRlcl9hdXRo ZW50aWNhdGlvbiA9IC0xOworQEAgLTMwNDAsOCArMzE0Miw0NyBAQAorIAkJb3B0aW9ucy0+c2Vy dmVyX2FsaXZlX2ludGVydmFsID0gMDsKKyAJaWYgKG9wdGlvbnMtPnNlcnZlcl9hbGl2ZV9jb3Vu dF9tYXggPT0gLTEpCisgCQlvcHRpb25zLT5zZXJ2ZXJfYWxpdmVfY291bnRfbWF4ID0gMzsKKysJ aWYgKG9wdGlvbnMtPmhwbl9kaXNhYmxlZCA9PSAtMSkKKysJCW9wdGlvbnMtPmhwbl9kaXNhYmxl ZCA9IDA7CisrCWlmIChvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsID09IC0xKQorKwkJb3B0aW9u cy0+dGNwX3Jjdl9idWZfcG9sbCA9IDE7CisrCWlmIChvcHRpb25zLT5ub25lX3N3aXRjaCA9PSAt MSkKKysJCW9wdGlvbnMtPm5vbmVfc3dpdGNoID0gMDsKKysJaWYgKG9wdGlvbnMtPm5vbmVfZW5h YmxlZCA9PSAtMSkKKysJCW9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9IDA7CisrCWlmIChvcHRpb25z LT5ub25lX2VuYWJsZWQgPT0gMCAmJiBvcHRpb25zLT5ub25lX3N3aXRjaCA+IDApIHsKKysJCWZw cmludGYoc3RkZXJyLCAiTm9uZUVuYWJsZWQgbXVzdCBiZSBlbmFibGVkIHRvIHVzZSB0aGUgTm9u ZSBTd2l0Y2ggb3B0aW9uLiBOb25lIGNpcGhlciBkaXNhYmxlZC5cbiIpOworKwkJb3B0aW9ucy0+ bm9uZV9lbmFibGVkID0gMDsKKysJfQorKwlpZiAob3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID09 IC0xKQorKwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gMDsKKysJaWYgKG9wdGlvbnMtPm5v bmVtYWNfZW5hYmxlZCA+IDAgJiYgKG9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9PSAwIHx8CisrCQkJ CQkgICAgIG9wdGlvbnMtPm5vbmVfc3dpdGNoID09IDApKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwg Ik5vbmUgTUFDIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgTm9uZSBjaXBoZXIuIE5vbmUgTUFD IGRpc2FibGVkLlxuIik7CisrCQlvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQgPSAwOworKwl9Cisr CWlmIChvcHRpb25zLT51c2VfbXB0Y3AgPT0gLTEpCisrCQlvcHRpb25zLT51c2VfbXB0Y3AgPSAw OworKwlpZiAob3B0aW9ucy0+dXNlX2hhcHB5ZXllcyA9PSAtMSkKKysJCW9wdGlvbnMtPnVzZV9o YXBweWV5ZXMgPSAwOworKwkvKiBpZiB0aGUgdXNlciB0cmllcyB0byBzZXQgdGhlIGRlbGF5IHRv IDAgdGhlbiBpbiBqdXN0IGxvb3BzIGZvcmV2ZXIKKysJICogc28gaW5zdGVhZCBvZiB1c2luZyB0 aGUgc3RhbmRhcmQgLTEgdGVzdCB3ZSB1c2UgPCAxIHRvIG1ha2Ugc3VyZSB0aGUKKysJICogdXNl ciBpc24ndCBiZWluZyB0b28gY2xldmVyIGZvciB0aGVpciBvd24gZ29vZAorKwkgKi8KKysJaWYg KG9wdGlvbnMtPmhhcHB5X2RlbGF5IDwgMSkKKysJCW9wdGlvbnMtPmhhcHB5X2RlbGF5ID0gMjUw OyAvKiBkZWZhdWx0IDI1MG1zIGFzIHBlciBSRkMgODMwNSBTZWN0aW9uIDUgKi8KKysJaWYgKG9w dGlvbnMtPmRpc2FibGVfbXVsdGl0aHJlYWRlZCA9PSAtMSkKKysJCW9wdGlvbnMtPmRpc2FibGVf bXVsdGl0aHJlYWRlZCA9IDA7CisrCWlmIChvcHRpb25zLT5tZXRyaWNzID09IC0xKQorKwkJb3B0 aW9ucy0+bWV0cmljcyA9IDA7CisrCWlmIChvcHRpb25zLT5tZXRyaWNzX2ludGVydmFsID09IC0x KQorKwkJb3B0aW9ucy0+bWV0cmljc19pbnRlcnZhbCA9IDU7CisgCWlmIChvcHRpb25zLT5jb250 cm9sX21hc3RlciA9PSAtMSkKKyAJCW9wdGlvbnMtPmNvbnRyb2xfbWFzdGVyID0gMDsKKysJaWYg KG9wdGlvbnMtPmZhbGxiYWNrID09IC0xKQorKwkJb3B0aW9ucy0+ZmFsbGJhY2sgPSAxOworKwlp ZiAob3B0aW9ucy0+ZmFsbGJhY2tfcG9ydCA9PSAtMSkKKysJCW9wdGlvbnMtPmZhbGxiYWNrX3Bv cnQgPSBTU0hfREVGQVVMVF9QT1JUOworIAlpZiAob3B0aW9ucy0+Y29udHJvbF9wZXJzaXN0ID09 IC0xKSB7CisgCQlvcHRpb25zLT5jb250cm9sX3BlcnNpc3QgPSAwOworIAkJb3B0aW9ucy0+Y29u dHJvbF9wZXJzaXN0X3RpbWVvdXQgPSAwOworQEAgLTMwNTgsMTAgKzMxOTksMjIgQEAKKyAJCW9w dGlvbnMtPnBlcm1pdF9sb2NhbF9jb21tYW5kID0gMDsKKyAJaWYgKG9wdGlvbnMtPnZpc3VhbF9o b3N0X2tleSA9PSAtMSkKKyAJCW9wdGlvbnMtPnZpc3VhbF9ob3N0X2tleSA9IDA7CistCWlmIChv cHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPT0gLTEpCisrCS8qIGluIHRoZSBldmVudCB3ZSBh cmUgdXNpbmcgUkZDIDgzMDUgdGhlbiB3ZQorKwkgKiBuZWVkIHRvIG92ZXJyaWRlIHRoZSBkZWZh dWx0IFFPUyBhcyB0aGVzZQorKwkgKiBpbnRlcmZlcmUgd2l0aCB0aGUgY29ubmVjdGlvbiBwcm9j ZXNzIGluIG91cgorKwkgKiB0ZXN0IGVudmlyb25tZW50LiBJIGRvbid0IGtub3cgaWYgaXQgaGFz IGEgcmVhbCB3b3JsZAorKwkgKiBpbXBhY3QgYnV0IFRPRE8gdHJ5IHRvIGZpbmQgYSByZWFsIHdv cmxkIHdheSB0byB0ZXN0IHRoaXMuCisrCSAqLworKwlpZiAob3B0aW9ucy0+aXBfcW9zX2ludGVy YWN0aXZlID09IC0xKSB7CisgCQlvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPSBJUFRPU19E U0NQX0VGOworLQlpZiAob3B0aW9ucy0+aXBfcW9zX2J1bGsgPT0gLTEpCisrCQlpZiAob3B0aW9u cy0+dXNlX2hhcHB5ZXllcyA9PSAxKQorKwkJCW9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9 IElQVE9TX0xPV0RFTEFZOworKwl9CisrCWlmIChvcHRpb25zLT5pcF9xb3NfYnVsayA9PSAtMSkg eworIAkJb3B0aW9ucy0+aXBfcW9zX2J1bGsgPSBJUFRPU19EU0NQX0NTMDsKKysJCWlmIChvcHRp b25zLT51c2VfaGFwcHlleWVzID09IDEpCisrCQkJb3B0aW9ucy0+aXBfcW9zX2J1bGsgPSBJUFRP U19USFJPVUdIUFVUOworKwl9CisgCWlmIChvcHRpb25zLT5yZXF1ZXN0X3R0eSA9PSAtMSkKKyAJ CW9wdGlvbnMtPnJlcXVlc3RfdHR5ID0gUkVRVUVTVF9UVFlfQVVUTzsKKyAJaWYgKG9wdGlvbnMt PnNlc3Npb25fdHlwZSA9PSAtMSkKK0BAIC0zODcwLDYgKzQwMjMsMTUgQEAKKyAJZHVtcF9jZmdf Zm10aW50KG9WaXN1YWxIb3N0S2V5LCBvLT52aXN1YWxfaG9zdF9rZXkpOworIAlkdW1wX2NmZ19m bXRpbnQob1VwZGF0ZUhvc3RrZXlzLCBvLT51cGRhdGVfaG9zdGtleXMpOworIAlkdW1wX2NmZ19m bXRpbnQob0VuYWJsZUVzY2FwZUNvbW1hbmRsaW5lLCBvLT5lbmFibGVfZXNjYXBlX2NvbW1hbmRs aW5lKTsKKysJZHVtcF9jZmdfZm10aW50KG9UY3BSY3ZCdWZQb2xsLCBvLT50Y3BfcmN2X2J1Zl9w b2xsKTsKKysJZHVtcF9jZmdfZm10aW50KG9IUE5EaXNhYmxlZCwgby0+aHBuX2Rpc2FibGVkKTsK KysJZHVtcF9jZmdfZm10aW50KG9Ob25lU3dpdGNoLCBvLT5ub25lX3N3aXRjaCk7CisrCWR1bXBf Y2ZnX2ZtdGludChvTm9uZUVuYWJsZWQsIG8tPm5vbmVfZW5hYmxlZCk7CisrCWR1bXBfY2ZnX2Zt dGludChvTm9uZU1hY0VuYWJsZWQsIG8tPm5vbmVtYWNfZW5hYmxlZCk7CisrCWR1bXBfY2ZnX2Zt dGludChvRmFsbGJhY2ssIG8tPmZhbGxiYWNrKTsKKysJZHVtcF9jZmdfZm10aW50KG9NZXRyaWNz LCBvLT5tZXRyaWNzKTsKKysJZHVtcF9jZmdfZm10aW50KG9Vc2VNUFRDUCwgby0+dXNlX21wdGNw KTsKKysJZHVtcF9jZmdfZm10aW50KG9IYXBweUV5ZXMsIG8tPnVzZV9oYXBweWV5ZXMpOworIAlk dW1wX2NmZ19mbXRpbnQob1dhcm5XZWFrQ3J5cHRvLCBvLT53YXJuX3dlYWtfY3J5cHRvKTsKKyAK KyAJLyogSW50ZWdlciBvcHRpb25zICovCitAQCAtMzg4Miw2ICs0MDQ0LDkgQEAKKyAJZHVtcF9j ZmdfaW50KG9SZXF1aXJlZFJTQVNpemUsIG8tPnJlcXVpcmVkX3JzYV9zaXplKTsKKyAJZHVtcF9j ZmdfaW50KG9PYnNjdXJlS2V5c3Ryb2tlVGltaW5nLAorIAkgICAgby0+b2JzY3VyZV9rZXlzdHJv a2VfdGltaW5nX2ludGVydmFsKTsKKysJZHVtcF9jZmdfaW50KG9NZXRyaWNzSW50ZXJ2YWwsIG8t Pm1ldHJpY3NfaW50ZXJ2YWwpOworKwlkdW1wX2NmZ19pbnQob0ZhbGxiYWNrUG9ydCwgby0+ZmFs bGJhY2tfcG9ydCk7CisrCWR1bXBfY2ZnX2ludChvSGFwcHlEZWxheSwgby0+aGFwcHlfZGVsYXkp OworIAorIAkvKiBTdHJpbmcgb3B0aW9ucyAqLworIAlkdW1wX2NmZ19zdHJpbmcob0JpbmRBZGRy ZXNzLCBvLT5iaW5kX2FkZHJlc3MpOworQEAgLTM5MDksNiArNDA3NCw3IEBACisgCWR1bXBfY2Zn X3N0cmluZyhvWEF1dGhMb2NhdGlvbiwgby0+eGF1dGhfbG9jYXRpb24pOworIAlkdW1wX2NmZ19z dHJpbmcob0tub3duSG9zdHNDb21tYW5kLCBvLT5rbm93bl9ob3N0c19jb21tYW5kKTsKKyAJZHVt cF9jZmdfc3RyaW5nKG9UYWcsIG8tPnRhZyk7CisrCWR1bXBfY2ZnX3N0cmluZyhvTWV0cmljc1Bh dGgsIG8tPm1ldHJpY3NfcGF0aCk7CisgCWR1bXBfY2ZnX3N0cmluZyhvVmVyc2lvbkFkZGVuZHVt LCBvLT52ZXJzaW9uX2FkZGVuZHVtKTsKKyAKKyAJLyogRm9yd2FyZHMgKi8KK2RpZmYgLU51ciBv cGVuc3NoLTEwLjVwMS5vcmlnL3JlYWRjb25mLmggb3BlbnNzaC0xMC41cDEvcmVhZGNvbmYuaAor LS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvcmVhZGNvbmYuaAkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2 MzIyNDgyNCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3JlYWRjb25mLmgJMjAyNi0wOS0yMSAw NzowNjo1OS44OTIzMDA2NTggKzAyMDAKK0BAIC0xMjksNiArMTI5LDIzIEBACisgCWludAllbmFi bGVfc3NoX2tleXNpZ247CisgCWludDY0X3QgcmVrZXlfbGltaXQ7CisgCWludAlyZWtleV9pbnRl cnZhbDsKKysKKysJLyogaHBuc3NoIG9wdGlvbnMgKi8KKysJaW50ICAgICB0Y3BfcmN2X2J1Zl9w b2xsOyAvKiBPcHRpb24gdG8gcG9sbCByZWN2IGJ1ZiBldmVyeSB3aW5kb3cgdHJhbnNmZXIgKi8K KysJaW50ICAgICBocG5fZGlzYWJsZWQ7ICAgICAvKiBTd2l0Y2ggdG8gZGlzYWJsZSBIUE4gYnVm ZmVyIG1hbmFnZW1lbnQgKi8KKysJaW50ICAgICBub25lX3N3aXRjaDsgICAgLyogVXNlIG5vbmUg Y2lwaGVyICovCisrCWludCAgICAgbm9uZV9lbmFibGVkOyAgIC8qIEFsbG93IG5vbmUgdG8gYmUg dXNlZCAqLworKwlpbnQgICAgIG5vbmVtYWNfZW5hYmxlZDsgICAvKiBBbGxvdyBub25lIHRvIGJl IHVzZWQgKi8KKysJaW50ICAgICBkaXNhYmxlX211bHRpdGhyZWFkZWQ7IC8qIERpc2FibGUgbXVs dGl0aHJlYWRlZCBhZXMtY3RyICovCisrCWludCAgICAgbWV0cmljczsgLyogZW5hYmxlIG1ldHJp Y3MgKi8KKysJaW50ICAgICBtZXRyaWNzX2ludGVydmFsOyAvKiB0aW1lIGluIHNlY29uZHMgYmV0 d2VlbiBwb2xscyAqLworKwljaGFyICAgKm1ldHJpY3NfcGF0aDsgLyogcGF0aCBmb3IgdGhlIG1l dHJpY3MgZmlsZXMgKi8KKysJaW50ICAgICBmYWxsYmFjazsgLyogZW58ZGlzYWJsZSBmYWxsYmFj ayBwb3J0IChkZWY6IHRydWUpICovCisrCWludCAgICAgZmFsbGJhY2tfcG9ydDsgLyogcG9ydCB0 byBmYWxsYmFjayB0byAoZGVmOiAyMikgKi8KKysJaW50ICAgICB1c2VfbXB0Y3A7IC8qIHVzZSBN dWx0aVBhdGggVENQICovCisrCWludCAgICAgdXNlX2hhcHB5ZXllczsgLyogdXNlIFJGQyA4MzA1 IC0gSGFwcHkgRXllYmFsbHMgKi8KKysJaW50ICAgICBoYXBweV9kZWxheTsgLyogdXNlciBkZWZp bmVkIGRsZWF5IGZvciBSRkMgODMwNSAqLworKworIAlpbnQJbm9faG9zdF9hdXRoZW50aWNhdGlv bl9mb3JfbG9jYWxob3N0OworIAlpbnQJaWRlbnRpdGllc19vbmx5OworIAlpbnQJc2VydmVyX2Fs aXZlX2ludGVydmFsOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvUkVBRE1FLm1kIG9w ZW5zc2gtMTAuNXAxL1JFQURNRS5tZAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvUkVBRE1FLm1k CTIwMjYtMDgtMTEgMDQ6MjI6MTcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEv UkVBRE1FLm1kCTIwMjYtMDktMjEgMTE6NDY6NTUuNjgzNDE1OTI2ICswMjAwCitAQCAtMSwxOSAr MSwyMyBAQAorLSMgUG9ydGFibGUgT3BlblNTSAorKyMgSFBOU1NIOiBCYXNlZCBvbiBQb3J0YWJs ZSBPcGVuU1NICisrSFBOLVNTSCBpcyBhIGhpZ2ggcGVyZm9ybWFuY2Ugc29mdCBmb3JrIG9mIE9w ZW5TU0ggdGhhdCBjYW4gcHJvdmlkZSBzaWduaWZpY2FudGx5IGZhc3RlciB0aHJvdWdocHV0IGZv ciBidWxrIGRhdGEgdHJhbnNmZXJzIG92ZXIgYSB3aWRlIHJhbmdlIG9mIG5ldHdvcmsgcGF0aHMu IEluIHNvbWUgc2l0dWF0aW9ucyB3ZSd2ZSBzZWVuIHRocm91Z2hwdXQgcmF0ZXMgbW9yZSB0aGFu IDEwMCB0aW1lcyBmYXN0ZXIgdGhhbiBPcGVuU1NILiBIUE4tU1NIIGlzIGFibGUgdG8gZG8gdGhp cyBieSBvcHRpbWl6aW5nIHRoZSBhcHBsaWNhdGlvbiBsYXllciByZWNlaXZlIGJ1ZmZlciB0byBt YXRjaCB0aGUgVENQIHJlY2VpdmUgYnVmZmVyLiBOb3RhYmx5LCB0byBzZWUgcGVyZm9ybWFuY2Ug aW1wcm92ZW1lbnRzIEhQTi1TU0ggb25seSBuZWVkcyB0byBiZSB0aGUgZGF0YSByZWNlaXZlciBz byB1c2VycyBjYW4gc2VlIG5vdGFibGUgaW1wcm92ZW1lbnRzIHdpdGggbWFueSBvdGhlciBTU0gg aW1wbGVtZW50YXRpb25zLiBIUE4tU1NIIGFsc28gaW5jb3Jwb3JhdGVzIHR3byBwYXJhbGxlbGl6 ZWQgY2lwaGVycywgQUVTLUNUUiBhbmQgQ2hhY2hhMjAgKHRoZSBkZWZhdWx0KS4gV2hlbiB1c2lu ZyB0aGVzZSBjaXBoZXJzIGEgdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBvZiAzMCUg aXMgdHlwaWNhbC4gTW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgd2UgZG8gdGhpcyB3b3JrIGFuZCBv dGhlciBmZWF0dXJlcyBvZiBIUE4tU1NIIGlzIGF2YWlsYWJsZSBmcm9tIFtodHRwczovL2hwbnNz aC5vcmddKGh0dHBzOi8vaHBuc3NoLm9yZykuCisgCistWyFbQy9DKysgQ0ldKC4uLy4uL2FjdGlv bnMvd29ya2Zsb3dzL2MtY3BwLnltbC9iYWRnZS5zdmcpXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93 cy9jLWNwcC55bWwpCistWyFbVk0gQ0ldKC4uLy4uL2FjdGlvbnMvd29ya2Zsb3dzL3ZtLnltbC9i YWRnZS5zdmcpXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy92bS55bWwpCistWyFbQy9DKysgQ0kg c2VsZi1ob3N0ZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5zc2gtcG9ydGFibGUt c2VsZmhvc3RlZC9hY3Rpb25zL3dvcmtmbG93cy9zZWxmaG9zdGVkLnltbC9iYWRnZS5zdmcpXSho dHRwczovL2dpdGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlLXNlbGZob3N0ZWQvYWN0 aW9ucy93b3JrZmxvd3Mvc2VsZmhvc3RlZC55bWwpCistWyFbQ0lGdXp6XSguLi8uLi9hY3Rpb25z L3dvcmtmbG93cy9jaWZ1enoueW1sL2JhZGdlLnN2ZyldKC4uLy4uL2FjdGlvbnMvd29ya2Zsb3dz L2NpZnV6ei55bWwpCistWyFbRnV6emluZyBTdGF0dXNdKGh0dHBzOi8vb3NzLWZ1enotYnVpbGQt bG9ncy5zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2JhZGdlcy9vcGVuc3NoLnN2ZyldKGh0dHBzOi8v aXNzdWVzLm9zcy1mdXp6LmNvbS9pc3N1ZXM/cT0iUHJvamVjdDorb3BlbnNzaCIraXM6b3BlbikK Ky1bIVtDb3Zlcml0eSBTdGF0dXNdKGh0dHBzOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMv MjEzNDEvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9zY2FuLmNvdmVyaXR5LmNvbS9wcm9qZWN0cy9vcGVu c3NoLXBvcnRhYmxlKQorK1N0YXJ0aW5nIHdpdGggdmVyc2lvbiBIUE4xN3YwIHRoZXJlIHdpbGwg YmUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgbmFtaW5nIGNvbnZlbnRpb24gdXNlZCBmb3Ig ZXhlY3V0YWJsZXMgYW5kIGluc3RhbGxhdGlvbiBsb2NhdGlvbnMuIFRoZSBsYXN0IHZlcnNpb24g dGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZXNlIGNoYW5nZXMgaXMgSFBOMTZ2MSBjb3JyZXNwb25k aW5nIHRvIHRoZSBIUE4tOF84X1AxIHRhZyBvbiB0aGUgbWFzdGVyIGJyYW5jaC4KKyAKKy1PcGVu U1NIIGlzIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNTSCBwcm90b2NvbCAodmVy c2lvbiAyKSBmb3Igc2VjdXJlIHJlbW90ZSBsb2dpbiwgY29tbWFuZCBleGVjdXRpb24gYW5kIGZp bGUgdHJhbnNmZXIuIEl0IGluY2x1ZGVzIGEgY2xpZW50IGBgc3NoYGAgYW5kIHNlcnZlciBgYHNz aGRgYCwgZmlsZSB0cmFuc2ZlciB1dGlsaXRpZXMgYGBzY3BgYCBhbmQgYGBzZnRwYGAgYXMgd2Vs bCBhcyB0b29scyBmb3Iga2V5IGdlbmVyYXRpb24gKGBgc3NoLWtleWdlbmBgKSwgcnVuLXRpbWUg a2V5IHN0b3JhZ2UgKGBgc3NoLWFnZW50YGApIGFuZCBhIG51bWJlciBvZiBzdXBwb3J0aW5nIHBy b2dyYW1zLgorK0hQTlNTSCBpcyBhIHZhcmlhbnQgb2YgT3BlblNTSC4gSXQgYSBjb21wbGV0ZSBp bXBsZW1lbnRhdGlvbiBvZiB0aGUgU1NIIHByb3RvY29sICh2ZXJzaW9uIDIpIGZvciBzZWN1cmUg cmVtb3RlIGxvZ2luLCBjb21tYW5kIGV4ZWN1dGlvbiBhbmQgZmlsZSB0cmFuc2Zlci4gSXQgaW5j bHVkZXMgYSBjbGllbnQgYGBocG5zc2hgYCBhbmQgc2VydmVyIGBgaHBuc3NoZGBgLCBmaWxlIHRy YW5zZmVyIHV0aWxpdGllcyBgYGhwbnNjcGBgIGFuZCBgYGhwbnNmdHBgYCBhcyB3ZWxsIGFzIHRv b2xzIGZvciBrZXkgZ2VuZXJhdGlvbiAoYGBocG5zc2gta2V5Z2VuYGApLCBydW4tdGltZSBrZXkg c3RvcmFnZSAoYGBocG5zc2gtYWdlbnRgYCkgYW5kIGEgbnVtYmVyIG9mIHN1cHBvcnRpbmcgcHJv Z3JhbXMuIEl0IGluY2x1ZGVzIG51bWVyb3VzIHBlcmZvcm1hbmNlIGFuZCBmdW5jdGlvbmFsaXR5 IGVuaGFuY2VtZW50cyBmb2N1c2VkIG9uIGhpZ2ggcGVyZm9ybWFuY2UgbmV0d29ya3MgYW5kIGNv bXB1dGluZyBlbnZyaXJvbm1lbnRzLiBDb21wbGV0ZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQg aW4gdGhlIEhQTi1SRUFETUUgZmlsZS4KKyAKKy1UaGlzIGlzIGEgcG9ydCBvZiBPcGVuQlNEJ3Mg W09wZW5TU0hdKGh0dHBzOi8vb3BlbnNzaC5jb20pIHRvIG1vc3QgVW5peC1saWtlIG9wZXJhdGlu ZyBzeXN0ZW1zLCBpbmNsdWRpbmcgTGludXgsIE9TIFggYW5kIEN5Z3dpbi4gUG9ydGFibGUgT3Bl blNTSCBwb2x5ZmlsbHMgT3BlbkJTRCBBUElzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgZWxzZXdo ZXJlLCBhZGRzIHNzaGQgc2FuZGJveGluZyBmb3IgbW9yZSBvcGVyYXRpbmcgc3lzdGVtcyBhbmQg aW5jbHVkZXMgc3VwcG9ydCBmb3IgT1MtbmF0aXZlIGF1dGhlbnRpY2F0aW9uIGFuZCBhdWRpdGlu ZyAoZS5nLiB1c2luZyBQQU0pLgorK0l0IGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBhbGwgY29t cGxpYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGUgU1NIIHByb3RvY29sIGFuZCBPcGVuU1NIIGlu IHBhcnRpY3VsYXIuCisrCisrVGhpcyB2ZXJzaW9uIG9mIEhQTlNTSCBpcyBzaWduaWZpY2FudCBk ZXBhcnR1cmUgaW4gdGVybXMgb2YgbmFtaW5nIGV4ZWN1dGFibGVzIGFuZCBpbnN0YWxsYXRpb24g bG9jYXRpb25zLiBTcGVjaWZpY2FsbHksIGFsbCBleGVjdXRhYmxlcyBhcmUgbm93IHByZWZpeGVk IHdpdGggYGBocG5gYC4gU28gYGBzc2hgYCBiZWNvbWVzIGBgaHBuc3NoYGAgYW5kIGBgc2NwYGAg aXMgbm93IGBgaHBuc2NwYGAuIENvbmZpZ3VhdGlvbiBmaWxlcyBhbmQgaG9zdCBrZXlzIGNhbiBu b3cgYmUgZm91bmQgaW4gYGAvZXRjL2hwbnNzaGBgLiBCeSBkZWZhdWx0IGBgaHBuc3NoZGBgIG5v dyBydW5zIG9uIHBvcnQgMjIyMiBidXQgdGhpcyBpcyBjb25maWd1cmFibGUuIFRoaXMgY2hhbmdl IHdhcyBtYWRlIGluIG9yZGVyIHRvIHByZXZlbnQgaW5zdGFsbGF0aW9ucyBvZiBocG5zc2gsIHBh cnRpY3VsYXJseSBmcm9tIHBhY2thZ2UgZGlzdHJpYnV0aW9ucywgZnJvbSBpbnRlcmZlcmluZyB3 aXRoIGRlZmF1bHQgaW5zdGFsbGF0aW9ucyBvZiBPcGVuU1NILiBIUE5TU0ggaXMgYmFja3dhcmRz IGNvbXBhdGlibGUgd2l0aCBhbGwgdmVyc2lvbnMgb2YgT3BlblNTSCBpbmNsdWRpbmcgY29uZmln dXJhdGlvbiBmaWxlcywga2V5cywgYW5kIHJ1biB0aW1lIG9wdGlvbnMuIEFkZGl0aW9uYWxseSwg dGhlIGNsaWVudCB3aWxsLCBieSBkZWZhdWx0IGF0dGVtcHQgdG8gY29ubmVjdCB0byBwb3J0IDIy MjIgYnV0IHdpbGwgYXV0b21hdGljYWxseSBmYWxsIGJhY2sgdG8gcG9ydCAyMi4gVGhpcyBpcyBh bHNvIHVzZXIgY29uZmlndXJhYmxlLgorKworK0hQTlNTSCBpcyBiYXNlZCBvbiBPcGVuU1NIIHBv cnRhYmxlLiBUaGlzIGlzIGEgcG9ydCBvZiBPcGVuQlNEJ3MgW09wZW5TU0hdKGh0dHBzOi8vb3Bl bnNzaC5jb20pIHRvIG1vc3QgVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLCBpbmNsdWRpbmcg TGludXgsIE9TIFggYW5kIEN5Z3dpbi4gUG9ydGFibGUgT3BlblNTSCBwb2x5ZmlsbHMgT3BlbkJT RCBBUElzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgZWxzZXdoZXJlLCBhZGRzIHNzaGQgc2FuZGJv eGluZyBmb3IgbW9yZSBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgaW5jbHVkZXMgc3VwcG9ydCBmb3Ig T1MtbmF0aXZlIGF1dGhlbnRpY2F0aW9uIGFuZCBhdWRpdGluZyAoZS5nLiB1c2luZyBQQU0pLgor KworK1RoaXMgZG9jdW1lbnQgd2lsbCBiZSBjaGFuZ2luZyBvdmVyIHRpbWUgdG8gcmVmbGVjdCBu ZXcgY2hhbmdlcyBhbmQgZmVhdHVyZXMuIFRoaXMgZG9jdW1lbnQgaXMgYnVpbHQgb2ZmIG9mIHRo ZSBPcGVuU1NIIFJFQURNRS5tZAorKworK0N1cnJlbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVsZWFz ZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBIUE4tUkVBRE1FIGRvY3VtZW50LgorIAor ICMjIERvY3VtZW50YXRpb24KKyAKKy1UaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3IgT3Bl blNTSCBhcmUgdGhlIG1hbiBwYWdlcyBmb3IgZWFjaCB0b29sOgorK1RoZSBvZmZpY2lhbCBkb2N1 bWVudGF0aW9uIGZvciBIUE4tU1NIIGFyZSB0aGUgbWFuIHBhZ2VzIGZvciBlYWNoIHRvb2wuCisg CisgKiBbc3NoKDEpXShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zc2guMSkKKyAqIFtzc2hkKDgp XShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zc2hkLjgpCitAQCAtMjQsMTcgKzI4LDE4IEBACisg KiBbc3NoLWtleXNjYW4oOCldKGh0dHBzOi8vbWFuLm9wZW5ic2Qub3JnL3NzaC1rZXlzY2FuLjgp CisgKiBbc2Z0cC1zZXJ2ZXIoOCldKGh0dHBzOi8vbWFuLm9wZW5ic2Qub3JnL3NmdHAtc2VydmVy LjgpCisgCistIyMgU3RhYmxlIFJlbGVhc2VzCisrQWxsIG9wdGlvbnMgaW4gT3BlblNTSCBhcmUg cmVzcGVjdGVkIGJ5IEhQTi1TU0guCisgCistU3RhYmxlIHJlbGVhc2UgdGFyYmFsbHMgYXJlIGF2 YWlsYWJsZSBmcm9tIGEgbnVtYmVyIG9mIFtkb3dubG9hZCBtaXJyb3JzXShodHRwczovL3d3dy5v cGVuc3NoLmNvbS9wb3J0YWJsZS5odG1sI2Rvd25sb2FkcykuIFdlIHJlY29tbWVuZCB0aGUgdXNl IG9mIGEgc3RhYmxlIHJlbGVhc2UgZm9yIG1vc3QgdXNlcnMuIFBsZWFzZSByZWFkIHRoZSBbcmVs ZWFzZSBub3Rlc10oaHR0cHM6Ly93d3cub3BlbnNzaC5jb20vcmVsZWFzZW5vdGVzLmh0bWwpIGZv ciBkZXRhaWxzIG9mIHJlY2VudCBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgaW5jb21wYXRpYmlsaXRp ZXMuCisrIyMgQnVpbGRpbmcgSFBOU1NICisgCistIyMgQnVpbGRpbmcgUG9ydGFibGUgT3BlblNT SAorK0RldGFpbGVkIHN0ZXAgYnkgc3RlcCBpbnN0cnVjdGlvbnMgY2FuIGJlIGZvdW5kIGF0IGh0 dHBzOi8vcHNjLmVkdS9ocG4tc3NoLWhvbWUvCisgCisgIyMjIERlcGVuZGVuY2llcworIAorLVBv cnRhYmxlIE9wZW5TU0ggaXMgYnVpbHQgdXNpbmcgYXV0b2NvbmYgYW5kIG1ha2UuIEl0IHJlcXVp cmVzIGEgd29ya2luZyBDIGNvbXBpbGVyLCBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBoZWFkZXJzLgor K0hQTlNTSCBpcyBidWlsdCB1c2luZyBhdXRvY29uZiBhbmQgbWFrZS4gSXQgcmVxdWlyZXMgYSB3 b3JraW5nIEMgY29tcGlsZXIsIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGhlYWRlcnMuCisgCistYGBs aWJjcnlwdG9gYCBmcm9tIG9uZSBvZiBbTGlicmVTU0xdKGh0dHBzOi8vd3d3LmxpYnJlc3NsLm9y Zy8pLCBbT3BlblNTTF0oaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcpLCBbQVdTLUxDXShodHRwczov L2dpdGh1Yi5jb20vYXdzL2F3cy1sYykgb3IgW0JvcmluZ1NTTF0oaHR0cHM6Ly9naXRodWIuY29t L2dvb2dsZS9ib3Jpbmdzc2wpIG1heSBhbHNvIGJlIHVzZWQuICBPcGVuU1NIIG1heSBiZSBidWls dCB3aXRob3V0IGFueSBvZiB0aGVzZSwgYnV0IHRoZSByZXN1bHRpbmcgYmluYXJpZXMgd2lsbCBo YXZlIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcyBub3JtYWxs eSBhdmFpbGFibGUuCisrYGBsaWJjcnlwdG9gYCBmcm9tIGVpdGhlciBbTGlicmVTU0xdKGh0dHBz Oi8vd3d3LmxpYnJlc3NsLm9yZy8pIG9yIFtPcGVuU1NMXShodHRwczovL3d3dy5vcGVuc3NsLm9y ZykgbWF5IGFsc28gYmUgdXNlZC4gSFBOLVNTSCBtYXkgYmUgYnVpbHQgd2l0aG91dCBlaXRoZXIg b2YgdGhlc2UsIGJ1dCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgaGF2ZSBvbmx5IGEgc3Vi c2V0IG9mIHRoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgbm9ybWFsbHkgYXZhaWxhYmxlLgor K1RoZSBkZXZlbG9wZXJzIG9mIEhQTi1TU0ggc3Ryb25nbHkgc3VnZ2VzdCB0aGUgdXNlIG9mIE9w ZW5TU0wgMy4wIG9yIGhpZ2hlciB0byBzdXBwb3J0IHRoZSBhZHZhbmNlZCBjcnlwdG9ncmFwaHkg bWV0aG9kcyB1c2VkLgorIAorIFt6bGliXShodHRwczovL3d3dy56bGliLm5ldC8pIGlzIG9wdGlv bmFsOyB3aXRob3V0IGl0IHRyYW5zcG9ydCBjb21wcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkLgor IAorQEAgLTQ3LDggKzUyLDkgQEAKKyBSZWxlYXNlIHRhcmJhbGxzIGFuZCByZWxlYXNlIGJyYW5j aGVzIGluIGdpdCBpbmNsdWRlIGEgcHJlLWJ1aWx0IGNvcHkgb2YgdGhlIGBgY29uZmlndXJlYGAg c2NyaXB0IGFuZCBtYXkgYmUgYnVpbHQgdXNpbmc6CisgCisgYGBgCistdGFyIHp4dmYgb3BlbnNz aC1YLllwWi50YXIuZ3oKKy1jZCBvcGVuc3NoCisrdGFyIHp4dmYgaHBuc3NoLVguWXBaLnRhci5n egorK2NkIGhwbi1zc2gKKythdXRvcmVjb25mIC1mIC1pCisgLi9jb25maWd1cmUgIyBbb3B0aW9u c10KKyBtYWtlICYmIG1ha2UgdGVzdHMKKyBgYGAKK0BAIC01NywxOSArNjMsMTkgQEAKKyAKKyAj IyMgQnVpbGRpbmcgZnJvbSBnaXQKKyAKKy1JZiBidWlsZGluZyBmcm9tIHRoZSBnaXQgbWFzdGVy IGJyYW5jaCwgeW91J2xsIG5lZWQgW2F1dG9jb25mXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3 YXJlL2F1dG9jb25mLykgaW5zdGFsbGVkIHRvIGJ1aWxkIHRoZSBgYGNvbmZpZ3VyZWBgIHNjcmlw dC4gVGhlIGZvbGxvd2luZyBjb21tYW5kcyB3aWxsIGNoZWNrIG91dCBhbmQgYnVpbGQgcG9ydGFi bGUgT3BlblNTSCBmcm9tIGdpdDoKKytJZiBidWlsZGluZyBmcm9tIHRoZSBnaXQgbWFzdGVyIGJy YW5jaCwgeW91J2xsIG5lZWQgW2F1dG9jb25mXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJl L2F1dG9jb25mLykgaW5zdGFsbGVkIHRvIGJ1aWxkIHRoZSBgYGNvbmZpZ3VyZWBgIHNjcmlwdC4g VGhlIGZvbGxvd2luZyBjb21tYW5kcyB3aWxsIGNoZWNrIG91dCBhbmQgYnVpbGQgSFBOLVNTSCBm cm9tIGdpdDoKKyAKKyBgYGAKKy1naXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL29wZW5zc2gv b3BlbnNzaC1wb3J0YWJsZSAjIG9yIGh0dHBzOi8vYW5vbmdpdC5taW5kcm90Lm9yZy9vcGVuc3No LmdpdAorLWNkIG9wZW5zc2gtcG9ydGFibGUKKy1hdXRvcmVjb25mCisrZ2l0IGNsb25lIGh0dHBz Oi8vZ2l0aHViLmNvbS9yYXBpZXIxL2hwbi1zc2gKKytjZCBocG4tc3NoCisrYXV0b3JlY29uZiAt ZiAtaQorIC4vY29uZmlndXJlCisgbWFrZSAmJiBtYWtlIHRlc3RzCisgYGBgCisgCisgIyMjIEJ1 aWxkLXRpbWUgQ3VzdG9taXNhdGlvbgorIAorLVRoZXJlIGFyZSBtYW55IGJ1aWxkLXRpbWUgY3Vz dG9taXNhdGlvbiBvcHRpb25zIGF2YWlsYWJsZS4gQWxsIEF1dG9jb25mIGRlc3RpbmF0aW9uIHBh dGggZmxhZ3MgKGUuZy4gYGAtLXByZWZpeGBgKSBhcmUgc3VwcG9ydGVkIChhbmQgYXJlIHVzdWFs bHkgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBPcGVuU1NIKS4KKytUaGVyZSBhcmUg bWFueSBidWlsZC10aW1lIGN1c3RvbWlzYXRpb24gb3B0aW9ucyBhdmFpbGFibGUuIEFsbCBBdXRv Y29uZiBkZXN0aW5hdGlvbiBwYXRoIGZsYWdzIChlLmcuIGBgLS1wcmVmaXhgYCkgYXJlIHN1cHBv cnRlZCAoYW5kIGFyZSB1c3VhbGx5IHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgSFBO LVNTSCkuCisgCisgRm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBmbGFncywgcnVuIGBgLi9j b25maWd1cmUgLS1oZWxwYGAgYnV0IGEgZmV3IG9mIHRoZSBtb3JlIGZyZXF1ZW50bHktdXNlZCBv bmVzIGFyZSBkZXNjcmliZWQgYmVsb3cuIFNvbWUgb2YgdGhlc2UgZmxhZ3Mgd2lsbCByZXF1aXJl IGFkZGl0aW9uYWwgbGlicmFyaWVzIGFuZC9vciBoZWFkZXJzIGJlIGluc3RhbGxlZC4KKyAKK0BA IC03OSwxMSArODUsMTMgQEAKKyBgYC0td2l0aC1saWJlZGl0YGAgfCBFbmFibGUgW2xpYmVkaXRd KGh0dHBzOi8vd3d3LnRocnlzb2VlLmRrL2VkaXRsaW5lLykgc3VwcG9ydCBmb3Igc2Z0cC4KKyBg YC0td2l0aC1rZXJiZXJvczVgYCB8IEVuYWJsZSBLZXJiZXJvcy9HU1NBUEkgc3VwcG9ydC4gQm90 aCBbSGVpbWRhbF0oaHR0cHM6Ly93d3cuaDVsLm9yZy8pIGFuZCBbTUlUXShodHRwczovL3dlYi5t aXQuZWR1L2tlcmJlcm9zLykgS2VyYmVyb3MgaW1wbGVtZW50YXRpb25zIGFyZSBzdXBwb3J0ZWQu CisgYGAtLXdpdGgtc2VsaW51eGBgIHwgRW5hYmxlIFtTRUxpbnV4XShodHRwczovL2VuLndpa2lw ZWRpYS5vcmcvd2lraS9TZWN1cml0eS1FbmhhbmNlZF9MaW51eCkgc3VwcG9ydC4KKytgYC0td2l0 aC1zZWN1cml0eS1rZXktYnVpbHRpbmBgIHwgSW5jbHVkZSBidWlsdC1pbiBzdXBwb3J0IGZvciBV MkYvRklETzIgc2VjdXJpdHkga2V5cy4gVGhpcyByZXF1aXJlcyBbbGliZmlkbzJdKGh0dHBzOi8v Z2l0aHViLmNvbS9ZdWJpY28vbGliZmlkbzIpIGJlIGluc3RhbGxlZC4KKyAKKyAjIyBEZXZlbG9w bWVudAorIAorIFBvcnRhYmxlIE9wZW5TU0ggZGV2ZWxvcG1lbnQgaXMgZGlzY3Vzc2VkIG9uIHRo ZSBbb3BlbnNzaC11bml4LWRldiBtYWlsaW5nIGxpc3RdKGh0dHBzOi8vbGlzdHMubWluZHJvdC5v cmcvbWFpbG1hbi9saXN0aW5mby9vcGVuc3NoLXVuaXgtZGV2KSAoW2FyY2hpdmUgbWlycm9yXSho dHRwczovL21hcmMuaW5mby8/bD1vcGVuc3NoLXVuaXgtZGV2KSkuIEJ1Z3MgYW5kIGZlYXR1cmUg cmVxdWVzdHMgYXJlIHRyYWNrZWQgb24gb3VyIFtCdWd6aWxsYV0oaHR0cHM6Ly9idWd6aWxsYS5t aW5kcm90Lm9yZy8pLgorK0hQTi1TU0ggZGV2ZWxvcG1lbnQgaXMgZGlzY3Vzc2VkIG9uIHRoZSBb aHBuc3NoLWNvbW11bml0eSBtYWlsaW5nIGxpc3RdKGh0dHBzOi8vbGlzdHMucHNjLmVkdS9tYWls bWFuL2xpc3RpbmZvL2hwbnNzaC1jb21tdW5pdHkpIGFuZCBvbiB0aGUgW0dpdEh1YiBEaXNjdXNz aW9ucyBwYWdlXShodHRwczovL2dpdGh1Yi5jb20vcmFwaWVyMS9ocG4tc3NoL2Rpc2N1c3Npb25z KS4KKyAKKyAjIyBSZXBvcnRpbmcgYnVncworIAorLV9Ob24tc2VjdXJpdHlfIGJ1Z3MgbWF5IGJl IHJlcG9ydGVkIHRvIHRoZSBkZXZlbG9wZXJzIHZpYSBbQnVnemlsbGFdKGh0dHBzOi8vYnVnemls bGEubWluZHJvdC5vcmcvKSBvciB2aWEgdGhlIG1haWxpbmcgbGlzdCBhYm92ZS4gU2VjdXJpdHkg YnVncyBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gW29wZW5zc2hAb3BlbnNzaC5jb21dKG1haWx0bzpv cGVuc3NoLm9wZW5zc2guY29tKS4KKytfTm9uLXNlY3VyaXR5XyBidWdzIG1heSBiZSByZXBvcnRl ZCB0byB0aGUgZGV2ZWxvcGVycyB2aWEgW0dpdEh1YiBJc3N1ZXNdKGh0dHBzOi8vZ2l0aHViLmNv bS9yYXBpZXIxL2hwbi1zc2gvaXNzdWVzKSBvciB2aWEgdGhlIG1haWxpbmcgbGlzdCBhYm92ZS4g U2VjdXJpdHkgYnVncyBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gW2hwbnNzaEBwc2MuZWR1XShtYWls dG86aHBuc3NoQHBzYy5lZHUpLgorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2FuZGJv eC1zZWNjb21wLWZpbHRlci5jIG9wZW5zc2gtMTAuNXAxL3NhbmRib3gtc2VjY29tcC1maWx0ZXIu YworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jCTIwMjYt MDktMjEgMDc6MDY6MDUuMzM0MDM4MzI1ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc2FuZGJv eC1zZWNjb21wLWZpbHRlci5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODkyNTc5NzM2ICswMjAwCitA QCAtMzIzLDYgKzMyMyw5IEBACisgI2lmZGVmIF9fTlJfZ2V0ZXVpZDMyCisgCVNDX0FMTE9XKF9f TlJfZ2V0ZXVpZDMyKSwKKyAjZW5kaWYKKysjaWZkZWYgX19OUl9nZXRwZWVybmFtZSAvKiBub3Qg ZGVmaW5lZCBvbiBhcmNocyB0aGF0IGdvIHZpYSBzb2NrZXRjYWxsKDIpICovCisrCVNDX0FMTE9X KF9fTlJfZ2V0cGVlcm5hbWUpLAorKyNlbmRpZgorICNpZmRlZiBfX05SX2dldHBnaWQKKyAJU0Nf QUxMT1coX19OUl9nZXRwZ2lkKSwKKyAjZW5kaWYKK0BAIC0zNzAsNiArMzczLDkgQEAKKyAjIGlm ZGVmIE1BRFZfRE9OVE5FRUQKKyAJU0NfQUxMT1dfQVJHKF9fTlJfbWFkdmlzZSwgMiwgTUFEVl9E T05UTkVFRCksCisgIyBlbmRpZgorKyMgaWZkZWYgTUFEVl9ET05UTkVFRF9MT0NLRUQKKysJU0Nf QUxMT1dfQVJHKF9fTlJfbWFkdmlzZSwgMiwgTUFEVl9ET05UTkVFRF9MT0NLRUQpLAorKyMgZW5k aWYKKyAjIGlmZGVmIE1BRFZfRE9OVEZPUksKKyAJU0NfQUxMT1dfQVJHKF9fTlJfbWFkdmlzZSwg MiwgTUFEVl9ET05URk9SSyksCisgIyBlbmRpZgorQEAgLTQ0MSw2ICs0NDcsOSBAQAorICNpZmRl ZiBfX05SX3NpZ3Byb2NtYXNrCisgCVNDX0FMTE9XKF9fTlJfc2lncHJvY21hc2spLAorICNlbmRp ZgorKyNpZmRlZiBfX05SX3NvY2tldGNhbGwKKysJU0NfQUxMT1coX19OUl9zb2NrZXRjYWxsKSwK KysjZW5kaWYKKyAjaWZkZWYgX19OUl90aW1lCisgCVNDX0FMTE9XKF9fTlJfdGltZSksCisgI2Vu ZGlmCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zY3AuMSBvcGVuc3NoLTEwLjVwMS9z Y3AuMQorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2NwLjEJMjAyNi0wOS0yMSAwNzowNjowNS4y NTE2NDM0ODggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zY3AuMQkyMDI2LTA5LTIxIDA3OjA2 OjU5Ljg5MjcwNjkwNCArMDIwMAorQEAgLTE4LDcgKzE4LDcgQEAKKyAuTmQgT3BlblNTSCBzZWN1 cmUgZmlsZSBjb3B5CisgLlNoIFNZTk9QU0lTCisgLk5tIHNjcAorLS5PcCBGbCAzNDZBQkNPcHFS cnNUdgorKy5PcCBGbCAzNDZBQkNPcHFScnNUdloKKyAuT3AgRmwgYyBBciBjaXBoZXIKKyAuT3Ag RmwgRCBBciBzZnRwX3NlcnZlcl9wYXRoCisgLk9wIEZsIEYgQXIgc3NoX2NvbmZpZworQEAgLTMz LDYgKzMzLDggQEAKKyAuU2ggREVTQ1JJUFRJT04KKyAuTm0KKyBjb3BpZXMgZmlsZXMgYmV0d2Vl biBob3N0cyBvbiBhIG5ldHdvcmsuCisrSXQgaXMgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBPcGVu U1NIJ3Mgc2NwIGluY2x1ZGluZworK3RoZSB1c2Ugb2YgdGhlIHNhbWUgZGlyZWN0aXZlcyBhbmQg Y29uZmlndXJhdGlvbiBvcHRpb25zIGV4Y2VwdCB3aGVyZSBub3RlZC4gCisgLlBwCisgLk5tCisg dXNlcyB0aGUgU0ZUUCBwcm90b2NvbCBvdmVyIGFuCitAQCAtMjU4LDYgKzI2MCw3IEBACisgLkl0 IFR1bm5lbAorIC5JdCBUdW5uZWxEZXZpY2UKKyAuSXQgVXBkYXRlSG9zdEtleXMKKysuSXQgVXNl TVBUQ1AKKyAuSXQgVXNlcgorIC5JdCBVc2VyS25vd25Ib3N0c0ZpbGUKKyAuSXQgVmVyaWZ5SG9z dEtleUROUworQEAgLTI5NCw2ICsyOTcsMTAgQEAKKyBOb3RlIHRoYXQKKyAuTm0KKyBmb2xsb3dz IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkIGluIHRoZSB0cmVlIHRyYXZlcnNhbC4KKysuSXQg RmwgWgorK1Jlc3VtZSBmYWlsZWQgb3IgaW50ZXJydXB0ZWQgdHJhbnNmZXIuIElkZW50aWNhbCBm aWxlcyB3aWxsIGJlIHNraXBwZWQuIFJlbW90ZSBtdXN0IGhhdmUgcmVzdW1lIG9wdGlvbi4KKysu Tm0KKytvbmx5IG9wdGlvbi4KKyAuSXQgRmwgUyBBciBwcm9ncmFtCisgTmFtZSBvZgorIC5BciBw cm9ncmFtCitAQCAtMzAxLDYgKzMwOCwxNCBAQAorIFRoZSBwcm9ncmFtIG11c3QgdW5kZXJzdGFu ZAorIC5YciBzc2ggMQorIG9wdGlvbnMuCisrLkl0IEZsIHogQXIgcHJvZ3JhbQorK1BhdGggdG8g aHBuc2NwIG9uIHJlbW90ZSBzeXN0ZW0uIFVzZWZ1bCBpZiByZW1vdGUgaGFzIG11bHRpcGxlIHNj cCBpbnN0YWxscy4KKytGb3IgZXhhbXBsZSwgdXNpbmcgdGhlIHJlc3VtZSBvcHRpb24gYnV0IHRo ZSBkZWZhdWx0IHJlbW90ZSBzY3AgZG9lcyBub3QgaGF2ZSB0aGUgcmVzdW1lIG9wdGlvbi4KKytV c2UgLXogdG8gcG9pbnQgdGhlIHZlcnNpb24gdGhhdCBkb2VzIC0gZS5nLiAteiAvb3B0L2hwbnNz aC9iaW4vaHBuc2NwLgorKy5ObQorK29ubHkgb3B0aW9uLiAKKysuSXQgRmwgcworK1VzZSB0aGUg U0ZUUCBwcm90b2NvbCBmb3IgdHJhbnNmZXJzIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBzY3Ag cHJvdG9jb2wuCisgLkl0IEZsIFQKKyBEaXNhYmxlIHN0cmljdCBmaWxlbmFtZSBjaGVja2luZy4K KyBCeSBkZWZhdWx0IHdoZW4gY29weWluZyBmaWxlcyBmcm9tIGEgcmVtb3RlIGhvc3QgdG8gYSBs b2NhbCBkaXJlY3RvcnkKK0BAIC0zMjcsMTAgKzM0MiwxMyBAQAorIC5JdCBDbSBucmVxdWVzdHMg TnMgPSBOcyBBciB2YWx1ZQorIENvbnRyb2xzIGhvdyBtYW55IGNvbmN1cnJlbnQgU0ZUUCByZWFk IG9yIHdyaXRlIHJlcXVlc3RzIG1heSBiZSBpbiBwcm9ncmVzcworIGF0IGFueSBwb2ludCBpbiB0 aW1lIGR1cmluZyBhIGRvd25sb2FkIG9yIHVwbG9hZC4KKy1CeSBkZWZhdWx0IDY0IHJlcXVlc3Rz IG1heSBiZSBhY3RpdmUgY29uY3VycmVudGx5LgorK1RoaXMgdmFsdWUgbXVzdCBiZSBiZXR3ZWVu IDEgYW5kIDgxOTIuCisrQnkgZGVmYXVsdCAxMDI0IHJlcXVlc3RzIG1heSBiZSBhY3RpdmUgY29u Y3VycmVudGx5LgorIC5JdCBDbSBidWZmZXIgTnMgPSBOcyBBciB2YWx1ZQorIENvbnRyb2xzIHRo ZSBtYXhpbXVtIGJ1ZmZlciBzaXplIGZvciBhIHNpbmdsZSBTRlRQIHJlYWQvd3JpdGUgb3BlcmF0 aW9uIHVzZWQKKyBkdXJpbmcgZG93bmxvYWQgb3IgdXBsb2FkLgorK1RoaXMgdmFsdWUgbXVzdCBi ZSBiZXR3ZWVuIDFCIGFuZCAyNTVLQi4gWW91IG1heSB1c2UKKyt0aGUgSyB1bml0IGZvciB0aGUg c2l6ZS4gRS5nLiAzMjc2OCBvciAzMksuCisgQnkgZGVmYXVsdCBhIDMyS0IgYnVmZmVyIGlzIHVz ZWQuCisgLkVsCisgLkVsCitAQCAtMzY0LDYgKzM4Miw3IEBACisgLlNoIEFVVEhPUlMKKyAuQW4g VGltbyBSaW5uZSBBcSBNdCB0cmlAaWtpLmZpCisgLkFuIFRhdHUgWWxvbmVuIEFxIE10IHlsb0Bj cy5odXQuZmkKKysuQW4gQ2hyaXMgUmFwaWVyIEFxIE10IHJhcGllckBwc2MuZWR1CisgLlNoIENB VkVBVFMKKyBUaGUgbGVnYWN5IFNDUCBwcm90b2NvbCAoc2VsZWN0ZWQgYnkgdGhlCisgLkZsIE8K K2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NjcC5jIG9wZW5zc2gtMTAuNXAxL3NjcC5j CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zY3AuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjI2MzE1 MjkzOCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NjcC5jCTIwMjYtMDktMjEgMTA6NTY6MDYu NjYwNjcwMjk1ICswMjAwCitAQCAtMTcsNiArMTcsNyBAQAorIC8qCisgICogQ29weXJpZ2h0IChj KSAxOTk5IFRoZW8gZGUgUmFhZHQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqIENvcHlyaWdo dCAoYykgMTk5OSBBYXJvbiBDYW1wYmVsbC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICogQ29w eXJpZ2h0IChjKSAyMDIxIENocmlzIFJhcGllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgor ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworQEAgLTExMyw2ICsxMTQsMTIgQEAKKyAjaW5j bHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJwcm9ncmVzc21ldGVyLmgiCisgI2luY2x1ZGUgInV0 ZjguaCIKKysvKiBsaWJyZXNzbCBkb2Vzbid0IHN1cHBvcnQgdGhlIGJsYWtlMmI1MTIgZGlnZXN0 IHNvCisrICogd2UgbmVlZCB0byBwcmV2ZW50IGxpYnJlc3NsIGZyb20gdXNpbmcgdGhlIHJlc3Vt ZSBmZWF0dXJlCisrICogY2pyIDcvMTgvMjAyMyAqLworKyNpZiAoZGVmaW5lZCBXSVRIX09QRU5T U0wpICYmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNlbmRpZgorICNpbmNsdWRlICJzZnRwLmgiCisgCisgI2luY2x1ZGUgInNm dHAtY29tbW9uLmgiCitAQCAtMTU1LDYgKzE2MiwxMCBAQAorIC8qIFRoaXMgaXMgdGhlIHByb2dy YW0gdG8gZXhlY3V0ZSBmb3IgdGhlIHNlY3VyZSBjb25uZWN0aW9uLiAoInNzaCIgb3IgLVMpICov CisgY2hhciAqc3NoX3Byb2dyYW0gPSBfUEFUSF9TU0hfUFJPR1JBTTsKKyAKKysvKiB0aGlzIGlz IHBhdGggdG8gdGhlIHJlbW90ZSBzY3AgcHJvZ3JhbSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVj aWZ5CisrICogYSBub24tZGVmYXVsdCBzY3AgKi8KKytjaGFyICpyZW1vdGVfcGF0aDsKKysKKyAv KiBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHBpZCBvZiBzc2hfcHJvZ3JhbSAqLworIHBpZF90 IGRvX2NtZF9waWQgPSAtMTsKKyBwaWRfdCBkb19jbWRfcGlkMiA9IC0xOworQEAgLTE2OSw2ICsx ODAsMTcgQEAKKyBpbnQgc2Z0cF9nbG9iKHN0cnVjdCBzZnRwX2Nvbm4gKiwgY29uc3QgY2hhciAq LCBpbnQsCisgICAgIGludCAoKikoY29uc3QgY2hhciAqLCBpbnQpLCBnbG9iX3QgKik7IC8qIHBy b3RvIGZvciBzZnRwLWdsb2IuYyAqLworIAorKy8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGlz IGlzIGEgZmlsZSByZXN1bWUgKi8KKytpbnQgcmVzdW1lX2ZsYWcgPSAwOyAvKiAwIGlzIG9mZiwg MSBpcyBvbiAqLworKworKy8qIHdlIHdhbnQgdGhlIGhvc3QgbmFtZSBmb3IgZGVidWdnaW5nIHB1 cnBvc2VzICovCisrY2hhciBob3N0bmFtZVtIT1NUX05BTUVfTUFYICsgMV07CisrCisrLyogZGVm aW5lcyBmb3IgdGhlIHJlc3VtZSBmdW5jdGlvbi4gTmVlZCB0aGVtIGV2ZW4gaWYgbm90IHN1cHBv cnRlZCAqLworKyNkZWZpbmUgSEFTSF9MRU4gMTI4ICAgICAgICAgICAgICAgLyo0MCBzaGExLCA2 NCBibGFrZTJzMjU2IDEyOCBibGFrZTJiNTEyKi8KKysjZGVmaW5lIEJVRl9BTkRfSEFTSCBIQVNI X0xFTiArIDY0IC8qIGxlbmd0aCBvZiB0aGUgaGFzaCBhbmQgb3RoZXIgZGF0YSB0byBnZXQgc2l6 ZSBvZiBidWZmZXIgKi8KKysjZGVmaW5lIEhBU0hfQlVGTEVOIDgxOTIJICAgLyogODE5MiBzZWVt cyB0byBiZSBhIGdvb2QgYmFsYW5jZSBiZXR3ZWVuIGZyZWFkcworKwkJCQkgICAgKiBhbmQgdGhl IGRpZ2VzdCBmdW5jKi8KKyBzdGF0aWMgdm9pZAorIGtpbGxjaGlsZChpbnQgc2lnbm8pCisgewor QEAgLTIxNiw2ICsyMzgsOSBAQAorIAlpbnQgc3RhdHVzOworIAlwaWRfdCBwaWQ7CisgCisrI2lm ZGVmIERFQlVHCisrCWZwcmludGYoc3RkZXJyLCAiSW4gZG9fbG9jYWxfY21kXG4iKTsKKysjZW5k aWYKKyAJaWYgKGEtPm51bSA9PSAwKQorIAkJZmF0YWwoImRvX2xvY2FsX2NtZDogbm8gYXJndW1l bnRzIik7CisgCitAQCAtNDQxLDYgKzQ2Niw4IEBACisgdm9pZCB0b2xvY2FsKGludCwgY2hhciAq W10sIGVudW0gc2NwX21vZGVfZSwgY2hhciAqc2Z0cF9kaXJlY3QpOworIHZvaWQgdG9yZW1vdGUo aW50LCBjaGFyICpbXSwgZW51bSBzY3BfbW9kZV9lLCBjaGFyICpzZnRwX2RpcmVjdCk7Cisgdm9p ZCB1c2FnZSh2b2lkKTsKKyt2b2lkIGNhbGN1bGF0ZV9oYXNoKGNoYXIgKiwgY2hhciAqLCBvZmZf dCk7IC8qZ2V0IHRoZSBoYXNoIG9mIGZpbGUgdG8gbGVuZ3RoKi8KKyt2b2lkIHJhbmRfc3RyKGNo YXIgKiwgc2l6ZV90KTsgLypnZW4gcmFuZG9tZSBjaGFyIHN0cmluZyAqLworIAorIHZvaWQgc291 cmNlX3NmdHAoaW50LCBjaGFyICosIGNoYXIgKiwgc3RydWN0IHNmdHBfY29ubiAqKTsKKyB2b2lk IHNpbmtfc2Z0cChpbnQsIGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc2Z0cF9jb25uICop OworQEAgLTQ1OSwxMSArNDg2LDE4IEBACisgCWNoYXIgKnNmdHBfZGlyZWN0ID0gTlVMTDsKKyAJ bG9uZyBsb25nIGxsdjsKKyAKKysJLyogd2UgdXNlIHRoaXMgdG8gcHJlcGVuZCB0aGUgZGVidWdn aW5nIHN0YXRlbWVudHMKKysJICogc28gd2Uga25vdyB3aGljaCBzaWRlIGlzIHNheWluZyB3aGF0 ICovCisrCWdldGhvc3RuYW1lKGhvc3RuYW1lLCBIT1NUX05BTUVfTUFYICsgMSk7CisrCisgCS8q IEVuc3VyZSB0aGF0IGZkcyAwLCAxIGFuZCAyIGFyZSBvcGVuIG9yIGRpcmVjdGVkIHRvIC9kZXYv bnVsbCAqLworIAlzYW5pdGlzZV9zdGRmZCgpOworIAorIAltc2V0bG9jYWxlKCk7CisgCisrCS8q IGZvciB1c2Ugd2l0aCByYW5kIGZ1bmN0aW9uIHdoZW4gcmVzdW1lIG9wdGlvbiBpcyB1c2VkKi8K KysJc3JhbmQodGltZShOVUxMKSk7CisrCisgCS8qIENvcHkgYXJndiwgYmVjYXVzZSB3ZSBtb2Rp ZnkgaXQgKi8KKyAJYXJndjAgPSBhcmd2WzBdOworIAluZXdhcmd2ID0geGNhbGxvYyhNQVhJTVVN KGFyZ2MgKyAxLCAxKSwgc2l6ZW9mKCpuZXdhcmd2KSk7CitAQCAtNDg4LDcgKzUyMiw3IEBACisg CisgCWZmbGFnID0gVGZsYWcgPSB0ZmxhZyA9IDA7CisgCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJn YywgYXJndiwKKy0JICAgICIxMjM0NkFCQ1RkZk9wcVJyc3R2RDpGOko6TTpQOlM6YzppOmw6bzpY OiIpKSAhPSAtMSkgeworKwkgICAgIjEyMzQ2QUJDVGRmT3BxUnJzdHZaRDpGOko6TTpQOlM6Yzpp Omw6bzpYOiIpKSAhPSAtMSkgeworIAkJc3dpdGNoIChjaCkgeworIAkJLyogVXNlci12aXNpYmxl IGZsYWdzLiAqLworIAkJY2FzZSAnMSc6CitAQCAtNTY5LDI0ICs2MDMsMzYgQEAKKyAJCQlhZGRh cmdzKCZyZW1vdGVfcmVtb3RlX2FyZ3MsICItcSIpOworIAkJCXNob3dwcm9ncmVzcyA9IDA7Cisg CQkJYnJlYWs7CisrI2lmIChkZWZpbmVkIFdJVEhfT1BFTlNTTCkgJiYgIWRlZmluZWQoTElCUkVT U0xfVkVSU0lPTl9OVU1CRVIpCisrCQljYXNlICdaJzoKKysJCQkvKiBjdXJyZW50bHkgcmVzdW1l IG9ubHkgd29ya3MgaW4gU0NQIG1vZGUgKi8KKysJCQlyZXN1bWVfZmxhZyA9IDE7CisrCQkJbW9k ZSA9IE1PREVfU0NQOworKwkJCWJyZWFrOworKyNlbmRpZgorIAkJY2FzZSAnWCc6CisgCQkJLyog UGxlYXNlIGtlZXAgaW4gc3luYyB3aXRoIHNmdHAuYyAtWCAqLworIAkJCWlmIChzdHJuY21wKG9w dGFyZywgImJ1ZmZlcj0iLCA3KSA9PSAwKSB7CisgCQkJCXIgPSBzY2FuX3NjYWxlZChvcHRhcmcg KyA3LCAmbGx2KTsKKy0JCQkJaWYgKHIgPT0gMCAmJiAobGx2IDw9IDAgfHwgbGx2ID4gMjU2ICog MTAyNCkpIHsKKysJCQkJLyogZG9uJ3QgYXNrIGZvciBhIGJ1ZmZlciBsYXJnZXIgdGhhbiB0aGUg bWF4aW11bQorKwkJCQkgKiBzaXplIHRoYXQgU0ZUUCBjYW4gaGFuZGxlICovCisrCQkJCWlmIChy ID09IDAgJiYgKGxsdiA8PSAwIHx8IGxsdiA+IChTRlRQX01BWF9NU0dfTEVOR1RIIC0gMTAyNCkp KSB7CisgCQkJCQlyID0gLTE7CisgCQkJCQllcnJubyA9IEVJTlZBTDsKKyAJCQkJfQorIAkJCQlp ZiAociA9PSAtMSkgeworLQkJCQkJZmF0YWwoIkludmFsaWQgYnVmZmVyIHNpemUgXCIlc1wiOiAl cyIsCistCQkJCQkgICAgIG9wdGFyZyArIDcsIHN0cmVycm9yKGVycm5vKSk7CisrCQkJCQlmYXRh bCgiSW52YWxpZCBidWZmZXIgc2l6ZS4gTXVzdCBiZSBiZXR3ZWVuIDFCIGFuZCAyNTVLQi4iCisr CQkJCQkgICAgICAiXCIlc1wiOiAlcyIsIG9wdGFyZyArIDcsIHN0cmVycm9yKGVycm5vKSk7Cisg CQkJCX0KKyAJCQkJc2Z0cF9jb3B5X2J1ZmxlbiA9IChzaXplX3QpbGx2OworIAkJCX0gZWxzZSBp ZiAoc3RybmNtcChvcHRhcmcsICJucmVxdWVzdHM9IiwgMTApID09IDApIHsKKy0JCQkJbGx2ID0g c3RydG9udW0ob3B0YXJnICsgMTAsIDEsIDI1NiAqIDEwMjQsCisrCQkJCS8qIG1vcmUgdGhhbiAx MGsgdG8gMTVrIHJlcXVlc3RzIHN0YXJ0cyBzdGFsbGluZyB0aGUgY29ubmVjdGlvbgorKwkJCQkg KiA4MTkyICogZGVmYXVsdCBidWZmZXIgc2l6ZSBpcyAyNTZNQiBvZiBvdXRzdGFuZGluZyBkYXRh LgorKwkJCQkgKiBpZiB1c2VycyBuZWVkIG1vcmUgdGhlbiB0aGV5IG5lZWQgdG8gdXAgdGhlIGJ1 ZmZlciBzaXplICovCisrCQkJCWxsdiA9IHN0cnRvbnVtKG9wdGFyZyArIDEwLCAxLCA4ICogMTAy NCwKKyAJCQkJICAgICZlcnJzdHIpOworIAkJCQlpZiAoZXJyc3RyICE9IE5VTEwpIHsKKy0JCQkJ CWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiByZXF1ZXN0cyAiCisrCQkJCQlmYXRhbCgiSW52YWxp ZCBudW1iZXIgb2YgcmVxdWVzdHMuIE11c3QgYmUgYmV0d2VlbiAxIGFuZCA4MTkyLiAiCisgCQkJ CQkgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyAxMCwgZXJyc3RyKTsKKyAJCQkJfQorIAkJCQlz ZnRwX25yZXF1ZXN0cyA9IChzaXplX3QpbGx2OworQEAgLTY3NCwxMCArNzIwLDE5IEBACisgCXJl bWluID0gcmVtb3V0ID0gLTE7CisgCWRvX2NtZF9waWQgPSAtMTsKKyAJLyogQ29tbWFuZCB0byBi ZSBleGVjdXRlZCBvbiByZW1vdGUgc3lzdGVtIHVzaW5nICJzc2giLiAqLworLQkodm9pZCkgc25w cmludGYoY21kLCBzaXplb2YgY21kLCAic2NwJXMlcyVzJXMiLAorKwkvKiBJbiB0aGUgZXZlbnQg b2YgYW4gaHBuIHRvIGhwbiBjb25uZWN0aW9uIHRoZSBzY3AKKysJICogY29tbWFuZCBpcyByZXdy aXR0ZW4gdG8gaHBuc2NwLiBUaGlzIGhhcHBlbnMgaW4KKysJICogY2xpZW50bG9vcC5jIC1janIg MTIvMTIvMjAyMiAqLworKworKwkodm9pZCkgc25wcmludGYoY21kLCBzaXplb2YgY21kLCAiJXMl cyVzJXMlcyVzIiwKKysJICAgIHJlbW90ZV9wYXRoID8gcmVtb3RlX3BhdGggOiAic2NwIiwKKyAJ ICAgIHZlcmJvc2VfbW9kZSA/ICIgLXYiIDogIiIsCisgCSAgICBpYW1yZWN1cnNpdmUgPyAiIC1y IiA6ICIiLCBwZmxhZyA/ICIgLXAiIDogIiIsCistCSAgICB0YXJnZXRzaG91bGRiZWRpcmVjdG9y eSA/ICIgLWQiIDogIiIpOworKwkgICAgdGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkgPyAiIC1kIiA6 ICIiLAorKwkgICAgcmVzdW1lX2ZsYWcgPyAiIC1aIiA6ICIiKTsKKysjaWZkZWYgREVCVUcKKysJ ZnByaW50ZihzdGRlcnIsICIlczogU2VuZGluZyBjbWQgJXNcbiIsIGhvc3RuYW1lLCBjbWQpOwor KyNlbmRpZgorIAorIAkodm9pZCkgc3NoX3NpZ25hbChTSUdQSVBFLCBsb3N0Y29ubik7CisgCitA QCAtNjg4LDYgKzc0Myw3IEBACisgCQkJdmVyaWZ5ZGlyKGFyZ3ZbYXJnYyAtIDFdKTsKKyAJCXRv bG9jYWwoYXJnYywgYXJndiwgbW9kZSwgc2Z0cF9kaXJlY3QpOwkvKiBEZXN0IGlzIGxvY2FsIGhv c3QuICovCisgCX0KKysKKyAJLyoKKyAJICogRmluYWxseSBjaGVjayB0aGUgZXhpdCBzdGF0dXMg b2YgdGhlIHNzaCBwcm9jZXNzLCBpZiBvbmUgd2FzIGZvcmtlZAorIAkgKiBhbmQgbm8gZXJyb3Ig aGFzIG9jY3VycmVkIHlldAorQEAgLTEzMDksNiArMTM2NSw3NCBAQAorIAlzZnRwX2ZyZWUoY29u bik7CisgfQorIAorKy8qIGNhbGN1bGF0ZSB0aGUgaGFzaCBvZiBhIGZpbGUgdXAgdG8gbGVuZ3Ro IGJ5dGVzCisrICogdGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiByZW1vdGUgYW5kIGxvY2Fs IGZpbGUKKysgKiBmcmFnbWVudHMgbWF0Y2guIFRoZXJlIG1heSBiZSBhIG1vcmUgZWZmaWNpZW50 IHByb2Nlc3MgZm9yIHRoZSBoYXNoaW5nCisrICogTm90ZTogTGlicmVTU0wgZG9lc24ndCBzdXBw b3J0IGJsYWtlMmI1MTIgc28gd2UgY2FuJ3Qgb2ZmZXIgdGhlbQorKyAqIHRoZSByZXN1bWUgZmVh dHVyZSBjanIgNy8xOC8yMDIzICovCisrI2lmIChkZWZpbmVkIFdJVEhfT1BFTlNTTCkgJiYgIWRl ZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisrdm9pZCBjYWxjdWxhdGVfaGFzaChjaGFy ICpmaWxlbmFtZSwgY2hhciAqb3V0cHV0LCBvZmZfdCBsZW5ndGgpCisreworKwlpbnQgbiwgbWRf bGVuOworKwlFVlBfTURfQ1RYICpjOworKwljb25zdCBFVlBfTUQgKm1kOworKwljaGFyIGJ1ZltI QVNIX0JVRkxFTl07CisrCXNzaXplX3QgYnl0ZXM7CisrCXVuc2lnbmVkIGNoYXIgb3V0W0VWUF9N QVhfTURfU0laRV07CisrCWNoYXIgdG1wWzNdOworKwlGSUxFICpmaWxlX3B0cjsKKysJKm91dHB1 dCA9ICdcMCc7CisrCisrCS8qIG9wZW4gZmlsZSBmb3IgY2FsY3VsYXRpbmcgaGFzaCAqLworKwlm aWxlX3B0ciA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworKwlpZiAoZmlsZV9wdHI9PU5VTEwpCisr CXsKKysJCWlmICh2ZXJib3NlX21vZGUpIHsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJv ciBvcGVuaW5nIGZpbGUgJXNcbiIsIGhvc3RuYW1lLCBmaWxlbmFtZSk7CisrCQkJLyogZmlsZSB0 aGUgZXhwZWN0ZWQgb3V0cHV0IHdpdGggc3BhY2VzICovCisrCQkJc25wcmludGYob3V0cHV0LCBI QVNIX0xFTiwgIiVzIiwgICIgIik7CisrCQl9CisrCQlyZXR1cm47CisrCX0KKysKKysJbWQgPSBF VlBfZ2V0X2RpZ2VzdGJ5bmFtZSgiYmxha2UyYjUxMiIpOworKwljID0gRVZQX01EX0NUWF9uZXco KTsKKysJRVZQX0RpZ2VzdEluaXRfZXgoYywgbWQsIE5VTEwpOworKworKwl3aGlsZSAobGVuZ3Ro ID4gMCkgeworKwkJaWYgKGxlbmd0aCA+IEhBU0hfQlVGTEVOKQorKwkJCS8qIGZyZWFkIHJldHVy bnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyByZWFkLgorKwkJCSAqIGluIHRoaXMgY2FzZSAxLiBN dWx0aXBseSBieSB0aGUgbGVuZ3RoIHRvIGdldCB0aGUgYnl0ZXMgKi8KKysJCQlieXRlcz1mcmVh ZChidWYsIEhBU0hfQlVGTEVOLCAxLCBmaWxlX3B0cikgKiBIQVNIX0JVRkxFTjsKKysJCWVsc2UK KysJCQlieXRlcz1mcmVhZChidWYsIGxlbmd0aCwgMSwgZmlsZV9wdHIpICogbGVuZ3RoOworKwkJ RVZQX0RpZ2VzdFVwZGF0ZShjLCBidWYsIGJ5dGVzKTsKKysJCWxlbmd0aCAtPSBIQVNIX0JVRkxF TjsKKysJfQorKwlFVlBfRGlnZXN0RmluYWwoYywgb3V0LCAmbWRfbGVuKTsKKysJRVZQX01EX0NU WF9mcmVlKGMpOworKwkvKiBjb252ZXJ0IHRoZSBoYXNoIGludG8gYSBzdHJpbmcgKi8KKysJZm9y KG49MDsgbiA8IG1kX2xlbjsgbisrKSB7CisrCQlzbnByaW50Zih0bXAsIDMsICIlMDJ4Iiwgb3V0 W25dKTsKKysJCXN0cm5jYXQob3V0cHV0LCB0bXAsIDMpOworKwl9CisrI2lmZGVmIERFQlVHCisr CWZwcmludGYoc3RkZXJyLCAiJXM6IEhBU0ggSVMgJyVzJyBvZiBsZW5ndGggJWxkXG4iLCBob3N0 bmFtZSwgb3V0cHV0LCBzdHJsZW4ob3V0cHV0KSk7CisrI2VuZGlmCisrCWZjbG9zZShmaWxlX3B0 cik7CisrfQorKyNlbHNlCisrdm9pZCBjYWxjdWxhdGVfaGFzaChjaGFyICpmaWxlbmFtZSwgY2hh ciAqb3V0cHV0LCBvZmZfdCBsZW5ndGgpCisreworKyAgLyogZW1wdHkgZnVuY3Rpb24gZm9yIGJ1 aWxkcyB3aXRob3V0IG9wZW5zc2wgb3IgYXJlIHVzaW5nIGxpYnJlc3NsICovCisrfQorKyNlbmRp ZiAvKiBXSVRIX09QRU5TU0wgKi8KKysKKysjZGVmaW5lIFRZUEVfT1ZFUkZMT1codHlwZSwgdmFs KSBcCisrCSgoc2l6ZW9mKHR5cGUpID09IDQgJiYgKHZhbCkgPiBJTlQzMl9NQVgpIHx8IFwKKysJ IChzaXplb2YodHlwZSkgPT0gOCAmJiAodmFsKSA+IElOVDY0X01BWCkgfHwgXAorKwkgKHNpemVv Zih0eXBlKSAhPSA0ICYmIHNpemVvZih0eXBlKSAhPSA4KSkKKysKKyAvKiBQcmVwYXJlIHJlbW90 ZSBwYXRoLCBoYW5kbGluZyB+IGJ5IGFzc3VtaW5nIGN3ZCBpcyB0aGUgaG9tZWRpciAqLworIHN0 YXRpYyBjaGFyICoKKyBwcmVwYXJlX3JlbW90ZV9wYXRoKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnBhdGgpCitAQCAtMTM5NiwxNCArMTUyMCwyMyBAQAorIAlzdHJ1Y3Qgc3Rh dCBzdGI7CisgCXN0YXRpYyBCVUYgYnVmZmVyOworIAlCVUYgKmJwOworLQlvZmZfdCBpLCBzdGF0 Ynl0ZXM7CisrCW9mZl90IGksIHN0YXRieXRlcywgeGZlcl9zaXplOworIAlzaXplX3QgYW10LCBu cjsKKyAJaW50IGZkID0gLTEsIGhhZGVyciwgaW5keDsKKy0JY2hhciAqbGFzdCwgKm5hbWUsIGJ1 ZltQQVRIX01BWCArIDEyOF0sIGVuY25hbWVbUEFUSF9NQVhdOworKwljaGFyICpjcCwgKmxhc3Qs ICpuYW1lLCBidWZbUEFUSF9NQVggKyBCVUZfQU5EX0hBU0hdLCBlbmNuYW1lW1BBVEhfTUFYXTsK KyAJaW50IGxlbjsKKysJY2hhciBoYXNoc3VtW0hBU0hfTEVOKzFdLCB0ZXN0X2hhc2hzdW1bSEFT SF9MRU4rMV07CisrCWNoYXIgaW5idWZbUEFUSF9NQVggKyBCVUZfQU5EX0hBU0hdOworKwlzaXpl X3QgaW5zaXplOworKwl1bnNpZ25lZCBsb25nIGxvbmcgdWxsOworKwljaGFyICptYXRjaDsgLyog dXNlZCB0byBjb21tdW5pY2F0ZSBmcmFnbWVudCBtYXRjaCAqLworKwltYXRjaCA9ICJcMCI7IC8q ZGVmYXVsdCBpcyB0byBmYWlsIHRoZSBtYXRjaC4gTlVMTCBhbmQgRiBib3RoIGluZGljYXRlIGZh aWwqLworIAorIAlmb3IgKGluZHggPSAwOyBpbmR4IDwgYXJnYzsgKytpbmR4KSB7CisgCQluYW1l ID0gYXJndltpbmR4XTsKKysjaWZkZWYgREVCVUcKKysJCWZwcmludGYoc3RkZXJyLCAiJXMgaW5k ZXggaXMgJWQsIG5hbWUgaXMgJXNcbiIsIGhvc3RuYW1lLCBpbmR4LCBuYW1lKTsKKysjZW5kaWYK KyAJCXN0YXRieXRlcyA9IDA7CisgCQlsZW4gPSBzdHJsZW4obmFtZSk7CisgCQl3aGlsZSAobGVu ID4gMSAmJiBuYW1lW2xlbi0xXSA9PSAnLycpCitAQCAtMTQyNSw2ICsxNTU4LDE0IEBACisgCQl1 bnNldF9ub25ibG9jayhmZCk7CisgCQlzd2l0Y2ggKHN0Yi5zdF9tb2RlICYgU19JRk1UKSB7Cisg CQljYXNlIFNfSUZSRUc6CisrCQkJLyogb25seSBjYWxjdWxhdGUgaGFzaCBpZiB3ZSBhcmUgaW4g cmVzdW1lIG1vZGUgYW5kIGEgZmlsZSovCisrCQkJaWYgKHJlc3VtZV9mbGFnKSB7CisrCQkJCWNh bGN1bGF0ZV9oYXNoKG5hbWUsIGhhc2hzdW0sIHN0Yi5zdF9zaXplKTsKKysjaWZkZWYgREVCVUcK KysJCQkJZnByaW50ZihzdGRlcnIsICIlczogTmFtZSBpcyAnJXMnIGFuZCBoYXNoICclcydcbiIs IGhvc3RuYW1lLCBuYW1lLCBoYXNoc3VtKTsKKysJCQkJZnByaW50ZiAoc3RkZXJyLCIlczogc2l6 ZSBvZiAlcyBpcyAlbGRcbiIsIGhvc3RuYW1lLCBuYW1lLCBzdGIuc3Rfc2l6ZSk7CisrI2VuZGlm CisrCQkJfQorIAkJCWJyZWFrOworIAkJY2FzZSBTX0lGRElSOgorIAkJCWlmIChpYW1yZWN1cnNp dmUpIHsKK0BAIC0xNDQ2LDE0ICsxNTg3LDEzMyBAQAorIAkJCQlnb3RvIG5leHQ7CisgCQl9Cisg I2RlZmluZQlGSUxFTU9ERU1BU0sJKFNfSVNVSUR8U19JU0dJRHxTX0lSV1hVfFNfSVJXWEd8U19J UldYTykKKy0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIkMlMDRvICVsbGQgJXNcbiIsCist CQkgICAgKHVfaW50KSAoc3RiLnN0X21vZGUgJiBGSUxFTU9ERU1BU0spLAorLQkJICAgIChsb25n IGxvbmcpc3RiLnN0X3NpemUsIGxhc3QpOworLQkJaWYgKHZlcmJvc2VfbW9kZSkKKy0JCQlmbXBy aW50ZihzdGRlcnIsICJTZW5kaW5nIGZpbGUgbW9kZXM6ICVzIiwgYnVmKTsKKysJCS8qIEFkZCBh IGhhc2ggb2YgdGhlIGZpbGUgYWxvbmcgd2l0aCB0aGUgZmlsZW1vZGUgaWYgaW4gcmVzdW1lICov CisrCQlpZiAocmVzdW1lX2ZsYWcpCisrCQkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiQyUw NG8gJWxsZCAlcyAlc1xuIiwKKysJCQkJICh1X2ludCkgKHN0Yi5zdF9tb2RlICYgRklMRU1PREVN QVNLKSwKKysJCQkJIChsb25nIGxvbmcpc3RiLnN0X3NpemUsIGhhc2hzdW0sIGxhc3QpOworKwkJ ZWxzZQorKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIkMlMDRvICVsbGQgJXNcbiIsCisr CQkJCSAodV9pbnQpIChzdGIuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCisrCQkJCSAobG9uZyBs b25nKXN0Yi5zdF9zaXplLCBsYXN0KTsKKysKKysjaWZkZWYgREVCVUcKKysJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IFNlbmRpbmcgZmlsZSBtb2RlczogJXMiLCBob3N0bmFtZSwgYnVmKTsKKysjZW5k aWYKKyAJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgYnVmLCBzdHJsZW4oYnVmKSk7 CistCQlpZiAocmVzcG9uc2UoKSA8IDApCisrCisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0 ZGVyciwgIiVzOiBpbmJ1ZiBsZW5ndGggJWxkIGJ1ZiBsZW5ndGggJWxkXG4iLCBob3N0bmFtZSwg c3RybGVuKGluYnVmKSwgc3RybGVuKGJ1ZikpOworKyNlbmRpZgorKwkJaWYgKHJlc3VtZV9mbGFn KSB7IC8qIGdldCB0aGUgaGFzaCByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgKi8KKysJCQkodm9p ZCkgYXRvbWljaW8ocmVhZCwgcmVtaW4sIGluYnVmLCBCVUZfQU5EX0hBU0ggLSAxKTsKKysjaWZk ZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogd2UgZ290ICclcycgaW4gaW5idWYg bGVuZ3RoICVsZCBidWYgd2FzICVsZFxuIiwKKysJCQkJCWhvc3RuYW1lLCBpbmJ1Ziwgc3RybGVu KGluYnVmKSwgc3RybGVuKGJ1ZikpOworKyNlbmRpZgorKwkJfQorKwkJaWYgKHJlc3BvbnNlKCkg PCAwKSB7CisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZihzdGRlcnIsICIlczogcmVzcG9uc2Ug aXMgbGVzcyB0aGFuIDBcbiIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKyAJCQlnb3RvIG5leHQ7Cisr CQl9CisrCQl4ZmVyX3NpemUgPSBzdGIuc3Rfc2l6ZTsKKysKKysJCS8qIHdlIG9ubHkgZG8gdGhl IGZvbGxvd2luZyBpbiByZXN1bWUgbW9kZSBiZWNhdXNlIHdlIGhhdmUgYQorKwkJICogbmV3IGJ1 ZiBmcm9tIHRoZSByZW1vdGUgdG8gcGFyc2UgKi8KKysJCWlmIChyZXN1bWVfZmxhZykgeworKwkJ CWNwID0gaW5idWY7CisrCQkJaWYgKCpjcCA9PSAnUicpIHsgLyogcmVzdW1lIGZpbGUgdHJhbnNm ZXIqLworKwkJCQljaGFyICppbl9oYXNoc3VtOyAvKiB3aGVyZSB0byBob2xkIHRoZSBpbmNvbWlu ZyBoYXNoICovCisrCQkJCWluX2hhc2hzdW0gPSBjYWxsb2MoSEFTSF9MRU4rMSwgc2l6ZW9mKGNo YXIpKTsKKysJCQkJZm9yICgrK2NwOyBjcCA8IGluYnVmICsgNTsgY3ArKykgeworKwkJCQkJLyog c2tpcCBvdmVyIHRoZSBtb2RlICovCisrCQkJCX0KKysJCQkJaWYgKCpjcCsrICE9ICcgJykgewor KwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogbW9kZSBub3QgZGVsaW5lYXRlZCFcbiIsIGhvc3Ru YW1lKTsKKysJCQkJfQorKworKwkJCQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkK KysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNpemUgbm90IHByZXNlbnRcbiIsIGhvc3RuYW1l KTsKKysJCQkJdWxsID0gc3RydG91bGwoY3AsICZjcCwgMTApOworKwkJCQlpZiAoIWNwIHx8ICpj cCsrICE9ICcgJykKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNpemUgbm90IGRlbGltaXRl ZFxuIiwgaG9zdG5hbWUpOworKwkJCQlpZiAoVFlQRV9PVkVSRkxPVyhvZmZfdCwgdWxsKSkKKysJ CQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNpemUgb3V0IG9mIHJhbmdlXG4iLCBob3N0bmFtZSk7 CisrCQkJCWluc2l6ZSA9IChvZmZfdCl1bGw7CisrCisrI2lmZGVmIERFQlVHCisrCQkJCWZwcmlu dGYgKHN0ZGVyciwgIiVzOiByZWNlaXZlZCBzaXplIG9mICVsZFxuIiwgaG9zdG5hbWUsIGluc2l6 ZSk7CisrI2VuZGlmCisrCisrCQkJCS8qIGNvcHkgdGhlIGNwIHBvaW50ZXIgYnl0ZSBieSBieXRl ICovCisrCQkJCWludCBpOworKwkJCQlmb3IgKGkgPSAwOyBpIDwgSEFTSF9MRU47IGkrKykgewor KwkJCQkJc3RybmNhdChpbl9oYXNoc3VtLCBjcCsrLCAxKTsKKysJCQkJfQorKyNpZmRlZiBERUJV RworKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogaW5faGFzaHN1bSAnJXMnXG4iLCBob3N0bmFt ZSwgaW5faGFzaHN1bSk7CisrI2VuZGlmCisrCisrCQkJCS8qZ2V0IHRoZSBoYXNoIG9mIHRoZSBz b3VyY2UgZmlsZSB0byB0aGUgYnl0ZSBsZW5ndGggd2UganVzdCBnb3QqLworKwkJCQljYWxjdWxh dGVfaGFzaChuYW1lLCB0ZXN0X2hhc2hzdW0sIGluc2l6ZSk7CisrI2lmZGVmIERFQlVHCisrCQkJ CWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbGN1bGF0ZWQgaGFzaHN1bSBvZiBsb2NhbCAlcyB0byAl bGQgaXMgJXNcbiIsCisrCQkJCQlob3N0bmFtZSwgbGFzdCwgaW5zaXplLCB0ZXN0X2hhc2hzdW0p OworKyNlbmRpZgorKwkJCQkvKiBjb21wYXJlIHRoZSBpbmNvbWluZyBoYXNoIHRvIHRoZSBoYXNo IG9mIHRoZSBsb2NhbCBmaWxlKi8KKysJCQkJaWYgKHN0cmNtcChpbl9oYXNoc3VtLCB0ZXN0X2hh c2hzdW0pID09IDApIHsKKysJCQkJCS8qIHRoZSBmcmFnbWVudHMgbWF0Y2ggc28gd2Ugc2hvdWxk IHNlZWsgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZQorKwkJCQkJICogbG9jYWwgZmls ZSBhbmQgc2V0IHRoZSByZW1vdGUgZmlsZSB0byBhcHBlbmQgKi8KKysjaWZkZWYgREVCVUcKKysJ CQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZpbGUgZnJhZ21lbnRzIG1hdGNoXG4iLCBob3N0bmFt ZSk7CisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzZWVraW5nIHRvICVsZFxuIiwgaG9zdG5h bWUsIGluc2l6ZSk7CisrI2VuZGlmCisrCQkJCQl4ZmVyX3NpemUgPSBzdGIuc3Rfc2l6ZSAtIGlu c2l6ZTsKKysjaWZkZWYgREVCVUcKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHhmZXJfc2l6 ZTogJWxkLCBzdGIuc3Rfc2l6ZTogJWxkIGluc2l6ZTogJWxkXG4iLAorKwkJCQkJCWhvc3RuYW1l LCB4ZmVyX3NpemUsIHN0Yi5zdF9zaXplLCBpbnNpemUpOworKyNlbmRpZgorKwkJCQkJaWYgKGxz ZWVrKGZkLCBpbnNpemUsIFNFRUtfQ1VSKSAhPSAob2ZmX3QpaW5zaXplKSB7CisrI2lmZGVmIERF QlVHCisrCQkJCQkJZnByaW50ZihzdGRlcnIsICIlczogbHNlZWsgZGlkIG5vdCByZXR1cm4gJWxk XG4iLCBob3N0bmFtZSwgaW5zaXplKSA7CisrI2VuZGlmCisrCQkJCQkJZ290byBuZXh0OworKwkJ CQkJfQorKwkJCQkJbWF0Y2ggPSAiTSI7CisrCQkJCX0gZWxzZSB7CisrCQkJCQkvKiB0aGUgZnJh Z21lbnRzIGRvbid0IG1hdGNoIHNvIHdlIHNob3VsZCBzdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lu aW5nICovCisrI2lmZGVmIERFQlVHCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBGaWxlIGZy YWdtZW50cyBkbyBub3QgbWF0Y2ggJyVzJyhpbikgJyVzJyhsb2NhbClcbiIsCisrCQkJCSAgICAg ICAJCWhvc3RuYW1lLCBpbl9oYXNoc3VtLCB0ZXN0X2hhc2hzdW0pOworKyNlbmRpZgorKwkJCQkJ bWF0Y2ggPSAiRiI7CisrCQkJCQl4ZmVyX3NpemUgPSBzdGIuc3Rfc2l6ZTsKKysJCQkJfQorKwkJ CQlmcmVlKGluX2hhc2hzdW0pOworKwkJCX0KKysJCQlpZiAoKmNwID09ICdTJykgeyAvKiBza2lw IGZpbGUgKi8KKysjaWZkZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogU2hvdWxk IGJlIHNraXBwaW5nIHRoaXMgZmlsZVxuIiwgaG9zdG5hbWUpOworKyNlbmRpZgorKwkJCQlnb3Rv IG5leHQ7CisrCQkJfQorKwkJCWlmICgqY3AgPT0gJ0MnKSB7IC8qdHJhbnNmZXIgZW50aXJlIGZp bGUqLworKyNpZmRlZiBERUJVRworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBSZXNlbmRpbmcg ZW50aXJlIGZpbGVcbiIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQkJeGZlcl9zaXplID0gc3Ri LnN0X3NpemU7CisrCQkJfQorKwkJCS8qIG5lZWQgdG8gc2VuZCB0aGUgbWF0Y2ggc3RhdHVzCisr CQkJICogV2UgYWx3YXlzIHNlbmQgdGhlIG1hdGNoIHN0YXR1cyBvciB3ZSBnZXQgb3V0IG9mIHN5 bmMKKysJCQkgKi8KKysjaWZkZWYgREVCVUcKKysJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzZW5k aW5nIG1hdGNoICVzXG4iLCBob3N0bmFtZSwgbWF0Y2gpOworKyNlbmRpZgorKwkJCSh2b2lkKSBh dG9taWNpbyh2d3JpdGUsIHJlbW91dCwgbWF0Y2gsIDEpOworKwkJfQorKworIAkJaWYgKChicCA9 IGFsbG9jYnVmKCZidWZmZXIsIGZkLCBDT1BZX0JVRkxFTikpID09IE5VTEwpIHsKKyBuZXh0OgkJ CWlmIChmZCAhPSAtMSkgeworIAkJCQkodm9pZCkgY2xvc2UoZmQpOworQEAgLTE0NjEsMTMgKzE3 MjEsMTcgQEAKKyAJCQl9CisgCQkJY29udGludWU7CisgCQl9CisrCisrI2lmZGVmIERFQlVHCisr CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBnb2luZyB0byB4ZmVyICVsZFxuIiwgaG9zdG5hbWUsIHhm ZXJfc2l6ZSk7CisrI2VuZGlmCisgCQlpZiAoc2hvd3Byb2dyZXNzKQorLQkJCXN0YXJ0X3Byb2dy ZXNzX21ldGVyKGN1cmZpbGUsIHN0Yi5zdF9zaXplLCAmc3RhdGJ5dGVzKTsKKysJCQlzdGFydF9w cm9ncmVzc19tZXRlcihjdXJmaWxlLCB4ZmVyX3NpemUsICZzdGF0Ynl0ZXMpOworIAkJc2V0X25v bmJsb2NrKHJlbW91dCk7CistCQlmb3IgKGhhZGVyciA9IGkgPSAwOyBpIDwgc3RiLnN0X3NpemU7 IGkgKz0gYnAtPmNudCkgeworKwkJZm9yIChoYWRlcnIgPSBpID0gMDsgaSA8IHhmZXJfc2l6ZTsg aSArPSBicC0+Y250KSB7CisgCQkJYW10ID0gYnAtPmNudDsKKy0JCQlpZiAoaSArIChvZmZfdClh bXQgPiBzdGIuc3Rfc2l6ZSkKKy0JCQkJYW10ID0gc3RiLnN0X3NpemUgLSBpOworKwkJCWlmIChp ICsgKG9mZl90KWFtdCA+IHhmZXJfc2l6ZSkKKysJCQkJYW10ID0geGZlcl9zaXplIC0gaTsKKyAJ CQlpZiAoIWhhZGVycikgeworIAkJCQlpZiAoKG5yID0gYXRvbWljaW8ocmVhZCwgZmQsCisgCQkJ CSAgICBicC0+YnVmLCBhbXQpKSAhPSBhbXQpIHsKK0BAIC0xNjY4LDI0ICsxOTMyLDM2IEBACisg c2luayhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnNyYykKKyB7CisgCXN0YXRp YyBCVUYgYnVmZmVyOworLQlzdHJ1Y3Qgc3RhdCBzdGI7CisrCXN0cnVjdCBzdGF0IHN0YiwgY3Bz dGF0LCBucHN0YXQ7CisgCUJVRiAqYnA7CisgCW9mZl90IGk7CisgCXNpemVfdCBqLCBjb3VudDsK KyAJaW50IGFtdCwgZXhpc3RzLCBmaXJzdCwgb2ZkOworIAltb2RlX3QgbW9kZSwgb21vZGUsIG1h c2s7CistCW9mZl90IHNpemUsIHN0YXRieXRlczsKKysJb2ZmX3Qgc2l6ZSwgc3RhdGJ5dGVzLCB4 ZmVyX3NpemU7CisgCXVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CisgCWludCBzZXRpbWVzLCB0YXJn aXNkaXIsIHdyZXJyOworLQljaGFyIGNoLCAqY3AsICpucCwgKnRhcmcsICp3aHksICp2ZWN0WzFd LCBidWZbMjA0OF0sIHZpc2J1ZlsyMDQ4XTsKKysJY2hhciBjaCwgKmNwLCAqbnAsICpucF90bXAs ICp0YXJnLCAqd2h5LCAqdmVjdFsxXSwgYnVmWzE2Mzg0XSwgdmlzYnVmWzE2Mzg0XTsKKyAJY2hh ciAqKnBhdHRlcm5zID0gTlVMTDsKKyAJc2l6ZV90IG4sIG5wYXR0ZXJucyA9IDA7CisgCXN0cnVj dCB0aW1ldmFsIHR2WzJdOworKwljaGFyIHJlbW90ZV9oYXNoc3VtW0hBU0hfTEVOKzFdOworKwlj aGFyIGxvY2FsX2hhc2hzdW1bSEFTSF9MRU4rMV07CisrCWNoYXIgdG1wYnVmW0JVRl9BTkRfSEFT SF07CisrCWNoYXIgb3V0YnVmW0JVRl9BTkRfSEFTSF07CisrCWNoYXIgbWF0Y2g7CisrCWludCBi YWRfbWF0Y2hfZmxhZyA9IDA7CisrCW5wID0gTlVMTDsgLyogdGhpcyB3YXMgb3JpZ2luYWxseSAn LzAnIGJ1dCB0aGF0J3Mgd3JvbmcgKi8KKysJbnBfdG1wID0gTlVMTDsKKysKKyAKKyAjZGVmaW5l CWF0aW1lCXR2WzBdCisgI2RlZmluZQltdGltZQl0dlsxXQorICNkZWZpbmUJU0NSRVdVUChzdHIp CXsgd2h5ID0gc3RyOyBnb3RvIHNjcmV3dXA7IH0KKyAKKysjaWZkZWYgREVCVUcKKysgICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiJXM6IExPQ0FMIEluIHNpbmsgd2l0aCAlc1xuIiwgaG9zdG5hbWUs IHNyYyk7CisrI2VuZGlmCisgCWlmIChUWVBFX09WRVJGTE9XKHRpbWVfdCwgMCkgfHwgVFlQRV9P VkVSRkxPVyhvZmZfdCwgMCkpCisgCQlTQ1JFV1VQKCJVbmV4cGVjdGVkIG9mZl90L3RpbWVfdCBz aXplIik7CisgCitAQCAtMTcwMyw5ICsxOTc5LDE2IEBACisgCWlmICh0YXJnZXRzaG91bGRiZWRp cmVjdG9yeSkKKyAJCXZlcmlmeWRpcih0YXJnKTsKKyAKKysjaWZkZWYgREVCVUcKKysJZnByaW50 ZiAoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbnVsbCB0byByZW1vdXQuXG4iLGhvc3RuYW1lKTsKKysj ZW5kaWYKKyAJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisgCWlmIChz dGF0KHRhcmcsICZzdGIpID09IDAgJiYgU19JU0RJUihzdGIuc3RfbW9kZSkpCisgCQl0YXJnaXNk aXIgPSAxOworKworKyNpZmRlZiBERUJVRworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBUYXJnZXQg aXMgJXMgd2l0aCBhIHNpemUgb2YgJWxkXG4iLCBob3N0bmFtZSwgdGFyZywgc3RiLnN0X3NpemUp OworKyNlbmRpZgorIAlpZiAoc3JjICE9IE5VTEwgJiYgIWlhbXJlY3Vyc2l2ZSAmJiAhVGZsYWcp IHsKKyAJCS8qCisgCQkgKiBQcmVwYXJlIHRvIHRyeSB0byByZXN0cmljdCBpbmNvbWluZyBmaWxl bmFtZXMgdG8gbWF0Y2gKK0BAIC0xNzE0LDcgKzE5OTcsMTIgQEAKKyAJCWlmIChicmFjZV9leHBh bmQoc3JjLCAmcGF0dGVybnMsICZucGF0dGVybnMpICE9IDApCisgCQkJZmF0YWxfZigiY291bGQg bm90IGV4cGFuZCBwYXR0ZXJuIik7CisgCX0KKysKKyAJZm9yIChmaXJzdCA9IDE7OyBmaXJzdCA9 IDApIHsKKysJCWJhZF9tYXRjaF9mbGFnID0gMDsgLyogdXNlZCBpbiByZXN1bWUgbW9kZS4gKi8K KysjaWZkZWYgREVCVUcKKysJCWZwcmludGYoc3RkZXJyLCAiJXM6IEF0IHN0YXJ0IG9mIGxvb3Ag YnVmIGlzICVzXG4iLCBob3N0bmFtZSwgYnVmKTsKKysjZW5kaWYKKyAJCWNwID0gYnVmOworIAkJ aWYgKGF0b21pY2lvKHJlYWQsIHJlbWluLCBjcCwgMSkgIT0gMSkKKyAJCQlnb3RvIGRvbmU7CitA QCAtMTc0Miw2ICsyMDMwLDkgQEAKKyAJCQljb250aW51ZTsKKyAJCX0KKyAJCWlmIChidWZbMF0g PT0gJ0UnKSB7CisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRp bmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisgCQkJKHZvaWQpIGF0 b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisgCQkJZ290byBkb25lOworIAkJfQorQEAg LTE3NDksNiArMjA0MCw5IEBACisgCQkJKi0tY3AgPSAwOworIAorIAkJY3AgPSBidWY7CisrI2lm ZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBidWYgaXMgJXNcbiIsIGhvc3RuYW1l LCBidWYpOworKyNlbmRpZgorIAkJaWYgKCpjcCA9PSAnVCcpIHsKKyAJCQlzZXRpbWVzKys7Cisg CQkJY3ArKzsKK0BAIC0xNzc2LDkgKzIwNzAsMTkgQEAKKyAJCQlpZiAoIWNwIHx8ICpjcCsrICE9 ICdcMCcgfHwgYXRpbWUudHZfdXNlYyA8IDAgfHwKKyAJCQkgICAgYXRpbWUudHZfdXNlYyA+IDk5 OTk5OSkKKyAJCQkJU0NSRVdVUCgiYXRpbWUudXNlYyBub3QgZGVsaW1pdGVkIik7CisrCisrI2lm ZGVmIERFQlVHCisrCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbnVsbCB0byByZW1v dXQuXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisgCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwg cmVtb3V0LCAiIiwgMSk7CisgCQkJY29udGludWU7CisgCQl9CisrCQlpZiAoKmNwID09ICdSJykg eyAvKnJlc3VtZSBmaWxlIHRyYW5zZmVyIChkb250JyB0aGluayBJIG5lZWQgdGhpcyBoZXJlKSov CisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZihzdGRlcnIsICIlczogUmVjZWl2ZWQgYSBSRVNV TUUgcmVxdWVzdCB3aXRoICVzXG4iLCBob3N0bmFtZSwgY3ApOworKyNlbmRpZgorKwkJCXJlc3Vt ZV9mbGFnID0gMTsKKysJCX0KKyAJCWlmICgqY3AgIT0gJ0MnICYmICpjcCAhPSAnRCcpIHsKKyAJ CQkvKgorIAkJCSAqIENoZWNrIGZvciB0aGUgY2FzZSAicmNwIHJlbW90ZTpmb29cKiBsb2NhbDpi YXIiLgorQEAgLTE3OTQsNiArMjA5OCwxOCBAQAorIAkJCVNDUkVXVVAoImV4cGVjdGVkIGNvbnRy b2wgcmVjb3JkIik7CisgCQl9CisgCQltb2RlID0gMDsKKysjaWZkZWYgREVCVUcKKysJCWZwcmlu dGYoc3RkZXJyLCAiJXM6IGJ1ZiBpcyAlc1xuIiwgaG9zdG5hbWUsIGJ1Zik7CisrCQlmcHJpbnRm KHN0ZGVyciwgIiVzOiBjcCBpcyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsKKysjZW5kaWYKKysJCS8q IHdlIG5lZWQgdG8gdHJhY2sgaWYgdGhpcyBvYmplY3QgaXMgYSBkaXJlY3RvcnkKKysJCSAqIGJl Zm9yZSB3ZSBtb3ZlIHRoZSBwb2ludGVyLiBJZiB3ZSBhcmUgaW4gcmVzdW1lIG1vZGUKKysJCSAq IHdlIG1pZ2h0IGVuZCB1cCB0cnlpbmcgdG8gZ2V0IGFuIG1kc3VtIG9uIGEgZGlyZWN0b3J5Cisr CQkgKiBhbmQgdGhhdCBkb2Vzbid0IHdvcmsgKi8KKysJCWludCBkaXJfZmxhZyA9IDA7CisrCQlp ZiAoKmNwID09ICdEJykKKysJCQlkaXJfZmxhZyA9IDE7CisrCisgCQlmb3IgKCsrY3A7IGNwIDwg YnVmICsgNTsgY3ArKykgeworIAkJCWlmICgqY3AgPCAnMCcgfHwgKmNwID4gJzcnKQorIAkJCQlT Q1JFV1VQKCJiYWQgbW9kZSIpOworQEAgLTE4MDQsNiArMjEyMCwxMCBAQAorIAkJaWYgKCpjcCsr ICE9ICcgJykKKyAJCQlTQ1JFV1VQKCJtb2RlIG5vdCBkZWxpbWl0ZWQiKTsKKyAKKysjaWZkZWYg REVCVUcKKysJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3Ap OworKyNlbmRpZgorKworIAkJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisgCQkJ U0NSRVdVUCgic2l6ZSBub3QgcHJlc2VudCIpOworIAkJdWxsID0gc3RydG91bGwoY3AsICZjcCwg MTApOworQEAgLTE4MTMsMTEgKzIxMzMsMzIgQEAKKyAJCQlTQ1JFV1VQKCJzaXplIG91dCBvZiBy YW5nZSIpOworIAkJc2l6ZSA9IChvZmZfdCl1bGw7CisgCisrI2lmZGVmIERFQlVHCisrCQlmcHJp bnRmKHN0ZGVyciwgIiVzOiBjcCBpcyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsKKysjZW5kaWYKKysJ CWlmIChyZXN1bWVfZmxhZyAmJiAhZGlyX2ZsYWcpIHsKKysJCQkqcmVtb3RlX2hhc2hzdW0gPSAn XDAnOworKwkJCWludCBpOworKwkJCWZvciAoaSA9IDA7IGkgPCBIQVNIX0xFTjsgaSsrKSB7Cisr CQkJCXN0cm5jYXQgKHJlbW90ZV9oYXNoc3VtLCBjcCsrLCAxKTsKKysJCQl9CisrI2lmZGVmIERF QlVHCisrCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6ICclcydcbiIsIGhvc3RuYW1lLCByZW1vdGVf aGFzaHN1bSk7CisrI2VuZGlmCisrCQkJaWYgKCFjcCB8fCAqY3ArKyAhPSAnICcpCisrCQkJCVND UkVXVVAoImhhc2ggbm90IGRlbGltaXRlZCIpOworKwkJfQorKyNpZmRlZiBERUJVRworKwkJZnBy aW50ZihzdGRlcnIsICIlczogY3AgaXMgJXNcbiIsIGhvc3RuYW1lLCBjcCk7CisrI2VuZGlmCisg CQlpZiAoKmNwID09ICdcMCcgfHwgc3RyY2hyKGNwLCAnLycpICE9IE5VTEwgfHwKKyAJCSAgICBz dHJjbXAoY3AsICIuIikgPT0gMCB8fCBzdHJjbXAoY3AsICIuLiIpID09IDApIHsKKyAJCQlydW5f ZXJyKCJlcnJvcjogdW5leHBlY3RlZCBmaWxlbmFtZTogJXMiLCBjcCk7CisgCQkJZXhpdCgxKTsK KyAJCX0KKysjaWZkZWYgREVCVUcKKysJCWZwcmludGYoc3RkZXJyLCAiJXMgY3AgaXMgJXNcbiIs IGhvc3RuYW1lLCBjcCk7CisrI2VuZGlmCisgCQlpZiAobnBhdHRlcm5zID4gMCkgeworIAkJCWZv ciAobiA9IDA7IG4gPCBucGF0dGVybnM7IG4rKykgeworIAkJCQlpZiAoc3RyY21wKHBhdHRlcm5z W25dLCBjcCkgPT0gMCB8fAorQEAgLTE4ODcsMTEgKzIyMjgsMTk1IEBACisgCQl9CisgCQlvbW9k ZSA9IG1vZGU7CisgCQltb2RlIHw9IFNfSVdVU1I7CisrCQlzdGF0KGNwLCAmY3BzdGF0KTsKKysJ CXhmZXJfc2l6ZSA9IHNpemU7CisrCQlpZiAocmVzdW1lX2ZsYWcpIHsKKysjaWZkZWYgREVCVUcK KysJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBucCBpcyAlc1xuIiwgaG9zdG5hbWUsIG5wKTsKKysj ZW5kaWYKKysJCQkvKiBkb2VzIHRoZSBmaWxlIGV4aXN0IGFuZCBpZiBpdCBkb2VzIGl0IHdyaXRh YmxlPyAqLworKwkJCWlmIChzdGF0KG5wLCAmbnBzdGF0KSA9PSAtMSkgeworKyNpZmRlZiBERUJV RworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIExvY2FsIGZpbGUgZG9lcyBub3QgZXhpc3Qgc2l6 ZSBpcyAlbGQhXG4iLAorKwkJCQkJaG9zdG5hbWUsIG5wc3RhdC5zdF9zaXplKTsKKysjZW5kaWYK KysJCQkJbnBzdGF0LnN0X3NpemUgPSAwOworKwkJCX0gZWxzZSB7CisrCQkJCS8qIGNoZWNrIHRv IHNlZSBpZiB0aGUgZmlsZSBpcyB3cml0ZWFibGUKKysJCQkJICogaWYgaXQgaXNuJ3QgdGhlbiB3 ZSBuZWVkIHRvIHNraXAgaXQgYnV0CisrCQkJCSAqIGJlZm9yZSB3ZSBza2lwIGl0IHdlIG5lZWQg dG8gc2VuZCB0aGUgcmVtb3RlCisrCQkJCSAqIHdoYXQgdGhleSBhcmUgZXhwZWN0aW5nIHNvIEJV Rl9BTkRfSEFTSCBieXRlcyBhbmQgdGhlbgorKwkJCQkgKiBhIG51bGwuCisrCQkJCSAqIE5PVEUh ISEgVGhlIGZvcm1hdCBpbiB0aGUgc25wcmludGYgbmVlZHMgdGhlIGFjdHVhbCBudW1lcmljCisr CQkJCSAqIGJlY2F1c2UgdXNpbmcgYSBkZWZpbmUgaXNuJ3Qgd29ya2luZyAqLworKwkJCQlpZiAo YWNjZXNzIChucCwgV19PSykgIT0gMCkgeworKwkJCQkJZnByaW50ZihzdGRlcnIsICJzY3A6ICVz OiBQZXJtaXNzaW9uIGRlbmllZCBvbiAlc1xuIiwgbnAsIGhvc3RuYW1lKTsKKysJCQkJCXNucHJp bnRmKG91dGJ1ZiwgQlVGX0FORF9IQVNILCAiUyUtKnMiLCBCVUZfQU5EX0hBU0gtMiwgIiAiKTsK KysJCQkJCSh2b2lkKWF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBvdXRidWYsIHN0cmxlbihvdXRi dWYpKTsKKysJCQkJCSh2b2lkKWF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisrCQkJ CQljb250aW51ZTsKKysJCQkJfQorKwkJCX0KKysJCQkvKiB0aGlzIGZpbGUgaXMgYWxyZWFkeSBo ZXJlIGRvIHdlIG5lZWQgdG8gbW92ZSBpdD8KKysJCQkgKiBDaGVjayB0byBtYWtlIHN1cmUgbnBz dGF0LnN0X3NpemUgPiAwLiBJZiBpdCBpcyAwIHRoZW4gd2UKKysJCQkgKiBtYXkgdHJ5aW5nIHRv IGJlIG1vdmluZyBhIHplcm8gYnl0ZSBmaWxlIGluIHdoaWNoIGNhc2UgdGhpcworKwkJCSAqIGZv bGxvd2luZyBibG9jayBmYWlscy4gU2VlIG9uIDAgYnl0ZSBmaWxlcyB0aGUgaGFzaGVzIHdpbGwK KysJCQkgKiBhbHdheXMgbWF0Y2ggYW5kIHRoZSBmaWxlIHdvbid0IGJlIGNyZWF0ZWQgZXZlbiB0 aG91Z2ggaXQgc2hvdWxkCisrCQkJICovCisrCQkJaWYgKHhmZXJfc2l6ZSA9PSBucHN0YXQuc3Rf c2l6ZSAmJiAobnBzdGF0LnN0X3NpemUgPiAwKSkgeworKwkJCQljYWxjdWxhdGVfaGFzaChucCwg bG9jYWxfaGFzaHN1bSwgbnBzdGF0LnN0X3NpemUpOworKwkJCQlpZiAoc3RyY21wKGxvY2FsX2hh c2hzdW0scmVtb3RlX2hhc2hzdW0pID09IDApIHsKKysJCQkJCS8qIHdlIGNhbiBza2lwIHRoaXMg ZmlsZSBpZiB3ZSB3YW50IHRvLiAqLworKyNpZmRlZiBERUJVRworKwkJCQkJZnByaW50ZihzdGRl cnIsICIlczogRmlsZXMgYXJlIHRoZSBzYW1lXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisrCQkJ CQkvKiB0aGUgcmVtb3RlIGlzIGV4cGVjdGluZyBzb21ldGhpbmcgc28gd2UgbmVlZCB0byBzZW5k IHRoZW0gc29tZXRoaW5nKi8KKysJCQkJCXNucHJpbnRmKG91dGJ1ZiwgQlVGX0FORF9IQVNILCAi UyUtKnMiLCBCVUZfQU5EX0hBU0gtMiwgIiAiKTsKKysJCQkJCSh2b2lkKWF0b21pY2lvKHZ3cml0 ZSwgcmVtb3V0LCBvdXRidWYsIHN0cmxlbihvdXRidWYpKTsKKysjaWZkZWYgREVCVUcKKysJCQkJ CWZwcmludGYoc3RkZXJyLCIlczogc2VudCAnJXMnIHRvIHJlbW90ZVxuIiwgaG9zdG5hbWUsIG91 dGJ1Zik7CisrI2VuZGlmCisrCQkJCQkvKiB0aGUgcmVtb3RlIGlzIHdhaXRpbmcgb24gYW4gYWNr IHNvIHNlbmQgYSBudWxsICovCisrCQkJCQkodm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwg IiIsIDEpOworKwkJCQkJaWYgKHNob3dwcm9ncmVzcykKKysJCQkJCQlmcHJpbnRmIChzdGRlcnIs ICJTa2lwcGluZyBpZGVudGljYWwgZmlsZTogJXNcbiIsIG5wKTsKKysJCQkJCWNvbnRpbnVlOwor KwkJCQl9IGVsc2UgeworKwkJCQkJLyogZmlsZSBzaXplcyBhcmUgdGhlIHNhbWUgYnV0IHRoZXkg ZG9uJ3QgbWF0Y2ggKi8KKysjaWZkZWYgREVCVUcKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IHRhcmdldCglbGQpIGlzIGRpZmZlcmVudCB0aGFuIHNvdXJjZSglbGQpIVxuIiwKKysJCQkJCQlo b3N0bmFtZSwgbnBzdGF0LnN0X3NpemUsIHNpemUpOworKyNlbmRpZgorKwkJCQkJc25wcmludGYo dG1wYnVmLCBzaXplb2Ygb3V0YnVmLCAiQyUwNG8gJWxsZCAlcyIsCisrCQkJCQkJICh1X2ludCkg KG5wc3RhdC5zdF9tb2RlICYgRklMRU1PREVNQVNLKSwKKysJCQkJCQkgKGxvbmcgbG9uZylucHN0 YXQuc3Rfc2l6ZSwgbG9jYWxfaGFzaHN1bSk7CisrCQkJCQlzbnByaW50ZihvdXRidWYsIEJVRl9B TkRfSEFTSCwgIiUtKnMiLCBCVUZfQU5EX0hBU0gtMSwgdG1wYnVmKTsKKysJCQkJCSh2b2lkKSBh dG9taWNpbyh2d3JpdGUsIHJlbW91dCwgb3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7CisrCQkJCQli YWRfbWF0Y2hfZmxhZyA9IDE7CisrCQkJCX0KKysJCQl9CisrCQkJLyogaWYgbnBzdGF0LnN0X3Np emUgaXMgMCB0aGVuIHRoZSBsb2NhbCBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kCisrCQkJICogd2Ug aGF2ZSB0byBtb3ZlIGl0LiBTaW5jZSB3ZSBhcmUgaW4gcmVzdW1lIG1vZGUgdHJlYXQgaXQgYXMg YSByZXN1bWUgKi8KKysJCQlpZiAobnBzdGF0LnN0X3NpemUgPCB4ZmVyX3NpemUgfHwgKG5wc3Rh dC5zdF9zaXplID09IDApKSB7CisrCQkJCWNoYXIgcmFuZF9zdHJpbmdbOV07CisrI2lmZGVmIERF QlVHCisrCQkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiAlcyBpcyBzbWFsbGVyIHRoYW4gJXNcbiIs IGhvc3RuYW1lLCBucCwgY3ApOworKyNlbmRpZgorKwkJCQljYWxjdWxhdGVfaGFzaChucCwgbG9j YWxfaGFzaHN1bSwgbnBzdGF0LnN0X3NpemUpOworKyNkZWZpbmUJRklMRU1PREVNQVNLCShTX0lT VUlEfFNfSVNHSUR8U19JUldYVXxTX0lSV1hHfFNfSVJXWE8pCisrCQkJCXNucHJpbnRmKHRtcGJ1 Ziwgc2l6ZW9mIG91dGJ1ZiwgIlIlMDRvICVsbGQgJXMiLAorKwkJCQkJICh1X2ludCkgKG5wc3Rh dC5zdF9tb2RlICYgRklMRU1PREVNQVNLKSwKKysJCQkJCSAobG9uZyBsb25nKW5wc3RhdC5zdF9z aXplLCBsb2NhbF9oYXNoc3VtKTsKKysJCQkJc25wcmludGYob3V0YnVmLCBCVUZfQU5EX0hBU0gs ICIlLSpzIiwgQlVGX0FORF9IQVNILTEsIHRtcGJ1Zik7CisrI2lmZGVmIERFQlVHCisrCQkJCWZw cmludGYgKHN0ZGVyciwgIiVzOiBuZXcgYnVmIGlzICVzIG9mIGxlbmd0aCAlbGRcbiIsCisrCQkJ CQkgaG9zdG5hbWUsIG91dGJ1Ziwgc3RybGVuKG91dGJ1ZikpOworKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiBTZW5kaW5nIG5ldyBmaWxlICglcykgbW9kZXM6ICVzXG4iLAorKwkJCQkJaG9zdG5h bWUsIG5wLCBvdXRidWYpOworKyNlbmRpZgorKwkJCQkvKm5vdyB3ZSBoYXZlIHRvIHNlbmQgbnAn cyBsZW5ndGggYW5kIGhhc2ggdG8gdGhlIG90aGVyIGVuZAorKwkJCQkgKiBpZiB0aGUgY29tcHV0 ZWQgaGFzaGVzIG1hdGNoIHRoZW4gd2Ugc2VlayB0byBucCdzIGxlbmd0aCBpbgorKwkJCQkgKiBm aWxlIGFuZCBhcHBlbmQgdG8gbnAgc3RhcnRpbmcgZnJvbSB0aGVyZSAqLworKwkJCQkodm9pZCkg YXRvbWljaW8odndyaXRlLCByZW1vdXQsIG91dGJ1Ziwgc3RybGVuKG91dGJ1ZikpOworKyNpZmRl ZiBERUJVRworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBOZXcgc2l6ZTogJWxkLCBzaXplOiAl bGQsIHN0X3NpemU6ICVsZFxuIiwKKysJCQkJCWhvc3RuYW1lLCBzaXplIC0gbnBzdGF0LnN0X3Np emUsIHNpemUsIG5wc3RhdC5zdF9zaXplKTsKKysjZW5kaWYKKysJCQkJeGZlcl9zaXplID0gc2l6 ZSAtIG5wc3RhdC5zdF9zaXplOworKwkJCQlyZXN1bWVfZmxhZyA9IDE7CisrCQkJCW5wX3RtcCA9 IHhzdHJkdXAobnApOworKwkJCQkvKiBXZSBzaG91bGQgaGF2ZSBhIHJhbmRvbSBjb21wb25lbnQg dG8gYXZvaWQgY2xvYmJlcmluZyBhCisrCQkJCSAqIGxvY2FsIGZpbGUgKi8KKysJCQkJcmFuZF9z dHIocmFuZF9zdHJpbmcsIDgpOworKwkJCQlzdHJjYXQobnAsIHJhbmRfc3RyaW5nKTsKKysjaWZk ZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogV2lsbCBjb25jYXQgJXMgdG8gJXMg YWZ0ZXIgeGZlclxuIiwKKysJCQkJCWhvc3RuYW1lLCBucCwgbnBfdG1wKTsKKysjZW5kaWYKKysJ CQl9IGVsc2UgaWYgKG5wc3RhdC5zdF9zaXplID4gc2l6ZSkgeworKwkJCS8qIHRoZSB0YXJnZXQg ZmlsZSBpcyBsYXJnZXIgdGhhbiB0aGUgc291cmNlLgorKwkJCSAqIHNvIHdlIG5lZWQgdG8gb3Zl cndyaXRlIGl0LiBXZSBkb24ndCBuZWVkIHRvIHNlbmQgdGhlIGhhc2ggdGhvdWdoLiAqLworKyNp ZmRlZiBERUJVRworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB0YXJnZXQoJWxkKSBpcyBsYXJn ZXIgdGhhbiBzb3VyY2UoJWxkKSFcbiIsCisrCQkJCQlob3N0bmFtZSwgbnBzdGF0LnN0X3NpemUs IHNpemUpOworKyNlbmRpZgorKwkJCQlzbnByaW50Zih0bXBidWYsIHNpemVvZiBvdXRidWYsICJD JTA0byAlbGxkIiwKKysJCQkJCSAodV9pbnQpIChucHN0YXQuc3RfbW9kZSAmIEZJTEVNT0RFTUFT SyksCisrCQkJCQkgKGxvbmcgbG9uZylucHN0YXQuc3Rfc2l6ZSk7CisrCQkJCXNucHJpbnRmKG91 dGJ1ZiwgQlVGX0FORF9IQVNILCAiJS0qcyIsIEJVRl9BTkRfSEFTSC0xLCB0bXBidWYpOworKwkJ CQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIG91dGJ1Ziwgc3RybGVuKG91dGJ1Zikp OworKwkJCQliYWRfbWF0Y2hfZmxhZyA9IDE7CisrCQkJfQorKworKyNpZmRlZiBERUJVRworKwkJ CWZwcmludGYgKHN0ZGVyciwgIiVzOiBDUCBpcyAlcyglbGQpIE5QIGlzICVzKCVsZClcbiIsCisr CQkJCSBob3N0bmFtZSwgY3AsIHNpemUsIG5wLCBucHN0YXQuc3Rfc2l6ZSk7CisrI2VuZGlmCisr CQkJLyogd2UgYXJlIGluIHJlc3VtZSBtb2RlIHNvIHdlIG5lZWQgdGhpcyAqaGVyZSogYW5kIG5v dCBsYXRlcgorKwkJCSAqIGJlY2F1c2Ugd2UgbmVlZCB0byBnZXQgdGhlIGZpbGUgbWF0Y2ggaW5m b3JtYXRpb24gZnJvbSB0aGUgcmVtb3RlCisrCQkJICogb3V0c2lkZSBvZiByZXN1bWUgbW9kZSB3 ZSBkb24ndCBnZXQgdGhhdCBzbyB3ZSBnZXQgb3V0IG9mIHN5bmMKKysJCQkgKiBzbyB3ZSBoYXZl IGEgdGVzdCBmb3IgdGhlIHJlc3VtZV9mbGFnIGFmdGVyIHRoaXMgYmxvY2sgKi8KKysjaWZkZWYg REVCVUcKKysJCQlmcHJpbnRmIChzdGRlcnIsICIlczogU2VuZGluZyBudWxsIHRvIHJlbW91dC5c biIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1v dXQsICIiLCAxKTsKKysKKysJCQkvKiB0aGUgcmVtb3RlIGlzIGFsd2F5cyBnb2luZyB0byBzZW5k IGEgbWF0Y2ggc3RhdHVzCisrCQkJICogc28gd2UgbmVlZCB0byByZWFkIGl0IHNvIHdlIGRvbid0 IGdldCBvdXQgb2Ygc3luYyAqLworKwkJCSh2b2lkKSBhdG9taWNpbyhyZWFkLCByZW1pbiwgJm1h dGNoLCAxKTsKKysJCQlpZiAobWF0Y2ggIT0gJ00nKSB7LypmcmFnbWVudHMgZG8gbm90IG1hdGNo Ki8KKysJCQkJLyogZXhwZWN0ZWQgcmVzcG9uc2Ugb2YgRiwgTSBhbmQgTlVMTCAqYnV0KgorKwkJ CQkgKiBhbnl0aGluZyBvdGhlciB0aGFuIE0gaXMgYSBmYWlsdXJlCisrCQkJCSAqIGlmIGl0J3Mg YSBOVUxMIHRoZW4gd2UgcmVzZXQgeGZlcl9zaXplIGJ1dAorKwkJCQkgKiB3ZSByZXRhaW4gdGhl IGZpbGUgcG9pbnRlcnMgKi8KKysJCQkJeGZlcl9zaXplID0gc2l6ZTsKKysJCQkJYmFkX21hdGNo X2ZsYWcgPSAxOworKwkJCQlpZiAobWF0Y2ggPT0gJ0YnKSB7CisrCQkJCQkvKiBnb3QgYW4gRiBm b3IgZmFpbHVyZSBhbmQgbm90IE5VTEwKKysJCQkJCSAqIHNvIHdlIHdhbnQgdG8gc3dhcCBvdmVy IHRoZSBmaWxlbmFtZSBmcm9tCisrCQkJCQkgKiB0aGUgdGVtcCBiYWNrIHRvIHRoZSBvcmlnaW5h bCAqLworKyNpZmRlZiBERUJVRworKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogbWF0Y2ggc3Rh dHVzIGlzIEZcbiIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQkJCWlmIChucF90bXAgIT0gTlVM TCkKKysJCQkJCQlucCA9IG5wX3RtcDsKKysJCQkJCWVsc2UgeworKwkJCQkJCWNvbnRpbnVlOwor KwkJCQkJfQorKwkJCQl9IGVsc2UgeworKyNpZmRlZiBERUJVRworKwkJCQkJZnByaW50ZihzdGRl cnIsICIlczogbWF0Y2ggcmVjZWl2ZWQgaXMgTlVMTFxuIiwgaG9zdG5hbWUpOworKyNlbmRpZgor KwkJCQl9CisrCQkJfSBlbHNlIHsKKysjaWZkZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIs ICIlcyBtYXRjaCBzdGF0dXMgaXMgTVxuIiwgaG9zdG5hbWUpOworKyNlbmRpZgorKwkJCQliYWRf bWF0Y2hfZmxhZyA9IDA7IC8qIHdoaWxlIHRoaXMgaXMgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2Yg dGhlCisrCQkJCQkJICAgICAqIGxvb3AgSSdtIHNldHRpbmcgaXQgaGVyZSBleHBsaWNpdGx5IGFz IHdlbGwgKi8KKysJCQl9CisrCQl9CisrCisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiBDcmVhdGluZyBmaWxlLiBtb2RlIGlzICVkIGZvciAlc1xuIiwKKysJCQlob3N0bmFt ZSwgbW9kZSwgbnApOworKyNlbmRpZgorIAkJaWYgKChvZmQgPSBvcGVuKG5wLCBPX1dST05MWXxP X0NSRUFULCBtb2RlKSkgPT0gLTEpIHsKKyBiYWQ6CQkJcnVuX2VycigiJXM6ICVzIiwgbnAsIHN0 cmVycm9yKGVycm5vKSk7CisgCQkJY29udGludWU7CisgCQl9CistCQkodm9pZCkgYXRvbWljaW8o dndyaXRlLCByZW1vdXQsICIiLCAxKTsKKysKKysJCS8qIGluIHRoZSBjYXNlIG9mIG5vdCB1c2lu ZyB0aGUgcmVzdW1lIGZ1bmN0aW9uIHdlIG5lZWQgdGhpcyB2d3JpdGUgaGVyZQorKwkJICogaW4g dGhlIGNhc2Ugb2YgdXNpbmcgdGhlIHJlc3VtZSBmbGFnIGl0IGNvbWVzIGluIHRoZSBhYm92ZSBp ZiAocmVzdW1lX2ZsYWcpIGJsb2NrCisrCQkgKiB3aHk/IGJlY2F1c2Ugc2NwIGlzIHdlaXJkIGFu ZCBkZXBlbmRzIG9uIGFuIGludHJpY2F0ZSBhbmQgc2lsbHkgZGFuY2Ugb2YKKysJCSAqIGNhbGwg YW5kIHJlc3BvbnNlIGF0IGp1c3QgdGhlIHJpZ2h0IHRpbWUuIFRoYXQncyB3aHkgKi8KKysJCWlm ICghcmVzdW1lX2ZsYWcpIHsKKysjaWZkZWYgREVCVUcKKysJCQlmcHJpbnRmIChzdGRlcnIsICIl czogU2VuZGluZyBudWxsIHRvIHJlbW91dC5cbiIsIGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQko dm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKKysJCX0KKysKKyAJCWlmICgo YnAgPSBhbGxvY2J1ZigmYnVmZmVyLCBvZmQsIENPUFlfQlVGTEVOKSkgPT0gTlVMTCkgeworIAkJ CSh2b2lkKSBjbG9zZShvZmQpOworIAkJCWNvbnRpbnVlOworQEAgLTE5MDYsMTMgKzI0MzEsMTcg QEAKKyAJCSAqLworIAkJc3RhdGJ5dGVzID0gMDsKKyAJCWlmIChzaG93cHJvZ3Jlc3MpCistCQkJ c3RhcnRfcHJvZ3Jlc3NfbWV0ZXIoY3VyZmlsZSwgc2l6ZSwgJnN0YXRieXRlcyk7CisrCQkJc3Rh cnRfcHJvZ3Jlc3NfbWV0ZXIoY3VyZmlsZSwgeGZlcl9zaXplLCAmc3RhdGJ5dGVzKTsKKyAJCXNl dF9ub25ibG9jayhyZW1pbik7CistCQlmb3IgKGNvdW50ID0gaSA9IDA7IGkgPCBzaXplOyBpICs9 IGJwLT5jbnQpIHsKKysjaWZkZWYgREVCVUcKKysJCWZwcmludGYoc3RkZXJyLCAiJXM6IHhmZXJf c2l6ZSBpcyAlbGRcbiIsIGhvc3RuYW1lLCB4ZmVyX3NpemUpOworKyNlbmRpZgorKwkJZm9yIChj b3VudCA9IGkgPSAwOyBpIDwgeGZlcl9zaXplOyBpICs9IGJwLT5jbnQpIHsKKyAJCQlhbXQgPSBi cC0+Y250OworLQkJCWlmIChpICsgYW10ID4gc2l6ZSkKKy0JCQkJYW10ID0gc2l6ZSAtIGk7Cisr CQkJaWYgKGkgKyBhbXQgPiB4ZmVyX3NpemUpCisrCQkJCWFtdCA9IHhmZXJfc2l6ZSAtIGk7Cisg CQkJY291bnQgKz0gYW10OworKwkJCS8qIHJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgc29ja2V0Ki8K KyAJCQlkbyB7CisgCQkJCWogPSBhdG9taWNpbzYocmVhZCwgcmVtaW4sIGNwLCBhbXQsCisgCQkJ CSAgICBzY3BpbywgJnN0YXRieXRlcyk7CitAQCAtMTk0Nyw4ICsyNDc2LDc4IEBACisgCQkJd3Jl cnIgPSAxOworIAkJfQorIAkJaWYgKCF3cmVyciAmJiAoIWV4aXN0cyB8fCBTX0lTUkVHKHN0Yi5z dF9tb2RlKSkgJiYKKy0JCSAgICBmdHJ1bmNhdGUob2ZkLCBzaXplKSAhPSAwKQorKwkJICAgIGZ0 cnVuY2F0ZShvZmQsIHhmZXJfc2l6ZSkgIT0gMCkKKyAJCQlub3RlX2VycigiJXM6IHRydW5jYXRl OiAlcyIsIG5wLCBzdHJlcnJvcihlcnJubykpOworKworKwkJLyogaWYgbnBfdG1wIGlzbid0IHNl dCB0aGVuIHdlIGRvbid0IGhhdmUgYSByZXN1bWUgZmlsZSB0byBjYXQgKi8KKysJCS8qIGxpa2V3 aXNlLCBiYWQgbWF0Y2ggZmxhZyBtZWFucyBubyByZXN1bWUgZmxhZyAqLworKyNpZmRlZiBERUJV RworKwkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IHJlc3VtZV9mbGFnOiAlZCwgbnBfdG1wOiAlcywg YmFkX21hdGNoX2ZsYWc6ICVkXG4iLAorKwkJCSBob3N0bmFtZSwgcmVzdW1lX2ZsYWcsIG5wX3Rt cCwgYmFkX21hdGNoX2ZsYWcpOworKyNlbmRpZgorKwkJaWYgKHJlc3VtZV9mbGFnICYmIG5wX3Rt cCAmJiAhYmFkX21hdGNoX2ZsYWcpIHsKKysJCQlGSUxFICpvcmlnLCAqcmVzdW1lOworKwkJCWNo YXIgcmVzX2J1Zls1MTJdOyAvKiBzZXQgYXQgNTEyIGp1c3QgYmVjYXVzZSwgbWlnaHQgd2FudCB0 byBpbmNyZWFzZSovCisrCQkJc3NpemVfdCByZXNfYnl0ZXMgPSAwOworKwkJCW9mZl90IHN1bSA9 IDA7CisrCQkJc3RydWN0IHN0YXQgcmVzX3N0YXQ7CisrCQkJKnJlc19idWYgPSAnXDAnOworKwkJ CW9yaWcgPSBOVUxMOyAvKnN1cHJlc3Mgd2FybmluZ3MqLworKwkJCXJlc3VtZSA9IE5VTEw7IC8q c3VwcmVzcyB3YXJuaW5ncyovCisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZihzdGRlcnIsICIl czogUmVzdW1lIGZsYWcgaXMgc2V0LiBHb2luZyB0byBjb25jYXQgJXMgdG8gJXMgIG5vd1xuIiwK KysJCQkJaG9zdG5hbWUsIG5wLCBucF90bXApOworKyNlbmRpZgorKwkJCS8qIG5wL29mZCBpcyB0 aGUgcmVzdW1lIGZpbGUgc28gb3BlbiBucF90bXAgZm9yIGFwcGVuZGluZworKwkJCSAqIGNsb3Nl IG9mZCBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBiZSBzaGlmdGluZyBpdAorKwkJCSAqIGFuZCBJ IGRvbid0IHduYXQgdGhlIHNhbWUgZmlsZSBvcGVuIGluIG11bHRpcGxlIGRlc2NyaXB0b3JzICov CisrCQkJaWYgKGNsb3NlKG9mZCkgPT0gLTEpCisrCQkJCW5vdGVfZXJyKCIlczogY2xvc2U6ICVz IiwgbnAsIHN0cmVycm9yKGVycm5vKSk7CisrCQkJLyogb3JpZyBpcyB0aGUgdGFyZ2V0IGZpbGUs IHJlc3VtZSBpcyB0aGUgdGVtcCBmaWxlICovCisrCQkJb3JpZyA9IGZvcGVuKG5wX3RtcCwgImEi KTsgLypvcGVuIGZvciBhcHBlbmRpbmcqLworKwkJCWlmIChvcmlnID09IE5VTEwpIHsKKysJCQkJ ZnByaW50ZihzdGRlcnIsICIlczogQ291bGQgbm90IG9wZW4gJXMgZm9yIGFwcGVuZGluZy4iLCBo b3N0bmFtZSwgbnBfdG1wKTsKKysJCQkJZ290byBzdG9wY2F0OworKwkJCX0KKysJCQlyZXN1bWUg PSBmb3BlbihucCwgInIiKTsgLypvcGVuIGZvciByZWFkaW5nIG9ubHkqLworKwkJCWlmIChyZXN1 bWUgPT0gTlVMTCkgeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3Qgb3BlbiAl cyBmb3IgcmVhZGluZy4iLCBob3N0bmFtZSwgbnApOworKwkJCQlnb3RvIHN0b3BjYXQ7CisrCQkJ fQorKwkJCS8qIGdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSB0ZW1wIGZpbGUqLworKwkJ CWlmIChmc3RhdChmaWxlbm8ocmVzdW1lKSwgJnJlc19zdGF0KSA9PSAtMSkgeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3Qgc3RhdCAlcyIsIGhvc3RuYW1lLCBucCk7CisrCQkJ CWdvdG8gc3RvcGNhdDsKKysJCQl9CisrCQkJLyogd2hpbGUgdGhlIG51bWJlciBvZiBieXRlcyBy ZWFkIGZyb20gdGhlIHRlbXAgZmlsZQorKwkJCSAqIGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0 aGUgZmlsZSByZWFkIGluIGEgY2h1bmsgYW5kCisrCQkJICogd3JpdGUgaXQgdG8gdGhlIHRhcmdl dCBmaWxlICovCisrCQkJZG8geworKwkJCQlyZXNfYnl0ZXMgPSBmcmVhZChyZXNfYnVmLCAxLCA1 MTIsIHJlc3VtZSk7CisrCQkJCWZ3cml0ZShyZXNfYnVmLCAxLCByZXNfYnl0ZXMsIG9yaWcpOwor KwkJCQlzdW0gKz0gcmVzX2J5dGVzOworKwkJCX0gd2hpbGUgKHN1bSA8IHJlc19zdGF0LnN0X3Np emUpOworKworK3N0b3BjYXQ6CQlpZiAob3JpZykKKysJCQkJZmNsb3NlKG9yaWcpOworKwkJCWlm IChyZXN1bWUpCisrCQkJCWZjbG9zZShyZXN1bWUpOworKwkJCS8qIGRlbGV0ZSB0aGUgcmVzdW1l IGZpbGUgKi8KKysJCQlyZW1vdmUobnApOworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYgKHN0 ZGVyciwgIiVzOiBucCglcykgYW5kIG5wX3RtcCglcylcbiIsIGhvc3RuYW1lLCBucCwgbnBfdG1w KTsKKysjZW5kaWYKKysJCQlucCA9IG5wX3RtcDsKKysjaWZkZWYgREVCVUcKKysJCQlmcHJpbnRm IChzdGRlcnIsICIlcyBucCglcykgYW5kIG5wX3RtcCglcylcbiIsIGhvc3RuYW1lLCBucCwgbnBf dG1wKTsKKysjZW5kaWYKKysJCQkvKiByZXNldCBvZmQgdG8gdGhlIG9yaWdpbmFsIG5wICovCisr CQkJaWYgKChvZmQgPSBvcGVuKG5wX3RtcCwgT19XUk9OTFkpKSA9PSAtMSkgeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIiVzOiBjb3VsZG4ndCBvcGVuICVzIGluIGFwcGVuZCBmdW5jdGlvblxuIiwg aG9zdG5hbWUsIG5wX3RtcCk7CisrCQkJCWF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7 CisrCQkJCWdvdG8gYmFkOworKwkJCX0KKysJCX0KKyAJCWlmIChwZmxhZykgeworIAkJCWlmIChl eGlzdHMgfHwgb21vZGUgIT0gbW9kZSkKKyAjaWZkZWYgSEFWRV9GQ0hNT0QKK0BAIC0xOTgzLDgg KzI1ODIsMTcgQEAKKyAJCQl9CisgCQl9CisgCQkvKiBJZiBubyBlcnJvciB3YXMgbm90ZWQgdGhl biBzaWduYWwgc3VjY2VzcyBmb3IgdGhpcyBmaWxlICovCistCQlpZiAobm90ZV9lcnIoTlVMTCkg PT0gMCkKKysJCWlmIChub3RlX2VycihOVUxMKSA9PSAwKSB7CisrI2lmZGVmIERFQlVHCisrCQkJ ZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0bmFt ZSk7CisrI2VuZGlmCisgCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7 CisrCQl9CisrCQkvKiB3ZSBhcmUgaW4gcmVzdW1lIG1vZGUgYW5kIHdlIGhhdmUgYWxsb2NhdGVk IG1lbW9yeSBmb3IgbnBfdG1wICovCisrCQlpZiAocmVzdW1lX2ZsYWcgJiYgbnBfdG1wICE9IE5V TEwpIHsKKysJCQlmcmVlKG5wX3RtcCk7CisrCQkJbnBfdG1wID0gTlVMTDsKKysJCX0KKyAJfQor IGRvbmU6CisgCWZvciAobiA9IDA7IG4gPCBucGF0dGVybnM7IG4rKykKK0BAIC0yMTMyLDExICsy NzQwLDE5IEBACisgdm9pZAorIHVzYWdlKHZvaWQpCisgeworKyNpZiAoZGVmaW5lZCBXSVRIX09Q RU5TU0wpICYmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQorKwkodm9pZCkgZnBy aW50ZihzdGRlcnIsCisrCSAgICAidXNhZ2U6IHNjcCBbLTM0NkFCQ09wcVJyc1R2Wl0gWy1jIGNp cGhlcl0gWy1EIHNmdHBfc2VydmVyX3BhdGhdIFstRiBzc2hfY29uZmlnXVxuIgorKwkgICAgIiAg ICAgICAgICAgWy1pIGlkZW50aXR5X2ZpbGVdIFstSiBkZXN0aW5hdGlvbl0gWy1sIGxpbWl0XSBb LW8gc3NoX29wdGlvbl1cbiIKKysJICAgICIgICAgICAgICAgIFstUCBwb3J0XSBbLVMgcHJvZ3Jh bV0gWy1YIHNmdHBfb3B0aW9uXSBzb3VyY2UgLi4uIHRhcmdldFxuIik7CisrCWV4aXQoMSk7Cisr I2Vsc2UKKyAJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorIAkgICAgInVzYWdlOiBzY3AgWy0zNDZB QkNPcHFScnNUdl0gWy1jIGNpcGhlcl0gWy1EIHNmdHBfc2VydmVyX3BhdGhdIFstRiBzc2hfY29u ZmlnXVxuIgorIAkgICAgIiAgICAgICAgICAgWy1pIGlkZW50aXR5X2ZpbGVdIFstSiBkZXN0aW5h dGlvbl0gWy1sIGxpbWl0XSBbLW8gc3NoX29wdGlvbl1cbiIKKyAJICAgICIgICAgICAgICAgIFst UCBwb3J0XSBbLVMgcHJvZ3JhbV0gWy1YIHNmdHBfb3B0aW9uXSBzb3VyY2UgLi4uIHRhcmdldFxu Iik7CisgCWV4aXQoMSk7CisrI2VuZGlmCisgfQorIAorIHZvaWQKK0BAIC0yMjc1LDYgKzI4OTEs MTggQEAKKyAJCWV4aXQoMSk7CisgfQorIAorK3ZvaWQgcmFuZF9zdHIoY2hhciAqZGVzdCwgc2l6 ZV90IGxlbmd0aCkgeworKwljaGFyIGNoYXJzZXRbXSA9ICIwMTIzNDU2Nzg5IgorKwkJImFiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorKwkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsK KysKKysJd2hpbGUgKGxlbmd0aC0tID4gMCkgeworKwkJc2l6ZV90IGluZGV4ID0gKGRvdWJsZSkg cmFuZCgpIC8gUkFORF9NQVggKiAoc2l6ZW9mIGNoYXJzZXQgLSAxKTsKKysJCSpkZXN0KysgPSBj aGFyc2V0W2luZGV4XTsKKysJfQorKwkqZGVzdCA9ICdcMCc7CisrfQorKworIHZvaWQKKyBjbGVh bnVwX2V4aXQoaW50IGkpCisgeworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2VydmNv bmYuYyBvcGVuc3NoLTEwLjVwMS9zZXJ2Y29uZi5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9z ZXJ2Y29uZi5jCTIwMjYtMDktMjEgMDc6MDY6MDUuNTYzNDk4NzM0ICswMjAwCisrKysgb3BlbnNz aC0xMC41cDEvc2VydmNvbmYuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5MzQ1OTA4NCArMDIwMAor QEAgLTY5LDYgKzY5LDcgQEAKKyAjaW5jbHVkZSAiYXV0aC5oIgorICNpbmNsdWRlICJteXByb3Bv c2FsLmgiCisgI2luY2x1ZGUgImRpZ2VzdC5oIgorKyNpbmNsdWRlICJzc2hidWYuaCIKKyAjaW5j bHVkZSAidmVyc2lvbi5oIgorICNpbmNsdWRlICJzc2gtZ3NzLmgiCisgCitAQCAtNDI1LDYgKzQy NiwxMyBAQAorIAkJb3B0aW9ucy0+c3NoZF9zZXNzaW9uX3BhdGggPSB4c3RyZHVwKF9QQVRIX1NT SERfU0VTU0lPTik7CisgCWlmIChvcHRpb25zLT5zc2hkX2F1dGhfcGF0aCA9PSBOVUxMKQorIAkJ b3B0aW9ucy0+c3NoZF9hdXRoX3BhdGggPSB4c3RyZHVwKF9QQVRIX1NTSERfQVVUSCk7CisrCS8q IEhQTjogTm9uZU1hY0VuYWJsZWQgaGFzIG5vIGVmZmVjdCB3aXRob3V0IE5vbmVFbmFibGVkCisr CSAqIG5vdGUgdGhpcyBwbGFjZW1lbnQgb2YgdGhpcyBzdGFuemEgbWF0dGVycy4gSXQgaGFzIHRv IGNvbWUgYWZ0ZXIKKysJICogdGhlIG1hY3JvcyBhcmUgcnVuIHNvIHdlIGhhdmUgdGhlc2UgaXRl bXMgaW4gdGhlIHN0cnVjdCAqLworKwlpZiAob3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID4gMCAm JiBvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gMCkgeworKwkJbG9naXQoIk5vbmVNYWNFbmFibGVk IGlnbm9yZWQ6IHJlcXVpcmVzIE5vbmVFbmFibGVkIik7CisrCQlvcHRpb25zLT5ub25lbWFjX2Vu YWJsZWQgPSAwOworKwl9CisgCisgCWFzc2VtYmxlX2FsZ29yaXRobXMob3B0aW9ucyk7CisgCitA QCAtNTg3LDYgKzU5NSw3IEBACisgCisgCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldLm5hbWU7IGkr KykKKyAJCWlmIChzdHJjYXNlY21wKGNwLCBrZXl3b3Jkc1tpXS5uYW1lKSA9PSAwKSB7CisrCQkJ ZGVidWcoIkNvbmZpZyB0b2tlbiBpcyAlcyIsIGtleXdvcmRzW2ldLm5hbWUpOworIAkJCSpmbGFn cyA9IGtleXdvcmRzW2ldLmZsYWdzOworIAkJCXJldHVybiBrZXl3b3Jkc1tpXS5vcGNvZGU7Cisg CQl9CitAQCAtMTM2Miw2ICsxMzcxLDMwIEBACisgCQltdWx0aXN0YXRlX3B0ciA9IG11bHRpc3Rh dGVfaWdub3JlX3Job3N0czsKKyAJCWdvdG8gcGFyc2VfbXVsdGlzdGF0ZTsKKyAKKysJY2FzZSBz VGNwUmN2QnVmUG9sbDoKKysJCWludHB0ciA9ICZvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsOwor KwkJZ290byBwYXJzZV9mbGFnOworKworKwljYXNlIHNIUE5EaXNhYmxlZDoKKysJCWludHB0ciA9 ICZvcHRpb25zLT5ocG5fZGlzYWJsZWQ7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ug c05vbmVFbmFibGVkOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPm5vbmVfZW5hYmxlZDsKKysJCWdv dG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBzTm9uZU1hY0VuYWJsZWQ6CisrCQlpbnRwdHIgPSAm b3B0aW9ucy0+bm9uZW1hY19lbmFibGVkOworKwkJZ290byBwYXJzZV9mbGFnOworKworKwljYXNl IHNEaXNhYmxlTVRBRVM6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRocmVh ZGVkOworKwkJZ290byBwYXJzZV9mbGFnOworKworKwljYXNlIHNVc2VNUFRDUDoKKysJCWludHB0 ciA9ICZvcHRpb25zLT51c2VfbXB0Y3A7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisgCWNhc2Ug c0lnbm9yZVVzZXJLbm93bkhvc3RzOgorIAkJaW50cHRyID0gJm9wdGlvbnMtPmlnbm9yZV91c2Vy X2tub3duX2hvc3RzOworICBwYXJzZV9mbGFnOgorQEAgLTQzODAsNiArNDQxMywxMSBAQAorIAlk dW1wX2NmZ19mbXRpbnQoc1N0cmVhbUxvY2FsQmluZFVubGluaywgby0+ZndkX29wdHMuc3RyZWFt bG9jYWxfYmluZF91bmxpbmspOworIAlkdW1wX2NmZ19mbXRpbnQoc0ZpbmdlcnByaW50SGFzaCwg by0+ZmluZ2VycHJpbnRfaGFzaCk7CisgCWR1bXBfY2ZnX2ZtdGludChzRXhwb3NlQXV0aEluZm8s IG8tPmV4cG9zZV91c2VyYXV0aF9pbmZvKTsKKysJZHVtcF9jZmdfZm10aW50KHNIUE5EaXNhYmxl ZCwgby0+aHBuX2Rpc2FibGVkKTsKKysJZHVtcF9jZmdfZm10aW50KHNUY3BSY3ZCdWZQb2xsLCBv LT50Y3BfcmN2X2J1Zl9wb2xsKTsKKysJZHVtcF9jZmdfZm10aW50KHNOb25lRW5hYmxlZCwgby0+ bm9uZV9lbmFibGVkKTsKKysJZHVtcF9jZmdfZm10aW50KHNOb25lTWFjRW5hYmxlZCwgby0+bm9u ZW1hY19lbmFibGVkKTsKKysJZHVtcF9jZmdfZm10aW50KHNVc2VNUFRDUCwgby0+dXNlX21wdGNw KTsKKyAJZHVtcF9jZmdfZm10aW50KHNSZWZ1c2VDb25uZWN0aW9uLCBvLT5yZWZ1c2VfY29ubmVj dGlvbik7CisgCisgCS8qIHN0cmluZyBhcmd1bWVudHMgKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEw LjVwMS5vcmlnL3NlcnZjb25mLmggb3BlbnNzaC0xMC41cDEvc2VydmNvbmYuaAorLS0tIG9wZW5z c2gtMTAuNXAxLm9yaWcvc2VydmNvbmYuaAkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2NDAyMjU3MCAr MDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NlcnZjb25mLmgJMjAyNi0wOS0yMSAwNzowNjo1OS44 OTM2NzczOTUgKzAyMDAKK0BAIC0yNjQsMTMgKzI2NCwyMiBAQAorIFNTSENPTkZfQUxJQVMoU0tl eUF1dGhlbnRpY2F0aW9uLCBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLCBTU0hDRkdfQUxM KSBcCisgU1NIQ09ORl9BTElBUyhLZWVwQWxpdmUsIFRDUEtlZXBBbGl2ZSwgU1NIQ0ZHX0dMT0JB TCkKKyAKKysjZGVmaW5lIFNTSERfQ09ORklHX0VOVFJJRVNfSFBOIFwKKytTU0hDT05GX0lOVEZM QUcodGNwX3Jjdl9idWZfcG9sbCwgVGNwUmN2QnVmUG9sbCwgU1NIQ0ZHX0FMTCwgMSwgU1NIQ0ZH X0NPUFlfTUFUQ0gpIFwKKytTU0hDT05GX0lOVEZMQUcoaHBuX2Rpc2FibGVkLCBIUE5EaXNhYmxl ZCwgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFUQ0gpIFwKKytTU0hDT05GX0lOVEZMQUco bm9uZV9lbmFibGVkLCBOb25lRW5hYmxlZCwgU1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFU Q0gpIFwKKytTU0hDT05GX0lOVEZMQUcobm9uZW1hY19lbmFibGVkLCBOb25lTWFjRW5hYmxlZCwg U1NIQ0ZHX0FMTCwgMCwgU1NIQ0ZHX0NPUFlfTUFUQ0gpIFwKKytTU0hDT05GX0lOVEZMQUcoZGlz YWJsZV9tdWx0aXRocmVhZGVkLCBEaXNhYmxlTVRBRVMsIFNTSENGR19BTEwsIDAsIFNTSENGR19D T1BZX01BVENIKSBcCisrU1NIQ09ORl9JTlRGTEFHKHVzZV9tcHRjcCwgVXNlTVBUQ1AsIFNTSENG R19HTE9CQUwsIDAsIFNTSENGR19DT1BZX05PTkUpCisrCisgI2RlZmluZSBTU0hEX0NPTkZJR19F TlRSSUVTX0JBU0UgXAorIAlTU0hEX0NPTkZJR19FTlRSSUVTX0NVU1RPTSBcCisgCVNTSERfQ09O RklHX0VOVFJJRVNfTUFJTiBcCisgCVNTSERfQ09ORklHX0VOVFJJRVNfTEVHQUNZIFwKKyAJU1NI RF9DT05GSUdfRU5UUklFU19BTElBU0VTIFwKKyAJU1NIRF9DT05GSUdfRU5UUklFU19QQU0gXAor LQlTU0hEX0NPTkZJR19FTlRSSUVTX0xBU1RMT0cKKysJU1NIRF9DT05GSUdfRU5UUklFU19MQVNU TE9HIFwKKysJU1NIRF9DT05GSUdfRU5UUklFU19IUE4KKyAKKyAjaWZkZWYgVVNFX1BBTQorICNk ZWZpbmUgU1NIRF9DT05GSUdfRU5UUklFU19QQU0gXAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAx Lm9yaWcvc2VydmVybG9vcC5jIG9wZW5zc2gtMTAuNXAxL3NlcnZlcmxvb3AuYworLS0tIG9wZW5z c2gtMTAuNXAxLm9yaWcvc2VydmVybG9vcC5jCTIwMjYtMDktMjEgMDc6MDY6MDUuMzc0ODUxNzMy ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc2VydmVybG9vcC5jCTIwMjYtMDktMjEgMDc6NTU6 MDMuMDA5NDE5Mzc0ICswMjAwCitAQCAtNzcsNiArNzcsOCBAQAorICNpbmNsdWRlICJzZXJ2ZXJs b29wLmgiCisgI2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNsdWRlICJjb21wYXQuaCIKKysjaW5j bHVkZSAibWV0cmljcy5oIgorKyNpbmNsdWRlICJjaXBoZXItc3dpdGNoLmgiCisgCisgZXh0ZXJu IFNlcnZlck9wdGlvbnMgb3B0aW9uczsKKyAKK0BAIC0zNDEsNiArMzQzLDcgQEAKKyAJc2lnc2V0 X3QgYnNpZ3NldCwgb3NpZ3NldDsKKyAKKyAJZGVidWcoIkVudGVyaW5nIGludGVyYWN0aXZlIHNl c3Npb24gZm9yIFNTSDIuIik7CisrCXNzaC0+c3RhcnRfdGltZSA9IG1vbm90aW1lX2RvdWJsZSgp OworIAorIAlpZiAoc2lnZW1wdHlzZXQoJmJzaWdzZXQpID09IC0xIHx8CisgCSAgICBzaWdhZGRz ZXQoJmJzaWdzZXQsIFNJR0NITEQpID09IC0xKQorQEAgLTM5NSw5ICszOTgsMTUgQEAKKyAJY29s bGVjdF9jaGlsZHJlbihzc2gpOworIAlmcmVlKHBmZCk7CisgCisrCS8qIHdyaXRlIGZpbmFsIGxv ZyBlbnRyeSAoZG8gd2UgbmVlZCB0aGlzIGhlcmU/IC1janIpKi8KKysJc3NocGt0X2ZpbmFsX2xv Z19lbnRyeShzc2gpOworKworIAkvKiBmcmVlIGFsbCBjaGFubmVscywgbm8gbW9yZSByZWFkcyBh bmQgd3JpdGVzICovCisgCWNoYW5uZWxfZnJlZV9hbGwoc3NoKTsKKyAKKysJLyogZmluYWwgZW50 cnkgbXVzdCBjb21lIGFmdGVyIGNoYW5uZWxzIGNsb3NlIC1janIgKi8KKysJc3NocGt0X2ZpbmFs X2xvZ19lbnRyeShzc2gpOworKworIAkvKiBmcmVlIHJlbWFpbmluZyBzZXNzaW9ucywgZS5nLiBy ZW1vdmUgd3RtcCBlbnRyaWVzICovCisgCXNlc3Npb25fZGVzdHJveV9hbGwoc3NoLCBOVUxMKTsK KyB9CitAQCAtNjAwLDYgKzYwOSw4IEBACisgCWMgPSBjaGFubmVsX25ldyhzc2gsICJzZXNzaW9u IiwgU1NIX0NIQU5ORUxfTEFSVkFMLAorIAkgICAgLTEsIC0xLCAtMSwgLyp3aW5kb3cgc2l6ZSov MCwgQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQsCisgCSAgICAwLCAic2VydmVyLXNlc3Npb24iLCAx KTsKKysJaWYgKChvcHRpb25zLnRjcF9yY3ZfYnVmX3BvbGwpICYmICghb3B0aW9ucy5ocG5fZGlz YWJsZWQpKQorKwkJYy0+ZHluYW1pY193aW5kb3cgPSAxOworIAlpZiAoc2Vzc2lvbl9vcGVuKHRo ZV9hdXRoY3R4dCwgYy0+c2VsZikgIT0gMSkgeworIAkJZGVidWcoInNlc3Npb24gb3BlbiBmYWls ZWQsIGZyZWUgY2hhbm5lbCAlZCIsIGMtPnNlbGYpOworIAkJY2hhbm5lbF9mcmVlKHNzaCwgYyk7 CitAQCAtNjY4LDYgKzY3OSw2NyBAQAorIAlyZXR1cm4gMDsKKyB9CisgCisrLyogd2UgbmVlZCB0 byBnZXQgdGhlIGFjdHVhbCBzb2NrZXQgaW4gdXNlIGFuZCBmcm9tIHRoZXJlCisrICogcmVhZCB0 aGUgdmFsdWVzIGluIHRoZSBUQ1BfSU5GTyBzdHJ1Y3QuCisrICogc2hvdXQgb3V0IHRvIFJlbmUg UGZpZmZlciBmb3IgdGhlIGFydGljbGUgaHR0cHM6Ly9saW51eGdhemV0dGUubmV0LzEzNi9wZmVp ZmZlci5odG1sCisrICogZm9yIGdldHRpbmcgbWUgc3RhcnRlZC4gVGhpcyBvbmx5IHdvcmtzIG9u IHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZSB0Y3BfaW5mbworKyAqIHN0cnVjdDsgbGludXgsIGZy ZWVic2QsIG5ldGJzZCBhcyBvZiBub3cuIEFwcGxlIGhhcyBvbmUgYnV0IGl0J3MgY29tcGxldGVs eSBkaWZmZXJlbnQKKysgKiB0aGFuIGFueSBvZiB0aGUgb3RoZXJzLgorKyAqLworK3N0YXRpYyBp bnQKKytzZXJ2ZXJfaW5wdXRfbWV0cmljc19yZXF1ZXN0KHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0 IHNzaGJ1ZiAqKnJlc3BwKQorK3sKKysJaW50IHN1Y2Nlc3MgPSAwOworKwkvKiBUQ1BfSU5GTyBp cyBkZWZpbmVkIGluIG1ldHJpY3MuaAorKwkgKiBpZiBpdCdzIG5vdCBkZWZpbmVkIHRoZW4gd2Ug ZG9uJ3Qgc3VwcG9ydCB0Y3BfaW5mbworKwkgKiBzbyBqdXN0IHJldHVybiBhIGZhaWx1cmUgY29k ZSAqLworKyNpZiAhZGVmaW5lZCBUQ1BfSU5GTworKwlyZXR1cm4gc3VjY2VzczsKKysjZWxzZQor KwlzdHJ1Y3QgdGNwX2luZm8gdGNwX2luZm87CisrCXN0cnVjdCBzc2hidWYgKnJlc3AgPSBOVUxM OworKwlpbnQgdGNwX2luZm9fbGVuOworKwkvKiB0aGlzIGlzIHRoZSBzb2NrZXQgb2YgdGhlIGN1 cnJlbnQgY29ubmVjdGlvbiAqLworKwlpbnQgc29ja19pbiA9IHNzaF9wYWNrZXRfZ2V0X2Nvbm5l Y3Rpb25faW4oc3NoKTsKKysJaW50IHI7CisrCWJpbm4gKm1ldHJpY3NvYmo7CisrCisrCXRjcF9p bmZvX2xlbiA9IHNpemVvZih0Y3BfaW5mbyk7IC8qZXhwZWN0IGFyb3VuZCAzMzAgYnl0ZXMgKi8K KysJaWYgKChyZXNwID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3NoYnVm X25ldyIpOworKworKwkvKiBjcmVhdGUgdGhlIGJpbm4gb2JqZWN0IHRvIGhvbGQgdGhlIHNlcmlh bGl6ZWQgbWV0cmljcyAqLworKwltZXRyaWNzb2JqID0gYmlubl9vYmplY3QoKTsKKysJaWYgKG1l dHJpY3NvYmogPT0gTlVMTCkgeworKwkJZXJyb3JfZigiQ291bGQgbm90IGNyZWF0ZSBtZXRyaWNz IG9iamVjdCIpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJZGVidWcoIlN0YWNrIG1ldHJpY3Mg cmVxdWVzdCBmb3IgY29ubmVjdGlvbiAlZCIsIHNvY2tfaW4pOworKwlpZiAoKHIgPSBnZXRzb2Nr b3B0KHNvY2tfaW4sIElQUFJPVE9fVENQLCBUQ1BfSU5GTywgKHZvaWQgKikmdGNwX2luZm8sCisr CQkJICAgKHNvY2tsZW5fdCAqKSZ0Y3BfaW5mb19sZW4pKSAhPSAwKSB7CisrCQllcnJvcl9mKCJD b3VsZCBub3QgcmVhZCB0Y3BfaW5mbyBmcm9tIHNvY2tldCIpOworKwkJZ290byBvdXQ7CisrCX0K KysJLyogd3JpdGUgdGhlIHRjcF9pbmZvIGRhdGEgdG8gdGhlIGJpbm4gb2JqZWN0ICovCisrCW1l dHJpY3Nfd3JpdGVfYmlubl9vYmplY3QoJnRjcF9pbmZvLCBtZXRyaWNzb2JqKTsKKysJaWYgKChy ID0gc3NoYnVmX3B1dF9zdHJpbmcocmVzcCwgYmlubl9wdHIobWV0cmljc29iaiksCisrCQkJCSAg IGJpbm5fc2l6ZShtZXRyaWNzb2JqKSkpICE9IDApIHsKKysJCWVycm9yX2ZyKHIsICJGYWlsZWQg dG8gYnVpbGQgdGNwX2luZm8gb2JqZWN0Iik7CisrCQlnb3RvIG91dDsKKysJfQorKwkvKiBjb3B5 IHRoZSBwb2ludGVyIG9mIHRoZSByZXNwb25zZSB0byB0aGUgcGFzc2VkIGluIHJlc3BvbnNlIHBv aW50ZXIgKi8KKysJKnJlc3BwID0gcmVzcDsKKysJcmVzcCA9IE5VTEw7IC8qIGRvbid0IGZyZWUg aXQgKi8KKysJLyogZXZlcnl0aGluZyB3b3JrZWQgc28gc2V0IHN1Y2Nlc3MgdG8gdHJ1ZSAqLwor KwlzdWNjZXNzID0gMTsKKytvdXQ6CisrCXNzaGJ1Zl9mcmVlKHJlc3ApOworKwliaW5uX2ZyZWUo bWV0cmljc29iaik7CisrCXJldHVybiBzdWNjZXNzOworKyNlbmRpZiAvKiBUQ1BfSU5GTyAqLwor K30KKysKKyBzdGF0aWMgaW50Cisgc2VydmVyX2lucHV0X2hvc3RrZXlzX3Byb3ZlKHN0cnVjdCBz c2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQorIHsKK0BAIC04NDQsNiArOTE2LDEwIEBA CisgCQlzdWNjZXNzID0gMTsKKyAJfSBlbHNlIGlmIChzdHJjbXAocnR5cGUsICJob3N0a2V5cy1w cm92ZS0wMEBvcGVuc3NoLmNvbSIpID09IDApIHsKKyAJCXN1Y2Nlc3MgPSBzZXJ2ZXJfaW5wdXRf aG9zdGtleXNfcHJvdmUoc3NoLCAmcmVzcCk7CisrCX0gZWxzZSBpZiAoc3RyY21wKHJ0eXBlLCAi c3RhY2stbWV0cmljc0BocG5zc2gub3JnIikgPT0gMCkgeworKwkJLyogcmVzcCBpcyB0aGUgcmVz cG9uc2UgKHNzaGJ1ZiBzdHJ1Y3QpIGZyb20gdGhlIGZ1bmN0aW9uIHdoaWNoIGlzCisrCQkgKiBo YW5kbGVkIGJlbG93IGluIHRoZSB3YW50X3JlcGx5IHN0YW56YSAqLworKwkJc3VjY2VzcyA9IHNl cnZlcl9pbnB1dF9tZXRyaWNzX3JlcXVlc3Qoc3NoLCAmcmVzcCk7CisgCX0KKyAJLyogWFhYIHNz aHBrdF9nZXRfZW5kKCkgKi8KKyAJaWYgKHdhbnRfcmVwbHkpIHsKK2RpZmYgLU51ciBvcGVuc3No LTEwLjVwMS5vcmlnL3Nlc3Npb24uYyBvcGVuc3NoLTEwLjVwMS9zZXNzaW9uLmMKKy0tLSBvcGVu c3NoLTEwLjVwMS5vcmlnL3Nlc3Npb24uYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjQ3MTcxOTI2OCAr MDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3Nlc3Npb24uYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5 NDAzMzczOCArMDIwMAorQEAgLTkwLDYgKzkwLDcgQEAKKyAjaW5jbHVkZSAibW9uaXRvcl93cmFw LmgiCisgI2luY2x1ZGUgInNmdHAuaCIKKyAjaW5jbHVkZSAiYXRvbWljaW8uaCIKKysjaW5jbHVk ZSAiY2lwaGVyLXN3aXRjaC5oIgorIAorICNpZiBkZWZpbmVkKEtSQjUpICYmIGRlZmluZWQoVVNF X0FGUykKKyAjaW5jbHVkZSA8a2Fmcy5oPgorQEAgLTIxMiw2ICsyMTMsNyBAQAorIAlyZXN0b3Jl X3VpZCgpOworIAorIAkvKiBBbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIHRoZSBhdXRoZW50aWNhdGlv biBhZ2VudCBzb2NrZXQuICovCisrCS8qIHRoaXMgc2hvdWxkbid0IG1hdHRlciBpZiBpdHMgaHBu IG9yIG5vdCAtIGNqciAqLworIAluYyA9IGNoYW5uZWxfbmV3KHNzaCwgImF1dGgtbGlzdGVuZXIi LAorIAkgICAgU1NIX0NIQU5ORUxfQVVUSF9TT0NLRVQsIHNvY2ssIHNvY2ssIC0xLAorIAkgICAg Q0hBTl9YMTFfV0lORE9XX0RFRkFVTFQsIENIQU5fWDExX1BBQ0tFVF9ERUZBVUxULAorQEAgLTM3 NSw2ICszNzcsNyBAQAorIGRvX2V4ZWNfbm9fcHR5KHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAq cywgY29uc3QgY2hhciAqY29tbWFuZCkKKyB7CisgCXBpZF90IHBpZDsKKysJaW50IGZpcHMgPSAw OworICNpZmRlZiBVU0VfUElQRVMKKyAJaW50IHBpblsyXSwgcG91dFsyXSwgcGVyclsyXTsKKyAK K0BAIC01MzAsNiArNTMzLDE3IEBACisgCXNlc3Npb25fc2V0X2Zkcyhzc2gsIHMsIGlub3V0WzFd LCBpbm91dFsxXSwgZXJyWzFdLAorIAkgICAgcy0+aXNfc3Vic3lzdGVtLCAwKTsKKyAjZW5kaWYK KysJLyogc3dpdGNoIHRvIHRoZSBwYXJhbGxlbCBjaXBoZXJzIGlmIG5lY2Vzc2FyeQorKwkgKiBJ ZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxsZWwgY2lwaGVy cy4KKysJICovCisrCWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsKKysJaWYgKGZpcHMpCisrCQlkZWJ1 ZzJfZigiRklQUyBtb2RlIGlzIGVuYWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJlIGRpc2FibGVk Iik7CisrCWVsc2UKKysJCWRlYnVnMl9mKCJGSVBTIG1vZGUgbm90IGZvdW5kIG9yIGRpc2FibGVk LiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFibGVkIik7CisrCisrCWlmICgob3B0aW9ucy5kaXNh YmxlX211bHRpdGhyZWFkZWQgPT0gMCkgJiYgKGZpcHMgPT0gMCkpCisrCQljaXBoZXJfc3dpdGNo KHNzaCk7CisgCXJldHVybiAwOworIH0KKyAKK0BAIC01NDQsNiArNTU4LDcgQEAKKyB7CisgCWlu dCBmZG91dCwgcHR5ZmQsIHR0eWZkLCBwdHltYXN0ZXI7CisgCXBpZF90IHBpZDsKKysJaW50IGZp cHMgPSAwOworIAorIAlpZiAocyA9PSBOVUxMKQorIAkJZmF0YWwoImRvX2V4ZWNfcHR5OiBubyBz ZXNzaW9uIik7CitAQCAtNjQxLDYgKzY1NiwxNyBAQAorIAkvKiBFbnRlciBpbnRlcmFjdGl2ZSBz ZXNzaW9uLiAqLworIAlzLT5wdHltYXN0ZXIgPSBwdHltYXN0ZXI7CisgCXNlc3Npb25fc2V0X2Zk cyhzc2gsIHMsIHB0eWZkLCBmZG91dCwgLTEsIDEsIDEpOworKwkvKiBzd2l0Y2ggdG8gdGhlIHBh cmFsbGVsIGNpcGhlciBpZiBhcHByb3ByaWF0ZQorKwkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFu ZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxsZWwgY2lwaGVycy4KKysJICovCisrCWZpcHMgPSBm aXBzX2VuYWJsZWQoKTsKKysJaWYgKGZpcHMpCisrCQlkZWJ1ZzJfZigiRklQUyBtb2RlIGlzIGVu YWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJlIGRpc2FibGVkIik7CisrCWVsc2UKKysJCWRlYnVn Ml9mKCJGSVBTIG1vZGUgbm90IGZvdW5kIG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFy ZSBlbmFibGVkIik7CisrCisrCWlmICgob3B0aW9ucy5kaXNhYmxlX211bHRpdGhyZWFkZWQgPT0g MCkgJiYgKGZpcHMgPT0gMCkpCisrCQljaXBoZXJfc3dpdGNoKHNzaCk7CisgCXJldHVybiAwOwor IH0KKyAKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NmdHAuMSBvcGVuc3NoLTEwLjVw MS9zZnRwLjEKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NmdHAuMQkyMDI2LTA4LTExIDA0OjIy OjE3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NmdHAuMQkyMDI2LTA5LTIx IDA3OjA2OjU5Ljg5NDIxNjE4NyArMDIwMAorQEAgLTU1LDYgKzU1LDkgQEAKKyB0cmFuc3BvcnQu CisgSXQgbWF5IGFsc28gdXNlIG1hbnkgZmVhdHVyZXMgb2Ygc3NoLCBzdWNoIGFzIHB1YmxpYyBr ZXkgYXV0aGVudGljYXRpb24gYW5kCisgY29tcHJlc3Npb24uCisrLk5tCisraXMgYmluYXJ5IGNv bXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc2Z0cCBhbmQgdXNlcyB0aGUgc2FtZSBkaXJlY3RpdmUg YW5kIGNvbmZpZ3VyYXRpb24KKytvcHRpb25zIGV4Y2VwdCB3aGVyZSBub3RlZC4gCisgLlBwCisg VGhlCisgLkFyIGRlc3RpbmF0aW9uCitAQCAtMzE5LDYgKzMyMiw3IEBACisgLkl0IFR1bm5lbAor IC5JdCBUdW5uZWxEZXZpY2UKKyAuSXQgVXBkYXRlSG9zdEtleXMKKysuSXQgVXNlTVBUQ1AKKyAu SXQgVXNlcgorIC5JdCBVc2VyS25vd25Ib3N0c0ZpbGUKKyAuSXQgVmVyaWZ5SG9zdEtleUROUwor QEAgLTMzOCw3ICszNDIsOCBAQAorIFNwZWNpZnkgaG93IG1hbnkgcmVxdWVzdHMgbWF5IGJlIG91 dHN0YW5kaW5nIGF0IGFueSBvbmUgdGltZS4KKyBJbmNyZWFzaW5nIHRoaXMgbWF5IHNsaWdodGx5 IGltcHJvdmUgZmlsZSB0cmFuc2ZlciBzcGVlZAorIGJ1dCB3aWxsIGluY3JlYXNlIG1lbW9yeSB1 c2FnZS4KKy1UaGUgZGVmYXVsdCBpcyA2NCBvdXRzdGFuZGluZyByZXF1ZXN0cy4KKytUaGUgZGVm YXVsdCBpcyAxMDI0IG91dHN0YW5kaW5nIHJlcXVlc3RzIHByb3ZpZGluZyBmb3IgMzJNQgorK29m IG91dHN0YW5kaW5nIGRhdGEgd2l0aCBhIDMyS0IgYnVmZmVyLgorIC5JdCBGbCByCisgUmVjdXJz aXZlbHkgY29weSBlbnRpcmUgZGlyZWN0b3JpZXMgd2hlbiB1cGxvYWRpbmcgYW5kIGRvd25sb2Fk aW5nLgorIE5vdGUgdGhhdAorQEAgLTM2NywxMCArMzcyLDEzIEBACisgLkl0IENtIG5yZXF1ZXN0 cyBOcyA9IE5zIEFyIHZhbHVlCisgQ29udHJvbHMgaG93IG1hbnkgY29uY3VycmVudCBTRlRQIHJl YWQgb3Igd3JpdGUgcmVxdWVzdHMgbWF5IGJlIGluIHByb2dyZXNzCisgYXQgYW55IHBvaW50IGlu IHRpbWUgZHVyaW5nIGEgZG93bmxvYWQgb3IgdXBsb2FkLgorLUJ5IGRlZmF1bHQgNjQgcmVxdWVz dHMgbWF5IGJlIGFjdGl2ZSBjb25jdXJyZW50bHkuCisrVGhpcyB2YWx1ZSBtdXN0IGJlIGJldHdl ZW4gMSBhbmQgODE5Mi4KKytCeSBkZWZhdWx0IDEwMjQgcmVxdWVzdHMgbWF5IGJlIGFjdGl2ZSBj b25jdXJyZW50bHkuCisgLkl0IENtIGJ1ZmZlciBOcyA9IE5zIEFyIHZhbHVlCisgQ29udHJvbHMg dGhlIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIGEgc2luZ2xlIFNGVFAgcmVhZC93cml0ZSBvcGVy YXRpb24gdXNlZAorIGR1cmluZyBkb3dubG9hZCBvciB1cGxvYWQuCisrVGhpcyB2YWx1ZSBtdXN0 IGJlIGJldHdlZW4gMUIgYW5kIDI1NUtCLiBZb3UgbWF5IHVzZQorK3RoZSBLIHVuaXQgZm9yIHRo ZSBzaXplLiBFLmcuIDMyNzY4IG9yIDMySy4KKyBCeSBkZWZhdWx0IGEgMzJLQiBidWZmZXIgaXMg dXNlZC4KKyAuRWwKKyAuRWwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NmdHAuYyBv cGVuc3NoLTEwLjVwMS9zZnRwLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NmdHAuYwkyMDI2 LTA5LTIxIDA3OjA2OjA1LjI2MzUzOTM5MSArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NmdHAu YwkyMDI2LTA5LTIxIDEwOjU3OjE3LjU1NDcyMTMxMyArMDIwMAorQEAgLTI1OTUsMjAgKzI1OTUs MjUgQEAKKyAJCQkvKiBQbGVhc2Uga2VlcCBpbiBzeW5jIHdpdGggc3NoLmMgLVggKi8KKyAJCQlp ZiAoc3RybmNtcChvcHRhcmcsICJidWZmZXI9IiwgNykgPT0gMCkgeworIAkJCQlyID0gc2Nhbl9z Y2FsZWQob3B0YXJnICsgNywgJmxsdik7CistCQkJCWlmIChyID09IDAgJiYgKGxsdiA8PSAwIHx8 IGxsdiA+IDI1NiAqIDEwMjQpKSB7CisrCQkJCS8qIGRvbid0IGFzayBmb3IgYSBidWZmZXIgbGFy Z2VyIHRoYW4gdGhlIG1heGltdW0KKysJCQkJICogc2l6ZSB0aGF0IFNGVFAgY2FuIGhhbmRsZSAq LworKwkJCQlpZiAociA9PSAwICYmIChsbHYgPD0gMCB8fCBsbHYgPiAoU0ZUUF9NQVhfTVNHX0xF TkdUSCAtIDEwMjQpKSkgeworIAkJCQkJciA9IC0xOworIAkJCQkJZXJybm8gPSBFSU5WQUw7Cisg CQkJCX0KKyAJCQkJaWYgKHIgPT0gLTEpIHsKKy0JCQkJCWZhdGFsKCJJbnZhbGlkIGJ1ZmZlciBz aXplIFwiJXNcIjogJXMiLAorKwkJCQkJZmF0YWwoIkludmFsaWQgYnVmZmVyIHNpemUuIE11c3Qg YmUgYmV0d2VlbiAxQiBhbmQgMjU1S0IuIFwiJXNcIjogJXMiLAorIAkJCQkJICAgICBvcHRhcmcg KyA3LCBzdHJlcnJvcihlcnJubykpOworIAkJCQl9CisgCQkJCWNvcHlfYnVmZmVyX2xlbiA9IChz aXplX3QpbGx2OworIAkJCX0gZWxzZSBpZiAoc3RybmNtcChvcHRhcmcsICJucmVxdWVzdHM9Iiwg MTApID09IDApIHsKKy0JCQkJbGx2ID0gc3RydG9udW0ob3B0YXJnICsgMTAsIDEsIDI1NiAqIDEw MjQsCisrCQkJCS8qIG1vcmUgdGhhbiAxMGsgdG8gMTVrIHJlcXVlc3RzIHN0YXJ0cyBzdGFsbGlu ZyB0aGUgY29ubmVjdGlvbgorKwkJCQkgKiA4MTkyICogZGVmYXVsdCBidWZmZXIgc2l6ZSBpcyAy NTZNQiBvZiBvdXRzdGFuZGluZyBkYXRhLgorKwkJCQkgKiBpZiB1c2VycyBuZWVkIG1vcmUgdGhl biB0aGV5IG5lZWQgdG8gdXAgdGhlIGJ1ZmZlciBzaXplICovCisrCQkJCWxsdiA9IHN0cnRvbnVt KG9wdGFyZyArIDEwLCAxLCA4ICogMTAyNCwKKyAJCQkJICAgICZlcnJzdHIpOworIAkJCQlpZiAo ZXJyc3RyICE9IE5VTEwpIHsKKy0JCQkJCWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiByZXF1ZXN0 cyAiCisrCQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMuIE11c3QgYmUgYmV0 d2VlbiAxIGFuZCA4MTkyLiAiCisgCQkJCQkgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyAxMCwg ZXJyc3RyKTsKKyAJCQkJfQorIAkJCQludW1fcmVxdWVzdHMgPSAoc2l6ZV90KWxsdjsKK2RpZmYg LU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NmdHAtY2xpZW50LmMgb3BlbnNzaC0xMC41cDEvc2Z0 cC1jbGllbnQuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc2Z0cC1jbGllbnQuYwkyMDI2LTA5 LTIxIDA3OjA2OjA1LjI2MzMzODc4MCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NmdHAtY2xp ZW50LmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTQ4NDMxMjUgKzAyMDAKK0BAIC02MCw3ICs2MCw4 IEBACisgI2RlZmluZSBERUZBVUxUX0NPUFlfQlVGTEVOCTMyNzY4CisgCisgLyogRGVmYXVsdCBu dW1iZXIgb2YgY29uY3VycmVudCB4ZmVyIHJlcXVlc3RzIChmaXggc2Z0cC4xIHNjcC4xIGlmIGNo YW5nZWQpICovCistI2RlZmluZSBERUZBVUxUX05VTV9SRVFVRVNUUwk2NAorKy8qIDEwMjQgeGZl ciByZXF1ZXN0cyBnaXZlcyB1cyAzMk1CIG9mIHJlY2VpdmUgYnVmZmVyIHNwYWNlICovCisrI2Rl ZmluZSBERUZBVUxUX05VTV9SRVFVRVNUUwkxMDI0CisgCisgLyogTWluaW11bSBhbW91bnQgb2Yg ZGF0YSB0byByZWFkIGF0IGEgdGltZSAqLworICNkZWZpbmUgTUlOX1JFQURfU0laRQk1MTIKK2Rp ZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaC4xIG9wZW5zc2gtMTAuNXAxL3NzaC4xCist LS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2guMQkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2NDI2ODA5 OSArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaC4xCTIwMjYtMDktMjEgMDc6MDY6NTkuODk1 MjQ1Mjg3ICswMjAwCitAQCAtNzcsNiArNzcsMTQgQEAKKyBYMTEgY29ubmVjdGlvbnMsIGFyYml0 cmFyeSBUQ1AgcG9ydHMgYW5kCisgLlV4IE5zIC1kb21haW4KKyBzb2NrZXRzIGNhbiBhbHNvIGJl IGZvcndhcmRlZCBvdmVyIHRoZSBzZWN1cmUgY2hhbm5lbC4KKysuTm0KKytpcyBiaW5hcnkgY29t cGF0aWJsZSB3aXRoIHRoZSBtb3JlIHdlbGwga25vd24gT3BlblNTSCBhbmQgdXNlcyB0aGUgc2Ft ZSBjb25maWd1cmF0aW9uCisrZGlyZWN0aXZlcywgbWV0aG9kcywgYW5kIGtleXdvcmRzIGV4Y2Vw dCB3aGVyZSBub3RlZCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRlZmF1bHQgcG9ydC4KKytI UE4tU1NIIHNlcnZlcnMsIGJ5IGRlZmF1bHQsIHVzZSBwb3J0IDIyMjIgZm9yIGNvbm5lY3Rpb24s IGFuZCBhcyBzdWNoLAorKy5ObQorK2NsaWVudHMKKythdHRlbXB0IHRvIGNvbm5lY3Qgb24gdGhh dCBwb3J0LiBJZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IG9uIHBvcnQgMjIyMiBmYWlscyBpdCB3 aWxsIGZhbGxiYWNrIHRvCisrcG9ydCAyMi4gUGxlYXNlIHNlZSB0aGUgLXAgc3dpdGNoIGZvciBt b3JlIGluZm9ybWF0aW9uLgorIC5QcAorIC5ObQorIGNvbm5lY3RzIGFuZCBsb2dzIGludG8gdGhl IHNwZWNpZmllZAorQEAgLTUyNCw2ICs1MzIsMTMgQEAKKyBQb3J0IHRvIGNvbm5lY3QgdG8gb24g dGhlIHJlbW90ZSBob3N0LgorIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBvbiBhCisgcGVyLWhvc3Qg YmFzaXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKytIUE4tU1NIIHVzZXMgYSBkZWZhdWx0 IHBvcnQgb2YgMjIyMi4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5CisrZmFsbGJhY2sgdG8gdXNlIHRo ZSBTU0ggc3RhbmRhcmQgcG9ydCAyMiBpZiBpdCBjYW5ub3QgY29ubmVjdAorK29uIHBvcnQgMjIy Mi4gVGhpcyBmYWxsYmFjayBiZWhhdmlvdXIgY2FuIGJlIG1vZGlmaWVkIHdpdGggdGhlCisrRmFs bGJhY2tQb3J0IG9wdGlvbi4gTm90ZTogaWYgb3V0Ym91bmQgcG9ydCAyMjIyIGlzCisrYmxvY2tl ZCBpdCBtYXkgYXBwZWFyIHRoYXQgdGhlIGhwbnNzaCBjbGllbnQgaXMgbm9uLXJlc3BvbnNpdmUu IEluIHRoYXQgZXZlbnQsCisrZWl0aGVyIHNwZWNpZnkgdGhlIGNvcnJlY3QgcG9ydCBvciB1c2Ug dGhlIENvbm5lY3RUaW1lb3V0IG9wdGlvbgorK3RvIHRyaWdnZXIgdGhlIHBvcnQgZmFsbGJhY2sg bW9yZSBxdWlja2x5LgorIC5QcAorIC5JdCBGbCBRIEFyIHF1ZXJ5X29wdGlvbgorIFF1ZXJpZXMg Zm9yIHRoZSBhbGdvcml0aG1zIHN1cHBvcnRlZCBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmZWF0 dXJlczoKK0BAIC0xNzI4LDMgKzE3NDMsNyBAQAorIGNyZWF0ZWQgT3BlblNTSC4KKyBNYXJrdXMg RnJpZWRsIGNvbnRyaWJ1dGVkIHRoZSBzdXBwb3J0IGZvciBTU0gKKyBwcm90b2NvbCB2ZXJzaW9u cyAxLjUgYW5kIDIuMC4KKytDaHJpcyBSYXBpZXIsIE1pY2hhZWwgU3RldmVucywgQmVuIEJlbm5l dCwgYW5kIE1pa2UgVGFzb3RhIGRldmVsb3BlZAorK3RoZSBIUE4gZXh0ZW5zaW9ucyBhdCB0aGUg UGl0dHNidXJnaCBTdXBlcmNvbXV0aW5nIENlbnRlciB3aXRoIGdyYW50cworK2Zyb20gQ2lzY28s IHRoZSBOYXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lLCBhbmQgdGhlIE5hdGlvbmFsIFNjaWVu Y2UKKytGb3VuZGF0aW9uLgorZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoX2FwaS5j IG9wZW5zc2gtMTAuNXAxL3NzaF9hcGkuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoX2Fw aS5jCTIwMjYtMDktMjEgMDc6MDY6MDUuNDU0ODI4MTgyICswMjAwCisrKysgb3BlbnNzaC0xMC41 cDEvc3NoX2FwaS5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODk1MzkxOTUwICswMjAwCitAQCAtNDI3 LDcgKzQyNyw3IEBACisgCWNoYXIgKmNwOworIAlpbnQgcjsKKyAKKy0JaWYgKChyID0gc3NoYnVm X3B1dGYoYmFubmVyLCAiU1NILTIuMC0lLjEwMHNcclxuIiwgU1NIX1ZFUlNJT04pKSAhPSAwKQor KwlpZiAoKHIgPSBzc2hidWZfcHV0ZihiYW5uZXIsICJTU0gtMi4wLSUuMTAwc1xyXG4iLCBTU0hf UkVMRUFTRSkpICE9IDApCisgCQlyZXR1cm4gcjsKKyAJaWYgKChyID0gc3NoYnVmX3B1dGIoc3No X3BhY2tldF9nZXRfb3V0cHV0KHNzaCksIGJhbm5lcikpICE9IDApCisgCQlyZXR1cm4gcjsKK2Rp ZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGJ1Zi5jIG9wZW5zc2gtMTAuNXAxL3NzaGJ1 Zi5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hidWYuYwkyMDI2LTA4LTExIDA0OjIyOjE3 LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaGJ1Zi5jCTIwMjYtMDktMjEg MDc6MDY6NTkuODk1NTE3MTU1ICswMjAwCitAQCAtMjgsNiArMjgsOCBAQAorICNpbmNsdWRlICJz c2hidWYuaCIKKyAjaW5jbHVkZSAibWlzYy5oIgorIAorKyNkZWZpbmUgQlVGX1dBVEVSU0hFRCAy NTYqMTAyNAorKworICNpZmRlZiBTU0hCVUZfREVCVUcKKyAjIGRlZmluZSBTU0hCVUZfVEVMTCh3 aGF0KSBkbyB7IFwKKyAJCXByaW50ZigiJXM6JWQgJXM6ICVzIHNpemUgJXp1IGFsbG9jICV6dSBv ZmYgJXp1IG1heCAlenVcbiIsIFwKK0BAIC00OSw4ICs1MSwyOSBAQAorIAlpbnQgcmVhZG9ubHk7 CQkvKiBSZWZlcnMgdG8gZXh0ZXJuYWwsIGNvbnN0IGRhdGEgKi8KKyAJdV9pbnQgcmVmY291bnQ7 CQkvKiBUcmFja3Mgc2VsZiBhbmQgbnVtYmVyIG9mIGNoaWxkIGJ1ZmZlcnMgKi8KKyAJc3RydWN0 IHNzaGJ1ZiAqcGFyZW50OwkvKiBJZiBjaGlsZCwgcG9pbnRlciB0byBwYXJlbnQgKi8KKysJY2hh ciBsYWJlbFtNQVhfTEFCRUxfTEVOXTsgICAvKiBTdHJpbmcgZm9yIGJ1ZmZlciBsYWJlbCAtIGRl YnVnZ2luZyB1c2UgKi8KKysJaW50IHR5cGU7ICAgICAgICAgICAgICAgLyogdHlwZSBvZiBidWZm ZXIgZW51bSAoc3NoYnVmX3R5cGVzKSovCisgfTsKKyAKKysvKiB1cGRhdGUgdGhlIGxhYmVsIHN0 cmluZyBmb3IgYSBnaXZlbiBzc2hidWYuIFVzZWZ1bAorKyAqIGZvciBkZWJ1Z2dpbmcgKi8KKyt2 b2lkCisrc3NoYnVmX3JlbGFiZWwoc3RydWN0IHNzaGJ1ZiAqYnVmLCBjb25zdCBjaGFyICpsYWJl bCkKKyt7CisrCWlmIChsYWJlbCAhPSBOVUxMKQorKwkJc3RybmNweShidWYtPmxhYmVsLCBsYWJl bCwgTUFYX0xBQkVMX0xFTi0xKTsKKyt9CisrCisrLyogc2V0IHRoZSB0eXBlIChmcm9tIGVudW0g c3NoYnVmX3R5cGUpIG9mIHRoZSBnaXZlbiBzc2hidWYuCisrICogVGhlIHB1cnBvc2UgaXMgdG8g YWxsb3cgZGlmZmVyZW50IGNsYXNzZXMgb2YgYnVmZmVycyB0bworKyAqIGZvbGxvdyBkaWZmZXJl bnQgY29kZSBwYXRocyBpZiBuZWNlc3NhcnkgKi8KKyt2b2lkCisrc3NoYnVmX3R5cGUoc3RydWN0 IHNzaGJ1ZiAqYnVmLCBpbnQgdHlwZSkKKyt7CisrCWlmICh0eXBlIDwgQlVGX01BWF9UWVBFKQor KwkJYnVmLT50eXBlID0gdHlwZTsKKyt9CisrCisgc3RhdGljIGlubGluZSBpbnQKKyBzc2hidWZf Y2hlY2tfc2FuaXR5KGNvbnN0IHN0cnVjdCBzc2hidWYgKmJ1ZikKKyB7CitAQCAtOTAsNyArMTEz LDcgQEAKKyB9CisgCisgc3RydWN0IHNzaGJ1ZiAqCistc3NoYnVmX25ldyh2b2lkKQorK3NzaGJ1 Zl9uZXdfbGFiZWwgKGNvbnN0IGNoYXIgKmxhYmVsKQorIHsKKyAJc3RydWN0IHNzaGJ1ZiAqcmV0 OworIAorQEAgLTEwMSw2ICsxMjQsOCBAQAorIAlyZXQtPnJlYWRvbmx5ID0gMDsKKyAJcmV0LT5y ZWZjb3VudCA9IDE7CisgCXJldC0+cGFyZW50ID0gTlVMTDsKKysJaWYgKGxhYmVsICE9IE5VTEwp CisrCQlzdHJuY3B5KHJldC0+bGFiZWwsIGxhYmVsLCBNQVhfTEFCRUxfTEVOLTEpOworIAlpZiAo KHJldC0+Y2QgPSByZXQtPmQgPSBjYWxsb2MoMSwgcmV0LT5hbGxvYykpID09IE5VTEwpIHsKKyAJ CWZyZWUocmV0KTsKKyAJCXJldHVybiBOVUxMOworQEAgLTI5MCw3ICszMTUsMjEgQEAKKyB7Cisg CWlmIChzc2hidWZfY2hlY2tfc2FuaXR5KGJ1ZikgIT0gMCB8fCBidWYtPnJlYWRvbmx5IHx8IGJ1 Zi0+cmVmY291bnQgPiAxKQorIAkJcmV0dXJuIDA7CistCXJldHVybiBidWYtPm1heF9zaXplIC0g KGJ1Zi0+c2l6ZSAtIGJ1Zi0+b2ZmKTsKKysJLyogUmVzZXJ2ZSB+NC43NiUgKDEvMjEpIGhlYWRy b29tIG9uIGNoYW5uZWwgaW5wdXQgYnVmZmVycyB0byBwcmV2ZW50CisrCSAqIGEgcGF0aG9sb2dp Y2FsIHN0YXRlIGR1cmluZyBidWxrIGRhdGEgdHJhbnNmZXJzLiBUaGUgaGVhZHJvb20gc2NhbGVz CisrCSAqIHdpdGggYnVmZmVyIHNpemUgYW5kIGdpdmVzIHRoZSBjaGFubmVsIHRpbWUgdG8gZHJh aW4gYmVmb3JlIGFjY2VwdGluZworKwkgKiBtb3JlIGRhdGEsIHNtb290aGluZyBmbG93IGNvbnRy b2wgYW5kIHJlZHVjaW5nIGJ1ZmZlciByZWFsbG9jYXRpb24uCisrCSAqIFdoZW4gdGhlIGJ1ZmZl ciBpcyBmdWxsZXIgdGhhbiB0aGUgaGVhZHJvb20gYWxsb3dzIHdlIG11c3QgcmV0dXJuIDAsCisr CSAqIG5vdCB1bmRlcmZsb3c6IHNpemVfdCBpcyB1bnNpZ25lZCBzbyBhIG5haXZlIHN1YnRyYWN0 aW9uIHdyYXBzIHRvCisrCSAqIFNJWkVfTUFYLCBjYXVzaW5nIHRoZSBjYWxsZXIgdG8gcmVhZCBp bnRvIGEgbmVhcmx5LWZ1bGwgYnVmZmVyIGFuZAorKwkgKiB0aHJhc2ggd2luZG93IHVwZGF0ZXMu IE9ubHkgYXBwbGllZCB0byBjaGFubmVsIGlucHV0IGJ1ZmZlcnMgYXMKKysJICogb3RoZXIgYnVm ZmVyIHR5cGVzIGZhaWwgdGhlIHJlZ3Jlc3Npb24gdW5pdCB0ZXN0cyB3aXRoIGhlYWRyb29tLiAq LworKwlpZiAoYnVmLT50eXBlID09IEJVRl9DSEFOTkVMX0lOUFVUKSB7CisrCQlzaXplX3QgaGVh ZHJvb20gPSBidWYtPm1heF9zaXplIC0gYnVmLT5tYXhfc2l6ZSAvIDIxOworKwkJc2l6ZV90IHVz ZWQgPSBidWYtPnNpemUgLSBidWYtPm9mZjsKKysJCXJldHVybiAodXNlZCA+PSBoZWFkcm9vbSkg PyAwIDogaGVhZHJvb20gLSB1c2VkOworKwl9IGVsc2UKKysJCXJldHVybiBidWYtPm1heF9zaXpl IC0gKGJ1Zi0+c2l6ZSAtIGJ1Zi0+b2ZmKTsKKyB9CisgCisgY29uc3QgdV9jaGFyICoKK0BAIC0z NTAsOSArMzg5LDM2IEBACisgCSAqLworIAluZWVkID0gbGVuICsgYnVmLT5zaXplIC0gYnVmLT5h bGxvYzsKKyAJcmxlbiA9IFJPVU5EVVAoYnVmLT5hbGxvYyArIG5lZWQsIFNTSEJVRl9TSVpFX0lO Qyk7CisrCS8qIFdpdGggdGhlIGNoYW5nZXMgaW4gOC45IHRoZSBvdXRwdXQgYnVmZmVyIGVuZCB1 cCBncm93aW5nIHByZXR0eQorKwkgKiBzbG93bHkuIEl0J3Mga25vd3MgdGhhdCBpdCBuZWVkcyB0 byBncm93IGJ1dCBpdCBvbmx5IGRvZXMgc28gMzJLCisrCSAqIGF0IGEgdGltZS4gVGhpcyBtZWFu cyBhIGxvdCBvZiBjYWxscyB0byByZWFsbG9jIGFuZCBtZW1jcHkgd2hpY2gKKysJICoga2lsbHMg cGVyZm9ybWFuY2UgdW50aWwgdGhlIGJ1ZmZlciByZWFjaGVzIHNvbWUgbWF4aW11bSBzaXplLgor KwkgKiBTbyB3ZSBleHBsaWNpdGx5IHRlc3QgZm9yIGEgYnVmZmVyIHRoYXQncyB0cnlpbmcgdG8g Z3JvdyBhbmQKKysJICogaWYgaXQgaXMgdGhlbiB3ZSBwdXNoIHRoZSBncm93dGggYnkgNE1CIGF0 IGEgdGltZS4gVGhpcyBjYW4gcmVzdWx0IGluCisrCSAqIHRoZSBidWZmZXIgYmVpbmcgb3ZlciBh bGxvY2F0ZWQgKGluIHRlcm1zIG9mIGFjdHVhbCBuZWVkcykgYnV0IHRoZQorKwkgKiBwcm9jZXNz IGlzIGZhc3QuIFRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIG92ZXJoZWFkCisrCSAqIGFuZCBp bXByb3ZlcyBwZXJmb3JtYW5jZS4gSW4gdGhpcyBjYXNlIHdlIGxvb2sgZm9yIGEgYnVmZmVyIHRo YXQgaXMgdHJ5aW5nCisrCSAqIHRvIGdyb3cgbGFyZ2VyIHRoYW4gQlVGX1dBVEVSU0hFRCAoMjU2 KjEwMjQgdGFrZW4gZnJvbSBQQUNLRVRfTUFYX1NJWkUpCisrCSAqIGFuZCBleHBsY2l0bHkgY2hl Y2sgdGhhdCB0aGUgYnVmZmVyIGlzIGJlaW5nIHVzZWQgZm9yIGluYm91bmQgb3V0Ym91bmQKKysJ ICogY2hhbm5lbCBidWZmZXJpbmcuCisrCSAqIFVwZGF0ZWQgZm9yIDE4LjQuMSAtY2pyIDA0LzIw LzI0CisrCSAqLworKwlpZiAocmxlbiA+IEJVRl9XQVRFUlNIRUQgJiYgKGJ1Zi0+dHlwZSA9PSBC VUZfQ0hBTk5FTF9PVVRQVVQgfHwgYnVmLT50eXBlID09IEJVRl9DSEFOTkVMX0lOUFVUKSkgewor KwkJLyogZGVidWdfZiAoIlByaW9yOiBsYWJlbDogJXMsICVwLCBybGVuIGlzICV6dSBuZWVkIGlz ICV6dSBtYXhfc2l6ZSBpcyAlenUiLAorKwkJICAgYnVmLT5sYWJlbCwgYnVmLCBybGVuLCBuZWVk LCBidWYtPm1heF9zaXplKTsgKi8KKysJCS8qIGVhc2llc3QgdGhpbmcgdG8gZG8gaXMgZ3JvdyB0 aGUgbnVmZmVyIGJ5IDRNQiBlYWNoIHRpbWUuIEl0IG1pZ2h0IGVuZAorKwkJICogdXAgYmVpbmcg c29tZXdoYXQgb3ZlcmFsbG9jYXRlZCBidXQgd29ya3MgcXVpY2tseSAqLworKwkJbmVlZCA9ICg0 KjEwMjQqMTAyNCk7CisrCQlybGVuID0gUk9VTkRVUChidWYtPmFsbG9jICsgbmVlZCwgU1NIQlVG X1NJWkVfSU5DKTsKKysJCS8qIGRlYnVnX2YgKCJQb3N0OiBsYWJlbDogJXMsICVwLCBybGVuIGlz ICV6dSBuZWVkIGlzICV6dSBtYXhfc2l6ZSBpcyAlenUiLCAqLworKwkJLyogCSBidWYtPmxhYmVs LCBidWYsIHJsZW4sIG5lZWQsIGJ1Zi0+bWF4X3NpemUpOyAqLworKwl9CisgCVNTSEJVRl9EQkco KCJuZWVkICV6dSBpbml0aWFsIHJsZW4gJXp1IiwgbmVlZCwgcmxlbikpOworKworKwkvKiBybGVu IG1pZ2h0IGJlIGFib3ZlIHRoZSBtYXggYWxsb2NhdGlvbiAqLworIAlpZiAocmxlbiA+IGJ1Zi0+ bWF4X3NpemUpCistCQlybGVuID0gYnVmLT5hbGxvYyArIG5lZWQ7CisrCQlybGVuID0gYnVmLT5t YXhfc2l6ZTsKKysKKyAJU1NIQlVGX0RCRygoImFkanVzdGVkIHJsZW4gJXp1IiwgcmxlbikpOwor IAlpZiAoKGRwID0gcmVjYWxsb2NhcnJheShidWYtPmQsIGJ1Zi0+YWxsb2MsIHJsZW4sIDEpKSA9 PSBOVUxMKSB7CisgCQlTU0hCVUZfREJHKCgicmVhbGxvYyBmYWlsIikpOworZGlmZiAtTnVyIG9w ZW5zc2gtMTAuNXAxLm9yaWcvc3NoYnVmLmggb3BlbnNzaC0xMC41cDEvc3NoYnVmLmgKKy0tLSBv cGVuc3NoLTEwLjVwMS5vcmlnL3NzaGJ1Zi5oCTIwMjYtMDgtMTEgMDQ6MjI6MTcuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzaC0xMC41cDEvc3NoYnVmLmgJMjAyNi0wOS0yMSAxMTozMToyOC43 ODY1MTY1NzcgKzAyMDAKK0BAIC0zNiwxOCArMzYsNDkgQEAKKyAjZGVmaW5lIEVWUF9QS0VZCXZv aWQKKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgCistI2RlZmluZSBTU0hCVUZfU0laRV9N QVgJCTB4ODAwMDAwMAkvKiBIYXJkIG1heGltdW0gc2l6ZSAqLworKyNkZWZpbmUgU1NIQlVGX1NJ WkVfTUFYCQkweDgwMDAwMDAJLyogSGFyZCBtYXhpbXVtIHNpemUgMTI4TUIgKi8KKyAjZGVmaW5l IFNTSEJVRl9SRUZTX01BWAkJMHgxMDAwMDAJLyogTWF4IGNoaWxkIGJ1ZmZlcnMgKi8KKyAjZGVm aW5lIFNTSEJVRl9NQVhfQklHTlVNCSgxNjM4NCAvIDgpCS8qIE1heCBiaWdudW0gKmJ5dGVzKiAq LworICNkZWZpbmUgU1NIQlVGX01BWF9FQ1BPSU5UCSgoNTI4ICogMiAvIDgpICsgMSkgLyogTWF4 IEVDIHBvaW50ICpieXRlcyogKi8KKysjZGVmaW5lIE1BWF9MQUJFTF9MRU4JCTY0IC8qbWF4aW11 bSBzaXplIG9mIHNzaGJ1ZiBsYWJlbCAqLworKyNkZWZpbmUgc3NoYnVmX25ldygpIHNzaGJ1Zl9u ZXdfbGFiZWwoX19mdW5jX18pCisgCisgc3RydWN0IHNzaGJ1ZjsKKyAKKytlbnVtIGJ1ZmZlcl90 eXBlcyB7CisrCUJVRl9DSEFOTkVMX09VVFBVVCwKKysJQlVGX0NIQU5ORUxfSU5QVVQsCisrCUJV Rl9DSEFOTkVMX0VYVEVOREVELAorKwlCVUZfUEFDS0VUX0lOUFVULAorKwlCVUZfUEFDS0VUX0lO Q09NSU5HLAorKwlCVUZfUEFDS0VUX09VVFBVVCwKKysJQlVGX1BBQ0tFVF9PVVRHT0lORywKKysJ QlVGX01BWF9UWVBFCisrfTsKKysKKyAvKgorICAqIENyZWF0ZSBhIG5ldyBzc2hidWYgYnVmZmVy LgorICAqIFJldHVybnMgcG9pbnRlciB0byBidWZmZXIgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBh bGxvY2F0aW9uIGZhaWx1cmUuCisgICovCistc3RydWN0IHNzaGJ1ZiAqc3NoYnVmX25ldyh2b2lk KTsKKysvKiBzdHJ1Y3Qgc3NoYnVmICpzc2hidWZfbmV3KHZvaWQpOyovCisrCisrLyoKKysgKiBD cmVhdGUgYSBuZXcgbGFiZWxlZCBzc2hidWYgYnVmZmVyLgorKyAqIFJldHVybnMgcG9pbnRlciB0 byBidWZmZXIgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCisrICov Cisrc3RydWN0IHNzaGJ1ZiAqc3NoYnVmX25ld19sYWJlbChjb25zdCBjaGFyICopOworKworKy8q CisrICogcmVsYWJlbCB0aGUgc3NoYnVmIHN0cnVjdAorKyAqLworK3ZvaWQgc3NoYnVmX3JlbGFi ZWwoc3RydWN0IHNzaGJ1ZiAqLCBjb25zdCBjaGFyICopOworKworKy8qCisrICogYXNzaWduIGEg dHlwZSAoZnJvbSB0aGUgYnVmZmVyX3R5cGVzIGVudW0pIHRvCisrICogdGhlIGJ1ZmZlci4gVXNl ZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwdXJwb3NlIG9mCisrICogdGhlIGJ1ZmZlci4KKysg Ki8KKyt2b2lkIHNzaGJ1Zl90eXBlKHN0cnVjdCBzc2hidWYgKiwgaW50KTsKKyAKKyAvKgorICAq IENyZWF0ZSBhIG5ldywgcmVhZC1vbmx5IHNzaGJ1ZiBidWZmZXIgZnJvbSBleGlzdGluZyBkYXRh LgorQEAgLTg0LDEyICsxMTUsMTMgQEAKKyB2b2lkCXNzaGJ1Zl9yZXNldChzdHJ1Y3Qgc3NoYnVm ICpidWYpOworIAorIC8qCistICogUmV0dXJuIHRoZSBtYXhpbXVtIHNpemUgb2YgYnVmCisrICog UmV0dXJuIHRoZSBtYXhpbXVtIHVzYWJsZSBzaXplIG9mIGJ1ZgorICAqLworIHNpemVfdAlzc2hi dWZfbWF4X3NpemUoY29uc3Qgc3RydWN0IHNzaGJ1ZiAqYnVmKTsKKyAKKyAvKgorLSAqIFNldCB0 aGUgbWF4aW11bSBzaXplIG9mIGJ1ZgorKyAqIFNldCB0aGUgbWF4aW11bSB1c2FibGUgc2l6ZSBv ZiBidWYuIE5vdGUgdGhhdCB0aGUgYnVmZmVyIG1heSBjb25zdW1lIHVwCisrICogdG8gMnggdGhp cyBtZW1vcnkgcGx1cyBib29ra2VlcGluZyBvdmVyaGVhZC4KKyAgKiBSZXR1cm5zIDAgb24gc3Vj Y2Vzcywgb3IgYSBuZWdhdGl2ZSBTU0hfRVJSXyogZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICAq LworIGludAlzc2hidWZfc2V0X21heF9zaXplKHN0cnVjdCBzc2hidWYgKmJ1Ziwgc2l6ZV90IG1h eF9zaXplKTsKK0BAIC0zODMsNiArNDE1LDkgQEAKKyAJCSgodV9jaGFyICopKHApKVsxXSA9IF9f diAmIDB4ZmY7IFwKKyAJfSB3aGlsZSAoMCkKKyAKKysKKyt2b2lkIHNzaGJ1Zl9zZXRfd2luZG93 X21heChzdHJ1Y3Qgc3NoYnVmICpidWYgLCBzaXplX3QgbGVuKTsKKysKKyAvKiBJbnRlcm5hbCBk ZWZpbml0aW9ucyBmb2xsb3cuIEV4cG9zZWQgZm9yIHJlZ3Jlc3MgdGVzdHMgKi8KKyAjaWZkZWYg U1NIQlVGX0lOVEVSTkFMCisgCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2guYyBv cGVuc3NoLTEwLjVwMS9zc2guYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoLmMJMjAyNi0w OS0yMSAwNzowNjowNS41NjQ2ODg2NDkgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2guYwky MDI2LTA5LTIxIDA5OjUyOjE1LjI1NzE1NDQ4OCArMDIwMAorQEAgLTk4LDYgKzk4LDcgQEAKKyAj aW5jbHVkZSAic3NoZXJyLmgiCisgI2luY2x1ZGUgInV0ZjguaCIKKyAjaW5jbHVkZSAiaG9zdGZp bGUuaCIKKysjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgorIAorICNpZmRlZiBFTkFCTEVfUEtD UzExCisgI2luY2x1ZGUgInNzaC1wa2NzMTEuaCIKK0BAIC0xMDgwLDYgKzEwODEsMTAgQEAKKyAJ CQlicmVhazsKKyAJCWNhc2UgJ1QnOgorIAkJCW9wdGlvbnMucmVxdWVzdF90dHkgPSBSRVFVRVNU X1RUWV9OTzsKKysJCQkvKiBlbnN1cmUgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHRyeSB0byBiYWNr ZG9vciBhICovCisrCQkJLyogbnVsbCBjaXBoZXIgc3dpdGNoIG9uIGFuIGludGVyYWN0aXZlIHNl c3Npb24gKi8KKysJCQkvKiBzbyBleHBsaWNpdGx5IGRpc2FibGUgaXQgbm8gbWF0dGVyIHdoYXQg Ki8KKysJCQlvcHRpb25zLm5vbmVfc3dpdGNoPTA7CisgCQkJYnJlYWs7CisgCQljYXNlICdvJzoK KyAJCQlsaW5lID0geHN0cmR1cChvcHRhcmcpOworQEAgLTE3NTgsMTAgKzE3NjMsMzQgQEAKKyAJ fQorIAorIAkvKiBPcGVuIGEgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIGhvc3QuICovCisrCS8q IHdlIHRyeSBpbml0aWFsbHkgb24gdGhlIGRlZmF1bHQgaHBuc3NoIHBvcnQgcmV0dXJuZWQgYnkK KysJICogZGVmYXVsdF9zc2hfcG9ydCgpIHdoaWNoIG5vdyByZXR1cm5zIEhQTlNTSF9ERUZBVUxU X1BPUlQKKysJICogaWYgdGhhdCBmYWlscyB3ZSByZXNldCB0aGUgcG9ydCB0byBTU0hfREVGQVVM VF9QT1JUCisrCSAqIC1janIgOC8xNy8yMDIyCisrCSAqLworK3RyeWFnYWluOgorIAlpZiAoc3No X2Nvbm5lY3Qoc3NoLCBob3N0LCBvcHRpb25zLmhvc3RfYXJnLCBhZGRycywgJmhvc3RhZGRyLAor IAkgICAgb3B0aW9ucy5wb3J0LCBvcHRpb25zLmNvbm5lY3Rpb25fYXR0ZW1wdHMsCistCSAgICAm dGltZW91dF9tcywgb3B0aW9ucy50Y3Bfa2VlcF9hbGl2ZSkgIT0gMCkKKysJICAgICZ0aW1lb3V0 X21zLCBvcHRpb25zLnRjcF9rZWVwX2FsaXZlKSAhPSAwKSB7CisrCQkvKiBjb3VsZCBub3QgY29u bmVjdC4gSWYgdGhlIHBvcnQgcmVxdWVzdGVkIGlzIHRoZSBzYW1lIGFzCisrCQkgKiBocG5zc2gg ZGVmYXVsdCBwb3J0IHRoZW4gZmFsbGJhY2suIE90aGVyd2lzZSwgZXhpdCAqLworKwkJaWYgKChv cHRpb25zLnBvcnQgPT0gZGVmYXVsdF9zc2hfcG9ydCgpKSAmJiBvcHRpb25zLmZhbGxiYWNrKSB7 CisrCQkJaW50IHBvcnQgPSBvcHRpb25zLmZhbGxiYWNrX3BvcnQ7CisrCQkJb3B0aW9ucy5wb3J0 ID0gcG9ydDsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkhQTlNTSCBzZXJ2ZXIgbm90IGF2YWlsYWJs ZSBvbiBkZWZhdWx0IHBvcnQgJWRcbiIsCisrCQkJCWRlZmF1bHRfc3NoX3BvcnQoKSk7CisrCQkJ aWYgKHBvcnQgPT0gMjIpCisrCQkJCWZwcmludGYoc3RkZXJyLCAiRmFsbGluZyBiYWNrIHRvIE9w ZW5TU0ggZGVmYXVsdCBwb3J0ICVkXG4iLAorKwkJCQkJcG9ydCk7CisrCQkJZWxzZQorKwkJCQlm cHJpbnRmKHN0ZGVyciwgIkZhbGxpbmcgYmFjayB0byB1c2VyIGRlZmluZWQgcG9ydCAlZFxuIiwK KysJCQkJCXBvcnQpOworKwkJCWFkZHJzID0gcmVzb2x2ZV9ob3N0KGhvc3QsIHBvcnQsIDEsCisr CQkJCQkgICAgIGNuYW1lLCBzaXplb2YoY25hbWUpKTsKKysJCQlnb3RvIHRyeWFnYWluOworKwkJ fQorIAkJZXhpdCgyNTUpOworKwl9CisgCisgCisgCXNzaF9wYWNrZXRfc2V0X3RpbWVvdXQoc3No LCBvcHRpb25zLnNlcnZlcl9hbGl2ZV9pbnRlcnZhbCwKK0BAIC0xOTM5LDggKzE5NjgsMTAgQEAK KyAKKyAvKiBEbyBmb3JrKCkgYWZ0ZXIgYXV0aGVudGljYXRpb24uIFVzZWQgYnkgInNzaCAtZiIg Ki8KKyBzdGF0aWMgdm9pZAorLWZvcmtfcG9zdGF1dGgodm9pZCkKKytmb3JrX3Bvc3RhdXRoKHN0 cnVjdCBzc2ggKnNzaCkKKyB7CisrCWludCBmaXBzID0gMDsKKysKKyAJaWYgKG5lZWRfY29udHJv bHBlcnNpc3RfZGV0YWNoKQorIAkJY29udHJvbF9wZXJzaXN0X2RldGFjaCgpOworIAlkZWJ1Zygi Zm9ya2luZyB0byBiYWNrZ3JvdW5kIik7CitAQCAtMTk0OSwxNyArMTk4MCwyOSBAQAorIAkJZmF0 YWwoImRhZW1vbigpIGZhaWxlZDogJS4yMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAJaWYgKHN0 ZGZkX2Rldm51bGwoMSwgMSwgIShsb2dfaXNfb25fc3RkZXJyKCkgJiYgZGVidWdfZmxhZykpID09 IC0xKQorIAkJZXJyb3JfZigic3RkZmRfZGV2bnVsbCBmYWlsZWQiKTsKKysJLyogd2UgZG8gdGhl IGNpcGhlciBzd2l0Y2ggaGVyZSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgY2xpZW50CisrCSAqIGlz IGZvcmtpbmcgb3IgaGFzIGEgZGVsYXllZCBmb3JrLgorKwkgKiBJZiBGSVBTIG1vZGUgZXhpc3Rz IGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxsZWwgY2lwaGVycy4KKysJICovCisrCWZpcHMg PSBmaXBzX2VuYWJsZWQoKTsKKysJaWYgKGZpcHMpCisrCQlkZWJ1ZzJfZigiRklQUyBtb2RlIGlz IGVuYWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJlIGRpc2FibGVkIik7CisrCWVsc2UKKysJCWRl YnVnMl9mKCJGSVBTIG1vZGUgbm90IGZvdW5kIG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJz IGFyZSBlbmFibGVkIik7CisrCisrCWlmICgob3B0aW9ucy5kaXNhYmxlX211bHRpdGhyZWFkZWQg PT0gMCkgJiYgKGZpcHMgPT0gMCkpCisrCQljaXBoZXJfc3dpdGNoKHNzaCk7CisgfQorIAorIHN0 YXRpYyB2b2lkCistZm9yd2FyZGluZ19zdWNjZXNzKHZvaWQpCisrZm9yd2FyZGluZ19zdWNjZXNz KHN0cnVjdCBzc2ggKnNzaCkKKyB7CisgCWlmIChmb3J3YXJkX2NvbmZpcm1zX3BlbmRpbmcgPT0g LTEpCisgCQlyZXR1cm47CisgCWlmICgtLWZvcndhcmRfY29uZmlybXNfcGVuZGluZyA9PSAwKSB7 CisgCQlkZWJ1Z19mKCJhbGwgZXhwZWN0ZWQgZm9yd2FyZGluZyByZXBsaWVzIHJlY2VpdmVkIik7 CisgCQlpZiAob3B0aW9ucy5mb3JrX2FmdGVyX2F1dGhlbnRpY2F0aW9uKQorLQkJCWZvcmtfcG9z dGF1dGgoKTsKKysJCQlmb3JrX3Bvc3RhdXRoKHNzaCk7CisgCX0gZWxzZSB7CisgCQlkZWJ1ZzJf ZigiJWQgZXhwZWN0ZWQgZm9yd2FyZGluZyByZXBsaWVzIHJlbWFpbmluZyIsCisgCQkgICAgZm9y d2FyZF9jb25maXJtc19wZW5kaW5nKTsKK0BAIC0yMDM2LDcgKzIwNzksNyBAQAorIAkJCQkgICAg ImZvciBsaXN0ZW4gcG9ydCAlZCIsIHJmd2QtPmxpc3Rlbl9wb3J0KTsKKyAJCX0KKyAJfQorLQlm b3J3YXJkaW5nX3N1Y2Nlc3MoKTsKKysJZm9yd2FyZGluZ19zdWNjZXNzKHNzaCk7CisgfQorIAor IHN0YXRpYyB2b2lkCitAQCAtMjA2Myw3ICsyMTA2LDcgQEAKKyAJfQorIAorIAlkZWJ1Z19mKCJ0 dW5uZWwgZm9yd2FyZCBlc3RhYmxpc2hlZCwgaWQ9JWQiLCBpZCk7CistCWZvcndhcmRpbmdfc3Vj Y2VzcygpOworKwlmb3J3YXJkaW5nX3N1Y2Nlc3Moc3NoKTsKKyB9CisgCisgc3RhdGljIHZvaWQK K0BAIC0yMjU3LDYgKzIzMDAsMTUgQEAKKyAJICAgIE5VTEwsIGZpbGVubyhzdGRpbiksIGNvbW1h bmQsIGVudmlyb24pOworIH0KKyAKKysvKiB0aGlzIHVzZWQgdG8gZG8gYSBsb3QgbW9yZSBidXQg bm93IGl0IGp1c3QgY2hlY2tzIHRvIHNlZQorKyAqIGlmIHdlIGFyZSBkaXNhYmxpbmcgaHBuICov Cisrc3RhdGljIHZvaWQKKytocG5fb3B0aW9uc19pbml0KHN0cnVjdCBzc2ggKnNzaCkKKyt7Cisr CWNoYW5uZWxfc2V0X2hwbl9kaXNhYmxlZChvcHRpb25zLmhwbl9kaXNhYmxlZCk7CisrCWRlYnVn X2YoIkhQTiBkaXNhYmxlZDogJWQiLCBvcHRpb25zLmhwbl9kaXNhYmxlZCk7CisrfQorKworIC8q IG9wZW4gbmV3IGNoYW5uZWwgZm9yIGEgc2Vzc2lvbiAqLworIHN0YXRpYyBpbnQKKyBzc2hfc2Vz c2lvbjJfb3BlbihzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtMjI3OCw2ICsyMzMwLDcgQEAKKyAJd2lu ZG93ID0gQ0hBTl9TRVNfV0lORE9XX0RFRkFVTFQ7CisgCXBhY2tldG1heCA9IENIQU5fU0VTX1BB Q0tFVF9ERUZBVUxUOworIAlpZiAodHR5X2ZsYWcpIHsKKysJCXdpbmRvdyA9IENIQU5fU0VTX1dJ TkRPV19ERUZBVUxUOworIAkJd2luZG93ID4+PSAxOworIAkJcGFja2V0bWF4ID4+PSAxOworIAl9 CitAQCAtMjI4NSw2ICsyMzM4LDEzIEBACisgCSAgICAic2Vzc2lvbiIsIFNTSF9DSEFOTkVMX09Q RU5JTkcsIGluLCBvdXQsIGVyciwKKyAJICAgIHdpbmRvdywgcGFja2V0bWF4LCBDSEFOX0VYVEVO REVEX1dSSVRFLAorIAkgICAgImNsaWVudC1zZXNzaW9uIiwgQ0hBTk5FTF9OT05CTE9DS19TVERJ Tyk7CisrCisrCS8qIFRPRE86IElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGVzZSBvcHRp b25zPyAqLworKwlpZiAob3B0aW9ucy50Y3BfcmN2X2J1Zl9wb2xsID4gMCAmJiAhb3B0aW9ucy5o cG5fZGlzYWJsZWQpIHsKKysJCWMtPmR5bmFtaWNfd2luZG93ID0gMTsKKysJCWRlYnVnKCJFbmFi bGVkIER5bmFtaWMgV2luZG93IFNjYWxpbmciKTsKKysJfQorKworIAlpZiAodHR5X2ZsYWcpCisg CQljaGFubmVsX3NldF90dHkoc3NoLCBjKTsKKyAJZGVidWczX2YoImNoYW5uZWxfbmV3OiAlZCVz IiwgYy0+c2VsZiwgdHR5X2ZsYWcgPyAiICh0dHkpIiA6ICIiKTsKK0BAIC0yMzAyLDYgKzIzNjIs MTQgQEAKKyB7CisgCWludCByLCBpZCA9IC0xOworIAljaGFyICpjcCwgKnR1bl9md2RfaWZuYW1l ID0gTlVMTDsKKysJaW50IGZpcHMgPSAwOworKworKwkvKgorKwkgKiBXZSBuZWVkIHRvIGluaXRp YWxpemUgdGhpcyBlYXJseSBiZWNhdXNlIHRoZSBmb3J3YXJkaW5nIGxvZ2ljIGJlbG93CisrCSAq IG1pZ2h0IG9wZW4gY2hhbm5lbHMgdGhhdCB1c2UgdGhlIGhwbiBidWZmZXIgc2l6ZXMuICBXZSBj YW4ndCBzZW5kIGEKKysJICogd2luZG93IG9mIC0xICh0aGUgZGVmYXVsdCkgdG8gdGhlIHNlcnZl ciBhcyBpdCBicmVha3MgdGhpbmdzLgorKwkgKi8KKysJaHBuX29wdGlvbnNfaW5pdChzc2gpOwor IAorIAkvKiBYWFggc2hvdWxkIGJlIHByZS1zZXNzaW9uICovCisgCWlmICghb3B0aW9ucy5jb250 cm9sX3BlcnNpc3QpCitAQCAtMjM5Myw3ICsyNDYxLDIxIEBACisgCQkJZGVidWcoImRlZmVycmlu ZyBwb3N0YXV0aCBmb3JrIHVudGlsIHJlbW90ZSBmb3J3YXJkICIKKyAJCQkgICAgImNvbmZpcm1h dGlvbiByZWNlaXZlZCIpOworIAkJfSBlbHNlCistCQkJZm9ya19wb3N0YXV0aCgpOworKwkJCWZv cmtfcG9zdGF1dGgoc3NoKTsKKysJfSBlbHNlIHsKKysJCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBh cmUgc3dpdGNoaW5nIGNpcGhlcnMgdG8KKysJCSAqIG9uZSBvZiBvdXIgcGFyYWxsZWwgdmVyc2lv bnMuIElmIHRoZSBjbGllbnQgaXMKKysJCSAqIGZvcmtpbmcgdGhlbiB3ZSBoYW5kbGUgaXQgaW4g Zm9ya19wb3N0YXV0aCgpCisrCQkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVk IHRoZW4gbm8gcGFyYWxsZWwgY2lwaGVycy4KKysJCSAqLworKwkJZmlwcyA9IGZpcHNfZW5hYmxl ZCgpOworKwkJaWYgKGZpcHMpCisrCQkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiBQ YXJhbGxlbCBjaXBoZXJzIGFyZSBkaXNhYmxlZCIpOworKwkJZWxzZQorKwkJCWRlYnVnMl9mKCJG SVBTIG1vZGUgbm90IGZvdW5kIG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFi bGVkIik7CisrCQlpZiAoKG9wdGlvbnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IDApCisrCQkg ICAgJiYgKGZpcHMgPT0gMCkpCisrCQkJY2lwaGVyX3N3aXRjaChzc2gpOworIAl9CisgCisgCXJl dHVybiBjbGllbnRfbG9vcChzc2gsIHR0eV9mbGFnLCB0dHlfZmxhZyA/CitkaWZmIC1OdXIgb3Bl bnNzaC0xMC41cDEub3JpZy9zc2hfY29uZmlnIG9wZW5zc2gtMTAuNXAxL3NzaF9jb25maWcKKy0t LSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaF9jb25maWcJMjAyNi0wOS0yMSAwNzowNjowNS41NjUw NTg0MjIgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hfY29uZmlnCTIwMjYtMDktMjEgMDc6 NTc6MTAuNDU0MzQ0NDE2ICswMjAwCitAQCAtNDUsNiArNDUsOCBAQAorICMgICBQcm94eUNvbW1h bmQgc3NoIC1xIC1XICVoOiVwIGdhdGV3YXkuZXhhbXBsZS5jb20KKyAjICAgUmVrZXlMaW1pdCAx RyAxaAorICMgICBVc2VyS25vd25Ib3N0c0ZpbGUgfi8uc3NoL2tub3duX2hvc3RzLmQvJWsKKysj ICAgVXNlTVBUQ1Agbm8KKysjICAgSGFwcHlFeWVzIG5vCisgIworICMgVGhpcyBzeXN0ZW0gaXMg Zm9sbG93aW5nIHN5c3RlbS13aWRlIGNyeXB0byBwb2xpY3kuCisgIyBUbyBtb2RpZnkgdGhlIGNy eXB0byBwcm9wZXJ0aWVzIChDaXBoZXJzLCBNQUNzLCAuLi4pLCBjcmVhdGUgYSAgKi5jb25mCitk aWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hfY29uZmlnLjUgb3BlbnNzaC0xMC41cDEv c3NoX2NvbmZpZy41CistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hfY29uZmlnLjUJMjAyNi0w OS0yMSAwNzowNjowNS41NjUxODg3ODAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hfY29u ZmlnLjUJMjAyNi0wOS0yMSAwNzowNjo1OS44OTYzNTk0NDUgKzAyMDAKK0BAIC02Miw2ICs2Miwy OSBAQAorIC5QcSBQYSAvZXRjL3NzaC9zc2hfY29uZmlnCisgLkVsCisgLlBwCisrLlhyIGhwbnNz aCAxCisraXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIE9wZW5TU0gncyBzc2ggYW5kIHVzZXMgdGhl IHNhbWUgY29uZmlndXJhdGlvbiBmb3JtYXQsIGRpcmVjdGl2ZXMsIGFuZCBvcHRpb25zLgorKy5Y ciBocG5zc2ggMQorK2NhbiB1c2UgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBmaWxlIGFzCisrLlhy IHNzaCAxCisrdGhvdWdoIHRoZSBpbnZlcnNlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLiBUaGlz IGlzIGJlY2F1c2UKKysuWHIgaHBuc3NoIDEKKytoYXMgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMg d2hpY2ggYXJlIGRpc2N1c3NlZCBiZWxvdy4gQXMgc3VjaCB1c2VycyBzaG91bGQgZWl0aGVyIG5v dAorK3VzZQorKy5YciBocG5zc2ggMQorK3NwZWNpZmljIGRpcmVjdGl2ZXMgaW4gdGhlaXIgZGVm YXVsdCBzc2hfY29uZmlnIGZpbGVzIG9yIGVuc3VyZSB0aGF0IHRoZXkgYWx3YXlzIHVzZSBhCisr Y3VzdG9tIGNvbmZpZyBmaWxlLgorKy5QcAorK1VubGVzcyBub3RlZCBvdGhlcndpc2UsIGZvciBl YWNoIHBhcmFtZXRlciwgdGhlIGZpcnN0IG9idGFpbmVkIHZhbHVlCisrd2lsbCBiZSB1c2VkLgor K1RoZSBjb25maWd1cmF0aW9uIGZpbGVzIGNvbnRhaW4gc2VjdGlvbnMgc2VwYXJhdGVkIGJ5Cisr LkNtIEhvc3QKKytzcGVjaWZpY2F0aW9ucywgYW5kIHRoYXQgc2VjdGlvbiBpcyBvbmx5IGFwcGxp ZWQgZm9yIGhvc3RzIHRoYXQKKyttYXRjaCBvbmUgb2YgdGhlIHBhdHRlcm5zIGdpdmVuIGluIHRo ZSBzcGVjaWZpY2F0aW9uLgorK1RoZSBtYXRjaGVkIGhvc3QgbmFtZSBpcyB1c3VhbGx5IHRoZSBv bmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZQorKyhzZWUgdGhlCisrLkNtIENhbm9uaWNhbGl6 ZUhvc3RuYW1lCisrb3B0aW9uIGZvciBleGNlcHRpb25zKS4KKyBVbmxlc3Mgbm90ZWQgb3RoZXJ3 aXNlLCBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSwgdGhlIGZpcnN0Cisgc3BlY2lm aWVkIHZhbHVlIHdpbGwgYmUgdXNlZC4KKyAuUHAKK0BAIC04NzAsNiArODkzLDkgQEAKKyBvcgor IC5DbSBubworICh0aGUgZGVmYXVsdCkuCisrLkl0IENtIEZhbGxiYWNrUG9ydAorK1NwZWNpZmll cyB0aGUgcG9ydCBocG5zc2ggc2hvdWxkIHRyeSB0byBjb25uZWN0IHRvIGlmIGl0IGZhaWxzIGNv bm5lY3RpbmcgdG8gdGhlCisrZGVmYXVsdCBocG5zc2hkIHBvcnQgb2YgMjIyMi4gVGhlIGRlZmF1 bHQgaXMgcG9ydCAyMi4gSFBOLVNTSCBvbmx5LgorIC5JdCBDbSBGaW5nZXJwcmludEhhc2gKKyBT cGVjaWZpZXMgdGhlIGhhc2ggYWxnb3JpdGhtIHVzZWQgd2hlbiBkaXNwbGF5aW5nIGtleSBmaW5n ZXJwcmludHMuCisgVmFsaWQgb3B0aW9ucyBhcmU6CitAQCAtMTA5Nyw2ICsxMTIzLDIzIEBACisg d2lsbCBub3QgYmUgY29udmVydGVkIGF1dG9tYXRpY2FsbHksCisgYnV0IG1heSBiZSBtYW51YWxs eSBoYXNoZWQgdXNpbmcKKyAuWHIgc3NoLWtleWdlbiAxIC4KKysuSXQgQ20gSGFwcHlFeWVzCisr SWYgc2V0IHRvCisrLkNtIHllcworK3RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBjbGll bnQgc2hvdWxkIHVzZSB0aGUgSGFwcHkgRXllYmFsbHMgY29ubmVjdGlvbgorK21ldGhvZCBhcyBk ZXNjcmliZWQgYnkgUkZDIDgzMDUuIFdoZW4gYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGEKKyt0 YXJnZXQgdGhhdCBzdXBwb3J0cyBJUHY0IGFuZCBJUHY2IHRoZSBjbGllbnQgd2lsbCB0cnkgdG8g Y29ubmVjdAorK29uIElQdjYgZmlyc3QsIGRlbGF5IGEgc2V0IHRpbWUgKDI1MG1zIGRlZmF1bHQp LCBhbmQgdGhlbiB0cnkgSVB2NC4KKytUaGUgY2xpZW50IHdpbGwgdXNlIHdoaWNoIGV2ZXIgc29j a2V0IGlzIHJldHVybmVkIGZpcnN0LiBOb3RlOgorK1RoaXMgcHJvY2VzcyBtYXksIHJhcmVseSwg cHJvZHVjZSBmYWxzZSBwb3NpdGl2ZXMgaW4gc29tZSBtb25pdG9yaW5nIHRvb2xzCisrZHVlIHRv IG11bHRpcGxlIGNvbm5lY3Rpb24gYXR0ZW1wdHMgcHJpb3IgdG8gYXV0aGVudGljYXRpb24uCisr VGhlIGRlZmF1bHQgaXMKKysuQ20gbm8KKysuSXQgQ20gSGFwcHlEZWxheQorK1RoaXMgb3B0aW9u cyBzcGVjaWZpZXMgaG93IGxvbmcgdGhlIEhhcHB5RXllcyBjb25uZWN0aW9uIG1ldGhvZCBzaG91 bGQKKyt3YWl0IGJlZm9yZSB0cnlpbmcgSVB2NCBhZnRlciB0aGUgaW5pdGlhbCBJUHY2IGNvbm5l Y3Rpb24uIFRoaXMgdmFsdWUgaXMKKythIHBvc2l0aXZlIGludGVnZXIgb2YgbWlsbGlzZWNvbmRz IHdpdGggYSBkZWZhdWx0IG9mCisrLkNtIDI1MG1zLgorIC5JdCBDbSBIb3N0YmFzZWRBY2NlcHRl ZEFsZ29yaXRobXMKKyBUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5CisgLlhy IGNyeXB0by1wb2xpY2llcyA3IC4KK0BAIC0xMjAyLDYgKzEyNDUsMTEgQEAKKyAuQ20gSG9zdG5h bWUKKyBzcGVjaWZpY2F0aW9ucykuCisgVGhlIGRlZmF1bHQgaXMgdGhlIG5hbWUgZ2l2ZW4gb24g dGhlIGNvbW1hbmQgbGluZS4KKysuSXQgQ20gSFBORGlzYWJsZWQKKytJbiBzb21lIHNpdHVhdGlv bnMsIHN1Y2ggYXMgdHJhbnNmZXJzIG9uIGEgbG9jYWwgYXJlYSBuZXR3b3JrLCB0aGUgaW1wYWN0 Cisrb2YgdGhlIEhQTiBjb2RlIHByb2R1Y2VzIGEgbmV0IGRlY3JlYXNlIGluIHBlcmZvcm1hbmNl LiBJbiB0aGVzZSBjYXNlcyBpdCBpcworK2hlbHBmdWwgdG8gZGlzYWJsZSB0aGUgSFBOIGZ1bmN0 aW9uYWxpdHkuIEJ5IGRlZmF1bHQgSFBORGlzYWJsZWQgaXMgc2V0IHRvCisrLkNtIG5vLiBIUE5T U0ggb25seS4KKyAuSXQgQ20gSWRlbnRpdGllc09ubHkKKyBTcGVjaWZpZXMgdGhhdAorIC5YciBz c2ggMQorQEAgLTEzNzcsNiArMTQyNSwxMiBAQAorIC5DbSBub25lCisgKHRoZSBvcGVyYXRpbmcg c3lzdGVtIGRlZmF1bHQpCisgZm9yIG5vbi1pbnRlcmFjdGl2ZSBzZXNzaW9ucy4KKytJZiB1c2lu ZyB0aGUKKysuQ20gSGFwcHlFeWVzCisrb3B0aW9uIHRoZXNlIGRlZmF1bHQgdG8KKysuQ20gbG93 bGF0ZW5jeSBhbmQKKysubSB0aHJvdWdocHV0ICwKKytyZXNwZWN0aXZlbHkuCisgLkl0IENtIEti ZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24KKyBTcGVjaWZpZXMgd2hldGhlciB0byB1c2Uga2V5 Ym9hcmQtaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb24uCisgVGhlIGFyZ3VtZW50IHRvIHRoaXMg a2V5d29yZCBtdXN0IGJlCitAQCAtMTU2NSw2ICsxNjE5LDYzIEBACisgLlBwCisgVGhlIGxpc3Qg b2YgYXZhaWxhYmxlIE1BQyBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCisg LlFxIHNzaCAtUSBtYWMgLgorKy5JdCBDbSBNZXRyaWNzCisrSW5kaWNhdGUgdGhhdCB0aGUgc3No IGNsaWVudCBzaG91bGQgZ2F0aGVyIGFuZCB3cml0ZSBUQ1Agc3RhY2sgbWV0cmljcyBmcm9tIHRo ZQorK1RDUF9JTkZPIHNvY2tldCBzdHJ1Y3R1cmUgb24gY29tcGxpYW50IG9wZXJhdGluZyBzeXN0 ZW1zIHRvIGEgdGV4dCBmaWxlLgorK1RoZXNlIG1ldHJpY3Mgd2lsbCBiZSBjb2xsZWN0ZWQgZnJv bSBib3RoIHRoZSBsb2NhbCBhbmQgcmVtb3RlIGhvc3RzIGlmIG1ldHJpY3MKKythcmUgc3VwcG9y dGVkIGJ5IHRoZSB2ZXJzaW9uIG9mIFNTSCBhbmQgVENQX0lORk8gaXMgc3VwcG9ydGVkIGJ5IHRo ZQorK29wZXJhdGluZyBzeXN0ZW0uIEN1cnJlbnRseSBvcGVyYXRpbmcgc3lzdGVtIHN1cHBvcnQg aXMgbGltaXRlZCB0byBMaW51eAorK3ZlcnNpb24gMy43IGFuZCBncmVhdGVyLCBOZXRCU0QsIGFu ZCBGcmVlQlNEICh2ZXJzaW9uIDYgb3IgZ3JlYXRlcikuCisrCisrSWYgb25lIG9mIHRoZSBob3N0 cyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBNZXRyaWNzIG9wdGlvbiB0aGVuIG9ubHkgZGF0YQorK2Zy b20gdGhlIHRoZSBob3N0IHRoYXQgZG9lcyB3aWxsIGJlIHJlcG9ydGVkLiBTZWUgdGhlIEhQTi1S RUFETUUgZmlsZQorK2ZvciBtb3JlIGRldGFpbC4KKysKKytUaGUgYXJndW1lbnQgdG8gdGhlIGtl eXdvcmQgbXVzdCBiZQorKy5DbSB5ZXMKKytvcgorKy5DbSBubworKyh0aGUgZGVmYXVsdCkuCisr CisrU2VlCisrLkNtIE1ldHJpY3NJbnRlcnZhbAorK2FuZAorKy5DbSBNZXRyaWNzUGF0aAorK2Zv ciBtb3JlIG1ldHJpY3Mgb3B0aW9ucy4KKysuQ20gSFBOU1NIIG9ubHkuCisrLkl0IENtIE1ldHJp Y3NJbnRlcnZhbAorK1RoZSBmcmVxdWVuY3ksIGluIHNlY29uZHMsIHdpdGggd2hpY2ggdGhlIFRD UF9JTkZPIHN0cnVjdCB3aWxsIGJlIHBvbGxlZC4gVGhlCisrZGVmYXVsdCB2YWx1ZSBpcyA1IHNl Y29uZHMuCisrCisrLkNtIE1ldHJpY3MKKyttdXN0IGJlIHNldCB0bworKy5DbSB5ZXMKKytmb3Qg dGhpcyBvcHRpb24gdG8gaGF2ZSBhbnkgZWZmZWN0LgorKy5DbSBIUE5TU0ggb25seS4KKysuSXQg Q20gTWV0cmljc1BhdGgKKytUaGUgZmlsZSBwYXRoIHdoZXJlCisrLkNtIE1ldHJpY3MKKytzaG91 bGQgd3JpdGUgdGhlIFRDUCBzdGFjayBtZXRyaWNzLgorKworK1RoZSBkZWZhdWx0IGlzCisrLlNt IG9mZgorKy5BciAuL3NzaF9zdGFja19tZXRyaWNzLmxvY2FsCisrIGFuZAorKy5BciAuL3NzaF9z dGFja19tZXRyaWNzLnJlbW90ZQorKy5TbSBvbgorKworK1RoZSB1c2VyIG1heSBzcGVjaWZ5IGFu eSBvdGhlciBmaWxlcGF0aCBhbmQgZmlsZW5hbWUgdGhhdCB0aGV5IGhhdmUgd3JpdGUKKythY2Nl c3MgdG8uIEUuZy4gTWV0cmljc1BhdGg9L3RtcC9teV9tZXRyaWNzLiBUaGUgc3VmZml4IG9mIC5s b2NhbAorK2FuZCAucmVtb3RlIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhpcyBwYXRoLiBGaWxlcyBh cmUKKysuQ20gbm90Cisrb3ZlcndyaXR0ZW4gYnkgc3Vic2VxdWVudCBtZXRyaWNzIHNlc3Npb25z LiBJbnN0ZWFkLCBkYXRhIGZyb20gbmV3IHNlc3Npb25zCisrd2lsbCBiZSBhcHBlbmRlZCBpZiB0 aGUgZmlsZSBhbHJlYWR5IGV4aXN0cy4KKysKKysuQ20gTWV0cmljcworK211c3QgYmUgc2V0IHRv CisrLkNtIHllcworK2ZvdCB0aGlzIG9wdGlvbiB0byBoYXZlIGFueSBlZmZlY3QuCisrLkNtIEhQ TlNTSCBvbmx5LgorIC5JdCBDbSBOb0hvc3RBdXRoZW50aWNhdGlvbkZvckxvY2FsaG9zdAorIERp c2FibGUgaG9zdCBhdXRoZW50aWNhdGlvbiBmb3IgbG9jYWxob3N0IChsb29wYmFjayBhZGRyZXNz ZXMpLgorIFRoZSBhcmd1bWVudCB0byB0aGlzIGtleXdvcmQgbXVzdCBiZQorQEAgLTE1NzIsNiAr MTY4MywzNiBAQAorIG9yCisgLkNtIG5vCisgKHRoZSBkZWZhdWx0KS4KKysuSXQgQ20gTm9uZUVu YWJsZWQKKytFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIGNpcGhlci4gQ2Fy ZSBtdXN0IGFsd2F5cyBiZSB1c2VkCisrd2hlbiBlbmFibGluZyB0aGlzIGFzIGl0IHdpbGwgYWxs b3cgdXNlcnMgdG8gc2VuZCBkYXRhIGluIHRoZSBjbGVhci4gSG93ZXZlciwKKytpdCBpcyBpbXBv cnRhbnQgdG8gbm90ZSB0aGF0IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIHJlbWFpbnMgZW5j cnlwdGVkCisrZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBEZWZhdWx0IGlzCisrLkNt IG5vLiBIUE5TU0ggb25seS4KKysuSXQgQ20gTm9uZU1hY0VuYWJsZWQKKytFbmFibGUgb3IgZGlz YWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIE1BQy4gV2hlbiB0aGlzIGlzIGVuYWJsZWQgc3NoCisr d2lsbCAqbm90KiBwcm92aWRlIGRhdGEgaW50ZWdyaXR5IG9mIGFueSBkYXRhIGJlaW5nIHRyYW5z bWl0dGVkIGJldHdlZW4gaG9zdHMuIFVzZQorK3dpdGggY2F1dGlvbiBhcyBpdCwgdW5saWtlIGp1 c3QgdXNpbmcgTm9uZUVuYWJsZWQsIGRvZXNuJ3QgcHJvdmlkZSBkYXRhIGludGVncml0eSBhbmQK Kytwcm90ZWN0aW9uIGFnYWluc3QgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy4gQXMgd2l0aCBO b25lRW5hYmxlZCBhbGwgYXV0aGVudGljYXRpb24KKytyZW1haW5zIGVuY3J5cHRlZCBhbmQgaW50 ZWdyaXR5IGlzIGVuc3VyZWQuIERlZmF1bHQgaXMKKysuQ20gbm8uIEhQTlNTSCBvbmx5LgorKy5J dCBDbSBOb25lU3dpdGNoCisrU3dpdGNoIHRoZSBlbmNyeXB0aW9uIGNpcGhlciBiZWluZyB1c2Vk IHRvIHRoZSBOb25lIGNpcGhlciBhZnRlcgorK2F1dGhlbnRpY2F0aW9uIHRha2VzIHBsYWNlLiBO b25lRW5hYmxlZCBtdXN0IGJlIGVuYWJsZWQgb24gYm90aCB0aGUgY2xpZW50CisrYW5kIHNlcnZl ciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLiBXaGVuIHRoZSBjb25uZWN0aW9uIHN3aXRjaGVzIHRv IHRoZSBOT05FCisrY2lwaGVyIGEgd2FybmluZyBpcyBzZW50IHRvIFNUREVSUi4gVGhlIGNvbm5l Y3Rpb24gYXR0ZW1wdCB3aWxsIGZhaWwgd2l0aCBhbgorK2Vycm9yIGlmIGEgY2xpZW50IHJlcXVl c3RzIGEgTm9uZVN3aXRjaCBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBleHBsaWNpdGx5 CisraGF2ZSBOb25lRW5hYmxlZCBzZXQgdG8geWVzLiBOb3RlOiBUaGUgTk9ORSBjaXBoZXIgY2Fu bm90IGJlIHVzZWQgaW4KKytpbnRlcmFjdGl2ZSAoc2hlbGwpIHNlc3Npb25zIGFuZCBpdCB3aWxs IGZhaWwgc2lsZW50bHkuIFNldCB0bworKy5DbSBubworK2J5IGRlZmF1bHQuCisrLkNtIEhQTlNT SCBvbmx5LgorKy5QcAorKy5DbSBOb3RlOgorK3RoaXMgb3B0aW9ucyBjYW5ub3QgYWN0dWFseSBi ZSBzZXQgaW4gdGhlIHNzaF9jb25maWcgZmlsZS4gSXQgbXVzdCBiZQorK3NldCBvbiB0aGUgY29t bWFuZCBsaW5lIHVzZSAtb05vbmVFbmFibGVkLiBUaGlzIGlzIHRvIHByZXZlbnQgaXQgZnJvbSBi ZWluZworK3VzZWQgYWNjaWRlbnRhbGx5LiBJdCBpcyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0 ZW5lc3MgYXMgbmVpdGhlciBOb25lTWFjRW5hYmxlZAorK29yIE5vbmVDaXBoZXJFbmFibGVkIGhh dmUgYW55IGVmZmVjdCB3aXRob3V0IHRoaXMgb3B0aW9uLgorIC5JdCBDbSBOdW1iZXJPZlBhc3N3 b3JkUHJvbXB0cworIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBhc3N3b3JkIHByb21wdHMgYmVm b3JlIGdpdmluZyB1cC4KKyBUaGUgYXJndW1lbnQgdG8gdGhpcyBrZXl3b3JkIG11c3QgYmUgYW4g aW50ZWdlci4KK0BAIC0yMTUxLDYgKzIyOTIsMTIgQEAKKyBTcGVjaWZ5IGEgY29uZmlndXJhdGlv biB0YWcgbmFtZSB0aGF0IG1heSBiZSBsYXRlciB1c2VkIGJ5IGEKKyAuQ20gTWF0Y2gKKyBkaXJl Y3RpdmUgdG8gc2VsZWN0IGEgYmxvY2sgb2YgY29uZmlndXJhdGlvbi4KKysuSXQgQ20gVGNwUmN2 QnVmUG9sbAorK0VuYWJsZSBvZiBkaXNhYmxlIHRoZSBwb2xsaW5nIG9mIHRoZSB0Y3AgcmVjZWl2 ZSBidWZmZXIgdGhyb3VnaCB0aGUgbGlmZQorK29mIHRoZSBjb25uZWN0aW9uLiBZb3Ugd291bGQg d2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkCisrZm9yIHN5c3Rl bXMgbWFraW5nIHVzZSBvZiBhdXRvdHVuaW5nIGtlcm5lbHMgKGxpbnV4IDIuNC4yNCssIDIuNiwg TVMgVmlzdGEpLgorK0RlZmF1bHQgaXMKKysuQ20geWVzLiBIUE5TU0ggb25seS4KKyAuSXQgQ20g VHVubmVsCisgUmVxdWVzdAorIC5YciB0dW4gNAorQEAgLTIyMzYsNiArMjM4MywxMiBAQAorIGZy b20gT3BlblNTSCA2LjggYW5kIGdyZWF0ZXIgc3VwcG9ydCB0aGUKKyAuUXEgaG9zdGtleXNAb3Bl bnNzaC5jb20KKyBwcm90b2NvbCBleHRlbnNpb24gdXNlZCB0byBpbmZvcm0gdGhlIGNsaWVudCBv ZiBhbGwgdGhlIHNlcnZlcidzIGhvc3RrZXlzLgorKy5JdCBDbSBVc2VNUFRDUAorK0lmIHNldCB0 bworKy5DbSB5ZXMgLAorK3RoaXMgd2lsbCBlbmFibGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGlu c3RlYWQgb2YgVENQICh0aGlzIG9ubHkgd29ya3Mgb24gTGludXgpLgorK1RoZSBkZWZhdWx0IGlz CisrLkNtIG5vIC4KKyAuSXQgQ20gVXNlcgorIFNwZWNpZmllcyB0aGUgdXNlciB0byBsb2cgaW4g YXMuCisgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gYSBkaWZmZXJlbnQgdXNlciBuYW1lIGlzIHVz ZWQgb24gZGlmZmVyZW50IG1hY2hpbmVzLgorQEAgLTI1NDUsMyArMjY5OCwxMSBAQAorIGNyZWF0 ZWQgT3BlblNTSC4KKyAuQW4gTWFya3VzIEZyaWVkbAorIGNvbnRyaWJ1dGVkIHRoZSBzdXBwb3J0 IGZvciBTU0ggcHJvdG9jb2wgdmVyc2lvbnMgMS41IGFuZCAyLjAuCisrLkFuIENocmlzIFJhcGll ciwKKysuQW4gTWljaGFlbCBTdGV2ZW5zLAorKy5BbiBCZW4gQmVubmV0LAorK2FuZAorKy5BbiBN aWtlIFRhc290YQorK2RldmVsb3BlZCB0aGUgSFBOIGV4dGVuc2lvbnMgYXQgdGhlIFBpdHRzYnVy Z2ggU3VwZXJjb211dGluZyBDZW50ZXIKKyt3aXRoIGdyYW50cyBmcm9tIENpc2NvLCB0aGUgTmF0 aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZSwgYW5kCisrdGhlIE5hdGlvbmFsIFNjaWVuY2UgRm91 bmRhdGlvbi4KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGNvbm5lY3QyLmMgb3Bl bnNzaC0xMC41cDEvc3NoY29ubmVjdDIuYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoY29u bmVjdDIuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2NTc3ODQ2MCArMDIwMAorKysrIG9wZW5zc2gt MTAuNXAxL3NzaGNvbm5lY3QyLmMJMjAyNi0wOS0yMSAwNzowNjo1OS44OTY2MjU1NDUgKzAyMDAK K0BAIC03NCw2ICs3NCw3IEBACisgI2luY2x1ZGUgInV0ZjguaCIKKyAjaW5jbHVkZSAic3NoLXNr LmgiCisgI2luY2x1ZGUgInNrLWFwaS5oIgorKyNpbmNsdWRlICJjaXBoZXItc3dpdGNoLmgiCisg CisgI2lmZGVmIEdTU0FQSQorICNpbmNsdWRlICJzc2gtZ3NzLmgiCitAQCAtODMsNiArODQsMTMg QEAKKyBleHRlcm4gT3B0aW9ucyBvcHRpb25zOworIAorIC8qCisrICogdHR5X2ZsYWcgaXMgc2V0 IGluIHNzaC5jLiBVc2UgdGhpcyBpbiBzc2hfdXNlcmF1dGgyOgorKyAqIGlmIGl0IGlzIHNldCwg dGhlbiBwcmV2ZW50IHRoZSBzd2l0Y2ggdG8gdGhlIG51bGwgY2lwaGVyLgorKyAqLworKworK2V4 dGVybiBpbnQgdHR5X2ZsYWc7CisrCisrLyoKKyAgKiBTU0gyIGtleSBleGNoYW5nZQorICAqLwor IAorQEAgLTU3OCw2ICs1ODYsNDIgQEAKKyAKKyAJaWYgKCFhdXRoY3R4dC5zdWNjZXNzKQorIAkJ ZmF0YWwoIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4iKTsKKysKKysJLyoKKysJICogSWYgdGhlIHVz ZXIgd2FudHMgdG8gdXNlIHRoZSBub25lIGNpcGhlciBhbmQvb3Igbm9uZSBtYWMsIGRvIGl0IHBv c3QgYXV0aGVudGljYXRpb24KKysJICogYW5kIG9ubHkgaWYgdGhlIHJpZ2h0IGNvbmRpdGlvbnMg YXJlIG1ldCAtLSBib3RoIG9mIHRoZSBOT05FIGNvbW1hbmRzCisrCSAqIG11c3QgYmUgdHJ1ZSBh bmQgdGhlcmUgbXVzdCBiZSBubyB0dHkgYWxsb2NhdGVkLgorKwkgKi8KKysJaWYgKG9wdGlvbnMu bm9uZV9zd2l0Y2ggPT0gMSAmJiBvcHRpb25zLm5vbmVfZW5hYmxlZCA9PSAxKSB7CisrCQljaGFy ICpteXByb3Bvc2FsW1BST1BPU0FMX01BWF07CisrCQljaGFyICpzID0gTlVMTDsKKysJCWNvbnN0 IGNoYXIgKm5vbmVfY2lwaGVyID0gIm5vbmUiOworKwkJaWYgKCF0dHlfZmxhZykgeyAvKiBubyBu dWxsIG9uIHR0eSBzZXNzaW9ucyAqLworKwkJCWRlYnVnKCJSZXF1ZXN0aW5nIG5vbmUgcmVrZXlp bmcuLi4iKTsKKysJCQlrZXhfcHJvcG9zYWxfcG9wdWxhdGVfZW50cmllcyhzc2gsIG15cHJvcG9z YWwsIHMsIG5vbmVfY2lwaGVyLAorKwkJCQkJCSAgICAgIG9wdGlvbnMubWFjcywKKysJCQkJCQkg ICAgICBjb21wcmVzc2lvbl9hbGdfbGlzdChvcHRpb25zLmNvbXByZXNzaW9uKSwKKysJCQkJCQkg ICAgICBvcHRpb25zLmhvc3RrZXlhbGdvcml0aG1zKTsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIldB Uk5JTkc6IEVOQUJMRUQgTk9ORSBDSVBIRVIhISFcbiIpOworKworKwkJCS8qIE5PTkVNQUMgY2Fu IG9ubHkgYmUgdXNlZCBpbiBjb250ZXh0IG9mIHRoZSBOT05FIENJUEhFUiAqLworKwkJCWlmIChv cHRpb25zLm5vbmVtYWNfZW5hYmxlZCA9PSAxKSB7CisrCQkJCWNvbnN0IGNoYXIgKm5vbmVfbWFj ID0gIm5vbmUiOworKwkJCQlrZXhfcHJvcG9zYWxfcG9wdWxhdGVfZW50cmllcyhzc2gsIG15cHJv cG9zYWwsIHMsIG5vbmVfY2lwaGVyLAorKwkJCQkJCQkgICAgICBub25lX21hYywKKysJCQkJCQkJ ICAgICAgY29tcHJlc3Npb25fYWxnX2xpc3Qob3B0aW9ucy5jb21wcmVzc2lvbiksCisrCQkJCQkJ CSAgICAgIG9wdGlvbnMuaG9zdGtleWFsZ29yaXRobXMpOworKwkJCQlmcHJpbnRmKHN0ZGVyciwg IldBUk5JTkc6IEVOQUJMRUQgTk9ORSBNQUNcbiIpOworKwkJCX0KKysJCQlrZXhfcHJvcDJidWYo c3NoLT5rZXgtPm15LCBteXByb3Bvc2FsKTsKKysJCQlwYWNrZXRfcmVxdWVzdF9yZWtleWluZygp OworKwkJfSBlbHNlIHsKKysJCQkvKiByZXF1ZXN0ZWQgTk9ORSBjaXBoZXIgd2hlbiBpbiBhIHR0 eSAqLworKwkJCWRlYnVnKCJDYW5ub3Qgc3dpdGNoIHRvIE5PTkUgY2lwaGVyIHdpdGggdHR5IGFs bG9jYXRlZCIpOworKwkJCWZwcmludGYoc3RkZXJyLCAiTk9ORSBjaXBoZXIgc3dpdGNoIGRpc2Fi bGVkIHdoZW4gYSBUVFkgaXMgYWxsb2NhdGVkXG4iKTsKKysJCX0KKysJfQorKworIAlpZiAoc3No X3BhY2tldF9jb25uZWN0aW9uX2lzX29uX3NvY2tldChzc2gpKSB7CisgCQl2ZXJib3NlKCJBdXRo ZW50aWNhdGVkIHRvICVzIChbJXNdOiVkKSB1c2luZyBcIiVzXCIuIiwgaG9zdCwKKyAJCSAgICBz c2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSwKK2RpZmYgLU51ciBv cGVuc3NoLTEwLjVwMS5vcmlnL3NzaGNvbm5lY3QuYyBvcGVuc3NoLTEwLjVwMS9zc2hjb25uZWN0 LmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGNvbm5lY3QuYwkyMDI2LTA5LTIxIDA3OjA2 OjA0Ljg2MjE3MTcyMyArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaGNvbm5lY3QuYwkyMDI2 LTA5LTIxIDA3OjA2OjU5Ljg5NjgxMjc5MiArMDIwMAorQEAgLTU1LDYgKzU1LDcgQEAKKyAjaW5j bHVkZSAic3NoZXJyLmgiCisgI2luY2x1ZGUgImF1dGhmZC5oIgorICNpbmNsdWRlICJrZXguaCIK KysjaW5jbHVkZSAiaGFwcHlleWViYWxscy5oIgorIAorIHN0cnVjdCBzc2hrZXkgKnByZXZpb3Vz X2hvc3Rfa2V5ID0gTlVMTDsKKyAKK0BAIC02Niw2ICs2Nyw3IEBACisgZXh0ZXJuIGludCBkZWJ1 Z19mbGFnOworIGV4dGVybiBPcHRpb25zIG9wdGlvbnM7CisgZXh0ZXJuIGNoYXIgKl9fcHJvZ25h bWU7CisrZXh0ZXJuIGNoYXIgZ2xvYmFsX250b3BbTklfTUFYSE9TVF07CisgCisgc3RhdGljIGlu dCBzaG93X290aGVyX2tleXMoc3RydWN0IGhvc3RrZXlzICosIHN0cnVjdCBzc2hrZXkgKik7Cisg c3RhdGljIHZvaWQgd2Fybl9jaGFuZ2VkX2tleShzdHJ1Y3Qgc3Noa2V5ICopOworQEAgLTM3Niw3 ICszNzgsNyBAQAorIC8qCisgICogQ3JlYXRlcyBhIHNvY2tldCBmb3IgdXNlIGFzIHRoZSBzc2gg Y29ubmVjdGlvbi4KKyAgKi8KKy1zdGF0aWMgaW50CisraW50Cisgc3NoX2NyZWF0ZV9zb2NrZXQo c3RydWN0IGFkZHJpbmZvICphaSkKKyB7CisgCWludCBzb2NrLCByOworQEAgLTM4OCw5ICszOTAs MTYgQEAKKyAjZW5kaWYKKyAJY2hhciBudG9wW05JX01BWEhPU1RdOworIAorLQlzb2NrID0gc29j a2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKKysJ LyogdXNlciByZXF1ZXN0IGZvciBNdWx0aXBhdGggVENQICovCisrCWlmIChvcHRpb25zLnVzZV9t cHRjcCkKKysJCXNvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBJ UFBST1RPX01QVENQKTsKKysJZWxzZQorKwkJc29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBh aS0+YWlfc29ja3R5cGUsIGFpLT5haV9wcm90b2NvbCk7CisrCisgCWlmIChzb2NrID09IC0xKSB7 CisgCQllcnJvcigic29ja2V0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisrCQlpZiAob3B0aW9u cy51c2VfbXB0Y3ApCisrCQkJZXJyb3IgKCJZb3UgYXNrZWQgdG8gdXNlIE1QVENQLiBQbGVhc2Ug ZW5zdXJlIGl0IGlzIGVuYWJsZWQuIik7CisgCQlyZXR1cm4gLTE7CisgCX0KKyAJKHZvaWQpZmNu dGwoc29jaywgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CitAQCAtNDkzLDYgKzUwMiwxNSBAQAorIAkJ CXNsZWVwKDEpOworIAkJCWRlYnVnKCJUcnlpbmcgYWdhaW4uLi4iKTsKKyAJCX0KKysJCWlmIChv cHRpb25zLnVzZV9oYXBweWV5ZXMgPT0gMSkgeworKwkJCWRlYnVnX2YgKCJBdHRlbXB0aW5nIFJG QyA4MzA1IC8gSGFwcHkgRXllYmFsbHMgY29ubmVjdGlvbi4iKTsKKysJCQlzb2NrID0gaGFwcHlf ZXllYmFsbHMoaG9zdCwgYWl0b3AsCisrCQkJICAgIGhvc3RhZGRyLCB0aW1lb3V0X21zKTsKKysJ CQlpZiAoc29jayAhPSAtMSkgeworKwkJCQlkZWJ1Z19mICgiUkZDIDgzMDUgLyBIYXBweSBFeWVi YWxscyBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwuIik7CisrCQkJCWJyZWFrOwkvKiBTdWNjZXNzZnVs IGNvbm5lY3Rpb24uICovCisrCQkJfQorKwkJfSBlbHNlIHsKKyAJCS8qCisgCQkgKiBMb29wIHRo cm91Z2ggYWRkcmVzc2VzIGZvciB0aGlzIGhvc3QsIGFuZCB0cnkgZWFjaCBvbmUgaW4KKyAJCSAq IHNlcXVlbmNlIHVudGlsIHRoZSBjb25uZWN0aW9uIHN1Y2NlZWRzLgorQEAgLTU0Nyw2ICs1NjUs NyBAQAorIAkJfQorIAkJaWYgKHNvY2sgIT0gLTEpCisgCQkJYnJlYWs7CS8qIFN1Y2Nlc3NmdWwg Y29ubmVjdGlvbi4gKi8KKysJCX0KKyAJfQorIAorIAkvKiBSZXR1cm4gZmFpbHVyZSBpZiB3ZSBk aWRuJ3QgZ2V0IGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAqLworQEAgLTE2NTgsNiArMTY3Nyw5 IEBACisgCS8qIGtleSBleGNoYW5nZSAqLworIAkvKiBhdXRoZW50aWNhdGUgdXNlciAqLworIAlk ZWJ1ZygiQXV0aGVudGljYXRpbmcgdG8gJXM6JWQgYXMgJyVzJyIsIGhvc3QsIHBvcnQsIHNlcnZl cl91c2VyKTsKKysJLyogaWYgdXNpbmcgUkZDIDgzMDUgY2xlYXJseSBzdGF0ZSB3aGljaCBhZGRy ZXNzIHdlIGFyZSBjb25uZWN0ZWQgdG8gKi8KKysJaWYgKG9wdGlvbnMudXNlX2hhcHB5ZXllcyA9 PSAxKQorKwkJZGVidWcoIlJGQyA4MzA1IGF1dGhlbnRpY2F0aW5nIHRvICUuMjAwcyIsIGdsb2Jh bF9udG9wKTsKKyAJc3NoX2tleDIoc3NoLCBob3N0LCBob3N0YWRkciwgcG9ydCwgY2luZm8pOwor IAlpZiAoIW9wdGlvbnMua2V4X2FsZ29yaXRobXNfc2V0ICYmIHNzaC0+a2V4ICE9IE5VTEwgJiYK KyAJICAgIHNzaC0+a2V4LT5uYW1lICE9IE5VTEwgJiYgb3B0aW9ucy53YXJuX3dlYWtfY3J5cHRv ICYmCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLWF1dGguYyBvcGVuc3NoLTEw LjVwMS9zc2hkLWF1dGguYworLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoZC1hdXRoLmMJMjAy Ni0wOS0yMSAwNzowNjowNS40NTUxODQ4MTggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2hk LWF1dGguYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5NzI1NzU4MSArMDIwMAorQEAgLTc3Miw2ICs3 NzIsMjUgQEAKKyAJc3RydWN0IGtleCAqa2V4OworIAlpbnQgcjsKKyAKKysJLyogdGhpcyB1c2Vk IHRvIGJlIGluIHNzaGQuYyB3aGVuIHdlIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorKwkg KiBidXQgbmVlZGVkIHRvIGJlIG1vdmVkIGhlcmUgYXMgZG9fc3NoMl9rZXggaW4gc3NoZC1hdXRo IHdhc24ndAorKwkgKiBwaWNraW5nIHVwIHRoZSBub25lIG9wdGlvbnMuIENKUiA0LzEwLzIwMjUK KysJICovCisrCWlmIChvcHRpb25zLm5vbmVfZW5hYmxlZCA9PSAxKSB7CisrCQlkZWJ1ZygiV0FS TklORzogTm9uZSBjaXBoZXIgZW5hYmxlZCIpOworKwkJY2hhciAqb2xkX2NpcGhlcnMgPSBvcHRp b25zLmNpcGhlcnM7CisrCQl4YXNwcmludGYoJm9wdGlvbnMuY2lwaGVycywgIiVzLG5vbmUiLCBv bGRfY2lwaGVycyk7CisrCQlmcmVlKG9sZF9jaXBoZXJzKTsKKysKKysJCS8qIG9ubHkgZW5hYmxl IHRoZSBub25lIE1BQyBpbiBjb250ZXh0IG9mIHRoZSBub25lIGNpcGhlciAtY2pyICovCisrCQlp ZiAob3B0aW9ucy5ub25lbWFjX2VuYWJsZWQgPT0gMSkgeworKwkJCWRlYnVnKCJXQVJOSU5HOiBO b25lIE1BQyBlbmFibGVkIik7CisrCQkJY2hhciAqb2xkX21hY3MgPSBvcHRpb25zLm1hY3M7Cisr CQkJeGFzcHJpbnRmKCZvcHRpb25zLm1hY3MsICIlcyxub25lIiwgb2xkX21hY3MpOworKwkJCWZy ZWUob2xkX21hY3MpOworKwkJfQorKwl9CisrCisgCXNzaF9wYWNrZXRfc2V0X3Jla2V5X2xpbWl0 cyhzc2gsIG9wdGlvbnMucmVrZXlfbGltaXQsCisgCSAgICBvcHRpb25zLnJla2V5X2ludGVydmFs KTsKKyAKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGQuYyBvcGVuc3NoLTEwLjVw MS9zc2hkLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGQuYwkyMDI2LTA5LTIxIDA3OjA2 OjA1LjMzNTY2NDk2NCArMDIwMAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaGQuYwkyMDI2LTA5LTIx IDA3OjA2OjU5Ljg5NzU3MzA5OCArMDIwMAorQEAgLTgyNiw2ICs4MjYsOCBAQAorIAlpbnQgcmV0 LCBsaXN0ZW5fc29jazsKKyAJc3RydWN0IGFkZHJpbmZvICphaTsKKyAJY2hhciBudG9wW05JX01B WEhPU1RdLCBzdHJwb3J0W05JX01BWFNFUlZdOworKwlpbnQgc29ja3NpemU7CisrCWludCBzb2Nr c2l6ZWxlbiA9IHNpemVvZihpbnQpOworIAorIAlmb3IgKGFpID0gbGEtPmFkZHJzOyBhaTsgYWkg PSBhaS0+YWlfbmV4dCkgeworIAkJaWYgKGFpLT5haV9mYW1pbHkgIT0gQUZfSU5FVCAmJiBhaS0+ YWlfZmFtaWx5ICE9IEFGX0lORVQ2KQorQEAgLTg0MSwxMSArODQzLDE4IEBACisgCQkJY29udGlu dWU7CisgCQl9CisgCQkvKiBDcmVhdGUgc29ja2V0IGZvciBsaXN0ZW5pbmcuICovCistCQlsaXN0 ZW5fc29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCistCQkgICAg YWktPmFpX3Byb3RvY29sKTsKKysJCWlmIChvcHRpb25zLnVzZV9tcHRjcCkKKysJCQlsaXN0ZW5f c29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCisrCQkJICAgIElQ UFJPVE9fTVBUQ1ApOworKwkJZWxzZQorKwkJCWxpc3Rlbl9zb2NrID0gc29ja2V0KGFpLT5haV9m YW1pbHksIGFpLT5haV9zb2NrdHlwZSwKKysJCQkgICAgYWktPmFpX3Byb3RvY29sKTsKKysKKyAJ CWlmIChsaXN0ZW5fc29jayA9PSAtMSkgeworIAkJCS8qIGtlcm5lbCBtYXkgbm90IHN1cHBvcnQg aXB2NiAqLworIAkJCXZlcmJvc2UoInNvY2tldDogJS4xMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsK KysJCQlpZiAob3B0aW9ucy51c2VfbXB0Y3ApCisrCQkJCXZlcmJvc2UoIk1QVENQIHJlcXVlc3Rl ZCBidXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIik7CisgCQkJY29udGludWU7CisgCQl9CisgCQlp ZiAoc2V0X25vbmJsb2NrKGxpc3Rlbl9zb2NrKSA9PSAtMSkgeworQEAgLTg3MSw2ICs4ODAsMTAg QEAKKyAKKyAJCWRlYnVnKCJCaW5kIHRvIHBvcnQgJXMgb24gJXMuIiwgc3RycG9ydCwgbnRvcCk7 CisgCisrCQlnZXRzb2Nrb3B0KGxpc3Rlbl9zb2NrLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsCisr CQkJCSAgICZzb2Nrc2l6ZSwgJnNvY2tzaXplbGVuKTsKKysJCWRlYnVnKCJTZXJ2ZXIgVENQIFJX SU4gc29ja2V0IHNpemU6ICVkIiwgc29ja3NpemUpOworKworIAkJLyogQmluZCB0aGUgc29ja2V0 IHRvIHRoZSBkZXNpcmVkIHBvcnQuICovCisgCQlpZiAoYmluZChsaXN0ZW5fc29jaywgYWktPmFp X2FkZHIsIGFpLT5haV9hZGRybGVuKSA9PSAtMSkgeworIAkJCWVycm9yKCJCaW5kIHRvIHBvcnQg JXMgb24gJXMgZmFpbGVkOiAlLjIwMHMuIiwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmln L3NzaGRfY29uZmlnIG9wZW5zc2gtMTAuNXAxL3NzaGRfY29uZmlnCistLS0gb3BlbnNzaC0xMC41 cDEub3JpZy9zc2hkX2NvbmZpZwkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2NjU1NzI5NCArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL3NzaGRfY29uZmlnCTIwMjYtMDktMjEgMDc6NTk6MjEuODMzMjY3 MTAzICswMjAwCitAQCAtMTgsNyArMTgsNyBAQAorICMgU0VMaW51eCBhYm91dCB0aGlzIGNoYW5n ZS4KKyAjIHNlbWFuYWdlIHBvcnQgLWEgLXQgc3NoX3BvcnRfdCAtcCB0Y3AgI1BPUlROVU1CRVIK KyAjCistI1BvcnQgMjIKKytQb3J0IDIyMjIKKyAjQWRkcmVzc0ZhbWlseSBhbnkKKyAjTGlzdGVu QWRkcmVzcyAwLjAuMC4wCisgI0xpc3RlbkFkZHJlc3MgOjoKK0BAIC0xMjMsNiArMTIzLDcgQEAK KyAjUGVybWl0VHVubmVsIG5vCisgI0Nocm9vdERpcmVjdG9yeSBub25lCisgI1ZlcnNpb25BZGRl bmR1bSBub25lCisrI1VzZU1QVENQIG5vCisgCisgIyBubyBkZWZhdWx0IGJhbm5lciBwYXRoCisg I0Jhbm5lciBub25lCitAQCAtMTMwLDYgKzEzMSwxOSBAQAorICMgb3ZlcnJpZGUgZGVmYXVsdCBv ZiBubyBzdWJzeXN0ZW1zCisgU3Vic3lzdGVtCXNmdHAJL3Vzci9saWJleGVjL3NmdHAtc2VydmVy CisgCisrIyB0aGUgZm9sbG93aW5nIGFyZSBIUE4gcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlv bnMKKysjIHRjcCByZWNlaXZlIGJ1ZmZlciBwb2xsaW5nLiBkaXNhYmxlIGluIG5vbiBhdXRvdHVu aW5nIGtlcm5lbHMKKysjVGNwUmN2QnVmUG9sbCB5ZXMKKysKKysjIGRpc2FibGUgaHBuIHBlcmZv cm1hbmNlIGJvb3N0cworKyNIUE5EaXNhYmxlZCBubworKworKyMgYWxsb3cgdGhlIHVzZSBvZiB0 aGUgbm9uZSBjaXBoZXIKKysjTm9uZUVuYWJsZWQgbm8KKysKKysjIGFsbG93IHRoZSB1c2Ugb2Yg dGhlIG5vbmUgTUFDCisrI05vbmVNYWNFbmFibGVkIG5vCisrCisgIyBFeGFtcGxlIG9mIG92ZXJy aWRpbmcgc2V0dGluZ3Mgb24gYSBwZXItdXNlciBiYXNpcworICNNYXRjaCBVc2VyIGFub25jdnMK KyAjCVgxMUZvcndhcmRpbmcgbm8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGRf Y29uZmlnLjUgb3BlbnNzaC0xMC41cDEvc3NoZF9jb25maWcuNQorLS0tIG9wZW5zc2gtMTAuNXAx Lm9yaWcvc3NoZF9jb25maWcuNQkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2NjY5NDc3MSArMDIwMAor KysrIG9wZW5zc2gtMTAuNXAxL3NzaGRfY29uZmlnLjUJMjAyNi0wOS0yMSAwNzowNjo1OS44OTgw OTg0ODYgKzAyMDAKK0BAIC01Niw2ICs1NiwxNiBAQAorIC5QcSBcJiIKKyBpbiBvcmRlciB0byBy ZXByZXNlbnQgYXJndW1lbnRzIGNvbnRhaW5pbmcgc3BhY2VzLgorIC5QcAorKy5YciBocG5zc2hk IDgKKytpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggT3BlblNTSCdzIHNzaGQgYW5kIHVzZXMgdGhl IHNhbWUgY29uZmlndXJhdGlvbiBmb3JtYXQsIGRpcmVjdGl2ZXMsIGFuZCBvcHRpb25zLgorKy5Y ciBocG5zc2hkIDgKKytjYW4gdXNlIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gZmlsZSBhcworKy5Y ciBzc2hkIDgKKyt0aG91Z2ggdGhlIGludmVyc2UgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuIFRo aXMgaXMgYmVjYXVzZQorKy5YciBocG5zc2ggOAorK2hhcyBzb21lIGFkZGl0aW9uYWwgb3B0aW9u cyB3aGljaCBhcmUgZGlzY3Vzc2VkIGJlbG93LiBBcyBzdWNoIGFkbWluaXN0cmF0b3JzIHNob3Vs ZCBtYWludGFpbgorK3NlcGVyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGVhY2guCisrLlBw CisgVGhlIHBvc3NpYmxlCisga2V5d29yZHMgYW5kIHRoZWlyIG1lYW5pbmdzIGFyZSBhcyBmb2xs b3dzIChub3RlIHRoYXQKKyBrZXl3b3JkcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgYXJndW1l bnRzIGFyZSBjYXNlLXNlbnNpdGl2ZSk6CitAQCAtNjc4LDYgKzY4OCwxMCBAQAorIFRDUCBhbmQg U3RyZWFtTG9jYWwuCisgVGhpcyBvcHRpb24gb3ZlcnJpZGVzIGFsbCBvdGhlciBmb3J3YXJkaW5n LXJlbGF0ZWQgb3B0aW9ucyBhbmQgbWF5Cisgc2ltcGxpZnkgcmVzdHJpY3RlZCBjb25maWd1cmF0 aW9ucy4KKysuSXQgQ20gRGlzYWJsZU1UQUVTCisrU3dpdGNoIHRoZSBlbmNyeXB0aW9uIGNpcGhl ciBiZWluZyB1c2VkIGZyb20gdGhlIG11bHRpdGhyZWFkZWQgTVQtQUVTLUNUUiBjaXBoZXIKKyti YWNrIHRvIHRoZSBzdG9jayBzaW5nbGUtdGhyZWFkZWQgQUVTLUNUUiBjaXBoZXIuIERlZmF1bHQg aXMgCisrLkNtIG5vLiBIUE5TU0ggb25seS4gCisgLkl0IENtIEV4cG9zZUF1dGhJbmZvCisgV3Jp dGVzIGEgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyBhIGxpc3Qgb2YgYXV0aGVudGljYXRpb24g bWV0aG9kcyBhbmQKKyBwdWJsaWMgY3JlZGVudGlhbHMgKGUuZy4ga2V5cykgdXNlZCB0byBhdXRo ZW50aWNhdGUgdGhlIHVzZXIuCitAQCAtMTAzOCw2ICsxMDUyLDExIEBACisgdGhhdCB0aGUgc2Vy dmVyIG9mZmVycy4KKyBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2lnbmF0dXJlIGFsZ29yaXRobXMg bWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKKyAuUXEgc3NoIC1RIEhvc3RLZXlBbGdvcml0aG1z IC4KKysuSXQgQ20gSFBORGlzYWJsZWQKKytJbiBzb21lIHNpdHVhdGlvbnMsIHN1Y2ggYXMgdHJh bnNmZXJzIG9uIGEgbG9jYWwgYXJlYSBuZXR3b3JrLCB0aGUgaW1wYWN0Cisrb2YgdGhlIEhQTiBj b2RlIHByb2R1Y2VzIGEgbmV0IGRlY3JlYXNlIGluIHBlcmZvcm1hbmNlLiBJbiB0aGVzZSBjYXNl cyBpdCBpcworK2hlbHBmdWwgdG8gZGlzYWJsZSB0aGUgSFBOIGZ1bmN0aW9uYWxpdHkuIEJ5IGRl ZmF1bHQgSFBORGlzYWJsZWQgaXMgc2V0IHRvIAorKy5DbSBuby4KKyAuSXQgQ20gSWdub3JlUmhv c3RzCisgU3BlY2lmaWVzIHdoZXRoZXIgdG8gaWdub3JlIHBlci11c2VyCisgLlBhIC5yaG9zdHMK K0BAIC0xNTYyLDYgKzE1ODEsMTkgQEAKKyBrZXkgZXhjaGFuZ2UgbWV0aG9kcy4KKyBUaGUgZGVm YXVsdCBpcworIC5QYSAvZXRjL21vZHVsaSAuCisrLkl0IENtIE5vbmVFbmFibGVkCisrRW5hYmxl IG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBjaXBoZXIuIENhcmUgbXVzdCBhbHdheXMg YmUgdXNlZAorK3doZW4gZW5hYmxpbmcgdGhpcyBhcyBpdCB3aWxsIGFsbG93IHVzZXJzIHRvIHNl bmQgZGF0YSBpbiB0aGUgY2xlYXIuIEhvd2V2ZXIsCisraXQgaXMgaW1wb3J0YW50IHRvIG5vdGUg dGhhdCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiByZW1haW5zIGVuY3J5cHRlZAorK2V2ZW4g aWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gRGVmYXVsdCBpcyAKKysuQ20gbm8KKysuSXQgQ20g Tm9uZU1hY0VuYWJsZWQKKytFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIE1B Qy4gV2hlbiB0aGlzIGlzIGVuYWJsZWQgc3NoCisrd2lsbCAqbm90KiBwcm92aWRlIGRhdGEgaW50 ZWdyaXR5IG9mIGFueSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkIGJldHdlZW4gaG9zdHMuIFVzZQor K3dpdGggY2F1dGlvbiBhcyBpdCwgdW5saWtlIGp1c3QgdXNpbmcgTm9uZUVuYWJsZWQsIGRvZXNu J3QgcHJvdmlkZSBkYXRhIGludGVncml0eSBhbmQKKytwcm90ZWN0aW9uIGFnYWluc3QgbWFuLWlu LXRoZS1taWRkbGUgYXR0YWNrcy4gQXMgd2l0aCBOb25lRW5hYmxlZCBhbGwgYXV0aGVudGljYXRp b24KKytyZW1haW5zIGVuY3J5cHRlZCBhbmQgaW50ZWdyaXR5IGlzIGVuc3VyZWQuIERlZmF1bHQg aXMgCisrLkNtIG5vLgorIC5JdCBDbSBQQU1TZXJ2aWNlTmFtZQorIFNwZWNpZmllcyB0aGUgc2Vy dmljZSBuYW1lIHVzZWQgZm9yIFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzIChQQU0p CisgYXV0aGVudGljYXRpb24sIGF1dGhvcmlzYXRpb24gYW5kIHNlc3Npb24gY29udHJvbHMgd2hl bgorQEAgLTIxMzgsNiArMjE3MCwxMyBAQAorIC5QcAorIFRvIGRpc2FibGUgVENQIGtlZXBhbGl2 ZSBtZXNzYWdlcywgdGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8KKyAuQ20gbm8gLgorKy5JdCBD bSBUY3BSY3ZCdWZQb2xsCisrRW5hYmxlIG9mIGRpc2FibGUgdGhlIHBvbGxpbmcgb2YgdGhlIHRj cCByZWNlaXZlIGJ1ZmZlciB0aHJvdWdob3V0IHRoZSBsaWZlCisrb2YgdGhlIGNvbm5lY3Rpb24u IE1ha2Ugc3VyZSB0aGF0IHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgZm9yIHN5c3RlbXMgbWFraW5n IAorK3VzZSBvZiBhdXRvdHVuaW5nIGtlcm5lbHMgKGxpbnV4IDIuNC4yNCssIDIuNiwgTVMgVmlz dGEpIGluIG9yZGVyIHRvCisrbWF4aW1pemUgdGhyb3VnaHB1dCBvbiBoaWdoIHBlcmZvcm1hbmNl IG5ldHdvcmtzLiAKKytEZWZhdWx0IGlzIAorKy5DbSB5ZXMuCisgLkl0IENtIFRydXN0ZWRVc2Vy Q0FLZXlzCisgU3BlY2lmaWVzIGEgZmlsZSBjb250YWluaW5nIHB1YmxpYyBrZXlzIG9mIGNlcnRp ZmljYXRlIGF1dGhvcml0aWVzIHRoYXQgYXJlCisgdHJ1c3RlZCB0byBzaWduIHVzZXIgY2VydGlm aWNhdGVzIGZvciBhdXRoZW50aWNhdGlvbiwgb3IKK0BAIC0yMTk4LDYgKzIyMzcsMTIgQEAKKyAu Q20gTWF0Y2gKKyAuQ20gSG9zdAorIGRpcmVjdGl2ZXMuCisrLkl0IENtIFVzZU1QVENQCisrSWYg c2V0IHRvCisrLkNtIHllcyAsCisrdGhpcyB3aWxsIGVuYWJsZSBNdWx0aXBhdGggVENQIChNUFRD UCkgaW5zdGVhZCBvZiBUQ1AgKHRoaXMgb25seSB3b3JrcyBvbiBMaW51eCkuCisrVGhlIGRlZmF1 bHQgaXMKKysuQ20gbm8gLgorIC5JdCBDbSBVc2VQQU0KKyBFbmFibGVzIHRoZSBQbHVnZ2FibGUg QXV0aGVudGljYXRpb24gTW9kdWxlIGludGVyZmFjZS4KKyBJZiBzZXQgdG8KK0BAIC0yNDQzLDMg KzI0ODgsMTEgQEAKKyBhbmQKKyAuQW4gTWFya3VzIEZyaWVkbAorIGNvbnRyaWJ1dGVkIHN1cHBv cnQgZm9yIHByaXZpbGVnZSBzZXBhcmF0aW9uLgorKy5BbiBDaHJpcyBSYXBpZXIsIAorKy5BbiBN aWNoYWVsIFN0ZXZlbnMsIAorKy5BbiBCZW4gQmVubmV0LCAKKythbmQgCisrLkFuIE1pa2UgVGFz b3RhIAorK2RldmVsb3BlZCB0aGUgSFBOIGV4dGVuc2lvbnMgYXQgdGhlIFBpdHRzYnVyZ2ggU3Vw ZXJjb211dGluZyBDZW50ZXIgCisrd2l0aCBncmFudHMgZnJvbSBDaXNjbywgdGhlIE5hdGlvbmFs IExpYnJhcnkgb2YgTWVkaWNpbmUsIGFuZCAKKyt0aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0 aW9uLiAKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5vcmlnL3NzaGQtc2Vzc2lvbi5jIG9wZW5z c2gtMTAuNXAxL3NzaGQtc2Vzc2lvbi5jCistLS0gb3BlbnNzaC0xMC41cDEub3JpZy9zc2hkLXNl c3Npb24uYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjU2NzE2OTE2NSArMDIwMAorKysrIG9wZW5zc2gt MTAuNXAxL3NzaGQtc2Vzc2lvbi5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODk4NDA1MjM3ICswMjAw CitAQCAtMTEwNyw2ICsxMTA3LDIwIEBACisgCX0KKyAJZW5kcHdlbnQoKTsKKyAKKysJLyogZ2V0 IE5PTkUgb3B0aW9ucyAqLworKwlpZiAob3B0aW9ucy5ub25lX2VuYWJsZWQgPT0gMSkgeworKwkJ Y2hhciAqb2xkX2NpcGhlcnMgPSBvcHRpb25zLmNpcGhlcnM7CisrCQl4YXNwcmludGYoJm9wdGlv bnMuY2lwaGVycywgIiVzLG5vbmUiLCBvbGRfY2lwaGVycyk7CisrCQlmcmVlKG9sZF9jaXBoZXJz KTsKKysKKysJCS8qIG9ubHkgZW5hYmxlIHRoZSBub25lIE1BQyBpbiBjb250ZXh0IG9mIHRoZSBu b25lIGNpcGhlciAtY2pyICovCisrCQlpZiAob3B0aW9ucy5ub25lbWFjX2VuYWJsZWQgPT0gMSkg eworKwkJCWNoYXIgKm9sZF9tYWNzID0gb3B0aW9ucy5tYWNzOworKwkJCXhhc3ByaW50Zigmb3B0 aW9ucy5tYWNzLCAiJXMsbm9uZSIsIG9sZF9tYWNzKTsKKysJCQlmcmVlKG9sZF9tYWNzKTsKKysJ CX0KKysJfQorKworIAlpZiAoIWRlYnVnX2ZsYWcgJiYgIWluZXRkX2ZsYWcpIHsKKyAJCWlmICgo c3RhcnR1cF9waXBlID0gZHVwKFJFRVhFQ19DT05GSUdfUEFTU19GRCkpID09IC0xKQorIAkJCWZh dGFsKCJpbnRlcm5hbCBlcnJvcjogbm8gc3RhcnR1cCBwaXBlIik7CitAQCAtMTMyMCw2ICsxMzM0 LDkgQEAKKyAJICAgIHJkb21haW4gPT0gTlVMTCA/ICIiIDogIlwiIik7CisgCWZyZWUobGFkZHIp OworIAorKwkvKiBzZXQgdGhlIEhQTiBvcHRpb25zIGZvciB0aGUgY2hpbGQgKi8KKysJY2hhbm5l bF9zZXRfaHBuX2Rpc2FibGVkKG9wdGlvbnMuaHBuX2Rpc2FibGVkKTsKKysKKyAJLyoKKyAJICog V2UgZG9uJ3Qgd2FudCB0byBsaXN0ZW4gZm9yZXZlciB1bmxlc3MgdGhlIG90aGVyIHNpZGUKKyAJ ICogc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZXMgaXRzZWxmLiAgU28gd2Ugc2V0IHVwIGFuIGFs YXJtIHdoaWNoIGlzCitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy9zc2guaCBvcGVuc3No LTEwLjVwMS9zc2guaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvc3NoLmgJMjAyNi0wOC0xMSAw NDoyMjoxNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjVwMS9zc2guaAkyMDI2LTA5 LTIxIDExOjMyOjAzLjExNDU1MTczNiArMDIwMAorQEAgLTE0LDYgKzE0LDcgQEAKKyAKKyAvKiBE ZWZhdWx0IHBvcnQgbnVtYmVyLiAqLworICNkZWZpbmUgU1NIX0RFRkFVTFRfUE9SVAkyMgorKyNk ZWZpbmUgSFBOU1NIX0RFRkFVTFRfUE9SVCAgICAyMjIyCisgCisgLyoKKyAgKiBNYXhpbXVtIG51 bWJlciBvZiBjZXJ0aWZpY2F0ZSBmaWxlcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQKK0BAIC00Myw3 ICs0NCw3IEBACisgICogTmFtZSBmb3IgdGhlIHNlcnZpY2UuICBUaGUgcG9ydCBuYW1lZCBieSB0 aGlzIHNlcnZpY2Ugb3ZlcnJpZGVzIHRoZQorICAqIGRlZmF1bHQgcG9ydCBpZiBwcmVzZW50Lgor ICAqLworLSNkZWZpbmUgU1NIX1NFUlZJQ0VfTkFNRQkic3NoIgorKyNkZWZpbmUgU1NIX1NFUlZJ Q0VfTkFNRQkiaHBuc3NoIgorIAorIC8qCisgICogTmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFy aWFibGUgY29udGFpbmluZyB0aGUgcHJvY2VzcyBJRCBvZiB0aGUKK2RpZmYgLU51ciBvcGVuc3No LTEwLjVwMS5vcmlnL3NzaGtleS5jIG9wZW5zc2gtMTAuNXAxL3NzaGtleS5jCistLS0gb3BlbnNz aC0xMC41cDEub3JpZy9zc2hrZXkuYwkyMDI2LTA5LTIxIDA3OjA2OjA1LjUzMDA3Njg5NSArMDIw MAorKysrIG9wZW5zc2gtMTAuNXAxL3NzaGtleS5jCTIwMjYtMDktMjEgMDc6MDY6NTkuODk4NzE1 NDg2ICswMjAwCitAQCAtMTc2Myw3ICsxNzYzLDggQEAKKyAJICAgIHN0ZGVycik7CisgI2VuZGlm CisgCWlmICgociA9IGNpcGhlcl9pbml0KCZjY3R4LCBjaXBoZXIsIGtleWl2LCBjaXBoZXJfa2V5 bGVuKGNpcGhlciksCistCSAgICBrZXlpdiArIGNpcGhlcl9rZXlsZW4oY2lwaGVyKSwgY2lwaGVy X2l2bGVuKGNpcGhlciksIDEpKSAhPSAwKQorKwkgICAga2V5aXYgKyBjaXBoZXJfa2V5bGVuKGNp cGhlciksIGNpcGhlcl9pdmxlbihjaXBoZXIpLCAwLAorKwkgICAgQ0lQSEVSX0VOQ1JZUFQsIENJ UEhFUl9TRVJJQUwpKSAhPSAwKQorIAkJZ290byBvdXQ7CisgCisgCS8qIFNlcmlhbGlzZSBhbmQg ZW5jcnlwdCB0aGUgcHJpdmF0ZSBrZXkgdXNpbmcgdGhlIGVwaGVtZXJhbCBrZXkgKi8KK0BAIC0x ODk3LDcgKzE4OTgsOCBAQAorIAkgICAga2V5aXYsIFNTSF9ESUdFU1RfTUFYX0xFTkdUSCkpICE9 IDApCisgCQlnb3RvIG91dDsKKyAJaWYgKChyID0gY2lwaGVyX2luaXQoJmNjdHgsIGNpcGhlciwg a2V5aXYsIGNpcGhlcl9rZXlsZW4oY2lwaGVyKSwKKy0JICAgIGtleWl2ICsgY2lwaGVyX2tleWxl bihjaXBoZXIpLCBjaXBoZXJfaXZsZW4oY2lwaGVyKSwgMCkpICE9IDApCisrCSAgICBrZXlpdiAr IGNpcGhlcl9rZXlsZW4oY2lwaGVyKSwgY2lwaGVyX2l2bGVuKGNpcGhlciksIDAsCisrCSAgICBD SVBIRVJfREVDUllQVCwgQ0lQSEVSX1NFUklBTCkpICE9IDApCisgCQlnb3RvIG91dDsKKyAjaWZk ZWYgREVCVUdfUEsKKyAJZnByaW50ZihzdGRlcnIsICIlczoga2V5K2l2XG4iLCBfX2Z1bmNfXyk7 CitAQCAtMjk0NSw2ICsyOTQ3LDEzIEBACisgCQlrZGZuYW1lID0gIm5vbmUiOworIAl9IGVsc2Ug aWYgKGNpcGhlcm5hbWUgPT0gTlVMTCkKKyAJCWNpcGhlcm5hbWUgPSBERUZBVUxUX0NJUEhFUk5B TUU7CisrCS8qCisrCSAqIE5PVEU6IFdpdGhvdXQgT3BlblNTTCwgdGhpcyBzdHJpbmcgY29tcGFy aXNvbiBpcyBzdGlsbCBzYWZlLCBldmVuCisrCSAqIHRob3VnaCBpdCB3aWxsIG5ldmVyIG1hdGNo IGJlY2F1c2UgdGhlIG11bHRpdGhyZWFkZWQgY2lwaGVyIGlzIG5vdAorKwkgKiBlbmFibGVkLgor KwkgKi8KKysJZWxzZSBpZiAoc3RyY21wKGNpcGhlcm5hbWUsICJjaGFjaGEyMC1wb2x5MTMwNS1t dEBocG5zc2gub3JnIikgPT0gMCkKKysJCWNpcGhlcm5hbWUgPSAiY2hhY2hhMjAtcG9seTEzMDVA b3BlbnNzaC5jb20iOworIAlpZiAoKGNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKGNpcGhlcm5hbWUp KSA9PSBOVUxMKSB7CisgCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworIAkJZ290byBv dXQ7CitAQCAtMjk4MCw3ICsyOTg5LDcgQEAKKyAJCWdvdG8gb3V0OworIAl9CisgCWlmICgociA9 IGNpcGhlcl9pbml0KCZjaXBoZXJjb250ZXh0LCBjaXBoZXIsIGtleSwga2V5bGVuLAorLQkgICAg a2V5ICsga2V5bGVuLCBpdmxlbiwgMSkpICE9IDApCisrCSAgICBrZXkgKyBrZXlsZW4sIGl2bGVu LCAwLCBDSVBIRVJfRU5DUllQVCwgQ0lQSEVSX1NFUklBTCkpICE9IDApCisgCQlnb3RvIG91dDsK KyAKKyAJaWYgKChyID0gc3NoYnVmX3B1dChlbmNvZGVkLCBBVVRIX01BR0lDLCBzaXplb2YoQVVU SF9NQUdJQykpKSAhPSAwIHx8CitAQCAtMzE2Niw2ICszMTc1LDggQEAKKyAJICAgIChyID0gc3No YnVmX2dldF91MzIoZGVjb2RlZCwgJmVuY3J5cHRlZF9sZW4pKSAhPSAwKQorIAkJZ290byBvdXQ7 CisgCisrCWlmIChzdHJjbXAoY2lwaGVybmFtZSwgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNz aC5vcmciKSA9PSAwKQorKwkJc3RyY3B5KGNpcGhlcm5hbWUsICJjaGFjaGEyMC1wb2x5MTMwNUBv cGVuc3NoLmNvbSIpOworIAlpZiAoKGNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKGNpcGhlcm5hbWUp KSA9PSBOVUxMKSB7CisgCQlyID0gU1NIX0VSUl9LRVlfVU5LTk9XTl9DSVBIRVI7CisgCQlnb3Rv IG91dDsKK0BAIC0zMjIxLDcgKzMyMzIsNyBAQAorIAkvKiBkZWNyeXB0IHByaXZhdGUgcG9ydGlv biBvZiBrZXkgKi8KKyAJaWYgKChyID0gc3NoYnVmX3Jlc2VydmUoZGVjcnlwdGVkLCBlbmNyeXB0 ZWRfbGVuLCAmZHApKSAhPSAwIHx8CisgCSAgICAociA9IGNpcGhlcl9pbml0KCZjaXBoZXJjb250 ZXh0LCBjaXBoZXIsIGtleSwga2V5bGVuLAorLQkgICAga2V5ICsga2V5bGVuLCBpdmxlbiwgMCkp ICE9IDApCisrCSAgICBrZXkgKyBrZXlsZW4sIGl2bGVuLCAwLCBDSVBIRVJfREVDUllQVCwgQ0lQ SEVSX1NFUklBTCkpICE9IDApCisgCQlnb3RvIG91dDsKKyAJaWYgKChyID0gY2lwaGVyX2NyeXB0 KGNpcGhlcmNvbnRleHQsIDAsIGRwLCBzc2hidWZfcHRyKGRlY29kZWQpLAorIAkgICAgZW5jcnlw dGVkX2xlbiwgMCwgYXV0aGxlbikpICE9IDApIHsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjVwMS5v cmlnL3VtYWMuYyBvcGVuc3NoLTEwLjVwMS91bWFjLmMKKy0tLSBvcGVuc3NoLTEwLjVwMS5vcmln L3VtYWMuYwkyMDI2LTA4LTExIDA0OjIyOjE3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2gt MTAuNXAxL3VtYWMuYwkyMDI2LTA5LTIxIDA3OjA2OjU5Ljg5OTEyMjUyMyArMDIwMAorQEAgLTEz NiwxNSArMTM2LDQ3IEBACisgLyogLS0tIEVuZGlhbiBDb252ZXJzaW9uIC0tLSBGb3JjaW5nIGFz c2VtYmx5IG9uIHNvbWUgcGxhdGZvcm1zICAgICAgICAgICAqLworIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KKyAKKysKKysvKiBVc2luZyBsb2NhbCBzdGF0aWNhbGx5IGRlZmluZWQgdmVyc2lvbnMgb2Yg dGhlIGdldC9wdXQgZnVuY3Rpb25zCisrICogZm91bmQgaW4gbWlzYy5jIGFsbG93cyB0aGVtIHRv IGJlIGlubGluZWQuIFRoaXMgaW1wcm92ZXMgdGhyb3VnaHB1dAorKyAqIHBlcmZvcm1hbmNlIGJ5 IDEwJSB0byAxNSUgb24gd2VsbCBjb25uZWN0ZWQgKDEwR2IvcyspIHN5c3RlbXMuIAorKyAqIENo cmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+IDIwMjItMDMtMDkgKi8KKysKKytzdGF0aWMgIF9f YXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fbWluYnl0ZXNfXywgMSwgNCkpKQorK3VfaW50MzJf dCB1bWFjX2dldF91MzJfbGUoY29uc3Qgdm9pZCAqdnApCisreworKyAgICAgICAgY29uc3QgdV9j aGFyICpwID0gKGNvbnN0IHVfY2hhciAqKXZwOworKyAgICAgICAgdV9pbnQzMl90IHY7CisrCisr ICAgICAgICB2ICA9ICh1X2ludDMyX3QpcFswXTsKKysgICAgICAgIHYgfD0gKHVfaW50MzJfdClw WzFdIDw8IDg7CisrICAgICAgICB2IHw9ICh1X2ludDMyX3QpcFsyXSA8PCAxNjsKKysgICAgICAg IHYgfD0gKHVfaW50MzJfdClwWzNdIDw8IDI0OworKworKyAgICAgICAgcmV0dXJuICh2KTsKKyt9 CisrCisrI2lmIDAgLyogY29tcGlsZSB0aW1lIHdhcm5pbmcgdGhyb3duIG90aGVyd2lzZSAqLwor K3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEsIDQpKSk7 Cisrdm9pZCB1bWFjX3B1dF91MzJfbGUodm9pZCAqdnAsIHVfaW50MzJfdCB2KQorK3sKKysgICAg ICAgIHVfY2hhciAqcCA9ICh1X2NoYXIgKil2cDsKKysKKysgICAgICAgIHBbMF0gPSAodV9jaGFy KXYgJiAweGZmOworKyAgICAgICAgcFsxXSA9ICh1X2NoYXIpKHYgPj4gOCkgJiAweGZmOworKyAg ICAgICAgcFsyXSA9ICh1X2NoYXIpKHYgPj4gMTYpICYgMHhmZjsKKysgICAgICAgIHBbM10gPSAo dV9jaGFyKSh2ID4+IDI0KSAmIDB4ZmY7CisrfQorKyNlbmRpZgorKworICNpZiAoX19MSVRUTEVf RU5ESUFOX18pCisgI2RlZmluZSBMT0FEX1VJTlQzMl9SRVZFUlNFRChwKQkJZ2V0X3UzMihwKQor ICNkZWZpbmUgU1RPUkVfVUlOVDMyX1JFVkVSU0VEKHAsdikJcHV0X3UzMihwLHYpCisgI2Vsc2UK Ky0jZGVmaW5lIExPQURfVUlOVDMyX1JFVkVSU0VEKHApCQlnZXRfdTMyX2xlKHApCistI2RlZmlu ZSBTVE9SRV9VSU5UMzJfUkVWRVJTRUQocCx2KQlwdXRfdTMyX2xlKHAsdikKKysjZGVmaW5lIExP QURfVUlOVDMyX1JFVkVSU0VEKHApCQl1bWFjX2dldF91MzJfbGUocCkKKyAjZW5kaWYKKyAKKy0j ZGVmaW5lIExPQURfVUlOVDMyX0xJVFRMRShwKQkJKGdldF91MzJfbGUocCkpCisrI2RlZmluZSBM T0FEX1VJTlQzMl9MSVRUTEUocCkJCSh1bWFjX2dldF91MzJfbGUocCkpCisgI2RlZmluZSBTVE9S RV9VSU5UMzJfQklHKHAsdikJCXB1dF91MzIocCwgdikKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CitkaWZmIC1OdXIgb3BlbnNzaC0xMC41cDEub3JpZy91dGhhc2guaCBvcGVuc3NoLTEwLjVwMS91 dGhhc2guaAorLS0tIG9wZW5zc2gtMTAuNXAxLm9yaWcvdXRoYXNoLmgJMTk3MC0wMS0wMSAwMTow MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjVwMS91dGhhc2guaAkyMDI2LTA5 LTIxIDA3OjA2OjU5Ljg5OTU0NzIzNSArMDIwMAorQEAgLTAsMCArMSwxMTQwIEBACisrLyoKKytD b3B5cmlnaHQgKGMpIDIwMDMtMjAyMiwgVHJveSBELiBIYW5zb24gIGh0dHBzOi8vdHJveWRoYW5z b24uZ2l0aHViLmlvL3V0aGFzaC8KKytBbGwgcmlnaHRzIHJlc2VydmVkLgorKworK1JlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKworKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICAgICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKwor K1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD T05UUklCVVRPUlMgIkFTCisrSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisrVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisrUEFSVElDVUxBUiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS CisrT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsIFNQRUNJQUwsCisrRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorK1BST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YKKytMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORworK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyovCisrCisrI2lmbmRlZiBVVEhB U0hfSAorKyNkZWZpbmUgVVRIQVNIX0gKKysKKysjZGVmaW5lIFVUSEFTSF9WRVJTSU9OIDIuMy4w CisrCisrI2luY2x1ZGUgPHN0cmluZy5oPiAgIC8qIG1lbWNtcCwgbWVtc2V0LCBzdHJsZW4gKi8K KysjaW5jbHVkZSA8c3RkZGVmLmg+ICAgLyogcHRyZGlmZl90ICovCisrI2luY2x1ZGUgPHN0ZGxp Yi5oPiAgIC8qIGV4aXQgKi8KKysKKysjaWYgZGVmaW5lZChIQVNIX0RFRklORV9PV05fU1RESU5U KSAmJiBIQVNIX0RFRklORV9PV05fU1RESU5UCisrLyogVGhpcyBjb2RlcGF0aCBpcyBwcm92aWRl ZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYnV0IEkgcGxhbiB0byByZW1vdmUgaXQuICov CisrI3dhcm5pbmcgIkhBU0hfREVGSU5FX09XTl9TVERJTlQgaXMgZGVwcmVjYXRlZDsgcGxlYXNl IHVzZSBIQVNIX05PX1NURElOVCBpbnN0ZWFkIgorK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQz Ml90OworK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OworKyNlbGlmIGRlZmluZWQoSEFT SF9OT19TVERJTlQpICYmIEhBU0hfTk9fU1RESU5UCisrI2Vsc2UKKysjaW5jbHVkZSA8c3RkaW50 Lmg+ICAgLyogdWludDhfdCwgdWludDMyX3QgKi8KKysjZW5kaWYKKysKKysvKiBUaGVzZSBtYWNy b3MgdXNlIGRlY2x0eXBlIG9yIHRoZSBlYXJsaWVyIF9fdHlwZW9mIEdOVSBleHRlbnNpb24uCisr ICAgQXMgZGVjbHR5cGUgaXMgb25seSBhdmFpbGFibGUgaW4gbmV3ZXIgY29tcGlsZXJzIChWUzIw MTAgb3IgZ2NjIDQuMysKKysgICB3aGVuIGNvbXBpbGluZyBjKysgc291cmNlKSB0aGlzIGNvZGUg dXNlcyB3aGF0ZXZlciBtZXRob2QgaXMgbmVlZGVkCisrICAgb3IsIGZvciBWUzIwMDggd2hlcmUg bmVpdGhlciBpcyBhdmFpbGFibGUsIHVzZXMgY2FzdGluZyB3b3JrYXJvdW5kcy4gKi8KKysjaWYg IWRlZmluZWQoREVDTFRZUEUpICYmICFkZWZpbmVkKE5PX0RFQ0xUWVBFKQorKyNpZiBkZWZpbmVk KF9NU0NfVkVSKSAgIC8qIE1TIGNvbXBpbGVyICovCisrI2lmIF9NU0NfVkVSID49IDE2MDAgJiYg ZGVmaW5lZChfX2NwbHVzcGx1cykgIC8qIFZTMjAxMCBvciBuZXdlciBpbiBDKysgbW9kZSAqLwor KyNkZWZpbmUgREVDTFRZUEUoeCkgKGRlY2x0eXBlKHgpKQorKyNlbHNlICAgICAgICAgICAgICAg ICAgIC8qIFZTMjAwOCBvciBvbGRlciAob3IgVlMyMDEwIGluIEMgbW9kZSkgKi8KKysjZGVmaW5l IE5PX0RFQ0xUWVBFCisrI2VuZGlmCisrI2VsaWYgZGVmaW5lZChfX01DU1RfXykgIC8qIEVsYnJ1 cyBDIENvbXBpbGVyICovCisrI2RlZmluZSBERUNMVFlQRSh4KSAoX190eXBlb2YoeCkpCisrI2Vs aWYgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19JQ0NBUk1fXykgfHwgZGVmaW5l ZChfX0xDQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQorKyNkZWZpbmUgTk9fREVDTFRZUEUK KysjZWxzZSAgICAgICAgICAgICAgICAgICAvKiBHTlUsIFN1biBhbmQgb3RoZXIgY29tcGlsZXJz ICovCisrI2RlZmluZSBERUNMVFlQRSh4KSAoX190eXBlb2YoeCkpCisrI2VuZGlmCisrI2VuZGlm CisrCisrI2lmZGVmIE5PX0RFQ0xUWVBFCisrI2RlZmluZSBERUNMVFlQRSh4KQorKyNkZWZpbmUg REVDTFRZUEVfQVNTSUdOKGRzdCxzcmMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBjaGFyICoq X2RhX2RzdCA9IChjaGFyKiopKCYoZHN0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgKl9kYV9kc3QgPSAoY2hhciopKHNyYyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgw KQorKyNlbHNlCisrI2RlZmluZSBERUNMVFlQRV9BU1NJR04oZHN0LHNyYykgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIChkc3QpID0gREVDTFRZUEUoZHN0KShzcmMpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysjZW5k aWYKKysKKysjaWZuZGVmIHV0aGFzaF9tYWxsb2MKKysjZGVmaW5lIHV0aGFzaF9tYWxsb2Moc3op IG1hbGxvYyhzeikgICAgICAvKiBtYWxsb2MgZmNuICAgICAgICAgICAgICAgICAgICAgICovCisr I2VuZGlmCisrI2lmbmRlZiB1dGhhc2hfZnJlZQorKyNkZWZpbmUgdXRoYXNoX2ZyZWUocHRyLHN6 KSBmcmVlKHB0cikgICAgIC8qIGZyZWUgZmNuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysj ZW5kaWYKKysjaWZuZGVmIHV0aGFzaF9iemVybworKyNkZWZpbmUgdXRoYXNoX2J6ZXJvKGEsbikg bWVtc2V0KGEsJ1wwJyxuKQorKyNlbmRpZgorKyNpZm5kZWYgdXRoYXNoX3N0cmxlbgorKyNkZWZp bmUgdXRoYXNoX3N0cmxlbihzKSBzdHJsZW4ocykKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBU0hf RlVOQ1RJT04KKysjZGVmaW5lIEhBU0hfRlVOQ1RJT04oa2V5cHRyLGtleWxlbixoYXNodikgSEFT SF9KRU4oa2V5cHRyLCBrZXlsZW4sIGhhc2h2KQorKyNlbmRpZgorKworKyNpZm5kZWYgSEFTSF9L RVlDTVAKKysjZGVmaW5lIEhBU0hfS0VZQ01QKGEsYixuKSBtZW1jbXAoYSxiLG4pCisrI2VuZGlm CisrCisrI2lmbmRlZiB1dGhhc2hfbm9leHBhbmRfZnlpCisrI2RlZmluZSB1dGhhc2hfbm9leHBh bmRfZnlpKHRibCkgICAgICAgICAgLyogY2FuIGJlIGRlZmluZWQgdG8gbG9nIG5vZXhwYW5kICAq LworKyNlbmRpZgorKyNpZm5kZWYgdXRoYXNoX2V4cGFuZF9meWkKKysjZGVmaW5lIHV0aGFzaF9l eHBhbmRfZnlpKHRibCkgICAgICAgICAgICAvKiBjYW4gYmUgZGVmaW5lZCB0byBsb2cgZXhwYW5k cyAgICovCisrI2VuZGlmCisrCisrI2lmbmRlZiBIQVNIX05PTkZBVEFMX09PTQorKyNkZWZpbmUg SEFTSF9OT05GQVRBTF9PT00gMAorKyNlbmRpZgorKworKyNpZiBIQVNIX05PTkZBVEFMX09PTQor Ky8qIG1hbGxvYyBmYWlsdXJlcyBjYW4gYmUgcmVjb3ZlcmVkIGZyb20gKi8KKysKKysjaWZuZGVm IHV0aGFzaF9ub25mYXRhbF9vb20KKysjZGVmaW5lIHV0aGFzaF9ub25mYXRhbF9vb20ob2JqKSBk byB7fSB3aGlsZSAoMCkgICAgLyogbm9uLWZhdGFsIE9PTSBlcnJvciAqLworKyNlbmRpZgorKwor KyNkZWZpbmUgSEFTSF9SRUNPUkRfT09NKG9vbWVkKSBkbyB7IChvb21lZCkgPSAxOyB9IHdoaWxl ICgwKQorKyNkZWZpbmUgSUZfSEFTSF9OT05GQVRBTF9PT00oeCkgeAorKworKyNlbHNlCisrLyog bWFsbG9jIGZhaWx1cmVzIHJlc3VsdCBpbiBsb3N0IG1lbW9yeSwgaGFzaCB0YWJsZXMgYXJlIHVu dXNhYmxlICovCisrCisrI2lmbmRlZiB1dGhhc2hfZmF0YWwKKysjZGVmaW5lIHV0aGFzaF9mYXRh bChtc2cpIGV4aXQoLTEpICAgICAgICAvKiBmYXRhbCBPT00gZXJyb3IgKi8KKysjZW5kaWYKKysK KysjZGVmaW5lIEhBU0hfUkVDT1JEX09PTShvb21lZCkgdXRoYXNoX2ZhdGFsKCJvdXQgb2YgbWVt b3J5IikKKysjZGVmaW5lIElGX0hBU0hfTk9ORkFUQUxfT09NKHgpCisrCisrI2VuZGlmCisrCisr LyogaW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cyAqLworKyNkZWZpbmUgSEFTSF9JTklUSUFMX05V TV9CVUNLRVRTIDMyVSAgICAgLyogaW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cyAgICAgICAgKi8K KysjZGVmaW5lIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VUU19MT0cyIDVVIC8qIGxnMiBvZiBpbml0 aWFsIG51bWJlciBvZiBidWNrZXRzICovCisrI2RlZmluZSBIQVNIX0JLVF9DQVBBQ0lUWV9USFJF U0ggMTBVICAgICAvKiBleHBhbmQgd2hlbiBidWNrZXQgY291bnQgcmVhY2hlcyAqLworKworKy8q IGNhbGN1bGF0ZSB0aGUgZWxlbWVudCB3aG9zZSBoYXNoIGhhbmRsZSBhZGRyZXNzIGlzIGhocCAq LworKyNkZWZpbmUgRUxNVF9GUk9NX0hIKHRibCxoaHApICgodm9pZCopKCgoY2hhciopKGhocCkp IC0gKCh0YmwpLT5oaG8pKSkKKysvKiBjYWxjdWxhdGUgdGhlIGhhc2ggaGFuZGxlIGZyb20gZWxl bWVudCBhZGRyZXNzIGVscCAqLworKyNkZWZpbmUgSEhfRlJPTV9FTE1UKHRibCxlbHApICgoVVRf aGFzaF9oYW5kbGUqKSh2b2lkKikoKChjaGFyKikoZWxwKSkgKyAoKHRibCktPmhobykpKQorKwor KyNkZWZpbmUgSEFTSF9ST0xMQkFDS19CS1QoaGgsIGhlYWQsIGl0ZW1wdHJoaCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKl9oZF9oaF9pdGVtID0gKGl0ZW1wdHJoaCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hkX2JrdDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IEhBU0hfVE9fQktUKF9oZF9oaF9pdGVtLT5oYXNodiwgKGhlYWQpLT5oaC50YmwtPm51bV9idWNr ZXRzLCBfaGRfYmt0KTsgICAgICAgICBcCisrICAoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfaGRf Ymt0XS5jb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg X2hkX2hoX2l0ZW0tPmhoX25leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oZF9oaF9pdGVtLT5oaF9wcmV2ID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3 aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfVkFMVUUoa2V5cHRyLGtleWxlbixoYXNodikgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgSEFTSF9GVU5DVElPTihrZXlwdHIsIGtleWxlbiwgaGFzaHYpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKwor KyNkZWZpbmUgSEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLGhlYWQsa2V5cHRyLGtleWxlbixoYXNo dmFsLG91dCkgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAob3V0KSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYgKGhlYWQpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgdW5zaWduZWQgX2hmX2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfVE9fQktUKGhhc2h2YWwsIChoZWFk KS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hmX2JrdCk7ICAgICAgICAgICAgICAgICAgXAorKyAg ICBpZiAoSEFTSF9CTE9PTV9URVNUKChoZWFkKS0+aGgudGJsLCBoYXNodmFsKSAhPSAwKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBIQVNIX0ZJTkRfSU5fQktUKChoZWFkKS0+ aGgudGJsLCBoaCwgKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbIF9oZl9ia3QgXSwga2V5cHRyLCBr ZXlsZW4sIGhhc2h2YWwsIG91dCk7IFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0ZJ TkQoaGgsaGVhZCxrZXlwdHIsa2V5bGVuLG91dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChvdXQpID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBpZiAoaGVhZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBfaGZf aGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgSEFTSF9WQUxVRShrZXlwdHIsIGtleWxlbiwgX2hmX2hhc2h2KTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfRklORF9CWUhB U0hWQUxVRShoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW4sIF9oZl9oYXNodiwgb3V0KTsgICAgICAg ICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNp ZmRlZiBIQVNIX0JMT09NCisrI2RlZmluZSBIQVNIX0JMT09NX0JJVExFTiAoMVVMIDw8IEhBU0hf QkxPT00pCisrI2RlZmluZSBIQVNIX0JMT09NX0JZVEVMRU4gKEhBU0hfQkxPT01fQklUTEVOLzhV TCkgKyAoKChIQVNIX0JMT09NX0JJVExFTiU4VUwpIT0wVUwpID8gMVVMIDogMFVMKQorKyNkZWZp bmUgSEFTSF9CTE9PTV9NQUtFKHRibCxvb21lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAodGJs KS0+Ymxvb21fbmJpdHMgPSBIQVNIX0JMT09NOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgKHRibCktPmJsb29tX2J2ID0gKHVpbnQ4X3QqKXV0aGFz aF9tYWxsb2MoSEFTSF9CTE9PTV9CWVRFTEVOKTsgICAgICAgICAgICAgICAgIFwKKysgIGlmICgh KHRibCktPmJsb29tX2J2KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfUkVDT1JEX09PTShvb21lZCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgdXRoYXNoX2J6ZXJvKCh0YmwpLT5ibG9vbV9idiwgSEFT SF9CTE9PTV9CWVRFTEVOKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICh0Ymwp LT5ibG9vbV9zaWcgPSBIQVNIX0JMT09NX1NJR05BVFVSRTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgw KQorKworKyNkZWZpbmUgSEFTSF9CTE9PTV9GUkVFKHRibCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICB1dGhhc2hfZnJlZSgodGJsKS0+Ymxvb21fYnYsIEhBU0hfQkxPT01fQllURUxFTik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmlu ZSBIQVNIX0JMT09NX0JJVFNFVChidixpZHgpIChidlsoaWR4KS84VV0gfD0gKDFVIDw8ICgoaWR4 KSU4VSkpKQorKyNkZWZpbmUgSEFTSF9CTE9PTV9CSVRURVNUKGJ2LGlkeCkgKGJ2WyhpZHgpLzhV XSAmICgxVSA8PCAoKGlkeCklOFUpKSkKKysKKysjZGVmaW5lIEhBU0hfQkxPT01fQUREKHRibCxo YXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBIQVNIX0JMT09NX0JJVFNFVCgodGJsKS0+Ymxvb21fYnYsICgoaGFzaHYpICYgKHVpbnQzMl90 KSgoMVVMIDw8ICh0YmwpLT5ibG9vbV9uYml0cykgLSAxVSkpKQorKworKyNkZWZpbmUgSEFTSF9C TE9PTV9URVNUKHRibCxoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIEhBU0hfQkxPT01fQklUVEVTVCgodGJsKS0+Ymxvb21fYnYsICgoaGFz aHYpICYgKHVpbnQzMl90KSgoMVVMIDw8ICh0YmwpLT5ibG9vbV9uYml0cykgLSAxVSkpKQorKwor KyNlbHNlCisrI2RlZmluZSBIQVNIX0JMT09NX01BS0UodGJsLG9vbWVkKQorKyNkZWZpbmUgSEFT SF9CTE9PTV9GUkVFKHRibCkKKysjZGVmaW5lIEhBU0hfQkxPT01fQUREKHRibCxoYXNodikKKysj ZGVmaW5lIEhBU0hfQkxPT01fVEVTVCh0YmwsaGFzaHYpICgxKQorKyNkZWZpbmUgSEFTSF9CTE9P TV9CWVRFTEVOIDBVCisrI2VuZGlmCisrCisrI2RlZmluZSBIQVNIX01BS0VfVEFCTEUoaGgsaGVh ZCxvb21lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2Rv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChoZWFkKS0+aGgudGJsID0gKFVUX2hhc2hfdGFi bGUqKXV0aGFzaF9tYWxsb2Moc2l6ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICBcCisrICBp ZiAoIShoZWFkKS0+aGgudGJsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX1JFQ09SRF9PT00ob29tZWQpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIHV0aGFzaF9iemVybygoaGVhZCktPmhoLnRibCwg c2l6ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAo aGVhZCktPmhoLnRibC0+dGFpbCA9ICYoKGhlYWQpLT5oaCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzID0g SEFTSF9JTklUSUFMX05VTV9CVUNLRVRTOyAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICho ZWFkKS0+aGgudGJsLT5sb2cyX251bV9idWNrZXRzID0gSEFTSF9JTklUSUFMX05VTV9CVUNLRVRT X0xPRzI7ICAgICAgICAgICAgXAorKyAgICAoaGVhZCktPmhoLnRibC0+aGhvID0gKGNoYXIqKSgm KGhlYWQpLT5oaCkgLSAoY2hhciopKGhlYWQpOyAgICAgICAgICAgICAgICAgIFwKKysgICAgKGhl YWQpLT5oaC50YmwtPmJ1Y2tldHMgPSAoVVRfaGFzaF9idWNrZXQqKXV0aGFzaF9tYWxsb2MoICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFMgKiBz aXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgICAgICAgICAgICAgXAorKyAgICAoaGVh ZCktPmhoLnRibC0+c2lnbmF0dXJlID0gSEFTSF9TSUdOQVRVUkU7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKCEoaGVhZCktPmhoLnRibC0+YnVja2V0cykgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgSEFT SF9SRUNPUkRfT09NKG9vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgIHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLCBzaXpl b2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgdXRoYXNoX2J6ZXJvKChoZWFkKS0+aGgudGJsLT5idWNr ZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBI QVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFMgKiBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7 ICAgICAgICAgICAgIFwKKysgICAgICBIQVNIX0JMT09NX01BS0UoKGhlYWQpLT5oaC50YmwsIG9v bWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgSUZfSEFT SF9OT05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKG9vbWVkKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgdXRo YXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHMsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgICAgICBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFMqc2l6 ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICAgICAgICAgXAorKyAgICAgICAgICB1dGhh c2hfZnJlZSgoaGVhZCktPmhoLnRibCwgc2l6ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfUkVQTEFDRV9CWUhBU0hW QUxVRV9JTk9SREVSKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixoYXNodmFsLGFkZCxyZXBs YWNlZCxjbXBmY24pIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAocmVwbGFjZWQp ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgSEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQp LT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIHJlcGxhY2VkKTsgXAorKyAgaWYgKHJl cGxhY2VkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9ERUxFVEUoaGgsIGhlYWQsIHJlcGxhY2VkKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lOT1JERVIo aGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkLCBj bXBmY24pOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfUkVQTEFDRV9CWUhBU0hW QUxVRShoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZhbCxhZGQscmVwbGFjZWQpIFwK KytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAocmVwbGFjZWQpID0gTlVMTDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgSEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5hbWUpLCBr ZXlsZW5faW4sIGhhc2h2YWwsIHJlcGxhY2VkKTsgXAorKyAgaWYgKHJlcGxhY2VkKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgSEFTSF9ERUxFVEUoaGgsIGhlYWQsIHJlcGxhY2VkKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQpLT5maWVs ZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCk7IFwKKyt9IHdoaWxlICgwKQorKworKyNk ZWZpbmUgSEFTSF9SRVBMQUNFKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixhZGQscmVwbGFj ZWQpICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1 bnNpZ25lZCBfaHJfaGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9WQUxVRSgmKChhZGQpLT5maWVsZG5hbWUp LCBrZXlsZW5faW4sIF9ocl9oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhB U0hfUkVQTEFDRV9CWUhBU0hWQUxVRShoaCwgaGVhZCwgZmllbGRuYW1lLCBrZXlsZW5faW4sIF9o cl9oYXNodiwgYWRkLCByZXBsYWNlZCk7IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFT SF9SRVBMQUNFX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGFkZCxyZXBsYWNl ZCxjbXBmY24pICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBf aHJfaGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgSEFTSF9WQUxVRSgmKChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5f aW4sIF9ocl9oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfUkVQTEFD RV9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLCBoZWFkLCBmaWVsZG5hbWUsIGtleWxlbl9pbiwgX2hy X2hhc2h2LCBhZGQsIHJlcGxhY2VkLCBjbXBmY24pOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVm aW5lIEhBU0hfQVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFk ZCktPmhoLm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGQpLT5oaC5wcmV2ID0gRUxNVF9GUk9NX0hIKCho ZWFkKS0+aGgudGJsLCAoaGVhZCktPmhoLnRibC0+dGFpbCk7ICAgICAgICAgICBcCisrICAoaGVh ZCktPmhoLnRibC0+dGFpbC0+bmV4dCA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgKGhlYWQpLT5oaC50YmwtPnRhaWwgPSAmKChhZGQpLT5o aCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxl ICgwKQorKworKyNkZWZpbmUgSEFTSF9BS0JJX0lOTkVSX0xPT1AoaGgsaGVhZCxhZGQsY21wZmNu KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoY21wZmNuKERFQ0xU WVBFKGhlYWQpKF9oc19pdGVyKSwgYWRkKSA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgfSB3aGlsZSAoKF9oc19pdGVyID0gSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJs LCBfaHNfaXRlciktPm5leHQpKTsgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNpZmRl ZiBOT19ERUNMVFlQRQorKyN1bmRlZiBIQVNIX0FLQklfSU5ORVJfTE9PUAorKyNkZWZpbmUgSEFT SF9BS0JJX0lOTkVSX0xPT1AoaGgsaGVhZCxhZGQsY21wZmNuKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBjaGFyICpfaHNf c2F2ZWRfaGVhZCA9IChjaGFyKikoaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgREVDTFRZUEVf QVNTSUdOKGhlYWQsIF9oc19pdGVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIGlmIChjbXBmY24oaGVhZCwgYWRkKSA+IDApIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIERFQ0xUWVBF X0FTU0lHTihoZWFkLCBfaHNfc2F2ZWRfaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICBERUNMVFlQRV9BU1NJR04oaGVhZCwgX2hzX3NhdmVkX2hlYWQpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gd2hpbGUgKChfaHNf aXRlciA9IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0ZXIpLT5uZXh0KSk7ICAg ICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysjZW5kaWYKKysKKysjaWYgSEFTSF9OT05GQVRBTF9P T00KKysKKysjZGVmaW5lIEhBU0hfQUREX1RPX1RBQkxFKGhoLGhlYWQsa2V5cHRyLGtleWxlbl9p bixoYXNodmFsLGFkZCxvb21lZCkgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgaWYgKCEob29tZWQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdW5zaWduZWQgX2hhX2JrdDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMrKzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX1RPX0JLVChoYXNodmFs LCAoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHMsIF9oYV9ia3QpOyAgICAgICAgICAgICAgICAg IFwKKysgICAgSEFTSF9BRERfVE9fQktUKChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19oYV9ia3Rd LCBoaCwgJihhZGQpLT5oaCwgb29tZWQpOyAgICBcCisrICAgIGlmIChvb21lZCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgIEhBU0hfUk9MTEJBQ0tfQktUKGhoLCBoZWFkLCAmKGFkZCktPmhoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBIQVNIX0RFTEVURV9ISChoaCwg aGVhZCwgJihhZGQpLT5oaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgKGFkZCktPmhoLnRibCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHV0aGFzaF9ub25mYXRhbF9vb20o YWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgSEFTSF9CTE9PTV9BREQoKGhlYWQp LT5oaC50YmwsIGhhc2h2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgIEhBU0hfRU1JVF9LRVkoaGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoYWRkKS0+aGgudGJsID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgdXRoYXNoX25vbmZhdGFsX29vbShhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30g d2hpbGUgKDApCisrCisrI2Vsc2UKKysKKysjZGVmaW5lIEhBU0hfQUREX1RPX1RBQkxFKGhoLGhl YWQsa2V5cHRyLGtleWxlbl9pbixoYXNodmFsLGFkZCxvb21lZCkgICAgICAgICAgICBcCisrZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hhX2JrdDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICho ZWFkKS0+aGgudGJsLT5udW1faXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX1RPX0JLVChoYXNodmFsLCAoaGVhZCktPmho LnRibC0+bnVtX2J1Y2tldHMsIF9oYV9ia3QpOyAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFT SF9BRERfVE9fQktUKChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19oYV9ia3RdLCBoaCwgJihhZGQp LT5oaCwgb29tZWQpOyAgICAgIFwKKysgIEhBU0hfQkxPT01fQUREKChoZWFkKS0+aGgudGJsLCBo YXNodmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNI X0VNSVRfS0VZKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbik7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2VuZGlmCisrCisrCisrI2Rl ZmluZSBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5PUkRFUihoaCxoZWFkLGtleXB0cixr ZXlsZW5faW4saGFzaHZhbCxhZGQsY21wZmNuKSBcCisrZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGludCBfaGFfb29tZWQgPSAwOyApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGQpLT5oaC5oYXNodiA9IChoYXNo dmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAoYWRkKS0+aGgua2V5ID0gKGNoYXIqKSAoa2V5cHRyKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFkZCktPmhoLmtleWxlbiA9ICh1bnNp Z25lZCkgKGtleWxlbl9pbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIGlmICghKGhlYWQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChhZGQpLT5oaC5uZXh0ID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAoYWRkKS0+aGgucHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9NQUtFX1RBQkxFKGhoLCBhZGQs IF9oYV9vb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCBpZiAoIV9oYV9vb21lZCkgeyApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIChoZWFkKSA9IChhZGQpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIH0gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICB2b2lkICpfaHNfaXRlciA9IChoZWFkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGFkZCktPmhoLnRibCA9IChoZWFkKS0+aGgu dGJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IEhBU0hfQUtCSV9JTk5FUl9MT09QKGhoLCBoZWFkLCBhZGQsIGNtcGZjbik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoX2hzX2l0ZXIpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAoYWRkKS0+aGgubmV4dCA9IF9oc19pdGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKCgoYWRkKS0+aGgucHJldiA9IEhIX0ZS T01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0ZXIpLT5wcmV2KSkgeyAgICAgXAorKyAgICAg ICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCAoYWRkKS0+aGgucHJldiktPm5leHQgPSAo YWRkKTsgICAgICAgICAgICAgIFwKKysgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAoaGVhZCkgPSAoYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBI SF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19pdGVyKS0+cHJldiA9IChhZGQpOyAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEhB U0hfQVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgSEFTSF9BRERfVE9fVEFCTEUoaGgsIGhlYWQsIGtleXB0ciwg a2V5bGVuX2luLCBoYXNodmFsLCBhZGQsIF9oYV9vb21lZCk7ICAgICAgIFwKKysgIEhBU0hfRlND SyhoaCwgaGVhZCwgIkhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRV9JTk9SREVSIik7ICAgICAg ICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfQUREX0tFWVBU Ul9JTk9SREVSKGhoLGhlYWQsa2V5cHRyLGtleWxlbl9pbixhZGQsY21wZmNuKSAgICAgICAgICAg ICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hzX2hhc2h2OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIEhBU0hfVkFMVUUoa2V5cHRyLCBrZXlsZW5faW4sIF9oc19oYXNodik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0FERF9LRVlQVFJfQllIQVNI VkFMVUVfSU5PUkRFUihoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW5faW4sIF9oc19oYXNodiwgYWRk LCBjbXBmY24pOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfQUREX0JZSEFTSFZB TFVFX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWwsYWRkLGNtcGZj bikgXAorKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lOT1JERVIoaGgsIGhlYWQsICYo KGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkLCBjbXBmY24pCisrCisr I2RlZmluZSBIQVNIX0FERF9JTk9SREVSKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixhZGQs Y21wZmNuKSAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9BRERfS0VZUFRSX0lOT1JERVIoaGgs IGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgYWRkLCBjbXBmY24pCisrCisr I2RlZmluZSBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUUoaGgsaGVhZCxrZXlwdHIsa2V5bGVu X2luLGhhc2h2YWwsYWRkKSAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IElGX0hBU0hfTk9ORkFUQUxfT09NKCBpbnQgX2hhX29vbWVkID0gMDsgKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoYWRkKS0+aGguaGFzaHYgPSAoaGFzaHZhbCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg KGFkZCktPmhoLmtleSA9IChjb25zdCB2b2lkKikgKGtleXB0cik7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGQpLT5oaC5rZXlsZW4gPSAodW5zaWduZWQp IChrZXlsZW5faW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBp ZiAoIShoZWFkKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoYWRkKS0+aGgubmV4dCA9IE5VTEw7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg KGFkZCktPmhoLnByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfTUFLRV9UQUJMRShoaCwgYWRkLCBfaGFf b29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBJ Rl9IQVNIX05PTkZBVEFMX09PTSggaWYgKCFfaGFfb29tZWQpIHsgKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoaGVhZCkgPSAoYWRkKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIElG X0hBU0hfTk9ORkFUQUxfT09NKCB9ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGFk ZCktPmhoLnRibCA9IChoZWFkKS0+aGgudGJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfQVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfQUREX1RPX1RBQkxFKGhoLCBoZWFkLCBrZXlwdHIs IGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkLCBfaGFfb29tZWQpOyAgICAgICBcCisrICBIQVNIX0ZT Q0soaGgsIGhlYWQsICJIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUUiKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0FERF9LRVlQ VFIoaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9oYV9oYXNodjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBIQVNIX1ZBTFVFKGtleXB0ciwga2V5bGVuX2luLCBfaGFfaGFzaHYpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFT SFZBTFVFKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbiwgX2hhX2hhc2h2LCBhZGQpOyAgICAg IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9BRERfQllIQVNIVkFMVUUoaGgsaGVh ZCxmaWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWwsYWRkKSAgICAgICAgICAgIFwKKysgIEhBU0hf QUREX0tFWVBUUl9CWUhBU0hWQUxVRShoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5 bGVuX2luLCBoYXNodmFsLCBhZGQpCisrCisrI2RlZmluZSBIQVNIX0FERChoaCxoZWFkLGZpZWxk bmFtZSxrZXlsZW5faW4sYWRkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg SEFTSF9BRERfS0VZUFRSKGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4s IGFkZCkKKysKKysjZGVmaW5lIEhBU0hfVE9fQktUKGhhc2h2LG51bV9ia3RzLGJrdCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgYmt0ID0gKChoYXNodikgJiAoKG51bV9ia3RzKSAtIDFVKSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKy8q IGRlbGV0ZSAiZGVscHRyIiBmcm9tIHRoZSBoYXNoIHRhYmxlLgorKyAqICJ0aGUgdXN1YWwiIHBh dGNoLXVwIHByb2Nlc3MgZm9yIHRoZSBhcHAtb3JkZXIgZG91Ymx5LWxpbmtlZC1saXN0LgorKyAq IFRoZSB1c2Ugb2YgX2hkX2hoX2RlbCBiZWxvdyBkZXNlcnZlcyBzcGVjaWFsIGV4cGxhbmF0aW9u LgorKyAqIFRoZXNlIHVzZWQgdG8gYmUgZXhwcmVzc2VkIHVzaW5nIChkZWxwdHIpIGJ1dCB0aGF0 IGxlZCB0byBhIGJ1ZworKyAqIGlmIHNvbWVvbmUgdXNlZCB0aGUgc2FtZSBzeW1ib2wgZm9yIHRo ZSBoZWFkIGFuZCBkZWxldGVlLCBsaWtlCisrICogIEhBU0hfREVMRVRFKGhoLHVzZXJzLHVzZXJz KTsKKysgKiBXZSB3YW50IHRoYXQgdG8gd29yaywgYnV0IGJ5IGNoYW5naW5nIHRoZSBoZWFkICh1 c2VycykgYmVsb3cKKysgKiB3ZSB3ZXJlIGZvcmZlaXRpbmcgb3VyIGFiaWxpdHkgdG8gZnVydGhl ciByZWZlciB0byB0aGUgZGVsZXRlZSAodXNlcnMpCisrICogaW4gdGhlIHBhdGNoLXVwIHByb2Nl c3MuIFNvbHV0aW9uOiB1c2Ugc2NyYXRjaCBzcGFjZSB0bworKyAqIGNvcHkgdGhlIGRlbGV0ZWUg cG9pbnRlciwgdGhlbiB0aGUgbGF0dGVyIHJlZmVyZW5jZXMgYXJlIHZpYSB0aGF0CisrICogc2Ny YXRjaCBwb2ludGVyIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIHJlcG9pbnRlZCAodXNlcnMpIHN5 bWJvbC4KKysgKi8KKysjZGVmaW5lIEhBU0hfREVMRVRFKGhoLGhlYWQsZGVscHRyKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfREVMRVRF X0hIKGhoLCBoZWFkLCAmKGRlbHB0ciktPmhoKQorKworKyNkZWZpbmUgSEFTSF9ERUxFVEVfSEgo aGgsaGVhZCxkZWxwdHJoaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBjb25zdCBzdHJ1Y3QgVVRfaGFzaF9o YW5kbGUgKl9oZF9oaF9kZWwgPSAoZGVscHRyaGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgaWYgKChfaGRfaGhfZGVsLT5wcmV2ID09IE5VTEwpICYmIChfaGRfaGhfZGVsLT5uZXh0 ID09IE5VTEwpKSB7ICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9CTE9PTV9GUkVFKChoZWFk KS0+aGgudGJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLT5idWNrZXRzLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoaGVhZCktPmho LnRibC0+bnVtX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgIFwK KysgICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwsIHNpemVvZihVVF9oYXNoX3RhYmxlKSk7 ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChoZWFkKSA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdW5zaWduZWQgX2hkX2JrdDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIGlmIChfaGRfaGhfZGVsID09IChoZWFkKS0+aGgudGJsLT50YWlsKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIChoZWFkKS0+aGgudGJsLT50YWlsID0g SEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaGRfaGhfZGVsLT5wcmV2KTsgICAgIFwKKysg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChfaGRfaGhfZGVsLT5wcmV2ICE9IE5V TEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hkX2hoX2RlbC0+cHJldiktPm5leHQg PSBfaGRfaGhfZGVsLT5uZXh0OyAgIFwKKysgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgREVDTFRZUEVfQVNTSUdOKGhlYWQsIF9oZF9oaF9kZWwtPm5leHQpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg aWYgKF9oZF9oaF9kZWwtPm5leHQgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJs LCBfaGRfaGhfZGVsLT5uZXh0KS0+cHJldiA9IF9oZF9oaF9kZWwtPnByZXY7ICAgXAorKyAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9UT19CS1QoX2hkX2hoX2RlbC0+aGFzaHYs IChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hkX2JrdCk7ICAgICAgICBcCisrICAgIEhB U0hfREVMX0lOX0JLVCgoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfaGRfYmt0XSwgX2hkX2hoX2Rl bCk7ICAgICAgICAgICAgICAgXAorKyAgICAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zLS07ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0ZTQ0soaGgsIGhlYWQsICJIQVNIX0RFTEVURV9I SCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUg KDApCisrCisrLyogY29udmVuaWVuY2UgZm9ybXMgb2YgSEFTSF9GSU5EL0hBU0hfQUREL0hBU0hf REVMICovCisrI2RlZmluZSBIQVNIX0ZJTkRfU1RSKGhlYWQsZmluZHN0cixvdXQpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgdW5zaWduZWQgX3V0aGFzaF9oZnN0cl9rZXlsZW4gPSAodW5zaWduZWQpdXRo YXNoX3N0cmxlbihmaW5kc3RyKTsgICAgICAgICAgICBcCisrICAgIEhBU0hfRklORChoaCwgaGVh ZCwgZmluZHN0ciwgX3V0aGFzaF9oZnN0cl9rZXlsZW4sIG91dCk7ICAgICAgICAgICAgICAgICAg ICAgXAorK30gd2hpbGUgKDApCisrI2RlZmluZSBIQVNIX0FERF9TVFIoaGVhZCxzdHJmaWVsZCxh ZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgdW5zaWduZWQgX3V0aGFzaF9oYXN0cl9rZXlsZW4gPSAo dW5zaWduZWQpdXRoYXNoX3N0cmxlbigoYWRkKS0+c3RyZmllbGQpOyAgICBcCisrICAgIEhBU0hf QUREKGhoLCBoZWFkLCBzdHJmaWVsZFswXSwgX3V0aGFzaF9oYXN0cl9rZXlsZW4sIGFkZCk7ICAg ICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrI2RlZmluZSBIQVNIX1JFUExBQ0VfU1RS KGhlYWQsc3RyZmllbGQsYWRkLHJlcGxhY2VkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdW5zaWduZWQgX3V0aGFzaF9ocnN0 cl9rZXlsZW4gPSAodW5zaWduZWQpdXRoYXNoX3N0cmxlbigoYWRkKS0+c3RyZmllbGQpOyAgICBc CisrICAgIEhBU0hfUkVQTEFDRShoaCwgaGVhZCwgc3RyZmllbGRbMF0sIF91dGhhc2hfaHJzdHJf a2V5bGVuLCBhZGQsIHJlcGxhY2VkKTsgICAgXAorK30gd2hpbGUgKDApCisrI2RlZmluZSBIQVNI X0ZJTkRfSU5UKGhlYWQsZmluZGludCxvdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICBIQVNIX0ZJTkQoaGgsaGVhZCxmaW5kaW50LHNpemVvZihpbnQp LG91dCkKKysjZGVmaW5lIEhBU0hfQUREX0lOVChoZWFkLGludGZpZWxkLGFkZCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfQUREKGhoLGhlYWQs aW50ZmllbGQsc2l6ZW9mKGludCksYWRkKQorKyNkZWZpbmUgSEFTSF9SRVBMQUNFX0lOVChoZWFk LGludGZpZWxkLGFkZCxyZXBsYWNlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgSEFTSF9SRVBMQUNFKGhoLGhlYWQsaW50ZmllbGQsc2l6ZW9mKGludCksYWRkLHJlcGxhY2Vk KQorKyNkZWZpbmUgSEFTSF9GSU5EX1BUUihoZWFkLGZpbmRwdHIsb3V0KSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9GSU5EKGhoLGhlYWQsZmlu ZHB0cixzaXplb2Yodm9pZCAqKSxvdXQpCisrI2RlZmluZSBIQVNIX0FERF9QVFIoaGVhZCxwdHJm aWVsZCxhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICBIQVNIX0FERChoaCxoZWFkLHB0cmZpZWxkLHNpemVvZih2b2lkICopLGFkZCkKKysjZGVmaW5l IEhBU0hfUkVQTEFDRV9QVFIoaGVhZCxwdHJmaWVsZCxhZGQscmVwbGFjZWQpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfUkVQTEFDRShoaCxoZWFkLHB0cmZpZWxkLHNp emVvZih2b2lkICopLGFkZCxyZXBsYWNlZCkKKysjZGVmaW5lIEhBU0hfREVMKGhlYWQsZGVscHRy KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIEhBU0hfREVMRVRFKGhoLGhlYWQsZGVscHRyKQorKworKy8qIEhBU0hfRlNDSyBjaGVja3Mg aGFzaCBpbnRlZ3JpdHkgb24gZXZlcnkgYWRkL2RlbGV0ZSB3aGVuIEhBU0hfREVCVUcgaXMgZGVm aW5lZC4KKysgKiBUaGlzIGlzIGZvciB1dGhhc2ggZGV2ZWxvcGVyIG9ubHk7IGl0IGNvbXBpbGVz IGF3YXkgaWYgSEFTSF9ERUJVRyBpc24ndCBkZWZpbmVkLgorKyAqLworKyNpZmRlZiBIQVNIX0RF QlVHCisrI2luY2x1ZGUgPHN0ZGlvLmg+ICAgLyogZnByaW50Ziwgc3RkZXJyICovCisrI2RlZmlu ZSBIQVNIX09PUFMoLi4uKSBkbyB7IGZwcmludGYoc3RkZXJyLCBfX1ZBX0FSR1NfXyk7IGV4aXQo LTEpOyB9IHdoaWxlICgwKQorKyNkZWZpbmUgSEFTSF9GU0NLKGhoLGhlYWQsd2hlcmUpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKl90aGg7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYgKGhlYWQp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgdW5zaWduZWQgX2JrdF9pOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHVuc2lnbmVk IF9jb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICBjaGFyICpfcHJldjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgZm9yIChfYmt0 X2kgPSAwOyBfYmt0X2kgPCAoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHM7ICsrX2JrdF9pKSB7 ICAgICAgICAgICBcCisrICAgICAgdW5zaWduZWQgX2JrdF9jb3VudCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF90aGggPSAo aGVhZCktPmhoLnRibC0+YnVja2V0c1tfYmt0X2ldLmhoX2hlYWQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICBfcHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgd2hpbGUgKF90 aGgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgaWYgKF9wcmV2ICE9IChjaGFyKikoX3RoaC0+aGhfcHJldikp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgSEFTSF9P T1BTKCIlczogaW52YWxpZCBoaF9wcmV2ICVwLCBhY3R1YWwgJXBcbiIsICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgICAgICAod2hlcmUpLCAodm9pZCopX3RoaC0+aGhfcHJldiwg KHZvaWQqKV9wcmV2KTsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgIF9ia3RfY291bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfcHJldiA9IChj aGFyKikoX3RoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgX3RoaCA9IF90aGgtPmhoX25leHQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgX2NvdW50ICs9IF9ia3RfY291bnQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmICgoaGVhZCktPmho LnRibC0+YnVja2V0c1tfYmt0X2ldLmNvdW50ICE9ICBfYmt0X2NvdW50KSB7ICAgICAgICAgICAg ICAgIFwKKysgICAgICAgIEhBU0hfT09QUygiJXM6IGludmFsaWQgYnVja2V0IGNvdW50ICV1LCBh Y3R1YWwgJXVcbiIsICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgKHdoZXJlKSwg KGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbX2JrdF9pXS5jb3VudCwgX2JrdF9jb3VudCk7ICAgICAg ICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgIGlmIChfY291bnQgIT0gKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcykgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEhBU0hfT09QUygiJXM6IGlu dmFsaWQgaGggaXRlbSBjb3VudCAldSwgYWN0dWFsICV1XG4iLCAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgKHdoZXJlKSwgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcywgX2NvdW50 KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICBfY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX3ByZXYgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIF90aGggPSAgJihoZWFkKS0+aGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB3aGlsZSAoX3RoaCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICBfY291bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKF9wcmV2ICE9IChjaGFyKilf dGhoLT5wcmV2KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgSEFTSF9PT1BTKCIlczogaW52YWxpZCBwcmV2ICVwLCBhY3R1YWwgJXBcbiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAod2hlcmUpLCAodm9pZCop X3RoaC0+cHJldiwgKHZvaWQqKV9wcmV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9wcmV2ID0gKGNoYXIqKUVMTVRfRlJP TV9ISCgoaGVhZCktPmhoLnRibCwgX3RoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICBfdGhoID0gKF90aGgtPm5leHQgPyBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF90 aGgtPm5leHQpIDogTlVMTCk7ICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICBpZiAoX2NvdW50ICE9IChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBIQVNIX09PUFMoIiVzOiBpbnZhbGlkIGFw cCBpdGVtIGNvdW50ICV1LCBhY3R1YWwgJXVcbiIsICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgICh3aGVyZSksIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMsIF9jb3VudCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysjZWxzZQorKyNkZWZpbmUgSEFT SF9GU0NLKGhoLGhlYWQsd2hlcmUpCisrI2VuZGlmCisrCisrLyogV2hlbiBjb21waWxlZCB3aXRo IC1ESEFTSF9FTUlUX0tFWVMsIGxlbmd0aC1wcmVmaXhlZCBrZXlzIGFyZSBlbWl0dGVkIHRvCisr ICogdGhlIGRlc2NyaXB0b3IgdG8gd2hpY2ggdGhpcyBtYWNybyBpcyBkZWZpbmVkIGZvciB0dW5p bmcgdGhlIGhhc2ggZnVuY3Rpb24uCisrICogVGhlIGFwcCBjYW4gI2luY2x1ZGUgPHVuaXN0ZC5o PiB0byBnZXQgdGhlIHByb3RvdHlwZSBmb3Igd3JpdGUoMikuICovCisrI2lmZGVmIEhBU0hfRU1J VF9LRVlTCisrI2RlZmluZSBIQVNIX0VNSVRfS0VZKGhoLGhlYWQsa2V5cHRyLGZpZWxkbGVuKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIHVuc2lnbmVkIF9rbGVuID0gZmllbGRsZW47ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3cml0ZShIQVNIX0VNSVRfS0VZ UywgJl9rbGVuLCBzaXplb2YoX2tsZW4pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgd3JpdGUoSEFTSF9FTUlUX0tFWVMsIGtleXB0ciwgKHVuc2lnbmVkIGxvbmcpZmll bGRsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKyNlbHNlCisr I2RlZmluZSBIQVNIX0VNSVRfS0VZKGhoLGhlYWQsa2V5cHRyLGZpZWxkbGVuKQorKyNlbmRpZgor KworKy8qIFRoZSBCZXJuc3RlaW4gaGFzaCBmdW5jdGlvbiwgdXNlZCBpbiBQZXJsIHByaW9yIHRv IHY1LjYuIE5vdGUgKHg8PDUreCk9eCozMy4gKi8KKysjZGVmaW5lIEhBU0hfQkVSKGtleSxrZXls ZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hiX2tleWxlbiA9ICh1 bnNpZ25lZClrZXlsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9oYl9rZXkgPSAoY29uc3QgdW5zaWduZWQgY2hhciop KGtleSk7ICAgICAgICAgICAgICAgICAgICBcCisrICAoaGFzaHYpID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgd2hpbGUgKF9oYl9rZXlsZW4tLSAhPSAwVSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGhhc2h2KSA9ICgoKGhhc2h2KSA8PCA1 KSArIChoYXNodikpICsgKl9oYl9rZXkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrCisrLyogU0FYL0ZO Vi9PQVQvSkVOIGhhc2ggZnVuY3Rpb25zIGFyZSBtYWNybyB2YXJpYW50cyBvZiB0aG9zZSBsaXN0 ZWQgYXQKKysgKiBodHRwOi8vZXRlcm5hbGx5Y29uZnV6emxlZC5jb20vdHV0cy9hbGdvcml0aG1z L2pzd190dXRfaGFzaGluZy5hc3B4CisrICogKGFyY2hpdmUgbGluazogaHR0cHM6Ly9hcmNoaXZl LmlzL0l2Y2FuICkKKysgKi8KKysjZGVmaW5lIEhBU0hfU0FYKGtleSxrZXlsZW4saGFzaHYpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX3N4X2k7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKl9oc19rZXkgPSAoY29uc3QgdW5zaWduZWQgY2hhciopKGtleSk7ICAgICAg ICAgICAgICAgICAgICBcCisrICBoYXNodiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgZm9yIChfc3hf aT0wOyBfc3hfaSA8IGtleWxlbjsgX3N4X2krKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgaGFzaHYgXj0gKGhhc2h2IDw8IDUpICsgKGhhc2h2ID4+IDIp ICsgX2hzX2tleVtfc3hfaV07ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrLyogRk5WLTFhIHZhcmlhdGlvbiAqLworKyNk ZWZpbmUgSEFTSF9GTlYoa2V5LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1 bnNpZ25lZCBfZm5faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgY29uc3QgdW5zaWduZWQgY2hhciAqX2hmX2tleSA9 IChjb25zdCB1bnNpZ25lZCBjaGFyKikoa2V5KTsgICAgICAgICAgICAgICAgICAgIFwKKysgICho YXNodikgPSAyMTY2MTM2MjYxVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBmb3IgKF9mbl9pPTA7IF9mbl9pIDwga2V5bGVuOyBf Zm5faSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBo YXNodiA9IGhhc2h2IF4gX2hmX2tleVtfZm5faV07ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgaGFzaHYgPSBoYXNodiAqIDE2Nzc3NjE5VTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX09BVChr ZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9ob19pOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICBjb25zdCB1bnNpZ25lZCBjaGFyICpfaG9fa2V5PShjb25zdCB1bnNpZ25lZCBj aGFyKikoa2V5KTsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaGFzaHYgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIGZvcihfaG9faT0wOyBfaG9faSA8IGtleWxlbjsgX2hvX2krKykgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaGFzaHYgKz0gX2hvX2tl eVtfaG9faV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgIGhhc2h2ICs9IChoYXNodiA8PCAxMCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBoYXNodiBePSAoaGFzaHYg Pj4gNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaGFzaHYgKz0gKGhhc2h2IDw8IDMp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIGhhc2h2IF49IChoYXNodiA+PiAxMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBoYXNodiArPSAoaGFzaHYgPDwgMTUp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0pFTl9NSVgoYSxiLGMpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIGEgLT0gYjsgYSAtPSBjOyBhIF49ICggYyA+PiAxMyApOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBiIC09IGM7 IGIgLT0gYTsgYiBePSAoIGEgPDwgOCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgYyAtPSBhOyBjIC09IGI7IGMgXj0gKCBiID4+IDEzICk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGEgLT0gYjsg YSAtPSBjOyBhIF49ICggYyA+PiAxMiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICBiIC09IGM7IGIgLT0gYTsgYiBePSAoIGEgPDwgMTYgKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgYyAtPSBhOyBj IC09IGI7IGMgXj0gKCBiID4+IDUgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIGEgLT0gYjsgYSAtPSBjOyBhIF49ICggYyA+PiAzICk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBiIC09IGM7IGIg LT0gYTsgYiBePSAoIGEgPDwgMTAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgYyAtPSBhOyBjIC09IGI7IGMgXj0gKCBiID4+IDE1ICk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQor KworKyNkZWZpbmUgSEFTSF9KRU4oa2V5LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICB1bnNpZ25lZCBfaGpfaSxfaGpfaixfaGpfazsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgY29uc3QgY2hhciAqX2hq X2tleT0odW5zaWduZWQgY29uc3QgY2hhciopKGtleSk7ICAgICAgICAgICAgICAgICAgICAgIFwK KysgIGhhc2h2ID0gMHhmZWVkYmVlZnU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBfaGpfaSA9IF9oal9qID0gMHg5ZTM3Nzli OXU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgX2hqX2sgPSAodW5zaWduZWQpKGtleWxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlIChfaGpfayA+PSAxMlUpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIF9oal9pICs9ICAgIChfaGpfa2V5WzBdICsgKCAodW5zaWduZWQpX2hqX2tleVsxXSA8PCA4 ICkgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5 WzJdIDw8IDE2ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICsgKCAodW5zaWduZWQpX2hqX2tleVszXSA8PCAyNCApICk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9oal9qICs9ICAgIChfaGpfa2V5WzRdICsg KCAodW5zaWduZWQpX2hqX2tleVs1XSA8PCA4ICkgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzZdIDw8IDE2ICkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICsgKCAodW5zaWduZWQpX2hqX2tleVs3 XSA8PCAyNCApICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IGhhc2h2ICs9IChfaGpfa2V5WzhdICsgKCAodW5zaWduZWQpX2hqX2tleVs5XSA8PCA4ICkgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzEw XSA8PCAxNiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgICsgKCAodW5zaWduZWQpX2hqX2tleVsxMV0gPDwgMjQgKSApOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg SEFTSF9KRU5fTUlYKF9oal9pLCBfaGpfaiwgaGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICBf aGpfa2V5ICs9IDEyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgX2hqX2sgLT0gMTJVOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICBoYXNodiArPSAodW5zaWduZWQpKGtleWxlbik7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgc3dpdGNo ICggX2hqX2sgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgY2FzZSAxMTogaGFzaHYgKz0gKCAodW5zaWduZWQpX2hq X2tleVsxMF0gPDwgMjQgKTsgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCisrICAgIGNhc2Ug MTA6IGhhc2h2ICs9ICggKHVuc2lnbmVkKV9oal9rZXlbOV0gPDwgMTYgKTsgIC8qIEZBTExUSFJP VUdIICovICAgICAgICAgXAorKyAgICBjYXNlIDk6ICBoYXNodiArPSAoICh1bnNpZ25lZClfaGpf a2V5WzhdIDw8IDggKTsgICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKKysgICAgY2FzZSA4 OiAgX2hqX2ogKz0gKCAodW5zaWduZWQpX2hqX2tleVs3XSA8PCAyNCApOyAgLyogRkFMTFRIUk9V R0ggKi8gICAgICAgICBcCisrICAgIGNhc2UgNzogIF9oal9qICs9ICggKHVuc2lnbmVkKV9oal9r ZXlbNl0gPDwgMTYgKTsgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAorKyAgICBjYXNlIDY6 ICBfaGpfaiArPSAoICh1bnNpZ25lZClfaGpfa2V5WzVdIDw8IDggKTsgICAvKiBGQUxMVEhST1VH SCAqLyAgICAgICAgIFwKKysgICAgY2FzZSA1OiAgX2hqX2ogKz0gX2hqX2tleVs0XTsgICAgICAg ICAgICAgICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCisrICAgIGNhc2UgNDog IF9oal9pICs9ICggKHVuc2lnbmVkKV9oal9rZXlbM10gPDwgMjQgKTsgIC8qIEZBTExUSFJPVUdI ICovICAgICAgICAgXAorKyAgICBjYXNlIDM6ICBfaGpfaSArPSAoICh1bnNpZ25lZClfaGpfa2V5 WzJdIDw8IDE2ICk7ICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKKysgICAgY2FzZSAyOiAg X2hqX2kgKz0gKCAodW5zaWduZWQpX2hqX2tleVsxXSA8PCA4ICk7ICAgLyogRkFMTFRIUk9VR0gg Ki8gICAgICAgICBcCisrICAgIGNhc2UgMTogIF9oal9pICs9IF9oal9rZXlbMF07ICAgICAgICAg ICAgICAgICAgICAgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAorKyAgICBkZWZhdWx0OiA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0pFTl9NSVgo X2hqX2ksIF9oal9qLCBoYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrLyogVGhlIFBhdWwgSHNpZWggaGFzaCBmdW5j dGlvbiAqLworKyN1bmRlZiBnZXQxNmJpdHMKKysjaWYgKGRlZmluZWQoX19HTlVDX18pICYmIGRl ZmluZWQoX19pMzg2X18pKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSAgICAgICAgICAgICBcCisr ICB8fCBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkIChfX0JPUkxBTkRDX18pIHx8IGRlZmlu ZWQgKF9fVFVSQk9DX18pCisrI2RlZmluZSBnZXQxNmJpdHMoZCkgKCooKGNvbnN0IHVpbnQxNl90 ICopIChkKSkpCisrI2VuZGlmCisrCisrI2lmICFkZWZpbmVkIChnZXQxNmJpdHMpCisrI2RlZmlu ZSBnZXQxNmJpdHMoZCkgKCgoKHVpbnQzMl90KSgoKGNvbnN0IHVpbnQ4X3QgKikoZCkpWzFdKSkg PDwgOCkgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgKyh1aW50MzJfdCko KChjb25zdCB1aW50OF90ICopKGQpKVswXSkgKQorKyNlbmRpZgorKyNkZWZpbmUgSEFTSF9TRkgo a2V5LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBjb25zdCBj aGFyICpfc2ZoX2tleT0odW5zaWduZWQgY29uc3QgY2hhciopKGtleSk7ICAgICAgICAgICAgICAg ICAgICAgXAorKyAgdWludDMyX3QgX3NmaF90bXAsIF9zZmhfbGVuID0gKHVpbnQzMl90KWtleWxl bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICB1bnNpZ25lZCBfc2ZoX3JlbSA9IF9zZmhfbGVuICYgM1U7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgX3NmaF9sZW4gPj49IDI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIGhhc2h2ID0gMHhjYWZlYmFiZXU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgLyogTWFpbiBsb29wICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGZvciAoO19zZmhfbGVuID4gMFU7 IF9zZmhfbGVuLS0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgIGhhc2h2ICAgICs9IGdldDE2Yml0cyAoX3NmaF9rZXkpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfc2ZoX3RtcCAgPSAoKHVpbnQz Ml90KShnZXQxNmJpdHMgKF9zZmhfa2V5KzIpKSA8PCAxMSkgXiBoYXNodjsgICAgICAgICAgICAg IFwKKysgICAgaGFzaHYgICAgID0gKGhhc2h2IDw8IDE2KSBeIF9zZmhfdG1wOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9zZmhfa2V5ICs9IDJVKnNpemVv ZiAodWludDE2X3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICBoYXNodiAgICArPSBoYXNodiA+PiAxMTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgLyogSGFuZGxlIGVuZCBjYXNlcyAqLyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIHN3aXRjaCAoX3NmaF9yZW0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGNhc2UgMzogaGFzaHYgKz0gZ2V0MTZi aXRzIChfc2ZoX2tleSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgICAgIGhhc2h2IF49IGhhc2h2IDw8IDE2OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBoYXNodiBePSAodWludDMy X3QpKF9zZmhfa2V5W3NpemVvZiAodWludDE2X3QpXSkgPDwgMTg7ICAgICAgICAgICAgICBcCisr ICAgICAgICAgICAgaGFzaHYgKz0gaGFzaHYgPj4gMTE7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgY2FzZSAyOiBoYXNodiArPSBnZXQxNmJpdHMgKF9zZmhfa2V5KTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgaGFzaHYgXj0gaGFzaHYgPDwg MTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgICAgIGhhc2h2ICs9IGhhc2h2ID4+IDE3OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IGNhc2UgMTogaGFzaHYgKz0gKl9zZmhfa2V5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGhhc2h2IF49IGhhc2h2IDw8IDEw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgICAgICBoYXNodiArPSBoYXNodiA+PiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBk ZWZhdWx0OiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgLyogRm9yY2UgImF2YWxhbmNoaW5nIiBvZiBmaW5hbCAx MjcgYml0cyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2 IF49IGhhc2h2IDw8IDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICBoYXNodiArPSBoYXNodiA+PiA1OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaGFzaHYg Xj0gaGFzaHYgPDwgNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2ICs9IGhhc2h2ID4+IDE3OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBoYXNodiBe PSBoYXNodiA8PCAyNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgaGFzaHYgKz0gaGFzaHYgPj4gNjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgw KQorKworKy8qIGl0ZXJhdGUgb3ZlciBpdGVtcyBpbiBhIGtub3duIGJ1Y2tldCB0byBmaW5kIGRl c2lyZWQgaXRlbSAqLworKyNkZWZpbmUgSEFTSF9GSU5EX0lOX0JLVCh0YmwsaGgsaGVhZCxrZXlw dHIsa2V5bGVuX2luLGhhc2h2YWwsb3V0KSAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICBpZiAoKGhlYWQpLmhoX2hlYWQgIT0gTlVMTCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBERUNMVFlQRV9B U1NJR04ob3V0LCBFTE1UX0ZST01fSEgodGJsLCAoaGVhZCkuaGhfaGVhZCkpOyAgICAgICAgICAg ICAgICAgICAgIFwKKysgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChvdXQpID0gTlVM TDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdoaWxlICgob3V0KSAh PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIGlmICgob3V0KS0+aGguaGFzaHYgPT0gKGhhc2h2YWwpICYmIChvdXQp LT5oaC5rZXlsZW4gPT0gKGtleWxlbl9pbikpIHsgICAgICAgXAorKyAgICAgIGlmIChIQVNIX0tF WUNNUCgob3V0KS0+aGgua2V5LCBrZXlwdHIsIGtleWxlbl9pbikgPT0gMCkgeyAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKChvdXQpLT5oaC5o aF9uZXh0ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgREVDTFRZUEVfQVNTSUdOKG91dCwgRUxNVF9GUk9NX0hIKHRibCwgKG91 dCktPmhoLmhoX25leHQpKTsgICAgICAgICAgICAgICAgXAorKyAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAob3V0KSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKy8qIGFk ZCBhbiBpdGVtIHRvIGEgYnVja2V0ICAqLworKyNkZWZpbmUgSEFTSF9BRERfVE9fQktUKGhlYWQs aGgsYWRkaGgsb29tZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBVVF9oYXNoX2J1Y2tldCAqX2hhX2hlYWQgPSAm KGhlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg X2hhX2hlYWQtPmNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGRoaCktPmhoX25leHQgPSBfaGFfaGVhZC0+ aGhfaGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAo YWRkaGgpLT5oaF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYgKF9oYV9oZWFkLT5oaF9oZWFkICE9IE5VTEwp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg X2hhX2hlYWQtPmhoX2hlYWQtPmhoX3ByZXYgPSAoYWRkaGgpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgX2hh X2hlYWQtPmhoX2hlYWQgPSAoYWRkaGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIGlmICgoX2hhX2hlYWQtPmNvdW50ID49ICgoX2hhX2hl YWQtPmV4cGFuZF9tdWx0ICsgMVUpICogSEFTSF9CS1RfQ0FQQUNJVFlfVEhSRVNIKSkgXAorKyAg ICAgICYmICEoYWRkaGgpLT50YmwtPm5vZXhwYW5kKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9FWFBBTkRfQlVDS0VUUyhhZGRoaCwo YWRkaGgpLT50YmwsIG9vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IElGX0hBU0hfTk9ORkFUQUxfT09NKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChvb21lZCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgIEhBU0hfREVMX0lOX0JLVChoZWFkLGFkZGhoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGls ZSAoMCkKKysKKysvKiByZW1vdmUgYW4gaXRlbSBmcm9tIGEgZ2l2ZW4gYnVja2V0ICovCisrI2Rl ZmluZSBIQVNIX0RFTF9JTl9CS1QoaGVhZCxkZWxoaCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIFVU X2hhc2hfYnVja2V0ICpfaGRfaGVhZCA9ICYoaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBfaGRfaGVhZC0+Y291bnQtLTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYg KF9oZF9oZWFkLT5oaF9oZWFkID09IChkZWxoaCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgX2hkX2hlYWQtPmhoX2hlYWQgPSAoZGVsaGgpLT5o aF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgaWYgKChkZWxoaCktPmhoX3ByZXYpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGRl bGhoKS0+aGhfcHJldi0+aGhfbmV4dCA9IChkZWxoaCktPmhoX25leHQ7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYgKChk ZWxoaCktPmhoX25leHQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgKGRlbGhoKS0+aGhfbmV4dC0+aGhfcHJldiA9IChkZWxo aCktPmhoX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrLyogQnVja2V0IGV4cGFuc2lvbiBo YXMgdGhlIGVmZmVjdCBvZiBkb3VibGluZyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMKKysgKiBhbmQg cmVkaXN0cmlidXRpbmcgdGhlIGl0ZW1zIGludG8gdGhlIG5ldyBidWNrZXRzLiBJZGVhbGx5IHRo ZQorKyAqIGl0ZW1zIHdpbGwgZGlzdHJpYnV0ZSBtb3JlIG9yIGxlc3MgZXZlbmx5IGludG8gdGhl IG5ldyBidWNrZXRzCisrICogKHRoZSBleHRlbnQgdG8gd2hpY2ggdGhpcyBpcyB0cnVlIGlzIGEg bWVhc3VyZSBvZiB0aGUgcXVhbGl0eSBvZgorKyAqIHRoZSBoYXNoIGZ1bmN0aW9uIGFzIGl0IGFw cGxpZXMgdG8gdGhlIGtleSBkb21haW4pLgorKyAqCisrICogV2l0aCB0aGUgaXRlbXMgZGlzdHJp YnV0ZWQgaW50byBtb3JlIGJ1Y2tldHMsIHRoZSBjaGFpbiBsZW5ndGgKKysgKiAoaXRlbSBjb3Vu dCkgaW4gZWFjaCBidWNrZXQgaXMgcmVkdWNlZC4gVGh1cyBieSBleHBhbmRpbmcgYnVja2V0cwor KyAqIHRoZSBoYXNoIGtlZXBzIGEgYm91bmQgb24gdGhlIGNoYWluIGxlbmd0aC4gVGhpcyBib3Vu ZGVkIGNoYWluCisrICogbGVuZ3RoIGlzIHRoZSBlc3NlbmNlIG9mIGhvdyBhIGhhc2ggcHJvdmlk ZXMgY29uc3RhbnQgdGltZSBsb29rdXAuCisrICoKKysgKiBUaGUgY2FsY3VsYXRpb24gb2YgdGJs LT5pZGVhbF9jaGFpbl9tYXhsZW4gYmVsb3cgZGVzZXJ2ZXMgc29tZQorKyAqIGV4cGxhbmF0aW9u LiBGaXJzdCwga2VlcCBpbiBtaW5kIHRoYXQgd2UncmUgY2FsY3VsYXRpbmcgdGhlIGlkZWFsCisr ICogbWF4aW11bSBjaGFpbiBsZW5ndGggYmFzZWQgb24gdGhlICpuZXcqIChkb3VibGVkKSBidWNr ZXQgY291bnQuCisrICogSW4gZnJhY3Rpb25zIHRoaXMgaXMganVzdCBuL2IgKG49bnVtYmVyIG9m IGl0ZW1zLGI9bmV3IG51bSBidWNrZXRzKS4KKysgKiBTaW5jZSB0aGUgaWRlYWwgY2hhaW4gbGVu Z3RoIGlzIGFuIGludGVnZXIsIHdlIHdhbnQgdG8gY2FsY3VsYXRlCisrICogY2VpbChuL2IpLiBX ZSBkb24ndCBkZXBlbmQgb24gZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBpbiB0aGlzCisrICog aGFzaCwgc28gdG8gY2FsY3VsYXRlIGNlaWwobi9iKSB3aXRoIGludGVnZXJzIHdlIGNvdWxkIHdy aXRlCisrICoKKysgKiAgICAgIGNlaWwobi9iKSA9IChuL2IpICsgKChuJWIpPzE6MCkKKysgKgor KyAqIGFuZCBpbiBmYWN0IGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGhhc2ggZGlkIGp1c3Qg dGhhdC4KKysgKiBCdXQgbm93IHdlIGhhdmUgaW1wcm92ZWQgdGhpbmdzIGEgYml0IGJ5IHJlY29n bml6aW5nIHRoYXQgYiBpcworKyAqIGFsd2F5cyBhIHBvd2VyIG9mIHR3by4gV2Uga2VlcCBpdHMg YmFzZSAyIGxvZyBoYW5keSAoY2FsbCBpdCBsYiksCisrICogc28gbm93IHdlIGNhbiB3cml0ZSB0 aGlzIHdpdGggYSBiaXQgc2hpZnQgYW5kIGxvZ2ljYWwgQU5EOgorKyAqCisrICogICAgICBjZWls KG4vYikgPSAobj4+bGIpICsgKCAobiAmIChiLTEpKSA/IDE6MCkKKysgKgorKyAqLworKyNkZWZp bmUgSEFTSF9FWFBBTkRfQlVDS0VUUyhoaCx0Ymwsb29tZWQpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNp Z25lZCBfaGVfYmt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hlX2JrdF9pOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHN0cnVj dCBVVF9oYXNoX2hhbmRsZSAqX2hlX3RoaCwgKl9oZV9oaF9ueHQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICBVVF9oYXNoX2J1Y2tldCAqX2hlX25ld19idWNrZXRzLCAq X2hlX25ld2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgX2hlX25l d19idWNrZXRzID0gKFVUX2hhc2hfYnVja2V0Kil1dGhhc2hfbWFsbG9jKCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNr ZXQpICogKHRibCktPm51bV9idWNrZXRzICogMlUpOyAgICAgICAgICAgICBcCisrICBpZiAoIV9o ZV9uZXdfYnVja2V0cykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX1JFQ09SRF9PT00ob29tZWQpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgIHV0aGFzaF9iemVybyhfaGVfbmV3X2J1Y2tldHMsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc2l6 ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkgKiAodGJsKS0+bnVtX2J1Y2tldHMgKiAyVSk7ICAg ICAgICAgICAgICAgIFwKKysgICAgKHRibCktPmlkZWFsX2NoYWluX21heGxlbiA9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICgodGJs KS0+bnVtX2l0ZW1zID4+ICgodGJsKS0+bG9nMl9udW1fYnVja2V0cysxVSkpICsgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAoKCgodGJsKS0+bnVtX2l0ZW1zICYgKCgodGJsKS0+bnVt X2J1Y2tldHMqMlUpLTFVKSkgIT0gMFUpID8gMVUgOiAwVSk7ICAgIFwKKysgICAgKHRibCktPm5v bmlkZWFsX2l0ZW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIGZvciAoX2hlX2JrdF9pID0gMDsgX2hlX2JrdF9pIDwgKHRibCkt Pm51bV9idWNrZXRzOyBfaGVfYmt0X2krKykgeyAgICAgICAgICAgXAorKyAgICAgIF9oZV90aGgg PSAodGJsKS0+YnVja2V0c1sgX2hlX2JrdF9pIF0uaGhfaGVhZDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICB3aGlsZSAoX2hlX3RoaCAhPSBOVUxMKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfaGVfaGhf bnh0ID0gX2hlX3RoaC0+aGhfbmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgSEFTSF9UT19CS1QoX2hlX3RoaC0+aGFzaHYsICh0YmwpLT5u dW1fYnVja2V0cyAqIDJVLCBfaGVfYmt0KTsgICAgICAgICAgIFwKKysgICAgICAgIF9oZV9uZXdi a3QgPSAmKF9oZV9uZXdfYnVja2V0c1tfaGVfYmt0XSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICBpZiAoKysoX2hlX25ld2JrdC0+Y291bnQpID4gKHRibCktPmlk ZWFsX2NoYWluX21heGxlbikgeyAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAodGJsKS0+ bm9uaWRlYWxfaXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgICAgaWYgKF9oZV9uZXdia3QtPmNvdW50ID4gX2hlX25ld2JrdC0+ ZXhwYW5kX211bHQgKiAodGJsKS0+aWRlYWxfY2hhaW5fbWF4bGVuKSB7IFwKKysgICAgICAgICAg ICBfaGVfbmV3Ymt0LT5leHBhbmRfbXVsdCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgIF9oZV90aGgtPmhoX3ByZXYgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfaGVf dGhoLT5oaF9uZXh0ID0gX2hlX25ld2JrdC0+aGhfaGVhZDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKF9oZV9uZXdia3QtPmhoX2hlYWQgIT0gTlVMTCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2hl X25ld2JrdC0+aGhfaGVhZC0+aGhfcHJldiA9IF9oZV90aGg7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hlX25l d2JrdC0+aGhfaGVhZCA9IF9oZV90aGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgIF9oZV90aGggPSBfaGVfaGhfbnh0OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdXRoYXNoX2ZyZWUo KHRibCktPmJ1Y2tldHMsICh0YmwpLT5udW1fYnVja2V0cyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFz aF9idWNrZXQpKTsgXAorKyAgICAodGJsKS0+bnVtX2J1Y2tldHMgKj0gMlU7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKHRibCktPmxv ZzJfbnVtX2J1Y2tldHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICh0YmwpLT5idWNrZXRzID0gX2hlX25ld19idWNrZXRzOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAodGJsKS0+aW5l ZmZfZXhwYW5kcyA9ICgodGJsKS0+bm9uaWRlYWxfaXRlbXMgPiAoKHRibCktPm51bV9pdGVtcyA+ PiAxKSkgPyAgIFwKKysgICAgICAgICgodGJsKS0+aW5lZmZfZXhwYW5kcysxVSkgOiAwVTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmICgodGJsKS0+ aW5lZmZfZXhwYW5kcyA+IDFVKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICh0YmwpLT5ub2V4cGFuZCA9IDE7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB1dGhhc2hfbm9l eHBhbmRfZnlpKHRibCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1dGhhc2hfZXhwYW5k X2Z5aSh0YmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysK KysvKiBUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgU2ltb24gVGF0aGFtJ3MgTyhuIGxvZyhuKSkg bWVyZ2Vzb3J0ICovCisrLyogTm90ZSB0aGF0IEhBU0hfU09SVCBhc3N1bWVzIHRoZSBoYXNoIGhh bmRsZSBuYW1lIHRvIGJlIGhoLgorKyAqIEhBU0hfU1JUIHdhcyBhZGRlZCB0byBhbGxvdyB0aGUg aGFzaCBoYW5kbGUgbmFtZSB0byBiZSBwYXNzZWQgaW4uICovCisrI2RlZmluZSBIQVNIX1NPUlQo aGVhZCxjbXBmY24pIEhBU0hfU1JUKGhoLGhlYWQsY21wZmNuKQorKyNkZWZpbmUgSEFTSF9TUlQo aGgsaGVhZCxjbXBmY24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaHNfaTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgdW5zaWduZWQgX2hzX2xvb3BpbmcsX2hzX25tZXJnZXMsX2hzX2luc2l6ZSxf aHNfcHNpemUsX2hzX3FzaXplOyAgICAgICAgICAgICAgIFwKKysgIHN0cnVjdCBVVF9oYXNoX2hh bmRsZSAqX2hzX3AsICpfaHNfcSwgKl9oc19lLCAqX2hzX2xpc3QsICpfaHNfdGFpbDsgICAgICAg ICAgICBcCisrICBpZiAoaGVhZCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfaHNfaW5zaXplID0gMTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgX2hzX2xvb3BpbmcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9oc19saXN0ID0gJigoaGVh ZCktPmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICB3aGlsZSAoX2hzX2xvb3BpbmcgIT0gMFUpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBfaHNfcCA9IF9oc19saXN0 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgX2hzX2xpc3QgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9oc190YWlsID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICBfaHNfbm1lcmdlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgd2hpbGUgKF9oc19wICE9IE5V TEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgX2hzX25tZXJnZXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9oc19xID0gX2hzX3A7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICBfaHNfcHNpemUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZm9yIChfaHNfaSA9IDA7IF9o c19pIDwgX2hzX2luc2l6ZTsgKytfaHNfaSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgICAgX2hzX3BzaXplKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9oc19xID0gKChfaHNfcS0+ bmV4dCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3EtPm5leHQpIDog TlVMTCk7ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKF9oc19xID09IE5VTEwp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfaHNfcXNpemUgPSBfaHNfaW5zaXpl OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgd2hpbGUgKChfaHNfcHNpemUgIT0gMFUpIHx8ICgoX2hzX3FzaXplICE9IDBVKSAmJiAo X2hzX3EgIT0gTlVMTCkpKSB7ICAgIFwKKysgICAgICAgICAgaWYgKF9oc19wc2l6ZSA9PSAwVSkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgICAgX2hzX2UgPSBfaHNfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9oc19xID0gKChfaHNfcS0+bmV4 dCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3EtPm5leHQpIDogTlVM TCk7ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2hzX3FzaXplLS07ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICB9IGVsc2UgaWYgKChfaHNfcXNpemUgPT0gMFUpIHx8IChfaHNfcSA9PSBOVUxMKSkgeyAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfZSA9IF9oc19wOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgICAgaWYgKF9oc19wICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgX2hzX3AgPSAoKF9oc19wLT5uZXh0 ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg ICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcC0+bmV4dCkgOiBOVUxM KTsgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg ICAgIF9oc19wc2l6ZS0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSBlbHNlIGlmICgoY21wZmNuKCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAg ICAgICAgIERFQ0xUWVBFKGhlYWQpKEVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hzX3Ap KSwgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICBERUNMVFlQRShoZWFkKShFTE1UX0ZS T01fSEgoKGhlYWQpLT5oaC50YmwsIF9oc19xKSkgICAgICAgICAgICAgIFwKKysgICAgICAgICAg ICAgICAgKSkgPD0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2hzX2UgPSBfaHNfcDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAg IGlmIChfaHNfcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgIF9oc19wID0gKChfaHNfcC0+bmV4dCAhPSBO VUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg ICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3AtPm5leHQpIDogTlVMTCk7ICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBf aHNfcHNpemUtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9o c19lID0gX2hzX3E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfcSA9ICgoX2hzX3EtPm5leHQgIT0gTlVMTCkg PyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBI SF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19xLT5uZXh0KSA6IE5VTEwpOyAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgICAgIF9oc19xc2l6ZS0tOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgIGlmICggX2hzX3RhaWwgIT0gTlVMTCApIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9oc190 YWlsLT5uZXh0ID0gKChfaHNfZSAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgICAgICAgIEVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hz X2UpIDogTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgICAgIF9oc19saXN0ID0gX2hzX2U7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICAgIGlmIChfaHNfZSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9oc19lLT5w cmV2ID0gKChfaHNfdGFpbCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICAgIEVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hzX3Rh aWwpIDogTlVMTCk7ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICBfaHNfdGFpbCA9IF9oc19lOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICBfaHNfcCA9IF9oc19xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICBpZiAoX2hzX3RhaWwgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfaHNfdGFpbC0+bmV4dCA9 IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoX2hzX25tZXJnZXMgPD0g MVUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICBfaHNfbG9vcGluZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKGhlYWQpLT5oaC50YmwtPnRh aWwgPSBfaHNfdGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgIERFQ0xUWVBFX0FTU0lHTihoZWFkLCBFTE1UX0ZST01fSEgoKGhlYWQpLT5oaC50 YmwsIF9oc19saXN0KSk7ICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgIF9oc19pbnNpemUgKj0gMlU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIEhBU0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hfU1JUIik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9 IHdoaWxlICgwKQorKworKy8qIFRoaXMgZnVuY3Rpb24gc2VsZWN0cyBpdGVtcyBmcm9tIG9uZSBo YXNoIGludG8gYW5vdGhlciBoYXNoLgorKyAqIFRoZSBlbmQgcmVzdWx0IGlzIHRoYXQgdGhlIHNl bGVjdGVkIGl0ZW1zIGhhdmUgZHVhbCBwcmVzZW5jZQorKyAqIGluIGJvdGggaGFzaGVzLiBUaGVy ZSBpcyBubyBjb3B5IG9mIHRoZSBpdGVtcyBtYWRlOyByYXRoZXIKKysgKiB0aGV5IGFyZSBhZGRl ZCBpbnRvIHRoZSBuZXcgaGFzaCB0aHJvdWdoIGEgc2Vjb25kYXJ5IGhhc2gKKysgKiBoYXNoIGhh bmRsZSB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3RydWN0dXJlLiAqLworKyNkZWZpbmUg SEFTSF9TRUxFQ1QoaGhfZHN0LCBkc3QsIGhoX3NyYywgc3JjLCBjb25kKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25l ZCBfc3JjX2JrdCwgX2RzdF9ia3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgdm9pZCAqX2xhc3RfZWx0ID0gTlVMTCwgKl9lbHQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIFVUX2hhc2hf aGFuZGxlICpfc3JjX2hoLCAqX2RzdF9oaCwgKl9sYXN0X2VsdF9oaD1OVUxMOyAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICBwdHJkaWZmX3QgX2RzdF9oaG8gPSAoKGNoYXIqKSgmKGRzdCkt PmhoX2RzdCkgLSAoY2hhciopKGRzdCkpOyAgICAgICAgICAgICAgICAgXAorKyAgaWYgKChzcmMp ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgZm9yIChfc3JjX2JrdD0wOyBfc3JjX2JrdCA8IChzcmMpLT5o aF9zcmMudGJsLT5udW1fYnVja2V0czsgX3NyY19ia3QrKykgeyAgICBcCisrICAgICAgZm9yIChf c3JjX2hoID0gKHNyYyktPmhoX3NyYy50YmwtPmJ1Y2tldHNbX3NyY19ia3RdLmhoX2hlYWQ7ICAg ICAgICAgICAgICAgXAorKyAgICAgICAgX3NyY19oaCAhPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9zcmNf aGggPSBfc3JjX2hoLT5oaF9uZXh0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICBfZWx0ID0gRUxNVF9GUk9NX0hIKChzcmMpLT5oaF9zcmMu dGJsLCBfc3JjX2hoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGNv bmQoX2VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGludCBfaHNfb29t ZWQgPSAwOyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9kc3Rf aGggPSAoVVRfaGFzaF9oYW5kbGUqKSh2b2lkKikoKChjaGFyKilfZWx0KSArIF9kc3RfaGhvKTsg ICAgICAgICAgXAorKyAgICAgICAgICBfZHN0X2hoLT5rZXkgPSBfc3JjX2hoLT5rZXk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2RzdF9o aC0+a2V5bGVuID0gX3NyY19oaC0+a2V5bGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgIF9kc3RfaGgtPmhhc2h2ID0gX3NyY19oaC0+aGFzaHY7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfZHN0X2ho LT5wcmV2ID0gX2xhc3RfZWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgICAgX2RzdF9oaC0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGlmIChfbGFz dF9lbHRfaGggIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgICAgIF9sYXN0X2VsdF9oaC0+bmV4dCA9IF9lbHQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICAgIGlmICgoZHN0KSA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIERFQ0xUWVBF X0FTU0lHTihkc3QsIF9lbHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICBIQVNIX01BS0VfVEFCTEUoaGhfZHN0LCBkc3QsIF9oc19vb21l ZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgSUZfSEFTSF9O T05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICAgICAgaWYgKF9oc19vb21lZCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgdXRoYXNo X25vbmZhdGFsX29vbShfZWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICAgICAgICAgIChkc3QpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICBjb250aW51 ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfZHN0X2hoLT50Ymwg PSAoZHN0KS0+aGhfZHN0LnRibDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBIQVNIX1RPX0JLVChfZHN0 X2hoLT5oYXNodiwgX2RzdF9oaC0+dGJsLT5udW1fYnVja2V0cywgX2RzdF9ia3QpOyAgICAgIFwK KysgICAgICAgICAgSEFTSF9BRERfVE9fQktUKF9kc3RfaGgtPnRibC0+YnVja2V0c1tfZHN0X2Jr dF0sIGhoX2RzdCwgX2RzdF9oaCwgX2hzX29vbWVkKTsgXAorKyAgICAgICAgICAoZHN0KS0+aGhf ZHN0LnRibC0+bnVtX2l0ZW1zKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgaWYgKF9oc19v b21lZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICAgICAgSEFTSF9ST0xMQkFDS19CS1QoaGhfZHN0LCBkc3QsIF9kc3Rf aGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgIEhBU0hfREVM RVRFX0hIKGhoX2RzdCwgZHN0LCBfZHN0X2hoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICAgICAgICBfZHN0X2hoLT50YmwgPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgdXRoYXNoX25v bmZhdGFsX29vbShfZWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgSEFTSF9CTE9PTV9BREQo X2RzdF9oaC0+dGJsLCBfZHN0X2hoLT5oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgIF9sYXN0X2VsdCA9IF9lbHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfbGFzdF9lbHRfaGggPSBf ZHN0X2hoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBIQVNIX0ZTQ0soaGhfZHN0LCBkc3QsICJIQVNIX1NFTEVDVCIpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNI X0NMRUFSKGhoLGhlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGlmICgoaGVhZCkg IT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIEhBU0hfQkxPT01fRlJFRSgoaGVhZCktPmhoLnRibCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1dGhhc2hfZnJl ZSgoaGVhZCktPmhoLnRibC0+YnVja2V0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRz KnNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQpKTsgICAgICBcCisrICAgIHV0aGFzaF9mcmVl KChoZWFkKS0+aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAoaGVhZCkgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfT1ZFUkhFQUQoaGgsaGVh ZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICgoKGhlYWQpICE9IE5VTEwpID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAoc2l6ZV90KSgoKGhlYWQpLT5oaC50YmwtPm51 bV9pdGVtcyAgICogc2l6ZW9mKFVUX2hhc2hfaGFuZGxlKSkgICArICAgICAgICAgICAgIFwKKysg ICAgICAgICAgKChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cyAqIHNpemVvZihVVF9oYXNoX2J1 Y2tldCkpICAgKyAgICAgICAgICAgICBcCisrICAgICAgICAgICBzaXplb2YoVVRfaGFzaF90YWJs ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICAgICAgXAorKyAg ICAgICAgICAgKEhBU0hfQkxPT01fQllURUxFTikpKSA6IDBVKQorKworKyNpZmRlZiBOT19ERUNM VFlQRQorKyNkZWZpbmUgSEFTSF9JVEVSKGhoLGhlYWQsZWwsdG1wKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytmb3IoKChlbCk9KGhlYWQpKSwgKCgq KGNoYXIqKikoJih0bXApKSk9KGNoYXIqKSgoaGVhZCE9TlVMTCk/KGhlYWQpLT5oaC5uZXh0Ok5V TEwpKTsgXAorKyAgKGVsKSAhPSBOVUxMOyAoKGVsKT0odG1wKSksICgoKihjaGFyKiopKCYodG1w KSkpPShjaGFyKikoKHRtcCE9TlVMTCk/KHRtcCktPmhoLm5leHQ6TlVMTCkpKQorKyNlbHNlCisr I2RlZmluZSBIQVNIX0lURVIoaGgsaGVhZCxlbCx0bXApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorK2ZvcigoKGVsKT0oaGVhZCkpLCAoKHRtcCk9REVD TFRZUEUoZWwpKChoZWFkIT1OVUxMKT8oaGVhZCktPmhoLm5leHQ6TlVMTCkpOyAgICAgIFwKKysg IChlbCkgIT0gTlVMTDsgKChlbCk9KHRtcCkpLCAoKHRtcCk9REVDTFRZUEUoZWwpKCh0bXAhPU5V TEwpPyh0bXApLT5oaC5uZXh0Ok5VTEwpKSkKKysjZW5kaWYKKysKKysvKiBvYnRhaW4gYSBjb3Vu dCBvZiBpdGVtcyBpbiB0aGUgaGFzaCAqLworKyNkZWZpbmUgSEFTSF9DT1VOVChoZWFkKSBIQVNI X0NOVChoaCxoZWFkKQorKyNkZWZpbmUgSEFTSF9DTlQoaGgsaGVhZCkgKChoZWFkICE9IE5VTEwp PygoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zKTowVSkKKysKKyt0eXBlZGVmIHN0cnVjdCBVVF9o YXNoX2J1Y2tldCB7CisrICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpoaF9oZWFkOworKyAgIHVu c2lnbmVkIGNvdW50OworKworKyAgIC8qIGV4cGFuZF9tdWx0IGlzIG5vcm1hbGx5IHNldCB0byAw LiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIG1heCBjaGFpbiBsZW5ndGgKKysgICAgKiB0aHJlc2hv bGQgaXMgZW5mb3JjZWQgYXQgaXRzIGRlZmF1bHQgdmFsdWUsIEhBU0hfQktUX0NBUEFDSVRZX1RI UkVTSC4gKElmCisrICAgICogdGhlIGJ1Y2tldCdzIGNoYWluIGV4Y2VlZHMgdGhpcyBsZW5ndGgs IGJ1Y2tldCBleHBhbnNpb24gaXMgdHJpZ2dlcmVkKS4KKysgICAgKiBIb3dldmVyLCBzZXR0aW5n IGV4cGFuZF9tdWx0IHRvIGEgbm9uLXplcm8gdmFsdWUgZGVsYXlzIGJ1Y2tldCBleHBhbnNpb24K KysgICAgKiAodGhhdCB3b3VsZCBiZSB0cmlnZ2VyZWQgYnkgYWRkaXRpb25zIHRvIHRoaXMgcGFy dGljdWxhciBidWNrZXQpCisrICAgICogdW50aWwgaXRzIGNoYWluIGxlbmd0aCByZWFjaGVzIGEg Km11bHRpcGxlKiBvZiBIQVNIX0JLVF9DQVBBQ0lUWV9USFJFU0guCisrICAgICogKFRoZSBtdWx0 aXBsaWVyIGlzIHNpbXBseSBleHBhbmRfbXVsdCsxKS4gVGhlIHdob2xlIGlkZWEgb2YgdGhpcwor KyAgICAqIG11bHRpcGxpZXIgaXMgdG8gcmVkdWNlIGJ1Y2tldCBleHBhbnNpb25zLCBzaW5jZSB0 aGV5IGFyZSBleHBlbnNpdmUsIGluCisrICAgICogc2l0dWF0aW9ucyB3aGVyZSB3ZSBrbm93IHRo YXQgYSBwYXJ0aWN1bGFyIGJ1Y2tldCB0ZW5kcyB0byBiZSBvdmVydXNlZC4KKysgICAgKiBJdCBp cyBiZXR0ZXIgdG8gbGV0IGl0cyBjaGFpbiBsZW5ndGggZ3JvdyB0byBhIGxvbmdlciB5ZXQtc3Rp bGwtYm91bmRlZAorKyAgICAqIHZhbHVlLCB0aGFuIHRvIGRvIGFuIE8obikgYnVja2V0IGV4cGFu c2lvbiB0b28gb2Z0ZW4uCisrICAgICovCisrICAgdW5zaWduZWQgZXhwYW5kX211bHQ7CisrCisr fSBVVF9oYXNoX2J1Y2tldDsKKysKKysvKiByYW5kb20gc2lnbmF0dXJlIHVzZWQgb25seSB0byBm aW5kIGhhc2ggdGFibGVzIGluIGV4dGVybmFsIGFuYWx5c2lzICovCisrI2RlZmluZSBIQVNIX1NJ R05BVFVSRSAweGEwMTExZmUxdQorKyNkZWZpbmUgSEFTSF9CTE9PTV9TSUdOQVRVUkUgMHhiMTIy MjBmMnUKKysKKyt0eXBlZGVmIHN0cnVjdCBVVF9oYXNoX3RhYmxlIHsKKysgICBVVF9oYXNoX2J1 Y2tldCAqYnVja2V0czsKKysgICB1bnNpZ25lZCBudW1fYnVja2V0cywgbG9nMl9udW1fYnVja2V0 czsKKysgICB1bnNpZ25lZCBudW1faXRlbXM7CisrICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICp0 YWlsOyAvKiB0YWlsIGhoIGluIGFwcCBvcmRlciwgZm9yIGZhc3QgYXBwZW5kICAgICovCisrICAg cHRyZGlmZl90IGhobzsgLyogaGFzaCBoYW5kbGUgb2Zmc2V0IChieXRlIHBvcyBvZiBoYXNoIGhh bmRsZSBpbiBlbGVtZW50ICovCisrCisrICAgLyogaW4gYW4gaWRlYWwgc2l0dWF0aW9uIChhbGwg YnVja2V0cyB1c2VkIGVxdWFsbHkpLCBubyBidWNrZXQgd291bGQgaGF2ZQorKyAgICAqIG1vcmUg dGhhbiBjZWlsKCNpdGVtcy8jYnVja2V0cykgaXRlbXMuIHRoYXQncyB0aGUgaWRlYWwgY2hhaW4g bGVuZ3RoLiAqLworKyAgIHVuc2lnbmVkIGlkZWFsX2NoYWluX21heGxlbjsKKysKKysgICAvKiBu b25pZGVhbF9pdGVtcyBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBoYXNoIHdob3NlIGNo YWluIHBvc2l0aW9uCisrICAgICogZXhjZWVkcyB0aGUgaWRlYWwgY2hhaW4gbWF4bGVuLiB0aGVz ZSBpdGVtcyBwYXkgdGhlIHBlbmFsdHkgZm9yIGFuIHVuZXZlbgorKyAgICAqIGhhc2ggZGlzdHJp YnV0aW9uOyByZWFjaGluZyB0aGVtIGluIGEgY2hhaW4gdHJhdmVyc2FsIHRha2VzID5pZGVhbCBz dGVwcyAqLworKyAgIHVuc2lnbmVkIG5vbmlkZWFsX2l0ZW1zOworKworKyAgIC8qIGluZWZmZWN0 aXZlIGV4cGFuZHMgb2NjdXIgd2hlbiBhIGJ1Y2tldCBkb3VibGluZyB3YXMgcGVyZm9ybWVkLCBi dXQKKysgICAgKiBhZnRlcndhcmQsIG1vcmUgdGhhbiBoYWxmIHRoZSBpdGVtcyBpbiB0aGUgaGFz aCBoYWQgbm9uaWRlYWwgY2hhaW4KKysgICAgKiBwb3NpdGlvbnMuIElmIHRoaXMgaGFwcGVucyBv biB0d28gY29uc2VjdXRpdmUgZXhwYW5zaW9ucyB3ZSBpbmhpYml0IGFueQorKyAgICAqIGZ1cnRo ZXIgZXhwYW5zaW9uLCBhcyBpdCdzIG5vdCBoZWxwaW5nOyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUg aGFzaAorKyAgICAqIGZ1bmN0aW9uIGlzbid0IGEgZ29vZCBmaXQgZm9yIHRoZSBrZXkgZG9tYWlu LiBXaGVuIGV4cGFuc2lvbiBpcyBpbmhpYml0ZWQKKysgICAgKiB0aGUgaGFzaCB3aWxsIHN0aWxs IHdvcmssIGFsYmVpdCBubyBsb25nZXIgaW4gY29uc3RhbnQgdGltZS4gKi8KKysgICB1bnNpZ25l ZCBpbmVmZl9leHBhbmRzLCBub2V4cGFuZDsKKysKKysgICB1aW50MzJfdCBzaWduYXR1cmU7IC8q IHVzZWQgb25seSB0byBmaW5kIGhhc2ggdGFibGVzIGluIGV4dGVybmFsIGFuYWx5c2lzICovCisr I2lmZGVmIEhBU0hfQkxPT00KKysgICB1aW50MzJfdCBibG9vbV9zaWc7IC8qIHVzZWQgb25seSB0 byB0ZXN0IGJsb29tIGV4aXN0cyBpbiBleHRlcm5hbCBhbmFseXNpcyAqLworKyAgIHVpbnQ4X3Qg KmJsb29tX2J2OworKyAgIHVpbnQ4X3QgYmxvb21fbmJpdHM7CisrI2VuZGlmCisrCisrfSBVVF9o YXNoX3RhYmxlOworKworK3R5cGVkZWYgc3RydWN0IFVUX2hhc2hfaGFuZGxlIHsKKysgICBzdHJ1 Y3QgVVRfaGFzaF90YWJsZSAqdGJsOworKyAgIHZvaWQgKnByZXY7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBwcmV2IGVsZW1lbnQgaW4gYXBwIG9yZGVyICAgICAgKi8KKysgICB2b2lkICpuZXh0 OyAgICAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBlbGVtZW50IGluIGFwcCBvcmRlciAgICAg ICovCisrICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpoaF9wcmV2OyAgIC8qIHByZXZpb3VzIGho IGluIGJ1Y2tldCBvcmRlciAgICAqLworKyAgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqaGhfbmV4 dDsgICAvKiBuZXh0IGhoIGluIGJ1Y2tldCBvcmRlciAgICAgICAgKi8KKysgICBjb25zdCB2b2lk ICprZXk7ICAgICAgICAgICAgICAgICAgLyogcHRyIHRvIGVuY2xvc2luZyBzdHJ1Y3QncyBrZXkg ICovCisrICAgdW5zaWduZWQga2V5bGVuOyAgICAgICAgICAgICAgICAgIC8qIGVuY2xvc2luZyBz dHJ1Y3QncyBrZXkgbGVuICAgICAqLworKyAgIHVuc2lnbmVkIGhhc2h2OyAgICAgICAgICAgICAg ICAgICAvKiByZXN1bHQgb2YgaGFzaC1mY24oa2V5KSAgICAgICAgKi8KKyt9IFVUX2hhc2hfaGFu ZGxlOworKworKyNlbmRpZiAvKiBVVEhBU0hfSCAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuNXAx Lm9yaWcvdmVyc2lvbi5oIG9wZW5zc2gtMTAuNXAxL3ZlcnNpb24uaAorLS0tIG9wZW5zc2gtMTAu NXAxLm9yaWcvdmVyc2lvbi5oCTIwMjYtMDktMjEgMDc6MDY6MDUuNTY3NjQzOTg4ICswMjAwCisr Kysgb3BlbnNzaC0xMC41cDEvdmVyc2lvbi5oCTIwMjYtMDktMjEgMDg6MDE6MzAuODc3MTkxMTcz ICswMjAwCitAQCAtMTYsNSArMTYsNiBAQAorIAorICNkZWZpbmUgU1NIX1BPUlRBQkxFCSJwMSIK KyAjZGVmaW5lIEdTSV9QT1JUQUJMRQkiYy1HU0kiCistI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hf VkVSU0lPTiBTU0hfUE9SVEFCTEUgR1NJX1BPUlRBQkxFIFwKKysjZGVmaW5lIFNTSF9IUE4JCSJf aHBuMTguMTEuMSIKKysjZGVmaW5lIFNTSF9SRUxFQVNFCVNTSF9WRVJTSU9OIFNTSF9QT1JUQUJM RSBHU0lfUE9SVEFCTEUgU1NIX0hQTiBcCisgCQkJR1NJX1ZFUlNJT04gS1JCNV9WRVJTSU9OCgpk aWZmIC0tZ2l0IGEvZ3NpLW9wZW5zc2guc3BlYyBiL2dzaS1vcGVuc3NoLnNwZWMKaW5kZXggYzE0 MzAzNi4uMGRiZmVjOCAxMDA2NDQKLS0tIGEvZ3NpLW9wZW5zc2guc3BlYworKysgYi9nc2ktb3Bl bnNzaC5zcGVjCkBAIC0yMywxMiArMjMsMTIgQEAKICMgRG8gd2Ugd2FudCBsaWJlZGl0IHN1cHBv cnQKICVnbG9iYWwgbGliZWRpdCAxCiAKLSVnbG9iYWwgb3BlbnNzaF92ZXIgMTAuM3AxCislZ2xv YmFsIG9wZW5zc2hfdmVyIDEwLjVwMQogCiBTdW1tYXJ5OiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0 aGUgU1NIIHByb3RvY29sIHdpdGggR1NJIGF1dGhlbnRpY2F0aW9uCiBOYW1lOiBnc2ktb3BlbnNz aAogVmVyc2lvbjogJXtvcGVuc3NoX3Zlcn0KLVJlbGVhc2U6IDMlez9kaXN0fQorUmVsZWFzZTog MSV7P2Rpc3R9CiBQcm92aWRlczogZ3Npc3NoID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiBPYnNv bGV0ZXM6IGdzaXNzaCA8IDUuOHAyLTIKIFVSTDogaHR0cDovL3d3dy5vcGVuc3NoLmNvbS9wb3J0 YWJsZS5odG1sCkBAIC00OCwxMyArNDgsMTQgQEAgU291cmNlMjA6IGdzaXNzaC1ob3N0LWtleXMt bWlncmF0aW9uLnNoCiBTb3VyY2UyMTogZ3Npc3NoLWhvc3Qta2V5cy1taWdyYXRpb24uc2Vydmlj ZQogU291cmNlOTk6IFJFQURNRS5zc2hkLWFuZC1nc2lzc2hkCiAKLVBhdGNoMDAwMTogMDAwMS1B ZGQtU0VMaW51eC1yb2xlLWFuZC1NTFMtTXVsdGktTGV2ZWwtU2VjdXJpdHktc3VwcG9yLnBhdGNo Ci1QYXRjaDAwMDI6IDAwMDItSW1wbGVtZW50LVNFTGludXgtZW52aXJvbm1lbnQtdmFyaWFibGUt c2V0dXAtZm9yLXN1Yi5wYXRjaAotUGF0Y2gwMDAzOiAwMDAzLVBhc3MtaW5ldGQtZmxhZ3MtYW5k LWF1dGgtY29udGV4dC10by1zdWJwcm9jZXNzLWNhbGwucGF0Y2gKLVBhdGNoMDAwNDogMDAwNC1v cGVuc3NoLTYuNnAxLWtleWNhdC5wYXRjaAotUGF0Y2gwMDA1OiAwMDA1LW9wZW5zc2gtNi42cDEt YWxsb3ctaXAtb3B0cy5wYXRjaAotUGF0Y2gwMDA2OiAwMDA2LW9wZW5zc2gtNS45cDEtaXB2Nm1h bi5wYXRjaAotUGF0Y2gwMDA3OiAwMDA3LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaAorUGF0 Y2gwMDAxOiAwMDAxLW9wZW5zc2gtNi43cDEtY292ZXJpdHkucGF0Y2gKK1BhdGNoMDAwMjogMDAw Mi1BZGQtU0VMaW51eC1yb2xlLWFuZC1NTFMtTXVsdGktTGV2ZWwtU2VjdXJpdHktc3VwcG9yLnBh dGNoCitQYXRjaDAwMDM6IDAwMDMtSW1wbGVtZW50LVNFTGludXgtZW52aXJvbm1lbnQtdmFyaWFi bGUtc2V0dXAtZm9yLXN1Yi5wYXRjaAorUGF0Y2gwMDA0OiAwMDA0LVBhc3MtaW5ldGQtZmxhZ3Mt YW5kLWF1dGgtY29udGV4dC10by1zdWJwcm9jZXNzLWNhbGwucGF0Y2gKK1BhdGNoMDAwNTogMDAw NS1vcGVuc3NoLTYuNnAxLWtleWNhdC5wYXRjaAorUGF0Y2gwMDA2OiAwMDA2LW9wZW5zc2gtNi42 cDEtYWxsb3ctaXAtb3B0cy5wYXRjaAorUGF0Y2gwMDA3OiAwMDA3LW9wZW5zc2gtNS45cDEtaXB2 Nm1hbi5wYXRjaAorUGF0Y2gwMDA4OiAwMDA4LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaAog UGF0Y2gwMDA5OiAwMDA5LW9wZW5zc2gtNS4xcDEtYXNrcGFzcy1wcm9ncmVzcy5wYXRjaAogUGF0 Y2gwMDEwOiAwMDEwLW9wZW5zc2gtNC4zcDItYXNrcGFzcy1ncmFiLWluZm8ucGF0Y2gKIFBhdGNo MDAxMTogMDAxMS1vcGVuc3NoLTguN3AxLXJlZGhhdC5wYXRjaApAQCAtOTEsMjUgKzkyLDIzIEBA IFBhdGNoMDA0MTogMDA0MS1vcGVuc3NoLTguN3AxLW5vaG9zdHNoYTFwcm9vZi5wYXRjaAogUGF0 Y2gwMDQyOiAwMDQyLW9wZW5zc2gtOS45cDEtc2VwYXJhdGUta2V5c2lnbi5wYXRjaAogUGF0Y2gw MDQzOiAwMDQzLW9wZW5zc2gtOS45cDEtb3BlbnNzbC1tbGtlbS5wYXRjaAogUGF0Y2gwMDQ0OiAw MDQ0LW9wZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZy5wYXRjaAotUGF0Y2gwMDQ1OiAwMDQ1 LVByb3ZpZGUtYmV0dGVyLWVycm9yLWZvci1ub24tc3VwcG9ydGVkLXByaXZhdGUta2V5cy5wYXRj aAotUGF0Y2gwMDQ2OiAwMDQ2LUlnbm9yZS1iYWQtaG9zdGtleXMtaW4ta25vd25faG9zdHMtZmls ZS5wYXRjaAotUGF0Y2gwMDQ3OiAwMDQ3LXN1cHBvcnQtYXV0aGVudGljYXRpb24taW5kaWNhdG9y cy1pbi1HU1NBUEkucGF0Y2gKLVBhdGNoMDA0ODogMDA0OC1OSVNULWN1cnZlcy1oeWJyaWQtS0VY LWltcGxlbWVudGF0aW9uLnBhdGNoCi1QYXRjaDAwNDk6IDAwNDktb3BlbnNzaC03LjNwMS14MTEt bWF4LWRpc3BsYXlzLnBhdGNoCi1QYXRjaDAwNTA6IDAwNTAtRml4LXNzaC1wa2NzMTEtY2xpZW50 LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaAotUGF0Y2gwMDUxOiAwMDUxLW9wZW5zc2gtMTAuMnAx LXBhbS1hdXRoLnBhdGNoCi1QYXRjaDAwNTI6IDAwNTItZ3NzYXBpLXM0dS5wYXRjaAotUGF0Y2gw MDUzOiAwMDUzLW9wZW5zc2gtMTAuMnAxLXBrY3MxMS11cmkucGF0Y2gKLVBhdGNoMDA1NDogMDA1 NC1nc3NhcGktdGVzdHMucGF0Y2gKLVBhdGNoMTAwMDogMTAwMC1vcGVuc3NoLTYuN3AxLWNvdmVy aXR5LnBhdGNoCitQYXRjaDAwNDU6IDAwNDUtSWdub3JlLWJhZC1ob3N0a2V5cy1pbi1rbm93bl9o b3N0cy1maWxlLnBhdGNoCitQYXRjaDAwNDY6IDAwNDYtc3VwcG9ydC1hdXRoZW50aWNhdGlvbi1p bmRpY2F0b3JzLWluLUdTU0FQSS5wYXRjaAorUGF0Y2gwMDQ3OiAwMDQ3LU5JU1QtY3VydmVzLWh5 YnJpZC1LRVgtaW1wbGVtZW50YXRpb24ucGF0Y2gKK1BhdGNoMDA0ODogMDA0OC1vcGVuc3NoLTcu M3AxLXgxMS1tYXgtZGlzcGxheXMucGF0Y2gKK1BhdGNoMDA0OTogMDA0OS1GaXgtc3NoLXBrY3Mx MS1jbGllbnQtaGVscGVyLXRlcm1pbmF0aW9uLnBhdGNoCitQYXRjaDAwNTA6IDAwNTAtb3BlbnNz aC0xMC4ycDEtcGFtLWF1dGgucGF0Y2gKK1BhdGNoMDA1MTogMDA1MS1nc3NhcGktczR1LnBhdGNo CitQYXRjaDAwNTI6IDAwNTItb3BlbnNzaC0xMC4ycDEtcGtjczExLXVyaS5wYXRjaAorUGF0Y2gw MDUzOiAwMDUzLWdzc2FwaS10ZXN0cy5wYXRjaAogCiAjIFRoaXMgaXMgdGhlIHBhdGNoIHRoYXQg YWRkcyBHU0kgc3VwcG9ydAogIyBCYXNlZCBvbiBocG5faXNzaGQtZ3NpLjcuNXAxYi5wYXRjaCBm cm9tIEdsb2J1cyB1cHN0cmVhbQotUGF0Y2gyMDAwOiAyMDAwLW9wZW5zc2gtMTAuM3AxLWdzaXNz aC5wYXRjaAorUGF0Y2gyMDAwOiAyMDAwLW9wZW5zc2gtMTAuNXAxLWdzaXNzaC5wYXRjaAogCiAj IFRoaXMgaXMgdGhlIEhQTiBwYXRjaAotIyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vcmFw aWVyMS9ocG4tc3NoLyB0YWc6IGhwbi0xOC45LjAKLVBhdGNoMjAwMTogMjAwMS1vcGVuc3NoLTEw LjNwMS1ocG4tMTguOS4wLnBhdGNoCisjIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9yYXBp ZXIxL2hwbi1zc2gvIHRhZzogaHBuLTE4LjExLjEKK1BhdGNoMjAwMTogMjAwMS1vcGVuc3NoLTEw LjVwMS1ocG4tMTguMTEuMS5wYXRjaAogCiBMaWNlbnNlOiBCU0QtMy1DbGF1c2UgQU5EIEJTRC0y LUNsYXVzZSBBTkQgSVNDIEFORCBTU0gtT3BlblNTSCBBTkQgc3NoLWtleXNjYW4gQU5EIHNucHJp bnRmIEFORCBMaWNlbnNlUmVmLUZlZG9yYS1QdWJsaWMtRG9tYWluIEFORCBYMTEtZGlzdHJpYnV0 ZS1tb2RpZmljYXRpb25zLXZhcmlhbnQKIFJlcXVpcmVzOiBvcGVuc3NsLWxpYnMgPj0gMTozLjUu MApAQCAtMzgxLDcgKzM4MCw3IEBAIGZpCiAKICVmaWxlcwogJWxpY2Vuc2UgTElDRU5DRQotJWRv YyBDUkVESVRTIENoYW5nZUxvZyBPVkVSVklFVyBQUk9UT0NPTCogUkVBRE1FIEhQTi1SRUFETUUg UkVBRE1FLnBsYXRmb3JtIFJFQURNRS5wcml2c2VwIFJFQURNRS50dW4gUkVBRE1FLmRucyBSRUFE TUUuc3NoZC1hbmQtZ3Npc3NoZCBUT0RPCislZG9jIENSRURJVFMgQ2hhbmdlTG9nIE9WRVJWSUVX IFBST1RPQ09MKiBSRUFETUUubWQgSFBOLVJFQURNRSBSRUFETUUucGxhdGZvcm0gUkVBRE1FLnBy aXZzZXAgUkVBRE1FLmRucyBSRUFETUUuc3NoZC1hbmQtZ3Npc3NoZCBUT0RPCiAlYXR0cigwNzU1 LHJvb3Qscm9vdCkgJWRpciAle19zeXNjb25mZGlyfS9nc2lzc2gKICVhdHRyKDA2NDQscm9vdCxy b290KSAlY29uZmlnKG5vcmVwbGFjZSkgJXtfc3lzY29uZmRpcn0vZ3Npc3NoL21vZHVsaQogJWF0 dHIoMDc1NSxyb290LHJvb3QpICV7X2JpbmRpcn0vZ3Npc3NoLWtleWdlbgpAQCAtNDM3LDYgKzQz Niw5IEBAIGZpCiAlZ2hvc3QgJWF0dHIoMDY0NCxyb290LHJvb3QpICV7X2xvY2Fsc3RhdGVkaXJ9 L2xpYi8uZ3Npc3NoLWhvc3Qta2V5cy1taWdyYXRpb24KIAogJWNoYW5nZWxvZworKiBTdW4gU2Vw IDIwIDIwMjYgTWF0dGlhcyBFbGxlcnQgPG1hdHRpYXMuZWxsZXJ0QHBoeXNpY3MudXUuc2U+IC0g MTAuNXAxLTEKKy0gQmFzZWQgb24gb3BlbnNzaC0xMC41cDEtMS5mYzQ1CisKICogVGh1IEp1bCAx NiAyMDI2IEZlZG9yYSBSZWxlYXNlIEVuZ2luZWVyaW5nIDxyZWxlbmdAZmVkb3JhcHJvamVjdC5v cmc+IC0gMTAuM3AxLTMKIC0gUmVidWlsdCBmb3IgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93 aWtpL0ZlZG9yYV80NV9NYXNzX1JlYnVpbGQKIAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3Vy Y2VzCmluZGV4IDVkODkyMjkuLmRjNjdhMDYgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291 cmNlcwpAQCAtMSwzICsxLDMgQEAKLVNIQTUxMiAob3BlbnNzaC0xMC4zcDEudGFyLmd6KSA9IGNi MmJkNjcwODY0OTFjMjVlMzA1ODc5YjkyNGMzZGZhODIzNjUwMmE2MGM3ZjI1MGIyZmQxN2QyZDlh NzllYmZjMmU0MGIyZjQzZTQyZGNmNTk4Y2M1MTA5OTZlMDBjYzAzZGY5YjhlMzhmMzRiYzJkYzcx YTNkNGZmMzc4OGZhCi1TSEE1MTIgKG9wZW5zc2gtMTAuM3AxLnRhci5nei5hc2MpID0gMmM4YWZi ZTU3ZjY3MTJmMTU5YWEzYTE2MGI2ZmZjNDNmOTQ1YTk4Y2NkOGUxNTFmYTZhMDQ3ZWEzMGIzNzZl NWUxY2FjODQ0YTY3OGE3ODk5ZGE4MDcwNGIzZDIzZmVkYTYxMmZmYWRhMWVlMDAzZjRjN2ZiODI5 MWY0ODQ2MDAKK1NIQTUxMiAob3BlbnNzaC0xMC41cDEudGFyLmd6KSA9IDUzMzZjMTk0NTUyN2Iy OWVkNTljYzUwMGZhOGJmYmQ5MThmNWJhOTdlODU1MTJkYWFkOWFiNzI0MTQxODkyOWJmNzE1MmQz MDBlNWYzYzVmOWE4YzhkNjk5ZGZkZTVhNjRjNWZhYTRmYzMzYjI3NThhYjUyZGQwNDA0MGQ2Mjg0 CitTSEE1MTIgKG9wZW5zc2gtMTAuNXAxLnRhci5nei5hc2MpID0gYjMxZTYxZDk4NDIwNTk4ZTQw YzlmNzUxNWU4MzNjMTQwNDE1ZGQxZjU5MzkxYTU1OGUzZjQ4Yzg3OGQxZmExZGVmYzhlYzMxNmEx N2E5NzM3MzAyY2RlZDU0YTIxNmE5NTQyNWE3ODVlNjYxYWRjODZkNzBkZDJjOTUwMTRmZTcKIFNI QTUxMiAoZ3Bna2V5LTczNjA2MEJBLmdwZykgPSBkZjQ0ZjNmZGJjZDFkNTk2NzA1MzQ4YzdmNWFl ZDNmNzM4YzVmNjI2YTU1OTU1ZTA2NDJmN2M2YzA4Mjk5NWNmMzZhMWIxODkxYmI0MWI4NzE1Y2Iy YWZmMzRmZWYxYzg3N2UwZWZmMGQzNTA3ZGQwMGEwNTViYTY5NTc1N2EyMQo=