Subject: Re: toolchain/35540: GDB 6 support for pthreads
To: None <toolchain-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Bucky Katz <bucky@picovex.com>
List: netbsd-bugs
Date: 02/02/2007 16:25:02
The following reply was made to PR toolchain/35540; it has been noted by GNATS.

From: Bucky Katz <bucky@picovex.com>
To: gnats-bugs@NetBSD.org
Cc: toolchain-manager@netbsd.org, gnats-admin@netbsd.org,
	netbsd-bugs@netbsd.org, Bucky Katz <bucky@picovex.com>
Subject: Re: toolchain/35540: GDB 6 support for pthreads
Date: Fri, 02 Feb 2007 08:20:33 -0800

 --=-=-=
 
 Geoff Wing <gcw@pobox.com> writes:
 
 > The following reply was made to PR toolchain/35540; it has been noted by GNATS.
 >
 > From: Geoff Wing <gcw@pobox.com>
 > To: gnats-bugs@NetBSD.org
 > Cc: 
 > Subject: Re: toolchain/35540: GDB 6 support for pthreads
 > Date: Fri, 2 Feb 2007 17:44:53 +1100
 >
 >  On Friday 2007-02-02 17:10 +1100, Bucky Katz output:
 >  :Content-Disposition: attachment; filename=patch.gdb_pthread
 >  
 >  1) Where are nbsd_thread_init() & _initialize_nbsd_thread()?
 >  
 >  2) Where is armnbsd-regs.c?
 >  
 >  3) gdb6 doesn't have  nbsd-thread.c .  Where's this coming from?  gdb5.3?
 >  
 >  4) http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=35540
 >     shows how base64 is interpreted.
 >  
 >  Regards,
 >  Geoff
 >  
 
 My mistake and my apologies. I neglected to add -N when I made the
 diff.
 
 Here is a regenerated patch. Let me see if I can attach it
 appropriately.
 
 
 --=-=-=
 Content-Type: application/x-shar
 Content-Disposition: attachment; filename=patch.gdb_pthread.try2
 Content-Transfer-Encoding: base64
 Content-Description: Updated patch with missing files
 
 LS0tIDA3MDEyOS9zcmMvZ251L2Rpc3QvZ2RiNi9nZGIvYXJtbmJzZC1uYXQuYwkyMDA2LTA3LTAy
 IDIwOjAxOjI1LjAwMDAwMDAwMCAtMDcwMAorKysgbmV3L3NyYy9nbnUvZGlzdC9nZGI2L2dkYi9h
 cm1uYnNkLW5hdC5jCTIwMDYtMTAtMjUgMTU6NDQ6NTIuMDAwMDAwMDAwIC0wNzAwCkBAIC00ODYs
 MTIgKzQ4NiwyMCBAQAogX2luaXRpYWxpemVfYXJtX25ldGJzZF9uYXQgKHZvaWQpCiB7CiAgIHN0
 cnVjdCB0YXJnZXRfb3BzICp0OworICBleHRlcm4gdm9pZCBuYnNkX3RocmVhZF9pbml0IChzdHJ1
 Y3QgdGFyZ2V0X29wcyAqKTsKIAogICB0ID0gaW5mX3B0cmFjZV90YXJnZXQgKCk7CiAgIHQtPnRv
 X2ZldGNoX3JlZ2lzdGVycyA9IGFybW5ic2RfZmV0Y2hfcmVnaXN0ZXJzOwogICB0LT50b19zdG9y
 ZV9yZWdpc3RlcnMgPSBhcm1uYnNkX3N0b3JlX3JlZ2lzdGVyczsKICAgYWRkX3RhcmdldCAodCk7
 CiAKKy8qCisqcnBvcGFsaW46CisqZGVwcmVjYXRlZF9jaGlsZF9vcHMgZG9uJ3Qgd29yayB2ZXJ5
 IHdlbGwgCisqd2UgbmVlZCB0byBwYXNzIHRoZSBjdXJyZW50IHRhcmdldF9vcHMgdG8gbmJzZF90
 aHJlYWQKKyovCisgIG5ic2RfdGhyZWFkX2luaXQgKHQpOworIAogICBkZXByZWNhdGVkX2FkZF9j
 b3JlX2ZucyAoJmFybV9uZXRic2RfY29yZV9mbnMpOwogICBkZXByZWNhdGVkX2FkZF9jb3JlX2Zu
 cyAoJmFybV9uZXRic2RfZWxmY29yZV9mbnMpOwogfQotLS0gMDcwMTI5L3NyYy9nbnUvZGlzdC9n
 ZGI2L2dkYi9hcm1uYnNkLXJlZ3MuYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgw
 MAorKysgbmV3L3NyYy9nbnUvZGlzdC9nZGI2L2dkYi9hcm1uYnNkLXJlZ3MuYwkyMDA2LTEwLTI1
 IDE1OjQ0OjUyLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDEyMSBAQAorLyoKKypycG9wYWxp
 bjoKKypzdXBwbHlfZ3JlZ3NldCBhbmQgZnJpZW5kcyBmb3IgbmV0YnNkIHRocmVhZCBkZWJ1Z2dp
 bmcKKypUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBuZWVkZWQgYnkgcHRocmVhZF9kYmcgcHJvY18q
 IGZ1bmN0aW9ucworKih0aGV5IG5lZWQgdG8gYmUgYWJsZSB0byBjaG9vc2UgYmV0d2VlbiBncmVn
 c2V0IGFuZCBmcHJlZ3NldCkKKyovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZ2Ri
 Y29yZS5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNp
 bmNsdWRlICJ0YXJnZXQuaCIKKworI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIKKyNpbmNsdWRlIDxz
 eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9y
 ZWcuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1lLmg+CisKKyNpbmNsdWRlICJhcm0tdGRlcC5o
 IgorI2luY2x1ZGUgImluZi1wdHJhY2UuaCIKKworI2lmbmRlZiBIQVZFX0dSRUdTRVRfVAordHlw
 ZWRlZiBzdHJ1Y3QgcmVnIGdyZWdzZXRfdDsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfRlBSRUdT
 RVRfVAordHlwZWRlZiBzdHJ1Y3QgZnByZWcgZnByZWdzZXRfdDsKKyNlbmRpZgorCisjaW5jbHVk
 ZSAiZ3JlZ3NldC5oIgorCitleHRlcm4gaW50IGFybV9hcGNzXzMyOworCit2b2lkCitzdXBwbHlf
 Z3JlZ3NldCAoZ3JlZ3NldF90ICpncmVnc2V0KQoreworICBpbnQgcmVnbm87CisgIENPUkVfQURE
 UiByX3BjOworCisgIGZvciAocmVnbm8gPSBBUk1fQTFfUkVHTlVNOyByZWdubyA8IEFSTV9TUF9S
 RUdOVU07IHJlZ25vKyspCisgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAoY3VycmVudF9yZWdjYWNo
 ZSwgcmVnbm8sIChjaGFyICopICZncmVnc2V0LT5yW3JlZ25vXSk7CisKKyAgcmVnY2FjaGVfcmF3
 X3N1cHBseSAoY3VycmVudF9yZWdjYWNoZSwgQVJNX1NQX1JFR05VTSwKKyAgICAgICAgICAgICAg
 ICAgICAgICAgKGNoYXIgKikgJmdyZWdzZXQtPnJfc3ApOworICByZWdjYWNoZV9yYXdfc3VwcGx5
 IChjdXJyZW50X3JlZ2NhY2hlLCBBUk1fTFJfUkVHTlVNLAorICAgICAgICAgICAgICAgICAgICAg
 ICAoY2hhciAqKSAmZ3JlZ3NldC0+cl9scik7CisKKyAgcl9wYyA9IEFERFJfQklUU19SRU1PVkUg
 KGdyZWdzZXQtPnJfcGMpOworICByZWdjYWNoZV9yYXdfc3VwcGx5IChjdXJyZW50X3JlZ2NhY2hl
 LCBBUk1fUENfUkVHTlVNLCAoY2hhciAqKSAmcl9wYyk7CisKKyAgaWYgKGFybV9hcGNzXzMyKQor
 ICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9QU19SRUdOVU0s
 CisgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgJmdyZWdzZXQtPnJfY3Bzcik7Cisg
 IGVsc2UKKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChjdXJyZW50X3JlZ2NhY2hlLCBBUk1fUFNf
 UkVHTlVNLAorICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopICZncmVnc2V0LT5yX3Bj
 KTsKKworfQorCit2b2lkCitzdXBwbHlfZnByZWdzZXQgKGZwcmVnc2V0X3QgKmZwYXJlZ3NldCkK
 K3sKKyAgaW50IHJlZ25vOworCisgIGZvciAocmVnbm8gPSBBUk1fRjBfUkVHTlVNOyByZWdubyA8
 PSBBUk1fRjdfUkVHTlVNOyByZWdubysrKQorICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKGN1cnJl
 bnRfcmVnY2FjaGUsIHJlZ25vLAorICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopICZm
 cGFyZWdzZXQtPmZwcltyZWdubyAtIEFSTV9GMF9SRUdOVU1dKTsKKworCisgIHJlZ2NhY2hlX3Jh
 d19zdXBwbHkgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9GUFNfUkVHTlVNLAorICAgICAgICAgICAg
 ICAgICAgICAgICAoY2hhciAqKSAmZnBhcmVnc2V0LT5mcHJfZnBzcik7Cit9CisKK3ZvaWQKK2Zp
 bGxfZ3JlZ3NldCAoZ3JlZ3NldF90ICpncmVnc2V0cCwgaW50IHJlZ25vKQoreworICBpZiAoLTEg
 PT0gcmVnbm8pCisgICAgeworICAgICAgaW50IHJlZ251bTsKKyAgICAgIGZvciAocmVnbnVtID0g
 QVJNX0ExX1JFR05VTTsgcmVnbnVtIDwgQVJNX1NQX1JFR05VTTsgcmVnbnVtKyspIAorCXJlZ2Nh
 Y2hlX3Jhd19jb2xsZWN0IChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sIChjaGFyICopICZncmVn
 c2V0cC0+cltyZWdudW1dKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlZ25vID49IEFSTV9BMV9SRUdO
 VU0gJiYgcmVnbm8gPCBBUk1fU1BfUkVHTlVNKQorICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChj
 dXJyZW50X3JlZ2NhY2hlLCByZWdubywgKGNoYXIgKikgJmdyZWdzZXRwLT5yW3JlZ25vXSk7CisK
 KyAgaWYgKEFSTV9TUF9SRUdOVU0gPT0gcmVnbm8gfHwgLTEgPT0gcmVnbm8pCisgICAgcmVnY2Fj
 aGVfcmF3X2NvbGxlY3QgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9TUF9SRUdOVU0sIChjaGFyICop
 ICZncmVnc2V0cC0+cl9zcCk7CisKKyAgaWYgKEFSTV9MUl9SRUdOVU0gPT0gcmVnbm8gfHwgLTEg
 PT0gcmVnbm8pCisgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKGN1cnJlbnRfcmVnY2FjaGUsIEFS
 TV9MUl9SRUdOVU0sIChjaGFyICopICZncmVnc2V0cC0+cl9scik7CisKKworICBpZiAoQVJNX1BD
 X1JFR05VTSA9PSByZWdubyB8fCAtMSA9PSByZWdubykKKyAgICByZWdjYWNoZV9yYXdfY29sbGVj
 dCAoY3VycmVudF9yZWdjYWNoZSwgQVJNX1BDX1JFR05VTSwgKGNoYXIgKikgJmdyZWdzZXRwLT5y
 X3BjKTsKKworICBpZiAoQVJNX1BTX1JFR05VTSA9PSByZWdubyB8fCAtMSA9PSByZWdubykKKyAg
 ICB7CisgICAgICBpZiAoYXJtX2FwY3NfMzIpCisJcmVnY2FjaGVfcmF3X2NvbGxlY3QgKGN1cnJl
 bnRfcmVnY2FjaGUsIEFSTV9QU19SRUdOVU0sIChjaGFyICopICZncmVnc2V0cC0+cl9jcHNyKTsK
 KyAgICAgIGVsc2UKKwlyZWdjYWNoZV9yYXdfY29sbGVjdCAoY3VycmVudF9yZWdjYWNoZSwgQVJN
 X1BTX1JFR05VTSwgKGNoYXIgKikgJmdyZWdzZXRwLT5yX3BjKTsKKyAgICB9Cit9CisKK3ZvaWQK
 K2ZpbGxfZnByZWdzZXQgKGZwcmVnc2V0X3QgKmZwcmVnc2V0cCwgaW50IHJlZ25vKQoreworICBp
 ZiAoLTEgPT0gcmVnbm8pCisgICAgeworICAgICAgIGludCByZWdudW07CisgICAgICAgZm9yIChy
 ZWdudW0gPSBBUk1fRjBfUkVHTlVNOyByZWdudW0gPD0gQVJNX0Y3X1JFR05VTTsgcmVnbnVtKysp
 CisgICAgICAgICByZWdjYWNoZV9yYXdfY29sbGVjdChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0s
 IChjaGFyICopICZmcHJlZ3NldHAtPmZwcltyZWdudW0gLSBBUk1fRjBfUkVHTlVNXSk7CisgICAg
 fQorICBlbHNlIGlmIChyZWdubyA+PSBBUk1fRjBfUkVHTlVNICYmIHJlZ25vIDw9IEFSTV9GN19S
 RUdOVU0pCisgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QoY3VycmVudF9yZWdjYWNoZSwgcmVnbm8s
 IChjaGFyICopICZmcHJlZ3NldHAtPmZwcltyZWdubyAtIEFSTV9GMF9SRUdOVU1dKTsKKworICBp
 ZiAoQVJNX0ZQU19SRUdOVU0gPT0gcmVnbm8gfHwgLTEgPT0gcmVnbm8pCisgICAgcmVnY2FjaGVf
 cmF3X2NvbGxlY3QgKGN1cnJlbnRfcmVnY2FjaGUsIEFSTV9GUFNfUkVHTlVNLCAoY2hhciAqKSAm
 ZnByZWdzZXRwLT5mcHJfZnBzcik7Cit9CisKLS0tIDA3MDEyOS9zcmMvZ251L2Rpc3QvZ2RiNi9n
 ZGIvYnJlYWtwb2ludC5jCTIwMDYtMDctMDIgMjA6MDE6MjUuMDAwMDAwMDAwIC0wNzAwCisrKyBu
 ZXcvc3JjL2dudS9kaXN0L2dkYjYvZ2RiL2JyZWFrcG9pbnQuYwkyMDA2LTEwLTI1IDE1OjQ0OjUz
 LjAwMDAwMDAwMCAtMDcwMApAQCAtNTI5OSw2ICs1Mjk5LDE2IEBACiAJCSAgdG9rID0gZW5kX3Rv
 ayArIDE7CiAJCSAgdG1wdG9rID0gdG9rOwogCQkgIHRocmVhZCA9IHN0cnRvbCAodG9rLCAmdG9r
 LCAwKTsKKworCQkvKgorCQkqcnBvcGFsaW46CisJCSp3ZSBuZWVkIHRvIGZpbmQgYWxsIHRocmVh
 ZHMgaGVyZQorCQkqYmVjYXVzZSB3ZSBhcmUgbm90IGludGVyY2VwdGluZyB0aHJlYWQgY3JlYXRp
 b24KKwkJKihsaW51eCBnZXQncyB0byBrbm93IHRocmVhZHMgd2hlbiB0aGV5IGFyZSBjcmVhdGVk
 CisJCSpieSBob29raW5nIHB0aHJlYWRfY3JlYXRlKQorCQkqLworCQl0YXJnZXRfZmluZF9uZXdf
 dGhyZWFkcyAoKTsKKwogCQkgIGlmICh0b2sgPT0gdG1wdG9rKQogCQkgICAgZXJyb3IgKF8oIkp1
 bmsgYWZ0ZXIgdGhyZWFkIGtleXdvcmQuIikpOwogCQkgIGlmICghdmFsaWRfdGhyZWFkX2lkICh0
 aHJlYWQpKQotLS0gMDcwMTI5L3NyYy9nbnUvZGlzdC9nZGI2L2dkYi9uYnNkLXRocmVhZC5jCTE5
 NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBuZXcvc3JjL2dudS9kaXN0L2dk
 YjYvZ2RiL25ic2QtdGhyZWFkLmMJMjAwNi0xMi0yOSAxNjo1NTo1OC4wMDAwMDAwMDAgLTA4MDAK
 QEAgLTAsMCArMSwxMDM4IEBACisvKiBUaHJlYWQgZGVidWdnaW5nIGJhY2stZW5kIGNvZGUgZm9y
 IE5ldEJTRCwgZm9yIEdEQi4KKyAgIENvcHlyaWdodCAyMDAyCisgICBXYXNhYmkgU3lzdGVtcywg
 SW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBp
 cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
 ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
 IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
 cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
 IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
 b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG
 SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs
 IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy
 ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u
 ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
 ICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgQm9z
 dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisKKyNpbmNsdWRlICJkZWZzLmgiCisKKyNp
 bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisKKyNpbmNsdWRl
 IDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHRocmVhZF9kYmcuaD4KKworI2luY2x1ZGUgInN5bXRh
 Yi5oIgorI2luY2x1ZGUgInN5bWZpbGUuaCIKKyNpbmNsdWRlICJvYmpmaWxlcy5oIgorI2luY2x1
 ZGUgInNvbGliLmgiCisjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCisjaW5jbHVkZSAiYmZkLmgiCisj
 aW5jbHVkZSAiZWxmLWJmZC5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgImluZmVy
 aW9yLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVkZSAiZ2RiY29yZS5oIgorCisjaW5j
 bHVkZSA8bWFjaGluZS9yZWcuaD4KKworI2lmbmRlZiBIQVZFX0dSRUdTRVRfVAordHlwZWRlZiBz
 dHJ1Y3QgcmVnIGdyZWdzZXRfdDsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfRlBSRUdTRVRfVAor
 dHlwZWRlZiBzdHJ1Y3QgZnByZWcgZnByZWdzZXRfdDsKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3Jl
 Z3NldC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisKKyNpbmNsdWRlICJqYXZhLmgiCisKKy8q
 IG5ic2RfdGhyZWFkX3ByZXNlbnQgaW5kaWNhdGVzIHRoYXQgbmV3X29iamZpbGUgaGFzIHNwb3R0
 ZWQKKyAgIGxpYnB0aHJlYWQgYW5kIHRoYXQgcG9zdF9hdHRhY2goKSBvciBjcmVhdGVfaW5mZXJp
 b3IoKSBzaG91bGQgZmlyZQorICAgdXAgdGhyZWFkIGRlYnVnZ2luZyBpZiBpdCBpc24ndCBhbHJl
 YWR5IGFjdGl2ZS4gKi8KK3N0YXRpYyBpbnQgbmJzZF90aHJlYWRfcHJlc2VudCA9IDA7CisKKy8q
 IG5ic2RfdGhyZWFkX2FjdGl2ZSBpbmRpY2F0ZXMgdGhhdCB0aHJlYWQgZGVidWdnaW5nIGlzIHVw
 IGFuZCBydW5uaW5nLCBhbmQKKyAgIGluIHBhcnRpY3VsYXIgdGhhdCBtYWluX3RhIGFuZCBtYWlu
 X3B0aWQgYXJlIHZhbGlkLiAqLworc3RhdGljIGludCBuYnNkX3RocmVhZF9hY3RpdmUgPSAwOwor
 CisKK3N0YXRpYyBwdGlkX3QgbWFpbl9wdGlkOyAgICAgICAgICAgICAgICAvKiBSZWFsIHByb2Nl
 c3MgSUQgKi8KKworc3RhdGljIHB0aWRfdCBjYWNoZWRfdGhyZWFkOworCitzdHJ1Y3QgdGFyZ2V0
 X29wcyBuYnNkX3RocmVhZF9vcHM7CitzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgKnRhcmdldF9i
 ZW5lYXRoOworCitzdHJ1Y3QgdGRfcHJvY19jYWxsYmFja3NfdCBuYnNkX3RocmVhZF9jYWxsYmFj
 a3M7CisKK3N0YXRpYyBpbnQgY2hpbGRfc3VwcHJlc3NfcnVuPTA7CisKK3N0YXRpYyBwdGlkX3Qg
 ZmluZF9hY3RpdmVfdGhyZWFkIFBBUkFNUyAoKHZvaWQpKTsKK3N0YXRpYyB2b2lkIG5ic2RfZmlu
 ZF9uZXdfdGhyZWFkcyBQQVJBTVMgKCh2b2lkKSk7CisKKyNkZWZpbmUgR0VUX1BJRChwdGlkKSAg
 ICAgICAgICAgcHRpZF9nZXRfcGlkIChwdGlkKQorI2RlZmluZSBHRVRfTFdQKHB0aWQpICAgICAg
 ICAgICBwdGlkX2dldF9sd3AgKHB0aWQpCisjZGVmaW5lIEdFVF9USFJFQUQocHRpZCkgICAgICAg
 IHB0aWRfZ2V0X3RpZCAocHRpZCkKKworI2RlZmluZSBJU19MV1AocHRpZCkgICAgICAgICAgICAo
 R0VUX0xXUCAocHRpZCkgIT0gMCkKKyNkZWZpbmUgSVNfVEhSRUFEKHB0aWQpICAgICAgICAgKEdF
 VF9USFJFQUQgKHB0aWQpICE9IDApCisKKyNkZWZpbmUgQlVJTERfTFdQKGx3cCwgcHRpZCkgICAg
 cHRpZF9idWlsZCAoR0VUX1BJRChwdGlkKSwgbHdwLCAwKQorI2RlZmluZSBCVUlMRF9USFJFQUQo
 dGlkLCBwdGlkKSBwdGlkX2J1aWxkIChHRVRfUElEKHB0aWQpLCAwLCB0aWQpCisKK3N0YXRpYyB0
 ZF9wcm9jX3QgKm1haW5fdGE7CisKK3N0cnVjdCBzdHJpbmdfbWFwCisgIHsKKyAgICBpbnQgbnVt
 OworICAgIGNoYXIgKnN0cjsKKyAgfTsKKworc3RhdGljIGNoYXIgKgordGRfZXJyX3N0cmluZyAo
 aW50IGVycmNvZGUpCit7CisgIHN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX21hcAorICAgIHRkX2Vycl90
 YWJsZVtdID0KKyAgeworICAgIHtURF9FUlJfT0ssICJnZW5lcmljIFwiY2FsbCBzdWNjZWVkZWRc
 IiJ9LAorICAgIHtURF9FUlJfRVJSLCAiZ2VuZXJpYyBlcnJvci4ifSwKKyAgICB7VERfRVJSX05P
 U1lNLCAic3ltYm9sIG5vdCBmb3VuZCJ9LAorICAgIHtURF9FUlJfTk9PQkosICJubyBvYmplY3Qg
 Y2FuIGJlIGZvdW5kIHRvIHNhdGlzZnkgcXVlcnkifSwKKyAgICB7VERfRVJSX0JBRFRIUkVBRCwg
 InRocmVhZCBjYW4gbm90IGFuc3dlciByZXF1ZXN0In0sCisgICAge1REX0VSUl9JTlVTRSwgImRl
 YnVnZ2luZyBpbnRlcmZhY2UgYWxyZWFkeSBpbiB1c2UgZm9yIHRoaXMgcHJvY2VzcyJ9LAorICAg
 IHtURF9FUlJfTk9MSUIsICJwcm9jZXNzIGlzIG5vdCB1c2luZyBsaWJwdGhyZWFkIn0sCisgICAg
 e1REX0VSUl9OT01FTSwgIm91dCBvZiBtZW1vcnkifSwKKyAgICB7VERfRVJSX0lPLCAicHJvY2Vz
 cyBjYWxsYmFjayBlcnJvciJ9LAorICAgIHtURF9FUlJfSU5WQUwsICJpbnZhbGlkIGFyZ3VtZW50
 In0sCisgIH07CisgIGNvbnN0IGludCB0ZF9lcnJfc2l6ZSA9IHNpemVvZiB0ZF9lcnJfdGFibGUg
 LyBzaXplb2YgKHN0cnVjdCBzdHJpbmdfbWFwKTsKKyAgaW50IGk7CisgIHN0YXRpYyBjaGFyIGJ1
 Zls5MF07CisKKyAgZm9yIChpID0gMDsgaSA8IHRkX2Vycl9zaXplOyBpKyspCisgICAgaWYgKHRk
 X2Vycl90YWJsZVtpXS5udW0gPT0gZXJyY29kZSkKKyAgICAgIHJldHVybiB0ZF9lcnJfdGFibGVb
 aV0uc3RyOworCisgIHNwcmludGYgKGJ1ZiwgIlVua25vd24gdGhyZWFkX2RiIGVycm9yIGNvZGU6
 ICVkIiwgZXJyY29kZSk7CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqcnBvcGFsaW46Cisg
 KnVzZSB0YXJnZXRfYmVuZWF0aCBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWRfY2hpbGRfb3BzCisgKi8K
 K3ZvaWQKK25ic2RfdGhyZWFkX2luaXQgKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQpCit7Cisg
 IHRhcmdldF9iZW5lYXRoID0gdGFyZ2V0OworfQorCitzdGF0aWMgdm9pZAorbmJzZF90aHJlYWRf
 YWN0aXZhdGUgKHZvaWQpCit7CisgIG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDE7CisgIG1haW5fcHRp
 ZCA9IGluZmVyaW9yX3B0aWQ7CisgIGNhY2hlZF90aHJlYWQgPSBtaW51c19vbmVfcHRpZDsKKyAg
 bmJzZF9maW5kX25ld190aHJlYWRzICgpOworICBpbmZlcmlvcl9wdGlkID0gZmluZF9hY3RpdmVf
 dGhyZWFkICgpOworfQorCitzdGF0aWMgdm9pZAorbmJzZF90aHJlYWRfZGVhY3RpdmF0ZSAodm9p
 ZCkKK3sKKyAgdGRfY2xvc2UgKG1haW5fdGEpOworCisgIGluZmVyaW9yX3B0aWQgPSBtYWluX3B0
 aWQ7CisgIG1haW5fcHRpZCA9IG1pbnVzX29uZV9wdGlkOworICBjYWNoZWRfdGhyZWFkID0gbWFp
 bl9wdGlkOworICBuYnNkX3RocmVhZF9hY3RpdmUgPSAwOworICBuYnNkX3RocmVhZF9wcmVzZW50
 ID0gMDsKKyAgaW5pdF90aHJlYWRfbGlzdCAoKTsKK30KKworc3RhdGljIHZvaWQKK25ic2RfdGhy
 ZWFkX2F0dGFjaCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworCisgIGlmIChuYnNkX3Ro
 cmVhZF9wcmVzZW50ICYmICFuYnNkX3RocmVhZF9hY3RpdmUpCisgICAgcHVzaF90YXJnZXQoJm5i
 c2RfdGhyZWFkX29wcyk7CisKKyAgdGFyZ2V0X2JlbmVhdGgtPnRvX2F0dGFjaCAoYXJncywgZnJv
 bV90dHkpOworCisgIC8qIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGFjdGl2YXRlLCBidXQg
 aXNuJ3QuIExldCBpdCBoYXBwZW4gaW4KKyAgICAgbmJzZF90aHJlYWRfcG9zdF9hdHRhY2goKSwg
 YWZ0ZXIgYSB3YWl0IGhhcyBvY2N1cnJlZC4gKi8KK30KKworc3RhdGljIHZvaWQKK25ic2RfdGhy
 ZWFkX3Bvc3RfYXR0YWNoIChpbnQgcGlkKQoreworICB0YXJnZXRfYmVuZWF0aC0+dG9fcG9zdF9h
 dHRhY2ggKHBpZCk7CisKKyAgaWYgKG5ic2RfdGhyZWFkX3ByZXNlbnQgJiYgIW5ic2RfdGhyZWFk
 X2FjdGl2ZSkKKyAgICBuYnNkX3RocmVhZF9hY3RpdmF0ZSAoKTsKK30KKworCisvKiBUYWtlIGEg
 cHJvZ3JhbSBwcmV2aW91c2x5IGF0dGFjaGVkIHRvIGFuZCBkZXRhY2hlcyBpdC4KKyAgIFRoZSBw
 cm9ncmFtIHJlc3VtZXMgZXhlY3V0aW9uIGFuZCB3aWxsIG5vIGxvbmdlciBzdG9wCisgICBvbiBz
 aWduYWxzLCBldGMuICBXZSdkIGJldHRlciBub3QgaGF2ZSBsZWZ0IGFueSBicmVha3BvaW50cwor
 ICAgaW4gdGhlIHByb2dyYW0gb3IgaXQnbGwgZGllIHdoZW4gaXQgaGl0cyBvbmUuICBGb3IgdGhp
 cworICAgdG8gd29yaywgaXQgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgdGhlIHByb2Nlc3MgdG8gaGF2
 ZSBiZWVuCisgICBwcmV2aW91c2x5IGF0dGFjaGVkLiAgSXQgKm1pZ2h0KiB3b3JrIGlmIHRoZSBw
 cm9ncmFtIHdhcworICAgc3RhcnRlZCB2aWEgdGhlIG5vcm1hbCBwdHJhY2UgKFBUUkFDRV9UUkFD
 RU1FKS4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9kZXRhY2ggKGNoYXIgKmFyZ3Ms
 IGludCBmcm9tX3R0eSkKK3sKKyAgbmJzZF90aHJlYWRfZGVhY3RpdmF0ZSAoKTsKKyAgdW5wdXNo
 X3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7CisgIC8qIE9yZGluYWlybHksIGdkYiBjYWNoZXMg
 c29saWIgaW5mb3JtYXRpb24sIGJ1dCB0aGlzIG1lYW5zIHRoYXQgaXQKKyAgICAgd29uJ3QgY2Fs
 bCB0aGUgbmV3X29iZmlsZSBob29rIG9uIGEgcmVhdHRhY2guIENsZWFyIHRoZSBzeW1ib2wgZmls
 ZQorICAgICBjYWNoZSBzbyB0aGF0IGF0dGFjaCAtPiBkZXRhY2ggLT4gYXR0YWNoIHdvcmtzLiAq
 LworICBjbGVhcl9zb2xpYigpOworICBzeW1ib2xfZmlsZV9jbGVhcigwKTsKKyAgdGFyZ2V0X2Jl
 bmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorc3RhdGljIGludCBuc3VzcDsK
 K3N0YXRpYyBpbnQgbnN1c3BhbGxvYzsKK3N0YXRpYyB0ZF90aHJlYWRfdCAqKnN1c3A7CisKK3N0
 YXRpYyBpbnQKK3RocmVhZF9yZXN1bWVfc3VzcGVuZF9jYiAodGRfdGhyZWFkX3QgKnRoLCB2b2lk
 ICphcmcpCit7CisgIGludCB2YWw7CisgIHB0aWRfdCAqcHQgPSBhcmc7CisgIHRkX3RocmVhZF9p
 bmZvX3QgdGk7CisKKyAgaWYgKHRkX3Rocl9pbmZvICh0aCwgJnRpKSAhPSAwKQorICAgICAgcmV0
 dXJuIC0xOworCisgIGlmICgodGkudGhyZWFkX2lkICE9IEdFVF9USFJFQUQgKCpwdCkpICYmCisg
 ICAgICAodGkudGhyZWFkX3R5cGUgPT0gVERfVFlQRV9VU0VSKSAmJgorICAgICAgKHRpLnRocmVh
 ZF9zdGF0ZSAhPSBURF9TVEFURV9TVVNQRU5ERUQpICYmCisgICAgICAodGkudGhyZWFkX3N0YXRl
 ICE9IFREX1NUQVRFX1pPTUJJRSkpCisgICAgeworICAgICAgdmFsID0gdGRfdGhyX3N1c3BlbmQo
 dGgpOworICAgICAgaWYgKHZhbCAhPSAwKQorICAgICAgICBlcnJvciAoInRocmVhZF9yZXN1bWVf
 c3VzcGVuZF9jYjogdGRfdGhyX3N1c3BlbmQoJXApOiAlcyIsIHRoLAorICAgICAgICAgICAgICAg
 dGRfZXJyX3N0cmluZyAodmFsKSk7CisKKyAgICAgIGlmIChuc3VzcCA9PSBuc3VzcGFsbG9jKQor
 ICAgICAgICB7CisgICAgICAgICAgaWYgKG5zdXNwYWxsb2MgPT0gMCkKKyAgICAgICAgICAgIHsK
 KyAgICAgICAgICAgICAgbnN1c3BhbGxvYyA9IDMyOworICAgICAgICAgICAgICBzdXNwID0gbWFs
 bG9jIChuc3VzcGFsbG9jICogc2l6ZW9mKHRkX3RocmVhZF90ICopKTsKKyAgICAgICAgICAgICAg
 aWYgKHN1c3AgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBlcnJvciAoInRocmVhZF9yZXN1bWVf
 c3VzcGVuZF9jYjogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
 ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGF0aWMgdGRfdGhyZWFkX3QgKipu
 ZXdzdXNwOworICAgICAgICAgICAgICBuc3VzcGFsbG9jICo9IDI7CisgICAgICAgICAgICAgIG5l
 d3N1c3AgPSByZWFsbG9jIChzdXNwLCBuc3VzcGFsbG9jICogc2l6ZW9mKHRkX3RocmVhZF90ICop
 KTsKKyAgICAgICAgICAgICAgaWYgKG5ld3N1c3AgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBl
 cnJvciAoInRocmVhZF9yZXN1bWVfc3VzcGVuZF9jYjogb3V0IG9mIG1lbW9yeVxuIik7CisgICAg
 ICAgICAgICAgIHN1c3AgPSBuZXdzdXNwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
 ICBzdXNwW25zdXNwXSA9IHRoOworICAgICAgbnN1c3ArKzsKKyAgICB9CisKKyAgcmV0dXJuIDA7
 Cit9CisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQg
 c3RlcCwgZW51bSB0YXJnZXRfc2lnbmFsIHNpZ25vKQoreworICAvKiBJZiBhIHBhcnRpY3VsYXIg
 dGhyZWFkIGlzIHNwZWNpZmllZCwgdGhlbiBnZGIgd2FudHMgdG8gcmVzdW1lIG9yCisgICAgIHN0
 ZXAganVzdCB0aGF0IHRocmVhZC4gSWYgaXQgaXNuJ3Qgb24gYSBwcm9jZXNzb3IsIHRoZW4gaXQg
 bmVlZHMKKyAgICAgdG8gYmUgcHV0IG9uIG9uZSwgYW5kIG5vdGhpbmcgZWxzZSBjYW4gYmUgb24g
 dGhlIHJ1bm5hYmxlIGxpc3QuCisgICAgIFhYWCBJZiBHREIgYXNrcyB1cyB0byBzdGVwIGEgTFdQ
 IHJhdGhlciB0aGFuIGEgdGhyZWFkLCB0aGVyZQorICAgICBpc24ndCBhbnl0aGluZyB3ZSBjYW4g
 ZG8gYnV0IHBhc3MgaXQgZG93biB0byB0aGUgcHRyYWNlIGNhbGw7CisgICAgIGdpdmVuIHRoZSBm
 bGV4aWJpbGl0eSBvZiB0aGUgTFdQLXRvLXRocmVhZCBtYXBwaW5nLCB0aGlzIG1pZ2h0IG9yCisg
 ICAgIG1pZ2h0IG5vdCBhY2NvbXBsaXNoIHdoYXQgdGhlIHVzZXIgd2FudGVkLiAqLworICAgICAg
 CisvKnJwb3BhbGluOiBmbGF3ZWQgcGVyLXRocmVhZCBzdXNwZW5kLXJlc3VtZSovCisjaWYgMAor
 ICBpZiAoR0VUX1BJRCAocHRpZCkgIT0gLTEgJiYgSVNfVEhSRUFEIChwdGlkKSkKKyAgICB7Cisg
 ICAgICBpbnQgdmFsOworCXZhbCA9IHRkX3Rocl9pdGVyIChtYWluX3RhLCB0aHJlYWRfcmVzdW1l
 X3N1c3BlbmRfY2IsICZwdGlkKTsKKyAgICAgIGlmICh2YWwgIT0gMCkKKyAgICAgICAgZXJyb3Ig
 KCJuYnNkX3RocmVhZF9yZXN1bWUgdGRfdGhyX2l0ZXI6ICVzIiwgdGRfZXJyX3N0cmluZyAodmFs
 KSk7CisKKyAgICAgICAgdGFyZ2V0X2JlbmVhdGgtPnRvX3Jlc3VtZSAocHRpZCwgc3RlcCwgc2ln
 bm8pOworCisgICAgICAvKiBjYW4ndCB1bi1zdXNwZW5kIGp1c3QgeWV0LCBjaGlsZCBtYXkgbm90
 IGJlIHN0b3BwZWQgKi8KKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgdGFyZ2V0X2JlbmVhdGgt
 PnRvX3Jlc3VtZSAocHRpZCwgc3RlcCwgc2lnbm8pOworCisgIGNhY2hlZF90aHJlYWQgPSBtaW51
 c19vbmVfcHRpZDsKK30KKworCitzdGF0aWMgdm9pZAorbmJzZF90aHJlYWRfdW5zdXNwZW5kKHZv
 aWQpCit7CisgIGludCBpLCB2YWw7CisKKyAgZm9yIChpID0gMDsgaSA8IG5zdXNwOyBpKyspCisg
 ICAgeworICAgICAgdmFsID0gdGRfdGhyX3Jlc3VtZShzdXNwW2ldKTsKKyAgICAgIGlmICh2YWwg
 IT0gMCkKKyAgICAgICAgZXJyb3IgKCJuYnNkX3RocmVhZF91bnN1c3BlbmQ6IHRkX3Rocl9yZXN1
 bWUoJXApOiAlcyIsIHN1c3BbaV0sCisgICAgICAgICAgICAgICB0ZF9lcnJfc3RyaW5nICh2YWwp
 KTsKKyAgICB9CisgIG5zdXNwID0gMDsKK30KKworc3RhdGljIHB0aWRfdAorZmluZF9hY3RpdmVf
 dGhyZWFkICh2b2lkKQoreworICBpbnQgdmFsOworICB0ZF90aHJlYWRfdCAqdGhyZWFkOworICB0
 ZF90aHJlYWRfaW5mb190IHRpOworICB0ZF90aHJlYWRfdCAqdGhyZWFkcDsKKyAgc3RydWN0IHB0
 cmFjZV9sd3BpbmZvIHBsOworCisgIGlmICghcHRpZF9lcXVhbCAoY2FjaGVkX3RocmVhZCwgbWlu
 dXNfb25lX3B0aWQpKQorICAgIHJldHVybiBjYWNoZWRfdGhyZWFkOworCisgICAgICBwbC5wbF9s
 d3BpZCA9IDA7CisgICAgICB2YWwgPSBwdHJhY2UgKFBUX0xXUElORk8sIEdFVF9QSUQoaW5mZXJp
 b3JfcHRpZCksICh2b2lkICopJnBsLCBzaXplb2YocGwpKTsKKyAgICAgIHdoaWxlICgodmFsICE9
 IC0xKSAmJiAocGwucGxfbHdwaWQgIT0gMCkgJiYKKyAgICAgICAgICAgICAocGwucGxfZXZlbnQg
 IT0gUExfRVZFTlRfU0lHTkFMKSkKKyAgICAgICAgdmFsID0gcHRyYWNlIChQVF9MV1BJTkZPLCBH
 RVRfUElEKGluZmVyaW9yX3B0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSk7CisKKy8qCisg
 KnJwb3BhbGluOgorICpvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBkaWRuJ3Qgc2hvdyB0aGUgY29y
 cmVjdAorICpjdXJyZW50IHRocmVhZCBiZWNhdXNlIG9mIHRoaXM7IGZpeCBpdCBieSBidWlsZGlu
 ZyAKKyAqYSBwdGlkIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdGhyZWFkIGlkIAorICovCisKKyAg
 aWYgKHRkX21hcF9sd3AydGhyIChtYWluX3RhLCBwbC5wbF9sd3BpZCwgJnRocmVhZHApID09IDAp
 CisgICAgIGlmICh0ZF90aHJfaW5mbyAodGhyZWFkcCwgJnRpKSA9PSAwKQorICAgICAgICByZXR1
 cm4gKGNhY2hlZF90aHJlYWQgPSBCVUlMRF9USFJFQUQgKHRpLnRocmVhZF9pZCwgaW5mZXJpb3Jf
 cHRpZCkpOworCisgIHJldHVybiBjYWNoZWRfdGhyZWFkID0gQlVJTERfTFdQIChwbC5wbF9sd3Bp
 ZCwgbWFpbl9wdGlkKTsKK30KKworCisvKiBXYWl0IGZvciBhbnkgdGhyZWFkcyB0byBzdG9wLiAg
 V2UgbWF5IGhhdmUgdG8gY29udmVydCBQSUQgZnJvbSBhIHRocmVhZCBpZAorICAgdG8gYSBMV1Ag
 aWQsIGFuZCB2aWNlIHZlcnNhIG9uIHRoZSB3YXkgb3V0LiAgKi8KK3N0YXRpYyBwdGlkX3QKK25i
 c2RfdGhyZWFkX3dhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91
 cnN0YXR1cykKK3sKKyAgcHRpZF90IHJ0bnZhbDsKKyAgcnRudmFsID0gdGFyZ2V0X2JlbmVhdGgt
 PnRvX3dhaXQgKHB0aWQsIG91cnN0YXR1cyk7CisvKnJwb3BhbGluOiBubyBuZWVkIGZvciBub3cq
 LworIC8vIG5ic2RfdGhyZWFkX3Vuc3VzcGVuZCgpOworCisgIGlmIChuYnNkX3RocmVhZF9hY3Rp
 dmUgJiYgKG91cnN0YXR1cy0+a2luZCAhPSBUQVJHRVRfV0FJVEtJTkRfRVhJVEVEKSkKKyAgICB7
 CisgICAgICBydG52YWwgPSBmaW5kX2FjdGl2ZV90aHJlYWQgKCk7CisgICAgICBpZiAocHRpZF9l
 cXVhbCAocnRudmFsLCBtaW51c19vbmVfcHRpZCkpCisgICAgICAgIGVycm9yICgiTm8gYWN0aXZl
 IHRocmVhZCFcbiIpOworICAgICAgaWYgKCFpbl90aHJlYWRfbGlzdCAocnRudmFsKSkKKyAgICAg
 ICAgYWRkX3RocmVhZCAocnRudmFsKTsKKyAgICB9CisgIHJldHVybiBydG52YWw7Cit9Cit2b2lk
 CituYnNkX3RocmVhZF9mZXRjaF9yZWdpc3RlcnMgKGludCByZWdubykKK3sKKyAgdGRfdGhyZWFk
 X3QgKnRocmVhZDsKKyAgZ3JlZ3NldF90IGdyZWdzOworICBmcHJlZ3NldF90IGZwcmVnczsKKyAg
 aW50IHZhbDsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAgb2xkX2NoYWluID0gc2F2
 ZV9pbmZlcmlvcl9wdGlkICgpOworCisgIGlmIChuYnNkX3RocmVhZF9hY3RpdmUgJiYgSVNfVEhS
 RUFEIChpbmZlcmlvcl9wdGlkKSkKKyAgICB7CisgICAgICBpZiAoKHZhbCA9IHRkX21hcF9pZDJ0
 aHIgKG1haW5fdGEsIEdFVF9USFJFQUQgKGluZmVyaW9yX3B0aWQpLCAmdGhyZWFkKSkgIT0gMCkK
 KyAgICAgICAgZXJyb3IgKCJuYnNkX3RocmVhZF9mZXRjaF9yZWdpc3RlcnM6IHRkX21hcF9pZDJ0
 aHI6ICVzXG4iLAorICAgICAgICAgICAgICAgdGRfZXJyX3N0cmluZyAodmFsKSk7CisgICAgICBp
 ZiAoKHZhbCA9IHRkX3Rocl9nZXRyZWdzICh0aHJlYWQsIDAsICZncmVncykpICE9IDApCisgICAg
 ICAgIGVycm9yICgibmJzZF90aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOiB0ZF90aHJfZ2V0cmVnczog
 JXNcbiIsCisgICAgICAgICAgICAgICB0ZF9lcnJfc3RyaW5nICh2YWwpKTsKKwlzdXBwbHlfZ3Jl
 Z3NldCAoJmdyZWdzKTsKKyAgICAgIGlmICgodmFsID0gdGRfdGhyX2dldHJlZ3MgKHRocmVhZCwg
 MSwgJmZwcmVncykpID09IDApOworCSAgICAgIHN1cHBseV9mcHJlZ3NldCAoJmZwcmVncyk7CisK
 KyAgICB9CisgIGVsc2UKKyAgICAgICAgdGFyZ2V0X2JlbmVhdGgtPnRvX2ZldGNoX3JlZ2lzdGVy
 cyAocmVnbm8pOworCisgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworfQorCit2b2lkCituYnNk
 X3RocmVhZF9zdG9yZV9yZWdpc3RlcnMgKGludCByZWdubykKK3sKKyAgdGRfdGhyZWFkX3QgKnRo
 cmVhZDsKKyAgZ3JlZ3NldF90IGdyZWdzOworICBmcHJlZ3NldF90IGZwcmVnczsKKyAgaW50IHZh
 bDsKKworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlICYmIElTX1RIUkVBRCAoaW5mZXJpb3JfcHRp
 ZCkpCisgICAgeworICAgICAgdmFsID0gdGRfbWFwX2lkMnRociAobWFpbl90YSwgR0VUX1RIUkVB
 RCAoaW5mZXJpb3JfcHRpZCksICZ0aHJlYWQpOworICAgICAgaWYgKHZhbCAhPSAwKQorICAgICAg
 ICBlcnJvciAoIm5ic2RfdGhyZWFkX3N0b3JlX3JlZ2lzdGVyczogdGRfbWFwX2lkMnRocjogJXNc
 biIsCisgICAgICAgICAgICAgIHRkX2Vycl9zdHJpbmcgKHZhbCkpOworCisgICAgIGZpbGxfZ3Jl
 Z3NldCAoJmdyZWdzLCAtMSk7CisgICAgIGZpbGxfZnByZWdzZXQgKCZmcHJlZ3MsIC0xKTsKKwor
 CisgICAgICB2YWwgPSB0ZF90aHJfc2V0cmVncyAodGhyZWFkLCAwLCAmZ3JlZ3MpOworICAgICAg
 aWYgKHZhbCAhPSAwKQorICAgICAgICBlcnJvciAoIm5ic2RfdGhyZWFkX3N0b3JlX3JlZ2lzdGVy
 czogdGRfdGhyX3NldHJlZ3M6ICVzXG4iLAorICAgICAgICAgICAgICB0ZF9lcnJfc3RyaW5nICh2
 YWwpKTsKKyAgICAgIHZhbCA9IHRkX3Rocl9zZXRyZWdzICh0aHJlYWQsIDEsICZmcHJlZ3MpOwor
 ICAgICAgaWYgKHZhbCAhPSAwKQorICAgICAgICBlcnJvciAoIm5ic2RfdGhyZWFkX3N0b3JlX3Jl
 Z2lzdGVyczogdGRfdGhyX3NldHJlZ3M6ICVzXG4iLAorICAgICAgICAgICAgICB0ZF9lcnJfc3Ry
 aW5nICh2YWwpKTsKKyAgICB9CisgIGVsc2UKKyAgICAgICAgdGFyZ2V0X2JlbmVhdGgtPnRvX3N0
 b3JlX3JlZ2lzdGVycyAocmVnbm8pOworfQorCisvKgorICpycG9wYWxpbjoKKyAqbmV3IGdkYiBh
 cmNoaXRlY3R1cmUgbmVlZHMgdG9feGZlcl9wYXJ0aWFsCisgKi8KK3N0YXRpYyBMT05HRVNUCitu
 YnNkX3hmZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgZW51bSB0YXJnZXRfb2Jq
 ZWN0IG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFubmV4LCBn
 ZGJfYnl0ZSAqcmVhZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdkYl9ieXRl
 ICp3cml0ZWJ1ZiwgVUxPTkdFU1Qgb2Zmc2V0LCBMT05HRVNUIGxlbikKK3sKKworICByZXR1cm4g
 dGFyZ2V0X2JlbmVhdGgtPnRvX3hmZXJfcGFydGlhbCAob3BzLCBvYmplY3QsIGFubmV4LAorICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGJ1Ziwgd3JpdGVidWYs
 IG9mZnNldCwgbGVuKTsKKworfQorCisvKiBDbGVhbiB1cCBhZnRlciB0aGUgaW5mZXJpb3IgZGll
 cy4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9tb3Vybl9pbmZlcmlvciAodm9pZCkK
 K3sKKworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQorICAgIG5ic2RfdGhyZWFkX2RlYWN0aXZh
 dGUgKCk7CisKKyAgdW5wdXNoX3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7CisgIHRhcmdldF9i
 ZW5lYXRoLT50b19tb3Vybl9pbmZlcmlvciAoKTsKKworfQorCisKKworLyogQ29udmVydCBhIHB0
 aWQgdG8gcHJpbnRhYmxlIGZvcm0uICovCisKK2NoYXIgKgorbmJzZF9waWRfdG9fc3RyIChwdGlk
 X3QgcHRpZCkKK3sKKyAgc3RhdGljIGNoYXIgYnVmWzEwMF07CisgIHRkX3RocmVhZF90ICp0aDsK
 KyAgY2hhciBuYW1lWzMyXTsKKyAgaWYgKChHRVRfVEhSRUFEKHB0aWQpID09IDApICYmCisgICAg
 ICAoR0VUX0xXUChwdGlkKSA9PSAwKSAmJgorICAgICAgKG5ic2RfdGhyZWFkX2FjdGl2ZSA9PSAw
 KSkKKyAgICBzcHJpbnRmIChidWYsICJwcm9jZXNzICVkIiwgR0VUX1BJRCAocHRpZCkpOworICBl
 bHNlIGlmIChJU19USFJFQUQgKHB0aWQpKQorICAgIHsKKyAgICAgIGlmICgodGRfbWFwX2lkMnRo
 ciAobWFpbl90YSwgR0VUX1RIUkVBRCAocHRpZCksICZ0aCkgPT0gMCkgJiYKKyAgICAgICAgICAo
 dGRfdGhyX2dldG5hbWUgKHRoLCBuYW1lLCAzMikgPT0gMCkpCisgICAgICAgIHNwcmludGYgKGJ1
 ZiwgIlRocmVhZCAlbGQgKCVzKSIsIEdFVF9USFJFQUQgKHB0aWQpLCBuYW1lKTsKKyAgICAgIGVs
 c2UKKyAgICAgICAgc3ByaW50ZiAoYnVmLCAiVGhyZWFkICVsZCIsIEdFVF9USFJFQUQgKHB0aWQp
 KTsKKyAgICB9CisgIGVsc2UKKyAgaWYgKHRhcmdldF9iZW5lYXRoLT50b19waWRfdG9fc3RyIChw
 dGlkKSkKKyAgICAgIHJldHVybiB0YXJnZXRfYmVuZWF0aC0+dG9fcGlkX3RvX3N0ciAocHRpZCk7
 CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworLyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZl
 ciBhIG5ldyBzeW1ib2wgdGFibGUgaXMgcmVhZCBpbiwgb3Igd2hlbiBhbGwKKyAgIHN5bWJvbCB0
 YWJsZXMgYXJlIHJlbW92ZWQuICBsaWJ0aHJlYWRfZGIgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQg
 d2hlbiBpdAorICAgZmluZHMgdGhlIHJpZ2h0IHZhcmlhYmxlcyBpbiBsaWJ0aHJlYWQuc28uICBT
 aW5jZSBpdCdzIGEgc2hhcmVkIGxpYnJhcnksCisgICB0aG9zZSB2YXJpYWJsZXMgZG9uJ3Qgc2hv
 dyB1cCB1bnRpbCB0aGUgbGlicmFyeSBnZXRzIG1hcHBlZCBhbmQgdGhlIHN5bWJvbAorICAgdGFi
 bGUgaXMgcmVhZCBpbi4gICovCisKKy8qIFRoaXMgbmV3X29iamZpbGUgZXZlbnQgaXMgbm93IG1h
 bmFnZWQgYnkgYSBjaGFpbmVkIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBJdCBpcyB0aGUgY2FsbGVl
 J3MgcmVzcG9uc2FiaWxpdHkgdG8gY2FsbCB0aGUgbmV4dCBjbGllbnQgb24gdGhlIGNoYWluLgor
 ICovCisKKy8qIFNhdmVkIHBvaW50ZXIgdG8gcHJldmlvdXMgb3duZXIgb2YgdGhlIG5ld19vYmpm
 aWxlIGV2ZW50LiAqLworc3RhdGljIHZvaWQgKCp0YXJnZXRfbmV3X29iamZpbGVfY2hhaW4pIFBB
 UkFNUyAoKHN0cnVjdCBvYmpmaWxlICopKTsKKwordm9pZAorbmJzZF90aHJlYWRfbmV3X29iamZp
 bGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQoreworICBpbnQgdmFsOworCisgIGlmICghb2Jq
 ZmlsZSkKKyAgICB7CisgICAgICBuYnNkX3RocmVhZF9hY3RpdmUgPSAwOworICAgICAgZ290byBx
 dWl0OworICAgIH0KKworICAvKiBkb24ndCBkbyBhbnl0aGluZyBpZiBpbml0IGZhaWxlZCAqLwor
 ICBpZiAoIWNoaWxkX3N1cHByZXNzX3J1bikKKyAgICBnb3RvIHF1aXQ7CisKKyAgLyogRG9uJ3Qg
 ZG8gYW55dGhpbmcgaWYgd2UndmUgYWxyZWFkeSBmaXJlZCB1cCB0aGUgZGVidWdnaW5nIGxpYnJh
 cnkgKi8KKyAgaWYgKG5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICBnb3RvIHF1aXQ7CisKKyAgLyog
 Tm93LCBpbml0aWFsaXplIHRoZSB0aHJlYWQgZGVidWdnaW5nIGxpYnJhcnkuICBUaGlzIG5lZWRz
 IHRvIGJlCisgICAgIGRvbmUgYWZ0ZXIgdGhlIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvY2F0ZWQg
 YmVjYXVzZSBpdCBuZWVkcworICAgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyJ3MgdGhyZWFk
 IGxpYnJhcnkuICAqLworICB2YWwgPSB0ZF9vcGVuICgmbmJzZF90aHJlYWRfY2FsbGJhY2tzLCBO
 VUxMLCAmbWFpbl90YSk7CisgIGlmICh2YWwgPT0gVERfRVJSX05PTElCKQorICAgIGdvdG8gcXVp
 dDsKKyAgZWxzZSBpZiAodmFsICE9IDApCisgICAgeworICAgICAgd2FybmluZyAoIm5ic2RfdGhy
 ZWFkX25ld19vYmpmaWxlOiB0ZF9vcGVuOiAlcyIsIHRkX2Vycl9zdHJpbmcgKHZhbCkpOworICAg
 ICAgZ290byBxdWl0OworICAgIH0KKworICBuYnNkX3RocmVhZF9wcmVzZW50ID0gMTsKKworICBp
 ZiAoIXB0aWRfZXF1YWwgKGluZmVyaW9yX3B0aWQsIG51bGxfcHRpZCkpCisgICAgeworICAgICAg
 cHVzaF90YXJnZXQgKCZuYnNkX3RocmVhZF9vcHMpOworICAgICAgbmJzZF90aHJlYWRfYWN0aXZh
 dGUoKTsKKyAgICB9CisKKyBxdWl0OgorICAvKiBDYWxsIHByZWRlY2Vzc29yIG9uIGNoYWluLCBp
 ZiBhbnkuICovCisgIGlmICh0YXJnZXRfbmV3X29iamZpbGVfY2hhaW4pCisgICAgdGFyZ2V0X25l
 d19vYmpmaWxlX2NoYWluIChvYmpmaWxlKTsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRf
 YWxpdmUgKHB0aWRfdCBwdGlkKQoreworICB0ZF90aHJlYWRfdCAqdGg7CisgIHRkX3RocmVhZF9p
 bmZvX3QgdGk7CisKKyAgaWYgKG5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICB7CisgICAgICBpZiAo
 SVNfVEhSRUFEIChwdGlkKSkKKyAgICAgICAgeworICAgICAgICAgIGlmICh0ZF9tYXBfaWQydGhy
 IChtYWluX3RhLCBHRVRfVEhSRUFEIChwdGlkKSwgJnRoKSA9PSAwKQorICAgICAgICAgICAgewor
 ICAgICAgICAgICAgICAvKiBUaHJlYWQgZm91bmQgKi8KKyAgICAgICAgICAgICAgaWYgKCh0ZF90
 aHJfaW5mbyAodGgsICZ0aSkgPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICh0aS50aHJlYWRf
 c3RhdGUgIT0gVERfU1RBVEVfWk9NQklFKSAmJgorICAgICAgICAgICAgICAgICAgKHRpLnRocmVh
 ZF90eXBlICE9IFREX1RZUEVfU1lTVEVNKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
 ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoSVNfTFdQIChwdGlkKSkKKyAg
 ICAgICAgeworICAgICAgICAgIHN0cnVjdCBwdHJhY2VfbHdwaW5mbyBwbDsKKyAgICAgICAgICBw
 bC5wbF9sd3BpZCA9IEdFVF9MV1AgKHB0aWQpOworICAgICAgICAgIGlmIChwdHJhY2UgKFBUX0xX
 UElORk8sIEdFVF9QSUQgKHB0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSkgPT0gLTEpCisg
 ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
 MTsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAodGFyZ2V0X2JlbmVhdGgtPnRvX3RocmVhZF9h
 bGl2ZSkKKyAgICByZXR1cm4gdGFyZ2V0X2JlbmVhdGgtPnRvX3RocmVhZF9hbGl2ZShwdGlkKTsK
 KyAgcmV0dXJuIDA7CisKK30KKworCisvKiBXb3JrZXIgYmVlIGZvciBmaW5kX25ld190aHJlYWRz
 CisgICBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIG9uY2UgcGVyIFVTRVIgdGhy
 ZWFkIChpLmUuLCBub3QKKyAgIGtlcm5lbCkgdGhyZWFkLiAqLworCitzdGF0aWMgaW50CituYnNk
 X2ZpbmRfbmV3X3RocmVhZHNfY2FsbGJhY2sgKHRkX3RocmVhZF90ICp0aCwgdm9pZCAqaWdub3Jl
 ZCkKK3sKKyAgdGRfdGhyZWFkX2luZm9fdCB0aTsKKyAgcHRpZF90IHB0aWQ7CisKKyAgaWYgKHRk
 X3Rocl9pbmZvICh0aCwgJnRpKSAhPSAwKQorICAgICAgcmV0dXJuIC0xOworCisgIHB0aWQgPSBC
 VUlMRF9USFJFQUQgKHRpLnRocmVhZF9pZCwgbWFpbl9wdGlkKTsKKyAgaWYgKHRpLnRocmVhZF90
 eXBlID09IFREX1RZUEVfVVNFUiAmJgorICAgICAgdGkudGhyZWFkX3N0YXRlICE9IFREX1NUQVRF
 X0JMT0NLRUQgJiYKKyAgICAgIHRpLnRocmVhZF9zdGF0ZSAhPSBURF9TVEFURV9aT01CSUUgJiYK
 KyAgICAgICFpbl90aHJlYWRfbGlzdCAocHRpZCkpCisgICAgYWRkX3RocmVhZCAocHRpZCk7CisK
 KyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituYnNkX2ZpbmRfbmV3X3RocmVhZHMgKHZv
 aWQpCit7CisgIGludCByZXR2YWw7CisgIHB0aWRfdCBwdGlkOworICB0ZF90aHJlYWRfdCAqdGhy
 ZWFkOworICBzdHJ1Y3QgcHRyYWNlX2x3cGluZm8gcGw7CisKKyAgaWYgKG5ic2RfdGhyZWFkX2Fj
 dGl2ZSA9PSAwKQorICAgICAgICAgIHJldHVybjsKKworICAvKiBkb24ndCBkbyBhbnl0aGluZyBp
 ZiBpbml0IGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaWJ0aHJlYWRfZGIgbGlicmFyeSAqLworICBp
 ZiAoIWNoaWxkX3N1cHByZXNzX3J1bikKKyAgICByZXR1cm47CisKKyAgaWYgKHB0aWRfZXF1YWwg
 KGluZmVyaW9yX3B0aWQsIG1pbnVzX29uZV9wdGlkKSkKKyAgICB7CisgICAgICBwcmludGZfZmls
 dGVyZWQgKCJObyBwcm9jZXNzLlxuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisvKnJwb3Bh
 bGluOgorICp3ZSBuZWVkIHRvIGNsZWFuIHVwIHRocmVhZCBsaXN0IGhlcmUKKyAqLworCisgIGlu
 aXRfdGhyZWFkX2xpc3QgKCk7CisKKyAgcGwucGxfbHdwaWQgPSAwOworICByZXR2YWwgPSBwdHJh
 Y2UgKFBUX0xXUElORk8sIEdFVF9QSUQoaW5mZXJpb3JfcHRpZCksICh2b2lkICopJnBsLCBzaXpl
 b2YocGwpKTsKKyAgd2hpbGUgKChyZXR2YWwgIT0gLTEpICYmIHBsLnBsX2x3cGlkICE9IDApCisg
 ICAgICAgIHsKKyAgICAgICAgICBwdGlkID0gQlVJTERfTFdQIChwbC5wbF9sd3BpZCwgbWFpbl9w
 dGlkKTsKKyAgICAgICAgICB0ZF9tYXBfbHdwMnRociAobWFpbl90YSwgcGwucGxfbHdwaWQsICZ0
 aHJlYWQpOworICAgICAgICAgIGlmICghaW5fdGhyZWFkX2xpc3QgKHB0aWQpKQorICAgICAgICAg
 ICAgYWRkX3RocmVhZCAocHRpZCk7CisgICAgICAgICAgcmV0dmFsID0gcHRyYWNlIChQVF9MV1BJ
 TkZPLCBHRVRfUElEKGluZmVyaW9yX3B0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSk7Cisg
 ICAgICAgIH0KKyAgcmV0dmFsID0gdGRfdGhyX2l0ZXIgKG1haW5fdGEsIG5ic2RfZmluZF9uZXdf
 dGhyZWFkc19jYWxsYmFjaywgKHZvaWQgKikgMCk7CisgIGlmIChyZXR2YWwgIT0gMCkKKyAgICBl
 cnJvciAoIm5ic2RfZmluZF9uZXdfdGhyZWFkczogdGRfdGhyX2l0ZXI6ICVzIiwKKyAgICAgICAg
 ICAgdGRfZXJyX3N0cmluZyAocmV0dmFsKSk7Cit9CisKKworLyogRm9yayBhbiBpbmZlcmlvciBw
 cm9jZXNzLCBhbmQgc3RhcnQgZGVidWdnaW5nIGl0IHdpdGggL3Byb2MuICAqLworCitzdGF0aWMg
 dm9pZAorbmJzZF90aHJlYWRfY3JlYXRlX2luZmVyaW9yIChjaGFyICpleGVjX2ZpbGUsIGNoYXIg
 KmFsbGFyZ3MsIGNoYXIgKiplbnYsaW50IGZyb210dHkpCit7CisKKyAgaWYgKG5ic2RfdGhyZWFk
 X3ByZXNlbnQgJiYgIW5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICBwdXNoX3RhcmdldCgmbmJzZF90
 aHJlYWRfb3BzKTsKKworICB0YXJnZXRfYmVuZWF0aC0+dG9fY3JlYXRlX2luZmVyaW9yIChleGVj
 X2ZpbGUsIGFsbGFyZ3MsIGVudiwgZnJvbXR0eSk7CisKKyAgaWYgKG5ic2RfdGhyZWFkX3ByZXNl
 bnQgJiYgIW5ic2RfdGhyZWFkX2FjdGl2ZSkKKyAgICBuYnNkX3RocmVhZF9hY3RpdmF0ZSgpOwor
 fQorCisKK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Byb2NfcmVhZCAodm9pZCAqYXJnLCBjYWRk
 cl90IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisgIGludCB2YWw7CisKKyAgdmFs
 ID0gdGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKWFkZHIsIGJ1Ziwgc2l6ZSk7CisKKyAg
 aWYgKHZhbCA9PSAwKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIFREX0VSUl9J
 TzsKK30KKworCitzdGF0aWMgaW50CituYnNkX3RocmVhZF9wcm9jX3dyaXRlICh2b2lkICphcmcs
 IGNhZGRyX3QgYWRkciwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaW50IHZhbDsKKwor
 ICB2YWwgPSB0YXJnZXRfd3JpdGVfbWVtb3J5ICgoQ09SRV9BRERSKWFkZHIsIGJ1Ziwgc2l6ZSk7
 CisKKyAgaWYgKHZhbCA9PSAwKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIFRE
 X0VSUl9JTzsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfcHJvY19sb29rdXAgKHZvaWQg
 KmFyZywgY2hhciAqc3ltLCBjYWRkcl90ICphZGRyKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1i
 b2wgKm1zOworCisgIG1zID0gbG9va3VwX21pbmltYWxfc3ltYm9sIChzeW0sIE5VTEwsIE5VTEwp
 OworCisgIGlmICghbXMpCisgICAgcmV0dXJuIFREX0VSUl9OT1NZTTsKKworICAqYWRkciA9IChj
 YWRkcl90KSBTWU1CT0xfVkFMVUVfQUREUkVTUyAobXMpOworCisgIHJldHVybiAwOworCit9CisK
 K3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Byb2NfcmVnc2l6ZSAodm9pZCAqYXJnLCBpbnQgcmVn
 c2V0LCBzaXplX3QgKnNpemUpCit7CisgIHN3aXRjaCAocmVnc2V0KQorICAgIHsKKyAgICBjYXNl
 IDA6CisgICAgICAqc2l6ZSA9IHNpemVvZiAoZ3JlZ3NldF90KTsKKyAgICAgIGJyZWFrOworICAg
 IGNhc2UgMToKKyAgICAgICpzaXplID0gc2l6ZW9mIChmcHJlZ3NldF90KTsKKyAgICAgIGJyZWFr
 OworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gVERfRVJSX0lOVkFMOworICAgIH0KKworICBy
 ZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfcHJvY19nZXRyZWdzICh2b2lk
 ICphcmcsIGludCByZWdzZXQsIGludCBsd3AsIHZvaWQgKmJ1ZikKK3sKKyAgc3RydWN0IGNsZWFu
 dXAgKm9sZF9jaGFpbjsKKyAgaW50IHJldDsKKworICBvbGRfY2hhaW4gPSBzYXZlX2luZmVyaW9y
 X3B0aWQgKCk7CisKKyAgICAgIC8qIEZldGNoaW5nIHJlZ2lzdGVycyBmcm9tIGEgbGl2ZSBwcm9j
 ZXNzIHJlcXVpcmVzIHRoYXQKKyAgICAgICAgIGluZmVyaW9yX3B0aWQgaXMgYSBMV1AgdmFsdWUg
 cmF0aGVyIHRoYW4gYSB0aHJlYWQgdmFsdWUuICovCisgIGluZmVyaW9yX3B0aWQgPSBCVUlMRF9M
 V1AgKGx3cCwgbWFpbl9wdGlkKTsKKyAgdGFyZ2V0X2JlbmVhdGgtPnRvX2ZldGNoX3JlZ2lzdGVy
 cyAoLTEpOworCisgIHJldCA9IDA7CisgIHN3aXRjaCAocmVnc2V0KQorICAgIHsKKyAgICBjYXNl
 IDA6CisJZmlsbF9ncmVnc2V0ICgoZ3JlZ3NldF90ICopYnVmLCAtMSk7ICAgICAgCisJYnJlYWs7
 CisgICAgY2FzZSAxOgorICAgICAgICBmaWxsX2ZwcmVnc2V0ICgoZnByZWdzZXRfdCAqKWJ1Ziwg
 LTEpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogLyogWFhYIG5lZWQgdG8gaGFuZGxlIG90
 aGVyIHJlZyBzZXRzOiBTU0UsIEFsdGlWZWMsIGV0Yy4gKi8KKyAgICAgIHJldCA9IFREX0VSUl9J
 TlZBTDsKKyAgICB9CisKKyAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CisKKyAgcmV0dXJuIHJl
 dDsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfcHJvY19zZXRyZWdzICh2b2lkICphcmcs
 IGludCByZWdzZXQsIGludCBsd3AsIHZvaWQgKmJ1ZikKK3sKKyAgc3RydWN0IGNsZWFudXAgKm9s
 ZF9jaGFpbjsKKyAgaW50IHJldDsKKworICByZXQgPSAwOworICBvbGRfY2hhaW4gPSBzYXZlX2lu
 ZmVyaW9yX3B0aWQgKCk7CisKKyAgc3dpdGNoIChyZWdzZXQpCisgICAgeworICAgIGNhc2UgMDoK
 KyAgICAgIHN1cHBseV9ncmVnc2V0KChncmVnc2V0X3QgKilidWYpOworICAgICAgYnJlYWs7Cisg
 ICAgY2FzZSAxOgorICAgICAgc3VwcGx5X2ZwcmVnc2V0KChmcHJlZ3NldF90ICopYnVmKTsKKyAg
 ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IC8qIFhYWCBuZWVkIHRvIGhhbmRsZSBvdGhlciByZWcg
 c2V0czogU1NFLCBBbHRpVmVjLCBldGMuICovCisgICAgICByZXQgPSBURF9FUlJfSU5WQUw7Cisg
 ICAgfQorCisgIC8qIFN0b3JpbmcgcmVnaXN0ZXJzIHJlcXVpcmVzIHRoYXQgaW5mZXJpb3JfcHRp
 ZCBpcyBhIExXUCB2YWx1ZQorICAgICByYXRoZXIgdGhhbiBhIHRocmVhZCB2YWx1ZS4gKi8KKyAg
 aW5mZXJpb3JfcHRpZCA9IEJVSUxEX0xXUCAobHdwLCBtYWluX3B0aWQpOworICB0YXJnZXRfYmVu
 ZWF0aC0+dG9fc3RvcmVfcmVnaXN0ZXJzICgtMSk7CisgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4p
 OworCisgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQKK2luaXRfbmJzZF9wcm9jX2Nh
 bGxiYWNrcyAodm9pZCkKK3sKKyAgbmJzZF90aHJlYWRfY2FsbGJhY2tzLnByb2NfcmVhZCA9IG5i
 c2RfdGhyZWFkX3Byb2NfcmVhZDsKKyAgbmJzZF90aHJlYWRfY2FsbGJhY2tzLnByb2Nfd3JpdGUg
 PSBuYnNkX3RocmVhZF9wcm9jX3dyaXRlOworICBuYnNkX3RocmVhZF9jYWxsYmFja3MucHJvY19s
 b29rdXAgPSBuYnNkX3RocmVhZF9wcm9jX2xvb2t1cDsKKyAgbmJzZF90aHJlYWRfY2FsbGJhY2tz
 LnByb2NfcmVnc2l6ZSA9IG5ic2RfdGhyZWFkX3Byb2NfcmVnc2l6ZTsKKyAgbmJzZF90aHJlYWRf
 Y2FsbGJhY2tzLnByb2NfZ2V0cmVncyA9IG5ic2RfdGhyZWFkX3Byb2NfZ2V0cmVnczsKKyAgbmJz
 ZF90aHJlYWRfY2FsbGJhY2tzLnByb2Nfc2V0cmVncyA9IG5ic2RfdGhyZWFkX3Byb2Nfc2V0cmVn
 czsKK30KKworc3RhdGljIHZvaWQKK2luaXRfbmJzZF90aHJlYWRfb3BzICh2b2lkKQoreworICBu
 YnNkX3RocmVhZF9vcHMudG9fc2hvcnRuYW1lID0gIm5ldGJzZC10aHJlYWRzIjsKKyAgbmJzZF90
 aHJlYWRfb3BzLnRvX2xvbmduYW1lID0gIk5ldEJTRCBwdGhyZWFkLiI7CisgIG5ic2RfdGhyZWFk
 X29wcy50b19kb2MgPSAiTmV0QlNEIHB0aHJlYWQgc3VwcG9ydC4iOworICBuYnNkX3RocmVhZF9v
 cHMudG9fYXR0YWNoID0gbmJzZF90aHJlYWRfYXR0YWNoOworICBuYnNkX3RocmVhZF9vcHMudG9f
 ZGV0YWNoID0gbmJzZF90aHJlYWRfZGV0YWNoOworICBuYnNkX3RocmVhZF9vcHMudG9fbWFnaWMg
 PSBPUFNfTUFHSUM7CisgIG5ic2RfdGhyZWFkX29wcy50b19wb3N0X2F0dGFjaCA9IG5ic2RfdGhy
 ZWFkX3Bvc3RfYXR0YWNoOworICBuYnNkX3RocmVhZF9vcHMudG9fZmV0Y2hfcmVnaXN0ZXJzID0g
 bmJzZF90aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOworICBuYnNkX3RocmVhZF9vcHMudG9fc3RvcmVf
 cmVnaXN0ZXJzID0gbmJzZF90aHJlYWRfc3RvcmVfcmVnaXN0ZXJzOworICBuYnNkX3RocmVhZF9v
 cHMudG9feGZlcl9wYXJ0aWFsID0gbmJzZF94ZmVyX3BhcnRpYWw7CisgIG5ic2RfdGhyZWFkX29w
 cy50b19maW5kX25ld190aHJlYWRzID0gbmJzZF9maW5kX25ld190aHJlYWRzOworICBuYnNkX3Ro
 cmVhZF9vcHMudG9fcGlkX3RvX3N0ciA9IG5ic2RfcGlkX3RvX3N0cjsKKyAgbmJzZF90aHJlYWRf
 b3BzLnRvX3RocmVhZF9hbGl2ZSA9IG5ic2RfdGhyZWFkX2FsaXZlOworICBuYnNkX3RocmVhZF9v
 cHMudG9faGFzX3RocmVhZF9jb250cm9sID0gdGNfbm9uZTsKKyAgbmJzZF90aHJlYWRfb3BzLnRv
 X21vdXJuX2luZmVyaW9yID0gbmJzZF90aHJlYWRfbW91cm5faW5mZXJpb3I7CisgIG5ic2RfdGhy
 ZWFkX29wcy50b19jcmVhdGVfaW5mZXJpb3IgPSBuYnNkX3RocmVhZF9jcmVhdGVfaW5mZXJpb3I7
 CisgIG5ic2RfdGhyZWFkX29wcy50b19yZXN1bWUgPSBuYnNkX3RocmVhZF9yZXN1bWU7CisgIG5i
 c2RfdGhyZWFkX29wcy50b193YWl0ID0gbmJzZF90aHJlYWRfd2FpdDsKKyAgbmJzZF90aHJlYWRf
 b3BzLnRvX3N0cmF0dW0gPSB0aHJlYWRfc3RyYXR1bTsKK30KKworI2RlZmluZSBOQlNEX0RCRyAw
 CisjZGVmaW5lIE1BWF9GUkFNRVMgMTAwCit2b2lkIGphdmFfYnQoamZyYW1lICpjdHh0KQorewor
 CWludCBpbmphdmEgPSAwOworCXVuc2lnbmVkIGludCBmcCA9IDEsIGkgPSAwOworCWdyZWdzZXRf
 dCBncmVnczsKKwlpbnQgdmFsOworCXRkX3RocmVhZF90ICp0aHJlYWQ7CisJCisJaWYgKGN0eHQg
 PT0gTlVMTCkKKwl7CisJI2lmIE5CU0RfREJHCisJCXByaW50ZigiU3RvcHBlZCBpbiBqYXZhLiBQ
 cmludCBmcmFtZSBpbiByZWdpc3RlcnMgZmlyc3QuXG4iKTsKKwkjZW5kaWYKKwkJaW5qYXZhID0g
 MTsKKyAgCQlpZiAobmJzZF90aHJlYWRfYWN0aXZlICYmIElTX1RIUkVBRCAoaW5mZXJpb3JfcHRp
 ZCkpCisgICAJCXsKKwkJCWlmICgodmFsID0gdGRfbWFwX2lkMnRociAobWFpbl90YSwgR0VUX1RI
 UkVBRCAoaW5mZXJpb3JfcHRpZCksICZ0aHJlYWQpKSAhPSAwKQorCQkJCWVycm9yICgibmJzZF90
 aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOiB0ZF9tYXBfaWQydGhyOiAlc1xuIiwgdGRfZXJyX3N0cmlu
 ZyAodmFsKSk7CisJCQlpZiAoKHZhbCA9IHRkX3Rocl9nZXRyZWdzICh0aHJlYWQsIDAsICZncmVn
 cykpICE9IDApCisJIAkJCWVycm9yICgibmJzZF90aHJlYWRfZmV0Y2hfcmVnaXN0ZXJzOiB0ZF90
 aHJfZ2V0cmVnczogJXNcbiIsIHRkX2Vycl9zdHJpbmcgKHZhbCkpOworCQl9CisJfQorCQorCSNp
 ZiBOQlNEX0RCRworCXByaW50Zl9maWx0ZXJlZCgiQ3VycmVudCBjb250ZXh0IGF0OiAweCV4XG4i
 LCBjdHh0KTsKKwkjZW5kaWYKKwkKKwl3aGlsZSAoZnAgIT0gMCAmJiBpIDwgTUFYX0ZSQU1FUykg
 CisJeworCQlqbWV0aG9kIG07CisJCWpidW5kbGUgYjsKKwkJamhhbmRsZSBjaCwga2g7CisJCWNo
 YXIgZnVsbF9uYW1lWzI1Nl07CisJCWNoYXIgKm5hbWU7CisJCWNoYXIgbmFtZTJbMjU2XTsKKwkJ
 Y2hhciBrZXluYW1lWzI1Nl07CisKKwkJdW5zaWduZWQgaW50IHRtcCwgcGMsIHBvb2w7CisKKwkJ
 aWYgKGluamF2YSAmJiBpID09IDApCisJCXsKKwkJCXRtcCA9IGdyZWdzLnJbX1JFR19SN107CisJ
 CX0gZWxzZQorCQl7CisJCQlpZiAocmVhZF9tZW0oKHZvaWQqKSgodW5zaWduZWQgaW50KWN0eHQg
 KyBvZmZzZXRvZihzdHJ1Y3QgamZyYW1lLCBtcCkpLCAoY2hhciopJnRtcCwgc2l6ZW9mKHRtcCkp
 ID09IC0xKQorCQkJewkKKwkJCSNpZiBOQlNEX0RCRworCQkJCXByaW50Zl9maWx0ZXJlZCgiVW5h
 YmxlIHRvIHJldHJpZXZlIG1ldGhvZCBwb2ludGVyXG4iKTsKKwkJCSNlbmRpZgorCQkJCWdvdG8g
 bmV4dGZwOworCQkJfQorCQl9CisKKwkJaWYgKHJlYWRfbWVtKCh2b2lkKil0bXAsIChjaGFyKikm
 bSwgc2l6ZW9mKG0pKSA9PSAtMSkKKwkJeworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50Zl9maWx0
 ZXJlZCgiVW5hYmxlIHRvIHJldHJpZXZlIG1ldGhvZFxuIik7CisJCSNlbmRpZgorCQkJZ290byBu
 ZXh0ZnA7CisJCX0KKwkKKwkJaWYgKG1ldGhvZF9nZXRfYnVuZGxlKCZtLCAmYikgPT0gLTEpCisJ
 CXsKKwkJI2lmIE5CU0RfREJHCisJCQlwcmludGZfZmlsdGVyZWQoIlVuYWJsZSB0byByZXRyaWV2
 ZSBidW5kbGVcbiIpOworCQkjZW5kaWYKKwkJCWdvdG8gbmV4dGZwOworCQl9CisKKwkJaWYgKG1l
 dGhvZF9nZXRfY2xhc3MoJm0sICZjaCkgPT0gLTEpCisJCXsKKwkJI2lmIE5CU0RfREJHCisJCQlw
 cmludGZfZmlsdGVyZWQoIlVuYWJsZSB0byByZXRyaWV2ZSBjbGFzc1xuIik7CisJCSNlbmRpZgor
 CQkJZ290byBuZXh0ZnA7CisJCX0KKworCQlpZiAoZ2V0X25hbWVfaGFuZGxlKCZjaCwgJmtoKSA9
 PSAtMSkKKwkJeworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50Zl9maWx0ZXJlZCgiVW5hYmxlIHRv
 IHJldHJpZXZlIGhhbmRsZVxuIik7CisJCSNlbmRpZgorCQkJZ290byBuZXh0ZnA7ICAgICAgICAg
 ICAgICAgICAgICAgICAgIAorCQl9CisKKwkJbWVtc2V0KGtleW5hbWUsIDAsIHNpemVvZihrZXlu
 YW1lKSk7CQkJCisKKwkJaWYgKGtleV90b191dGY4KCZraCwga2V5bmFtZSwgc2l6ZW9mKGtleW5h
 bWUpKSA9PSAtMSkKKwkJeworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50Zl9maWx0ZXJlZCgiVW5h
 YmxlIHRvIHJldHJpZXZlIGhhbmRsZSBuYW1lXG4iKTsKKwkJI2VuZGlmCisJCQlnb3RvIG5leHRm
 cDsKKwkJfQorCisJCXRtcCArPSBzaXplb2Yoam1ldGhvZCk7CisKKwkJaWYgKGluamF2YSAmJiBp
 ID09IDApCisJCXsKKwkJCXBjID0gZ3JlZ3MucltfUkVHX1I0XTsKKwkJfSBlbHNlCisJCXsKKwkJ
 CWlmIChyZWFkX21lbSgodm9pZCopKCh1bnNpZ25lZCBpbnQpY3R4dCArIG9mZnNldG9mKHN0cnVj
 dCBqZnJhbWUsIHBjKSksIChjaGFyKikmcGMsIHNpemVvZihwYykpID09IC0xKQorCQkJeworCQkJ
 I2lmIE5CU0RfREJHCisJCQkJcHJpbnRmX2ZpbHRlcmVkKCJVbmFibGUgdG8gcmV0cmlldmUgY3Vy
 cmVudCBwY1xuIik7CisJCQkjZW5kaWYKKwkJCQlnb3RvIG5leHRmcDsKKwkJCX0KKwkJfQorCisJ
 CXBjIC09IHRtcCArIDE7CisKKwkJcG9vbCA9IG1ldGhvZF9nZXRfYnVuZGxlX2FkZHIoJm0pOwor
 CisJCWlmIChwb29sID09IC0xKQorCQkJZ290byBuZXh0ZnA7CisKKwkJcG9vbCArPSBvZmZzZXRv
 ZihqYnVuZGxlLCBwb29sKTsKKworCQltZW1zZXQoZnVsbF9uYW1lLCAwICwgc2l6ZW9mKGZ1bGxf
 bmFtZSkpOworCQkJCisJCWlmIChidW5kbGVfZ2V0X3N0cmluZygmYiwgbS5uYW1lX2lkeCwgcG9v
 bCwgZnVsbF9uYW1lLCBzaXplb2YoZnVsbF9uYW1lKSkgPT0gLTEpCisJCXsKKwkJI2lmIE5CU0Rf
 REJHCisJCQlwcmludGZfZmlsdGVyZWQoIlVuYWJsZSB0byByZXRyaWV2ZSBidW5kbGUgZnVsbCBu
 YW1lXG4iKTsKKwkJI2VuZGlmCisJCQlnb3RvIG5leHRmcDsKKwkJfQorCisJCW5hbWUgPSBzdHJj
 aHIoZnVsbF9uYW1lLCAnOicpOworCQluYW1lID0gKG5hbWUgPT0gTlVMTCkgPyBmdWxsX25hbWUg
 OiAobmFtZSArIDEpOworCisJCW1lbXNldChuYW1lMiwgMCwgc2l6ZW9mKG5hbWUyKSk7CisKKwkJ
 aWYgKGJ1bmRsZV9nZXRfc3RyaW5nKCZiLCBtLnR5cGVfaWR4LCBwb29sLCBuYW1lMiwgc2l6ZW9m
 KG5hbWUyKSkgPT0gLTEpCisJCXsKKwkJI2lmIE5CU0RfREJHCisJCQlwcmludGZfZmlsdGVyZWQo
 IlVuYWJsZSB0byByZXRyaWV2ZSBtZXRob2QgbmFtZVxuIik7CisJCSNlbmRpZgorCQkJZ290byBu
 ZXh0ZnA7CisJCX0KKworCQlwcmludGZfZmlsdGVyZWQoIiMlLTNkIHBjPSUwNWQgJXMuJXMlc1xu
 IiwKKwkJCQlpLCBwYywgCisJCQkJa2V5bmFtZSwgbmFtZSwgCisJCQkJbmFtZTIpOworCisJCW5l
 eHRmcDoKKworCQlpZiAoaW5qYXZhICYmIGkgPT0gMCkKKwkJeworCQkJZnAgPSBncmVncy5yW19S
 RUdfUjVdOworCQkjaWYgTkJTRF9EQkcKKwkJCXByaW50ZigiUHJpbnQgZnJhbWVzIG9uIHN0YWNr
 cyBmcm9tIDB4JXhcbiIsIGZwKTsKKwkJI2VuZGlmCisJCX0gZWxzZQorCQl7CisJCQlpZiAocmVh
 ZF9tZW0oKHZvaWQqKSgodW5zaWduZWQgaW50KWN0eHQgKyBvZmZzZXRvZihzdHJ1Y3QgamZyYW1l
 LCBmcCkpLCAoY2hhciopJmZwLCBzaXplb2YoZnApKSA9PSAtMSkKKwkJCXsKKwkJCSNpZiBOQlNE
 X0RCRworCQkJCXByaW50Zl9maWx0ZXJlZCgiVW5hYmxlIHRvIHJldHJpZXZlIG5leHQgZnJhbWUg
 cG9pbnRlclxuIik7CisJCQkjZW5kaWYKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWN0eHQg
 PSAoamZyYW1lKilmcDsKKwkJaSsrOworCX0KKworfQorCitzdGF0aWMgdm9pZCBuYnNkX2phdmEo
 Y2hhciAqZXhwLCBpbnQgZnJvbV90dHkpCit7CisgIGludCB2YWw7CisgIHRkX3RocmVhZF90ICp0
 aHJlYWQ7CisgIHN0cnVjdCBwdHJhY2VfbHdwaW5mbyBwbDsKKyAgY2FkZHJfdCB0bXA7CisKKwlp
 ZiAoIW5ic2RfdGhyZWFkX2FjdGl2ZSkKKwl7CisJCXByaW50Zl9maWx0ZXJlZCgiUHJvZ3JhbSBu
 b3Qgc3RhcnRlZFxuIik7CQorCQlyZXR1cm47CisJfQorCisgICAgICBwbC5wbF9sd3BpZCA9IDA7
 CisgICAgICB2YWwgPSBwdHJhY2UgKFBUX0xXUElORk8sIEdFVF9QSUQoaW5mZXJpb3JfcHRpZCks
 ICh2b2lkICopJnBsLCBzaXplb2YocGwpKTsKKyAgICAgIHdoaWxlICgodmFsICE9IC0xKSAmJiAo
 cGwucGxfbHdwaWQgIT0gMCkgJiYKKyAgICAgICAgICAgICAocGwucGxfZXZlbnQgIT0gUExfRVZF
 TlRfU0lHTkFMKSkKKyAgICAgICAgdmFsID0gcHRyYWNlIChQVF9MV1BJTkZPLCBHRVRfUElEKGlu
 ZmVyaW9yX3B0aWQpLCAodm9pZCAqKSZwbCwgc2l6ZW9mKHBsKSk7CisKKwlpZiAodGRfbWFwX2lk
 MnRociAobWFpbl90YSwgR0VUX1RIUkVBRChpbmZlcmlvcl9wdGlkKSwgJnRocmVhZCkgIT0gMCkK
 KwkJcmV0dXJuOworICAKKwl0bXAgPSB0ZF90aHJfZ2V0c3BlY2lmaWModGhyZWFkKTsKKwkKKyNp
 ZiBOQlNEX0RCRworCXByaW50Zl9maWx0ZXJlZCgic3BlY2lmaWMgdmFsdWU6IDB4JXhcbiIsIHRt
 cCk7CisjZW5kaWYKKwkKKwlyZWFkX21lbSgodm9pZCopKHRtcCsxNiksIChjaGFyKikmdmFsLCBz
 aXplb2YodmFsKSk7CisJamF2YV9idCgoamZyYW1lKil2YWwpOworfQorCisKK3ZvaWQKK19pbml0
 aWFsaXplX25ic2RfdGhyZWFkICh2b2lkKQoreworICBpbml0X25ic2RfdGhyZWFkX29wcyAoKTsK
 KyAgaW5pdF9uYnNkX3Byb2NfY2FsbGJhY2tzICgpOworCisgIGFkZF90YXJnZXQgKCZuYnNkX3Ro
 cmVhZF9vcHMpOworIAorICBhZGRfY21kICggImphdmEiLCBjbGFzc19pbmZvLCBuYnNkX2phdmEs
 CisJICAgICJwcmludCBqYXZhIGJhY2t0cmFjZVxuIiwKKwkgICAgJmluZm9saXN0KTsKKyAgCisK
 KyAgY2hpbGRfc3VwcHJlc3NfcnVuID0gMTsKKworICAvKiBIb29rIGludG8gbmV3X29iamZpbGUg
 bm90aWZpY2F0aW9uLiAqLworICB0YXJnZXRfbmV3X29iamZpbGVfY2hhaW4gPSBkZXByZWNhdGVk
 X3RhcmdldF9uZXdfb2JqZmlsZV9ob29rOworICBkZXByZWNhdGVkX3RhcmdldF9uZXdfb2JqZmls
 ZV9ob29rICA9IG5ic2RfdGhyZWFkX25ld19vYmpmaWxlOworfQorCi0tLSAwNzAxMjkvc3JjL2du
 dS91c3IuYmluL2dkYjYvYXJjaC9hcm0vZGVmcy5tawkyMDA2LTEyLTA2IDE5OjAxOjIwLjAwMDAw
 MDAwMCAtMDgwMAorKysgbmV3L3NyYy9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvYXJtL2RlZnMubWsJ
 MjAwNi0xMi0zMCAwOToxNzo1MC4wMDAwMDAwMDAgLTA4MDAKQEAgLTMsNSArMyw2IEBACiAjIEdl
 bmVyYXRlZCBmcm9tOiBOZXRCU0Q6IG1rbmF0aXZlLmNvbW1vbix2IDEuOCAyMDA2LzA1LzI2IDE5
 OjE3OjIxIG1yZyBFeHAgCiAjCiBHX0lOVEVSTkFMX0NGTEFHUz0gICAgIC1JLiAtSSR7R05VSE9T
 VERJU1R9L2dkYiAtSSR7R05VSE9TVERJU1R9L2dkYi9jb25maWcgLURMT0NBTEVESVI9IlwiL3Vz
 ci9zaGFyZS9sb2NhbGVcIiIgLURIQVZFX0NPTkZJR19IIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4u
 L2luY2x1ZGUvb3Bjb2RlIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL3JlYWRsaW5lLy4uICAtSS4u
 L2JmZCAtSSR7R05VSE9TVERJU1R9L2dkYi8uLi9iZmQgLUkke0dOVUhPU1RESVNUfS9nZGIvLi4v
 aW5jbHVkZSAgLUkuLi9pbnRsIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2ludGwgIC1ETUlfT1VU
 PTEgLURUVUk9MSAtV2ltcGxpY2l0IC1XcmV0dXJuLXR5cGUgLVdjb21tZW50IC1XdHJpZ3JhcGhz
 IC1XZm9ybWF0IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XZm9ybWF0LW5vbmxpdGVy
 YWwgLVd1bnVzZWQtbGFiZWwgLVd1bnVzZWQtZnVuY3Rpb24gLVduby1wb2ludGVyLXNpZ24gCi1H
 X0xJQkdEQl9PQlM9YXJtLXRkZXAubyBhcm1uYnNkLXRkZXAubyBzb2xpYi5vIHNvbGliLXN2cjQu
 byBuYnNkLXRkZXAubyBzZXItYmFzZS5vIHNlci11bml4Lm8gc2VyLXBpcGUubyBzZXItdGNwLm8g
 Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBjb3JlbG93Lm8gbmJzZC1uYXQubyBhcm1uYnNkLW5h
 dC5vICByZW1vdGUubyBkY2FjaGUubyByZW1vdGUtdXRpbHMubyB0cmFjZXBvaW50Lm8gYXgtZ2Vu
 ZXJhbC5vIGF4LWdkYi5vIHJlbW90ZS1maWxlaW8ubyAgY2xpLWR1bXAubyAgY2xpLWRlY29kZS5v
 IGNsaS1zY3JpcHQubyBjbGktY21kcy5vIGNsaS1zZXRzaG93Lm8gY2xpLXV0aWxzLm8gIGNsaS1s
 b2dnaW5nLm8gIGNsaS1pbnRlcnAubyBtaS1vdXQubyBtaS1jb25zb2xlLm8gIG1pLWNtZHMubyBt
 aS1jbWQtZW52Lm8gbWktY21kLXZhci5vIG1pLWNtZC1icmVhay5vIG1pLWNtZC1zdGFjay5vICBt
 aS1jbWQtZmlsZS5vIG1pLWNtZC1kaXNhcy5vIG1pLXN5bWJvbC1jbWRzLm8gIG1pLWludGVycC5v
 ICBtaS1tYWluLm8gbWktcGFyc2UubyBtaS1nZXRvcHQubyBtaS1jb21tb24ubyBwb3NpeC1oZGVw
 Lm8gdHVpLWNvbW1hbmQubyAgdHVpLWRhdGEubyAgdHVpLWRpc2FzbS5vICB0dWktZmlsZS5vIHR1
 aS5vICB0dWktaG9va3MubyAgdHVpLWludGVycC5vICB0dWktaW8ubyAgdHVpLWxheW91dC5vICB0
 dWktb3V0Lm8gIHR1aS1yZWdzLm8gIHR1aS1zb3VyY2UubyAgdHVpLXN0YWNrLm8gIHR1aS13aW4u
 byAgdHVpLXdpbmRhdGEubyAgdHVpLXdpbmdlbmVyYWwubyAgdHVpLXdpbnNvdXJjZS5vIGMtZXhw
 Lm8gIGNwLW5hbWUtcGFyc2VyLm8gIG9iamMtZXhwLm8gIGFkYS1leHAubyAganYtZXhwLm8gIGYt
 ZXhwLm8gbTItZXhwLm8gcC1leHAubyAgdmVyc2lvbi5vICBhbm5vdGF0ZS5vICBhdXh2Lm8gIGJm
 ZC10YXJnZXQubyAgYmxvY2tmcmFtZS5vIGJyZWFrcG9pbnQubyBmaW5kdmFyLm8gcmVnY2FjaGUu
 byAgY2hhcnNldC5vIGRpc2FzbS5vIGR1bW15LWZyYW1lLm8gIHNvdXJjZS5vIHZhbHVlLm8gZXZh
 bC5vIHZhbG9wcy5vIHZhbGFyaXRoLm8gdmFscHJpbnQubyBwcmludGNtZC5vICBibG9jay5vIHN5
 bXRhYi5vIHN5bWZpbGUubyBzeW1taXNjLm8gbGluZXNwZWMubyBkaWN0aW9uYXJ5Lm8gIGluZmNh
 bGwubyAgaW5mY21kLm8gaW5mcnVuLm8gIGV4cHByaW50Lm8gZW52aXJvbi5vIHN0YWNrLm8gdGhy
 ZWFkLm8gIGV4Y2VwdGlvbnMubyAgaW5mLWNoaWxkLm8gIGludGVycHMubyAgbWFpbi5vICBtYWNy
 b3RhYi5vIG1hY3JvY21kLm8gbWFjcm9leHAubyBtYWNyb3Njb3BlLm8gIGV2ZW50LWxvb3AubyBl
 dmVudC10b3AubyBpbmYtbG9vcC5vIGNvbXBsZXRlci5vICBnZGJhcmNoLm8gYXJjaC11dGlscy5v
 IGdkYnR5cGVzLm8gb3NhYmkubyBjb3B5aW5nLm8gIG1lbWF0dHIubyBtZW0tYnJlYWsubyB0YXJn
 ZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8gYnVpbGRzeW0ubyAgc3RkLXJlZ3MubyAgc2lnbmFscy5v
 ICBrb2QubyBrb2QtY2lzY28ubyAgZ2RiLWV2ZW50cy5vICBleGVjLm8gYmNhY2hlLm8gb2JqZmls
 ZXMubyBvYnNlcnZlci5vIG1pbnN5bXMubyBtYWludC5vIGRlbWFuZ2xlLm8gIGRieHJlYWQubyBj
 b2ZmcmVhZC5vIGNvZmYtcGUtcmVhZC5vIGVsZnJlYWQubyAgZHdhcmZyZWFkLm8gZHdhcmYycmVh
 ZC5vIG1pcHNyZWFkLm8gc3RhYnNyZWFkLm8gY29yZWZpbGUubyAgZHdhcmYyZXhwci5vIGR3YXJm
 MmxvYy5vIGR3YXJmMi1mcmFtZS5vICBhZGEtbGFuZy5vIGMtbGFuZy5vIGYtbGFuZy5vIG9iamMt
 bGFuZy5vICB1aS1vdXQubyBjbGktb3V0Lm8gIHZhcm9iai5vIHdyYXBwZXIubyAganYtbGFuZy5v
 IGp2LXZhbHByaW50Lm8ganYtdHlwZXByaW50Lm8gIG0yLWxhbmcubyBwLWxhbmcubyBwLXR5cGVw
 cmludC5vIHAtdmFscHJpbnQubyAgc2NtLWV4cC5vIHNjbS1sYW5nLm8gc2NtLXZhbHByaW50Lm8g
 IHNlbnRpbmVsLWZyYW1lLm8gIGNvbXBsYWludHMubyB0eXBlcHJpbnQubyAgYWRhLXR5cGVwcmlu
 dC5vIGMtdHlwZXByaW50Lm8gZi10eXBlcHJpbnQubyBtMi10eXBlcHJpbnQubyAgYWRhLXZhbHBy
 aW50Lm8gYy12YWxwcmludC5vIGNwLXZhbHByaW50Lm8gZi12YWxwcmludC5vIG0yLXZhbHByaW50
 Lm8gIG5sbXJlYWQubyBzZXJpYWwubyBtZGVidWdyZWFkLm8gdG9wLm8gdXRpbHMubyAgdWktZmls
 ZS5vICB1c2VyLXJlZ3MubyAgZnJhbWUubyBmcmFtZS11bndpbmQubyBkb3VibGVzdC5vICBmcmFt
 ZS1iYXNlLm8gIGdudS12Mi1hYmkubyBnbnUtdjMtYWJpLm8gaHBhY2MtYWJpLm8gY3AtYWJpLm8g
 Y3Atc3VwcG9ydC5vICBjcC1uYW1lc3BhY2UubyAgcmVnZ3JvdXBzLm8gcmVnc2V0Lm8gIHRyYWQt
 ZnJhbWUubyAgdHJhbXAtZnJhbWUubyAgc29saWIubyBzb2xpYi1udWxsLm8gIHByb2xvZ3VlLXZh
 bHVlLm8gaW5mbG93Lm8gICAgaW5pdC5vCitHX0xJQkdEQl9PQlM9YXJtbmJzZC1yZWdzLm8gbmJz
 ZC10aHJlYWQubyBhcm0tdGRlcC5vIGFybW5ic2QtdGRlcC5vIHNvbGliLm8gc29saWItc3ZyNC5v
 IG5ic2QtdGRlcC5vIHNlci1iYXNlLm8gc2VyLXVuaXgubyBzZXItcGlwZS5vIHNlci10Y3AubyBm
 b3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vIGNvcmVsb3cubyBuYnNkLW5hdC5vIGFybW5ic2QtbmF0
 Lm8gIHJlbW90ZS5vIGRjYWNoZS5vIHJlbW90ZS11dGlscy5vIHRyYWNlcG9pbnQubyBheC1nZW5l
 cmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vICBjbGktZHVtcC5vICBjbGktZGVjb2RlLm8g
 Y2xpLXNjcmlwdC5vIGNsaS1jbWRzLm8gY2xpLXNldHNob3cubyBjbGktdXRpbHMubyAgY2xpLWxv
 Z2dpbmcubyAgY2xpLWludGVycC5vIG1pLW91dC5vIG1pLWNvbnNvbGUubyAgbWktY21kcy5vIG1p
 LWNtZC1lbnYubyBtaS1jbWQtdmFyLm8gbWktY21kLWJyZWFrLm8gbWktY21kLXN0YWNrLm8gIG1p
 LWNtZC1maWxlLm8gbWktY21kLWRpc2FzLm8gbWktc3ltYm9sLWNtZHMubyAgbWktaW50ZXJwLm8g
 IG1pLW1haW4ubyBtaS1wYXJzZS5vIG1pLWdldG9wdC5vIG1pLWNvbW1vbi5vIHBvc2l4LWhkZXAu
 byB0dWktY29tbWFuZC5vICB0dWktZGF0YS5vICB0dWktZGlzYXNtLm8gIHR1aS1maWxlLm8gdHVp
 Lm8gIHR1aS1ob29rcy5vICB0dWktaW50ZXJwLm8gIHR1aS1pby5vICB0dWktbGF5b3V0Lm8gIHR1
 aS1vdXQubyAgdHVpLXJlZ3MubyAgdHVpLXNvdXJjZS5vICB0dWktc3RhY2subyAgdHVpLXdpbi5v
 ICB0dWktd2luZGF0YS5vICB0dWktd2luZ2VuZXJhbC5vICB0dWktd2luc291cmNlLm8gYy1leHAu
 byAgY3AtbmFtZS1wYXJzZXIubyAgb2JqYy1leHAubyAgYWRhLWV4cC5vICBqdi1leHAubyAgZi1l
 eHAubyBtMi1leHAubyBwLWV4cC5vICB2ZXJzaW9uLm8gIGFubm90YXRlLm8gIGF1eHYubyAgYmZk
 LXRhcmdldC5vICBibG9ja2ZyYW1lLm8gYnJlYWtwb2ludC5vIGZpbmR2YXIubyByZWdjYWNoZS5v
 ICBjaGFyc2V0Lm8gZGlzYXNtLm8gZHVtbXktZnJhbWUubyAgc291cmNlLm8gdmFsdWUubyBldmFs
 Lm8gdmFsb3BzLm8gdmFsYXJpdGgubyB2YWxwcmludC5vIHByaW50Y21kLm8gIGJsb2NrLm8gc3lt
 dGFiLm8gc3ltZmlsZS5vIHN5bW1pc2MubyBsaW5lc3BlYy5vIGRpY3Rpb25hcnkubyAgaW5mY2Fs
 bC5vICBpbmZjbWQubyBpbmZydW4ubyAgZXhwcHJpbnQubyBlbnZpcm9uLm8gc3RhY2subyB0aHJl
 YWQubyAgZXhjZXB0aW9ucy5vICBpbmYtY2hpbGQubyAgaW50ZXJwcy5vICBtYWluLm8gIG1hY3Jv
 dGFiLm8gbWFjcm9jbWQubyBtYWNyb2V4cC5vIG1hY3Jvc2NvcGUubyAgZXZlbnQtbG9vcC5vIGV2
 ZW50LXRvcC5vIGluZi1sb29wLm8gY29tcGxldGVyLm8gIGdkYmFyY2gubyBhcmNoLXV0aWxzLm8g
 Z2RidHlwZXMubyBvc2FiaS5vIGNvcHlpbmcubyAgbWVtYXR0ci5vIG1lbS1icmVhay5vIHRhcmdl
 dC5vIHBhcnNlLm8gbGFuZ3VhZ2UubyBidWlsZHN5bS5vICBzdGQtcmVncy5vICBzaWduYWxzLm8g
 IGtvZC5vIGtvZC1jaXNjby5vICBnZGItZXZlbnRzLm8gIGV4ZWMubyBiY2FjaGUubyBvYmpmaWxl
 cy5vIG9ic2VydmVyLm8gbWluc3ltcy5vIG1haW50Lm8gZGVtYW5nbGUubyAgZGJ4cmVhZC5vIGNv
 ZmZyZWFkLm8gY29mZi1wZS1yZWFkLm8gZWxmcmVhZC5vICBkd2FyZnJlYWQubyBkd2FyZjJyZWFk
 Lm8gbWlwc3JlYWQubyBzdGFic3JlYWQubyBjb3JlZmlsZS5vICBkd2FyZjJleHByLm8gZHdhcmYy
 bG9jLm8gZHdhcmYyLWZyYW1lLm8gIGFkYS1sYW5nLm8gYy1sYW5nLm8gZi1sYW5nLm8gb2JqYy1s
 YW5nLm8gIHVpLW91dC5vIGNsaS1vdXQubyAgdmFyb2JqLm8gd3JhcHBlci5vICBqdi1sYW5nLm8g
 anYtdmFscHJpbnQubyBqdi10eXBlcHJpbnQubyAgbTItbGFuZy5vIHAtbGFuZy5vIHAtdHlwZXBy
 aW50Lm8gcC12YWxwcmludC5vICBzY20tZXhwLm8gc2NtLWxhbmcubyBzY20tdmFscHJpbnQubyAg
 c2VudGluZWwtZnJhbWUubyAgY29tcGxhaW50cy5vIHR5cGVwcmludC5vICBhZGEtdHlwZXByaW50
 Lm8gYy10eXBlcHJpbnQubyBmLXR5cGVwcmludC5vIG0yLXR5cGVwcmludC5vICBhZGEtdmFscHJp
 bnQubyBjLXZhbHByaW50Lm8gY3AtdmFscHJpbnQubyBmLXZhbHByaW50Lm8gbTItdmFscHJpbnQu
 byAgbmxtcmVhZC5vIHNlcmlhbC5vIG1kZWJ1Z3JlYWQubyB0b3AubyB1dGlscy5vICB1aS1maWxl
 Lm8gIHVzZXItcmVncy5vICBmcmFtZS5vIGZyYW1lLXVud2luZC5vIGRvdWJsZXN0Lm8gIGZyYW1l
 LWJhc2UubyAgZ251LXYyLWFiaS5vIGdudS12My1hYmkubyBocGFjYy1hYmkubyBjcC1hYmkubyBj
 cC1zdXBwb3J0Lm8gIGNwLW5hbWVzcGFjZS5vICByZWdncm91cHMubyByZWdzZXQubyAgdHJhZC1m
 cmFtZS5vICB0cmFtcC1mcmFtZS5vICBzb2xpYi5vIHNvbGliLW51bGwubyAgcHJvbG9ndWUtdmFs
 dWUubyBpbmZsb3cubyAgICBpbml0Lm8KIEdfU0lNX09CUz0KK0xEQUREKz0JLWxwdGhyZWFkX2Ri
 ZwotLS0gMDcwMTI5L3NyYy9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvYXJtL2luaXQuYwkyMDA2LTA1
 LTI5IDEyOjUwOjAyLjAwMDAwMDAwMCAtMDcwMAorKysgbmV3L3NyYy9nbnUvdXNyLmJpbi9nZGI2
 L2FyY2gvYXJtL2luaXQuYwkyMDA2LTEwLTI1IDE1OjQ0OjUzLjAwMDAwMDAwMCAtMDcwMApAQCAt
 OSw2ICs5LDcgQEAKIGV4dGVybiBpbml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfZ2Ri
 dHlwZXM7CiBleHRlcm4gaW5pdGlhbGl6ZV9maWxlX2Z0eXBlIF9pbml0aWFsaXplX2FybV90ZGVw
 OwogZXh0ZXJuIGluaXRpYWxpemVfZmlsZV9mdHlwZSBfaW5pdGlhbGl6ZV9hcm1fbmV0YnNkX3Rk
 ZXA7CitleHRlcm4gaW5pdGlhbGl6ZV9maWxlX2Z0eXBlIF9pbml0aWFsaXplX25ic2RfdGhyZWFk
 OwogZXh0ZXJuIGluaXRpYWxpemVfZmlsZV9mdHlwZSBfaW5pdGlhbGl6ZV9zb2xpYjsKIGV4dGVy
 biBpbml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfc3ZyNF9zb2xpYjsKIGV4dGVybiBp
 bml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRpYWxpemVfc2VyX2hhcmR3aXJlOwpAQCAtMTIyLDYg
 KzEyMyw3IEBACiAgIF9pbml0aWFsaXplX2dkYnR5cGVzICgpOwogICBfaW5pdGlhbGl6ZV9hcm1f
 dGRlcCAoKTsKICAgX2luaXRpYWxpemVfYXJtX25ldGJzZF90ZGVwICgpOworICBfaW5pdGlhbGl6
 ZV9uYnNkX3RocmVhZCAoKTsKICAgX2luaXRpYWxpemVfc29saWIgKCk7CiAgIF9pbml0aWFsaXpl
 X3N2cjRfc29saWIgKCk7CiAgIF9pbml0aWFsaXplX3Nlcl9oYXJkd2lyZSAoKTsKLS0tIDA3MDEy
 OS9zcmMvbGliL2xpYnB0aHJlYWRfZGJnL3B0aHJlYWRfZGJnLmMJMjAwNi0xMi0yNCAxOTowMTo0
 NC4wMDAwMDAwMDAgLTA4MDAKKysrIG5ldy9zcmMvbGliL2xpYnB0aHJlYWRfZGJnL3B0aHJlYWRf
 ZGJnLmMJMjAwNy0wMS0zMSAxNDowNTo0Ny4wMDAwMDAwMDAgLTA4MDAKQEAgLTM2Nyw2ICszNjcs
 MTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorY2FkZHJfdCB0ZF90aHJfZ2V0c3BlY2lmaWModGRfdGhy
 ZWFkX3QgKnRocmVhZCkKK3sKK2NhZGRyX3QgdmFsOworCisJUkVBRCh0aHJlYWQtPnByb2MsIHRo
 cmVhZC0+YWRkciArIG9mZnNldG9mKHN0cnVjdCBfX3B0aHJlYWRfc3QsIHB0X3NwZWNpZmljKSwg
 JnZhbCwgc2l6ZW9mKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKIGludAogdGRfdGhyX2dldG5h
 bWUodGRfdGhyZWFkX3QgKnRocmVhZCwgY2hhciAqbmFtZSwgaW50IGxlbikKIHsKQEAgLTEwOTks
 NiArMTEwNyw3IEBACiAJdGRfdGhyZWFkX3QgKm50aHJlYWQgPSBOVUxMOyAvKiBYWFg6IEdDQyAq
 LwogCXVjb250ZXh0X3QgdWMsICp1Y3A7CiAJc3RydWN0IHB0aHJlYWRfcXVldWVfdCBxaGVhZDsK
 KwlpbnQgcHJpb3JpdHk7CiAKIAkvKiB2YWxpZGF0ZSB0aGUgdGhyZWFkICovCiAJdmFsID0gUkVB
 RCh0aHJlYWQtPnByb2MsIHRocmVhZC0+YWRkciwgJnRtcCwgc2l6ZW9mKHRtcCkpOwpAQCAtMTEx
 Nyw2ICsxMTI2LDE2IEBACiAJCXJldHVybiBURF9FUlJfQkFEVEhSRUFEOwogI2VuZGlmCiAKKwkv
 KnJwb3BhbGluOiByZWFkIHRocmVhZCBwcmlvcml0eSovCisKKwlpZiAoKHZhbCA9IFJFQUQodGhy
 ZWFkLT5wcm9jLCAKKwkgICAgdGhyZWFkLT5hZGRyICsgb2Zmc2V0b2Yoc3RydWN0IF9fcHRocmVh
 ZF9zdCwgcHRfcHJpb3JpdHkpLCAKKwkgICAgJnByaW9yaXR5LCBzaXplb2YocHJpb3JpdHkpKSkg
 IT0gMCkKKwkJcmV0dXJuIHZhbDsKKworCQorCWlmICgocHJpb3JpdHk8UFRfUFJJT1JJVFlfTE9X
 RVNUKXx8KHByaW9yaXR5PlBUX1BSSU9SSVRZX0hJR0hFU1QpKQorCQlyZXR1cm4gVERfRVJSX0JB
 RFRIUkVBRDsKIAkvKiBmaW5kIHRoZSB0aHJlYWQncyBjdXJyZW50IHN0YXRlICovCiAJaWYgKCh2
 YWwgPSBSRUFEKHRocmVhZC0+cHJvYywgCiAJICAgIHRocmVhZC0+YWRkciArIG9mZnNldG9mKHN0
 cnVjdCBfX3B0aHJlYWRfc3QsIHB0X2Jsb2NrZ2VuKSwgCkBAIC0xMTg2LDcgKzEyMDUsMTIgQEAK
 IAkJICAgICZzcCwgc2l6ZW9mKHNwKSk7CiAJCQogCQkvKiBnZXQgYSB0aHJlYWQgZnJvbSB0aGUg
 cnVucSBvciBpZGxlcSBhbmQgcHV0IGl0IG9uIHRoZSBjcHUgKi8KLQkJcWFkZHIgPSB0aHJlYWQt
 PnByb2MtPnJ1bnFhZGRyOworCQkKKworCQlxYWRkciA9IChjYWRkcl90KSh0aHJlYWQtPnByb2Mt
 PnJ1bnFhZGRyK3ByaW9yaXR5KnNpemVvZihzdHJ1Y3QgcHRocmVhZF9xdWV1ZV90KSk7CisKKwkJ
 CisKIAkJdmFsID0gUkVBRCh0aHJlYWQtPnByb2MsIHFhZGRyLCAmcWhlYWQsIHNpemVvZihxaGVh
 ZCkpOwogCQlpZiAodmFsICE9IDApCiAJCQlyZXR1cm4gdmFsOwpAQCAtMTIzNiw3ICsxMjYwLDgg
 QEAKICNpZmRlZiBQVEhSRUFEX1NBCiAJY2FzZSBQVF9TVEFURV9SVU5OQUJMRToKIAkJLyogcmVt
 b3ZlIGZyb20gcnVucSAqLwotCQlEUFRRX1JFTU9WRSh0aHJlYWQtPnByb2MtPnJ1bnFhZGRyLCB0
 aHJlYWQtPmFkZHIsIHB0X3J1bnEpOworCQlxYWRkcj0oY2FkZHJfdCkodGhyZWFkLT5wcm9jLT5y
 dW5xYWRkcitwcmlvcml0eSpzaXplb2Yoc3RydWN0IHB0aHJlYWRfcXVldWVfdCkpOworCQlEUFRR
 X1JFTU9WRShxYWRkciwgdGhyZWFkLT5hZGRyLCBwdF9ydW5xKTsKIAkJYnJlYWs7CiAJY2FzZSBQ
 VF9TVEFURV9CTE9DS0VEX1FVRVVFOgogCQkvKiByZW1vdmUgZnJvbSB0aGUgcGFydGljdWxhciBz
 bGVlcHEgKi8KQEAgLTEyODcsNyArMTMxMiw4IEBACiBpbnQKIHRkX3Rocl9yZXN1bWUodGRfdGhy
 ZWFkX3QgKnRocmVhZCkKIHsKLQlpbnQgdG1wLCB0bXAxLCB2YWw7CisJaW50IHRtcCwgdG1wMSwg
 dmFsLCBwcmlvcml0eTsKKwljYWRkcl90IHFhZGRyOwogCiAJLyogdmFsaWRhdGUgdGhlIHRocmVh
 ZCAqLwogCXZhbCA9IFJFQUQodGhyZWFkLT5wcm9jLCB0aHJlYWQtPmFkZHIsICZ0bXAsIHNpemVv
 Zih0bXApKTsKQEAgLTEyOTYsNiArMTMyMiwxNSBAQAogCWlmICh0bXAgIT0gUFRfTUFHSUMpCiAJ
 CXJldHVybiBURF9FUlJfQkFEVEhSRUFEOwogCisJaWYgKCh2YWwgPSBSRUFEKHRocmVhZC0+cHJv
 YywgCisJICAgIHRocmVhZC0+YWRkciArIG9mZnNldG9mKHN0cnVjdCBfX3B0aHJlYWRfc3QsIHB0
 X3ByaW9yaXR5KSwgCisJICAgICZwcmlvcml0eSwgc2l6ZW9mKHByaW9yaXR5KSkpICE9IDApCisJ
 CXJldHVybiB2YWw7CisKKwkKKwlpZiAoKHByaW9yaXR5PFBUX1BSSU9SSVRZX0xPV0VTVCl8fChw
 cmlvcml0eT5QVF9QUklPUklUWV9ISUdIRVNUKSkKKwkJcmV0dXJuIFREX0VSUl9CQURUSFJFQUQ7
 CisKIAkvKiBjbGVhciBmbGFnICovCiAJdmFsID0gUkVBRCh0aHJlYWQtPnByb2MsIHRocmVhZC0+
 YWRkciArCiAJICAgIG9mZnNldG9mKHN0cnVjdCBfX3B0aHJlYWRfc3QsIHB0X2ZsYWdzKSwKQEAg
 LTEzMzQsNyArMTM2OSw4IEBACiAJCXZhbCA9IFdSSVRFKHRocmVhZC0+cHJvYywgCiAJCSAgICB0
 aHJlYWQtPmFkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgX19wdGhyZWFkX3N0LCBwdF9zdGF0ZSksIAog
 CQkgICAgJnRtcCwgc2l6ZW9mKHRtcCkpOwotCQlEUFRRX0lOU0VSVF9UQUlMKHRocmVhZC0+cHJv
 Yy0+cnVucWFkZHIsIHRocmVhZC0+YWRkciwgcHRfcnVucSk7CisJCXFhZGRyPShjYWRkcl90KSAo
 dGhyZWFkLT5wcm9jLT5ydW5xYWRkcitwcmlvcml0eSpzaXplb2Yoc3RydWN0IHB0aHJlYWRfcXVl
 dWVfdCkpOworCQlEUFRRX0lOU0VSVF9UQUlMKHFhZGRyLCB0aHJlYWQtPmFkZHIsIHB0X3J1bnEp
 OwogCX0KICNlbmRpZgkKIAkJCg==
 --=-=-=--