From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v3 3/5] x86: split PV dom0 builder to pv/dom0_builder.c Date: Mon, 20 Mar 2017 14:14:24 +0000 Message-ID: <20170320141426.20780-4-wei.liu2@citrix.com> References: <20170320141426.20780-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cpy5y-0006es-7L for xen-devel@lists.xenproject.org; Mon, 20 Mar 2017 14:15:38 +0000 In-Reply-To: <20170320141426.20780-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 , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org TG9uZyB0ZXJtIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkaXNlbnRhbmdsZSBQViBhbmQgSFZNIGNv ZGUuIE1vdmUgdGhlIFBWCmRvbWFpbiBidWlsZGVyIHRvIGEgZGVkaWNhdGVkIGZpbGUuCgpUaGlz IGluIHR1cm4gcmVxdWlyZXMgZXhwb3NpbmcgYSBmZXcgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMg dmlhIGEgbmV3CmhlYWRlciBkb20wX2J1aWxkLmguIFRoZXNlIGZ1bmN0aW9ucyBhbmQgdmFyaWFi bGVzIGFyZSBub3cgcHJlZml4ZWQgd2l0aAoiZG9tMF8iIGlmIHRoZXkgd2VyZW4ndCBhbHJlYWR5 IHNvLgoKTm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWku bGl1MkBjaXRyaXguY29tPgotLS0KdjM6CjEuIGZpeCBpbmRlbnRhdGlvbgoyLiBhZGFwdCB0byBw cmV2aW91cyBwYXRjaAoKdjI6CjEuIHB1dCBmaWxlIHVuZGVyIHB2IGRpcmVjdG9yeQoyLiB1c2Ug ZG9tMF8gcHJlZml4CjMuIGhlYWRlciBub3cgaW4gYXNtLXg4NgotLS0KIHhlbi9hcmNoL3g4Ni9k b20wX2J1aWxkLmMgICAgICAgIHwgOTEyICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiB4ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiB4ZW4vYXJj aC94ODYvcHYvZG9tMF9idWlsZC5jICAgICB8IDkxMyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS14ODYvZG9tMF9idWlsZC5oIHwgIDMzICsr CiA0IGZpbGVzIGNoYW5nZWQsIDk2MyBpbnNlcnRpb25zKCspLCA4OTYgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS14ODYvZG9tMF9idWlsZC5oCgpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L2RvbTBfYnVpbGQuYyBiL3hlbi9hcmNoL3g4Ni9kb20wX2J1aWxkLmMKaW5k ZXggN2NhODQ3ZTE5Yi4uY2I0NGEyMDc5MiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2RvbTBf YnVpbGQuYworKysgYi94ZW4vYXJjaC94ODYvZG9tMF9idWlsZC5jCkBAIC0yOCw2ICsyOCw3IEBA CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1 ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2RvbTBfYnVpbGQuaD4KICNpbmNsdWRlIDxh c20vaTM4Ny5oPgogI2luY2x1ZGUgPGFzbS9wYWdpbmcuaD4KICNpbmNsdWRlIDxhc20vcDJtLmg+ CkBAIC0xNTYsOSArMTU3LDkgQEAgY3VzdG9tX3BhcmFtKCJkb20wX25vZGVzIiwgcGFyc2VfZG9t MF9ub2Rlcyk7CiAKIHN0YXRpYyBjcHVtYXNrX3QgX19pbml0ZGF0YSBkb20wX2NwdXM7CiAKLXN0 YXRpYyBzdHJ1Y3QgdmNwdSAqX19pbml0IHNldHVwX2RvbTBfdmNwdShzdHJ1Y3QgZG9tYWluICpk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB2Y3B1X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBwcmV2X2NwdSkKK3N0cnVjdCB2Y3B1ICpfX2luaXQgZG9tMF9zZXR1cF92Y3B1 KHN0cnVjdCBkb21haW4gKmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgdmNwdV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBwcmV2X2NwdSkKIHsKICAgICB1bnNpZ25lZCBpbnQgY3B1ID0gY3B1bWFz a19jeWNsZShwcmV2X2NwdSwgJmRvbTBfY3B1cyk7CiAgICAgc3RydWN0IHZjcHUgKnYgPSBhbGxv Y192Y3B1KGQsIHZjcHVfaWQsIGNwdSk7CkBAIC0yMTYsNyArMjE3LDcgQEAgc3RydWN0IHZjcHUg Kl9faW5pdCBhbGxvY19kb20wX3ZjcHUwKHN0cnVjdCBkb21haW4gKmRvbTApCiAgICAgICAgIHJl dHVybiBOVUxMOwogICAgIGRvbTAtPm1heF92Y3B1cyA9IG1heF92Y3B1czsKIAotICAgIHJldHVy biBzZXR1cF9kb20wX3ZjcHUoZG9tMCwgMCwKKyAgICByZXR1cm4gZG9tMF9zZXR1cF92Y3B1KGRv bTAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVtYXNrX2xhc3QoJmRvbTBfY3B1 cykgLyogc28gaXQgd3JhcHMgYXJvdW5kIHRvIGZpcnN0IHBjcHUgKi8pOwogfQogCkBAIC0yNjAs NjYgKzI2MSw3IEBAIHN0cmluZ19wYXJhbSgiZG9tMF9pb3BvcnRzX2Rpc2FibGUiLCBvcHRfZG9t MF9pb3BvcnRzX2Rpc2FibGUpOwogc3RhdGljIGJvb2xfdCBfX2luaXRkYXRhIHJvX2hwZXQgPSAx OwogYm9vbGVhbl9wYXJhbSgicm8taHBldCIsIHJvX2hwZXQpOwogCi0vKiBBbGxvdyByaW5nLTMg YWNjZXNzIGluIGxvbmcgbW9kZSBhcyBndWVzdCBjYW5ub3QgdXNlIHJpbmcgMSAuLi4gKi8KLSNk ZWZpbmUgQkFTRV9QUk9UIChfUEFHRV9QUkVTRU5UfF9QQUdFX1JXfF9QQUdFX0FDQ0VTU0VEfF9Q QUdFX1VTRVIpCi0jZGVmaW5lIEwxX1BST1QgKEJBU0VfUFJPVHxfUEFHRV9HVUVTVF9LRVJORUwp Ci0vKiAuLi4gZXhjZXB0IGZvciBjb21wYXRpYmlsaXR5IG1vZGUgZ3Vlc3RzLiAqLwotI2RlZmlu ZSBDT01QQVRfTDFfUFJPVCAoX1BBR0VfUFJFU0VOVHxfUEFHRV9SV3xfUEFHRV9BQ0NFU1NFRCkK LSNkZWZpbmUgTDJfUFJPVCAoQkFTRV9QUk9UfF9QQUdFX0RJUlRZKQotI2RlZmluZSBMM19QUk9U IChCQVNFX1BST1R8X1BBR0VfRElSVFkpCi0jZGVmaW5lIEw0X1BST1QgKEJBU0VfUFJPVHxfUEFH RV9ESVJUWSkKLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIG1lbWZsYWdzID0gTUVN Rl9ub19kbWF8TUVNRl9leGFjdF9ub2RlOwotCi1zdGF0aWMgc3RydWN0IHBhZ2VfaW5mbyAqIF9f aW5pdCBhbGxvY19jaHVuaygKLSAgICBzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG1h eF9wYWdlcykKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbGFzdF9vcmRl ciA9IE1BWF9PUkRFUjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIHVuc2lnbmVk IGludCBvcmRlciA9IGdldF9vcmRlcl9mcm9tX3BhZ2VzKG1heF9wYWdlcyksIGZyZWVfb3JkZXI7 Ci0KLSAgICBpZiAoIG9yZGVyID4gbGFzdF9vcmRlciApCi0gICAgICAgIG9yZGVyID0gbGFzdF9v cmRlcjsKLSAgICBlbHNlIGlmICggbWF4X3BhZ2VzICYgKG1heF9wYWdlcyAtIDEpICkKLSAgICAg ICAgLS1vcmRlcjsKLSAgICB3aGlsZSAoIChwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBv cmRlciwgbWVtZmxhZ3MpKSA9PSBOVUxMICkKLSAgICAgICAgaWYgKCBvcmRlci0tID09IDAgKQot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgaWYgKCBwYWdlICkKLSAgICAgICAgbGFzdF9vcmRlciA9 IG9yZGVyOwotICAgIGVsc2UgaWYgKCBtZW1mbGFncyApCi0gICAgewotICAgICAgICAvKgotICAg ICAgICAgKiBBbGxvY2F0ZSB1cCB0byAyTUIgYXQgYSB0aW1lOiBJdCBwcmV2ZW50cyBhbGxvY2F0 aW5nIHZlcnkgbGFyZ2UKLSAgICAgICAgICogY2h1bmtzIGZyb20gRE1BIHBvb2xzIGJlZm9yZSB0 aGUgPjRHQiBwb29sIGlzIGZ1bGx5IGRlcGxldGVkLgotICAgICAgICAgKi8KLSAgICAgICAgbGFz dF9vcmRlciA9IDIxIC0gUEFHRV9TSElGVDsKLSAgICAgICAgbWVtZmxhZ3MgPSAwOwotICAgICAg ICByZXR1cm4gYWxsb2NfY2h1bmsoZCwgbWF4X3BhZ2VzKTsKLSAgICB9Ci0KLSAgICAvKgotICAg ICAqIE1ha2UgYSByZWFzb25hYmxlIGF0dGVtcHQgYXQgZmluZGluZyBhIHNtYWxsZXIgY2h1bmsg YXQgYSBoaWdoZXIKLSAgICAgKiBhZGRyZXNzLCB0byBhdm9pZCBhbGxvY2F0aW5nIGZyb20gbG93 IG1lbW9yeSBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICAgICAqLwotICAgIGZvciAoIGZyZWVfb3Jk ZXIgPSBvcmRlcjsgIW1lbWZsYWdzICYmIHBhZ2UgJiYgb3JkZXItLTsgKQotICAgIHsKLSAgICAg ICAgc3RydWN0IHBhZ2VfaW5mbyAqcGcyOwotCi0gICAgICAgIGlmICggZC0+dG90X3BhZ2VzICsg KDEgPDwgb3JkZXIpID4gZC0+bWF4X3BhZ2VzICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg ICAgICBwZzIgPSBhbGxvY19kb21oZWFwX3BhZ2VzKGQsIG9yZGVyLCBNRU1GX2V4YWN0X25vZGUp OwotICAgICAgICBpZiAoIHBnMiA+IHBhZ2UgKQotICAgICAgICB7Ci0gICAgICAgICAgICBmcmVl X2RvbWhlYXBfcGFnZXMocGFnZSwgZnJlZV9vcmRlcik7Ci0gICAgICAgICAgICBwYWdlID0gcGcy OwotICAgICAgICAgICAgZnJlZV9vcmRlciA9IG9yZGVyOwotICAgICAgICB9Ci0gICAgICAgIGVs c2UgaWYgKCBwZzIgKQotICAgICAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2VzKHBnMiwgb3JkZXIp OwotICAgIH0KLSAgICByZXR1cm4gcGFnZTsKLX0KK3Vuc2lnbmVkIGludCBfX2luaXRkYXRhIGRv bTBfbWVtZmxhZ3MgPSBNRU1GX25vX2RtYXxNRU1GX2V4YWN0X25vZGU7CiAKIHN0YXRpYyB1bnNp Z25lZCBsb25nIF9faW5pdCBkb20wX3BhZ2luZ19wYWdlcyhjb25zdCBzdHJ1Y3QgZG9tYWluICpk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgbnJfcGFnZXMpCkBAIC0zMzIsNyArMjc0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcg X19pbml0IGRvbTBfcGFnaW5nX3BhZ2VzKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsCiAgICAgcmV0 dXJuICgobWVta2IgKyAxMDIzKSAvIDEwMjQpIDw8ICgyMCAtIFBBR0VfU0hJRlQpOwogfQogCi1z dGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgY29tcHV0ZV9kb20wX25yX3BhZ2VzKAordW5zaWdu ZWQgbG9uZyBfX2luaXQgZG9tMF9jb21wdXRlX25yX3BhZ2VzKAogICAgIHN0cnVjdCBkb21haW4g KmQsIHN0cnVjdCBlbGZfZG9tX3Bhcm1zICpwYXJtcywgdW5zaWduZWQgbG9uZyBpbml0cmRfbGVu KQogewogICAgIG5vZGVpZF90IG5vZGU7CkBAIC00NjksMTk5ICs0MTEsNyBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgcHJvY2Vzc19kb20wX2lvcG9ydHNfZGlzYWJsZShzdHJ1Y3QgZG9tYWluICpkb20w KQogICAgIH0KIH0KIAotc3RhdGljIF9faW5pdCB2b2lkIGRvbTBfdXBkYXRlX3BoeXNtYXAoc3Ry dWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuLCB1bnNpZ25lZCBsb25nIHZwaHlzbWFwX3Mp Ci17Ci0gICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKLSAgICAgICAgKCh1bnNpZ25l ZCBsb25nICopdnBoeXNtYXBfcylbcGZuXSA9IG1mbjsKLSAgICBlbHNlCi0gICAgICAgICgodW5z aWduZWQgaW50ICopdnBoeXNtYXBfcylbcGZuXSA9IG1mbjsKLQotICAgIHNldF9ncGZuX2Zyb21f bWZuKG1mbiwgcGZuKTsKLX0KLQotc3RhdGljIF9faW5pdCB2b2lkIG1hcmtfcHZfcHRfcGFnZXNf cmRvbmx5KHN0cnVjdCBkb21haW4gKmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbDRfcGdlbnRyeV90ICpsNHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdnB0X3N0YXJ0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcHRfcGFn ZXMpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlOwotICAgIGw0X3BnZW50cnlfdCAqcGw0ZTsKLSAgICBsM19wZ2VudHJ5X3QgKnBsM2U7Ci0g ICAgbDJfcGdlbnRyeV90ICpwbDJlOwotICAgIGwxX3BnZW50cnlfdCAqcGwxZTsKLQotICAgIHBs NGUgPSBsNHN0YXJ0ICsgbDRfdGFibGVfb2Zmc2V0KHZwdF9zdGFydCk7Ci0gICAgcGwzZSA9IGw0 ZV90b19sM2UoKnBsNGUpOwotICAgIHBsM2UgKz0gbDNfdGFibGVfb2Zmc2V0KHZwdF9zdGFydCk7 Ci0gICAgcGwyZSA9IGwzZV90b19sMmUoKnBsM2UpOwotICAgIHBsMmUgKz0gbDJfdGFibGVfb2Zm c2V0KHZwdF9zdGFydCk7Ci0gICAgcGwxZSA9IGwyZV90b19sMWUoKnBsMmUpOwotICAgIHBsMWUg Kz0gbDFfdGFibGVfb2Zmc2V0KHZwdF9zdGFydCk7Ci0gICAgZm9yICggY291bnQgPSAwOyBjb3Vu dCA8IG5yX3B0X3BhZ2VzOyBjb3VudCsrICkKLSAgICB7Ci0gICAgICAgIGwxZV9yZW1vdmVfZmxh Z3MoKnBsMWUsIF9QQUdFX1JXKTsKLSAgICAgICAgcGFnZSA9IG1mbl90b19wYWdlKGwxZV9nZXRf cGZuKCpwbDFlKSk7Ci0KLSAgICAgICAgLyogUmVhZC1vbmx5IG1hcHBpbmcgKyBQR0NfYWxsb2Nh dGVkICsgcGFnZS10YWJsZSBwYWdlLiAqLwotICAgICAgICBwYWdlLT5jb3VudF9pbmZvICAgICAg ICAgPSBQR0NfYWxsb2NhdGVkIHwgMzsKLSAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8g fD0gUEdUX3ZhbGlkYXRlZCB8IDE7Ci0KLSAgICAgICAgLyogVG9wLWxldmVsIHAudC4gaXMgcGlu bmVkLiAqLwotICAgICAgICBpZiAoIChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBl X21hc2spID09Ci0gICAgICAgICAgICAgKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPwotICAgICAg ICAgICAgICBQR1RfbDRfcGFnZV90YWJsZSA6IFBHVF9sM19wYWdlX3RhYmxlKSApCi0gICAgICAg IHsKLSAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8gICAgICAgICs9IDE7Ci0gICAgICAgICAg ICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyArPSAxIHwgUEdUX3Bpbm5lZDsKLSAgICAgICAgfQot Ci0gICAgICAgIC8qIEl0ZXJhdGUuICovCi0gICAgICAgIGlmICggISgodW5zaWduZWQgbG9uZykr K3BsMWUgJiAoUEFHRV9TSVpFIC0gMSkpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCAh KCh1bnNpZ25lZCBsb25nKSsrcGwyZSAmIChQQUdFX1NJWkUgLSAxKSkgKQotICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgIGlmICggISgodW5zaWduZWQgbG9uZykrK3BsM2UgJiAoUEFHRV9T SVpFIC0gMSkpICkKLSAgICAgICAgICAgICAgICAgICAgcGwzZSA9IGw0ZV90b19sM2UoKisrcGw0 ZSk7Ci0gICAgICAgICAgICAgICAgcGwyZSA9IGwzZV90b19sMmUoKnBsM2UpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgcGwxZSA9IGwyZV90b19sMWUoKnBsMmUpOwotICAgICAgICB9Ci0g ICAgfQotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgc2V0dXBfcHZfcGh5c21hcChzdHJ1Y3QgZG9t YWluICpkLCB1bnNpZ25lZCBsb25nIHBndGJsX3BmbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdl9zdGFydCwgdW5zaWduZWQgbG9uZyB2X2VuZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdnBoeXNt YXBfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIHZwaHlzbWFwX2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgbnJfcGFnZXMpCi17Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IE5V TEw7Ci0gICAgbDRfcGdlbnRyeV90ICpwbDRlLCAqbDRzdGFydCA9IG1hcF9kb21haW5fcGFnZShf bWZuKHBndGJsX3BmbikpOwotICAgIGwzX3BnZW50cnlfdCAqcGwzZSA9IE5VTEw7Ci0gICAgbDJf cGdlbnRyeV90ICpwbDJlID0gTlVMTDsKLSAgICBsMV9wZ2VudHJ5X3QgKnBsMWUgPSBOVUxMOwot Ci0gICAgaWYgKCB2X3N0YXJ0IDw9IHZwaHlzbWFwX2VuZCAmJiB2cGh5c21hcF9zdGFydCA8PSB2 X2VuZCApCi0gICAgICAgIHBhbmljKCJET00wIFAtPk0gdGFibGUgb3ZlcmxhcHMgaW5pdGlhbCBt YXBwaW5nIik7Ci0KLSAgICB3aGlsZSAoIHZwaHlzbWFwX3N0YXJ0IDwgdnBoeXNtYXBfZW5kICkK LSAgICB7Ci0gICAgICAgIGlmICggZC0+dG90X3BhZ2VzICsgKChyb3VuZF9wZ3VwKHZwaHlzbWFw X2VuZCkgLSB2cGh5c21hcF9zdGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4g UEFHRV9TSElGVCkgKyAzID4gbnJfcGFnZXMgKQotICAgICAgICAgICAgcGFuaWMoIkRvbTAgYWxs b2NhdGlvbiB0b28gc21hbGwgZm9yIGluaXRpYWwgUC0+TSB0YWJsZSIpOwotCi0gICAgICAgIGlm ICggcGwxZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUp OwotICAgICAgICAgICAgcGwxZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBwbDJl ICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwyZSk7Ci0gICAg ICAgICAgICBwbDJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIHBsM2UgKQotICAg ICAgICB7Ci0gICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDNlKTsKLSAgICAgICAgICAg IHBsM2UgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHBsNGUgPSBsNHN0YXJ0ICsgbDRfdGFi bGVfb2Zmc2V0KHZwaHlzbWFwX3N0YXJ0KTsKLSAgICAgICAgaWYgKCAhbDRlX2dldF9pbnRwdGUo KnBsNGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFn ZShkLCAwKTsKLSAgICAgICAgICAgIGlmICggIXBhZ2UgKQotICAgICAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgICAvKiBObyBtYXBwaW5nLCBQR0NfYWxsb2NhdGVkICsgcGFnZS10YWJs ZSBwYWdlLiAqLwotICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5mbyA9IFBHQ19hbGxvY2F0ZWQg fCAyOwotICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDNfcGFnZV90 YWJsZSB8IFBHVF92YWxpZGF0ZWQgfCAxOwotICAgICAgICAgICAgcGwzZSA9IF9fbWFwX2RvbWFp bl9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgY2xlYXJfcGFnZShwbDNlKTsKLSAgICAgICAgICAg ICpwbDRlID0gbDRlX2Zyb21fcGFnZShwYWdlLCBMNF9QUk9UKTsKLSAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgICBwbDNlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obDRlX2dldF9wZm4oKnBsNGUp KSk7Ci0KLSAgICAgICAgcGwzZSArPSBsM190YWJsZV9vZmZzZXQodnBoeXNtYXBfc3RhcnQpOwot ICAgICAgICBpZiAoICFsM2VfZ2V0X2ludHB0ZSgqcGwzZSkgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBpZiAoIGNwdV9oYXNfcGFnZTFnYiAmJgotICAgICAgICAgICAgICAgICAhKHZwaHlzbWFw X3N0YXJ0ICYgKCgxVUwgPDwgTDNfUEFHRVRBQkxFX1NISUZUKSAtIDEpKSAmJgotICAgICAgICAg ICAgICAgICB2cGh5c21hcF9lbmQgPj0gdnBoeXNtYXBfc3RhcnQgKyAoMVVMIDw8IEwzX1BBR0VU QUJMRV9TSElGVCkgJiYKLSAgICAgICAgICAgICAgICAgKHBhZ2UgPSBhbGxvY19kb21oZWFwX3Bh Z2VzKGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMM19Q QUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NISUZULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCkpICE9IE5VTEwgKQotICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgICpwbDNlID0gbDNlX2Zyb21fcGFnZShwYWdlLCBMMV9QUk9UfF9QQUdFX0RJUlRZfF9Q QUdFX1BTRSk7Ci0gICAgICAgICAgICAgICAgdnBoeXNtYXBfc3RhcnQgKz0gMVVMIDw8IEwzX1BB R0VUQUJMRV9TSElGVDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICggKHBhZ2UgPSBhbGxvY19kb21oZWFwX3BhZ2UoZCwgMCkpID09IE5V TEwgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvKiBObyBtYXBwaW5n LCBQR0NfYWxsb2NhdGVkICsgcGFnZS10YWJsZSBwYWdlLiAqLwotICAgICAgICAgICAgcGFnZS0+ Y291bnRfaW5mbyA9IFBHQ19hbGxvY2F0ZWQgfCAyOwotICAgICAgICAgICAgcGFnZS0+dS5pbnVz ZS50eXBlX2luZm8gPSBQR1RfbDJfcGFnZV90YWJsZSB8IFBHVF92YWxpZGF0ZWQgfCAxOwotICAg ICAgICAgICAgcGwyZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgY2xl YXJfcGFnZShwbDJlKTsKLSAgICAgICAgICAgICpwbDNlID0gbDNlX2Zyb21fcGFnZShwYWdlLCBM M19QUk9UKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwbDJlID0gbWFw X2RvbWFpbl9wYWdlKF9tZm4obDNlX2dldF9wZm4oKnBsM2UpKSk7Ci0KLSAgICAgICAgcGwyZSAr PSBsMl90YWJsZV9vZmZzZXQodnBoeXNtYXBfc3RhcnQpOwotICAgICAgICBpZiAoICFsMmVfZ2V0 X2ludHB0ZSgqcGwyZSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICEodnBoeXNtYXBf c3RhcnQgJiAoKDFVTCA8PCBMMl9QQUdFVEFCTEVfU0hJRlQpIC0gMSkpICYmCi0gICAgICAgICAg ICAgICAgIHZwaHlzbWFwX2VuZCA+PSB2cGh5c21hcF9zdGFydCArICgxVUwgPDwgTDJfUEFHRVRB QkxFX1NISUZUKSAmJgotICAgICAgICAgICAgICAgICAocGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFn ZXMoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwyX1BB R0VUQUJMRV9TSElGVCAtIFBBR0VfU0hJRlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwKSkgIT0gTlVMTCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgKnBsMmUgPSBsMmVfZnJvbV9wYWdlKHBhZ2UsIEwxX1BST1R8X1BBR0VfRElSVFl8X1BB R0VfUFNFKTsKLSAgICAgICAgICAgICAgICBpZiAoIG9wdF9hbGxvd19zdXBlcnBhZ2UgKQotICAg ICAgICAgICAgICAgICAgICBnZXRfc3VwZXJwYWdlKHBhZ2VfdG9fbWZuKHBhZ2UpLCBkKTsKLSAg ICAgICAgICAgICAgICB2cGh5c21hcF9zdGFydCArPSAxVUwgPDwgTDJfUEFHRVRBQkxFX1NISUZU OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKCAocGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZShkLCAwKSkgPT0gTlVMTCApCi0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcsIFBHQ19hbGxvY2F0 ZWQgKyBwYWdlLXRhYmxlIHBhZ2UuICovCi0gICAgICAgICAgICBwYWdlLT5jb3VudF9pbmZvID0g UEdDX2FsbG9jYXRlZCB8IDI7Ci0gICAgICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyA9 IFBHVF9sMV9wYWdlX3RhYmxlIHwgUEdUX3ZhbGlkYXRlZCB8IDE7Ci0gICAgICAgICAgICBwbDFl ID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICBjbGVhcl9wYWdlKHBsMWUp OwotICAgICAgICAgICAgKnBsMmUgPSBsMmVfZnJvbV9wYWdlKHBhZ2UsIEwyX1BST1QpOwotICAg ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBsMWUgPSBtYXBfZG9tYWluX3BhZ2Uo X21mbihsMmVfZ2V0X3BmbigqcGwyZSkpKTsKLQotICAgICAgICBwbDFlICs9IGwxX3RhYmxlX29m ZnNldCh2cGh5c21hcF9zdGFydCk7Ci0gICAgICAgIEJVR19PTihsMWVfZ2V0X2ludHB0ZSgqcGwx ZSkpOwotICAgICAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlKGQsIDApOwotICAgICAgICBp ZiAoICFwYWdlICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICpwbDFlID0gbDFlX2Zy b21fcGFnZShwYWdlLCBMMV9QUk9UfF9QQUdFX0RJUlRZKTsKLSAgICAgICAgdnBoeXNtYXBfc3Rh cnQgKz0gUEFHRV9TSVpFOwotICAgICAgICB2cGh5c21hcF9zdGFydCAmPSBQQUdFX01BU0s7Ci0g ICAgfQotICAgIGlmICggIXBhZ2UgKQotICAgICAgICBwYW5pYygiTm90IGVub3VnaCBSQU0gZm9y IERPTTAgUC0+TSB0YWJsZSIpOwotCi0gICAgaWYgKCBwbDFlICkKLSAgICAgICAgdW5tYXBfZG9t YWluX3BhZ2UocGwxZSk7Ci0gICAgaWYgKCBwbDJlICkKLSAgICAgICAgdW5tYXBfZG9tYWluX3Bh Z2UocGwyZSk7Ci0gICAgaWYgKCBwbDNlICkKLSAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwz ZSk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShsNHN0YXJ0KTsKLX0KLQotc3RhdGljIGludCBf X2luaXQgc2V0dXBfcGVybWlzc2lvbnMoc3RydWN0IGRvbWFpbiAqZCkKK2ludCBfX2luaXQgZG9t MF9zZXR1cF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZG9tYWluICpkKQogewogICAgIHVuc2lnbmVkIGxv bmcgbWZuOwogICAgIHVuc2lnbmVkIGludCBpOwpAQCAtNzQzLDYzNiArNDkzLDYgQEAgc3RhdGlj IGludCBfX2luaXQgc2V0dXBfcGVybWlzc2lvbnMoc3RydWN0IGRvbWFpbiAqZCkKICAgICByZXR1 cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVjdF9kb20wX3B2KAotICAgIHN0 cnVjdCBkb21haW4gKmQsCi0gICAgY29uc3QgbW9kdWxlX3QgKmltYWdlLCB1bnNpZ25lZCBsb25n IGltYWdlX2hlYWRyb29tLAotICAgIG1vZHVsZV90ICppbml0cmQsCi0gICAgdm9pZCAqKCpib290 c3RyYXBfbWFwKShjb25zdCBtb2R1bGVfdCAqKSwKLSAgICBjaGFyICpjbWRsaW5lKQotewotICAg IGludCBpLCBjcHUsIHJjLCBjb21wYXRpYmxlLCBjb21wYXQzMiwgb3JkZXIsIG1hY2hpbmU7Ci0g ICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm4sIG1m bjsKLSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwotICAgIHVuc2lnbmVkIGxvbmcgbnJfcHRf cGFnZXM7Ci0gICAgdW5zaWduZWQgbG9uZyBhbGxvY19zcGZuOwotICAgIHVuc2lnbmVkIGxvbmcg YWxsb2NfZXBmbjsKLSAgICB1bnNpZ25lZCBsb25nIGluaXRyZF9wZm4gPSAtMSwgaW5pdHJkX21m biA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlID0gTlVMTDsKLSAgICBzdGFydF9pbmZvX3QgKnNpOwotICAgIHN0cnVjdCB2Y3B1ICp2ID0g ZC0+dmNwdVswXTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7Ci0gICAgdm9pZCAqaW1h Z2VfYmFzZSA9IGJvb3RzdHJhcF9tYXAoaW1hZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgaW1hZ2Vf bGVuID0gaW1hZ2UtPm1vZF9lbmQ7Ci0gICAgdm9pZCAqaW1hZ2Vfc3RhcnQgPSBpbWFnZV9iYXNl ICsgaW1hZ2VfaGVhZHJvb207Ci0gICAgdW5zaWduZWQgbG9uZyBpbml0cmRfbGVuID0gaW5pdHJk ID8gaW5pdHJkLT5tb2RfZW5kIDogMDsKLSAgICBsNF9wZ2VudHJ5X3QgKmw0dGFiID0gTlVMTCwg Kmw0c3RhcnQgPSBOVUxMOwotICAgIGwzX3BnZW50cnlfdCAqbDN0YWIgPSBOVUxMLCAqbDNzdGFy dCA9IE5VTEw7Ci0gICAgbDJfcGdlbnRyeV90ICpsMnRhYiA9IE5VTEwsICpsMnN0YXJ0ID0gTlVM TDsKLSAgICBsMV9wZ2VudHJ5X3QgKmwxdGFiID0gTlVMTCwgKmwxc3RhcnQgPSBOVUxMOwotCi0g ICAgLyoKLSAgICAgKiBUaGlzIGZ1bGx5IGRlc2NyaWJlcyB0aGUgbWVtb3J5IGxheW91dCBvZiB0 aGUgaW5pdGlhbCBkb21haW4uIEFsbCAKLSAgICAgKiAqX3N0YXJ0IGFkZHJlc3MgYXJlIHBhZ2Ut YWxpZ25lZCwgZXhjZXB0IHZfc3RhcnQgKGFuZCB2X2VuZCkgd2hpY2ggYXJlIAotICAgICAqIHN1 cGVycGFnZS1hbGlnbmVkLgotICAgICAqLwotICAgIHN0cnVjdCBlbGZfYmluYXJ5IGVsZjsKLSAg ICBzdHJ1Y3QgZWxmX2RvbV9wYXJtcyBwYXJtczsKLSAgICB1bnNpZ25lZCBsb25nIHZrZXJuX3N0 YXJ0OwotICAgIHVuc2lnbmVkIGxvbmcgdmtlcm5fZW5kOwotICAgIHVuc2lnbmVkIGxvbmcgdmlu aXRyZF9zdGFydDsKLSAgICB1bnNpZ25lZCBsb25nIHZpbml0cmRfZW5kOwotICAgIHVuc2lnbmVk IGxvbmcgdnBoeXNtYXBfc3RhcnQ7Ci0gICAgdW5zaWduZWQgbG9uZyB2cGh5c21hcF9lbmQ7Ci0g ICAgdW5zaWduZWQgbG9uZyB2c3RhcnRpbmZvX3N0YXJ0OwotICAgIHVuc2lnbmVkIGxvbmcgdnN0 YXJ0aW5mb19lbmQ7Ci0gICAgdW5zaWduZWQgbG9uZyB2c3RhY2tfc3RhcnQ7Ci0gICAgdW5zaWdu ZWQgbG9uZyB2c3RhY2tfZW5kOwotICAgIHVuc2lnbmVkIGxvbmcgdnB0X3N0YXJ0OwotICAgIHVu c2lnbmVkIGxvbmcgdnB0X2VuZDsKLSAgICB1bnNpZ25lZCBsb25nIHZfc3RhcnQ7Ci0gICAgdW5z aWduZWQgbG9uZyB2X2VuZDsKLQotICAgIC8qIE1hY2hpbmUgYWRkcmVzcyBvZiBuZXh0IGNhbmRp ZGF0ZSBwYWdlLXRhYmxlIHBhZ2UuICovCi0gICAgcGFkZHJfdCBtcHRfYWxsb2M7Ci0KLSAgICBw cmludGsoIioqKiBMT0FESU5HIERPTUFJTiAwICoqKlxuIik7Ci0KLSAgICBkLT5tYXhfcGFnZXMg PSB+MFU7Ci0KLSAgICBpZiAoIChyYyA9IGJ6aW1hZ2VfcGFyc2UoaW1hZ2VfYmFzZSwgJmltYWdl X3N0YXJ0LCAmaW1hZ2VfbGVuKSkgIT0gMCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIGlm ICggKHJjID0gZWxmX2luaXQoJmVsZiwgaW1hZ2Vfc3RhcnQsIGltYWdlX2xlbikpICE9IDAgKQot ICAgICAgICByZXR1cm4gcmM7Ci0jaWZkZWYgQ09ORklHX1ZFUkJPU0VfREVCVUcKLSAgICBlbGZf c2V0X3ZlcmJvc2UoJmVsZik7Ci0jZW5kaWYKLSAgICBlbGZfcGFyc2VfYmluYXJ5KCZlbGYpOwot ICAgIGlmICggKHJjID0gZWxmX3hlbl9wYXJzZSgmZWxmLCAmcGFybXMpKSAhPSAwICkKLSAgICAg ICAgZ290byBvdXQ7Ci0KLSAgICAvKiBjb21wYXRpYmlsaXR5IGNoZWNrICovCi0gICAgY29tcGF0 aWJsZSA9IDA7Ci0gICAgY29tcGF0MzIgICA9IDA7Ci0gICAgbWFjaGluZSA9IGVsZl91dmFsKCZl bGYsIGVsZi5laGRyLCBlX21hY2hpbmUpOwotICAgIHByaW50aygiIFhlbiAga2VybmVsOiA2NC1i aXQsIGxzYiwgY29tcGF0MzJcbiIpOwotICAgIGlmIChlbGZfMzJiaXQoJmVsZikgJiYgcGFybXMu cGFlID09IFhFTl9QQUVfQklNT0RBTCkKLSAgICAgICAgcGFybXMucGFlID0gWEVOX1BBRV9FWFRD UjM7Ci0gICAgaWYgKGVsZl8zMmJpdCgmZWxmKSAmJiBwYXJtcy5wYWUgJiYgbWFjaGluZSA9PSBF TV8zODYpCi0gICAgewotICAgICAgICBjb21wYXQzMiA9IDE7Ci0gICAgICAgIGNvbXBhdGlibGUg PSAxOwotICAgIH0KLSAgICBpZiAoZWxmXzY0Yml0KCZlbGYpICYmIG1hY2hpbmUgPT0gRU1fWDg2 XzY0KQotICAgICAgICBjb21wYXRpYmxlID0gMTsKLSAgICBwcmludGsoIiBEb20wIGtlcm5lbDog JXMlcywgJXMsIHBhZGRyICUjIiBQUkl4NjQgIiAtPiAlIyIgUFJJeDY0ICJcbiIsCi0gICAgICAg ICAgIGVsZl82NGJpdCgmZWxmKSA/ICI2NC1iaXQiIDogIjMyLWJpdCIsCi0gICAgICAgICAgIHBh cm1zLnBhZSAgICAgICA/ICIsIFBBRSIgIDogIiIsCi0gICAgICAgICAgIGVsZl9tc2IoJmVsZikg ICA/ICJtc2IiICAgIDogImxzYiIsCi0gICAgICAgICAgIGVsZi5wc3RhcnQsIGVsZi5wZW5kKTsK LSAgICBpZiAoIGVsZi5ic2Rfc3ltdGFiX3BzdGFydCApCi0gICAgICAgIHByaW50aygiIERvbTAg c3ltYm9sIG1hcCAlIyIgUFJJeDY0ICIgLT4gJSMiIFBSSXg2NCAiXG4iLAotICAgICAgICAgICAg ICAgZWxmLmJzZF9zeW10YWJfcHN0YXJ0LCBlbGYuYnNkX3N5bXRhYl9wZW5kKTsKLQotICAgIGlm ICggIWNvbXBhdGlibGUgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJNaXNtYXRjaCBiZXR3ZWVu IFhlbiBhbmQgRE9NMCBrZXJuZWxcbiIpOwotICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAg IGdvdG8gb3V0OwotICAgIH0KLQotICAgIGlmICggcGFybXMuZWxmX25vdGVzW1hFTl9FTEZOT1RF X1NVUFBPUlRFRF9GRUFUVVJFU10udHlwZSAhPSBYRU5fRU5UX05PTkUgKQotICAgIHsKLSAgICAg ICAgaWYgKCAhdGVzdF9iaXQoWEVORkVBVF9kb20wLCBwYXJtcy5mX3N1cHBvcnRlZCkgKQotICAg ICAgICB7Ci0gICAgICAgICAgICBwcmludGsoIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IERvbTAg b3BlcmF0aW9uXG4iKTsKLSAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAgIGdv dG8gb3V0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBjb21wYXQzMiApCi0gICAgewot ICAgICAgICBkLT5hcmNoLmlzXzMyYml0X3B2ID0gZC0+YXJjaC5oYXNfMzJiaXRfc2hpbmZvID0g MTsKLSAgICAgICAgdi0+dmNwdV9pbmZvID0gKHZvaWQgKikmZC0+c2hhcmVkX2luZm8tPmNvbXBh dC52Y3B1X2luZm9bMF07Ci0gICAgICAgIGlmICggc2V0dXBfY29tcGF0X2FyZ194bGF0KHYpICE9 IDAgKQotICAgICAgICAgICAgQlVHKCk7Ci0gICAgfQotCi0gICAgbnJfcGFnZXMgPSBjb21wdXRl X2RvbTBfbnJfcGFnZXMoZCwgJnBhcm1zLCBpbml0cmRfbGVuKTsKLQotICAgIGlmICggcGFybXMu cGFlID09IFhFTl9QQUVfRVhUQ1IzICkKLSAgICAgICAgICAgIHNldF9iaXQoVk1BU1NUX1RZUEVf cGFlX2V4dGVuZGVkX2NyMywgJmQtPnZtX2Fzc2lzdCk7Ci0KLSAgICBpZiAoIChwYXJtcy52aXJ0 X2h2X3N0YXJ0X2xvdyAhPSBVTlNFVF9BRERSKSAmJiBlbGZfMzJiaXQoJmVsZikgKQotICAgIHsK LSAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gKDFVTCA8PCBMMl9QQUdFVEFCTEVfU0hJRlQp IC0gMTsKLSAgICAgICAgdmFsdWUgPSAocGFybXMudmlydF9odl9zdGFydF9sb3cgKyBtYXNrKSAm IH5tYXNrOwotICAgICAgICBCVUdfT04oIWlzX3B2XzMyYml0X2RvbWFpbihkKSk7Ci0gICAgICAg IGlmICggdmFsdWUgPiBfX0hZUEVSVklTT1JfQ09NUEFUX1ZJUlRfU1RBUlQgKQotICAgICAgICAg ICAgcGFuaWMoIkRvbWFpbiAwIGV4cGVjdHMgdG9vIGhpZ2ggYSBoeXBlcnZpc29yIHN0YXJ0IGFk ZHJlc3MiKTsKLSAgICAgICAgSFlQRVJWSVNPUl9DT01QQVRfVklSVF9TVEFSVChkKSA9Ci0gICAg ICAgICAgICBtYXhfdCh1bnNpZ25lZCBpbnQsIG0ycF9jb21wYXRfdnN0YXJ0LCB2YWx1ZSk7Ci0g ICAgfQotCi0gICAgaWYgKCAocGFybXMucDJtX2Jhc2UgIT0gVU5TRVRfQUREUikgJiYgZWxmXzMy Yml0KCZlbGYpICkKLSAgICB7Ci0gICAgICAgIHByaW50ayhYRU5MT0dfV0FSTklORyAiUDJNIHRh YmxlIGJhc2UgaWdub3JlZFxuIik7Ci0gICAgICAgIHBhcm1zLnAybV9iYXNlID0gVU5TRVRfQURE UjsKLSAgICB9Ci0KLSAgICBkb21haW5fc2V0X2FsbG9jX2JpdHNpemUoZCk7Ci0KLSAgICAvKgot ICAgICAqIFdoeSBkbyB3ZSBuZWVkIHRoaXM/IFRoZSBudW1iZXIgb2YgcGFnZS10YWJsZSBmcmFt ZXMgZGVwZW5kcyBvbiB0aGUgCi0gICAgICogc2l6ZSBvZiB0aGUgYm9vdHN0cmFwIGFkZHJlc3Mg c3BhY2UuIEJ1dCB0aGUgc2l6ZSBvZiB0aGUgYWRkcmVzcyBzcGFjZSAKLSAgICAgKiBkZXBlbmRz IG9uIHRoZSBudW1iZXIgb2YgcGFnZS10YWJsZSBmcmFtZXMgKHNpbmNlIGVhY2ggb25lIGlzIG1h cHBlZCAKLSAgICAgKiByZWFkLW9ubHkpLiBXZSBoYXZlIGEgcGFpciBvZiBzaW11bHRhbmVvdXMg ZXF1YXRpb25zIGluIHR3byB1bmtub3ducywgCi0gICAgICogd2hpY2ggd2Ugc29sdmUgYnkgZXho YXVzdGl2ZSBzZWFyY2guCi0gICAgICovCi0gICAgdl9zdGFydCAgICAgICAgICA9IHBhcm1zLnZp cnRfYmFzZTsKLSAgICB2a2Vybl9zdGFydCAgICAgID0gcGFybXMudmlydF9rc3RhcnQ7Ci0gICAg dmtlcm5fZW5kICAgICAgICA9IHBhcm1zLnZpcnRfa2VuZDsKLSAgICBpZiAoIHBhcm1zLnVubWFw cGVkX2luaXRyZCApCi0gICAgewotICAgICAgICB2aW5pdHJkX3N0YXJ0ICA9IHZpbml0cmRfZW5k ID0gMDsKLSAgICAgICAgdnBoeXNtYXBfc3RhcnQgPSByb3VuZF9wZ3VwKHZrZXJuX2VuZCk7Ci0g ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZpbml0cmRfc3RhcnQgID0gcm91bmRfcGd1 cCh2a2Vybl9lbmQpOwotICAgICAgICB2aW5pdHJkX2VuZCAgICA9IHZpbml0cmRfc3RhcnQgKyBp bml0cmRfbGVuOwotICAgICAgICB2cGh5c21hcF9zdGFydCA9IHJvdW5kX3BndXAodmluaXRyZF9l bmQpOwotICAgIH0KLSAgICB2cGh5c21hcF9lbmQgICAgID0gdnBoeXNtYXBfc3RhcnQgKyAobnJf cGFnZXMgKiAoIWlzX3B2XzMyYml0X2RvbWFpbihkKSA/Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSA6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv Zih1bnNpZ25lZCBpbnQpKSk7Ci0gICAgaWYgKCBwYXJtcy5wMm1fYmFzZSAhPSBVTlNFVF9BRERS ICkKLSAgICAgICAgdnBoeXNtYXBfZW5kID0gdnBoeXNtYXBfc3RhcnQ7Ci0gICAgdnN0YXJ0aW5m b19zdGFydCA9IHJvdW5kX3BndXAodnBoeXNtYXBfZW5kKTsKLSAgICB2c3RhcnRpbmZvX2VuZCAg ID0gKHZzdGFydGluZm9fc3RhcnQgKwotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0 cnVjdCBzdGFydF9pbmZvKSArCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0 IGRvbTBfdmdhX2NvbnNvbGVfaW5mbykpOwotCi0gICAgdnB0X3N0YXJ0ICAgICAgICA9IHJvdW5k X3BndXAodnN0YXJ0aW5mb19lbmQpOwotICAgIGZvciAoIG5yX3B0X3BhZ2VzID0gMjsgOyBucl9w dF9wYWdlcysrICkKLSAgICB7Ci0gICAgICAgIHZwdF9lbmQgICAgICAgICAgPSB2cHRfc3RhcnQg KyAobnJfcHRfcGFnZXMgKiBQQUdFX1NJWkUpOwotICAgICAgICB2c3RhY2tfc3RhcnQgICAgID0g dnB0X2VuZDsKLSAgICAgICAgdnN0YWNrX2VuZCAgICAgICA9IHZzdGFja19zdGFydCArIFBBR0Vf U0laRTsKLSAgICAgICAgdl9lbmQgICAgICAgICAgICA9ICh2c3RhY2tfZW5kICsgKDFVTDw8MjIp LTEpICYgfigoMVVMPDwyMiktMSk7Ci0gICAgICAgIGlmICggKHZfZW5kIC0gdnN0YWNrX2VuZCkg PCAoNTEyVUwgPDwgMTApICkKLSAgICAgICAgICAgIHZfZW5kICs9IDFVTCA8PCAyMjsgLyogQWRk IGV4dHJhIDRNQiB0byBnZXQgPj0gNTEya0IgcGFkZGluZy4gKi8KLSNkZWZpbmUgTlIoX2wsX2gs X3MpIFwKLSAgICAoKCgoKF9oKSArICgoMVVMPDwoX3MpKS0xKSkgJiB+KCgxVUw8PChfcykpLTEp KSAtIFwKLSAgICAgICAoKF9sKSAmIH4oKDFVTDw8KF9zKSktMSkpKSA+PiAoX3MpKQotICAgICAg ICBpZiAoICghaXNfcHZfMzJiaXRfZG9tYWluKGQpICsgLyogIyBMNCAqLwotICAgICAgICAgICAg ICBOUih2X3N0YXJ0LCB2X2VuZCwgTDRfUEFHRVRBQkxFX1NISUZUKSArIC8qICMgTDMgKi8KLSAg ICAgICAgICAgICAgKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPwotICAgICAgICAgICAgICAgTlIo dl9zdGFydCwgdl9lbmQsIEwzX1BBR0VUQUJMRV9TSElGVCkgOiAvKiAjIEwyICovCi0gICAgICAg ICAgICAgICA0KSArIC8qICMgY29tcGF0IEwyICovCi0gICAgICAgICAgICAgIE5SKHZfc3RhcnQs IHZfZW5kLCBMMl9QQUdFVEFCTEVfU0hJRlQpKSAgLyogIyBMMSAqLwotICAgICAgICAgICAgIDw9 IG5yX3B0X3BhZ2VzICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNvdW50ID0g dl9lbmQgLSB2X3N0YXJ0OwotICAgIGlmICggdmluaXRyZF9zdGFydCApCi0gICAgICAgIGNvdW50 IC09IFBBR0VfQUxJR04oaW5pdHJkX2xlbik7Ci0gICAgb3JkZXIgPSBnZXRfb3JkZXJfZnJvbV9i eXRlcyhjb3VudCk7Ci0gICAgaWYgKCAoMVVMIDw8IG9yZGVyKSArIFBGTl9VUChpbml0cmRfbGVu KSA+IG5yX3BhZ2VzICkKLSAgICAgICAgcGFuaWMoIkRvbWFpbiAwIGFsbG9jYXRpb24gaXMgdG9v IHNtYWxsIGZvciBrZXJuZWwgaW1hZ2UiKTsKLQotICAgIGlmICggcGFybXMucDJtX2Jhc2UgIT0g VU5TRVRfQUREUiApCi0gICAgewotICAgICAgICB2cGh5c21hcF9zdGFydCA9IHBhcm1zLnAybV9i YXNlOwotICAgICAgICB2cGh5c21hcF9lbmQgICA9IHZwaHlzbWFwX3N0YXJ0ICsgbnJfcGFnZXMg KiBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci0gICAgfQotICAgIHBhZ2UgPSBhbGxvY19kb21oZWFw X3BhZ2VzKGQsIG9yZGVyLCAwKTsKLSAgICBpZiAoIHBhZ2UgPT0gTlVMTCApCi0gICAgICAgIHBh bmljKCJOb3QgZW5vdWdoIFJBTSBmb3IgZG9tYWluIDAgYWxsb2NhdGlvbiIpOwotICAgIGFsbG9j X3NwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBhbGxvY19lcGZuID0gYWxsb2Nfc3BmbiAr IGQtPnRvdF9wYWdlczsKLQotICAgIGlmICggaW5pdHJkX2xlbiApCi0gICAgewotICAgICAgICBp bml0cmRfcGZuID0gdmluaXRyZF9zdGFydCA/Ci0gICAgICAgICAgICAgICAgICAgICAodmluaXRy ZF9zdGFydCAtIHZfc3RhcnQpID4+IFBBR0VfU0hJRlQgOgotICAgICAgICAgICAgICAgICAgICAg ZC0+dG90X3BhZ2VzOwotICAgICAgICBpbml0cmRfbWZuID0gbWZuID0gaW5pdHJkLT5tb2Rfc3Rh cnQ7Ci0gICAgICAgIGNvdW50ID0gUEZOX1VQKGluaXRyZF9sZW4pOwotICAgICAgICBpZiAoIGQt PmFyY2gucGh5c2FkZHJfYml0c2l6ZSAmJgotICAgICAgICAgICAgICgobWZuICsgY291bnQgLSAx KSA+PiAoZC0+YXJjaC5waHlzYWRkcl9iaXRzaXplIC0gUEFHRV9TSElGVCkpICkKLSAgICAgICAg ewotICAgICAgICAgICAgb3JkZXIgPSBnZXRfb3JkZXJfZnJvbV9wYWdlcyhjb3VudCk7Ci0gICAg ICAgICAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgMCk7Ci0gICAgICAg ICAgICBpZiAoICFwYWdlICkKLSAgICAgICAgICAgICAgICBwYW5pYygiTm90IGVub3VnaCBSQU0g Zm9yIGRvbWFpbiAwIGluaXRyZCIpOwotICAgICAgICAgICAgZm9yICggY291bnQgPSAtY291bnQ7 IG9yZGVyLS07ICkKLSAgICAgICAgICAgICAgICBpZiAoIGNvdW50ICYgKDFVTCA8PCBvcmRlcikg KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZV9kb21oZWFwX3Bh Z2VzKHBhZ2UsIG9yZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgcGFnZSArPSAxVUwgPDwgb3Jk ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgbWVtY3B5KHBhZ2VfdG9fdmlydChw YWdlKSwgbWZuX3RvX3ZpcnQoaW5pdHJkLT5tb2Rfc3RhcnQpLAotICAgICAgICAgICAgICAgICAg IGluaXRyZF9sZW4pOwotICAgICAgICAgICAgbXB0X2FsbG9jID0gKHBhZGRyX3QpaW5pdHJkLT5t b2Rfc3RhcnQgPDwgUEFHRV9TSElGVDsKLSAgICAgICAgICAgIGluaXRfZG9taGVhcF9wYWdlcyht cHRfYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXB0X2FsbG9jICsgUEFH RV9BTElHTihpbml0cmRfbGVuKSk7Ci0gICAgICAgICAgICBpbml0cmQtPm1vZF9zdGFydCA9IGlu aXRyZF9tZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g ICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICggY291bnQtLSApCi0gICAgICAgICAgICAgICAg aWYgKCBhc3NpZ25fcGFnZXMoZCwgbWZuX3RvX3BhZ2UobWZuKyspLCAwLCAwKSApCi0gICAgICAg ICAgICAgICAgICAgIEJVRygpOwotICAgICAgICB9Ci0gICAgICAgIGluaXRyZC0+bW9kX2VuZCA9 IDA7Ci0gICAgfQotCi0gICAgcHJpbnRrKCJQSFlTSUNBTCBNRU1PUlkgQVJSQU5HRU1FTlQ6XG4i Ci0gICAgICAgICAgICIgRG9tMCBhbGxvYy46ICAgJSJQUklwYWRkciItPiUiUFJJcGFkZHIsCi0g ICAgICAgICAgIHBmbl90b19wYWRkcihhbGxvY19zcGZuKSwgcGZuX3RvX3BhZGRyKGFsbG9jX2Vw Zm4pKTsKLSAgICBpZiAoIGQtPnRvdF9wYWdlcyA8IG5yX3BhZ2VzICkKLSAgICAgICAgcHJpbnRr KCIgKCVsdSBwYWdlcyB0byBiZSBhbGxvY2F0ZWQpIiwKLSAgICAgICAgICAgICAgIG5yX3BhZ2Vz IC0gZC0+dG90X3BhZ2VzKTsKLSAgICBpZiAoIGluaXRyZCApCi0gICAgewotICAgICAgICBtcHRf YWxsb2MgPSAocGFkZHJfdClpbml0cmQtPm1vZF9zdGFydCA8PCBQQUdFX1NISUZUOwotICAgICAg ICBwcmludGsoIlxuIEluaXQuIHJhbWRpc2s6ICUiUFJJcGFkZHIiLT4lIlBSSXBhZGRyLAotICAg ICAgICAgICAgICAgbXB0X2FsbG9jLCBtcHRfYWxsb2MgKyBpbml0cmRfbGVuKTsKLSAgICB9Ci0g ICAgcHJpbnRrKCJcblZJUlRVQUwgTUVNT1JZIEFSUkFOR0VNRU5UOlxuIgotICAgICAgICAgICAi IExvYWRlZCBrZXJuZWw6ICVwLT4lcFxuIgotICAgICAgICAgICAiIEluaXQuIHJhbWRpc2s6ICVw LT4lcFxuIgotICAgICAgICAgICAiIFBoeXMtTWFjaCBtYXA6ICVwLT4lcFxuIgotICAgICAgICAg ICAiIFN0YXJ0IGluZm86ICAgICVwLT4lcFxuIgotICAgICAgICAgICAiIFBhZ2UgdGFibGVzOiAg ICVwLT4lcFxuIgotICAgICAgICAgICAiIEJvb3Qgc3RhY2s6ICAgICVwLT4lcFxuIgotICAgICAg ICAgICAiIFRPVEFMOiAgICAgICAgICVwLT4lcFxuIiwKLSAgICAgICAgICAgX3Aodmtlcm5fc3Rh cnQpLCBfcCh2a2Vybl9lbmQpLAotICAgICAgICAgICBfcCh2aW5pdHJkX3N0YXJ0KSwgX3Aodmlu aXRyZF9lbmQpLAotICAgICAgICAgICBfcCh2cGh5c21hcF9zdGFydCksIF9wKHZwaHlzbWFwX2Vu ZCksCi0gICAgICAgICAgIF9wKHZzdGFydGluZm9fc3RhcnQpLCBfcCh2c3RhcnRpbmZvX2VuZCks Ci0gICAgICAgICAgIF9wKHZwdF9zdGFydCksIF9wKHZwdF9lbmQpLAotICAgICAgICAgICBfcCh2 c3RhY2tfc3RhcnQpLCBfcCh2c3RhY2tfZW5kKSwKLSAgICAgICAgICAgX3Aodl9zdGFydCksIF9w KHZfZW5kKSk7Ci0gICAgcHJpbnRrKCIgRU5UUlkgQUREUkVTUzogJXBcbiIsIF9wKHBhcm1zLnZp cnRfZW50cnkpKTsKLQotICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOwotCi0gICAgbXB0 X2FsbG9jID0gKHZwdF9zdGFydCAtIHZfc3RhcnQpICsgcGZuX3RvX3BhZGRyKGFsbG9jX3NwZm4p OwotICAgIGlmICggdmluaXRyZF9zdGFydCApCi0gICAgICAgIG1wdF9hbGxvYyAtPSBQQUdFX0FM SUdOKGluaXRyZF9sZW4pOwotCi0gICAgLyogT3ZlcmxhcCB3aXRoIFhlbiBwcm90ZWN0ZWQgYXJl YT8gKi8KLSAgICBpZiAoICFpc19wdl8zMmJpdF9kb21haW4oZCkgPwotICAgICAgICAgKCh2X3N0 YXJ0IDwgSFlQRVJWSVNPUl9WSVJUX0VORCkgJiYKLSAgICAgICAgICAodl9lbmQgPiBIWVBFUlZJ U09SX1ZJUlRfU1RBUlQpKSA6Ci0gICAgICAgICAodl9lbmQgPiBIWVBFUlZJU09SX0NPTVBBVF9W SVJUX1NUQVJUKGQpKSApCi0gICAgewotICAgICAgICBwcmludGsoIkRPTTAgaW1hZ2Ugb3Zlcmxh cHMgd2l0aCBYZW4gcHJpdmF0ZSBhcmVhLlxuIik7Ci0gICAgICAgIHJjID0gLUVJTlZBTDsKLSAg ICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkg KQotICAgIHsKLSAgICAgICAgdi0+YXJjaC5wdl92Y3B1LmZhaWxzYWZlX2NhbGxiYWNrX2NzID0g RkxBVF9DT01QQVRfS0VSTkVMX0NTOwotICAgICAgICB2LT5hcmNoLnB2X3ZjcHUuZXZlbnRfY2Fs bGJhY2tfY3MgICAgPSBGTEFUX0NPTVBBVF9LRVJORUxfQ1M7Ci0gICAgfQotCi0gICAgLyogV0FS TklORzogVGhlIG5ldyBkb21haW4gbXVzdCBoYXZlIGl0cyAncHJvY2Vzc29yJyBmaWVsZCBmaWxs ZWQgaW4hICovCi0gICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKLSAgICB7Ci0gICAg ICAgIG1hZGRyX3RvX3BhZ2UobXB0X2FsbG9jKS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDRf cGFnZV90YWJsZTsKLSAgICAgICAgbDRzdGFydCA9IGw0dGFiID0gX192YShtcHRfYWxsb2MpOyBt cHRfYWxsb2MgKz0gUEFHRV9TSVpFOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBw YWdlID0gYWxsb2NfZG9taGVhcF9wYWdlKGQsIE1FTUZfbm9fb3duZXIpOwotICAgICAgICBpZiAo ICFwYWdlICkKLSAgICAgICAgICAgIHBhbmljKCJOb3QgZW5vdWdoIFJBTSBmb3IgZG9tYWluIDAg UE1MNCIpOwotICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyA9IFBHVF9sNF9wYWdlX3Rh YmxlfFBHVF92YWxpZGF0ZWR8MTsKLSAgICAgICAgbDRzdGFydCA9IGw0dGFiID0gcGFnZV90b192 aXJ0KHBhZ2UpOwotICAgICAgICBtYWRkcl90b19wYWdlKG1wdF9hbGxvYyktPnUuaW51c2UudHlw ZV9pbmZvID0gUEdUX2wzX3BhZ2VfdGFibGU7Ci0gICAgICAgIGwzc3RhcnQgPSBfX3ZhKG1wdF9h bGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJWkU7Ci0gICAgfQotICAgIGNsZWFyX3BhZ2UobDR0 YWIpOwotICAgIGluaXRfZ3Vlc3RfbDRfdGFibGUobDR0YWIsIGQsIDApOwotICAgIHYtPmFyY2gu Z3Vlc3RfdGFibGUgPSBwYWdldGFibGVfZnJvbV9wYWRkcihfX3BhKGw0c3RhcnQpKTsKLSAgICBp ZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSApCi0gICAgICAgIHYtPmFyY2guZ3Vlc3RfdGFibGVf dXNlciA9IHYtPmFyY2guZ3Vlc3RfdGFibGU7Ci0KLSAgICBsNHRhYiArPSBsNF90YWJsZV9vZmZz ZXQodl9zdGFydCk7Ci0gICAgcGZuID0gYWxsb2Nfc3BmbjsKLSAgICBmb3IgKCBjb3VudCA9IDA7 IGNvdW50IDwgKCh2X2VuZC12X3N0YXJ0KT4+UEFHRV9TSElGVCk7IGNvdW50KysgKQotICAgIHsK LSAgICAgICAgaWYgKCAhKCh1bnNpZ25lZCBsb25nKWwxdGFiICYgKFBBR0VfU0laRS0xKSkgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBtYWRkcl90b19wYWdlKG1wdF9hbGxvYyktPnUuaW51c2Uu dHlwZV9pbmZvID0gUEdUX2wxX3BhZ2VfdGFibGU7Ci0gICAgICAgICAgICBsMXN0YXJ0ID0gbDF0 YWIgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJWkU7Ci0gICAgICAgICAg ICBjbGVhcl9wYWdlKGwxdGFiKTsKLSAgICAgICAgICAgIGlmICggY291bnQgPT0gMCApCi0gICAg ICAgICAgICAgICAgbDF0YWIgKz0gbDFfdGFibGVfb2Zmc2V0KHZfc3RhcnQpOwotICAgICAgICAg ICAgaWYgKCAhKCh1bnNpZ25lZCBsb25nKWwydGFiICYgKFBBR0VfU0laRS0xKSkgKQotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIG1hZGRyX3RvX3BhZ2UobXB0X2FsbG9jKS0+dS5pbnVz ZS50eXBlX2luZm8gPSBQR1RfbDJfcGFnZV90YWJsZTsKLSAgICAgICAgICAgICAgICBsMnN0YXJ0 ID0gbDJ0YWIgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJWkU7Ci0gICAg ICAgICAgICAgICAgY2xlYXJfcGFnZShsMnRhYik7Ci0gICAgICAgICAgICAgICAgaWYgKCBjb3Vu dCA9PSAwICkKLSAgICAgICAgICAgICAgICAgICAgbDJ0YWIgKz0gbDJfdGFibGVfb2Zmc2V0KHZf c3RhcnQpOwotICAgICAgICAgICAgICAgIGlmICggISgodW5zaWduZWQgbG9uZylsM3RhYiAmIChQ QUdFX1NJWkUtMSkpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICggY291bnQgfHwgIWwzc3RhcnQgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBtYWRkcl90b19wYWdlKG1wdF9hbGxvYyktPnUuaW51c2UudHlwZV9pbmZv ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1RfbDNfcGFnZV90YWJsZTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGwzc3RhcnQgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyAr PSBQQUdFX1NJWkU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg bDN0YWIgPSBsM3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICBjbGVhcl9wYWdlKGwzdGFiKTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3VudCA9PSAwICkKLSAgICAgICAgICAgICAgICAg ICAgICAgIGwzdGFiICs9IGwzX3RhYmxlX29mZnNldCh2X3N0YXJ0KTsKLSAgICAgICAgICAgICAg ICAgICAgKmw0dGFiID0gbDRlX2Zyb21fcGFkZHIoX19wYShsM3N0YXJ0KSwgTDRfUFJPVCk7Ci0g ICAgICAgICAgICAgICAgICAgIGw0dGFiKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICpsM3RhYiA9IGwzZV9mcm9tX3BhZGRyKF9fcGEobDJzdGFydCksIEwzX1BST1QpOwot ICAgICAgICAgICAgICAgIGwzdGFiKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqbDJ0 YWIgPSBsMmVfZnJvbV9wYWRkcihfX3BhKGwxc3RhcnQpLCBMMl9QUk9UKTsKLSAgICAgICAgICAg IGwydGFiKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBjb3VudCA8IGluaXRyZF9wZm4gfHwg Y291bnQgPj0gaW5pdHJkX3BmbiArIFBGTl9VUChpbml0cmRfbGVuKSApCi0gICAgICAgICAgICBt Zm4gPSBwZm4rKzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWZuID0gaW5pdHJkX21mbisr OwotICAgICAgICAqbDF0YWIgPSBsMWVfZnJvbV9wZm4obWZuLCAoIWlzX3B2XzMyYml0X2RvbWFp bihkKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMMV9QUk9UIDogQ09N UEFUX0wxX1BST1QpKTsKLSAgICAgICAgbDF0YWIrKzsKLQotICAgICAgICBpZiAoICFwYWdpbmdf bW9kZV90cmFuc2xhdGUoZCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYWdlID0gbWZuX3Rv X3BhZ2UobWZuKTsKLSAgICAgICAgICAgIGlmICggIXBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYm Ci0gICAgICAgICAgICAgICAgICFnZXRfcGFnZV9hbmRfdHlwZShwYWdlLCBkLCBQR1Rfd3JpdGFi bGVfcGFnZSkgKQotICAgICAgICAgICAgICAgIEJVRygpOwotICAgICAgICB9Ci0gICAgfQotCi0g ICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQotICAgIHsKLSAgICAgICAgLyogRW5zdXJl IHRoZSBmaXJzdCBmb3VyIEwzIGVudHJpZXMgYXJlIGFsbCBwb3B1bGF0ZWQuICovCi0gICAgICAg IGZvciAoIGkgPSAwLCBsM3RhYiA9IGwzc3RhcnQ7IGkgPCA0OyArK2ksICsrbDN0YWIgKQotICAg ICAgICB7Ci0gICAgICAgICAgICBpZiAoICFsM2VfZ2V0X2ludHB0ZSgqbDN0YWIpICkKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtYWRkcl90b19wYWdlKG1wdF9hbGxvYyktPnUuaW51 c2UudHlwZV9pbmZvID0gUEdUX2wyX3BhZ2VfdGFibGU7Ci0gICAgICAgICAgICAgICAgbDJ0YWIg PSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJWkU7Ci0gICAgICAgICAgICAg ICAgY2xlYXJfcGFnZShsMnRhYik7Ci0gICAgICAgICAgICAgICAgKmwzdGFiID0gbDNlX2Zyb21f cGFkZHIoX19wYShsMnRhYiksIEwzX1BST1QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKCBpID09IDMgKQotICAgICAgICAgICAgICAgIGwzZV9nZXRfcGFnZSgqbDN0YWIpLT51Lmlu dXNlLnR5cGVfaW5mbyB8PSBQR1RfcGFlX3hlbl9sMjsKLSAgICAgICAgfQotICAgICAgICAvKiBJ bnN0YWxsIHJlYWQtb25seSBndWVzdCB2aXNpYmxlIE1QVCBtYXBwaW5nLiAqLwotICAgICAgICBs MnRhYiA9IGwzZV90b19sMmUobDNzdGFydFszXSk7Ci0gICAgICAgIG1lbWNweSgmbDJ0YWJbQ09N UEFUX0wyX1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVChkKV0sCi0gICAgICAgICAgICAgICAmY29t cGF0X2lkbGVfcGdfdGFibGVfbDJbbDJfdGFibGVfb2Zmc2V0KEhJUk9fQ09NUEFUX01QVF9WSVJU X1NUQVJUKV0sCi0gICAgICAgICAgICAgICBDT01QQVRfTDJfUEFHRVRBQkxFX1hFTl9TTE9UUyhk KSAqIHNpemVvZigqbDJ0YWIpKTsKLSAgICB9Ci0KLSAgICAvKiBQYWdlcyB0aGF0IGFyZSBwYXJ0 IG9mIHBhZ2UgdGFibGVzIG11c3QgYmUgcmVhZCBvbmx5LiAqLwotICAgIGlmICAoIGlzX3B2X2Rv bWFpbihkKSApCi0gICAgICAgIG1hcmtfcHZfcHRfcGFnZXNfcmRvbmx5KGQsIGw0c3RhcnQsIHZw dF9zdGFydCwgbnJfcHRfcGFnZXMpOwotCi0gICAgLyogTWFzayBhbGwgdXBjYWxscy4uLiAqLwot ICAgIGZvciAoIGkgPSAwOyBpIDwgWEVOX0xFR0FDWV9NQVhfVkNQVVM7IGkrKyApCi0gICAgICAg IHNoYXJlZF9pbmZvKGQsIHZjcHVfaW5mb1tpXS5ldnRjaG5fdXBjYWxsX21hc2spID0gMTsKLQot ICAgIHByaW50aygiRG9tMCBoYXMgbWF4aW11bSAldSBWQ1BVc1xuIiwgZC0+bWF4X3ZjcHVzKTsK LQotICAgIGNwdSA9IHYtPnByb2Nlc3NvcjsKLSAgICBmb3IgKCBpID0gMTsgaSA8IGQtPm1heF92 Y3B1czsgaSsrICkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCB2Y3B1ICpwID0gc2V0dXBfZG9tMF92 Y3B1KGQsIGksIGNwdSk7Ci0KLSAgICAgICAgaWYgKCBwICkKLSAgICAgICAgICAgIGNwdSA9IHAt PnByb2Nlc3NvcjsKLSAgICB9Ci0KLSAgICBkLT5hcmNoLnBhZ2luZy5tb2RlID0gMDsKLQotICAg IC8qIFNldCB1cCBDUjMgdmFsdWUgZm9yIHdyaXRlX3B0YmFzZSAqLwotICAgIGlmICggcGFnaW5n X21vZGVfZW5hYmxlZChkKSApCi0gICAgICAgIHBhZ2luZ191cGRhdGVfcGFnaW5nX21vZGVzKHYp OwotICAgIGVsc2UKLSAgICAgICAgdXBkYXRlX2NyMyh2KTsKLQotICAgIC8qIFdlIHJ1biBvbiBk b20wJ3MgcGFnZSB0YWJsZXMgZm9yIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNz LiAqLwotICAgIHdyaXRlX3B0YmFzZSh2KTsKLSAgICBtYXBjYWNoZV9vdmVycmlkZV9jdXJyZW50 KHYpOwotCi0gICAgLyogQ29weSB0aGUgT1MgaW1hZ2UgYW5kIGZyZWUgdGVtcG9yYXJ5IGJ1ZmZl ci4gKi8KLSAgICBlbGYuZGVzdF9iYXNlID0gKHZvaWQqKXZrZXJuX3N0YXJ0OwotICAgIGVsZi5k ZXN0X3NpemUgPSB2a2Vybl9lbmQgLSB2a2Vybl9zdGFydDsKLSAgICBlbGZfc2V0X3ZjcHUoJmVs Ziwgdik7Ci0gICAgcmMgPSBlbGZfbG9hZF9iaW5hcnkoJmVsZik7Ci0gICAgaWYgKCByYyA8IDAg KQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gbG9hZCB0aGUga2VybmVsIGJpbmFy eVxuIik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICBib290c3RyYXBfbWFwKE5VTEwp OwotCi0gICAgaWYgKCBVTlNFVF9BRERSICE9IHBhcm1zLnZpcnRfaHlwZXJjYWxsICkKLSAgICB7 Ci0gICAgICAgIGlmICggKHBhcm1zLnZpcnRfaHlwZXJjYWxsIDwgdl9zdGFydCkgfHwKLSAgICAg ICAgICAgICAocGFybXMudmlydF9oeXBlcmNhbGwgPj0gdl9lbmQpICkKLSAgICAgICAgewotICAg ICAgICAgICAgbWFwY2FjaGVfb3ZlcnJpZGVfY3VycmVudChOVUxMKTsKLSAgICAgICAgICAgIHdy aXRlX3B0YmFzZShjdXJyZW50KTsKLSAgICAgICAgICAgIHByaW50aygiSW52YWxpZCBIWVBFUkNB TExfUEFHRSBmaWVsZCBpbiBFTEYgbm90ZXMuXG4iKTsKLSAgICAgICAgICAgIHJjID0gLTE7Ci0g ICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotICAgICAgICBoeXBlcmNhbGxfcGFnZV9p bml0aWFsaXNlKAotICAgICAgICAgICAgZCwgKHZvaWQgKikodW5zaWduZWQgbG9uZylwYXJtcy52 aXJ0X2h5cGVyY2FsbCk7Ci0gICAgfQotCi0gICAgLyogRnJlZSB0ZW1wb3JhcnkgYnVmZmVycy4g Ki8KLSAgICBkaXNjYXJkX2luaXRpYWxfaW1hZ2VzKCk7Ci0KLSAgICAvKiBTZXQgdXAgc3RhcnQg aW5mbyBhcmVhLiAqLwotICAgIHNpID0gKHN0YXJ0X2luZm9fdCAqKXZzdGFydGluZm9fc3RhcnQ7 Ci0gICAgY2xlYXJfcGFnZShzaSk7Ci0gICAgc2ktPm5yX3BhZ2VzID0gbnJfcGFnZXM7Ci0KLSAg ICBzaS0+c2hhcmVkX2luZm8gPSB2aXJ0X3RvX21hZGRyKGQtPnNoYXJlZF9pbmZvKTsKLQotICAg IHNpLT5mbGFncyAgICAgICAgPSBTSUZfUFJJVklMRUdFRCB8IFNJRl9JTklURE9NQUlOOwotICAg IGlmICggIXZpbml0cmRfc3RhcnQgJiYgaW5pdHJkX2xlbiApCi0gICAgICAgIHNpLT5mbGFncyAg IHw9IFNJRl9NT0RfU1RBUlRfUEZOOwotICAgIHNpLT5mbGFncyAgICAgICB8PSAoeGVuX3Byb2Nl c3Nvcl9wbWJpdHMgPDwgOCkgJiBTSUZfUE1fTUFTSzsKLSAgICBzaS0+cHRfYmFzZSAgICAgID0g dnB0X3N0YXJ0OwotICAgIHNpLT5ucl9wdF9mcmFtZXMgPSBucl9wdF9wYWdlczsKLSAgICBzaS0+ bWZuX2xpc3QgICAgID0gdnBoeXNtYXBfc3RhcnQ7Ci0gICAgc25wcmludGYoc2ktPm1hZ2ljLCBz aXplb2Yoc2ktPm1hZ2ljKSwgInhlbi0zLjAteDg2XyVkJXMiLAotICAgICAgICAgICAgIGVsZl82 NGJpdCgmZWxmKSA/IDY0IDogMzIsIHBhcm1zLnBhZSA/ICJwIiA6ICIiKTsKLQotICAgIGNvdW50 ID0gZC0+dG90X3BhZ2VzOwotCi0gICAgLyogU2V0IHVwIHRoZSBwaHlzLT5tYWNoaW5lIHRhYmxl IGlmIG5vdCBwYXJ0IG9mIHRoZSBpbml0aWFsIG1hcHBpbmcuICovCi0gICAgaWYgKCBpc19wdl9k b21haW4oZCkgJiYgcGFybXMucDJtX2Jhc2UgIT0gVU5TRVRfQUREUiApCi0gICAgewotICAgICAg ICBwZm4gPSBwYWdldGFibGVfZ2V0X3Bmbih2LT5hcmNoLmd1ZXN0X3RhYmxlKTsKLSAgICAgICAg c2V0dXBfcHZfcGh5c21hcChkLCBwZm4sIHZfc3RhcnQsIHZfZW5kLCB2cGh5c21hcF9zdGFydCwg dnBoeXNtYXBfZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgIG5yX3BhZ2VzKTsKLSAgICB9 Ci0KLSAgICAvKiBXcml0ZSB0aGUgcGh5cy0+bWFjaGluZSBhbmQgbWFjaGluZS0+cGh5cyB0YWJs ZSBlbnRyaWVzLiAqLwotICAgIGZvciAoIHBmbiA9IDA7IHBmbiA8IGNvdW50OyBwZm4rKyApCi0g ICAgewotICAgICAgICBtZm4gPSBwZm4gKyBhbGxvY19zcGZuOwotICAgICAgICBpZiAoIHBmbiA+ PSBpbml0cmRfcGZuICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBwZm4gPCBpbml0cmRf cGZuICsgUEZOX1VQKGluaXRyZF9sZW4pICkKLSAgICAgICAgICAgICAgICBtZm4gPSBpbml0cmQt Pm1vZF9zdGFydCArIChwZm4gLSBpbml0cmRfcGZuKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICBtZm4gLT0gUEZOX1VQKGluaXRyZF9sZW4pOwotICAgICAgICB9Ci0jaWZuZGVm IE5ERUJVRwotI2RlZmluZSBSRVZFUlNFX1NUQVJUICgodl9lbmQgLSB2X3N0YXJ0KSA+PiBQQUdF X1NISUZUKQotICAgICAgICBpZiAoIHBmbiA+IFJFVkVSU0VfU1RBUlQgJiYgKHZpbml0cmRfc3Rh cnQgfHwgcGZuIDwgaW5pdHJkX3BmbikgKQotICAgICAgICAgICAgbWZuID0gYWxsb2NfZXBmbiAt IChwZm4gLSBSRVZFUlNFX1NUQVJUKTsKLSNlbmRpZgotICAgICAgICBkb20wX3VwZGF0ZV9waHlz bWFwKGQsIHBmbiwgbWZuLCB2cGh5c21hcF9zdGFydCk7Ci0gICAgICAgIGlmICghKHBmbiAmIDB4 ZmZmZmYpKQotICAgICAgICAgICAgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7Ci0gICAgfQot ICAgIHNpLT5maXJzdF9wMm1fcGZuID0gcGZuOwotICAgIHNpLT5ucl9wMm1fZnJhbWVzID0gZC0+ dG90X3BhZ2VzIC0gY291bnQ7Ci0gICAgcGFnZV9saXN0X2Zvcl9lYWNoICggcGFnZSwgJmQtPnBh Z2VfbGlzdCApCi0gICAgewotICAgICAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICAg ICAgQlVHX09OKFNIQVJFRF9NMlAoZ2V0X2dwZm5fZnJvbV9tZm4obWZuKSkpOwotICAgICAgICBp ZiAoIGdldF9ncGZuX2Zyb21fbWZuKG1mbikgPj0gY291bnQgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBCVUdfT04oaXNfcHZfMzJiaXRfZG9tYWluKGQpKTsKLSAgICAgICAgICAgIGlmICggIXBh Z2luZ19tb2RlX3RyYW5zbGF0ZShkKSAmJiAhcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiYKLSAg ICAgICAgICAgICAgICAgIWdldF9wYWdlX2FuZF90eXBlKHBhZ2UsIGQsIFBHVF93cml0YWJsZV9w YWdlKSApCi0gICAgICAgICAgICAgICAgQlVHKCk7Ci0KLSAgICAgICAgICAgIGRvbTBfdXBkYXRl X3BoeXNtYXAoZCwgcGZuLCBtZm4sIHZwaHlzbWFwX3N0YXJ0KTsKLSAgICAgICAgICAgICsrcGZu OwotICAgICAgICAgICAgaWYgKCEocGZuICYgMHhmZmZmZikpCi0gICAgICAgICAgICAgICAgcHJv Y2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQlVHX09OKHBm biAhPSBkLT50b3RfcGFnZXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBhbGxvY19lcGZuICs9IFBG Tl9VUChpbml0cmRfbGVuKSArIHNpLT5ucl9wMm1fZnJhbWVzOwotI2VuZGlmCi0gICAgd2hpbGUg KCBwZm4gPCBucl9wYWdlcyApCi0gICAgewotICAgICAgICBpZiAoIChwYWdlID0gYWxsb2NfY2h1 bmsoZCwgbnJfcGFnZXMgLSBkLT50b3RfcGFnZXMpKSA9PSBOVUxMICkKLSAgICAgICAgICAgIHBh bmljKCJOb3QgZW5vdWdoIFJBTSBmb3IgRE9NMCByZXNlcnZhdGlvbiIpOwotICAgICAgICB3aGls ZSAoIHBmbiA8IGQtPnRvdF9wYWdlcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1mbiA9IHBh Z2VfdG9fbWZuKHBhZ2UpOwotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgcGZuIChucl9wYWdlcyAt IDEgLSAocGZuIC0gKGFsbG9jX2VwZm4gLSBhbGxvY19zcGZuKSkpCi0jZW5kaWYKLSAgICAgICAg ICAgIGRvbTBfdXBkYXRlX3BoeXNtYXAoZCwgcGZuLCBtZm4sIHZwaHlzbWFwX3N0YXJ0KTsKLSN1 bmRlZiBwZm4KLSAgICAgICAgICAgIHBhZ2UrKzsgcGZuKys7Ci0gICAgICAgICAgICBpZiAoIShw Zm4gJiAweGZmZmZmKSkKLSAgICAgICAgICAgICAgICBwcm9jZXNzX3BlbmRpbmdfc29mdGlycXMo KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICggaW5pdHJkX2xlbiAhPSAwICkKLSAgICB7 Ci0gICAgICAgIHNpLT5tb2Rfc3RhcnQgPSB2aW5pdHJkX3N0YXJ0ID86IGluaXRyZF9wZm47Ci0g ICAgICAgIHNpLT5tb2RfbGVuICAgPSBpbml0cmRfbGVuOwotICAgIH0KLQotICAgIG1lbXNldChz aS0+Y21kX2xpbmUsIDAsIHNpemVvZihzaS0+Y21kX2xpbmUpKTsKLSAgICBpZiAoIGNtZGxpbmUg IT0gTlVMTCApCi0gICAgICAgIHN0cmxjcHkoKGNoYXIgKilzaS0+Y21kX2xpbmUsIGNtZGxpbmUs IHNpemVvZihzaS0+Y21kX2xpbmUpKTsKLQotICAgIGlmICggZmlsbF9jb25zb2xlX3N0YXJ0X2lu Zm8oKHZvaWQgKikoc2kgKyAxKSkgKQotICAgIHsKLSAgICAgICAgc2ktPmNvbnNvbGUuZG9tMC5p bmZvX29mZiAgPSBzaXplb2Yoc3RydWN0IHN0YXJ0X2luZm8pOwotICAgICAgICBzaS0+Y29uc29s ZS5kb20wLmluZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZG9tMF92Z2FfY29uc29sZV9pbmZvKTsK LSAgICB9Ci0KLSAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSApCi0gICAgICAgIHhsYXRf c3RhcnRfaW5mbyhzaSwgWExBVF9zdGFydF9pbmZvX2NvbnNvbGVfZG9tMCk7Ci0KLSAgICAvKiBS ZXR1cm4gdG8gaWRsZSBkb21haW4ncyBwYWdlIHRhYmxlcy4gKi8KLSAgICBtYXBjYWNoZV9vdmVy cmlkZV9jdXJyZW50KE5VTEwpOwotICAgIHdyaXRlX3B0YmFzZShjdXJyZW50KTsKLQotICAgIHVw ZGF0ZV9kb21haW5fd2FsbGNsb2NrX3RpbWUoZCk7Ci0KLSAgICB2LT5pc19pbml0aWFsaXNlZCA9 IDE7Ci0gICAgY2xlYXJfYml0KF9WUEZfZG93biwgJnYtPnBhdXNlX2ZsYWdzKTsKLQotICAgIC8q Ci0gICAgICogSW5pdGlhbCByZWdpc3RlciB2YWx1ZXM6Ci0gICAgICogIERTLEVTLEZTLEdTID0g RkxBVF9LRVJORUxfRFMKLSAgICAgKiAgICAgICBDUzpySVAgPSBGTEFUX0tFUk5FTF9DUzpzdGFy dF9wYwotICAgICAqICAgICAgIFNTOnJTUCA9IEZMQVRfS0VSTkVMX1NTOnN0YXJ0X3N0YWNrCi0g ICAgICogICAgICAgICAgclNJID0gc3RhcnRfaW5mbwotICAgICAqICBbckFYLHJCWCxyQ1gsckRY LHJESSxyQlAsUjgtUjE1IGFyZSB6ZXJvXQotICAgICAqLwotICAgIHJlZ3MgPSAmdi0+YXJjaC51 c2VyX3JlZ3M7Ci0gICAgcmVncy0+ZHMgPSByZWdzLT5lcyA9IHJlZ3MtPmZzID0gcmVncy0+Z3Mg PQotICAgICAgICAhaXNfcHZfMzJiaXRfZG9tYWluKGQpID8gRkxBVF9LRVJORUxfRFMgOiBGTEFU X0NPTVBBVF9LRVJORUxfRFM7Ci0gICAgcmVncy0+c3MgPSAoIWlzX3B2XzMyYml0X2RvbWFpbihk KSA/Ci0gICAgICAgICAgICAgICAgRkxBVF9LRVJORUxfU1MgOiBGTEFUX0NPTVBBVF9LRVJORUxf U1MpOwotICAgIHJlZ3MtPmNzID0gKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPwotICAgICAgICAg ICAgICAgIEZMQVRfS0VSTkVMX0NTIDogRkxBVF9DT01QQVRfS0VSTkVMX0NTKTsKLSAgICByZWdz LT5yaXAgPSBwYXJtcy52aXJ0X2VudHJ5OwotICAgIHJlZ3MtPnJzcCA9IHZzdGFja19lbmQ7Ci0g ICAgcmVncy0+cnNpID0gdnN0YXJ0aW5mb19zdGFydDsKLSAgICByZWdzLT5lZmxhZ3MgPSBYODZf RUZMQUdTX0lGOwotCi0jaWZkZWYgQ09ORklHX1NIQURPV19QQUdJTkcKLSAgICBpZiAoIG9wdF9k b20wX3NoYWRvdyAmJiBwYWdpbmdfZW5hYmxlKGQsIFBHX1NIX2VuYWJsZSkgPT0gMCApCi0gICAg ICAgIHBhZ2luZ191cGRhdGVfcGFnaW5nX21vZGVzKHYpOwotI2VuZGlmCi0KLSAgICAvKgotICAg ICAqIFBWSCBGaXhtZTogWEVORkVBVF9zdXBlcnZpc29yX21vZGVfa2VybmVsIGhhcyBiZWVuIHJl dXNlZCBpbiBQVkggd2l0aCBhCi0gICAgICogZGlmZmVyZW50IG1lYW5pbmcuCi0gICAgICovCi0g ICAgaWYgKCB0ZXN0X2JpdChYRU5GRUFUX3N1cGVydmlzb3JfbW9kZV9rZXJuZWwsIHBhcm1zLmZf cmVxdWlyZWQpICkKLSAgICAgICAgcGFuaWMoIkRvbTAgcmVxdWlyZXMgc3VwZXJ2aXNvci1tb2Rl IGV4ZWN1dGlvbiIpOwotCi0gICAgcmMgPSBzZXR1cF9wZXJtaXNzaW9ucyhkKTsKLSAgICBCVUdf T04ocmMgIT0gMCk7Ci0KLSAgICBpZiAoIGVsZl9jaGVja19icm9rZW4oJmVsZikgKQotICAgICAg ICBwcmludGsoIiBYZW4gd2FybmluZzogZG9tMCBrZXJuZWwgYnJva2VuIEVMRjogJXNcbiIsCi0g ICAgICAgICAgICAgICBlbGZfY2hlY2tfYnJva2VuKCZlbGYpKTsKLQotICAgIGlmICggZC0+ZG9t YWluX2lkID09IGhhcmR3YXJlX2RvbWlkICkKLSAgICAgICAgaW9tbXVfaHdkb21faW5pdChkKTsK LQotICAgIHJldHVybiAwOwotCi1vdXQ6Ci0gICAgaWYgKCBlbGZfY2hlY2tfYnJva2VuKCZlbGYp ICkKLSAgICAgICAgcHJpbnRrKCIgWGVuIGRvbTAga2VybmVsIGJyb2tlbiBFTEY6ICVzXG4iLAot ICAgICAgICAgICAgICAgZWxmX2NoZWNrX2Jyb2tlbigmZWxmKSk7Ci0KLSAgICByZXR1cm4gcmM7 Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IG1vZGlmeV9pZGVudGl0eV9tbWlvKHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGxvbmcgcGZuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgY29uc3QgYm9vbCBtYXApCiB7CkBAIC0x NDE1LDEzICs1MzUsMTMgQEAgc3RhdGljIGludCBfX2luaXQgcHZoX3BvcHVsYXRlX21lbW9yeV9y YW5nZShzdHJ1Y3QgZG9tYWluICpkLAogICAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2Vfb3JkZXIg PSBnZXRfb3JkZXJfZnJvbV9wYWdlcyhucl9wYWdlcyArIDEpOwogCiAgICAgICAgIG9yZGVyID0g bWluKHJhbmdlX29yZGVyID8gcmFuZ2Vfb3JkZXIgLSAxIDogMCwgb3JkZXIpOwotICAgICAgICBw YWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgbWVtZmxhZ3MpOworICAgICAgICBw YWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgZG9tMF9tZW1mbGFncyk7CiAgICAg ICAgIGlmICggcGFnZSA9PSBOVUxMICkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCBvcmRl ciA9PSAwICYmIG1lbWZsYWdzICkKKyAgICAgICAgICAgIGlmICggb3JkZXIgPT0gMCAmJiBkb20w X21lbWZsYWdzICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBUcnkgYWdhaW4g d2l0aG91dCBhbnkgbWVtZmxhZ3MuICovCi0gICAgICAgICAgICAgICAgbWVtZmxhZ3MgPSAwOwor ICAgICAgICAgICAgICAgIC8qIFRyeSBhZ2FpbiB3aXRob3V0IGFueSBkb20wX21lbWZsYWdzLiAq LworICAgICAgICAgICAgICAgIGRvbTBfbWVtZmxhZ3MgPSAwOwogICAgICAgICAgICAgICAgIG9y ZGVyID0gTUFYX09SREVSOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg fQpAQCAtMTY5NSw3ICs4MTUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwdmhfc2V0dXBfcDJtKHN0 cnVjdCBkb21haW4gKmQpCiAgICAgYm9vbCBwcmVlbXB0ZWQ7CiAjZGVmaW5lIE1CMV9QQUdFUyBQ Rk5fRE9XTihNQigxKSkKIAotICAgIG5yX3BhZ2VzID0gY29tcHV0ZV9kb20wX25yX3BhZ2VzKGQs IE5VTEwsIDApOworICAgIG5yX3BhZ2VzID0gZG9tMF9jb21wdXRlX25yX3BhZ2VzKGQsIE5VTEws IDApOwogCiAgICAgcHZoX3NldHVwX2U4MjAoZCwgbnJfcGFnZXMpOwogICAgIGRvIHsKQEAgLTE5 MDYsNyArMTAyNiw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHB2aF9zZXR1cF9jcHVzKHN0cnVjdCBk b21haW4gKmQsIHBhZGRyX3QgZW50cnksCiAgICAgY3B1ID0gdi0+cHJvY2Vzc29yOwogICAgIGZv ciAoIGkgPSAxOyBpIDwgZC0+bWF4X3ZjcHVzOyBpKysgKQogICAgIHsKLSAgICAgICAgc3RydWN0 IHZjcHUgKnAgPSBzZXR1cF9kb20wX3ZjcHUoZCwgaSwgY3B1KTsKKyAgICAgICAgc3RydWN0IHZj cHUgKnAgPSBkb20wX3NldHVwX3ZjcHUoZCwgaSwgY3B1KTsKIAogICAgICAgICBpZiAoIHAgKQog ICAgICAgICAgICAgY3B1ID0gcC0+cHJvY2Vzc29yOwpAQCAtMTkxOSw3ICsxMDM5LDcgQEAgc3Rh dGljIGludCBfX2luaXQgcHZoX3NldHVwX2NwdXMoc3RydWN0IGRvbWFpbiAqZCwgcGFkZHJfdCBl bnRyeSwKICAgICAgICAgcmV0dXJuIHJjOwogICAgIH0KIAotICAgIHJjID0gc2V0dXBfcGVybWlz c2lvbnMoZCk7CisgICAgcmMgPSBkb20wX3NldHVwX3Blcm1pc3Npb25zKGQpOwogICAgIGlmICgg cmMgKQogICAgIHsKICAgICAgICAgcGFuaWMoIlVuYWJsZSB0byBzZXR1cCBEb20wIHBlcm1pc3Np b25zOiAlZFxuIiwgcmMpOwpAQCAtMjQyOSw3ICsxNTQ5LDcgQEAgaW50IF9faW5pdCBjb25zdHJ1 Y3RfZG9tMChzdHJ1Y3QgZG9tYWluICpkLCBjb25zdCBtb2R1bGVfdCAqaW1hZ2UsCiAKICAgICBw cm9jZXNzX3BlbmRpbmdfc29mdGlycXMoKTsKIAotICAgIHJldHVybiAoaXNfaHZtX2RvbWFpbihk KSA/IGNvbnN0cnVjdF9kb20wX3B2aCA6IGNvbnN0cnVjdF9kb20wX3B2KQorICAgIHJldHVybiAo aXNfaHZtX2RvbWFpbihkKSA/IGNvbnN0cnVjdF9kb20wX3B2aCA6IGRvbTBfY29uc3RydWN0X3B2 KQogICAgICAgICAgICAoZCwgaW1hZ2UsIGltYWdlX2hlYWRyb29tLCBpbml0cmQsYm9vdHN0cmFw X21hcCwgY21kbGluZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmls ZSBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQppbmRleCBkZTIxOTM3MTI5Li5lYTk0NTk5NDM4 IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKKysrIGIveGVuL2FyY2gveDg2 L3B2L01ha2VmaWxlCkBAIC0xICsxLDIgQEAKIG9iai15ICs9IGh5cGVyY2FsbC5vCitvYmotYmlu LXkgKz0gZG9tMF9idWlsZC5pbml0Lm8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wdi9kb20w X2J1aWxkLmMgYi94ZW4vYXJjaC94ODYvcHYvZG9tMF9idWlsZC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmRkYTYxN2Y5MDcKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4v YXJjaC94ODYvcHYvZG9tMF9idWlsZC5jCkBAIC0wLDAgKzEsOTEzIEBACisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiBwdi9kb20wX2J1aWxkLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIt MjAwNSwgSyBBIEZyYXNlcgorICovCisKKyNpbmNsdWRlIDx4ZW4vY29uc29sZS5oPgorI2luY2x1 ZGUgPHhlbi9kb21haW4uaD4KKyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KKyNpbmNsdWRl IDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhlbi9saWJlbGYuaD4KKyNpbmNsdWRlIDx4ZW4vbXVs dGlib290Lmg+CisjaW5jbHVkZSA8eGVuL3BhZ2luZy5oPgorI2luY2x1ZGUgPHhlbi9wZm4uaD4K KyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPgorCisjaW5j bHVkZSA8YXNtL2J6aW1hZ2UuaD4KKyNpbmNsdWRlIDxhc20vZG9tMF9idWlsZC5oPgorI2luY2x1 ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKy8qIEFsbG93IHJpbmct MyBhY2Nlc3MgaW4gbG9uZyBtb2RlIGFzIGd1ZXN0IGNhbm5vdCB1c2UgcmluZyAxIC4uLiAqLwor I2RlZmluZSBCQVNFX1BST1QgKF9QQUdFX1BSRVNFTlR8X1BBR0VfUld8X1BBR0VfQUNDRVNTRUR8 X1BBR0VfVVNFUikKKyNkZWZpbmUgTDFfUFJPVCAoQkFTRV9QUk9UfF9QQUdFX0dVRVNUX0tFUk5F TCkKKy8qIC4uLiBleGNlcHQgZm9yIGNvbXBhdGliaWxpdHkgbW9kZSBndWVzdHMuICovCisjZGVm aW5lIENPTVBBVF9MMV9QUk9UIChfUEFHRV9QUkVTRU5UfF9QQUdFX1JXfF9QQUdFX0FDQ0VTU0VE KQorI2RlZmluZSBMMl9QUk9UIChCQVNFX1BST1R8X1BBR0VfRElSVFkpCisjZGVmaW5lIEwzX1BS T1QgKEJBU0VfUFJPVHxfUEFHRV9ESVJUWSkKKyNkZWZpbmUgTDRfUFJPVCAoQkFTRV9QUk9UfF9Q QUdFX0RJUlRZKQorCitzdGF0aWMgX19pbml0IHZvaWQgZG9tMF91cGRhdGVfcGh5c21hcChzdHJ1 Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIHBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2cGh5c21hcF9zKQoreworICAgIGlmICgg IWlzX3B2XzMyYml0X2RvbWFpbihkKSApCisgICAgICAgICgodW5zaWduZWQgbG9uZyAqKXZwaHlz bWFwX3MpW3Bmbl0gPSBtZm47CisgICAgZWxzZQorICAgICAgICAoKHVuc2lnbmVkIGludCAqKXZw aHlzbWFwX3MpW3Bmbl0gPSBtZm47CisKKyAgICBzZXRfZ3Bmbl9mcm9tX21mbihtZm4sIHBmbik7 Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCBtYXJrX3B2X3B0X3BhZ2VzX3Jkb25seShzdHJ1Y3Qg ZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw0 X3BnZW50cnlfdCAqbDRzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHZwdF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0X3BhZ2VzKQoreworICAgIHVu c2lnbmVkIGxvbmcgY291bnQ7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBsNF9w Z2VudHJ5X3QgKnBsNGU7CisgICAgbDNfcGdlbnRyeV90ICpwbDNlOworICAgIGwyX3BnZW50cnlf dCAqcGwyZTsKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7CisKKyAgICBwbDRlID0gbDRzdGFydCAr IGw0X3RhYmxlX29mZnNldCh2cHRfc3RhcnQpOworICAgIHBsM2UgPSBsNGVfdG9fbDNlKCpwbDRl KTsKKyAgICBwbDNlICs9IGwzX3RhYmxlX29mZnNldCh2cHRfc3RhcnQpOworICAgIHBsMmUgPSBs M2VfdG9fbDJlKCpwbDNlKTsKKyAgICBwbDJlICs9IGwyX3RhYmxlX29mZnNldCh2cHRfc3RhcnQp OworICAgIHBsMWUgPSBsMmVfdG9fbDFlKCpwbDJlKTsKKyAgICBwbDFlICs9IGwxX3RhYmxlX29m ZnNldCh2cHRfc3RhcnQpOworICAgIGZvciAoIGNvdW50ID0gMDsgY291bnQgPCBucl9wdF9wYWdl czsgY291bnQrKyApCisgICAgeworICAgICAgICBsMWVfcmVtb3ZlX2ZsYWdzKCpwbDFlLCBfUEFH RV9SVyk7CisgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShsMWVfZ2V0X3BmbigqcGwxZSkpOwor CisgICAgICAgIC8qIFJlYWQtb25seSBtYXBwaW5nICsgUEdDX2FsbG9jYXRlZCArIHBhZ2UtdGFi bGUgcGFnZS4gKi8KKyAgICAgICAgcGFnZS0+Y291bnRfaW5mbyAgICAgICAgID0gUEdDX2FsbG9j YXRlZCB8IDM7CisgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvIHw9IFBHVF92YWxpZGF0 ZWQgfCAxOworCisgICAgICAgIC8qIFRvcC1sZXZlbCBwLnQuIGlzIHBpbm5lZC4gKi8KKyAgICAg ICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9PQorICAg ICAgICAgICAgICghaXNfcHZfMzJiaXRfZG9tYWluKGQpID8KKyAgICAgICAgICAgICAgUEdUX2w0 X3BhZ2VfdGFibGUgOiBQR1RfbDNfcGFnZV90YWJsZSkgKQorICAgICAgICB7CisgICAgICAgICAg ICBwYWdlLT5jb3VudF9pbmZvICAgICAgICArPSAxOworICAgICAgICAgICAgcGFnZS0+dS5pbnVz ZS50eXBlX2luZm8gKz0gMSB8IFBHVF9waW5uZWQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBJ dGVyYXRlLiAqLworICAgICAgICBpZiAoICEoKHVuc2lnbmVkIGxvbmcpKytwbDFlICYgKFBBR0Vf U0laRSAtIDEpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggISgodW5zaWduZWQgbG9u ZykrK3BsMmUgJiAoUEFHRV9TSVpFIC0gMSkpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBpZiAoICEoKHVuc2lnbmVkIGxvbmcpKytwbDNlICYgKFBBR0VfU0laRSAtIDEpKSApCisg ICAgICAgICAgICAgICAgICAgIHBsM2UgPSBsNGVfdG9fbDNlKCorK3BsNGUpOworICAgICAgICAg ICAgICAgIHBsMmUgPSBsM2VfdG9fbDJlKCpwbDNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHBsMWUgPSBsMmVfdG9fbDFlKCpwbDJlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3Rh dGljIF9faW5pdCB2b2lkIHNldHVwX3B2X3BoeXNtYXAoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWdu ZWQgbG9uZyBwZ3RibF9wZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIHZfc3RhcnQsIHVuc2lnbmVkIGxvbmcgdl9lbmQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZwaHlzbWFwX3N0YXJ0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2cGh5c21hcF9l bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5y X3BhZ2VzKQoreworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBOVUxMOworICAgIGw0X3Bn ZW50cnlfdCAqcGw0ZSwgKmw0c3RhcnQgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZ3RibF9wZm4p KTsKKyAgICBsM19wZ2VudHJ5X3QgKnBsM2UgPSBOVUxMOworICAgIGwyX3BnZW50cnlfdCAqcGwy ZSA9IE5VTEw7CisgICAgbDFfcGdlbnRyeV90ICpwbDFlID0gTlVMTDsKKworICAgIGlmICggdl9z dGFydCA8PSB2cGh5c21hcF9lbmQgJiYgdnBoeXNtYXBfc3RhcnQgPD0gdl9lbmQgKQorICAgICAg ICBwYW5pYygiRE9NMCBQLT5NIHRhYmxlIG92ZXJsYXBzIGluaXRpYWwgbWFwcGluZyIpOworCisg ICAgd2hpbGUgKCB2cGh5c21hcF9zdGFydCA8IHZwaHlzbWFwX2VuZCApCisgICAgeworICAgICAg ICBpZiAoIGQtPnRvdF9wYWdlcyArICgocm91bmRfcGd1cCh2cGh5c21hcF9lbmQpIC0gdnBoeXNt YXBfc3RhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+IFBBR0VfU0hJRlQpICsg MyA+IG5yX3BhZ2VzICkKKyAgICAgICAgICAgIHBhbmljKCJEb20wIGFsbG9jYXRpb24gdG9vIHNt YWxsIGZvciBpbml0aWFsIFAtPk0gdGFibGUiKTsKKworICAgICAgICBpZiAoIHBsMWUgKQorICAg ICAgICB7CisgICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKKyAgICAgICAgICAg IHBsMWUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICggcGwyZSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMmUpOworICAgICAgICAgICAgcGwyZSA9 IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBwbDNlICkKKyAgICAgICAgeworICAgICAg ICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwzZSk7CisgICAgICAgICAgICBwbDNlID0gTlVMTDsK KyAgICAgICAgfQorICAgICAgICBwbDRlID0gbDRzdGFydCArIGw0X3RhYmxlX29mZnNldCh2cGh5 c21hcF9zdGFydCk7CisgICAgICAgIGlmICggIWw0ZV9nZXRfaW50cHRlKCpwbDRlKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHBhZ2UgPSBhbGxvY19kb21oZWFwX3BhZ2UoZCwgMCk7CisgICAg ICAgICAgICBpZiAoICFwYWdlICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg ICAgLyogTm8gbWFwcGluZywgUEdDX2FsbG9jYXRlZCArIHBhZ2UtdGFibGUgcGFnZS4gKi8KKyAg ICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8gPSBQR0NfYWxsb2NhdGVkIHwgMjsKKyAgICAgICAg ICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvID0gUEdUX2wzX3BhZ2VfdGFibGUgfCBQR1RfdmFs aWRhdGVkIHwgMTsKKyAgICAgICAgICAgIHBsM2UgPSBfX21hcF9kb21haW5fcGFnZShwYWdlKTsK KyAgICAgICAgICAgIGNsZWFyX3BhZ2UocGwzZSk7CisgICAgICAgICAgICAqcGw0ZSA9IGw0ZV9m cm9tX3BhZ2UocGFnZSwgTDRfUFJPVCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGwz ZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKGw0ZV9nZXRfcGZuKCpwbDRlKSkpOworCisgICAgICAg IHBsM2UgKz0gbDNfdGFibGVfb2Zmc2V0KHZwaHlzbWFwX3N0YXJ0KTsKKyAgICAgICAgaWYgKCAh bDNlX2dldF9pbnRwdGUoKnBsM2UpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBjcHVf aGFzX3BhZ2UxZ2IgJiYKKyAgICAgICAgICAgICAgICAgISh2cGh5c21hcF9zdGFydCAmICgoMVVM IDw8IEwzX1BBR0VUQUJMRV9TSElGVCkgLSAxKSkgJiYKKyAgICAgICAgICAgICAgICAgdnBoeXNt YXBfZW5kID49IHZwaHlzbWFwX3N0YXJ0ICsgKDFVTCA8PCBMM19QQUdFVEFCTEVfU0hJRlQpICYm CisgICAgICAgICAgICAgICAgIChwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDNfUEFHRVRBQkxFX1NISUZU IC0gUEFHRV9TSElGVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDApKSAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGwzZSA9 IGwzZV9mcm9tX3BhZ2UocGFnZSwgTDFfUFJPVHxfUEFHRV9ESVJUWXxfUEFHRV9QU0UpOworICAg ICAgICAgICAgICAgIHZwaHlzbWFwX3N0YXJ0ICs9IDFVTCA8PCBMM19QQUdFVEFCTEVfU0hJRlQ7 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoIChwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlKGQsIDApKSA9PSBOVUxMICkKKyAgICAgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogTm8gbWFwcGluZywgUEdDX2FsbG9jYXRl ZCArIHBhZ2UtdGFibGUgcGFnZS4gKi8KKyAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8gPSBQ R0NfYWxsb2NhdGVkIHwgMjsKKyAgICAgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvID0g UEdUX2wyX3BhZ2VfdGFibGUgfCBQR1RfdmFsaWRhdGVkIHwgMTsKKyAgICAgICAgICAgIHBsMmUg PSBfX21hcF9kb21haW5fcGFnZShwYWdlKTsKKyAgICAgICAgICAgIGNsZWFyX3BhZ2UocGwyZSk7 CisgICAgICAgICAgICAqcGwzZSA9IGwzZV9mcm9tX3BhZ2UocGFnZSwgTDNfUFJPVCk7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGwyZSA9IG1hcF9kb21haW5fcGFnZShf bWZuKGwzZV9nZXRfcGZuKCpwbDNlKSkpOworCisgICAgICAgIHBsMmUgKz0gbDJfdGFibGVfb2Zm c2V0KHZwaHlzbWFwX3N0YXJ0KTsKKyAgICAgICAgaWYgKCAhbDJlX2dldF9pbnRwdGUoKnBsMmUp ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAhKHZwaHlzbWFwX3N0YXJ0ICYgKCgxVUwg PDwgTDJfUEFHRVRBQkxFX1NISUZUKSAtIDEpKSAmJgorICAgICAgICAgICAgICAgICB2cGh5c21h cF9lbmQgPj0gdnBoeXNtYXBfc3RhcnQgKyAoMVVMIDw8IEwyX1BBR0VUQUJMRV9TSElGVCkgJiYK KyAgICAgICAgICAgICAgICAgKHBhZ2UgPSBhbGxvY19kb21oZWFwX3BhZ2VzKGQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMMl9QQUdFVEFCTEVfU0hJRlQg LSBQQUdFX1NISUZULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCkpICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwbDJlID0g bDJlX2Zyb21fcGFnZShwYWdlLCBMMV9QUk9UfF9QQUdFX0RJUlRZfF9QQUdFX1BTRSk7CisgICAg ICAgICAgICAgICAgaWYgKCBvcHRfYWxsb3dfc3VwZXJwYWdlICkKKyAgICAgICAgICAgICAgICAg ICAgZ2V0X3N1cGVycGFnZShwYWdlX3RvX21mbihwYWdlKSwgZCk7CisgICAgICAgICAgICAgICAg dnBoeXNtYXBfc3RhcnQgKz0gMVVMIDw8IEwyX1BBR0VUQUJMRV9TSElGVDsKKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggKHBhZ2UgPSBh bGxvY19kb21oZWFwX3BhZ2UoZCwgMCkpID09IE5VTEwgKQorICAgICAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgICAgICAvKiBObyBtYXBwaW5nLCBQR0NfYWxsb2NhdGVkICsgcGFnZS10YWJs ZSBwYWdlLiAqLworICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5mbyA9IFBHQ19hbGxvY2F0ZWQg fCAyOworICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDFfcGFnZV90 YWJsZSB8IFBHVF92YWxpZGF0ZWQgfCAxOworICAgICAgICAgICAgcGwxZSA9IF9fbWFwX2RvbWFp bl9wYWdlKHBhZ2UpOworICAgICAgICAgICAgY2xlYXJfcGFnZShwbDFlKTsKKyAgICAgICAgICAg ICpwbDJlID0gbDJlX2Zyb21fcGFnZShwYWdlLCBMMl9QUk9UKTsKKyAgICAgICAgfQorICAgICAg ICBlbHNlCisgICAgICAgICAgICBwbDFlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obDJlX2dldF9w Zm4oKnBsMmUpKSk7CisKKyAgICAgICAgcGwxZSArPSBsMV90YWJsZV9vZmZzZXQodnBoeXNtYXBf c3RhcnQpOworICAgICAgICBCVUdfT04obDFlX2dldF9pbnRwdGUoKnBsMWUpKTsKKyAgICAgICAg cGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZShkLCAwKTsKKyAgICAgICAgaWYgKCAhcGFnZSApCisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAqcGwxZSA9IGwxZV9mcm9tX3BhZ2UocGFnZSwg TDFfUFJPVHxfUEFHRV9ESVJUWSk7CisgICAgICAgIHZwaHlzbWFwX3N0YXJ0ICs9IFBBR0VfU0la RTsKKyAgICAgICAgdnBoeXNtYXBfc3RhcnQgJj0gUEFHRV9NQVNLOworICAgIH0KKyAgICBpZiAo ICFwYWdlICkKKyAgICAgICAgcGFuaWMoIk5vdCBlbm91Z2ggUkFNIGZvciBET00wIFAtPk0gdGFi bGUiKTsKKworICAgIGlmICggcGwxZSApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUp OworICAgIGlmICggcGwyZSApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMmUpOworICAg IGlmICggcGwzZSApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOworCisgICAgdW5t YXBfZG9tYWluX3BhZ2UobDRzdGFydCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZV9pbmZvICog X19pbml0IGFsbG9jX2NodW5rKHN0cnVjdCBkb21haW4gKmQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1heF9wYWdlcykKK3sKKyAg ICBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbGFzdF9vcmRlciA9IE1BWF9PUkRFUjsK KyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIHVuc2lnbmVkIGludCBvcmRlciA9IGdl dF9vcmRlcl9mcm9tX3BhZ2VzKG1heF9wYWdlcyksIGZyZWVfb3JkZXI7CisKKyAgICBpZiAoIG9y ZGVyID4gbGFzdF9vcmRlciApCisgICAgICAgIG9yZGVyID0gbGFzdF9vcmRlcjsKKyAgICBlbHNl IGlmICggbWF4X3BhZ2VzICYgKG1heF9wYWdlcyAtIDEpICkKKyAgICAgICAgLS1vcmRlcjsKKyAg ICB3aGlsZSAoIChwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgZG9tMF9tZW1m bGFncykpID09IE5VTEwgKQorICAgICAgICBpZiAoIG9yZGVyLS0gPT0gMCApCisgICAgICAgICAg ICBicmVhazsKKyAgICBpZiAoIHBhZ2UgKQorICAgICAgICBsYXN0X29yZGVyID0gb3JkZXI7Cisg ICAgZWxzZSBpZiAoIGRvbTBfbWVtZmxhZ3MgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAg ICogQWxsb2NhdGUgdXAgdG8gMk1CIGF0IGEgdGltZTogSXQgcHJldmVudHMgYWxsb2NhdGluZyB2 ZXJ5IGxhcmdlCisgICAgICAgICAqIGNodW5rcyBmcm9tIERNQSBwb29scyBiZWZvcmUgdGhlID40 R0IgcG9vbCBpcyBmdWxseSBkZXBsZXRlZC4KKyAgICAgICAgICovCisgICAgICAgIGxhc3Rfb3Jk ZXIgPSAyMSAtIFBBR0VfU0hJRlQ7CisgICAgICAgIGRvbTBfbWVtZmxhZ3MgPSAwOworICAgICAg ICByZXR1cm4gYWxsb2NfY2h1bmsoZCwgbWF4X3BhZ2VzKTsKKyAgICB9CisKKyAgICAvKgorICAg ICAqIE1ha2UgYSByZWFzb25hYmxlIGF0dGVtcHQgYXQgZmluZGluZyBhIHNtYWxsZXIgY2h1bmsg YXQgYSBoaWdoZXIKKyAgICAgKiBhZGRyZXNzLCB0byBhdm9pZCBhbGxvY2F0aW5nIGZyb20gbG93 IG1lbW9yeSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAqLworICAgIGZvciAoIGZyZWVfb3Jk ZXIgPSBvcmRlcjsgIWRvbTBfbWVtZmxhZ3MgJiYgcGFnZSAmJiBvcmRlci0tOyApCisgICAgewor ICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZzI7CisKKyAgICAgICAgaWYgKCBkLT50b3RfcGFn ZXMgKyAoMSA8PCBvcmRlcikgPiBkLT5tYXhfcGFnZXMgKQorICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgIHBnMiA9IGFsbG9jX2RvbWhlYXBfcGFnZXMoZCwgb3JkZXIsIE1FTUZfZXhhY3Rf bm9kZSk7CisgICAgICAgIGlmICggcGcyID4gcGFnZSApCisgICAgICAgIHsKKyAgICAgICAgICAg IGZyZWVfZG9taGVhcF9wYWdlcyhwYWdlLCBmcmVlX29yZGVyKTsKKyAgICAgICAgICAgIHBhZ2Ug PSBwZzI7CisgICAgICAgICAgICBmcmVlX29yZGVyID0gb3JkZXI7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAoIHBnMiApCisgICAgICAgICAgICBmcmVlX2RvbWhlYXBfcGFnZXMocGcyLCBv cmRlcik7CisgICAgfQorICAgIHJldHVybiBwYWdlOworfQorCitpbnQgX19pbml0IGRvbTBfY29u c3RydWN0X3B2KHN0cnVjdCBkb21haW4gKmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG1vZHVsZV90ICppbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBpbWFnZV9oZWFkcm9vbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bW9kdWxlX3QgKmluaXRyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpi b290c3RyYXBfbWFwKShjb25zdCBtb2R1bGVfdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqY21kbGluZSkKK3sKKyAgICBpbnQgaSwgY3B1LCByYywgY29tcGF0aWJsZSwg Y29tcGF0MzIsIG9yZGVyLCBtYWNoaW5lOworICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz OworICAgIHVuc2lnbmVkIGxvbmcgcGZuLCBtZm47CisgICAgdW5zaWduZWQgbG9uZyBucl9wYWdl czsKKyAgICB1bnNpZ25lZCBsb25nIG5yX3B0X3BhZ2VzOworICAgIHVuc2lnbmVkIGxvbmcgYWxs b2Nfc3BmbjsKKyAgICB1bnNpZ25lZCBsb25nIGFsbG9jX2VwZm47CisgICAgdW5zaWduZWQgbG9u ZyBpbml0cmRfcGZuID0gLTEsIGluaXRyZF9tZm4gPSAwOworICAgIHVuc2lnbmVkIGxvbmcgY291 bnQ7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IE5VTEw7CisgICAgc3RhcnRfaW5mb190 ICpzaTsKKyAgICBzdHJ1Y3QgdmNwdSAqdiA9IGQtPnZjcHVbMF07CisgICAgdW5zaWduZWQgbG9u ZyBsb25nIHZhbHVlOworICAgIHZvaWQgKmltYWdlX2Jhc2UgPSBib290c3RyYXBfbWFwKGltYWdl KTsKKyAgICB1bnNpZ25lZCBsb25nIGltYWdlX2xlbiA9IGltYWdlLT5tb2RfZW5kOworICAgIHZv aWQgKmltYWdlX3N0YXJ0ID0gaW1hZ2VfYmFzZSArIGltYWdlX2hlYWRyb29tOworICAgIHVuc2ln bmVkIGxvbmcgaW5pdHJkX2xlbiA9IGluaXRyZCA/IGluaXRyZC0+bW9kX2VuZCA6IDA7CisgICAg bDRfcGdlbnRyeV90ICpsNHRhYiA9IE5VTEwsICpsNHN0YXJ0ID0gTlVMTDsKKyAgICBsM19wZ2Vu dHJ5X3QgKmwzdGFiID0gTlVMTCwgKmwzc3RhcnQgPSBOVUxMOworICAgIGwyX3BnZW50cnlfdCAq bDJ0YWIgPSBOVUxMLCAqbDJzdGFydCA9IE5VTEw7CisgICAgbDFfcGdlbnRyeV90ICpsMXRhYiA9 IE5VTEwsICpsMXN0YXJ0ID0gTlVMTDsKKworICAgIC8qCisgICAgICogVGhpcyBmdWxseSBkZXNj cmliZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgdGhlIGluaXRpYWwgZG9tYWluLiBBbGwKKyAgICAg KiAqX3N0YXJ0IGFkZHJlc3MgYXJlIHBhZ2UtYWxpZ25lZCwgZXhjZXB0IHZfc3RhcnQgKGFuZCB2 X2VuZCkgd2hpY2ggYXJlCisgICAgICogc3VwZXJwYWdlLWFsaWduZWQuCisgICAgICovCisgICAg c3RydWN0IGVsZl9iaW5hcnkgZWxmOworICAgIHN0cnVjdCBlbGZfZG9tX3Bhcm1zIHBhcm1zOwor ICAgIHVuc2lnbmVkIGxvbmcgdmtlcm5fc3RhcnQ7CisgICAgdW5zaWduZWQgbG9uZyB2a2Vybl9l bmQ7CisgICAgdW5zaWduZWQgbG9uZyB2aW5pdHJkX3N0YXJ0OworICAgIHVuc2lnbmVkIGxvbmcg dmluaXRyZF9lbmQ7CisgICAgdW5zaWduZWQgbG9uZyB2cGh5c21hcF9zdGFydDsKKyAgICB1bnNp Z25lZCBsb25nIHZwaHlzbWFwX2VuZDsKKyAgICB1bnNpZ25lZCBsb25nIHZzdGFydGluZm9fc3Rh cnQ7CisgICAgdW5zaWduZWQgbG9uZyB2c3RhcnRpbmZvX2VuZDsKKyAgICB1bnNpZ25lZCBsb25n IHZzdGFja19zdGFydDsKKyAgICB1bnNpZ25lZCBsb25nIHZzdGFja19lbmQ7CisgICAgdW5zaWdu ZWQgbG9uZyB2cHRfc3RhcnQ7CisgICAgdW5zaWduZWQgbG9uZyB2cHRfZW5kOworICAgIHVuc2ln bmVkIGxvbmcgdl9zdGFydDsKKyAgICB1bnNpZ25lZCBsb25nIHZfZW5kOworCisgICAgLyogTWFj aGluZSBhZGRyZXNzIG9mIG5leHQgY2FuZGlkYXRlIHBhZ2UtdGFibGUgcGFnZS4gKi8KKyAgICBw YWRkcl90IG1wdF9hbGxvYzsKKworICAgIHByaW50aygiKioqIExPQURJTkcgRE9NQUlOIDAgKioq XG4iKTsKKworICAgIGQtPm1heF9wYWdlcyA9IH4wVTsKKworICAgIGlmICggKHJjID0gYnppbWFn ZV9wYXJzZShpbWFnZV9iYXNlLCAmaW1hZ2Vfc3RhcnQsICZpbWFnZV9sZW4pKSAhPSAwICkKKyAg ICAgICAgcmV0dXJuIHJjOworCisgICAgaWYgKCAocmMgPSBlbGZfaW5pdCgmZWxmLCBpbWFnZV9z dGFydCwgaW1hZ2VfbGVuKSkgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKyNpZmRlZiBDT05G SUdfVkVSQk9TRV9ERUJVRworICAgIGVsZl9zZXRfdmVyYm9zZSgmZWxmKTsKKyNlbmRpZgorICAg IGVsZl9wYXJzZV9iaW5hcnkoJmVsZik7CisgICAgaWYgKCAocmMgPSBlbGZfeGVuX3BhcnNlKCZl bGYsICZwYXJtcykpICE9IDAgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIC8qIGNvbXBhdGli aWxpdHkgY2hlY2sgKi8KKyAgICBjb21wYXRpYmxlID0gMDsKKyAgICBjb21wYXQzMiAgID0gMDsK KyAgICBtYWNoaW5lID0gZWxmX3V2YWwoJmVsZiwgZWxmLmVoZHIsIGVfbWFjaGluZSk7CisgICAg cHJpbnRrKCIgWGVuICBrZXJuZWw6IDY0LWJpdCwgbHNiLCBjb21wYXQzMlxuIik7CisgICAgaWYg KGVsZl8zMmJpdCgmZWxmKSAmJiBwYXJtcy5wYWUgPT0gWEVOX1BBRV9CSU1PREFMKQorICAgICAg ICBwYXJtcy5wYWUgPSBYRU5fUEFFX0VYVENSMzsKKyAgICBpZiAoZWxmXzMyYml0KCZlbGYpICYm IHBhcm1zLnBhZSAmJiBtYWNoaW5lID09IEVNXzM4NikKKyAgICB7CisgICAgICAgIGNvbXBhdDMy ID0gMTsKKyAgICAgICAgY29tcGF0aWJsZSA9IDE7CisgICAgfQorICAgIGlmIChlbGZfNjRiaXQo JmVsZikgJiYgbWFjaGluZSA9PSBFTV9YODZfNjQpCisgICAgICAgIGNvbXBhdGlibGUgPSAxOwor ICAgIHByaW50aygiIERvbTAga2VybmVsOiAlcyVzLCAlcywgcGFkZHIgJSMiIFBSSXg2NCAiIC0+ ICUjIiBQUkl4NjQgIlxuIiwKKyAgICAgICAgICAgZWxmXzY0Yml0KCZlbGYpID8gIjY0LWJpdCIg OiAiMzItYml0IiwKKyAgICAgICAgICAgcGFybXMucGFlICAgICAgID8gIiwgUEFFIiAgOiAiIiwK KyAgICAgICAgICAgZWxmX21zYigmZWxmKSAgID8gIm1zYiIgICAgOiAibHNiIiwKKyAgICAgICAg ICAgZWxmLnBzdGFydCwgZWxmLnBlbmQpOworICAgIGlmICggZWxmLmJzZF9zeW10YWJfcHN0YXJ0 ICkKKyAgICAgICAgcHJpbnRrKCIgRG9tMCBzeW1ib2wgbWFwICUjIiBQUkl4NjQgIiAtPiAlIyIg UFJJeDY0ICJcbiIsCisgICAgICAgICAgICAgICBlbGYuYnNkX3N5bXRhYl9wc3RhcnQsIGVsZi5i c2Rfc3ltdGFiX3BlbmQpOworCisgICAgaWYgKCAhY29tcGF0aWJsZSApCisgICAgeworICAgICAg ICBwcmludGsoIk1pc21hdGNoIGJldHdlZW4gWGVuIGFuZCBET00wIGtlcm5lbFxuIik7CisgICAg ICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKCBw YXJtcy5lbGZfbm90ZXNbWEVOX0VMRk5PVEVfU1VQUE9SVEVEX0ZFQVRVUkVTXS50eXBlICE9IFhF Tl9FTlRfTk9ORSApCisgICAgeworICAgICAgICBpZiAoICF0ZXN0X2JpdChYRU5GRUFUX2RvbTAs IHBhcm1zLmZfc3VwcG9ydGVkKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50aygiS2Vy bmVsIGRvZXMgbm90IHN1cHBvcnQgRG9tMCBvcGVyYXRpb25cbiIpOworICAgICAgICAgICAgcmMg PSAtRUlOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICBpZiAoIGNvbXBhdDMyICkKKyAgICB7CisgICAgICAgIGQtPmFyY2guaXNfMzJiaXRfcHYgPSBk LT5hcmNoLmhhc18zMmJpdF9zaGluZm8gPSAxOworICAgICAgICB2LT52Y3B1X2luZm8gPSAodm9p ZCAqKSZkLT5zaGFyZWRfaW5mby0+Y29tcGF0LnZjcHVfaW5mb1swXTsKKyAgICAgICAgaWYgKCBz ZXR1cF9jb21wYXRfYXJnX3hsYXQodikgIT0gMCApCisgICAgICAgICAgICBCVUcoKTsKKyAgICB9 CisKKyAgICBucl9wYWdlcyA9IGRvbTBfY29tcHV0ZV9ucl9wYWdlcyhkLCAmcGFybXMsIGluaXRy ZF9sZW4pOworCisgICAgaWYgKCBwYXJtcy5wYWUgPT0gWEVOX1BBRV9FWFRDUjMgKQorICAgICAg ICAgICAgc2V0X2JpdChWTUFTU1RfVFlQRV9wYWVfZXh0ZW5kZWRfY3IzLCAmZC0+dm1fYXNzaXN0 KTsKKworICAgIGlmICggKHBhcm1zLnZpcnRfaHZfc3RhcnRfbG93ICE9IFVOU0VUX0FERFIpICYm IGVsZl8zMmJpdCgmZWxmKSApCisgICAgeworICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2sgPSAo MVVMIDw8IEwyX1BBR0VUQUJMRV9TSElGVCkgLSAxOworICAgICAgICB2YWx1ZSA9IChwYXJtcy52 aXJ0X2h2X3N0YXJ0X2xvdyArIG1hc2spICYgfm1hc2s7CisgICAgICAgIEJVR19PTighaXNfcHZf MzJiaXRfZG9tYWluKGQpKTsKKyAgICAgICAgaWYgKCB2YWx1ZSA+IF9fSFlQRVJWSVNPUl9DT01Q QVRfVklSVF9TVEFSVCApCisgICAgICAgICAgICBwYW5pYygiRG9tYWluIDAgZXhwZWN0cyB0b28g aGlnaCBhIGh5cGVydmlzb3Igc3RhcnQgYWRkcmVzcyIpOworICAgICAgICBIWVBFUlZJU09SX0NP TVBBVF9WSVJUX1NUQVJUKGQpID0KKyAgICAgICAgICAgIG1heF90KHVuc2lnbmVkIGludCwgbTJw X2NvbXBhdF92c3RhcnQsIHZhbHVlKTsKKyAgICB9CisKKyAgICBpZiAoIChwYXJtcy5wMm1fYmFz ZSAhPSBVTlNFVF9BRERSKSAmJiBlbGZfMzJiaXQoJmVsZikgKQorICAgIHsKKyAgICAgICAgcHJp bnRrKFhFTkxPR19XQVJOSU5HICJQMk0gdGFibGUgYmFzZSBpZ25vcmVkXG4iKTsKKyAgICAgICAg cGFybXMucDJtX2Jhc2UgPSBVTlNFVF9BRERSOworICAgIH0KKworICAgIGRvbWFpbl9zZXRfYWxs b2NfYml0c2l6ZShkKTsKKworICAgIC8qCisgICAgICogV2h5IGRvIHdlIG5lZWQgdGhpcz8gVGhl IG51bWJlciBvZiBwYWdlLXRhYmxlIGZyYW1lcyBkZXBlbmRzIG9uIHRoZQorICAgICAqIHNpemUg b2YgdGhlIGJvb3RzdHJhcCBhZGRyZXNzIHNwYWNlLiBCdXQgdGhlIHNpemUgb2YgdGhlIGFkZHJl c3Mgc3BhY2UKKyAgICAgKiBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgcGFnZS10YWJsZSBmcmFt ZXMgKHNpbmNlIGVhY2ggb25lIGlzIG1hcHBlZAorICAgICAqIHJlYWQtb25seSkuIFdlIGhhdmUg YSBwYWlyIG9mIHNpbXVsdGFuZW91cyBlcXVhdGlvbnMgaW4gdHdvIHVua25vd25zLAorICAgICAq IHdoaWNoIHdlIHNvbHZlIGJ5IGV4aGF1c3RpdmUgc2VhcmNoLgorICAgICAqLworICAgIHZfc3Rh cnQgICAgICAgICAgPSBwYXJtcy52aXJ0X2Jhc2U7CisgICAgdmtlcm5fc3RhcnQgICAgICA9IHBh cm1zLnZpcnRfa3N0YXJ0OworICAgIHZrZXJuX2VuZCAgICAgICAgPSBwYXJtcy52aXJ0X2tlbmQ7 CisgICAgaWYgKCBwYXJtcy51bm1hcHBlZF9pbml0cmQgKQorICAgIHsKKyAgICAgICAgdmluaXRy ZF9zdGFydCAgPSB2aW5pdHJkX2VuZCA9IDA7CisgICAgICAgIHZwaHlzbWFwX3N0YXJ0ID0gcm91 bmRfcGd1cCh2a2Vybl9lbmQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2aW5p dHJkX3N0YXJ0ICA9IHJvdW5kX3BndXAodmtlcm5fZW5kKTsKKyAgICAgICAgdmluaXRyZF9lbmQg ICAgPSB2aW5pdHJkX3N0YXJ0ICsgaW5pdHJkX2xlbjsKKyAgICAgICAgdnBoeXNtYXBfc3RhcnQg PSByb3VuZF9wZ3VwKHZpbml0cmRfZW5kKTsKKyAgICB9CisgICAgdnBoeXNtYXBfZW5kICAgICA9 IHZwaHlzbWFwX3N0YXJ0ICsgKG5yX3BhZ2VzICogKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YodW5zaWduZWQgbG9uZykgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YodW5zaWduZWQgaW50KSkpOworICAgIGlmICggcGFybXMu cDJtX2Jhc2UgIT0gVU5TRVRfQUREUiApCisgICAgICAgIHZwaHlzbWFwX2VuZCA9IHZwaHlzbWFw X3N0YXJ0OworICAgIHZzdGFydGluZm9fc3RhcnQgPSByb3VuZF9wZ3VwKHZwaHlzbWFwX2VuZCk7 CisgICAgdnN0YXJ0aW5mb19lbmQgICA9ICh2c3RhcnRpbmZvX3N0YXJ0ICsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RhcnRfaW5mbykgKworICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBkb20wX3ZnYV9jb25zb2xlX2luZm8pKTsKKworICAgIHZw dF9zdGFydCAgICAgICAgPSByb3VuZF9wZ3VwKHZzdGFydGluZm9fZW5kKTsKKyAgICBmb3IgKCBu cl9wdF9wYWdlcyA9IDI7IDsgbnJfcHRfcGFnZXMrKyApCisgICAgeworICAgICAgICB2cHRfZW5k ICAgICAgICAgID0gdnB0X3N0YXJ0ICsgKG5yX3B0X3BhZ2VzICogUEFHRV9TSVpFKTsKKyAgICAg ICAgdnN0YWNrX3N0YXJ0ICAgICA9IHZwdF9lbmQ7CisgICAgICAgIHZzdGFja19lbmQgICAgICAg PSB2c3RhY2tfc3RhcnQgKyBQQUdFX1NJWkU7CisgICAgICAgIHZfZW5kICAgICAgICAgICAgPSAo dnN0YWNrX2VuZCArICgxVUw8PDIyKS0xKSAmIH4oKDFVTDw8MjIpLTEpOworICAgICAgICBpZiAo ICh2X2VuZCAtIHZzdGFja19lbmQpIDwgKDUxMlVMIDw8IDEwKSApCisgICAgICAgICAgICB2X2Vu ZCArPSAxVUwgPDwgMjI7IC8qIEFkZCBleHRyYSA0TUIgdG8gZ2V0ID49IDUxMmtCIHBhZGRpbmcu ICovCisjZGVmaW5lIE5SKF9sLF9oLF9zKSBcCisgICAgKCgoKChfaCkgKyAoKDFVTDw8KF9zKSkt MSkpICYgfigoMVVMPDwoX3MpKS0xKSkgLSBcCisgICAgICAgKChfbCkgJiB+KCgxVUw8PChfcykp LTEpKSkgPj4gKF9zKSkKKyAgICAgICAgaWYgKCAoIWlzX3B2XzMyYml0X2RvbWFpbihkKSArIC8q ICMgTDQgKi8KKyAgICAgICAgICAgICAgTlIodl9zdGFydCwgdl9lbmQsIEw0X1BBR0VUQUJMRV9T SElGVCkgKyAvKiAjIEwzICovCisgICAgICAgICAgICAgICghaXNfcHZfMzJiaXRfZG9tYWluKGQp ID8KKyAgICAgICAgICAgICAgIE5SKHZfc3RhcnQsIHZfZW5kLCBMM19QQUdFVEFCTEVfU0hJRlQp IDogLyogIyBMMiAqLworICAgICAgICAgICAgICAgNCkgKyAvKiAjIGNvbXBhdCBMMiAqLworICAg ICAgICAgICAgICBOUih2X3N0YXJ0LCB2X2VuZCwgTDJfUEFHRVRBQkxFX1NISUZUKSkgIC8qICMg TDEgKi8KKyAgICAgICAgICAgICA8PSBucl9wdF9wYWdlcyApCisgICAgICAgICAgICBicmVhazsK KyAgICB9CisKKyAgICBjb3VudCA9IHZfZW5kIC0gdl9zdGFydDsKKyAgICBpZiAoIHZpbml0cmRf c3RhcnQgKQorICAgICAgICBjb3VudCAtPSBQQUdFX0FMSUdOKGluaXRyZF9sZW4pOworICAgIG9y ZGVyID0gZ2V0X29yZGVyX2Zyb21fYnl0ZXMoY291bnQpOworICAgIGlmICggKDFVTCA8PCBvcmRl cikgKyBQRk5fVVAoaW5pdHJkX2xlbikgPiBucl9wYWdlcyApCisgICAgICAgIHBhbmljKCJEb21h aW4gMCBhbGxvY2F0aW9uIGlzIHRvbyBzbWFsbCBmb3Iga2VybmVsIGltYWdlIik7CisKKyAgICBp ZiAoIHBhcm1zLnAybV9iYXNlICE9IFVOU0VUX0FERFIgKQorICAgIHsKKyAgICAgICAgdnBoeXNt YXBfc3RhcnQgPSBwYXJtcy5wMm1fYmFzZTsKKyAgICAgICAgdnBoeXNtYXBfZW5kICAgPSB2cGh5 c21hcF9zdGFydCArIG5yX3BhZ2VzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworICAgIH0KKyAg ICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgMCk7CisgICAgaWYgKCBwYWdl ID09IE5VTEwgKQorICAgICAgICBwYW5pYygiTm90IGVub3VnaCBSQU0gZm9yIGRvbWFpbiAwIGFs bG9jYXRpb24iKTsKKyAgICBhbGxvY19zcGZuID0gcGFnZV90b19tZm4ocGFnZSk7CisgICAgYWxs b2NfZXBmbiA9IGFsbG9jX3NwZm4gKyBkLT50b3RfcGFnZXM7CisKKyAgICBpZiAoIGluaXRyZF9s ZW4gKQorICAgIHsKKyAgICAgICAgaW5pdHJkX3BmbiA9IHZpbml0cmRfc3RhcnQgPworICAgICAg ICAgICAgICAgICAgICAgKHZpbml0cmRfc3RhcnQgLSB2X3N0YXJ0KSA+PiBQQUdFX1NISUZUIDoK KyAgICAgICAgICAgICAgICAgICAgIGQtPnRvdF9wYWdlczsKKyAgICAgICAgaW5pdHJkX21mbiA9 IG1mbiA9IGluaXRyZC0+bW9kX3N0YXJ0OworICAgICAgICBjb3VudCA9IFBGTl9VUChpbml0cmRf bGVuKTsKKyAgICAgICAgaWYgKCBkLT5hcmNoLnBoeXNhZGRyX2JpdHNpemUgJiYKKyAgICAgICAg ICAgICAoKG1mbiArIGNvdW50IC0gMSkgPj4gKGQtPmFyY2gucGh5c2FkZHJfYml0c2l6ZSAtIFBB R0VfU0hJRlQpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9yZGVyID0gZ2V0X29yZGVyX2Zy b21fcGFnZXMoY291bnQpOworICAgICAgICAgICAgcGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZXMo ZCwgb3JkZXIsIDApOworICAgICAgICAgICAgaWYgKCAhcGFnZSApCisgICAgICAgICAgICAgICAg cGFuaWMoIk5vdCBlbm91Z2ggUkFNIGZvciBkb21haW4gMCBpbml0cmQiKTsKKyAgICAgICAgICAg IGZvciAoIGNvdW50ID0gLWNvdW50OyBvcmRlci0tOyApCisgICAgICAgICAgICAgICAgaWYgKCBj b3VudCAmICgxVUwgPDwgb3JkZXIpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIGZyZWVfZG9taGVhcF9wYWdlcyhwYWdlLCBvcmRlcik7CisgICAgICAgICAgICAgICAg ICAgIHBhZ2UgKz0gMVVMIDw8IG9yZGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IG1lbWNweShwYWdlX3RvX3ZpcnQocGFnZSksIG1mbl90b192aXJ0KGluaXRyZC0+bW9kX3N0YXJ0 KSwKKyAgICAgICAgICAgICAgICAgICBpbml0cmRfbGVuKTsKKyAgICAgICAgICAgIG1wdF9hbGxv YyA9IChwYWRkcl90KWluaXRyZC0+bW9kX3N0YXJ0IDw8IFBBR0VfU0hJRlQ7CisgICAgICAgICAg ICBpbml0X2RvbWhlYXBfcGFnZXMobXB0X2FsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1wdF9hbGxvYyArIFBBR0VfQUxJR04oaW5pdHJkX2xlbikpOworICAgICAgICAgICAg aW5pdHJkLT5tb2Rfc3RhcnQgPSBpbml0cmRfbWZuID0gcGFnZV90b19tZm4ocGFnZSk7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoIGNvdW50 LS0gKQorICAgICAgICAgICAgICAgIGlmICggYXNzaWduX3BhZ2VzKGQsIG1mbl90b19wYWdlKG1m bisrKSwgMCwgMCkgKQorICAgICAgICAgICAgICAgICAgICBCVUcoKTsKKyAgICAgICAgfQorICAg ICAgICBpbml0cmQtPm1vZF9lbmQgPSAwOworICAgIH0KKworICAgIHByaW50aygiUEhZU0lDQUwg TUVNT1JZIEFSUkFOR0VNRU5UOlxuIgorICAgICAgICAgICAiIERvbTAgYWxsb2MuOiAgICUiUFJJ cGFkZHIiLT4lIlBSSXBhZGRyLAorICAgICAgICAgICBwZm5fdG9fcGFkZHIoYWxsb2Nfc3Bmbiks IHBmbl90b19wYWRkcihhbGxvY19lcGZuKSk7CisgICAgaWYgKCBkLT50b3RfcGFnZXMgPCBucl9w YWdlcyApCisgICAgICAgIHByaW50aygiICglbHUgcGFnZXMgdG8gYmUgYWxsb2NhdGVkKSIsCisg ICAgICAgICAgICAgICBucl9wYWdlcyAtIGQtPnRvdF9wYWdlcyk7CisgICAgaWYgKCBpbml0cmQg KQorICAgIHsKKyAgICAgICAgbXB0X2FsbG9jID0gKHBhZGRyX3QpaW5pdHJkLT5tb2Rfc3RhcnQg PDwgUEFHRV9TSElGVDsKKyAgICAgICAgcHJpbnRrKCJcbiBJbml0LiByYW1kaXNrOiAlIlBSSXBh ZGRyIi0+JSJQUklwYWRkciwKKyAgICAgICAgICAgICAgIG1wdF9hbGxvYywgbXB0X2FsbG9jICsg aW5pdHJkX2xlbik7CisgICAgfQorICAgIHByaW50aygiXG5WSVJUVUFMIE1FTU9SWSBBUlJBTkdF TUVOVDpcbiIKKyAgICAgICAgICAgIiBMb2FkZWQga2VybmVsOiAlcC0+JXBcbiIKKyAgICAgICAg ICAgIiBJbml0LiByYW1kaXNrOiAlcC0+JXBcbiIKKyAgICAgICAgICAgIiBQaHlzLU1hY2ggbWFw OiAlcC0+JXBcbiIKKyAgICAgICAgICAgIiBTdGFydCBpbmZvOiAgICAlcC0+JXBcbiIKKyAgICAg ICAgICAgIiBQYWdlIHRhYmxlczogICAlcC0+JXBcbiIKKyAgICAgICAgICAgIiBCb290IHN0YWNr OiAgICAlcC0+JXBcbiIKKyAgICAgICAgICAgIiBUT1RBTDogICAgICAgICAlcC0+JXBcbiIsCisg ICAgICAgICAgIF9wKHZrZXJuX3N0YXJ0KSwgX3Aodmtlcm5fZW5kKSwKKyAgICAgICAgICAgX3Ao dmluaXRyZF9zdGFydCksIF9wKHZpbml0cmRfZW5kKSwKKyAgICAgICAgICAgX3AodnBoeXNtYXBf c3RhcnQpLCBfcCh2cGh5c21hcF9lbmQpLAorICAgICAgICAgICBfcCh2c3RhcnRpbmZvX3N0YXJ0 KSwgX3AodnN0YXJ0aW5mb19lbmQpLAorICAgICAgICAgICBfcCh2cHRfc3RhcnQpLCBfcCh2cHRf ZW5kKSwKKyAgICAgICAgICAgX3AodnN0YWNrX3N0YXJ0KSwgX3AodnN0YWNrX2VuZCksCisgICAg ICAgICAgIF9wKHZfc3RhcnQpLCBfcCh2X2VuZCkpOworICAgIHByaW50aygiIEVOVFJZIEFERFJF U1M6ICVwXG4iLCBfcChwYXJtcy52aXJ0X2VudHJ5KSk7CisKKyAgICBwcm9jZXNzX3BlbmRpbmdf c29mdGlycXMoKTsKKworICAgIG1wdF9hbGxvYyA9ICh2cHRfc3RhcnQgLSB2X3N0YXJ0KSArIHBm bl90b19wYWRkcihhbGxvY19zcGZuKTsKKyAgICBpZiAoIHZpbml0cmRfc3RhcnQgKQorICAgICAg ICBtcHRfYWxsb2MgLT0gUEFHRV9BTElHTihpbml0cmRfbGVuKTsKKworICAgIC8qIE92ZXJsYXAg d2l0aCBYZW4gcHJvdGVjdGVkIGFyZWE/ICovCisgICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWlu KGQpID8KKyAgICAgICAgICgodl9zdGFydCA8IEhZUEVSVklTT1JfVklSVF9FTkQpICYmCisgICAg ICAgICAgKHZfZW5kID4gSFlQRVJWSVNPUl9WSVJUX1NUQVJUKSkgOgorICAgICAgICAgKHZfZW5k ID4gSFlQRVJWSVNPUl9DT01QQVRfVklSVF9TVEFSVChkKSkgKQorICAgIHsKKyAgICAgICAgcHJp bnRrKCJET00wIGltYWdlIG92ZXJsYXBzIHdpdGggWGVuIHByaXZhdGUgYXJlYS5cbiIpOworICAg ICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICgg aXNfcHZfMzJiaXRfZG9tYWluKGQpICkKKyAgICB7CisgICAgICAgIHYtPmFyY2gucHZfdmNwdS5m YWlsc2FmZV9jYWxsYmFja19jcyA9IEZMQVRfQ09NUEFUX0tFUk5FTF9DUzsKKyAgICAgICAgdi0+ YXJjaC5wdl92Y3B1LmV2ZW50X2NhbGxiYWNrX2NzICAgID0gRkxBVF9DT01QQVRfS0VSTkVMX0NT OworICAgIH0KKworICAgIC8qIFdBUk5JTkc6IFRoZSBuZXcgZG9tYWluIG11c3QgaGF2ZSBpdHMg J3Byb2Nlc3NvcicgZmllbGQgZmlsbGVkIGluISAqLworICAgIGlmICggIWlzX3B2XzMyYml0X2Rv bWFpbihkKSApCisgICAgeworICAgICAgICBtYWRkcl90b19wYWdlKG1wdF9hbGxvYyktPnUuaW51 c2UudHlwZV9pbmZvID0gUEdUX2w0X3BhZ2VfdGFibGU7CisgICAgICAgIGw0c3RhcnQgPSBsNHRh YiA9IF9fdmEobXB0X2FsbG9jKTsgbXB0X2FsbG9jICs9IFBBR0VfU0laRTsKKyAgICB9CisgICAg ZWxzZQorICAgIHsKKyAgICAgICAgcGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZShkLCBNRU1GX25v X293bmVyKTsKKyAgICAgICAgaWYgKCAhcGFnZSApCisgICAgICAgICAgICBwYW5pYygiTm90IGVu b3VnaCBSQU0gZm9yIGRvbWFpbiAwIFBNTDQiKTsKKyAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBl X2luZm8gPSBQR1RfbDRfcGFnZV90YWJsZXxQR1RfdmFsaWRhdGVkfDE7CisgICAgICAgIGw0c3Rh cnQgPSBsNHRhYiA9IHBhZ2VfdG9fdmlydChwYWdlKTsKKyAgICAgICAgbWFkZHJfdG9fcGFnZSht cHRfYWxsb2MpLT51LmludXNlLnR5cGVfaW5mbyA9IFBHVF9sM19wYWdlX3RhYmxlOworICAgICAg ICBsM3N0YXJ0ID0gX192YShtcHRfYWxsb2MpOyBtcHRfYWxsb2MgKz0gUEFHRV9TSVpFOworICAg IH0KKyAgICBjbGVhcl9wYWdlKGw0dGFiKTsKKyAgICBpbml0X2d1ZXN0X2w0X3RhYmxlKGw0dGFi LCBkLCAwKTsKKyAgICB2LT5hcmNoLmd1ZXN0X3RhYmxlID0gcGFnZXRhYmxlX2Zyb21fcGFkZHIo X19wYShsNHN0YXJ0KSk7CisgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQorICAgICAg ICB2LT5hcmNoLmd1ZXN0X3RhYmxlX3VzZXIgPSB2LT5hcmNoLmd1ZXN0X3RhYmxlOworCisgICAg bDR0YWIgKz0gbDRfdGFibGVfb2Zmc2V0KHZfc3RhcnQpOworICAgIHBmbiA9IGFsbG9jX3NwZm47 CisgICAgZm9yICggY291bnQgPSAwOyBjb3VudCA8ICgodl9lbmQtdl9zdGFydCk+PlBBR0VfU0hJ RlQpOyBjb3VudCsrICkKKyAgICB7CisgICAgICAgIGlmICggISgodW5zaWduZWQgbG9uZylsMXRh YiAmIChQQUdFX1NJWkUtMSkpICkKKyAgICAgICAgeworICAgICAgICAgICAgbWFkZHJfdG9fcGFn ZShtcHRfYWxsb2MpLT51LmludXNlLnR5cGVfaW5mbyA9IFBHVF9sMV9wYWdlX3RhYmxlOworICAg ICAgICAgICAgbDFzdGFydCA9IGwxdGFiID0gX192YShtcHRfYWxsb2MpOyBtcHRfYWxsb2MgKz0g UEFHRV9TSVpFOworICAgICAgICAgICAgY2xlYXJfcGFnZShsMXRhYik7CisgICAgICAgICAgICBp ZiAoIGNvdW50ID09IDAgKQorICAgICAgICAgICAgICAgIGwxdGFiICs9IGwxX3RhYmxlX29mZnNl dCh2X3N0YXJ0KTsKKyAgICAgICAgICAgIGlmICggISgodW5zaWduZWQgbG9uZylsMnRhYiAmIChQ QUdFX1NJWkUtMSkpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYWRkcl90b19w YWdlKG1wdF9hbGxvYyktPnUuaW51c2UudHlwZV9pbmZvID0gUEdUX2wyX3BhZ2VfdGFibGU7Cisg ICAgICAgICAgICAgICAgbDJzdGFydCA9IGwydGFiID0gX192YShtcHRfYWxsb2MpOyBtcHRfYWxs b2MgKz0gUEFHRV9TSVpFOworICAgICAgICAgICAgICAgIGNsZWFyX3BhZ2UobDJ0YWIpOworICAg ICAgICAgICAgICAgIGlmICggY291bnQgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIGwydGFi ICs9IGwyX3RhYmxlX29mZnNldCh2X3N0YXJ0KTsKKyAgICAgICAgICAgICAgICBpZiAoICEoKHVu c2lnbmVkIGxvbmcpbDN0YWIgJiAoUEFHRV9TSVpFLTEpKSApCisgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICBpZiAoIGNvdW50IHx8ICFsM3N0YXJ0ICkKKyAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFkZHJfdG9fcGFnZShtcHRfYWxs b2MpLT51LmludXNlLnR5cGVfaW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdU X2wzX3BhZ2VfdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICBsM3N0YXJ0ID0gX192YSht cHRfYWxsb2MpOyBtcHRfYWxsb2MgKz0gUEFHRV9TSVpFOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGwzdGFiID0gbDNzdGFydDsKKyAgICAgICAgICAgICAgICAg ICAgY2xlYXJfcGFnZShsM3RhYik7CisgICAgICAgICAgICAgICAgICAgIGlmICggY291bnQgPT0g MCApCisgICAgICAgICAgICAgICAgICAgICAgICBsM3RhYiArPSBsM190YWJsZV9vZmZzZXQodl9z dGFydCk7CisgICAgICAgICAgICAgICAgICAgICpsNHRhYiA9IGw0ZV9mcm9tX3BhZGRyKF9fcGEo bDNzdGFydCksIEw0X1BST1QpOworICAgICAgICAgICAgICAgICAgICBsNHRhYisrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqbDN0YWIgPSBsM2VfZnJvbV9wYWRkcihfX3Bh KGwyc3RhcnQpLCBMM19QUk9UKTsKKyAgICAgICAgICAgICAgICBsM3RhYisrOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgKmwydGFiID0gbDJlX2Zyb21fcGFkZHIoX19wYShsMXN0YXJ0KSwg TDJfUFJPVCk7CisgICAgICAgICAgICBsMnRhYisrOworICAgICAgICB9CisgICAgICAgIGlmICgg Y291bnQgPCBpbml0cmRfcGZuIHx8IGNvdW50ID49IGluaXRyZF9wZm4gKyBQRk5fVVAoaW5pdHJk X2xlbikgKQorICAgICAgICAgICAgbWZuID0gcGZuKys7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIG1mbiA9IGluaXRyZF9tZm4rKzsKKyAgICAgICAgKmwxdGFiID0gbDFlX2Zyb21fcGZuKG1m biwgKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTDFfUFJPVCA6IENPTVBBVF9MMV9QUk9UKSk7CisgICAgICAgIGwxdGFiKys7CisK KyAgICAgICAgaWYgKCAhcGFnaW5nX21vZGVfdHJhbnNsYXRlKGQpICkKKyAgICAgICAgeworICAg ICAgICAgICAgcGFnZSA9IG1mbl90b19wYWdlKG1mbik7CisgICAgICAgICAgICBpZiAoICFwYWdl LT51LmludXNlLnR5cGVfaW5mbyAmJgorICAgICAgICAgICAgICAgICAhZ2V0X3BhZ2VfYW5kX3R5 cGUocGFnZSwgZCwgUEdUX3dyaXRhYmxlX3BhZ2UpICkKKyAgICAgICAgICAgICAgICBCVUcoKTsK KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKKyAg ICB7CisgICAgICAgIC8qIEVuc3VyZSB0aGUgZmlyc3QgZm91ciBMMyBlbnRyaWVzIGFyZSBhbGwg cG9wdWxhdGVkLiAqLworICAgICAgICBmb3IgKCBpID0gMCwgbDN0YWIgPSBsM3N0YXJ0OyBpIDwg NDsgKytpLCArK2wzdGFiICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAhbDNlX2dldF9p bnRwdGUoKmwzdGFiKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWFkZHJfdG9f cGFnZShtcHRfYWxsb2MpLT51LmludXNlLnR5cGVfaW5mbyA9IFBHVF9sMl9wYWdlX3RhYmxlOwor ICAgICAgICAgICAgICAgIGwydGFiID0gX192YShtcHRfYWxsb2MpOyBtcHRfYWxsb2MgKz0gUEFH RV9TSVpFOworICAgICAgICAgICAgICAgIGNsZWFyX3BhZ2UobDJ0YWIpOworICAgICAgICAgICAg ICAgICpsM3RhYiA9IGwzZV9mcm9tX3BhZGRyKF9fcGEobDJ0YWIpLCBMM19QUk9UKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICggaSA9PSAzICkKKyAgICAgICAgICAgICAgICBsM2Vf Z2V0X3BhZ2UoKmwzdGFiKS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3BhZV94ZW5fbDI7Cisg ICAgICAgIH0KKyAgICAgICAgLyogSW5zdGFsbCByZWFkLW9ubHkgZ3Vlc3QgdmlzaWJsZSBNUFQg bWFwcGluZy4gKi8KKyAgICAgICAgbDJ0YWIgPSBsM2VfdG9fbDJlKGwzc3RhcnRbM10pOworICAg ICAgICBtZW1jcHkoJmwydGFiW0NPTVBBVF9MMl9QQUdFVEFCTEVfRklSU1RfWEVOX1NMT1QoZCld LAorICAgICAgICAgICAgICAgJmNvbXBhdF9pZGxlX3BnX3RhYmxlX2wyW2wyX3RhYmxlX29mZnNl dChISVJPX0NPTVBBVF9NUFRfVklSVF9TVEFSVCldLAorICAgICAgICAgICAgICAgQ09NUEFUX0wy X1BBR0VUQUJMRV9YRU5fU0xPVFMoZCkgKiBzaXplb2YoKmwydGFiKSk7CisgICAgfQorCisgICAg LyogUGFnZXMgdGhhdCBhcmUgcGFydCBvZiBwYWdlIHRhYmxlcyBtdXN0IGJlIHJlYWQgb25seS4g Ki8KKyAgICBpZiAgKCBpc19wdl9kb21haW4oZCkgKQorICAgICAgICBtYXJrX3B2X3B0X3BhZ2Vz X3Jkb25seShkLCBsNHN0YXJ0LCB2cHRfc3RhcnQsIG5yX3B0X3BhZ2VzKTsKKworICAgIC8qIE1h c2sgYWxsIHVwY2FsbHMuLi4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IFhFTl9MRUdBQ1lfTUFY X1ZDUFVTOyBpKysgKQorICAgICAgICBzaGFyZWRfaW5mbyhkLCB2Y3B1X2luZm9baV0uZXZ0Y2hu X3VwY2FsbF9tYXNrKSA9IDE7CisKKyAgICBwcmludGsoIkRvbTAgaGFzIG1heGltdW0gJXUgVkNQ VXNcbiIsIGQtPm1heF92Y3B1cyk7CisKKyAgICBjcHUgPSB2LT5wcm9jZXNzb3I7CisgICAgZm9y ICggaSA9IDE7IGkgPCBkLT5tYXhfdmNwdXM7IGkrKyApCisgICAgeworICAgICAgICBzdHJ1Y3Qg dmNwdSAqcCA9IGRvbTBfc2V0dXBfdmNwdShkLCBpLCBjcHUpOworCisgICAgICAgIGlmICggcCAp CisgICAgICAgICAgICBjcHUgPSBwLT5wcm9jZXNzb3I7CisgICAgfQorCisgICAgZC0+YXJjaC5w YWdpbmcubW9kZSA9IDA7CisKKyAgICAvKiBTZXQgdXAgQ1IzIHZhbHVlIGZvciB3cml0ZV9wdGJh c2UgKi8KKyAgICBpZiAoIHBhZ2luZ19tb2RlX2VuYWJsZWQoZCkgKQorICAgICAgICBwYWdpbmdf dXBkYXRlX3BhZ2luZ19tb2Rlcyh2KTsKKyAgICBlbHNlCisgICAgICAgIHVwZGF0ZV9jcjModik7 CisKKyAgICAvKiBXZSBydW4gb24gZG9tMCdzIHBhZ2UgdGFibGVzIGZvciB0aGUgZmluYWwgcGFy dCBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4gKi8KKyAgICB3cml0ZV9wdGJhc2Uodik7CisgICAgbWFw Y2FjaGVfb3ZlcnJpZGVfY3VycmVudCh2KTsKKworICAgIC8qIENvcHkgdGhlIE9TIGltYWdlIGFu ZCBmcmVlIHRlbXBvcmFyeSBidWZmZXIuICovCisgICAgZWxmLmRlc3RfYmFzZSA9ICh2b2lkKil2 a2Vybl9zdGFydDsKKyAgICBlbGYuZGVzdF9zaXplID0gdmtlcm5fZW5kIC0gdmtlcm5fc3RhcnQ7 CisgICAgZWxmX3NldF92Y3B1KCZlbGYsIHYpOworICAgIHJjID0gZWxmX2xvYWRfYmluYXJ5KCZl bGYpOworICAgIGlmICggcmMgPCAwICkKKyAgICB7CisgICAgICAgIHByaW50aygiRmFpbGVkIHRv IGxvYWQgdGhlIGtlcm5lbCBiaW5hcnlcbiIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9Cisg ICAgYm9vdHN0cmFwX21hcChOVUxMKTsKKworICAgIGlmICggVU5TRVRfQUREUiAhPSBwYXJtcy52 aXJ0X2h5cGVyY2FsbCApCisgICAgeworICAgICAgICBpZiAoIChwYXJtcy52aXJ0X2h5cGVyY2Fs bCA8IHZfc3RhcnQpIHx8CisgICAgICAgICAgICAgKHBhcm1zLnZpcnRfaHlwZXJjYWxsID49IHZf ZW5kKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hcGNhY2hlX292ZXJyaWRlX2N1cnJlbnQo TlVMTCk7CisgICAgICAgICAgICB3cml0ZV9wdGJhc2UoY3VycmVudCk7CisgICAgICAgICAgICBw cmludGsoIkludmFsaWQgSFlQRVJDQUxMX1BBR0UgZmllbGQgaW4gRUxGIG5vdGVzLlxuIik7Cisg ICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAg ICAgICAgaHlwZXJjYWxsX3BhZ2VfaW5pdGlhbGlzZSgKKyAgICAgICAgICAgIGQsICh2b2lkICop KHVuc2lnbmVkIGxvbmcpcGFybXMudmlydF9oeXBlcmNhbGwpOworICAgIH0KKworICAgIC8qIEZy ZWUgdGVtcG9yYXJ5IGJ1ZmZlcnMuICovCisgICAgZGlzY2FyZF9pbml0aWFsX2ltYWdlcygpOwor CisgICAgLyogU2V0IHVwIHN0YXJ0IGluZm8gYXJlYS4gKi8KKyAgICBzaSA9IChzdGFydF9pbmZv X3QgKil2c3RhcnRpbmZvX3N0YXJ0OworICAgIGNsZWFyX3BhZ2Uoc2kpOworICAgIHNpLT5ucl9w YWdlcyA9IG5yX3BhZ2VzOworCisgICAgc2ktPnNoYXJlZF9pbmZvID0gdmlydF90b19tYWRkcihk LT5zaGFyZWRfaW5mbyk7CisKKyAgICBzaS0+ZmxhZ3MgICAgICAgID0gU0lGX1BSSVZJTEVHRUQg fCBTSUZfSU5JVERPTUFJTjsKKyAgICBpZiAoICF2aW5pdHJkX3N0YXJ0ICYmIGluaXRyZF9sZW4g KQorICAgICAgICBzaS0+ZmxhZ3MgICB8PSBTSUZfTU9EX1NUQVJUX1BGTjsKKyAgICBzaS0+Zmxh Z3MgICAgICAgfD0gKHhlbl9wcm9jZXNzb3JfcG1iaXRzIDw8IDgpICYgU0lGX1BNX01BU0s7Cisg ICAgc2ktPnB0X2Jhc2UgICAgICA9IHZwdF9zdGFydDsKKyAgICBzaS0+bnJfcHRfZnJhbWVzID0g bnJfcHRfcGFnZXM7CisgICAgc2ktPm1mbl9saXN0ICAgICA9IHZwaHlzbWFwX3N0YXJ0OworICAg IHNucHJpbnRmKHNpLT5tYWdpYywgc2l6ZW9mKHNpLT5tYWdpYyksICJ4ZW4tMy4wLXg4Nl8lZCVz IiwKKyAgICAgICAgICAgICBlbGZfNjRiaXQoJmVsZikgPyA2NCA6IDMyLCBwYXJtcy5wYWUgPyAi cCIgOiAiIik7CisKKyAgICBjb3VudCA9IGQtPnRvdF9wYWdlczsKKworICAgIC8qIFNldCB1cCB0 aGUgcGh5cy0+bWFjaGluZSB0YWJsZSBpZiBub3QgcGFydCBvZiB0aGUgaW5pdGlhbCBtYXBwaW5n LiAqLworICAgIGlmICggaXNfcHZfZG9tYWluKGQpICYmIHBhcm1zLnAybV9iYXNlICE9IFVOU0VU X0FERFIgKQorICAgIHsKKyAgICAgICAgcGZuID0gcGFnZXRhYmxlX2dldF9wZm4odi0+YXJjaC5n dWVzdF90YWJsZSk7CisgICAgICAgIHNldHVwX3B2X3BoeXNtYXAoZCwgcGZuLCB2X3N0YXJ0LCB2 X2VuZCwgdnBoeXNtYXBfc3RhcnQsIHZwaHlzbWFwX2VuZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBucl9wYWdlcyk7CisgICAgfQorCisgICAgLyogV3JpdGUgdGhlIHBoeXMtPm1hY2hpbmUg YW5kIG1hY2hpbmUtPnBoeXMgdGFibGUgZW50cmllcy4gKi8KKyAgICBmb3IgKCBwZm4gPSAwOyBw Zm4gPCBjb3VudDsgcGZuKysgKQorICAgIHsKKyAgICAgICAgbWZuID0gcGZuICsgYWxsb2Nfc3Bm bjsKKyAgICAgICAgaWYgKCBwZm4gPj0gaW5pdHJkX3BmbiApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGlmICggcGZuIDwgaW5pdHJkX3BmbiArIFBGTl9VUChpbml0cmRfbGVuKSApCisgICAgICAg ICAgICAgICAgbWZuID0gaW5pdHJkLT5tb2Rfc3RhcnQgKyAocGZuIC0gaW5pdHJkX3Bmbik7Cisg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWZuIC09IFBGTl9VUChpbml0cmRfbGVu KTsKKyAgICAgICAgfQorI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgUkVWRVJTRV9TVEFSVCAoKHZf ZW5kIC0gdl9zdGFydCkgPj4gUEFHRV9TSElGVCkKKyAgICAgICAgaWYgKCBwZm4gPiBSRVZFUlNF X1NUQVJUICYmICh2aW5pdHJkX3N0YXJ0IHx8IHBmbiA8IGluaXRyZF9wZm4pICkKKyAgICAgICAg ICAgIG1mbiA9IGFsbG9jX2VwZm4gLSAocGZuIC0gUkVWRVJTRV9TVEFSVCk7CisjZW5kaWYKKyAg ICAgICAgZG9tMF91cGRhdGVfcGh5c21hcChkLCBwZm4sIG1mbiwgdnBoeXNtYXBfc3RhcnQpOwor ICAgICAgICBpZiAoIShwZm4gJiAweGZmZmZmKSkKKyAgICAgICAgICAgIHByb2Nlc3NfcGVuZGlu Z19zb2Z0aXJxcygpOworICAgIH0KKyAgICBzaS0+Zmlyc3RfcDJtX3BmbiA9IHBmbjsKKyAgICBz aS0+bnJfcDJtX2ZyYW1lcyA9IGQtPnRvdF9wYWdlcyAtIGNvdW50OworICAgIHBhZ2VfbGlzdF9m b3JfZWFjaCAoIHBhZ2UsICZkLT5wYWdlX2xpc3QgKQorICAgIHsKKyAgICAgICAgbWZuID0gcGFn ZV90b19tZm4ocGFnZSk7CisgICAgICAgIEJVR19PTihTSEFSRURfTTJQKGdldF9ncGZuX2Zyb21f bWZuKG1mbikpKTsKKyAgICAgICAgaWYgKCBnZXRfZ3Bmbl9mcm9tX21mbihtZm4pID49IGNvdW50 ICkKKyAgICAgICAgeworICAgICAgICAgICAgQlVHX09OKGlzX3B2XzMyYml0X2RvbWFpbihkKSk7 CisgICAgICAgICAgICBpZiAoICFwYWdpbmdfbW9kZV90cmFuc2xhdGUoZCkgJiYgIXBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICYmCisgICAgICAgICAgICAgICAgICFnZXRfcGFnZV9hbmRfdHlwZShw YWdlLCBkLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQorICAgICAgICAgICAgICAgIEJVRygpOworCisg ICAgICAgICAgICBkb20wX3VwZGF0ZV9waHlzbWFwKGQsIHBmbiwgbWZuLCB2cGh5c21hcF9zdGFy dCk7CisgICAgICAgICAgICArK3BmbjsKKyAgICAgICAgICAgIGlmICghKHBmbiAmIDB4ZmZmZmYp KQorICAgICAgICAgICAgICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOworICAgICAgICB9 CisgICAgfQorICAgIEJVR19PTihwZm4gIT0gZC0+dG90X3BhZ2VzKTsKKyNpZm5kZWYgTkRFQlVH CisgICAgYWxsb2NfZXBmbiArPSBQRk5fVVAoaW5pdHJkX2xlbikgKyBzaS0+bnJfcDJtX2ZyYW1l czsKKyNlbmRpZgorICAgIHdoaWxlICggcGZuIDwgbnJfcGFnZXMgKQorICAgIHsKKyAgICAgICAg aWYgKCAocGFnZSA9IGFsbG9jX2NodW5rKGQsIG5yX3BhZ2VzIC0gZC0+dG90X3BhZ2VzKSkgPT0g TlVMTCApCisgICAgICAgICAgICBwYW5pYygiTm90IGVub3VnaCBSQU0gZm9yIERPTTAgcmVzZXJ2 YXRpb24iKTsKKyAgICAgICAgd2hpbGUgKCBwZm4gPCBkLT50b3RfcGFnZXMgKQorICAgICAgICB7 CisgICAgICAgICAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKyNpZm5kZWYgTkRFQlVHCisj ZGVmaW5lIHBmbiAobnJfcGFnZXMgLSAxIC0gKHBmbiAtIChhbGxvY19lcGZuIC0gYWxsb2Nfc3Bm bikpKQorI2VuZGlmCisgICAgICAgICAgICBkb20wX3VwZGF0ZV9waHlzbWFwKGQsIHBmbiwgbWZu LCB2cGh5c21hcF9zdGFydCk7CisjdW5kZWYgcGZuCisgICAgICAgICAgICBwYWdlKys7IHBmbisr OworICAgICAgICAgICAgaWYgKCEocGZuICYgMHhmZmZmZikpCisgICAgICAgICAgICAgICAgcHJv Y2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGlu aXRyZF9sZW4gIT0gMCApCisgICAgeworICAgICAgICBzaS0+bW9kX3N0YXJ0ID0gdmluaXRyZF9z dGFydCA/OiBpbml0cmRfcGZuOworICAgICAgICBzaS0+bW9kX2xlbiAgID0gaW5pdHJkX2xlbjsK KyAgICB9CisKKyAgICBtZW1zZXQoc2ktPmNtZF9saW5lLCAwLCBzaXplb2Yoc2ktPmNtZF9saW5l KSk7CisgICAgaWYgKCBjbWRsaW5lICE9IE5VTEwgKQorICAgICAgICBzdHJsY3B5KChjaGFyICop c2ktPmNtZF9saW5lLCBjbWRsaW5lLCBzaXplb2Yoc2ktPmNtZF9saW5lKSk7CisKKyAgICBpZiAo IGZpbGxfY29uc29sZV9zdGFydF9pbmZvKCh2b2lkICopKHNpICsgMSkpICkKKyAgICB7CisgICAg ICAgIHNpLT5jb25zb2xlLmRvbTAuaW5mb19vZmYgID0gc2l6ZW9mKHN0cnVjdCBzdGFydF9pbmZv KTsKKyAgICAgICAgc2ktPmNvbnNvbGUuZG9tMC5pbmZvX3NpemUgPSBzaXplb2Yoc3RydWN0IGRv bTBfdmdhX2NvbnNvbGVfaW5mbyk7CisgICAgfQorCisgICAgaWYgKCBpc19wdl8zMmJpdF9kb21h aW4oZCkgKQorICAgICAgICB4bGF0X3N0YXJ0X2luZm8oc2ksIFhMQVRfc3RhcnRfaW5mb19jb25z b2xlX2RvbTApOworCisgICAgLyogUmV0dXJuIHRvIGlkbGUgZG9tYWluJ3MgcGFnZSB0YWJsZXMu ICovCisgICAgbWFwY2FjaGVfb3ZlcnJpZGVfY3VycmVudChOVUxMKTsKKyAgICB3cml0ZV9wdGJh c2UoY3VycmVudCk7CisKKyAgICB1cGRhdGVfZG9tYWluX3dhbGxjbG9ja190aW1lKGQpOworCisg ICAgdi0+aXNfaW5pdGlhbGlzZWQgPSAxOworICAgIGNsZWFyX2JpdChfVlBGX2Rvd24sICZ2LT5w YXVzZV9mbGFncyk7CisKKyAgICAvKgorICAgICAqIEluaXRpYWwgcmVnaXN0ZXIgdmFsdWVzOgor ICAgICAqICBEUyxFUyxGUyxHUyA9IEZMQVRfS0VSTkVMX0RTCisgICAgICogICAgICAgQ1M6cklQ ID0gRkxBVF9LRVJORUxfQ1M6c3RhcnRfcGMKKyAgICAgKiAgICAgICBTUzpyU1AgPSBGTEFUX0tF Uk5FTF9TUzpzdGFydF9zdGFjaworICAgICAqICAgICAgICAgIHJTSSA9IHN0YXJ0X2luZm8KKyAg ICAgKiAgW3JBWCxyQlgsckNYLHJEWCxyREksckJQLFI4LVIxNSBhcmUgemVyb10KKyAgICAgKi8K KyAgICByZWdzID0gJnYtPmFyY2gudXNlcl9yZWdzOworICAgIHJlZ3MtPmRzID0gcmVncy0+ZXMg PSByZWdzLT5mcyA9IHJlZ3MtPmdzID0KKyAgICAgICAgIWlzX3B2XzMyYml0X2RvbWFpbihkKSA/ IEZMQVRfS0VSTkVMX0RTIDogRkxBVF9DT01QQVRfS0VSTkVMX0RTOworICAgIHJlZ3MtPnNzID0g KCFpc19wdl8zMmJpdF9kb21haW4oZCkgPworICAgICAgICAgICAgICAgIEZMQVRfS0VSTkVMX1NT IDogRkxBVF9DT01QQVRfS0VSTkVMX1NTKTsKKyAgICByZWdzLT5jcyA9ICghaXNfcHZfMzJiaXRf ZG9tYWluKGQpID8KKyAgICAgICAgICAgICAgICBGTEFUX0tFUk5FTF9DUyA6IEZMQVRfQ09NUEFU X0tFUk5FTF9DUyk7CisgICAgcmVncy0+cmlwID0gcGFybXMudmlydF9lbnRyeTsKKyAgICByZWdz LT5yc3AgPSB2c3RhY2tfZW5kOworICAgIHJlZ3MtPnJzaSA9IHZzdGFydGluZm9fc3RhcnQ7Cisg ICAgcmVncy0+ZWZsYWdzID0gWDg2X0VGTEFHU19JRjsKKworI2lmZGVmIENPTkZJR19TSEFET1df UEFHSU5HCisgICAgaWYgKCBvcHRfZG9tMF9zaGFkb3cgJiYgcGFnaW5nX2VuYWJsZShkLCBQR19T SF9lbmFibGUpID09IDAgKQorICAgICAgICBwYWdpbmdfdXBkYXRlX3BhZ2luZ19tb2Rlcyh2KTsK KyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBQVkggRml4bWU6IFhFTkZFQVRfc3VwZXJ2aXNvcl9t b2RlX2tlcm5lbCBoYXMgYmVlbiByZXVzZWQgaW4gUFZIIHdpdGggYQorICAgICAqIGRpZmZlcmVu dCBtZWFuaW5nLgorICAgICAqLworICAgIGlmICggdGVzdF9iaXQoWEVORkVBVF9zdXBlcnZpc29y X21vZGVfa2VybmVsLCBwYXJtcy5mX3JlcXVpcmVkKSApCisgICAgICAgIHBhbmljKCJEb20wIHJl cXVpcmVzIHN1cGVydmlzb3ItbW9kZSBleGVjdXRpb24iKTsKKworICAgIHJjID0gZG9tMF9zZXR1 cF9wZXJtaXNzaW9ucyhkKTsKKyAgICBCVUdfT04ocmMgIT0gMCk7CisKKyAgICBpZiAoIGVsZl9j aGVja19icm9rZW4oJmVsZikgKQorICAgICAgICBwcmludGsoIiBYZW4gd2FybmluZzogZG9tMCBr ZXJuZWwgYnJva2VuIEVMRjogJXNcbiIsCisgICAgICAgICAgICAgICBlbGZfY2hlY2tfYnJva2Vu KCZlbGYpKTsKKworICAgIGlmICggZC0+ZG9tYWluX2lkID09IGhhcmR3YXJlX2RvbWlkICkKKyAg ICAgICAgaW9tbXVfaHdkb21faW5pdChkKTsKKworICAgIHJldHVybiAwOworCitvdXQ6CisgICAg aWYgKCBlbGZfY2hlY2tfYnJva2VuKCZlbGYpICkKKyAgICAgICAgcHJpbnRrKCIgWGVuIGRvbTAg a2VybmVsIGJyb2tlbiBFTEY6ICVzXG4iLAorICAgICAgICAgICAgICAgZWxmX2NoZWNrX2Jyb2tl bigmZWxmKSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6 CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDog NAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAq LwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb20wX2J1aWxkLmggYi94ZW4vaW5j bHVkZS9hc20teDg2L2RvbTBfYnVpbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi41ZDA5MzY3M2Q5Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4 Ni9kb20wX2J1aWxkLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBfRE9NMF9CVUlMRF9IXwor I2RlZmluZSBfRE9NMF9CVUlMRF9IXworCisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisKKyNpbmNs dWRlIDxhc20vc2V0dXAuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGludCBkb20wX21lbWZsYWdzOwor Cit1bnNpZ25lZCBsb25nIGRvbTBfY29tcHV0ZV9ucl9wYWdlcyhzdHJ1Y3QgZG9tYWluICpkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGVsZl9kb21fcGFybXMg KnBhcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBpbml0cmRfbGVuKTsKK3N0cnVjdCB2Y3B1ICpkb20wX3NldHVwX3ZjcHUoc3RydWN0IGRvbWFp biAqZCwgdW5zaWduZWQgaW50IHZjcHVfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBjcHUpOworaW50IGRvbTBfc2V0dXBfcGVybWlzc2lvbnMoc3RydWN0IGRv bWFpbiAqZCk7CisKK2ludCBkb20wX2NvbnN0cnVjdF9wdihzdHJ1Y3QgZG9tYWluICpkLCBjb25z dCBtb2R1bGVfdCAqaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBp bWFnZV9oZWFkcm9vbSwKKyAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfdCAqaW5pdHJkLAor ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqYm9vdHN0cmFwX21hcCkoY29uc3QgbW9kdWxl X3QgKiksCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY21kbGluZSk7CisKKyNlbmRpZgkv KiBfRE9NMF9CVUlMRF9IXyAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTog QworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13 aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMTEu MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=