From: Alexander Barkov Date: February 23 2011 4:53am Subject: bzr commit into mysql-trunk branch (alexander.barkov:3704) WL#5331 List-Archive: http://lists.mysql.com/commits/131907 Message-Id: <201102230453.p1N4rYsu026881@bar.myoffice.izhnet.ru> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7813786199825870473==" --===============7813786199825870473== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline I0F0IGZpbGU6Ly8vaG9tZS9iYXIvbXlzcWwtYnpyL215c3FsLXRydW5rLnc1MzMxLyBiYXNlZCBv biByZXZpZDphbmRyZWkuZWxraW5Ab3JhY2xlLmNvbS0yMDExMDIyMjE1NTI0Ny1rMDdjMzcyNWFy ZnBoMjIzCgogMzcwNCBBbGV4YW5kZXIgQmFya292CTIwMTEtMDItMjMKICAgICAgV0wjNTMzMSBT dXBwb3J0IFVuaWNvZGUgZm9yIFdpbmRvd3MgY29tbWFuZCBsaW5lIGNsaWVudAogICAgICAKICAg ICAgQmFzZWQgb24gdGhlIG9yaWdpbmFsIHBhdGNoIGZvcm0gVmxhZGlzbGF2IFZhaW50cm91YjoK ICAgICAgaHR0cDovL2xpc3RzLm15c3FsLmNvbS9jb21taXRzLzEwNTM3OQogICAgICAKICAgICAg CiAgICAgICAgQCBjbGllbnQvbXlzcWwuY2MKICAgICAgICAtIGludHJvZHVjaW5nIG5ldyBmdW5j dGlvbiB0ZWVfd3JpdGUoKSwgdG8gcmV1c2UKICAgICAgICAgIGluIGEgbnVtYmVyIG9mIHBsYWNl cyB3aGVyZSBzaW1pbGFyIGxvb3BzIGRpc3BsYXlpbmcKICAgICAgICAgIGRhdGEgb2NjdXJzLgog ICAgICAgIC0gaW50cm9kdWNpbmcgZmxhZ3MgZm9yIHRlZV93cml0ZSgpLCB0byBzdXBwb3J0IGRp ZmZlcmVudAogICAgICAgICAgcHJpbnRpbmcgbW9kZXMsIGFjY29yZGluZyB0byAtLXhtbCwgLS1y YXcsIC0tdGFiLCBldGMsCiAgICAgICAgICBwYXJhbWV0ZXJzCiAgICAgICAgLSBJbnN0ZWFkIGlm IHVzaW5nIGFyZ3YgKHdoaWNoIGlzIGFsd2F5cyBpbiBBTlNJIGNvZGUgcGFnZSksCiAgICAgICAg ICB3ZSBub3cgdXNlIFVURjE2TEUgQVBJIHRvIGFjY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRz IG9uIFdpbmRvd3MsCiAgICAgICAgICB1c2luZyB0aGlzIHNjZW5hcmlvOgogICAgICAgICAgYS4g V2UgdHJhbnNsYXRlIGFyZ3VtZW50cyB0byBVVEY4TUI0IG9uIHN0YXJ0dXAuCiAgICAgICAgICBi LiBUaGVuIHdlIHByb2Nlc3MgYXJndW1lbnRzIGFuZCBkZXRlY3QgY29ubmVjdGlvbiBjaGFyYWN0 ZXIgc2V0CiAgICAgICAgICAgICBmcm9tIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0IGFyZ3VtZW50 cyAob3IgbXkuaW5pIHZhbHVlKSwKICAgICAgICAgICAgIG9yIGZyb20gdGhlIE9TIGxvY2FsaXph dGlvbiBpbmZvcm1hdGlvbiBieSBkZWZhdWx0LgogICAgICAgICAgYy4gVGhlbiB3ZSBjb252ZXJ0 IHVzZXIsIGRhdGFiYXNlIGFuZCB0aGUgLS1leGVjdXRlICgtZSkgYnVmZmVyCiAgICAgICAgICAg ICBmcm9tIFVURjhNQjQgdG8gdGhlIGNvbm5lY3Rpb24gY2hhcmFjdGVyIHNldC4KICAgICAgICAg IGQuIENvbm5lY3QKICAgICAgICAtIEluc3RlYWQgb2YgcHJpbnRpbmcgdXNpbmcgcHJpbnRpZi9m cHV0cyBmYW1pbHkgZnVuY3Rpb25zIG9uIFdpbmRvd3MsCiAgICAgICAgICB3aGljaCBhcmUgbGlt aXRlZCB0byB0aGUgY3VycmVudCBET1MgY29kZSBwYWdlIChjcDg1MCBvbiBhIFdlc3Rlcm4gbWFj aGluZSkKICAgICAgICAgIHdlIG5vdyB1c2UgVVRGMTZMRSBjb25zb2xlIEFQSSB0aHJvdWdoIHRo ZSBuZXcgbXlfd2luX2NvbnNvbGVfeHh4KCkgCiAgICAgICAgICBmdW5jdGlvbnMgaW1wbGVtZW50 ZWQgaW4gbXlfY29uaW8uYwogICAgICAgIC0gVXNpbmcgbXlzcWxfc2V0X2NoYXJhY3Rlcl9zZXQo KSBpbnN0ZWFkIG9mCiAgICAgICAgICBteXNxbF9vcHRpb24oT1BUX0NIQVJBQ1RFUl9TRVRfTkFN RSkgdG8ga25vdyB0aGUgb25nb2luZwogICAgICAgICAgc2Vzc2lvbiBjaGFyYWN0ZXIgc2V0ICpi ZWZvcmUqIG15c3FsX3JlYWxfY29ubmVjdCgpIGNhbGwsCiAgICAgICAgICB0byBjb252ZXJ0IHVz ZXIgYW5kIGRhdGFiYXNlIHByb3Blcmx5LgogICAgICAgIC0gbXlfd2luX2lzX2NvbnNvbGVfY2Fj aGVkKCkgaGFzIGJlZW4gYWRkZWQgdG8gY2FjaGUKICAgICAgICAgIG15X3dpbl9pc19jb25zb2xl KCkgcmVzdWx0IGZvciBzdGRvdXQgYW5kIHN0ZGVyciwKICAgICAgICAgIGZvciBwZXJmb3JtYW5j ZSBwdXJwb3Nlcy4KICAgICAgCiAgICAgICAgQCBjbGllbnQvbXlzcWx0ZXN0LmNjCiAgICAgICAg LSBJbnRyb2R1Y2luZyBhIG5ldyBteXNxbHRlc3QgY29tbWFuZDogLS1leGVjdywgdG8gCiAgICAg ICAgICBleGVjdXRlIGNvbW1hbmRzIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgY29ycmVjdGx5 IGluIFdpbmRvd3MuCiAgICAgIAogICAgICAKICAgICAgICBAIGluY2x1ZGUvbXlfc3lzLmgKICAg ICAgICAtIEFkZGluZyBwcm90b3R5cGVzIGZvciB0aGUgbXlfd2luX2NvbnNvbGVfeHh4KCkgZnVu Y3Rpb25zCiAgICAgIAogICAgICAgIEAgbXlzcWwtdGVzdC9ncmFudC50ZXN0CiAgICAgICAgQCBt eXNxbC10ZXN0L3QvbXlzcWwudGVzdAogICAgICAgIEAgbXlzcWwtdGVzdC90L215c3FsX2NwOTMy LnRlc3QKICAgICAgICBAIG15c3FsLXRlc3QvdC9teXNxbGJpbmxvZy1jcDkzMi50ZXN0CiAgICAg ICAgLSBVc2luZyAtLWV4ZWN3IGluc3RlYWQgb2YgLS1leGVjIGZvciB0aGUgYWZmZWN0ZWQgdGVz dHMKICAgICAgCiAgICAgICAgQCBteXN5cy9teV9jb25pby5jCiAgICAgICAgLSBJbXBsZW1lbnRp bmcgZnVuY3Rpb25zIGZvciBXaW5kb3dzIGNvbnNvbGUgcmVhZC93cml0ZSBhbmQKICAgICAgICAg IGNvbW1hbmQgbGluZSBhcmd1bWVudCBwcm9jZXNzaW5nLgogICAgICAgIC0gUmVtb3ZpbmcgbXlf Y2dldHMoKSwgYXMgaXQncyBub3QgdXNlZCBhbnkgbW9yZS4KICAgICAgCiAgICAgICAgQCBzcWwt Y29tbW9uL2NsaWVudC5jCiAgICAgICAgLSBGaXhpbmcgbXlzcWxfc2V0X2NoYXJhY3Rlcl9zZXQo KSB0byBzZXQgbXlzcWwuY2hhcnNldCBvbgogICAgICAgICAgYSBub24tY29ubmVjdGVkICJteXNx bCIuIFByZXZpb3VzbHkgc3VjaCBhIGNhbGwgY3Jhc2hlZC4KICAgICAgICAgIFRoaXMgY2hhbmdl IGFsbG93cyB0byBrbm93IHdoYXQgY2hhcmFjdGVyIHNldCBmb3IgdGhlCiAgICAgICAgICBvbmdv aW5nIHNlc3Npb24gaXMgZ29pbmcgdG8gYmUgKmJlZm9yZSogY2FsbGluZyBteXNxbF9yZWFsX2Nv bm5lY3QoKS4KICAgICAgICAgIFRoaXMgaXMgbmVlZGVkIGluIG15c3FsLmNjLCB0byBjb252ZXJ0 IHVzZXIgYW5kIGRhdGFiYXNlIGNvcnJlY3RseQogICAgICAgICAgb24gV2luZG93cy4KCiAgICBt b2RpZmllZDoKICAgICAgY2xpZW50L215c3FsLmNjCiAgICAgIGNsaWVudC9teXNxbHRlc3QuY2MK ICAgICAgaW5jbHVkZS9teV9zeXMuaAogICAgICBteXNxbC10ZXN0L3QvZ3JhbnQudGVzdAogICAg ICBteXNxbC10ZXN0L3QvbXlzcWwudGVzdAogICAgICBteXNxbC10ZXN0L3QvbXlzcWxfY3A5MzIu dGVzdAogICAgICBteXNxbC10ZXN0L3QvbXlzcWxiaW5sb2ctY3A5MzIudGVzdAogICAgICBteXN5 cy9teV9jb25pby5jCiAgICAgIHNxbC1jb21tb24vY2xpZW50LmMKPT09IG1vZGlmaWVkIGZpbGUg J2NsaWVudC9teXNxbC5jYycKLS0tIGEvY2xpZW50L215c3FsLmNjCTIwMTEtMDItMTUgMTI6Mzg6 MzkgKzAwMDAKKysrIGIvY2xpZW50L215c3FsLmNjCTIwMTEtMDItMjMgMDQ6NTM6MDcgKzAwMDAK QEAgLTE5NSw2ICsxOTUsNDMgQEAgc3RhdGljIENIQVJTRVRfSU5GTyAqY2hhcnNldF9pbmZvPSAm bXlfYwogCiBjb25zdCBjaGFyICpkZWZhdWx0X2RidWdfb3B0aW9uPSJkOnQ6bywvdG1wL215c3Fs LnRyYWNlIjsKIAorI2lmZGVmIF9fV0lOX18KKy8qCisgIEEgZmxhZyB0aGF0IGluZGljYXRlcyBp ZiAtLWV4ZWN1dGUgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkLAorICB0byBhdm9p ZCBkb3VibGUgY29udmVyc2lvbiBvbiByZWNvbm5lY3QuCisqLworc3RhdGljIG15X2Jvb2wgZXhl Y3V0ZV9idWZmZXJfY29udmVyc2lvbl9kb25lPSAwOworCisvKgorICBteV93aW5faXNfY29uc29s ZSguLi4pIGlzIHF1aXRlIHNsb3cuCisgIFdlIGNhY2hlIG15X3dpbl9pc19jb25zb2xlKCkgcmVz dWx0cyBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIuCisgIEFueSBvdGhlciBvdXRwdXQgZmlsZXMsIGV4 Y2VwdCBzdGRvdXQgYW5kIHN0ZGVyciwKKyAgY2Fubm90IGJlIFdpbmRvd3MgY29uc29sZS4KKyAg Tm90ZSwgaWYgbXlzcWwuZXhlIGlzIGV4ZWN1dGVkIGZyb20gYSBzZXJ2aWNlLCBpdHMgX2ZpbGVu byhzdGRvdXQpIGlzIC0xLAorICBzbyBzaGlmdCAoMSA8PCAtMSkgY2FuIHJldHVybiBpbXBsZW1l bnRhdGlvbiBkZWZpbmVkIHJlc3VsdC4KKyAgVGhpcyBjb3JuZXIgY2FzZSBpcyB0YWtlbiBpbnRv IGFjY291bnQsIGFzIHRoZSBzaGlmdCByZXN1bHQKKyAgd2lsbCBiZSBtdWx0aXBsaWVkIHRvIDAg YW5kIHdlJ2xsIGdldCAwIGFzIGEgcmVzdWx0LgorICBUaGUgc2FtZSBpcyB0cnVlIGZvciBzdGRl cnIuCisqLworc3RhdGljIHVpbnQgd2luX2lzX2NvbnNvbGVfY2FjaGU9IAorICAodGVzdChteV93 aW5faXNfY29uc29sZShzdGRvdXQpKSAqICgxIDw8IF9maWxlbm8oc3Rkb3V0KSkpIHwKKyAgKHRl c3QobXlfd2luX2lzX2NvbnNvbGUoc3RkZXJyKSkgKiAoMSA8PCBfZmlsZW5vKHN0ZGVycikpKTsK Kworc3RhdGljIGlubGluZSBteV9ib29sCitteV93aW5faXNfY29uc29sZV9jYWNoZWQoRklMRSAq ZmlsZSkKK3sKKyAgcmV0dXJuIHdpbl9pc19jb25zb2xlX2NhY2hlICYgKDEgPDwgX2ZpbGVubyhm aWxlKSk7Cit9CisjZW5kaWYgLyogX19XSU5fXyAqLworCisvKiBWYXJpb3VzIHByaW50aW5nIGZs YWdzICovCisjZGVmaW5lIE1ZX1BSSU5UX0VTQ18wIDEgIC8qIFJlcGxhY2UgMHgwMCBieXRlcyB0 byAiXDAiICAgICAgICAgICAgICAqLworI2RlZmluZSBNWV9QUklOVF9TUFNfMCAyICAvKiBSZXBs YWNlIDB4MDAgYnl0ZXMgdG8gc3BhY2UgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVlfUFJJTlRf WE1MICAgNCAgLyogRW5jb2RlIFhNTCBlbnRpdGllcyAgICAgICAgICAgICAgICAgICAgICovCisj ZGVmaW5lIE1ZX1BSSU5UX01CICAgIDggIC8qIFJlY29nbml6ZSBtdWx0aS1ieXRlIGNoYXJhY3Rl cnMgICAgICAgICAqLworI2RlZmluZSBNWV9QUklOVF9DVFJMIDE2ICAvKiBSZXBsYWNlIFRBQiwg TkwsIENSIHRvICJcdCIsICJcbiIsICJcciIgKi8KKwordm9pZCB0ZWVfd3JpdGUoRklMRSAqZmls ZSwgY29uc3QgY2hhciAqcywgc2l6ZV90IHNsZW4sIGludCBmbGFncyk7CiB2b2lkIHRlZV9mcHJp bnRmKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIHZvaWQgdGVlX2ZwdXRzKGNv bnN0IGNoYXIgKnMsIEZJTEUgKmZpbGUpOwogdm9pZCB0ZWVfcHV0cyhjb25zdCBjaGFyICpzLCBG SUxFICpmaWxlKTsKQEAgLTExMTMsNiArMTE1MCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYyxjaGFy ICphcmd2W10pCiAgICAgICBjbG9zZShzdGRvdXRfZmlsZW5vX2NvcHkpOyAgICAgICAgICAgICAv KiBDbGVhbiB1cCBkdXAoKS4gKi8KICAgfQogCisjaWZkZWYgX19XSU5fXworICAvKiBDb252ZXJ0 IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGZyb20gVVRGMTZMRSB0byBVVEY4TUI0LiAqLworICBt eV93aW5fdHJhbnNsYXRlX2NvbW1hbmRfbGluZV9hcmdzKCZteV9jaGFyc2V0X3V0ZjhtYjRfYmlu LCAmYXJnYywgJmFyZ3YpOworI2VuZGlmCisKICAgaWYgKGxvYWRfZGVmYXVsdHMoIm15Iixsb2Fk X2RlZmF1bHRfZ3JvdXBzLCZhcmdjLCZhcmd2KSkKICAgewogICAgIG15X2VuZCgwKTsKQEAgLTE4 ODUsMjIgKzE5MjcsOSBAQCBzdGF0aWMgaW50IHJlYWRfYW5kX2V4ZWN1dGUoYm9vbCBpbnRlcmFj CiAgICAgICAgIHRtcGJ1Zi5hbGxvYyg2NTUzNSk7CiAgICAgICB0bXBidWYubGVuZ3RoKDApOwog ICAgICAgYnVmZmVyLmxlbmd0aCgwKTsKLSAgICAgIHNpemVfdCBjbGVuOwotICAgICAgZG8KLSAg ICAgIHsKLQlsaW5lPSBteV9jZ2V0cygoY2hhciopdG1wYnVmLnB0cigpLCB0bXBidWYuYWxsb2Nl ZF9sZW5ndGgoKS0xLCAmY2xlbik7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQobGluZSwgY2xlbik7 Ci0gICAgICAgIC8qIAotICAgICAgICAgICBpZiB3ZSBnb3QgYnVmZmVyIGZ1bGx5IGZpbGxlZCB0 aGFuIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQKLSAgICAgICAgICAgc29tZXRoaW5nIGVsc2UgaXMg c3RpbGwgaW4gY29uc29sZSBpbnB1dCBidWZmZXIKLSAgICAgICAgKi8KLSAgICAgIH0gd2hpbGUg KHRtcGJ1Zi5hbGxvY2VkX2xlbmd0aCgpIDw9IGNsZW4pOwotICAgICAgLyogCi0gICAgICAgIEFu IGVtcHR5IGxpbmUgaXMgcmV0dXJuZWQgZnJvbSBteV9jZ2V0cyB3aGVuIHRoZXJlJ3MgZXJyb3Ig cmVhZGluZyA6Ci0gICAgICAgIEN0cmwtYyBmb3IgZXhhbXBsZQotICAgICAgKi8KLSAgICAgIGlm IChsaW5lKQotICAgICAgICBsaW5lPSBidWZmZXIuY19wdHIoKTsKKyAgICAgIGxpbmU9IG15X3dp bl9jb25zb2xlX3JlYWRsaW5lKGNoYXJzZXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyICopIHRtcGJ1Zi5wdHIoKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRtcGJ1Zi5hbGxvY2VkX2xlbmd0aCgpKTsKICNlbHNlCiAgICAgICBp ZiAob3B0X291dGZpbGUpCiAJZnB1dHMocHJvbXB0LCBPVVRGSUxFKTsKQEAgLTM0NTUsMTkgKzM0 ODQsMTIgQEAgdGVlX3ByaW50X3NpemVkX2RhdGEoY29uc3QgY2hhciAqZGF0YSwgdQogICAgIGdy aWQuICAoVGhlIFwwIGlzIGFsc28gdGhlIHJlYXNvbiB3ZSBjYW4ndCB1c2UgZnByaW50ZigpIC4p IAogICAqLwogICB1bnNpZ25lZCBpbnQgaTsKLSAgY29uc3QgY2hhciAqcDsKIAogICBpZiAocmln aHRfanVzdGlmaWVkKSAKICAgICBmb3IgKGk9IGRhdGFfbGVuZ3RoOyBpIDwgdG90YWxfYnl0ZXNf dG9fc2VuZDsgaSsrKQogICAgICAgdGVlX3B1dGMoKGludCknICcsIFBBR0VSKTsKIAotICBmb3Ig KGk9IDAsIHA9IGRhdGE7IGkgPCBkYXRhX2xlbmd0aDsgaSs9IDEsIHArPSAxKQotICB7Ci0gICAg aWYgKCpwID09ICdcMCcpCi0gICAgICB0ZWVfcHV0YygoaW50KScgJywgUEFHRVIpOwotICAgIGVs c2UKLSAgICAgIHRlZV9wdXRjKChpbnQpKnAsIFBBR0VSKTsKLSAgfQorICB0ZWVfd3JpdGUoUEFH RVIsIGRhdGEsIGRhdGFfbGVuZ3RoLCBNWV9QUklOVF9TUFNfMCB8IE1ZX1BSSU5UX01CKTsKIAog ICBpZiAoISByaWdodF9qdXN0aWZpZWQpIAogICAgIGZvciAoaT0gZGF0YV9sZW5ndGg7IGkgPCB0 b3RhbF9ieXRlc190b19zZW5kOyBpKyspCkBAIC0zNTg3LDE2ICszNjA5LDcgQEAgcHJpbnRfdGFi bGVfZGF0YV92ZXJ0aWNhbGx5KE1ZU1FMX1JFUyAqcgogICAgICAgICB0ZWVfZnByaW50ZihQQUdF UiwgIiUqczogIiwoaW50KSBtYXhfbGVuZ3RoLGZpZWxkLT5uYW1lKTsKICAgICAgIGlmIChjdXJb b2ZmXSkKICAgICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgICAgIGNvbnN0IGNo YXIgKnA7Ci0KLSAgICAgICAgZm9yIChpPSAwLCBwPSBjdXJbb2ZmXTsgaSA8IGxlbmd0aHNbb2Zm XTsgaSs9IDEsIHArPSAxKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCpwID09ICdcMCcpCi0g ICAgICAgICAgICB0ZWVfcHV0YygoaW50KScgJywgUEFHRVIpOwotICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgIHRlZV9wdXRjKChpbnQpKnAsIFBBR0VSKTsKLSAgICAgICAgfQorICAgICAgICB0 ZWVfd3JpdGUoUEFHRVIsIGN1cltvZmZdLCBsZW5ndGhzW29mZl0sIE1ZX1BSSU5UX1NQU18wIHwg TVlfUFJJTlRfTUIpOwogICAgICAgICB0ZWVfcHV0YygnXG4nLCBQQUdFUik7CiAgICAgICB9CiAg ICAgICBlbHNlCkBAIC0zNjY2LDE2ICszNjc5LDcgQEAgeG1sZW5jb2RlX3ByaW50KGNvbnN0IGNo YXIgKnNyYywgdWludCBsZQogICBpZiAoIXNyYykKICAgICB0ZWVfZnB1dHMoIk5VTEwiLCBQQUdF Uik7CiAgIGVsc2UKLSAgewotICAgIGZvciAoY29uc3QgY2hhciAqcCA9IHNyYzsgbGVuZ3RoOyBw KyssIGxlbmd0aC0tKQotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKnQ7Ci0gICAgICBpZiAoKHQg PSBhcnJheV92YWx1ZSh4bWxtZXRhLCAqcCkpKQotCXRlZV9mcHV0cyh0LCBQQUdFUik7Ci0gICAg ICBlbHNlCi0JdGVlX3B1dGMoKnAsIFBBR0VSKTsKLSAgICB9Ci0gIH0KKyAgICB0ZWVfd3JpdGUo UEFHRVIsIHNyYywgbGVuZ3RoLCBNWV9QUklOVF9YTUwgfCBNWV9QUklOVF9NQik7CiB9CiAKIApA QCAtMzY4NiwzNyArMzY5MCw5IEBAIHNhZmVfcHV0X2ZpZWxkKGNvbnN0IGNoYXIgKnBvcyx1bG9u ZyBsZW4KICAgICB0ZWVfZnB1dHMoIk5VTEwiLCBQQUdFUik7CiAgIGVsc2UKICAgewotICAgIGlm IChvcHRfcmF3X2RhdGEpCi0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyBpOwotICAgICAgLyog Q2FuJ3QgdXNlIHRlZV9mcHV0cygpLCBpdCBzdG9wcyB3aXRoIE5VTCBjaGFyYWN0ZXJzLiAqLwot ICAgICAgZm9yIChpPSAwOyBpIDwgbGVuZ3RoOyBpKyssIHBvcysrKQotICAgICAgICB0ZWVfcHV0 YygqcG9zLCBQQUdFUik7Ci0gICAgfQotICAgIGVsc2UgZm9yIChjb25zdCBjaGFyICplbmQ9cG9z K2xlbmd0aCA7IHBvcyAhPSBlbmQgOyBwb3MrKykKLSAgICB7Ci0jaWZkZWYgVVNFX01CCi0gICAg ICBpbnQgbDsKLSAgICAgIGlmICh1c2VfbWIoY2hhcnNldF9pbmZvKSAmJgotICAgICAgICAgIChs ID0gbXlfaXNtYmNoYXIoY2hhcnNldF9pbmZvLCBwb3MsIGVuZCkpKQotICAgICAgewotCSAgd2hp bGUgKGwtLSkKLQkgICAgdGVlX3B1dGMoKnBvcysrLCBQQUdFUik7Ci0JICBwb3MtLTsKLQkgIGNv bnRpbnVlOwotICAgICAgfQotI2VuZGlmCi0gICAgICBpZiAoISpwb3MpCi0JdGVlX2ZwdXRzKCJc XDAiLCBQQUdFUik7IC8vIFRoaXMgbWFrZXMgZXZlcnl0aGluZyBoYXJkCi0gICAgICBlbHNlIGlm ICgqcG9zID09ICdcdCcpCi0JdGVlX2ZwdXRzKCJcXHQiLCBQQUdFUik7IC8vIFRoaXMgd291bGQg ZGVzdHJveSB0YWIgZm9ybWF0Ci0gICAgICBlbHNlIGlmICgqcG9zID09ICdcbicpCi0JdGVlX2Zw dXRzKCJcXG4iLCBQQUdFUik7IC8vIFRoaXMgdG9vCi0gICAgICBlbHNlIGlmICgqcG9zID09ICdc XCcpCi0JdGVlX2ZwdXRzKCJcXFxcIiwgUEFHRVIpOwotCWVsc2UKLQl0ZWVfcHV0YygqcG9zLCBQ QUdFUik7Ci0gICAgfQorICAgIGludCBmbGFncz0gTVlfUFJJTlRfTUIgfCAob3B0X3Jhd19kYXRh ID8gMCA6IChNWV9QUklOVF9FU0NfMCB8IE1ZX1BSSU5UX0NUUkwpKTsKKyAgICAvKiBDYW4ndCB1 c2UgdGVlX2ZwdXRzKCksIGl0IHN0b3BzIHdpdGggTlVMIGNoYXJhY3RlcnMuICovCisgICAgdGVl X3dyaXRlKFBBR0VSLCBwb3MsIGxlbmd0aCwgZmxhZ3MpOwogICB9CiB9CiAKQEAgLTQzMTcsNyAr NDI5MywyOSBAQCBzcWxfcmVhbF9jb25uZWN0KGNoYXIgKmhvc3QsY2hhciAqZGF0YWJhCiAgICAg bXlzcWxfb3B0aW9ucygmbXlzcWwsIE1ZU1FMX0lOSVRfQ09NTUFORCwgaW5pdF9jb21tYW5kKTsK ICAgfQogCi0gIG15c3FsX29wdGlvbnMoJm15c3FsLCBNWVNRTF9TRVRfQ0hBUlNFVF9OQU1FLCBk ZWZhdWx0X2NoYXJzZXQpOworICBteXNxbF9zZXRfY2hhcmFjdGVyX3NldCgmbXlzcWwsIGRlZmF1 bHRfY2hhcnNldCk7CisjaWZkZWYgX19XSU5fXworICB1aW50IGNudl9lcnJvcnM7CisgIFN0cmlu ZyBjb252ZXJ0ZWRfZGF0YWJhc2UsIGNvbnZlcnRlZF91c2VyOworICBpZiAoIW15X2NoYXJzZXRf c2FtZSgmbXlfY2hhcnNldF91dGY4bWI0X2JpbiwgbXlzcWwuY2hhcnNldCkpCisgIHsKKyAgICAv KiBDb252ZXJ0IHVzZXIgYW5kIGRhdGFiYXNlIGZyb20gVVRGOE1CNCB0byBjb25uZWN0aW9uIGNo YXJhY3RlciBzZXQgKi8KKyAgICBpZiAodXNlcikKKyAgICB7CisgICAgICBjb252ZXJ0ZWRfdXNl ci5jb3B5KHVzZXIsIHN0cmxlbih1c2VyKSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICZteV9jaGFyc2V0X3V0ZjhtYjRfYmluLCBteXNxbC5jaGFyc2V0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAmY252X2Vycm9ycyk7CisgICAgICB1c2VyPSAoY2hhciAqKSBjb252ZXJ0ZWRf dXNlci5wdHIoKTsKKyAgICB9CisgICAgaWYgKGRhdGFiYXNlKQorICAgIHsKKyAgICAgIGNvbnZl cnRlZF9kYXRhYmFzZS5jb3B5KGRhdGFiYXNlLCBzdHJsZW4oZGF0YWJhc2UpICsgMSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZteV9jaGFyc2V0X3V0ZjhtYjRfYmluLCBteXNxbC5j aGFyc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNudl9lcnJvcnMpOworICAg ICAgZGF0YWJhc2U9IChjaGFyICopIGNvbnZlcnRlZF9kYXRhYmFzZS5wdHIoKTsKKyAgICB9Cisg IH0KKyNlbmRpZgogICAKICAgaWYgKG9wdF9wbHVnaW5fZGlyICYmICpvcHRfcGx1Z2luX2RpcikK ICAgICBteXNxbF9vcHRpb25zKCZteXNxbCwgTVlTUUxfUExVR0lOX0RJUiwgb3B0X3BsdWdpbl9k aXIpOwpAQCAtNDMzOSw3ICs0MzM3LDM4IEBAIHNxbF9yZWFsX2Nvbm5lY3QoY2hhciAqaG9zdCxj aGFyICpkYXRhYmEKICAgICB9CiAgICAgcmV0dXJuIC0xOwkJCQkJLy8gUmV0cnlhYmxlCiAgIH0K LSAgCisKKyNpZmRlZiBfX1dJTl9fCisgIC8qIENvbnZlcnQgLS1leGVjdXRlIGJ1ZmZlciBmcm9t IFVURjhNQjQgdG8gY29ubmVjdGlvbiBjaGFyYWN0ZXIgc2V0ICovCisgIGlmICghZXhlY3V0ZV9i dWZmZXJfY29udmVyc2lvbl9kb25lKysgJiYKKyAgICAgIHN0YXR1cy5saW5lX2J1ZmYgJiYKKyAg ICAgICFzdGF0dXMubGluZV9idWZmLT5maWxlICYmIC8qIENvbnZlcnQgb25seSAtZSBidWZmZXIs IG5vdCByZWFsIGZpbGUgKi8KKyAgICAgIHN0YXR1cy5saW5lX2J1ZmYtPmJ1ZmZlciA8IHN0YXR1 cy5saW5lX2J1ZmYtPmVuZCAmJiAvKiBOb24tZW1wdHkgKi8KKyAgICAgICFteV9jaGFyc2V0X3Nh bWUoJm15X2NoYXJzZXRfdXRmOG1iNF9iaW4sIG15c3FsLmNoYXJzZXQpKQorICB7CisgICAgU3Ry aW5nIHRtcDsKKyAgICBzaXplX3QgbGVuPSBzdGF0dXMubGluZV9idWZmLT5lbmQgLSBzdGF0dXMu bGluZV9idWZmLT5idWZmZXI7CisgICAgdWludCBkdW1teV9lcnJvcnM7CisgICAgLyoKKyAgICAg IERvbid0IGNvbnZlcnQgdHJhaWxpbmcgJ1xuJyBjaGFyYWN0ZXIgLSBpdCB3YXMgYXBwZW5kZWQg ZHVyaW5nCisgICAgICBsYXN0IGJhdGNoX3JlYWRsaW5lX2NvbW1hbmQoKSBjYWxsLiAKKyAgICAg IE9oZXJ3aXNlIHdlJ2xsIGdldCBhbiBleHRyYSBsaW5lLCB3aGljaCBtYWtlcyBzb21lIHRlc3Rz IGZhaWwuCisgICAgKi8KKyAgICBpZiAoc3RhdHVzLmxpbmVfYnVmZi0+YnVmZmVyW2xlbiAtIDFd ID09ICdcbicpCisgICAgICBsZW4tLTsKKyAgICBpZiAodG1wLmNvcHkoc3RhdHVzLmxpbmVfYnVm Zi0+YnVmZmVyLCBsZW4sCisgICAgICAgICAgICAgICAgICZteV9jaGFyc2V0X3V0ZjhtYjRfYmlu LCBteXNxbC5jaGFyc2V0LCAmZHVtbXlfZXJyb3JzKSkKKyAgICAgIHJldHVybiAxOworCisgICAg LyogRnJlZSB0aGUgb2xkIGxpbmUgYnVmZmVyICovCisgICAgYmF0Y2hfcmVhZGxpbmVfZW5kKHN0 YXR1cy5saW5lX2J1ZmYpOworCisgICAgLyogUmUtaW5pdGlhbGl6ZSBsaW5lIGJ1ZmZlciBmcm9t IHRoZSBjb252ZXJ0ZWQgc3RyaW5nICovCisgICAgaWYgKCEoc3RhdHVzLmxpbmVfYnVmZj0gYmF0 Y2hfcmVhZGxpbmVfY29tbWFuZChOVUxMLCAoY2hhciAqKSB0bXAuY19wdHJfc2FmZSgpKSkpCisg ICAgICByZXR1cm4gMTsKKyAgfQorI2VuZGlmIC8qIF9fV0lOX18gKi8KKwogICBjaGFyc2V0X2lu Zm89IG15c3FsLmNoYXJzZXQ7CiAgIAogICBjb25uZWN0ZWQ9MTsKQEAgLTQ2NDUsMTEgKzQ2NzQs ODIgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2NudHJsKFN0cmluZyAmYnVmZmVyKQogfQogCiAKKy8q KgorICBXcml0ZSBkYXRhIHRvIGEgc3RyZWFtLgorICBWYXJpb3VzIG1vZGVzLCBjb3JyZXNwb25k aW5nIHRvIC0tdGFiLCAtLXhtbCwgLS1yYXcgcGFyYW1ldGVycywKKyAgYXJlIHN1cHBvcnRlZC4K KworICBAcGFyYW0gZmlsZSAgIFN0cmVhbSB0byB3cml0ZSB0bworICBAcGFyYW0gcyAgICAgIFN0 cmluZyB0byB3cml0ZQorICBAcGFyYW0gc2xlbiAgIFN0cmluZyBsZW5ndGgKKyAgQGZsYWdzICAg ICAgICBGbGFncyBmb3IgLS10YWIsIC0teG1sLCAtLXJhdy4KKyovCit2b2lkIHRlZV93cml0ZShG SUxFICpmaWxlLCBjb25zdCBjaGFyICpzLCBzaXplX3Qgc2xlbiwgaW50IGZsYWdzKQoreworI2lm ZGVmIF9fV0lOX18KKyAgbXlfYm9vbCBpc19jb25zb2xlPSBteV93aW5faXNfY29uc29sZV9jYWNo ZWQoZmlsZSk7CisjZW5kaWYKKyAgY29uc3QgY2hhciAqc2U7CisgIGZvciAoc2U9IHMgKyBzbGVu OyBzIDwgc2U7IHMrKykKKyAgeworICAgIGNvbnN0IGNoYXIgKnQ7CisKKyAgICBpZiAoZmxhZ3Mg JiBNWV9QUklOVF9NQikKKyAgICB7CisgICAgICBpbnQgbWJsZW47CisgICAgICBpZiAodXNlX21i KGNoYXJzZXRfaW5mbykgJiYKKyAgICAgICAgICAobWJsZW49IG15X2lzbWJjaGFyKGNoYXJzZXRf aW5mbywgcywgc2UpKSkKKyAgICAgIHsKKyNpZmRlZiBfX1dJTl9fCisgICAgICAgIGlmIChpc19j b25zb2xlKQorICAgICAgICAgIG15X3dpbl9jb25zb2xlX3dyaXRlKGNoYXJzZXRfaW5mbywgcywg bWJsZW4pOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgZndyaXRlKHMsIDEsIG1ibGVu LCBmaWxlKTsKKyAgICAgICAgaWYgKG9wdF9vdXRmaWxlKQorICAgICAgICAgIGZ3cml0ZShzLCAx LCBtYmxlbiwgT1VURklMRSk7CisgICAgICAgIHMrPSBtYmxlbiAtIDE7CisgICAgICAgIGNvbnRp bnVlOworICAgICAgfQorICAgIH0KKworICAgIGlmICgoZmxhZ3MgJiBNWV9QUklOVF9YTUwpICYm ICh0PSBhcnJheV92YWx1ZSh4bWxtZXRhLCAqcykpKQorICAgICAgdGVlX2ZwdXRzKHQsIGZpbGUp OworICAgIGVsc2UgaWYgKChmbGFncyAmIE1ZX1BSSU5UX1NQU18wKSAmJiAqcyA9PSAnXDAnKQor ICAgICAgdGVlX3B1dGMoKGludCkgJyAnLCBmaWxlKTsgICAvLyBUaGlzIG1ha2VzIGV2ZXJ5dGhp bmcgaGFyZAorICAgIGVsc2UgaWYgKChmbGFncyAmIE1ZX1BSSU5UX0VTQ18wKSAmJiAqcyA9PSAn XDAnKQorICAgICAgdGVlX2ZwdXRzKCJcXDAiLCBmaWxlKTsgICAgICAvLyBUaGlzIG1ha2VzIGV2 ZXJ5dGhpbmcgaGFyZAorICAgIGVsc2UgaWYgKChmbGFncyAmIE1ZX1BSSU5UX0NUUkwpICYmICpz ID09ICdcdCcpCisgICAgICB0ZWVfZnB1dHMoIlxcdCIsIGZpbGUpOyAgICAgIC8vIFRoaXMgd291 bGQgZGVzdHJveSB0YWIgZm9ybWF0CisgICAgZWxzZSBpZiAoKGZsYWdzICYgTVlfUFJJTlRfQ1RS TCkgJiYgKnMgPT0gJ1xuJykKKyAgICAgIHRlZV9mcHV0cygiXFxuIiwgZmlsZSk7ICAgICAgLy8g VGhpcyB0b28KKyAgICBlbHNlIGlmICgoZmxhZ3MgJiBNWV9QUklOVF9DVFJMKSAmJiAqcyA9PSAn XFwnKQorICAgICAgdGVlX2ZwdXRzKCJcXFxcIiwgZmlsZSk7CisgICAgZWxzZQorICAgIHsKKyNp ZmRlZiBfX1dJTl9fCisgICAgICBpZiAoaXNfY29uc29sZSkKKyAgICAgICAgbXlfd2luX2NvbnNv bGVfcHV0YyhjaGFyc2V0X2luZm8sIChpbnQpICpzKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAg ICAgcHV0YygoaW50KSAqcywgZmlsZSk7CisgICAgICBpZiAob3B0X291dGZpbGUpCisgICAgICAg IHB1dGMoKGludCkgKnMsIE9VVEZJTEUpOworICAgIH0KKyAgfQorfQorCisKIHZvaWQgdGVlX2Zw cmludGYoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIHZhX2xpc3QgYXJn czsKIAogICB2YV9zdGFydChhcmdzLCBmbXQpOworI2lmZGVmIF9fV0lOX18KKyAgaWYgKG15X3dp bl9pc19jb25zb2xlX2NhY2hlZChmaWxlKSkKKyAgICBteV93aW5fY29uc29sZV92ZnByaW50Zihj aGFyc2V0X2luZm8sIGZtdCwgYXJncyk7CisgIGVsc2UKKyNlbmRpZgogICAodm9pZCkgdmZwcmlu dGYoZmlsZSwgZm10LCBhcmdzKTsKICAgdmFfZW5kKGFyZ3MpOwogCkBAIC00NjYyLDggKzQ3NjIs MjAgQEAgdm9pZCB0ZWVfZnByaW50ZihGSUxFICpmaWxlLCBjb25zdCBjaGFyIAogfQogCiAKKy8q CisgIFdyaXRlIGEgMC10ZXJtaW5hdGVkIHN0cmluZyB0byBmaWxlIGFuZCBPVVRGSUxFLgorICBU T0RPOiBwb3NzaWJseSBpdCdzIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gd2l0aCBsZW5ndGggc29t ZSBkYXksCisgIGUuZy4gdGVlX2ZucHV0cyhzLCBzbGVuLCBmaWxlKSwKKyAgdG8gcHJpbnQgbnVt ZXJvdXMgQVNDSUkgY29uc3RhbnQgc3RyaW5ncyBhbW9uZyBteXNxbC5jYworICBjb2RlLCB0byBh dm9pZCBzdHJsZW4ocykgaW4gbXlfd2luX2NvbnNvbGVfZnB1dHMoKS4KKyovCiB2b2lkIHRlZV9m cHV0cyhjb25zdCBjaGFyICpzLCBGSUxFICpmaWxlKQogeworI2lmZGVmIF9fV0lOX18KKyAgaWYg KG15X3dpbl9pc19jb25zb2xlX2NhY2hlZChmaWxlKSkKKyAgICBteV93aW5fY29uc29sZV9mcHV0 cyhjaGFyc2V0X2luZm8sIHMpOworICBlbHNlCisjZW5kaWYKICAgZnB1dHMocywgZmlsZSk7CiAg IGlmIChvcHRfb3V0ZmlsZSkKICAgICBmcHV0cyhzLCBPVVRGSUxFKTsKQEAgLTQ2NzIsMTcgKzQ3 ODQsMTcgQEAgdm9pZCB0ZWVfZnB1dHMoY29uc3QgY2hhciAqcywgRklMRSAqZmlsZQogCiB2b2lk IHRlZV9wdXRzKGNvbnN0IGNoYXIgKnMsIEZJTEUgKmZpbGUpCiB7Ci0gIGZwdXRzKHMsIGZpbGUp OwotICBmcHV0YygnXG4nLCBmaWxlKTsKLSAgaWYgKG9wdF9vdXRmaWxlKQotICB7Ci0gICAgZnB1 dHMocywgT1VURklMRSk7Ci0gICAgZnB1dGMoJ1xuJywgT1VURklMRSk7Ci0gIH0KKyAgdGVlX2Zw dXRzKHMsIGZpbGUpOworICB0ZWVfcHV0YygnXG4nLCBmaWxlKTsKIH0KIAogdm9pZCB0ZWVfcHV0 YyhpbnQgYywgRklMRSAqZmlsZSkKIHsKKyNpZmRlZiBfX1dJTl9fCisgIGlmIChteV93aW5faXNf Y29uc29sZV9jYWNoZWQoZmlsZSkpCisgICAgbXlfd2luX2NvbnNvbGVfcHV0YyhjaGFyc2V0X2lu Zm8sIGMpOworICBlbHNlCisjZW5kaWYKICAgcHV0YyhjLCBmaWxlKTsKICAgaWYgKG9wdF9vdXRm aWxlKQogICAgIHB1dGMoYywgT1VURklMRSk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnY2xpZW50L215 c3FsdGVzdC5jYycKLS0tIGEvY2xpZW50L215c3FsdGVzdC5jYwkyMDExLTAxLTI2IDIwOjEzOjMx ICswMDAwCisrKyBiL2NsaWVudC9teXNxbHRlc3QuY2MJMjAxMS0wMi0yMyAwNDo1MzowNyArMDAw MApAQCAtMzAyLDcgKzMwMiw3IEBAIGVudW0gZW51bV9jb21tYW5kcyB7CiAgIFFfRU5BQkxFX1dB Uk5JTkdTLCBRX0RJU0FCTEVfV0FSTklOR1MsCiAgIFFfRU5BQkxFX0lORk8sIFFfRElTQUJMRV9J TkZPLAogICBRX0VOQUJMRV9NRVRBREFUQSwgUV9ESVNBQkxFX01FVEFEQVRBLAotICBRX0VYRUMs IFFfREVMSU1JVEVSLAorICBRX0VYRUMsIFFfRVhFQ1csIFFfREVMSU1JVEVSLAogICBRX0RJU0FC TEVfQUJPUlRfT05fRVJST1IsIFFfRU5BQkxFX0FCT1JUX09OX0VSUk9SLAogICBRX0RJU1BMQVlf VkVSVElDQUxfUkVTVUxUUywgUV9ESVNQTEFZX0hPUklaT05UQUxfUkVTVUxUUywKICAgUV9RVUVS WV9WRVJUSUNBTCwgUV9RVUVSWV9IT1JJWk9OVEFMLCBRX1NPUlRFRF9SRVNVTFQsCkBAIC0zNzMs NiArMzczLDcgQEAgY29uc3QgY2hhciAqY29tbWFuZF9uYW1lc1tdPQogICAiZW5hYmxlX21ldGFk YXRhIiwKICAgImRpc2FibGVfbWV0YWRhdGEiLAogICAiZXhlYyIsCisgICJleGVjdyIsCiAgICJk ZWxpbWl0ZXIiLAogICAiZGlzYWJsZV9hYm9ydF9vbl9lcnJvciIsCiAgICJlbmFibGVfYWJvcnRf b25fZXJyb3IiLApAQCAtMjc1MCw4ICsyNzUxLDUyIEBAIHZvaWQgZnJlZV90bXBfc2hfZmlsZSgp CiAjZW5kaWYKIAogCi1GSUxFKiBteV9wb3BlbihEWU5BTUlDX1NUUklORyAqZHNfY21kLCBjb25z dCBjaGFyICptb2RlKQorRklMRSogbXlfcG9wZW4oRFlOQU1JQ19TVFJJTkcgKmRzX2NtZCwgY29u c3QgY2hhciAqbW9kZSwKKyAgICAgICAgICAgICAgIHN0cnVjdCBzdF9jb21tYW5kICpjb21tYW5k KQogeworI2lmIF9fV0lOX18KKyAgLyoKKyAgICAtLWV4ZWN3IGlzIGZvciB0ZXN0cyBleGVjdXRp bmcgY29tbWFuZHMgY29udGFpbmluZyBub24tQVNDSUkgY2hhcmFjdGVycy4KKworICAgIFRvIGNv cnJlY3RseSBzdGFydCBzdWNoIGEgcHJvZ3JhbSBvbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIHVzZSB0 aGUgIndpZGUiCisgICAgdmVyc2lvbiBvZiBwb3Blbiwgd2l0aCBwcmlvciB0cmFuc2xhdGlvbiBv ZiB0aGUgY29tbWFuZCBsaW5lIGZyb20KKyAgICB0aGUgZmlsZSBjaGFyYWN0ZXIgc2V0IHRvIHdp ZGUgc3RyaW5nLiBXZSB1c2UgdGhlIGN1cnJlbnQgdmFsdWUKKyAgICBvZiAtLWNoYXJhY3Rlcl9z ZXQgYXMgYSBmaWxlIGNoYXJhY3RlciBzZXQsIHNvIGJlZm9yZSB1c2luZyAtLWV4ZWN3CisgICAg bWFrZSBzdXJlIHRvIHNldCAtLWNoYXJhY3Rlcl9zZXQgcHJvcGVybHkuCisKKyAgICBJZiB3ZSB1 c2UgdGhlIG5vbi13aWRlIHZlcnNpb24gb2YgcG9wZW4sIFdpbmRvd3MgaW50ZXJuYWxseQorICAg IGNvbnZlcnRzIGNvbW1hbmQgbGluZSBmcm9tIHRoZSBjdXJyZW50IEFOU0kgY29kZSBwYWdlIHRv IHdpZGUgc3RyaW5nLgorICAgIEluIGNhc2Ugd2hlbiBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBjb21t YW5kIGxpbmUgZG9lcyBub3QgbWF0Y2ggdGhlCisgICAgY3VycmVudCBBTlNJIGNvZGUgcGFnZSwg bm9uLUFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGdhcmJsZWQgaW4gbW9zdCBjYXNlcy4KKworICAgIE9u IExpbnV4LCB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZCB0byBwb3BlbigpIGlzIGNvbnNpZGVyZWQK KyAgICBhcyBhIGJpbmFyeSBzdHJpbmcsIG5vIGFueSBpbnRlcm5hbCB0by13aWRlIGFuZCBmcm9t LXdpZGUKKyAgICBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb24gaGFwcGVucywgc28gd2UgZG9uJ3Qg bmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBPbiBMaW51eCAtLWV4ZWN3IGlzIGp1c3QgYSBzeW5v bnltIHRvIC0tZXhlYy4KKworICAgIEZvciBzaW1wbGljaXR5LCBhc3N1bWUgdGhhdCAgY29tbWFu ZCBsaW5lIGlzIGxpbWl0ZWQgdG8gNEtCCisgICAgKGxpa2UgaW4gY21kLmV4ZSkgYW5kIHRoYXQg bW9kZSBhdCBtb3N0IDEwIGNoYXJhY3RlcnMuCisgICovCisgIGlmIChjb21tYW5kLT50eXBlID09 IFFfRVhFQ1cpCisgIHsKKyAgICB3Y2hhcl90IHdjbWRbNDA5Nl07CisgICAgd2NoYXJfdCB3bW9k ZVsxMF07CisgICAgY29uc3QgY2hhciAqY21kPSBkc19jbWQtPnN0cjsKKyAgICB1aW50IGR1bW15 X2Vycm9yczsKKyAgICBzaXplX3QgbGVuOworICAgIGxlbj0gbXlfY29udmVydCgoY2hhciAqKSB3 Y21kLCBzaXplb2Yod2NtZCkgLSBzaXplb2Yod2NtZFswXSksCisgICAgICAgICAgICAgICAgICAg ICZteV9jaGFyc2V0X3V0ZjE2bGVfYmluLAorICAgICAgICAgICAgICAgICAgICBkc19jbWQtPnN0 ciwgc3RybGVuKGRzX2NtZC0+c3RyKSwgY2hhcnNldF9pbmZvLAorICAgICAgICAgICAgICAgICAg ICAmZHVtbXlfZXJyb3JzKTsKKyAgICB3Y21kW2xlbiAvIHNpemVvZih3Y2hhcl90KV09IDA7Cisg ICAgbGVuPSBteV9jb252ZXJ0KChjaGFyICopIHdtb2RlLCBzaXplb2Yod21vZGUpIC0gc2l6ZW9m KHdtb2RlWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgJm15X2NoYXJzZXRfdXRmMTZsZV9iaW4s CisgICAgICAgICAgICAgICAgICAgIG1vZGUsIHN0cmxlbihtb2RlKSwgY2hhcnNldF9pbmZvLCAm ZHVtbXlfZXJyb3JzKTsKKyAgICB3bW9kZVtsZW4gLyBzaXplb2Yod2NoYXJfdCldPSAwOworICAg IHJldHVybiBfd3BvcGVuKHdjbWQsIHdtb2RlKTsKKyAgfQorI2VuZGlmIC8qIF9fV0lOX18gKi8K KwogI2lmIGRlZmluZWQgX19XSU5fXyAmJiBkZWZpbmVkIFVTRV9DWUdXSU4KICAgLyogRHVtcCB0 aGUgY29tbWFuZCBpbnRvIGEgc2ggc2NyaXB0IGZpbGUgYW5kIGV4ZWN1dGUgd2l0aCBwb3BlbiAq LwogICBzdHJfdG9fZmlsZSh0bXBfc2hfbmFtZSwgZHNfY21kLT5zdHIsIGRzX2NtZC0+bGVuZ3Ro KTsKQEAgLTI4ODgsNyArMjkzMyw3IEBAIHZvaWQgZG9fZXhlYyhzdHJ1Y3Qgc3RfY29tbWFuZCAq Y29tbWFuZCkKICAgREJVR19QUklOVCgiaW5mbyIsICgiRXhlY3V0aW5nICclcycgYXMgJyVzJyIs CiAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zmlyc3RfYXJndW1lbnQsIGRzX2NtZC5z dHIpKTsKIAotICBpZiAoIShyZXNfZmlsZT0gbXlfcG9wZW4oJmRzX2NtZCwgInIiKSkgJiYgY29t bWFuZC0+YWJvcnRfb25fZXJyb3IpCisgIGlmICghKHJlc19maWxlPSBteV9wb3BlbigmZHNfY21k LCAiciIsIGNvbW1hbmQpKSAmJiBjb21tYW5kLT5hYm9ydF9vbl9lcnJvcikKICAgewogICAgIGR5 bnN0cl9mcmVlKCZkc19jbWQpOwogICAgIGRpZSgicG9wZW4oXCIlc1wiLCBcInJcIikgZmFpbGVk IiwgY29tbWFuZC0+Zmlyc3RfYXJndW1lbnQpOwpAQCAtODc2Myw2ICs4ODA4LDcgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICBkb19zaHV0ZG93bl9zZXJ2ZXIoY29t bWFuZCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBRX0VYRUM6CisgICAgICBjYXNlIFFf RVhFQ1c6CiAJZG9fZXhlYyhjb21tYW5kKTsKIAljb21tYW5kX2V4ZWN1dGVkKys7CiAJYnJlYWs7 Cgo9PT0gbW9kaWZpZWQgZmlsZSAnaW5jbHVkZS9teV9zeXMuaCcKLS0tIGEvaW5jbHVkZS9teV9z eXMuaAkyMDExLTAyLTA4IDE1OjU0OjEyICswMDAwCisrKyBiL2luY2x1ZGUvbXlfc3lzLmgJMjAx MS0wMi0yMyAwNDo1MzowNyArMDAwMApAQCAtOTQ2LDkgKzk0NiwxNCBAQCBpbnQgbXlfc2VjdXJp dHlfYXR0cl9jcmVhdGUoU0VDVVJJVFlfQVRUCiB2b2lkIG15X3NlY3VyaXR5X2F0dHJfZnJlZShT RUNVUklUWV9BVFRSSUJVVEVTICpzYSk7CiAKIC8qIGltcGxlbWVudGVkIGluIG15X2NvbmlvLmMg Ki8KLWNoYXIqIG15X2NnZXRzKGNoYXIgKnN0cmluZywgc2l6ZV90IGNsZW4sIHNpemVfdCogcGxl bik7Ci0KLSNlbmRpZgorbXlfYm9vbCBteV93aW5faXNfY29uc29sZShGSUxFICpmaWxlKTsKK2No YXIgKm15X3dpbl9jb25zb2xlX3JlYWRsaW5lKENIQVJTRVRfSU5GTyAqY3MsIGNoYXIgKm1iYnVm LCBzaXplX3QgbWJidWZzaXplKTsKK3ZvaWQgbXlfd2luX2NvbnNvbGVfd3JpdGUoQ0hBUlNFVF9J TkZPICpjcywgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pOwordm9pZCBteV93aW5f Y29uc29sZV9mcHV0cyhDSEFSU0VUX0lORk8gKmNzLCBjb25zdCBjaGFyICpkYXRhKTsKK3ZvaWQg bXlfd2luX2NvbnNvbGVfcHV0YyhDSEFSU0VUX0lORk8gKmNzLCBpbnQgYyk7Cit2b2lkIG15X3dp bl9jb25zb2xlX3ZmcHJpbnRmKENIQVJTRVRfSU5GTyAqY3MsIGNvbnN0IGNoYXIgKmZtdCwgdmFf bGlzdCBhcmdzKTsKK2ludCBteV93aW5fdHJhbnNsYXRlX2NvbW1hbmRfbGluZV9hcmdzKENIQVJT RVRfSU5GTyAqY3MsIGludCAqYWMsIGNoYXIgKioqYXYpOworI2VuZGlmIC8qIF9fV0lOX18gKi8K IAogI2luY2x1ZGUgPG15c3FsL3BzaS9wc2kuaD4KIAoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3Fs LXRlc3QvdC9ncmFudC50ZXN0JwotLS0gYS9teXNxbC10ZXN0L3QvZ3JhbnQudGVzdAkyMDEwLTEy LTE1IDE2OjE1OjQwICswMDAwCisrKyBiL215c3FsLXRlc3QvdC9ncmFudC50ZXN0CTIwMTEtMDIt MjMgMDQ6NTM6MDcgKzAwMDAKQEAgLTE0MDEsOSArMTQwMSwxMCBAQCB1c2UgdGVzdDsKICMKICMg QnVnIzIxNDMyIERhdGFiYXNlL1RhYmxlIG5hbWUgbGltaXRlZCB0byA2NCBieXRlcywgbm90IGNo YXJzLCBwcm9ibGVtcyB3aXRoIG11bHRpLWJ5dGUKICMKKy0tY2hhcmFjdGVyX3NldCB1dGY4CiBz ZXQgbmFtZXMgdXRmODsKIGdyYW50IHNlbGVjdCBvbiB0ZXN0LiogdG8g0Y7Qt9C10YBf0Y7Qt9C1 0YBAbG9jYWxob3N0OwotLS1leGVjICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD11dGY4 IC0tdXNlcj3RjtC30LXRgF/RjtC30LXRgCAtZSAic2VsZWN0IHVzZXIoKSIKKy0tZXhlY3cgJE1Z U1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggLS11c2VyPdGO0LfQtdGAX9GO0LfQtdGA IC1lICJzZWxlY3QgdXNlcigpIgogcmV2b2tlIGFsbCBvbiB0ZXN0LiogZnJvbSDRjtC30LXRgF/R jtC30LXRgEBsb2NhbGhvc3Q7CiBkcm9wIHVzZXIg0Y7Qt9C10YBf0Y7Qt9C10YBAbG9jYWxob3N0 OwogLS1lcnJvciBFUl9XUk9OR19TVFJJTkdfTEVOR1RICgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlz cWwtdGVzdC90L215c3FsLnRlc3QnCi0tLSBhL215c3FsLXRlc3QvdC9teXNxbC50ZXN0CTIwMTEt MDItMDUgMDU6MDY6MjkgKzAwMDAKKysrIGIvbXlzcWwtdGVzdC90L215c3FsLnRlc3QJMjAxMS0w Mi0yMyAwNDo1MzowNyArMDAwMApAQCAtNTEsMTMgKzUxLDE0IEBAIGRyb3AgdGFibGUgdDE7CiAj CiAjIEJ1ZyMxNzkzOSBXcm9uZyB0YWJsZSBmb3JtYXQgd2hlbiB1c2luZyBVVEY4IHN0cmluZ3MK ICMKLS0tZXhlYyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCAtLXRhYmxlIC1l ICJTRUxFQ1QgJ0pvaG4gRG9lJyBhcyAnX190YcOxZ8OoIMORw6Ntw6knIiAyPiYxCi0tLWV4ZWMg JE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggLS10YWJsZSAtZSAiU0VMRUNUICdf X3Rhw7Fnw6ggw5HDo23DqScgYXMgJ0pvaG4gRG9lJyIgMj4mMQorLS1jaGFyYWN0ZXJfc2V0IHV0 ZjgKKy0tZXhlY3cgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggLS10YWJsZSAt ZSAiU0VMRUNUICdKb2huIERvZScgYXMgJ19fdGHDsWfDqCDDkcOjbcOpJyIgMj4mMQorLS1leGVj dyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCAtLXRhYmxlIC1lICJTRUxFQ1Qg J19fdGHDsWfDqCDDkcOjbcOpJyBhcyAnSm9obiBEb2UnIiAyPiYxCiAKICMKICMgQnVnIzE4MjY1 IC0tIG15c3FsIGNsaWVudDogTm8gbG9uZ2VyIHJpZ2h0LWp1c3RpZmllcyBudW1lcmljIGNvbHVt bnMKICMKLS0tZXhlYyAkTVlTUUwgLXQgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQgdXRmOCB0ZXN0 IC1lICJjcmVhdGUgdGFibGUgdDEgKGkgaW50LCBqIGludCwgayBjaGFyKDI1KSBjaGFyc2V0IHV0 ZjgpOyBpbnNlcnQgaW50byB0MSAoaSkgdmFsdWVzICgxKTsgaW5zZXJ0IGludG8gdDEgKGspIHZh bHVlcyAoJzwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4nKTsgaW5zZXJ0IGludG8gdDEgKGspIHZh bHVlcyAoJzwtLS0tLScpOyBpbnNlcnQgaW50byB0MSAoaykgdmFsdWVzICgnzqTOtyDOs867z47P g8+DzrEnKTsgaW5zZXJ0IGludG8gdDEgKGspIHZhbHVlcyAoJ+GbluGatCDhmrfhm5bhm48nKTsg c2VsZWN0ICogZnJvbSB0MTsgRFJPUCBUQUJMRSB0MTsiCistLWV4ZWN3ICRNWVNRTCAtdCAtLWRl ZmF1bHQtY2hhcmFjdGVyLXNldCB1dGY4IHRlc3QgLWUgImNyZWF0ZSB0YWJsZSB0MSAoaSBpbnQs IGogaW50LCBrIGNoYXIoMjUpIGNoYXJzZXQgdXRmOCk7IGluc2VydCBpbnRvIHQxIChpKSB2YWx1 ZXMgKDEpOyBpbnNlcnQgaW50byB0MSAoaykgdmFsdWVzICgnPC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tPicpOyBpbnNlcnQgaW50byB0MSAoaykgdmFsdWVzICgnPC0tLS0tJyk7IGluc2VydCBpbnRv IHQxIChrKSB2YWx1ZXMgKCfOpM63IM6zzrvPjs+Dz4POsScpOyBpbnNlcnQgaW50byB0MSAoaykg dmFsdWVzICgn4ZuW4Zq0IOGat+GbluGbjycpOyBzZWxlY3QgKiBmcm9tIHQxOyBEUk9QIFRBQkxF IHQxOyIKIAogIwogIyAiREVTQ1JJQkUiIGNvbW1hbmRzIG1heSByZXR1cm4gc3RyYW5nZSBOVUxM bmVzcyBmbGFncy4KCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0L3QvbXlzcWxfY3A5MzIu dGVzdCcKLS0tIGEvbXlzcWwtdGVzdC90L215c3FsX2NwOTMyLnRlc3QJMjAwNy0wMi0yMSAxNjo1 MDo0OCArMDAwMAorKysgYi9teXNxbC10ZXN0L3QvbXlzcWxfY3A5MzIudGVzdAkyMDExLTAyLTIz IDA0OjUzOjA3ICswMDAwCkBAIC0xNSw4ICsxNSw5IEBACiAtLWV4ZWMgJE1ZU1FMIC0tZGVmYXVs dC1jaGFyYWN0ZXItc2V0PWNwOTMyIHRlc3QgLWUgImNoYXJzZXQgdXRmODsiCiAKICMgaXRzIHVz YWdlIHRvIHN3aXRjaCBpbnRlcm5hbGx5IGluIG15c3FsIHRvIHJlcXVlc3RlZCBjaGFyc2V0Ci0t LWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggdGVzdCAtZSAiY2hhcnNl dCBjcDkzMjsgc2VsZWN0ICfvv71cJzsgY3JlYXRlIHRhYmxlIHQxIChjX2NwOTMyIFRFWFQgQ0hB UkFDVEVSIFNFVCBjcDkzMik7IGluc2VydCBpbnRvIHQxIHZhbHVlcygn77+9XCcpOyBzZWxlY3Qg KiBmcm9tIHQxOyAgZHJvcCB0YWJsZSB0MTsiCi0tLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFy YWN0ZXItc2V0PXV0ZjggdGVzdCAtZSAiY2hhcnNldCBjcDkzMjsgc2VsZWN0ICfvv71cJyIKLS0t ZXhlYyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCB0ZXN0IC1lICIvKmNoYXJz ZXQgY3A5MzIgKi87IHNldCBjaGFyYWN0ZXJfc2V0X2NsaWVudD0gY3A5MzI7IHNlbGVjdCAn77+9 XCciCi0tLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggdGVzdCAtZSAi LyohXEMgY3A5MzIgKi87IHNldCBjaGFyYWN0ZXJfc2V0X2NsaWVudD0gY3A5MzI7IHNlbGVjdCAn 77+9XCciCistLWNoYXJhY3Rlcl9zZXQgbGF0aW4xCistLWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQt Y2hhcmFjdGVyLXNldD1sYXRpbjEgdGVzdCAtZSAiY2hhcnNldCBjcDkzMjsgc2VsZWN0ICfvv71c JzsgY3JlYXRlIHRhYmxlIHQxIChjX2NwOTMyIFRFWFQgQ0hBUkFDVEVSIFNFVCBjcDkzMik7IGlu c2VydCBpbnRvIHQxIHZhbHVlcygn77+9XCcpOyBzZWxlY3QgKiBmcm9tIHQxOyAgZHJvcCB0YWJs ZSB0MTsiCistLWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD1sYXRpbjEgdGVz dCAtZSAiY2hhcnNldCBjcDkzMjsgc2VsZWN0ICfvv71cJyIKKy0tZXhlY3cgJE1ZU1FMIC0tZGVm YXVsdC1jaGFyYWN0ZXItc2V0PWxhdGluMSB0ZXN0IC1lICIvKmNoYXJzZXQgY3A5MzIgKi87IHNl dCBuYW1lcyBjcDkzMiwgY2hhcmFjdGVyX3NldF9yZXN1bHRzPXV0Zjg7IHNlbGVjdCAn77+9XCci CistLWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD1sYXRpbjEgdGVzdCAtZSAi LyohXEMgY3A5MzIgKi87IHNldCBjaGFyYWN0ZXJfc2V0X2NsaWVudD0gY3A5MzI7IHNlbGVjdCAn 77+9XCciCiAKCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0L3QvbXlzcWxiaW5sb2ctY3A5 MzIudGVzdCcKLS0tIGEvbXlzcWwtdGVzdC90L215c3FsYmlubG9nLWNwOTMyLnRlc3QJMjAwOS0w OS0wNyAwNTo0Mjo1NCArMDAwMAorKysgYi9teXNxbC10ZXN0L3QvbXlzcWxiaW5sb2ctY3A5MzIu dGVzdAkyMDExLTAyLTIzIDA0OjUzOjA3ICswMDAwCkBAIC0xMCw4ICsxMCwxMCBAQCBSRVNFVCBN QVNURVI7CiAjIEJ1ZyMxNjIxNyAobXlzcWwgY2xpZW50IGRpZCBub3Qga25vdyBob3cgbm90IHN3 aXRjaCBpdHMgaW50ZXJuYWwgY2hhcnNldCkKIGNyZWF0ZSB0YWJsZSB0MyAoZiB0ZXh0IGNoYXJh Y3RlciBzZXQgdXRmOCk7CiBjcmVhdGUgdGFibGUgdDQgKGYgdGV4dCBjaGFyYWN0ZXIgc2V0IGNw OTMyKTsgCi0tLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggdGVzdCAt ZSAiaW5zZXJ0IGludG8gdDMgdmFsdWVzKF91dGY4J+OCvScpIgotLS1leGVjICRNWVNRTCAtLWRl ZmF1bHQtY2hhcmFjdGVyLXNldD1jcDkzMiB0ZXN0IC1lICJpbnNlcnQgaW50byB0NCB2YWx1ZXMo X2NwOTMyJ++/vVwnKTsiCistLWNoYXJhY3Rlcl9zZXQgdXRmOAorLS1leGVjdyAkTVlTUUwgLS1k ZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCB0ZXN0IC1lICJpbnNlcnQgaW50byB0MyB2YWx1ZXMo X3V0Zjgn44K9JykiCistLWNoYXJhY3Rlcl9zZXQgY3A5MzIKKy0tZXhlY3cgJE1ZU1FMIC0tZGVm YXVsdC1jaGFyYWN0ZXItc2V0PWNwOTMyIHRlc3QgLWUgImluc2VydCBpbnRvIHQ0IHZhbHVlcyhf Y3A5MzIn77+9XCcpOyIKIGZsdXNoIGxvZ3M7CiByZW5hbWUgdGFibGUgdDMgdG8gdDAzLCB0NCB0 byB0MDQ7CiBsZXQgJE1ZU1FMRF9EQVRBRElSPSBgc2VsZWN0IEBAZGF0YWRpcmA7Cgo9PT0gbW9k aWZpZWQgZmlsZSAnbXlzeXMvbXlfY29uaW8uYycKLS0tIGEvbXlzeXMvbXlfY29uaW8uYwkyMDA5 LTAyLTEzIDE2OjQxOjQ3ICswMDAwCisrKyBiL215c3lzL215X2NvbmlvLmMJMjAxMS0wMi0yMyAw NDo1MzowNyArMDAwMApAQCAtMTgsMjA1ICsxOCwyNjAgQEAKIAogI2lmZGVmIF9fV0lOX18KIAot c3RhdGljIEhBTkRMRSBteV9jb25pbnBmaD0gMDsgICAgIC8qIGNvbnNvbGUgaW5wdXQgKi8KIAot LyoKLSAgZnVuY3Rpb25zIG15X3B0aHJlYWRfYXV0b19tdXRleF9sb2NrICYgbXlfcHRocmVhZF9h dXRvX211dGV4X2ZyZWUKLSAgYXJlIGV4cGVyaW1lbnRhbCBhdCB0aGlzIG1vbWVudCwgdGhleSBh cmUgaW50ZW5kZWQgdG8gYnJpbmcKLSAgYWJpbGl0eSBvZiBwcm90ZWN0aW5nIGNvZGUgc2VjdGlv bnMgd2l0aG91dCBuZWNlc3NpdHkgdG8gZXhwbGljaXRseQotICBpbml0aWFsaXplIHN5bmNocm9u aXphdGlvbiBvYmplY3QgaW4gb25lIG9mIHRocmVhZHMKKy8qIFdpbmRvd3MgY29uc29sZSBoYW5k bGluZyAqLwogCi0gIGlmIGZvdW5kIHVzZWZ1bCB0aGV5IGFyZSB0byBiZSBleHBvcnRlZCBpbiBt eXN5cwotKi8KKy8qIE1heGltdW0gbGluZSBsZW5ndGggb24gV2luZG93cyBjb25zb2xlICovCisj ZGVmaW5lIE1BWF9DT05TT0xFX0xJTkVfU0laRSA2NTUzNQogCisvKioKKyAgRGV0ZXJtaW5lIGlm IGEgZmlsZSBpcyBhIHdpbmRvd3MgY29uc29sZQogCi0vKgotICBpbnQgbXlfcHRocmVhZF9hdXRv X211dGV4X2xvY2soSEFORExFKiBwaCwgY29uc3QgY2hhciogbmFtZSwgCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgaWQsIGludCB0aW1lKQotICBOT1RFUwotICAgIGNyZWF0 ZXMgYSBtdXRleCB3aXRoIGdpdmVuIG5hbWUgYW5kIHRyaWVzIHRvIGxvY2sgaXQgdGltZSBtc2Vj LgotICAgIG11dGV4IG5hbWUgaXMgYXBwZW5kZWQgd2l0aCBpZCB0byBhbGxvdyBzeXN0ZW0gd2lk ZSBvciBwcm9jZXNzIHdpZGUKLSAgICBsb2Nrcy4gSGFuZGxlIHRvIGNyZWF0ZWQgbXV0ZXggcmV0 dXJuZWQgaW4gcGggYXJndW1lbnQuCi0KLSAgUkVUVVJOCi0gICAgMAkgICAgICAgICAgICAgIHRo cmVhZCBvd25zIG11dGV4Ci0gICAgPD4wCSAgICAgICAgICAgIGVycm9yCi0qLwotCi1zdGF0aWMK LWludCBteV9wdGhyZWFkX2F1dG9fbXV0ZXhfbG9jayhIQU5ETEUqIHBoLCBjb25zdCBjaGFyKiBu YW1lLCBpbnQgaWQsIGludCB0aW1lKQotewotICBpbnQgcmVzOwotICBjaGFyIHRuYW1lW0ZOX1JF RkxFTl07Ci0gIAotICBzcHJpbnRmKHRuYW1lLCAiJXMtJTA4WCIsIG5hbWUsIGlkKTsKLSAgCi0g ICpwaD0gQ3JlYXRlTXV0ZXgoTlVMTCwgRkFMU0UsIHRuYW1lKTsKLSAgaWYgKCpwaCA9PSBOVUxM KQotICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKLQotICByZXM9IFdhaXRGb3JTaW5nbGVPYmpl Y3QoKnBoLCB0aW1lKTsKLSAgCi0gIGlmIChyZXMgPT0gV0FJVF9USU1FT1VUKQotICAgIHJldHVy biBFUlJPUl9TRU1fVElNRU9VVDsKLQotICBpZiAocmVzID09IFdBSVRfRkFJTEVEKQotICAgIHJl dHVybiBHZXRMYXN0RXJyb3IoKTsKKyAgQHBhcmFtIGZpbGUgSW5wdXQgc3RyZWFtCiAKKyAgQHJl dHVybgorICBAcmV0dmFsICAwIGlmIGZpbGUgaXMgbm90IFdpbmRvd3MgY29uc29sZQorICBAcmV0 dmFsICAxIGlmIGZpbGUgaXMgV2luZG93cyBjb25zb2xlCisqLworbXlfYm9vbAorbXlfd2luX2lz X2NvbnNvbGUoRklMRSAqZmlsZSkKK3sKKyAgRFdPUkQgbW9kZTsKKyAgaWYgKEdldENvbnNvbGVN b2RlKChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKF9maWxlbm8oZmlsZSkpLCAmbW9kZSkpCisgICAg cmV0dXJuIDE7CiAgIHJldHVybiAwOwogfQogCi0vKgotICBpbnQgbXlfcHRocmVhZF9hdXRvX211 dGV4X2ZyZWUoSEFORExFKiBwaCkKLQotICBOT1RFUwotICAgIHJlbGVhc2VzIGEgbXV0ZXguCiAK LSAgUkVUVVJOCi0gICAgMAkgICAgICAgICAgICAgIHRocmVhZCByZWxlYXNlZCBtdXRleAotICAg IDw+MAkgICAgICAgICAgICBlcnJvcgorLyoqCisgIFJlYWQgbGluZSBmcm9tIFdpbmRvd3MgY29u c29sZSB1c2luZyBVbmljb2RlIEFQSQorICBhbmQgdHJhbnNsYXRlIGlucHV0IHRvIHNlc3Npb24g Y2hhcmFjdGVyIHNldC4KKyAgTm90ZSwgYXMgV2luZG93cyBBUEkgYnJlYWtzIHN1cHBsZW1lbnRh cnkgY2hhcmFjdGVycworICBpbnRvIHR3byB3Y2hhcl90IHBpZWNlcywgd2UgY2Fubm90IHJlYWQg YW5kIGNvbnZlcnQgaW5kaXZpZHVhbAorICB3Y2hhcl90IHZhbHVlcyBzZXBhcmF0ZWx5LiBTbyBs ZXQncyB1c2UgYSBidWZmZXIgZm9yCisgIFVuaWNvZGUgY29uc29sZSBpbnB1dCwgYW5kIHRoZW4g Y29udmVydCBpdCB0byAiY3MiIGluIGEgc2luZ2xlIHNob3QuCisgIFN0cmluZyBpcyB0ZXJtaW5h dGVkIHdpdGggJ1wwJyBjaGFyYWN0ZXIuCisKKyAgQHBhcmFtIGNzICAgICAgICAgQ2hhcmFjdGVy IHN0cmluZyB0byBjb252ZXJ0IHRvLgorICBAcGFyYW0gbWJidWYgICAgICBXcml0ZSBpbnB1dCBk YXRhIGhlcmUuCisgIEBwYXJhbSBtYmJ1ZnNpemUgIE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUg aW4gbWJidWYuCiAKKyAgQHJlcnZhbCAgICAgICAgICAgUG9pbnRlciB0byBtYmJ1Ziwgb3IgTlVM TCBvbiBJLzAgZXJyb3IuCiAqLwotc3RhdGljCi1pbnQgbXlfcHRocmVhZF9hdXRvX211dGV4X2Zy ZWUoSEFORExFKiBwaCkKK2NoYXIgKgorbXlfd2luX2NvbnNvbGVfcmVhZGxpbmUoQ0hBUlNFVF9J TkZPICpjcywgY2hhciAqbWJidWYsIHNpemVfdCBtYmJ1ZnNpemUpCiB7Ci0gIGlmICgqcGgpCisg IHVpbnQgZHVtbXlfZXJyb3JzOworICBzdGF0aWMgd2NoYXJfdCB1MTZidWZbTUFYX0NPTlNPTEVf TElORV9TSVpFICsgMV0sICpwb3M7CisgIHNpemVfdCBtYmxlbjsKKyAgRFdPUkQgY29uc29sZV9t b2RlOworICBIQU5ETEUgY29uc29sZT0gR2V0U3RkSGFuZGxlKFNURF9JTlBVVF9IQU5ETEUpOwor CisgIERCVUdfQVNTRVJUKG1iYnVmc2l6ZSA+IDApOyAvKiBOZWVkIHNwYWNlIGZvciBhdCBsZWFz dCB0cmFpbGluZyAnXDAnICovCisgIEdldENvbnNvbGVNb2RlKGNvbnNvbGUsICZjb25zb2xlX21v ZGUpOworICBTZXRDb25zb2xlTW9kZShjb25zb2xlLCBFTkFCTEVfTElORV9JTlBVVCB8CisgICAg ICAgICAgICAgICAgICAgICAgICAgIEVOQUJMRV9QUk9DRVNTRURfSU5QVVQgfCBFTkFCTEVfRUNI T19JTlBVVCk7CisgIGZvcihwb3M9IHUxNmJ1ZjsgcG9zIDwgJnUxNmJ1ZltNQVhfQ09OU09MRV9M SU5FX1NJWkVdIDsgKQogICB7Ci0gICAgUmVsZWFzZU11dGV4KCpwaCk7Ci0gICAgQ2xvc2VIYW5k bGUoKnBoKTsKLSAgICAqcGg9IE5VTEw7CisgICAgRFdPUkQgbmNoYXJzOworICAgIGlmICghUmVh ZENvbnNvbGVXKGNvbnNvbGUsIHBvcywgMSwgJm5jaGFycywgTlVMTCkgfHwgbmNoYXJzID09IDAp CisgICAgeworICAgICAgU2V0Q29uc29sZU1vZGUoY29uc29sZSwgY29uc29sZV9tb2RlKTsKKyAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoKnBvcyA9PSBMJ1xyJykgLyogV2UgZG9u J3QgbmVlZCAnXHInIGluIHRoZSByZXN1bHQgc3RyaW5nLCBza2lwIGl0ICovCisgICAgICBjb250 aW51ZTsKKyAgICBpZiAoKnBvcyA9PSBMJ1xuJykKKyAgICAgIGJyZWFrOworICAgIHBvcysrOwog ICB9CisgIFNldENvbnNvbGVNb2RlKGNvbnNvbGUsIGNvbnNvbGVfbW9kZSk7CisgIC8qIENvbnZl cnQgVW5pY29kZSB0byBzZXNzaW9uIGNoYXJhY3RlciBzZXQgKi8KKyAgbWJsZW49IG15X2NvbnZl cnQobWJidWYsIG1iYnVmc2l6ZSAtIDEsIGNzLAorICAgICAgICAgICAgICAgICAgICAoY29uc3Qg Y2hhciAqKSB1MTZidWYsIChwb3MgLSB1MTZidWYpICogc2l6ZW9mKHdjaGFyX3QpLAorICAgICAg ICAgICAgICAgICAgICAmbXlfY2hhcnNldF91dGYxNmxlX2JpbiwgJmR1bW15X2Vycm9ycyk7Cisg IERCVUdfQVNTRVJUKG1ibGVuIDwgbWJidWZzaXplKTsgLyogU2FmZXR5ICovCisgIG1iYnVmW21i bGVuXT0gMDsKKyAgcmV0dXJuIG1iYnVmOworfQogCi0gIHJldHVybiAwOworCisvKioKKyAgVHJh bnNsYXRlIGNsaWVudCBjaGFyc2V0IHRvIFdpbmRvd3Mgd2NoYXJzIGZvciBjb25zb2xlIEkvTy4K KyAgVW5saWtlIGNvcHlfYW5kX2NvbnZlcnQoKSwgaW4gY2FzZSBvZiBhIHdyb25nIG11bHRpLWJ5 dGUgc2VxdWVuY2UKKyAgd2UgZG9uJ3QgcHJpbnQgJz8nIGNoYXJhY3Rlciwgd2UgZmFsbGJhY2sg dG8gSVNPLTg4NTktMSBpbnN0ZWFkLgorICBUaGlzIGdpdmVzIGEgYmV0dGVyIGlkZWEgaG93IGJp bmFyeSBkYXRhIChlLmcuIEJMT0IpIGxvb2sgbGlrZS4KKworICBAcGFyYW0gY3MgICAgICAgICAg IENoYXJhY3RlciBzZXQgb2YgdGhlIGlucHV0IHN0cmluZworICBAcGFyYW0gZnJvbSAgICAgICAg IElucHV0IHN0cmluZworICBAcGFyYW0gZnJvbV9sZW5ndGggIExlbmd0aCBvZiB0aGUgaW5wdXQg c3RyaW5nCisgIEBwYXJhbSB0b1tPVVRdICAgICAgV3JpdGUgVW5pY29kZSBkYXRhIGhlcmUKKyAg QHBhcmFtIHRvX2NoYXJzICAgICBOdW1iZXIgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUgaW4gInRv IgorKi8KK3N0YXRpYyBzaXplX3QKK215X21ic3RvdTE2cyhDSEFSU0VUX0lORk8gKmNzLCBjb25z dCB1Y2hhciAqIGZyb20sIHNpemVfdCBmcm9tX2xlbmd0aCwKKyAgICAgICAgICAgICB3Y2hhcl90 ICp0bywgc2l6ZV90IHRvX2NoYXJzKQoreworICBDSEFSU0VUX0lORk8gKnRvX2NzPSAmbXlfY2hh cnNldF91dGYxNmxlX2JpbjsKKyAgY29uc3QgdWNoYXIgKmZyb21fZW5kPSBmcm9tICsgZnJvbV9s ZW5ndGg7CisgIHdjaGFyX3QgKnRvX29yaWc9IHRvLCAqdG9fZW5kPSB0byArIHRvX2NoYXJzOwor ICBteV9jaGFyc2V0X2NvbnZfbWJfd2MgbWJfd2M9IGNzLT5jc2V0LT5tYl93YzsKKyAgbXlfY2hh cnNldF9jb252X3djX21iIHdjX21iPSB0b19jcy0+Y3NldC0+d2NfbWI7CisgIHdoaWxlIChmcm9t IDwgZnJvbV9lbmQpCisgIHsKKyAgICBpbnQgY252cmVzOworICAgIG15X3djX3Qgd2M7CisgICAg aWYgKChjbnZyZXM9ICgqbWJfd2MpKGNzLCAmd2MsIGZyb20sIGZyb21fZW5kKSkgPiAwKQorICAg IHsKKyAgICAgIGlmICghd2MpCisgICAgICAgIGJyZWFrOworICAgICAgZnJvbSs9IGNudnJlczsK KyAgICB9CisgICAgZWxzZSBpZiAoY252cmVzID09IE1ZX0NTX0lMU0VRKQorICAgIHsKKyAgICAg IHdjPSAobXlfd2NfdCkgKHVjaGFyKSAqZnJvbTsgLyogRmFsbGJhY2sgdG8gSVNPLTg4NTktMSAq LworICAgICAgZnJvbSs9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKGNudnJlcyA+IE1ZX0NTX1RP T1NNQUxMKQorICAgIHsKKyAgICAgIC8qCisgICAgICAgIEEgY29ycmVjdCBtdWx0aWJ5dGUgc2Vx dWVuY2UgZGV0ZWN0ZWQKKyAgICAgICAgQnV0IGl0IGRvZXNuJ3QgaGF2ZSBVbmljb2RlIG1hcHBp bmcuIAorICAgICAgKi8KKyAgICAgIHdjPSAnPyc7CisgICAgICBmcm9tKz0gKC1jbnZyZXMpOyAv KiBOb3RlOiBjbnZyZXMgaXMgbmVnYXRpdmUgaGVyZSAqLworICAgIH0KKyAgICBlbHNlIC8qIElu Y29tcGxldGUgY2hhcmFjdGVyICovCisgICAgeworICAgICAgd2M9IChteV93Y190KSAodWNoYXIp ICpmcm9tOyAvKiBGYWxsYmFjayB0byBJU08tODg1OS0xICovCisgICAgICBmcm9tKz0gMTsKKyAg ICB9CitvdXRwOgorICAgIGlmICgoY252cmVzPSAoKndjX21iKSh0b19jcywgd2MsICh1Y2hhciAq KSB0bywgKHVjaGFyICopIHRvX2VuZCkpID4gMCkKKyAgICB7CisgICAgICAvKiBXZSBjYW4gbmV2 ZXIgY29udmVydCBvbmx5IGEgcGFydCBvZiB3Y2hhcl90ICovCisgICAgICBEQlVHX0FTU0VSVCgo Y252cmVzICUgc2l6ZW9mKHdjaGFyX3QpKSA9PSAwKTsKKyAgICAgIC8qIGNudnJlcyByZXR1cm5z IG51bWJlciBvZiBieXRlcywgY29udmVydCB0byBudW1iZXIgb2Ygd2NoYXJfdCdzICovCisgICAg ICB0bys9IGNudnJlcyAvIHNpemVvZih3Y2hhcl90KTsKKyAgICB9CisgICAgZWxzZSBpZiAoY252 cmVzID09IE1ZX0NTX0lMVU5JICYmIHdjICE9ICc/JykKKyAgICB7CisgICAgICB3Yz0gJz8nOwor ICAgICAgZ290byBvdXRwOworICAgIH0KKyAgICBlbHNlCisgICAgICBicmVhazsgLyogTm90IGVu b3VnaCBzcGFjZSAqLworICB9CisgIHJldHVybiB0byAtIHRvX29yaWc7CiB9CiAKIAotI2RlZmlu ZSBwdGhyZWFkX2F1dG9fbXV0ZXhfZGVjbChuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgSEFORExFIF9faCMjbmFtZT0gTlVMTDsKKy8qKgorICBXcml0ZSBhIHN0cmluZyBpbiB0 aGUgZ2l2ZW4gY2hhcmFjdGVyIHNldCB0byBXaW5kb3dzIGNvbnNvbGUuIAorICBBcyBXaW5kb3cg YnJlYWtzIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyBpbnRvIHR3byBwYXJ0cywKKyAgd2UgY2Fu bm90IHVzZSBhIHNpbXBsZSBsb29wIHNlbmRpbmcgdGhlIHJlc3VsdCBvZgorICBjcy0+Y3NldC0+ bWJfd2MoKSB0byBjb25zb2xlLgorICBTbyB3ZSBjb252ZXJ0cyBzdHJpbmcgZnJvbSBjbGllbnQg Y2hhcnNldCB0byBhbiBhcnJheSBvZiB3Y2hhcl90LAorICB0aGVuIHdyaXRlIHRoZSBhcnJheSB0 byBjb25zb2xlIGluIGEgc2luZ2xlIHNob3QuCisKKyAgQHBhcmFtIGNzICAgICAgIENoYXJhY3Rl ciBzZXQgb2YgdGhlIHN0cmluZworICBAcGFyYW0gZGF0YSAgICAgU3RyaW5nIHRvIHByaW50Cisg IEBwYXJhbSBkYXRhbGVuICBMZW5ndGggb2YgaW5wdXQgc3RyaW5nIGluIGJ5dGVzCisqLwordm9p ZAorbXlfd2luX2NvbnNvbGVfd3JpdGUoQ0hBUlNFVF9JTkZPICpjcywgY29uc3QgY2hhciAqZGF0 YSwgc2l6ZV90IGRhdGFsZW4pCit7CisgIHN0YXRpYyB3Y2hhcl90IHUxNmJ1ZltNQVhfQ09OU09M RV9MSU5FX1NJWkUgKyAxXTsKKyAgc2l6ZV90IG5jaGFycz0gbXlfbWJzdG91MTZzKGNzLCAoY29u c3QgdWNoYXIgKikgZGF0YSwgZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHUxNmJ1Ziwgc2l6ZW9mKHUxNmJ1ZikpOworICBEV09SRCBud3JpdHRlbjsKKyAgV3JpdGVDb25z b2xlVyhHZXRTdGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpLAorICAgICAgICAgICAgICAgIHUx NmJ1ZiwgKERXT1JEKSBuY2hhcnMsICZud3JpdHRlbiwgTlVMTCk7Cit9CiAKLSNkZWZpbmUgcHRo cmVhZF9hdXRvX211dGV4X2xvY2sobmFtZSwgcHJvYywgdGltZSkgICAgICAgICAgICAgICBcCi0g IG15X3B0aHJlYWRfYXV0b19tdXRleF9sb2NrKCZfX2gjI25hbWUsICNuYW1lLCAocHJvYyksICh0 aW1lKSkKIAotI2RlZmluZSBwdGhyZWFkX2F1dG9fbXV0ZXhfZnJlZShuYW1lKSAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgbXlfcHRocmVhZF9hdXRvX211dGV4X2ZyZWUoJl9faCMjbmFt ZSkKKy8qKgorICBXcml0ZSBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciB0byBjb25zb2xlLgorICBO b3RlOiBvbmUgc2hvdWxkIG5vdCBzZW5kIHBhcnRzIG9mIHRoZSBzYW1lIG11bHRpLWJ5dGUgY2hh cmFjdGVyCisgIGluIHNlcGFyYXRlIGNvbnNlcXVlbnQgbXlfd2luX2NvbnNvbGVfcHV0YygpIGNh bGxzLgorICBGb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHVzZSBteV93aW5fY29sc29sZV93cml0 ZSgpIGluc3RlYWQuCiAKKyAgQHBhcmFtIGNzICBDaGFyYWN0ZXIgc2V0IG9mIHRoZSBpbnB1dCBj aGFyYWN0ZXIKKyAgQHBhcmFtIGMgICBDaGFyYWN0ZXIgKHNpbmdsZSBieXRlKQorKi8KK3ZvaWQK K215X3dpbl9jb25zb2xlX3B1dGMoQ0hBUlNFVF9JTkZPICpjcywgaW50IGMpCit7CisgIGNoYXIg Y2g9IChjaGFyKSBjOworICBteV93aW5fY29uc29sZV93cml0ZShjcywgJmNoLCAxKTsKK30KIAot LyoKLSAgY2hhciogbXlfY2dldHMoKQogCi0gIE5PVEVTCi0gICAgUmVwbGFjZXMgX2NnZXRzIGZy b20gbGliYyB0byBzdXBwb3J0IGlucHV0IG9mIG1vcmUgdGhhbiAyNTUgY2hhcnMuCi0gICAgUmVh ZHMgZnJvbSB0aGUgY29uc29sZSB2aWEgUmVhZENvbnNvbGUgaW50byBidWZmZXIgd2hpY2ggCi0g ICAgc2hvdWxkIGJlIGF0IGxlYXN0IGNsZW4gY2hhcmFjdGVycy4KLSAgICBBY3R1YWwgbGVuZ3Ro IG9mIHN0cmluZyByZXR1cm5lZCBpbiBwbGVuLgotCi0gIFdBUk5JTkcKLSAgICBteV9jZ2V0cygp IGRvZXMgTk9UIGNoZWNrIHRoZSBwdXNoYmFjayBjaGFyYWN0ZXIgYnVmZmVyIChpLmUuLCBfY2hi dWYpLgotICAgIFRodXMsIG15X2NnZXRzKCkgd2lsbCBub3QgcmV0dXJuIGFueSBjaGFyYWN0ZXIg dGhhdCBpcyBwdXNoZWQgYmFjayBieSAKLSAgICB0aGUgX3VuZ2V0Y2goKSBjYWxsLgotCi0gIFJF VFVSTgotICAgIHN0cmluZyBwb2ludGVyCW9rCi0gICAgTlVMTAkgICAgICAgICAgRXJyb3IKKy8q KgorICBXcml0ZSBhIDAtdGVybWluYXRlZCBzdHJpbmcgdG8gV2luZG93cyBjb25zb2xlLgogCisg IEBwYXJhbSBjcyAgICBDaGFyYWN0ZXIgc2V0IG9mIHRoZSBzdHJpbmcgdG8gcHJpbnQKKyAgQHBh cmFtIGRhdGEgIFN0cmluZyB0byBwcmludAogKi8KK3ZvaWQKK215X3dpbl9jb25zb2xlX2ZwdXRz KENIQVJTRVRfSU5GTyAqY3MsIGNvbnN0IGNoYXIgKmRhdGEpCit7CisgIG15X3dpbl9jb25zb2xl X3dyaXRlKGNzLCBkYXRhLCBzdHJsZW4oZGF0YSkpOworfQogCi1jaGFyKiBteV9jZ2V0cyhjaGFy ICpidWZmZXIsIHNpemVfdCBjbGVuLCBzaXplX3QqIHBsZW4pCi17Ci0gIFVMT05HIHN0YXRlOwot ICBjaGFyICpyZXN1bHQ7Ci0gIERXT1JEIHBsZW5fcmVzOwotICBDT05TT0xFX1NDUkVFTl9CVUZG RVJfSU5GTyBjc2JpOwotICAKLSAgcHRocmVhZF9hdXRvX211dGV4X2RlY2wobXlfY29uaW9fY3Mp OwotIAotICAvKiBsb2NrIHRoZSBjb25zb2xlIGZvciB0aGUgY3VycmVudCBwcm9jZXNzKi8KLSAg aWYgKHB0aHJlYWRfYXV0b19tdXRleF9sb2NrKG15X2NvbmlvX2NzLCBHZXRDdXJyZW50UHJvY2Vz c0lkKCksIElORklOSVRFKSkKLSAgewotICAgIC8qIGNhbiBub3QgbG9jayBjb25zb2xlICovCi0g ICAgcHRocmVhZF9hdXRvX211dGV4X2ZyZWUobXlfY29uaW9fY3MpOyAgCi0gICAgcmV0dXJuIE5V TEw7Ci0gIH0KIAotICAvKiBpbml0IGNvbnNvbGUgaW5wdXQgKi8KLSAgaWYgKG15X2NvbmlucGZo ID09IDApCi0gIHsKLSAgICAvKiBzYW1lIGhhbmRsZSB3aWxsIGJlIHVzZWQgdW50aWwgcHJvY2Vz cyB0ZXJtaW5hdGlvbiAqLwotICAgIG15X2NvbmlucGZoPSBDcmVhdGVGaWxlKCJDT05JTiQiLCBH RU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgT1BFTl9FWElTVElORywgMCwgTlVMTCk7Ci0gIH0KKy8qCisgIEhhbmRs ZSBmb3JtYXR0ZWQgb3V0cHV0IG9uIHRoZSBXaW5kb3dzIGNvbnNvbGUuCisqLwordm9pZAorbXlf d2luX2NvbnNvbGVfdmZwcmludGYoQ0hBUlNFVF9JTkZPICpjcywgY29uc3QgY2hhciAqZm10LCB2 YV9saXN0IGFyZ3MpCit7CisgIHN0YXRpYyBjaGFyIGJ1ZmZbTUFYX0NPTlNPTEVfTElORV9TSVpF ICsgMV07CisgIHNpemVfdCBsZW49IHZzbnByaW50ZihidWZmLCBzaXplb2YoYnVmZikgLSAxLCBm bXQsIGFyZ3MpOworICBteV93aW5fY29uc29sZV93cml0ZShjcywgYnVmZiwgbGVuKTsKK30KIAot ICBpZiAobXlfY29uaW5wZmggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIAotICB7Ci0gICAgLyog dW5sb2NrIHRoZSBjb25zb2xlICovCi0gICAgcHRocmVhZF9hdXRvX211dGV4X2ZyZWUobXlfY29u aW9fY3MpOyAgCi0gICAgcmV0dXJuKE5VTEwpOwotICB9CiAKLSAgR2V0Q29uc29sZU1vZGUoKEhB TkRMRSlteV9jb25pbnBmaCwgJnN0YXRlKTsKLSAgU2V0Q29uc29sZU1vZGUoKEhBTkRMRSlteV9j b25pbnBmaCwgRU5BQkxFX0xJTkVfSU5QVVQgfCAKLSAgICAgICAgICAgICAgICAgRU5BQkxFX1BS T0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9FQ0hPX0lOUFVUKTsKLQotICBHZXRDb25zb2xlU2NyZWVu QnVmZmVySW5mbyhHZXRTdGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpLCAmY3NiaSk7Ci0KLSAg LyogCi0gICAgdGhlcmUgaXMgbm8ga25vd24gd2F5IHRvIGRldGVybWluZSBhbGxvd2VkIGJ1ZmZl ciBzaXplIGZvciBpbnB1dAotICAgIHRob3VnaCBpdCBpcyBrbm93biBpdCBzaG91bGQgbm90IGJl IG1vcmUgdGhhbiA2NEsgICAgICAgICAgICAgICAKLSAgICBzbyB3ZSBjdXQgNjRLIGFuZCB0cnkg Zmlyc3Qgc2l6ZSBvZiBzY3JlZW4gYnVmZmVyICAgICAgICAgICAgICAgCi0gICAgaWYgaXQgaXMg c3RpbGwgdG8gbGFyZ2Ugd2UgY3V0IGhhbGYgb2YgaXQgYW5kIHRyeSBhZ2FpbiAgICAgICAgIAot ICAgIGxhdGVyIHdlIG1heSB3YW50IHRvIGN5Y2xlIGZyb20gbWluKGNsZW4sIDY1NTM1KSB0byBh bGxvd2VkIHNpemUKLSAgICB3aXRoIHNtYWxsIGRlY3JlbWVudCB0byBkZXRlcm1pbmUgZXhhY3Qg YWxsb3dlZCBidWZmZXIgICAgICAgICAgIAotICAqLwotICBjbGVuPSBtaW4oY2xlbiwgNjU1MzUp OwotICBkbwotICB7Ci0gICAgY2xlbj0gbWluKGNsZW4sIChzaXplX3QpIGNzYmkuZHdTaXplLlgq Y3NiaS5kd1NpemUuWSk7Ci0gICAgaWYgKCFSZWFkQ29uc29sZSgoSEFORExFKW15X2NvbmlucGZo LCAoTFBWT0lEKWJ1ZmZlciwgKERXT1JEKSBjbGVuIC0gMSwgJnBsZW5fcmVzLAotICAgICAgICAg ICAgICAgICAgICAgTlVMTCkpCi0gICAgewotICAgICAgcmVzdWx0PSBOVUxMOwotICAgICAgY2xl bj4+PSAxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmVzdWx0PSBidWZmZXI7Ci0g ICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgd2hpbGUgKEdldExhc3RFcnJvcigpID09IEVSUk9S X05PVF9FTk9VR0hfTUVNT1JZKTsKLSAgKnBsZW49IHBsZW5fcmVzOworI2luY2x1ZGUgPHNoZWxs YXBpLmg+CiAKLSAgLyogV2UgZ28gaGVyZSBvbiBlcnJvciByZWFkaW5nIHRoZSBzdHJpbmcgKEN0 cmwtQyBmb3IgZXhhbXBsZSkgKi8KLSAgaWYgKCEqcGxlbikKLSAgICByZXN1bHQ9IE5VTEw7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHVyZWNvdjogaW5zcGVjdGVkICovCisvKioK KyAgVHJhbnNsYXRlIFVuaWNvZGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgdG8gdGhlIGdpdmVu IGNoYXJhY3RlciBzZXQKKyAgKFR5cGljYWxseSB0byB1dGY4bWI0KS4KKyAgVHJhbnNsYXRlZCBw YXJhbWV0ZXJzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgbXlfb25jZV9hbGxvYygpLgorCisgIEBwYXJh bSAgICAgIHRvY3MgICAgQ2hhcmFjdGVyIHNldCB0byBjb252ZXJ0IHBhcmFtZXRlcnMgdG8uCisg IEBwYXJhbVtPVVRdIGFyZ2MgICAgV3JpdGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaGVyZQorICBA cGFyYW1bT1VUXSBhcmd2ICAgIFdyaXRlIHBvaW50ZXIgdG8gYWxsb2NhdGVkIHBhcmFtZXRlcnMg aGVyZS4KKyovCitpbnQKK215X3dpbl90cmFuc2xhdGVfY29tbWFuZF9saW5lX2FyZ3MoQ0hBUlNF VF9JTkZPICpjcywgaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpCit7CisgIGludCBpLCBhYzsKKyAg Y2hhciAqKmF2OworICB3Y2hhcl90ICpjb21tYW5kX2xpbmU9IEdldENvbW1hbmRMaW5lVygpOwor ICB3Y2hhcl90ICoqd2FyZ3M9IENvbW1hbmRMaW5lVG9Bcmd2Vyhjb21tYW5kX2xpbmUsICZhYyk7 CisgIHNpemVfdCBuYnl0ZXM9IChhYyArIDEpICogc2l6ZW9mKGNoYXIgKik7CiAKLSAgaWYgKHJl c3VsdCAhPSBOVUxMKQotICB7Ci0gICAgaWYgKCpwbGVuID4gMSAmJiBidWZmZXJbKnBsZW4gLSAy XSA9PSAnXHInKQotICAgIHsKLSAgICAgICpwbGVuPSAqcGxlbiAtIDI7Ci0gICAgfQotICAgIGVs c2UgCi0gICAgewotICAgICAgaWYgKCpwbGVuID4gMCAmJiBidWZmZXJbKnBsZW4gLSAxXSA9PSAn XHInKQotICAgICAgewotICAgICAgICBjaGFyIHRtcFszXTsKLSAgICAgICAgaW50ICB0bXBsZW49 IHNpemVvZih0bXApOworICAvKiBBbGxvY2F0ZSBuZXcgY29tbWFuZCBsaW5lIHBhcmFtZXRlciAq LworICBhdj0gKGNoYXIgKiopIG15X29uY2VfYWxsb2MobmJ5dGVzLCBNWUYoTVlfWkVST0ZJTEwp KTsKIAotICAgICAgICAqcGxlbj0gKnBsZW4gLSAxOwotICAgICAgICAvKiByZWFkIC9uIGxlZnQg aW4gdGhlIGJ1ZmZlciAqLwotICAgICAgICBSZWFkQ29uc29sZSgoSEFORExFKW15X2NvbmlucGZo LCAoTFBWT0lEKXRtcCwgdG1wbGVuLCAmdG1wbGVuLCBOVUxMKTsKLSAgICAgIH0KLSAgICB9Ci0g ICAgYnVmZmVyWypwbGVuXT0gJ1wwJzsKKyAgZm9yKGk9IDA7IGkgPCAqYXJnYzsgaSsrKQorICB7 CisgICAgdWludCBkdW1teV9lcnJvcnM7CisgICAgc2l6ZV90IGFyZ19sZW49IHdjc2xlbih3YXJn c1tpXSk7CisgICAgc2l6ZV90IGxlbiwgYWxsb2NlZF9sZW49IGFyZ19sZW4gKiBjcy0+bWJtYXhs ZW4gKyAxOworICAgIGF2W2ldPSAoY2hhciAqKSBteV9vbmNlX2FsbG9jKGFsbG9jZWRfbGVuLCBN WUYoMCkpOworICAgIGxlbj0gbXlfY29udmVydChhdltpXSwgYWxsb2NlZF9sZW4sIGNzLAorICAg ICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSB3YXJnc1tpXSwgYXJnX2xlbiAqIHNpemVv Zih3Y2hhcl90KSwKKyAgICAgICAgICAgICAgICAgICAgJm15X2NoYXJzZXRfdXRmMTZsZV9iaW4s ICZkdW1teV9lcnJvcnMpOworICAgIERCVUdfQVNTRVJUKGxlbiA8IGFsbG9jZWRfbGVuKTsKKyAg ICBhdltpXVtsZW5dPSAnXDAnOwogICB9Ci0KLSAgU2V0Q29uc29sZU1vZGUoKEhBTkRMRSlteV9j b25pbnBmaCwgc3RhdGUpOwotICAvKiB1bmxvY2sgdGhlIGNvbnNvbGUgKi8KLSAgcHRocmVhZF9h dXRvX211dGV4X2ZyZWUobXlfY29uaW9fY3MpOyAgCi0KLSAgcmV0dXJuIHJlc3VsdDsKKyAgKmFy Z3Y9IGF2OworICAqYXJnYz0gYWM7CisgIC8qIENsZWFudXAgb24gZXhpdCAqLworICBMb2NhbEZy ZWUoKEhMT0NBTCkgd2FyZ3MpOworICByZXR1cm4gMDsKIH0KIAogI2VuZGlmIC8qIF9fV0lOX18g Ki8KCj09PSBtb2RpZmllZCBmaWxlICdzcWwtY29tbW9uL2NsaWVudC5jJwotLS0gYS9zcWwtY29t bW9uL2NsaWVudC5jCTIwMTEtMDEtMzEgMTU6NTU6NTggKzAwMDAKKysrIGIvc3FsLWNvbW1vbi9j bGllbnQuYwkyMDExLTAyLTIzIDA0OjUzOjA3ICswMDAwCkBAIC00MjQ2LDExICs0MjQ2LDMxIEBA IGludCBTVERDQUxMIG15c3FsX3NldF9jaGFyYWN0ZXJfc2V0KE1ZU1EKICAgaWYgKG15c3FsLT5v cHRpb25zLmNoYXJzZXRfZGlyKQogICAgIGNoYXJzZXRzX2Rpcj0gbXlzcWwtPm9wdGlvbnMuY2hh cnNldF9kaXI7CiAKKyAgaWYgKCFteXNxbC0+bmV0LnZpbykKKyAgeworICAgIC8qIEluaXRpYWxp emUgd2l0aCBhdXRvbWF0aWMgT1MgY2hhcmFjdGVyIHNldCBkZXRlY3Rpb24uICovCisgICAgbXlz cWxfb3B0aW9ucyhteXNxbCwgTVlTUUxfU0VUX0NIQVJTRVRfTkFNRSwgY3NfbmFtZSk7CisgICAg bXlzcWxfaW5pdF9jaGFyYWN0ZXJfc2V0KG15c3FsKTsKKyAgICAvKiAKKyAgICAgIEluIGNhc2Ug b2YgYXV0b21hdGljIE9TIGNoYXJhY3RlciBzZXQgZGV0ZWN0aW9uCisgICAgICBteXNxbF9pbml0 X2NoYXJhY3Rlcl9zZXQgY2hhbmdlcyBteXNxbC0+b3B0aW9ucy5jaGFyc2V0X25hbWUKKyAgICAg IGZyb20gImF1dG8iIHRvIHRoZSByZWFsIGNoYXJhY3RlciBzZXQgbmFtZS4KKyAgICAgIFJlc2V0 IGNzX25hbWUgdG8gdGhlIGRldGVjdGVkIGNoYXJhY3RlciBzZXQgbmFtZSwgYWNjb3JkaW5nbHku CisgICAgKi8KKyAgICBjc19uYW1lPSBteXNxbC0+b3B0aW9ucy5jaGFyc2V0X25hbWU7CisgIH0K KwogICBpZiAoc3RybGVuKGNzX25hbWUpIDwgTVlfQ1NfTkFNRV9TSVpFICYmCiAgICAgIChjcz0g Z2V0X2NoYXJzZXRfYnlfY3NuYW1lKGNzX25hbWUsIE1ZX0NTX1BSSU1BUlksIE1ZRigwKSkpKQog ICB7CiAgICAgY2hhciBidWZmW01ZX0NTX05BTUVfU0laRSArIDEwXTsKICAgICBjaGFyc2V0c19k aXI9IHNhdmVfY3NkaXI7CisgICAgaWYgKCFteXNxbC0+bmV0LnZpbykKKyAgICB7CisgICAgICAv KiBJZiB0aGVyZSBpcyBubyBjb25uZWN0aW9uIHlldCB3ZSBkb24ndCBzZW5kICJTRVQgTkFNRVMi IHF1ZXJ5ICovCisgICAgICBteXNxbC0+Y2hhcnNldD0gY3M7CisgICAgICByZXR1cm4gMDsKKyAg ICB9CiAgICAgLyogU2tpcCBleGVjdXRpb24gb2YgIlNFVCBOQU1FUyIgZm9yIHByZS00LjEgc2Vy dmVycyAqLwogICAgIGlmIChteXNxbF9nZXRfc2VydmVyX3ZlcnNpb24obXlzcWwpIDwgNDAxMDAp CiAgICAgICByZXR1cm4gMDsKCg== --===============7813786199825870473== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/alexander.barkov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexander.barkov@stripped\ # u316hqua4z5j86xe # target_branch: file:///home/bar/mysql-bzr/mysql-trunk.w5331/ # testament_sha1: 0a7faba7c1bf9898d95e68f560cf557952692090 # timestamp: 2011-02-23 07:53:34 +0300 # base_revision_id: andrei.elkin@stripped\ # k07c3725arfph223 # # Begin bundle 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 --===============7813786199825870473==--