From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 09/12] x86emul: use TRAP definitions in x86-defns.h Date: Tue, 31 Jan 2017 11:08:06 +0000 Message-ID: <20170131110809.30001-10-wei.liu2@citrix.com> References: <20170131110809.30001-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cYWIT-0000Xb-9j for xen-devel@lists.xenproject.org; Tue, 31 Jan 2017 11:08:25 +0000 In-Reply-To: <20170131110809.30001-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org QW5kIHJlbW92ZSBkdXBsaWNhdGVzLgoKTm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpTaWduZWQtb2Zm LWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KQ2M6IEphbiBCZXVsaWNoIDxq YmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJp eC5jb20+Ci0tLQogeGVuL2FyY2gveDg2L3g4Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmMgfCAzMDUg KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTQyIGlu c2VydGlvbnMoKyksIDE2MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYv eDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYyBiL3hlbi9hcmNoL3g4Ni94ODZfZW11bGF0ZS94ODZf ZW11bGF0ZS5jCmluZGV4IGQwOWI4NjE2MjIuLmFjODZkZTdiNWYgMTAwNjQ0Ci0tLSBhL3hlbi9h cmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5jCisrKyBiL3hlbi9hcmNoL3g4Ni94ODZf ZW11bGF0ZS94ODZfZW11bGF0ZS5jCkBAIC00MjEsMjcgKzQyMSw2IEBAIHR5cGVkZWYgdW5pb24g ewogLyogTVhDU1IgYml0IGRlZmluaXRpb25zLiAqLwogI2RlZmluZSBNWENTUl9NTSAgKDFVIDw8 IDE3KQogCi0vKiBFeGNlcHRpb24gZGVmaW5pdGlvbnMuICovCi0jZGVmaW5lIEVYQ19ERSAgMAot I2RlZmluZSBFWENfREIgIDEKLSNkZWZpbmUgRVhDX0JQICAzCi0jZGVmaW5lIEVYQ19PRiAgNAot I2RlZmluZSBFWENfQlIgIDUKLSNkZWZpbmUgRVhDX1VEICA2Ci0jZGVmaW5lIEVYQ19OTSAgNwot I2RlZmluZSBFWENfREYgIDgKLSNkZWZpbmUgRVhDX1RTIDEwCi0jZGVmaW5lIEVYQ19OUCAxMQot I2RlZmluZSBFWENfU1MgMTIKLSNkZWZpbmUgRVhDX0dQIDEzCi0jZGVmaW5lIEVYQ19QRiAxNAot I2RlZmluZSBFWENfTUYgMTYKLSNkZWZpbmUgRVhDX0FDIDE3Ci0jZGVmaW5lIEVYQ19YTSAxOQot Ci0jZGVmaW5lIEVYQ19IQVNfRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgKCgxdSA8PCBFWENfREYpIHwgKDF1IDw8IEVYQ19UUykg fCAoMXUgPDwgRVhDX05QKSB8ICAgICAgICAgICAgICAgICBcCi0gICAgICgxdSA8PCBFWENfU1Mp IHwgKDF1IDw8IEVYQ19HUCkgfCAoMXUgPDwgRVhDX1BGKSB8ICgxdSA8PCBFWENfQUMpKQogCiAv KiBTZWdtZW50IHNlbGVjdG9yIGVycm9yIGNvZGUgYml0cy4gKi8KICNkZWZpbmUgRUNPREVfRVhU ICgxIDw8IDApCkBAIC02NDIsNyArNjIxLDcgQEAgZG97IGFzbSB2b2xhdGlsZSAoICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgc3RhdGUt PmlwICs9IChfc2l6ZSk7IC8qIHJlYWwgaGFyZHdhcmUgZG9lc24ndCB0cnVuY2F0ZSAqLyAgICAg ICAgICAgXAogICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCh1aW50OF90KShzdGF0ZS0+aXAgLSAg ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdHh0LT5yZWdzLT5yKGlwKSkgPiBNQVhfSU5TVF9MRU4sICAgXAotICAgICAgICAgICAg ICAgICAgICAgICAgIEVYQ19HUCwgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVBfZ3BfZmF1bHQsIDApOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgcmMgPSBvcHMtPmluc25fZmV0Y2goeDg2X3NlZ19j cywgX2lwLCAmX3gsIChfc2l6ZSksIGN0eHQpOyAgICAgICAgICAgXAogICAgaWYgKCByYyApIGdv dG8gZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAogICAgX3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXApAQCAtNjcxLDcgKzY1MCw3IEBAIGRvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCiBzdGF0aWMgaW5saW5l IGludCBta2VjKHVpbnQ4X3QgZSwgaW50MzJfdCBlYywgLi4uKQogewotICAgIHJldHVybiAoZSA8 IDMyICYmICgoMXUgPDwgZSkgJiBFWENfSEFTX0VDKSkgPyBlYyA6IFg4Nl9FVkVOVF9OT19FQzsK KyAgICByZXR1cm4gKGUgPCAzMiAmJiAoKDF1IDw8IGUpICYgVFJBUF9IQVZFX0VDKSkgPyBlYyA6 IFg4Nl9FVkVOVF9OT19FQzsKIH0KIAogI2RlZmluZSBnZW5lcmF0ZV9leGNlcHRpb25faWYocCwg ZSwgZWMuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC03NDEsMTIgKzcy MCwxMiBAQCBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCiAjZGVmaW5lIHZhbGlkYXRlX2Zhcl9icmFuY2goY3Ms IGlwKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCBzaXpl b2YoaXApIDw9IDQgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCiAgICAgICAgIEFTU0VSVChpbl9sb25nbW9kZShjdHh0LCBvcHMpIDw9IDApOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigoaXAp ID4gKGNzKS0+bGltaXQsIEVYQ19HUCwgMCk7ICAgICAgICAgICBcCisgICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZigoaXApID4gKGNzKS0+bGltaXQsIFRSQVBfZ3BfZmF1bHQsIDApOyAgICBc CiAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihpbl9sb25n bW9kZShjdHh0LCBvcHMpICYmICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY3MpLT5hdHRyLmZpZWxkcy5sICAgICAgICAgICAgICAgICAgICAgICBcCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICFpc19jYW5vbmljYWxfYWRkcmVzcyhpcCkg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChpcCkgPiAo Y3MpLT5saW1pdCwgRVhDX0dQLCAwKTsgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IChpcCkgPiAoY3MpLT5saW1pdCwgVFJBUF9ncF9mYXVsdCwgMCk7ICBcCiB9KQog CiAjZGVmaW5lIGNvbW1pdF9mYXJfYnJhbmNoKGNzLCBuZXdpcCkgKHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCkBAIC03OTYsNyArNzc1LDcgQEAgc3RhdGljIGludCBfZ2V0X2Zw dSgKICAgICAgICAgICAgICAgICByZXR1cm4gcmM7CiAgICAgICAgICAgICBnZW5lcmF0ZV9leGNl cHRpb25faWYoIShjcjQgJiAoKHR5cGUgPT0gWDg2RU1VTF9GUFVfeG1tKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWDg2X0NSNF9PU0ZYU1IgOiBYODZfQ1I0 X09TWFNBVkUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVBfaW52YWxpZF9vcCk7CiAgICAg ICAgIH0KIAogICAgICAgICByYyA9IG9wcy0+cmVhZF9jcigwLCAmY3IwLCBjdHh0KTsKQEAgLTgw OSwxMyArNzg4LDEzIEBAIHN0YXRpYyBpbnQgX2dldF9mcHUoCiAgICAgICAgIH0KICAgICAgICAg aWYgKCBjcjAgJiBYODZfQ1IwX0VNICkKICAgICAgICAgewotICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKHR5cGUgPT0gWDg2RU1VTF9GUFVfZnB1LCBFWENfTk0pOwotICAgICAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHR5cGUgPT0gWDg2RU1VTF9GUFVfbW14LCBFWENfVUQp OwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHR5cGUgPT0gWDg2RU1VTF9GUFVf eG1tLCBFWENfVUQpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHR5cGUgPT0g WDg2RU1VTF9GUFVfZnB1LCBUUkFQX25vX2RldmljZSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYodHlwZSA9PSBYODZFTVVMX0ZQVV9tbXgsIFRSQVBfaW52YWxpZF9vcCk7Cisg ICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodHlwZSA9PSBYODZFTVVMX0ZQVV94bW0s IFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgIH0KICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKChjcjAgJiBYODZfQ1IwX1RTKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHR5cGUgIT0gWDg2RU1VTF9GUFVfd2FpdCB8fCAoY3IwICYgWDg2X0NSMF9NUCkpLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRVhDX05NKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRSQVBfbm9fZGV2aWNlKTsKICAgICB9CiAKICBkb25lOgpAQCAtODM1LDEwICs4MTQs MTAgQEAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICNkZWZpbmUgcHV0X2ZwdShfZmljKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCiBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9wdXRfZnB1KCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIChf ZmljKS0+ZXhuX3JhaXNlZCA9PSBFWENfWE0gJiYgb3BzLT5yZWFkX2NyICYmICAgICAgICBcCisg ICAgaWYgKCAoX2ZpYyktPmV4bl9yYWlzZWQgPT0gVFJBUF9zaW1kX2Vycm9yICYmIG9wcy0+cmVh ZF9jciAmJiBcCiAgICAgICAgICBvcHMtPnJlYWRfY3IoNCwgJmNyNCwgY3R4dCkgPT0gWDg2RU1V TF9PS0FZICYmICAgICAgICAgXAogICAgICAgICAgIShjcjQgJiBYODZfQ1I0X09TWE1NRVhDUFQp ICkJCQkJXAotICAgICAgICAoX2ZpYyktPmV4bl9yYWlzZWQgPSBFWENfVUQ7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9maWMpLT5leG5fcmFpc2VkID0gVFJBUF9pbnZh bGlkX29wOyAgICAgICAgICAgICAgICAgICBcCiAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChf ZmljKS0+ZXhuX3JhaXNlZCA+PSAwLCAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAg ICAgICAgICAoX2ZpYyktPmV4bl9yYWlzZWQpOyAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUg KDApCkBAIC0xMTk0LDcgKzExNzMsNyBAQCBzdGF0aWMgaW50IGlvcG9ydF9hY2Nlc3NfY2hlY2so CiAgICAgICAgIHJldHVybiByYyA9PSBYODZFTVVMX0RPTkUgPyBYODZFTVVMX09LQVkgOiByYzsK IAogICAgIC8qIEVuc3VyZSB0aGUgVFNTIGhhcyBhbiBpby1iaXRtYXAtb2Zmc2V0IGZpZWxkLiAq LwotICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih0ci5hdHRyLmZpZWxkcy50eXBlICE9IDB4Yiwg RVhDX0dQLCAwKTsKKyAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodHIuYXR0ci5maWVsZHMudHlw ZSAhPSAweGIsIFRSQVBfZ3BfZmF1bHQsIDApOwogCiAgICAgc3dpdGNoICggcmMgPSByZWFkX3Vs b25nKHg4Nl9zZWdfdHIsIDB4NjYsICZpb2JtcCwgMiwgY3R4dCwgb3BzKSApCiAgICAgewpAQCAt MTIwMiw3ICsxMTgxLDcgQEAgc3RhdGljIGludCBpb3BvcnRfYWNjZXNzX2NoZWNrKAogICAgICAg ICBicmVhazsKIAogICAgIGNhc2UgWDg2RU1VTF9FWENFUFRJT046Ci0gICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZighY3R4dC0+ZXZlbnRfcGVuZGluZywgRVhDX0dQLCAwKTsKKyAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFjdHh0LT5ldmVudF9wZW5kaW5nLCBUUkFQX2dwX2ZhdWx0 LCAwKTsKICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KIAogICAgIGRlZmF1bHQ6CkBAIC0xMjE3 LDcgKzExOTYsNyBAQCBzdGF0aWMgaW50IGlvcG9ydF9hY2Nlc3NfY2hlY2soCiAgICAgICAgIGJy ZWFrOwogCiAgICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKLSAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uX2lmKCFjdHh0LT5ldmVudF9wZW5kaW5nLCBFWENfR1AsIDApOworICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoIWN0eHQtPmV2ZW50X3BlbmRpbmcsIFRSQVBfZ3BfZmF1bHQsIDAp OwogICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwogCiAgICAgZGVmYXVsdDoKQEAgLTEyMjUsNyAr MTIwNCw3IEBAIHN0YXRpYyBpbnQgaW9wb3J0X2FjY2Vzc19jaGVjaygKICAgICB9CiAKICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYoaW9ibXAgJiAoKCgxIDw8IGJ5dGVzKSAtIDEpIDw8IChmaXJz dF9wb3J0ICYgNykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfR1AsIDApOworICAg ICAgICAgICAgICAgICAgICAgICAgICBUUkFQX2dwX2ZhdWx0LCAwKTsKIAogIGRvbmU6CiAgICAg cmV0dXJuIHJjOwpAQCAtMTMyMiw3ICsxMzAxLDcgQEAgc3RhdGljIGJvb2wgdmNwdV9oYXMoCiAj ZGVmaW5lIHZjcHVfaGFzX3JkcGlkKCkgICAgICAgdmNwdV9oYXMoICAgICAgICAgNywgRUNYLCAy MiwgY3R4dCwgb3BzKQogCiAjZGVmaW5lIHZjcHVfbXVzdF9oYXZlKGZlYXQpIFwKLSAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoIXZjcHVfaGFzXyMjZmVhdCgpLCBFWENfVUQpCisgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKCF2Y3B1X2hhc18jI2ZlYXQoKSwgVFJBUF9pbnZhbGlkX29wKQogCiAj aWZkZWYgX19YRU5fXwogLyoKQEAgLTEzMzIsNyArMTMxMSw3IEBAIHN0YXRpYyBib29sIHZjcHVf aGFzKAogICogdGhlIGFjdHVhbCBvcGVyYXRpb24uCiAgKi8KICNkZWZpbmUgaG9zdF9hbmRfdmNw dV9tdXN0X2hhdmUoZmVhdCkgKHsgXAotICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighY3B1X2hh c18jI2ZlYXQsIEVYQ19VRCk7IFwKKyAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWNwdV9oYXNf IyNmZWF0LCBUUkFQX2ludmFsaWRfb3ApOyBcCiAgICAgdmNwdV9tdXN0X2hhdmUoZmVhdCk7IFwK IH0pCiAjZWxzZQpAQCAtMTM5OCw3ICsxMzc3LDcgQEAgcHJvdG1vZGVfbG9hZF9zZWcoCiAgICAg dWludDhfdCBkcGwsIHJwbDsKICAgICBpbnQgY3BsID0gZ2V0X2NwbChjdHh0LCBvcHMpOwogICAg IHVpbnQzMl90IGFfZmxhZyA9IDB4MTAwOwotICAgIGludCByYywgZmF1bHRfdHlwZSA9IEVYQ19H UDsKKyAgICBpbnQgcmMsIGZhdWx0X3R5cGUgPSBUUkFQX2dwX2ZhdWx0OwogCiAgICAgaWYgKCBj cGwgPCAwICkKICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwpAQCAtMTUyNyw3 ICsxNTA2LDcgQEAgcHJvdG1vZGVfbG9hZF9zZWcoCiAgICAgLyogU2VnbWVudCBwcmVzZW50IGlu IG1lbW9yeT8gKi8KICAgICBpZiAoICEoZGVzYy5iICYgKDEgPDwgMTUpKSAmJiBzZWcgIT0geDg2 X3NlZ19ub25lICkKICAgICB7Ci0gICAgICAgIGZhdWx0X3R5cGUgPSBzZWcgIT0geDg2X3NlZ19z cyA/IEVYQ19OUCA6IEVYQ19TUzsKKyAgICAgICAgZmF1bHRfdHlwZSA9IHNlZyAhPSB4ODZfc2Vn X3NzID8gVFJBUF9ub19zZWdtZW50IDogVFJBUF9zdGFja19lcnJvcjsKICAgICAgICAgZ290byBy YWlzZV9leG47CiAgICAgfQogCkBAIC0xNzIwLDcgKzE2OTksNyBAQCBzdGF0aWMgaW50IGluamVj dF9zd2ludChlbnVtIHg4Nl9zd2ludF90eXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKIHsKLSAgICBpbnQgcmMsIGVycm9y X2NvZGUsIGZhdWx0X3R5cGUgPSBFWENfR1A7CisgICAgaW50IHJjLCBlcnJvcl9jb2RlLCBmYXVs dF90eXBlID0gVFJBUF9ncF9mYXVsdDsKIAogICAgIC8qCiAgICAgICogV2l0aG91dCBoYXJkd2Fy ZSBzdXBwb3J0LCBpbmplY3Rpbmcgc29mdHdhcmUgaW50ZXJydXB0cy9leGNlcHRpb25zIGlzCkBA IC0xODM0LDcgKzE4MTMsNyBAQCBzdGF0aWMgaW50IGluamVjdF9zd2ludChlbnVtIHg4Nl9zd2lu dF90eXBlIHR5cGUsCiAgICAgICAgICAgICAvKiBJcyB0aGlzIGVudHJ5IHByZXNlbnQ/ICovCiAg ICAgICAgICAgICBpZiAoICEoaWR0ZS5iICYgKDF1IDw8IDE1KSkgKQogICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgIGZhdWx0X3R5cGUgPSBFWENfTlA7CisgICAgICAgICAgICAgICAgZmF1 bHRfdHlwZSA9IFRSQVBfbm9fc2VnbWVudDsKICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX2V4 bjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk4OSw3ICsxOTY4LDcgQEAgeDg2X2Rl Y29kZV9vbmVieXRlKAogCiAgICAgY2FzZSAweDlhOiAvKiBjYWxsIChmYXIsIGFic29sdXRlKSAq LwogICAgIGNhc2UgMHhlYTogLyogam1wIChmYXIsIGFic29sdXRlKSAqLwotICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQpOworICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBUUkFQX2ludmFsaWRfb3ApOwogCiAgICAgICAg IGltbTEgPSBpbnNuX2ZldGNoX2J5dGVzKG9wX2J5dGVzKTsKICAgICAgICAgaW1tMiA9IGluc25f ZmV0Y2hfdHlwZSh1aW50MTZfdCk7CkBAIC0yMDgzLDcgKzIwNjIsNyBAQCB4ODZfZGVjb2RlX3R3 b2J5dGUoCiAgICAgICAgIH0KICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgICAgY2FzZSAw eDIxOiBjYXNlIDB4MjM6IC8qIG1vdiB0by9mcm9tIGRyICovCi0gICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCB8fCBlYS50eXBlICE9IE9QX1JFRywgRVhDX1VEKTsKKyAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4IHx8IGVhLnR5cGUgIT0gT1Bf UkVHLCBUUkFQX2ludmFsaWRfb3ApOwogICAgICAgICBvcF9ieXRlcyA9IG1vZGVfNjRiaXQoKSA/ IDggOiA0OwogICAgICAgICBicmVhazsKIApAQCAtMjI3NCw3ICsyMjUzLDcgQEAgeDg2X2RlY29k ZSgKICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgICAgIGNhc2Ug ODoKICAgICAgICAgICAgICAgICAvKiBWRVggLyBYT1AgLyBFVkVYICovCi0gICAgICAgICAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHJleF9wcmVmaXggfHwgdmV4LnBmeCwgRVhDX1VEKTsK KyAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYocmV4X3ByZWZpeCB8fCB2ZXgu cGZ4LCBUUkFQX2ludmFsaWRfb3ApOwogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAg ICAgICogV2l0aCBvcGVyYW5kIHNpemUgb3ZlcnJpZGUgZGlzYWxsb3dlZCAoc2VlIGFib3ZlKSwg b3BfYnl0ZXMKICAgICAgICAgICAgICAgICAgKiBzaG91bGQgbm90IGhhdmUgY2hhbmdlZCBmcm9t IGl0cyBkZWZhdWx0LgpAQCAtMjY2NSw3ICsyNjQ0LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgZCA9 IHN0YXRlLmRlc2M7CiAjZGVmaW5lIHN0YXRlICgmc3RhdGUpCiAKLSAgICBnZW5lcmF0ZV9leGNl cHRpb25faWYoc3RhdGUtPm5vdF82NGJpdCAmJiBtb2RlXzY0Yml0KCksIEVYQ19VRCk7CisgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKHN0YXRlLT5ub3RfNjRiaXQgJiYgbW9kZV82NGJpdCgpLCBU UkFQX2ludmFsaWRfb3ApOwogCiAgICAgaWYgKCBlYS50eXBlID09IE9QX1JFRyApCiAgICAgICAg IGVhLnJlZyA9IGRlY29kZV9yZWdpc3Rlcihtb2RybV9ybSwgJl9yZWdzLApAQCAtMjc0NCwxMiAr MjcyMywxMiBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICogQ01QWENIR3s4LDE2fUIgKE1PViBD Um4gaXMgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUpLgogICAgICAgICAgKi8KICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4ICYmIChleHQgIT0gZXh0XzBmIHx8IGIgIT0g MHhjNyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAgZHN0LnR5cGUg PSBPUF9OT05FOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRHN0UmVnOgotICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIEVYQ19VRCk7CisgICAgICAgIGdlbmVy YXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgVFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAg ZHN0LnR5cGUgPSBPUF9SRUc7CiAgICAgICAgIGlmICggZCAmIEJ5dGVPcCApCiAgICAgICAgIHsK QEAgLTI4MDQsNyArMjc4Myw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBkc3QgPSBlYTsKICAg ICAgICAgaWYgKCBkc3QudHlwZSA9PSBPUF9SRUcgKQogICAgICAgICB7Ci0gICAgICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIEVYQ19VRCk7CisgICAgICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIFRSQVBfaW52YWxpZF9vcCk7CiAgICAg ICAgICAgICBzd2l0Y2ggKCBkc3QuYnl0ZXMgKQogICAgICAgICAgICAgewogICAgICAgICAgICAg Y2FzZSAxOiBkc3QudmFsID0gKih1aW50OF90ICAqKWRzdC5yZWc7IGJyZWFrOwpAQCAtMjgyNCw3 ICsyODAzLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAg ICAgICAgLyogTG9jayBwcmVmaXggaXMgYWxsb3dlZCBvbmx5IG9uIFJNVyBpbnN0cnVjdGlvbnMu ICovCi0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIEVYQ19V RCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIFRSQVBf aW52YWxpZF9vcCk7CiAgICAgICAgICAgICBmYWlsX2lmKCFvcHMtPndyaXRlKTsKICAgICAgICAg fQogICAgICAgICBicmVhazsKQEAgLTI4NjYsNyArMjg0NSw3IEBAIHg4Nl9lbXVsYXRlKAogICAg ICAgICBicmVhazsKIAogICAgIGNhc2UgMHgzOCAuLi4gMHgzZDogY21wOiAvKiBjbXAgKi8KLSAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4LCBFWENfVUQpOworICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIFRSQVBfaW52YWxpZF9vcCk7CiAg ICAgICAgIGVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIHNyYywgZHN0LCBfcmVncy5fZWZsYWdzKTsK ICAgICAgICAgZHN0LnR5cGUgPSBPUF9OT05FOwogICAgICAgICBicmVhazsKQEAgLTMwMDMsMTQg KzI5ODIsMTQgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSAweDYyOiAvKiBib3VuZCAqLyB7CiAg ICAgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3ZhbDI7CiAgICAgICAgIGludCBsYiwgdWIsIGlkeDsK LSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHNyYy50eXBlICE9IE9QX01FTSwgRVhDX1VE KTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHNyYy50eXBlICE9IE9QX01FTSwgVFJB UF9pbnZhbGlkX29wKTsKICAgICAgICAgaWYgKCAocmMgPSByZWFkX3Vsb25nKHNyYy5tZW0uc2Vn LCBzcmMubWVtLm9mZiArIG9wX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnNyY192YWwyLCBvcF9ieXRlcywgY3R4dCwgb3BzKSkgKQogICAgICAgICAgICAgZ290byBkb25l OwogICAgICAgICB1YiAgPSAob3BfYnl0ZXMgPT0gMikgPyAoaW50MTZfdClzcmNfdmFsMiA6IChp bnQzMl90KXNyY192YWwyOwogICAgICAgICBsYiAgPSAob3BfYnl0ZXMgPT0gMikgPyAoaW50MTZf dClzcmMudmFsICA6IChpbnQzMl90KXNyYy52YWw7CiAgICAgICAgIGlkeCA9IChvcF9ieXRlcyA9 PSAyKSA/IChpbnQxNl90KWRzdC52YWwgIDogKGludDMyX3QpZHN0LnZhbDsKLSAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKChpZHggPCBsYikgfHwgKGlkeCA+IHViKSwgRVhDX0JSKTsKKyAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChpZHggPCBsYikgfHwgKGlkeCA+IHViKSwgVFJB UF9ib3VuZHMpOwogICAgICAgICBkc3QudHlwZSA9IE9QX05PTkU7CiAgICAgICAgIGJyZWFrOwog ICAgIH0KQEAgLTMwNDgsNyArMzAyNyw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgICAg IF9yZWdzLl9lZmxhZ3MgJj0gflg4Nl9FRkxBR1NfWkY7CiAgICAgICAgICAgICAgICAgZHN0LnR5 cGUgPSBPUF9OT05FOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMpLCBFWENfVUQpOworICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMpLCBUUkFQX2ludmFsaWRf b3ApOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMjEyLDcgKzMxOTEsNyBAQCB4 ODZfZW11bGF0ZSgKICAgICAgICAgICAgIGRzdC50eXBlID0gT1BfTk9ORTsKICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigobW9kcm1f cmVnICYgNykgIT0gMCwgRVhDX1VEKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCht b2RybV9yZWcgJiA3KSAhPSAwLCBUUkFQX2ludmFsaWRfb3ApOwogICAgIGNhc2UgMHg4OCAuLi4g MHg4YjogLyogbW92ICovCiAgICAgY2FzZSAweGEwIC4uLiAweGExOiAvKiBtb3YgbWVtLm9mZnMs eyVhbCwlYXgsJWVheCwlcmF4fSAqLwogICAgIGNhc2UgMHhhMiAuLi4gMHhhMzogLyogbW92IHsl YWwsJWF4LCVlYXgsJXJheH0sbWVtLm9mZnMgKi8KQEAgLTMyMjEsNyArMzIwMCw3IEBAIHg4Nl9l bXVsYXRlKAogCiAgICAgY2FzZSAweDhjOiAvKiBtb3YgU3JlZyxyL20gKi8KICAgICAgICAgc2Vn ID0gbW9kcm1fcmVnICYgNzsgLyogUkVYLlIgaXMgaWdub3JlZC4gKi8KLSAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKCFpc194ODZfdXNlcl9zZWdtZW50KHNlZyksIEVYQ19VRCk7CisgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaXNfeDg2X3VzZXJfc2VnbWVudChzZWcpLCBUUkFQ X2ludmFsaWRfb3ApOwogICAgIHN0b3JlX3NlbGVjdG9yOgogICAgICAgICBmYWlsX2lmKG9wcy0+ cmVhZF9zZWdtZW50ID09IE5VTEwpOwogICAgICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZF9zZWdt ZW50KHNlZywgJnNyZWcsIGN0eHQpKSAhPSAwICkKQEAgLTMyMzQsNyArMzIxMyw3IEBAIHg4Nl9l bXVsYXRlKAogICAgIGNhc2UgMHg4ZTogLyogbW92IHIvbSxTcmVnICovCiAgICAgICAgIHNlZyA9 IG1vZHJtX3JlZyAmIDc7IC8qIFJFWC5SIGlzIGlnbm9yZWQuICovCiAgICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZighaXNfeDg2X3VzZXJfc2VnbWVudChzZWcpIHx8Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWcgPT0geDg2X3NlZ19jcywgRVhDX1VEKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlZyA9PSB4ODZfc2VnX2NzLCBUUkFQX2ludmFsaWRfb3ApOwog ICAgICAgICBpZiAoIChyYyA9IGxvYWRfc2VnKHNlZywgc3JjLnZhbCwgMCwgTlVMTCwgY3R4dCwg b3BzKSkgIT0gMCApCiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIGlmICggc2VnID09 IHg4Nl9zZWdfc3MgKQpAQCAtMzI0MywxMiArMzIyMiwxMiBAQCB4ODZfZW11bGF0ZSgKICAgICAg ICAgYnJlYWs7CiAKICAgICBjYXNlIDB4OGQ6IC8qIGxlYSAqLwotICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCk7CisgICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwgVFJBUF9pbnZhbGlkX29wKTsKICAgICAg ICAgZHN0LnZhbCA9IGVhLm1lbS5vZmY7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDhm OiAvKiBwb3AgKHNvbGUgbWVtYmVyIG9mIEdycDFhKSAqLwotICAgICAgICBnZW5lcmF0ZV9leGNl cHRpb25faWYoKG1vZHJtX3JlZyAmIDcpICE9IDAsIEVYQ19VRCk7CisgICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZigobW9kcm1fcmVnICYgNykgIT0gMCwgVFJBUF9pbnZhbGlkX29wKTsKICAg ICAgICAgLyogNjQtYml0IG1vZGU6IFBPUCBkZWZhdWx0cyB0byBhIDY0LWJpdCBvcGVyYW5kLiAq LwogICAgICAgICBpZiAoIG1vZGVfNjRiaXQoKSAmJiAoZHN0LmJ5dGVzID09IDQpICkKICAgICAg ICAgICAgIGRzdC5ieXRlcyA9IDg7CkBAIC0zMzMwLDcgKzMzMDksNyBAQCB4ODZfZW11bGF0ZSgK ICAgICAgICAgICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCiAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZighKGNyNCAmIFg4Nl9DUjRfVk1FKSwgRVhDX0dQLCAwKTsKKyAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighKGNyNCAmIFg4Nl9DUjRfVk1FKSwgVFJBUF9ncF9mYXVs dCwgMCk7CiAgICAgICAgICAgICBzcmMudmFsID0gKF9yZWdzLmZsYWdzICYgflg4Nl9FRkxBR1Nf SUYpIHwgWDg2X0VGTEFHU19JT1BMOwogICAgICAgICAgICAgaWYgKCBfcmVncy5fZWZsYWdzICYg WDg2X0VGTEFHU19WSUYgKQogICAgICAgICAgICAgICAgIHNyYy52YWwgfD0gWDg2X0VGTEFHU19J RjsKQEAgLTMzNTUsNyArMzMzNCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIShjcjQgJiBYODZfQ1I0X1ZN RSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFTS19FWFRSKF9y ZWdzLl9lZmxhZ3MsIFg4Nl9FRkxBR1NfSU9QTCkgIT0gMywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRVhDX0dQLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVFJBUF9ncF9mYXVsdCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg ICBtYXNrIHw9IFg4Nl9FRkxBR1NfSU9QTDsKICAgICAgICAgICAgIGlmICggIW1vZGVfaW9wbCgp ICkKQEAgLTMzNzUsNyArMzM1NCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgICAgIGlm ICggZHN0LnZhbCAmIFg4Nl9FRkxBR1NfSUYgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKF9yZWdzLl9lZmxhZ3MgJiBYODZfRUZM QUdTX1ZJUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19H UCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFQX2dw X2ZhdWx0LCAwKTsKICAgICAgICAgICAgICAgICAgICAgZHN0LnZhbCB8PSBYODZfRUZMQUdTX1ZJ RjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzU1Myw3ICsz NTMyLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSAweGM1OiAvKiBsZHMgKi8KICAgICAgICAg c2VnID0gKGIgJiAxKSAqIDM7IC8qIGVzID0gMCwgZHMgPSAzICovCiAgICAgbGVzOgotICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYoc3JjLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQpOworICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoc3JjLnR5cGUgIT0gT1BfTUVNLCBUUkFQX2ludmFs aWRfb3ApOwogICAgICAgICBpZiAoIChyYyA9IHJlYWRfdWxvbmcoc3JjLm1lbS5zZWcsIHNyYy5t ZW0ub2ZmICsgc3JjLmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRzdC52 YWwsIDIsIGN0eHQsIG9wcykpICE9IFg4NkVNVUxfT0tBWSApCiAgICAgICAgICAgICBnb3RvIGRv bmU7CkBAIC0zNjI1LDcgKzM2MDQsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgYnJlYWs7CiAK ICAgICBjYXNlIDB4Y2M6IC8qIGludDMgKi8KLSAgICAgICAgc3JjLnZhbCA9IEVYQ19CUDsKKyAg ICAgICAgc3JjLnZhbCA9IFRSQVBfaW50MzsKICAgICAgICAgc3dpbnRfdHlwZSA9IHg4Nl9zd2lu dF9pbnQzOwogICAgICAgICBnb3RvIHN3aW50OwogCkBAIC0zNjQwLDcgKzM2MTksNyBAQCB4ODZf ZW11bGF0ZSgKICAgICBjYXNlIDB4Y2U6IC8qIGludG8gKi8KICAgICAgICAgaWYgKCAhKF9yZWdz Ll9lZmxhZ3MgJiBYODZfRUZMQUdTX09GKSApCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg c3JjLnZhbCA9IEVYQ19PRjsKKyAgICAgICAgc3JjLnZhbCA9IFRSQVBfb3ZlcmZsb3c7CiAgICAg ICAgIHN3aW50X3R5cGUgPSB4ODZfc3dpbnRfaW50bzsKICAgICAgICAgZ290byBzd2ludDsKIApA QCAtMzY4OSw3ICszNjY4LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIHsKICAgICAgICAgICAg IHVpbnQ4X3QgYWwgPSBfcmVncy5hbDsKIAotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKCFiYXNlLCBFWENfREUpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFi YXNlLCBUUkFQX2RpdmlkZV9lcnJvcik7CiAgICAgICAgICAgICBfcmVncy5heCA9ICgoYWwgLyBi YXNlKSA8PCA4KSB8IChhbCAlIGJhc2UpOwogICAgICAgICB9CiAgICAgICAgIF9yZWdzLl9lZmxh Z3MgJj0gfihYODZfRUZMQUdTX1NGfFg4Nl9FRkxBR1NfWkZ8WDg2X0VGTEFHU19QRik7CkBAIC0z ODA1LDcgKzM3ODQsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIGVtdWxhdGVfZnB1X2lu c25fc3R1YigweGQ5LCBtb2RybSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs dDoKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwg RVhDX1VEKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9Q X01FTSwgVFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAgICAgIGRzdCA9IGVhOwogICAgICAgICAg ICAgc3dpdGNoICggbW9kcm1fcmVnICYgNyApCiAgICAgICAgICAgICB7CkBAIC0zODQwLDcgKzM4 MTksNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICBkc3QuYnl0ZXMgPSAyOwogICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb24oRVhDX1VEKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb24oVFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8q CiAgICAgICAgICAgICAgKiBDb250cm9sIGluc3RydWN0aW9ucyBjYW4ndCByYWlzZSBGUFUgZXhj ZXB0aW9ucywgc28gd2UgbmVlZApAQCAtMzg2OSw3ICszODQ4LDcgQEAgeDg2X2VtdWxhdGUoCiAg ICAgICAgICAgICBlbXVsYXRlX2ZwdV9pbnNuX3N0dWIoMHhkYSwgbW9kcm0pOwogICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRp b25faWYoZWEudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0sIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAg ICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZChlYS5tZW0uc2VnLCBlYS5tZW0ub2ZmLCAmc3JjLnZh bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIGN0eHQpKSAhPSBYODZFTVVM X09LQVkgKQogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTM5MjcsNyArMzkwNiw3IEBA IHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgZW11bGF0ZV9mcHVfaW5zbl9zdHViKDB4ZGIsIG1v ZHJtKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQpOworICAgICAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBUUkFQX2ludmFs aWRfb3ApOwogICAgICAgICAgICAgZHN0ID0gZWE7CiAgICAgICAgICAgICBzd2l0Y2ggKCBtb2Ry bV9yZWcgJiA3ICkKICAgICAgICAgICAgIHsKQEAgLTM5NjgsNyArMzk0Nyw3IEBAIHg4Nl9lbXVs YXRlKAogICAgICAgICAgICAgICAgIGRzdC50eXBlID0gT1BfTk9ORTsKICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uKEVYQ19VRCk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uKFRS QVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIGRzdC50eXBl ID09IE9QX01FTSAmJiAhZnB1X2NoZWNrX3dyaXRlKCkgKQogICAgICAgICAgICAgICAgIGRzdC50 eXBlID0gT1BfTk9ORTsKQEAgLTQwNDEsNyArNDAyMCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAg ICAgICAgZW11bGF0ZV9mcHVfaW5zbl9zdHViKDB4ZGQsIG1vZHJtKTsKICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lm KGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBUUkFQX2ludmFsaWRfb3ApOwogICAgICAgICAgICAg ZHN0ID0gZWE7CiAgICAgICAgICAgICBzd2l0Y2ggKCBtb2RybV9yZWcgJiA3ICkKICAgICAgICAg ICAgIHsKQEAgLTQwNzMsNyArNDA1Miw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgICAg IGRzdC5ieXRlcyA9IDI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh dWx0OgotICAgICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbihFWENfVUQpOworICAgICAg ICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbihUUkFQX2ludmFsaWRfb3ApOwogICAgICAgICAg ICAgfQogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIENvbnRyb2wgaW5zdHJ1Y3Rpb25z IGNhbid0IHJhaXNlIEZQVSBleGNlcHRpb25zLCBzbyB3ZSBuZWVkCkBAIC00MTAyLDcgKzQwODEs NyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIGVtdWxhdGVfZnB1X2luc25fc3R1YigweGRl LCBtb2RybSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwgRVhDX1VEKTsKKyAg ICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwgVFJBUF9p bnZhbGlkX29wKTsKICAgICAgICAgICAgIHN3aXRjaCAoIG1vZHJtX3JlZyAmIDcgKQogICAgICAg ICAgICAgewogICAgICAgICAgICAgY2FzZSAwOiAvKiBmaWFkZCBtMTZpICovCkBAIC00MTU4LDcg KzQxMzcsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIGVtdWxhdGVfZnB1X2luc25fc3R1 YigweGRmLCBtb2RybSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAg ICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwgRVhDX1VE KTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSwg VFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAgICAgIGRzdCA9IGVhOwogICAgICAgICAgICAgc3dp dGNoICggbW9kcm1fcmVnICYgNyApCiAgICAgICAgICAgICB7CkBAIC00Mjk2LDEyICs0Mjc1LDEy IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHhmMTogLyogaW50 MSAoaWNlYnApICovCi0gICAgICAgIHNyYy52YWwgPSBFWENfREI7CisgICAgICAgIHNyYy52YWwg PSBUUkFQX2RlYnVnOwogICAgICAgICBzd2ludF90eXBlID0geDg2X3N3aW50X2ljZWJwOwogICAg ICAgICBnb3RvIHN3aW50OwogCiAgICAgY2FzZSAweGY0OiAvKiBobHQgKi8KLSAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIEVYQ19HUCwgMCk7CisgICAgICAgIGdl bmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBUUkFQX2dwX2ZhdWx0LCAwKTsKICAg ICAgICAgY3R4dC0+cmV0aXJlLmhsdCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCkBAIC00MzE3 LDcgKzQyOTYsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdVsy XSwgdjsKIAogICAgICAgICBjYXNlIDAgLi4uIDE6IC8qIHRlc3QgKi8KLSAgICAgICAgICAgIGdl bmVyYXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgRVhDX1VEKTsKKyAgICAgICAgICAgIGdl bmVyYXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgVFJBUF9pbnZhbGlkX29wKTsKICAgICAg ICAgICAgIGdvdG8gdGVzdDsKICAgICAgICAgY2FzZSAyOiAvKiBub3QgKi8KICAgICAgICAgICAg IGRzdC52YWwgPSB+ZHN0LnZhbDsKQEAgLTQ0MTIsNyArNDM5MSw3IEBAIHg4Nl9lbXVsYXRlKAog ICAgICAgICAgICAgICAgIHYgICAgPSAodWludDhfdClzcmMudmFsOwogICAgICAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigKICAgICAgICAgICAgICAgICAgICAgZGl2X2RibCh1LCB2 KSB8fCAoKHVpbnQ4X3QpdVswXSAhPSAodWludDE2X3QpdVswXSksCi0gICAgICAgICAgICAgICAg ICAgIEVYQ19ERSk7CisgICAgICAgICAgICAgICAgICAgIFRSQVBfZGl2aWRlX2Vycm9yKTsKICAg ICAgICAgICAgICAgICBkc3QudmFsID0gKHVpbnQ4X3QpdVswXTsKICAgICAgICAgICAgICAgICBf cmVncy5haCA9IHVbMV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NDIyLDcgKzQ0MDEs NyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICB2ICAgID0gKHVpbnQxNl90KXNyYy52 YWw7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKAogICAgICAgICAgICAg ICAgICAgICBkaXZfZGJsKHUsIHYpIHx8ICgodWludDE2X3QpdVswXSAhPSAodWludDMyX3QpdVsw XSksCi0gICAgICAgICAgICAgICAgICAgIEVYQ19ERSk7CisgICAgICAgICAgICAgICAgICAgIFRS QVBfZGl2aWRlX2Vycm9yKTsKICAgICAgICAgICAgICAgICBkc3QudmFsID0gKHVpbnQxNl90KXVb MF07CiAgICAgICAgICAgICAgICAgX3JlZ3MuZHggPSB1WzFdOwogICAgICAgICAgICAgICAgIGJy ZWFrOwpAQCAtNDQzMyw3ICs0NDEyLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAgICAg diAgICA9ICh1aW50MzJfdClzcmMudmFsOwogICAgICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZigKICAgICAgICAgICAgICAgICAgICAgZGl2X2RibCh1LCB2KSB8fCAoKHVpbnQzMl90 KXVbMF0gIT0gdVswXSksCi0gICAgICAgICAgICAgICAgICAgIEVYQ19ERSk7CisgICAgICAgICAg ICAgICAgICAgIFRSQVBfZGl2aWRlX2Vycm9yKTsKICAgICAgICAgICAgICAgICBkc3QudmFsICAg PSAodWludDMyX3QpdVswXTsKICAgICAgICAgICAgICAgICBfcmVncy5yZHggPSAodWludDMyX3Qp dVsxXTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ0NDIsNyArNDQyMSw3IEBAIHg4Nl9l bXVsYXRlKAogICAgICAgICAgICAgICAgIHVbMF0gPSBfcmVncy5yKGF4KTsKICAgICAgICAgICAg ICAgICB1WzFdID0gX3JlZ3MucihkeCk7CiAgICAgICAgICAgICAgICAgdiAgICA9IHNyYy52YWw7 Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGRpdl9kYmwodSwgdiksIEVY Q19ERSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGRpdl9kYmwodSwg diksIFRSQVBfZGl2aWRlX2Vycm9yKTsKICAgICAgICAgICAgICAgICBkc3QudmFsICAgICA9IHVb MF07CiAgICAgICAgICAgICAgICAgX3JlZ3MucihkeCkgPSB1WzFdOwogICAgICAgICAgICAgICAg IGJyZWFrOwpAQCAtNDQ1Nyw3ICs0NDM2LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAg ICAgdiAgICA9IChpbnQ4X3Qpc3JjLnZhbDsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNl cHRpb25faWYoCiAgICAgICAgICAgICAgICAgICAgIGlkaXZfZGJsKHUsIHYpIHx8ICgoaW50OF90 KXVbMF0gIT0gKGludDE2X3QpdVswXSksCi0gICAgICAgICAgICAgICAgICAgIEVYQ19ERSk7Cisg ICAgICAgICAgICAgICAgICAgIFRSQVBfZGl2aWRlX2Vycm9yKTsKICAgICAgICAgICAgICAgICBk c3QudmFsID0gKGludDhfdCl1WzBdOwogICAgICAgICAgICAgICAgIF9yZWdzLmFoID0gdVsxXTsK ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ0NjcsNyArNDQ0Niw3IEBAIHg4Nl9lbXVsYXRl KAogICAgICAgICAgICAgICAgIHYgICAgPSAoaW50MTZfdClzcmMudmFsOwogICAgICAgICAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigKICAgICAgICAgICAgICAgICAgICAgaWRpdl9kYmwo dSwgdikgfHwgKChpbnQxNl90KXVbMF0gIT0gKGludDMyX3QpdVswXSksCi0gICAgICAgICAgICAg ICAgICAgIEVYQ19ERSk7CisgICAgICAgICAgICAgICAgICAgIFRSQVBfZGl2aWRlX2Vycm9yKTsK ICAgICAgICAgICAgICAgICBkc3QudmFsID0gKGludDE2X3QpdVswXTsKICAgICAgICAgICAgICAg ICBfcmVncy5keCA9IHVbMV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NDc4LDcgKzQ0 NTcsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICB2ICAgID0gKGludDMyX3Qpc3Jj LnZhbDsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoCiAgICAgICAgICAg ICAgICAgICAgIGlkaXZfZGJsKHUsIHYpIHx8ICgoaW50MzJfdCl1WzBdICE9IHVbMF0pLAotICAg ICAgICAgICAgICAgICAgICBFWENfREUpOworICAgICAgICAgICAgICAgICAgICBUUkFQX2Rpdmlk ZV9lcnJvcik7CiAgICAgICAgICAgICAgICAgZHN0LnZhbCAgID0gKGludDMyX3QpdVswXTsKICAg ICAgICAgICAgICAgICBfcmVncy5yZHggPSAodWludDMyX3QpdVsxXTsKICAgICAgICAgICAgICAg ICBicmVhazsKQEAgLTQ0ODcsNyArNDQ2Niw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAg ICAgIHVbMF0gPSBfcmVncy5yKGF4KTsKICAgICAgICAgICAgICAgICB1WzFdID0gX3JlZ3Mucihk eCk7CiAgICAgICAgICAgICAgICAgdiAgICA9IHNyYy52YWw7Ci0gICAgICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKGlkaXZfZGJsKHUsIHYpLCBFWENfREUpOworICAgICAgICAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihpZGl2X2RibCh1LCB2KSwgVFJBUF9kaXZpZGVfZXJy b3IpOwogICAgICAgICAgICAgICAgIGRzdC52YWwgICAgID0gdVswXTsKICAgICAgICAgICAgICAg ICBfcmVncy5yKGR4KSA9IHVbMV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NTA5LDcg KzQ0ODgsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIF9yZWdzLl9lZmxhZ3MgJj0gflg4 Nl9FRkxBR1NfSUY7CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKCFtb2RlX3ZpZigpLCBFWENfR1AsIDApOworICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3ZpZigpLCBUUkFQX2dwX2ZhdWx0LCAwKTsKICAgICAg ICAgICAgIF9yZWdzLl9lZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVklGOwogICAgICAgICB9CiAgICAg ICAgIGJyZWFrOwpAQCAtNDUyNSw3ICs0NTA0LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIHsK ICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigoX3JlZ3MuX2VmbGFncyAmIFg4Nl9F RkxBR1NfVklQKSB8fAogCQkJCSAgIW1vZGVfdmlmKCksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRVhDX0dQLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUUkFQX2dwX2ZhdWx0LCAwKTsKICAgICAgICAgICAgIGlmICggIShfcmVncy5fZWZsYWdzICYg WDg2X0VGTEFHU19WSUYpICkKICAgICAgICAgICAgICAgICBjdHh0LT5yZXRpcmUuc3RpID0gdHJ1 ZTsKICAgICAgICAgICAgIF9yZWdzLl9lZmxhZ3MgfD0gWDg2X0VGTEFHU19WSUY7CkBAIC00NTQx LDcgKzQ1MjAsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4 ZmU6IC8qIEdycDQgKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcg JiA3KSA+PSAyLCBFWENfVUQpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKG1vZHJt X3JlZyAmIDcpID49IDIsIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgIC8qIEZhbGx0aHJvdWdo LiAqLwogICAgIGNhc2UgMHhmZjogLyogR3JwNSAqLwogICAgICAgICBzd2l0Y2ggKCBtb2RybV9y ZWcgJiA3ICkKQEAgLTQ1NjksNyArNDU0OCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgIGNhc2UgMzogLyogY2FsbCAoZmFyLCBhYnNvbHV0ZSBpbmRpcmVjdCkg Ki8KICAgICAgICAgY2FzZSA1OiAvKiBqbXAgKGZhciwgYWJzb2x1dGUgaW5kaXJlY3QpICovCi0g ICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoc3JjLnR5cGUgIT0gT1BfTUVNLCBFWENf VUQpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHNyYy50eXBlICE9IE9QX01F TSwgVFJBUF9pbnZhbGlkX29wKTsKIAogICAgICAgICAgICAgaWYgKCAocmMgPSByZWFkX3Vsb25n KHNyYy5tZW0uc2VnLCBzcmMubWVtLm9mZiArIG9wX2J5dGVzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZpbW0yLCAyLCBjdHh0LCBvcHMpKSApCkBAIC00NTgxLDIwICs0NTYw LDIwIEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBjYXNlIDY6IC8qIHB1c2ggKi8KICAgICAgICAg ICAgIGdvdG8gcHVzaDsKICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uKEVYQ19VRCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb24oVFJBUF9pbnZh bGlkX29wKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgWDg2RU1VTF9P UEMoMHgwZiwgMHgwMCk6IC8qIEdycDYgKi8KICAgICAgICAgc2VnID0gKG1vZHJtX3JlZyAmIDEp ID8geDg2X3NlZ190ciA6IHg4Nl9zZWdfbGR0cjsKLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMpLCBFWENfVUQpOworICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoIWluX3Byb3Rtb2RlKGN0eHQsIG9wcyksIFRSQVBfaW52YWxpZF9vcCk7CiAg ICAgICAgIHN3aXRjaCAoIG1vZHJtX3JlZyAmIDYgKQogICAgICAgICB7CiAgICAgICAgIGNhc2Ug MDogLyogc2xkdCAvIHN0ciAqLwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHVt aXBfYWN0aXZlKGN0eHQsIG9wcyksIEVYQ19HUCwgMCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYodW1pcF9hY3RpdmUoY3R4dCwgb3BzKSwgVFJBUF9ncF9mYXVsdCwgMCk7CiAg ICAgICAgICAgICBnb3RvIHN0b3JlX3NlbGVjdG9yOwogICAgICAgICBjYXNlIDI6IC8qIGxsZHQg LyBsdHIgKi8KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgp LCBFWENfR1AsIDApOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3Jp bmcwKCksIFRSQVBfZ3BfZmF1bHQsIDApOwogICAgICAgICAgICAgaWYgKCAocmMgPSBsb2FkX3Nl ZyhzZWcsIHNyYy52YWwsIDAsIE5VTEwsIGN0eHQsIG9wcykpICE9IDAgKQogICAgICAgICAgICAg ICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDYxMiw3ICs0NTkxLDcgQEAg eDg2X2VtdWxhdGUoCiAgICAgICAgICAgICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgogICAgICAg ICAgICAgICAgIGlmICggY3R4dC0+ZXZlbnRfcGVuZGluZyApCiAgICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY3R4dC0+ZXZlbnQudmVjdG9yID09IEVYQ19QRik7 CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdHh0LT5ldmVudC52ZWN0b3IgPT0gVFJBUF9w YWdlX2ZhdWx0KTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGdv dG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MDEsNyBAQCB4ODZfZW11 bGF0ZSgKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHRydWUsIEVYQ19VRCk7CisgICAg ICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodHJ1ZSwgVFJBUF9pbnZhbGlkX29wKTsKICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNDYzNSw3ICs0 NjE0LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGNhc2UgMHhjYTogLyogY2xhYyAqLwogICAg ICAgICBjYXNlIDB4Y2I6IC8qIHN0YWMgKi8KICAgICAgICAgICAgIHZjcHVfbXVzdF9oYXZlKHNt YXApOwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5wZnggfHwgIW1vZGVf cmluZzAoKSwgRVhDX1VEKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgu cGZ4IHx8ICFtb2RlX3JpbmcwKCksIFRSQVBfaW52YWxpZF9vcCk7CiAKICAgICAgICAgICAgIF9y ZWdzLl9lZmxhZ3MgJj0gflg4Nl9FRkxBR1NfQUM7CiAgICAgICAgICAgICBpZiAoIG1vZHJtID09 IDB4Y2IgKQpAQCAtNDY0NCw0MSArNDYyMyw0MSBAQCB4ODZfZW11bGF0ZSgKIAogI2lmZGVmIF9f WEVOX18KICAgICAgICAgY2FzZSAweGQxOiAvKiB4c2V0YnYgKi8KLSAgICAgICAgICAgIGdlbmVy YXRlX2V4Y2VwdGlvbl9pZih2ZXgucGZ4LCBFWENfVUQpOworICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKHZleC5wZngsIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAgICBpZiAo ICFvcHMtPnJlYWRfY3IgfHwgb3BzLT5yZWFkX2NyKDQsICZjcjQsIGN0eHQpICE9IFg4NkVNVUxf T0tBWSApCiAgICAgICAgICAgICAgICAgY3I0ID0gMDsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZighKGNyNCAmIFg4Nl9DUjRfT1NYU0FWRSksIEVYQ19VRCk7CisgICAgICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIShjcjQgJiBYODZfQ1I0X09TWFNBVkUpLCBUUkFQX2lu dmFsaWRfb3ApOwogICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3Jpbmcw KCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfeHNldGJ2KF9y ZWdzLl9lY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfcmVncy5fZWF4IHwgKF9yZWdzLnJkeCA8PCAzMikpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVYQ19HUCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVFJBUF9ncF9mYXVsdCwgMCk7CiAgICAgICAgICAgICBnb3RvIGNvbXBsZXRlX2luc247CiAj ZW5kaWYKIAogICAgICAgICBjYXNlIDB4ZDQ6IC8qIHZtZnVuYyAqLwotICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5wZngsIEVYQ19VRCk7CisgICAgICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYodmV4LnBmeCwgVFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAgICAgIGZh aWxfaWYoIW9wcy0+dm1mdW5jKTsKICAgICAgICAgICAgIGlmICggKHJjID0gb3BzLT52bWZ1bmMo Y3R4dCkpICE9IFg4NkVNVUxfT0tBWSApCiAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAg ICAgICAgICAgZ290byBjb21wbGV0ZV9pbnNuOwogCiAgICAgICAgIGNhc2UgMHhkNTogLyogeGVu ZCAqLwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5wZngsIEVYQ19VRCk7 Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIXZjcHVfaGFzX3J0bSgpLCBFWENf VUQpOwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZjcHVfaGFzX3J0bSgpLCBF WENfR1AsIDApOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5wZngsIFRS QVBfaW52YWxpZF9vcCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIXZjcHVf aGFzX3J0bSgpLCBUUkFQX2ludmFsaWRfb3ApOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKHZjcHVfaGFzX3J0bSgpLCBUUkFQX2dwX2ZhdWx0LCAwKTsKICAgICAgICAgICAgIGJy ZWFrOwogCiAgICAgICAgIGNhc2UgMHhkNjogLyogeHRlc3QgKi8KLSAgICAgICAgICAgIGdlbmVy YXRlX2V4Y2VwdGlvbl9pZih2ZXgucGZ4LCBFWENfVUQpOworICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKHZleC5wZngsIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoIXZjcHVfaGFzX3J0bSgpICYmICF2Y3B1X2hhc19obGUoKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAgICAvKiBOZWl0 aGVyIEhMRSBub3IgUlRNIGNhbiBiZSBhY3RpdmUgd2hlbiB3ZSBnZXQgaGVyZS4gKi8KICAgICAg ICAgICAgIF9yZWdzLl9lZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjsKICAgICAgICAgICAgIGdvdG8g Y29tcGxldGVfaW5zbjsKIAogICAgICAgICBjYXNlIDB4ZGY6IC8qIGludmxwZ2EgKi8KLSAgICAg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhD X1VEKTsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBF WENfR1AsIDApOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFpbl9wcm90bW9k ZShjdHh0LCBvcHMpLCBUUkFQX2ludmFsaWRfb3ApOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIFRSQVBfZ3BfZmF1bHQsIDApOwogICAgICAgICAgICAg ZmFpbF9pZihvcHMtPmludmxwZyA9PSBOVUxMKTsKICAgICAgICAgICAgIGlmICggKHJjID0gb3Bz LT5pbnZscGcoeDg2X3NlZ19ub25lLCB0cnVuY2F0ZV9lYShfcmVncy5yKGF4KSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQpKSApCkBAIC00NzA2LDcgKzQ2ODUsNyBA QCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICAgb3BzLT5jcHVpZCgxLCAwLCAmY3B1aWRf bGVhZiwgY3R4dCkgPT0gWDg2RU1VTF9PS0FZICkKICAgICAgICAgICAgICAgICBsaW1pdCA9ICgo Y3B1aWRfbGVhZi5iID4+IDgpICYgMHhmZikgKiA4OwogICAgICAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uX2lmKGxpbWl0IDwgc2l6ZW9mKGxvbmcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxpbWl0ICYgKGxpbWl0IC0gMSkpLCBFWENfVUQpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsaW1pdCAmIChsaW1pdCAtIDEpKSwgVFJBUF9pbnZhbGlk X29wKTsKICAgICAgICAgICAgIGJhc2UgJj0gfihsaW1pdCAtIDEpOwogICAgICAgICAgICAgaWYg KCBvcHMtPnJlcF9zdG9zICkKICAgICAgICAgICAgIHsKQEAgLTQ3NDEsOCArNDcyMCw4IEBAIHg4 Nl9lbXVsYXRlKAogICAgICAgICB7CiAgICAgICAgIGNhc2UgMDogLyogc2dkdCAqLwogICAgICAg ICBjYXNlIDE6IC8qIHNpZHQgKi8KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihl YS50eXBlICE9IE9QX01FTSwgRVhDX1VEKTsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZih1bWlwX2FjdGl2ZShjdHh0LCBvcHMpLCBFWENfR1AsIDApOworICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBUUkFQX2ludmFsaWRfb3ApOwor ICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHVtaXBfYWN0aXZlKGN0eHQsIG9wcyks IFRSQVBfZ3BfZmF1bHQsIDApOwogICAgICAgICAgICAgZmFpbF9pZighb3BzLT5yZWFkX3NlZ21l bnQgfHwgIW9wcy0+d3JpdGUpOwogICAgICAgICAgICAgaWYgKCAocmMgPSBvcHMtPnJlYWRfc2Vn bWVudChzZWcsICZzcmVnLCBjdHh0KSkgKQogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKQEAg LTQ3NjEsOCArNDc0MCw4IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgIGNhc2UgMjogLyogbGdkdCAqLwogICAgICAgICBjYXNlIDM6IC8qIGxpZHQgKi8KLSAgICAg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBFWENfR1AsIDApOwot ICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENf VUQpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIFRS QVBfZ3BfZmF1bHQsIDApOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5 cGUgIT0gT1BfTUVNLCBUUkFQX2ludmFsaWRfb3ApOwogICAgICAgICAgICAgZmFpbF9pZihvcHMt PndyaXRlX3NlZ21lbnQgPT0gTlVMTCk7CiAgICAgICAgICAgICBtZW1zZXQoJnNyZWcsIDAsIHNp emVvZihzcmVnKSk7CiAgICAgICAgICAgICBpZiAoIChyYyA9IHJlYWRfdWxvbmcoZWEubWVtLnNl ZywgZWEubWVtLm9mZiswLApAQCAtNDc3MCw3ICs0NzQ5LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAg ICAgICAgICAgICAgIChyYyA9IHJlYWRfdWxvbmcoZWEubWVtLnNlZywgZWEubWVtLm9mZisyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYXNlLCBtb2RlXzY0Yml0KCkgPyA4 IDogNCwgY3R4dCwgb3BzKSkgKQogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaXNfY2Fub25pY2FsX2FkZHJlc3MoYmFzZSksIEVY Q19HUCwgMCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWlzX2Nhbm9uaWNh bF9hZGRyZXNzKGJhc2UpLCBUUkFQX2dwX2ZhdWx0LCAwKTsKICAgICAgICAgICAgIHNyZWcuYmFz ZSA9IGJhc2U7CiAgICAgICAgICAgICBzcmVnLmxpbWl0ID0gbGltaXQ7CiAgICAgICAgICAgICBp ZiAoICFtb2RlXzY0Yml0KCkgJiYgb3BfYnl0ZXMgPT0gMiApCkBAIC00Nzc5LDcgKzQ3NTgsNyBA QCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgY2FzZSA0OiAvKiBzbXN3ICovCi0gICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYodW1pcF9hY3RpdmUoY3R4dCwgb3BzKSwgRVhDX0dQLCAwKTsKKyAgICAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih1bWlwX2FjdGl2ZShjdHh0LCBvcHMpLCBUUkFQX2dw X2ZhdWx0LCAwKTsKICAgICAgICAgICAgIGlmICggZWEudHlwZSA9PSBPUF9NRU0gKQogICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgIGZhaWxfaWYoIW9wcy0+d3JpdGUpOwpAQCAtNDc5Niw3 ICs0Nzc1LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGNhc2UgNjogLyogbG1zdyAqLwogICAg ICAgICAgICAgZmFpbF9pZihvcHMtPnJlYWRfY3IgPT0gTlVMTCk7CiAgICAgICAgICAgICBmYWls X2lmKG9wcy0+d3JpdGVfY3IgPT0gTlVMTCk7Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRp b25faWYoIW1vZGVfcmluZzAoKSwgRVhDX0dQLCAwKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBUUkFQX2dwX2ZhdWx0LCAwKTsKICAgICAgICAgICAg IGlmICggKHJjID0gb3BzLT5yZWFkX2NyKDAsICZjcjAsIGN0eHQpKSApCiAgICAgICAgICAgICAg ICAgZ290byBkb25lOwogICAgICAgICAgICAgaWYgKCBlYS50eXBlID09IE9QX1JFRyApCkBAIC00 ODEwLDggKzQ3ODksOCBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7 CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA3OiAvKiBpbnZscGcgKi8KLSAgICAg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBFWENfR1AsIDApOwot ICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENf VUQpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIFRS QVBfZ3BfZmF1bHQsIDApOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5 cGUgIT0gT1BfTUVNLCBUUkFQX2ludmFsaWRfb3ApOwogICAgICAgICAgICAgZmFpbF9pZihvcHMt PmludmxwZyA9PSBOVUxMKTsKICAgICAgICAgICAgIGlmICggKHJjID0gb3BzLT5pbnZscGcoZWEu bWVtLnNlZywgZWEubWVtLm9mZiwgY3R4dCkpICkKICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7 CkBAIC00ODIzLDcgKzQ4MDIsNyBAQCB4ODZfZW11bGF0ZSgKICAgICB9CiAKICAgICBjYXNlIFg4 NkVNVUxfT1BDKDB4MGYsIDB4MDIpOiAvKiBsYXIgKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMpLCBFWENfVUQpOworICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYoIWluX3Byb3Rtb2RlKGN0eHQsIG9wcyksIFRSQVBfaW52YWxpZF9vcCk7 CiAgICAgICAgIF9yZWdzLl9lZmxhZ3MgJj0gflg4Nl9FRkxBR1NfWkY7CiAgICAgICAgIHN3aXRj aCAoIHJjID0gcHJvdG1vZGVfbG9hZF9zZWcoeDg2X3NlZ19ub25lLCBzcmMudmFsLCBmYWxzZSwg JnNyZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4dCwgb3Bz KSApCkBAIC00ODU0LDcgKzQ4MzMsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgY2FzZSBYODZF TVVMX0VYQ0VQVElPTjoKICAgICAgICAgICAgIGlmICggY3R4dC0+ZXZlbnRfcGVuZGluZyApCiAg ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGN0eHQtPmV2ZW50LnZlY3RvciA9 PSBFWENfUEYpOworICAgICAgICAgICAgICAgIEFTU0VSVChjdHh0LT5ldmVudC52ZWN0b3IgPT0g VFJBUF9wYWdlX2ZhdWx0KTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBnb3Rv IGRvbmU7CiAgICAgICAgICAgICB9CkBAIC00ODcyLDcgKzQ4NTEsNyBAQCB4ODZfZW11bGF0ZSgK ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MDMpOiAvKiBs c2wgKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBv cHMpLCBFWENfVUQpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWluX3Byb3Rtb2Rl KGN0eHQsIG9wcyksIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgIF9yZWdzLl9lZmxhZ3MgJj0g flg4Nl9FRkxBR1NfWkY7CiAgICAgICAgIHN3aXRjaCAoIHJjID0gcHJvdG1vZGVfbG9hZF9zZWco eDg2X3NlZ19ub25lLCBzcmMudmFsLCBmYWxzZSwgJnNyZWcsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3R4dCwgb3BzKSApCkBAIC00OTAwLDcgKzQ4NzksNyBAQCB4 ODZfZW11bGF0ZSgKICAgICAgICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKICAgICAgICAgICAg IGlmICggY3R4dC0+ZXZlbnRfcGVuZGluZyApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgQVNTRVJUKGN0eHQtPmV2ZW50LnZlY3RvciA9PSBFWENfUEYpOworICAgICAgICAgICAgICAg IEFTU0VSVChjdHh0LT5ldmVudC52ZWN0b3IgPT0gVFJBUF9wYWdlX2ZhdWx0KTsKICAgICAgICAg ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICB9CkBAIC00 OTE3LDEzICs0ODk2LDEzIEBAIHg4Nl9lbXVsYXRlKAogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgw ZiwgMHgwNSk6IC8qIHN5c2NhbGwgKi8gewogICAgICAgICB1aW50NjRfdCBtc3JfY29udGVudDsK IAotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWluX3Byb3Rtb2RlKGN0eHQsIG9wcyks IEVYQ19VRCk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4 dCwgb3BzKSwgVFJBUF9pbnZhbGlkX29wKTsKIAogICAgICAgICAvKiBJbmplY3QgI1VEIGlmIHN5 c2NhbGwvc3lzcmV0IGFyZSBkaXNhYmxlZC4gKi8KICAgICAgICAgZmFpbF9pZihvcHMtPnJlYWRf bXNyID09IE5VTEwpOwogICAgICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZF9tc3IoTVNSX0VGRVIs ICZtc3JfY29udGVudCwgY3R4dCkpICE9IDAgKQogICAgICAgICAgICAgZ290byBkb25lOwotICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKG1zcl9jb250ZW50ICYgRUZFUl9TQ0UpID09IDAs IEVYQ19VRCk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigobXNyX2NvbnRlbnQgJiBF RkVSX1NDRSkgPT0gMCwgVFJBUF9pbnZhbGlkX29wKTsKIAogICAgICAgICBpZiAoIChyYyA9IG9w cy0+cmVhZF9tc3IoTVNSX1NUQVIsICZtc3JfY29udGVudCwgY3R4dCkpICE9IDAgKQogICAgICAg ICAgICAgZ290byBkb25lOwpAQCAtNDk5MSw3ICs0OTcwLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAg fQogCiAgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDA2KTogLyogY2x0cyAqLwotICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIW1vZGVfcmluZzAoKSwgRVhDX0dQLCAwKTsKKyAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIFRSQVBfZ3BfZmF1bHQsIDAp OwogICAgICAgICBmYWlsX2lmKChvcHMtPnJlYWRfY3IgPT0gTlVMTCkgfHwgKG9wcy0+d3JpdGVf Y3IgPT0gTlVMTCkpOwogICAgICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZF9jcigwLCAmZHN0LnZh bCwgY3R4dCkpICE9IFg4NkVNVUxfT0tBWSB8fAogICAgICAgICAgICAgIChyYyA9IG9wcy0+d3Jp dGVfY3IoMCwgZHN0LnZhbCAmIH5YODZfQ1IwX1RTLCBjdHh0KSkgIT0gWDg2RU1VTF9PS0FZICkK QEAgLTUwMDAsNyArNDk3OSw3IEBAIHg4Nl9lbXVsYXRlKAogCiAgICAgY2FzZSBYODZFTVVMX09Q QygweDBmLCAweDA4KTogLyogaW52ZCAqLwogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgw OSk6IC8qIHdiaW52ZCAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIW1vZGVfcmlu ZzAoKSwgRVhDX0dQLCAwKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3Jp bmcwKCksIFRSQVBfZ3BfZmF1bHQsIDApOwogICAgICAgICBmYWlsX2lmKG9wcy0+d2JpbnZkID09 IE5VTEwpOwogICAgICAgICBpZiAoIChyYyA9IG9wcy0+d2JpbnZkKGN0eHQpKSAhPSAwICkKICAg ICAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTUwMDksNyArNDk4OCw3IEBAIHg4Nl9lbXVsYXRlKAog ICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgwYik6IC8qIHVkMiAqLwogICAgIGNhc2UgWDg2 RU1VTF9PUEMoMHgwZiwgMHhiOSk6IC8qIHVkMSAqLwogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgw ZiwgMHhmZik6IC8qIHVkMCAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb24oRVhDX1VEKTsK KyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uKFRSQVBfaW52YWxpZF9vcCk7CiAKICAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4MGQpOiAvKiBHcnBQIChwcmVmZXRjaCkgKi8KICAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4MTgpOiAvKiBHcnAxNiAocHJlZmV0Y2gvbm9wKSAqLwpAQCAt NTA5OCw3ICs1MDc3LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICBnZW5lcmF0ZV9leGNl cHRpb25faWYoIShteGNzciAmIE1YQ1NSX01NKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICFpc19hbGlnbmVkKGVhLm1lbS5zZWcsIGVhLm1lbS5vZmYsIGVhLmJ5dGVzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQsIG9wcyks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX0dQLCAwKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFQX2dwX2ZhdWx0LCAwKTsKICAgICAgICAgICAg IGlmICggIShiICYgMSkgKQogICAgICAgICAgICAgICAgIHJjID0gb3BzLT5yZWFkKGVhLm1lbS5z ZWcsIGVhLm1lbS5vZmYrMCwgbW12YWxwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVhLmJ5dGVzLCBjdHh0KTsKQEAgLTUxMzMsNyArNTExMiw3IEBAIHg4Nl9lbXVsYXRlKAogICAg IGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgyMSk6IC8qIG1vdiBkcixyZWcgKi8KICAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4MjIpOiAvKiBtb3YgcmVnLGNyICovCiAgICAgY2FzZSBYODZF TVVMX09QQygweDBmLCAweDIzKTogLyogbW92IHJlZyxkciAqLwotICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoIW1vZGVfcmluZzAoKSwgRVhDX0dQLCAwKTsKKyAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIFRSQVBfZ3BfZmF1bHQsIDApOwogICAgICAgICBp ZiAoIGIgJiAyICkKICAgICAgICAgewogICAgICAgICAgICAgLyogV3JpdGUgdG8gQ1IvRFIuICov CkBAIC01MTU2LDcgKzUxMzUsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgYnJlYWs7CiAKICAg ICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MzApOiAvKiB3cm1zciAqLwotICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoIW1vZGVfcmluZzAoKSwgRVhDX0dQLCAwKTsKKyAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIFRSQVBfZ3BfZmF1bHQsIDApOwogICAg ICAgICBmYWlsX2lmKG9wcy0+d3JpdGVfbXNyID09IE5VTEwpOwogICAgICAgICBpZiAoIChyYyA9 IG9wcy0+d3JpdGVfbXNyKF9yZWdzLl9lY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCh1aW50NjRfdClfcmVncy5yKGR4KSA8PCAzMikgfCBfcmVncy5fZWF4LApAQCAtNTE3 Miw3ICs1MTUxLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICBmYWlsX2lmKG9wcy0+cmVh ZF9jciA9PSBOVUxMKTsKICAgICAgICAgICAgIGlmICggKHJjID0gb3BzLT5yZWFkX2NyKDQsICZj cjQsIGN0eHQpKSApCiAgICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKGNyNCAmIFg4Nl9DUjRfVFNELCBFWENfR1AsIDApOworICAgICAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGNyNCAmIFg4Nl9DUjRfVFNELCBUUkFQX2dwX2Zh dWx0LCAwKTsKICAgICAgICAgfQogICAgICAgICBmYWlsX2lmKG9wcy0+cmVhZF9tc3IgPT0gTlVM TCk7CiAgICAgICAgIGlmICggKHJjID0gb3BzLT5yZWFkX21zcihNU1JfSUEzMl9UU0MsICZ2YWws IGN0eHQpKSAhPSAwICkKQEAgLTUxODQsNyArNTE2Myw3IEBAIHg4Nl9lbXVsYXRlKAogCiAgICAg Y2FzZSBYODZFTVVMX09QQygweDBmLCAweDMyKTogLyogcmRtc3IgKi8gewogICAgICAgICB1aW50 NjRfdCB2YWw7Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBF WENfR1AsIDApOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIW1vZGVfcmluZzAoKSwg VFJBUF9ncF9mYXVsdCwgMCk7CiAgICAgICAgIGZhaWxfaWYob3BzLT5yZWFkX21zciA9PSBOVUxM KTsKICAgICAgICAgaWYgKCAocmMgPSBvcHMtPnJlYWRfbXNyKF9yZWdzLl9lY3gsICZ2YWwsIGN0 eHQpKSAhPSAwICkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTUyMDQsMTUgKzUxODMsMTUg QEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGludCBsbTsKIAogICAgICAgICB2Y3B1X211c3RfaGF2 ZShzZXApOwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV9yaW5nMCgpLCBFWENf R1AsIDApOwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWluX3Byb3Rtb2RlKGN0eHQs IG9wcyksIEVYQ19HUCwgMCk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlX3Jp bmcwKCksIFRSQVBfZ3BfZmF1bHQsIDApOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo IWluX3Byb3Rtb2RlKGN0eHQsIG9wcyksIFRSQVBfZ3BfZmF1bHQsIDApOwogCiAgICAgICAgIGZh aWxfaWYob3BzLT5yZWFkX21zciA9PSBOVUxMKTsKICAgICAgICAgaWYgKCAocmMgPSBvcHMtPnJl YWRfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NTLCAmbXNyX2NvbnRlbnQsIGN0eHQpKQogICAgICAg ICAgICAgICE9IDAgKQogICAgICAgICAgICAgZ290byBkb25lOwogCi0gICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZighKG1zcl9jb250ZW50ICYgMHhmZmZjKSwgRVhDX0dQLCAwKTsKKyAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCEobXNyX2NvbnRlbnQgJiAweGZmZmMpLCBUUkFQX2dw X2ZhdWx0LCAwKTsKICAgICAgICAgbG0gPSBpbl9sb25nbW9kZShjdHh0LCBvcHMpOwogICAgICAg ICBpZiAoIGxtIDwgMCApCiAgICAgICAgICAgICBnb3RvIGNhbm5vdF9lbXVsYXRlOwpAQCAtNTI1 NCwxOSArNTIzMywxOSBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgdWludDY0X3QgbXNyX2NvbnRl bnQ7CiAKICAgICAgICAgdmNwdV9tdXN0X2hhdmUoc2VwKTsKLSAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIEVYQ19HUCwgMCk7Ci0gICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX0dQLCAwKTsKKyAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCksIFRSQVBfZ3BfZmF1bHQsIDApOwor ICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIWluX3Byb3Rtb2RlKGN0eHQsIG9wcyksIFRS QVBfZ3BfZmF1bHQsIDApOwogCiAgICAgICAgIGZhaWxfaWYob3BzLT5yZWFkX21zciA9PSBOVUxM KTsKICAgICAgICAgaWYgKCAocmMgPSBvcHMtPnJlYWRfbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NT LCAmbXNyX2NvbnRlbnQsIGN0eHQpKQogICAgICAgICAgICAgICE9IDAgKQogICAgICAgICAgICAg Z290byBkb25lOwogCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighKG1zcl9jb250ZW50 ICYgMHhmZmZjKSwgRVhDX0dQLCAwKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCEo bXNyX2NvbnRlbnQgJiAweGZmZmMpLCBUUkFQX2dwX2ZhdWx0LCAwKTsKICAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKG9wX2J5dGVzID09IDggJiYKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICghaXNfY2Fub25pY2FsX2FkZHJlc3MoX3JlZ3MucihkeCkpIHx8CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIWlzX2Nhbm9uaWNhbF9hZGRyZXNzKF9yZWdzLnIoY3gpKSks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfR1AsIDApOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVFJBUF9ncF9mYXVsdCwgMCk7CiAKICAgICAgICAgY3Muc2VsID0g KG1zcl9jb250ZW50IHwgMykgKyAvKiBTRUxFQ1RPUl9SUExfTUFTSyAqLwogICAgICAgICAgICAg ICAgICAob3BfYnl0ZXMgPT0gOCA/IDMyIDogMTYpOwpAQCAtNTM2NCwxMSArNTM0MywxMSBAQCB4 ODZfZW11bGF0ZSgKICAgICAgICAgc3dpdGNoICggYiApCiAgICAgICAgIHsKICAgICAgICAgY2Fz ZSAweDdlOgotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5sLCBFWENfVUQp OworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5sLCBUUkFQX2ludmFsaWRf b3ApOwogICAgICAgICAgICAgZWEuYnl0ZXMgPSBvcF9ieXRlczsKICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICBjYXNlIDB4ZDY6Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo dmV4LmwsIEVYQ19VRCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4Lmws IFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAgICBlYS5ieXRlcyA9IDg7CiAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgfQpAQCAtNTM4Myw3ICs1MzYyLDcgQEAgeDg2X2VtdWxhdGUoCiAg ICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIShteGNzciAmIE1YQ1NSX01NKSAmJgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19hbGlnbmVkKGVhLm1lbS5zZWcs IGVhLm1lbS5vZmYsIGVhLmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN0eHQsIG9wcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRVhDX0dQLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFQX2dw X2ZhdWx0LCAwKTsKICAgICAgICAgICAgIGlmICggYiA9PSAweDZmICkKICAgICAgICAgICAgICAg ICByYyA9IG9wcy0+cmVhZChlYS5tZW0uc2VnLCBlYS5tZW0ub2ZmKzAsIG1tdmFscCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlYS5ieXRlcywgY3R4dCk7CkBAIC01NDM1LDcgKzU0 MTQsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgZmFpbF9pZihvcHMtPmNwdWlkID09IE5VTEwp OwogICAgICAgICByYyA9IG9wcy0+Y3B1aWQoX3JlZ3MuX2VheCwgX3JlZ3MuX2VjeCwgJmNwdWlk X2xlYWYsIGN0eHQpOwogICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYocmMgPT0gWDg2RU1V TF9FWENFUFRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfR1AsIDApOyAv KiBDUFVJRCBGYXVsdGluZz8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQVBf Z3BfZmF1bHQsIDApOyAvKiBDUFVJRCBGYXVsdGluZz8gKi8KICAgICAgICAgaWYgKCByYyAhPSBY ODZFTVVMX09LQVkgKQogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICBfcmVncy5yKGF4 KSA9IGNwdWlkX2xlYWYuYTsKQEAgLTU0NDUsNyArNTQyNCw3IEBAIHg4Nl9lbXVsYXRlKAogICAg ICAgICBicmVhazsKIAogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHhhMyk6IGJ0OiAvKiBi dCAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobG9ja19wcmVmaXgsIEVYQ19VRCk7 CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgVFJBUF9pbnZhbGlk X29wKTsKICAgICAgICAgZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoImJ0Iiwgc3JjLCBkc3QsIF9y ZWdzLl9lZmxhZ3MpOwogICAgICAgICBkc3QudHlwZSA9IE9QX05PTkU7CiAgICAgICAgIGJyZWFr OwpAQCAtNTQ1Niw3ICs1NDM1LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSBYODZFTVVMX09Q QygweDBmLCAweGFkKTogLyogc2hyZCAlJWNsLHIsci9tICovIHsKICAgICAgICAgdWludDhfdCBz aGlmdCwgd2lkdGggPSBkc3QuYnl0ZXMgPDwgMzsKIAotICAgICAgICBnZW5lcmF0ZV9leGNlcHRp b25faWYobG9ja19wcmVmaXgsIEVYQ19VRCk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9p Zihsb2NrX3ByZWZpeCwgVFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAgaWYgKCBiICYgMSApCiAg ICAgICAgICAgICBzaGlmdCA9IF9yZWdzLmNsOwogICAgICAgICBlbHNlCkBAIC01NDk4LDE0ICs1 NDc3LDE0IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICB7CiAgICAgICAgIGNhc2UgNTogLyogbGZl bmNlICovCiAgICAgICAgICAgICBmYWlsX2lmKG1vZHJtX21vZCAhPSAzKTsKLSAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgucGZ4LCBFWENfVUQpOworICAgICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5wZngsIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAg ICB2Y3B1X211c3RfaGF2ZShzc2UyKTsKICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoICJsZmVu Y2UiIDo6OiAibWVtb3J5IiApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgNjoK ICAgICAgICAgICAgIGlmICggbW9kcm1fbW9kID09IDMgKSAvKiBtZmVuY2UgKi8KICAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LnBmeCwgRVhD X1VEKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LnBmeCwgVFJB UF9pbnZhbGlkX29wKTsKICAgICAgICAgICAgICAgICB2Y3B1X211c3RfaGF2ZShzc2UyKTsKICAg ICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCAibWZlbmNlIiA6OjogIm1lbW9yeSIgKTsKICAg ICAgICAgICAgICAgICBicmVhazsKQEAgLTU1MjAsNyArNTQ5OSw3IEBAIHg4Nl9lbXVsYXRlKAog ICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgICBpZiAoIG1vZHJtX21vZCA9PSAzICkgLyogc2Zl bmNlICovCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKHZleC5wZngsIEVYQ19VRCk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKHZleC5wZngsIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAgICAgICAgdmNwdV9tdXN0 X2hhdmUoc3NlKTsKICAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCAic2ZlbmNlIiA6Ojog Im1lbW9yeSIgKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU1NDEsMTEgKzU1MjAsMTEg QEAgeDg2X2VtdWxhdGUoCiAKICAgICBjYXNlIFg4NkVNVUxfT1BDX0YzKDB4MGYsIDB4YWUpOiAv KiBHcnAxNSAqLwogICAgICAgICBmYWlsX2lmKG1vZHJtX21vZCAhPSAzKTsKLSAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcgJiA0KSB8fCAhbW9kZV82NGJpdCgpLCBFWENf VUQpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKG1vZHJtX3JlZyAmIDQpIHx8ICFt b2RlXzY0Yml0KCksIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgIGZhaWxfaWYoIW9wcy0+cmVh ZF9jcik7CiAgICAgICAgIGlmICggKHJjID0gb3BzLT5yZWFkX2NyKDQsICZjcjQsIGN0eHQpKSAh PSBYODZFTVVMX09LQVkgKQogICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYoIShjcjQgJiBYODZfQ1I0X0ZTR1NCQVNFKSwgRVhDX1VEKTsKKyAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCEoY3I0ICYgWDg2X0NSNF9GU0dTQkFTRSksIFRSQVBf aW52YWxpZF9vcCk7CiAgICAgICAgIHNlZyA9IG1vZHJtX3JlZyAmIDEgPyB4ODZfc2VnX2dzIDog eDg2X3NlZ19mczsKICAgICAgICAgZmFpbF9pZighb3BzLT5yZWFkX3NlZ21lbnQpOwogICAgICAg ICBpZiAoIChyYyA9IG9wcy0+cmVhZF9zZWdtZW50KHNlZywgJnNyZWcsIGN0eHQpKSAhPSBYODZF TVVMX09LQVkgKQpAQCAtNTU2NSw3ICs1NTQ0LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgc3JlZy5iYXNlID0gKmRzdC5yZWc7CiAgICAgICAgICAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFpc19jYW5vbmljYWxfYWRkcmVzcyhzcmVnLmJhc2Up LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfR1AsIDApOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFQX2dwX2ZhdWx0LCAwKTsKICAg ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzcmVnLmJhc2Ug PSAodWludDMyX3QpKmRzdC5yZWc7CkBAIC01NjM0LDcgKzU2MTMsNyBAQCB4ODZfZW11bGF0ZSgK ICAgICAgICAgY2FzZSA1OiBnb3RvIGJ0czsKICAgICAgICAgY2FzZSA2OiBnb3RvIGJ0cjsKICAg ICAgICAgY2FzZSA3OiBnb3RvIGJ0YzsKLSAgICAgICAgZGVmYXVsdDogZ2VuZXJhdGVfZXhjZXB0 aW9uKEVYQ19VRCk7CisgICAgICAgIGRlZmF1bHQ6IGdlbmVyYXRlX2V4Y2VwdGlvbihUUkFQX2lu dmFsaWRfb3ApOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC01NzQ2LDcgKzU3MjUs NyBAQCB4ODZfZW11bGF0ZSgKIAogI2lmZGVmIEhBVkVfR0FTX1JEUkFORAogICAgICAgICAgICAg Y2FzZSA2OiAvKiByZHJhbmQgKi8KLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25f aWYocmVwX3ByZWZpeCgpLCBFWENfVUQpOworICAgICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZihyZXBfcHJlZml4KCksIFRSQVBfaW52YWxpZF9vcCk7CiAgICAgICAgICAgICAgICAg aG9zdF9hbmRfdmNwdV9tdXN0X2hhdmUocmRyYW5kKTsKICAgICAgICAgICAgICAgICBkc3QgPSBl YTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBvcF9ieXRlcyApCkBAIC01Nzc3LDcgKzU3NTYs NyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg IHVpbnQ2NF90IHRzY19hdXg7CiAKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKGVhLnR5cGUgIT0gT1BfUkVHLCBFWENfVUQpOworICAgICAgICAgICAgICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9SRUcsIFRSQVBfaW52YWxpZF9vcCk7 CiAgICAgICAgICAgICAgICAgICAgIHZjcHVfbXVzdF9oYXZlKHJkcGlkKTsKICAgICAgICAgICAg ICAgICAgICAgZmFpbF9pZighb3BzLT5yZWFkX21zcik7CiAgICAgICAgICAgICAgICAgICAgIGlm ICggKHJjID0gb3BzLT5yZWFkX21zcihNU1JfVFNDX0FVWCwgJnRzY19hdXgsCkBAIC01Nzg5LDcg KzU3NjgsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgfQogI2lmZGVmIEhBVkVfR0FTX1JEU0VFRAotICAgICAgICAgICAgICAgIGdl bmVyYXRlX2V4Y2VwdGlvbl9pZihyZXBfcHJlZml4KCksIEVYQ19VRCk7CisgICAgICAgICAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHJlcF9wcmVmaXgoKSwgVFJBUF9pbnZhbGlkX29wKTsK ICAgICAgICAgICAgICAgICBob3N0X2FuZF92Y3B1X211c3RfaGF2ZShyZHNlZWQpOwogICAgICAg ICAgICAgICAgIGRzdCA9IGVhOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoIG9wX2J5dGVzICkK QEAgLTU4MTksMTQgKzU3OTgsMTQgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIH0KIAogICAgICAg ICAvKiBjbXB4Y2hnOGIvY21weGNoZzE2YiAqLwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25f aWYoKG1vZHJtX3JlZyAmIDcpICE9IDEsIEVYQ19VRCk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZigobW9kcm1fcmVnICYgNykgIT0gMSwgVFJBUF9pbnZhbGlkX29wKTsKICAgICAgICAg ZmFpbF9pZighb3BzLT5jbXB4Y2hnKTsKICAgICAgICAgaWYgKCByZXhfcHJlZml4ICYgUkVYX1cg KQogICAgICAgICB7CiAgICAgICAgICAgICBob3N0X2FuZF92Y3B1X211c3RfaGF2ZShjeDE2KTsK ICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaXNfYWxpZ25lZChlYS5tZW0uc2Vn LCBlYS5tZW0ub2ZmLCAxNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdHh0LCBvcHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVY Q19HUCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBUF9ncF9mYXVs dCwgMCk7CiAgICAgICAgICAgICBvcF9ieXRlcyA9IDE2OwogICAgICAgICB9CiAgICAgICAgIGVs c2UKQEAgLTU5NzYsNyArNTk1NSw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgaG9zdF9h bmRfdmNwdV9tdXN0X2hhdmUoYm1pMik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhvc3Rf YW5kX3ZjcHVfbXVzdF9oYXZlKGJtaTEpOwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo dmV4LmwsIEVYQ19VRCk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgubCwgVFJB UF9pbnZhbGlkX29wKTsKIAogICAgICAgICBidWZbMF0gPSAweGM0OwogICAgICAgICAqcHZleCA9 IHZleDsKQEAgLTYwMTAsNyArNTk4OSw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgZ290 byBjYW5ub3RfZW11bGF0ZTsKICAgICAgICAgfQogCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZih2ZXgubCwgRVhDX1VEKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5s LCBUUkFQX2ludmFsaWRfb3ApOwogCiAgICAgICAgIGJ1ZlswXSA9IDB4YzQ7CiAgICAgICAgICpw dmV4ID0gdmV4OwpAQCAtNjA2Myw3ICs2MDQyLDcgQEAgeDg2X2VtdWxhdGUoCiAKICAgICBjYXNl IFg4NkVNVUxfT1BDX1ZFWF9GMigweDBmMzgsIDB4ZjYpOiAvKiBtdWx4IHIvbSxyLHIgKi8KICAg ICAgICAgdmNwdV9tdXN0X2hhdmUoYm1pMik7Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9p Zih2ZXgubCwgRVhDX1VEKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5sLCBU UkFQX2ludmFsaWRfb3ApOwogICAgICAgICBlYS5yZWcgPSBkZWNvZGVfdmV4X2dwcih2ZXgucmVn LCAmX3JlZ3MsIGN0eHQpOwogICAgICAgICBpZiAoIG1vZGVfNjRiaXQoKSAmJiB2ZXgudyApCiAg ICAgICAgICAgICBhc20gKCAibXVscSAlMyIgOiAiPWEiICgqZWEucmVnKSwgIj1kIiAoZHN0LnZh bCkKQEAgLTYwNzUsNyArNjA1NCw3IEBAIHg4Nl9lbXVsYXRlKAogCiAgICAgY2FzZSBYODZFTVVM X09QQ19WRVhfRjIoMHgwZjNhLCAweGYwKTogLyogcm9yeCBpbW0sci9tLHIgKi8KICAgICAgICAg dmNwdV9tdXN0X2hhdmUoYm1pMik7Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgu bCB8fCB2ZXgucmVnICE9IDB4ZiwgRVhDX1VEKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKHZleC5sIHx8IHZleC5yZWcgIT0gMHhmLCBUUkFQX2ludmFsaWRfb3ApOwogICAgICAgICBp ZiAoIGVhLnR5cGUgPT0gT1BfUkVHICkKICAgICAgICAgICAgIHNyYy52YWwgPSAqZWEucmVnOwog ICAgICAgICBlbHNlIGlmICggKHJjID0gcmVhZF91bG9uZyhlYS5tZW0uc2VnLCBlYS5tZW0ub2Zm LCAmc3JjLnZhbCwgb3BfYnl0ZXMsCkBAIC02MTA4LDcgKzYwODcsNyBAQCB4ODZfZW11bGF0ZSgK ICAgICAgICAgdWludDhfdCAqYnVmID0gZ2V0X3N0dWIoc3R1Yik7CiAgICAgICAgIHR5cGVvZih2 ZXgpICpweG9wID0gY29udGFpbmVyX29mKGJ1ZiArIDEsIHR5cGVvZih2ZXgpLCByYXdbMF0pOwog Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgubCwgRVhDX1VEKTsKKyAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5sLCBUUkFQX2ludmFsaWRfb3ApOwogCiAgICAgICAg IGJ1ZlswXSA9IDB4OGY7CiAgICAgICAgICpweG9wID0gdmV4OwpAQCAtNjE0Miw3ICs2MTIxLDcg QEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIHR5cGVvZih2ZXgpICpweG9wID0gY29udGFpbmVyX29m KGJ1ZiArIDEsIHR5cGVvZih2ZXgpLCByYXdbMF0pOwogCiAgICAgICAgIGhvc3RfYW5kX3ZjcHVf bXVzdF9oYXZlKHRibSk7Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgubCB8fCB2 ZXgucmVnICE9IDB4ZiwgRVhDX1VEKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZl eC5sIHx8IHZleC5yZWcgIT0gMHhmLCBUUkFQX2ludmFsaWRfb3ApOwogCiAgICAgICAgIGlmICgg ZWEudHlwZSA9PSBPUF9SRUcgKQogICAgICAgICAgICAgc3JjLnZhbCA9ICplYS5yZWc7Ci0tIAoy LjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlz dHMueGVuLm9yZy94ZW4tZGV2ZWwK