From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,T_PDS_PRO_TLD autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 13186 invoked from network); 28 Dec 2022 02:37:35 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 28 Dec 2022 02:37:35 -0000 Content-Type: multipart/mixed; boundary="===============3967216065382665776==" MIME-Version: 1.0 Subject: =?utf8?b?W1BSIFBBVENIXSBVcGRhdGU6IHF0NXBhcy0yLjIuMF8y?= To: ml@inbox.vuxu.org From: d33vliter Reply-to: ml@inbox.vuxu.org Message-ID: Date: Wed, 28 Dec 2022 03:37:35 +0100 List-Id: GitHub notification mails are now in MIME to allow UTF8. --===============3967216065382665776== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYSBuZXcgcHVsbCByZXF1ZXN0IGJ5IGQzM3ZsaXRlciBhZ2FpbnN0IG1hc3RlciBv biB0aGUgdm9pZC1wYWNrYWdlcyByZXBvc2l0b3J5CgpodHRwczovL2dpdGh1Yi5jb20vZDMzdmxp dGVyL3ZvaWQtcGFja2FnZXMgbWFzdGVyCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3Zv aWQtcGFja2FnZXMvcHVsbC80MTMyNQoKVXBkYXRlOiBxdDVwYXMtMi4yLjBfMgo8IS0tIFVuY29t bWVudCByZWxldmFudCBzZWN0aW9ucyBhbmQgZGVsZXRlIG9wdGlvbnMgd2hpY2ggYXJlIG5vdCBh cHBsaWNhYmxlIC0tPg0KDQojIyMjIFRlc3RpbmcgdGhlIGNoYW5nZXMNCi0gSSB0ZXN0ZWQgdGhl IGNoYW5nZXMgaW4gdGhpcyBQUjogKipZRVMqKg0KDQoNCiMjIyMgTmV3IHBhY2thZ2UNCi0gVGhp cyBuZXcgcGFja2FnZSBjb25mb3JtcyB0byB0aGUgW3BhY2thZ2UgcmVxdWlyZW1lbnRzXShodHRw czovL2dpdGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVyL0NPTlRS SUJVVElORy5tZCNwYWNrYWdlLXJlcXVpcmVtZW50cyk6ICoqWUVTKioNCg0KDQo8IS0tIE5vdGU6 IElmIHRoZSBidWlsZCBpcyBsaWtlbHkgdG8gdGFrZSBtb3JlIHRoYW4gMiBob3VycywgcGxlYXNl IGFkZCBjaSBza2lwIHRhZyBhcyBkZXNjcmliZWQgaW4NCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lk LWxpbnV4L3ZvaWQtcGFja2FnZXMvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kI2NvbnRpbnVv dXMtaW50ZWdyYXRpb24NCmFuZCB0ZXN0IGF0IGxlYXN0IG9uZSBuYXRpdmUgYnVpbGQgYW5kLCBp ZiBzdXBwb3J0ZWQsIGF0IGxlYXN0IG9uZSBjcm9zcyBidWlsZC4NCklnbm9yZSB0aGlzIHNlY3Rp b24gaWYgdGhpcyBQUiBpcyBub3Qgc2tpcHBpbmcgQ0kuDQotLT4NCjwhLS0NCiMjIyMgTG9jYWwg YnVpbGQgdGVzdGluZw0KLSBJIGJ1aWx0IHRoaXMgUFIgbG9jYWxseSBmb3IgbXkgbmF0aXZlIGFy Y2hpdGVjdHVyZSwgKEFSQ0gtTElCQykNCi0gSSBidWlsdCB0aGlzIFBSIGxvY2FsbHkgZm9yIHRo ZXNlIGFyY2hpdGVjdHVyZXMgKGlmIHN1cHBvcnRlZC4gbWFyayBjcm9zc2J1aWxkcyk6DQogIC0g YWFyY2g2NC1tdXNsDQogIC0gYXJtdjdsDQogIC0gYXJtdjZsLW11c2wNCi0tPg0KCgpBIHBhdGNo IGZpbGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1 bGwvNDEzMjUucGF0Y2ggaXMgYXR0YWNoZWQ= --===============3967216065382665776== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-master-41325.patch" RnJvbSBhN2VkZTIxNTkyMWU3Njg1MWVjNmViNGY5N2VlZDQ0MjQ3YzE0MWI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBkMzN2bGl0ZXIgPGlhbmR1cHV5MTk5OEBnbWFpbC5jb20+CkRh dGU6IFR1ZSwgMjcgRGVjIDIwMjIgMjE6MzI6MzcgLTA1MDAKU3ViamVjdDogW1BBVENIIDEvMl0g RGVsZXRlIHNyY3BrZ3MvcXQ1cGFzL3BhdGNoZXMgZGlyZWN0b3J5CgotLS0KIC4uLi9xdDVwYXMv cGF0Y2hlcy8wMS1pbmxpbmVzLWhpZGRlbi5wYXRjaCAgICB8ICAgMTYgLQogc3JjcGtncy9xdDVw YXMvcGF0Y2hlcy8wMi1sYXphcnVzLTIuMC4wLnBhdGNoIHwgMjU4NyAtLS0tLS0tLS0tLS0tLS0t LQogMiBmaWxlcyBjaGFuZ2VkLCAyNjAzIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0 IHNyY3BrZ3MvcXQ1cGFzL3BhdGNoZXMvMDEtaW5saW5lcy1oaWRkZW4ucGF0Y2gKIGRlbGV0ZSBt b2RlIDEwMDY0NCBzcmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAyLWxhemFydXMtMi4wLjAucGF0Y2gK CmRpZmYgLS1naXQgYS9zcmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAxLWlubGluZXMtaGlkZGVuLnBh dGNoIGIvc3JjcGtncy9xdDVwYXMvcGF0Y2hlcy8wMS1pbmxpbmVzLWhpZGRlbi5wYXRjaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM3YjNmNTllODJhLi4wMDAwMDAwMDAwMDAKLS0t IGEvc3JjcGtncy9xdDVwYXMvcGF0Y2hlcy8wMS1pbmxpbmVzLWhpZGRlbi5wYXRjaAorKysgL2Rl di9udWxsCkBAIC0xLDE2ICswLDAgQEAKLUNvbXBpbGUgd2l0aCAtZnZpc2liaWxpdHktaW5saW5l cy1oaWRkZW4gdG8gcmVkdWNlCi10aGUgYW1vdW50IG9mIGV4cG9ydGVkIHN5bWJvbHMgdGhhdCB3 ZSBuZWVkIHRvIHRha2UKLWNhcmUgb2YgaW4gdGhlIC5zeW1ib2xzIGZpbGUuCi1JbmRleDogbGli cXRwYXMvUXQ1UGFzLnBybwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGEvUXQ1UGFzLnBybwotKysrIGIvUXQ1 UGFzLnBybwotQEAgLTIxLDcgKzIxLDcgQEAgVEVNUExBVEUgPSBsaWIKLSBWUEFUSCA9IHNyYwot IE1PQ19ESVIgPSB0bXAKLSBPQkpFQ1RTX0RJUiA9IHRtcAotLVFNQUtFX0NYWEZMQUdTICs9IC1X ZmF0YWwtZXJyb3JzCi0rUU1BS0VfQ1hYRkxBR1MgKz0gLVdmYXRhbC1lcnJvcnMgLWZ2aXNpYmls aXR5LWlubGluZXMtaGlkZGVuCi0gCi0gIyBNYXRjaCBJbnRlbCB4ODZfNjQgaTY4NiBpNTg2IGkz ODYgeDg2IC4uLgotIGlzODYgPSAkJGZpbmQoUU1BS0VfSE9TVC5hcmNoLCAiLio4NiIpCmRpZmYg LS1naXQgYS9zcmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAyLWxhemFydXMtMi4wLjAucGF0Y2ggYi9z cmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAyLWxhemFydXMtMi4wLjAucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGRmN2NhYWU3YWM2OC4uMDAwMDAwMDAwMDAwCi0tLSBhL3NyY3Br Z3MvcXQ1cGFzL3BhdGNoZXMvMDItbGF6YXJ1cy0yLjAuMC5wYXRjaAorKysgL2Rldi9udWxsCkBA IC0xLDI1ODcgKzAsMCBAQAotRGVzY3JpcHRpb246IG5ldyBzb3VyY2UgaW5jbHVkZWQgaW4gbGF6 YXJ1cy0xLjh+cmMyCi1JbmRleDogUXQ1UGFzLnBybwotPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGEvUXQ1UGFz LnBybwotKysrIGIvUXQ1UGFzLnBybwotQEAgLTEyMSw3ICsxMjEsMTAgQEAgSEVBREVSUyArPSAg XAotICAgICAgICAgICAgcXNpemVfYy5oIFwKLSAgICAgICAgICAgIHFzdHJpbmdfYy5oIFwKLSAg ICAgICAgICAgIHFzdHJpbmdsaXN0X2MuaCBcCi0rICAgICAgICAgICBxc3VyZmFjZV9jLmggXCAg ICAgICAgICAgCi0rICAgICAgICAgICBxc3VyZmFjZWZvcm1hdF9jLmggXAotICAgICAgICAgICAg cXJlY3RfYy5oIFwKLSsgICAgICAgICAgIHFtYXJnaW5zX2MuaCBcICAgICAgICAgICAgICAgICAg ICAgIAotICAgICAgICAgICAgcWRhdGV0aW1lX2MuaCBcCi0gICAgICAgICAgICBxYnl0ZWFycmF5 X2MuaCBcCi0gICAgICAgICAgICBxbG9jYWxlX2MuaCBcCi1AQCAtMTUzLDYgKzE1NiwxMCBAQCBI RUFERVJTICs9ICBcCi0gICAgICAgICAgICBxYXBwbGljYXRpb25faG9vay5oIFwKLSAgICAgICAg ICAgIHF3aGF0c3RoaXNfYy5oIFwKLSAgICAgICAgICAgIHFzaXplcG9saWN5X2MuaCBcCi0rICAg ICAgICAgICBxc2NyZWVuX2MuaCBcCi0rICAgICAgICAgICBxc2NyZWVuX2hvb2suaCBcCi0rICAg ICAgICAgICBxd2luZG93X2MuaCBcCi0rICAgICAgICAgICBxd2luZG93X2hvb2suaCBcICAgICAg ICAgICAKLSAgICAgICAgICAgIHF3aWRnZXRfYy5oIFwKLSAgICAgICAgICAgIHF3aWRnZXRfaG9v ay5oIFwKLSAgICAgICAgICAgIHFsYXlvdXRpdGVtX2MuaCBcCi1AQCAtMTc5LDYgKzE4Niw3IEBA IEhFQURFUlMgKz0gIFwKLSAgICAgICAgICAgIHFicnVzaF9jLmggXAotICAgICAgICAgICAgcXBl bl9jLmggXAotICAgICAgICAgICAgcXBvbHlnb25fYy5oIFwKLSsgICAgICAgICAgIHFiYWNraW5n c3RvcmVfYy5oIFwKLSAgICAgICAgICAgIHFwYWludGVyX2MuaCBcCi0gICAgICAgICAgICBxcGFp bnRlbmdpbmVfYy5oIFwKLSAgICAgICAgICAgIHFwYWludGRldmljZV9jLmggXAotQEAgLTM3NSw2 ICszODMsOCBAQCBIRUFERVJTICs9ICBcCi0gICAgICAgICAgICBxZHJhZ19ob29rX2MuaCBcCi0g ICAgICAgICAgICBxZ3VpYXBwbGljYXRpb25faG9va19jLmggXAotICAgICAgICAgICAgcWFwcGxp Y2F0aW9uX2hvb2tfYy5oIFwKLSsgICAgICAgICAgIHFzY3JlZW5faG9va19jLmggXCAgICAgICAg ICAgCi0rICAgICAgICAgICBxd2luZG93X2hvb2tfYy5oIFwKLSAgICAgICAgICAgIHF3aWRnZXRf aG9va19jLmggXAotICAgICAgICAgICAgcWxheW91dF9ob29rX2MuaCBcCi0gICAgICAgICAgICBx c3RhY2tlZGxheW91dF9ob29rX2MuaCBcCi1AQCAtNDY4LDcgKzQ3OCwxMCBAQCBTT1VSQ0VTICs9 ICBcCi0gICAgICAgICAgICBxc2l6ZV9jLmNwcCBcCi0gICAgICAgICAgICBxc3RyaW5nX2MuY3Bw IFwKLSAgICAgICAgICAgIHFzdHJpbmdsaXN0X2MuY3BwIFwKLSsgICAgICAgICAgIHFzdXJmYWNl X2MuY3BwIFwKLSsgICAgICAgICAgIHFzdXJmYWNlZm9ybWF0X2MuY3BwIFwKLSAgICAgICAgICAg IHFyZWN0X2MuY3BwIFwKLSsgICAgICAgICAgIHFtYXJnaW5zX2MuY3BwIFwgICAgICAgICAgIAot ICAgICAgICAgICAgcWRhdGV0aW1lX2MuY3BwIFwKLSAgICAgICAgICAgIHFieXRlYXJyYXlfYy5j cHAgXAotICAgICAgICAgICAgcWxvY2FsZV9jLmNwcCBcCi1AQCAtNDkzLDYgKzUwNiw4IEBAIFNP VVJDRVMgKz0gIFwKLSAgICAgICAgICAgIHFhcHBsaWNhdGlvbl9jLmNwcCBcCi0gICAgICAgICAg ICBxd2hhdHN0aGlzX2MuY3BwIFwKLSAgICAgICAgICAgIHFzaXplcG9saWN5X2MuY3BwIFwKLSsg ICAgICAgICAgIHFzY3JlZW5fYy5jcHAgXAotKyAgICAgICAgICAgcXdpbmRvd19jLmNwcCBcICAg ICAgICAgICAKLSAgICAgICAgICAgIHF3aWRnZXRfYy5jcHAgXAotICAgICAgICAgICAgcWxheW91 dGl0ZW1fYy5jcHAgXAotICAgICAgICAgICAgcWxheW91dF9jLmNwcCBcCi1AQCAtNTEyLDYgKzUy Nyw3IEBAIFNPVVJDRVMgKz0gIFwKLSAgICAgICAgICAgIHFicnVzaF9jLmNwcCBcCi0gICAgICAg ICAgICBxcGVuX2MuY3BwIFwKLSAgICAgICAgICAgIHFwb2x5Z29uX2MuY3BwIFwKLSsgICAgICAg ICAgIHFiYWNraW5nc3RvcmVfYy5jcHAgXAotICAgICAgICAgICAgcXBhaW50ZXJfYy5jcHAgXAot ICAgICAgICAgICAgcXBhaW50ZW5naW5lX2MuY3BwIFwKLSAgICAgICAgICAgIHFwYWludGRldmlj ZV9jLmNwcCBcCi1AQCAtNjQ2LDYgKzY2Miw4IEBAIFNPVVJDRVMgKz0gIFwKLSAgICAgICAgICAg IHFkcmFnX2hvb2tfYy5jcHAgXAotICAgICAgICAgICAgcWd1aWFwcGxpY2F0aW9uX2hvb2tfYy5j cHAgXAotICAgICAgICAgICAgcWFwcGxpY2F0aW9uX2hvb2tfYy5jcHAgXAotKyAgICAgICAgICAg cXNjcmVlbl9ob29rX2MuY3BwIFwgICAgICAgICAgIAotKyAgICAgICAgICAgcXdpbmRvd19ob29r X2MuY3BwIFwKLSAgICAgICAgICAgIHF3aWRnZXRfaG9va19jLmNwcCBcCi0gICAgICAgICAgICBx bGF5b3V0X2hvb2tfYy5jcHAgXAotICAgICAgICAgICAgcXN0YWNrZWRsYXlvdXRfaG9va19jLmNw cCBcCi1JbmRleDogc3JjL2NoYW5kbGVzLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL3NyYy9jaGFuZGxl cy5oCi0rKysgYi9zcmMvY2hhbmRsZXMuaAotQEAgLTIzLDYgKzIzLDggQEAgdHlwZWRlZiB1bnNp Z25lZCBpbnQgUFRSVUlOVDsKLSAKLSB0eXBlZGVmIHN0cnVjdCBRQWJzdHJhY3RCdXR0b25fXyB7 IFBUUklOVCBkdW1teTsgfSAqUUFic3RyYWN0QnV0dG9uSDsKLSB0eXBlZGVmIHN0cnVjdCBRU2l6 ZVBvbGljeV9fIHsgUFRSSU5UIGR1bW15OyB9ICpRU2l6ZVBvbGljeUg7Ci0rdHlwZWRlZiBzdHJ1 Y3QgUVN1cmZhY2VfXyB7IFBUUklOVCBkdW1teTsgfSAqUVN1cmZhY2VIOwotK3R5cGVkZWYgc3Ry dWN0IFFTdXJmYWNlRm9ybWF0X18geyBQVFJJTlQgZHVtbXk7IH0gKlFTdXJmYWNlRm9ybWF0SDsK LSAvKiB0eXBlZGVmIHN0cnVjdCBRV2ViSGlzdG9yeUl0ZW1faG9va19fIHsgUFRSSU5UIGR1bW15 OyB9ICpRV2ViSGlzdG9yeUl0ZW1faG9va0g7ICovCi0gdHlwZWRlZiBzdHJ1Y3QgUVNsaWRlcl9o b29rX18geyBQVFJJTlQgZHVtbXk7IH0gKlFTbGlkZXJfaG9va0g7Ci0gdHlwZWRlZiBzdHJ1Y3Qg UUdyYXBoaWNzU2NlbmVfaG9va19fIHsgUFRSSU5UIGR1bW15OyB9ICpRR3JhcGhpY3NTY2VuZV9o b29rSDsKLUBAIC00NDYsNiArNDQ4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUUJ1dHRvbkdyb3VwX2hv b2tfXyB7IFBUUgotIHR5cGVkZWYgc3RydWN0IFFJbnB1dE1ldGhvZEV2ZW50X18geyBQVFJJTlQg ZHVtbXk7IH0gKlFJbnB1dE1ldGhvZEV2ZW50SDsKLSB0eXBlZGVmIHN0cnVjdCBRRGF0ZV9fIHsg UFRSSU5UIGR1bW15OyB9ICpRRGF0ZUg7Ci0gdHlwZWRlZiBzdHJ1Y3QgUVN0eWxlT3B0aW9uVGl0 bGVCYXJfXyB7IFBUUklOVCBkdW1teTsgfSAqUVN0eWxlT3B0aW9uVGl0bGVCYXJIOwotK3R5cGVk ZWYgc3RydWN0IFFTY3JlZW5faG9va19fIHsgUFRSSU5UIGR1bW15OyB9ICpRU2NyZWVuX2hvb2tI OwotK3R5cGVkZWYgc3RydWN0IFFXaW5kb3dfaG9va19fIHsgUFRSSU5UIGR1bW15OyB9ICpRV2lu ZG93X2hvb2tIOwotIHR5cGVkZWYgc3RydWN0IFFXaWRnZXRfaG9va19fIHsgUFRSSU5UIGR1bW15 OyB9ICpRV2lkZ2V0X2hvb2tIOwotIHR5cGVkZWYgc3RydWN0IFFEb2NrV2lkZ2V0X18geyBQVFJJ TlQgZHVtbXk7IH0gKlFEb2NrV2lkZ2V0SDsKLSB0eXBlZGVmIHN0cnVjdCBRTGluZV9fIHsgUFRS SU5UIGR1bW15OyB9ICpRTGluZUg7Ci1JbmRleDogc3JjL3FiYWNraW5nc3RvcmVfYy5jcHAKLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xYmFja2luZ3N0b3JlX2MuY3BwCi1A QCAtMCwwICsxLDc4IEBACi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsvLyAgQ29weXJpZ2h0 IChjKSAyMDE3IGJ5IMW9ZWxqYW4gUmlrYWxvCi0rLy8KLSsvLyAgU2VlIHRoZSBpbmNsdWRlZCBm aWxlIENPUFlJTkcuVFhUIGZvciBkZXRhaWxzIGFib3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8KLSsv LyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKwotKwot KyNpbmNsdWRlICJxYmFja2luZ3N0b3JlX2MuaCIKLSsKLStRQmFja2luZ1N0b3JlSCBRQmFja2lu Z1N0b3JlX0NyZWF0ZShRV2luZG93SCB3aW5kb3cpCi0rewotKyAgcmV0dXJuIChRQmFja2luZ1N0 b3JlSCkgbmV3IFFCYWNraW5nU3RvcmUoKFFXaW5kb3cqKXdpbmRvdyk7Ci0rfQotKwotK3ZvaWQg UUJhY2tpbmdTdG9yZV9EZXN0cm95KFFCYWNraW5nU3RvcmVIIGhhbmRsZSkKLSt7Ci0rICBkZWxl dGUgKFFCYWNraW5nU3RvcmUgKiloYW5kbGU7Ci0rfQotKwotK1FXaW5kb3dIIFFCYWNraW5nU3Rv cmVfd2luZG93KFFCYWNraW5nU3RvcmVIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFFXaW5kb3dI KSAoKFFCYWNraW5nU3RvcmUgKiloYW5kbGUpLT53aW5kb3coKTsKLSt9Ci0rCi0rUVBhaW50RGV2 aWNlSCBRQmFja2luZ1N0b3JlX3BhaW50RGV2aWNlKFFCYWNraW5nU3RvcmVIIGhhbmRsZSkKLSt7 Ci0rICByZXR1cm4gKFFQYWludERldmljZUgpICgoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPnBh aW50RGV2aWNlKCk7Ci0rfQotKwotK3ZvaWQgUUJhY2tpbmdTdG9yZV9mbHVzaChRQmFja2luZ1N0 b3JlSCBoYW5kbGUsIGNvbnN0IFFSZWdpb25IIHJlZ2lvbiwgUVdpbmRvd0ggd2luZG93LCBjb25z dCBRUG9pbnRIIG9mZnNldCkKLSt7Ci0rICAoKFFCYWNraW5nU3RvcmUgKiloYW5kbGUpLT5mbHVz aCgqKGNvbnN0IFFSZWdpb24qKSByZWdpb24sIChRV2luZG93ICopd2luZG93LCAqKGNvbnN0IFFQ b2ludCopIG9mZnNldCk7Ci0rfQotKwotK3ZvaWQgUUJhY2tpbmdTdG9yZV9yZXNpemUoUUJhY2tp bmdTdG9yZUggaGFuZGxlLCBjb25zdCBRU2l6ZUggQW5vblBhcmFtMSkKLSt7Ci0rICAoKFFCYWNr aW5nU3RvcmUgKiloYW5kbGUpLT5yZXNpemUoKihjb25zdCBRU2l6ZSopQW5vblBhcmFtMSk7Ci0r fQotKwotK3ZvaWQgUUJhY2tpbmdTdG9yZV9zaXplKFFCYWNraW5nU3RvcmVIIGhhbmRsZSwgUFNp emUgcmV0dmFsKQotK3sKLSsgICooUVNpemUgKilyZXR2YWwgPSAoKFFCYWNraW5nU3RvcmUgKilo YW5kbGUpLT5zaXplKCk7Ci0rfQotKwotK2Jvb2wgUUJhY2tpbmdTdG9yZV9zY3JvbGwoUUJhY2tp bmdTdG9yZUggaGFuZGxlLCBjb25zdCBRUmVnaW9uSCBhcmVhLCBpbnQgZHgsIGludCBkeSkKLSt7 Ci0rICByZXR1cm4gKChRQmFja2luZ1N0b3JlICopaGFuZGxlKS0+c2Nyb2xsKCooY29uc3QgUVJl Z2lvbiopYXJlYSwgZHgsIGR5KTsKLSt9Ci0rCi0rdm9pZCBRQmFja2luZ1N0b3JlX2JlZ2luUGFp bnQoUUJhY2tpbmdTdG9yZUggaGFuZGxlLCBjb25zdCBRUmVnaW9uSCBBbm9uUGFyYW0xKQotK3sK LSsgICgoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPmJlZ2luUGFpbnQoKihjb25zdCBRUmVnaW9u KilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRQmFja2luZ1N0b3JlX2VuZFBhaW50KFFCYWNr aW5nU3RvcmVIIGhhbmRsZSkKLSt7Ci0rICAoKFFCYWNraW5nU3RvcmUgKiloYW5kbGUpLT5lbmRQ YWludCgpOwotK30KLSsKLSt2b2lkIFFCYWNraW5nU3RvcmVfc2V0U3RhdGljQ29udGVudHMoUUJh Y2tpbmdTdG9yZUggaGFuZGxlLCBjb25zdCBRUmVnaW9uSCBBbm9uUGFyYW0xKQotK3sKLSsgICgo UUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPnNldFN0YXRpY0NvbnRlbnRzKCooY29uc3QgUVJlZ2lv biopQW5vblBhcmFtMSk7Ci0rfQotKwotK3ZvaWQgUUJhY2tpbmdTdG9yZV9zdGF0aWNDb250ZW50 cyhRQmFja2luZ1N0b3JlSCBoYW5kbGUsIFFSZWdpb25IIHJldHZhbCkKLSt7Ci0rCSooUVJlZ2lv biAqKXJldHZhbCA9ICgoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPnN0YXRpY0NvbnRlbnRzKCk7 Ci0rfQotKwotK2Jvb2wgUUJhY2tpbmdTdG9yZV9oYXNTdGF0aWNDb250ZW50cyhRQmFja2luZ1N0 b3JlSCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChib29sKSAoKFFCYWNraW5nU3RvcmUgKiloYW5k bGUpLT5oYXNTdGF0aWNDb250ZW50cygpOwotK30KLSsKLUluZGV4OiBzcmMvcWJhY2tpbmdzdG9y ZV9jLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xYmFja2luZ3N0b3Jl X2MuaAotQEAgLTAsMCArMSwzMiBAQAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENv cHlyaWdodCAoYykgMjAxNyBieSDFvWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5j bHVkZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0Lgot Ky8vCi0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotKy8vICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK LSsKLSsKLSsjaWZuZGVmIFFCQUNLSU5HU1RPUkVfQ19ICi0rI2RlZmluZSBRQkFDS0lOR1NUT1JF X0NfSAotKwotKyNpbmNsdWRlIDxRdEd1aT4KLSsjaW5jbHVkZSAicGFzY2FsYmluZC5oIgotKwot K0NfRVhQT1JUIFFCYWNraW5nU3RvcmVIIFFCYWNraW5nU3RvcmVfQ3JlYXRlKFFXaW5kb3dIIHdp bmRvdyk7Ci0rQ19FWFBPUlQgdm9pZCBRQmFja2luZ1N0b3JlX0Rlc3Ryb3koUUJhY2tpbmdTdG9y ZUggaGFuZGxlKTsKLStDX0VYUE9SVCBRV2luZG93SCBRQmFja2luZ1N0b3JlX3dpbmRvdyhRQmFj a2luZ1N0b3JlSCBoYW5kbGUpOwotK0NfRVhQT1JUIFFQYWludERldmljZUggUUJhY2tpbmdTdG9y ZV9wYWludERldmljZShRQmFja2luZ1N0b3JlSCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUUJh Y2tpbmdTdG9yZV9mbHVzaChRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFSZWdpb25IIHJl Z2lvbiwgUVdpbmRvd0ggd2luZG93LCBjb25zdCBRUG9pbnRIIG9mZnNldCk7Ci0rQ19FWFBPUlQg dm9pZCBRQmFja2luZ1N0b3JlX3Jlc2l6ZShRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFT aXplSCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFCYWNraW5nU3RvcmVfc2l6ZShRQmFj a2luZ1N0b3JlSCBoYW5kbGUsIFBTaXplIHJldHZhbCk7Ci0rQ19FWFBPUlQgYm9vbCBRQmFja2lu Z1N0b3JlX3Njcm9sbChRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFSZWdpb25IIGFyZWEs IGludCBkeCwgaW50IGR5KTsKLStDX0VYUE9SVCB2b2lkIFFCYWNraW5nU3RvcmVfYmVnaW5QYWlu dChRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFSZWdpb25IIEFub25QYXJhbTEpOwotK0Nf RVhQT1JUIHZvaWQgUUJhY2tpbmdTdG9yZV9lbmRQYWludChRQmFja2luZ1N0b3JlSCBoYW5kbGUp OwotK0NfRVhQT1JUIHZvaWQgUUJhY2tpbmdTdG9yZV9zZXRTdGF0aWNDb250ZW50cyhRQmFja2lu Z1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFSZWdpb25IIEFub25QYXJhbTEpOwotK0NfRVhQT1JUIHZv aWQgUUJhY2tpbmdTdG9yZV9zdGF0aWNDb250ZW50cyhRQmFja2luZ1N0b3JlSCBoYW5kbGUsIFFS ZWdpb25IIHJldHZhbCk7Ci0rQ19FWFBPUlQgYm9vbCBRQmFja2luZ1N0b3JlX2hhc1N0YXRpY0Nv bnRlbnRzKFFCYWNraW5nU3RvcmVIIGhhbmRsZSk7Ci0rCi0rI2VuZGlmCi1JbmRleDogc3JjL3Ft YXJnaW5zX2MuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvcW1hcmdp bnNfYy5jcHAKLUBAIC0wLDAgKzEsNzMgQEAKLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKy8v ICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsvLwotKy8vICBTZWUgdGhl IGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdo dC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCi0rCi0rCi0rI2luY2x1ZGUgInFtYXJnaW5zX2MuaCIKLSsKLStRTWFyZ2luc0ggUU1hcmdp bnNfQ3JlYXRlKCkKLSt7Ci0rCXJldHVybiAoUU1hcmdpbnNIKSBuZXcgUU1hcmdpbnMoKTsKLSt9 Ci0rCi0rUU1hcmdpbnNIIFFNYXJnaW5zX0NyZWF0ZTIoaW50IGxlZnQsIGludCB0b3AsIGludCBy aWdodCwgaW50IGJvdHRvbSkKLSt7Ci0rICByZXR1cm4gKFFNYXJnaW5zSCkgbmV3IFFNYXJnaW5z KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0rfQotKwotK3ZvaWQgUU1hcmdpbnNfRGVzdHJv eShRTWFyZ2luc0ggaGFuZGxlKQotK3sKLSsJZGVsZXRlIChRTWFyZ2lucyAqKWhhbmRsZTsKLSt9 Ci0rCi0rYm9vbCBRTWFyZ2luc19pc051bGwoUU1hcmdpbnNIIGhhbmRsZSkKLSt7Ci0rICByZXR1 cm4gKGJvb2wpICgoUU1hcmdpbnMgKiloYW5kbGUpLT5pc051bGwoKTsKLSt9Ci0rCi0raW50IFFN YXJnaW5zX2xlZnQoUU1hcmdpbnNIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGludCkgKChRTWFy Z2lucyAqKWhhbmRsZSktPmxlZnQoKTsKLSt9Ci0rCi0raW50IFFNYXJnaW5zX3RvcChRTWFyZ2lu c0ggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFNYXJnaW5zICopaGFuZGxlKS0+dG9w KCk7Ci0rfQotKwotK2ludCBRTWFyZ2luc19yaWdodChRTWFyZ2luc0ggaGFuZGxlKQotK3sKLSsg IHJldHVybiAoaW50KSAoKFFNYXJnaW5zICopaGFuZGxlKS0+cmlnaHQoKTsKLSt9Ci0rCi0raW50 IFFNYXJnaW5zX2JvdHRvbShRTWFyZ2luc0ggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoaW50KSAo KFFNYXJnaW5zICopaGFuZGxlKS0+Ym90dG9tKCk7Ci0rfQotKwotK3ZvaWQgUU1hcmdpbnNfc2V0 TGVmdChRTWFyZ2luc0ggaGFuZGxlLCBpbnQgbGVmdCkKLSt7Ci0rICAoKFFNYXJnaW5zICopaGFu ZGxlKS0+c2V0TGVmdChsZWZ0KTsKLSt9Ci0rCi0rdm9pZCBRTWFyZ2luc19zZXRUb3AoUU1hcmdp bnNIIGhhbmRsZSwgaW50IHRvcCkKLSt7Ci0rICAoKFFNYXJnaW5zICopaGFuZGxlKS0+c2V0VG9w KHRvcCk7Ci0rfQotKwotK3ZvaWQgUU1hcmdpbnNfc2V0UmlnaHQoUU1hcmdpbnNIIGhhbmRsZSwg aW50IHJpZ2h0KQotK3sKLSsgICgoUU1hcmdpbnMgKiloYW5kbGUpLT5zZXRSaWdodChyaWdodCk7 Ci0rfQotKwotK3ZvaWQgUU1hcmdpbnNfc2V0Qm90dG9tKFFNYXJnaW5zSCBoYW5kbGUsIGludCBi b3R0b20pCi0rewotKyAgKChRTWFyZ2lucyAqKWhhbmRsZSktPnNldEJvdHRvbShib3R0b20pOwot K30KLSsKLUluZGV4OiBzcmMvcW1hcmdpbnNfYy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxs Ci0rKysgYi9zcmMvcW1hcmdpbnNfYy5oCi1AQCAtMCwwICsxLDMxIEBACi0rLy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKLSsvLyAgQ29weXJpZ2h0IChjKSAyMDE3IGJ5IMW9ZWxqYW4gUmlrYWxvCi0r Ly8KLSsvLyAgU2VlIHRoZSBpbmNsdWRlZCBmaWxlIENPUFlJTkcuVFhUIGZvciBkZXRhaWxzIGFi b3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8KLSsvLyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSsvLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotKwotKwotKyNpZm5kZWYgUU1BUkdJTlNfQ19ICi0rI2RlZmlu ZSBRTUFSR0lOU19DX0gKLSsKLSsjaW5jbHVkZSA8UXRDb3JlPgotKyNpbmNsdWRlICJwYXNjYWxi aW5kLmgiCi0rCi0rQ19FWFBPUlQgUU1hcmdpbnNIIFFNYXJnaW5zX0NyZWF0ZSgpOwotK0NfRVhQ T1JUIFFNYXJnaW5zSCBRTWFyZ2luc19DcmVhdGUyKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmln aHQsIGludCBib3R0b20pOwotK0NfRVhQT1JUIHZvaWQgUU1hcmdpbnNfRGVzdHJveShRTWFyZ2lu c0ggaGFuZGxlKTsKLStDX0VYUE9SVCBib29sIFFNYXJnaW5zX2lzTnVsbChRTWFyZ2luc0ggaGFu ZGxlKTsKLStDX0VYUE9SVCBpbnQgUU1hcmdpbnNfbGVmdChRTWFyZ2luc0ggaGFuZGxlKTsKLStD X0VYUE9SVCBpbnQgUU1hcmdpbnNfdG9wKFFNYXJnaW5zSCBoYW5kbGUpOwotK0NfRVhQT1JUIGlu dCBRTWFyZ2luc19yaWdodChRTWFyZ2luc0ggaGFuZGxlKTsKLStDX0VYUE9SVCBpbnQgUU1hcmdp bnNfYm90dG9tKFFNYXJnaW5zSCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUU1hcmdpbnNfc2V0 TGVmdChRTWFyZ2luc0ggaGFuZGxlLCBpbnQgbGVmdCk7Ci0rQ19FWFBPUlQgdm9pZCBRTWFyZ2lu c19zZXRUb3AoUU1hcmdpbnNIIGhhbmRsZSwgaW50IHRvcCk7Ci0rQ19FWFBPUlQgdm9pZCBRTWFy Z2luc19zZXRSaWdodChRTWFyZ2luc0ggaGFuZGxlLCBpbnQgcmlnaHQpOwotK0NfRVhQT1JUIHZv aWQgUU1hcmdpbnNfc2V0Qm90dG9tKFFNYXJnaW5zSCBoYW5kbGUsIGludCBib3R0b20pOwotKwot KyNlbmRpZgotSW5kZXg6IHNyYy9xb2JqZWN0X2MuY3BwCi09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYS9zcmMv cW9iamVjdF9jLmNwcAotKysrIGIvc3JjL3FvYmplY3RfYy5jcHAKLUBAIC0xNzcsMyArMTc3LDEw IEBAIHZvaWQgUU9iamVjdF9kZWxldGVMYXRlcihRT2JqZWN0SCBoYW5kbGUKLSAJKChRT2JqZWN0 ICopaGFuZGxlKS0+ZGVsZXRlTGF0ZXIoKTsKLSB9Ci0gCi0rY29uc3QgUU1ldGFPYmplY3RIIFFP YmplY3RfbWV0YU9iamVjdChRT2JqZWN0SCBoYW5kbGUpCi0rewotKyAgY29uc3QgUU1ldGFPYmpl Y3QgKm1ldGEgPSAoKFFPYmplY3QgKiloYW5kbGUpLT5tZXRhT2JqZWN0KCk7Ci0rICBpZiAoIW1l dGEpCi0rICAgIHJldHVybiBOVUxMOwotKyAgcmV0dXJuIChjb25zdCBRTWV0YU9iamVjdEgpIG1l dGE7Ci0rfQotSW5kZXg6IHNyYy9xb2JqZWN0X2MuaAotPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGEvc3JjL3Fv YmplY3RfYy5oCi0rKysgYi9zcmMvcW9iamVjdF9jLmgKLUBAIC00Nyw1ICs0Nyw2IEBAIENfRVhQ T1JUIHVpbnQgUU9iamVjdF9yZWdpc3RlclVzZXJEYXRhKCkKLSBDX0VYUE9SVCBRT2JqZWN0SCBR T2JqZWN0X3BhcmVudChRT2JqZWN0SCBoYW5kbGUpOwotIENfRVhQT1JUIGJvb2wgUU9iamVjdF9p bmhlcml0cyhRT2JqZWN0SCBoYW5kbGUsIGNvbnN0IGNoYXIqIGNsYXNzbmFtZSk7Ci0gQ19FWFBP UlQgdm9pZCBRT2JqZWN0X2RlbGV0ZUxhdGVyKFFPYmplY3RIIGhhbmRsZSk7Ci0rQ19FWFBPUlQg Y29uc3QgUU1ldGFPYmplY3RIIFFPYmplY3RfbWV0YU9iamVjdChRT2JqZWN0SCBoYW5kbGUpOwot IAotICNlbmRpZgotSW5kZXg6IHNyYy9xc2NyZWVuX2MuY3BwCi09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rl di9udWxsCi0rKysgYi9zcmMvcXNjcmVlbl9jLmNwcAotQEAgLTAsMCArMSwxNzggQEAKLSsvLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBS aWthbG8KLSsvLwotKy8vICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRl dGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rCi0rCi0rI2luY2x1ZGUgInFzY3JlZW5fYy5o IgotKwotK3ZvaWQgUVNjcmVlbl9EZXN0cm95KFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0rICBkZWxl dGUgKFFTY3JlZW4gKiloYW5kbGU7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9uYW1lKFFTY3JlZW5I IGhhbmRsZSwgUFdpZGVTdHJpbmcgcmV0dmFsKQotK3sKLSsJUVN0cmluZyB0X3JldHZhbDsKLSsJ dF9yZXR2YWwgPSAoKFFTY3JlZW4gKiloYW5kbGUpLT5uYW1lKCk7Ci0rCWNvcHlRU3RyaW5nVG9Q V2lkZVN0cmluZyh0X3JldHZhbCwgcmV0dmFsKTsKLSt9Ci0rCi0raW50IFFTY3JlZW5fZGVwdGgo UVNjcmVlbkggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFTY3JlZW4gKiloYW5kbGUp LT5kZXB0aCgpOwotK30KLSsKLSt2b2lkIFFTY3JlZW5fc2l6ZShRU2NyZWVuSCBoYW5kbGUsIFBT aXplIHJldHZhbCkKLSt7Ci0rCSooUVNpemUgKilyZXR2YWwgPSAoKFFTY3JlZW4gKiloYW5kbGUp LT5zaXplKCk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9nZW9tZXRyeShRU2NyZWVuSCBoYW5kbGUs IFBSZWN0IHJldHZhbCkKLSt7Ci0rCVFSZWN0IHRfcmV0dmFsOwotKwl0X3JldHZhbCA9ICgoUVNj cmVlbiAqKWhhbmRsZSktPmdlb21ldHJ5KCk7Ci0rCWNvcHlRUmVjdFRvUFJlY3QodF9yZXR2YWws IHJldHZhbCk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9waHlzaWNhbFNpemUoUVNjcmVlbkggaGFu ZGxlLCBRU2l6ZUZIIHJldHZhbCkKLSt7Ci0rCSooUVNpemVGICopcmV0dmFsID0gKChRU2NyZWVu ICopaGFuZGxlKS0+cGh5c2ljYWxTaXplKCk7Ci0rfQotKwotK3FyZWFsIFFTY3JlZW5fcGh5c2lj YWxEb3RzUGVySW5jaFgoUVNjcmVlbkggaGFuZGxlKQotK3sKLSsgIHJldHVybiAocXJlYWwpICgo UVNjcmVlbiAqKWhhbmRsZSktPnBoeXNpY2FsRG90c1BlckluY2hYKCk7Ci0rfQotKwotK3FyZWFs IFFTY3JlZW5fcGh5c2ljYWxEb3RzUGVySW5jaFkoUVNjcmVlbkggaGFuZGxlKQotK3sKLSsgIHJl dHVybiAocXJlYWwpICgoUVNjcmVlbiAqKWhhbmRsZSktPnBoeXNpY2FsRG90c1BlckluY2hZKCk7 Ci0rfQotKwotK3FyZWFsIFFTY3JlZW5fcGh5c2ljYWxEb3RzUGVySW5jaChRU2NyZWVuSCBoYW5k bGUpCi0rewotKyAgcmV0dXJuIChxcmVhbCkgKChRU2NyZWVuICopaGFuZGxlKS0+cGh5c2ljYWxE b3RzUGVySW5jaCgpOwotK30KLSsKLStxcmVhbCBRU2NyZWVuX2xvZ2ljYWxEb3RzUGVySW5jaFgo UVNjcmVlbkggaGFuZGxlKQotK3sKLSsgIHJldHVybiAocXJlYWwpICgoUVNjcmVlbiAqKWhhbmRs ZSktPmxvZ2ljYWxEb3RzUGVySW5jaFgoKTsKLSt9Ci0rCi0rcXJlYWwgUVNjcmVlbl9sb2dpY2Fs RG90c1BlckluY2hZKFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKHFyZWFsKSAoKFFT Y3JlZW4gKiloYW5kbGUpLT5sb2dpY2FsRG90c1BlckluY2hZKCk7Ci0rfQotKwotK3FyZWFsIFFT Y3JlZW5fbG9naWNhbERvdHNQZXJJbmNoKFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4g KHFyZWFsKSAoKFFTY3JlZW4gKiloYW5kbGUpLT5sb2dpY2FsRG90c1BlckluY2goKTsKLSt9Ci0r Ci0rcXJlYWwgUVNjcmVlbl9kZXZpY2VQaXhlbFJhdGlvKFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0r ICByZXR1cm4gKHFyZWFsKSAoKFFTY3JlZW4gKiloYW5kbGUpLT5kZXZpY2VQaXhlbFJhdGlvKCk7 Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9hdmFpbGFibGVTaXplKFFTY3JlZW5IIGhhbmRsZSwgUFNp emUgcmV0dmFsKQotK3sKLSsJKihRU2l6ZSAqKXJldHZhbCA9ICgoUVNjcmVlbiAqKWhhbmRsZSkt PmF2YWlsYWJsZVNpemUoKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2F2YWlsYWJsZUdlb21ldHJ5 KFFTY3JlZW5IIGhhbmRsZSwgUFJlY3QgcmV0dmFsKQotK3sKLSsJUVJlY3QgdF9yZXR2YWw7Ci0r CXRfcmV0dmFsID0gKChRU2NyZWVuICopaGFuZGxlKS0+YXZhaWxhYmxlR2VvbWV0cnkoKTsKLSsJ Y29weVFSZWN0VG9QUmVjdCh0X3JldHZhbCwgcmV0dmFsKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVu X3ZpcnR1YWxTaXplKFFTY3JlZW5IIGhhbmRsZSwgUFNpemUgcmV0dmFsKQotK3sKLSsJKihRU2l6 ZSAqKXJldHZhbCA9ICgoUVNjcmVlbiAqKWhhbmRsZSktPnZpcnR1YWxTaXplKCk7Ci0rfQotKwot K3ZvaWQgUVNjcmVlbl92aXJ0dWFsR2VvbWV0cnkoUVNjcmVlbkggaGFuZGxlLCBQUmVjdCByZXR2 YWwpCi0rewotKwlRUmVjdCB0X3JldHZhbDsKLSsJdF9yZXR2YWwgPSAoKFFTY3JlZW4gKiloYW5k bGUpLT52aXJ0dWFsR2VvbWV0cnkoKTsKLSsJY29weVFSZWN0VG9QUmVjdCh0X3JldHZhbCwgcmV0 dmFsKTsKLSt9Ci0rCi0rUXQ6OlNjcmVlbk9yaWVudGF0aW9uIFFTY3JlZW5fcHJpbWFyeU9yaWVu dGF0aW9uKFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFF0OjpTY3JlZW5PcmllbnRh dGlvbikgKChRU2NyZWVuICopaGFuZGxlKS0+cHJpbWFyeU9yaWVudGF0aW9uKCk7Ci0rfQotKwot K1F0OjpTY3JlZW5PcmllbnRhdGlvbiBRU2NyZWVuX29yaWVudGF0aW9uKFFTY3JlZW5IIGhhbmRs ZSkKLSt7Ci0rICByZXR1cm4gKFF0OjpTY3JlZW5PcmllbnRhdGlvbikgKChRU2NyZWVuICopaGFu ZGxlKS0+b3JpZW50YXRpb24oKTsKLSt9Ci0rCi0rUXQ6OlNjcmVlbk9yaWVudGF0aW9uIFFTY3Jl ZW5fbmF0aXZlT3JpZW50YXRpb24oUVNjcmVlbkggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoUXQ6 OlNjcmVlbk9yaWVudGF0aW9uKSAoKFFTY3JlZW4gKiloYW5kbGUpLT5uYXRpdmVPcmllbnRhdGlv bigpOwotK30KLSsKLStRdDo6U2NyZWVuT3JpZW50YXRpb25zIFFTY3JlZW5fb3JpZW50YXRpb25V cGRhdGVNYXNrKFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFF0OjpTY3JlZW5Pcmll bnRhdGlvbnMpICgoUVNjcmVlbiAqKWhhbmRsZSktPm9yaWVudGF0aW9uVXBkYXRlTWFzaygpOwot K30KLSsKLSt2b2lkIFFTY3JlZW5fc2V0T3JpZW50YXRpb25VcGRhdGVNYXNrKFFTY3JlZW5IIGhh bmRsZSwgUXQ6OlNjcmVlbk9yaWVudGF0aW9ucyBtYXNrKQotK3sKLSsgICgoUVNjcmVlbiAqKWhh bmRsZSktPnNldE9yaWVudGF0aW9uVXBkYXRlTWFzaygoUXQ6OlNjcmVlbk9yaWVudGF0aW9ucykg bWFzayk7Ci0rfQotKwotK2ludCBRU2NyZWVuX2FuZ2xlQmV0d2VlbihRU2NyZWVuSCBoYW5kbGUs IFF0OjpTY3JlZW5PcmllbnRhdGlvbiBhLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gYikKLSt7Ci0r ICByZXR1cm4gKGludCkgKChRU2NyZWVuICopaGFuZGxlKS0+YW5nbGVCZXR3ZWVuKChRdDo6U2Ny ZWVuT3JpZW50YXRpb24pIGEsIChRdDo6U2NyZWVuT3JpZW50YXRpb24pIGIpOwotK30KLSsKLSt2 b2lkIFFTY3JlZW5fdmlydHVhbFNpYmxpbmdzKFFTY3JlZW5IIGhhbmRsZSwgUFB0ckludEFycmF5 IHJldHZhbCkKLSt7Ci0rCVFMaXN0PFFTY3JlZW4qPiB0X3JldHZhbDsKLSsJdF9yZXR2YWwgPSAo KFFTY3JlZW4gKiloYW5kbGUpLT52aXJ0dWFsU2libGluZ3MoKTsKLSsJY29weVFMaXN0VGVtcGxh dGVUb1B0ckludEFycmF5KHRfcmV0dmFsLCByZXR2YWwpOwotK30KLSsKLSt2b2lkIFFTY3JlZW5f dHJhbnNmb3JtQmV0d2VlbihRU2NyZWVuSCBoYW5kbGUsIFFUcmFuc2Zvcm1IIHJldHZhbCwgUXQ6 OlNjcmVlbk9yaWVudGF0aW9uIGEsIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBiLCBQUmVjdCBBbm9u UGFyYW0xKQotK3sKLSsJUVJlY3QgdF9Bbm9uUGFyYW0xOwotKwljb3B5UFJlY3RUb1FSZWN0KEFu b25QYXJhbTEsIHRfQW5vblBhcmFtMSk7Ci0rCSooUVRyYW5zZm9ybSAqKXJldHZhbCA9ICgoUVNj cmVlbiAqKWhhbmRsZSktPnRyYW5zZm9ybUJldHdlZW4oKFF0OjpTY3JlZW5PcmllbnRhdGlvbikg YSwgKFF0OjpTY3JlZW5PcmllbnRhdGlvbikgYiwgdF9Bbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9p ZCBRU2NyZWVuX21hcEJldHdlZW4oUVNjcmVlbkggaGFuZGxlLCBQUmVjdCByZXR2YWwsIFF0OjpT Y3JlZW5PcmllbnRhdGlvbiBhLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gYiwgUFJlY3QgQW5vblBh cmFtMSkKLSt7Ci0rCVFSZWN0IHRfQW5vblBhcmFtMTsKLSsgIFFSZWN0IHRfcmV0dmFsOwotKwlj b3B5UFJlY3RUb1FSZWN0KEFub25QYXJhbTEsIHRfQW5vblBhcmFtMSk7Ci0rICB0X3JldHZhbCA9 ICgoUVNjcmVlbiAqKWhhbmRsZSktPm1hcEJldHdlZW4oKFF0OjpTY3JlZW5PcmllbnRhdGlvbikg YSwgKFF0OjpTY3JlZW5PcmllbnRhdGlvbikgYiwgdF9Bbm9uUGFyYW0xKTsKLSsgIGNvcHlRUmVj dFRvUFJlY3QodF9yZXR2YWwsIHJldHZhbCk7Ci0rfQotKwotK2Jvb2wgUVNjcmVlbl9pc1BvcnRy YWl0KFFTY3JlZW5IIGhhbmRsZSwgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQot K3sKLSsgIHJldHVybiAoYm9vbCkgKChRU2NyZWVuICopaGFuZGxlKS0+aXNQb3J0cmFpdCgoUXQ6 OlNjcmVlbk9yaWVudGF0aW9uKSBvcmllbnRhdGlvbik7Ci0rfQotKwotK2Jvb2wgUVNjcmVlbl9p c0xhbmRzY2FwZShRU2NyZWVuSCBoYW5kbGUsIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBvcmllbnRh dGlvbikKLSt7Ci0rICByZXR1cm4gKGJvb2wpICgoUVNjcmVlbiAqKWhhbmRsZSktPmlzTGFuZHNj YXBlKChRdDo6U2NyZWVuT3JpZW50YXRpb24pIG9yaWVudGF0aW9uKTsKLSt9Ci0rCi0rdm9pZCBR U2NyZWVuX2dyYWJXaW5kb3coUVNjcmVlbkggaGFuZGxlLCBRUGl4bWFwSCByZXR2YWwsdW5zaWdu ZWQgaW50IHdpbmRvdywgaW50IHgsaW50IHksaW50IHcsIGludCBoKQotK3sKLSsgICooUVBpeG1h cCAqKXJldHZhbCA9ICgoUVNjcmVlbiAqKWhhbmRsZSktPmdyYWJXaW5kb3coKFdJZCkgd2luZG93 LCB4LCB5LCB3LCBoKTsKLSt9Ci0rCi0rcXJlYWwgUVNjcmVlbl9yZWZyZXNoUmF0ZShRU2NyZWVu SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChxcmVhbCkgKChRU2NyZWVuICopaGFuZGxlKS0+cmVm cmVzaFJhdGUoKTsKLSt9Ci1JbmRleDogc3JjL3FzY3JlZW5fYy5oCi09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0g L2Rldi9udWxsCi0rKysgYi9zcmMvcXNjcmVlbl9jLmgKLUBAIC0wLDAgKzEsNDkgQEAKLSsvLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgxb1lbGphbiBS aWthbG8KLSsvLwotKy8vICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRl dGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rCi0rCi0rI2lmbmRlZiBRU0NSRUVOX0NfSAot KyNkZWZpbmUgUVNDUkVFTl9DX0gKLSsKLSsjaW5jbHVkZSA8UXRHdWk+Ci0rI2luY2x1ZGUgInBh c2NhbGJpbmQuaCIKLSsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5fRGVzdHJveShRU2NyZWVuSCBo YW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9uYW1lKFFTY3JlZW5IIGhhbmRsZSwgUFdp ZGVTdHJpbmcgcmV0dmFsKTsKLStDX0VYUE9SVCBpbnQgUVNjcmVlbl9kZXB0aChRU2NyZWVuSCBo YW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9zaXplKFFTY3JlZW5IIGhhbmRsZSwgUFNp emUgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5fZ2VvbWV0cnkoUVNjcmVlbkggaGFu ZGxlLCBQUmVjdCByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9waHlzaWNhbFNpemUo UVNjcmVlbkggaGFuZGxlLCBRU2l6ZUZIIHJldHZhbCk7Ci0rQ19FWFBPUlQgcXJlYWwgUVNjcmVl bl9waHlzaWNhbERvdHNQZXJJbmNoWChRU2NyZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFs IFFTY3JlZW5fcGh5c2ljYWxEb3RzUGVySW5jaFkoUVNjcmVlbkggaGFuZGxlKTsKLStDX0VYUE9S VCBxcmVhbCBRU2NyZWVuX3BoeXNpY2FsRG90c1BlckluY2goUVNjcmVlbkggaGFuZGxlKTsKLStD X0VYUE9SVCBxcmVhbCBRU2NyZWVuX2xvZ2ljYWxEb3RzUGVySW5jaFgoUVNjcmVlbkggaGFuZGxl KTsKLStDX0VYUE9SVCBxcmVhbCBRU2NyZWVuX2xvZ2ljYWxEb3RzUGVySW5jaFkoUVNjcmVlbkgg aGFuZGxlKTsKLStDX0VYUE9SVCBxcmVhbCBRU2NyZWVuX2xvZ2ljYWxEb3RzUGVySW5jaChRU2Ny ZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFsIFFTY3JlZW5fZGV2aWNlUGl4ZWxSYXRpbyhR U2NyZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9hdmFpbGFibGVTaXplKFFT Y3JlZW5IIGhhbmRsZSwgUFNpemUgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5fYXZh aWxhYmxlR2VvbWV0cnkoUVNjcmVlbkggaGFuZGxlLCBQUmVjdCByZXR2YWwpOwotK0NfRVhQT1JU IHZvaWQgUVNjcmVlbl92aXJ0dWFsU2l6ZShRU2NyZWVuSCBoYW5kbGUsIFBTaXplIHJldHZhbCk7 Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX3ZpcnR1YWxHZW9tZXRyeShRU2NyZWVuSCBoYW5kbGUs IFBSZWN0IHJldHZhbCk7Ci0rQ19FWFBPUlQgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIFFTY3JlZW5f cHJpbWFyeU9yaWVudGF0aW9uKFFTY3JlZW5IIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUXQ6OlNjcmVl bk9yaWVudGF0aW9uIFFTY3JlZW5fb3JpZW50YXRpb24oUVNjcmVlbkggaGFuZGxlKTsKLStDX0VY UE9SVCBRdDo6U2NyZWVuT3JpZW50YXRpb24gUVNjcmVlbl9uYXRpdmVPcmllbnRhdGlvbihRU2Ny ZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIFF0OjpTY3JlZW5PcmllbnRhdGlvbnMgUVNjcmVlbl9v cmllbnRhdGlvblVwZGF0ZU1hc2soUVNjcmVlbkggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFT Y3JlZW5fc2V0T3JpZW50YXRpb25VcGRhdGVNYXNrKFFTY3JlZW5IIGhhbmRsZSwgUXQ6OlNjcmVl bk9yaWVudGF0aW9ucyBtYXNrKTsKLStDX0VYUE9SVCBpbnQgUVNjcmVlbl9hbmdsZUJldHdlZW4o UVNjcmVlbkggaGFuZGxlLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gYSwgUXQ6OlNjcmVlbk9yaWVu dGF0aW9uIGIpOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl92aXJ0dWFsU2libGluZ3MoUVNjcmVl bkggaGFuZGxlLCBQUHRySW50QXJyYXkgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5f dHJhbnNmb3JtQmV0d2VlbihRU2NyZWVuSCBoYW5kbGUsIFFUcmFuc2Zvcm1IIHJldHZhbCwgUXQ6 OlNjcmVlbk9yaWVudGF0aW9uIGEsIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBiLCBQUmVjdCBBbm9u UGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5fbWFwQmV0d2VlbihRU2NyZWVuSCBoYW5k bGUsIFBSZWN0IHJldHZhbCwgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIGEsIFF0OjpTY3JlZW5Pcmll bnRhdGlvbiBiLCBQUmVjdCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCBib29sIFFTY3JlZW5faXNQ b3J0cmFpdChRU2NyZWVuSCBoYW5kbGUsIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBvcmllbnRhdGlv bik7Ci0rQ19FWFBPUlQgYm9vbCBRU2NyZWVuX2lzTGFuZHNjYXBlKFFTY3JlZW5IIGhhbmRsZSwg UXQ6OlNjcmVlbk9yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKLStDX0VYUE9SVCB2b2lkIFFTY3Jl ZW5fZ3JhYldpbmRvdyhRU2NyZWVuSCBoYW5kbGUsIFFQaXhtYXBIIHJldHZhbCx1bnNpZ25lZCBp bnQgd2luZG93LCBpbnQgeCA9IDAsaW50IHkgPSAwLGludCB3ID0gLTEsIGludCBoID0gLTEpOwot K0NfRVhQT1JUIHFyZWFsIFFTY3JlZW5fcmVmcmVzaFJhdGUoUVNjcmVlbkggaGFuZGxlKTsKLSsK LSsjZW5kaWYKLUluZGV4OiBzcmMvcXNjcmVlbl9ob29rX2MuY3BwCi09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0g L2Rldi9udWxsCi0rKysgYi9zcmMvcXNjcmVlbl9ob29rX2MuY3BwCi1AQCAtMCwwICsxLDY4IEBA Ci0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKLSsvLyAgQ29weXJpZ2h0IChjKSAyMDE3IGJ5IMW9 ZWxqYW4gUmlrYWxvCi0rLy8KLSsvLyAgU2VlIHRoZSBpbmNsdWRlZCBmaWxlIENPUFlJTkcuVFhU IGZvciBkZXRhaWxzIGFib3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8KLSsvLyAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8g IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0rLy8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4KLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKwotKwotKyNpbmNsdWRlICJxc2Ny ZWVuX2hvb2tfYy5oIgotKwotK1FTY3JlZW5faG9va0ggUVNjcmVlbl9ob29rX0NyZWF0ZShRT2Jq ZWN0SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKFFTY3JlZW5faG9va0gpIG5ldyBRU2NyZWVuX2hv b2soKFFPYmplY3QqKWhhbmRsZSk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9ob29rX0Rlc3Ryb3ko UVNjcmVlbl9ob29rSCBoYW5kbGUpCi0rewotKwlkZWxldGUgKFFTY3JlZW5faG9vayAqKWhhbmRs ZTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2hvb2tfaG9va19nZW9tZXRyeUNoYW5nZWQoUVNjcmVl bl9ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVNjcmVlbl9ob29rICopaGFu ZGxlKS0+aG9va19nZW9tZXRyeUNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9o b29rX2hvb2tfYXZhaWxhYmxlR2VvbWV0cnlDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBR SG9va0ggaG9vaykKLSt7Ci0rICAoKFFTY3JlZW5faG9vayAqKWhhbmRsZSktPmhvb2tfYXZhaWxh YmxlR2VvbWV0cnlDaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFTY3JlZW5faG9va19ob29r X3BoeXNpY2FsU2l6ZUNoYW5nZWQoUVNjcmVlbl9ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQot K3sKLSsgICgoUVNjcmVlbl9ob29rICopaGFuZGxlKS0+aG9va19waHlzaWNhbFNpemVDaGFuZ2Vk KGhvb2spOwotK30KLSsKLSt2b2lkIFFTY3JlZW5faG9va19ob29rX3BoeXNpY2FsRG90c1Blcklu Y2hDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFT Y3JlZW5faG9vayAqKWhhbmRsZSktPmhvb2tfcGh5c2ljYWxEb3RzUGVySW5jaENoYW5nZWQoaG9v ayk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9ob29rX2hvb2tfbG9naWNhbERvdHNQZXJJbmNoQ2hh bmdlZChRU2NyZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRU2NyZWVu X2hvb2sgKiloYW5kbGUpLT5ob29rX2xvZ2ljYWxEb3RzUGVySW5jaENoYW5nZWQoaG9vayk7Ci0r fQotKwotK3ZvaWQgUVNjcmVlbl9ob29rX2hvb2tfdmlydHVhbEdlb21ldHJ5Q2hhbmdlZChRU2Ny ZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRU2NyZWVuX2hvb2sgKilo YW5kbGUpLT5ob29rX3ZpcnR1YWxHZW9tZXRyeUNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQg UVNjcmVlbl9ob29rX2hvb2tfcHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdlZChRU2NyZWVuX2hvb2tI IGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRU2NyZWVuX2hvb2sgKiloYW5kbGUpLT5o b29rX3ByaW1hcnlPcmllbnRhdGlvbkNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVNjcmVl bl9ob29rX2hvb2tfb3JpZW50YXRpb25DaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9v a0ggaG9vaykKLSt7Ci0rICAoKFFTY3JlZW5faG9vayAqKWhhbmRsZSktPmhvb2tfb3JpZW50YXRp b25DaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFTY3JlZW5faG9va19ob29rX3JlZnJlc2hS YXRlQ2hhbmdlZChRU2NyZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChR U2NyZWVuX2hvb2sgKiloYW5kbGUpLT5ob29rX3JlZnJlc2hSYXRlQ2hhbmdlZChob29rKTsKLSt9 Ci0rCi1JbmRleDogc3JjL3FzY3JlZW5faG9va19jLmgKLT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251 bGwKLSsrKyBiL3NyYy9xc2NyZWVuX2hvb2tfYy5oCi1AQCAtMCwwICsxLDMwIEBACi0rLy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSsvLyAgQ29weXJpZ2h0IChjKSAyMDE3IGJ5IMW9ZWxqYW4gUmlr YWxvCi0rLy8KLSsvLyAgU2VlIHRoZSBpbmNsdWRlZCBmaWxlIENPUFlJTkcuVFhUIGZvciBkZXRh aWxzIGFib3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8KLSsvLyAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0r Ly8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4K LSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgotKwotKwotKyNpZm5kZWYgUVNDUkVFTl9IT09LX0Nf SAotKyNkZWZpbmUgUVNDUkVFTl9IT09LX0NfSAotKwotKyNpbmNsdWRlICJxc2NyZWVuX2hvb2su aCIKLSsKLStDX0VYUE9SVCBRU2NyZWVuX2hvb2tIIFFTY3JlZW5faG9va19DcmVhdGUoUU9iamVj dEggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5faG9va19EZXN0cm95KFFTY3JlZW5f aG9va0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5faG9va19ob29rX2dlb21ldHJ5 Q2hhbmdlZChRU2NyZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZv aWQgUVNjcmVlbl9ob29rX2hvb2tfYXZhaWxhYmxlR2VvbWV0cnlDaGFuZ2VkKFFTY3JlZW5faG9v a0ggaGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX2hvb2tfaG9v a19waHlzaWNhbFNpemVDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9va0ggaG9vayk7 Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX2hvb2tfaG9va19waHlzaWNhbERvdHNQZXJJbmNoQ2hh bmdlZChRU2NyZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQg UVNjcmVlbl9ob29rX2hvb2tfbG9naWNhbERvdHNQZXJJbmNoQ2hhbmdlZChRU2NyZWVuX2hvb2tI IGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9ob29rX2hvb2tf dmlydHVhbEdlb21ldHJ5Q2hhbmdlZChRU2NyZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2sp OwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9ob29rX2hvb2tfcHJpbWFyeU9yaWVudGF0aW9uQ2hh bmdlZChRU2NyZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQg UVNjcmVlbl9ob29rX2hvb2tfb3JpZW50YXRpb25DaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxl LCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX2hvb2tfaG9va19yZWZyZXNo UmF0ZUNoYW5nZWQoUVNjcmVlbl9ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLSsKLSsjZW5k aWYKLSsKLUluZGV4OiBzcmMvcXNjcmVlbl9ob29rLmgKLT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251 bGwKLSsrKyBiL3NyYy9xc2NyZWVuX2hvb2suaAotQEAgLTAsMCArMSwxOTAgQEAKLSsvLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWth bG8KLSsvLwotKy8vICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFp bHMgYWJvdXQgdGhlIGNvcHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsv LyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgot Ky8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCi0rCi0rCi0rI2lmbmRlZiBRU0NSRUVOX0hPT0tfSAot KyNkZWZpbmUgUVNDUkVFTl9IT09LX0gKLSsKLSsjaW5jbHVkZSA8cXNjcmVlbi5oPgotKwotKyNp bmNsdWRlICJxb2JqZWN0X2hvb2suaCIKLSsKLStjbGFzcyBRU2NyZWVuX2hvb2sgOiBwdWJsaWMg UU9iamVjdF9ob29rIHsKLSsgIFFfT0JKRUNUCi0rICBwdWJsaWM6Ci0rICAgIFFTY3JlZW5faG9v ayhRT2JqZWN0ICpoYW5kbGUpIDogUU9iamVjdF9ob29rKGhhbmRsZSkgewotKyAgICAgIGdlb21l dHJ5Q2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDsKLSsgICAgICBhdmFpbGFibGVHZW9tZXRyeUNo YW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7Ci0rICAgICAgcGh5c2ljYWxTaXplQ2hhbmdlZF9ldmVu dC5mdW5jID0gTlVMTDsKLSsgICAgICBwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9ldmVudC5m dW5jID0gTlVMTDsKLSsgICAgICBsb2dpY2FsRG90c1BlckluY2hDaGFuZ2VkX2V2ZW50LmZ1bmMg PSBOVUxMOwotKyAgICAgIHZpcnR1YWxHZW9tZXRyeUNoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7 Ci0rICAgICAgcHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDsKLSsg ICAgICBvcmllbnRhdGlvbkNoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7Ci0rICAgICAgcmVmcmVz aFJhdGVDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOwotKwotKyAgICB9Ci0rCi0rICAgIHZvaWQg aG9va19nZW9tZXRyeUNoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFnZW9tZXRy eUNoYW5nZWRfZXZlbnQuZnVuYyApCi0rICAgICAgICBjb25uZWN0KGhhbmRsZSwgU0lHTkFMKGdl b21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdCYpKSwgdGhpcywgU0xPVChnZW9tZXRyeUNoYW5nZWRf aG9vayhjb25zdCBRUmVjdCYpKSk7Ci0rICAgICAgZ2VvbWV0cnlDaGFuZ2VkX2V2ZW50ID0gaG9v azsKLSsgICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUs IFNJR05BTChnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3QmKSksIHRoaXMsIFNMT1QoZ2VvbWV0 cnlDaGFuZ2VkX2hvb2soY29uc3QgUVJlY3QmKSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQgaG9v a19hdmFpbGFibGVHZW9tZXRyeUNoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFh dmFpbGFibGVHZW9tZXRyeUNoYW5nZWRfZXZlbnQuZnVuYyApCi0rICAgICAgICBjb25uZWN0KGhh bmRsZSwgU0lHTkFMKGF2YWlsYWJsZUdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdCYpKSwgdGhp cywgU0xPVChhdmFpbGFibGVHZW9tZXRyeUNoYW5nZWRfaG9vayhjb25zdCBRUmVjdCYpKSk7Ci0r ICAgICAgYXZhaWxhYmxlR2VvbWV0cnlDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAgICBpZiAo ICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTChhdmFpbGFi bGVHZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3QmKSksIHRoaXMsIFNMT1QoYXZhaWxhYmxlR2Vv bWV0cnlDaGFuZ2VkX2hvb2soY29uc3QgUVJlY3QmKSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQg aG9va19waHlzaWNhbFNpemVDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhcGh5 c2ljYWxTaXplQ2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBT SUdOQUwocGh5c2ljYWxTaXplQ2hhbmdlZChjb25zdCBRU2l6ZUYmKSksIHRoaXMsIFNMT1QocGh5 c2ljYWxTaXplQ2hhbmdlZF9ob29rKGNvbnN0IFFTaXplRiYpKSk7Ci0rICAgICAgcGh5c2ljYWxT aXplQ2hhbmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAg ICAgIGRpc2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwocGh5c2ljYWxTaXplQ2hhbmdlZChjb25zdCBR U2l6ZUYmKSksIHRoaXMsIFNMT1QocGh5c2ljYWxTaXplQ2hhbmdlZF9ob29rKGNvbnN0IFFTaXpl RiYpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3BoeXNpY2FsRG90c1BlckluY2hDaGFu Z2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhcGh5c2ljYWxEb3RzUGVySW5jaENoYW5n ZWRfZXZlbnQuZnVuYyApCi0rICAgICAgICBjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHBoeXNpY2Fs RG90c1BlckluY2hDaGFuZ2VkKHFyZWFsKSksIHRoaXMsIFNMT1QocGh5c2ljYWxEb3RzUGVySW5j aENoYW5nZWRfaG9vayhxcmVhbCkpKTsKLSsgICAgICBwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdl ZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nv bm5lY3QoaGFuZGxlLCBTSUdOQUwocGh5c2ljYWxEb3RzUGVySW5jaENoYW5nZWQocXJlYWwpKSwg dGhpcywgU0xPVChwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9ob29rKHFyZWFsKSkpOwotKyAg ICB9Ci0rCi0rICAgIHZvaWQgaG9va19sb2dpY2FsRG90c1BlckluY2hDaGFuZ2VkKFFIb29rICZo b29rKSB7Ci0rICAgICAgaWYgKCAhbG9naWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9ldmVudC5mdW5j ICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwobG9naWNhbERvdHNQZXJJbmNoQ2hh bmdlZChxcmVhbCkpLCB0aGlzLCBTTE9UKGxvZ2ljYWxEb3RzUGVySW5jaENoYW5nZWRfaG9vayhx cmVhbCkpKTsKLSsgICAgICBsb2dpY2FsRG90c1BlckluY2hDaGFuZ2VkX2V2ZW50ID0gaG9vazsK LSsgICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJ R05BTChsb2dpY2FsRG90c1BlckluY2hDaGFuZ2VkKHFyZWFsKSksIHRoaXMsIFNMT1QobG9naWNh bERvdHNQZXJJbmNoQ2hhbmdlZF9ob29rKHFyZWFsKSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQg aG9va192aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAh dmlydHVhbEdlb21ldHJ5Q2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFu ZGxlLCBTSUdOQUwodmlydHVhbEdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdCYpKSwgdGhpcywg U0xPVCh2aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkX2hvb2soY29uc3QgUVJlY3QmKSkpOwotKyAgICAg IHZpcnR1YWxHZW9tZXRyeUNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2su ZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHZpcnR1YWxHZW9tZXRy eUNoYW5nZWQoY29uc3QgUVJlY3QmKSksIHRoaXMsIFNMT1QodmlydHVhbEdlb21ldHJ5Q2hhbmdl ZF9ob29rKGNvbnN0IFFSZWN0JikpKTsKLSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tfcHJpbWFy eU9yaWVudGF0aW9uQ2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAgIGlmICggIXByaW1hcnlP cmllbnRhdGlvbkNoYW5nZWRfZXZlbnQuZnVuYyApCi0rICAgICAgICBjb25uZWN0KGhhbmRsZSwg U0lHTkFMKHByaW1hcnlPcmllbnRhdGlvbkNoYW5nZWQoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSks IHRoaXMsIFNMT1QocHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdlZF9ob29rKFF0OjpTY3JlZW5Pcmll bnRhdGlvbikpKTsKLSsgICAgICBwcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50ID0gaG9v azsKLSsgICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUs IFNJR05BTChwcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkKFF0OjpTY3JlZW5PcmllbnRhdGlvbikp LCB0aGlzLCBTTE9UKHByaW1hcnlPcmllbnRhdGlvbkNoYW5nZWRfaG9vayhRdDo6U2NyZWVuT3Jp ZW50YXRpb24pKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX29yaWVudGF0aW9uQ2hhbmdl ZChRSG9vayAmaG9vaykgewotKyAgICAgIGlmICggIW9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5m dW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwob3JpZW50YXRpb25DaGFuZ2Vk KFF0OjpTY3JlZW5PcmllbnRhdGlvbikpLCB0aGlzLCBTTE9UKG9yaWVudGF0aW9uQ2hhbmdlZF9o b29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbikpKTsKLSsgICAgICBvcmllbnRhdGlvbkNoYW5nZWRf ZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25u ZWN0KGhhbmRsZSwgU0lHTkFMKG9yaWVudGF0aW9uQ2hhbmdlZChRdDo6U2NyZWVuT3JpZW50YXRp b24pKSwgdGhpcywgU0xPVChvcmllbnRhdGlvbkNoYW5nZWRfaG9vayhRdDo6U2NyZWVuT3JpZW50 YXRpb24pKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3JlZnJlc2hSYXRlQ2hhbmdlZChR SG9vayAmaG9vaykgewotKyAgICAgIGlmICggIXJlZnJlc2hSYXRlQ2hhbmdlZF9ldmVudC5mdW5j ICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwocmVmcmVzaFJhdGVDaGFuZ2VkKHFy ZWFsKSksIHRoaXMsIFNMT1QocmVmcmVzaFJhdGVDaGFuZ2VkX2hvb2socXJlYWwpKSk7Ci0rICAg ICAgcmVmcmVzaFJhdGVDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAgICBpZiAoICFob29rLmZ1 bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTChyZWZyZXNoUmF0ZUNoYW5n ZWQocXJlYWwpKSwgdGhpcywgU0xPVChyZWZyZXNoUmF0ZUNoYW5nZWRfaG9vayhxcmVhbCkpKTsK LSsgICAgfQotKwotKyAgcHJpdmF0ZSBzbG90czoKLSsgICAgdm9pZCBnZW9tZXRyeUNoYW5nZWRf aG9vayhjb25zdCBRUmVjdCYgZ2VvbSkgewotKyAgICAgIGlmICggZ2VvbWV0cnlDaGFuZ2VkX2V2 ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRh dGEsIFBSZWN0IGdlb20pOwotKwlQUmVjdCB0X2dlb207Ci0rCWNvcHlRUmVjdFRvUFJlY3QoZ2Vv bSwgdF9nZW9tKTsKLSsJKCooZnVuY190eXBlKWdlb21ldHJ5Q2hhbmdlZF9ldmVudC5mdW5jKShn ZW9tZXRyeUNoYW5nZWRfZXZlbnQuZGF0YSwgdF9nZW9tKTsKLSsgICAgICB9Ci0rICAgIH0KLSsK LSsgICAgdm9pZCBhdmFpbGFibGVHZW9tZXRyeUNoYW5nZWRfaG9vayhjb25zdCBRUmVjdCYgZ2Vv bSkgewotKyAgICAgIGlmICggYXZhaWxhYmxlR2VvbWV0cnlDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7 Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIFBSZWN0IGdl b20pOwotKwlQUmVjdCB0X2dlb207Ci0rCWNvcHlRUmVjdFRvUFJlY3QoZ2VvbSwgdF9nZW9tKTsK LSsJKCooZnVuY190eXBlKWF2YWlsYWJsZUdlb21ldHJ5Q2hhbmdlZF9ldmVudC5mdW5jKShhdmFp bGFibGVHZW9tZXRyeUNoYW5nZWRfZXZlbnQuZGF0YSwgdF9nZW9tKTsKLSsgICAgICB9Ci0rICAg IH0KLSsKLSsgICAgdm9pZCBwaHlzaWNhbFNpemVDaGFuZ2VkX2hvb2soY29uc3QgUVNpemVGJiBw b3MpIHsKLSsgICAgICBpZiAoIHBoeXNpY2FsU2l6ZUNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsg ICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0YSwgY29uc3QgUVNpemVG SCBwb3MpOwotKwkoKihmdW5jX3R5cGUpcGh5c2ljYWxTaXplQ2hhbmdlZF9ldmVudC5mdW5jKShw aHlzaWNhbFNpemVDaGFuZ2VkX2V2ZW50LmRhdGEsIChjb25zdCBRU2l6ZUZIKSZwb3MpOwotKyAg ICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIHBoeXNpY2FsRG90c1BlckluY2hDaGFuZ2VkX2hv b2socXJlYWwgZHBpKSB7Ci0rICAgICAgaWYgKCBwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9l dmVudC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpk YXRhLCBxcmVhbCBkcGkpOwotKwkoKihmdW5jX3R5cGUpcGh5c2ljYWxEb3RzUGVySW5jaENoYW5n ZWRfZXZlbnQuZnVuYykocGh5c2ljYWxEb3RzUGVySW5jaENoYW5nZWRfZXZlbnQuZGF0YSwgZHBp KTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBsb2dpY2FsRG90c1BlckluY2hDaGFu Z2VkX2hvb2socXJlYWwgZHBpKSB7Ci0rICAgICAgaWYgKCBsb2dpY2FsRG90c1BlckluY2hDaGFu Z2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZv aWQgKmRhdGEsIHFyZWFsIGRwaSk7Ci0rCSgqKGZ1bmNfdHlwZSlsb2dpY2FsRG90c1BlckluY2hD aGFuZ2VkX2V2ZW50LmZ1bmMpKGxvZ2ljYWxEb3RzUGVySW5jaENoYW5nZWRfZXZlbnQuZGF0YSwg ZHBpKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCB2aXJ0dWFsR2VvbWV0cnlDaGFu Z2VkX2hvb2soY29uc3QgUVJlY3QmIGdlb20pIHsKLSsgICAgICBpZiAoIHZpcnR1YWxHZW9tZXRy eUNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlw ZSkodm9pZCAqZGF0YSwgUFJlY3QgZ2VvbSk7Ci0rCVBSZWN0IHRfZ2VvbTsKLSsJY29weVFSZWN0 VG9QUmVjdChnZW9tLCB0X2dlb20pOwotKwkoKihmdW5jX3R5cGUpdmlydHVhbEdlb21ldHJ5Q2hh bmdlZF9ldmVudC5mdW5jKSh2aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkX2V2ZW50LmRhdGEsIHRfZ2Vv bSk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgcHJpbWFyeU9yaWVudGF0aW9uQ2hh bmdlZF9ob29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbiBvcmllbnRhdGlvbikgewotKyAgICAgIGlm ICggcHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlw ZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBRdDo6U2NyZWVuT3JpZW50YXRpb24g b3JpZW50YXRpb24pOwotKwkoKihmdW5jX3R5cGUpcHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdlZF9l dmVudC5mdW5jKShwcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50LmRhdGEsIG9yaWVudGF0 aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBvcmllbnRhdGlvbkNoYW5nZWRf aG9vayhRdDo6U2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsKLSsgICAgICBpZiAoIG9y aWVudGF0aW9uQ2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgq ZnVuY190eXBlKSh2b2lkICpkYXRhLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRpb24p OwotKwkoKihmdW5jX3R5cGUpb3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50LmZ1bmMpKG9yaWVudGF0 aW9uQ2hhbmdlZF9ldmVudC5kYXRhLCBvcmllbnRhdGlvbik7Ci0rICAgICAgfQotKyAgICB9Ci0r Ci0rICAgIHZvaWQgcmVmcmVzaFJhdGVDaGFuZ2VkX2hvb2socXJlYWwgcmVmcmVzaFJhdGUpIHsK LSsgICAgICBpZiAoIHJlZnJlc2hSYXRlQ2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAg dHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBxcmVhbCByZWZyZXNoUmF0ZSk7 Ci0rCSgqKGZ1bmNfdHlwZSlyZWZyZXNoUmF0ZUNoYW5nZWRfZXZlbnQuZnVuYykocmVmcmVzaFJh dGVDaGFuZ2VkX2V2ZW50LmRhdGEsIHJlZnJlc2hSYXRlKTsKLSsgICAgICB9Ci0rICAgIH0KLSsK LSsgIHByaXZhdGU6Ci0rICAgIFFIb29rIGdlb21ldHJ5Q2hhbmdlZF9ldmVudDsKLSsgICAgUUhv b2sgYXZhaWxhYmxlR2VvbWV0cnlDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayBwaHlzaWNhbFNp emVDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayBwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9l dmVudDsKLSsgICAgUUhvb2sgbG9naWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9ldmVudDsKLSsgICAg UUhvb2sgdmlydHVhbEdlb21ldHJ5Q2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgcHJpbWFyeU9y aWVudGF0aW9uQ2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgb3JpZW50YXRpb25DaGFuZ2VkX2V2 ZW50OwotKyAgICBRSG9vayByZWZyZXNoUmF0ZUNoYW5nZWRfZXZlbnQ7Ci0rfTsKLSsKLSsjZW5k aWYKLSsKLUluZGV4OiBzcmMvcXN1cmZhY2VfYy5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251 bGwKLSsrKyBiL3NyYy9xc3VyZmFjZV9jLmNwcAotQEAgLTAsMCArMSw0NSBAQAotKy8vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAxNyBieSDFvWVsamFuIFJpa2Fs bwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0YWls cyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8v ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0r Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaW5jbHVkZSAicXN1cmZhY2VfYy5oIgot KwotK3ZvaWQgUVN1cmZhY2VfRGVzdHJveShRU3VyZmFjZUggaGFuZGxlKQotK3sKLSsJZGVsZXRl IChRU3VyZmFjZSAqKWhhbmRsZTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFjZV9zaXplKFFTdXJmYWNl SCBoYW5kbGUsIFBTaXplIHJldHZhbCkKLSt7Ci0rCSooUVNpemUgKilyZXR2YWwgPSAoKFFTdXJm YWNlICopaGFuZGxlKS0+c2l6ZSgpOwotK30KLSsKLSsKLStib29sIFFTdXJmYWNlX3N1cHBvcnRz T3BlbkdMKFFTdXJmYWNlSCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChib29sKSAoKFFTdXJmYWNl ICopaGFuZGxlKS0+c3VwcG9ydHNPcGVuR0woKTsKLSt9Ci0rCi0rUVN1cmZhY2U6OlN1cmZhY2VD bGFzcyBRU3VyZmFjZV9zdXJmYWNlQ2xhc3MoUVN1cmZhY2VIIGhhbmRsZSkKLSt7Ci0rICByZXR1 cm4gKFFTdXJmYWNlOjpTdXJmYWNlQ2xhc3MpICgoUVN1cmZhY2UgKiloYW5kbGUpLT5zdXJmYWNl Q2xhc3MoKTsKLSt9Ci0rCi0rUVN1cmZhY2U6OlN1cmZhY2VUeXBlIFFTdXJmYWNlX3N1cmZhY2VU eXBlKFFTdXJmYWNlSCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChRU3VyZmFjZTo6U3VyZmFjZVR5 cGUpICgoUVN1cmZhY2UgKiloYW5kbGUpLT5zdXJmYWNlVHlwZSgpOwotK30KLSsKLSsKLSt2b2lk IFFTdXJmYWNlX2Zvcm1hdChRU3VyZmFjZUggaGFuZGxlLCBRU3VyZmFjZUZvcm1hdEggYXJldHVy bikKLSt7Ci0rICAqKFFTdXJmYWNlRm9ybWF0ICopYXJldHVybiA9ICgoUVN1cmZhY2UgKiloYW5k bGUpLT5mb3JtYXQoKTsKLSt9Ci0rCi1JbmRleDogc3JjL3FzdXJmYWNlX2MuaAotPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL3FzdXJmYWNlX2MuaAotQEAgLTAsMCArMSwyNSBA QAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAwNyBieSDF vWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5HLlRY VCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8v ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaWZuZGVmIFFTVVJG QUNFX0NfSAotKyNkZWZpbmUgUVNVUkZBQ0VfQ19ICi0rCi0rI2luY2x1ZGUgPFF0R3VpPgotKyNp bmNsdWRlICJwYXNjYWxiaW5kLmgiCi0rCi0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZV9EZXN0cm95 KFFTdXJmYWNlSCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2Vfc2l6ZShRU3VyZmFj ZUggaGFuZGxlLCBQU2l6ZSByZXR2YWwpOwotK0NfRVhQT1JUIGJvb2wgUVN1cmZhY2Vfc3VwcG9y dHNPcGVuR0woUVN1cmZhY2VIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUVN1cmZhY2U6OlN1cmZhY2VD bGFzcyBRU3VyZmFjZV9zdXJmYWNlQ2xhc3MoUVN1cmZhY2VIIGhhbmRsZSk7Ci0rQ19FWFBPUlQg UVN1cmZhY2U6OlN1cmZhY2VUeXBlIFFTdXJmYWNlX3N1cmZhY2VUeXBlKFFTdXJmYWNlSCBoYW5k bGUpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VfZm9ybWF0KFFTdXJmYWNlSCBoYW5kbGUsIFFT dXJmYWNlRm9ybWF0SCBhcmV0dXJuKTsKLSsKLSsjZW5kaWYKLUluZGV4OiBzcmMvcXN1cmZhY2Vm b3JtYXRfYy5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xc3VyZmFj ZWZvcm1hdF9jLmNwcAotQEAgLTAsMCArMSwyMDIgQEAKLSsvLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsvLwotKy8vICBT ZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGNv cHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCi0rCi0rCi0rI2luY2x1ZGUgInFzdXJmYWNlZm9ybWF0X2MuaCIKLSsKLStRU3Vy ZmFjZUZvcm1hdEggUVN1cmZhY2VGb3JtYXRfQ3JlYXRlKCkKLSt7Ci0rICByZXR1cm4gKFFTdXJm YWNlRm9ybWF0SCkgbmV3IFFTdXJmYWNlRm9ybWF0KCk7Ci0rfQotKwotK1FTdXJmYWNlRm9ybWF0 SCBRU3VyZmFjZUZvcm1hdF9DcmVhdGUyKFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb25zIG9w dGlvbnMpCi0rewotKyAgcmV0dXJuIChRU3VyZmFjZUZvcm1hdEgpIG5ldyBRU3VyZmFjZUZvcm1h dCgoUVN1cmZhY2VGb3JtYXQ6OkZvcm1hdE9wdGlvbnMpIG9wdGlvbnMpOwotK30KLSsKLSt2b2lk IFFTdXJmYWNlRm9ybWF0X0Rlc3Ryb3koUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rCWRl bGV0ZSAoUVN1cmZhY2VGb3JtYXQgKiloYW5kbGU7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VGb3Jt YXRfc2V0RGVwdGhCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIGludCBzaXplKQot K3sKLSsgICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnNldERlcHRoQnVmZmVyU2l6ZShzaXpl KTsKLSt9Ci0rCi0raW50IFFTdXJmYWNlRm9ybWF0X2RlcHRoQnVmZmVyU2l6ZShRU3VyZmFjZUZv cm1hdEggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFTdXJmYWNlRm9ybWF0KiloYW5k bGUpLT5kZXB0aEJ1ZmZlclNpemUoKTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRT dGVuY2lsQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgc2l6ZSkKLSt7Ci0r ICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRTdGVuY2lsQnVmZmVyU2l6ZShzaXplKTsK LSt9Ci0rCi0raW50IFFTdXJmYWNlRm9ybWF0X3N0ZW5jaWxCdWZmZXJTaXplKFFTdXJmYWNlRm9y bWF0SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChpbnQpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRs ZSktPnN0ZW5jaWxCdWZmZXJTaXplKCk7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0 UmVkQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgc2l6ZSkKLSt7Ci0rICAo KFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRSZWRCdWZmZXJTaXplKHNpemUpOwotK30KLSsK LStpbnQgUVN1cmZhY2VGb3JtYXRfcmVkQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxl KQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5yZWRCdWZm ZXJTaXplKCk7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0R3JlZW5CdWZmZXJTaXpl KFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIGludCBzaXplKQotK3sKLSsgICgoUVN1cmZhY2VGb3Jt YXQqKWhhbmRsZSktPnNldEdyZWVuQnVmZmVyU2l6ZShzaXplKTsKLSt9Ci0rCi0raW50IFFTdXJm YWNlRm9ybWF0X2dyZWVuQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKQotK3sKLSsg IHJldHVybiAoaW50KSAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5ncmVlbkJ1ZmZlclNpemUo KTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRCbHVlQnVmZmVyU2l6ZShRU3VyZmFj ZUZvcm1hdEggaGFuZGxlLCBpbnQgc2l6ZSkKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5k bGUpLT5zZXRCbHVlQnVmZmVyU2l6ZShzaXplKTsKLSt9Ci0rCi0raW50IFFTdXJmYWNlRm9ybWF0 X2JsdWVCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChp bnQpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPmJsdWVCdWZmZXJTaXplKCk7Ci0rfQotKwot K3ZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0QWxwaGFCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBo YW5kbGUsIGludCBzaXplKQotK3sKLSsgICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnNldEFs cGhhQnVmZmVyU2l6ZShzaXplKTsKLSt9Ci0rCi0raW50IFFTdXJmYWNlRm9ybWF0X2FscGhhQnVm ZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFT dXJmYWNlRm9ybWF0KiloYW5kbGUpLT5hbHBoYUJ1ZmZlclNpemUoKTsKLSt9Ci0rCi0rdm9pZCBR U3VyZmFjZUZvcm1hdF9zZXRTYW1wbGVzKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIGludCBudW1T YW1wbGVzKQotK3sKLSsgICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnNldFNhbXBsZXMobnVt U2FtcGxlcyk7Ci0rfQotKwotK2ludCBRU3VyZmFjZUZvcm1hdF9zYW1wbGVzKFFTdXJmYWNlRm9y bWF0SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChpbnQpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRs ZSktPnNhbXBsZXMoKTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRTd2FwQmVoYXZp b3IoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXQ6OlN3YXBCZWhhdmlvciBi ZWhhdmlvcikKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRTd2FwQmVoYXZp b3IoKFFTdXJmYWNlRm9ybWF0OjpTd2FwQmVoYXZpb3IpIGJlaGF2aW9yKTsKLSt9Ci0rCi0rUVN1 cmZhY2VGb3JtYXQ6OlN3YXBCZWhhdmlvciBRU3VyZmFjZUZvcm1hdF9zd2FwQmVoYXZpb3IoUVN1 cmZhY2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFFTdXJmYWNlRm9ybWF0OjpTd2Fw QmVoYXZpb3IpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnN3YXBCZWhhdmlvcigpOwotK30K LSsKLStib29sIFFTdXJmYWNlRm9ybWF0X2hhc0FscGhhKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUp Ci0rewotKyAgcmV0dXJuIChib29sKSAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5oYXNBbHBo YSgpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFByb2ZpbGUoUVN1cmZhY2VGb3Jt YXRIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXQ6Ok9wZW5HTENvbnRleHRQcm9maWxlIHByb2ZpbGUp Ci0rewotKyAgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c2V0UHJvZmlsZSgoUVN1cmZhY2VG b3JtYXQ6Ok9wZW5HTENvbnRleHRQcm9maWxlKSBwcm9maWxlKTsKLSt9Ci0rCi0rUVN1cmZhY2VG b3JtYXQ6Ok9wZW5HTENvbnRleHRQcm9maWxlIFFTdXJmYWNlRm9ybWF0X3Byb2ZpbGUoUVN1cmZh Y2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFFTdXJmYWNlRm9ybWF0OjpPcGVuR0xD b250ZXh0UHJvZmlsZSkgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+cHJvZmlsZSgpOwotK30K LSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFJlbmRlcmFibGVUeXBlKFFTdXJmYWNlRm9ybWF0 SCBoYW5kbGUsIFFTdXJmYWNlRm9ybWF0OjpSZW5kZXJhYmxlVHlwZSB0eXBlKQotK3sKLSsgICgo UVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnNldFJlbmRlcmFibGVUeXBlKChRU3VyZmFjZUZvcm1h dDo6UmVuZGVyYWJsZVR5cGUpIHR5cGUpOwotK30KLSsKLStRU3VyZmFjZUZvcm1hdDo6UmVuZGVy YWJsZVR5cGUgUVN1cmZhY2VGb3JtYXRfcmVuZGVyYWJsZVR5cGUoUVN1cmZhY2VGb3JtYXRIIGhh bmRsZSkKLSt7Ci0rICByZXR1cm4gKFFTdXJmYWNlRm9ybWF0OjpSZW5kZXJhYmxlVHlwZSkgKChR U3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+cmVuZGVyYWJsZVR5cGUoKTsKLSt9Ci0rCi0rdm9pZCBR U3VyZmFjZUZvcm1hdF9zZXRNYWpvclZlcnNpb24oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50 IG1ham9yVmVyc2lvbikKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRNYWpv clZlcnNpb24obWFqb3JWZXJzaW9uKTsKLSt9Ci0rCi0raW50IFFTdXJmYWNlRm9ybWF0X21ham9y VmVyc2lvbihRU3VyZmFjZUZvcm1hdEggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFT dXJmYWNlRm9ybWF0KiloYW5kbGUpLT5tYWpvclZlcnNpb24oKTsKLSt9Ci0rCi0rdm9pZCBRU3Vy ZmFjZUZvcm1hdF9zZXRNaW5vclZlcnNpb24oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IG1p bm9yVmVyc2lvbikKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRNaW5vclZl cnNpb24obWlub3JWZXJzaW9uKTsKLSt9Ci0rCi0raW50IFFTdXJmYWNlRm9ybWF0X21pbm9yVmVy c2lvbihRU3VyZmFjZUZvcm1hdEggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFTdXJm YWNlRm9ybWF0KiloYW5kbGUpLT5taW5vclZlcnNpb24oKTsKLSt9Ci0rCi0rYm9vbCBRU3VyZmFj ZUZvcm1hdF9zdGVyZW8oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGJv b2wpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnN0ZXJlbygpOwotK30KLSsKLSt2b2lkIFFT dXJmYWNlRm9ybWF0X3NldFN0ZXJlbyhRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBib29sIGVuYWJs ZSkKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRTdGVyZW8oZW5hYmxlKTsK LSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRPcHRpb25zKFFTdXJmYWNlRm9ybWF0SCBo YW5kbGUsIFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb25zIG9wdGlvbnMpCi0rewotKyAgKChR U3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c2V0T3B0aW9ucygoUVN1cmZhY2VGb3JtYXQ6OkZvcm1h dE9wdGlvbnMpIG9wdGlvbnMpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0X3NldE9wdGlv bihRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9uIG9w dGlvbiwgYm9vbCBvbikKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRPcHRp b24oKFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb24pIG9wdGlvbiwgb24pOwotK30KLSsKLSti b29sIFFTdXJmYWNlRm9ybWF0X3Rlc3RPcHRpb24oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgUVN1 cmZhY2VGb3JtYXQ6OkZvcm1hdE9wdGlvbiBvcHRpb24pCi0rewotKyAgcmV0dXJuIChib29sKSAo KFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT50ZXN0T3B0aW9uKChRU3VyZmFjZUZvcm1hdDo6Rm9y bWF0T3B0aW9uKSBvcHRpb24pOwotK30KLSsKLStRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9u cyBRU3VyZmFjZUZvcm1hdF9vcHRpb25zKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpCi0rewotKyAg cmV0dXJuIChRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9ucykgKChRU3VyZmFjZUZvcm1hdCop aGFuZGxlKS0+b3B0aW9ucygpOwotK30KLSsKLStpbnQgUVN1cmZhY2VGb3JtYXRfc3dhcEludGVy dmFsKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuICgoUVN1cmZhY2VGb3Jt YXQqKWhhbmRsZSktPnN3YXBJbnRlcnZhbCgpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0 X3NldFN3YXBJbnRlcnZhbChRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgaW50ZXJ2YWwpCi0r ewotKyAgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c2V0U3dhcEludGVydmFsKGludGVydmFs KTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXREZWZhdWx0Rm9ybWF0KFFTdXJmYWNl Rm9ybWF0SCBmb3JtYXQpCi0rewotKyAgUVN1cmZhY2VGb3JtYXQ6OnNldERlZmF1bHRGb3JtYXQo Kihjb25zdCBRU3VyZmFjZUZvcm1hdCopIGZvcm1hdCk7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VG b3JtYXRfZGVmYXVsdEZvcm1hdChRU3VyZmFjZUZvcm1hdEggcmV0dmFsKQotK3sKLSsgICooUVN1 cmZhY2VGb3JtYXQqKXJldHZhbCA9IFFTdXJmYWNlRm9ybWF0OjpkZWZhdWx0Rm9ybWF0KCk7Ci0r fQotSW5kZXg6IHNyYy9xc3VyZmFjZWZvcm1hdF9jLmgKLT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251 bGwKLSsrKyBiL3NyYy9xc3VyZmFjZWZvcm1hdF9jLmgKLUBAIC0wLDAgKzEsNTcgQEAKLSsvLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgxb1lbGphbiBS aWthbG8KLSsvLwotKy8vICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRl dGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rCi0rCi0rI2lmbmRlZiBRU1VSRkFDRUZPUk1B VF9DX0gKLSsjZGVmaW5lIFFTVVJGQUNFRk9STUFUX0NfSAotKwotKyNpbmNsdWRlIDxRdEd1aT4K LSsjaW5jbHVkZSAicGFzY2FsYmluZC5oIgotKwotK0NfRVhQT1JUIFFTdXJmYWNlRm9ybWF0SCBR U3VyZmFjZUZvcm1hdF9DcmVhdGUoKTsKLStDX0VYUE9SVCBRU3VyZmFjZUZvcm1hdEggUVN1cmZh Y2VGb3JtYXRfQ3JlYXRlMihRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9ucyBvcHRpb25zKTsK LStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X0Rlc3Ryb3koUVN1cmZhY2VGb3JtYXRIIGhh bmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXREZXB0aEJ1ZmZlclNpemUo UVN1cmZhY2VGb3JtYXRIIGhhbmRsZSxpbnQgc2l6ZSk7Ci0rQ19FWFBPUlQgaW50IFFTdXJmYWNl Rm9ybWF0X2RlcHRoQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKTsKLStDX0VYUE9S VCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFN0ZW5jaWxCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0 SCBoYW5kbGUsIGludCBzaXplKTsKLStDX0VYUE9SVCBpbnQgUVN1cmZhY2VGb3JtYXRfc3RlbmNp bEJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3Vy ZmFjZUZvcm1hdF9zZXRSZWRCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIGludCBz aXplKTsKLStDX0VYUE9SVCBpbnQgUVN1cmZhY2VGb3JtYXRfcmVkQnVmZmVyU2l6ZShRU3VyZmFj ZUZvcm1hdEggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldEdyZWVu QnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgc2l6ZSk7Ci0rQ19FWFBPUlQg aW50IFFTdXJmYWNlRm9ybWF0X2dyZWVuQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxl KTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldEJsdWVCdWZmZXJTaXplKFFTdXJm YWNlRm9ybWF0SCBoYW5kbGUsIGludCBzaXplKTsKLStDX0VYUE9SVCBpbnQgUVN1cmZhY2VGb3Jt YXRfYmx1ZUJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9p ZCBRU3VyZmFjZUZvcm1hdF9zZXRBbHBoYUJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRs ZSwgaW50IHNpemUpOwotK0NfRVhQT1JUIGludCBRU3VyZmFjZUZvcm1hdF9hbHBoYUJ1ZmZlclNp emUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZvcm1h dF9zZXRTYW1wbGVzKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIGludCBudW1TYW1wbGVzKTsKLStD X0VYUE9SVCBpbnQgUVN1cmZhY2VGb3JtYXRfc2FtcGxlcyhRU3VyZmFjZUZvcm1hdEggaGFuZGxl KTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFN3YXBCZWhhdmlvcihRU3VyZmFj ZUZvcm1hdEggaGFuZGxlLCBRU3VyZmFjZUZvcm1hdDo6U3dhcEJlaGF2aW9yIGJlaGF2aW9yKTsK LStDX0VYUE9SVCBRU3VyZmFjZUZvcm1hdDo6U3dhcEJlaGF2aW9yIFFTdXJmYWNlRm9ybWF0X3N3 YXBCZWhhdmlvcihRU3VyZmFjZUZvcm1hdEggaGFuZGxlKTsKLStDX0VYUE9SVCBib29sIFFTdXJm YWNlRm9ybWF0X2hhc0FscGhhKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZv aWQgUVN1cmZhY2VGb3JtYXRfc2V0UHJvZmlsZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBRU3Vy ZmFjZUZvcm1hdDo6T3BlbkdMQ29udGV4dFByb2ZpbGUgcHJvZmlsZSk7Ci0rQ19FWFBPUlQgUVN1 cmZhY2VGb3JtYXQ6Ok9wZW5HTENvbnRleHRQcm9maWxlIFFTdXJmYWNlRm9ybWF0X3Byb2ZpbGUo UVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZvcm1hdF9z ZXRSZW5kZXJhYmxlVHlwZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBRU3VyZmFjZUZvcm1hdDo6 UmVuZGVyYWJsZVR5cGUgdHlwZSk7Ci0rQ19FWFBPUlQgUVN1cmZhY2VGb3JtYXQ6OlJlbmRlcmFi bGVUeXBlIFFTdXJmYWNlRm9ybWF0X3JlbmRlcmFibGVUeXBlKFFTdXJmYWNlRm9ybWF0SCBoYW5k bGUpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0TWFqb3JWZXJzaW9uKFFTdXJm YWNlRm9ybWF0SCBoYW5kbGUsIGludCBtYWpvclZlcnNpb24pOwotK0NfRVhQT1JUIGludCBRU3Vy ZmFjZUZvcm1hdF9tYWpvclZlcnNpb24oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19FWFBP UlQgdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRNaW5vclZlcnNpb24oUVN1cmZhY2VGb3JtYXRIIGhh bmRsZSwgaW50IG1pbm9yVmVyc2lvbik7Ci0rQ19FWFBPUlQgaW50IFFTdXJmYWNlRm9ybWF0X21p bm9yVmVyc2lvbihRU3VyZmFjZUZvcm1hdEggaGFuZGxlKTsKLStDX0VYUE9SVCBib29sIFFTdXJm YWNlRm9ybWF0X3N0ZXJlbyhRU3VyZmFjZUZvcm1hdEggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lk IFFTdXJmYWNlRm9ybWF0X3NldFN0ZXJlbyhRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBib29sIGVu YWJsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRPcHRpb25zKFFTdXJmYWNl Rm9ybWF0SCBoYW5kbGUsIFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb25zIG9wdGlvbnMpOwot K0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0T3B0aW9uKFFTdXJmYWNlRm9ybWF0SCBo YW5kbGUsIFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb24gb3B0aW9uLCBib29sIG9uID0gdHJ1 ZSk7Ci0rQ19FWFBPUlQgYm9vbCBRU3VyZmFjZUZvcm1hdF90ZXN0T3B0aW9uKFFTdXJmYWNlRm9y bWF0SCBoYW5kbGUsIFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb24gb3B0aW9uKTsKLStDX0VY UE9SVCBRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9ucyBRU3VyZmFjZUZvcm1hdF9vcHRpb25z KFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpOwotK0NfRVhQT1JUIGludCBRU3VyZmFjZUZvcm1hdF9z d2FwSW50ZXJ2YWwoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3Vy ZmFjZUZvcm1hdF9zZXRTd2FwSW50ZXJ2YWwoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IGlu dGVydmFsKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldERlZmF1bHRGb3JtYXQo UVN1cmZhY2VGb3JtYXRIIGZvcm1hdCk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZvcm1hdF9k ZWZhdWx0Rm9ybWF0KFFTdXJmYWNlRm9ybWF0SCByZXR2YWwpOwotKwotKyNlbmRpZgotSW5kZXg6 IHNyYy9xd2luZG93X2MuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMv cXdpbmRvd19jLmNwcAotQEAgLTAsMCArMSw1NDggQEAKLSsvLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsvLwotKy8vICBT ZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGNv cHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCi0rCi0rCi0rI2luY2x1ZGUgInF3aW5kb3dfYy5oIgotKwotK1FXaW5kb3dIIFFX aW5kb3dfQ3JlYXRlKFFXaW5kb3dIIHBhcmVudCkKLSt7Ci0rICByZXR1cm4gKFFXaW5kb3dIKSBu ZXcgUVdpbmRvdygoUVdpbmRvdyopcGFyZW50KTsKLSt9Ci0rCi0rUVdpbmRvd0ggUVdpbmRvd19D cmVhdGUyKFFTY3JlZW5IIHNjcmVlbikKLSt7Ci0rICByZXR1cm4gKFFXaW5kb3dIKSBuZXcgUVdp bmRvdygoUVNjcmVlbiopc2NyZWVuKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X0Rlc3Ryb3koUVdp bmRvd0ggaGFuZGxlKQotK3sKLSsgIGRlbGV0ZSAoUVdpbmRvdyAqKWhhbmRsZTsKLSt9Ci0rCi0r dm9pZCBRV2luZG93X3NldFN1cmZhY2VUeXBlKFFXaW5kb3dIIGhhbmRsZSwgUVN1cmZhY2U6OlN1 cmZhY2VUeXBlIHN1cmZhY2VUeXBlKQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNldFN1 cmZhY2VUeXBlKChRU3VyZmFjZTo6U3VyZmFjZVR5cGUpIHN1cmZhY2VUeXBlKTsKLSt9Ci0rCi0r UVN1cmZhY2U6OlN1cmZhY2VUeXBlIFFXaW5kb3dfc3VyZmFjZVR5cGUoUVdpbmRvd0ggaGFuZGxl KQotK3sKLSsgIHJldHVybiAoUVN1cmZhY2U6OlN1cmZhY2VUeXBlKSAoKFFXaW5kb3cgKiloYW5k bGUpLT5zdXJmYWNlVHlwZSgpOwotK30KLSsKLStib29sIFFXaW5kb3dfaXNWaXNpYmxlKFFXaW5k b3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGJvb2wpICgoUVdpbmRvdyAqKWhhbmRsZSktPmlz VmlzaWJsZSgpOwotK30KLSsKLStRV2luZG93OjpWaXNpYmlsaXR5IFFXaW5kb3dfdmlzaWJpbGl0 eShRV2luZG93SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChRV2luZG93OjpWaXNpYmlsaXR5KSAo KFFXaW5kb3cgKiloYW5kbGUpLT52aXNpYmlsaXR5KCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19z ZXRWaXNpYmlsaXR5KFFXaW5kb3dIIGhhbmRsZSwgUVdpbmRvdzo6VmlzaWJpbGl0eSB2KQotK3sK LSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNldFZpc2liaWxpdHkoKFFXaW5kb3c6OlZpc2liaWxp dHkpIHYpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfY3JlYXRlUGxhdGZvcm1SZXNvdXJjZXMoUVdp bmRvd0ggaGFuZGxlKSAvKiB2b2lkIGNyZWF0ZSgpOyAqLwotK3sKLSsgICgoUVdpbmRvdyAqKWhh bmRsZSktPmNyZWF0ZSgpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfZGVzdHJveVBsYXRmb3JtUmVz b3VyY2VzKFFXaW5kb3dIIGhhbmRsZSkgLyogdm9pZCBkZXN0cm95KCk7ICovCi0rewotKyAgKChR V2luZG93ICopaGFuZGxlKS0+ZGVzdHJveSgpOwotK30KLSsKLSt1bnNpZ25lZCBpbnQgUVdpbmRv d193aW5JZChRV2luZG93SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuICh1bnNpZ25lZCBpbnQpICgo UVdpbmRvdyAqKWhhbmRsZSktPndpbklkKCk7Ci0rfQotKwotK1FXaW5kb3dIIFFXaW5kb3dfcGFy ZW50KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFFXaW5kb3dIKSAoKFFXaW5kb3cg KiloYW5kbGUpLT5wYXJlbnQoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldFBhcmVudChRV2lu ZG93SCBoYW5kbGUsIFFXaW5kb3dIIHBhcmVudCkKLSt7Ci0rCSgoUVdpbmRvdyAqKWhhbmRsZSkt PnNldFBhcmVudCgoUVdpbmRvdyopcGFyZW50KTsKLSt9Ci0rCi0rYm9vbCBRV2luZG93X2lzVG9w TGV2ZWwoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsJcmV0dXJuIChib29sKSAoKFFXaW5kb3cgKilo YW5kbGUpLT5pc1RvcExldmVsKCk7Ci0rfQotKwotKwotK2Jvb2wgUVdpbmRvd19pc01vZGFsKFFX aW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAoYm9vbCkgKChRV2luZG93ICopaGFuZGxlKS0+ aXNNb2RhbCgpOwotK30KLSsKLStRdDo6V2luZG93TW9kYWxpdHkgUVdpbmRvd19tb2RhbGl0eShR V2luZG93SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKFF0OjpXaW5kb3dNb2RhbGl0eSkgKChRV2lu ZG93ICopaGFuZGxlKS0+bW9kYWxpdHkoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldE1vZGFs aXR5KFFXaW5kb3dIIGhhbmRsZSwgUXQ6OldpbmRvd01vZGFsaXR5IHdpbmRvd01vZGFsaXR5KQot K3sKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0TW9kYWxpdHkoKFF0OjpXaW5kb3dNb2RhbGl0 eSl3aW5kb3dNb2RhbGl0eSk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRGb3JtYXQoUVdpbmRv d0ggaGFuZGxlLCBjb25zdCBRU3VyZmFjZUZvcm1hdEggZm9ybWF0KQotK3sKLSsgICgoUVdpbmRv dyAqKWhhbmRsZSktPnNldEZvcm1hdCgqKGNvbnN0IFFTdXJmYWNlRm9ybWF0KikgZm9ybWF0KTsK LSt9Ci0rCi0rdm9pZCBRV2luZG93X2Zvcm1hdChRV2luZG93SCBoYW5kbGUsIFFTdXJmYWNlRm9y bWF0SCByZXR2YWwpCi0rewotKyAgKihRU3VyZmFjZUZvcm1hdCopIHJldHZhbCA9ICgoUVdpbmRv dyAqKWhhbmRsZSktPmZvcm1hdCgpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfcmVxdWVzdGVkRm9y bWF0KFFXaW5kb3dIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXRIIHJldHZhbCkKLSt7Ci0rICAqKFFT dXJmYWNlRm9ybWF0KikgcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+cmVxdWVzdGVkRm9y bWF0KCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRGbGFncyhRV2luZG93SCBoYW5kbGUsIHVu c2lnbmVkIGludCBmbGFncykKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRGbGFncygo UXQ6OldpbmRvd0ZsYWdzKWZsYWdzKTsKLSt9Ci0rCi0rdW5zaWduZWQgaW50IFFXaW5kb3dfZmxh Z3MoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgIHJldHVybiAodW5zaWduZWQgaW50KSAoKFFXaW5k b3cgKiloYW5kbGUpLT5mbGFncygpOwotK30KLSsKLStRdDo6V2luZG93VHlwZSBRV2luZG93X3R5 cGUoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoUXQ6OldpbmRvd1R5cGUpICgoUVdp bmRvdyAqKWhhbmRsZSktPnR5cGUoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3RpdGxlKFFXaW5k b3dIIGhhbmRsZSwgUFdpZGVTdHJpbmcgcmV0dmFsKQotK3sKLSsJUVN0cmluZyB0X3JldHZhbDsK LSsJdF9yZXR2YWwgPSAoKFFXaW5kb3cgKiloYW5kbGUpLT50aXRsZSgpOwotKwljb3B5UVN0cmlu Z1RvUFdpZGVTdHJpbmcodF9yZXR2YWwsIHJldHZhbCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19z ZXRPcGFjaXR5KFFXaW5kb3dIIGhhbmRsZSwgcXJlYWwgbGV2ZWwpCi0rewotKwkoKFFXaW5kb3cg KiloYW5kbGUpLT5zZXRPcGFjaXR5KGxldmVsKTsKLSt9Ci0rCi0rcXJlYWwgUVdpbmRvd19vcGFj aXR5KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKHFyZWFsKSAoKFFXaW5kb3cgKilo YW5kbGUpLT5vcGFjaXR5KCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRNYXNrKFFXaW5kb3dI IGhhbmRsZSwgY29uc3QgUVJlZ2lvbkggQW5vblBhcmFtMSkKLSt7Ci0rCSgoUVdpbmRvdyAqKWhh bmRsZSktPnNldE1hc2soKihjb25zdCBRUmVnaW9uKilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9p ZCBRV2luZG93X21hc2soUVdpbmRvd0ggaGFuZGxlLCBRUmVnaW9uSCByZXR2YWwpCi0rewotKwkq KFFSZWdpb24gKilyZXR2YWwgPSAoKFFXaW5kb3cgKiloYW5kbGUpLT5tYXNrKCk7Ci0rfQotKwot K2Jvb2wgUVdpbmRvd19pc0FjdGl2ZVdpbmRvdyhRV2luZG93SCBoYW5kbGUpCi0rewotKwlyZXR1 cm4gKGJvb2wpICgoUVdpbmRvdyAqKWhhbmRsZSktPmlzQWN0aXZlKCk7Ci0rfQotKwotK3ZvaWQg UVdpbmRvd19yZXBvcnRDb250ZW50T3JpZW50YXRpb25DaGFuZ2UoUVdpbmRvd0ggaGFuZGxlLCBR dDo6U2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi0rewotKyAgKChRV2luZG93ICopaGFu ZGxlKS0+cmVwb3J0Q29udGVudE9yaWVudGF0aW9uQ2hhbmdlKChRdDo6U2NyZWVuT3JpZW50YXRp b24pIG9yaWVudGF0aW9uKTsKLSt9Ci0rCi0rUXQ6OlNjcmVlbk9yaWVudGF0aW9uIFFXaW5kb3df Y29udGVudE9yaWVudGF0aW9uKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFF0OjpT Y3JlZW5PcmllbnRhdGlvbikgKChRV2luZG93ICopaGFuZGxlKS0+Y29udGVudE9yaWVudGF0aW9u KCk7Ci0rfQotKwotK3FyZWFsIFFXaW5kb3dfZGV2aWNlUGl4ZWxSYXRpbyhRV2luZG93SCBoYW5k bGUpCi0rewotKyAgcmV0dXJuIChxcmVhbCkgKChRV2luZG93ICopaGFuZGxlKS0+ZGV2aWNlUGl4 ZWxSYXRpbygpOwotK30KLSsKLSt1bnNpZ25lZCBpbnQgUVdpbmRvd193aW5kb3dTdGF0ZShRV2lu ZG93SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKHVuc2lnbmVkIGludCkgKChRV2luZG93ICopaGFu ZGxlKS0+d2luZG93U3RhdGUoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldFdpbmRvd1N0YXRl KFFXaW5kb3dIIGhhbmRsZSwgdW5zaWduZWQgaW50IHN0YXRlKQotK3sKLSsJKChRV2luZG93ICop aGFuZGxlKS0+c2V0V2luZG93U3RhdGUoKFF0OjpXaW5kb3dTdGF0ZSlzdGF0ZSk7Ci0rfQotKwot K3ZvaWQgUVdpbmRvd19zZXRUcmFuc2llbnRQYXJlbnQoUVdpbmRvd0ggaGFuZGxlLCBRV2luZG93 SCBwYXJlbnQpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0VHJhbnNpZW50UGFyZW50 KChRV2luZG93KilwYXJlbnQpOwotK30KLSsKLStRV2luZG93SCBRV2luZG93X3RyYW5zaWVudFBh cmVudChRV2luZG93SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKFFXaW5kb3dIKSAoKFFXaW5kb3cg KiloYW5kbGUpLT50cmFuc2llbnRQYXJlbnQoKTsKLSt9Ci0rCi0rYm9vbCBRV2luZG93X2lzQW5j ZXN0b3JPZihRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFXaW5kb3dIIGNoaWxkLCBRV2luZG93OjpB bmNlc3Rvck1vZGUgbW9kZSkKLSt7Ci0rICByZXR1cm4gKGJvb2wpICgoUVdpbmRvdyAqKWhhbmRs ZSktPmlzQW5jZXN0b3JPZigoUVdpbmRvdyAqKWNoaWxkLCAoUVdpbmRvdzo6QW5jZXN0b3JNb2Rl KSBtb2RlKTsKLSt9Ci0rCi0rYm9vbCBRV2luZG93X2lzRXhwb3NlZChRV2luZG93SCBoYW5kbGUp Ci0rewotKyAgcmV0dXJuIChib29sKSAoKFFXaW5kb3cgKiloYW5kbGUpLT5pc0V4cG9zZWQoKTsK LSt9Ci0rCi0raW50IFFXaW5kb3dfbWluaW11bVdpZHRoKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0r CXJldHVybiAoaW50KSAoKFFXaW5kb3cgKiloYW5kbGUpLT5taW5pbXVtV2lkdGgoKTsKLSt9Ci0r Ci0raW50IFFXaW5kb3dfbWluaW11bUhlaWdodChRV2luZG93SCBoYW5kbGUpCi0rewotKwlyZXR1 cm4gKGludCkgKChRV2luZG93ICopaGFuZGxlKS0+bWluaW11bUhlaWdodCgpOwotK30KLSsKLStp bnQgUVdpbmRvd19tYXhpbXVtV2lkdGgoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsJcmV0dXJuIChp bnQpICgoUVdpbmRvdyAqKWhhbmRsZSktPm1heGltdW1XaWR0aCgpOwotK30KLSsKLStpbnQgUVdp bmRvd19tYXhpbXVtSGVpZ2h0KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAoaW50KSAo KFFXaW5kb3cgKiloYW5kbGUpLT5tYXhpbXVtSGVpZ2h0KCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRv d19taW5pbXVtU2l6ZShRV2luZG93SCBoYW5kbGUsIFBTaXplIHJldHZhbCkKLSt7Ci0rCSooUVNp emUgKilyZXR2YWwgPSAoKFFXaW5kb3cgKiloYW5kbGUpLT5taW5pbXVtU2l6ZSgpOwotK30KLSsK LSt2b2lkIFFXaW5kb3dfbWF4aW11bVNpemUoUVdpbmRvd0ggaGFuZGxlLCBQU2l6ZSByZXR2YWwp Ci0rewotKwkqKFFTaXplICopcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+bWF4aW11bVNp emUoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2Jhc2VTaXplKFFXaW5kb3dIIGhhbmRsZSwgUFNp emUgcmV0dmFsKQotK3sKLSsJKihRU2l6ZSAqKXJldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRsZSkt PmJhc2VTaXplKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zaXplSW5jcmVtZW50KFFXaW5kb3dI IGhhbmRsZSwgUFNpemUgcmV0dmFsKQotK3sKLSsJKihRU2l6ZSAqKXJldHZhbCA9ICgoUVdpbmRv dyAqKWhhbmRsZSktPnNpemVJbmNyZW1lbnQoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldE1p bmltdW1TaXplKFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUVNpemVIIEFub25QYXJhbTEpCi0rewot KwkoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRNaW5pbXVtU2l6ZSgqKGNvbnN0IFFTaXplKilBbm9u UGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldE1heGltdW1TaXplKFFXaW5kb3dIIGhh bmRsZSwgY29uc3QgUVNpemVIIEFub25QYXJhbTEpCi0rewotKwkoKFFXaW5kb3cgKiloYW5kbGUp LT5zZXRNYXhpbXVtU2l6ZSgqKGNvbnN0IFFTaXplKilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9p ZCBRV2luZG93X3NldEJhc2VTaXplKFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUVNpemVIIEFub25Q YXJhbTEpCi0rewotKwkoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRCYXNlU2l6ZSgqKGNvbnN0IFFT aXplKilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldFNpemVJbmNyZW1lbnQo UVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRU2l6ZUggQW5vblBhcmFtMSkKLSt7Ci0rCSgoUVdpbmRv dyAqKWhhbmRsZSktPnNldFNpemVJbmNyZW1lbnQoKihjb25zdCBRU2l6ZSopQW5vblBhcmFtMSk7 Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRHZW9tZXRyeShRV2luZG93SCBoYW5kbGUsIGludCB4 LCBpbnQgeSwgaW50IHcsIGludCBoKQotK3sKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0R2Vv bWV0cnkoeCwgeSwgdywgaCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRHZW9tZXRyeTIoUVdp bmRvd0ggaGFuZGxlLCBQUmVjdCBBbm9uUGFyYW0xKQotK3sKLSsJUVJlY3QgdF9Bbm9uUGFyYW0x OwotKwljb3B5UFJlY3RUb1FSZWN0KEFub25QYXJhbTEsIHRfQW5vblBhcmFtMSk7Ci0rCSgoUVdp bmRvdyAqKWhhbmRsZSktPnNldEdlb21ldHJ5KHRfQW5vblBhcmFtMSk7Ci0rfQotKwotK3ZvaWQg UVdpbmRvd19nZW9tZXRyeShRV2luZG93SCBoYW5kbGUsIFBSZWN0IHJldHZhbCkKLSt7Ci0rCVFS ZWN0IHRfcmV0dmFsOwotKwl0X3JldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRsZSktPmdlb21ldHJ5 KCk7Ci0rCWNvcHlRUmVjdFRvUFJlY3QodF9yZXR2YWwsIHJldHZhbCk7Ci0rfQotKwotK3ZvaWQg UVdpbmRvd19mcmFtZU1hcmdpbnMoUVdpbmRvd0ggaGFuZGxlLCBRTWFyZ2luc0ggcmV0dmFsKQot K3sKLSsJKihRTWFyZ2lucyAqKXJldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRsZSktPmZyYW1lTWFy Z2lucygpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfZnJhbWVHZW9tZXRyeShRV2luZG93SCBoYW5k bGUsIFBSZWN0IHJldHZhbCkKLSt7Ci0rCVFSZWN0IHRfcmV0dmFsOwotKwl0X3JldHZhbCA9ICgo UVdpbmRvdyAqKWhhbmRsZSktPmZyYW1lR2VvbWV0cnkoKTsKLSsJY29weVFSZWN0VG9QUmVjdCh0 X3JldHZhbCwgcmV0dmFsKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2ZyYW1lUG9zaXRpb24oUVdp bmRvd0ggaGFuZGxlLCBQUXRQb2ludCByZXR2YWwpCi0rewotKwkqKFFQb2ludCAqKXJldHZhbCA9 ICgoUVdpbmRvdyAqKWhhbmRsZSktPmZyYW1lUG9zaXRpb24oKTsKLSt9Ci0rCi0rdm9pZCBRV2lu ZG93X3NldEZyYW1lUG9zaXRpb24oUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRUG9pbnRIIEFub25Q YXJhbTEpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0RnJhbWVQb3NpdGlvbigqKGNv bnN0IFFQb2ludCopQW5vblBhcmFtMSk7Ci0rfQotKwotK2ludCBRV2luZG93X3dpZHRoKFFXaW5k b3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAoaW50KSAoKFFXaW5kb3cgKiloYW5kbGUpLT53aWR0 aCgpOwotK30KLSsKLStpbnQgUVdpbmRvd19oZWlnaHQoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsJ cmV0dXJuIChpbnQpICgoUVdpbmRvdyAqKWhhbmRsZSktPmhlaWdodCgpOwotK30KLSsKLStpbnQg UVdpbmRvd194KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAoaW50KSAoKFFXaW5kb3cg KiloYW5kbGUpLT54KCk7Ci0rfQotKwotK2ludCBRV2luZG93X3koUVdpbmRvd0ggaGFuZGxlKQot K3sKLSsJcmV0dXJuIChpbnQpICgoUVdpbmRvdyAqKWhhbmRsZSktPnkoKTsKLSt9Ci0rCi0rdm9p ZCBRV2luZG93X3NpemUoUVdpbmRvd0ggaGFuZGxlLCBQU2l6ZSByZXR2YWwpCi0rewotKwkqKFFT aXplICopcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+c2l6ZSgpOwotK30KLSsKLSt2b2lk IFFXaW5kb3dfcG9zaXRpb24oUVdpbmRvd0ggaGFuZGxlLCBQUXRQb2ludCByZXR2YWwpCi0rewot KwkqKFFQb2ludCAqKXJldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRsZSktPnBvc2l0aW9uKCk7Ci0r fQotKwotK3ZvaWQgUVdpbmRvd19zZXRQb3NpdGlvbihRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFQ b2ludEggQW5vblBhcmFtMSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRQb3NpdGlv bigqKGNvbnN0IFFQb2ludCopQW5vblBhcmFtMSk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRQ b3NpdGlvbjIoUVdpbmRvd0ggaGFuZGxlLCBpbnQgcG9zeCwgaW50IHBvc3kpCi0rewotKyAgKChR V2luZG93ICopaGFuZGxlKS0+c2V0UG9zaXRpb24ocG9zeCwgcG9zeSk7Ci0rfQotKwotK3ZvaWQg UVdpbmRvd19yZXNpemUoUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRU2l6ZUggQW5vblBhcmFtMSkK LSt7Ci0rCSgoUVdpbmRvdyAqKWhhbmRsZSktPnJlc2l6ZSgqKGNvbnN0IFFTaXplKilBbm9uUGFy YW0xKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3Jlc2l6ZTIoUVdpbmRvd0ggaGFuZGxlLCBpbnQg dywgaW50IGgpCi0rewotKwkoKFFXaW5kb3cgKiloYW5kbGUpLT5yZXNpemUodywgaCk7Ci0rfQot KwotK3ZvaWQgUVdpbmRvd19zZXRGaWxlUGF0aChRV2luZG93SCBoYW5kbGUsIFBXaWRlU3RyaW5n IEFub25QYXJhbTEpCi0rewotKwlRU3RyaW5nIHRfQW5vblBhcmFtMTsKLSsJY29weVBXaWRlU3Ry aW5nVG9RU3RyaW5nKEFub25QYXJhbTEsIHRfQW5vblBhcmFtMSk7Ci0rCSgoUVdpbmRvdyAqKWhh bmRsZSktPnNldEZpbGVQYXRoKHRfQW5vblBhcmFtMSk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19m aWxlUGF0aChRV2luZG93SCBoYW5kbGUsIFBXaWRlU3RyaW5nIHJldHZhbCkKLSt7Ci0rCVFTdHJp bmcgdF9yZXR2YWw7Ci0rCXRfcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+ZmlsZVBhdGgo KTsKLSsJY29weVFTdHJpbmdUb1BXaWRlU3RyaW5nKHRfcmV0dmFsLCByZXR2YWwpOwotK30KLSsK LSt2b2lkIFFXaW5kb3dfc2V0SWNvbihRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFJY29uSCBpY29u KQotK3sKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0SWNvbigqKGNvbnN0IFFJY29uKilpY29u KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2ljb24oUVdpbmRvd0ggaGFuZGxlLCBRSWNvbkggcmV0 dmFsKQotK3sKLSsJKihRSWNvbiAqKXJldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRsZSktPmljb24o KTsKLSt9Ci0rCi0rUVNjcmVlbkggUVdpbmRvd19zY3JlZW4oUVdpbmRvd0ggaGFuZGxlKQotK3sK LSsgIHJldHVybiAoUVNjcmVlbkgpICgoUVdpbmRvdyAqKWhhbmRsZSktPnNjcmVlbigpOwotK30K LSsKLSt2b2lkIFFXaW5kb3dfc2V0U2NyZWVuKFFXaW5kb3dIIGhhbmRsZSwgUVNjcmVlbkggc2Ny ZWVuKQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNldFNjcmVlbigoUVNjcmVlbiAqKSBz Y3JlZW4pOwotK30KLSsKLStib29sIFFXaW5kb3dfc2V0S2V5Ym9hcmRHcmFiRW5hYmxlZChRV2lu ZG93SCBoYW5kbGUsIGJvb2wgZ3JhYikKLSt7Ci0rICByZXR1cm4gKChRV2luZG93ICopaGFuZGxl KS0+c2V0S2V5Ym9hcmRHcmFiRW5hYmxlZChncmFiKTsKLSt9Ci0rCi0rYm9vbCBRV2luZG93X3Nl dE1vdXNlR3JhYkVuYWJsZWQoUVdpbmRvd0ggaGFuZGxlLCBib29sIGdyYWIpCi0rewotKyAgcmV0 dXJuICgoUVdpbmRvdyAqKWhhbmRsZSktPnNldE1vdXNlR3JhYkVuYWJsZWQoZ3JhYik7Ci0rfQot KwotK3ZvaWQgUVdpbmRvd19tYXBUb0dsb2JhbChRV2luZG93SCBoYW5kbGUsIFBRdFBvaW50IHJl dHZhbCwgY29uc3QgUVBvaW50SCBBbm9uUGFyYW0xKQotK3sKLSsJKihRUG9pbnQgKilyZXR2YWwg PSAoKFFXaW5kb3cgKiloYW5kbGUpLT5tYXBUb0dsb2JhbCgqKGNvbnN0IFFQb2ludCopQW5vblBh cmFtMSk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19tYXBGcm9tR2xvYmFsKFFXaW5kb3dIIGhhbmRs ZSwgUFF0UG9pbnQgcmV0dmFsLCBjb25zdCBRUG9pbnRIIEFub25QYXJhbTEpCi0rewotKwkqKFFQ b2ludCAqKXJldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRsZSktPm1hcEZyb21HbG9iYWwoKihjb25z dCBRUG9pbnQqKUFub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfY3Vyc29yKFFXaW5k b3dIIGhhbmRsZSwgUUN1cnNvckggcmV0dmFsKQotK3sKLSsJKihRQ3Vyc29yICopcmV0dmFsID0g KChRV2luZG93ICopaGFuZGxlKS0+Y3Vyc29yKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRD dXJzb3IoUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRQ3Vyc29ySCBBbm9uUGFyYW0xKQotK3sKLSsJ KChRV2luZG93ICopaGFuZGxlKS0+c2V0Q3Vyc29yKCooY29uc3QgUUN1cnNvciopQW5vblBhcmFt MSk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd191bnNldEN1cnNvcihRV2luZG93SCBoYW5kbGUpCi0r ewotKwkoKFFXaW5kb3cgKiloYW5kbGUpLT51bnNldEN1cnNvcigpOwotK30KLSsKLStRT2JqZWN0 SCBRV2luZG93X2ZvY3VzT2JqZWN0KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFFP YmplY3RIKSAoKFFXaW5kb3cgKiloYW5kbGUpLT5mb2N1c09iamVjdCgpOwotK30KLSsKLStRV2lu ZG93SCBRV2luZG93X2Zyb21XaW5JRCh1bnNpZ25lZCBpbnQgaWQpCi0rewotKyAgcmV0dXJuIChR V2luZG93SCkgUVdpbmRvdzo6ZnJvbVdpbklkKChXSWQpIGlkKTsKLSt9Ci0rCi0rdm9pZCBRV2lu ZG93X3JlcXVlc3RBY3RpdmF0ZShRV2luZG93SCBoYW5kbGUpCi0rewotKyAgKChRV2luZG93ICop aGFuZGxlKS0+cmVxdWVzdEFjdGl2YXRlKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRWaXNp YmxlKFFXaW5kb3dIIGhhbmRsZSwgYm9vbCB2aXNpYmxlKQotK3sKLSsgICgoUVdpbmRvdyAqKWhh bmRsZSktPnNldFZpc2libGUodmlzaWJsZSk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zaG93KFFX aW5kb3dIIGhhbmRsZSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zaG93KCk7Ci0rfQot KwotK3ZvaWQgUVdpbmRvd19oaWRlKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICAoKFFXaW5kb3cg KiloYW5kbGUpLT5oaWRlKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zaG93TWluaW1pemVkKFFX aW5kb3dIIGhhbmRsZSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zaG93TWluaW1pemVk KCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zaG93TWF4aW1pemVkKFFXaW5kb3dIIGhhbmRsZSkK LSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zaG93TWF4aW1pemVkKCk7Ci0rfQotKwotK3Zv aWQgUVdpbmRvd19zaG93RnVsbFNjcmVlbihRV2luZG93SCBoYW5kbGUpCi0rewotKyAgKChRV2lu ZG93ICopaGFuZGxlKS0+c2hvd0Z1bGxTY3JlZW4oKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3No b3dOb3JtYWwoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNo b3dOb3JtYWwoKTsKLSt9Ci0rCi0rYm9vbCBRV2luZG93X2Nsb3NlKFFXaW5kb3dIIGhhbmRsZSkK LSt7Ci0rICByZXR1cm4gKGJvb2wpICgoUVdpbmRvdyAqKWhhbmRsZSktPmNsb3NlKCk7Ci0rfQot KwotK3ZvaWQgUVdpbmRvd19yYWlzZShRV2luZG93SCBoYW5kbGUpCi0rewotKyAgKChRV2luZG93 ICopaGFuZGxlKS0+cmFpc2UoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2xvd2VyKFFXaW5kb3dI IGhhbmRsZSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5sb3dlcigpOwotK30KLSsKLSt2 b2lkIFFXaW5kb3dfc2V0V2luZG93VGl0bGUoUVdpbmRvd0ggaGFuZGxlLCBQV2lkZVN0cmluZyBB bm9uUGFyYW0xKQotK3sKLSsJUVN0cmluZyB0X0Fub25QYXJhbTE7Ci0rCWNvcHlQV2lkZVN0cmlu Z1RvUVN0cmluZyhBbm9uUGFyYW0xLCB0X0Fub25QYXJhbTEpOwotKwkoKFFXaW5kb3cgKiloYW5k bGUpLT5zZXRUaXRsZSh0X0Fub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfc2V0WChR V2luZG93SCBoYW5kbGUsIGludCBhcmd4KQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNl dFgoYXJneCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRZKFFXaW5kb3dIIGhhbmRsZSwgaW50 IGFyZ3kpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0WShhcmd5KTsKLSt9Ci0rCi0r dm9pZCBRV2luZG93X3NldFdpZHRoKFFXaW5kb3dIIGhhbmRsZSwgaW50IGFyZ3cpCi0rewotKyAg KChRV2luZG93ICopaGFuZGxlKS0+c2V0V2lkdGgoYXJndyk7Ci0rfQotKwotK3ZvaWQgUVdpbmRv d19zZXRIZWlnaHQoUVdpbmRvd0ggaGFuZGxlLCBpbnQgYXJnaCkKLSt7Ci0rICAoKFFXaW5kb3cg KiloYW5kbGUpLT5zZXRIZWlnaHQoYXJnaCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRNaW5p bXVtV2lkdGgoUVdpbmRvd0ggaGFuZGxlLCBpbnQgdykKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5k bGUpLT5zZXRNaW5pbXVtV2lkdGgodyk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRNaW5pbXVt SGVpZ2h0KFFXaW5kb3dIIGhhbmRsZSwgaW50IGgpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxl KS0+c2V0TWluaW11bUhlaWdodChoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldE1heGltdW1X aWR0aChRV2luZG93SCBoYW5kbGUsIGludCB3KQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSkt PnNldE1heGltdW1XaWR0aCh3KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldE1heGltdW1IZWln aHQoUVdpbmRvd0ggaGFuZGxlLCBpbnQgaCkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5z ZXRNYXhpbXVtSGVpZ2h0KGgpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfYWxlcnQoUVdpbmRvd0gg aGFuZGxlLCBpbnQgbXNlYykKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5hbGVydChtc2Vj KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3JlcXVlc3RVcGRhdGUoUVdpbmRvd0ggaGFuZGxlKQot K3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnJlcXVlc3RVcGRhdGUoKTsKLSt9Ci0rCi1JbmRl eDogc3JjL3F3aW5kb3dfYy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMv cXdpbmRvd19jLmgKLUBAIC0wLDAgKzEsMTIzIEBACi0rLy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK LSsvLyAgQ29weXJpZ2h0IChjKSAyMDA3IGJ5IMW9ZWxqYW4gUmlrYWxvCi0rLy8KLSsvLyAgU2Vl IHRoZSBpbmNsdWRlZCBmaWxlIENPUFlJTkcuVFhUIGZvciBkZXRhaWxzIGFib3V0IHRoZSBjb3B5 cmlnaHQuCi0rLy8KLSsvLyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSsvLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgotKwotKwotKyNpZm5kZWYgUVdJTkRPV19DX0gKLSsjZGVmaW5lIFFXSU5ET1dfQ19I Ci0rCi0rI2luY2x1ZGUgPFF0R3VpPgotKyNpbmNsdWRlICJwYXNjYWxiaW5kLmgiCi0rCi0rQ19F WFBPUlQgUVdpbmRvd0ggUVdpbmRvd19DcmVhdGUoUVdpbmRvd0ggcGFyZW50KTsKLStDX0VYUE9S VCBRV2luZG93SCBRV2luZG93X0NyZWF0ZTIoUVNjcmVlbkggc2NyZWVuID0gUV9OVUxMUFRSKTsK LStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfRGVzdHJveShRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQ T1JUIHZvaWQgUVdpbmRvd19zZXRTdXJmYWNlVHlwZShRV2luZG93SCBoYW5kbGUsIFFTdXJmYWNl OjpTdXJmYWNlVHlwZSBzdXJmYWNlVHlwZSk7Ci0rQ19FWFBPUlQgUVN1cmZhY2U6OlN1cmZhY2VU eXBlIFFXaW5kb3dfc3VyZmFjZVR5cGUoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCBib29s IFFXaW5kb3dfaXNWaXNpYmxlKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUVdpbmRvdzo6 VmlzaWJpbGl0eSBRV2luZG93X3Zpc2liaWxpdHkoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9S VCB2b2lkIFFXaW5kb3dfc2V0VmlzaWJpbGl0eShRV2luZG93SCBoYW5kbGUsIFFXaW5kb3c6OlZp c2liaWxpdHkgdik7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2NyZWF0ZVBsYXRmb3JtUmVzb3Vy Y2VzKFFXaW5kb3dIIGhhbmRsZSk7IC8qIHZvaWQgY3JlYXRlKCk7ICovCi0rQ19FWFBPUlQgdm9p ZCBRV2luZG93X2Rlc3Ryb3lQbGF0Zm9ybVJlc291cmNlcyhRV2luZG93SCBoYW5kbGUpOyAvKiB2 b2lkIGRlc3Ryb3koKTsgKi8KLStDX0VYUE9SVCB1bnNpZ25lZCBpbnQgUVdpbmRvd193aW5JZChR V2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIFFXaW5kb3dIIFFXaW5kb3dfcGFyZW50KFFXaW5k b3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldFBhcmVudChRV2luZG93SCBo YW5kbGUsIFFXaW5kb3dIIHBhcmVudCk7Ci0rQ19FWFBPUlQgYm9vbCBRV2luZG93X2lzVG9wTGV2 ZWwoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCBib29sIFFXaW5kb3dfaXNNb2RhbChRV2lu ZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIFF0OjpXaW5kb3dNb2RhbGl0eSBRV2luZG93X21vZGFs aXR5KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldE1vZGFsaXR5 KFFXaW5kb3dIIGhhbmRsZSwgUXQ6OldpbmRvd01vZGFsaXR5IHdpbmRvd01vZGFsaXR5KTsKLStD X0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0Rm9ybWF0KFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUVN1 cmZhY2VGb3JtYXRIIGZvcm1hdCk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2Zvcm1hdChRV2lu ZG93SCBoYW5kbGUsIFFTdXJmYWNlRm9ybWF0SCByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdp bmRvd19yZXF1ZXN0ZWRGb3JtYXQoUVdpbmRvd0ggaGFuZGxlLCBRU3VyZmFjZUZvcm1hdEggcmV0 dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0RmxhZ3MoUVdpbmRvd0ggaGFuZGxlLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpOwotK0NfRVhQT1JUIHVuc2lnbmVkIGludCBRV2luZG93X2ZsYWdz KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUXQ6OldpbmRvd1R5cGUgUVdpbmRvd190eXBl KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3RpdGxlKFFXaW5kb3dI IGhhbmRsZSwgUFdpZGVTdHJpbmcgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0 T3BhY2l0eShRV2luZG93SCBoYW5kbGUsIHFyZWFsIGxldmVsKTsKLStDX0VYUE9SVCBxcmVhbCBR V2luZG93X29wYWNpdHkoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3df c2V0TWFzayhRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFSZWdpb25IIEFub25QYXJhbTEpOwotK0Nf RVhQT1JUIHZvaWQgUVdpbmRvd19tYXNrKFFXaW5kb3dIIGhhbmRsZSwgUVJlZ2lvbkggcmV0dmFs KTsKLStDX0VYUE9SVCBib29sIFFXaW5kb3dfaXNBY3RpdmUoUVdpbmRvd0ggaGFuZGxlKTsKLStD X0VYUE9SVCB2b2lkIFFXaW5kb3dfcmVwb3J0Q29udGVudE9yaWVudGF0aW9uQ2hhbmdlKFFXaW5k b3dIIGhhbmRsZSwgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKLStDX0VYUE9S VCBRdDo6U2NyZWVuT3JpZW50YXRpb24gUVdpbmRvd19jb250ZW50T3JpZW50YXRpb24oUVdpbmRv d0ggaGFuZGxlKTsKLStDX0VYUE9SVCBxcmVhbCBRV2luZG93X2RldmljZVBpeGVsUmF0aW8oUVdp bmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCB1bnNpZ25lZCBpbnQgUVdpbmRvd193aW5kb3dTdGF0 ZShRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRXaW5kb3dTdGF0 ZShRV2luZG93SCBoYW5kbGUsIHVuc2lnbmVkIGludCBzdGF0ZSk7Ci0rQ19FWFBPUlQgdm9pZCBR V2luZG93X3NldFRyYW5zaWVudFBhcmVudChRV2luZG93SCBoYW5kbGUsIFFXaW5kb3dIIHBhcmVu dCk7Ci0rQ19FWFBPUlQgUVdpbmRvd0ggUVdpbmRvd190cmFuc2llbnRQYXJlbnQoUVdpbmRvd0gg aGFuZGxlKTsKLStDX0VYUE9SVCBib29sIFFXaW5kb3dfaXNBbmNlc3Rvck9mKFFXaW5kb3dIIGhh bmRsZSwgY29uc3QgUVdpbmRvd0ggY2hpbGQsIFFXaW5kb3c6OkFuY2VzdG9yTW9kZSBtb2RlID0g UVdpbmRvdzo6QW5jZXN0b3JNb2RlOjpJbmNsdWRlVHJhbnNpZW50cyk7Ci0rQ19FWFBPUlQgYm9v bCBRV2luZG93X2lzRXhwb3NlZChRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIGludCBRV2lu ZG93X21pbmltdW1XaWR0aChRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIGludCBRV2luZG93 X21pbmltdW1IZWlnaHQoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCBpbnQgUVdpbmRvd19t YXhpbXVtV2lkdGgoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCBpbnQgUVdpbmRvd19tYXhp bXVtSGVpZ2h0KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X21pbmlt dW1TaXplKFFXaW5kb3dIIGhhbmRsZSwgUFNpemUgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFX aW5kb3dfbWF4aW11bVNpemUoUVdpbmRvd0ggaGFuZGxlLCBQU2l6ZSByZXR2YWwpOwotK0NfRVhQ T1JUIHZvaWQgUVdpbmRvd19iYXNlU2l6ZShRV2luZG93SCBoYW5kbGUsIFBTaXplIHJldHZhbCk7 Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NpemVJbmNyZW1lbnQoUVdpbmRvd0ggaGFuZGxlLCBQ U2l6ZSByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRNaW5pbXVtU2l6ZShRV2lu ZG93SCBoYW5kbGUsIGNvbnN0IFFTaXplSCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFX aW5kb3dfc2V0TWF4aW11bVNpemUoUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRU2l6ZUggQW5vblBh cmFtMSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldEJhc2VTaXplKFFXaW5kb3dIIGhhbmRs ZSwgY29uc3QgUVNpemVIIEFub25QYXJhbTEpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRT aXplSW5jcmVtZW50KFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUVNpemVIIEFub25QYXJhbTEpOwot K0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRHZW9tZXRyeShRV2luZG93SCBoYW5kbGUsIGludCB4 LCBpbnQgeSwgaW50IHcsIGludCBoKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0R2VvbWV0 cnkyKFFXaW5kb3dIIGhhbmRsZSwgUFJlY3QgQW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQgdm9pZCBR V2luZG93X2dlb21ldHJ5KFFXaW5kb3dIIGhhbmRsZSwgUFJlY3QgcmV0dmFsKTsKLStDX0VYUE9S VCB2b2lkIFFXaW5kb3dfZnJhbWVNYXJnaW5zKFFXaW5kb3dIIGhhbmRsZSwgUU1hcmdpbnNIIHJl dHZhbCk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2ZyYW1lR2VvbWV0cnkoUVdpbmRvd0ggaGFu ZGxlLCBQUmVjdCByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19mcmFtZVBvc2l0aW9u KFFXaW5kb3dIIGhhbmRsZSwgUFF0UG9pbnQgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5k b3dfc2V0RnJhbWVQb3NpdGlvbihRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFQb2ludEggQW5vblBh cmFtMSk7Ci0rQ19FWFBPUlQgaW50IFFXaW5kb3dfd2lkdGgoUVdpbmRvd0ggaGFuZGxlKTsKLStD X0VYUE9SVCBpbnQgUVdpbmRvd19oZWlnaHQoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCBp bnQgUVdpbmRvd194KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgaW50IFFXaW5kb3dfeShR V2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zaXplKFFXaW5kb3dIIGhh bmRsZSwgUFNpemUgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfcG9zaXRpb24oUVdp bmRvd0ggaGFuZGxlLCBQUXRQb2ludCByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19z ZXRQb3NpdGlvbihRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFQb2ludEggQW5vblBhcmFtMSk7Ci0r Q19FWFBPUlQgdm9pZCBRV2luZG93X3NldFBvc2l0aW9uMihRV2luZG93SCBoYW5kbGUsIGludCBw b3N4LCBpbnQgcG9zeSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3Jlc2l6ZShRV2luZG93SCBo YW5kbGUsIGNvbnN0IFFTaXplSCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3df cmVzaXplMihRV2luZG93SCBoYW5kbGUsIGludCB3LCBpbnQgaCk7Ci0rQ19FWFBPUlQgdm9pZCBR V2luZG93X3NldEZpbGVQYXRoKFFXaW5kb3dIIGhhbmRsZSwgUFdpZGVTdHJpbmcgQW5vblBhcmFt MSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2ZpbGVQYXRoKFFXaW5kb3dIIGhhbmRsZSwgUFdp ZGVTdHJpbmcgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0SWNvbihRV2luZG93 SCBoYW5kbGUsIGNvbnN0IFFJY29uSCBpY29uKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfaWNv bihRV2luZG93SCBoYW5kbGUsIFFJY29uSCByZXR2YWwpOwotK0NfRVhQT1JUIFFTY3JlZW5IIFFX aW5kb3dfc2NyZWVuKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3Nl dFNjcmVlbihRV2luZG93SCBoYW5kbGUsIFFTY3JlZW5IIHNjcmVlbik7Ci0rQ19FWFBPUlQgYm9v bCBRV2luZG93X3NldEtleWJvYXJkR3JhYkVuYWJsZWQoUVdpbmRvd0ggaGFuZGxlLCBib29sIGdy YWIpOwotK0NfRVhQT1JUIGJvb2wgUVdpbmRvd19zZXRNb3VzZUdyYWJFbmFibGVkKFFXaW5kb3dI IGhhbmRsZSwgYm9vbCBncmFiKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfbWFwVG9HbG9iYWwo UVdpbmRvd0ggaGFuZGxlLCBQUXRQb2ludCByZXR2YWwsIGNvbnN0IFFQb2ludEggQW5vblBhcmFt MSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X21hcEZyb21HbG9iYWwoUVdpbmRvd0ggaGFuZGxl LCBQUXRQb2ludCByZXR2YWwsIGNvbnN0IFFQb2ludEggQW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQg dm9pZCBRV2luZG93X2N1cnNvcihRV2luZG93SCBoYW5kbGUsIFFDdXJzb3JIIHJldHZhbCk7Ci0r Q19FWFBPUlQgdm9pZCBRV2luZG93X3NldEN1cnNvcihRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFD dXJzb3JIIEFub25QYXJhbTEpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd191bnNldEN1cnNvcihR V2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIFFPYmplY3RIIFFXaW5kb3dfZm9jdXNPYmplY3Qo UVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCBRV2luZG93SCBRV2luZG93X2Zyb21XaW5JRCh1 bnNpZ25lZCBpbnQgaWQpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19yZXF1ZXN0QWN0aXZhdGUo UVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0VmlzaWJsZShRV2lu ZG93SCBoYW5kbGUsIGJvb2wgdmlzaWJsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3Nob3co UVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfaGlkZShRV2luZG93SCBo YW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zaG93TWluaW1pemVkKFFXaW5kb3dIIGhh bmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3Nob3dNYXhpbWl6ZWQoUVdpbmRvd0ggaGFu ZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2hvd0Z1bGxTY3JlZW4oUVdpbmRvd0ggaGFu ZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2hvd05vcm1hbChRV2luZG93SCBoYW5kbGUp OwotK0NfRVhQT1JUIGJvb2wgUVdpbmRvd19jbG9zZShRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQ T1JUIHZvaWQgUVdpbmRvd19yYWlzZShRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQg UVdpbmRvd19sb3dlcihRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19z ZXRUaXRsZShRV2luZG93SCBoYW5kbGUsIFBXaWRlU3RyaW5nIEFub25QYXJhbTEpOwotK0NfRVhQ T1JUIHZvaWQgUVdpbmRvd19zZXRYKFFXaW5kb3dIIGhhbmRsZSwgaW50IGFyZ3gpOwotK0NfRVhQ T1JUIHZvaWQgUVdpbmRvd19zZXRZKFFXaW5kb3dIIGhhbmRsZSwgaW50IGFyZ3kpOwotK0NfRVhQ T1JUIHZvaWQgUVdpbmRvd19zZXRXaWR0aChRV2luZG93SCBoYW5kbGUsIGludCBhcmd3KTsKLStD X0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0SGVpZ2h0KFFXaW5kb3dIIGhhbmRsZSwgaW50IGFyZ2gp OwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRNaW5pbXVtV2lkdGgoUVdpbmRvd0ggaGFuZGxl LCBpbnQgdyk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldE1pbmltdW1IZWlnaHQoUVdpbmRv d0ggaGFuZGxlLCBpbnQgaCk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldE1heGltdW1XaWR0 aChRV2luZG93SCBoYW5kbGUsIGludCB3KTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0TWF4 aW11bUhlaWdodChRV2luZG93SCBoYW5kbGUsIGludCBoKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5k b3dfYWxlcnQoUVdpbmRvd0ggaGFuZGxlLCBpbnQgbXNlYyk7Ci0rQ19FWFBPUlQgdm9pZCBRV2lu ZG93X3JlcXVlc3RVcGRhdGUoUVdpbmRvd0ggaGFuZGxlKTsKLSsKLSsjZW5kaWYKLUluZGV4OiBz cmMvcXdpbmRvd19ob29rX2MuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9z cmMvcXdpbmRvd19ob29rX2MuY3BwCi1AQCAtMCwwICsxLDExMiBAQAotKy8vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAxNyBieSDFvWVsamFuIFJpa2FsbwotKy8v Ci0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0YWlscyBhYm91 dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0rLy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaW5jbHVkZSAicXdpbmRvd19ob29rX2MuaCIKLSsK LStRV2luZG93X2hvb2tIIFFXaW5kb3dfaG9va19DcmVhdGUoUU9iamVjdEggaGFuZGxlKQotK3sK LSsJcmV0dXJuIChRV2luZG93X2hvb2tIKSBuZXcgUVdpbmRvd19ob29rKChRT2JqZWN0KiloYW5k bGUpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9va19EZXN0cm95KFFXaW5kb3dfaG9va0ggaGFu ZGxlKQotK3sKLSsJZGVsZXRlIChRV2luZG93X2hvb2sgKiloYW5kbGU7Ci0rfQotKwotK3ZvaWQg UVdpbmRvd19ob29rX2hvb2tfc2NyZWVuQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhv b2tIIGhvb2spCi0rewotKwkoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfc2NyZWVuQ2hh bmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va19tb2RhbGl0eUNoYW5n ZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVdpbmRvd19o b29rICopaGFuZGxlKS0+aG9va19tb2RhbGl0eUNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQg UVdpbmRvd19ob29rX2hvb2tfd2luZG93U3RhdGVDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxl LCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfd2lu ZG93U3RhdGVDaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9va19ob29rX3dp bmRvd1RpdGxlQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewot KyAgKChRV2luZG93X2hvb2sgKiloYW5kbGUpLT5ob29rX3dpbmRvd1RpdGxlQ2hhbmdlZChob29r KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va194Q2hhbmdlZChRV2luZG93X2hvb2tI IGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRV2luZG93X2hvb2sgKiloYW5kbGUpLT5o b29rX3hDaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9va19ob29rX3lDaGFu Z2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFXaW5kb3df aG9vayAqKWhhbmRsZSktPmhvb2tfeUNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVdpbmRv d19ob29rX2hvb2tfd2lkdGhDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9v aykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfd2lkdGhDaGFuZ2VkKGhv b2spOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9va19ob29rX2hlaWdodENoYW5nZWQoUVdpbmRv d19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVdpbmRvd19ob29rICopaGFu ZGxlKS0+aG9va19oZWlnaHRDaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9v a19ob29rX21pbmltdW1XaWR0aENoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBo b29rKQotK3sKLSsgICgoUVdpbmRvd19ob29rICopaGFuZGxlKS0+aG9va19taW5pbXVtV2lkdGhD aGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9va19ob29rX21pbmltdW1IZWln aHRDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFX aW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfbWluaW11bUhlaWdodENoYW5nZWQoaG9vayk7Ci0r fQotKwotK3ZvaWQgUVdpbmRvd19ob29rX2hvb2tfbWF4aW11bVdpZHRoQ2hhbmdlZChRV2luZG93 X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRV2luZG93X2hvb2sgKiloYW5k bGUpLT5ob29rX21heGltdW1XaWR0aENoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVdpbmRv d19ob29rX2hvb2tfbWF4aW11bUhlaWdodENoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFI b29rSCBob29rKQotK3sKLSsgICgoUVdpbmRvd19ob29rICopaGFuZGxlKS0+aG9va19tYXhpbXVt SGVpZ2h0Q2hhbmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va192aXNp YmxlQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChR V2luZG93X2hvb2sgKiloYW5kbGUpLT5ob29rX3Zpc2libGVDaGFuZ2VkKGhvb2spOwotK30KLSsK LSt2b2lkIFFXaW5kb3dfaG9va19ob29rX3Zpc2liaWxpdHlDaGFuZ2VkKFFXaW5kb3dfaG9va0gg aGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhv b2tfdmlzaWJpbGl0eUNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19ob29rX2hv b2tfYWN0aXZlQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewot KyAgKChRV2luZG93X2hvb2sgKiloYW5kbGUpLT5ob29rX2FjdGl2ZUNoYW5nZWQoaG9vayk7Ci0r fQotKwotK3ZvaWQgUVdpbmRvd19ob29rX2hvb2tfY29udGVudE9yaWVudGF0aW9uQ2hhbmdlZChR V2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRV2luZG93X2hvb2sg KiloYW5kbGUpLT5ob29rX2NvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWQoaG9vayk7Ci0rfQotKwot K3ZvaWQgUVdpbmRvd19ob29rX2hvb2tfZm9jdXNPYmplY3RDaGFuZ2VkKFFXaW5kb3dfaG9va0gg aGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhv b2tfZm9jdXNPYmplY3RDaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9va19o b29rX29wYWNpdHlDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7 Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfb3BhY2l0eUNoYW5nZWQoaG9vayk7 Ci0rfQotSW5kZXg6IHNyYy9xd2luZG93X2hvb2tfYy5oCi09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9u dWxsCi0rKysgYi9zcmMvcXdpbmRvd19ob29rX2MuaAotQEAgLTAsMCArMSwzOCBAQAotKy8vKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAxNyBieSDFvWVsamFuIFJp a2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0 YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot Ky8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu Ci0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaWZuZGVmIFFXSU5ET1dfSE9PS19D X0gKLSsjZGVmaW5lIFFXSU5ET1dfSE9PS19DX0gKLSsKLSsjaW5jbHVkZSAicXdpbmRvd19ob29r LmgiCi0rCi0rQ19FWFBPUlQgUVdpbmRvd19ob29rSCBRV2luZG93X2hvb2tfQ3JlYXRlKFFPYmpl Y3RIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfRGVzdHJveShRV2luZG93 X2hvb2tIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9va19zY3JlZW5D aGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9p ZCBRV2luZG93X2hvb2tfaG9va19tb2RhbGl0eUNoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUs IFFIb29rSCBob29rKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfaG9va19ob29rX3dpbmRvd1N0 YXRlQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JU IHZvaWQgUVdpbmRvd19ob29rX2hvb2tfd2luZG93VGl0bGVDaGFuZ2VkKFFXaW5kb3dfaG9va0gg aGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9va194 Q2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZv aWQgUVdpbmRvd19ob29rX2hvb2tfeUNoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29r SCBob29rKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfaG9va19ob29rX3dpZHRoQ2hhbmdlZChR V2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRv d19ob29rX2hvb2tfaGVpZ2h0Q2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhv b2spOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19ob29rX2hvb2tfbWluaW11bVdpZHRoQ2hhbmdl ZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQgUVdp bmRvd19ob29rX2hvb2tfbWluaW11bUhlaWdodENoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUs IFFIb29rSCBob29rKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfaG9va19ob29rX21heGltdW1X aWR0aENoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VYUE9S VCB2b2lkIFFXaW5kb3dfaG9va19ob29rX21heGltdW1IZWlnaHRDaGFuZ2VkKFFXaW5kb3dfaG9v a0ggaGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9v a192aXNpYmxlQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0Nf RVhQT1JUIHZvaWQgUVdpbmRvd19ob29rX2hvb2tfdmlzaWJpbGl0eUNoYW5nZWQoUVdpbmRvd19o b29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfaG9va19o b29rX2FjdGl2ZUNoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStD X0VYUE9SVCB2b2lkIFFXaW5kb3dfaG9va19ob29rX2NvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWQo UVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5k b3dfaG9va19ob29rX2ZvY3VzT2JqZWN0Q2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhv b2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19ob29rX2hvb2tfb3BhY2l0eUNoYW5n ZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLSsKLSsjZW5kaWYKLUluZGV4 OiBzcmMvcXdpbmRvd19ob29rLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3Ny Yy9xd2luZG93X2hvb2suaAotQEAgLTAsMCArMSwzNDEgQEAKLSsvLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsvLwotKy8v ICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJvdXQgdGhl IGNvcHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCi0rCi0rCi0rI2lmbmRlZiBRV0lORE9XX0hPT0tfSAotKyNkZWZpbmUgUVdJ TkRPV19IT09LX0gKLSsKLSsjaW5jbHVkZSA8cXdpbmRvdy5oPgotKwotKyNpbmNsdWRlICJxb2Jq ZWN0X2hvb2suaCIKLSsKLStjbGFzcyBRV2luZG93X2hvb2sgOiBwdWJsaWMgUU9iamVjdF9ob29r IHsKLSsgIFFfT0JKRUNUCi0rICBwdWJsaWM6Ci0rICAgIFFXaW5kb3dfaG9vayhRT2JqZWN0ICpo YW5kbGUpIDogUU9iamVjdF9ob29rKGhhbmRsZSkgewotKyAgICAgIHNjcmVlbkNoYW5nZWRfZXZl bnQuZnVuYyA9IE5VTEw7OwotKyAgICAgIG1vZGFsaXR5Q2hhbmdlZF9ldmVudC5mdW5jID0gTlVM TDs7Ci0rICAgICAgd2luZG93U3RhdGVDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAg ICB3aW5kb3dUaXRsZUNoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7OwotKyAgICAgIHhDaGFuZ2Vk X2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICB5Q2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDs7 Ci0rICAgICAgd2lkdGhDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICBoZWlnaHRD aGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICBtaW5pbXVtV2lkdGhDaGFuZ2VkX2V2 ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICBtaW5pbXVtSGVpZ2h0Q2hhbmdlZF9ldmVudC5mdW5j ID0gTlVMTDs7Ci0rICAgICAgbWF4aW11bVdpZHRoQ2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDs7 Ci0rICAgICAgbWF4aW11bUhlaWdodENoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7OwotKyAgICAg IHZpc2libGVDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICB2aXNpYmlsaXR5Q2hh bmdlZF9ldmVudC5mdW5jID0gTlVMTDs7Ci0rICAgICAgYWN0aXZlQ2hhbmdlZF9ldmVudC5mdW5j ID0gTlVMTDs7Ci0rICAgICAgY29udGVudE9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5mdW5jID0g TlVMTDs7Ci0rICAgICAgZm9jdXNPYmplY3RDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsg ICAgICBvcGFjaXR5Q2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDs7Ci0rCi0rICAgIH0KLSsKLSsg ICAgdm9pZCBob29rX3NjcmVlbkNoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFz Y3JlZW5DaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05B TChzY3JlZW5DaGFuZ2VkKFFTY3JlZW4qKSksIHRoaXMsIFNMT1Qoc2NyZWVuQ2hhbmdlZF9ob29r KFFTY3JlZW4qKSkpOwotKyAgICAgIHNjcmVlbkNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAg IGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHNj cmVlbkNoYW5nZWQoUVNjcmVlbiopKSwgdGhpcywgU0xPVChzY3JlZW5DaGFuZ2VkX2hvb2soUVNj cmVlbiopKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX21vZGFsaXR5Q2hhbmdlZChRSG9v ayAmaG9vaykgewotKyAgICAgIGlmICggIW1vZGFsaXR5Q2hhbmdlZF9ldmVudC5mdW5jICkKLSsg ICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwobW9kYWxpdHlDaGFuZ2VkKFF0OjpXaW5kb3dN b2RhbGl0eSkpLCB0aGlzLCBTTE9UKG1vZGFsaXR5Q2hhbmdlZF9ob29rKFF0OjpXaW5kb3dNb2Rh bGl0eSkpKTsKLSsgICAgICBtb2RhbGl0eUNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlm ICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKG1vZGFs aXR5Q2hhbmdlZChRdDo6V2luZG93TW9kYWxpdHkpKSwgdGhpcywgU0xPVChtb2RhbGl0eUNoYW5n ZWRfaG9vayhRdDo6V2luZG93TW9kYWxpdHkpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29r X3dpbmRvd1N0YXRlQ2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAgIGlmICggIXdpbmRvd1N0 YXRlQ2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwo d2luZG93U3RhdGVDaGFuZ2VkKFF0OjpXaW5kb3dTdGF0ZSkpLCB0aGlzLCBTTE9UKHdpbmRvd1N0 YXRlQ2hhbmdlZF9ob29rKFF0OjpXaW5kb3dTdGF0ZSkpKTsKLSsgICAgICB3aW5kb3dTdGF0ZUNo YW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBk aXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHdpbmRvd1N0YXRlQ2hhbmdlZChRdDo6V2luZG93U3Rh dGUpKSwgdGhpcywgU0xPVCh3aW5kb3dTdGF0ZUNoYW5nZWRfaG9vayhRdDo6V2luZG93U3RhdGUp KSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3dpbmRvd1RpdGxlQ2hhbmdlZChRSG9vayAm aG9vaykgewotKyAgICAgIGlmICggIXdpbmRvd1RpdGxlQ2hhbmdlZF9ldmVudC5mdW5jICkKLSsg ICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwod2luZG93VGl0bGVDaGFuZ2VkKGNvbnN0IFFT dHJpbmcmKSksIHRoaXMsIFNMT1Qod2luZG93VGl0bGVDaGFuZ2VkX2hvb2soY29uc3QgUVN0cmlu ZyYpKSk7Ci0rICAgICAgd2luZG93VGl0bGVDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAgICBp ZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTCh3aW5k b3dUaXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyYpKSwgdGhpcywgU0xPVCh3aW5kb3dUaXRsZUNo YW5nZWRfaG9vayhjb25zdCBRU3RyaW5nJikpKTsKLSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tf eENoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICF4Q2hhbmdlZF9ldmVudC5mdW5j ICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwoeENoYW5nZWQoaW50KSksIHRoaXMs IFNMT1QoeENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgICAgeENoYW5nZWRfZXZlbnQgPSBob29r OwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwg U0lHTkFMKHhDaGFuZ2VkKGludCkpLCB0aGlzLCBTTE9UKHhDaGFuZ2VkX2hvb2soaW50KSkpOwot KyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va195Q2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAg IGlmICggIXlDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJ R05BTCh5Q2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVCh5Q2hhbmdlZF9ob29rKGludCkpKTsKLSsg ICAgICB5Q2hhbmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsg ICAgICAgIGRpc2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwoeUNoYW5nZWQoaW50KSksIHRoaXMsIFNM T1QoeUNoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3dpZHRo Q2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAgIGlmICggIXdpZHRoQ2hhbmdlZF9ldmVudC5m dW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwod2lkdGhDaGFuZ2VkKGludCkp LCB0aGlzLCBTTE9UKHdpZHRoQ2hhbmdlZF9ob29rKGludCkpKTsKLSsgICAgICB3aWR0aENoYW5n ZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNj b25uZWN0KGhhbmRsZSwgU0lHTkFMKHdpZHRoQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVCh3aWR0 aENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX2hlaWdodENo YW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFoZWlnaHRDaGFuZ2VkX2V2ZW50LmZ1 bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTChoZWlnaHRDaGFuZ2VkKGludCkp LCB0aGlzLCBTTE9UKGhlaWdodENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgICAgaGVpZ2h0Q2hh bmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRp c2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwoaGVpZ2h0Q2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVCho ZWlnaHRDaGFuZ2VkX2hvb2soaW50KSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va19taW5p bXVtV2lkdGhDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhbWluaW11bVdpZHRo Q2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwobWlu aW11bVdpZHRoQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVChtaW5pbXVtV2lkdGhDaGFuZ2VkX2hv b2soaW50KSkpOwotKyAgICAgIG1pbmltdW1XaWR0aENoYW5nZWRfZXZlbnQgPSBob29rOwotKyAg ICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFM KG1pbmltdW1XaWR0aENoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QobWluaW11bVdpZHRoQ2hhbmdl ZF9ob29rKGludCkpKTsKLSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tfbWluaW11bUhlaWdodENo YW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFtaW5pbXVtSGVpZ2h0Q2hhbmdlZF9l dmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwobWluaW11bUhlaWdo dENoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QobWluaW11bUhlaWdodENoYW5nZWRfaG9vayhpbnQp KSk7Ci0rICAgICAgbWluaW11bUhlaWdodENoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlm ICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKG1pbmlt dW1IZWlnaHRDaGFuZ2VkKGludCkpLCB0aGlzLCBTTE9UKG1pbmltdW1IZWlnaHRDaGFuZ2VkX2hv b2soaW50KSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va19tYXhpbXVtV2lkdGhDaGFuZ2Vk KFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhbWF4aW11bVdpZHRoQ2hhbmdlZF9ldmVudC5m dW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwobWF4aW11bVdpZHRoQ2hhbmdl ZChpbnQpKSwgdGhpcywgU0xPVChtYXhpbXVtV2lkdGhDaGFuZ2VkX2hvb2soaW50KSkpOwotKyAg ICAgIG1heGltdW1XaWR0aENoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2su ZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKG1heGltdW1XaWR0aENo YW5nZWQoaW50KSksIHRoaXMsIFNMT1QobWF4aW11bVdpZHRoQ2hhbmdlZF9ob29rKGludCkpKTsK LSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tfbWF4aW11bUhlaWdodENoYW5nZWQoUUhvb2sgJmhv b2spIHsKLSsgICAgICBpZiAoICFtYXhpbXVtSGVpZ2h0Q2hhbmdlZF9ldmVudC5mdW5jICkKLSsg ICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwobWF4aW11bUhlaWdodENoYW5nZWQoaW50KSks IHRoaXMsIFNMT1QobWF4aW11bUhlaWdodENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgICAgbWF4 aW11bUhlaWdodENoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyAp Ci0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKG1heGltdW1IZWlnaHRDaGFuZ2Vk KGludCkpLCB0aGlzLCBTTE9UKG1heGltdW1IZWlnaHRDaGFuZ2VkX2hvb2soaW50KSkpOwotKyAg ICB9Ci0rCi0rICAgIHZvaWQgaG9va192aXNpYmxlQ2hhbmdlZChRSG9vayAmaG9vaykgewotKyAg ICAgIGlmICggIXZpc2libGVDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdCho YW5kbGUsIFNJR05BTCh2aXNpYmxlQ2hhbmdlZChib29sKSksIHRoaXMsIFNMT1QodmlzaWJsZUNo YW5nZWRfaG9vayhib29sKSkpOwotKyAgICAgIHZpc2libGVDaGFuZ2VkX2V2ZW50ID0gaG9vazsK LSsgICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJ R05BTCh2aXNpYmxlQ2hhbmdlZChib29sKSksIHRoaXMsIFNMT1QodmlzaWJsZUNoYW5nZWRfaG9v ayhib29sKSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va192aXNpYmlsaXR5Q2hhbmdlZChR SG9vayAmaG9vaykgewotKyAgICAgIGlmICggIXZpc2liaWxpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMg KQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTCh2aXNpYmlsaXR5Q2hhbmdlZChRV2lu ZG93OjpWaXNpYmlsaXR5KSksIHRoaXMsIFNMT1QodmlzaWJpbGl0eUNoYW5nZWRfaG9vayhRV2lu ZG93OjpWaXNpYmlsaXR5KSkpOwotKyAgICAgIHZpc2liaWxpdHlDaGFuZ2VkX2V2ZW50ID0gaG9v azsKLSsgICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUs IFNJR05BTCh2aXNpYmlsaXR5Q2hhbmdlZChRV2luZG93OjpWaXNpYmlsaXR5KSksIHRoaXMsIFNM T1QodmlzaWJpbGl0eUNoYW5nZWRfaG9vayhRV2luZG93OjpWaXNpYmlsaXR5KSkpOwotKyAgICB9 Ci0rCi0rICAgIHZvaWQgaG9va19hY3RpdmVDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAg aWYgKCAhYWN0aXZlQ2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxl LCBTSUdOQUwoYWN0aXZlQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChhY3RpdmVDaGFuZ2VkX2hvb2so KSkpOwotKyAgICAgIGFjdGl2ZUNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhv b2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKGFjdGl2ZUNoYW5n ZWQoKSksIHRoaXMsIFNMT1QoYWN0aXZlQ2hhbmdlZF9ob29rKCkpKTsKLSsgICAgfQotKwotKyAg ICB2b2lkIGhvb2tfY29udGVudE9yaWVudGF0aW9uQ2hhbmdlZChRSG9vayAmaG9vaykgewotKyAg ICAgIGlmICggIWNvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWRfZXZlbnQuZnVuYyApCi0rICAgICAg ICBjb25uZWN0KGhhbmRsZSwgU0lHTkFMKGNvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWQoUXQ6OlNj cmVlbk9yaWVudGF0aW9uKSksIHRoaXMsIFNMT1QoY29udGVudE9yaWVudGF0aW9uQ2hhbmdlZF9o b29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbikpKTsKLSsgICAgICBjb250ZW50T3JpZW50YXRpb25D aGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAg ZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTChjb250ZW50T3JpZW50YXRpb25DaGFuZ2VkKFF0OjpT Y3JlZW5PcmllbnRhdGlvbikpLCB0aGlzLCBTTE9UKGNvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWRf aG9vayhRdDo6U2NyZWVuT3JpZW50YXRpb24pKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29r X2ZvY3VzT2JqZWN0Q2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAgIGlmICggIWZvY3VzT2Jq ZWN0Q2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwo Zm9jdXNPYmplY3RDaGFuZ2VkKFFPYmplY3QqKSksIHRoaXMsIFNMT1QoZm9jdXNPYmplY3RDaGFu Z2VkX2hvb2soUU9iamVjdCopKSk7Ci0rICAgICAgZm9jdXNPYmplY3RDaGFuZ2VkX2V2ZW50ID0g aG9vazsKLSsgICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5k bGUsIFNJR05BTChmb2N1c09iamVjdENoYW5nZWQoUU9iamVjdCopKSwgdGhpcywgU0xPVChmb2N1 c09iamVjdENoYW5nZWRfaG9vayhRT2JqZWN0KikpKTsKLSsgICAgfQotKwotKyAgICB2b2lkIGhv b2tfb3BhY2l0eUNoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFvcGFjaXR5Q2hh bmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwob3BhY2l0 eUNoYW5nZWQocXJlYWwpKSwgdGhpcywgU0xPVChvcGFjaXR5Q2hhbmdlZF9ob29rKHFyZWFsKSkp OwotKyAgICAgIG9wYWNpdHlDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAgICBpZiAoICFob29r LmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTChvcGFjaXR5Q2hhbmdl ZChxcmVhbCkpLCB0aGlzLCBTTE9UKG9wYWNpdHlDaGFuZ2VkX2hvb2socXJlYWwpKSk7Ci0rICAg IH0KLSsKLSsgIHByaXZhdGUgc2xvdHM6Ci0rICAgIHZvaWQgc2NyZWVuQ2hhbmdlZF9ob29rKFFT Y3JlZW4qIHNjcmVlbikgewotKyAgICAgIGlmICggc2NyZWVuQ2hhbmdlZF9ldmVudC5mdW5jICkg ewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBRU2NyZWVu SCBzY3JlZW4pOwotKwkoKihmdW5jX3R5cGUpc2NyZWVuQ2hhbmdlZF9ldmVudC5mdW5jKShzY3Jl ZW5DaGFuZ2VkX2V2ZW50LmRhdGEsIChRU2NyZWVuSClzY3JlZW4pOwotKyAgICAgIH0KLSsgICAg fQotKwotKyAgICB2b2lkIG1vZGFsaXR5Q2hhbmdlZF9ob29rKFF0OjpXaW5kb3dNb2RhbGl0eSBt b2RhbGl0eSkgewotKyAgICAgIGlmICggbW9kYWxpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0r ICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIFF0OjpXaW5kb3dN b2RhbGl0eSBtb2RhbGl0eSk7Ci0rCSgqKGZ1bmNfdHlwZSltb2RhbGl0eUNoYW5nZWRfZXZlbnQu ZnVuYykobW9kYWxpdHlDaGFuZ2VkX2V2ZW50LmRhdGEsIG1vZGFsaXR5KTsKLSsgICAgICB9Ci0r ICAgIH0KLSsKLSsgICAgdm9pZCB3aW5kb3dTdGF0ZUNoYW5nZWRfaG9vayhRdDo6V2luZG93U3Rh dGUgd2luZG93U3RhdGUpIHsKLSsgICAgICBpZiAoIHdpbmRvd1N0YXRlQ2hhbmdlZF9ldmVudC5m dW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBR dDo6V2luZG93U3RhdGUgd2luZG93U3RhdGUpOwotKwkoKihmdW5jX3R5cGUpd2luZG93U3RhdGVD aGFuZ2VkX2V2ZW50LmZ1bmMpKHdpbmRvd1N0YXRlQ2hhbmdlZF9ldmVudC5kYXRhLCB3aW5kb3dT dGF0ZSk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgd2luZG93VGl0bGVDaGFuZ2Vk X2hvb2soY29uc3QgUVN0cmluZyYgdGl0bGUpIHsKLSsgICAgICBpZiAoIHdpbmRvd1RpdGxlQ2hh bmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2 b2lkICpkYXRhLCBQV2lkZVN0cmluZyB0aXRsZSk7Ci0rCVBXaWRlU3RyaW5nIHRfdGl0bGU7Ci0r CWluaXRpYWxpemVQV2lkZVN0cmluZyh0X3RpdGxlKTsKLSsJY29weVFTdHJpbmdUb1BXaWRlU3Ry aW5nKHRpdGxlLCB0X3RpdGxlKTsKLSsJKCooZnVuY190eXBlKXdpbmRvd1RpdGxlQ2hhbmdlZF9l dmVudC5mdW5jKSh3aW5kb3dUaXRsZUNoYW5nZWRfZXZlbnQuZGF0YSwgdF90aXRsZSk7Ci0rCWZp bmFsaXplUFdpZGVTdHJpbmcodF90aXRsZSk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZv aWQgeENoYW5nZWRfaG9vayhpbnQgYXJnKSB7Ci0rICAgICAgaWYgKCB4Q2hhbmdlZF9ldmVudC5m dW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBp bnQgYXJnKTsKLSsJKCooZnVuY190eXBlKXhDaGFuZ2VkX2V2ZW50LmZ1bmMpKHhDaGFuZ2VkX2V2 ZW50LmRhdGEsIGFyZyk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgeUNoYW5nZWRf aG9vayhpbnQgYXJnKSB7Ci0rICAgICAgaWYgKCB5Q2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAg ICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBpbnQgYXJnKTsKLSsJ KCooZnVuY190eXBlKXlDaGFuZ2VkX2V2ZW50LmZ1bmMpKHlDaGFuZ2VkX2V2ZW50LmRhdGEsIGFy Zyk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgd2lkdGhDaGFuZ2VkX2hvb2soaW50 IGFyZykgewotKyAgICAgIGlmICggd2lkdGhDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAg ICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIGludCBhcmcpOwotKwkoKihm dW5jX3R5cGUpd2lkdGhDaGFuZ2VkX2V2ZW50LmZ1bmMpKHdpZHRoQ2hhbmdlZF9ldmVudC5kYXRh LCBhcmcpOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIGhlaWdodENoYW5nZWRfaG9v ayhpbnQgYXJnKSB7Ci0rICAgICAgaWYgKCBoZWlnaHRDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0r ICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIGludCBhcmcpOwot KwkoKihmdW5jX3R5cGUpaGVpZ2h0Q2hhbmdlZF9ldmVudC5mdW5jKShoZWlnaHRDaGFuZ2VkX2V2 ZW50LmRhdGEsIGFyZyk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgbWluaW11bVdp ZHRoQ2hhbmdlZF9ob29rKGludCBhcmcpIHsKLSsgICAgICBpZiAoIG1pbmltdW1XaWR0aENoYW5n ZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9p ZCAqZGF0YSwgaW50IGFyZyk7Ci0rCSgqKGZ1bmNfdHlwZSltaW5pbXVtV2lkdGhDaGFuZ2VkX2V2 ZW50LmZ1bmMpKG1pbmltdW1XaWR0aENoYW5nZWRfZXZlbnQuZGF0YSwgYXJnKTsKLSsgICAgICB9 Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBtaW5pbXVtSGVpZ2h0Q2hhbmdlZF9ob29rKGludCBhcmcp IHsKLSsgICAgICBpZiAoIG1pbmltdW1IZWlnaHRDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAg ICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIGludCBhcmcpOwotKwko KihmdW5jX3R5cGUpbWluaW11bUhlaWdodENoYW5nZWRfZXZlbnQuZnVuYykobWluaW11bUhlaWdo dENoYW5nZWRfZXZlbnQuZGF0YSwgYXJnKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9p ZCBtYXhpbXVtV2lkdGhDaGFuZ2VkX2hvb2soaW50IGFyZykgewotKyAgICAgIGlmICggbWF4aW11 bVdpZHRoQ2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVu Y190eXBlKSh2b2lkICpkYXRhLCBpbnQgYXJnKTsKLSsJKCooZnVuY190eXBlKW1heGltdW1XaWR0 aENoYW5nZWRfZXZlbnQuZnVuYykobWF4aW11bVdpZHRoQ2hhbmdlZF9ldmVudC5kYXRhLCBhcmcp OwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIG1heGltdW1IZWlnaHRDaGFuZ2VkX2hv b2soaW50IGFyZykgewotKyAgICAgIGlmICggbWF4aW11bUhlaWdodENoYW5nZWRfZXZlbnQuZnVu YyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0YSwgaW50 IGFyZyk7Ci0rCSgqKGZ1bmNfdHlwZSltYXhpbXVtSGVpZ2h0Q2hhbmdlZF9ldmVudC5mdW5jKSht YXhpbXVtSGVpZ2h0Q2hhbmdlZF9ldmVudC5kYXRhLCBhcmcpOwotKyAgICAgIH0KLSsgICAgfQot KwotKyAgICB2b2lkIHZpc2libGVDaGFuZ2VkX2hvb2soYm9vbCBhcmcpIHsKLSsgICAgICBpZiAo IHZpc2libGVDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpm dW5jX3R5cGUpKHZvaWQgKmRhdGEsIGJvb2wgYXJnKTsKLSsJKCooZnVuY190eXBlKXZpc2libGVD aGFuZ2VkX2V2ZW50LmZ1bmMpKHZpc2libGVDaGFuZ2VkX2V2ZW50LmRhdGEsIGFyZyk7Ci0rICAg ICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWRfaG9vayhRV2luZG93 OjpWaXNpYmlsaXR5IHZpc2liaWxpdHkpIHsKLSsgICAgICBpZiAoIHZpc2liaWxpdHlDaGFuZ2Vk X2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQg KmRhdGEsIFFXaW5kb3c6OlZpc2liaWxpdHkgdmlzaWJpbGl0eSk7Ci0rCSgqKGZ1bmNfdHlwZSl2 aXNpYmlsaXR5Q2hhbmdlZF9ldmVudC5mdW5jKSh2aXNpYmlsaXR5Q2hhbmdlZF9ldmVudC5kYXRh LCB2aXNpYmlsaXR5KTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBhY3RpdmVDaGFu Z2VkX2hvb2soKSB7Ci0rICAgICAgaWYgKCBhY3RpdmVDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0r ICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEpOwotKwkoKihmdW5j X3R5cGUpYWN0aXZlQ2hhbmdlZF9ldmVudC5mdW5jKShhY3RpdmVDaGFuZ2VkX2V2ZW50LmRhdGEp OwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIGNvbnRlbnRPcmllbnRhdGlvbkNoYW5n ZWRfaG9vayhRdDo6U2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsKLSsgICAgICBpZiAo IGNvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVk ZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0YSwgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIG9y aWVudGF0aW9uKTsKLSsJKCooZnVuY190eXBlKWNvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWRfZXZl bnQuZnVuYykoY29udGVudE9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5kYXRhLCBvcmllbnRhdGlv bik7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgZm9jdXNPYmplY3RDaGFuZ2VkX2hv b2soUU9iamVjdCogb2JqZWN0KSB7Ci0rICAgICAgaWYgKCBmb2N1c09iamVjdENoYW5nZWRfZXZl bnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0 YSwgUU9iamVjdEggb2JqZWN0KTsKLSsJKCooZnVuY190eXBlKWZvY3VzT2JqZWN0Q2hhbmdlZF9l dmVudC5mdW5jKShmb2N1c09iamVjdENoYW5nZWRfZXZlbnQuZGF0YSwgKFFPYmplY3RIKW9iamVj dCk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgb3BhY2l0eUNoYW5nZWRfaG9vayhx cmVhbCBvcGFjaXR5KSB7Ci0rICAgICAgaWYgKCBvcGFjaXR5Q2hhbmdlZF9ldmVudC5mdW5jICkg ewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBxcmVhbCBv cGFjaXR5KTsKLSsJKCooZnVuY190eXBlKW9wYWNpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMpKG9wYWNp dHlDaGFuZ2VkX2V2ZW50LmRhdGEsIG9wYWNpdHkpOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAg cHJpdmF0ZToKLSsgICAgUUhvb2sgc2NyZWVuQ2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgbW9k YWxpdHlDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayB3aW5kb3dTdGF0ZUNoYW5nZWRfZXZlbnQ7 Ci0rICAgIFFIb29rIHdpbmRvd1RpdGxlQ2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgeENoYW5n ZWRfZXZlbnQ7Ci0rICAgIFFIb29rIHlDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayB3aWR0aENo YW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIGhlaWdodENoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29r IG1pbmltdW1XaWR0aENoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIG1pbmltdW1IZWlnaHRDaGFu Z2VkX2V2ZW50OwotKyAgICBRSG9vayBtYXhpbXVtV2lkdGhDaGFuZ2VkX2V2ZW50OwotKyAgICBR SG9vayBtYXhpbXVtSGVpZ2h0Q2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgdmlzaWJsZUNoYW5n ZWRfZXZlbnQ7Ci0rICAgIFFIb29rIHZpc2liaWxpdHlDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9v ayBhY3RpdmVDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayBjb250ZW50T3JpZW50YXRpb25DaGFu Z2VkX2V2ZW50OwotKyAgICBRSG9vayBmb2N1c09iamVjdENoYW5nZWRfZXZlbnQ7Ci0rICAgIFFI b29rIG9wYWNpdHlDaGFuZ2VkX2V2ZW50OwotK307Ci0rCi0rCi0rI2VuZGlmCi1JbmRleDogcXQ1 LnBhcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0tIGEvcXQ1LnBhcwotKysrIGIvcXQ1LnBhcwotQEAgLTc4LDEx ICs3OCw3IEBAIHR5cGUKLSAgIFF0SGFuZGxlID0gTG9uZ1dvcmQ7Ci0gICB7JEVORElGfQotICAg UFFSZWFsID0gXlFSZWFsOwotLSAgeyRpZmRlZiBDUFVBUk19Ci0tICAgIFFSZWFsID0gc2luZ2xl OwotLSAgeyRlbHNlfQotLSAgICBRUmVhbCA9IGRvdWJsZTsKLS0gIHskZW5kaWZ9Ci0rICBRUmVh bCA9IGRvdWJsZTsKLSAKLSAgIFBRUmdiID0gXlFSZ2I7Ci0gICBRUmdiID0gbG9uZ3dvcmQ7Ci1J bmRleDogc3JjL3FwYWludGRldmljZV9jLmNwcAotPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGEvc3JjL3FwYWlu dGRldmljZV9jLmNwcAotKysrIGIvc3JjL3FwYWludGRldmljZV9jLmNwcAotQEAgLTcxLDYgKzcx LDEyIEBAIGludCBRUGFpbnREZXZpY2VfZGV2aWNlUGl4ZWxSYXRpbyhRUGFpbnQKLSAJcmV0dXJu IChpbnQpICgoUVBhaW50RGV2aWNlICopaGFuZGxlKS0+ZGV2aWNlUGl4ZWxSYXRpbygpOwotIH0K LSAKLStxcmVhbCBRUGFpbnREZXZpY2VfZGV2aWNlUGl4ZWxSYXRpb0YoUVBhaW50RGV2aWNlSCBo YW5kbGUpCi0rewotKwlyZXR1cm4gKHFyZWFsKSAoKFFQYWludERldmljZSAqKWhhbmRsZSktPmRl dmljZVBpeGVsUmF0aW9GKCk7Ci0rfQotKwotKwotIGludCBRUGFpbnREZXZpY2VfY29sb3JDb3Vu dChRUGFpbnREZXZpY2VIIGhhbmRsZSkKLSB7Ci0gCXJldHVybiAoaW50KSAoKFFQYWludERldmlj ZSAqKWhhbmRsZSktPmNvbG9yQ291bnQoKTsKLUluZGV4OiBzcmMvcXBhaW50ZGV2aWNlX2MuaAot PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0tIGEvc3JjL3FwYWludGRldmljZV9jLmgKLSsrKyBiL3NyYy9xcGFpbnRk ZXZpY2VfYy5oCi1AQCAtMjcsNiArMjcsNyBAQCBDX0VYUE9SVCBpbnQgUVBhaW50RGV2aWNlX2xv Z2ljYWxEcGlZKFFQCi0gQ19FWFBPUlQgaW50IFFQYWludERldmljZV9waHlzaWNhbERwaVgoUVBh aW50RGV2aWNlSCBoYW5kbGUpOwotIENfRVhQT1JUIGludCBRUGFpbnREZXZpY2VfcGh5c2ljYWxE cGlZKFFQYWludERldmljZUggaGFuZGxlKTsKLSBDX0VYUE9SVCBpbnQgUVBhaW50RGV2aWNlX2Rl dmljZVBpeGVsUmF0aW8oUVBhaW50RGV2aWNlSCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFsIFFQ YWludERldmljZV9kZXZpY2VQaXhlbFJhdGlvRihRUGFpbnREZXZpY2VIIGhhbmRsZSk7Ci0gQ19F WFBPUlQgaW50IFFQYWludERldmljZV9jb2xvckNvdW50KFFQYWludERldmljZUggaGFuZGxlKTsK LSBDX0VYUE9SVCBpbnQgUVBhaW50RGV2aWNlX2RlcHRoKFFQYWludERldmljZUggaGFuZGxlKTsK LSAKLUluZGV4OiBzcmMvcXBsYWludGV4dGVkaXRfYy5jcHAKLT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL3Ny Yy9xcGxhaW50ZXh0ZWRpdF9jLmNwcAotKysrIGIvc3JjL3FwbGFpbnRleHRlZGl0X2MuY3BwCi1A QCAtMzU1LDYgKzM1NSwyMSBAQCB2b2lkIFFQbGFpblRleHRFZGl0X3pvb21PdXQoUVBsYWluVGV4 dEVkCi0gCSgoUVBsYWluVGV4dEVkaXQgKiloYW5kbGUpLT56b29tT3V0KHJhbmdlKTsKLSB9Ci0g Ci0rdm9pZCBRUGxhaW5UZXh0RWRpdF9wbGFjZWhvbGRlclRleHQoUVBsYWluVGV4dEVkaXRIIGhh bmRsZSwgUFdpZGVTdHJpbmcgcmV0dmFsKQotK3sKLSsJUVN0cmluZyB0X3JldHZhbDsKLSsJdF9y ZXR2YWwgPSAoKFFQbGFpblRleHRFZGl0ICopaGFuZGxlKS0+cGxhY2Vob2xkZXJUZXh0KCk7Ci0r CWNvcHlRU3RyaW5nVG9QV2lkZVN0cmluZyh0X3JldHZhbCwgcmV0dmFsKTsKLSt9Ci0rCi0rdm9p ZCBRUGxhaW5UZXh0RWRpdF9zZXRQbGFjZWhvbGRlclRleHQoUVBsYWluVGV4dEVkaXRIIGhhbmRs ZSwgUFdpZGVTdHJpbmcgdGV4dCkKLSt7Ci0rCVFTdHJpbmcgdF90ZXh0OwotKwljb3B5UFdpZGVT dHJpbmdUb1FTdHJpbmcodGV4dCwgdF90ZXh0KTsKLSsJKChRUGxhaW5UZXh0RWRpdCAqKWhhbmRs ZSktPnNldFBsYWNlaG9sZGVyVGV4dCh0X3RleHQpOwotK30KLSsKLSsKLSBRUGxhaW5UZXh0RG9j dW1lbnRMYXlvdXRIIFFQbGFpblRleHREb2N1bWVudExheW91dF9DcmVhdGUoUVRleHREb2N1bWVu dEggZG9jdW1lbnQpCi0gewotIAlyZXR1cm4gKFFQbGFpblRleHREb2N1bWVudExheW91dEgpIG5l dyBRUGxhaW5UZXh0RG9jdW1lbnRMYXlvdXQoKFFUZXh0RG9jdW1lbnQqKWRvY3VtZW50KTsKLUlu ZGV4OiBzcmMvcXBsYWludGV4dGVkaXRfYy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYS9zcmMvcXBsYWlu dGV4dGVkaXRfYy5oCi0rKysgYi9zcmMvcXBsYWludGV4dGVkaXRfYy5oCi1AQCAtNzksNiArNzks OSBAQCBDX0VYUE9SVCB2b2lkIFFQbGFpblRleHRFZGl0X2FwcGVuZEh0bWwoCi0gQ19FWFBPUlQg dm9pZCBRUGxhaW5UZXh0RWRpdF9jZW50ZXJDdXJzb3IoUVBsYWluVGV4dEVkaXRIIGhhbmRsZSk7 Ci0gQ19FWFBPUlQgdm9pZCBRUGxhaW5UZXh0RWRpdF96b29tSW4oUVBsYWluVGV4dEVkaXRIIGhh bmRsZSwgaW50IHJhbmdlKTsKLSBDX0VYUE9SVCB2b2lkIFFQbGFpblRleHRFZGl0X3pvb21PdXQo UVBsYWluVGV4dEVkaXRIIGhhbmRsZSwgaW50IHJhbmdlKTsKLStDX0VYUE9SVCB2b2lkIFFQbGFp blRleHRFZGl0X3BsYWNlaG9sZGVyVGV4dChRUGxhaW5UZXh0RWRpdEggaGFuZGxlLCBQV2lkZVN0 cmluZyByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVBsYWluVGV4dEVkaXRfc2V0UGxhY2Vob2xk ZXJUZXh0KFFQbGFpblRleHRFZGl0SCBoYW5kbGUsIFBXaWRlU3RyaW5nIHRleHQpOwotKwotIENf RVhQT1JUIFFQbGFpblRleHREb2N1bWVudExheW91dEggUVBsYWluVGV4dERvY3VtZW50TGF5b3V0 X0NyZWF0ZShRVGV4dERvY3VtZW50SCBkb2N1bWVudCk7Ci0gQ19FWFBPUlQgdm9pZCBRUGxhaW5U ZXh0RG9jdW1lbnRMYXlvdXRfRGVzdHJveShRUGxhaW5UZXh0RG9jdW1lbnRMYXlvdXRIIGhhbmRs ZSk7Ci0gQ19FWFBPUlQgaW50IFFQbGFpblRleHREb2N1bWVudExheW91dF9oaXRUZXN0KFFQbGFp blRleHREb2N1bWVudExheW91dEggaGFuZGxlLCBjb25zdCBRUG9pbnRGSCBBbm9uUGFyYW0xLCBR dDo6SGl0VGVzdEFjY3VyYWN5IEFub25QYXJhbTIpOwotSW5kZXg6IHNyYy9xcHJpbnRlcmluZm9f Yy5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tLSBhL3NyYy9xcHJpbnRlcmluZm9fYy5jcHAKLSsrKyBiL3Ny Yy9xcHJpbnRlcmluZm9fYy5jcHAKLUBAIC04Myw2ICs4MywxMSBAQCB2b2lkIFFQcmludGVySW5m b19hdmFpbGFibGVQcmludGVycyhQUHRyCi0gCWNvcHlRTGlzdFRlbXBsYXRlVG9QdHJJbnRBcnJh eVdpdGhOZXcodF9yZXR2YWwsIHJldHZhbCk7Ci0gfQotIAotK3ZvaWQgUVByaW50ZXJJbmZvX2F2 YWlsYWJsZVByaW50ZXJOYW1lcyhRU3RyaW5nTGlzdEggcmV0dmFsKQotK3sKLSsgICooUVN0cmlu Z0xpc3QgKilyZXR2YWwgPSBRUHJpbnRlckluZm86OmF2YWlsYWJsZVByaW50ZXJOYW1lcygpOwot K30KLSsKLSB2b2lkIFFQcmludGVySW5mb19kZWZhdWx0UHJpbnRlcihRUHJpbnRlckluZm9IIHJl dHZhbCkKLSB7Ci0gCSooUVByaW50ZXJJbmZvICopcmV0dmFsID0gUVByaW50ZXJJbmZvOjpkZWZh dWx0UHJpbnRlcigpOwotSW5kZXg6IHNyYy9xcHJpbnRlcmluZm9fYy5oCi09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LS0gYS9zcmMvcXByaW50ZXJpbmZvX2MuaAotKysrIGIvc3JjL3FwcmludGVyaW5mb19jLmgKLUBA IC0yNyw2ICsyNyw3IEBAIENfRVhQT1JUIGJvb2wgUVByaW50ZXJJbmZvX2lzTnVsbChRUHJpbnQK LSBDX0VYUE9SVCBib29sIFFQcmludGVySW5mb19pc0RlZmF1bHQoUVByaW50ZXJJbmZvSCBoYW5k bGUpOwotIENfRVhQT1JUIHZvaWQgUVByaW50ZXJJbmZvX3N1cHBvcnRlZFBhcGVyU2l6ZXMoUVBy aW50ZXJJbmZvSCBoYW5kbGUsIFBQdHJJbnRBcnJheSByZXR2YWwpOwotIENfRVhQT1JUIHZvaWQg UVByaW50ZXJJbmZvX2F2YWlsYWJsZVByaW50ZXJzKFBQdHJJbnRBcnJheSByZXR2YWwpOwotK0Nf RVhQT1JUIHZvaWQgUVByaW50ZXJJbmZvX2F2YWlsYWJsZVByaW50ZXJOYW1lcyhRU3RyaW5nTGlz dEggcmV0dmFsKTsKLSBDX0VYUE9SVCB2b2lkIFFQcmludGVySW5mb19kZWZhdWx0UHJpbnRlcihR UHJpbnRlckluZm9IIHJldHZhbCk7Ci0gQ19FWFBPUlQgdm9pZCBRUHJpbnRlckluZm9fcHJpbnRl ckluZm8oUVByaW50ZXJJbmZvSCByZXR2YWwsIFBXaWRlU3RyaW5nIHByaW50ZXJOYW1lKTsKLSAK LUluZGV4OiBzcmMvcXRleHRlZGl0X2MuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYS9zcmMvcXRleHRl ZGl0X2MuY3BwCi0rKysgYi9zcmMvcXRleHRlZGl0X2MuY3BwCi1AQCAtNDcyLDMgKzQ3MiwxNyBA QCB2b2lkIFFUZXh0RWRpdF96b29tT3V0KFFUZXh0RWRpdEggaGFuZGxlCi0gCSgoUVRleHRFZGl0 ICopaGFuZGxlKS0+em9vbU91dChyYW5nZSk7Ci0gfQotIAotK3ZvaWQgUVRleHRFZGl0X3BsYWNl aG9sZGVyVGV4dChRVGV4dEVkaXRIIGhhbmRsZSwgUFdpZGVTdHJpbmcgcmV0dmFsKQotK3sKLSsJ UVN0cmluZyB0X3JldHZhbDsKLSsJdF9yZXR2YWwgPSAoKFFUZXh0RWRpdCAqKWhhbmRsZSktPnBs YWNlaG9sZGVyVGV4dCgpOwotKwljb3B5UVN0cmluZ1RvUFdpZGVTdHJpbmcodF9yZXR2YWwsIHJl dHZhbCk7Ci0rfQotKwotK3ZvaWQgUVRleHRFZGl0X3NldFBsYWNlaG9sZGVyVGV4dChRVGV4dEVk aXRIIGhhbmRsZSwgUFdpZGVTdHJpbmcgdGV4dCkKLSt7Ci0rCVFTdHJpbmcgdF90ZXh0OwotKwlj b3B5UFdpZGVTdHJpbmdUb1FTdHJpbmcodGV4dCwgdF90ZXh0KTsKLSsJKChRVGV4dEVkaXQgKilo YW5kbGUpLT5zZXRQbGFjZWhvbGRlclRleHQodF90ZXh0KTsKLSt9Ci0rCi1JbmRleDogc3JjL3F0 ZXh0ZWRpdF9jLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL3NyYy9xdGV4dGVkaXRfYy5oCi0rKysgYi9z cmMvcXRleHRlZGl0X2MuaAotQEAgLTEwMCw1ICsxMDAsNyBAQCBDX0VYUE9SVCB2b2lkIFFUZXh0 RWRpdF9hcHBlbmQoUVRleHRFZGl0Ci0gQ19FWFBPUlQgdm9pZCBRVGV4dEVkaXRfc2Nyb2xsVG9B bmNob3IoUVRleHRFZGl0SCBoYW5kbGUsIFBXaWRlU3RyaW5nIG5hbWUpOwotIENfRVhQT1JUIHZv aWQgUVRleHRFZGl0X3pvb21JbihRVGV4dEVkaXRIIGhhbmRsZSwgaW50IHJhbmdlKTsKLSBDX0VY UE9SVCB2b2lkIFFUZXh0RWRpdF96b29tT3V0KFFUZXh0RWRpdEggaGFuZGxlLCBpbnQgcmFuZ2Up OwotK0NfRVhQT1JUIHZvaWQgUVRleHRFZGl0X3BsYWNlaG9sZGVyVGV4dChRVGV4dEVkaXRIIGhh bmRsZSwgUFdpZGVTdHJpbmcgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFUZXh0RWRpdF9zZXRQ bGFjZWhvbGRlclRleHQoUVRleHRFZGl0SCBoYW5kbGUsIFBXaWRlU3RyaW5nIHRleHQpOwotIAot ICNlbmRpZgoKRnJvbSA2OWY4NWQzMDlkYTA0MTdmM2FlNzgzN2QxNmM0ZDU2OTRlMjYwYzMyIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBkMzN2bGl0ZXIgPGlhbmR1cHV5MTk5OEBnbWFp bC5jb20+CkRhdGU6IFR1ZSwgMjcgRGVjIDIwMjIgMjE6MzM6NDIgLTA1MDAKU3ViamVjdDogW1BB VENIIDIvMl0gVXBkYXRlIHRlbXBsYXRlCgotLS0KIHNyY3BrZ3MvcXQ1cGFzL3RlbXBsYXRlIHwg MTQgKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9xdDVwYXMvdGVtcGxhdGUgYi9zcmNwa2dz L3F0NXBhcy90ZW1wbGF0ZQppbmRleCA5MzExM2M3MTcwMzUuLjJjOTVkODY1YWNkMiAxMDA2NDQK LS0tIGEvc3JjcGtncy9xdDVwYXMvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9xdDVwYXMvdGVtcGxh dGUKQEAgLTEsMTcgKzEsMTcgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ3F0NXBhcycKIHBrZ25h bWU9cXQ1cGFzCi12ZXJzaW9uPTIuNn5iZXRhCit2ZXJzaW9uPTIuMi4wCiByZXZpc2lvbj0yCi13 cmtzcmM9Y2JpbmRpbmdzCiBidWlsZF9zdHlsZT1xbWFrZQotaG9zdG1ha2VkZXBlbmRzPSJxdDUt cW1ha2UgcXQ1LWhvc3QtdG9vbHMiCitob3N0bWFrZWRlcGVuZHM9InF0NS1xbWFrZSBxdDUtaG9z dC10b29scyBiaW51dGlscyIKIG1ha2VkZXBlbmRzPSJxdDUtZGV2ZWwgcXQ1LXgxMWV4dHJhcy1k ZXZlbCIKIHNob3J0X2Rlc2M9IlF0NSBpbnRlcmZhY2UgYmluZGluZ3MgZm9yIFBhc2NhbCIKLW1h aW50YWluZXI9Ik9ycGhhbmVkIDxvcnBoYW5Adm9pZGxpbnV4Lm9yZz4iCittYWludGFpbmVyPSJk MzN2bGl0ZXIgPGQzM3ZsaXRlckBwcm90b25tYWlsLmNvbT4iCiBsaWNlbnNlPSJMR1BMLTMuMC1v ci1sYXRlciIKLWhvbWVwYWdlPSJodHRwczovL3N2bi5mcmVlcGFzY2FsLm9yZy9zdm4vbGF6YXJ1 cy90cnVuay9sY2wvaW50ZXJmYWNlcy9xdDUvY2JpbmRpbmdzIgotZGlzdGZpbGVzPSIke0RFQklB Tl9TSVRFfS9tYWluL2xpYnEvbGlicXRwYXMvbGlicXRwYXNfJHt2ZXJzaW9ufS5vcmlnLnRhci54 eiIKLWNoZWNrc3VtPWZjYzVmNjk1ZDYwZDVmNzJiZjUwMWIyZmE3NzllOGExYTI2MzZjOGQ5OTEy NzBiNWIzZmVmM2QwZTk5MDM2NWMKK2hvbWVwYWdlPSJodHRwczovL2dpdGxhYi5jb20vZnJlZXBh c2NhbC5vcmcvbGF6YXJ1cy9sYXphcnVzLy0vdHJlZS9tYWluL2xjbC9pbnRlcmZhY2VzL3F0NS9j YmluZGluZ3MiCitkaXN0ZmlsZXM9Imh0dHA6Ly9kZWIuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9t YWluL2xpYnEvbGlicXRwYXMvbGlicXRwYXNfMi42KyR7dmVyc2lvbn0rZGZzZzEub3JpZy50YXIu eHoiCitjaGVja3N1bT04ZTBiZjUwMzBlMzc4ZjhjYzc0ZWY0NmJhZWExOGFmYTgzOWVkNDljYzY0 ZjI0YmNkNGY4ZjllYjZhNDU0NWQ1CisKIAogcG9zdF9pbnN0YWxsKCkgewogCXZpbnN0YWxsIHF0 NS5wYXMgMDY0NCB1c3Ivc2hhcmUvcGFzY2FsL3F0NQo= --===============3967216065382665776==--