ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggNjAyYjA1Ny4uODFkMWEzOSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTMyLDggKzMyLDggQEAKIAogIyAtIHVzZSAtRFNUQVRUSU1FPTAgdG8gZGlzYWJsZSBzdGF0aXN0aWNzLCBlbHNlIHNwZWNpZnkgYW4gaW50ZXJ2YWwgaW4KICMgICBtaWxsaXNlY29uZHMuCi0jIC0gdXNlIC1EVFJBTlNQQVJFTlQgdG8gY29tcGlsZSB3aXRoIHRyYW5zcGFyZW50IHByb3h5IHN1cHBvcnQuCi1DRkxBR1MgPSAtV2FsbCAkKENPUFRTKSAkKERFQlVHKSAtRFNUQVRUSU1FPTAgLURUUkFOU1BBUkVOVAorIyAtIHVzZSAtRFRQUk9YWSB0byBjb21waWxlIHdpdGggdHJhbnNwYXJlbnQgcHJveHkgc3VwcG9ydC4KK0NGTEFHUyA9IC1XYWxsICQoQ09QVFMpICQoREVCVUcpIC1EU1RBVFRJTUU9MCAtRFRQUk9YWQogTERGTEFHUyA9IC1nCiAKIGFsbDogaGFwcm94eQpkaWZmIC0tZ2l0IGEvTk9URVMgYi9OT1RFUwppbmRleCAzODIwMThjLi5jZTk5NGY3IDEwMDY0NAotLS0gYS9OT1RFUworKysgYi9OT1RFUwpAQCAtOSw3ICs5LDE5IEBACiAgICogYWRkIHgtZm9yd2FyZGVkLWZvcgogICAqIGxvZyBodHRwIHJlcXVlc3RzIG9uIGRlbWFuZCwgYW5kIGRlc3RpbmF0aW9uIHNlcnZlciBuYW1lCiAxLjEuNyAtPiAxLjEuOAotICAtIGxvZyBkZXN0aW5hdGlvbiBzZXJ2ZXIgSVAKKyAgKiBmdWxsIEhUVFAgbG9nIHdpdGggZGVzdGluYXRpb24gc2VydmVyIElELCByZXEgYW5kIHJlc3AgdGltZS4KKyAgKiBzb3VyY2UgYWRkcmVzcyBvZiBvdXRnb2luZyBjb25uZWN0aW9ucworMS4xLjggLT4gMS4xLjkKICAgLSBoYW5kbGUgcGFyYW1ldHJhYmxlIEhUVFAgaGVhbHRoLWNoZWNrcyByZXBsaWVzCiAgIC0gZGlmZmVyZW50aWF0ZSBodHRwIGhlYWRlcnMgYW5kIGh0dHAgdXJpcworICAtIHN1cHBvcnQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGNvbmZpZyBmaWxlCiAgIC0gc3VwcG9ydCBrZWVwLWFsaXZlCisKKy0tLSBOb3RlcyBhYm91dCBjb29raWUgdXNhZ2UgLS0tCisKK0Nvb2tpZSBpbnNlcnRpb24gaXMgZG9uZSBhdCB0aGUgZW5kIG9mIHNlcnZlciByZXNwb25zZS4KK0Nvb2tpZSBtYXRjaGluZyBpcyBkb25lIGFmdGVyIGhlYWRlciByZXBsYWNlbWVudCwgYnV0IGJlZm9yZQoraGVhZGVyIGRlbGV0aW9uLiBUaGlzIG1lYW5zIHRoYXQgaXQncyBwZXJmZWN0bHkgcG9zc2libGUgdG8KK2RlbGV0ZSBhbiBpbnNlcnRlZCBjb29raWUgb25jZSBpdCBoYXMgYmVlbiBtYXRjaGVkLCBzbyB0aGF0Cit0aGUgc2VydmVyIG5ldmVyIGtub3dzIGFib3V0IGl0LgorCmRpZmYgLS1naXQgYS9UT0RPIGIvVE9ETwppbmRleCA0MTgyN2EyLi5kNjkwZTcwIDEwMDY0NAotLS0gYS9UT0RPCisrKyBiL1RPRE8KQEAgLTIsMjAgKzIsMjEgQEAKICogaW1wbOltZW50ZXIgbCdvcHRpb24gImxvZyBnbG9iYWwiIGF1IG5pdmVhdSBwcm94eSBwb3VyIHV0aWxpc2VyIGxlcyBsb2dzCiAgIGdsb2JhdXguCiAqIG1hdGNoaW5nIGNhc2UtaW5zZW5zaXRpdmUKKyogaW1wbOltZW50ZXIgb3V0Z29pbmcgYWRkcgorKiBsb2d1ZXIgdF9jbngsIHRfZGF0YSwgdF90b3RhbAogKyBmYWN0b3Jpc2VyIGxhIGZvbmN0aW9uIGRlIGxvZyAoc2VuZF9sb2cgPSBzZW5kX3N5c2xvZyt3YXJuaW5nK2FsZXJ0KQogKyBk6XNhY3RpdmF0aW9uIGR1IGtlZXAtYWxpdmUgKHN1cHByZXNzaW9uIGRlcyBeQ29ubmVjdGlvbjogZXQgYWpvdXQgZGVzIENvbm5lY3Rpb246IGNsb3NlKQogICAtPiA0IGxpZ25lcyAoMiBkZWwsIDIgYWRkKSBzdWZmaXNlbnQuCi0KLS0gbG9ndWVyIHRfY254LCB0X2RhdGEsIHRfdG90YWwKKysgbmUgcGFzIGxvZ3VlciBjZXJ0YWluZXMgYWRyZXNzZXMgSVAgc291cmNlcworICAtPiBwb3VyIGxlcyBoZWFsdGgtY2hlY2tzIHVuaXF1ZW1lbnQgLT4gcGFzIGRlIGxvZyBwb3VyIGxlcyByZXF16nRlcworICAgICB2aWRlcyAob3B0aW9uIGRvbnRsb2dudWxsKQogLSBtZXN1cmVyIGxlIHRwcyBjb25zb21t6SBlbnRyZSBkZXV4IHNlbGVjdCwgZXQgZm91cm5pciBsYSBjb25zbyBDUFUgOgogICAlY3B1ID0gMTAwICogKHRwcmVzZWxlY3QobisxKS10cG9zdHNlbGVjdChuKSkgLyAodHByZXNlbGVjdChuKzEpLXRwcmVzZWxlY3QobikpCiAtIGltcGzpbWVudGVyIGxpbWl0YXRpb24gZmQgZGFucyBsYSBjb25mIDogc2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsIC4uLikKIC0gaW1wbOltZW50ZXIgY29yZS9uby1jb3JlIGRhbnMgbGEgY29uZiA6IHNldHJsaW1pdChSTElNSVRfQ09SRSwgLi4uKQotLSBpbXBs6W1lbnRlciBvdXRnb2luZyBhZGRyCiAtIG9wdGltaXNlciBsZXMgcmVnZXggcG91ciBhY2PpbOlyZXIgbGVzIG1hdGNoZXMgOgogICAtIGNvbXB0ZXIgbGVzIG1hdGNoZXMKICAgLSBzaSBtYXRjaChuKSAmIChbbl0uY3B0ID4gW24tMV0uY3B0KSAmIChbbl0uYWN0aW9uID09IFtuLTFdLmFjdGlvbiksIHN3YXAobixuLTEpCiAgIC0gculndWxp6HJlbWVudCwgZGl2aXNlciB0b3VzIGxlcyBjb21wdGV1cnMgKGxvcnMgZCd1biBk6XBhc3NlbWVudCBwYXIgZXhlbXBsZSkKIC0gZmlsdHJhZ2Ugc3VyIGwnYWRyZXNzZSBJUCBzb3VyY2UKLS0gbmUgcGFzIGxvZ3VlciBjZXJ0YWluZXMgYWRyZXNzZXMgSVAgc291cmNlcwogLSBnZXN0aW9uIGtlZXAtYWxpdmUKZGlmZiAtLWdpdCBhL2RvYy9oYXByb3h5LnR4dCBiL2RvYy9oYXByb3h5LnR4dAppbmRleCA3MWIwY2I3Li5kZWM3ZTFlIDEwMDY0NAotLS0gYS9kb2MvaGFwcm94eS50eHQKKysrIGIvZG9jL2hhcHJveHkudHh0CkBAIC0xLDkgKzEsOSBAQAogCiAgICAgICAgICAJCSAgICAgSCBBIC0gUCByIG8geCB5CiAgICAgICAgICAJCSAgICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAJCSAgICAgIHZlcnNpb24gMS4xLjUKKyAgICAgICAgIAkJICAgICAgdmVyc2lvbiAxLjEuOAogCQkJICAgICAgd2lsbHkgdGFycmVhdQotCQkJICAgICAgIDIwMDIvMDQvMDMKKwkJCSAgICAgICAyMDAyLzA0LzE2CiAKID09PT09PT09PT09PT09PT0KIHwgSW50cm9kdWN0aW9uIHwKQEAgLTEyLDE1ICsxMiwxNyBAQAogSEEtUHJveHkgZXN0IHVuIHJlbGFpcyBUQ1AvSFRUUCBvZmZyYW50IGRlcyBmYWNpbGl06XMgZCdpbnTpZ3JhdGlvbiBlbgogZW52aXJvbm5lbWVudCBoYXV0ZW1lbnQgZGlzcG9uaWJsZS4gRW4gZWZmZXQsIGlsIGVzdCBjYXBhYmxlIGRlIDoKICAgLSBhc3N1cmVyIHVuIGFpZ3VpbGxhZ2Ugc3RhdGlxdWUgZOlmaW5pIHBhciBkZXMgY29va2llcyA7Ci0gIC0gYXNzdXJlciB1bmUgculwYXJ0aXRpb24gZGUgY2hhcmdlIGF2ZWMgY3LpYXRpb24gZGUgY29va2llcyBwb3VyCi0gICAgYXNzdXJlciBsYSBwZXJzaXN0ZW5jZSBkZSBzZXNzaW9uIDsKKyAgLSBhc3N1cmVyIHVuZSBy6XBhcnRpdGlvbiBkZSBjaGFyZ2UgYXZlYyBjculhdGlvbiBkZSBjb29raWVzIHBvdXIgYXNzdXJlciBsYQorICAgIHBlcnNpc3RlbmNlIGRlIHNlc3Npb24gOyAKICAgLSBmb3VybmlyIHVuZSB2aXNpYmlsaXTpIGV4dGVybmUgZGUgc29uIOl0YXQgZGUgc2FudOkgOwogICAtIHMnYXJy6nRlciBlbiBkb3VjZXVyIHNhbnMgcGVydGUgYnJ1dGFsZSBkZSBzZXJ2aWNlLgogICAtIG1vZGlmaWVyL2Fqb3V0ZXIvc3VwcHJpbWVyIGRlcyBlbnTqdGVzIGRhbnMgbGEgcmVxdep0ZSBldCBsYSBy6XBvbnNlLgorICAtIGludGVyZGlyZSBkZXMgcmVxdep0ZXMgcXVpIHbpcmlmaWVudCBjZXJ0YWluZXMgY29uZGl0aW9ucy4KIAotSWwgcmVxdWllcnQgcGV1IGRlIHJlc3NvdXJjZXMsIGV0IHNvbiBhcmNoaXRlY3R1cmUg6XbpbmVtZW50aWVsbGUKLW1vbm8tcHJvY2Vzc3VzIGx1aSBwZXJtZXQgZmFjaWxlbWVudCBkZSBn6XJlciBwbHVzaWV1cnMgbWlsbGllcnMgZGUKLWNvbm5leGlvbnMgc2ltdWx0YW7pZXMgc3VyIHBsdXNpZXVycyByZWxhaXMgc2FucyBlZmZvbmRyZXIgbGUgc3lzdOhtZS4KK0lsIHJlcXVpZXJ0IHBldSBkZSByZXNzb3VyY2VzLCBldCBzb24gYXJjaGl0ZWN0dXJlIOl26W5lbWVudGllbGxlIG1vbm8tcHJvY2Vzc3VzCitsdWkgcGVybWV0IGZhY2lsZW1lbnQgZGUgZ+lyZXIgcGx1c2lldXJzIG1pbGxpZXJzIGRlIGNvbm5leGlvbnMgc2ltdWx0YW7pZXMgc3VyCitwbHVzaWV1cnMgcmVsYWlzIHNhbnMgZWZmb25kcmVyIGxlIHN5c3TobWUuCisKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09CiB8IFBhcmFt6HRyZXMgZGUgbGFuY2VtZW50IHwKQEAgLTM2LDI1ICszOCw5NyBAQAogICAgIC1zIGFmZmljaGUgbGVzIHN0YXRpc3RpcXVlcyAoc2kgb3B0aW9uIGNvbXBpbOllKQogICAgIC1sIGFqb3V0ZSBkZXMgaW5mb3JtYXRpb25zIGF1eCBzdGF0aXN0aXF1ZXMKIAotTGUgbm9tYnJlIG1heGltYWwgZGUgY29ubmV4aW9uIHNpbXVsdGFu6WVzIHBhciBwcm94eSBlc3QgbGUgcGFyYW3odHJlCi1wYXIgZOlmYXV0IHBvdXIgbGVzIHByb3hpZXMgcG91ciBsZXNxdWVscyBjZSBwYXJhbeh0cmUgbidlc3QgcGFzCi1wculjaXPpIGRhbnMgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uLgorTGUgbm9tYnJlIG1heGltYWwgZGUgY29ubmV4aW9uIHNpbXVsdGFu6WVzIHBhciBwcm94eSBlc3QgbGUgcGFyYW3odHJlIHBhciBk6WZhdXQKK3BvdXIgbGVzIHByb3hpZXMgcG91ciBsZXNxdWVscyBjZSBwYXJhbeh0cmUgbidlc3QgcGFzIHBy6WNpc+kgZGFucyBsZSBmaWNoaWVyIGRlCitjb25maWd1cmF0aW9uLiBJbCBzJ2FnaXQgZHUgcGFyYW3odHJlICdtYXhjb25uJyBkYW5zIGxlcyBzZWN0aW9ucyAnbGlzdGVuJy4KIAotTGUgbm9tYnJlIG1heGltYWwgdG90YWwgZGUgY29ubmV4aW9ucyBzaW11bHRhbullcyBsaW1pdGUgbGUgbm9tYnJlIGRlCi1jb25uZXhpb25zIFRDUCB1dGlsaXNhYmxlcyDgIHVuIGluc3RhbnQgcGFyIGxlIHByb2Nlc3N1cywgdG91cyBwcm94aWVzCi1jb25mb25kdXMuCitMZSBub21icmUgbWF4aW1hbCB0b3RhbCBkZSBjb25uZXhpb25zIHNpbXVsdGFu6WVzIGxpbWl0ZSBsZSBub21icmUgZGUgY29ubmV4aW9ucworVENQIHV0aWxpc2FibGVzIOAgdW4gaW5zdGFudCBwYXIgbGUgcHJvY2Vzc3VzLCB0b3VzIHByb3hpZXMgY29uZm9uZHVzLiBDZQorcGFyYW3odHJlIHJlbXBsYWNlIGxlIHBhcmFt6HRyZSAnbWF4Y29ubicgZGUgbGEgc2VjdGlvbiAnZ2xvYmFsJy4KKwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB8IEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB8CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLQogQ29tbWVudGFpcmVzCiA9PT09PT09PT09PT0KIAorTCdhbmFseXNldXIgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGlnbm9yZSBkZXMgbGlnbmVzIHZpZGVzLCBsZXMgZXNwYWNlcywKK2xlcyB0YWJ1bGF0aW9ucywgZXQgdG91dCBjZSBxdWkgZXN0IGNvbXByaXMgZW50cmUgbGUgc3ltYm9sZSAnIycgKHMnaWwgbidlc3QgcGFzCitwculj6WTpIGQndW4gJ1wnKSwgZXQgbGEgZmluIGRlIGxhIGxpZ25lLiAKKworTGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGVzdCBk6WNvdXDpIGVuIHNlY3Rpb25zIHLpcOly6WVzIHBhciBkZXMgbW90cyBjbOlzCit0ZWxzIHF1ZSA6CisKKyAgLSAnZ2xvYmFsJworICAtICdsaXN0ZW4nCisKK1RvdXMgbGVzIHBhcmFt6HRyZXMgZm9udCBy6WbpcmVuY2Ug4CBsYSBzZWN0aW9uIGTpZmluaWUgcGFyIGxlIGRlcm5pZXIgbW90IGNs6QorcmVjb25udS4KKworCisxKSBQYXJhbeh0cmVzIGfpbulyYXV4Cis9PT09PT09PT09PT09PT09PT09PT09CisKK0lsIHMnYWdpdCBkZXMgcGFyYW3odHJlcyBhZ2lzc2FudCBzdXIgbGUgcHJvY2Vzc3VzLCBvdSBiaWVuIHN1ciBsJ2Vuc2VtYmxlIGRlcworcHJveGllcy4gSWxzIHNvbnQgdG91cyBzcOljaWZp6XMgZGFucyBsYSBzZWN0aW9uICdnbG9iYWwnLiBMZXMgcGFyYW3odHJlcworc3VwcG9ydOlzIHNvbnQgOgorCisgIC0gbG9nIDxhZHJlc3NlPiA8Y2F06WdvcmllPgorICAtIG1heGNvbm4gPG5vbWJyZT4KKyAgLSB1aWQgPGlkZW50aWZpYW50PgorICAtIGdpZCA8aWRlbnRpZmlhbnQ+CisgIC0gY2hyb290IDxy6XBlcnRvaXJlPgorICAtIG5icHJvYyA8bm9tYnJlPgorICAtIGRhZW1vbgorICAtIGRlYnVnCisgIC0gcXVpZXQKKworMS4xKSBKb3VybmFsaXNhdGlvbiBkZXMg6XbpbmVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGEgcGx1cGFydCBkZXMg6XbpbmVtZW50cyBzb250IGpvdXJuYWxpc+lzIDogZOltYXJyYWdlcywgYXJy6nRzLCBkaXNwYXJpdGlvbiBldAorYXBwYXJpdGlvbiBkZSBzZXJ2ZXVycywgY29ubmV4aW9ucywgZXJyZXVycy4gVG91cyBsZXMgbWVzc2FnZXMgc29udCBlbnZveelzIGVuCitzeXNsb2cgdmVycyB1biBvdSBkZXV4IHNlcnZldXJzLiBMYSBzeW50YXhlIGVzdCBsYSBzdWl2YW50ZSA6CisKKyAgICBsb2cgPGFkcmVzc2VfaXA+IDxmYWNpbGl0eT4KKworTGVzIGNvbm5leGlvbnMgc29udCBlbnZveellcyBlbiBuaXZlYXUgImluZm8iLiBMZXMgZOltYXJyYWdlcyBkZSBzZXJ2aWNlIGV0IGRlCitzZXJ2ZXVycyBzZXJvbnQgZW52b3npcyBlbiAibm90aWNlIiwgbGVzIHNpZ25hdXggZCdhcnLqdHMgZW4gIndhcm5pbmciIGV0IGxlcworYXJy6nRzIGTpZmluaXRpZnMgZGUgc2VydmljZXMgZXQgZGUgc2VydmV1cnMgZW4gImFsZXJ0Ii4gQ2VjaSBlc3QgdmFsYWJsZSBhdXNzaQorYmllbiBwb3VyIGxlcyBwcm94aWVzIHF1ZSBwb3VyIGxlcyBzZXJ2ZXVycyB0ZXN06XMgYXUgc2VpbiBkZXMgcHJveGllcy4KKworTGVzIGNhdOlnb3JpZXMgcG9zc2libGVzIHNvbnQgOgorICAgIGtlcm4sIHVzZXIsIG1haWwsIGRhZW1vbiwgYXV0aCwgc3lzbG9nLCBscHIsIG5ld3MsCisgICAgdXVjcCwgY3JvbiwgYXV0aDIsIGZ0cCwgbnRwLCBhdWRpdCwgYWxlcnQsIGNyb24yLAorICAgIGxvY2FsMCwgbG9jYWwxLCBsb2NhbDIsIGxvY2FsMywgbG9jYWw0LCBsb2NhbDUsIGxvY2FsNiwgbG9jYWw3CisKK0V4ZW1wbGUgOgorLS0tLS0tLS0tCisgICAgZ2xvYmFsCisJbG9nIDE5Mi4xNjguMi4yMDAgbG9jYWwzCisJbG9nIDE5Mi4xNjguMi4yMDEgbG9jYWw0CisKKzEuMikgbGltaXRhdGlvbiBkdSBub21icmUgZGUgY29ubmV4aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbCBlc3QgcG9zc2libGUgZXQgY29uc2VpbGzpIGRlIGxpbWl0ZXIgbGUgbm9tYnJlIGdsb2JhbCBkZSBjb25uZXhpb25zIHBhcgorcHJvY2Vzc3VzLiBMZXMgY29ubmV4aW9ucyBzb250IGNvbXByaXNlcyBhdSBzZW5zICdhY2NlcHRhdGlvbiBkZSBjb25uZXhpb24nLAorZG9uYyBpbCBmYXV0IHMnYXR0ZW5kcmUgZW4gcuhnbGUgZ+lu6XJhbCDgIGF2b2lyIHVuIHBldSBwbHVzIGR1IGRvdWJsZSBkZQorc2Vzc2lvbnMgVENQIHF1ZSBsZSBtYXhpbXVtIGRlIGNvbm5leGlvbnMgZml46S4gQydlc3QgaW1wb3J0YW50IHBvdXIgZml4ZXIgbGUKK3BhcmFt6HRyZSAndWxpbWl0IC1uJyBhdmFudCBkZSBsYW5jZXIgbGUgcHJveHkuIFBvdXIgY29tcHRhYmlsaXNlciBsZSBub21icmUKK2RlIHNvY2tldHMgbuljZXNzYWlyZXMsIGlsIGZhdXQgcHJlbmRyZSBlbiBjb21wdGUgY2VzIHBhcmFt6HRyZXMgOgorICAtIDEgc29ja2V0IHBhciBjb25uZXhpb24gZW50cmFudGUKKyAgLSAxIHNvY2tldCBwYXIgY29ubmV4aW9uIHNvcnRhbnRlCisgIC0gMSBzb2NrZXQgcGFyIHByb3h5CisgIC0gMSBzb2NrZXQgcG91ciBjaGFxdWUgc2VydmV1ciBlbiBjb3VycyBkZSBoZWFsdGgtY2hlY2sKKyAgLSAxIHNvY2tldCBwb3VyIGxlcyBsb2dzCisKK1Bvc2l0aW9ubmVyIGxhIGxpbWl0ZSBkdSBub21icmUgZGUgZGVzY3JpcHRldXJzIGRlIGZpY2hpZXJzICh1bGltaXQgLW4pIOAKKzIgKiBtYXhjb25uICsgbmJwcm94eSArIG5ic2VydmV1cnMgKyAxLgorCisxLjMpIENoYW5nZW1lbnQgZCd1aWQgZXQgZGUgZ2lkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKLUwnYW5hbHlzZXVyIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBpZ25vcmUgZGVzIGxpZ25lcyB2aWRlcywgbGVzCi1lc3BhY2VzLCBsZXMgdGFidWxhdGlvbnMsIGV0IHRvdXQgY2UgcXVpIGVzdCBjb21wcmlzIGVudHJlIGxlIHN5bWJvbGUKLScjJyAocydpbCBuJ2VzdCBwYXMgcHLpY+lk6SBkJ3VuICdcJyksIGV0IGxhIGZpbiBkZSBsYSBsaWduZS4KIAogCiBTZXJ2ZXVyCmRpZmYgLS1naXQgYS9leGFtcGxlcy9jZmcgYi9leGFtcGxlcy9jZmcKaW5kZXggYWI2M2RiYS4uOTZkNWJhNSAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvY2ZnCisrKyBiL2V4YW1wbGVzL2NmZwpAQCAtMSwyMCArMSwyMSBAQAogZ2xvYmFsCi0JbG9nCTEyNy4wLjAuMSBsb2NhbDAKKyMJbG9nCTEyNy4wLjAuMSBsb2NhbDAKICMJbG9nCTEyNy4wLjAuMSBsb2NhbDEKIAltYXhjb25uCTQwMDAKIAl1aWQJMAogCWdpZAkwCiAjCWNocm9vdAkvdG1wCi0jCW5icHJvYwk0CisjCW5icHJvYwkyCiAjCWRhZW1vbgogIwlkZWJ1ZwogIwlxdWlldAogCiBsaXN0ZW4gcHJveHkxIDAuMC4wLjA6ODAwMAogCW1vZGUJaHR0cAorIwlzb3VyY2UJMTI3LjAuMC4yOjAKICMJbG9nCTEyNy4wLjAuMSBsb2NhbDAKICMJbG9nCTEyNy4wLjAuMSBsb2NhbDEKLQlsb2cgZ2xvYmFsCisjCWxvZyBnbG9iYWwKIAkjbW9kZQl0Y3AKICAgICAgICAgY29va2llIFNFUlZFUklEIGluc2VydCBpbmRpcmVjdAogCWJhbGFuY2Ugcm91bmRyb2JpbgpAQCAtMjIsOCArMjMsMTMgQEAKIAkjZGlzcGF0Y2ggMTI3LjAuMC4xOjMxMzAwCiAJI2Rpc3BhdGNoIDEyNy4wLjAuMTo4MAogCSNkaXNwYXRjaCAxMjcuMC4wLjE6MjIKLQkjc2VydmVyIG5jIDEyNy4wLjAuMTo4MDgwIGNvb2tpZSBjb29raWUxIGNoZWNrCi0Jc2VydmVyIHR1eGxvY2FsIDEyNy4wLjAuMTo4MCBjb29raWUgY29va2llMSBjaGVjaworCXNlcnZlciBuYyAxMjcuMC4wLjE6ODA4MCBjb29raWUgY29va2llMSBjaGVjaworIwlzZXJ2ZXIgdHV4bG9jYWwwIDEwLjEwMS4yMy45OjgwIGNvb2tpZSBjb29raWUxIGNoZWNrCisjCXNlcnZlciB0dXhsb2NhbDEgMTI3LjAuMC4xOjgwIGNvb2tpZSBjb29raWUxIGNoZWNrCisjCXNlcnZlciB0dXhsb2NhbDIgMTI3LjAuMC4xOjgwIGNvb2tpZSBjb29raWUyIGNoZWNrCisjCXNlcnZlciB0dXhsb2NhbDMgMTI3LjAuMC4xOjgwIGNvb2tpZSBjb29raWUzIGNoZWNrCisjCXNlcnZlciB0dXhsb2NhbDQgMTI3LjAuMC4xOjgwIGNvb2tpZSBjb29raWU0IGNoZWNrCisjCXNlcnZlciB2YXggMTAuMTAxLjE0LjE6ODAgY29va2llIGNvb2tpZTEgY2hlY2sKIAkjc2VydmVyIHR1eGNlbGVyb24gMTAuMTAxLjAuMTo4MCBjb29raWUgY29va2llMiBjaGVjawogCSNzZXJ2ZXIgdGVsbmV0IDEyNy4wLjAuMToyMwogCSNzZXJ2ZXIgc3NoIDEyNy4wLjAuMToyMgpAQCAtNDcsMTMgKzUzLDE5IEBACiAJI3JzcHJlcCBeKERhdGU6XCApKFteLF0qKSgsXCApKC4qKSBMYURhdGVcIGVzdDpcIFw0XCAoXDIpCiAJIyBmb3JjZSBjb25uZWN0aW9uOmNsb3NlCiAJI3JlcWlkZWwgXkNvbm5lY3Rpb246Ci0JI3JzcGlkZWwJXkNvbm5lY3Rpb246CisJI3JzcGlkZWwgXkNvbm5lY3Rpb246CiAJI3JlcWFkZAlDb25uZWN0aW9uOlwgY2xvc2UKIAkjcnNwYWRkCUNvbm5lY3Rpb246XCBjbG9zZQogCSMgcHJvY2Vzc2luZyBvcHRpb25zCiAJI29wdGlvbglrZWVwYWxpdmUKIAlvcHRpb24JZm9yd2FyZGZvcgogCW9wdGlvbiBodHRwbG9nCisJb3B0aW9uIGRvbnRsb2dudWxsCisjCXJlcWlyZXAgXihUZXN0OlwgKSBcMF90b3RvX1wxX3RvdG8KKyMJcmVxaWRlbCBeQ29va2llOlwgU0VSVkVSSUQ9CisjCXJlcWlyZXAgXihHRVR8UE9TVClcIC4qIFwwCisjCXJlcWlyZXAgXihIb3N0OnxDb25uZWN0aW9uOnxVc2VyLWFnZW50OnxDb29raWU6KVwgLiogXDAKKyMJcmVxaWRlbnkgXgogCQogbGlzdGVuIHByb3h5MSAwLjAuMC4wOjgwMDEKIAltb2RlCWh0dHAKZGlmZiAtLWdpdCBhL2hhcHJveHkuYyBiL2hhcHJveHkuYwppbmRleCAwZDNkOWU4Li4yOTA0MzJiIDEwMDY0NAotLS0gYS9oYXByb3h5LmMKKysrIGIvaGFwcm94eS5jCkBAIC04LDExICs4LDI4IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIFBlbmRpbmcgYnVncyA6CisgKiAgIC0gc29sYXJpcyBvbmx5IDogc29tZXRpbWVzLCBhbiBIVFRQIHByb3h5IHdpdGggb25seSBhIGRpc3BhdGNoIGFkZHJlc3MgY2F1c2VzCisgKiAgICAgdGhlIHByb3h5IHRvIHRlcm1pbmF0ZSAobm8gY29yZSkgaWYgdGhlIGNsaWVudCBicmVha3MgdGhlIGNvbm5lY3Rpb24gZHVyaW5nCisgKiAgICAgdGhlIHJlc3BvbnNlLiBTZWVuIG9uIDEuMS44cHJlNCwgYnV0IG5ldmVyIHJlcHJvZHVjZWQuCiAgKiAgIC0gY29va2llIGluIGluc2VydCtpbmRpcmVjdCBtb2RlIHNvbWV0aW1lcyBzZWdmYXVsdHMgIQogICogICAtIGEgcHJveHkgd2l0aCBhbiBpbnZhbGlkIGNvbmZpZyB3aWxsIHByZXZlbnQgdGhlIHN0YXJ0dXAgZXZlbiBpZiBkaXNhYmxlZC4KICAqCiAgKiBDaGFuZ2VMb2cgOgogICoKKyAqIDIwMDIvMDQvMTggOiAxLjEuOAorICogICAtIG9wdGlvbiAiZG9udGxvZ251bGwiCisgKiAgIC0gZml4ZWQgImRvdWJsZSBzcGFjZSIgYnVnIGluIGNvbmZpZyBwYXJzZXIKKyAqICAgLSBmaXhlZCBhbiB1bmluaXRpYWxpemVkIHNlcnZlciBmaWVsZCBpbiBjYXNlIG9mIGRpc3BhdGNoCisgKiAgICAgd2l0aCBubyBleGlzdGluZyBzZXJ2ZXIgd2hpY2ggY291bGQgY2F1c2UgYSBzZWdmYXVsdCBkdXJpbmcKKyAqICAgICBsb2dnaW5nLgorICogICAtIHRoZSBwaWQgbG9nZ2VkIHdhcyBhbHdheXMgdGhlIGZhdGhlcidzLCB3aGljaCB3YXMgd3JvbmcgZm9yIGRhZW1vbnMuCisgKiAgIC0gZml4ZWQgd3JvbmcgbGV2ZWwgIkxPR19JTkZPIiBmb3IgbWVzc2FnZSAicHJveHkgc3RhcnRlZCIuCisgKiAyMDAyLzA0LzEzIDoKKyAqICAgLSBodHRwIGxvZ2dpbmcgaXMgbm93IGNvbXBsZXRlIDoKKyAqICAgICAtIGlwOnBvcnQsIGRhdGUsIHByb3h5LCBzZXJ2ZXIKKyAqICAgICAtIHJlcV90aW1lLCBjb25uX3RpbWUsIGhkcl90aW1lLCB0b3RfdGltZQorICogICAgIC0gc3RhdHVzLCBzaXplLCByZXF1ZXN0CisgKiAgIC0gc291cmNlIGFkZHJlc3MKICAqIDIwMDIvMDQvMTIgOiAxLjEuNwogICogICAtIGFkZGVkIG9wdGlvbiBmb3J3YXJkZm9yCiAgKiAgIC0gYWRkZWQgcmVxaXJlcCwgcmVxaWRlbCwgcmVxaWFsbG93LCByZXFpZGVueSwgcnNwaXJlcCwgcnNwaWRlbApAQCAtMTEzLDEyICsxMzAsMTIgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8cmVnZXguaD4KICNpbmNsdWRlIDxzeXNsb2cuaD4KLSNpZiBkZWZpbmVkKFRSQU5TUEFSRU5UKSAmJiBkZWZpbmVkKE5FVEZJTFRFUikKKyNpZiBkZWZpbmVkKFRQUk9YWSkgJiYgZGVmaW5lZChORVRGSUxURVIpCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KICNlbmRpZgogCi0jZGVmaW5lIEhBUFJPWFlfVkVSU0lPTiAiMS4xLjciCi0jZGVmaW5lIEhBUFJPWFlfREFURQkiMjAwMi8wNC8xMiIKKyNkZWZpbmUgSEFQUk9YWV9WRVJTSU9OICIxLjEuOCIKKyNkZWZpbmUgSEFQUk9YWV9EQVRFCSIyMDAyLzA0LzE4IgogCiAvKiB0aGlzIGlzIGZvciBsaWJjNSBmb3IgZXhhbXBsZSAqLwogI2lmbmRlZiBUQ1BfTk9ERUxBWQpAQCAtMjgzLDcgKzMwMCw4IEBACiAjZGVmaW5lIFBSX09fQkFMQU5DRQkoUFJfT19CQUxBTkNFX1JSKQogI2RlZmluZQlQUl9PX0tFRVBBTElWRQk2NAkvKiBmb2xsb3cga2VlcC1hbGl2ZSBzZXNzaW9ucyAqLwogI2RlZmluZQlQUl9PX0ZXREZPUgkxMjgJLyogaW5zZXJ0IHgtZm9yd2FyZGVkLWZvciB3aXRoIGNsaWVudCBhZGRyZXNzICovCi0jZGVmaW5lIFBSX09fTE9HSFRUUAkyNTYJLyogZ2VuZXJhdGUgYSBmdWxsIEhUVFAgbG9nICovCisjZGVmaW5lCVBSX09fQklORF9TUkMJMjU2CS8qIGJpbmQgdG8gYSBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyB3aGVuIGNvbm5lY3QoKWluZyAqLworI2RlZmluZSBQUl9PX05VTExOT0xPRwk1MTIJLyogYSBjb25uZWN0IHdpdGhvdXQgcmVxdWVzdCB3aWxsIG5vdCBiZSBsb2dnZWQgKi8KIAogCiAvKiB2YXJpb3VzIHNlc3Npb24gZmxhZ3MgKi8KQEAgLTMzNiw3ICszNTQsNyBAQAogI2RlZmluZSBDRkdfR0xPQkFMCTEKICNkZWZpbmUgQ0ZHX0xJU1RFTgkyCiAKLS8qIGZpZWxkcyB0aGF0IG5lZWQgdG8gYmUgbG9nZ2VkLiBUaGV5IGFwcGVhciBhcyBmbGFncyBpbiBzZXNzaW9uLT5sb2d3YWl0ICovCisvKiBmaWVsZHMgdGhhdCBuZWVkIHRvIGJlIGxvZ2dlZC4gVGhleSBhcHBlYXIgYXMgZmxhZ3MgaW4gc2Vzc2lvbi0+bG9ncy5sb2d3YWl0ICovCiAjZGVmaW5lIExXX0RBVEUJCTEJLyogZGF0ZSAqLwogI2RlZmluZSBMV19DTElQCQkyCS8qIENMaWVudCBJUCAqLwogI2RlZmluZSBMV19TVklQCQk0CS8qIFNlclZlciBJUCAqLwpAQCAtMzQ1LDYgKzM2Myw3IEBACiAjZGVmaW5lIExXX1JFU1AJCTMyCS8qIGh0dHAgUkVTUG9uc2UgKi8KICNkZWZpbmUgTFdfUFhJUAkJNjQJLyogcHJveHkgSVAgKi8KICNkZWZpbmUgTFdfUFhJRAkJMTI4CS8qIHByb3h5IElEICovCisjZGVmaW5lIExXX0JZVEVTCTI1NgkvKiBieXRlcyByZWFkIGZyb20gc2VydmVyICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTM2Myw2ICszODIsNyBAQAogICAgIHVuc2lnbmVkIGludCBsOwkJCS8qIGRhdGEgbGVuZ3RoICovCiAgICAgY2hhciAqciwgKncsICpoLCAqbHI7ICAgICAJCS8qIHJlYWQgcHRyLCB3cml0ZSBwdHIsIGxhc3QgaGVhZGVyIHB0ciwgbGFzdCByZWFkICovCiAgICAgY2hhciAqcmxpbTsJCQkJLyogcmVhZCBsaW1pdCwgdXNlZCBmb3IgaGVhZGVyIHJld3JpdGluZyAqLworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbDsJCS8qIHRvdGFsIGRhdGEgcmVhZCAqLwogICAgIGNoYXIgZGF0YVtCVUZTSVpFXTsKIH07CiAKQEAgLTQwOSwxMyArNDI5LDIyIEBACiAgICAgaW50IHNydl9zdGF0ZTsJCQkvKiBzdGF0ZSBvZiB0aGUgc2VydmVyIHNpZGUgKi8KICAgICBpbnQgY29ubl9yZXRyaWVzOwkJCS8qIG51bWJlciBvZiBjb25uZWN0IHJldHJpZXMgbGVmdCAqLwogICAgIGludCBmbGFnczsJCQkJLyogc29tZSBmbGFncyBkZXNjcmliaW5nIHRoZSBzZXNzaW9uICovCi0gICAgaW50IGxvZ3dhaXQ7CQkJLyogbG9nIHRoaW5ncyB3YWl0aW5nIHRvIGJlIGNvbGxlY3RlZCA6IExXXyogKi8KICAgICBzdHJ1Y3QgYnVmZmVyICpyZXE7CQkJLyogcmVxdWVzdCBidWZmZXIgKi8KICAgICBzdHJ1Y3QgYnVmZmVyICpyZXA7CQkJLyogcmVzcG9uc2UgYnVmZmVyICovCiAgICAgc3RydWN0IHNvY2thZGRyX2luIGNsaV9hZGRyOwkvKiB0aGUgY2xpZW50IGFkZHJlc3MgKi8KICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc3J2X2FkZHI7CS8qIHRoZSBhZGRyZXNzIHRvIGNvbm5lY3QgdG8gKi8KICAgICBzdHJ1Y3Qgc2VydmVyICpzcnY7CQkJLyogdGhlIHNlcnZlciBiZWluZyB1c2VkICovCi0gICAgY2hhciAqcmVxdXJpOwkJCS8qIGZpcnN0IGxpbmUgaWYgbG9nIG5lZWRlZCwgTlVMTCBvdGhlcndpc2UgKi8KKyAgICBzdHJ1Y3QgeworCWludCBsb2d3YWl0OwkJCS8qIGxvZyBmaWVsZHMgd2FpdGluZyB0byBiZSBjb2xsZWN0ZWQgOiBMV18qICovCisJc3RydWN0IHRpbWV2YWwgdHZfYWNjZXB0OwkvKiBkYXRlIG9mIHRoZSBhY2NlcHQoKSAoYmVnaW5uaW5nIG9mIHRoZSBzZXNzaW9uKSAqLworCWxvbmcgIHRfcmVxdWVzdDsJCS8qIGRlbGF5IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSByZXF1ZXN0IGFycml2ZXMsIC0xIGlmIG5ldmVyIG9jY3VycyAqLworCWxvbmcgIHRfY29ubmVjdDsJCS8qIGRlbGF5IGJlZm9yZSB0aGUgY29ubmVjdCgpIHRvIHRoZSBzZXJ2ZXIgc3VjY2VlZHMsIC0xIGlmIG5ldmVyIG9jY3VycyAqLworCWxvbmcgIHRfZGF0YTsJCQkvKiBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IGRhdGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIgLi4uICovCisJdW5zaWduZWQgbG9uZyAgdF9jbG9zZTsJCS8qIHRvdGFsIHNlc3Npb24gZHVyYXRpb24gKi8KKwljaGFyICp1cmk7CQkJLyogZmlyc3QgbGluZSBpZiBsb2cgbmVlZGVkLCBOVUxMIG90aGVyd2lzZSAqLworCWludCBzdGF0dXM7CQkJLyogSFRUUCBzdGF0dXMgZnJvbSB0aGUgc2VydmVyLCBuZWdhdGl2ZSBpZiBmcm9tIHByb3h5ICovCisJbG9uZyBsb25nIGJ5dGVzOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGZyb20gdGhlIHNlcnZlciAqLworICAgIH0gbG9nczsKIH07CiAKIHN0cnVjdCBwcm94eSB7CkBAIC00MzUsNiArNDY0LDcgQEAKICAgICBpbnQgY29ubl9yZXRyaWVzOwkJCS8qIG1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3QgcmV0cmllcyAqLwogICAgIGludCBvcHRpb25zOwkJCS8qIFBSX09fUkVESVNQLCBQUl9PX1RSQU5TUCAqLwogICAgIGludCBtb2RlOwkJCQkvKiBtb2RlID0gUFJfTU9ERV9UQ1AsIFBSX01PREVfSFRUUCBvciBQUl9NT0RFX0hFQUxUSCAqLworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzb3VyY2VfYWRkcjsJLyogdGhlIGFkZHJlc3MgdG8gd2hpY2ggd2Ugd2FudCB0byBiaW5kIGZvciBjb25uZWN0KCkgKi8KICAgICBzdHJ1Y3QgcHJveHkgKm5leHQ7CiAgICAgc3RydWN0IHNvY2thZGRyX2luIGxvZ3NydjEsIGxvZ3NydjI7IC8qIDIgc3lzbG9nIHNlcnZlcnMgKi8KICAgICBjaGFyIGxvZ2ZhYzEsIGxvZ2ZhYzI7CQkvKiBsb2cgZmFjaWxpdHkgZm9yIGJvdGggc2VydmVycy4gLTEgPSBkaXNhYmxlZCAqLwpAQCAtNTM5LDE5ICs1NjksMTkgQEAKICNkZWZpbmUgTUFYX0hPU1ROQU1FX0xFTgkzMgogc3RhdGljIGNoYXIgaG9zdG5hbWVbTUFYX0hPU1ROQU1FX0xFTl0gPSAiIjsKIAotY29uc3QgY2hhciAqSFRUUF80MDMgPQotCSJIVFRQLzEuMCA0MDMgRm9yYmlkZGVuXHJcbiIKK2NvbnN0IGNoYXIgKkhUVFBfNDAwID0KKwkiSFRUUC8xLjAgNDAwIEJhZCByZXF1ZXN0XHJcbiIKIAkiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVcclxuIgogCSJDb25uZWN0aW9uOiBjbG9zZVxyXG4iCiAJIlxyXG4iCi0JIjQwMyBGb3JiaWRkZW4gOiBSZXF1ZXN0IGZvcmJpZGRlbiBieSBhZG1pbmlzdHJhdGl2ZSBydWxlcy5cclxuIjsKKwkiNDAwIEJhZCByZXF1ZXN0IDogWW91ciBicm93c2VyIHNlbnQgYW4gaW52YWxpZCByZXF1ZXN0LlxyXG4iOwogCi1jb25zdCBjaGFyICpIVFRQXzQwMCA9Ci0JIkhUVFAvMS4wIDQwMCBCYWQgcmVxdWVzdFxyXG4iCitjb25zdCBjaGFyICpIVFRQXzQwMyA9CisJIkhUVFAvMS4wIDQwMyBGb3JiaWRkZW5cclxuIgogCSJDYWNoZS1Db250cm9sOiBuby1jYWNoZVxyXG4iCiAJIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIKIAkiXHJcbiIKLQkiNDAwIEJhZCByZXF1ZXN0IDogWW91ciBicm93c2VyIHNlbnQgYW4gaW52YWxpZCByZXF1ZXN0LlxyXG4iOworCSI0MDMgRm9yYmlkZGVuIDogUmVxdWVzdCBmb3JiaWRkZW4gYnkgYWRtaW5pc3RyYXRpdmUgcnVsZXMuXHJcbiI7CiAKIGNvbnN0IGNoYXIgKkhUVFBfNTAyID0KIAkiSFRUUC8xLjAgNTAyIFByb3h5IEVycm9yXHJcbiIKQEAgLTYyOSw3ICs2NTksNyBAQAogCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwogCXRtPWxvY2FsdGltZSgmdHYudHZfc2VjKTsKIAlmcHJpbnRmKHN0ZGVyciwgIltBTEVSVF0gJTAzZC8lMDJkJTAyZCUwMmQgKCVkKSA6ICIsCi0JCXRtLT50bV95ZGF5LCB0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYywgZ2V0cGlkKCkpOworCQl0bS0+dG1feWRheSwgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsIChpbnQpZ2V0cGlkKCkpOwogCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdwKTsKIAlmZmx1c2goc3RkZXJyKTsKIAl2YV9lbmQoYXJncCk7CkBAIC02NTEsNyArNjgxLDcgQEAKIAlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKIAl0bT1sb2NhbHRpbWUoJnR2LnR2X3NlYyk7CiAJZnByaW50ZihzdGRlcnIsICJbV0FSTklOR10gJTAzZC8lMDJkJTAyZCUwMmQgKCVkKSA6ICIsCi0JCXRtLT50bV95ZGF5LCB0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYywgZ2V0cGlkKCkpOworCQl0bS0+dG1feWRheSwgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsIChpbnQpZ2V0cGlkKCkpOwogCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdwKTsKIAlmZmx1c2goc3RkZXJyKTsKIAl2YV9lbmQoYXJncCk7CkBAIC02ODMsNyArNzEzLDcgQEAKICAgICBjaGFyICpjOwogICAgIGludCBwb3J0OwogCi0gICAgYnplcm8oJnNhLCBzaXplb2Yoc2EpKTsKKyAgICBtZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKICAgICBzdHI9c3RyZHVwKHN0cik7CiAKICAgICBpZiAoKGM9c3RycmNocihzdHIsJzonKSkgIT0gTlVMTCkgewpAQCAtMTIyNiwxMCArMTI1NiwxMCBAQAogICogaW5zcGlyZWQgZnJvbSBQYXRyaWNrIFNjaGFhZidzIGV4YW1wbGUgb2YgbmZfZ2V0c29ja25hbWUoKSBpbXBsZW1lbnRhdGlvbi4KICAqLwogc3RhdGljIGludCBnZXRfb3JpZ2luYWxfZHN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyX2luICpzYSwgaW50ICpzYWxlbikgewotI2lmIGRlZmluZWQoVFJBTlNQQVJFTlQpICYmIGRlZmluZWQoU09fT1JJR0lOQUxfRFNUKQorI2lmIGRlZmluZWQoVFBST1hZKSAmJiBkZWZpbmVkKFNPX09SSUdJTkFMX0RTVCkKICAgICByZXR1cm4gZ2V0c29ja29wdChmZCwgU09MX0lQLCBTT19PUklHSU5BTF9EU1QsICh2b2lkICopc2EsIHNhbGVuKTsKICNlbHNlCi0jaWYgZGVmaW5lZChUUkFOU1BBUkVOVCkgJiYgZGVmaW5lZChVU0VfR0VUU09DS05BTUUpCisjaWYgZGVmaW5lZChUUFJPWFkpICYmIGRlZmluZWQoVVNFX0dFVFNPQ0tOQU1FKQogICAgIHJldHVybiBnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKXNhLCBzYWxlbik7CiAjZWxzZQogICAgIHJldHVybiAtMTsKQEAgLTEyNDUsOCArMTI3NSw4IEBACiAJcG9vbF9mcmVlKGJ1ZmZlciwgcy0+cmVxKTsKICAgICBpZiAocy0+cmVwKQogCXBvb2xfZnJlZShidWZmZXIsIHMtPnJlcCk7Ci0gICAgaWYgKHMtPnJlcXVyaSkKLQlwb29sX2ZyZWUocmVxdXJpLCBzLT5yZXF1cmkpOworICAgIGlmIChzLT5sb2dzLnVyaSkKKwlwb29sX2ZyZWUocmVxdXJpLCBzLT5sb2dzLnVyaSk7CiAKICAgICBwb29sX2ZyZWUoc2Vzc2lvbiwgcyk7CiB9CkBAIC0xMjg4LDcgKzEzMTgsNyBAQAogCWVsc2UgLyogdW5rbm93biBiYWxhbmNpbmcgYWxnb3JpdGhtICovCiAJICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZWxzZSBpZiAoKihpbnQgKikmcy0+cHJveHktPmRpc3BhdGNoX2FkZHIpIHsKKyAgICBlbHNlIGlmICgqKGludCAqKSZzLT5wcm94eS0+ZGlzcGF0Y2hfYWRkci5zaW5fYWRkcikgewogCS8qIGNvbm5lY3QgdG8gdGhlIGRlZmluZWQgZGlzcGF0Y2ggYWRkciAqLwogCXMtPnNydl9hZGRyID0gcy0+cHJveHktPmRpc3BhdGNoX2FkZHI7CiAgICAgfQpAQCAtMTMxOSw2ICsxMzQ5LDE0IEBACiAJcmV0dXJuIC0xOwogICAgIH0KIAorICAgIC8qIGFsbG93IHNwZWNpZmljIGJpbmRpbmcgKi8KKyAgICBpZiAocy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0JJTkRfU1JDICYmCisJYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzLT5wcm94eS0+c291cmNlX2FkZHIsIHNpemVvZihzLT5wcm94eS0+c291cmNlX2FkZHIpKSA9PSAtMSkgeworCUFsZXJ0KCJDYW5ub3QgYmluZCB0byBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBwcm94eSAlcy4gQWJvcnRpbmcuXG4iLCBzLT5wcm94eS0+aWQpOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCQogICAgIGlmICgoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzLT5zcnZfYWRkciwgc2l6ZW9mKHMtPnNydl9hZGRyKSkgPT0gLTEpICYmIChlcnJubyAhPSBFSU5QUk9HUkVTUykpIHsKIAlpZiAoZXJybm8gPT0gRUFHQUlOKSB7IC8qIG5vIGZyZWUgcG9ydHMgbGVmdCwgdHJ5IGFnYWluIGxhdGVyICovCiAJICAgIHFmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IGNvbm5lY3QsIG5vIGZyZWUgcG9ydHMuXG4iKTsKQEAgLTE0MDUsNiArMTQ0Myw4IEBACiAJCWlmIChiLT5yID09IGItPmRhdGEgKyBCVUZTSVpFKSB7CiAJCSAgICBiLT5yID0gYi0+ZGF0YTsgLyogd3JhcCBhcm91bmQgdGhlIGJ1ZmZlciAqLwogCQl9CisKKwkJYi0+dG90YWwgKz0gcmV0OwogCQkvKiB3ZSBob3BlIHRvIHJlYWQgbW9yZSBkYXRhIG9yIHRvIGdldCBhIGNsb3NlIG9uIG5leHQgcm91bmQgKi8KIAkJY29udGludWU7CiAJICAgIH0KQEAgLTE0OTgsNiArMTUzOCw4IEBACiAJCWlmIChiLT5yID09IGItPmRhdGEgKyBCVUZTSVpFKSB7CiAJCSAgICBiLT5yID0gYi0+ZGF0YTsgLyogd3JhcCBhcm91bmQgdGhlIGJ1ZmZlciAqLwogCQl9CisKKwkJYi0+dG90YWwgKz0gcmV0OwogCQkvKiB3ZSBob3BlIHRvIHJlYWQgbW9yZSBkYXRhIG9yIHRvIGdldCBhIGNsb3NlIG9uIG5leHQgcm91bmQgKi8KIAkJY29udGludWU7CiAJICAgIH0KQEAgLTE3NDYsMjEgKzE3ODgsNDUgQEAKICAgICAgKiBjb21wdXRlZC4KICAgICAgKi8KIAotICAgIGxvZyA9IHAtPnRvX2xvZyAmIH5zLT5sb2d3YWl0OworICAgIGxvZyA9IHAtPnRvX2xvZyAmIH5zLT5sb2dzLmxvZ3dhaXQ7CiAKICAgICBwbiA9IChsb2cgJiBMV19DTElQKSA/CiAJICh1bnNpZ25lZCBjaGFyICopJnMtPmNsaV9hZGRyLnNpbl9hZGRyIDoKIAkgKHVuc2lnbmVkIGNoYXIgKikiXDBcMFwwXDAiOwogCi0gICAgdXJpID0gKGxvZyAmIExXX1JFUSkgPyBzLT5yZXF1cmkgOiAiPHJlcXVyaT4iOworICAgIHVyaSA9IChsb2cgJiBMV19SRVEpID8gcy0+bG9ncy51cmkgOiAiPEJBRFJFUT4iOwogICAgIHB4aWQgPSBwLT5pZDsKICAgICAvL3NydiA9IChsb2cgJiBMV19TVklEKSA/IHMtPnNydi0+aWQgOiAiPHN2aWQ+IjsKLSAgICBzcnYgPSAoKHAtPnRvX2xvZyAmIExXX1NWSUQpICYmIHMtPnNydiAhPSBOVUxMKSA/IHMtPnNydi0+aWQgOiAiPHN2aWQ+IjsKLQkKLSAgICBzZW5kX2xvZyhwLCBMT0dfSU5GTywgIiVkLiVkLiVkLiVkOiVkICVzICVzIFwiJXNcIlxuIiwKLQkgICAgIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLCBudG9ocyhzLT5jbGlfYWRkci5zaW5fcG9ydCksCi0JICAgICBweGlkLCBzcnYsIHVyaSk7Ci0gICAgcy0+bG9nd2FpdCA9IDA7CisgICAgc3J2ID0gKChwLT50b19sb2cgJiBMV19TVklEKSAmJiBzLT5zcnYgIT0gTlVMTCkgPyBzLT5zcnYtPmlkIDogIjxOT1NSVj4iOworCisgICAgaWYgKHAtPnRvX2xvZyAmIExXX0RBVEUpIHsKKwlzdHJ1Y3QgdG0gKnRtID0gbG9jYWx0aW1lKCZzLT5sb2dzLnR2X2FjY2VwdC50dl9zZWMpOworCisJc2VuZF9sb2cocCwgTE9HX0lORk8sICIlZC4lZC4lZC4lZDolZCBbJTAyZC8lcy8lMDRkOiUwMmQ6JTAyZDolMDJkXSAlcyAlcyAlZC8lZC8lZC8lZCAlZCAlbGxkIFwiJXNcIlxuIiwKKwkJIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLCBudG9ocyhzLT5jbGlfYWRkci5zaW5fcG9ydCksCisJCSB0bS0+dG1fbWRheSwgbW9udGhuYW1lW3RtLT50bV9tb25dLCB0bS0+dG1feWVhcisxOTAwLAorCQkgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCisJCSBweGlkLCBzcnYsCisJCSBzLT5sb2dzLnRfcmVxdWVzdCwKKwkJIChzLT5sb2dzLnRfY29ubmVjdCA+PSAwKSA/IHMtPmxvZ3MudF9jb25uZWN0IC0gcy0+bG9ncy50X3JlcXVlc3QgOiAtMSwKKwkJIChzLT5sb2dzLnRfZGF0YSA+PSAwKSA/IHMtPmxvZ3MudF9kYXRhIC0gcy0+bG9ncy50X2Nvbm5lY3QgOiAtMSwKKwkJIHMtPmxvZ3MudF9jbG9zZSwKKwkJIHMtPmxvZ3Muc3RhdHVzLCBzLT5sb2dzLmJ5dGVzLAorCQkgdXJpKTsKKyAgICB9CisgICAgZWxzZSB7CisJc2VuZF9sb2cocCwgTE9HX0lORk8sICIlZC4lZC4lZC4lZDolZCAlcyAlcyAlZC8lZC8lZC8lZCAlZCAlbGxkIFwiJXNcIlxuIiwKKwkJIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLCBudG9ocyhzLT5jbGlfYWRkci5zaW5fcG9ydCksCisJCSBweGlkLCBzcnYsCisJCSBzLT5sb2dzLnRfcmVxdWVzdCwKKwkJIChzLT5sb2dzLnRfY29ubmVjdCA+PSAwKSA/IHMtPmxvZ3MudF9jb25uZWN0IC0gcy0+bG9ncy50X3JlcXVlc3QgOiAtMSwKKwkJIChzLT5sb2dzLnRfZGF0YSA+PSAwKSA/IHMtPmxvZ3MudF9kYXRhIC0gcy0+bG9ncy50X2Nvbm5lY3QgOiAtMSwKKwkJIHMtPmxvZ3MudF9jbG9zZSwKKwkJIHMtPmxvZ3Muc3RhdHVzLCBzLT5sb2dzLmJ5dGVzLAorCQkgdXJpKTsKKyAgICB9CisKKyAgICBzLT5sb2dzLmxvZ3dhaXQgPSAwOwogfQogCiAKQEAgLTE4MzMsOSArMTg5OSwxOCBAQAogCXMtPnJlc19jciA9IHMtPnJlc19jdyA9IHMtPnJlc19zciA9IHMtPnJlc19zdyA9IFJFU19TSUxFTlQ7CiAJcy0+Y2xpX2ZkID0gY2ZkOwogCXMtPnNydl9mZCA9IC0xOworCXMtPnNydiA9IE5VTEw7CiAJcy0+Y29ubl9yZXRyaWVzID0gcC0+Y29ubl9yZXRyaWVzOwotCXMtPnJlcXVyaSA9IE5VTEw7Ci0Jcy0+bG9nd2FpdCA9IHAtPnRvX2xvZzsKKworCXMtPmxvZ3MubG9nd2FpdCA9IHAtPnRvX2xvZzsKKwlzLT5sb2dzLnR2X2FjY2VwdCA9IG5vdzsKKwlzLT5sb2dzLnRfcmVxdWVzdCA9IC0xOworCXMtPmxvZ3MudF9jb25uZWN0ID0gLTE7CisJcy0+bG9ncy50X2RhdGEgPSAtMTsKKwlzLT5sb2dzLnRfY2xvc2UgPSAwOworCXMtPmxvZ3MudXJpID0gTlVMTDsKKwlzLT5sb2dzLnN0YXR1cyA9IC0xOworCXMtPmxvZ3MuYnl0ZXMgPSAwOwogCiAJaWYgKChwLT5tb2RlID09IFBSX01PREVfVENQIHx8IHAtPm1vZGUgPT0gUFJfTU9ERV9IVFRQKQogCSAgICAmJiAocC0+bG9nZmFjMSA+PSAwIHx8IHAtPmxvZ2ZhYzIgPj0gMCkpIHsKQEAgLTE4NTEsOCArMTkyNiw4IEBACiAKIAkgICAgaWYgKHAtPnRvX2xvZykgewogCQkvKiB3ZSBoYXZlIHRoZSBjbGllbnQgaXAgKi8KLQkJaWYgKHMtPmxvZ3dhaXQgJiBMV19DTElQKQotCQkgICAgaWYgKCEocy0+bG9nd2FpdCAmPSB+TFdfQ0xJUCkpCisJCWlmIChzLT5sb2dzLmxvZ3dhaXQgJiBMV19DTElQKQorCQkgICAgaWYgKCEocy0+bG9ncy5sb2d3YWl0ICY9IH5MV19DTElQKSkKIAkJCXNlc3NfbG9nKHMpOwogCSAgICB9CiAJICAgIGVsc2UKQEAgLTE4NzUsNiArMTk1MCw3IEBACiAJICAgIHJldHVybiAwOwogCX0KIAlzLT5yZXEtPmwgPSAwOworCXMtPnJlcS0+dG90YWwgPSAwOwogCXMtPnJlcS0+aCA9IHMtPnJlcS0+ciA9IHMtPnJlcS0+bHIgPSBzLT5yZXEtPncgPSBzLT5yZXEtPmRhdGE7CS8qIHIgYW5kIHcgd2lsbCBiZSByZXNldCBmdXJ0aGVyICovCiAJcy0+cmVxLT5ybGltID0gcy0+cmVxLT5kYXRhICsgQlVGU0laRTsKIAlpZiAocy0+Y2xpX3N0YXRlID09IENMX1NUSEVBREVSUykgLyogcmVzZXJ2ZXIgc29tZSBzcGFjZSBmb3IgaGVhZGVyIHJld3JpdGluZyAqLwpAQCAtMTg4OCw2ICsxOTY0LDcgQEAKIAkgICAgcmV0dXJuIDA7CiAJfQogCXMtPnJlcC0+bCA9IDA7CisJcy0+cmVwLT50b3RhbCA9IDA7CiAJcy0+cmVwLT5oID0gcy0+cmVwLT5yID0gcy0+cmVwLT5sciA9IHMtPnJlcC0+dyA9IHMtPnJlcC0+cmxpbSA9IHMtPnJlcC0+ZGF0YTsKIAogCWZkdGFiW2NmZF0ucmVhZCAgPSAmZXZlbnRfY2xpX3JlYWQ7CkBAIC0yMDg4LDYgKzIxNjUsNyBAQAogCiAJCWlmICh0LT5mbGFncyAmIFNOX0NMREVOWSkgewogCQkgICAgLyogbm8gbmVlZCB0byBnbyBmdXJ0aGVyICovCisJCSAgICB0LT5sb2dzLnN0YXR1cyA9IDQwMzsKIAkJICAgIGNsaWVudF9yZXRuY2xvc2UodCwgc3RybGVuKEhUVFBfNDAzKSwgSFRUUF80MDMpOwogCQkgICAgcmV0dXJuIDE7CiAJCX0KQEAgLTIxMDksNiArMjE4Nyw3IEBACiAJCXQtPmNsaV9zdGF0ZSA9IENMX1NUREFUQTsKIAkJcmVxLT5ybGltID0gcmVxLT5kYXRhICsgQlVGU0laRTsgLyogbm8gbW9yZSByZXdyaXRlIG5lZWRlZCAqLwogCisJCXQtPmxvZ3MudF9yZXF1ZXN0ID0gdHZfZGVsdGEoJnQtPmxvZ3MudHZfYWNjZXB0LCAmbm93KTsKIAkJLyogRklYTUU6IHdlJ2xsIHNldCB0aGUgY2xpZW50IGluIGEgd2FpdCBzdGF0ZSB3aGlsZSB3ZSB0cnkgdG8KIAkJICogY29ubmVjdCB0byB0aGUgc2VydmVyLiBJcyB0aGlzIHJlYWxseSBuZWVkZWQgPyB3b3VsZG4ndCBpdCBiZQogCQkgKiBiZXR0ZXIgdG8gcmVsZWFzZSB0aGUgbWF4aW11bSBvZiBzeXN0ZW0gYnVmZmVycyBpbnN0ZWFkID8gKi8KQEAgLTIxNDEsMjUgKzIyMjAsMjUgQEAKIAkgICAgICogICByZXEtPnIgID0gZW5kIG9mIGRhdGEgKG5vdCB1c2VkIGF0IHRoaXMgc3RhZ2UpCiAJICAgICAqLwogCi0JICAgIGlmICh0LT5sb2d3YWl0ICYgTFdfUkVRICYmCi0JCXQtPnByb3h5LT5tb2RlICYgUFJfTU9ERV9IVFRQICYmCi0JCXQtPnByb3h5LT5vcHRpb25zICYgUFJfT19MT0dIVFRQKSB7CisJICAgIGlmICh0LT5sb2dzLmxvZ3dhaXQgJiBMV19SRVEgJiYKKwkJdC0+cHJveHktPm1vZGUgJiBQUl9NT0RFX0hUVFApIHsKIAkJLyogd2UgaGF2ZSBhIGNvbXBsZXRlIEhUVFAgcmVxdWVzdCB0aGF0IHdlIG11c3QgbG9nICovCiAJCWludCB1cmlsZW47CiAKLQkJaWYgKCh0LT5yZXF1cmkgPSBwb29sX2FsbG9jKHJlcXVyaSkpID09IE5VTEwpIHsKKwkJaWYgKCh0LT5sb2dzLnVyaSA9IHBvb2xfYWxsb2MocmVxdXJpKSkgPT0gTlVMTCkgewogCQkgICAgQWxlcnQoIkhUVFAgbG9nZ2luZyA6IG91dCBvZiBtZW1vcnkuXG4iKTsKLQkJICAgIGNsaWVudF9yZXRuY2xvc2UodCwgc3RybGVuKEhUVFBfNDAzKSwgSFRUUF80MDMpOworCQkgICAgdC0+bG9ncy5zdGF0dXMgPSA1MDI7CisJCSAgICBjbGllbnRfcmV0bmNsb3NlKHQsIHN0cmxlbihIVFRQXzUwMiksIEhUVFBfNTAyKTsKIAkJICAgIHJldHVybiAxOwogCQl9CiAJCQogCQl1cmlsZW4gPSBwdHIgLSByZXEtPmg7CiAJCWlmICh1cmlsZW4gPj0gUkVRVVJJX0xFTikKIAkJICAgIHVyaWxlbiA9IFJFUVVSSV9MRU4gLSAxOwotCQltZW1jcHkodC0+cmVxdXJpLCByZXEtPmgsIHVyaWxlbik7Ci0JCXQtPnJlcXVyaVt1cmlsZW5dID0gMDsKKwkJbWVtY3B5KHQtPmxvZ3MudXJpLCByZXEtPmgsIHVyaWxlbik7CisJCXQtPmxvZ3MudXJpW3VyaWxlbl0gPSAwOwogCi0JCWlmICghKHQtPmxvZ3dhaXQgJj0gfkxXX1JFUSkpCisJCWlmICghKHQtPmxvZ3MubG9nd2FpdCAmPSB+TFdfUkVRKSkKIAkJICAgIHNlc3NfbG9nKHQpOwogCSAgICB9CiAKQEAgLTIzMDksNiArMjM4OCw3IEBACiAJICogd29uJ3QgYmUgYWJsZSB0byBmcmVlIG1vcmUgbGF0ZXIsIHNvIHRoZSBzZXNzaW9uIHdpbGwgbmV2ZXIgdGVybWluYXRlLgogCSAqLwogCWlmIChyZXEtPmwgPj0gcmVxLT5ybGltIC0gcmVxLT5kYXRhKSB7CisJICAgIHQtPmxvZ3Muc3RhdHVzID0gNDAwOwogCSAgICBjbGllbnRfcmV0bmNsb3NlKHQsIHN0cmxlbihIVFRQXzQwMCksIEhUVFBfNDAwKTsKIAkgICAgcmV0dXJuIDE7CiAJfQpAQCAtMjUwNyw2ICsyNTg3LDcgQEAKIAkJICAgIC8qIGlmIGNvbm5fcmV0cmllcyA8IDAgb3Igb3RoZXIgZXJyb3IsIGxldCdzIGFib3J0ICovCiAJCSAgICB0dl9ldGVybml0eSgmdC0+Y25leHBpcmUpOwogCQkgICAgdC0+c3J2X3N0YXRlID0gU1ZfU1RDTE9TRTsKKwkJICAgIHQtPmxvZ3Muc3RhdHVzID0gNTAyOwogCQkgICAgY2xpZW50X3JldHVybih0LCBzdHJsZW4oSFRUUF81MDIpLCBIVFRQXzUwMik7CiAJCX0KIAkgICAgfQpAQCAtMjUzOSw2ICsyNjIwLDggQEAKIAkgICAgcmV0dXJuIDE7CiAJfQogCWVsc2UgeyAvKiBubyBlcnJvciBvciB3cml0ZSAwICovCisJICAgIHQtPmxvZ3MudF9jb25uZWN0ID0gdHZfZGVsdGEoJnQtPmxvZ3MudHZfYWNjZXB0LCAmbm93KTsKKwogCSAgICAvL2ZwcmludGYoc3RkZXJyLCIzOiBjPSVkLCBzPSVkXG4iLCBjLCBzKTsKIAkgICAgaWYgKHJlcS0+bCA9PSAwKSAvKiBub3RoaW5nIHRvIHdyaXRlICovCiAJCUZEX0NMUih0LT5zcnZfZmQsIFN0YXRpY1dyaXRlRXZlbnQpOwpAQCAtMjYwMCw2ICsyNjgzLDcgQEAKIAogCQl0LT5zcnZfc3RhdGUgPSBTVl9TVERBVEE7CiAJCXJlcC0+cmxpbSA9IHJlcC0+ZGF0YSArIEJVRlNJWkU7IC8qIG5vIG1vcmUgcmV3cml0ZSBuZWVkZWQgKi8KKwkJdC0+bG9ncy50X2RhdGEgPSB0dl9kZWx0YSgmdC0+bG9ncy50dl9hY2NlcHQsICZub3cpOwogCQlicmVhazsKIAkgICAgfQogCkBAIC0yNjMwLDYgKzI3MTQsMTIgQEAKIAkgICAgICogICByZXAtPnIgID0gZW5kIG9mIGRhdGEgKG5vdCB1c2VkIGF0IHRoaXMgc3RhZ2UpCiAJICAgICAqLwogCisKKwkgICAgaWYgKHQtPmxvZ3MubG9nd2FpdCAmIExXX1JFU1ApIHsKKwkJdC0+bG9ncy5sb2d3YWl0ICY9IH5MV19SRVNQOworCQl0LT5sb2dzLnN0YXR1cyA9IGF0b2kocmVwLT5oICsgOSk7CisJICAgIH0KKwogCSAgICBkZWxldGVfaGVhZGVyID0gMDsKIAogCSAgICBpZiAoKGdsb2JhbC5tb2RlICYgTU9ERV9ERUJVRykgJiYgIShnbG9iYWwubW9kZSAmIE1PREVfUVVJRVQpKSB7CkBAIC0yOTk0LDggKzMwODQsMTIgQEAKIAl3cml0ZSgxLCB0cmFzaCwgbGVuKTsKICAgICB9CiAKKyAgICBzLT5sb2dzLnRfY2xvc2UgPSB0dl9kZWx0YSgmcy0+bG9ncy50dl9hY2NlcHQsICZub3cpOworICAgIGlmIChzLT5yZXAgIT0gTlVMTCkKKwlzLT5sb2dzLmJ5dGVzID0gcy0+cmVwLT50b3RhbDsKKwogICAgIC8qIGxldCdzIGRvIGEgZmluYWwgbG9nIGlmIHdlIG5lZWQgaXQgKi8KLSAgICBpZiAocy0+bG9nd2FpdCkKKyAgICBpZiAocy0+bG9ncy5sb2d3YWl0ICYmICghKHMtPnByb3h5LT5vcHRpb25zICYgUFJfT19OVUxMTk9MT0cpIHx8IHMtPnJlcS0+dG90YWwpKQogCXNlc3NfbG9nKHMpOwogCiAgICAgLyogdGhlIHRhc2sgTVVTVCBub3QgYmUgaW4gdGhlIHJ1biBxdWV1ZSBhbnltb3JlICovCkBAIC0zNzUyLDcgKzM4NDYsNyBAQAogCWlmICghc3RyY21wKGFyZ3NbMV0sICJyZWRpc3BhdGNoIikpCiAJICAgIC8qIGVuYWJsZSByZWNvbm5lY3Rpb25zIHRvIGRpc3BhdGNoICovCiAJICAgIGN1cnByb3h5LT5vcHRpb25zIHw9IFBSX09fUkVESVNQOwotI2lmZGVmIFRSQU5TUEFSRU5UCisjaWZkZWYgVFBST1hZCiAJZWxzZSBpZiAoIXN0cmNtcChhcmdzWzFdLCAidHJhbnNwYXJlbnQiKSkKIAkgICAgLyogZW5hYmxlIHRyYW5zcGFyZW50IHByb3h5IGNvbm5lY3Rpb25zICovCiAJICAgIGN1cnByb3h5LT5vcHRpb25zIHw9IFBSX09fVFJBTlNQOwpAQCAtMzc2NSw4ICszODU5LDExIEBACiAJICAgIGN1cnByb3h5LT5vcHRpb25zIHw9IFBSX09fRldERk9SOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnc1sxXSwgImh0dHBsb2ciKSkgewogCSAgICAvKiBnZW5lcmF0ZSBhIGNvbXBsZXRlIEhUVFAgbG9nICovCi0JICAgIGN1cnByb3h5LT5vcHRpb25zIHw9IFBSX09fTE9HSFRUUDsKLQkgICAgY3VycHJveHktPnRvX2xvZyB8PSBMV19EQVRFIHwgTFdfQ0xJUCB8IExXX1NWSUQgfCBMV19SRVEgfCBMV19QWElEOworCSAgICBjdXJwcm94eS0+dG9fbG9nIHw9IExXX0RBVEUgfCBMV19DTElQIHwgTFdfU1ZJRCB8IExXX1JFUSB8IExXX1BYSUQgfCBMV19SRVNQOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZ3NbMV0sICJkb250bG9nbnVsbCIpKSB7CisJICAgIC8qIGRvbid0IGxvZyBlbXB0eSByZXF1ZXN0cyAqLworCSAgICBjdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX05VTExOT0xPRzsKIAl9CiAJZWxzZSB7CiAJICAgIEFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiB1bmtub3duIG9wdGlvbiA8JXM+LlxuIiwgZmlsZSwgbGluZW51bSwgYXJnc1sxXSk7CkBAIC0zNzc4LDcgKzM4NzUsNyBAQAogCS8qIGVuYWJsZSByZWNvbm5lY3Rpb25zIHRvIGRpc3BhdGNoICovCiAJY3VycHJveHktPm9wdGlvbnMgfD0gUFJfT19SRURJU1A7CiAgICAgfQotI2lmZGVmIFRSQU5TUEFSRU5UCisjaWZkZWYgVFBST1hZCiAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmdzWzBdLCAidHJhbnNwYXJlbnQiKSkgewogCS8qIGVuYWJsZSB0cmFuc3BhcmVudCBwcm94eSBjb25uZWN0aW9ucyAqLwogCWN1cnByb3h5LT5vcHRpb25zIHw9IFBSX09fVFJBTlNQOwpAQCAtMzkzNCw2ICs0MDMxLDE2IEBACiAJICAgIHJldHVybiAtMTsKIAl9CiAgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJnc1swXSwgInNvdXJjZSIpKSB7ICAvKiBhZGRyZXNzIHRvIHdoaWNoIHdlIGJpbmQgd2hlbiBjb25uZWN0aW5nICovCisJaWYgKHN0cmNocihhcmdzWzFdLCAnOicpID09IE5VTEwpIHsKKwkgICAgQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IDxzb3VyY2U+IGV4cGVjdHMgPGFkZHI6cG9ydD4gYXMgYXJndW1lbnQuXG4iLAorCQkgIGZpbGUsIGxpbmVudW0pOworCSAgICByZXR1cm4gLTE7CisJfQorCQorCWN1cnByb3h5LT5zb3VyY2VfYWRkciA9ICpzdHIyc2EoYXJnc1sxXSk7CisJY3VycHJveHktPm9wdGlvbnMgfD0gUFJfT19CSU5EX1NSQzsKKyAgICB9CiAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmdzWzBdLCAiY2xpZXhwIikgfHwgIXN0cmNtcChhcmdzWzBdLCAicmVxcmVwIikpIHsgIC8qIHJlcGxhY2UgcmVxdWVzdCBoZWFkZXIgZnJvbSBhIHJlZ2V4ICovCiAJcmVnZXhfdCAqcHJlZzsKIAkKQEAgLTQyMzMsMTkgKzQzNDAsMjAgQEAKIAkJfQogCQlsaW5lKys7CiAJICAgIH0KLQkgICAgZWxzZSB7Ci0JCWlmICgqbGluZSA9PSAnIycgfHwgKmxpbmUgPT0gJ1xuJyB8fCAqbGluZSA9PSAnXHInKQotCQkgICAgKmxpbmUgPSAwOyAvKiBlbmQgb2Ygc3RyaW5nLCBlbmQgb2YgbG9vcCAqLwotCQllbHNlCi0JCSAgICBsaW5lKys7Ci0JCQorCSAgICBlbHNlIGlmICgqbGluZSA9PSAnIycgfHwgKmxpbmUgPT0gJ1xuJyB8fCAqbGluZSA9PSAnXHInKSB7CisJCS8qIGVuZCBvZiBzdHJpbmcsIGVuZCBvZiBsb29wICovCisJCSpsaW5lID0gMDsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoaXNzcGFjZSgqbGluZSkpIHsKIAkJLyogYSBub24tZXNjYXBlZCBzcGFjZSBpcyBhbiBhcmd1bWVudCBzZXBhcmF0b3IgKi8KLQkJaWYgKGlzc3BhY2UoKmxpbmUpKSB7Ci0JCSAgICAqbGluZSsrID0gMDsKLQkJICAgIHdoaWxlIChpc3NwYWNlKCpsaW5lKSkKLQkJCWxpbmUrKzsKLQkJICAgIGFyZ3NbKythcmddID0gbGluZTsKLQkJfQorCQkqbGluZSsrID0gMDsKKwkJd2hpbGUgKGlzc3BhY2UoKmxpbmUpKQorCQkgICAgbGluZSsrOworCQlhcmdzWysrYXJnXSA9IGxpbmU7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWxpbmUrKzsKIAkgICAgfQogCX0KIApAQCAtNDI5OSw3ICs0NDA3LDcgQEAKIAl9CiAJaWYgKChjdXJwcm94eS0+bW9kZSAhPSBQUl9NT0RFX0hFQUxUSCkgJiYKIAkgICAgIShjdXJwcm94eS0+b3B0aW9ucyAmIChQUl9PX1RSQU5TUCB8IFBSX09fQkFMQU5DRSkpICYmCi0JICAgICgqKGludCAqKSZjdXJwcm94eS0+ZGlzcGF0Y2hfYWRkciA9PSAwKSkgeworCSAgICAoKihpbnQgKikmY3VycHJveHktPmRpc3BhdGNoX2FkZHIuc2luX2FkZHIgPT0gMCkpIHsKIAkgICAgQWxlcnQoInBhcnNpbmcgJXMgOiBsaXN0ZW5lciAlcyBoYXMgbm8gZGlzcGF0Y2ggYWRkcmVzcyBhbmQgaXMgbm90IGluIHRyYW5zcGFyZW50IG9yIGJhbGFuY2UgbW9kZS5cbiIsCiAJCSAgICBmaWxlLCBjdXJwcm94eS0+aWQpOwogCSAgICBjZmdlcnIrKzsKQEAgLTQzMTUsNyArNDQyMyw3IEBACiAJCSAgICAgIGZpbGUsIGN1cnByb3h5LT5pZCk7CiAJCWNmZ2VycisrOwogCSAgICB9Ci0JICAgIGVsc2UgaWYgKCooaW50ICopJmN1cnByb3h5LT5kaXNwYXRjaF9hZGRyICE9IDApIHsKKwkgICAgZWxzZSBpZiAoKihpbnQgKikmY3VycHJveHktPmRpc3BhdGNoX2FkZHIuc2luX2FkZHIgIT0gMCkgewogCQlXYXJuaW5nKCJwYXJzaW5nICVzIDogZGlzcGF0Y2ggYWRkcmVzcyBvZiBsaXN0ZW5lciAlcyB3aWxsIGJlIGlnbm9yZWQgaW4gYmFsYW5jZSBtb2RlLlxuIiwKIAkJCWZpbGUsIGN1cnByb3h5LT5pZCk7CiAJICAgIH0KQEAgLTQ1NTksNyArNDY2Nyw3IEBACiAvLwkgIGlmIChjdXJwcm94eS0+bG9nZmFjMiA+PSAwKQogLy8JICAgICAgc2VuZF9zeXNsb2coJmN1cnByb3h5LT5sb2dzcnYyLCBjdXJwcm94eS0+bG9nZmFjMiwgTE9HX0lORk8sIHRyYXNoKTsKIAotCXNlbmRfbG9nKGN1cnByb3h5LCBMT0dfSU5GTywgIlByb3h5ICVzIHN0YXJ0ZWQuXG4iLCBjdXJwcm94eS0+aWQpOworCXNlbmRfbG9nKGN1cnByb3h5LCBMT0dfTk9USUNFLCAiUHJveHkgJXMgc3RhcnRlZC5cbiIsIGN1cnByb3h5LT5pZCk7CiAJCiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtNDYyNyw2ICs0NzM1LDcgQEAKIAlpZiAocHJvYyA9PSBnbG9iYWwubmJwcm9jKQogCSAgICBleGl0KDApOyAvKiBwYXJlbnQgbXVzdCBsZWF2ZSAqLwogCisJcGlkID0gZ2V0cGlkKCk7IC8qIHVwZGF0ZSBjaGlsZCdzIHBpZCAqLwogCXNldHBnaWQoMSwgMCk7CiAgICAgfQogCkBAIC00NjM0LDMgKzQ3NDMsNCBAQAogCiAgICAgZXhpdCgwKTsKIH0KKwo=