NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

RE: bin/30756: gdb not usable for live debugging of threaded programs



The following reply was made to PR bin/30756; it has been noted by GNATS.

From: "Paul Koning" <Paul_Koning%Dell.com@localhost>
To: <gnats-bugs%NetBSD.org@localhost>
Cc: <tech-kern%NetBSD.org@localhost>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Mon, 19 Apr 2010 15:02:03 -0400

 This is a multi-part message in MIME format.
 
 ------_=_NextPart_001_01CADFF2.CC0C5CAC
 Content-Type: text/plain;
        charset="us-ascii"
 Content-Transfer-Encoding: quoted-printable
 
 The fix for kern/43128 adds the missing kernel bits for GDB to support
 threaded program debugging.  The other part needed is changes to GDB
 itself.
 
 Attached is a patch that does this, tested on i386 against the GDB 6.5
 sources that are in NetBSD 5.0.  I intend to submit this to the GDB
 project as well but was asked to provide a patch against the GDB rev
 that is currently in NetBSD.
 
 There is a patched mipsnbsd-nat.c as well as common and i386 specific
 files, but I did not make the build file changes for that so that file
 is untested.  I also did not look at any other platforms.  The changes
 should be straightforward using the mips and i386 examples as the
 starting point, but since I have no way to test them I did not want to
 attempt changes for any other targets.
 
 Comments appreciated.
 
        paul
 
 
 ------_=_NextPart_001_01CADFF2.CC0C5CAC
 Content-Type: application/octet-stream;
        name="gdbthreads-650.diff"
 Content-Transfer-Encoding: base64
 Content-Description: gdbthreads-650.diff
 Content-Disposition: attachment;
        filename="gdbthreads-650.diff"
 
 LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL2kzODYvbmJzZGVsZi5taC5vcmlnCTIwMDYt
 MTEtMjUgMTE6Mzg6NTEuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2Nv
 bmZpZy9pMzg2L25ic2RlbGYubWgJMjAxMC0wNC0xOSAxMjowNzoyMC4wMDAwMDAwMDAgLTA0MDAK
 QEAgLTEsNiArMSw2IEBACiAjIEhvc3Q6IE5ldEJTRC9pMzg2IEVMRgogTkFUREVQRklMRVM9IGZv
 cmstY2hpbGQubyBpbmYtcHRyYWNlLm8gXAotCW5ic2QtbmF0Lm8gaTM4NmJzZC1uYXQubyBpMzg2
 bmJzZC1uYXQubyBic2Qta3ZtLm8KKwluYnNkLW5hdC5vIGkzODZic2QtbmF0Lm8gaTM4Nm5ic2Qt
 bmF0Lm8gYnNkLWt2bS5vIG5ic2QtdGhyZWFkLm8KIE5BVF9GSUxFPSBzb2xpYi5oCiAKIExPQURM
 SUJFUz0gLWxrdm0KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL21pcHMvbmJzZC5taC5v
 cmlnCTIwMDYtMTItMDYgMTM6MjU6MjkuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dk
 YjYvZ2RiL2NvbmZpZy9taXBzL25ic2QubWgJMjAxMC0wNC0xOSAxMzo1NTozOC4wMDAwMDAwMDAg
 LTA0MDAKQEAgLTEsMiArMSwyIEBACiAjIEhvc3Q6IE5ldEJTRC9taXBzCi1OQVRERVBGSUxFUz0g
 Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5hdC5vCitOQVRE
 RVBGSUxFUz0gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5h
 dC5vIG5ic2QtdGhyZWFkLm8KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbWlwc25ic2QtbmF0LmMu
 b3JpZwkyMDA2LTEyLTA2IDEzOjI1OjI5LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9n
 ZGI2L2dkYi9taXBzbmJzZC1uYXQuYwkyMDEwLTA0LTE5IDEzOjU4OjI1LjAwMDAwMDAwMCAtMDQw
 MApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImluZmVyaW9yLmgiCiAjaW5jbHVkZSAicmVn
 Y2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
 Y2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KQEAgLTMyLDYgKzMz
 LDcgQEAKICNpbmNsdWRlICJtaXBzLXRkZXAuaCIKICNpbmNsdWRlICJtaXBzbmJzZC10ZGVwLmgi
 CiAjaW5jbHVkZSAiaW5mLXB0cmFjZS5oIgorI2luY2x1ZGUgIm5ic2QtdGhyZWFkLmgiCiAKIC8q
 IERldGVybWluZSBpZiBQVF9HRVRSRUdTIGZldGNoZXMgdGhpcyByZWdpc3Rlci4gICovCiBzdGF0
 aWMgaW50CkBAIC00OCw3ICs1MCw3IEBACiAgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CiAKICAgICAg
 IGlmIChwdHJhY2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
 UkFDRV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykg
 JnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUg
 KF8oIkNvdWxkbid0IGdldCByZWdpc3RlcnMiKSk7CiAgICAgICAKICAgICAgIG1pcHNuYnNkX3N1
 cHBseV9yZWcgKChjaGFyICopICZyZWdzLCByZWdubyk7CkBAIC02MSw3ICs2Myw3IEBACiAgICAg
 ICBzdHJ1Y3QgZnByZWcgZnByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
 IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3Ms
 IDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVy
 aW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxv
 YXRpbmcgcG9pbnQgc3RhdHVzIikpOwogCiAgICAgICBtaXBzbmJzZF9zdXBwbHlfZnByZWcgKChj
 aGFyICopICZmcHJlZ3MsIHJlZ25vKTsKQEAgLTc2LDEzICs3OCwxMyBAQAogICAgICAgc3RydWN0
 IHJlZyByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVy
 aW9yX3B0aWQpLAotCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmcmVncywgMCkgPT0gLTEpCisJCSAg
 KFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkK
 IAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikpOwogCiAgICAg
 ICBtaXBzbmJzZF9maWxsX3JlZyAoKGNoYXIgKikgJnJlZ3MsIHJlZ25vKTsKIAogICAgICAgaWYg
 KHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgCi0JCSAgKFBUUkFD
 RV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJl
 Z3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUgKF8o
 IkNvdWxkbid0IHdyaXRlIHJlZ2lzdGVycyIpKTsKIAogICAgICAgaWYgKHJlZ25vICE9IC0xKQpA
 QCAtOTQsMTMgKzk2LDEzIEBACiAgICAgICBzdHJ1Y3QgZnByZWcgZnByZWdzOyAKIAogICAgICAg
 aWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAotCQkgIChQ
 VFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJH
 MykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCiAJcGVycm9yX3dpdGhf
 bmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKIAogICAgICAg
 bWlwc25ic2RfZmlsbF9mcHJlZyAoKGNoYXIgKikgJmZwcmVncywgcmVnbm8pOwogCiAgICAgICBp
 ZiAocHRyYWNlIChQVF9TRVRGUFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
 UkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkcz
 KSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9u
 YW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CiAgICAgfQog
 fQpAQCAtMTE1LDYgKzExNyw3IEBACiAgIHN0cnVjdCB0YXJnZXRfb3BzICp0OwogCiAgIHQgPSBp
 bmZfcHRyYWNlX3RhcmdldCAoKTsKKyAgaW5pdF9uYnNkX3RocmVhZF9vcHMgKHQpOwogICB0LT50
 b19mZXRjaF9yZWdpc3RlcnMgPSBtaXBzbmJzZF9mZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnM7CiAg
 IHQtPnRvX3N0b3JlX3JlZ2lzdGVycyA9IG1pcHNuYnNkX3N0b3JlX2luZmVyaW9yX3JlZ2lzdGVy
 czsKICAgdC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKLS0t
 IC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuYy5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6
 MDUuMDAwMDAwMDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmMJ
 MjAxMC0wNC0xOSAxNDo1MDowMi4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSw3MTEgQEAKKy8q
 IFRocmVhZHMgc3VwcG9ydCBmb3IgTmV0QlNEIDUuMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDEw
 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBQYXVs
 IEtvbmluZywgRGVsbCwgaW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg
 IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
 bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
 dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w
 dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
 ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
 IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
 QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
 KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
 dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
 aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
 RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
 aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1
 ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj
 aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0
 aHJlYWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
 Y2x1ZGUgIm5ic2QtdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxz
 eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu
 aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRGF0YSBz
 dHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBOZXRCU0QgdGhyZWFkIHN0YXRlLiAgVGhlcmUgaXMgYSAK
 KyAgIHZlY3RvciBvZiB0aGVzZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIExXUCBJRC4gICovCisK
 K3N0cnVjdCBsd3BfaW5mbworeworICAvKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgTFdQLiAgVGhp
 cyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm9jZXNzCisgICAgIElEIGFuZCB0aGUgTFdQIElE
 LiAgKi8KKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBOb24temVybyBpZiB3ZSB0aGlzIExXUCB3
 YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2lnbmFsbGVkCisgICAgIGJ5IHRoZSBQVF9MV1BJ
 TkZPIHB0cmFjZSgpIGNhbGwuICAqLworICBpbnQgc2lnbmFsbGVkOworICAKKyAgLyogVGhlIHdh
 aXRzdGF0dXMgZm9yIHRoaXMgTFdQJ3MgbGFzdCBldmVudC4gICovCisgIHN0cnVjdCB0YXJnZXRf
 d2FpdHN0YXR1cyB3YWl0c3RhdHVzOworfTsKKworLyogVGhlIGx3cF9pbmZvIGJ1ZmZlciBhbmQg
 aXRzIGNvbnRyb2wgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgbHdwX2luZm8gKmx3cF9i
 dWZmZXI7CitzdGF0aWMgaW50IGx3cF9jb3VudDsKK3N0YXRpYyBpbnQgbHdwX2J1ZnNpemU7CisK
 Ky8qIENvdW50IG9mIHNpZ25hbHMgc3RpbGwgcGVuZGluZyBkZWxpdmVyeSB0byBHREIuICBUaGVz
 ZSBhcmUgdGhyZWFkcworICAgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIHN0b3BwZWQgYW5kIG5vdCBi
 cmVha3BvaW50cy4gIEZvciB0aHJlYWRzIHRoYXQKKyAgIGhpdCBhIGJyZWFrcG9pbnQsIHdlIHNp
 bXBseSBwdXNoIGJhY2sgdGhlIHRocmVhZCBzbyBpdCB3aWxsIGhpdCB0aGUKKyAgIGJyZWFrIGFn
 YWluIChpZiBpdCBpc24ndCByZW1vdmVkIGJlZm9yZSB0aGVuKSBidXQgZm9yIG90aGVyIHNpZ25h
 bHMsCisgICBmb3IgZXhhbXBsZSBmYXVsdHMsIHRoZSBzaWduYWwgcmVtYWlucyBwZW5kaW5nLCB0
 aGUgInRvX3Jlc3VtZSIgdGhhdAorICAgcmVzdW1lcyB0aGUgd2hvbGUgcHJvY2VzcyBpcyBza2lw
 cGVkLCBhbmQgdGhlbiB0aGUgInRvX3dhaXQiIHJldHVybnMKKyAgIHRoZSBpbmZvcm1hdGlvbiBh
 Ym91dCBvbmUgb2YgdGhlIHBlbmRpbmcgc2lnbmFscyBpbnN0ZWFkLiAgKi8KK3N0YXRpYyBpbnQg
 cGVuZGluZ19zaWdzOworCisvKiBUaGUgTFdQIElEIG9mIHRoZSB0aHJlYWQgYmVpbmcgc3RlcHBl
 ZCwgb3IgMCBpZiBub25lLiAgKi8KK3N0YXRpYyBpbnQgc3RlcF9sd3BpZDsKKworLyogRmxhZyB0
 byBpbmRpY2F0ZSB3aGV0aGVyIGxhc3QgcmVzdW1lIHdhcyBhIHJlc3VtZSBhbGwgdGhyZWFkcyBv
 cgorICAgYSByZXN1bWUgc2luZ2xlIHRocmVhZC4gICovCitzdGF0aWMgaW50IHJlc3VtZV9hbGw7
 CisKKy8qIE5vbi16ZXJvIGlmIHRoZSBuZXRic2QtdGhyZWFkIGxheWVyIGlzIGFjdGl2ZS4gICov
 CitzdGF0aWMgaW50IG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDA7CisKKy8qIFRoZSBuZXRic2QtdGhy
 ZWFkIHRhcmdldF9vcHMgc3RydWN0dXJlLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBu
 YnNkX3RocmVhZF9vcHM7CisKK2ludCBkZWJ1Z19uYnNkX3RocmVhZDsKK3N0YXRpYyB2b2lkCitz
 aG93X2RlYnVnX25ic2RfdGhyZWFkIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5
 LAorCQkgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUp
 Cit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBOZXRCU0QgdGhy
 ZWFkIG1vZHVsZSBpcyAlcy5cbiIpLAorCQkgICAgdmFsdWUpOworfQorCisKKy8qIEFjdGl2YXRl
 IHRocmVhZCBzdXBwb3J0IGlmIGFwcHJvcHJpYXRlLiAgRG8gbm90aGluZyBpZiB0aHJlYWQKKyAg
 IHN1cHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUuICAqLworCitzdGF0aWMgdm9pZAorZW5hYmxlX25i
 c2RfdGhyZWFkICh2b2lkKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW07CisgIHZv
 aWQqIGNhbGxlcl9jb250ZXh0OworICBpbnQgc3RhdHVzOworCisgIC8qIElmIGFscmVhZHkgYWN0
 aXZlLCBub3RoaW5nIG1vcmUgdG8gZG8uICAqLworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQor
 ICAgIHJldHVybjsKKworICBpZiAobHdwX2J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHhm
 cmVlIChsd3BfYnVmZmVyKTsKKyAgICAgIGx3cF9idWZmZXIgPSBOVUxMOworICAgICAgbHdwX2Nv
 dW50ID0gbHdwX2J1ZnNpemUgPSAwOworICAgIH0KKyAgCisgIC8qIHB1c2hfdGFyZ2V0ICgmbmJz
 ZF90aHJlYWRfb3BzKTsgKi8KKyAgbmJzZF90aHJlYWRfYWN0aXZlID0gMTsKK30KKworLyogRGVh
 Y3RpdmF0ZSB0aHJlYWQgc3VwcG9ydC4gIERvIG5vdGhpbmcgaXMgdGhyZWFkIHN1cHBvcnQgaXMK
 KyAgIGFscmVhZHkgaW5hY3RpdmUuICAqLworCisjaWYgMAorc3RhdGljIHZvaWQKK2Rpc2FibGVf
 bmJzZF90aHJlYWQgKHZvaWQpCit7CisgIGlmICghbmJzZF90aHJlYWRfYWN0aXZlKQorICAgIHJl
 dHVybjsKKworICB1bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKKyAgbmJzZF90aHJl
 YWRfYWN0aXZlID0gMDsKK30KKyNlbmRpZgorCisvKiBVcGRhdGUgb3VyIGx3cF9pbmZvIGJ1ZmZl
 ciwgYW5kIHRlbGwgR0RCIGFib3V0IGFkZHMgb3IgZGVsZXRlcy4KKworICAgQnkgZG9pbmcgdGhl
 IHRocmVhZCBhZGQgYW5kIHRocmVhZCBkZWxldGUgb3BlcmF0aW9ucyBoZXJlIGFzIHdlCisgICBs
 ZWFybiBhYm91dCB0aHJlYWRzLCB3ZSBhbGxvdyB1c2VycyB0byBydW4gdGhyZWFkLXNwZWNpZmlj
 IGNvbW1hbmRzCisgICB3aXRob3V0IG5lZWRpbmcgdG8gcnVuICJpbmZvIHRocmVhZHMiIGZpcnN0
 LiAKKworICAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgd2FpdHN0YXR1cyBzdHJ1
 Y3QsIHdoaWNoCisgICBpcyBjb3BpZWQgaW50byB0aGUgd2FpdHN0YXR1cyBmb3IgdGhlIHRocmVh
 ZCB3ZSBmaW5kIGFzIHRoZSBzaWduYWxsZWQKKyAgIHRocmVhZC4gICovCisKK3N0YXRpYyB2b2lk
 Cit1cGRhdGVfbHdwYnVmIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAg
 aW50IHBpOworICBsd3BpZF90IGx3cF9pZCwgc2lnX2x3cGlkOworICBzdHJ1Y3QgcHRyYWNlX2x3
 cGluZm8gcHRfaW5mbzsKKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBBY2N1bXVsYXRlIGFuIGFy
 cmF5IG9mIE5ldEJTRCB0aHJlYWRzLCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIExXUCBpZC4KKwor
 ICAgICBUaGUgcmVhc29uIGZvciB1c2luZyBkZXNjZW5kaW5nIG9yZGVyIGlzIHRoYXQgdGhpcyBp
 cyB0aGUgb3JkZXIKKyAgICAgaW4gd2hpY2ggTFdQcyBhcmUgcmV0dXJuZWQgYnkgdGhlIHB0cmFj
 ZSgpIFBUX0xXUElORk8gZnVuY3Rpb24sCisgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGVtIGlu
 IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0IGluIHRoZQorICAgICBwX2x3cHMgbGlzdCBm
 b3IgdGhlIHByb2Nlc3MsIGFuZCBuZXcgZW50cmllcyBhcmUgYXNzaWduZWQgYXNjZW5kaW5nCisg
 ICAgIExXUCBJRHMgYW5kIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGF0IGxpc3QuICAqLwor
 CisgIGx3cF9pZCA9IHNpZ19sd3BpZCA9IDA7CisgIHBpID0gMDsKKyAgCisgIHdoaWxlICgxKQor
 ICAgIHsKKyAgICAgIHB0X2luZm8ucGxfbHdwaWQgPSBsd3BfaWQ7CisgICAgICBlcnJubyA9IDA7
 CisgICAgICBpZiAocHRyYWNlIChQVF9MV1BJTkZPLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
 CQkgICZwdF9pbmZvLCBzaXplb2YgKHB0X2luZm8pKSA9PSAtMSkKKwl7CisJICBpZiAoZXJybm8g
 PT0gRVNSQ0gpCisJICAgIGJyZWFrOworCSAgZWxzZSBpZiAoZXJybm8gIT0gMCkKKwkgICAgcGVy
 cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHRocmVhZCBpbmZvcm1hdGlvbiIpKTsKKwl9
 CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdk
 Yl9zdGRsb2csCisJCQkgICAgIk5UVVA6IGx3cGluZm8gb24gJWQgcmV0dXJucyBsd3AgJWQsIHBs
 X2V2ZW50ICVkXG4iLAorCQkJICAgIGx3cF9pZCwgcHRfaW5mby5wbF9sd3BpZCwgcHRfaW5mby5w
 bF9ldmVudCk7CisJICAKKyAgICAgIC8qIFJldHJpZXZlIHRoZSBMV1AgSUQgdGhhdCB3YXMgZm91
 bmQuICBUaGlzIGFsc28gc2V0cyB0aGUgSUQgdG8KKwkgc3RhcnQgZnJvbSB0aGUgbmV4dCB0aW1l
 IGFyb3VuZCB0aGUgbG9vcC4gICovCisgICAgICBsd3BfaWQgPSBwdF9pbmZvLnBsX2x3cGlkOwor
 CisgICAgICAvKiBMV1AgaWQgMCBpcyBlbmQgb2YgbGlzdC4gICovCisgICAgICBpZiAobHdwX2lk
 ID09IDApCisJYnJlYWs7CisgICAgICAKKyAgICAgIC8qIElmIHRoZSBMV1Agd2UgZm91bmQgaGFz
 IGFuIElEIGxlc3MgdGhhbiB0aGUgSUQgb2YgdGhlIGN1cnJlbnQKKwkgYnVmZmVyIGVudHJ5LCB0
 aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBlbnRyeSBpcyBhIGRlbGV0ZWQgdGhyZWFkLgorCSBUZWxs
 IEdEQiBhYm91dCBpdHMgZGVtaXNlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBidWZmZXIuIAor
 CSAgCisJIFdlIGhhdmUgdG8gZG8gdGhpcyBpbiBhIGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiB0
 aHJlYWRzCisJIHRvIGJlIHJlbW92ZWQuICAqLworICAgICAgd2hpbGUgKHBpIDwgbHdwX2NvdW50
 ICYmIGx3cF9pZCA8IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJeworCSAgaWYgKGRl
 YnVnX25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ
 CQkJIk5UVVA6IHRocmVhZCBwdGlkICVkLCVsZCBoYXMgZGlzYXBwZWFyZWRcbiIsCisJCQkJUElE
 R0VUIChsd3BfYnVmZmVyW3BpXS5wdGlkKSwKKwkJCQlUSURHRVQgKGx3cF9idWZmZXJbcGldLnB0
 aWQpKTsKKworCSAgLyogVGVsbCBHREIuICAqLworCSAgZGVsZXRlX3RocmVhZCAobHdwX2J1ZmZl
 cltwaV0ucHRpZCk7CisKKwkgIC8qIFJlbW92ZSB0aGUgZGVsZXRlZCBlbnRyeS4gICovCisJICBp
 ZiAocGkgPCBsd3BfY291bnQpCisJICAgIG1lbW1vdmUgKGx3cF9idWZmZXIgKyBwaSArIDEsIGx3
 cF9idWZmZXIgKyBwaSwgCisJCSAgICAgKGx3cF9jb3VudCAtIHBpKSAqIHNpemVvZiAoc3RydWN0
 IGx3cF9pbmZvKSk7CisJICBsd3BfY291bnQtLTsKKwl9CisKKyAgICAgIC8qIElmIHdlJ3JlIG5v
 dyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgb3IgdGhlIExXUCBmb3VuZAorCSBo
 YXMgYW4gTFdQIElEIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgYnVmZmVy
 LCB0aGlzCisJIGlzIGEgbmV3IHRocmVhZC4gIEFsbG9jYXRlIG1vcmUgYnVmZmVyIHNwYWNlIGlm
 IG5lZWQgYmUsCisJIG1ha2Ugcm9vbSBmb3IgdGhpcyBlbnRyeSwgYW5kIHN0b3JlIGl0LiAgVGhl
 biB0ZWxsIEdEQiBhYm91dAorCSB0aGUgbmV3IHRocmVhZC4gICovCisgICAgICBpZiAocGkgPj0g
 bHdwX2NvdW50IHx8IGx3cF9pZCA+IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJewor
 CSAgLyogQWxsb2NhdGUgbW9yZSBzcGFjZSwgaWYgd2UgbmVlZCBpdC4gICovCisJICBpZiAobHdw
 X2NvdW50ID09IGx3cF9idWZzaXplKQorCSAgICB7CisJICAgICAgaWYgKGx3cF9idWZzaXplKQor
 CQlsd3BfYnVmc2l6ZSAqPSAyOworCSAgICAgIGVsc2UKKwkJbHdwX2J1ZnNpemUgPSAxOworCSAg
 ICAgIGx3cF9idWZmZXIgPSAoc3RydWN0IGx3cF9pbmZvICopIHhyZWFsbG9jIChsd3BfYnVmZmVy
 LCAKKwkJCQkJCQkgbHdwX2J1ZnNpemUgKiBzaXplb2YgKHN0cnVjdCBsd3BfaW5mbykpOworCSAg
 ICB9CisKKwkgIC8qIFB1c2ggY3VycmVudCBhbmQgbGF0ZXIgZW50cmllcywgaWYgYW55LCBvdmVy
 LiAgKi8KKwkgIGlmIChwaSA8IGx3cF9jb3VudCkKKwkgICAgbWVtbW92ZSAobHdwX2J1ZmZlciAr
 IHBpICsgMSwgbHdwX2J1ZmZlciArIHBpLCAKKwkJICAgICAobHdwX2NvdW50IC0gcGkpICogc2l6
 ZW9mIChzdHJ1Y3QgbHdwX2luZm8pKTsKKworCSAgLyogVXBkYXRlIHRoZSBjb3VudCBvZiBMV1Bz
 LiAgKi8KKwkgIGx3cF9jb3VudCsrOworCisJICAvKiBJbml0aWFsaXplIHRoZSBuZXcgZW50cnku
 ICAqLworCSAgbHdwX2J1ZmZlcltwaV0ucHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9y
 X3B0aWQpLCBsd3BfaWQpOworCSAgaWYgKHB0X2luZm8ucGxfZXZlbnQgPT0gUExfRVZFTlRfU0lH
 TkFMKQorCSAgICB7CisJICAgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVkID0gMTsKKwkgICAg
 ICBsd3BfYnVmZmVyW3BpXS53YWl0c3RhdHVzID0gKnN0YXR1czsKKwkgICAgICBzaWdfbHdwaWQg
 PSBsd3BfaWQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVk
 ID0gMDsKKworCSAgLyogQWR2YW5jZSB0aGUgTFdQIGJ1ZmZlciBwb2ludGVyLiAgKi8KKwkgIHBp
 Kys7CisJICAKKwkgIC8qIFRlbGwgR0RCIGFib3V0IHRoZSBuZXcgdGhyZWFkLiAgKi8KKwkgIGlm
 IChsd3BfY291bnQgPT0gMSkKKwkgICAgeworCSAgICAgIC8qIFNlZSBpZiBHREIgc3RpbGwgaGFz
 IFRJRCB6ZXJvLCBpZiBzbyBzZXQgdGhlIFRJRC4gICovCisJICAgICAgaWYgKFRJREdFVCAoaW5m
 ZXJpb3JfcHRpZCkgPT0gMCkKKwkJeworCQkgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7CisJCSAg
 CisJCSAgcHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3BfaWQpOwor
 CQkgIC8qIHRocmVhZF9jaGFuZ2VfcHRpZCAoaW5mZXJpb3JfcHRpZCwgcHRpZCk7ICovCisJCSAg
 dHAgPSBmaW5kX3RocmVhZF9waWQgKGluZmVyaW9yX3B0aWQpOworCQkgIGlmICh0cCAhPSBOVUxM
 KQorCQkgICAgeworCQkgICAgICB0cC0+cHRpZCA9IHB0aWQ7CisJCSAgICAgIGluZmVyaW9yX3B0
 aWQgPSBwdGlkOworCQkgIAorCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJp
 bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogc2V0dGluZyBtYWlu
 IHRocmVhZCBwdGlkIHRvICVkLCVsZFxuIiwKKwkJCQkJICAgIFBJREdFVCAocHRpZCksIFRJREdF
 VCAocHRpZCkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogTmV3IHRo
 cmVhZCAoZmlyc3QgdGhyZWFkKSwgYWRkIGl0IHRvIEdEQi4gICovCisJCSAgICAgIGluZmVyaW9y
 X3B0aWQgPSBwdGlkOworCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJpbnRm
 X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogYWRkaW5nIGZpcnN0IHRo
 cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCQkgICAgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgbHdw
 X2lkKTsKKwkJICAgICAgYWRkX3RocmVhZCAocHRpZCk7CisJCSAgICB9CisJCX0KKwkgICAgfQor
 CSAgZWxzZQorCSAgICB7CisJICAgICAgLyogTmV3IHRocmVhZCBidXQgbm90IHRoZSBmaXJzdCwg
 YWRkIGl0IHRvIEdEQi4gICovCisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJp
 bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFVQOiBhZGRpbmcgbmV3IHRo
 cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCSAgICBQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3Bf
 aWQpOworCSAgICAgIGFkZF90aHJlYWQgKE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQp
 LCBsd3BfaWQpKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3VuZCBhbiBl
 eGlzdGluZyB0aHJlYWQuICBVcGRhdGUgaXRzIHN0YXR1cyBpbiB0aGUgYnVmZmVyLgorCSAgICAg
 Tm90ZSB0aGF0IHdlIGNsZWFyIHRoZSBzaWduYWxsZWQgZmxhZyBpZiB0aGlzIGlzIHRoZSBmaXJz
 dAorCSAgICAgY2FsbCBhbmQgdGhpcyB0aHJlYWQgd2Fzbid0IHRoZSBzaWduYWxsZWQgdGhyZWFk
 LCBidXQgd2UgCisJICAgICBsZWF2ZSBpdCBhbG9uZSBvbiBzdWJzZXF1ZW50IGNhbGxzLiAgVGhh
 dCB3YXkgdGhlIHN1YnNlcXVlbnQKKwkgICAgIGNhbGxzIHdpbGwgYWNjdW11bGF0ZSB0aGUgc2V0
 IG9mIHNpZ25hbGxlZCB0aHJlYWRzLiAgKi8KKwkgIGlmIChwdF9pbmZvLnBsX2V2ZW50ID09IFBM
 X0VWRU5UX1NJR05BTCkKKwkgICAgeworCSAgICAgIGx3cF9idWZmZXJbcGldLnNpZ25hbGxlZCA9
 IDE7CisJICAgICAgbHdwX2J1ZmZlcltwaV0ud2FpdHN0YXR1cyA9ICpzdGF0dXM7CisJICAgICAg
 c2lnX2x3cGlkID0gbHdwX2lkOworCSAgICB9CisJICAKKwkgIC8qIEFkdmFuY2UgdGhlIExXUCBi
 dWZmZXIgcG9pbnRlci4gICovCisJICBwaSsrOworCX0KKyAgICB9CisgIGlmIChkZWJ1Z19uYnNk
 X3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiTlRVUDog
 c2lnbmFsbGVkIHRocmVhZCBsd3BpZCBpcyAlZFxuIiwgc2lnX2x3cGlkKTsKKworfQorCisjaWYg
 MAorLyogVGhlICJ0b19kZXRhY2giIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8K
 Kworc3RhdGljIHZvaWQKK25ic2RfdGhyZWFkX2RldGFjaCAoY2hhciAqYXJncywgaW50IGZyb21f
 dHR5KQoreyAgIAorICBzdHJ1Y3QgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IGZpbmRfdGFyZ2V0X2Jl
 bmVhdGggKCZuYnNkX3RocmVhZF9vcHMpOworCisgIGRpc2FibGVfbmJzZF90aHJlYWQgKCk7Cisg
 IGJlbmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorI2VuZGlmCisKKy8qIFJl
 c3VtZSBleGVjdXRpb24gb2YgdGhyZWFkIFBUSUQsIG9yIGFsbCB0aHJlYWRzIGlmIFBUSUQgaXMg
 LTEuICBJZgorICAgU1RFUCBpcyBub256ZXJvLCBzaW5nbGUtc3RlcCBpdC4gIElmIFNJR05BTCBp
 cyBub256ZXJvLCBnaXZlIGl0CisgICB0aGF0IHNpZ25hbC4gICovCisKK3N0YXRpYyB2b2lkCitu
 YnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSB0YXJnZXRfc2ln
 bmFsIHNpZ25hbCkKK3sKKyAgcGlkX3QgcGlkOworICBpbnQgcmVxdWVzdDsKKyAgCisgIC8qIEEg
 c3BlY2lmaWMgUFRJRCBtZWFucyBgc3RlcCBvbmx5IHRoaXMgcHJvY2VzcyBpZCcuICAqLworICBp
 ZiAocHRpZF9lcXVhbCAobWludXNfb25lX3B0aWQsIHB0aWQpIHx8IFRJREdFVCAocHRpZCkgPD0g
 MCkKKyAgICB7CisgICAgICByZXN1bWVfYWxsID0gMTsKKyAgICAgIHB0aWQgPSBpbmZlcmlvcl9w
 dGlkOworICAgIH0KKyAgZWxzZQorICAgIHJlc3VtZV9hbGwgPSAwOworICAKKyAgcGlkID0gcHRp
 ZF9nZXRfcGlkIChwdGlkKTsKKworI2lmIDAKKyAgaWYgKGNhdGNoX3N5c2NhbGxfZW5hYmxlZCAo
 KSA+IDApCisgICAgcmVxdWVzdCA9IFBUX1NZU0NBTEw7CisgIGVsc2UKKyNlbmRpZgorICAgIHJl
 cXVlc3QgPSBQVF9DT05USU5VRTsKKworI2lmZGVmIFBUX1NURVAKKyAgaWYgKHN0ZXApCisgICAg
 eworICAgICAgLyogSWYgdGhpcyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQVF9TVEVQLCBhIGhp
 Z2hlciBsZXZlbAorICAgICAgICAgZnVuY3Rpb24gd2lsbCBoYXZlIGNhbGxlZCBzaW5nbGVfc3Rl
 cCgpIHRvIHRyYW5zbXV0ZSB0aGUgc3RlcAorICAgICAgICAgcmVxdWVzdCBpbnRvIGEgY29udGlu
 dWUgcmVxdWVzdCAoYnkgc2V0dGluZyBicmVha3BvaW50cyBvbgorICAgICAgICAgYWxsIHBvc3Np
 YmxlIHN1Y2Nlc3NvciBpbnN0cnVjdGlvbnMpLCBzbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAg
 ICB3b3JyeSBhYm91dCB0aGF0IGhlcmUuICAqLworICAgICAgcmVxdWVzdCA9IFBUX1NURVA7Cisg
 ICAgfQorI2VuZGlmCisKKyAgLyogQW4gYWRkcmVzcyBvZiAoUFRSQUNFX1RZUEVfQVJHMykxIHRl
 bGxzIHB0cmFjZSB0byBjb250aW51ZSBmcm9tCisgICAgIHdoZXJlIGl0IHdhcy4gIElmIEdEQiB3
 YW50ZWQgaXQgdG8gc3RhcnQgc29tZSBvdGhlciB3YXksIHdlIGhhdmUKKyAgICAgYWxyZWFkeSB3
 cml0dGVuIGEgbmV3IHByb2dyYW0gY291bnRlciB2YWx1ZSB0byB0aGUgY2hpbGQuICAqLworICBl
 cnJubyA9IDA7CisgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVy
 ZWQgKGdkYl9zdGRsb2csCisJCQkiTlRSOiAlcyBwdGlkICVkLCVsZCwgJXMsIHNpZ25hbCAlZFxu
 IiwKKwkJCShzdGVwID8gInN0ZXBwaW5nIiA6ICJyZXN1bWluZyIpLAorCQkJUElER0VUIChwdGlk
 KSwgVElER0VUIChwdGlkKSwKKwkJCShyZXN1bWVfYWxsID8gImFsbCB0aHJlYWRzIiA6ICJzaW5n
 bGUgdGhyZWFkIiksCisJCQlzaWduYWwpOworCisgIC8qIEFzc3VtZSBub3Qgc3RlcHBpbmcgc29t
 ZSBMV1AgSUQuICAqLworICBzdGVwX2x3cGlkID0gMDsKKyAgaWYgKHN0ZXApCisgICAgeworICAg
 ICAgc3RlcF9sd3BpZCA9IFRJREdFVCAocHRpZCk7CisgICAgICBpZiAoc3RlcF9sd3BpZCA8IDAp
 CisJc3RlcF9sd3BpZCA9IC1zdGVwX2x3cGlkOworICAgIH0JCisgIAorICBpZiAocmVzdW1lX2Fs
 bCkKKyAgICB7CisgICAgICBpZiAocGVuZGluZ19zaWdzID4gMCkKKwl7CisJICAvKiBXZSBoYXZl
 IHBlbmRpbmcgc2lnbmFscyBmcm9tIHRoZSBwcmV2aW91cyB3YWl0IHN0aWxsIAorCSAgICAgbmVl
 ZGluZyB0byBiZSBkZWxpdmVyZWQuICBTbyBkb24ndCByZXN1bWUgdGhlIHByb2Nlc3MsCisJICAg
 ICBpbnN0ZWFkIHRha2Ugbm8gYWN0aW9uIGFuZCB3ZSdsbCBkZWxpdmVyIG9uZSBvZiB0aG9zZQor
 CSAgICAgcGVuZGluZyBzaWduYWxzIGF0IHRoZSBuZXh0IHdhaXQuICAqLworCSAgaWYgKGRlYnVn
 X25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
 Ik5UUjogcHRpZCAlZCwlbGQgaGFzICVkIHBlbmRpbmcgc2lnbmFscywgc2tpcHBpbmcgcmVzdW1l
 XG4iLAorCQkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCksIHBlbmRpbmdfc2lncyk7CisJ
 ICByZXR1cm47CisJfQorICAgICAgaWYgKHN0ZXApCisJcHRyYWNlIChyZXF1ZXN0LCBwaWQsICh2
 b2lkICopIDEsIFRJREdFVCAocHRpZCkpOworICAgICAgZWxzZQorCXB0cmFjZSAocmVxdWVzdCwg
 cGlkLCAodm9pZCAqKSAxLAorCQl0YXJnZXRfc2lnbmFsX3RvX2hvc3QgKHNpZ25hbCkpOworICAg
 IH0KKyAgZWxzZQorICAgIHB0cmFjZSAocmVxdWVzdCwgcGlkLCAodm9pZCAqKSAxLCAtVElER0VU
 IChwdGlkKSk7CisgIAorICBpZiAoZXJybm8gIT0gMCkKKyAgICBwZXJyb3Jfd2l0aF9uYW1lICgo
 InB0cmFjZSIpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNoaWxkIHNwZWNpZmllZCBieSBQVElE
 IHRvIGRvIHNvbWV0aGluZy4gIFJldHVybiB0aGUKKyAgIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxk
 LCBvciBNSU5VU19PTkVfUFRJRCBpbiBjYXNlIG9mIGVycm9yOyBzdG9yZQorICAgdGhlIHN0YXR1
 cyBpbiAqT1VSU1RBVFVTLiAgKi8KKworc3RhdGljIHB0aWRfdAorbmJzZF90aHJlYWRfd2FpdDIg
 KHB0aWRfdCBwdGlkLAorCQkgICBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywg
 aW50IG9wdGlvbnMpCit7CisgIHBpZF90IHBpZDsKKyAgaW50IHN0YXR1cywgc2F2ZV9lcnJubzsK
 KworICBkbworICAgIHsKKyAgICAgIHNldF9zaWdpbnRfdHJhcCAoKTsKKworICAgICAgZG8KKwl7
 CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri
 X3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdGluZyBmb3IgcHRpZCAlZCwlbGQsIG9wdCAlZFxuIiwK
 KwkJCQlQSURHRVQgKHB0aWQpLCBUSURHRVQgKHB0aWQpLCBvcHRpb25zKTsKKworCSAgcGlkID0g
 d2FpdHBpZCAocHRpZF9nZXRfcGlkIChwdGlkKSwgJnN0YXR1cywgb3B0aW9ucyk7CisJICBzYXZl
 X2Vycm5vID0gZXJybm87CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZf
 dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdHBpZCBlcnJubyBpcyAlZCwg
 cGlkICVkLCBzdGF0dXMgJXhcbiIsCisJCQkJc2F2ZV9lcnJubywgcGlkLCBzdGF0dXMpOworCX0K
 KyAgICAgIHdoaWxlIChwaWQgPT0gLTEgJiYgc2F2ZV9lcnJubyA9PSBFSU5UUik7CisKKyAgICAg
 IGNsZWFyX3NpZ2ludF90cmFwICgpOworCisgICAgICAvKiBJZiBub3RoaW5nIGZvdW5kIGluIHRo
 ZSBubyB3YWl0IGNhc2UsIHJlcG9ydCB0aGF0LiAgKi8KKyAgICAgIGlmIChvcHRpb25zID09IFdO
 T0hBTkcgJiYgcGlkID09IDApCisJcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisgICAgICAKKyAg
 ICAgIGlmIChwaWQgPT0gLTEpCisJeworCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJy
 LAorCQkJICAgICAgXygiQ2hpbGQgcHJvY2VzcyB1bmV4cGVjdGVkbHkgbWlzc2luZzogJXMuXG4i
 KSwKKwkJCSAgICAgIHNhZmVfc3RyZXJyb3IgKHNhdmVfZXJybm8pKTsKKworCSAgLyogQ2xhaW0g
 aXQgZXhpdGVkIHdpdGggdW5rbm93biBzaWduYWwuICAqLworCSAgb3Vyc3RhdHVzLT5raW5kID0g
 VEFSR0VUX1dBSVRLSU5EX1NJR05BTExFRDsKKwkgIG91cnN0YXR1cy0+dmFsdWUuc2lnID0gVEFS
 R0VUX1NJR05BTF9VTktOT1dOOworCSAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7CisJfQorCisgICAg
 ICAvKiBJZ25vcmUgdGVybWluYXRlZCBkZXRhY2hlZCBjaGlsZCBwcm9jZXNzZXMuICAqLworICAg
 ICAgaWYgKCFXSUZTVE9QUEVEIChzdGF0dXMpICYmIHBpZCAhPSBwdGlkX2dldF9waWQgKGluZmVy
 aW9yX3B0aWQpKQorCXBpZCA9IC0xOworICAgIH0KKyAgd2hpbGUgKHBpZCA9PSAtMSk7CisKKyAg
 c3RvcmVfd2FpdHN0YXR1cyAob3Vyc3RhdHVzLCBzdGF0dXMpOworICByZXR1cm4gcGlkX3RvX3B0
 aWQgKHBpZCk7Cit9CisKK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX2NhbmNlbF9icmVha3BvaW50
 IChzdHJ1Y3QgbHdwX2luZm8gKmxwKQoreworICAvKiBBcnJhbmdlIGZvciBhIGJyZWFrcG9pbnQg
 dG8gYmUgaGl0IGFnYWluIGxhdGVyLiAgV2UgZG9uJ3Qga2VlcAorICAgICB0aGUgU0lHVFJBUCBz
 dGF0dXMgYW5kIGRvbid0IGZvcndhcmQgdGhlIFNJR1RSQVAgc2lnbmFsIHRvIHRoZQorICAgICBM
 V1AuICBXZSB3aWxsIGhhbmRsZSB0aGUgY3VycmVudCBldmVudCwgZXZlbnR1YWxseSB3ZSB3aWxs
 IHJlc3VtZQorICAgICB0aGlzIExXUCwgYW5kIHRoaXMgYnJlYWtwb2ludCB3aWxsIHRyYXAgYWdh
 aW4uCisKKyAgICAgSWYgd2UgZG8gbm90IGRvIHRoaXMsIHRoZW4gd2UgcnVuIHRoZSByaXNrIHRo
 YXQgdGhlIHVzZXIgd2lsbAorICAgICBkZWxldGUgb3IgZGlzYWJsZSB0aGUgYnJlYWtwb2ludCwg
 YnV0IHRoZSBMV1Agd2lsbCBoYXZlIGFscmVhZHkKKyAgICAgdHJpcHBlZCBvbiBpdC4gICovCisK
 KyAgaWYgKGxwLT53YWl0c3RhdHVzLmtpbmQgID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECisg
 ICAgICAmJiBscC0+d2FpdHN0YXR1cy52YWx1ZS5zaWcgPT0gU0lHVFJBUAorICAgICAgJiYgYnJl
 YWtwb2ludF9pbnNlcnRlZF9oZXJlX3AgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLQorCQkJCSAg
 ICAgREVDUl9QQ19BRlRFUl9CUkVBSykpCisgICAgeworICAgICAgaWYgKGRlYnVnX25ic2RfdGhy
 ZWFkKQorCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgICAiTlRDQjogUHVz
 aCBiYWNrIGJyZWFrcG9pbnQgZm9yIHB0aWQgJWQsJWxkXG4iLAorCQkJICAgIFBJREdFVCAobHAt
 PnB0aWQpLCBUSURHRVQgKGxwLT5wdGlkKSk7CisKKyAgICAgIC8qIEJhY2sgdXAgdGhlIFBDIGlm
 IG5lY2Vzc2FyeS4gICovCisgICAgICBpZiAoREVDUl9QQ19BRlRFUl9CUkVBSykKKwl3cml0ZV9w
 Y19waWQgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLSBERUNSX1BDX0FGVEVSX0JSRUFLLCBscC0+
 cHRpZCk7CisKKyAgICAgIC8qIFdlIG5vIGxvbmdlciBoYXZlIGEgcGVuZGluZyBzaWduYWwgZm9y
 IHRoaXMgdGhyZWFkLiAgKi8KKyAgICAgIGxwLT5zaWduYWxsZWQgPSAwOworCisgICAgICAvKiBO
 b3QgYSBwZW5kaW5nIHNpZ25hbCBhbnltb3JlLiAgKi8KKyAgICAgIHJldHVybiAxOworICAgIH0K
 KyAgcmV0dXJuIDA7Cit9CisKKy8qIFRoZSAidG9fd2FpdCIgbWV0aG9kIG9mIHRoZSBuYnNkX3Ro
 cmVhZF9vcHMuICAqLworCitzdGF0aWMgcHRpZF90CituYnNkX3RocmVhZF93YWl0IChwdGlkX3Qg
 cHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMpCit7CisgIHB0aWRfdCBhY3Rp
 dmVfcHRpZDsKKyAgc3RydWN0IGx3cF9pbmZvICpzZWxfdGhyZWFkOworICBpbnQgc2lnX3RocmVh
 ZHMsIGk7CisgIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyB0c3RhdHVzOworCisgIC8qIElmIHRo
 ZXJlIHdlcmUgcGVuZGluZyBzaWduYWxzIGFuZCBhIHJlc3VtZSBhbGwgdGhyZWFkcyB3YXMgZG9u
 ZSwKKyAgICAgdGhlIHByb2Nlc3Mgd2Fzbid0IGFjdHVhbGx5IHJlc3VtZWQgc28gZG9uJ3Qgd2Fp
 dCBvbiBpdC4gIEp1c3QKKyAgICAgZ28gb24gdG8gcGljayBhIHRocmVhZCB0byByZXBvcnQgb24u
 ICAqLworICBpZiAoIShwZW5kaW5nX3NpZ3MgPiAwICYmIHJlc3VtZV9hbGwpKQorICAgIHsKKyAg
 ICAgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMsIDApOworCisgICAg
 ICAvKiBEZWZhdWx0IHN0YXR1cyByZXR1cm5lZCBpcyB0aGUgb25lIHdlIGp1c3QgZ290LiAgKi8K
 KyAgICAgICpzdGF0dXMgPSB0c3RhdHVzOworICAgICAgCisgICAgICAvKiBUaGUgcHRpZCByZXR1
 cm5lZCBieSB0aGUgdGFyZ2V0IGJlbmVhdGggdXMgaXMgdGhlIHB0aWQgb2YgdGhlIHByb2Nlc3Mu
 CisJIFdlIG5lZWQgdG8gZmluZCB3aGljaCB0aHJlYWQgaXMgY3VycmVudGx5IGFjdGl2ZSBhbmQg
 cmV0dXJuIAorCSBpdHMgcHRpZC4gICovCisgICAgICB1cGRhdGVfbHdwYnVmICgmdHN0YXR1cyk7
 CisgIAorICAgICAgLyogTG9vcCBjaGVja2luZyBmb3IgYWRkaXRpb25hbCB0aHJlYWRzIHRoYXQg
 YXJlIHdhaXRpbmcsIGFuZCBnYXRoZXIKKwkgdXAgdGhlaXIgc3RhdHVzLiAgKi8KKyAgICAgIHdo
 aWxlICgxKQorCXsKKwkgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMs
 IFdOT0hBTkcpOworCSAgaWYgKFBJREdFVCAocHRpZCkgPT0gLTEpCisJICAgIGJyZWFrOworCSAg
 dXBkYXRlX2x3cGJ1ZiAoJnRzdGF0dXMpOworCX0KKyAgICB9CisgIAorICAvKiBGaW5kIGEgc3Vp
 dGFibGUgc2lnbmFsbGVkIHRocmVhZC4gIFBpY2sgdGhlIHN0ZXBwZWQgb25lLCBpZiB0aGVyZQor
 ICAgICBpcyBvbmU7IG90aGVyd2lzZSBwaWNrIGEgcmFuZG9tIG9uZS4gICovCisgIHNlbF90aHJl
 YWQgPSBOVUxMOworICBzaWdfdGhyZWFkcyA9IDA7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgbHdw
 X2NvdW50OyBpKyspCisgICAgeworICAgICAgaWYgKGx3cF9idWZmZXJbaV0uc2lnbmFsbGVkKQor
 CXsKKwkgIHNpZ190aHJlYWRzKys7CisJICBpZiAoVElER0VUIChsd3BfYnVmZmVyW2ldLnB0aWQp
 ID09IHN0ZXBfbHdwaWQpCisJICAgIHsKKwkgICAgICAvKiBJZiB0aGVyZSBpcyBhIHN0ZXBwZWQg
 dGhyZWFkLCBwaWNrIHRoYXQgb25lLiAgKi8KKwkgICAgICBzZWxfdGhyZWFkID0gJmx3cF9idWZm
 ZXJbaV07CisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJpbnRmX3VuZmlsdGVy
 ZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFc6IFBpY2tpbmcgcHRpZCAlZCwlbGQgYmVjYXVz
 ZSBpdCBpcyBzdGVwcGVkXG4iLAorCQkJCSAgICBQSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpLAor
 CQkJCSAgICBUSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpKTsKKwkgICAgICBicmVhazsKKwkgICAg
 fQorCSAgLyogUmFuZG9tbHkgcGljayB0aGlzIG9uZSBvciBrZWVwIHRoZSBwcmV2aW91cyBjaG9p
 Y2UsCisJICAgICBzdWNoIHRoYXQgYWxsIG9mIHRoZSBzaWduYWxsZWQgdGhyZWFkcyBoYXZlIGFu
 IGVxdWFsCisJICAgICBwcm9iYWJpbGl0eSBvZiBiZWluZyBwaWNrZWQuICAqLworCSAgaWYgKHNl
 bF90aHJlYWQgPT0gTlVMTCB8fCAKKwkgICAgICAoKChkb3VibGUpIHJhbmQgKCkpIC8gKFJBTkRf
 TUFYICsgMS4wKSkgPCAoMS4wIC8gc2lnX3RocmVhZHMpKQorCSAgICB7CisJICAgICAgc2VsX3Ro
 cmVhZCA9ICZsd3BfYnVmZmVyW2ldOworCSAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwkJ
 ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiTlRXOiBQaWNraW5nIHB0
 aWQgJWQsJWxkIG91dCBvZiAlZFxuIiwKKwkJCQkgICAgUElER0VUIChzZWxfdGhyZWFkLT5wdGlk
 KSwKKwkJCQkgICAgVElER0VUIChzZWxfdGhyZWFkLT5wdGlkKSwgc2lnX3RocmVhZHMpOworCSAg
 ICB9CisJfQorICAgIH0KKyAgCisgIC8qIFNjYW4gdGhlIExXUCB0YWJsZSBhZ2Fpbi4gIEZvciBl
 YWNoIHNpZ25hbGxlZCBMV1Agb3RoZXIgdGhhbiB0aGUKKyAgICAgY2hvc2VuIG9uZSwgYmFjayBp
 dCB1cCB0byB0aGUgYnJlYWtwb2ludCBpZiBpdCB3YXMgc3RvcHBlZCBieSBhCisgICAgIGJyZWFr
 cG9pbnQgYW5kIG1hcmsgaXQgYXMgbm90IHNpZ25hbGxlZCAoaXQgd2lsbCByZS1icmVhayBuZXh0
 CisgICAgIHRpbWUgd2UgcnVuIHRoZSB3aG9sZSBwcm9jZXNzKS4gIE90aGVyIExXUHMgKHRob3Nl
 IHdpdGggc2lnbmFscworICAgICBvdGhlciB0aGFuIGJyZWFrcG9pbnQgc3RvcCkgYXJlIGNvdW50
 ZWQgYnV0IG5vdCBiYWNrZWQgdXA7IGlmIHdlCisgICAgIGZpbmQgYW55IG9mIHRob3NlIHRoZW4g
 dGhvc2Ugd2lsbCBiZSBkZWxpdmVyZWQgbmV4dC4gICovCisgIHBlbmRpbmdfc2lncyA9IDA7Cisg
 IGlmIChzaWdfdGhyZWFkcyA+IDEpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IGx3cF9j
 b3VudDsgaSsrKQorCXsKKwkgIC8qIFNraXAgdGhlIHNlbGVjdGVkIExXUC4gICovCisJICBpZiAo
 Jmx3cF9idWZmZXJbaV0gPT0gc2VsX3RocmVhZCkKKwkgICAgY29udGludWU7CisJICAKKwkgIGlm
 IChsd3BfYnVmZmVyW2ldLnNpZ25hbGxlZCkKKwkgICAgeworCSAgICAgIGlmIChXSUZTVE9QUEVE
 IChsd3BfYnVmZmVyW2ldLndhaXRzdGF0dXMpKQorCQl7CisJCSAgaWYgKCFuYnNkX3RocmVhZF9j
 YW5jZWxfYnJlYWtwb2ludCAoJmx3cF9idWZmZXJbaV0pKQorCQkgICAgcGVuZGluZ19zaWdzKys7
 CisJCX0KKwkgICAgICBlbHNlCisJCXBlbmRpbmdfc2lncysrOworCSAgICB9CisJfQorICAgIH0K
 KyAgCisgIHB0aWQgPSBpbmZlcmlvcl9wdGlkOworICBpZiAoc2VsX3RocmVhZCAhPSBOVUxMKQor
 ICAgIHsKKyAgICAgIHB0aWQgPSAgTUVSR0VQSUQgKFBJREdFVCAocHRpZCksIFRJREdFVCAoc2Vs
 X3RocmVhZC0+cHRpZCkpOworICAgICAgKnN0YXR1cyA9IHRzdGF0dXM7CisgICAgICAKKyAgICAg
 IC8qIFRoZSBzaWduYWwgZm9yIHRoaXMgdGhyZWFkIGlzIG5vdyBiZWluZyByZXBvcnRlZCwgc28g
 Y2xlYXIKKwkgdGhlIGZsYWcgdGhhdCBzYXlzIGl0IGhhc24ndCBiZWVuIHJlcG9ydGVkIHlldC4g
 ICovCisgICAgICBzZWxfdGhyZWFkLT5zaWduYWxsZWQgPSAwOworICAgIH0KKyAgZWxzZSBpZiAo
 ZGVidWdfbmJzZF90aHJlYWQpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor
 CQkJIk5UVzogbm8gc2lnbmFsbGVkIHRocmVhZFxuIik7CisKKyAgaWYgKGRlYnVnX25ic2RfdGhy
 ZWFkKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSJOVFc6IHJldHVy
 bmluZyBwdGlkICVkLCVsZFxuIiwKKwkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCkpOwor
 CisgIHJldHVybiBwdGlkOworfQorCisvKiBUaGUgInRvX21vdXJuX2luZmVyaW9yIiBtZXRob2Qg
 b2YgdGhlIG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9t
 b3Vybl9pbmZlcmlvciAodm9pZCkKK3sKKyAgaW50IHN0YXR1czsKKworICAvKiBXYWl0IGp1c3Qg
 b25lIG1vcmUgdGltZSB0byBjb2xsZWN0IHRoZSBpbmZlcmlvcidzIGV4aXQgc3RhdHVzLgorICAg
 ICBEbyBub3QgY2hlY2sgd2hldGhlciB0aGlzIHN1Y2NlZWRzIHRob3VnaCwgc2luY2Ugd2UgbWF5
 IGJlCisgICAgIGRlYWxpbmcgd2l0aCBhIHByb2Nlc3MgdGhhdCB3ZSBhdHRhY2hlZCB0by4gIFN1
 Y2ggYSBwcm9jZXNzIHdpbGwKKyAgICAgb25seSByZXBvcnQgaXRzIGV4aXQgc3RhdHVzIHRvIGl0
 cyBvcmlnaW5hbCBwYXJlbnQuICAqLworICB3YWl0cGlkIChwdGlkX2dldF9waWQgKGluZmVyaW9y
 X3B0aWQpLCAmc3RhdHVzLCBXTk9IQU5HKTsKKworICBnZW5lcmljX21vdXJuX2luZmVyaW9yICgp
 OworCisgIC8qIGlmICghaGF2ZV9pbmZlcmlvcnMgKCkpICovCisgICAgdW5wdXNoX3RhcmdldCAo
 Jm5ic2RfdGhyZWFkX29wcyk7Cit9CisKKworLyogVGhlICJ0b190aHJlYWRfYWxpdmUiIG1ldGhv
 ZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Ro
 cmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCit7CisgIC8qIFRoZSB0aHJlYWQgbGlzdCBtYWludGFp
 bmVkIGJ5IEdEQiBpcyB1cCB0byBkYXRlLCBzaW5jZSB3ZSB1cGRhdGUKKyAgICAgaXQgZXZlcnl0
 aW1lIHdlIHN0b3AuICAgU28gY2hlY2sgdGhpcyBsaXN0LiAgKi8KKyAgcmV0dXJuIGluX3RocmVh
 ZF9saXN0IChwdGlkKTsKK30KKworLyogVGhlICJ0b19waWRfdG9fc3RyIiBtZXRob2Qgb2YgdGhl
 IG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyBjaGFyICoKK25ic2RfdGhyZWFkX3BpZF90
 b19zdHIgKHB0aWRfdCBwdGlkKQoreworICBpZiAoVElER0VUIChwdGlkKSA9PSAwKQorICAgIHsK
 KyAgICAgIHJldHVybiBub3JtYWxfcGlkX3RvX3N0ciAocHRpZCk7CisgICAgfQorICByZXR1cm4g
 eHN0cnByaW50ZiAoXygiVGhyZWFkICVsZCIpLCBUSURHRVQgKHB0aWQpKTsKK30KKworLyogVXBk
 YXRlIHRoZSB0YXJnZXRfb3BzIHdpdGggb3VyIHRocmVhZCBtYWNoaW5lcnkuICAqLworCit2b2lk
 Citpbml0X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpCit7CisgIC8qIHQt
 PnRvX2RldGFjaCAgICAgICAgICAgICA9IG5ic2RfdGhyZWFkX2RldGFjaDsgKi8KKyAgdC0+dG9f
 cmVzdW1lICAgICAgICAgICAgID0gbmJzZF90aHJlYWRfcmVzdW1lOworICB0LT50b193YWl0ICAg
 ICAgICAgICAgICAgPSBuYnNkX3RocmVhZF93YWl0OworICB0LT50b19tb3Vybl9pbmZlcmlvciAg
 ICAgPSBuYnNkX3RocmVhZF9tb3Vybl9pbmZlcmlvcjsKKyAgdC0+dG9fdGhyZWFkX2FsaXZlICAg
 ICAgID0gbmJzZF90aHJlYWRfdGhyZWFkX2FsaXZlOworICB0LT50b19waWRfdG9fc3RyICAgICAg
 ICAgPSBuYnNkX3RocmVhZF9waWRfdG9fc3RyOworCisgIGVuYWJsZV9uYnNkX3RocmVhZCAoKTsK
 K30KKwordm9pZAorX2luaXRpYWxpemVfbmJzZF90aHJlYWQgKHZvaWQpCit7CisjaWYgMAorICBp
 bml0X25ic2RfdGhyZWFkX29wcyAoKTsKKyAgYWRkX3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7
 CisjZW5kaWYKKworICBhZGRfc2V0c2hvd196aW50ZWdlcl9jbWQgKCJuYnNkLXRocmVhZCIsIGNs
 YXNzX21haW50ZW5hbmNlLAorCQkJICAgICZkZWJ1Z19uYnNkX3RocmVhZCwgXygiXAorU2V0IGRl
 YnVnZ2luZyBvZiBOZXRCU0QgdGhyZWFkIG1vZHVsZS4iKSwgXygiXAorU2hvdyBkZWJ1Z2dpbmcg
 b2YgTmV0QlNEIHRocmVhZCBtb2R1bGUuIiksIF8oIlwKK0VuYWJsZXMgcHJpbnRmIGRlYnVnZ2lu
 ZyBvdXRwdXQuIiksCisJCQkgICAgTlVMTCwKKwkJCSAgICBzaG93X2RlYnVnX25ic2RfdGhyZWFk
 LAorCQkJICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsKK30KLS0tIC4vZ251L2Rp
 c3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuaC5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6MDUuMDAwMDAw
 MDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmgJMjAxMC0wNC0x
 OSAxMTo0MzowNS4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSwyNSBAQAorLyogVGhyZWFkcyBz
 dXBwb3J0IGZvciBOZXRCU0QgNS4wLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0
 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvbnRyaWJ1dGVkIGJ5IFBhdWwgS29uaW5nLCBE
 ZWxsLCBpbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9n
 cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
 ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
 c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
 ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
 bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
 b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
 IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl
 bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo
 YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
 IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
 YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
 LAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCitleHRlcm4gdm9pZCBpbml0
 X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpOworCi0tLSAuL2dudS9kaXN0
 L2dkYjYvZ2RiL2kzODZic2QtbmF0LmMub3JpZwkyMDA3LTAyLTI0IDA4OjA1OjE4LjAwMDAwMDAw
 MCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5jCTIwMTAtMDQtMTkg
 MTI6NDU6MDEuMDAwMDAwMDAwIC0wNDAwCkBAIC05MCw3ICs5MCw3IEBACiAKIC8qIFN1cHBseSB0
 aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBHUkVHUywgdG8gUkVHQ0FDSEUuICAqLwog
 Ci1zdGF0aWMgdm9pZAordm9pZAogaTM4NmJzZF9zdXBwbHlfZ3JlZ3NldCAoc3RydWN0IHJlZ2Nh
 Y2hlICpyZWdjYWNoZSwgY29uc3Qgdm9pZCAqZ3JlZ3MpCiB7CiAgIGNvbnN0IGNoYXIgKnJlZ3Mg
 PSBncmVnczsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgR1JFR1MuICBJZiBSRUdOVU0gaXMgLTEs
 IGNvbGxlY3QgYW5kIHN0b3JlIGFsbCBhcHByb3ByaWF0ZQogICAgcmVnaXN0ZXJzLiAgKi8KIAot
 c3RhdGljIHZvaWQKK3ZvaWQKIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChjb25zdCBzdHJ1Y3Qg
 cmVnY2FjaGUgKnJlZ2NhY2hlLAogCQkJIHZvaWQgKmdyZWdzLCBpbnQgcmVnbnVtKQogewotLS0g
 Li9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5oLm9yaWcJMjAwNi0wNy0wMiAxNjoxNDox
 NS4wMDAwMDAwMDAgLTA0MDAKKysrIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4NmJzZC1uYXQuaAky
 MDEwLTA0LTE5IDExOjQzOjA1LjAwMDAwMDAwMCAtMDQwMApAQCAtMjcsNCArMjcsMTEgQEAKIAog
 ZXh0ZXJuIHN0cnVjdCB0YXJnZXRfb3BzICppMzg2YnNkX3RhcmdldCAodm9pZCk7CiAKK2V4dGVy
 biB2b2lkIGkzODZic2Rfc3VwcGx5X2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs
 IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZ3JlZ3Mp
 OworCitleHRlcm4gdm9pZCBpMzg2YnNkX2NvbGxlY3RfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJl
 Z2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
 b2lkICpncmVncywgaW50IHJlZ251bSk7CisKKwogI2VuZGlmIC8qIGkzODZic2QtbmF0LmggKi8K
 LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4Nm5ic2QtbmF0LmMub3JpZwkyMDA4LTAxLTI1IDA3
 OjM1OjQ4LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2bmJzZC1u
 YXQuYwkyMDEwLTA0LTE5IDE0OjM1OjE2LjAwMDAwMDAwMCAtMDQwMApAQCAtMjAsMjIgKzIwLDI5
 IEBACiAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCiAKICNpbmNsdWRlICJkZWZz
 LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKICNpbmNsdWRlICJnZGJjb3JlLmgiCiAjaW5jbHVk
 ZSAicmVnY2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKIAogI2luY2x1ZGUgImkzODYtdGRl
 cC5oIgorI2luY2x1ZGUgImkzODctdGRlcC5oIgogI2luY2x1ZGUgImkzODZic2QtbmF0LmgiCisj
 aW5jbHVkZSAibmJzZC10aHJlYWQuaCIKIAogLyogU3VwcG9ydCBmb3IgZGVidWdnaW5nIGtlcm5l
 bCB2aXJ0dWFsIG1lbW9yeSBpbWFnZXMuICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
 aW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+CiAjaW5jbHVk
 ZSA8bWFjaGluZS9mcmFtZS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvcGNiLmg+CiAKICNpbmNsdWRl
 ICJuYnNkLW5hdC5oIgogI2luY2x1ZGUgImJzZC1rdm0uaCIKIAorZXh0ZXJuIGludCBkZWJ1Z19u
 YnNkX3RocmVhZDsKKwogc3RhdGljIGludAogaTM4Nm5ic2Rfc3VwcGx5X3BjYiAoc3RydWN0IHJl
 Z2NhY2hlICpyZWdjYWNoZSwgc3RydWN0IHBjYiAqcGNiKQogewpAQCAtOTksNiArMTA2LDE1OSBA
 QAogfQogDAogCisKKy8qIE1hY3JvIHRvIGRldGVybWluZSBpZiBhIHJlZ2lzdGVyIGlzIGZldGNo
 ZWQgd2l0aCBQVF9HRVRSRUdTLiAgKi8KKyNkZWZpbmUgR0VUUkVHU19TVVBQTElFUyhyZWdudW0p
 IFwKKyAgKCgwIDw9IChyZWdudW0pICYmIChyZWdudW0pIDw9IDE1KSkKKworI2lmZGVmIEhBVkVf
 UFRfR0VUWE1NUkVHUworLyogU2V0IHRvIDEgaWYgdGhlIGtlcm5lbCBzdXBwb3J0cyBQVF9HRVRY
 TU1SRUdTLiAgSW5pdGlhbGl6ZWQgdG8gLTEKKyAgIHNvIHRoYXQgd2UgdHJ5IFBUX0dFVFhNTVJF
 R1MgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiAgKi8KK3N0YXRpYyBpbnQgaGF2ZV9wdHJhY2VfeG1t
 cmVncyA9IC0xOworI2VuZGlmCisgDAorIAorLyogRmV0Y2ggcmVnaXN0ZXIgUkVHTlVNIGZyb20g
 dGhlIGluZmVyaW9yLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzCisgICBmb3IgYWxsIHJlZ2lz
 dGVycyAoaW5jbHVkaW5nIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMpLiAgKi8KKworc3Rh
 dGljIHZvaWQKK2kzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVycyAoaW50IHJlZ251bSkK
 K3sKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCBHRVRSRUdTX1NVUFBMSUVTIChyZWdudW0pKQorICAg
 IHsKKyAgICAgIHN0cnVjdCByZWcgcmVnczsKKworICAgICAgaWYgKHB0cmFjZSAoUFRfR0VUUkVH
 UywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3Ms
 IFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQorCXBlcnJvcl93aXRoX25hbWUgKF8oIkNv
 dWxkbid0IGdldCByZWdpc3RlcnMiKSk7CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkK
 Kwl7CisJICBpZiAocmVnbnVtID09IC0xKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z
 dGRsb2csCisJCQkJIk5GSVI6IHB0aWQgJWQsJWxkLCByZWdudW0gJWRcbiIsCisJCQkJUElER0VU
 IChpbmZlcmlvcl9wdGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0pOwor
 CSAgZWxzZQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIk5GSVI6
 IHB0aWQgJWQsJWxkLCByZWdudW0gJWQ6ICV4XG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRp
 ZCksIFRJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtLCAoKGludCAqKSAmcmVncylb
 cmVnbnVtXSk7CisJfQorCisgICAgICBpMzg2YnNkX3N1cHBseV9ncmVnc2V0IChjdXJyZW50X3Jl
 Z2NhY2hlLCAmcmVncyk7CisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9
 CisKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAg
 IHsKKyAgICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdT
 CisgICAgICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJl
 Z3MgIT0gMAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRp
 ZCksCisJCSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9w
 dGlkKSkgPT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKwkgIGkzODdfc3Vw
 cGx5X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgLTEsIHhtbXJlZ3MpOworCX0KKyAgICAgIGVs
 c2UKKwl7CisgICAgICAgICAgaWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVy
 aW9yX3B0aWQpLAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJmZwcmVncywgVElER0VUIChp
 bmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNvdWxkbid0
 IGdldCBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CisKKwkgIGkzODdfc3VwcGx5X2ZzYXZlIChj
 dXJyZW50X3JlZ2NhY2hlLCAtMSwgJmZwcmVncyk7CisJfQorI2Vsc2UKKyAgICAgIGlmIChwdHJh
 Y2UgKFBUX0dFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZ
 UEVfQVJHMykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJcGVycm9y
 X3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKwor
 ICAgICAgaTM4N19zdXBwbHlfZnNhdmUgKGN1cnJlbnRfcmVnY2FjaGUsIC0xLCAmZnByZWdzKTsK
 KyNlbmRpZgorICAgIH0KK30KKworLyogU3RvcmUgcmVnaXN0ZXIgUkVHTlVNIGJhY2sgaW50byB0
 aGUgaW5mZXJpb3IuICBJZiBSRUdOVU0gaXMgLTEsIGRvCisgICB0aGlzIGZvciBhbGwgcmVnaXN0
 ZXJzIChpbmNsdWRpbmcgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycykuICAqLworCitzdGF0
 aWMgdm9pZAoraTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzIChpbnQgcmVnbnVtKQor
 eworICBpZiAocmVnbnVtID09IC0xIHx8IEdFVFJFR1NfU1VQUExJRVMgKHJlZ251bSkpCisgICAg
 eworICAgICAgc3RydWN0IHJlZyByZWdzOworCisgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdT
 LCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAorICAgICAgICAgICAgICAgICAgKFBUUkFDRV9UWVBF
 X0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKyAgICAgICAgcGVy
 cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHJlZ2lzdGVycyIpKTsKKworICAgICAgaTM4
 NmJzZF9jb2xsZWN0X2dyZWdzZXQgKGN1cnJlbnRfcmVnY2FjaGUsICZyZWdzLCByZWdudW0pOwor
 CisgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJeworCSAgaWYgKHJlZ251bSA9PSAtMSkK
 KwkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVk
 LCVsZCwgcmVnbnVtICVkXG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRpZCksIFRJREdFVCAo
 aW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtKTsKKwkgIGVsc2UKKwkgICAgZnByaW50Zl91bmZp
 bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVkLCVsZCwgcmVnbnVtICVkOiAl
 eFxuIiwKKwkJCQlQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBUSURHRVQgKGluZmVyaW9yX3B0aWQp
 LAorCQkJCXJlZ251bSwgKChpbnQgKikgJnJlZ3MpW3JlZ251bV0pOworCX0KKyAgICAgIAorICAg
 ICAgaWYgKHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkgICAg
 ICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9
 PSAtMSkKKyAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgcmVnaXN0
 ZXJzIikpOworCisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9CisKKyAg
 aWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAgIHsKKyAg
 ICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAg
 ICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJlZ3MgIT0g
 MAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJ
 CSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkg
 PT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKworCSAgaTM4N19jb2xsZWN0
 X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCB4bW1yZWdzKTsKKworCSAgaWYgKHB0
 cmFjZSAoUFRfU0VUWE1NUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAgICAgKFBU
 UkFDRV9UWVBFX0FSRzMpIHhtbXJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQor
 ICAgICAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgWE1NIHJlZ2lz
 dGVycyIpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaGF2ZV9wdHJhY2VfeG1tcmVncyA9IDA7
 CisjZW5kaWYKKyAgICAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1MsIFBJREdFVCAoaW5m
 ZXJpb3JfcHRpZCksCisJCSAgICAgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQg
 KGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKwkgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRu
 J3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKworICAgICAgICAgIGkzODdfY29sbGVj
 dF9mc2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCAmZnByZWdzKTsKKworICAgICAgICAg
 IGlmIChwdHJhY2UgKFBUX1NFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAg
 ICAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09
 IC0xKQorCSAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBw
 b2ludCBzdGF0dXMiKSk7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAgICAgIH0KKyNl
 bmRpZgorICAgIH0KK30KKworDAorCiAvKiBQcm92aWRlIGEgcHJvdG90eXBlIHRvIHNpbGVuY2Ug
 LVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwogdm9pZCBfaW5pdGlhbGl6ZV9pMzg2bmJzZF9uYXQg
 KHZvaWQpOwogCkBAIC0xMDksNyArMjY5LDEwIEBACiAKICAgLyogQWRkIHNvbWUgZXh0cmEgZmVh
 dHVyZXMgdG8gdGhlIGNvbW1vbiAqQlNEL2kzODYgdGFyZ2V0LiAgKi8KICAgdCA9IGkzODZic2Rf
 dGFyZ2V0ICgpOworICBpbml0X25ic2RfdGhyZWFkX29wcyAodCk7CiAgIHQtPnRvX3BpZF90b19l
 eGVjX2ZpbGUgPSBuYnNkX3BpZF90b19leGVjX2ZpbGU7CisgIHQtPnRvX2ZldGNoX3JlZ2lzdGVy
 cyA9IGkzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVyczsKKyAgdC0+dG9fc3RvcmVfcmVn
 aXN0ZXJzID0gaTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzOyAgCiAgIGFkZF90YXJn
 ZXQgKHQpOwogCiAgIC8qIFN1cHBvcnQgZGVidWdnaW5nIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBp
 bWFnZXMuICAqLwotLS0gLi9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvaTM4Ni9kZWZzLm1rLm9yaWcJ
 MjAwNi0xMS0yNSAxMTozODo1MS4wMDAwMDAwMDAgLTA1MDAKKysrIC4vZ251L3Vzci5iaW4vZ2Ri
 Ni9hcmNoL2kzODYvZGVmcy5tawkyMDEwLTA0LTE5IDEzOjQ1OjExLjAwMDAwMDAwMCAtMDQwMApA
 QCAtMyw1ICszLDUgQEAKICMgR2VuZXJhdGVkIGZyb206IE5ldEJTRDogbWtuYXRpdmUuY29tbW9u
 LHYgMS44IDIwMDYvMDUvMjYgMTk6MTc6MjEgbXJnIEV4cCAKICMKIEdfSU5URVJOQUxfQ0ZMQUdT
 PSAgICAgLUkuIC1JJHtHTlVIT1NURElTVH0vZ2RiIC1JJHtHTlVIT1NURElTVH0vZ2RiL2NvbmZp
 ZyAtRExPQ0FMRURJUj0iXCIvdXNyL3NoYXJlL2xvY2FsZVwiIiAtREhBVkVfQ09ORklHX0ggLUkk
 e0dOVUhPU1RESVNUfS9nZGIvLi4vaW5jbHVkZS9vcGNvZGUgLUkke0dOVUhPU1RESVNUfS9nZGIv
 Li4vcmVhZGxpbmUvLi4gIC1JLi4vYmZkIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2JmZCAtSSR7
 R05VSE9TVERJU1R9L2dkYi8uLi9pbmNsdWRlICAtSS4uL2ludGwgLUkke0dOVUhPU1RESVNUfS9n
 ZGIvLi4vaW50bCAgLURNSV9PVVQ9MSAtRFRVST0xIC1XaW1wbGljaXQgLVdyZXR1cm4tdHlwZSAt
 V2NvbW1lbnQgLVd0cmlncmFwaHMgLVdmb3JtYXQgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJp
 dGggLVdmb3JtYXQtbm9ubGl0ZXJhbCAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1mdW5jdGlvbiAt
 V25vLXBvaW50ZXItc2lnbiAKLUdfTElCR0RCX09CUz1pMzg2LXRkZXAubyBpMzg3LXRkZXAubyBp
 Mzg2YnNkLXRkZXAubyBpMzg2bmJzZC10ZGVwLm8gbmJzZC10ZGVwLm8gIGNvcmVsb3cubyBzb2xp
 Yi5vIHNvbGliLXN2cjQubyBzZXItYmFzZS5vIHNlci11bml4Lm8gc2VyLXBpcGUubyBzZXItdGNw
 Lm8gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyAgbmJzZC1uYXQubyBpMzg2YnNkLW5hdC5vIGkz
 ODZuYnNkLW5hdC5vIGJzZC1rdm0ubyAgcmVtb3RlLm8gZGNhY2hlLm8gcmVtb3RlLXV0aWxzLm8g
 dHJhY2Vwb2ludC5vIGF4LWdlbmVyYWwubyBheC1nZGIubyByZW1vdGUtZmlsZWlvLm8gIGNsaS1k
 dW1wLm8gIGNsaS1kZWNvZGUubyBjbGktc2NyaXB0Lm8gY2xpLWNtZHMubyBjbGktc2V0c2hvdy5v
 IGNsaS11dGlscy5vICBjbGktbG9nZ2luZy5vICBjbGktaW50ZXJwLm8gbWktb3V0Lm8gbWktY29u
 c29sZS5vICBtaS1jbWRzLm8gbWktY21kLWVudi5vIG1pLWNtZC12YXIubyBtaS1jbWQtYnJlYWsu
 byBtaS1jbWQtc3RhY2subyAgbWktY21kLWZpbGUubyBtaS1jbWQtZGlzYXMubyBtaS1zeW1ib2wt
 Y21kcy5vICBtaS1pbnRlcnAubyAgbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0b3B0Lm8gbWkt
 Y29tbW9uLm8gcG9zaXgtaGRlcC5vIHR1aS1jb21tYW5kLm8gIHR1aS1kYXRhLm8gIHR1aS1kaXNh
 c20ubyAgdHVpLWZpbGUubyB0dWkubyAgdHVpLWhvb2tzLm8gIHR1aS1pbnRlcnAubyAgdHVpLWlv
 Lm8gIHR1aS1sYXlvdXQubyAgdHVpLW91dC5vICB0dWktcmVncy5vICB0dWktc291cmNlLm8gIHR1
 aS1zdGFjay5vICB0dWktd2luLm8gIHR1aS13aW5kYXRhLm8gIHR1aS13aW5nZW5lcmFsLm8gIHR1
 aS13aW5zb3VyY2UubyBjLWV4cC5vICBjcC1uYW1lLXBhcnNlci5vICBvYmpjLWV4cC5vICBhZGEt
 ZXhwLm8gIGp2LWV4cC5vICBmLWV4cC5vIG0yLWV4cC5vIHAtZXhwLm8gIHZlcnNpb24ubyAgYW5u
 b3RhdGUubyAgYXV4di5vICBiZmQtdGFyZ2V0Lm8gIGJsb2NrZnJhbWUubyBicmVha3BvaW50Lm8g
 ZmluZHZhci5vIHJlZ2NhY2hlLm8gIGNoYXJzZXQubyBkaXNhc20ubyBkdW1teS1mcmFtZS5vICBz
 b3VyY2UubyB2YWx1ZS5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJp
 bnRjbWQubyAgYmxvY2subyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGxpbmVzcGVjLm8g
 ZGljdGlvbmFyeS5vICBpbmZjYWxsLm8gIGluZmNtZC5vIGluZnJ1bi5vICBleHBwcmludC5vIGVu
 dmlyb24ubyBzdGFjay5vIHRocmVhZC5vICBleGNlcHRpb25zLm8gIGluZi1jaGlsZC5vICBpbnRl
 cnBzLm8gIG1haW4ubyAgbWFjcm90YWIubyBtYWNyb2NtZC5vIG1hY3JvZXhwLm8gbWFjcm9zY29w
 ZS5vICBldmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIubyAgZ2Ri
 YXJjaC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJpLm8gY29weWluZy5vICBtZW1hdHRy
 Lm8gbWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gIHN0
 ZC1yZWdzLm8gIHNpZ25hbHMubyAga29kLm8ga29kLWNpc2NvLm8gIGdkYi1ldmVudHMubyAgZXhl
 Yy5vIGJjYWNoZS5vIG9iamZpbGVzLm8gb2JzZXJ2ZXIubyBtaW5zeW1zLm8gbWFpbnQubyBkZW1h
 bmdsZS5vICBkYnhyZWFkLm8gY29mZnJlYWQubyBjb2ZmLXBlLXJlYWQubyBlbGZyZWFkLm8gIGR3
 YXJmcmVhZC5vIGR3YXJmMnJlYWQubyBtaXBzcmVhZC5vIHN0YWJzcmVhZC5vIGNvcmVmaWxlLm8g
 IGR3YXJmMmV4cHIubyBkd2FyZjJsb2MubyBkd2FyZjItZnJhbWUubyAgYWRhLWxhbmcubyBjLWxh
 bmcubyBmLWxhbmcubyBvYmpjLWxhbmcubyAgdWktb3V0Lm8gY2xpLW91dC5vICB2YXJvYmoubyB3
 cmFwcGVyLm8gIGp2LWxhbmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vICBtMi1sYW5n
 Lm8gcC1sYW5nLm8gcC10eXBlcHJpbnQubyBwLXZhbHByaW50Lm8gIHNjbS1leHAubyBzY20tbGFu
 Zy5vIHNjbS12YWxwcmludC5vICBzZW50aW5lbC1mcmFtZS5vICBjb21wbGFpbnRzLm8gdHlwZXBy
 aW50Lm8gIGFkYS10eXBlcHJpbnQubyBjLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlw
 ZXByaW50Lm8gIGFkYS12YWxwcmludC5vIGMtdmFscHJpbnQubyBjcC12YWxwcmludC5vIGYtdmFs
 cHJpbnQubyBtMi12YWxwcmludC5vICBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIHRv
 cC5vIHV0aWxzLm8gIHVpLWZpbGUubyAgdXNlci1yZWdzLm8gIGZyYW1lLm8gZnJhbWUtdW53aW5k
 Lm8gZG91Ymxlc3QubyAgZnJhbWUtYmFzZS5vICBnbnUtdjItYWJpLm8gZ251LXYzLWFiaS5vIGhw
 YWNjLWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyAgY3AtbmFtZXNwYWNlLm8gIHJlZ2dyb3Vw
 cy5vIHJlZ3NldC5vICB0cmFkLWZyYW1lLm8gIHRyYW1wLWZyYW1lLm8gIHNvbGliLm8gc29saWIt
 bnVsbC5vICBwcm9sb2d1ZS12YWx1ZS5vIGluZmxvdy5vICAgIGluaXQubworR19MSUJHREJfT0JT
 PWkzODYtdGRlcC5vIGkzODctdGRlcC5vIGkzODZic2QtdGRlcC5vIGkzODZuYnNkLXRkZXAubyBu
 YnNkLXRkZXAubyAgY29yZWxvdy5vIHNvbGliLm8gc29saWItc3ZyNC5vIHNlci1iYXNlLm8gc2Vy
 LXVuaXgubyBzZXItcGlwZS5vIHNlci10Y3AubyBmb3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vICBu
 YnNkLW5hdC5vIG5ic2QtdGhyZWFkLm8gaTM4NmJzZC1uYXQubyBpMzg2bmJzZC1uYXQubyBic2Qt
 a3ZtLm8gIHJlbW90ZS5vIGRjYWNoZS5vIHJlbW90ZS11dGlscy5vIHRyYWNlcG9pbnQubyBheC1n
 ZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vICBjbGktZHVtcC5vICBjbGktZGVjb2Rl
 Lm8gY2xpLXNjcmlwdC5vIGNsaS1jbWRzLm8gY2xpLXNldHNob3cubyBjbGktdXRpbHMubyAgY2xp
 LWxvZ2dpbmcubyAgY2xpLWludGVycC5vIG1pLW91dC5vIG1pLWNvbnNvbGUubyAgbWktY21kcy5v
 IG1pLWNtZC1lbnYubyBtaS1jbWQtdmFyLm8gbWktY21kLWJyZWFrLm8gbWktY21kLXN0YWNrLm8g
 IG1pLWNtZC1maWxlLm8gbWktY21kLWRpc2FzLm8gbWktc3ltYm9sLWNtZHMubyAgbWktaW50ZXJw
 Lm8gIG1pLW1haW4ubyBtaS1wYXJzZS5vIG1pLWdldG9wdC5vIG1pLWNvbW1vbi5vIHBvc2l4LWhk
 ZXAubyB0dWktY29tbWFuZC5vICB0dWktZGF0YS5vICB0dWktZGlzYXNtLm8gIHR1aS1maWxlLm8g
 dHVpLm8gIHR1aS1ob29rcy5vICB0dWktaW50ZXJwLm8gIHR1aS1pby5vICB0dWktbGF5b3V0Lm8g
 IHR1aS1vdXQubyAgdHVpLXJlZ3MubyAgdHVpLXNvdXJjZS5vICB0dWktc3RhY2subyAgdHVpLXdp
 bi5vICB0dWktd2luZGF0YS5vICB0dWktd2luZ2VuZXJhbC5vICB0dWktd2luc291cmNlLm8gYy1l
 eHAubyAgY3AtbmFtZS1wYXJzZXIubyAgb2JqYy1leHAubyAgYWRhLWV4cC5vICBqdi1leHAubyAg
 Zi1leHAubyBtMi1leHAubyBwLWV4cC5vICB2ZXJzaW9uLm8gIGFubm90YXRlLm8gIGF1eHYubyAg
 YmZkLXRhcmdldC5vICBibG9ja2ZyYW1lLm8gYnJlYWtwb2ludC5vIGZpbmR2YXIubyByZWdjYWNo
 ZS5vICBjaGFyc2V0Lm8gZGlzYXNtLm8gZHVtbXktZnJhbWUubyAgc291cmNlLm8gdmFsdWUubyBl
 dmFsLm8gdmFsb3BzLm8gdmFsYXJpdGgubyB2YWxwcmludC5vIHByaW50Y21kLm8gIGJsb2NrLm8g
 c3ltdGFiLm8gc3ltZmlsZS5vIHN5bW1pc2MubyBsaW5lc3BlYy5vIGRpY3Rpb25hcnkubyAgaW5m
 Y2FsbC5vICBpbmZjbWQubyBpbmZydW4ubyAgZXhwcHJpbnQubyBlbnZpcm9uLm8gc3RhY2subyB0
 aHJlYWQubyAgZXhjZXB0aW9ucy5vICBpbmYtY2hpbGQubyAgaW50ZXJwcy5vICBtYWluLm8gIG1h
 Y3JvdGFiLm8gbWFjcm9jbWQubyBtYWNyb2V4cC5vIG1hY3Jvc2NvcGUubyAgZXZlbnQtbG9vcC5v
 IGV2ZW50LXRvcC5vIGluZi1sb29wLm8gY29tcGxldGVyLm8gIGdkYmFyY2gubyBhcmNoLXV0aWxz
 Lm8gZ2RidHlwZXMubyBvc2FiaS5vIGNvcHlpbmcubyAgbWVtYXR0ci5vIG1lbS1icmVhay5vIHRh
 cmdldC5vIHBhcnNlLm8gbGFuZ3VhZ2UubyBidWlsZHN5bS5vICBzdGQtcmVncy5vICBzaWduYWxz
 Lm8gIGtvZC5vIGtvZC1jaXNjby5vICBnZGItZXZlbnRzLm8gIGV4ZWMubyBiY2FjaGUubyBvYmpm
 aWxlcy5vIG9ic2VydmVyLm8gbWluc3ltcy5vIG1haW50Lm8gZGVtYW5nbGUubyAgZGJ4cmVhZC5v
 IGNvZmZyZWFkLm8gY29mZi1wZS1yZWFkLm8gZWxmcmVhZC5vICBkd2FyZnJlYWQubyBkd2FyZjJy
 ZWFkLm8gbWlwc3JlYWQubyBzdGFic3JlYWQubyBjb3JlZmlsZS5vICBkd2FyZjJleHByLm8gZHdh
 cmYybG9jLm8gZHdhcmYyLWZyYW1lLm8gIGFkYS1sYW5nLm8gYy1sYW5nLm8gZi1sYW5nLm8gb2Jq
 Yy1sYW5nLm8gIHVpLW91dC5vIGNsaS1vdXQubyAgdmFyb2JqLm8gd3JhcHBlci5vICBqdi1sYW5n
 Lm8ganYtdmFscHJpbnQubyBqdi10eXBlcHJpbnQubyAgbTItbGFuZy5vIHAtbGFuZy5vIHAtdHlw
 ZXByaW50Lm8gcC12YWxwcmludC5vICBzY20tZXhwLm8gc2NtLWxhbmcubyBzY20tdmFscHJpbnQu
 byAgc2VudGluZWwtZnJhbWUubyAgY29tcGxhaW50cy5vIHR5cGVwcmludC5vICBhZGEtdHlwZXBy
 aW50Lm8gYy10eXBlcHJpbnQubyBmLXR5cGVwcmludC5vIG0yLXR5cGVwcmludC5vICBhZGEtdmFs
 cHJpbnQubyBjLXZhbHByaW50Lm8gY3AtdmFscHJpbnQubyBmLXZhbHByaW50Lm8gbTItdmFscHJp
 bnQubyAgbmxtcmVhZC5vIHNlcmlhbC5vIG1kZWJ1Z3JlYWQubyB0b3AubyB1dGlscy5vICB1aS1m
 aWxlLm8gIHVzZXItcmVncy5vICBmcmFtZS5vIGZyYW1lLXVud2luZC5vIGRvdWJsZXN0Lm8gIGZy
 YW1lLWJhc2UubyAgZ251LXYyLWFiaS5vIGdudS12My1hYmkubyBocGFjYy1hYmkubyBjcC1hYmku
 byBjcC1zdXBwb3J0Lm8gIGNwLW5hbWVzcGFjZS5vICByZWdncm91cHMubyByZWdzZXQubyAgdHJh
 ZC1mcmFtZS5vICB0cmFtcC1mcmFtZS5vICBzb2xpYi5vIHNvbGliLW51bGwubyAgcHJvbG9ndWUt
 dmFsdWUubyBpbmZsb3cubyAgICBpbml0Lm8KIEdfU0lNX09CUz0K
 
 ------_=_NextPart_001_01CADFF2.CC0C5CAC--
 


Home | Main Index | Thread Index | Old Index