Re: Kernel Debugging

Douglas Kilpatrick (dougk@tislabs.com)
Thu, 27 Apr 2000 10:01:02 -0400 (EDT)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---1463782902-1586378699-956844045=:19930
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.4.10.10004271000531.19930@dustpuppy.va.tislabs.com>

On Thu, 27 Apr 2000, Mani Manoharan Balaraman wrote:

> The url is ftp://oss.sgi.com/www/projects/kgdb/download/

Ok. That's the remote debugging kernel patch...

The patch available for 2.2 is (IMHO) broken. I have given them a revised
patch, but no one has posted it to the web page.

I have attached my revised patch to this message. Basically I fixed their
problems with arg parce-ing, added a SysRq key to attach to the remote
side, and integrated some changes Tigran (I believe) added to previous
remote kernel debugging patches that somehow did not make the SGI tree.

Hope this helps,

Doug

-- 
dougk@tislabs.com
dkilpatr@nai.com

---1463782902-1586378699-956844045=:19930 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="kgdb_2.2.14-rh62.diff" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.10.10004271000450.19930@dustpuppy.va.tislabs.com> Content-Description: Content-Disposition: ATTACHMENT; FILENAME="kgdb_2.2.14-rh62.diff"

ZGlmZiAtTiAtVSAzIC1yIC9ob21lL3Jvb3QvdXNyL3NyYy9saW51eC0yLjIu MTQvRG9jdW1lbnRhdGlvbi9nZGIudHh0IC4vRG9jdW1lbnRhdGlvbi9nZGIu dHh0DQotLS0gL2hvbWUvcm9vdC91c3Ivc3JjL2xpbnV4LTIuMi4xNC9Eb2N1 bWVudGF0aW9uL2dkYi50eHQJV2VkIERlYyAzMSAxOTowMDowMCAxOTY5DQor KysgLi9Eb2N1bWVudGF0aW9uL2dkYi50eHQJVGh1IE1hciAzMCAxNTozODow MSAyMDAwDQpAQCAtMCwwICsxLDE3IEBADQorVXNpbmcgR0RCIHRvIHJlbW90 ZWx5IGRlYnVnIHRoZSBMaW51eCBrZXJuZWwNCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoZSBpMzg2IGtl cm5lbCBub3cgaW5jbHVkZXMgdGhlIGFiaWxpdHkgdG8gYmUgZGVidWdnZWQg b3ZlciBhIHNlcmlhbCBsaW5lLg0KK1RoaXMgZnVuY3Rpb25hbGl0eSBpcyBi YXNlZCBvbiBhIHBhdGNoIHdyaXR0ZW4gYnkgRGF2aWQgR3JvdGhlIDxkYXZl QGdjb20uY29tPi4NCitUbyB0aGlzIHBhdGNoIHdhcyBhZGRlZCB0aGUgYWJp bGl0eSBmb3IgZ2RiIHRvIGNvbm5lY3QgdG8gdGhlIGtlcm5lbCBkdXJpbmcN Citib290dXAgKGFzIG9wcG9zZWQgdG8gd2FpdGluZyBmb3IgdGhlIHN5c3Rl bSB0byBjb21lIGFsbCB0aGUgd2F5IHVwIGFuZCB0aGVuDQorcnVubmluZyBh IHN0dWIgcHJvZ3JhbSBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUpLiAgVGhpcyBu ZXcgZnVuY3Rpb25hbGl0eSB3YXMNCithZGRlZCBieSBTY290dCBGb2VobmVy IDxzZm9laG5lckBlbmdyLnNnaS5jb20+IGF0IFNHSS4NCisNCitUaGVyZSBp cyBhIG5ldyBjb25maWcgb3B0aW9uIENPTkZJR19HREIgdXNlZCB0byBlbmFi bGUgZ2RiIGRlYnVnZ2luZy4gIFRvDQorZm9yY2UgYSBrZXJuZWwgdGhhdCBo YXMgYmVlbiBjb21waWxlZCB3aXRoIENPTkZJR19HREIgdG8gcGF1c2UgZHVy aW5nIHRoZSBib290DQorcHJvY2VzcyBhbmQgd2FpdCBmb3IgYSBjb25uZWN0 aW9uIGZyb20gZ2RiLCB0aGUgcGFyYW10ZXIgImdkYiIgc2hvdWxkIGJlIHBh c3NlZCB0byB0aGUNCitrZXJuZWwuIFRoaXMgY2FuIGJlIGRvbmUgYnkgdHlw aW5nICJnZGIiIGFmdGVyIHRoZSBuYW1lIG9mIHRoZSBrZXJuZWwgb24gdGhl IExJTE8NCitjb21tYW5kIGxpbmUuICBUaGUgcGF0Y2ggZGVmYXVsdHMgdG8g dXNlIHR0eVMxIGF0IGEgYmF1ZCByYXRlIG9mIDM4NDAwLiBUaGVzZQ0KK3Bh cmFtZXRlcnMgY2FuIGJlIGNoYW5nZWQgYnkgdXNpbmcgImdkYnR0eVM9PHBv cnQgbnVtYmVyPiIgYW5kICJnZGJiYXVkPTxiYXVkIHJhdGU+Ig0KK29uIHRo ZSBjb21tYW5kIGxpbmUuDQpkaWZmIC1OIC1VIDMgLXIgL2hvbWUvcm9vdC91 c3Ivc3JjL2xpbnV4LTIuMi4xNC9NYWtlZmlsZSAuL01ha2VmaWxlDQotLS0g L2hvbWUvcm9vdC91c3Ivc3JjL2xpbnV4LTIuMi4xNC9NYWtlZmlsZQlUdWUg QXByICA0IDE4OjEyOjE4IDIwMDANCisrKyAuL01ha2VmaWxlCVR1ZSBBcHIg IDQgMTg6NDk6MzAgMjAwMA0KQEAgLTEsNyArMSw3IEBADQogVkVSU0lPTiA9 IDINCiBQQVRDSExFVkVMID0gMg0KIFNVQkxFVkVMID0gMTQNCi1FWFRSQVZF UlNJT04gPSAtNS4wDQorRVhUUkFWRVJTSU9OID0gc2VyaWFsZ2RiDQogDQog QVJDSCA6PSAkKHNoZWxsIHVuYW1lIC1tIHwgc2VkIC1lIHMvaS44Ni9pMzg2 LyAtZSBzL3N1bjR1L3NwYXJjNjQvIC1lIHMvYXJtLiovYXJtLyAtZSBzL3Nh MTEwL2FybS8pDQogDQpAQCAtODcsNyArODcsMTEgQEANCiAjIHN0YW5kYXJk IENGTEFHUw0KICMNCiANCitpZmRlZiBDT05GSUdfR0RCDQorQ0ZMQUdTID0g LVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWcNCitlbHNlDQogQ0ZM QUdTID0gLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZy YW1lLXBvaW50ZXINCitlbmRpZg0KIA0KICMgdXNlICctZm5vLXN0cmljdC1h bGlhc2luZycsIGJ1dCBvbmx5IGlmIHRoZSBjb21waWxlciBjYW4gdGFrZSBp dA0KIENGTEFHUyArPSAkKHNoZWxsIGlmICQoQ0MpIC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1TIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4vZGV2L251 bGwgMj4mMTsgdGhlbiBlY2hvICItZm5vLXN0cmljdC1hbGlhc2luZyI7IGZp KQ0KZGlmZiAtTiAtVSAzIC1yIC9ob21lL3Jvb3QvdXNyL3NyYy9saW51eC0y LjIuMTQvYXJjaC9pMzg2L2NvbmZpZy5pbiAuL2FyY2gvaTM4Ni9jb25maWcu aW4NCi0tLSAvaG9tZS9yb290L3Vzci9zcmMvbGludXgtMi4yLjE0L2FyY2gv aTM4Ni9jb25maWcuaW4JVHVlIEFwciAgNCAxODoxMjoxOCAyMDAwDQorKysg Li9hcmNoL2kzODYvY29uZmlnLmluCVRodSBNYXIgMzAgMTU6NDA6MTcgMjAw MA0KQEAgLTIxMSw1ICsyMTEsNiBAQA0KIA0KICNib29sICdEZWJ1ZyBrbWFs bG9jL2tmcmVlJyBDT05GSUdfREVCVUdfTUFMTE9DDQogYm9vbCAnTWFnaWMg U3lzUnEga2V5JyBDT05GSUdfTUFHSUNfU1lTUlENCitib29sICdLZXJuZWwg c3VwcG9ydCBmb3IgR0RCJyBDT05GSUdfR0RCDQogZW5kbWVudQ0KIA0KZGlm ZiAtTiAtVSAzIC1yIC9ob21lL3Jvb3QvdXNyL3NyYy9saW51eC0yLjIuMTQv YXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZSAuL2FyY2gvaTM4Ni9rZXJuZWwv TWFrZWZpbGUNCi0tLSAvaG9tZS9yb290L3Vzci9zcmMvbGludXgtMi4yLjE0 L2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUJVHVlIEFwciAgNCAxODoxMjox OCAyMDAwDQorKysgLi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCVRodSBN YXIgMzAgMTU6Mzg6MDEgMjAwMA0KQEAgLTM0LDYgKzM0LDEwIEBADQogICBl bmRpZg0KIGVuZGlmDQogDQoraWZlcSAoJChDT05GSUdfR0RCKSx5KQ0KK09f T0JKUyArPSBnZGIubw0KK2VuZGlmDQorDQogaWZkZWYgQ09ORklHX0FQTQ0K IE9YX09CSlMgKz0gYXBtLm8NCiBlbmRpZg0KZGlmZiAtTiAtVSAzIC1yIC9o b21lL3Jvb3QvdXNyL3NyYy9saW51eC0yLjIuMTQvYXJjaC9pMzg2L2tlcm5l bC9nZGIuYyAuL2FyY2gvaTM4Ni9rZXJuZWwvZ2RiLmMNCi0tLSAvaG9tZS9y b290L3Vzci9zcmMvbGludXgtMi4yLjE0L2FyY2gvaTM4Ni9rZXJuZWwvZ2Ri LmMJV2VkIERlYyAzMSAxOTowMDowMCAxOTY5DQorKysgLi9hcmNoL2kzODYv a2VybmVsL2dkYi5jCVR1ZSBBcHIgIDQgMTQ6MzY6MzMgMjAwMA0KQEAgLTAs MCArMSw3MDIgQEANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KKw0KKwkJVEhJUyBTT0ZUV0FSRSBJUyBOT1QgQ09QWVJJR0hURUQNCisN CisgICBIUCBvZmZlcnMgdGhlIGZvbGxvd2luZyBmb3IgdXNlIGluIHRoZSBw dWJsaWMgZG9tYWluLiAgSFAgbWFrZXMgbm8NCisgICB3YXJyYW50eSB3aXRo IHJlZ2FyZCB0byB0aGUgc29mdHdhcmUgb3IgaXQncyBwZXJmb3JtYW5jZSBh bmQgdGhlDQorICAgdXNlciBhY2NlcHRzIHRoZSBzb2Z0d2FyZSAiQVMgSVMi IHdpdGggYWxsIGZhdWx0cy4NCisNCisgICBIUCBESVNDTEFJTVMgQU5ZIFdB UlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgV0lUSCBSRUdBUkQNCisg ICBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMNCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLg0KKw0KKyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCisgKiAgSGVhZGVyOiByZW1jb20uYyx2 IDEuMzQgOTEvMDMvMDkgMTI6Mjk6NDkgZ2xlbm5lIEV4cCAkDQorICoNCisg KiAgTW9kdWxlIG5hbWU6IHJlbWNvbS5jICQNCisgKiAgUmV2aXNpb246IDEu MzQgJA0KKyAqICBEYXRlOiA5MS8wMy8wOSAxMjoyOTo0OSAkDQorICogIENv bnRyaWJ1dG9yOiAgICAgTGFrZSBTdGV2ZW5zIEluc3RydW1lbnQgRGl2aXNp b24kDQorICoNCisgKiAgRGVzY3JpcHRpb246ICAgICBsb3cgbGV2ZWwgc3Vw cG9ydCBmb3IgZ2RiIGRlYnVnZ2VyLiAkDQorICoNCisgKiAgQ29uc2lkZXJh dGlvbnM6ICBvbmx5IHdvcmtzIG9uIHRhcmdldCBoYXJkd2FyZSAkDQorICoN CisgKiAgV3JpdHRlbiBieTogICAgICBHbGVubiBFbmdlbCAkDQorICogIFVw ZGF0ZWQgYnk6CSAgICAgRGF2aWQgR3JvdGhlIDxkYXZlQGdjb20uY29tPg0K KyAqICBNb2R1bGVTdGF0ZTogICAgIEV4cGVyaW1lbnRhbCAkDQorICoNCisg KiAgTk9URVM6ICAgICAgICAgICBTZWUgQmVsb3cgJA0KKyAqDQorICogIE1v ZGlmaWVkIGZvciAzODYgYnkgSmltIEtpbmdkb24sIEN5Z251cyBTdXBwb3J0 Lg0KKyAqICBDb21wYXRpYmlsaXR5IHdpdGggMi4xLnh4IGtlcm5lbCBieSBE YXZpZCBHcm90aGUgPGRhdmVAZ2NvbS5jb20+DQorICoNCisgKiAgVG8gZW5h YmxlIGRlYnVnZ2VyIHN1cHBvcnQsIHR3byB0aGluZ3MgbmVlZCB0byBoYXBw ZW4uICBPbmUsIGENCisgKiAgY2FsbCB0byBzZXRfZGVidWdfdHJhcHMoKSBp cyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gYWxsb3cgYW55IGJyZWFrcG9pbnRz DQorICogIG9yIGVycm9yIGNvbmRpdGlvbnMgdG8gYmUgcHJvcGVybHkgaW50 ZXJjZXB0ZWQgYW5kIHJlcG9ydGVkIHRvIGdkYi4NCisgKiAgVHdvLCBhIGJy ZWFrcG9pbnQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIHRvIGJlZ2luIGNvbW11 bmljYXRpb24uICBUaGlzDQorICogIGlzIG1vc3QgZWFzaWx5IGFjY29tcGxp c2hlZCBieSBhIGNhbGwgdG8gYnJlYWtwb2ludCgpLiAgQnJlYWtwb2ludCgp DQorICogIHNpbXVsYXRlcyBhIGJyZWFrcG9pbnQgYnkgZXhlY3V0aW5nIGFu IGludCAzLg0KKyAqDQorICoqKioqKioqKioqKioNCisgKg0KKyAqICAgIFRo ZSBmb2xsb3dpbmcgZ2RiIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQ6DQorICoN CisgKiBjb21tYW5kICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJldHVybiB2YWx1ZQ0KKyAqDQorICogICAgZyAg ICAgICAgICAgICByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBDUFUgcmVnaXN0 ZXJzICBoZXggZGF0YSBvciBFTk4NCisgKiAgICBHICAgICAgICAgICAgIHNl dCB0aGUgdmFsdWUgb2YgdGhlIENQVSByZWdpc3RlcnMgICAgIE9LIG9yIEVO Tg0KKyAqDQorICogICAgbUFBLi5BQSxMTExMICBSZWFkIExMTEwgYnl0ZXMg YXQgYWRkcmVzcyBBQS4uQUEgICAgICBoZXggZGF0YSBvciBFTk4NCisgKiAg ICBNQUEuLkFBLExMTEw6IFdyaXRlIExMTEwgYnl0ZXMgYXQgYWRkcmVzcyBB QS5BQSAgICAgIE9LIG9yIEVOTg0KKyAqDQorICogICAgYyAgICAgICAgICAg ICBSZXN1bWUgYXQgY3VycmVudCBhZGRyZXNzICAgICAgICAgICAgICBTTk4g ICAoIHNpZ25hbCBOTikNCisgKiAgICBjQUEuLkFBICAgICAgIENvbnRpbnVl IGF0IGFkZHJlc3MgQUEuLkFBICAgICAgICAgICAgIFNOTg0KKyAqDQorICog ICAgcyAgICAgICAgICAgICBTdGVwIG9uZSBpbnN0cnVjdGlvbiAgICAgICAg ICAgICAgICAgICBTTk4NCisgKiAgICBzQUEuLkFBICAgICAgIFN0ZXAgb25l IGluc3RydWN0aW9uIGZyb20gQUEuLkFBICAgICAgIFNOTg0KKyAqDQorICog ICAgayAgICAgICAgICAgICBraWxsDQorICoNCisgKiAgICA/ICAgICAgICAg ICAgIFdoYXQgd2FzIHRoZSBsYXN0IHNpZ3ZhbCA/ICAgICAgICAgICAgIFNO TiAgIChzaWduYWwgTk4pDQorICoNCisgKiBBbGwgY29tbWFuZHMgYW5kIHJl c3BvbnNlcyBhcmUgc2VudCB3aXRoIGEgcGFja2V0IHdoaWNoIGluY2x1ZGVz IGENCisgKiBjaGVja3N1bS4gIEEgcGFja2V0IGNvbnNpc3RzIG9mDQorICoN CisgKiAkPHBhY2tldCBpbmZvPiM8Y2hlY2tzdW0+Lg0KKyAqDQorICogd2hl cmUNCisgKiA8cGFja2V0IGluZm8+IDo6IDxjaGFyYWN0ZXJzIHJlcHJlc2Vu dGluZyB0aGUgY29tbWFuZCBvciByZXNwb25zZT4NCisgKiA8Y2hlY2tzdW0+ ICAgIDo6IDwgdHdvIGhleCBkaWdpdHMgY29tcHV0ZWQgYXMgbW9kdWxvIDI1 NiBzdW0gb2YgPHBhY2tldGluZm8+Pg0KKyAqDQorICogV2hlbiBhIHBhY2tl dCBpcyByZWNlaXZlZCwgaXQgaXMgZmlyc3QgYWNrbm93bGVkZ2VkIHdpdGgg ZWl0aGVyICcrJyBvciAnLScuDQorICogJysnIGluZGljYXRlcyBhIHN1Y2Nl c3NmdWwgdHJhbnNmZXIuICAnLScgaW5kaWNhdGVzIGEgZmFpbGVkIHRyYW5z ZmVyLg0KKyAqDQorICogRXhhbXBsZToNCisgKg0KKyAqIEhvc3Q6ICAgICAg ICAgICAgICAgICAgUmVwbHk6DQorICogJG0wLDEwIzJhICAgICAgICAgICAg ICAgKyQwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNSM0Mg0KKyAq DQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorI2lu Y2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4NCisjaW5jbHVkZSA8YXNtL3ZtODYuaD4NCisjaW5jbHVkZSA8YXNt L3N5c3RlbS5oPg0KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CQkJLyogZm9y IGxpbnV4IHB0X3JlZ3Mgc3RydWN0ICovDQorI2luY2x1ZGUgPGxpbnV4L2dk Yi5oPg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKg0K KyAqIGV4dGVybmFsIGxvdy1sZXZlbCBzdXBwb3J0IHJvdXRpbmVzDQorICov DQordHlwZWRlZiB2b2lkICgqRnVuY3Rpb24pKHZvaWQpOyAgICAgICAgICAg LyogcG9pbnRlciB0byBhIGZ1bmN0aW9uICovDQorDQorZXh0ZXJuIHZvaWQg cHV0RGVidWdDaGFyKGludCk7ICAgLyogd3JpdGUgYSBzaW5nbGUgY2hhcmFj dGVyICAgICAgKi8NCitleHRlcm4gY2hhciBnZXREZWJ1Z0NoYXIodm9pZCk7 ICAgLyogcmVhZCBhbmQgcmV0dXJuIGEgc2luZ2xlIGNoYXIgKi8NCisNCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qIEJVRk1BWCBkZWZp bmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGluYm91 bmQvb3V0Ym91bmQgYnVmZmVycyovDQorLyogYXQgbGVhc3QgTlVNUkVHQllU RVMqMiBhcmUgbmVlZGVkIGZvciByZWdpc3RlciBwYWNrZXRzICovDQorI2Rl ZmluZSBCVUZNQVggNDAwDQorDQorc3RhdGljIGNoYXIgaW5pdGlhbGl6ZWQ7 ICAvKiBib29sZWFuIGZsYWcuICE9IDAgbWVhbnMgd2UndmUgYmVlbiBpbml0 aWFsaXplZCAqLw0KKw0KK2ludCAgICAgcmVtb3RlX2RlYnVnID0gMDsNCisv KiAgZGVidWcgPiAgMCBwcmludHMgaWxsLWZvcm1lZCBjb21tYW5kcyBpbiB2 YWxpZCBwYWNrZXRzICYgY2hlY2tzdW0gZXJyb3JzICovDQorDQorDQorc3Rh dGljIGNvbnN0IGNoYXIgaGV4Y2hhcnNbXT0iMDEyMzQ1Njc4OWFiY2RlZiI7 DQorDQorLyogTnVtYmVyIG9mIGJ5dGVzIG9mIHJlZ2lzdGVycy4gICovDQor I2RlZmluZSBOVU1SRUdCWVRFUyA2NA0KKy8qDQorICogTm90ZSB0aGF0IHRo aXMgcmVnaXN0ZXIgaW1hZ2UgaXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhh bg0KKyAqIHRoZSByZWdpc3RlciBpbWFnZSB0aGF0IExpbnV4IHByb2R1Y2Vz IGF0IGludGVycnVwdCB0aW1lLg0KKyAqDQorICogTGludXgncyByZWdpc3Rl ciBpbWFnZSBpcyBkZWZpbmVkIGJ5IHN0cnVjdCBwdF9yZWdzIGluIHB0cmFj ZS5oLg0KKyAqIEp1c3Qgd2h5IEdEQiB1c2VzIGEgZGlmZmVyZW50IG9yZGVy IGlzIGEgaGlzdG9yaWNhbCBteXN0ZXJ5Lg0KKyAqLw0KK2VudW0gcmVnbmFt ZXMge19FQVgsCQkvKiAwICovDQorCSAgICAgICBfRUNYLAkJLyogMSAqLw0K KwkgICAgICAgX0VEWCwJCS8qIDIgKi8NCisJICAgICAgIF9FQlgsCQkvKiAz ICovDQorCSAgICAgICBfRVNQLAkJLyogNCAqLw0KKwkgICAgICAgX0VCUCwJ CS8qIDUgKi8NCisJICAgICAgIF9FU0ksCQkvKiA2ICovDQorCSAgICAgICBf RURJLAkJLyogNyAqLw0KKwkgICAgICAgX1BDIAkJLyogOCBhbHNvIGtub3du IGFzIGVpcCAqLywNCisJICAgICAgIF9QUwkJLyogOSBhbHNvIGtub3duIGFz IGVmbGFncyAqLywNCisJICAgICAgIF9DUywJCS8qIDEwICovDQorCSAgICAg ICBfU1MsCQkvKiAxMSAqLw0KKwkgICAgICAgX0RTLAkJLyogMTIgKi8NCisJ ICAgICAgIF9FUywJCS8qIDEzICovDQorCSAgICAgICBfRlMsCQkvKiAxNCAq Lw0KKwkgICAgICAgX0dTfTsJCS8qIDE1ICovDQorDQorDQorDQorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKiAgQVNTRU1CTFkgQ09ERSBNQUNST1Mg KioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAJCQkJCQkJCQkgICAq Lw0KKw0KKyNkZWZpbmUgQlJFQUtQT0lOVCgpIGFzbSgiICAgaW50ICQzIik7 DQorDQorLyogUHV0IHRoZSBlcnJvciBjb2RlIGhlcmUganVzdCBpbiBjYXNl IHRoZSB1c2VyIGNhcmVzLiAgKi8NCitpbnQgZ2RiX2kzODZlcnJjb2RlOw0K Ky8qIExpa2V3aXNlLCB0aGUgdmVjdG9yIG51bWJlciBoZXJlIChzaW5jZSBH REIgb25seSBnZXRzIHRoZSBzaWduYWwNCisgICBudW1iZXIgdGhyb3VnaCB0 aGUgdXN1YWwgbWVhbnMsIGFuZCB0aGF0J3Mgbm90IHZlcnkgc3BlY2lmaWMp LiAgKi8NCitpbnQgZ2RiX2kzODZ2ZWN0b3IgPSAtMTsNCisNCisNCisNCisN CisNCitpbnQgaGV4KGNoYXIgY2gpDQorew0KKyAgaWYgKChjaCA+PSAnYScp ICYmIChjaCA8PSAnZicpKSByZXR1cm4gKGNoLSdhJysxMCk7DQorICBpZiAo KGNoID49ICcwJykgJiYgKGNoIDw9ICc5JykpIHJldHVybiAoY2gtJzAnKTsN CisgIGlmICgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ0YnKSkgcmV0dXJuIChj aC0nQScrMTApOw0KKyAgcmV0dXJuICgtMSk7DQorfQ0KKw0KKw0KKy8qIHNj YW4gZm9yIHRoZSBzZXF1ZW5jZSAkPGRhdGE+IzxjaGVja3N1bT4gICAgICov DQordm9pZCBnZXRwYWNrZXQoY2hhciAqIGJ1ZmZlcikNCit7DQorICB1bnNp Z25lZCBjaGFyIGNoZWNrc3VtOw0KKyAgdW5zaWduZWQgY2hhciB4bWl0Y3N1 bTsNCisgIGludCAgaTsNCisgIGludCAgY291bnQ7DQorICBjaGFyIGNoOw0K Kw0KKyAgZG8gew0KKyAgICAvKiB3YWl0IGFyb3VuZCBmb3IgdGhlIHN0YXJ0 IGNoYXJhY3RlciwgaWdub3JlIGFsbCBvdGhlciBjaGFyYWN0ZXJzICovDQor ICAgIHdoaWxlICgoY2ggPSAoZ2V0RGVidWdDaGFyKCkgJiAweDdmKSkgIT0g JyQnKTsNCisgICAgY2hlY2tzdW0gPSAwOw0KKyAgICB4bWl0Y3N1bSA9IC0x Ow0KKw0KKyAgICBjb3VudCA9IDA7DQorDQorICAgIC8qIG5vdywgcmVhZCB1 bnRpbCBhICMgb3IgZW5kIG9mIGJ1ZmZlciBpcyBmb3VuZCAqLw0KKyAgICB3 aGlsZSAoY291bnQgPCBCVUZNQVgpIHsNCisgICAgICBjaCA9IGdldERlYnVn Q2hhcigpICYgMHg3ZjsNCisgICAgICBpZiAoY2ggPT0gJyMnKSBicmVhazsN CisgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtICsgY2g7DQorICAgICAgYnVm ZmVyW2NvdW50XSA9IGNoOw0KKyAgICAgIGNvdW50ID0gY291bnQgKyAxOw0K KyAgICAgIH0NCisgICAgYnVmZmVyW2NvdW50XSA9IDA7DQorDQorICAgIGlm IChjaCA9PSAnIycpIHsNCisgICAgICB4bWl0Y3N1bSA9IGhleChnZXREZWJ1 Z0NoYXIoKSAmIDB4N2YpIDw8IDQ7DQorICAgICAgeG1pdGNzdW0gKz0gaGV4 KGdldERlYnVnQ2hhcigpICYgMHg3Zik7DQorICAgICAgaWYgKChyZW1vdGVf ZGVidWcgKSAmJiAoY2hlY2tzdW0gIT0geG1pdGNzdW0pKSB7DQorICAgICAg ICBwcmludGsgKCJiYWQgY2hlY2tzdW0uICBNeSBjb3VudCA9IDB4JXgsIHNl bnQ9MHgleC4gYnVmPSVzXG4iLA0KKwkJIGNoZWNrc3VtLHhtaXRjc3VtLGJ1 ZmZlcik7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChjaGVja3N1bSAhPSB4 bWl0Y3N1bSkgcHV0RGVidWdDaGFyKCctJyk7ICAvKiBmYWlsZWQgY2hlY2tz dW0gKi8NCisgICAgICBlbHNlIHsNCisJIHB1dERlYnVnQ2hhcignKycpOyAg Lyogc3VjY2Vzc2Z1bCB0cmFuc2ZlciAqLw0KKwkgLyogaWYgYSBzZXF1ZW5j ZSBjaGFyIGlzIHByZXNlbnQsIHJlcGx5IHRoZSBzZXF1ZW5jZSBJRCAqLw0K KwkgaWYgKGJ1ZmZlclsyXSA9PSAnOicpIHsNCisJICAgIHB1dERlYnVnQ2hh ciggYnVmZmVyWzBdICk7DQorCSAgICBwdXREZWJ1Z0NoYXIoIGJ1ZmZlclsx XSApOw0KKwkgICAgLyogcmVtb3ZlIHNlcXVlbmNlIGNoYXJzIGZyb20gYnVm ZmVyICovDQorCSAgICBjb3VudCA9IHN0cmxlbihidWZmZXIpOw0KKwkgICAg Zm9yIChpPTM7IGkgPD0gY291bnQ7IGkrKykgYnVmZmVyW2ktM10gPSBidWZm ZXJbaV07DQorCSB9DQorICAgICAgfQ0KKyAgICB9DQorICB9IHdoaWxlIChj aGVja3N1bSAhPSB4bWl0Y3N1bSk7DQorDQorICBpZiAocmVtb3RlX2RlYnVn KQ0KKyAgICAgIHByaW50aygiUjolc1xuIixidWZmZXIpOw0KK30NCisNCisv KiBzZW5kIHRoZSBwYWNrZXQgaW4gYnVmZmVyLiAgKi8NCisNCisNCit2b2lk IHB1dHBhY2tldChjaGFyICogYnVmZmVyKQ0KK3sNCisgIHVuc2lnbmVkIGNo YXIgY2hlY2tzdW07DQorICBpbnQgIGNvdW50Ow0KKyAgY2hhciBjaDsNCisN CisgIC8qICAkPHBhY2tldCBpbmZvPiM8Y2hlY2tzdW0+LiAqLw0KKyAgZG8g ew0KKyAgaWYgKHJlbW90ZV9kZWJ1ZykNCisgICAgICBwcmludGsoIlQ6JXNc biIsYnVmZmVyKTsNCisgIHB1dERlYnVnQ2hhcignJCcpOw0KKyAgY2hlY2tz dW0gPSAwOw0KKyAgY291bnQgICAgPSAwOw0KKw0KKyAgd2hpbGUgKChjaD1i dWZmZXJbY291bnRdKSkgew0KKyAgICBwdXREZWJ1Z0NoYXIoY2gpOw0KKyAg ICBjaGVja3N1bSArPSBjaDsNCisgICAgY291bnQgKz0gMTsNCisgIH0NCisN CisgIHB1dERlYnVnQ2hhcignIycpOw0KKyAgcHV0RGVidWdDaGFyKGhleGNo YXJzW2NoZWNrc3VtID4+IDRdKTsNCisgIHB1dERlYnVnQ2hhcihoZXhjaGFy c1tjaGVja3N1bSAlIDE2XSk7DQorDQorICB9IHdoaWxlICgoZ2V0RGVidWdD aGFyKCkgJiAweDdmKSAhPSAnKycpOw0KKw0KK30NCisNCitzdGF0aWMgY2hh ciAgcmVtY29tSW5CdWZmZXJbQlVGTUFYXTsNCitzdGF0aWMgY2hhciAgcmVt Y29tT3V0QnVmZmVyW0JVRk1BWF07DQorc3RhdGljIHNob3J0IGVycm9yOw0K Kw0KKw0KK3ZvaWQgZGVidWdfZXJyb3IoIGNoYXIgKiBmb3JtYXQsIGNoYXIg KiBwYXJtKQ0KK3sNCisgIGlmIChyZW1vdGVfZGVidWcpIHByaW50ayAoZm9y bWF0LHBhcm0pOw0KK30NCisNCitzdGF0aWMgdm9pZCBwcmludF9yZWdzKHN0 cnVjdCBwdF9yZWdzICpyZWdzKQ0KK3sNCisgICAgcHJpbnRrKCJFQVg9JTA4 bHggIiwgcmVncy0+ZWF4KTsNCisgICAgcHJpbnRrKCJFQlg9JTA4bHggIiwg cmVncy0+ZWJ4KTsNCisgICAgcHJpbnRrKCJFQ1g9JTA4bHggIiwgcmVncy0+ ZWN4KTsNCisgICAgcHJpbnRrKCJFRFg9JTA4bHggIiwgcmVncy0+ZWR4KTsN CisgICAgcHJpbnRrKCJcbiIpOw0KKyAgICBwcmludGsoIkVTST0lMDhseCAi LCByZWdzLT5lc2kpOw0KKyAgICBwcmludGsoIkVEST0lMDhseCAiLCByZWdz LT5lZGkpOw0KKyAgICBwcmludGsoIkVCUD0lMDhseCAiLCByZWdzLT5lYnAp Ow0KKyAgICBwcmludGsoIkVTUD0lMDhseCAiLCAobG9uZykgKHJlZ3MrMSkp Ow0KKyAgICBwcmludGsoIlxuIik7DQorICAgIHByaW50aygiIERTPSUwOHgg IiwgcmVncy0+eGRzKTsNCisgICAgcHJpbnRrKCIgRVM9JTA4eCAiLCByZWdz LT54ZXMpOw0KKyAgICBwcmludGsoIiBTUz0lMDh4ICIsIF9fS0VSTkVMX0RT KTsNCisgICAgcHJpbnRrKCIgRkw9JTA4bHggIiwgcmVncy0+ZWZsYWdzKTsN CisgICAgcHJpbnRrKCJcbiIpOw0KKyAgICBwcmludGsoIiBDUz0lMDh4ICIs IHJlZ3MtPnhjcyk7DQorICAgIHByaW50aygiIElQPSUwOGx4ICIsIHJlZ3Mt PmVpcCk7DQorI2lmIDANCisgICAgcHJpbnRrKCIgRlM9JTA4eCAiLCByZWdz LT5mcyk7DQorICAgIHByaW50aygiIEdTPSUwOHggIiwgcmVncy0+Z3MpOw0K KyNlbmRpZg0KKyAgICBwcmludGsoIlxuIik7DQorDQorDQorfSAvKiBwcmlu dF9yZWdzICovDQorDQorc3RhdGljIHZvaWQgcmVnc190b19nZGJfcmVncyhp bnQgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykNCit7DQorICAg IGdkYl9yZWdzW19FQVhdID0gIHJlZ3MtPmVheDsNCisgICAgZ2RiX3JlZ3Nb X0VCWF0gPSAgcmVncy0+ZWJ4Ow0KKyAgICBnZGJfcmVnc1tfRUNYXSA9ICBy ZWdzLT5lY3g7DQorICAgIGdkYl9yZWdzW19FRFhdID0gIHJlZ3MtPmVkeDsN CisgICAgZ2RiX3JlZ3NbX0VTSV0gPSAgcmVncy0+ZXNpOw0KKyAgICBnZGJf cmVnc1tfRURJXSA9ICByZWdzLT5lZGk7DQorICAgIGdkYl9yZWdzW19FQlBd ID0gIHJlZ3MtPmVicDsNCisgICAgZ2RiX3JlZ3NbIF9EU10gPSAgcmVncy0+ eGRzOw0KKyAgICBnZGJfcmVnc1sgX0VTXSA9ICByZWdzLT54ZXM7DQorICAg IGdkYl9yZWdzWyBfUFNdID0gIHJlZ3MtPmVmbGFnczsNCisgICAgZ2RiX3Jl Z3NbIF9DU10gPSAgcmVncy0+eGNzOw0KKyAgICBnZGJfcmVnc1sgX1BDXSA9 ICByZWdzLT5laXA7DQorICAgIGdkYl9yZWdzW19FU1BdID0gIChpbnQpICgm cmVncy0+ZXNwKSA7DQorICAgIGdkYl9yZWdzWyBfU1NdID0gIF9fS0VSTkVM X0RTOw0KKyAgICBnZGJfcmVnc1sgX0ZTXSA9ICAweEZGRkY7DQorICAgIGdk Yl9yZWdzWyBfR1NdID0gIDB4RkZGRjsNCit9IC8qIHJlZ3NfdG9fZ2RiX3Jl Z3MgKi8NCisNCitzdGF0aWMgdm9pZCBnZGJfcmVnc190b19yZWdzKGludCAq Z2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQ0KK3sNCisgICAgcmVn cy0+ZWF4CT0gICAgIGdkYl9yZWdzW19FQVhdIDsNCisgICAgcmVncy0+ZWJ4 CT0gICAgIGdkYl9yZWdzW19FQlhdIDsNCisgICAgcmVncy0+ZWN4CT0gICAg IGdkYl9yZWdzW19FQ1hdIDsNCisgICAgcmVncy0+ZWR4CT0gICAgIGdkYl9y ZWdzW19FRFhdIDsNCisgICAgcmVncy0+ZXNpCT0gICAgIGdkYl9yZWdzW19F U0ldIDsNCisgICAgcmVncy0+ZWRpCT0gICAgIGdkYl9yZWdzW19FREldIDsN CisgICAgcmVncy0+ZWJwCT0gICAgIGdkYl9yZWdzW19FQlBdIDsNCisgICAg cmVncy0+eGRzCT0gICAgIGdkYl9yZWdzWyBfRFNdIDsNCisgICAgcmVncy0+ eGVzCT0gICAgIGdkYl9yZWdzWyBfRVNdIDsNCisgICAgcmVncy0+ZWZsYWdz PSAgICAgZ2RiX3JlZ3NbIF9QU10gOw0KKyAgICByZWdzLT54Y3MJPSAgICAg Z2RiX3JlZ3NbIF9DU10gOw0KKyAgICByZWdzLT5laXAJPSAgICAgZ2RiX3Jl Z3NbIF9QQ10gOw0KKyNpZiAwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBjYW4ndCBjaGFuZ2UgdGhlc2UgKi8NCisgICAgcmVncy0+ ZXNwCT0gICAgIGdkYl9yZWdzW19FU1BdIDsNCisgICAgcmVncy0+eHNzCT0g ICAgIGdkYl9yZWdzWyBfU1NdIDsNCisgICAgcmVncy0+ZnMJPSAgICAgZ2Ri X3JlZ3NbIF9GU10gOw0KKyAgICByZWdzLT5ncwk9ICAgICBnZGJfcmVnc1sg X0dTXSA7DQorI2VuZGlmDQorDQorfSAvKiBnZGJfcmVnc190b19yZWdzICov DQorDQorLyogSW5kaWNhdGUgdG8gY2FsbGVyIG9mIG1lbTJoZXggb3IgaGV4 Mm1lbSB0aGF0IHRoZXJlIGhhcyBiZWVuIGFuDQorICAgZXJyb3IuICAqLw0K K3N0YXRpYyB2b2xhdGlsZSBpbnQgbWVtX2VyciA9IDA7DQorc3RhdGljIHZv bGF0aWxlIGludCBtZW1fZXJyX2V4cGVjdGVkID0gMDsNCitzdGF0aWMgICAg ICAgICAgaW50IGdhcmJhZ2VfbG9jID0gLTEgOw0KKw0KK2ludA0KK2dldF9j aGFyIChjaGFyICphZGRyKQ0KK3sNCisgIHJldHVybiAqYWRkcjsNCit9DQor DQordm9pZA0KK3NldF9jaGFyICggY2hhciAqYWRkciwgaW50IHZhbCkNCit7 DQorICAqYWRkciA9IHZhbDsNCit9DQorDQorLyogY29udmVydCB0aGUgbWVt b3J5IHBvaW50ZWQgdG8gYnkgbWVtIGludG8gaGV4LCBwbGFjaW5nIHJlc3Vs dCBpbiBidWYgKi8NCisvKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsYXN0 IGNoYXIgcHV0IGluIGJ1ZiAobnVsbCkgKi8NCisvKiBJZiBNQVlfRkFVTFQg aXMgbm9uLXplcm8sIHRoZW4gd2Ugc2hvdWxkIHNldCBtZW1fZXJyIGluIHJl c3BvbnNlIHRvDQorICAgYSBmYXVsdDsgaWYgemVybyB0cmVhdCBhIGZhdWx0 IGxpa2UgYW55IG90aGVyIGZhdWx0IGluIHRoZSBzdHViLiAgKi8NCitjaGFy KiBtZW0yaGV4KCBjaGFyKiBtZW0sDQorCSAgICAgICBjaGFyKiBidWYsDQor CSAgICAgICBpbnQgICBjb3VudCwNCisJICAgICAgIGludCBtYXlfZmF1bHQp DQorew0KKyAgICAgIGludCBpOw0KKyAgICAgIHVuc2lnbmVkIGNoYXIgY2g7 DQorDQorICAgICAgaWYgKG1heV9mYXVsdCkNCisgICAgICB7DQorCSAgbWVt X2Vycl9leHBlY3RlZCA9IDEgOw0KKwkgIG1lbV9lcnIgPSAwIDsNCisgICAg ICB9DQorICAgICAgZm9yIChpPTA7aTxjb3VudDtpKyspIHsNCisJICAvKiBw cmludGsoIiVseCA9ICIsIG1lbSkgOyAqLw0KKw0KKwkgIGNoID0gZ2V0X2No YXIgKG1lbSsrKTsNCisNCisJICAvKiBwcmludGsoIiUwMnhcbiIsIGNoICYg MHhGRikgOyAqLw0KKwkgIGlmIChtYXlfZmF1bHQgJiYgbWVtX2VycikNCisJ ICB7DQorCSAgICBpZiAocmVtb3RlX2RlYnVnKQ0KKwkJcHJpbnRrKCJNZW0g ZmF1bHQgZmV0Y2hpbmcgZnJvbSBhZGRyICVseFxuIiwgKGxvbmcpKG1lbS0x KSk7DQorCSAgICAqYnVmID0gMCA7CQkJCS8qIHRydW5jYXRlIGJ1ZmZlciAq Lw0KKwkgICAgcmV0dXJuIChidWYpOw0KKwkgIH0NCisgICAgICAgICAgKmJ1 ZisrID0gaGV4Y2hhcnNbY2ggPj4gNF07DQorICAgICAgICAgICpidWYrKyA9 IGhleGNoYXJzW2NoICUgMTZdOw0KKyAgICAgIH0NCisgICAgICAqYnVmID0g MDsNCisgICAgICBpZiAobWF5X2ZhdWx0KQ0KKwkgIG1lbV9lcnJfZXhwZWN0 ZWQgPSAwIDsNCisgICAgICByZXR1cm4oYnVmKTsNCit9DQorDQorLyogY29u dmVydCB0aGUgaGV4IGFycmF5IHBvaW50ZWQgdG8gYnkgYnVmIGludG8gYmlu YXJ5IHRvIGJlIHBsYWNlZCBpbiBtZW0gKi8NCisvKiByZXR1cm4gYSBwb2lu dGVyIHRvIHRoZSBjaGFyYWN0ZXIgQUZURVIgdGhlIGxhc3QgYnl0ZSB3cml0 dGVuICovDQorY2hhciogaGV4Mm1lbSggY2hhciogYnVmLA0KKwkgICAgICAg Y2hhciogbWVtLA0KKwkgICAgICAgaW50ICAgY291bnQsDQorCSAgICAgICBp bnQgbWF5X2ZhdWx0KQ0KK3sNCisgICAgICBpbnQgaTsNCisgICAgICB1bnNp Z25lZCBjaGFyIGNoOw0KKw0KKyAgICAgIGlmIChtYXlfZmF1bHQpDQorICAg ICAgew0KKwkgIG1lbV9lcnJfZXhwZWN0ZWQgPSAxIDsNCisJICBtZW1fZXJy ID0gMCA7DQorICAgICAgfQ0KKyAgICAgIGZvciAoaT0wO2k8Y291bnQ7aSsr KSB7DQorICAgICAgICAgIGNoID0gaGV4KCpidWYrKykgPDwgNDsNCisgICAg ICAgICAgY2ggPSBjaCArIGhleCgqYnVmKyspOw0KKw0KKwkgIHNldF9jaGFy IChtZW0rKywgY2gpOw0KKw0KKwkgIGlmIChtYXlfZmF1bHQgJiYgbWVtX2Vy cikNCisJICB7DQorCSAgICBpZiAocmVtb3RlX2RlYnVnKQ0KKwkJcHJpbnRr KCJNZW0gZmF1bHQgc3RvcmluZyB0byBhZGRyICVseFxuIiwgKGxvbmcpKG1l bS0xKSk7DQorCSAgICByZXR1cm4gKG1lbSk7DQorCSAgfQ0KKyAgICAgIH0N CisgICAgICBpZiAobWF5X2ZhdWx0KQ0KKwkgIG1lbV9lcnJfZXhwZWN0ZWQg PSAwIDsNCisgICAgICByZXR1cm4obWVtKTsNCit9DQorDQorDQorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQor LyogV0hJTEUgV0UgRklORCBOSUNFIEhFWCBDSEFSUywgQlVJTEQgQU4gSU5U ICovDQorLyogUkVUVVJOIE5VTUJFUiBPRiBDSEFSUyBQUk9DRVNTRUQgICAg ICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQoraW50IGhleFRvSW50KGNoYXIgKipwdHIsIGlu dCAqaW50VmFsdWUpDQorew0KKyAgICBpbnQgbnVtQ2hhcnMgPSAwOw0KKyAg ICBpbnQgaGV4VmFsdWU7DQorDQorICAgICppbnRWYWx1ZSA9IDA7DQorDQor ICAgIHdoaWxlICgqKnB0cikNCisgICAgew0KKyAgICAgICAgaGV4VmFsdWUg PSBoZXgoKipwdHIpOw0KKyAgICAgICAgaWYgKGhleFZhbHVlID49MCkNCisg ICAgICAgIHsNCisgICAgICAgICAgICAqaW50VmFsdWUgPSAoKmludFZhbHVl IDw8NCkgfCBoZXhWYWx1ZTsNCisgICAgICAgICAgICBudW1DaGFycyArKzsN CisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBicmVh azsNCisNCisgICAgICAgICgqcHRyKSsrOw0KKyAgICB9DQorDQorICAgIHJl dHVybiAobnVtQ2hhcnMpOw0KK30NCisNCisvKg0KKyAqIFRoaXMgZnVuY3Rp b24gZG9lcyBhbGwgY29tbWFuZCBwcm9jZXNpbmcgZm9yIGludGVyZmFjaW5n IHRvIGdkYi4NCisgKg0KKyAqIE5PVEU6ICBUaGUgSU5UIG5uIGluc3RydWN0 aW9uIGxlYXZlcyB0aGUgc3RhdGUgb2YgdGhlIGludGVycnVwdA0KKyAqICAg ICAgICBlbmFibGUgZmxhZyBVTkNIQU5HRUQuICBUaGF0IG1lYW5zIHRoYXQg d2hlbiB0aGlzIHJvdXRpbmUNCisgKiAgICAgICAgaXMgZW50ZXJlZCB2aWEg YSBicmVha3BvaW50IChJTlQgMykgaW5zdHJ1Y3Rpb24gZnJvbSBjb2RlDQor ICogICAgICAgIHRoYXQgaGFzIGludGVycnVwdHMgZW5hYmxlZCwgdGhlbiBp bnRlcnJ1cHRzIHdpbGwgU1RJTEwgQkUNCisgKiAgICAgICAgZW5hYmxlZCB3 aGVuIHRoaXMgcm91dGluZSBpcyBlbnRlcmVkLiAgVGhlIGZpcnN0IHRoaW5n IHRoYXQNCisgKiAgICAgICAgd2UgZG8gaGVyZSBpcyBkaXNhYmxlIGludGVy cnVwdHMgc28gYXMgdG8gcHJldmVudCByZWN1cnNpdmUNCisgKiAgICAgICAg ZW50cmllcyBhbmQgYm90aGVyc29tZSBzZXJpYWwgaW50ZXJydXB0cyB3aGls ZSB3ZSBhcmUNCisgKiAgICAgICAgdHJ5aW5nIHRvIHJ1biB0aGUgc2VyaWFs IHBvcnQgaW4gcG9sbGVkIG1vZGUuDQorICoNCisgKiBGb3Iga2VybmVsIHZl cnNpb24gMi4xLnh4IHRoZSBjbGkoKSBhY3R1YWxseSBnZXRzIGEgc3BpbiBs b2NrIHNvDQorICogaXQgaXMgYWx3YXlzIG5lY2Vzc2FyeSB0byBkbyBhIHJl c3RvcmVfZmxhZ3MgYmVmb3JlIHJldHVybmluZw0KKyAqIHNvIGFzIHRvIGxl dCBnbyBvZiB0aGF0IGxvY2suDQorICovDQoraW50IGhhbmRsZV9leGNlcHRp b24oaW50IGV4Y2VwdGlvblZlY3RvciwNCisJCSAgICAgaW50IHNpZ25vLA0K KwkJICAgICBpbnQgZXJyX2NvZGUsDQorCQkgICAgIHN0cnVjdCBwdF9yZWdz ICpsaW51eF9yZWdzKQ0KK3sNCisgIGludCAgICBhZGRyLCBsZW5ndGg7DQor ICBjaGFyICogcHRyOw0KKyAgaW50ICAgIG5ld1BDOw0KKyAgdW5zaWduZWQg bG9uZyBmbGFnczsNCisgIGludCAJCQlnZGJfcmVnc1tOVU1SRUdCWVRFUy80 XTsNCisjZGVmaW5lCXJlZ3MJKCpsaW51eF9yZWdzKQ0KKw0KKyAgLyoNCisg ICAqIElmIHRoZSBlbnRyeSBpcyBub3QgZnJvbSB0aGUga2VybmVsIHRoZW4g cmV0dXJuIHRvIHRoZSBMaW51eA0KKyAgICogdHJhcCBoYW5kbGVyIGFuZCBs ZXQgaXQgcHJvY2VzcyB0aGUgaW50ZXJydXB0IG5vcm1hbGx5Lg0KKyAgICov DQorICBpZiAoKGxpbnV4X3JlZ3MtPmVmbGFncyAmIFZNX01BU0spIHx8ICgz ICYgbGludXhfcmVncy0+eGNzKSkNCisgICAgcmV0dXJuKDApOw0KKw0KKyAg c2F2ZV9mbGFncyhmbGFncyk7DQorICBjbGkoKTsJCS8qIDIuMSBrZXJuZWwg bXVzdCBoYXZlIG1hdGNoaW5nIHJlc3RvcmVfZmxhZ3MgKi8NCisNCisgIGlm IChyZW1vdGVfZGVidWcpIHsNCisgICAgICB1bnNpZ25lZCBsb25nICAgICAq bHAgPSAodW5zaWduZWQgbG9uZyAqKSAmbGludXhfcmVnczsNCisNCisgICAg ICBwcmludGsoImhhbmRsZV9leGNlcHRpb24oZXhjZXB0aW9uVmVjdG9yPSVk LCAiDQorICAgICAgICAgICAgICAic2lnbm89JWQsIGVycl9jb2RlPSVkLCBs aW51eF9yZWdzPSVwKVxuIiwNCisgICAgICAgICAgICAgIGV4Y2VwdGlvblZl Y3Rvciwgc2lnbm8sIGVycl9jb2RlLCBsaW51eF9yZWdzKSA7DQorDQorICAg ICAgcHJpbnRfcmVncygmcmVncykgOw0KKw0KKyAgICAgIHByaW50aygiU3Rr OiAlOGx4ICU4bHggJThseCAlOGx4ICAlOGx4ICU4bHggJThseCAlOGx4XG4i LA0KKyAgICAgICAgICAgICAgbHBbMF0sbHBbMV0sbHBbMl0sbHBbM10sbHBb NF0sbHBbNV0sbHBbNl0sbHBbN10pOw0KKyAgICAgIHByaW50aygiICAgICAl OGx4ICU4bHggJThseCAlOGx4ICAlOGx4ICU4bHggJThseCAlOGx4XG4iLA0K KyAgICAgICAgICAgICAgbHBbOF0sbHBbOV0sbHBbMTBdLGxwWzExXSxscFsx Ml0sbHBbMTNdLGxwWzE0XSxscFsxNV0pOw0KKyAgICAgIHByaW50aygiICAg ICAlOGx4ICU4bHggJThseCAlOGx4ICAlOGx4ICU4bHggJThseCAlOGx4XG4i LA0KKyAgICAgICAgICAgICAgbHBbMTZdLGxwWzE3XSxscFsxOF0sbHBbMTld LGxwWzIwXSxscFsyMV0sbHBbMjJdLGxwWzIzXSk7DQorICAgICAgcHJpbnRr KCIgICAgICU4bHggJThseCAlOGx4ICU4bHggICU4bHggJThseCAlOGx4ICU4 bHhcbiIsDQorICAgICAgICAgICAgICBscFsyNF0sbHBbMjVdLGxwWzI2XSxs cFsyN10sbHBbMjhdLGxwWzI5XSxscFszMF0sbHBbMzFdKTsNCisgIH0NCisN CisgIHN3aXRjaCAoZXhjZXB0aW9uVmVjdG9yKQ0KKyAgew0KKyAgY2FzZSAw OgkJCS8qIGRpdmlkZSBlcnJvciAqLw0KKyAgY2FzZSAxOgkJCS8qIGRlYnVn IGV4Y2VwdGlvbiAqLw0KKyAgY2FzZSAyOgkJCS8qIE5NSSAqLw0KKyAgY2Fz ZSAzOgkJCS8qIGJyZWFrcG9pbnQgKi8NCisgIGNhc2UgNDoJCQkvKiBvdmVy ZmxvdyAqLw0KKyAgY2FzZSA1OgkJCS8qIGJvdW5kcyBjaGVjayAqLw0KKyAg Y2FzZSA2OgkJCS8qIGludmFsaWQgb3Bjb2RlICovDQorICBjYXNlIDc6CQkJ LyogZGV2aWNlIG5vdCBhdmFpbGFibGUgKi8NCisgIGNhc2UgODoJCQkvKiBk b3VibGUgZmF1bHQgKGVycmNvZGUpICovDQorICBjYXNlIDEwOgkJCS8qIGlu dmFsaWQgVFNTIChlcnJjb2RlKSAqLw0KKyAgY2FzZSAxMjoJCQkvKiBzdGFj ayBmYXVsdCAoZXJyY29kZSkgKi8NCisgIGNhc2UgMTY6CQkJLyogZmxvYXRp bmcgcG9pbnQgZXJyb3IgKi8NCisgIGNhc2UgMTc6CQkJLyogYWxpZ25tZW50 IGNoZWNrIChlcnJjb2RlKSAqLw0KKyAgZGVmYXVsdDoJCQkvKiBhbnkgdW5k b2N1bWVudGVkICovDQorICAgICAgYnJlYWsgOw0KKyAgY2FzZSAxMToJCQkv KiBzZWdtZW50IG5vdCBwcmVzZW50IChlcnJjb2RlKSAqLw0KKyAgY2FzZSAx MzoJCQkvKiBnZW5lcmFsIHByb3RlY3Rpb24gKGVycmNvZGUpICovDQorICBj YXNlIDE0OgkJCS8qIHBhZ2UgZmF1bHQgKHNwZWNpYWwgZXJyY29kZSkgKi8N CisgICAgICBpZiAobWVtX2Vycl9leHBlY3RlZCkNCisgICAgICB7DQorCSAg LyoNCisJICAgKiBUaGlzIGZhdWx0IG9jY3VyZWQgYmVjYXVzZSBvZiB0aGUg Z2V0X2NoYXIgb3Igc2V0X2NoYXINCisJICAgKiByb3V0aW5lcy4gIFRoZXNl IHR3byByb3V0aW5lcyB1c2UgZWl0aGVyIGVheCBvZiBlZHggdG8NCisJICAg KiBpbmRpcmVjdGx5IHJlZmVyZW5jZSB0aGUgbG9jYXRpb24gaW4gbWVtb3J5 IHRoYXQgdGhleQ0KKwkgICAqIGFyZSB3b3JraW5nIHdpdGguICBGb3IgYSBw YWdlIGZhdWx0LCB3aGVuIHdlIHJldHVybg0KKwkgICAqIHRoZSBpbnN0cnVj dGlvbiB3aWxsIGJlIHJldHJpZWQsIHNvIHdlIGhhdmUgdG8gbWFrZQ0KKwkg ICAqIHN1cmUgdGhhdCB0aGVzZSByZWdpc3RlcnMgcG9pbnQgdG8gdmFsaWQg bWVtb3J5Lg0KKwkgICAqLw0KKwkgIG1lbV9lcnIgPSAxIDsJCS8qIHNldCBt ZW0gZXJyb3IgZmxhZyAqLw0KKwkgIG1lbV9lcnJfZXhwZWN0ZWQgPSAwIDsN CisJICByZWdzLmVheCA9IChsb25nKSAmZ2FyYmFnZV9sb2MgOwkvKiBtYWtl IHZhbGlkIGFkZHJlc3MgKi8NCisJICByZWdzLmVkeCA9IChsb25nKSAmZ2Fy YmFnZV9sb2MgOwkvKiBtYWtlIHZhbGlkIGFkZHJlc3MgKi8NCisJICBpZiAo cmVtb3RlX2RlYnVnKSBwcmludGsoIlJldHVybiBhZnRlciBtZW1vcnkgZXJy b3JcbiIpOw0KKwkgIGlmIChyZW1vdGVfZGVidWcpIHByaW50X3JlZ3MoJnJl Z3MpIDsNCisJICByZXN0b3JlX2ZsYWdzKGZsYWdzKSA7DQorCSAgcmV0dXJu KDApIDsNCisgICAgICB9DQorICAgICAgYnJlYWsgOw0KKyAgfQ0KKw0KKyAg Z2RiX2kzODZ2ZWN0b3IgID0gZXhjZXB0aW9uVmVjdG9yOw0KKyAgZ2RiX2kz ODZlcnJjb2RlID0gZXJyX2NvZGUgOw0KKw0KKyAgLyogcmVwbHkgdG8gaG9z dCB0aGF0IGFuIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgKi8NCisgIHJlbWNv bU91dEJ1ZmZlclswXSA9ICdTJzsNCisgIHJlbWNvbU91dEJ1ZmZlclsxXSA9 ICBoZXhjaGFyc1tzaWdubyA+PiA0XTsNCisgIHJlbWNvbU91dEJ1ZmZlclsy XSA9ICBoZXhjaGFyc1tzaWdubyAlIDE2XTsNCisgIHJlbWNvbU91dEJ1ZmZl clszXSA9IDA7DQorDQorICBwdXRwYWNrZXQocmVtY29tT3V0QnVmZmVyKTsN CisNCisgIHdoaWxlICgxPT0xKSB7DQorICAgIGVycm9yID0gMDsNCisgICAg cmVtY29tT3V0QnVmZmVyWzBdID0gMDsNCisgICAgZ2V0cGFja2V0KHJlbWNv bUluQnVmZmVyKTsNCisgICAgc3dpdGNoIChyZW1jb21JbkJ1ZmZlclswXSkg ew0KKyAgICAgIGNhc2UgJz8nIDogICByZW1jb21PdXRCdWZmZXJbMF0gPSAn Uyc7DQorICAgICAgICAgICAgICAgICAgIHJlbWNvbU91dEJ1ZmZlclsxXSA9 ICBoZXhjaGFyc1tzaWdubyA+PiA0XTsNCisgICAgICAgICAgICAgICAgICAg cmVtY29tT3V0QnVmZmVyWzJdID0gIGhleGNoYXJzW3NpZ25vICUgMTZdOw0K KyAgICAgICAgICAgICAgICAgICByZW1jb21PdXRCdWZmZXJbM10gPSAwOw0K KyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSAnZCcgOiBy ZW1vdGVfZGVidWcgPSAhKHJlbW90ZV9kZWJ1Zyk7ICAvKiB0b2dnbGUgZGVi dWcgZmxhZyAqLw0KKwkJIHByaW50aygiUmVtb3RlIGRlYnVnICVzXG4iLCBy ZW1vdGVfZGVidWcgPyAib24iIDogIm9mZiIpOw0KKyAgICAgICAgICAgICAg ICAgYnJlYWs7DQorICAgICAgY2FzZSAnZycgOiAvKiByZXR1cm4gdGhlIHZh bHVlIG9mIHRoZSBDUFUgcmVnaXN0ZXJzICovDQorCQlyZWdzX3RvX2dkYl9y ZWdzKGdkYl9yZWdzLCAmcmVncykgOw0KKyAgICAgICAgICAgICAgICBtZW0y aGV4KChjaGFyKikgZ2RiX3JlZ3MsIHJlbWNvbU91dEJ1ZmZlciwgTlVNUkVH QllURVMsIDApOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj YXNlICdHJyA6IC8qIHNldCB0aGUgdmFsdWUgb2YgdGhlIENQVSByZWdpc3Rl cnMgLSByZXR1cm4gT0sgKi8NCisgICAgICAgICAgICAgICAgaGV4Mm1lbSgm cmVtY29tSW5CdWZmZXJbMV0sIChjaGFyKikgZ2RiX3JlZ3MsIE5VTVJFR0JZ VEVTLCAwKTsNCisJCWdkYl9yZWdzX3RvX3JlZ3MoZ2RiX3JlZ3MsICZyZWdz KSA7DQorICAgICAgICAgICAgICAgIHN0cmNweShyZW1jb21PdXRCdWZmZXIs Ik9LIik7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgIC8q IG1BQS4uQUEsTExMTCAgUmVhZCBMTExMIGJ5dGVzIGF0IGFkZHJlc3MgQUEu LkFBICovDQorICAgICAgY2FzZSAnbScgOg0KKwkJICAgIC8qIFRSWSBUTyBS RUFEICV4LCV4LiAgSUYgU1VDQ0VFRCwgU0VUIFBUUiA9IDAgKi8NCisgICAg ICAgICAgICAgICAgICAgIHB0ciA9ICZyZW1jb21JbkJ1ZmZlclsxXTsNCisg ICAgICAgICAgICAgICAgICAgIGlmIChoZXhUb0ludCgmcHRyLCZhZGRyKSkN CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKihwdHIrKykgPT0gJywn KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGV4VG9JbnQo JnB0ciwmbGVuZ3RoKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gMDsN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbTJoZXgoKGNo YXIqKSBhZGRyLCByZW1jb21PdXRCdWZmZXIsIGxlbmd0aCwgMSk7DQorCQkJ CWlmIChtZW1fZXJyKSB7DQorCQkJCSAgICBzdHJjcHkgKHJlbWNvbU91dEJ1 ZmZlciwgIkUwMyIpOw0KKwkJCQkgICAgZGVidWdfZXJyb3IgKCJtZW1vcnkg ZmF1bHRcbiIsIE5VTEwpOw0KKwkJCQl9DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChwdHIp DQorICAgICAgICAgICAgICAgICAgICB7DQorCQkgICAgICBzdHJjcHkocmVt Y29tT3V0QnVmZmVyLCJFMDEiKTsNCisJCSAgICAgIGRlYnVnX2Vycm9yKCJt YWxmb3JtZWQgcmVhZCBtZW1vcnkgY29tbWFuZDogJXNcbiIscmVtY29tSW5C dWZmZXIpOw0KKwkJICAgIH0NCisJICAgICAgICAgIGJyZWFrOw0KKw0KKyAg ICAgIC8qIE1BQS4uQUEsTExMTDogV3JpdGUgTExMTCBieXRlcyBhdCBhZGRy ZXNzIEFBLkFBIHJldHVybiBPSyAqLw0KKyAgICAgIGNhc2UgJ00nIDoNCisJ CSAgICAvKiBUUlkgVE8gUkVBRCAnJXgsJXg6Jy4gIElGIFNVQ0NFRUQsIFNF VCBQVFIgPSAwICovDQorICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcmVt Y29tSW5CdWZmZXJbMV07DQorICAgICAgICAgICAgICAgICAgICBpZiAoaGV4 VG9JbnQoJnB0ciwmYWRkcikpDQorICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCoocHRyKyspID09ICcsJykNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGhleFRvSW50KCZwdHIsJmxlbmd0aCkpDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKihwdHIrKykgPT0gJzonKQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleDJtZW0ocHRyLCAoY2hh ciopIGFkZHIsIGxlbmd0aCwgMSk7DQorDQorCQkJCSAgICBpZiAobWVtX2Vy cikgew0KKwkJCQkJc3RyY3B5IChyZW1jb21PdXRCdWZmZXIsICJFMDMiKTsN CisJCQkJCWRlYnVnX2Vycm9yICgibWVtb3J5IGZhdWx0XG4iLCBOVUxMKTsN CisJCQkJICAgIH0gZWxzZSB7DQorCQkJCSAgICAgICAgc3RyY3B5KHJlbWNv bU91dEJ1ZmZlciwiT0siKTsNCisJCQkJICAgIH0NCisNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAwOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAg ICAgaWYgKHB0cikNCisgICAgICAgICAgICAgICAgICAgIHsNCisJCSAgICAg IHN0cmNweShyZW1jb21PdXRCdWZmZXIsIkUwMiIpOw0KKwkJICAgICAgZGVi dWdfZXJyb3IoIm1hbGZvcm1lZCB3cml0ZSBtZW1vcnkgY29tbWFuZDogJXNc biIscmVtY29tSW5CdWZmZXIpOw0KKwkJICAgIH0NCisgICAgICAgICAgICAg ICAgYnJlYWs7DQorDQorICAgICAvKiBjQUEuLkFBICAgIENvbnRpbnVlIGF0 IGFkZHJlc3MgQUEuLkFBKG9wdGlvbmFsKSAqLw0KKyAgICAgLyogc0FBLi5B QSAgIFN0ZXAgb25lIGluc3RydWN0aW9uIGZyb20gQUEuLkFBKG9wdGlvbmFs KSAqLw0KKyAgICAgY2FzZSAnYycgOg0KKyAgICAgY2FzZSAncycgOg0KKyAg ICAgICAgICAvKiB0cnkgdG8gcmVhZCBvcHRpb25hbCBwYXJhbWV0ZXIsIHBj IHVuY2hhbmdlZCBpZiBubyBwYXJtICovDQorICAgICAgICAgcHRyID0gJnJl bWNvbUluQnVmZmVyWzFdOw0KKyAgICAgICAgIGlmIChoZXhUb0ludCgmcHRy LCZhZGRyKSkNCisJIHsNCisJICAgICBpZiAocmVtb3RlX2RlYnVnKQ0KKwkJ cHJpbnRrKCJDaGFuZ2luZyBFSVAgdG8gMHgleFxuIiwgYWRkcikgOw0KKw0K KyAgICAgICAgICAgICByZWdzLmVpcCA9IGFkZHI7DQorCSB9DQorDQorICAg ICAgICAgIG5ld1BDID0gcmVncy5laXAgOw0KKw0KKyAgICAgICAgICAvKiBj bGVhciB0aGUgdHJhY2UgYml0ICovDQorICAgICAgICAgIHJlZ3MuZWZsYWdz ICY9IDB4ZmZmZmZlZmY7DQorDQorICAgICAgICAgIC8qIHNldCB0aGUgdHJh Y2UgYml0IGlmIHdlJ3JlIHN0ZXBwaW5nICovDQorICAgICAgICAgIGlmIChy ZW1jb21JbkJ1ZmZlclswXSA9PSAncycpIHJlZ3MuZWZsYWdzIHw9IDB4MTAw Ow0KKw0KKwkgIGlmIChyZW1vdGVfZGVidWcpDQorCSAgew0KKwkgICAgcHJp bnRrKCJSZXN1bWluZyBleGVjdXRpb25cbiIpIDsNCisJICAgIHByaW50X3Jl Z3MoJnJlZ3MpIDsNCisJICB9DQorCSAgcmVzdG9yZV9mbGFncyhmbGFncykg Ow0KKwkgIHJldHVybigwKSA7DQorDQorICAgICAgLyoga2lsbCB0aGUgcHJv Z3JhbSAqLw0KKyAgICAgIGNhc2UgJ2snIDogIC8qIGRvIG5vdGhpbmcgKi8N CisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgfSAvKiBzd2l0Y2gg Ki8NCisNCisgICAgLyogcmVwbHkgdG8gdGhlIHJlcXVlc3QgKi8NCisgICAg cHV0cGFja2V0KHJlbWNvbU91dEJ1ZmZlcik7DQorICAgIH0NCisNCisgICAg cmVzdG9yZV9mbGFncyhmbGFncykgOw0KKyAgICByZXR1cm4oMCkgOw0KK30N CisNCisvKiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHVwIGV4Y2Vw dGlvbiBoYW5kbGVycyBmb3IgdHJhY2luZyBhbmQNCisgICBicmVha3BvaW50 cyAqLw0KK3ZvaWQgc2V0X2RlYnVnX3RyYXBzKHZvaWQpDQorew0KKyAgLyoN CisgICAqIGxpbnV4X2RlYnVnX2hvb2sgaXMgZGVmaW5lZCBpbiB0cmFwcy5j LiAgV2Ugc3RvcmUgYSBwb2ludGVyDQorICAgKiB0byBvdXIgb3duIGV4Y2Vw dGlvbiBoYW5kbGVyIGludG8gaXQuDQorICAgKi8NCisgIGxpbnV4X2RlYnVn X2hvb2sgPSBoYW5kbGVfZXhjZXB0aW9uIDsNCisNCisgIC8qIEluIGNhc2Ug R0RCIGlzIHN0YXJ0ZWQgYmVmb3JlIHVzLCBhY2sgYW55IHBhY2tldHMgKHBy ZXN1bWFibHkNCisgICAgICIkPyN4eCIpIHNpdHRpbmcgdGhlcmUuICAqLw0K KyAgcHV0RGVidWdDaGFyICgnKycpOw0KKw0KKyAgaW5pdGlhbGl6ZWQgPSAx Ow0KKw0KK30NCisNCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUg YSBicmVha3BvaW50IGV4Y2VwdGlvbi4gIEl0IGlzIHVzZWQgYXQgdGhlDQor ICAgYmVnaW5uaW5nIG9mIGEgcHJvZ3JhbSB0byBzeW5jIHVwIHdpdGggYSBk ZWJ1Z2dlciBhbmQgY2FuIGJlIHVzZWQNCisgICBvdGhlcndpc2UgYXMgYSBx dWljayBtZWFucyB0byBzdG9wIHByb2dyYW0gZXhlY3V0aW9uIGFuZCAiYnJl YWsiIGludG8NCisgICB0aGUgZGVidWdnZXIuICovDQorDQordm9pZCBicmVh a3BvaW50KHZvaWQpDQorew0KKyAgaWYgKGluaXRpYWxpemVkKSBCUkVBS1BP SU5UKCk7DQorfQ0KZGlmZiAtTiAtVSAzIC1yIC9ob21lL3Jvb3QvdXNyL3Ny Yy9saW51eC0yLjIuMTQvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jIC4vYXJj aC9pMzg2L2tlcm5lbC90cmFwcy5jDQotLS0gL2hvbWUvcm9vdC91c3Ivc3Jj L2xpbnV4LTIuMi4xNC9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMJVHVlIEFw ciAgNCAxODoxMjoxOCAyMDAwDQorKysgLi9hcmNoL2kzODYva2VybmVsL3Ry YXBzLmMJVGh1IE1hciAzMCAxNTozODowMSAyMDAwDQpAQCAtNDUsNiArNDUs OSBAQA0KIA0KICNpbmNsdWRlICJpcnEuaCINCiANCisjaW5jbHVkZSA8bGlu dXgvZ2RiLmg+DQorZ2RiX2RlYnVnX2hvb2sgICpsaW51eF9kZWJ1Z19ob29r Ow0KKw0KIGFzbWxpbmthZ2UgaW50IHN5c3RlbV9jYWxsKHZvaWQpOw0KIGFz bWxpbmthZ2Ugdm9pZCBsY2FsbDcodm9pZCk7DQogDQpAQCAtNjYsNiArNjks MTIgQEANCiAjZGVmaW5lIERPX0VSUk9SKHRyYXBuciwgc2lnbnIsIHN0ciwg bmFtZSwgdHNrKSBcDQogYXNtbGlua2FnZSB2b2lkIGRvXyMjbmFtZShzdHJ1 Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyb3JfY29kZSkgXA0KIHsgXA0K KyAgICAgICAgaWYgKCAgIGxpbnV4X2RlYnVnX2hvb2sgIT0gKGdkYl9kZWJ1 Z19ob29rICopIE5VTEwgICAgICBcDQorICAgICAgICAgICAgJiYgIXVzZXJf bW9kZShyZWdzKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN CisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICgqbGludXhf ZGVidWdfaG9vaykodHJhcG5yLCBzaWduciwgZXJyb3JfY29kZSwgcmVncykg OyAgICAgICAgICAgICAgXA0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCiAJdHNrLT50c3MuZXJyb3JfY29kZSA9IGVy cm9yX2NvZGU7IFwNCiAJdHNrLT50c3MudHJhcF9ubyA9IHRyYXBucjsgXA0K IAlmb3JjZV9zaWcoc2lnbnIsIHRzayk7IFwNCkBAIC04MSw2ICs5MCwxMyBA QA0KIAkJCWdvdG8gb3V0OyBcDQogCQkvKiBlbHNlIGZhbGwgdGhyb3VnaCAq LyBcDQogCX0gXA0KKyAgICAgICAgaWYgKCAgIGxpbnV4X2RlYnVnX2hvb2sg IT0gKGdkYl9kZWJ1Z19ob29rICopIE5VTEwgICAgICBcDQorICAgICAgICAg ICAgJiYgIXVzZXJfbW9kZShyZWdzKSkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwNCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAg ICAgICgqbGludXhfZGVidWdfaG9vaykodHJhcG5yLCBzaWduciwgZXJyb3Jf Y29kZSwgcmVncykgOyAgICAgIFwNCisgICAgICAgICAgICBnb3RvIG91dDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K KyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN CiAJdHNrLT50c3MuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7IFwNCiAJdHNr LT50c3MudHJhcF9ubyA9IHRyYXBucjsgXA0KIAlmb3JjZV9zaWcoc2lnbnIs IHRzayk7IFwNCkBAIC0yMDEsNiArMjE3LDEwIEBADQogCWNvbnNvbGVfdmVy Ym9zZSgpOw0KIAlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7DQogCXByaW50 aygiJXM6ICUwNGx4XG4iLCBzdHIsIGVyciAmIDB4ZmZmZik7DQorI2lmIGRl ZmluZWQoQ09ORklHX0dEQikNCisgICAgICAgIGlmIChsaW51eF9kZWJ1Z19o b29rICE9IChnZGJfZGVidWdfaG9vayAqKSBOVUxMKQ0KKyAgICAgICAgICAg ICgqbGludXhfZGVidWdfaG9vaykoMSwgU0lHVFJBUCwgZXJyLCByZWdzKSA7 DQorI2VuZGlmIC8qIENPTkZJR19HREIgKi8NCiAJc2hvd19yZWdpc3RlcnMo cmVncyk7DQogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOw0KIAlkb19l eGl0KFNJR1NFR1YpOw0KQEAgLTQwMSw2ICs0MjEsMTUgQEANCiAJX19hc21f XygibW92bCAlMCwlJWRiNyINCiAJCTogLyogbm8gb3V0cHV0ICovDQogCQk6 ICJyIiAoMCkpOw0KKyNpZmRlZiBDT05GSUdfR0RCDQorICAgICAgICBpZiAo ICAgKChyZWdzLT54Y3MgJiAzKSA9PSAwKQ0KKyAgICAgICAgICAgICYmIGxp bnV4X2RlYnVnX2hvb2sgIT0gKGdkYl9kZWJ1Z19ob29rICopIE5VTEwNCisg ICAgICAgICAgICkNCisgICAgICAgIHsNCisgICAgICAgICAgICAoKmxpbnV4 X2RlYnVnX2hvb2spKDEsIFNJR1RSQVAsIGVycm9yX2NvZGUsIHJlZ3MpIDsN CisgICAgICAgIH0NCisjZW5kaWYgIC8qIENPTkZJR19HREIgKi8NCisNCiAJ cmV0dXJuOw0KIA0KIGNsZWFyX1RGOg0KZGlmZiAtTiAtVSAzIC1yIC9ob21l L3Jvb3QvdXNyL3NyYy9saW51eC0yLjIuMTQvYXJjaC9pMzg2L21tL2ZhdWx0 LmMgLi9hcmNoL2kzODYvbW0vZmF1bHQuYw0KLS0tIC9ob21lL3Jvb3QvdXNy L3NyYy9saW51eC0yLjIuMTQvYXJjaC9pMzg2L21tL2ZhdWx0LmMJVHVlIEFw ciAgNCAxODoxMjoxOCAyMDAwDQorKysgLi9hcmNoL2kzODYvbW0vZmF1bHQu YwlUdWUgQXByICA0IDE0OjQ4OjI4IDIwMDANCkBAIC0yMiw2ICsyMiw4IEBA DQogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+DQogI2luY2x1ZGUgPGFzbS9o YXJkaXJxLmg+DQogDQorI2luY2x1ZGUgPGxpbnV4L2dkYi5oPg0KKw0KIGV4 dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICosc3RydWN0IHB0X3JlZ3MgKixs b25nKTsNCiANCiAvKg0KQEAgLTI1OCw2ICsyNjAsMTQgQEANCiAJCXJldHVy bjsNCiAJfQ0KIA0KKyNpZiAxDQorICAgICAgICAvKiA/Pz8gKi8NCisgICAg ICAgIGlmIChsaW51eF9kZWJ1Z19ob29rICE9IChnZGJfZGVidWdfaG9vayop TlVMTCkgew0KKyAgICAgICAgICAgICgqbGludXhfZGVidWdfaG9vaykoMTQs U0lHU0VHViwgZXJyb3JfY29kZSwgcmVncyk7DQorICAgICAgICAgICAgdXAo Jm1tLT5tbWFwX3NlbSk7IC8qIE1heSBiZSByZWN1cnNpdmUgZGVidWcgZW50 cnkgKi8NCisgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgIC8qIHNv IHJldHVybiB3LyBtb2RpZmllZCByZWdzICovDQorICAgICAgICB9DQorI2Vu ZGlmDQogCWlmIChhZGRyZXNzIDwgUEFHRV9TSVpFKQ0KIAkJcHJpbnRrKEtF Uk5fQUxFUlQgIlVuYWJsZSB0byBoYW5kbGUga2VybmVsIE5VTEwgcG9pbnRl ciBkZXJlZmVyZW5jZSIpOw0KIAllbHNlDQpkaWZmIC1OIC1VIDMgLXIgL2hv bWUvcm9vdC91c3Ivc3JjL2xpbnV4LTIuMi4xNC9kcml2ZXJzL2NoYXIvTWFr ZWZpbGUgLi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUNCi0tLSAvaG9tZS9yb290 L3Vzci9zcmMvbGludXgtMi4yLjE0L2RyaXZlcnMvY2hhci9NYWtlZmlsZQlU dWUgQXByICA0IDE4OjEyOjIwIDIwMDANCisrKyAuL2RyaXZlcnMvY2hhci9N YWtlZmlsZQlUaHUgTWFyIDMwIDE1OjM4OjAxIDIwMDANCkBAIC0zNCw2ICsz NCw5IEBADQogICAgICAgaWZlcSAoJChDT05GSUdfREVDU1RBVElPTiksKQ0K IAlpZmVxICgkKENPTkZJR19CQUdFVF9NSVBTKSwpDQogICAgICAgTFhfT0JK UyArPSBzZXJpYWwubw0KKyAgICAgICAgaWZlcSAoJChDT05GSUdfR0RCKSx5 KQ0KKyAgICAgICAgTFhfT0JKUyArPSBzZXJpYWxnZGIubw0KKyAgICAgICAg ZW5kaWYNCiAgICAgZW5kaWYNCiAgIGVuZGlmDQogICAgIGVuZGlmDQpkaWZm IC1OIC1VIDMgLXIgL2hvbWUvcm9vdC91c3Ivc3JjL2xpbnV4LTIuMi4xNC9k cml2ZXJzL2NoYXIvc2VyaWFsLmMgLi9kcml2ZXJzL2NoYXIvc2VyaWFsLmMN Ci0tLSAvaG9tZS9yb290L3Vzci9zcmMvbGludXgtMi4yLjE0L2RyaXZlcnMv Y2hhci9zZXJpYWwuYwlUdWUgQXByICA0IDE4OjEyOjIxIDIwMDANCisrKyAu L2RyaXZlcnMvY2hhci9zZXJpYWwuYwlUaHUgTWFyIDMwIDE1OjM4OjAxIDIw MDANCkBAIC0zNTY1LDMgKzM1NjUsMTExIEBADQogCXJldHVybiBrbWVtX3N0 YXJ0Ow0KIH0NCiAjZW5kaWYNCisNCisvKg0KKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KKyAqIFNlcmlhbCBHREIgZHJpdmVyIChtb3N0IGluIHNlcmlhbGdkYi5j KQ0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KKyNpZmRlZiBDT05G SUdfR0RCDQorDQorLyogDQorICogIFRha2VzOg0KKyAqCXR0eVMgLSBpbnRl Z2VyIHNwZWNpZnlpbmcgd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlIGZvciBk ZWJ1Z2dpbmcNCisgKgliYXVkIC0gYmF1ZCByYXRlIG9mIHNwZWNpZmllZCBz ZXJpYWwgcG9ydA0KKyAqICBSZXR1cm5zOg0KKyAqCXBvcnQgZm9yIHVzZSBi eSB0aGUgZ2RiIHNlcmlhbCBkcml2ZXINCisqLw0KK3N0cnVjdCBzZXJpYWxf c3RhdGUgKg0KK2dkYl9zZXJpYWxfc2V0dXAoaW50IHR0eVMsIGludCBiYXVk KQ0KK3sNCisgICAgICAgIHN0cnVjdCBzZXJpYWxfc3RhdGUgKnNlcjsNCisg ICAgICAgIHVuc2lnbmVkIGN2YWw7DQorICAgICAgICBpbnQgICAgIGJpdHMg PSA4Ow0KKyAgICAgICAgaW50ICAgICBwYXJpdHkgPSAnbic7DQorICAgICAg ICBpbnQgICAgIGNmbGFnID0gQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsNCisg ICAgICAgIGludCAgICAgcXVvdCA9IDA7DQorDQorICAgICAgICAvKg0KKyAg ICAgICAgICogICAgICBOb3cgY29uc3RydWN0IGEgY2ZsYWcgc2V0dGluZy4N CisgICAgICAgICAqLw0KKyAgICAgICAgc3dpdGNoKGJhdWQpIHsNCisgICAg ICAgICAgICAgICAgY2FzZSAxMjAwOg0KKyAgICAgICAgICAgICAgICAgICAg ICAgIGNmbGFnIHw9IEIxMjAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIDI0MDA6DQorICAgICAg ICAgICAgICAgICAgICAgICAgY2ZsYWcgfD0gQjI0MDA7DQorICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2Ug NDgwMDoNCisgICAgICAgICAgICAgICAgICAgICAgICBjZmxhZyB8PSBCNDgw MDsNCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg ICAgICAgICAgY2FzZSAxOTIwMDoNCisgICAgICAgICAgICAgICAgICAgICAg ICBjZmxhZyB8PSBCMTkyMDA7DQorICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgMzg0MDA6DQorICAgICAg ICAgICAgICAgICAgICAgICAgY2ZsYWcgfD0gQjM4NDAwOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNl IDU3NjAwOg0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNmbGFnIHw9IEI1 NzYwMDsNCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAg ICAgICAgICAgICAgY2FzZSAxMTUyMDA6DQorICAgICAgICAgICAgICAgICAg ICAgICAgY2ZsYWcgfD0gQjExNTIwMDsNCisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSA5NjAwOg0KKyAg ICAgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAg ICAgIGNmbGFnIHw9IEI5NjAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgICAgc3dpdGNoKGJpdHMpIHsN CisgICAgICAgICAgICAgICAgY2FzZSA3Og0KKyAgICAgICAgICAgICAgICAg ICAgICAgIGNmbGFnIHw9IENTNzsNCisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCisgICAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAg ICAgICAgICAgY2FzZSA4Og0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNm bGFnIHw9IENTODsNCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN CisgICAgICAgIH0NCisgICAgICAgIHN3aXRjaChwYXJpdHkpIHsNCisgICAg ICAgICAgICAgICAgY2FzZSAnbyc6IGNhc2UgJ08nOg0KKyAgICAgICAgICAg ICAgICAgICAgICAgIGNmbGFnIHw9IFBBUk9ERDsNCisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSAnZSc6 IGNhc2UgJ0UnOg0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNmbGFnIHw9 IFBBUkVOQjsNCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisg ICAgICAgIH0NCisNCisgICAgICAgIC8qDQorICAgICAgICAgKiAgICAgIERp dmlzb3IsIGJ5dGVzaXplIGFuZCBwYXJpdHkNCisgICAgICAgICAqLw0KKw0K KyAgICAgICAgc2VyID0gcnNfdGFibGUgKyB0dHlTOw0KKwlzZXItPmZsYWdz ICY9IH5BU1lOQ19CT09UX0FVVE9DT05GOw0KKyAgICAgICAgcXVvdCA9IHNl ci0+YmF1ZF9iYXNlIC8gYmF1ZDsNCisgICAgICAgIGN2YWwgPSBjZmxhZyAm IChDU0laRSB8IENTVE9QQik7DQorICAgICAgICBjdmFsID4+PSA0Ow0KKyAg ICAgICAgaWYgKGNmbGFnICYgUEFSRU5CKQ0KKyAgICAgICAgICAgICAgICBj dmFsIHw9IFVBUlRfTENSX1BBUklUWTsNCisgICAgICAgIGlmICghKGNmbGFn ICYgUEFST0REKSkNCisgICAgICAgICAgICAgICAgY3ZhbCB8PSBVQVJUX0xD Ul9FUEFSOw0KKw0KKyAgICAgICAgLyoNCisgICAgICAgICAqICAgICAgRGlz YWJsZSBVQVJUIGludGVycnVwdHMsIHNldCBEVFIgYW5kIFJUUyBoaWdoDQor ICAgICAgICAgKiAgICAgIGFuZCBzZXQgc3BlZWQuDQorICAgICAgICAgKi8N CisJY3ZhbCA9IDB4MzsNCisgICAgICAgIG91dGIoY3ZhbCB8IFVBUlRfTENS X0RMQUIsIHNlci0+cG9ydCArIFVBUlRfTENSKTsgICAgICAgLyogc2V0IERM QUIgKi8NCisgICAgICAgIG91dGIocXVvdCAmIDB4ZmYsIHNlci0+cG9ydCAr IFVBUlRfRExMKTsgICAgICAgICAvKiBMUyBvZiBkaXZpc29yICovDQorICAg ICAgICBvdXRiKHF1b3QgPj4gOCwgc2VyLT5wb3J0ICsgVUFSVF9ETE0pOyAg ICAgICAgICAgLyogTVMgb2YgZGl2aXNvciAqLw0KKyAgICAgICAgb3V0Yihj dmFsLCBzZXItPnBvcnQgKyBVQVJUX0xDUik7ICAgICAgICAgICAgICAgIC8q IHJlc2V0IERMQUIgKi8NCisgICAgICAgIG91dGIoVUFSVF9JRVJfUkRJLCBz ZXItPnBvcnQgKyBVQVJUX0lFUik7ICAgICAgICAvKiB0dXJuIG9uIGludGVy cnV0cHMgKi8NCisgICAgICAgIG91dGIoVUFSVF9NQ1JfT1VUMiB8IFVBUlRf TUNSX0RUUiB8IFVBUlRfTUNSX1JUUywgc2VyLT5wb3J0ICsgVUFSVF9NQ1Ip Ow0KKw0KKyAgICAgICAgLyoNCisgICAgICAgICAqICAgICAgSWYgd2UgcmVh ZCAweGZmIGZyb20gdGhlIExTUiwgdGhlcmUgaXMgbm8gVUFSVCBoZXJlLg0K KyAgICAgICAgICovDQorICAgICAgICBpZiAoaW5iKHNlci0+cG9ydCArIFVB UlRfTFNSKSA9PSAweGZmKQ0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsN CisgICAgICAgIHJldHVybiBzZXI7DQorfQ0KKyNlbmRpZiAvKiBDT05GSUdf R0RCICovDQpkaWZmIC1OIC1VIDMgLXIgL2hvbWUvcm9vdC91c3Ivc3JjL2xp bnV4LTIuMi4xNC9kcml2ZXJzL2NoYXIvc2VyaWFsZ2RiLmMgLi9kcml2ZXJz L2NoYXIvc2VyaWFsZ2RiLmMNCi0tLSAvaG9tZS9yb290L3Vzci9zcmMvbGlu dXgtMi4yLjE0L2RyaXZlcnMvY2hhci9zZXJpYWxnZGIuYwlXZWQgRGVjIDMx IDE5OjAwOjAwIDE5NjkNCisrKyAuL2RyaXZlcnMvY2hhci9zZXJpYWxnZGIu YwlGcmkgTWFyIDMxIDE4OjM0OjAwIDIwMDANCkBAIC0wLDAgKzEsMjYxIEBA DQorLyoNCisgKiBTZXJpYWwgaW50ZXJmYWNlIEdEQiBzdHViDQorICoNCisg KiBXcml0dGVuIChoYWNrZWQgdG9nZXRoZXIpIGJ5IERhdmlkIEdyb3RoZSAo ZGF2ZUBnY29tLmNvbSkNCisgKg0KKyAqIE1vZGlmaWVkIGJ5IFNjb3R0IEZv ZWhuZXIgKHNmb2VobmVyQGVuZ3Iuc2dpLmNvbSkgdG8gYWxsb3cgY29ubmVj dA0KKyAqIG9uIGJvb3QtdXANCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCisj aW5jbHVkZSA8bGludXgvc2lnbmFsLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Nj aGVkLmg+DQorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+DQorI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPg0KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4N CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4NCisjaW5jbHVkZSA8bGlu dXgvc2VyaWFsLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4N CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+DQorI2luY2x1ZGUgPGxpbnV4 L21ham9yLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KKyNpbmNs dWRlIDxsaW51eC9mY250bC5oPg0KKyNpbmNsdWRlIDxsaW51eC90ZXJtaW9z Lmg+DQorDQorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4NCisjaW5jbHVkZSA8 YXNtL2lvLmg+DQorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+DQorI2luY2x1 ZGUgPGFzbS9iaXRvcHMuaD4NCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPg0K KyNpbmNsdWRlIDxhc20vaXJxLmg+DQorDQorDQorI2RlZmluZQlHREJfQlVG X1NJWkUJNTEyCQkvKiBwb3dlciBvZiAyLCBwbGVhc2UgKi8NCisNCitzdGF0 aWMgY2hhcglnZGJfYnVmW0dEQl9CVUZfU0laRV0gOw0KK3N0YXRpYyBpbnQJ Z2RiX2J1Zl9pbl9pbnggOw0KK3N0YXRpYyBpbnQJZ2RiX2J1Zl9pbl9jbnQg Ow0KK3N0YXRpYyBpbnQJZ2RiX2J1Zl9vdXRfaW54IDsNCisNCitleHRlcm4g dm9pZAlzZXRfZGVidWdfdHJhcHModm9pZCkgOwkJLyogR0RCIHJvdXRpbmUg Ki8NCitleHRlcm4gdm9pZAlicmVha3BvaW50KHZvaWQpIDsJCS8qIEdEQiBy b3V0aW5lICovDQorZXh0ZXJuIHN0cnVjdCBzZXJpYWxfc3RhdGUgKglnZGJf c2VyaWFsX3NldHVwKGludCB0dHlTLCBpbnQgYmF1ZCk7DQorDQoraW50IGdk Yl9pcnE7DQoraW50IGdkYl9wb3J0Ow0KK2ludCBnZGJfdHR5UyA9IDE7CS8q IERlZmF1bHQ6IHR0eVMxICovDQoraW50IGdkYl9iYXVkID0gMzg0MDA7IA0K K2ludCBnZGJfZW50ZXIgPSAwOwkvKiBEZWZhdWx0OiBkbyBub3QgZG8gZ2Ri X2hvb2sgb24gYm9vdCAqLw0KK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAt MTsNCisNCisvKg0KKyAqIEdldCBhIGJ5dGUgZnJvbSB0aGUgaGFyZHdhcmUg ZGF0YSBidWZmZXIgYW5kIHJldHVybiBpdA0KKyAqLw0KK3N0YXRpYyBpbnQJ cmVhZF9kYXRhX2Jmcih2b2lkKQ0KK3sNCisgICAgaWYgKGluYihnZGJfcG9y dCArIFVBUlRfTFNSKSAmIFVBUlRfTFNSX0RSKQ0KKwlyZXR1cm4oaW5iKGdk Yl9wb3J0ICsgVUFSVF9SWCkpOw0KKw0KKyAgICByZXR1cm4oIC0xICkgOw0K Kw0KK30gLyogcmVhZF9kYXRhX2JmciAqLw0KKw0KKw0KKy8qDQorICogR2V0 IGEgY2hhciBpZiBhdmFpbGFibGUsIHJldHVybiAtMSBpZiBub3RoaW5nIGF2 YWlsYWJsZS4NCisgKiBFbXB0eSB0aGUgcmVjZWl2ZSBidWZmZXIgZmlyc3Qs IHRoZW4gbG9vayBhdCB0aGUgaW50ZXJmYWNlIGhhcmR3YXJlLg0KKyAqLw0K K3N0YXRpYyBpbnQJcmVhZF9jaGFyKHZvaWQpDQorew0KKyAgICBpZiAoZ2Ri X2J1Zl9pbl9jbnQgIT0gMCkJCS8qIGludHIgcm91dGluZSBoYXMgcSdkIGNo YXJzICovDQorICAgIHsNCisJaW50CQljaHIgOw0KKw0KKwljaHIgPSBnZGJf YnVmW2dkYl9idWZfb3V0X2lueCsrXSA7DQorCWdkYl9idWZfb3V0X2lueCAm PSAoR0RCX0JVRl9TSVpFIC0gMSkgOw0KKwlnZGJfYnVmX2luX2NudC0tIDsN CisJcmV0dXJuKGNocikgOw0KKyAgICB9DQorDQorICAgIHJldHVybihyZWFk X2RhdGFfYmZyKCkpIDsJLyogcmVhZCBmcm9tIGhhcmR3YXJlICovDQorDQor fSAvKiByZWFkX2NoYXIgKi8NCisNCisvKg0KKyAqIFdhaXQgdW50aWwgdGhl IGludGVyZmFjZSBjYW4gYWNjZXB0IGEgY2hhciwgdGhlbiB3cml0ZSBpdC4N CisgKi8NCitzdGF0aWMgdm9pZAl3cml0ZV9jaGFyKGludCBjaHIpDQorew0K KyAgICB3aGlsZSAoICEoaW5iKGdkYl9wb3J0ICsgVUFSVF9MU1IpICYgVUFS VF9MU1JfVEhSRSkgKSA7DQorDQorICAgIG91dGIoY2hyLCBnZGJfcG9ydCtV QVJUX1RYKTsNCisNCit9IC8qIHdyaXRlX2NoYXIgKi8NCisNCisvKg0KKyAq IFRoaXMgaXMgdGhlIHJlY2VpdmVyIGludGVycnVwdCByb3V0aW5lIGZvciB0 aGUgR0RCIHN0dWIuDQorICogSXQgd2lsbCByZWNlaXZlIGEgbGltaXRlZCBu dW1iZXIgb2YgY2hhcmFjdGVycyBvZiBpbnB1dA0KKyAqIGZyb20gdGhlIGdk YiAgaG9zdCBtYWNoaW5lIGFuZCBzYXZlIHRoZW0gdXAgaW4gYSBidWZmZXIu DQorICoNCisgKiBXaGVuIHRoZSBnZGIgc3R1YiByb3V0aW5lIGdldERlYnVn Q2hhcigpIGlzIGNhbGxlZCBpdA0KKyAqIGRyYXdzIGNoYXJhY3RlcnMgb3V0 IG9mIHRoZSBidWZmZXIgdW50aWwgaXQgaXMgZW1wdHkgYW5kDQorICogdGhl biByZWFkcyBkaXJlY3RseSBmcm9tIHRoZSBzZXJpYWwgcG9ydC4NCisgKg0K KyAqIFdlIGRvIG5vdCBhdHRlbXB0IHRvIHdyaXRlIGNoYXJzIGZyb20gdGhl IGludGVycnVwdCByb3V0aW5lDQorICogc2luY2UgdGhlIHN0dWJzIGRvIGFs bCBvZiB0aGF0IHZpYSBwdXREZWJ1Z0NoYXIoKSB3aGljaA0KKyAqIHdyaXRl cyBvbmUgYnl0ZSBhZnRlciB3YWl0aW5nIGZvciB0aGUgaW50ZXJmYWNlIHRv IGJlY29tZQ0KKyAqIHJlYWR5Lg0KKyAqDQorICogVGhlIGRlYnVnIHN0dWJz IGxpa2UgdG8gcnVuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBzaW5jZSwN CisgKiBhZnRlciBhbGwsIHRoZXkgcnVuIGFzIGEgY29uc2VxdWVuY2Ugb2Yg YSBicmVha3BvaW50IGluDQorICogdGhlIGtlcm5lbC4NCisgKg0KKyAqIFBl cmhhcHMgc29tZW9uZSB3aG8ga25vd3MgbW9yZSBhYm91dCB0aGUgdHR5IGRy aXZlciB0aGFuIEkNCisgKiBjYXJlIHRvIGxlYXJuIGNhbiBtYWtlIHRoaXMg d29yayBmb3IgYW55IGxvdyBsZXZlbCBzZXJpYWwNCisgKiBkcml2ZXIuDQor ICovDQorc3RhdGljIHZvaWQgZ2RiX2ludGVycnVwdChpbnQgaXJxLCB2b2lk ICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykNCit7DQorICAgIGlu dAkJCSBjaHIgOw0KKw0KKyAgICBmb3IgKDs7KQ0KKyAgICB7DQorCWNociA9 IHJlYWRfZGF0YV9iZnIoKSA7DQorCWlmIChjaHIgPCAwKSBicmVhayA7DQor DQorICAgICAgICBpZiAoY2hyID09IDMpICAgICAgICAgICAgICAgICAgIC8q IEN0cmwtQyBtZWFucyByZW1vdGUgaW50ZXJydXB0ICovDQorICAgICAgICB7 DQorICAgICAgICAgICAgYnJlYWtwb2ludCgpOw0KKyAgICAgICAgICAgIGNv bnRpbnVlIDsNCisgICAgICAgIH0NCisNCisJaWYgKGdkYl9idWZfaW5fY250 ID49IEdEQl9CVUZfU0laRSkNCisJewkJCQkvKiBidWZmZXIgb3ZlcmZsb3cs IGNsZWFyIGl0ICovDQorCSAgICBnZGJfYnVmX2luX2lueCA9IDAgOw0KKwkg ICAgZ2RiX2J1Zl9pbl9jbnQgPSAwIDsNCisJICAgIGdkYl9idWZfb3V0X2lu eCA9IDAgOw0KKwkgICAgYnJlYWsgOw0KKwl9DQorDQorCWdkYl9idWZbZ2Ri X2J1Zl9pbl9pbngrK10gPSBjaHIgOw0KKwlnZGJfYnVmX2luX2lueCAmPSAo R0RCX0JVRl9TSVpFIC0gMSkgOw0KKwlnZGJfYnVmX2luX2NudCsrIDsNCisg ICAgfQ0KKw0KK30gLyogZ2RiX2ludGVycnVwdCAqLw0KKw0KKy8qDQorICog SnVzdCBhIE5VTEwgcm91dGluZSBmb3IgdGVzdGluZy4NCisgKi8NCit2b2lk IGdkYl9udWxsKHZvaWQpDQorew0KK30gLyogZ2RiX251bGwgKi8NCisNCisN CitpbnQgICAgIGdkYl9ob29rKHZvaWQpDQorew0KKyAgICBpbnQgICAgICAg ICByZXR2YWwgOw0KKyAgICBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICpzZXI7DQor DQorICAgIGlmKChzZXIgPSBnZGJfc2VyaWFsX3NldHVwKGdkYl90dHlTLCBn ZGJfYmF1ZCkpID09IDApIHsNCisgICAgICAgIHByaW50ayAoImdkYl9zZXJp YWxfc2V0dXAoKSBlcnJvciIpOw0KKyAgICAgICAgcmV0dXJuKC0xKTsNCisg ICAgfQ0KKw0KKyAgICBnZGJfcG9ydCA9IHNlci0+cG9ydDsNCisgICAgZ2Ri X2lycSA9IHNlci0+aXJxOw0KKw0KKyAgICBmcmVlX2lycShnZGJfaXJxLCBO VUxMKTsNCisgICAgcmV0dmFsID0gcmVxdWVzdF9pcnEoZ2RiX2lycSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX2ludGVycnVwdCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBULA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAiR0RCLXN0dWIiLCBOVUxMKTsNCisgICAgaWYg KHJldHZhbCA9PSAwKQ0KKyAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOw0KKyAg ICBlbHNlDQorICAgICAgICBpbml0aWFsaXplZCA9IDA7DQorDQorICAgIC8q DQorICAgICAqIENhbGwgR0RCIHJvdXRpbmUgdG8gc2V0dXAgdGhlIGV4Y2Vw dGlvbiB2ZWN0b3JzIGZvciB0aGUgZGVidWdnZXINCisgICAgICovDQorICAg IHNldF9kZWJ1Z190cmFwcygpIDsNCisNCisgICAgLyoNCisgICAgICogQ2Fs bCB0aGUgYnJlYWtwb2ludCgpIHJvdXRpbmUgaW4gR0RCIHRvIHN0YXJ0IHRo ZSBkZWJ1Z2dpbmcNCisgICAgICogc2Vzc2lvbi4NCisgICAgICovDQorICAg IHByaW50aygiV2FpdG5nIGZvciBjb25uZWN0aW9uIGZyb20gcmVtb3RlIGdk YiBvbiB0dHlTJWQiLGdkYl90dHlTKSA7DQorICAgIGJyZWFrcG9pbnQoKSA7 DQorICAgIGdkYl9udWxsKCkgOw0KKw0KKyAgICBwcmludGsoIkNvbm5lY3Rl ZC5cbiIpOw0KKw0KKyAgICByZXR1cm4oMCkgOw0KKw0KK30gLyogZ2RiX2hv b2tfaW50ZXJydXB0MiAqLw0KKw0KKy8qDQorICogZ2V0RGVidWdDaGFyDQor ICoNCisgKiBUaGlzIGlzIGEgR0RCIHN0dWIgcm91dGluZS4gIEl0IHdhaXRz IGZvciBhIGNoYXJhY3RlciBmcm9tIHRoZQ0KKyAqIHNlcmlhbCBpbnRlcmZh Y2UgYW5kIHRoZW4gcmV0dXJucyBpdC4gIElmIHRoZXJlIGlzIG5vIHNlcmlh bA0KKyAqIGludGVyZmFjZSBjb25uZWN0aW9uIHRoZW4gaXQgcmV0dXJucyBh IGJvZ3VzIHZhbHVlIHdoaWNoIHdpbGwNCisgKiBhbG1vc3QgY2VydGFpbmx5 IGNhdXNlIHRoZSBzeXN0ZW0gdG8gaGFuZy4NCisgKi8NCitpbnQJZ2V0RGVi dWdDaGFyKHZvaWQpDQorew0KKyAgICB2b2xhdGlsZSBpbnQJY2hyIDsNCisN CisjaWYgUFJOVA0KKyAgICBwcmludGsoImdldERlYnVnQ2hhcjogIikgOw0K KyNlbmRpZg0KKw0KKyAgICB3aGlsZSAoIChjaHIgPSByZWFkX2NoYXIoKSkg PCAwICkgOw0KKw0KKw0KKyNpZiBQUk5UDQorICAgIHByaW50aygiJWMiLCBj aHIgPiAnICcgJiYgY2hyIDwgMHg3RiA/IGNociA6ICcgJykgOw0KKyNlbmRp Zg0KKyAgICByZXR1cm4oY2hyKSA7DQorDQorfSAvKiBnZXREZWJ1Z0NoYXIg Ki8NCisNCisvKg0KKyAqIHB1dERlYnVnQ2hhcg0KKyAqDQorICogVGhpcyBp cyBhIEdEQiBzdHViIHJvdXRpbmUuICBJdCB3YWl0cyB1bnRpbCB0aGUgaW50 ZXJmYWNlIGlzIHJlYWR5DQorICogdG8gdHJhbnNtaXQgYSBjaGFyIGFuZCB0 aGVuIHNlbmRzIGl0LiAgSWYgdGhlcmUgaXMgbm8gc2VyaWFsDQorICogaW50 ZXJmYWNlIGNvbm5lY3Rpb24gdGhlbiBpdCBzaW1wbHkgcmV0dXJucyB0byBp dHMgY2FsbGVyLCBoYXZpbmcNCisgKiBwcmV0ZW5kZWQgdG8gc2VuZCB0aGUg Y2hhci4NCisgKi8NCit2b2lkCXB1dERlYnVnQ2hhcihpbnQgY2hyKQ0KK3sN CisjaWYgUFJOVA0KKyAgICBwcmludGsoInB1dERlYnVnQ2hhcjogY2hyPSUw MnggJyVjJ1xuIiwgY2hyLA0KKwkJY2hyID4gJyAnICYmIGNociA8IDB4N0Yg PyBjaHIgOiAnICcpIDsNCisjZW5kaWYNCisNCisgICAgd3JpdGVfY2hhcihj aHIpIDsJLyogdGhpcyByb3V0aW5lIHdpbGwgd2FpdCAqLw0KKw0KK30gLyog cHV0RGVidWdDaGFyICovDQorDQorLyoNCisgKiBleGNlcHRpb25IYW5kbGVy DQorICoNCisgKiBHREIncyBzdHViIGNvZGUgY2FsbHMgdGhpcyByb3V0aW5l IHRvIGFzc29jaWF0ZSBhIHJvdXRpbmUgd2l0aA0KKyAqIGFuIGludGVycnVw dCB2ZWN0b3IuICBUaGUgcm91dGluZSwgcG9pbnRlZCB0byBieSAnaGFuZGxl cicgaXMNCisgKiBhbiBhc3NlbWJseSBsYW5ndWFnZSByb3V0aW5lIHRoYXQg Y2FuIGhhdmUgdGhlIHZlY3RvciBwb2ludGVkDQorICogZGlyZWN0bHkgYXQg aXQuDQorICovDQordHlwZWRlZiB2b2lkCSgqRnVuY3Rpb24pKHZvaWQpIDsN CisNCitGdW5jdGlvbglleGNlcHRpb25IYW5kbGVyKGludCB0cmFwbm8sIEZ1 bmN0aW9uIGhhbmRsZXIpDQorew0KKyAgICBpZiAodHJhcG5vIDwgMHgyMCkJ CQkvKiBvbmx5IDMyIG9mIHRoZXNlICovDQorCXNldF9pbnRyX2dhdGUodHJh cG5vLCBoYW5kbGVyKSA7DQorDQorICAgIHJldHVybihOVUxMKSA7DQorDQor fSAvKiBleGNlcHRpb25IYW5kbGVyICovDQpkaWZmIC1OIC1VIDMgLXIgL2hv bWUvcm9vdC91c3Ivc3JjL2xpbnV4LTIuMi4xNC9kcml2ZXJzL2NoYXIvc3lz cnEuYyAuL2RyaXZlcnMvY2hhci9zeXNycS5jDQotLS0gL2hvbWUvcm9vdC91 c3Ivc3JjL2xpbnV4LTIuMi4xNC9kcml2ZXJzL2NoYXIvc3lzcnEuYwlUdWUg QXByICA0IDE4OjEyOjIxIDIwMDANCisrKyAuL2RyaXZlcnMvY2hhci9zeXNy cS5jCUZyaSBNYXIgMzEgMTY6MjA6MTMgMjAwMA0KQEAgLTI4LDYgKzI4LDEw IEBADQogI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+DQogI2VuZGlmDQog DQorI2lmZGVmIENPTkZJR19HREINCitleHRlcm4gaW50IGdkYl9ob29rKHZv aWQpOw0KKyNlbmRpZg0KKw0KICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEN CiBpbnQgc3lzcnFfZW5hYmxlZCA9IDE7DQogI2VuZGlmDQpAQCAtMTM0LDYg KzEzOCwxMSBAQA0KIAkJc2VuZF9zaWdfYWxsKFNJR0tJTEwsIDEpOw0KIAkJ b3JpZ19sb2dfbGV2ZWwgPSA4Ow0KIAkJYnJlYWs7DQorI2lmZGVmIENPTkZJ R19HREINCisgICAgICAgIGNhc2UgJ2cnOg0KKyAgICAgICAgICAgICAgICBn ZGJfaG9vaygpOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisjZW5kaWYN CiAJZGVmYXVsdDoJCQkJCSAgICAvKiBVbmtub3duOiBoZWxwICovDQogCQlp ZiAoa2JkKQ0KIAkJCXByaW50aygidW5SYXcgIik7DQpkaWZmIC1OIC1VIDMg LXIgL2hvbWUvcm9vdC91c3Ivc3JjL2xpbnV4LTIuMi4xNC9pbmNsdWRlL2xp bnV4L2dkYi5oIC4vaW5jbHVkZS9saW51eC9nZGIuaA0KLS0tIC9ob21lL3Jv b3QvdXNyL3NyYy9saW51eC0yLjIuMTQvaW5jbHVkZS9saW51eC9nZGIuaAlX ZWQgRGVjIDMxIDE5OjAwOjAwIDE5NjkNCisrKyAuL2luY2x1ZGUvbGludXgv Z2RiLmgJVGh1IE1hciAzMCAxNTozODowMSAyMDAwDQpAQCAtMCwwICsxLDE1 IEBADQorI2lmbmRlZiBfR0RCX0hfDQorI2RlZmluZSBfR0RCX0hfDQorDQor ZXh0ZXJuIGludCBnZGJfZW50ZXI7CS8qIDEgPSBlbnRlciBkZWJ1Z2dlciBv biBib290ICovDQorZXh0ZXJuIGludCBnZGJfdHR5UzsNCitleHRlcm4gaW50 IGdkYl9iYXVkOw0KKw0KK2V4dGVybiBpbnQgZ2RiX2hvb2sodm9pZCk7DQor DQordHlwZWRlZiBpbnQgICAgIGdkYl9kZWJ1Z19ob29rKGludCB0cmFwbm8s DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWdubywN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVycl9jb2Rl LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRf cmVncyAqcmVncyk7DQorZXh0ZXJuIGdkYl9kZWJ1Z19ob29rICAqbGludXhf ZGVidWdfaG9vazsNCisjZW5kaWYgLyogX0dEQl9IXyAqLw0KZGlmZiAtTiAt VSAzIC1yIC9ob21lL3Jvb3QvdXNyL3NyYy9saW51eC0yLjIuMTQvaW5pdC9t YWluLmMgLi9pbml0L21haW4uYw0KLS0tIC9ob21lL3Jvb3QvdXNyL3NyYy9s aW51eC0yLjIuMTQvaW5pdC9tYWluLmMJVHVlIEFwciAgNCAxODoxMjozOCAy MDAwDQorKysgLi9pbml0L21haW4uYwlGcmkgTWFyIDMxIDE4OjMwOjE5IDIw MDANCkBAIC01Niw2ICs1NiwxMCBAQA0KIGV4dGVybiB2b2lkIG51YnVzX2lu aXQodm9pZCk7DQogI2VuZGlmDQogDQorI2lmZGVmIENPTkZJR19HREINCisj aW5jbHVkZSA8bGludXgvZ2RiLmg+DQorI2VuZGlmDQorDQogLyoNCiAgKiBW ZXJzaW9ucyBvZiBnY2Mgb2xkZXIgdGhhbiB0aGF0IGxpc3RlZCBiZWxvdyBt YXkgYWN0dWFsbHkgY29tcGlsZQ0KICAqIGFuZCBsaW5rIG9rYXksIGJ1dCB0 aGUgZW5kIHByb2R1Y3QgY2FuIGhhdmUgc3VidGxlIHJ1biB0aW1lIGJ1Z3Mu DQpAQCAtMTE2OCw2ICsxMTcyLDIwIEBADQogCQkJY29uc29sZV9sb2dsZXZl bCA9IDEwOw0KIAkJCWNvbnRpbnVlOw0KIAkJfQ0KKyNpZmRlZiBDT05GSUdf R0RCDQorCQlpZiAoIXN0cmNtcChsaW5lLCJnZGIiKSkgew0KKwkJCWdkYl9l bnRlciA9IDE7DQorCQkJY29udGludWU7DQorCQl9DQorCQlpZiAoIXN0cm5j bXAobGluZSwiZ2RidHR5Uz0iLDgpKSB7DQorCQkJZ2RiX3R0eVMgPSBzaW1w bGVfc3RydG91bChsaW5lKzgsTlVMTCwxMCk7DQorCQkJY29udGludWU7DQor CQl9DQorCQlpZiAoIXN0cm5jbXAobGluZSwiZ2RiYmF1ZD0iLDgpKSB7DQor CQkJZ2RiX2JhdWQgPSBzaW1wbGVfc3RydG91bChsaW5lKzgsTlVMTCwxMCk7 DQorCQkJY29udGludWU7DQorCQl9DQorI2VuZGlmIC8qIENPTkZJR19HREIg Ki8NCiAJCWlmICghc3RybmNtcChsaW5lLCJpbml0PSIsNSkpIHsNCiAJCQls aW5lICs9IDU7DQogCQkJZXhlY3V0ZV9jb21tYW5kID0gbGluZTsNCkBAIC0x MzI4LDYgKzEzNDYsMTAgQEANCiAJICoJbWFrZSBzeXNjYWxscyAoYW5kIHRo dXMgYmUgbG9ja2VkKS4NCiAJICovDQogCXNtcF9pbml0KCk7DQorI2lmZGVm IENPTkZJR19HREIgDQorICAgICAgICBpZiAoZ2RiX2VudGVyKQ0KKyAgICAg ICAgICAgICAgICBnZGJfaG9vaygpOw0KKyNlbmRpZg0KIAlrZXJuZWxfdGhy ZWFkKGluaXQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9O RV9TSUdIQU5EKTsNCiAJY3VycmVudC0+bmVlZF9yZXNjaGVkID0gMTsNCiAg CWNwdV9pZGxlKE5VTEwpOw0K ---1463782902-1586378699-956844045=:19930--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/