delorie.com/archives/browse.cgi | search |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sources.redhat.com/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs> |
Sender: | cygwin-owner AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
Delivered-To: | mailing list cygwin AT cygwin DOT com |
X-Envelope-To: | cygwin AT cygwin DOT com |
Message-ID: | <55216.212.0.200.4.1073846861.mtc@mail.moldtelecom.md> |
Date: | Sun, 11 Jan 2004 20:47:41 +0200 (EET) |
Subject: | Unix pipes implemented successfully |
From: | linamat AT moldtelecom DOT md |
To: | cygwin AT cygwin DOT com |
User-Agent: | Moldtelecom Mail System |
MIME-Version: | 1.0 |
Note-from-DJ: | This may be spam |
------=_20040111204741_71200 Content-Type: text/plain; charset="windows-1251" Content-Transfer-Encoding: 8bit I have working FIFO implementation for Cygwin-1.5.5-1 based on materials shared by Robert Collins (many thanks to him). It was tested on WinXP, Win2k, Win3k. For tests I used my code as well as some third-party fifo tests. I need this kind of IPC for my current software development. Does exist any posibility to incorporate this patch in next Cygwin release? With respect, Sergey Samsi Internet service S.A. Moldtelecom (+373)22542597 GSM: 69115719 ------=_20040111204741_71200 Content-Type: application/octet-stream; name="cygwin-1.5.5-1_fifo.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="cygwin-1.5.5-1_fifo.patch" KioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9DaGFuZ2VM b2cJU2F0IFNlcCAyMCAyMjo1MTo1MyAyMDAzCi0tLSBjeWd3aW4tMS41LjUt MS93aW5zdXAvY3lnd2luL0NoYW5nZUxvZwlTdW4gSmFuIDExIDE5OjI5OjIw IDIwMDQKKioqKioqKioqKioqKioqCioqKiAxLDMgKioqKgotLS0gMSw0MCAt LS0tCisgMjAwNC0wMS0xMSAgU2VyZ2V5IFNhbXNpICA8bGluYW1hdEBtb2xk dGVsZWNvbS5tZD4KKyAJICAgIFRoYW5rcyB0byBSb2JlcnQgQ29sbGlucyA8 cm9iZXJ0LmNvbGxpbnNAaXRkb21haW4uY29tLmF1PgorIAorIAkqIGRldmlj ZXMuaCAoRkhfRklGTyk6IE5ldyBjb25zdGFudCBkZWZpbml0aW9uLgorIAkq IGR0YWJsZS5jYyAoYnVpbGRfZmhhbmRsZXIpOiBDb25zdHJ1Y3QgRklGTyBm aGFuZGxlci4KKyAJKGR0YWJsZTo6cmVsZWFzZSk6IERldGVjdCBGSUZPIGZp bGUgdHlwZS4KKyAJKiBkdGFibGUuaCAoaWZpZm8pOiBOZXcgZnVuY3Rpb24g ZGVjbGFyYXRpb24uCisgCSogZmhhbmRsZXIuY2MgKGZoYW5kbGVyX2Jhc2U6 OmZzdGF0KTogQWRkIFNfSUZJRk8uCisgCSogZmhhbmRsZXIuaCAoRkhfRklG Tyk6IE5ldyBkZXZpY2UgZGVmaW5pdGlvbi4KKyAJKEZJRk9fTUFQXyopOiBO ZXcgY29uc3RhbnQgZGVmaW5pdGlvbnMuCisgCShnZXRfZmlmb19wKTogTmV3 IGZ1bmN0aW9uLgorIAkoc2V0X2ZpZm9fcCk6IE5ldyBmdW5jdGlvbi4KKyAJ KGlzX2ZpZm8pOiBOZXcgZnVuY3Rpb24uCisgCShmaWZvX2d1YXJkKTogTmV3 IGNsYXNzLgorIAkoZmhhbmRsZXJfZmlmbyk6IE5ldyBjbGFzcy4KKyAJKF9f Zmlmbyk6IE5ldyBmdW5jdGlvbi4KKyAJKiBmaGFuZGxlcl9kaXNrX2ZpbGUu Y2MgKG9wZW4pOiBTZXQgRklGTyBmbGFnIGlmIG5lZWQuCisgCShmaGFuZGxl cl9kaXNrX2ZpbGU6OmZzdGF0X2hlbHBlcik6IFNldCBTX0lGSUZPLgorIAkq IGZoYW5kbGVyX2ZpZm8uY2MgOiBOZXcgZmlsZS4gVW5peCBuYW1lZCBwaXBl cyBpbXBsZW1lbnRhdGlvbi4KKyAJKiBmaGFuZGxlcl92aXJ0dWFsLmNjIChv cGVuKTogUmVtb3ZlIEZJRk8gZmxhZyBpZiBuZWVkLgorIAkqIHBhdGguY2Mg OiBEZXRlY3QgRklGTyBieSBmaWxlIG1hcmtlci4KKyAJKiBwYXRoLmggOiBT b21lIGNvbnN0YW50IGRlZmluaXRpb25zLi4KKyAJKiBzZWxlY3QuY2MgOiBV bml4IG5hbWVkIHBpcGVzIHN1cHBvcnQuCisgCShmaGFuZGxlcl9maWZvOjpz ZWxlY3RfcmVhZCk6IE5ldyBmdW5jdGlvbi4KKyAJKGZoYW5kbGVyX2ZpZm86 OnJlYWR5X2Zvcl9yZWFkKTogTmV3IGZ1bmN0aW9uLgorIAkoZmhhbmRsZXJf Zmlmbzo6c2VsZWN0X3dyaXRlKTogTmV3IGZ1bmN0aW9uLgorIAkoZmhhbmRs ZXJfZmlmbzo6c2VsZWN0X2V4Y2VwdCk6IE5ldyBmdW5jdGlvbi4KKyAJKHBl ZWtfZmlmbyk6IE5ldyBmdW5jdGlvbi4KKyAJKHN0YXJ0X3RocmVhZF9maWZv KTogTmV3IGZ1bmN0aW9uLgorIAkodGhyZWFkX2ZpZm8pOiBOZXcgZnVuY3Rp b24uCisgCShmaWZvX2NsZWFudXApOiBOZXcgZnVuY3Rpb24uCisgCShmaWZv aW5mKTogTmV3IHN0cnVjdC4KKyAJKiBzeXNjYWxscy5jYyAobWtmaWZvKTog UmVwbGFjZSBzdHViIHdpdGggRklGTyBjcmVhdGluZyBwcm9jZWR1cmUuCisg CShfbWtmaWZvKTogQWRkIGFsaWFzIG9mIG1rZmlmby4KKyAJKGNob3duX3dv cmtlcik6IFN1cHBvcnQgRklGT3MuCisgCShzdGF0X3dvcmtlcik6IFN1cHBv cnQgRklGT3MuCisgCiAgMjAwMy0wOS0yMCAgQ2hyaXN0b3BoZXIgRmF5bG9y ICA8Y2dmQHJlZGhhdC5jb20+CiAgCiAgCSogc3Bhd24uY2MgKHB0aHJlYWRf Y2xlYW51cCk6IE5ldyBzdHJ1Y3QuCioqKiBjeWd3aW4tMS41LjUtMV9vcmln L3dpbnN1cC9jeWd3aW4vTWFrZWZpbGUuaW4JU2F0IFNlcCAyMCAyMjo1MTo1 MyAyMDAzCi0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL01ha2Vm aWxlLmluCVN1biBKYW4gMTEgMTk6Mjk6MjAgMjAwNAoqKioqKioqKioqKioq KioKKioqIDU5LDY0ICoqKioKLS0tIDU5LDY1IC0tLS0KICBmaGFuZGxlcl9j bGlwYm9hcmRfQ0ZMQUdTOj0tZm9taXQtZnJhbWUtcG9pbnRlcgogIGZoYW5k bGVyX2NvbnNvbGVfQ0ZMQUdTOj0tZm9taXQtZnJhbWUtcG9pbnRlcgogIGZo YW5kbGVyX2Rpc2tfZmlsZV9DRkxBR1M6PS1mb21pdC1mcmFtZS1wb2ludGVy CisgZmhhbmRsZXJfZmlmb19DRkxBR1M6PS1mb21pdC1mcmFtZS1wb2ludGVy CiAgZmhhbmRsZXJfZHNwX0NGTEFHUzo9LWZvbWl0LWZyYW1lLXBvaW50ZXIK ICBmaGFuZGxlcl9mbG9wcHlfQ0ZMQUdTOj0tZm9taXQtZnJhbWUtcG9pbnRl cgogIGZoYW5kbGVyX21lbV9DRkxBR1M6PS1mb21pdC1mcmFtZS1wb2ludGVy CioqKioqKioqKioqKioqKgoqKiogMTUyLDE1OCAqKioqCiAgCWRlYnVnLm8g ZGVscXVldWUubyBkaXIubyBkbGZjbi5vIGRsbF9pbml0Lm8gZHRhYmxlLm8g ZW52aXJvbi5vIFwKICAJZXJybm8ubyBleGNlcHRpb25zLm8gZXhlYy5vIGV4 dGVybmFsLm8gZmNudGwubyBmaGFuZGxlci5vIFwKICAJZmhhbmRsZXJfY2xp cGJvYXJkLm8gZmhhbmRsZXJfY29uc29sZS5vIGZoYW5kbGVyX2Rpc2tfZmls ZS5vIFwKISAJZmhhbmRsZXJfZHNwLm8gZmhhbmRsZXJfZmxvcHB5Lm8gZmhh bmRsZXJfbWVtLm8gXAogIAlmaGFuZGxlcl9wcm9jLm8gZmhhbmRsZXJfcHJv Y2Vzcy5vIGZoYW5kbGVyX3JhbmRvbS5vIFwKICAJZmhhbmRsZXJfcmF3Lm8g ZmhhbmRsZXJfcmVnaXN0cnkubyBmaGFuZGxlcl9zZXJpYWwubyBcCiAgCWZo YW5kbGVyX3NvY2tldC5vIGZoYW5kbGVyX3RhcGUubyBmaGFuZGxlcl90ZXJt aW9zLm8gXAotLS0gMTUzLDE1OSAtLS0tCiAgCWRlYnVnLm8gZGVscXVldWUu byBkaXIubyBkbGZjbi5vIGRsbF9pbml0Lm8gZHRhYmxlLm8gZW52aXJvbi5v IFwKICAJZXJybm8ubyBleGNlcHRpb25zLm8gZXhlYy5vIGV4dGVybmFsLm8g ZmNudGwubyBmaGFuZGxlci5vIFwKICAJZmhhbmRsZXJfY2xpcGJvYXJkLm8g ZmhhbmRsZXJfY29uc29sZS5vIGZoYW5kbGVyX2Rpc2tfZmlsZS5vIFwKISAJ ZmhhbmRsZXJfZmlmby5vIGZoYW5kbGVyX2RzcC5vIGZoYW5kbGVyX2Zsb3Bw eS5vIGZoYW5kbGVyX21lbS5vIFwKICAJZmhhbmRsZXJfcHJvYy5vIGZoYW5k bGVyX3Byb2Nlc3MubyBmaGFuZGxlcl9yYW5kb20ubyBcCiAgCWZoYW5kbGVy X3Jhdy5vIGZoYW5kbGVyX3JlZ2lzdHJ5Lm8gZmhhbmRsZXJfc2VyaWFsLm8g XAogIAlmaGFuZGxlcl9zb2NrZXQubyBmaGFuZGxlcl90YXBlLm8gZmhhbmRs ZXJfdGVybWlvcy5vIFwKKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3Vw L2N5Z3dpbi9kZXZpY2VzLmgJU3VuIEphbiAxMSAxODoxNzoyNiAyMDA0Ci0t LSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL2RldmljZXMuaAlNb24g RGVjIDIyIDE1OjE1OjA0IDIwMDMKKioqKioqKioqKioqKioqCioqKiA1OCw2 MyAqKioqCi0tLSA1OCw2NCAtLS0tCiAgICBGSF9QSVBFVyAgID0gMHgwMDAw MDAwYSwJLyogd3JpdGUgZW5kIG9mIGEgcGlwZSAqLwogICAgRkhfU09DS0VU ICA9IDB4MDAwMDAwMGIsCS8qIGlzIGEgc29ja2V0ICovCiAgICBGSF9XSU5E T1dTID0gMHgwMDAwMDAwYywJLyogaXMgYSB3aW5kb3cgKi8KKyAgIEZIX0ZJ Rk8gICAgPSAweDAwMDAwMDBkLAkvKiBpcyBhIG5hbWVkIHBpcGUgKi8KICAg IEZIX1NMT1cgICAgPSAweDAwMDAwMDEwLAkvKiAic2xvdyIgZGV2aWNlIGlm IGJlbG93IHRoaXMgKi8KICAKICAgIC8qIEZhc3QgZGV2aWNlcyAqLwoqKiog Y3lnd2luLTEuNS41LTFfb3JpZy93aW5zdXAvY3lnd2luL2R0YWJsZS5jYwlT dW4gSmFuIDExIDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dp bnN1cC9jeWd3aW4vZHRhYmxlLmNjCVR1ZSBEZWMgMjMgMTA6NTU6MzQgMjAw MwoqKioqKioqKioqKioqKioKKioqIDE4OCwxOTMgKioqKgotLS0gMTg4LDE5 NiAtLS0tCiAgCWNhc2UgRkhfU09DS0VUOgogIAkgIGRlY19uZWVkX2ZpeHVw X2JlZm9yZSAoKTsKICAJICBicmVhazsKKyAJY2FzZSBGSF9GSUZPOgorIAkg IC8vIGZpeG1lIGZpZm8gY2xlYW51cAorIAkgIGJyZWFrOwogIAl9CiAgICAg ICAgZGVsZXRlIGZkc1tmZF07CiAgICAgICAgZmRzW2ZkXSA9IE5VTEw7Cioq KioqKioqKioqKioqKgoqKiogMzAzLDMwOCAqKioqCi0tLSAzMDYsMzE2IC0t LS0KICAgICAgICBmaHMtPnNldF9hZGRyX2ZhbWlseSAoQUZfTE9DQUwpOwog ICAgICAgIGZocy0+c2V0X3N1bl9wYXRoIChwb3NpeF9wYXRoKTsKICAgICAg fQorICAgaWYgKHBjLmlzZmlmbygpKQorICAgICB7CisgICAgICAgZmhhbmRs ZXJfZmlmbyAqIGZocyA9IChmaGFuZGxlcl9maWZvICopIGZoOworICAgICAg IGZocy0+c2V0X3VuaXhfcGF0aCAocG9zaXhfcGF0aCk7CisgICAgIH0KICAg IHJldHVybiBmaDsKICB9CiAgCioqKioqKioqKioqKioqKgoqKiogMzUxLDM1 NiAqKioqCi0tLSAzNTksMzY3IC0tLS0KICAgICAgICBjYXNlIEZIX1BJUEVX OgogIAlmaCA9IGNuZXcgKGZoYW5kbGVyX3BpcGUpIChkZXYpOwogIAlicmVh azsKKyAgICAgICBjYXNlIEZIX0ZJRk86CisgCWZoID0gY25ldyAoZmhhbmRs ZXJfZmlmbykgKCk7CisgCWJyZWFrOwogICAgICAgIGNhc2UgRkhfU09DS0VU OgogIAlpZiAoKGZoID0gY25ldyAoZmhhbmRsZXJfc29ja2V0KSAodW5pdCkp KQogIAkgIGluY19uZWVkX2ZpeHVwX2JlZm9yZSAoKTsKKioqIGN5Z3dpbi0x LjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9kdGFibGUuaAlTdW4gSmFuIDEx IDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1cC9jeWd3 aW4vZHRhYmxlLmgJTW9uIERlYyAyMiAxOTo1Mjo1OSAyMDAzCioqKioqKioq KioqKioqKgoqKiogNDEsNDYgKioqKgotLS0gNDEsNDcgLS0tLQogICAgdm9p ZCBmaXh1cF9iZWZvcmVfZXhlYyAoRFdPUkQgd2luX3Byb2NfaWQpOwogICAg dm9pZCBmaXh1cF9iZWZvcmVfZm9yayAoRFdPUkQgd2luX3Byb2NfaWQpOwog ICAgdm9pZCBmaXh1cF9hZnRlcl9mb3JrIChIQU5ETEUpOworICAgaW50IGlm aWZvKEhBTkRMRSk7CiAgICBmaGFuZGxlcl9iYXNlICpidWlsZF9maGFuZGxl ciAoaW50IGZkLCBEV09SRCBkZXYsIGNvbnN0IGNoYXIgKnVuaXhfbmFtZSwK ICAJCQkJIGNvbnN0IGNoYXIgKndpbjMyX25hbWUgPSBOVUxMLCBpbnQgdW5p dCA9IC0xKTsKICAgIGZoYW5kbGVyX2Jhc2UgKmJ1aWxkX2ZoYW5kbGVyIChp bnQgZmQsIERXT1JEIGRldiwgY2hhciAqdW5peF9uYW1lID0gTlVMTCwKKioq IGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5j YwlTdW4gSmFuIDExIDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0x L3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuY2MJU2F0IEphbiAgMyAxMzo0NDo1 MSAyMDA0CioqKioqKioqKioqKioqKgoqKiogMTAwMCwxMDA1ICoqKioKLS0t IDEwMDAsMTAwNiAtLS0tCiAgICBzd2l0Y2ggKGdldF9kZXZpY2UgKCkpCiAg ICAgIHsKICAgICAgY2FzZSBGSF9QSVBFOgorICAgICBjYXNlIEZIX0ZJRk86 CiAgICAgICAgYnVmLT5zdF9tb2RlID0gU19JRklGTyB8IFNURF9SQklUUyB8 IFNURF9XQklUUyB8IFNfSVdHUlAgfCBTX0lXT1RIOwogICAgICAgIGJyZWFr OwogICAgICBjYXNlIEZIX1BJUEVXOgoqKiogY3lnd2luLTEuNS41LTFfb3Jp Zy93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgJU3VuIEphbiAxMSAxODoxNzoy NiAyMDA0Ci0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL2ZoYW5k bGVyLmgJU2F0IEphbiAxMCAxOTowMjo1NyAyMDA0CioqKioqKioqKioqKioq KgoqKiogNTgsNjMgKioqKgotLS0gNTgsNjQgLS0tLQogICAgRkhfUElQRVcg ICA9IDB4MDAwMDAwMGEsCS8qIHdyaXRlIGVuZCBvZiBhIHBpcGUgKi8KICAg IEZIX1NPQ0tFVCAgPSAweDAwMDAwMDBiLAkvKiBpcyBhIHNvY2tldCAqLwog ICAgRkhfV0lORE9XUyA9IDB4MDAwMDAwMGMsCS8qIGlzIGEgd2luZG93ICov CisgICBGSF9GSUZPICAgID0gMHgwMDAwMDAwZCwJLyogaXMgYSBuYW1lZCBw aXBlICovCiAgICBGSF9TTE9XICAgID0gMHgwMDAwMDAxMCwJLyogInNsb3ci IGRldmljZSBpZiBiZWxvdyB0aGlzICovCiAgCiAgICAvKiBGYXN0IGRldmlj ZXMgKi8KKioqKioqKioqKioqKioqCioqKiAxMTQsMTE5ICoqKioKLS0tIDEx NSwxMjEgLS0tLQogIGNsYXNzIHNlbGVjdF9yZWNvcmQ7CiAgY2xhc3MgcGF0 aF9jb252OwogIGNsYXNzIGZoYW5kbGVyX2Rpc2tfZmlsZTsKKyBjbGFzcyBm aGFuZGxlcl9maWZvOwogIHR5cGVkZWYgc3RydWN0IF9fRElSIERJUjsKICBz dHJ1Y3QgZGlyZW50OwogIHN0cnVjdCBpb3ZlYzsKKioqKioqKioqKioqKioq CioqKiAyNTgsMjYzICoqKioKLS0tIDI2MCwyNjkgLS0tLQogICAgdm9pZCBz ZXRfc29ja2V0X3AgKGludCB2YWwpIHsgRkhDT05EU0VURiAodmFsLCBMT0NB TCk7IH0KICAgIHZvaWQgc2V0X3NvY2tldF9wICgpIHsgRkhTRVRGIChMT0NB TCk7IH0KICAKKyAgIGJvb2wgZ2V0X2ZpZm9fcCAoKSB7IHJldHVybiBGSElT U0VURiAoRklGTyk7IH0KKyAgIHZvaWQgc2V0X2ZpZm9fcCAoaW50IHZhbCkg eyBGSENPTkRTRVRGICh2YWwsIEZJRk8pOyB9CisgICB2b2lkIHNldF9maWZv X3AgKCkgeyBGSFNFVEYgKEZJRk8pOyB9CisgCiAgICBib29sIGdldF9leGVj YWJsZV9wICgpIHsgcmV0dXJuIEZISVNTRVRGIChFWEVDQUJMKTsgfQogICAg dm9pZCBzZXRfZXhlY2FibGVfcCAoZXhlY3V0YWJsZV9zdGF0ZXMgdmFsKQog ICAgewoqKioqKioqKioqKioqKioKKioqIDM0NiwzNTEgKioqKgotLS0gMzUy LDM1OCAtLS0tCiAgICB2aXJ0dWFsIEJPT0wgaXNfZGV2aWNlICgpIHsgcmV0 dXJuIFRSVUU7IH0KICAgIHZpcnR1YWwgY2hhciAqcHRzbmFtZSAoKSB7IHJl dHVybiBOVUxMO30KICAgIHZpcnR1YWwgY2xhc3MgZmhhbmRsZXJfc29ja2V0 ICppc19zb2NrZXQgKCkgeyByZXR1cm4gMDsgfQorICAgdmlydHVhbCBjbGFz cyBmaGFuZGxlcl9maWZvICppc19maWZvICgpIHsgcmV0dXJuIDA7IH0KICAg IHZpcnR1YWwgY2xhc3MgZmhhbmRsZXJfY29uc29sZSAqaXNfY29uc29sZSAo KSB7IHJldHVybiAwOyB9CiAgICB2aXJ0dWFsIGludCBpc193aW5kb3dzICgp IHtyZXR1cm4gMDsgfQogIAoqKioqKioqKioqKioqKioKKioqIDQ5MCw0OTUg KioqKgotLS0gNDk3LDU2MSAtLS0tCiAgICBpbnQgcmVhZHlfZm9yX3JlYWQg KGludCBmZCwgRFdPUkQgaG93bG9uZyk7CiAgfTsKICAKKyBjbGFzcyBmaWZv X2d1YXJkCisgeworICAgcHVibGljOgorICAgdW5zaWduZWQgaW50IHJlYWRl cnMsIHdyaXRlcnM7CisgICB1bnNpZ25lZCBjaGFyIGVvdzsgICAgIAorICAg c2l6ZV90IGZkX29mZnNldDsKKyAgIHNpemVfdCBmZF9zejsKKyAgIHRpbWVz dHJ1Y190IG10aW07CisgICB1bnNpZ25lZCBpbnQgaXNhY3RpdmU7CisgfTsK KyAKKyBjbGFzcyBmaGFuZGxlcl9maWZvOiBwdWJsaWMgZmhhbmRsZXJfYmFz ZQorIHsKKyBwcml2YXRlOgorICAgdW5zaWduZWQgaW50IGlzcmVhZGVyLCBp c3dyaXRlcjsKKyAKKyAgIEhBTkRMRSBmaWxlbWFwOworICAgSEFORExFIF9v cGVuX2Jsb2NrOworICAgSEFORExFIF9hY3F1aXJlX3JlYWQ7CisgICBIQU5E TEUgX2lucHV0X211dGV4OworICAgSEFORExFIF9kb25lX3dyaXRlOworICAg SEFORExFIF9vdXRwdXRfbXV0ZXg7CisgICBIQU5ETEUgX2RhdGFfbXV0ZXg7 CisgICB2b2lkICpmZGF0YTsKKyAgIGNoYXIgKnVuaXhfcGF0aDsKKyAgIGNo YXIgZmlsZW1hcG5hbWVbTUFYX1BBVEhdOworICAgY2xhc3MgZmlmb19ndWFy ZCAqZ3VhcmQ7CisgICAKKyAgIGludCBzaHV0aGFuZGxlcyhpbnQpOworIAor IHB1YmxpYzoKKyAgIGZoYW5kbGVyX2ZpZm8gKCk7CisgICB+ZmhhbmRsZXJf ZmlmbyAoKTsKKyAKKyAgIGludCBnZXRfZmlmbyAoKSB7IHJldHVybiAoaW50 KSBnZXRfaGFuZGxlKCk7IH0KKyAgIGZoYW5kbGVyX2ZpZm8gKiBpc19maWZv ICgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgIHZvaWQgc2V0X3VuaXhfcGF0aCAo Y29uc3QgY2hhciAqdW5peF9wYXRoKTsKKyAgIGNoYXIgKmdldF91bml4X3Bh dGggKCkgeyByZXR1cm4gdW5peF9wYXRoOyB9CisgCisgICBpbnQgb3BlbiAo cGF0aF9jb252ICosIGludCBmbGFncywgbW9kZV90IG1vZGUpOworICAgdm9p ZCBfX3N0ZGNhbGwgcmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxlbikgX19h dHRyaWJ1dGVfXyAoKHJlZ3Bhcm0gKDMpKSk7CisgICBpbnQgX19zdGRjYWxs IGZzdGF0IChzdHJ1Y3QgX19zdGF0NjQgKmJ1ZiwgcGF0aF9jb252ICopIF9f YXR0cmlidXRlX18gKChyZWdwYXJtICgzKSkpOworICAgaW50IGlvY3RsICh1 bnNpZ25lZCBpbnQgY21kLCB2b2lkICopOworICAgX29mZjY0X3QgbHNlZWsg KF9vZmY2NF90LCBpbnQpOworICAgaW50IHdyaXRlIChjb25zdCB2b2lkICpw dHIsIHNpemVfdCBsZW4pOworICAgaW50IGNsb3NlICgpOworIAorICAgaW50 IGR1cCAoZmhhbmRsZXJfYmFzZSAqY2hpbGQpOworICAgdm9pZCBmaXh1cF9h ZnRlcl9mb3JrIChIQU5ETEUpOworICAgdm9pZCBmaXh1cF9hZnRlcl9leGVj IChIQU5ETEUpOworICAgSEFORExFIGdldF9ndWFyZCAoKSBjb25zdCB7IHJl dHVybiBfZGF0YV9tdXRleDsgfQorICAgSEFORExFIGdldF9ndWFyZG9iamVj dCAoKSBjb25zdCB7IHJldHVybiBndWFyZDsgfQorIAorICAgc2VsZWN0X3Jl Y29yZCAqc2VsZWN0X3JlYWQgKHNlbGVjdF9yZWNvcmQgKnMpOworICAgc2Vs ZWN0X3JlY29yZCAqc2VsZWN0X3dyaXRlIChzZWxlY3RfcmVjb3JkICpzKTsK KyAgIHNlbGVjdF9yZWNvcmQgKnNlbGVjdF9leGNlcHQgKHNlbGVjdF9yZWNv cmQgKnMpOworICAgaW50IHJlYWR5X2Zvcl9yZWFkIChpbnQgZmQsIERXT1JE IGhvd2xvbmcpOworIH07CisgCiAgY2xhc3MgZmhhbmRsZXJfZGV2X3Jhdzog cHVibGljIGZoYW5kbGVyX2Jhc2UKICB7CiAgIHByb3RlY3RlZDoKKioqKioq KioqKioqKioqCioqKiAxMjAxLDEyMDYgKioqKgotLS0gMTI2NywxMjczIC0t LS0KICAgIGNoYXIgX19kZXZfemVyb1tzaXplb2YgKGZoYW5kbGVyX2Rldl96 ZXJvKV07CiAgICBjaGFyIF9fZGlza19maWxlW3NpemVvZiAoZmhhbmRsZXJf ZGlza19maWxlKV07CiAgICBjaGFyIF9fcGlwZVtzaXplb2YgKGZoYW5kbGVy X3BpcGUpXTsKKyAgIGNoYXIgX19maWZvW3NpemVvZiAoZmhhbmRsZXJfZmlm byldOwogICAgY2hhciBfX3Byb2Nbc2l6ZW9mIChmaGFuZGxlcl9wcm9jKV07 CiAgICBjaGFyIF9fcHJvY2Vzc1tzaXplb2YgKGZoYW5kbGVyX3Byb2Nlc3Mp XTsKICAgIGNoYXIgX19wdHlfbWFzdGVyW3NpemVvZiAoZmhhbmRsZXJfcHR5 X21hc3RlcildOwoqKiogY3lnd2luLTEuNS41LTFfb3JpZy93aW5zdXAvY3ln d2luL2ZoYW5kbGVyX2Rpc2tfZmlsZS5jYwlTdW4gSmFuIDExIDE4OjE3OjI2 IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1cC9jeWd3aW4vZmhhbmRs ZXJfZGlza19maWxlLmNjCU1vbiBEZWMgMjIgMTY6MDc6NTIgMjAwMwoqKioq KioqKioqKioqKioKKioqIDI5NiwzMDEgKioqKgotLS0gMjk2LDMwMyAtLS0t CiAgICAgIH0KICAgIGVsc2UgaWYgKHBjLT5pc3NvY2tldCAoKSkKICAgICAg YnVmLT5zdF9tb2RlID0gU19JRlNPQ0s7CisgICBlbHNlIGlmIChwYy0+aXNm aWZvICgpKQorICAgICBidWYtPnN0X21vZGUgPSBTX0lGSUZPOwogIAogICAg aWYgKGdldF9maWxlX2F0dHJpYnV0ZSAocGMtPmhhc19hY2xzICgpLCBnZXRf d2luMzJfbmFtZSAoKSwgJmJ1Zi0+c3RfbW9kZSwKICAJCQkgICZidWYtPnN0 X3VpZCwgJmJ1Zi0+c3RfZ2lkKSA9PSAwKQoqKioqKioqKioqKioqKioKKioq IDQxNSw0MjAgKioqKgotLS0gNDE3LDQyMyAtLS0tCiAgICBzZXRfc3ltbGlu a19wIChyZWFsX3BhdGgtPmlzc3ltbGluayAoKSk7CiAgICBzZXRfZXhlY2Fi bGVfcCAocmVhbF9wYXRoLT5leGVjX3N0YXRlICgpKTsKICAgIHNldF9zb2Nr ZXRfcCAocmVhbF9wYXRoLT5pc3NvY2tldCAoKSk7CisgICBzZXRfZmlmb19w IChyZWFsX3BhdGgtPmlzZmlmbyAoKSk7CiAgCiAgb3V0OgogICAgc3lzY2Fs bF9wcmludGYgKCIlZCA9IGZoYW5kbGVyX2Rpc2tfZmlsZTo6b3BlbiAoJXMs ICVwKSIsIHJlcywKKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3VwL2N5 Z3dpbi9maGFuZGxlcl9maWZvLmNjCVRodSBKYW4gIDEgMDI6MDA6MDAgMTk3 MAotLS0gY3lnd2luLTEuNS41LTEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9m aWZvLmNjCVN1biBKYW4gMTEgMTc6NTA6MjEgMjAwNAoqKioqKioqKioqKioq KioKKioqIDAgKioqKgotLS0gMSwxMDM2IC0tLS0KKyAvKiBmaGFuZGxlcl9m aWZvLmNjOiBjb2RlIHRvIGVtdWxhdGUgVW5peCBGSUZPcworIAorICAgIENv cHlyaWdodCAyMDA0IFJlZCBIYXQsIEluYy4KKyAgICAKKyAgICBPcmlnaW5h bGx5IHdyaXR0ZW4gKGJ1dCBub3QgZnVsbCBmdW5jdGlvbmFsKQorICAgICBi eSBSb2JlcnQgQ29sbGlucyAocm9iZXJ0LmNvbGxpbnNAaXRkb21haW4uY29t LmF1KQorICAgIFJld3JpdHRlbiBieSBTZXJnZXkgU2Ftc2kgKGxpbmFtYXRA bW9sZHRlbGVjb20ubWQpCisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ3ln d2luLgorIAorIFRoaXMgc29mdHdhcmUgaXMgYSBjb3B5cmlnaHRlZCB3b3Jr IGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyBDeWd3aW4gbGlj ZW5zZS4gIFBsZWFzZSBjb25zdWx0IHRoZSBmaWxlICJDWUdXSU5fTElDRU5T RSIgZm9yCisgZGV0YWlscy4gKi8KKyAKKyAjaW5jbHVkZSAid2luc3VwLmgi CisgI2luY2x1ZGUgPHN5cy9mY250bC5oPgorICNpbmNsdWRlIDxzeXMvc29j a2V0Lmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRs aWIuaD4KKyAjaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgorICNpbmNsdWRlIDxz aWduYWwuaD4KKyAjaW5jbHVkZSAiY3lnZXJybm8uaCIKKyAjaW5jbHVkZSAi cGVycHJvY2Vzcy5oIgorICNpbmNsdWRlICJzZWN1cml0eS5oIgorICNpbmNs dWRlICJjeWd3aW4vdmVyc2lvbi5oIgorICNpbmNsdWRlICJmaGFuZGxlci5o IgorICNpbmNsdWRlICJwYXRoLmgiCisgI2luY2x1ZGUgImR0YWJsZS5oIgor ICNpbmNsdWRlICJjeWdoZWFwLmgiCisgI2luY2x1ZGUgInNoYXJlZF9pbmZv LmgiCisgI2luY2x1ZGUgInBpbmZvLmgiCisgI2luY2x1ZGUgPGFzc2VydC5o PgorICNpbmNsdWRlIDxjdHlwZS5oPgorIAorICNkZWZpbmUgRklGT19NQVBf U1ogMHgwMDAwMDIwMAorICNkZWZpbmUgRklGT19PUEVOX0VWRU5UICJvZSIK KyAjZGVmaW5lIEZJRk9fV1JJVEVfRVZFTlQgIndlIgorICNkZWZpbmUgRklG T19XUklURV9NVVRFWCAid20iCisgI2RlZmluZSBGSUZPX1JFQURfRVZFTlQg InJlIgorICNkZWZpbmUgRklGT19SRUFEX01VVEVYICJybSIKKyAjZGVmaW5l IEZJRk9fREFUQV9NVVRFWCAiZG0iCisgCisgc3RhdGljIHZvaWQKKyBzZWNy ZXRfbmFtZSAoY2hhciAqYnVmLCBjb25zdCBjaGFyICpmaWZvZm4sIGNvbnN0 IGNoYXIgKnNlY3JldF9wdHIsIF9faW5vNjRfdCBuYW1laGFzaCkKKyB7Cisg ICBfX3NtYWxsX3NwcmludGYgKGJ1ZiwgIiVzY3lnd2luLmZpZm8lcyVzLiVo dSIsCisgCQkgICB3aW5jYXAuaGFzX3Rlcm1pbmFsX3NlcnZpY2VzICgpID8g Ikdsb2JhbFxcIiA6ICIiLAorIAkJICAgZmlmb2ZuLCAoc2VjcmV0X3B0ciA9 PSBOVUxMKSA/ICIiOiBzZWNyZXRfcHRyLCBuYW1laGFzaCk7CisgfQorIAor IFdJTkFQSQorIERXT1JEIGdldHBmc3lzX3N6ICgpCisgeworICAgU1lTVEVN X0lORk8gc2k7CisgICBHZXRTeXN0ZW1JbmZvICgmc2kpOworICAgaWYgKHNp LmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5ID49IHNpemVvZiAoY2xhc3MgZmlm b19ndWFyZCkpCisgICAgIHJldHVybiBzaS5kd0FsbG9jYXRpb25HcmFudWxh cml0eTsKKyAgIGVsc2UKKyAgICAgcmV0dXJuIHNpLmR3QWxsb2NhdGlvbkdy YW51bGFyaXR5ICogCisgCSAoKHNpemVvZiAoY2xhc3MgZmlmb19ndWFyZCkg KyAxKSAvIHNpLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5KTsKKyB9CisgCisg ZmhhbmRsZXJfZmlmbzo6ZmhhbmRsZXJfZmlmbyAoKQorICAgOiBmaGFuZGxl cl9iYXNlIChGSF9GSUZPKQorIHsKKyAgIHVuaXhfcGF0aF9uYW1lID0gdW5p eF9wYXRoOworICAgaXNyZWFkZXIgPSBpc3dyaXRlciA9IDA7CisgICBzZXRf bmVlZF9mb3JrX2ZpeHVwICgpOworIH0KKyAKKyBmaGFuZGxlcl9maWZvOjp+ ZmhhbmRsZXJfZmlmbyAoKQorIHsKKyAgIHN5c2NhbGxfcHJpbnRmICgiZGlz cG9zZSBmaWZvIG9iamVjdCIpOworICAgaWYgKHVuaXhfcGF0aCkKKyAgICAg Y2ZyZWUgKHVuaXhfcGF0aCk7CisgICBzaHV0aGFuZGxlcyAoMSk7CisgfQor IAorIGludAorIGZoYW5kbGVyX2ZpZm86Om9wZW4gKHBhdGhfY29udiAqcnAs IGludCBmbGFncywgbW9kZV90IG1vZGUpCisgeworICBpbnQgcmVzID0gMCwg Zmlyc3RtYXAgPSAwOworICBjaGFyIGJ1ZltNQVhfUEFUSF07CisgIERXT1JE IHBmc3lzX29mZnNldDsKKyAgU0VDVVJJVFlfQVRUUklCVVRFUyAqc2EgPSAo bW9kZSAmIE9fTk9JTkhFUklUKSA/ICAmc2VjX25vbmVfbmloIDogJnNlY19u b25lOworICAKKyAgIHN5c2NhbGxfcHJpbnRmICgiYmVnaW4iKTsKKyAKKyAg IF9pbnB1dF9tdXRleCA9IF9vdXRwdXRfbXV0ZXggPSBOVUxMOworICAgc2V0 X2lvX2hhbmRsZSAoTlVMTCk7CisgICAKKyAgIGlmIChnZXRfZGV2aWNlICgp ICE9IEZIX0ZJRk8pCisgICB7CisgICAgIHNldF9lcnJubyAoRU5PREVWKTsK KyAgICAgZ290byBvdXQxOworICAgfQorICAgCisgICBpZiAoKGZsYWdzICYg T19DUkVBVCkgJiYgKGZsYWdzICYgT19FWENMKSkKKyAgIHsKKyAgICAgc2V0 X2Vycm5vIChFRVhJU1QpOworICAgICBnb3RvIG91dDE7CisgICB9CisgCisg ICBpZiAocnAtPmVycm9yICYmCisgICAgICAgKChmbGFncyAmIE9fTk9TWU1M SU5LKSB8fCAocnAtPmVycm9yICE9IEVOT0VOVCkgfHwgIShmbGFncyAmIE9f Q1JFQVQpKSkKKyAgIHsKKyAgICAgc2V0X2Vycm5vIChycC0+ZXJyb3IpOwor ICAgICBnb3RvIG91dDE7CisgICB9CisgICAKKyAgIGlmIChycC0+ZmlsZV9h dHRyaWJ1dGVzICgpICE9IChEV09SRCkgLTEpCisgICB7CisgICAgIGlmICgo IChmbGFncyAmIE9fV1JPTkxZKSB8fCAoZmxhZ3MgJiBPX1JEV1IpKSAmJgor ICAgICAgKHJwLT5oYXNfYXR0cmlidXRlIChGSUxFX0FUVFJJQlVURV9SRUFE T05MWSkpKQorICAgICB7CisgICAgICAgc2V0X2Vycm5vIChFQUNDRVMpOwor ICAgICAgIGdvdG8gb3V0MTsKKyAgICAgfQorICAgICBpZiAoKGZsYWdzICYg T19ESVJPUEVOKSB8fCAocnAtPmhhc19hdHRyaWJ1dGUgKEZJTEVfQVRUUklC VVRFX0RJUkVDVE9SWSkpKQorICAgICB7CisgICAgICAgc2V0X2Vycm5vIChF SVNESVIpOworICAgICAgIGdvdG8gb3V0MTsKKyAgICAgfQorICAgfQorIAor ICAgc3dpdGNoIChmbGFncyAmIChPX1JET05MWSB8IE9fV1JPTkxZIHwgT19S RFdSKSkgeworICAgICBjYXNlIE9fUkRPTkxZOgorIAlpc3JlYWRlciA9IDE7 CisgCXN5c2NhbGxfcHJpbnRmICgiaXNyZWFkZXIiKTsKKyAJYnJlYWs7Cisg ICAgIGNhc2UgT19XUk9OTFk6CisgCWlzd3JpdGVyID0gMTsKKyAJc3lzY2Fs bF9wcmludGYgKCJpc3dyaXRlciIpOworIAlicmVhazsKKyAgICAgZGVmYXVs dDoKKyAJaXNyZWFkZXIgPSAxOworIAlpc3dyaXRlciA9IDE7CisgCXN5c2Nh bGxfcHJpbnRmICgiaXNyZWFkZXImd3JpdGVyIik7CisgICB9CisgCisgICBz ZXRfZmxhZ3MgKGZsYWdzLCBycCA/IHJwLT5iaW5tb2RlICgpIDogMCk7Cisg CisgICBzZWNyZXRfbmFtZSAoZmlsZW1hcG5hbWUsIGdldF9uYW1lICgpLCBO VUxMLCBnZXRfbmFtZWhhc2ggKCkpOworICAgcGZzeXNfb2Zmc2V0ID0gZ2V0 cGZzeXNfc3ogKCk7CisgICAKKyAgIGZpbGVtYXAgPSBOVUxMOworICAgaWYg KCEoZmlsZW1hcCA9IE9wZW5GaWxlTWFwcGluZyAoRklMRV9NQVBfQUxMX0FD Q0VTUywgVFJVRSwgZmlsZW1hcG5hbWUpKSkKKyAgIHsKKyAgICAgaWYgKChm aWxlbWFwID0gQ3JlYXRlRmlsZU1hcHBpbmcgKElOVkFMSURfSEFORExFX1ZB TFVFLCBzYSwgUEFHRV9SRUFEV1JJVEUsIAorIAkgICAgMCwgcGZzeXNfb2Zm c2V0ICsgRklGT19NQVBfU1osIGZpbGVtYXBuYW1lKSkgPT0gTlVMTCkKKyAg ICAgeworIAlfX3NldGVycm5vICgpOworIAlzeXNjYWxsX3ByaW50ZiAoIkNy ZWF0ZUZpbGVNYXBwaW5nICgpIGZpZm8gZmFpbGVkIik7CisgCWdvdG8gb3V0 MjsKKyAgICAgfSBlbHNlCisgCWZpcnN0bWFwID0gMTsKKyAgIH0gZWxzZSBz eXNjYWxsX3ByaW50ZiAoIk9wZW5GaWxlTWFwcGluZyAoKSBmaWZvIHN1Y2Nl c3MiKTsKKyAgIFByb3RlY3RIYW5kbGUgKGZpbGVtYXApOworICAgCisgICBf YWNxdWlyZV9yZWFkID0gTlVMTDsKKyAgIHNlY3JldF9uYW1lIChidWYsIGdl dF9uYW1lICgpLCBGSUZPX1JFQURfRVZFTlQsIGdldF9uYW1laGFzaCAoKSk7 CisgICBpZiAoIShfYWNxdWlyZV9yZWFkID0gQ3JlYXRlRXZlbnQgKHNhLCBG QUxTRSwgRkFMU0UsIGJ1ZikpKQorICAgICBnb3RvIG91dDI7CisgICBQcm90 ZWN0SGFuZGxlIChfYWNxdWlyZV9yZWFkKTsKKyAKKyAgIGlmIChpc3dyaXRl cikKKyAgIHsKKyAgICAgX291dHB1dF9tdXRleCA9IE5VTEw7CisgICAgIHNl Y3JldF9uYW1lIChidWYsIGdldF9uYW1lICgpLCBGSUZPX1dSSVRFX01VVEVY LCBnZXRfbmFtZWhhc2ggKCkpOworICAgICBpZiAoIShfb3V0cHV0X211dGV4 ID0gQ3JlYXRlTXV0ZXggKHNhLCBGQUxTRSwgYnVmKSkpCisgCWdvdG8gb3V0 MjsKKyAgICAgUHJvdGVjdEhhbmRsZSAoX291dHB1dF9tdXRleCk7CisgICB9 CisgICAKKyAgIGlmIChpc3JlYWRlcikKKyAgIHsKKyAgICAgX2lucHV0X211 dGV4ID0gTlVMTDsKKyAgICAgc2VjcmV0X25hbWUgKGJ1ZiwgZ2V0X25hbWUg KCksIEZJRk9fUkVBRF9NVVRFWCwgZ2V0X25hbWVoYXNoICgpKTsKKyAgICAg aWYgKCEoX2lucHV0X211dGV4ID0gQ3JlYXRlTXV0ZXggKHNhLCBGQUxTRSwg YnVmKSkpCisgCWdvdG8gb3V0MjsKKyAgICAgUHJvdGVjdEhhbmRsZSAoX2lu cHV0X211dGV4KTsKKyAgIH0KKyAgIAorICAgX2RhdGFfbXV0ZXggPSBOVUxM OworICAgc2VjcmV0X25hbWUgKGJ1ZiwgZ2V0X25hbWUgKCksIEZJRk9fREFU QV9NVVRFWCwgZ2V0X25hbWVoYXNoICgpKTsKKyAgIGlmICghKF9kYXRhX211 dGV4ID0gQ3JlYXRlTXV0ZXggKHNhLCBGQUxTRSwgYnVmKSkpCisgICAgIGdv dG8gb3V0MjsKKyAgIFByb3RlY3RIYW5kbGUgKF9kYXRhX211dGV4KTsKKyAg IAorICAgX2RvbmVfd3JpdGUgPSBOVUxMOworICAgc2VjcmV0X25hbWUgKGJ1 ZiwgZ2V0X25hbWUgKCksIEZJRk9fV1JJVEVfRVZFTlQsIGdldF9uYW1laGFz aCAoKSk7CisgICBpZiAoIShfZG9uZV93cml0ZSA9IENyZWF0ZUV2ZW50IChz YSwgVFJVRSwgRkFMU0UsIGJ1ZikpKQorICAgICBnb3RvIG91dDI7CisgICBQ cm90ZWN0SGFuZGxlIChfZG9uZV93cml0ZSk7CisgICAKKyAgIHN5c2NhbGxf cHJpbnRmICgiQ3JlYXRlTXV0ZXggKCkgZmlmbyBzdWNjZXNzIik7CisgCisg ICBndWFyZCA9IE5VTEw7CisgICBpZiAoKGd1YXJkID0gKGNsYXNzIGZpZm9f Z3VhcmQgKikgTWFwVmlld09mRmlsZSAoZmlsZW1hcCwKKyAgICBGSUxFX01B UF9XUklURSwgMCwgMCwgMCkpID09IE5VTEwpCisgICB7CisgICAgIF9fc2V0 ZXJybm8gKCk7CisgICAgIHN5c2NhbGxfcHJpbnRmICgiTWFwVmlld09mRmls ZSAoKSBmaWZvIGVycm9yIik7CisgICAgIGdvdG8gb3V0MjsKKyAgIH0KKyAg IHN5c2NhbGxfcHJpbnRmICgiTWFwVmlld09mRmlsZSAoKSBmaWZvIHN1Y2Nl c3MiKTsKKyAKKyAgIGZkYXRhID0gTlVMTDsKKyAgIGlmICghKGZkYXRhID0g TWFwVmlld09mRmlsZSAoZmlsZW1hcCwgCisgICAgKGlzcmVhZGVyICYmICFp c3dyaXRlcikgPyBGSUxFX01BUF9SRUFEIDogRklMRV9NQVBfV1JJVEUsCisg ICAgMCwgcGZzeXNfb2Zmc2V0LCBGSUZPX01BUF9TWikpKQorICAgeworICAg ICBfX3NldGVycm5vICgpOworICAgICBnb3RvIG91dDI7CisgICB9CisgICBz eXNjYWxsX3ByaW50ZiAoIk1hcFZpZXdPZkZpbGUgKCkgZmlmbyBzdWNjZXNz Iik7CisgICAKKyAgIC8qIGV4Y2x1c2l2ZSBsb2NrICovCisgICBpZiAoaXN3 cml0ZXIgJiYgKGd1YXJkLT53cml0ZXJzKSAmJiAoZmxhZ3MgJiBPX0VYQ0wp KQorICAgeworICAgICBzZXRfZXJybm8gKEVBQ0NFUyk7CisgICAgIGdvdG8g b3V0MjsKKyAgIH0KKyAgIAorICAgaWYgKGlzX25vbmJsb2NraW5nICgpICYm IGlzd3JpdGVyICYmICghaXNyZWFkZXIpICYmICghZ3VhcmQtPnJlYWRlcnMp KQorICAgeworICAgICBzZXRfZXJybm8gKEVOWElPKTsKKyAgICAgZ290byBv dXQyOworICAgfQorIAorICAgaWYgKGZpcnN0bWFwKSB7CisgICAgIGd1YXJk LT5yZWFkZXJzID0gaXNyZWFkZXI7CisgICAgIGd1YXJkLT53cml0ZXJzID0g aXN3cml0ZXI7CisgICAgIGd1YXJkLT5tdGltLnR2X3NlYyA9IGd1YXJkLT5t dGltLnR2X25zZWMgPSAwOworICAgICBndWFyZC0+ZmRfb2Zmc2V0ID0gZ3Vh cmQtPmZkX3N6ID0gZ3VhcmQtPmlzYWN0aXZlID0gMDsKKyAgIH0gZWxzZQor ICAgeworICAgICBndWFyZC0+cmVhZGVycyArPSBpc3JlYWRlcjsKKyAgICAg Z3VhcmQtPndyaXRlcnMgKz0gaXN3cml0ZXI7CisgICAgIGlmIChndWFyZC0+ cmVhZGVycyAmJiBndWFyZC0+d3JpdGVycykKKyAgICAgICBndWFyZC0+aXNh Y3RpdmUgPSAwOworICAgfQorIAorICAgLyogaGFuZGxlIEZJRk8gb3BlbiAo KSdzIGJsb2NraW5nIGlmIGFub3RoZXIgZW5kIGlzIG5vdCBwcmVzZW50ICov CisgICBzZWNyZXRfbmFtZSAoYnVmLCBnZXRfbmFtZSAoKSwgRklGT19PUEVO X0VWRU5ULCBnZXRfbmFtZWhhc2ggKCkpOworICAgLyogY3JlYXRlIGEgbWFu dWFsLXJlc2V0IGV2ZW50IG9iamVjdCAqLworICAgaWYgKChfb3Blbl9ibG9j ayA9IENyZWF0ZUV2ZW50IChzYSwgVFJVRSwgRkFMU0UsIGJ1ZikpID09IE5V TEwpCisgICAgIGdvdG8gb3V0MjsKKyAKKyAgIGlmIChpc3dyaXRlcikKKyAg ICAgeworIAlpZiAoIWlzX25vbmJsb2NraW5nICgpICYmICFpc3JlYWRlciAm JgorIAkgIWd1YXJkLT5yZWFkZXJzICYmICFndWFyZC0+ZmRfc3opCisgCSAg ICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfb3Blbl9ibG9jaywgSU5GSU5JVEUp OworIAlpZiAoZ3VhcmQtPndyaXRlcnMgPT0gMSkKKyAJICAgIFB1bHNlRXZl bnQgKF9vcGVuX2Jsb2NrKTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsK KyAJaWYgKCFpc19ub25ibG9ja2luZyAoKSAmJiAhaXN3cml0ZXIgJiYKKyAJ ICFndWFyZC0+d3JpdGVycyAmJiAhZ3VhcmQtPmZkX3N6KQorIAkgICAgV2Fp dEZvclNpbmdsZU9iamVjdCAoX29wZW5fYmxvY2ssIElORklOSVRFKTsKKyAJ aWYgKGd1YXJkLT5yZWFkZXJzID09IDEpCisgCSAgICBQdWxzZUV2ZW50IChf b3Blbl9ibG9jayk7CisgICAgIH0KKyAgIENsb3NlSGFuZGxlIChfb3Blbl9i bG9jayk7CisgCisgICBzZXRfaW9faGFuZGxlIChmZGF0YSk7CisgICBzZXRf ZnNfZmxhZ3MgKHJwLT5mc19mbGFncyAoKSk7CisgICBzZXRfaGFzX2FjbHMg KHJwLT5oYXNfYWNscyAoKSk7CisgICBzZXRfaXNyZW1vdGUgKHJwLT5pc3Jl bW90ZSAoKSk7CisgICBzZXRfc3ltbGlua19wIChycC0+aXNzeW1saW5rICgp KTsKKyAgIHNldF9leGVjYWJsZV9wICgpOworICAgc2V0X29wZW5fc3RhdHVz ICgpOworICAgaWYgKG1vZGUgJiBPX05PSU5IRVJJVCkKKyAgICAgc2V0X2Ns b3NlX29uX2V4ZWMgKDEpOworIAorICAgcmVzID0gMTsKKyAgIHNldF9vcGVu X3N0YXR1cyAoKTsKKyAgIAorICAgcmV0dXJuIHJlczsKKyAgIAorICAgb3V0 MjoKKyAgICAgcmVzID0gc2h1dGhhbmRsZXMgKHJlcyk7CisgCisgICBvdXQx OgorICAgICByZXR1cm4gcmVzOworIH0KKyAKKyBpbnQKKyBmaGFuZGxlcl9m aWZvOjpmc3RhdCAoc3RydWN0IF9fc3RhdDY0ICpidWYsIHBhdGhfY29udiAq cGMpCisgeworICBpbnQgcmVzID0gLTE7CisgIEhBTkRMRSBsZmlsZW1hcCA9 IE5VTEw7CisgCisgICBpZiAoZ2V0X3VuaXhfcGF0aCAoKSkgLyogc3RhdCAo KSAqLworICAgeworICAgICBwYXRoX2NvbnYgc3BjIChnZXRfdW5peF9wYXRo ICgpLCBQQ19TWU1fTk9GT0xMT1cgfCBQQ19OVUxMRU1QVFkgfCBQQ19GVUxM LAorIAkJICAgICBOVUxMKTsKKyAgICAgZmhhbmRsZXJfYmFzZSAqZmggPSBj eWdoZWFwLT5mZHRhYi5idWlsZF9maGFuZGxlciAoLTEsIEZIX0RJU0ssCisg CQkJCQkJCSBnZXRfdW5peF9wYXRoICgpLAorIAkJCQkJCQkgc3BjLCAwKTsK KyAgICAgaWYgKGZoKQorICAgICB7CisgCXJlcyA9IGZoLT5mc3RhdCAoYnVm LCAmc3BjKTsKKyAJYnVmLT5zdF9yZGV2ID0gMDsKKyAJCisgCXNlY3JldF9u YW1lIChmaWxlbWFwbmFtZSwgZmgtPmdldF9uYW1lICgpLCBOVUxMLCBnZXRf bmFtZWhhc2ggKCkpOworICAgCisgCWlmICghZ3VhcmQpIGlmICgobGZpbGVt YXAgPSBPcGVuRmlsZU1hcHBpbmcgKEZJTEVfTUFQX1JFQUQsCisgCQkJCQkg ICAgVFJVRSwgZmlsZW1hcG5hbWUpKSkKKyAJICAgIGd1YXJkID0gKGNsYXNz IGZpZm9fZ3VhcmQgKikgTWFwVmlld09mRmlsZSAobGZpbGVtYXAsCisgCQkJ CQlGSUxFX01BUF9SRUFELCAwLCAwLCAwKTsKKyAgICAgfQorICAgICAKKyAg ICAgZ290byBvdXQ7CisgICB9CisgCisgICByZXMgPSBmaGFuZGxlcl9iYXNl Ojpmc3RhdCAoYnVmLCBwYyk7CisgICBpZiAoIXJlcykgLyogZnN0YXQgKCkg Ki8KKyAgICAgeworIAkgIGJ1Zi0+c3RfZGV2ID0gMDsKKyAJICBidWYtPnN0 X2lubyA9IChfX2lubzY0X3QpICgoRFdPUkQpIGdldF9oYW5kbGUgKCkpOwor IAkgIGJ1Zi0+c3RfbW9kZSA9IFNfSUZTT0NLIHwgU19JUldYVSB8IFNfSVJX WEcgfCBTX0lSV1hPOworICAgICB9CisgCisgICBvdXQ6CisgICAKKyAgICAg dGltZV9hc190aW1lc3RydWNfdCAoJmJ1Zi0+c3RfYXRpbSk7CisgICAgIGlm IChndWFyZCkKKyAgICAgeworIAkvKiBjb3JyZWN0IG1vZGlmaWNhdGlvbiB0 aW1lIGF0IGxlYXN0IHdoaWxlIEZJRk8gaXMgYWN0aXZlICovCisgCWlmIChn dWFyZC0+bXRpbS50dl9zZWMpIGJ1Zi0+c3RfbXRpbSA9IGd1YXJkLT5tdGlt OworIAkvKiBjdXJyZW50IEZJRk8gb2NjdXBpZWQgc3BhY2UgKi8gICAgCisg CWJ1Zi0+c3Rfc2l6ZSA9IGd1YXJkLT5mZF9zejsKKyAJaWYgKGxmaWxlbWFw KSAvKiBpZiBmaWxlIHdhcyBtYXBwZWQgZnJvbSBzdGF0ICgpICovCisgCXsK KyAJICAgIFVubWFwVmlld09mRmlsZSAoZ3VhcmQpOworIAkgICAgZ3VhcmQg PSBOVUxMOworIAkgICAgQ2xvc2VIYW5kbGUgKGxmaWxlbWFwKTsKKyAJICAg IGZpbGVtYXAgPSBOVUxMOworIAl9CisgICAgIH0KKyAgICAgZWxzZQorIAli dWYtPnN0X3NpemUgPSAwOworICAgICAKKyAgICAgYnVmLT5zdF9ibG9ja3Mg PSAoYnVmLT5zdF9zaXplICsgYnVmLT5zdF9ibGtzaXplIC0gMSkgLyBidWYt PnN0X2Jsa3NpemU7CisgCisgICAgIHJldHVybiByZXM7CisgfQorIAorIGlu dAorIGZoYW5kbGVyX2ZpZm86OnNodXRoYW5kbGVzIChpbnQgcHJldl9yZXMp IHsKKyAgaW50IHJlcyA9IHByZXZfcmVzOworICAKKyAgIGlmIChndWFyZCAm JiAoZ3VhcmQtPnJlYWRlcnMgPiAxKSAmJiAoZ3VhcmQtPndyaXRlcnMgPiAx KSkKKyAgIHsKKyAgICAgaWYgKChfb3Blbl9ibG9jaykgJiYgKCFDbG9zZUhh bmRsZSAoX29wZW5fYmxvY2spKSkKKyAgICAgeworIAlyZXMgPSAwOworIAlz ZXRfZXJybm8gKEVCQURGKTsKKyAgICAgfQorICAgICBfb3Blbl9ibG9jayA9 IE5VTEw7CisgICB9CisgCisgICBpZiAoaXN3cml0ZXIpCisgICB7CisgICAg IGlmICgoX291dHB1dF9tdXRleCkgJiYgKCFGb3JjZUNsb3NlSGFuZGxlIChf b3V0cHV0X211dGV4KSkpCisgICAgIHsKKyAJcmVzID0gMDsKKyAJc2V0X2Vy cm5vIChFQkFERik7CisgICAgIH0KKyAgICAgX291dHB1dF9tdXRleCA9IE5V TEw7CisgICB9CisgCisgICBpZiAoaXNyZWFkZXIpCisgICB7CisgICAgIGlm ICgoX2lucHV0X211dGV4KSAmJiAoIUZvcmNlQ2xvc2VIYW5kbGUgKF9pbnB1 dF9tdXRleCkpKQorICAgICB7CisgCXJlcyA9IDA7CisgCXNldF9lcnJubyAo RUJBREYpOworICAgICB9CisgICAgIF9pbnB1dF9tdXRleCA9IE5VTEw7Cisg ICB9CisgCisgICBpZiAoKF9kb25lX3dyaXRlKSAmJiAoIUZvcmNlQ2xvc2VI YW5kbGUgKF9kb25lX3dyaXRlKSkpCisgICB7CisgICAgIHJlcyA9IDA7Cisg ICAgIHNldF9lcnJubyAoRUJBREYpOworICAgfQorICAgX2RvbmVfd3JpdGUg PSBOVUxMOworIAorICAgaWYgKGd1YXJkICYmICFndWFyZC0+cmVhZGVycyAm JiAhZ3VhcmQtPndyaXRlcnMpCisgICB7CisgICAgIGlmICgoX2FjcXVpcmVf cmVhZCkgJiYgKCFGb3JjZUNsb3NlSGFuZGxlIChfYWNxdWlyZV9yZWFkKSkp CisgICAgIHsKKyAJcmVzID0gMDsKKyAJc2V0X2Vycm5vIChFQkFERik7Cisg ICAgIH0KKyAgICAgX2FjcXVpcmVfcmVhZCA9IE5VTEw7CisgCisgICAgIGlm ICgoX2RhdGFfbXV0ZXgpICYmICghRm9yY2VDbG9zZUhhbmRsZSAoX2RhdGFf bXV0ZXgpKSkKKyAgICAgeworIAlyZXMgPSAwOworIAlzZXRfZXJybm8gKEVC QURGKTsKKyAgICAgfQorICAgICBfZGF0YV9tdXRleCA9IE5VTEw7CisgCisg ICAgIGlmICgoZ3VhcmQpICYmICghVW5tYXBWaWV3T2ZGaWxlIChndWFyZCkp KQorICAgICB7CisgCXJlcyA9IDA7CisgCXNldF9lcnJubyAoRUJBREYpOwor ICAgICB9CisgICAgIGd1YXJkID0gTlVMTDsKKyAKKyAgICAgaWYgKChmZGF0 YSkgJiYgKCFVbm1hcFZpZXdPZkZpbGUgKGZkYXRhKSkpCisgICAgIHsKKyAg ICAgICAgIHJlcyA9IDA7CisgICAgICAgICBzZXRfZXJybm8gKEVCQURGKTsK KyAgICAgfQorICAgICBmZGF0YSA9IE5VTEw7CisgCisgICAgIGlmICgoZmls ZW1hcCkgJiYgKCFGb3JjZUNsb3NlSGFuZGxlIChmaWxlbWFwKSkpCisgICAg IHsKKyAJcmVzID0gMDsKKyAJc2V0X2Vycm5vIChFQkFERik7CisgICAgIH0K KyAgICAgZmlsZW1hcCA9IE5VTEw7CisgICB9CisgICAKKyAgIHNldF9pb19o YW5kbGUgKE5VTEwpOworIAorICAgcmV0dXJuIHJlczsKKyB9CisgCisgaW50 CisgZmhhbmRsZXJfZmlmbzo6Y2xvc2UgKCkKKyB7CisgIGludCByZXMgPSAw OworICAgCisgICBzeXNjYWxsX3ByaW50ZiAoImNsb3NpbmcuLi4iKTsKKyAg IGlmICghZmlsZW1hcCkKKyAgIHsKKyAgICAgc2V0X2Vycm5vIChFQkFERik7 CisgICAgIHJldHVybiByZXM7CisgICB9CisgICBlbHNlCisgICB7CisgICAg IC8qIGZpeG1lIHNob3VsZCB0aGlzIGJlIEludGVybG9ja2VkSW5jcmVtZW50 PyAqLworICAgICBpZiAoaXNyZWFkZXIpIGd1YXJkLT5yZWFkZXJzLS07Cisg ICAgIGlmIChpc3dyaXRlcikgZ3VhcmQtPndyaXRlcnMtLTsKKyAgICAgICAK KyAgICAgaWYgKCEoZ3VhcmQtPnJlYWRlcnMpIHx8ICEoZ3VhcmQtPndyaXRl cnMpKQorICAgICB7CisgCWd1YXJkLT5pc2FjdGl2ZSA9IDI7CS8vIGFub3Ro ZXIgRklGTyBlbmQgd2FzIGNsb3NlZDsKKyAJUHVsc2VFdmVudCAoX2FjcXVp cmVfcmVhZCk7CisgCVB1bHNlRXZlbnQgKF9kb25lX3dyaXRlKTsKKyAgICAg fQorICAgICByZXMgPSBzaHV0aGFuZGxlcyAoMSk7CisgICB9CisgCisgICBy ZXR1cm4gcmVzOworIH0KKyAKKyBpbnQKKyBmaGFuZGxlcl9maWZvOjp3cml0 ZSAoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQorIHsKKyAgIHVuc2ln bmVkIGludCB0OworICAgc2l6ZV90IGFjdHVhbF9sZW5ndGg7CisgICBzaXpl X3QgY3VycmVudF9wb3NpdGlvbiA9IDA7CisgCisgICBzeXNjYWxsX3ByaW50 ZiAoImJlZ2luICVkICVkIiwgaXNyZWFkZXIsIGlzd3JpdGVyKTsKKyAgIGlm ICghaXN3cml0ZXIgfHwgKGxlbiA8PSAwKSB8fCAobGVuID49IFNTSVpFX01B WCkpCisgICB7CisgICAgIHNldF9lcnJubyAoRUlOVkFMKTsKKyAgICAgcmV0 dXJuIC0xOworICAgfQorIAorICAgaWYgKCFmaWxlbWFwIHx8ICFmZGF0YSB8 fCAhX291dHB1dF9tdXRleCB8fAorICAgICFfZGF0YV9tdXRleCB8fCAhX2Rv bmVfd3JpdGUgfHwgIV9hY3F1aXJlX3JlYWQpCisgICB7CisgICAgIHN5c2Nh bGxfcHJpbnRmICgiYmFkIGZkIik7CisgICAgIHNldF9lcnJubyAoRUJBREYp OworICAgICByZXR1cm4gLTE7CisgICB9CisgCisgICBpZiAoaXNfbm9uYmxv Y2tpbmcgKCkpCisgICAgIGlmICghZ3VhcmQtPnJlYWRlcnMpCisgICAgIHsK KyAgICAgICBzZXRfZXJybm8gKEVQSVBFKTsKKyAgICAgICByYWlzZSAoU0lH UElQRSk7CisgICAgICAgcmV0dXJuIC0xOworICAgICB9CisgCisgICBzeXNj YWxsX3ByaW50ZiAoIndyaXRlICV4LCAlZCIsIGJ1ZiwgbGVuKTsKKyAgIHQg PSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfb3V0cHV0X211dGV4LCBJTkZJTklU RSk7CisgICBpZiAodCA9PSBXQUlUX09CSkVDVF8wKQorICAgeworICAgICBz eXNjYWxsX3ByaW50ZiAoIndlIGhhdmUgdGhlIF9vdXRwdXRfbXV0ZXggJWQg IiwgR2V0TGFzdEVycm9yICgpKTsKKyAgICAgYWN0dWFsX2xlbmd0aCA9IDA7 CisgICAgIGN1cnJlbnRfcG9zaXRpb24gPSAwOworICAgICBpZiAoIWd1YXJk LT5yZWFkZXJzKQorICAgICB7CisgCVJlbGVhc2VNdXRleCAoX291dHB1dF9t dXRleCk7CisgICAgICAgICBzZXRfZXJybm8gKEVQSVBFKTsKKyAgICAgICAg IHJhaXNlIChTSUdQSVBFKTsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAg fQorICAgICBzeXNjYWxsX3ByaW50ZiAoIndhaXQgZm9yIHRoZSBfZGF0YV9t dXRleCAlZCAiLCBHZXRMYXN0RXJyb3IgKCkpOworICAgICB0ID0gV2FpdEZv clNpbmdsZU9iamVjdCAoX2RhdGFfbXV0ZXgsIElORklOSVRFKTsKKyAgICAg aWYgKHQgIT0gV0FJVF9PQkpFQ1RfMCkKKyAgICAgeworIAlpZiAodCA9PSBX QUlUX0FCQU5ET05FRCkKKyAJICBSZWxlYXNlTXV0ZXggKF9kYXRhX211dGV4 KTsKKyAJc3lzY2FsbF9wcmludGYKKyAJICAgICgidW5hYmxlIHRvIGdldCBf ZGF0YV9tdXRleCAtIGJhZCBleGl0IG9uIEZJRk8/ICVkICVkICIsCisgCSAg ICAgdCwgR2V0TGFzdEVycm9yICgpKTsKKyAJZ290byByZXRyeTsKKyAgICAg fQorICAgICBpZiAoIWd1YXJkLT5yZWFkZXJzKQorIAlnb3RvIGVycnBpcGU7 CisgICAgIHdoaWxlIChjdXJyZW50X3Bvc2l0aW9uIDwgbGVuKQorICAgICB7 CisgCXN5c2NhbGxfcHJpbnRmICgiaXMgdGhlcmUgYW55IHF1ZXVlZCBkYXRh ID8gIik7CisgCXdoaWxlIChndWFyZC0+ZmRfc3ogJiYgKGd1YXJkLT5pc2Fj dGl2ZSA8IDIpKQorIAl7CisgCSAgICBzeXNjYWxsX3ByaW50ZiAoInllcywg c3RpbGwgJWQgYnl0ZXMgaW4gRklGTyIsIGd1YXJkLT5mZF9zeik7CisgCSAg ICBpZiAoZ3VhcmQtPmlzYWN0aXZlID4gMSkKKyAJCWdvdG8gZXJycGlwZTsK KyAJICAgIGlmIChpc19ub25ibG9ja2luZyAoKSkKKyAJCWJyZWFrOyAvLyB0 byBvdXRlciBsb29wCisgCisgCSAgICBzeXNjYWxsX3ByaW50ZiAoIndhaXQg Zm9yIHRoZSBfYWNxdWlyZV9yZWFkIGV2ZW50ICVkICIsCisgCSAgICAgR2V0 TGFzdEVycm9yICgpKTsKKyAJICAgIFJlbGVhc2VNdXRleCAoX2RhdGFfbXV0 ZXgpOworIAkgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoX2FjcXVpcmVfcmVh ZCwgSU5GSU5JVEUpOworIAkgICAgUmVzZXRFdmVudCAoX2FjcXVpcmVfcmVh ZCk7CisgCisgCSAgICB0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoX2RhdGFf bXV0ZXgsIElORklOSVRFKTsKKyAJICAgIGlmICh0ICE9IFdBSVRfT0JKRUNU XzApCisgCSAgICB7CisgCQlpZiAodCA9PSBXQUlUX0FCQU5ET05FRCkKKyAJ CSAgICBSZWxlYXNlTXV0ZXggKF9kYXRhX211dGV4KTsKKyAJCXN5c2NhbGxf cHJpbnRmCisgCQkgICAgKCJhYmFuZG9uZWQgX2RhdGFfbXV0ZXggLSBiYWQg ZXhpdCBvbiBGSUZPPyAlZCAlZCAiLAorIAkJICAgICB0LCBHZXRMYXN0RXJy b3IgKCkpOworIAkJZ290byByZXRyeTsKKyAJICAgIH0KKyAJfQorIAlpZiAo IWd1YXJkLT5yZWFkZXJzKQorIAkgICAgZ290byBlcnJwaXBlOworIAlhY3R1 YWxfbGVuZ3RoID0gbGVuIC0gY3VycmVudF9wb3NpdGlvbjsKKyAJLyogT19O T05CTE9DSyBhbmQgdGhlcmUgaXMgbm8gcm9vbSBpbiBGSUZPICovCisgCWlm IChpc19ub25ibG9ja2luZyAoKSAmJiAoYWN0dWFsX2xlbmd0aCArIGd1YXJk LT5mZF9zeiA+IEZJRk9fTUFQX1NaKSkKKyAJeworIAkgICAgUmVsZWFzZU11 dGV4IChfZGF0YV9tdXRleCk7CisgCSAgICBSZWxlYXNlTXV0ZXggKF9vdXRw dXRfbXV0ZXgpOworIAkgICAgc2V0X2Vycm5vIChFQUdBSU4pOworIAkgICAg cmV0dXJuIC0xOworIAl9CisgCXN5c2NhbGxfcHJpbnRmICgicmVhZHkgdG8g d3JpdGUiKTsKKyAJaWYgKGFjdHVhbF9sZW5ndGggPiBGSUZPX01BUF9TWikK KyAJICAgIGFjdHVhbF9sZW5ndGggPSBGSUZPX01BUF9TWjsKKyAJbWVtY3B5 IChmZGF0YSwgKGNoYXIgKikgYnVmICsgY3VycmVudF9wb3NpdGlvbiwgYWN0 dWFsX2xlbmd0aCk7CisgCWN1cnJlbnRfcG9zaXRpb24gKz0gYWN0dWFsX2xl bmd0aDsKKyAJZ3VhcmQtPmZkX3N6ID0gYWN0dWFsX2xlbmd0aDsKKyAJZ3Vh cmQtPmZkX29mZnNldCA9IGFjdHVhbF9sZW5ndGggPSAwOworIAl0aW1lX2Fz X3RpbWVzdHJ1Y190ICgmZ3VhcmQtPm10aW0pOyAvLyBqdXN0IHRvIGltcGxl bWVudCBmc3RhdCAoKQorIAlpZiAoY3VycmVudF9wb3NpdGlvbiA9PSBsZW4p CisgCSAgICBndWFyZC0+ZW93ID0gMTsKKyAJZWxzZQorIAkgICAgZ3VhcmQt PmVvdyA9IDA7CisgCisgCWlmICghaXNfbm9uYmxvY2tpbmcgKCkpCisgCXsK KyAJc3lzY2FsbF9wcmludGYgKCJkYXRhIHdyaXR0ZW4sIHdhaXRpbmcgZm9y IF9hY3F1aXJlX3JlYWQiKTsKKyAJICAgIFJlbGVhc2VNdXRleCAoX2RhdGFf bXV0ZXgpOworIAkgICAgU2V0RXZlbnQgKF9kb25lX3dyaXRlKTsKKyAJICAg IHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfYWNxdWlyZV9yZWFkLCBJTkZJ TklURSk7CisgCSAgICBSZXNldEV2ZW50IChfYWNxdWlyZV9yZWFkKTsKKyAJ ICAgIHN5c2NhbGxfcHJpbnRmICgiIHdlIGhhdmUgdGhlIF9hY3F1aXJlX3Jl YWQiKTsKKyAKKyAJICAgIHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfZGF0 YV9tdXRleCwgSU5GSU5JVEUpOworICAgICAgICAgICAgIGlmICh0ICE9IFdB SVRfT0JKRUNUXzApCisgICAgICAgICAgICAgeworIAkJaWYgKHQgPT0gV0FJ VF9BQkFORE9ORUQpCisgCQkgICAgUmVsZWFzZU11dGV4IChfZGF0YV9tdXRl eCk7CisgICAgICAgICAgICAgICAgIHN5c2NhbGxfcHJpbnRmCisgICAgICAg ICAgICAgICAgICAgICAoImFiYW5kb25lZCBfZGF0YV9tdXRleCAtIGJhZCBl eGl0IG9uIEZJRk8/ICVkICVkICIsCisgICAgICAgICAgICAgICAgICAgICAg dCwgR2V0TGFzdEVycm9yICgpKTsKKyAJCWdvdG8gcmV0cnk7CisgICAgICAg ICAgICAgfSAKKyAJICAgIHN5c2NhbGxfcHJpbnRmICgid2UgaGF2ZSB0aGUg X2RhdGFfbXV0ZXgiKTsKKyAJfQorIAllbHNlCisgCXsKKyAJICAgIHN5c2Nh bGxfcHJpbnRmICgic2tpcHBlZCB3YWl0aW5nIGR1ZSB0byBPX05PTkJMT0NL Iik7CisgCSAgICBTZXRFdmVudCAoX2RvbmVfd3JpdGUpOworIAl9CisgCisg ICAgIH0KKyAKKyAgICAgUmVsZWFzZU11dGV4IChfZGF0YV9tdXRleCk7Cisg ICAgIFJlbGVhc2VNdXRleCAoX291dHB1dF9tdXRleCk7CisgICAgIHN5c2Nh bGxfcHJpbnRmICgiJWQgYnl0ZXMgd3JpdHRlbiIsY3VycmVudF9wb3NpdGlv bik7CisgICAgIHJldHVybiBjdXJyZW50X3Bvc2l0aW9uOworICAgfQorICAg ZWxzZSBpZiAodCA9PSBXQUlUX0FCQU5ET05FRCkKKyAgIHsKKyAgICAgc3lz Y2FsbF9wcmludGYgKCJfb3V0cHV0X211dGV4IHdhcyBhYmFuZG9uZWQuICIp OworICAgICBnb3RvIHJldHJ5OworICAgfQorICAgZWxzZQorICAgeworICAg ICBzeXNjYWxsX3ByaW50ZiAoInNob3VsZCBuZXZlciBiZWVuIGhhcHBlbiAt IG5vIHRpbWVvdXQgd2FzIHNldCBydj0lZCBlcnI9ICVkIiwgdCwKKyAJCSAg ICAgR2V0TGFzdEVycm9yICgpKTsKKyAgICAgc2V0X2Vycm5vIChFSU8pOwor ICAgICByZXR1cm4gLTE7CisgICB9CisgCisgICByZXR1cm4gMDsKKyAKKyAg IHJldHJ5OgorICAgICBSZWxlYXNlTXV0ZXggKF9vdXRwdXRfbXV0ZXgpOwor ICAgICByZXR1cm4gZmhhbmRsZXJfZmlmbzo6d3JpdGUgKGJ1ZiwgbGVuKTsK KyAgICAgCisgICBlcnJwaXBlOgorICAgICBzeXNjYWxsX3ByaW50ZiAoImFu ZCBGSUZPIGhhcyBiZWVuIGNsb3NlZCIpOworICAgICBSZWxlYXNlTXV0ZXgg KF9kYXRhX211dGV4KTsKKyAgICAgUmVsZWFzZU11dGV4IChfb3V0cHV0X211 dGV4KTsKKyAgICAgc2V0X2Vycm5vIChFUElQRSk7CisgICAgIHJhaXNlIChT SUdQSVBFKTsKKyAgICAgcmV0dXJuIC0xOworIH0KKyAKKyB2b2lkIF9fc3Rk Y2FsbAorIGZoYW5kbGVyX2ZpZm86OnJlYWQgKHZvaWQgKnB0ciwgc2l6ZV90 JiBsZW4pCisgeworICAgdW5zaWduZWQgaW50IHQ7CisgICBzaXplX3QgYWN0 dWFsX2xlbmd0aCwgY3VycmVudF9wb3NpdGlvbiA9IDA7CisgICAKKyAgIHN5 c2NhbGxfcHJpbnRmICgiJWQgJWQiLGlzcmVhZGVyLGlzd3JpdGVyKTsKKyAg IGlmICghaXNyZWFkZXIpCisgICB7CisgICAgIGxlbiA9IDA7CisgICAgIHNl dF9lcnJubyAoRUlOVkFMKTsKKyAgICAgcmV0dXJuOworICAgfQorICAgaWYg KCFmaWxlbWFwIHx8ICFmZGF0YSB8fCAhX2lucHV0X211dGV4IHx8ICFfZGF0 YV9tdXRleCB8fAorICAgICFfZG9uZV93cml0ZSB8fCAhX2FjcXVpcmVfcmVh ZCkKKyAgIHsKKyAgIHNldF9lcnJubyAoRUJBREYpOworICAgcmV0dXJuOwor ICAgfQorIAorICAgdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKF9pbnB1dF9t dXRleCwgSU5GSU5JVEUpOworICAgaWYgKHQgPT0gV0FJVF9PQkpFQ1RfMCkK KyAgIHsKKyAgICAgc3lzY2FsbF9wcmludGYgKCJnb3QgdGhlIF9pbnB1dF9t dXRleCAlZCIsIHQpOworICAgICBhY3R1YWxfbGVuZ3RoID0gMDsKKyAgICAg Y3VycmVudF9wb3NpdGlvbiA9IDA7CisgICAgIHQgPSBXYWl0Rm9yU2luZ2xl T2JqZWN0IChfZGF0YV9tdXRleCwgSU5GSU5JVEUpOworICAgICBpZiAodCAh PSBXQUlUX09CSkVDVF8wKQorICAgICB7CisgCWlmICh0ID09IFdBSVRfQUJB TkRPTkVEKQorIAl7CisgCSAgICBzeXNjYWxsX3ByaW50ZiAoIl9kYXRhX211 dGV4IGFiYW5kb25lZCIpOworIAkgICAgUmVsZWFzZU11dGV4IChfZGF0YV9t dXRleCk7CisgCX0KKyAJc3lzY2FsbF9wcmludGYKKyAJICgidW5hYmxlIHRv IGdldCBfZGF0YV9tdXRleCAtIGJhZCBleGl0IG9uIEZJRk8/Iik7CisgCWdv dG8gcmV0cnk7CisgICAgIH0KKyAgICAgc3lzY2FsbF9wcmludGYgKCJnb3Qg X2RhdGFfbXV0ZXgiKTsKKyAgICAgd2hpbGUgKChjdXJyZW50X3Bvc2l0aW9u IDwgbGVuKSAmJiAhKChndWFyZC0+ZW93KSAmJiBndWFyZC0+ZmRfc3ogPT0g MCkpCisgICAgIHsKKyAJc3lzY2FsbF9wcmludGYgKCIgaXMgdGhlcmUgZGF0 YSB3YWl0aW5nPyIpOworIAl3aGlsZSAoIWd1YXJkLT5mZF9zeikKKyAJewor IAkgICAgLyogY2hlY2sgaWYgRklGTyB3cml0ZS1vcGVuZWQgKi8KKyAJICAg IGlmIChndWFyZC0+aXNhY3RpdmUgPiAxKQorIAkgICAgeworIAkJc3lzY2Fs bF9wcmludGYgKCJhbmQgRklGTyB3cml0ZSBlbmQgaGFzIGJlZW4gY2xvc2Vk Iik7CisgCQlsZW4gPSAwOworIAkJUmVsZWFzZU11dGV4IChfZGF0YV9tdXRl eCk7CisgCQlSZWxlYXNlTXV0ZXggKF9pbnB1dF9tdXRleCk7CisgCQlyZXR1 cm47CisgCSAgICB9CisgCisgCSAgICBzeXNjYWxsX3ByaW50ZiAoIi4ubm8u LiIpOworIAkgICAgaWYgKGlzX25vbmJsb2NraW5nICgpKQorIAkgICAgewor IAkJc3lzY2FsbF9wcmludGYgKCJubyBkYXRhLCBPX05PTkJMT0NLIik7Cisg CQlsZW4gPSAwOworIAkJUmVsZWFzZU11dGV4IChfZGF0YV9tdXRleCk7Cisg CQlSZWxlYXNlTXV0ZXggKF9pbnB1dF9tdXRleCk7CisgCQlzZXRfZXJybm8g KEVBR0FJTik7CisgCQlyZXR1cm47CisgCSAgICB9CisgCisgCSAgICBSZWxl YXNlTXV0ZXggKF9kYXRhX211dGV4KTsKKyAJICAgIFdhaXRGb3JTaW5nbGVP YmplY3QgKF9kb25lX3dyaXRlLCBJTkZJTklURSk7CisgCSAgICBSZXNldEV2 ZW50IChfZG9uZV93cml0ZSk7CisgCSAgICAKKyAJICAgIC8qIGNoZWNrIGlm IEZJRk8gaXMgd3JpdGUtb3BlbmVkIGFuZCBlbXB0eSAqLworIAkgICAgaWYg KChndWFyZC0+aXNhY3RpdmUgPiAxKSAmJiAhZ3VhcmQtPmZkX3N6KQorIAkg ICAgeworIAkJc3lzY2FsbF9wcmludGYgKCJhbmQgRklGTyB3cml0ZSBlbmQg aGFzIGJlZW4gY2xvc2VkIik7CisgCQlsZW4gPSAwOworIAkJUmVsZWFzZU11 dGV4IChfaW5wdXRfbXV0ZXgpOworIAkJcmV0dXJuOworIAkgICAgfQorIAor IAkgICAgdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKF9kYXRhX211dGV4LCBJ TkZJTklURSk7CisgCSAgICBpZiAodCAhPSBXQUlUX09CSkVDVF8wKQorIAkg ICAgeworIAkJaWYgKHQgPT0gV0FJVF9BQkFORE9ORUQpCisgCQkgICAgUmVs ZWFzZU11dGV4IChfZGF0YV9tdXRleCk7CisgCQlzeXNjYWxsX3ByaW50Zgor IAkJICAgICgidW5hYmxlIHRvIGdldCBfZGF0YV9tdXRleCAtIGJhZCBleGl0 IG9uIEZJRk8/Iik7CisgCQlnb3RvIHJldHJ5OworIAkgICAgfQorIAl9Cisg CisgCXN5c2NhbGxfcHJpbnRmICgiLi55ZXMgJWQgYnl0ZXMgb2YgZGF0YSB3 YWl0aW5nIiwgZ3VhcmQtPmZkX3N6KTsKKyAJYWN0dWFsX2xlbmd0aCA9IGd1 YXJkLT5mZF9zejsKKyAJaWYgKGFjdHVhbF9sZW5ndGggKyBjdXJyZW50X3Bv c2l0aW9uID4gbGVuKQorIAkgICAgYWN0dWFsX2xlbmd0aCA9IGxlbiAtIGN1 cnJlbnRfcG9zaXRpb247CisgCWlmIChhY3R1YWxfbGVuZ3RoID4gRklGT19N QVBfU1opCisgCSAgICBhY3R1YWxfbGVuZ3RoID0gRklGT19NQVBfU1o7Cisg CW1lbWNweSAoKGNoYXIgKikgcHRyICsgY3VycmVudF9wb3NpdGlvbiwKKyAJ ICAgIChjaGFyICopIGZkYXRhICsgZ3VhcmQtPmZkX29mZnNldCwgYWN0dWFs X2xlbmd0aCk7CisgCWN1cnJlbnRfcG9zaXRpb24gKz0gYWN0dWFsX2xlbmd0 aDsKKyAKKyAJaWYgKCFndWFyZC0+aXNhY3RpdmUpCisgCSAgICBndWFyZC0+ aXNhY3RpdmUgPSAxOy8qIGFuIGlvIGhhcyBjb21wbGV0ZWQgKi8KKyAJZ3Vh cmQtPmZkX3N6IC09IGFjdHVhbF9sZW5ndGg7CisgCWd1YXJkLT5mZF9vZmZz ZXQgKz0gYWN0dWFsX2xlbmd0aDsKKyAJdGltZV9hc190aW1lc3RydWNfdCAo Jmd1YXJkLT5tdGltKTsgLy8ganVzdCB0byBpbXBsZW1lbnQgZnN0YXQgKCkK KyAKKyAJU2V0RXZlbnQgKF9hY3F1aXJlX3JlYWQpOworICAgICB9CisgICAg IAorICAgICBpZiAoZ3VhcmQtPmZkX3N6ID09IDApCisgCWd1YXJkLT5lb3cg PSAwOworIAorICAgICBSZWxlYXNlTXV0ZXggKF9kYXRhX211dGV4KTsKKyAg ICAgUmVsZWFzZU11dGV4IChfaW5wdXRfbXV0ZXgpOworICAgfQorICAgZWxz ZSBpZiAodCA9PSBXQUlUX0FCQU5ET05FRCkKKyAgIHsKKyAgICAgc3lzY2Fs bF9wcmludGYgKCJhYmFuZG9uZWQgX2lucHV0X211dGV4IGZvdW5kICIpOwor ICAgICBnb3RvIHJldHJ5OworICAgfQorICAgZWxzZQorICAgeworICAgICBz eXNjYWxsX3ByaW50ZgorIAkgKCJfaW5wdXRfbXV0ZXggLSBzaG91bGQgbmV2 ZXIgZXZlciBoYXBwZW4gKG5vIHRpbWVvdXQgd2FzIHNldCIpOworICAgICBs ZW4gPSAwOworICAgICBzZXRfZXJybm8gKEVJTyk7CisgICAgIHJldHVybjsK KyAgIH0KKyAKKyAgIGxlbiA9IGN1cnJlbnRfcG9zaXRpb247CisgICByZXR1 cm47CisgCisgICByZXRyeToKKyAgICAgUmVsZWFzZU11dGV4IChfaW5wdXRf bXV0ZXgpOworICAgICBmaGFuZGxlcl9maWZvOjpyZWFkIChwdHIsIGxlbik7 CisgICAgIHJldHVybjsKKyB9CisgCisgX29mZjY0X3QKKyBmaGFuZGxlcl9m aWZvOjpsc2VlayAoX29mZjY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQorIHsK KyAgX29mZjY0X3QgcmVzID0gKF9vZmY2NF90KS0xOworIAorICAgaWYgKCFm aWxlbWFwIHx8ICFmZGF0YSB8fCAhX2RhdGFfbXV0ZXggfHwgIV9kb25lX3dy aXRlIHx8ICFfYWNxdWlyZV9yZWFkIHx8CisgICAgICAoKGlzcmVhZGVyKSA/ ICFfaW5wdXRfbXV0ZXggOiAwKSB8fCAoKGlzd3JpdGVyKSA/ICFfb3V0cHV0 X211dGV4IDogMCkpCisgICB7CisgICAgIHNldF9lcnJubyAoRUJBREYpOwor ICAgICByZXR1cm4gcmVzOworICAgfQorICAKKyAgIGlmICghd2luY2FwLmhh c182NGJpdF9maWxlX2FjY2VzcyAoKSAmJgorICAgICAob2Zmc2V0IDwgTE9O R19NSU4gfHwgb2Zmc2V0ID4gTE9OR19NQVgpKQorIC8vICAgIChvZmZzZXQg IT0gMCkpIC8vIGZpeG1lIAorICAgeworICAgICBzZXRfZXJybm8gKEVJTlZB TCk7CisgICAgIHJldHVybiByZXM7CisgICB9CisgICAKKyAgIHN3aXRjaCAo d2hlbmNlKQorICAgeworICAgICBjYXNlIFNFRUtfU0VUOgorIAlpZiAoIWlz X25vbmJsb2NraW5nICgpKQorIAkgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmpl Y3QgKF9kYXRhX211dGV4LCBJTkZJTklURSkgIT0gV0FJVF9PQkpFQ1RfMCkK KyAJCXNldF9lcnJubyAoRUJBREYpOworIAlndWFyZC0+aXNhY3RpdmUgPSAw OworIAlpZiAoIWlzX25vbmJsb2NraW5nICgpKQorIAkgICAgUmVsZWFzZU11 dGV4IChfZGF0YV9tdXRleCk7CisgCXJlcyA9IDA7CisgCWJyZWFrOworICAg ICBjYXNlIFNFRUtfRU5EOgorICAgICBjYXNlIFNFRUtfQ1VSOgorIAlzZXRf ZXJybm8gKEVTUElQRSk7CisgCWJyZWFrOworICAgICBkZWZhdWx0OgorIAlz ZXRfZXJybm8gKEVJTlZBTCk7CisgICB9CisgICAKKyAgIHJldHVybiByZXM7 CisgfQorIAorIGludAorIGZoYW5kbGVyX2ZpZm86OmlvY3RsICh1bnNpZ25l ZCBpbnQgY21kLCB2b2lkICpwKQorIHsKKyAgIGludCBuOworIAorICAgc3dp dGNoIChjbWQpCisgICAgIHsKKyAgICAgY2FzZSBGSU9OUkVBRDoKKyAjaWYg ZGVmaW5lZCBGSU9OV1JJVEUKKyAgICAgY2FzZSBGSU9OV1JJVEU6CisgI2Vu ZGlmCisgICAgICAgaWYgKGdldF9kZXZpY2UgKCkgIT0gRkhfRklGTykKKyAg ICAgICB7CisgCSAgc2V0X2Vycm5vIChFSU5WQUwpOworIAkgIHJldHVybiAt MTsKKyAgICAgICB9CisgICAgICAgaWYgKCFfZGF0YV9tdXRleCkKKyAgICAg ICB7CisgCXNldF9lcnJubyAoRUJBREYpOworIAlyZXR1cm4gLTE7CisgICAg ICAgfQorICAgICAgIGlmICghaXNfbm9uYmxvY2tpbmcgKCkpCisgCWlmIChX YWl0Rm9yU2luZ2xlT2JqZWN0IChfZGF0YV9tdXRleCwgSU5GSU5JVEUpICE9 IFdBSVRfT0JKRUNUXzApCisgCXsKKyAJICBzZXRfZXJybm8gKEVCQURGKTsK KyAJICByZXR1cm4gLTE7CisgCX0KKyAjaWYgZGVmaW5lZCBGSU9OV1JJVEUK KyAgICAgICBpZiAoY21kID09IEZJT05XUklURSkKKyAgICAgICAgIG4gPSBG SUZPX01BUF9TWiAtIGd1YXJkLT5mZF9zejsKKyAgICAgICBlbHNlCisgI2Vu ZGlmCisgICAgICAgICBuID0gZ3VhcmQtPmZkX3N6OworICAgICAgIGlmICgh aXNfbm9uYmxvY2tpbmcgKCkpCisgCVJlbGVhc2VNdXRleCAoX2RhdGFfbXV0 ZXgpOworICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIHJl dHVybiBmaGFuZGxlcl9iYXNlOjppb2N0bCAoY21kLCBwKTsKKyAgICAgfQor IAorICAgKiAoaW50ICopIHAgPSBuOworICAgcmV0dXJuIDA7CisgfQorIAor IHZvaWQKKyBmaGFuZGxlcl9maWZvOjpmaXh1cF9hZnRlcl9leGVjIChIQU5E TEUgcGFyZW50KQorIHsKKyAgIGlmICghZ2V0X2Nsb3NlX29uX2V4ZWMgKCkp CisgICAgIGZpeHVwX2FmdGVyX2ZvcmsgKHBhcmVudCk7CisgfQorIAorIGlu dAorIGZoYW5kbGVyX2ZpZm86OmR1cCAoZmhhbmRsZXJfYmFzZSAqY2hpbGQp CisgeworICBEV09SRCBwZnN5c19vZmZzZXQ7CisgCisgICBzeXNjYWxsX3By aW50ZiAoImR1cCAoKSBzdGFydCIpOworIAorICAgZmhhbmRsZXJfZmlmbyAq ZmhmID0gKGZoYW5kbGVyX2ZpZm8gKikgY2hpbGQ7CisgICBmaGYtPnNldF9p b19oYW5kbGUgKE5VTEwpOworIAorICAgaWYgKGZpbGVtYXAgPT0gTlVMTCkK KyAgICAgZmhmLT5maWxlbWFwID0gTlVMTDsKKyAgIGVsc2UgaWYgKCFEdXBs aWNhdGVIYW5kbGUgKGhNYWluUHJvYywgZmlsZW1hcCwgaE1haW5Qcm9jLCAm ZmhmLT5maWxlbWFwLCAwLCAxLAorIAkJCSAgICAgRFVQTElDQVRFX1NBTUVf QUNDRVNTKSkKKyAgIHsKKyAgICAgc3lzY2FsbF9wcmludGYgKCJjb3VsZG4n dCBkdXBsaWNhdGUgZmlsZW1hcCIpOworICAgICBnb3RvIG91dDE7CisgICB9 CisgICBQcm90ZWN0SGFuZGxlIChmaWxlbWFwKTsKKyAKKyAgIGlmIChndWFy ZCA9PSBOVUxMKQorICAgICBmaGYtPmd1YXJkID0gTlVMTDsgCisgICBlbHNl IGlmICghKGZoZi0+Z3VhcmQgPSAoY2xhc3MgZmlmb19ndWFyZCAqKSBNYXBW aWV3T2ZGaWxlIChmaGYtPmZpbGVtYXAsCisgICAgIChpc3JlYWRlciAmJiAh aXN3cml0ZXIpID8gRklMRV9NQVBfUkVBRCA6IEZJTEVfTUFQX1dSSVRFLAor ICAgICAgMCwgMCwgMCkpKQorICAgeworICAgICBzeXNjYWxsX3ByaW50ZiAo ImNvdWxkbid0IGR1cGxpY2F0ZSBndWFyZCIpOworICAgICBnb3RvIG91dDE7 CisgICB9CisgCisgICBwZnN5c19vZmZzZXQgPSBnZXRwZnN5c19zeiAoKTsK KyAgIGlmIChmZGF0YSA9PSBOVUxMKQorICAgICBmaGYtPmZkYXRhID0gTlVM TDsKKyAgIGVsc2UgaWYgKCEoZmhmLT5mZGF0YSA9IE1hcFZpZXdPZkZpbGUg KGZoZi0+ZmlsZW1hcCwKKyAgICAgKGlzcmVhZGVyICYmICFpc3dyaXRlcikg PyBGSUxFX01BUF9SRUFEIDogRklMRV9NQVBfV1JJVEUsCisgICAgICAwLCBw ZnN5c19vZmZzZXQsIEZJRk9fTUFQX1NaKSkpCisgICB7CisgICAgIHN5c2Nh bGxfcHJpbnRmICgiY291bGRuJ3QgZHVwbGljYXRlIGZkYXRhLCAlZCIsR2V0 TGFzdEVycm9yICgpKTsKKyAgICAgZ290byBvdXQxOworICAgfQorIAorICAg aWYgKF9kYXRhX211dGV4ID09IE5VTEwpCisgICAgIGZoZi0+X2RhdGFfbXV0 ZXggPSBOVUxMOworICAgZWxzZSBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1h aW5Qcm9jLCBfZGF0YV9tdXRleCwgaE1haW5Qcm9jLAorICAgICZmaGYtPl9k YXRhX211dGV4LCAwLCAxLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorICAg eworICAgICBzeXNjYWxsX3ByaW50ZiAoImNvdWxkbid0IGR1cGxpY2F0ZSBf ZGF0YV9tdXRleCIpOworICAgICBnb3RvIG91dDE7CisgICB9CisgICBQcm90 ZWN0SGFuZGxlIChfZGF0YV9tdXRleCk7CisgCisgICBpZiAoX2FjcXVpcmVf cmVhZCA9PSBOVUxMKQorICAgICBmaGYtPl9hY3F1aXJlX3JlYWQgPSBOVUxM OworICAgZWxzZSBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1haW5Qcm9jLCBf YWNxdWlyZV9yZWFkLCBoTWFpblByb2MsCisgICAgJmZoZi0+X2FjcXVpcmVf cmVhZCwgMCwgMSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKKyAgIHsKKyAg ICAgc3lzY2FsbF9wcmludGYgKCJjb3VsZG4ndCBkdXBsaWNhdGUgX2FjcXVp cmVfcmVhZCIpOworICAgICBnb3RvIG91dDE7CisgICB9CisgICBQcm90ZWN0 SGFuZGxlIChfYWNxdWlyZV9yZWFkKTsKKyAKKyAgIGlmIChfZG9uZV93cml0 ZSA9PSBOVUxMKQorICAgICBmaGYtPl9kb25lX3dyaXRlID0gTlVMTDsKKyAg IGVsc2UgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKGhNYWluUHJvYywgX2RvbmVf d3JpdGUsIGhNYWluUHJvYywKKyAgICAmZmhmLT5fZG9uZV93cml0ZSwgMCwg MSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKKyAgIHsKKyAgICAgc3lzY2Fs bF9wcmludGYgKCJjb3VsZG4ndCBkdXBsaWNhdGUgX2RvbmVfd3JpdGUiKTsK KyAgICAgZ290byBvdXQxOworICAgfQorICAgUHJvdGVjdEhhbmRsZSAoX2Rv bmVfd3JpdGUpOworIAorICAgaWYgKF9pbnB1dF9tdXRleCA9PSBOVUxMKQor ICAgICBmaGYtPl9pbnB1dF9tdXRleCA9IE5VTEw7CisgICBlbHNlIGlmIChp c3JlYWRlcikKKyAgIHsKKyAgICAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKGhN YWluUHJvYywgX2lucHV0X211dGV4LCBoTWFpblByb2MsCisgICAgICAmZmhm LT5faW5wdXRfbXV0ZXgsIDAsIDEsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykp CisgICAgIHsKKyAJc3lzY2FsbF9wcmludGYgKCJjb3VsZG4ndCBkdXBsaWNh dGUgX2lucHV0X211dGV4Iik7CisgCWdvdG8gb3V0MTsKKyAgICAgfQorICAg ICBQcm90ZWN0SGFuZGxlIChfaW5wdXRfbXV0ZXgpOworICAgfQorIAorICAg aWYgKF9vdXRwdXRfbXV0ZXggPT0gTlVMTCkKKyAgICAgZmhmLT5fb3V0cHV0 X211dGV4ID0gTlVMTDsKKyAgIGVsc2UgaWYgKGlzd3JpdGVyKQorICAgewor ICAgICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1haW5Qcm9jLCBfb3V0cHV0 X211dGV4LCBoTWFpblByb2MsCisgICAgICAmZmhmLT5fb3V0cHV0X211dGV4 LCAwLCAxLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorICAgICB7CisgCXN5 c2NhbGxfcHJpbnRmICgiY291bGRuJ3QgZHVwbGljYXRlIF9vdXRwdXRfbXV0 ZXgiKTsKKyAJZ290byBvdXQxOworICAgICB9CisgICAgIFByb3RlY3RIYW5k bGUgKF9vdXRwdXRfbXV0ZXgpOworICAgfQorIAorICAgaWYgKF9vcGVuX2Js b2NrID09IE5VTEwpCisgICAgIGZoZi0+X29wZW5fYmxvY2sgPSBOVUxMOwor ICAgZWxzZSBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1haW5Qcm9jLCBfb3Bl bl9ibG9jaywgaE1haW5Qcm9jLAorICAgICZmaGYtPl9vcGVuX2Jsb2NrLCAw LCAxLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorICAgeworIAlzeXNjYWxs X3ByaW50ZiAoImNvdWxkbid0IGR1cGxpY2F0ZSBfb3Blbl9ibG9jayIpOwor IAlnb3RvIG91dDE7CisgICB9CisgCisgICBmaGYtPmlzcmVhZGVyID0gaXNy ZWFkZXI7CisgICBmaGYtPmlzd3JpdGVyID0gaXN3cml0ZXI7CisgICBmaGYt Pmd1YXJkLT5yZWFkZXJzICs9IGlzcmVhZGVyOworICAgZmhmLT5ndWFyZC0+ d3JpdGVycyArPSBpc3dyaXRlcjsKKyAgIGZoZi0+c2V0X2ZsYWdzIChnZXRf ZmxhZ3MgKCksIGdldF93X2JpbmFyeSAoKSk7CisgICBmaGYtPnNldF9pb19o YW5kbGUgKGZoZi0+ZmRhdGEpOworICAgc3lzY2FsbF9wcmludGYgKCJkdXAg KCkgZW5kIik7CisgCisgICByZXR1cm4gMDsKKyAKKyAgIG91dDE6CisgCisg ICAgIGlmIChmaGYtPl9kYXRhX211dGV4KSBGb3JjZUNsb3NlSGFuZGxlIChm aGYtPl9kYXRhX211dGV4KTsKKyAgICAgaWYgKGZoZi0+X2FjcXVpcmVfcmVh ZCkgRm9yY2VDbG9zZUhhbmRsZSAoZmhmLT5fYWNxdWlyZV9yZWFkKTsKKyAg ICAgaWYgKGZoZi0+X2RvbmVfd3JpdGUpIEZvcmNlQ2xvc2VIYW5kbGUgKGZo Zi0+X2RvbmVfd3JpdGUpOworICAgICBpZiAoZmhmLT5fb3Blbl9ibG9jaykg Q2xvc2VIYW5kbGUgKGZoZi0+X29wZW5fYmxvY2spOworICAgICBpZiAoaXNy ZWFkZXIgJiYgZmhmLT5faW5wdXRfbXV0ZXgpIEZvcmNlQ2xvc2VIYW5kbGUg KGZoZi0+X2lucHV0X211dGV4KTsKKyAgICAgaWYgKGlzd3JpdGVyICYmIGZo Zi0+X291dHB1dF9tdXRleCkgRm9yY2VDbG9zZUhhbmRsZSAoZmhmLT5fb3V0 cHV0X211dGV4KTsKKyAgICAgaWYgKGZoZi0+ZmRhdGEpIFVubWFwVmlld09m RmlsZSAoZmhmLT5mZGF0YSk7CisgICAgIGlmIChmaGYtPmd1YXJkKSBVbm1h cFZpZXdPZkZpbGUgKGZoZi0+Z3VhcmQpOworICAgICBpZiAoZmhmLT5maWxl bWFwKSBGb3JjZUNsb3NlSGFuZGxlIChmaGYtPmZpbGVtYXApOworICAgICAK KyAgICAgc2V0X2Vycm5vIChFQkFERik7CisgICAgIHJldHVybiAtMTsKKyB9 CisgCisgdm9pZAorIGZoYW5kbGVyX2ZpZm86OmZpeHVwX2FmdGVyX2Zvcmsg KEhBTkRMRSBwYXJlbnQpCisgeworICBEV09SRCBwZnN5c19vZmZzZXQ7Cisg CisgICBzeXNjYWxsX3ByaW50ZiAoImZpeHVwX2FmdGVyX2ZvcmsgKCkgc3Rh cnQiKTsKKyAgIGZoYW5kbGVyX2Jhc2U6OmZpeHVwX2FmdGVyX2ZvcmsgKHBh cmVudCk7CisgCisgICBpZiAoZ3VhcmQgPT0gTlVMTCkKKyAgICAgZ3VhcmQg PSBOVUxMOyAKKyAgIGVsc2UgaWYgKCEoZ3VhcmQgPSAoY2xhc3MgZmlmb19n dWFyZCAqKSBNYXBWaWV3T2ZGaWxlIChmaWxlbWFwLCAKKyAgICBGSUxFX01B UF9XUklURSwgMCwgMCwgMCkpKQorICAgeworICAgICBzeXNjYWxsX3ByaW50 ZiAoImNvdWxkbid0IGR1cGxpY2F0ZSBndWFyZCIpOworICAgICByZXR1cm47 CisgICB9CisgICAKKyAgIHBmc3lzX29mZnNldCA9IGdldHBmc3lzX3N6ICgp OworICAgaWYgKGZkYXRhID09IE5VTEwpCisgICAgIGZkYXRhID0gTlVMTDsK KyAgIGVsc2UgaWYgKCEoZmRhdGEgPSBNYXBWaWV3T2ZGaWxlIChmaWxlbWFw LAorICAgICAgKGlzcmVhZGVyICYmICFpc3dyaXRlcikgPyBGSUxFX01BUF9S RUFEIDogRklMRV9NQVBfV1JJVEUsCisgICAgICAgMCwgcGZzeXNfb2Zmc2V0 LCBGSUZPX01BUF9TWikpKQorICAgeworICAgICBzeXNjYWxsX3ByaW50ZiAo ImNvdWxkbid0IGR1cGxpY2F0ZSBmZGF0YSIpOworICAgICByZXR1cm47Cisg ICB9CisgCisgICBndWFyZC0+cmVhZGVycyArPSBpc3JlYWRlcjsKKyAgIGd1 YXJkLT53cml0ZXJzICs9IGlzd3JpdGVyOworIAorICAgc3lzY2FsbF9wcmlu dGYgKCJmaXh1cF9hZnRlcl9mb3JrICgpIGVuZCIpOworIH0KKyAKKyB2b2lk CisgZmhhbmRsZXJfZmlmbzo6c2V0X3VuaXhfcGF0aCAoY29uc3QgY2hhciAq cGF0aCkKKyB7CisgICB1bml4X3BhdGggPSBwYXRoID8gY3N0cmR1cCAocGF0 aCkgOiBOVUxMOworIH0KKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3Vw L2N5Z3dpbi9maGFuZGxlcl92aXJ0dWFsLmNjCVN1biBKYW4gMTEgMTg6MTc6 MjYgMjAwNAotLS0gY3lnd2luLTEuNS41LTEvd2luc3VwL2N5Z3dpbi9maGFu ZGxlcl92aXJ0dWFsLmNjCU1vbiBEZWMgMjIgMTY6MDg6MDYgMjAwMwoqKioq KioqKioqKioqKioKKioqIDIxNywyMjIgKioqKgotLS0gMjE3LDIyMyAtLS0t CiAgICBzZXRfc3ltbGlua19wIChmYWxzZSk7CiAgICBzZXRfZXhlY2FibGVf cCAobm90X2V4ZWN1dGFibGUpOwogICAgc2V0X3NvY2tldF9wIChmYWxzZSk7 CisgICBzZXRfZmlmb19wIChmYWxzZSk7CiAgCiAgICBzZXRfZmxhZ3MgKChm bGFncyAmIH5PX1RFWFQpIHwgT19CSU5BUlkpOwogIAoqKiogY3lnd2luLTEu NS41LTFfb3JpZy93aW5zdXAvY3lnd2luL3BhdGguY2MJU3VuIEphbiAxMSAx ODoxNzoyNiAyMDA0Ci0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2lu L3BhdGguY2MJU2F0IEphbiAxMCAwMTozNDowMiAyMDA0CioqKioqKioqKioq KioqKgoqKiogMzc3LDM4OCAqKioqCiAgICAgICAgc3ltX29wdCA9IGZsYWdz ID0gc2VyaWFsID0gMDsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0K ISAgIC8qIEZJWE1FOiBTYW1iYSBieSBkZWZhdWx0IHJldHVybnMgIk5URlMi IGluIGZpbGUgc3lzdGVtIG5hbWUsIGJ1dAohICAgICogZG9lc24ndCBzdXBw b3J0IEV4dGVuZGVkIEF0dHJpYnV0ZXMuIElmIHRoZXJlJ3Mgc29tZSBmYXN0 IHdheSB0bwogICAgICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBzYW1iYSBhbmQg cmVhbCBudGZzLCBpdCBzaG91bGQgYmUgaW1wbGVtZW50ZWQKICAgICAqIGhl cmUuCiAgICAgKi8KISAgIHN5bV9vcHQgPSAoIWlzX3JlbW90ZV9kcml2ZSAm JiBzdHJjbXAgKG5hbWUsICJOVEZTIikgPT0gMCkgPyBQQ19DSEVDS19FQSA6 IDA7CiAgCiAgICByZXR1cm4gdHJ1ZTsKICB9Ci0tLSAzNzcsMzg5IC0tLS0K ICAgICAgICBzeW1fb3B0ID0gZmxhZ3MgPSBzZXJpYWwgPSAwOwogICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgfQohICAgLyogRklYTUU6IFNhbWJhIGJ5 IGRlZmF1bHQgcmV0dXJucyAiTlRGUyIgb3IgIlNBTUJBIiBpbiBmaWxlIHN5 c3RlbSBuYW1lLAohICAgICogYnV0IGRvZXNuJ3Qgc3VwcG9ydCBFeHRlbmRl ZCBBdHRyaWJ1dGVzLiBJZiB0aGVyZSdzIHNvbWUgZmFzdCB3YXkgdG8KICAg ICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gc2FtYmEgYW5kIHJlYWwgbnRmcywg aXQgc2hvdWxkIGJlIGltcGxlbWVudGVkCiAgICAgKiBoZXJlLgogICAgICov CiEgICBzeW1fb3B0ID0gKCFpc19yZW1vdGVfZHJpdmUgJiYgKChzdHJjbXAg KG5hbWUsICJOVEZTIikgPT0gMCkgfHwKISAgICAoc3RyY21wIChuYW1lLCAi U0FNQkEiKSA9PSAwKSkpID8gUENfQ0hFQ0tfRUEgOiAwOwogIAogICAgcmV0 dXJuIHRydWU7CiAgfQoqKioqKioqKioqKioqKioKKioqIDgwNyw4MTcgKioq KgogIAkvKiBvayAqLzsKICAgICAgICBlbHNlIGlmIChpc2RpciAoKSkKICAJ c2V0X2V4ZWMgKDEpOwohICAgICAgIGVsc2UgaWYgKGlzc3ltbGluayAoKSB8 fCBpc3NvY2tldCAoKSkKICAJc2V0X2V4ZWMgKDApOwogICAgICB9CiAgICBp ZiAoaXNzb2NrZXQgKCkpCiAgICAgIGRldm4gPSBGSF9TT0NLRVQ7CiAgCiAg ICBpZiAoIShvcHQgJiBQQ19GVUxMKSkKICAgICAgewotLS0gODA4LDgyMCAt LS0tCiAgCS8qIG9rICovOwogICAgICAgIGVsc2UgaWYgKGlzZGlyICgpKQog IAlzZXRfZXhlYyAoMSk7CiEgICAgICAgZWxzZSBpZiAoaXNzeW1saW5rICgp IHx8IGlzc29ja2V0ICgpIHx8IGlzZmlmbygpKQogIAlzZXRfZXhlYyAoMCk7 CiAgICAgIH0KICAgIGlmIChpc3NvY2tldCAoKSkKICAgICAgZGV2biA9IEZI X1NPQ0tFVDsKKyAgIGlmIChpc2ZpZm8gKCkpCisgICAgIGRldm4gPSBGSF9G SUZPOwogIAogICAgaWYgKCEob3B0ICYgUENfRlVMTCkpCiAgICAgIHsKKioq KioqKioqKioqKioqCioqKiA4NzUsODgwICoqKioKLS0tIDg3OCw4ODQgLS0t LQogICAgIlxcZGV2XFxwaXBlIiwKICAgICJcXGRldlxccGlwZXIiLAogICAg IlxcZGV2XFxwaXBldyIsCisgICAiXFxkZXZcXGZpZm8iLAogICAgIlxcZGV2 XFxzb2NrZXQiLAogICAgIlxcZGV2XFx3aW5kb3dzIiwKICAKKioqKioqKioq KioqKioqCioqKiA5NjEsOTY2ICoqKioKLS0tIDk2NSw5NzUgLS0tLQogICAg ICBkZXZuID0gRkhfUElQRVI7CiAgICBlbHNlIGlmIChkZXZlcSAoInBpcGV3 IikpCiAgICAgIGRldm4gPSBGSF9QSVBFVzsKKyAgIGVsc2UgaWYgKGRldmVx ICgiZmlmbyIpKQorICAgICB7CisgICAgICAgZGV2biA9IEZIX0ZJRk87Cisg ICAgICAgdW5pdCA9IHRvbG93ZXIgKCpuYW1lKSAtICdhJzsKKyAgICAgfQog ICAgZWxzZSBpZiAoZGV2ZXEgKCJ0Y3AiKSB8fCBkZXZlcSAoInVkcCIpIHx8 IGRldmVxICgic3RyZWFtc29ja2V0IikKICAJICAgfHwgZGV2ZXEgKCJkZ3Nv Y2tldCIpKQogICAgICB7CioqKioqKioqKioqKioqKgoqKiogMTEyMSwxMTI2 ICoqKioKLS0tIDExMzAsMTEzNiAtLS0tCiAgICAgIHJldHVybiBmYWxzZTsK ICAgIHN3aXRjaCAoZGV2bikKICAgICAgeworICAgICAgIGNhc2UgRkhfRklG TzoKICAgICAgICBjYXNlIEZIX1NPQ0tFVDoKICAJY2hhciAqYzsKICAJc3Ry Y3B5ICh3aW4zMl9wYXRoLCBzcmNfcGF0aCk7CioqKioqKioqKioqKioqKgoq KiogMjk1MiwyOTU3ICoqKioKLS0tIDI5NjIsMjk3MCAtLS0tCiAgICBlbHNl IGlmIChnb3QgPT0gc2l6ZW9mIChjb29raWVfYnVmKQogIAkgICAmJiBtZW1j bXAgKGNvb2tpZV9idWYsIFNPQ0tFVF9DT09LSUUsIHNpemVvZiAoY29va2ll X2J1ZikpID09IDApCiAgICAgICpwZmxhZ3MgfD0gUEFUSF9TT0NLRVQ7Cisg ICBlbHNlIGlmIChnb3QgPT0gc2l6ZW9mIChjb29raWVfYnVmKQorIAkgICAm JiBtZW1jbXAgKGNvb2tpZV9idWYsIEZJRk9fQ09PS0lFLCBzaXplb2YgKGNv b2tpZV9idWYpKSA9PSAwKQorICAgICAqcGZsYWdzIHw9IFBBVEhfRklGTzsK ICAgIGVsc2UKICAgICAgewogICAgICAgIC8qIE5vdCBhIHN5bWxpbmssIHNl ZSBpZiBleGVjdXRhYmxlLiAgKi8KKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcv d2luc3VwL2N5Z3dpbi9wYXRoLmgJU3VuIEphbiAxMSAxODoxNzoyNiAyMDA0 Ci0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL3BhdGguaAlUdWUg RGVjIDIzIDEwOjM0OjQxIDIwMDMKKioqKioqKioqKioqKioqCioqKiA1NCw2 MCAqKioqCiAgICBQQVRIX0hBU19TWU1MSU5LUyA9IDB4MTAwMDAwMDAsCiAg ICBQQVRIX0hBU0JVR0dZT1BFTiA9IDB4MjAwMDAwMDAsCiAgICBQQVRIX1NP Q0tFVCA9ICAgICAgIDB4NDAwMDAwMDAsCiEgICBQQVRIX0hBU0FDTFMgPSAg ICAgIDB4ODAwMDAwMDAKICB9OwogIAogIGNsYXNzIHN5bWxpbmtfaW5mbzsK LS0tIDU0LDYxIC0tLS0KICAgIFBBVEhfSEFTX1NZTUxJTktTID0gMHgxMDAw MDAwMCwKICAgIFBBVEhfSEFTQlVHR1lPUEVOID0gMHgyMDAwMDAwMCwKICAg IFBBVEhfU09DS0VUID0gICAgICAgMHg0MDAwMDAwMCwKISAgIFBBVEhfSEFT QUNMUyA9ICAgICAgMHg4MDAwMDAwMCwKISAgIFBBVEhfRklGTyA9ICAgICAg ICAgMHgwODAwMDAwMAogIH07CiAgCiAgY2xhc3Mgc3ltbGlua19pbmZvOwoq KioqKioqKioqKioqKioKKioqIDEwMiwxMDcgKioqKgotLS0gMTAzLDEwOSAt LS0tCiAgICBpbnQgaXNzeW1saW5rICgpIGNvbnN0IHtyZXR1cm4gcGF0aF9m bGFncyAmIFBBVEhfU1lNTElOSzt9CiAgICBpbnQgaXNfbG5rX3N5bWxpbmsg KCkgY29uc3Qge3JldHVybiBwYXRoX2ZsYWdzICYgUEFUSF9MTks7fQogICAg aW50IGlzc29ja2V0ICgpIGNvbnN0IHtyZXR1cm4gcGF0aF9mbGFncyAmIFBB VEhfU09DS0VUO30KKyAgIGludCBpc2ZpZm8gKCkgY29uc3Qge3JldHVybiBw YXRoX2ZsYWdzICYgUEFUSF9GSUZPO30KICAgIGludCBpc2N5Z2V4ZWMgKCkg Y29uc3Qge3JldHVybiBwYXRoX2ZsYWdzICYgUEFUSF9DWUdXSU5fRVhFQzt9 CiAgICBib29sIGV4aXN0cyAoKSBjb25zdCB7cmV0dXJuIGZpbGVhdHRyICE9 IElOVkFMSURfRklMRV9BVFRSSUJVVEVTO30KICAgIGJvb2wgaGFzX2F0dHJp YnV0ZSAoRFdPUkQgeCkgY29uc3Qge3JldHVybiBleGlzdHMgKCkgJiYgKGZp bGVhdHRyICYgeCk7fQoqKioqKioqKioqKioqKioKKioqIDE3OCwxODMgKioq KgotLS0gMTgwLDE4OCAtLS0tCiAgLyogU29ja2V0IG1hcmtlciAqLwogICNk ZWZpbmUgU09DS0VUX0NPT0tJRSAgIiE8c29ja2V0ID4iCiAgCisgLyogTmFt ZWQgcGlwZSBtYXJrZXIgKi8KKyAjZGVmaW5lIEZJRk9fQ09PS0lFICAgICIh PGZpZm8gICA+IgorIAogIC8qIFRoZSBzaXplb2YgaGVhZGVyIHdyaXR0ZW4g dG8gYSBzaG9ydGN1dCBieSBDeWd3aW4gb3IgVS9XSU4uICovCiAgI2RlZmlu ZSBTSE9SVENVVF9IRFJfU0laRSAgICAgICA3NgogIAoqKiogY3lnd2luLTEu NS41LTFfb3JpZy93aW5zdXAvY3lnd2luL3NlbGVjdC5jYwlTdW4gSmFuIDEx IDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1cC9jeWd3 aW4vc2VsZWN0LmNjCVN1biBKYW4gMTEgMTc6NTQ6MTQgMjAwNAoqKioqKioq KioqKioqKioKKioqIDY0MCw2NDUgKioqKgotLS0gNjQwLDgzNSAtLS0tCiAg fQogIAogIHN0YXRpYyBpbnQKKyBwZWVrX2ZpZm8gKHNlbGVjdF9yZWNvcmQg KnMsIGJvb2wgZnJvbV9zZWxlY3QpCisgeworICAgaW50IG4gPSAwLCBnb3Rv bmUgPSAwLCB3c3QgPSBXQUlUX1RJTUVPVVQ7CisgCisgICBmaGFuZGxlcl9m aWZvICpmaCA9IChmaGFuZGxlcl9maWZvICopIHMtPmZoOworIAorICAgSEFO RExFIGg7CisgICBzZXRfaGFuZGxlX29yX3JldHVybl9pZl9ub3Rfb3BlbiAo aCwgcyk7CisgCisgICBmaWZvX2d1YXJkICpndWFyZCA9IChjbGFzcyBmaWZv X2d1YXJkICopIGZoLT5nZXRfZ3VhcmRvYmplY3QgKCk7CisgICBIQU5ETEUg Z3VhcmRfbXV0ZXggPSBmcm9tX3NlbGVjdCA/IGZoLT5nZXRfZ3VhcmQgKCkg OiBOVUxMOworIAorICAgaWYgKCFzLT5yZWFkX3NlbGVjdGVkKQorICAgewor ICAgICBpZiAoIXMtPmV4Y2VwdF9zZWxlY3RlZCkKKyAgICAgICBnb3RvIG91 dDsKKyAgIH0gZWxzZSBpZiAocy0+cmVhZF9yZWFkeSkKKyAgIHsKKyAgICAg Z290b25lID0gMTsKKyAgICAgZ290byBvdXQ7CisgICB9CisgCisgICBpZiAo cy0+d3JpdGVfcmVhZHkpCisgICAgICAgOworICAgZWxzZSBpZiAoIWd1YXJk X211dGV4IHx8ICFndWFyZCkKKyAgICAgICA7CisgICBlbHNlIGlmICgoKHdz dCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGd1YXJkX211dGV4LCAwKSkgIT0g V0FJVF9PQkpFQ1RfMCkgJiYKKyAgICAod3N0ICE9IFdBSVRfQUJBTkRPTkVE KSkKKyAgIHsKKyAgICAgc2VsZWN0X3ByaW50ZiAoIiVzLCBjb3VsZG4ndCBn ZXQgRklGTyBtdXRleCAlcCwgJUUiLCBmaC0+Z2V0X25hbWUgKCksCisgCQkg ICAgIGd1YXJkX211dGV4KTsKKyAgIH0gZWxzZQorICAgeworICAgICBuID0g Z3VhcmQtPmZkX3N6OworICAgICBpZiAoKG4gPiAwKSAmJiBzLT5yZWFkX3Nl bGVjdGVkKQorICAgICB7CisgCXNlbGVjdF9wcmludGYgKCIlcywgcmVhZHkg Zm9yIHJlYWQgJWQgYnl0ZXMiLCBmaC0+Z2V0X25hbWUgKCksIG4pOworIAln b3RvbmUgKz0gcy0+cmVhZF9yZWFkeSA9IHRydWU7CisgICAgIH0KKyAgIH0K KyAgICAgCisgICBpZiAoIWdvdG9uZSAmJiAoIWd1YXJkLT5yZWFkZXJzIHx8 ICFndWFyZC0+d3JpdGVycykpIAorICAgeworICAgICBpZiAocy0+cmVhZF9z ZWxlY3RlZCkKKyAJZ290b25lICs9IHMtPnJlYWRfcmVhZHkgPSB0cnVlOwor ICAgICBpZiAocy0+ZXhjZXB0X3NlbGVjdGVkKQorIAlnb3RvbmUgPSBzLT5l eGNlcHRfcmVhZHkgPSB0cnVlOworICAgfQorIAorICAgaWYgKCh3c3QgPT0g V0FJVF9PQkpFQ1RfMCkgfHwgKHdzdCA9PSBXQUlUX0FCQU5ET05FRCkpIAor ICAgICBSZWxlYXNlTXV0ZXggKGd1YXJkX211dGV4KTsKKyAKKyBvdXQ6Cisg ICByZXR1cm4gZ290b25lIHx8IHMtPndyaXRlX3JlYWR5OworIH0KKyAKKyBz dGF0aWMgaW50IHN0YXJ0X3RocmVhZF9maWZvIChzZWxlY3RfcmVjb3JkICpt ZSwgc2VsZWN0X3N0dWZmICpzdHVmZik7CisgCisgc3RydWN0IGZpZm9pbmYK KyAgIHsKKyAgICAgY3lndGhyZWFkICp0aHJlYWQ7CisgICAgIEJPT0wgc3Rv cF90aHJlYWRfZmlmbzsKKyAgICAgc2VsZWN0X3JlY29yZCAqc3RhcnQ7Cisg ICB9OworIAorIHN0YXRpYyBEV09SRCBXSU5BUEkKKyB0aHJlYWRfZmlmbyAo dm9pZCAqYXJnKQorIHsKKyAgIGZpZm9pbmYgKnBpID0gKGZpZm9pbmYgKikg YXJnOworICAgQk9PTCBnb3RvbmUgPSBGQUxTRTsKKyAKKyAgIGZvciAoOzsp CisgICAgIHsKKyAgICAgICBzZWxlY3RfcmVjb3JkICpzID0gcGktPnN0YXJ0 OworICAgICAgIHdoaWxlICgocyA9IHMtPm5leHQpKQorIAlpZiAocy0+c3Rh cnR1cCA9PSBzdGFydF90aHJlYWRfZmlmbykKKyAJICB7CisgCSAgICBpZiAo cGVla19maWZvIChzLCB0cnVlKSkKKyAJICAgICAgZ290b25lID0gdHJ1ZTsK KyAJICAgIGlmIChwaS0+c3RvcF90aHJlYWRfZmlmbykKKyAJICAgICAgewor IAkJc2VsZWN0X3ByaW50ZiAoInN0b3BwaW5nIik7CisgCQlnb3RvIG91dDsK KyAJICAgICAgfQorIAkgIH0KKyAgICAgICAvKiBQYXJhbm9pZCBjaGVjayAq LworICAgICAgIGlmIChwaS0+c3RvcF90aHJlYWRfZmlmbykKKyAJeworIAkg IHNlbGVjdF9wcmludGYgKCJzdG9wcGluZyBmcm9tIG91dGVyIGxvb3AiKTsK KyAJICBicmVhazsKKyAJfQorICAgICAgIGlmIChnb3RvbmUpCisgCWJyZWFr OworICAgICAgIFNsZWVwICgxMCk7CisgICAgIH0KKyAKKyBvdXQ6CisgICBy ZXR1cm4gMDsKKyB9CisgCisgc3RhdGljIGludAorIHN0YXJ0X3RocmVhZF9m aWZvIChzZWxlY3RfcmVjb3JkICptZSwgc2VsZWN0X3N0dWZmICpzdHVmZikK KyB7CisgICBpZiAoc3R1ZmYtPmRldmljZV9zcGVjaWZpY1tGSERFVk4gKEZI X0ZJRk8pXSkKKyAgICAgeworICAgICAgIG1lLT5oID0gKigoZmlmb2luZiAq KSBzdHVmZi0+ZGV2aWNlX3NwZWNpZmljW0ZIREVWTiAoRkhfRklGTyldKS0+ dGhyZWFkOworICAgICAgIHJldHVybiAxOworICAgICB9CisgICBmaWZvaW5m ICpwaSA9IG5ldyBmaWZvaW5mOworICAgcGktPnN0YXJ0ID0gJnN0dWZmLT5z dGFydDsKKyAgIHBpLT5zdG9wX3RocmVhZF9maWZvID0gRkFMU0U7CisgICBw aS0+dGhyZWFkID0gbmV3IGN5Z3RocmVhZCAodGhyZWFkX2ZpZm8sIChMUFZP SUQpIHBpLCAic2VsZWN0X2ZpZm8iKTsKKyAgIG1lLT5oID0gKnBpLT50aHJl YWQ7CisgICBpZiAoIW1lLT5oKQorICAgICByZXR1cm4gMDsKKyAgIHN0dWZm LT5kZXZpY2Vfc3BlY2lmaWNbRkhERVZOIChGSF9GSUZPKV0gPSAodm9pZCAq KSBwaTsKKyAgIHJldHVybiAxOworIH0KKyAKKyBzdGF0aWMgdm9pZAorIGZp Zm9fY2xlYW51cCAoc2VsZWN0X3JlY29yZCAqLCBzZWxlY3Rfc3R1ZmYgKnN0 dWZmKQorIHsKKyAgIGZpZm9pbmYgKnBpID0gKGZpZm9pbmYgKikgc3R1ZmYt PmRldmljZV9zcGVjaWZpY1tGSERFVk4gKEZIX0ZJRk8pXTsKKyAgIGlmIChw aSAmJiBwaS0+dGhyZWFkKQorICAgICB7CisgICAgICAgcGktPnN0b3BfdGhy ZWFkX2ZpZm8gPSB0cnVlOworICAgICAgIHBpLT50aHJlYWQtPmRldGFjaCAo KTsKKyAgICAgICBkZWxldGUgcGk7CisgICAgICAgc3R1ZmYtPmRldmljZV9z cGVjaWZpY1tGSERFVk4gKEZIX0ZJRk8pXSA9IE5VTEw7CisgICAgIH0KKyB9 CisgCisgaW50CisgZmhhbmRsZXJfZmlmbzo6cmVhZHlfZm9yX3JlYWQgKGlu dCBmZCwgRFdPUkQgaG93bG9uZykKKyB7CisgICBpbnQgcmVzOworICAgaWYg KGhvd2xvbmcpCisgICAgIHJlcyA9IHRydWU7CisgICBlbHNlCisgICAgIHJl cyA9IGZoYW5kbGVyX2Jhc2U6OnJlYWR5X2Zvcl9yZWFkIChmZCwgaG93bG9u Zyk7CisgCisgICBpZiAocmVzKQorICAgICBnZXRfZ3VhcmQgKCk7CisgICBy ZXR1cm4gcmVzOworIH0KKyAKKyBzZWxlY3RfcmVjb3JkICoKKyBmaGFuZGxl cl9maWZvOjpzZWxlY3RfcmVhZCAoc2VsZWN0X3JlY29yZCAqcykKKyB7Cisg ICBpZiAoIXMpCisgICAgIHMgPSBuZXcgc2VsZWN0X3JlY29yZDsKKyAgIHMt PnN0YXJ0dXAgPSBzdGFydF90aHJlYWRfZmlmbzsKKyAgIHMtPnBlZWsgPSBw ZWVrX2ZpZm87CisgICBzLT52ZXJpZnkgPSB2ZXJpZnlfb2s7CisgICBzLT5y ZWFkX3NlbGVjdGVkID0gdHJ1ZTsKKyAgIHMtPnJlYWRfcmVhZHkgPSBmYWxz ZTsKKyAgIHMtPmNsZWFudXAgPSBmaWZvX2NsZWFudXA7CisgICByZXR1cm4g czsKKyB9CisgCisgc2VsZWN0X3JlY29yZCAqCisgZmhhbmRsZXJfZmlmbzo6 c2VsZWN0X3dyaXRlIChzZWxlY3RfcmVjb3JkICpzKQorIHsKKyAgIGlmICgh cykKKyAgICAgeworICAgICAgIHMgPSBuZXcgc2VsZWN0X3JlY29yZDsKKyAg ICAgICBzLT5zdGFydHVwID0gbm9fc3RhcnR1cDsKKyAgICAgICBzLT52ZXJp ZnkgPSBub192ZXJpZnk7CisgICAgIH0KKyAgIHMtPnBlZWsgPSBwZWVrX2Zp Zm87CisgICBzLT53cml0ZV9zZWxlY3RlZCA9IHRydWU7CisgICBzLT53cml0 ZV9yZWFkeSA9IHRydWU7CisgICByZXR1cm4gczsKKyB9CisgCisgc2VsZWN0 X3JlY29yZCAqCisgZmhhbmRsZXJfZmlmbzo6c2VsZWN0X2V4Y2VwdCAoc2Vs ZWN0X3JlY29yZCAqcykKKyB7CisgICBpZiAoIXMpCisgICAgICAgcyA9IG5l dyBzZWxlY3RfcmVjb3JkOworICAgcy0+c3RhcnR1cCA9IHN0YXJ0X3RocmVh ZF9maWZvOworICAgcy0+cGVlayA9IHBlZWtfZmlmbzsKKyAgIHMtPnZlcmlm eSA9IHZlcmlmeV9vazsKKyAgIHMtPmNsZWFudXAgPSBmaWZvX2NsZWFudXA7 CisgICBzLT5leGNlcHRfc2VsZWN0ZWQgPSB0cnVlOworICAgcy0+ZXhjZXB0 X3JlYWR5ID0gZmFsc2U7CisgICByZXR1cm4gczsKKyB9CisgCisgc3RhdGlj IGludAogIHBlZWtfY29uc29sZSAoc2VsZWN0X3JlY29yZCAqbWUsIGJvb2wp CiAgewogICAgZXh0ZXJuIGNvbnN0IGNoYXIgKiBnZXRfbm9uYXNjaWlfa2V5 IChJTlBVVF9SRUNPUkQmIGlucHV0X3JlYywgY2hhciAqKTsKKioqIGN5Z3dp bi0xLjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9zeXNjYWxscy5jYwlTdW4g SmFuIDExIDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1 cC9jeWd3aW4vc3lzY2FsbHMuY2MJU3VuIEphbiAxMSAxNzo1NzozMyAyMDA0 CioqKioqKioqKioqKioqKgoqKiogODE3LDgyMyAqKioqCiAgCiAgICAgICAg LyogRklYTUU6IFRoaXMgbWFrZXMgY2hvd24gb24gYSBkZXZpY2Ugc3VjY2Vl ZCBhbHdheXMuICBTb21lZGF5IHdlJ2xsIHdhbnQKICAJIHRvIGFjdHVhbGx5 IGFsbG93IGNob3duIHRvIHdvcmsgcHJvcGVybHkgb24gZGV2aWNlcy4gKi8K ISAgICAgICBpZiAod2luMzJfcGF0aC5pc19kZXZpY2UgKCkgJiYgIXdpbjMy X3BhdGguaXNzb2NrZXQgKCkpCiAgCXsKICAJICByZXMgPSAwOwogIAkgIGdv dG8gZG9uZTsKLS0tIDgxNyw4MjMgLS0tLQogIAogICAgICAgIC8qIEZJWE1F OiBUaGlzIG1ha2VzIGNob3duIG9uIGEgZGV2aWNlIHN1Y2NlZWQgYWx3YXlz LiAgU29tZWRheSB3ZSdsbCB3YW50CiAgCSB0byBhY3R1YWxseSBhbGxvdyBj aG93biB0byB3b3JrIHByb3Blcmx5IG9uIGRldmljZXMuICovCiEgICAgICAg aWYgKHdpbjMyX3BhdGguaXNfZGV2aWNlICgpICYmICF3aW4zMl9wYXRoLmlz c29ja2V0ICgpICYmICF3aW4zMl9wYXRoLmlzZmlmbygpKQogIAl7CiAgCSAg cmVzID0gMDsKICAJICBnb3RvIGRvbmU7CioqKioqKioqKioqKioqKgoqKiog OTM1LDk0MSAqKioqCiAgCiAgICAvKiBGSVhNRTogVGhpcyBtYWtlcyBjaG1v ZCBvbiBhIGRldmljZSBzdWNjZWVkIGFsd2F5cy4gIFNvbWVkYXkgd2UnbGwg d2FudAogICAgICAgdG8gYWN0dWFsbHkgYWxsb3cgY2htb2QgdG8gd29yayBw cm9wZXJseSBvbiBkZXZpY2VzLiAqLwohICAgaWYgKHdpbjMyX3BhdGguaXNf ZGV2aWNlICgpICYmICF3aW4zMl9wYXRoLmlzc29ja2V0ICgpKQogICAgICB7 CiAgICAgICAgcmVzID0gMDsKICAgICAgICBnb3RvIGRvbmU7Ci0tLSA5MzUs OTQxIC0tLS0KICAKICAgIC8qIEZJWE1FOiBUaGlzIG1ha2VzIGNobW9kIG9u IGEgZGV2aWNlIHN1Y2NlZWQgYWx3YXlzLiAgU29tZWRheSB3ZSdsbCB3YW50 CiAgICAgICB0byBhY3R1YWxseSBhbGxvdyBjaG1vZCB0byB3b3JrIHByb3Bl cmx5IG9uIGRldmljZXMuICovCiEgICBpZiAod2luMzJfcGF0aC5pc19kZXZp Y2UgKCkgJiYgIXdpbjMyX3BhdGguaXNzb2NrZXQgKCkgJiYgIXdpbjMyX3Bh dGguaXNmaWZvKCkpCiAgICAgIHsKICAgICAgICByZXMgPSAwOwogICAgICAg IGdvdG8gZG9uZTsKKioqKioqKioqKioqKioqCioqKiA5NjIsOTY4ICoqKioK ICAgICAgICBlbHNlCiAgCShEV09SRCkgd2luMzJfcGF0aCB8PSBGSUxFX0FU VFJJQlVURV9SRUFET05MWTsKICAKISAgICAgICBpZiAoIXdpbjMyX3BhdGgu aXNfbG5rX3N5bWxpbmsgKCkgJiYgU19JU0xOSyAobW9kZSkgfHwgU19JU1NP Q0sgKG1vZGUpKQogIAkoRFdPUkQpIHdpbjMyX3BhdGggfD0gRklMRV9BVFRS SUJVVEVfU1lTVEVNOwogIAogICAgICAgIGlmICghU2V0RmlsZUF0dHJpYnV0 ZXMgKHdpbjMyX3BhdGgsIHdpbjMyX3BhdGgpKQotLS0gOTYyLDk2OCAtLS0t CiAgICAgICAgZWxzZQogIAkoRFdPUkQpIHdpbjMyX3BhdGggfD0gRklMRV9B VFRSSUJVVEVfUkVBRE9OTFk7CiAgCiEgICAgICAgaWYgKCF3aW4zMl9wYXRo LmlzX2xua19zeW1saW5rICgpICYmIFNfSVNMTksgKG1vZGUpIHx8IFNfSVNT T0NLIChtb2RlKSB8fCBTX0lTRklGTyhtb2RlKSkKICAJKERXT1JEKSB3aW4z Ml9wYXRoIHw9IEZJTEVfQVRUUklCVVRFX1NZU1RFTTsKICAKICAgICAgICBp ZiAoIVNldEZpbGVBdHRyaWJ1dGVzICh3aW4zMl9wYXRoLCB3aW4zMl9wYXRo KSkKKioqKioqKioqKioqKioqCioqKiAxMDM2LDEwNDIgKioqKgogICAgICAg IHBhdGhfY29udiBwYyAoY2ZkLT5nZXRfbmFtZSAoKSwgUENfU1lNX05PRk9M TE9XKTsKICAgICAgICBtZW1zZXQgKGJ1ZiwgMCwgc2l6ZW9mIChzdHJ1Y3Qg X19zdGF0NjQpKTsKICAgICAgICByZXMgPSBjZmQtPmZzdGF0IChidWYsICZw Yyk7CiEgICAgICAgaWYgKCFyZXMgJiYgY2ZkLT5nZXRfZGV2aWNlICgpICE9 IEZIX1NPQ0tFVCkKICAJewogIAkgIGlmICghYnVmLT5zdF9pbm8pCiAgCSAg ICBidWYtPnN0X2lubyA9IGhhc2hfcGF0aF9uYW1lICgwLCBjZmQtPmdldF93 aW4zMl9uYW1lICgpKTsKLS0tIDEwMzYsMTA0MiAtLS0tCiAgICAgICAgcGF0 aF9jb252IHBjIChjZmQtPmdldF9uYW1lICgpLCBQQ19TWU1fTk9GT0xMT1cp OwogICAgICAgIG1lbXNldCAoYnVmLCAwLCBzaXplb2YgKHN0cnVjdCBfX3N0 YXQ2NCkpOwogICAgICAgIHJlcyA9IGNmZC0+ZnN0YXQgKGJ1ZiwgJnBjKTsK ISAgICAgICBpZiAoIXJlcyAmJiBjZmQtPmdldF9kZXZpY2UgKCkgIT0gRkhf U09DS0VUICYmIGNmZC0+Z2V0X2RldmljZSAoKSAhPSBGSF9GSUZPKQogIAl7 CiAgCSAgaWYgKCFidWYtPnN0X2lubykKICAJICAgIGJ1Zi0+c3RfaW5vID0g aGFzaF9wYXRoX25hbWUgKDAsIGNmZC0+Z2V0X3dpbjMyX25hbWUgKCkpOwoq KioqKioqKioqKioqKioKKioqIDExNDgsMTE1NCAqKioqCiAgCQkgICAgcGMs IChEV09SRCkgcmVhbF9wYXRoKTsKICAgICAgICBtZW1zZXQgKGJ1ZiwgMCwg c2l6ZW9mICgqYnVmKSk7CiAgICAgICAgcmVzID0gZmgtPmZzdGF0IChidWYs IHBjKTsKISAgICAgICBpZiAoIXJlcyAmJiBmaC0+Z2V0X2RldmljZSAoKSAh PSBGSF9TT0NLRVQpCiAgCXsKICAJICBpZiAoIWJ1Zi0+c3RfaW5vKQogIAkg ICAgYnVmLT5zdF9pbm8gPSBoYXNoX3BhdGhfbmFtZSAoMCwgZmgtPmdldF93 aW4zMl9uYW1lICgpKTsKLS0tIDExNDgsMTE1NCAtLS0tCiAgCQkgICAgcGMs IChEV09SRCkgcmVhbF9wYXRoKTsKICAgICAgICBtZW1zZXQgKGJ1ZiwgMCwg c2l6ZW9mICgqYnVmKSk7CiAgICAgICAgcmVzID0gZmgtPmZzdGF0IChidWYs IHBjKTsKISAgICAgICBpZiAoIXJlcyAmJiBmaC0+Z2V0X2RldmljZSAoKSAh PSBGSF9TT0NLRVQgJiYgZmgtPmdldF9kZXZpY2UgKCkgIT0gRkhfRklGTykK ICAJewogIAkgIGlmICghYnVmLT5zdF9pbm8pCiAgCSAgICBidWYtPnN0X2lu byA9IGhhc2hfcGF0aF9uYW1lICgwLCBmaC0+Z2V0X3dpbjMyX25hbWUgKCkp OwoqKioqKioqKioqKioqKioKKioqIDIwMjUsMjAzNyAqKioqCiAgICByZXR1 cm4gbWtub2QzMiAoX3BhdGgsIG1vZGUsIChfX2RldjMyX3QpIGRldik7CiAg fQogIAogIGV4dGVybiAiQyIgaW50CiAgbWtmaWZvIChjb25zdCBjaGFyICpf cGF0aCwgbW9kZV90IG1vZGUpCiAgewohICAgc2V0X2Vycm5vIChFTk9TWVMp OwohICAgcmV0dXJuIC0xOwogIH0KICAKICAvKiBzZXRldWlkOiBzdGFuZGFy ZHM/ICovCiAgZXh0ZXJuICJDIiBpbnQKICBzZXRldWlkMzIgKF9fdWlkMzJf dCB1aWQpCi0tLSAyMDI1LDIxMTcgLS0tLQogICAgcmV0dXJuIG1rbm9kMzIg KF9wYXRoLCBtb2RlLCAoX19kZXYzMl90KSBkZXYpOwogIH0KICAKKyBleHRl cm4gIkMiIGludCBfbWtub2QgKGNvbnN0IGNoYXIgKiwgbW9kZV90LCAuLi4p CisgICBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCJta25vZCIpKSk7CisgCiAg ZXh0ZXJuICJDIiBpbnQKICBta2ZpZm8gKGNvbnN0IGNoYXIgKl9wYXRoLCBt b2RlX3QgbW9kZSkKICB7CiEgICBpbnQgcmVzID0gLTE7CiEgICBpbnQgc2hh cmVkOwohICAgc2lnZnJhbWUgdGhpc2ZyYW1lIChtYWludGhyZWFkKTsKISAK ISAgIHN5c2NhbGxfcHJpbnRmICgibWtmaWZvICglcywgJXUpIiwgX3BhdGgs IG1vZGUpOwohICAgCiEgICAvKiBjb25zaWRlcmluZyBHTE9CQUxcIGZvciBO VCBmYW1pbHkgKi8KISAgIGlmIChzdHJsZW4gKF9wYXRoKSA+PSBNQVhfUEFU SCAtICh3aW5jYXAuaGFzX3Rlcm1pbmFsX3NlcnZpY2VzICgpID8gNyA6IDAp KQohICAgewohICAgICBzZXRfZXJybm8gKEVOQU1FVE9PTE9ORyk7CiEgICAg IGdvdG8gb3V0OwohICAgfQohIAohICAgaWYgKCFjaGVja19udWxsX2VtcHR5 X3N0cl9lcnJubyAoX3BhdGgpKQohICAgICB7CiEgICAgICAgcGF0aF9jb252 IHBjIChfcGF0aCwgUENfU1lNX0ZPTExPVyk7CiEgICAgICAgaWYgKHBjLmVy cm9yKQohICAgICAgIHsKISAJICBzZXRfZXJybm8gKEVOT0VOVCk7CiEgCSAg Z290byBvdXQ7CiEgICAgICAgfQohICAgICAgIGlmICghd3JpdGFibGVfZGly ZWN0b3J5IChwYykpCiEgICAgICAgewohIAlzZXRfZXJybm8gKEVBQ0NFUyk7 CiEgCWdvdG8gb3V0OwohICAgICAgIH0KISAgICAgICBpZiAocGMuZXhpc3Rz ICgpKQohICAgICAgIHsKISAJICBzZXRfZXJybm8gKEVFWElTVCk7CiEgCSAg Z290byBvdXQ7CiEgICAgICAgfQohICAgICAgIG1vZGVfdCBmaW5tb2RlID0g bW9kZSAmIH5jeWdoZWFwLT51bWFzazsKISAgICAgICBEV09SRCBhdHRyID0g RklMRV9BVFRSSUJVVEVfU1lTVEVNOwohICAgICAgIGlmICghKGZpbm1vZGUg JiAoU19JV1VTUiB8IFNfSVdHUlAgfCBTX0lXT1RIKSkpCiEgCWF0dHIgfD0g RklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CiEgICAgICAgCiEgICAgICAgc2hh cmVkID0gd2luY2FwLnNoYXJlZCAoKTsKISAKISAgICAgICBTRUNVUklUWV9B VFRSSUJVVEVTIHNhID0gc2VjX25vbmU7CiEgICAgICAgaWYgKGFsbG93X250 c2VjICYmIHBjLmhhc19hY2xzICgpKQohIAlzZXRfc2VjdXJpdHlfYXR0cmli dXRlIChmaW5tb2RlLCAmc2EsIGFsbG9jYSAoNDA5NiksIDQwOTYpOwohICAg ICAgIEhBTkRMRSBmaCA9IENyZWF0ZUZpbGUgKHBjLCBHRU5FUklDX1dSSVRF LCBzaGFyZWQsCiEgICAgICAgICZzYSwgQ1JFQVRFX05FVywgYXR0ciwgMCk7 CiEgICAgICAgaWYgKGZoID09IElOVkFMSURfSEFORExFX1ZBTFVFKQohIAl7 CiEgCSAgaWYgKEdldExhc3RFcnJvciAoKSA9PSBFUlJPUl9BTFJFQURZX0VY SVNUUykKISAJICAgIHNldF9lcnJubyAoRUVYSVNUKTsKISAJICBlbHNlCiEg CSAgICBfX3NldGVycm5vICgpOwohIAl9CiEgCiEgICAgICAgY2hhciBidWZb c2l6ZW9mIChGSUZPX0NPT0tJRSkgKyAoTUFYX1BBVEgpICsgMV07CiEgICAg ICAgX19zbWFsbF9zcHJpbnRmIChidWYsICIlcyVzIiwgRklGT19DT09LSUUs IHBjLmdldF93aW4zMiAoKSk7CiEgICAgICAgRFdPUkQgYmxlbiA9IHN0cmxl biAoYnVmKSArIDE7CiEgICAgICAgRFdPUkQgcmJsZW4gPSAwOwohIAohICAg ICAgIGlmICghV3JpdGVGaWxlIChmaCwgYnVmLCBibGVuLCAmcmJsZW4sIDAp KQohIAl7CiEgCSAgX19zZXRlcnJubyAoKTsKISAJICBDbG9zZUhhbmRsZSAo ZmgpOwohIAkgIERlbGV0ZUZpbGUgKHBjKTsKISAJfQohICAgICAgIGVsc2UK ISAJewohIAkgIENsb3NlSGFuZGxlIChmaCk7CiEgCSAgaWYgKHJibGVuIDwg YmxlbikgewohIAkgICAgc2V0X2Vycm5vIChFTk9TUEMpOwohIAkgICAgZ290 byBvdXQ7CiEgCSAgfQohIAkgIHJlcyA9IDA7CiEgCX0KISAgICAgfQohIAoh ICBvdXQ6CiEgICBzeXNjYWxsX3ByaW50ZiAoIiVkID0gbWtmaWZvICglcywg JXUpIiwgcmVzLCBfcGF0aCwgbW9kZSk7CiEgICByZXR1cm4gcmVzOwogIH0K ICAKKyBleHRlcm4gIkMiIGludCBfbWtmaWZvIChjb25zdCBjaGFyICosIG1v ZGVfdCwgLi4uKQorICAgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgibWtmaWZv IikpKTsKKyAKICAvKiBzZXRldWlkOiBzdGFuZGFyZHM/ICovCiAgZXh0ZXJu ICJDIiBpbnQKICBzZXRldWlkMzIgKF9fdWlkMzJfdCB1aWQpCg== ------=_20040111204741_71200 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ------=_20040111204741_71200--
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |