From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29662 invoked by alias); 5 Jul 2011 00:14:32 -0000 Received: (qmail 29640 invoked by uid 22791); 5 Jul 2011 00:14:31 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_IB,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-yi0-f47.google.com (HELO mail-yi0-f47.google.com) (209.85.218.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 05 Jul 2011 00:14:18 +0000 Received: by yib18 with SMTP id 18so2498616yib.20 for ; Mon, 04 Jul 2011 17:14:17 -0700 (PDT) MIME-Version: 1.0 Received: by 10.150.253.19 with SMTP id a19mr5541614ybi.73.1309824857145; Mon, 04 Jul 2011 17:14:17 -0700 (PDT) Received: by 10.147.178.7 with HTTP; Mon, 4 Jul 2011 17:14:17 -0700 (PDT) Date: Tue, 05 Jul 2011 00:14:00 -0000 Message-ID: Subject: libjava patches for RTEMS From: Jie Liu To: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org, java@gcc.gnu.org Cc: Joel Sherrill Content-Type: multipart/mixed; boundary=000e0cd2429854017204a7475df9 X-IsSubscribed: yes Mailing-List: contact java-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-owner@gcc.gnu.org X-SW-Source: 2011-07/txt/msg00000.txt.bz2 --000e0cd2429854017204a7475df9 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 352 Hi, GCJ is available on RTEMS/pc386. Here is the libjava testsuite result on RTEMS/pc386: === libjava Summary === # of expected passes 2249 # of unexpected failures 94 # of untested testcases 66 As the testsuite result is good enough, I think it's time to get the patch reviewed and merged into gcc. The patch is attached. :) Best Regards, Jie --000e0cd2429854017204a7475df9 Content-Type: application/octet-stream; name="libjava.patch" Content-Disposition: attachment; filename="libjava.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gpq3gaak0 Content-length: 47654 SW5kZXg6IE1ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IE1ha2VmaWxlLmluCShyZXZpc2lvbiAxNzIyMjQpCisrKyBNYWtlZmlsZS5p bgkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogQFVTSU5HX0RB UldJTl9DUlRfVFJVRUBhbV9fYXBwZW5kXzE1ID0gZGFyd2luLmNjCiBAVVNJ TkdfUE9TSVhfVEhSRUFEU19UUlVFQGFtX19hcHBlbmRfMTYgPSBwb3NpeC10 aHJlYWRzLmNjCiBAVVNJTkdfV0lOMzJfVEhSRUFEU19UUlVFQGFtX19hcHBl bmRfMTcgPSB3aW4zMi10aHJlYWRzLmNjCitAVVNJTkdfUlRFTVNfVEhSRUFE U19UUlVFQGFtX19hcHBlbmRfcnRlbXMgPSBydGVtcy10aHJlYWRzLmNjCiBA VVNJTkdfTk9fVEhSRUFEU19UUlVFQGFtX19hcHBlbmRfMTggPSBuby10aHJl YWRzLmNjCiBAQlVJTERfU1VCTElCU19UUlVFQGFtX19hcHBlbmRfMTkgPSBs aWJnY2otbm9uY29yZS5sYQogQEJVSUxEX1NVQkxJQlNfVFJVRUBhbV9fYXBw ZW5kXzIwID0gbGliZ2NqLW5vbmNvcmUubGEKQEAgLTM4OSwxMiArMzkwLDE0 IEBACiBAVVNJTkdfREFSV0lOX0NSVF9UUlVFQGFtX19vYmplY3RzXzEwID0g ZGFyd2luLmxvCiBAVVNJTkdfUE9TSVhfVEhSRUFEU19UUlVFQGFtX19vYmpl Y3RzXzExID0gcG9zaXgtdGhyZWFkcy5sbwogQFVTSU5HX1dJTjMyX1RIUkVB RFNfVFJVRUBhbV9fb2JqZWN0c18xMiA9IHdpbjMyLXRocmVhZHMubG8KK0BV U0lOR19SVEVNU19USFJFQURTX1RSVUVAYW1fX29iamVjdHNfcnRlbXMgPSBy dGVtcy10aHJlYWRzLmxvCiBAVVNJTkdfTk9fVEhSRUFEU19UUlVFQGFtX19v YmplY3RzXzEzID0gbm8tdGhyZWFkcy5sbwogYW1fbGliZ2NqX2xhX09CSkVD VFMgPSBwcmltcy5sbyBqbmkubG8gZXhjZXB0aW9uLmxvIHN0YWNrdHJhY2Uu bG8gXAogCWxpbmsubG8gZGVmaW5lY2xhc3MubG8gdmVyaWZ5LmxvICQoYW1f X29iamVjdHNfMikgXAogCSQoYW1fX29iamVjdHNfNSkgJChhbV9fb2JqZWN0 c182KSAkKGFtX19vYmplY3RzXzcpIFwKIAkkKGFtX19vYmplY3RzXzgpICQo YW1fX29iamVjdHNfOSkgJChhbV9fb2JqZWN0c18xMCkgXAotCSQoYW1fX29i amVjdHNfMTEpICQoYW1fX29iamVjdHNfMTIpICQoYW1fX29iamVjdHNfMTMp CisJJChhbV9fb2JqZWN0c18xMSkgJChhbV9fb2JqZWN0c18xMikgJChhbV9f b2JqZWN0c18xMykgXAorICAgICAgICAkKGFtX29iamVjdHNfcnRlbXMpCiBs aWJnY2pfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ2NqX2xhX09CSkVDVFMpCiBs aWJnY2pfYmNfbGFfTElCQUREID0KIGFtX2xpYmdjal9iY19sYV9PQkpFQ1RT ID0gbGliZ2NqX2JjLmxvCkBAIC0xMDU2LDcgKzEwNTksOCBAQAogCWRlZmlu ZWNsYXNzLmNjIHZlcmlmeS5jYyAkKGxpYmdjal9pbnRlcnByZXRfc291cmNl X2ZpbGVzKSBcCiAJJChuYXRfc291cmNlX2ZpbGVzKSAkKGFtX19hcHBlbmRf MTEpICQoYW1fX2FwcGVuZF8xMikgXAogCSQoYW1fX2FwcGVuZF8xMykgJChh bV9fYXBwZW5kXzE0KSAkKGFtX19hcHBlbmRfMTUpIFwKLQkkKGFtX19hcHBl bmRfMTYpICQoYW1fX2FwcGVuZF8xNykgJChhbV9fYXBwZW5kXzE4KQorCSQo YW1fX2FwcGVuZF8xNikgJChhbV9fYXBwZW5kXzE3KSAkKGFtX19hcHBlbmRf MTgpIFwKKyAgICAgICAgJChhbV9hcHBlbmRfcnRlbXMpCiBAVVNJTkdfREFS V0lOX0NSVF9GQUxTRUBMSUJKQVZBX0xERkxBR1NfTElCTUFUSCA9IC1sbQog QFVTSU5HX0RBUldJTl9DUlRfVFJVRUBMSUJKQVZBX0xERkxBR1NfTElCTUFU SCA9IAogbmF0X2ZpbGVzID0gJChuYXRfc291cmNlX2ZpbGVzOi5jYz0ubG8p CkluZGV4OiBydGVtcy10aHJlYWRzLmNjCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHJ0ZW1zLXRocmVhZHMuY2MJKHJldmlzaW9uIDApCisrKyBydGVt cy10aHJlYWRzLmNjCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczNSBAQAor Ly8gcnRlbXMtdGhyZWFkcy5jYyAtIGludGVyZmFjZSBiZXR3ZWVuIGxpYmph dmEgYW5kIFBPU0lYIHRocmVhZHMuCisvL2J5IGxqODE3NSAyMDExMDYyOQor LyogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0 LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgbGliZ2NqLgorCitUaGlzIHNvZnR3YXJlIGlzIGNv cHlyaWdodGVkIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZQorTGliZ2NqIExpY2Vuc2UuICBQbGVhc2UgY29uc3VsdCB0aGUgZmlsZSAi TElCR0NKX0xJQ0VOU0UiIGZvcgorZGV0YWlscy4gICovCisKKy8vIFRPIERP OgorLy8gKiBEb2N1bWVudCBzaWduYWwgaGFuZGxpbmcgbGltaXRhdGlvbnMK KworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAicG9zaXguaCIK KyNpbmNsdWRlICJydGVtcy10aHJlYWRzLmgiCisKKy8vIElmIHdlJ3JlIHVz aW5nIHRoZSBCb2VobSBHQywgdGhlbiB3ZSBuZWVkIHRvIG92ZXJyaWRlIHNv bWUgb2YgdGhlCisvLyB0aHJlYWQgcHJpbWl0aXZlcy4gIFRoaXMgaXMgZmFp cmx5IGdyb3NzLgorI2lmZGVmIEhBVkVfQk9FSE1fR0MKKyNpbmNsdWRlIDxn Yy5oPgorI2VuZGlmIC8qIEhBVkVfQk9FSE1fR0MgKi8KKworI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzaWdu YWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5o PgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4J Ly8gVG8gdGVzdCBmb3IgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVM SU5HCisjZW5kaWYKKworI2luY2x1ZGUgPGdjai9jbmkuaD4KKyNpbmNsdWRl IDxqdm0uaD4KKyNpbmNsdWRlIDxqYXZhL2xhbmcvVGhyZWFkLmg+CisjaW5j bHVkZSA8amF2YS9sYW5nL1N5c3RlbS5oPgorI2luY2x1ZGUgPGphdmEvbGFu Zy9Mb25nLmg+CisjaW5jbHVkZSA8amF2YS9sYW5nL091dE9mTWVtb3J5RXJy b3IuaD4KKyNpbmNsdWRlIDxqYXZhL2xhbmcvSW50ZXJuYWxFcnJvci5oPgor CisvLyBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRocmVhZCBzdGFydHVw Lgorc3RydWN0IHN0YXJ0ZXIKK3sKKyAgX0p2X1RocmVhZFN0YXJ0RnVuYyAq bWV0aG9kOworICBfSnZfVGhyZWFkX3QgKmRhdGE7Cit9OworCisvLyBUaGlz IGlzIHRoZSBrZXkgdXNlZCB0byBtYXAgZnJvbSB0aGUgUE9TSVggdGhyZWFk IHZhbHVlIGJhY2sgdG8gdGhlCisvLyBKYXZhIG9iamVjdCByZXByZXNlbnRp bmcgdGhlIHRocmVhZC4gIFRoZSBrZXkgaXMgZ2xvYmFsIHRvIGFsbAorLy8g dGhyZWFkcywgc28gaXQgaXMgb2sgdG8gbWFrZSBpdCBhIGdsb2JhbCBoZXJl LgorcHRocmVhZF9rZXlfdCBfSnZfVGhyZWFkS2V5OworCisvLyBUaGlzIGlz IHRoZSBrZXkgdXNlZCB0byBtYXAgZnJvbSB0aGUgUE9TSVggdGhyZWFkIHZh bHVlIGJhY2sgdG8gdGhlCisvLyBfSnZfVGhyZWFkX3QqIHJlcHJlc2VudGlu ZyB0aGUgdGhyZWFkLgorcHRocmVhZF9rZXlfdCBfSnZfVGhyZWFkRGF0YUtl eTsKKworLy8gV2Uga2VlcCBhIGNvdW50IG9mIGFsbCBub24tZGFlbW9uIHRo cmVhZHMgd2hpY2ggYXJlIHJ1bm5pbmcuICBXaGVuCisvLyB0aGlzIHJlYWNo ZXMgemVybywgX0p2X1RocmVhZFdhaXQgcmV0dXJucy4KK3N0YXRpYyBwdGhy ZWFkX211dGV4X3QgZGFlbW9uX211dGV4Oworc3RhdGljIHB0aHJlYWRfY29u ZF90IGRhZW1vbl9jb25kOworc3RhdGljIGludCBub25fZGFlbW9uX2NvdW50 OworCisvLyBUaGUgc2lnbmFsIHRvIHVzZSB3aGVuIGludGVycnVwdGluZyBh IHRocmVhZC4KKyNpZiBkZWZpbmVkKExJTlVYX1RIUkVBRFMpIHx8IGRlZmlu ZWQoRlJFRUJTRF9USFJFQURTKQorICAvLyBMaW51eFRocmVhZHMgKHByaW9y IHRvIGdsaWJjIDIuMSkgdXN1cnBzIGJvdGggU0lHVVNSMSBhbmQgU0lHVVNS Mi4KKyAgLy8gR0Mgb24gRnJlZUJTRCB1c2VzIGJvdGggU0lHVVNSMSBhbmQg U0lHVVNSMi4KKyMgIGRlZmluZSBJTlRSIFNJR0hVUAorI2Vsc2UgLyogTElO VVhfVEhSRUFEUyAqLworIyAgZGVmaW5lIElOVFIgU0lHVVNSMgorI2VuZGlm IC8qIExJTlVYX1RIUkVBRFMgKi8KKworLy8KKy8vIFRoZXNlIGFyZSB0aGUg ZmxhZ3MgdGhhdCBjYW4gYXBwZWFyIGluIF9Kdl9UaHJlYWRfdC4KKy8vCisK Ky8vIFRocmVhZCBzdGFydGVkLgorI2RlZmluZSBGTEFHX1NUQVJUICAgMHgw MQorLy8gVGhyZWFkIGlzIGRhZW1vbi4KKyNkZWZpbmUgRkxBR19EQUVNT04g IDB4MDIKKworDAorCitpbnQKK19Kdl9NdXRleExvY2sgKF9Kdl9NdXRleF90 ICptdSkKK3sKKyAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYgKCk7 CisgIGlmIChtdS0+b3duZXIgPT0gc2VsZikKKyAgICB7CisgICAgICBtdS0+ Y291bnQrKzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBKdlNldFRo cmVhZFN0YXRlIGhvbGRlciAoX0p2X1RocmVhZEN1cnJlbnQoKSwgSlZfQkxP Q0tFRCk7CisJCisjICAgICBpZmRlZiBMT0NLX0RFQlVHCisJaW50IHJlc3Vs dCA9IHB0aHJlYWRfbXV0ZXhfbG9jayAoJm11LT5tdXRleCk7CisJaWYgKDAg IT0gcmVzdWx0KQorCSAgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIlB0aHJl YWRfbXV0ZXhfbG9jayByZXR1cm5lZCAlZFxuIiwgcmVzdWx0KTsKKwkgICAg Zm9yICg7Oykge30KKwkgIH0KKyMgICAgIGVsc2UKKyAgICAgICAgcHRocmVh ZF9tdXRleF9sb2NrICgmbXUtPm11dGV4KTsKKyMgICAgIGVuZGlmCisgICAg ICBtdS0+Y291bnQgPSAxOworICAgICAgbXUtPm93bmVyID0gc2VsZjsKKyAg ICB9CisgIHJldHVybiAwOworfQorCisvLyBXYWl0IGZvciB0aGUgY29uZGl0 aW9uIHZhcmlhYmxlICJDViIgdG8gYmUgbm90aWZpZWQuIAorLy8gUmV0dXJu IHZhbHVlczoKKy8vIDA6IHRoZSBjb25kaXRpb24gd2FzIG5vdGlmaWVkLCBv ciB0aGUgdGltZW91dCBleHBpcmVkLgorLy8gX0pWX05PVF9PV05FUjogdGhl IHRocmVhZCBkb2VzIG5vdCBvd24gdGhlIG11dGV4ICJNVSIuICAgCisvLyBf SlZfSU5URVJSVVBURUQ6IHRoZSB0aHJlYWQgd2FzIGludGVycnVwdGVkLiBJ dHMgaW50ZXJydXB0ZWQgZmxhZyBpcyBzZXQuICAgCitpbnQKK19Kdl9Db25k V2FpdCAoX0p2X0NvbmRpdGlvblZhcmlhYmxlX3QgKmN2LCBfSnZfTXV0ZXhf dCAqbXUsCisJICAgICAgamxvbmcgbWlsbGlzLCBqaW50IG5hbm9zKQorewor ICBwdGhyZWFkX3Qgc2VsZiA9IHB0aHJlYWRfc2VsZigpOworICBpZiAobXUt Pm93bmVyICE9IHNlbGYpCisgICAgcmV0dXJuIF9KVl9OT1RfT1dORVI7CisK KyAgc3RydWN0IHRpbWVzcGVjIHRzOworCisgIEp2VGhyZWFkU3RhdGUgbmV3 X3N0YXRlID0gSlZfV0FJVElORzsKKyAgaWYgKG1pbGxpcyA+IDAgfHwgbmFu b3MgPiAwKQorICAgIHsKKyAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzdGlt ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0aW1lb3V0LgorICAgICAgdW5zaWdu ZWQgbG9uZyBsb25nIHNlY29uZHM7CisgICAgICB1bnNpZ25lZCBsb25nIHVz ZWM7CisKKyAgICAgIC8vIEZvciBiZXR0ZXIgYWNjdXJhY3ksIHNob3VsZCB1 c2UgcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jaworICAgICAgLy8gYW5kIGNs b2NrX2dldHRpbWUuCisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyAgICAg IHRpbWV2YWwgdHY7CisgICAgICBnZXR0aW1lb2ZkYXkgKCZ0diwgTlVMTCk7 CisgICAgICB1c2VjID0gdHYudHZfdXNlYzsKKyAgICAgIHNlY29uZHMgPSB0 di50dl9zZWM7CisjZWxzZQorICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0 YXJ0VGltZSA9IGphdmE6Omxhbmc6OlN5c3RlbTo6Y3VycmVudFRpbWVNaWxs aXMoKTsKKyAgICAgIHNlY29uZHMgPSBzdGFydFRpbWUgLyAxMDAwOworICAg ICAgLyogQXNzdW1lIHdlJ3JlIGFib3V0IGhhbGYtd2F5IHRocm91Z2ggdGhp cyBtaWxsaXNlY29uZC4gICovCisgICAgICB1c2VjID0gKHN0YXJ0VGltZSAl IDEwMDApICogMTAwMCArIDUwMDsKKyNlbmRpZgorICAgICAgLyogVGhlc2Ug bmV4dCB0d28gc3RhdGVtZW50cyBjYW5ub3Qgb3ZlcmZsb3cuICAqLworICAg ICAgdXNlYyArPSBuYW5vcyAvIDEwMDA7CisgICAgICB1c2VjICs9IChtaWxs aXMgJSAxMDAwKSAqIDEwMDA7CisgICAgICAvKiBUaGVzZSB0d28gc3RhdGVt ZW50cyBjb3VsZCBvdmVyZmxvdyBvbmx5IGlmIHR2LnR2X3NlYyB3YXMKKwkg aW5zYW5lbHkgbGFyZ2UuICAqLworICAgICAgc2Vjb25kcyArPSBtaWxsaXMg LyAxMDAwOworICAgICAgc2Vjb25kcyArPSB1c2VjIC8gMTAwMDAwMDsKKwor ICAgICAgdHMudHZfc2VjID0gc2Vjb25kczsKKyAgICAgIGlmICh0cy50dl9z ZWMgPCAwIHx8ICh1bnNpZ25lZCBsb25nIGxvbmcpdHMudHZfc2VjICE9IHNl Y29uZHMpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSB0cmVhdCBhIHRp bWVvdXQgdGhhdCB3b24ndCBmaXQgaW50byBhIHN0cnVjdCB0aW1lc3BlYwor ICAgICAgICAgIC8vIGFzIGEgd2FpdCBmb3JldmVyLgorICAgICAgICAgIG1p bGxpcyA9IG5hbm9zID0gMDsKKyAgICAgICAgfQorICAgICAgZWxzZQorCS8q IFRoaXMgbmV4dCBzdGF0ZW1lbnQgYWxzbyBjYW5ub3Qgb3ZlcmZsb3cuICAq LworCXRzLnR2X25zZWMgPSAodXNlYyAlIDEwMDAwMDApICogMTAwMCArIChu YW5vcyAlIDEwMDApOworICAgIH0KKworICBfSnZfVGhyZWFkX3QgKmN1cnJl bnQgPSBfSnZfVGhyZWFkQ3VycmVudERhdGEgKCk7CisgIGphdmE6Omxhbmc6 OlRocmVhZCAqY3VycmVudF9vYmogPSBfSnZfVGhyZWFkQ3VycmVudCAoKTsK KworICBwdGhyZWFkX211dGV4X2xvY2sgKCZjdXJyZW50LT53YWl0X211dGV4 KTsKKworICAvLyBOb3cgdGhhdCB3ZSBob2xkIHRoZSB3YWl0IG11dGV4LCBj aGVjayBpZiB0aGlzIHRocmVhZCBoYXMgYmVlbiAKKyAgLy8gaW50ZXJydXB0 ZWQgYWxyZWFkeS4KKyAgaWYgKGN1cnJlbnRfb2JqLT5pbnRlcnJ1cHRfZmxh ZykKKyAgICB7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAoJmN1cnJl bnQtPndhaXRfbXV0ZXgpOworICAgICAgcmV0dXJuIF9KVl9JTlRFUlJVUFRF RDsKKyAgICB9CisKKyAgLy8gU2V0IHRoZSB0aHJlYWQncyBzdGF0ZS4KKyAg SnZTZXRUaHJlYWRTdGF0ZSBob2xkZXIgKGN1cnJlbnRfb2JqLCBuZXdfc3Rh dGUpOworCisgIC8vIEFkZCB0aGlzIHRocmVhZCB0byB0aGUgY3YncyB3YWl0 IHNldC4KKyAgY3VycmVudC0+bmV4dCA9IE5VTEw7CisKKyAgaWYgKGN2LT5m aXJzdCA9PSBOVUxMKQorICAgIGN2LT5maXJzdCA9IGN1cnJlbnQ7CisgIGVs c2UKKyAgICBmb3IgKF9Kdl9UaHJlYWRfdCAqdCA9IGN2LT5maXJzdDs7IHQg PSB0LT5uZXh0KQorICAgICAgeworICAgICAgICBpZiAodC0+bmV4dCA9PSBO VUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHQtPm5leHQgPSBjdXJy ZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAg fQorCisgIC8vIFJlY29yZCB0aGUgY3VycmVudCBsb2NrIGRlcHRoLCBzbyBp dCBjYW4gYmUgcmVzdG9yZWQgd2hlbiB3ZSByZS1hcXVpcmUgaXQuCisgIGlu dCBjb3VudCA9IG11LT5jb3VudDsKKworICAvLyBSZWxlYXNlIHRoZSBtb25p dG9yIG11dGV4LgorICBtdS0+Y291bnQgPSAwOworICBtdS0+b3duZXIgPSAw OworICBwdGhyZWFkX211dGV4X3VubG9jayAoJm11LT5tdXRleCk7CisgIAor ICBpbnQgciA9IDA7CisgIGJvb2wgZG9uZV9zbGVlcGluZyA9IGZhbHNlOwor CisgIHdoaWxlICghIGRvbmVfc2xlZXBpbmcpCisgICAgeworICAgICAgaWYg KG1pbGxpcyA9PSAwICYmIG5hbm9zID09IDApCisJciA9IHB0aHJlYWRfY29u ZF93YWl0ICgmY3VycmVudC0+d2FpdF9jb25kLCAmY3VycmVudC0+d2FpdF9t dXRleCk7CisgICAgICBlbHNlCisJciA9IHB0aHJlYWRfY29uZF90aW1lZHdh aXQgKCZjdXJyZW50LT53YWl0X2NvbmQsICZjdXJyZW50LT53YWl0X211dGV4 LCAKKwkJCQkgICAgJnRzKTsKKworICAgICAgLy8gSW4gb2xkZXIgZ2xpYmMn cyAocHJpb3IgdG8gMi4xLjMpLCB0aGUgY29uZF93YWl0IGZ1bmN0aW9ucyBt YXkgCisgICAgICAvLyBzcHVyaW91c2x5IHdha2UgdXAgb24gYSBzaWduYWwu IENhdGNoIHRoYXQgaGVyZS4KKyAgICAgIGlmIChyICE9IEVJTlRSKQorICAg ICAgICBkb25lX3NsZWVwaW5nID0gdHJ1ZTsKKyAgICB9CisgIAorICAvLyBD aGVjayBmb3IgYW4gaW50ZXJydXB0ICpiZWZvcmUqIHJlbGVhc2luZyB0aGUg d2FpdCBtdXRleC4KKyAgamJvb2xlYW4gaW50ZXJydXB0ZWQgPSBjdXJyZW50 X29iai0+aW50ZXJydXB0X2ZsYWc7CisgIAorICBwdGhyZWFkX211dGV4X3Vu bG9jayAoJmN1cnJlbnQtPndhaXRfbXV0ZXgpOworCisgIC8vICBSZWFxdWly ZSB0aGUgbW9uaXRvciBtdXRleCwgYW5kIHJlc3RvcmUgdGhlIGxvY2sgY291 bnQuCisgIHB0aHJlYWRfbXV0ZXhfbG9jayAoJm11LT5tdXRleCk7CisgIG11 LT5vd25lciA9IHNlbGY7CisgIG11LT5jb3VudCA9IGNvdW50OworCisgIC8v IElmIHdlIHdlcmUgaW50ZXJydXB0ZWQsIG9yIGlmIGEgdGltZW91dCBvY2N1 cnJlZCwgcmVtb3ZlIG91cnNlbGYgZnJvbQorICAvLyB0aGUgY3Ygd2FpdCBs aXN0IG5vdy4gKElmIHdlIHdlcmUgbm90aWZpZWQgbm9ybWFsbHksIG5vdGlm eSgpIHdpbGwgaGF2ZQorICAvLyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgdGhp cykKKyAgaWYgKHIgPT0gRVRJTUVET1VUIHx8IGludGVycnVwdGVkKQorICAg IHsKKyAgICAgIF9Kdl9UaHJlYWRfdCAqcHJldiA9IE5VTEw7CisgICAgICBm b3IgKF9Kdl9UaHJlYWRfdCAqdCA9IGN2LT5maXJzdDsgdCAhPSBOVUxMOyB0 ID0gdC0+bmV4dCkKKyAgICAgICAgeworCSAgaWYgKHQgPT0gY3VycmVudCkK KwkgICAgeworCSAgICAgIGlmIChwcmV2ICE9IE5VTEwpCisJCXByZXYtPm5l eHQgPSB0LT5uZXh0OworCSAgICAgIGVsc2UKKwkgICAgICAgIGN2LT5maXJz dCA9IHQtPm5leHQ7CisJICAgICAgdC0+bmV4dCA9IE5VTEw7CisJICAgICAg YnJlYWs7CisJICAgIH0KKwkgIHByZXYgPSB0OworCX0KKyAgICAgIGlmIChp bnRlcnJ1cHRlZCkKKwlyZXR1cm4gX0pWX0lOVEVSUlVQVEVEOworICAgIH0K KyAgCisgIHJldHVybiAwOworfQorCitpbnQKK19Kdl9Db25kTm90aWZ5IChf SnZfQ29uZGl0aW9uVmFyaWFibGVfdCAqY3YsIF9Kdl9NdXRleF90ICptdSkK K3sKKyAgaWYgKF9Kdl9NdXRleENoZWNrTW9uaXRvciAobXUpKQorICAgIHJl dHVybiBfSlZfTk9UX09XTkVSOworCisgIF9Kdl9UaHJlYWRfdCAqdGFyZ2V0 OworICBfSnZfVGhyZWFkX3QgKnByZXYgPSBOVUxMOworCisgIGZvciAodGFy Z2V0ID0gY3YtPmZpcnN0OyB0YXJnZXQgIT0gTlVMTDsgdGFyZ2V0ID0gdGFy Z2V0LT5uZXh0KQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayAo JnRhcmdldC0+d2FpdF9tdXRleCk7CisKKyAgICAgIGlmICh0YXJnZXQtPnRo cmVhZF9vYmotPmludGVycnVwdF9mbGFnKQorICAgICAgICB7CisJICAvLyBE b24ndCBub3RpZnkgYSB0aHJlYWQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGlu dGVycnVwdGVkLgorCSAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZ0YXJnZXQt PndhaXRfbXV0ZXgpOworICAgICAgICAgIHByZXYgPSB0YXJnZXQ7CisJICBj b250aW51ZTsKKwl9CisKKyAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwgKCZ0 YXJnZXQtPndhaXRfY29uZCk7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9j ayAoJnRhcmdldC0+d2FpdF9tdXRleCk7CisKKyAgICAgIC8vIFR3byBjb25j dXJyZW50IG5vdGlmeSgpIGNhbGxzIG11c3Qgbm90IGJlIGRlbGl2ZXJlZCB0 byB0aGUgc2FtZSAKKyAgICAgIC8vIHRocmVhZCwgc28gcmVtb3ZlIHRoZSB0 YXJnZXQgdGhyZWFkIGZyb20gdGhlIGN2IHdhaXQgbGlzdCBub3cuCisgICAg ICBpZiAocHJldiA9PSBOVUxMKQorCWN2LT5maXJzdCA9IHRhcmdldC0+bmV4 dDsKKyAgICAgIGVsc2UKKyAgICAgICAgcHJldi0+bmV4dCA9IHRhcmdldC0+ bmV4dDsKKwkJCisgICAgICB0YXJnZXQtPm5leHQgPSBOVUxMOworICAgICAg CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2lu dAorX0p2X0NvbmROb3RpZnlBbGwgKF9Kdl9Db25kaXRpb25WYXJpYWJsZV90 ICpjdiwgX0p2X011dGV4X3QgKm11KQoreworICBpZiAoX0p2X011dGV4Q2hl Y2tNb25pdG9yIChtdSkpCisgICAgcmV0dXJuIF9KVl9OT1RfT1dORVI7CisK KyAgX0p2X1RocmVhZF90ICp0YXJnZXQ7CisgIF9Kdl9UaHJlYWRfdCAqcHJl diA9IE5VTEw7CisKKyAgZm9yICh0YXJnZXQgPSBjdi0+Zmlyc3Q7IHRhcmdl dCAhPSBOVUxMOyB0YXJnZXQgPSB0YXJnZXQtPm5leHQpCisgICAgeworICAg ICAgcHRocmVhZF9tdXRleF9sb2NrICgmdGFyZ2V0LT53YWl0X211dGV4KTsK KyAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwgKCZ0YXJnZXQtPndhaXRfY29u ZCk7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAoJnRhcmdldC0+d2Fp dF9tdXRleCk7CisKKyAgICAgIGlmIChwcmV2ICE9IE5VTEwpCisJcHJldi0+ bmV4dCA9IE5VTEw7CisgICAgICBwcmV2ID0gdGFyZ2V0OworICAgIH0KKyAg aWYgKHByZXYgIT0gTlVMTCkKKyAgICBwcmV2LT5uZXh0ID0gTlVMTDsKKyAg ICAKKyAgY3YtPmZpcnN0ID0gTlVMTDsKKworICByZXR1cm4gMDsKK30KKwor dm9pZAorX0p2X1RocmVhZEludGVycnVwdCAoX0p2X1RocmVhZF90ICpkYXRh KQoreworICBwdGhyZWFkX211dGV4X2xvY2sgKCZkYXRhLT53YWl0X211dGV4 KTsKKworICAvLyBTZXQgdGhlIHRocmVhZCdzIGludGVycnVwdGVkIGZsYWcg KmFmdGVyKiBhcXVpcmluZyBpdHMgd2FpdF9tdXRleC4gVGhpcworICAvLyBl bnN1cmVzIHRoYXQgdGhlcmUgYXJlIG5vIHJhY2VzIHdpdGggdGhlIGludGVy cnVwdCBmbGFnIGJlaW5nIHNldCBhZnRlciAKKyAgLy8gdGhlIHdhaXRpbmcg dGhyZWFkIGNoZWNrcyBpdCBhbmQgYmVmb3JlIHB0aHJlYWRfY29uZF93YWl0 IGlzIGVudGVyZWQuCisgIGRhdGEtPnRocmVhZF9vYmotPmludGVycnVwdF9m bGFnID0gdHJ1ZTsKKworICAvLyBJbnRlcnJ1cHQgYmxvY2tpbmcgc3lzdGVt IGNhbGxzIHVzaW5nIGEgc2lnbmFsLgorICBwdGhyZWFkX2tpbGwgKGRhdGEt PnRocmVhZCwgSU5UUik7CisgIAorICBwdGhyZWFkX2NvbmRfc2lnbmFsICgm ZGF0YS0+d2FpdF9jb25kKTsKKyAgCisgIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr ICgmZGF0YS0+d2FpdF9tdXRleCk7Cit9CisKKy8qKgorICogUmVsZWFzZXMg dGhlIGJsb2NrIG9uIGEgdGhyZWFkIGNyZWF0ZWQgYnkgX0p2X1RocmVhZFBh cmsoKS4gIFRoaXMKKyAqIG1ldGhvZCBjYW4gYWxzbyBiZSB1c2VkIHRvIHRl cm1pbmF0ZSBhIGJsb2NrYWdlIGNhdXNlZCBieSBhIHByaW9yCisgKiBjYWxs IHRvIHBhcmsuICBUaGlzIG9wZXJhdGlvbiBpcyB1bnNhZmUsIGFzIHRoZSB0 aHJlYWQgbXVzdCBiZQorICogZ3VhcmFudGVlZCB0byBiZSBsaXZlLgorICoK KyAqIEBwYXJhbSB0aHJlYWQgdGhlIHRocmVhZCB0byB1bmJsb2NrLgorICov Cit2b2lkCitQYXJrSGVscGVyOjp1bnBhcmsgKCkKK3sKKyAgdXNpbmcgbmFt ZXNwYWNlIDo6amF2YTo6bGFuZzsKKyAgdm9sYXRpbGUgb2JqX2FkZHJfdCAq cHRyID0gJnBlcm1pdDsKKworICAvKiBJZiB0aGlzIHRocmVhZCBpcyBpbiBz dGF0ZSBSVU5OSU5HLCBnaXZlIGl0IGEgcGVybWl0IGFuZCByZXR1cm4KKyAg ICAgaW1tZWRpYXRlbHkuICAqLworICBpZiAoY29tcGFyZV9hbmRfc3dhcCAK KyAgICAgIChwdHIsIFRocmVhZDo6VEhSRUFEX1BBUktfUlVOTklORywgVGhy ZWFkOjpUSFJFQURfUEFSS19QRVJNSVQpKQorICAgIHJldHVybjsKKworICAv KiBJZiB0aGlzIHRocmVhZCBpcyBwYXJrZWQsIHB1dCBpdCBpbnRvIHN0YXRl IFJVTk5JTkcgYW5kIHNlbmQgaXQgYQorICAgICBzaWduYWwuICAqLworICBp ZiAoY29tcGFyZV9hbmRfc3dhcAorICAgICAgKHB0ciwgVGhyZWFkOjpUSFJF QURfUEFSS19QQVJLRUQsIFRocmVhZDo6VEhSRUFEX1BBUktfUlVOTklORykp CisgICAgeworICAgICAgaW50IHJlc3VsdDsKKyAgICAgIHB0aHJlYWRfbXV0 ZXhfbG9jayAoJm11dGV4KTsKKyAgICAgIHJlc3VsdCA9IHB0aHJlYWRfY29u ZF9zaWduYWwgKCZjb25kKTsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr ICgmbXV0ZXgpOworICAgICAgSnZBc3NlcnQgKHJlc3VsdCA9PSAwKTsKKyAg ICB9Cit9CisKKy8qKgorICogU2V0cyBvdXIgc3RhdGUgdG8gZGVhZC4KKyAq Lwordm9pZAorUGFya0hlbHBlcjo6ZGVhY3RpdmF0ZSAoKQoreworICBwZXJt aXQgPSA6OmphdmE6Omxhbmc6OlRocmVhZDo6VEhSRUFEX1BBUktfREVBRDsK K30KKwordm9pZAorUGFya0hlbHBlcjo6aW5pdCAoKQoreworICBwdGhyZWFk X211dGV4X2luaXQgKCZtdXRleCwgTlVMTCk7CisgIHB0aHJlYWRfY29uZF9p bml0ICgmY29uZCwgTlVMTCk7CisgIHBlcm1pdCA9IDo6amF2YTo6bGFuZzo6 VGhyZWFkOjpUSFJFQURfUEFSS19SVU5OSU5HOworfQorCisvKioKKyAqIEJs b2NrcyB0aGUgdGhyZWFkIHVudGlsIGEgbWF0Y2hpbmcgX0p2X1RocmVhZFVu cGFyaygpIG9jY3VycywgdGhlCisgKiB0aHJlYWQgaXMgaW50ZXJydXB0ZWQg b3IgdGhlIG9wdGlvbmFsIHRpbWVvdXQgZXhwaXJlcy4gIElmIGFuCisgKiB1 bnBhcmsgY2FsbCBoYXMgYWxyZWFkeSBvY2N1cnJlZCwgdGhpcyBhbHNvIGNv dW50cy4gIEEgdGltZW91dAorICogdmFsdWUgb2YgemVybyBpcyBkZWZpbmVk IGFzIG5vIHRpbWVvdXQuICBXaGVuIGlzQWJzb2x1dGUgaXMgdHJ1ZSwKKyAq IHRoZSB0aW1lb3V0IGlzIGluIG1pbGxpc2Vjb25kcyByZWxhdGl2ZSB0byB0 aGUgZXBvY2guICBPdGhlcndpc2UsCisgKiB0aGUgdmFsdWUgaXMgdGhlIG51 bWJlciBvZiBuYW5vc2Vjb25kcyB3aGljaCBtdXN0IG9jY3VyIGJlZm9yZQor ICogdGltZW91dC4gIFRoaXMgY2FsbCBtYXkgYWxzbyByZXR1cm4gc3B1cmlv dXNseSAoaS5lLiAgZm9yIG5vCisgKiBhcHBhcmVudCByZWFzb24pLgorICoK KyAqIEBwYXJhbSBpc0Fic29sdXRlIHRydWUgaWYgdGhlIHRpbWVvdXQgaXMg c3BlY2lmaWVkIGluIG1pbGxpc2Vjb25kcyBmcm9tCisgKiAgICAgICAgICAg ICAgICAgICB0aGUgZXBvY2guCisgKiBAcGFyYW0gdGltZSBlaXRoZXIgdGhl IG51bWJlciBvZiBuYW5vc2Vjb25kcyB0byB3YWl0LCBvciBhIHRpbWUgaW4K KyAqICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBlcG9jaCB0 byB3YWl0IGZvci4KKyAqLwordm9pZAorUGFya0hlbHBlcjo6cGFyayAoamJv b2xlYW4gaXNBYnNvbHV0ZSwgamxvbmcgdGltZSkKK3sKKyAgdXNpbmcgbmFt ZXNwYWNlIDo6amF2YTo6bGFuZzsKKyAgdm9sYXRpbGUgb2JqX2FkZHJfdCAq cHRyID0gJnBlcm1pdDsKKworICAvKiBJZiB3ZSBoYXZlIGEgcGVybWl0LCBy ZXR1cm4gaW1tZWRpYXRlbHkuICAqLworICBpZiAoY29tcGFyZV9hbmRfc3dh cCAKKyAgICAgIChwdHIsIFRocmVhZDo6VEhSRUFEX1BBUktfUEVSTUlULCBU aHJlYWQ6OlRIUkVBRF9QQVJLX1JVTk5JTkcpKQorICAgIHJldHVybjsKKwor ICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKyAgaWYgKHRpbWUpCisgICAgewor ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNlY29uZHM7CisgICAgICB1bnNp Z25lZCBsb25nIHVzZWM7CisKKyAgICAgIGlmIChpc0Fic29sdXRlKQorCXsK KwkgIHRzLnR2X3NlYyA9IHRpbWUgLyAxMDAwOworCSAgdHMudHZfbnNlYyA9 ICh0aW1lICUgMTAwMCkgKiAxMDAwICogMTAwMDsKKwl9CisgICAgICBlbHNl CisJeworCSAgLy8gQ2FsY3VsYXRlIHRoZSBhYnN0aW1lIGNvcnJlc3BvbmRp bmcgdG8gdGhlIHRpbWVvdXQuCisJICBqbG9uZyBuYW5vcyA9IHRpbWU7CisJ ICBqbG9uZyBtaWxsaXMgPSAwOworCisJICAvLyBGb3IgYmV0dGVyIGFjY3Vy YWN5LCBzaG91bGQgdXNlIHB0aHJlYWRfY29uZGF0dHJfc2V0Y2xvY2sKKwkg IC8vIGFuZCBjbG9ja19nZXR0aW1lLgorI2lmZGVmIEhBVkVfR0VUVElNRU9G REFZCisJICB0aW1ldmFsIHR2OworCSAgZ2V0dGltZW9mZGF5ICgmdHYsIE5V TEwpOworCSAgdXNlYyA9IHR2LnR2X3VzZWM7CisJICBzZWNvbmRzID0gdHYu dHZfc2VjOworI2Vsc2UKKwkgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydFRp bWUKKwkgICAgPSBqYXZhOjpsYW5nOjpTeXN0ZW06OmN1cnJlbnRUaW1lTWls bGlzKCk7CisJICBzZWNvbmRzID0gc3RhcnRUaW1lIC8gMTAwMDsKKwkgIC8q IEFzc3VtZSB3ZSdyZSBhYm91dCBoYWxmLXdheSB0aHJvdWdoIHRoaXMgbWls bGlzZWNvbmQuICAqLworCSAgdXNlYyA9IChzdGFydFRpbWUgJSAxMDAwKSAq IDEwMDAgKyA1MDA7CisjZW5kaWYKKwkgIC8qIFRoZXNlIG5leHQgdHdvIHN0 YXRlbWVudHMgY2Fubm90IG92ZXJmbG93LiAgKi8KKwkgIHVzZWMgKz0gbmFu b3MgLyAxMDAwOworCSAgdXNlYyArPSAobWlsbGlzICUgMTAwMCkgKiAxMDAw OworCSAgLyogVGhlc2UgdHdvIHN0YXRlbWVudHMgY291bGQgb3ZlcmZsb3cg b25seSBpZiB0di50dl9zZWMgd2FzCisJICAgICBpbnNhbmVseSBsYXJnZS4g ICovCisJICBzZWNvbmRzICs9IG1pbGxpcyAvIDEwMDA7CisJICBzZWNvbmRz ICs9IHVzZWMgLyAxMDAwMDAwOworCisJICB0cy50dl9zZWMgPSBzZWNvbmRz OworCSAgaWYgKHRzLnR2X3NlYyA8IDAgfHwgKHVuc2lnbmVkIGxvbmcgbG9u Zyl0cy50dl9zZWMgIT0gc2Vjb25kcykKKwkgICAgeworCSAgICAgIC8vIFdl IHRyZWF0IGEgdGltZW91dCB0aGF0IHdvbid0IGZpdCBpbnRvIGEgc3RydWN0 IHRpbWVzcGVjCisJICAgICAgLy8gYXMgYSB3YWl0IGZvcmV2ZXIuCisJICAg ICAgbWlsbGlzID0gbmFub3MgPSAwOworCSAgICB9CisJICBlbHNlCisJICAg IC8qIFRoaXMgbmV4dCBzdGF0ZW1lbnQgYWxzbyBjYW5ub3Qgb3ZlcmZsb3cu ICAqLworCSAgICB0cy50dl9uc2VjID0gKHVzZWMgJSAxMDAwMDAwKSAqIDEw MDAgKyAobmFub3MgJSAxMDAwKTsKKwl9CisgICAgfQorCisgIHB0aHJlYWRf bXV0ZXhfbG9jayAoJm11dGV4KTsKKyAgaWYgKGNvbXBhcmVfYW5kX3N3YXAg CisgICAgICAocHRyLCBUaHJlYWQ6OlRIUkVBRF9QQVJLX1JVTk5JTkcsIFRo cmVhZDo6VEhSRUFEX1BBUktfUEFSS0VEKSkKKyAgICB7CisgICAgICBpbnQg cmVzdWx0ID0gMDsKKworICAgICAgaWYgKCEgdGltZSkKKwlyZXN1bHQgPSBw dGhyZWFkX2NvbmRfd2FpdCAoJmNvbmQsICZtdXRleCk7CisgICAgICBlbHNl CisJcmVzdWx0ID0gcHRocmVhZF9jb25kX3RpbWVkd2FpdCAoJmNvbmQsICZt dXRleCwgJnRzKTsKKworICAgICAgSnZBc3NlcnQgKHJlc3VsdCA9PSAwIHx8 IHJlc3VsdCA9PSBFVElNRURPVVQpOworCisgICAgICAvKiBJZiB3ZSB3ZXJl IHVucGFya2VkIGJ5IHNvbWUgb3RoZXIgdGhyZWFkLCB0aGlzIHdpbGwgYWxy ZWFkeQorCSBiZSBpbiBzdGF0ZSBUSFJFQURfUEFSS19SVU5OSU5HLiAgSWYg d2UgdGltZWQgb3V0IG9yIHdlcmUKKwkgaW50ZXJydXB0ZWQsIHdlIGhhdmUg dG8gZG8gaXQgb3Vyc2VsZi4gICovCisgICAgICBwZXJtaXQgPSBUaHJlYWQ6 OlRIUkVBRF9QQVJLX1JVTk5JTkc7CisgICAgfQorICBwdGhyZWFkX211dGV4 X3VubG9jayAoJm11dGV4KTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9p bnRyIChpbnQpCit7CisgIC8vIERvIG5vdGhpbmcuCit9CisKK3ZvaWQKK19K dl9CbG9ja1NpZ2NobGQoKQoreworICBzaWdzZXRfdCBtYXNrOworICBzaWdl bXB0eXNldCAoJm1hc2spOworICBzaWdhZGRzZXQgKCZtYXNrLCBTSUdDSExE KTsKKyAgaW50IGMgPSBwdGhyZWFkX3NpZ21hc2sgKFNJR19CTE9DSywgJm1h c2ssIE5VTEwpOworICBpZiAoYyAhPSAwKQorICAgIEp2RmFpbCAoc3RyZXJy b3IgKGMpKTsKK30KKwordm9pZAorX0p2X1VuQmxvY2tTaWdjaGxkKCkKK3sK KyAgc2lnc2V0X3QgbWFzazsKKyAgc2lnZW1wdHlzZXQgKCZtYXNrKTsKKyAg c2lnYWRkc2V0ICgmbWFzaywgU0lHQ0hMRCk7CisgIGludCBjID0gcHRocmVh ZF9zaWdtYXNrIChTSUdfVU5CTE9DSywgJm1hc2ssIE5VTEwpOworICBpZiAo YyAhPSAwKQorICAgIEp2RmFpbCAoc3RyZXJyb3IgKGMpKTsKK30KKwordm9p ZAorX0p2X0luaXRUaHJlYWRzICh2b2lkKQoreworICBwdGhyZWFkX2tleV9j cmVhdGUgKCZfSnZfVGhyZWFkS2V5LCBOVUxMKTsKKyAgcHRocmVhZF9rZXlf Y3JlYXRlICgmX0p2X1RocmVhZERhdGFLZXksIE5VTEwpOworICBwdGhyZWFk X211dGV4X2luaXQgKCZkYWVtb25fbXV0ZXgsIE5VTEwpOworICBwdGhyZWFk X2NvbmRfaW5pdCAoJmRhZW1vbl9jb25kLCAwKTsKKyAgbm9uX2RhZW1vbl9j b3VudCA9IDA7CisKKyAgLy8gQXJyYW5nZSBmb3IgdGhlIGludGVycnVwdCBz aWduYWwgdG8gaW50ZXJydXB0IHN5c3RlbSBjYWxscy4KKyAgc3RydWN0IHNp Z2FjdGlvbiBhY3Q7CisgIGFjdC5zYV9oYW5kbGVyID0gaGFuZGxlX2ludHI7 CisgIHNpZ2VtcHR5c2V0ICgmYWN0LnNhX21hc2spOworICBhY3Quc2FfZmxh Z3MgPSAwOworICBzaWdhY3Rpb24gKElOVFIsICZhY3QsIE5VTEwpOworCisg IC8vIEJsb2NrIFNJR0NITEQgaGVyZSB0byBlbnN1cmUgdGhhdCBhbnkgbm9u LUphdmEgdGhyZWFkcyBpbmhlcml0IHRoZSBuZXcgCisgIC8vIHNpZ25hbCBt YXNrLgorICBfSnZfQmxvY2tTaWdjaGxkKCk7CisKKyAgLy8gQ2hlY2svc2V0 IHRoZSB0aHJlYWQgc3RhY2sgc2l6ZS4KKyAgc2l6ZV90IG1pbl9zcyA9IDMy ICogMTAyNDsKKyAgCisgIGlmIChzaXplb2YgKHZvaWQgKikgPT0gOCkKKyAg ICAvLyBCaWdnZXIgZGVmYXVsdCBvbiA2NC1iaXQgc3lzdGVtcy4KKyAgICBt aW5fc3MgKj0gMjsKKworI2lmZGVmIFBUSFJFQURfU1RBQ0tfTUlOCisgIGlm IChtaW5fc3MgPCBQVEhSRUFEX1NUQUNLX01JTikKKyAgICBtaW5fc3MgPSBQ VEhSRUFEX1NUQUNLX01JTjsKKyNlbmRpZgorICAKKyAgaWYgKGdjajo6c3Rh Y2tfc2l6ZSA+IDAgJiYgZ2NqOjpzdGFja19zaXplIDwgbWluX3NzKQorICAg IGdjajo6c3RhY2tfc2l6ZSA9IG1pbl9zczsKK30KKworX0p2X1RocmVhZF90 ICoKK19Kdl9UaHJlYWRJbml0RGF0YSAoamF2YTo6bGFuZzo6VGhyZWFkICpv YmopCit7CisgIF9Kdl9UaHJlYWRfdCAqZGF0YSA9IChfSnZfVGhyZWFkX3Qg KikgX0p2X01hbGxvYyAoc2l6ZW9mIChfSnZfVGhyZWFkX3QpKTsKKyAgZGF0 YS0+ZmxhZ3MgPSAwOworICBkYXRhLT50aHJlYWRfb2JqID0gb2JqOworCisg IHB0aHJlYWRfbXV0ZXhfaW5pdCAoJmRhdGEtPndhaXRfbXV0ZXgsIE5VTEwp OworICBwdGhyZWFkX2NvbmRfaW5pdCAoJmRhdGEtPndhaXRfY29uZCwgTlVM TCk7CisKKyAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQKK19Kdl9UaHJlYWRE ZXN0cm95RGF0YSAoX0p2X1RocmVhZF90ICpkYXRhKQoreworICBwdGhyZWFk X211dGV4X2Rlc3Ryb3kgKCZkYXRhLT53YWl0X211dGV4KTsKKyAgcHRocmVh ZF9jb25kX2Rlc3Ryb3kgKCZkYXRhLT53YWl0X2NvbmQpOworICBfSnZfRnJl ZSAoKHZvaWQgKilkYXRhKTsKK30KKwordm9pZAorX0p2X1RocmVhZFNldFBy aW9yaXR5IChfSnZfVGhyZWFkX3QgKmRhdGEsIGppbnQgcHJpbykKK3sKKyNp ZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKKyAgaWYg KGRhdGEtPmZsYWdzICYgRkxBR19TVEFSVCkKKyAgICB7CisgICAgICBzdHJ1 Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisKKyAgICAgIHBhcmFtLnNjaGVkX3By aW9yaXR5ID0gcHJpbzsKKyAgICAgIHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAo ZGF0YS0+dGhyZWFkLCBTQ0hFRF9PVEhFUiwgJnBhcmFtKTsKKyAgICB9Cisj ZW5kaWYKK30KKwordm9pZAorX0p2X1RocmVhZFJlZ2lzdGVyIChfSnZfVGhy ZWFkX3QgKmRhdGEpCit7CisgIHB0aHJlYWRfc2V0c3BlY2lmaWMgKF9Kdl9U aHJlYWRLZXksIGRhdGEtPnRocmVhZF9vYmopOworICBwdGhyZWFkX3NldHNw ZWNpZmljIChfSnZfVGhyZWFkRGF0YUtleSwgZGF0YSk7CisKKyAgLy8gZ2xp YmMgMi4xLjMgZG9lc24ndCBzZXQgdGhlIHZhbHVlIG9mIGB0aHJlYWQnIHVu dGlsIGFmdGVyIHN0YXJ0X3JvdXRpbmUKKyAgLy8gaXMgY2FsbGVkLiBTaW5j ZSBpdCBtYXkgbmVlZCB0byBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBuZXcgdGhy ZWFkLCB3b3JrIAorICAvLyBhcm91bmQgdGhlIHBvdGVudGlhbCByYWNlIGhl cmUgYnkgZXhwbGljaXRseSBzZXR0aW5nIGl0IGFnYWluLgorICBkYXRhLT50 aHJlYWQgPSBwdGhyZWFkX3NlbGYgKCk7CisKKyMgaWZkZWYgU0xPV19QVEhS RUFEX1NFTEYKKyAgICAvLyBDbGVhciBhbGwgc2VsZiBjYWNoZSBzbG90cyB0 aGF0IG1pZ2h0IGJlIG5lZWRlZCBieSB0aGlzIHRocmVhZC4KKyAgICBpbnQg ZHVtbXk7CisgICAgaW50IGxvd19pbmRleCA9IFNDX0lOREVYKCZkdW1teSkg KyBTQ19DTEVBUl9NSU47CisgICAgaW50IGhpZ2hfaW5kZXggPSBTQ19JTkRF WCgmZHVtbXkpICsgU0NfQ0xFQVJfTUFYOworICAgIGZvciAoaW50IGkgPSBs b3dfaW5kZXg7IGkgPD0gaGlnaF9pbmRleDsgKytpKSAKKyAgICAgIHsKKyAg ICAgICAgaW50IGN1cnJlbnRfaW5kZXggPSBpOworCWlmIChjdXJyZW50X2lu ZGV4IDwgMCkKKwkgIGN1cnJlbnRfaW5kZXggKz0gU0VMRl9DQUNIRV9TSVpF OworCWlmIChjdXJyZW50X2luZGV4ID49IFNFTEZfQ0FDSEVfU0laRSkKKwkg IGN1cnJlbnRfaW5kZXggLT0gU0VMRl9DQUNIRV9TSVpFOworCV9Kdl9zZWxm X2NhY2hlW2N1cnJlbnRfaW5kZXhdLmhpZ2hfc3BfYml0cyA9IEJBRF9ISUdI X1NQX1ZBTFVFOworICAgICAgfQorIyBlbmRpZgorICAvLyBCbG9jayBTSUdD SExEIHdoaWNoIGlzIHVzZWQgaW4gbmF0UG9zaXhQcm9jZXNzLmNjLgorICBf SnZfQmxvY2tTaWdjaGxkKCk7Cit9CisKK3ZvaWQKK19Kdl9UaHJlYWRVblJl Z2lzdGVyICgpCit7CisgIHB0aHJlYWRfc2V0c3BlY2lmaWMgKF9Kdl9UaHJl YWRLZXksIE5VTEwpOworICBwdGhyZWFkX3NldHNwZWNpZmljIChfSnZfVGhy ZWFkRGF0YUtleSwgTlVMTCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHdoZW4gYSB0aHJlYWQgaXMgc3RhcnRlZC4gIFdlIGRvbid0IGFy cmFuZ2UKKy8vIHRvIGNhbGwgdGhlIGBydW4nIG1ldGhvZCBkaXJlY3RseSwg YmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG11c3QKKy8vIHJldHVybiBhIHZhbHVl Lgorc3RhdGljIHZvaWQgKgorcmVhbGx5X3N0YXJ0ICh2b2lkICp4KQorewor ICBzdHJ1Y3Qgc3RhcnRlciAqaW5mbyA9IChzdHJ1Y3Qgc3RhcnRlciAqKSB4 OworCisgIF9Kdl9UaHJlYWRSZWdpc3RlciAoaW5mby0+ZGF0YSk7CisKKyAg aW5mby0+bWV0aG9kIChpbmZvLT5kYXRhLT50aHJlYWRfb2JqKTsKKworICBp ZiAoISAoaW5mby0+ZGF0YS0+ZmxhZ3MgJiBGTEFHX0RBRU1PTikpCisgICAg eworICAgICAgcHRocmVhZF9tdXRleF9sb2NrICgmZGFlbW9uX211dGV4KTsK KyAgICAgIC0tbm9uX2RhZW1vbl9jb3VudDsKKyAgICAgIGlmICghIG5vbl9k YWVtb25fY291bnQpCisJcHRocmVhZF9jb25kX3NpZ25hbCAoJmRhZW1vbl9j b25kKTsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmZGFlbW9uX211 dGV4KTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK19K dl9UaHJlYWRTdGFydCAoamF2YTo6bGFuZzo6VGhyZWFkICp0aHJlYWQsIF9K dl9UaHJlYWRfdCAqZGF0YSwKKwkJIF9Kdl9UaHJlYWRTdGFydEZ1bmMgKm1l dGgpCit7CisgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKyAgcHRocmVh ZF9hdHRyX3QgYXR0cjsKKyAgc3RydWN0IHN0YXJ0ZXIgKmluZm87CisKKyAg aWYgKGRhdGEtPmZsYWdzICYgRkxBR19TVEFSVCkKKyAgICByZXR1cm47Cisg IGRhdGEtPmZsYWdzIHw9IEZMQUdfU1RBUlQ7CisKKyAgLy8gQmxvY2sgU0lH Q0hMRCB3aGljaCBpcyB1c2VkIGluIG5hdFBvc2l4UHJvY2Vzcy5jYy4KKyAg Ly8gVGhlIGN1cnJlbnQgbWFzayBpcyBpbmhlcml0ZWQgYnkgdGhlIGNoaWxk IHRocmVhZC4KKyAgX0p2X0Jsb2NrU2lnY2hsZCgpOworCisgIHBhcmFtLnNj aGVkX3ByaW9yaXR5ID0gdGhyZWFkLT5nZXRQcmlvcml0eSgpOworCisgIHB0 aHJlYWRfYXR0cl9pbml0ICgmYXR0cik7CisgIHB0aHJlYWRfYXR0cl9zZXRz Y2hlZHBhcmFtICgmYXR0ciwgJnBhcmFtKTsKKyAgcHRocmVhZF9hdHRyX3Nl dGRldGFjaHN0YXRlICgmYXR0ciwgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQp OworICAKKyAgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCgmYXR0ciwg UFRIUkVBRF9FWFBMSUNJVF9TQ0hFRCk7CisgIHB0aHJlYWRfYXR0cl9zZXRz Y2hlZHBvbGljeSgmYXR0ciwgU0NIRURfUlIpOworICAKKyAgLy8gU2V0IHN0 YWNrIHNpemUgaWYgLVhzcyBvcHRpb24gd2FzIGdpdmVuLgorICBpZiAoZ2Nq OjpzdGFja19zaXplID4gMCkKKyAgICB7CisgICAgICBpbnQgZSA9IHB0aHJl YWRfYXR0cl9zZXRzdGFja3NpemUgKCZhdHRyLCBnY2o6OnN0YWNrX3NpemUp OworICAgICAgaWYgKGUgIT0gMCkKKwlKdkZhaWwgKHN0cmVycm9yIChlKSk7 CisgICAgfQorCisgIGluZm8gPSAoc3RydWN0IHN0YXJ0ZXIgKikgX0p2X0Fs bG9jQnl0ZXMgKHNpemVvZiAoc3RydWN0IHN0YXJ0ZXIpKTsKKyAgaW5mby0+ bWV0aG9kID0gbWV0aDsKKyAgaW5mby0+ZGF0YSA9IGRhdGE7CisKKyAgaWYg KCEgdGhyZWFkLT5pc0RhZW1vbigpKQorICAgIHsKKyAgICAgIHB0aHJlYWRf bXV0ZXhfbG9jayAoJmRhZW1vbl9tdXRleCk7CisgICAgICArK25vbl9kYWVt b25fY291bnQ7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAoJmRhZW1v bl9tdXRleCk7CisgICAgfQorICBlbHNlCisgICAgZGF0YS0+ZmxhZ3MgfD0g RkxBR19EQUVNT047CisgIGludCByID0gcHRocmVhZF9jcmVhdGUgKCZkYXRh LT50aHJlYWQsICZhdHRyLCByZWFsbHlfc3RhcnQsICh2b2lkICopIGluZm8p OworICAKKyAgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKCZhdHRyKTsKKworICBp ZiAocikKKyAgICB7CisgICAgICBjb25zdCBjaGFyKiBtc2cgPSAiQ2Fubm90 IGNyZWF0ZSBhZGRpdGlvbmFsIHRocmVhZHMiOworICAgICAgdGhyb3cgbmV3 IGphdmE6Omxhbmc6Ok91dE9mTWVtb3J5RXJyb3IgKEp2TmV3U3RyaW5nVVRG IChtc2cpKTsKKyAgICB9Cit9CisKK3ZvaWQKK19Kdl9UaHJlYWRXYWl0ICh2 b2lkKQoreworICBwdGhyZWFkX211dGV4X2xvY2sgKCZkYWVtb25fbXV0ZXgp OworICBpZiAobm9uX2RhZW1vbl9jb3VudCkKKyAgICBwdGhyZWFkX2NvbmRf d2FpdCAoJmRhZW1vbl9jb25kLCAmZGFlbW9uX211dGV4KTsKKyAgcHRocmVh ZF9tdXRleF91bmxvY2sgKCZkYWVtb25fbXV0ZXgpOworfQorCisjaWYgZGVm aW5lZChTTE9XX1BUSFJFQURfU0VMRikKKworI2luY2x1ZGUgInN5c2RlcC9s b2Nrcy5oIgorCisvLyBTdXBwb3J0IGZvciBwdGhyZWFkX3NlbGYoKSBsb29r dXAgY2FjaGUuCit2b2xhdGlsZSBzZWxmX2NhY2hlX2VudHJ5IF9Kdl9zZWxm X2NhY2hlW1NFTEZfQ0FDSEVfU0laRV07CisKK19Kdl9UaHJlYWRJZF90Citf SnZfVGhyZWFkU2VsZl9vdXRfb2ZfbGluZSh2b2xhdGlsZSBzZWxmX2NhY2hl X2VudHJ5ICpzY2UsIHNpemVfdCBoaWdoX3NwX2JpdHMpCit7CisgIHB0aHJl YWRfdCBzZWxmID0gcHRocmVhZF9zZWxmKCk7CisgIHNjZSAtPiBoaWdoX3Nw X2JpdHMgPSBoaWdoX3NwX2JpdHM7CisgIHdyaXRlX2JhcnJpZXIoKTsKKyAg c2NlIC0+IHNlbGYgPSBzZWxmOworICByZXR1cm4gc2VsZjsKK30KKworI2Vu ZGlmIC8qIFNMT1dfUFRIUkVBRF9TRUxGICovCkluZGV4OiBjbGFzc3BhdGgv bmF0aXZlL2ZkbGlibS9tcHJlYy5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGNsYXNzcGF0aC9uYXRpdmUvZmRsaWJtL21wcmVjLmMJKHJldmlzaW9u IDE3MjIyNCkKKysrIGNsYXNzcGF0aC9uYXRpdmUvZmRsaWJtL21wcmVjLmMJ KHdvcmtpbmcgY29weSkKQEAgLTEwMDQsNyArMTAwNCw3IEBACiB7MWUtMTYs IDFlLTMyfTsKICNlbmRpZgogCi0KKyNpZiAhZGVmaW5lZChfX3J0ZW1zX18p CiBkb3VibGUKIF9ERUZVTiAoX21wcmVjX2xvZzEwLCAoZGlnKSwKIAlpbnQg ZGlnKQpAQCAtMTAxOSwzICsxMDE5LDQgQEAKICAgICB9CiAgIHJldHVybiB2 OwogfQorI2VuZGlmCkluZGV4OiBpbmNsdWRlL3J0ZW1zLXRocmVhZHMuaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL3J0ZW1zLXRocmVh ZHMuaAkocmV2aXNpb24gMCkKKysrIGluY2x1ZGUvcnRlbXMtdGhyZWFkcy5o CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4NCBAQAorLy8gLSotIGMrKyAt Ki0KKy8vIHJ0ZW1zLXRocmVhZHMuaCAtIERlZmluZXMgZm9yIHVzaW5nIFBP U0lYIHRocmVhZHMuCisKKy8qIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwg MjAwMSwgMjAwMywgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisK KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdjai4KKworVGhpcyBzb2Z0 d2FyZSBpcyBjb3B5cmlnaHRlZCB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUKK0xpYmdjaiBMaWNlbnNlLiAgUGxlYXNlIGNvbnN1bHQg dGhlIGZpbGUgIkxJQkdDSl9MSUNFTlNFIiBmb3IKK2RldGFpbHMuICAqLwor CisjaWZuZGVmIF9fSlZfUE9TSVhfVEhSRUFEU19fCisjZGVmaW5lIF9fSlZf UE9TSVhfVEhSRUFEU19fCisKKy8vIE5PVEU6IFRoaXMgZmlsZSBtYXkgb25s eSByZWZlcmVuY2UgdGhvc2UgcHRocmVhZCBmdW5jdGlvbnMgd2hpY2gKKy8v IGFyZSBrbm93biBub3QgdG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgQm9laG0g R0MuICBJZiBpbiBkb3VidCwgc2NhbgorLy8gYm9laG0tZ2MvZ2MuaC4gIFRo aXMgaXMgeXVja3kgYnV0IGxldHMgdXMgYXZvaWQgaW5jbHVkaW5nIGdjLmgK Ky8vIGV2ZXJ5d2hlcmUgKHdoaWNoIHdvdWxkIGJlIHRydWx5IHl1Y2t5KS4K KworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgor I2luY2x1ZGUgPHN5c2RlcC9sb2Nrcy5oPgorCisvLworLy8gVHlwZWRlZnMu CisvLworCit0eXBlZGVmIHN0cnVjdCBfSnZfVGhyZWFkX3QKK3sKKyAgLy8g RmxhZyB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gaW1wbGVtZW50YXRpb24uCisg IGludCBmbGFnczsKKworICAvLyBBY3R1YWwgdGhyZWFkIGlkLgorICBwdGhy ZWFkX3QgdGhyZWFkOworICAKKyAgLy8gSmF2YSBUaHJlYWQgb2JqZWN0Lgor ICBqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZF9vYmo7CisgIAorICAvLyBD b25kaXRpb24gdmFyaWFibGUgYW5kIGNvcnJlc3BvbmRpbmcgbXV0ZXgsIHVz ZWQgdG8gaW1wbGVtZW50IHRoZQorICAvLyBpbnRlcnJ1cHRhYmxlIHdhaXQv bm90aWZ5IG1lY2hhbmlzbS4KKyAgcHRocmVhZF9jb25kX3Qgd2FpdF9jb25k OworICBwdGhyZWFkX211dGV4X3Qgd2FpdF9tdXRleDsKKworICAvLyBOZXh0 IHRocmVhZCBmb3IgQ29uZGl0aW9uIFZhcmlhYmxlIHdhaXQtbGlzdCBjaGFp bi4KKyAgX0p2X1RocmVhZF90ICpuZXh0OworICAKK30gX0p2X1RocmVhZF90 OworCit0eXBlZGVmIHZvaWQgX0p2X1RocmVhZFN0YXJ0RnVuYyAoamF2YTo6 bGFuZzo6VGhyZWFkICopOworCisvLyBDb25kaXRpb24gVmFyaWFibGVzIHVz ZWQgdG8gaW1wbGVtZW50IHdhaXQvbm90aWZ5L3NsZWVwL2ludGVycnVwdC4K K3R5cGVkZWYgc3RydWN0Cit7CisgIC8vIExpbmtlZCBsaXN0IG9mIFRocmVh ZHMgdGhhdCBhcmUgd2FpdGluZyB0byBiZSBub3RpZmllZC4KKyAgX0p2X1Ro cmVhZF90ICpmaXJzdDsKKworfSBfSnZfQ29uZGl0aW9uVmFyaWFibGVfdDsK KwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLy8gRm9yIGNvbXBhdGliaWxpdHks IHNpbXBsaWNpdHksIGFuZCBjb3JyZWN0bmVzcywgd2UgZG8gbm90IHVzZSB0 aGUgbmF0aXZlCisgIC8vIHB0aHJlYWRzIHJlY3Vyc2l2ZSBtdXRleCBpbXBs ZW1lbnRhdGlvbiwgYnV0IHNpbXVsYXRlIHRoZW0gaW5zdGVhZC4KKworICAv LyBNdXRleCB0aGUgdGhyZWFkIGhvbGRzIHRoZSBlbnRpcmUgdGltZSB0aGlz IG11dGV4IGlzIGhlbGQuIAorICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CisK KyAgLy8gVGhyZWFkIGhvbGRpbmcgdGhpcyBtdXRleC4KKyAgcHRocmVhZF90 IG93bmVyOworCisgIC8vIE51bWJlciBvZiB0aW1lcyBtdXRleCBpcyBoZWxk IChsb2NrIGRlcHRoKS4gIElmIDAsIHRoZSBsb2NrIGlzIG5vdCBoZWxkLgor ICBpbnQgY291bnQ7Cit9IF9Kdl9NdXRleF90OworCisvLyBUaGlzIGlzIGEg Y29udmVuaWVuY2UgZnVuY3Rpb24gdXNlZCBvbmx5IGJ5IHRoZSBwdGhyZWFk cyB0aHJlYWQKKy8vIGltcGxlbWVudGF0aW9uLiAgVGhpcyBpcyBzbG93LCBi dXQgdGhhdCdzIHRvbyBiYWQgLS0gd2UgbmVlZCB0byBkbworLy8gdGhlIGNo ZWNrcyBmb3IgY29ycmVjdG5lc3MuICBJdCBtaWdodCBiZSBuaWNlIHRvIGJl IGFibGUgdG8gY29tcGlsZQorLy8gdGhpcyBvdXQuICBSZXR1cm5zIDAgaWYg dGhlIGxvY2sgaXMgaGVsZCBieSB0aGUgY3VycmVudCB0aHJlYWQsIGFuZAor Ly8gMSBvdGhlcndpc2UuCitpbmxpbmUgaW50CitfSnZfTXV0ZXhDaGVja01v bml0b3IgKF9Kdl9NdXRleF90ICptdSkKK3sKKyAgcmV0dXJuIChtdS0+b3du ZXIgIT0gcHRocmVhZF9zZWxmKCkpOworfQorCisvLyBUeXBlIGlkZW50aWZ5 aW5nIGEgUE9TSVggdGhyZWFkLgordHlwZWRlZiBwdGhyZWFkX3QgX0p2X1Ro cmVhZERlc2NfdDsKKworaW5saW5lIF9Kdl9UaHJlYWREZXNjX3QKK19Kdl9H ZXRQbGF0Zm9ybVRocmVhZElEKF9Kdl9UaHJlYWRfdCAqdCkKK3sKKyAgcmV0 dXJuIHQtPnRocmVhZDsKK30KKworLy8KKy8vIFNpZ25hbCBoZWxwZXJzLgor Ly8KKwordm9pZCBfSnZfQmxvY2tTaWdjaGxkKCk7Cit2b2lkIF9Kdl9VbkJs b2NrU2lnY2hsZCgpOworCisKKy8vCisvLyBDb25kaXRpb24gdmFyaWFibGVz LgorLy8KKworaW50IF9Kdl9Db25kV2FpdCAoX0p2X0NvbmRpdGlvblZhcmlh YmxlX3QgKmN2LCBfSnZfTXV0ZXhfdCAqbXUsCisJCSAgamxvbmcgbWlsbGlz LCBqaW50IG5hbm9zKTsKKwkJICAKK2ludCBfSnZfQ29uZE5vdGlmeSAoX0p2 X0NvbmRpdGlvblZhcmlhYmxlX3QgKmN2LCBfSnZfTXV0ZXhfdCAqbXUpOwor CitpbnQgX0p2X0NvbmROb3RpZnlBbGwgKF9Kdl9Db25kaXRpb25WYXJpYWJs ZV90ICpjdiwgX0p2X011dGV4X3QgKm11KTsKKworaW5saW5lIHZvaWQKK19K dl9Db25kSW5pdCAoX0p2X0NvbmRpdGlvblZhcmlhYmxlX3QgKmN2KQorewor ICBjdi0+Zmlyc3QgPSAwOworfQorCisvLworLy8gTXV0ZXhlcy4KKy8vCisK KyNpZmRlZiBMT0NLX0RFQlVHCisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjZW5k aWYKKworaW5saW5lIHZvaWQKK19Kdl9NdXRleEluaXQgKF9Kdl9NdXRleF90 ICptdSkKK3sKKyMgaWZkZWYgTE9DS19ERUJVRyAvKiBBc3N1bWVzIExpbnV4 dGhyZWFkcyAqLworICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7CisgIHB0 aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpOworICBwdGhyZWFkX211dGV4 YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sp OworICBwdGhyZWFkX211dGV4X2luaXQgKCZtdS0+bXV0ZXgsICZhdHRyKTsK KyMgZWxzZQorICBwdGhyZWFkX211dGV4X2luaXQgKCZtdS0+bXV0ZXgsIDAp OworIyBlbmRpZgorCisgIG11LT5jb3VudCA9IDA7CisgIG11LT5vd25lciA9 IDA7Cit9CisKK2V4dGVybiBpbnQgX0p2X011dGV4TG9jayAoX0p2X011dGV4 X3QgKik7CisKK2lubGluZSBpbnQKK19Kdl9NdXRleFVubG9jayAoX0p2X011 dGV4X3QgKm11KQoreworICBpZiAoX0p2X011dGV4Q2hlY2tNb25pdG9yICht dSkpCisgICAgeworIyAgICAgaWZkZWYgTE9DS19ERUJVRworCWZwcmludGYo c3RkZXJyLCAiX0p2X011dGV4VW5sb2NrOiBOb3Qgb3duZXJcbiIpOworCWZv ciAoOzspIHt9CisjICAgICBlbmRpZgorICAgICAgcmV0dXJuIDE7CisgICAg fQorICAgIAorICBtdS0+Y291bnQtLTsKKworICBpZiAobXUtPmNvdW50ID09 IDApCisgICAgeworICAgICAgbXUtPm93bmVyID0gMDsKKyMgICAgIGlmZGVm IExPQ0tfREVCVUcKKwlpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91bmxv Y2sgKCZtdS0+bXV0ZXgpOworCWlmICgwICE9IHJlc3VsdCkKKwkgIHsKKwkg ICAgZnByaW50ZihzdGRlcnIsICJQdGhyZWFkX211dGV4X3VubG9jayByZXR1 cm5lZCAlZFxuIiwgcmVzdWx0KTsKKwkgICAgZm9yICg7Oykge30KKwkgIH0K KyMgICAgIGVsc2UKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZt dS0+bXV0ZXgpOworIyAgICAgZW5kaWYKKyAgICB9CisgIHJldHVybiAwOwor fQorCisjaWZuZGVmIExJTlVYX1RIUkVBRFMKKworLy8gcHRocmVhZF9tdXRl eF9kZXN0cm95IGRvZXMgbm90aGluZyBvbiBMaW51eCBhbmQgaXQgaXMgYSB3 aW4gdG8gYXZvaWQKKy8vIGRlZmluaW5nIHRoaXMgbWFjcm8uCisKKyNkZWZp bmUgX0p2X0hhdmVNdXRleERlc3Ryb3kKKworaW5saW5lIHZvaWQgCitfSnZf TXV0ZXhEZXN0cm95IChfSnZfTXV0ZXhfdCAqbXUpCit7CisgIHB0aHJlYWRf bXV0ZXhfZGVzdHJveSAoJm11LT5tdXRleCk7Cit9CisKKyNlbmRpZiAvKiBM SU5VWF9USFJFQURTICovCisKKy8vCisvLyBUaHJlYWQgY3JlYXRpb24gYW5k IG1hbmlwdWxhdGlvbi4KKy8vCisKK3ZvaWQgX0p2X0luaXRUaHJlYWRzICh2 b2lkKTsKKworX0p2X1RocmVhZF90ICpfSnZfVGhyZWFkSW5pdERhdGEgKGph dmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkKTsKK3ZvaWQgX0p2X1RocmVhZERl c3Ryb3lEYXRhIChfSnZfVGhyZWFkX3QgKmRhdGEpOworCitpbmxpbmUgamF2 YTo6bGFuZzo6VGhyZWFkICoKK19Kdl9UaHJlYWRDdXJyZW50ICh2b2lkKQor eworICBleHRlcm4gcHRocmVhZF9rZXlfdCBfSnZfVGhyZWFkS2V5OworICBy ZXR1cm4gKGphdmE6Omxhbmc6OlRocmVhZCAqKSBwdGhyZWFkX2dldHNwZWNp ZmljIChfSnZfVGhyZWFkS2V5KTsKK30KKworI2lmZGVmIEpWX0hBU0hfU1lO Q0hST05JWkFUSU9OCisvLyBTaG91bGQgYmUgc3BlY2lhbGl6ZWQgdG8ganVz dCBsb2FkIHRoZSAiY3VycmVudCB0aHJlYWQiIHJlZ2lzdGVyCisvLyBvbiBw bGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0LiAgIFNwZWVkIGlzIG9mIHRoZSBl c3NlbmNlLiAgVGhlIHZhbHVlCisvLyBvZiB0aGUgZGVzY3JpcHRvciBpcyBu b3QsIHNvIGxvbmcgYXMgdGhlcmUgaXMgYSBvbmUtdG8tb25lIGNvcnJlc3Bv bmRlbmNlCisvLyB0byB0aHJlYWRzLgorCisKKyNpZmRlZiBfX2lhNjRfXwor Cit0eXBlZGVmIHNpemVfdCBfSnZfVGhyZWFkSWRfdDsKKworcmVnaXN0ZXIg c2l6ZV90IF9Kdl9zZWxmIF9fYXNtX18oInIxMyIpOworCS8vIEZvciBsaW51 eF90aHJlYWRzIHRoaXMgaXMgcmVhbGx5IGEgcG9pbnRlciB0byBpdHMgdGhy ZWFkIGRhdGEKKwkvLyBzdHJ1Y3R1cmUuICBXZSB0cmVhdCBpdCBhcyBvcGFx dWUuICBUaGF0IHNob3VsZCBhbHNvIHdvcmsKKwkvLyBvbiBvdGhlciBvcGVy YXRpbmcgc3lzdGVtcyB0aGF0IGZvbGxvdyB0aGUgQUJJIHN0YW5kYXJkLgor CisvLyBUaGlzIHNob3VsZCBiZWNvbWUgdGhlIHByb3RvdHlwZSBmb3IgbWFj aGluZXMgdGhhdCBtYWludGFpbiBhIHRocmVhZAorLy8gcG9pbnRlciBpbiBh IHJlZ2lzdGVyLgoraW5saW5lIF9Kdl9UaHJlYWRJZF90CitfSnZfVGhyZWFk U2VsZiAodm9pZCkKK3sKKyAgcmV0dXJuIF9Kdl9zZWxmOworfQorCisjZGVm aW5lIEpWX1NFTEZfREVGSU5FRAorCisjZW5kaWYgLyogX19pYTY0X18gKi8K KworI2lmZGVmIF9fYWxwaGFfXworCit0eXBlZGVmIHZvaWQgKl9Kdl9UaHJl YWRJZF90OworCitpbmxpbmUgX0p2X1RocmVhZElkX3QKK19Kdl9UaHJlYWRT ZWxmICh2b2lkKQoreworICByZXR1cm4gX19idWlsdGluX3RocmVhZF9wb2lu dGVyICgpOworfQorCisjZGVmaW5lIEpWX1NFTEZfREVGSU5FRAorCisjZW5k aWYgLyogX19hbHBoYV9fICovCisKKyNpZiBkZWZpbmVkKFNMT1dfUFRIUkVB RF9TRUxGKQorCisjaW5jbHVkZSAic3lzZGVwL2xvY2tzLmgiCisKK3R5cGVk ZWYgcHRocmVhZF90IF9Kdl9UaHJlYWRJZF90OworCisvLyBFLmcuIG9uIFg4 NiBMaW51eCwgcHRocmVhZF9zZWxmKCkgaXMgdG9vIHNsb3cgZm9yIG91ciBw dXJwb3NlLgorLy8gSW5zdGVhZCB3ZSBtYWludGFpbiBhIGNhY2hlIGJhc2Vk IG9uIHRoZSBjdXJyZW50IHNwIHZhbHVlLgorLy8gVGhpcyBpcyBzaW1pbGFy IHRvIHdoYXQncyBkb25lIGZvciB0aHJlYWQgbG9jYWwgYWxsb2NhdGlvbiBp biB0aGUKKy8vIEdDLCBvbmx5IGZhciBzaW1wbGVyLgorLy8gVGhpcyBjb2Rl IHNob3VsZCBwcm9iYWJseSBnbyBhd2F5IHdoZW4gTGludXgvWDg2IHN0YXJ0 cyB1c2luZyBhCisvLyBzZWdtZW50IHJlZ2lzdGVyIHRvIGhvbGQgdGhlIHRo cmVhZCBpZC4KKyMgZGVmaW5lIExPR19USFJFQURfU1BBQ0lORyAxMgorCQkJ Ly8gSWYgdHdvIHRocmVhZCBwb2ludGVyIHZhbHVlcyBhcmUgY2xvc2VyIHRo YW4KKwkJCS8vIDEgPDwgTE9HX1RIUkVBRF9TUEFDSU5HLCB3ZSBhc3N1bWUg dGhleSBiZWxvbmcKKwkJCS8vIHRvIHRoZSBzYW1lIHRocmVhZC4KKyMgZGVm aW5lIFNFTEZfQ0FDSEVfU0laRSAxMDI0CisjIGRlZmluZSBTQ19JTkRFWChz cCkgKCgodW5zaWduZWQgbG9uZykoc3ApID4+IDE5KSAmIChTRUxGX0NBQ0hF X1NJWkUtMSkpCisJCSAgICAgICAgLy8gTWFwcGluZyBmcm9tIHNwIHZhbHVl IHRvIGNhY2hlIGluZGV4LgorCQkJLy8gTm90ZSB0aGF0IHRoaXMgaXMgbm90 IGluIGFueSByZWFsIHNlbnNlIGEgaGFzaAorCQkJLy8gZnVuY3Rpb24sIHNp bmNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBjbGVhcgorCQkJLy8gYWxsIHBv c3NpYmx5IG1hdGNoaW5nIHNsb3RzIG9uIHRocmVhZCBzdGFydHVwLgorCQkJ Ly8gVGh1cyBhbGwgZW50cmllcyB0aGF0IG1pZ2h0IGNvcnJlc3BvbmQgdG8K KwkJCS8vIGEgZ2l2ZW4gdGhyZWFkIGFyZSBpbnRlbnRpb25hbGx5IGNvbnRp Z3VvdXMuCisJCQkvLyBXb3JrcyB3ZWxsIHdpdGggYW55dGhpbmcgdGhhdCBh bGxvY2F0ZXMgYXQgbGVhc3QKKwkJCS8vIDUxMktCIHN0YWNrcy4KKyMgZGVm aW5lIFNDX0NMRUFSX01JTiAoLTE2KQkvLyBXaGVuIHN0YXJ0aW5nIGEgbmV3 IHRocmVhZCwgd2UgY2xlYXIKKyMgZGVmaW5lIFNDX0NMRUFSX01BWCAwCQkv LyBhbGwgc2VsZiBjYWNoZSBlbnRyaWVzIGJldHdlZW4KKwkJCQkvLyBTQ19J TkRFWChzcCkrU0NfQ0xFQVJfTUlOIGFuZAorCQkJCS8vIFNDX0lOREVYKHNw KStTQ19DTEVBUl9NQVggdG8gZW5zdXJlCisJCQkJLy8gd2UgbmV2ZXIgc2Vl IHN0YWxlIHZhbHVlcy4gIFRoZQorCQkJCS8vIGN1cnJlbnQgdmFsdWVzIGFz c3VtZSBhIGRvd253YXJkCisJCQkJLy8gZ3Jvd2luZyBzdGFjayBvZiBzaXpl IDw9IDcuNSBNQi4KKyMgZGVmaW5lIEJBRF9ISUdIX1NQX1ZBTFVFICgoc2l6 ZV90KSgtMSkpCisKK2V4dGVybiB2b2xhdGlsZQorc3RydWN0IHNlbGZfY2Fj aGVfZW50cnkgeworICBzaXplX3QgaGlnaF9zcF9iaXRzOwkvLyBzcCB2YWx1 ZSA+PiBMT0dfVEhSRUFEX1NQQUNJTkcKKyAgcHRocmVhZF90IHNlbGY7CS8v IENvcnJlc3BvbmRpbmcgdGhyZWFkCit9IF9Kdl9zZWxmX2NhY2hlW107CisK K3ZvaWQgX0p2X1NlbGZfQ2FjaGVfSW5pdCgpOworCitfSnZfVGhyZWFkSWRf dAorX0p2X1RocmVhZFNlbGZfb3V0X29mX2xpbmUodm9sYXRpbGUgc2VsZl9j YWNoZV9lbnRyeSAqc2NlLAorCQkJICAgc2l6ZV90IGhpZ2hfc3BfYml0cyk7 CisgIAoraW5saW5lIF9Kdl9UaHJlYWRJZF90CitfSnZfVGhyZWFkU2VsZiAo dm9pZCkKK3sKKyAgaW50IGR1bW15OworICBzaXplX3Qgc3AgPSAoc2l6ZV90 KSgmZHVtbXkpOworICB1bnNpZ25lZCBoID0gU0NfSU5ERVgoc3ApOworICB2 b2xhdGlsZSBzZWxmX2NhY2hlX2VudHJ5ICpzY2UgPSBfSnZfc2VsZl9jYWNo ZSArIGg7CisgIHB0aHJlYWRfdCBjYW5kaWRhdGVfc2VsZiA9IHNjZSAtPiBz ZWxmOyAgLy8gUmVhZCBtdXN0IHByZWNlZGUgZm9sbG93aW5nIG9uZS4KKyAg cmVhZF9iYXJyaWVyKCk7CisgIGlmIChzY2UgLT4gaGlnaF9zcF9iaXRzID09 IHNwID4+IExPR19USFJFQURfU1BBQ0lORykKKyAgICB7CisgICAgICAvLyBU aGUgc2NlIC0+IHNlbGYgdmFsdWUgd2UgcmVhZCBtdXN0IGJlIHZhbGlkLiAg QW4gaW50ZXJ2ZW5pbmcKKyAgICAgIC8vIGNhY2hlIHJlcGxhY2VtZW50IGJ5 IGFub3RoZXIgdGhyZWFkIHdvdWxkIGhhdmUgZmlyc3QgcmVwbGFjZWQKKyAg ICAgIC8vIGhpZ2hfc3BfYml0cyBieSBzb21ldGhpbmcgZWxzZSwgYW5kIGl0 IGNhbid0IHBvc3NpYmx5IGNoYW5nZQorICAgICAgLy8gYmFjayB3aXRob3V0 IG91ciBpbnRlcnZlbnRpb24uCisgICAgICByZXR1cm4gY2FuZGlkYXRlX3Nl bGY7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIF9Kdl9UaHJlYWRTZWxm X291dF9vZl9saW5lKHNjZSwgc3AgPj4gTE9HX1RIUkVBRF9TUEFDSU5HKTsK K30KKworI2RlZmluZSBKVl9TRUxGX0RFRklORUQKKworI2VuZGlmIC8qIFNM T1dfUFRIUkVBRF9TRUxGICovCisKKyNpZm5kZWYgSlZfU0VMRl9ERUZJTkVE IC8qIElmIGFsbCBlbHNlIGZhaWxzLCBjYWxsIHB0aHJlYWRfc2VsZiBkaXJl Y3RseSAqLworCit0eXBlZGVmIHB0aHJlYWRfdCBfSnZfVGhyZWFkSWRfdDsK KworaW5saW5lIF9Kdl9UaHJlYWRJZF90CitfSnZfVGhyZWFkU2VsZiAodm9p ZCkKK3sKKyAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOworfQorCisjZW5kaWYg LyogIUpWX1NFTEZfREVGSU5FRCAqLworCisjZW5kaWYgLyogSlZfSEFTSF9T WU5DSFJPTklaQVRJT04gKi8KKworaW5saW5lIF9Kdl9UaHJlYWRfdCAqCitf SnZfVGhyZWFkQ3VycmVudERhdGEgKHZvaWQpCit7CisgIGV4dGVybiBwdGhy ZWFkX2tleV90IF9Kdl9UaHJlYWREYXRhS2V5OworICByZXR1cm4gKF9Kdl9U aHJlYWRfdCAqKSBwdGhyZWFkX2dldHNwZWNpZmljIChfSnZfVGhyZWFkRGF0 YUtleSk7Cit9CisKK2lubGluZSB2b2lkCitfSnZfVGhyZWFkWWllbGQgKHZv aWQpCit7CisjaWZkZWYgSEFWRV9TQ0hFRF9ZSUVMRAorICBzY2hlZF95aWVs ZCAoKTsKKyNlbmRpZiAvKiBIQVZFX1NDSEVEX1lJRUxEICovCit9CisKK3Zv aWQgX0p2X1RocmVhZFJlZ2lzdGVyIChfSnZfVGhyZWFkX3QgKmRhdGEpOwor dm9pZCBfSnZfVGhyZWFkVW5SZWdpc3RlciAoKTsKKwordm9pZCBfSnZfVGhy ZWFkU2V0UHJpb3JpdHkgKF9Kdl9UaHJlYWRfdCAqZGF0YSwgamludCBwcmlv KTsKKwordm9pZCBfSnZfVGhyZWFkU3RhcnQgKGphdmE6Omxhbmc6OlRocmVh ZCAqdGhyZWFkLCBfSnZfVGhyZWFkX3QgKmRhdGEsCisJCSAgICAgIF9Kdl9U aHJlYWRTdGFydEZ1bmMgKm1ldGgpOworCit2b2lkIF9Kdl9UaHJlYWRXYWl0 ICh2b2lkKTsKKwordm9pZCBfSnZfVGhyZWFkSW50ZXJydXB0IChfSnZfVGhy ZWFkX3QgKmRhdGEpOworCisvLyBwYXJrKCkgLyB1bnBhcmsoKSBzdXBwb3J0 CisKK3N0cnVjdCBQYXJrSGVscGVyCit7CisgIHZvbGF0aWxlIG9ial9hZGRy X3QgcGVybWl0OworICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CisgIHB0aHJl YWRfY29uZF90IGNvbmQ7CisgIAorICB2b2lkIGluaXQgKCk7CisgIHZvaWQg ZGVhY3RpdmF0ZSAoKTsKKyAgdm9pZCBkZXN0cm95ICgpOworICB2b2lkIHBh cmsgKGpib29sZWFuIGlzQWJzb2x1dGUsIGpsb25nIHRpbWUpOworICB2b2lk IHVucGFyayAoKTsKK307CisKK2lubGluZSB2b2lkCitQYXJrSGVscGVyOjpk ZXN0cm95ICgpCit7CisgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoJm11dGV4 KTsKKyAgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKCZjb25kKTsKK30KKworI2Vu ZGlmIC8qIF9fSlZfUE9TSVhfVEhSRUFEU19fICovCkluZGV4OiBjb25maWd1 cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlndXJlCShyZXZp c2lvbiAxNzIyMjQpCisrKyBjb25maWd1cmUJKHdvcmtpbmcgY29weSkKQEAg LTY4OCw2ICs2ODgsOCBAQAogVVNJTkdfTk9fVEhSRUFEU19UUlVFCiBVU0lO R19XSU4zMl9USFJFQURTX0ZBTFNFCiBVU0lOR19XSU4zMl9USFJFQURTX1RS VUUKK1VTSU5HX1JURU1TX1RIUkVBRFNfRkFMU0UKK1VTSU5HX1JURU1TX1RI UkVBRFNfVFJVRQogVVNJTkdfUE9TSVhfVEhSRUFEU19GQUxTRQogVVNJTkdf UE9TSVhfVEhSRUFEU19UUlVFCiBUSFJFQURDWFhGTEFHUwpAQCAtMjA3MDQs NiArMjA3MDYsMTYgQEAKICAgICA7OwogIHdpbjMyKQogICAgIDs7CisgcnRl bXMpCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxIiA+ PmNvbmZkZWZzLmgKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTkVUSU5FVF9J Tl9IIDEiID4+Y29uZmRlZnMuaAorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9B UlBBX0lORVRfSCAxIiA+PmNvbmZkZWZzLmgKKyRhc19lY2hvICIjZGVmaW5l IEhBVkVfTkVUREJfSCAxIiA+PmNvbmZkZWZzLmgKKyRhc19lY2hvICIjZGVm aW5lIEhBVkVfU1lTX0lPQ1RMX0ggMSIgPj5jb25mZGVmcy5oCiskYXNfZWNo byAiI2RlZmluZSBIQVZFX05FVF9JRl9IIDEiID4+Y29uZmRlZnMuaAorJGFz X2VjaG8gIiNkZWZpbmUgSEFWRV9JRkFERFJTX0ggMSIgPj5jb25mZGVmcy5o CiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxIiA+PmNv bmZkZWZzLmgKKyAgICA7OwogIGRlY29zZjEgfCBpcml4IHwgbWFjaCB8IG9z MiB8IGRjZSB8IHZ4d29ya3MpCiAgICAgYXNfZm5fZXJyb3IgInRocmVhZCBw YWNrYWdlICRUSFJFQURTIG5vdCB5ZXQgc3VwcG9ydGVkIiAiJExJTkVOTyIg NQogICAgIDs7CkBAIC0yMDgwOSw3ICsyMDgyMSw5IEBACiAgICAgIyBjb250 ZXh0cyBvdXJzZWx2ZXMuCiAgICAgVEhSRUFEU1RBUlRGSUxFU1BFQz0nY3J0 bXQlTyVzJwogICAgIDs7Ci0KKyBydGVtcykKKyAgICBUSFJFQURIPXJ0ZW1z LXRocmVhZHMuaAorICAgIDs7CiAgbm9uZSkKICAgICBUSFJFQURIPW5vLXRo cmVhZHMuaAogICAgIDs7CkBAIC0yMDgzOSw2ICsyMDg1MywxNCBAQAogICBV U0lOR19XSU4zMl9USFJFQURTX0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgIiRU SFJFQURTIiA9IHJ0ZW1zOyB0aGVuCisgIFVTSU5HX1JURU1TX1RIUkVBRFNf VFJVRT0KKyAgVVNJTkdfUlRFTVNfVEhSRUFEU19GQUxTRT0nIycKK2Vsc2UK KyAgVVNJTkdfUlRFTVNfVEhSRUFEU19UUlVFPScjJworICBVU0lOR19SVEVN U19USFJFQURTX0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgIiRUSFJFQURTIiA9 IG5vbmU7IHRoZW4KICAgVVNJTkdfTk9fVEhSRUFEU19UUlVFPQogICBVU0lO R19OT19USFJFQURTX0ZBTFNFPScjJwpAQCAtMjUxNDQsNiArMjUxNjYsMTAg QEAKICAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiVVNJTkdfV0lOMzJf VEhSRUFEU1wiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1l YW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHku IiAiJExJTkVOTyIgNQogZmkKK2lmIHRlc3QgLXogIiR7VVNJTkdfUlRFTVNf VEhSRUFEU19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0lOR19SVEVNU19USFJF QURTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFs IFwiVVNJTkdfUlRFTVNfVEhSRUFEU1wiIHdhcyBuZXZlciBkZWZpbmVkLgor VXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2Vk IGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKIGlmIHRlc3QgLXog IiR7VVNJTkdfTk9fVEhSRUFEU19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0lO R19OT19USFJFQURTX0ZBTFNFfSI7IHRoZW4KICAgYXNfZm5fZXJyb3IgImNv bmRpdGlvbmFsIFwiVVNJTkdfTk9fVEhSRUFEU1wiIHdhcyBuZXZlciBkZWZp bmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBp bnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQpJbmRleDogamF2 YS9sYW5nL25hdENsYXNzLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGphdmEvbGFuZy9uYXRDbGFzcy5jYwkocmV2aXNpb24gMTcyMjI0KQorKysg amF2YS9sYW5nL25hdENsYXNzLmNjCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc5 LDYgKzE2NzksMTAgQEAKICAgcmV0dXJuIE5VTEw7CiB9CiAKKyNpZiBkZWZp bmVkKF9fcnRlbXNfXykKKyMgdW5kZWYgSEFWRV9UTFMKKyNlbmRpZgorCiAj aWZkZWYgSEFWRV9UTFMKIAogLy8gTk9URTogTUNBQ0hFX1NJWkUgc2hvdWxk IGJlIGEgcG93ZXIgb2YgMiBtaW51cyBvbmUuCkluZGV4OiBqYXZhL25ldC9u YXRWTUluZXRBZGRyZXNzUG9zaXguY2MKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gamF2YS9uZXQvbmF0Vk1JbmV0QWRkcmVzc1Bvc2l4LmNjCShyZXZp c2lvbiAxNzIyMjQpCisrKyBqYXZhL25ldC9uYXRWTUluZXRBZGRyZXNzUG9z aXguY2MJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDEwIEBACiAjZW5k aWYKIAogI2lmbmRlZiBIQVZFX0dFVEhPU1ROQU1FX0RFQ0wKKyNpZiAhZGVm aW5lZChfX3J0ZW1zX18pCiBleHRlcm4gIkMiIGludCBnZXRob3N0bmFtZSAo Y2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOwogI2VuZGlmCisjZW5kaWYKIAog anN0cmluZwogamF2YTo6bmV0OjpWTUluZXRBZGRyZXNzOjpnZXRMb2NhbEhv c3RuYW1lICgpCkluZGV4OiBNYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBNYWtlZmlsZS5hbQkocmV2aXNpb24gMTcyMjI0KQorKysg TWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2ICs0NzgsMTAg QEAKIGxpYmdjal9sYV9TT1VSQ0VTICs9IHdpbjMyLXRocmVhZHMuY2MKIGVu ZGlmCiAKK2lmIFVTSU5HX1JURU1TX1RIUkVBRFMKK2xpYmdjal9sYV9TT1VS Q0VTICs9IHJ0ZW1zLXRocmVhZHMuY2MKK2VuZGlmCisKIGlmIFVTSU5HX05P X1RIUkVBRFMKIGxpYmdjal9sYV9TT1VSQ0VTICs9IG5vLXRocmVhZHMuY2MK IGVuZGlmCg== --000e0cd2429854017204a7475df9--