From owner-freebsd-ports-bugs@FreeBSD.ORG Tue Dec 21 10:00:28 2010 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B96BC106566B for ; Tue, 21 Dec 2010 10:00:28 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id A5D7A8FC0C for ; Tue, 21 Dec 2010 10:00:28 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id oBLA0STZ033209 for ; Tue, 21 Dec 2010 10:00:28 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id oBLA0S2E033185; Tue, 21 Dec 2010 10:00:28 GMT (envelope-from gnats) Date: Tue, 21 Dec 2010 10:00:28 GMT Message-Id: <201012211000.oBLA0S2E033185@freefall.freebsd.org> To: freebsd-ports-bugs@FreeBSD.org From: Oleg Gawriloff Cc: Subject: Re: ports/144041: security/openssh-portable: sftp coredumps when 'ls'ing X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Oleg Gawriloff List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Dec 2010 10:00:28 -0000 The following reply was made to PR ports/144041; it has been noted by GNATS. From: Oleg Gawriloff To: bug-followup@FreeBSD.org, gnrp@physik.tu-berlin.de Cc: Subject: Re: ports/144041: security/openssh-portable: sftp coredumps when 'ls'ing Date: Tue, 21 Dec 2010 11:58:36 +0200 This is a cryptographically signed message in MIME format. --------------ms040800010301040905010606 Content-Type: multipart/mixed; boundary="------------090401030803030509030101" This is a multi-part message in MIME format. --------------090401030803030509030101 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Problem was fixed in 5.3p1. Here's port update. PS: Yes, I know about=20 http://www.freebsd.org/cgi/query-pr.cgi?pr=3Dports/150493. But there is=20 very slow progress since september and lpk patch is gone. --=20 Signed, Oleg Gawriloff. --------------090401030803030509030101 Content-Type: text/plain; name="openssh-portable-5.3p1.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="openssh-portable-5.3p1.diff" ZGlmZiAtTnJ1IC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9NYWtlZmls ZSAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0YWJsZS9NYWtlZmlsZQotLS0gL2hvbWUv Z2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL01ha2VmaWxlCTIwMTAtMTEtMjIgMDE6 NDg6NDkuMDAwMDAwMDAwICswMjAwCisrKyAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0 YWJsZS9NYWtlZmlsZQkyMDEwLTEyLTIxIDExOjMwOjM2LjAwMDAwMDAwMCArMDIwMApAQCAt Niw3ICs2LDcgQEAKICMKIAogUE9SVE5BTUU9CW9wZW5zc2gKLURJU1RWRVJTSU9OPQk1LjJw MQorRElTVFZFUlNJT049CTUuM3AxCiBQT1JUUkVWSVNJT049CTMKIFBPUlRFUE9DSD0JMQog Q0FURUdPUklFUz0Jc2VjdXJpdHkgaXB2NgpAQCAtMTYxLDcgKzE2MSw3IEBACiAKICMgU2Vl IGh0dHA6Ly9kZXYuaW52ZXJzZXBhdGguY29tL3RyYWMvb3BlbnNzaC1scGsKIC5pZiBkZWZp bmVkKFdJVEhfTFBLKQotRVhUUkFfUEFUQ0hFUys9CQkke0ZJTEVTRElSfS9jb250cmliLW9w ZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC5wYXRjaAorRVhUUkFfUEFUQ0hFUys9CQkke0ZJTEVT RElSfS9jb250cmliLW9wZW5zc2gtbHBrLTUuM3AxLTAuMy4xMC5wYXRjaAogVVNFX09QRU5M REFQPQkJeWVzCiBDUFBGTEFHUys9CQkiLUkke0xPQ0FMQkFTRX0vaW5jbHVkZSAtRFdJVEhf TERBUF9QVUJLRVkiCiBDT05GSUdVUkVfQVJHUys9CS0td2l0aC1saWJzPSctbGxkYXAnIC0t d2l0aC1sZGZsYWdzPSctTCR7TE9DQUxCQVNFfS9saWInIFwKQEAgLTE3NCwxMiArMTc0LDYg QEAKIEVYVFJBX1BBVENIRVMrPQkJJHtGSUxFU0RJUn0vbHBrK2hwbi1zZXJ2Y29uZi5jLnBh dGNoCiAuZWxpZiBkZWZpbmVkKFdJVEhfSFBOKSAmJiAhZGVmaW5lZChXSVRIX0xQSykKIEVY VFJBX1BBVENIRVMrPQkJJHtGSUxFU0RJUn0vb3BlbnNzaC01LjJwMS1ocG4xM3Y2LXNlcnZj b25mLmMuZGlmZgotLmVsaWYgZGVmaW5lZChXSVRIX0xQSykgJiYgIWRlZmluZWQoV0lUSF9I UE4pCi1FWFRSQV9QQVRDSEVTKz0JCSR7RklMRVNESVJ9L2NvbnRyaWItb3BlbnNzaC1scGst NS4xcDEtMC4zLjEwLXNlcnZjb25mLmMucGF0Y2gKLS5lbmRpZgotCi0uaWYgZGVmaW5lZChX SVRIX0xQSykgJiYgJHtBUkNIfSA9PSAiYW1kNjQiCi1FWFRSQV9QQVRDSEVTKz0JCSR7RklM RVNESVJ9L2NvbnRyaWItb3BlbnNzaC01LjFfcDEtbHBrLTY0Yml0LnBhdGNoCiAuZW5kaWYK IAogIyBTZWUgaHR0cDovL3d3dy5yb3VtZW5wZXRyb3YuaW5mby9vcGVuc3NoLwpkaWZmIC1O cnUgL2hvbWUvZ2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL2Rpc3RpbmZvIC9ob21l L2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2Rpc3RpbmZvCi0tLSAvaG9tZS9nYXdyaWxv ZmYvbHBrL29wZW5zc2gtcG9ydGFibGUvZGlzdGluZm8JMjAwOS0wOS0xOCAxNzowNTo1Mi4w MDAwMDAwMDAgKzAzMDAKKysrIC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2Rp c3RpbmZvCTIwMTAtMTItMjEgMTE6MTY6MTcuMDAwMDAwMDAwICswMjAwCkBAIC0xLDYgKzEs NiBAQAotTUQ1IChvcGVuc3NoLTUuMnAxLnRhci5neikgPSBhZGE3OWM3MzI4YTg1NTFiZGY1 NWM5NWU2MzFlN2RhZAotU0hBMjU2IChvcGVuc3NoLTUuMnAxLnRhci5neikgPSA0MDIzNzEw YzM3ZDBiM2Q3OWU2Mjk5Y2I3OWI2ZGUyYTMxZGI3ZDU4MWZlNTllNzc1YTUzNTE3ODQwMzRl Y2FlCi1TSVpFIChvcGVuc3NoLTUuMnAxLnRhci5neikgPSAxMDE2NjEyCitNRDUgKG9wZW5z c2gtNS4zcDEudGFyLmd6KSA9IDEzNTYzZGJmNjFmMzZjYTlhMWU0MjU0MjYwMTMxMDQxCitT SEEyNTYgKG9wZW5zc2gtNS4zcDEudGFyLmd6KSA9IGQwYzkxNzQ2Mjg5Njk3NDQ4MGIxNDQ1 NGE4ZTFjYjhiODA5MjkxZjY3ZTViOTc3OWM5YjRkYzQxNTZjNWVmMTIKK1NJWkUgKG9wZW5z c2gtNS4zcDEudGFyLmd6KSA9IDEwMjcxMzAKIE1ENSAob3BlbnNzaC01LjJwMSt4NTA5LTYu Mi5kaWZmLmd6KSA9IDhkYmJmYjc0MzIyNjg2NGY2YmI0OWI1NmU3Nzc3NmQ5CiBTSEEyNTYg KG9wZW5zc2gtNS4ycDEreDUwOS02LjIuZGlmZi5neikgPSA3MmNmYjFlMjMyYjZhZTBhOWRm NmU4NTM5YTlmNmI1M2RiN2MwYTIxNDFjZjJlNGRkNjViNDA3NzQ4ZmE5ZjM0CiBTSVpFIChv cGVuc3NoLTUuMnAxK3g1MDktNi4yLmRpZmYuZ3opID0gMTUzMDEwCmRpZmYgLU5ydSAvaG9t ZS9nYXdyaWxvZmYvbHBrL29wZW5zc2gtcG9ydGFibGUvZmlsZXMvY29udHJpYi1vcGVuc3No LTUuMV9wMS1scGstNjRiaXQucGF0Y2ggL2hvbWUvZ2F3cmlsb2ZmL29wZW5zc2gtcG9ydGFi bGUvZmlsZXMvY29udHJpYi1vcGVuc3NoLTUuMV9wMS1scGstNjRiaXQucGF0Y2gKLS0tIC9o b21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9wZW5z c2gtNS4xX3AxLWxway02NGJpdC5wYXRjaAkyMDA5LTA2LTIxIDIzOjM2OjE1LjAwMDAwMDAw MCArMDMwMAorKysgL2hvbWUvZ2F3cmlsb2ZmL29wZW5zc2gtcG9ydGFibGUvZmlsZXMvY29u dHJpYi1vcGVuc3NoLTUuMV9wMS1scGstNjRiaXQucGF0Y2gJMTk3MC0wMS0wMSAwMzowMDow MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTEsNDQgKzAsMCBAQAotZGlmZiAtTnVhciAtLWV4Y2x1 ZGUgJyoucmVqJyBzZXJ2Y29uZi5jLm9yaWcgc2VydmNvbmYuYwotLS0tIHNlcnZjb25mLmMu b3JpZwkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMAotKysrIHNlcnZjb25m LmMJMjAwOC0wOC0yMyAxNTowNDoyMS4wMDAwMDAwMDAgLTA3MDAKLUBAIC03MDEsNiArNzAx LDcgQEAKLSAJaW50IGNtZGxpbmUgPSAwLCAqaW50cHRyLCB2YWx1ZSwgbjsKLSAJU3lzbG9n RmFjaWxpdHkgKmxvZ19mYWNpbGl0eV9wdHI7Ci0gCUxvZ0xldmVsICpsb2dfbGV2ZWxfcHRy OwotKyAJdW5zaWduZWQgbG9uZyBsdmFsdWUsICpsb25ncHRyOwotIAlTZXJ2ZXJPcENvZGVz IG9wY29kZTsKLSAJdV9zaG9ydCBwb3J0OwotIAl1X2ludCBpLCBmbGFncyA9IDA7Ci1AQCAt NzE1LDYgKzcxNiw3IEBACi0gCWlmICghYXJnIHx8ICEqYXJnIHx8ICphcmcgPT0gJyMnKQot IAkJcmV0dXJuIDA7Ci0gCWludHB0ciA9IE5VTEw7Ci0rCWxvbmdwdHIgPSBOVUxMOwotIAlj aGFycHRyID0gTlVMTDsKLSAJb3Bjb2RlID0gcGFyc2VfdG9rZW4oYXJnLCBmaWxlbmFtZSwg bGluZW51bSwgJmZsYWdzKTsKLSAKLUBAIC0xNDQ5LDExICsxNDUxLDIwIEBACi0gCQkJKmlu dHB0ciA9IHZhbHVlOwotIAkJYnJlYWs7Ci0gCWNhc2Ugc0JpbmRUaW1lb3V0OgotLQkJaW50 cHRyID0gKGludCAqKSAmb3B0aW9ucy0+bHBrLmJfdGltZW91dC50dl9zZWM7Ci0tCQlnb3Rv IHBhcnNlX2ludDsKLSsJCWxvbmdwdHIgPSAodW5zaWduZWQgbG9uZyAqKSAmb3B0aW9ucy0+ bHBrLmJfdGltZW91dC50dl9zZWM7Ci0rcGFyc2VfdWxvbmc6Ci0rCQlhcmcgPSBzdHJkZWxp bSgmY3ApOwotKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQotKwkJCWZhdGFsKCIlcyBs aW5lICVkOiBtaXNzaW5nIGludGVnZXIgdmFsdWUuIiwKLSsJCQkgICAgZmlsZW5hbWUsIGxp bmVudW0pOwotKwkJbHZhbHVlID0gYXRvbChhcmcpOwotKwkJaWYgKCphY3RpdmVwICYmICps b25ncHRyID09IC0xKQotKwkJCSpsb25ncHRyID0gbHZhbHVlOwotKwkJYnJlYWs7Ci0rCi0g CWNhc2Ugc1NlYXJjaFRpbWVvdXQ6Ci0tCQlpbnRwdHIgPSAoaW50ICopICZvcHRpb25zLT5s cGsuc190aW1lb3V0LnR2X3NlYzsKLS0JCWdvdG8gcGFyc2VfaW50OwotKwkJbG9uZ3B0ciA9 ICh1bnNpZ25lZCBsb25nICopICZvcHRpb25zLT5scGsuc190aW1lb3V0LnR2X3NlYzsKLSsJ CWdvdG8gcGFyc2VfdWxvbmc7Ci0gCQlicmVhazsKLSAJY2FzZSBzTGRhcENvbmY6Ci0gCQlh cmcgPSBjcDsKZGlmZiAtTnJ1IC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJs ZS9maWxlcy9jb250cmliLW9wZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC1zZXJ2Y29uZi5jLnBh dGNoIC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVzL2NvbnRyaWItb3Bl bnNzaC1scGstNS4xcDEtMC4zLjEwLXNlcnZjb25mLmMucGF0Y2gKLS0tIC9ob21lL2dhd3Jp bG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9wZW5zc2gtbHBrLTUu MXAxLTAuMy4xMC1zZXJ2Y29uZi5jLnBhdGNoCTIwMDktMDYtMjEgMjM6MzY6MTUuMDAwMDAw MDAwICswMzAwCisrKyAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9j b250cmliLW9wZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC1zZXJ2Y29uZi5jLnBhdGNoCTE5NzAt MDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAwCkBAIC0xLDIxMyArMCwwIEBACi0tLS0g c2VydmNvbmYuYy5vcmlnCTIwMDktMDUtMjYgMTU6MTM6MzIuMDAwMDAwMDAwICswNDAwCi0r Kysgc2VydmNvbmYuYwkyMDA5LTA1LTI2IDE1OjI0OjM5LjAwMDAwMDAwMCArMDQwMAotQEAg LTQyLDYgKzQyLDEwIEBACi0gI2luY2x1ZGUgImNoYW5uZWxzLmgiCi0gI2luY2x1ZGUgImdy b3VwYWNjZXNzLmgiCi0gCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkKLSsjaW5jbHVkZSAi bGRhcGF1dGguaCIKLSsjZW5kaWYKLSsKLSBzdGF0aWMgdm9pZCBhZGRfbGlzdGVuX2FkZHIo U2VydmVyT3B0aW9ucyAqLCBjaGFyICosIGludCk7Ci0gc3RhdGljIHZvaWQgYWRkX29uZV9s aXN0ZW5fYWRkcihTZXJ2ZXJPcHRpb25zICosIGNoYXIgKiwgaW50KTsKLSAKLUBAIC0xMjgs NiArMTMyLDI0IEBACi0gCW9wdGlvbnMtPmFkbV9mb3JjZWRfY29tbWFuZCA9IE5VTEw7Ci0g CW9wdGlvbnMtPmNocm9vdF9kaXJlY3RvcnkgPSBOVUxMOwotIAlvcHRpb25zLT56ZXJvX2tu b3dsZWRnZV9wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9IC0xOwotKyNpZmRlZiBXSVRIX0xE QVBfUFVCS0VZCi0rIAkvKiBYWFggZGlydHkgKi8KLSsgCW9wdGlvbnMtPmxway5sZCA9IE5V TEw7Ci0rIAlvcHRpb25zLT5scGsub24gPSAtMTsKLSsgCW9wdGlvbnMtPmxway5zZXJ2ZXJz ID0gTlVMTDsKLSsgCW9wdGlvbnMtPmxway51X2Jhc2VkbiA9IE5VTEw7Ci0rIAlvcHRpb25z LT5scGsuZ19iYXNlZG4gPSBOVUxMOwotKyAJb3B0aW9ucy0+bHBrLmJpbmRkbiA9IE5VTEw7 Ci0rIAlvcHRpb25zLT5scGsuYmluZHB3ID0gTlVMTDsKLSsgCW9wdGlvbnMtPmxway5zZ3Jv dXAgPSBOVUxMOwotKyAJb3B0aW9ucy0+bHBrLmZpbHRlciA9IE5VTEw7Ci0rIAlvcHRpb25z LT5scGsuZmdyb3VwID0gTlVMTDsKLSsgCW9wdGlvbnMtPmxway5sX2NvbmYgPSBOVUxMOwot KyAJb3B0aW9ucy0+bHBrLnRscyA9IC0xOwotKyAJb3B0aW9ucy0+bHBrLmJfdGltZW91dC50 dl9zZWMgPSAtMTsKLSsgCW9wdGlvbnMtPmxway5zX3RpbWVvdXQudHZfc2VjID0gLTE7Ci0r IAlvcHRpb25zLT5scGsuZmxhZ3MgPSBGTEFHX0VNUFRZOwotKyNlbmRpZgotIH0KLSAKLSB2 b2lkCi1AQCAtMjY1LDYgKzI4NywzMiBAQAotIAkJb3B0aW9ucy0+cGVybWl0X3R1biA9IFNT SF9UVU5NT0RFX05POwotIAlpZiAob3B0aW9ucy0+emVyb19rbm93bGVkZ2VfcGFzc3dvcmRf YXV0aGVudGljYXRpb24gPT0gLTEpCi0gCQlvcHRpb25zLT56ZXJvX2tub3dsZWRnZV9wYXNz d29yZF9hdXRoZW50aWNhdGlvbiA9IDA7Ci0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkKLSsJ aWYgKG9wdGlvbnMtPmxway5vbiA9PSAtMSkKLSsJICAgIG9wdGlvbnMtPmxway5vbiA9IF9E RUZBVUxUX0xQS19PTjsKLSsJaWYgKG9wdGlvbnMtPmxway5zZXJ2ZXJzID09IE5VTEwpCi0r CSAgICBvcHRpb25zLT5scGsuc2VydmVycyA9IF9ERUZBVUxUX0xQS19TRVJWRVJTOwotKwlp ZiAob3B0aW9ucy0+bHBrLnVfYmFzZWRuID09IE5VTEwpCi0rCSAgICBvcHRpb25zLT5scGsu dV9iYXNlZG4gPSBfREVGQVVMVF9MUEtfVUROOwotKwlpZiAob3B0aW9ucy0+bHBrLmdfYmFz ZWRuID09IE5VTEwpCi0rCSAgICBvcHRpb25zLT5scGsuZ19iYXNlZG4gPSBfREVGQVVMVF9M UEtfR0ROOwotKwlpZiAob3B0aW9ucy0+bHBrLmJpbmRkbiA9PSBOVUxMKQotKwkgICAgb3B0 aW9ucy0+bHBrLmJpbmRkbiA9IF9ERUZBVUxUX0xQS19CSU5ERE47Ci0rCWlmIChvcHRpb25z LT5scGsuYmluZHB3ID09IE5VTEwpCi0rCSAgICBvcHRpb25zLT5scGsuYmluZHB3ID0gX0RF RkFVTFRfTFBLX0JJTkRQVzsKLSsJaWYgKG9wdGlvbnMtPmxway5zZ3JvdXAgPT0gTlVMTCkK LSsJICAgIG9wdGlvbnMtPmxway5zZ3JvdXAgPSBfREVGQVVMVF9MUEtfU0dST1VQOwotKwlp ZiAob3B0aW9ucy0+bHBrLmZpbHRlciA9PSBOVUxMKQotKwkgICAgb3B0aW9ucy0+bHBrLmZp bHRlciA9IF9ERUZBVUxUX0xQS19GSUxURVI7Ci0rCWlmIChvcHRpb25zLT5scGsudGxzID09 IC0xKQotKwkgICAgb3B0aW9ucy0+bHBrLnRscyA9IF9ERUZBVUxUX0xQS19UTFM7Ci0rCWlm IChvcHRpb25zLT5scGsuYl90aW1lb3V0LnR2X3NlYyA9PSAtMSkKLSsJICAgIG9wdGlvbnMt Pmxway5iX3RpbWVvdXQudHZfc2VjID0gX0RFRkFVTFRfTFBLX0JUSU1FT1VUOwotKwlpZiAo b3B0aW9ucy0+bHBrLnNfdGltZW91dC50dl9zZWMgPT0gLTEpCi0rCSAgICBvcHRpb25zLT5s cGsuc190aW1lb3V0LnR2X3NlYyA9IF9ERUZBVUxUX0xQS19TVElNRU9VVDsKLSsJaWYgKG9w dGlvbnMtPmxway5sX2NvbmYgPT0gTlVMTCkKLSsJICAgIG9wdGlvbnMtPmxway5sX2NvbmYg PSBfREVGQVVMVF9MUEtfTERQOwotKyNlbmRpZgotIAotIAkvKiBUdXJuIHByaXZpbGVnZSBz ZXBhcmF0aW9uIG9uIGJ5IGRlZmF1bHQgKi8KLSAJaWYgKHVzZV9wcml2c2VwID09IC0xKQot QEAgLTMxMSw2ICszNTksMTIgQEAKLSAJc1VzZVByaXZpbGVnZVNlcGFyYXRpb24sIHNBbGxv d0FnZW50Rm9yd2FyZGluZywKLSAJc1plcm9Lbm93bGVkZ2VQYXNzd29yZEF1dGhlbnRpY2F0 aW9uLAotIAlzRGVwcmVjYXRlZCwgc1Vuc3VwcG9ydGVkCi0rI2lmZGVmIFdJVEhfTERBUF9Q VUJLRVkKLSsJLHNMZGFwUHVibGlja2V5LCBzTGRhcFNlcnZlcnMsIHNMZGFwVXNlckROCi0r CSxzTGRhcEdyb3VwRE4sIHNCaW5kRE4sIHNCaW5kUHcsIHNNeUdyb3VwCi0rCSxzTGRhcEZp bHRlciwgc0ZvcmNlVExTLCBzQmluZFRpbWVvdXQKLSsJLHNTZWFyY2hUaW1lb3V0LCBzTGRh cENvbmYKLSsjZW5kaWYKLSB9IFNlcnZlck9wQ29kZXM7Ci0gCi0gI2RlZmluZSBTU0hDRkdf R0xPQkFMCTB4MDEJLyogYWxsb3dlZCBpbiBtYWluIHNlY3Rpb24gb2Ygc3NoZF9jb25maWcg Ki8KLUBAIC00MjEsNiArNDc1LDIwIEBACi0gCXsgImNsaWVudGFsaXZlY291bnRtYXgiLCBz Q2xpZW50QWxpdmVDb3VudE1heCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJhdXRob3JpemVk a2V5c2ZpbGUiLCBzQXV0aG9yaXplZEtleXNGaWxlLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsg ImF1dGhvcml6ZWRrZXlzZmlsZTIiLCBzQXV0aG9yaXplZEtleXNGaWxlMiwgU1NIQ0ZHX0dM T0JBTCB9LAotKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZCi0rCXsgX0RFRkFVTFRfTFBLX1RP S0VOLCBzTGRhcFB1YmxpY2tleSwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7IF9ERUZBVUxUX1NS Vl9UT0tFTiwgc0xkYXBTZXJ2ZXJzLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgX0RFRkFVTFRf VVNSX1RPS0VOLCBzTGRhcFVzZXJETiwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7IF9ERUZBVUxU X0dSUF9UT0tFTiwgc0xkYXBHcm91cEROLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgX0RFRkFV TFRfQkROX1RPS0VOLCBzQmluZEROLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgX0RFRkFVTFRf QlBXX1RPS0VOLCBzQmluZFB3LCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgX0RFRkFVTFRfTVlH X1RPS0VOLCBzTXlHcm91cCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7IF9ERUZBVUxUX0ZJTF9U T0tFTiwgc0xkYXBGaWx0ZXIsIFNTSENGR19HTE9CQUwgfSwKLSsJeyBfREVGQVVMVF9UTFNf VE9LRU4sIHNGb3JjZVRMUywgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7IF9ERUZBVUxUX0JUSV9U T0tFTiwgc0JpbmRUaW1lb3V0LCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgX0RFRkFVTFRfU1RJ X1RPS0VOLCBzU2VhcmNoVGltZW91dCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7IF9ERUZBVUxU X0xEUF9UT0tFTiwgc0xkYXBDb25mLCBTU0hDRkdfR0xPQkFMIH0sCi0rI2VuZGlmCi0gCXsg InVzZXByaXZpbGVnZXNlcGFyYXRpb24iLCBzVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiwgU1NI Q0ZHX0dMT0JBTCB9LAotIAl7ICJhY2NlcHRlbnYiLCBzQWNjZXB0RW52LCBTU0hDRkdfR0xP QkFMIH0sCi0gCXsgInBlcm1pdHR1bm5lbCIsIHNQZXJtaXRUdW5uZWwsIFNTSENGR19HTE9C QUwgfSwKLUBAIC0xMzExLDYgKzEzNzksMTA3IEBACi0gCQl3aGlsZSAoYXJnKQotIAkJICAg IGFyZyA9IHN0cmRlbGltKCZjcCk7Ci0gCQlicmVhazsKLSsjaWZkZWYgV0lUSF9MREFQX1BV QktFWQotKwljYXNlIHNMZGFwUHVibGlja2V5OgotKwkJaW50cHRyID0gJm9wdGlvbnMtPmxw ay5vbjsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsJY2FzZSBzTGRhcFNlcnZlcnM6Ci0rCQkv KiBhcmcgPSBzdHJkZWxpbSgmY3ApOyAqLwotKwkJcCA9IGxpbmU7Ci0rCQl3aGlsZSgqcCsr KTsKLSsJCWFyZyA9IHA7Ci0rCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCi0rCQkgICAg ZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgbGRhcCBzZXJ2ZXIiLGZpbGVuYW1lLGxpbmVu dW0pOwotKwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7Ci0rCQlpZiAoKG9wdGlvbnMtPmxw ay5zZXJ2ZXJzID0gbGRhcF9wYXJzZV9zZXJ2ZXJzKGFyZykpID09IE5VTEwpCi0rCQkgICAg ZmF0YWwoIiVzIGxpbmUgJWQ6IGVycm9yIGluIGxkYXAgc2VydmVycyIsIGZpbGVuYW1lLCBs aW5lbnVtKTsKLSsJCW1lbXNldChhcmcsMCxzdHJsZW4oYXJnKSk7Ci0rCQlicmVhazsKLSsJ Y2FzZSBzTGRhcFVzZXJETjoKLSsJCWFyZyA9IGNwOwotKwkJaWYgKCFhcmcgfHwgKmFyZyA9 PSAnXDAnKQotKwkJICAgIGZhdGFsKCIlcyBsaW5lICVkOiBtaXNzaW5nIGxkYXAgc2VydmVy IixmaWxlbmFtZSxsaW5lbnVtKTsKLSsJCWFyZ1tzdHJsZW4oYXJnKV0gPSAnXDAnOwotKwkJ b3B0aW9ucy0+bHBrLnVfYmFzZWRuID0geHN0cmR1cChhcmcpOwotKwkJbWVtc2V0KGFyZyww LHN0cmxlbihhcmcpKTsKLSsJCWJyZWFrOwotKwljYXNlIHNMZGFwR3JvdXBETjoKLSsJCWFy ZyA9IGNwOwotKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQotKwkJICAgIGZhdGFsKCIl cyBsaW5lICVkOiBtaXNzaW5nIGxkYXAgc2VydmVyIixmaWxlbmFtZSxsaW5lbnVtKTsKLSsJ CWFyZ1tzdHJsZW4oYXJnKV0gPSAnXDAnOwotKwkJb3B0aW9ucy0+bHBrLmdfYmFzZWRuID0g eHN0cmR1cChhcmcpOwotKwkJbWVtc2V0KGFyZywwLHN0cmxlbihhcmcpKTsKLSsJCWJyZWFr OwotKwljYXNlIHNCaW5kRE46Ci0rCQlhcmcgPSBjcDsKLSsJCWlmICghYXJnIHx8ICphcmcg PT0gJ1wwJykKLSsJCSAgICBmYXRhbCgiJXMgbGluZSAlZDogbWlzc2luZyBiaW5kZG4iLGZp bGVuYW1lLGxpbmVudW0pOwotKwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7Ci0rCQlvcHRp b25zLT5scGsuYmluZGRuID0geHN0cmR1cChhcmcpOwotKwkJbWVtc2V0KGFyZywwLHN0cmxl bihhcmcpKTsKLSsJCWJyZWFrOwotKwljYXNlIHNCaW5kUHc6Ci0rCQlhcmcgPSBjcDsKLSsJ CWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykKLSsJCSAgICBmYXRhbCgiJXMgbGluZSAlZDog bWlzc2luZyBiaW5kcHciLGZpbGVuYW1lLGxpbmVudW0pOwotKwkJYXJnW3N0cmxlbihhcmcp XSA9ICdcMCc7Ci0rCQlvcHRpb25zLT5scGsuYmluZHB3ID0geHN0cmR1cChhcmcpOwotKwkJ bWVtc2V0KGFyZywwLHN0cmxlbihhcmcpKTsKLSsJCWJyZWFrOwotKwljYXNlIHNNeUdyb3Vw OgotKwkJYXJnID0gY3A7Ci0rCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCi0rCQkgICAg ZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgZ3JvdXBuYW1lIixmaWxlbmFtZSwgbGluZW51 bSk7Ci0rCQlhcmdbc3RybGVuKGFyZyldID0gJ1wwJzsKLSsJCW9wdGlvbnMtPmxway5zZ3Jv dXAgPSB4c3RyZHVwKGFyZyk7Ci0rCQlpZiAob3B0aW9ucy0+bHBrLnNncm91cCkKLSsJCSAg ICBvcHRpb25zLT5scGsuZmdyb3VwID0gbGRhcF9wYXJzZV9ncm91cHMob3B0aW9ucy0+bHBr LnNncm91cCk7Ci0rCQltZW1zZXQoYXJnLDAsc3RybGVuKGFyZykpOwotKwkJYnJlYWs7Ci0r CWNhc2Ugc0xkYXBGaWx0ZXI6Ci0rCQlhcmcgPSBjcDsKLSsJCWlmICghYXJnIHx8ICphcmcg PT0gJ1wwJykKLSsJCSAgICBmYXRhbCgiJXMgbGluZSAlZDogbWlzc2luZyBmaWx0ZXIiLGZp bGVuYW1lLCBsaW5lbnVtKTsKLSsJCWFyZ1tzdHJsZW4oYXJnKV0gPSAnXDAnOwotKwkJb3B0 aW9ucy0+bHBrLmZpbHRlciA9IHhzdHJkdXAoYXJnKTsKLSsJCW1lbXNldChhcmcsMCxzdHJs ZW4oYXJnKSk7Ci0rCQlicmVhazsKLSsJY2FzZSBzRm9yY2VUTFM6Ci0rCQlpbnRwdHIgPSAm b3B0aW9ucy0+bHBrLnRsczsKLSsJCWFyZyA9IHN0cmRlbGltKCZjcCk7Ci0rCQlpZiAoIWFy ZyB8fCAqYXJnID09ICdcMCcpCi0rCQkJZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgeWVz L25vIGFyZ3VtZW50LiIsCi0rCQkJICAgIGZpbGVuYW1lLCBsaW5lbnVtKTsKLSsJCXZhbHVl ID0gMDsJLyogc2lsZW5jZSBjb21waWxlciAqLwotKwkJaWYgKHN0cmNtcChhcmcsICJ5ZXMi KSA9PSAwKQotKwkJCXZhbHVlID0gMTsKLSsJCWVsc2UgaWYgKHN0cmNtcChhcmcsICJubyIp ID09IDApCi0rCQkJdmFsdWUgPSAwOwotKwkJZWxzZSBpZiAoc3RyY21wKGFyZywgInRyeSIp ID09IDApCi0rCQkJdmFsdWUgPSAtMTsKLSsJCWVsc2UKLSsJCQlmYXRhbCgiJXMgbGluZSAl ZDogQmFkIHllcy9ubyBhcmd1bWVudDogJXMiLAotKwkJCQlmaWxlbmFtZSwgbGluZW51bSwg YXJnKTsKLSsJCWlmICgqaW50cHRyID09IC0xKQotKwkJCSppbnRwdHIgPSB2YWx1ZTsKLSsJ CWJyZWFrOwotKwljYXNlIHNCaW5kVGltZW91dDoKLSsJCWludHB0ciA9IChpbnQgKikgJm9w dGlvbnMtPmxway5iX3RpbWVvdXQudHZfc2VjOwotKwkJZ290byBwYXJzZV9pbnQ7Ci0rCWNh c2Ugc1NlYXJjaFRpbWVvdXQ6Ci0rCQlpbnRwdHIgPSAoaW50ICopICZvcHRpb25zLT5scGsu c190aW1lb3V0LnR2X3NlYzsKLSsJCWdvdG8gcGFyc2VfaW50OwotKwkJYnJlYWs7Ci0rCWNh c2Ugc0xkYXBDb25mOgotKwkJYXJnID0gY3A7Ci0rCQlpZiAoIWFyZyB8fCAqYXJnID09ICdc MCcpCi0rCQkgICAgZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgTHBrTGRhcENvbmYiLCBm aWxlbmFtZSwgbGluZW51bSk7Ci0rCQlhcmdbc3RybGVuKGFyZyldID0gJ1wwJzsKLSsJCW9w dGlvbnMtPmxway5sX2NvbmYgPSB4c3RyZHVwKGFyZyk7Ci0rCQltZW1zZXQoYXJnLCAwLCBz dHJsZW4oYXJnKSk7Ci0rCQlicmVhazsKLSsjZW5kaWYKLSAKLSAJZGVmYXVsdDoKLSAJCWZh dGFsKCIlcyBsaW5lICVkOiBNaXNzaW5nIGhhbmRsZXIgZm9yIG9wY29kZSAlcyAoJWQpIiwK ZGlmZiAtTnJ1IC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9j b250cmliLW9wZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC5wYXRjaCAvaG9tZS9nYXdyaWxvZmYv b3BlbnNzaC1wb3J0YWJsZS9maWxlcy9jb250cmliLW9wZW5zc2gtbHBrLTUuMXAxLTAuMy4x MC5wYXRjaAotLS0gL2hvbWUvZ2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVz L2NvbnRyaWItb3BlbnNzaC1scGstNS4xcDEtMC4zLjEwLnBhdGNoCTIwMDktMDYtMjEgMjM6 MzY6MTUuMDAwMDAwMDAwICswMzAwCisrKyAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0 YWJsZS9maWxlcy9jb250cmliLW9wZW5zc2gtbHBrLTUuMXAxLTAuMy4xMC5wYXRjaAkxOTcw LTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMApAQCAtMSwxNjgyICswLDAgQEAKLVRo aXMgaXMgYSBmb3J3YXJkLXBvcnQgb2YgdGhlIE9wZW5TU0ggTFBLIHN1cHBvcnQgcGF0Y2gu Ci0KLUl0IGFkZHMgc3VwcG9ydCBmb3Igc3RvcmluZyBPcGVuU1NIIHB1YmxpYyBrZXlzIGlu IExEQVAuIEl0IGFsc28gc3VwcG9ydHMKLWdyb3VwaW5nIG9mIG1hY2hpbmVzIGluIHRoZSBM REFQIGRhdGEgdG8gbGltaXQgdXNlcnMgdG8gc3BlY2lmaWMgbWFjaGluZXMuCi0KLVRoZSBs YXRlc3QgaG9tZXBhZ2UgZm9yIHRoZSBMUEsgcHJvamVjdCBpczoKLWh0dHA6Ly9jb2RlLmdv b2dsZS5jb20vcC9vcGVuc3NoLWxway8KLQotVGhlIDAuMy4xMCB2ZXJzaW9uIG9mIHRoZSBw YXRjaCBpbmNsdWRlcyBhIGZpeCBmb3IgNjQtYml0IHBsYXRmb3JtcywgYXMKLWRpc2NvdmVy ZWQgYnkgR2VudG9vLCB3aGVyZSB0aGUgYmluZCB0aW1lb3V0IGFuZCBzZWFyY2ggdGltZW91 dCB2YWx1ZXMgd2VyZSBub3QKLWJlaW5nIHBhcnNlZCBjb3JyZWN0bHk6IGh0dHA6Ly9idWdz LmdlbnRvby5vcmcvMjEwMTEwCi0KLUZvcndhcmQtcG9ydGVkLWZyb206IG9wZW5zc2gtbHBr LTUuMXAxLTAuMy45LnBhdGNoCi1TaWduZWQtb2ZmLWJ5OiBSb2JpbiBILiBKb2huc29uIDxy b2JiYXQyQGdlbnRvby5vcmc+Ci0KLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0t ZXhjbHVkZSAnKi5yZWonIGF1dGgyLXB1YmtleS5jIGF1dGgyLXB1YmtleS5jCi0tLS0gYXV0 aDItcHVia2V5LmMJMjAwOC0wNy0wMyAxOTo1NDoyNS4wMDAwMDAwMDAgLTA3MDAKLSsrKyBh dXRoMi1wdWJrZXkuYwkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMAotQEAg LTU1LDYgKzU1LDEwIEBACi0gI2luY2x1ZGUgIm1vbml0b3Jfd3JhcC5oIgotICNpbmNsdWRl ICJtaXNjLmgiCi0gCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkKLSsjaW5jbHVkZSAibGRh cGF1dGguaCIKLSsjZW5kaWYKLSsKLSAvKiBpbXBvcnQgKi8KLSBleHRlcm4gU2VydmVyT3B0 aW9ucyBvcHRpb25zOwotIGV4dGVybiB1X2NoYXIgKnNlc3Npb25faWQyOwotQEAgLTE4Nywx MCArMTkxLDc5IEBACi0gCXVfbG9uZyBsaW5lbnVtID0gMDsKLSAJS2V5ICpmb3VuZDsKLSAJ Y2hhciAqZnA7Ci0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkKLSsJbGRhcF9rZXlfdCAqIGs7 Ci0rCXVuc2lnbmVkIGludCBpID0gMDsKLSsjZW5kaWYKLSAKLSAJLyogVGVtcG9yYXJpbHkg dXNlIHRoZSB1c2VyJ3MgdWlkLiAqLwotIAl0ZW1wb3JhcmlseV91c2VfdWlkKHB3KTsKLSAK LSsjaWZkZWYgV0lUSF9MREFQX1BVQktFWQotKyAJZm91bmRfa2V5ID0gMDsKLSsgCS8qIGFs bG9jYXRlIGEgbmV3IGtleSB0eXBlICovCi0rIAlmb3VuZCA9IGtleV9uZXcoa2V5LT50eXBl KTsKLSsgCi0rIAkvKiBmaXJzdCBjaGVjayBpZiB0aGUgb3B0aW9ucyBpcyBlbmFibGVkLCB0 aGVuIHRyeS4uICovCi0rCWlmIChvcHRpb25zLmxway5vbikgewotKwkgICAgZGVidWcoIltM REFQXSB0cnlpbmcgTERBUCBmaXJzdCB1aWQ9JXMiLHB3LT5wd19uYW1lKTsKLSsJICAgIGlm IChsZGFwX2lzbWVtYmVyKCZvcHRpb25zLmxwaywgcHctPnB3X25hbWUpID4gMCkgewotKwkJ aWYgKChrID0gbGRhcF9nZXR1c2Vya2V5KCZvcHRpb25zLmxwaywgcHctPnB3X25hbWUpKSAh PSBOVUxMKSB7Ci0rCQkgICAgLyogU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UsIGVtcHR5IGFu ZCBjb21tZW50IGxpbmVzLiAqLwotKwkJICAgIGZvciAoaSA9IDAgOyBpIDwgay0+bnVtIDsg aSsrKSB7Ci0rCQkJLyogZG9udCBmb3JnZXQgaWYgbXVsdGlwbGUga2V5cyB0byByZXNldCBv cHRpb25zICovCi0rCQkJY2hhciAqY3AsICpvcHRpb25zID0gTlVMTDsKLSsKLSsJCQlmb3Ig KGNwID0gKGNoYXIgKilrLT5rZXlzW2ldLT5idl92YWw7ICpjcCA9PSAnICcgfHwgKmNwID09 ICdcdCc7IGNwKyspCi0rCQkJICAgIDsKLSsJCQlpZiAoISpjcCB8fCAqY3AgPT0gJ1xuJyB8 fCAqY3AgPT0gJyMnKQotKwkJCSAgICBjb250aW51ZTsKLSsKLSsJCQlpZiAoa2V5X3JlYWQo Zm91bmQsICZjcCkgIT0gMSkgewotKwkJCSAgICAvKiBubyBrZXk/ICBjaGVjayBpZiB0aGVy ZSBhcmUgb3B0aW9ucyBmb3IgdGhpcyBrZXkgKi8KLSsJCQkgICAgaW50IHF1b3RlZCA9IDA7 Ci0rCQkJICAgIGRlYnVnMigiW0xEQVBdIHVzZXJfa2V5X2FsbG93ZWQ6IGNoZWNrIG9wdGlv bnM6ICclcyciLCBjcCk7Ci0rCQkJICAgIG9wdGlvbnMgPSBjcDsKLSsJCQkgICAgZm9yICg7 ICpjcCAmJiAocXVvdGVkIHx8ICgqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKSk7IGNwKysp IHsKLSsJCQkJaWYgKCpjcCA9PSAnXFwnICYmIGNwWzFdID09ICciJykKLSsJCQkJICAgIGNw Kys7CS8qIFNraXAgYm90aCAqLwotKwkJCQllbHNlIGlmICgqY3AgPT0gJyInKQotKwkJCQkg ICAgcXVvdGVkID0gIXF1b3RlZDsKLSsJCQkgICAgfQotKwkJCSAgICAvKiBTa2lwIHJlbWFp bmluZyB3aGl0ZXNwYWNlLiAqLwotKwkJCSAgICBmb3IgKDsgKmNwID09ICcgJyB8fCAqY3Ag PT0gJ1x0JzsgY3ArKykKLSsJCQkJOwotKwkJCSAgICBpZiAoa2V5X3JlYWQoZm91bmQsICZj cCkgIT0gMSkgewotKwkJCQlkZWJ1ZzIoIltMREFQXSB1c2VyX2tleV9hbGxvd2VkOiBhZHZh bmNlOiAnJXMnIiwgY3ApOwotKwkJCQkvKiBzdGlsbCBubyBrZXk/ICBhZHZhbmNlIHRvIG5l eHQgbGluZSovCi0rCQkJCWNvbnRpbnVlOwotKwkJCSAgICB9Ci0rCQkJfQotKwotKwkJCWlm IChrZXlfZXF1YWwoZm91bmQsIGtleSkgJiYKLSsJCQkJYXV0aF9wYXJzZV9vcHRpb25zKHB3 LCBvcHRpb25zLCBmaWxlLCBsaW5lbnVtKSA9PSAxKSB7Ci0rCQkJICAgIGZvdW5kX2tleSA9 IDE7Ci0rCQkJICAgIGRlYnVnKCJbTERBUF0gbWF0Y2hpbmcga2V5IGZvdW5kIik7Ci0rCQkJ ICAgIGZwID0ga2V5X2ZpbmdlcnByaW50KGZvdW5kLCBTU0hfRlBfTUQ1LCBTU0hfRlBfSEVY KTsKLSsJCQkgICAgdmVyYm9zZSgiW0xEQVBdIEZvdW5kIG1hdGNoaW5nICVzIGtleTogJXMi LCBrZXlfdHlwZShmb3VuZCksIGZwKTsKLSsKLSsJCQkgICAgLyogcmVzdG9yaW5nIG1lbW9y eSAqLwotKwkJCSAgICBsZGFwX2tleXNfZnJlZShrKTsKLSsJCQkgICAgeGZyZWUoZnApOwot KwkJCSAgICByZXN0b3JlX3VpZCgpOwotKwkJCSAgICBrZXlfZnJlZShmb3VuZCk7Ci0rCQkJ ICAgIHJldHVybiBmb3VuZF9rZXk7Ci0rCQkJICAgIGJyZWFrOwotKwkJCX0KLSsJCSAgICB9 LyogZW5kIG9mIExEQVAgZm9yKCkgKi8KLSsJCX0gZWxzZSB7Ci0rCQkgICAgbG9naXQoIltM REFQXSBubyBrZXlzIGZvdW5kIGZvciAnJXMnISIsIHB3LT5wd19uYW1lKTsKLSsJCX0KLSsJ ICAgIH0gZWxzZSB7Ci0rCQlsb2dpdCgiW0xEQVBdICclcycgaXMgbm90IGluICclcyciLCBw dy0+cHdfbmFtZSwgb3B0aW9ucy5scGsuc2dyb3VwKTsKLSsJICAgIH0KLSsJfQotKyNlbmRp ZgotIAlkZWJ1ZygidHJ5aW5nIHB1YmxpYyBrZXkgZmlsZSAlcyIsIGZpbGUpOwotIAlmID0g YXV0aF9vcGVua2V5ZmlsZShmaWxlLCBwdywgb3B0aW9ucy5zdHJpY3RfbW9kZXMpOwotIAot ZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgYXV0aC1y c2EuYyBhdXRoLXJzYS5jCi0tLS0gYXV0aC1yc2EuYwkyMDA4LTA3LTAyIDA1OjM3OjMwLjAw MDAwMDAwMCAtMDcwMAotKysrIGF1dGgtcnNhLmMJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAw MDAwMDAgLTA3MDAKLUBAIC0xNzQsMTAgKzE3NCw5NiBAQAotIAlGSUxFICpmOwotIAl1X2xv bmcgbGluZW51bSA9IDA7Ci0gCUtleSAqa2V5OwotKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZ Ci0rCWxkYXBfa2V5X3QgKiBrOwotKwl1bnNpZ25lZCBpbnQgaSA9IDA7Ci0rI2VuZGlmCi0g Ci0gCS8qIFRlbXBvcmFyaWx5IHVzZSB0aGUgdXNlcidzIHVpZC4gKi8KLSAJdGVtcG9yYXJp bHlfdXNlX3VpZChwdyk7Ci0gCi0rI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkKLSsJLyogaGVy ZSBpcyB0aGUgam9iICovCi0rCWtleSA9IGtleV9uZXcoS0VZX1JTQTEpOwotKwotKwlpZiAo b3B0aW9ucy5scGsub24pIHsKLSsJICAgIGRlYnVnKCJbTERBUF0gdHJ5aW5nIExEQVAgZmly c3QgdWlkPSVzIiwgcHctPnB3X25hbWUpOwotKwkgICAgaWYgKCBsZGFwX2lzbWVtYmVyKCZv cHRpb25zLmxwaywgcHctPnB3X25hbWUpID4gMCkgewotKwkJaWYgKCAoayA9IGxkYXBfZ2V0 dXNlcmtleSgmb3B0aW9ucy5scGssIHB3LT5wd19uYW1lKSkgIT0gTlVMTCkgewotKwkJICAg IGZvciAoaSA9IDAgOyBpIDwgay0+bnVtIDsgaSsrKSB7Ci0rCQkJY2hhciAqY3AsICpvcHRp b25zID0gTlVMTDsKLSsKLSsJCQlmb3IgKGNwID0gay0+a2V5c1tpXS0+YnZfdmFsOyAqY3Ag PT0gJyAnIHx8ICpjcCA9PSAnXHQnOyBjcCsrKQotKwkJCSAgICA7Ci0rCQkJaWYgKCEqY3Ag fHwgKmNwID09ICdcbicgfHwgKmNwID09ICcjJykKLSsJCQkgICAgY29udGludWU7Ci0rCi0r CQkJLyoKLSsJCQkqIENoZWNrIGlmIHRoZXJlIGFyZSBvcHRpb25zIGZvciB0aGlzIGtleSwg YW5kIGlmIHNvLAotKwkJCSogc2F2ZSB0aGVpciBzdGFydGluZyBhZGRyZXNzIGFuZCBza2lw IHRoZSBvcHRpb24gcGFydAotKwkJCSogZm9yIG5vdy4gIElmIHRoZXJlIGFyZSBubyBvcHRp b25zLCBzZXQgdGhlIHN0YXJ0aW5nCi0rCQkJKiBhZGRyZXNzIHRvIE5VTEwuCi0rCQkJICov Ci0rCQkJaWYgKCpjcCA8ICcwJyB8fCAqY3AgPiAnOScpIHsKLSsJCQkgICAgaW50IHF1b3Rl ZCA9IDA7Ci0rCQkJICAgIG9wdGlvbnMgPSBjcDsKLSsJCQkgICAgZm9yICg7ICpjcCAmJiAo cXVvdGVkIHx8ICgqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKSk7IGNwKyspIHsKLSsJCQkJ aWYgKCpjcCA9PSAnXFwnICYmIGNwWzFdID09ICciJykKLSsJCQkJICAgIGNwKys7CS8qIFNr aXAgYm90aCAqLwotKwkJCQllbHNlIGlmICgqY3AgPT0gJyInKQotKwkJCQkgICAgcXVvdGVk ID0gIXF1b3RlZDsKLSsJCQkgICAgfQotKwkJCX0gZWxzZQotKwkJCSAgICBvcHRpb25zID0g TlVMTDsKLSsKLSsJCQkvKiBQYXJzZSB0aGUga2V5IGZyb20gdGhlIGxpbmUuICovCi0rCQkJ aWYgKGhvc3RmaWxlX3JlYWRfa2V5KCZjcCwgJmJpdHMsIGtleSkgPT0gMCkgewotKwkJCSAg ICBkZWJ1ZygiW0xEQVBdIGxpbmUgJWQ6IG5vbiBzc2gxIGtleSBzeW50YXgiLCBpKTsKLSsJ CQkgICAgY29udGludWU7Ci0rCQkJfQotKwkJCS8qIGNwIG5vdyBwb2ludHMgdG8gdGhlIGNv bW1lbnQgcGFydC4gKi8KLSsKLSsJCQkvKiBDaGVjayBpZiB0aGUgd2UgaGF2ZSBmb3VuZCB0 aGUgZGVzaXJlZCBrZXkgKGlkZW50aWZpZWQgYnkgaXRzIG1vZHVsdXMpLiAqLwotKwkJCWlm IChCTl9jbXAoa2V5LT5yc2EtPm4sIGNsaWVudF9uKSAhPSAwKQotKwkJCSAgICBjb250aW51 ZTsKLSsKLSsJCQkvKiBjaGVjayB0aGUgcmVhbCBiaXRzICAqLwotKwkJCWlmIChiaXRzICE9 ICh1bnNpZ25lZCBpbnQpQk5fbnVtX2JpdHMoa2V5LT5yc2EtPm4pKQotKwkJCSAgICBsb2dp dCgiW0xEQVBdIFdhcm5pbmc6IGxkYXAsIGxpbmUgJWx1OiBrZXlzaXplIG1pc21hdGNoOiAi Ci0rCQkJCSAgICAiYWN0dWFsICVkIHZzLiBhbm5vdW5jZWQgJWQuIiwgKHVuc2lnbmVkIGxv bmcpaSwgQk5fbnVtX2JpdHMoa2V5LT5yc2EtPm4pLCBiaXRzKTsKLSsKLSsJCQkvKiBXZSBo YXZlIGZvdW5kIHRoZSBkZXNpcmVkIGtleS4gKi8KLSsJCQkvKgotKwkJCSogSWYgb3VyIG9w dGlvbnMgZG8gbm90IGFsbG93IHRoaXMga2V5IHRvIGJlIHVzZWQsCi0rCQkJKiBkbyBub3Qg c2VuZCBjaGFsbGVuZ2UuCi0rCQkJICovCi0rCQkJaWYgKCFhdXRoX3BhcnNlX29wdGlvbnMo cHcsIG9wdGlvbnMsICJbTERBUF0iLCAodW5zaWduZWQgbG9uZykgaSkpCi0rCQkJICAgIGNv bnRpbnVlOwotKwotKwkJCS8qIGJyZWFrIG91dCwgdGhpcyBrZXkgaXMgYWxsb3dlZCAqLwot KwkJCWFsbG93ZWQgPSAxOwotKwotKwkJCS8qIGFkZCB0aGUgcmV0dXJuIHN0dWZmIGV0Yy4u LiAqLwotKwkJCS8qIFJlc3RvcmUgdGhlIHByaXZpbGVnZWQgdWlkLiAqLwotKwkJCXJlc3Rv cmVfdWlkKCk7Ci0rCi0rCQkJLyogcmV0dXJuIGtleSBpZiBhbGxvd2VkICovCi0rCQkJaWYg KGFsbG93ZWQgJiYgcmtleSAhPSBOVUxMKQotKwkJCSAgICAqcmtleSA9IGtleTsKLSsJCQll bHNlCi0rCQkJICAgIGtleV9mcmVlKGtleSk7Ci0rCi0rCQkJbGRhcF9rZXlzX2ZyZWUoayk7 Ci0rCQkJcmV0dXJuIChhbGxvd2VkKTsKLSsJCSAgICB9Ci0rCQl9IGVsc2UgewotKwkJICAg IGxvZ2l0KCJbTERBUF0gbm8ga2V5cyBmb3VuZCBmb3IgJyVzJyEiLCBwdy0+cHdfbmFtZSk7 Ci0rCQl9Ci0rCSAgICB9IGVsc2UgewotKwkJbG9naXQoIltMREFQXSAnJXMnIGlzIG5vdCBp biAnJXMnIiwgcHctPnB3X25hbWUsIG9wdGlvbnMubHBrLnNncm91cCk7Ci0rCSAgICB9Ci0r CX0KLSsjZW5kaWYKLSAJLyogVGhlIGF1dGhvcml6ZWQga2V5cy4gKi8KLSAJZmlsZSA9IGF1 dGhvcml6ZWRfa2V5c19maWxlKHB3KTsKLSAJZGVidWcoInRyeWluZyBwdWJsaWMgUlNBIGtl eSBmaWxlICVzIiwgZmlsZSk7Ci1kaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4 Y2x1ZGUgJyoucmVqJyBjb25maWcuaC5pbiBjb25maWcuaC5pbgotLS0tIGNvbmZpZy5oLmlu CTIwMDgtMDctMjEgMDE6MzA6NDkuMDAwMDAwMDAwIC0wNzAwCi0rKysgY29uZmlnLmguaW4J MjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKLUBAIC01NjAsNiArNTYwLDkg QEAKLSAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2lmX3R1bi5oPiBo ZWFkZXIgZmlsZS4gKi8KLSAjdW5kZWYgSEFWRV9MSU5VWF9JRl9UVU5fSAotIAotKy8qIERl ZmluZSBpZiB5b3Ugd2FudCBMREFQIHN1cHBvcnQgKi8KLSsjdW5kZWYgV0lUSF9MREFQX1BV QktFWQotKwotIC8qIERlZmluZSBpZiB5b3VyIGxpYnJhcmllcyBkZWZpbmUgbG9naW4oKSAq LwotICN1bmRlZiBIQVZFX0xPR0lOCi0gCi1kaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5vcmln JyAtLWV4Y2x1ZGUgJyoucmVqJyBjb25maWd1cmUgY29uZmlndXJlCi0tLS0gY29uZmlndXJl CTIwMDgtMDctMjEgMDE6MzA6NTAuMDAwMDAwMDAwIC0wNzAwCi0rKysgY29uZmlndXJlCTIw MDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMTM0MCw2ICsxMzQwLDcg QEAKLSAgIC0td2l0aC10Y3Atd3JhcHBlcnNbPVBBVEhdIEVuYWJsZSB0Y3B3cmFwcGVycyBz dXBwb3J0IChvcHRpb25hbGx5IGluIFBBVEgpCi0gICAtLXdpdGgtbGliZWRpdFs9UEFUSF0g ICBFbmFibGUgbGliZWRpdCBzdXBwb3J0IGZvciBzZnRwCi0gICAtLXdpdGgtYXVkaXQ9bW9k dWxlICAgICBFbmFibGUgRVhQRVJJTUVOVEFMIGF1ZGl0IHN1cHBvcnQgKG1vZHVsZXM9ZGVi dWcsYnNtKQotKyAgLS13aXRoLWxkYXBbPVBBVEhdICAgICAgRW5hYmxlIExEQVAgcHVia2V5 IHN1cHBvcnQgKG9wdGlvbmFsbHkgaW4gUEFUSCkKLSAgIC0td2l0aC1zc2wtZGlyPVBBVEgg ICAgIFNwZWNpZnkgcGF0aCB0byBPcGVuU1NMIGluc3RhbGxhdGlvbgotICAgLS13aXRob3V0 LW9wZW5zc2wtaGVhZGVyLWNoZWNrIERpc2FibGUgT3BlblNTTCB2ZXJzaW9uIGNvbnNpc3Rl bmN5IGNoZWNrCi0gICAtLXdpdGgtc3NsLWVuZ2luZSAgICAgICBFbmFibGUgT3BlblNTTCAo aGFyZHdhcmUpIEVOR0lORSBzdXBwb3J0Ci1AQCAtMTI1NjgsNiArMTI1NjksODUgQEAKLSBm aQotIAotIAotKyMgQ2hlY2sgd2hldGhlciB1c2VyIHdhbnRzIExEQVAgc3VwcG9ydAotK0xE QVBfTVNHPSJubyIKLSsKLSsjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxkYXAgd2FzIGdpdmVu LgotK2lmIHRlc3QgIiR7d2l0aF9sZGFwK3NldH0iID0gc2V0OyB0aGVuCi0rICB3aXRodmFs PSR3aXRoX2xkYXA7Ci0rCQlpZiB0ZXN0ICJ4JHdpdGh2YWwiICE9ICJ4bm8iIDsgdGhlbgot KwotKwkJCWlmIHRlc3QgIngkd2l0aHZhbCIgIT0gInh5ZXMiIDsgdGhlbgotKwkJCQlDUFBG TEFHUz0iJENQUEZMQUdTIC1JJHt3aXRodmFsfS9pbmNsdWRlIgotKwkJCQlMREZMQUdTPSIk TERGTEFHUyAtTCR7d2l0aHZhbH0vbGliIgotKwkJCWZpCi0rCi0rCi0rY2F0ID4+Y29uZmRl ZnMuaCA8PFxfQUNFT0YKLSsjZGVmaW5lIFdJVEhfTERBUF9QVUJLRVkgMQotK19BQ0VPRgot KwotKwkJCUxJQlM9Ii1sbGRhcCAkTElCUyIKLSsJCQlMREFQX01TRz0ieWVzIgotKwotKwkJ CXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBMREFQIHN1cHBvcnQiID4m NQotK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIExEQVAgc3VwcG9ydC4uLiAkRUNIT19D IiA+JjY7IH0KLSsJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLSsvKiBjb25m ZGVmcy5oLiAgKi8KLStfQUNFT0YKLStjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19l eHQKLStjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0rLyogZW5kIGNvbmZkZWZz LmguICAqLwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsJCQkJICNpbmNsdWRlIDxsZGFw Lmg+Ci0raW50Ci0rbWFpbiAoKQotK3sKLSsodm9pZClsZGFwX2luaXQoMCwgMCk7Ci0rICA7 Ci0rICByZXR1cm4gMDsKLSt9Ci0rX0FDRU9GCi0rcm0gLWYgY29uZnRlc3QuJGFjX29iamV4 dAotK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi0rY2FzZSAiKCgkYWNfdHJ5IiBpbgot KyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0rICAqKSBh Y190cnlfZWNobz0kYWNfdHJ5OzsKLStlc2FjCi0rZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJ TkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSsgIChldmFsICIkYWNfY29tcGlsZSIpIDI+ Y29uZnRlc3QuZXIxCi0rICBhY19zdGF0dXM9JD8KLSsgIGdyZXAgLXYgJ14gKisnIGNvbmZ0 ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0rICBybSAtZiBjb25mdGVzdC5lcjEKLSsgIGNhdCBj b25mdGVzdC5lcnIgPiY1Ci0rICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0 YXR1cyIgPiY1Ci0rICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0rCSB0ZXN0IC16ICIk YWNfY193ZXJyb3JfZmxhZyIgfHwKLSsJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSsgICAg ICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSsgIHsgZWNobyAi JGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLStlY2hvICIke0VDSE9fVH15ZXMi ID4mNjsgfQotK2Vsc2UKLSsgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIg PiY1Ci0rc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotKwotKwotKwkJCQkg ICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci0rZWNobyAiJHtF Q0hPX1R9bm8iID4mNjsgfQotKwkJCQkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJv cjogKiogSW5jb21wbGV0ZSBvciBtaXNzaW5nIGxkYXAgbGlicmFyaWVzICoqIiA+JjUKLStl Y2hvICIkYXNfbWU6IGVycm9yOiAqKiBJbmNvbXBsZXRlIG9yIG1pc3NpbmcgbGRhcCBsaWJy YXJpZXMgKioiID4mMjt9Ci0rICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0rCi0rCi0r ZmkKLSsKLStybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LiRhY19leHQKLSsJCWZpCi0rCi0rCi0rZmkKLSsKLSsKLSAKLSAKLSAKLUBAIC0z MDEzNSw2ICszMDIxNSw3IEBACi0gZWNobyAiICAgICAgICAgICAgICAgICBTbWFydGNhcmQg c3VwcG9ydDogJFNDQVJEX01TRyIKLSBlY2hvICIgICAgICAgICAgICAgICAgICAgICBTL0tF WSBzdXBwb3J0OiAkU0tFWV9NU0ciCi0gZWNobyAiICAgICAgICAgICAgICBUQ1AgV3JhcHBl cnMgc3VwcG9ydDogJFRDUFdfTVNHIgotK2VjaG8gIiAgICAgICAgICAgICAgICAgICAgICBM REFQIHN1cHBvcnQ6ICRMREFQX01TRyIKLSBlY2hvICIgICAgICAgICAgICAgIE1ENSBwYXNz d29yZCBzdXBwb3J0OiAkTUQ1X01TRyIKLSBlY2hvICIgICAgICAgICAgICAgICAgICAgbGli ZWRpdCBzdXBwb3J0OiAkTElCRURJVF9NU0ciCi0gZWNobyAiICBTb2xhcmlzIHByb2Nlc3Mg Y29udHJhY3Qgc3VwcG9ydDogJFNQQ19NU0ciCi1kaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5v cmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBjb25maWd1cmUuYWMgY29uZmlndXJlLmFjCi0tLS0g Y29uZmlndXJlLmFjCTIwMDgtMDctMDkgMDQ6MDc6MTkuMDAwMDAwMDAwIC0wNzAwCi0rKysg Y29uZmlndXJlLmFjCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCi1AQCAt MTI5OSw2ICsxMjk5LDM3IEBACi0gCWVzYWMgXQotICkKLSAKLSsjIENoZWNrIHdoZXRoZXIg dXNlciB3YW50cyBMREFQIHN1cHBvcnQKLStMREFQX01TRz0ibm8iCi0rQUNfQVJHX1dJVEgo bGRhcCwKLSsJWyAgLS13aXRoLWxkYXBbWz1QQVRIXV0gICAgICBFbmFibGUgTERBUCBwdWJr ZXkgc3VwcG9ydCAob3B0aW9uYWxseSBpbiBQQVRIKV0sCi0rCVsKLSsJCWlmIHRlc3QgIngk d2l0aHZhbCIgIT0gInhubyIgOyB0aGVuCi0rCi0rCQkJaWYgdGVzdCAieCR3aXRodmFsIiAh PSAieHllcyIgOyB0aGVuCi0rCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkke3dpdGh2YWx9 L2luY2x1ZGUiCi0rCQkJCUxERkxBR1M9IiRMREZMQUdTIC1MJHt3aXRodmFsfS9saWIiCi0r CQkJZmkKLSsKLSsJCQlBQ19ERUZJTkUoW1dJVEhfTERBUF9QVUJLRVldLCAxLCBbRW5hYmxl IExEQVAgcHVia2V5IHN1cHBvcnRdKQotKwkJCUxJQlM9Ii1sbGRhcCAkTElCUyIKLSsJCQlM REFQX01TRz0ieWVzIgotKwkKLSsJCQlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBMREFQIHN1cHBv cnRdKQotKwkJCUFDX1RSWV9DT01QSUxFKAotKwkJCQlbI2luY2x1ZGUgPHN5cy90eXBlcy5o PgotKwkJCQkgI2luY2x1ZGUgPGxkYXAuaD5dLAotKwkJCQlbKHZvaWQpbGRhcF9pbml0KDAs IDApO10sCi0rCQkJCVtBQ19NU0dfUkVTVUxUKHllcyldLAotKwkJCQlbCi0rCQkJCSAgICBB Q19NU0dfUkVTVUxUKG5vKSAKLSsJCQkJCUFDX01TR19FUlJPUihbKiogSW5jb21wbGV0ZSBv ciBtaXNzaW5nIGxkYXAgbGlicmFyaWVzICoqXSkKLSsJCQkJXQotKyAgICAgICAgCSkKLSsJ CWZpCi0rCV0KLSspCi0rCi0gZG5sICAgIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMu IFBsZWFzZSBrZWVwIGluIGFscGhhYmV0aWNhbCBvcmRlcgotIEFDX0NIRUNLX0ZVTkNTKCBc Ci0gCWFyYzRyYW5kb20gXAotQEAgLTQxMzcsNiArNDE2OCw3IEBACi0gZWNobyAiICAgICAg ICAgICAgICAgICBTbWFydGNhcmQgc3VwcG9ydDogJFNDQVJEX01TRyIKLSBlY2hvICIgICAg ICAgICAgICAgICAgICAgICBTL0tFWSBzdXBwb3J0OiAkU0tFWV9NU0ciCi0gZWNobyAiICAg ICAgICAgICAgICBUQ1AgV3JhcHBlcnMgc3VwcG9ydDogJFRDUFdfTVNHIgotK2VjaG8gIiAg ICAgICAgICAgICAgICAgICAgICBMREFQIHN1cHBvcnQ6ICRMREFQX01TRyIKLSBlY2hvICIg ICAgICAgICAgICAgIE1ENSBwYXNzd29yZCBzdXBwb3J0OiAkTUQ1X01TRyIKLSBlY2hvICIg ICAgICAgICAgICAgICAgICAgbGliZWRpdCBzdXBwb3J0OiAkTElCRURJVF9NU0ciCi0gZWNo byAiICBTb2xhcmlzIHByb2Nlc3MgY29udHJhY3Qgc3VwcG9ydDogJFNQQ19NU0ciCi1kaWZm IC1OdWFyIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBsZGFwYXV0aC5j IGxkYXBhdXRoLmMKLS0tLSBsZGFwYXV0aC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAw MDAwIC0wODAwCi0rKysgbGRhcGF1dGguYwkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAw MCAtMDcwMAotQEAgLTAsMCArMSw1NzUgQEAKLSsvKiAKLSsgKiAkSWQ6IG9wZW5zc2gtbHBr LTQuM3AxLTAuMy43LnBhdGNoLHYgMS4zIDIwMDYvMDQvMTggMTU6Mjk6MDkgZWF1IEV4cCAk Ci0rICovCi0rCi0rLyoKLSsgKgotKyAqIENvcHlyaWdodCAoYykgMjAwNSwgRXJpYyBBVUdF IDxlYXVAcGhlYXIub3JnPgotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCi0rICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot KyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHBoZWFyLm9yZyBub3IgdGhlIG5hbWVzIG9m IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMi IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgCi0r ICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuIAotKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgCi0rICogT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgCi0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QgTElBQklMSVRZLCAKLSsgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsK LSsjaWZkZWYgV0lUSF9MREFQX1BVQktFWQotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKwotKyNpbmNsdWRlICJsZGFwYXV0aC5oIgotKyNpbmNsdWRlICJsb2cuaCIK LSsKLStzdGF0aWMgY2hhciAqYXR0cnNbXSA9IHsKLSsgICAgUFVCS0VZQVRUUiwKLSsgICAg TlVMTAotK307Ci0rCi0rLyogZmlsdGVyIGJ1aWxkaW5nIGluZm9zICovCi0rI2RlZmluZSBG SUxURVJfR1JPVVBfUFJFRklYICIoJihvYmplY3RjbGFzcz1wb3NpeEdyb3VwKSIKLSsjZGVm aW5lIEZJTFRFUl9PUl9QUkVGSVggIih8IgotKyNkZWZpbmUgRklMVEVSX09SX1NVRkZJWCAi KSIKLSsjZGVmaW5lIEZJTFRFUl9DTl9QUkVGSVggIihjbj0iCi0rI2RlZmluZSBGSUxURVJf Q05fU1VGRklYICIpIgotKyNkZWZpbmUgRklMVEVSX1VJRF9GT1JNQVQgIihtZW1iZXJVaWQ9 JXMpIgotKyNkZWZpbmUgRklMVEVSX0dST1VQX1NVRkZJWCAiKSIKLSsjZGVmaW5lIEZJTFRF Ul9HUk9VUF9TSVpFKGdyb3VwKSAoc2l6ZV90KSAoc3RybGVuKGdyb3VwKSsobGRhcF9jb3Vu dF9ncm91cChncm91cCkqNSkrNTIpCi0rCi0rLyoganVzdCBmaWx0ZXIgYnVpbGRpbmcgc3R1 ZmYgKi8KLSsjZGVmaW5lIFJFUVVFU1RfR1JPVVBfU0laRShmaWx0ZXIsIHVpZCkgKHNpemVf dCkgKHN0cmxlbihmaWx0ZXIpK3N0cmxlbih1aWQpKzEpCi0rI2RlZmluZSBSRVFVRVNUX0dS T1VQKGJ1ZmZlciwgcHJlZmlsdGVyLCBwd25hbWUpIFwKLSsgICAgYnVmZmVyID0gKGNoYXIg KikgY2FsbG9jKFJFUVVFU1RfR1JPVVBfU0laRShwcmVmaWx0ZXIsIHB3bmFtZSksIHNpemVv ZihjaGFyKSk7IFwKLSsgICAgaWYgKCFidWZmZXIpIHsgXAotKyAgICAgICAgcGVycm9yKCJj YWxsb2MoKSIpOyBcCi0rICAgICAgICByZXR1cm4gRkFJTFVSRTsgXAotKyAgICB9IFwKLSsg ICAgc25wcmludGYoYnVmZmVyLCBSRVFVRVNUX0dST1VQX1NJWkUocHJlZmlsdGVyLHB3bmFt ZSksIHByZWZpbHRlciwgcHduYW1lKQotKy8qCi0rWFhYIE9MRCBncm91cCBidWlsZGluZyBt YWNyb3MKLSsjZGVmaW5lIFJFUVVFU1RfR1JPVVBfU0laRShncnAsIHVpZCkgKHNpemVfdCkg KHN0cmxlbihncnApK3N0cmxlbih1aWQpKzQ2KQotKyNkZWZpbmUgUkVRVUVTVF9HUk9VUChi dWZmZXIscHduYW1lLGdycCkgXAotKyAgICBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoUkVR VUVTVF9HUk9VUF9TSVpFKGdycCwgcHduYW1lKSwgc2l6ZW9mKGNoYXIpKTsgXAotKyAgICBp ZiAoIWJ1ZmZlcikgeyBcCi0rICAgICAgICBwZXJyb3IoImNhbGxvYygpIik7IFwKLSsgICAg ICAgIHJldHVybiBGQUlMVVJFOyBcCi0rICAgIH0gXAotKyAgICBzbnByaW50ZihidWZmZXIs UkVRVUVTVF9HUk9VUF9TSVpFKGdycCxwd25hbWUpLCIoJihvYmplY3RjbGFzcz1wb3NpeEdy b3VwKShjbj0lcykobWVtYmVyVWlkPSVzKSkiLGdycCxwd25hbWUpCi0rICAgICovCi0rCi0r LyoKLStYWFggc3RvY2sgdXBzdHJlYW0gdmVyc2lvbiB3aXRob3V0IGV4dHJhIGZpbHRlciBz dXBwb3J0Ci0rI2RlZmluZSBSRVFVRVNUX1VTRVJfU0laRSh1aWQpIChzaXplX3QpIChzdHJs ZW4odWlkKSs2NCkKLSsjZGVmaW5lIFJFUVVFU1RfVVNFUihidWZmZXIsIHB3bmFtZSkgXAot KyAgICBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoUkVRVUVTVF9VU0VSX1NJWkUocHduYW1l KSwgc2l6ZW9mKGNoYXIpKTsgXAotKyAgICBpZiAoIWJ1ZmZlcikgeyBcCi0rICAgICAgICBw ZXJyb3IoImNhbGxvYygpIik7IFwKLSsgICAgICAgIHJldHVybiBOVUxMOyBcCi0rICAgIH0g XAotKyAgICBzbnByaW50ZihidWZmZXIsUkVRVUVTVF9VU0VSX1NJWkUocHduYW1lKSwiKCYo b2JqZWN0Y2xhc3M9cG9zaXhBY2NvdW50KShvYmplY3RjbGFzcz1sZGFwUHVibGljS2V5KSh1 aWQ9JXMpKSIscHduYW1lKQotKyAgICovCi0rCi0rI2RlZmluZSBSRVFVRVNUX1VTRVJfU0la RSh1aWQsIGZpbHRlcikgKHNpemVfdCkgKHN0cmxlbih1aWQpKzY0KyhmaWx0ZXIgIT0gTlVM TCA/IHN0cmxlbihmaWx0ZXIpIDogMCkpCi0rI2RlZmluZSBSRVFVRVNUX1VTRVIoYnVmZmVy LCBwd25hbWUsIGN1c3RvbWZpbHRlcikgXAotKyAgICBidWZmZXIgPSAoY2hhciAqKSBjYWxs b2MoUkVRVUVTVF9VU0VSX1NJWkUocHduYW1lLCBjdXN0b21maWx0ZXIpLCBzaXplb2YoY2hh cikpOyBcCi0rICAgIGlmICghYnVmZmVyKSB7IFwKLSsgICAgICAgIHBlcnJvcigiY2FsbG9j KCkiKTsgXAotKyAgICAgICAgcmV0dXJuIE5VTEw7IFwKLSsgICAgfSBcCi0rICAgIHNucHJp bnRmKGJ1ZmZlciwgUkVRVUVTVF9VU0VSX1NJWkUocHduYW1lLCBjdXN0b21maWx0ZXIpLCBc Ci0rICAgIAkiKCYob2JqZWN0Y2xhc3M9cG9zaXhBY2NvdW50KShvYmplY3RjbGFzcz1sZGFw UHVibGljS2V5KSh1aWQ9JXMpJXMpIiwgXAotKwlwd25hbWUsIChjdXN0b21maWx0ZXIgIT0g TlVMTCA/IGN1c3RvbWZpbHRlciA6ICIiKSkKLSsKLSsvKiBzb21lIHBvcnRhYmxlIGFuZCB3 b3JraW5nIHRva2VuaXplciwgbGFtZSB0aG91Z2ggKi8KLStzdGF0aWMgaW50IHRva2VuaXpl KGNoYXIgKiogbywgc2l6ZV90IHNpemUsIGNoYXIgKiBpbnB1dCkgewotKyAgICB1bnNpZ25l ZCBpbnQgaSA9IDAsIG51bTsKLSsgICAgY29uc3QgY2hhciAqIGNoYXJzZXQgPSAiIFx0IjsK LSsgICAgY2hhciAqIHB0ciA9IGlucHV0OwotKwotKyAgICAvKiBsZWFkaW5nIHdoaXRlIHNw YWNlcyBhcmUgaWdub3JlZCAqLwotKyAgICBudW0gPSBzdHJzcG4ocHRyLCBjaGFyc2V0KTsK LSsgICAgcHRyICs9IG51bTsKLSsKLSsgICAgd2hpbGUgKChudW0gPSBzdHJjc3BuKHB0ciwg Y2hhcnNldCkpKSB7Ci0rICAgICAgICBpZiAoaSA8IHNpemUtMSkgewotKyAgICAgICAgICAg IG9baSsrXSA9IHB0cjsKLSsgICAgICAgICAgICBwdHIgKz0gbnVtOwotKyAgICAgICAgICAg IGlmICgqcHRyKQotKyAgICAgICAgICAgICAgICAqcHRyKysgPSAnXDAnOwotKyAgICAgICAg fQotKyAgICB9Ci0rICAgIG9baV0gPSBOVUxMOwotKyAgICByZXR1cm4gU1VDQ0VTUzsKLSt9 Ci0rCi0rdm9pZCBsZGFwX2Nsb3NlKGxkYXBfb3B0X3QgKiBsZGFwKSB7Ci0rCi0rICAgIGlm ICghbGRhcCkKLSsgICAgICAgIHJldHVybjsKLSsKLSsgICAgaWYgKCBsZGFwX3VuYmluZF9l eHQobGRhcC0+bGQsIE5VTEwsIE5VTEwpIDwgMCkKLSsJbGRhcF9wZXJyb3IobGRhcC0+bGQs ICJsZGFwX3VuYmluZCgpIik7Ci0rCi0rICAgIGxkYXAtPmxkID0gTlVMTDsKLSsgICAgRkxB R19TRVRfRElTQ09OTkVDVEVEKGxkYXAtPmZsYWdzKTsKLSsKLSsgICAgcmV0dXJuOwotK30K LSsKLSsvKiBpbml0ICYmIGJpbmQgKi8KLStpbnQgbGRhcF9jb25uZWN0KGxkYXBfb3B0X3Qg KiBsZGFwKSB7Ci0rICAgIGludCB2ZXJzaW9uID0gTERBUF9WRVJTSU9OMzsKLSsKLSsgICAg aWYgKCFsZGFwLT5zZXJ2ZXJzKQotKyAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0rCi0rICAg IC8qIENvbm5lY3Rpb24gSW5pdCBhbmQgc2V0dXAgKi8KLSsgICAgbGRhcC0+bGQgPSBsZGFw X2luaXQobGRhcC0+c2VydmVycywgTERBUF9QT1JUKTsKLSsgICAgaWYgKCFsZGFwLT5sZCkg ewotKyAgICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX2luaXQoKSIpOwotKyAg ICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCBsZGFwX3NldF9v cHRpb24obGRhcC0+bGQsIExEQVBfT1BUX1BST1RPQ09MX1ZFUlNJT04sICZ2ZXJzaW9uKSAh PSBMREFQX09QVF9TVUNDRVNTKSB7Ci0rICAgICAgICBsZGFwX3BlcnJvcihsZGFwLT5sZCwg ImxkYXBfc2V0X29wdGlvbihMREFQX09QVF9QUk9UT0NPTF9WRVJTSU9OKSIpOwotKyAgICAg ICAgcmV0dXJuIEZBSUxVUkU7Ci0rICAgIH0KLSsKLSsgICAgLyogVGltZW91dHMgc2V0dXAg Ki8KLSsgICAgaWYgKGxkYXBfc2V0X29wdGlvbihsZGFwLT5sZCwgTERBUF9PUFRfTkVUV09S S19USU1FT1VULCAmbGRhcC0+Yl90aW1lb3V0KSAhPSBMREFQX1NVQ0NFU1MpIHsKLSsgICAg ICAgIGxkYXBfcGVycm9yKGxkYXAtPmxkLCAibGRhcF9zZXRfb3B0aW9uKExEQVBfT1BUX05F VFdPUktfVElNRU9VVCkiKTsKLSsgICAgfQotKyAgICBpZiAobGRhcF9zZXRfb3B0aW9uKGxk YXAtPmxkLCBMREFQX09QVF9USU1FT1VULCAmbGRhcC0+c190aW1lb3V0KSAhPSBMREFQX1NV Q0NFU1MpIHsKLSsgICAgICAgIGxkYXBfcGVycm9yKGxkYXAtPmxkLCAibGRhcF9zZXRfb3B0 aW9uKExEQVBfT1BUX1RJTUVPVVQpIik7Ci0rICAgIH0KLSsKLSsgICAgLyogVExTIHN1cHBv cnQgKi8KLSsgICAgaWYgKCAobGRhcC0+dGxzID09IC0xKSB8fCAobGRhcC0+dGxzID09IDEp ICkgewotKyAgICAgICAgaWYgKGxkYXBfc3RhcnRfdGxzX3MobGRhcC0+bGQsIE5VTEwsIE5V TEwgKSAhPSBMREFQX1NVQ0NFU1MpIHsKLSsgICAgICAgICAgICAvKiBmYWlsZWQgdGhlbiBy ZWluaXQgdGhlIGluaXRpYWwgY29ubmVjdCAqLwotKyAgICAgICAgICAgIGxkYXBfcGVycm9y KGxkYXAtPmxkLCAibGRhcF9jb25uZWN0OiAoVExTKSBsZGFwX3N0YXJ0X3RscygpIik7Ci0r ICAgICAgICAgICAgaWYgKGxkYXAtPnRscyA9PSAxKQotKyAgICAgICAgICAgICAgICByZXR1 cm4gRkFJTFVSRTsKLSsKLSsgICAgICAgICAgICBsZGFwLT5sZCA9IGxkYXBfaW5pdChsZGFw LT5zZXJ2ZXJzLCBMREFQX1BPUlQpOwotKyAgICAgICAgICAgIGlmICghbGRhcC0+bGQpIHsg Ci0rICAgICAgICAgICAgICAgIGxkYXBfcGVycm9yKGxkYXAtPmxkLCAibGRhcF9pbml0KCki KTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0rICAgICAgICAgICAgfQot KwotKyAgICAgICAgICAgIGlmICggbGRhcF9zZXRfb3B0aW9uKGxkYXAtPmxkLCBMREFQX09Q VF9QUk9UT0NPTF9WRVJTSU9OLCAmdmVyc2lvbikgIT0gTERBUF9PUFRfU1VDQ0VTUykgewot KyAgICAgICAgICAgICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX3NldF9vcHRp b24oKSIpOwotKyAgICAgICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkU7Ci0rICAgICAgICAg ICAgfQotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rCi0rICAgIGlmICggbGRhcF9zaW1wbGVf YmluZF9zKGxkYXAtPmxkLCBsZGFwLT5iaW5kZG4sIGxkYXAtPmJpbmRwdykgIT0gTERBUF9T VUNDRVNTKSB7Ci0rICAgICAgICBsZGFwX3BlcnJvcihsZGFwLT5sZCwgImxkYXBfc2ltcGxl X2JpbmRfcygpIik7Ci0rICAgICAgICByZXR1cm4gRkFJTFVSRTsKLSsgICAgfQotKwotKyAg ICAvKiBzYXlzIGl0IGlzIGNvbm5lY3RlZCAqLwotKyAgICBGTEFHX1NFVF9DT05ORUNURUQo bGRhcC0+ZmxhZ3MpOwotKwotKyAgICByZXR1cm4gU1VDQ0VTUzsKLSt9Ci0rCi0rLyogbXVz dCBmcmVlIGFsbG9jYXRlZCByZXNzb3VyY2UgKi8KLStzdGF0aWMgY2hhciAqIGxkYXBfYnVp bGRfaG9zdChjaGFyICpob3N0LCBpbnQgcG9ydCkgewotKyAgICB1bnNpZ25lZCBpbnQgc2l6 ZSA9IHN0cmxlbihob3N0KSsxMTsKLSsgICAgY2hhciAqIGggPSAoY2hhciAqKSBjYWxsb2Mg KHNpemUsIHNpemVvZihjaGFyKSk7Ci0rICAgIGludCByYzsKLSsgICAgaWYgKCFoKQotKyAg ICAgICAgIHJldHVybiBOVUxMOwotKwotKyAgICByYyA9IHNucHJpbnRmKGgsIHNpemUsICIl czolZCAiLCBob3N0LCBwb3J0KTsKLSsgICAgaWYgKHJjID09IC0xKQotKyAgICAgICAgcmV0 dXJuIE5VTEw7Ci0rICAgIHJldHVybiBoOwotK30KLSsKLStzdGF0aWMgaW50IGxkYXBfY291 bnRfZ3JvdXAoY29uc3QgY2hhciAqIGlucHV0KSB7Ci0rICAgIGNvbnN0IGNoYXIgKiBjaGFy c2V0ID0gIiBcdCI7Ci0rICAgIGNvbnN0IGNoYXIgKiBwdHIgPSBpbnB1dDsKLSsgICAgdW5z aWduZWQgaW50IGNvdW50ID0gMDsKLSsgICAgdW5zaWduZWQgaW50IG51bTsKLSsKLSsgICAg bnVtID0gc3Ryc3BuKHB0ciwgY2hhcnNldCk7Ci0rICAgIHB0ciArPSBudW07Ci0rCi0rICAg IHdoaWxlICgobnVtID0gc3RyY3NwbihwdHIsIGNoYXJzZXQpKSkgewotKyAgICBjb3VudCsr OwotKyAgICBwdHIgKz0gbnVtOwotKyAgICBwdHIrKzsKLSsgICAgfQotKwotKyAgICByZXR1 cm4gY291bnQ7Ci0rfQotKwotKy8qIGZvcm1hdCBmaWx0ZXIgKi8KLStjaGFyICogbGRhcF9w YXJzZV9ncm91cHMoY29uc3QgY2hhciAqIGdyb3VwcykgewotKyAgICB1bnNpZ25lZCBpbnQg YnVmZmVyX3NpemUgPSBGSUxURVJfR1JPVVBfU0laRShncm91cHMpOwotKyAgICBjaGFyICog YnVmZmVyID0gKGNoYXIgKikgY2FsbG9jKGJ1ZmZlcl9zaXplLCBzaXplb2YoY2hhcikpOwot KyAgICBjaGFyICogZyA9IE5VTEw7Ci0rICAgIGNoYXIgKiBnYXJyYXlbMzJdOwotKyAgICB1 bnNpZ25lZCBpbnQgaSA9IDA7Ci0rCi0rICAgIGlmICgoIWdyb3Vwcyl8fCghYnVmZmVyKSkK LSsgICAgICAgIHJldHVybiBOVUxMOwotKwotKyAgICBnID0gc3RyZHVwKGdyb3Vwcyk7Ci0r ICAgIGlmICghZykgewotKyAgICAgICAgZnJlZShidWZmZXIpOwotKyAgICAgICAgcmV0dXJu IE5VTEw7Ci0rICAgIH0KLSsKLSsgICAgLyogZmlyc3Qgc2VwYXJhdGUgaW50byBuIHRva2Vu cyAqLwotKyAgICBpZiAoIHRva2VuaXplKGdhcnJheSwgc2l6ZW9mKGdhcnJheSkvc2l6ZW9m KCpnYXJyYXkpLCBnKSA8IDApIHsKLSsgICAgICAgIGZyZWUoZyk7Ci0rICAgICAgICBmcmVl KGJ1ZmZlcik7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotKwotKyAgICAvKiBi dWlsZCB0aGUgZmluYWwgZmlsdGVyIGZvcm1hdCAqLwotKyAgICBzdHJsY2F0KGJ1ZmZlciwg RklMVEVSX0dST1VQX1BSRUZJWCwgYnVmZmVyX3NpemUpOwotKyAgICBzdHJsY2F0KGJ1ZmZl ciwgRklMVEVSX09SX1BSRUZJWCwgYnVmZmVyX3NpemUpOwotKyAgICBpID0gMDsKLSsgICAg d2hpbGUgKGdhcnJheVtpXSkgewotKyAgICAgICAgc3RybGNhdChidWZmZXIsIEZJTFRFUl9D Tl9QUkVGSVgsIGJ1ZmZlcl9zaXplKTsKLSsgICAgICAgIHN0cmxjYXQoYnVmZmVyLCBnYXJy YXlbaV0sIGJ1ZmZlcl9zaXplKTsKLSsgICAgICAgIHN0cmxjYXQoYnVmZmVyLCBGSUxURVJf Q05fU1VGRklYLCBidWZmZXJfc2l6ZSk7Ci0rICAgICAgICBpKys7Ci0rICAgIH0KLSsgICAg c3RybGNhdChidWZmZXIsIEZJTFRFUl9PUl9TVUZGSVgsIGJ1ZmZlcl9zaXplKTsKLSsgICAg c3RybGNhdChidWZmZXIsIEZJTFRFUl9VSURfRk9STUFULCBidWZmZXJfc2l6ZSk7Ci0rICAg IHN0cmxjYXQoYnVmZmVyLCBGSUxURVJfR1JPVVBfU1VGRklYLCBidWZmZXJfc2l6ZSk7Ci0r Ci0rICAgIGZyZWUoZyk7Ci0rICAgIHJldHVybiBidWZmZXI7Ci0rfQotKwotKy8qIGEgYml0 IGRpcnR5IGJ1dCBsZWFrIGZyZWUgICovCi0rY2hhciAqIGxkYXBfcGFyc2Vfc2VydmVycyhj b25zdCBjaGFyICogc2VydmVycykgewotKyAgICBjaGFyICogcyA9IE5VTEw7Ci0rICAgIGNo YXIgKiB0bXAgPSBOVUxMLCAqdXJsc1szMl07Ci0rICAgIHVuc2lnbmVkIGludCBudW0gPSAw ICwgaSA9IDAgLCBhc2l6ZSA9IDA7Ci0rICAgIExEQVBVUkxEZXNjICp1cmxkWzMyXTsKLSsK LSsgICAgaWYgKCFzZXJ2ZXJzKQotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rCi0rICAgIC8q IGxvY2FsIGNvcHkgb2YgdGhlIGFyZyAqLwotKyAgICBzID0gc3RyZHVwKHNlcnZlcnMpOwot KyAgICBpZiAoIXMpCi0rICAgICAgICByZXR1cm4gTlVMTDsKLSsKLSsgICAgLyogZmlyc3Qg c2VwYXJhdGUgaW50byBVUkwgdG9rZW5zICovCi0rICAgIGlmICggdG9rZW5pemUodXJscywg c2l6ZW9mKHVybHMpL3NpemVvZigqdXJscyksIHMpIDwgMCkKLSsgICAgICAgIHJldHVybiBO VUxMOwotKwotKyAgICBpID0gMDsKLSsgICAgd2hpbGUgKHVybHNbaV0pIHsKLSsgICAgICAg IGlmICghIGxkYXBfaXNfbGRhcF91cmwodXJsc1tpXSkgfHwKLSsgICAgICAgICAgIChsZGFw X3VybF9wYXJzZSh1cmxzW2ldLCAmdXJsZFtpXSkgIT0gMCkpIHsKLSsgICAgICAgICAgICAg ICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICB9Ci0rICAgICAgICBpKys7Ci0rICAgIH0KLSsK LSsgICAgLyogbm93IGZyZWUocykgKi8KLSsgICAgZnJlZSAocyk7Ci0rCi0rICAgIC8qIGhv dyBtdWNoIG1lbW9yeSBkbyB3ZSBuZWVkICovCi0rICAgIG51bSA9IGk7Ci0rICAgIGZvciAo aSA9IDAgOyBpIDwgbnVtIDsgaSsrKQotKyAgICAgICAgYXNpemUgKz0gc3RybGVuKHVybGRb aV0tPmx1ZF9ob3N0KSsxMTsKLSsKLSsgICAgLyogYWxsb2MgKi8KLSsgICAgcyA9IChjaGFy ICopIGNhbGxvYyggYXNpemUrMSAsIHNpemVvZihjaGFyKSk7Ci0rICAgIGlmICghcykgewot KyAgICAgICAgZm9yIChpID0gMCA7IGkgPCBudW0gOyBpKyspCi0rICAgICAgICAgICAgbGRh cF9mcmVlX3VybGRlc2ModXJsZFtpXSk7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAg fQotKwotKyAgICAvKiB0aGVuIGJ1aWxkIHRoZSBmaW5hbCBob3N0IHN0cmluZyAqLwotKyAg ICBmb3IgKGkgPSAwIDsgaSA8IG51bSA7IGkrKykgewotKyAgICAgICAgLyogYnVpbHQgaG9z dCBwYXJ0ICovCi0rICAgICAgICB0bXAgPSBsZGFwX2J1aWxkX2hvc3QodXJsZFtpXS0+bHVk X2hvc3QsIHVybGRbaV0tPmx1ZF9wb3J0KTsKLSsgICAgICAgIHN0cm5jYXQocywgdG1wLCBz dHJsZW4odG1wKSk7Ci0rICAgICAgICBsZGFwX2ZyZWVfdXJsZGVzYyh1cmxkW2ldKTsKLSsg ICAgICAgIGZyZWUodG1wKTsKLSsgICAgfQotKwotKyAgICByZXR1cm4gczsKLSt9Ci0rCi0r dm9pZCBsZGFwX29wdGlvbnNfcHJpbnQobGRhcF9vcHRfdCAqIGxkYXApIHsKLSsgICAgZGVi dWcoImxkYXAgb3B0aW9uczoiKTsKLSsgICAgZGVidWcoInNlcnZlcnM6ICVzIiwgbGRhcC0+ c2VydmVycyk7Ci0rICAgIGlmIChsZGFwLT51X2Jhc2VkbikKLSsgICAgICAgIGRlYnVnKCJ1 c2VyIGJhc2VkbjogJXMiLCBsZGFwLT51X2Jhc2Vkbik7Ci0rICAgIGlmIChsZGFwLT5nX2Jh c2VkbikKLSsgICAgICAgIGRlYnVnKCJncm91cCBiYXNlZG46ICVzIiwgbGRhcC0+Z19iYXNl ZG4pOwotKyAgICBpZiAobGRhcC0+YmluZGRuKQotKyAgICAgICAgZGVidWcoImJpbmRkbjog JXMiLCBsZGFwLT5iaW5kZG4pOwotKyAgICBpZiAobGRhcC0+YmluZHB3KQotKyAgICAgICAg ZGVidWcoImJpbmRwdzogJXMiLCBsZGFwLT5iaW5kcHcpOwotKyAgICBpZiAobGRhcC0+c2dy b3VwKQotKyAgICAgICAgZGVidWcoImdyb3VwOiAlcyIsIGxkYXAtPnNncm91cCk7Ci0rICAg IGlmIChsZGFwLT5maWx0ZXIpCi0rICAgICAgICBkZWJ1ZygiZmlsdGVyOiAlcyIsIGxkYXAt PmZpbHRlcik7Ci0rfQotKwotK3ZvaWQgbGRhcF9vcHRpb25zX2ZyZWUobGRhcF9vcHRfdCAq IGwpIHsKLSsgICAgaWYgKCFsKQotKyAgICAgICAgcmV0dXJuOwotKyAgICBpZiAobC0+c2Vy dmVycykKLSsgICAgICAgIGZyZWUobC0+c2VydmVycyk7Ci0rICAgIGlmIChsLT51X2Jhc2Vk bikKLSsgICAgICAgIGZyZWUobC0+dV9iYXNlZG4pOwotKyAgICBpZiAobC0+Z19iYXNlZG4p Ci0rICAgICAgICBmcmVlKGwtPmdfYmFzZWRuKTsKLSsgICAgaWYgKGwtPmJpbmRkbikKLSsg ICAgICAgIGZyZWUobC0+YmluZGRuKTsKLSsgICAgaWYgKGwtPmJpbmRwdykKLSsgICAgICAg IGZyZWUobC0+YmluZHB3KTsKLSsgICAgaWYgKGwtPnNncm91cCkKLSsgICAgICAgIGZyZWUo bC0+c2dyb3VwKTsKLSsgICAgaWYgKGwtPmZncm91cCkKLSsgICAgICAgIGZyZWUobC0+Zmdy b3VwKTsKLSsgICAgaWYgKGwtPmZpbHRlcikKLSsgICAgICAgIGZyZWUobC0+ZmlsdGVyKTsK LSsgICAgaWYgKGwtPmxfY29uZikKLSsgICAgICAgIGZyZWUobC0+bF9jb25mKTsKLSsgICAg ZnJlZShsKTsKLSt9Ci0rCi0rLyogZnJlZSBrZXlzICovCi0rdm9pZCBsZGFwX2tleXNfZnJl ZShsZGFwX2tleV90ICogaykgewotKyAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuKGstPmtleXMp OwotKyAgICBmcmVlKGspOwotKyAgICByZXR1cm47Ci0rfQotKwotK2xkYXBfa2V5X3QgKiBs ZGFwX2dldHVzZXJrZXkobGRhcF9vcHRfdCAqbCwgY29uc3QgY2hhciAqIHVzZXIpIHsKLSsg ICAgbGRhcF9rZXlfdCAqIGsgPSAobGRhcF9rZXlfdCAqKSBjYWxsb2MgKDEsIHNpemVvZihs ZGFwX2tleV90KSk7Ci0rICAgIExEQVBNZXNzYWdlICpyZXMsICplOwotKyAgICBjaGFyICog ZmlsdGVyOwotKyAgICBpbnQgaTsKLSsKLSsgICAgaWYgKCghaykgfHwgKCFsKSkKLSsgICAg ICAgICByZXR1cm4gTlVMTDsKLSsKLSsgICAgLyogQW0gaSBzdGlsbCBjb25uZWN0ZWQgPyBS RVRSWSBuIHRpbWVzICovCi0rICAgIC8qIFhYWCBUT0RPOiBzZXR1cCBzb21lIGNvbmYgdmFs dWUgZm9yIHJldHJ5aW5nICovCi0rICAgIGlmICghKGwtPmZsYWdzICYgRkxBR19DT05ORUNU RUQpKQotKyAgICAgICAgZm9yIChpID0gMCA7IGkgPCAyIDsgaSsrKQotKyAgICAgICAgICAg IGlmIChsZGFwX2Nvbm5lY3QobCkgPT0gMCkKLSsgICAgICAgICAgICAgICAgYnJlYWs7Ci0r Ci0rICAgIC8qIHF1aWNrIGNoZWNrIGZvciBhdHRlbXB0cyB0byBiZSBldmlsICovCi0rICAg IGlmICgoc3RyY2hyKHVzZXIsICcoJykgIT0gTlVMTCkgfHwgKHN0cmNocih1c2VyLCAnKScp ICE9IE5VTEwpIHx8Ci0rICAgICAgICAoc3RyY2hyKHVzZXIsICcqJykgIT0gTlVMTCkgfHwg KHN0cmNocih1c2VyLCAnXFwnKSAhPSBOVUxMKSkKLSsgICAgICAgIHJldHVybiBOVUxMOwot KwotKyAgICAvKiBidWlsZCAgZmlsdGVyIGZvciBMREFQIHJlcXVlc3QgKi8KLSsgICAgUkVR VUVTVF9VU0VSKGZpbHRlciwgdXNlciwgbC0+ZmlsdGVyKTsKLSsKLSsgICAgaWYgKCBsZGFw X3NlYXJjaF9zdCggbC0+bGQsCi0rICAgICAgICBsLT51X2Jhc2VkbiwKLSsgICAgICAgIExE QVBfU0NPUEVfU1VCVFJFRSwKLSsgICAgICAgIGZpbHRlciwKLSsgICAgICAgIGF0dHJzLCAw LCAmbC0+c190aW1lb3V0LCAmcmVzICkgIT0gTERBUF9TVUNDRVNTKSB7Ci0rICAgICAgICAK LSsgICAgICAgIGxkYXBfcGVycm9yKGwtPmxkLCAibGRhcF9zZWFyY2hfc3QoKSIpOwotKwot KyAgICAgICAgZnJlZShmaWx0ZXIpOwotKyAgICAgICAgZnJlZShrKTsKLSsKLSsgICAgICAg IC8qIFhYWCBlcnJvciBvbiBzZWFyY2gsIHRpbWVvdXQgZXRjLi4gY2xvc2UgYXNrIGZvciBy ZWNvbm5lY3QgKi8KLSsgICAgICAgIGxkYXBfY2xvc2UobCk7Ci0rCi0rICAgICAgICByZXR1 cm4gTlVMTDsKLSsgICAgfSAKLSsKLSsgICAgLyogZnJlZSAqLwotKyAgICBmcmVlKGZpbHRl cik7Ci0rCi0rICAgIC8qIGNoZWNrIGlmIGFueSByZXN1bHRzICovCi0rICAgIGkgPSBsZGFw X2NvdW50X2VudHJpZXMobC0+bGQscmVzKTsKLSsgICAgaWYgKGkgPD0gMCkgewotKyAgICAg ICAgbGRhcF9tc2dmcmVlKHJlcyk7Ci0rICAgICAgICBmcmVlKGspOwotKyAgICAgICAgcmV0 dXJuIE5VTEw7Ci0rICAgIH0KLSsKLSsgICAgaWYgKGkgPiAxKQotKyAgICAgICAgZGVidWco IltMREFQXSBkdXBsaWNhdGUgZW50cmllcywgdXNpbmcgdGhlIEZJUlNUIGVudHJ5IHJldHVy bmVkIik7Ci0rCi0rICAgIGUgPSBsZGFwX2ZpcnN0X2VudHJ5KGwtPmxkLCByZXMpOwotKyAg ICBrLT5rZXlzID0gbGRhcF9nZXRfdmFsdWVzX2xlbihsLT5sZCwgZSwgUFVCS0VZQVRUUik7 Ci0rICAgIGstPm51bSA9IGxkYXBfY291bnRfdmFsdWVzX2xlbihrLT5rZXlzKTsKLSsKLSsg ICAgbGRhcF9tc2dmcmVlKHJlcyk7Ci0rICAgIHJldHVybiBrOwotK30KLSsKLSsKLSsvKiAt MSBpZiB0cm91YmxlCi0rICAgMCBpZiB1c2VyIGlzIE5PVCBtZW1iZXIgb2YgY3VycmVudCBz ZXJ2ZXIgZ3JvdXAKLSsgICAxIGlmIHVzZXIgSVMgTUVNQkVSIG9mIGN1cnJlbnQgc2VydmVy IGdyb3VwIAotKyAqLwotK2ludCBsZGFwX2lzbWVtYmVyKGxkYXBfb3B0X3QgKiBsLCBjb25z dCBjaGFyICogdXNlcikgewotKyAgICBMREFQTWVzc2FnZSAqcmVzOwotKyAgICBjaGFyICog ZmlsdGVyOwotKyAgICBpbnQgaTsKLSsKLSsgICAgaWYgKCghbC0+c2dyb3VwKSB8fCAhKGwt PmdfYmFzZWRuKSkKLSsgICAgICAgIHJldHVybiAxOwotKwotKyAgICAvKiBBbSBpIHN0aWxs IGNvbm5lY3RlZCA/IFJFVFJZIG4gdGltZXMgKi8KLSsgICAgLyogWFhYIFRPRE86IHNldHVw IHNvbWUgY29uZiB2YWx1ZSBmb3IgcmV0cnlpbmcgKi8KLSsgICAgaWYgKCEobC0+ZmxhZ3Mg JiBGTEFHX0NPTk5FQ1RFRCkpIAotKyAgICAgICAgZm9yIChpID0gMCA7IGkgPCAyIDsgaSsr KQotKyAgICAgICAgICAgIGlmIChsZGFwX2Nvbm5lY3QobCkgPT0gMCkKLSsgICAgICAgICAg ICAgICAgIGJyZWFrOwotKwotKyAgICAvKiBxdWljayBjaGVjayBmb3IgYXR0ZW1wdHMgdG8g YmUgZXZpbCAqLwotKyAgICBpZiAoKHN0cmNocih1c2VyLCAnKCcpICE9IE5VTEwpIHx8IChz dHJjaHIodXNlciwgJyknKSAhPSBOVUxMKSB8fAotKyAgICAgICAgKHN0cmNocih1c2VyLCAn KicpICE9IE5VTEwpIHx8IChzdHJjaHIodXNlciwgJ1xcJykgIT0gTlVMTCkpCi0rICAgICAg ICByZXR1cm4gRkFJTFVSRTsKLSsKLSsgICAgLyogYnVpbGQgZmlsdGVyIGZvciBMREFQIHJl cXVlc3QgKi8KLSsgICAgUkVRVUVTVF9HUk9VUChmaWx0ZXIsIGwtPmZncm91cCwgdXNlcik7 Ci0rCi0rICAgIGlmIChsZGFwX3NlYXJjaF9zdCggbC0+bGQsIAotKyAgICAgICAgbC0+Z19i YXNlZG4sCi0rICAgICAgICBMREFQX1NDT1BFX1NVQlRSRUUsCi0rICAgICAgICBmaWx0ZXIs Ci0rICAgICAgICBOVUxMLCAwLCAmbC0+c190aW1lb3V0LCAmcmVzKSAhPSBMREFQX1NVQ0NF U1MpIHsKLSsgICAgCi0rICAgICAgICBsZGFwX3BlcnJvcihsLT5sZCwgImxkYXBfc2VhcmNo X3N0KCkiKTsKLSsKLSsgICAgICAgIGZyZWUoZmlsdGVyKTsKLSsKLSsgICAgICAgIC8qIFhY WCBlcnJvciBvbiBzZWFyY2gsIHRpbWVvdXQgZXRjLi4gY2xvc2UgYXNrIGZvciByZWNvbm5l Y3QgKi8KLSsgICAgICAgIGxkYXBfY2xvc2UobCk7Ci0rCi0rICAgICAgICByZXR1cm4gRkFJ TFVSRTsKLSsgICAgfQotKwotKyAgICBmcmVlKGZpbHRlcik7Ci0rCi0rICAgIC8qIGNoZWNr IGlmIGFueSByZXN1bHRzICovCi0rICAgIGlmIChsZGFwX2NvdW50X2VudHJpZXMobC0+bGQs IHJlcykgPiAwKSB7Ci0rICAgICAgICBsZGFwX21zZ2ZyZWUocmVzKTsKLSsgICAgICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rICAgIGxkYXBfbXNnZnJlZShyZXMpOwotKyAgICByZXR1 cm4gMDsKLSt9Ci0rCi0rLyoKLSsgKiBsZGFwLmNvbmYgc2ltcGxlIHBhcnNlcgotKyAqIFhY WCBUT0RPOiAgc2FuaXR5IGNoZWNrcwotKyAqIG11c3QgZWl0aGVyCi0rICogLSBmcmVlIHRo ZSBwcmV2aW91cyBsZGFwX29wdF9iZWZvcmUgcmVwbGFjaW5nIGVudHJpZXMKLSsgKiAtIGZy ZWUgZWFjaCBuZWNlc3NhcnkgcHJldmlvdXNseSBwYXJzZWQgZWxlbWVudHMKLSsgKiByZXQ6 Ci0rICogLTEgb24gRkFJTFVSRSwgMCBvbiBTVUNDRVNTCi0rICovCi0raW50IGxkYXBfcGFy c2VfbGNvbmYobGRhcF9vcHRfdCAqIGwpIHsKLSsgICAgRklMRSAqIGxjZDsgLyogbGRhcC5j b25mIGRlc2NyaXB0b3IgKi8KLSsgICAgY2hhciBidWZbQlVGU0laXTsKLSsgICAgY2hhciAq IHMgPSBOVUxMLCAqIGsgPSBOVUxMLCAqIHYgPSBOVUxMOwotKyAgICBpbnQgbGksIGxlbjsK LSsKLSsgICAgbGNkID0gZm9wZW4gKGwtPmxfY29uZiwgInIiKTsKLSsgICAgaWYgKGxjZCA9 PSBOVUxMKSB7Ci0rICAgICAgICAvKiBkZWJ1ZygiQ2Fubm90IG9wZW4gJXMiLCBsLT5sX2Nv bmYpOyAqLwotKyAgICAgICAgcGVycm9yKCJsZGFwX3BhcnNlX2xjb25mKCkiKTsKLSsgICAg ICAgIHJldHVybiBGQUlMVVJFOwotKyAgICB9Ci0rICAgIAotKyAgICB3aGlsZSAoZmdldHMg KGJ1Ziwgc2l6ZW9mIChidWYpLCBsY2QpICE9IE5VTEwpIHsKLSsKLSsgICAgICAgIGlmICgq YnVmID09ICdcbicgfHwgKmJ1ZiA9PSAnIycpCi0rICAgICAgICAgICAgY29udGludWU7Ci0r Ci0rICAgICAgICBrID0gYnVmOwotKyAgICAgICAgdiA9IGs7Ci0rICAgICAgICB3aGlsZSAo KnYgIT0gJ1wwJyAmJiAqdiAhPSAnICcgJiYgKnYgIT0gJ1x0JykKLSsgICAgICAgICAgICB2 Kys7Ci0rCi0rICAgICAgICBpZiAoKnYgPT0gJ1wwJykKLSsgICAgICAgICAgICBjb250aW51 ZTsKLSsKLSsgICAgICAgICoodisrKSA9ICdcMCc7Ci0rCi0rICAgICAgICB3aGlsZSAoKnYg PT0gJyAnIHx8ICp2ID09ICdcdCcpCi0rICAgICAgICAgICAgdisrOwotKwotKyAgICAgICAg bGkgPSBzdHJsZW4gKHYpIC0gMTsKLSsgICAgICAgIHdoaWxlICh2W2xpXSA9PSAnICcgfHwg dltsaV0gPT0gJ1x0JyB8fCB2W2xpXSA9PSAnXG4nKQotKyAgICAgICAgICAgIC0tbGk7Ci0r ICAgICAgICB2W2xpICsgMV0gPSAnXDAnOwotKwotKyAgICAgICAgaWYgKCFzdHJjYXNlY21w IChrLCAidXJpIikpIHsKLSsgICAgICAgICAgICBpZiAoKGwtPnNlcnZlcnMgPSBsZGFwX3Bh cnNlX3NlcnZlcnModikpID09IE5VTEwpIHsKLSsgICAgICAgICAgICAgICAgZmF0YWwoImVy cm9yIGluIGxkYXAgc2VydmVycyIpOwotKyAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOwot KyAgICAgICAgICAgIH0KLSsKLSsgICAgICAgIH0KLSsgICAgICAgIGVsc2UgaWYgKCFzdHJj YXNlY21wIChrLCAiYmFzZSIpKSB7IAotKyAgICAgICAgICAgIHMgPSBzdHJjaHIgKHYsICc/ Jyk7Ci0rICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgewotKyAgICAgICAgICAgICAgICBs ZW4gPSBzIC0gdjsKLSsgICAgICAgICAgICAgICAgbC0+dV9iYXNlZG4gPSBtYWxsb2MgKGxl biArIDEpOwotKyAgICAgICAgICAgICAgICBzdHJuY3B5IChsLT51X2Jhc2VkbiwgdiwgbGVu KTsKLSsgICAgICAgICAgICAgICAgbC0+dV9iYXNlZG5bbGVuXSA9ICdcMCc7Ci0rICAgICAg ICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICAgICAgbC0+dV9iYXNlZG4gPSBzdHJkdXAg KHYpOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAgIGVsc2UgaWYgKCFz dHJjYXNlY21wIChrLCAiYmluZGRuIikpIHsKLSsgICAgICAgICAgICBsLT5iaW5kZG4gPSBz dHJkdXAgKHYpOwotKyAgICAgICAgfQotKyAgICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAg KGssICJiaW5kcHciKSkgewotKyAgICAgICAgICAgIGwtPmJpbmRwdyA9IHN0cmR1cCAodik7 Ci0rICAgICAgICB9Ci0rICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcCAoaywgInRpbWVs aW1pdCIpKSB7Ci0rICAgICAgICAgICAgbC0+c190aW1lb3V0LnR2X3NlYyA9IGF0b2kgKHYp OwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICBlbHNlIGlmICghc3RyY2FzZWNtcCAo aywgImJpbmRfdGltZWxpbWl0IikpIHsKLSsgICAgICAgICAgICBsLT5iX3RpbWVvdXQudHZf c2VjID0gYXRvaSAodik7Ci0rICAgICAgICB9Ci0rICAgICAgICBlbHNlIGlmICghc3RyY2Fz ZWNtcCAoaywgInNzbCIpKSB7Ci0rICAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wICh2LCAi c3RhcnRfdGxzIikpCi0rICAgICAgICAgICAgICAgIGwtPnRscyA9IDE7Ci0rICAgICAgICB9 Ci0rICAgIH0KLSsKLSsgICAgZmNsb3NlIChsY2QpOwotKyAgICByZXR1cm4gU1VDQ0VTUzsK LSt9Ci0rCi0rI2VuZGlmIC8qIFdJVEhfTERBUF9QVUJLRVkgKi8KLWRpZmYgLU51YXIgLS1l eGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIGxkYXBhdXRoLmggbGRhcGF1dGgu aAotLS0tIGxkYXBhdXRoLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAK LSsrKyBsZGFwYXV0aC5oCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCi1A QCAtMCwwICsxLDEyNCBAQAotKy8qCi0rICogJElkOiBvcGVuc3NoLWxway00LjNwMS0wLjMu Ny5wYXRjaCx2IDEuMyAyMDA2LzA0LzE4IDE1OjI5OjA5IGVhdSBFeHAgJCAKLSsgKi8KLSsK LSsvKgotKyAqCi0rICogQ29weXJpZ2h0IChjKSAyMDA1LCBFcmljIEFVR0UgPGVhdUBwaGVh ci5vcmc+Ci0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsg KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogTmVpdGhl ciB0aGUgbmFtZSBvZiB0aGUgcGhlYXIub3JnIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCAKLSsgKiBCVVQgTk9U IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g Ci0rICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCAKLSsgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOyAKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIAotKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICoKLSsgKgotKyAqLwotKwotKyNpZm5kZWYgTERBUEFVVEhfSAotKyNkZWZpbmUgTERBUEFV VEhfSAotKwotKyNkZWZpbmUgTERBUF9ERVBSRUNBVEVEIDEKLSsKLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPHRpbWUuaD4KLSsjaW5jbHVkZSA8bGRhcC5oPgotKyNpbmNs dWRlIDxsYmVyLmg+Ci0rCi0rLyogdG9rZW5zIGluIHVzZSBmb3IgY29uZmlnICovCi0rI2Rl ZmluZSBfREVGQVVMVF9MUEtfVE9LRU4gIlVzZUxQSyIKLSsjZGVmaW5lIF9ERUZBVUxUX1NS Vl9UT0tFTiAiTHBrU2VydmVycyIKLSsjZGVmaW5lIF9ERUZBVUxUX1VTUl9UT0tFTiAiTHBr VXNlckROIgotKyNkZWZpbmUgX0RFRkFVTFRfR1JQX1RPS0VOICJMcGtHcm91cEROIgotKyNk ZWZpbmUgX0RFRkFVTFRfQkROX1RPS0VOICJMcGtCaW5kRE4iCi0rI2RlZmluZSBfREVGQVVM VF9CUFdfVE9LRU4gIkxwa0JpbmRQdyIKLSsjZGVmaW5lIF9ERUZBVUxUX01ZR19UT0tFTiAi THBrU2VydmVyR3JvdXAiCi0rI2RlZmluZSBfREVGQVVMVF9GSUxfVE9LRU4gIkxwa0ZpbHRl ciIKLSsjZGVmaW5lIF9ERUZBVUxUX1RMU19UT0tFTiAiTHBrRm9yY2VUTFMiCi0rI2RlZmlu ZSBfREVGQVVMVF9CVElfVE9LRU4gIkxwa0JpbmRUaW1lbGltaXQiCi0rI2RlZmluZSBfREVG QVVMVF9TVElfVE9LRU4gIkxwa1NlYXJjaFRpbWVsaW1pdCIKLSsjZGVmaW5lIF9ERUZBVUxU X0xEUF9UT0tFTiAiTHBrTGRhcENvbmYiCi0rCi0rLyogZGVmYXVsdCBvcHRpb25zICovCi0r I2RlZmluZSBfREVGQVVMVF9MUEtfT04gMAotKyNkZWZpbmUgX0RFRkFVTFRfTFBLX1NFUlZF UlMgTlVMTAotKyNkZWZpbmUgX0RFRkFVTFRfTFBLX1VETiBOVUxMCi0rI2RlZmluZSBfREVG QVVMVF9MUEtfR0ROIE5VTEwKLSsjZGVmaW5lIF9ERUZBVUxUX0xQS19CSU5ERE4gTlVMTAot KyNkZWZpbmUgX0RFRkFVTFRfTFBLX0JJTkRQVyBOVUxMCi0rI2RlZmluZSBfREVGQVVMVF9M UEtfU0dST1VQIE5VTEwKLSsjZGVmaW5lIF9ERUZBVUxUX0xQS19GSUxURVIgTlVMTAotKyNk ZWZpbmUgX0RFRkFVTFRfTFBLX1RMUyAtMQotKyNkZWZpbmUgX0RFRkFVTFRfTFBLX0JUSU1F T1VUIDEwCi0rI2RlZmluZSBfREVGQVVMVF9MUEtfU1RJTUVPVVQgMTAKLSsjZGVmaW5lIF9E RUZBVUxUX0xQS19MRFAgTlVMTAotKwotKy8qIGZsYWdzICovCi0rI2RlZmluZSBGTEFHX0VN UFRZCSAgICAweDAwMDAwMDAwCi0rI2RlZmluZSBGTEFHX0NPTk5FQ1RFRAkgICAgMHgwMDAw MDAwMQotKwotKy8qIGZsYWcgbWFjcm9zICovCi0rI2RlZmluZSBGTEFHX1NFVF9FTVBUWSh4 KQkJeCY9KEZMQUdfRU1QVFkpCi0rI2RlZmluZSBGTEFHX1NFVF9DT05ORUNURUQoeCkJCXh8 PShGTEFHX0NPTk5FQ1RFRCkKLSsjZGVmaW5lIEZMQUdfU0VUX0RJU0NPTk5FQ1RFRCh4KQl4 Jj1+KEZMQUdfQ09OTkVDVEVEKQotKwotKy8qIGRlZmluZXMgKi8KLSsjZGVmaW5lIEZBSUxV UkUgLTEKLSsjZGVmaW5lIFNVQ0NFU1MgMAotKyNkZWZpbmUgUFVCS0VZQVRUUiAic3NoUHVi bGljS2V5IgotKwotKy8qIAotKyAqCi0rICogZGVmaW5lZCBmaWxlcyBwYXRoIAotKyAqIChz aG91bGQgYmUgcmVsb2NhdGVkIHRvIHBhdGhuYW1lcy5oLAotKyAqIGlmIG9uZSBkYXkgaXQn cyBpbmNsdWRlZCB3aXRoaW4gdGhlIHRyZWUpIAotKyAqCi0rICovCi0rI2RlZmluZSBfUEFU SF9MREFQX0NPTkZJR19GSUxFICIvZXRjL2xkYXAuY29uZiIKLSsKLSsvKiBzdHJ1Y3R1cmVz ICovCi0rdHlwZWRlZiBzdHJ1Y3QgbGRhcF9vcHRpb25zIHsKLSsgICAgaW50IG9uOwkJCS8q IFVzZSBpdCBvciBOT1QgKi8KLSsgICAgTERBUCAqIGxkOwkJCS8qIExEQVAgZmlsZSBkZXNj ICovCi0rICAgIGNoYXIgKiBzZXJ2ZXJzOwkJLyogcGFyc2VkIHNlcnZlcnMgZm9yIGxkYXBs aWIgZmFpbG92ZXIgaGFuZGxpbmcgKi8KLSsgICAgY2hhciAqIHVfYmFzZWRuOwkJLyogdXNl ciBiYXNlZG4gKi8KLSsgICAgY2hhciAqIGdfYmFzZWRuOwkJLyogZ3JvdXAgYmFzZWRuICov Ci0rICAgIGNoYXIgKiBiaW5kZG47CQkvKiBiaW5kZG4gKi8KLSsgICAgY2hhciAqIGJpbmRw dzsJCS8qIGJpbmQgcGFzc3dvcmQgKi8KLSsgICAgY2hhciAqIHNncm91cDsJCS8qIHNlcnZl ciBncm91cCAqLwotKyAgICBjaGFyICogZmdyb3VwOwkJLyogZ3JvdXAgZmlsdGVyICovCi0r ICAgIGNoYXIgKiBmaWx0ZXI7CQkvKiBhZGRpdGlvbmFsIGZpbHRlciAqLwotKyAgICBjaGFy ICogbF9jb25mOwkJLyogdXNlIGxkYXAuY29uZiAqLwotKyAgICBpbnQgdGxzOwkJCS8qIFRM UyBvbmx5ICovCi0rICAgIHN0cnVjdCB0aW1ldmFsIGJfdGltZW91dDsgICAvKiBiaW5kIHRp bWVvdXQgKi8KLSsgICAgc3RydWN0IHRpbWV2YWwgc190aW1lb3V0OyAgIC8qIHNlYXJjaCB0 aW1lb3V0ICovCi0rICAgIHVuc2lnbmVkIGludCBmbGFnczsJCS8qIG1pc2MgZmxhZ3MgKHJl Y29ubmVjdGlvbiwgZnV0dXJlIHVzZT8pICovCi0rfSBsZGFwX29wdF90OwotKwotK3R5cGVk ZWYgc3RydWN0IGxkYXBfa2V5cyB7Ci0rICAgIHN0cnVjdCBiZXJ2YWwgKioga2V5czsJLyog dGhlIHB1YmxpYyBrZXlzIHJldHJpZXZlZCAqLwotKyAgICB1bnNpZ25lZCBpbnQgbnVtOwkJ LyogbnVtYmVyIG9mIGtleXMgKi8KLSt9IGxkYXBfa2V5X3Q7Ci0rCi0rCi0rLyogZnVuY3Rp b24gaGVhZGVycyAqLwotK3ZvaWQgbGRhcF9jbG9zZShsZGFwX29wdF90ICopOwotK2ludCBs ZGFwX2Nvbm5lY3QobGRhcF9vcHRfdCAqKTsKLStjaGFyICogbGRhcF9wYXJzZV9ncm91cHMo Y29uc3QgY2hhciAqKTsKLStjaGFyICogbGRhcF9wYXJzZV9zZXJ2ZXJzKGNvbnN0IGNoYXIg Kik7Ci0rdm9pZCBsZGFwX29wdGlvbnNfcHJpbnQobGRhcF9vcHRfdCAqKTsKLSt2b2lkIGxk YXBfb3B0aW9uc19mcmVlKGxkYXBfb3B0X3QgKik7Ci0rdm9pZCBsZGFwX2tleXNfZnJlZShs ZGFwX2tleV90ICopOwotK2ludCBsZGFwX3BhcnNlX2xjb25mKGxkYXBfb3B0X3QgKik7Ci0r bGRhcF9rZXlfdCAqIGxkYXBfZ2V0dXNlcmtleShsZGFwX29wdF90ICosIGNvbnN0IGNoYXIg Kik7Ci0raW50IGxkYXBfaXNtZW1iZXIobGRhcF9vcHRfdCAqLCBjb25zdCBjaGFyICopOwot KwotKyNlbmRpZgotZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcq LnJlaicgbHBrLXVzZXItZXhhbXBsZS50eHQgbHBrLXVzZXItZXhhbXBsZS50eHQKLS0tLSBs cGstdXNlci1leGFtcGxlLnR4dAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgw MAotKysrIGxway11c2VyLWV4YW1wbGUudHh0CTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAw MDAwIC0wNzAwCi1AQCAtMCwwICsxLDExNyBAQAotKwotK1Bvc3QgdG8gTUwgLT4gVXNlciBN YWRlIFF1aWNrIEluc3RhbGwgRG9jLgotK0NvbnRyaWJ1dGlvbiBmcm9tIEpvaG4gTGFuZSA8 am9obkBsYW5lLnVrLm5ldD4KLSsKLSsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0rCi0rT3Bl blNTSCBMREFQIGtleXN0b3JlIFBhdGNoCi0rPT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rCi0rTk9URTogdGhlc2Ugbm90ZXMgYXJlIGEgdHJhbnNjcmlwdCBvZiBhIHNwZWNpZmlj IGluc3RhbGxhdGlvbgotKyAgICAgIHRoZXkgd29yayBmb3IgbWUsIHlvdXIgc3BlY2lmaWNz IG1heSBiZSBkaWZmZXJlbnQhCi0rICAgICAgZnJvbSBKb2huIExhbmUgTWFyY2ggMTd0aCAy MDA1ICAgICAgICAgam9obkBsYW5lLnVrLm5ldAotKwotK1RoaXMgaXMgYSBwYXRjaCB0byBP cGVuU1NIIDQuMHAxIHRvIGFsbG93IGl0IHRvIG9idGFpbiB1c2VycycgcHVibGljIGtleXMK LStmcm9tIHRoZWlyIExEQVAgcmVjb3JkIGFzIGFuIGFsdGVybmF0aXZlIHRvIH4vLnNzaC9h dXRob3JpemVkX2tleXMuCi0rCi0rKEFzc3VtaW5nIGhlcmUgdGhhdCBuZWNlc3NhcnkgYnVp bGQgc3R1ZmYgaXMgaW4gJEJVSUxEKQotKwotK2NkICRCVUlMRC9vcGVuc3NoLTQuMHAxCi0r cGF0Y2ggLU5wMSAtaSAkQlVJTEQvb3BlbnNzaC1scGstNC4wcDEtMC4zLnBhdGNoCi0rbWtk aXIgLXAgL3Zhci9lbXB0eSAmJgotKy4vY29uZmlndXJlIC0tcHJlZml4PS91c3IgLS1zeXNj b25mZGlyPS9ldGMvc3NoIFwKLSsgICAgLS1saWJleGVjZGlyPS91c3Ivc2JpbiAtLXdpdGgt bWQ1LXBhc3N3b3JkcyAtLXdpdGgtcGFtIFwKLSsgICAgLS13aXRoLWxpYnM9Ii1sbGRhcCIg LS13aXRoLWNwcGZsYWdzPSItRFdJVEhfTERBUF9QVUJLRVkiCi0rTm93IGRvLgotK21ha2Ug JiYKLSttYWtlIGluc3RhbGwKLSsKLStBZGQgdGhlIGZvbGxvd2luZyBjb25maWcgdG8gL2V0 Yy9zc2gvc3NoX2NvbmZpZwotK1VzZUxQSyB5ZXMKLStMcGtTZXJ2ZXJzIGxkYXA6Ly9teWhv c3QubXlkb21haW4uY29tCi0rTHBrVXNlckROICBvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9 Y29tCi0rCi0rV2UgbmVlZCB0byB0ZWxsIHNzaGQgYWJvdXQgdGhlIFNTTCBrZXlzIGR1cmlu ZyBib290LCBhcyByb290J3MKLStlbnZpcm9ubWVudCBkb2VzIG5vdCBleGlzdCBhdCB0aGF0 IHRpbWUuIEVkaXQgL2V0Yy9yYy5kL2luaXQuZC9zc2hkLgotK0NoYW5nZSB0aGUgc3RhcnR1 cCBjb2RlIGZyb20gdGhpczoKLSsgICAgICAgICAgICAgICAgZWNobyAiU3RhcnRpbmcgU1NI IFNlcnZlci4uLiIKLSsgICAgICAgICAgICAgICAgbG9hZHByb2MgL3Vzci9zYmluL3NzaGQK LSsgICAgICAgICAgICAgICAgOzsKLSt0byB0aGlzOgotKyAgICAgICAgICAgICAgICBlY2hv ICJTdGFydGluZyBTU0ggU2VydmVyLi4uIgotKyAgICAgICAgICAgICAgICBMREFQUkM9Ii9y b290Ly5sZGFwcmMiIGxvYWRwcm9jIC91c3Ivc2Jpbi9zc2hkCi0rICAgICAgICAgICAgICAg IDs7Ci0rCi0rUmUtc3RhcnQgdGhlIHNzaGQgZGFlbW9uOgotKy9ldGMvcmMuZC9pbml0LmQv c3NoZCByZXN0YXJ0Ci0rCi0rSW5zdGFsbCB0aGUgYWRkaXRpb25hbCBMREFQIHNjaGVtYQot K2NwICRCVUlMRC9vcGVuc3NoLWxway0wLjIuc2NoZW1hICAvZXRjL29wZW5sZGFwL3NjaGVt YS9vcGVuc3NoLnNjaGVtYQotKwotK05vdyBhZGQgdGhlIG9wZW5TU0ggTERBUCBzY2hlbWEg dG8gL2V0Yy9vcGVubGRhcC9zbGFwZC5jb25mOgotK0FkZCB0aGUgZm9sbG93aW5nIHRvIHRo ZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGJsb2NrIG9mIHNjaGVtYSBpbmNsdWRlcwotK2luY2x1 ZGUgICAgICAgICAvZXRjL29wZW5sZGFwL3NjaGVtYS9vcGVuc3NoLnNjaGVtYQotKwotK1Jl LXN0YXJ0IHRoZSBMREFQIHNlcnZlcjoKLSsvZXRjL3JjLmQvaW5pdC5kL3NsYXBkIHJlc3Rh cnQKLSsKLStUbyBhZGQgb25lIG9yIG1vcmUgcHVibGljIGtleXMgdG8gYSB1c2VyLCBlZyAi dGVzdHVzZXIiIDoKLStsZGFwc2VhcmNoIC14IC1XIC1aIC1MTEwgLWIgInVpZD10ZXN0dXNl cixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIiAtRAotKyJ1aWQ9dGVzdHVzZXIsb3U9 UGVvcGxlLGRjPW15ZG9tYWluLGRjPWNvbSIgPiAvdG1wL3Rlc3R1c2VyCi0rCi0rYXBwZW5k IHRoZSBmb2xsb3dpbmcgdG8gdGhpcyAvdG1wL3Rlc3R1c2VyIGZpbGUKLStvYmplY3RjbGFz czogbGRhcFB1YmxpY0tleQotK3NzaFB1YmxpY0tleTogc3NoLXJzYQotK0FBQUFCM056YUMx eWMyRUFBQUFCSlFBQUFJQjNkc3J3cVhxRDdFNHpZWXJ4d2RES0JVUXhLTWlvWHk5cHhGVmFp NjRrQVB4alU5S1MKLStxSW83UWZranNsZnNqZmxrc2pmbGRma2pzbGRmakxYLzV6a3pSbVQy OEk1cGlHenVuUHYxN1M4OXo4WHdTc3VBb1IxdDg2dCs1ZGxJCi0rN2VaRS9nVmJuMlVRa1Fx NytrZERUUzJ5WFY2Vm5DNTJOL2tLTEczY2lCa0JBdz09IEdlbmVyYWwgUHVycG9zZSBSU0Eg S2V5Ci0rCi0rVGhlbiBkbyBhIG1vZGlmeToKLStsZGFwbW9kaWZ5IC14IC1EICJ1aWQ9dGVz dHVzZXIsb3U9UGVvcGxlLGRjPW15ZG9tYWluLGRjPWNvbSIgLVcgLWYKLSsvdG1wL3Rlc3R1 c2VyIC1aCi0rRW50ZXIgTERBUCBQYXNzd29yZDoKLSttb2RpZnlpbmcgZW50cnkgInVpZD10 ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIgotK0FuZCBjaGVjayB0aGUg bW9kaWZ5IGlzIG9rOgotK2xkYXBzZWFyY2ggLXggLVcgLVogLWIgInVpZD10ZXN0dXNlcixv dT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIiAtRAotKyJ1aWQ9dGVzdHVzZXIsb3U9UGVv cGxlLGRjPW15ZG9tYWluLGRjPWNvbSIKLStFbnRlciBMREFQIFBhc3N3b3JkOgotKyMgZXh0 ZW5kZWQgTERJRgotKyMKLSsjIExEQVB2MwotKyMgYmFzZSA8dWlkPXRlc3R1c2VyLG91PVBl b3BsZSxkYz1teWRvbWFpbixkYz1jb20+IHdpdGggc2NvcGUgc3ViCi0rIyBmaWx0ZXI6IChv YmplY3RjbGFzcz0qKQotKyMgcmVxdWVzdGluZzogQUxMCi0rIwotKwotKyMgdGVzdHVzZXIs IFBlb3BsZSwgbXlkb21haW4uY29tCi0rZG46IHVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9 bXlkb21haW4sZGM9Y29tCi0rdWlkOiB0ZXN0dXNlcgotK2NuOiB0ZXN0dXNlcgotK29iamVj dENsYXNzOiBhY2NvdW50Ci0rb2JqZWN0Q2xhc3M6IHBvc2l4QWNjb3VudAotK29iamVjdENs YXNzOiB0b3AKLStvYmplY3RDbGFzczogc2hhZG93QWNjb3VudAotK29iamVjdENsYXNzOiBs ZGFwUHVibGljS2V5Ci0rc2hhZG93TGFzdENoYW5nZTogMTI3NTcKLStzaGFkb3dNYXg6IDk5 OTk5Ci0rc2hhZG93V2FybmluZzogNwotK2xvZ2luU2hlbGw6IC9iaW4vYmFzaAotK3VpZE51 bWJlcjogOTk5OQotK2dpZE51bWJlcjogNTAxCi0raG9tZURpcmVjdG9yeTogL2hvbWUvdGVz dHVzZXIKLSt1c2VyUGFzc3dvcmQ6OiBlMU5UU0VGOVVEZ3dWMWhuTTFWalVEUkpLMGsxWW5G aUwxZDRaVUpPYlhsWlozWjNVVFU9Ci0rc3NoUHVibGljS2V5OiBzc2gtcnNhCi0rQUFBQUIz TnphQzF5YzJFQUFBQUJKUUFBQUlCM2RzcndxWHFEN0U0ellZcnh3ZERLQlVReEtNaW9YeTlw eEZWYWk2NGtBUHhqVTlLU3FJbzdRZmtqc2xmc2pmbGtzamZsZGZranNsZGZqTFgvNXprelJt VDI4STVwaUd6dW5QdjE3Uzg5egotKzhYd1NzdUFvUjF0ODZ0KzVkbEk3ZVpFL2dWYm4yVVFr UXE3K2tkRFRTMnlYVjZWbkM1Mk4va0tMRzNjaUJrQkF3PT0gR2VuZXJhbCBQdXJwb3NlIFJT QSBLZXkKLSsKLSsjIHNlYXJjaCByZXN1bHQKLStzZWFyY2g6IDMKLStyZXN1bHQ6IDAgU3Vj Y2VzcwotKwotKyMgbnVtUmVzcG9uc2VzOiAyCi0rIyBudW1FbnRyaWVzOiAxCi0rCi0rTm93 IHN0YXJ0IGEgc3NoIHNlc3Npb24gdG8gdXNlciAidGVzdHVzZXIiIGZyb20gdXN1YWwgc3No IGNsaWVudCAoZS5nLgotK3B1VFRZKS4gTG9naW4gc2hvdWxkIHN1Y2NlZWQuCi0rCi0rKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwotZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1l eGNsdWRlICcqLnJlaicgTWFrZWZpbGUuaW4gTWFrZWZpbGUuaW4KLS0tLSBNYWtlZmlsZS5p bgkyMDA4LTA3LTA4IDA3OjIxOjEyLjAwMDAwMDAwMCAtMDcwMAotKysrIE1ha2VmaWxlLmlu CTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCi1AQCAtODYsNyArODYsNyBA QAotIAlhdXRoLWtyYjUubyBcCi0gCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYt a3JiNS5vIFwKLSAJbG9naW5yZWMubyBhdXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0aC1z aWEubyBtZDVjcnlwdC5vIFwKLS0JYXVkaXQubyBhdWRpdC1ic20ubyBwbGF0Zm9ybS5vIHNm dHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubwotKwlhdWRpdC5vIGF1ZGl0LWJzbS5vIHBsYXRm b3JtLm8gbGRhcGF1dGgubyBzZnRwLXNlcnZlci5vIHNmdHAtY29tbW9uLm8KLSAKLSBNQU5Q QUdFUwk9IG1vZHVsaS41Lm91dCBzY3AuMS5vdXQgc3NoLWFkZC4xLm91dCBzc2gtYWdlbnQu MS5vdXQgc3NoLWtleWdlbi4xLm91dCBzc2gta2V5c2Nhbi4xLm91dCBzc2guMS5vdXQgc3No ZC44Lm91dCBzZnRwLXNlcnZlci44Lm91dCBzZnRwLjEub3V0IHNzaC1yYW5kLWhlbHBlci44 Lm91dCBzc2gta2V5c2lnbi44Lm91dCBzc2hkX2NvbmZpZy41Lm91dCBzc2hfY29uZmlnLjUu b3V0Ci0gTUFOUEFHRVNfSU4JPSBtb2R1bGkuNSBzY3AuMSBzc2gtYWRkLjEgc3NoLWFnZW50 LjEgc3NoLWtleWdlbi4xIHNzaC1rZXlzY2FuLjEgc3NoLjEgc3NoZC44IHNmdHAtc2VydmVy Ljggc2Z0cC4xIHNzaC1yYW5kLWhlbHBlci44IHNzaC1rZXlzaWduLjggc3NoZF9jb25maWcu NSBzc2hfY29uZmlnLjUKLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVk ZSAnKi5yZWonIG9wZW5zc2gtbHBrX29wZW5sZGFwLnNjaGVtYSBvcGVuc3NoLWxwa19vcGVu bGRhcC5zY2hlbWEKLS0tLSBvcGVuc3NoLWxwa19vcGVubGRhcC5zY2hlbWEJMTk2OS0xMi0z MSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKLSsrKyBvcGVuc3NoLWxwa19vcGVubGRhcC5z Y2hlbWEJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKLUBAIC0wLDAgKzEs MTkgQEAKLSsjCi0rIyBMREFQIFB1YmxpYyBLZXkgUGF0Y2ggc2NoZW1hIGZvciB1c2Ugd2l0 aCBvcGVuc3NoLWxkYXBwdWJrZXkKLSsjIEF1dGhvcjogRXJpYyBBVUdFIDxlYXVAcGhlYXIu b3JnPgotKyMgCi0rIyBCYXNlZCBvbiB0aGUgcHJvcG9zYWwgb2YgOiBNYXJrIFJ1aWp0ZXIK LSsjCi0rCi0rCi0rIyBvY3RldFN0cmluZyBTWU5UQVgKLSthdHRyaWJ1dGV0eXBlICggMS4z LjYuMS40LjEuMjQ1NTIuNTAwLjEuMS4xLjEzIE5BTUUgJ3NzaFB1YmxpY0tleScgCi0rCURF U0MgJ01BTkRBVE9SWTogT3BlblNTSCBQdWJsaWMga2V5JyAKLSsJRVFVQUxJVFkgb2N0ZXRT dHJpbmdNYXRjaAotKwlTWU5UQVggMS4zLjYuMS40LjEuMTQ2Ni4xMTUuMTIxLjEuNDAgKQot KwotKyMgcHJpbnRhYmxlU3RyaW5nIFNZTlRBWCB5ZXN8bm8KLStvYmplY3RjbGFzcyAoIDEu My42LjEuNC4xLjI0NTUyLjUwMC4xLjEuMi4wIE5BTUUgJ2xkYXBQdWJsaWNLZXknIFNVUCB0 b3AgQVVYSUxJQVJZCi0rCURFU0MgJ01BTkRBVE9SWTogT3BlblNTSCBMUEsgb2JqZWN0Y2xh c3MnCi0rCU1VU1QgKCBzc2hQdWJsaWNLZXkgJCB1aWQgKSAKLSsJKQotZGlmZiAtTnVhciAt LWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgb3BlbnNzaC1scGtfc3VuLnNj aGVtYSBvcGVuc3NoLWxwa19zdW4uc2NoZW1hCi0tLS0gb3BlbnNzaC1scGtfc3VuLnNjaGVt YQkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAotKysrIG9wZW5zc2gtbHBr X3N1bi5zY2hlbWEJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKLUBAIC0w LDAgKzEsMjEgQEAKLSsjCi0rIyBMREFQIFB1YmxpYyBLZXkgUGF0Y2ggc2NoZW1hIGZvciB1 c2Ugd2l0aCBvcGVuc3NoLWxkYXBwdWJrZXkKLSsjIEF1dGhvcjogRXJpYyBBVUdFIDxlYXVA cGhlYXIub3JnPgotKyMgCi0rIyBTY2hlbWEgZm9yIFN1biBEaXJlY3RvcnkgU2VydmVyLgot KyMgQmFzZWQgb24gdGhlIG9yaWdpbmFsIHNjaGVtYSwgbW9kaWZpZWQgYnkgU3RlZmFuIEZp c2NoZXIuCi0rIwotKwotK2RuOiBjbj1zY2hlbWEKLSsKLSsjIG9jdGV0U3RyaW5nIFNZTlRB WAotK2F0dHJpYnV0ZVR5cGVzOiAoIDEuMy42LjEuNC4xLjI0NTUyLjUwMC4xLjEuMS4xMyBO QU1FICdzc2hQdWJsaWNLZXknIAotKwlERVNDICdNQU5EQVRPUlk6IE9wZW5TU0ggUHVibGlj IGtleScgCi0rCUVRVUFMSVRZIG9jdGV0U3RyaW5nTWF0Y2gKLSsJU1lOVEFYIDEuMy42LjEu NC4xLjE0NjYuMTE1LjEyMS4xLjQwICkKLSsKLSsjIHByaW50YWJsZVN0cmluZyBTWU5UQVgg eWVzfG5vCi0rb2JqZWN0Q2xhc3NlczogKCAxLjMuNi4xLjQuMS4yNDU1Mi41MDAuMS4xLjIu MCBOQU1FICdsZGFwUHVibGljS2V5JyBTVVAgdG9wIEFVWElMSUFSWQotKwlERVNDICdNQU5E QVRPUlk6IE9wZW5TU0ggTFBLIG9iamVjdGNsYXNzJwotKwlNVVNUICggc3NoUHVibGljS2V5 ICQgdWlkICkgCi0rCSkKLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVk ZSAnKi5yZWonIFJFQURNRS5scGsgUkVBRE1FLmxwawotLS0tIFJFQURNRS5scGsJMTk2OS0x Mi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKLSsrKyBSRUFETUUubHBrCTIwMDgtMDgt MjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMCwwICsxLDI2NyBAQAotK09wZW5T U0ggTERBUCBQVUJMSUMgS0VZIFBBVENIIAotK0NvcHlyaWdodCAoYykgMjAwMyBFcmljIEFV R0UgKGVhdUBwaGVhci5vcmcpCi0rQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsKLStSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSttb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSthcmUgbWV0OgotKzEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgotKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCi0rMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8g ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0rICAgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0rCi0r VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQg QU5ZIEVYUFJFU1MgT1IKLStJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0rT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4KLStJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsCi0rSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLAotK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSsoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YKLStUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKwotK3B1cnBvc2VzIG9mIHRoaXMgcGF0Y2g6Ci0rCi0r VGhpcyBwYXRjaCB3b3VsZCBoZWxwIHRvIGhhdmUgYXV0aGVudGljYXRpb24gY2VudHJhbGl6 YXRpb24gcG9saWN5Ci0rdXNpbmcgc3NoIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24uCi0r VGhpcyBwYXRjaCBjb3VsZCBiZSBhbiBhbHRlcm5hdGl2ZSB0byBvdGhlciAic2VjdXJlIiBh dXRoZW50aWNhdGlvbiBzeXN0ZW0KLSt3b3JraW5nIGluIGEgc2ltaWxhciB3YXkgKEtlcmJl cm9zLCBTZWN1cklELCBldGMuLi4pLCBleGNlcHQgdGhlIGZhY3QgCi0rdGhhdCBpdCdzIGJh c2VkIG9uIE9wZW5TU0ggYW5kIGl0cyBwdWJsaWMga2V5IGFiaWxpdGllcy4KLSsKLSs+PiBG WUk6IDw8Ci0rJ3VpZCc6IG1lYW5zIHVuaXggYWNjb3VudHMgZXhpc3Rpbmcgb24gdGhlIGN1 cnJlbnQgc2VydmVyCi0rJ2xwa1NlcnZlckdyb3VwOicgbWVhbiBzZXJ2ZXIgZ3JvdXAgY29u ZmlndXJlZCBvbiB0aGUgY3VycmVudCBzZXJ2ZXIgKCdscGtTZXJ2ZXJHcm91cCcgaW4gc3No ZF9jb25maWcpCi0rCi0rZXhhbXBsZSBzY2hlbWE6Ci0rCi0rCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlcnZlcjEgKHVpZDogZWF1LHJpdmFsLHRvdG8pIChscGtT ZXJ2ZXJHcm91cDogdW5peCkKLSsgICAgICAgICAgICAgICAgX19fX19fX19fX18gICAgICAv Ci0rICAgICAgICAgICAgICAgLyAgICAgICAgICAgXCAtLS0gLSBzZXJ2ZXIzICh1aWQ6IGVh dSwgdGl0aSkgKGxwa1NlcnZlckdyb3VwOiB1bml4KQotKyAgICAgICAgICAgICAgfCBMREFQ IFNlcnZlciB8ICAgIFwKLSsJICAgICAgfCBlYXUgICxyaXZhbCB8ICAgICBzZXJ2ZXIyICh1 aWQ6IHJpdmFsLCBlYXUpIChscGtTZXJ2ZXJHcm91cDogdW5peCkKLSsJICAgICAgfCB0aXRp ICx0b3RvICB8Ci0rCSAgICAgIHwgdXNlcngsLi4uLiAgfCAgICAgICAgIHNlcnZlcjUgKHVp ZDogZWF1KSAgKGxwa1NlcnZlckdyb3VwOiBtYWlsKQotKyAgICAgICAgICAgICAgIFxfX19f X19fX19fXy8gXCAgICAgICAvCi0rCSAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gLSBz ZXJ2ZXI0ICh1aWQ6IGVhdSwgcml2YWwpICAobm8gZ3JvdXAgY29uZmlndXJlZCkKLSsJCQkg ICAgICAgICAgICAgXAotKwkJCQkgICAgICAgIGV0Yy4uLgotKwotKy0gV0hBVCBXRSBORUVE IDoKLSsKLSsgICogY29uZmlndXJlZCBMREFQIHNlcnZlciBzb21ld2hlcmUgb24gdGhlIG5l dHdvcmsgKGkuZS4gT3BlbkxEQVApCi0rICAqIHBhdGNoZWQgc3NoZCAod2l0aCB0aGlzIHBh dGNoIDspCi0rICAqIExEQVAgdXNlcigvZ3JvdXApIGVudHJ5IChsb29rIGF0IHVzZXJzLmxk aWYgKCYgZ3JvdXBzLmxkaWYpKToKLSsgICAgICAgIFVzZXIgZW50cnk6Ci0rCS0gYXR0YWNo ZWQgdG8gdGhlICdsZGFwUHVibGljS2V5JyBvYmplY3RjbGFzcwotKwktIGF0dGFjaGVkIHRv IHRoZSAncG9zaXhBY2NvdW50JyBvYmplY3RjbGFzcwotKwktIHdpdGggYSBmaWxsZWQgJ3Nz aFB1YmxpY0tleScgYXR0cmlidXRlIAotKwlFeGFtcGxlOgotKwkJZG46IHVpZD1lYXUsb3U9 dXNlcnMsZGM9Y3Vja29vcyxkYz1uZXQKLSsJCW9iamVjdGNsYXNzOiB0b3AKLSsJCW9iamVj dGNsYXNzOiBwZXJzb24KLSsJCW9iamVjdGNsYXNzOiBvcmdhbml6YXRpb25hbFBlcnNvbgot KwkJb2JqZWN0Y2xhc3M6IHBvc2l4QWNjb3VudAotKwkJb2JqZWN0Y2xhc3M6IGxkYXBQdWJs aWNLZXkKLSsJCWRlc2NyaXB0aW9uOiBFcmljIEFVR0UgQWNjb3VudAotKwkJdXNlclBhc3N3 b3JkOiBibGFoCi0rCQljbjogRXJpYyBBVUdFCi0rCQlzbjogRXJpYyBBVUdFCi0rCQl1aWQ6 IGVhdQotKwkJdWlkTnVtYmVyOiAxMDM0Ci0rCQlnaWROdW1iZXI6IDEKLSsJCWhvbWVEaXJl Y3Rvcnk6IC9leHBvcnQvaG9tZS9lYXUKLSsJCXNzaFB1YmxpY0tleTogc3NoLWRzcyBBQUFB QjMuLi4KLSsJCXNzaFB1YmxpY0tleTogc3NoLWRzcyBBQUFBTTUuLi4KLSsKLSsJR3JvdXAg ZW50cnk6Ci0rCS0gYXR0YWNoZWQgdG8gdGhlICdwb3NpeEdyb3VwJyBvYmplY3RjbGFzcwot KwktIHdpdGggYSAnY24nIGdyb3VwbmFtZSBhdHRyaWJ1dGUKLSsJLSB3aXRoIG11bHRpcGxl ICdtZW1iZXJVaWQnIGF0dHJpYnV0ZXMgZmlsbGVkIHdpdGggdXNlcm5hbWVzIGFsbG93ZWQg aW4gdGhpcyBncm91cAotKwlFeGFtcGxlOgotKwkJIyBmZXcgbWVtYmVycwotKwkJZG46IGNu PXVuaXgsb3U9Z3JvdXBzLGRjPWN1Y2tvb3MsZGM9bmV0Ci0rCQlvYmplY3RjbGFzczogdG9w Ci0rCQlvYmplY3RjbGFzczogcG9zaXhHcm91cAotKwkJZGVzY3JpcHRpb246IFVuaXggYmFz ZWQgc2VydmVycyBncm91cAotKwkJY246IHVuaXgKLSsJCWdpZE51bWJlcjogMTAwMgotKwkJ bWVtYmVyVWlkOiBlYXUKLSsJCW1lbWJlclVpZDogdXNlcjEKLSsJCW1lbWJlclVpZDogdXNl cjIKLSsKLSsKLSstIEhPVyBJVCBXT1JLUyA6Ci0rCi0rICAqIHdpdGhvdXQgcGF0Y2gKLSsg IElmIGEgdXNlciB3YW50cyB0byBhdXRoZW50aWNhdGUgdG8gbG9nIGluIGEgc2VydmVyIHRo ZSBzc2hkLCB3aWxsIGZpcnN0IGxvb2sgZm9yIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhbGxv d2VkIChSU0FhdXRoLGtlcmJlcm9zLGV0Yy4uKQotKyAgYW5kIGlmIFJTQWF1dGggYW5kIHRp Y2tldHMgYmFzZWQgYXV0aCBmYWlscywgaXQgd2lsbCBmYWxsYmFjayB0byBzdGFuZGFyZCBw YXNzd29yZCBhdXRoZW50aWNhdGlvbiAoaWYgZW5hYmxlZCkuCi0rCi0rICAqIHdpdGggdGhl IHBhdGNoCi0rICBJZiBhIHVzZXIgd2FudCB0byBhdXRoZW50aWNhdGUgdG8gbG9nIGluIGEg c2VydmVyLCB0aGUgc3NoZCB3aWxsIGZpcnN0IGxvb2sgZm9yIGF1dGggbWV0aG9kIGluY2x1 ZGluZyBMREFQIHB1YmtleSwgaWYgdGhlIGxkYXBwdWJrZXkgb3B0aW9ucyBpcyBlbmFibGVk LgotKyAgSXQgd2lsbCBkbyBhbiBsZGFwc2VhcmNoIHRvIGdldCB0aGUgcHVibGljIGtleSBk aXJlY3RseSBmcm9tIHRoZSBMREFQIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tIHRoZSBz ZXJ2ZXIgZmlsZXN5c3RlbS4gCi0rICAodXN1YWxseSBpbiAkSE9NRS8uc3NoL2F1dGhvcml6 ZWRfa2V5cykKLSsKLSsgIElmIGdyb3VwcyBhcmUgZW5hYmxlZCwgaXQgd2lsbCBhbHNvIGNo ZWNrIGlmIHRoZSB1c2VyIHRoYXQgd2FudHMgdG8gbG9naW4gaXMgaW4gdGhlIGdyb3VwIG9m IHRoZSBzZXJ2ZXIgaGUgaXMgdHJ5aW5nIHRvIGxvZyBpbnRvLgotKyAgSWYgaXQgZmFpbHMs IGl0IGZhbGxzIGJhY2sgb24gUlNBIGF1dGggZmlsZXMgKCRIT01FLy5zc2gvYXV0aG9yaXpl ZF9rZXlzKSwgZXRjLi4gYW5kIGZpbmFsbHkgdG8gc3RhbmRhcmQgcGFzc3dvcmQgYXV0aGVu dGljYXRpb24gKGlmIGVuYWJsZWQpLgotKwotKyAgNyB0b2tlbnMgYXJlIGFkZGVkIHRvIHNz aGRfY29uZmlnIDoKLSsgICMgaGVyZSBpcyB0aGUgbmV3IHBhdGNoZWQgbGRhcCByZWxhdGVk IHRva2VucwotKyAgIyBlbnRyaWVzIGluIHlvdXIgTERBUCBtdXN0IGJlIHBvc2l4QWNjb3Vu dCAmIHN0cm9uZ0F1dGhlbnRpY2F0aW9uVXNlciAmIHBvc2l4R3JvdXAKLSsgIFVzZUxQSyB5 ZXMJCQkJCQkJCSMgbG9vayB0aGUgcHViIGtleSBpbnRvIExEQVAKLSsgIExwa1NlcnZlcnMg bGRhcDovLzEwLjMxLjMyLjUvIGxkYXA6Ly8xMC4zMS4zMi40IGxkYXA6Ly8xMC4zMS4zMi4z CSMgd2hpY2ggTERBUCBzZXJ2ZXIgZm9yIHVzZXJzID8gKFVSTCBmb3JtYXQpCi0rICBMcGtV c2VyRE4gIG91PXVzZXJzLGRjPWZvb2JhcixkYz1uZXQJCQkJCSMgd2hpY2ggYmFzZSBETiBm b3IgdXNlcnMgPwotKyAgTHBrR3JvdXBETiBvdT1ncm91cHMsZGM9Zm9vYmFyLGRjPW5ldAkJ CQkJIyB3aGljaCBiYXNlIEROIGZvciBncm91cHMgPyAKLSsgIExwa0JpbmRETiBjbj1tYW5h Z2VyLGRjPWZvb2JhcixkYz1uZXQJCQkJCSMgd2hpY2ggYmluZCBETiA/Ci0rICBMcGtCaW5k UHcgYXNlY3JldAkJCQkJCQkjIGJpbmQgRE4gY3JlZGlkZW50aWFscwotKyAgTHBrU2VydmVy R3JvdXAgYWdyb3VwbmFtZQkJCQkJCSMgdGhlIGdyb3VwIHRoZSBzZXJ2ZXIgaXMgcGFydCBv ZgotKwotKyAgUmlnaHQgbm93IGknbSB1c2luZyBhbm9ueW1vdXMgYmluZGluZyB0byBnZXQg cHVibGljIGtleXMsIGJlY2F1c2UgZ2V0dGluZyBwdWJsaWMga2V5cyBvZiBzb21lb25lIGRv ZXNuJ3QgaW1wZXJzb25hdGUgaGltuCBidXQgdGhlcmUgaXMgc29tZQotKyAgZmxhd3MgeW91 IGhhdmUgdG8gdGFrZSBjYXJlIG9mLgotKwotKy0gSE9XIFRPIElOU0VSVCBBIFVTRVIvS0VZ IElOVE8gQU4gTERBUCBFTlRSWQotKwotKyAgKiBteSB3YXkgKHRoZXJlIGlzIHBsZW50eSA6 KQotKyAgLSBjcmVhdGUgbGRpZiBmaWxlIChpLmUuIHVzZXJzLmxkaWYpCi0rICAtIGNhdCB+ Ly5zc2gvaWRfZHNhLnB1YiBPUiBjYXQgfi8uc3NoL2lkX3JzYS5wdWIgT1IgY2F0IH4vLnNz aC9pZGVudGl0eS5wdWIKLSsgIC0gbXkgd2F5IGluIDQgc3RlcHMgOgotKyAgRXhhbXBsZToK LSsKLSsgICMgeW91IGFkZCB0aGlzIHRvIHRoZSB1c2VyIGVudHJ5IGluIHRoZSBMRElGIGZp bGUgOgotKyAgWy4uLl0KLSsgIG9iamVjdGNsYXNzOiBwb3NpeEFjY291bnQKLSsgIG9iamVj dGNsYXNzOiBsZGFwUHVibGljS2V5Ci0rICBbLi4uXQotKyAgc3NoUHVibGlLZXk6IHNzaC1k c3MgQUFBQUJEaDEyRERVUjIuLi4KLSsgIFsuLi5dCi0rCi0rICAjIGluc2VydCB5b3VyIGVu dHJ5IGFuZCB5b3UncmUgZG9uZSA6KQotKyAgbGRhcGFkZCAtRCBiYWxibGFibGEgLXcgYmxl aCA8IGZpbGUubGRpZiAKLSsgIAotKyAgYWxsIHN0YW5kYXJkIG9wdGlvbnMgY2FuIGJlIHBy ZXNlbnQgaW4gdGhlICdzc2hQdWJsaWNLZXknIGF0dHJpYnV0ZS4KLSsKLSstIFdIWSA6Ci0r Ci0rICBTaW1wbHkgYmVjYXVzZSwgaSB3YXMgbG9va2luZyBmb3IgYSB3YXkgdG8gY2VudHJh bGl6ZSBhbGwgc3lzYWRtaW5zIGF1dGhlbnRpY2F0aW9uLCBlYXNpbHksICB3aXRob3V0IGNv bXBsZXRlbHkgdXNpbmcgTERBUCAKLSsgIGFzIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAobGlr ZSBwYW1fbGRhcCBldGMuLikuICAKLSsgIAotKyAgQWZ0ZXIgbG9va2luZyBpbnRvIEtlcmJl cm9zLCBTZWN1cklELCBhbmQgb3RoZXIgY2VudHJhbGl6ZWQgc2VjdXJlIGF1dGhlbnRpY2F0 aW9ucyBzeXN0ZW1zLCB0aGUgdXNlIG9mIFJTQSBhbmQgTERBUCB0byBnZXQgCi0rICBwdWJs aWMga2V5IGZvciBhdXRoZW50aWNhdGlvbiBhbGxvd3MgdXMgdG8gY29udHJvbCB3aG8gaGFz IGFjY2VzcyB0byB3aGljaCBzZXJ2ZXIgKHRoZSB1c2VyIG5lZWRzIGFuIGFjY291bnQgYW5k IHRvIGJlIGluICdzdHJvbmdBdXRoZW50aWNhdGlvblVzZXInCi0rICBvYmplY3RjbGFzcyB3 aXRoaW4gTERBUCBhbmQgcGFydCBvZiB0aGUgZ3JvdXAgdGhlIFNTSCBzZXJ2ZXIgaXMgaW4p LiAKLSsKLSsgIFBhc3N3b3JkcyB1cGRhdGUgYXJlIG5vIGxvbmdlciBhIG5pZ2h0bWFyZSBm b3IgYSBzZXJ2ZXIgZmFybSAoa2V5IHBhaXIgcGFzc3BocmFzZSBpcyBzdG9yZWQgb24gZWFj aCB1c2VyJ3MgYm94IGFuZCBwcml2YXRlIGtleSBpcyBsb2NhbGx5IGVuY3J5cHRlZCB1c2lu ZyBoaXMgcGFzc3BocmFzZSAKLSsgIHNvIGVhY2ggdXNlciBjYW4gY2hhbmdlIGl0IGFzIG11 Y2ggYXMgaGUgd2FudHMpLiAKLSsKLSsgIEJsb2NraW5nIGEgdXNlciBhY2NvdW50IGNhbiBi ZSBkb25lIGRpcmVjdGx5IGZyb20gdGhlIExEQVAgKGlmIHNzaGQgaXMgdXNpbmcgUlNBQXV0 aCArIGxkYXAgb25seSkuCi0rCi0rLSBSVUxFUyA6ICAKLSsgIEVudHJ5IGluIHRoZSBMREFQ IHNlcnZlciBtdXN0IHJlc3BlY3QgJ3Bvc2l4QWNjb3VudCcgYW5kICdsZGFwUHVibGljS2V5 JyB3aGljaCBhcmUgZGVmaW5lZCBpbiBjb3JlLnNjaGVtYS4gCi0rICBhbmQgdGhlIGFkZGl0 aW9ubmFsIGxway5zY2hlbWEuCi0rCi0rICBUaGlzIHBhdGNoIGNvdWxkIGFsbG93IGEgc21v b3RoIHRyYW5zaXRpb24gYmV0d2VlbiBzdGFuZGFyZCBhdXRoICgvZXRjL3Bhc3N3ZCkgYW5k IGNvbXBsZXRlIExEQVAgYmFzZWQgYXV0aGVudGljYXRpb24gCi0rICAocGFtbGRhcCwgbnNz X2xkYXAsIGV0Yy4uKS4KLSsKLSsgIFRoaXMgY2FuIGJlIGFuIGFsdGVybmF0aXZlIHRvIG90 aGVyIChvbGQ/L2V4cGVuc2l2ZT8pIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKEtlcmJlcm9z L1NlY3VySUQvLi4pLgotKyAgCi0rICBSZWZlcnJpbmcgdG8gc2NoZW1hIGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhpcyBmaWxlIGlmIHVzZXIgJ2VhdScgaXMgb25seSBpbiBncm91cCAndW5p eCcKLSsgICdlYXUnIHdvdWxkIE9OTFkgYWNjZXNzICdzZXJ2ZXIxJywgJ3NlcnZlcjInLCAn c2VydmVyMycgQU5EICdzZXJ2ZXI0JyBCVVQgTk9UICdzZXJ2ZXI1Jy4KLSsgIElmIHlvdSB0 aGVuIG1vZGlmeSB0aGUgTERBUCAnbWFpbCcgZ3JvdXAgZW50cnkgdG8gYWRkICdtZW1iZXJV aWQ6IGVhdScgVEhFTiB1c2VyICdlYXUnIHdvdWxkIGJlIGFibGUKLSsgIHRvIGxvZyBpbiAn c2VydmVyNScgKGkgaG9wZSB5b3UgZ290IHRoZSBpZGVhLCBteSBlbmdsaXNoIGlzIGJhZCA6 KS4KLSsKLSsgIEVhY2ggc2VydmVyJ3Mgc3NoZCBpcyBwYXRjaGVkIGFuZCBjb25maWd1cmVk IHRvIGFzayB0aGUgcHVibGljIGtleSBhbmQgdGhlIGdyb3VwIGluZm9zIGluIHRoZSBMREFQ Ci0rICBzZXJ2ZXIuCi0rICBXaGVuIHlvdSB3YW50IHRvIGFsbG93IGEgbmV3IHVzZXIgdG8g aGF2ZSBhY2Nlc3MgdG8gdGhlIHNlcnZlciBwYXJjLCB5b3UganVzdCBhZGQgaGltIGFuIGFj Y291bnQgb24gCi0rICB5b3VyIHNlcnZlcnMsIHlvdSBhZGQgaGlzIHB1YmxpYyBrZXkgaW50 byBoaXMgZW50cnkgb24gdGhlIExEQVAgc2VydmVyLCBpdCdzIGRvbmUuIAotKwotKyAgQmVj YXVzZSBzc2hkcyBhcmUgbG9va2luZyBwdWJsaWMga2V5cyBpbnRvIHRoZSBMREFQIGRpcmVj dGx5IGluc3RlYWQgb2YgYSBmaWxlICgkSE9NRS8uc3NoL2F1dGhvcml6ZWRfa2V5cykuCi0r Ci0rICBXaGVuIHRoZSB1c2VyIG5lZWRzIHRvIGNoYW5nZSBoaXMgcGFzc3BocmFzZSBoZSBj YW4gZG8gaXQgZGlyZWN0bHkgZnJvbSBoaXMgd29ya3N0YXRpb24gYnkgY2hhbmdpbmcgCi0r ICBoaXMgb3duIGtleSBzZXQgbG9jayBwYXNzcGhyYXNlLCBhbmQgYWxsIHNlcnZlcnMgYXJl IGF1dG9tYXRpY2FsbHkgYXdhcmUuCi0rIAotKyAgV2l0aCBhIENBUkVGVUwgTERBUCBzZXJ2 ZXIgY29uZmlndXJhdGlvbiB5b3UgY291bGQgYWxsb3cgYSB1c2VyIHRvIGFkZC9kZWxldGUv bW9kaWZ5IGhpcyBvd24gZW50cnkgaGltc2VsZgotKyAgc28gaGUgY2FuIGFkZC9tb2RpZnkv ZGVsZXRlIGhpbXNlbGYgaGlzIHB1YmxpYyBrZXkgd2hlbiBuZWVkZWQuCi0rCi0rrSBGTEFX UyA6Ci0rICBMREFQIG11c3QgYmUgd2VsbCBjb25maWd1cmVkLCBnZXR0aW5nIHRoZSBwdWJs aWMga2V5IG9mIHNvbWUgdXNlciBpcyBub3QgYSBwcm9ibGVtLCBidXQgaWYgYW5vbnltb3Vz IExEQVAgCi0rICBhbGxvdyB3cml0ZSB0byB1c2VycyBkbiwgc29tZWJvZHkgY291bGQgcmVw bGFjZSBzb21ldXNlcidzIHB1YmxpYyBrZXkgYnkgaXRzIG93biBhbmQgaW1wZXJzb25hdGUg c29tZSAKLSsgIG9mIHlvdXIgdXNlcnMgaW4gYWxsIHlvdXIgc2VydmVyIGZhcm0gYmUgVkVS WSBDQVJFRlVMLgotKyAgCi0rICBNSVRNIGF0dGFjayB3aGVuIHNzaGQgaXMgcmVxdWVzdGlu ZyB0aGUgcHVibGljIGtleSwgY291bGQgbGVhZCB0byBhIGNvbXByb21pc2Ugb2YgeW91ciBz ZXJ2ZXJzIGFsbG93aW5nIGxvZ2luIAotKyAgYXMgdGhlIGltcGVyc29ubmF0ZWQgdXNlci4K LSsKLSsgIElmIExEQVAgc2VydmVyIGlzIGRvd24gdGhlbiwgZmFsbGJhY2sgb24gcGFzc3dk IGF1dGguCi0rICAKLSsgIHRoZSBsZGFwIGNvZGUgcGFydCBoYXMgbm90IGJlZW4gd2VsbCBh dWRpdGVkIHlldC4KLSsKLSstIExEQVAgVVNFUiBFTlRSWSBFWEFNUExFUyAoTERJRiBGb3Jt YXQsIGxvb2sgaW4gdXNlcnMubGRpZikKLSsgICAgLS0tIENVVCBIRVJFIC0tLQotKyAgICBk bjogdWlkPWpkb2Usb3U9dXNlcnMsZGM9Zm9vYmFyLGRjPW5ldAotKyAgICBvYmplY3RjbGFz czogdG9wCi0rICAgIG9iamVjdGNsYXNzOiBwZXJzb24KLSsgICAgb2JqZWN0Y2xhc3M6IG9y Z2FuaXphdGlvbmFsUGVyc29uCi0rICAgIG9iamVjdGNsYXNzOiBwb3NpeEFjY291bnQKLSsg ICAgb2JqZWN0Y2xhc3M6IGxkYXBQdWJsaWNLZXkKLSsgICAgZGVzY3JpcHRpb246IE15IGFj Y291bnQKLSsgICAgY246IEpvaG4gRG9lCi0rICAgIHNuOiBKb2huIERvZQotKyAgICB1aWQ6 IGpkb2UKLSsgICAgdWlkTnVtYmVyOiAxMDAKLSsgICAgZ2lkTnVtYmVyOiAxMDAKLSsgICAg aG9tZURpcmVjdG9yeTogL2hvbWUvamRvZQotKyAgICBzc2hQdWJsaWNLZXk6IHNzaC1kc3Mg QUFBQUIzTnphQzFrYzNNQUFBRUJBT3ZMOHBSRVVnOXdTeS84K2hRSjU0WUYzQVhrQjBPWnJY Qi4uLi4KLSsgICAgWy4uLl0KLSsgICAgLS0tIENVVCBIRVJFIC0tLQotKwotKy0gTERBUCBH Uk9VUCBFTlRSWSBFWEFNUExFUyAoTERJRiBGb3JtYXQsIGxvb2sgaW4gZ3JvdXBzLmxkaWYp Ci0rICAgIC0tLSBDVVQgSEVSRSAtLS0KLSsgICAgZG46IGNuPXVuaXgsb3U9Z3JvdXBzLGRj PWN1Y2tvb3MsZGM9bmV0Ci0rICAgIG9iamVjdGNsYXNzOiB0b3AKLSsgICAgb2JqZWN0Y2xh c3M6IHBvc2l4R3JvdXAKLSsgICAgZGVzY3JpcHRpb246IFVuaXggYmFzZWQgc2VydmVycyBn cm91cAotKyAgICBjbjogdW5peAotKyAgICBnaWROdW1iZXI6IDEwMDIKLSsgICAgbWVtYmVy VWlkOiBqZG9lCi0rICAgIG1lbWJlclVpZDogdXNlcjEKLSsgICAgbWVtYmVyVWlkOiB1c2Vy MgotKyAgICBbLi4uXQotKyAgICAtLS0gQ1VUIEhFUkUgLS0tCi0rCi0rPj4gRllJOiA8PCAK LStNdWx0aXBsZSAnc3NoUHVibGljS2V5JyBpbiBhIHVzZXIgZW50cnkgYXJlIGFsbG93ZWQs IGFzIHdlbGwgYXMgbXVsdGlwbGUgJ21lbWJlclVpZCcgYXR0cmlidXRlcyBpbiBhIGdyb3Vw IGVudHJ5Ci0rCi0rLSBDT01QSUxJTkc6Ci0rICAxLiBBcHBseSB0aGUgcGF0Y2gKLSsgIDIu IC4vY29uZmlndXJlIC0td2l0aC15b3VyLW9wdGlvbnMgLS13aXRoLWxkYXA9L3ByZWZpeC90 by9sZGFwX2xpYnNfYW5kX2luY2x1ZGVzCi0rICAzLiBtYWtlCi0rICA0LiBpdCdzIGRvbmUu Ci0rCi0rLSBCTEEgOgotKyAgSSBob3BlIHRoaXMgY291bGQgaGVscCwgYW5kIGkgaG9wZSB0 byBiZSBjbGVhciBlbm91Z2gsLCBvciBnaXZlIGlkZWFzLiAgcXVlc3Rpb25zL2NvbW1lbnRz L2ltcHJvdmVtZW50cyBhcmUgd2VsY29tZS4KLSsgIAotKy0gVE9ETyA6Ci0rICBSZWRlc2ln biBkaWZmZXJlbnRseS4KLSsKLSstIERPQ1MvTElOSyA6Ci0rICBodHRwOi8vcGFjc2VjLmpw L2NvcmUwNS9wc2owNS1iYXJpc2FuaS1lbi5wZGYKLSsgIGh0dHA6Ly9mcml0ei5wb3RzZGFt LmVkdS9wcm9qZWN0cy9vcGVuc3NoLWxway8KLSsgIGh0dHA6Ly9mcml0ei5wb3RzZGFtLmVk dS9wcm9qZWN0cy9zc2hnYXRlLwotKyAgaHR0cDovL2Rldi5pbnZlcnNlcGF0aC5jb20vdHJh Yy9vcGVuc3NoLWxwawotKyAgaHR0cDovL2xhbS5zZi5uZXQvICggaHR0cDovL2xhbS5zb3Vy Y2Vmb3JnZS5uZXQvZG9jdW1lbnRhdGlvbi9zdXBwb3J0ZWRTY2hlbWFzLmh0bSApCi0rCi0r LSBDT05UUklCVVRPUlMvSURFQVMvR1JFRVRTIDoKLSsgIC0gRmFsayBTaWVtb25zbWVpZXIu Ci0rICAtIEphY29iIFJpZWYuCi0rICAtIE1pY2hhZWwgRHVyY2hncmFmLgotKyAgLSBmcmVk ZXJpYyBwZXRlcnMuCi0rICAtIEZpbmxheSBkb2JiaWUuCi0rICAtIFN0ZWZhbiBGaXNoZXIu Ci0rICAtIFJvYmluIEguIEpvaG5zb24uCi0rICAtIEFkcmlhbiBCcmlkZ2V0dC4KLSsKLSst IENPTlRBQ1QgOgotKyAgLSBFcmljIEFVR0UgPGVhdUBwaGVhci5vcmc+Ci0rICAtIEFuZHJl YSBCYXJpc2FuaSA8YW5kcmVhQGludmVyc2VwYXRoLmNvbT4KLQotZGlmZiAtTnVhciAtLWV4 Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgc2VydmNvbmYuaCBzZXJ2Y29uZi5o Ci0tLS0gc2VydmNvbmYuaAkyMDA4LTA2LTEwIDA2OjAxOjUxLjAwMDAwMDAwMCAtMDcwMAot KysrIHNlcnZjb25mLmgJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKLUBA IC0xNiw2ICsxNiwxMCBAQAotICNpZm5kZWYgU0VSVkNPTkZfSAotICNkZWZpbmUgU0VSVkNP TkZfSAotIAotKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZCi0rI2luY2x1ZGUgImxkYXBhdXRo LmgiCi0rI2VuZGlmCi0rCi0gI2RlZmluZSBNQVhfUE9SVFMJCTI1NgkvKiBNYXggIyBwb3J0 cy4gKi8KLSAKLSAjZGVmaW5lIE1BWF9BTExPV19VU0VSUwkJMjU2CS8qIE1heCAjIHVzZXJz IG9uIGFsbG93IGxpc3QuICovCi1AQCAtMTQ1LDYgKzE0OSw5IEBACi0gCWludAl1c2VfcGFt OwkJLyogRW5hYmxlIGF1dGggdmlhIFBBTSAqLwotIAotIAlpbnQJcGVybWl0X3R1bjsKLSsj aWZkZWYgV0lUSF9MREFQX1BVQktFWQotKyAgICAgICAgbGRhcF9vcHRfdCBscGs7Ci0rI2Vu ZGlmCi0gCi0gCWludAludW1fcGVybWl0dGVkX29wZW5zOwotIAotZGlmZiAtTnVhciAtLWV4 Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgc3NoZC5jIHNzaGQuYwotLS0tIHNz aGQuYwkyMDA4LTA3LTExIDAwOjM2OjQ5LjAwMDAwMDAwMCAtMDcwMAotKysrIHNzaGQuYwky MDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMAotQEAgLTEyNyw2ICsxMjcsMTAg QEAKLSBpbnQgZGVueV9zZXZlcml0eTsKLSAjZW5kaWYgLyogTElCV1JBUCAqLwotIAotKyNp ZmRlZiBXSVRIX0xEQVBfUFVCS0VZCi0rI2luY2x1ZGUgImxkYXBhdXRoLmgiCi0rI2VuZGlm Ci0rCi0gI2lmbmRlZiBPX05PQ1RUWQotICNkZWZpbmUgT19OT0NUVFkJMAotICNlbmRpZgot QEAgLTE0ODQsNiArMTQ4OCwxNiBAQAotIAkJZXhpdCgxKTsKLSAJfQotIAotKyNpZmRlZiBX SVRIX0xEQVBfUFVCS0VZCi0rICAgIC8qIGxkYXBfb3B0aW9uc19wcmludCgmb3B0aW9ucy5s cGspOyAqLwotKyAgICAvKiBYWFggaW5pdGlhbGl6ZS9jaGVjayBsZGFwIGNvbm5lY3Rpb24g YW5kIHNldCAqTEQgKi8KLSsgICAgaWYgKG9wdGlvbnMubHBrLm9uKSB7Ci0rICAgICAgICBp ZiAob3B0aW9ucy5scGsubF9jb25mICYmIChsZGFwX3BhcnNlX2xjb25mKCZvcHRpb25zLmxw aykgPCAwKSApCi0rICAgICAgICAgICAgZXJyb3IoIltMREFQXSBjb3VsZCBub3QgcGFyc2Ug JXMiLCBvcHRpb25zLmxway5sX2NvbmYpOwotKyAgICAgICAgaWYgKGxkYXBfY29ubmVjdCgm b3B0aW9ucy5scGspIDwgMCkKLSsgICAgICAgICAgICBlcnJvcigiW0xEQVBdIGNvdWxkIG5v dCBpbml0aWFsaXplIGxkYXAgY29ubmVjdGlvbiIpOwotKyAgICB9Ci0rI2VuZGlmCi0gCWRl YnVnKCJzc2hkIHZlcnNpb24gJS4xMDBzIiwgU1NIX1JFTEVBU0UpOwotIAotIAkvKiBTdG9y ZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiB1c2VyIGZvciBsYXRlciB1c2UgaWYgcmVxdWlyZWQu ICovCi1kaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBz c2hkX2NvbmZpZyBzc2hkX2NvbmZpZwotLS0tIHNzaGRfY29uZmlnCTIwMDgtMDctMDIgMDU6 MzU6NDMuMDAwMDAwMDAwIC0wNzAwCi0rKysgc3NoZF9jb25maWcJMjAwOC0wOC0yMyAxNTow Mjo0Ny4wMDAwMDAwMDAgLTA3MDAKLUBAIC0xMDksNiArMTA5LDIxIEBACi0gIyBubyBkZWZh dWx0IGJhbm5lciBwYXRoCi0gI0Jhbm5lciBub25lCi0gCi0rIyBoZXJlIGFyZSB0aGUgbmV3 IHBhdGNoZWQgbGRhcCByZWxhdGVkIHRva2VucwotKyMgZW50cmllcyBpbiB5b3VyIExEQVAg bXVzdCBoYXZlIHBvc2l4QWNjb3VudCAmIGxkYXBQdWJsaWNLZXkgb2JqZWN0Y2xhc3MKLSsj VXNlTFBLIHllcwotKyNMcGtMZGFwQ29uZiAvZXRjL2xkYXAuY29uZgotKyNMcGtTZXJ2ZXJz ICBsZGFwOi8vMTAuMS43LjEvIGxkYXA6Ly8xMC4xLjcuMi8KLSsjTHBrVXNlckROICAgb3U9 dXNlcnMsZGM9cGhlYXIsZGM9b3JnCi0rI0xwa0dyb3VwRE4gIG91PWdyb3VwcyxkYz1waGVh cixkYz1vcmcKLSsjTHBrQmluZEROIGNuPU1hbmFnZXIsZGM9cGhlYXIsZGM9b3JnCi0rI0xw a0JpbmRQdyBzZWNyZXQKLSsjTHBrU2VydmVyR3JvdXAgbWFpbAotKyNMcGtGaWx0ZXIgKGhv c3RBY2Nlc3M9bWFzdGVyLnBoZWFyLm9yZykKLSsjTHBrRm9yY2VUTFMgbm8KLSsjTHBrU2Vh cmNoVGltZWxpbWl0IDMKLSsjTHBrQmluZFRpbWVsaW1pdCAzCi0rCi0gIyBvdmVycmlkZSBk ZWZhdWx0IG9mIG5vIHN1YnN5c3RlbXMKLSBTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMv c2Z0cC1zZXJ2ZXIKLSAKLWRpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVk ZSAnKi5yZWonIHNzaGRfY29uZmlnLjUgc3NoZF9jb25maWcuNQotLS0tIHNzaGRfY29uZmln LjUJMjAwOC0wNy0wMiAwNTozNTo0My4wMDAwMDAwMDAgLTA3MDAKLSsrKyBzc2hkX2NvbmZp Zy41CTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCi1AQCAtMTAwMyw2ICsx MDAzLDYyIEBACi0gcHJvZ3JhbS4KLSBUaGUgZGVmYXVsdCBpcwotIC5QYSAvdXNyL1gxMVI2 L2Jpbi94YXV0aCAuCi0rLkl0IENtIFVzZUxQSwotK1NwZWNpZmllcyB3aGV0aGVyIExEQVAg cHVibGljIGtleSByZXRyaWV2YWwgbXVzdCBiZSB1c2VkIG9yIG5vdC4gSXQgYWxsb3cKLSth biBlYXN5IGNlbnRyYWxpc2F0aW9uIG9mIHB1YmxpYyBrZXlzIHdpdGhpbiBhbiBMREFQIGRp cmVjdG9yeS4gVGhlIGFyZ3VtZW50IG11c3QgYmUKLSsuRHEgeWVzCi0rb3IKLSsuRHEgbm8g LgotKy5JdCBDbSBMcGtMZGFwQ29uZgotK1NwZWNpZmllcyB3aGV0aGVyIExEQVAgUHVibGlj IGtleXMgc2hvdWxkIHBhcnNlIHRoZSBzcGVjaWZpZWQgbGRhcC5jb25mIGZpbGUKLStpbnN0 ZWFkIG9mIHNzaGRfY29uZmlnIFRva2Vucy4gVGhlIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxp ZCBwYXRoIHRvIGFuIGxkYXAuY29uZgotK2ZpbGUgbGlrZQotKy5QYSAvZXRjL2xkYXAuY29u ZgotKy5JdCBDbSBMcGtTZXJ2ZXJzCi0rU3BlY2lmaWVzIExEQVAgb25lIG9yIG1vcmUgWzpz cGFjZTpdIHNlcGFyYXRlZCBzZXJ2ZXIncyB1cmwgdGhlIGZvbGxvd2luZyBmb3JtIG1heSBi ZSB1c2VkOgotKy5QcAotK0xwa1NlcnZlcnMgbGRhcHM6Ly8xMjcuMC4wLjEgbGRhcDovLzEy Ny4wLjAuMiBsZGFwOi8vMTI3LjAuMC4zCi0rLkl0IENtIExwa1VzZXJETgotK1NwZWNpZmll cyB0aGUgTERBUCB1c2VyIEROLgotKy5QcAotK0xwa1VzZXJETiBvdT11c2VycyxkYz1waGVh cixkYz1vcmcKLSsuSXQgQ20gTHBrR3JvdXBETgotK1NwZWNpZmllcyB0aGUgTERBUCBncm91 cHMgRE4uCi0rLlBwCi0rTHBrR3JvdXBETiBvdT1ncm91cHMsZGM9cGhlYXIsZGM9b3JnCi0r Lkl0IENtIExwa0JpbmRETgotK1NwZWNpZmllcyB0aGUgTERBUCBiaW5kIEROIHRvIHVzZSBp ZiBuZWNlc3NhcnkuCi0rLlBwCi0rTHBrQmluZEROIGNuPU1hbmFnZXIsZGM9cGhlYXIsZGM9 b3JnCi0rLkl0IENtIExwa0JpbmRQdwotK1NwZWNpZmllcyB0aGUgTERBUCBiaW5kIGNyZWRl bnRpYWwuIAotKy5QcAotK0xwa0JpbmRQdyBzZWNyZXQKLSsuSXQgQ20gTHBrU2VydmVyR3Jv dXAKLStTcGVjaWZpZXMgb25lIG9yIG1vcmUgWzpzcGFjZTpdIHNlcGFyYXRlZCBncm91cCB0 aGUgc2VydmVyIGlzIHBhcnQgb2YuIAotKy5QcAotK0xwa1NlcnZlckdyb3VwIHVuaXggbWFp bCBwcm9kCi0rLkl0IENtIExwa0ZpbHRlcgotK1NwZWNpZmllcyBhbiBhZGRpdGlvbmFsIExE QVAgZmlsdGVyIHRvIHVzZSBmb3IgZmluZGluZyBTU0gga2V5cwotKy5QcAotK0xwa0ZpbHRl ciAoaG9zdEFjY2Vzcz1tYXN0ZXIucGhlYXIub3JnKQotKy5JdCBDbSBMcGtGb3JjZVRMUwot K1NwZWNpZmllcyBpZiB0aGUgTERBUCBzZXJ2ZXIgY29ubmVjdGlvbiBtdXN0IGJlIHRyaWVk LCBmb3JjZWQgb3Igbm90IHVzZWQuIFRoZSBhcmd1bWVudCBtdXN0IGJlIAotKy5EcSB5ZXMK LStvcgotKy5EcSBubwotK29yCi0rLkRxIHRyeSAuCi0rLkl0IENtIExwa1NlYXJjaFRpbWVs aW1pdAotK1NlcGNpZmllcyB0aGUgc2VhcmNoIHRpbWUgbGltaXQgYmVmb3JlIHRoZSBzZWFy Y2ggaXMgY29uc2lkZXJlZCBvdmVyLiB2YWx1ZSBpcwotK2luIHNlY29uZHMuCi0rLlBwCi0r THBrU2VhcmNoVGltZWxpbWl0IDMKLSsuSXQgQ20gTHBrQmluZFRpbWVsaW1pdAotK1NlcGNp ZmllcyB0aGUgYmluZCB0aW1lIGxpbWl0IGJlZm9yZSB0aGUgY29ubmVjdGlvbiBpcyBjb25z aWRlcmVkIGRlYWQuIHZhbHVlIGlzCi0raW4gc2Vjb25kcy4KLSsuUHAKLStMcGtCaW5kVGlt ZWxpbWl0IDMKLSAuRWwKLSAuU2ggVElNRSBGT1JNQVRTCi0gLlhyIHNzaGQgOApkaWZmIC1O cnUgL2hvbWUvZ2F3cmlsb2ZmL2xway9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVzL2NvbnRyaWIt b3BlbnNzaC1scGstNS4zcDEtMC4zLjEwLnBhdGNoIC9ob21lL2dhd3JpbG9mZi9vcGVuc3No LXBvcnRhYmxlL2ZpbGVzL2NvbnRyaWItb3BlbnNzaC1scGstNS4zcDEtMC4zLjEwLnBhdGNo Ci0tLSAvaG9tZS9nYXdyaWxvZmYvbHBrL29wZW5zc2gtcG9ydGFibGUvZmlsZXMvY29udHJp Yi1vcGVuc3NoLWxway01LjNwMS0wLjMuMTAucGF0Y2gJMTk3MC0wMS0wMSAwMzowMDowMC4w MDAwMDAwMDAgKzAzMDAKKysrIC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2Zp bGVzL2NvbnRyaWItb3BlbnNzaC1scGstNS4zcDEtMC4zLjEwLnBhdGNoCTIwMTAtMTItMjEg MTE6MzA6MDIuMDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTg4MSBAQAorZGlmZiAtTnVh ciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgYXV0aDItcHVia2V5LmMg YXV0aDItcHVia2V5LmMKKy0tLSBhdXRoMi1wdWJrZXkuYwkyMDA4LTA3LTAzIDE5OjU0OjI1 LjAwMDAwMDAwMCAtMDcwMAorKysrIGF1dGgyLXB1YmtleS5jCTIwMDgtMDgtMjMgMTU6MDI6 NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtNTUsNiArNTUsMTAgQEAKKyAjaW5jbHVkZSAibW9u aXRvcl93cmFwLmgiCisgI2luY2x1ZGUgIm1pc2MuaCIKKyAKKysjaWZkZWYgV0lUSF9MREFQ X1BVQktFWQorKyNpbmNsdWRlICJsZGFwYXV0aC5oIgorKyNlbmRpZgorKworIC8qIGltcG9y dCAqLworIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgZXh0ZXJuIHVfY2hhciAq c2Vzc2lvbl9pZDI7CitAQCAtMTgzLDEwICsxODcsNzkgQEAKKyAJdV9sb25nIGxpbmVudW0g PSAwOworIAlLZXkgKmZvdW5kOworIAljaGFyICpmcDsKKysjaWZkZWYgV0lUSF9MREFQX1BV QktFWQorKwlsZGFwX2tleV90ICogazsKKysJdW5zaWduZWQgaW50IGkgPSAwOworKyNlbmRp ZgorIAorIAkvKiBUZW1wb3JhcmlseSB1c2UgdGhlIHVzZXIncyB1aWQuICovCisgCXRlbXBv cmFyaWx5X3VzZV91aWQocHcpOworIAorKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZCisrIAlm b3VuZF9rZXkgPSAwOworKyAJLyogYWxsb2NhdGUgYSBuZXcga2V5IHR5cGUgKi8KKysgCWZv dW5kID0ga2V5X25ldyhrZXktPnR5cGUpOworKyAKKysgCS8qIGZpcnN0IGNoZWNrIGlmIHRo ZSBvcHRpb25zIGlzIGVuYWJsZWQsIHRoZW4gdHJ5Li4gKi8KKysJaWYgKG9wdGlvbnMubHBr Lm9uKSB7CisrCSAgICBkZWJ1ZygiW0xEQVBdIHRyeWluZyBMREFQIGZpcnN0IHVpZD0lcyIs cHctPnB3X25hbWUpOworKwkgICAgaWYgKGxkYXBfaXNtZW1iZXIoJm9wdGlvbnMubHBrLCBw dy0+cHdfbmFtZSkgPiAwKSB7CisrCQlpZiAoKGsgPSBsZGFwX2dldHVzZXJrZXkoJm9wdGlv bnMubHBrLCBwdy0+cHdfbmFtZSkpICE9IE5VTEwpIHsKKysJCSAgICAvKiBTa2lwIGxlYWRp bmcgd2hpdGVzcGFjZSwgZW1wdHkgYW5kIGNvbW1lbnQgbGluZXMuICovCisrCQkgICAgZm9y IChpID0gMCA7IGkgPCBrLT5udW0gOyBpKyspIHsKKysJCQkvKiBkb250IGZvcmdldCBpZiBt dWx0aXBsZSBrZXlzIHRvIHJlc2V0IG9wdGlvbnMgKi8KKysJCQljaGFyICpjcCwgKm9wdGlv bnMgPSBOVUxMOworKworKwkJCWZvciAoY3AgPSAoY2hhciAqKWstPmtleXNbaV0tPmJ2X3Zh bDsgKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JzsgY3ArKykKKysJCQkgICAgOworKwkJCWlm ICghKmNwIHx8ICpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnIycpCisrCQkJICAgIGNvbnRpbnVl OworKworKwkJCWlmIChrZXlfcmVhZChmb3VuZCwgJmNwKSAhPSAxKSB7CisrCQkJICAgIC8q IG5vIGtleT8gIGNoZWNrIGlmIHRoZXJlIGFyZSBvcHRpb25zIGZvciB0aGlzIGtleSAqLwor KwkJCSAgICBpbnQgcXVvdGVkID0gMDsKKysJCQkgICAgZGVidWcyKCJbTERBUF0gdXNlcl9r ZXlfYWxsb3dlZDogY2hlY2sgb3B0aW9uczogJyVzJyIsIGNwKTsKKysJCQkgICAgb3B0aW9u cyA9IGNwOworKwkJCSAgICBmb3IgKDsgKmNwICYmIChxdW90ZWQgfHwgKCpjcCAhPSAnICcg JiYgKmNwICE9ICdcdCcpKTsgY3ArKykgeworKwkJCQlpZiAoKmNwID09ICdcXCcgJiYgY3Bb MV0gPT0gJyInKQorKwkJCQkgICAgY3ArKzsJLyogU2tpcCBib3RoICovCisrCQkJCWVsc2Ug aWYgKCpjcCA9PSAnIicpCisrCQkJCSAgICBxdW90ZWQgPSAhcXVvdGVkOworKwkJCSAgICB9 CisrCQkJICAgIC8qIFNraXAgcmVtYWluaW5nIHdoaXRlc3BhY2UuICovCisrCQkJICAgIGZv ciAoOyAqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnOyBjcCsrKQorKwkJCQk7CisrCQkJICAg IGlmIChrZXlfcmVhZChmb3VuZCwgJmNwKSAhPSAxKSB7CisrCQkJCWRlYnVnMigiW0xEQVBd IHVzZXJfa2V5X2FsbG93ZWQ6IGFkdmFuY2U6ICclcyciLCBjcCk7CisrCQkJCS8qIHN0aWxs IG5vIGtleT8gIGFkdmFuY2UgdG8gbmV4dCBsaW5lKi8KKysJCQkJY29udGludWU7CisrCQkJ ICAgIH0KKysJCQl9CisrCisrCQkJaWYgKGtleV9lcXVhbChmb3VuZCwga2V5KSAmJgorKwkJ CQlhdXRoX3BhcnNlX29wdGlvbnMocHcsIG9wdGlvbnMsIGZpbGUsIGxpbmVudW0pID09IDEp IHsKKysJCQkgICAgZm91bmRfa2V5ID0gMTsKKysJCQkgICAgZGVidWcoIltMREFQXSBtYXRj aGluZyBrZXkgZm91bmQiKTsKKysJCQkgICAgZnAgPSBrZXlfZmluZ2VycHJpbnQoZm91bmQs IFNTSF9GUF9NRDUsIFNTSF9GUF9IRVgpOworKwkJCSAgICB2ZXJib3NlKCJbTERBUF0gRm91 bmQgbWF0Y2hpbmcgJXMga2V5OiAlcyIsIGtleV90eXBlKGZvdW5kKSwgZnApOworKworKwkJ CSAgICAvKiByZXN0b3JpbmcgbWVtb3J5ICovCisrCQkJICAgIGxkYXBfa2V5c19mcmVlKGsp OworKwkJCSAgICB4ZnJlZShmcCk7CisrCQkJICAgIHJlc3RvcmVfdWlkKCk7CisrCQkJICAg IGtleV9mcmVlKGZvdW5kKTsKKysJCQkgICAgcmV0dXJuIGZvdW5kX2tleTsKKysJCQkgICAg YnJlYWs7CisrCQkJfQorKwkJICAgIH0vKiBlbmQgb2YgTERBUCBmb3IoKSAqLworKwkJfSBl bHNlIHsKKysJCSAgICBsb2dpdCgiW0xEQVBdIG5vIGtleXMgZm91bmQgZm9yICclcychIiwg cHctPnB3X25hbWUpOworKwkJfQorKwkgICAgfSBlbHNlIHsKKysJCWxvZ2l0KCJbTERBUF0g JyVzJyBpcyBub3QgaW4gJyVzJyIsIHB3LT5wd19uYW1lLCBvcHRpb25zLmxway5zZ3JvdXAp OworKwkgICAgfQorKwl9CisrI2VuZGlmCisgCWRlYnVnKCJ0cnlpbmcgcHVibGljIGtleSBm aWxlICVzIiwgZmlsZSk7CisgCWYgPSBhdXRoX29wZW5rZXlmaWxlKGZpbGUsIHB3LCBvcHRp b25zLnN0cmljdF9tb2Rlcyk7CisgCitkaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5vcmlnJyAt LWV4Y2x1ZGUgJyoucmVqJyBhdXRoLXJzYS5jIGF1dGgtcnNhLmMKKy0tLSBhdXRoLXJzYS5j CTIwMDgtMDctMDIgMDU6Mzc6MzAuMDAwMDAwMDAwIC0wNzAwCisrKysgYXV0aC1yc2EuYwky MDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTE3NCwxMCArMTc0LDk2 IEBACisgCUZJTEUgKmY7CisgCXVfbG9uZyBsaW5lbnVtID0gMDsKKyAJS2V5ICprZXk7Cisr I2lmZGVmIFdJVEhfTERBUF9QVUJLRVkKKysJbGRhcF9rZXlfdCAqIGs7CisrCXVuc2lnbmVk IGludCBpID0gMDsKKysjZW5kaWYKKyAKKyAJLyogVGVtcG9yYXJpbHkgdXNlIHRoZSB1c2Vy J3MgdWlkLiAqLworIAl0ZW1wb3JhcmlseV91c2VfdWlkKHB3KTsKKyAKKysjaWZkZWYgV0lU SF9MREFQX1BVQktFWQorKwkvKiBoZXJlIGlzIHRoZSBqb2IgKi8KKysJa2V5ID0ga2V5X25l dyhLRVlfUlNBMSk7CisrCisrCWlmIChvcHRpb25zLmxway5vbikgeworKwkgICAgZGVidWco IltMREFQXSB0cnlpbmcgTERBUCBmaXJzdCB1aWQ9JXMiLCBwdy0+cHdfbmFtZSk7CisrCSAg ICBpZiAoIGxkYXBfaXNtZW1iZXIoJm9wdGlvbnMubHBrLCBwdy0+cHdfbmFtZSkgPiAwKSB7 CisrCQlpZiAoIChrID0gbGRhcF9nZXR1c2Vya2V5KCZvcHRpb25zLmxwaywgcHctPnB3X25h bWUpKSAhPSBOVUxMKSB7CisrCQkgICAgZm9yIChpID0gMCA7IGkgPCBrLT5udW0gOyBpKysp IHsKKysJCQljaGFyICpjcCwgKm9wdGlvbnMgPSBOVUxMOworKworKwkJCWZvciAoY3AgPSBr LT5rZXlzW2ldLT5idl92YWw7ICpjcCA9PSAnICcgfHwgKmNwID09ICdcdCc7IGNwKyspCisr CQkJICAgIDsKKysJCQlpZiAoISpjcCB8fCAqY3AgPT0gJ1xuJyB8fCAqY3AgPT0gJyMnKQor KwkJCSAgICBjb250aW51ZTsKKysKKysJCQkvKgorKwkJCSogQ2hlY2sgaWYgdGhlcmUgYXJl IG9wdGlvbnMgZm9yIHRoaXMga2V5LCBhbmQgaWYgc28sCisrCQkJKiBzYXZlIHRoZWlyIHN0 YXJ0aW5nIGFkZHJlc3MgYW5kIHNraXAgdGhlIG9wdGlvbiBwYXJ0CisrCQkJKiBmb3Igbm93 LiAgSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMsIHNldCB0aGUgc3RhcnRpbmcKKysJCQkqIGFk ZHJlc3MgdG8gTlVMTC4KKysJCQkgKi8KKysJCQlpZiAoKmNwIDwgJzAnIHx8ICpjcCA+ICc5 JykgeworKwkJCSAgICBpbnQgcXVvdGVkID0gMDsKKysJCQkgICAgb3B0aW9ucyA9IGNwOwor KwkJCSAgICBmb3IgKDsgKmNwICYmIChxdW90ZWQgfHwgKCpjcCAhPSAnICcgJiYgKmNwICE9 ICdcdCcpKTsgY3ArKykgeworKwkJCQlpZiAoKmNwID09ICdcXCcgJiYgY3BbMV0gPT0gJyIn KQorKwkJCQkgICAgY3ArKzsJLyogU2tpcCBib3RoICovCisrCQkJCWVsc2UgaWYgKCpjcCA9 PSAnIicpCisrCQkJCSAgICBxdW90ZWQgPSAhcXVvdGVkOworKwkJCSAgICB9CisrCQkJfSBl bHNlCisrCQkJICAgIG9wdGlvbnMgPSBOVUxMOworKworKwkJCS8qIFBhcnNlIHRoZSBrZXkg ZnJvbSB0aGUgbGluZS4gKi8KKysJCQlpZiAoaG9zdGZpbGVfcmVhZF9rZXkoJmNwLCAmYml0 cywga2V5KSA9PSAwKSB7CisrCQkJICAgIGRlYnVnKCJbTERBUF0gbGluZSAlZDogbm9uIHNz aDEga2V5IHN5bnRheCIsIGkpOworKwkJCSAgICBjb250aW51ZTsKKysJCQl9CisrCQkJLyog Y3Agbm93IHBvaW50cyB0byB0aGUgY29tbWVudCBwYXJ0LiAqLworKworKwkJCS8qIENoZWNr IGlmIHRoZSB3ZSBoYXZlIGZvdW5kIHRoZSBkZXNpcmVkIGtleSAoaWRlbnRpZmllZCBieSBp dHMgbW9kdWx1cykuICovCisrCQkJaWYgKEJOX2NtcChrZXktPnJzYS0+biwgY2xpZW50X24p ICE9IDApCisrCQkJICAgIGNvbnRpbnVlOworKworKwkJCS8qIGNoZWNrIHRoZSByZWFsIGJp dHMgICovCisrCQkJaWYgKGJpdHMgIT0gKHVuc2lnbmVkIGludClCTl9udW1fYml0cyhrZXkt PnJzYS0+bikpCisrCQkJICAgIGxvZ2l0KCJbTERBUF0gV2FybmluZzogbGRhcCwgbGluZSAl bHU6IGtleXNpemUgbWlzbWF0Y2g6ICIKKysJCQkJICAgICJhY3R1YWwgJWQgdnMuIGFubm91 bmNlZCAlZC4iLCAodW5zaWduZWQgbG9uZylpLCBCTl9udW1fYml0cyhrZXktPnJzYS0+biks IGJpdHMpOworKworKwkJCS8qIFdlIGhhdmUgZm91bmQgdGhlIGRlc2lyZWQga2V5LiAqLwor KwkJCS8qCisrCQkJKiBJZiBvdXIgb3B0aW9ucyBkbyBub3QgYWxsb3cgdGhpcyBrZXkgdG8g YmUgdXNlZCwKKysJCQkqIGRvIG5vdCBzZW5kIGNoYWxsZW5nZS4KKysJCQkgKi8KKysJCQlp ZiAoIWF1dGhfcGFyc2Vfb3B0aW9ucyhwdywgb3B0aW9ucywgIltMREFQXSIsICh1bnNpZ25l ZCBsb25nKSBpKSkKKysJCQkgICAgY29udGludWU7CisrCisrCQkJLyogYnJlYWsgb3V0LCB0 aGlzIGtleSBpcyBhbGxvd2VkICovCisrCQkJYWxsb3dlZCA9IDE7CisrCisrCQkJLyogYWRk IHRoZSByZXR1cm4gc3R1ZmYgZXRjLi4uICovCisrCQkJLyogUmVzdG9yZSB0aGUgcHJpdmls ZWdlZCB1aWQuICovCisrCQkJcmVzdG9yZV91aWQoKTsKKysKKysJCQkvKiByZXR1cm4ga2V5 IGlmIGFsbG93ZWQgKi8KKysJCQlpZiAoYWxsb3dlZCAmJiBya2V5ICE9IE5VTEwpCisrCQkJ ICAgICpya2V5ID0ga2V5OworKwkJCWVsc2UKKysJCQkgICAga2V5X2ZyZWUoa2V5KTsKKysK KysJCQlsZGFwX2tleXNfZnJlZShrKTsKKysJCQlyZXR1cm4gKGFsbG93ZWQpOworKwkJICAg IH0KKysJCX0gZWxzZSB7CisrCQkgICAgbG9naXQoIltMREFQXSBubyBrZXlzIGZvdW5kIGZv ciAnJXMnISIsIHB3LT5wd19uYW1lKTsKKysJCX0KKysJICAgIH0gZWxzZSB7CisrCQlsb2dp dCgiW0xEQVBdICclcycgaXMgbm90IGluICclcyciLCBwdy0+cHdfbmFtZSwgb3B0aW9ucy5s cGsuc2dyb3VwKTsKKysJICAgIH0KKysJfQorKyNlbmRpZgorIAkvKiBUaGUgYXV0aG9yaXpl ZCBrZXlzLiAqLworIAlmaWxlID0gYXV0aG9yaXplZF9rZXlzX2ZpbGUocHcpOworIAlkZWJ1 ZygidHJ5aW5nIHB1YmxpYyBSU0Ega2V5IGZpbGUgJXMiLCBmaWxlKTsKK2RpZmYgLU51YXIg LS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIGNvbmZpZy5oLmluIGNvbmZp Zy5oLmluCistLS0gY29uZmlnLmguaW4JMjAwOC0wNy0yMSAwMTozMDo0OS4wMDAwMDAwMDAg LTA3MDAKKysrKyBjb25maWcuaC5pbgkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAt MDcwMAorQEAgLTU3NSw2ICs1NzUsOSBAQAorIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl IHRoZSA8bGludXgvaWZfdHVuLmg+IGhlYWRlciBmaWxlLiAqLworICN1bmRlZiBIQVZFX0xJ TlVYX0lGX1RVTl9ICisgCisrLyogRGVmaW5lIGlmIHlvdSB3YW50IExEQVAgc3VwcG9ydCAq LworKyN1bmRlZiBXSVRIX0xEQVBfUFVCS0VZCisrCisgLyogRGVmaW5lIGlmIHlvdXIgbGli cmFyaWVzIGRlZmluZSBsb2dpbigpICovCisgI3VuZGVmIEhBVkVfTE9HSU4KKyAKK2RpZmYg LU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIGNvbmZpZ3VyZSBj b25maWd1cmUKKy0tLSBjb25maWd1cmUJMjAwOC0wNy0yMSAwMTozMDo1MC4wMDAwMDAwMDAg LTA3MDAKKysrKyBjb25maWd1cmUJMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3 MDAKK0BAIC0xNDY4LDYgKzE0NjgsNyBAQAorICAgLS13aXRoLXRjcC13cmFwcGVyc1s9UEFU SF0gRW5hYmxlIHRjcHdyYXBwZXJzIHN1cHBvcnQgKG9wdGlvbmFsbHkgaW4gUEFUSCkKKyAg IC0td2l0aC1saWJlZGl0Wz1QQVRIXSAgIEVuYWJsZSBsaWJlZGl0IHN1cHBvcnQgZm9yIHNm dHAKKyAgIC0td2l0aC1hdWRpdD1tb2R1bGUgICAgIEVuYWJsZSBFWFBFUklNRU5UQUwgYXVk aXQgc3VwcG9ydCAobW9kdWxlcz1kZWJ1Zyxic20pCisrICAtLXdpdGgtbGRhcFs9UEFUSF0g ICAgICBFbmFibGUgTERBUCBwdWJrZXkgc3VwcG9ydCAob3B0aW9uYWxseSBpbiBQQVRIKQor ICAgLS13aXRoLXNzbC1kaXI9UEFUSCAgICAgU3BlY2lmeSBwYXRoIHRvIE9wZW5TU0wgaW5z dGFsbGF0aW9uCisgICAtLXdpdGhvdXQtb3BlbnNzbC1oZWFkZXItY2hlY2sgRGlzYWJsZSBP cGVuU1NMIHZlcnNpb24gY29uc2lzdGVuY3kgY2hlY2sKKyAgIC0td2l0aC1zc2wtZW5naW5l ICAgICAgIEVuYWJsZSBPcGVuU1NMIChoYXJkd2FyZSkgRU5HSU5FIHN1cHBvcnQKK0BAIC0x MzQxMSw2ICsxMzQxMiw4NSBAQAorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIHVzZXIg d2FudHMgTERBUCBzdXBwb3J0CisrTERBUF9NU0c9Im5vIgorKworKyMgQ2hlY2sgd2hldGhl ciAtLXdpdGgtbGRhcCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xkYXArc2V0fSIg PSBzZXQ7IHRoZW4KKysgIHdpdGh2YWw9JHdpdGhfbGRhcDsKKysJCWlmIHRlc3QgIngkd2l0 aHZhbCIgIT0gInhubyIgOyB0aGVuCisrCisrCQkJaWYgdGVzdCAieCR3aXRodmFsIiAhPSAi eHllcyIgOyB0aGVuCisrCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkke3dpdGh2YWx9L2lu Y2x1ZGUiCisrCQkJCUxERkxBR1M9IiRMREZMQUdTIC1MJHt3aXRodmFsfS9saWIiCisrCQkJ ZmkKKysKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgV0lUSF9M REFQX1BVQktFWSAxCisrX0FDRU9GCisrCisrCQkJTElCUz0iLWxsZGFwICRMSUJTIgorKwkJ CUxEQVBfTVNHPSJ5ZXMiCisrCisrCQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tp bmcgZm9yIExEQVAgc3VwcG9ydCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Ig TERBUCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQorKwkJCWNhdCA+Y29uZnRlc3QuJGFj X2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25m ZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxf QUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorKwkJCQkgI2luY2x1ZGUgPGxkYXAuaD4KKytpbnQKKyttYWluICgpCisreworKyh2b2lk KWxkYXBfaW5pdCgwLCAwKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKyty bSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIK KytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9l Y2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytl dmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorKyAg KGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPwor KyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1m IGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19t ZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMp OyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAh IC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29i amV4dDsgdGhlbgorKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4m NQorK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisrZWxzZQorKyAgZWNobyAiJGFzX21l OiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRh Y19leHQgPiY1CisrCisrCisrCQkJCSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1 bHQ6IG5vIiA+JjUKKytlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisrCQkJCQl7IHsgZWNo byAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAqKiBJbmNvbXBsZXRlIG9yIG1pc3NpbmcgbGRh cCBsaWJyYXJpZXMgKioiID4mNQorK2VjaG8gIiRhc19tZTogZXJyb3I6ICoqIEluY29tcGxl dGUgb3IgbWlzc2luZyBsZGFwIGxpYnJhcmllcyAqKiIgPiYyO30KKysgICB7IChleGl0IDEp OyBleGl0IDE7IH07IH0KKysKKysKKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKwkJZmkKKysKKysKKytm aQorKworKworIAorIAorIAorQEAgLTMyMjI1LDYgKzMyMzA1LDcgQEAKKyBlY2hvICIgICAg ICAgICAgICAgICAgIFNtYXJ0Y2FyZCBzdXBwb3J0OiAkU0NBUkRfTVNHIgorIGVjaG8gIiAg ICAgICAgICAgICAgICAgICAgIFMvS0VZIHN1cHBvcnQ6ICRTS0VZX01TRyIKKyBlY2hvICIg ICAgICAgICAgICAgIFRDUCBXcmFwcGVycyBzdXBwb3J0OiAkVENQV19NU0ciCisrZWNobyAi ICAgICAgICAgICAgICAgICAgICAgIExEQVAgc3VwcG9ydDogJExEQVBfTVNHIgorIGVjaG8g IiAgICAgICAgICAgICAgTUQ1IHBhc3N3b3JkIHN1cHBvcnQ6ICRNRDVfTVNHIgorIGVjaG8g IiAgICAgICAgICAgICAgICAgICBsaWJlZGl0IHN1cHBvcnQ6ICRMSUJFRElUX01TRyIKKyBl Y2hvICIgIFNvbGFyaXMgcHJvY2VzcyBjb250cmFjdCBzdXBwb3J0OiAkU1BDX01TRyIKK2Rp ZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIGNvbmZpZ3Vy ZS5hYyBjb25maWd1cmUuYWMKKy0tLSBjb25maWd1cmUuYWMJMjAwOC0wNy0wOSAwNDowNzox OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBjb25maWd1cmUuYWMJMjAwOC0wOC0yMyAxNTowMjo0 Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMzE5LDYgKzEzMTksMzcgQEAKKyAJZXNhYyBdCisg KQorIAorKyMgQ2hlY2sgd2hldGhlciB1c2VyIHdhbnRzIExEQVAgc3VwcG9ydAorK0xEQVBf TVNHPSJubyIKKytBQ19BUkdfV0lUSChsZGFwLAorKwlbICAtLXdpdGgtbGRhcFtbPVBBVEhd XSAgICAgIEVuYWJsZSBMREFQIHB1YmtleSBzdXBwb3J0IChvcHRpb25hbGx5IGluIFBBVEgp XSwKKysJWworKwkJaWYgdGVzdCAieCR3aXRodmFsIiAhPSAieG5vIiA7IHRoZW4KKysKKysJ CQlpZiB0ZXN0ICJ4JHdpdGh2YWwiICE9ICJ4eWVzIiA7IHRoZW4KKysJCQkJQ1BQRkxBR1M9 IiRDUFBGTEFHUyAtSSR7d2l0aHZhbH0vaW5jbHVkZSIKKysJCQkJTERGTEFHUz0iJExERkxB R1MgLUwke3dpdGh2YWx9L2xpYiIKKysJCQlmaQorKworKwkJCUFDX0RFRklORShbV0lUSF9M REFQX1BVQktFWV0sIDEsIFtFbmFibGUgTERBUCBwdWJrZXkgc3VwcG9ydF0pCisrCQkJTElC Uz0iLWxsZGFwICRMSUJTIgorKwkJCUxEQVBfTVNHPSJ5ZXMiCisrCQorKwkJCUFDX01TR19D SEVDS0lORyhbZm9yIExEQVAgc3VwcG9ydF0pCisrCQkJQUNfVFJZX0NPTVBJTEUoCisrCQkJ CVsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCQkJCSAjaW5jbHVkZSA8bGRhcC5oPl0sCisr CQkJCVsodm9pZClsZGFwX2luaXQoMCwgMCk7XSwKKysJCQkJW0FDX01TR19SRVNVTFQoeWVz KV0sCisrCQkJCVsKKysJCQkJICAgIEFDX01TR19SRVNVTFQobm8pIAorKwkJCQkJQUNfTVNH X0VSUk9SKFsqKiBJbmNvbXBsZXRlIG9yIG1pc3NpbmcgbGRhcCBsaWJyYXJpZXMgKipdKQor KwkJCQldCisrICAgICAgICAJKQorKwkJZmkKKysJXQorKykKKysKKyBkbmwgICAgQ2hlY2tz IGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4gUGxlYXNlIGtlZXAgaW4gYWxwaGFiZXRpY2FsIG9y ZGVyCisgQUNfQ0hFQ0tfRlVOQ1MoIFwKKyAJYXJjNHJhbmRvbSBcCitAQCAtNDIyOSw2ICs0 MjYwLDcgQEAKKyBlY2hvICIgICAgICAgICAgICAgICAgIFNtYXJ0Y2FyZCBzdXBwb3J0OiAk U0NBUkRfTVNHIgorIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgIFMvS0VZIHN1cHBvcnQ6 ICRTS0VZX01TRyIKKyBlY2hvICIgICAgICAgICAgICAgIFRDUCBXcmFwcGVycyBzdXBwb3J0 OiAkVENQV19NU0ciCisrZWNobyAiICAgICAgICAgICAgICAgICAgICAgIExEQVAgc3VwcG9y dDogJExEQVBfTVNHIgorIGVjaG8gIiAgICAgICAgICAgICAgTUQ1IHBhc3N3b3JkIHN1cHBv cnQ6ICRNRDVfTVNHIgorIGVjaG8gIiAgICAgICAgICAgICAgICAgICBsaWJlZGl0IHN1cHBv cnQ6ICRMSUJFRElUX01TRyIKKyBlY2hvICIgIFNvbGFyaXMgcHJvY2VzcyBjb250cmFjdCBz dXBwb3J0OiAkU1BDX01TRyIKK2RpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhj bHVkZSAnKi5yZWonIGxkYXBhdXRoLmMgbGRhcGF1dGguYworLS0tIGxkYXBhdXRoLmMJMTk2 OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsZGFwYXV0aC5jCTIwMDgt MDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMCwwICsxLDU3NSBAQAorKy8q IAorKyAqICRJZDogb3BlbnNzaC1scGstNC4zcDEtMC4zLjcucGF0Y2gsdiAxLjMgMjAwNi8w NC8xOCAxNToyOTowOSBlYXUgRXhwICQKKysgKi8KKysKKysvKgorKyAqCisrICogQ29weXJp Z2h0IChjKSAyMDA1LCBFcmljIEFVR0UgPGVhdUBwaGVhci5vcmc+CisrICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l dDoKKysgKgorKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcGhl YXIub3JnIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisrICoKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCAKKysgKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisrICogSU4gTk8gRVZFTlQgU0hB TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCAK KysgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyAK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIAorKyAqIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKgorKyAqLworKworKyNp bmNsdWRlICJpbmNsdWRlcy5oIgorKworKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZCisrCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDx1 bmlzdGQuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgImxkYXBhdXRo LmgiCisrI2luY2x1ZGUgImxvZy5oIgorKworK3N0YXRpYyBjaGFyICphdHRyc1tdID0gewor KyAgICBQVUJLRVlBVFRSLAorKyAgICBOVUxMCisrfTsKKysKKysvKiBmaWx0ZXIgYnVpbGRp bmcgaW5mb3MgKi8KKysjZGVmaW5lIEZJTFRFUl9HUk9VUF9QUkVGSVggIigmKG9iamVjdGNs YXNzPXBvc2l4R3JvdXApIgorKyNkZWZpbmUgRklMVEVSX09SX1BSRUZJWCAiKHwiCisrI2Rl ZmluZSBGSUxURVJfT1JfU1VGRklYICIpIgorKyNkZWZpbmUgRklMVEVSX0NOX1BSRUZJWCAi KGNuPSIKKysjZGVmaW5lIEZJTFRFUl9DTl9TVUZGSVggIikiCisrI2RlZmluZSBGSUxURVJf VUlEX0ZPUk1BVCAiKG1lbWJlclVpZD0lcykiCisrI2RlZmluZSBGSUxURVJfR1JPVVBfU1VG RklYICIpIgorKyNkZWZpbmUgRklMVEVSX0dST1VQX1NJWkUoZ3JvdXApIChzaXplX3QpIChz dHJsZW4oZ3JvdXApKyhsZGFwX2NvdW50X2dyb3VwKGdyb3VwKSo1KSs1MikKKysKKysvKiBq dXN0IGZpbHRlciBidWlsZGluZyBzdHVmZiAqLworKyNkZWZpbmUgUkVRVUVTVF9HUk9VUF9T SVpFKGZpbHRlciwgdWlkKSAoc2l6ZV90KSAoc3RybGVuKGZpbHRlcikrc3RybGVuKHVpZCkr MSkKKysjZGVmaW5lIFJFUVVFU1RfR1JPVVAoYnVmZmVyLCBwcmVmaWx0ZXIsIHB3bmFtZSkg XAorKyAgICBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoUkVRVUVTVF9HUk9VUF9TSVpFKHBy ZWZpbHRlciwgcHduYW1lKSwgc2l6ZW9mKGNoYXIpKTsgXAorKyAgICBpZiAoIWJ1ZmZlcikg eyBcCisrICAgICAgICBwZXJyb3IoImNhbGxvYygpIik7IFwKKysgICAgICAgIHJldHVybiBG QUlMVVJFOyBcCisrICAgIH0gXAorKyAgICBzbnByaW50ZihidWZmZXIsIFJFUVVFU1RfR1JP VVBfU0laRShwcmVmaWx0ZXIscHduYW1lKSwgcHJlZmlsdGVyLCBwd25hbWUpCisrLyoKKytY WFggT0xEIGdyb3VwIGJ1aWxkaW5nIG1hY3JvcworKyNkZWZpbmUgUkVRVUVTVF9HUk9VUF9T SVpFKGdycCwgdWlkKSAoc2l6ZV90KSAoc3RybGVuKGdycCkrc3RybGVuKHVpZCkrNDYpCisr I2RlZmluZSBSRVFVRVNUX0dST1VQKGJ1ZmZlcixwd25hbWUsZ3JwKSBcCisrICAgIGJ1ZmZl ciA9IChjaGFyICopIGNhbGxvYyhSRVFVRVNUX0dST1VQX1NJWkUoZ3JwLCBwd25hbWUpLCBz aXplb2YoY2hhcikpOyBcCisrICAgIGlmICghYnVmZmVyKSB7IFwKKysgICAgICAgIHBlcnJv cigiY2FsbG9jKCkiKTsgXAorKyAgICAgICAgcmV0dXJuIEZBSUxVUkU7IFwKKysgICAgfSBc CisrICAgIHNucHJpbnRmKGJ1ZmZlcixSRVFVRVNUX0dST1VQX1NJWkUoZ3JwLHB3bmFtZSks IigmKG9iamVjdGNsYXNzPXBvc2l4R3JvdXApKGNuPSVzKShtZW1iZXJVaWQ9JXMpKSIsZ3Jw LHB3bmFtZSkKKysgICAgKi8KKysKKysvKgorK1hYWCBzdG9jayB1cHN0cmVhbSB2ZXJzaW9u IHdpdGhvdXQgZXh0cmEgZmlsdGVyIHN1cHBvcnQKKysjZGVmaW5lIFJFUVVFU1RfVVNFUl9T SVpFKHVpZCkgKHNpemVfdCkgKHN0cmxlbih1aWQpKzY0KQorKyNkZWZpbmUgUkVRVUVTVF9V U0VSKGJ1ZmZlciwgcHduYW1lKSBcCisrICAgIGJ1ZmZlciA9IChjaGFyICopIGNhbGxvYyhS RVFVRVNUX1VTRVJfU0laRShwd25hbWUpLCBzaXplb2YoY2hhcikpOyBcCisrICAgIGlmICgh YnVmZmVyKSB7IFwKKysgICAgICAgIHBlcnJvcigiY2FsbG9jKCkiKTsgXAorKyAgICAgICAg cmV0dXJuIE5VTEw7IFwKKysgICAgfSBcCisrICAgIHNucHJpbnRmKGJ1ZmZlcixSRVFVRVNU X1VTRVJfU0laRShwd25hbWUpLCIoJihvYmplY3RjbGFzcz1wb3NpeEFjY291bnQpKG9iamVj dGNsYXNzPWxkYXBQdWJsaWNLZXkpKHVpZD0lcykpIixwd25hbWUpCisrICAgKi8KKysKKysj ZGVmaW5lIFJFUVVFU1RfVVNFUl9TSVpFKHVpZCwgZmlsdGVyKSAoc2l6ZV90KSAoc3RybGVu KHVpZCkrNjQrKGZpbHRlciAhPSBOVUxMID8gc3RybGVuKGZpbHRlcikgOiAwKSkKKysjZGVm aW5lIFJFUVVFU1RfVVNFUihidWZmZXIsIHB3bmFtZSwgY3VzdG9tZmlsdGVyKSBcCisrICAg IGJ1ZmZlciA9IChjaGFyICopIGNhbGxvYyhSRVFVRVNUX1VTRVJfU0laRShwd25hbWUsIGN1 c3RvbWZpbHRlciksIHNpemVvZihjaGFyKSk7IFwKKysgICAgaWYgKCFidWZmZXIpIHsgXAor KyAgICAgICAgcGVycm9yKCJjYWxsb2MoKSIpOyBcCisrICAgICAgICByZXR1cm4gTlVMTDsg XAorKyAgICB9IFwKKysgICAgc25wcmludGYoYnVmZmVyLCBSRVFVRVNUX1VTRVJfU0laRShw d25hbWUsIGN1c3RvbWZpbHRlciksIFwKKysgICAgCSIoJihvYmplY3RjbGFzcz1wb3NpeEFj Y291bnQpKG9iamVjdGNsYXNzPWxkYXBQdWJsaWNLZXkpKHVpZD0lcyklcykiLCBcCisrCXB3 bmFtZSwgKGN1c3RvbWZpbHRlciAhPSBOVUxMID8gY3VzdG9tZmlsdGVyIDogIiIpKQorKwor Ky8qIHNvbWUgcG9ydGFibGUgYW5kIHdvcmtpbmcgdG9rZW5pemVyLCBsYW1lIHRob3VnaCAq LworK3N0YXRpYyBpbnQgdG9rZW5pemUoY2hhciAqKiBvLCBzaXplX3Qgc2l6ZSwgY2hhciAq IGlucHV0KSB7CisrICAgIHVuc2lnbmVkIGludCBpID0gMCwgbnVtOworKyAgICBjb25zdCBj aGFyICogY2hhcnNldCA9ICIgXHQiOworKyAgICBjaGFyICogcHRyID0gaW5wdXQ7CisrCisr ICAgIC8qIGxlYWRpbmcgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkICovCisrICAgIG51bSA9 IHN0cnNwbihwdHIsIGNoYXJzZXQpOworKyAgICBwdHIgKz0gbnVtOworKworKyAgICB3aGls ZSAoKG51bSA9IHN0cmNzcG4ocHRyLCBjaGFyc2V0KSkpIHsKKysgICAgICAgIGlmIChpIDwg c2l6ZS0xKSB7CisrICAgICAgICAgICAgb1tpKytdID0gcHRyOworKyAgICAgICAgICAgIHB0 ciArPSBudW07CisrICAgICAgICAgICAgaWYgKCpwdHIpCisrICAgICAgICAgICAgICAgICpw dHIrKyA9ICdcMCc7CisrICAgICAgICB9CisrICAgIH0KKysgICAgb1tpXSA9IE5VTEw7Cisr ICAgIHJldHVybiBTVUNDRVNTOworK30KKysKKyt2b2lkIGxkYXBfY2xvc2UobGRhcF9vcHRf dCAqIGxkYXApIHsKKysKKysgICAgaWYgKCFsZGFwKQorKyAgICAgICAgcmV0dXJuOworKwor KyAgICBpZiAoIGxkYXBfdW5iaW5kX2V4dChsZGFwLT5sZCwgTlVMTCwgTlVMTCkgPCAwKQor KwlsZGFwX3BlcnJvcihsZGFwLT5sZCwgImxkYXBfdW5iaW5kKCkiKTsKKysKKysgICAgbGRh cC0+bGQgPSBOVUxMOworKyAgICBGTEFHX1NFVF9ESVNDT05ORUNURUQobGRhcC0+ZmxhZ3Mp OworKworKyAgICByZXR1cm47CisrfQorKworKy8qIGluaXQgJiYgYmluZCAqLworK2ludCBs ZGFwX2Nvbm5lY3QobGRhcF9vcHRfdCAqIGxkYXApIHsKKysgICAgaW50IHZlcnNpb24gPSBM REFQX1ZFUlNJT04zOworKworKyAgICBpZiAoIWxkYXAtPnNlcnZlcnMpCisrICAgICAgICBy ZXR1cm4gRkFJTFVSRTsKKysKKysgICAgLyogQ29ubmVjdGlvbiBJbml0IGFuZCBzZXR1cCAq LworKyAgICBsZGFwLT5sZCA9IGxkYXBfaW5pdChsZGFwLT5zZXJ2ZXJzLCBMREFQX1BPUlQp OworKyAgICBpZiAoIWxkYXAtPmxkKSB7CisrICAgICAgICBsZGFwX3BlcnJvcihsZGFwLT5s ZCwgImxkYXBfaW5pdCgpIik7CisrICAgICAgICByZXR1cm4gRkFJTFVSRTsKKysgICAgfQor KworKyAgICBpZiAoIGxkYXBfc2V0X29wdGlvbihsZGFwLT5sZCwgTERBUF9PUFRfUFJPVE9D T0xfVkVSU0lPTiwgJnZlcnNpb24pICE9IExEQVBfT1BUX1NVQ0NFU1MpIHsKKysgICAgICAg IGxkYXBfcGVycm9yKGxkYXAtPmxkLCAibGRhcF9zZXRfb3B0aW9uKExEQVBfT1BUX1BST1RP Q09MX1ZFUlNJT04pIik7CisrICAgICAgICByZXR1cm4gRkFJTFVSRTsKKysgICAgfQorKwor KyAgICAvKiBUaW1lb3V0cyBzZXR1cCAqLworKyAgICBpZiAobGRhcF9zZXRfb3B0aW9uKGxk YXAtPmxkLCBMREFQX09QVF9ORVRXT1JLX1RJTUVPVVQsICZsZGFwLT5iX3RpbWVvdXQpICE9 IExEQVBfU1VDQ0VTUykgeworKyAgICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFw X3NldF9vcHRpb24oTERBUF9PUFRfTkVUV09SS19USU1FT1VUKSIpOworKyAgICB9CisrICAg IGlmIChsZGFwX3NldF9vcHRpb24obGRhcC0+bGQsIExEQVBfT1BUX1RJTUVPVVQsICZsZGFw LT5zX3RpbWVvdXQpICE9IExEQVBfU1VDQ0VTUykgeworKyAgICAgICAgbGRhcF9wZXJyb3Io bGRhcC0+bGQsICJsZGFwX3NldF9vcHRpb24oTERBUF9PUFRfVElNRU9VVCkiKTsKKysgICAg fQorKworKyAgICAvKiBUTFMgc3VwcG9ydCAqLworKyAgICBpZiAoIChsZGFwLT50bHMgPT0g LTEpIHx8IChsZGFwLT50bHMgPT0gMSkgKSB7CisrICAgICAgICBpZiAobGRhcF9zdGFydF90 bHNfcyhsZGFwLT5sZCwgTlVMTCwgTlVMTCApICE9IExEQVBfU1VDQ0VTUykgeworKyAgICAg ICAgICAgIC8qIGZhaWxlZCB0aGVuIHJlaW5pdCB0aGUgaW5pdGlhbCBjb25uZWN0ICovCisr ICAgICAgICAgICAgbGRhcF9wZXJyb3IobGRhcC0+bGQsICJsZGFwX2Nvbm5lY3Q6IChUTFMp IGxkYXBfc3RhcnRfdGxzKCkiKTsKKysgICAgICAgICAgICBpZiAobGRhcC0+dGxzID09IDEp CisrICAgICAgICAgICAgICAgIHJldHVybiBGQUlMVVJFOworKworKyAgICAgICAgICAgIGxk YXAtPmxkID0gbGRhcF9pbml0KGxkYXAtPnNlcnZlcnMsIExEQVBfUE9SVCk7CisrICAgICAg ICAgICAgaWYgKCFsZGFwLT5sZCkgeyAKKysgICAgICAgICAgICAgICAgbGRhcF9wZXJyb3Io bGRhcC0+bGQsICJsZGFwX2luaXQoKSIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJ TFVSRTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYgKCBsZGFwX3NldF9v cHRpb24obGRhcC0+bGQsIExEQVBfT1BUX1BST1RPQ09MX1ZFUlNJT04sICZ2ZXJzaW9uKSAh PSBMREFQX09QVF9TVUNDRVNTKSB7CisrICAgICAgICAgICAgICAgICBsZGFwX3BlcnJvcihs ZGFwLT5sZCwgImxkYXBfc2V0X29wdGlvbigpIik7CisrICAgICAgICAgICAgICAgICByZXR1 cm4gRkFJTFVSRTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysK KysgICAgaWYgKCBsZGFwX3NpbXBsZV9iaW5kX3MobGRhcC0+bGQsIGxkYXAtPmJpbmRkbiwg bGRhcC0+YmluZHB3KSAhPSBMREFQX1NVQ0NFU1MpIHsKKysgICAgICAgIGxkYXBfcGVycm9y KGxkYXAtPmxkLCAibGRhcF9zaW1wbGVfYmluZF9zKCkiKTsKKysgICAgICAgIHJldHVybiBG QUlMVVJFOworKyAgICB9CisrCisrICAgIC8qIHNheXMgaXQgaXMgY29ubmVjdGVkICovCisr ICAgIEZMQUdfU0VUX0NPTk5FQ1RFRChsZGFwLT5mbGFncyk7CisrCisrICAgIHJldHVybiBT VUNDRVNTOworK30KKysKKysvKiBtdXN0IGZyZWUgYWxsb2NhdGVkIHJlc3NvdXJjZSAqLwor K3N0YXRpYyBjaGFyICogbGRhcF9idWlsZF9ob3N0KGNoYXIgKmhvc3QsIGludCBwb3J0KSB7 CisrICAgIHVuc2lnbmVkIGludCBzaXplID0gc3RybGVuKGhvc3QpKzExOworKyAgICBjaGFy ICogaCA9IChjaGFyICopIGNhbGxvYyAoc2l6ZSwgc2l6ZW9mKGNoYXIpKTsKKysgICAgaW50 IHJjOworKyAgICBpZiAoIWgpCisrICAgICAgICAgcmV0dXJuIE5VTEw7CisrCisrICAgIHJj ID0gc25wcmludGYoaCwgc2l6ZSwgIiVzOiVkICIsIGhvc3QsIHBvcnQpOworKyAgICBpZiAo cmMgPT0gLTEpCisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgcmV0dXJuIGg7CisrfQor KworK3N0YXRpYyBpbnQgbGRhcF9jb3VudF9ncm91cChjb25zdCBjaGFyICogaW5wdXQpIHsK KysgICAgY29uc3QgY2hhciAqIGNoYXJzZXQgPSAiIFx0IjsKKysgICAgY29uc3QgY2hhciAq IHB0ciA9IGlucHV0OworKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAwOworKyAgICB1bnNp Z25lZCBpbnQgbnVtOworKworKyAgICBudW0gPSBzdHJzcG4ocHRyLCBjaGFyc2V0KTsKKysg ICAgcHRyICs9IG51bTsKKysKKysgICAgd2hpbGUgKChudW0gPSBzdHJjc3BuKHB0ciwgY2hh cnNldCkpKSB7CisrICAgIGNvdW50Kys7CisrICAgIHB0ciArPSBudW07CisrICAgIHB0cisr OworKyAgICB9CisrCisrICAgIHJldHVybiBjb3VudDsKKyt9CisrCisrLyogZm9ybWF0IGZp bHRlciAqLworK2NoYXIgKiBsZGFwX3BhcnNlX2dyb3Vwcyhjb25zdCBjaGFyICogZ3JvdXBz KSB7CisrICAgIHVuc2lnbmVkIGludCBidWZmZXJfc2l6ZSA9IEZJTFRFUl9HUk9VUF9TSVpF KGdyb3Vwcyk7CisrICAgIGNoYXIgKiBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoYnVmZmVy X3NpemUsIHNpemVvZihjaGFyKSk7CisrICAgIGNoYXIgKiBnID0gTlVMTDsKKysgICAgY2hh ciAqIGdhcnJheVszMl07CisrICAgIHVuc2lnbmVkIGludCBpID0gMDsKKysKKysgICAgaWYg KCghZ3JvdXBzKXx8KCFidWZmZXIpKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrCisrICAg IGcgPSBzdHJkdXAoZ3JvdXBzKTsKKysgICAgaWYgKCFnKSB7CisrICAgICAgICBmcmVlKGJ1 ZmZlcik7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgICAvKiBmaXJz dCBzZXBhcmF0ZSBpbnRvIG4gdG9rZW5zICovCisrICAgIGlmICggdG9rZW5pemUoZ2FycmF5 LCBzaXplb2YoZ2FycmF5KS9zaXplb2YoKmdhcnJheSksIGcpIDwgMCkgeworKyAgICAgICAg ZnJlZShnKTsKKysgICAgICAgIGZyZWUoYnVmZmVyKTsKKysgICAgICAgIHJldHVybiBOVUxM OworKyAgICB9CisrCisrICAgIC8qIGJ1aWxkIHRoZSBmaW5hbCBmaWx0ZXIgZm9ybWF0ICov CisrICAgIHN0cmxjYXQoYnVmZmVyLCBGSUxURVJfR1JPVVBfUFJFRklYLCBidWZmZXJfc2l6 ZSk7CisrICAgIHN0cmxjYXQoYnVmZmVyLCBGSUxURVJfT1JfUFJFRklYLCBidWZmZXJfc2l6 ZSk7CisrICAgIGkgPSAwOworKyAgICB3aGlsZSAoZ2FycmF5W2ldKSB7CisrICAgICAgICBz dHJsY2F0KGJ1ZmZlciwgRklMVEVSX0NOX1BSRUZJWCwgYnVmZmVyX3NpemUpOworKyAgICAg ICAgc3RybGNhdChidWZmZXIsIGdhcnJheVtpXSwgYnVmZmVyX3NpemUpOworKyAgICAgICAg c3RybGNhdChidWZmZXIsIEZJTFRFUl9DTl9TVUZGSVgsIGJ1ZmZlcl9zaXplKTsKKysgICAg ICAgIGkrKzsKKysgICAgfQorKyAgICBzdHJsY2F0KGJ1ZmZlciwgRklMVEVSX09SX1NVRkZJ WCwgYnVmZmVyX3NpemUpOworKyAgICBzdHJsY2F0KGJ1ZmZlciwgRklMVEVSX1VJRF9GT1JN QVQsIGJ1ZmZlcl9zaXplKTsKKysgICAgc3RybGNhdChidWZmZXIsIEZJTFRFUl9HUk9VUF9T VUZGSVgsIGJ1ZmZlcl9zaXplKTsKKysKKysgICAgZnJlZShnKTsKKysgICAgcmV0dXJuIGJ1 ZmZlcjsKKyt9CisrCisrLyogYSBiaXQgZGlydHkgYnV0IGxlYWsgZnJlZSAgKi8KKytjaGFy ICogbGRhcF9wYXJzZV9zZXJ2ZXJzKGNvbnN0IGNoYXIgKiBzZXJ2ZXJzKSB7CisrICAgIGNo YXIgKiBzID0gTlVMTDsKKysgICAgY2hhciAqIHRtcCA9IE5VTEwsICp1cmxzWzMyXTsKKysg ICAgdW5zaWduZWQgaW50IG51bSA9IDAgLCBpID0gMCAsIGFzaXplID0gMDsKKysgICAgTERB UFVSTERlc2MgKnVybGRbMzJdOworKworKyAgICBpZiAoIXNlcnZlcnMpCisrICAgICAgICBy ZXR1cm4gTlVMTDsKKysKKysgICAgLyogbG9jYWwgY29weSBvZiB0aGUgYXJnICovCisrICAg IHMgPSBzdHJkdXAoc2VydmVycyk7CisrICAgIGlmICghcykKKysgICAgICAgIHJldHVybiBO VUxMOworKworKyAgICAvKiBmaXJzdCBzZXBhcmF0ZSBpbnRvIFVSTCB0b2tlbnMgKi8KKysg ICAgaWYgKCB0b2tlbml6ZSh1cmxzLCBzaXplb2YodXJscykvc2l6ZW9mKCp1cmxzKSwgcykg PCAwKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrCisrICAgIGkgPSAwOworKyAgICB3aGls ZSAodXJsc1tpXSkgeworKyAgICAgICAgaWYgKCEgbGRhcF9pc19sZGFwX3VybCh1cmxzW2ld KSB8fAorKyAgICAgICAgICAgKGxkYXBfdXJsX3BhcnNlKHVybHNbaV0sICZ1cmxkW2ldKSAh PSAwKSkgeworKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysg ICAgICAgIGkrKzsKKysgICAgfQorKworKyAgICAvKiBub3cgZnJlZShzKSAqLworKyAgICBm cmVlIChzKTsKKysKKysgICAgLyogaG93IG11Y2ggbWVtb3J5IGRvIHdlIG5lZWQgKi8KKysg ICAgbnVtID0gaTsKKysgICAgZm9yIChpID0gMCA7IGkgPCBudW0gOyBpKyspCisrICAgICAg ICBhc2l6ZSArPSBzdHJsZW4odXJsZFtpXS0+bHVkX2hvc3QpKzExOworKworKyAgICAvKiBh bGxvYyAqLworKyAgICBzID0gKGNoYXIgKikgY2FsbG9jKCBhc2l6ZSsxICwgc2l6ZW9mKGNo YXIpKTsKKysgICAgaWYgKCFzKSB7CisrICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IG51bSA7 IGkrKykKKysgICAgICAgICAgICBsZGFwX2ZyZWVfdXJsZGVzYyh1cmxkW2ldKTsKKysgICAg ICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICAgIC8qIHRoZW4gYnVpbGQgdGhlIGZp bmFsIGhvc3Qgc3RyaW5nICovCisrICAgIGZvciAoaSA9IDAgOyBpIDwgbnVtIDsgaSsrKSB7 CisrICAgICAgICAvKiBidWlsdCBob3N0IHBhcnQgKi8KKysgICAgICAgIHRtcCA9IGxkYXBf YnVpbGRfaG9zdCh1cmxkW2ldLT5sdWRfaG9zdCwgdXJsZFtpXS0+bHVkX3BvcnQpOworKyAg ICAgICAgc3RybmNhdChzLCB0bXAsIHN0cmxlbih0bXApKTsKKysgICAgICAgIGxkYXBfZnJl ZV91cmxkZXNjKHVybGRbaV0pOworKyAgICAgICAgZnJlZSh0bXApOworKyAgICB9CisrCisr ICAgIHJldHVybiBzOworK30KKysKKyt2b2lkIGxkYXBfb3B0aW9uc19wcmludChsZGFwX29w dF90ICogbGRhcCkgeworKyAgICBkZWJ1ZygibGRhcCBvcHRpb25zOiIpOworKyAgICBkZWJ1 Zygic2VydmVyczogJXMiLCBsZGFwLT5zZXJ2ZXJzKTsKKysgICAgaWYgKGxkYXAtPnVfYmFz ZWRuKQorKyAgICAgICAgZGVidWcoInVzZXIgYmFzZWRuOiAlcyIsIGxkYXAtPnVfYmFzZWRu KTsKKysgICAgaWYgKGxkYXAtPmdfYmFzZWRuKQorKyAgICAgICAgZGVidWcoImdyb3VwIGJh c2VkbjogJXMiLCBsZGFwLT5nX2Jhc2Vkbik7CisrICAgIGlmIChsZGFwLT5iaW5kZG4pCisr ICAgICAgICBkZWJ1ZygiYmluZGRuOiAlcyIsIGxkYXAtPmJpbmRkbik7CisrICAgIGlmIChs ZGFwLT5iaW5kcHcpCisrICAgICAgICBkZWJ1ZygiYmluZHB3OiAlcyIsIGxkYXAtPmJpbmRw dyk7CisrICAgIGlmIChsZGFwLT5zZ3JvdXApCisrICAgICAgICBkZWJ1ZygiZ3JvdXA6ICVz IiwgbGRhcC0+c2dyb3VwKTsKKysgICAgaWYgKGxkYXAtPmZpbHRlcikKKysgICAgICAgIGRl YnVnKCJmaWx0ZXI6ICVzIiwgbGRhcC0+ZmlsdGVyKTsKKyt9CisrCisrdm9pZCBsZGFwX29w dGlvbnNfZnJlZShsZGFwX29wdF90ICogbCkgeworKyAgICBpZiAoIWwpCisrICAgICAgICBy ZXR1cm47CisrICAgIGlmIChsLT5zZXJ2ZXJzKQorKyAgICAgICAgZnJlZShsLT5zZXJ2ZXJz KTsKKysgICAgaWYgKGwtPnVfYmFzZWRuKQorKyAgICAgICAgZnJlZShsLT51X2Jhc2Vkbik7 CisrICAgIGlmIChsLT5nX2Jhc2VkbikKKysgICAgICAgIGZyZWUobC0+Z19iYXNlZG4pOwor KyAgICBpZiAobC0+YmluZGRuKQorKyAgICAgICAgZnJlZShsLT5iaW5kZG4pOworKyAgICBp ZiAobC0+YmluZHB3KQorKyAgICAgICAgZnJlZShsLT5iaW5kcHcpOworKyAgICBpZiAobC0+ c2dyb3VwKQorKyAgICAgICAgZnJlZShsLT5zZ3JvdXApOworKyAgICBpZiAobC0+Zmdyb3Vw KQorKyAgICAgICAgZnJlZShsLT5mZ3JvdXApOworKyAgICBpZiAobC0+ZmlsdGVyKQorKyAg ICAgICAgZnJlZShsLT5maWx0ZXIpOworKyAgICBpZiAobC0+bF9jb25mKQorKyAgICAgICAg ZnJlZShsLT5sX2NvbmYpOworKyAgICBmcmVlKGwpOworK30KKysKKysvKiBmcmVlIGtleXMg Ki8KKyt2b2lkIGxkYXBfa2V5c19mcmVlKGxkYXBfa2V5X3QgKiBrKSB7CisrICAgIGxkYXBf dmFsdWVfZnJlZV9sZW4oay0+a2V5cyk7CisrICAgIGZyZWUoayk7CisrICAgIHJldHVybjsK Kyt9CisrCisrbGRhcF9rZXlfdCAqIGxkYXBfZ2V0dXNlcmtleShsZGFwX29wdF90ICpsLCBj b25zdCBjaGFyICogdXNlcikgeworKyAgICBsZGFwX2tleV90ICogayA9IChsZGFwX2tleV90 ICopIGNhbGxvYyAoMSwgc2l6ZW9mKGxkYXBfa2V5X3QpKTsKKysgICAgTERBUE1lc3NhZ2Ug KnJlcywgKmU7CisrICAgIGNoYXIgKiBmaWx0ZXI7CisrICAgIGludCBpOworKworKyAgICBp ZiAoKCFrKSB8fCAoIWwpKQorKyAgICAgICAgIHJldHVybiBOVUxMOworKworKyAgICAvKiBB bSBpIHN0aWxsIGNvbm5lY3RlZCA/IFJFVFJZIG4gdGltZXMgKi8KKysgICAgLyogWFhYIFRP RE86IHNldHVwIHNvbWUgY29uZiB2YWx1ZSBmb3IgcmV0cnlpbmcgKi8KKysgICAgaWYgKCEo bC0+ZmxhZ3MgJiBGTEFHX0NPTk5FQ1RFRCkpCisrICAgICAgICBmb3IgKGkgPSAwIDsgaSA8 IDIgOyBpKyspCisrICAgICAgICAgICAgaWYgKGxkYXBfY29ubmVjdChsKSA9PSAwKQorKyAg ICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgLyogcXVpY2sgY2hlY2sgZm9yIGF0dGVt cHRzIHRvIGJlIGV2aWwgKi8KKysgICAgaWYgKChzdHJjaHIodXNlciwgJygnKSAhPSBOVUxM KSB8fCAoc3RyY2hyKHVzZXIsICcpJykgIT0gTlVMTCkgfHwKKysgICAgICAgIChzdHJjaHIo dXNlciwgJyonKSAhPSBOVUxMKSB8fCAoc3RyY2hyKHVzZXIsICdcXCcpICE9IE5VTEwpKQor KyAgICAgICAgcmV0dXJuIE5VTEw7CisrCisrICAgIC8qIGJ1aWxkICBmaWx0ZXIgZm9yIExE QVAgcmVxdWVzdCAqLworKyAgICBSRVFVRVNUX1VTRVIoZmlsdGVyLCB1c2VyLCBsLT5maWx0 ZXIpOworKworKyAgICBpZiAoIGxkYXBfc2VhcmNoX3N0KCBsLT5sZCwKKysgICAgICAgIGwt PnVfYmFzZWRuLAorKyAgICAgICAgTERBUF9TQ09QRV9TVUJUUkVFLAorKyAgICAgICAgZmls dGVyLAorKyAgICAgICAgYXR0cnMsIDAsICZsLT5zX3RpbWVvdXQsICZyZXMgKSAhPSBMREFQ X1NVQ0NFU1MpIHsKKysgICAgICAgIAorKyAgICAgICAgbGRhcF9wZXJyb3IobC0+bGQsICJs ZGFwX3NlYXJjaF9zdCgpIik7CisrCisrICAgICAgICBmcmVlKGZpbHRlcik7CisrICAgICAg ICBmcmVlKGspOworKworKyAgICAgICAgLyogWFhYIGVycm9yIG9uIHNlYXJjaCwgdGltZW91 dCBldGMuLiBjbG9zZSBhc2sgZm9yIHJlY29ubmVjdCAqLworKyAgICAgICAgbGRhcF9jbG9z ZShsKTsKKysKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9IAorKworKyAgICAvKiBm cmVlICovCisrICAgIGZyZWUoZmlsdGVyKTsKKysKKysgICAgLyogY2hlY2sgaWYgYW55IHJl c3VsdHMgKi8KKysgICAgaSA9IGxkYXBfY291bnRfZW50cmllcyhsLT5sZCxyZXMpOworKyAg ICBpZiAoaSA8PSAwKSB7CisrICAgICAgICBsZGFwX21zZ2ZyZWUocmVzKTsKKysgICAgICAg IGZyZWUoayk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgICBpZiAo aSA+IDEpCisrICAgICAgICBkZWJ1ZygiW0xEQVBdIGR1cGxpY2F0ZSBlbnRyaWVzLCB1c2lu ZyB0aGUgRklSU1QgZW50cnkgcmV0dXJuZWQiKTsKKysKKysgICAgZSA9IGxkYXBfZmlyc3Rf ZW50cnkobC0+bGQsIHJlcyk7CisrICAgIGstPmtleXMgPSBsZGFwX2dldF92YWx1ZXNfbGVu KGwtPmxkLCBlLCBQVUJLRVlBVFRSKTsKKysgICAgay0+bnVtID0gbGRhcF9jb3VudF92YWx1 ZXNfbGVuKGstPmtleXMpOworKworKyAgICBsZGFwX21zZ2ZyZWUocmVzKTsKKysgICAgcmV0 dXJuIGs7CisrfQorKworKworKy8qIC0xIGlmIHRyb3VibGUKKysgICAwIGlmIHVzZXIgaXMg Tk9UIG1lbWJlciBvZiBjdXJyZW50IHNlcnZlciBncm91cAorKyAgIDEgaWYgdXNlciBJUyBN RU1CRVIgb2YgY3VycmVudCBzZXJ2ZXIgZ3JvdXAgCisrICovCisraW50IGxkYXBfaXNtZW1i ZXIobGRhcF9vcHRfdCAqIGwsIGNvbnN0IGNoYXIgKiB1c2VyKSB7CisrICAgIExEQVBNZXNz YWdlICpyZXM7CisrICAgIGNoYXIgKiBmaWx0ZXI7CisrICAgIGludCBpOworKworKyAgICBp ZiAoKCFsLT5zZ3JvdXApIHx8ICEobC0+Z19iYXNlZG4pKQorKyAgICAgICAgcmV0dXJuIDE7 CisrCisrICAgIC8qIEFtIGkgc3RpbGwgY29ubmVjdGVkID8gUkVUUlkgbiB0aW1lcyAqLwor KyAgICAvKiBYWFggVE9ETzogc2V0dXAgc29tZSBjb25mIHZhbHVlIGZvciByZXRyeWluZyAq LworKyAgICBpZiAoIShsLT5mbGFncyAmIEZMQUdfQ09OTkVDVEVEKSkgCisrICAgICAgICBm b3IgKGkgPSAwIDsgaSA8IDIgOyBpKyspCisrICAgICAgICAgICAgaWYgKGxkYXBfY29ubmVj dChsKSA9PSAwKQorKyAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgIC8qIHF1aWNr IGNoZWNrIGZvciBhdHRlbXB0cyB0byBiZSBldmlsICovCisrICAgIGlmICgoc3RyY2hyKHVz ZXIsICcoJykgIT0gTlVMTCkgfHwgKHN0cmNocih1c2VyLCAnKScpICE9IE5VTEwpIHx8Cisr ICAgICAgICAoc3RyY2hyKHVzZXIsICcqJykgIT0gTlVMTCkgfHwgKHN0cmNocih1c2VyLCAn XFwnKSAhPSBOVUxMKSkKKysgICAgICAgIHJldHVybiBGQUlMVVJFOworKworKyAgICAvKiBi dWlsZCBmaWx0ZXIgZm9yIExEQVAgcmVxdWVzdCAqLworKyAgICBSRVFVRVNUX0dST1VQKGZp bHRlciwgbC0+Zmdyb3VwLCB1c2VyKTsKKysKKysgICAgaWYgKGxkYXBfc2VhcmNoX3N0KCBs LT5sZCwgCisrICAgICAgICBsLT5nX2Jhc2VkbiwKKysgICAgICAgIExEQVBfU0NPUEVfU1VC VFJFRSwKKysgICAgICAgIGZpbHRlciwKKysgICAgICAgIE5VTEwsIDAsICZsLT5zX3RpbWVv dXQsICZyZXMpICE9IExEQVBfU1VDQ0VTUykgeworKyAgICAKKysgICAgICAgIGxkYXBfcGVy cm9yKGwtPmxkLCAibGRhcF9zZWFyY2hfc3QoKSIpOworKworKyAgICAgICAgZnJlZShmaWx0 ZXIpOworKworKyAgICAgICAgLyogWFhYIGVycm9yIG9uIHNlYXJjaCwgdGltZW91dCBldGMu LiBjbG9zZSBhc2sgZm9yIHJlY29ubmVjdCAqLworKyAgICAgICAgbGRhcF9jbG9zZShsKTsK KysKKysgICAgICAgIHJldHVybiBGQUlMVVJFOworKyAgICB9CisrCisrICAgIGZyZWUoZmls dGVyKTsKKysKKysgICAgLyogY2hlY2sgaWYgYW55IHJlc3VsdHMgKi8KKysgICAgaWYgKGxk YXBfY291bnRfZW50cmllcyhsLT5sZCwgcmVzKSA+IDApIHsKKysgICAgICAgIGxkYXBfbXNn ZnJlZShyZXMpOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgbGRhcF9t c2dmcmVlKHJlcyk7CisrICAgIHJldHVybiAwOworK30KKysKKysvKgorKyAqIGxkYXAuY29u ZiBzaW1wbGUgcGFyc2VyCisrICogWFhYIFRPRE86ICBzYW5pdHkgY2hlY2tzCisrICogbXVz dCBlaXRoZXIKKysgKiAtIGZyZWUgdGhlIHByZXZpb3VzIGxkYXBfb3B0X2JlZm9yZSByZXBs YWNpbmcgZW50cmllcworKyAqIC0gZnJlZSBlYWNoIG5lY2Vzc2FyeSBwcmV2aW91c2x5IHBh cnNlZCBlbGVtZW50cworKyAqIHJldDoKKysgKiAtMSBvbiBGQUlMVVJFLCAwIG9uIFNVQ0NF U1MKKysgKi8KKytpbnQgbGRhcF9wYXJzZV9sY29uZihsZGFwX29wdF90ICogbCkgeworKyAg ICBGSUxFICogbGNkOyAvKiBsZGFwLmNvbmYgZGVzY3JpcHRvciAqLworKyAgICBjaGFyIGJ1 ZltCVUZTSVpdOworKyAgICBjaGFyICogcyA9IE5VTEwsICogayA9IE5VTEwsICogdiA9IE5V TEw7CisrICAgIGludCBsaSwgbGVuOworKworKyAgICBsY2QgPSBmb3BlbiAobC0+bF9jb25m LCAiciIpOworKyAgICBpZiAobGNkID09IE5VTEwpIHsKKysgICAgICAgIC8qIGRlYnVnKCJD YW5ub3Qgb3BlbiAlcyIsIGwtPmxfY29uZik7ICovCisrICAgICAgICBwZXJyb3IoImxkYXBf cGFyc2VfbGNvbmYoKSIpOworKyAgICAgICAgcmV0dXJuIEZBSUxVUkU7CisrICAgIH0KKysg ICAgCisrICAgIHdoaWxlIChmZ2V0cyAoYnVmLCBzaXplb2YgKGJ1ZiksIGxjZCkgIT0gTlVM TCkgeworKworKyAgICAgICAgaWYgKCpidWYgPT0gJ1xuJyB8fCAqYnVmID09ICcjJykKKysg ICAgICAgICAgICBjb250aW51ZTsKKysKKysgICAgICAgIGsgPSBidWY7CisrICAgICAgICB2 ID0gazsKKysgICAgICAgIHdoaWxlICgqdiAhPSAnXDAnICYmICp2ICE9ICcgJyAmJiAqdiAh PSAnXHQnKQorKyAgICAgICAgICAgIHYrKzsKKysKKysgICAgICAgIGlmICgqdiA9PSAnXDAn KQorKyAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgKih2KyspID0gJ1wwJzsK KysKKysgICAgICAgIHdoaWxlICgqdiA9PSAnICcgfHwgKnYgPT0gJ1x0JykKKysgICAgICAg ICAgICB2Kys7CisrCisrICAgICAgICBsaSA9IHN0cmxlbiAodikgLSAxOworKyAgICAgICAg d2hpbGUgKHZbbGldID09ICcgJyB8fCB2W2xpXSA9PSAnXHQnIHx8IHZbbGldID09ICdcbicp CisrICAgICAgICAgICAgLS1saTsKKysgICAgICAgIHZbbGkgKyAxXSA9ICdcMCc7CisrCisr ICAgICAgICBpZiAoIXN0cmNhc2VjbXAgKGssICJ1cmkiKSkgeworKyAgICAgICAgICAgIGlm ICgobC0+c2VydmVycyA9IGxkYXBfcGFyc2Vfc2VydmVycyh2KSkgPT0gTlVMTCkgeworKyAg ICAgICAgICAgICAgICBmYXRhbCgiZXJyb3IgaW4gbGRhcCBzZXJ2ZXJzIik7CisrICAgICAg ICAgICAgcmV0dXJuIEZBSUxVUkU7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgfQor KyAgICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAgKGssICJiYXNlIikpIHsgCisrICAgICAg ICAgICAgcyA9IHN0cmNociAodiwgJz8nKTsKKysgICAgICAgICAgICBpZiAocyAhPSBOVUxM KSB7CisrICAgICAgICAgICAgICAgIGxlbiA9IHMgLSB2OworKyAgICAgICAgICAgICAgICBs LT51X2Jhc2VkbiA9IG1hbGxvYyAobGVuICsgMSk7CisrICAgICAgICAgICAgICAgIHN0cm5j cHkgKGwtPnVfYmFzZWRuLCB2LCBsZW4pOworKyAgICAgICAgICAgICAgICBsLT51X2Jhc2Vk bltsZW5dID0gJ1wwJzsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAg ICBsLT51X2Jhc2VkbiA9IHN0cmR1cCAodik7CisrICAgICAgICAgICAgfQorKyAgICAgICAg fQorKyAgICAgICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAgKGssICJiaW5kZG4iKSkgeworKyAg ICAgICAgICAgIGwtPmJpbmRkbiA9IHN0cmR1cCAodik7CisrICAgICAgICB9CisrICAgICAg ICBlbHNlIGlmICghc3RyY2FzZWNtcCAoaywgImJpbmRwdyIpKSB7CisrICAgICAgICAgICAg bC0+YmluZHB3ID0gc3RyZHVwICh2KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYg KCFzdHJjYXNlY21wIChrLCAidGltZWxpbWl0IikpIHsKKysgICAgICAgICAgICBsLT5zX3Rp bWVvdXQudHZfc2VjID0gYXRvaSAodik7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg IGVsc2UgaWYgKCFzdHJjYXNlY21wIChrLCAiYmluZF90aW1lbGltaXQiKSkgeworKyAgICAg ICAgICAgIGwtPmJfdGltZW91dC50dl9zZWMgPSBhdG9pICh2KTsKKysgICAgICAgIH0KKysg ICAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wIChrLCAic3NsIikpIHsKKysgICAgICAgICAg ICBpZiAoIXN0cmNhc2VjbXAgKHYsICJzdGFydF90bHMiKSkKKysgICAgICAgICAgICAgICAg bC0+dGxzID0gMTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBmY2xvc2UgKGxjZCk7 CisrICAgIHJldHVybiBTVUNDRVNTOworK30KKysKKysjZW5kaWYgLyogV0lUSF9MREFQX1BV QktFWSAqLworZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJl aicgbGRhcGF1dGguaCBsZGFwYXV0aC5oCistLS0gbGRhcGF1dGguaAkxOTY5LTEyLTMxIDE2 OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxkYXBhdXRoLmgJMjAwOC0wOC0yMyAxNTow Mjo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0wLDAgKzEsMTI0IEBACisrLyoKKysgKiAkSWQ6 IG9wZW5zc2gtbHBrLTQuM3AxLTAuMy43LnBhdGNoLHYgMS4zIDIwMDYvMDQvMTggMTU6Mjk6 MDkgZWF1IEV4cCAkIAorKyAqLworKworKy8qCisrICoKKysgKiBDb3B5cmlnaHQgKGMpIDIw MDUsIEVyaWMgQVVHRSA8ZWF1QHBoZWFyLm9yZz4KKysgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKyAqCisr ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KKysgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwaGVhci5vcmcgbm9y IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC VVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIAorKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKysgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q WVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIAorKyAqIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IAorKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgCisrICogT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqCisrICovCisrCisrI2lmbmRlZiBMREFQ QVVUSF9ICisrI2RlZmluZSBMREFQQVVUSF9ICisrCisrI2RlZmluZSBMREFQX0RFUFJFQ0FU RUQgMQorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorKyNp bmNsdWRlIDxsZGFwLmg+CisrI2luY2x1ZGUgPGxiZXIuaD4KKysKKysvKiB0b2tlbnMgaW4g dXNlIGZvciBjb25maWcgKi8KKysjZGVmaW5lIF9ERUZBVUxUX0xQS19UT0tFTiAiVXNlTFBL IgorKyNkZWZpbmUgX0RFRkFVTFRfU1JWX1RPS0VOICJMcGtTZXJ2ZXJzIgorKyNkZWZpbmUg X0RFRkFVTFRfVVNSX1RPS0VOICJMcGtVc2VyRE4iCisrI2RlZmluZSBfREVGQVVMVF9HUlBf VE9LRU4gIkxwa0dyb3VwRE4iCisrI2RlZmluZSBfREVGQVVMVF9CRE5fVE9LRU4gIkxwa0Jp bmRETiIKKysjZGVmaW5lIF9ERUZBVUxUX0JQV19UT0tFTiAiTHBrQmluZFB3IgorKyNkZWZp bmUgX0RFRkFVTFRfTVlHX1RPS0VOICJMcGtTZXJ2ZXJHcm91cCIKKysjZGVmaW5lIF9ERUZB VUxUX0ZJTF9UT0tFTiAiTHBrRmlsdGVyIgorKyNkZWZpbmUgX0RFRkFVTFRfVExTX1RPS0VO ICJMcGtGb3JjZVRMUyIKKysjZGVmaW5lIF9ERUZBVUxUX0JUSV9UT0tFTiAiTHBrQmluZFRp bWVsaW1pdCIKKysjZGVmaW5lIF9ERUZBVUxUX1NUSV9UT0tFTiAiTHBrU2VhcmNoVGltZWxp bWl0IgorKyNkZWZpbmUgX0RFRkFVTFRfTERQX1RPS0VOICJMcGtMZGFwQ29uZiIKKysKKysv KiBkZWZhdWx0IG9wdGlvbnMgKi8KKysjZGVmaW5lIF9ERUZBVUxUX0xQS19PTiAwCisrI2Rl ZmluZSBfREVGQVVMVF9MUEtfU0VSVkVSUyBOVUxMCisrI2RlZmluZSBfREVGQVVMVF9MUEtf VUROIE5VTEwKKysjZGVmaW5lIF9ERUZBVUxUX0xQS19HRE4gTlVMTAorKyNkZWZpbmUgX0RF RkFVTFRfTFBLX0JJTkRETiBOVUxMCisrI2RlZmluZSBfREVGQVVMVF9MUEtfQklORFBXIE5V TEwKKysjZGVmaW5lIF9ERUZBVUxUX0xQS19TR1JPVVAgTlVMTAorKyNkZWZpbmUgX0RFRkFV TFRfTFBLX0ZJTFRFUiBOVUxMCisrI2RlZmluZSBfREVGQVVMVF9MUEtfVExTIC0xCisrI2Rl ZmluZSBfREVGQVVMVF9MUEtfQlRJTUVPVVQgMTAKKysjZGVmaW5lIF9ERUZBVUxUX0xQS19T VElNRU9VVCAxMAorKyNkZWZpbmUgX0RFRkFVTFRfTFBLX0xEUCBOVUxMCisrCisrLyogZmxh Z3MgKi8KKysjZGVmaW5lIEZMQUdfRU1QVFkJICAgIDB4MDAwMDAwMDAKKysjZGVmaW5lIEZM QUdfQ09OTkVDVEVECSAgICAweDAwMDAwMDAxCisrCisrLyogZmxhZyBtYWNyb3MgKi8KKysj ZGVmaW5lIEZMQUdfU0VUX0VNUFRZKHgpCQl4Jj0oRkxBR19FTVBUWSkKKysjZGVmaW5lIEZM QUdfU0VUX0NPTk5FQ1RFRCh4KQkJeHw9KEZMQUdfQ09OTkVDVEVEKQorKyNkZWZpbmUgRkxB R19TRVRfRElTQ09OTkVDVEVEKHgpCXgmPX4oRkxBR19DT05ORUNURUQpCisrCisrLyogZGVm aW5lcyAqLworKyNkZWZpbmUgRkFJTFVSRSAtMQorKyNkZWZpbmUgU1VDQ0VTUyAwCisrI2Rl ZmluZSBQVUJLRVlBVFRSICJzc2hQdWJsaWNLZXkiCisrCisrLyogCisrICoKKysgKiBkZWZp bmVkIGZpbGVzIHBhdGggCisrICogKHNob3VsZCBiZSByZWxvY2F0ZWQgdG8gcGF0aG5hbWVz LmgsCisrICogaWYgb25lIGRheSBpdCdzIGluY2x1ZGVkIHdpdGhpbiB0aGUgdHJlZSkgCisr ICoKKysgKi8KKysjZGVmaW5lIF9QQVRIX0xEQVBfQ09ORklHX0ZJTEUgIi9ldGMvbGRhcC5j b25mIgorKworKy8qIHN0cnVjdHVyZXMgKi8KKyt0eXBlZGVmIHN0cnVjdCBsZGFwX29wdGlv bnMgeworKyAgICBpbnQgb247CQkJLyogVXNlIGl0IG9yIE5PVCAqLworKyAgICBMREFQICog bGQ7CQkJLyogTERBUCBmaWxlIGRlc2MgKi8KKysgICAgY2hhciAqIHNlcnZlcnM7CQkvKiBw YXJzZWQgc2VydmVycyBmb3IgbGRhcGxpYiBmYWlsb3ZlciBoYW5kbGluZyAqLworKyAgICBj aGFyICogdV9iYXNlZG47CQkvKiB1c2VyIGJhc2VkbiAqLworKyAgICBjaGFyICogZ19iYXNl ZG47CQkvKiBncm91cCBiYXNlZG4gKi8KKysgICAgY2hhciAqIGJpbmRkbjsJCS8qIGJpbmRk biAqLworKyAgICBjaGFyICogYmluZHB3OwkJLyogYmluZCBwYXNzd29yZCAqLworKyAgICBj aGFyICogc2dyb3VwOwkJLyogc2VydmVyIGdyb3VwICovCisrICAgIGNoYXIgKiBmZ3JvdXA7 CQkvKiBncm91cCBmaWx0ZXIgKi8KKysgICAgY2hhciAqIGZpbHRlcjsJCS8qIGFkZGl0aW9u YWwgZmlsdGVyICovCisrICAgIGNoYXIgKiBsX2NvbmY7CQkvKiB1c2UgbGRhcC5jb25mICov CisrICAgIGludCB0bHM7CQkJLyogVExTIG9ubHkgKi8KKysgICAgc3RydWN0IHRpbWV2YWwg Yl90aW1lb3V0OyAgIC8qIGJpbmQgdGltZW91dCAqLworKyAgICBzdHJ1Y3QgdGltZXZhbCBz X3RpbWVvdXQ7ICAgLyogc2VhcmNoIHRpbWVvdXQgKi8KKysgICAgdW5zaWduZWQgaW50IGZs YWdzOwkJLyogbWlzYyBmbGFncyAocmVjb25uZWN0aW9uLCBmdXR1cmUgdXNlPykgKi8KKyt9 IGxkYXBfb3B0X3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QgbGRhcF9rZXlzIHsKKysgICAgc3Ry dWN0IGJlcnZhbCAqKiBrZXlzOwkvKiB0aGUgcHVibGljIGtleXMgcmV0cmlldmVkICovCisr ICAgIHVuc2lnbmVkIGludCBudW07CQkvKiBudW1iZXIgb2Yga2V5cyAqLworK30gbGRhcF9r ZXlfdDsKKysKKysKKysvKiBmdW5jdGlvbiBoZWFkZXJzICovCisrdm9pZCBsZGFwX2Nsb3Nl KGxkYXBfb3B0X3QgKik7CisraW50IGxkYXBfY29ubmVjdChsZGFwX29wdF90ICopOworK2No YXIgKiBsZGFwX3BhcnNlX2dyb3Vwcyhjb25zdCBjaGFyICopOworK2NoYXIgKiBsZGFwX3Bh cnNlX3NlcnZlcnMoY29uc3QgY2hhciAqKTsKKyt2b2lkIGxkYXBfb3B0aW9uc19wcmludChs ZGFwX29wdF90ICopOworK3ZvaWQgbGRhcF9vcHRpb25zX2ZyZWUobGRhcF9vcHRfdCAqKTsK Kyt2b2lkIGxkYXBfa2V5c19mcmVlKGxkYXBfa2V5X3QgKik7CisraW50IGxkYXBfcGFyc2Vf bGNvbmYobGRhcF9vcHRfdCAqKTsKKytsZGFwX2tleV90ICogbGRhcF9nZXR1c2Vya2V5KGxk YXBfb3B0X3QgKiwgY29uc3QgY2hhciAqKTsKKytpbnQgbGRhcF9pc21lbWJlcihsZGFwX29w dF90ICosIGNvbnN0IGNoYXIgKik7CisrCisrI2VuZGlmCitkaWZmIC1OdWFyIC0tZXhjbHVk ZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBscGstdXNlci1leGFtcGxlLnR4dCBscGst dXNlci1leGFtcGxlLnR4dAorLS0tIGxway11c2VyLWV4YW1wbGUudHh0CTE5NjktMTItMzEg MTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgbHBrLXVzZXItZXhhbXBsZS50eHQJMjAw OC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0wLDAgKzEsMTE3IEBACisr CisrUG9zdCB0byBNTCAtPiBVc2VyIE1hZGUgUXVpY2sgSW5zdGFsbCBEb2MuCisrQ29udHJp YnV0aW9uIGZyb20gSm9obiBMYW5lIDxqb2huQGxhbmUudWsubmV0PgorKworKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKKysKKytPcGVuU1NIIExEQVAga2V5c3RvcmUgUGF0Y2gKKys9PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysKKytOT1RFOiB0aGVzZSBub3RlcyBhcmUgYSB0 cmFuc2NyaXB0IG9mIGEgc3BlY2lmaWMgaW5zdGFsbGF0aW9uCisrICAgICAgdGhleSB3b3Jr IGZvciBtZSwgeW91ciBzcGVjaWZpY3MgbWF5IGJlIGRpZmZlcmVudCEKKysgICAgICBmcm9t IEpvaG4gTGFuZSBNYXJjaCAxN3RoIDIwMDUgICAgICAgICBqb2huQGxhbmUudWsubmV0Cisr CisrVGhpcyBpcyBhIHBhdGNoIHRvIE9wZW5TU0ggNC4wcDEgdG8gYWxsb3cgaXQgdG8gb2J0 YWluIHVzZXJzJyBwdWJsaWMga2V5cworK2Zyb20gdGhlaXIgTERBUCByZWNvcmQgYXMgYW4g YWx0ZXJuYXRpdmUgdG8gfi8uc3NoL2F1dGhvcml6ZWRfa2V5cy4KKysKKysoQXNzdW1pbmcg aGVyZSB0aGF0IG5lY2Vzc2FyeSBidWlsZCBzdHVmZiBpcyBpbiAkQlVJTEQpCisrCisrY2Qg JEJVSUxEL29wZW5zc2gtNC4wcDEKKytwYXRjaCAtTnAxIC1pICRCVUlMRC9vcGVuc3NoLWxw ay00LjBwMS0wLjMucGF0Y2gKKytta2RpciAtcCAvdmFyL2VtcHR5ICYmCisrLi9jb25maWd1 cmUgLS1wcmVmaXg9L3VzciAtLXN5c2NvbmZkaXI9L2V0Yy9zc2ggXAorKyAgICAtLWxpYmV4 ZWNkaXI9L3Vzci9zYmluIC0td2l0aC1tZDUtcGFzc3dvcmRzIC0td2l0aC1wYW0gXAorKyAg ICAtLXdpdGgtbGlicz0iLWxsZGFwIiAtLXdpdGgtY3BwZmxhZ3M9Ii1EV0lUSF9MREFQX1BV QktFWSIKKytOb3cgZG8uCisrbWFrZSAmJgorK21ha2UgaW5zdGFsbAorKworK0FkZCB0aGUg Zm9sbG93aW5nIGNvbmZpZyB0byAvZXRjL3NzaC9zc2hfY29uZmlnCisrVXNlTFBLIHllcwor K0xwa1NlcnZlcnMgbGRhcDovL215aG9zdC5teWRvbWFpbi5jb20KKytMcGtVc2VyRE4gIG91 PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20KKysKKytXZSBuZWVkIHRvIHRlbGwgc3NoZCBh Ym91dCB0aGUgU1NMIGtleXMgZHVyaW5nIGJvb3QsIGFzIHJvb3QncworK2Vudmlyb25tZW50 IGRvZXMgbm90IGV4aXN0IGF0IHRoYXQgdGltZS4gRWRpdCAvZXRjL3JjLmQvaW5pdC5kL3Nz aGQuCisrQ2hhbmdlIHRoZSBzdGFydHVwIGNvZGUgZnJvbSB0aGlzOgorKyAgICAgICAgICAg ICAgICBlY2hvICJTdGFydGluZyBTU0ggU2VydmVyLi4uIgorKyAgICAgICAgICAgICAgICBs b2FkcHJvYyAvdXNyL3NiaW4vc3NoZAorKyAgICAgICAgICAgICAgICA7OworK3RvIHRoaXM6 CisrICAgICAgICAgICAgICAgIGVjaG8gIlN0YXJ0aW5nIFNTSCBTZXJ2ZXIuLi4iCisrICAg ICAgICAgICAgICAgIExEQVBSQz0iL3Jvb3QvLmxkYXByYyIgbG9hZHByb2MgL3Vzci9zYmlu L3NzaGQKKysgICAgICAgICAgICAgICAgOzsKKysKKytSZS1zdGFydCB0aGUgc3NoZCBkYWVt b246CisrL2V0Yy9yYy5kL2luaXQuZC9zc2hkIHJlc3RhcnQKKysKKytJbnN0YWxsIHRoZSBh ZGRpdGlvbmFsIExEQVAgc2NoZW1hCisrY3AgJEJVSUxEL29wZW5zc2gtbHBrLTAuMi5zY2hl bWEgIC9ldGMvb3BlbmxkYXAvc2NoZW1hL29wZW5zc2guc2NoZW1hCisrCisrTm93IGFkZCB0 aGUgb3BlblNTSCBMREFQIHNjaGVtYSB0byAvZXRjL29wZW5sZGFwL3NsYXBkLmNvbmY6Cisr QWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgYmxvY2sgb2Yg c2NoZW1hIGluY2x1ZGVzCisraW5jbHVkZSAgICAgICAgIC9ldGMvb3BlbmxkYXAvc2NoZW1h L29wZW5zc2guc2NoZW1hCisrCisrUmUtc3RhcnQgdGhlIExEQVAgc2VydmVyOgorKy9ldGMv cmMuZC9pbml0LmQvc2xhcGQgcmVzdGFydAorKworK1RvIGFkZCBvbmUgb3IgbW9yZSBwdWJs aWMga2V5cyB0byBhIHVzZXIsIGVnICJ0ZXN0dXNlciIgOgorK2xkYXBzZWFyY2ggLXggLVcg LVogLUxMTCAtYiAidWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20i IC1ECisrInVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIiA+IC90 bXAvdGVzdHVzZXIKKysKKythcHBlbmQgdGhlIGZvbGxvd2luZyB0byB0aGlzIC90bXAvdGVz dHVzZXIgZmlsZQorK29iamVjdGNsYXNzOiBsZGFwUHVibGljS2V5Cisrc3NoUHVibGljS2V5 OiBzc2gtcnNhCisrQUFBQUIzTnphQzF5YzJFQUFBQUJKUUFBQUlCM2RzcndxWHFEN0U0ellZ cnh3ZERLQlVReEtNaW9YeTlweEZWYWk2NGtBUHhqVTlLUworK3FJbzdRZmtqc2xmc2pmbGtz amZsZGZranNsZGZqTFgvNXprelJtVDI4STVwaUd6dW5QdjE3Uzg5ejhYd1NzdUFvUjF0ODZ0 KzVkbEkKKys3ZVpFL2dWYm4yVVFrUXE3K2tkRFRTMnlYVjZWbkM1Mk4va0tMRzNjaUJrQkF3 PT0gR2VuZXJhbCBQdXJwb3NlIFJTQSBLZXkKKysKKytUaGVuIGRvIGEgbW9kaWZ5OgorK2xk YXBtb2RpZnkgLXggLUQgInVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9 Y29tIiAtVyAtZgorKy90bXAvdGVzdHVzZXIgLVoKKytFbnRlciBMREFQIFBhc3N3b3JkOgor K21vZGlmeWluZyBlbnRyeSAidWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1teWRvbWFpbixk Yz1jb20iCisrQW5kIGNoZWNrIHRoZSBtb2RpZnkgaXMgb2s6CisrbGRhcHNlYXJjaCAteCAt VyAtWiAtYiAidWlkPXRlc3R1c2VyLG91PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20iIC1E CisrInVpZD10ZXN0dXNlcixvdT1QZW9wbGUsZGM9bXlkb21haW4sZGM9Y29tIgorK0VudGVy IExEQVAgUGFzc3dvcmQ6CisrIyBleHRlbmRlZCBMRElGCisrIworKyMgTERBUHYzCisrIyBi YXNlIDx1aWQ9dGVzdHVzZXIsb3U9UGVvcGxlLGRjPW15ZG9tYWluLGRjPWNvbT4gd2l0aCBz Y29wZSBzdWIKKysjIGZpbHRlcjogKG9iamVjdGNsYXNzPSopCisrIyByZXF1ZXN0aW5nOiBB TEwKKysjCisrCisrIyB0ZXN0dXNlciwgUGVvcGxlLCBteWRvbWFpbi5jb20KKytkbjogdWlk PXRlc3R1c2VyLG91PVBlb3BsZSxkYz1teWRvbWFpbixkYz1jb20KKyt1aWQ6IHRlc3R1c2Vy CisrY246IHRlc3R1c2VyCisrb2JqZWN0Q2xhc3M6IGFjY291bnQKKytvYmplY3RDbGFzczog cG9zaXhBY2NvdW50Cisrb2JqZWN0Q2xhc3M6IHRvcAorK29iamVjdENsYXNzOiBzaGFkb3dB Y2NvdW50Cisrb2JqZWN0Q2xhc3M6IGxkYXBQdWJsaWNLZXkKKytzaGFkb3dMYXN0Q2hhbmdl OiAxMjc1NworK3NoYWRvd01heDogOTk5OTkKKytzaGFkb3dXYXJuaW5nOiA3CisrbG9naW5T aGVsbDogL2Jpbi9iYXNoCisrdWlkTnVtYmVyOiA5OTk5CisrZ2lkTnVtYmVyOiA1MDEKKyto b21lRGlyZWN0b3J5OiAvaG9tZS90ZXN0dXNlcgorK3VzZXJQYXNzd29yZDo6IGUxTlRTRUY5 VURnd1YxaG5NMVZqVURSSkswazFZbkZpTDFkNFpVSk9iWGxaWjNaM1VUVT0KKytzc2hQdWJs aWNLZXk6IHNzaC1yc2EKKytBQUFBQjNOemFDMXljMkVBQUFBQkpRQUFBSUIzZHNyd3FYcUQ3 RTR6WVlyeHdkREtCVVF4S01pb1h5OXB4RlZhaTY0a0FQeGpVOUtTcUlvN1Fma2pzbGZzamZs a3NqZmxkZmtqc2xkZmpMWC81emt6Um1UMjhJNXBpR3p1blB2MTdTODl6CisrOFh3U3N1QW9S MXQ4NnQrNWRsSTdlWkUvZ1ZibjJVUWtRcTcra2REVFMyeVhWNlZuQzUyTi9rS0xHM2NpQmtC QXc9PSBHZW5lcmFsIFB1cnBvc2UgUlNBIEtleQorKworKyMgc2VhcmNoIHJlc3VsdAorK3Nl YXJjaDogMworK3Jlc3VsdDogMCBTdWNjZXNzCisrCisrIyBudW1SZXNwb25zZXM6IDIKKysj IG51bUVudHJpZXM6IDEKKysKKytOb3cgc3RhcnQgYSBzc2ggc2Vzc2lvbiB0byB1c2VyICJ0 ZXN0dXNlciIgZnJvbSB1c3VhbCBzc2ggY2xpZW50IChlLmcuCisrcHVUVFkpLiBMb2dpbiBz aG91bGQgc3VjY2VlZC4KKysKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitkaWZmIC1OdWFy IC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUgJyoucmVqJyBNYWtlZmlsZS5pbiBNYWtl ZmlsZS5pbgorLS0tIE1ha2VmaWxlLmluCTIwMDgtMDctMDggMDc6MjE6MTIuMDAwMDAwMDAw IC0wNzAwCisrKysgTWFrZWZpbGUuaW4JMjAwOC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAg LTA3MDAKK0BAIC04Nyw3ICs4Nyw3IEBACisgCWF1dGgta3JiNS5vIFwKKyAJYXV0aDItZ3Nz Lm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gXAorIAlsb2dpbnJlYy5vIGF1dGgtcGFt Lm8gYXV0aC1zaGFkb3cubyBhdXRoLXNpYS5vIG1kNWNyeXB0Lm8gXAorLQlhdWRpdC5vIGF1 ZGl0LWJzbS5vIHBsYXRmb3JtLm8gc2Z0cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKKysJ YXVkaXQubyBhdWRpdC1ic20ubyBwbGF0Zm9ybS5vIGxkYXBhdXRoLm8gc2Z0cC1zZXJ2ZXIu byBzZnRwLWNvbW1vbi5vIFwKKyAJcm9hbWluZ19jb21tb24ubworIAorIE1BTlBBR0VTCT0g bW9kdWxpLjUub3V0IHNjcC4xLm91dCBzc2gtYWRkLjEub3V0IHNzaC1hZ2VudC4xLm91dCBz c2gta2V5Z2VuLjEub3V0IHNzaC1rZXlzY2FuLjEub3V0IHNzaC4xLm91dCBzc2hkLjgub3V0 IHNmdHAtc2VydmVyLjgub3V0IHNmdHAuMS5vdXQgc3NoLXJhbmQtaGVscGVyLjgub3V0IHNz aC1rZXlzaWduLjgub3V0IHNzaGRfY29uZmlnLjUub3V0IHNzaF9jb25maWcuNS5vdXQKK2Rp ZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIG9wZW5zc2gt bHBrX29wZW5sZGFwLnNjaGVtYSBvcGVuc3NoLWxwa19vcGVubGRhcC5zY2hlbWEKKy0tLSBv cGVuc3NoLWxwa19vcGVubGRhcC5zY2hlbWEJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAw MDAgLTA4MDAKKysrKyBvcGVuc3NoLWxwa19vcGVubGRhcC5zY2hlbWEJMjAwOC0wOC0yMyAx NTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0wLDAgKzEsMTkgQEAKKysjCisrIyBMREFQ IFB1YmxpYyBLZXkgUGF0Y2ggc2NoZW1hIGZvciB1c2Ugd2l0aCBvcGVuc3NoLWxkYXBwdWJr ZXkKKysjIEF1dGhvcjogRXJpYyBBVUdFIDxlYXVAcGhlYXIub3JnPgorKyMgCisrIyBCYXNl ZCBvbiB0aGUgcHJvcG9zYWwgb2YgOiBNYXJrIFJ1aWp0ZXIKKysjCisrCisrCisrIyBvY3Rl dFN0cmluZyBTWU5UQVgKKythdHRyaWJ1dGV0eXBlICggMS4zLjYuMS40LjEuMjQ1NTIuNTAw LjEuMS4xLjEzIE5BTUUgJ3NzaFB1YmxpY0tleScgCisrCURFU0MgJ01BTkRBVE9SWTogT3Bl blNTSCBQdWJsaWMga2V5JyAKKysJRVFVQUxJVFkgb2N0ZXRTdHJpbmdNYXRjaAorKwlTWU5U QVggMS4zLjYuMS40LjEuMTQ2Ni4xMTUuMTIxLjEuNDAgKQorKworKyMgcHJpbnRhYmxlU3Ry aW5nIFNZTlRBWCB5ZXN8bm8KKytvYmplY3RjbGFzcyAoIDEuMy42LjEuNC4xLjI0NTUyLjUw MC4xLjEuMi4wIE5BTUUgJ2xkYXBQdWJsaWNLZXknIFNVUCB0b3AgQVVYSUxJQVJZCisrCURF U0MgJ01BTkRBVE9SWTogT3BlblNTSCBMUEsgb2JqZWN0Y2xhc3MnCisrCU1VU1QgKCBzc2hQ dWJsaWNLZXkgJCB1aWQgKSAKKysJKQorZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycg LS1leGNsdWRlICcqLnJlaicgb3BlbnNzaC1scGtfc3VuLnNjaGVtYSBvcGVuc3NoLWxwa19z dW4uc2NoZW1hCistLS0gb3BlbnNzaC1scGtfc3VuLnNjaGVtYQkxOTY5LTEyLTMxIDE2OjAw OjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIG9wZW5zc2gtbHBrX3N1bi5zY2hlbWEJMjAwOC0w OC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0wLDAgKzEsMjEgQEAKKysjCisr IyBMREFQIFB1YmxpYyBLZXkgUGF0Y2ggc2NoZW1hIGZvciB1c2Ugd2l0aCBvcGVuc3NoLWxk YXBwdWJrZXkKKysjIEF1dGhvcjogRXJpYyBBVUdFIDxlYXVAcGhlYXIub3JnPgorKyMgCisr IyBTY2hlbWEgZm9yIFN1biBEaXJlY3RvcnkgU2VydmVyLgorKyMgQmFzZWQgb24gdGhlIG9y aWdpbmFsIHNjaGVtYSwgbW9kaWZpZWQgYnkgU3RlZmFuIEZpc2NoZXIuCisrIworKworK2Ru OiBjbj1zY2hlbWEKKysKKysjIG9jdGV0U3RyaW5nIFNZTlRBWAorK2F0dHJpYnV0ZVR5cGVz OiAoIDEuMy42LjEuNC4xLjI0NTUyLjUwMC4xLjEuMS4xMyBOQU1FICdzc2hQdWJsaWNLZXkn IAorKwlERVNDICdNQU5EQVRPUlk6IE9wZW5TU0ggUHVibGljIGtleScgCisrCUVRVUFMSVRZ IG9jdGV0U3RyaW5nTWF0Y2gKKysJU1lOVEFYIDEuMy42LjEuNC4xLjE0NjYuMTE1LjEyMS4x LjQwICkKKysKKysjIHByaW50YWJsZVN0cmluZyBTWU5UQVggeWVzfG5vCisrb2JqZWN0Q2xh c3NlczogKCAxLjMuNi4xLjQuMS4yNDU1Mi41MDAuMS4xLjIuMCBOQU1FICdsZGFwUHVibGlj S2V5JyBTVVAgdG9wIEFVWElMSUFSWQorKwlERVNDICdNQU5EQVRPUlk6IE9wZW5TU0ggTFBL IG9iamVjdGNsYXNzJworKwlNVVNUICggc3NoUHVibGljS2V5ICQgdWlkICkgCisrCSkKK2Rp ZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIFJFQURNRS5s cGsgUkVBRE1FLmxwaworLS0tIFJFQURNRS5scGsJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAw MDAwMDAgLTA4MDAKKysrKyBSRUFETUUubHBrCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAw MDAwIC0wNzAwCitAQCAtMCwwICsxLDI2NyBAQAorK09wZW5TU0ggTERBUCBQVUJMSUMgS0VZ IFBBVENIIAorK0NvcHlyaWdodCAoYykgMjAwMyBFcmljIEFVR0UgKGVhdUBwaGVhci5vcmcp CisrQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysKKytSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyttb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKythcmUgbWV0OgorKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKzIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrMy4gVGhlIG5h bWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzCisrICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisrCisrVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKytJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTCisrT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKytJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisr SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorK0RBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWQorK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQKKysoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKytUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKworK3B1cnBvc2VzIG9mIHRoaXMgcGF0Y2g6CisrCisrVGhpcyBwYXRjaCB3b3VsZCBo ZWxwIHRvIGhhdmUgYXV0aGVudGljYXRpb24gY2VudHJhbGl6YXRpb24gcG9saWN5CisrdXNp bmcgc3NoIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24uCisrVGhpcyBwYXRjaCBjb3VsZCBi ZSBhbiBhbHRlcm5hdGl2ZSB0byBvdGhlciAic2VjdXJlIiBhdXRoZW50aWNhdGlvbiBzeXN0 ZW0KKyt3b3JraW5nIGluIGEgc2ltaWxhciB3YXkgKEtlcmJlcm9zLCBTZWN1cklELCBldGMu Li4pLCBleGNlcHQgdGhlIGZhY3QgCisrdGhhdCBpdCdzIGJhc2VkIG9uIE9wZW5TU0ggYW5k IGl0cyBwdWJsaWMga2V5IGFiaWxpdGllcy4KKysKKys+PiBGWUk6IDw8CisrJ3VpZCc6IG1l YW5zIHVuaXggYWNjb3VudHMgZXhpc3Rpbmcgb24gdGhlIGN1cnJlbnQgc2VydmVyCisrJ2xw a1NlcnZlckdyb3VwOicgbWVhbiBzZXJ2ZXIgZ3JvdXAgY29uZmlndXJlZCBvbiB0aGUgY3Vy cmVudCBzZXJ2ZXIgKCdscGtTZXJ2ZXJHcm91cCcgaW4gc3NoZF9jb25maWcpCisrCisrZXhh bXBsZSBzY2hlbWE6CisrCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlcnZlcjEgKHVpZDogZWF1LHJpdmFsLHRvdG8pIChscGtTZXJ2ZXJHcm91cDogdW5peCkK KysgICAgICAgICAgICAgICAgX19fX19fX19fX18gICAgICAvCisrICAgICAgICAgICAgICAg LyAgICAgICAgICAgXCAtLS0gLSBzZXJ2ZXIzICh1aWQ6IGVhdSwgdGl0aSkgKGxwa1NlcnZl ckdyb3VwOiB1bml4KQorKyAgICAgICAgICAgICAgfCBMREFQIFNlcnZlciB8ICAgIFwKKysJ ICAgICAgfCBlYXUgICxyaXZhbCB8ICAgICBzZXJ2ZXIyICh1aWQ6IHJpdmFsLCBlYXUpIChs cGtTZXJ2ZXJHcm91cDogdW5peCkKKysJICAgICAgfCB0aXRpICx0b3RvICB8CisrCSAgICAg IHwgdXNlcngsLi4uLiAgfCAgICAgICAgIHNlcnZlcjUgKHVpZDogZWF1KSAgKGxwa1NlcnZl ckdyb3VwOiBtYWlsKQorKyAgICAgICAgICAgICAgIFxfX19fX19fX19fXy8gXCAgICAgICAv CisrCSAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gLSBzZXJ2ZXI0ICh1aWQ6IGVhdSwg cml2YWwpICAobm8gZ3JvdXAgY29uZmlndXJlZCkKKysJCQkgICAgICAgICAgICAgXAorKwkJ CQkgICAgICAgIGV0Yy4uLgorKworKy0gV0hBVCBXRSBORUVEIDoKKysKKysgICogY29uZmln dXJlZCBMREFQIHNlcnZlciBzb21ld2hlcmUgb24gdGhlIG5ldHdvcmsgKGkuZS4gT3BlbkxE QVApCisrICAqIHBhdGNoZWQgc3NoZCAod2l0aCB0aGlzIHBhdGNoIDspCisrICAqIExEQVAg dXNlcigvZ3JvdXApIGVudHJ5IChsb29rIGF0IHVzZXJzLmxkaWYgKCYgZ3JvdXBzLmxkaWYp KToKKysgICAgICAgIFVzZXIgZW50cnk6CisrCS0gYXR0YWNoZWQgdG8gdGhlICdsZGFwUHVi bGljS2V5JyBvYmplY3RjbGFzcworKwktIGF0dGFjaGVkIHRvIHRoZSAncG9zaXhBY2NvdW50 JyBvYmplY3RjbGFzcworKwktIHdpdGggYSBmaWxsZWQgJ3NzaFB1YmxpY0tleScgYXR0cmli dXRlIAorKwlFeGFtcGxlOgorKwkJZG46IHVpZD1lYXUsb3U9dXNlcnMsZGM9Y3Vja29vcyxk Yz1uZXQKKysJCW9iamVjdGNsYXNzOiB0b3AKKysJCW9iamVjdGNsYXNzOiBwZXJzb24KKysJ CW9iamVjdGNsYXNzOiBvcmdhbml6YXRpb25hbFBlcnNvbgorKwkJb2JqZWN0Y2xhc3M6IHBv c2l4QWNjb3VudAorKwkJb2JqZWN0Y2xhc3M6IGxkYXBQdWJsaWNLZXkKKysJCWRlc2NyaXB0 aW9uOiBFcmljIEFVR0UgQWNjb3VudAorKwkJdXNlclBhc3N3b3JkOiBibGFoCisrCQljbjog RXJpYyBBVUdFCisrCQlzbjogRXJpYyBBVUdFCisrCQl1aWQ6IGVhdQorKwkJdWlkTnVtYmVy OiAxMDM0CisrCQlnaWROdW1iZXI6IDEKKysJCWhvbWVEaXJlY3Rvcnk6IC9leHBvcnQvaG9t ZS9lYXUKKysJCXNzaFB1YmxpY0tleTogc3NoLWRzcyBBQUFBQjMuLi4KKysJCXNzaFB1Ymxp Y0tleTogc3NoLWRzcyBBQUFBTTUuLi4KKysKKysJR3JvdXAgZW50cnk6CisrCS0gYXR0YWNo ZWQgdG8gdGhlICdwb3NpeEdyb3VwJyBvYmplY3RjbGFzcworKwktIHdpdGggYSAnY24nIGdy b3VwbmFtZSBhdHRyaWJ1dGUKKysJLSB3aXRoIG11bHRpcGxlICdtZW1iZXJVaWQnIGF0dHJp YnV0ZXMgZmlsbGVkIHdpdGggdXNlcm5hbWVzIGFsbG93ZWQgaW4gdGhpcyBncm91cAorKwlF eGFtcGxlOgorKwkJIyBmZXcgbWVtYmVycworKwkJZG46IGNuPXVuaXgsb3U9Z3JvdXBzLGRj PWN1Y2tvb3MsZGM9bmV0CisrCQlvYmplY3RjbGFzczogdG9wCisrCQlvYmplY3RjbGFzczog cG9zaXhHcm91cAorKwkJZGVzY3JpcHRpb246IFVuaXggYmFzZWQgc2VydmVycyBncm91cAor KwkJY246IHVuaXgKKysJCWdpZE51bWJlcjogMTAwMgorKwkJbWVtYmVyVWlkOiBlYXUKKysJ CW1lbWJlclVpZDogdXNlcjEKKysJCW1lbWJlclVpZDogdXNlcjIKKysKKysKKystIEhPVyBJ VCBXT1JLUyA6CisrCisrICAqIHdpdGhvdXQgcGF0Y2gKKysgIElmIGEgdXNlciB3YW50cyB0 byBhdXRoZW50aWNhdGUgdG8gbG9nIGluIGEgc2VydmVyIHRoZSBzc2hkLCB3aWxsIGZpcnN0 IGxvb2sgZm9yIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhbGxvd2VkIChSU0FhdXRoLGtlcmJl cm9zLGV0Yy4uKQorKyAgYW5kIGlmIFJTQWF1dGggYW5kIHRpY2tldHMgYmFzZWQgYXV0aCBm YWlscywgaXQgd2lsbCBmYWxsYmFjayB0byBzdGFuZGFyZCBwYXNzd29yZCBhdXRoZW50aWNh dGlvbiAoaWYgZW5hYmxlZCkuCisrCisrICAqIHdpdGggdGhlIHBhdGNoCisrICBJZiBhIHVz ZXIgd2FudCB0byBhdXRoZW50aWNhdGUgdG8gbG9nIGluIGEgc2VydmVyLCB0aGUgc3NoZCB3 aWxsIGZpcnN0IGxvb2sgZm9yIGF1dGggbWV0aG9kIGluY2x1ZGluZyBMREFQIHB1YmtleSwg aWYgdGhlIGxkYXBwdWJrZXkgb3B0aW9ucyBpcyBlbmFibGVkLgorKyAgSXQgd2lsbCBkbyBh biBsZGFwc2VhcmNoIHRvIGdldCB0aGUgcHVibGljIGtleSBkaXJlY3RseSBmcm9tIHRoZSBM REFQIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIgZmlsZXN5c3RlbS4g CisrICAodXN1YWxseSBpbiAkSE9NRS8uc3NoL2F1dGhvcml6ZWRfa2V5cykKKysKKysgIElm IGdyb3VwcyBhcmUgZW5hYmxlZCwgaXQgd2lsbCBhbHNvIGNoZWNrIGlmIHRoZSB1c2VyIHRo YXQgd2FudHMgdG8gbG9naW4gaXMgaW4gdGhlIGdyb3VwIG9mIHRoZSBzZXJ2ZXIgaGUgaXMg dHJ5aW5nIHRvIGxvZyBpbnRvLgorKyAgSWYgaXQgZmFpbHMsIGl0IGZhbGxzIGJhY2sgb24g UlNBIGF1dGggZmlsZXMgKCRIT01FLy5zc2gvYXV0aG9yaXplZF9rZXlzKSwgZXRjLi4gYW5k IGZpbmFsbHkgdG8gc3RhbmRhcmQgcGFzc3dvcmQgYXV0aGVudGljYXRpb24gKGlmIGVuYWJs ZWQpLgorKworKyAgNyB0b2tlbnMgYXJlIGFkZGVkIHRvIHNzaGRfY29uZmlnIDoKKysgICMg aGVyZSBpcyB0aGUgbmV3IHBhdGNoZWQgbGRhcCByZWxhdGVkIHRva2VucworKyAgIyBlbnRy aWVzIGluIHlvdXIgTERBUCBtdXN0IGJlIHBvc2l4QWNjb3VudCAmIHN0cm9uZ0F1dGhlbnRp Y2F0aW9uVXNlciAmIHBvc2l4R3JvdXAKKysgIFVzZUxQSyB5ZXMJCQkJCQkJCSMgbG9vayB0 aGUgcHViIGtleSBpbnRvIExEQVAKKysgIExwa1NlcnZlcnMgbGRhcDovLzEwLjMxLjMyLjUv IGxkYXA6Ly8xMC4zMS4zMi40IGxkYXA6Ly8xMC4zMS4zMi4zCSMgd2hpY2ggTERBUCBzZXJ2 ZXIgZm9yIHVzZXJzID8gKFVSTCBmb3JtYXQpCisrICBMcGtVc2VyRE4gIG91PXVzZXJzLGRj PWZvb2JhcixkYz1uZXQJCQkJCSMgd2hpY2ggYmFzZSBETiBmb3IgdXNlcnMgPworKyAgTHBr R3JvdXBETiBvdT1ncm91cHMsZGM9Zm9vYmFyLGRjPW5ldAkJCQkJIyB3aGljaCBiYXNlIERO IGZvciBncm91cHMgPyAKKysgIExwa0JpbmRETiBjbj1tYW5hZ2VyLGRjPWZvb2JhcixkYz1u ZXQJCQkJCSMgd2hpY2ggYmluZCBETiA/CisrICBMcGtCaW5kUHcgYXNlY3JldAkJCQkJCQkj IGJpbmQgRE4gY3JlZGlkZW50aWFscworKyAgTHBrU2VydmVyR3JvdXAgYWdyb3VwbmFtZQkJ CQkJCSMgdGhlIGdyb3VwIHRoZSBzZXJ2ZXIgaXMgcGFydCBvZgorKworKyAgUmlnaHQgbm93 IGknbSB1c2luZyBhbm9ueW1vdXMgYmluZGluZyB0byBnZXQgcHVibGljIGtleXMsIGJlY2F1 c2UgZ2V0dGluZyBwdWJsaWMga2V5cyBvZiBzb21lb25lIGRvZXNuJ3QgaW1wZXJzb25hdGUg aGltuCBidXQgdGhlcmUgaXMgc29tZQorKyAgZmxhd3MgeW91IGhhdmUgdG8gdGFrZSBjYXJl IG9mLgorKworKy0gSE9XIFRPIElOU0VSVCBBIFVTRVIvS0VZIElOVE8gQU4gTERBUCBFTlRS WQorKworKyAgKiBteSB3YXkgKHRoZXJlIGlzIHBsZW50eSA6KQorKyAgLSBjcmVhdGUgbGRp ZiBmaWxlIChpLmUuIHVzZXJzLmxkaWYpCisrICAtIGNhdCB+Ly5zc2gvaWRfZHNhLnB1YiBP UiBjYXQgfi8uc3NoL2lkX3JzYS5wdWIgT1IgY2F0IH4vLnNzaC9pZGVudGl0eS5wdWIKKysg IC0gbXkgd2F5IGluIDQgc3RlcHMgOgorKyAgRXhhbXBsZToKKysKKysgICMgeW91IGFkZCB0 aGlzIHRvIHRoZSB1c2VyIGVudHJ5IGluIHRoZSBMRElGIGZpbGUgOgorKyAgWy4uLl0KKysg IG9iamVjdGNsYXNzOiBwb3NpeEFjY291bnQKKysgIG9iamVjdGNsYXNzOiBsZGFwUHVibGlj S2V5CisrICBbLi4uXQorKyAgc3NoUHVibGlLZXk6IHNzaC1kc3MgQUFBQUJEaDEyRERVUjIu Li4KKysgIFsuLi5dCisrCisrICAjIGluc2VydCB5b3VyIGVudHJ5IGFuZCB5b3UncmUgZG9u ZSA6KQorKyAgbGRhcGFkZCAtRCBiYWxibGFibGEgLXcgYmxlaCA8IGZpbGUubGRpZiAKKysg IAorKyAgYWxsIHN0YW5kYXJkIG9wdGlvbnMgY2FuIGJlIHByZXNlbnQgaW4gdGhlICdzc2hQ dWJsaWNLZXknIGF0dHJpYnV0ZS4KKysKKystIFdIWSA6CisrCisrICBTaW1wbHkgYmVjYXVz ZSwgaSB3YXMgbG9va2luZyBmb3IgYSB3YXkgdG8gY2VudHJhbGl6ZSBhbGwgc3lzYWRtaW5z IGF1dGhlbnRpY2F0aW9uLCBlYXNpbHksICB3aXRob3V0IGNvbXBsZXRlbHkgdXNpbmcgTERB UCAKKysgIGFzIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAobGlrZSBwYW1fbGRhcCBldGMuLiku ICAKKysgIAorKyAgQWZ0ZXIgbG9va2luZyBpbnRvIEtlcmJlcm9zLCBTZWN1cklELCBhbmQg b3RoZXIgY2VudHJhbGl6ZWQgc2VjdXJlIGF1dGhlbnRpY2F0aW9ucyBzeXN0ZW1zLCB0aGUg dXNlIG9mIFJTQSBhbmQgTERBUCB0byBnZXQgCisrICBwdWJsaWMga2V5IGZvciBhdXRoZW50 aWNhdGlvbiBhbGxvd3MgdXMgdG8gY29udHJvbCB3aG8gaGFzIGFjY2VzcyB0byB3aGljaCBz ZXJ2ZXIgKHRoZSB1c2VyIG5lZWRzIGFuIGFjY291bnQgYW5kIHRvIGJlIGluICdzdHJvbmdB dXRoZW50aWNhdGlvblVzZXInCisrICBvYmplY3RjbGFzcyB3aXRoaW4gTERBUCBhbmQgcGFy dCBvZiB0aGUgZ3JvdXAgdGhlIFNTSCBzZXJ2ZXIgaXMgaW4pLiAKKysKKysgIFBhc3N3b3Jk cyB1cGRhdGUgYXJlIG5vIGxvbmdlciBhIG5pZ2h0bWFyZSBmb3IgYSBzZXJ2ZXIgZmFybSAo a2V5IHBhaXIgcGFzc3BocmFzZSBpcyBzdG9yZWQgb24gZWFjaCB1c2VyJ3MgYm94IGFuZCBw cml2YXRlIGtleSBpcyBsb2NhbGx5IGVuY3J5cHRlZCB1c2luZyBoaXMgcGFzc3BocmFzZSAK KysgIHNvIGVhY2ggdXNlciBjYW4gY2hhbmdlIGl0IGFzIG11Y2ggYXMgaGUgd2FudHMpLiAK KysKKysgIEJsb2NraW5nIGEgdXNlciBhY2NvdW50IGNhbiBiZSBkb25lIGRpcmVjdGx5IGZy b20gdGhlIExEQVAgKGlmIHNzaGQgaXMgdXNpbmcgUlNBQXV0aCArIGxkYXAgb25seSkuCisr CisrLSBSVUxFUyA6ICAKKysgIEVudHJ5IGluIHRoZSBMREFQIHNlcnZlciBtdXN0IHJlc3Bl Y3QgJ3Bvc2l4QWNjb3VudCcgYW5kICdsZGFwUHVibGljS2V5JyB3aGljaCBhcmUgZGVmaW5l ZCBpbiBjb3JlLnNjaGVtYS4gCisrICBhbmQgdGhlIGFkZGl0aW9ubmFsIGxway5zY2hlbWEu CisrCisrICBUaGlzIHBhdGNoIGNvdWxkIGFsbG93IGEgc21vb3RoIHRyYW5zaXRpb24gYmV0 d2VlbiBzdGFuZGFyZCBhdXRoICgvZXRjL3Bhc3N3ZCkgYW5kIGNvbXBsZXRlIExEQVAgYmFz ZWQgYXV0aGVudGljYXRpb24gCisrICAocGFtbGRhcCwgbnNzX2xkYXAsIGV0Yy4uKS4KKysK KysgIFRoaXMgY2FuIGJlIGFuIGFsdGVybmF0aXZlIHRvIG90aGVyIChvbGQ/L2V4cGVuc2l2 ZT8pIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKEtlcmJlcm9zL1NlY3VySUQvLi4pLgorKyAg CisrICBSZWZlcnJpbmcgdG8gc2NoZW1hIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxl IGlmIHVzZXIgJ2VhdScgaXMgb25seSBpbiBncm91cCAndW5peCcKKysgICdlYXUnIHdvdWxk IE9OTFkgYWNjZXNzICdzZXJ2ZXIxJywgJ3NlcnZlcjInLCAnc2VydmVyMycgQU5EICdzZXJ2 ZXI0JyBCVVQgTk9UICdzZXJ2ZXI1Jy4KKysgIElmIHlvdSB0aGVuIG1vZGlmeSB0aGUgTERB UCAnbWFpbCcgZ3JvdXAgZW50cnkgdG8gYWRkICdtZW1iZXJVaWQ6IGVhdScgVEhFTiB1c2Vy ICdlYXUnIHdvdWxkIGJlIGFibGUKKysgIHRvIGxvZyBpbiAnc2VydmVyNScgKGkgaG9wZSB5 b3UgZ290IHRoZSBpZGVhLCBteSBlbmdsaXNoIGlzIGJhZCA6KS4KKysKKysgIEVhY2ggc2Vy dmVyJ3Mgc3NoZCBpcyBwYXRjaGVkIGFuZCBjb25maWd1cmVkIHRvIGFzayB0aGUgcHVibGlj IGtleSBhbmQgdGhlIGdyb3VwIGluZm9zIGluIHRoZSBMREFQCisrICBzZXJ2ZXIuCisrICBX aGVuIHlvdSB3YW50IHRvIGFsbG93IGEgbmV3IHVzZXIgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhl IHNlcnZlciBwYXJjLCB5b3UganVzdCBhZGQgaGltIGFuIGFjY291bnQgb24gCisrICB5b3Vy IHNlcnZlcnMsIHlvdSBhZGQgaGlzIHB1YmxpYyBrZXkgaW50byBoaXMgZW50cnkgb24gdGhl IExEQVAgc2VydmVyLCBpdCdzIGRvbmUuIAorKworKyAgQmVjYXVzZSBzc2hkcyBhcmUgbG9v a2luZyBwdWJsaWMga2V5cyBpbnRvIHRoZSBMREFQIGRpcmVjdGx5IGluc3RlYWQgb2YgYSBm aWxlICgkSE9NRS8uc3NoL2F1dGhvcml6ZWRfa2V5cykuCisrCisrICBXaGVuIHRoZSB1c2Vy IG5lZWRzIHRvIGNoYW5nZSBoaXMgcGFzc3BocmFzZSBoZSBjYW4gZG8gaXQgZGlyZWN0bHkg ZnJvbSBoaXMgd29ya3N0YXRpb24gYnkgY2hhbmdpbmcgCisrICBoaXMgb3duIGtleSBzZXQg bG9jayBwYXNzcGhyYXNlLCBhbmQgYWxsIHNlcnZlcnMgYXJlIGF1dG9tYXRpY2FsbHkgYXdh cmUuCisrIAorKyAgV2l0aCBhIENBUkVGVUwgTERBUCBzZXJ2ZXIgY29uZmlndXJhdGlvbiB5 b3UgY291bGQgYWxsb3cgYSB1c2VyIHRvIGFkZC9kZWxldGUvbW9kaWZ5IGhpcyBvd24gZW50 cnkgaGltc2VsZgorKyAgc28gaGUgY2FuIGFkZC9tb2RpZnkvZGVsZXRlIGhpbXNlbGYgaGlz IHB1YmxpYyBrZXkgd2hlbiBuZWVkZWQuCisrCisrrSBGTEFXUyA6CisrICBMREFQIG11c3Qg YmUgd2VsbCBjb25maWd1cmVkLCBnZXR0aW5nIHRoZSBwdWJsaWMga2V5IG9mIHNvbWUgdXNl ciBpcyBub3QgYSBwcm9ibGVtLCBidXQgaWYgYW5vbnltb3VzIExEQVAgCisrICBhbGxvdyB3 cml0ZSB0byB1c2VycyBkbiwgc29tZWJvZHkgY291bGQgcmVwbGFjZSBzb21ldXNlcidzIHB1 YmxpYyBrZXkgYnkgaXRzIG93biBhbmQgaW1wZXJzb25hdGUgc29tZSAKKysgIG9mIHlvdXIg dXNlcnMgaW4gYWxsIHlvdXIgc2VydmVyIGZhcm0gYmUgVkVSWSBDQVJFRlVMLgorKyAgCisr ICBNSVRNIGF0dGFjayB3aGVuIHNzaGQgaXMgcmVxdWVzdGluZyB0aGUgcHVibGljIGtleSwg Y291bGQgbGVhZCB0byBhIGNvbXByb21pc2Ugb2YgeW91ciBzZXJ2ZXJzIGFsbG93aW5nIGxv Z2luIAorKyAgYXMgdGhlIGltcGVyc29ubmF0ZWQgdXNlci4KKysKKysgIElmIExEQVAgc2Vy dmVyIGlzIGRvd24gdGhlbiwgZmFsbGJhY2sgb24gcGFzc3dkIGF1dGguCisrICAKKysgIHRo ZSBsZGFwIGNvZGUgcGFydCBoYXMgbm90IGJlZW4gd2VsbCBhdWRpdGVkIHlldC4KKysKKyst IExEQVAgVVNFUiBFTlRSWSBFWEFNUExFUyAoTERJRiBGb3JtYXQsIGxvb2sgaW4gdXNlcnMu bGRpZikKKysgICAgLS0tIENVVCBIRVJFIC0tLQorKyAgICBkbjogdWlkPWpkb2Usb3U9dXNl cnMsZGM9Zm9vYmFyLGRjPW5ldAorKyAgICBvYmplY3RjbGFzczogdG9wCisrICAgIG9iamVj dGNsYXNzOiBwZXJzb24KKysgICAgb2JqZWN0Y2xhc3M6IG9yZ2FuaXphdGlvbmFsUGVyc29u CisrICAgIG9iamVjdGNsYXNzOiBwb3NpeEFjY291bnQKKysgICAgb2JqZWN0Y2xhc3M6IGxk YXBQdWJsaWNLZXkKKysgICAgZGVzY3JpcHRpb246IE15IGFjY291bnQKKysgICAgY246IEpv aG4gRG9lCisrICAgIHNuOiBKb2huIERvZQorKyAgICB1aWQ6IGpkb2UKKysgICAgdWlkTnVt YmVyOiAxMDAKKysgICAgZ2lkTnVtYmVyOiAxMDAKKysgICAgaG9tZURpcmVjdG9yeTogL2hv bWUvamRvZQorKyAgICBzc2hQdWJsaWNLZXk6IHNzaC1kc3MgQUFBQUIzTnphQzFrYzNNQUFB RUJBT3ZMOHBSRVVnOXdTeS84K2hRSjU0WUYzQVhrQjBPWnJYQi4uLi4KKysgICAgWy4uLl0K KysgICAgLS0tIENVVCBIRVJFIC0tLQorKworKy0gTERBUCBHUk9VUCBFTlRSWSBFWEFNUExF UyAoTERJRiBGb3JtYXQsIGxvb2sgaW4gZ3JvdXBzLmxkaWYpCisrICAgIC0tLSBDVVQgSEVS RSAtLS0KKysgICAgZG46IGNuPXVuaXgsb3U9Z3JvdXBzLGRjPWN1Y2tvb3MsZGM9bmV0Cisr ICAgIG9iamVjdGNsYXNzOiB0b3AKKysgICAgb2JqZWN0Y2xhc3M6IHBvc2l4R3JvdXAKKysg ICAgZGVzY3JpcHRpb246IFVuaXggYmFzZWQgc2VydmVycyBncm91cAorKyAgICBjbjogdW5p eAorKyAgICBnaWROdW1iZXI6IDEwMDIKKysgICAgbWVtYmVyVWlkOiBqZG9lCisrICAgIG1l bWJlclVpZDogdXNlcjEKKysgICAgbWVtYmVyVWlkOiB1c2VyMgorKyAgICBbLi4uXQorKyAg ICAtLS0gQ1VUIEhFUkUgLS0tCisrCisrPj4gRllJOiA8PCAKKytNdWx0aXBsZSAnc3NoUHVi bGljS2V5JyBpbiBhIHVzZXIgZW50cnkgYXJlIGFsbG93ZWQsIGFzIHdlbGwgYXMgbXVsdGlw bGUgJ21lbWJlclVpZCcgYXR0cmlidXRlcyBpbiBhIGdyb3VwIGVudHJ5CisrCisrLSBDT01Q SUxJTkc6CisrICAxLiBBcHBseSB0aGUgcGF0Y2gKKysgIDIuIC4vY29uZmlndXJlIC0td2l0 aC15b3VyLW9wdGlvbnMgLS13aXRoLWxkYXA9L3ByZWZpeC90by9sZGFwX2xpYnNfYW5kX2lu Y2x1ZGVzCisrICAzLiBtYWtlCisrICA0LiBpdCdzIGRvbmUuCisrCisrLSBCTEEgOgorKyAg SSBob3BlIHRoaXMgY291bGQgaGVscCwgYW5kIGkgaG9wZSB0byBiZSBjbGVhciBlbm91Z2gs LCBvciBnaXZlIGlkZWFzLiAgcXVlc3Rpb25zL2NvbW1lbnRzL2ltcHJvdmVtZW50cyBhcmUg d2VsY29tZS4KKysgIAorKy0gVE9ETyA6CisrICBSZWRlc2lnbiBkaWZmZXJlbnRseS4KKysK KystIERPQ1MvTElOSyA6CisrICBodHRwOi8vcGFjc2VjLmpwL2NvcmUwNS9wc2owNS1iYXJp c2FuaS1lbi5wZGYKKysgIGh0dHA6Ly9mcml0ei5wb3RzZGFtLmVkdS9wcm9qZWN0cy9vcGVu c3NoLWxway8KKysgIGh0dHA6Ly9mcml0ei5wb3RzZGFtLmVkdS9wcm9qZWN0cy9zc2hnYXRl LworKyAgaHR0cDovL2Rldi5pbnZlcnNlcGF0aC5jb20vdHJhYy9vcGVuc3NoLWxwaworKyAg aHR0cDovL2xhbS5zZi5uZXQvICggaHR0cDovL2xhbS5zb3VyY2Vmb3JnZS5uZXQvZG9jdW1l bnRhdGlvbi9zdXBwb3J0ZWRTY2hlbWFzLmh0bSApCisrCisrLSBDT05UUklCVVRPUlMvSURF QVMvR1JFRVRTIDoKKysgIC0gRmFsayBTaWVtb25zbWVpZXIuCisrICAtIEphY29iIFJpZWYu CisrICAtIE1pY2hhZWwgRHVyY2hncmFmLgorKyAgLSBmcmVkZXJpYyBwZXRlcnMuCisrICAt IEZpbmxheSBkb2JiaWUuCisrICAtIFN0ZWZhbiBGaXNoZXIuCisrICAtIFJvYmluIEguIEpv aG5zb24uCisrICAtIEFkcmlhbiBCcmlkZ2V0dC4KKysKKystIENPTlRBQ1QgOgorKyAgLSBF cmljIEFVR0UgPGVhdUBwaGVhci5vcmc+CisrICAtIEFuZHJlYSBCYXJpc2FuaSA8YW5kcmVh QGludmVyc2VwYXRoLmNvbT4KK2RpZmYgLU51YXIgLS1leGNsdWRlICcqLm9yaWcnIC0tZXhj bHVkZSAnKi5yZWonIHNlcnZjb25mLmMgc2VydmNvbmYuYworLS0tIHNlcnZjb25mLmMJMjAw OC0wNy0wMyAyMDo1MToxMi4wMDAwMDAwMDAgLTA3MDAKKysrKyBzZXJ2Y29uZi5jCTIwMDgt MDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtNDIsNiArNDIsMTAgQEAKKyAj aW5jbHVkZSAiY2hhbm5lbHMuaCIKKyAjaW5jbHVkZSAiZ3JvdXBhY2Nlc3MuaCIKKyAKKysj aWZkZWYgV0lUSF9MREFQX1BVQktFWQorKyNpbmNsdWRlICJsZGFwYXV0aC5oIgorKyNlbmRp ZgorKworIHN0YXRpYyB2b2lkIGFkZF9saXN0ZW5fYWRkcihTZXJ2ZXJPcHRpb25zICosIGNo YXIgKiwgaW50KTsKKyBzdGF0aWMgdm9pZCBhZGRfb25lX2xpc3Rlbl9hZGRyKFNlcnZlck9w dGlvbnMgKiwgY2hhciAqLCBpbnQpOworIAorQEAgLTEyOCw2ICsxMzIsMjUgQEAKKyAJb3B0 aW9ucy0+YWRtX2ZvcmNlZF9jb21tYW5kID0gTlVMTDsKKyAJb3B0aW9ucy0+Y2hyb290X2Rp cmVjdG9yeSA9IE5VTEw7CisgCW9wdGlvbnMtPnplcm9fa25vd2xlZGdlX3Bhc3N3b3JkX2F1 dGhlbnRpY2F0aW9uID0gLTE7CisrI2lmZGVmIFdJVEhfTERBUF9QVUJLRVkKKysgCS8qIFhY WCBkaXJ0eSAqLworKyAJb3B0aW9ucy0+bHBrLmxkID0gTlVMTDsKKysgCW9wdGlvbnMtPmxw ay5vbiA9IC0xOworKyAJb3B0aW9ucy0+bHBrLnNlcnZlcnMgPSBOVUxMOworKyAJb3B0aW9u cy0+bHBrLnVfYmFzZWRuID0gTlVMTDsKKysgCW9wdGlvbnMtPmxway5nX2Jhc2VkbiA9IE5V TEw7CisrIAlvcHRpb25zLT5scGsuYmluZGRuID0gTlVMTDsKKysgCW9wdGlvbnMtPmxway5i aW5kcHcgPSBOVUxMOworKyAJb3B0aW9ucy0+bHBrLnNncm91cCA9IE5VTEw7CisrIAlvcHRp b25zLT5scGsuZmlsdGVyID0gTlVMTDsKKysgCW9wdGlvbnMtPmxway5mZ3JvdXAgPSBOVUxM OworKyAJb3B0aW9ucy0+bHBrLmxfY29uZiA9IE5VTEw7CisrIAlvcHRpb25zLT5scGsudGxz ID0gLTE7CisrIAlvcHRpb25zLT5scGsuYl90aW1lb3V0LnR2X3NlYyA9IC0xOworKyAJb3B0 aW9ucy0+bHBrLnNfdGltZW91dC50dl9zZWMgPSAtMTsKKysgCW9wdGlvbnMtPmxway5mbGFn cyA9IEZMQUdfRU1QVFk7CisrI2VuZGlmCisrCisgfQorIAorIHZvaWQKK0BAIC0yNjEsNiAr Mjg0LDMyIEBACisgCQlvcHRpb25zLT5wZXJtaXRfdHVuID0gU1NIX1RVTk1PREVfTk87Cisg CWlmIChvcHRpb25zLT56ZXJvX2tub3dsZWRnZV9wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9 PSAtMSkKKyAJCW9wdGlvbnMtPnplcm9fa25vd2xlZGdlX3Bhc3N3b3JkX2F1dGhlbnRpY2F0 aW9uID0gMDsKKysjaWZkZWYgV0lUSF9MREFQX1BVQktFWQorKwlpZiAob3B0aW9ucy0+bHBr Lm9uID09IC0xKQorKwkgICAgb3B0aW9ucy0+bHBrLm9uID0gX0RFRkFVTFRfTFBLX09OOwor KwlpZiAob3B0aW9ucy0+bHBrLnNlcnZlcnMgPT0gTlVMTCkKKysJICAgIG9wdGlvbnMtPmxw ay5zZXJ2ZXJzID0gX0RFRkFVTFRfTFBLX1NFUlZFUlM7CisrCWlmIChvcHRpb25zLT5scGsu dV9iYXNlZG4gPT0gTlVMTCkKKysJICAgIG9wdGlvbnMtPmxway51X2Jhc2VkbiA9IF9ERUZB VUxUX0xQS19VRE47CisrCWlmIChvcHRpb25zLT5scGsuZ19iYXNlZG4gPT0gTlVMTCkKKysJ ICAgIG9wdGlvbnMtPmxway5nX2Jhc2VkbiA9IF9ERUZBVUxUX0xQS19HRE47CisrCWlmIChv cHRpb25zLT5scGsuYmluZGRuID09IE5VTEwpCisrCSAgICBvcHRpb25zLT5scGsuYmluZGRu ID0gX0RFRkFVTFRfTFBLX0JJTkRETjsKKysJaWYgKG9wdGlvbnMtPmxway5iaW5kcHcgPT0g TlVMTCkKKysJICAgIG9wdGlvbnMtPmxway5iaW5kcHcgPSBfREVGQVVMVF9MUEtfQklORFBX OworKwlpZiAob3B0aW9ucy0+bHBrLnNncm91cCA9PSBOVUxMKQorKwkgICAgb3B0aW9ucy0+ bHBrLnNncm91cCA9IF9ERUZBVUxUX0xQS19TR1JPVVA7CisrCWlmIChvcHRpb25zLT5scGsu ZmlsdGVyID09IE5VTEwpCisrCSAgICBvcHRpb25zLT5scGsuZmlsdGVyID0gX0RFRkFVTFRf TFBLX0ZJTFRFUjsKKysJaWYgKG9wdGlvbnMtPmxway50bHMgPT0gLTEpCisrCSAgICBvcHRp b25zLT5scGsudGxzID0gX0RFRkFVTFRfTFBLX1RMUzsKKysJaWYgKG9wdGlvbnMtPmxway5i X3RpbWVvdXQudHZfc2VjID09IC0xKQorKwkgICAgb3B0aW9ucy0+bHBrLmJfdGltZW91dC50 dl9zZWMgPSBfREVGQVVMVF9MUEtfQlRJTUVPVVQ7CisrCWlmIChvcHRpb25zLT5scGsuc190 aW1lb3V0LnR2X3NlYyA9PSAtMSkKKysJICAgIG9wdGlvbnMtPmxway5zX3RpbWVvdXQudHZf c2VjID0gX0RFRkFVTFRfTFBLX1NUSU1FT1VUOworKwlpZiAob3B0aW9ucy0+bHBrLmxfY29u ZiA9PSBOVUxMKQorKwkgICAgb3B0aW9ucy0+bHBrLmxfY29uZiA9IF9ERUZBVUxUX0xQS19M RFA7CisrI2VuZGlmCisgCisgCS8qIFR1cm4gcHJpdmlsZWdlIHNlcGFyYXRpb24gb24gYnkg ZGVmYXVsdCAqLworIAlpZiAodXNlX3ByaXZzZXAgPT0gLTEpCitAQCAtMzA3LDYgKzM1Niwx MiBAQAorIAlzVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiwgc0FsbG93QWdlbnRGb3J3YXJkaW5n LAorCXNaZXJvS25vd2xlZGdlUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwKKyAJc0RlcHJlY2F0 ZWQsIHNVbnN1cHBvcnRlZAorKyNpZmRlZiBXSVRIX0xEQVBfUFVCS0VZCisrCSxzTGRhcFB1 YmxpY2tleSwgc0xkYXBTZXJ2ZXJzLCBzTGRhcFVzZXJETgorKwksc0xkYXBHcm91cEROLCBz QmluZEROLCBzQmluZFB3LCBzTXlHcm91cAorKwksc0xkYXBGaWx0ZXIsIHNGb3JjZVRMUywg c0JpbmRUaW1lb3V0CisrCSxzU2VhcmNoVGltZW91dCwgc0xkYXBDb25mCisrI2VuZGlmCisg fSBTZXJ2ZXJPcENvZGVzOworIAorICNkZWZpbmUgU1NIQ0ZHX0dMT0JBTAkweDAxCS8qIGFs bG93ZWQgaW4gbWFpbiBzZWN0aW9uIG9mIHNzaGRfY29uZmlnICovCitAQCAtNDE3LDYgKzQ3 MiwyMCBAQAorIAl7ICJjbGllbnRhbGl2ZWNvdW50bWF4Iiwgc0NsaWVudEFsaXZlQ291bnRN YXgsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiYXV0aG9yaXplZGtleXNmaWxlIiwgc0F1dGhv cml6ZWRLZXlzRmlsZSwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJhdXRob3JpemVka2V5c2Zp bGUyIiwgc0F1dGhvcml6ZWRLZXlzRmlsZTIsIFNTSENGR19HTE9CQUwgfSwKKysjaWZkZWYg V0lUSF9MREFQX1BVQktFWQorKwl7IF9ERUZBVUxUX0xQS19UT0tFTiwgc0xkYXBQdWJsaWNr ZXksIFNTSENGR19HTE9CQUwgfSwKKysJeyBfREVGQVVMVF9TUlZfVE9LRU4sIHNMZGFwU2Vy dmVycywgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7IF9ERUZBVUxUX1VTUl9UT0tFTiwgc0xkYXBV c2VyRE4sIFNTSENGR19HTE9CQUwgfSwKKysJeyBfREVGQVVMVF9HUlBfVE9LRU4sIHNMZGFw R3JvdXBETiwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7IF9ERUZBVUxUX0JETl9UT0tFTiwgc0Jp bmRETiwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7IF9ERUZBVUxUX0JQV19UT0tFTiwgc0JpbmRQ dywgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7IF9ERUZBVUxUX01ZR19UT0tFTiwgc015R3JvdXAs IFNTSENGR19HTE9CQUwgfSwKKysJeyBfREVGQVVMVF9GSUxfVE9LRU4sIHNMZGFwRmlsdGVy LCBTU0hDRkdfR0xPQkFMIH0sCisrCXsgX0RFRkFVTFRfVExTX1RPS0VOLCBzRm9yY2VUTFMs IFNTSENGR19HTE9CQUwgfSwKKysJeyBfREVGQVVMVF9CVElfVE9LRU4sIHNCaW5kVGltZW91 dCwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7IF9ERUZBVUxUX1NUSV9UT0tFTiwgc1NlYXJjaFRp bWVvdXQsIFNTSENGR19HTE9CQUwgfSwKKysJeyBfREVGQVVMVF9MRFBfVE9LRU4sIHNMZGFw Q29uZiwgU1NIQ0ZHX0dMT0JBTCB9LAorKyNlbmRpZgorIAl7ICJ1c2Vwcml2aWxlZ2VzZXBh cmF0aW9uIiwgc1VzZVByaXZpbGVnZVNlcGFyYXRpb24sIFNTSENGR19HTE9CQUx9LAorIAl7 ICJhY2NlcHRlbnYiLCBzQWNjZXB0RW52LCBTU0hDRkdfR0xPQkFMIH0sCisgCXsgInBlcm1p dHR1bm5lbCIsIHNQZXJtaXRUdW5uZWwsIFNTSENGR19HTE9CQUwgfSwKK0BAIC0xMzA3LDYg KzEzNzYsMTA3IEBACisgCQl3aGlsZSAoYXJnKQorIAkJICAgIGFyZyA9IHN0cmRlbGltKCZj cCk7CisgCQlicmVhazsKKysjaWZkZWYgV0lUSF9MREFQX1BVQktFWQorKwljYXNlIHNMZGFw UHVibGlja2V5OgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmxway5vbjsKKysJCWdvdG8gcGFy c2VfZmxhZzsKKysJY2FzZSBzTGRhcFNlcnZlcnM6CisrCQkvKiBhcmcgPSBzdHJkZWxpbSgm Y3ApOyAqLworKwkJcCA9IGxpbmU7CisrCQl3aGlsZSgqcCsrKTsKKysJCWFyZyA9IHA7Cisr CQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCisrCQkgICAgZmF0YWwoIiVzIGxpbmUgJWQ6 IG1pc3NpbmcgbGRhcCBzZXJ2ZXIiLGZpbGVuYW1lLGxpbmVudW0pOworKwkJYXJnW3N0cmxl bihhcmcpXSA9ICdcMCc7CisrCQlpZiAoKG9wdGlvbnMtPmxway5zZXJ2ZXJzID0gbGRhcF9w YXJzZV9zZXJ2ZXJzKGFyZykpID09IE5VTEwpCisrCQkgICAgZmF0YWwoIiVzIGxpbmUgJWQ6 IGVycm9yIGluIGxkYXAgc2VydmVycyIsIGZpbGVuYW1lLCBsaW5lbnVtKTsKKysJCW1lbXNl dChhcmcsMCxzdHJsZW4oYXJnKSk7CisrCQlicmVhazsKKysJY2FzZSBzTGRhcFVzZXJETjoK KysJCWFyZyA9IGNwOworKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQorKwkJICAgIGZh dGFsKCIlcyBsaW5lICVkOiBtaXNzaW5nIGxkYXAgc2VydmVyIixmaWxlbmFtZSxsaW5lbnVt KTsKKysJCWFyZ1tzdHJsZW4oYXJnKV0gPSAnXDAnOworKwkJb3B0aW9ucy0+bHBrLnVfYmFz ZWRuID0geHN0cmR1cChhcmcpOworKwkJbWVtc2V0KGFyZywwLHN0cmxlbihhcmcpKTsKKysJ CWJyZWFrOworKwljYXNlIHNMZGFwR3JvdXBETjoKKysJCWFyZyA9IGNwOworKwkJaWYgKCFh cmcgfHwgKmFyZyA9PSAnXDAnKQorKwkJICAgIGZhdGFsKCIlcyBsaW5lICVkOiBtaXNzaW5n IGxkYXAgc2VydmVyIixmaWxlbmFtZSxsaW5lbnVtKTsKKysJCWFyZ1tzdHJsZW4oYXJnKV0g PSAnXDAnOworKwkJb3B0aW9ucy0+bHBrLmdfYmFzZWRuID0geHN0cmR1cChhcmcpOworKwkJ bWVtc2V0KGFyZywwLHN0cmxlbihhcmcpKTsKKysJCWJyZWFrOworKwljYXNlIHNCaW5kRE46 CisrCQlhcmcgPSBjcDsKKysJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykKKysJCSAgICBm YXRhbCgiJXMgbGluZSAlZDogbWlzc2luZyBiaW5kZG4iLGZpbGVuYW1lLGxpbmVudW0pOwor KwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7CisrCQlvcHRpb25zLT5scGsuYmluZGRuID0g eHN0cmR1cChhcmcpOworKwkJbWVtc2V0KGFyZywwLHN0cmxlbihhcmcpKTsKKysJCWJyZWFr OworKwljYXNlIHNCaW5kUHc6CisrCQlhcmcgPSBjcDsKKysJCWlmICghYXJnIHx8ICphcmcg PT0gJ1wwJykKKysJCSAgICBmYXRhbCgiJXMgbGluZSAlZDogbWlzc2luZyBiaW5kcHciLGZp bGVuYW1lLGxpbmVudW0pOworKwkJYXJnW3N0cmxlbihhcmcpXSA9ICdcMCc7CisrCQlvcHRp b25zLT5scGsuYmluZHB3ID0geHN0cmR1cChhcmcpOworKwkJbWVtc2V0KGFyZywwLHN0cmxl bihhcmcpKTsKKysJCWJyZWFrOworKwljYXNlIHNNeUdyb3VwOgorKwkJYXJnID0gY3A7Cisr CQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCisrCQkgICAgZmF0YWwoIiVzIGxpbmUgJWQ6 IG1pc3NpbmcgZ3JvdXBuYW1lIixmaWxlbmFtZSwgbGluZW51bSk7CisrCQlhcmdbc3RybGVu KGFyZyldID0gJ1wwJzsKKysJCW9wdGlvbnMtPmxway5zZ3JvdXAgPSB4c3RyZHVwKGFyZyk7 CisrCQlpZiAob3B0aW9ucy0+bHBrLnNncm91cCkKKysJCSAgICBvcHRpb25zLT5scGsuZmdy b3VwID0gbGRhcF9wYXJzZV9ncm91cHMob3B0aW9ucy0+bHBrLnNncm91cCk7CisrCQltZW1z ZXQoYXJnLDAsc3RybGVuKGFyZykpOworKwkJYnJlYWs7CisrCWNhc2Ugc0xkYXBGaWx0ZXI6 CisrCQlhcmcgPSBjcDsKKysJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykKKysJCSAgICBm YXRhbCgiJXMgbGluZSAlZDogbWlzc2luZyBmaWx0ZXIiLGZpbGVuYW1lLCBsaW5lbnVtKTsK KysJCWFyZ1tzdHJsZW4oYXJnKV0gPSAnXDAnOworKwkJb3B0aW9ucy0+bHBrLmZpbHRlciA9 IHhzdHJkdXAoYXJnKTsKKysJCW1lbXNldChhcmcsMCxzdHJsZW4oYXJnKSk7CisrCQlicmVh azsKKysJY2FzZSBzRm9yY2VUTFM6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+bHBrLnRsczsK KysJCWFyZyA9IHN0cmRlbGltKCZjcCk7CisrCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcp CisrCQkJZmF0YWwoIiVzIGxpbmUgJWQ6IG1pc3NpbmcgeWVzL25vIGFyZ3VtZW50LiIsCisr CQkJICAgIGZpbGVuYW1lLCBsaW5lbnVtKTsKKysJCXZhbHVlID0gMDsJLyogc2lsZW5jZSBj b21waWxlciAqLworKwkJaWYgKHN0cmNtcChhcmcsICJ5ZXMiKSA9PSAwKQorKwkJCXZhbHVl ID0gMTsKKysJCWVsc2UgaWYgKHN0cmNtcChhcmcsICJubyIpID09IDApCisrCQkJdmFsdWUg PSAwOworKwkJZWxzZSBpZiAoc3RyY21wKGFyZywgInRyeSIpID09IDApCisrCQkJdmFsdWUg PSAtMTsKKysJCWVsc2UKKysJCQlmYXRhbCgiJXMgbGluZSAlZDogQmFkIHllcy9ubyBhcmd1 bWVudDogJXMiLAorKwkJCQlmaWxlbmFtZSwgbGluZW51bSwgYXJnKTsKKysJCWlmICgqaW50 cHRyID09IC0xKQorKwkJCSppbnRwdHIgPSB2YWx1ZTsKKysJCWJyZWFrOworKwljYXNlIHNC aW5kVGltZW91dDoKKysJCWludHB0ciA9IChpbnQgKikgJm9wdGlvbnMtPmxway5iX3RpbWVv dXQudHZfc2VjOworKwkJZ290byBwYXJzZV9pbnQ7CisrCWNhc2Ugc1NlYXJjaFRpbWVvdXQ6 CisrCQlpbnRwdHIgPSAoaW50ICopICZvcHRpb25zLT5scGsuc190aW1lb3V0LnR2X3NlYzsK KysJCWdvdG8gcGFyc2VfaW50OworKwkJYnJlYWs7CisrCWNhc2Ugc0xkYXBDb25mOgorKwkJ YXJnID0gY3A7CisrCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCisrCQkgICAgZmF0YWwo IiVzIGxpbmUgJWQ6IG1pc3NpbmcgTHBrTGRhcENvbmYiLCBmaWxlbmFtZSwgbGluZW51bSk7 CisrCQlhcmdbc3RybGVuKGFyZyldID0gJ1wwJzsKKysJCW9wdGlvbnMtPmxway5sX2NvbmYg PSB4c3RyZHVwKGFyZyk7CisrCQltZW1zZXQoYXJnLCAwLCBzdHJsZW4oYXJnKSk7CisrCQli cmVhazsKKysjZW5kaWYKKyAKKyAJZGVmYXVsdDoKKyAJCWZhdGFsKCIlcyBsaW5lICVkOiBN aXNzaW5nIGhhbmRsZXIgZm9yIG9wY29kZSAlcyAoJWQpIiwKK2RpZmYgLU51YXIgLS1leGNs dWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIHNlcnZjb25mLmggc2VydmNvbmYuaAor LS0tIHNlcnZjb25mLmgJMjAwOC0wNi0xMCAwNjowMTo1MS4wMDAwMDAwMDAgLTA3MDAKKysr KyBzZXJ2Y29uZi5oCTIwMDgtMDgtMjMgMTU6MDI6NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAt MTYsNiArMTYsMTAgQEAKKyAjaWZuZGVmIFNFUlZDT05GX0gKKyAjZGVmaW5lIFNFUlZDT05G X0gKKyAKKysjaWZkZWYgV0lUSF9MREFQX1BVQktFWQorKyNpbmNsdWRlICJsZGFwYXV0aC5o IgorKyNlbmRpZgorKworICNkZWZpbmUgTUFYX1BPUlRTCQkyNTYJLyogTWF4ICMgcG9ydHMu ICovCisgCisgI2RlZmluZSBNQVhfQUxMT1dfVVNFUlMJCTI1NgkvKiBNYXggIyB1c2VycyBv biBhbGxvdyBsaXN0LiAqLworQEAgLTE0Nyw2ICsxNTEsOSBAQAorIAlpbnQJdXNlX3BhbTsJ CS8qIEVuYWJsZSBhdXRoIHZpYSBQQU0gKi8KKyAKKyAJaW50CXBlcm1pdF90dW47CisrI2lm ZGVmIFdJVEhfTERBUF9QVUJLRVkKKysgICAgICAgIGxkYXBfb3B0X3QgbHBrOworKyNlbmRp ZgorIAorIAlpbnQJbnVtX3Blcm1pdHRlZF9vcGVuczsKKyAKK2RpZmYgLU51YXIgLS1leGNs dWRlICcqLm9yaWcnIC0tZXhjbHVkZSAnKi5yZWonIHNzaGQuYyBzc2hkLmMKKy0tLSBzc2hk LmMJMjAwOC0wNy0xMSAwMDozNjo0OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBzc2hkLmMJMjAw OC0wOC0yMyAxNTowMjo0Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMjcsNiArMTI3LDEwIEBA CisgaW50IGRlbnlfc2V2ZXJpdHk7CisgI2VuZGlmIC8qIExJQldSQVAgKi8KKyAKKysjaWZk ZWYgV0lUSF9MREFQX1BVQktFWQorKyNpbmNsdWRlICJsZGFwYXV0aC5oIgorKyNlbmRpZgor KworICNpZm5kZWYgT19OT0NUVFkKKyAjZGVmaW5lIE9fTk9DVFRZCTAKKyAjZW5kaWYKK0BA IC0xNDg0LDYgKzE0ODgsMTYgQEAKKyAJCWV4aXQoMSk7CisgCX0KKyAKKysjaWZkZWYgV0lU SF9MREFQX1BVQktFWQorKyAgICAvKiBsZGFwX29wdGlvbnNfcHJpbnQoJm9wdGlvbnMubHBr KTsgKi8KKysgICAgLyogWFhYIGluaXRpYWxpemUvY2hlY2sgbGRhcCBjb25uZWN0aW9uIGFu ZCBzZXQgKkxEICovCisrICAgIGlmIChvcHRpb25zLmxway5vbikgeworKyAgICAgICAgaWYg KG9wdGlvbnMubHBrLmxfY29uZiAmJiAobGRhcF9wYXJzZV9sY29uZigmb3B0aW9ucy5scGsp IDwgMCkgKQorKyAgICAgICAgICAgIGVycm9yKCJbTERBUF0gY291bGQgbm90IHBhcnNlICVz Iiwgb3B0aW9ucy5scGsubF9jb25mKTsKKysgICAgICAgIGlmIChsZGFwX2Nvbm5lY3QoJm9w dGlvbnMubHBrKSA8IDApCisrICAgICAgICAgICAgZXJyb3IoIltMREFQXSBjb3VsZCBub3Qg aW5pdGlhbGl6ZSBsZGFwIGNvbm5lY3Rpb24iKTsKKysgICAgfQorKyNlbmRpZgorIAlkZWJ1 Zygic3NoZCB2ZXJzaW9uICUuMTAwcyIsIFNTSF9SRUxFQVNFKTsKKyAKKyAJLyogU3RvcmUg cHJpdmlsZWdlIHNlcGFyYXRpb24gdXNlciBmb3IgbGF0ZXIgdXNlIGlmIHJlcXVpcmVkLiAq LworZGlmZiAtTnVhciAtLWV4Y2x1ZGUgJyoub3JpZycgLS1leGNsdWRlICcqLnJlaicgc3No ZF9jb25maWcgc3NoZF9jb25maWcKKy0tLSBzc2hkX2NvbmZpZwkyMDA4LTA3LTAyIDA1OjM1 OjQzLjAwMDAwMDAwMCAtMDcwMAorKysrIHNzaGRfY29uZmlnCTIwMDgtMDgtMjMgMTU6MDI6 NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTA5LDYgKzEwOSwyMSBAQAorICMgbm8gZGVmYXVs dCBiYW5uZXIgcGF0aAorICNCYW5uZXIgbm9uZQorIAorKyMgaGVyZSBhcmUgdGhlIG5ldyBw YXRjaGVkIGxkYXAgcmVsYXRlZCB0b2tlbnMKKysjIGVudHJpZXMgaW4geW91ciBMREFQIG11 c3QgaGF2ZSBwb3NpeEFjY291bnQgJiBsZGFwUHVibGljS2V5IG9iamVjdGNsYXNzCisrI1Vz ZUxQSyB5ZXMKKysjTHBrTGRhcENvbmYgL2V0Yy9sZGFwLmNvbmYKKysjTHBrU2VydmVycyAg bGRhcDovLzEwLjEuNy4xLyBsZGFwOi8vMTAuMS43LjIvCisrI0xwa1VzZXJETiAgIG91PXVz ZXJzLGRjPXBoZWFyLGRjPW9yZworKyNMcGtHcm91cEROICBvdT1ncm91cHMsZGM9cGhlYXIs ZGM9b3JnCisrI0xwa0JpbmRETiBjbj1NYW5hZ2VyLGRjPXBoZWFyLGRjPW9yZworKyNMcGtC aW5kUHcgc2VjcmV0CisrI0xwa1NlcnZlckdyb3VwIG1haWwKKysjTHBrRmlsdGVyIChob3N0 QWNjZXNzPW1hc3Rlci5waGVhci5vcmcpCisrI0xwa0ZvcmNlVExTIG5vCisrI0xwa1NlYXJj aFRpbWVsaW1pdCAzCisrI0xwa0JpbmRUaW1lbGltaXQgMworKworICMgb3ZlcnJpZGUgZGVm YXVsdCBvZiBubyBzdWJzeXN0ZW1zCisgU3Vic3lzdGVtCXNmdHAJL3Vzci9saWJleGVjL3Nm dHAtc2VydmVyCisgCitkaWZmIC1OdWFyIC0tZXhjbHVkZSAnKi5vcmlnJyAtLWV4Y2x1ZGUg JyoucmVqJyBzc2hkX2NvbmZpZy41IHNzaGRfY29uZmlnLjUKKy0tLSBzc2hkX2NvbmZpZy41 CTIwMDgtMDctMDIgMDU6MzU6NDMuMDAwMDAwMDAwIC0wNzAwCisrKysgc3NoZF9jb25maWcu NQkyMDA4LTA4LTIzIDE1OjAyOjQ3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTEwMTAsNiArMTAx MCw2MiBAQAorIHByb2dyYW0uCisgVGhlIGRlZmF1bHQgaXMKKyAuUGEgL3Vzci9YMTFSNi9i aW4veGF1dGggLgorKy5JdCBDbSBVc2VMUEsKKytTcGVjaWZpZXMgd2hldGhlciBMREFQIHB1 YmxpYyBrZXkgcmV0cmlldmFsIG11c3QgYmUgdXNlZCBvciBub3QuIEl0IGFsbG93CisrYW4g ZWFzeSBjZW50cmFsaXNhdGlvbiBvZiBwdWJsaWMga2V5cyB3aXRoaW4gYW4gTERBUCBkaXJl Y3RvcnkuIFRoZSBhcmd1bWVudCBtdXN0IGJlCisrLkRxIHllcworK29yCisrLkRxIG5vIC4K KysuSXQgQ20gTHBrTGRhcENvbmYKKytTcGVjaWZpZXMgd2hldGhlciBMREFQIFB1YmxpYyBr ZXlzIHNob3VsZCBwYXJzZSB0aGUgc3BlY2lmaWVkIGxkYXAuY29uZiBmaWxlCisraW5zdGVh ZCBvZiBzc2hkX2NvbmZpZyBUb2tlbnMuIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQg cGF0aCB0byBhbiBsZGFwLmNvbmYKKytmaWxlIGxpa2UKKysuUGEgL2V0Yy9sZGFwLmNvbmYK KysuSXQgQ20gTHBrU2VydmVycworK1NwZWNpZmllcyBMREFQIG9uZSBvciBtb3JlIFs6c3Bh Y2U6XSBzZXBhcmF0ZWQgc2VydmVyJ3MgdXJsIHRoZSBmb2xsb3dpbmcgZm9ybSBtYXkgYmUg dXNlZDoKKysuUHAKKytMcGtTZXJ2ZXJzIGxkYXBzOi8vMTI3LjAuMC4xIGxkYXA6Ly8xMjcu MC4wLjIgbGRhcDovLzEyNy4wLjAuMworKy5JdCBDbSBMcGtVc2VyRE4KKytTcGVjaWZpZXMg dGhlIExEQVAgdXNlciBETi4KKysuUHAKKytMcGtVc2VyRE4gb3U9dXNlcnMsZGM9cGhlYXIs ZGM9b3JnCisrLkl0IENtIExwa0dyb3VwRE4KKytTcGVjaWZpZXMgdGhlIExEQVAgZ3JvdXBz IEROLgorKy5QcAorK0xwa0dyb3VwRE4gb3U9Z3JvdXBzLGRjPXBoZWFyLGRjPW9yZworKy5J dCBDbSBMcGtCaW5kRE4KKytTcGVjaWZpZXMgdGhlIExEQVAgYmluZCBETiB0byB1c2UgaWYg bmVjZXNzYXJ5LgorKy5QcAorK0xwa0JpbmRETiBjbj1NYW5hZ2VyLGRjPXBoZWFyLGRjPW9y ZworKy5JdCBDbSBMcGtCaW5kUHcKKytTcGVjaWZpZXMgdGhlIExEQVAgYmluZCBjcmVkZW50 aWFsLiAKKysuUHAKKytMcGtCaW5kUHcgc2VjcmV0CisrLkl0IENtIExwa1NlcnZlckdyb3Vw CisrU3BlY2lmaWVzIG9uZSBvciBtb3JlIFs6c3BhY2U6XSBzZXBhcmF0ZWQgZ3JvdXAgdGhl IHNlcnZlciBpcyBwYXJ0IG9mLiAKKysuUHAKKytMcGtTZXJ2ZXJHcm91cCB1bml4IG1haWwg cHJvZAorKy5JdCBDbSBMcGtGaWx0ZXIKKytTcGVjaWZpZXMgYW4gYWRkaXRpb25hbCBMREFQ IGZpbHRlciB0byB1c2UgZm9yIGZpbmRpbmcgU1NIIGtleXMKKysuUHAKKytMcGtGaWx0ZXIg KGhvc3RBY2Nlc3M9bWFzdGVyLnBoZWFyLm9yZykKKysuSXQgQ20gTHBrRm9yY2VUTFMKKytT cGVjaWZpZXMgaWYgdGhlIExEQVAgc2VydmVyIGNvbm5lY3Rpb24gbXVzdCBiZSB0cmllZCwg Zm9yY2VkIG9yIG5vdCB1c2VkLiBUaGUgYXJndW1lbnQgbXVzdCBiZSAKKysuRHEgeWVzCisr b3IKKysuRHEgbm8KKytvcgorKy5EcSB0cnkgLgorKy5JdCBDbSBMcGtTZWFyY2hUaW1lbGlt aXQKKytTZXBjaWZpZXMgdGhlIHNlYXJjaCB0aW1lIGxpbWl0IGJlZm9yZSB0aGUgc2VhcmNo IGlzIGNvbnNpZGVyZWQgb3Zlci4gdmFsdWUgaXMKKytpbiBzZWNvbmRzLgorKy5QcAorK0xw a1NlYXJjaFRpbWVsaW1pdCAzCisrLkl0IENtIExwa0JpbmRUaW1lbGltaXQKKytTZXBjaWZp ZXMgdGhlIGJpbmQgdGltZSBsaW1pdCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgY29uc2lk ZXJlZCBkZWFkLiB2YWx1ZSBpcworK2luIHNlY29uZHMuCisrLlBwCisrTHBrQmluZFRpbWVs aW1pdCAzCisgLkVsCisgLlNoIFRJTUUgRk9STUFUUworIC5YciBzc2hkIDgKZGlmZiAtTnJ1 IC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9wYXRjaC1zc2hk X2NvbmZpZy41IC9ob21lL2dhd3JpbG9mZi9vcGVuc3NoLXBvcnRhYmxlL2ZpbGVzL3BhdGNo LXNzaGRfY29uZmlnLjUKLS0tIC9ob21lL2dhd3JpbG9mZi9scGsvb3BlbnNzaC1wb3J0YWJs ZS9maWxlcy9wYXRjaC1zc2hkX2NvbmZpZy41CTIwMDYtMTAtMDEgMDU6MTU6MDAuMDAwMDAw MDAwICswMzAwCisrKyAvaG9tZS9nYXdyaWxvZmYvb3BlbnNzaC1wb3J0YWJsZS9maWxlcy9w YXRjaC1zc2hkX2NvbmZpZy41CTIwMTAtMTItMjEgMTE6MzY6MDYuMDAwMDAwMDAwICswMjAw CkBAIC0xLDI1ICsxLDUgQEAKIC0tLSBzc2hkX2NvbmZpZy41Lm9yaWcJVHVlIEF1ZyAyOSAy MjowNjozNCAyMDA2CiArKysgc3NoZF9jb25maWcuNQlTYXQgU2VwIDMwIDEwOjM5OjA3IDIw MDYKLUBAIC0xNjksOSArMTcwLDE2IEBACi0gQnkgZGVmYXVsdCwgbm8gYmFubmVyIGlzIGRp c3BsYXllZC4KLSAuSXQgQ20gQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbgotIFNw ZWNpZmllcyB3aGV0aGVyIGNoYWxsZW5nZS1yZXNwb25zZSBhdXRoZW50aWNhdGlvbiBpcyBh bGxvd2VkLgotLUFsbCBhdXRoZW50aWNhdGlvbiBzdHlsZXMgZnJvbQotLS5YciBsb2dpbi5j b25mIDUKLS1hcmUgc3VwcG9ydGVkLgotK1NwZWNpZmljYWxseSwgaW4KLSsuRnggLAotK3Ro aXMgY29udHJvbHMgdGhlIHVzZSBvZiBQQU0gKHNlZQotKy5YciBwYW0gMyApCi0rZm9yIGF1 dGhlbnRpY2F0aW9uLgotK05vdGUgdGhhdCB0aGlzIGFmZmVjdHMgdGhlIGVmZmVjdGl2ZW5l c3Mgb2YgdGhlCi0rLkNtIFBhc3N3b3JkQXV0aGVudGljYXRpb24KLSthbmQKLSsuQ20gUGVy bWl0Um9vdExvZ2luCi0rdmFyaWFibGVzLgotIFRoZSBkZWZhdWx0IGlzCi0gLkRxIHllcyAu Ci0gLkl0IENtIENpcGhlcnMKIEBAIC01NTQsNyArNTYwLDIyIEBACiAgLkl0IENtIFBhc3N3 b3JkQXV0aGVudGljYXRpb24KICBTcGVjaWZpZXMgd2hldGhlciBwYXNzd29yZCBhdXRoZW50 aWNhdGlvbiBpcyBhbGxvd2VkLgo= --------------090401030803030509030101-- --------------ms040800010301040905010606 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIITbDCC BjQwggQcoAMCAQICAR4wDQYJKoZIhvcNAQEFBQAwfTELMAkGA1UEBhMCSUwxFjAUBgNVBAoT DVN0YXJ0Q29tIEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNp Z25pbmcxKTAnBgNVBAMTIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA3 MTAyNDIxMDE1NVoXDTE3MTAyNDIxMDE1NVowgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1T dGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWdu aW5nMTgwNgYDVQQDEy9TdGFydENvbSBDbGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENs aWVudCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcJg8zOLdgasSmkLhOr lr6KMoOMpohBllVHrdRvEg/q6r8jR+EK75xCGhR8ToREoqe7zM9/UnC6TS2y9UKTpT1v7RSM zR0t6ndl0TWBuUr/UXBhPk+Kmy7bI4yW4urC+y7P3/1/X7U8ocb8VpH/Clt+4iq7nirMcNh6 qJR+xjOhV+VHzQMALuGYn5KZmc1NbJQYclsGkDxDz2UbFqE2+6vIZoL+jb9x4Pa5gNf1TwSD kOkikZB1xtB4ZqtXThaABSONdfmv/Z1pua3FYxnCFmdr/+N2JLKutIxMYqQOJebr/f/h5t95 m4JgrM3Y/w7YX9d7YAL9jvN4SydHsU6n65cCAwEAAaOCAa0wggGpMA8GA1UdEwEB/wQFMAMB Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRTcu2SnODaywFcfH6WNU7y1LhRgjAfBgNV HSMEGDAWgBROC+8apEBbpRdphzDKNGhD0EGu8jBmBggrBgEFBQcBAQRaMFgwJwYIKwYBBQUH MAGGG2h0dHA6Ly9vY3NwLnN0YXJ0c3NsLmNvbS9jYTAtBggrBgEFBQcwAoYhaHR0cDovL3d3 dy5zdGFydHNzbC5jb20vc2ZzY2EuY3J0MFsGA1UdHwRUMFIwJ6AloCOGIWh0dHA6Ly93d3cu c3RhcnRzc2wuY29tL3Nmc2NhLmNybDAnoCWgI4YhaHR0cDovL2NybC5zdGFydHNzbC5jb20v c2ZzY2EuY3JsMIGABgNVHSAEeTB3MHUGCysGAQQBgbU3AQIBMGYwLgYIKwYBBQUHAgEWImh0 dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93 d3cuc3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwDQYJKoZIhvcNAQEFBQADggIBAAqD CH14qywGXLhjjF6uHLkjd02hcdh9hrw+VUsv+q1eeQWB21jWj3kJ96AUlPCoEGZ/ynJNScWy 6QMVQjbbMXltUfO4n4bGGdKo3awPWp61tjAFgraLJgDk+DsSvUD6EowjMTNx25GQgyYJ5RPI zKKR9tQW8gGK+2+RHxkUCTbYFnL6kl8Ch507rUdPPipJ9CgJFws3kDS3gOS5WFMxcjO5DwKf KSETEPrHh7p5shuuNktvsv6hxHTLhiMKX893gxdT3XLS9OKmCv87vkINQcNEcIIoFWbP9HOR z9v3vQwR4e3ksLc2JZOAFK+ssS5XMEoznzpihEP0PLc4dCBYjbvSD7kxgDwZ+Aj8Q9PkbvE9 sIPP7ON0fz095HdThKjiVJe6vofq+n6b1NBc8XdrQvBmunwxD5nvtTW4vtN6VY7mUCmxsCie uoBJ9OlqmsVWQvifIYf40dJPZkk9YgGTzWLpXDSfLSplbY2LL9C9U0ptvjcDjefLTvqSFc7t w1sEhF0n/qpA2r0GpvkLRDmcSwVyPvmjFBGqUp/pNy8ZuPGQmHwFi2/14+xeSUDG2bwnsYJQ G2EdJCB6luQ57GEnTA/yKZSTKI8dDQa8Sd3zfXb19mOgSF0bBdXbuKhEpuP9wirslFe6fQ1t 5j5R0xi72MZ8ikMu1RQZKCyDbMwazlHiMIIGljCCBX6gAwIBAgIDAb7OMA0GCSqGSIb3DQEB BQUAMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20g Q2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBDbGllbnQgQ0EwHhcNMTAxMDIyMDcwNjU0 WhcNMTExMDIzMDQ0MjE0WjCBjzEgMB4GA1UEDRMXMjc5NzY1LW9JYUoyZzVWbFlOMkIxMHYx HjAcBgNVBAoTFVBlcnNvbmEgTm90IFZhbGlkYXRlZDEpMCcGA1UEAxMgU3RhcnRDb20gRnJl ZSBDZXJ0aWZpY2F0ZSBNZW1iZXIxIDAeBgkqhkiG9w0BCQEWEWJhcnpvZ0B0ZWxlY29tLmJ5 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqNuuLPvrhyATcaXqYPmx3ZnDuFut 5stBO/WRcGXglYk1RDr5LUeY40HLNOHEVRmQlZ0kAmm8K3W3pwICQZ93LDMEsi5IUWpd2azw QaIvzkA3fXRk+aVUYWbFAm8rcHbbEzYmDEfegs+oocriK5AQEpMs7HjbRwHj+nb2Fk1aiaRP vxThAILKqjAXGcr2K1qRsWV7Kf4bp36EhAzOTf8mazbsOXEqagkIfnwFDqEd0bJ2XhJMnwBt SXOnulSRuYFfQ/kP3IQd7vZZimikcx9z2LJB4lDr/422Lh/G4cMteqHKZhAVUCDGP0E6uzEj kFRUkGb4AIbcUp5QpYD/FQxgdwIDAQABo4IC+jCCAvYwCQYDVR0TBAIwADALBgNVHQ8EBAMC BLAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMB0GA1UdDgQWBBSV0VEMqvSMGFoV 4sk6rIxeUbJnQzAfBgNVHSMEGDAWgBRTcu2SnODaywFcfH6WNU7y1LhRgjAcBgNVHREEFTAT gRFiYXJ6b2dAdGVsZWNvbS5ieTCCAUIGA1UdIASCATkwggE1MIIBMQYLKwYBBAGBtTcBAgIw ggEgMC4GCCsGAQUFBwIBFiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3kucGRmMDQG CCsGAQUFBwIBFihodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9pbnRlcm1lZGlhdGUucGRmMIG3 BggrBgEFBQcCAjCBqjAUFg1TdGFydENvbSBMdGQuMAMCAQEagZFMaW1pdGVkIExpYWJpbGl0 eSwgc2VlIHNlY3Rpb24gKkxlZ2FsIExpbWl0YXRpb25zKiBvZiB0aGUgU3RhcnRDb20gQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkgUG9saWN5IGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN0 YXJ0c3NsLmNvbS9wb2xpY3kucGRmMGMGA1UdHwRcMFowK6ApoCeGJWh0dHA6Ly93d3cuc3Rh cnRzc2wuY29tL2NydHUxLWNybC5jcmwwK6ApoCeGJWh0dHA6Ly9jcmwuc3RhcnRzc2wuY29t L2NydHUxLWNybC5jcmwwgY4GCCsGAQUFBwEBBIGBMH8wOQYIKwYBBQUHMAGGLWh0dHA6Ly9v Y3NwLnN0YXJ0c3NsLmNvbS9zdWIvY2xhc3MxL2NsaWVudC9jYTBCBggrBgEFBQcwAoY2aHR0 cDovL3d3dy5zdGFydHNzbC5jb20vY2VydHMvc3ViLmNsYXNzMS5jbGllbnQuY2EuY3J0MCMG A1UdEgQcMBqGGGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tLzANBgkqhkiG9w0BAQUFAAOCAQEA n+1siaVAwT+f6HNr6rws73QegfthCYrLPy3Ep7nEqM5NCWLNfRh+lhmF8TsvCyPqnIzRMcPZ zFTJ3OverwgP/+tW5X2TtRRtl9gZRfo1uKCB4faRtAHMm1gogjm/SmzuHtH7dFd+dA8+pRbW inpAd3+jjw1zmMoBfq4PoQMK8W8UIRgCUFWrjvBgvNxNrFHw/+wVyirC6Bqu4IWkR3ccrWva VC2MJ3zBKf5rcELYFGubVr1qt4Fc2BS2AI2wD+F/YXgxqzzgjj9I8MYj56qpdEcPT89XHZxO Dg4zl1OLjKDeIa5VIcKCDsqvbV/unbrvLocpNY6vq5pxoS46D//JGjCCBpYwggV+oAMCAQIC AwG+zjANBgkqhkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB MB4XDTEwMTAyMjA3MDY1NFoXDTExMTAyMzA0NDIxNFowgY8xIDAeBgNVBA0TFzI3OTc2NS1v SWFKMmc1VmxZTjJCMTB2MR4wHAYDVQQKExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxKTAnBgNV BAMTIFN0YXJ0Q29tIEZyZWUgQ2VydGlmaWNhdGUgTWVtYmVyMSAwHgYJKoZIhvcNAQkBFhFi YXJ6b2dAdGVsZWNvbS5ieTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjbriz7 64cgE3Gl6mD5sd2Zw7hbrebLQTv1kXBl4JWJNUQ6+S1HmONByzThxFUZkJWdJAJpvCt1t6cC AkGfdywzBLIuSFFqXdms8EGiL85AN310ZPmlVGFmxQJvK3B22xM2JgxH3oLPqKHK4iuQEBKT LOx420cB4/p29hZNWomkT78U4QCCyqowFxnK9itakbFleyn+G6d+hIQMzk3/Jms27DlxKmoJ CH58BQ6hHdGydl4STJ8AbUlzp7pUkbmBX0P5D9yEHe72WYpopHMfc9iyQeJQ6/+Nti4fxuHD LXqhymYQFVAgxj9BOrsxI5BUVJBm+ACG3FKeUKWA/xUMYHcCAwEAAaOCAvowggL2MAkGA1Ud EwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAdBgNV HQ4EFgQUldFRDKr0jBhaFeLJOqyMXlGyZ0MwHwYDVR0jBBgwFoAUU3Ltkpzg2ssBXHx+ljVO 8tS4UYIwHAYDVR0RBBUwE4ERYmFyem9nQHRlbGVjb20uYnkwggFCBgNVHSAEggE5MIIBNTCC ATEGCysGAQQBgbU3AQICMIIBIDAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5j b20vcG9saWN5LnBkZjA0BggrBgEFBQcCARYoaHR0cDovL3d3dy5zdGFydHNzbC5jb20vaW50 ZXJtZWRpYXRlLnBkZjCBtwYIKwYBBQUHAgIwgaowFBYNU3RhcnRDb20gTHRkLjADAgEBGoGR TGltaXRlZCBMaWFiaWxpdHksIHNlZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUg YXQgaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjBjBgNVHR8EXDBaMCugKaAn hiVodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9jcnR1MS1jcmwuY3JsMCugKaAnhiVodHRwOi8v Y3JsLnN0YXJ0c3NsLmNvbS9jcnR1MS1jcmwuY3JsMIGOBggrBgEFBQcBAQSBgTB/MDkGCCsG AQUFBzABhi1odHRwOi8vb2NzcC5zdGFydHNzbC5jb20vc3ViL2NsYXNzMS9jbGllbnQvY2Ew QgYIKwYBBQUHMAKGNmh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2NlcnRzL3N1Yi5jbGFzczEu Y2xpZW50LmNhLmNydDAjBgNVHRIEHDAahhhodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS8wDQYJ KoZIhvcNAQEFBQADggEBAJ/tbImlQME/n+hza+q8LO90HoH7YQmKyz8txKe5xKjOTQlizX0Y fpYZhfE7Lwsj6pyM0THD2cxUydzr3q8ID//rVuV9k7UUbZfYGUX6NbiggeH2kbQBzJtYKII5 v0ps7h7R+3RXfnQPPqUW1op6QHd/o48Nc5jKAX6uD6EDCvFvFCEYAlBVq47wYLzcTaxR8P/s FcoqwugaruCFpEd3HK1r2lQtjCd8wSn+a3BC2BRrm1a9areBXNgUtgCNsA/hf2F4Mas84I4/ SPDGI+eqqXRHD0/PVx2cTg4OM5dTi4yg3iGuVSHCgg7Kr21f7p267y6HKTWOr6uacaEuOg// yRoxggPQMIIDzAIBATCBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0 ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNV BAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENBAgMB vs4wCQYFKw4DAhoFAKCCAhAwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B CQUxDxcNMTAxMjIxMDk1ODM2WjAjBgkqhkiG9w0BCQQxFgQUDxS+v9VVzcQnPeXOcNZQhHzi oYUwXwYJKoZIhvcNAQkPMVIwUDALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcN AwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIGlBgkrBgEE AYI3EAQxgZcwgZQwgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSsw KQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYDVQQDEy9T dGFydENvbSBDbGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQQIDAb7OMIGn BgsqhkiG9w0BCRACCzGBl6CBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB AgMBvs4wDQYJKoZIhvcNAQEBBQAEggEAiOmZH/WmErhgUKsNxFwgdipLPE4anw3Lr0wSMa9K nikmruaDLgZ2YUmO6IxElqghPkVRxGgqX/zWwpgy1diM8XUGJeJ97ztxQhKmfJcC9hsKkFn+ wvQagDmmkmggshWbUUn6htTzFCV3v2OYqf00zxMwAE0ZUQ1ZureXNGpPHjNUOLGoAiCmQQej Goaj934IJucpzA4voO1TzWDi+ZeT/wrBoEigt6VQ4AmTqNriyCmpEv0DKhjwojcBLd1LcfUv VERyj83r7ug/wIzmVp0H9ps8gttZpbuXJiGjdqr1v77e5llAAuhJGSaRgoYOQQ8uQDS30FZ7 7oU3q7WdeefODQAAAAAAAA== --------------ms040800010301040905010606--