From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [RFC XTF PATCH] Pagetable Emulation testing Date: Mon, 6 Mar 2017 16:42:20 +0000 Message-ID: <1488818540-7075-1-git-send-email-andrew.cooper3@citrix.com> References: <1488204198-23948-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1488204198-23948-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4K LS0tCiB0ZXN0cy9wYWdldGFibGUtZW11bGF0aW9uL01ha2VmaWxlIHwgICAxMSArCiB0ZXN0cy9w YWdldGFibGUtZW11bGF0aW9uL21haW4uYyAgIHwgMTExOSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHRlc3RzL3BhZ2V0YWJsZS1lbXVsYXRpb24vc3R1YnMuUyAgfCAgIDk0 ICsrKwogdGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9zdHVicy5oICB8ICAgMjUgKwogNCBmaWxl cyBjaGFuZ2VkLCAxMjQ5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9w YWdldGFibGUtZW11bGF0aW9uL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvcGFn ZXRhYmxlLWVtdWxhdGlvbi9tYWluLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9wYWdldGFi bGUtZW11bGF0aW9uL3N0dWJzLlMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9wYWdldGFibGUt ZW11bGF0aW9uL3N0dWJzLmgKCmRpZmYgLS1naXQgYS90ZXN0cy9wYWdldGFibGUtZW11bGF0aW9u L01ha2VmaWxlIGIvdGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2YyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVz dHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACitpbmNsdWRl ICQoUk9PVCkvYnVpbGQvY29tbW9uLm1rCisKK05BTUUgICAgICA6PSBwYWdldGFibGUtZW11bGF0 aW9uCitDQVRFR09SWSAgOj0gZnVuY3Rpb25hbAorVEVTVC1FTlZTIDo9IGh2bTMycHNlIGh2bTMy cGFlIGh2bTY0CisKK1ZBUlktQ0ZHICA6PSBoYXAgc2hhZG93CisKK29iai1wZXJlbnYgKz0gc3R1 YnMubyBtYWluLm8KKworaW5jbHVkZSAkKFJPT1QpL2J1aWxkL2dlbi5tawpkaWZmIC0tZ2l0IGEv dGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9tYWluLmMgYi90ZXN0cy9wYWdldGFibGUtZW11bGF0 aW9uL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGY2OWUwCi0t LSAvZGV2L251bGwKKysrIGIvdGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9tYWluLmMKQEAgLTAs MCArMSwxMTE5IEBACisvKioKKyAqIEBmaWxlIHRlc3RzL3BhZ2V0YWJsZS1lbXVsYXRpb24vbWFp bi5jCisgKiBAcmVmIHRlc3QtcGFnZXRhYmxlLWVtdWxhdGlvbiAtIFRPRE8uCisgKgorICogQHBh Z2UgdGVzdC1wYWdldGFibGUtZW11bGF0aW9uIFRPRE8KKyAqCisgKiBAc2EgdGVzdHMvcGFnZXRh YmxlLWVtdWxhdGlvbi9tYWluLmMKKyAqLworI2luY2x1ZGUgPHh0Zi5oPgorCisjaW5jbHVkZSA8 YXJjaC9kZWNvZGUuaD4KKyNpbmNsdWRlIDxhcmNoL2V4aW5mby5oPgorI2luY2x1ZGUgPGFyY2gv aWR0Lmg+CisjaW5jbHVkZSA8YXJjaC9tc3ItaW5kZXguaD4KKyNpbmNsdWRlIDxhcmNoL3BhZ2V0 YWJsZS5oPgorI2luY2x1ZGUgPGFyY2gvcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXJjaC9zeW1i b2xpYy1jb25zdC5oPgorCisjaW5jbHVkZSAic3R1YnMuaCIKKworY29uc3QgY2hhciB0ZXN0X3Rp dGxlW10gPSAiVGVzdCBwYWdldGFibGUtZW11bGF0aW9uIjsKKworaW50cHRlX3QgbDF0W1BBR0Vf U0laRSAvIHNpemVvZihpbnRwdGVfdCldIF9fYWxpZ25lZChQQUdFX1NJWkUpOworaW50cHRlX3Qg bDJ0W1BBR0VfU0laRSAvIHNpemVvZihpbnRwdGVfdCldIF9fYWxpZ25lZChQQUdFX1NJWkUpOwor CisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPiAzCitpbnRwdGVfdCBsM3RbUEFHRV9TSVpFIC8g c2l6ZW9mKGludHB0ZV90KV0gX19hbGlnbmVkKFBBR0VfU0laRSk7CisjZWxzZQorZXh0ZXJuIGlu dHB0ZV90IGwzdFtQQUdFX1NJWkUgLyBzaXplb2YoaW50cHRlX3QpXTsKKyNlbmRpZgorCisjZGVm aW5lIExEVF9TRUwgMHgwMDBGIC8qIEVudHJ5IDB4OCwgTERULCBSUEwzICovCisKKyNkZWZpbmUg UEZFQ19QIFg4Nl9QRkVDX1BSRVNFTlQKKyNkZWZpbmUgUEZFQ19XIFg4Nl9QRkVDX1dSSVRFCisj ZGVmaW5lIFBGRUNfVSBYODZfUEZFQ19VU0VSCisjZGVmaW5lIFBGRUNfUiBYODZfUEZFQ19SU1ZE CisjZGVmaW5lIFBGRUNfSSBYODZfUEZFQ19JTlNOCisjZGVmaW5lIFBGRUMoLi4uKSBUT0tfT1Io UEZFQ18sICMjX19WQV9BUkdTX18pCisKK3VpbnQ2NF90IGVmZXI7Cit1bnNpZ25lZCBsb25nIGNy MCwgY3I0OworYm9vbCBob3N0X254X2xlYWtlZDsKK2Jvb2wgYW1kX2ZhbTEwX2VycmF0dW07Citi b29sIHNoYWRvd19wYWdpbmc7CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGxvbmcg dmE7CisgICAgYm9vbCBhY3RpdmU7CisgICAgYm9vbCB1c2VyOworICAgIGNvbnN0IGNoYXIgKmRl c2M7CisKKyAgICBpbnRwdGVfdCBwdGV2YWw7CisgICAgYm9vbCBwdGVfcHJpbnRlZDsKK30gdW5k ZXJfdGVzdDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHVicworeworICAgIHVuc2lnbmVkIGxv bmcgKCpyZWFkKSAgICAgICAgICAodW5zaWduZWQgbG9uZyB2YSk7CisgICAgdW5zaWduZWQgbG9u ZyAoKmltcGxpY2l0KSAgICAgICh1bnNpZ25lZCBsb25nIHZhKTsKKyAgICB1bnNpZ25lZCBsb25n ICgqd3JpdGUpICAgICAgICAgKHVuc2lnbmVkIGxvbmcgdmEpOworICAgIHVuc2lnbmVkIGxvbmcg KCpleGVjKSAgICAgICAgICAodW5zaWduZWQgbG9uZyB2YSk7CisgICAgdW5zaWduZWQgbG9uZyAo KnJlYWRfdXNlcikgICAgICh1bnNpZ25lZCBsb25nIHZhKTsKKyAgICB1bnNpZ25lZCBsb25nICgq aW1wbGljaXRfdXNlcikgKHVuc2lnbmVkIGxvbmcgdmEpOworICAgIHVuc2lnbmVkIGxvbmcgKCp3 cml0ZV91c2VyKSAgICAodW5zaWduZWQgbG9uZyB2YSk7CisgICAgdW5zaWduZWQgbG9uZyAoKmV4 ZWNfdXNlcikgICAgICh1bnNpZ25lZCBsb25nIHZhKTsKK30gcmVndWxhcl9zdHVicyA9IHsKKyAg ICAucmVhZCAgICAgICAgICA9IHN0dWJfcmVhZCwKKyAgICAuaW1wbGljaXQgICAgICA9IHN0dWJf aW1wbGljaXQsCisgICAgLndyaXRlICAgICAgICAgPSBzdHViX3dyaXRlLAorICAgIC5leGVjICAg ICAgICAgID0gc3R1Yl9leGVjLAorICAgIC5yZWFkX3VzZXIgICAgID0gc3R1Yl9yZWFkX3VzZXIs CisgICAgLmltcGxpY2l0X3VzZXIgPSBzdHViX2ltcGxpY2l0X3VzZXIsCisgICAgLndyaXRlX3Vz ZXIgICAgPSBzdHViX3dyaXRlX3VzZXIsCisgICAgLmV4ZWNfdXNlciAgICAgPSBzdHViX2V4ZWNf dXNlciwKK30sIGZvcmNlX3N0dWJzID0geworICAgIC5yZWFkICAgICAgICAgID0gc3R1Yl9mb3Jj ZV9yZWFkLAorICAgIC5pbXBsaWNpdCAgICAgID0gc3R1Yl9mb3JjZV9pbXBsaWNpdCwKKyAgICAu d3JpdGUgICAgICAgICA9IHN0dWJfZm9yY2Vfd3JpdGUsCisgICAgLmV4ZWMgICAgICAgICAgPSBz dHViX2ZvcmNlX2V4ZWMsCisgICAgLnJlYWRfdXNlciAgICAgPSBzdHViX2ZvcmNlX3JlYWRfdXNl ciwKKyAgICAuaW1wbGljaXRfdXNlciA9IHN0dWJfZm9yY2VfaW1wbGljaXRfdXNlciwKKyAgICAu d3JpdGVfdXNlciAgICA9IHN0dWJfZm9yY2Vfd3JpdGVfdXNlciwKKyAgICAuZXhlY191c2VyICAg ICA9IHN0dWJfZm9yY2VfZXhlY191c2VyLAorfTsKKworc3RydWN0IG1hcHBpbmdfaW5mbworewor ICAgIHVuc2lnbmVkIGludCBsZXZlbCwgb3JkZXI7CisgICAgdm9pZCAqdmE7CisgICAgaW50cHRl X3QgKnB0ZSwgKmZlX3B0ZTsKKyAgICB1aW50NjRfdCBwYWRkcjsKKworICAgIHVuaW9uCisgICAg eworICAgICAgICBpbnRwdGVfdCAqcHRlc1s0XTsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsK KyAgICAgICAgICAgIGludHB0ZV90ICpsMWUsICpsMmUsICpsM2UsICpsNGU7CisgICAgICAgIH07 CisgICAgfTsKK307CisKK3ZvaWQgZmx1c2hfdGxiKGJvb2wgZ2xvYmFsKQoreworICAgIHdyaXRl X2NyMyhyZWFkX2NyMygpKTsKKworICAgIGlmICggZ2xvYmFsICYmIChjcjQgJiBYODZfQ1I0X1BH RSkgKQorICAgIHsKKyAgICAgICAgd3JpdGVfY3I0KGNyNCAmIH5YODZfQ1I0X1BHRSk7CisgICAg ICAgIHdyaXRlX2NyNChjcjQpOworICAgIH0KK30KKworYm9vbCBleF9jaGVja19wZihzdHJ1Y3Qg Y3B1X3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBleHRhYmxlX2Vu dHJ5ICpleCkKK3sKKyAgICBpZiAoIHJlZ3MtPmVudHJ5X3ZlY3RvciA9PSBYODZfRVhDX1BGICkK KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyID0gcmVhZF9jcjIoKTsKKworICAgICAg ICBpZiAoIChjcjIgIT0gdW5kZXJfdGVzdC52YSkgJiYKKyAgICAgICAgICAgICAoY3IyICE9IHVu ZGVyX3Rlc3QudmEgKyAoTERUX1NFTCAmIH43KSkgKQorICAgICAgICAgICAgeHRmX2ZhaWx1cmUo IkJhZCAlJWNyMjogZXhwZWN0ZWQgJXAsIGdvdCAlcFxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgIF9wKHVuZGVyX3Rlc3QudmEpLCBfcChjcjIpKTsKKworICAgICAgICByZWdzLT5heCA9IEVY SU5GT19TWU0oUEYsIHJlZ3MtPmVycm9yX2NvZGUpOworCisgICAgICAgIGlmICggZXgtPmZpeHVw ICkKKyAgICAgICAgICAgIHJlZ3MtPmlwID0gZXgtPmZpeHVwOworICAgICAgICBlbHNlCisgICAg ICAgICAgICByZWdzLT5pcCA9ICoodW5zaWduZWQgbG9uZyAqKWNwdV9yZWdzX3NwKHJlZ3MpOwor CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor dm9pZCBfX3ByaW50ZigxLCAyKSBmYWlsKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHZh X2xpc3QgYXJnczsKKworICAgIGlmICggIXVuZGVyX3Rlc3QuYWN0aXZlICkKKyAgICAgICAgcmV0 dXJuOworCisgICAgaWYgKCAhdW5kZXJfdGVzdC5wdGVfcHJpbnRlZCApCisgICAgeworICAgICAg ICBpbnRwdGVfdCBwdGUgPSB1bmRlcl90ZXN0LnB0ZXZhbDsKKyAgICAgICAgcHJpbnRrKCIgIFBU RSAlIlBSSXB0ZSI6JXMlcyVzJXMlcyVzJXMlc1xuIiwgcHRlLAorICAgICAgICAgICAgICAgcHRl ICYgX1BBR0VfTlggPyAiIE54IiA6ICIiLAorICAgICAgICAgICAgICAgcHRlICYgMHg3ZmYwMDAw MDAwMDAwMDAwVUxMID8gIiBBdiIgOiAiIiwKKyAgICAgICAgICAgICAgIHB0ZSAmICgoMVVMTCA8 PCA1MikgLSAxKSAmIH4oKDFVTEwgPDwgbWF4cGh5c2FkZHIpIC0gMSkgPyAiIFJzIiA6ICIiLAor ICAgICAgICAgICAgICAgcHRlICYgX1BBR0VfR0xPQkFMID8gIiBHIiA6ICIiLAorICAgICAgICAg ICAgICAgcHRlICYgX1BBR0VfUFNFID8gIiArIiA6ICIiLAorICAgICAgICAgICAgICAgcHRlICYg X1BBR0VfVVNFUiA/ICIgVSIgOiAiIiwKKyAgICAgICAgICAgICAgIHB0ZSAmIF9QQUdFX1JXID8g IiBXIiA6ICIiLAorICAgICAgICAgICAgICAgcHRlICYgX1BBR0VfUFJFU0VOVCA/ICIgUCIgOiAi IgorICAgICAgICAgICAgKTsKKworICAgICAgICB1bmRlcl90ZXN0LnB0ZV9wcmludGVkID0gdHJ1 ZTsKKyAgICB9CisKKyAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgIHZwcmludGsoZm10LCBh cmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgeHRmX2ZhaWx1cmUoTlVMTCk7Cit9CisKK2Jv b2wgdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3QgY3B1X3JlZ3MgKnJlZ3MpCit7CisgICAgZmFp bCgiRVJST1I6IFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nICVzICVzXG4iLAorICAgICAgICAg dW5kZXJfdGVzdC51c2VyID8gIlVzZXIiIDogIlN1cGVydmlzb3IiLAorICAgICAgICAgdW5kZXJf dGVzdC5kZXNjKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVf bWFwcGluZ3Moc3RydWN0IG1hcHBpbmdfaW5mbyAqbSwgdW5zaWduZWQgaW50IGxldmVsLCBib29s IHN1cGVyLCBwYWRkcl90IHBhZGRyKQoreworICAgIGJvb2wgcHNlMzYgPSBDT05GSUdfUEFHSU5H X0xFVkVMUyA9PSAyICYmIHBhZGRyICE9ICh1aW50MzJfdClwYWRkcjsKKworICAgIG1lbXNldCht LCAwLCBzaXplb2YoKm0pKTsKKworI2RlZmluZSBQQUdFX0NPTU1PTiBQRl9TWU0oQUQsIFUsIFJX LCBQKQorICAgIC8qCisgICAgICogRm9yIDQtbGV2ZWwgcGFnaW5nLCB3ZSB1c2UgbDRbMS8yXS4K KyAgICAgKi8KKyAgICBpZiAoIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDQgKQorICAgIHsKKwor ICAgICAgICBwYWVfbDRfaWRlbnRtYXBbMV0gPSAodW5zaWduZWQgbG9uZylsM3QgfCBQQUdFX0NP TU1PTjsKKyAgICAgICAgcGFlX2w0X2lkZW50bWFwWzJdID0gKHVuc2lnbmVkIGxvbmcpbDN0IHwg UEFHRV9DT01NT047CisKKyAgICAgICAgbDN0WzBdICAgPSAodW5zaWduZWQgbG9uZylsMnQgfCBQ QUdFX0NPTU1PTjsKKyAgICAgICAgbDN0WzUxMV0gPSAodW5zaWduZWQgbG9uZylsMnQgfCBQQUdF X0NPTU1PTjsKKworICAgICAgICBsMnRbMF0gICA9ICh1bnNpZ25lZCBsb25nKWwxdCB8IFBBR0Vf Q09NTU9OOworICAgICAgICBsMnRbNTExXSA9ICh1bnNpZ25lZCBsb25nKWwxdCB8IFBBR0VfQ09N TU9OOworCisgICAgICAgIGwxdFswXSAgID0gcGFkZHIgfCBQQUdFX0NPTU1PTjsKKyAgICAgICAg bDF0WzUxMV0gPSAoKHBhZGRyIC0gMSkgJiB+MHhmZmYpIHwgUEFHRV9DT01NT047CisKKyAgICAg ICAgbS0+dmEgICAgID0gX3AoMlVMTCA8PCBQQUVfTDRfUFRfU0hJRlQpOworICAgICAgICBtLT5s MWUgICAgPSAmbDF0WzBdOworICAgICAgICBtLT5sMmUgICAgPSAmbDJ0WzBdOworICAgICAgICBt LT5sM2UgICAgPSAmbDN0WzBdOworICAgICAgICBtLT5sNGUgICAgPSBfcCgmcGFlX2w0X2lkZW50 bWFwWzJdKTsKKyAgICAgICAgbS0+ZmVfcHRlID0gJmwxdFs1MTFdOworCisgICAgICAgIGFzbShf QVNNX0VYVEFCTEVfSEFORExFUigyIDw8IFBBRV9MNF9QVF9TSElGVCwgMCwgZXhfY2hlY2tfcGYp KTsKKyAgICAgICAgdW5kZXJfdGVzdC52YSA9ICh1bnNpZ25lZCBsb25nKW0tPnZhOworICAgIH0K KyAgICBlbHNlIGlmICggQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gMyApCisgICAgeworICAgICAg ICBwYWUzMl9sM19pZGVudG1hcFsxXSA9ICh1bnNpZ25lZCBsb25nKWwydCB8IF9QQUdFX1BSRVNF TlQ7CisgICAgICAgIHBhZTMyX2wzX2lkZW50bWFwWzJdID0gKHVuc2lnbmVkIGxvbmcpbDJ0IHwg X1BBR0VfUFJFU0VOVDsKKworICAgICAgICBsMnRbMF0gICA9ICh1bnNpZ25lZCBsb25nKWwxdCB8 IFBBR0VfQ09NTU9OOworICAgICAgICBsMnRbNTExXSA9ICh1bnNpZ25lZCBsb25nKWwxdCB8IFBB R0VfQ09NTU9OOworCisgICAgICAgIGwxdFswXSAgID0gcGFkZHIgfCBQQUdFX0NPTU1PTjsKKyAg ICAgICAgbDF0WzUxMV0gPSAoKHBhZGRyIC0gMSkgJiB+MHhmZmYpIHwgUEFHRV9DT01NT047CisK KyAgICAgICAgbS0+dmEgICAgID0gX3AoMlVMTCA8PCBQQUVfTDNfUFRfU0hJRlQpOworICAgICAg ICBtLT5sMWUgICAgPSAmbDF0WzBdOworICAgICAgICBtLT5sMmUgICAgPSAmbDJ0WzBdOworICAg ICAgICBtLT5sM2UgICAgPSBfcCgmcGFlMzJfbDNfaWRlbnRtYXBbMl0pOworICAgICAgICBtLT5s NGUgICAgPSBOVUxMOworICAgICAgICBtLT5mZV9wdGUgPSAmbDF0WzUxMV07CisKKyAgICAgICAg YXNtKF9BU01fRVhUQUJMRV9IQU5ETEVSKDIgPDwgUEFFX0wzX1BUX1NISUZULCAwLCBleF9jaGVj a19wZikpOworICAgICAgICB1bmRlcl90ZXN0LnZhID0gKHVuc2lnbmVkIGxvbmcpbS0+dmE7Cisg ICAgfQorICAgIGVsc2UgaWYgKCBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSAyICkKKyAgICB7Cisg ICAgICAgIGlmICggcHNlMzYgKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3VwZXIp OworICAgICAgICAgICAgQVNTRVJUKElTX0FMSUdORUQocGFkZHIsIE1CKDQpKSk7CisKKyAgICAg ICAgICAgIHBzZV9sMl9pZGVudG1hcFs1MTFdID0gZm9sZF9wc2UzNigocGFkZHIgLSBNQig0KSkg fCBQQUdFX0NPTU1PTiB8IF9QQUdFX1BTRSk7CisgICAgICAgICAgICBwc2VfbDJfaWRlbnRtYXBb NTEyXSA9IGZvbGRfcHNlMzYocGFkZHIgfCBQQUdFX0NPTU1PTiB8IF9QQUdFX1BTRSk7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwc2VfbDJfaWRlbnRt YXBbNTExXSA9ICh1bnNpZ25lZCBsb25nKWwxdCB8IFBBR0VfQ09NTU9OOworICAgICAgICAgICAg cHNlX2wyX2lkZW50bWFwWzUxMl0gPSAodW5zaWduZWQgbG9uZylsMXQgfCBQQUdFX0NPTU1PTjsK KworICAgICAgICAgICAgbDF0WzBdICAgID0gcGFkZHIgfCBQQUdFX0NPTU1PTjsKKyAgICAgICAg ICAgIGwxdFsxMDIzXSA9ICgocGFkZHIgLSAxKSAmIH4weGZmZikgfCBQQUdFX0NPTU1PTjsKKyAg ICAgICAgfQorCisgICAgICAgIG0tPnZhICAgICA9IF9wKDJVTEwgPDwgUEFFX0wzX1BUX1NISUZU KTsKKyAgICAgICAgbS0+bDFlICAgID0gcHNlMzYgPyBOVUxMIDogJmwxdFswXTsKKyAgICAgICAg bS0+bDJlICAgID0gX3AoJnBzZV9sMl9pZGVudG1hcFs1MTJdKTsKKyAgICAgICAgbS0+bDNlICAg ID0gTlVMTDsKKyAgICAgICAgbS0+bDRlICAgID0gTlVMTDsKKyAgICAgICAgbS0+ZmVfcHRlID0g cHNlMzYgPyBfcCgmcHNlX2wyX2lkZW50bWFwWzUxMV0pIDogJmwxdFsxMDIzXTsKKworICAgICAg ICBhc20oX0FTTV9FWFRBQkxFX0hBTkRMRVIoMiA8PCBQQUVfTDNfUFRfU0hJRlQsIDAsIGV4X2No ZWNrX3BmKSk7CisgICAgICAgIHVuZGVyX3Rlc3QudmEgPSAodW5zaWduZWQgbG9uZyltLT52YTsK KyAgICB9CisgICAgZWxzZQorICAgICAgICBwYW5pYygiJXMoKSBQQUdJTkdfTEVWRUxTICV1IG5v dCBpbXBsZW1lbnRlZCB5ZXRcbiIsCisgICAgICAgICAgICAgIF9fZnVuY19fLCBDT05GSUdfUEFH SU5HX0xFVkVMUyk7CisKKyN1bmRlZiBQQUdFX0NPTU1PTgorCisgICAgLyogRmx1c2ggdGhlIFRM QiBiZWZvcmUgdHJ5aW5nIHRvIHVzZSB0aGUgbmV3IG1hcHBpbmdzLiAqLworICAgIGZsdXNoX3Rs YihmYWxzZSk7CisKKyAgICAvKiBQdXQgRkVQIGltbWVkaWF0ZWx5IGJlZm9yZSB2YSwgYW5kIGEg cmV0IGluc3RydWN0aW9uIGF0IHZhLiAqLworICAgIG1lbWNweShtLT52YSAtIDUsICJceDBmXHgw Ynhlblx4YzMiLCA2KTsKKyAgICBiYXJyaWVyKCk7CisKKyAgICAvKiBSZWFkIHRoZW0gYmFjaywg dG8gY29uZmlybSB0aGF0IFJBTSBpcyBwcm9wZXJseSBpbiBwbGFjZS4gKi8KKyAgICBpZiAoIG1l bWNtcChtLT52YSAtIDUsICJceDBmXHgwYnhlblx4YzMiLCA2KSApCisgICAgICAgIHBhbmljKCJC YWQgcGh5cyBvciB2aXJ0dWFsIHNldHVwXG4iKTsKKworICAgIC8qIENvbnN0cnVjdCB0aGUgTERU IGF0IHZhLiAqLworICAgIHVzZXJfZGVzYyAqbGR0ID0gbS0+dmE7CisKKyAgICBsZHRbTERUX1NF TCA+PiAzXSA9ICh0eXBlb2YoKmxkdCkpSU5JVF9HRFRFX1NZTSgwLCAweGZmZmZmLCBDT01NT04s IERBVEEsIERQTDMsIEIsIFcpOworICAgIGdkdFtHRFRFX0FWQUlMMF0gID0gKHR5cGVvZigqZ2R0 KSlJTklUX0dEVEUoKHVuc2lnbmVkIGxvbmcpbS0+dmEsIFBBR0VfU0laRSwgMHg4Mik7CisjaWYg X194ODZfNjRfXworICAgIC8qIEZvciA2NGJpdCwgcHV0IHRoZSB1cHBlciAzMiBiaXRzIG9mIGJh c2UgaW50byB0aGUgYWRqYWNlbnQgZW50cnkuICovCisgICAgZ2R0W0dEVEVfQVZBSUwwICsgMV0g PQorICAgICAgICAodXNlcl9kZXNjKXt7eyAubG8gPSAoKHVuc2lnbmVkIGxvbmcpbS0+dmEpID4+ IDMyLCAuaGkgPSAwIH19fTsKKyNlbmRpZgorICAgIGxsZHQoR0RURV9BVkFJTDAgPDwgMyk7Cisg ICAgd3JpdGVfZnMoTERUX1NFTCk7CisKKyAgICBtLT5sZXZlbCA9IGxldmVsOworICAgIG0tPnB0 ZSA9IG0tPnB0ZXNbbGV2ZWwgLSAxXTsKKworICAgIGlmICggcHNlMzYgKQorICAgIHsKKyAgICAg ICAgLyogTm8gbDFlIGF0IGFsbC4gKi8KKyAgICAgICAgbS0+b3JkZXIgPSBQVF9PUkRFUiArIFBB R0VfU0hJRlQ7CisgICAgICAgIG0tPnBhZGRyID0gKm0tPnB0ZSAmIH4weGZmZjsKKyAgICB9Cisg ICAgZWxzZSBpZiAoIHN1cGVyICYmIChjcjQgJiAoWDg2X0NSNF9QQUV8WDg2X0NSNF9QU0UpKSAp CisgICAgeworICAgICAgICAvKiBTdXBlcnBhZ2UgaW4gZWZmZWN0LiAqLworICAgICAgICBtLT5v cmRlciA9ICgobGV2ZWwgLSAxKSAqIFBUX09SREVSKSArIFBBR0VfU0hJRlQ7CisgICAgICAgIG0t PnBhZGRyID0gICptLT5sMWUgJiB+MHhmZmY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg ICAgIC8qIFNtYWxsIHBhZ2UsIG9yIHN1cGVycGFnZSBub3QgaW4gZWZmZWN0LiAqLworICAgICAg ICBtLT5vcmRlciA9IDA7CisgICAgICAgIG0tPnBhZGRyID0gKm0tPnB0ZSAmIH4weGZmZjsKKyAg ICB9Cit9CisKK3ZvaWQgY2xlYXJfYWQoc3RydWN0IG1hcHBpbmdfaW5mbyAqbSkKK3sKKyAgICB1 bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShtLT5wdGVz KTsgKytpICkKKyAgICAgICAgaWYgKCBtLT5wdGVzW2ldICkKKyAgICAgICAgICAgICptLT5wdGVz W2ldICY9IH5fUEFHRV9BRDsKKworICAgIGludmxwZyhtLT52YSk7Cit9CisKK2VudW0gbW9kaWZp ZXIKK3sKKyAgICAvKiBDYWxjLiAqLworICAgIFdQICAgICAgID0gMSA8PCAwLAorICAgIE5YICAg ICAgID0gMSA8PCAxLAorICAgIFNNRVAgICAgID0gMSA8PCAyLAorICAgIFNNQVAgICAgID0gMSA8 PCAzLAorICAgIEFDICAgICAgID0gMSA8PCA0LAorICAgIElNUCAgICAgID0gMSA8PCA1LAorCisg ICAgLyogQ2hlY2sgb25seS4gKi8KKyAgICBXUklURSAgICA9IDEgPDwgNiwKK307CisKK3ZvaWQg Y2hlY2soc3RydWN0IG1hcHBpbmdfaW5mbyAqbSwgZXhpbmZvX3QgYWN0dWFsLCBleGluZm9fdCBl eHBlY3RlZCwgZW51bSBtb2RpZmllciBtb2QpCit7CisgICAgLyogQ2hlY2sgdGhhdCB0aGUgYWN0 dWFsIHBhZ2VmYXVsdCBtYXRjaGVkIG91ciBleHBlY3RhdGlvbi4gKi8KKyAgICBpZiAoIGFjdHVh bCAhPSBleHBlY3RlZCApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICp1c2VyX3N1cCA9IHVu ZGVyX3Rlc3QudXNlciA/ICJVc2VyIiA6ICJTdXBlcnZpc29yIjsKKyAgICAgICAgYm9vbCBhY19m YXVsdCA9ICEhYWN0dWFsLCBleF9mYXVsdCA9ICEhZXhwZWN0ZWQ7CisgICAgICAgIGNoYXIgYWNf ZWNbMTZdLCBleF9lY1sxNl07CisKKyAgICAgICAgaWYgKCBhY19mYXVsdCApCisgICAgICAgICAg ICB4ODZfZXhjX2RlY29kZV9lYyhhY19lYywgQVJSQVlfU0laRShhY19lYyksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBYODZfRVhDX1BGLCAodWludDE2X3QpYWN0dWFsKTsKKyAgICAg ICAgaWYgKCBleF9mYXVsdCApCisgICAgICAgICAgICB4ODZfZXhjX2RlY29kZV9lYyhleF9lYywg QVJSQVlfU0laRShleF9lYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYODZfRVhD X1BGLCAodWludDE2X3QpZXhwZWN0ZWQpOworCisgICAgICAgIGlmICggYWNfZmF1bHQgJiYgIWV4 X2ZhdWx0ICkKKyAgICAgICAgICAgIGZhaWwoIiAgICBGYWlsOiBleHBlY3RlZCBubyBmYXVsdCwg Z290ICNQRlslc10gZm9yICVzICVzXG4iLAorICAgICAgICAgICAgICAgICBhY19lYywgdXNlcl9z dXAsIHVuZGVyX3Rlc3QuZGVzYyk7CisgICAgICAgIGVsc2UgaWYgKCAhYWNfZmF1bHQgJiYgZXhf ZmF1bHQgKQorICAgICAgICAgICAgZmFpbCgiICAgIEZhaWw6IGV4cGVjdGVkICNQRlslc10sIGdv dCBubyBmYXVsdCBmb3IgJXMgJXNcbiIsCisgICAgICAgICAgICAgICAgIGV4X2VjLCB1c2VyX3N1 cCwgdW5kZXJfdGVzdC5kZXNjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFpbCgiICAg IEZhaWw6IGV4cGVjdGVkICNQRlslc10sIGdvdCAjUEZbJXNdIGZvciAlcyAlc1xuIiwKKyAgICAg ICAgICAgICAgICAgZXhfZWMsIGFjX2VjLCAgdXNlcl9zdXAsIHVuZGVyX3Rlc3QuZGVzYyk7Cisg ICAgfQorCisgICAgLyogQ2hlY2sgdGhhdCBBL0QgYml0cyBnb3QgdXBkYXRlZCBhcyBleHBlY3Rl ZC4gKi8KKyAgICB1bnNpZ25lZCBpbnQgbGVhZl9sZXZlbCA9CisgICAgICAgIG0tPm9yZGVyID8g KChtLT5vcmRlciAtIFBBR0VfU0hJRlQpIC8gUFRfT1JERVIpIDogMDsKKyAgICB1bnNpZ25lZCBp bnQgaTsgLyogTkIgLSBMZXZlbHMgYXJlIDAtaW5kZXhlZC4gKi8KKworICAgIGlmICggYW1kX2Zh bTEwX2VycmF0dW0gKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQU1EIEZhbTEwIGFw cGVhcnMgdG8gZGVmZXIgdGhlIHNldHRpbmcgb2YgYWNjZXNzIGJpdHMgZm9yIGltcGxpY2l0Cisg ICAgICAgICAqIGxvYWRzLiAgQXMgYSByZXN1bHQsIHRoZSBpbXBsaWNpdCB0ZXN0cyAod2hpY2gg bG9hZCAlZnMpIGRvbid0CisgICAgICAgICAqIG5lY2Vzc2FyaWx5IG9ic2VydmUgdGhlIGFjY2Vz cyBiaXRzIGJlaW5nIHNldCBvbiB0aGUgcGFnZXdhbGsgdG8KKyAgICAgICAgICogdGhlIExEVC4K KyAgICAgICAgICoKKyAgICAgICAgICogRXhwZXJpbWVudGFsbHksIGEgc2VyaWFsaXNpbmcgaW5z dHJ1Y3Rpb24gZml4ZXMgdGhpbmdzLCBvciBhIGxvb3AKKyAgICAgICAgICogb2YgMTAwMCBub3Bz LCBidXQgc28gZG9lcyBmb3JjaW5nIHRoZSB1c2Ugb2YgdGhlIGxvYWRlZCBzZWdtZW50LgorICAg ICAgICAgKgorICAgICAgICAgKiBJZiB0aGlzIGlzIGFuIGltcGxpY2l0IGxvYWQgd2hpY2ggZGlk bid0IGZhdWx0LCByZWFkIHRocm91Z2ggJWZzIHRvCisgICAgICAgICAqIGZvcmNlIGl0IHRvIGJl IGxvYWRlZCBpbnRvIHRoZSBzZWdtZW50IGNhY2hlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYg KCAobW9kICYgSU1QKSAmJiAhYWN0dWFsICkKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoIm1v diAlJWZzOjB4MTAwMCwgJTAiIDogIj1yIiAoaSkpOworICAgIH0KKworICAgIGZvciAoIGkgPSAw OyBpIDwgQVJSQVlfU0laRShtLT5wdGVzKTsgKytpICkKKyAgICB7CisgICAgICAgIGludCBleHBf YSwgZXhwX2Q7CisKKyAgICAgICAgaWYgKCAhbS0+cHRlc1tpXSApCisgICAgICAgICAgICBjb250 aW51ZTsKKworICAgICAgICBpZiAoIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDMgJiYgaSA9PSAy ICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIDMyYml0IFBBRSBw YWdpbmcgaXMgc3BlY2lhbC4gIFRoZSA0IFBEUFRFJ3MgYXJlIHJlYWQgZnJvbQorICAgICAgICAg ICAgICogbWVtb3J5LCBjYWNoZWQgaW4gdGhlIHByb2Nlc3NvciBhbmQgZG9uJ3Qgc3RyaWN0bHkg Y291bnQgYXMKKyAgICAgICAgICAgICAqIHBhZ2V0YWJsZXMuIFRoZSBBL0QgYml0cyBhcmUgbm90 IHVwZGF0ZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGV4cF9hID0gMDsKKyAgICAg ICAgICAgIGV4cF9kID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggbGVhZl9sZXZl bCA+IGkgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTG9naWNh bGx5IGJlbG93IGEgc3VwZXJwYWdlLiAgTm90aGluZyBzaG91bGQgY29uc2lkZXIgdGhpcyBwYXJ0 CisgICAgICAgICAgICAgKiBvZiB0aGUgcGFnZXRhYmxlIHN0cnVjdHVyZSwgYW5kIG5laXRoZXIg QSBvciBEIHNob3VsZCBiZSBzZXQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGV4cF9h ID0gMDsKKyAgICAgICAgICAgIGV4cF9kID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm ICggbGVhZl9sZXZlbCA9PSBpICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAg ICAgICAqIEF0IGEgbGVhZiBwYWdlLiAgSWYgdGhlcmUgd2FzIG5vIGZhdWx0LCB3ZSBleHBlY3Qg QSB0byBiZSBzZXQsCisgICAgICAgICAgICAgKiBvcHRpb25hbGx5IEQgaWYgYSB3cml0ZSBvY2N1 cnJlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZXhwX2EgPSAoYWN0dWFsID09IDAp OworICAgICAgICAgICAgZXhwX2QgPSBleHBfYSAmJiAobW9kICYgV1JJVEUpOworICAgICAgICB9 CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAq IEhpZ2hlciBsZXZlbCB0cmFuc2xhdGlvbiBzdHJ1Y3R1cmUuICBBIHByb2Nlc3NvciBpcyBmcmVl IHRvCisgICAgICAgICAgICAgKiBjYWNoZSB0aGUgcGFydGlhbCB0cmFuc2xhdGlvbiBvciBub3Qs IGF0IGl0cyBkaXNjcmV0aW9uLCBidXQKKyAgICAgICAgICAgICAqIHRoZXkgd2lsbCBuZXZlciBi ZSBkaXJ0eS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZXhwX2EgPSAtMTsKKyAgICAg ICAgICAgIGV4cF9kID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYWN0X2EgPSAqbS0+ cHRlc1tpXSAmIF9QQUdFX0FDQ0VTU0VEOworICAgICAgICBib29sIGFjdF9kID0gKm0tPnB0ZXNb aV0gJiBfUEFHRV9ESVJUWTsKKworICAgICAgICBpZiAoIChleHBfYSA+PSAwICYmIGV4cF9hICE9 IGFjdF9hKSB8fCAoZXhwX2QgIT0gYWN0X2QpICkKKyAgICAgICAgICAgIGZhaWwoIiAgICBGYWls OiBleHBlY3RlZCBMJXUgQUQgPSAlYyV1LCBnb3QgJXUldSBmb3IgJXMgJXNcbiIsCisgICAgICAg ICAgICAgICAgIGkgKyAxLCBleHBfYSA9PSAxID8gJzEnIDogZXhwX2EgPT0gMCA/ICcwJyA6ICd4 JywgZXhwX2QsCisgICAgICAgICAgICAgICAgIGFjdF9hLCBhY3RfZCwKKyAgICAgICAgICAgICAg ICAgdW5kZXJfdGVzdC51c2VyID8gIlVzZXIiIDogIlN1cGVydmlzb3IiLCB1bmRlcl90ZXN0LmRl c2MpOworICAgIH0KKworICAgIGNsZWFyX2FkKG0pOworICAgIHdyaXRlX2ZzKDApOworfQorCitl eGluZm9fdCBjYWxjKHN0cnVjdCBtYXBwaW5nX2luZm8gKm0sIHVpbnQ2NF90IG5ldywgdW5zaWdu ZWQgaW50IHdhbGssIGVudW0gbW9kaWZpZXIgbW9kKQoreworICAgIGJvb2wgbnhfdmFsaWQgICA9 IENPTkZJR19QQUdJTkdfTEVWRUxTID49IDMgJiYgKGhvc3RfbnhfbGVha2VkIHx8IChtb2QgJiBO WCkpOworICAgIGJvb2wgaW5zbl92YWxpZCA9IG54X3ZhbGlkIHx8IChtb2QgJiBTTUVQKTsKKyAg ICB1aW50NjRfdCByc3ZkID0gKCgxVUxMIDw8IDUyKSAtIDEpICYgfigoMVVMTCA8PCBtYXhwaHlz YWRkcikgLSAxKTsKKworICAgIC8qIEFjY3VtdWxhdGUgYWRkaXRpb25hbCBiaXRzIHdoaWNoIGFy ZSByZXNlcnZlZC4gKi8KKyAgICBpZiAoICFueF92YWxpZCApCisgICAgICAgIHJzdmQgfD0gX1BB R0VfTlg7CisKKyAgICBpZiAoIG0tPmxldmVsID09IDQgKQorICAgICAgICByc3ZkIHw9IF9QQUdF X1BTRSB8ICh2ZW5kb3JfaXNfYW1kID8gX1BBR0VfR0xPQkFMIDogMCk7CisgICAgZWxzZSBpZiAo IG0tPmxldmVsID09IDMgJiYgIWNwdV9oYXNfcGFnZTFnYiApCisgICAgICAgIHJzdmQgfD0gX1BB R0VfUFNFOworCisgICAgaWYgKCBtLT5vcmRlciApCisgICAgeworICAgICAgICBpZiAoIENPTkZJ R19QQUdJTkdfTEVWRUxTID4gMiB8fCAhY3B1X2hhc19wc2UzNiApCisgICAgICAgICAgICByc3Zk IHw9ICgoMVVMTCA8PCBtLT5vcmRlcikgLSAxKSAmIH4oX1BBR0VfUFNFX1BBVCB8IChfUEFHRV9Q U0VfUEFUIC0gMSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByc3ZkIHw9ICgxVUxMIDw8 IDIxKSB8IGZvbGRfcHNlMzYocnN2ZCk7CisgICAgfQorCisgICAgaWYgKCBDT05GSUdfUEFHSU5H X0xFVkVMUyA9PSAzICkKKyAgICAgICAgcnN2ZCB8PSAweDdmZjAwMDAwMDAwMDAwMDBVTEw7CisK KworICAgIGlmICggIWluc25fdmFsaWQgKQorICAgICAgICB3YWxrICY9IH5QRkVDKEkpOworCisg ICAgZXhpbmZvX3QgYmFzZSA9IEVYSU5GT19TWU0oUEYsIHdhbGsgJiBQRkVDKEksIFUsIFcpKTsK KworICAgIC8qIENoZWNrIHdoZXRoZXIgYSB0cmFuc2xhdGlvbiBleGlzdHMuICovCisgICAgaWYg KCAhKG5ldyAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAgICAgcmV0dXJuIGJhc2U7CisgICAgYmFz ZSB8PSBQRkVDKFApOworCisgICAgaWYgKCBuZXcgJiByc3ZkICkKKyAgICAgICAgcmV0dXJuIGJh c2UgfCBQRkVDKFIpOworCisgICAgLyogQ2hlY2sgYWNjZXNzIHJpZ2h0cy4gKi8KKworICAgIGlm ICggKHdhbGsgJiBQRkVDKEkpKSAmJiAobmV3ICYgX1BBR0VfTlgpICkKKyAgICAgICAgLyogSW5z biBmZXRjaCBvZiBOWCBwYWdlPyBBbHdheXMgZmFpbC4gKi8KKyAgICAgICAgcmV0dXJuIGJhc2U7 CisKKyAgICBpZiAoIHdhbGsgJiBQRkVDKFUpICkKKyAgICB7CisgICAgICAgIC8qIFVzZXIgd2Fs ay4gKi8KKworICAgICAgICBpZiAoICEobmV3ICYgX1BBR0VfVVNFUikgKQorICAgICAgICAgICAg LyogU3VwZXJ2aXNvciBwYWdlPyBBbHdheXMgZmFpbC4gKi8KKyAgICAgICAgICAgIHJldHVybiBi YXNlOworCisgICAgICAgIGlmICggKHdhbGsgJiBQRkVDKFcpKSAmJiAhKG5ldyAmIF9QQUdFX1JX KSApCisgICAgICAgICAgICAvKiBXcml0ZSB0byBhIHJlYWQtb25seSBwYWdlPyAqLworICAgICAg ICAgICAgcmV0dXJuIGJhc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFN1 cGVydmlzb3IgV2Fsay4gKi8KKworICAgICAgICBpZiAoIG5ldyAmIF9QQUdFX1VTRVIgKQorICAg ICAgICB7CisgICAgICAgICAgICAvKiBVc2VyIHBhZ2UuICovCisKKyAgICAgICAgICAgIGlmICgg KHdhbGsgJiBQRkVDKEkpKSAmJiAobW9kICYgU01FUCkgKQorICAgICAgICAgICAgICAgIC8qIElu c24gZmV0Y2ggd2l0aCBTTUVQPyAqLworICAgICAgICAgICAgICAgIHJldHVybiBiYXNlOworCisg ICAgICAgICAgICBpZiAoICEod2FsayAmIFBGRUMoSSkpICYmIChtb2QgJiBTTUFQKSAmJgorICAg ICAgICAgICAgICAgICAoKG1vZCAmIElNUCkgfHwgIShtb2QgJiBBQykpICkKKyAgICAgICAgICAg ICAgICAvKiBkYXRhIGZldGNoIHdpdGggU01BUCBhbmQgKEltcGxpY2l0IG9yICFBQyk/ICovCisg ICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICh3 YWxrICYgUEZFQyhXKSkgJiYgIShuZXcgJiBfUEFHRV9SVykgJiYgKG1vZCAmIFdQKSApCisgICAg ICAgICAgICAvKiBXcml0ZSB0byBhIHJlYWQtb25seSBwYWdlIHdpdGggV1AgYWN0aXZlPyAqLwor ICAgICAgICAgICAgcmV0dXJuIGJhc2U7CisgICAgfQorCisgICAgLyogU2hvdWxkIHN1Y2NlZWQu ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgdGVzdF9wdGUoY29uc3Qgc3RydWN0IHN0dWJz ICpzdHVicywgc3RydWN0IG1hcHBpbmdfaW5mbyAqbSwgdWludDY0X3Qgb3ZlcmxheSkKK3sKKyAg ICB1aW50NjRfdCBuZXcgPSBtLT5wYWRkciB8IG92ZXJsYXk7CisgICAgYm9vbCB1c2VyID0gZmFs c2U7CisKKyAgICB1bmRlcl90ZXN0LnB0ZXZhbCA9ICptLT5wdGUgPSBuZXc7CisgICAgdW5kZXJf dGVzdC5wdGVfcHJpbnRlZCA9IGZhbHNlOworICAgIGNsZWFyX2FkKG0pOworCisgICAgdW5kZXJf dGVzdC5hY3RpdmUgPSB0cnVlOworCisgICAgZm9yICggOyA7IHVzZXIgPSB0cnVlICkKKyAgICB7 CisgICAgICAgIHVuc2lnbmVkIGludCBiYXNlID0gdXNlciA/IFBGRUMoVSkgOiAwOworCisjZGVm aW5lIENBTEwoZm4sIHZhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICh1c2VyID8gZXhlY191c2VyX3BhcmFtKGZuICMjIF91c2Vy LCAodW5zaWduZWQgbG9uZykodmEpKSAgICAgICBcCisgICAgICAgICAgICAgIDogZm4oKHVuc2ln bmVkIGxvbmcpKHZhKSkpCisKKyAgICAgICAgdW5kZXJfdGVzdC51c2VyID0gdXNlcjsKKworICAg ICAgICAvKiBNYXAgdGhlIGV4ZWMgRkVQIHN0dWIgd2l0aCBzdWl0YWJsZSBwZXJtaXNzaW9ucy4g Ki8KKyAgICAgICAgaWYgKCBzdHVicyA9PSAmZm9yY2Vfc3R1YnMgKQorICAgICAgICB7CisgICAg ICAgICAgICAqbS0+ZmVfcHRlICY9IH5fUEFHRV9VU0VSOworICAgICAgICAgICAgaWYgKCB1c2Vy ICkKKyAgICAgICAgICAgICAgICAqbS0+ZmVfcHRlIHw9IF9QQUdFX1VTRVI7CisgICAgICAgICAg ICBpbnZscGcobS0+dmEgLSA1KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEJhc2ljIHJlYWQu ICovCisgICAgICAgIHVuZGVyX3Rlc3QuZGVzYyA9ICJSZWFkIjsKKyAgICAgICAgY2hlY2sobSwg Q0FMTChzdHVicy0+cmVhZCwgbS0+dmEpLAorICAgICAgICAgICAgICBjYWxjKG0sIG5ldywgYmFz ZSB8IFBGRUMoKSwgMCksCisgICAgICAgICAgICAgIDApOworCisgICAgICAgIC8qIEltcGxpY2l0 IHJlYWQgKGFsd2F5cyBzdXBlcnZpc29yKS4gIGBtb3YgJExEVF9TRUwsICVmc2AuICovCisgICAg ICAgIHVuZGVyX3Rlc3QuZGVzYyA9ICJSZWFkLCBJbXBsaWNpdCI7CisgICAgICAgIGNoZWNrKG0s IENBTEwoc3R1YnMtPmltcGxpY2l0LCBfcChMRFRfU0VMKSksCisgICAgICAgICAgICAgIGNhbGMo bSwgbmV3LCBQRkVDKCksIElNUCksCisgICAgICAgICAgICAgIElNUCk7CisKKyAgICAgICAgLyog UmVhZCwgU01BUC4gKi8KKyAgICAgICAgaWYgKCBjcHVfaGFzX3NtYXAgKQorICAgICAgICB7Cisg ICAgICAgICAgICB3cml0ZV9jcjQoY3I0IHwgWDg2X0NSNF9TTUFQKTsKKworICAgICAgICAgICAg YXNtIHZvbGF0aWxlICgiY2xhYyIpOworCisgICAgICAgICAgICB1bmRlcl90ZXN0LmRlc2MgPSAi UmVhZCwgU01BUCBBQzAiOworICAgICAgICAgICAgY2hlY2sobSwgQ0FMTChzdHVicy0+cmVhZCwg bS0+dmEpLAorICAgICAgICAgICAgICAgICAgY2FsYyhtLCBuZXcsIGJhc2UgfCBQRkVDKCksIFNN QVApLAorICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICAgICAgICAgIHVuZGVyX3Rlc3QuZGVz YyA9ICJSZWFkLCBJbXBsaWNpdCwgU01BUCBBQzAiOworICAgICAgICAgICAgY2hlY2sobSwgQ0FM TChzdHVicy0+aW1wbGljaXQsIF9wKExEVF9TRUwpKSwKKyAgICAgICAgICAgICAgICAgIGNhbGMo bSwgbmV3LCBQRkVDKCksIFNNQVAgfCBJTVApLAorICAgICAgICAgICAgICAgICAgSU1QKTsKKwor ICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgic3RhYyIpOworCisgICAgICAgICAgICB1bmRlcl90 ZXN0LmRlc2MgPSAiUmVhZCwgU01BUCBBQzEiOworICAgICAgICAgICAgY2hlY2sobSwgQ0FMTChz dHVicy0+cmVhZCwgbS0+dmEpLAorICAgICAgICAgICAgICAgICAgY2FsYyhtLCBuZXcsIGJhc2Ug fCBQRkVDKCksIFNNQVAgfCBBQyksCisgICAgICAgICAgICAgICAgICAwKTsKKworICAgICAgICAg ICAgaWYgKCAhdXNlciAmJiAhc2hhZG93X3BhZ2luZyApCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGlzIGNvcm5lciBjYXNlIGxvc2VzIGlu Zm9ybWF0aW9uIGluIHRoZSBwYWdlZmF1bHQgZXJyb3IKKyAgICAgICAgICAgICAgICAgKiBjb2Rl LCB3aGljaCB0aGUgc2hhZG93IHBhZ2V0YWJsZSBsb2dpYyBpbiB0aGUgaHlwZXJ2aXNvcgorICAg ICAgICAgICAgICAgICAqIGNhbid0IGFjY291bnQgZm9yLgorICAgICAgICAgICAgICAgICAqCisg ICAgICAgICAgICAgICAgICogRXhlY3V0aW5nIHRoaXMgdGVzdCBpbiBzdXBlcnZpc29yIG1vZGUg d2l0aCBzaGFkb3cgcGFnaW5nCisgICAgICAgICAgICAgICAgICogd2lsbCBsaXZlbG9jayB3aXRo IG5vIGZ1cnRoZXIgcHJvZ3Jlc3MgbWFkZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgICAgICB1bmRlcl90ZXN0LmRlc2MgPSAiUmVhZCwgSW1wbGljaXQsIFNNQVAgQUMxIjsKKyAg ICAgICAgICAgICAgICBjaGVjayhtLCBDQUxMKHN0dWJzLT5pbXBsaWNpdCwgX3AoTERUX1NFTCkp LAorICAgICAgICAgICAgICAgICAgICAgIGNhbGMobSwgbmV3LCBQRkVDKCksIFNNQVAgfCBBQyB8 IElNUCksCisgICAgICAgICAgICAgICAgICAgICAgSU1QKTsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgYXNtIHZvbGF0aWxlICgiY2xhYyIpOworCisgICAgICAgICAgICB3cml0ZV9jcjQo Y3I0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEJhc2ljIHdyaXRlLiAqLworICAgICAgICB1 bmRlcl90ZXN0LmRlc2MgPSAiV3JpdGUiOworICAgICAgICBjaGVjayhtLCBDQUxMKHN0dWJzLT53 cml0ZSwgbS0+dmEpLAorICAgICAgICAgICAgICBjYWxjKG0sIG5ldywgYmFzZSB8IFBGRUMoVyks IDApLAorICAgICAgICAgICAgICBXUklURSk7CisKKyAgICAgICAgLyogV3JpdGUsIFdQLiAqLwor ICAgICAgICB3cml0ZV9jcjAoY3IwIHwgWDg2X0NSMF9XUCk7CisKKyAgICAgICAgdW5kZXJfdGVz dC5kZXNjID0gIldyaXRlLCBXUCI7CisgICAgICAgIGNoZWNrKG0sIENBTEwoc3R1YnMtPndyaXRl LCBtLT52YSksCisgICAgICAgICAgICAgIGNhbGMobSwgbmV3LCBiYXNlIHwgUEZFQyhXKSwgV1Ap LAorICAgICAgICAgICAgICBXUklURSk7CisKKyAgICAgICAgd3JpdGVfY3IwKGNyMCk7CisKKyAg ICAgICAgLyogV3JpdGUsIFNNQVAuICovCisgICAgICAgIGlmICggY3B1X2hhc19zbWFwICkKKyAg ICAgICAgeworICAgICAgICAgICAgd3JpdGVfY3I0KGNyNCB8IFg4Nl9DUjRfU01BUCk7CisKKyAg ICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNsYWMiKTsKKworICAgICAgICAgICAgdW5kZXJfdGVz dC5kZXNjID0gIldyaXRlLCBTTUFQIEFDMCI7CisgICAgICAgICAgICBjaGVjayhtLCBDQUxMKHN0 dWJzLT53cml0ZSwgbS0+dmEpLAorICAgICAgICAgICAgICAgICAgY2FsYyhtLCBuZXcsIGJhc2Ug fCBQRkVDKFcpLCBTTUFQKSwKKyAgICAgICAgICAgICAgICAgIFdSSVRFKTsKKworICAgICAgICAg ICAgYXNtIHZvbGF0aWxlICgic3RhYyIpOworCisgICAgICAgICAgICB1bmRlcl90ZXN0LmRlc2Mg PSAiV3JpdGUsIFNNQVAgQUMxIjsKKyAgICAgICAgICAgIGNoZWNrKG0sIENBTEwoc3R1YnMtPndy aXRlLCBtLT52YSksCisgICAgICAgICAgICAgICAgICBjYWxjKG0sIG5ldywgYmFzZSB8IFBGRUMo VyksIFNNQVAgfCBBQyksCisgICAgICAgICAgICAgICAgICBXUklURSk7CisKKyAgICAgICAgICAg IGFzbSB2b2xhdGlsZSAoImNsYWMiKTsKKworCisgICAgICAgICAgICAvKiBXcml0ZSwgU01BUCAr IFdQLiAqLworICAgICAgICAgICAgd3JpdGVfY3IwKGNyMCB8IFg4Nl9DUjBfV1ApOworCisgICAg ICAgICAgICB1bmRlcl90ZXN0LmRlc2MgPSAiV3JpdGUsIFNNQVAgQUMwLCBXUCI7CisgICAgICAg ICAgICBjaGVjayhtLCBDQUxMKHN0dWJzLT53cml0ZSwgbS0+dmEpLAorICAgICAgICAgICAgICAg ICAgY2FsYyhtLCBuZXcsIGJhc2UgfCBQRkVDKFcpLCBTTUFQIHwgV1ApLAorICAgICAgICAgICAg ICAgICAgV1JJVEUpOworCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJzdGFjIik7CisKKyAg ICAgICAgICAgIHVuZGVyX3Rlc3QuZGVzYyA9ICJXcml0ZSwgU01BUCBBQzEsIFdQIjsKKyAgICAg ICAgICAgIGNoZWNrKG0sIENBTEwoc3R1YnMtPndyaXRlLCBtLT52YSksCisgICAgICAgICAgICAg ICAgICBjYWxjKG0sIG5ldywgYmFzZSB8IFBGRUMoVyksIFNNQVAgfCBBQyB8IFdQKSwKKyAgICAg ICAgICAgICAgICAgIFdSSVRFKTsKKworICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY2xhYyIp OworCisgICAgICAgICAgICB3cml0ZV9jcjAoY3IwKTsKKyAgICAgICAgICAgIHdyaXRlX2NyNChj cjQpOworICAgICAgICB9CisKKworICAgICAgICAvKiBCYXNpYyBleGVjLiAqLworICAgICAgICB1 bmRlcl90ZXN0LmRlc2MgPSAiRXhlYyI7CisgICAgICAgIGNoZWNrKG0sIENBTEwoc3R1YnMtPmV4 ZWMsIG0tPnZhKSwKKyAgICAgICAgICAgICAgY2FsYyhtLCBuZXcsIGJhc2UgfCBQRkVDKEkpLCAw KSwKKyAgICAgICAgICAgICAgMCk7CisKKyAgICAgICAgLyogRXhlYywgU01FUC4gKi8KKyAgICAg ICAgaWYgKCBjcHVfaGFzX3NtZXAgKQorICAgICAgICB7CisgICAgICAgICAgICB3cml0ZV9jcjQo Y3I0IHwgWDg2X0NSNF9TTUVQKTsKKworICAgICAgICAgICAgdW5kZXJfdGVzdC5kZXNjID0gIkV4 ZWMsIFNNRVAiOworICAgICAgICAgICAgY2hlY2sobSwgQ0FMTChzdHVicy0+ZXhlYywgbS0+dmEp LAorICAgICAgICAgICAgICAgICAgY2FsYyhtLCBuZXcsIGJhc2UgfCBQRkVDKEkpLCBTTUVQKSwK KyAgICAgICAgICAgICAgICAgIDApOworCisgICAgICAgICAgICB3cml0ZV9jcjQoY3I0KTsKKyAg ICAgICAgfQorCisgICAgICAgIC8qIEV4ZWMsIE5YLiAqLworICAgICAgICBpZiAoIGNwdV9oYXNf bnggKQorICAgICAgICB7CisgICAgICAgICAgICB3cm1zcihNU1JfRUZFUiwgZWZlciB8IEVGRVJf TlhFKTsKKworICAgICAgICAgICAgdW5kZXJfdGVzdC5kZXNjID0gIkV4ZWMsIE5YIjsKKyAgICAg ICAgICAgIGNoZWNrKG0sIENBTEwoc3R1YnMtPmV4ZWMsIG0tPnZhKSwKKyAgICAgICAgICAgICAg ICAgIGNhbGMobSwgbmV3LCBiYXNlIHwgUEZFQyhJKSwgTlgpLAorICAgICAgICAgICAgICAgICAg MCk7CisKKyAgICAgICAgICAgIC8qIEV4ZWMsIE5YIGFuZCBTTUVQLiAqLworICAgICAgICAgICAg aWYgKCBjcHVfaGFzX3NtZXAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdyaXRl X2NyNChjcjQgfCBYODZfQ1I0X1NNRVApOworCisgICAgICAgICAgICAgICAgdW5kZXJfdGVzdC5k ZXNjID0gIkV4ZWMsIE5YLCBTTUVQIjsKKyAgICAgICAgICAgICAgICBjaGVjayhtLCBDQUxMKHN0 dWJzLT5leGVjLCBtLT52YSksCisgICAgICAgICAgICAgICAgICAgICAgY2FsYyhtLCBuZXcsIGJh c2UgfCBQRkVDKEkpLCBOWCB8IFNNRVApLAorICAgICAgICAgICAgICAgICAgICAgIDApOworCisg ICAgICAgICAgICAgICAgd3JpdGVfY3I0KGNyNCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIHdybXNyKE1TUl9FRkVSLCBlZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdXNl ciApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyN1bmRlZiBDQUxMCisKKyAgICB1bmRl cl90ZXN0LmFjdGl2ZSA9IGZhbHNlOworfQorCit2b2lkIHJ1bl90ZXN0KGNvbnN0IHN0cnVjdCBz dHVicyAqc3R1YnMsIHVuc2lnbmVkIGludCBsZXZlbCwgYm9vbCBzdXBlciwgcGFkZHJfdCBwYWRk cikKK3sKKyAgICBjb25zdCB1aW50NjRfdCBiYXNlID0gc3VwZXIgPyBfUEFHRV9QU0UgOiAwOwor ICAgIHN0cnVjdCBtYXBwaW5nX2luZm8gbTsKKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICAgIGJv b2wgY29uZDsKKyAgICAgICAgdWludDY0X3QgYml0OworICAgIH0gdHJhbnNfYml0c1tdID0KKyAg ICAgICAgeworICAgICAgICAgICAgeyAxLCAwIH0sCisgICAgICAgICAgICB7IDEsIF9QQUdFX0dM T0JBTCB9LAorCisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gMgorCisgICAgICAgICAgICB7 IHN1cGVyICYmIChjcjQgJiBYODZfQ1I0X1BTRSkgJiYgIWNwdV9oYXNfcHNlMzYsIDFVTEwgPDwg MTMgfSwKKyAgICAgICAgICAgIHsgc3VwZXIgJiYgKGNyNCAmIFg4Nl9DUjRfUFNFKSAmJiAhY3B1 X2hhc19wc2UzNiwgMVVMTCA8PCAyMSB9LAorCisgICAgICAgICAgICB7IHN1cGVyICYmIHBhZGRy ICE9ICh1aW50MzJfdClwYWRkciwgMVVMTCA8PCAyMSB9LAorCisgICAgICAgICAgICB7IHN1cGVy ICYmIHBhZGRyICE9ICh1aW50MzJfdClwYWRkciAmJiBtYXhwaHlzYWRkciA8IDM5LAorICAgICAg ICAgICAgICBmb2xkX3BzZTM2KDFVTEwgPDwgMzkpIH0sCisgICAgICAgICAgICB7IHN1cGVyICYm IHBhZGRyICE9ICh1aW50MzJfdClwYWRkciAmJiBtYXhwaHlzYWRkciA8IDM4LAorICAgICAgICAg ICAgICBmb2xkX3BzZTM2KDFVTEwgPDwgbWF4cGh5c2FkZHIpIH0sCisKKyNlbHNlCisKKyAgICAg ICAgICAgIHsgc3VwZXIsIDFVTEwgPDwgMTMgfSwKKyAgICAgICAgICAgIHsgc3VwZXIsIFBBR0Vf U0laRSA8PCAoKChsZXZlbCAtIDEpICogUFRfT1JERVIpIC0gMSkgfSwKKworICAgICAgICAgICAg eyBtYXhwaHlzYWRkciA8IDUwLCAxVUxMIDw8IG1heHBoeXNhZGRyIH0sCisgICAgICAgICAgICB7 IG1heHBoeXNhZGRyIDwgNTEsIDFVTEwgPDwgNTEgfSwKKyAgICAgICAgICAgIHsgMSwgMVVMTCA8 PCA1MiB9LAorICAgICAgICAgICAgeyAxLCBfUEFHRV9OWCB9LAorCisjZW5kaWYKKyAgICAgICAg fTsKKyAgICB1aW50MzJfdCBhcl9iaXRzW10gPQorICAgIHsKKyAgICAgICAgMCwKKyAgICAgICAg UEZfU1lNKFApLAorICAgICAgICBQRl9TWU0oUlcsIFApLAorICAgICAgICBQRl9TWU0oVSwgUCks CisgICAgICAgIFBGX1NZTShVLCBSVywgUCksCisgICAgfTsKKyAgICB1bnNpZ25lZCBpbnQgdHJh bnMsIGFyOworCisgICAgcHJpbnRrKCJUZXN0JXMgTCV1ZSVzJXNcbiIsCisgICAgICAgICAgIChz dHVicyA9PSAmZm9yY2Vfc3R1YnMpID8gIiBlbXVsYXRlZCIgOiAiIiwKKyAgICAgICAgICAgbGV2 ZWwsIHN1cGVyID8gIiBTdXBlcnBhZ2UiIDogIiIsCisgICAgICAgICAgIENPTkZJR19QQUdJTkdf TEVWRUxTID09IDIgJiYgIShjcjQgJiBYODZfQ1I0X1BTRSkgPyAiIChObyBQU0UpIiA6ICIiCisg ICAgICAgICk7CisKKyAgICBwcmVwYXJlX21hcHBpbmdzKCZtLCBsZXZlbCwgc3VwZXIsIHBhZGRy KTsKKworICAgIGZvciAoIGFyID0gMDsgYXIgPCBBUlJBWV9TSVpFKGFyX2JpdHMpOyArK2FyICkK KyAgICB7CisgICAgICAgIGZvciAoIHRyYW5zID0gMDsgdHJhbnMgPCBBUlJBWV9TSVpFKHRyYW5z X2JpdHMpOyArK3RyYW5zICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCB0cmFuc19iaXRz W3RyYW5zXS5jb25kICkKKyAgICAgICAgICAgICAgICB0ZXN0X3B0ZShzdHVicywgJm0sIGJhc2Ug fCB0cmFuc19iaXRzW3RyYW5zXS5iaXQgfCBhcl9iaXRzW2FyXSk7CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIHNoYXR0ZXJfY29uc29sZV9zdXBlcnBhZ2Uodm9pZCkKK3sKKyAg ICAvKgorICAgICAqIFNoYXR0ZXIgdGhlIHN1cGVycGFnZSBtYXBwaW5nIHRoZSBQViBjb25zb2xl LiBXZSB3YW50IHRvIHRlc3Qgd2l0aAorICAgICAqIENSNC5QU0UgZGlzYWJsZWQsIGF0IHdoaWNo IHBvaW50IHN1cGVycGFnZXMgc3RvcCB3b3JraW5nLgorICAgICAqLworICAgIHVpbnQ2NF90IHJh d19wZm47CisKKyAgICBpZiAoIGh2bV9nZXRfcGFyYW0oSFZNX1BBUkFNX0NPTlNPTEVfUEZOLCAm cmF3X3BmbikgPT0gMCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbDJvID0gbDJfdGFi bGVfb2Zmc2V0KHJhd19wZm4gPDwgUEFHRV9TSElGVCk7CisKKyAgICAgICAgaWYgKCAobDJfaWRl bnRtYXBbbDJvXSAmIFBGX1NZTShQU0UsIFApKSA9PSBQRl9TWU0oUFNFLCBQKSApCisgICAgICAg IHsKKyAgICAgICAgICAgIHN0YXRpYyBpbnRwdGVfdCBjb25sMXRbTDFfUFRfRU5UUklFU10gX19h bGlnbmVkKFBBR0VfU0laRSk7CisgICAgICAgICAgICBwYWRkcl90IGJhc2VfZ2ZuID0gbDJfaWRl bnRtYXBbbDJvXSA+PiBQQUdFX1NISUZUOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisK KyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb25sMXQpOyArK2kgKQor ICAgICAgICAgICAgICAgIGNvbmwxdFtpXSA9IHB0ZV9mcm9tX2dmbihiYXNlX2dmbiArIGksIFBG X1NZTShBRCwgUlcsIFApKTsKKworICAgICAgICAgICAgbDJfaWRlbnRtYXBbbDJvXSA9IHB0ZV9m cm9tX3ZpcnQoY29ubDF0LCBQRl9TWU0oQUQsIFUsIFJXLCBQKSk7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBmbHVzaF90bGIodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVsYXRlX3BoeXNt YXBfYXJvdW5kKHBhZGRyX3QgcGFkZHIpCit7CisgICAgdW5zaWduZWQgbG9uZyBleHRlbnRzW10g PQorICAgICAgICB7CisgICAgICAgICAgICAocGFkZHIgPj4gUEFHRV9TSElGVCkgLSAxLAorICAg ICAgICAgICAgcGFkZHIgPj4gUEFHRV9TSElGVCwKKyAgICAgICAgfTsKKyAgICBzdHJ1Y3QgeGVu X21lbW9yeV9yZXNlcnZhdGlvbiBtciA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC5leHRlbnRf c3RhcnQgPSBleHRlbnRzLAorICAgICAgICAgICAgLm5yX2V4dGVudHMgPSBBUlJBWV9TSVpFKGV4 dGVudHMpLAorICAgICAgICAgICAgLmRvbWlkID0gRE9NSURfU0VMRiwKKyAgICAgICAgfTsKKyAg ICBpbnQgcmMgPSBoeXBlcmNhbGxfbWVtb3J5X29wKFhFTk1FTV9wb3B1bGF0ZV9waHlzbWFwLCAm bXIpOworCisgICAgaWYgKCByYyAhPSBBUlJBWV9TSVpFKGV4dGVudHMpICkKKyAgICAgICAgcGFu aWMoIkZhaWxlZCBwb3B1bGF0ZV9waHlzbWFwOiAlZFxuIiwgcmMpOworfQorCitzdGF0aWMgdm9p ZCBueF9sZWFrX2NoZWNrKGNvbnN0IHN0cnVjdCBzdHVicyAqc3R1YnMpCit7CisgICAgc3RydWN0 IG1hcHBpbmdfaW5mbyBtOworCisgICAgLyoKKyAgICAgKiBBbHdheXMgdXNlIFJBTSBhdCAxMmss IHdoaWNoIGlzIHByZXNlbnQgYW5kIGVuY29kYWJsZSBldmVuIGluIDJsZXZlbAorICAgICAqIHBh Z2luZy4KKyAgICAgKi8KKyAgICBwcmVwYXJlX21hcHBpbmdzKCZtLCAxLCBmYWxzZSwgMHgzMDAw KTsKKworICAgICptLnB0ZSAmPSB+X1BBR0VfUFJFU0VOVDsKKyAgICBpbnZscGcobS52YSk7CisK KyAgICBleGluZm9fdCByZXMgPSBzdHVicy0+ZXhlYygodW5zaWduZWQgbG9uZyltLnZhKTsKKwor ICAgIGlmICggIXJlcyB8fCBleGluZm9fdmVjKHJlcykgIT0gWDg2X0VYQ19QRiApCisgICAgICAg IHBhbmljKCJUZXN0aW5nIGZvciBOWCBsZWFrIGRpZG4ndCBnZW5lcmF0ZSAjUEZcbiIpOworCisg ICAgaG9zdF9ueF9sZWFrZWQgPSBleGluZm9fZWMocmVzKSAmIFBGRUMoSSk7CisKKyAgICBwcmlu dGsoIkhvc3QgTlggJXNsZWFrZWQlc1xuIiwKKyAgICAgICAgICAgaG9zdF9ueF9sZWFrZWQgICAg PyAiIiAgICAgICAgICAgICAgOiAibm90ICIsCisgICAgICAgICAgIHN0dWJzID09ICZmb3JjZV9z dHVicyA/ICIgaW4gZW11bGF0aW9uIiA6ICIiKTsKK30KKwordm9pZCBydW5fdGVzdHMoY29uc3Qg c3RydWN0IHN0dWJzICpzdHVicywgcGFkZHJfdCBwYWRkcikKK3sKKyAgICBueF9sZWFrX2NoZWNr KHN0dWJzKTsKKworICAgIGlmICggQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gMiApCisgICAgewor ICAgICAgICBpZiAoIHBhZGRyID09ICh1aW50MzJfdClwYWRkciApCisgICAgICAgIHsKKyAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiBwYWRkciBmaXRzIHdpdGhpbiAzMmJpdHMsIHJ1 biBhbGwgdGhlIHRlc3RzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBydW5fdGVzdChz dHVicywgMSwgZmFsc2UsIHBhZGRyKTsKKworICAgICAgICAgICAgY3I0ICY9IH5YODZfQ1I0X1BT RTsKKyAgICAgICAgICAgIHdyaXRlX2NyNChjcjQpOworCisgICAgICAgICAgICBydW5fdGVzdChz dHVicywgMiwgZmFsc2UsIHBhZGRyKTsKKyAgICAgICAgICAgIHJ1bl90ZXN0KHN0dWJzLCAyLCB0 cnVlLCAgcGFkZHIpOworCisgICAgICAgICAgICBjcjQgfD0gWDg2X0NSNF9QU0U7CisgICAgICAg ICAgICB3cml0ZV9jcjQoY3I0KTsKKworICAgICAgICAgICAgcnVuX3Rlc3Qoc3R1YnMsIDIsIGZh bHNlLCBwYWRkcik7CisgICAgICAgICAgICBydW5fdGVzdChzdHVicywgMiwgdHJ1ZSwgIHBhZGRy KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggY3B1X2hhc19wc2UzNiApCisgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICogT3RoZXJ3aXNlLCBwYWRkcnMgYWJvdmUgMzJiaXRzIGNh biBvbmx5IGJlIGVuY29kZWQgd2l0aCBwc2UzNgorICAgICAgICAgICAgICogc3VwZXJwYWdlcy4K KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcnVuX3Rlc3Qoc3R1YnMsIDIsIHRydWUsIHBh ZGRyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRrKCJObyBhcHBsaWNhYmxlIHRl c3RzXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcnVuX3Rlc3Qoc3R1YnMs IDEsIGZhbHNlLCBwYWRkcik7CisgICAgICAgIHJ1bl90ZXN0KHN0dWJzLCAyLCBmYWxzZSwgcGFk ZHIpOworICAgICAgICBydW5fdGVzdChzdHVicywgMiwgdHJ1ZSwgIHBhZGRyKTsKKworICAgICAg ICBpZiAoIENPTkZJR19QQUdJTkdfTEVWRUxTID4gMyApCisgICAgICAgIHsKKyAgICAgICAgICAg IHJ1bl90ZXN0KHN0dWJzLCAzLCBmYWxzZSwgcGFkZHIpOworICAgICAgICAgICAgcnVuX3Rlc3Qo c3R1YnMsIDMsIHRydWUsICBwYWRkcik7CisgICAgICAgICAgICBydW5fdGVzdChzdHVicywgNCwg ZmFsc2UsIHBhZGRyKTsKKyAgICAgICAgICAgIHJ1bl90ZXN0KHN0dWJzLCA0LCB0cnVlLCAgcGFk ZHIpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwcm9iZV9zaGFkb3dfcGFn aW5nKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBTaGFkb3cgcGFnaW5nIHZzIGhhcCBzaG91bGQg YmUgaW5kaXN0aW5ndWlzaGFibGUgdG8gZ3Vlc3RzLgorICAgICAqCisgICAgICogU2hhZG93IHBh Z2luZyBkb2Vzbid0IHN1cHBvcnQgUFNFMzYsIHNvIHRoaXMgZmVhdHVyZSBpcyBub21pbmFsbHkK KyAgICAgKiBoaWRkZW4gZnJvbSBndWVzdHMuCisgICAgICoKKyAgICAgKiBMdWNraWx5KD8pLCBi ZWNhdXNlIG9sZCB2ZXJzaW9ucyBvZiBIeXBlclYgcmVmdXNlIHRvIGJvb3QgaWYgdGhleSBkb24n dAorICAgICAqIHNlZSBQU0UzNiwgaXQgaXMgcHVycG9zZWZ1bGx5IGxlYWtlZCBvbmNlIFBBRSBp cyBlbmFibGVkIHRvIGtlZXAgSHlwZXJWCisgICAgICogaGFwcHkuCisgICAgICoKKyAgICAgKiBB cyBhIHJlc3VsdCwgb3VyIHNoYWRvdyBwYWdpbmcgaGV1cmlzdGljIGlzIHRoYXQgdGhlIHZpc2li aWxpdHkgb2YgdGhlCisgICAgICogUFNFMzYgZmVhdHVyZSBjaGFuZ2VzIGFzIHdlIGZsaXAgaW4g YW5kIG91dCBvZiBQQUUgcGFnaW5nIG1vZGUuCisgICAgICovCisgICAgdW5zaWduZWQgbG9uZyB0 bXA7CisgICAgdW5zaWduZWQgaW50IF8xZDsKKworICAgIHN3aXRjaCAoIENPTkZJR19QQUdJTkdf TEVWRUxTICkKKyAgICB7CisgICAgY2FzZSAyOgorICAgICAgICB3cml0ZV9jcjAoY3IwICYgflg4 Nl9DUjBfUEcpOworCisgICAgICAgIHdyaXRlX2NyMygodW5zaWduZWQgbG9uZylwYWUzMl9sM19p ZGVudG1hcCk7CisKKyAgICAgICAgd3JpdGVfY3I0KGNyNCB8IFg4Nl9DUjRfUEFFKTsKKyAgICAg ICAgd3JpdGVfY3IwKGNyMCk7CisKKyAgICAgICAgXzFkID0gY3B1aWRfZWR4KDEpOworCisgICAg ICAgIHdyaXRlX2NyMChjcjAgJiB+WDg2X0NSMF9QRyk7CisgICAgICAgIHdyaXRlX2NyNChjcjQg JiB+WDg2X0NSNF9QQUUpOworCisgICAgICAgIHdyaXRlX2NyMygodW5zaWduZWQgbG9uZyljcjNf dGFyZ2V0KTsKKworICAgICAgICB3cml0ZV9jcjAoY3IwKTsKKyAgICAgICAgYnJlYWs7CisKKyAg ICBjYXNlIDM6CisgICAgICAgIHdyaXRlX2NyMChjcjAgJiB+WDg2X0NSMF9QRyk7CisgICAgICAg IHdyaXRlX2NyNChjcjQgJiB+WDg2X0NSNF9QQUUpOworCisgICAgICAgIHdyaXRlX2NyMygodW5z aWduZWQgbG9uZylwc2VfbDJfaWRlbnRtYXApOworCisgICAgICAgIHdyaXRlX2NyMChjcjApOwor CisgICAgICAgIF8xZCA9IGNwdWlkX2VkeCgxKTsKKworICAgICAgICB3cml0ZV9jcjAoY3IwICYg flg4Nl9DUjBfUEcpOworCisgICAgICAgIHdyaXRlX2NyMygodW5zaWduZWQgbG9uZyljcjNfdGFy Z2V0KTsKKworICAgICAgICB3cml0ZV9jcjQoY3I0KTsKKyAgICAgICAgd3JpdGVfY3IwKGNyMCk7 CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSA0OgorICAgICAgICBhc20gdm9sYXRpbGUgKC8q IERyb3AgaW50byBhIDMyYml0IGNvbXBhdCBjb2RlIHNlZ21lbnQuICovCisgICAgICAgICAgICAg ICAgICAgICAgInB1c2ggJCVjW2NzMzJdOyIKKyAgICAgICAgICAgICAgICAgICAgICAicHVzaCAk MWY7IgorICAgICAgICAgICAgICAgICAgICAgICJscmV0cTsgMToiCisKKyAgICAgICAgICAgICAg ICAgICAgICAiLmNvZGUzMjsiCisgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0XzMyYml0Ojsi CisKKyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGlwICVDUjQuUEFFICovCisgICAgICAgICAg ICAgICAgICAgICAgIm1vdiAla1tjcjBdLCAlJWNyMDsiCisgICAgICAgICAgICAgICAgICAgICAg Im1vdiAla1tjcjRdLCAlJWNyNDsiCisgICAgICAgICAgICAgICAgICAgICAgIm1vdiAkcHNlX2wy X2lkZW50bWFwLCAla1tjcjNdOyIKKyAgICAgICAgICAgICAgICAgICAgICAibW92ICVrW2NyM10s ICUlY3IzOyIKKyAgICAgICAgICAgICAgICAgICAgICAicmRtc3I7IgorICAgICAgICAgICAgICAg ICAgICAgICJhbmQgJH4iIFNUUihFRkVSX0xNRSkgIiwgJWtbYV07IgorICAgICAgICAgICAgICAg ICAgICAgICJ3cm1zcjsiCisgICAgICAgICAgICAgICAgICAgICAgIm9yICQiIFNUUihYODZfQ1Iw X1BHKSAiLCAla1tjcjBdOyIKKyAgICAgICAgICAgICAgICAgICAgICAibW92ICVrW2NyMF0sICUl Y3IwOyIKKworICAgICAgICAgICAgICAgICAgICAgICJtb3YgJDEsICVrW2FdOyIKKyAgICAgICAg ICAgICAgICAgICAgICAiY3B1aWQ7IgorICAgICAgICAgICAgICAgICAgICAgICJtb3YgJWtbZF0s ICVrW2JdOyIKKworICAgICAgICAgICAgICAgICAgICAgIC8qIEZsaXAgJUNSNC5QQUUgYmFjay4g Ki8KKyAgICAgICAgICAgICAgICAgICAgICAiYW5kICR+IiBTVFIoWDg2X0NSMF9QRykgIiwgJWtb Y3IwXTsiCisgICAgICAgICAgICAgICAgICAgICAgIm1vdiAla1tjcjBdLCAlJWNyMDsiCisgICAg ICAgICAgICAgICAgICAgICAgIm1vdiAkIiBTVFIoTVNSX0VGRVIpICIsICVrW2NdOyIKKyAgICAg ICAgICAgICAgICAgICAgICAicmRtc3I7IgorICAgICAgICAgICAgICAgICAgICAgICJvciAkIiBT VFIoRUZFUl9MTUUpICIsICVrW2FdOyIKKyAgICAgICAgICAgICAgICAgICAgICAid3Jtc3I7Igor ICAgICAgICAgICAgICAgICAgICAgICJvciAkIiBTVFIoWDg2X0NSNF9QQUUpICIsICVrW2NyNF07 IgorICAgICAgICAgICAgICAgICAgICAgICJtb3YgJWtbY3I0XSwgJSVjcjQ7IgorICAgICAgICAg ICAgICAgICAgICAgICJtb3YgJHBhZV9sNF9pZGVudG1hcCwgJWtbY3IzXTsiCisgICAgICAgICAg ICAgICAgICAgICAgIm1vdiAla1tjcjNdLCAlJWNyMzsiCisgICAgICAgICAgICAgICAgICAgICAg Im9yICQiIFNUUihYODZfQ1IwX1BHKSAiLCAla1tjcjBdOyIKKyAgICAgICAgICAgICAgICAgICAg ICAibW92ICVrW2NyMF0sICUlY3IwOyIKKworICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVy biB0byA2NGJpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAibGptcGwgJCVjW2NzXSwgJDFm OyIKKyAgICAgICAgICAgICAgICAgICAgICAiZW5kXzMyYml0OjsiCisgICAgICAgICAgICAgICAg ICAgICAgIi5jb2RlNjQ7IDE6IgorICAgICAgICAgICAgICAgICAgICAgIDogW2FdICI9JmEiICh0 bXApLAorICAgICAgICAgICAgICAgICAgICAgICAgW2JdICI9JmIiIChfMWQpLAorICAgICAgICAg ICAgICAgICAgICAgICAgW2NdICI9JmMiICh0bXApLAorICAgICAgICAgICAgICAgICAgICAgICAg W2RdICI9JmQiICh0bXApLAorICAgICAgICAgICAgICAgICAgICAgICAgW2NyM10gIj0mciIgKHRt cCkKKyAgICAgICAgICAgICAgICAgICAgICA6ICJjIiAoTVNSX0VGRVIpLAorICAgICAgICAgICAg ICAgICAgICAgICAgW2NyMF0gICJSIiAoY3IwICYgflg4Nl9DUjBfUEcpLAorICAgICAgICAgICAg ICAgICAgICAgICAgW2NyNF0gICJSIiAoY3I0ICYgflg4Nl9DUjRfUEFFKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIFtjczMyXSAiaSIgKEdEVEVfQ1MzMl9EUEwwICogOCksCisgICAgICAgICAg ICAgICAgICAgICAgICBbY3NdICAgImkiIChfX0tFUk5fQ1MpKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorCisgICAgc2hhZG93X3BhZ2luZyA9IGNwdV9oYXNfcHNlMzYgXiAhIShfMWQgJiBjcHVm ZWF0X21hc2soWDg2X0ZFQVRVUkVfUFNFMzYpKTsKKworICAgIHByaW50aygiICBQYWdpbmcgbW9k ZSBoZXVyaXN0aWM6ICVzXG4iLCBzaGFkb3dfcGFnaW5nID8gIlNoYWRvdyIgOiAiSGFwIik7Cit9 CisKK3ZvaWQgdGVzdF9tYWluKHZvaWQpCit7CisgICAgeHRmX3VuaGFuZGxlZF9leGNlcHRpb25f aG9vayA9IHVuaGFuZGxlZF9leGNlcHRpb247CisKKyAgICBwcmludGsoIiAgSW5mbzogVmVuZG9y ICVzLCBGYW1pbHkgJXUsIE1vZGVsICV1LCBTdGVwcGluZyAldSwgcGFkZHIgJXUsIHZhZGRyICV1 XG4iCisgICAgICAgICAgICIgIEZlYXR1cmVzOiVzJXMlcyVzJXMlcyVzJXMlcyVzJXNcbiIsCisg ICAgICAgICAgIHg4Nl92ZW5kb3JfbmFtZSh4ODZfdmVuZG9yKSwKKyAgICAgICAgICAgeDg2X2Zh bWlseSwgeDg2X21vZGVsLCB4ODZfc3RlcHBpbmcsIG1heHBoeXNhZGRyLCBtYXh2aXJ0YWRkciwK KyAgICAgICAgICAgY3B1X2hhc19wc2UgICAgID8gIiBQU0UiICAgIDogIiIsCisgICAgICAgICAg IGNwdV9oYXNfcGFlICAgICA/ICIgUEFFIiAgICA6ICIiLAorICAgICAgICAgICBjcHVfaGFzX3Bn ZSAgICAgPyAiIFBHRSIgICAgOiAiIiwKKyAgICAgICAgICAgY3B1X2hhc19wYXQgICAgID8gIiBQ QVQiICAgIDogIiIsCisgICAgICAgICAgIGNwdV9oYXNfcHNlMzYgICA/ICIgUFNFMzYiICA6ICIi LAorICAgICAgICAgICBjcHVfaGFzX3BjaWQgICAgPyAiIFBDSUQiICAgOiAiIiwKKyAgICAgICAg ICAgY3B1X2hhc19ueCAgICAgID8gIiBOWCIgICAgIDogIiIsCisgICAgICAgICAgIGNwdV9oYXNf cGFnZTFnYiA/ICIgUEFHRTFHIiA6ICIiLAorICAgICAgICAgICBjcHVfaGFzX3NtZXAgICAgPyAi IFNNRVAiICAgOiAiIiwKKyAgICAgICAgICAgY3B1X2hhc19zbWFwICAgID8gIiBTTUFQIiAgIDog IiIsCisgICAgICAgICAgIGNwdV9oYXNfcGt1ICAgICA/ICIgUEtVIiAgICA6ICIiCisgICAgICAg ICk7CisKKyAgICBpZiAoIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDIgKQorICAgICAgICBzaGF0 dGVyX2NvbnNvbGVfc3VwZXJwYWdlKCk7CisKKyAgICBpZiAoICF2ZW5kb3JfaXNfaW50ZWwgJiYg IXZlbmRvcl9pc19hbWQgKQorICAgICAgICB4dGZfd2FybmluZygiVW5rbm93biBDUFUgdmVuZG9y LiAgU29tZXRoaW5nIG1pZ2h0IGdvIHdyb25nXG4iKTsKKyAgICBpZiAoICF4dGZfaGFzX2ZlcCAp CisgICAgICAgIHh0Zl9za2lwKCJGRVAgc3VwcG9ydCBub3QgZGV0ZWN0ZWQgLSBzb21lIHRlc3Rz IHdpbGwgYmUgc2tpcHBlZFxuIik7CisKKyAgICBpZiAoIHZlbmRvcl9pc19hbWQgJiYgeDg2X2Zh bWlseSA9PSAweDEwICkKKyAgICB7CisgICAgICAgIGFtZF9mYW0xMF9lcnJhdHVtID0gdHJ1ZTsK KyAgICAgICAgcHJpbnRrKCIgIFdvcmtpbmcgYXJvdW5kIHN1c3BlY3RlZCBBTUQgRmFtMTBoIGVy cmF0dW1cbiIpOworICAgIH0KKworICAgIC8qIFNhbml0aXNlIGVudmlyb25tZW50LiAqLworICAg IGVmZXIgPSByZG1zcihNU1JfRUZFUikgJiB+RUZFUl9OWEU7CisgICAgd3Jtc3IoTVNSX0VGRVIs IGVmZXIpOworICAgIGNyMCA9IHJlYWRfY3IwKCkgJiB+WDg2X0NSMF9XUDsKKyAgICB3cml0ZV9j cjAoY3IwKTsKKyAgICBjcjQgPSByZWFkX2NyNCgpICYgfihYODZfQ1I0X1NNRVAgfCBYODZfQ1I0 X1NNQVApOworICAgIHdyaXRlX2NyNChjcjQpOworCisgICAgcHJvYmVfc2hhZG93X3BhZ2luZygp OworCisgICAgdW5zaWduZWQgaW50IGk7CisgICAgcGFkZHJfdCBwYWRkcnNbXSA9CisgICAgewor ICAgICAgICBHQigxKSwKKyAgICAgICAgMVVMTCA8PCAobWluKG1heHBoeXNhZGRyLAorICAgICAg ICAgICAgICAgICAgICAgQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gMgorICAgICAgICAgICAgICAg ICAgICAgPyA0MFUKKyAgICAgICAgICAgICAgICAgICAgIDogKEJJVFNfUEVSX0xPTkcgKyBQQUdF X1NISUZUKSkgLSAxKSwKKyAgICB9OworCisgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpF KHBhZGRycyk7ICsraSApCisgICAgeworICAgICAgICBwYWRkcl90IHBhZGRyID0gcGFkZHJzW2ld OworCisgICAgICAgIHByaW50aygiVXNpbmcgcGFkZHIgMHglIlBSSXBhZGRyIlxuIiwgcGFkZHIp OworICAgICAgICBwb3B1bGF0ZV9waHlzbWFwX2Fyb3VuZChwYWRkcik7CisKKyAgICAgICAgcnVu X3Rlc3RzKCZyZWd1bGFyX3N0dWJzLCBwYWRkcik7CisKKyAgICAgICAgaWYgKCB4dGZfaGFzX2Zl cCApCisgICAgICAgICAgICBydW5fdGVzdHMoJmZvcmNlX3N0dWJzLCBwYWRkcik7CisgICAgfQor CisgICAgeHRmX3N1Y2Nlc3MoTlVMTCk7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6Cisg KiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAor ICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpk aWZmIC0tZ2l0IGEvdGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9zdHVicy5TIGIvdGVzdHMvcGFn ZXRhYmxlLWVtdWxhdGlvbi9zdHVicy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjA2OGI3MTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wYWdldGFibGUtZW11bGF0aW9u L3N0dWJzLlMKQEAgLTAsMCArMSw5NCBAQAorI2luY2x1ZGUgPHh0Zi9leHRhYmxlLmg+CisjaW5j bHVkZSA8eHRmL2FzbV9tYWNyb3MuaD4KKyNpbmNsdWRlIDx4ZW4vYXJjaC14ODYveGVuLmg+CisK KyNpbmNsdWRlIDxhcmNoL2lkdC5oPgorI2luY2x1ZGUgPGFyY2gvcGFnZS5oPgorI2luY2x1ZGUg PGFyY2gvcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXJjaC9zZWdtZW50Lmg+CisKKyNpZmRlZiBf X2kzODZfXworIyBkZWZpbmUgUkVHICBlZHgKKyMgZGVmaW5lIFJFRzggZGwKKyNlbHNlCisjIGRl ZmluZSBSRUcgIHJkaQorIyBkZWZpbmUgUkVHOCBkaWwKKyNlbmRpZgorCisubWFjcm8gR0VOX1NJ TkdMRSBuYW1lLCB0eXBlLCBmb3JjZT0wCisKK0VOVFJZKHN0dWJfXG5hbWUpCisKKyAgICAgICAg eG9yICVlYXgsICVlYXgKKworI2lmZGVmIF9faTM4Nl9fCisgICAgICAgIG1vdiA0KCVlc3ApLCAl UkVHCisjZW5kaWYKKworICAgICAgICAuaWZuYyBcdHlwZSwgWAorICAgICAgICAuaWYgXGZvcmNl CisgICAgICAgIF9BU01fWEVOX0ZFUAorICAgICAgICAuZW5kaWYKKyAgICAgICAgLmVuZGlmCisK Ky5Mc3R1Yl9cbmFtZVwoKV9mYXVsdDoKKworICAgICAgICAuaWZjIFx0eXBlLCBSCisgICAgICAg IC8qIFJlYWQgKGFuZCB0cmFzaCkgdGhlIHBvaW50ZXIuICovCisgICAgICAgIG1vdiAoJVJFRyks ICVSRUc4CisgICAgICAgIC5lbmRpZgorCisgICAgICAgIC5pZmMgXHR5cGUsIEkKKyAgICAgICAg LyogTG9hZCAlZnMgd2l0aCB0aGUgc2VsZWN0b3IgaW4gJVJFRy4gIENhdXNlcyBpbXBsaWNpdCBH RFQvTERUIGFjY2Vzcy4gKi8KKyAgICAgICAgbW92ICVSRUcsICVmcworICAgICAgICAuZW5kaWYK KworICAgICAgICAuaWZjIFx0eXBlLCBXCisgICAgICAgIC8qIFdyaXRlIGByZXRgIHRvIHRoZSBw b2ludGVyLiAqLworICAgICAgICBtb3ZiICQweGMzLCAoJVJFRykKKyAgICAgICAgLmVuZGlmCisK KyAgICAgICAgLmlmYyBcdHlwZSwgWAorICAgICAgICAvKiBDYWxsIHRoZSBwb2ludGVyLiAqLwor CisgICAgICAgIC5pZiBcZm9yY2UKKyAgICAgICAgLyogSWYgRk9SQ0UsIG1vdmUgdGhlIHBvaW50 ZXIgdG8gaW5jbHVkZSB0aGUgZm9yY2UgZW11bGF0aW9uIHByZWZpeC4gKi8KKyAgICAgICAgc3Vi ICQ1LCAlUkVHCisgICAgICAgIC5lbmRpZgorCisgICAgICAgIGNhbGwgKiVSRUcKKyAgICAgICAg LmVuZGlmCisKKy5Mc3R1Yl9cbmFtZVwoKV9maXh1cDoKKyAgICAgICAgcmV0CisKK0VOREZVTkMo c3R1Yl9cbmFtZSkKKworICAgICAgICAuaWZuYyBcdHlwZSwgWAorICAgICAgICBfQVNNX0VYVEFC TEVfSEFORExFUiguTHN0dWJfXG5hbWVcKClfZmF1bHQsIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLkxzdHViX1xuYW1lXCgpX2ZpeHVwLCBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGV4X2NoZWNrX3BmKQorICAgICAgICAuZW5kaWYKKy5lbmRtCisKK0dFTl9TSU5HTEUg cmVhZCAgICAgUgorR0VOX1NJTkdMRSBpbXBsaWNpdCBJCitHRU5fU0lOR0xFIHdyaXRlICAgIFcK K0dFTl9TSU5HTEUgZXhlYyAgICAgWAorR0VOX1NJTkdMRSBmb3JjZV9yZWFkICAgICBSIDEKK0dF Tl9TSU5HTEUgZm9yY2VfaW1wbGljaXQgSSAxCitHRU5fU0lOR0xFIGZvcmNlX3dyaXRlICAgIFcg MQorR0VOX1NJTkdMRSBmb3JjZV9leGVjICAgICBYIDEKKworLnB1c2hzZWN0aW9uIC50ZXh0LnVz ZXIsICJheCIsIEBwcm9nYml0cworCitHRU5fU0lOR0xFIHJlYWRfdXNlciAgICAgUgorR0VOX1NJ TkdMRSBpbXBsaWNpdF91c2VyIEkKK0dFTl9TSU5HTEUgd3JpdGVfdXNlciAgICBXCitHRU5fU0lO R0xFIGV4ZWNfdXNlciAgICAgWAorR0VOX1NJTkdMRSBmb3JjZV9yZWFkX3VzZXIgICAgIFIgMQor R0VOX1NJTkdMRSBmb3JjZV9pbXBsaWNpdF91c2VyIEkgMQorR0VOX1NJTkdMRSBmb3JjZV93cml0 ZV91c2VyICAgIFcgMQorR0VOX1NJTkdMRSBmb3JjZV9leGVjX3VzZXIgICAgIFggMQorCisucG9w c2VjdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9zdHVicy5oIGIv dGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9zdHVicy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjAwZGIwMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wYWdldGFibGUt ZW11bGF0aW9uL3N0dWJzLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfTE9XTEVWRUxfSF8K KyNkZWZpbmUgX0xPV0xFVkVMX0hfCisKK3Vuc2lnbmVkIGxvbmcgc3R1Yl9yZWFkKHVuc2lnbmVk IGxvbmcgdmEpOwordW5zaWduZWQgbG9uZyBzdHViX2ltcGxpY2l0KHVuc2lnbmVkIGxvbmcgc2Vs KTsgLyogdW5zaWduZWQgbG9uZyBzZWwgKi8KK3Vuc2lnbmVkIGxvbmcgc3R1Yl93cml0ZSh1bnNp Z25lZCBsb25nIHZhKTsKK3Vuc2lnbmVkIGxvbmcgc3R1Yl9leGVjKHVuc2lnbmVkIGxvbmcgdmEp OworCit1bnNpZ25lZCBsb25nIHN0dWJfZm9yY2VfcmVhZCh1bnNpZ25lZCBsb25nIHZhKTsKK3Vu c2lnbmVkIGxvbmcgc3R1Yl9mb3JjZV9pbXBsaWNpdCh1bnNpZ25lZCBsb25nIHNlbCk7IC8qIHVu c2lnbmVkIGxvbmcgc2VsICovCit1bnNpZ25lZCBsb25nIHN0dWJfZm9yY2Vfd3JpdGUodW5zaWdu ZWQgbG9uZyB2YSk7Cit1bnNpZ25lZCBsb25nIHN0dWJfZm9yY2VfZXhlYyh1bnNpZ25lZCBsb25n IHZhKTsKKwordW5zaWduZWQgbG9uZyBzdHViX3JlYWRfdXNlcih1bnNpZ25lZCBsb25nIHZhKTsK K3Vuc2lnbmVkIGxvbmcgc3R1Yl9pbXBsaWNpdF91c2VyKHVuc2lnbmVkIGxvbmcgc2VsKTsgLyog dW5zaWduZWQgbG9uZyBzZWwgKi8KK3Vuc2lnbmVkIGxvbmcgc3R1Yl93cml0ZV91c2VyKHVuc2ln bmVkIGxvbmcgdmEpOwordW5zaWduZWQgbG9uZyBzdHViX2V4ZWNfdXNlcih1bnNpZ25lZCBsb25n IHZhKTsKKwordW5zaWduZWQgbG9uZyBzdHViX2ZvcmNlX3JlYWRfdXNlcih1bnNpZ25lZCBsb25n IHZhKTsKK3Vuc2lnbmVkIGxvbmcgc3R1Yl9mb3JjZV9pbXBsaWNpdF91c2VyKHVuc2lnbmVkIGxv bmcgc2VsKTsgLyogdW5zaWduZWQgbG9uZyBzZWwgKi8KK3Vuc2lnbmVkIGxvbmcgc3R1Yl9mb3Jj ZV93cml0ZV91c2VyKHVuc2lnbmVkIGxvbmcgdmEpOwordW5zaWduZWQgbG9uZyBzdHViX2ZvcmNl X2V4ZWNfdXNlcih1bnNpZ25lZCBsb25nIHZhKTsKKworI2VuZGlmCisKLS0gCjIuMS40CgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcv eGVuLWRldmVsCg==