ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKaW5kZXggYWJhMTJhMS4uODNmODFhZCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZXZhbC50eHQKKysrIGIvcnVudGltZS9kb2MvZXZhbC50eHQKQEAgLTEsNCArMSw0IEBACi0qZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgSnVuIDE3CisqZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgSnVuIDIwCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xNjAzLDYgKzE2MDMsOCBAQAogc2V0d2ludmFyKCB7bnJ9LCB7dmFybmFtZX0sIHt2YWx9KQlzZXQge3Zhcm5hbWV9IGluIHdpbmRvdyB7bnJ9IHRvIHt2YWx9CiBzaW1wbGlmeSgge2ZpbGVuYW1lfSkJCVN0cmluZwlzaW1wbGlmeSBmaWxlbmFtZSBhcyBtdWNoIGFzIHBvc3NpYmxlCiBzb3J0KCB7bGlzdH0gWywge2Z1bmN9XSkJTGlzdAlzb3J0IHtsaXN0fSwgdXNpbmcge2Z1bmN9IHRvIGNvbXBhcmUKK3NwZWxsYmFkd29yZCgpCQkJU3RyaW5nCWJhZGx5IHNwZWxsZWQgd29yZCBhdCBjdXJzb3IKK3NwZWxsc3VnZ2VzdCh7d29yZH0gWywge21heH1dKQlMaXN0CXNwZWxsaW5nIHN1Z2dlc3Rpb25zCiBzcGxpdCgge2V4cHJ9IFssIHtwYXR9IFssIHtrZWVwZW1wdHl9XV0pCiAJCQkJTGlzdAltYWtlIExpc3QgZnJvbSB7cGF0fSBzZXBhcmF0ZWQge2V4cHJ9CiBzdHJmdGltZSgge2Zvcm1hdH1bLCB7dGltZX1dKQlTdHJpbmcJdGltZSBpbiBzcGVjaWZpZWQgZm9ybWF0CkBAIC0zNzU3LDYgKzM3NTksMjcgQEAKIAkJCSAgIHJldHVybiBhOmkxID09IGE6aTIgPyAwIDogYTppMSA+IGE6aTIgPyAxIDogLTEKIAkJCWVuZGZ1bmMKIAkJCWxldCBzb3J0ZWRsaXN0ID0gc29ydChteWxpc3QsICJNeUNvbXBhcmUiKQorPAorCisJCQkJCQkJKnNwZWxsYmFkd29yZCgpKgorc3BlbGxiYWR3b3JkKCkJUmV0dXJuIHRoZSBiYWRseSBzcGVsbGVkIHdvcmQgdW5kZXIgb3IgYWZ0ZXIgdGhlIGN1cnNvci4KKwkJVGhlIGN1cnNvciBpcyBhZHZhbmNlZCB0byB0aGUgc3RhcnQgb2YgdGhlIGJhZCB3b3JkLgorCQlXaGVuIG5vIGJhZCB3b3JkIGlzIGZvdW5kIGluIHRoZSBjdXJzb3IgbGluZSBhbiBlbXB0eSBTdHJpbmcKKwkJaXMgcmV0dXJuZWQgYW5kIHRoZSBjdXJzb3IgZG9lc24ndCBtb3ZlLgorCisJCQkJCQkJKnNwZWxsc3VnZ2VzdCgpKgorc3BlbGxzdWdnZXN0KHt3b3JkfSBbLCB7bWF4fV0pCisJCVJldHVybiBhIExpc3Qgd2l0aCBzcGVsbGluZyBzdWdnZXN0aW9ucyB0byByZXBsYWNlIHt3b3JkfS4KKwkJV2hlbiB7bWF4fSBpcyBnaXZlbiB1cCB0byB0aGlzIG51bWJlciBvZiBzdWdnZXN0aW9ucyBhcmUKKwkJcmV0dXJuZWQuICBPdGhlcndpc2UgdXAgdG8gMjUgc3VnZ2VzdGlvbnMgYXJlIHJldHVybmVkLgorCisJCXt3b3JkfSBjYW4gYmUgYSBiYWRseSBzcGVsbGVkIHdvcmQgZm9sbG93ZWQgYnkgb3RoZXIgdGV4dC4KKwkJVGhpcyBhbGxvd3MgZm9yIGpvaW5pbmcgdHdvIHdvcmRzIHRoYXQgd2VyZSBzcGxpdC4gIFRoZQorCQlzdWdnZXN0aW9ucyB0aGVuIGFsc28gaW5jbHVkZSB0aGUgZm9sbG93aW5nIHRleHQuCisKKwkJVGhlIHNwZWxsaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCB3aW5kb3cgaXMgdXNlZC4gIFRoZQorCQknc3BlbGwnIG9wdGlvbiBtdXN0IGJlIHNldCBhbmQgJ3NwZWxsbGFuZycgaXMgcmVsZXZhbnQuCisKIAogc3BsaXQoe2V4cHJ9IFssIHtwYXR0ZXJufSBbLCB7a2VlcGVtcHR5fV1dKQkJCSpzcGxpdCgpKgogCQlNYWtlIGEgTGlzdCBvdXQgb2Yge2V4cHJ9LiAgV2hlbiB7cGF0dGVybn0gaXMgb21pdHRlZCBvciBlbXB0eQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQgYi9ydW50aW1lL2RvYy9vcHRpb25zLnR4dAppbmRleCA5NGJkOWY0Li5hMmMwNWY5IDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9vcHRpb25zLnR4dAorKysgYi9ydW50aW1lL2RvYy9vcHRpb25zLnR4dApAQCAtMSw0ICsxLDQgQEAKLSpvcHRpb25zLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgSnVuIDE3Cisqb3B0aW9ucy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA1IEp1biAyMQogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC01NjYyLDYgKzU2NjIsMjUgQEAKIAlpZGVhIHRvIHNldCAnc3BlbGxsYW5nJyBhZnRlciBzZXR0aW5nICdlbmNvZGluZycuCiAJTW9yZSBpbmZvIGF0IHxzcGVsbHwuCiAKKwkJCQkJCSonc3BlbGxzdWdnZXN0JyogKidzcHMnKgorJ3NwZWxsc3VnZ2VzdCcgJ3NwcycJc3RyaW5nCShkZWZhdWx0ICJiZXN0IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzeW50YXh8CisJCQlmZWF0dXJlfQorCU1ldGhvZCB1c2VkIGZvciBzcGVsbGluZyBzdWdnZXN0aW9ucyB8ej98LiAgQ2FuIGJlIG9uZSBvZiB0aGVzZQorCXZhbHVlczoKKworCWJlc3QJCU1ldGhvZCB0aGF0IHdvcmtzIGJlc3QgZm9yIEVuZ2xpc2guICBGaW5kcyBzbWFsbAorCQkJY2hhbmdlcyBhbmQgdXNlcyBzb21lIHNvdW5kLWEtbGlrZSBzY29yaW5nLgorCWRvdWJsZQkJVXNlcyB0d28gbWV0aG9kcyBhbmQgbWl4ZXMgdGhlIHJlc3VsdHMuICBUaGUgZmlyc3QKKwkJCW1ldGhvZCBpcyBmaW5kaW5nIHNtYWxsIGNoYW5nZXMsIHRoZSBvdGhlciBtZXRob2QKKwkJCWNvbXB1dGVzIGhvdyBtdWNoIHRoZSBzdWdnZXN0aW9uIHNvdW5kcyBsaWtlIHRoZSBiYWQKKwkJCXdvcmQuICBDYW4gYmUgc2xvdyBhbmQgZG9lc24ndCBhbHdheXMgZ2l2ZSBiZXR0ZXIKKwkJCXJlc3VsdHMuCisJZmFzdAkJT25seSBjaGVjayBmb3Igc21hbGwgY2hhbmdlcy4KKworCiAJCQkqJ3NwbGl0YmVsb3cnKiAqJ3NiJyogKidub3NwbGl0YmVsb3cnKiAqJ25vc2InKgogJ3NwbGl0YmVsb3cnICdzYicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCiAJCQlnbG9iYWwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3NwZWxsLnR4dCBiL3J1bnRpbWUvZG9jL3NwZWxsLnR4dAppbmRleCA0YzdhMWE4Li43MDEzZTZkIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9zcGVsbC50eHQKKysrIGIvcnVudGltZS9kb2Mvc3BlbGwudHh0CkBAIC0xLDQgKzEsNCBAQAotKnNwZWxsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgSnVuIDE5Cisqc3BlbGwudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBKdW4gMjEKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtOTIsNiArOTIsMTIgQEAKIAkJCWhpZ2hlciB0aGUgc2NvcmUgdGhlIG1vcmUgZGlmZmVyZW50KS4KIAkJCVRoZSBzY29yZSBtYXkgYmUgc2xpZ2h0bHkgd3JvbmcgZm9yIHdvcmRzIHdpdGgKIAkJCW11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKwkJCVdoZW4gYSB3b3JkIHdhcyByZXBsYWNlZCB0aGUgcmVkbyBjb21tYW5kICIuIiB3aWxsCisJCQlyZXBlYXQgdGhlIHdvcmQgcmVwbGFjZW1lbnQuICBUaGlzIHdvcmtzIGxpa2UgImNpdyIsCisJCQl0aGUgZ29vZCB3b3JkIGFuZCA8RXNjPi4KKworVGhlICdzcGVsbHN1Z2dlc3QnIG9wdGlvbiBpbmZsdWVuY2VzIGhvdyB0aGUgbGlzdCBvZiBzdWdnZXN0aW9ucyBpcyBnZW5lcmF0ZWQKK2FuZCBzb3J0ZWQuICBTZWUgfCdzcGVsbHN1Z2dlc3QnfC4KIAogCiBQRVJGT1JNQU5DRQpAQCAtMzM3LDcgKzM0Myw3IEBACiAJL3JlZ2lvbnM9dXNjYWdiCQkJCXJlZ2lvbnMgInVzIiwgImNhIiBhbmQgImdiIgogCWV4YW1wbGUJCQkJCXdvcmQgZm9yIGFsbCByZWdpb25zCiAJLzFibGFoCQkJCQl3b3JkIGZvciByZWdpb24gMSAidXMiCi0JLyFWaW0JCQkJCWJhZCB3b3JkCisJLyF2aW0JCQkJCWJhZCB3b3JkCiAJLz8zQ2FtcGJlbGwJCQkJcmFyZSB3b3JkIGluIHJlZ2lvbiAzICJnYiIKIAkvPSdzIG1vcm5pbmdzCQkJCWtlZXAtY2FzZSB3b3JkCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RhZ3MgYi9ydW50aW1lL2RvYy90YWdzCmluZGV4IDdlYzJlMjguLmNlNDgwN2EgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RhZ3MKKysrIGIvcnVudGltZS9kb2MvdGFncwpAQCAtNTEzMCw2ICs1MTMwLDcgQEAKIGhlYnJldy50eHQJaGVicmV3LnR4dAkvKmhlYnJldy50eHQqCiBoZWxwCXZhcmlvdXMudHh0CS8qaGVscCoKIGhlbHAtY29udGV4dAloZWxwLnR4dAkvKmhlbHAtY29udGV4dCoKK2hlbHAtdGFncwl0YWdzCTEKIGhlbHAtdHJhbnNsYXRlZAl2YXJpb3VzLnR4dAkvKmhlbHAtdHJhbnNsYXRlZCoKIGhlbHAteHRlcm0td2luZG93CXZhcmlvdXMudHh0CS8qaGVscC14dGVybS13aW5kb3cqCiBoZWxwLnR4dAloZWxwLnR4dAkvKmhlbHAudHh0KgpAQCAtNjI3NCw2ICs2Mjc1LDggQEAKIHNwZWxsLXN5bnRheAlzcGVsbC50eHQJLypzcGVsbC1zeW50YXgqCiBzcGVsbC13b3JkbGlzdC1mb3JtYXQJc3BlbGwudHh0CS8qc3BlbGwtd29yZGxpc3QtZm9ybWF0Kgogc3BlbGwudHh0CXNwZWxsLnR4dAkvKnNwZWxsLnR4dCoKK3NwZWxsYmFkd29yZCgpCWV2YWwudHh0CS8qc3BlbGxiYWR3b3JkKCkqCitzcGVsbHN1Z2dlc3QoKQlldmFsLnR4dAkvKnNwZWxsc3VnZ2VzdCgpKgogc3BsaXQoKQlldmFsLnR4dAkvKnNwbGl0KCkqCiBzcGxpdGZpbmQJd2luZG93cy50eHQJLypzcGxpdGZpbmQqCiBzcGxpdHZpZXcJd2luZG93cy50eHQJLypzcGxpdHZpZXcqCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90b2RvLnR4dCBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CmluZGV4IDA2YThmYmMuLjYxNTliOGYgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3RvZG8udHh0CisrKyBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CkBAIC0xLDQgKzEsNCBAQAotKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA1IEp1biAxOQorKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA1IEp1biAyMgogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0zMCw5ICszMCw2IEBACiAJCQkJCQkJKmtub3duLWJ1Z3MqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBLbm93biBidWdzIGFuZCBjdXJyZW50IHdvcmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ2FuIGRlZmluZSBhIGZ1bmN0aW9uIHdpdGggaWxsZWdhbCBuYW1lIChTZXJ2YXRpdXMgQnJhbmR0KToKLSAgICBmdW5jdGlvbiBGey0xfSgpCi0KIEFkZCBleHRyYSBsaXN0IG9mIGZpbGUgbG9jYXRpb25zLiAgQ2FuIGJlIHVzZWQgd2l0aDoKICAgICA6bHRhZwkgICAgICBsaXN0IG9mIG1hdGNoaW5nIHRhZ3MsIGxpa2UgOnRzZWxlY3QKIApAQCAtNTYsNiArNTMsOCBAQAogICAgIFBhdGNoIGZyb20gU2VyZ2V5IEtob3JldiwgMjAwNSBBcHIgMTEKICAgICBBZGQgaGFzKCJiYWxsb29uX211bHRpbGluZSIpCiAKK1dpbjMyOiBDcmFzaCB3aGVuIHBhc3RpbmcgU2ltcGxpZmllZCBDaGluZXNlIGluIHV0Zi04LiAocmFpbnV4LCAyMDA1IEp1bmUgMjApCisKIE1hYyB1bmljb2RlIHBhdGNoIChEYSBXb29uIEp1bmcpOgogLSBzZWxlY3RpbmcgcHJvcG9ydGlvbmFsIGZvbnQgYnJlYWtzIGRpc3BsYXkKIC0gVVRGLTggdGV4dCBjYXVzZXMgZGlzcGxheSBwcm9ibGVtcy4gIEZvbnQgcmVwbGFjZW1lbnQgY2F1c2VzIHRoaXMuCkBAIC0xMDAsMTQgKzk5LDIyIEBACiAtICAgQWRkIFNQRUxMQ0hFQ0tFUiwgd2l0aCBzdXBwb3J0IGZvciBtYW55IGxhbmd1YWdlcy4KICAgICAtIFNwZWxsIGNoZWNraW5nIGNvZGUgdG9kbydzOgogCS0gQ29kZSBmb3IgbWFraW5nIHN1Z2dlc3Rpb25zOgotCSAgLSBIZWJyZXc6IGFsc28gdXNlIHByZWZpeGVzIGZvciBzdWdnZXN0aW9ucy4KKwkgIC0gIjpta3NwZWxsIiBydW5zIG91dCBvZiBtZW1vcnkgZm9yIFBvbGlzaCB3aXRoIHV0Zi04LgogCSAgLSBXaGVuICdzcGVsbGZpbGUnIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBhc2sgdXNlciB0byBjcmVhdGUgaXQ/CisJICAtIFdoZW4gJ3NwZWxsbGFuZycgaGFzIG1vcmUgdGhhbiBvbmUgbGFuZ3VhZ2Ugb25seSAuYWRkIGZpbGUgb2YKKwkgICAgZmlyc3QgaXMgdXNlZD8KIAkgIC0gQXNwZWxsIGhhcyB0aGUgInNwZWNpYWwiIGNoYXJhY3RlciwgdXNlZnVsPworCSAgLSBDYW4gInRoZSB0aGUiIGJlIGFkZGVkIGFzIGEgYmFkIHdvcmQ/CisJCUFkZCBCQUQgaXRlbSBpbiAuYWZmIGZpbGUsIHNldCBXRl9CQU5ORUQgZmxhZy4KKwkgIC0gU2ltcGxlIGFuZCBmYXN0IHNvdW5kLWEtbGlrZTogbWFwcGluZyBsaXN0IGZvciBmaXJzdCBjaGFyIGFuZCByZXN0CisJCSAgICB2b3dlbCBhcyBmaXJzdCBjaGFyOiAqCisJCSAgICByZW1vdmUgb3RoZXIgdm93ZWxzCisJICAtIEhvdyBhYm91dCB3b3JkcyB0aGF0IGFyZSBzcGxpdCBvdmVyIHR3byBsaW5lcz8gIEUuZy4sICJldCBhbC4iLgogCSAgLSBXaGVuIHB1dHRpbmcgbWFwIHN0cmluZyBpbiAuc3BsIGZpbGUgY2hlY2sgZm9yIGR1cGxpY2F0ZSBjaGFycy4KLQkgIC0gR1VJOiBTZWxlY3RpbmcgdGV4dCBkb2Vzbid0IHdvcmsgYXQgdGhlIHByb21wdC4KLQkgIC0gU2hvdWxkICJ6PyIgcmVwbGFjZW1lbnQgYmUgcmVkby1hYmxlIHdpdGggIi4iPworCSAgLSBIZWJyZXc6IGFsc28gdXNlIHByZWZpeGVzIGZvciBzdWdnZXN0aW9ucy4gIFNlZSBtZXNzYWdlIGZyb20KKwkgICAgS2FtaW5za3kgKEp1bmUgMjApIGZvciBpZGVhcy4KIAkgIC0gVGhlIHNvdW5kLWZvbGRpbmcgZG9lc24ndCB3b3JrIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBJdCdzCi0JICAgIHZlcnkgc2xvdyB0b28uICBQcmVwYXJlIHRoZSB0YWJsZSAocmVtb3ZlIGFsdGVybmF0aXZlcyk/CisJICAgIHZlcnkgc2xvdyB0b28uCiAJLSBBbHNvIHB1dCBsaXN0IG9mIHdvcmQgY2hhcmFjdGVycyBpbiB3b3JkIGxpc3QgZmlsZS4gIE90aGVyd2lzZSB0aGUKIAkgIG9uZSBmb3IgSXRhbGlhbiBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSB1c2VkIGZvciBFbmdsaXNoLgogCS0gTWFrZSAiZW4tcmFyZSIgc3BlbGwgZmlsZS4KQEAgLTEyMSw4ICsxMjgsOCBAQAogCWh0dHA6Ly9zcGVsbGNoZWNrZXIubW96ZGV2Lm9yZy9zb3VyY2UuaHRtbAogCWh0dHA6Ly93aGl0ZWJvYXJkLm9wZW5vZmZpY2Uub3JnL3NvdXJjZS9icm93c2Uvd2hpdGVib2FyZC9saW5ndWNvbXBvbmVudC9zb3VyY2Uvc3BlbGxjaGVjay9teXNwZWxsLwogICAgICAgYXV0aG9yOiBLZXZpbiBIZW5kcmlja3MgPGtldmluLmhlbmRyaWNrc0BzeW1wYXRpY28uY2E+Ci0gICAgLSBVcGRhdGUgb3B0aW9uIHdpbmRvdyBmb3IgJ3ZlcmJvc2VmaWxlJywgJ3NwZWxsJywgJ3NwZWxsZmlsZScgYW5kCi0gICAgICAnc3BlbGxsYW5nJy4KKyAgICAtIFVwZGF0ZSBvcHRpb24gd2luZG93IGZvciAndmVyYm9zZWZpbGUnLCAnc3BlbGwnLCAnc3BlbGxmaWxlJywKKyAgICAgICdzcGVsbHN1Z2dlc3QnIGFuZCAnc3BlbGxsYW5nJy4KICAgICAtIERpc3RyaWJ1dGlvbjogTmVlZCB3b3JkbGlzdHMgZm9yIG1hbnkgbGFuZ3VhZ2VzOyAibGFuZ3VhZ2UgcGFjayIKICAgICAgIFB1dCB0aGVtIG9uIHRoZSBmdHAgc2l0ZSwgcmVhZHkgdG8gZG93bmxvYWQuICBJbmNsdWRlIFJFQURNRSBmb3IKICAgICAgIGNvcHlyaWdodHMuCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQgYi9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKaW5kZXggZmE4OTIwNC4uNDAwMDJkZCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CisrKyBiL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dApAQCAtMSw0ICsxLDQgQEAKLSp2ZXJzaW9uNy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBKdW4gMTcKKyp2ZXJzaW9uNy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNSBKdW4gMjEKIAogCiAJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTExMzcsNSArMTEzNyw4IEBACiBzZXRidWZ2YXIoKSBhbmQgc2V0d2ludmFyKCkgZGlkIG5vdCBnaXZlIGVycm9yIG1lc3NhZ2VzLgogCiBJdCB3YXMgcG9zc2libGUgdG8gc2V0IGEgdmFyaWFibGUgd2l0aCBhbiBpbGxlZ2FsIG5hbWUsIGUuZy4gd2l0aCBzZXRidWZ2YXIoKS4KK0l0IHdhcyBwb3NzaWJsZSB0byBkZWZpbmUgYSBmdW5jdGlvbiB3aXRoIGlsbGVnYWwgbmFtZSwgZS50LiAiOmZ1bmMgRnstMX0oKSIKKworQ1RSTC1XIEYgYW5kICJnZiIgZGlkbid0IHVzZSB0aGUgc2FtZSBtZXRob2QgdG8gZ2V0IHRoZSBmaWxlIG5hbWUuCiAKICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL3NwZWxsL2VuLmFzY2lpLnNwbCBiL3J1bnRpbWUvc3BlbGwvZW4uYXNjaWkuc3BsCmluZGV4IGE5YWU4NDQuLjhjNmIwZjIgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3BlbGwvZW4uYXNjaWkuc3BsCisrKyBiL3J1bnRpbWUvc3BlbGwvZW4uYXNjaWkuc3BsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3BlbGwvZW4ubGF0aW4xLnNwbCBiL3J1bnRpbWUvc3BlbGwvZW4ubGF0aW4xLnNwbAppbmRleCA2MTMwMTY2Li5iYTQ5OTBjIDEwMDY0NAotLS0gYS9ydW50aW1lL3NwZWxsL2VuLmxhdGluMS5zcGwKKysrIGIvcnVudGltZS9zcGVsbC9lbi5sYXRpbjEuc3BsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3BlbGwvZW4udXRmLTguc3BsIGIvcnVudGltZS9zcGVsbC9lbi51dGYtOC5zcGwKaW5kZXggYjRmZWNlZi4uYjgzNTNjOSAxMDA2NDQKLS0tIGEvcnVudGltZS9zcGVsbC9lbi51dGYtOC5zcGwKKysrIGIvcnVudGltZS9zcGVsbC9lbi51dGYtOC5zcGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvYy52aW0gYi9ydW50aW1lL3N5bnRheC9jLnZpbQppbmRleCBlZWYzMzgyLi5mODI2MjYyIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9jLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9jLnZpbQpAQCAtMSwxMyArMSwxMCBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6CUMKICIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMDUgSmFuIDI2CisiIExhc3QgQ2hhbmdlOgkyMDA1IEp1biAyMAogCi0iIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwotIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAotaWYgdmVyc2lvbiA8IDYwMAotICBzeW50YXggY2xlYXIKLWVsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIiBRdWl0IHdoZW4gYSAoY3VzdG9tKSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCiAgIGZpbmlzaAogZW5kaWYKIApAQCAtMjk4LDYzICsyOTUsNTEgQEAKIGV4ZWMgInN5biBzeW5jIGNjb21tZW50IGNDb21tZW50IG1pbmxpbmVzPSIgLiBiOmNfbWlubGluZXMKIAogIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgotIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5Ci0iIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0Ci1pZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfY19zeW5faW5pdHMiKQotICBpZiB2ZXJzaW9uIDwgNTA4Ci0gICAgbGV0IGRpZF9jX3N5bl9pbml0cyA9IDEKLSAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgotICBlbHNlCi0gICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+Ci0gIGVuZGlmCi0KLSAgSGlMaW5rIGNGb3JtYXQJCWNTcGVjaWFsCi0gIEhpTGluayBjQ3BwU3RyaW5nCQljU3RyaW5nCi0gIEhpTGluayBjQ29tbWVudEwJCWNDb21tZW50Ci0gIEhpTGluayBjQ29tbWVudFN0YXJ0CQljQ29tbWVudAotICBIaUxpbmsgY0xhYmVsCQkJTGFiZWwKLSAgSGlMaW5rIGNVc2VyTGFiZWwJCUxhYmVsCi0gIEhpTGluayBjQ29uZGl0aW9uYWwJCUNvbmRpdGlvbmFsCi0gIEhpTGluayBjUmVwZWF0CQlSZXBlYXQKLSAgSGlMaW5rIGNDaGFyYWN0ZXIJCUNoYXJhY3RlcgotICBIaUxpbmsgY1NwZWNpYWxDaGFyYWN0ZXIJY1NwZWNpYWwKLSAgSGlMaW5rIGNOdW1iZXIJCU51bWJlcgotICBIaUxpbmsgY09jdGFsCQkJTnVtYmVyCi0gIEhpTGluayBjT2N0YWxaZXJvCQlQcmVQcm9jCSAiIGxpbmsgdGhpcyB0byBFcnJvciBpZiB5b3Ugd2FudAotICBIaUxpbmsgY0Zsb2F0CQkJRmxvYXQKLSAgSGlMaW5rIGNPY3RhbEVycm9yCQljRXJyb3IKLSAgSGlMaW5rIGNQYXJlbkVycm9yCQljRXJyb3IKLSAgSGlMaW5rIGNFcnJJblBhcmVuCQljRXJyb3IKLSAgSGlMaW5rIGNFcnJJbkJyYWNrZXQJCWNFcnJvcgotICBIaUxpbmsgY0NvbW1lbnRFcnJvcgkJY0Vycm9yCi0gIEhpTGluayBjQ29tbWVudFN0YXJ0RXJyb3IJY0Vycm9yCi0gIEhpTGluayBjU3BhY2VFcnJvcgkJY0Vycm9yCi0gIEhpTGluayBjU3BlY2lhbEVycm9yCQljRXJyb3IKLSAgSGlMaW5rIGNPcGVyYXRvcgkJT3BlcmF0b3IKLSAgSGlMaW5rIGNTdHJ1Y3R1cmUJCVN0cnVjdHVyZQotICBIaUxpbmsgY1N0b3JhZ2VDbGFzcwkJU3RvcmFnZUNsYXNzCi0gIEhpTGluayBjSW5jbHVkZQkJSW5jbHVkZQotICBIaUxpbmsgY1ByZVByb2MJCVByZVByb2MKLSAgSGlMaW5rIGNEZWZpbmUJCU1hY3JvCi0gIEhpTGluayBjSW5jbHVkZWQJCWNTdHJpbmcKLSAgSGlMaW5rIGNFcnJvcgkJCUVycm9yCi0gIEhpTGluayBjU3RhdGVtZW50CQlTdGF0ZW1lbnQKLSAgSGlMaW5rIGNQcmVDb25kaXQJCVByZUNvbmRpdAotICBIaUxpbmsgY1R5cGUJCQlUeXBlCi0gIEhpTGluayBjQ29uc3RhbnQJCUNvbnN0YW50Ci0gIEhpTGluayBjQ29tbWVudFN0cmluZwkJY1N0cmluZwotICBIaUxpbmsgY0NvbW1lbnQyU3RyaW5nCWNTdHJpbmcKLSAgSGlMaW5rIGNDb21tZW50U2tpcAkJY0NvbW1lbnQKLSAgSGlMaW5rIGNTdHJpbmcJCVN0cmluZwotICBIaUxpbmsgY0NvbW1lbnQJCUNvbW1lbnQKLSAgSGlMaW5rIGNTcGVjaWFsCQlTcGVjaWFsQ2hhcgotICBIaUxpbmsgY1RvZG8JCQlUb2RvCi0gIEhpTGluayBjQ3BwU2tpcAkJY0NwcE91dAotICBIaUxpbmsgY0NwcE91dDIJCWNDcHBPdXQKLSAgSGlMaW5rIGNDcHBPdXQJCUNvbW1lbnQKLQotICBkZWxjb21tYW5kIEhpTGluawotZW5kaWYKKyIgT25seSB1c2VkIHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraGkgZGVmIGxpbmsgY0Zvcm1hdAkJY1NwZWNpYWwKK2hpIGRlZiBsaW5rIGNDcHBTdHJpbmcJCWNTdHJpbmcKK2hpIGRlZiBsaW5rIGNDb21tZW50TAkJY0NvbW1lbnQKK2hpIGRlZiBsaW5rIGNDb21tZW50U3RhcnQJY0NvbW1lbnQKK2hpIGRlZiBsaW5rIGNMYWJlbAkJTGFiZWwKK2hpIGRlZiBsaW5rIGNVc2VyTGFiZWwJCUxhYmVsCitoaSBkZWYgbGluayBjQ29uZGl0aW9uYWwJQ29uZGl0aW9uYWwKK2hpIGRlZiBsaW5rIGNSZXBlYXQJCVJlcGVhdAoraGkgZGVmIGxpbmsgY0NoYXJhY3RlcgkJQ2hhcmFjdGVyCitoaSBkZWYgbGluayBjU3BlY2lhbENoYXJhY3RlcgljU3BlY2lhbAoraGkgZGVmIGxpbmsgY051bWJlcgkJTnVtYmVyCitoaSBkZWYgbGluayBjT2N0YWwJCU51bWJlcgoraGkgZGVmIGxpbmsgY09jdGFsWmVybwkJUHJlUHJvYwkgIiBsaW5rIHRoaXMgdG8gRXJyb3IgaWYgeW91IHdhbnQKK2hpIGRlZiBsaW5rIGNGbG9hdAkJRmxvYXQKK2hpIGRlZiBsaW5rIGNPY3RhbEVycm9yCQljRXJyb3IKK2hpIGRlZiBsaW5rIGNQYXJlbkVycm9yCQljRXJyb3IKK2hpIGRlZiBsaW5rIGNFcnJJblBhcmVuCQljRXJyb3IKK2hpIGRlZiBsaW5rIGNFcnJJbkJyYWNrZXQJY0Vycm9yCitoaSBkZWYgbGluayBjQ29tbWVudEVycm9yCWNFcnJvcgoraGkgZGVmIGxpbmsgY0NvbW1lbnRTdGFydEVycm9yCWNFcnJvcgoraGkgZGVmIGxpbmsgY1NwYWNlRXJyb3IJCWNFcnJvcgoraGkgZGVmIGxpbmsgY1NwZWNpYWxFcnJvcgljRXJyb3IKK2hpIGRlZiBsaW5rIGNPcGVyYXRvcgkJT3BlcmF0b3IKK2hpIGRlZiBsaW5rIGNTdHJ1Y3R1cmUJCVN0cnVjdHVyZQoraGkgZGVmIGxpbmsgY1N0b3JhZ2VDbGFzcwlTdG9yYWdlQ2xhc3MKK2hpIGRlZiBsaW5rIGNJbmNsdWRlCQlJbmNsdWRlCitoaSBkZWYgbGluayBjUHJlUHJvYwkJUHJlUHJvYworaGkgZGVmIGxpbmsgY0RlZmluZQkJTWFjcm8KK2hpIGRlZiBsaW5rIGNJbmNsdWRlZAkJY1N0cmluZworaGkgZGVmIGxpbmsgY0Vycm9yCQlFcnJvcgoraGkgZGVmIGxpbmsgY1N0YXRlbWVudAkJU3RhdGVtZW50CitoaSBkZWYgbGluayBjUHJlQ29uZGl0CQlQcmVDb25kaXQKK2hpIGRlZiBsaW5rIGNUeXBlCQlUeXBlCitoaSBkZWYgbGluayBjQ29uc3RhbnQJCUNvbnN0YW50CitoaSBkZWYgbGluayBjQ29tbWVudFN0cmluZwljU3RyaW5nCitoaSBkZWYgbGluayBjQ29tbWVudDJTdHJpbmcJY1N0cmluZworaGkgZGVmIGxpbmsgY0NvbW1lbnRTa2lwCWNDb21tZW50CitoaSBkZWYgbGluayBjU3RyaW5nCQlTdHJpbmcKK2hpIGRlZiBsaW5rIGNDb21tZW50CQlDb21tZW50CitoaSBkZWYgbGluayBjU3BlY2lhbAkJU3BlY2lhbENoYXIKK2hpIGRlZiBsaW5rIGNUb2RvCQlUb2RvCitoaSBkZWYgbGluayBjQ3BwU2tpcAkJY0NwcE91dAoraGkgZGVmIGxpbmsgY0NwcE91dDIJCWNDcHBPdXQKK2hpIGRlZiBsaW5rIGNDcHBPdXQJCUNvbW1lbnQKIAogbGV0IGI6Y3VycmVudF9zeW50YXggPSAiYyIKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvY29uZi52aW0gYi9ydW50aW1lL3N5bnRheC9jb25mLnZpbQppbmRleCBkMDhkZTRmLi45YjhhNjM2IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9jb25mLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9jb25mLnZpbQpAQCAtMSwxMyArMSwxMCBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6CWdlbmVyaWMgY29uZmlndXJlIGZpbGUKICIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMDEgQXByIDI1CisiIExhc3QgQ2hhbmdlOgkyMDA1IEp1biAyMAogCi0iIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwotIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAotaWYgdmVyc2lvbiA8IDYwMAotICBzeW50YXggY2xlYXIKLWVsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIiBRdWl0IHdoZW4gYSAoY3VzdG9tKSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCiAgIGZpbmlzaAogZW5kaWYKIApAQCAtMTksMjIgKzE2LDEwIEBACiBzeW4gcmVnaW9uCWNvbmZTdHJpbmcJc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKyBvbmVsaW5lCiAKICIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KLSIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQotIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAotaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2NvbmZfc3ludGF4X2luaXRzIikKLSAgaWYgdmVyc2lvbiA8IDUwOAotICAgIGxldCBkaWRfY29uZl9zeW50YXhfaW5pdHMgPSAxCi0gICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KLSAgZWxzZQotICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgotICBlbmRpZgotCi0gIEhpTGluayBjb25mQ29tbWVudAlDb21tZW50Ci0gIEhpTGluayBjb25mVG9kbwlUb2RvCi0gIEhpTGluayBjb25mU3RyaW5nCVN0cmluZwotCi0gIGRlbGNvbW1hbmQgSGlMaW5rCi1lbmRpZgorIiBPbmx5IHVzZWQgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitoaSBkZWYgbGluayBjb25mQ29tbWVudAlDb21tZW50CitoaSBkZWYgbGluayBjb25mVG9kbwlUb2RvCitoaSBkZWYgbGluayBjb25mU3RyaW5nCVN0cmluZwogCiBsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJjb25mIgogCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9jdHJsaC52aW0gYi9ydW50aW1lL3N5bnRheC9jdHJsaC52aW0KaW5kZXggNzE1YzJjMC4uYjRiZjM0NyAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvY3RybGgudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L2N0cmxoLnZpbQpAQCAtMSw3ICsxLDcgQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglDVFJMLUggKGUuZy4sIEFTQ0lJIG1hbnBhZ2VzKQogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjUKKyIgTGFzdCBDaGFuZ2U6CTIwMDUgSnVuIDIwCiAKICIgRXhpc3Rpbmcgc3ludGF4IGlzIGtlcHQsIHRoaXMgZmlsZSBjYW4gYmUgdXNlZCBhcyBhbiBhZGRpdGlvbgogCkBAIC0xNSwxOSArMTUsOSBAQAogc3ludGF4IG1hdGNoIEN0cmxISGlkZSAvLlxiLyAgY29udGFpbmVkCiAKICIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KLSIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQotIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAotaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2N0cmxoX3N5bnRheF9pbml0cyIpCi0gIGlmIHZlcnNpb24gPCA1MDgKLSAgICBsZXQgZGlkX2N0cmxoX3N5bnRheF9pbml0cyA9IDEKLSAgICBoaSBsaW5rIEN0cmxISGlkZSBJZ25vcmUKLSAgICBoaSBDdHJsSFVuZGVybGluZSB0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUgZ3VpPXVuZGVybGluZQotICAgIGhpIEN0cmxIQm9sZCB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZAotICBlbHNlCi0gICAgaGkgZGVmIGxpbmsgQ3RybEhIaWRlIElnbm9yZQotICAgIGhpIGRlZiBDdHJsSFVuZGVybGluZSB0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUgZ3VpPXVuZGVybGluZQotICAgIGhpIGRlZiBDdHJsSEJvbGQgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKLSAgZW5kaWYKLWVuZGlmCisiIE9ubHkgdXNlZCB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2hpIGRlZiBsaW5rIEN0cmxISGlkZSBJZ25vcmUKK2hpIGRlZiBDdHJsSFVuZGVybGluZSB0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUgZ3VpPXVuZGVybGluZQoraGkgZGVmIEN0cmxIQm9sZCB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZAogCiAiIHZpbTogdHM9OApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGlmZi52aW0gYi9ydW50aW1lL3N5bnRheC9kaWZmLnZpbQppbmRleCAyNDYxYWJlLi44ZWM2ODgwIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9kaWZmLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9kaWZmLnZpbQpAQCAtMSwxMyArMSwxMCBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6CURpZmYgKGNvbnRleHQgb3IgdW5pZmllZCkKICIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMDMgQXByIDAyCisiIExhc3QgQ2hhbmdlOgkyMDA1IEp1biAyMAogCi0iIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwotIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAotaWYgdmVyc2lvbiA8IDYwMAotICBzeW50YXggY2xlYXIKLWVsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIiBRdWl0IHdoZW4gYSAoY3VzdG9tKSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCiAgIGZpbmlzaAogZW5kaWYKIApAQCAtNDMsMzUgKzQwLDIzIEBACiBzeW4gbWF0Y2ggZGlmZkNvbW1lbnQJIl4jLioiCiAKICIgRGVmaW5lIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZy4KLSIgRm9yIHZlcnNpb24gNS43IGFuZCBlYXJsaWVyOiBvbmx5IHdoZW4gbm90IGRvbmUgYWxyZWFkeQotIiBGb3IgdmVyc2lvbiA1LjggYW5kIGxhdGVyOiBvbmx5IHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAotaWYgdmVyc2lvbiA+PSA1MDggfHwgIWV4aXN0cygiZGlkX2RpZmZfc3ludGF4X2luaXRzIikKLSAgaWYgdmVyc2lvbiA8IDUwOAotICAgIGxldCBkaWRfZGlmZl9zeW50YXhfaW5pdHMgPSAxCi0gICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KLSAgZWxzZQotICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgotICBlbmRpZgotCi0gIEhpTGluayBkaWZmT2xkRmlsZQlkaWZmRmlsZQotICBIaUxpbmsgZGlmZk5ld0ZpbGUJZGlmZkZpbGUKLSAgSGlMaW5rIGRpZmZGaWxlCVR5cGUKLSAgSGlMaW5rIGRpZmZPbmx5CUNvbnN0YW50Ci0gIEhpTGluayBkaWZmSWRlbnRpY2FsCUNvbnN0YW50Ci0gIEhpTGluayBkaWZmRGlmZmVyCUNvbnN0YW50Ci0gIEhpTGluayBkaWZmQkRpZmZlcglDb25zdGFudAotICBIaUxpbmsgZGlmZklzQQlDb25zdGFudAotICBIaUxpbmsgZGlmZk5vRU9MCUNvbnN0YW50Ci0gIEhpTGluayBkaWZmQ29tbW9uCUNvbnN0YW50Ci0gIEhpTGluayBkaWZmUmVtb3ZlZAlTcGVjaWFsCi0gIEhpTGluayBkaWZmQ2hhbmdlZAlQcmVQcm9jCi0gIEhpTGluayBkaWZmQWRkZWQJSWRlbnRpZmllcgotICBIaUxpbmsgZGlmZkxpbmUJU3RhdGVtZW50Ci0gIEhpTGluayBkaWZmU3VibmFtZQlQcmVQcm9jCi0gIEhpTGluayBkaWZmQ29tbWVudAlDb21tZW50Ci0KLSAgZGVsY29tbWFuZCBIaUxpbmsKLWVuZGlmCisiIE9ubHkgdXNlZCB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2hpIGRlZiBsaW5rIGRpZmZPbGRGaWxlCQlkaWZmRmlsZQoraGkgZGVmIGxpbmsgZGlmZk5ld0ZpbGUJCWRpZmZGaWxlCitoaSBkZWYgbGluayBkaWZmRmlsZQkJVHlwZQoraGkgZGVmIGxpbmsgZGlmZk9ubHkJCUNvbnN0YW50CitoaSBkZWYgbGluayBkaWZmSWRlbnRpY2FsCUNvbnN0YW50CitoaSBkZWYgbGluayBkaWZmRGlmZmVyCQlDb25zdGFudAoraGkgZGVmIGxpbmsgZGlmZkJEaWZmZXIJCUNvbnN0YW50CitoaSBkZWYgbGluayBkaWZmSXNBCQlDb25zdGFudAoraGkgZGVmIGxpbmsgZGlmZk5vRU9MCQlDb25zdGFudAoraGkgZGVmIGxpbmsgZGlmZkNvbW1vbgkJQ29uc3RhbnQKK2hpIGRlZiBsaW5rIGRpZmZSZW1vdmVkCQlTcGVjaWFsCitoaSBkZWYgbGluayBkaWZmQ2hhbmdlZAkJUHJlUHJvYworaGkgZGVmIGxpbmsgZGlmZkFkZGVkCQlJZGVudGlmaWVyCitoaSBkZWYgbGluayBkaWZmTGluZQkJU3RhdGVtZW50CitoaSBkZWYgbGluayBkaWZmU3VibmFtZQkJUHJlUHJvYworaGkgZGVmIGxpbmsgZGlmZkNvbW1lbnQJCUNvbW1lbnQKIAogbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZGlmZiIKIApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvaGVscC52aW0gYi9ydW50aW1lL3N5bnRheC9oZWxwLnZpbQppbmRleCBkMzYzZDg4Li43ZDUwZjU1IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9oZWxwLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9oZWxwLnZpbQpAQCAtMSwxMyArMSwxMCBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6CVZpbSBoZWxwIGZpbGUKICIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgKEJyYW1AdmltLm9yZykKLSIgTGFzdCBDaGFuZ2U6CTIwMDUgTWFyIDMxCisiIExhc3QgQ2hhbmdlOgkyMDA1IEp1biAyMAogCi0iIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwotIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAotaWYgdmVyc2lvbiA8IDYwMAotICBzeW50YXggY2xlYXIKLWVsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIiBRdWl0IHdoZW4gYSAoY3VzdG9tKSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCiAgIGZpbmlzaAogZW5kaWYKIApAQCAtMTIwLDY3ICsxMTcsNTUgQEAKIAogCiAiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCi0iIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKLSIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKLWlmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9oZWxwX3N5bnRheF9pbml0cyIpCi0gIGlmIHZlcnNpb24gPCA1MDgKLSAgICBsZXQgZGlkX2hlbHBfc3ludGF4X2luaXRzID0gMQotICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+Ci0gIGVsc2UKLSAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KLSAgZW5kaWYKKyIgT25seSB1c2VkIHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraGkgZGVmIGxpbmsgaGVscEV4YW1wbGVTdGFydAloZWxwSWdub3JlCitoaSBkZWYgbGluayBoZWxwSWdub3JlCQlJZ25vcmUKK2hpIGRlZiBsaW5rIGhlbHBIeXBlclRleHRKdW1wCVN1YnRpdGxlCitoaSBkZWYgbGluayBoZWxwSHlwZXJUZXh0RW50cnkJU3RyaW5nCitoaSBkZWYgbGluayBoZWxwSGVhZGxpbmUJU3RhdGVtZW50CitoaSBkZWYgbGluayBoZWxwSGVhZGVyCQlQcmVQcm9jCitoaSBkZWYgbGluayBoZWxwU2VjdGlvbkRlbGltCVByZVByb2MKK2hpIGRlZiBsaW5rIGhlbHBWaW0JCUlkZW50aWZpZXIKK2hpIGRlZiBsaW5rIGhlbHBFeGFtcGxlCQlDb21tZW50CitoaSBkZWYgbGluayBoZWxwT3B0aW9uCQlUeXBlCitoaSBkZWYgbGluayBoZWxwTm90VmkJCVNwZWNpYWwKK2hpIGRlZiBsaW5rIGhlbHBTcGVjaWFsCQlTcGVjaWFsCitoaSBkZWYgbGluayBoZWxwTm90ZQkJVG9kbworaGkgZGVmIGxpbmsgU3VidGl0bGUJCUlkZW50aWZpZXIKIAotICBIaUxpbmsgaGVscEV4YW1wbGVTdGFydAloZWxwSWdub3JlCi0gIEhpTGluayBoZWxwSWdub3JlCQlJZ25vcmUKLSAgSGlMaW5rIGhlbHBIeXBlclRleHRKdW1wCVN1YnRpdGxlCi0gIEhpTGluayBoZWxwSHlwZXJUZXh0RW50cnkJU3RyaW5nCi0gIEhpTGluayBoZWxwSGVhZGxpbmUJCVN0YXRlbWVudAotICBIaUxpbmsgaGVscEhlYWRlcgkJUHJlUHJvYwotICBIaUxpbmsgaGVscFNlY3Rpb25EZWxpbQlQcmVQcm9jCi0gIEhpTGluayBoZWxwVmltCQlJZGVudGlmaWVyCi0gIEhpTGluayBoZWxwRXhhbXBsZQkJQ29tbWVudAotICBIaUxpbmsgaGVscE9wdGlvbgkJVHlwZQotICBIaUxpbmsgaGVscE5vdFZpCQlTcGVjaWFsCi0gIEhpTGluayBoZWxwU3BlY2lhbAkJU3BlY2lhbAotICBIaUxpbmsgaGVscE5vdGUJCVRvZG8KLSAgSGlMaW5rIFN1YnRpdGxlCQlJZGVudGlmaWVyCi0KLSAgSGlMaW5rIGhlbHBDb21tZW50CQlDb21tZW50Ci0gIEhpTGluayBoZWxwQ29uc3RhbnQJCUNvbnN0YW50Ci0gIEhpTGluayBoZWxwU3RyaW5nCQlTdHJpbmcKLSAgSGlMaW5rIGhlbHBDaGFyYWN0ZXIJCUNoYXJhY3RlcgotICBIaUxpbmsgaGVscE51bWJlcgkJTnVtYmVyCi0gIEhpTGluayBoZWxwQm9vbGVhbgkJQm9vbGVhbgotICBIaUxpbmsgaGVscEZsb2F0CQlGbG9hdAotICBIaUxpbmsgaGVscElkZW50aWZpZXIJCUlkZW50aWZpZXIKLSAgSGlMaW5rIGhlbHBGdW5jdGlvbgkJRnVuY3Rpb24KLSAgSGlMaW5rIGhlbHBTdGF0ZW1lbnQJCVN0YXRlbWVudAotICBIaUxpbmsgaGVscENvbmRpdGlvbmFsCUNvbmRpdGlvbmFsCi0gIEhpTGluayBoZWxwUmVwZWF0CQlSZXBlYXQKLSAgSGlMaW5rIGhlbHBMYWJlbAkJTGFiZWwKLSAgSGlMaW5rIGhlbHBPcGVyYXRvcgkJT3BlcmF0b3IKLSAgSGlMaW5rIGhlbHBLZXl3b3JkCQlLZXl3b3JkCi0gIEhpTGluayBoZWxwRXhjZXB0aW9uCQlFeGNlcHRpb24KLSAgSGlMaW5rIGhlbHBQcmVQcm9jCQlQcmVQcm9jCi0gIEhpTGluayBoZWxwSW5jbHVkZQkJSW5jbHVkZQotICBIaUxpbmsgaGVscERlZmluZQkJRGVmaW5lCi0gIEhpTGluayBoZWxwTWFjcm8JCU1hY3JvCi0gIEhpTGluayBoZWxwUHJlQ29uZGl0CQlQcmVDb25kaXQKLSAgSGlMaW5rIGhlbHBUeXBlCQlUeXBlCi0gIEhpTGluayBoZWxwU3RvcmFnZUNsYXNzCVN0b3JhZ2VDbGFzcwotICBIaUxpbmsgaGVscFN0cnVjdHVyZQkJU3RydWN0dXJlCi0gIEhpTGluayBoZWxwVHlwZWRlZgkJVHlwZWRlZgotICBIaUxpbmsgaGVscFNwZWNpYWxDaGFyCVNwZWNpYWxDaGFyCi0gIEhpTGluayBoZWxwVGFnCQlUYWcKLSAgSGlMaW5rIGhlbHBEZWxpbWl0ZXIJCURlbGltaXRlcgotICBIaUxpbmsgaGVscFNwZWNpYWxDb21tZW50CVNwZWNpYWxDb21tZW50Ci0gIEhpTGluayBoZWxwRGVidWcJCURlYnVnCi0gIEhpTGluayBoZWxwVW5kZXJsaW5lZAkJVW5kZXJsaW5lZAotICBIaUxpbmsgaGVscEVycm9yCQlFcnJvcgotICBIaUxpbmsgaGVscFRvZG8JCVRvZG8KLQotICBkZWxjb21tYW5kIEhpTGluawotZW5kaWYKK2hpIGRlZiBsaW5rIGhlbHBDb21tZW50CQlDb21tZW50CitoaSBkZWYgbGluayBoZWxwQ29uc3RhbnQJQ29uc3RhbnQKK2hpIGRlZiBsaW5rIGhlbHBTdHJpbmcJCVN0cmluZworaGkgZGVmIGxpbmsgaGVscENoYXJhY3RlcglDaGFyYWN0ZXIKK2hpIGRlZiBsaW5rIGhlbHBOdW1iZXIJCU51bWJlcgoraGkgZGVmIGxpbmsgaGVscEJvb2xlYW4JCUJvb2xlYW4KK2hpIGRlZiBsaW5rIGhlbHBGbG9hdAkJRmxvYXQKK2hpIGRlZiBsaW5rIGhlbHBJZGVudGlmaWVyCUlkZW50aWZpZXIKK2hpIGRlZiBsaW5rIGhlbHBGdW5jdGlvbglGdW5jdGlvbgoraGkgZGVmIGxpbmsgaGVscFN0YXRlbWVudAlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIGhlbHBDb25kaXRpb25hbAlDb25kaXRpb25hbAoraGkgZGVmIGxpbmsgaGVscFJlcGVhdAkJUmVwZWF0CitoaSBkZWYgbGluayBoZWxwTGFiZWwJCUxhYmVsCitoaSBkZWYgbGluayBoZWxwT3BlcmF0b3IJT3BlcmF0b3IKK2hpIGRlZiBsaW5rIGhlbHBLZXl3b3JkCQlLZXl3b3JkCitoaSBkZWYgbGluayBoZWxwRXhjZXB0aW9uCUV4Y2VwdGlvbgoraGkgZGVmIGxpbmsgaGVscFByZVByb2MJCVByZVByb2MKK2hpIGRlZiBsaW5rIGhlbHBJbmNsdWRlCQlJbmNsdWRlCitoaSBkZWYgbGluayBoZWxwRGVmaW5lCQlEZWZpbmUKK2hpIGRlZiBsaW5rIGhlbHBNYWNybwkJTWFjcm8KK2hpIGRlZiBsaW5rIGhlbHBQcmVDb25kaXQJUHJlQ29uZGl0CitoaSBkZWYgbGluayBoZWxwVHlwZQkJVHlwZQoraGkgZGVmIGxpbmsgaGVscFN0b3JhZ2VDbGFzcwlTdG9yYWdlQ2xhc3MKK2hpIGRlZiBsaW5rIGhlbHBTdHJ1Y3R1cmUJU3RydWN0dXJlCitoaSBkZWYgbGluayBoZWxwVHlwZWRlZgkJVHlwZWRlZgoraGkgZGVmIGxpbmsgaGVscFNwZWNpYWxDaGFyCVNwZWNpYWxDaGFyCitoaSBkZWYgbGluayBoZWxwVGFnCQlUYWcKK2hpIGRlZiBsaW5rIGhlbHBEZWxpbWl0ZXIJRGVsaW1pdGVyCitoaSBkZWYgbGluayBoZWxwU3BlY2lhbENvbW1lbnQJU3BlY2lhbENvbW1lbnQKK2hpIGRlZiBsaW5rIGhlbHBEZWJ1ZwkJRGVidWcKK2hpIGRlZiBsaW5rIGhlbHBVbmRlcmxpbmVkCVVuZGVybGluZWQKK2hpIGRlZiBsaW5rIGhlbHBFcnJvcgkJRXJyb3IKK2hpIGRlZiBsaW5rIGhlbHBUb2RvCQlUb2RvCiAKIGxldCBiOmN1cnJlbnRfc3ludGF4ID0gImhlbHAiCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L21vZGVsLnZpbSBiL3J1bnRpbWUvc3ludGF4L21vZGVsLnZpbQppbmRleCA5MWI2NzgxLi41ZjNiN2Y4IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9tb2RlbC52aW0KKysrIGIvcnVudGltZS9zeW50YXgvbW9kZWwudmltCkBAIC0xLDE2ICsxLDEzIEBACiAiIFZpbSBzeW50YXggZmlsZQogIiBMYW5ndWFnZToJTW9kZWwKICIgTWFpbnRhaW5lcjoJQnJhbSBNb29sZW5hYXIgPEJyYW1AdmltLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMDEgQXByIDI1CisiIExhc3QgQ2hhbmdlOgkyMDA1IEp1biAyMAogCiAiIHZlcnkgYmFzaWMgdGhpbmdzIG9ubHkgKGJhc2VkIG9uIHRoZSB2Z3JpbmRlZnMgZmlsZSkuCiAiIElmIHlvdSB1c2UgdGhpcyBsYW5ndWFnZSwgcGxlYXNlIGltcHJvdmUgaXQsIGFuZCBzZW5kIG1lIHRoZSBwYXRjaGVzIQogCi0iIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwotIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAotaWYgdmVyc2lvbiA8IDYwMAotICBzeW50YXggY2xlYXIKLWVsc2VpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorIiBRdWl0IHdoZW4gYSAoY3VzdG9tKSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCiAgIGZpbmlzaAogZW5kaWYKIApAQCAtMzYsMjMgKzMzLDExIEBACiBzeW4gbWF0Y2ggbW9kZWxTdHJpbmcgIicuIgogCiAiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCi0iIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKLSIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKLWlmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9tb2RlbF9zeW50YXhfaW5pdHMiKQotICBpZiB2ZXJzaW9uIDwgNTA4Ci0gICAgbGV0IGRpZF9tb2RlbF9zeW50YXhfaW5pdHMgPSAxCi0gICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KLSAgZWxzZQotICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgotICBlbmRpZgotCi0gIEhpTGluayBtb2RlbEtleXdvcmQJU3RhdGVtZW50Ci0gIEhpTGluayBtb2RlbEJsb2NrCVByZVByb2MKLSAgSGlMaW5rIG1vZGVsQ29tbWVudAlDb21tZW50Ci0gIEhpTGluayBtb2RlbFN0cmluZwlTdHJpbmcKLQotICBkZWxjb21tYW5kIEhpTGluawotZW5kaWYKKyIgT25seSB1c2VkIHdoZW4gYW4gaXRlbSBkb2Vzbid0IGhhdmUgaGlnaGxpZ2h0aW5nIHlldAoraGkgZGVmIGxpbmsgbW9kZWxLZXl3b3JkCVN0YXRlbWVudAoraGkgZGVmIGxpbmsgbW9kZWxCbG9jawkJUHJlUHJvYworaGkgZGVmIGxpbmsgbW9kZWxDb21tZW50CUNvbW1lbnQKK2hpIGRlZiBsaW5rIG1vZGVsU3RyaW5nCQlTdHJpbmcKIAogbGV0IGI6Y3VycmVudF9zeW50YXggPSAibW9kZWwiCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3ZncmluZGVmcy52aW0gYi9ydW50aW1lL3N5bnRheC92Z3JpbmRlZnMudmltCmluZGV4IGE0YjgxYjcuLjNkZTMxYjEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L3ZncmluZGVmcy52aW0KKysrIGIvcnVudGltZS9zeW50YXgvdmdyaW5kZWZzLnZpbQpAQCAtMSwxNSArMSwxMiBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6CVZncmluZGVmcwogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjUKKyIgTGFzdCBDaGFuZ2U6CTIwMDUgSnVuIDIwCiAKICIgVGhlIFZncmluZGVmcyBmaWxlIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGxhbmd1YWdlIGZvciB2Z3JpbmQKIAotIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKLSIgRm9yIHZlcnNpb24gNi54OiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQKLWlmIHZlcnNpb24gPCA2MDAKLSAgc3ludGF4IGNsZWFyCi1lbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyIgUXVpdCB3aGVuIGEgKGN1c3RvbSkgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQogICBmaW5pc2gKIGVuZGlmCiAKQEAgLTM5LDIyICszNiw5IEBACiBzeW4gbWF0Y2ggdmdyaW5kZWZzRmllbGQgIlxcJCIKIAogIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgotIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5Ci0iIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0Ci1pZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdmdyaW5kZWZzX3N5bnRheF9pbml0cyIpCi0gIGlmIHZlcnNpb24gPCA1MDgKLSAgICBsZXQgZGlkX3ZncmluZGVmc19zeW50YXhfaW5pdHMgPSAxCi0gICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgbGluayA8YXJncz4KLSAgZWxzZQotICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgotICBlbmRpZgotCi0gICIgVGhlIGRlZmF1bHQgbWV0aG9kcyBmb3IgaGlnaGxpZ2h0aW5nLiAgQ2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIKLSAgSGlMaW5rIHZncmluZGVmc0ZpZWxkCQlTdGF0ZW1lbnQKLSAgSGlMaW5rIHZncmluZGVmc0NvbW1lbnQJQ29tbWVudAotCi0gIGRlbGNvbW1hbmQgSGlMaW5rCi1lbmRpZgorIiBPbmx5IHVzZWQgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitoaSBkZWYgbGluayB2Z3JpbmRlZnNGaWVsZAlTdGF0ZW1lbnQKK2hpIGRlZiBsaW5rIHZncmluZGVmc0NvbW1lbnQJQ29tbWVudAogCiBsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ2Z3JpbmRlZnMiCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3ZpbWluZm8udmltIGIvcnVudGltZS9zeW50YXgvdmltaW5mby52aW0KaW5kZXggNDZkNWI4OS4uZDE3NGVkZiAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvdmltaW5mby52aW0KKysrIGIvcnVudGltZS9zeW50YXgvdmltaW5mby52aW0KQEAgLTEsMTMgKzEsMTAgQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglWaW0gLnZpbWluZm8gZmlsZQogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZToJMjAwMSBBcHIgMjUKKyIgTGFzdCBDaGFuZ2U6CTIwMDUgSnVuIDIwCiAKLSIgRm9yIHZlcnNpb24gNS54OiBDbGVhciBhbGwgc3ludGF4IGl0ZW1zCi0iIEZvciB2ZXJzaW9uIDYueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCi1pZiB2ZXJzaW9uIDwgNjAwCi0gIHN5bnRheCBjbGVhcgotZWxzZWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisiIFF1aXQgd2hlbiBhIChjdXN0b20pIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZAoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKICAgZmluaXNoCiBlbmRpZgogCkBAIC0zMSwyMiArMjgsMTAgQEAKIHN5biBtYXRjaCB2aW1pbmZvQ29tbWVudCAiXiMuKiIKIAogIiBEZWZpbmUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgotIiBGb3IgdmVyc2lvbiA1LjcgYW5kIGVhcmxpZXI6IG9ubHkgd2hlbiBub3QgZG9uZSBhbHJlYWR5Ci0iIEZvciB2ZXJzaW9uIDUuOCBhbmQgbGF0ZXI6IG9ubHkgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0Ci1pZiB2ZXJzaW9uID49IDUwOCB8fCAhZXhpc3RzKCJkaWRfdmltaW5mb19zeW50YXhfaW5pdHMiKQotICBpZiB2ZXJzaW9uIDwgNTA4Ci0gICAgbGV0IGRpZF92aW1pbmZvX3N5bnRheF9pbml0cyA9IDEKLSAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBsaW5rIDxhcmdzPgotICBlbHNlCi0gICAgY29tbWFuZCAtbmFyZ3M9KyBIaUxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+Ci0gIGVuZGlmCi0KLSAgSGlMaW5rIHZpbWluZm9Db21tZW50CQlDb21tZW50Ci0gIEhpTGluayB2aW1pbmZvRXJyb3IJCUVycm9yCi0gIEhpTGluayB2aW1pbmZvU3RhdGVtZW50CVN0YXRlbWVudAotCi0gIGRlbGNvbW1hbmQgSGlMaW5rCi1lbmRpZgorIiBPbmx5IHVzZWQgd2hlbiBhbiBpdGVtIGRvZXNuJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0CitoaSBkZWYgbGluayB2aW1pbmZvQ29tbWVudAlDb21tZW50CitoaSBkZWYgbGluayB2aW1pbmZvRXJyb3IJRXJyb3IKK2hpIGRlZiBsaW5rIHZpbWluZm9TdGF0ZW1lbnQJU3RhdGVtZW50CiAKIGxldCBiOmN1cnJlbnRfc3ludGF4ID0gInZpbWluZm8iCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmFsLmMgYi9zcmMvZXZhbC5jCmluZGV4IDZmMzEzNDYuLmZiMDdlNWUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmFsLmMKKysrIGIvc3JjL2V2YWwuYwpAQCAtNTQwLDYgKzU0MCw4IEBACiBzdGF0aWMgdm9pZCBmX3NldHdpbnZhciBfX0FSR1MoKHR5cHZhbF9UICphcmd2YXJzLCB0eXB2YWxfVCAqcmV0dHYpKTsKIHN0YXRpYyB2b2lkIGZfc2ltcGxpZnkgX19BUkdTKCh0eXB2YWxfVCAqYXJndmFycywgdHlwdmFsX1QgKnJldHR2KSk7CiBzdGF0aWMgdm9pZCBmX3NvcnQgX19BUkdTKCh0eXB2YWxfVCAqYXJndmFycywgdHlwdmFsX1QgKnJldHR2KSk7CitzdGF0aWMgdm9pZCBmX3NwZWxsYmFkd29yZCBfX0FSR1MoKHR5cHZhbF9UICphcmd2YXJzLCB0eXB2YWxfVCAqcmV0dHYpKTsKK3N0YXRpYyB2b2lkIGZfc3BlbGxzdWdnZXN0IF9fQVJHUygodHlwdmFsX1QgKmFyZ3ZhcnMsIHR5cHZhbF9UICpyZXR0dikpOwogc3RhdGljIHZvaWQgZl9zcGxpdCBfX0FSR1MoKHR5cHZhbF9UICphcmd2YXJzLCB0eXB2YWxfVCAqcmV0dHYpKTsKICNpZmRlZiBIQVZFX1NUUkZUSU1FCiBzdGF0aWMgdm9pZCBmX3N0cmZ0aW1lIF9fQVJHUygodHlwdmFsX1QgKmFyZ3ZhcnMsIHR5cHZhbF9UICpyZXR0dikpOwpAQCAtNjM1MSw2ICs2MzUzLDggQEAKICAgICB7InNldHdpbnZhciIsCTMsIDMsIGZfc2V0d2ludmFyfSwKICAgICB7InNpbXBsaWZ5IiwJMSwgMSwgZl9zaW1wbGlmeX0sCiAgICAgeyJzb3J0IiwJCTEsIDIsIGZfc29ydH0sCisgICAgeyJzcGVsbGJhZHdvcmQiLAkwLCAwLCBmX3NwZWxsYmFkd29yZH0sCisgICAgeyJzcGVsbHN1Z2dlc3QiLAkxLCAyLCBmX3NwZWxsc3VnZ2VzdH0sCiAgICAgeyJzcGxpdCIsCQkxLCAzLCBmX3NwbGl0fSwKICNpZmRlZiBIQVZFX1NUUkZUSU1FCiAgICAgeyJzdHJmdGltZSIsCTEsIDIsIGZfc3RyZnRpbWV9LApAQCAtMTMwNzEsNiArMTMwNzUsOTEgQEAKICAgICB9CiB9CiAKKy8qCisgKiAic3BlbGxiYWR3b3JkKCkiIGZ1bmN0aW9uCisgKi8KKy8qIEFSR1NVU0VEICovCisgICAgc3RhdGljIHZvaWQKK2Zfc3BlbGxiYWR3b3JkKGFyZ3ZhcnMsIHJldHR2KQorICAgIHR5cHZhbF9UCSphcmd2YXJzOworICAgIHR5cHZhbF9UCSpyZXR0djsKK3sKKyAgICBpbnQJCWF0dHI7CisgICAgY2hhcl91CSpwdHI7CisgICAgaW50CQlsZW47CisKKyAgICByZXR0di0+dnZhbC52X3N0cmluZyA9IE5VTEw7CisgICAgcmV0dHYtPnZfdHlwZSA9IFZBUl9TVFJJTkc7CisKKyNpZmRlZiBGRUFUX1NZTl9ITAorICAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBiYWRseSBzcGVsbGVkIHdvcmQuICovCisgICAgaWYgKHNwZWxsX21vdmVfdG8oRk9SV0FSRCwgVFJVRSwgVFJVRSkgPT0gRkFJTCkKKwlyZXR1cm47CisKKyAgICAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgd29yZCBhbmQgY29weSBpdC4gKi8KKyAgICBwdHIgPSBtbF9nZXRfY3Vyc29yKCk7CisgICAgbGVuID0gc3BlbGxfY2hlY2soY3Vyd2luLCBwdHIsICZhdHRyKTsKKyAgICByZXR0di0+dnZhbC52X3N0cmluZyA9IHZpbV9zdHJuc2F2ZShwdHIsIGxlbik7CisjZW5kaWYKK30KKworLyoKKyAqICJzcGVsbHN1Z2dlc3QoKSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX3NwZWxsc3VnZ2VzdChhcmd2YXJzLCByZXR0dikKKyAgICB0eXB2YWxfVAkqYXJndmFyczsKKyAgICB0eXB2YWxfVAkqcmV0dHY7Cit7CisgICAgY2hhcl91CSpzdHI7CisgICAgaW50CQltYXhjb3VudDsKKyAgICBnYXJyYXlfVAlnYTsKKyAgICBsaXN0X1QJKmw7CisgICAgbGlzdGl0ZW1fVAkqbGk7CisgICAgaW50CQlpOworCisgICAgbCA9IGxpc3RfYWxsb2MoKTsKKyAgICBpZiAobCA9PSBOVUxMKQorCXJldHVybjsKKyAgICByZXR0di0+dl90eXBlID0gVkFSX0xJU1Q7CisgICAgcmV0dHYtPnZ2YWwudl9saXN0ID0gbDsKKyAgICArK2wtPmx2X3JlZmNvdW50OworCisjaWZkZWYgRkVBVF9TWU5fSEwKKyAgICBpZiAoY3Vyd2luLT53X3Bfc3BlbGwgJiYgKmN1cmJ1Zi0+Yl9wX3NwbCAhPSBOVUwpCisgICAgeworCXN0ciA9IGdldF90dl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworCWlmIChhcmd2YXJzWzFdLnZfdHlwZSAhPSBWQVJfVU5LTk9XTikKKwl7CisJICAgIG1heGNvdW50ID0gZ2V0X3R2X251bWJlcigmYXJndmFyc1sxXSk7CisJICAgIGlmIChtYXhjb3VudCA8PSAwKQorCQlyZXR1cm47CisJfQorCWVsc2UKKwkgICAgbWF4Y291bnQgPSAyNTsKKworCXNwZWxsX3N1Z2dlc3RfbGlzdCgmZ2EsIHN0ciwgbWF4Y291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGdhLmdhX2xlbjsgKytpKQorCXsKKwkgICAgc3RyID0gKChjaGFyX3UgKiopZ2EuZ2FfZGF0YSlbaV07CisKKwkgICAgbGkgPSBsaXN0aXRlbV9hbGxvYygpOworCSAgICBpZiAobGkgPT0gTlVMTCkKKwkJdmltX2ZyZWUoc3RyKTsKKwkgICAgZWxzZQorCSAgICB7CisJCWxpLT5saV90di52X3R5cGUgPSBWQVJfU1RSSU5HOworCQlsaS0+bGlfdHYudl9sb2NrID0gMDsKKwkJbGktPmxpX3R2LnZ2YWwudl9zdHJpbmcgPSBzdHI7CisJCWxpc3RfYXBwZW5kKGwsIGxpKTsKKwkgICAgfQorCX0KKwlnYV9jbGVhcigmZ2EpOworICAgIH0KKyNlbmRpZgorfQorCiAgICAgc3RhdGljIHZvaWQKIGZfc3BsaXQoYXJndmFycywgcmV0dHYpCiAgICAgdHlwdmFsX1QJKmFyZ3ZhcnM7CkBAIC0xNjAwMiw3ICsxNjA5MSw3IEBACiAgICAgICoJCSAgICAibmFtZSIgPT0gTlVMTCwgImZ1ZGkuZmRfZGljdCIgc2V0LAogICAgICAqCQkgICAgImZ1ZGkuZmRfZGkiID09IE5VTEwsICJmdWRpLmZkX25ld2tleSIgPT0gZnVuYwogICAgICAqIGRpY3QuZnVuYyAgICBleGlzdGluZyBkaWN0IGVudHJ5IHdpdGggYSBGdW5jcmVmCi0gICAgICoJCSAgICAibmFtZSIgPT0gZm5hbWUsICJmdWRpLmZkX2RpY3QiIHNldCwKKyAgICAgKgkJICAgICJuYW1lIiA9PSBmdW5jLCAiZnVkaS5mZF9kaWN0IiBzZXQsCiAgICAgICoJCSAgICAiZnVkaS5mZF9kaSIgc2V0LCAiZnVkaS5mZF9uZXdrZXkiID09IE5VTEwKICAgICAgKiBkaWN0LmZ1bmMgICAgZXhpc3RpbmcgZGljdCBlbnRyeSB0aGF0J3Mgbm90IGEgRnVuY3JlZgogICAgICAqCQkgICAgIm5hbWUiID09IE5VTEwsICJmdWRpLmZkX2RpY3QiIHNldCwKQEAgLTE2MDk2LDYgKzE2MTg1LDI3IEBACiAgICAgZ2FfaW5pdDIoJm5ld2FyZ3MsIChpbnQpc2l6ZW9mKGNoYXJfdSAqKSwgMyk7CiAgICAgZ2FfaW5pdDIoJm5ld2xpbmVzLCAoaW50KXNpemVvZihjaGFyX3UgKiksIDMpOwogCisgICAgaWYgKCFlYXAtPnNraXApCisgICAgeworCS8qIENoZWNrIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gKi8KKwlpZiAobmFtZSAhPSBOVUxMKQorCSAgICBhcmcgPSBuYW1lOworCWVsc2UKKwkgICAgYXJnID0gZnVkaS5mZF9uZXdrZXk7CisJaWYgKGFyZyAhPSBOVUxMKQorCXsKKwkgICAgaWYgKCphcmcgPT0gS19TUEVDSUFMKQorCQlqID0gMzsKKwkgICAgZWxzZQorCQlqID0gMDsKKwkgICAgd2hpbGUgKGFyZ1tqXSAhPSBOVUwgJiYgKGogPT0gMCA/IGV2YWxfaXNuYW1lYzEoYXJnW2pdKQorCQkJCQkJICAgICAgOiBldmFsX2lzbmFtZWMoYXJnW2pdKSkpCisJCSsrajsKKwkgICAgaWYgKGFyZ1tqXSAhPSBOVUwpCisJCWVtc2dfZnVuY25hbWUoXyhlX2ludmFyZzIpLCBhcmcpOworCX0KKyAgICB9CisKICAgICAvKgogICAgICAqIElzb2xhdGUgdGhlIGFyZ3VtZW50czogImFyZzEsIGFyZzIsIC4uLikiCiAgICAgICovCkBAIC0xNjE4Nyw2ICsxNjI5Nyw5IEBACiAJCWVtc2dfZnVuY25hbWUoZV9mdW5jZXh0cywgbmFtZSk7CiAJfQogCisJaWYgKCFlYXAtPnNraXAgJiYgZGlkX2Vtc2cpCisJICAgIGdvdG8gZXJyZXQ7CisKIAltc2dfcHV0Y2hhcignXG4nKTsJICAgIC8qIGRvbid0IG92ZXJ3cml0ZSB0aGUgZnVuY3Rpb24gbmFtZSAqLwogCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvZXhfZG9jbWQuYyBiL3NyYy9leF9kb2NtZC5jCmluZGV4IDIwYzU4ZjEuLjFjMWVjYWEgMTAwNjQ0Ci0tLSBhL3NyYy9leF9kb2NtZC5jCisrKyBiL3NyYy9leF9kb2NtZC5jCkBAIC0xMzUsNiArMTM1LDkgQEAKICNlbmRpZgogc3RhdGljIGNoYXJfdQkqaW52YWxpZF9yYW5nZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogc3RhdGljIHZvaWQJY29ycmVjdF9yYW5nZSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOworI2lmZGVmIEZFQVRfUVVJQ0tGSVgKK3N0YXRpYyBjaGFyX3UJKnJlcGxhY2VfbWFrZXByZyBfX0FSR1MoKGV4YXJnX1QgKmVhcCwgY2hhcl91ICpwLCBjaGFyX3UgKipjbWRsaW5lcCkpOworI2VuZGlmCiBzdGF0aWMgY2hhcl91CSpyZXBsX2NtZGxpbmUgX19BUkdTKChleGFyZ19UICplYXAsIGNoYXJfdSAqc3JjLCBpbnQgc3JjbGVuLCBjaGFyX3UgKnJlcGwsIGNoYXJfdSAqKmNtZGxpbmVwKSk7CiBzdGF0aWMgdm9pZAlleF9oaWdobGlnaHQgX19BUkdTKChleGFyZ19UICplYXApKTsKIHN0YXRpYyB2b2lkCWV4X2NvbG9yc2NoZW1lIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CkBAIC0yMTg3LDcxICsyMTkwLDEwIEBACiAgICAgLyoKICAgICAgKiBGb3IgdGhlICI6bWFrZSIgYW5kICI6Z3JlcCIgY29tbWFuZHMgd2UgaW5zZXJ0IHRoZSAnbWFrZXByZycvJ2dyZXBwcmcnCiAgICAgICogb3B0aW9uIGhlcmUsIHNvIHRoaW5ncyBsaWtlICUgZ2V0IGV4cGFuZGVkLgotICAgICAqIERvbid0IGRvIGl0IHdoZW4gIjp2aW1ncmVwIiBpcyB1c2VkIGZvciAiOmdyZXAiLgogICAgICAqLwotICAgIGlmICgoZWEuY21kaWR4ID09IENNRF9tYWtlCi0JCQkgfHwgZWEuY21kaWR4ID09IENNRF9ncmVwIHx8IGVhLmNtZGlkeCA9PSBDTURfZ3JlcGFkZCkKLQkgICAgJiYgIWdyZXBfaW50ZXJuYWwoZWEuY21kaWR4KSkKLSAgICB7Ci0JY2hhcl91CQkqbmV3X2NtZGxpbmU7Ci0JY2hhcl91CQkqcHJvZ3JhbTsKLQljaGFyX3UJCSpwb3M7Ci0JY2hhcl91CQkqcHRyOwotCWludAkJbGVuOwotCWludAkJaTsKLQotCWlmIChlYS5jbWRpZHggPT0gQ01EX2dyZXAgfHwgZWEuY21kaWR4ID09IENNRF9ncmVwYWRkKQotCXsKLQkgICAgaWYgKCpjdXJidWYtPmJfcF9ncCA9PSBOVUwpCi0JCXByb2dyYW0gPSBwX2dwOwotCSAgICBlbHNlCi0JCXByb2dyYW0gPSBjdXJidWYtPmJfcF9ncDsKLQl9Ci0JZWxzZQotCXsKLQkgICAgaWYgKCpjdXJidWYtPmJfcF9tcCA9PSBOVUwpCi0JCXByb2dyYW0gPSBwX21wOwotCSAgICBlbHNlCi0JCXByb2dyYW0gPSBjdXJidWYtPmJfcF9tcDsKLQl9Ci0KLQlwID0gc2tpcHdoaXRlKHApOwotCi0JaWYgKChwb3MgPSAoY2hhcl91ICopc3Ryc3RyKChjaGFyICopcHJvZ3JhbSwgIiQqIikpICE9IE5VTEwpCi0JewkJCQkvKiByZXBsYWNlICQqIGJ5IGdpdmVuIGFyZ3VtZW50cyAqLwotCSAgICBpID0gMTsKLQkgICAgd2hpbGUgKChwb3MgPSAoY2hhcl91ICopc3Ryc3RyKChjaGFyICopcG9zICsgMiwgIiQqIikpICE9IE5VTEwpCi0JCSsraTsKLQkgICAgbGVuID0gKGludClTVFJMRU4ocCk7Ci0JICAgIG5ld19jbWRsaW5lID0gYWxsb2MoKGludCkoU1RSTEVOKHByb2dyYW0pICsgaSAqIChsZW4gLSAyKSArIDEpKTsKLQkgICAgaWYgKG5ld19jbWRsaW5lID09IE5VTEwpCi0JCWdvdG8gZG9lbmQ7CQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLwotCSAgICBwdHIgPSBuZXdfY21kbGluZTsKLQkgICAgd2hpbGUgKChwb3MgPSAoY2hhcl91ICopc3Ryc3RyKChjaGFyICopcHJvZ3JhbSwgIiQqIikpICE9IE5VTEwpCi0JICAgIHsKLQkJaSA9IChpbnQpKHBvcyAtIHByb2dyYW0pOwotCQlTVFJOQ1BZKHB0ciwgcHJvZ3JhbSwgaSk7Ci0JCVNUUkNQWShwdHIgKz0gaSwgcCk7Ci0JCXB0ciArPSBsZW47Ci0JCXByb2dyYW0gPSBwb3MgKyAyOwotCSAgICB9Ci0JICAgIFNUUkNQWShwdHIsIHByb2dyYW0pOwotCX0KLQllbHNlCi0JewotCSAgICBuZXdfY21kbGluZSA9IGFsbG9jKChpbnQpKFNUUkxFTihwcm9ncmFtKSArIFNUUkxFTihwKSArIDIpKTsKLQkgICAgaWYgKG5ld19jbWRsaW5lID09IE5VTEwpCi0JCWdvdG8gZG9lbmQ7CQkgICAgLyogb3V0IG9mIG1lbW9yeSAqLwotCSAgICBTVFJDUFkobmV3X2NtZGxpbmUsIHByb2dyYW0pOwotCSAgICBTVFJDQVQobmV3X2NtZGxpbmUsICIgIik7Ci0JICAgIFNUUkNBVChuZXdfY21kbGluZSwgcCk7Ci0JfQotCW1zZ19tYWtlKHApOwotCS8qICdlYS5jbWQnIGlzIG5vdCBzZXQgaGVyZSwgYmVjYXVzZSBpdCBpcyBub3QgdXNlZCBhdCBDTURfbWFrZSAqLwotCXZpbV9mcmVlKCpjbWRsaW5lcCk7Ci0JKmNtZGxpbmVwID0gbmV3X2NtZGxpbmU7Ci0JcCA9IG5ld19jbWRsaW5lOwotICAgIH0KKyAgICBwID0gcmVwbGFjZV9tYWtlcHJnKCZlYSwgcCwgY21kbGluZXApOworICAgIGlmIChwID09IE5VTEwpCisJZ290byBkb2VuZDsKICNlbmRpZgogCiAgICAgLyoKQEAgLTQwMzEsNiArMzk3Myw4NyBAQAogICAgIH0KICAgICByZXR1cm4gcDsKIH0KKworLyoKKyAqIEZvciB0aGUgIjptYWtlIiBhbmQgIjpncmVwIiBjb21tYW5kcyBpbnNlcnQgdGhlICdtYWtlcHJnJy8nZ3JlcHByZycgb3B0aW9uCisgKiBpbiB0aGUgY29tbWFuZCBsaW5lLCBzbyB0aGF0IHRoaW5ncyBsaWtlICUgZ2V0IGV4cGFuZGVkLgorICovCisgICAgc3RhdGljIGNoYXJfdSAqCityZXBsYWNlX21ha2VwcmcoZWFwLCBwLCBjbWRsaW5lcCkKKyAgICBleGFyZ19UCSplYXA7CisgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqKmNtZGxpbmVwOworeworICAgIGNoYXJfdQkqbmV3X2NtZGxpbmU7CisgICAgY2hhcl91CSpwcm9ncmFtOworICAgIGNoYXJfdQkqcG9zOworICAgIGNoYXJfdQkqcHRyOworICAgIGludAkJbGVuOworICAgIGludAkJaTsKKworICAgIC8qCisgICAgICogRG9uJ3QgZG8gaXQgd2hlbiAiOnZpbWdyZXAiIGlzIHVzZWQgZm9yICI6Z3JlcCIuCisgICAgICovCisgICAgaWYgKChlYXAtPmNtZGlkeCA9PSBDTURfbWFrZQorCQkgICAgIHx8IGVhcC0+Y21kaWR4ID09IENNRF9ncmVwIHx8IGVhcC0+Y21kaWR4ID09IENNRF9ncmVwYWRkKQorCSAgICAmJiAhZ3JlcF9pbnRlcm5hbChlYXAtPmNtZGlkeCkpCisgICAgeworCWlmIChlYXAtPmNtZGlkeCA9PSBDTURfZ3JlcCB8fCBlYXAtPmNtZGlkeCA9PSBDTURfZ3JlcGFkZCkKKwl7CisJICAgIGlmICgqY3VyYnVmLT5iX3BfZ3AgPT0gTlVMKQorCQlwcm9ncmFtID0gcF9ncDsKKwkgICAgZWxzZQorCQlwcm9ncmFtID0gY3VyYnVmLT5iX3BfZ3A7CisJfQorCWVsc2UKKwl7CisJICAgIGlmICgqY3VyYnVmLT5iX3BfbXAgPT0gTlVMKQorCQlwcm9ncmFtID0gcF9tcDsKKwkgICAgZWxzZQorCQlwcm9ncmFtID0gY3VyYnVmLT5iX3BfbXA7CisJfQorCisJcCA9IHNraXB3aGl0ZShwKTsKKworCWlmICgocG9zID0gKGNoYXJfdSAqKXN0cnN0cigoY2hhciAqKXByb2dyYW0sICIkKiIpKSAhPSBOVUxMKQorCXsKKwkgICAgLyogcmVwbGFjZSAkKiBieSBnaXZlbiBhcmd1bWVudHMgKi8KKwkgICAgaSA9IDE7CisJICAgIHdoaWxlICgocG9zID0gKGNoYXJfdSAqKXN0cnN0cigoY2hhciAqKXBvcyArIDIsICIkKiIpKSAhPSBOVUxMKQorCQkrK2k7CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKHApOworCSAgICBuZXdfY21kbGluZSA9IGFsbG9jKChpbnQpKFNUUkxFTihwcm9ncmFtKSArIGkgKiAobGVuIC0gMikgKyAxKSk7CisJICAgIGlmIChuZXdfY21kbGluZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsJCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJICAgIHB0ciA9IG5ld19jbWRsaW5lOworCSAgICB3aGlsZSAoKHBvcyA9IChjaGFyX3UgKilzdHJzdHIoKGNoYXIgKilwcm9ncmFtLCAiJCoiKSkgIT0gTlVMTCkKKwkgICAgeworCQlpID0gKGludCkocG9zIC0gcHJvZ3JhbSk7CisJCVNUUk5DUFkocHRyLCBwcm9ncmFtLCBpKTsKKwkJU1RSQ1BZKHB0ciArPSBpLCBwKTsKKwkJcHRyICs9IGxlbjsKKwkJcHJvZ3JhbSA9IHBvcyArIDI7CisJICAgIH0KKwkgICAgU1RSQ1BZKHB0ciwgcHJvZ3JhbSk7CisJfQorCWVsc2UKKwl7CisJICAgIG5ld19jbWRsaW5lID0gYWxsb2MoKGludCkoU1RSTEVOKHByb2dyYW0pICsgU1RSTEVOKHApICsgMikpOworCSAgICBpZiAobmV3X2NtZGxpbmUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CQkJLyogb3V0IG9mIG1lbW9yeSAqLworCSAgICBTVFJDUFkobmV3X2NtZGxpbmUsIHByb2dyYW0pOworCSAgICBTVFJDQVQobmV3X2NtZGxpbmUsICIgIik7CisJICAgIFNUUkNBVChuZXdfY21kbGluZSwgcCk7CisJfQorCW1zZ19tYWtlKHApOworCisJLyogJ2VhcC0+Y21kJyBpcyBub3Qgc2V0IGhlcmUsIGJlY2F1c2UgaXQgaXMgbm90IHVzZWQgYXQgQ01EX21ha2UgKi8KKwl2aW1fZnJlZSgqY21kbGluZXApOworCSpjbWRsaW5lcCA9IG5ld19jbWRsaW5lOworCXAgPSBuZXdfY21kbGluZTsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9maWxlaW8uYyBiL3NyYy9maWxlaW8uYwppbmRleCBlMjM5YjVjLi45YWU2OWNmIDEwMDY0NAotLS0gYS9zcmMvZmlsZWlvLmMKKysrIGIvc3JjL2ZpbGVpby5jCkBAIC0zMTgzLDcgKzMxODMsNyBAQAogCSAgICBzdHJ1Y3Qgc3RhdAlzdF9uZXc7CiAJICAgIGNoYXJfdQkqZGlycDsKIAkgICAgY2hhcl91CSpyb290bmFtZTsKLSNpZm5kZWYgU0hPUlRfRk5BTUUKKyNpZiBkZWZpbmVkKFVOSVgpICYmICFkZWZpbmVkKFNIT1JUX0ZOQU1FKQogCSAgICBpbnQJCWRpZF9zZXRfc2hvcnRuYW1lOwogI2VuZGlmCiAKQEAgLTMyMjYsNyArMzIyNiw3IEBACiAJCSAgICBnb3RvIG5vYmFja3VwOwogCQl9CiAKLSNpZm5kZWYgU0hPUlRfRk5BTUUKKyNpZiBkZWZpbmVkKFVOSVgpICYmICFkZWZpbmVkKFNIT1JUX0ZOQU1FKQogCQlkaWRfc2V0X3Nob3J0bmFtZSA9IEZBTFNFOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NyYy9nbGJsX2ltZS5oIGIvc3JjL2dsYmxfaW1lLmgKaW5kZXggODUwODgzNi4uMmJkZmZjNiAxMDA2NDQKLS0tIGEvc3JjL2dsYmxfaW1lLmgKKysrIGIvc3JjL2dsYmxfaW1lLmgKQEAgLTE0LDE1ICsxNCwxNSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KICAgICB2b2lkIGdsb2JhbF9pbWVfaW5pdChBVE9NLCBIV05EKTsKLSAgICB2b2lkIGdsb2JhbF9pbWVfZW5kKCk7CisgICAgdm9pZCBnbG9iYWxfaW1lX2VuZCh2b2lkKTsKICAgICBMUkVTVUxUIFdJTkFQSSBnbG9iYWxfaW1lX0RlZldpbmRvd1Byb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogICAgIEJPT0wgV0lOQVBJIGdsb2JhbF9pbWVfVHJhbnNsYXRlTWVzc2FnZShDT05TVCBNU0cgKik7CiAgICAgdm9pZCBXSU5BUEkgZ2xvYmFsX2ltZV9zZXRfcG9zaXRpb24oUE9JTlQqKTsKICAgICB2b2lkIFdJTkFQSSBnbG9iYWxfaW1lX3NldF9mb250KExPR0ZPTlQqKTsKLSAgICB2b2lkIFdJTkFQSSBnbG9iYWxfaW1lX3N0YXR1c19ldmFjdWF0ZSgpOwotICAgIHZvaWQgV0lOQVBJIGdsb2JhbF9pbWVfc3RhdHVzX3Jlc3RvcmUoKTsKKyAgICB2b2lkIFdJTkFQSSBnbG9iYWxfaW1lX3N0YXR1c19ldmFjdWF0ZSh2b2lkKTsKKyAgICB2b2lkIFdJTkFQSSBnbG9iYWxfaW1lX3N0YXR1c19yZXN0b3JlKHZvaWQpOwogICAgIHZvaWQgV0lOQVBJIGdsb2JhbF9pbWVfc2V0X3N0YXR1cyhpbnQgc3RhdHVzKTsKLSAgICBpbnQgV0lOQVBJIGdsb2JhbF9pbWVfZ2V0X3N0YXR1cygpOworICAgIGludCBXSU5BUEkgZ2xvYmFsX2ltZV9nZXRfc3RhdHVzKHZvaWQpOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9nbG9iYWxzLmggYi9zcmMvZ2xvYmFscy5oCmluZGV4IGMwNzNmY2IuLjg3Yjk5ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9nbG9iYWxzLmgKKysrIGIvc3JjL2dsb2JhbHMuaApAQCAtODUsOCArODUsNiBAQAogI2VuZGlmCiBFWFRFUk4gaW50CWV4ZWNfZnJvbV9yZWcgSU5JVCg9IEZBTFNFKTsJLyogZXhlY3V0aW5nIHJlZ2lzdGVyICovCiAKLUVYVEVSTiBpbnQJZ2xvYmFsX2NoYW5nZWR0aWNrIElOSVQoPSAwKTsJLyogaW5jcmVtZW50ZWQgZm9yIGVhY2gKLQkJCQkJCSAgIGNoYW5nZSwgYWxzbyBmb3IgdW5kbyAqLwogRVhURVJOIGludAlzY3JlZW5fY2xlYXJlZCBJTklUKD0gRkFMU0UpOwkvKiBzY3JlZW4gaGFzIGJlZW4gY2xlYXJlZCAqLwogCiAvKgpAQCAtOTYxLDEwICs5NTksNiBAQAogICovCiBFWFRFUk4gY2hhcl91CSplbXB0eV9vcHRpb24gSU5JVCg9IChjaGFyX3UgKikiIik7CiAKLSNpZmRlZiBERUJVRwotRVhURVJOIEZJTEUgKmRlYnVnZnAgSU5JVCg9IE5VTEwpOwotI2VuZGlmCi0KIEVYVEVSTiBpbnQgIHJlZGlyX29mZiBJTklUKD0gRkFMU0UpOwkvKiBubyByZWRpcmVjdGlvbiBmb3IgYSBtb21lbnQgKi8KIEVYVEVSTiBGSUxFICpyZWRpcl9mZCBJTklUKD0gTlVMTCk7CS8qIG1lc3NhZ2UgcmVkaXJlY3Rpb24gZmlsZSAqLwogI2lmZGVmIEZFQVRfRVZBTApkaWZmIC0tZ2l0IGEvc3JjL2d1aV9ndGsuYyBiL3NyYy9ndWlfZ3RrLmMKaW5kZXggNjQxZjc4NC4uY2Q3ZDZiYiAxMDA2NDQKLS0tIGEvc3JjL2d1aV9ndGsuYworKysgYi9zcmMvZ3VpX2d0ay5jCkBAIC0xNzIsNiArMTcyLDkgQEAKIHN0YXRpYyB2b2lkIGVudHJ5X2FjdGl2YXRlX2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciBkYXRhKTsKIHN0YXRpYyB2b2lkIGVudHJ5X2NoYW5nZWRfY2IoR3RrV2lkZ2V0ICplbnRyeSwgR3RrV2lkZ2V0ICpkaWFsb2cpOwogc3RhdGljIHZvaWQgZmluZF9yZXBsYWNlX2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciBkYXRhKTsKKyNpZm5kZWYgSEFWRV9HVEsyCitzdGF0aWMgdm9pZCBndWlfZ3RrX3Bvc2l0aW9uX2luX3BhcmVudChHdGtXaWRnZXQgKnBhcmVudCwgR3RrV2lkZ2V0ICpjaGlsZCwgZ3VpX3dpbl9wb3NfVCB3aGVyZSk7CisjZW5kaWYKIAogI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiBkZWZpbmVkKEhBVkVfR1RLMikKIC8qCkBAIC0zMDkzLDcgKzMwOTYsNyBAQAogICoKICAqICBicmVudCAtLSBkYnYKICAqLwotICAgIHZvaWQKKyAgICBzdGF0aWMgdm9pZAogZ3VpX2d0a19wb3NpdGlvbl9pbl9wYXJlbnQoCiAJR3RrV2lkZ2V0CSpwYXJlbnQsCiAJR3RrV2lkZ2V0CSpjaGlsZCwKZGlmZiAtLWdpdCBhL3NyYy9ndWlfdzMyLmMgYi9zcmMvZ3VpX3czMi5jCmluZGV4IDNlMzFlNzcuLmM0ZDhlNDggMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfdzMyLmMKKysrIGIvc3JjL2d1aV93MzIuYwpAQCAtMjU4LDE4ICsyNTgsMTggQEAKIHR5cGVkZWYgSEFORExFIEhJTUM7CiAjIGVuZGlmCiAKLUhJTlNUQU5DRSBoTGliSW1tID0gTlVMTDsKLUxPTkcgKFdJTkFQSSAqcEltbUdldENvbXBvc2l0aW9uU3RyaW5nQSkoSElNQywgRFdPUkQsIExQVk9JRCwgRFdPUkQpOwotTE9ORyAoV0lOQVBJICpwSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdXKShISU1DLCBEV09SRCwgTFBWT0lELCBEV09SRCk7Ci1ISU1DIChXSU5BUEkgKnBJbW1HZXRDb250ZXh0KShIV05EKTsKLUhJTUMgKFdJTkFQSSAqcEltbUFzc29jaWF0ZUNvbnRleHQpKEhXTkQsIEhJTUMpOwotQk9PTCAoV0lOQVBJICpwSW1tUmVsZWFzZUNvbnRleHQpKEhXTkQsIEhJTUMpOwotQk9PTCAoV0lOQVBJICpwSW1tR2V0T3BlblN0YXR1cykoSElNQyk7Ci1CT09MIChXSU5BUEkgKnBJbW1TZXRPcGVuU3RhdHVzKShISU1DLCBCT09MKTsKLUJPT0wgKFdJTkFQSSAqcEltbUdldENvbXBvc2l0aW9uRm9udCkoSElNQywgTFBMT0dGT05UQSk7Ci1CT09MIChXSU5BUEkgKnBJbW1TZXRDb21wb3NpdGlvbkZvbnQpKEhJTUMsIExQTE9HRk9OVEEpOwotQk9PTCAoV0lOQVBJICpwSW1tU2V0Q29tcG9zaXRpb25XaW5kb3cpKEhJTUMsIExQQ09NUE9TSVRJT05GT1JNKTsKLUJPT0wgKFdJTkFQSSAqcEltbUdldENvbnZlcnNpb25TdGF0dXMpKEhJTUMsIExQRFdPUkQsIExQRFdPUkQpOworc3RhdGljIEhJTlNUQU5DRSBoTGliSW1tID0gTlVMTDsKK3N0YXRpYyBMT05HIChXSU5BUEkgKnBJbW1HZXRDb21wb3NpdGlvblN0cmluZ0EpKEhJTUMsIERXT1JELCBMUFZPSUQsIERXT1JEKTsKK3N0YXRpYyBMT05HIChXSU5BUEkgKnBJbW1HZXRDb21wb3NpdGlvblN0cmluZ1cpKEhJTUMsIERXT1JELCBMUFZPSUQsIERXT1JEKTsKK3N0YXRpYyBISU1DIChXSU5BUEkgKnBJbW1HZXRDb250ZXh0KShIV05EKTsKK3N0YXRpYyBISU1DIChXSU5BUEkgKnBJbW1Bc3NvY2lhdGVDb250ZXh0KShIV05ELCBISU1DKTsKK3N0YXRpYyBCT09MIChXSU5BUEkgKnBJbW1SZWxlYXNlQ29udGV4dCkoSFdORCwgSElNQyk7CitzdGF0aWMgQk9PTCAoV0lOQVBJICpwSW1tR2V0T3BlblN0YXR1cykoSElNQyk7CitzdGF0aWMgQk9PTCAoV0lOQVBJICpwSW1tU2V0T3BlblN0YXR1cykoSElNQywgQk9PTCk7CitzdGF0aWMgQk9PTCAoV0lOQVBJICpwSW1tR2V0Q29tcG9zaXRpb25Gb250KShISU1DLCBMUExPR0ZPTlRBKTsKK3N0YXRpYyBCT09MIChXSU5BUEkgKnBJbW1TZXRDb21wb3NpdGlvbkZvbnQpKEhJTUMsIExQTE9HRk9OVEEpOworc3RhdGljIEJPT0wgKFdJTkFQSSAqcEltbVNldENvbXBvc2l0aW9uV2luZG93KShISU1DLCBMUENPTVBPU0lUSU9ORk9STSk7CitzdGF0aWMgQk9PTCAoV0lOQVBJICpwSW1tR2V0Q29udmVyc2lvblN0YXR1cykoSElNQywgTFBEV09SRCwgTFBEV09SRCk7CiBzdGF0aWMgdm9pZCBkeW5faW1tX2xvYWQodm9pZCk7CiAjZWxzZQogIyBkZWZpbmUgcEltbUdldENvbXBvc2l0aW9uU3RyaW5nQSBJbW1HZXRDb21wb3NpdGlvblN0cmluZ0EKQEAgLTE0NDMsNiArMTQ0Myw3IEBACiAvKgogICogaGFuZGxlIFdNX0lNRV9OT1RJRlkgbWVzc2FnZQogICovCisvKkFSR1NVU0VEKi8KICAgICBzdGF0aWMgTFJFU1VMVAogX09uSW1lTm90aWZ5KEhXTkQgaFduZCwgRFdPUkQgZHdDb21tYW5kLCBEV09SRCBkd0RhdGEpCiB7CkBAIC0xNDkyLDYgKzE0OTMsNyBAQAogICAgIHJldHVybiBsUmVzdWx0OwogfQogCisvKkFSR1NVU0VEKi8KICAgICBzdGF0aWMgTFJFU1VMVAogX09uSW1lQ29tcG9zaXRpb24oSFdORCBod25kLCBXUEFSQU0gZGJjcywgTFBBUkFNIHBhcmFtKQogewpAQCAtNDE0Nyw2ICs0MTQ5LDcgQEAKICAgICAvLyBUUkFDRTAoImd1aV9tY2hfcG9zdF9iYWxsb29uIH19fSIpOwogfQogCisvKkFSR1NVU0VEKi8KICAgICBCYWxsb29uRXZhbCAqCiBndWlfbWNoX2NyZWF0ZV9iZXZhbF9hcmVhKHRhcmdldCwgbWVzZywgbWVzZ0NCLCBjbGllbnREYXRhKQogICAgIHZvaWQJKnRhcmdldDsJLyogaWdub3JlZCwgYWx3YXlzIHVzZSBzX3RleHRBcmVhICovCmRpZmYgLS1naXQgYS9zcmMvaWZfbXpzY2guYyBiL3NyYy9pZl9tenNjaC5jCmluZGV4IGM2N2M0NmQuLmRkZTMxZWIgMTAwNjQ0Ci0tLSBhL3NyYy9pZl9tenNjaC5jCisrKyBiL3NyYy9pZl9tenNjaC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfZXZhbCkoU2NoZW1lX09iamVjdCAqb2JqLCBTY2hlbWVfRW52ICplbnYpOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9ldmFsX3N0cmluZykoY29uc3QgY2hhciAqc3RyLAogCVNjaGVtZV9FbnYgKmVudik7Ci1zdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX2V2YWxfc3RyaW5nX2FsbCkoY29uc3QgY2hhciAqc3RyLCAKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfZXZhbF9zdHJpbmdfYWxsKShjb25zdCBjaGFyICpzdHIsCiAJU2NoZW1lX0VudiAqZW52LCBpbnQgYWxsKTsKIHN0YXRpYyB2b2lkICgqZGxsX3NjaGVtZV9maW5pc2hfcHJpbWl0aXZlX21vZHVsZSkoU2NoZW1lX0VudiAqZW52KTsKICMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA8IDI5OQpAQCAtMjUzLDcgKzI1Myw3IEBACiBzdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX21ha2VfaW50ZWdlcl92YWx1ZSkobG9uZyBpKTsKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfbWFrZV9uYW1lc3BhY2UpKGludCBhcmdjLAogCVNjaGVtZV9PYmplY3QgKmFyZ3ZbXSk7Ci1zdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX21ha2VfcGFpcikoU2NoZW1lX09iamVjdCAqY2FyLCAKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfbWFrZV9wYWlyKShTY2hlbWVfT2JqZWN0ICpjYXIsCiAJU2NoZW1lX09iamVjdCAqY2RyKTsKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfbWFrZV9wcmltX3dfYXJpdHkpKFNjaGVtZV9QcmltICpwcmltLAogCWNvbnN0IGNoYXIgKm5hbWUsIG16c2hvcnQgbWluYSwgbXpzaG9ydCBtYXhhKTsKQEAgLTI5NCw3ICsyOTQsNyBAQAogc3RhdGljIHZvaWQgKCpkbGxfc2NoZW1lX3dyb25nX3R5cGUpKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmV4cGVjdGVkLAogCWludCB3aGljaCwgaW50IGFyZ2MsIFNjaGVtZV9PYmplY3QgKiphcmd2KTsKICMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA+PSAyOTkKLXN0YXRpYyB2b2lkICgqZGxsX3NjaGVtZV9zZXRfcGFyYW0pKFNjaGVtZV9Db25maWcgKmMsIGludCBwb3MsIAorc3RhdGljIHZvaWQgKCpkbGxfc2NoZW1lX3NldF9wYXJhbSkoU2NoZW1lX0NvbmZpZyAqYywgaW50IHBvcywKIAlTY2hlbWVfT2JqZWN0ICpvKTsKIHN0YXRpYyBTY2hlbWVfQ29uZmlnICooKmRsbF9zY2hlbWVfY3VycmVudF9jb25maWcpKHZvaWQpOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9jaGFyX3N0cmluZ190b19ieXRlX3N0cmluZykKQEAgLTQxMSw3ICs0MTEsNyBAQAogICAgIHsic2NoZW1lX2N1cnJlbnRfdGhyZWFkIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfY3VycmVudF90aHJlYWRfcHRyfSwKICAgICB7InNjaGVtZV9jb25zb2xlX3ByaW50ZiIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2NvbnNvbGVfcHJpbnRmX3B0cn0sCiAgICAgeyJzY2hlbWVfY29uc29sZV9vdXRwdXQiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9jb25zb2xlX291dHB1dF9wdHJ9LAotICAgIHsic2NoZW1lX25vdGlmeV9tdWx0aXRocmVhZCIsIAorICAgIHsic2NoZW1lX25vdGlmeV9tdWx0aXRocmVhZCIsCiAJKHZvaWQgKiopJmRsbF9zY2hlbWVfbm90aWZ5X211bHRpdGhyZWFkX3B0cn0sCiAgICAgeyJzY2hlbWVfYWRkX2dsb2JhbCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2FkZF9nbG9iYWx9LAogICAgIHsic2NoZW1lX2FkZF9nbG9iYWxfc3ltYm9sIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfYWRkX2dsb2JhbF9zeW1ib2x9LApAQCAtNDI0LDcgKzQyNCw3IEBACiAgICAgeyJzY2hlbWVfY2hlY2tfdGhyZWFkcyIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2NoZWNrX3RocmVhZHN9LAogICAgIHsic2NoZW1lX2Nsb3NlX2lucHV0X3BvcnQiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9jbG9zZV9pbnB1dF9wb3J0fSwKICAgICB7InNjaGVtZV9jb3VudF9saW5lcyIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2NvdW50X2xpbmVzfSwKLSAgICB7InNjaGVtZV9jdXJyZW50X2NvbnRpbnVhdGlvbl9tYXJrcyIsIAorICAgIHsic2NoZW1lX2N1cnJlbnRfY29udGludWF0aW9uX21hcmtzIiwKIAkodm9pZCAqKikmZGxsX3NjaGVtZV9jdXJyZW50X2NvbnRpbnVhdGlvbl9tYXJrc30sCiAgICAgeyJzY2hlbWVfZGlzcGxheSIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2Rpc3BsYXl9LAogICAgIHsic2NoZW1lX2Rpc3BsYXlfdG9fc3RyaW5nIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZGlzcGxheV90b19zdHJpbmd9LApAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAgeyJzY2hlbWVfZXZhbCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2V2YWx9LAogICAgIHsic2NoZW1lX2V2YWxfc3RyaW5nIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZXZhbF9zdHJpbmd9LAogICAgIHsic2NoZW1lX2V2YWxfc3RyaW5nX2FsbCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2V2YWxfc3RyaW5nX2FsbH0sCi0gICAgeyJzY2hlbWVfZmluaXNoX3ByaW1pdGl2ZV9tb2R1bGUiLCAKKyAgICB7InNjaGVtZV9maW5pc2hfcHJpbWl0aXZlX21vZHVsZSIsCiAJKHZvaWQgKiopJmRsbF9zY2hlbWVfZmluaXNoX3ByaW1pdGl2ZV9tb2R1bGV9LAogIyBpZiBNWlNDSEVNRV9WRVJTSU9OX01BSk9SIDwgMjk5CiAgICAgeyJzY2hlbWVfZm9ybWF0IiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZm9ybWF0fSwKQEAgLTQ0NCwxNSArNDQ0LDE1IEBACiAjZW5kaWYKICAgICB7InNjaGVtZV9nY19wdHJfb2siLCAodm9pZCAqKikmZGxsX3NjaGVtZV9nY19wdHJfb2t9LAogIyBpZiBNWlNDSEVNRV9WRVJTSU9OX01BSk9SIDwgMjk5Ci0gICAgeyJzY2hlbWVfZ2V0X3NpemVkX3N0cmluZ19vdXRwdXQiLCAKKyAgICB7InNjaGVtZV9nZXRfc2l6ZWRfc3RyaW5nX291dHB1dCIsCiAJKHZvaWQgKiopJmRsbF9zY2hlbWVfZ2V0X3NpemVkX3N0cmluZ19vdXRwdXR9LAogIyBlbHNlCi0gICAgeyJzY2hlbWVfZ2V0X3NpemVkX2J5dGVfc3RyaW5nX291dHB1dCIsIAorICAgIHsic2NoZW1lX2dldF9zaXplZF9ieXRlX3N0cmluZ19vdXRwdXQiLAogCSh2b2lkICoqKSZkbGxfc2NoZW1lX2dldF9zaXplZF9ieXRlX3N0cmluZ19vdXRwdXR9LAogI2VuZGlmCiAgICAgeyJzY2hlbWVfaW50ZXJuX3N5bWJvbCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2ludGVybl9zeW1ib2x9LAogICAgIHsic2NoZW1lX2xvb2t1cF9nbG9iYWwiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9sb29rdXBfZ2xvYmFsfSwKLSAgICB7InNjaGVtZV9tYWtlX2Nsb3NlZF9wcmltX3dfYXJpdHkiLCAKKyAgICB7InNjaGVtZV9tYWtlX2Nsb3NlZF9wcmltX3dfYXJpdHkiLAogCSh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2VfY2xvc2VkX3ByaW1fd19hcml0eX0sCiAgICAgeyJzY2hlbWVfbWFrZV9pbnRlZ2VyX3ZhbHVlIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfbWFrZV9pbnRlZ2VyX3ZhbHVlfSwKICAgICB7InNjaGVtZV9tYWtlX25hbWVzcGFjZSIsICh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2VfbmFtZXNwYWNlfSwKQEAgLTQ2MCwxNCArNDYwLDE0IEBACiAgICAgeyJzY2hlbWVfbWFrZV9wcmltX3dfYXJpdHkiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9tYWtlX3ByaW1fd19hcml0eX0sCiAjIGlmIE1aU0NIRU1FX1ZFUlNJT05fTUFKT1IgPCAyOTkKICAgICB7InNjaGVtZV9tYWtlX3N0cmluZyIsICh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2Vfc3RyaW5nfSwKLSAgICB7InNjaGVtZV9tYWtlX3N0cmluZ19vdXRwdXRfcG9ydCIsIAorICAgIHsic2NoZW1lX21ha2Vfc3RyaW5nX291dHB1dF9wb3J0IiwKIAkodm9pZCAqKikmZGxsX3NjaGVtZV9tYWtlX3N0cmluZ19vdXRwdXRfcG9ydH0sCiAjIGVsc2UKICAgICB7InNjaGVtZV9tYWtlX2J5dGVfc3RyaW5nIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfbWFrZV9ieXRlX3N0cmluZ30sCi0gICAgeyJzY2hlbWVfbWFrZV9ieXRlX3N0cmluZ19vdXRwdXRfcG9ydCIsIAorICAgIHsic2NoZW1lX21ha2VfYnl0ZV9zdHJpbmdfb3V0cHV0X3BvcnQiLAogCSh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2VfYnl0ZV9zdHJpbmdfb3V0cHV0X3BvcnR9LAogIyBlbmRpZgotICAgIHsic2NoZW1lX21ha2Vfc3RydWN0X2luc3RhbmNlIiwgCisgICAgeyJzY2hlbWVfbWFrZV9zdHJ1Y3RfaW5zdGFuY2UiLAogCSh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2Vfc3RydWN0X2luc3RhbmNlfSwKICAgICB7InNjaGVtZV9tYWtlX3N0cnVjdF9uYW1lcyIsICh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2Vfc3RydWN0X25hbWVzfSwKICAgICB7InNjaGVtZV9tYWtlX3N0cnVjdF90eXBlIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfbWFrZV9zdHJ1Y3RfdHlwZX0sCkBAIC01MjUsNyArNTI1LDcgQEAKIAogICAgIGZvciAodGh1bmsgPSBtenNjaF9pbXBvcnRzOyB0aHVuay0+bmFtZTsgdGh1bmsrKykKICAgICB7Ci0JaWYgKCgqdGh1bmstPnB0ciA9IAorCWlmICgoKnRodW5rLT5wdHIgPQogCQkgICAgKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoTXpTY2gsIHRodW5rLT5uYW1lKSkgPT0gTlVMTCkKIAl7CiAJICAgIEZyZWVMaWJyYXJ5KGhNelNjaCk7CkBAIC01MzksNyArNTM5LDcgQEAKICAgICB9CiAgICAgZm9yICh0aHVuayA9IG16Z2NfaW1wb3J0czsgdGh1bmstPm5hbWU7IHRodW5rKyspCiAgICAgewotCWlmICgoKnRodW5rLT5wdHIgPSAKKwlpZiAoKCp0aHVuay0+cHRyID0KIAkJICAgICh2b2lkICopR2V0UHJvY0FkZHJlc3MoaE16R0MsIHRodW5rLT5uYW1lKSkgPT0gTlVMTCkKIAl7CiAJICAgIEZyZWVMaWJyYXJ5KGhNelNjaCk7CkBAIC0yNjU1LDcgKzI2NTUsNyBAQAogICAgIHNjaGVtZV9hZGRfZ2xvYmFsKCJnbG9iYWwtbmFtZXNwYWNlIiwgKFNjaGVtZV9PYmplY3QgKillbnZpcm9ubWVudCwgbW9kKTsKICAgICBzY2hlbWVfZmluaXNoX3ByaW1pdGl2ZV9tb2R1bGUobW9kKTsKIH0KLSAgICAKKwogI2lmZGVmIEhBVkVfU0FOREJPWAogc3RhdGljIFNjaGVtZV9PYmplY3QgKk1fd3JpdGUgPSBOVUxMOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKk1fcmVhZCA9IE5VTEw7CkBAIC0yNjY5LDcgKzI2NjksNyBAQAogCXJhaXNlX3ZpbV9leG4oXygibm90IGFsbG93ZWQgaW4gdGhlIFZpbSBzYW5kYm94IikpOwogfQogCi0vKiBzZWN1cml0eSBndWFyZHMgdG8gZm9yY2UgVmltJ3Mgc2FuZGJveCByZXN0cmljdGlvbnMgb24gTXpTY2hlbWUgbGV2ZWwgKi8gCisvKiBzZWN1cml0eSBndWFyZHMgdG8gZm9yY2UgVmltJ3Mgc2FuZGJveCByZXN0cmljdGlvbnMgb24gTXpTY2hlbWUgbGV2ZWwgKi8KICAgICBzdGF0aWMgU2NoZW1lX09iamVjdCAqCiBzYW5kYm94X2ZpbGVfZ3VhcmQoaW50IGFyZ2MsIFNjaGVtZV9PYmplY3QgKiphcmd2KQogewpkaWZmIC0tZ2l0IGEvc3JjL21ieXRlLmMgYi9zcmMvbWJ5dGUuYwppbmRleCBiNzNiMDk1Li5lZjA5MWUzIDEwMDY0NAotLS0gYS9zcmMvbWJ5dGUuYworKysgYi9zcmMvbWJ5dGUuYwpAQCAtMzE3OCwxMSArMzE3OCwxMSBAQAogCXJldHVybiBGQUxTRTsKICAgICB9CiAKLSAgICAqKChGQVJQUk9DKikmaWNvbnYpCQk9IEdldFByb2NBZGRyZXNzKGhJY29udkRMTCwgImxpYmljb252Iik7Ci0gICAgKigoRkFSUFJPQyopJmljb252X29wZW4pCT0gR2V0UHJvY0FkZHJlc3MoaEljb252RExMLCAibGliaWNvbnZfb3BlbiIpOwotICAgICooKEZBUlBST0MqKSZpY29udl9jbG9zZSkJPSBHZXRQcm9jQWRkcmVzcyhoSWNvbnZETEwsICJsaWJpY29udl9jbG9zZSIpOwotICAgICooKEZBUlBST0MqKSZpY29udmN0bCkJPSBHZXRQcm9jQWRkcmVzcyhoSWNvbnZETEwsICJsaWJpY29udmN0bCIpOwotICAgICooKEZBUlBST0MqKSZpY29udl9lcnJubykJPSBHZXRQcm9jQWRkcmVzcyhoTXN2Y3J0RExMLCAiX2Vycm5vIik7CisgICAgaWNvbnYJPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKGhJY29udkRMTCwgImxpYmljb252Iik7CisgICAgaWNvbnZfb3Blbgk9ICh2b2lkICopR2V0UHJvY0FkZHJlc3MoaEljb252RExMLCAibGliaWNvbnZfb3BlbiIpOworICAgIGljb252X2Nsb3NlCT0gKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoSWNvbnZETEwsICJsaWJpY29udl9jbG9zZSIpOworICAgIGljb252Y3RsCT0gKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoSWNvbnZETEwsICJsaWJpY29udmN0bCIpOworICAgIGljb252X2Vycm5vCT0gKHZvaWQgKilHZXRQcm9jQWRkcmVzcyhoTXN2Y3J0RExMLCAiX2Vycm5vIik7CiAgICAgaWYgKGljb252ID09IE5VTEwgfHwgaWNvbnZfb3BlbiA9PSBOVUxMIHx8IGljb252X2Nsb3NlID09IE5VTEwKIAkgICAgfHwgaWNvbnZjdGwgPT0gTlVMTCB8fCBpY29udl9lcnJubyA9PSBOVUxMKQogICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9taXNjMS5jIGIvc3JjL21pc2MxLmMKaW5kZXggNzIwOWExYS4uMzBkNzY5NiAxMDA2NDQKLS0tIGEvc3JjL21pc2MxLmMKKysrIGIvc3JjL21pc2MxLmMKQEAgLTI0NjEsNyArMjQ2MSw2IEBACiAjZW5kaWYKICAgICB9CiAgICAgKytjdXJidWYtPmJfY2hhbmdlZHRpY2s7Ci0gICAgKytnbG9iYWxfY2hhbmdlZHRpY2s7CiB9CiAKIHN0YXRpYyB2b2lkIGNoYW5nZWRPbmVsaW5lIF9fQVJHUygoYnVmX1QgKmJ1ZiwgbGluZW5yX1QgbG51bSkpOwpAQCAtMjg1MSw3ICsyODUwLDYgQEAKICNlbmRpZgogICAgIH0KICAgICArK2J1Zi0+Yl9jaGFuZ2VkdGljazsKLSAgICArK2dsb2JhbF9jaGFuZ2VkdGljazsKICNpZmRlZiBGRUFUX05FVEJFQU5TX0lOVEcKICAgICBuZXRiZWFuc191bm1vZGlmaWVkKGJ1Zik7CiAjZW5kaWYKQEAgLTMxNDQsOSArMzE0MiwxOCBAQAogcHJvbXB0X2Zvcl9udW1iZXIoKQogewogICAgIGludAkJaTsKKyAgICBpbnQJCXNhdmVfY21kbGluZV9yb3c7CisgICAgaW50CQlzYXZlX1N0YXRlOwogCiAgICAgLyogV2hlbiB1c2luZyAiOnNpbGVudCIgYXNzdW1lIHRoYXQgPENSPiB3YXMgZW50ZXJlZC4gKi8KICAgICBNU0dfUFVUUyhfKCJDaG9pY2UgbnVtYmVyICg8RW50ZXI+IGNhbmNlbHMpOiAiKSk7CisKKyAgICAvKiBTZXQgdGhlIHN0YXRlIHN1Y2ggdGhhdCB0ZXh0IGNhbiBiZSBzZWxlY3RlZC9jb3BpZWQvcGFzdGVkLiAqLworICAgIHNhdmVfY21kbGluZV9yb3cgPSBjbWRsaW5lX3JvdzsKKyAgICBjbWRsaW5lX3JvdyA9IFJvd3MgLSAxOworICAgIHNhdmVfU3RhdGUgPSBTdGF0ZTsKKyAgICBTdGF0ZSA9IENNRExJTkU7CisKICAgICBpID0gZ2V0X251bWJlcihUUlVFKTsKICAgICBpZiAoS2V5VHlwZWQpCQkvKiBkb24ndCBjYWxsIHdhaXRfcmV0dXJuKCkgbm93ICovCiAgICAgewpAQCAtMzE1NSw2ICszMTYyLDEwIEBACiAJbmVlZF93YWl0X3JldHVybiA9IEZBTFNFOwogCW1zZ19kaWRhbnkgPSBGQUxTRTsKICAgICB9CisgICAgZWxzZQorCWNtZGxpbmVfcm93ID0gc2F2ZV9jbWRsaW5lX3JvdzsKKyAgICBTdGF0ZSA9IHNhdmVfU3RhdGU7CisKICAgICByZXR1cm4gaTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL25ldGJlYW5zLmMgYi9zcmMvbmV0YmVhbnMuYwppbmRleCBmNmZiNTJjLi5iZWJmYTVlIDEwMDY0NAotLS0gYS9zcmMvbmV0YmVhbnMuYworKysgYi9zcmMvbmV0YmVhbnMuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAjZW5kaWYgLyogRkVBVF9HVUlfR1RLICovCiAKICNpZiBkZWZpbmVkKEZFQVRfR1VJX1czMikgfHwgZGVmaW5lZChQUk9UTykKLSAgICB2b2lkCisgICAgc3RhdGljIHZvaWQKIG5ldGJlYW5zX3czMl9jb25uZWN0KHZvaWQpCiB7CiAgICAgbmV0YmVhbnNfY29ubmVjdCgpOwpAQCAtNzQyLDcgKzc0Miw3IEBACiAJbmJkZWJ1ZygoIm1lc3NhZ2VGcm9tTmV0YmVhbnM6IEVycm9yIGluIHJlYWQoKSBmcm9tIHNvY2tldFxuIikpOwogCWlmIChsZW4gPCAwKQogCSAgICBQRVJST1IoXygicmVhZCBmcm9tIE5ldGJlYW5zIHNvY2tldCIpKTsKLQlyZXR1cm47IC8qIGRvbid0IHRyeSB0byBwYXJzZSBpdCAqLzsKKwlyZXR1cm47IC8qIGRvbid0IHRyeSB0byBwYXJzZSBpdCAqLwogICAgIH0KIAogICAgIC8qIFBhcnNlIHRoZSBtZXNzYWdlcywgYnV0IGF2b2lkIHJlY3Vyc2lvbi4gKi8KQEAgLTg2Myw4ICs4NjMsOCBAQAogdHlwZWRlZiBzdHJ1Y3QgbmJidWZfc3RydWN0IG5iYnVmX1Q7CiAKIHN0YXRpYyBuYmJ1Zl9UICpidWZfbGlzdCA9IDA7Ci1pbnQgYnVmX2xpc3Rfc2l6ZSA9IDA7CS8qIHNpemUgb2YgYnVmX2xpc3QgKi8KLWludCBidWZfbGlzdF91c2VkID0gMDsJLyogbnIgb2YgZW50cmllcyBpbiBidWZfbGlzdCBhY3R1YWxseSBpbiB1c2UgKi8KK3N0YXRpYyBpbnQgYnVmX2xpc3Rfc2l6ZSA9IDA7CS8qIHNpemUgb2YgYnVmX2xpc3QgKi8KK3N0YXRpYyBpbnQgYnVmX2xpc3RfdXNlZCA9IDA7CS8qIG5yIG9mIGVudHJpZXMgaW4gYnVmX2xpc3QgYWN0dWFsbHkgaW4gdXNlICovCiAKIHN0YXRpYyBjaGFyICoqZ2xvYmFsc2lnbm1hcDsKIHN0YXRpYyBpbnQgZ2xvYmFsc2lnbm1hcGxlbjsKZGlmZiAtLWdpdCBhL3NyYy9ub3JtYWwuYyBiL3NyYy9ub3JtYWwuYwppbmRleCBmYTVlMzU1Li5jYTI2YmIzIDEwMDY0NAotLS0gYS9zcmMvbm9ybWFsLmMKKysrIGIvc3JjL25vcm1hbC5jCkBAIC04MSw5ICs4MSw2IEBACiBzdGF0aWMgdm9pZAludl9oYXQgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CiBzdGF0aWMgdm9pZAludl9aZXQgX19BUkdTKChjbWRhcmdfVCAqY2FwKSk7CiBzdGF0aWMgdm9pZAludl9pZGVudCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKLSNpZmRlZiBGRUFUX1ZJU1VBTAotc3RhdGljIGludAlnZXRfdmlzdWFsX3RleHQgX19BUkdTKChjbWRhcmdfVCAqY2FwLCBjaGFyX3UgKipwcCwgaW50ICpsZW5wKSk7Ci0jZW5kaWYKIHN0YXRpYyB2b2lkCW52X3RhZ3BvcCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKIHN0YXRpYyB2b2lkCW52X3Njcm9sbCBfX0FSR1MoKGNtZGFyZ19UICpjYXApKTsKIHN0YXRpYyB2b2lkCW52X3JpZ2h0IF9fQVJHUygoY21kYXJnX1QgKmNhcCkpOwpAQCAtNTE2NywxMiArNTE2NCwxMiBAQAogICAgIHZpbV9mcmVlKGJ1Zik7CiB9CiAKLSNpZmRlZiBGRUFUX1ZJU1VBTAorI2lmIGRlZmluZWQoRkVBVF9WSVNVQUwpIHx8IGRlZmluZWQoUFJPVE8pCiAvKgogICogR2V0IHZpc3VhbGx5IHNlbGVjdGVkIHRleHQsIHdpdGhpbiBvbmUgbGluZSBvbmx5LgogICogUmV0dXJucyBGQUlMIGlmIG1vcmUgdGhhbiBvbmUgbGluZSBzZWxlY3RlZC4KICAqLwotICAgIHN0YXRpYyBpbnQKKyAgICBpbnQKIGdldF92aXN1YWxfdGV4dChjYXAsIHBwLCBsZW5wKQogICAgIGNtZGFyZ19UCSpjYXA7CiAgICAgY2hhcl91CSoqcHA7CSAgICAvKiByZXR1cm46IHN0YXJ0IG9mIHNlbGVjdGVkIHRleHQgKi8KQEAgLTUxODIsNyArNTE3OSw4IEBACiAJdW5hZGp1c3RfZm9yX3NlbCgpOwogICAgIGlmIChWSXN1YWwubG51bSAhPSBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCiAgICAgewotCWNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKKwlpZiAoY2FwICE9IE5VTEwpCisJICAgIGNsZWFyb3BiZWVwKGNhcC0+b2FwKTsKIAlyZXR1cm4gRkFJTDsKICAgICB9CiAgICAgaWYgKFZJc3VhbF9tb2RlID09ICdWJykKQEAgLTU1OTIsMjQgKzU1OTAsNyBAQAogICAgIH0KICNlbmRpZgogCi0jIGlmZGVmIEZFQVRfVklTVUFMCi0gICAgLyoKLSAgICAgKiBJbiBWaXN1YWwgbW9kZSwgdXNlIHRoZSBzZWxlY3RlZCB0ZXh0IGFzIGEgZmlsZSBuYW1lLgotICAgICAqIERvbid0IGFsbG93IHNlbGVjdGlvbiBhY3Jvc3MgbXVsdGlwbGUgbGluZXMuCi0gICAgICovCi0gICAgaWYgKFZJc3VhbF9hY3RpdmUpCi0gICAgewotCWludAlsZW47Ci0KLQlpZiAoZ2V0X3Zpc3VhbF90ZXh0KGNhcCwgJnB0ciwgJmxlbikgPT0gRkFJTCkKLQkgICAgcmV0dXJuOwotCXB0ciA9IGZpbmRfZmlsZV9uYW1lX2luX3BhdGgocHRyLCBsZW4sCi0JICAgICAgIEZOQU1FX01FU1N8Rk5BTUVfRVhQfEZOQU1FX1JFTCwgY2FwLT5jb3VudDEsIGN1cmJ1Zi0+Yl9mZm5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0jIGVuZGlmCi0JcHRyID0gZmlsZV9uYW1lX2F0X2N1cnNvcihGTkFNRV9NRVNTfEZOQU1FX0hZUHxGTkFNRV9FWFB8Rk5BTUVfUkVMLAotCQkJCQkJCQkgY2FwLT5jb3VudDEpOworICAgIHB0ciA9IGdyYWJfZmlsZV9uYW1lKGNhcC0+Y291bnQxKTsKIAogICAgIGlmIChwdHIgIT0gTlVMTCkKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvb3B0aW9uLmMgYi9zcmMvb3B0aW9uLmMKaW5kZXggYzBlYTA5NC4uOTdjMGFhNSAxMDA2NDQKLS0tIGEvc3JjL29wdGlvbi5jCisrKyBiL3NyYy9vcHRpb24uYwpAQCAtMjA0OSw2ICsyMDQ5LDE1IEBACiAJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQogI2VuZGlmCiAJCQkgICAgfSwKKyAgICB7InNwZWxsc3VnZ2VzdCIsICJzcHMiLCBQX1NUUklOR3xQX1ZJX0RFRiwKKyNpZmRlZiBGRUFUX1NZTl9ITAorCQkJICAgIChjaGFyX3UgKikmcF9zcHMsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikiYmVzdCIsIChjaGFyX3UgKikwTH0KKyNlbHNlCisJCQkgICAgKGNoYXJfdSAqKU5VTEwsIFBWX05PTkUsCisJCQkgICAgeyhjaGFyX3UgKikwTCwgKGNoYXJfdSAqKTBMfQorI2VuZGlmCisgICAgfSwKICAgICB7InNwbGl0YmVsb3ciLCAgInNiIiwgICBQX0JPT0x8UF9WSV9ERUYsCiAjaWZkZWYgRkVBVF9XSU5ET1dTCiAJCQkgICAgKGNoYXJfdSAqKSZwX3NiLCBQVl9OT05FLApAQCAtNDU1Miw2ICs0NTYxLDkgQEAKICNpZiBkZWZpbmVkKEZFQVRfTU9VU0UpICYmIChkZWZpbmVkKFVOSVgpIHx8IGRlZmluZWQoVk1TKSkKICAgICAodm9pZClvcHRfc3RyaW5nc19mbGFncyhwX3R0eW0sIHBfdHR5bV92YWx1ZXMsICZ0dHltX2ZsYWdzLCBGQUxTRSk7CiAjZW5kaWYKKyNpZmRlZiBGRUFUX1NZTl9ITAorICAgICh2b2lkKW9wdF9zdHJpbmdzX2ZsYWdzKHBfc3BzLCBwX3Nwc192YWx1ZXMsICZzcHNfZmxhZ3MsIEZBTFNFKTsKKyNlbmRpZgogI2lmIGRlZmluZWQoRkVBVF9UT09MQkFSKSAmJiAhZGVmaW5lZChGRUFUX0dVSV9XMzIpCiAgICAgKHZvaWQpb3B0X3N0cmluZ3NfZmxhZ3MocF90b29sYmFyLCBwX3Rvb2xiYXJfdmFsdWVzLCAmdG9vbGJhcl9mbGFncywgVFJVRSk7CiAjZW5kaWYKQEAgLTU3MTAsNiArNTcyMiwxMiBAQAogCQl9CiAJfQogICAgIH0KKyAgICAvKiAnc3BlbGxzdWdnZXN0JyAqLworICAgIGVsc2UgaWYgKHZhcnAgPT0gJnBfc3BzKQorICAgIHsKKwlpZiAob3B0X3N0cmluZ3NfZmxhZ3MocF9zcHMsIHBfc3BzX3ZhbHVlcywgJnNwc19mbGFncywgRkFMU0UpICE9IE9LKQorCSAgICBlcnJtc2cgPSBlX2ludmFyZzsKKyAgICB9CiAjZW5kaWYKIAogI2lmZGVmIEZFQVRfQVVUT0NNRApkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5oIGIvc3JjL29wdGlvbi5oCmluZGV4IGQ1MmYzYzYuLjBiZTRhYzMgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRpb24uaAorKysgYi9zcmMvb3B0aW9uLmgKQEAgLTcwNiw2ICs3MDYsMTYgQEAKICNpZmRlZiBGRUFUX1dJTkRPV1MKIEVYVEVSTiBpbnQJcF9zYjsJCS8qICdzcGxpdGJlbG93JyAqLwogI2VuZGlmCisjaWZkZWYgRkVBVF9TWU5fSEwKK0VYVEVSTiBjaGFyX3UJKnBfc3BzOwkJLyogJ3NwZWxsc3VnZ2VzdCcgKi8KK0VYVEVSTiB1bnNpZ25lZCBzcHNfZmxhZ3M7CisjIGlmZGVmIElOX09QVElPTl9DCitzdGF0aWMgY2hhciAqKHBfc3BzX3ZhbHVlc1tdKSA9IHsiYmVzdCIsICJmYXN0IiwgImRvdWJsZSIsIE5VTEx9OworIyBlbmRpZgorIyBkZWZpbmUgU1BTX0JFU1QJCTB4MDEKKyMgZGVmaW5lIFNQU19GQVNUCQkweDAyCisjIGRlZmluZSBTUFNfRE9VQkxFCQkweDA0CisjZW5kaWYKICNpZmRlZiBGRUFUX1ZFUlRTUExJVAogRVhURVJOIGludAlwX3NwcjsJCS8qICdzcGxpdHJpZ2h0JyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3Nfd2luMzIuYyBiL3NyYy9vc193aW4zMi5jCmluZGV4IDgyYTNjZTAuLjMxODRlMmUgMTAwNjQ0Ci0tLSBhL3NyYy9vc193aW4zMi5jCisrKyBiL3NyYy9vc193aW4zMi5jCkBAIC0xMzI1LDYgKzEzMjUsNyBAQAogICogSWYgdGltZSA9PSAtMSwgd2FpdCBmb3JldmVyIGZvciBjaGFyYWN0ZXJzLgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIGJ1Zi4KICAqLworLypBUkdTVVNFRCovCiAgICAgaW50CiBtY2hfaW5jaGFyKAogICAgIGNoYXJfdQkqYnVmLApAQCAtNDE5MCw2ICs0MTkxLDcgQEAKICAqIEhvdyBtdWNoIG1lbW9yeSBpcyBhdmFpbGFibGU/CiAgKiBSZXR1cm4gc3VtIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCBhbmQgcGFnZSBmaWxlIG1lbW9yeS4KICAqLworLypBUkdTVVNFRCovCiAgICAgbG9uZ191CiBtY2hfYXZhaWxfbWVtKGludCBzcGVjaWFsKQogewpAQCAtNDg2Nyw3ICs0ODY5LDcgQEAKIC8qCiAgKiBUaGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbiBVQ1MyCiAgKi8KLXN0YXRpYyBEV09SRAluQXJnc1cgPSAwOworc3RhdGljIGludAluQXJnc1cgPSAwOwogc3RhdGljIExQV1NUUgkqQXJnbGlzdFcgPSBOVUxMOwogc3RhdGljIGludAlnbG9iYWxfYXJnYyA9IDA7CiBzdGF0aWMgY2hhcgkqKmdsb2JhbF9hcmd2OwpAQCAtNDk5NCw3ICs0OTk2LDcgQEAKICAgICAgKiAtIHRoZSBmaWxlIG5hbWUgYXJndW1lbnRzIG11c3QgaGF2ZSBiZWVuIGxvY2F0ZWQuCiAgICAgICogLSB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudCBsaXN0IHdhc24ndCBjaGFuZ2VkIGJ5IHRoZSB1c2VyLgogICAgICAqLwotICAgIGlmIChnbG9iYWxfYXJnYyAhPSAoaW50KW5BcmdzVworICAgIGlmIChnbG9iYWxfYXJnYyAhPSBuQXJnc1cKIAkgICAgfHwgQXJnbGlzdFcgPT0gTlVMTAogCSAgICB8fCB1c2VkX2ZpbGVfaW5kZXhlcyA9PSBOVUxMCiAJICAgIHx8IHVzZWRfZmlsZV9jb3VudCA9PSAwCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZ3VpX2d0ay5wcm8gYi9zcmMvcHJvdG8vZ3VpX2d0ay5wcm8KaW5kZXggYWZlMzhkYy4uODE4ZDEyYyAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL2d1aV9ndGsucHJvCisrKyBiL3NyYy9wcm90by9ndWlfZ3RrLnBybwpAQCAtMjAsNSArMjAsNCBAQAogdm9pZCBndWlfbWNoX3JlcGxhY2VfZGlhbG9nIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiB2b2lkIGd1aV9ndGtfc3luY2hfZm9udHMgX19BUkdTKCh2b2lkKSk7CiB2b2lkIGV4X2hlbHBmaW5kIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Ci12b2lkIGd1aV9ndGtfcG9zaXRpb25faW5fcGFyZW50IF9fQVJHUygoR3RrV2lkZ2V0ICpwYXJlbnQsIEd0a1dpZGdldCAqY2hpbGQsIGd1aV93aW5fcG9zX1Qgd2hlcmUpKTsKIC8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL25ldGJlYW5zLnBybyBiL3NyYy9wcm90by9uZXRiZWFucy5wcm8KaW5kZXggZjZiN2Q3ZC4uNzVkMDE0OSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL25ldGJlYW5zLnBybworKysgYi9zcmMvcHJvdG8vbmV0YmVhbnMucHJvCkBAIC0xLDUgKzEsNCBAQAogLyogbmV0YmVhbnMuYyAqLwotdm9pZCBuZXRiZWFuc193MzJfY29ubmVjdCBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgbWVzc2FnZUZyb21OZXRiZWFuc1czMiBfX0FSR1MoKHZvaWQpKTsKIGludCBpc05ldGJlYW5zQnVmZmVyIF9fQVJHUygoYnVmX1QgKmJ1ZnApKTsKIGludCBpc05ldGJlYW5zTW9kaWZpZWQgX19BUkdTKChidWZfVCAqYnVmcCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL25vcm1hbC5wcm8gYi9zcmMvcHJvdG8vbm9ybWFsLnBybwppbmRleCBmNWUzMzJiLi43NDM2NGUzIDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vbm9ybWFsLnBybworKysgYi9zcmMvcHJvdG8vbm9ybWFsLnBybwpAQCAtMTgsNiArMTgsNyBAQAogdm9pZCBjaGVja19zY3JvbGxiaW5kIF9fQVJHUygobGluZW5yX1QgdG9wbGluZV9kaWZmLCBsb25nIGxlZnRjb2xfZGlmZikpOwogdm9pZCBzY3JvbGxfcmVkcmF3IF9fQVJHUygoaW50IHVwLCBsb25nIGNvdW50KSk7CiB2b2lkIGRvX252X2lkZW50IF9fQVJHUygoaW50IGMxLCBpbnQgYzIpKTsKK2ludCBnZXRfdmlzdWFsX3RleHQgX19BUkdTKChjbWRhcmdfVCAqY2FwLCBjaGFyX3UgKipwcCwgaW50ICpsZW5wKSk7CiB2b2lkIHN0YXJ0X3NlbGVjdGlvbiBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgbWF5X3N0YXJ0X3NlbGVjdCBfX0FSR1MoKGludCBjKSk7CiAvKiB2aW06IHNldCBmdD1jIDogKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9zcGVsbC5wcm8gYi9zcmMvcHJvdG8vc3BlbGwucHJvCmluZGV4IGM5MzJiMWYuLjE1YTY4YTYgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9zcGVsbC5wcm8KKysrIGIvc3JjL3Byb3RvL3NwZWxsLnBybwpAQCAtOSw0ICs5LDUgQEAKIHZvaWQgc3BlbGxfYWRkX3dvcmQgX19BUkdTKChjaGFyX3UgKndvcmQsIGludCBsZW4sIGludCBiYWQpKTsKIHZvaWQgaW5pdF9zcGVsbF9jaGFydGFiIF9fQVJHUygodm9pZCkpOwogdm9pZCBzcGVsbF9zdWdnZXN0IF9fQVJHUygodm9pZCkpOwordm9pZCBzcGVsbF9zdWdnZXN0X2xpc3QgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBjaGFyX3UgKndvcmQsIGludCBtYXhjb3VudCkpOwogLyogdmltOiBzZXQgZnQ9YyA6ICovCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vd2luZG93LnBybyBiL3NyYy9wcm90by93aW5kb3cucHJvCmluZGV4IDI0M2JkN2IuLmYwMWVlZTAgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by93aW5kb3cucHJvCisrKyBiL3NyYy9wcm90by93aW5kb3cucHJvCkBAIC0zMSw2ICszMSw3IEBACiB2b2lkIHdpbl9jb21wX3Njcm9sbCBfX0FSR1MoKHdpbl9UICp3cCkpOwogdm9pZCBjb21tYW5kX2hlaWdodCBfX0FSR1MoKGxvbmcgb2xkX3BfY2gpKTsKIHZvaWQgbGFzdF9zdGF0dXMgX19BUkdTKChpbnQgbW9yZXdpbikpOworY2hhcl91ICpncmFiX2ZpbGVfbmFtZSBfX0FSR1MoKGxvbmcgY291bnQpKTsKIGNoYXJfdSAqZmlsZV9uYW1lX2F0X2N1cnNvciBfX0FSR1MoKGludCBvcHRpb25zLCBsb25nIGNvdW50KSk7CiBjaGFyX3UgKmZpbGVfbmFtZV9pbl9saW5lIF9fQVJHUygoY2hhcl91ICpsaW5lLCBpbnQgY29sLCBpbnQgb3B0aW9ucywgbG9uZyBjb3VudCwgY2hhcl91ICpyZWxfZm5hbWUpKTsKIGNoYXJfdSAqZmluZF9maWxlX25hbWVfaW5fcGF0aCBfX0FSR1MoKGNoYXJfdSAqcHRyLCBpbnQgbGVuLCBpbnQgb3B0aW9ucywgbG9uZyBjb3VudCwgY2hhcl91ICpyZWxfZm5hbWUpKTsKZGlmZiAtLWdpdCBhL3NyYy9zcGVsbC5jIGIvc3JjL3NwZWxsLmMKaW5kZXggYTEyYzBjYy4uZWFiNzI1YSAxMDA2NDQKLS0tIGEvc3JjL3NwZWxsLmMKKysrIGIvc3JjL3NwZWxsLmMKQEAgLTUxLDE4ICs1MSwyOCBAQAogICovCiAKIC8qCi0gKiBVc2UgdGhpcyB0byBsZXQgdGhlIHNjb3JlIGRlcGVuZCBpbiBob3cgbXVjaCBhIHN1Z2dlc3Rpb24gc291bmRzIGxpa2UgdGhlCi0gKiBiYWQgd29yZC4gIEl0J3MgcXVpdGUgc2xvdyBhbmQgb25seSBvY2Nhc2lvbmFsbHkgbWFrZXMgdGhlIHNvcnRpbmcgYmV0dGVyLgotI2RlZmluZSBTT1VOREZPTERfU0NPUkUKLSAqLwotCi0vKgogICogVXNlIHRoaXMgdG8gYWRqdXN0IHRoZSBzY29yZSBhZnRlciBmaW5kaW5nIHN1Z2dlc3Rpb25zLCBiYXNlZCBvbiB0aGUKICAqIHN1Z2dlc3RlZCB3b3JkIHNvdW5kaW5nIGxpa2UgdGhlIGJhZCB3b3JkLiAgVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGRvaW5nCiAgKiBpdCBmb3IgZXZlcnkgcG9zc2libGUgc3VnZ2VzdGlvbi4KICAqIERpc2FkdmFudGFnZTogV2hlbiAidGhlIiBpcyB0eXBlZCBhcyAiaHRlIiBpdCBzb3VuZHMgZGlmZmVyZW50IGFuZCBnb2VzCiAgKiBkb3duIGluIHRoZSBsaXN0LgotI2RlZmluZSBSRVNDT1JFKHdvcmRfc2NvcmUsIHNvdW5kX3Njb3JlKSAoKDIgKiB3b3JkX3Njb3JlICsgc291bmRfc2NvcmUpIC8gMykKKyAqIFVzZWQgd2hlbiAnc3BlbGxzdWdnZXN0JyBpcyBzZXQgdG8gImJlc3QiLgorICovCisjZGVmaW5lIFJFU0NPUkUod29yZF9zY29yZSwgc291bmRfc2NvcmUpICgoMyAqIHdvcmRfc2NvcmUgKyBzb3VuZF9zY29yZSkgLyA0KQorCisvKgorICogVGhlIGRvdWJsZSBzY29yaW5nIG1lY2hhbmlzbSBpcyBiYXNlZCBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgdGhlcmUgYXJlIHR3bworICoga2luZHMgb2Ygc3BlbGxpbmcgbWlzdGFrZXM6CisgKiAxLiBZb3Uga25vdyBob3cgdG8gc3BlbGwgdGhlIHdvcmQsIGJ1dCBtaXN0eXBlIHNvbWV0aGluZy4gIFRoaXMgcmVzdWx0cyBpbgorICogICAgYSBzbWFsbCBlZGl0aW5nIGRpc3RhbmNlIChjaGFyYWN0ZXIgc3dhcHBlZC9vbWl0dGVkL2luc2VydGVkKSBhbmQKKyAqICAgIHBvc3NpYmx5IGEgd29yZCB0aGF0IHNvdW5kcyBjb21wbGV0ZWx5IGRpZmZlcmVudC4KKyAqIDIuIFlvdSBkb24ndCBrbm93IGhvdyB0byBzcGVsbCB0aGUgd29yZCBhbmQgdHlwZSBzb21ldGhpbmcgdGhhdCBzb3VuZHMKKyAqICAgIHJpZ2h0LiAgVGhlIGVkaXQgZGlzdGFuY2UgY2FuIGJlIGJpZyBidXQgdGhlIHdvcmQgaXMgc2ltaWxhciBhZnRlcgorICogICAgc291bmQtZm9sZGluZy4KKyAqIFNpbmNlIHNjb3JlcyBmb3IgdGhlc2UgdHdvIG1pc3Rha2VzIHdpbGwgYmUgdmVyeSBkaWZmZXJlbnQgd2UgdXNlIGEgbGlzdAorICogZm9yIGVhY2guCisgKiBUaGUgc291bmQtZm9sZGluZyBpcyBzbG93LCBvbmx5IGRvIGRvdWJsZSBzY29yaW5nIHdoZW4gJ3NwZWxsc3VnZ2VzdCcgaXMKKyAqICJkb3VibGUiLgogICovCiAKIC8qCkBAIC0yMzEsNyArMjQxLDcgQEAKICNkZWZpbmUgQllfU1BFQ0lBTCAgQllfSU5ERVgJLyogaGlnaHRlc3Qgc3BlY2lhbCBieXRlIHZhbHVlICovCiAKIC8qIEluZm8gZnJvbSAiUkVQIiBhbmQgIlNBTCIgZW50cmllcyBpbiAiLmFmZiIgZmlsZSB1c2VkIGluIHNpX3JlcCwgc2xfcmVwLAotICogc2lfc2FsIGFuZCBzbF9zYWwuCisgKiBhbmQgc2lfc2FsLiAgTm90IGZvciBzbF9zYWwhCiAgKiBPbmUgcmVwbGFjZW1lbnQ6IGZyb20gImZ0X2Zyb20iIHRvICJmdF90byIuICovCiB0eXBlZGVmIHN0cnVjdCBmcm9tdG9fUwogewpAQCAtMjM5LDYgKzI0OSwxOCBAQAogICAgIGNoYXJfdQkqZnRfdG87CiB9IGZyb210b19UOwogCisvKiBJbmZvIGZyb20gIlNBTCIgZW50cmllcyBpbiAiLmFmZiIgZmlsZSB1c2VkIGluIHNsX3NhbC4KKyAqIFRoZSBpbmZvIGlzIHNwbGl0IGZvciBxdWljayBwcm9jZXNzaW5nIGJ5IHNwZWxsX3NvdW5kZm9sZCgpLgorICogTm90ZSB0aGF0ICJzbV9vbmVvZiIgYW5kICJzbV9ydWxlcyIgcG9pbnQgaW50byBzbV9sZWFkLiAqLwordHlwZWRlZiBzdHJ1Y3Qgc2FsaXRlbV9TCit7CisgICAgY2hhcl91CSpzbV9sZWFkOwkvKiBsZWFkaW5nIGxldHRlcnMgKi8KKyAgICBpbnQJCXNtX2xlYWRsZW47CS8qIGxlbmd0aCBvZiAic21fbGVhZCIgKi8KKyAgICBjaGFyX3UJKnNtX29uZW9mZjsJLyogbGV0dGVycyBmcm9tICgpIG9yIE5VTEwgKi8KKyAgICBjaGFyX3UJKnNtX3J1bGVzOwkvKiBydWxlcyBsaWtlIF4sICQsIHByaW9yaXR5ICovCisgICAgY2hhcl91CSpzbV90bzsJCS8qIHJlcGxhY2VtZW50LiAqLworfSBzYWxpdGVtX1Q7CisKIC8qCiAgKiBTdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSB3b3JkcyBhbmQgb3RoZXIgaW5mbyBmb3Igb25lIGxhbmd1YWdlLCBsb2FkZWQgZnJvbQogICogYSAuc3BsIGZpbGUuCkBAIC0yNzcsNyArMjk5LDcgQEAKICAgICBnYXJyYXlfVAlzbF9yZXA7CQkvKiBsaXN0IG9mIGZyb210b19UIGVudHJpZXMgZnJvbSBSRVAgbGluZXMgKi8KICAgICBzaG9ydAlzbF9yZXBfZmlyc3RbMjU2XTsgIC8qIGluZGV4ZXMgd2hlcmUgYnl0ZSBmaXJzdCBhcHBlYXJzLCAtMSBpZgogCQkJCSAgICAgICB0aGVyZSBpcyBub25lICovCi0gICAgZ2FycmF5X1QJc2xfc2FsOwkJLyogbGlzdCBvZiBmcm9tdG9fVCBlbnRyaWVzIGZyb20gU0FMIGxpbmVzICovCisgICAgZ2FycmF5X1QJc2xfc2FsOwkJLyogbGlzdCBvZiBzYWxpdGVtX1QgZW50cmllcyBmcm9tIFNBTCBsaW5lcyAqLwogICAgIHNob3J0CXNsX3NhbF9maXJzdFsyNTZdOyAgLyogaW5kZXhlcyB3aGVyZSBieXRlIGZpcnN0IGFwcGVhcnMsIC0xIGlmCiAJCQkJICAgICAgIHRoZXJlIGlzIG5vbmUgKi8KICAgICBpbnQJCXNsX2ZvbGxvd3VwOwkvKiBTQUwgZm9sbG93dXAgKi8KQEAgLTMzMCwxNiArMzUyLDE0IEBACiB0eXBlZGVmIHN0cnVjdCBzdWdpbmZvX1MKIHsKICAgICBnYXJyYXlfVAlzdV9nYTsJCSAgICAvKiBzdWdnZXN0aW9ucywgY29udGFpbnMgInN1Z2dlc3RfVCIgKi8KKyAgICBpbnQJCXN1X21heGNvdW50OwkgICAgLyogbWF4LiBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgZGlzcGxheWVkICovCiAgICAgaW50CQlzdV9tYXhzY29yZTsJICAgIC8qIG1heGltdW0gc2NvcmUgZm9yIGFkZGluZyB0byBzdV9nYSAqLworICAgIGdhcnJheV9UCXN1X3NnYTsJCSAgICAvKiBsaWtlIHN1X2dhLCBzb3VuZC1mb2xkZWQgc2NvcmluZyAqLwogICAgIGNoYXJfdQkqc3VfYmFkcHRyOwkgICAgLyogc3RhcnQgb2YgYmFkIHdvcmQgaW4gbGluZSAqLwogICAgIGludAkJc3VfYmFkbGVuOwkgICAgLyogbGVuZ3RoIG9mIGRldGVjdGVkIGJhZCB3b3JkIGluIGxpbmUgKi8KICAgICBjaGFyX3UJc3VfYmFkd29yZFtNQVhXTEVOXTsgLyogYmFkIHdvcmQgdHJ1bmNhdGVkIGF0IHN1X2JhZGxlbiAqLwogICAgIGNoYXJfdQlzdV9mYmFkd29yZFtNQVhXTEVOXTsgLyogc3VfYmFkd29yZCBjYXNlLWZvbGRlZCAqLwogICAgIGhhc2h0YWJfVAlzdV9iYW5uZWQ7CSAgICAvKiB0YWJsZSB3aXRoIGJhbm5lZCB3b3JkcyAqLwotI2lmZGVmIFNPVU5ERk9MRF9TQ09SRQotICAgIHNsYW5nX1QJKnN1X3NsYW5nOwkgICAgLyogY3VycmVudGx5IHVzZWQgc2xhbmdfVCAqLwotICAgIGNoYXJfdQlzdV9zYWx3b3JkW01BWFdMRU5dOyAvKiBzb3VuZGZvbGRlZCBiYWR3b3JkICovCi0jZW5kaWYKIH0gc3VnaW5mb19UOwogCiAvKiBPbmUgd29yZCBzdWdnZXN0aW9uLiAgVXNlZCBpbiAic2lfZ2EiLiAqLwpAQCAtMzQ4LDMyICszNjgsMjcgQEAKICAgICBjaGFyX3UJKnN0X3dvcmQ7CS8qIHN1Z2dlc3RlZCB3b3JkLCBhbGxvY2F0ZWQgc3RyaW5nICovCiAgICAgaW50CQlzdF9vcmdsZW47CS8qIGxlbmd0aCBvZiByZXBsYWNlZCB0ZXh0ICovCiAgICAgaW50CQlzdF9zY29yZTsJLyogbG93ZXIgaXMgYmV0dGVyICovCi0jaWZkZWYgUkVTQ09SRQorICAgIGludAkJc3RfYWx0c2NvcmU7CS8qIHVzZWQgd2hlbiBzdF9zY29yZSBjb21wYXJlcyBlcXVhbCAqLworICAgIGludAkJc3Rfc2Fsc2NvcmU7CS8qIHN0X3Njb3JlIGlzIGZvciBzb3VuZGFsaWtlICovCiAgICAgaW50CQlzdF9oYWRfYm9udXM7CS8qIGJvbnVzIGFscmVhZHkgaW5jbHVkZWQgaW4gc2NvcmUgKi8KLSNlbmRpZgogfSBzdWdnZXN0X1Q7CiAKLSNkZWZpbmUgU1VHKHN1cCwgaSkgKCgoc3VnZ2VzdF9UICopKHN1cCktPnN1X2dhLmdhX2RhdGEpW2ldKQotCi0vKiBOdW1iZXIgb2Ygc3VnZ2VzdGlvbnMgZGlzcGxheWVkLiAqLwotI2RlZmluZSBTVUdfUFJPTVBUX0NPVU5UICAgICgoaW50KVJvd3MgLSAyKQorI2RlZmluZSBTVUcoZ2EsIGkpICgoKHN1Z2dlc3RfVCAqKShnYSkuZ2FfZGF0YSlbaV0pCiAKIC8qIE51bWJlciBvZiBzdWdnZXN0aW9ucyBrZXB0IHdoZW4gY2xlYW5pbmcgdXAuICBXaGVuIHJlc2NvcmVfc3VnZ2VzdGlvbnMoKSBpcwogICogY2FsbGVkIHRoZSBzY29yZSBtYXkgY2hhbmdlLCB0aHVzIHdlIG5lZWQgdG8ga2VlcCBtb3JlIHRoYW4gd2hhdCBpcwogICogZGlzcGxheWVkLiAqLwotI2RlZmluZSBTVUdfQ0xFQU5fQ09VTlQJICAgIChTVUdfUFJPTVBUX0NPVU5UIDwgMjUgPyAyNSA6IFNVR19QUk9NUFRfQ09VTlQpCisjZGVmaW5lIFNVR19DTEVBTl9DT1VOVChzdSkgICAgKChzdSktPnN1X21heGNvdW50IDwgMjUgPyAyNSA6IChzdSktPnN1X21heGNvdW50KQogCiAvKiBUaHJlc2hvbGQgZm9yIHNvcnRpbmcgYW5kIGNsZWFuaW5nIHVwIHN1Z2dlc3Rpb25zLiAgRG9uJ3Qgd2FudCB0byBrZWVwIGxvdHMKICAqIG9mIHN1Z2dlc3Rpb25zIHRoYXQgYXJlIG5vdCBnb2luZyB0byBiZSBkaXNwbGF5ZWQuICovCi0jZGVmaW5lIFNVR19NQVhfQ09VTlQJICAgIChTVUdfUFJPTVBUX0NPVU5UICsgNTApCisjZGVmaW5lIFNVR19NQVhfQ09VTlQoc3UpICAgICgoc3UpLT5zdV9tYXhjb3VudCArIDUwKQogCiAvKiBzY29yZSBmb3IgdmFyaW91cyBjaGFuZ2VzICovCi0jZGVmaW5lIFNDT1JFX1NQTElUCTk5CS8qIHNwbGl0IGJhZCB3b3JkICovCisjZGVmaW5lIFNDT1JFX1NQTElUCTE0OQkvKiBzcGxpdCBiYWQgd29yZCAqLwogI2RlZmluZSBTQ09SRV9JQ0FTRQk1MgkvKiBzbGlnaHRseSBkaWZmZXJlbnQgY2FzZSAqLwogI2RlZmluZSBTQ09SRV9SRUdJT04JNzAJLyogd29yZCBpcyBmb3IgZGlmZmVyZW50IHJlZ2lvbiAqLwogI2RlZmluZSBTQ09SRV9SQVJFCTE4MAkvKiByYXJlIHdvcmQgKi8KLQotLyogc2NvcmUgZm9yIGVkaXQgZGlzdGFuY2UgKi8KICNkZWZpbmUgU0NPUkVfU1dBUAk5MAkvKiBzd2FwIHR3byBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFNDT1JFX1NXQVAzCTExMAkvKiBzd2FwIHR3byBjaGFyYWN0ZXJzIGluIHRocmVlICovCiAjZGVmaW5lIFNDT1JFX1JFUAk4NwkvKiBSRVAgcmVwbGFjZW1lbnQgKi8KQEAgLTM4NCw2ICszOTksOCBAQAogCiAjZGVmaW5lIFNDT1JFX01BWElOSVQJMzUwCS8qIEluaXRpYWwgbWF4aW11bSBzY29yZTogaGlnaGVyID09IHNsb3dlci4KIAkJCQkgKiAzNTAgYWxsb3dzIGZvciBhYm91dCB0aHJlZSBjaGFuZ2VzLiAqLworCisjZGVmaW5lIFNDT1JFX0JJRwlTQ09SRV9JTlMgKiAzCS8qIGJpZyBkaWZmZXJlbmNlICovCiAjZGVmaW5lIFNDT1JFX01BWE1BWAk5OTk5OTkJLyogYWNjZXB0IGFueSBzY29yZSAqLwogCiAvKgpAQCAtNDUxLDI1ICs0NjgsMjYgQEAKICNlbmRpZgogCiAvKgotICogRm9yIGZpbmRpbmcgc3VnZ2VzdGlvbjogQXQgZWFjaCBub2RlIGluIHRoZSB0cmVlIHRoZXNlIHN0YXRlcyBhcmUgdHJpZWQ6CisgKiBGb3IgZmluZGluZyBzdWdnZXN0aW9uczogQXQgZWFjaCBub2RlIGluIHRoZSB0cmVlIHRoZXNlIHN0YXRlcyBhcmUgdHJpZWQ6CiAgKi8KIHR5cGVkZWYgZW51bQogewotICAgIFNUQVRFX1NUQVJUID0gMCwJLyogQXQgc3RhcnQgb2Ygbm9kZSwgY2hlY2sgaWYgd29yZCBtYXkgZW5kIG9yCi0JCQkgKiBzcGxpdCB3b3JkLiAqLwotICAgIFNUQVRFX1NQTElUVU5ETywJLyogVW5kbyB3b3JkIHNwbGl0LiAqLworICAgIFNUQVRFX1NUQVJUID0gMCwJLyogQXQgc3RhcnQgb2Ygbm9kZSBjaGVjayBmb3IgTlVMIGJ5dGVzIChnb29kd29yZAorCQkJICogZW5kcyk7IGlmIGJhZHdvcmQgZW5kcyB0aGVyZSBpcyBhIG1hdGNoLCBvdGhlcndpc2UKKwkJCSAqIHRyeSBzcGxpdHRpbmcgd29yZC4gKi8KKyAgICBTVEFURV9TUExJVFVORE8sCS8qIFVuZG8gc3BsaXR0aW5nLiAqLwogICAgIFNUQVRFX0VORE5VTCwJLyogUGFzdCBOVUwgYnl0ZXMgYXQgc3RhcnQgb2YgdGhlIG5vZGUuICovCiAgICAgU1RBVEVfUExBSU4sCS8qIFVzZSBlYWNoIGJ5dGUgb2YgdGhlIG5vZGUuICovCiAgICAgU1RBVEVfREVMLAkJLyogRGVsZXRlIGEgYnl0ZSBmcm9tIHRoZSBiYWQgd29yZC4gKi8KICAgICBTVEFURV9JTlMsCQkvKiBJbnNlcnQgYSBieXRlIGluIHRoZSBiYWQgd29yZC4gKi8KICAgICBTVEFURV9TV0FQLAkJLyogU3dhcCB0d28gYnl0ZXMuICovCi0gICAgU1RBVEVfVU5TV0FQLAkvKiBVbmRvIHN3YXAgdHdvIGJ5dGVzLiAqLwotICAgIFNUQVRFX1NXQVAzLAkvKiBTd2FwIHR3byBieXRlcyBvdmVyIHRocmVlLiAqLwotICAgIFNUQVRFX1VOU1dBUDMsCS8qIFVuZG8gU3dhcCB0d28gYnl0ZXMgb3ZlciB0aHJlZS4gKi8KLSAgICBTVEFURV9ST1QzTCwJLyogUm90YXRlIHRocmVlIGJ5dGVzIGxlZnQgKi8KLSAgICBTVEFURV9VTlJPVDNMLAkvKiBVbmRvIHJvdGF0ZSB0aHJlZSBieXRlcyBsZWZ0ICovCi0gICAgU1RBVEVfUk9UM1IsCS8qIFJvdGF0ZSB0aHJlZSBieXRlcyByaWdodCAqLwotICAgIFNUQVRFX1VOUk9UM1IsCS8qIFVuZG8gcm90YXRlIHRocmVlIGJ5dGVzIHJpZ2h0ICovCisgICAgU1RBVEVfVU5TV0FQLAkvKiBVbmRvIHN3YXAgdHdvIGNoYXJhY3RlcnMuICovCisgICAgU1RBVEVfU1dBUDMsCS8qIFN3YXAgdHdvIGNoYXJhY3RlcnMgb3ZlciB0aHJlZS4gKi8KKyAgICBTVEFURV9VTlNXQVAzLAkvKiBVbmRvIFN3YXAgdHdvIGNoYXJhY3RlcnMgb3ZlciB0aHJlZS4gKi8KKyAgICBTVEFURV9ST1QzTCwJLyogUm90YXRlIHRocmVlIGNoYXJhY3RlcnMgbGVmdCAqLworICAgIFNUQVRFX1VOUk9UM0wsCS8qIFVuZG8gcm90YXRlIHRocmVlIGNoYXJhY3RlcnMgbGVmdCAqLworICAgIFNUQVRFX1JPVDNSLAkvKiBSb3RhdGUgdGhyZWUgY2hhcmFjdGVycyByaWdodCAqLworICAgIFNUQVRFX1VOUk9UM1IsCS8qIFVuZG8gcm90YXRlIHRocmVlIGNoYXJhY3RlcnMgcmlnaHQgKi8KICAgICBTVEFURV9SRVBfSU5JLAkvKiBQcmVwYXJlIGZvciB1c2luZyBSRVAgaXRlbXMuICovCiAgICAgU1RBVEVfUkVQLAkJLyogVXNlIG1hdGNoaW5nIFJFUCBpdGVtcyBmcm9tIHRoZSAuYWZmIGZpbGUuICovCiAgICAgU1RBVEVfUkVQX1VORE8sCS8qIFVuZG8gYSBSRVAgaXRlbSByZXBsYWNlbWVudC4gKi8KQEAgLTQ4Myw2ICs1MDEsNyBAQAogewogICAgIHN0YXRlX1QJdHNfc3RhdGU7CS8qIHN0YXRlIGF0IHRoaXMgbGV2ZWwsIFNUQVRFXyAqLwogICAgIGludAkJdHNfc2NvcmU7CS8qIHNjb3JlICovCisgICAgaWR4X1QJdHNfYXJyaWR4OwkvKiBpbmRleCBpbiB0cmVlIGFycmF5LCBzdGFydCBvZiBub2RlICovCiAgICAgc2hvcnQJdHNfY3VyaTsJLyogaW5kZXggaW4gbGlzdCBvZiBjaGlsZCBub2RlcyAqLwogICAgIGNoYXJfdQl0c19maWR4OwkvKiBpbmRleCBpbiBmd29yZFtdLCBjYXNlLWZvbGRlZCBiYWQgd29yZCAqLwogICAgIGNoYXJfdQl0c19maWR4dHJ5OwkvKiB0c19maWR4IGF0IHdoaWNoIGJ5dGVzIG1heSBiZSBjaGFuZ2VkICovCkBAIC00OTMsNyArNTEyLDYgQEAKICAgICBjaGFyX3UJdHNfaXNkaWZmOwkvKiBESUZGXyB2YWx1ZXMgKi8KICAgICBjaGFyX3UJdHNfZmNoYXJzdGFydDsJLyogaW5kZXggaW4gZndvcmQgd2hlcmUgYmFkd29yZCBjaGFyIHN0YXJ0ZWQgKi8KICNlbmRpZgotICAgIGlkeF9UCXRzX2FycmlkeDsJLyogaW5kZXggaW4gdHJlZSBhcnJheSwgc3RhcnQgb2Ygbm9kZSAqLwogICAgIGNoYXJfdQl0c19zYXZlX3ByZXdvcmRsZW47IC8qIHNhdmVkICJwcmV3b3JkbGVuIiAqLwogICAgIGNoYXJfdQl0c19zYXZlX3NwbGl0b2ZmOyAgIC8qIHN1X3NwbGl0b2ZmIHNhdmVkIGhlcmUgKi8KICAgICBjaGFyX3UJdHNfc2F2ZV9iYWRmbGFnczsgICAvKiBiYWRmbGFncyBzYXZlZCBoZXJlICovCkBAIC01MjgsMzAgKzU0NiwyOCBAQAogc3RhdGljIGludCBzZXRfc3BlbGxfY2hhcnRhYiBfX0FSR1MoKGNoYXJfdSAqZm9sLCBjaGFyX3UgKmxvdywgY2hhcl91ICp1cHApKTsKIHN0YXRpYyB2b2lkIHdyaXRlX3NwZWxsX2NoYXJ0YWIgX19BUkdTKChGSUxFICpmZCkpOwogc3RhdGljIGludCBzcGVsbF9jYXNlZm9sZCBfX0FSR1MoKGNoYXJfdSAqcCwgaW50IGxlbiwgY2hhcl91ICpidWYsIGludCBidWZsZW4pKTsKK3N0YXRpYyB2b2lkIHNwZWxsX2ZpbmRfc3VnZ2VzdCBfX0FSR1MoKGNoYXJfdSAqYmFkcHRyLCBzdWdpbmZvX1QgKnN1LCBpbnQgbWF4Y291bnQpKTsKK3N0YXRpYyB2b2lkIHNwZWxsX2ZpbmRfY2xlYW51cCBfX0FSR1MoKHN1Z2luZm9fVCAqc3UpKTsKIHN0YXRpYyB2b2lkIG9uZWNhcF9jb3B5IF9fQVJHUygoY2hhcl91ICp3b3JkLCBjaGFyX3UgKndjb3B5LCBpbnQgdXBwZXIpKTsKK3N0YXRpYyB2b2lkIGFsbGNhcF9jb3B5IF9fQVJHUygoY2hhcl91ICp3b3JkLCBjaGFyX3UgKndjb3B5KSk7CiBzdGF0aWMgdm9pZCBzcGVsbF90cnlfY2hhbmdlIF9fQVJHUygoc3VnaW5mb19UICpzdSkpOwogc3RhdGljIGludCB0cnlfZGVlcGVyIF9fQVJHUygoc3VnaW5mb19UICpzdSwgdHJ5c3RhdGVfVCAqc3RhY2ssIGludCBkZXB0aCwgaW50IHNjb3JlX2FkZCkpOwogc3RhdGljIHZvaWQgZmluZF9rZWVwY2FwX3dvcmQgX19BUkdTKChzbGFuZ19UICpzbGFuZywgY2hhcl91ICpmd29yZCwgY2hhcl91ICprd29yZCkpOworc3RhdGljIHZvaWQgc2NvcmVfY29tcF9zYWwgX19BUkdTKChzdWdpbmZvX1QgKnN1KSk7CitzdGF0aWMgdm9pZCBzY29yZV9jb21iaW5lIF9fQVJHUygoc3VnaW5mb19UICpzdSkpOwogc3RhdGljIHZvaWQgc3BlbGxfdHJ5X3NvdW5kYWxpa2UgX19BUkdTKChzdWdpbmZvX1QgKnN1KSk7CiBzdGF0aWMgdm9pZCBtYWtlX2Nhc2Vfd29yZCBfX0FSR1MoKGNoYXJfdSAqZndvcmQsIGNoYXJfdSAqY3dvcmQsIGludCBmbGFncykpOwogc3RhdGljIHZvaWQgc2V0X21hcF9zdHIgX19BUkdTKChzbGFuZ19UICpscCwgY2hhcl91ICptYXApKTsKIHN0YXRpYyBpbnQgc2ltaWxhcl9jaGFycyBfX0FSR1MoKHNsYW5nX1QgKnNsYW5nLCBpbnQgYzEsIGludCBjMikpOwotI2lmZGVmIFJFU0NPUkUKLXN0YXRpYyB2b2lkIGFkZF9zdWdnZXN0aW9uIF9fQVJHUygoc3VnaW5mb19UICpzdSwgY2hhcl91ICpnb29kd29yZCwgaW50IHVzZV9zY29yZSwgaW50IGhhZF9ib251cykpOwotI2Vsc2UKLXN0YXRpYyB2b2lkIGFkZF9zdWdnZXN0aW9uIF9fQVJHUygoc3VnaW5mb19UICpzdSwgY2hhcl91ICpnb29kd29yZCwgaW50IHVzZV9zY29yZSkpOwotI2VuZGlmCitzdGF0aWMgdm9pZCBhZGRfc3VnZ2VzdGlvbiBfX0FSR1MoKHN1Z2luZm9fVCAqc3UsIGdhcnJheV9UICpnYXAsIGNoYXJfdSAqZ29vZHdvcmQsIGludCB1c2Vfc2NvcmUsIGludCBoYWRfYm9udXMpKTsKIHN0YXRpYyB2b2lkIGFkZF9iYW5uZWQgX19BUkdTKChzdWdpbmZvX1QgKnN1LCBjaGFyX3UgKndvcmQpKTsKIHN0YXRpYyBpbnQgd2FzX2Jhbm5lZCBfX0FSR1MoKHN1Z2luZm9fVCAqc3UsIGNoYXJfdSAqd29yZCkpOwogc3RhdGljIHZvaWQgZnJlZV9iYW5uZWQgX19BUkdTKChzdWdpbmZvX1QgKnN1KSk7Ci0jaWZkZWYgUkVTQ09SRQogc3RhdGljIHZvaWQgcmVzY29yZV9zdWdnZXN0aW9ucyBfX0FSR1MoKHN1Z2luZm9fVCAqc3UpKTsKLSNlbmRpZgotc3RhdGljIHZvaWQgY2xlYW51cF9zdWdnZXN0aW9ucyBfX0FSR1MoKHN1Z2luZm9fVCAqc3UsIGludCBrZWVwKSk7CitzdGF0aWMgaW50IGNsZWFudXBfc3VnZ2VzdGlvbnMgX19BUkdTKChnYXJyYXlfVCAqZ2FwLCBpbnQgbWF4c2NvcmUsIGludCBrZWVwKSk7CiBzdGF0aWMgdm9pZCBzcGVsbF9zb3VuZGZvbGQgX19BUkdTKChzbGFuZ19UICpzbGFuZywgY2hhcl91ICppbndvcmQsIGNoYXJfdSAqcmVzKSk7Ci0jaWYgZGVmaW5lZChSRVNDT1JFKSB8fCBkZWZpbmVkKFNPVU5ERk9MRF9TQ09SRSkKIHN0YXRpYyBpbnQgc3BlbGxfc291bmRfc2NvcmUgX19BUkdTKChzbGFuZ19UICpzbGFuZywgY2hhcl91ICpnb29kd29yZCwgY2hhcl91CSpiYWRzb3VuZCkpOwotI2VuZGlmCitzdGF0aWMgaW50IHNvdW5kYWxpa2Vfc2NvcmUgX19BUkdTKChjaGFyX3UgKmdvb2Rzb3VuZCwgY2hhcl91ICpiYWRzb3VuZCkpOwogc3RhdGljIGludCBzcGVsbF9lZGl0X3Njb3JlIF9fQVJHUygoY2hhcl91ICpiYWR3b3JkLCBjaGFyX3UgKmdvb2R3b3JkKSk7CiAKIC8qCkBAIC02MTcsOTUgKzYzMywxMDMgQEAKIHsKICAgICBtYXRjaGluZl9UCW1pOwkJLyogTW9zdCB0aGluZ3MgYXJlIHB1dCBpbiAibWkiIHNvIHRoYXQgaXQgY2FuCiAJCQkJICAgYmUgcGFzc2VkIHRvIGZ1bmN0aW9ucyBxdWlja2x5LiAqLworICAgIGludAkJbnJsZW4gPSAwOwkvKiBmb3VuZCBhIG51bWJlciBmaXJzdCAqLwogCiAgICAgLyogQSB3b3JkIG5ldmVyIHN0YXJ0cyBhdCBhIHNwYWNlIG9yIGEgY29udHJvbCBjaGFyYWN0ZXIuICBSZXR1cm4gcXVpY2tseQogICAgICAqIHRoZW4sIHNraXBwaW5nIG92ZXIgdGhlIGNoYXJhY3Rlci4gKi8KICAgICBpZiAoKnB0ciA8PSAnICcpCiAJcmV0dXJuIDE7CiAKLSAgICAvKiBBIHdvcmQgc3RhcnRpbmcgd2l0aCBhIG51bWJlciBpcyBhbHdheXMgT0suICBBbHNvIHNraXAgaGV4YWRlY2ltYWwKLSAgICAgKiBudW1iZXJzIDB4RkY5OSBhbmQgMFg5OUZGLiAqLworICAgIC8qIEEgbnVtYmVyIGlzIGFsd2F5cyBPSy4gIEFsc28gc2tpcCBoZXhhZGVjaW1hbCBudW1iZXJzIDB4RkY5OSBhbmQKKyAgICAgKiAwWDk5RkYuICBCdXQgd2hlbiBhIHdvcmQgY2hhcmFjdGVyIGZvbGxvd3MgZG8gY2hlY2sgc3BlbGxpbmcuICovCiAgICAgaWYgKCpwdHIgPj0gJzAnICYmICpwdHIgPD0gJzknKQogICAgIHsKIAlpZiAoKnB0ciA9PSAnMCcgJiYgKHB0clsxXSA9PSAneCcgfHwgcHRyWzFdID09ICdYJykpCiAJICAgIG1pLm1pX2VuZCA9IHNraXBoZXgocHRyICsgMik7CiAJZWxzZQorCXsKIAkgICAgbWkubWlfZW5kID0gc2tpcGRpZ2l0cyhwdHIpOworCSAgICBucmxlbiA9IG1pLm1pX2VuZCAtIHB0cjsKKwl9CisJaWYgKCFTUEVMTF9JU1dPUkRQKG1pLm1pX2VuZCkpCisJICAgIHJldHVybiAoaW50KShtaS5taV9lbmQgLSBwdHIpOwogICAgIH0KLSAgICBlbHNlCisKKyAgICAvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIHdvcmQuICovCisgICAgbWkubWlfd29yZCA9IHB0cjsKKyAgICBtaS5taV9mZW5kID0gcHRyOworCisgICAgaWYgKFNQRUxMX0lTV09SRFAobWkubWlfZmVuZCkpCiAgICAgewotCS8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgd29yZC4gKi8KLQltaS5taV93b3JkID0gcHRyOwotCW1pLm1pX2ZlbmQgPSBwdHI7Ci0KLQlpZiAoU1BFTExfSVNXT1JEUChtaS5taV9mZW5kKSkKKwkvKiBNYWtlIGNhc2UtZm9sZGVkIGNvcHkgb2YgdGhlIGNoYXJhY3RlcnMgdW50aWwgdGhlIG5leHQgbm9uLXdvcmQKKwkgKiBjaGFyYWN0ZXIuICovCisJZG8KIAl7Ci0JICAgIC8qIE1ha2UgY2FzZS1mb2xkZWQgY29weSBvZiB0aGUgY2hhcmFjdGVycyB1bnRpbCB0aGUgbmV4dCBub24td29yZAotCSAgICAgKiBjaGFyYWN0ZXIuICovCi0JICAgIGRvCi0JICAgIHsKLQkJbWJfcHRyX2FkdihtaS5taV9mZW5kKTsKLQkgICAgfSB3aGlsZSAoKm1pLm1pX2ZlbmQgIT0gTlVMICYmIFNQRUxMX0lTV09SRFAobWkubWlfZmVuZCkpOwotCX0KLQotCS8qIFdlIGFsd2F5cyB1c2UgdGhlIGNoYXJhY3RlcnMgdXAgdG8gdGhlIG5leHQgbm9uLXdvcmQgY2hhcmFjdGVyLAotCSAqIGFsc28gZm9yIGJhZCB3b3Jkcy4gKi8KLQltaS5taV9lbmQgPSBtaS5taV9mZW5kOwotCi0JLyogQ2hlY2sgY2FwcyB0eXBlIGxhdGVyLiAqLwotCW1pLm1pX2NhcGZsYWdzID0gMDsKLQltaS5taV9jZW5kID0gTlVMTDsKLQotCS8qIEluY2x1ZGUgb25lIG5vbi13b3JkIGNoYXJhY3RlciBzbyB0aGF0IHdlIGNhbiBjaGVjayBmb3IgdGhlCi0JICogd29yZCBlbmQuICovCi0JaWYgKCptaS5taV9mZW5kICE9IE5VTCkKIAkgICAgbWJfcHRyX2FkdihtaS5taV9mZW5kKTsKKwl9IHdoaWxlICgqbWkubWlfZmVuZCAhPSBOVUwgJiYgU1BFTExfSVNXT1JEUChtaS5taV9mZW5kKSk7CisgICAgfQogCi0JKHZvaWQpc3BlbGxfY2FzZWZvbGQocHRyLCAoaW50KShtaS5taV9mZW5kIC0gcHRyKSwgbWkubWlfZndvcmQsCi0JCQkJCQkJCSBNQVhXTEVOICsgMSk7Ci0JbWkubWlfZndvcmRsZW4gPSBTVFJMRU4obWkubWlfZndvcmQpOworICAgIC8qIFdlIGFsd2F5cyB1c2UgdGhlIGNoYXJhY3RlcnMgdXAgdG8gdGhlIG5leHQgbm9uLXdvcmQgY2hhcmFjdGVyLAorICAgICAqIGFsc28gZm9yIGJhZCB3b3Jkcy4gKi8KKyAgICBtaS5taV9lbmQgPSBtaS5taV9mZW5kOwogCi0JLyogVGhlIHdvcmQgaXMgYmFkIHVubGVzcyB3ZSByZWNvZ25pemUgaXQuICovCi0JbWkubWlfcmVzdWx0ID0gU1BfQkFEOworICAgIC8qIENoZWNrIGNhcHMgdHlwZSBsYXRlci4gKi8KKyAgICBtaS5taV9jYXBmbGFncyA9IDA7CisgICAgbWkubWlfY2VuZCA9IE5VTEw7CiAKLQkvKgotCSAqIExvb3Agb3ZlciB0aGUgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiAnc3BlbGxsYW5nJy4KLQkgKiBXZSBjaGVjayB0aGVtIGFsbCwgYmVjYXVzZSBhIG1hdGNoaW5nIHdvcmQgbWF5IGJlIGxvbmdlciB0aGFuIGFuCi0JICogYWxyZWFkeSBmb3VuZCBtYXRjaGluZyB3b3JkLgotCSAqLwotCWZvciAobWkubWlfbHAgPSBMQU5HUF9FTlRSWSh3cC0+d19idWZmZXItPmJfbGFuZ3AsIDApOwotCQkJCSAgICAgICBtaS5taV9scC0+bHBfc2xhbmcgIT0gTlVMTDsgKyttaS5taV9scCkKKyAgICAvKiBJbmNsdWRlIG9uZSBub24td29yZCBjaGFyYWN0ZXIgc28gdGhhdCB3ZSBjYW4gY2hlY2sgZm9yIHRoZQorICAgICAqIHdvcmQgZW5kLiAqLworICAgIGlmICgqbWkubWlfZmVuZCAhPSBOVUwpCisJbWJfcHRyX2FkdihtaS5taV9mZW5kKTsKKworICAgICh2b2lkKXNwZWxsX2Nhc2Vmb2xkKHB0ciwgKGludCkobWkubWlfZmVuZCAtIHB0ciksIG1pLm1pX2Z3b3JkLAorCQkJCQkJCSAgICAgTUFYV0xFTiArIDEpOworICAgIG1pLm1pX2Z3b3JkbGVuID0gU1RSTEVOKG1pLm1pX2Z3b3JkKTsKKworICAgIC8qIFRoZSB3b3JkIGlzIGJhZCB1bmxlc3Mgd2UgcmVjb2duaXplIGl0LiAqLworICAgIG1pLm1pX3Jlc3VsdCA9IFNQX0JBRDsKKworICAgIC8qCisgICAgICogTG9vcCBvdmVyIHRoZSBsYW5ndWFnZXMgc3BlY2lmaWVkIGluICdzcGVsbGxhbmcnLgorICAgICAqIFdlIGNoZWNrIHRoZW0gYWxsLCBiZWNhdXNlIGEgbWF0Y2hpbmcgd29yZCBtYXkgYmUgbG9uZ2VyIHRoYW4gYW4KKyAgICAgKiBhbHJlYWR5IGZvdW5kIG1hdGNoaW5nIHdvcmQuCisgICAgICovCisgICAgZm9yIChtaS5taV9scCA9IExBTkdQX0VOVFJZKHdwLT53X2J1ZmZlci0+Yl9sYW5ncCwgMCk7CisJCQkJICAgbWkubWlfbHAtPmxwX3NsYW5nICE9IE5VTEw7ICsrbWkubWlfbHApCisgICAgeworCS8qIENoZWNrIGZvciBhIG1hdGNoaW5nIHdvcmQgaW4gY2FzZS1mb2xkZWQgd29yZHMuICovCisJZmluZF93b3JkKCZtaSwgRklORF9GT0xEV09SRCk7CisKKwkvKiBDaGVjayBmb3IgYSBtYXRjaGluZyB3b3JkIGluIGtlZXAtY2FzZSB3b3Jkcy4gKi8KKwlmaW5kX3dvcmQoJm1pLCBGSU5EX0tFRVBXT1JEKTsKKworCS8qIENoZWNrIGZvciBtYXRjaGluZyBwcmVmaXhlcy4gKi8KKwlmaW5kX3ByZWZpeCgmbWkpOworICAgIH0KKworICAgIGlmIChtaS5taV9yZXN1bHQgIT0gU1BfT0spCisgICAgeworCS8qIElmIHdlIGZvdW5kIGEgbnVtYmVyIHNraXAgb3ZlciBpdC4gIEFsbG93cyBmb3IgIjQybmQiLiAqLworCWlmIChucmxlbiA+IDApCisJICAgIHJldHVybiBucmxlbjsKKworCS8qIFdoZW4gd2UgYXJlIGF0IGEgbm9uLXdvcmQgY2hhcmFjdGVyIHRoZXJlIGlzIG5vIGVycm9yLCBqdXN0CisJICogc2tpcCBvdmVyIHRoZSBjaGFyYWN0ZXIgKHRyeSBsb29raW5nIGZvciBhIHdvcmQgYWZ0ZXIgaXQpLiAqLworCWlmICghU1BFTExfSVNXT1JEUChwdHIpKQogCXsKLQkgICAgLyogQ2hlY2sgZm9yIGEgbWF0Y2hpbmcgd29yZCBpbiBjYXNlLWZvbGRlZCB3b3Jkcy4gKi8KLQkgICAgZmluZF93b3JkKCZtaSwgRklORF9GT0xEV09SRCk7Ci0KLQkgICAgLyogQ2hlY2sgZm9yIGEgbWF0Y2hpbmcgd29yZCBpbiBrZWVwLWNhc2Ugd29yZHMuICovCi0JICAgIGZpbmRfd29yZCgmbWksIEZJTkRfS0VFUFdPUkQpOwotCi0JICAgIC8qIENoZWNrIGZvciBtYXRjaGluZyBwcmVmaXhlcy4gKi8KLQkgICAgZmluZF9wcmVmaXgoJm1pKTsKLQl9Ci0KLQlpZiAobWkubWlfcmVzdWx0ICE9IFNQX09LKQotCXsKLQkgICAgLyogV2hlbiB3ZSBhcmUgYXQgYSBub24td29yZCBjaGFyYWN0ZXIgdGhlcmUgaXMgbm8gZXJyb3IsIGp1c3QKLQkgICAgICogc2tpcCBvdmVyIHRoZSBjaGFyYWN0ZXIgKHRyeSBsb29raW5nIGZvciBhIHdvcmQgYWZ0ZXIgaXQpLiAqLwotCSAgICBpZiAoIVNQRUxMX0lTV09SRFAocHRyKSkKLQkgICAgewogI2lmZGVmIEZFQVRfTUJZVEUKLQkJaWYgKGhhc19tYnl0ZSkKLQkJICAgIHJldHVybiBtYl9wdHIybGVuX2NoZWNrKHB0cik7CisJICAgIGlmIChoYXNfbWJ5dGUpCisJCXJldHVybiBtYl9wdHIybGVuX2NoZWNrKHB0cik7CiAjZW5kaWYKLQkJcmV0dXJuIDE7Ci0JICAgIH0KLQotCSAgICBpZiAobWkubWlfcmVzdWx0ID09IFNQX0JBRCB8fCBtaS5taV9yZXN1bHQgPT0gU1BfQkFOTkVEKQotCQkqYXR0cnAgPSBoaWdobGlnaHRfYXR0cltITEZfU1BCXTsKLQkgICAgZWxzZSBpZiAobWkubWlfcmVzdWx0ID09IFNQX1JBUkUpCi0JCSphdHRycCA9IGhpZ2hsaWdodF9hdHRyW0hMRl9TUFJdOwotCSAgICBlbHNlCi0JCSphdHRycCA9IGhpZ2hsaWdodF9hdHRyW0hMRl9TUExdOworCSAgICByZXR1cm4gMTsKIAl9CisKKwlpZiAobWkubWlfcmVzdWx0ID09IFNQX0JBRCB8fCBtaS5taV9yZXN1bHQgPT0gU1BfQkFOTkVEKQorCSAgICAqYXR0cnAgPSBoaWdobGlnaHRfYXR0cltITEZfU1BCXTsKKwllbHNlIGlmIChtaS5taV9yZXN1bHQgPT0gU1BfUkFSRSkKKwkgICAgKmF0dHJwID0gaGlnaGxpZ2h0X2F0dHJbSExGX1NQUl07CisJZWxzZQorCSAgICAqYXR0cnAgPSBoaWdobGlnaHRfYXR0cltITEZfU1BMXTsKICAgICB9CiAKICAgICByZXR1cm4gKGludCkobWkubWlfZW5kIC0gcHRyKTsKQEAgLTkzNCw4ICs5NTgsOCBAQAogCQkgICAgewogCQkJcmVnbWF0Y2gucmVncHJvZyA9IHJwOwogCQkJcmVnbWF0Y2gucm1faWMgPSBGQUxTRTsKLQkJCWlmICghdmltX3JlZ2V4ZWMoJnJlZ21hdGNoLCBtaXAtPm1pX2Z3b3JkLAotCQkJCQkJICAoY29sbnJfVCltaXAtPm1pX3ByZWZpeGxlbikpCisJCQlpZiAoIXZpbV9yZWdleGVjKCZyZWdtYXRjaCwKKwkJCQkJbWlwLT5taV9md29yZCArIG1pcC0+bWlfcHJlZml4bGVuLCAwKSkKIAkJCSAgICBjb250aW51ZTsKIAkJICAgIH0KIApAQCAtMTMzOCw3ICsxMzYyLDcgQEAKICAgICB7CiAJbHAtPnNsX25hbWUgPSB2aW1fc3Ryc2F2ZShsYW5nKTsKIAlnYV9pbml0MigmbHAtPnNsX3JlcCwgc2l6ZW9mKGZyb210b19UKSwgMTApOwotCWdhX2luaXQyKCZscC0+c2xfc2FsLCBzaXplb2YoZnJvbXRvX1QpLCAxMCk7CisJZ2FfaW5pdDIoJmxwLT5zbF9zYWwsIHNpemVvZihzYWxpdGVtX1QpLCAxMCk7CiAgICAgfQogICAgIHJldHVybiBscDsKIH0KQEAgLTEzNjUsNyArMTM4OSw3IEBACiB7CiAgICAgZ2FycmF5X1QJKmdhcDsKICAgICBmcm9tdG9fVAkqZnRwOwotICAgIGludAkJcm91bmQ7CisgICAgc2FsaXRlbV9UCSpzbXA7CiAgICAgaW50CQlpOwogCiAgICAgdmltX2ZyZWUobHAtPnNsX2ZieXRzKTsKQEAgLTEzODIsMTcgKzE0MDYsMjMgQEAKICAgICB2aW1fZnJlZShscC0+c2xfcGlkeHMpOwogICAgIGxwLT5zbF9waWR4cyA9IE5VTEw7CiAKLSAgICBmb3IgKHJvdW5kID0gMTsgcm91bmQgPD0gMjsgKytyb3VuZCkKKyAgICBnYXAgPSAmbHAtPnNsX3JlcDsKKyAgICB3aGlsZSAoZ2FwLT5nYV9sZW4gPiAwKQogICAgIHsKLQlnYXAgPSByb3VuZCA9PSAxID8gJmxwLT5zbF9yZXAgOiAmbHAtPnNsX3NhbDsKLQl3aGlsZSAoZ2FwLT5nYV9sZW4gPiAwKQotCXsKLQkgICAgZnRwID0gJigoZnJvbXRvX1QgKilnYXAtPmdhX2RhdGEpWy0tZ2FwLT5nYV9sZW5dOwotCSAgICB2aW1fZnJlZShmdHAtPmZ0X2Zyb20pOwotCSAgICB2aW1fZnJlZShmdHAtPmZ0X3RvKTsKLQl9Ci0JZ2FfY2xlYXIoZ2FwKTsKKwlmdHAgPSAmKChmcm9tdG9fVCAqKWdhcC0+Z2FfZGF0YSlbLS1nYXAtPmdhX2xlbl07CisJdmltX2ZyZWUoZnRwLT5mdF9mcm9tKTsKKwl2aW1fZnJlZShmdHAtPmZ0X3RvKTsKICAgICB9CisgICAgZ2FfY2xlYXIoZ2FwKTsKKworICAgIGdhcCA9ICZscC0+c2xfc2FsOworICAgIHdoaWxlIChnYXAtPmdhX2xlbiA+IDApCisgICAgeworCXNtcCA9ICYoKHNhbGl0ZW1fVCAqKWdhcC0+Z2FfZGF0YSlbLS1nYXAtPmdhX2xlbl07CisJdmltX2ZyZWUoc21wLT5zbV9sZWFkKTsKKwl2aW1fZnJlZShzbXAtPnNtX3RvKTsKKyAgICB9CisgICAgZ2FfY2xlYXIoZ2FwKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBscC0+c2xfcHJlZml4Y250OyArK2kpCiAJdmltX2ZyZWUobHAtPnNsX3ByZWZwcm9nW2ldKTsKQEAgLTE0NTksOSArMTQ4OSwxMSBAQAogICAgIHNsYW5nX1QJKmxwID0gTlVMTDsKICAgICBnYXJyYXlfVAkqZ2FwOwogICAgIGZyb210b19UCSpmdHA7CisgICAgc2FsaXRlbV9UCSpzbXA7CiAgICAgaW50CQlycjsKICAgICBzaG9ydAkqZmlyc3Q7CiAgICAgaWR4X1QJaWR4OworICAgIGludAkJYyA9IDA7CiAKICAgICBmZCA9IG1jaF9mb3BlbigoY2hhciAqKWZuYW1lLCAiciIpOwogICAgIGlmIChmZCA9PSBOVUxMKQpAQCAtMTU5OCw3ICsxNjMwLDggQEAKIAkgICAgICogY29tcGlsZSB0aGUgcmVnZXhwIHByb2dyYW0gdXNlZCB0byBjaGVjayBmb3IgdGhlIGNvbmRpdGlvbi4gKi8KIAkgICAgaWYgKG4gPiAwKQogCSAgICB7Ci0JCXAgPSBidWY7CisJCWJ1ZlswXSA9ICdeJzsJICAgIC8qIGFsd2F5cyBtYXRjaCBhdCBvbmUgcG9zaXRpb24gb25seSAqLworCQlwID0gYnVmICsgMTsKIAkJd2hpbGUgKG4tLSA+IDApCiAJCSAgICAqcCsrID0gZ2V0YyhmZCk7CQkJLyogPGNvbmRzdHI+ICovCiAJCSpwID0gTlVMOwpAQCAtMTYxMiw3NiArMTY0NSwxNDUgQEAKICAgICAgKiAgICAgICAgICAgICA8c2FsZmxhZ3M+IDxzYWxjb3VudD4gPHNhbD4gLi4uCiAgICAgICogICAgICAgICAgICAgPG1hcGxlbj4gPG1hcHN0cj4gKi8KIAotICAgIC8qCi0gICAgICogcm91bmQgMTogcmVwIGl0ZW1zCi0gICAgICogcm91bmQgMjogc2FsIGl0ZW1zCi0gICAgICovCi0gICAgZm9yIChyb3VuZCA9IDE7IHJvdW5kIDw9IDI7ICsrcm91bmQpCisgICAgY250ID0gKGdldGMoZmQpIDw8IDgpICsgZ2V0YyhmZCk7CQkJLyogPHJlcGNvdW50PiAqLworICAgIGlmIChjbnQgPCAwKQorCWdvdG8gZm9ybWVycjsKKworICAgIGdhcCA9ICZscC0+c2xfcmVwOworICAgIGlmIChnYV9ncm93KGdhcCwgY250KSA9PSBGQUlMKQorCWdvdG8gZW5kRkFJTDsKKworICAgIC8qIDxyZXA+IDogPHJlcGZyb21sZW4+IDxyZXBmcm9tPiA8cmVwdG9sZW4+IDxyZXB0bz4gKi8KKyAgICBmb3IgKDsgZ2FwLT5nYV9sZW4gPCBjbnQ7ICsrZ2FwLT5nYV9sZW4pCiAgICAgewotCWlmIChyb3VuZCA9PSAxKQorCWZ0cCA9ICYoKGZyb210b19UICopZ2FwLT5nYV9kYXRhKVtnYXAtPmdhX2xlbl07CisJZm9yIChyciA9IDE7IHJyIDw9IDI7ICsrcnIpCiAJewotCSAgICBnYXAgPSAmbHAtPnNsX3JlcDsKLQkgICAgZmlyc3QgPSBscC0+c2xfcmVwX2ZpcnN0OworCSAgICBjY250ID0gZ2V0YyhmZCk7CisJICAgIGlmIChjY250IDwgMCkKKwkgICAgeworCQlpZiAocnIgPT0gMikKKwkJICAgIHZpbV9mcmVlKGZ0cC0+ZnRfZnJvbSk7CisJCWdvdG8gZm9ybWVycjsKKwkgICAgfQorCSAgICBpZiAoKHAgPSBhbGxvYyhjY250ICsgMSkpID09IE5VTEwpCisJICAgIHsKKwkJaWYgKHJyID09IDIpCisJCSAgICB2aW1fZnJlZShmdHAtPmZ0X2Zyb20pOworCQlnb3RvIGVuZEZBSUw7CisJICAgIH0KKwkgICAgZm9yIChpID0gMDsgaSA8IGNjbnQ7ICsraSkKKwkJcFtpXSA9IGdldGMoZmQpOwkJLyogPHJlcGZyb20+IG9yIDxyZXB0bz4gKi8KKwkgICAgcFtpXSA9IE5VTDsKKwkgICAgaWYgKHJyID09IDEpCisJCWZ0cC0+ZnRfZnJvbSA9IHA7CisJICAgIGVsc2UKKwkJZnRwLT5mdF90byA9IHA7CisJfQorICAgIH0KKworICAgIC8qIEZpbGwgdGhlIGZpcnN0LWluZGV4IHRhYmxlLiAqLworICAgIGZpcnN0ID0gbHAtPnNsX3JlcF9maXJzdDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpCisJZmlyc3RbaV0gPSAtMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZ2FwLT5nYV9sZW47ICsraSkKKyAgICB7CisJZnRwID0gJigoZnJvbXRvX1QgKilnYXAtPmdhX2RhdGEpW2ldOworCWlmIChmaXJzdFsqZnRwLT5mdF9mcm9tXSA9PSAtMSkKKwkgICAgZmlyc3RbKmZ0cC0+ZnRfZnJvbV0gPSBpOworICAgIH0KKworICAgIGkgPSBnZXRjKGZkKTsJCQkJLyogPHNhbGZsYWdzPiAqLworICAgIGlmIChpICYgU0FMX0YwTExPV1VQKQorCWxwLT5zbF9mb2xsb3d1cCA9IFRSVUU7CisgICAgaWYgKGkgJiBTQUxfQ09MTEFQU0UpCisJbHAtPnNsX2NvbGxhcHNlID0gVFJVRTsKKyAgICBpZiAoaSAmIFNBTF9SRU1fQUNDRU5UUykKKwlscC0+c2xfcmVtX2FjY2VudHMgPSBUUlVFOworCisgICAgY250ID0gKGdldGMoZmQpIDw8IDgpICsgZ2V0YyhmZCk7CQkvKiA8c2FsY291bnQ+ICovCisgICAgaWYgKGNudCA8IDApCisJZ290byBmb3JtZXJyOworCisgICAgZ2FwID0gJmxwLT5zbF9zYWw7CisgICAgaWYgKGdhX2dyb3coZ2FwLCBjbnQpID09IEZBSUwpCisJZ290byBlbmRGQUlMOworCisgICAgLyogPHNhbD4gOiA8c2FsZnJvbWxlbj4gPHNhbGZyb20+IDxzYWx0b2xlbj4gPHNhbHRvPiAqLworICAgIGZvciAoOyBnYXAtPmdhX2xlbiA8IGNudDsgKytnYXAtPmdhX2xlbikKKyAgICB7CisJc21wID0gJigoc2FsaXRlbV9UICopZ2FwLT5nYV9kYXRhKVtnYXAtPmdhX2xlbl07CisJY2NudCA9IGdldGMoZmQpOwkJCS8qIDxzYWxmcm9tbGVuPiAqLworCWlmIChjY250IDwgMCkKKwkgICAgZ290byBmb3JtZXJyOworCWlmICgocCA9IGFsbG9jKGNjbnQgKyAyKSkgPT0gTlVMTCkKKwkgICAgZ290byBlbmRGQUlMOworCXNtcC0+c21fbGVhZCA9IHA7CisKKwkvKiBSZWFkIHVwIHRvIHRoZSBmaXJzdCBzcGVjaWFsIGNoYXIgaW50byBzbV9sZWFkLiAqLworCWZvciAoaSA9IDA7IGkgPCBjY250OyArK2kpCisJeworCSAgICBjID0gZ2V0YyhmZCk7CQkJLyogPHNhbGZyb20+ICovCisJICAgIGlmICh2aW1fc3RyY2hyKChjaGFyX3UgKikiMDEyMzQ1Njc4OSgtPF4kIiwgYykgIT0gTlVMTCkKKwkJYnJlYWs7CisJICAgICpwKysgPSBjOworCX0KKwlzbXAtPnNtX2xlYWRsZW4gPSBwIC0gc21wLT5zbV9sZWFkOworCSpwKysgPSBOVUw7CisKKwkvKiBQdXQgb3B0aW9uYWwgY2hhcnMgaW4gc21fb25lb2ZmLCBpZiBhbnkuICovCisJaWYgKGMgPT0gJygnKQorCXsKKwkgICAgc21wLT5zbV9vbmVvZmYgPSBwOworCSAgICBmb3IgKCsraTsgaSA8IGNjbnQ7ICsraSkKKwkgICAgeworCQljID0gZ2V0YyhmZCk7CQkJLyogPHNhbGZyb20+ICovCisJCWlmIChjID09ICcpJykKKwkJICAgIGJyZWFrOworCQkqcCsrID0gYzsKKwkgICAgfQorCSAgICAqcCsrID0gTlVMOworCSAgICBpZiAoKytpIDwgY2NudCkKKwkJYyA9IGdldGMoZmQpOwogCX0KIAllbHNlCisJICAgIHNtcC0+c21fb25lb2ZmID0gTlVMTDsKKworCS8qIEFueSBmb2xsb3dpbmcgY2hhcnMgZ28gaW4gc21fcnVsZXMuICovCisJc21wLT5zbV9ydWxlcyA9IHA7CisJaWYgKGkgPCBjY250KQorCSAgICAqcCsrID0gYzsKKwlmb3IgKCsraTsgaSA8IGNjbnQ7ICsraSkKKwkgICAgKnArKyA9IGdldGMoZmQpOwkJCS8qIDxzYWxmcm9tPiAqLworCSpwKysgPSBOVUw7CisKKwljY250ID0gZ2V0YyhmZCk7CQkJLyogPHNhbHRvbGVuPiAqLworCWlmIChjY250IDwgMCkKIAl7Ci0JICAgIGdhcCA9ICZscC0+c2xfc2FsOwotCSAgICBmaXJzdCA9IGxwLT5zbF9zYWxfZmlyc3Q7Ci0KLQkgICAgaSA9IGdldGMoZmQpOwkJCQkvKiA8c2FsZmxhZ3M+ICovCi0JICAgIGlmIChpICYgU0FMX0YwTExPV1VQKQotCQlscC0+c2xfZm9sbG93dXAgPSBUUlVFOwotCSAgICBpZiAoaSAmIFNBTF9DT0xMQVBTRSkKLQkJbHAtPnNsX2NvbGxhcHNlID0gVFJVRTsKLQkgICAgaWYgKGkgJiBTQUxfUkVNX0FDQ0VOVFMpCi0JCWxwLT5zbF9yZW1fYWNjZW50cyA9IFRSVUU7Ci0JfQotCi0JY250ID0gKGdldGMoZmQpIDw8IDgpICsgZ2V0YyhmZCk7CS8qIDxyZXBjb3VudD4gb3IgPHNhbGNvdW50PiAqLwotCWlmIChjbnQgPCAwKQorCSAgICB2aW1fZnJlZShzbXAtPnNtX2xlYWQpOwogCSAgICBnb3RvIGZvcm1lcnI7Ci0KLQlpZiAoZ2FfZ3JvdyhnYXAsIGNudCkgPT0gRkFJTCkKKwl9CisJaWYgKChwID0gYWxsb2MoY2NudCArIDEpKSA9PSBOVUxMKQorCXsKKwkgICAgdmltX2ZyZWUoc21wLT5zbV9sZWFkKTsKIAkgICAgZ290byBlbmRGQUlMOwotCWZvciAoOyBnYXAtPmdhX2xlbiA8IGNudDsgKytnYXAtPmdhX2xlbikKLQl7Ci0JICAgIC8qIDxyZXA+IDogPHJlcGZyb21sZW4+IDxyZXBmcm9tPiA8cmVwdG9sZW4+IDxyZXB0bz4gKi8KLQkgICAgLyogPHNhbD4gOiA8c2FsZnJvbWxlbj4gPHNhbGZyb20+IDxzYWx0b2xlbj4gPHNhbHRvPiAqLwotCSAgICBmdHAgPSAmKChmcm9tdG9fVCAqKWdhcC0+Z2FfZGF0YSlbZ2FwLT5nYV9sZW5dOwotCSAgICBmb3IgKHJyID0gMTsgcnIgPD0gMjsgKytycikKLQkgICAgewotCQljY250ID0gZ2V0YyhmZCk7Ci0JCWlmIChjY250IDwgMCkKLQkJewotCQkgICAgaWYgKHJyID09IDIpCi0JCQl2aW1fZnJlZShmdHAtPmZ0X2Zyb20pOwotCQkgICAgZ290byBmb3JtZXJyOwotCQl9Ci0JCWlmICgocCA9IGFsbG9jKGNjbnQgKyAxKSkgPT0gTlVMTCkKLQkJewotCQkgICAgaWYgKHJyID09IDIpCi0JCQl2aW1fZnJlZShmdHAtPmZ0X2Zyb20pOwotCQkgICAgZ290byBlbmRGQUlMOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBjY250OyArK2kpCi0JCSAgICBwW2ldID0gZ2V0YyhmZCk7CS8qIDxyZXBmcm9tPiBvciA8c2FsZnJvbT4gKi8KLQkJcFtpXSA9IE5VTDsKLQkJaWYgKHJyID09IDEpCi0JCSAgICBmdHAtPmZ0X2Zyb20gPSBwOwotCQllbHNlCi0JCSAgICBmdHAtPmZ0X3RvID0gcDsKLQkgICAgfQogCX0KKwlzbXAtPnNtX3RvID0gcDsKIAotCS8qIEZpbGwgdGhlIGZpcnN0LWluZGV4IHRhYmxlLiAqLwotCWZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkKLQkgICAgZmlyc3RbaV0gPSAtMTsKLQlmb3IgKGkgPSAwOyBpIDwgZ2FwLT5nYV9sZW47ICsraSkKLQl7Ci0JICAgIGZ0cCA9ICYoKGZyb210b19UICopZ2FwLT5nYV9kYXRhKVtpXTsKLQkgICAgaWYgKGZpcnN0WypmdHAtPmZ0X2Zyb21dID09IC0xKQotCQlmaXJzdFsqZnRwLT5mdF9mcm9tXSA9IGk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjY250OyArK2kpCisJICAgICpwKysgPSBnZXRjKGZkKTsJCQkvKiA8c2FsdG8+ICovCisJKnArKyA9IE5VTDsKKyAgICB9CisKKyAgICAvKiBGaWxsIHRoZSBmaXJzdC1pbmRleCB0YWJsZS4gKi8KKyAgICBmaXJzdCA9IGxwLT5zbF9zYWxfZmlyc3Q7CisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKQorCWZpcnN0W2ldID0gLTE7CisgICAgZm9yIChpID0gMDsgaSA8IGdhcC0+Z2FfbGVuOyArK2kpCisgICAgeworCXNtcCA9ICYoKHNhbGl0ZW1fVCAqKWdhcC0+Z2FfZGF0YSlbaV07CisJaWYgKGZpcnN0WypzbXAtPnNtX2xlYWRdID09IC0xKQorCSAgICBmaXJzdFsqc21wLT5zbV9sZWFkXSA9IGk7CiAgICAgfQogCiAgICAgY250ID0gKGdldGMoZmQpIDw8IDgpICsgZ2V0YyhmZCk7CQkvKiA8bWFwbGVuPiAqLwpAQCAtMjUwOSw3ICsyNjExLDcgQEAKIAkJICAgIC8qIFVzZSBhIG5ldyBudW1iZXIgaW4gdGhlIC5zcGwgZmlsZSBsYXRlciwgdG8gYmUgYWJsZSB0bwogCQkgICAgICogaGFuZGxlIG11bHRpcGxlIC5hZmYgZmlsZXMuICovCiAJCSAgICBpZiAoYWZmLT5hZl9wZnhwb3N0cG9uZSkKLQkJCWN1cl9hZmYtPmFoX25ld0lEID0gc3Bpbi0+c2lfbmV3SUQrKzsKKwkJCWN1cl9hZmYtPmFoX25ld0lEID0gKytzcGluLT5zaV9uZXdJRDsKIAkJfQogCQllbHNlCiAJCSAgICB0cCA9ICZhZmYtPmFmX3N1ZmY7CkBAIC00Nzg0LDE0ICs0ODg2LDEyIEBACiAvKgogICogIno/IjogRmluZCBiYWRseSBzcGVsbGVkIHdvcmQgdW5kZXIgb3IgYWZ0ZXIgdGhlIGN1cnNvci4KICAqIEdpdmUgc3VnZ2VzdGlvbnMgZm9yIHRoZSBwcm9wZXJseSBzcGVsbGVkIHdvcmQuCi0gKiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBtZWNoYW5pc21zIG9mIEFzcGVsbCwgYnV0IGNvbXBsZXRlbHkgcmVpbXBsZW1lbnRlZC4KICAqLwogICAgIHZvaWQKIHNwZWxsX3N1Z2dlc3QoKQogewogICAgIGNoYXJfdQkqbGluZTsKICAgICBwb3NfVAlwcmV2X2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7Ci0gICAgaW50CQlhdHRyOwogICAgIGNoYXJfdQl3Y29weVtNQVhXTEVOICsgMl07CiAgICAgY2hhcl91CSpwOwogICAgIGludAkJaTsKQEAgLTQ3OTksNzYgKzQ4OTksMjMgQEAKICAgICBzdWdpbmZvX1QJc3VnOwogICAgIHN1Z2dlc3RfVAkqc3RwOwogCi0gICAgLyoKLSAgICAgKiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgYmFkbHkgc3BlbGxlZCB3b3JkLgotICAgICAqLworICAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBiYWRseSBzcGVsbGVkIHdvcmQuICovCiAgICAgaWYgKHNwZWxsX21vdmVfdG8oRk9SV0FSRCwgVFJVRSwgVFJVRSkgPT0gRkFJTCkKICAgICB7CiAJYmVlcF9mbHVzaCgpOwogCXJldHVybjsKICAgICB9CiAKLSAgICAvKgotICAgICAqIFNldCB0aGUgaW5mbyBpbiAic3VnIi4KLSAgICAgKi8KLSAgICB2aW1fbWVtc2V0KCZzdWcsIDAsIHNpemVvZihzdWcpKTsKLSAgICBnYV9pbml0Migmc3VnLnN1X2dhLCAoaW50KXNpemVvZihzdWdnZXN0X1QpLCAxMCk7Ci0gICAgaGFzaF9pbml0KCZzdWcuc3VfYmFubmVkKTsKKyAgICAvKiBHZXQgdGhlIHdvcmQgYW5kIGl0cyBsZW5ndGguICovCiAgICAgbGluZSA9IG1sX2dldF9jdXJsaW5lKCk7Ci0gICAgc3VnLnN1X2JhZHB0ciA9IGxpbmUgKyBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKLSAgICBzdWcuc3VfYmFkbGVuID0gc3BlbGxfY2hlY2soY3Vyd2luLCBzdWcuc3VfYmFkcHRyLCAmYXR0cik7Ci0gICAgaWYgKHN1Zy5zdV9iYWRsZW4gPj0gTUFYV0xFTikKLQlzdWcuc3VfYmFkbGVuID0gTUFYV0xFTiAtIDE7CS8qIGp1c3QgaW4gY2FzZSAqLwotICAgIHZpbV9zdHJuY3B5KHN1Zy5zdV9iYWR3b3JkLCBzdWcuc3VfYmFkcHRyLCBzdWcuc3VfYmFkbGVuKTsKLSAgICAodm9pZClzcGVsbF9jYXNlZm9sZChzdWcuc3VfYmFkcHRyLCBzdWcuc3VfYmFkbGVuLAotCQkJCQkJICAgIHN1Zy5zdV9mYmFkd29yZCwgTUFYV0xFTik7CiAKLSAgICAvKiBCYW4gdGhlIGJhZCB3b3JkIGl0c2VsZi4gIEl0IG1heSBhcHBlYXIgaW4gYW5vdGhlciByZWdpb24uICovCi0gICAgYWRkX2Jhbm5lZCgmc3VnLCBzdWcuc3VfYmFkd29yZCk7Ci0KLSAgICAvKgotICAgICAqIDEuIFRyeSBpbnNlcnRpbmcvZGVsZXRpbmcvc3dhcHBpbmcvY2hhbmdpbmcgYSBsZXR0ZXIsIHVzZSBSRVAgZW50cmllcwotICAgICAqICAgIGZyb20gdGhlIC5hZmYgZmlsZSBhbmQgaW5zZXJ0aW5nIGEgc3BhY2UgKHNwbGl0IHRoZSB3b3JkKS4KLSAgICAgKgotICAgICAqIFNldCBhIG1heGltdW0gc2NvcmUgdG8gbGltaXQgdGhlIGNvbWJpbmF0aW9uIG9mIG9wZXJhdGlvbnMgdGhhdCBpcwotICAgICAqIHRyaWVkLgotICAgICAqLwotICAgIHN1Zy5zdV9tYXhzY29yZSA9IFNDT1JFX01BWElOSVQ7Ci0gICAgc3BlbGxfdHJ5X2NoYW5nZSgmc3VnKTsKLQotICAgIC8qCi0gICAgICogMi4gVHJ5IGZpbmRpbmcgc291bmQtYS1saWtlIHdvcmRzLgotICAgICAqCi0gICAgICogT25seSBkbyB0aGlzIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIGxvdCBvZiBzdWdnZXN0aW9ucyB5ZXQsIGJlY2F1c2UgaXQncwotICAgICAqIHZlcnkgc2xvdyBhbmQgb2Z0ZW4gZG9lc24ndCBmaW5kIG5ldyBzdWdnZXN0aW9ucy4KLSAgICAgKi8KLSAgICBpZiAoc3VnLnN1X2dhLmdhX2xlbiA8IFNVR19DTEVBTl9DT1VOVCkKLSAgICB7Ci0JLyogQWxsb3cgYSBoaWdoZXIgc2NvcmUgbm93LiAqLwotCXN1Zy5zdV9tYXhzY29yZSA9IFNDT1JFX01BWE1BWDsKLQlzcGVsbF90cnlfc291bmRhbGlrZSgmc3VnKTsKLSAgICB9Ci0KLSAgICAvKiBXaGVuIENUUkwtQyB3YXMgaGl0IHdoaWxlIHNlYXJjaGluZyBkbyBzaG93IHRoZSByZXN1bHRzLiAqLwotICAgIHVpX2JyZWFrY2hlY2soKTsKLSAgICBpZiAoZ290X2ludCkKLSAgICB7Ci0JKHZvaWQpdmdldGMoKTsKLQlnb3RfaW50ID0gRkFMU0U7Ci0gICAgfQorICAgIC8qIEdldCB0aGUgbGlzdCBvZiBzdWdnZXN0aW9ucyAqLworICAgIHNwZWxsX2ZpbmRfc3VnZ2VzdChsaW5lICsgY3Vyd2luLT53X2N1cnNvci5jb2wsICZzdWcsIChpbnQpUm93cyAtIDIpOwogCiAgICAgaWYgKHN1Zy5zdV9nYS5nYV9sZW4gPT0gMCkKIAlNU0coXygiU29ycnksIG5vIHN1Z2dlc3Rpb25zIikpOwogICAgIGVsc2UKICAgICB7Ci0jaWZkZWYgUkVTQ09SRQotCS8qIERvIHNsb3cgYnV0IG1vcmUgYWNjdXJhdGUgY29tcHV0YXRpb24gb2YgdGhlIHdvcmQgc2NvcmUuICovCi0JcmVzY29yZV9zdWdnZXN0aW9ucygmc3VnKTsKLSNlbmRpZgotCi0JLyogU29ydCB0aGUgc3VnZ2VzdGlvbnMgYW5kIHRydW5jYXRlIGF0IFNVR19QUk9NUFRfQ09VTlQuICovCi0JY2xlYW51cF9zdWdnZXN0aW9ucygmc3VnLCBTVUdfUFJPTVBUX0NPVU5UKTsKLQogCS8qIExpc3QgdGhlIHN1Z2dlc3Rpb25zLiAqLwogCW1zZ19zdGFydCgpOwogCXZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiwgSU9TSVpFLCBfKCJDaGFuZ2UgXCIlLipzXCIgdG86IiksCkBAIC00ODc5LDcgKzQ5MjYsNyBAQAogCW1zZ19zY3JvbGwgPSBUUlVFOwogCWZvciAoaSA9IDA7IGkgPCBzdWcuc3VfZ2EuZ2FfbGVuOyArK2kpCiAJewotCSAgICBzdHAgPSAmU1VHKCZzdWcsIGkpOworCSAgICBzdHAgPSAmU1VHKHN1Zy5zdV9nYSwgaSk7CiAKIAkgICAgLyogVGhlIHN1Z2dlc3RlZCB3b3JkIG1heSByZXBsYWNlIG9ubHkgcGFydCBvZiB0aGUgYmFkIHdvcmQsIGFkZAogCSAgICAgKiB0aGUgbm90IHJlcGxhY2VkIHBhcnQuICovCkBAIC00ODg5LDggKzQ5MzYsMTcgQEAKIAkJCQkJICAgICAgIHN1Zy5zdV9iYWRwdHIgKyBzdHAtPnN0X29yZ2xlbiwKIAkJCQkJICAgICAgc3VnLnN1X2JhZGxlbiAtIHN0cC0+c3Rfb3JnbGVuKTsKIAkgICAgaWYgKHBfdmVyYm9zZSA+IDApCi0JCXZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiwgSU9TSVpFLCBfKCIlMmQgXCIlc1wiICAoJWQpIiksCisJICAgIHsKKwkJaWYgKHNwc19mbGFncyAmIFNQU19ET1VCTEUpCisJCSAgICB2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwKKwkJCV8oIiUyZCBcIiVzXCIgICglcyVkIC0gJWQpIiksCisJCQlpICsgMSwgd2NvcHksCisJCQlzdHAtPnN0X3NhbHNjb3JlID8gInMgIiA6ICIiLAorCQkJc3RwLT5zdF9zY29yZSwgc3RwLT5zdF9hbHRzY29yZSk7CisJCWVsc2UKKwkJICAgIHZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiwgSU9TSVpFLCBfKCIlMmQgXCIlc1wiICAoJWQpIiksCiAJCQkJCQkgaSArIDEsIHdjb3B5LCBzdHAtPnN0X3Njb3JlKTsKKwkgICAgfQogCSAgICBlbHNlCiAJCXZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiwgSU9TSVpFLCBfKCIlMmQgXCIlc1wiIiksCiAJCQkJCQkJCWkgKyAxLCB3Y29weSk7CkBAIC00OTAxLDEwICs0OTU3LDEwIEBACiAKIAkvKiBBc2sgZm9yIGNob2ljZS4gKi8KIAlpID0gcHJvbXB0X2Zvcl9udW1iZXIoKTsKLQlpZiAoaSA+IDAgJiYgaSA8PSBzdWcuc3VfZ2EuZ2FfbGVuICYmIHVfc2F2ZV9jdXJzb3IoKSkKKwlpZiAoaSA+IDAgJiYgaSA8PSBzdWcuc3VfZ2EuZ2FfbGVuICYmIHVfc2F2ZV9jdXJzb3IoKSA9PSBPSykKIAl7CiAJICAgIC8qIFJlcGxhY2UgdGhlIHdvcmQuICovCi0JICAgIHN0cCA9ICZTVUcoJnN1ZywgaSAtIDEpOworCSAgICBzdHAgPSAmU1VHKHN1Zy5zdV9nYSwgaSAtIDEpOwogCSAgICBwID0gYWxsb2MoU1RSTEVOKGxpbmUpIC0gc3RwLT5zdF9vcmdsZW4gKyBTVFJMRU4oc3RwLT5zdF93b3JkKSArIDEpOwogCSAgICBpZiAocCAhPSBOVUxMKQogCSAgICB7CkBAIC00OTE1LDE5ICs0OTcxLDE2OSBAQAogCQltbF9yZXBsYWNlKGN1cndpbi0+d19jdXJzb3IubG51bSwgcCwgRkFMU0UpOwogCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGM7CiAJCWNoYW5nZWRfYnl0ZXMoY3Vyd2luLT53X2N1cnNvci5sbnVtLCBjKTsKKworCQkvKiBGb3IgcmVkbyB3ZSB1c2UgYSBjaGFuZ2Utd29yZCBjb21tYW5kLiAqLworCQlSZXNldFJlZG9idWZmKCk7CisJCUFwcGVuZFRvUmVkb2J1ZmYoKGNoYXJfdSAqKSJjaXciKTsKKwkJQXBwZW5kVG9SZWRvYnVmZihzdHAtPnN0X3dvcmQpOworCQlBcHBlbmRDaGFyVG9SZWRvYnVmZihFU0MpOwogCSAgICB9CiAJfQogCWVsc2UKIAkgICAgY3Vyd2luLT53X2N1cnNvciA9IHByZXZfY3Vyc29yOwogICAgIH0KIAotICAgIC8qIEZyZWUgdGhlIHN1Z2dlc3Rpb25zLiAqLworICAgIHNwZWxsX2ZpbmRfY2xlYW51cCgmc3VnKTsKK30KKworLyoKKyAqIEZpbmQgc3BlbGwgc3VnZ2VzdGlvbnMgZm9yICJ3b3JkIi4gIFJldHVybiB0aGVtIGluIHRoZSBncm93YXJyYXkgIipnYXAiIGFzCisgKiBhIGxpc3Qgb2YgYWxsb2NhdGVkIHN0cmluZ3MuCisgKi8KKyAgICB2b2lkCitzcGVsbF9zdWdnZXN0X2xpc3QoZ2FwLCB3b3JkLCBtYXhjb3VudCkKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGNoYXJfdQkqd29yZDsKKyAgICBpbnQJCW1heGNvdW50OwkvKiBtYXhpbXVtIG5yIG9mIHN1Z2dlc3Rpb25zICovCit7CisgICAgc3VnaW5mb19UCXN1ZzsKKyAgICBpbnQJCWk7CisgICAgc3VnZ2VzdF9UCSpzdHA7CisgICAgY2hhcl91CSp3Y29weTsKKworICAgIHNwZWxsX2ZpbmRfc3VnZ2VzdCh3b3JkLCAmc3VnLCBtYXhjb3VudCk7CisKKyAgICAvKiBNYWtlIHJvb20gaW4gImdhcCIuICovCisgICAgZ2FfaW5pdDIoZ2FwLCBzaXplb2YoY2hhcl91ICopLCBzdWcuc3VfZ2EuZ2FfbGVuICsgMSk7CisgICAgaWYgKGdhX2dyb3coZ2FwLCBzdWcuc3VfZ2EuZ2FfbGVuKSA9PSBGQUlMKQorCXJldHVybjsKKwogICAgIGZvciAoaSA9IDA7IGkgPCBzdWcuc3VfZ2EuZ2FfbGVuOyArK2kpCi0JdmltX2ZyZWUoU1VHKCZzdWcsIGkpLnN0X3dvcmQpOwotICAgIGdhX2NsZWFyKCZzdWcuc3VfZ2EpOworICAgIHsKKwlzdHAgPSAmU1VHKHN1Zy5zdV9nYSwgaSk7CisKKwkvKiBUaGUgc3VnZ2VzdGVkIHdvcmQgbWF5IHJlcGxhY2Ugb25seSBwYXJ0IG9mICJ3b3JkIiwgYWRkIHRoZSBub3QKKwkgKiByZXBsYWNlZCBwYXJ0LiAqLworCXdjb3B5ID0gYWxsb2MoU1RSTEVOKHN0cC0+c3Rfd29yZCkKKwkJCQkrIFNUUkxFTihzdWcuc3VfYmFkcHRyICsgc3RwLT5zdF9vcmdsZW4pICsgMSk7CisJaWYgKHdjb3B5ID09IE5VTEwpCisJICAgIGJyZWFrOworCVNUUkNQWSh3Y29weSwgc3RwLT5zdF93b3JkKTsKKwlTVFJDQVQod2NvcHksIHN1Zy5zdV9iYWRwdHIgKyBzdHAtPnN0X29yZ2xlbik7CisJKChjaGFyX3UgKiopZ2FwLT5nYV9kYXRhKVtnYXAtPmdhX2xlbisrXSA9IHdjb3B5OworICAgIH0KKworICAgIHNwZWxsX2ZpbmRfY2xlYW51cCgmc3VnKTsKK30KKworLyoKKyAqIEZpbmQgc3BlbGwgc3VnZ2VzdGlvbnMgZm9yIHRoZSB3b3JkIGF0IHRoZSBzdGFydCBvZiAiYmFkcHRyIi4KKyAqIFJldHVybiB0aGUgc3VnZ2VzdGlvbnMgaW4gInN1LT5zdV9nYSIuCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgaXMgIm1heGNvdW50Ii4KKyAqIE5vdGU6IGRvZXMgdXNlIGluZm8gZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4KKyAqIFRoaXMgaXMgYmFzZWQgb24gdGhlIG1lY2hhbmlzbXMgb2YgQXNwZWxsLCBidXQgY29tcGxldGVseSByZWltcGxlbWVudGVkLgorICovCisgICAgc3RhdGljIHZvaWQKK3NwZWxsX2ZpbmRfc3VnZ2VzdChiYWRwdHIsIHN1LCBtYXhjb3VudCkKKyAgICBjaGFyX3UJKmJhZHB0cjsKKyAgICBzdWdpbmZvX1QJKnN1OworICAgIGludAkJbWF4Y291bnQ7Cit7CisgICAgaW50CQlhdHRyOworCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIGluZm8gaW4gIipzdSIuCisgICAgICovCisgICAgdmltX21lbXNldChzdSwgMCwgc2l6ZW9mKHN1Z2luZm9fVCkpOworICAgIGdhX2luaXQyKCZzdS0+c3VfZ2EsIChpbnQpc2l6ZW9mKHN1Z2dlc3RfVCksIDEwKTsKKyAgICBnYV9pbml0Migmc3UtPnN1X3NnYSwgKGludClzaXplb2Yoc3VnZ2VzdF9UKSwgMTApOworICAgIGhhc2hfaW5pdCgmc3UtPnN1X2Jhbm5lZCk7CisKKyAgICBzdS0+c3VfYmFkcHRyID0gYmFkcHRyOworICAgIHN1LT5zdV9iYWRsZW4gPSBzcGVsbF9jaGVjayhjdXJ3aW4sIHN1LT5zdV9iYWRwdHIsICZhdHRyKTsKKyAgICBzdS0+c3VfbWF4Y291bnQgPSBtYXhjb3VudDsKKworICAgIGlmIChzdS0+c3VfYmFkbGVuID49IE1BWFdMRU4pCisJc3UtPnN1X2JhZGxlbiA9IE1BWFdMRU4gLSAxOwkvKiBqdXN0IGluIGNhc2UgKi8KKyAgICB2aW1fc3RybmNweShzdS0+c3VfYmFkd29yZCwgc3UtPnN1X2JhZHB0ciwgc3UtPnN1X2JhZGxlbik7CisgICAgKHZvaWQpc3BlbGxfY2FzZWZvbGQoc3UtPnN1X2JhZHB0ciwgc3UtPnN1X2JhZGxlbiwKKwkJCQkJCSAgICBzdS0+c3VfZmJhZHdvcmQsIE1BWFdMRU4pOworCisgICAgLyogQmFuIHRoZSBiYWQgd29yZCBpdHNlbGYuICBJdCBtYXkgYXBwZWFyIGluIGFub3RoZXIgcmVnaW9uLiAqLworICAgIGFkZF9iYW5uZWQoc3UsIHN1LT5zdV9iYWR3b3JkKTsKKworICAgIC8qCisgICAgICogMS4gVHJ5IGluc2VydGluZy9kZWxldGluZy9zd2FwcGluZy9jaGFuZ2luZyBhIGxldHRlciwgdXNlIFJFUCBlbnRyaWVzCisgICAgICogICAgZnJvbSB0aGUgLmFmZiBmaWxlIGFuZCBpbnNlcnRpbmcgYSBzcGFjZSAoc3BsaXQgdGhlIHdvcmQpLgorICAgICAqCisgICAgICogU2V0IGEgbWF4aW11bSBzY29yZSB0byBsaW1pdCB0aGUgY29tYmluYXRpb24gb2Ygb3BlcmF0aW9ucyB0aGF0IGlzCisgICAgICogdHJpZWQuCisgICAgICovCisgICAgc3UtPnN1X21heHNjb3JlID0gU0NPUkVfTUFYSU5JVDsKKyAgICBzcGVsbF90cnlfY2hhbmdlKHN1KTsKKworICAgIC8qIEZvciB0aGUgcmVzdWx0aW5nIHRvcC1zY29yZXJzIGNvbXB1dGUgdGhlIHNvdW5kLWEtbGlrZSBzY29yZS4gKi8KKyAgICBpZiAoc3BzX2ZsYWdzICYgU1BTX0RPVUJMRSkKKwlzY29yZV9jb21wX3NhbChzdSk7CisKKyAgICAvKgorICAgICAqIDIuIFRyeSBmaW5kaW5nIHNvdW5kLWEtbGlrZSB3b3Jkcy4KKyAgICAgKgorICAgICAqIE9ubHkgZG8gdGhpcyB3aGVuIHdlIGRvbid0IGhhdmUgYSBsb3Qgb2Ygc3VnZ2VzdGlvbnMgeWV0LCBiZWNhdXNlIGl0J3MKKyAgICAgKiB2ZXJ5IHNsb3cgYW5kIG9mdGVuIGRvZXNuJ3QgZmluZCBuZXcgc3VnZ2VzdGlvbnMuCisgICAgICovCisgICAgaWYgKChzcHNfZmxhZ3MgJiBTUFNfRE9VQkxFKQorCSAgICB8fCAoIShzcHNfZmxhZ3MgJiBTUFNfRkFTVCkKKwkJCQkgICAgJiYgc3UtPnN1X2dhLmdhX2xlbiA8IFNVR19DTEVBTl9DT1VOVChzdSkpKQorICAgIHsKKwkvKiBBbGxvdyBhIGhpZ2hlciBzY29yZSBub3cuICovCisJc3UtPnN1X21heHNjb3JlID0gU0NPUkVfTUFYTUFYOworCXNwZWxsX3RyeV9zb3VuZGFsaWtlKHN1KTsKKyAgICB9CisKKyAgICAvKiBXaGVuIENUUkwtQyB3YXMgaGl0IHdoaWxlIHNlYXJjaGluZyBkbyBzaG93IHRoZSByZXN1bHRzLiAqLworICAgIHVpX2JyZWFrY2hlY2soKTsKKyAgICBpZiAoZ290X2ludCkKKyAgICB7CisJKHZvaWQpdmdldGMoKTsKKwlnb3RfaW50ID0gRkFMU0U7CisgICAgfQorCisgICAgaWYgKHNwc19mbGFncyAmIFNQU19ET1VCTEUpCisgICAgeworCS8qIENvbWJpbmUgdGhlIHR3byBsaXN0IG9mIHN1Z2dlc3Rpb25zLiAqLworCXNjb3JlX2NvbWJpbmUoc3UpOworICAgIH0KKyAgICBlbHNlIGlmIChzdS0+c3VfZ2EuZ2FfbGVuICE9IDApCisgICAgeworCWlmIChzcHNfZmxhZ3MgJiBTUFNfQkVTVCkKKwkgICAgLyogQWRqdXN0IHRoZSB3b3JkIHNjb3JlIGZvciBob3cgaXQgc291bmRzIGxpa2UuICovCisJICAgIHJlc2NvcmVfc3VnZ2VzdGlvbnMoc3UpOworCisJLyogU29ydCB0aGUgc3VnZ2VzdGlvbnMgYW5kIHRydW5jYXRlIGF0ICJtYXhjb3VudCIuICovCisJKHZvaWQpY2xlYW51cF9zdWdnZXN0aW9ucygmc3UtPnN1X2dhLCBzdS0+c3VfbWF4c2NvcmUsIG1heGNvdW50KTsKKyAgICB9Cit9CisKKy8qCisgKiBGcmVlIHRoZSBpbmZvIHB1dCBpbiAiKnN1IiBieSBzcGVsbF9maW5kX3N1Z2dlc3QoKS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzcGVsbF9maW5kX2NsZWFudXAoc3UpCisgICAgc3VnaW5mb19UCSpzdTsKK3sKKyAgICBpbnQJCWk7CisKKyAgICAvKiBGcmVlIHRoZSBzdWdnZXN0aW9ucy4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgc3UtPnN1X2dhLmdhX2xlbjsgKytpKQorCXZpbV9mcmVlKFNVRyhzdS0+c3VfZ2EsIGkpLnN0X3dvcmQpOworICAgIGdhX2NsZWFyKCZzdS0+c3VfZ2EpOworICAgIGZvciAoaSA9IDA7IGkgPCBzdS0+c3Vfc2dhLmdhX2xlbjsgKytpKQorCXZpbV9mcmVlKFNVRyhzdS0+c3Vfc2dhLCBpKS5zdF93b3JkKTsKKyAgICBnYV9jbGVhcigmc3UtPnN1X3NnYSk7CiAKICAgICAvKiBGcmVlIHRoZSBiYW5uZWQgd29yZHMuICovCi0gICAgZnJlZV9iYW5uZWQoJnN1Zyk7CisgICAgZnJlZV9iYW5uZWQoc3UpOwogfQogCiAvKgpAQCAtNTA1OCwxMyArNTI2NCw2IEBACiAgICAgZm9yIChscCA9IExBTkdQX0VOVFJZKGN1cndpbi0+d19idWZmZXItPmJfbGFuZ3AsIDApOwogCQkJCQkJICAgbHAtPmxwX3NsYW5nICE9IE5VTEw7ICsrbHApCiAgICAgewotI2lmZGVmIFNPVU5ERk9MRF9TQ09SRQotCXN1LT5zdV9zbGFuZyA9IGxwLT5scF9zbGFuZzsKLQlpZiAobHAtPmxwX3NsYW5nLT5zbF9zYWwuZ2FfbGVuID4gMCkKLQkgICAgLyogc291bmRmb2xkIHRoZSBiYWQgd29yZCAqLwotCSAgICBzcGVsbF9zb3VuZGZvbGQobHAtPmxwX3NsYW5nLCBzdS0+c3VfZmJhZHdvcmQsIHN1LT5zdV9zYWx3b3JkKTsKLSNlbmRpZgotCiAJLyoKIAkgKiBHbyB0aHJvdWdoIHRoZSB3aG9sZSBjYXNlLWZvbGQgdHJlZSwgdHJ5IGNoYW5nZXMgYXQgZWFjaCBub2RlLgogCSAqICJ0d29yZFtdIiBjb250YWlucyB0aGUgd29yZCBjb2xsZWN0ZWQgZnJvbSBub2RlcyBpbiB0aGUgdHJlZS4KQEAgLTUxNjAsMTEgKzUzNTksOCBAQAogCQlpZiAoZndvcmRbc3AtPnRzX2ZpZHhdID09IDApCiAJCXsKIAkJICAgIC8qIFRoZSBiYWR3b3JkIGFsc28gZW5kczogYWRkIHN1Z2dlc3Rpb25zLCAqLwotCQkgICAgYWRkX3N1Z2dlc3Rpb24oc3UsIHByZXdvcmQsIHNwLT50c19zY29yZSArIG5ld3Njb3JlCi0jaWZkZWYgUkVTQ09SRQotCQkJICAgICwgRkFMU0UKLSNlbmRpZgotCQkJICAgICk7CisJCSAgICBhZGRfc3VnZ2VzdGlvbihzdSwgJnN1LT5zdV9nYSwgcHJld29yZCwKKwkJCQkJICAgICAgc3AtPnRzX3Njb3JlICsgbmV3c2NvcmUsIEZBTFNFKTsKIAkJfQogCQllbHNlIGlmIChzcC0+dHNfZmlkeCA+PSBzcC0+dHNfZmlkeHRyeQogI2lmZGVmIEZFQVRfTUJZVEUKQEAgLTU3NTcsOSArNTk1MywxMCBAQAogCSAgICBkZWZhdWx0OgogCQkvKiBEaWQgYWxsIHBvc3NpYmxlIHN0YXRlcyBhdCB0aGlzIGxldmVsLCBnbyB1cCBvbmUgbGV2ZWwuICovCiAJCS0tZGVwdGg7Ci0JICAgIH0KIAotCSAgICBsaW5lX2JyZWFrY2hlY2soKTsKKwkJLyogRG9uJ3QgY2hlY2sgZm9yIENUUkwtQyB0b28gb2Z0ZW4sIGl0IHRha2VzIHRpbWUuICovCisJCWxpbmVfYnJlYWtjaGVjaygpOworCSAgICB9CiAJfQogICAgIH0KIH0KQEAgLTU5NTAsNiArNjE0NywxNjggQEAKIH0KIAogLyoKKyAqIENvbXB1dGUgdGhlIHNvdW5kLWEtbGlrZSBzY29yZSBmb3Igc3VnZ2VzdGlvbnMgaW4gc3UtPnN1X2dhIGFuZCBhZGQgdGhlbSB0bworICogc3UtPnN1X3NnYS4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzY29yZV9jb21wX3NhbChzdSkKKyAgICBzdWdpbmZvX1QJKnN1OworeworICAgIGxhbmdwX1QJKmxwOworICAgIGNoYXJfdQliYWRzb3VuZFtNQVhXTEVOXTsKKyAgICBpbnQJCWk7CisgICAgc3VnZ2VzdF9UICAgKnN0cDsKKyAgICBzdWdnZXN0X1QgICAqc3N0cDsKKyAgICBjaGFyX3UJZndvcmRbTUFYV0xFTl07CisgICAgY2hhcl91CWdvb2Rzb3VuZFtNQVhXTEVOXTsKKyAgICBpbnQJCXNjb3JlOworCisgICAgaWYgKGdhX2dyb3coJnN1LT5zdV9zZ2EsIHN1LT5zdV9nYS5nYV9sZW4pID09IEZBSUwpCisJcmV0dXJuOworCisgICAgLyoJVXNlIHRoZSBzb3VuZC1mb2xkaW5nIG9mIHRoZSBmaXJzdCBsYW5ndWFnZSB0aGF0IHN1cHBvcnRzIGl0LiAqLworICAgIGZvciAobHAgPSBMQU5HUF9FTlRSWShjdXJ3aW4tPndfYnVmZmVyLT5iX2xhbmdwLCAwKTsKKwkJCQkJCSAgIGxwLT5scF9zbGFuZyAhPSBOVUxMOyArK2xwKQorCWlmIChscC0+bHBfc2xhbmctPnNsX3NhbC5nYV9sZW4gPiAwKQorCXsKKwkgICAgLyogc291bmRmb2xkIHRoZSBiYWQgd29yZCAqLworCSAgICBzcGVsbF9zb3VuZGZvbGQobHAtPmxwX3NsYW5nLCBzdS0+c3VfZmJhZHdvcmQsIGJhZHNvdW5kKTsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgc3UtPnN1X2dhLmdhX2xlbjsgKytpKQorCSAgICB7CisJCXN0cCA9ICZTVUcoc3UtPnN1X2dhLCBpKTsKKworCQkvKiBDYXNlLWZvbGQgdGhlIHN1Z2dlc3RlZCB3b3JkIGFuZCBzb3VuZC1mb2xkIGl0LiAqLworCQkodm9pZClzcGVsbF9jYXNlZm9sZChzdHAtPnN0X3dvcmQsIFNUUkxFTihzdHAtPnN0X3dvcmQpLAorCQkJCQkJCSAgICAgIGZ3b3JkLCBNQVhXTEVOKTsKKwkJc3BlbGxfc291bmRmb2xkKGxwLT5scF9zbGFuZywgZndvcmQsIGdvb2Rzb3VuZCk7CisJCXNjb3JlID0gc291bmRhbGlrZV9zY29yZShnb29kc291bmQsIGJhZHNvdW5kKTsKKwkJaWYgKHNjb3JlIDwgU0NPUkVfTUFYTUFYKQorCQl7CisJCSAgICAvKiBBZGQgdGhlIHN1Z2dlc3Rpb24uICovCisJCSAgICBzc3RwID0gJlNVRyhzdS0+c3Vfc2dhLCBzdS0+c3Vfc2dhLmdhX2xlbik7CisJCSAgICBzc3RwLT5zdF93b3JkID0gdmltX3N0cnNhdmUoc3RwLT5zdF93b3JkKTsKKwkJICAgIGlmIChzc3RwLT5zdF93b3JkICE9IE5VTEwpCisJCSAgICB7CisJCQlzc3RwLT5zdF9zY29yZSA9IHNjb3JlOworCQkJc3N0cC0+c3RfYWx0c2NvcmUgPSAwOworCQkJc3N0cC0+c3Rfb3JnbGVuID0gc3RwLT5zdF9vcmdsZW47CisJCQkrK3N1LT5zdV9zZ2EuZ2FfbGVuOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorfQorCisvKgorICogQ29tYmluZSB0aGUgbGlzdCBvZiBzdWdnZXN0aW9ucyBpbiBzdS0+c3VfZ2EgYW5kIHN1LT5zdV9zZ2EuCisgKiBUaGV5IGFyZSBpbnR3aW5lZC4KKyAqLworICAgIHN0YXRpYyB2b2lkCitzY29yZV9jb21iaW5lKHN1KQorICAgIHN1Z2luZm9fVAkqc3U7Cit7CisgICAgaW50CQlpOworICAgIGludAkJajsKKyAgICBnYXJyYXlfVAlnYTsKKyAgICBnYXJyYXlfVAkqZ2FwOworICAgIGxhbmdwX1QJKmxwOworICAgIHN1Z2dlc3RfVAkqc3RwOworICAgIGNoYXJfdQkqcDsKKyAgICBjaGFyX3UJYmFkc291bmRbTUFYV0xFTl07CisgICAgY2hhcl91CWdvb2Rzb3VuZFtNQVhXTEVOXTsKKyAgICBjaGFyX3UJZndvcmRbTUFYV0xFTl07CisgICAgaW50CQlyb3VuZDsKKworICAgIC8qIEFkZCB0aGUgYWx0ZXJuYXRlIHNjb3JlIHRvIHN1X2dhLiAqLworICAgIGZvciAobHAgPSBMQU5HUF9FTlRSWShjdXJ3aW4tPndfYnVmZmVyLT5iX2xhbmdwLCAwKTsKKwkJCQkJCSAgIGxwLT5scF9zbGFuZyAhPSBOVUxMOyArK2xwKQorICAgIHsKKwlpZiAobHAtPmxwX3NsYW5nLT5zbF9zYWwuZ2FfbGVuID4gMCkKKwl7CisJICAgIC8qIHNvdW5kZm9sZCB0aGUgYmFkIHdvcmQgKi8KKwkgICAgc3BlbGxfc291bmRmb2xkKGxwLT5scF9zbGFuZywgc3UtPnN1X2ZiYWR3b3JkLCBiYWRzb3VuZCk7CisKKwkgICAgZm9yIChpID0gMDsgaSA8IHN1LT5zdV9nYS5nYV9sZW47ICsraSkKKwkgICAgeworCQlzdHAgPSAmU1VHKHN1LT5zdV9nYSwgaSk7CisKKwkJLyogQ2FzZS1mb2xkIHRoZSB3b3JkLCBzb3VuZC1mb2xkIHRoZSB3b3JkIGFuZCBjb21wdXRlIHRoZQorCQkgKiBzY29yZSBmb3IgdGhlIGRpZmZlcmVuY2UuICovCisJCSh2b2lkKXNwZWxsX2Nhc2Vmb2xkKHN0cC0+c3Rfd29yZCwgU1RSTEVOKHN0cC0+c3Rfd29yZCksCisJCQkJCQkJICBmd29yZCwgTUFYV0xFTik7CisJCXNwZWxsX3NvdW5kZm9sZChscC0+bHBfc2xhbmcsIGZ3b3JkLCBnb29kc291bmQpOworCQlzdHAtPnN0X2FsdHNjb3JlID0gc291bmRhbGlrZV9zY29yZShnb29kc291bmQsIGJhZHNvdW5kKTsKKwkJaWYgKHN0cC0+c3RfYWx0c2NvcmUgPT0gU0NPUkVfTUFYTUFYKQorCQkgICAgc3RwLT5zdF9zY29yZSA9IChzdHAtPnN0X3Njb3JlICogMyArIFNDT1JFX0JJRykgLyA0OworCQllbHNlCisJCSAgICBzdHAtPnN0X3Njb3JlID0gKHN0cC0+c3Rfc2NvcmUgKiAzCisJCQkJCQkgICsgc3RwLT5zdF9hbHRzY29yZSkgLyA0OworCQlzdHAtPnN0X3NhbHNjb3JlID0gRkFMU0U7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIC8qIEFkZCB0aGUgYWx0ZXJuYXRlIHNjb3JlIHRvIHN1X3NnYS4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgc3UtPnN1X3NnYS5nYV9sZW47ICsraSkKKyAgICB7CisJc3RwID0gJlNVRyhzdS0+c3Vfc2dhLCBpKTsKKwlzdHAtPnN0X2FsdHNjb3JlID0gc3BlbGxfZWRpdF9zY29yZShzdS0+c3VfYmFkd29yZCwgc3RwLT5zdF93b3JkKTsKKwlpZiAoc3RwLT5zdF9zY29yZSA9PSBTQ09SRV9NQVhNQVgpCisJICAgIHN0cC0+c3Rfc2NvcmUgPSAoU0NPUkVfQklHICogNyArIHN0cC0+c3RfYWx0c2NvcmUpIC8gODsKKwllbHNlCisJICAgIHN0cC0+c3Rfc2NvcmUgPSAoc3RwLT5zdF9zY29yZSAqIDcgKyBzdHAtPnN0X2FsdHNjb3JlKSAvIDg7CisJc3RwLT5zdF9zYWxzY29yZSA9IFRSVUU7CisgICAgfQorCisgICAgLyogU29ydCB0aGUgc3VnZ2VzdGlvbnMgYW5kIHRydW5jYXRlIGF0ICJtYXhjb3VudCIgZm9yIGJvdGggbGlzdHMuICovCisgICAgKHZvaWQpY2xlYW51cF9zdWdnZXN0aW9ucygmc3UtPnN1X2dhLCBzdS0+c3VfbWF4c2NvcmUsIHN1LT5zdV9tYXhjb3VudCk7CisgICAgKHZvaWQpY2xlYW51cF9zdWdnZXN0aW9ucygmc3UtPnN1X3NnYSwgc3UtPnN1X21heHNjb3JlLCBzdS0+c3VfbWF4Y291bnQpOworCisgICAgZ2FfaW5pdDIoJmdhLCAoaW50KXNpemVvZihzdWdpbmZvX1QpLCAxKTsKKyAgICBpZiAoZ2FfZ3JvdygmZ2EsIHN1LT5zdV9nYS5nYV9sZW4gKyBzdS0+c3Vfc2dhLmdhX2xlbikgPT0gRkFJTCkKKwlyZXR1cm47CisKKyAgICBzdHAgPSAmU1VHKGdhLCAwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3UtPnN1X2dhLmdhX2xlbiB8fCBpIDwgc3UtPnN1X3NnYS5nYV9sZW47ICsraSkKKyAgICB7CisJLyogcm91bmQgMTogZ2V0IGEgc3VnZ2VzdGlvbiBmcm9tIHN1X2dhCisJICogcm91bmQgMjogZ2V0IGEgc3VnZ2VzdGlvbiBmcm9tIHN1X3NnYSAqLworCWZvciAocm91bmQgPSAxOyByb3VuZCA8PSAyOyArK3JvdW5kKQorCXsKKwkgICAgZ2FwID0gcm91bmQgPT0gMSA/ICZzdS0+c3VfZ2EgOiAmc3UtPnN1X3NnYTsKKwkgICAgaWYgKGkgPCBnYXAtPmdhX2xlbikKKwkgICAgeworCQkvKiBEb24ndCBhZGQgYSB3b3JkIGlmIGl0J3MgYWxyZWFkeSB0aGVyZS4gKi8KKwkJcCA9IFNVRygqZ2FwLCBpKS5zdF93b3JkOworCQlmb3IgKGogPSAwOyBqIDwgZ2EuZ2FfbGVuOyArK2opCisJCSAgICBpZiAoU1RSQ01QKHN0cFtqXS5zdF93b3JkLCBwKSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChqID09IGdhLmdhX2xlbikKKwkJICAgIHN0cFtnYS5nYV9sZW4rK10gPSBTVUcoKmdhcCwgaSk7CisJCWVsc2UKKwkJICAgIHZpbV9mcmVlKHApOworCSAgICB9CisJfQorICAgIH0KKworICAgIGdhX2NsZWFyKCZzdS0+c3VfZ2EpOworICAgIGdhX2NsZWFyKCZzdS0+c3Vfc2dhKTsKKworICAgIC8qIFRydW5jYXRlIHRoZSBsaXN0IHRvIHRoZSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZC4gKi8KKyAgICBpZiAoZ2EuZ2FfbGVuID4gc3UtPnN1X21heGNvdW50KQorICAgIHsKKwlmb3IgKGkgPSBzdS0+c3VfbWF4Y291bnQ7IGkgPCBnYS5nYV9sZW47ICsraSkKKwkgICAgdmltX2ZyZWUoc3RwW2ldLnN0X3dvcmQpOworCWdhLmdhX2xlbiA9IHN1LT5zdV9tYXhjb3VudDsKKyAgICB9CisKKyAgICBzdS0+c3VfZ2EgPSBnYTsKK30KKworLyoKICAqIEZpbmQgc3VnZ2VzdGlvbnMgYnkgY29tcGFyaW5nIHRoZSB3b3JkIGluIGEgc291bmQtYS1saWtlIGZvcm0uCiAgKi8KICAgICBzdGF0aWMgdm9pZApAQCAtNTk3MCw5ICs2MzI5LDkgQEAKICAgICBpZHhfVAluOwogICAgIGludAkJcm91bmQ7CiAgICAgaW50CQlmbGFnczsKLSAgICBpbnQJCXNjb3JlLCBzb3VuZF9zY29yZTsKLSAgICBjaGFyX3UJKmJwLCAqc3A7CisgICAgaW50CQlzb3VuZF9zY29yZTsKIAorICAgIC8qIERvIHRoaXMgZm9yIGFsbCBsYW5ndWFnZXMgdGhhdCBzdXBwb3J0IHNvdW5kIGZvbGRpbmcuICovCiAgICAgZm9yIChscCA9IExBTkdQX0VOVFJZKGN1cndpbi0+d19idWZmZXItPmJfbGFuZ3AsIDApOwogCQkJCQkJICAgbHAtPmxwX3NsYW5nICE9IE5VTEw7ICsrbHApCiAgICAgewpAQCAtNjAzMyw0MCArNjM5MiwxNSBAQAogCQkJCQkJCSAgICB0ZndvcmQsIHRzYWx3b3JkKTsKIAkJCQl9CiAKLQkJCQkvKgotCQkJCSAqIEFjY2VwdCB0aGUgd29yZCBpZiB0aGUgc291bmQtZm9sZGVkIHdvcmRzCi0JCQkJICogYXJlIChhbG1vc3QpIGVxdWFsLgotCQkJCSAqLwotCQkJCWZvciAoYnAgPSBzYWx3b3JkLCBzcCA9IHRzYWx3b3JkOyAqYnAgPT0gKnNwOwotCQkJCQkJCQkgICArK2JwLCArK3NwKQotCQkJCSAgICBpZiAoKmJwID09IE5VTCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAoKmJwID09ICpzcCkKLQkJCQkgICAgLyogZXF1YWwgKi8KLQkJCQkgICAgc291bmRfc2NvcmUgPSAwOwotCQkJCWVsc2UgaWYgKCpicCAhPSBOVUwgJiYgYnBbMV0gIT0gTlVMCi0JCQkJCSYmICpicCA9PSBzcFsxXSAmJiBicFsxXSA9PSAqc3AKLQkJCQkJICAgICAgICYmIFNUUkNNUChicCArIDIsIHNwICsgMikgPT0gMCkKLQkJCQkgICAgLyogc3dhcCB0d28gYnl0ZXMgKi8KLQkJCQkgICAgc291bmRfc2NvcmUgPSBTQ09SRV9TV0FQOwotCQkJCWVsc2UgaWYgKFNUUkNNUChicCArIDEsIHNwKSA9PSAwKQotCQkJCSAgICAvKiBkZWxldGUgYnl0ZSAqLwotCQkJCSAgICBzb3VuZF9zY29yZSA9IFNDT1JFX0RFTDsKLQkJCQllbHNlIGlmIChTVFJDTVAoYnAsIHNwICsgMSkgPT0gMCkKLQkJCQkgICAgLyogaW5zZXJ0IGJ5dGUgKi8KLQkJCQkgICAgc291bmRfc2NvcmUgPSBTQ09SRV9JTlM7Ci0JCQkJZWxzZSBpZiAoU1RSQ01QKGJwICsgMSwgc3AgKyAxKSA9PSAwKQotCQkJCSAgICAvKiBza2lwIG9uZSBieXRlICovCi0JCQkJICAgIHNvdW5kX3Njb3JlID0gU0NPUkVfU1VCU1Q7Ci0JCQkJZWxzZQotCQkJCSAgICAvKiBub3QgZXF1YWwgb3Igc2ltaWxhciAqLwotCQkJCSAgICBzb3VuZF9zY29yZSA9IFNDT1JFX01BWE1BWDsKLQorCQkJCS8qIENvbXB1dGUgdGhlIGVkaXQgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKwkJCQkgKiBzb3VuZC1hLWxpa2Ugd29yZHMuICovCisJCQkJc291bmRfc2NvcmUgPSBzb3VuZGFsaWtlX3Njb3JlKHNhbHdvcmQsCisJCQkJCQkJCSAgICB0c2Fsd29yZCk7CiAJCQkJaWYgKHNvdW5kX3Njb3JlIDwgU0NPUkVfTUFYTUFYKQogCQkJCXsKIAkJCQkgICAgY2hhcl91CWN3b3JkW01BWFdMRU5dOwogCQkJCSAgICBjaGFyX3UJKnA7CisJCQkJICAgIGludAkJc2NvcmU7CiAKIAkJCQkgICAgaWYgKHJvdW5kID09IDEgJiYgZmxhZ3MgIT0gMCkKIAkJCQkgICAgewpAQCAtNjA3OCwxOCArNjQxMiwyNSBAQAogCQkJCSAgICBlbHNlCiAJCQkJCXAgPSB0d29yZDsKIAotCQkJCSAgICAvKiBDb21wdXRlIHRoZSBzY29yZS4gKi8KLQkJCQkgICAgc2NvcmUgPSBzcGVsbF9lZGl0X3Njb3JlKHN1LT5zdV9iYWR3b3JkLCBwKTsKLSNpZmRlZiBSRVNDT1JFCi0JCQkJICAgIC8qIGdpdmUgYSBib251cyBmb3IgdGhlIGdvb2Qgd29yZCBzb3VuZGluZwotCQkJCSAgICAgKiB0aGUgc2FtZSBhcyB0aGUgYmFkIHdvcmQgKi8KLQkJCQkgICAgYWRkX3N1Z2dlc3Rpb24oc3UsIHR3b3JkLAotCQkJCQkJIFJFU0NPUkUoc2NvcmUsIHNvdW5kX3Njb3JlKSwKKwkJCQkgICAgaWYgKHNwc19mbGFncyAmIFNQU19ET1VCTEUpCisJCQkJCWFkZF9zdWdnZXN0aW9uKHN1LCAmc3UtPnN1X3NnYSwgcCwKKwkJCQkJCQkgIHNvdW5kX3Njb3JlLCBGQUxTRSk7CisJCQkJICAgIGVsc2UKKwkJCQkgICAgeworCQkJCQkvKiBDb21wdXRlIHRoZSBzY29yZS4gKi8KKwkJCQkJc2NvcmUgPSBzcGVsbF9lZGl0X3Njb3JlKAorCQkJCQkJCSAgIHN1LT5zdV9iYWR3b3JkLCBwKTsKKwkJCQkJaWYgKHNwc19mbGFncyAmIFNQU19CRVNUKQorCQkJCQkgICAgLyogZ2l2ZSBhIGJvbnVzIGZvciB0aGUgZ29vZCB3b3JkCisJCQkJCSAgICAgKiBzb3VuZGluZyB0aGUgc2FtZSBhcyB0aGUgYmFkCisJCQkJCSAgICAgKiB3b3JkICovCisJCQkJCSAgICBhZGRfc3VnZ2VzdGlvbihzdSwgJnN1LT5zdV9nYSwgcCwKKwkJCQkJCSAgUkVTQ09SRShzY29yZSwgc291bmRfc2NvcmUpLAogCQkJCQkJCQkJVFJVRSk7Ci0jZWxzZQotCQkJCSAgICBhZGRfc3VnZ2VzdGlvbihzdSwgdHdvcmQsCi0JCQkJCQkJIHNjb3JlICsgc291bmRfc2NvcmUpOwotI2VuZGlmCisJCQkJCWVsc2UKKwkJCQkJICAgIGFkZF9zdWdnZXN0aW9uKHN1LCAmc3UtPnN1X2dhLCBwLAorCQkJCQkJICBzY29yZSArIHNvdW5kX3Njb3JlLCBGQUxTRSk7CisJCQkJICAgIH0KIAkJCQl9CiAJCQkgICAgfQogCkBAIC02Mjc1LDI0ICs2NjE2LDE1IEBACiAgKiB3aXRoIHNwZWxsX2VkaXRfc2NvcmUoKS4KICAqLwogICAgIHN0YXRpYyB2b2lkCi1hZGRfc3VnZ2VzdGlvbihzdSwgZ29vZHdvcmQsIHNjb3JlCi0jaWZkZWYgUkVTQ09SRQotCSAgICAsIGhhZF9ib251cwotI2VuZGlmCi0JICAgICkKK2FkZF9zdWdnZXN0aW9uKHN1LCBnYXAsIGdvb2R3b3JkLCBzY29yZSwgaGFkX2JvbnVzKQogICAgIHN1Z2luZm9fVAkqc3U7CisgICAgZ2FycmF5X1QJKmdhcDsKICAgICBjaGFyX3UJKmdvb2R3b3JkOwogICAgIGludAkJc2NvcmU7Ci0jaWZkZWYgUkVTQ09SRQotICAgIGludAkJaGFkX2JvbnVzOwkvKiBzZXQgc3RfaGFkX2JvbnVzICovCi0jZW5kaWYKKyAgICBpbnQJCWhhZF9ib251czsJLyogdmFsdWUgZm9yIHN0X2hhZF9ib251cyAqLwogewogICAgIHN1Z2dlc3RfVCAgICpzdHA7CiAgICAgaW50CQlpOwotI2lmZGVmIFNPVU5ERk9MRF9TQ09SRQotICAgIGNoYXJfdQlmd29yZFtNQVhXTEVOXTsKLSAgICBjaGFyX3UJc2Fsd29yZFtNQVhXTEVOXTsKLSNlbmRpZgogCiAgICAgLyogQ2hlY2sgdGhhdCB0aGUgd29yZCB3YXNuJ3QgYmFubmVkLiAqLwogICAgIGlmICh3YXNfYmFubmVkKHN1LCBnb29kd29yZCkpCkBAIC02MzAwLDQ3ICs2NjMyLDM4IEBACiAKICAgICBpZiAoc2NvcmUgPD0gc3UtPnN1X21heHNjb3JlKQogICAgIHsKLSNpZmRlZiBTT1VOREZPTERfU0NPUkUKLQkvKiBBZGQgdG8gdGhlIHNjb3JlIHdoZW4gdGhlIHdvcmQgc291bmRzIGRpZmZlcmVudGx5LgotCSAqIFRoaXMgaXMgc2xvdy4uLiAqLwotCWlmIChzdS0+c3Vfc2xhbmctPnNsX3NhbC5nYV9sZW4gPiAwKQotCSAgICBzY29yZSArPSBzcGVsbF9zb3VuZF9zY29yZShzdS0+c3Vfc2xhbmcsIGZ3b3JkLCBzdS0+c3Vfc2Fsd29yZCk7Ci0jZW5kaWYKLQogCS8qIENoZWNrIGlmIHRoZSB3b3JkIGlzIGFscmVhZHkgdGhlcmUuICovCi0Jc3RwID0gJlNVRyhzdSwgMCk7Ci0JZm9yIChpID0gc3UtPnN1X2dhLmdhX2xlbiAtIDE7IGkgPj0gMDsgLS1pKQorCXN0cCA9ICZTVUcoKmdhcCwgMCk7CisJZm9yIChpID0gZ2FwLT5nYV9sZW4gLSAxOyBpID49IDA7IC0taSkKIAkgICAgaWYgKFNUUkNNUChzdHBbaV0uc3Rfd29yZCwgZ29vZHdvcmQpID09IDApCiAJICAgIHsKIAkJLyogRm91bmQgaXQuICBSZW1lbWJlciB0aGUgbG93ZXN0IHNjb3JlLiAqLwogCQlpZiAoc3RwW2ldLnN0X3Njb3JlID4gc2NvcmUpCiAJCXsKIAkJICAgIHN0cFtpXS5zdF9zY29yZSA9IHNjb3JlOwotI2lmZGVmIFJFU0NPUkUKIAkJICAgIHN0cFtpXS5zdF9oYWRfYm9udXMgPSBoYWRfYm9udXM7Ci0jZW5kaWYKIAkJfQogCQlicmVhazsKIAkgICAgfQogCi0JaWYgKGkgPCAwICYmIGdhX2dyb3coJnN1LT5zdV9nYSwgMSkgPT0gT0spCisJaWYgKGkgPCAwICYmIGdhX2dyb3coZ2FwLCAxKSA9PSBPSykKIAl7CiAJICAgIC8qIEFkZCBhIHN1Z2dlc3Rpb24uICovCi0JICAgIHN0cCA9ICZTVUcoc3UsIHN1LT5zdV9nYS5nYV9sZW4pOworCSAgICBzdHAgPSAmU1VHKCpnYXAsIGdhcC0+Z2FfbGVuKTsKIAkgICAgc3RwLT5zdF93b3JkID0gdmltX3N0cnNhdmUoZ29vZHdvcmQpOwogCSAgICBpZiAoc3RwLT5zdF93b3JkICE9IE5VTEwpCiAJICAgIHsKIAkJc3RwLT5zdF9zY29yZSA9IHNjb3JlOwotI2lmZGVmIFJFU0NPUkUKKwkJc3RwLT5zdF9hbHRzY29yZSA9IDA7CiAJCXN0cC0+c3RfaGFkX2JvbnVzID0gaGFkX2JvbnVzOwotI2VuZGlmCiAJCXN0cC0+c3Rfb3JnbGVuID0gc3UtPnN1X2JhZGxlbjsKLQkJKytzdS0+c3VfZ2EuZ2FfbGVuOworCQkrK2dhcC0+Z2FfbGVuOwogCiAJCS8qIElmIHdlIGhhdmUgdG9vIG1hbnkgc3VnZ2VzdGlvbnMgbm93LCBzb3J0IHRoZSBsaXN0IGFuZCBrZWVwCiAJCSAqIHRoZSBiZXN0IHN1Z2dlc3Rpb25zLiAqLwotCQlpZiAoc3UtPnN1X2dhLmdhX2xlbiA+IFNVR19NQVhfQ09VTlQpCi0JCSAgICBjbGVhbnVwX3N1Z2dlc3Rpb25zKHN1LCBTVUdfQ0xFQU5fQ09VTlQpOworCQlpZiAoZ2FwLT5nYV9sZW4gPiBTVUdfTUFYX0NPVU5UKHN1KSkKKwkJICAgIHN1LT5zdV9tYXhzY29yZSA9IGNsZWFudXBfc3VnZ2VzdGlvbnMoZ2FwLCBzdS0+c3VfbWF4c2NvcmUsCisJCQkJCQkJIFNVR19DTEVBTl9DT1VOVChzdSkpOwogCSAgICB9CiAJfQogICAgIH0KQEAgLTY0MDIsNyArNjcyNSw2IEBACiAgICAgaGFzaF9jbGVhcigmc3UtPnN1X2Jhbm5lZCk7CiB9CiAKLSNpZmRlZiBSRVNDT1JFCiAvKgogICogUmVjb21wdXRlIHRoZSBzY29yZSBpZiBzb3VuZC1mb2xkaW5nIGlzIHBvc3NpYmxlLiAgVGhpcyBpcyBzbG93LAogICogdGh1cyBvbmx5IGRvbmUgZm9yIHRoZSBmaW5hbCByZXN1bHRzLgpAQCAtNjQyNyw3ICs2NzQ5LDcgQEAKIAogCSAgICBmb3IgKGkgPSAwOyBpIDwgc3UtPnN1X2dhLmdhX2xlbjsgKytpKQogCSAgICB7Ci0JCXN0cCA9ICZTVUcoc3UsIGkpOworCQlzdHAgPSAmU1VHKHN1LT5zdV9nYSwgaSk7CiAJCWlmICghc3RwLT5zdF9oYWRfYm9udXMpCiAJCXsKIAkJICAgIHNjb3JlID0gc3BlbGxfc291bmRfc2NvcmUobHAtPmxwX3NsYW5nLCBzdHAtPnN0X3dvcmQsCkBAIC02NDM5LDcgKzY3NjEsNiBAQAogCX0KICAgICB9CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludAogI2lmZGVmIF9fQk9STEFORENfXwpAQCAtNjQ2MCwzNSArNjc4MSw0MCBAQAogewogICAgIHN1Z2dlc3RfVAkqcDEgPSAoc3VnZ2VzdF9UICopczE7CiAgICAgc3VnZ2VzdF9UCSpwMiA9IChzdWdnZXN0X1QgKilzMjsKKyAgICBpbnQJCW4gPSBwMS0+c3Rfc2NvcmUgLSBwMi0+c3Rfc2NvcmU7CiAKLSAgICByZXR1cm4gcDEtPnN0X3Njb3JlIC0gcDItPnN0X3Njb3JlOworICAgIGlmIChuID09IDApCisJcmV0dXJuIHAxLT5zdF9hbHRzY29yZSAtIHAyLT5zdF9hbHRzY29yZTsKKyAgICByZXR1cm4gbjsKIH0KIAogLyoKICAqIENsZWFudXAgdGhlIHN1Z2dlc3Rpb25zOgogICogLSBTb3J0IG9uIHNjb3JlLgogICogLSBSZW1vdmUgd29yZHMgdGhhdCB3b24ndCBiZSBkaXNwbGF5ZWQuCisgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHNjb3JlIGluIHRoZSBsaXN0IG9yICJtYXhzY29yZSIgdW5tb2RpZmllZC4KICAqLwotICAgIHN0YXRpYyB2b2lkCi1jbGVhbnVwX3N1Z2dlc3Rpb25zKHN1LCBrZWVwKQotICAgIHN1Z2luZm9fVAkqc3U7CisgICAgc3RhdGljIGludAorY2xlYW51cF9zdWdnZXN0aW9ucyhnYXAsIG1heHNjb3JlLCBrZWVwKQorICAgIGdhcnJheV9UCSpnYXA7CisgICAgaW50CQltYXhzY29yZTsKICAgICBpbnQJCWtlZXA7CQkvKiBuciBvZiBzdWdnZXN0aW9ucyB0byBrZWVwICovCiB7Ci0gICAgc3VnZ2VzdF9UICAgKnN0cCA9ICZTVUcoc3UsIDApOworICAgIHN1Z2dlc3RfVCAgICpzdHAgPSAmU1VHKCpnYXAsIDApOwogICAgIGludAkJaTsKIAogICAgIC8qIFNvcnQgdGhlIGxpc3QuICovCi0gICAgcXNvcnQoc3UtPnN1X2dhLmdhX2RhdGEsIChzaXplX3Qpc3UtPnN1X2dhLmdhX2xlbiwKLQkJCQkJICAgICAgc2l6ZW9mKHN1Z2dlc3RfVCksIHN1Z19jb21wYXJlKTsKKyAgICBxc29ydChnYXAtPmdhX2RhdGEsIChzaXplX3QpZ2FwLT5nYV9sZW4sIHNpemVvZihzdWdnZXN0X1QpLCBzdWdfY29tcGFyZSk7CiAKICAgICAvKiBUcnVuY2F0ZSB0aGUgbGlzdCB0byB0aGUgbnVtYmVyIG9mIHN1Z2dlc3Rpb25zIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuICovCi0gICAgaWYgKHN1LT5zdV9nYS5nYV9sZW4gPiBrZWVwKQorICAgIGlmIChnYXAtPmdhX2xlbiA+IGtlZXApCiAgICAgewotCWZvciAoaSA9IGtlZXA7IGkgPCBzdS0+c3VfZ2EuZ2FfbGVuOyArK2kpCisJZm9yIChpID0ga2VlcDsgaSA8IGdhcC0+Z2FfbGVuOyArK2kpCiAJICAgIHZpbV9mcmVlKHN0cFtpXS5zdF93b3JkKTsKLQlzdS0+c3VfZ2EuZ2FfbGVuID0ga2VlcDsKLQlzdS0+c3VfbWF4c2NvcmUgPSBzdHBba2VlcCAtIDFdLnN0X3Njb3JlOworCWdhcC0+Z2FfbGVuID0ga2VlcDsKKwlyZXR1cm4gc3RwW2tlZXAgLSAxXS5zdF9zY29yZTsKICAgICB9CisgICAgcmV0dXJuIG1heHNjb3JlOwogfQogCiAvKgpAQCAtNjUwMCw3ICs2ODI2LDcgQEAKICAgICBjaGFyX3UJKmlud29yZDsKICAgICBjaGFyX3UJKnJlczsKIHsKLSAgICBmcm9tdG9fVAkqZnRwOworICAgIHNhbGl0ZW1fVAkqc21wOwogICAgIGNoYXJfdQl3b3JkW01BWFdMRU5dOwogI2lmZGVmIEZFQVRfTUJZVEUKICAgICBpbnQJCWw7CkBAIC02NTA4LDcgKzY4MzQsOSBAQAogI2VuZGlmCiAgICAgY2hhcl91CSpzOwogICAgIGNoYXJfdQkqdDsKKyAgICBjaGFyX3UJKnBmOwogICAgIGludAkJaSwgaiwgejsKKyAgICBpbnQJCXJlc2xlbjsKICAgICBpbnQJCW4sIGsgPSAwOwogICAgIGludAkJejA7CiAgICAgaW50CQlrMDsKQEAgLTY1MjYsNyArNjg1NCwxMCBAQAogCWZvciAocyA9IGlud29yZDsgKnMgIT0gTlVMOyApCiAJewogCSAgICBpZiAodmltX2lzd2hpdGUoKnMpKQotCQkqdCsrID0gKnMrKzsKKwkgICAgeworCQkqdCsrID0gJyAnOworCQlzID0gc2tpcHdoaXRlKHMpOworCSAgICB9CiAjaWZkZWYgRkVBVF9NQllURQogCSAgICBlbHNlIGlmIChoYXNfbWJ5dGUpCiAJICAgIHsKQEAgLTY1NzQsNTUgKzY5MDUsNTMgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIGZ0cCA9IChmcm9tdG9fVCAqKXNsYW5nLT5zbF9zYWwuZ2FfZGF0YTsKKyAgICBzbXAgPSAoc2FsaXRlbV9UICopc2xhbmctPnNsX3NhbC5nYV9kYXRhOwogCiAgICAgLyoKICAgICAgKiBUaGlzIGNvbWVzIGZyb20gQXNwZWxsIHBob25ldC5jcHAuICBDb252ZXJ0ZWQgZnJvbSBDKysgdG8gQy4KICAgICAgKiBDaGFuZ2VkIHRvIGtlZXAgc3BhY2VzLgogICAgICAqIFRPRE86IHN1cHBvcnQgZm9yIG11bHRpLWJ5dGUgY2hhcnMuCiAgICAgICovCi0gICAgaSA9IGogPSB6ID0gMDsKKyAgICBpID0gcmVzbGVuID0geiA9IDA7CiAgICAgd2hpbGUgKChjID0gd29yZFtpXSkgIT0gTlVMKQogICAgIHsKKwkvKiBTdGFydCB3aXRoIHRoZSBmaXJzdCBydWxlIHRoYXQgaGFzIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIHdvcmQuICovCiAJbiA9IHNsYW5nLT5zbF9zYWxfZmlyc3RbY107CiAJejAgPSAwOwogCiAJaWYgKG4gPj0gMCkKIAl7CiAJICAgIC8qIGNoZWNrIGFsbCBydWxlcyBmb3IgdGhlIHNhbWUgbGV0dGVyICovCi0JICAgIHdoaWxlIChmdHBbbl0uZnRfZnJvbVswXSA9PSBjKQorCSAgICBmb3IgKDsgKHMgPSBzbXBbbl0uc21fbGVhZClbMF0gPT0gYzsgKytuKQogCSAgICB7Ci0JCS8qIGNoZWNrIHdob2xlIHN0cmluZyAqLwotCQlrID0gMTsgICAvKiBudW1iZXIgb2YgZm91bmQgbGV0dGVycyAqLwotCQlwcmkgPSA1OyAgIC8qIGRlZmF1bHQgcHJpb3JpdHkgKi8KLQkJcyA9IGZ0cFtuXS5mdF9mcm9tOwotCQlzKys7ICAgICAvKiBpbXBvcnRhbnQgZm9yIChzZWUgYmVsb3cpICAiKihzLTEpIiAqLwotCi0JCS8qIFNraXAgb3ZlciBub3JtYWwgbGV0dGVycyB0aGF0IG1hdGNoIHdpdGggdGhlIHdvcmQuICovCi0JCXdoaWxlICgqcyAhPSBOVUwgJiYgd29yZFtpICsga10gPT0gKnMKLQkJCSYmICF2aW1faXNkaWdpdCgqcykgJiYgc3RyY2hyKCIoLTxeJCIsICpzKSA9PSBOVUxMKQorCQkvKiBRdWlja2x5IHNraXAgZW50cmllcyB0aGF0IGRvbid0IG1hdGNoIHRoZSB3b3JkLiAgTW9zdAorCQkgKiBlbnRyaWVzIGFyZSBsZXNzIHRoZW4gdGhyZWUgY2hhcnMsIG9wdGltaXplIGZvciB0aGF0LiAqLworCQlrID0gc21wW25dLnNtX2xlYWRsZW47CisJCWlmIChrID4gMSkKIAkJewotCQkgICAgaysrOwotCQkgICAgcysrOworCQkgICAgaWYgKHdvcmRbaSArIDFdICE9IHNbMV0pCisJCQljb250aW51ZTsKKwkJICAgIGlmIChrID4gMikKKwkJICAgIHsKKwkJCWZvciAoaiA9IDI7IGogPCBrOyArK2opCisJCQkgICAgaWYgKHdvcmRbaSArIGpdICE9IHNbal0pCisJCQkJYnJlYWs7CisJCQlpZiAoaiA8IGspCisJCQkgICAgY29udGludWU7CisJCSAgICB9CiAJCX0KIAotCQlpZiAoKnMgPT0gJygnKQorCQlpZiAoKHBmID0gc21wW25dLnNtX29uZW9mZikgIT0gTlVMTCkKIAkJewotCQkgICAgLyogY2hlY2sgYWx0ZXJuYXRlIGxldHRlcnMgaW4gIiguLikiICovCi0JCSAgICBmb3IgKHQgPSBzICsgMTsgKnQgIT0gJyknICYmICp0ICE9IE5VTDsgKyt0KQotCQkJaWYgKCp0ID09IHdvcmRbaSArIGtdKQotCQkJewotCQkJICAgIC8qIG1hdGNoICovCi0JCQkgICAgKytrOwotCQkJICAgIGZvciAocyA9IHQgKyAxOyAqcyAhPSBOVUw7ICsrcykKLQkJCQlpZiAoKnMgPT0gJyknKQotCQkJCXsKLQkJCQkgICAgKytzOwotCQkJCSAgICBicmVhazsKLQkJCQl9Ci0JCQkgICAgYnJlYWs7Ci0JCQl9CisJCSAgICAvKiBDaGVjayBmb3IgbWF0Y2ggd2l0aCBvbmUgb2YgdGhlIGNoYXJzIGluICJzbV9vbmVvZmYiLiAqLworCQkgICAgd2hpbGUgKCpwZiAhPSBOVUwgJiYgKnBmICE9IHdvcmRbaSArIGtdKQorCQkJKytwZjsKKwkJICAgIGlmICgqcGYgPT0gTlVMKQorCQkJY29udGludWU7CisJCSAgICArK2s7CiAJCX0KKwkJcyA9IHNtcFtuXS5zbV9ydWxlczsKKwkJcHJpID0gNTsgICAgLyogZGVmYXVsdCBwcmlvcml0eSAqLwogCiAJCXAwID0gKnM7CiAJCWswID0gazsKQEAgLTY2MzMsNyArNjk2Miw3IEBACiAJCX0KIAkJaWYgKCpzID09ICc8JykKIAkJICAgIHMrKzsKLQkJaWYgKHZpbV9pc2RpZ2l0KCpzKSkKKwkJaWYgKFZJTV9JU0RJR0lUKCpzKSkKIAkJewogCQkgICAgLyogZGV0ZXJtaW5lIHByaW9yaXR5ICovCiAJCSAgICBwcmkgPSAqcyAtICcwJzsKQEAgLTY2NTgsNTAgKzY5ODcsNTIgQEAKIAkJICAgIG4wID0gc2xhbmctPnNsX3NhbF9maXJzdFtjMF07CiAKIAkJICAgIGlmIChzbGFuZy0+c2xfZm9sbG93dXAgJiYgayA+IDEgJiYgbjAgPj0gMAotCQkJICAgICYmIHAwICE9ICctJyAmJiB3b3JkW2kgKyBrXSAhPSBOVUwpCisJCQkJCSAgICYmIHAwICE9ICctJyAmJiB3b3JkW2kgKyBrXSAhPSBOVUwpCiAJCSAgICB7CiAJCQkvKiB0ZXN0IGZvbGxvdy11cCBydWxlIGZvciAid29yZFtpICsga10iICovCi0JCQl3aGlsZSAoZnRwW24wXS5mdF9mcm9tWzBdID09IGMwKQorCQkJZm9yICggOyAocyA9IHNtcFtuMF0uc21fbGVhZClbMF0gPT0gYzA7ICsrbjApCiAJCQl7CisJCQkgICAgLyogUXVpY2tseSBza2lwIGVudHJpZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgd29yZC4KKwkJCSAgICAgKiAqLworCQkJICAgIGswID0gc21wW24wXS5zbV9sZWFkbGVuOworCQkJICAgIGlmIChrMCA+IDEpCisJCQkgICAgeworCQkJCWlmICh3b3JkW2kgKyBrXSAhPSBzWzFdKQorCQkJCSAgICBjb250aW51ZTsKKwkJCQlpZiAoazAgPiAyKQorCQkJCXsKKwkJCQkgICAgcGYgPSB3b3JkICsgaSArIGsgKyAxOworCQkJCSAgICBmb3IgKGogPSAyOyBqIDwgazA7ICsraikKKwkJCQkJaWYgKCpwZisrICE9IHNbal0pCisJCQkJCSAgICBicmVhazsKKwkJCQkgICAgaWYgKGogPCBrMCkKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJICAgIH0KKwkJCSAgICBrMCArPSBrIC0gMTsKIAotCQkJICAgIC8qIGNoZWNrIHdob2xlIHN0cmluZyAqLwotCQkJICAgIGswID0gazsKKwkJCSAgICBpZiAoKHBmID0gc21wW24wXS5zbV9vbmVvZmYpICE9IE5VTEwpCisJCQkgICAgeworCQkJCS8qIENoZWNrIGZvciBtYXRjaCB3aXRoIG9uZSBvZiB0aGUgY2hhcnMgaW4KKwkJCQkgKiAic21fb25lb2ZmIi4gKi8KKwkJCQl3aGlsZSAoKnBmICE9IE5VTCAmJiAqcGYgIT0gd29yZFtpICsgazBdKQorCQkJCSAgICArK3BmOworCQkJCWlmICgqcGYgPT0gTlVMKQorCQkJCSAgICBjb250aW51ZTsKKwkJCQkrK2swOworCQkJICAgIH0KKwogCQkJICAgIHAwID0gNTsKLQkJCSAgICBzID0gZnRwW24wXS5mdF9mcm9tOwotCQkJICAgIHMrKzsKLQkJCSAgICB3aGlsZSAoKnMgIT0gTlVMICYmIHdvcmRbaStrMF0gPT0gKnMKLQkJCQkgICAgJiYgIXZpbV9pc2RpZ2l0KCpzKQotCQkJCQkJJiYgc3RyY2hyKCIoLTxeJCIsKnMpID09IE5VTEwpCi0JCQkgICAgewotCQkJCWswKys7Ci0JCQkJcysrOwotCQkJICAgIH0KLQkJCSAgICBpZiAoKnMgPT0gJygnKQotCQkJICAgIHsKLQkJCQkvKiBjaGVjayBhbHRlcm5hdGUgbGV0dGVycyBpbiAiKC4uKSIgKi8KLQkJCQlmb3IgKHQgPSBzICsgMTsgKnQgIT0gJyknICYmICp0ICE9IE5VTDsgKyt0KQotCQkJCSAgICBpZiAoKnQgPT0gd29yZFtpICsgazBdKQotCQkJCSAgICB7Ci0JCQkJCS8qIG1hdGNoICovCi0JCQkJCSsrazA7Ci0JCQkJCWZvciAocyA9IHQgKyAxOyAqcyAhPSBOVUw7ICsrcykKLQkJCQkJICAgIGlmICgqcyA9PSAnKScpCi0JCQkJCSAgICB7Ci0JCQkJCQkrK3M7Ci0JCQkJCQlicmVhazsKLQkJCQkJICAgIH0KLQkJCQkJYnJlYWs7Ci0JCQkJICAgIH0KLQkJCSAgICB9CisJCQkgICAgcyA9IHNtcFtuMF0uc21fcnVsZXM7CiAJCQkgICAgd2hpbGUgKCpzID09ICctJykKIAkJCSAgICB7Ci0JCQkJLyogImswIiBnZXRzIE5PVCByZWR1Y2VkICAqLwotCQkJCS8qIGJlY2F1c2UgImlmIChrMCA9PSBrKSIgKi8KKwkJCQkvKiAiazAiIGdldHMgTk9UIHJlZHVjZWQgYmVjYXVzZQorCQkJCSAqICJpZiAoazAgPT0gaykiICovCiAJCQkJcysrOwogCQkJICAgIH0KIAkJCSAgICBpZiAoKnMgPT0gJzwnKQogCQkJCXMrKzsKLQkJCSAgICBpZiAodmltX2lzZGlnaXQoKnMpKQorCQkJICAgIGlmIChWSU1fSVNESUdJVCgqcykpCiAJCQkgICAgewogCQkJCXAwID0gKnMgLSAnMCc7CiAJCQkJcysrOwpAQCAtNjcxMyw0MiArNzA0NCwzMSBAQAogCQkJCQkgICAgJiYgIVNQRUxMX0lTV09SRFAod29yZCArIGkgKyBrMCkpKQogCQkJICAgIHsKIAkJCQlpZiAoazAgPT0gaykKLQkJCQl7CiAJCQkJICAgIC8qIHRoaXMgaXMganVzdCBhIHBpZWNlIG9mIHRoZSBzdHJpbmcgKi8KLQkJCQkgICAgKytuMDsKIAkJCQkgICAgY29udGludWU7Ci0JCQkJfQogCiAJCQkJaWYgKHAwIDwgcHJpKQotCQkJCXsKIAkJCQkgICAgLyogcHJpb3JpdHkgdG9vIGxvdyAqLwotCQkJCSAgICArK24wOwogCQkJCSAgICBjb250aW51ZTsKLQkJCQl9CiAJCQkJLyogcnVsZSBmaXRzOyBzdG9wIHNlYXJjaCAqLwogCQkJCWJyZWFrOwogCQkJICAgIH0KLQkJCSAgICArK24wOwogCQkJfQogCi0JCQlpZiAocDAgPj0gcHJpICYmIGZ0cFtuMF0uZnRfZnJvbVswXSA9PSBjMCkKLQkJCXsKLQkJCSAgICArK247CisJCQlpZiAocDAgPj0gcHJpICYmIHNtcFtuMF0uc21fbGVhZFswXSA9PSBjMCkKIAkJCSAgICBjb250aW51ZTsKLQkJCX0KIAkJICAgIH0KIAogCQkgICAgLyogcmVwbGFjZSBzdHJpbmcgKi8KLQkJICAgIHMgPSBmdHBbbl0uZnRfdG87Ci0JCSAgICBwMCA9IChmdHBbbl0uZnRfZnJvbVswXSAhPSBOVUwKLQkJCSAgICAmJiB2aW1fc3RyY2hyKGZ0cFtuXS5mdF9mcm9tICsgMSwKLQkJCQkJCQknPCcpICE9IE5VTEwpID8gMSA6IDA7CisJCSAgICBzID0gc21wW25dLnNtX3RvOworCQkgICAgcGYgPSBzbXBbbl0uc21fcnVsZXM7CisJCSAgICBwMCA9ICh2aW1fc3RyY2hyKHBmLCAnPCcpICE9IE5VTEwpID8gMSA6IDA7CiAJCSAgICBpZiAocDAgPT0gMSAmJiB6ID09IDApCiAJCSAgICB7CiAJCQkvKiBydWxlIHdpdGggJzwnIGlzIHVzZWQgKi8KLQkJCWlmIChqID4gMCAmJiAqcyAhPSBOVUwKLQkJCQkmJiAocmVzW2ogLSAxXSA9PSBjIHx8IHJlc1tqIC0gMV0gPT0gKnMpKQotCQkJICAgIGotLTsKKwkJCWlmIChyZXNsZW4gPiAwICYmICpzICE9IE5VTCAmJiAocmVzW3Jlc2xlbiAtIDFdID09IGMKKwkJCQkJCSAgICB8fCByZXNbcmVzbGVuIC0gMV0gPT0gKnMpKQorCQkJICAgIHJlc2xlbi0tOwogCQkJejAgPSAxOwogCQkJeiA9IDE7CiAJCQlrMCA9IDA7CkBAIC02NzcwLDI1ICs3MDkwLDIzIEBACiAJCQkvKiBubyAnPCcgcnVsZSB1c2VkICovCiAJCQlpICs9IGsgLSAxOwogCQkJeiA9IDA7Ci0JCQl3aGlsZSAoKnMgIT0gTlVMICYmIHNbMV0gIT0gTlVMICYmIGogPCBNQVhXTEVOKQorCQkJd2hpbGUgKCpzICE9IE5VTCAmJiBzWzFdICE9IE5VTCAmJiByZXNsZW4gPCBNQVhXTEVOKQogCQkJewotCQkJICAgIGlmIChqID09IDAgfHwgcmVzW2ogLSAxXSAhPSAqcykKKwkJCSAgICBpZiAocmVzbGVuID09IDAgfHwgcmVzW3Jlc2xlbiAtIDFdICE9ICpzKQogCQkJICAgIHsKLQkJCQlyZXNbal0gPSAqczsKLQkJCQlqKys7CisJCQkJcmVzW3Jlc2xlbl0gPSAqczsKKwkJCQlyZXNsZW4rKzsKIAkJCSAgICB9CiAJCQkgICAgcysrOwogCQkJfQogCQkJLyogbmV3ICJhY3R1YWwgbGV0dGVyIiAqLwogCQkJYyA9ICpzOwotCQkJaWYgKGZ0cFtuXS5mdF9mcm9tWzBdICE9IE5VTAotCQkJCQkgJiYgc3Ryc3RyKChjaGFyICopZnRwW25dLmZ0X2Zyb20gKyAxLAotCQkJCQkJCQkiXl4iKSAhPSBOVUxMKQorCQkJaWYgKHN0cnN0cigoY2hhciAqKXBmLCAiXl4iKSAhPSBOVUxMKQogCQkJewogCQkJICAgIGlmIChjICE9IE5VTCkKIAkJCSAgICB7Ci0JCQkJcmVzW2pdID0gYzsKLQkJCQlqKys7CisJCQkJcmVzW3Jlc2xlbl0gPSBjOworCQkJCXJlc2xlbisrOwogCQkJICAgIH0KIAkJCSAgICBtY2hfbWVtbW92ZSh3b3JkLCB3b3JkICsgaSArIDEsCiAJCQkJCQkgICAgU1RSTEVOKHdvcmQgKyBpICsgMSkgKyAxKTsKQEAgLTY3OTgsNyArNzExNiw2IEBACiAJCSAgICB9CiAJCSAgICBicmVhazsKIAkJfQotCQkrK247CiAJICAgIH0KIAl9CiAJZWxzZSBpZiAodmltX2lzd2hpdGUoYykpCkBAIC02ODA5LDEyICs3MTI2LDEzIEBACiAKIAlpZiAoejAgPT0gMCkKIAl7Ci0JICAgIGlmIChrICYmICFwMCAmJiBqIDwgTUFYV0xFTiAmJiBjICE9IE5VTAotCQkgICAgJiYgKCFzbGFuZy0+c2xfY29sbGFwc2UgfHwgaiA9PSAwIHx8IHJlc1tqIC0gMV0gIT0gYykpCisJICAgIGlmIChrICYmICFwMCAmJiByZXNsZW4gPCBNQVhXTEVOICYmIGMgIT0gTlVMCisJCSAgICAmJiAoIXNsYW5nLT5zbF9jb2xsYXBzZSB8fCByZXNsZW4gPT0gMAorCQkJCQkJICAgICB8fCByZXNbcmVzbGVuIC0gMV0gIT0gYykpCiAJICAgIHsKIAkJLyogY29uZGVuc2Ugb25seSBkb3VibGUgbGV0dGVycyAqLwotCQlyZXNbal0gPSBjOwotCQlqKys7CisJCXJlc1tyZXNsZW5dID0gYzsKKwkJcmVzbGVuKys7CiAJICAgIH0KIAogCSAgICBpKys7CkBAIC02ODIzLDEwICs3MTQxLDkgQEAKIAl9CiAgICAgfQogCi0gICAgcmVzW2pdID0gTlVMOworICAgIHJlc1tyZXNsZW5dID0gTlVMOwogfQogCi0jaWYgZGVmaW5lZChSRVNDT1JFKSB8fCBkZWZpbmVkKFNPVU5ERk9MRF9TQ09SRSkKIC8qCiAgKiBSZXR1cm4gdGhlIHNjb3JlIGZvciBob3cgbXVjaCB3b3JkcyBzb3VuZCBkaWZmZXJlbnQuCiAgKi8KQEAgLTY4NDAsMTMgKzcxNTcsMTQgQEAKICAgICBjaGFyX3UJZ29vZHNvdW5kW01BWFdMRU5dOwogICAgIGludAkJc2NvcmU7CiAKLSAgICAvKiBDYXNlLWZvbGQgdGhlIHdvcmQsIG5lZWRlZCBmb3Igc291bmQgZm9sZGluZy4gKi8KKyAgICAvKiBDYXNlLWZvbGQgdGhlIGdvb2R3b3JkLCBuZWVkZWQgZm9yIHNvdW5kIGZvbGRpbmcuICovCiAgICAgKHZvaWQpc3BlbGxfY2FzZWZvbGQoZ29vZHdvcmQsIFNUUkxFTihnb29kd29yZCksIGZ3b3JkLCBNQVhXTEVOKTsKIAotICAgIC8qIHNvdW5kLWZvbGQgdGhlIGdvb2Qgd29yZCAqLworICAgIC8qIHNvdW5kLWZvbGQgdGhlIGdvb2R3b3JkICovCiAgICAgc3BlbGxfc291bmRmb2xkKHNsYW5nLCBmd29yZCwgZ29vZHNvdW5kKTsKIAotICAgIC8qIGNvbXB1dGUgdGhlIGVkaXQgZGlzdGFuY2Utc2NvcmUgb2YgdGhlIHNvdW5kcyAqLworICAgIC8qIENvbXB1dGUgdGhlIGVkaXQgZGlzdGFuY2Utc2NvcmUgb2YgdGhlIHNvdW5kcy4gIFRoaXMgaXMgc2xvdyBidXQgd2UKKyAgICAgKiBvbmx5IGRvIGl0IGZvciBhIHNtYWxsIG51bWJlciBvZiB3b3Jkcy4gKi8KICAgICBzY29yZSA9IHNwZWxsX2VkaXRfc2NvcmUoYmFkc291bmQsIGdvb2Rzb3VuZCk7CiAKICAgICAvKiBDb3JyZWN0aW9uOiBhZGRpbmcvaW5zZXJ0aW5nICIqIiBhdCB0aGUgc3RhcnQgKHdvcmQgc3RhcnRzIHdpdGggdm93ZWwpCkBAIC02ODU3LDExICs3MTc1LDIwNyBAQAogCiAgICAgcmV0dXJuIHNjb3JlOwogfQotI2VuZGlmCisKKy8qCisgKiBDb21wdXRlIGEgc2NvcmUgZm9yIHR3byBzb3VuZC1hLWxpa2Ugd29yZHMuCisgKiBUaGlzIHBlcm1pdHMgdXAgdG8gdHdvIGluc2VydHMvZGVsZXRlcy9zd2Fwcy9ldGMuIHRvIGtlZXAgdGhpbmdzIGZhc3QuCisgKiBJbnN0ZWFkIG9mIGEgZ2VuZXJpYyBsb29wIHdlIHdyaXRlIG91dCB0aGUgY29kZS4gIFRoYXQga2VlcHMgaXQgZmFzdCBieQorICogYXZvaWRpbmcgY2hlY2tzIHRoYXQgd2lsbCBub3QgYmUgcG9zc2libGUuCisgKi8KKyAgICBzdGF0aWMgaW50Citzb3VuZGFsaWtlX3Njb3JlKGdvb2Rzb3VuZCwgYmFkc291bmQpCisgICAgY2hhcl91CSpnb29kc291bmQ7CS8qIHNvdW5kLWZvbGRlZCBnb29kIHdvcmQgKi8KKyAgICBjaGFyX3UJKmJhZHNvdW5kOwkvKiBzb3VuZC1mb2xkZWQgYmFkIHdvcmQgKi8KK3sKKyAgICBpbnQJCWdvb2RsZW4gPSBTVFJMRU4oZ29vZHNvdW5kKTsKKyAgICBpbnQJCWJhZGxlbiA9IFNUUkxFTihiYWRzb3VuZCk7CisgICAgaW50CQluOworICAgIGNoYXJfdQkqcGwsICpwczsKKyAgICBjaGFyX3UJKnBsMiwgKnBzMjsKKworICAgIC8qIFJldHVybiBxdWlja2x5IGlmIHRoZSBsZW5naHRzIGFyZSB0b28gZGlmZmVyZW50IHRvIGJlIGZpeGVkIGJ5IHR3bworICAgICAqIGNoYW5nZXMuICovCisgICAgbiA9IGdvb2RsZW4gLSBiYWRsZW47CisgICAgaWYgKG4gPCAtMiB8fCBuID4gMikKKwlyZXR1cm4gU0NPUkVfTUFYTUFYOworCisgICAgaWYgKG4gPiAwKQorICAgIHsKKwlwbCA9IGdvb2Rzb3VuZDsJICAgIC8qIGxvbmdlc3QgKi8KKwlwcyA9IGJhZHNvdW5kOworICAgIH0KKyAgICBlbHNlCisgICAgeworCXBsID0gYmFkc291bmQ7CSAgICAvKiBsb25nZXN0ICovCisJcHMgPSBnb29kc291bmQ7CisgICAgfQorCisgICAgLyogU2tpcCBvdmVyIHRoZSBpZGVudGljYWwgcGFydC4gKi8KKyAgICB3aGlsZSAoKnBsID09ICpwcyAmJiAqcGwgIT0gTlVMKQorICAgIHsKKwkrK3BsOworCSsrcHM7CisgICAgfQorCisgICAgc3dpdGNoIChuKQorICAgIHsKKwljYXNlIC0yOgorCWNhc2UgMjoKKwkgICAgLyoKKwkgICAgICogTXVzdCBkZWxldGUgdHdvIGNoYXJhY3RlcnMgZnJvbSAicGwiLgorCSAgICAgKi8KKwkgICAgKytwbDsJLyogZmlyc3QgZGVsZXRlICovCisJICAgIHdoaWxlICgqcGwgPT0gKnBzKQorCSAgICB7CisJCSsrcGw7CisJCSsrcHM7CisJICAgIH0KKwkgICAgLyogc3RyaW5ncyBtdXN0IGJlIGVxdWFsIGFmdGVyIHNlY29uZCBkZWxldGUgKi8KKwkgICAgaWYgKFNUUkNNUChwbCArIDEsIHBzKSA9PSAwKQorCQlyZXR1cm4gU0NPUkVfREVMICogMjsKKworCSAgICAvKiBGYWlsZWQgdG8gY29tcGFyZS4gKi8KKwkgICAgYnJlYWs7CisKKwljYXNlIC0xOgorCWNhc2UgMToKKwkgICAgLyoKKwkgICAgICogTWluaW1hbCBvbmUgZGVsZXRlIGZyb20gInBsIiByZXF1aXJlZC4KKwkgICAgICovCisKKwkgICAgLyogMTogZGVsZXRlICovCisJICAgIHBsMiA9IHBsICsgMTsKKwkgICAgcHMyID0gcHM7CisJICAgIHdoaWxlICgqcGwyID09ICpwczIpCisJICAgIHsKKwkJaWYgKCpwbDIgPT0gTlVMKQkvKiByZWFjaGVkIHRoZSBlbmQgKi8KKwkJICAgIHJldHVybiBTQ09SRV9ERUw7CisJCSsrcGwyOworCQkrK3BzMjsKKwkgICAgfQorCisJICAgIC8qIDI6IGRlbGV0ZSB0aGVuIHN3YXAsIHRoZW4gcmVzdCBtdXN0IGJlIGVxdWFsICovCisJICAgIGlmIChwbDJbMF0gPT0gcHMyWzFdICYmIHBsMlsxXSA9PSBwczJbMF0KKwkJCQkJICAgICAmJiBTVFJDTVAocGwyICsgMiwgcHMyICsgMikgPT0gMCkKKwkJcmV0dXJuIFNDT1JFX0RFTCArIFNDT1JFX1NXQVA7CisKKwkgICAgLyogMzogZGVsZXRlIHRoZW4gc3Vic3RpdHV0ZSwgdGhlbiB0aGUgcmVzdCBtdXN0IGJlIGVxdWFsICovCisJICAgIGlmIChTVFJDTVAocGwyICsgMSwgcHMyICsgMSkgPT0gMCkKKwkJcmV0dXJuIFNDT1JFX0RFTCArIFNDT1JFX1NVQlNUOworCisJICAgIC8qIDQ6IGZpcnN0IHN3YXAgdGhlbiBkZWxldGUgKi8KKwkgICAgaWYgKHBsWzBdID09IHBzWzFdICYmIHBsWzFdID09IHBzWzBdKQorCSAgICB7CisJCXBsMiA9IHBsICsgMjsJICAgIC8qIHN3YXAsIHNraXAgdHdvIGNoYXJzICovCisJCXBzMiA9IHBzICsgMjsKKwkJd2hpbGUgKCpwbDIgPT0gKnBzMikKKwkJeworCQkgICAgKytwbDI7CisJCSAgICArK3BzMjsKKwkJfQorCQkvKiBkZWxldGUgYSBjaGFyIGFuZCB0aGVuIHN0cmluZ3MgbXVzdCBiZSBlcXVhbCAqLworCQlpZiAoU1RSQ01QKHBsMiArIDEsIHBzMikgPT0gMCkKKwkJICAgIHJldHVybiBTQ09SRV9TV0FQICsgU0NPUkVfREVMOworCSAgICB9CisKKwkgICAgLyogNTogZmlyc3Qgc3Vic3RpdHV0ZSB0aGVuIGRlbGV0ZSAqLworCSAgICBwbDIgPSBwbCArIDE7CSAgICAvKiBzdWJzdGl0dXRlLCBza2lwIG9uZSBjaGFyICovCisJICAgIHBzMiA9IHBzICsgMTsKKwkgICAgd2hpbGUgKCpwbDIgPT0gKnBzMikKKwkgICAgeworCQkrK3BsMjsKKwkJKytwczI7CisJICAgIH0KKwkgICAgLyogZGVsZXRlIGEgY2hhciBhbmQgdGhlbiBzdHJpbmdzIG11c3QgYmUgZXF1YWwgKi8KKwkgICAgaWYgKFNUUkNNUChwbDIgKyAxLCBwczIpID09IDApCisJCXJldHVybiBTQ09SRV9TVUJTVCArIFNDT1JFX0RFTDsKKworCSAgICAvKiBGYWlsZWQgdG8gY29tcGFyZS4gKi8KKwkgICAgYnJlYWs7CisKKwljYXNlIDA6CisJICAgIC8qCisJICAgICAqIExlbmdodHMgYXJlIGVxdWFsLCB0aHVzIGNoYW5nZXMgbXVzdCByZXN1bHQgaW4gc2FtZSBsZW5ndGg6IEFuCisJICAgICAqIGluc2VydCBpcyBvbmx5IHBvc3NpYmxlIGluIGNvbWJpbmF0aW9uIHdpdGggYSBkZWxldGUuCisJICAgICAqIDE6IGNoZWNrIGlmIGZvciBpZGVudGljYWwgc3RyaW5ncworCSAgICAgKi8KKwkgICAgaWYgKCpwbCA9PSBOVUwpCisJCXJldHVybiAwOworCisJICAgIC8qIDI6IHN3YXAgKi8KKwkgICAgaWYgKHBsWzBdID09IHBzWzFdICYmIHBsWzFdID09IHBzWzBdKQorCSAgICB7CisJCXBsMiA9IHBsICsgMjsJICAgIC8qIHN3YXAsIHNraXAgdHdvIGNoYXJzICovCisJCXBzMiA9IHBzICsgMjsKKwkJd2hpbGUgKCpwbDIgPT0gKnBzMikKKwkJeworCQkgICAgaWYgKCpwbDIgPT0gTlVMKQkvKiByZWFjaGVkIHRoZSBlbmQgKi8KKwkJCXJldHVybiBTQ09SRV9TV0FQOworCQkgICAgKytwbDI7CisJCSAgICArK3BzMjsKKwkJfQorCQkvKiAzOiBzd2FwIGFuZCBzd2FwIGFnYWluICovCisJCWlmIChwbDJbMF0gPT0gcHMyWzFdICYmIHBsMlsxXSA9PSBwczJbMF0KKwkJCQkJICAgICAmJiBTVFJDTVAocGwyICsgMiwgcHMyICsgMikgPT0gMCkKKwkJICAgIHJldHVybiBTQ09SRV9TV0FQICsgU0NPUkVfU1dBUDsKKworCQkvKiA0OiBzd2FwIGFuZCBzdWJzdGl0dXRlICovCisJCWlmIChTVFJDTVAocGwyICsgMSwgcHMyICsgMSkgPT0gMCkKKwkJICAgIHJldHVybiBTQ09SRV9TV0FQICsgU0NPUkVfU1VCU1Q7CisJICAgIH0KKworCSAgICAvKiA1OiBzdWJzdGl0dXRlICovCisJICAgIHBsMiA9IHBsICsgMTsKKwkgICAgcHMyID0gcHMgKyAxOworCSAgICB3aGlsZSAoKnBsMiA9PSAqcHMyKQorCSAgICB7CisJCWlmICgqcGwyID09IE5VTCkJLyogcmVhY2hlZCB0aGUgZW5kICovCisJCSAgICByZXR1cm4gU0NPUkVfU1VCU1Q7CisJCSsrcGwyOworCQkrK3BzMjsKKwkgICAgfQorCisJICAgIC8qIDY6IHN1YnN0aXR1dGUgYW5kIHN3YXAgKi8KKwkgICAgaWYgKHBsMlswXSA9PSBwczJbMV0gJiYgcGwyWzFdID09IHBzMlswXQorCQkJCQkgICAgICYmIFNUUkNNUChwbDIgKyAyLCBwczIgKyAyKSA9PSAwKQorCQlyZXR1cm4gU0NPUkVfU1VCU1QgKyBTQ09SRV9TV0FQOworCisJICAgIC8qIDc6IHN1YnN0aXR1dGUgYW5kIHN1YnN0aXR1dGUgKi8KKwkgICAgaWYgKFNUUkNNUChwbDIgKyAxLCBwczIgKyAxKSA9PSAwKQorCQlyZXR1cm4gU0NPUkVfU1VCU1QgKyBTQ09SRV9TVUJTVDsKKworCSAgICAvKiA4OiBpbnNlcnQgdGhlbiBkZWxldGUgKi8KKwkgICAgcGwyID0gcGw7CisJICAgIHBzMiA9IHBzICsgMTsKKwkgICAgd2hpbGUgKCpwbDIgPT0gKnBzMikKKwkgICAgeworCQkrK3BsMjsKKwkJKytwczI7CisJICAgIH0KKwkgICAgaWYgKFNUUkNNUChwbDIgKyAxLCBwczIpID09IDApCisJCXJldHVybiBTQ09SRV9JTlMgKyBTQ09SRV9ERUw7CisKKwkgICAgLyogOTogZGVsZXRlIHRoZW4gaW5zZXJ0ICovCisJICAgIHBsMiA9IHBsICsgMTsKKwkgICAgcHMyID0gcHM7CisJICAgIHdoaWxlICgqcGwyID09ICpwczIpCisJICAgIHsKKwkJKytwbDI7CisJCSsrcHMyOworCSAgICB9CisJICAgIGlmIChTVFJDTVAocGwyLCBwczIgKyAxKSA9PSAwKQorCQlyZXR1cm4gU0NPUkVfSU5TICsgU0NPUkVfREVMOworCisJICAgIC8qIEZhaWxlZCB0byBjb21wYXJlLiAqLworCSAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gU0NPUkVfTUFYTUFYOworfQogCiAvKgogICogQ29tcHV0ZSB0aGUgImVkaXQgZGlzdGFuY2UiIHRvIHR1cm4gImJhZHdvcmQiIGludG8gImdvb2R3b3JkIi4gIFRoZSBsZXNzCi0gKiBkZWxldGVzL2luc2VydHMvc3dhcHMgYXJlIHJlcXVpcmVkIHRoZSBsb3dlciB0aGUgc2NvcmUuCisgKiBkZWxldGVzL2luc2VydHMvc3Vic3RpdHV0ZXMvc3dhcHMgYXJlIHJlcXVpcmVkIHRoZSBsb3dlciB0aGUgc2NvcmUuCiAgKgogICogVGhlIGFsZ29yaXRobSBjb21lcyBmcm9tIEFzcGVsbCBlZGl0ZGlzdC5jcHAsIGVkaXRfZGlzdGFuY2UoKS4KICAqIEl0IGhhcyBiZWVuIGNvbnZlcnRlZCBmcm9tIEMrKyB0byBDIGFuZCBtb2RpZmllZCB0byBzdXBwb3J0IG11bHRpLWJ5dGUKQEAgLTY5NjksNyArNzQ4MywxMCBAQAogCSAgICB9CiAJfQogICAgIH0KLSAgICByZXR1cm4gQ05UKGJhZGxlbiAtIDEsIGdvb2RsZW4gLSAxKTsKKworICAgIGkgPSBDTlQoYmFkbGVuIC0gMSwgZ29vZGxlbiAtIDEpOworICAgIHZpbV9mcmVlKGNudCk7CisgICAgcmV0dXJuIGk7CiB9CiAKICNlbmRpZiAgLyogRkVBVF9TWU5fSEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9zcGVsbC9NYWtlZmlsZSBiL3NyYy9zcGVsbC9NYWtlZmlsZQppbmRleCAyZmYyODUwLi44MzhlNjAzIDEwMDY0NAotLS0gYS9zcmMvc3BlbGwvTWFrZWZpbGUKKysrIGIvc3JjL3NwZWxsL01ha2VmaWxlCkBAIC00Niw2ICs0Niw5IEBACiAJCiAJLWRpZmYgLWEgLUMgMSBmcl9GUi5vcmlnLmFmZiBmcl9GUi5hZmYgPmZyX0ZSLmRpZmYKIAktZGlmZiAtYSAtQyAxIGZyX0ZSLm9yaWcuZGljIGZyX0ZSLmRpYyA+PmZyX0ZSLmRpZmYKKwkKKwktZGlmZiAtYSAtQyAxIGhlX0lMLm9yaWcuYWZmIGhlX0lMLmFmZiA+aGVfSUwuZGlmZgorCS1kaWZmIC1hIC1DIDEgaGVfSUwub3JpZy5kaWMgaGVfSUwuZGljID4+aGVfSUwuZGlmZgogCiAkKFNQRUxMRElSKS9lbi5sYXRpbjEuc3BsIDogJChWSU0pIFwKIAkJCWVuX1VTLmFmZiBlbl9VUy5kaWMgXApkaWZmIC0tZ2l0IGEvc3JjL3NwZWxsL2RlX0RFLmRpZmYgYi9zcmMvc3BlbGwvZGVfREUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTQwZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NwZWxsL2RlX0RFLmRpZmYKQEAgLTAsMCArMSwyMiBAQAorKioqIGRlX0RFLm9yaWcuYWZmCUZyaSBKdW4gMTcgMTA6MDE6MTggMjAwNQorLS0tIGRlX0RFLmFmZglTYXQgSnVuIDE4IDE5OjQ2OjE5IDIwMDUKKyoqKioqKioqKioqKioqKgorKioqIDMsNCAqKioqCistLS0gMyw4IC0tLS0KKyAgCisrIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3worKyBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KKysgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7fCisrIAorICAjIChjKSBjb3B5cmlnaHQgYnkgQmpvZXJuIEphY2tlIDxiam9lcm5AajNlLmRlPgorKioqIGRlX0RFLm9yaWcuZGljCUZyaSBKdW4gMTcgMTA6MDE6MjcgMjAwNQorLS0tIGRlX0RFLmRpYwlTYXQgSnVuIDE4IDE5OjU3OjA3IDIwMDUKKyoqKioqKioqKioqKioqKgorKioqIDc2MjU4LDc2MjU5ICoqKioKKyAgenluaXNtdXNm9nJkZXJuZC9BCishIHp6Z2wKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLS0tIDc2MjU4LDc2MjYwIC0tLS0KKyAgenluaXNtdXNm9nJkZXJuZC9BCishIHp6Z2wKKyEgCmRpZmYgLS1naXQgYS9zcmMvc3BlbGwvZW5fQVUuZGlmZiBiL3NyYy9zcGVsbC9lbl9BVS5kaWZmCmluZGV4IDJkMDNmYTguLmQ3OGY1NTcgMTAwNjQ0Ci0tLSBhL3NyYy9zcGVsbC9lbl9BVS5kaWZmCisrKyBiL3NyYy9zcGVsbC9lbl9BVS5kaWZmCkBAIC0xLDUgKzEsNSBAQAogKioqIGVuX0FVLm9yaWcuYWZmCUZyaSBBcHIgMTUgMTM6MjA6MzYgMjAwNQotLS0tIGVuX0FVLmFmZglTYXQgQXByIDIzIDE5OjU3OjQwIDIwMDUKKy0tLSBlbl9BVS5hZmYJU2F0IEp1biAxOCAxOTo0MjowNyAyMDA1CiAqKioqKioqKioqKioqKioKICoqKiA3LDkgKioqKgogICBTRVQgSVNPODg1OS0xCkBAIC05LDkgKzksOSBAQAogICBTRVQgSVNPODg1OS0xCiAhIFRSWSBlc2lh6W5ydG9sY2R1Z21waGJ5ZnZrdy0nLnpxanhTTlJUTENHRE1QSEJFQVVZT0ZJVktX9uL0WlFKWMXn6O7q4O/85PEKICEgCi0hIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KLSEgTE9XICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/wotISBVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/CishIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3worISBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KKyEgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7fCiAhIAogISAKICAgUkVQIDI0CkBAIC0yMjI3LDQ5ICsyMjI3LDE2MSBAQAogISBTRlggMyBvIGlzdCdzIG8KICEgU0ZYIDMgMCBpc3QncyBbXmVveV0KICoqKiBlbl9BVS5vcmlnLmRpYwlGcmkgQXByIDE1IDEzOjIwOjM2IDIwMDUKLS0tLSBlbl9BVS5kaWMJVHVlIEFwciAxOSAyMjoxOToxOCAyMDA1CistLS0gZW5fQVUuZGljCVR1ZSBKdW4gMjEgMjA6MjQ6MTUgMjAwNQorKioqKioqKioqKioqKioqCisqKiogOTEyLDkxNCAqKioqCisgIEFsYXNrYS9NCishIGFsL0FZCisgIGFsYmFjb3JlL01TCistLS0gOTEyLDkxNCAtLS0tCisgIEFsYXNrYS9NCishIHJlYWxseQorICBhbGJhY29yZS9NUworKioqKioqKioqKioqKioqCisqKiogNDg4NSw0ODg3ICoqKioKKyAgYm96by9TTQorLSBiL3BiCisgIGJwaQorLS0tIDQ4ODUsNDg4NiAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0OTIxLDQ5MjIgKioqKgotLS0tIDQ5MjEsNDkyMyAtLS0tCistLS0gNDkyMCw0OTIyIC0tLS0KICAgQnJhaG1zCiArIEJyYW0vTQogICBicmFpZC9ER1MKICoqKioqKioqKioqKioqKgorKioqIDEwMjg4LDEwMjg5ICoqKioKKy0tLSAxMDI4OCwxMDI5MiAtLS0tCisgIGRCL00KKysgZEJpCisrIGRCbQorKyBkQmQKKyAgREJNUworKioqKioqKioqKioqKioqCiAqKiogMTI0NjgsMTI0NjkgKioqKgotLS0tIDEyNDY5LDEyNDcxIC0tLS0KKy0tLSAxMjQ3MSwxMjQ3MyAtLS0tCiAgIER1dGNoLzVtCiArIEZhcnNpCiAgIER1dGNod29tZW4vTQogKioqKioqKioqKioqKioqCisqKiogMTM3NzksMTM3ODEgKioqKgorICBlc3R1YXJ5L01TCishIGV0CisgIEVUQQorLS0tIDEzNzgzLDEzNzg2IC0tLS0KKyAgZXN0dWFyeS9NUworISBldCBjZXRlcmEKKyEgZXQgYWwuCisgIEVUQQorKioqKioqKioqKioqKioqCiAqKiogMTkyMTQsMTkyMTYgKioqKgogICBIb2JiZXMKICEgaG9iYml0CiAgIGhvYmJsZS9SR1NECi0tLS0gMTkyMTYsMTkyMTggLS0tLQorLS0tIDE5MjE5LDE5MjIxIC0tLS0KICAgSG9iYmVzCiAhIGhvYmJpdC9NUwogICBob2JibGUvUkdTRAogKioqKioqKioqKioqKioqCisqKiogMjI4ODUsMjI4ODcgKioqKgorICBsYXNzL1NNCistIGxhc3QtZGl0Y2gKKyAgbGFzdGVkL2UKKy0tLSAyMjg5MCwyMjg5MSAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAyMjg5MCwyMjg5MiAqKioqCisgIGxhc3Qva0pZRFNHCistIGxhc3QtbWludXRlCisgIGxhc3RzL2UKKy0tLSAyMjg5NCwyMjg5NSAtLS0tCisqKioqKioqKioqKioqKioKICoqKiAyNjQxNywyNjQxOCAqKioqCi0tLS0gMjY0MTksMjY0MjEgLS0tLQorLS0tIDI2NDIwLDI2NDIyIC0tLS0KICAgTW9vbGF3YXRhbmEKICsgTW9vbGVuYWFyL00KICAgTW9vbWJhCiAqKioqKioqKioqKioqKioKKyoqKiAyNzE4OCwyNzE5MiAqKioqCisgIG5hdGlvbmFscy80CishIG5hdGlvbmFsL3NRcTNTCisgIG5hdGlvbmhvb2QvTQorISBuYXRpb24vTQorICBuYXRpb253aWRlCistLS0gMjcxOTIsMjcxOTYgLS0tLQorICBuYXRpb25hbHMvNAorISBuYXRpb25hbC9zUXEzU1oKKyAgbmF0aW9uaG9vZC9NCishIG5hdGlvbi9NUworICBuYXRpb253aWRlCisqKioqKioqKioqKioqKioKKyoqKiAyNzE5NCwyNzE5NSAqKioqCistLS0gMjcxOTgsMjcyMDEgLS0tLQorICBuYXRpdml0eS9NUworKyBuYXRpdmVseQorKyBuYXRpdmVuZXNzCisgIE5BVE8vTQorKioqKioqKioqKioqKioqCisqKiogMzEwMzUsMzEwMzcgKioqKgorICBQaworLSBwL0tGCisgIHBsLgorLS0tIDMxMDQxLDMxMDQyIC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDMxMjg4LDMxMjg5ICoqKioKKy0tLSAzMTI5MywzMTI5NSAtLS0tCisgIHBuZXVtb25pYS9NUworKyBwbmV1bW9uaWMKKyAgUE8KKyoqKioqKioqKioqKioqKgorKioqIDMxNDYwLDMxNDYxICoqKioKKy0tLSAzMTQ2NiwzMTQ2OCAtLS0tCisgIHBvbXBvbS9NUworKyBwb21wb24vTQorICBwb21wb3NpdHkvTVMKKyoqKioqKioqKioqKioqKgorKioqIDMzMzc4LDMzMzgwICoqKioKKyAgcmF6em1hdGF6egorLSByL2QKKyAgUmQvTQorLS0tIDMzMzg1LDMzMzg2IC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDM0OTc5LDM0OTgxICoqKioKKyAgUlNQQ0EKKy0gcnRlCisgIHJ1Yi1hLWR1YgorLS0tIDM0OTg1LDM0OTg2IC0tLS0KKyoqKioqKioqKioqKioqKgogKioqIDM2MDEyLDM2MDE0ICoqKioKICAgc2VjLgogISBzL2VjYQogICBzZWNhbnQvTVMKLS0tLSAzNjAxNSwzNjAxNyAtLS0tCistLS0gMzYwMTcsMzYwMTkgLS0tLQogICBzZWMuCiAhIG91dHMKICAgc2VjYW50L01TCiAqKioqKioqKioqKioqKioKKyoqKiA0MjYxNiw0MjYxOCAqKioqCisgIFR5c29uL00KKy0gdQorICB1YmlxdWl0b3VzbmVzcworLS0tIDQyNjIxLDQyNjIyIC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDQyOTkwLDQyOTkxICoqKioKKy0tLSA0Mjk5NCw0Mjk5NiAtLS0tCisgIHVuc2NydXB1bG91cworKyBzZWFyY2hhYmxlCisgIHVuc2VhcmNoYWJsZQorKioqKioqKioqKioqKioqCiAqKiogNDM3NDksNDM3NTEgKioqKgogICBWaWxuaXVzL00KICEgdmltL00KICAgdmluYWlncmV0dGUvTVMKLS0tLSA0Mzc1Miw0Mzc1NCAtLS0tCistLS0gNDM3NTQsNDM3NTYgLS0tLQogICBWaWxuaXVzL00KICEgVmltL00KICAgdmluYWlncmV0dGUvTVMKKyoqKioqKioqKioqKioqKgorKioqIDQ1NjU1ICoqKioKKy0tLSA0NTY2MCw0NTY2MSAtLS0tCisgIHp5bXVyZ3kvUworKyBuZApkaWZmIC0tZ2l0IGEvc3JjL3NwZWxsL2VuX0NBLmRpZmYgYi9zcmMvc3BlbGwvZW5fQ0EuZGlmZgppbmRleCBjMzIxZmYxLi42MmU3MjEzIDEwMDY0NAotLS0gYS9zcmMvc3BlbGwvZW5fQ0EuZGlmZgorKysgYi9zcmMvc3BlbGwvZW5fQ0EuZGlmZgpAQCAtMSwxMiArMSwxMiBAQAogKioqIGVuX0NBLm9yaWcuYWZmCUZyaSBBcHIgMTUgMTM6MjA6MzYgMjAwNQotLS0tIGVuX0NBLmFmZglTYXQgQXByIDIzIDE5OjU3OjQzIDIwMDUKKy0tLSBlbl9DQS5hZmYJU2F0IEp1biAxOCAxOTo0MjoxOSAyMDA1CiAqKioqKioqKioqKioqKioKICoqKiAzLDQgKioqKgogLS0tIDMsOCAtLS0tCiAgIAotKyBGT0wgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/Ci0rIExPVyAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KLSsgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/worKyBGT0wgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KKysgTE9XICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7fCisrIFVQUCAgwMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbY2drb3N3e3wogKyAKICAgUEZYIEEgWSAxCiAqKioqKioqKioqKioqKioKQEAgLTM5LDcgKzM5LDcgQEAKICEgU0ZYIEcgICAwICAgICBpbmcgICAgICAgIFteZV0KICAgCiAqKiogZW5fQ0Eub3JpZy5kaWMJU2F0IEFwciAxNiAxNDo0MDowNiAyMDA1Ci0tLS0gZW5fQ0EuZGljCVR1ZSBBcHIgMTkgMjI6MTk6NDYgMjAwNQorLS0tIGVuX0NBLmRpYwlUdWUgSnVuIDIxIDIwOjI1OjAxIDIwMDUKICoqKioqKioqKioqKioqKgogKioqIDQ2LDQ4ICoqKioKICAgUi9HCkBAIC00NywzMiArNDcsMTUwIEBACiAgIGVhc3Rlcm5tb3N0CiAtLS0gNDYsNDcgLS0tLQogKioqKioqKioqKioqKioqCi0qKiogODksOTEgKioqKgotICByL0dWVEoKKyoqKiA1OSw2MSAqKioqCisgIGEKKyEgYi9LR0RUCisgIEVtbWV5L00KKy0tLSA1OCw2MSAtLS0tCisgIGEKKyEgcHJvYmluZworISBwcm9iZWQKKyAgRW1tZXkvTQorKioqKioqKioqKioqKioqCisqKiogODIsODQgKioqKgorICBtL1hHCishIG4vRktUCisgIG8KKy0tLSA4Miw4NCAtLS0tCisgIG0vWEcKKyEgcHJvbgorICBvCisqKioqKioqKioqKioqKioKKyoqKiA4Niw5MSAqKioqCisgIGZpdHRpbmcvUFNZCistIHAvS1JUCisgIHEKKyEgci9HVlRKCiAhIHMvRksKICAgZmF0dGluZwotLS0tIDg4LDkwIC0tLS0KLSAgci9HVlRKCistLS0gODYsODkgLS0tLQorICBmaXR0aW5nL1BTWQorICBxCiAhIGNvbnMKICAgZmF0dGluZwogKioqKioqKioqKioqKioqCisqKiogOTQsOTYgKioqKgorICBvZWRpcGFsCistIHUKKyAgdi9WVEsKKy0tLSA5Miw5MyAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAzMTQ1LDMxNDYgKioqKgorLS0tIDMxNDIsMzE0NCAtLS0tCisgIHNlbWVzdGVyL01TCisrIGV0Yy4KKyAgZXRjaC9HWlNSREoKKyoqKioqKioqKioqKioqKgorKioqIDcwMjIsNzAyNCAqKioqCisgIERBCistIERCCisgIERDCistLS0gNzAyMCw3MDIxIC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDgzODgsODM5MCAqKioqCisgIHNsb3R0aW5nCistIE9OCisgIE9SCistLS0gODM4NSw4Mzg2IC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDkxMjUsOTEyNyAqKioqCisgIHBlcmNoYW5jZQorLSBydGUKKyAgaGFzdGluZXNzL01TCistLS0gOTEyMSw5MTIyIC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDEwNjAzLDEwNjA0ICoqKioKKy0tLSAxMDU5OCwxMDYwMiAtLS0tCisgIGRCL00KKysgZEJpCisrIGRCbQorKyBkQmQKKyAgSGV3ZXQvTQorKioqKioqKioqKioqKioqCisqKiogMTA2MTUsMTA2MTcgKioqKgorICBHYXJvbGQvTQorLSBkYgorICB0b2xsaG91c2UvTQorLS0tIDEwNjEzLDEwNjE0IC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDExMDE3LDExMDE5ICoqKioKKyAgaHIKKy0gaHQKKyAgTUNJL00KKy0tLSAxMTAxNCwxMTAxNSAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAxMTYwOSwxMTYxMSAqKioqCisgIGRlbXVyZW5lc3MvU00KKyEgbmQvQQorICBNSUEKKy0tLSAxMTYwNSwxMTYwNyAtLS0tCisgIGRlbXVyZW5lc3MvU00KKyEgbmQKKyAgTUlBCisqKioqKioqKioqKioqKioKICoqKiAxMzY2OSwxMzY3MSAqKioqCiAgIGVuZ3Jvc3MvTERSU0cKICEgaG9iYml0CiAgIGNlcnRhaW50eS9NVVMKLS0tLSAxMzY2OCwxMzY3MCAtLS0tCistLS0gMTM2NjUsMTM2NjcgLS0tLQogICBlbmdyb3NzL0xEUlNHCiAhIGhvYmJpdC9NUwogICBjZXJ0YWludHkvTVVTCiAqKioqKioqKioqKioqKioKKyoqKiAxNDQzNCwxNDQzNSAqKioqCistLS0gMTQ0MzAsMTQ0MzIgLS0tLQorICBwb21wb20vTVMKKysgcG9tcG9uL00KKyAgRGV2bGFuZC9NCisqKioqKioqKioqKioqKioKKyoqKiAxOTI2NSwxOTI2NyAqKioqCisgIGJsb29kc3RvbmUvTQorISBjZXRlcmEvUworICBzdG9ybS9TR1pSRE0KKy0tLSAxOTI2MiwxOTI2NCAtLS0tCisgIGJsb29kc3RvbmUvTQorISBldCBjZXRlcmEvUworICBzdG9ybS9TR1pSRE0KKyoqKioqKioqKioqKioqKgorKioqIDIwMTYyLDIwMTY0ICoqKioKKyAgSGFuc2VsL00KKyEgcmluZy9HWkpEUk0KKyAgSGFuc2VuL00KKy0tLSAyMDE1OSwyMDE2MSAtLS0tCisgIEhhbnNlbC9NCishIHJpbmcvR1pKRFJNUworICBIYW5zZW4vTQorKioqKioqKioqKioqKioqCisqKiogMjgxNTcsMjgxNTggKioqKgorLS0tIDI4MTU0LDI4MTU2IC0tLS0KKyAgcG5ldW1vbmlhL01TCisrIHBuZXVtb25pYworICBTb2NyYXRpYy9TCisqKioqKioqKioqKioqKioKKyoqKiAzNDk5OSwzNTAwMSAqKioqCisgIGNsYXF1ZS9NUworLSBldGMKKyAgQ2hhZC9NCistLS0gMzQ5OTcsMzQ5OTggLS0tLQorKioqKioqKioqKioqKioqCiAqKiogMzY3MDcsMzY3MDggKioqKgotLS0tIDM2NzA2LDM2NzA4IC0tLS0KKy0tLSAzNjcwNCwzNjcwNiAtLS0tCiAgIE1vb2R5L00KICsgTW9vbGVuYWFyL00KICAgQnJlc2VuaGFtL00KICoqKioqKioqKioqKioqKgogKioqIDUwMjcyLDUwMjczICoqKioKLS0tLSA1MDI3Miw1MDI3NCAtLS0tCistLS0gNTAyNzAsNTAyNzIgLS0tLQogICBEdXRjaC9NCiArIEZhcnNpCiAgIFNoYXJvbi9NCkBAIC04MSw3ICsxOTksMTggQEAKICAgaGF0Y2hlcnkvTVMKICEgdmltL1NNCiAgIGNvbXBhdHJpb3QvTVMKLS0tLSA1MjU2Niw1MjU2OCAtLS0tCistLS0gNTI1NjQsNTI1NjYgLS0tLQogICBoYXRjaGVyeS9NUwogISBWaW0vU00KICAgY29tcGF0cmlvdC9NUworKioqKioqKioqKioqKioqCisqKiogNTM0OTAsNTM0OTEgKioqKgorLS0tIDUzNDg5LDUzNDkxIC0tLS0KKyAgdW5zZWFyY2hhYmxlCisrIHNlYXJjaGFibGUKKyAgZmVsaWNpdG91cy9JWQorKioqKioqKioqKioqKioqCisqKiogNjIzNDEgKioqKgorLS0tIDYyMzQxLDYyMzQyIC0tLS0KKyAgZGF0YS9NCisrIGV0IGFsLgpkaWZmIC0tZ2l0IGEvc3JjL3NwZWxsL2VuX0dCLmRpZmYgYi9zcmMvc3BlbGwvZW5fR0IuZGlmZgppbmRleCA3ZjdlYzEzLi40MmZkYzVkIDEwMDY0NAotLS0gYS9zcmMvc3BlbGwvZW5fR0IuZGlmZgorKysgYi9zcmMvc3BlbGwvZW5fR0IuZGlmZgpAQCAtMSw1ICsxLDUgQEAKICoqKiBlbl9HQi5vcmlnLmFmZglGcmkgQXByIDE1IDEzOjIwOjM2IDIwMDUKLS0tLSBlbl9HQi5hZmYJU2F0IEFwciAyMyAxOTo1Nzo0NiAyMDA1CistLS0gZW5fR0IuYWZmCVNhdCBKdW4gMTggMTk6NDI6MjQgMjAwNQogKioqKioqKioqKioqKioqCiAqKiogNyw5ICoqKioKICAgU0VUIElTTzg4NTktMQpAQCAtOSw5ICs5LDkgQEAKICAgU0VUIElTTzg4NTktMQogISBUUlkgZXNpYelucnRvbGNkdWdtcGhieWZ2a3ctJy56cWp4U05SVExDR0RNUEhCRUFVWU9GSVZLV/bi9FpRSljF5+ju6uDv/OTxCiAhIAotISBGT0wgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/Ci0hIExPVyAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KLSEgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/worISBGT0wgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KKyEgTE9XICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7fCishIFVQUCAgwMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbY2drb3N3e3wogISAKICAgUkVQIDI0CiAqKioqKioqKioqKioqKioKQEAgLTIyMjYsMzggKzIyMjYsMTMwIEBACiAhIFNGWCAzIG8gaXN0J3MgbwogISBTRlggMyAwIGlzdCdzIFteZW95XQogKioqIGVuX0dCLm9yaWcuZGljCVN1biBBcHIgMTcgMTg6MDg6NTAgMjAwNQotLS0tIGVuX0dCLmRpYwlUdWUgQXByIDE5IDIyOjIwOjE2IDIwMDUKKy0tLSBlbl9HQi5kaWMJVHVlIEp1biAyMSAyMDoyNjoxMSAyMDA1CisqKioqKioqKioqKioqKioKKyoqKiAxODcsMTg5ICoqKioKKyAgYWl0Y2gvU00KKy0gYWwvRkFDCisgIGFsLUphemVlcmEKKy0tLSAxODcsMTg4IC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDIxNDgsMjE1MCAqKioqCisgIGRhenpsZS9EUmtHSlMKKy0gZEJtCisgIERDCistLS0gMjE0NywyMTQ4IC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDQ2MzcsNDYzOSAqKioqCisgIGxhc3MvTVMKKy0gbGFzdC1taW51dGUKKyAgbGFzdHMvZQorLS0tIDQ2MzUsNDYzNiAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiA1NDcwLDU0NzIgKioqKgorICBN/G5jaGhhdXNlbi9NCistIG4vTnhuVnZ1CisgIE4nRGphbWVuYQorLS0tIDU0NjcsNTQ2OCAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiA1NDk5LDU1MDEgKioqKgorICBuYXRjaAorISBuYXRpb24vTQorICBuYXRpb25hbGlzZXMvQQorLS0tIDU0OTUsNTQ5NyAtLS0tCisgIG5hdGNoCishIG5hdGlvbi9NUworICBuYXRpb25hbGlzZXMvQQorKioqKioqKioqKioqKioqCisqKiogNjMxNiw2MzE3ICoqKioKKy0tLSA2MzEyLDYzMTQgLS0tLQorICBwb21wb20vU00KKysgcG9tcG9uL00KKyAgcG9uY2UvTQogKioqKioqKioqKioqKioqCiAqKiogNzA0OCw3MDUwICoqKioKICAgculnaW1lL1NNCiAhIHMvb2s3CiAgIFNhYWIvTQotLS0tIDcwNDgsNzA1MCAtLS0tCistLS0gNzA0NSw3MDQ3IC0tLS0KICAgculnaW1lL1NNCiAhIHNpbmdseQogICBTYWFiL00KICoqKioqKioqKioqKioqKgorKioqIDExMTQ4LDExMTQ5ICoqKioKKy0tLSAxMTE0NSwxMTE0OCAtLS0tCisgIGRCaQorKyBkQm0KKysgZEJkCisgIERDQgorKioqKioqKioqKioqKioqCisqKiogMTQ1OTEsMTQ1OTIgKioqKgorLS0tIDE0NTkwLDE0NTkyIC0tLS0KKyAgbmF0aXZlL1NQCisrIG5hdGl2ZWx5CisgIG5hdGl2aXR5L1NNCisqKioqKioqKioqKioqKioKKyoqKiAxNjE3MiwxNjE3NCAqKioqCisgIFJTUENBCistIHJ0ZQorICBydWJhdGkKKy0tLSAxNjE3MiwxNjE3MyAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAxNzgwOCwxNzgwOSAqKioqCistLS0gMTc4MDcsMTc4MDkgLS0tLQorICB1bnNlYXJjaGFibGUKKysgc2VhcmNoYWJsZQorICB1bnNoYWthYmxlL1kKKyoqKioqKioqKioqKioqKgorKioqIDE4MzIyLDE4MzIzICoqKioKKy0tLSAxODMyMiwxODMyNCAtLS0tCisgIOltaWdy6S9TCisrIG5kCisgIDNHUFAKKyoqKioqKioqKioqKioqKgogKioqIDE5MzAzLDE5MzA0ICoqKioKLS0tLSAxOTMwMywxOTMwNSAtLS0tCistLS0gMTkzMDQsMTkzMDYgLS0tLQogICBCcmFtcHRvbi9NCiArIEJyYW0vTQogICBicmFuZC9NUkRHU1oKICoqKioqKioqKioqKioqKgorKioqIDIxMDk3LDIxMDk5ICoqKioKKyAgZXN0aW1hdGl2ZQorISBldAorICBldGFsb24KKy0tLSAyMTA5OSwyMTEwMiAtLS0tCisgIGVzdGltYXRpdmUKKyEgZXQgY2V0ZXJhCishIGV0IGFsLgorICBldGFsb24KKyoqKioqKioqKioqKioqKgogKioqIDIzNjMyLDIzNjMzICoqKioKLS0tLSAyMzYzMywyMzYzNSAtLS0tCistLS0gMjM2MzUsMjM2MzcgLS0tLQogICBNb29nCiArIE1vb2xlbmFhci9NCiAgIG1vb25saWdodC9HUkRTTQogKioqKioqKioqKioqKioqCisqKiogMjQyNDIsMjQyNDQgKioqKgorICBveHlnZW5hdGlvbi9NCistIHAvRllBSQorICBQYWJsby9NCistLS0gMjQyNDYsMjQyNDcgLS0tLQorKioqKioqKioqKioqKioqCiAqKiogMjcyMjMsMjcyMjUgKioqKgogICBWaWxsaWVycwogISB2aW0vTQogICBWaW5jaS9NCi0tLS0gMjcyMjUsMjcyMjcgLS0tLQorLS0tIDI3MjI2LDI3MjI4IC0tLS0KICAgVmlsbGllcnMKICEgVmltL00KICAgVmluY2kvTQogKioqKioqKioqKioqKioqCisqKiogMjgxNzQsMjgxNzYgKioqKgorICBBenRlYy9NCistIGIvYnAKKyAgQmFhbC9NCistLS0gMjgxNzcsMjgxNzggLS0tLQorKioqKioqKioqKioqKioqCiAqKiogMzE0MDksMzE0MTEgKioqKgogICBob2IvTURHWlMKICEgaG9iYml0CkBAIC0yMjY2LDMgKzIzNTgsMjEgQEAKICAgaG9iL01ER1pTCiAhIGhvYmJpdC9NUwogICBIb2JicworKioqKioqKioqKioqKioqCisqKiogMzIxNzQsMzIxNzYgKioqKgorICBsYXNzby9HTURTCistIGxhc3QtZGl0Y2gKKyAgTGFzemxvL00KKy0tLSAzMjE3NiwzMjE3NyAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiA0MzI3NSw0MzI3NiAqKioqCistLS0gNDMyNzYsNDMyNzggLS0tLQorICBwbmV1bW9uaWEvTVMKKysgcG5ldW1vbmljCisgIFBPCisqKioqKioqKioqKioqKioKKyoqKiA0MzY2NSw0MzY2NyAqKioqCisgIHF3ZXJ0eQorLSByL2QKKyAgUmEKKy0tLSA0MzY2Nyw0MzY2OCAtLS0tCmRpZmYgLS1naXQgYS9zcmMvc3BlbGwvZW5fTlouZGlmZiBiL3NyYy9zcGVsbC9lbl9OWi5kaWZmCmluZGV4IDRmYTYzOGIuLjI0MzAxOGYgMTAwNjQ0Ci0tLSBhL3NyYy9zcGVsbC9lbl9OWi5kaWZmCisrKyBiL3NyYy9zcGVsbC9lbl9OWi5kaWZmCkBAIC0xLDUgKzEsNSBAQAogKioqIGVuX05aLm9yaWcuYWZmCUZyaSBBcHIgMTUgMTM6MjA6MzYgMjAwNQotLS0tIGVuX05aLmFmZglTYXQgQXByIDIzIDE5OjU3OjQ5IDIwMDUKKy0tLSBlbl9OWi5hZmYJU2F0IEp1biAxOCAxOTo0MjozMSAyMDA1CiAqKioqKioqKioqKioqKioKICoqKiA3LDkgKioqKgogICBTRVQgSVNPODg1OS0xCkBAIC05LDkgKzksOSBAQAogICBTRVQgSVNPODg1OS0xCiAhIFRSWSBlc2lh6W5ydG9sY2R1Z21waGJ5ZnZrdy0nLnpxanhTTlJUTENHRE1QSEJFQVVZT0ZJVktX9uL0WlFKWMXn6O7q4O/85PEKICEgCi0hIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KLSEgTE9XICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/wotISBVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/CishIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3worISBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KKyEgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7fCiAhIAogICBSRVAgNjYKICoqKioqKioqKioqKioqKgpAQCAtMjIyNywxNyArMjIyNywzMiBAQAogISBTRlggMyBvIGlzdCdzIG8KICEgU0ZYIDMgMCBpc3QncyBbXmVveV0KICoqKiBlbl9OWi5vcmlnLmRpYwlGcmkgQXByIDE1IDEzOjIwOjM2IDIwMDUKLS0tLSBlbl9OWi5kaWMJU3VuIEFwciAxNyAxODowODo1NSAyMDA1CistLS0gZW5fTlouZGljCVR1ZSBKdW4gMjEgMjA6MTQ6MjQgMjAwNQorKioqKioqKioqKioqKioqCisqKiogMSw2ICoqKioKKyAgNDcxNDEKKy0gM0dQUAorLSAyWUEKKy0gMlpCCistIEEKKyAgYS9vCistLS0gMSwyIC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDkyNyw5MjkgKioqKgorICBBbC1aYXdhaGlyaQorLSBhbC9GQUMKKyAgQWwvTQorLS0tIDkyMyw5MjQgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMjk0MSwyOTQ0ICoqKioKICAgQi5TYy4KIC0gYmxlc3MKIC0gYmlibGUKICAgYmFhL0dTRAotLS0tIDI5NDEsMjk0MiAtLS0tCistLS0gMjkzNiwyOTM3IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ5NzQsNDk3NSAqKioqCi0tLS0gNDk3Miw0OTc0IC0tLS0KKy0tLSA0OTY3LDQ5NjkgLS0tLQogICBCcmFtcHRvbi9NCiArIEJyYW0vTQogICBicmFuL1NER00KQEAgLTIyNDYsNyArMjI2MSw3IEBACiAgIEMuTGl0LgogISBjYXRpb24vU00KICAgQ2EveQotLS0tIDU3MDYsNTcwOCAtLS0tCistLS0gNTcwMSw1NzAzIC0tLS0KICAgQy5MaXQuCiAhIGNhdGlvbi9NV1MKICAgQ2EveQpAQCAtMjI1NSwxNiArMjI3MCwyMiBAQAogICBDYXRoeQogLSBjYXRpb24vTVcKICAgY2F0a2luL1NNCi0tLS0gNjQ0OSw2NDUwIC0tLS0KKy0tLSA2NDQ0LDY0NDUgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMTAxNTMsMTAxNTUgKioqKgogICByZWQncwogLSBkYWxseQogICBkYWIvVFNHRAotLS0tIDEwMTUxLDEwMTUyIC0tLS0KKy0tLSAxMDE0NiwxMDE0NyAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAxMDM2MCwxMDM2MSAqKioqCistLS0gMTAzNTIsMTAzNTQgLS0tLQorICBkQm0KKysgZEJkCisgIERCTVMKICoqKioqKioqKioqKioqKgogKioqIDEyNTM1LDEyNTM2ICoqKioKLS0tLSAxMjUzMiwxMjUzNCAtLS0tCistLS0gMTI1MjgsMTI1MzAgLS0tLQogICBEdXRjaHdvbWVuL00KICsgRmFyc2kKICAgZHV0ZW91cy9ZCkBAIC0yMjczLDIwICsyMjk0LDMwIEBACiAgIGR1dmV0L1NNCiAtIGR1eGVzCiAgIERWRC9NUwotLS0tIDEyNTQwLDEyNTQxIC0tLS0KKy0tLSAxMjUzNiwxMjUzNyAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAxMzkwMSwxMzkwMyAqKioqCisgIGVzdHVhcnkvTVMKKyEgZXQKKyAgRVRBCistLS0gMTM4OTQsMTM4OTcgLS0tLQorICBlc3R1YXJ5L01TCishIGV0IGNldGVyYQorISBldCBhbC4KKyAgRVRBCiAqKioqKioqKioqKioqKioKICoqKiAxNDUzMSwxNDUzNCAqKioqCiAgIGYtc3RvcC9TCiAtIGZhYmxlCiAtIGZpc3QvTVMKICAgZmEvTQotLS0tIDE0NTI4LDE0NTI5IC0tLS0KKy0tLSAxNDUyNSwxNDUyNiAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiAxNTMyMywxNTMyNSAqKioqCiAgIGZpc3N1cmUvRFNNRwogISBmaXN0LzZHRAogICBmaXN0ZmlnaHQvTVMKLS0tLSAxNTMxOCwxNTMyMCAtLS0tCistLS0gMTUzMTUsMTUzMTcgLS0tLQogICBmaXNzdXJlL0RTTUcKICEgZmlzdC82R0RNUwogICBmaXN0ZmlnaHQvTVMKQEAgLTIyOTUsMzcgKzIzMjYsNDQgQEAKICAgZydzCiAtIGdhYmxlCiAgIGdpc3QvTVMKLS0tLSAxNjYwMSwxNjYwMiAtLS0tCistLS0gMTY1OTgsMTY1OTkgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMTY3OTcsMTY3OTkgKioqKgogICBHYXJ2ZXkKIC0gR2FyeS9NCiAgIGdhcy1wZXJtZWFibGUKLS0tLSAxNjc5MSwxNjc5MiAtLS0tCistLS0gMTY3ODgsMTY3ODkgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMTgxNzcsMTgxNzkgKioqKgogICBneXJvc2NvcGUvU1dNCiAtIGRpc2gKICAgaGEKLS0tLSAxODE3MCwxODE3MSAtLS0tCistLS0gMTgxNjcsMTgxNjggLS0tLQogKioqKioqKioqKioqKioqCiAqKiogMjIzMjEsMjIzMjMgKioqKgogICBLLWZhY3RvcgogLSBkaXNrL01TCiAgIGthYm9iJ3MKLS0tLSAyMjMxMywyMjMxNCAtLS0tCistLS0gMjIzMTAsMjIzMTEgLS0tLQorKioqKioqKioqKioqKioqCisqKiogMjMxMjksMjMxMzIgKioqKgorICBsYXNzb2VyL00KKy0gbGFzdC1kaXRjaAorLSBsYXN0LW1pbnV0ZQorICBsYXN0L1lTREdrSgorLS0tIDIzMTE3LDIzMTE4IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDI2Mzk2LDI2Mzk4ICoqKioKICAgTWlzc3kKICEgbWlzdC9DRFJHUwogICBtaXN0YWthYmxlL1UKLS0tLSAyNjM4NywyNjM4OSAtLS0tCistLS0gMjYzODIsMjYzODQgLS0tLQogICBNaXNzeQogISBtaXN0L0NEUkdTTQogICBtaXN0YWthYmxlL1UKICoqKioqKioqKioqKioqKgogKioqIDI2NzQ1LDI2NzQ2ICoqKioKLS0tLSAyNjczNiwyNjczOCAtLS0tCistLS0gMjY3MzEsMjY3MzMgLS0tLQogICBNb29nCiArIE1vb2xlbmFhci9NCiAgIG1vb24vTUdwRFMKQEAgLTIzMzQsNyArMjM3Miw3IEBACiAgIG1venphcmVsbGEvU00KIC0gTVAzCiAgIG1wZwotLS0tIDI3MDEwLDI3MDExIC0tLS0KKy0tLSAyNzAwNSwyNzAwNiAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiAyNzM2NSwyNzM3MiAqKioqCiAgIE4nRGphbWVuYQpAQCAtMjM0NSw3ICsyMzgzLDcgQEAKIC0gbmF0aW9uYWwKIC0gbmF0aW9uYWxseQogICBOYS9NCi0tLS0gMjczNTYsMjczNjAgLS0tLQorLS0tIDI3MzUxLDI3MzU1IC0tLS0KICAgTidEamFtZW5hCiAhIG5hdGl2ZS9TUAogICBuYXRpdmVseQpAQCAtMjM1Niw3ICsyMzk0LDcgQEAKICAgTmF0aGFuaWVsL00KICEgbmF0aW9uL00KICAgbmF0aW9uYWwvc1EzU3EKLS0tLSAyNzQ5NSwyNzQ5NyAtLS0tCistLS0gMjc0OTAsMjc0OTIgLS0tLQogICBOYXRoYW5pZWwvTQogISBuYXRpb24vTVMKICAgbmF0aW9uYWwvc1EzU3EKQEAgLTIzNjUsNyArMjQwMyw3IEBACiAgIG5hdGlvbndpZGUKIC0gbmF0aXZlL1NQCiAgIG5hdGl2aXR5L1NNCi0tLS0gMjc1MDksMjc1MTAgLS0tLQorLS0tIDI3NTA0LDI3NTA1IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDI5ODUyLDI5ODU3ICoqKioKICAgUC5PLgpAQCAtMjM3NCwyNyArMjQxMiw1NyBAQAogLSBpbXBseQogLSBjb21wbHkKICAgcGEvb00KLS0tLSAyOTgzOSwyOTg0MCAtLS0tCistLS0gMjk4MzQsMjk4MzUgLS0tLQorKioqKioqKioqKioqKioqCisqKiogMzE3MDIsMzE3MDMgKioqKgorLS0tIDMxNjgwLDMxNjgyIC0tLS0KKyAgcG5ldW1vbmlhL01TCisrIHBuZXVtb25pYworICBQTworKioqKioqKioqKioqKioqCisqKiogMzE4ODUsMzE4ODYgKioqKgorLS0tIDMxODY0LDMxODY2IC0tLS0KKyAgcG9tcG9tL1NNCisrIHBvbXBvbi9NCisgIHBvbXBvc2l0eS9TTQorKioqKioqKioqKioqKioqCisqKiogMzM1NjEsMzM1NjMgKioqKgorICBxd2VydHlzCistIHIvZAorICBSYQorLS0tIDMzNTQxLDMzNTQyIC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDM1NDU2LDM1NDU4ICoqKioKKyAgcnQKKy0gcnRlCisgIFJ1L00KKy0tLSAzNTQzNSwzNTQzNiAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiAzNTYxOSwzNTYyMiAqKioqCiAgIHNpbmdseQogLSBzYWJsZQogLSBzYWxseS9EU0cKICAgU0EKLS0tLSAzNTYwMiwzNTYwMyAtLS0tCistLS0gMzU1OTcsMzU1OTggLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDA3NjMsNDA3NjYgKioqKgogICBUJ3MKIC0gbWlzdC9NUwogLSBvdmVydAogICBUYQotLS0tIDQwNzQ0LDQwNzQ1IC0tLS0KKy0tLSA0MDczOSw0MDc0MCAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiA0MzU3NCw0MzU3NSAqKioqCistLS0gNDM1NDgsNDM1NTAgLS0tLQorICB1bnNlYXJjaGFibGUKKysgc2VhcmNoYWJsZQorICB1bnNlZWluZy9ZCiAqKioqKioqKioqKioqKioKICoqKiA0NDMzNCw0NDMzNiAqKioqCiAgIFZpbG5pdXMvTQogISB2aW0vTQogICB2aW5haWdyZXR0ZS9NUwotLS0tIDQ0MzEzLDQ0MzE1IC0tLS0KKy0tLSA0NDMwOSw0NDMxMSAtLS0tCiAgIFZpbG5pdXMvTQogISBWaW0vTQogICB2aW5haWdyZXR0ZS9NUwpAQCAtMjQwMyw2NiArMjQ3MSw3MyBAQAogICB5J2FsbAogLSBwcmV5L00KICAgeWFjaHQvTTVTbUdECi0tLS0gNDU4ODUsNDU4ODYgLS0tLQorLS0tIDQ1ODgxLDQ1ODgyIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2MTk4LDQ2MjAwICoqKioKICAgcmF0YS9NCiAtIGtha2EvTQogICB3YWthL00KLS0tLSA0NjE3Niw0NjE3NyAtLS0tCistLS0gNDYxNzIsNDYxNzMgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDYyMTYsNDYyMTggKioqKgogICBqYW5kYWwvTVMKIC0gU3dhbm5kcmkvTQogICBob29uL01TCi0tLS0gNDYxOTMsNDYxOTQgLS0tLQorLS0tIDQ2MTg5LDQ2MTkwIC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2MjQyLDQ2MjQ0ICoqKioKICAgSW52ZXJjYXJnaWxsL00KIC0gVGUKICAgQWxleGFuZHJhL00KLS0tLSA0NjIxOCw0NjIxOSAtLS0tCistLS0gNDYyMTQsNDYyMTUgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDYyNjEsNDYyNjMgKioqKgogICBLYXdlcmF1L00KIC0gS2VyaWtlcmkvTQogICBMeXR0ZWx0b24vTQotLS0tIDQ2MjM2LDQ2MjM3IC0tLS0KKy0tLSA0NjIzMiw0NjIzMyAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0NjQ5MSw0NjQ5MyAqKioqCiAgIFdhaWFuYWthcnVhCiAtIEhha2F0ZXJlCiAgIFN3aW4KLS0tLSA0NjQ2NSw0NjQ2NiAtLS0tCistLS0gNDY0NjEsNDY0NjIgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDY2OTAsNDY2OTIgKioqKgogICBPbWFyYW1hL00KIC0gV2FpcmFyYXBhL00KICAgS2lsZGEvTQotLS0tIDQ2NjYzLDQ2NjY0IC0tLS0KKy0tLSA0NjY1OSw0NjY2MCAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA0NjcxMSw0NjcxMyAqKioqCiAgIFdlbGxzZm9yZC9NCiAtIEFrYXJvYS9NCiAgIEF2b25oZWFkL00KLS0tLSA0NjY4Myw0NjY4NCAtLS0tCistLS0gNDY2NzksNDY2ODAgLS0tLQorKioqKioqKioqKioqKioqCisqKiogNDY4MzgsNDY4NDAgKioqKgorICBCYWxsYW50eW5lJ3MKKy0gREIKKyAgTW9udGVpdGgncworLS0tIDQ2ODA1LDQ2ODA2IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2OTIwLDQ2OTIyICoqKioKICAgRWdtb250L00KIC0gV2FpdGFraS9NCiAgIGthdGlwby9NCi0tLS0gNDY4OTEsNDY4OTIgLS0tLQorLS0tIDQ2ODg2LDQ2ODg3IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2OTU2LDQ2OTU4ICoqKioKICAgU3VubnlzaWRlL00KIC0gV2FpcmF1L00KICAgV2Fpa29yb3B1cHUKLS0tLSA0NjkyNiw0NjkyNyAtLS0tCistLS0gNDY5MjEsNDY5MjIgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDcxNDEsNDcxNDIgKioqKgogICBCdXJraW5hCiAhIEZhc28vTQogXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tLS0gNDcxMTAsNDcxMTEgLS0tLQorLS0tIDQ3MTA1LDQ3MTA3IC0tLS0KICAgQnVya2luYQogISBGYXNvL00KKyEgbmQKZGlmZiAtLWdpdCBhL3NyYy9zcGVsbC9lbl9VUy5kaWZmIGIvc3JjL3NwZWxsL2VuX1VTLmRpZmYKaW5kZXggYmUyNmRmYS4uNDYwZmE0ZSAxMDA2NDQKLS0tIGEvc3JjL3NwZWxsL2VuX1VTLmRpZmYKKysrIGIvc3JjL3NwZWxsL2VuX1VTLmRpZmYKQEAgLTEsMTIgKzEsMTQgQEAKICoqKiBlbl9VUy5vcmlnLmFmZglGcmkgQXByIDE1IDEzOjIwOjM2IDIwMDUKLS0tLSBlbl9VUy5hZmYJU2F0IEFwciAyMyAxOTo1Nzo1MiAyMDA1CistLS0gZW5fVVMuYWZmCVR1ZSBKdW4gMjEgMjA6NDY6NTIgMjAwNQogKioqKioqKioqKioqKioqCiAqKiogMyw0ICoqKioKLS0tLSAzLDggLS0tLQorLS0tIDMsMTAgLS0tLQogICAKLSsgRk9MICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/wotKyBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/Ci0rIFVQUCAgwMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KKysgRk9MICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7fCisrIExPVyAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3worKyBVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t8KKysgCisrIFJBUiA/CiArIAogICBQRlggQSBZIDEKICoqKioqKioqKioqKioqKgpAQCAtMTUsNyArMTcsNyBAQAogISBTRlggTiAgIHkgICAgIGljYXRpb24gICAgeSAKICEgU0ZYIE4gICAwICAgICBlbiAgICAgICAgIFteZXldIAogICAKLS0tLSAzNCwzNyAtLS0tCistLS0gMzYsMzkgLS0tLQogICBTRlggTiAgIGUgICAgIGlvbiAgICAgICAgZQogISBTRlggTiAgIHkgICAgIGljYXRpb24gICAgeQogISBTRlggTiAgIDAgICAgIGVuICAgICAgICAgW15leV0KQEAgLTI1LDcgKzI3LDcgQEAKICAgU0ZYIEggICB5ICAgICBpZXRoICAgICAgIHkKICEgU0ZYIEggICAwICAgICB0aCAgICAgICAgIFteeV0gCiAgIAotLS0tIDQ0LDQ2IC0tLS0KKy0tLSA0Niw0OCAtLS0tCiAgIFNGWCBIICAgeSAgICAgaWV0aCAgICAgICB5CiAhIFNGWCBIICAgMCAgICAgdGggICAgICAgICBbXnldCiAgIApAQCAtMzQsNjkgKzM2LDMzNCBAQAogICBTRlggRyAgIGUgICAgIGluZyAgICAgICAgZQogISBTRlggRyAgIDAgICAgIGluZyAgICAgICAgW15lXSAKICAgCi0tLS0gNTEsNTMgLS0tLQorLS0tIDUzLDU1IC0tLS0KICAgU0ZYIEcgICBlICAgICBpbmcgICAgICAgIGUKICEgU0ZYIEcgICAwICAgICBpbmcgICAgICAgIFteZV0KICAgCisqKioqKioqKioqKioqKioKKyoqKiAxMzcsMTM4ICoqKioKKy0tLSAxNDMsMTQ2IC0tLS0KKyAgUkVQIHV5IGkKKysgUkVQIHkgaWUKKysgUkVQIGllIHkKKyAgUkVQIGkgZWUKKyoqKioqKioqKioqKioqKgorKioqIDE4OCAqKioqCistLS0gMTk2LDMxNyAtLS0tCisgIFJFUCBzaHVuIGNpb24KKysgCisrIE1BUCA1CisrIE1BUCBh4OHi4+TlCisrIE1BUCBl6Onq6worKyBNQVAgaezt7u8KKysgTUFQIG/y8/T19gorKyBNQVAgdfn6+/wKKysgTUFQIG7xCisrIE1BUCBj5worKyBNQVAgef/9CisrIE1BUCBz3worKyAKKysgIyBUaGlzIGNvbWVzIGZyb20gQXNwZWxsIGVuX3Bob25ldC5kYXQsIHZlcnNpb24gMS4xLCAyMDAwLTAxLTA3CisrIAorKyBTQUwgQUgoQUVJT1VZKS1eICAgICAgICAgKkgKKysgU0FMIEFSKEFFSU9VWSktXiAgICAgICAgICpSCisrIFNBTCBBKEhSKV4gICAgICAgICAgICAgICAqCisrIFNBTCBBXiAgICAgICAgICAgICAgICAgICAqCisrIFNBTCBBSChBRUlPVVkpLSAgICAgICAgICBICisrIFNBTCBBUihBRUlPVVkpLSAgICAgICAgICBSCisrIFNBTCBBKEhSKSAgICAgICAgICAgICAgICBfCisrIFNBTCDAXiAgICAgICAgICAgICAgICAgICAqCisrIFNBTCDFXiAgICAgICAgICAgICAgICAgICAqCisrIFNBTCBCQi0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBCICAgICAgICAgICAgICAgICAgICBCCisrIFNBTCBDUS0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBDSUEgICAgICAgICAgICAgICAgICBYCisrIFNBTCBDSCAgICAgICAgICAgICAgICAgICBYCisrIFNBTCBDKEVJWSktICAgICAgICAgICAgICBTCisrIFNBTCBDSyAgICAgICAgICAgICAgICAgICBLCisrIFNBTCBDT1VHSF4gICAgICAgICAgICAgICBLRgorKyBTQUwgQ0M8ICAgICAgICAgICAgICAgICAgQworKyBTQUwgQyAgICAgICAgICAgICAgICAgICAgSworKyBTQUwgREcoRUlZKSAgICAgICAgICAgICAgSworKyBTQUwgREQtICAgICAgICAgICAgICAgICAgXworKyBTQUwgRCAgICAgICAgICAgICAgICAgICAgVAorKyBTQUwgyTwgICAgICAgICAgICAgICAgICAgRQorKyBTQUwgRUgoQUVJT1VZKS1eICAgICAgICAgKkgKKysgU0FMIEVSKEFFSU9VWSktXiAgICAgICAgICpSCisrIFNBTCBFKEhSKV4gICAgICAgICAgICAgICAqCisrIFNBTCBFTk9VR0heJCAgICAgICAgICAgICAqTkYKKysgU0FMIEVeICAgICAgICAgICAgICAgICAgICoKKysgU0FMIEVIKEFFSU9VWSktICAgICAgICAgIEgKKysgU0FMIEVSKEFFSU9VWSktICAgICAgICAgIFIKKysgU0FMIEUoSFIpICAgICAgICAgICAgICAgIF8KKysgU0FMIEZGLSAgICAgICAgICAgICAgICAgIF8KKysgU0FMIEYgICAgICAgICAgICAgICAgICAgIEYKKysgU0FMIEdOXiAgICAgICAgICAgICAgICAgIE4KKysgU0FMIEdOJCAgICAgICAgICAgICAgICAgIE4KKysgU0FMIEdOUyQgICAgICAgICAgICAgICAgIE5TCisrIFNBTCBHTkVEJCAgICAgICAgICAgICAgICBOCisrIFNBTCBHSChBRUlPVVkpLSAgICAgICAgICBLCisrIFNBTCBHSCAgICAgICAgICAgICAgICAgICBfCisrIFNBTCBHRzkgICAgICAgICAgICAgICAgICBLCisrIFNBTCBHICAgICAgICAgICAgICAgICAgICBLCisrIFNBTCBIICAgICAgICAgICAgICAgICAgICBICisrIFNBTCBJSChBRUlPVVkpLV4gICAgICAgICAqSAorKyBTQUwgSVIoQUVJT1VZKS1eICAgICAgICAgKlIKKysgU0FMIEkoSFIpXiAgICAgICAgICAgICAgICoKKysgU0FMIEleICAgICAgICAgICAgICAgICAgICoKKysgU0FMIElORzYgICAgICAgICAgICAgICAgIE4KKysgU0FMIElIKEFFSU9VWSktICAgICAgICAgIEgKKysgU0FMIElSKEFFSU9VWSktICAgICAgICAgIFIKKysgU0FMIEkoSFIpICAgICAgICAgICAgICAgIF8KKysgU0FMIEogICAgICAgICAgICAgICAgICAgIEsKKysgU0FMIEtOXiAgICAgICAgICAgICAgICAgIE4KKysgU0FMIEtLLSAgICAgICAgICAgICAgICAgIF8KKysgU0FMIEsgICAgICAgICAgICAgICAgICAgIEsKKysgU0FMIExBVUdIXiAgICAgICAgICAgICAgIExGCisrIFNBTCBMTC0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBMICAgICAgICAgICAgICAgICAgICBMCisrIFNBTCBNQiQgICAgICAgICAgICAgICAgICBNCisrIFNBTCBNTSAgICAgICAgICAgICAgICAgICBNCisrIFNBTCBNICAgICAgICAgICAgICAgICAgICBNCisrIFNBTCBOTi0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBOICAgICAgICAgICAgICAgICAgICBOCisrIFNBTCBPSChBRUlPVVkpLV4gICAgICAgICAqSAorKyBTQUwgT1IoQUVJT1VZKS1eICAgICAgICAgKlIKKysgU0FMIE8oSFIpXiAgICAgICAgICAgICAgICoKKysgU0FMIE9eICAgICAgICAgICAgICAgICAgICoKKysgU0FMIE9IKEFFSU9VWSktICAgICAgICAgIEgKKysgU0FMIE9SKEFFSU9VWSktICAgICAgICAgIFIKKysgU0FMIE8oSFIpICAgICAgICAgICAgICAgIF8KKysgU0FMIFBIICAgICAgICAgICAgICAgICAgIEYKKysgU0FMIFBOXiAgICAgICAgICAgICAgICAgIE4KKysgU0FMIFBQLSAgICAgICAgICAgICAgICAgIF8KKysgU0FMIFAgICAgICAgICAgICAgICAgICAgIFAKKysgU0FMIFEgICAgICAgICAgICAgICAgICAgIEsKKysgU0FMIFJIXiAgICAgICAgICAgICAgICAgIFIKKysgU0FMIFJPVUdIXiAgICAgICAgICAgICAgIFJGCisrIFNBTCBSUi0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBSICAgICAgICAgICAgICAgICAgICBSCisrIFNBTCBTQ0goRU9VKS0gICAgICAgICAgICBTSworKyBTQUwgU0MoSUVZKS0gICAgICAgICAgICAgUworKyBTQUwgU0ggICAgICAgICAgICAgICAgICAgWAorKyBTQUwgU0koQU8pLSAgICAgICAgICAgICAgWAorKyBTQUwgU1MtICAgICAgICAgICAgICAgICAgXworKyBTQUwgUyAgICAgICAgICAgICAgICAgICAgUworKyBTQUwgVEkoQU8pLSAgICAgICAgICAgICAgWAorKyBTQUwgVEggICAgICAgICAgICAgICAgICAgQAorKyBTQUwgVENILS0gICAgICAgICAgICAgICAgXworKyBTQUwgVE9VR0heICAgICAgICAgICAgICAgVEYKKysgU0FMIFRULSAgICAgICAgICAgICAgICAgIF8KKysgU0FMIFQgICAgICAgICAgICAgICAgICAgIFQKKysgU0FMIFVIKEFFSU9VWSktXiAgICAgICAgICpICisrIFNBTCBVUihBRUlPVVkpLV4gICAgICAgICAqUgorKyBTQUwgVShIUileICAgICAgICAgICAgICAgKgorKyBTQUwgVV4gICAgICAgICAgICAgICAgICAgKgorKyBTQUwgVUgoQUVJT1VZKS0gICAgICAgICAgSAorKyBTQUwgVVIoQUVJT1VZKS0gICAgICAgICAgUgorKyBTQUwgVShIUikgICAgICAgICAgICAgICAgXworKyBTQUwgVl4gICAgICAgICAgICAgICAgICAgVworKyBTQUwgViAgICAgICAgICAgICAgICAgICAgRgorKyBTQUwgV1JeICAgICAgICAgICAgICAgICAgUgorKyBTQUwgV0heICAgICAgICAgICAgICAgICAgVworKyBTQUwgVyhBRUlPVSktICAgICAgICAgICAgVworKyBTQUwgWF4gICAgICAgICAgICAgICAgICAgUworKyBTQUwgWCAgICAgICAgICAgICAgICAgICAgS1MKKysgU0FMIFkoQUVJT1UpLSAgICAgICAgICAgIFkKKysgU0FMIFpaLSAgICAgICAgICAgICAgICAgIF8KKysgU0FMIFogICAgICAgICAgICAgICAgICAgIFMKICoqKiBlbl9VUy5vcmlnLmRpYwlGcmkgQXByIDE1IDEzOjIwOjM2IDIwMDUKLS0tLSBlbl9VUy5kaWMJVHVlIEFwciAxOSAyMzowODozNiAyMDA1CistLS0gZW5fVVMuZGljCVR1ZSBKdW4gMjEgMjA6MjY6MjIgMjAwNQorKioqKioqKioqKioqKioqCisqKiogNTk0NCw1OTQ2ICoqKioKKyAgYmsKKyEgYi9LR0QKKyAgQmsvTQorLS0tIDU5NDQsNTk0NyAtLS0tCisgIGJrCishIHByb2JpbmcKKyEgcHJvYmVkCisgIEJrL00KKyoqKioqKioqKioqKioqKgorKioqIDkyMzMsOTIzNSAqKioqCisgIGNldGFjZWFuL1MKKy0gY2V0ZXJhL1MKKyAgQ2V0dXMvTQorLS0tIDkyMzQsOTIzNSAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAxNDAzOCwxNDA0MyAqKioqCisgIGRhenpsaW5nL1kKKy0gZGIKKy0gREIKKyAgZGJsCisgIGRCL00KKyAgREJNUworLS0tIDE0MDM4LDE0MDQ0IC0tLS0KKyAgZGF6emxpbmcvWQorICBkYmwKKyAgZEIvTQorKyBkQmkKKysgZEJtCisrIGRCZAorICBEQk1TCiAqKioqKioqKioqKioqKioKICoqKiAxNjkxMSwxNjkxMiAqKioqCi0tLS0gMTY5MTEsMTY5MTMgLS0tLQorLS0tIDE2OTEyLDE2OTE0IC0tLS0KICAgZHVzdHkvUlBUCiArIEZhcnNpCiAgIER1dGNoL00KICoqKioqKioqKioqKioqKgorKioqIDE4NzgwLDE4NzgyICoqKioKKyAgZXN0dWFyeS9TTQorISBldAorICBFVAorLS0tIDE4NzgyLDE4Nzg1IC0tLS0KKyAgZXN0dWFyeS9TTQorISBldCBjZXRlcmEvUworISBldCBhbC4KKyAgRVQKKyoqKioqKioqKioqKioqKgorKioqIDE4Nzg1LDE4Nzg3ICoqKioKKyAgZXRhL1NNCishIGV0YworICBldGNldGVyYS9TTQorLS0tIDE4Nzg4LDE4NzkwIC0tLS0KKyAgZXRhL1NNCishIGV0Yy4KKyAgZXRjZXRlcmEvU00KKyoqKioqKioqKioqKioqKgogKioqIDI1OTYzLDI1OTY1ICoqKioKICAgaG9iYmluZwogISBob2JiaXQKICAgaG9iYmxlci9NCi0tLS0gMjU5NjQsMjU5NjYgLS0tLQorLS0tIDI1OTY2LDI1OTY4IC0tLS0KICAgaG9iYmluZwogISBob2JiaXQvTVMKICAgaG9iYmxlci9NCiAqKioqKioqKioqKioqKioKKyoqKiAyNjUyNCwyNjUyNiAqKioqCisgIEhTVAorLSBodAorICBIVE1MCistLS0gMjY1MjcsMjY1MjggLS0tLQorKioqKioqKioqKioqKioqCisqKiogMzQ3NDYsMzQ3NDcgKioqKgorLS0tIDM0NzQ4LDM0NzUxIC0tLS0KKyAgTWIKKysgTWJ5dGUKKysgTWJpdAorICBNQgorKioqKioqKioqKioqKioqCiAqKiogMzY2MDUsMzY2MDYgKioqKgotLS0tIDM2NjA2LDM2NjA4IC0tLS0KKy0tLSAzNjYwOSwzNjYxMSAtLS0tCiAgIE1vb2cKICsgTW9vbGVuYWFyL00KICAgbW9vL0dTRAogKioqKioqKioqKioqKioqCiAqKiogMzg4NzEsMzg4NzMgKioqKgogICBOU0YKLSEgbi9UCistIG4vVAogICBOVAotLS0tIDM4ODczLDM4ODc1IC0tLS0KLSAgTlNGCi0hIG4KLSAgTlQKKy0tLSAzODg3NiwzODg3NyAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiAzOTUzMiwzOTUzNCAqKioqCisgIG9tL1hOCistIE9OCisgIG9uYW5pc20vTQorLS0tIDM5NTM2LDM5NTM3IC0tLS0KKyoqKioqKioqKioqKioqKgorKioqIDQyNTA4LDQyNTEwICoqKioKKyAgcGluZmVhdGhlci9TTQorISBwaW5nL0dEUk0KKyAgcGluaGVhZGVkL1AKKy0tLSA0MjUxMSw0MjUxMyAtLS0tCisgIHBpbmZlYXRoZXIvU00KKyEgcGluZy9HRFJNUworICBwaW5oZWFkZWQvUAorKioqKioqKioqKioqKioqCisqKiogNDI5ODMsNDI5ODQgKioqKgorLS0tIDQyOTg2LDQyOTg4IC0tLS0KKyAgcG5ldW1vbmlhL01TCisrIHBuZXVtb25pYworICBQTworKioqKioqKioqKioqKioqCisqKiogNDMyMTYsNDMyMTggKioqKgorICBwb21wb20vU00KKyEgcG9tcG9uJ3MKKyAgcG9tcG9zaXR5L01TCistLS0gNDMyMjAsNDMyMjIgLS0tLQorICBwb21wb20vU00KKyEgcG9tcG9uL00KKyAgcG9tcG9zaXR5L01TCisqKioqKioqKioqKioqKioKKyoqKiA0NDk0MCw0NDk0MiAqKioqCisgIFBYCistIHAvWFRHSgorICBQeWdtYWxpb24vTQorLS0tIDQ0OTQ0LDQ0OTQ1IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDQ2NTA3LDQ2NTA5ICoqKioKICAgUmVuYXVsdC9NUwogLSByZW5kCiAgIHJlbmRlcmVyL00KLS0tLSA0NjUwOSw0NjUxMCAtLS0tCistLS0gNDY1MTAsNDY1MTEgLS0tLQorKioqKioqKioqKioqKioqCisqKiogNDcyNTgsNDcyNjAgKioqKgorICByaW5nZXIvTQorISByaW5nL0daSkRSTQorICByaW5naW5nL1kKKy0tLSA0NzI2MCw0NzI2MiAtLS0tCisgIHJpbmdlci9NCishIHJpbmcvR1pKRFJNUworICByaW5naW5nL1kKKyoqKioqKioqKioqKioqKgorKioqIDQ3ODU3LDQ3ODYyICoqKioKKyAgcnQKKy0gcnRlCisgIFJ0ZQorICBSVEZNCistIHIvVEdWSgorICBSdWJhaXlhdC9NCistLS0gNDc4NTksNDc4NjIgLS0tLQogKioqKioqKioqKioqKioqCiAqKiogNDgwODUsNDgwODcgKioqKgogICBSeXVuL00KIC0gUwogICBTQQotLS0tIDQ4MDg2LDQ4MDg3IC0tLS0KKy0tLSA0ODA4NSw0ODA4NiAtLS0tCiAqKioqKioqKioqKioqKioKICoqKiA1NDQ1MCw1NDQ1MiAqKioqCiAgIHN3dW5nCiAhIHMvWEpCRwogICBzeWJhcml0ZS9NUwotLS0tIDU0NDUwLDU0NDUyIC0tLS0KKy0tLSA1NDQ0OSw1NDQ1MSAtLS0tCiAgIHN3dW5nCiAhIHNpbmdzCiAgIHN5YmFyaXRlL01TCiAqKioqKioqKioqKioqKioKKyoqKiA1NzgwOSw1NzgxMSAqKioqCisgIFR6ZWx0YWwvTQorLSB1CisgIFUKKy0tLSA1NzgwOCw1NzgwOSAtLS0tCisqKioqKioqKioqKioqKioKKyoqKiA1ODQ5NCw1ODQ5NSAqKioqCistLS0gNTg0OTIsNTg0OTQgLS0tLQorICB1bnNlYXJjaGFibGUKKysgc2VhcmNoYWJsZQorICB1bnNlYXNvbmFsCisqKioqKioqKioqKioqKioKICoqKiA1OTUzOCw1OTU0MCAqKioqCiAgIHZpL01EUgogISB2aW0vTVMKICAgdmluYWlncmV0dGUvTVMKLS0tLSA1OTUzOCw1OTU0MCAtLS0tCistLS0gNTk1MzcsNTk1MzkgLS0tLQogICB2aS9NRFIKICEgVmltL01TCiAgIHZpbmFpZ3JldHRlL01TCisqKioqKioqKioqKioqKioKKyoqKiA2MjA3NyAqKioqCistLS0gNjIwNzYsNjIwNzggLS0tLQorICB6eW11cmd5L1MKKysgdGhlIHRoZS8/CisrIG5kCmRpZmYgLS1naXQgYS9zcmMvc3BlbGwvZnJfRlIuZGlmZiBiL3NyYy9zcGVsbC9mcl9GUi5kaWZmCmluZGV4IDBjOTU1ZGUuLjFjMDI3MjggMTAwNjQ0Ci0tLSBhL3NyYy9zcGVsbC9mcl9GUi5kaWZmCisrKyBiL3NyYy9zcGVsbC9mcl9GUi5kaWZmCkBAIC0xLDExICsxLDExIEBACiAqKiogZnJfRlIub3JpZy5hZmYJU3VuIEFwciAxNCAxNzoxODoyMiAyMDAyCi0tLS0gZnJfRlIuYWZmCVNhdCBBcHIgMjMgMTk6NTc6MjYgMjAwNQorLS0tIGZyX0ZSLmFmZglTYXQgSnVuIDE4IDE5OjQzOjAyIDIwMDUKICoqKioqKioqKioqKioqKgogKioqIDMsNCAqKioqCiAtLS0gMyw4IC0tLS0KICAgCi0rIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KLSsgTE9XICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/wotKyBVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/CisrIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3worKyBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KKysgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7fCiArIAogICBQRlggQSBZIDEwCmRpZmYgLS1naXQgYS9zcmMvc3BlbGwvaGVfSUwuZGlmZiBiL3NyYy9zcGVsbC9oZV9JTC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZmRlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3BlbGwvaGVfSUwuZGlmZgpAQCAtMCwwICsxLDEwIEBACisqKiogaGVfSUwub3JpZy5hZmYJU2F0IEp1biAxOCAxNDo0Njo1MSAyMDA1CistLS0gaGVfSUwuYWZmCVNhdCBKdW4gMTggMTU6MTM6MzQgMjAwNQorKioqKioqKioqKioqKioqCisqKiogMiwzICoqKioKKy0tLSAyLDYgLS0tLQorICBUUlkg6eXk4PLn6/cnIvnx5uPi4fjw7uj2+vTt8+r17+wKKysgCisrIFBGWFBPU1RQT05FCisrIAorICAjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBkYXRhIHByZXBhcmVkCmRpZmYgLS1naXQgYS9zcmMvc3BlbGwvbmxfTkwuZGlmZiBiL3NyYy9zcGVsbC9ubF9OTC5kaWZmCmluZGV4IGNkYzMxNDYuLmY2YThmMDggMTAwNjQ0Ci0tLSBhL3NyYy9zcGVsbC9ubF9OTC5kaWZmCisrKyBiL3NyYy9zcGVsbC9ubF9OTC5kaWZmCkBAIC0xLDEyICsxLDEyIEBACiAqKiogbmxfTkwub3JpZy5hZmYJV2VkIEFwciAyMCAxMTo0ODoxNiAyMDA1Ci0tLS0gbmxfTkwuYWZmCVNhdCBBcHIgMjMgMTY6NDg6MjcgMjAwNQorLS0tIG5sX05MLmFmZglUdWUgSnVuIDIxIDExOjA4OjMyIDIwMDUKICoqKioqKioqKioqKioqKgogKioqIDMsNCAqKioqCiAtLS0gMyw4IC0tLS0KICAgCi0rIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KLSsgTE9XICDg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/wotKyBVUFAgIMDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/CisrIEZPTCAg4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3worKyBMT1cgIODh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t8KKysgVVBQICDAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7fCiArIAogICBOT1NQTElUU1VHUwogKioqKioqKioqKioqKioqCkBAIC0xMTEsNDMgKzExMSwzODAgQEAKICEgUkVQIGtvbnRla3N0IGNvbnRleHQKICEgUkVQIGtvcnJla3QgY29ycmVjdAogICBSRVAga3JpdGlrdXMgY3JpdGljdXMKKyoqKioqKioqKioqKioqKgorKioqIDMzMyAqKioqCistLS0gMzM3LDQ1OCAtLS0tCisgIFJFUCBhZmxhc3NlbiBhZmdlbGFzdGVuCisrIAorKyBNQVAgNQorKyBNQVAgYeDh4uPk5QorKyBNQVAgZejp6usKKysgTUFQIGns7e7vCisrIE1BUCBv8vP09fYKKysgTUFQIHX5+vv8CisrIE1BUCBu8QorKyBNQVAgY+cKKysgTUFQIHn//QorKyBNQVAgc98KKysgCisrICMgVGhpcyBjb21lcyBmcm9tIEFzcGVsbCBlbl9waG9uZXQuZGF0LCB2ZXJzaW9uIDEuMSwgMjAwMC0wMS0wNworKyAKKysgU0FMIEFIKEFFSU9VWSktXiAgICAgICAgICpICisrIFNBTCBBUihBRUlPVVkpLV4gICAgICAgICAqUgorKyBTQUwgQShIUileICAgICAgICAgICAgICAgKgorKyBTQUwgQV4gICAgICAgICAgICAgICAgICAgKgorKyBTQUwgQUgoQUVJT1VZKS0gICAgICAgICAgSAorKyBTQUwgQVIoQUVJT1VZKS0gICAgICAgICAgUgorKyBTQUwgQShIUikgICAgICAgICAgICAgICAgXworKyBTQUwgwF4gICAgICAgICAgICAgICAgICAgKgorKyBTQUwgxV4gICAgICAgICAgICAgICAgICAgKgorKyBTQUwgQkItICAgICAgICAgICAgICAgICAgXworKyBTQUwgQiAgICAgICAgICAgICAgICAgICAgQgorKyBTQUwgQ1EtICAgICAgICAgICAgICAgICAgXworKyBTQUwgQ0lBICAgICAgICAgICAgICAgICAgWAorKyBTQUwgQ0ggICAgICAgICAgICAgICAgICAgWAorKyBTQUwgQyhFSVkpLSAgICAgICAgICAgICAgUworKyBTQUwgQ0sgICAgICAgICAgICAgICAgICAgSworKyBTQUwgQ09VR0heICAgICAgICAgICAgICAgS0YKKysgU0FMIENDPCAgICAgICAgICAgICAgICAgIEMKKysgU0FMIEMgICAgICAgICAgICAgICAgICAgIEsKKysgU0FMIERHKEVJWSkgICAgICAgICAgICAgIEsKKysgU0FMIERELSAgICAgICAgICAgICAgICAgIF8KKysgU0FMIEQgICAgICAgICAgICAgICAgICAgIFQKKysgU0FMIMk8ICAgICAgICAgICAgICAgICAgIEUKKysgU0FMIEVIKEFFSU9VWSktXiAgICAgICAgICpICisrIFNBTCBFUihBRUlPVVkpLV4gICAgICAgICAqUgorKyBTQUwgRShIUileICAgICAgICAgICAgICAgKgorKyBTQUwgRU5PVUdIXiQgICAgICAgICAgICAgKk5GCisrIFNBTCBFXiAgICAgICAgICAgICAgICAgICAqCisrIFNBTCBFSChBRUlPVVkpLSAgICAgICAgICBICisrIFNBTCBFUihBRUlPVVkpLSAgICAgICAgICBSCisrIFNBTCBFKEhSKSAgICAgICAgICAgICAgICBfCisrIFNBTCBGRi0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBGICAgICAgICAgICAgICAgICAgICBGCisrIFNBTCBHTl4gICAgICAgICAgICAgICAgICBOCisrIFNBTCBHTiQgICAgICAgICAgICAgICAgICBOCisrIFNBTCBHTlMkICAgICAgICAgICAgICAgICBOUworKyBTQUwgR05FRCQgICAgICAgICAgICAgICAgTgorKyBTQUwgR0goQUVJT1VZKS0gICAgICAgICAgSworKyBTQUwgR0ggICAgICAgICAgICAgICAgICAgXworKyBTQUwgR0c5ICAgICAgICAgICAgICAgICAgSworKyBTQUwgRyAgICAgICAgICAgICAgICAgICAgSworKyBTQUwgSCAgICAgICAgICAgICAgICAgICAgSAorKyBTQUwgSUgoQUVJT1VZKS1eICAgICAgICAgKkgKKysgU0FMIElSKEFFSU9VWSktXiAgICAgICAgICpSCisrIFNBTCBJKEhSKV4gICAgICAgICAgICAgICAqCisrIFNBTCBJXiAgICAgICAgICAgICAgICAgICAqCisrIFNBTCBJTkc2ICAgICAgICAgICAgICAgICBOCisrIFNBTCBJSChBRUlPVVkpLSAgICAgICAgICBICisrIFNBTCBJUihBRUlPVVkpLSAgICAgICAgICBSCisrIFNBTCBJKEhSKSAgICAgICAgICAgICAgICBfCisrIFNBTCBKICAgICAgICAgICAgICAgICAgICBLCisrIFNBTCBLTl4gICAgICAgICAgICAgICAgICBOCisrIFNBTCBLSy0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBLICAgICAgICAgICAgICAgICAgICBLCisrIFNBTCBMQVVHSF4gICAgICAgICAgICAgICBMRgorKyBTQUwgTEwtICAgICAgICAgICAgICAgICAgXworKyBTQUwgTCAgICAgICAgICAgICAgICAgICAgTAorKyBTQUwgTUIkICAgICAgICAgICAgICAgICAgTQorKyBTQUwgTU0gICAgICAgICAgICAgICAgICAgTQorKyBTQUwgTSAgICAgICAgICAgICAgICAgICAgTQorKyBTQUwgTk4tICAgICAgICAgICAgICAgICAgXworKyBTQUwgTiAgICAgICAgICAgICAgICAgICAgTgorKyBTQUwgT0goQUVJT1VZKS1eICAgICAgICAgKkgKKysgU0FMIE9SKEFFSU9VWSktXiAgICAgICAgICpSCisrIFNBTCBPKEhSKV4gICAgICAgICAgICAgICAqCisrIFNBTCBPXiAgICAgICAgICAgICAgICAgICAqCisrIFNBTCBPSChBRUlPVVkpLSAgICAgICAgICBICisrIFNBTCBPUihBRUlPVVkpLSAgICAgICAgICBSCisrIFNBTCBPKEhSKSAgICAgICAgICAgICAgICBfCisrIFNBTCBQSCAgICAgICAgICAgICAgICAgICBGCisrIFNBTCBQTl4gICAgICAgICAgICAgICAgICBOCisrIFNBTCBQUC0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBQICAgICAgICAgICAgICAgICAgICBQCisrIFNBTCBRICAgICAgICAgICAgICAgICAgICBLCisrIFNBTCBSSF4gICAgICAgICAgICAgICAgICBSCisrIFNBTCBST1VHSF4gICAgICAgICAgICAgICBSRgorKyBTQUwgUlItICAgICAgICAgICAgICAgICAgXworKyBTQUwgUiAgICAgICAgICAgICAgICAgICAgUgorKyBTQUwgU0NIKEVPVSktICAgICAgICAgICAgU0sKKysgU0FMIFNDKElFWSktICAgICAgICAgICAgIFMKKysgU0FMIFNIICAgICAgICAgICAgICAgICAgIFgKKysgU0FMIFNJKEFPKS0gICAgICAgICAgICAgIFgKKysgU0FMIFNTLSAgICAgICAgICAgICAgICAgIF8KKysgU0FMIFMgICAgICAgICAgICAgICAgICAgIFMKKysgU0FMIFRJKEFPKS0gICAgICAgICAgICAgIFgKKysgU0FMIFRIICAgICAgICAgICAgICAgICAgIEAKKysgU0FMIFRDSC0tICAgICAgICAgICAgICAgIF8KKysgU0FMIFRPVUdIXiAgICAgICAgICAgICAgIFRGCisrIFNBTCBUVC0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBUICAgICAgICAgICAgICAgICAgICBUCisrIFNBTCBVSChBRUlPVVkpLV4gICAgICAgICAqSAorKyBTQUwgVVIoQUVJT1VZKS1eICAgICAgICAgKlIKKysgU0FMIFUoSFIpXiAgICAgICAgICAgICAgICoKKysgU0FMIFVeICAgICAgICAgICAgICAgICAgICoKKysgU0FMIFVIKEFFSU9VWSktICAgICAgICAgIEgKKysgU0FMIFVSKEFFSU9VWSktICAgICAgICAgIFIKKysgU0FMIFUoSFIpICAgICAgICAgICAgICAgIF8KKysgU0FMIFZeICAgICAgICAgICAgICAgICAgIFcKKysgU0FMIFYgICAgICAgICAgICAgICAgICAgIEYKKysgU0FMIFdSXiAgICAgICAgICAgICAgICAgIFIKKysgU0FMIFdIXiAgICAgICAgICAgICAgICAgIFcKKysgU0FMIFcoQUVJT1UpLSAgICAgICAgICAgIFcKKysgU0FMIFheICAgICAgICAgICAgICAgICAgIFMKKysgU0FMIFggICAgICAgICAgICAgICAgICAgIEtTCisrIFNBTCBZKEFFSU9VKS0gICAgICAgICAgICBZCisrIFNBTCBaWi0gICAgICAgICAgICAgICAgICBfCisrIFNBTCBaICAgICAgICAgICAgICAgICAgICBTCiAqKiogbmxfTkwub3JpZy5kaWMJVHVlIEFwciAxOSAyMTowMzoxNSAyMDA1Ci0tLS0gbmxfTkwuZGljCVdlZCBBcHIgMjAgMTg6NDc6MDcgMjAwNQorLS0tIG5sX05MLmRpYwlXZWQgSnVuIDE1IDEwOjM2OjIwIDIwMDUKKyoqKioqKioqKioqKioqKgorKioqIDgsOSAqKioqCistLS0gOCwxMSAtLS0tCisgICdzLUhlcnRvZ2VuYm9zY2gKKysgZmlldHNzdGFuZGFhcmQKKysgZmlldHNsYW50YWFybgorICBBNAogKioqKioqKioqKioqKioqCiAqKiogOTEsOTMgKioqKgogICBBdGhlbmUKIC0gQXRoZW5lCiAgIEF0amVlcy9FCi0tLS0gOTEsOTIgLS0tLQorLS0tIDkzLDk0IC0tLS0KICoqKioqKioqKioqKioqKgogKioqIDIxNiwyMTcgKioqKgotLS0tIDIxNSwyMTggLS0tLQorLS0tIDIxNywyMjAgLS0tLQogICBCcnVzc2Vscy9FCiArIEJUVwogKyBCLlQuVy4KICAgQnVkZWwKICoqKioqKioqKioqKioqKgogKioqIDMyNSwzMjYgKioqKgotLS0tIDMyNiwzMjggLS0tLQorLS0tIDMyOCwzMzAgLS0tLQogICBEdXVyc3RlZGUKICsgRFZECiAgIER3aW5nZWxvbwogKioqKioqKioqKioqKioqCi0qKiogODEzLDgxNCAqKioqCi0tLS0gODE1LDgxNyAtLS0tCi0gIE1vbnRmb3J0Ci0rIE1vb2xlbmFhci9YCi0gIE1vb3JkcmVjaHQKKyoqKiA3NDg1LDc0ODYgKioqKgorLS0tIDc0ODksNzQ5MyAtLS0tCisgIGF2b25kL1NOCisrICdzIGF2b25kcworKyAncyBtaWRkYWdzCisrICdzIG9jaHRlbmRzCisgIGF2b25kYXBw6GwvUworKioqKioqKioqKioqKioqCisqKiogMjA2ODEsMjA2ODIgKioqKgorLS0tIDIwNjg4LDIwNjkwIC0tLS0KKyAgY3l0b3N0YXRpY2EKKysgZC5tLnYuCisgIGRhYWQvUAogKioqKioqKioqKioqKioqCiAqKiogNDYzMDAsNDYzMDEgKioqKgotLS0tIDQ2MzAzLDQ2MzA1IC0tLS0KKy0tLSA0NjMwOCw0NjMxMCAtLS0tCiAgIGluZm9ybWF0aWN1cwogKyBpbmZvcm1hdGllL1MKICAgaW5mb3JtYXRpZS11aXR3aXNzZWxpbmcKICoqKioqKioqKioqKioqKgotKioqIDYwMjA2LDYwMjA3ICoqKioKLS0tLSA2MDIxMCw2MDIxMyAtLS0tCisqKiogNjAyMDYsNjAyMDggKioqKgorLS0tIDYwMjE1LDYwMjIyIC0tLS0KICAgbPZzcwogKyBtLmEudy4KICsgbS5iLnQuCisrIG0ubi4KICAgbWEvSlcKKysgbW0KKysgbWcKKyAgbWFhZworKioqKioqKioqKioqKioqCisqKiogOTc0NzQsOTc0NzUgKioqKgorLS0tIDk3NDg4LDk3NDkwIC0tLS0KKyAgc3XvY2lkZXJpc2ljby9YCisrIHMudi5wLgorICBzd2FnZ2VyL1MKKyoqKioqKioqKioqKioqKgorKioqIDEwMTQyOCwxMDE0MjkgKioqKgorLS0tIDEwMTQ0MywxMDE0NDYgLS0tLQorICB0b2V6aWNodGhvdWRlci9TCisrIHRvZXppY2h0aG91ZGVyc2FhbnNwcmFrZWxpamtoZWlkc3Zlcnpla2VyaW5nCisrIHRvZXppY2h0aG91ZGVyc2FhbnNwcmFrZWxpamtoZWlkc3Zlcnpla2VyaW5nZW4KKyAgdG9lemllL04KKyoqKioqKioqKioqKioqKgorKioqIDEwMzcwNywxMDM3MDggKioqKgorLS0tIDEwMzcyNCwxMDM3MjYgLS0tLQorICB06nRlLeAtdOp0ZS9TCisrIHUKKyAgdWNodGVuZC9OCisqKioqKioqKioqKioqKioKKyoqKiAxMTk5MzggKioqKgorLS0tIDExOTk1NiwxMjAxMjYgLS0tLQorICD8YmVyaGF1cHQKKysgQ2hyaXN0aWFhbi9YCisrIEZyZWQvWAorKyBKYW5zZW4vWAorKyBKYW5zc2VuL1gKKysgTW9vbGVuYWFyL1gKKysgUmVuZWUvWAorKyBSZW7pL1gKKysgUmVu6WUvWAorKyBXYWx0ZXIvWAorKyAjIHRvZXZvZWdpbmdlbiB1aXQgZGUgV29vcmRlbmxpanN0IHZhbiAzMCBtZWkgMTk5NgorKyBhIGNhcGVsbGEKKysgYSBmb3J0aW9yaQorKyBhIHByaW9yaQorKyBhIHZpc3RhCisrIGFkIGhvbWluZW0KKysgYWZyaWthYW4KKysgYWZ0ZXJwaWwKKysgYWxtYSBtYXRlcgorKyBhbm9yZXhpYSBuZXJ2b3NhCisrIGFwZWxhemVydXMKKysgYXJ0IG5vdXZlYXUKKysgYXUgYmFpbiBtYXJpZQorKyBhdWN0b3IgaW50ZWxsZWN0dWFsaXMKKysgYXVjdG9yIGludGVsbGVjdHVhbGlzCisrIGF2YW50IGxhIGxldHRyZQorKyBiYWwgbWFzcXXpCisrIGJhc3NvIGNvbnRpbnVvCisrIGJhdGF2aWVyCisrIGJlbmVmaXQgb2YgdGhlIGRvdWJ0CisrIGJsYWNrIGJveAorKyBibGFjayBqYWNrCisrIGJsYWNrIHBvd2VyCisrIGJsdWUgamVhbnMKKysgYm9vZ2llIHdvb2dpZQorKyBicmljIOAgYnJhYworKyBidW5nZWUganVtcGluZworKyBjYXBpdGEgc2VsZWN0YQorKyBjaGFpc2UgbG9uZ3VlCisrIGNoaW5lemVuCisrIGNvbWluZyBtYW4KKysgY29tbWUgaWwgZmF1dAorKyBjb21tZWRpYSBkZWxsJyBhcnRlCisrIGNvbW11bmlzIG9waW5pbworKyBjb25zaWxpdW0gYWJldW5kaQorKyBjb3VsZXVyIGxvY2FsZQorKyBjb/t0ZSBxdWUgY2/7dGUKKysgZGFsYWkgbGFtYQorKyBkZSBqdXJlCisrIGRldXMgZXggbWFjaGluYQorKyBkb211cyBEZWkKKysgZHJhbWF0aXMgcGVyc29uYWUKKysgZWlnZW5lciBiZXdlZ2luZworKyBlbiBwbGVpbiBwdWJsaWMKKysgZW4gcHJvZmlsCisrIGVuZmFudCB0ZXJyaWJsZQorKyBlbnRyZSBub3VzCisrIGZhaXQgYWNjb21wbGkKKysgZmF1eCBwYXMKKysgZmVtbWUgZmF0YWxlCisrIGZpbGV0IGQnYW52ZXJzCisrIGZpbiBkZSBzaehjbGUKKysgZmluaXNoaW5nIHRvdWNoCisrIGZyYW5zZQorKyBmcmFuc21hbgorKyBnb3Rpc2NoCisrIGhhcHB5IGZldworKyBob3JhIGVzdAorKyBob3JzIGQnb2V1dnJlCisrIGluIGFic2VudGlhCisrIGluIGFic3RyYWN0bworKyBpbiBhbGxlbiBnZXZhbGxlCisrIGluIGV4dGVuc28KKysgaW4ga29lbGVuIGJsb2VkZQorKyBpbiBtZW1vcmlhbQorKyBpbiBzdGF0dSBuYXNjZW5kaQorKyBpbiB0cmlwbG8KKysgaW4gdm9jZQorKyBpbnZpdGUKKysgaXBzbyBmYWN0bworKyBqYWxvdXNpZSBkZSBt6XRpZXIKKysgamVob3ZhCisrIGpldW5lIHByZW1pZXIKKysgam9pbnQgdmVudHVyZQorKyBqdXMgZCdvcmFuZ2UKKysga2FsaXMKKysga291c2plcgorKyBsYWlzc2VyIGZhaXJlCisrIGxhaXNzZXogcGFzc2VyCisrIGxhcGlzIGxhenVsaQorKyBsYXRpbm8KKysgbG9nb3MKKysgbWHudHJlIGQnaPR0ZWwKKysgbWluaW1hbCBhcnQKKysgbmFhciBkZW4gdmxlemUKKysgbm9uIHNlcXVpdHVyCisrIG9mZiBsaW5lCisrIG9tIGRlbiBicm9kZQorKyBvbiBsaW5lCisrIG9yYXRpbyBwcm8gZG9tbworKyBvcmNoZXN0cmVyZW4KKysgcGFpbiDgIGxhIGdyZWNxdWUKKysgcGFyIGV4Y2VsbGVuY2UKKysgcGFzIGRlIGRldXgKKysgcGFzbyBkb2JsZQorKyBwYXRhdGVzIGZyaXRlcworKyBwZWF1IGRlIHDqY2hlCisrIHBlcnBldHV1bSBtb2JpbGUKKysgcGxhdCBkdSBqb3VyCisrIHBvb2wKKysgcG9zdGUgcmVzdGFudGUKKysgcG90IGF1IGZldQorKyBwcm9jZXN2ZXJiYWFsCisrIHByb21pbGl0YWlyCisrIHB1YmxpYyByZWxhdGlvbnMKKysgcHVyIHNhbmcKKysgcXVhbGl0YXRlIHF1YQorKyBxdWVzdGlvbm5haXJlCisrIHJlY3RvciBtYWduaWZpY3VzCisrIHJlbWVkaWFsIHRlYWNoZXIKKysgcmVtZWRpYWwgdGVhY2hpbmcKKysgcmlnb3IgbW9ydGlzCisrIHJvbWVpbgorKyBzZWxmLWZ1bGZpbGxpbmcgcHJvcGhlY3kKKysgc2VwdGljIHRhbmsKKysgc2hvcnQgc3RvcnkKKysgc290dG8gdm9jZQorKyBzdGVoZ2VpZ2VyCisrIHN1YiByb3NhCisrIHN1ciBwbGFjZQorKyB0LWJvbmVzdGVhaworKyB0ZSBiZXN0ZW1kZXIgcGxhYXRzZQorKyB0ZSBiZXN0ZW1kZXIgdGlqZAorKyB0ZSBlbGZkZXIgdXJlCisrIHRlIGVuaWdlciB0aWpkCisrIHRlIGdlbGRlIG1ha2VuCisrIHRlIG9uemVuIHZvb3JkZWxlCisrIHRlbiBhbGdlbWVuZW4gbnV0dGUKKysgdGVuIGFuZGVyZW4gbWFsZQorKyB0ZW4gYmVzbHVpdGUKKysgdGVuIGJld2lqemUKKysgdGVuIGRlcmRlIG1hbGUKKysgdGVuIGdlc2NoZW5rZSBnZXZlbgorKyB0ZW4gZ2VzY2hlbmtlIGtyaWpnZW4KKysgdGVuIHR3ZWVkZSBtYWxlCisrIHRlbiB2ZXJ2b2xnZSBvcAorKyB0ZXIgYWFuZ2VoYWFsZGVyIHBsYWF0c2UKKysgdGVyIGJlc3RlbWRlciBwbGFhdHNlCisrIHRlciBiZXN0ZW1kZXIgdGlqZAorKyB0ZXIgYmV1cnplCisrIHRlciBlZW5yZSB6aWpkZQorKyB0ZXIgZWxmZGVyIHVyZQorKyB0ZXIga2Vya2UKKysgdGVyIG9yZQorKyB0ZXJuZWVybGlnZ2VuCisrIHRlcm5lZXJzbGFhbgorKyB0ZXJuZWVydmFsbGVuCisrIHRlcnRpYWlyCisrIHRvcCBzZWNyZXQKKysgdG90IGJsb2VkZW5zIHRvZQorKyB0b3RhbCBsb3NzCisrIHR1cmtlbgorKyB1cHBlciB0ZW4KKysgdXBzIGFuZCBkb3ducworKyB2YW4ga29uaW5rbGlqa2VuIGJsb2VkZQorKyB2YW4gemlubmVucyB6aWpuCisrIHZpb2xhIGRhIGdhbWJhCisrIHdoaXRlIHNwaXJpdAorKyB3aXNoZnVsIHRoaW5raW5nCisrIOAgZ29nbworKyDgIHByb3BvcwpkaWZmIC0tZ2l0IGEvc3JjL3NwZWxsL3BsX1BMLmRpZmYgYi9zcmMvc3BlbGwvcGxfUEwuZGlmZgppbmRleCA1NmRlNmUxLi41NjJkNTlhIDEwMDY0NAotLS0gYS9zcmMvc3BlbGwvcGxfUEwuZGlmZgorKysgYi9zcmMvc3BlbGwvcGxfUEwuZGlmZgpAQCAtMSwxMCArMSwzMSBAQAogKioqIHBsX1BMLm9yaWcuYWZmCVdlZCBNYXIgMzAgMDY6NTA6MDIgMjAwNQotLS0tIHBsX1BMLmFmZglTYXQgQXByIDIzIDIwOjExOjE1IDIwMDUKKy0tLSBwbF9QTC5hZmYJU2F0IEp1biAxOCAxOTo0NTo0NSAyMDA1CiAqKioqKioqKioqKioqKioKICoqKiAzLDQgKioqKgogLS0tIDMsNyAtLS0tCiAgIAotKyBGT0wgsaKztbaoubq7vL6/sbKztLW2t7i5uru8vb6/4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v8KLSsgTE9XILGis7W2qLm6u7y+v7Gys7S1tre4ubq7vL2+v+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/Ci0rIFVQUCChoqOlpqipqqusrq+xsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/worKyBGT0wgsaKztbaoubq7vL6/sbKztLW2t7i5uru8vb6/4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+3/8KKysgTE9XILGis7W2qLm6u7y+v7Gys7S1tre4ubq7vL2+v+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/t//CisrIFVQUCChoqOlpqipqqusrq+xsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d7f/wogICAKKyoqKioqKioqKioqKioqKgorKioqIDY2MTQgKioqKgorLS0tIDY2MTcsNjYzNCAtLS0tCisgIFNGWCB5ICAgeSAgICAgICAgIGllICAgICAgICBqbXkKKysgCisrICMgUkVQIGVudHJpZXMgcHJvcG9zZWQgYnkgTWlrb2xhaiBNYWNob3dza2k6CisrIFJFUCAxNAorKyBSRVAgYiAgIHAKKysgUkVQIHAgICBiCisrIFJFUCC/ICAgcnoKKysgUkVQIHJ6ICC/CisrIFJFUCB3ICAgZgorKyBSRVAgZiAgIHcKKysgUkVQIPMgICB1CisrIFJFUCB1ICAg8worKyBSRVAgY2kgIOYKKysgUkVQIOYgICBjaQorKyBSRVAgc2kgILYKKysgUkVQILYgICBzaQorKyBSRVAgbmkgIPEKKysgUkVQIPEgICBuaQpkaWZmIC0tZ2l0IGEvc3JjL3N0cnVjdHMuaCBiL3NyYy9zdHJ1Y3RzLmgKaW5kZXggMTg5MTVjZi4uYjk3OTJiMSAxMDA2NDQKLS0tIGEvc3JjL3N0cnVjdHMuaAorKysgYi9zcmMvc3RydWN0cy5oCkBAIC0xOTU3LDcgKzE5NTcsNyBAQAogICAgIGNoYXJfdQkqYWN0ZXh0OwkgICAgLyogYWNjZWxlcmF0b3IgdGV4dCAoYWZ0ZXIgVEFCKSAqLwogICAgIGludAkJcHJpb3JpdHk7CSAgICAvKiBNZW51IG9yZGVyIHByaW9yaXR5ICovCiAjaWZkZWYgRkVBVF9HVUkKLSAgICB2b2lkCSgqY2IpKCk7CSAgICAvKiBDYWxsLWJhY2sgcm91dGluZSAqLworICAgIHZvaWQJKCpjYikgX19BUkdTKCh2aW1tZW51X1QgKikpOwkgICAgLyogQ2FsbC1iYWNrIHJvdXRpbmUgKi8KICNlbmRpZgogI2lmZGVmIEZFQVRfVE9PTEJBUgogICAgIGNoYXJfdQkqaWNvbmZpbGU7CSAgICAvKiBuYW1lIG9mIGZpbGUgZm9yIGljb24gb3IgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlcm0uYyBiL3NyYy90ZXJtLmMKaW5kZXggOWZmMjkzOC4uNTI1NTc3YyAxMDA2NDQKLS0tIGEvc3JjL3Rlcm0uYworKysgYi9zcmMvdGVybS5jCkBAIC04MTQsMTYgKzgxNCwxNiBAQAogICAgIHsoaW50KUtTX0NDTywJIjgifSwJCQkvKiBhbGxvdyA4IGNvbG9ycyAqLwogICAgIHsoaW50KUtTX01FLAlJRl9FQigiXDAzM1swbSIsIEVTQ19TVFIgIlswbSIpfSwKICAgICB7KGludClLU19NUiwJSUZfRUIoIlwwMzNbN20iLCBFU0NfU1RSICJbN20iKX0sCi0gICAgeyhpbnQpS1NfTUQsICAgICAgICBJRl9FQigiXDAzM1sxbSIsIEVTQ19TVFIgIlsxbSIpfSwgIC8qIGJvbGQgbW9kZSAqLwotICAgIHsoaW50KUtTX1NFLCAgICAgICAgSUZfRUIoIlwwMzNbMjJtIiwgRVNDX1NUUiAiWzIybSIpfSwvKiBub3JtYWwgbW9kZSAqLwotICAgIHsoaW50KUtTX1VFLCAgICAgICAgSUZfRUIoIlwwMzNbMjRtIiwgRVNDX1NUUiAiWzI0bSIpfSwvKiBleGl0IHVuZGVyc2NvcmUgbW9kZSAqLwotICAgIHsoaW50KUtTX1VTLCAgICAgICAgSUZfRUIoIlwwMzNbNG0iLCBFU0NfU1RSICJbNG0iKX0sICAvKiB1bmRlcnNjb3JlIG1vZGUgKi8KLSAgICB7KGludClLU19DWkgsICAgICAgIElGX0VCKCJcMDMzWzM0OzQzbSIsIEVTQ19TVFIgIlszNDs0M20iICl9LCAgLyogaXRhbGljIG1vZGU6IGJsdWUgdGV4dCBvbiB5ZWxsb3cgKi8KLSAgICB7KGludClLU19DWlIsICAgICAgIElGX0VCKCJcMDMzWzBtIiwgRVNDX1NUUiAiWzBtIil9LCAgICAgICAgICAgLyogaXRhbGljIG1vZGUgZW5kICovCi0gICAgeyhpbnQpS1NfQ0FCLCAgICAgICBJRl9FQigiXDAzM1s0JWRtIiwgRVNDX1NUUiAiWzQlZG0iICl9LCAgICAgIC8qIHNldCBiYWNrZ3JvdW5kIGNvbG9yIChBTlNJKSAqLwotICAgIHsoaW50KUtTX0NBRiwgICAgICAgSUZfRUIoIlwwMzNbMyVkbSIsIEVTQ19TVFIgIlszJWRtIiApfSwgICAgICAvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAoQU5TSSkgKi8KLSAgICB7KGludClLU19DU0IsICAgICAgIElGX0VCKCJcMDMzWzEwMjslZG0iLCBFU0NfU1RSICJbMTAyOyVkbSIgKX0sICAgIC8qIHNldCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvciAqLwotICAgIHsoaW50KUtTX0NTRiwgICAgICAgSUZfRUIoIlwwMzNbMTAxOyVkbSIsIEVTQ19TVFIgIlsxMDE7JWRtIiApfSwgICAgLyogc2V0IHNjcmVlbiBmb3JlZ3JvdW5kIGNvbG9yICovCisgICAgeyhpbnQpS1NfTUQsCUlGX0VCKCJcMDMzWzFtIiwgRVNDX1NUUiAiWzFtIil9LCAgLyogYm9sZCBtb2RlICovCisgICAgeyhpbnQpS1NfU0UsCUlGX0VCKCJcMDMzWzIybSIsIEVTQ19TVFIgIlsyMm0iKX0sLyogbm9ybWFsIG1vZGUgKi8KKyAgICB7KGludClLU19VRSwJSUZfRUIoIlwwMzNbMjRtIiwgRVNDX1NUUiAiWzI0bSIpfSwvKiBleGl0IHVuZGVyc2NvcmUgbW9kZSAqLworICAgIHsoaW50KUtTX1VTLAlJRl9FQigiXDAzM1s0bSIsIEVTQ19TVFIgIls0bSIpfSwgIC8qIHVuZGVyc2NvcmUgbW9kZSAqLworICAgIHsoaW50KUtTX0NaSCwJSUZfRUIoIlwwMzNbMzQ7NDNtIiwgRVNDX1NUUiAiWzM0OzQzbSIpfSwgIC8qIGl0YWxpYyBtb2RlOiBibHVlIHRleHQgb24geWVsbG93ICovCisgICAgeyhpbnQpS1NfQ1pSLAlJRl9FQigiXDAzM1swbSIsIEVTQ19TVFIgIlswbSIpfSwJICAgIC8qIGl0YWxpYyBtb2RlIGVuZCAqLworICAgIHsoaW50KUtTX0NBQiwJSUZfRUIoIlwwMzNbNCVkbSIsIEVTQ19TVFIgIls0JWRtIil9LAkgICAgLyogc2V0IGJhY2tncm91bmQgY29sb3IgKEFOU0kpICovCisgICAgeyhpbnQpS1NfQ0FGLAlJRl9FQigiXDAzM1szJWRtIiwgRVNDX1NUUiAiWzMlZG0iKX0sCSAgICAvKiBzZXQgZm9yZWdyb3VuZCBjb2xvciAoQU5TSSkgKi8KKyAgICB7KGludClLU19DU0IsCUlGX0VCKCJcMDMzWzEwMjslZG0iLCBFU0NfU1RSICJbMTAyOyVkbSIpfSwJLyogc2V0IHNjcmVlbiBiYWNrZ3JvdW5kIGNvbG9yICovCisgICAgeyhpbnQpS1NfQ1NGLAlJRl9FQigiXDAzM1sxMDE7JWRtIiwgRVNDX1NUUiAiWzEwMTslZG0iKX0sCS8qIHNldCBzY3JlZW4gZm9yZWdyb3VuZCBjb2xvciAqLwogICAgIHsoaW50KUtTX01TLAkieSJ9LAogICAgIHsoaW50KUtTX1VULAkieSJ9LAogICAgIHsoaW50KUtTX0xFLAkiXGIifSwKQEAgLTg0MiwxMyArODQyLDE3IEBACiAgICAge0tfRE9XTiwJCUlGX0VCKCJcMDMzW0IiLCBFU0NfU1RSICJbQiIpfSwKICAgICB7S19SSUdIVCwJCUlGX0VCKCJcMDMzW0MiLCBFU0NfU1RSICJbQyIpfSwKICAgICB7S19MRUZULAkJSUZfRUIoIlwwMzNbRCIsIEVTQ19TVFIgIltEIil9LAorICAgIHtLX0YxLAkJSUZfRUIoIlwwMzNbMTF+IiwgRVNDX1NUUiAiWzExfiIpfSwKKyAgICB7S19GMiwJCUlGX0VCKCJcMDMzWzEyfiIsIEVTQ19TVFIgIlsxMn4iKX0sCisgICAge0tfRjMsCQlJRl9FQigiXDAzM1sxM34iLCBFU0NfU1RSICJbMTN+Iil9LAorICAgIHtLX0Y0LAkJSUZfRUIoIlwwMzNbMTR+IiwgRVNDX1NUUiAiWzE0fiIpfSwKKyAgICB7S19GNSwJCUlGX0VCKCJcMDMzWzE1fiIsIEVTQ19TVFIgIlsxNX4iKX0sCiAgICAge0tfRjYsCQlJRl9FQigiXDAzM1sxN34iLCBFU0NfU1RSICJbMTd+Iil9LAogICAgIHtLX0Y3LAkJSUZfRUIoIlwwMzNbMTh+IiwgRVNDX1NUUiAiWzE4fiIpfSwKICAgICB7S19GOCwJCUlGX0VCKCJcMDMzWzE5fiIsIEVTQ19TVFIgIlsxOX4iKX0sCiAgICAge0tfRjksCQlJRl9FQigiXDAzM1syMH4iLCBFU0NfU1RSICJbMjB+Iil9LAogICAgIHtLX0YxMCwJCUlGX0VCKCJcMDMzWzIxfiIsIEVTQ19TVFIgIlsyMX4iKX0sCi0vKiAge0tfRjExLAkJSUZfRUIoIlwwMzNbMjN+IiwgRVNDX1NUUiAiWzIzfiIpfSwKLQkJCSogIChFU0MpIHNob3VsZCBub3QgZGVmaW5lLCBzb21ldGltZXMgZG9lcyBub3Qgd29yayAqLworICAgIHtLX0YxMSwJCUlGX0VCKCJcMDMzWzIzfiIsIEVTQ19TVFIgIlsyM34iKX0sCiAgICAge0tfRjEyLAkJSUZfRUIoIlwwMzNbMjR+IiwgRVNDX1NUUiAiWzI0fiIpfSwKICAgICB7S19GMTMsCQlJRl9FQigiXDAzM1syNX4iLCBFU0NfU1RSICJbMjV+Iil9LAogICAgIHtLX0YxNCwJCUlGX0VCKCJcMDMzWzI2fiIsIEVTQ19TVFIgIlsyNn4iKX0sCmRpZmYgLS1naXQgYS9zcmMvdW5kby5jIGIvc3JjL3VuZG8uYwppbmRleCAxYWJkNDFkLi4wYWQzYWUxIDEwMDY0NAotLS0gYS9zcmMvdW5kby5jCisrKyBiL3NyYy91bmRvLmMKQEAgLTc5LDcgKzc5LDggQEAKIHN0YXRpYyBpbnQJdW5kb191bmRvZXMgPSBGQUxTRTsKIAogLyoKLSAqIHNhdmUgdGhlIGN1cnJlbnQgbGluZSBmb3IgYm90aCB0aGUgInUiIGFuZCAiVSIgY29tbWFuZAorICogU2F2ZSB0aGUgY3VycmVudCBsaW5lIGZvciBib3RoIHRoZSAidSIgYW5kICJVIiBjb21tYW5kLgorICogUmV0dXJucyBPSyBvciBGQUlMLgogICovCiAgICAgaW50CiB1X3NhdmVfY3Vyc29yKCkKZGlmZiAtLWdpdCBhL3NyYy92ZXJzaW9uLmggYi9zcmMvdmVyc2lvbi5oCmluZGV4IDNlMzJmYzcuLjczMDdlYjIgMTAwNjQ0Ci0tLSBhL3NyYy92ZXJzaW9uLmgKKysrIGIvc3JjL3ZlcnNpb24uaApAQCAtMzYsNSArMzYsNSBAQAogI2RlZmluZSBWSU1fVkVSU0lPTl9OT0RPVAkidmltNzBhYSIKICNkZWZpbmUgVklNX1ZFUlNJT05fU0hPUlQJIjcuMGFhIgogI2RlZmluZSBWSU1fVkVSU0lPTl9NRURJVU0JIjcuMGFhIEFMUEhBIgotI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBhYSBBTFBIQSAoMjAwNSBKdW4gMTkpIgotI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HX0RBVEUJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA1IEp1biAxOSwgY29tcGlsZWQgIgorI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBhYSBBTFBIQSAoMjAwNSBKdW4gMjIpIgorI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HX0RBVEUJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGFhIEFMUEhBICgyMDA1IEp1biAyMiwgY29tcGlsZWQgIgpkaWZmIC0tZ2l0IGEvc3JjL3dpbmRvdy5jIGIvc3JjL3dpbmRvdy5jCmluZGV4IGU1Nzk3NmMuLmM5YzZjOTkgMTAwNjQ0Ci0tLSBhL3NyYy93aW5kb3cuYworKysgYi9zcmMvd2luZG93LmMKQEAgLTQ1OCwxMSArNDU4LDggQEAKICAgICBjYXNlICdmJzoKICAgICBjYXNlIEN0cmxfRjoKIAkJQ0hFQ0tfQ01EV0lOCi0jaWZkZWYgRkVBVF9WSVNVQUwKLQkJcmVzZXRfVklzdWFsX2FuZF9yZXNlbCgpOwkvKiBzdG9wIFZpc3VhbCBtb2RlICovCi0jZW5kaWYKLQkJcHRyID0gZmlsZV9uYW1lX2F0X2N1cnNvcihGTkFNRV9NRVNTfEZOQU1FX0hZUHxGTkFNRV9FWFAsCi0JCQkJCQkJCSAgICAgUHJlbnVtMSk7CisKKwkJcHRyID0gZ3JhYl9maWxlX25hbWUoUHJlbnVtMSk7CiAJCWlmIChwdHIgIT0gTlVMTCkKIAkJewogI2lmZGVmIEZFQVRfR1VJCkBAIC00NDc4LDYgKzQ0NzUsMzAgQEAKIAogI2lmIGRlZmluZWQoRkVBVF9TRUFSQ0hQQVRIKSB8fCBkZWZpbmVkKFBST1RPKQogLyoKKyAqIEdldCB0aGUgZmlsZSBuYW1lIGF0IHRoZSBjdXJzb3IuCisgKiBJZiBWaXN1YWwgbW9kZSBpcyBhY3RpdmUsIHVzZSB0aGUgc2VsZWN0ZWQgdGV4dCBpZiBpdCdzIGluIG9uZSBsaW5lLgorICogUmV0dXJucyB0aGUgbmFtZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LCBOVUxMIGZvciBmYWlsdXJlLgorICovCisgICAgY2hhcl91ICoKK2dyYWJfZmlsZV9uYW1lKGNvdW50KQorICAgIGxvbmcgY291bnQ7Cit7CisjIGlmZGVmIEZFQVRfVklTVUFMCisgICAgaWYgKFZJc3VhbF9hY3RpdmUpCisgICAgeworCWludAlsZW47CisJY2hhcl91CSpwdHI7CisKKwlpZiAoZ2V0X3Zpc3VhbF90ZXh0KE5VTEwsICZwdHIsICZsZW4pID09IEZBSUwpCisJICAgIHJldHVybiBOVUxMOworCXJldHVybiBmaW5kX2ZpbGVfbmFtZV9pbl9wYXRoKHB0ciwgbGVuLAorCQkgICAgIEZOQU1FX01FU1N8Rk5BTUVfRVhQfEZOQU1FX1JFTCwgY291bnQsIGN1cmJ1Zi0+Yl9mZm5hbWUpOworICAgIH0KKyMgZW5kaWYKKyAgICByZXR1cm4gZmlsZV9uYW1lX2F0X2N1cnNvcihGTkFNRV9NRVNTfEZOQU1FX0hZUHxGTkFNRV9FWFB8Rk5BTUVfUkVMLCBjb3VudCk7Cit9CisKKy8qCiAgKiBSZXR1cm4gdGhlIGZpbGUgbmFtZSB1bmRlciBvciBhZnRlciB0aGUgY3Vyc29yLgogICoKICAqIFRoZSAncGF0aCcgb3B0aW9uIGlzIHNlYXJjaGVkIGlmIHRoZSBmaWxlIG5hbWUgaXMgbm90IGFic29sdXRlLgo=