ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBlN2Q5M2E4Li4xOWVhMDllIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDUgKzEsMjAgQEAKLSAqIENoYW5nZUxvZyA6CisqIENoYW5nZUxvZyA6CiAgKgorICogMjAwMi8xMC8xOCA6IDEuMS4xNworICogICAtIGFkZCB0aGUgbm90aW9uIG9mICJiYWNrdXAiIHNlcnZlcnMsIHdoaWNoIGFyZSB1c2VkIG9ubHkgd2hlbiBhbGwgb3RoZXIKKyAqICAgICBzZXJ2ZXJzIGFyZSBkb3duLgorICogICAtIG1ha2UgU2V0LUNvb2tpZSByZXR1cm4gIiIgaW5zdGVhZCBvZiAiKG51bGwpIiB3aGVuIHRoZSBzZXJ2ZXIgaGFzIG5vCisgKiAgICAgY29va2llIGFzc2lnbmVkICh1c2VmdWwgZm9yIGJhY2t1cCBzZXJ2ZXJzKS4KKyAqICAgLSAibG9nIiBub3cgc3VwcG9ydHMgYW4gb3B0aW9ubmFsIGxldmVsIG5hbWUgKGluZm8sIG5vdGljZSwgZXJyIC4uLikgYWJvdmUKKyAqICAgICB3aGljaCBub3RoaW5nIGlzIHNlbnQuCisgKiAgIC0gcmVwbGFjZWQgc29tZSBzdHJuY21wKCkgd2l0aCBtZW1jbXAoKSBmb3IgYmV0dGVyIGVmZmljaWVuY3kuCisgKiAgIC0gYWRkZWQgImNhcHR1cmUgY29va2llIiBvcHRpb24gd2hpY2ggbG9ncyBjbGllbnQgYW5kL29yIHNlcnZlciBjb29raWVzCisgKiAgIC0gY2xlYW5lZCB1cC9kb3duIG1lc3NhZ2VzIGFuZCBkdW1wIHNlcnZlcnMgc3RhdGVzIHVwb24gU0lHSFVQCisgKiAgIC0gYWRkZWQgYSByZWRpcmVjdGlvbiBmZWF0dXJlIGZvciBlcnJvcnMgOiAiZXJyb3Jsb2MgPGVycm51bT4gPHVybD4iCisgKiAgIC0gbm93IHdlIHdvbid0IGluc2lzdCBvbiBjb25uZWN0aW5nIHRvIGEgZGVhZCBzZXJ2ZXIsIGV2ZW4gd2l0aCBhIGNvb2tpZSwKKyAqICAgICB1bmxlc3Mgb3B0aW9uICJwZXJzaXN0IiBpcyBzcGVjaWZpZWQuCisgKiAgIC0gYWRkZWQgSFRUUC80MDggcmVzcG9uc2UgZm9yIGNsaWVudCByZXF1ZXN0IHRpbWUtb3V0IGFuZCBIVFRQLzUwWzIzNF0gZm9yCisgKiAgICAgc2VydmVyIHJlcGx5IHRpbWUtb3V0IG9yIGVycm9ycy4KICAqIDIwMDIvMDkvMDEgOiAxLjEuMTYKICAqICAgLSBpbXBsZW1lbnQgSFRUUCBoZWFsdGggY2hlY2tzIHdoZW4gb3B0aW9uICJodHRwY2hrIiBpcyBzcGVjaWZpZWQuCiAgKiAyMDAyLzA4LzA3IDogMS4xLjE1CmRpZmYgLS1naXQgYS9kb2MvaGFwcm94eS50eHQgYi9kb2MvaGFwcm94eS50eHQKaW5kZXggMDZlZDJmOS4uMTgwOTBiYSAxMDA2NDQKLS0tIGEvZG9jL2hhcHJveHkudHh0CisrKyBiL2RvYy9oYXByb3h5LnR4dApAQCAtMSw5ICsxLDkgQEAKIAogICAgICAgICAgCQkgICAgIEggQSAtIFAgciBvIHggeQogICAgICAgICAgCQkgICAgIC0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgCQkgICAgICB2ZXJzaW9uIDEuMS4xNgorICAgICAgICAgCQkgICAgICB2ZXJzaW9uIDEuMS4xNwogCQkJICAgICAgd2lsbHkgdGFycmVhdQotCQkJICAgICAgIDIwMDIvMDkvMDEKKwkJCSAgICAgICAyMDAyLzEwLzI1CiAKID09PT09PT09PT09PT09PT0KIHwgSW50cm9kdWN0aW9uIHwKQEAgLTE1LDkgKzE1LDExIEBACiAgIC0gZWZmZWN0dWVyIHVuZSBy6XBhcnRpdGlvbiBkZSBjaGFyZ2UgYXZlYyBjculhdGlvbiBkZSBjb29raWVzIHBvdXIgYXNzdXJlciBsYQogICAgIHBlcnNpc3RlbmNlIGRlIHNlc3Npb24gOyAKICAgLSBmb3VybmlyIHVuZSB2aXNpYmlsaXTpIGV4dGVybmUgZGUgc29uIOl0YXQgZGUgc2FudOkgOwotICAtIHMnYXJy6nRlciBlbiBkb3VjZXVyIHNhbnMgcGVydGUgYnJ1dGFsZSBkZSBzZXJ2aWNlLgotICAtIG1vZGlmaWVyL2Fqb3V0ZXIvc3VwcHJpbWVyIGRlcyBlbnTqdGVzIGRhbnMgbGEgcmVxdep0ZSBldCBsYSBy6XBvbnNlLgotICAtIGludGVyZGlyZSBkZXMgcmVxdep0ZXMgcXVpIHbpcmlmaWVudCBjZXJ0YWluZXMgY29uZGl0aW9ucy4KKyAgLSBzJ2Fycup0ZXIgZW4gZG91Y2V1ciBzYW5zIHBlcnRlIGJydXRhbGUgZGUgc2VydmljZSA7CisgIC0gbW9kaWZpZXIvYWpvdXRlci9zdXBwcmltZXIgZGVzIGVudOp0ZXMgZGFucyBsYSByZXF16nRlIGV0IGxhIHLpcG9uc2UgOworICAtIGludGVyZGlyZSBkZXMgcmVxdep0ZXMgcXVpIHbpcmlmaWVudCBjZXJ0YWluZXMgY29uZGl0aW9ucyA7CisgIC0gdXRpbGlzZXIgZGVzIHNlcnZldXJzIGRlIHNlY291cnMgbG9yc3F1ZSBsZXMgc2VydmV1cnMgcHJpbmNpcGF1eCBzb250IGhvcnMKKyAgICBkJ3VzYWdlLgogCiBJbCByZXF1aWVydCBwZXUgZGUgcmVzc291cmNlcywgZXQgc29uIGFyY2hpdGVjdHVyZSDpduluZW1lbnRpZWxsZSBtb25vLXByb2Nlc3N1cwogbHVpIHBlcm1ldCBmYWNpbGVtZW50IGRlIGfpcmVyIHBsdXNpZXVycyBtaWxsaWVycyBkZSBjb25uZXhpb25zIHNpbXVsdGFu6WVzIHN1cgpAQCAtODMsNyArODUsNyBAQAogcHJveGllcy4gSWxzIHNvbnQgdG91cyBzcOljaWZp6XMgZGFucyBsYSBzZWN0aW9uICdnbG9iYWwnLiBMZXMgcGFyYW3odHJlcwogc3VwcG9ydOlzIHNvbnQgOgogCi0gIC0gbG9nIDxhZHJlc3NlPiA8Y2F06WdvcmllPgorICAtIGxvZyA8YWRyZXNzZT4gPGNhdOlnb3JpZT4gW25pdmVhdV9tYXhdCiAgIC0gbWF4Y29ubiA8bm9tYnJlPgogICAtIHVpZCA8aWRlbnRpZmlhbnQ+CiAgIC0gZ2lkIDxpZGVudGlmaWFudD4KQEAgLTk5LDEyICsxMDEsMTggQEAKIGFwcGFyaXRpb24gZGUgc2VydmV1cnMsIGNvbm5leGlvbnMsIGVycmV1cnMuIFRvdXMgbGVzIG1lc3NhZ2VzIHNvbnQgZW52b3npcyBlbgogc3lzbG9nIHZlcnMgdW4gb3UgZGV1eCBzZXJ2ZXVycy4gTGEgc3ludGF4ZSBlc3QgbGEgc3VpdmFudGUgOgogCi0gICAgbG9nIDxhZHJlc3NlX2lwPiA8ZmFjaWxpdHk+CisgICAgbG9nIDxhZHJlc3NlX2lwPiA8Y2F06WdvcmllPiBbbml2ZWF1X21heF0KIAogTGVzIGNvbm5leGlvbnMgc29udCBlbnZveellcyBlbiBuaXZlYXUgImluZm8iLiBMZXMgZOltYXJyYWdlcyBkZSBzZXJ2aWNlIGV0IGRlCiBzZXJ2ZXVycyBzZXJvbnQgZW52b3npcyBlbiAibm90aWNlIiwgbGVzIHNpZ25hdXggZCdhcnLqdHMgZW4gIndhcm5pbmciIGV0IGxlcwogYXJy6nRzIGTpZmluaXRpZnMgZGUgc2VydmljZXMgZXQgZGUgc2VydmV1cnMgZW4gImFsZXJ0Ii4gQ2VjaSBlc3QgdmFsYWJsZSBhdXNzaQotYmllbiBwb3VyIGxlcyBwcm94aWVzIHF1ZSBwb3VyIGxlcyBzZXJ2ZXVycyB0ZXN06XMgcGFyIGxlcyBwcm94aWVzLgorYmllbiBwb3VyIGxlcyBwcm94aWVzIHF1ZSBwb3VyIGxlcyBzZXJ2ZXVycyB0ZXN06XMgcGFyIGxlcyBwcm94aWVzLiBMZSBwYXJhbeh0cmUKK29wdGlvbm5lbCA8bml2ZWF1X21heD4gZOlmaW5pdCBsZSBuaXZlYXUgbWF4aW1hbCBkZSB0cmFjZXMg6W1pc2VzIHBhcm1pIGxlcyA4Cit2YWxldXJzIHN1aXZhbnRlcyAgOgorICAgIGVtZXJnLCBhbGVydCwgY3JpdCwgZXJyLCB3YXJuaW5nLCBub3RpY2UsIGluZm8sIGRlYnVnCisKK1BhciBjb21wYXRpYmlsaXTpIGF2ZWMgbGVzIHZlcnNpb25zIDEuMS4xNiBldCBhbnTpcmlldXJlcywgTGEgdmFsZXVyIHBhciBk6WZhdXQKK2VzdCAiZGVidWciIHNpIGwnb3B0aW9uIG4nZXN0IHBhcyBwculjaXPpZS4KIAogTGVzIGNhdOlnb3JpZXMgcG9zc2libGVzIHNvbnQgOgogICAgIGtlcm4sIHVzZXIsIG1haWwsIGRhZW1vbiwgYXV0aCwgc3lzbG9nLCBscHIsIG5ld3MsCkBAIC0xMTUsNyArMTIzLDcgQEAKIC0tLS0tLS0tLQogICAgIGdsb2JhbAogCWxvZyAxOTIuMTY4LjIuMjAwIGxvY2FsMwotCWxvZyAxOTIuMTY4LjIuMjAxIGxvY2FsNAorCWxvZyAxMjcuMC4wLjEgICAgIGxvY2FsNCBub3RpY2UKIAogMS4yKSBsaW1pdGF0aW9uIGR1IG5vbWJyZSBkZSBjb25uZXhpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzOSw3ICsxNDcsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBZmluIGRlIHLpZHVpcmUgbGVzIHJpc3F1ZXMgZCdhdHRhcXVlcyBkYW5zIGxlIGNhcyBv+SB1bmUgZmFpbGxlIG5vbiBpZGVudGlmaellCiBzZXJhaXQgZXhwbG9pdOllLCBpbCBlc3QgcG9zc2libGUgZGUgZGltaW51ZXIgbGVzIHByaXZpbOhnZXMgZHUgcHJvY2Vzc3VzLCBldAotZGUgbGUgY2xvaXNvbm5lci4KK2RlIGwnaXNvbGVyIGRhbnMgdW4gculwZXJ0b2lyZSBzYW5zIHJpc3F1ZS4KIAogRGFucyBsYSBzZWN0aW9uICdnbG9iYWwnLCBsZSBwYXJhbeh0cmUgJ3VpZCcgcGVybWV0IGRlIHNw6WNpZmllciB1biBpZGVudGlmaWFudAogbnVt6XJpcXVlIGQndXRpbGlzYXRldXIuIExhIHZhbGV1ciAwLCBjb3JyZXNwb25kYW50IG5vcm1hbGVtZW50IGF1IHN1cGVyLQpAQCAtMTUzLDExICsxNjEsMTQgQEAKIAogTGUgcGFyYW3odHJlICdjaHJvb3QnIGF1dG9yaXNlIOAgY2hhbmdlciBsYSByYWNpbmUgZHUgcHJvY2Vzc3VzIHVuZSBmb2lzIGxlCiBwcm9ncmFtbWUgbGFuY+ksIGRlIHNvcnRlIHF1ZSBuaSBsZSBwcm9jZXNzdXMsIG5pIGwndW4gZGUgc2VzIGRlc2NlbmRhbnRzIG5lCi1wdWlzc2UgcmVtb250ZXIgZGUgbm91dmVhdSDgIGxhIHJhY2luZS4gQ2UgdHlwZSBkZSBjbG9pc29ubmVtZW50IChjaHJvb3QpIGVzdAorcHVpc3NlbnQgcmVtb250ZXIgZGUgbm91dmVhdSDgIGxhIHJhY2luZS4gQ2UgdHlwZSBkZSBjbG9pc29ubmVtZW50IChjaHJvb3QpIGVzdAogcGFyZm9pcyBjb250b3VybmFibGUgc3VyIGNlcnRhaW5zIE9TIChMaW51eCAyLjIsIFNvbGFyaXMpLCBtYWlzIHZpc2libGVtZW50CiBmaWFibGUgc3VyIGQnYXV0cmVzIChMaW51eCAyLjQpLiBBdXNzaSwgaWwgZXN0IGltcG9ydGFudCBkJ3V0aWxpc2VyIHVuCiBy6XBlcnRvaXJlIHNw6WNpZmlxdWUgYXUgc2VydmljZSBwb3VyIGNldCB1c2FnZSwgZXQgZGUgbmUgcGFzIG11dHVhbGlzZXIgdW4gbeptZQotculwZXJ0b2lyZSBwb3VyIHBsdXNpZXVycyBzZXJ2aWNlcyBkZSBuYXR1cmUgZGlmZulyZW50ZS4KK3LpcGVydG9pcmUgcG91ciBwbHVzaWV1cnMgc2VydmljZXMgZGUgbmF0dXJlIGRpZmbpcmVudGUuIFBvdXIgcmVuZHJlIGwnaXNvbGVtZW50CitwbHVzIHJvYnVzdGUsIGlsIGVzdCBjb25zZWlsbOkgZCd1dGlsaXNlciB1biBy6XBlcnRvaXJlIHZpZGUsIHNhbnMgYXVjdW4gZHJvaXQsCitldCBkZSBjaGFuZ2VyIGwndWlkIGR1IHByb2Nlc3N1cyBkZSBzb3J0ZSBxdSdpbCBuZSBwdWlzc2UgcmllbiBmYWlyZSBkYW5zIGxlZGl0City6XBlcnRvaXJlLgogCiBSZW1hcnF1ZTogZGFucyBsZSBjYXMgb/kgdW5lIHRlbGxlIGZhaWxsZSBzZXJhaXQgbWlzZSBlbiDpdmlkZW5jZSwgaWwgZXN0IGZvcnQKIHByb2JhYmxlIHF1ZSBsZXMgcHJlbWnocmVzIHRlbnRhdGl2ZXMgZGUgc29uIGV4cGxvaXRhdGlvbiBwcm92b3F1ZW50IHVuIGFycup0IGR1CkBAIC00NzMsOCArNDg0LDkgQEAKIAljb29raWUgU0VSVkVSSUQgcmV3cml0ZQogCiBQb3VyIGNy6WVyIHVuIGNvb2tpZSBjb21wb3J0YW50IGxhIHZhbGV1ciBhdHRyaWJ16WUg4CB1biBzZXJ2ZXVyIGxvcnMgZCd1biBhY2PocwotZW4gculwYXJ0aXRpb24gZGUgY2hhcmdlIGludGVybmUuIERhbnMgY2UgY2FzLCBpbCBlc3QgaW5kaXNwZW5zYWJsZSBxdWUgdG91cyBsZXMKLXNlcnZldXJzIGFpZW50IHVuIGNvb2tpZSByZW5zZWlnbukgOgorZW4gculwYXJ0aXRpb24gZGUgY2hhcmdlIGludGVybmUuIERhbnMgY2UgY2FzLCBpbCBlc3Qgc291aGFpdGFibGUgcXVlIHRvdXMgbGVzCitzZXJ2ZXVycyBhaWVudCB1biBjb29raWUgcmVuc2VpZ27pLiBVbiBzZXJ2ZXVyIG5vbiBhc3NpZ27pIGQndW4gY29va2llCityZXRvdXJuZXJhIHVuIGNvb2tpZSB2aWRlIChjb29raWUgZGUgc3VwcHJlc3Npb24pIDoKIAogCWNvb2tpZSBTRVJWRVJJRCBpbnNlcnQKIApAQCAtNTEwLDggKzUyMiw4IEBACiAKIDIuMTApIEFzc2lnbmF0aW9uIGQndW4gc2VydmV1ciDgIHVuZSB2YWxldXIgZGUgY29va2llCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FbiBtb2RlIEhUVFAsIGlsIGVzdCBwb3NzaWJsZSBkJ2Fzc29jaWVyIGRlcyBzZXJ2ZXVycyDgIGRlcyB2YWxldXJzIGRlCi1jb29raWUgcGFyIGxlIHBhcmFt6HRyZSAnc2VydmVyJy4gTGEgc3ludGF4ZSBlc3QgOgorRW4gbW9kZSBIVFRQLCBpbCBlc3QgcG9zc2libGUgZCdhc3NvY2llciBkZXMgdmFsZXVycyBkZSBjb29raWUg4CBkZXMgc2VydmV1cnMKK3BhciBsZSBwYXJhbeh0cmUgJ3NlcnZlcicuIExhIHN5bnRheGUgZXN0IDoKIAogICAgIHNlcnZlciA8aWRlbnRpZmlhbnQ+IDxhZHJlc3NlX2lwPjo8cG9ydD4gY29va2llIDx2YWxldXI+CiAKQEAgLTU1OCw3ICs1NzAsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbCBlc3QgcG9zc2libGUgZGUgdGVzdGVyIGwn6XRhdCBkZXMgc2VydmV1cnMgcGFyIOl0YWJsaXNzZW1lbnQgZGUgY29ubmV4aW9uIFRDUAogb3UgcGFyIGVudm9pIGQndW5lIHJlcXXqdGUgSFRUUC4gVW4gc2VydmV1ciBob3JzIGQndXNhZ2UgbmUgc2VyYSBwYXMgdXRpbGlz6QotZGFucyBsZXByb2Nlc3N1cyBkZSBy6XBhcnRpdGlvbiBkZSBjaGFyZ2UgaW50ZXJuZS4gUG91ciBhY3RpdmVyIGxhIHN1cnZlaWxsYW5jZSwKK2RhbnMgbGUgcHJvY2Vzc3VzIGRlIHLpcGFydGl0aW9uIGRlIGNoYXJnZSBpbnRlcm5lLiBQb3VyIGFjdGl2ZXIgbGEgc3VydmVpbGxhbmNlLAogYWpvdXRlciBsZSBtb3QgY2zpICdjaGVjaycg4CBsYSBmaW4gZGUgbGEgZOljbGFyYXRpb24gZHUgc2VydmV1ci4gSWwgZXN0CiBwb3NzaWJsZSBkZSBzcOljaWZpZXIgbCdpbnRlcnZhbGxlIChlbiBtaWxsaXNlY29uZGVzKSBz6XBhcmFudCBkZXV4IHRlc3RzIGR1CiBzZXJ2ZXVyIHBhciBsZSBwYXJhbeh0cmUgImludGVyIiwgbGUgbm9tYnJlIGQn6WNoZWNzIGFjY2VwdOlzIHBhciBsZSBwYXJhbeh0cmUKQEAgLTU3OCw2ICs1OTAsMjUgQEAKIExlIHRlbXBzIG1heGltYWwgaW1wYXJ0aSBwb3VyIHVuZSBy6XBvbnNlIGVzdCDpZ2FsIOAgbCdpbnRlcnZhbGxlIGVudHJlIGRldXgKIHRlc3RzIChwYXJhbeh0cmUgImludGVyIikuIFBvdXIgYWN0aXZlciBjZSBtb2RlLCBzcOljaWZpZXIgbCdvcHRpb24gImh0dHBjaGsiLgogCitEZXB1aXMgbGEgdmVyc2lvbiAxLjEuMTcsIGlsIGVzdCBwb3NzaWJsZSBkZSBk6WZpbmlyIGRlcyBzZXJ2ZXVycyBkZSBzZWNvdXJzLAordXRpbGlz6XMgdW5pcXVlbWVudCBsb3JzcXUnYXVjdW4gZGVzIGF1dHJlcyBzZXJ2ZXVycyBuZSBmb25jdGlvbm5lLiBQb3VyIGNlbGEsCitham91dGVyIGxlIG1vdCBjbOkgImJhY2t1cCIgc3VyIGxhIGxpZ25lIGRlIGTpZmluaXRpb24gZHUgc2VydmV1ci4gVW4gc2VydmV1cgorZGUgc2Vjb3VycyBuJ2VzdCBhcHBlbOkgcXVlIGxvcnNxdWUgdG91cyBsZXMgc2VydmV1cnMgbm9ybWF1eCwgYWluc2kgcXVlIHRvdXMKK2xlcyBzZXJ2ZXVycyBkZSBzZWNvdXJzIHF1aSBsZSBwculj6GRlbnQgc29udCBob3JzIGQndXNhZ2UuIElsIG4neSBhIGRvbmMgcGFzCitkZSBy6XBhcnRpdGlvbiBkZSBjaGFyZ2UgZW50cmUgZGVzIHNlcnZldXJzIGRlIHNlY291cnMuIENlIHR5cGUgZGUgc2VydmV1cnMKK3BldXQgc2VydmlyIOAgcmV0b3VybmVyIGRlcyBwYWdlcyBkJ2luZGlzcG9uaWJpbGl06SBkZSBzZXJ2aWNlLiBEYW5zIGNlIGNhcywKK2lsIGVzdCBwculm6XJhYmxlIGRlIG5lIHBhcyBhZmZlY3RlciBkZSBjb29raWUsIGFmaW4gcXVlIGxlcyBjbGllbnRzIHF1aSBsZQorcmVuY29udHJlbnQgbid5IHNvaWVudCBwYXMgYWZmZWN06XMgZOlmaW5pdGl2ZW1lbnQuIExlIGZhaXQgZGUgbmUgcGFzIG1ldHRyZQorZGUgY29va2llIGVudm9pZSB1biBjb29raWUgdmlkZSwgY2UgcXVpIGEgcG91ciBlZmZldCBkZSBzdXBwcmltZXIgdW4g6XZlbnR1ZWwKK2Nvb2tpZSBhZmZlY3TpIHBy6WPpZGVtbWVudC4KKworRW5maW4sIGRlcHVpcyBsYSB2ZXJzaW9uIDEuMS4xNywgaWwgZXN0IHBvc3NpYmxlIGRlIHZpc3VhbGlzZXIgcmFwaWRlbWVudCBsJ+l0YXQKK2NvdXJhbnQgZGUgdG91cyBsZXMgc2VydmV1cnMuIFBvdXIgY2VsYSwgaWwgc3VmZml0IGQnZW52b3llciB1biBzaWduYWwgU0lHSFVQIGF1Citwcm9jZXNzdXMgcHJveHkuIEwn6XRhdCBkZSB0b3VzIGxlcyBzZXJ2ZXVycyBkZSB0b3VzIGxlcyBwcm94aWVzIGVzdCBlbnZveekgZGFucworbGVzIGxvZ3MgZW4gbml2ZWF1ICJub3RpY2UiLCBhaW5zaSBxdWUgc3VyIGxhIHNvcnRpZSBkJ2VycmV1cnMgc2kgZWxsZSBlc3QKK2FjdGl2ZS4gQydlc3QgdW5lIGJvbm5lIHJhaXNvbiBwb3VyIGF2b2lyIGF1IG1vaW5zIHVuIHNlcnZldXIgZGUgbG9ncyBsb2NhbCBlbgorbml2ZWF1IG5vdGljZS4KKwogRXhlbXBsZXMgOgogLS0tLS0tLS0tLQogIyBt6m1lIHF1ZSBwculj6WRlbW1lbnQgYXZlYyBzdXJ2ZWlsbGFuY2UgVENQCkBAIC02MDYsNiArNjM3LDE2IEBACiAJYmFsYW5jZSByb3VuZHJvYmluCiAJc2VydmVyIHdlYjEgMTkyLjE2OC4xLjE6ODAgY29va2llIHNlcnZlcjAxIGNoZWNrCiAJc2VydmVyIHdlYjIgMTkyLjE2OC4xLjI6ODAgY29va2llIHNlcnZlcjAyIGNoZWNrCisKKyMgaWRlbSBhdmVjIHNlcnZldXIgYXBwbGljYXRpZiBkZSBzZWNvdXJzLCBldCBzZXJ2ZXVyIGRlIHBhZ2VzIGQnZXJyZXVycworICAgIGxpc3RlbiB3ZWJfYXBwbCAwLjAuMC4wOjgwCisJbW9kZSBodHRwCisJY29va2llIFNFUlZFUklEIGluc2VydCBub2NhY2hlIGluZGlyZWN0CisJYmFsYW5jZSByb3VuZHJvYmluCisJc2VydmVyIHdlYjEgMTkyLjE2OC4xLjE6ODAgY29va2llIHNlcnZlcjAxIGNoZWNrCisJc2VydmVyIHdlYjIgMTkyLjE2OC4xLjI6ODAgY29va2llIHNlcnZlcjAyIGNoZWNrCisJc2VydmVyIHdlYi1iYWNrdXAgMTkyLjE2OC4xLjM6ODAgY29va2llIHNlcnZlcjAzIGNoZWNrIGJhY2t1cAorCXNlcnZlciB3ZWItZXhjdXNlIDE5Mi4xNjguMS40OjgwIGNoZWNrIGJhY2t1cAogCiAKIDMuMikgUmVjb25uZXhpb24gdmVycyB1biBy6XBhcnRpdGV1ciBlbiBjYXMgZCfpY2hlYyBkaXJlY3QKQEAgLTYyNCw2ICs2NjUsMjIgQEAKIAlkaXNwYXRjaCAxOTIuMTY4LjEuMTAwOjgwCiAJc2VydmVyIHdlYjEgMTkyLjE2OC4xLjE6ODAgY29va2llIHNlcnZlcjAxCiAJc2VydmVyIHdlYjIgMTkyLjE2OC4xLjI6ODAgY29va2llIHNlcnZlcjAyCisJcmVkaXNwYXRjaCAjIHJlbnZveWVyIHZlcnMgZGlzcGF0Y2ggc2kgcmVmdXMgZGUgY29ubmV4aW9uLgorCitQYXIgZOlmYXV0IChldCBkYW5zIGxlcyB2ZXJzaW9ucyAxLjEuMTYgZXQgYW506XJpZXVyZXMpLCBsZSBwYXJhbeh0cmUgcmVkaXNwYXRjaAorbmUgcydhcHBsaXF1ZSBxdSdhdXgg6WNoZWNzIGRlIGNvbm5leGlvbiBhdSBzZXJ2ZXVyLiBEZXB1aXMgbGEgdmVyc2lvbiAxLjEuMTcsCitpbCBzJ2FwcGxpcXVlIGF1c3NpIGF1eCBjb25uZXhpb25zIGRlc3RpbullcyDgIGRlcyBzZXJ2ZXVycyBpZGVudGlmaelzIGNvbW1lCitob3JzIGQndXNhZ2UgcGFyIGxhIHN1cnZlaWxsYW5jZS4gU2kgbCdvbiBzb3VoYWl0ZSBtYWxncukgdG91dCBxdSd1biBjbGllbnQKK2Rpc3Bvc2FudCBkJ3VuIGNvb2tpZSBjb3JyZXNwb25kYW50IOAgdW4gc2VydmV1ciBk6WZlY3R1ZXV4IHRlbnRlIGRlIHMneQorY29ubmVjdGVyLCBpbCBmYXV0IHBy6WNpc2VyIGwnb3B0aW9uICJwZXJzaXN0IiA6CisKKyAgICBsaXN0ZW4gaHR0cF9wcm94eSAwLjAuMC4wOjgwCisJbW9kZSBodHRwCisJb3B0aW9uIHBlcnNpc3QKKwljb29raWUgU0VSVkVSSUQKKwlkaXNwYXRjaCAxOTIuMTY4LjEuMTAwOjgwCisJc2VydmVyIHdlYjEgMTkyLjE2OC4xLjE6ODAgY29va2llIHNlcnZlcjAxCisJc2VydmVyIHdlYjIgMTkyLjE2OC4xLjI6ODAgY29va2llIHNlcnZlcjAyCiAJcmVkaXNwYXRjaCAjIHJlbnZveWVyIHZlcnMgZGlzcGF0Y2ggc2kgc2VydmV1ciBIUy4KIAogCkBAIC02NjAsMTIgKzcxNywxNCBAQAogTGVzIGNvbm5leGlvbnMgVENQIGV0IEhUVFAgcGV1dmVudCBkb25uZXIgbGlldSDgIHVuZSBqb3VybmFsaXNhdGlvbiBzb21tYWlyZSBvdQogZOl0YWlsbOllIGluZGlxdWFudCwgcG91ciBjaGFxdWUgY29ubmV4aW9uLCBsYSBkYXRlLCBsJ2hldXJlLCBsJ2FkcmVzc2UgSVAKIHNvdXJjZSwgbGUgc2VydmV1ciBkZXN0aW5hdGlvbiwgbGEgZHVy6WUgZGUgbGEgY29ubmV4aW9uLCBsZXMgdGVtcHMgZGUgculwb25zZSwKLWxhIHJlcXXqdGUgSFRUUCwgbGUgY29kZSBkZSByZXRvdXIsIGxhIHF1YW50aXTpIGRlIGRvbm7pZXMgdHJhbnNtaXNlLgotVG91cyBsZXMgbWVzc2FnZXMgc29udCBlbnZveelzIGVuIHN5c2xvZyB2ZXJzIHVuIG91IGRldXggc2VydmV1cnMuIExhIHN5bnRheGUKK2xhIHJlcXXqdGUgSFRUUCwgbGUgY29kZSBkZSByZXRvdXIsIGxhIHF1YW50aXTpIGRlIGRvbm7pZXMgdHJhbnNtaXNlcywgZXQgbeptZQorZGFucyBjZXJ0YWlucyBjYXMsIGxhIHZhbGV1ciBkJ3VuIGNvb2tpZSBwZXJtZXR0YW50IGRlIHN1aXZyZSBsZXMgc2Vzc2lvbnMuCitUb3VzIGxlcyBtZXNzYWdlcyBzb250IGVudm956XMgZW4gc3lzbG9nIHZlcnMgdW4gb3UgZGV1eCBzZXJ2ZXVycy4gU2Ugculm6XJlciDgCitsYSBzZWN0aW9uIDEuMSBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbiBzdXIgbGVzIGNhdOlnb3JpZXMgZGUgbG9ncy4gIExhIHN5bnRheGUKIGVzdCBsYSBzdWl2YW50ZSA6CiAKLSAgICBsb2cgPGFkcmVzc2VfaXA+IDxmYWNpbGl0eT4KLSAgICBsb2cgPGFkcmVzc2VfaXA+IDxmYWNpbGl0eT4KKyAgICBsb2cgPGFkcmVzc2VfaXBfMT4gPGNhdOlnb3JpZV8xPiBbbml2ZWF1X21heF8xXQorICAgIGxvZyA8YWRyZXNzZV9pcF8yPiA8Y2F06WdvcmllXzI+IFtuaXZlYXVfbWF4XzJdCiBvdQogICAgIGxvZyBnbG9iYWwKIApAQCAtNjgxLDE1ICs3NDAsNiBAQAogCWxvZyAxOTIuMTY4LjIuMjAwIGxvY2FsMwogCWxvZyAxOTIuMTY4LjIuMjAxIGxvY2FsNAogCi1MZXMgY29ubmV4aW9ucyBzb250IGVudm956WVzIGVuIG5pdmVhdSAiaW5mbyIuIExlcyBk6W1hcnJhZ2VzIGRlIHNlcnZpY2Ugc2Vyb250Ci1lbnZveelzIGVuICJub3RpY2UiLCBsZXMgc2lnbmF1eCBkJ2Fycup0cyBlbiAid2FybmluZyIgZXQgbGVzIGFycup0cyBk6WZpbml0aWZzCi1lbiAiYWxlcnQiLiBDZWNpIGVzdCB2YWxhYmxlIGF1c3NpIGJpZW4gcG91ciBsZXMgcHJveGllcyBxdWUgcG91ciBsZXMgc2VydmV1cnMKLXRlc3TpcyBhdSBzZWluIGRlcyBwcm94aWVzLiBMZXMgY2F06WdvcmllcyBwb3NzaWJsZXMgc29udCA6Ci0KLSAgICBrZXJuLCB1c2VyLCBtYWlsLCBkYWVtb24sIGF1dGgsIHN5c2xvZywgbHByLCBuZXdzLAotICAgIHV1Y3AsIGNyb24sIGF1dGgyLCBmdHAsIG50cCwgYXVkaXQsIGFsZXJ0LCBjcm9uMiwKLSAgICBsb2NhbDAsIGxvY2FsMSwgbG9jYWwyLCBsb2NhbDMsIGxvY2FsNCwgbG9jYWw1LCBsb2NhbDYsIGxvY2FsNwotCiBQYXIgZOlmYXV0LCBsZXMgaW5mb3JtYXRpb25zIGNvbnRlbnVlcyBkYW5zIGxlcyBsb2dzIHNlIHNpdHVlbnQgYXUgbml2ZWF1IFRDUAogdW5pcXVlbWVudC4gSWwgZmF1dCBwculjaXNlciBsJ29wdGlvbiAnaHR0cGxvZycgcG91ciBvYnRlbmlyIGxlcyBk6XRhaWxzIGR1CiBwcm90b2NvbGUgSFRUUC4gRGFucyBsZXMgY2FzIG/5IHVuIG3pY2FuaXNtZSBkZSBzdXJ2ZWlsbGFuY2UgZWZmZWN0dWFudCBkZXMKQEAgLTY5Nyw2ICs3NDcsMzIgQEAKIGwnb3B0aW9uICdkb250bG9nbnVsbCcsIHBvdXIgbmUgcGx1cyBvYnRlbmlyIHVuZSBsaWduZSBkZSBsb2cgcG91ciBsZXMgc2Vzc2lvbnMKIG4nYXlhbnQgcGFzIGRvbm7pIGxpZXUg4CB1biDpY2hhbmdlIGRlIGRvbm7pZXMgKHJlcXXqdGUgb3Ugculwb25zZSkuCiAKK0xlIG1vdCBjbOkgImNhcHR1cmUiIHBlcm1ldCBkJ2Fqb3V0ZXIgZGFucyBkZXMgbG9ncyBIVFRQIGRlcyBpbmZvcm1hdGlvbnMKK2NhcHR1cullcyBkYW5zIGxlcyDpY2hhbmdlcy4gTGEgdmVyc2lvbiAxLjEuMTcgc3VwcG9ydGUgdW5pcXVlbWVudCB1bmUgY2FwdHVyZQorZGUgY29va2llcyBjbGllbnQgZXQgc2VydmV1ciwgY2UgcXVpIHBlcm1ldCBkYW5zIGJpZW4gZGVzIGNhcywgZGUgcmVjb25zdGl0dWVyCitsYSBzZXNzaW9uIGQndW4gdXRpbGlzYXRldXIuIExhIHN5bnRheGUgZXN0IGxhIHN1aXZhbnRlIDoKKworICAgIGNhcHR1cmUgY29va2llIDxwculmaXhlX2Nvb2tpZT4gbGVuIDxsb25ndWV1cl9jYXB0dXJlPgorCitMZSBwcmVtaWVyIGNvb2tpZSBkb250IGxlIG5vbSBjb21tZW5jZXJhIHBhciA8cHLpZml4ZV9jb29raWU+IHNlcmEgY2FwdHVy6SwgZXQKK3RyYW5zbWlzIHNvdXMgbGEgZm9ybWUgIk5PTT12YWxldXIiLCBzYW5zIHRvdXRlZm9pcywgZXhj6WRlciA8bG9uZ3VldXJfY2FwdHVyZT4KK2NhcmFjdOhyZXMgKDY0IGF1IG1heGltdW0pLiBMb3JzcXVlIGxlIG5vbSBkdSBjb29raWUgZXN0IGZpeGUgZXQgY29ubnUsIG9uIHBldXQKK2xlIHN1ZmZpeGVyIGR1IHNpZ25lICI9IiBwb3VyIHMnYXNzdXJlciBxdSdhdWN1biBhdXRyZSBjb29raWUgbmUgcHJlbmRyYSBzYQorcGxhY2UgZGFucyBsZXMgbG9ncy4KKworRXhlbXBsZXMgOgorLS0tLS0tLS0tLQorICAgICMgY2FwdHVyZSBkdSBwcmVtaWVyIGNvb2tpZSBkb250IGxlIG5vbSBjb21tZW5jZSBwYXIgIkFTUFNFU1NJT04iCisgICAgY2FwdHVyZSBjb29raWUgQVNQU0VTU0lPTiBsZW4gMzIKKworICAgICMgY2FwdHVyZSBkdSBwcmVtaWVyIGNvb2tpZSBkb250IGxlIG5vbSBlc3QgZXhhY3RlbWVudCAidmdudmlzaXRvciIKKyAgICBjYXB0dXJlIGNvb2tpZSB2Z252aXNpdG9yPSBsZW4gMzIKKworRGFucyBsZXMgbG9ncywgbGUgY2hhbXAgcHLpY+lkYW50IGxhIHJlcXXqdGUgSFRUUCBlc3QgbGUgY29va2llIHBvc2l0aW9ubukgcGFyCitsZSBzZXJ2ZXVyLCBwculj6WTpIGR1IGNvb2tpZSBwb3NpdGlvbm7pIHBhciBsZSBjbGllbnQuIENoYWN1biBkZSBjZXMgY2hhbXBzIGVzdAorcmVtcGxhY+kgcGFyIGxlIHNpZ25lICItIiBsb3JzcXUnYXVjdW4gY29va2llIG4nZXN0IGZvdXJuaSBwYXIgbGUgY2xpZW50IG91IGxlCitzZXJ2ZXVyLgorCiBFbmZpbiwgbCdvcHRpb24gJ2ZvcndhcmRmb3InIGFqb3V0ZSBsJ2FkcmVzc2UgSVAgZHUgY2xpZW50IGRhbnMgdW4gY2hhbXAKICdYLUZvcndhcmRlZC1Gb3InIGRlIGxhIHJlcXXqdGUsIGNlIHF1aSBwZXJtZXQg4CB1biBzZXJ2ZXVyIHdlYiBmaW5hbCBkZQogY29ubmHudHJlIGwnYWRyZXNzZSBJUCBkdSBjbGllbnQgaW5pdGlhbC4KQEAgLTcwOSw2ICs3ODUsNyBAQAogCW9wdGlvbiBodHRwbG9nCiAJb3B0aW9uIGRvbnRsb2dudWxsCiAJb3B0aW9uIGZvcndhcmRmb3IKKwljYXB0dXJlIGNvb2tpZSB1c2VyaWQ9IGxlbiAyMAogCiAKIDQuMykgTW9kaWZpY2F0aW9uIGRlcyBlbnTqdGVzIEhUVFAKQEAgLTgwMSw3ICs4NzgsNyBAQAogICAtIGNhY2hlciBjZSBjb29raWUg4CBsJ2FwcGxpY2F0aW9uIGxvcnMgZGVzIHJlcXXqdGVzIHVsdOlyaWV1cmVzLgogCiBFeGVtcGxlIDoKLS0tLS0tLS0KKy0tLS0tLS0tLQogICAgIGxpc3RlbiBhcHBsaWNhdGlvbiAwLjAuMC4wOjgwCiAJbW9kZSBodHRwCiAJY29va2llIFNFUlZFUklEIGluc2VydCBub2NhY2hlIGluZGlyZWN0CkBAIC04MDksNiArODg2LDQyIEBACiAJc2VydmVyIDE5Mi4xNjguMS4xOjgwIGNvb2tpZSBzZXJ2ZXIwMSBjaGVjawogCXNlcnZlciAxOTIuMTY4LjEuMjo4MCBjb29raWUgc2VydmVyMDIgY2hlY2sKIAorNC41KSBQZXJzb25hbGlzYXRpb24gZGVzIGVycmV1cnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NlcnRhaW5lcyBzaXR1YXRpb25zIGNvbmR1aXNlbnQg4CByZXRvdXJuZXIgdW5lIGVycmV1ciBIVFRQIGF1IGNsaWVudCA6CisgIC0gcmVxdep0ZSBpbnZhbGlkZSBvdSB0cm9wIGxvbmd1ZSA9PiBjb2RlIEhUVFAgNDAwCisgIC0gcmVxdep0ZSBtZXR0YW50IHRyb3AgZGUgdGVtcHMg4CB2ZW5pciA9PiBjb2RlIEhUVFAgNDA4CisgIC0gcmVxdep0ZSBpbnRlcmRpdGUgKGJsb3F16WUgcGFyIHVuIHJlcWlkZW55KSA9PiBjb2RlIEhUVFAgNDAzCisgIC0gZXJyZXVyIGludGVybmUgZHUgcHJveHkgPT4gY29kZSBIVFRQIDUwMAorICAtIGxlIHNlcnZldXIgYSByZXRvdXJu6SB1bmUgculwb25zZSBpbmNvbXBs6HRlIG91IGludmFsaWRlID0+IGNvZGUgSFRUUCA1MDIKKyAgLSBhdWN1biBzZXJ2ZXVyIGRpc3BvbmlibGUgcG91ciBjZXR0ZSByZXF16nRlID0+IGNvZGUgSFRUUCA1MDMKKyAgLSBsZSBzZXJ2ZXVyIG4nYSBwYXMgculwb25kdSBkYW5zIGxlIHRlbXBzIGltcGFydGkgPT4gY29kZSBIVFRQIDUwNAorCitVbiBtZXNzYWdlIGQnZXJyZXVyIHN1Y2NpbnQgdGly6SBkZSBsYSBSRkMgYWNjb21wYWduZSBjZXMgY29kZXMgZGUgcmV0b3VyLgorQ2VwZW5kYW50LCBlbiBmb25jdGlvbiBkdSB0eXBlIGRlIGNsaWVudOhsZSwgb24gcGV1dCBwculm6XJlciByZXRvdXJuZXIgZGVzCitwYWdlcyBwZXJzb25uYWxpc+llcy4gQ2VjaSBlc3QgcG9zc2libGUgcGFyIGxlIGJpYWlzIGRlIGxhIGNvbW1hbmRlICJlcnJvcmxvYyIgOgorCisgICAgZXJyb3Jsb2MgPGNvZGVfSFRUUD4gPGxvY2F0aW9uPgorCitBdSBsaWV1IGRlIGfpbulyZXIgdW5lIGVycmV1ciBIVFRQIDxjb2RlX0hUVFA+IHBhcm1pIGxlcyBjb2RlcyBjaXTpcyBjaS1kZXNzdXMsCitsZSBwcm94eSBn6W7ocmVyYSB1biBjb2RlIGRlIHJlZGlyZWN0aW9uIHRlbXBvcmFpcmUgKEhUVFAgMzAyKSB2ZXJzIGwnYWRyZXNzZQorZCd1bmUgcGFnZSBwculjaXPpZSBkYW5zIDxsb2NhdGlvbj4uIENldHRlIGFkcmVzc2UgcGV1dCDqdHJlIHJlbGF0aXZlIGF1IHNpdGUsCitvdSBhYnNvbHVlLiBDb21tZSBjZXR0ZSBy6XBvbnNlIGVzdCB0cmHudOllIHBhciBsZSBuYXZpZ2F0ZXVyIGR1IGNsaWVudAorbHVpLW3qbWUsIGlsIGVzdCBpbmRpc3BlbnNhYmxlIHF1ZSBsJ2FkcmVzc2UgZm91cm5pZSBsdWkgc29pdCBhY2Nlc3NpYmxlLgorCitFeGVtcGxlIDoKKy0tLS0tLS0tLQorICAgIGxpc3RlbiBhcHBsaWNhdGlvbiAwLjAuMC4wOjgwCisgICAgICAgIGVycm9ybG9jIDQwMCAvYmFkcmVxdWVzdC5odG1sCisgICAgICAgIGVycm9ybG9jIDQwMyAvZm9yYmlkZGVuLmh0bWwKKyAgICAgICAgZXJyb3Jsb2MgNDA4IC90b29sb25nLmh0bWwKKwllcnJvcmxvYyA1MDAgaHR0cDovL2hhcHJveHkuZG9tYWluLm5ldC9idWdyZXBvcnQuaHRtbAorICAgICAgICBlcnJvcmxvYyA1MDIgaHR0cDovLzE5Mi4xNjguMTE0LjU4L2Vycm9yNTB4Lmh0bWwKKyAgICAgICAgZXJyb3Jsb2MgNTAzIGh0dHA6Ly8xOTIuMTY4LjExNC41OC9lcnJvcjUweC5odG1sCisgICAgICAgIGVycm9ybG9jIDUwNCBodHRwOi8vMTkyLjE2OC4xMTQuNTgvZXJyb3I1MHguaHRtbAorCisKID09PT09PT09PT09PT09PT09PT09PT09CiB8IFBhcmFt6XRyYWdlIHN5c3TobWUgfAogPT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2hhcHJveHkuY2ZnIGIvZXhhbXBsZXMvaGFwcm94eS5jZmcKaW5kZXggOTdlZjcwYi4uM2I2ZjgyNSAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvaGFwcm94eS5jZmcKKysrIGIvZXhhbXBsZXMvaGFwcm94eS5jZmcKQEAgLTEsNSArMSw3IEBACiBnbG9iYWwKIAlsb2cgMTI3LjAuMC4xCWxvY2FsMAorCWxvZyAxMjcuMC4wLjEJbG9jYWwxIG5vdGljZQorCSNsb2cgbG9naG9zdAlsb2NhbDAgaW5mbwogCW1heGNvbm4gNDA5NgogCWNocm9vdCAvdG1wCiAJdWlkIDExCkBAIC0zNiw2ICszOCw3IEBACiAJY29va2llCVNFUlZFUklEIGluc2VydCBpbmRpcmVjdCBub2NhY2hlCiAJc2VydmVyCWluc3QxIDE5Mi4xNjguMTE0LjU2OjgwIGNvb2tpZSBzZXJ2ZXIwMSBjaGVjayBpbnRlciAyMDAwIGZhbGwgMwogCXNlcnZlcglpbnN0MiAxOTIuMTY4LjExNC41Njo4MSBjb29raWUgc2VydmVyMDIgY2hlY2sgaW50ZXIgMjAwMCBmYWxsIDMKKwljYXB0dXJlIGNvb2tpZSB2Z252aXNpdG9yPSBsZW4gMzIKIAlyZXRyaWVzCTMKIAlyZWRpc3BhdGNoCiAJbWF4Y29ubgkyMDAwCkBAIC02MiwzICs2NSw0NyBAQAogCWNsaXRpbWVvdXQJNTAwMDAKIAlzcnZ0aW1lb3V0CTUwMDAwCiAKK2xpc3RlbglhcHBsaTQtYmFja3VwIDAuMC4wLjA6MTAwMDQKKwlsb2cJZ2xvYmFsCisJbW9kZQlodHRwCisJb3B0aW9uCWh0dHBsb2cKKwlvcHRpb24JZG9udGxvZ251bGwKKwlvcHRpb24JaHR0cGNoaworCW9wdGlvbglwZXJzaXN0CisJYmFsYW5jZQlyb3VuZHJvYmluCisJc2VydmVyCWluc3QxIDE5Mi4xNjguMTE0LjU2OjgwIGNoZWNrIGludGVyIDIwMDAgZmFsbCAzCisJc2VydmVyCWluc3QyIDE5Mi4xNjguMTE0LjU2OjgxIGNoZWNrIGludGVyIDIwMDAgZmFsbCAzIGJhY2t1cAorCXJldHJpZXMJMworCXJlZGlzcGF0Y2gKKwltYXhjb25uCTIwMDAKKwljb250aW1lb3V0CTUwMDAKKwljbGl0aW1lb3V0CTUwMDAwCisJc3J2dGltZW91dAk1MDAwMAorCitsaXN0ZW4JYXBwbGk1LWJhY2t1cCAwLjAuMC4wOjEwMDA1CisJbG9nCWdsb2JhbAorCW1vZGUJaHR0cAorCW9wdGlvbglodHRwbG9nCisJb3B0aW9uCWRvbnRsb2dudWxsCisJb3B0aW9uCWh0dHBjaGsKKwliYWxhbmNlCXJvdW5kcm9iaW4KKwljb29raWUJU0VSVkVSSUQgaW5zZXJ0IGluZGlyZWN0IG5vY2FjaGUKKwlzZXJ2ZXIJaW5zdDEgMTkyLjE2OC4xMTQuNTY6ODAgY29va2llIHNlcnZlcjAxIGNoZWNrIGludGVyIDIwMDAgZmFsbCAzCisJc2VydmVyCWluc3QyIDE5Mi4xNjguMTE0LjU2OjgxIGNvb2tpZSBzZXJ2ZXIwMiBjaGVjayBpbnRlciAyMDAwIGZhbGwgMworCXNlcnZlcglpbnN0MyAxOTIuMTY4LjExNC41Nzo4MCBiYWNrdXAgY2hlY2sgaW50ZXIgMjAwMCBmYWxsIDMKKwljYXB0dXJlIGNvb2tpZSBBU1BTRVNTSU9OIGxlbiAzMgorCXJldHJpZXMJMworCXJlZGlzcGF0Y2gKKwltYXhjb25uCTIwMDAKKwljb250aW1lb3V0CTUwMDAKKwljbGl0aW1lb3V0CTUwMDAwCisJc3J2dGltZW91dAk1MDAwMAorCisJcmVxaWRlbCBeQ29ubmVjdGlvbjoJCSMgZGlzYWJsZSBrZWVwLWFsaXZlCisJcmVxYWRkICBDb25uZWN0aW9uOlwgY2xvc2UKKwlyc3BpZGVsIF5Db25uZWN0aW9uOgorCXJzcGFkZCAgQ29ubmVjdGlvbjpcIGNsb3NlCisJcnNwaWRlbCBeU2V0LWNvb2tpZTpcIElQPQkjIGRvIG5vdCBsZXQgdGhpcyBjb29raWUgdGVsbCBvdXIgaW50ZXJuYWwgSVAgYWRkcmVzcworCQorCWVycm9ybG9jCTUwMglodHRwOi8vMTkyLjE2OC4xMTQuNTgvZXJyb3I1MDIuaHRtbAorCmRpZmYgLS1naXQgYS9oYXByb3h5LmMgYi9oYXByb3h5LmMKaW5kZXggMGRmYTQ2ZS4uZTM0MzQ2MCAxMDA2NDQKLS0tIGEvaGFwcm94eS5jCisrKyBiL2hhcHJveHkuYwpAQCAtMTEsMTMgKzExLDI3IEBACiAgKiAgIC0gc29sYXJpcyBvbmx5IDogc29tZXRpbWVzLCBhbiBIVFRQIHByb3h5IHdpdGggb25seSBhIGRpc3BhdGNoIGFkZHJlc3MgY2F1c2VzCiAgKiAgICAgdGhlIHByb3h5IHRvIHRlcm1pbmF0ZSAobm8gY29yZSkgaWYgdGhlIGNsaWVudCBicmVha3MgdGhlIGNvbm5lY3Rpb24gZHVyaW5nCiAgKiAgICAgdGhlIHJlc3BvbnNlLiBTZWVuIG9uIDEuMS44cHJlNCwgYnV0IG5ldmVyIHJlcHJvZHVjZWQuIE1heSBub3QgYmUgcmVsYXRlZCB0bwotICogICAgIHRoZSBzbnByaW50ZigpIGJ1ZyBzaW5jZSByZXF1ZXN0cyB3ZSBzaW1wbGUgKEdFVCAvIEhUVFAvMS4wKS4KLSAqICAgLSBjb29raWUgaW4gaW5zZXJ0K2luZGlyZWN0IG1vZGUgc29tZXRpbWVzIHNlZ2ZhdWx0cyAhCisgKiAgICAgdGhlIHNucHJpbnRmKCkgYnVnIHNpbmNlIHJlcXVlc3RzIHdlcmUgc2ltcGxlIChHRVQgLyBIVFRQLzEuMCksIGJ1dCBtYXkgYmUKKyAqICAgICByZWxhdGVkIHRvIG1pc3Npbmcgc2V0c2lkKCkgKGZpeGVkIGluIDEuMS4xNSkKICAqICAgLSBhIHByb3h5IHdpdGggYW4gaW52YWxpZCBjb25maWcgd2lsbCBwcmV2ZW50IHRoZSBzdGFydHVwIGV2ZW4gaWYgZGlzYWJsZWQuCi0gKiAgIC0gaXQgbWF5IGJlIG5pY2UgdG8gcmV0dXJuIEhUVFAgNTAyIHdoZW4gYSBzZXJ2ZXIgcmV0dXJucyBubyBoZWFkZXIgbm9yIGRhdGEuCiAgKgogICogQ2hhbmdlTG9nIDoKICAqCisgKiAyMDAyLzEwLzE4IDogMS4xLjE3CisgKiAgIC0gYWRkIHRoZSBub3Rpb24gb2YgImJhY2t1cCIgc2VydmVycywgd2hpY2ggYXJlIHVzZWQgb25seSB3aGVuIGFsbCBvdGhlcgorICogICAgIHNlcnZlcnMgYXJlIGRvd24uCisgKiAgIC0gbWFrZSBTZXQtQ29va2llIHJldHVybiAiIiBpbnN0ZWFkIG9mICIobnVsbCkiIHdoZW4gdGhlIHNlcnZlciBoYXMgbm8KKyAqICAgICBjb29raWUgYXNzaWduZWQgKHVzZWZ1bCBmb3IgYmFja3VwIHNlcnZlcnMpLgorICogICAtICJsb2ciIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25uYWwgbGV2ZWwgbmFtZSAoaW5mbywgbm90aWNlLCBlcnIgLi4uKSBhYm92ZQorICogICAgIHdoaWNoIG5vdGhpbmcgaXMgc2VudC4KKyAqICAgLSByZXBsYWNlZCBzb21lIHN0cm5jbXAoKSB3aXRoIG1lbWNtcCgpIGZvciBiZXR0ZXIgZWZmaWNpZW5jeS4KKyAqICAgLSBhZGRlZCAiY2FwdHVyZSBjb29raWUiIG9wdGlvbiB3aGljaCBsb2dzIGNsaWVudCBhbmQvb3Igc2VydmVyIGNvb2tpZXMKKyAqICAgLSBjbGVhbmVkIHVwL2Rvd24gbWVzc2FnZXMgYW5kIGR1bXAgc2VydmVycyBzdGF0ZXMgdXBvbiBTSUdIVVAKKyAqICAgLSBhZGRlZCBhIHJlZGlyZWN0aW9uIGZlYXR1cmUgZm9yIGVycm9ycyA6ICJlcnJvcmxvYyA8ZXJybnVtPiA8dXJsPiIKKyAqICAgLSBub3cgd2Ugd29uJ3QgaW5zaXN0IG9uIGNvbm5lY3RpbmcgdG8gYSBkZWFkIHNlcnZlciwgZXZlbiB3aXRoIGEgY29va2llLAorICogICAgIHVubGVzcyBvcHRpb24gInBlcnNpc3QiIGlzIHNwZWNpZmllZC4KKyAqICAgLSBhZGRlZCBIVFRQLzQwOCByZXNwb25zZSBmb3IgY2xpZW50IHJlcXVlc3QgdGltZS1vdXQgYW5kIEhUVFAvNTBbMjM0XSBmb3IKKyAqICAgICBzZXJ2ZXIgcmVwbHkgdGltZS1vdXQgb3IgZXJyb3JzLgogICogMjAwMi8wOS8wMSA6IDEuMS4xNgogICogICAtIGltcGxlbWVudCBIVFRQIGhlYWx0aCBjaGVja3Mgd2hlbiBvcHRpb24gImh0dHBjaGsiIGlzIHNwZWNpZmllZC4KICAqIDIwMDIvMDgvMDcgOiAxLjEuMTUKQEAgLTE3Nyw4ICsxOTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjZW5kaWYKIAotI2RlZmluZSBIQVBST1hZX1ZFUlNJT04gIjEuMS4xNiIKLSNkZWZpbmUgSEFQUk9YWV9EQVRFCSIyMDAyLzA5LzAxIgorI2RlZmluZSBIQVBST1hZX1ZFUlNJT04gIjEuMS4xNyIKKyNkZWZpbmUgSEFQUk9YWV9EQVRFCSIyMDAyLzEwLzE4IgogCiAvKiB0aGlzIGlzIGZvciBsaWJjNSBmb3IgZXhhbXBsZSAqLwogI2lmbmRlZiBUQ1BfTk9ERUxBWQpAQCAtMTk4LDYgKzIxMiw3IEBACiAvLyByZXNlcnZlZCBidWZmZXIgc3BhY2UgZm9yIGhlYWRlciByZXdyaXRpbmcKICNkZWZpbmUJTUFYUkVXUklURQk0MDk2CiAjZGVmaW5lIFJFUVVSSV9MRU4JMTAyNAorI2RlZmluZSBDQVBUVVJFX0xFTgk2NAogCiAvLyBtYXggIyBhcmdzIG9uIGEgY29uZmlndXJhdGlvbiBsaW5lCiAjZGVmaW5lIE1BWF9MSU5FX0FSR1MJNDAKQEAgLTMwNSw2ICszMjAsNyBAQAogI2RlZmluZSBzaXplb2ZfYnVmZmVyCXNpemVvZihzdHJ1Y3QgYnVmZmVyKQogI2RlZmluZSBzaXplb2ZfZmR0YWIJc2l6ZW9mKHN0cnVjdCBmZHRhYikKICNkZWZpbmUgc2l6ZW9mX3JlcXVyaQlSRVFVUklfTEVOCisjZGVmaW5lIHNpemVvZl9jYXB0dXJlCUNBUFRVUkVfTEVOCiAKIC8qIGRpZmZlcmVudCBwb3NzaWJsZSBzdGF0ZXMgZm9yIHRoZSBzb2NrZXRzICovCiAjZGVmaW5lIEZEX1NUQ0xPU0UJMApAQCAtMzQ0LDYgKzM2MCw3IEBACiAjZGVmaW5lIFBSX09fQ09PS19OT0MJMTAyNAkvKiBhZGQgYSAnQ2FjaGUtY29udHJvbCcgaGVhZGVyIHdpdGggdGhlIGNvb2tpZSAqLwogI2RlZmluZSBQUl9PX0NPT0tfUE9TVAkyMDQ4CS8qIGRvbid0IGluc2VydCBjb29raWVzIGZvciByZXF1ZXN0cyBvdGhlciB0aGFuIGEgUE9TVCAqLwogI2RlZmluZSBQUl9PX0hUVFBfQ0hLCTQwOTYJLyogdXNlIEhUVFAgJ09QVElPTlMnIG1ldGhvZCB0byBjaGVjayBzZXJ2ZXIgaGVhbHRoICovCisjZGVmaW5lIFBSX09fUEVSU0lTVAk4MTkyCS8qIHNlcnZlciBwZXJzaXN0ZW5jZSBzdGF5cyBlZmZlY3RpdmUgZXZlbiB3aGVuIHNlcnZlciBpcyBkb3duICovCiAKIAogLyogdmFyaW91cyBzZXNzaW9uIGZsYWdzICovCkBAIC0zODUsNiArNDAyLDcgQEAKIAogLyogc2VydmVyIGZsYWdzICovCiAjZGVmaW5lIFNSVl9SVU5OSU5HCTEKKyNkZWZpbmUgU1JWX0JBQ0tVUAkyCiAKIC8qIHdoYXQgdG8gZG8gd2hlbiBhIGhlYWRlciBtYXRjaGVzIGEgcmVnZXggKi8KICNkZWZpbmUgQUNUX0FMTE9XCTAJLyogYWxsb3cgdGhlIHJlcXVlc3QgKi8KQEAgLTQ4NSw2ICs1MDMsOCBAQAogCWxvbmcgIHRfZGF0YTsJCQkvKiBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IGRhdGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIgLi4uICovCiAJdW5zaWduZWQgbG9uZyAgdF9jbG9zZTsJCS8qIHRvdGFsIHNlc3Npb24gZHVyYXRpb24gKi8KIAljaGFyICp1cmk7CQkJLyogZmlyc3QgbGluZSBpZiBsb2cgbmVlZGVkLCBOVUxMIG90aGVyd2lzZSAqLworCWNoYXIgKmNsaV9jb29raWU7CQkvKiBjb29raWUgcHJlc2VudGVkIGJ5IHRoZSBjbGllbnQsIGluIGNhcHR1cmUgbW9kZSAqLworCWNoYXIgKnNydl9jb29raWU7CQkvKiBjb29raWUgcHJlc2VudGVkIGJ5IHRoZSBzZXJ2ZXIsIGluIGNhcHR1cmUgbW9kZSAqLwogCWludCBzdGF0dXM7CQkJLyogSFRUUCBzdGF0dXMgZnJvbSB0aGUgc2VydmVyLCBuZWdhdGl2ZSBpZiBmcm9tIHByb3h5ICovCiAJbG9uZyBsb25nIGJ5dGVzOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGZyb20gdGhlIHNlcnZlciAqLwogICAgIH0gbG9nczsKQEAgLTQ5OCw2ICs1MTgsMTAgQEAKICAgICBzdHJ1Y3Qgc2VydmVyICpzcnYsICpjdXJzcnY7CS8qIGtub3duIHNlcnZlcnMsIGN1cnJlbnQgc2VydmVyICovCiAgICAgaW50IG5ic2VydmVyczsJCQkvKiAjIG9mIHNlcnZlcnMgKi8KICAgICBjaGFyICpjb29raWVfbmFtZTsJCQkvKiBuYW1lIG9mIHRoZSBjb29raWUgdG8gbG9vayBmb3IgKi8KKyAgICBpbnQgIGNvb2tpZV9sZW47CQkJLyogc3RybGVuKGNvb2tpZV9sZW4pLCBjb21wdXRlZCBvbmx5IG9uY2UgKi8KKyAgICBjaGFyICpjYXB0dXJlX25hbWU7CQkJLyogYmVnaW5uaW5nIG9mIHRoZSBuYW1lIG9mIHRoZSBjb29raWUgdG8gY2FwdHVyZSAqLworICAgIGludCAgY2FwdHVyZV9uYW1lbGVuOwkJLyogbGVuZ3RoIG9mIHRoZSBjb29raWUgbmFtZSB0byBtYXRjaCAqLworICAgIGludCAgY2FwdHVyZV9sZW47CQkJLyogbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdG8gYmUgY2FwdHVyZWQgKi8KICAgICBpbnQgY2xpdGltZW91dDsJCQkvKiBjbGllbnQgSS9PIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KICAgICBpbnQgc3J2dGltZW91dDsJCQkvKiBzZXJ2ZXIgSS9PIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KICAgICBpbnQgY29udGltZW91dDsJCQkvKiBjb25uZWN0IHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KQEAgLTUxMSw2ICs1MzUsNyBAQAogICAgIHN0cnVjdCBwcm94eSAqbmV4dDsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9nc3J2MSwgbG9nc3J2MjsgLyogMiBzeXNsb2cgc2VydmVycyAqLwogICAgIGNoYXIgbG9nZmFjMSwgbG9nZmFjMjsJCS8qIGxvZyBmYWNpbGl0eSBmb3IgYm90aCBzZXJ2ZXJzLiAtMSA9IGRpc2FibGVkICovCisgICAgaW50IGxvZ2xldjEsIGxvZ2xldjI7CQkvKiBsb2cgbGV2ZWwgZm9yIGVhY2ggc2VydmVyLCA3IGJ5IGRlZmF1bHQgKi8KICAgICBpbnQgdG9fbG9nOwkJCQkvKiB0aGluZ3MgdG8gYmUgbG9nZ2VkIChMV18qKSAqLwogICAgIHN0cnVjdCB0aW1ldmFsIHN0b3BfdGltZTsJCS8qIGRhdGUgdG8gc3RvcCBsaXN0ZW5pbmcsIHdoZW4gc3RvcHBpbmcgIT0gMCAqLwogICAgIGludCBuYl9yZXFhZGQsIG5iX3JzcGFkZDsKQEAgLTUxOCw2ICs1NDMsMjIgQEAKICAgICBzdHJ1Y3QgaGRyX2V4cCAqcnNwX2V4cDsJCS8qIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIHJlc3BvbnNlIGhlYWRlcnMgKi8KICAgICBjaGFyICpyZXFfYWRkW01BWF9ORVdIRFJdLCAqcnNwX2FkZFtNQVhfTkVXSERSXTsgLyogaGVhZGVycyB0byBiZSBhZGRlZCAqLwogICAgIGludCBncmFjZTsJCQkJLyogZ3JhY2UgdGltZSBhZnRlciBzdG9wIHJlcXVlc3QgKi8KKyAgICBzdHJ1Y3QgeworCWNoYXIgKm1zZzQwMDsJCQkvKiBtZXNzYWdlIGZvciBlcnJvciA0MDAgKi8KKwlpbnQgbGVuNDAwOwkJCS8qIG1lc3NhZ2UgbGVuZ3RoIGZvciBlcnJvciA0MDAgKi8KKwljaGFyICptc2c0MDM7CQkJLyogbWVzc2FnZSBmb3IgZXJyb3IgNDAzICovCisJaW50IGxlbjQwMzsJCQkvKiBtZXNzYWdlIGxlbmd0aCBmb3IgZXJyb3IgNDAzICovCisJY2hhciAqbXNnNDA4OwkJCS8qIG1lc3NhZ2UgZm9yIGVycm9yIDQwOCAqLworCWludCBsZW40MDg7CQkJLyogbWVzc2FnZSBsZW5ndGggZm9yIGVycm9yIDQwOCAqLworCWNoYXIgKm1zZzUwMDsJCQkvKiBtZXNzYWdlIGZvciBlcnJvciA1MDAgKi8KKwlpbnQgbGVuNTAwOwkJCS8qIG1lc3NhZ2UgbGVuZ3RoIGZvciBlcnJvciA1MDAgKi8KKwljaGFyICptc2c1MDI7CQkJLyogbWVzc2FnZSBmb3IgZXJyb3IgNTAyICovCisJaW50IGxlbjUwMjsJCQkvKiBtZXNzYWdlIGxlbmd0aCBmb3IgZXJyb3IgNTAyICovCisJY2hhciAqbXNnNTAzOwkJCS8qIG1lc3NhZ2UgZm9yIGVycm9yIDUwMyAqLworCWludCBsZW41MDM7CQkJLyogbWVzc2FnZSBsZW5ndGggZm9yIGVycm9yIDUwMyAqLworCWNoYXIgKm1zZzUwNDsJCQkvKiBtZXNzYWdlIGZvciBlcnJvciA1MDQgKi8KKwlpbnQgbGVuNTA0OwkJCS8qIG1lc3NhZ2UgbGVuZ3RoIGZvciBlcnJvciA1MDQgKi8KKyAgICB9IGVycm1zZzsKIH07CiAKIC8qIGluZm8gYWJvdXQgb25lIGdpdmVuIGZkICovCkBAIC01NDUsMTAgKzU4NiwxMyBAQAogICAgIGludCBtb2RlOwogICAgIGNoYXIgKmNocm9vdDsKICAgICBpbnQgbG9nZmFjMSwgbG9nZmFjMjsKKyAgICBpbnQgbG9nbGV2MSwgbG9nbGV2MjsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9nc3J2MSwgbG9nc3J2MjsKIH0gZ2xvYmFsID0gewogICAgIGxvZ2ZhYzEgOiAtMSwKICAgICBsb2dmYWMyIDogLTEsCisgICAgbG9nbGV2MSA6IDcsIC8qIG1heCBzeXNsb2cgbGV2ZWwgOiBkZWJ1ZyAqLworICAgIGxvZ2xldjIgOiA3LAogICAgIC8qIG90aGVycyBOVUxMIE9LICovCiB9OwogCkBAIC01NjMsNyArNjA3LDggQEAKICAgICAqKnBvb2xfYnVmZmVyICAgPSBOVUxMLAogICAgICoqcG9vbF9mZHRhYiAgICA9IE5VTEwsCiAgICAgKipwb29sX3JlcXVyaSAgID0gTlVMTCwKLSAgICAqKnBvb2xfdGFzawkgICAgPSBOVUxMOworICAgICoqcG9vbF90YXNrCSAgICA9IE5VTEwsCisgICAgKipwb29sX2NhcHR1cmUgID0gTlVMTDsKIAogc3RydWN0IHByb3h5ICpwcm94eSAgPSBOVUxMOwkvKiBsaXN0IG9mIGFsbCBleGlzdGluZyBwcm94aWVzICovCiBzdHJ1Y3QgZmR0YWIgKmZkdGFiID0gTlVMTDsJLyogYXJyYXkgb2YgYWxsIHRoZSBmaWxlIGRlc2NyaXB0b3JzICovCkBAIC02MTMsNiArNjU4LDEyIEBACiAjZGVmaW5lIE1BWF9IT1NUTkFNRV9MRU4JMzIKIHN0YXRpYyBjaGFyIGhvc3RuYW1lW01BWF9IT1NUTkFNRV9MRU5dID0gIiI7CiAKK2NvbnN0IGNoYXIgKkhUVFBfMzAyID0KKwkiSFRUUC8xLjAgMzAyIEZvdW5kXHJcbiIKKwkiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVcclxuIgorCSJDb25uZWN0aW9uOiBjbG9zZVxyXG4iCisJIkxvY2F0aW9uOiAiOyAvKiBub3QgdGVybWluYXRlZCBzaW5jZSBpdCB3aWxsIGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBVUkwgKi8KKwogY29uc3QgY2hhciAqSFRUUF80MDAgPQogCSJIVFRQLzEuMCA0MDAgQmFkIHJlcXVlc3RcclxuIgogCSJDYWNoZS1Db250cm9sOiBuby1jYWNoZVxyXG4iCkBAIC02MjcsNiArNjc4LDEzIEBACiAJIlxyXG4iCiAJIjxodG1sPjxib2R5PjxoMT40MDMgRm9yYmlkZGVuPC9oMT5cblJlcXVlc3QgZm9yYmlkZGVuIGJ5IGFkbWluaXN0cmF0aXZlIHJ1bGVzLlxuPC9ib2R5PjwvaHRtbD5cbiI7CiAKK2NvbnN0IGNoYXIgKkhUVFBfNDA4ID0KKwkiSFRUUC8xLjAgNDA4IFJlcXVlc3QgVGltZS1vdXRcclxuIgorCSJDYWNoZS1Db250cm9sOiBuby1jYWNoZVxyXG4iCisJIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIKKwkiXHJcbiIKKwkiPGh0bWw+PGJvZHk+PGgxPjQwOCBSZXF1ZXN0IFRpbWUtb3V0PC9oMT5cbllvdXIgYnJvd3NlciBkaWRuJ3Qgc2VuZCBhIGNvbXBsZXRlIHJlcXVlc3QgaW4gdGltZS5cbjwvYm9keT48L2h0bWw+XG4iOworCiBjb25zdCBjaGFyICpIVFRQXzUwMCA9CiAJIkhUVFAvMS4wIDUwMCBTZXJ2ZXIgRXJyb3JcclxuIgogCSJDYWNoZS1Db250cm9sOiBuby1jYWNoZVxyXG4iCkBAIC02MzUsMTEgKzY5MywyNSBAQAogCSI8aHRtbD48Ym9keT48aDE+NTAwIFNlcnZlciBFcnJvcjwvaDE+XG5BbiBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3Igb2NjdXJlZC5cbjwvYm9keT48L2h0bWw+XG4iOwogCiBjb25zdCBjaGFyICpIVFRQXzUwMiA9Ci0JIkhUVFAvMS4wIDUwMiBQcm94eSBFcnJvclxyXG4iCisJIkhUVFAvMS4wIDUwMiBCYWQgR2F0ZXdheVxyXG4iCiAJIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXHJcbiIKIAkiQ29ubmVjdGlvbjogY2xvc2VcclxuIgogCSJcclxuIgotCSI8aHRtbD48Ym9keT48aDE+NTAyIFByb3h5IEVycm9yPC9oMT5cbk5vIHNlcnZlciBpcyBhdmFpbGFibGUgdG8gaGFuZGxlIHRoaXMgcmVxdWVzdC5cbjwvYm9keT48L2h0bWw+XG4iOworCSI8aHRtbD48Ym9keT48aDE+NTAyIEJhZCBHYXRld2F5PC9oMT5cblRoZSBzZXJ2ZXIgcmV0dXJuZWQgYW4gaW52YWxpZCBvciBpbmNvbXBsZXRlIHJlc3BvbnNlLlxuPC9ib2R5PjwvaHRtbD5cbiI7CisKK2NvbnN0IGNoYXIgKkhUVFBfNTAzID0KKwkiSFRUUC8xLjAgNTAzIFNlcnZpY2UgVW5hdmFpbGFibGVcclxuIgorCSJDYWNoZS1Db250cm9sOiBuby1jYWNoZVxyXG4iCisJIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIKKwkiXHJcbiIKKwkiPGh0bWw+PGJvZHk+PGgxPjUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlPC9oMT5cbk5vIHNlcnZlciBpcyBhdmFpbGFibGUgdG8gaGFuZGxlIHRoaXMgcmVxdWVzdC5cbjwvYm9keT48L2h0bWw+XG4iOworCitjb25zdCBjaGFyICpIVFRQXzUwNCA9CisJIkhUVFAvMS4wIDUwNCBHYXRld2F5IFRpbWUtb3V0XHJcbiIKKwkiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVcclxuIgorCSJDb25uZWN0aW9uOiBjbG9zZVxyXG4iCisJIlxyXG4iCisJIjxodG1sPjxib2R5PjxoMT41MDQgR2F0ZXdheSBUaW1lLW91dDwvaDE+XG5UaGUgc2VydmVyIGRpZG4ndCByZXNwb25kIGluIHRpbWUuXG48L2JvZHk+PC9odG1sPlxuIjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBzdGF0aXN0aWNzICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04MjYsNyArODk4LDcgQEAKICAgICBpbnQgZmFjX2xldmVsOwogICAgIGludCBoZHJfbGVuLCBkYXRhX2xlbjsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhWzJdOwotICAgIGludCBmYWNpbGl0aWVzWzJdOworICAgIGludCBmYWNpbGl0aWVzWzJdLCBsb2dsZXZlbFsyXTsKICAgICBpbnQgbmJsb2dnZXJzID0gMDsKICAgICBjaGFyICpsb2dfcHRyOwogCkBAIC04NzAsMjcgKzk0MiwzNSBAQAogCWlmIChnbG9iYWwubG9nZmFjMSA+PSAwKSB7CiAJICAgIHNhW25ibG9nZ2Vyc10gPSAmZ2xvYmFsLmxvZ3NydjE7CiAJICAgIGZhY2lsaXRpZXNbbmJsb2dnZXJzXSA9IGdsb2JhbC5sb2dmYWMxOworCSAgICBsb2dsZXZlbFtuYmxvZ2dlcnNdID0gZ2xvYmFsLmxvZ2xldjE7CiAJICAgIG5ibG9nZ2VycysrOwogCX0KIAlpZiAoZ2xvYmFsLmxvZ2ZhYzIgPj0gMCkgewogCSAgICBzYVtuYmxvZ2dlcnNdID0gJmdsb2JhbC5sb2dzcnYyOwogCSAgICBmYWNpbGl0aWVzW25ibG9nZ2Vyc10gPSBnbG9iYWwubG9nZmFjMjsKKwkgICAgbG9nbGV2ZWxbbmJsb2dnZXJzXSA9IGdsb2JhbC5sb2dsZXYyOwogCSAgICBuYmxvZ2dlcnMrKzsKIAl9CiAgICAgfSBlbHNlIHsKIAlpZiAocC0+bG9nZmFjMSA+PSAwKSB7CiAJICAgIHNhW25ibG9nZ2Vyc10gPSAmcC0+bG9nc3J2MTsKIAkgICAgZmFjaWxpdGllc1tuYmxvZ2dlcnNdID0gcC0+bG9nZmFjMTsKKwkgICAgbG9nbGV2ZWxbbmJsb2dnZXJzXSA9IHAtPmxvZ2xldjE7CiAJICAgIG5ibG9nZ2VycysrOwogCX0KIAlpZiAocC0+bG9nZmFjMiA+PSAwKSB7CiAJICAgIHNhW25ibG9nZ2Vyc10gPSAmcC0+bG9nc3J2MjsKIAkgICAgZmFjaWxpdGllc1tuYmxvZ2dlcnNdID0gcC0+bG9nZmFjMjsKKwkgICAgbG9nbGV2ZWxbbmJsb2dnZXJzXSA9IHAtPmxvZ2xldjI7CiAJICAgIG5ibG9nZ2VycysrOwogCX0KICAgICB9CiAKICAgICB3aGlsZSAobmJsb2dnZXJzLS0gPiAwKSB7CisJLyogd2UgY2FuIGZpbHRlciB0aGUgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIHNlbnQgdG8gZWFjaCBsb2dnZXIgKi8KKwlpZiAobGV2ZWwgPiBsb2dsZXZlbFtuYmxvZ2dlcnNdKQorCSAgICBjb250aW51ZTsKKwkKIAkvKiBGb3IgZWFjaCB0YXJnZXQsIHdlIG1heSBoYXZlIGEgZGlmZmVyZW50IGZhY2lsaXR5LgogCSAqIFdlIGNhbiBhbHNvIGhhdmUgYSBkaWZmZXJlbnQgbG9nIGxldmVsIGZvciBlYWNoIG1lc3NhZ2UuCiAJICogVGhpcyBpbmR1Y2VzIHZhcmlhdGlvbnMgaW4gdGhlIG1lc3NhZ2UgaGVhZGVyIGxlbmd0aC4KQEAgLTEzMzAsMTIgKzE0MTAsMzkgQEAKIAlwb29sX2ZyZWUoYnVmZmVyLCBzLT5yZXApOwogICAgIGlmIChzLT5sb2dzLnVyaSkKIAlwb29sX2ZyZWUocmVxdXJpLCBzLT5sb2dzLnVyaSk7CisgICAgaWYgKHMtPmxvZ3MuY2xpX2Nvb2tpZSkKKwlwb29sX2ZyZWUoY2FwdHVyZSwgcy0+bG9ncy5jbGlfY29va2llKTsKKyAgICBpZiAocy0+bG9ncy5zcnZfY29va2llKQorCXBvb2xfZnJlZShjYXB0dXJlLCBzLT5sb2dzLnNydl9jb29raWUpOwogCiAgICAgcG9vbF9mcmVlKHNlc3Npb24sIHMpOwogfQogCiAKIC8qCisgKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGZpbmQgYSBydW5uaW5nIHNlcnZlciBmb3IgdGhlIHByb3h5IDxweD4uIEEgZmlyc3QKKyAqIHBhc3MgbG9va3MgZm9yIGFjdGl2ZSBzZXJ2ZXJzLCBhbmQgaWYgbm9uZSBpcyBmb3VuZCwgYSBzZWNvbmQgcGFzcyBhbHNvCisgKiBsb29rcyBmb3IgYmFja3VwIHNlcnZlcnMuCisgKiBJZiBubyB2YWxpZCBzZXJ2ZXIgaXMgZm91bmQsIE5VTEwgaXMgcmV0dXJuZWQgYW5kIHB4LT5jdXJzcnYgaXMgbGVmdCB1bmRlZmluZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNlcnZlciAqZmluZF9zZXJ2ZXIoc3RydWN0IHByb3h5ICpweCkgeworICAgIHN0cnVjdCBzZXJ2ZXIgKnNydiA9IHB4LT5jdXJzcnY7CisgICAgaW50IGlnbm9yZV9iYWNrdXAgPSAxOworCisgICAgZG8geworCWRvICB7CisJICAgIGlmIChzcnYgPT0gTlVMTCkKKwkJc3J2ID0gcHgtPnNydjsKKwkgICAgaWYgKHNydi0+c3RhdGUgJiBTUlZfUlVOTklORworCQkmJiAhKChzcnYtPnN0YXRlICYgU1JWX0JBQ0tVUCkgJiYgaWdub3JlX2JhY2t1cCkpCisJCXJldHVybiBzcnY7CisJICAgIHNydiA9IHNydi0+bmV4dDsKKwl9IHdoaWxlIChzcnYgIT0gcHgtPmN1cnNydik7CisgICAgfSB3aGlsZSAoaWdub3JlX2JhY2t1cC0tKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKICAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhdGVzIGEgY29ubmVjdGlvbiB0byB0aGUgY3VycmVudCBzZXJ2ZXIgKHMtPnNydikgaWYgKHMtPmRpcmVjdCkKICAqIGlzIHNldCwgb3IgdG8gdGhlIGRpc3BhdGNoIHNlcnZlciBpZiAocy0+ZGlyZWN0KSBpcyAwLiBJdCByZXR1cm5zIDAgaWYKICAqIGl0J3MgT0ssIC0xIGlmIGl0J3MgaW1wb3NzaWJsZS4KQEAgLTEzNTEsMjIgKzE0NTgsMTYgQEAKICAgICB9CiAgICAgZWxzZSBpZiAocy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0JBTEFOQ0UpIHsKIAlpZiAocy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0JBTEFOQ0VfUlIpIHsKLQkgICAgaW50IHJldHJ5ID0gcy0+cHJveHktPm5ic2VydmVyczsKLQkgICAgd2hpbGUgKHJldHJ5KSB7Ci0JCWlmIChzLT5wcm94eS0+Y3Vyc3J2ID09IE5VTEwpCi0JCSAgICBzLT5wcm94eS0+Y3Vyc3J2ID0gcy0+cHJveHktPnNydjsKLQkJaWYgKHMtPnByb3h5LT5jdXJzcnYtPnN0YXRlICYgU1JWX1JVTk5JTkcpCi0JCSAgICBicmVhazsKLQkJcy0+cHJveHktPmN1cnNydiA9IHMtPnByb3h5LT5jdXJzcnYtPm5leHQ7Ci0JCXJldHJ5LS07Ci0JICAgIH0KKwkgICAgc3RydWN0IHNlcnZlciAqc3J2OwogCi0JICAgIGlmIChyZXRyeSA9PSAwKSAvKiBubyBzZXJ2ZXIgbGVmdCAqLworCSAgICBzcnYgPSBmaW5kX3NlcnZlcihzLT5wcm94eSk7CisKKwkgICAgaWYgKHNydiA9PSBOVUxMKSAvKiBubyBzZXJ2ZXIgbGVmdCAqLwogCQlyZXR1cm4gLTE7CiAKLQkgICAgcy0+c3J2ID0gcy0+cHJveHktPmN1cnNydjsKLQkgICAgcy0+c3J2X2FkZHIgPSBzLT5zcnYtPmFkZHI7Ci0JICAgIHMtPnByb3h5LT5jdXJzcnYgPSBzLT5wcm94eS0+Y3Vyc3J2LT5uZXh0OworCSAgICBzLT5zcnZfYWRkciA9IHNydi0+YWRkcjsKKwkgICAgcy0+c3J2ID0gc3J2OworCSAgICBzLT5wcm94eS0+Y3Vyc3J2ID0gc3J2LT5uZXh0OwogCX0KIAllbHNlIC8qIHVua25vd24gYmFsYW5jaW5nIGFsZ29yaXRobSAqLwogCSAgICByZXR1cm4gLTE7CkBAIC0xNzk4LDcgKzE4OTksNyBAQAogICogYW5kIHRoZSByZXF1ZXN0IGlzIGNsZWFyZWQgc28gdGhhdCBubyBzZXJ2ZXIgY29ubmVjdGlvbiBjYW4gYmUgaW5pdGlhdGVkLgogICogVGhlIGNsaWVudCBtdXN0IGJlIGluIGEgdmFsaWQgc3RhdGUgZm9yIHRoaXMgKEhFQURFUiwgREFUQSAuLi4pLgogICogTm90aGluZyBpcyBwZXJmb3JtZWQgb24gdGhlIHNlcnZlciBzaWRlLgotICogVGhlIHJlcGx5IGJ1ZmZlciBtdXN0IGJlIGVtcHR5IGJlZm9yZSB0aGlzLgorICogVGhlIHJlcGx5IGJ1ZmZlciBkb2Vzbid0IG5lZWQgdG8gYmUgZW1wdHkgYmVmb3JlIHRoaXMuCiAgKi8KIHZvaWQgY2xpZW50X3JldG5jbG9zZShzdHJ1Y3Qgc2Vzc2lvbiAqcywgaW50IGxlbiwgY29uc3QgY2hhciAqbXNnKSB7CiAgICAgRkRfQ0xSKHMtPmNsaV9mZCwgU3RhdGljUmVhZEV2ZW50KTsKQEAgLTE4MDgsNiArMTkwOSw3IEBACiAgICAgcy0+Y2xpX3N0YXRlID0gQ0xfU1RTSFVUUjsKICAgICBzdHJjcHkocy0+cmVwLT5kYXRhLCBtc2cpOwogICAgIHMtPnJlcC0+bCA9IGxlbjsKKyAgICBzLT5yZXAtPnIgPSBzLT5yZXAtPmggPSBzLT5yZXAtPmxyID0gcy0+cmVwLT53ID0gcy0+cmVwLT5kYXRhOwogICAgIHMtPnJlcC0+ciArPSBsZW47CiAgICAgcy0+cmVxLT5sID0gMDsKIH0KQEAgLTE4MTUsMTEgKzE5MTcsMTIgQEAKIAogLyoKICAqIHJldHVybnMgYSBtZXNzYWdlIGludG8gdGhlIHJlcCBidWZmZXIsIGFuZCBmbHVzaGVzIHRoZSByZXEgYnVmZmVyLgotICogVGhlIHJlcGx5IGJ1ZmZlciBtdXN0IGJlIGVtcHR5IGJlZm9yZSB0aGlzLgorICogVGhlIHJlcGx5IGJ1ZmZlciBkb2Vzbid0IG5lZWQgdG8gYmUgZW1wdHkgYmVmb3JlIHRoaXMuCiAgKi8KIHZvaWQgY2xpZW50X3JldHVybihzdHJ1Y3Qgc2Vzc2lvbiAqcywgaW50IGxlbiwgY29uc3QgY2hhciAqbXNnKSB7CiAgICAgc3RyY3B5KHMtPnJlcC0+ZGF0YSwgbXNnKTsKICAgICBzLT5yZXAtPmwgPSBsZW47CisgICAgcy0+cmVwLT5yID0gcy0+cmVwLT5oID0gcy0+cmVwLT5sciA9IHMtPnJlcC0+dyA9IHMtPnJlcC0+ZGF0YTsKICAgICBzLT5yZXAtPnIgKz0gbGVuOwogICAgIHMtPnJlcS0+bCA9IDA7CiB9CkBAIC0xODU1LDcgKzE5NTgsNyBAQAogICAgIGlmIChwLT50b19sb2cgJiBMV19EQVRFKSB7CiAJc3RydWN0IHRtICp0bSA9IGxvY2FsdGltZSgmcy0+bG9ncy50dl9hY2NlcHQudHZfc2VjKTsKIAotCXNlbmRfbG9nKHAsIExPR19JTkZPLCAiJWQuJWQuJWQuJWQ6JWQgWyUwMmQvJXMvJTA0ZDolMDJkOiUwMmQ6JTAyZF0gJXMgJXMgJWQvJWQvJWQvJWQgJWQgJWxsZCBcIiVzXCJcbiIsCisJc2VuZF9sb2cocCwgTE9HX0lORk8sICIlZC4lZC4lZC4lZDolZCBbJTAyZC8lcy8lMDRkOiUwMmQ6JTAyZDolMDJkXSAlcyAlcyAlZC8lZC8lZC8lZCAlZCAlbGxkICVzICVzIFwiJXNcIlxuIiwKIAkJIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLCBudG9ocyhzLT5jbGlfYWRkci5zaW5fcG9ydCksCiAJCSB0bS0+dG1fbWRheSwgbW9udGhuYW1lW3RtLT50bV9tb25dLCB0bS0+dG1feWVhcisxOTAwLAogCQkgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCkBAIC0xODY1LDEwICsxOTY4LDEyIEBACiAJCSAocy0+bG9ncy50X2RhdGEgPj0gMCkgPyBzLT5sb2dzLnRfZGF0YSAtIHMtPmxvZ3MudF9jb25uZWN0IDogLTEsCiAJCSBzLT5sb2dzLnRfY2xvc2UsCiAJCSBzLT5sb2dzLnN0YXR1cywgcy0+bG9ncy5ieXRlcywKKwkJIHMtPmxvZ3MuY2xpX2Nvb2tpZSA/IHMtPmxvZ3MuY2xpX2Nvb2tpZSA6ICItIiwKKwkJIHMtPmxvZ3Muc3J2X2Nvb2tpZSA/IHMtPmxvZ3Muc3J2X2Nvb2tpZSA6ICItIiwKIAkJIHVyaSk7CiAgICAgfQogICAgIGVsc2UgewotCXNlbmRfbG9nKHAsIExPR19JTkZPLCAiJWQuJWQuJWQuJWQ6JWQgJXMgJXMgJWQvJWQvJWQvJWQgJWQgJWxsZCBcIiVzXCJcbiIsCisJc2VuZF9sb2cocCwgTE9HX0lORk8sICIlZC4lZC4lZC4lZDolZCAlcyAlcyAlZC8lZC8lZC8lZCAlZCAlbGxkICVzICVzIFwiJXNcIlxuIiwKIAkJIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLCBudG9ocyhzLT5jbGlfYWRkci5zaW5fcG9ydCksCiAJCSBweGlkLCBzcnYsCiAJCSBzLT5sb2dzLnRfcmVxdWVzdCwKQEAgLTE4NzYsNiArMTk4MSw4IEBACiAJCSAocy0+bG9ncy50X2RhdGEgPj0gMCkgPyBzLT5sb2dzLnRfZGF0YSAtIHMtPmxvZ3MudF9jb25uZWN0IDogLTEsCiAJCSBzLT5sb2dzLnRfY2xvc2UsCiAJCSBzLT5sb2dzLnN0YXR1cywgcy0+bG9ncy5ieXRlcywKKwkJIHMtPmxvZ3MuY2xpX2Nvb2tpZSA/IHMtPmxvZ3MuY2xpX2Nvb2tpZSA6ICItIiwKKwkJIHMtPmxvZ3Muc3J2X2Nvb2tpZSA/IHMtPmxvZ3Muc3J2X2Nvb2tpZSA6ICItIiwKIAkJIHVyaSk7CiAgICAgfQogCkBAIC0xOTYyLDYgKzIwNjksOCBAQAogCXMtPmxvZ3MudF9kYXRhID0gLTE7CiAJcy0+bG9ncy50X2Nsb3NlID0gMDsKIAlzLT5sb2dzLnVyaSA9IE5VTEw7CisJcy0+bG9ncy5jbGlfY29va2llID0gTlVMTDsKKwlzLT5sb2dzLnNydl9jb29raWUgPSBOVUxMOwogCXMtPmxvZ3Muc3RhdHVzID0gLTE7CiAJcy0+bG9ncy5ieXRlcyA9IDA7CiAKQEAgLTIxNzMsNyArMjI4Miw3IEBACiAgICAgcmV0dXJuIGRlbHRhOwogfQogCi0vKiBzYW1lIGV4Y2VwdCB0aGF0IHRoZSBzdHJpbmcgbGVuIGlzIGdpdmVuLCB3aGljaCBhbGxvd3Mgc3RyIHRvIGJlIE5VTEwgaWYKKy8qIHNhbWUgZXhjZXB0IHRoYXQgdGhlIHN0cmluZyBsZW5ndGggaXMgZ2l2ZW4sIHdoaWNoIGFsbG93cyBzdHIgdG8gYmUgTlVMTCBpZgogICogbGVuIGlzIDAuCiAgKi8KIGludCBidWZmZXJfcmVwbGFjZTIoc3RydWN0IGJ1ZmZlciAqYiwgY2hhciAqcG9zLCBjaGFyICplbmQsIGNoYXIgKnN0ciwgaW50IGxlbikgewpAQCAtMjI4MCw4ICsyMzg5LDcgQEAKIAkJaWYgKHQtPmZsYWdzICYgU05fQ0xERU5ZKSB7CiAJCSAgICAvKiBubyBuZWVkIHRvIGdvIGZ1cnRoZXIgKi8KIAkJICAgIHQtPmxvZ3Muc3RhdHVzID0gNDAzOwotCQkgICAgaWYgKHQtPnByb3h5LT5tb2RlID09IFBSX01PREVfSFRUUCkKLQkJCWNsaWVudF9yZXRuY2xvc2UodCwgc3RybGVuKEhUVFBfNDAzKSwgSFRUUF80MDMpOworCQkgICAgY2xpZW50X3JldG5jbG9zZSh0LCB0LT5wcm94eS0+ZXJybXNnLmxlbjQwMywgdC0+cHJveHktPmVycm1zZy5tc2c0MDMpOwogCQkgICAgcmV0dXJuIDE7CiAJCX0KIApAQCAtMjMzOCwxNiArMjQ0NiwxNCBAQAogCSAgICAgKiAgIHJlcS0+ciAgPSBlbmQgb2YgZGF0YSAobm90IHVzZWQgYXQgdGhpcyBzdGFnZSkKIAkgICAgICovCiAKLQkgICAgaWYgKHQtPmxvZ3MubG9nd2FpdCAmIExXX1JFUSAmJgotCQl0LT5wcm94eS0+bW9kZSAmIFBSX01PREVfSFRUUCkgeworCSAgICBpZiAodC0+bG9ncy5sb2d3YWl0ICYgTFdfUkVRKSB7CiAJCS8qIHdlIGhhdmUgYSBjb21wbGV0ZSBIVFRQIHJlcXVlc3QgdGhhdCB3ZSBtdXN0IGxvZyAqLwogCQlpbnQgdXJpbGVuOwogCiAJCWlmICgodC0+bG9ncy51cmkgPSBwb29sX2FsbG9jKHJlcXVyaSkpID09IE5VTEwpIHsKIAkJICAgIEFsZXJ0KCJIVFRQIGxvZ2dpbmcgOiBvdXQgb2YgbWVtb3J5LlxuIik7CiAJCSAgICB0LT5sb2dzLnN0YXR1cyA9IDUwMDsKLQkJICAgIGlmICh0LT5wcm94eS0+bW9kZSA9PSBQUl9NT0RFX0hUVFApCi0JCQljbGllbnRfcmV0bmNsb3NlKHQsIHN0cmxlbihIVFRQXzUwMCksIEhUVFBfNTAwKTsKKwkJICAgIGNsaWVudF9yZXRuY2xvc2UodCwgdC0+cHJveHktPmVycm1zZy5sZW41MDAsIHQtPnByb3h5LT5lcnJtc2cubXNnNTAwKTsKIAkJICAgIHJldHVybiAxOwogCQl9CiAJCQpAQCAtMjQyMiw5ICsyNTI4LDkgQEAKIAkgICAgICogcmVtb3ZlIGl0LiBJZiBubyBhcHBsaWNhdGlvbiBjb29raWUgcGVyc2lzdHMgaW4gdGhlIGhlYWRlciwgd2UKIAkgICAgICogKk1VU1QqIGRlbGV0ZSBpdAogCSAgICAgKi8KLQkgICAgaWYgKCFkZWxldGVfaGVhZGVyICYmICh0LT5wcm94eS0+Y29va2llX25hbWUgIT0gTlVMTCkKKwkgICAgaWYgKCFkZWxldGVfaGVhZGVyICYmICh0LT5wcm94eS0+Y29va2llX25hbWUgIT0gTlVMTCB8fCB0LT5wcm94eS0+Y2FwdHVyZV9uYW1lICE9IE5VTEwpCiAJCSYmICEodC0+ZmxhZ3MgJiBTTl9DTERFTlkpICYmIChwdHIgPj0gcmVxLT5oICsgOCkKLQkJJiYgKHN0cm5jbXAocmVxLT5oLCAiQ29va2llOiAiLCA4KSA9PSAwKSkgeworCQkmJiAobWVtY21wKHJlcS0+aCwgIkNvb2tpZTogIiwgOCkgPT0gMCkpIHsKIAkJY2hhciAqcDEsICpwMiwgKnAzLCAqcDQ7CiAJCWNoYXIgKmRlbF9jb2xvbiwgKmRlbF9jb29raWUsICpjb2xvbjsKIAkJaW50IGFwcF9jb29raWVzOwpAQCAtMjQ3Miw0MiArMjU3OCw2MyBAQAogCQkgICAgaWYgKCpwMSA9PSAnJCcpIHsKIAkJCS8qIHNraXAgdGhpcyBvbmUgKi8KIAkJICAgIH0KLQkJICAgIGVsc2UgaWYgKChwMiAtIHAxID09IHN0cmxlbih0LT5wcm94eS0+Y29va2llX25hbWUpKSAmJgotCQkJKG1lbWNtcChwMSwgdC0+cHJveHktPmNvb2tpZV9uYW1lLCBwMiAtIHAxKSA9PSAwKSkgewotCQkJLyogQ29vbC4uLiBpdCdzIHRoZSByaWdodCBvbmUgKi8KLQkJCXN0cnVjdCBzZXJ2ZXIgKnNydiA9IHQtPnByb3h5LT5zcnY7CisJCSAgICBlbHNlIHsKKwkJCS8qIGZpcnN0LCBsZXQncyBzZWUgaWYgd2Ugd2FudCB0byBjYXB0dXJlIGl0ICovCisJCQlpZiAodC0+cHJveHktPmNhcHR1cmVfbmFtZSAhPSBOVUxMICYmCisJCQkgICAgdC0+bG9ncy5jbGlfY29va2llID09IE5VTEwgJiYKKwkJCSAgICAocDQgLSBwMSA+PSB0LT5wcm94eS0+Y2FwdHVyZV9uYW1lbGVuKSAmJgorCQkJICAgIG1lbWNtcChwMSwgdC0+cHJveHktPmNhcHR1cmVfbmFtZSwgdC0+cHJveHktPmNhcHR1cmVfbmFtZWxlbikgPT0gMCkgeworCQkJICAgIGludCBsb2dfbGVuID0gcDQgLSBwMTsKIAotCQkJd2hpbGUgKHNydiAmJgotCQkJICAgICAgICgoc3J2LT5ja2xlbiAhPSBwNCAtIHAzKSB8fCBtZW1jbXAocDMsIHNydi0+Y29va2llLCBwNCAtIHAzKSkpIHsKLQkJCSAgICBzcnYgPSBzcnYtPm5leHQ7Ci0JCQl9CisJCQkgICAgaWYgKCh0LT5sb2dzLmNsaV9jb29raWUgPSBwb29sX2FsbG9jKGNhcHR1cmUpKSA9PSBOVUxMKSB7CisJCQkJQWxlcnQoIkhUVFAgbG9nZ2luZyA6IG91dCBvZiBtZW1vcnkuXG4iKTsKKwkJCSAgICB9CiAKLQkJCWlmIChzcnYpIHsgLyogd2UgZm91bmQgdGhlIHNlcnZlciAqLwotCQkJICAgIHQtPmZsYWdzIHw9IFNOX0RJUkVDVDsKLQkJCSAgICB0LT5zcnYgPSBzcnY7CisJCQkgICAgaWYgKGxvZ19sZW4gPiB0LT5wcm94eS0+Y2FwdHVyZV9sZW4pCisJCQkJbG9nX2xlbiA9IHQtPnByb3h5LT5jYXB0dXJlX2xlbjsKKwkJCSAgICBtZW1jcHkodC0+bG9ncy5jbGlfY29va2llLCBwMSwgbG9nX2xlbik7CisJCQkgICAgdC0+bG9ncy5jbGlfY29va2llW2xvZ19sZW5dID0gMDsKIAkJCX0KLQkJCS8qIGlmIHRoaXMgY29va2llIHdhcyBzZXQgaW4gaW5zZXJ0K2luZGlyZWN0IG1vZGUsIHRoZW4gaXQncyBiZXR0ZXIgdGhhdCB0aGUKLQkJCSAqIHNlcnZlciBuZXZlciBzZWVzIGl0LgotCQkJICovCi0JCQlpZiAoZGVsX2Nvb2tpZSA9PSBOVUxMICYmCi0JCQkgICAgKHQtPnByb3h5LT5vcHRpb25zICYgKFBSX09fQ09PS19JTlMgfCBQUl9PX0NPT0tfSU5EKSkgPT0gKFBSX09fQ09PS19JTlMgfCBQUl9PX0NPT0tfSU5EKSkgeworCisJCQlpZiAoKHAyIC0gcDEgPT0gdC0+cHJveHktPmNvb2tpZV9sZW4pICYmICh0LT5wcm94eS0+Y29va2llX25hbWUgIT0gTlVMTCkgJiYKKwkJCSAgICAobWVtY21wKHAxLCB0LT5wcm94eS0+Y29va2llX25hbWUsIHAyIC0gcDEpID09IDApKSB7CisJCQkgICAgLyogQ29vbC4uLiBpdCdzIHRoZSByaWdodCBvbmUgKi8KKwkJCSAgICBzdHJ1Y3Qgc2VydmVyICpzcnYgPSB0LT5wcm94eS0+c3J2OworCisJCQkgICAgd2hpbGUgKHNydiAmJgorCQkJCSAgICgoc3J2LT5ja2xlbiAhPSBwNCAtIHAzKSB8fCBtZW1jbXAocDMsIHNydi0+Y29va2llLCBwNCAtIHAzKSkpIHsKKwkJCQlzcnYgPSBzcnYtPm5leHQ7CisJCQkgICAgfQorCisJCQkgICAgaWYgKHNydiAmJgorCQkJCShzcnYtPnN0YXRlICYgU1JWX1JVTk5JTkcgfHwgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1BFUlNJU1QpKSB7CisJCQkJLyogd2UgZm91bmQgdGhlIHNlcnZlciBhbmQgaXQncyB1c2FibGUgKi8KKwkJCQl0LT5mbGFncyB8PSBTTl9ESVJFQ1Q7CisJCQkJdC0+c3J2ID0gc3J2OworCQkJICAgIH0KKwkJCSAgICAvKiBpZiB0aGlzIGNvb2tpZSB3YXMgc2V0IGluIGluc2VydCtpbmRpcmVjdCBtb2RlLCB0aGVuIGl0J3MgYmV0dGVyIHRoYXQgdGhlCisJCQkgICAgICogc2VydmVyIG5ldmVyIHNlZXMgaXQuCisJCQkgICAgICovCisJCQkgICAgaWYgKGRlbF9jb29raWUgPT0gTlVMTCAmJgorCQkJCSh0LT5wcm94eS0+b3B0aW9ucyAmIChQUl9PX0NPT0tfSU5TIHwgUFJfT19DT09LX0lORCkpID09IChQUl9PX0NPT0tfSU5TIHwgUFJfT19DT09LX0lORCkpIHsKIAkJCQlkZWxfY29va2llID0gcDE7CiAJCQkJZGVsX2NvbG9uID0gY29sb247CisJCQkgICAgfQogCQkJfQotCQkgICAgfQotCQkgICAgZWxzZSB7Ci0JCQkvKiBub3cgd2Uga25vdyB0aGF0IHdlIG11c3Qga2VlcCB0aGlzIGNvb2tpZSBzaW5jZSBpdCdzCi0JCQkgKiBub3Qgb3Vycy4gQnV0IGlmIHdlIHdhbnRlZCB0byBkZWxldGUgb3VyIGNvb2tpZQotCQkJICogZWFybGllciwgd2UgY2Fubm90IHJlbW92ZSB0aGUgY29tcGxldGUgaGVhZGVyLCBidXQgd2UKLQkJCSAqIGNhbiByZW1vdmUgdGhlIHByZXZpb3VzIGJsb2NrIGl0c2VsZi4KLQkJCSAqLwotCQkJYXBwX2Nvb2tpZXMrKzsKLQotCQkJaWYgKGRlbF9jb29raWUgIT0gTlVMTCkgewotCQkJICAgIGJ1ZmZlcl9yZXBsYWNlMihyZXEsIGRlbF9jb29raWUsIHAxLCBOVUxMLCAwKTsKLQkJCSAgICBwNCAgLT0gKHAxIC0gZGVsX2Nvb2tpZSk7Ci0JCQkgICAgcHRyIC09IChwMSAtIGRlbF9jb29raWUpOwotCQkJICAgIGRlbF9jb29raWUgPSBkZWxfY29sb24gPSBOVUxMOworCQkJZWxzZSB7CisJCQkgICAgLyogbm93IHdlIGtub3cgdGhhdCB3ZSBtdXN0IGtlZXAgdGhpcyBjb29raWUgc2luY2UgaXQncworCQkJICAgICAqIG5vdCBvdXJzLiBCdXQgaWYgd2Ugd2FudGVkIHRvIGRlbGV0ZSBvdXIgY29va2llCisJCQkgICAgICogZWFybGllciwgd2UgY2Fubm90IHJlbW92ZSB0aGUgY29tcGxldGUgaGVhZGVyLCBidXQgd2UKKwkJCSAgICAgKiBjYW4gcmVtb3ZlIHRoZSBwcmV2aW91cyBibG9jayBpdHNlbGYuCisJCQkgICAgICovCisJCQkgICAgYXBwX2Nvb2tpZXMrKzsKKwkJCSAgICAKKwkJCSAgICBpZiAoZGVsX2Nvb2tpZSAhPSBOVUxMKSB7CisJCQkJYnVmZmVyX3JlcGxhY2UyKHJlcSwgZGVsX2Nvb2tpZSwgcDEsIE5VTEwsIDApOworCQkJCXA0ICAtPSAocDEgLSBkZWxfY29va2llKTsKKwkJCQlwdHIgLT0gKHAxIC0gZGVsX2Nvb2tpZSk7CisJCQkJZGVsX2Nvb2tpZSA9IGRlbF9jb2xvbiA9IE5VTEw7CisJCQkgICAgfQogCQkJfQogCQkgICAgfQogCkBAIC0yNTY1LDE0ICsyNjkyLDExIEBACiAJICovCiAJaWYgKHJlcS0+bCA+PSByZXEtPnJsaW0gLSByZXEtPmRhdGEpIHsKIAkgICAgdC0+bG9ncy5zdGF0dXMgPSA0MDA7Ci0JICAgIGlmICh0LT5wcm94eS0+bW9kZSA9PSBQUl9NT0RFX0hUVFApCi0JCWNsaWVudF9yZXRuY2xvc2UodCwgc3RybGVuKEhUVFBfNDAwKSwgSFRUUF80MDApOworCSAgICBjbGllbnRfcmV0bmNsb3NlKHQsIHQtPnByb3h5LT5lcnJtc2cubGVuNDAwLCB0LT5wcm94eS0+ZXJybXNnLm1zZzQwMCk7CiAJICAgIHJldHVybiAxOwogCX0KLQllbHNlIGlmICh0LT5yZXNfY3IgPT0gUkVTX0VSUk9SIHx8IHQtPnJlc19jciA9PSBSRVNfTlVMTAotCSAgICAgICAgIHx8IHR2X2NtcDJfbXMoJnQtPmNyZXhwaXJlLCAmbm93KSA8PSAwKSB7Ci0KLQkgICAgLyogcmVhZCB0aW1lb3V0LCByZWFkIGVycm9yLCBvciBsYXN0IHJlYWQgOiBnaXZlIHVwLgorCWVsc2UgaWYgKHQtPnJlc19jciA9PSBSRVNfRVJST1IgfHwgdC0+cmVzX2NyID09IFJFU19OVUxMKSB7CisJICAgIC8qIHJlYWQgZXJyb3IsIG9yIGxhc3QgcmVhZCA6IGdpdmUgdXAuCiAJICAgICAqIHNpbmNlIHdlIGFyZSBpbiBoZWFkZXIgbW9kZSwgaWYgdGhlcmUncyBubyBzcGFjZSBsZWZ0IGZvciBoZWFkZXJzLCB3ZQogCSAgICAgKiB3b24ndCBiZSBhYmxlIHRvIGZyZWUgbW9yZSBsYXRlciwgc28gdGhlIHNlc3Npb24gd2lsbCBuZXZlciB0ZXJtaW5hdGUuCiAJICAgICAqLwpAQCAtMjU4MSw2ICsyNzA1LDE0IEBACiAJICAgIHQtPmNsaV9zdGF0ZSA9IENMX1NUQ0xPU0U7CiAJICAgIHJldHVybiAxOwogCX0KKwllbHNlIGlmICh0dl9jbXAyX21zKCZ0LT5jcmV4cGlyZSwgJm5vdykgPD0gMCkgeworCisJICAgIC8qIHJlYWQgdGltZW91dCA6IGdpdmUgdXAgd2l0aCBhbiBlcnJvciBtZXNzYWdlLgorCSAgICAgKi8KKwkgICAgdC0+bG9ncy5zdGF0dXMgPSA0MDg7CisJICAgIGNsaWVudF9yZXRuY2xvc2UodCwgdC0+cHJveHktPmVycm1zZy5sZW40MDgsIHQtPnByb3h5LT5lcnJtc2cubXNnNDA4KTsKKwkgICAgcmV0dXJuIDE7CisJfQogCiAJcmV0dXJuIHQtPmNsaV9zdGF0ZSAhPSBDTF9TVEhFQURFUlM7CiAgICAgfQpAQCAtMjc2Niw5ICsyODk4LDkgQEAKIAkJICAgIC8qIGlmIGNvbm5fcmV0cmllcyA8IDAgb3Igb3RoZXIgZXJyb3IsIGxldCdzIGFib3J0ICovCiAJCSAgICB0dl9ldGVybml0eSgmdC0+Y25leHBpcmUpOwogCQkgICAgdC0+c3J2X3N0YXRlID0gU1ZfU1RDTE9TRTsKLQkJICAgIHQtPmxvZ3Muc3RhdHVzID0gNTAyOworCQkgICAgdC0+bG9ncy5zdGF0dXMgPSA1MDM7CiAJCSAgICBpZiAodC0+cHJveHktPm1vZGUgPT0gUFJfTU9ERV9IVFRQKQotCQkJY2xpZW50X3JldHVybih0LCBzdHJsZW4oSFRUUF81MDIpLCBIVFRQXzUwMik7CisJCQljbGllbnRfcmV0dXJuKHQsIHQtPnByb3h5LT5lcnJtc2cubGVuNTAzLCB0LT5wcm94eS0+ZXJybXNnLm1zZzUwMyk7CiAJCX0KIAkgICAgfQogCSAgICByZXR1cm4gMTsKQEAgLTI3OTcsOSArMjkyOSw5IEBACiAJICAgIC8qIGlmIGNvbm5fcmV0cmllcyA8IDAgb3Igb3RoZXIgZXJyb3IsIGxldCdzIGFib3J0ICovCiAJICAgIHR2X2V0ZXJuaXR5KCZ0LT5jbmV4cGlyZSk7CiAJICAgIHQtPnNydl9zdGF0ZSA9IFNWX1NUQ0xPU0U7Ci0JICAgIHQtPmxvZ3Muc3RhdHVzID0gNTAyOworCSAgICB0LT5sb2dzLnN0YXR1cyA9IDUwMzsKIAkgICAgaWYgKHQtPnByb3h5LT5tb2RlID09IFBSX01PREVfSFRUUCkKLQkJY2xpZW50X3JldHVybih0LCBzdHJsZW4oSFRUUF81MDIpLCBIVFRQXzUwMik7CisJCWNsaWVudF9yZXR1cm4odCwgdC0+cHJveHktPmVycm1zZy5sZW41MDMsIHQtPnByb3h5LT5lcnJtc2cubXNnNTAzKTsKIAkgICAgcmV0dXJuIDE7CiAJfQogCWVsc2UgeyAvKiBubyBlcnJvciBvciB3cml0ZSAwICovCkBAIC0yODU1LDcgKzI5ODcsOCBAQAogCQkgICAgICogcmVxdWVzdHMgYW5kIHRoaXMgb25lIGlzbid0LgogCQkgICAgICovCiAJCSAgICBsZW4gPSBzcHJpbnRmKHRyYXNoLCAiU2V0LUNvb2tpZTogJXM9JXM7IHBhdGg9L1xyXG4iLAotCQkJCSAgdC0+cHJveHktPmNvb2tpZV9uYW1lLCB0LT5zcnYtPmNvb2tpZSk7CisJCQkJICB0LT5wcm94eS0+Y29va2llX25hbWUsCisJCQkJICB0LT5zcnYtPmNvb2tpZSA/IHQtPnNydi0+Y29va2llIDogIiIpOwogCiAJCSAgICAvKiBIZXJlLCB3ZSB3aWxsIHRlbGwgYW4gZXZlbnR1YWwgY2FjaGUgb24gdGhlIGNsaWVudCBzaWRlIHRoYXQgd2UgZG9uJ3QKIAkJICAgICAqIHdhbnQgaXQgdG8gY2FjaGUgdGhpcyByZXBseSBiZWNhdXNlIEhUVFAvMS4wIGNhY2hlcyBhbHNvIGNhY2hlIGNvb2tpZXMgIQpAQCAtMjk2Myw5ICszMDk2LDEwIEBACiAJICAgIH0KIAkgICAgCiAJICAgIC8qIGNoZWNrIGZvciBzZXJ2ZXIgY29va2llcyAqLwotCSAgICBpZiAoIWRlbGV0ZV9oZWFkZXIgJiYgKHQtPnByb3h5LT5vcHRpb25zICYgUFJfT19DT09LX0FOWSkKLQkJJiYgKHQtPnByb3h5LT5jb29raWVfbmFtZSAhPSBOVUxMKSAmJiAocHRyID49IHJlcC0+aCArIDEyKQotCQkmJiAoc3RybmNtcChyZXAtPmgsICJTZXQtQ29va2llOiAiLCAxMikgPT0gMCkpIHsKKwkgICAgaWYgKCFkZWxldGVfaGVhZGVyIC8qJiYgKHQtPnByb3h5LT5vcHRpb25zICYgUFJfT19DT09LX0FOWSkqLworCQkmJiAodC0+cHJveHktPmNvb2tpZV9uYW1lICE9IE5VTEwgfHwgdC0+cHJveHktPmNhcHR1cmVfbmFtZSAhPSBOVUxMKQorCQkmJiAocHRyID49IHJlcC0+aCArIDEyKQorCQkmJiAobWVtY21wKHJlcC0+aCwgIlNldC1Db29raWU6ICIsIDEyKSA9PSAwKSkgewogCQljaGFyICpwMSwgKnAyLCAqcDMsICpwNDsKIAkJCiAJCXAxID0gcmVwLT5oICsgMTI7IC8qIGZpcnN0IGNoYXIgYWZ0ZXIgJ1NldC1Db29raWU6ICcgKi8KQEAgLTI5OTgsOSArMzEzMiwyNiBAQAogCQkgICAgICogYW5kIGl0cyB2YWx1ZSBiZXR3ZWVuIHAzIGFuZCBwNC4KIAkJICAgICAqIHdlIGNhbiBwcm9jZXNzIGl0LgogCQkgICAgICovCi0JCSAgICAKLQkJICAgIGlmICgocDIgLSBwMSA9PSBzdHJsZW4odC0+cHJveHktPmNvb2tpZV9uYW1lKSkgJiYKLQkJCShzdHJuY21wKHAxLCB0LT5wcm94eS0+Y29va2llX25hbWUsIHAyIC0gcDEpID09IDApKSB7CisKKwkJICAgIC8qIGZpcnN0LCBsZXQncyBzZWUgaWYgd2Ugd2FudCB0byBjYXB0dXJlIGl0ICovCisJCSAgICBpZiAodC0+cHJveHktPmNhcHR1cmVfbmFtZSAhPSBOVUxMICYmCisJCQl0LT5sb2dzLnNydl9jb29raWUgPT0gTlVMTCAmJgorCQkJKHA0IC0gcDEgPj0gdC0+cHJveHktPmNhcHR1cmVfbmFtZWxlbikgJiYKKwkJCW1lbWNtcChwMSwgdC0+cHJveHktPmNhcHR1cmVfbmFtZSwgdC0+cHJveHktPmNhcHR1cmVfbmFtZWxlbikgPT0gMCkgeworCQkJaW50IGxvZ19sZW4gPSBwNCAtIHAxOworCisJCQlpZiAoKHQtPmxvZ3Muc3J2X2Nvb2tpZSA9IHBvb2xfYWxsb2MoY2FwdHVyZSkpID09IE5VTEwpIHsKKwkJCSAgICBBbGVydCgiSFRUUCBsb2dnaW5nIDogb3V0IG9mIG1lbW9yeS5cbiIpOworCQkJfQorCisJCQlpZiAobG9nX2xlbiA+IHQtPnByb3h5LT5jYXB0dXJlX2xlbikKKwkJCSAgICBsb2dfbGVuID0gdC0+cHJveHktPmNhcHR1cmVfbGVuOworCQkJbWVtY3B5KHQtPmxvZ3Muc3J2X2Nvb2tpZSwgcDEsIGxvZ19sZW4pOworCQkJdC0+bG9ncy5zcnZfY29va2llW2xvZ19sZW5dID0gMDsKKwkJICAgIH0KKworCQkgICAgaWYgKChwMiAtIHAxID09IHQtPnByb3h5LT5jb29raWVfbGVuKSAmJiAodC0+cHJveHktPmNvb2tpZV9uYW1lICE9IE5VTEwpICYmCisJCQkobWVtY21wKHAxLCB0LT5wcm94eS0+Y29va2llX25hbWUsIHAyIC0gcDEpID09IDApKSB7CiAJCQkvKiBDb29sLi4uIGl0J3MgdGhlIHJpZ2h0IG9uZSAqLwogCQkJCiAJCQkvKiBJZiB0aGUgY29va2llIGlzIGluIGluc2VydCBtb2RlIG9uIGEga25vd24gc2VydmVyLCB3ZSdsbCBkZWxldGUKQEAgLTMwNTIsMjcgKzMyMDMsMzcgQEAKIAkJdHZfZXRlcm5pdHkoJnQtPnNyZXhwaXJlKTsKIAl9CiAKLQkvKiByZWFkIG9yIHdyaXRlIGVycm9yICovCisJLyogcmVhZCBlcnJvciwgd3JpdGUgZXJyb3IgKi8KIAlpZiAodC0+cmVzX3N3ID09IFJFU19FUlJPUiB8fCB0LT5yZXNfc3IgPT0gUkVTX0VSUk9SKSB7CiAJICAgIHR2X2V0ZXJuaXR5KCZ0LT5zcmV4cGlyZSk7CiAJICAgIHR2X2V0ZXJuaXR5KCZ0LT5zd2V4cGlyZSk7CiAJICAgIGZkX2RlbGV0ZSh0LT5zcnZfZmQpOwogCSAgICB0LT5zcnZfc3RhdGUgPSBTVl9TVENMT1NFOwogCSAgICB0LT5sb2dzLnN0YXR1cyA9IDUwMjsKLQkgICAgY2xpZW50X3JldHVybih0LCBzdHJsZW4oSFRUUF81MDIpLCBIVFRQXzUwMik7CisJICAgIGNsaWVudF9yZXR1cm4odCwgdC0+cHJveHktPmVycm1zZy5sZW41MDIsIHQtPnByb3h5LT5lcnJtc2cubXNnNTAyKTsKIAkgICAgcmV0dXJuIDE7CiAJfQotCS8qIHJlYWQgdGltZW91dCwgbGFzdCByZWFkLCBvciBlbmQgb2YgY2xpZW50IHdyaXRlCisJLyogZW5kIG9mIGNsaWVudCB3cml0ZSBvciBlbmQgb2Ygc2VydmVyIHJlYWQuCiAJICogc2luY2Ugd2UgYXJlIGluIGhlYWRlciBtb2RlLCBpZiB0aGVyZSdzIG5vIHNwYWNlIGxlZnQgZm9yIGhlYWRlcnMsIHdlCiAJICogd29uJ3QgYmUgYWJsZSB0byBmcmVlIG1vcmUgbGF0ZXIsIHNvIHRoZSBzZXNzaW9uIHdpbGwgbmV2ZXIgdGVybWluYXRlLgogCSAqLwotCWVsc2UgaWYgKHQtPnJlc19zciA9PSBSRVNfTlVMTCB8fCBjID09IENMX1NUU0hVVFcgfHwgYyA9PSBDTF9TVENMT1NFCi0JCSB8fCByZXAtPmwgPj0gcmVwLT5ybGltIC0gcmVwLT5kYXRhIHx8IHR2X2NtcDJfbXMoJnQtPnNyZXhwaXJlLCAmbm93KSA8PSAwKSB7CisJZWxzZSBpZiAodC0+cmVzX3NyID09IFJFU19OVUxMIHx8IGMgPT0gQ0xfU1RTSFVUVyB8fCBjID09IENMX1NUQ0xPU0UgfHwgcmVwLT5sID49IHJlcC0+cmxpbSAtIHJlcC0+ZGF0YSkgewogCSAgICBGRF9DTFIodC0+c3J2X2ZkLCBTdGF0aWNSZWFkRXZlbnQpOwogCSAgICB0dl9ldGVybml0eSgmdC0+c3JleHBpcmUpOwogCSAgICBzaHV0ZG93bih0LT5zcnZfZmQsIFNIVVRfUkQpOwogCSAgICB0LT5zcnZfc3RhdGUgPSBTVl9TVFNIVVRSOwogCSAgICByZXR1cm4gMTsKKwl9CQorCS8qIHJlYWQgdGltZW91dCA6IHJldHVybiBhIDUwNCB0byB0aGUgY2xpZW50LgorCSAqLworCWVsc2UgaWYgKEZEX0lTU0VUKHQtPnNydl9mZCwgU3RhdGljUmVhZEV2ZW50KSAmJiB0dl9jbXAyX21zKCZ0LT5zcmV4cGlyZSwgJm5vdykgPD0gMCkgeworCSAgICB0dl9ldGVybml0eSgmdC0+c3JleHBpcmUpOworCSAgICB0dl9ldGVybml0eSgmdC0+c3dleHBpcmUpOworCSAgICBmZF9kZWxldGUodC0+c3J2X2ZkKTsKKwkgICAgdC0+c3J2X3N0YXRlID0gU1ZfU1RDTE9TRTsKKwkgICAgdC0+bG9ncy5zdGF0dXMgPSA1MDQ7CisJICAgIGNsaWVudF9yZXR1cm4odCwgdC0+cHJveHktPmVycm1zZy5sZW41MDQsIHQtPnByb3h5LT5lcnJtc2cubXNnNTA0KTsKKwkgICAgcmV0dXJuIDE7CiAJICAgIAogCX0JCiAJLyogd3JpdGUgdGltZW91dCwgb3IgbGFzdCBjbGllbnQgcmVhZCBhbmQgYnVmZmVyIGVtcHR5ICovCkBAIC0zMDgxLDcgKzMyNDIsNyBAQAogCSAqIHNvbWUgd29yayB0byBkbyBvbiB0aGUgaGVhZGVycy4KIAkgKi8KIAllbHNlIGlmICgoKC8qYyA9PSBDTF9TVFNIVVRSIHx8Ki8gYyA9PSBDTF9TVENMT1NFKSAmJiAocmVxLT5sID09IDApKSB8fAotCQkgKHR2X2NtcDJfbXMoJnQtPnN3ZXhwaXJlLCAmbm93KSA8PSAwKSkgeworCQkgKEZEX0lTU0VUKHQtPnNydl9mZCwgU3RhdGljV3JpdGVFdmVudCkgJiYgdHZfY21wMl9tcygmdC0+c3dleHBpcmUsICZub3cpIDw9IDApKSB7CiAJICAgIEZEX0NMUih0LT5zcnZfZmQsIFN0YXRpY1dyaXRlRXZlbnQpOwogCSAgICB0dl9ldGVybml0eSgmdC0+c3dleHBpcmUpOwogCSAgICBzaHV0ZG93bih0LT5zcnZfZmQsIFNIVVRfV1IpOwpAQCAtMzM2Niw3ICszNTI3LDcgQEAKIAllbHNlIHsKIAkgICAgaWYgKHMtPmhlYWx0aCA9PSBzLT5yaXNlKSB7CiAJCWlmICghKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkpCi0JCSAgICBXYXJuaW5nKCJzZXJ2ZXIgJXMgRE9XTi5cbiIsIHMtPmlkKTsKKwkJICAgIFdhcm5pbmcoInNlcnZlciAlcy8lcyBET1dOLlxuIiwgcy0+cHJveHktPmlkLCBzLT5pZCk7CiAKIAkJc2VuZF9sb2cocy0+cHJveHksIExPR19BTEVSVCwgIlNlcnZlciAlcy8lcyBpcyBET1dOLlxuIiwgcy0+cHJveHktPmlkLCBzLT5pZCk7CiAJICAgIH0KQEAgLTMzODgsNyArMzU0OSw3IEBACiAJICAgIGlmIChzLT5oZWFsdGggPj0gcy0+cmlzZSkgewogCQlpZiAocy0+aGVhbHRoID09IHMtPnJpc2UpIHsKIAkJICAgIGlmICghKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkpCi0JCQlXYXJuaW5nKCJzZXJ2ZXIgJXMgVVAuXG4iLCBzLT5pZCk7CisJCQlXYXJuaW5nKCJzZXJ2ZXIgJXMvJXMgVVAuXG4iLCBzLT5wcm94eS0+aWQsIHMtPmlkKTsKIAkJICAgIHNlbmRfbG9nKHMtPnByb3h5LCBMT0dfTk9USUNFLCAiU2VydmVyICVzLyVzIGlzIFVQLlxuIiwgcy0+cHJveHktPmlkLCBzLT5pZCk7CiAJCX0KIApAQCAtMzQwOCw3ICszNTY5LDcgQEAKIAkgICAgZWxzZSB7CiAJCWlmIChzLT5oZWFsdGggPT0gcy0+cmlzZSkgewogCQkgICAgaWYgKCEoZ2xvYmFsLm1vZGUgJiBNT0RFX1FVSUVUKSkKLQkJCVdhcm5pbmcoInNlcnZlciAlcyBET1dOLlxuIiwgcy0+aWQpOworCQkJV2FybmluZygic2VydmVyICVzLyVzIERPV04uXG4iLCBzLT5wcm94eS0+aWQsIHMtPmlkKTsKIAogCQkgICAgc2VuZF9sb2cocy0+cHJveHksIExPR19BTEVSVCwgIlNlcnZlciAlcy8lcyBpcyBET1dOLlxuIiwgcy0+cHJveHktPmlkLCBzLT5pZCk7CiAJCX0KQEAgLTM3MTQsNiArMzg3NSwzMyBAQAogfQogCiAKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGR1bXBzIGV2ZXJ5IHNlcnZlcidzIHN0YXRlIHdoZW4gdGhlIHByb2Nlc3MgcmVjZWl2ZXMgU0lHSFVQLgorICovCit2b2lkIHNpZ19kdW1wX3N0YXRlKGludCBzaWcpIHsKKyAgICBzdHJ1Y3QgcHJveHkgKnAgPSBwcm94eTsKKworICAgIFdhcm5pbmcoIlNJR0hVUCByZWNlaXZlZCwgZHVtcGluZyBzZXJ2ZXJzIHN0YXRlcy5cbiIpOworICAgIHdoaWxlIChwKSB7CisJc3RydWN0IHNlcnZlciAqcyA9IHAtPnNydjsKKworCXNlbmRfbG9nKHAsIExPR19OT1RJQ0UsICJTSUdVUCByZWNlaXZlZCwgZHVtcGluZyBzZXJ2ZXJzIHN0YXRlcy5cbiIpOworCXdoaWxlIChzKSB7CisJICAgIGlmIChzLT5zdGF0ZSAmIFNSVl9SVU5OSU5HKSB7CisJCVdhcm5pbmcoIlNJR0hVUDogc2VydmVyICVzLyVzIGlzIFVQLlxuIiwgcC0+aWQsIHMtPmlkKTsKKwkJc2VuZF9sb2cocCwgTE9HX05PVElDRSwgIlNJR1VQOiBzZXJ2ZXIgJXMvJXMgaXMgVVAuXG4iLCBwLT5pZCwgcy0+aWQpOworCSAgICB9CisJICAgIGVsc2UgeworCQlXYXJuaW5nKCJTSUdIVVA6IHNlcnZlciAlcy8lcyBpcyBET1dOLlxuIiwgcC0+aWQsIHMtPmlkKTsKKwkJc2VuZF9sb2cocCwgTE9HX05PVElDRSwgIlNJR0hVUDogc2VydmVyICVzLyVzIGlzIERPV04uXG4iLCBwLT5pZCwgcy0+aWQpOworCSAgICB9CisJICAgIHMgPSBzLT5uZXh0OworCX0KKwlwID0gcC0+bmV4dDsKKyAgICB9CisgICAgc2lnbmFsKHNpZywgc2lnX2R1bXBfc3RhdGUpOworfQorCiB2b2lkIGR1bXAoaW50IHNpZykgewogICAgIHN0cnVjdCB0YXNrICp0LCAqdG5leHQ7CiAgICAgc3RydWN0IHNlc3Npb24gKnM7CkBAIC0zODMwLDcgKzQwMTgsNyBAQAogICAgIH0KICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3NbMF0sICJsb2ciKSkgeyAgLyogc3lzbG9nIHNlcnZlciBhZGRyZXNzICovCiAJc3RydWN0IHNvY2thZGRyX2luICpzYTsKLQlpbnQgZmFjaWxpdHk7CisJaW50IGZhY2lsaXR5LCBsZXZlbDsKIAkKIAlpZiAoKihhcmdzWzFdKSA9PSAwIHx8ICooYXJnc1syXSkgPT0gMCkgewogCSAgICBBbGVydCgicGFyc2luZyBbJXM6JWRdIDogPGxvZz4gZXhwZWN0cyA8YWRkcmVzcz4gYW5kIDxmYWNpbGl0eT4gYXMgYXJndW1lbnRzLlxuIiwgZmlsZSwgbGluZW51bSk7CkBAIC0zODQ1LDcgKzQwMzMsMTcgQEAKIAkgICAgQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IHVua25vd24gbG9nIGZhY2lsaXR5IDwlcz5cbiIsIGZpbGUsIGxpbmVudW0sIGFyZ3NbMl0pOwogCSAgICBleGl0KDEpOwogCX0KLQkKKworCWxldmVsID0gNzsgLyogbWF4IHN5c2xvZyBsZXZlbCA9IGRlYnVnICovCisJaWYgKCooYXJnc1szXSkpIHsKKwkgICAgd2hpbGUgKGxldmVsID49IDAgJiYgc3RyY21wKGxvZ19sZXZlbHNbbGV2ZWxdLCBhcmdzWzNdKSkKKwkJbGV2ZWwtLTsKKwkgICAgaWYgKGxldmVsIDwgMCkgeworCQlBbGVydCgicGFyc2luZyBbJXM6JWRdIDogdW5rbm93biBvcHRpb25uYWwgbG9nIGxldmVsIDwlcz5cbiIsIGZpbGUsIGxpbmVudW0sIGFyZ3NbM10pOworCQlleGl0KDEpOworCSAgICB9CisJfQorCiAJc2EgPSBzdHIyc2EoYXJnc1sxXSk7CiAJaWYgKCFzYS0+c2luX3BvcnQpCiAJICAgIHNhLT5zaW5fcG9ydCA9IGh0b25zKFNZU0xPR19QT1JUKTsKQEAgLTM4NTMsMTAgKzQwNTEsMTIgQEAKIAlpZiAoZ2xvYmFsLmxvZ2ZhYzEgPT0gLTEpIHsKIAkgICAgZ2xvYmFsLmxvZ3NydjEgPSAqc2E7CiAJICAgIGdsb2JhbC5sb2dmYWMxID0gZmFjaWxpdHk7CisJICAgIGdsb2JhbC5sb2dsZXYxID0gbGV2ZWw7CiAJfQogCWVsc2UgaWYgKGdsb2JhbC5sb2dmYWMyID09IC0xKSB7CiAJICAgIGdsb2JhbC5sb2dzcnYyID0gKnNhOwogCSAgICBnbG9iYWwubG9nZmFjMiA9IGZhY2lsaXR5OworCSAgICBnbG9iYWwubG9nbGV2MiA9IGxldmVsOwogCX0KIAllbHNlIHsKIAkgICAgQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IHRvbyBtYW55IHN5c2xvZyBzZXJ2ZXJzXG4iLCBmaWxlLCBsaW5lbnVtKTsKQEAgLTM5MzYsNiArNDEzNiw3IEBACiAJICAgIHJldHVybiAtMTsKIAl9CiAJY3VycHJveHktPmNvb2tpZV9uYW1lID0gc3RyZHVwKGFyZ3NbMV0pOworCWN1cnByb3h5LT5jb29raWVfbGVuID0gc3RybGVuKGN1cnByb3h5LT5jb29raWVfbmFtZSk7CiAJCiAJY3VyX2FyZyA9IDI7CiAJd2hpbGUgKCooYXJnc1tjdXJfYXJnXSkpIHsKQEAgLTM5NjcsNiArNDE2OCwyNyBAQAogCSAgICByZXR1cm4gLTE7CiAJfQogICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3NbMF0sICJjYXB0dXJlIikpIHsgIC8qIG5hbWUgb2YgYSBjb29raWUgdG8gY2FwdHVyZSAqLworCWlmIChjdXJwcm94eS0+Y2FwdHVyZV9uYW1lICE9IE5VTEwpIHsKKwkgICAgQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IGNhcHR1cmUgYWxyZWFkeSBzcGVjaWZpZWQuIENvbnRpbnVpbmcuXG4iLAorCQkgIGZpbGUsIGxpbmVudW0pOworCSAgICByZXR1cm4gMDsKKwl9CisJCisJaWYgKCooYXJnc1s0XSkgPT0gMCkgeworCSAgICBBbGVydCgicGFyc2luZyBbJXM6JWRdIDogPGNhcHR1cmU+IGV4cGVjdHMgJ2Nvb2tpZScgPGNvb2tpZV9uYW1lPiAnbGVuJyA8bGVuPi5cbiIsCisJCSAgZmlsZSwgbGluZW51bSk7CisJICAgIHJldHVybiAtMTsKKwl9CisJY3VycHJveHktPmNhcHR1cmVfbmFtZSA9IHN0cmR1cChhcmdzWzJdKTsKKwljdXJwcm94eS0+Y2FwdHVyZV9uYW1lbGVuID0gc3RybGVuKGN1cnByb3h5LT5jYXB0dXJlX25hbWUpOworCWN1cnByb3h5LT5jYXB0dXJlX2xlbiA9IGF0b2woYXJnc1s0XSk7CisJaWYgKGN1cnByb3h5LT5jYXB0dXJlX2xlbiA+PSBDQVBUVVJFX0xFTikgeworCSAgICBXYXJuaW5nKCJwYXJzaW5nIFslczolZF0gOiB0cnVuY2F0aW5nIGNhcHR1cmUgbGVuZ3RoIHRvICVkIGJ5dGVzLlxuIiwKKwkJICAgIGZpbGUsIGxpbmVudW0sIENBUFRVUkVfTEVOIC0gMSk7CisJICAgIGN1cnByb3h5LT5jYXB0dXJlX2xlbiA9IENBUFRVUkVfTEVOIC0gMTsKKwl9CisgICAgfQogICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJnc1swXSwgImNvbnRpbWVvdXQiKSkgeyAgLyogY29ubmVjdCB0aW1lb3V0ICovCiAJaWYgKGN1cnByb3h5LT5jb250aW1lb3V0ICE9IDApIHsKIAkgICAgQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IGNvbnRpbWVvdXQgYWxyZWFkeSBzcGVjaWZpZWQuIENvbnRpbnVpbmcuXG4iLCBmaWxlLCBsaW5lbnVtKTsKQEAgLTQwNDMsNiArNDI2NSwxMCBAQAogCSAgICAvKiB1c2UgSFRUUCByZXF1ZXN0IHRvIGNoZWNrIHNlcnZlcnMnIGhlYWx0aCAqLwogCSAgICBjdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX0hUVFBfQ0hLOwogCX0KKwllbHNlIGlmICghc3RyY21wKGFyZ3NbMV0sICJwZXJzaXN0IikpIHsKKwkgICAgLyogcGVyc2lzdCBvbiB1c2luZyB0aGUgc2VydmVyIHNwZWNpZmllZCBieSB0aGUgY29va2llLCBldmVuIHdoZW4gaXQncyBkb3duICovCisJICAgIGN1cnByb3h5LT5vcHRpb25zIHw9IFBSX09fUEVSU0lTVDsKKwl9CiAJZWxzZSB7CiAJICAgIEFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiB1bmtub3duIG9wdGlvbiA8JXM+LlxuIiwgZmlsZSwgbGluZW51bSwgYXJnc1sxXSk7CiAJICAgIHJldHVybiAtMTsKQEAgLTQxMzYsNiArNDM2MiwxMCBAQAogCQluZXdzcnYtPmludGVyID0gYXRvbChhcmdzW2N1cl9hcmcgKyAxXSk7CiAJCWN1cl9hcmcgKz0gMjsKIAkgICAgfQorCSAgICBlbHNlIGlmICghc3RyY21wKGFyZ3NbY3VyX2FyZ10sICJiYWNrdXAiKSkgeworCQluZXdzcnYtPnN0YXRlIHw9IFNSVl9CQUNLVVA7CisJCWN1cl9hcmcgKys7CisJICAgIH0KIAkgICAgZWxzZSBpZiAoIXN0cmNtcChhcmdzW2N1cl9hcmddLCAiY2hlY2siKSkgewogCQlzdHJ1Y3QgdGFzayAqdDsKIAkJCkBAIC00MTczLDEwICs0NDAzLDE0IEBACiAJaWYgKCooYXJnc1sxXSkgJiYgKihhcmdzWzJdKSA9PSAwICYmICFzdHJjbXAoYXJnc1sxXSwgImdsb2JhbCIpKSB7CiAJICAgIGN1cnByb3h5LT5sb2dmYWMxID0gZ2xvYmFsLmxvZ2ZhYzE7CiAJICAgIGN1cnByb3h5LT5sb2dzcnYxID0gZ2xvYmFsLmxvZ3NydjE7CisJICAgIGN1cnByb3h5LT5sb2dsZXYxID0gZ2xvYmFsLmxvZ2xldjE7CiAJICAgIGN1cnByb3h5LT5sb2dmYWMyID0gZ2xvYmFsLmxvZ2ZhYzI7CiAJICAgIGN1cnByb3h5LT5sb2dzcnYyID0gZ2xvYmFsLmxvZ3NydjI7CisJICAgIGN1cnByb3h5LT5sb2dsZXYyID0gZ2xvYmFsLmxvZ2xldjI7CiAJfQogCWVsc2UgaWYgKCooYXJnc1sxXSkgJiYgKihhcmdzWzJdKSkgeworCSAgICBpbnQgbGV2ZWw7CisKIAkgICAgZm9yIChmYWNpbGl0eSA9IDA7IGZhY2lsaXR5IDwgTkJfTE9HX0ZBQ0lMSVRJRVM7IGZhY2lsaXR5KyspCiAJCWlmICghc3RyY21wKGxvZ19mYWNpbGl0aWVzW2ZhY2lsaXR5XSwgYXJnc1syXSkpCiAJCSAgICBicmVhazsKQEAgLTQxODYsNiArNDQyMCwxNiBAQAogCQlleGl0KDEpOwogCSAgICB9CiAJICAgIAorCSAgICBsZXZlbCA9IDc7IC8qIG1heCBzeXNsb2cgbGV2ZWwgPSBkZWJ1ZyAqLworCSAgICBpZiAoKihhcmdzWzNdKSkgeworCQl3aGlsZSAobGV2ZWwgPj0gMCAmJiBzdHJjbXAobG9nX2xldmVsc1tsZXZlbF0sIGFyZ3NbM10pKQorCQkgICAgIGxldmVsLS07CisJCWlmIChsZXZlbCA8IDApIHsKKwkJICAgIEFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiB1bmtub3duIG9wdGlvbm5hbCBsb2cgbGV2ZWwgPCVzPlxuIiwgZmlsZSwgbGluZW51bSwgYXJnc1szXSk7CisJCSAgICBleGl0KDEpOworCQl9CisJICAgIH0KKwogCSAgICBzYSA9IHN0cjJzYShhcmdzWzFdKTsKIAkgICAgaWYgKCFzYS0+c2luX3BvcnQpCiAJCXNhLT5zaW5fcG9ydCA9IGh0b25zKFNZU0xPR19QT1JUKTsKQEAgLTQxOTMsMTAgKzQ0MzcsMTIgQEAKIAkgICAgaWYgKGN1cnByb3h5LT5sb2dmYWMxID09IC0xKSB7CiAJCWN1cnByb3h5LT5sb2dzcnYxID0gKnNhOwogCQljdXJwcm94eS0+bG9nZmFjMSA9IGZhY2lsaXR5OworCQljdXJwcm94eS0+bG9nbGV2MSA9IGxldmVsOwogCSAgICB9CiAJICAgIGVsc2UgaWYgKGN1cnByb3h5LT5sb2dmYWMyID09IC0xKSB7CiAJCWN1cnByb3h5LT5sb2dzcnYyID0gKnNhOwogCQljdXJwcm94eS0+bG9nZmFjMiA9IGZhY2lsaXR5OworCQljdXJwcm94eS0+bG9nbGV2MiA9IGxldmVsOwogCSAgICB9CiAJICAgIGVsc2UgewogCQlBbGVydCgicGFyc2luZyBbJXM6JWRdIDogdG9vIG1hbnkgc3lzbG9nIHNlcnZlcnNcbiIsIGZpbGUsIGxpbmVudW0pOwpAQCAtNDQ0MSw2ICs0Njg3LDgwIEBACiAJCiAJY3VycHJveHktPnJzcF9hZGRbY3VycHJveHktPm5iX3JzcGFkZCsrXSA9IHN0cmR1cChhcmdzWzFdKTsKICAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcChhcmdzWzBdLCAiZXJyb3Jsb2MiKSkgeyAvKiBlcnJvciBsb2NhdGlvbiAqLworCWludCBlcnJudW07CisJY2hhciAqZXJyOworCisJaWYgKCooYXJnc1syXSkgPT0gMCkgeworCSAgICBBbGVydCgicGFyc2luZyBbJXM6JWRdIDogPGVycm9ybG9jPiBleHBlY3RzIDxlcnJvcj4gYW5kIDx1cmw+IGFzIGFyZ3VtZW50cy5cbiIsIGZpbGUsIGxpbmVudW0pOworCSAgICByZXR1cm4gLTE7CisJfQorCisJZXJybnVtID0gYXRvbChhcmdzWzFdKTsKKwllcnIgPSBtYWxsb2Moc3RybGVuKEhUVFBfMzAyKSArIHN0cmxlbihhcmdzWzJdKSArIDUpOworCXNwcmludGYoZXJyLCAiJXMlc1xyXG5cclxuIiwgSFRUUF8zMDIsIGFyZ3NbMl0pOworCisJaWYgKGVycm51bSA9PSA0MDApIHsKKwkgICAgaWYgKGN1cnByb3h5LT5lcnJtc2cubXNnNDAwKSB7CisJCVdhcm5pbmcoInBhcnNpbmcgWyVzOiVkXSA6IGVycm9yICVkIGFscmVhZHkgZGVmaW5lZC5cbiIsIGZpbGUsIGxpbmVudW0sIGVycm51bSk7CisJCWZyZWUoY3VycHJveHktPmVycm1zZy5tc2c0MDApOworCSAgICB9CisJICAgIGN1cnByb3h5LT5lcnJtc2cubXNnNDAwID0gZXJyOworCSAgICBjdXJwcm94eS0+ZXJybXNnLmxlbjQwMCA9IHN0cmxlbihlcnIpOworCX0KKwllbHNlIGlmIChlcnJudW0gPT0gNDAzKSB7CisJICAgIGlmIChjdXJwcm94eS0+ZXJybXNnLm1zZzQwMykgeworCQlXYXJuaW5nKCJwYXJzaW5nIFslczolZF0gOiBlcnJvciAlZCBhbHJlYWR5IGRlZmluZWQuXG4iLCBmaWxlLCBsaW5lbnVtLCBlcnJudW0pOworCQlmcmVlKGN1cnByb3h5LT5lcnJtc2cubXNnNDAzKTsKKwkgICAgfQorCSAgICBjdXJwcm94eS0+ZXJybXNnLm1zZzQwMyA9IGVycjsKKwkgICAgY3VycHJveHktPmVycm1zZy5sZW40MDMgPSBzdHJsZW4oZXJyKTsKKwl9CisJZWxzZSBpZiAoZXJybnVtID09IDQwOCkgeworCSAgICBpZiAoY3VycHJveHktPmVycm1zZy5tc2c0MDgpIHsKKwkJV2FybmluZygicGFyc2luZyBbJXM6JWRdIDogZXJyb3IgJWQgYWxyZWFkeSBkZWZpbmVkLlxuIiwgZmlsZSwgbGluZW51bSwgZXJybnVtKTsKKwkJZnJlZShjdXJwcm94eS0+ZXJybXNnLm1zZzQwOCk7CisJICAgIH0KKwkgICAgY3VycHJveHktPmVycm1zZy5tc2c0MDggPSBlcnI7CisJICAgIGN1cnByb3h5LT5lcnJtc2cubGVuNDA4ID0gc3RybGVuKGVycik7CisJfQorCWVsc2UgaWYgKGVycm51bSA9PSA1MDApIHsKKwkgICAgaWYgKGN1cnByb3h5LT5lcnJtc2cubXNnNTAwKSB7CisJCVdhcm5pbmcoInBhcnNpbmcgWyVzOiVkXSA6IGVycm9yICVkIGFscmVhZHkgZGVmaW5lZC5cbiIsIGZpbGUsIGxpbmVudW0sIGVycm51bSk7CisJCWZyZWUoY3VycHJveHktPmVycm1zZy5tc2c1MDApOworCSAgICB9CisJICAgIGN1cnByb3h5LT5lcnJtc2cubXNnNTAwID0gZXJyOworCSAgICBjdXJwcm94eS0+ZXJybXNnLmxlbjUwMCA9IHN0cmxlbihlcnIpOworCX0KKwllbHNlIGlmIChlcnJudW0gPT0gNTAyKSB7CisJICAgIGlmIChjdXJwcm94eS0+ZXJybXNnLm1zZzUwMikgeworCQlXYXJuaW5nKCJwYXJzaW5nIFslczolZF0gOiBlcnJvciAlZCBhbHJlYWR5IGRlZmluZWQuXG4iLCBmaWxlLCBsaW5lbnVtLCBlcnJudW0pOworCQlmcmVlKGN1cnByb3h5LT5lcnJtc2cubXNnNTAyKTsKKwkgICAgfQorCSAgICBjdXJwcm94eS0+ZXJybXNnLm1zZzUwMiA9IGVycjsKKwkgICAgY3VycHJveHktPmVycm1zZy5sZW41MDIgPSBzdHJsZW4oZXJyKTsKKwl9CisJZWxzZSBpZiAoZXJybnVtID09IDUwMykgeworCSAgICBpZiAoY3VycHJveHktPmVycm1zZy5tc2c1MDMpIHsKKwkJV2FybmluZygicGFyc2luZyBbJXM6JWRdIDogZXJyb3IgJWQgYWxyZWFkeSBkZWZpbmVkLlxuIiwgZmlsZSwgbGluZW51bSwgZXJybnVtKTsKKwkJZnJlZShjdXJwcm94eS0+ZXJybXNnLm1zZzUwMyk7CisJICAgIH0KKwkgICAgY3VycHJveHktPmVycm1zZy5tc2c1MDMgPSBlcnI7CisJICAgIGN1cnByb3h5LT5lcnJtc2cubGVuNTAzID0gc3RybGVuKGVycik7CisJfQorCWVsc2UgaWYgKGVycm51bSA9PSA1MDQpIHsKKwkgICAgaWYgKGN1cnByb3h5LT5lcnJtc2cubXNnNTA0KSB7CisJCVdhcm5pbmcoInBhcnNpbmcgWyVzOiVkXSA6IGVycm9yICVkIGFscmVhZHkgZGVmaW5lZC5cbiIsIGZpbGUsIGxpbmVudW0sIGVycm51bSk7CisJCWZyZWUoY3VycHJveHktPmVycm1zZy5tc2c1MDQpOworCSAgICB9CisJICAgIGN1cnByb3h5LT5lcnJtc2cubXNnNTA0ID0gZXJyOworCSAgICBjdXJwcm94eS0+ZXJybXNnLmxlbjUwNCA9IHN0cmxlbihlcnIpOworCX0KKwllbHNlIHsKKwkgICAgV2FybmluZygicGFyc2luZyBbJXM6JWRdIDogZXJyb3IgJWQgcmVsb2NhdGlvbiB3aWxsIGJlIGlnbm9yZWQuXG4iLCBmaWxlLCBsaW5lbnVtLCBlcnJudW0pOworCSAgICBmcmVlKGVycik7CisJfQorICAgIH0KICAgICBlbHNlIHsKIAlBbGVydCgicGFyc2luZyBbJXM6JWRdIDogdW5rbm93biBrZXl3b3JkIDwlcz4gaW4gPGxpc3Rlbj4gc2VjdGlvblxuIiwgZmlsZSwgbGluZW51bSwgYXJnc1swXSk7CiAJcmV0dXJuIC0xOwpAQCAtNDYzNyw2ICs0OTU3LDM0IEBACiAJCX0KIAkgICAgfQogCX0KKwlpZiAoY3VycHJveHktPmVycm1zZy5tc2c0MDAgPT0gTlVMTCkgeworCSAgICBjdXJwcm94eS0+ZXJybXNnLm1zZzQwMCA9IChjaGFyICopSFRUUF80MDA7CisJICAgIGN1cnByb3h5LT5lcnJtc2cubGVuNDAwID0gc3RybGVuKEhUVFBfNDAwKTsKKwl9CisJaWYgKGN1cnByb3h5LT5lcnJtc2cubXNnNDAzID09IE5VTEwpIHsKKwkgICAgY3VycHJveHktPmVycm1zZy5tc2c0MDMgPSAoY2hhciAqKUhUVFBfNDAzOworCSAgICBjdXJwcm94eS0+ZXJybXNnLmxlbjQwMyA9IHN0cmxlbihIVFRQXzQwMyk7CisJfQorCWlmIChjdXJwcm94eS0+ZXJybXNnLm1zZzQwOCA9PSBOVUxMKSB7CisJICAgIGN1cnByb3h5LT5lcnJtc2cubXNnNDA4ID0gKGNoYXIgKilIVFRQXzQwODsKKwkgICAgY3VycHJveHktPmVycm1zZy5sZW40MDggPSBzdHJsZW4oSFRUUF80MDgpOworCX0KKwlpZiAoY3VycHJveHktPmVycm1zZy5tc2c1MDAgPT0gTlVMTCkgeworCSAgICBjdXJwcm94eS0+ZXJybXNnLm1zZzUwMCA9IChjaGFyICopSFRUUF81MDA7CisJICAgIGN1cnByb3h5LT5lcnJtc2cubGVuNTAwID0gc3RybGVuKEhUVFBfNTAwKTsKKwl9CisJaWYgKGN1cnByb3h5LT5lcnJtc2cubXNnNTAyID09IE5VTEwpIHsKKwkgICAgY3VycHJveHktPmVycm1zZy5tc2c1MDIgPSAoY2hhciAqKUhUVFBfNTAyOworCSAgICBjdXJwcm94eS0+ZXJybXNnLmxlbjUwMiA9IHN0cmxlbihIVFRQXzUwMik7CisJfQorCWlmIChjdXJwcm94eS0+ZXJybXNnLm1zZzUwMyA9PSBOVUxMKSB7CisJICAgIGN1cnByb3h5LT5lcnJtc2cubXNnNTAzID0gKGNoYXIgKilIVFRQXzUwMzsKKwkgICAgY3VycHJveHktPmVycm1zZy5sZW41MDMgPSBzdHJsZW4oSFRUUF81MDMpOworCX0KKwlpZiAoY3VycHJveHktPmVycm1zZy5tc2c1MDQgPT0gTlVMTCkgeworCSAgICBjdXJwcm94eS0+ZXJybXNnLm1zZzUwNCA9IChjaGFyICopSFRUUF81MDQ7CisJICAgIGN1cnByb3h5LT5lcnJtc2cubGVuNTA0ID0gc3RybGVuKEhUVFBfNTA0KTsKKwl9CiAJY3VycHJveHkgPSBjdXJwcm94eS0+bmV4dDsKICAgICB9CiAgICAgaWYgKGNmZ2VyciA+IDApIHsKQEAgLTQ4NTUsNiArNTIwMyw3IEBACiAKICAgICBzaWduYWwoU0lHUVVJVCwgZHVtcCk7CiAgICAgc2lnbmFsKFNJR1VTUjEsIHNpZ19zb2Z0X3N0b3ApOworICAgIHNpZ25hbChTSUdIVVAsIHNpZ19kdW1wX3N0YXRlKTsKIAogICAgIC8qIG9uIHZlcnkgaGlnaCBsb2FkcywgYSBzaWdwaXBlIHNvbWV0aW1lcyBoYXBwZW4ganVzdCBiZXR3ZWVuIHRoZQogICAgICAqIGdldHNvY2tvcHQoKSB3aGljaCB0ZWxscyAiaXQncyBPSyB0byB3cml0ZSIsIGFuZCB0aGUgZm9sbG93aW5nIHdyaXRlIDotKApkaWZmIC0tZ2l0IGEvaW5pdC5kL2hhcHJveHkgYi9pbml0LmQvaGFwcm94eQppbmRleCA4OWUzYjgzLi4yOTVkNTBhIDEwMDY0NAotLS0gYS9pbml0LmQvaGFwcm94eQorKysgYi9pbml0LmQvaGFwcm94eQpAQCAtMzYsNiArMzYsMTggQEAKICAgIGlmIFsgISAteiAiJHBpZHMiIF07IHRoZW4KICAgICAgIGVjaG8gIkFza2luZyAkUE5BTUUgdG8gdGVybWluYXRlIGdyYWNlZnVsbHkuLi4iCiAgICAgICBraWxsIC1VU1IxICRwaWRzCisgICAgICBlY2hvICIodXNlIGtpbGwgJHBpZHMgdG8gc3RvcCBpbW1lZGlhdGVseSkuIgorICAgZmkKK30KKworIyBkdW1wIHN0YXR1cworZnVuY3Rpb24gZG9fc3RhdHVzIHsKKyAgIHBpZHM9YHBpZG9mIC1vICQkIC0tICRQTkFNRWAKKyAgIGlmIFsgISAteiAiJHBpZHMiIF07IHRoZW4KKyAgICAgIGVjaG8gIkR1bXBpbmcgJFBOQU1FIHN0YXR1cyBpbiBsb2dzLiIKKyAgICAgIGtpbGwgLUhVUCAkcGlkcworICAgZWxzZQorICAgICAgZWNobyAiUHJvY2VzcyAkUE5BTUUgaXMgbm90IHJ1bm5pbmcuIgogICAgZmkKIH0KIAo=