Name: series-workflowjc92x Phase: Succeeded StartedAt: 2026-06-25 22:31:44 +0000 UTC FinishedAt: 2026-06-26 02:39:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[0] Phase: Succeeded StartedAt: 2026-06-25 22:31:44 +0000 UTC FinishedAt: 2026-06-25 22:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 22:31:44 +0000 UTC FinishedAt: 2026-06-25 22:42:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV", "KVM_AMD", "KVM", "KVM_SW_PROTECTED_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV", "KVM_AMD", "KVM", "KVM_SW_PROTECTED_VM" ], "series_id": "3cb5e47c-af5f-4829-8f10-5c590ecb8245" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "__sev_snp_reload_vmsa", "sev_snp_reload_vmsa", "sev_gmem_invalidate_range", "sev_gmem_free_folio", "kvm_arch_gmem_invalidate_range", "kvm_arch_gmem_free_folio", "sev_snp_init_protected_guest_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X3NucF9yZWxvYWRfdm1zYSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3Nldl9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzZiMDQwNjY0NWYyZjhiNmIyNzg5OTEyZmZmNmJiZWEzZDU4ZmIzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDIyOjM4OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uZmQwODQ1NGM3NTUzNjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtMTM0LDYgJiM0MzsxMzQsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMKG1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKHJlbG9hZF92bXNhKVxuIEtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKVxuIEtWTV9YODZfT1AoY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbilcbiBLVk1fWDg2X09QKGFwaWNfaW5pdF9zaWduYWxfYmxvY2tlZClcbkBAIC0xNDUsOSAmIzQzOzE0NiwxNCBAQCBLVk1fWDg2X09QKHZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcilcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcbiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ZyZWVfZm9saW8pXG4mIzQzOyNlbmRpZlxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKVxuLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxuICNlbmRpZlxuIFxuICN1bmRlZiBLVk1fWDg2X09QXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xMjIsNiAmIzQzOzEyMiw4IEBAXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzEsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4gI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxuJiM0MzsjZGVmaW5lIEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCBcXFxuJiM0MztcdEtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfVVBEQVRFX1BST1RFQ1RFRF9HVUVTVF9TVEFURSBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDM0LCBLVk1fUkVRVUVTVF9XQUlUKVxuIFxuQEAgLTE4NzgsNiAmIzQzOzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0aW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO1x0dm9pZCAoKnJlbG9hZF92bXNhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIFx0aW50ICgqZ2V0X2ZlYXR1cmVfbXNyKSh1MzIgbXNyLCB1NjQgKmRhdGEpO1xuIFxuQEAgLTE5MDAsOCAmIzQzOzE5MDMsMTMgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcbiBcdGd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFx0dm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XG4tXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuJiM0MztcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7XHR2b2lkICgqZ21lbV9mcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7I2VuZGlmXG4gXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNzRmYjE1NTUxZTgzZmEuLjdlMDZlZDE2ZjQ3NDYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM5NzksMzAgJiM0MzszOTc5LDIxIEBAIHN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiBzbnBfZG9fcHNjKHN2bSk7XG4gfVxuIFxuLS8qXG4tICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MztzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdGt2bV9wZm5fdCBwZm47XG4tXHRnZm5fdCBnZm47XG4tXG4tXHRndWFyZChtdXRleCkoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG4tXG4tXHRpZiAoIXN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xuIFxuLVx0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xuLVx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuIFxuLVx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovXG4mIzQzO1x0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBLiAqL1xuIFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gSU5WQUxJRF9QQUdFO1xuJiM0MztcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuIFx0LypcbiBcdCAqIFdoZW4gcmVwbGFjaW5nIHRoZSBWTVNBIGR1cmluZyBTRVYtU05QIEFQIGNyZWF0aW9uLFxuQEAgLTQwMTAsMTYgJiM0Mzs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICovXG4gXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cdTAwM2V2bWNiKTtcbiBcbi1cdGlmICghVkFMSURfUEFHRShzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlXG4mIzQzO1x0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVx1MDAzZXNldl9lcy52bXNhLiBJblxuJiM0MztcdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUmIzM5O2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0XG4mIzQzO1x0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxuJiM0MztcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4mIzQzO1x0ICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aFxuJiM0MztcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xuIFxuLVx0Z2ZuID0gZ3BhX3RvX2dmbihzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSk7XG4tXHRzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiYjNDM7XHRpZiAoIVZBTElEX1BBR0UoZ3BhKSlcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdHNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2ZuKTtcbiBcdGlmICghc2xvdClcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG5AQCAtNDAyNywyOSAmIzQzOzQwMjksNjQgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0cmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHQvKlxuLVx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2Vcbi1cdCAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS1cdTAwM2VzZXZfZXMudm1zYS4gSW5cbi1cdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUmIzM5O2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0XG4tXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXG4tXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xuLVx0ICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aFxuLVx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cbiYjNDM7XHQgKiBTYXZlIHRoZSBndWVzdC1wcm92aWRlZCBHUEEuICBJZiByZXRyeSBpcyBuZWVkZWQsIHRoZW4gS1ZNIHdpbGwgdHJ5XG4mIzQzO1x0ICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvXG4mIzQzO1x0ICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlXG4mIzQzO1x0ICogZm9yIHRoZSBHUEEgaXMgaW52YWxpZGF0ZWQuXG4gXHQgKi9cbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX2hhc19ndWVzdF92bXNhID0gdHJ1ZTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTtcbiYjNDM7XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4mIzQzO1x0cmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiYjNDM7XHRncGFfdCBncGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTtcbiYjNDM7XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuLVx0LyogVXNlIHRoZSBuZXcgVk1TQSAqL1xuLVx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xuJiM0MztcdGdwYSA9IHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGE7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbi1cdC8qIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgKi9cbi1cdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcbiYjNDM7XHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgZ3BhKTtcbiBcbiBcdC8qXG4tXHQgKiBnbWVtIHBhZ2VzIGFyZW4mIzM5O3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlc1xuLVx0ICogdGhlbiBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBlbnN1cmUgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGlzIHBpbm5lZFxuLVx0ICogdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLlxuJiM0MztcdCAqIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgZm9yIENSRUFURSByZXF1ZXN0cywgaW5kaWNhdGVkIGJ5IGEgdmFsaWRcbiYjNDM7XHQgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGxcbiYjNDM7XHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXG4mIzQzO1x0ICogdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgcGFnZSBpcyB1bmF2YWlsYWJsZS5cbiBcdCAqL1xuLVx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbiYjNDM7XHRpZiAoVkFMSURfUEFHRShncGEpKVxuJiM0MztcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlICpzZXZfZXMgPSBcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2c2V2X2VzLVx1MDAzZXNucF92bXNhX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIHNldl9lcy1cdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtNDEwNSwxMCAmIzQzOzQxNDIsMTAgQEAgc3RhdGljIGludCBzZXZfc25wX2FwX2NyZWF0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG4tXHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XG4mIzQzO1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOlxuLVx0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4mIzQzO1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR2Y3B1X3VuaW1wbCh2Y3B1LCBcJiMzNDt2bWdleGl0OiBpbnZhbGlkIEFQIGNyZWF0aW9uIHJlcXVlc3QgWyUjeF0gZnJvbSBndWVzdFxcblwmIzM0OyxcbkBAIC00NzkxLDYgJiM0Mzs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3ZtLVx1MDAzZXNldl9lcy52bXNhID0gcGFnZV9hZGRyZXNzKHZtc2FfcGFnZSk7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSk7XG4gXG5AQCAtNTExNSw5ICYjNDM7NTE1NCwzNiBAQCBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIHVuc3RhYmxlIHJlc3VsdCBmb3IgXCYjMzQ7aXMgU05QXCYjMzQ7IGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxuJiM0MztcdCAqIFRoZSB2Q1BVJiMzOTtzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGVcbiYjNDM7XHQgKiB0byBvdGhlciB0YXNrcywgYW5kIGNhbiBvbmx5IGJlY29tZSB2YWxpZCB3aGlsZSBob2xkaW5nIG1tdV9sb2NrLFxuJiM0MztcdCAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4mIzQzO1x0XHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoVkFMSURfUEFHRShncGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2U9IHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kKVxuJiM0MztcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4tdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdGt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbiYjNDM7XHRrdm1fcGZuX3QgZW5kID0gc3RhcnQgJiM0MzsgKDF1bCBcdTAwM2NcdTAwM2MgZm9saW9fb3JkZXIoZm9saW8pKTtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXG4gXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NDQ1LDYgJiM0Mzs1NDQ1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4gXHQubWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uLFxuIFx0Lmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCxcbiYjNDM7XHQucmVsb2FkX3Ztc2EgPSBzZXZfc25wX3JlbG9hZF92bXNhLFxuIFxuIFx0LnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20sXG4gXHQudm1fbW92ZV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSxcbkBAIC01NDYwLDkgJiM0Mzs1NDYxLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LnZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyA9IGF2aWNfdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zLFxuIFx0LmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLFxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4gXHQuZ21lbV9wcmVwYXJlID0gc2V2X2dtZW1fcHJlcGFyZSxcbi1cdC5nbWVtX2ludmFsaWRhdGUgPSBzZXZfZ21lbV9pbnZhbGlkYXRlLFxuJiM0MztcdC5nbWVtX2ludmFsaWRhdGVfcmFuZ2UgPSBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlLFxuJiM0MztcdC5nbWVtX2ZyZWVfZm9saW8gPSBzZXZfZ21lbV9mcmVlX2ZvbGlvLFxuIFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCxcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uYzdlY2M1ZmNhNjg5YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMjcxLDcgJiM0MzsyNzEsOCBAQCBzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUge1xuIFx0dTY0IGdoY2JfcmVnaXN0ZXJlZF9ncGE7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggc25wX3Ztc2FfbXV0ZXg7IC8qIFVzZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiBWTVNBLiAqL1xuLVx0Z3BhX3Qgc25wX3Ztc2FfZ3BhO1xuJiM0MztcdGdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhO1xuJiM0MztcdGdwYV90IHNucF9ndWVzdF92bXNhX2dwYTtcbiBcdGJvb2wgc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0O1xuIFx0Ym9vbCBzbnBfaGFzX2d1ZXN0X3Ztc2E7XG4gfTtcbkBAIC05OTUsNiAmIzQzOzk5Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcbiB7XG4gXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIH1cbiYjNDM7dm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuQEAgLTEwMDgsNyAmIzQzOzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfc2V2X2FzaWQ7XG4gdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xuIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbiYjNDM7dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7XG5AQCAtMTAzOCw3ICYjNDM7MTA0MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGluXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSlcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODE2Nyw2ICYjNDM7ODE2Nyw4IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpKVxuJiM0MztcdFx0XHRrdm1feDg2X2NhbGwocmVsb2FkX3Ztc2EpKHZjcHUpO1xuIFx0fVxuIFxuIFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8XG5AQCAtMTA1OTIsOSAmIzQzOzEwNTk0LDEzIEBAIGludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4ge1xuLVx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZSkoc3RhcnQsIGVuZCk7XG4mIzQzO1x0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XG4mIzQzO31cbiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTtcbiB9XG4gI2VuZGlmXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uNmI3Zjg4MDE1MDVkNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI2MDcsNyAmIzQzOzI2MDcsOCBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCA4NjY5MDY4M2IyZmUzZS4uOGVjNTA0MTkzNGRiY2YgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtMTg1LDYgJiM0MzsxODUsMTAgQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0Zmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZnZm5fcmFuZ2UpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuJiM0MztcdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbiYjNDM7I2VuZGlmXG4gXHR9XG4gXG4gXHRpZiAoZmx1c2gpXG5AQCAtNTIzLDIzICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9sXG4gXHRyZXR1cm4gTUZfREVMQVlFRDtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLXN0YXRpYyB2b2lkIGt2bV9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApO1xuLVx0a3ZtX3Bmbl90IHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuLVx0aW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuLVxuLVx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKHBmbiwgcGZuICYjNDM7ICgxdWwgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4tfVxuLSNlbmRpZlxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGt2bV9nbWVtX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyxcbiBcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tXHQuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sXG4mIzQzO1x0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXG4gI2VuZGlmXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7c2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgQU1EIFNFVi1TTlAgVk1TQSAoVmlydHVhbCBNYWNoaW5lIFNhdmUgQXJlYSkgYW5kIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIHJlbG9hZCBWTVNBIHBhZ2VzIHdoZW4gdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgaXMgaW52YWxpZGF0ZWQgKGUuZy4sIHZpYSBmYWxsb2NhdGUgcHVuY2ggaG9sZSkgYW5kIGNoYW5nZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBLVk0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3RfbWVtZmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzZiMDQwNjY0NWYyZjhiNmIyNzg5OTEyZmZmNmJiZWEzZDU4ZmIzNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDIyOjM4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKaW5kZXggODNkYzUwODYxMzhiMzkuLmZkMDg0NTRjNzU1MzY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKQEAgLTEzNCw2ICYjNDM7MTM0LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChtZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uKQogS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pCiBLVk1fWDg2X09QX09QVElPTkFMKHZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSkKIEtWTV9YODZfT1BfT1BUSU9OQUwoZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKHJlbG9hZF92bXNhKQogS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpCiBLVk1fWDg2X09QKGNoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24pCiBLVk1fWDg2X09QKGFwaWNfaW5pdF9zaWduYWxfYmxvY2tlZCkKQEAgLTE0NSw5ICYjNDM7MTQ2LDE0IEBAIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7CiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKQogS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSkKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKQomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbykKJiM0MzsjZW5kaWYKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKQotS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpCiAjZW5kaWYKIAogI3VuZGVmIEtWTV9YODZfT1AKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xMjIsNiAmIzQzOzEyMiw4IEBACiAJS1ZNX0FSQ0hfUkVRX0ZMQUdTKDMxLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKQogI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcCiAJS1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKQomIzQzOyNkZWZpbmUgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEIFwKJiM0MzsJS1ZNX0FSQ0hfUkVRX0ZMQUdTKDMzLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKQogI2RlZmluZSBLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUgXAogCUtWTV9BUkNIX1JFUV9GTEFHUygzNCwgS1ZNX1JFUVVFU1RfV0FJVCkKIApAQCAtMTg3OCw2ICYjNDM7MTg4MCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJaW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpOwogCWludCAoKnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKTsKIAl2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTsKJiM0MzsJdm9pZCAoKnJlbG9hZF92bXNhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJaW50ICgqZ2V0X2ZlYXR1cmVfbXNyKSh1MzIgbXNyLCB1NjQgKmRhdGEpOwogCkBAIC0xOTAwLDggJiM0MzsxOTAzLDEzIEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAKIAlndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAl2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkUKIAlpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTsKLQl2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKJiM0MzsJdm9pZCAoKmdtZW1faW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzOwl2b2lkICgqZ21lbV9mcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MzsjZW5kaWYKIAlpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA3NGZiMTU1NTFlODNmYS4uN2UwNmVkMTZmNDc0NjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtMzk3OSwzMCAmIzQzOzM5NzksMjEgQEAgc3RhdGljIGludCBzbnBfYmVnaW5fcHNjKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCXJldHVybiBzbnBfZG9fcHNjKHN2bSk7CiB9CiAKLS8qCi0gKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuCi0gKi8KLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWt2bV9wZm5fdCBwZm47Ci0JZ2ZuX3QgZ2ZuOwotCi0JZ3VhcmQobXV0ZXgpKCZhbXA7c3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpOwotCi0JaWYgKCFzdm0tJmd0O3Nldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpCi0JCXJldHVybjsKLQotCXN2bS0mZ3Q7c2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlOwogCi0JLyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi8KLQl2Y3B1LSZndDthcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7Ci0Ja3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKIAotCS8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQSAqLwomIzQzOwkvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EuICovCiAJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKIAogCS8qCiAJICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sCkBAIC00MDEwLDE2ICYjNDM7NDAwMSwyNyBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKi8KIAl2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS0mZ3Q7dm1jYik7CiAKLQlpZiAoIVZBTElEX1BBR0Uoc3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfZ3BhKSkKLQkJcmV0dXJuOwomIzQzOwkvKgomIzQzOwkgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZQomIzQzOwkgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tJmd0O3Nldl9lcy52bXNhLiBJbgomIzQzOwkgKiB0aGVvcnksIHN2bS0mZ3Q7c2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXQKJiM0MzsJICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZQomIzQzOwkgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzbwomIzQzOwkgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoCiYjNDM7CSAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlOwogCi0JZ2ZuID0gZ3BhX3RvX2dmbihzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9ncGEpOwotCXN2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJaWYgKCFWQUxJRF9QQUdFKGdwYSkpCiYjNDM7CQlyZXR1cm47CiAKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0mZ3Q7a3ZtLCBnZm4pOwogCWlmICghc2xvdCkKIAkJcmV0dXJuOwogCiYjNDM7CW1tdV9zZXEgPSBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwogCS8qCiAJICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGUKIAkgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLgpAQCAtNDAyNywyOSAmIzQzOzQwMjksNjQgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpKQogCQlyZXR1cm47CiAKJiM0MzsJcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAJLyoKLQkgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZQotCSAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS0mZ3Q7c2V2X2VzLnZtc2EuIEluCi0JICogdGhlb3J5LCBzdm0tJmd0O3Nldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUmIzM5O2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0Ci0JICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZQotCSAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvCi0JICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aAotCSAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuCiYjNDM7CSAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnkKJiM0MzsJICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvCiYjNDM7CSAqIHRyYWNrIHRoZSBHUEEgc28gdGhhdCB0aGUgVk1TQSBjYW4gYmUgcmVsb2FkZWQgaWYgdGhlIGJhY2tpbmcgcGFnZQomIzQzOwkgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC4KIAkgKi8KLQlzdm0tJmd0O3Nldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBncGE7CiYjNDM7CWlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpOwomIzQzOwllbHNlCiYjNDM7CQlzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTsKJiM0MzsJcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsJZ3BhX3QgZ3BhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7CiYjNDM7CiYjNDM7CWlmICghc3ZtLSZndDtzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi8KJiM0MzsJdmNwdS0mZ3Q7YXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlOwomIzQzOwlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpOwogCi0JLyogVXNlIHRoZSBuZXcgVk1TQSAqLwotCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwomIzQzOwlncGEgPSBzdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTsKJiM0MzsJc3ZtLSZndDtzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7CiAKLQkvKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlICovCi0Ja3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpOwomIzQzOwlfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgZ3BhKTsKIAogCS8qCi0JICogZ21lbSBwYWdlcyBhcmVuJiMzOTt0IGN1cnJlbnRseSBtaWdyYXRhYmxlLCBidXQgaWYgdGhpcyBldmVyIGNoYW5nZXMKLQkgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tJmd0O3Nldl9lcy52bXNhIGlzIHBpbm5lZAotCSAqIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4KJiM0MzsJICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZAomIzQzOwkgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGwKJiM0MzsJICogZmFpbCBpbnN0ZWFkIG9mIGJsb2NraW5nIGluZGVmaW5pdGVseSBhbmQgaGFuZ2luZyB0aGUgdkNQVSwgZS5nLiBpZgomIzQzOwkgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLgogCSAqLwotCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CiYjNDM7CWlmIChWQUxJRF9QQUdFKGdwYSkpCiYjNDM7CQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgKnNldl9lcyA9ICZhbXA7dG9fc3ZtKHZjcHUpLSZndDtzZXZfZXM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3Nldl9lcy0mZ3Q7c25wX3Ztc2FfbXV0ZXgpOwomIzQzOwomIzQzOwlfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLSZndDtzbnBfZ3Vlc3Rfdm1zYV9ncGEpOwogfQogCiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC00MTA1LDEwICYjNDM7NDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXRhcmdldF9zdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9ncGEgPSBzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wuZXhpdF9pbmZvXzI7CiYjNDM7CQl0YXJnZXRfc3ZtLSZndDtzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wuZXhpdF9pbmZvXzI7CiAJCWJyZWFrOwogCWNhc2UgU1ZNX1ZNR0VYSVRfQVBfREVTVFJPWToKLQkJdGFyZ2V0X3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJCXRhcmdldF9zdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdmNwdV91bmltcGwodmNwdSwgJiMzNDt2bWdleGl0OiBpbnZhbGlkIEFQIGNyZWF0aW9uIHJlcXVlc3QgWyUjeF0gZnJvbSBndWVzdFxuJiMzNDssCkBAIC00NzkxLDYgJiM0Mzs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3ZtLSZndDtzZXZfZXMudm1zYSA9IHBhZ2VfYWRkcmVzcyh2bXNhX3BhZ2UpOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJc3ZtLSZndDtzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwogCiAJdmNwdS0mZ3Q7YXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LSZndDtrdm0pOwogCkBAIC01MTE1LDkgJiM0Mzs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKQogCiAJcmV0dXJuIDA7CiB9CiYjNDM7dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciAmIzM0O2lzIFNOUCYjMzQ7IGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLgomIzQzOwkgKiBUaGUgdkNQVSYjMzk7cyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlCiYjNDM7CSAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssCiYjNDM7CSAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKJiM0MzsJCWdwYV90IGdwYSA9IHRvX3N2bSh2Y3B1KS0mZ3Q7c2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYTsKJiM0MzsKJiM0MzsJCWlmIChWQUxJRF9QQUdFKGdwYSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGdwYV90b19nZm4oZ3BhKSAmZ3Q7PSByYW5nZS0mZ3Q7c3RhcnQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGdwYV90b19nZm4oZ3BhKSAmbHQ7IHJhbmdlLSZndDtlbmQpCiYjNDM7CQkJa3ZtX21ha2VfcmVxdWVzdF9hbmRfa2ljayhLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpOwomIzQzOwl9CiYjNDM7fQogCi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQomIzQzO3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlrdm1fcGZuX3Qgc3RhcnQgPSBwYWdlX3RvX3Bmbihmb2xpb19wYWdlKGZvbGlvLCAwKSk7CiYjNDM7CWt2bV9wZm5fdCBlbmQgPSBzdGFydCAmIzQzOyAoMXVsICZsdDsmbHQ7IGZvbGlvX29yZGVyKGZvbGlvKSk7CiAJa3ZtX3Bmbl90IHBmbjsKIAogCWlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC01NDQ1LDYgJiM0Mzs1NDQ1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLAogCS5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sCiAJLmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCwKJiM0MzsJLnJlbG9hZF92bXNhID0gc2V2X3NucF9yZWxvYWRfdm1zYSwKIAogCS52bV9jb3B5X2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fY29weV9lbmNfY29udGV4dF9mcm9tLAogCS52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLApAQCAtNTQ2MCw5ICYjNDM7NTQ2MSwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkudmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zID0gYXZpY192Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMsCiAJLmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLAogCiYjNDM7I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVgogCS5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLAotCS5nbWVtX2ludmFsaWRhdGUgPSBzZXZfZ21lbV9pbnZhbGlkYXRlLAomIzQzOwkuZ21lbV9pbnZhbGlkYXRlX3JhbmdlID0gc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSwKJiM0MzsJLmdtZW1fZnJlZV9mb2xpbyA9IHNldl9nbWVtX2ZyZWVfZm9saW8sCiAJLmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCwKJiM0MzsjZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCA3MTZiZTIxZmJhMzM1NC4uYzdlY2M1ZmNhNjg5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtMjcxLDcgJiM0MzsyNzEsOCBAQCBzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgewogCXU2NCBnaGNiX3JlZ2lzdGVyZWRfZ3BhOwogCiAJc3RydWN0IG11dGV4IHNucF92bXNhX211dGV4OyAvKiBVc2VkIHRvIGhhbmRsZSBjb25jdXJyZW50IHVwZGF0ZXMgb2YgVk1TQS4gKi8KLQlncGFfdCBzbnBfdm1zYV9ncGE7CiYjNDM7CWdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhOwomIzQzOwlncGFfdCBzbnBfZ3Vlc3Rfdm1zYV9ncGE7CiAJYm9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7CiAJYm9vbCBzbnBfaGFzX2d1ZXN0X3Ztc2E7CiB9OwpAQCAtOTk1LDYgJiM0Mzs5OTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpCiB7CiAJcmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIH0KJiM0Mzt2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CkBAIC0xMDA4LDcgJiM0MzsxMDEwLDggQEAgaW50IHNldl9kZXZfZ2V0X2F0dHIodTMyIGdyb3VwLCB1NjQgYXR0ciwgdTY0ICp2YWwpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfc2V2X2FzaWQ7CiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7CiBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7Ci12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTsKJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzO3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7CiBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpOwpAQCAtMTAzOCw3ICYjNDM7MTA0MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGluCiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpIHt9CiBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCAwNjI2ZTgzNWU5ZWI3Ny4uOWRmNmFjZjlhOTgyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTgxNjcsNiAmIzQzOzgxNjcsOCBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiYjNDM7CQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KSkKJiM0MzsJCQlrdm1feDg2X2NhbGwocmVsb2FkX3Ztc2EpKHZjcHUpOwogCX0KIAogCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KSB8fCByZXFfaW50X3dpbiB8fApAQCAtMTA1OTIsOSAmIzQzOzEwNTk0LDEzIEBAIGludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURQotdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQomIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogewotCWt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGUpKHN0YXJ0LCBlbmQpOwomIzQzOwlrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTsKJiM0Mzt9CiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTsKIH0KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLjZiN2Y4ODAxNTA1ZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yNjA3LDcgJiM0MzsyNjA3LDggQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwomIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTsKJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC0xODUsNiAmIzQzOzE4NSwxMCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCwKIAkJfQogCiAJCWZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgJmFtcDtnZm5fcmFuZ2UpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKJiM0MzsJCWt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sICZhbXA7Z2ZuX3JhbmdlKTsKJiM0MzsjZW5kaWYKIAl9CiAKIAlpZiAoZmx1c2gpCkBAIC01MjMsMjMgJiM0Mzs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2wKIAlyZXR1cm4gTUZfREVMQVlFRDsKIH0KIAotI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURQotc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7Ci0Ja3ZtX3Bmbl90IHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwotCWludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKLQotCWt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShwZm4sIHBmbiAmIzQzOyAoMXVsICZsdDsmbHQ7IG9yZGVyKSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHsKIAkuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLAogCS5taWdyYXRlX2ZvbGlvCT0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbywKIAkuZXJyb3JfcmVtb3ZlX2ZvbGlvID0ga3ZtX2dtZW1fZXJyb3JfZm9saW8sCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi0JLmZyZWVfZm9saW8gPSBrdm1fZ21lbV9mcmVlX2ZvbGlvLAomIzQzOwkuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbywKICNlbmRpZgogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIEtWTSwgc3BlY2lmaWNhbGx5IEFNRCBTRVYtU05QIHN1cHBvcnQsIGFuZCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMsIGl0IHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBgZ3Vlc3RfbWVtZmRgIGFuZCBWTVNBIGhhbmRsaW5nLiBOZXcgS1ZNIHJlcXVlc3QsIGBLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQURgLCBpcyBhZGRlZC4gVGhlcmUgYXJlIGNoYW5nZXMgdG8gYGdtZW1faW52YWxpZGF0ZWAsIGBnbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBgZ21lbV9mcmVlX2ZvbGlvYC4gVGhlcmUgYXJlIGFsc28gbW9kaWZpY2F0aW9ucyB0byBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgYW5kIGEgbmV3IGZ1bmN0aW9uLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAuIFRoZSBjb2RlIGlzIGFsc28gY2hhbmdpbmcgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZWAgdG8gYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBldmVuIGJlIHJlYWNoZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCYjMzk7cyBydW5uYWJsZSBpbiBzb21ldGhpbmcgbGlrZSBHQ0Ugb3IgUUVNVS4gU0VWLVNOUCYjMzk7cyBhIGJpdCB0cmlja3ksIHNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIEFNRCBoYXJkd2FyZSAoRVBZQyB3aXRoIFNFVi1TTlAgc3VwcG9ydCkuIEJ1dCBldmVuIGlmIHRoZSBWTXMgY2FuJiMzOTt0IGJlIHJ1biBpbiBhIGdpdmVuIHRlc3Qgc2V0dXAsIG9mdGVuIEtWTSBjb2RlIGlzIHN0aWxsIGZ1enphYmxlIGlmIHRoZSByZWxldmFudCBpb2N0bHMgYXJlIHJlYWNoYWJsZSwgb3IgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtb2NrIHRoZSBzZXR1cC4gU0VWLVNOUCBpcyBhIGJpdCBkaWZmZXJlbnQgYmVjYXVzZSBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBydW4gdGhlIFZNcywgYnV0IHNvbWUgaW9jdGxzICptaWdodCogYmUgcmVhY2hhYmxlLgoKV2FpdCBhIHNlY29uZC4gSSBrbm93IFN5emthbGxlciBoZWF2aWx5IGZ1enplcyBLVk0uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgYWxyZWFkeSBoYW5kbGVkLiBMZXQgbWUgY2hlY2sgZm9yIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGluIHRoZSBwYXRjaC4gWWVwLCBpdCBpcy4gVGltZSB0byB2ZXJpZnkgYnkgbG9va2luZyBpbiB0aGUga2VybmVsJiMzOTtzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gQW5kIGxldCYjMzk7cyB1c2UgYGdyZXBwZXJgIHRvIGJlIHN1cmUgdG8gZmluZCBhbGwgaW5zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgS1ZNL1NFVi1TTlAgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb24gY2hhbmdlcyBhbmQgc2VlIHdoYXQgdGhleSB0ZWxsIHVzLiBJIHNlZSBhIHNlcmllcyBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQ6IGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AsIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBhbmQgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZWlyIHJlYWNoYWJpbGl0eSBhbmQgY29udGV4dC4KClJpZ2h0LCBzbyBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGBzdm1fdmNwdV9yZXNldGAgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGR1cmluZyBhbiBpbml0aWFsaXphdGlvbiBldmVudC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBzZWVtcyB0byBiZSBjb21pbmcgZnJvbSBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIEFoLCBhbmQgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAgaXRzZWxmIGlzIHRyaWdnZXJlZCB3aGVuIGEgZ3Vlc3QgbWVtZmQgZ2V0cyBpbnZhbGlkYXRlZCwgbGlrZWx5IHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYGZhbGxvY2F0ZSAtLXB1bmNoLWhvbGVgLiBBbmQgZmluYWxseSwgYHNldl9nbWVtX2ZyZWVfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGBrdm1fZ21lbV9mcmVlX2ZvbGlvYCwgYWxzbyBpbiB0aGUgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgIGZpbGUuCgpOb3csIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzIGRlZmluZWQgd291bGQgYmUgd29ydGh3aGlsZS4gVGhpcyB3aWxsIGluZmx1ZW5jZSB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGZ1bmN0aW9ucyBhcmUgZXZlbiBiZWluZyB1c2VkLiBOZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnPTExMD1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTExMy1cbnZpcnQva3ZtL0tjb25maWc6MTE0OmNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxudmlydC9rdm0vS2NvbmZpZy0xMTUtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQwNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhlIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYmVpbmcgcHVsbGVkIGludG8gdGhlIGJ1aWxkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBvciBhbnkgcG90ZW50aWFsIGNoYW5nZXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzLCB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSB3aGF0IHRyaWdnZXJzIGl0cyBzZWxlY3Rpb24uIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIEkgY2FuIHplcm8gaW4gb24gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjMtXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2NDpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuYXJjaC94ODYva3ZtL0tjb25maWctMTY1LVx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgS1ZNIFNFVi1TTlAgR3Vlc3QgTWVtb3J5IEludmFsaWRhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBLVk1fQU1EX1NFVmAsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBLVk0gaGFuZGxlcyBndWVzdCBtZW1vcnkgd2l0aCBTRVYtU05QIGFuZCBgZ3Vlc3RfbWVtZmRgLiBUaGUgZmFjdCB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgc2VsZWN0ZWQgaW1wbGllcyBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzIGFsc28gaW4gcGxheSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFic29sdXRlbHksIHRoaXMgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0JiMzOTtzIGZ1bmN0aW9uYWwgS1ZNIGNvZGUuIEdpdmVuIHRoZSBzY29wZSwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGBLVk1fQU1EX1NFVmAsIGBLVk1fQU1EYCwgYW5kIG9mIGNvdXJzZSBqdXN0IHBsYWluIGBLVk1gLgoKTm93LCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOiBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCwgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLCBhbmQgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIGlzIHJlYWNoYWJsZS4gRGlnZ2luZyBpbiwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAgcmVxdWVzdCBpcyBwcmVzZW50LiBUaGlzIHJlcXVlc3QgaXMgc2V0IGJ5IGJvdGggYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgYW5kIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYC4gIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCB3aGljaCBsZWFkcyB1cyB0byBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuCgpBaGEhIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgaG9sZSBpcyBwdW5jaGVkIGluIHRoZSBgZ3Vlc3RfbWVtZmRgLiBUaGF0JiMzOTtzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBmYWxsb2NhdGVgIG9uIGEgYGd1ZXN0X21lbWZkYC4gU28sIGZ1enppbmcgYGZhbGxvY2F0ZWAgb24gYSBgZ3Vlc3RfbWVtZmRgIHdoaWxlIGEgVk0gaXMgcnVubmluZyBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBhbmQgc3Vic2VxdWVudGx5IHRoZSBgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEYC4gU2VlbXMgbGlrZSBhIGdvb2QgdmVjdG9yLgoKSG93ZXZlciwgdGhlIGNhdGNoIGlzIGBLVk1fQU1EX1NFVmAgcmVxdWlyZXMgU0VWIGhhcmR3YXJlLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgZnV6eiB0aGlzPyAgU3l6a2FsbGVyIGNhbiBmdXp6IEtWTSBpb2N0bHMsIGFuZCBldmVuIGlmIFNFViBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgc29tZSBjb2RlIHBhdGhzIG1heSBzdGlsbCBiZSByZWFjaGFibGUgKG9yIGZhaWwgZWFybHkpLCB3aGljaCBpcyB1c2VmdWwuIEtWTSBjb2RlIGlzIGdlbmVyYWxseSB3b3J0aCBmdXp6aW5nLgoKQnV0IHdhaXQsIHRoZSBwcm9tcHQgc3BlY2lmaWVzIHRoYXQgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiAgU28gdGhlIGtleSBxdWVzdGlvbiBiZWNvbWVzLCBpcyBTRVYtU05QIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVT8gSWYgdGhlIGhvc3QgZG9lc24mIzM5O3Qgc3VwcG9ydCBTRVYtU05QLCBjaGVja3MgbGlrZSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd2lsbCBmYWlsLCBhbmQgS1ZNIHdvbiYjMzk7dCBhbGxvdyBTRVYtU05QIFZNIGNyZWF0aW9uLiBUaGlzIGlzIGEgcG90ZW50aWFsIHN0dW1ibGluZyBibG9jay4KClNFVi1TTlAgaXMgdXN1YWxseSB0b3VnaCB0byBmdXp6IGluIHN0YW5kYXJkIEdDRSBWTXMgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBlbXVsYXRpb24gY291bGQgKnBvdGVudGlhbGx5KiBhbGxvdyBpdCwgYnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBub3JtLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogS1ZNLCBhbmQgc29tZXRpbWVzIHdlIHJ1biBTeXprYWxsZXIgb24gYmFyZSBtZXRhbCBvciBuZXN0ZWQgVk1zIHRoYXQgc3VwcG9ydCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcy4gQnV0IGNhbiBRRU1VIGVtdWxhdGUgU0VWLVNOUCBpbiBhIHdheSB0aGF04oCZcyB1c2VmdWwgZm9yIEtWTT8KClFFTVUgY2FuIGVtdWxhdGUgYSBsb3QsIGJ1dCBLVk0gU0VWLVNOUCByZWxpZXMgb24gYSBoYXJkd2FyZSBQU1AgKFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3Nvcikgb24gQU1EIGhhcmR3YXJlLiBJdCYjMzk7cyBub3QgcHVyZSBzb2Z0d2FyZSBlbXVsYXRpb247IEtWTSBkZWxlZ2F0ZXMgdG8gdGhlIGhhcmR3YXJlLiBTbywgS1ZNIGFsb25lIGNhbm5vdCBjcmVhdGUgU0VWLVNOUCBWTXMgd2l0aG91dCBob3N0IGhhcmR3YXJlLiBMb29raW5nIGF0IGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCBvciBgc2V2X3ZtX2luaXRgIHNob3VsZCBnaXZlIG1vcmUgY2xhcml0eS4KCkdpdmVuIHRoaXMsIHRoZSBjb2RlIHBhdGggYmVpbmcgZGlzY3Vzc2VkIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfdm1faW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI4OTc9c3RhdGljIGludCBzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyMS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjkyMjp2b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyMy17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01Mjk4PXN0YXRpYyBpbnQgc3ZtX3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mjk5LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTMwMDpcdHNldl92bV9pbml0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzMDEtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDAyPXZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAzOnZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwNC12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAzMTpzdGF0aWMgaW5saW5lIHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7fVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDMyLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pIHt9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTY3PXN0YXRpYyBpbmxpbmUgdTY0IHNucF9kZWZhdWx0X3BvbGljeSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0xMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg6MTAzOnZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bV92bSAqdm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTEwNC12b2lkIHNldl9lc192bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz0xNz1zdGF0aWMgdm9pZCBlbmNyeXB0X3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24sXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNDctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYzo0ODp2b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNDkte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYz0yMz1zdGF0aWMgc3RydWN0IGt2bV92bSAqc2V2X3ZtX2NyZWF0ZShib29sIGVzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0yOS1cdGlmICghZXMpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzA6XHRcdHNldl92bV9pbml0KHZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMS1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNLVNWTSBJbml0aWFsaXphdGlvbiBmb3IgU0VWKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBgc2V2X3ZtX2luaXRgIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnQgd2l0aGluIHRoZSBLVk0tU1ZNIG1vZHVsZSwgc28gYHNldl92bV9pbml0YCBzaG91bGQgYmUgd2hlcmUgdGhlIGd1ZXN0IFZNIGVudmlyb25tZW50IGdldHMgcHJvcGVybHkgY29uZmlndXJlZCBhbmQgaW5pdGlhbGl6ZWQgZm9yIFNFVi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY3J1Y2lhbCBzdGVwcyBmb3Igc2V0dGluZyB1cCBtZW1vcnkgZW5jcnlwdGlvbiwgaGFuZGxpbmcgdGhlIGd1ZXN0JiMzOTtzIHNlY3JldHMsIGFuZCBjb25maWd1cmluZyB0aGUgU1ZNLXNwZWNpZmljIHNlY3VyaXR5IGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIGdyYXNwaW5nIGhvdyBTRVYgd29ya3MgYXQgdGhlIGxvd2VzdCBsZXZlbCB3aXRoaW4gdGhlIEtWTSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkyMjpcdHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuMjkyMzpcdHtcbjI5MjQ6XHRcdHN3aXRjaCAoa3ZtLVx1MDAzZWFyY2gudm1fdHlwZSkge1xuMjkyNTpcdFx0Y2FzZSBLVk1fWDg2X0RFRkFVTFRfVk06XG4yOTI2Olx0XHRjYXNlIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNOlxuMjkyNzpcdFx0XHRicmVhaztcbjI5Mjg6XHRcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XG4yOTI5Olx0XHRcdGt2bS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9IHRydWU7XG4yOTMwOlx0XHRcdGZhbGx0aHJvdWdoO1xuMjkzMTpcdFx0Y2FzZSBLVk1fWDg2X1NFVl9FU19WTTpcbjI5MzI6XHRcdFx0a3ZtLVx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSA9IHRydWU7XG4yOTMzOlx0XHRcdGZhbGx0aHJvdWdoO1xuMjkzNDpcdFx0Y2FzZSBLVk1fWDg2X1NFVl9WTTpcbjI5MzU6XHRcdFx0a3ZtLVx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQgPSAha3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtO1xuMjkzNjpcdFx0XHR0b19rdm1fc2V2X2luZm8oa3ZtKS1cdTAwM2VuZWVkX2luaXQgPSB0cnVlO1xuMjkzNzpcdFx0XHRicmVhaztcbjI5Mzg6XHRcdGRlZmF1bHQ6XG4yOTM5Olx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtVbnN1cHBvcnRlZCBWTSB0eXBlICV1XCYjMzQ7LCBrdm0tXHUwMDNlYXJjaC52bV90eXBlKTtcbjI5NDA6XHRcdFx0YnJlYWs7XG4yOTQxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTIzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyBLVk1fWDg2X1NOUF9WTSBhbmQgVmlydHVhbCBNYWNoaW5lIENyZWF0aW9uKioKCkhtbSwgYEtWTV9YODZfU05QX1ZNYC4uLiB0aGF0JiMzOTtzIGEgVk0gdHlwZSwgaXNuJiMzOTt0IGl0PyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgcmVsYXRlZCB0byBTZWN1cmUgTmVzdGVkIFBhZ2luZywgb3IgQU1EJiMzOTtzIFNlY3VyZSBOZXN0ZWQgUGFnaW5nLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkmIzM5O20gd29uZGVyaW5nOiBjYW4gYSB1c2VyIGFjdHVhbGx5ICpjcmVhdGUqIGEgVk0gb2YgdGhpcyBzcGVjaWZpYyB0eXBlIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydD8gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIGNvbmZpZ3VyYXRpb24gZXJyb3IgdGhhdCBzaG91bGQgYmUgcHJldmVudGVkLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgcHJvYmFibHkgYXJvdW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIFZNLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24gb3IgY29kZSBibG9jayB3aGVyZSB0aGUgYHZtX3R5cGVgIGlzIHZhbGlkYXRlZC4gU28gSSBzaG91bGQgcHJvYmFibHkgbG9vayBmb3IgYGt2bV9hcmNoX2luaXRfdm1gIG9yIHdoZXJldmVyIGB2bV90eXBlYCBnZXRzIGNoZWNrZWQgZHVyaW5nIHRoZSBWTSBjcmVhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGd1YXJkcmFpbHMgcHJldmVudGluZyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNlY3VyZSBWTSBvbiBpbmNvbXBhdGlibGUgaGFyZHdhcmUuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIGFyZWFzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3Mgc3VmZmljaWVudCBwcm90ZWN0aW9uLCBvciBpZiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fWDg2X1NOUF9WTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTQwNT1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6OlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NDEwLSAgI2RlZmluZSBLVk1fWDg2X1NFVl9FU19WTVx0M1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0Ojk0MTE6ICAjZGVmaW5lIEtWTV9YODZfU05QX1ZNXHQ0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTQxMi0gICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdDVcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXHQzXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3NDojZGVmaW5lIEtWTV9YODZfU05QX1ZNXHRcdDRcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc1LSNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdFx0NVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYyPXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzE6XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzItXHRcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg4PXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5NC1cdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk1Olx0Ym9vbCBzbnBfYWN0aXZlID0gdm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk2LVx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjAxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjA5LVx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMDpcdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTEtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjkyMj12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5MjctXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTI4Olx0Y2FzZSBLVk1fWDg2X1NOUF9WTTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyOS1cdFx0a3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNDU9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkwLVx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTkxOlx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkyLVx0dm1fdHlwZXMgXHUwMDI2PSBzZXZfZmlybXdhcmVfc3VwcG9ydGVkX3ZtX3R5cGVzKCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA1LVx0XHRwcl9pbmZvKFwmIzM0O1NFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjA2Olx0XHRcdHNldl9zdHJfZmVhdHVyZV9zdGF0ZShzZXZfc25wX3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA3LVx0XHRcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTMwMDM9aW50IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXModm9pZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMTctXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjMwMTg6XHRzdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMzAxOS1cbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3MS0jZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXHQzXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MjojZGVmaW5lIEtWTV9YODZfU05QX1ZNXHRcdDRcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdFx0NVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaD0zND1zdGF0aWMgaW5saW5lIGJvb2wgaXNfc2V2X3NucF92bShzdHJ1Y3Qga3ZtX3ZtICp2bSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg6MzY6XHRyZXR1cm4gdm0tXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNy19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3MD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3Mi0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MzpcdHJldHVybiBzaGFwZS50eXBlID09IEtWTV9YODZfU05QX1ZNO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3NC0jZWxzZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jPTc0PXZvaWQgc25wX3ZtX2luaXQoc3RydWN0IGt2bV92bSAqdm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYzo3ODpcdFRFU1RfQVNTRVJUX0VRKHZtLVx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jLTc5LVx0dm1fc2V2X2lvY3RsKHZtLCBLVk1fU0VWX0lOSVQyLCBcdTAwMjZpbml0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jPTc2PXZvaWQgdGVzdF92bV90eXBlcyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtODctXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4Olx0XHR0ZXN0X2luaXQyKEtWTV9YODZfU05QX1ZNLCBcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTIyPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE0NDpcdGhhdmVfc25wID0ga3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ1LVx0VEVTVF9BU1NFUlQoIWhhdmVfc25wIHx8IGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTUzLVx0aWYgKGhhdmVfc25wKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzoxNTQ6XHRcdHRlc3RfZmxhZ3MoS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTktXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MDpcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jPTIyMT1zdGF0aWMgdm9pZCB0ZXN0X3Nldl9zbW9rZSh2b2lkICpndWVzdCwgdTMyIHR5cGUsIHU2NCBwb2xpY3kpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTIyNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyMjU6XHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjYtXHRcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTIzOC1cdFx0dGVzdF9zeW5jX3Ztc2EodHlwZSwgcG9saWN5KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyMzk6XHRcdGlmICh0eXBlID09IEtWTV9YODZfU05QX1ZNKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI0MC1cdFx0XHR0ZXN0X3N5bmNfdm1zYSh0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jPTI0Nj1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjU1Olx0aWYgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjU2Olx0XHR0ZXN0X3Nldl9zbW9rZShndWVzdF9zbnBfY29kZSwgS1ZNX1g4Nl9TTlBfVk0sIHNucF9kZWZhdWx0X3BvbGljeSgpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDg0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTV9YODZfU05QX1ZNIFdvcnRoaW5lc3MgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBgS1ZNX1g4Nl9TTlBfVk1gIGlzIHRpZWQgZGlyZWN0bHkgdG8gYHNldl9zbnBfc3VwcG9ydGVkYCwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGFyZHdhcmUmIzM5O3MgU0VWLVNOUCBjYXBhYmlsaXRpZXMgZHVyaW5nIHRoZSBgc2V2X2hhcmR3YXJlX3NldHVwYC4gSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGhhdmUgaXQsIGBLVk1fWDg2X1NOUF9WTWAgaXMgYSBuby1nbywgYW5kIGBrdm1fY3JlYXRlX3ZtYCB3aWxsIGVycm9yIG91dCB3aXRoIGAtRUlOVkFMYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMsICYjMzQ7aWYgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLCB0aGVuIGl0JiMzOTtzIGBXb3J0aEZ1enppbmc9ZmFsc2VgJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJvbXB0LgoKQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBwcm9tcHQgc2F5cyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gKnZpcnR1YWxpemVkIGVudmlyb25tZW50cyogbGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7LiBEb2VzIHN5emthbGxlciBldmVuIHJ1biBvbiBoYXJkd2FyZSB0aGF0IGNvdWxkIHN1cHBvcnQgU0VWLVNOUD8gQWgsIHN5emthbGxlciBjYW4gcnVuIGJhcmUgbWV0YWwgb3IgbmVzdGVkIFZNcywgdGhhdCYjMzk7cyByaWdodC4gU28sIGl0JiMzOTtzIG5vdCBzaW1wbHkgJiMzNDtpbXBvc3NpYmxlJiMzNDssIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guCgpOb3csIGlzIFNFVi1TTlAgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0U/IEFoYSwgdGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBHQ0UgYWN0dWFsbHkgc3VwcG9ydHMgQU1EIFNFViBhbmQgU0VWLVNOUCBpbnN0YW5jZXMsIHNwZWNpZmljYWxseSBDb25maWRlbnRpYWwgVk1zLiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZyEgSXQgSVMgcG9zc2libGUgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCBvbiBHQ0UgaWYgdGhlIGluc3RhbmNlIHR5cGUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIEFuZCwgd2hpbGUgUUVNVSBtaWdodCByZXF1aXJlIGhvc3QgaGFyZHdhcmUgc3VwcG9ydCwgR0NFICpwcm92aWRlcyogdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBwYXRoICppcyogcmVhY2hhYmxlLgoKQ29uY2x1c2lvbjogdGhpcyBwYXRjaCBpcyBmdXp6YWJsZSwgc28gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpKdXN0IHRvIGJlIHNhZmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBMZXQmIzM5O3MgbG9vayBhdCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYENPTkZJR19LVk1fQU1EYCwgYW5kIGBDT05GSUdfS1ZNYC4KCkFsc28sIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBgZ3Vlc3RfbWVtZmRgIHJlcXVpcmVzIGFueSBzcGVjaWFsIGNvbmZpZ3MuIFNwZWNpZmljYWxseSwgZG9lcyBpdCBuZWVkIGBDT05GSUdfS1ZNX1BSSVZBVEVfTUVNYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9QUklWQVRFX01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDI2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndWVzdF9tZW1mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM1OmFsbG93cyBtYXBwaW5nIGd1ZXN0X21lbWZkIG1lbW9yeSBpbnRvIGEgZ3Vlc3QuICBBbGwgZmllbGRzIHNoYXJlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzNi1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBpZGVudGljYWxseS4gIFVzZXJzcGFjZSBjYW4gc2V0IEtWTV9NRU1fR1VFU1RfTUVNRkRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzg6W2d1ZXN0X21lbWZkX29mZnNldCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM5LW11c3QgcG9pbnQgYXQgYSBmaWxlIGNyZWF0ZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQgb24gdGhlIGN1cnJlbnQgVk0sIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTE6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcdF9fdTMyIGd1ZXN0X21lbWZkO1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTMtXHRfX3UzMiBwYWQxO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcJiMzNDt2YWxpZFwmIzM0OyBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNjQ9V2hlbiBtYXBwaW5nIGEgZ2ZuIGludG8gdGhlIGd1ZXN0LCBLVk0gc2VsZWN0cyBzaGFyZWQgdnMuIHByaXZhdGUsIGkuZSBjb25zdW1lc1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJiMzOTtzIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MTA9VGhlIFwmIzM0O2ZsYWdzXCYjMzQ7IGZpZWxkIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgbXVzdCBiZSAmIzM5OzAmIzM5Oy5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQxNy06VHlwZTogdm0gaW9jdGxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDE4OjpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZChpbilcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMjp0aGF0IHJlZmVycyB0byBpdC4gIGd1ZXN0X21lbWZkIGZpbGVzIGFyZSByb3VnaGx5IGFuYWxvZ291cyB0byBmaWxlcyBjcmVhdGVkXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMzp2aWEgbWVtZmRfY3JlYXRlKCksIGUuZy4gZ3Vlc3RfbWVtZmQgZmlsZXMgbGl2ZSBpbiBSQU0sIGhhdmUgdm9sYXRpbGUgc3RvcmFnZSxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNTpcJiMzNDtyZWd1bGFyXCYjMzQ7IG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQyNi12aXJ0dWFsIG1hY2hpbmUgKHNlZSBiZWxvdyksIGNhbm5vdCBiZSBtYXBwZWQsIHJlYWQsIG9yIHdyaXR0ZW4gYnkgdXNlcnNwYWNlLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mjc6YW5kIGNhbm5vdCBiZSByZXNpemVkICAoZ3Vlc3RfbWVtZmQgZmlsZXMgZG8gaG93ZXZlciBzdXBwb3J0IFBVTkNIX0hPTEUpLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzAtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDMyLVx0X191NjQgc2l6ZTtcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzNi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDM3OkNvbmNlcHR1YWxseSwgdGhlIGlub2RlIGJhY2tpbmcgYSBndWVzdF9tZW1mZCBmaWxlIHJlcHJlc2VudHMgcGh5c2ljYWwgbWVtb3J5LFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXCYjMzQ7c3RydWN0IGt2bVwmIzM0Oy4gIFRoZVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDQzPW1pZ3JhdGlvbiBvZiBhIHZpcnR1YWwgbWFjaGluZS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDQ0LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ2OmFuZCBtb3JlIHNwZWNpZmljYWxseSB2aWEgdGhlIGd1ZXN0X21lbWZkIGFuZCBndWVzdF9tZW1mZF9vZmZzZXQgZmllbGRzIGluXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NzpcJiMzNDtzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlwmIzM0Oywgd2hlcmUgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGlzIHRoZSBvZmZzZXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ4OmludG8gdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgRm9yIGEgZ2l2ZW4gZ3Vlc3RfbWVtZmQgZmlsZSwgdGhlcmUgY2FuIGJlIGF0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDUwOmd1ZXN0X21lbWZkIHJhbmdlIGlzIG5vdCBhbGxvd2VkIChhbnkgbnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGNhbiBiZSBib3VuZCB0b1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NTE6YSBzaW5nbGUgZ3Vlc3RfbWVtZmQgZmlsZSwgYnV0IHRoZSBib3VuZCByYW5nZXMgbXVzdCBub3Qgb3ZlcmxhcCkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ1ND1zcGVjaWZpZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBDdXJyZW50bHkgZGVmaW5lZCBmbGFnczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Ni0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1NzogIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCAgICAgICAgRW5hYmxlIHVzaW5nIG1tYXAoKSBvbiB0aGUgZ3Vlc3RfbWVtZmQgZmlsZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0NjY9V2hlbiB0aGUgS1ZNIE1NVSBwZXJmb3JtcyBhIFBGTiBsb29rdXAgdG8gc2VydmljZSBhIGd1ZXN0IGZhdWx0IGFuZCB0aGUgYmFja2luZ1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njg6Y29uc3VtZWQgZnJvbSBndWVzdF9tZW1mZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgc2hhcmVkIG9yIGEgcHJpdmF0ZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NjktZmF1bHQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjYxMT1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVx0LypcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI2NDQ6XHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjY0NS1cdCAqIHRoZXJlIGFyZW4mIzM5O3QgYW55IENvQ28gVk1zIHRoYXQgc3VwcG9ydCBvbmx5IHByaXZhdGUgbWVtb3J5IG9uIGFybTY0LlxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwMy1cdFx0XHQvKlxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcdFx0XHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTA1LVx0XHRcdCAqIGNyZWF0ZSBhIGZvbGlvIHRvIGJhY2sgdGhlIG1lbW9yeS4gSW5mb3JtIHVzZXJzcGFjZS5cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNTctXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozMzU4Olx0XHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1OTpcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0dldCBwZm4mIzQzO29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcJiMzNDspO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzYwLVx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzItXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3MzpcdCAqIHBvcHVsYXRpbmcgYSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEFzc2VydCB0aGF0IHRoZSBzbG90IGlzIGJhY2tlZFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0Olx0ICogYnkgZ3Vlc3RfbWVtZmQgYW5kIHRoYXQgdGhlIGdtZW0gaW5zdGFuY2UmIzM5O3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzUtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIzOTg9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXHQgKiAgICAgIGJlZm9yZWhhbmQuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0Mzg6XHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzktXHQgKiAgICAgIGluIHRoZSBSTVAgdGFibGUuXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDUyPXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDA3NzpcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNzgtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxODM9dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVx0XHQgKiB1c2Vyc3BhY2UgbWF5IGFsc28gZnJlZSBnbWVtIHBhZ2VzIGR1cmluZyBydW4tdGltZSB2aWFcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcdFx0ICogaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zIG9uIHRoZSBndWVzdF9tZW1mZCwgc28gZmx1c2ggdGhlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXHRcdCAqIGNhY2hlIGVudHJpZXMgZm9yIHRoZXNlIHBhZ2VzIGJlZm9yZSBmcmVlJiMzOTtpbmcgdGhlbSBiYWNrIHRvXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwMTUtXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMDE2Olx0ICogYSBjb25jdXJyZW50IFBVTkNIX0hPTEUgb24gZ3Vlc3RfbWVtZmQgdHJpZ2dlcnMgcmVtb3ZhbCBvZiBTUFRFcy5cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjEzLVx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMjE0Olx0ICogdXBkYXRlcywgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soKSBwcmV2ZW50cyBndWVzdF9tZW1mZCB1cGRhdGVzLFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVx0ICogbW11X25vdGlmaWVyIGV2ZW50cyBjYW4mIzM5O3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSYjMzk7cyBpbnRlcm5hbFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDU3Mz1ib29sIGt2bV9hcmNoX25vX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTgwOiAqIEtWTSBkb2VzbiYjMzk7dCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1ODEtICogd2l0aCBwcml2YXRlIG1lbW9yeSAodGhlIHByaXZhdGUgdnMuIHNoYXJlZCB0cmFja2luZyBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1ODI6ICogZ3Vlc3RfbWVtZmQpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ0LVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDY6XHRfX3UzMiBndWVzdF9tZW1mZDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ny1cdF9fdTMyIHBhZDE7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NDU9c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1NDojZGVmaW5lIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjU4OnN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU5LVx0X191NjQgc2l6ZTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzg9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00My1cdF9fdTY0IHVzZXJzcGFjZV9hZGRyO1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0Olx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ1Olx0X191MzIgZ3Vlc3RfbWVtZmQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDYtXHRfX3UzMiBwYWQxO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjM1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXHRfSU9XUihLVk1JTywgIDB4ZDQsIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0OS1cdF9fdTY0IHNpemU7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xNTc9VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtOjE1ODpURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTU5LVRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaGFyZHdhcmVfZGlzYWJsZV90ZXN0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGdldC1yZWctbGlzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTQyPXN0YXRpYyB2b2lkIHRlc3RfbW1hcF9jb3coaW50IGZkLCBzaXplX3Qgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVx0bWVtID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzpcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcJiMzNDtDb3B5LW9uLXdyaXRlIG5vdCBhbGxvd2VkIGJ5IGd1ZXN0X21lbWZkLlwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTE3ND1zdGF0aWMgdm9pZCB0ZXN0X2NvbGxhcHNlKGludCBmZCwgdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTgyLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlx0ICogVG8gZXZlbiByZWFjaCB0aGUgcG9pbnQgd2hlcmUgdGhlIGd1ZXN0X21lbWZkIGZvbGlvcyB3aWxsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4NC1cdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjE4NTpcdCAqIHdpdGhpbiB0aGUgZ3Vlc3RfbWVtZmQgaGF2ZSB0byBiZSBhbGlnbmVkIHRvIHBtZF9zaXplLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXHQgKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MjA5Olx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMTAtXHQgKiBmaW5lLi4uXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz0zNDg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2JpbmRpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBmZCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1ODpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9pbnZhbGlkX3NpemVzKHN0cnVjdCBrdm1fdm0gKnZtLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTk6XHRcdFx0XHRcdFx0ICB1NjQgZ3Vlc3RfbWVtZmRfZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjQtXHRmb3IgKHNpemUgPSAxOyBzaXplIFx1MDAzYyBwYWdlX3NpemU7IHNpemUmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcdFx0ZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIG5vbi1wYWdlLWFsaWduZWQgcGFnZSBzaXplICYjMzk7MHglbHgmIzM5OyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzY4LVx0XHRcdCAgICBzaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzcyOnN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX211bHRpcGxlKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNzc6XHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc4LVx0VEVTVF9BU1NFUlQoZmQxICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM4NDpcdGZkMiA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBwYWdlX3NpemUgKiAyLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVx0VEVTVF9BU1NFUlQoZmQyICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDEte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVx0Zm9yIChmbGFnID0gQklUKDApOyBmbGFnOyBmbGFnIFx1MDAzY1x1MDAzYz0gMSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MDc6XHRcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOC1cdFx0aWYgKGZsYWcgXHUwMDI2IHZhbGlkX2ZsYWdzKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOS1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2U9IDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQxMDpcdFx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAmIzM5OzB4JWx4JiMzOTsgc2hvdWxkIHN1Y2NlZWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cdFx0XHRcdCAgICBmbGFnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTU6XHRcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJiMzOTsweCVseCYjMzk7IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXHRcdFx0XHQgICAgZmxhZyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcdGludCBmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChfX3ZtLCBfX2dtZW1fc2l6ZSwgX19mbGFncyk7XHRcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MjQtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQxOnN0YXRpYyB2b2lkIF9fdGVzdF9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NDIte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XHR0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZSh2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0NDpcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDQ1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzI6c3RhdGljIHZvaWQgdGVzdF9ndWVzdF9tZW1mZCh1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3My17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3NzpcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OTpcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cdGlmIChmbGFncyBcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19NTUFQKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg2LVx0aWYgKGZsYWdzIFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODc6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg4LVx0XHRcdFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NDkzPXN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodTggKm1lbSwgdTY0IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUwNTpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2d1ZXN0KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzQtXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1MzU6XHQgKiBLVk0gcmVxdWlyZXMgZ3Vlc3RfbWVtZmQgZmlsZXMgYW5kIG1lbXNsb3RzIHRvIGJlIHNpemVkIHRvIG11bHRpcGxlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXHQgKiBvZiB0aGUgaG9zdCBwYWdlIHNpemUuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXHRzaXplID0gbWF4X3Qoc2l6ZV90LCB2bS1cdTAwM2VwYWdlX3NpemUsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcdGZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBHVUVTVF9NRU1GRF9GTEFHX01NQVAgfFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NDAtXHRcdFx0XHRcdCAgICAgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3MC1cdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTcxOlx0ICogc3VwcG9ydCBndWVzdF9tZW1mZCBoYXZlIHRoYXQgc3VwcG9ydCBmb3IgdGhlIGRlZmF1bHQgVk0gdHlwZS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXHRmb3JfZWFjaF9zZXRfYml0KHZtX3R5cGUsIFx1MDAyNnZtX3R5cGVzLCBCSVRTX1BFUl9UWVBFKHZtX3R5cGVzKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4Olx0XHR0ZXN0X2d1ZXN0X21lbWZkKHZtX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU4MDpcdHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3QoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY2NT12b2lkIHZtX2NyZWF0ZV9pcnFjaGlwKHN0cnVjdCBrdm1fdm0gKnZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2Njc6c3RhdGljIGlubGluZSBpbnQgX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBzaXplLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NjgtXHRcdFx0XHRcdCAgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02Njkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XHRzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCBndWVzdF9tZW1mZCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjcxLVx0XHQuc2l6ZSA9IHNpemUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY3NTpcdHJldHVybiBfX3ZtX2lvY3RsKHZtLCBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELCBcdTAwMjZndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ni19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3OS1cdFx0XHRcdFx0dTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2ODE6XHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjkyLVx0XHRcdFx0Z3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XHRcdFx0XHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTQtaW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5NjpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDItXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NzAzOlx0XHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcxLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00OTktXHRmbGFncyA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NTAwOlx0aWYgKGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHNoYXBlKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTgwND1zdGF0aWMgdm9pZCBfX3ZtX21lbV9yZWdpb25fZGVsZXRlKHN0cnVjdCBrdm1fdm0gKnZtLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXHR9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODE5Olx0aWYgKChpbnQpcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCBcdTAwM2U9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlx0XHRrdm1fZnJlZV9mZChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NDgtXHRcdFx0XHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTUwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU2LVx0XHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTc6XHRcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcdFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXHR9O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NjctXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4Olx0XHRcdFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVx0aW50IHJldCA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIGZsYWdzLCBncGEsIHNpemUsIGh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XHRcdFx0XHRcdCAgICAgICBndWVzdF9tZW1mZCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlx0XHRpbnQgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4NS1cdGlmIChmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODY6XHRcdGlmIChndWVzdF9tZW1mZCBcdTAwM2MgMCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XHRcdFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg4Olx0XHRcdFRFU1RfQVNTRVJUKCFndWVzdF9tZW1mZF9vZmZzZXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4OTpcdFx0XHRcdCAgICBcJiMzNDtPZmZzZXQgbXVzdCBiZSB6ZXJvIHdoZW4gY3JlYXRpbmcgbmV3IGd1ZXN0X21lbWZkXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlx0XHRcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTEtXHRcdH0gZWxzZSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTctXHRcdFx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcdFx0XHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTktXHRcdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDE6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSBndWVzdF9tZW1mZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAzLVx0fSBlbHNlIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0Olx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwNS1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTExOS1cdFx0XCYjMzQ7ICBzbG90OiAldSBmbGFnczogMHgleFxcblwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMjA6XHRcdFwmIzM0OyAgZ3Vlc3RfcGh5c19hZGRyOiAweCVseCBzaXplOiAweCVsbHggZ3Vlc3RfbWVtZmQ6ICVkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMjEtXHRcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMjpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9MTI3ND12b2lkIHZtX2d1ZXN0X21lbV9mYWxsb2NhdGUoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBiYXNlLCB1NjQgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5MS1cdFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5MjpcdFx0ZmRfb2Zmc2V0ID0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgJiM0Mzsgb2Zmc2V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTMtXHRcdGxlbiA9IG1pbl90KHU2NCwgZW5kIC0gZ3BhLCByZWdpb24tXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplIC0gb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyOTU6XHRcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkLCBtb2RlLCBmZF9vZmZzZXQsIGxlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ni1cdFx0VEVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkIHRvICVzIGF0ICVseCAobGVuID0gJWx1KSwgZmQgPSAlZCwgbW9kZSA9ICV4LCBvZmZzZXQgPSAlbHhcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ny1cdFx0XHQgICAgcHVuY2hfaG9sZSA/IFwmIzM0O3B1bmNoIGhvbGVcJiMzNDsgOiBcJiMzNDthbGxvY2F0ZVwmIzM0OywgZ3BhLCBsZW4sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcdFx0XHQgICAgcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk5LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODYtXHRpZiAoc3VwcG9ydGVkX2ZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM4NzpcdFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXHRcdFx0XHRcdFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzkxOlx0XHRcdFx0XHRcdCAwLCBNRU1fUkVHSU9OX1NJWkUsIE5VTEwsIGd1ZXN0X21lbWZkLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzkyLVx0XHRURVNUX0FTU0VSVChyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTYtXHRcdFx0XHRcdFx0IEtWTV9NRU1fUkVBRE9OTFkgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTgtXHRcdFRFU1RfQVNTRVJUKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDAxOlx0XHRjbG9zZShndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMi1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTQwOT1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9tYXhfbWVtb3J5X3JlZ2lvbnModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1Ny0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NTg6c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbWVtZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cdFx0XHRcdCAgICAgc2l6ZV90IG9mZnNldCwgY29uc3QgY2hhciAqbXNnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIHZtLVx1MDAzZWt2bV9mZCwgMCwgXCYjMzQ7S1ZNIGZkIHNob3VsZCBmYWlsXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDc3Olx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cdTAwM2VmZCwgMCwgXCYjMzQ7Vk0mIzM5O3MgZmQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3OS1cdG1lbWZkID0ga3ZtX21lbWZkX2FsbG9jKE1FTV9SRUdJT05fU0laRSwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCAwLCBcJiMzNDtSZWd1bGFyIG1lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODEtXHRjbG9zZShtZW1mZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODMtXHR2bTIgPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NTpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFwmIzM0O090aGVyIFZNJiMzOTtzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5MjpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTMtXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBQQUdFX1NJWkU7IGkmIzQzOyYjNDM7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0OTQ6XHRcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIGksIFwmIzM0O1VuYWxpZ25lZCBvZmZzZXQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgTUVNX1JFR0lPTl9TSVpFICogNSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyMy1cdCAqIERlbGV0ZSB0aGUgZmlyc3QgbWVtc2xvdCwgYW5kIHRoZW4gYXR0ZW1wdCB0byByZWNyZWF0ZSBpdCBleGNlcHRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0Olx0ICogd2l0aCBhIFwmIzM0O2JhZFwmIzM0OyBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTI5LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlx0ICogVmVyaWZ5IHRoYXQgb3ZlcmxhcCBpbiB0aGUgZ3Vlc3RfbWVtZmQgYmluZGluZ3MgKGkuZS4gaW4gZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTMxLVx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNy1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90JiMzOTtzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0MS1cdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU0NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU1ODpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MjMwPXN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfcHVuY2hfaG9sZSh1NjQgYmFzZV9ncGEsIGJvb2wgcHJlY2lzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXHQgKiBDb252ZXJ0IHRoZSBlbnRpcmUgcmFuZ2UgdG8gcHJpdmF0ZSwgdGhpcyB0ZXN0Y2FzZSBpcyBhbGwgYWJvdXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjIzNzpcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJiMzOTt0IG5lZWRlZC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yNzQtXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mjc1Olx0ICogdGhlIGd1ZXN0X21lbWZkIGJhY2tpbmcgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gc2hhcmVkIGFuZCBwcml2YXRlLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI4MTpcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI4Mi1cdCAqIGZhdWx0ZWQgaW4sIG9uY2Ugd2l0aCBvbmx5IHRoZSB0YXJnZXQgcmFuZ2UgZmF1bHRlZCBpbi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0zNjk9c3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjM5NzpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1mZF9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjUtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI2Olx0ICogQWxsb2NhdGUgYW5kIGZyZWUgbWVtb3J5IGZyb20gdGhlIGd1ZXN0X21lbWZkIGFmdGVyIGNsb3NpbmcgdGhlIFZNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XHQgKiBmZC4gIFRoZSBndWVzdF9tZW1mZCBpcyBnaWZ0ZWQgYSByZWZlcmVuY2UgdG8gaXRzIG93bmluZyBWTSwgaS5lLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDI4LVx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjk6XHQgKiByZWZlcmVuY2UgdG8gdGhlIGd1ZXN0X21lbWZkIGlzIGFsc28gcHV0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVx0ICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEd1ZXN0IE1lbWZkIFN1cHBvcnQqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgZ3Vlc3RfbWVtZmRgIHN1cHBvcnQgcmVsaWVzIG9uIGVpdGhlciBgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1gIG9yIGBLVk1fWDg2X1NOUF9WTWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRob3NlIFZNIHR5cGVzIGhhdmUgc2VjdXJpdHktcmVsYXRlZCBjb25zaWRlcmF0aW9ucyB0aGF0IHByb2JhYmx5IG5lY2Vzc2l0YXRlIHNvbWUgZm9ybSBvZiBwcm90ZWN0ZWQgbWVtb3J5IG1hbmFnZW1lbnQuIFdhaXQgYSBtaW51dGXigKYgYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCBpcyBhICpzb2Z0d2FyZSotcHJvdGVjdGVkIFZNPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGhhZG4mIzM5O3QgdGhvdWdodCBhYm91dCB0aGF0LiBUaGlzIHN1Z2dlc3RzIHdlIG1pZ2h0IGJlIGFibGUgdG8gdGVzdCBhbmQgdmFsaWRhdGUgYGd1ZXN0X21lbWZkYCBmdW5jdGlvbmFsaXR5IGV2ZW4gd2l0aG91dCByZXF1aXJpbmcgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgYnkgbGV2ZXJhZ2luZyB0aGUgc29mdHdhcmUtYmFzZWQgcHJvdGVjdGlvbiBmZWF0dXJlcy4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGFkdmFudGFnZSBmb3IgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcuIExldCYjMzk7cyBkaWcgaW50byBgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1gIGEgYml0IG1vcmUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMgYnkgZXhhbWluaW5nIHRoZSBLY29uZmlnIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz02OT1jb25maWcgS1ZNX1dFUlJPUlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk1gIG9uIFNFVi1TTlAgVk1zKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYENPTkZJR19LVk1fU1dfUFJPVEVDVEVEX1ZNYCBmbGFnLCBhbmQgaXQmIzM5O3MgZW5hYmxpbmcgYGd1ZXN0X21lbWZkYCBldmVuIHdpdGhvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBtb3JlIGVzdGFibGlzaGVkIFNFVi1TTlAgZnVuY3Rpb25hbGl0eT8KCkhvbGQgb24uLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBwYXRjaCwgYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gTm93LCB0aG9zZSBmdW5jdGlvbnMgYXJlICpzcGVjaWZpY2FsbHkqIGNhbGxlZCB3aGVuIGBLVk1fQU1EX1NFVmAgaXMgZW5hYmxlZCwgYW5kIHRoZSB2aXJ0dWFsIG1hY2hpbmUgaXMsIG9mIGNvdXJzZSwgYW4gU0VWLVNOUCBWTS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBUaGlzIGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgcHJvdGVjdGlvbiBvbiBhIHBsYXRmb3JtIEkgY2FyZSBhYm91dCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYC4gTGV0JiMzOTtzIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTU3Olx0dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuNTE1ODpcdHtcbjUxNTk6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbjUxNjA6XHRcdHVuc2lnbmVkIGxvbmcgaTtcbjUxNjE6XHRcbjUxNjI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbjUxNjM6XHRcbjUxNjQ6XHRcdC8qXG41MTY1Olx0XHQgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yIFwmIzM0O2lzIFNOUFwmIzM0OyBpcyBhLW9rIGhlcmUsIHRoYW5rcyB0byBtbXVfbG9jay5cbjUxNjY6XHRcdCAqIFRoZSB2Q1BVJiMzOTtzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGVcbjUxNjc6XHRcdCAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssXG41MTY4Olx0XHQgKiBhZnRlciB0aGUgVk0gaXMgZnVsbHkgY29tbWl0dGVkIHRvIGJlaW5nIGFuIFNOUCBWTS5cbjUxNjk6XHRcdCAqL1xuNTE3MDpcdFx0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxuNTE3MTpcdFx0XHRyZXR1cm47XG41MTcyOlx0XG41MTczOlx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbjUxNzQ6XHRcdFx0Z3BhX3QgZ3BhID0gdG9fc3ZtKHZjcHUpLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGE7XG41MTc1Olx0XG41MTc2Olx0XHRcdGlmIChWQUxJRF9QQUdFKGdwYSkgXHUwMDI2XHUwMDI2XG41MTc3Olx0XHRcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXHUwMDNlPSByYW5nZS1cdTAwM2VzdGFydCBcdTAwMjZcdTAwMjZcbjUxNzg6XHRcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kKVxuNTE3OTpcdFx0XHRcdGt2bV9tYWtlX3JlcXVlc3RfYW5kX2tpY2soS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcbjUxODA6XHRcdH1cbjUxODE6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSBjaGVja2luZyBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoaXMgcGF0aCBpcyBvbmx5IHJlbGV2YW50IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gU0VWLVNOUCBndWVzdC4gTXkgZmlyc3QgdGhvdWdodCBpczogY2FuIHNvbWVvbmUgZXZlbiAqY3JlYXRlKiBhbiBTTlAgZ3Vlc3Qgd2l0aG91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0PyBUaGUgYW5zd2VyJiMzOTtzIGEgc29saWQgKm5vKi4gYHNldl9zbnBfc3VwcG9ydGVkYCBpcyBjaGVja2VkIGluIGBzZXZfaGFyZHdhcmVfc2V0dXBgLCB3aGljaCByZWFkcyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBzbyB3ZSYjMzk7cmUgcmVseWluZyBvbiB0aGUgY2hpcCBoZXJlLgoKQnV0IHRoZW4gSSByZWNhbGwgdGhhdCBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBHQ0UgaW5zdGFuY2VzIHRoYXQgc3VwcG9ydCBTRVYtU05QLCBhLmsuYS4gQ29uZmlkZW50aWFsIFZNcy4gVGhpcyB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBUaGUgcHJvbXB0IEkmIzM5O20gd29ya2luZyB3aXRoIHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGEgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBTaW5jZSBHQ0UgKmRvZXMqIG9mZmVyIFNFVi1TTlAgaW5zdGFuY2VzLCB0aGlzIGNvbmRpdGlvbiBpcywgaW4gZmFjdCwgKnBvc3NpYmxlKi4KClRoZXJlZm9yZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoZSBwYXRjaCBpcywgaW4gcHJpbmNpcGxlLCByZWFjaGFibGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWdzLiBJJiMzOTttIHRoaW5raW5nOiBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gYEtWTV9TV19QUk9URUNURURfVk1gICptaWdodCogY29tZSBpbnRvIHBsYXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYGd1ZXN0X21lbWZkYC4gVGhvdWdoLCBgS1ZNX0FNRF9TRVZgIGlzIGFjdHVhbGx5IHRoZSBvbmUgdGhhdCBlbmFibGVzIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAsIHdoaWNoIGltcGxpZXMgZ3Vlc3RfbWVtZmQgaXMgZW5hYmxlZC4KClNvIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIGBndWVzdF9tZW1mZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9QUklWQVRFX01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTUzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fR0VORVJJQ19QUklWQVRFX01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDA4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndWVzdF9tZW1mZC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzM3PWluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzg6W2d1ZXN0X21lbWZkX29mZnNldCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM5LW11c3QgcG9pbnQgYXQgYSBmaWxlIGNyZWF0ZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQgb24gdGhlIGN1cnJlbnQgVk0sIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTE6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1Mi1cdF9fdTMyIGd1ZXN0X21lbWZkO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDQ1PUtWTSBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBtYXBwaW5nIGd1ZXN0X21lbWZkIHZpYSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIsXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDc6XCYjMzQ7c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJcJiMzNDssIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OC1pbnRvIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEZvciBhIGdpdmVuIGd1ZXN0X21lbWZkIGZpbGUsIHRoZXJlIGNhbiBiZSBhdFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzM0Nj1zdGF0aWMgdTgga3ZtX2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cdH0gZWxzZSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTg6XHRcdC8qIFRPRE86IENhbGwgaW50byBndWVzdF9tZW1mZCBvbmNlIGh1Z2VwYWdlcyBhcmUgc3VwcG9ydGVkLiAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzU5LVx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7R2V0IHBmbiYjNDM7b3JkZXIgZnJvbSBndWVzdF9tZW1mZFwmIzM0Oyk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDQtXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NTpcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ni1cdF9fdTMyIGd1ZXN0X21lbWZkO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQzLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDQ6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDUtXHRfX3UzMiBndWVzdF9tZW1mZDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY5MT12b2lkIHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTItXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5MzpcdFx0XHRcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk1LVx0XHRcdFx0IGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTcwMT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwMi1cdFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo3MDM6XHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTQ3PWludCBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk0OC1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTQ5Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTctXHRcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcdFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXHR9O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NjctXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4Olx0XHRcdFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVx0aW50IHJldCA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIGZsYWdzLCBncGEsIHNpemUsIGh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XHRcdFx0XHRcdCAgICAgICBndWVzdF9tZW1mZCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlx0XHRpbnQgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4Ny1cdFx0XHR1MzIgZ3Vlc3RfbWVtZmRfZmxhZ3MgPSAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODg6XHRcdFx0VEVTVF9BU1NFUlQoIWd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg5LVx0XHRcdFx0ICAgIFwmIzM0O09mZnNldCBtdXN0IGJlIHplcm8gd2hlbiBjcmVhdGluZyBuZXcgZ3Vlc3RfbWVtZmRcJiMzNDspO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAxLVx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gZ3Vlc3RfbWVtZmQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMjpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgPSBndWVzdF9tZW1mZF9vZmZzZXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cdH0gZWxzZSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTEyNzQ9dm9pZCB2bV9ndWVzdF9tZW1fZmFsbG9jYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgYmFzZSwgdTY0IHNpemUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXHRcdG9mZnNldCA9IGdwYSAtIHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyOTI6XHRcdGZkX29mZnNldCA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG9mZnNldDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjkzLVx0XHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSAtIG9mZnNldCk7XG4tLVxudmlydC9rdm0vTWFrZWZpbGUua3ZtPTE0PWt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTU6a3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjYtXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFx1MDAyNlx1MDAyNlxudmlydC9rdm0va3ZtX21haW4uYzoyMDI3Olx0ICAgIChtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0IFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkgfHxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjAyODpcdCAgICAgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCAmIzQzOyBtZW0tXHUwMDNlbWVtb3J5X3NpemUgXHUwMDNjIG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpKVxudmlydC9rdm0va3ZtX21haW4uYy0yMDI5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMDctXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMDg6XHRcdHIgPSBrdm1fZ21lbV9iaW5kKGt2bSwgbmV3LCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmQsIG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xudmlydC9rdm0va3ZtX21haW4uYy0yMTA5LVx0XHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0ODYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAqKgoKUmlnaHQsIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgdGhlIGBndWVzdF9tZW1mZGAgZnVuY3Rpb25hbGl0eSwgaXNuJiMzOTt0IGl0PyBPa2F5LCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRvIHN0YXJ0IHRvIHNlZSBob3cgYG1lbWZkYCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgS1ZNIGd1ZXN0LiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoZSBjb25maWcgb3B0aW9uJiMzOTtzIGRlZmluaXRpb24uIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgaGF2aW5nIHRoYXQgc2V0LiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgb3B0aW9uIGRlZmluZWQsIGFuZCB3aGF0IHN1cnJvdW5kaW5nIGNvbnRleHQgZG9lcyB0aGF0IGdpdmUgbWU/IEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4Nzg0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEtWTV9HVUVTVF9NRU1GRCBTZWxlY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGF0IGNvZGUgcGF0aHMgYXJlIGRlcGVuZGVudCBvbiBpdCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHByZXNlbmNlIG9yIGFic2VuY2U/IEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGFscmVhZHkgYXNzdW1pbmcgaXQgcmVsYXRlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBmb3IgS1ZNIGd1ZXN0cywgc3BlY2lmaWNhbGx5IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzLiBNeSBpbW1lZGlhdGUgbWVudGFsIHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hpY2ggc3lzdGVtcyBvciBjb21wb25lbnRzIGFyZSBjaGVja2luZyBmb3IgdGhpcyB2YWx1ZS4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpzZWxlY3RpbmcqIGl0IOKAkyB3aGljaCBkcml2ZXJzLCBzdWJzeXN0ZW1zLCBvciBwb3RlbnRpYWxseSBldmVuIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGFyZSBxdWVyeWluZyBhbmQgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiBgS1ZNX0dVRVNUX01FTUZEYD8gQXJlIHdlIHRhbGtpbmcgY29tcGlsZS10aW1lIG9wdGlvbnMsIHJ1bnRpbWUgZmVhdHVyZXMsIG9yIGJvdGg/IEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgdG8gZGV0ZXJtaW5lIHdoeSBpdCBpcyByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjQzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTS94ODYgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgS1ZNX0dVRVNUX01FTUZEYCBnZXRzIGF1dG8tc2VsZWN0ZWQgYnkgYEtWTV9YODZgIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBgWDg2XzY0YC4gVGhhdCBtZWFucyBpdCYjMzk7cyBlc3NlbnRpYWxseSBhbHdheXMgZW5hYmxlZCBvbiB4ODYtNjQgc3lzdGVtcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZXNlIGNvbmZpZ3MgZW5hYmxlZDogYEtWTV9BTURfU0VWYCwgYEtWTV9BTURgLCBgS1ZNYCwgYW5kIGp1c3QgdG8gYmUgc3VyZSwgSSYjMzk7bGwgdGhyb3cgaW4gYEtWTV9TV19QUk9URUNURURfVk1gIHRvby4gSXQgbWlnaHQgbWFrZSB0ZXN0aW5nIGBndWVzdF9tZW1mZGAgYSBiaXQgc21vb3RoZXIsIHlvdSBuZXZlciBrbm93LgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHJldmlldyB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uOiBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCwgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYCwgYW5kIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYC4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gIGxvb2sgYXdmdWxseSBnZW5lcmljLiBTaG91bGRuJiMzOTt0IHRob3NlIGJlIGRlZmluZWQgaW4gdGhlIGdlbmVyYWwgeDg2IEtWTSBjb2RlPyBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhleSBhcmUgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSXQmIzM5O3MgYWx3YXlzIHRoZSBnZW5lcmljIHN0dWZmIHRoYXQgZ2V0cyB5b3UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1OTA6XHRpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZGVyKVxuMTA1OTE6XHR7XG4xMDU5MjpcdFx0cmV0dXJuIGt2bV94ODZfY2FsbChnbWVtX3ByZXBhcmUpKGt2bSwgcGZuLCBnZm4sIG1heF9vcmRlcik7XG4xMDU5MzpcdH1cbjEwNTk0Olx0I2VuZGlmXG4xMDU5NTpcdFxuMTA1OTY6XHQjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4xMDU5NzpcdHZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuMTA1OTg6XHR7XG4xMDU5OTpcdFx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XG4xMDYwMDpcdH1cbjEwNjAxOlx0dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbjEwNjAyOlx0e1xuMTA2MDM6XHRcdGt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTtcbjEwNjA0Olx0fVxuMTA2MDU6XHQjZW5kaWZcbjEwNjA2Olx0I2VuZGlmXG4xMDYwNzpcdFxuMTA2MDg6XHR2b2lkIGt2bV9maXh1cF9hbmRfaW5qZWN0X3BmX2Vycm9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MTYgZXJyb3JfY29kZSlcbjEwNjA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI5MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgZ3Vlc3RfbWVtZmQuY2AgZm9yIEludmFsaWRhdGlvbioqCgpZZXMsIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBhcmVhLiBXZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSwgc28gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdGFyZ2V0IHRoZSBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFyb3VuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHN0cm9uZyBpbmRpY2F0b3I7IGludmFsaWRhdGlvbiBpcyB1c3VhbGx5IGludm9sdmVkIGluIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdoZW4gS1ZNIGd1ZXN0cyBhcmUgbWlzYmVoYXZpbmcgd2l0aCBtZW1vcnkgYW5kIG1lbWZkcy4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCwgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgaG93IGl0JiMzOTtzIGNhbGxlZCwgYW5kIHdoYXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGV4aXN0LiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCBpdCB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHByb2JsZW0uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRcdGlmICghZm91bmRfbWVtc2xvdCkge1xuIDE4MTpcdFx0XHRcdGZvdW5kX21lbXNsb3QgPSB0cnVlO1xuIDE4MjpcdFxuIDE4MzpcdFx0XHRcdEtWTV9NTVVfTE9DSyhrdm0pO1xuIDE4NDpcdFx0XHRcdGt2bV9tbXVfaW52YWxpZGF0ZV9zdGFydChrdm0pO1xuIDE4NTpcdFx0XHR9XG4gMTg2Olx0XG4gMTg3Olx0XHRcdGZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbiAxODg6XHRcbiAxODk6XHQjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTkwOlx0XHRcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFx1MDAyNmdmbl9yYW5nZSk7XG4gMTkxOlx0I2VuZGlmXG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRpZiAoZmx1c2gpXG4gMTk1Olx0XHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xuIDE5NjpcdFxuIDE5NzpcdFx0aWYgKGZvdW5kX21lbXNsb3QpXG4gMTk4Olx0XHRcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4gMTk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg1OAoJCQkJCQkJb3V0cHV0OiAyNTEKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFNFVi1TTlAgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YC4gVGhpcyBtYWtlcyBpdCByZWFjaGFibGUgYW5kLCBjcml0aWNhbGx5LCB0ZXN0YWJsZS4gR29vZC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCBhbmQgc3VtbWFyaXplIHdoYXQgd2UmIzM5O3ZlIGdvdC4KClRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6CgotICAgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAKLSAgIGBzZXZfc25wX3JlbG9hZF92bXNhYAotICAgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgCi0gICBgc2V2X2dtZW1fZnJlZV9mb2xpb2AKLSAgIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgCi0gICBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYAotICAgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgCgpBbmQgdGhlIGBFbmFibGVDb25maWdzYDoKCi0gICBgS1ZNX0FNRF9TRVZgCi0gICBgS1ZNX0FNRGAKLSAgIGBLVk1gCi0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAKClRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29saWQuIFRoZSBwYXRjaCBkaXJlY3RseSBtb2RpZmllcyBLVk0mIzM5O3MgQU1EIFNFVi1TTlAgVk1TQSBoYW5kbGluZyBhbmQgZ3Vlc3RcX21lbWZkIGludmFsaWRhdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyB0byByZWxvYWQgVk1TQSBwYWdlcyB3aGVuIHRoZSBndWVzdFxfbWVtZmQgaXMgaW52YWxpZGF0ZWQuIFRoaXMgaW52YWxpZGF0aW9uIGNhbiBoYXBwZW4gdGhyb3VnaCBvcGVyYXRpb25zIGxpa2UgYGZhbGxvY2F0ZSBwdW5jaCBob2xlYCwgYW5kIHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzICpyZWFjaGFibGUqIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdFxfbWVtZmQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGFuIGlkZWFsIHdheSB0byBleGVyY2lzZSB0aGlzIGNvZGUuCgpBIHNsaWdodCBjb25jZXJu4oCUZG8gSSBpbmNsdWRlIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYD8gSSB0aGluayBpdCBtaWdodCBiZSB3b3J0aCBpdC4gSXQgY291bGQgcG90ZW50aWFsbHkgaGVscCBzeXprYWxsZXIgZnV6eiBgZ3Vlc3RfbWVtZmRgIHdpdGhvdXQgbmVjZXNzYXJpbHkgbmVlZGluZyBTRVYtU05QIGhhcmR3YXJlIHByZXNlbnQuIFllcywgdGhlIHNwZWNpZmljIFNFVi1TTlAgY2FsbGJhY2tzIHdvbiYjMzk7dCB0cmlnZ2VyIGluIHRoYXQgc2NlbmFyaW8sIGJ1dCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBnZW5lcmljIEtWTSBjb2RlIGxpa2UgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLiBTbywgaXQmIzM5O3MgYSBnb29kIGNvdmVyYWdlIGVuaGFuY2VtZW50LgoKQWxyaWdodCwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIHRpbWUgdG8gY2FsbCB0aGUgc2V0LXJlc3VsdHMgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X3NucF9yZWxvYWRfdm1zYSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3Nldl9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7c2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgQU1EIFNFVi1TTlAgVk1TQSAoVmlydHVhbCBNYWNoaW5lIFNhdmUgQXJlYSkgYW5kIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIHJlbG9hZCBWTVNBIHBhZ2VzIHdoZW4gdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgaXMgaW52YWxpZGF0ZWQgKGUuZy4sIHZpYSBmYWxsb2NhdGUgcHVuY2ggaG9sZSkgYW5kIGNoYW5nZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBLVk0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3RfbWVtZmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjE1Ljc4MDI3ODY5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU0ODE4MTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCIsXG4gICAgXCJrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VcIixcbiAgICBcImt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb1wiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIGhhbmRsaW5nIG9mIEFNRCBTRVYtU05QIFZNU0EgKFZpcnR1YWwgTWFjaGluZSBTYXZlIEFyZWEpIGFuZCBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byByZWxvYWQgVk1TQSBwYWdlcyB3aGVuIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIGlzIGludmFsaWRhdGVkIChlLmcuLCB2aWEgZmFsbG9jYXRlIHB1bmNoIGhvbGUpIGFuZCBjaGFuZ2VzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uIGNhbGxiYWNrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgS1ZNIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0X21lbWZkIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjE1Ljc4MDI4NTIyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE0MjY2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzZiMDQwNjY0NWYyZjhiNmIyNzg5OTEyZmZmNmJiZWEzZDU4ZmIzNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjozODoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbmluZGV4IDgzZGM1MDg2MTM4YjM5Li5mZDA4NDU0Yzc1NTM2NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC0xMzQsNiArMTM0LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChtZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZClcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChyZWxvYWRfdm1zYSlcXG4gS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXFxuIEtWTV9YODZfT1AoY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbilcXG4gS1ZNX1g4Nl9PUChhcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQpXFxuQEAgLTE0NSw5ICsxNDYsMTQgQEAgS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpO1xcbiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuK0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKVxcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbylcXG4rI2VuZGlmXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKVxcbi1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcXG4gI2VuZGlmXFxuIFxcbiAjdW5kZWYgS1ZNX1g4Nl9PUFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xMjIsNiArMTIyLDggQEBcXG4gXFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMxLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxcbiAjZGVmaW5lIEtWTV9SRVFfSFZfVExCX0ZMVVNIIFxcXFxcXG4gXFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxcbisjZGVmaW5lIEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCBcXFxcXFxuK1xcdEtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcXG4gI2RlZmluZSBLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUgXFxcXFxcbiBcXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzQsIEtWTV9SRVFVRVNUX1dBSVQpXFxuIFxcbkBAIC0xODc4LDYgKzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXHRpbnQgKCp2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XFxuIFxcdGludCAoKnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKTtcXG4gXFx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XFxuK1xcdHZvaWQgKCpyZWxvYWRfdm1zYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuIFxcdGludCAoKmdldF9mZWF0dXJlX21zcikodTMyIG1zciwgdTY0ICpkYXRhKTtcXG4gXFxuQEAgLTE5MDAsOCArMTkwMywxMyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXG4gXFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIFxcdHZvaWQgKigqYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcXG4gXFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XFxuLVxcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGUpKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuK1xcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4rXFx0dm9pZCAoKmdtZW1fZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuKyNlbmRpZlxcbiBcXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi43ZTA2ZWQxNmY0NzQ2MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbkBAIC0zOTc5LDMwICszOTc5LDIxIEBAIHN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4gXFx0cmV0dXJuIHNucF9kb19wc2Moc3ZtKTtcXG4gfVxcbiBcXG4tLypcXG4tICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50Llxcbi0gKi9cXG4tc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXHRnZm5fdCBnZm4gPSBncGFfdG9fZ2ZuKGdwYSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuLVxcdGdmbl90IGdmbjtcXG4tXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbi1cXG4tXFx0aWYgKCFzdm0tXFx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xcbiBcXG4tXFx0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xcbi1cXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XFxuIFxcbi1cXHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EgKi9cXG4rXFx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBLiAqL1xcbiBcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IElOVkFMSURfUEFHRTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sXFxuQEAgLTQwMTAsMTYgKzQwMDEsMjcgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqL1xcbiBcXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cXHUwMDNldm1jYik7XFxuIFxcbi1cXHRpZiAoIVZBTElEX1BBR0Uoc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHQvKlxcbitcXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxcbitcXHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXFx1MDAzZXNldl9lcy52bXNhLiBJblxcbitcXHQgKiB0aGVvcnksIHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSdkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dFxcbitcXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXFxuK1xcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXFxuK1xcdCAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGhcXG4rXFx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cXG4rXFx0ICovXFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XFxuIFxcbi1cXHRnZm4gPSBncGFfdG9fZ2ZuKHN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSk7XFxuLVxcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4rXFx0aWYgKCFWQUxJRF9QQUdFKGdwYSkpXFxuK1xcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVxcdTAwM2Vrdm0sIGdmbik7XFxuIFxcdGlmICghc2xvdClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0bW11X3NlcSA9IGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xcbitcXHRzbXBfcm1iKCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxcbiBcXHQgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLlxcbkBAIC00MDI3LDI5ICs0MDI5LDY0IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIE5VTEwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXHQvKlxcbi1cXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxcbi1cXHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXFx1MDAzZXNldl9lcy52bXNhLiBJblxcbi1cXHQgKiB0aGVvcnksIHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSdkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dFxcbi1cXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXFxuLVxcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXFxuLVxcdCAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGhcXG4tXFx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cXG4rXFx0ICogU2F2ZSB0aGUgZ3Vlc3QtcHJvdmlkZWQgR1BBLiAgSWYgcmV0cnkgaXMgbmVlZGVkLCB0aGVuIEtWTSB3aWxsIHRyeVxcbitcXHQgKiBhZ2FpbiB3aXRoIHRoZSBzYW1lIEdQQS4gIElmIHRoZSBWTVNBIGlzIHVzYWJsZSwgdGhlbiBLVk0gbmVlZHMgdG9cXG4rXFx0ICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlXFxuK1xcdCAqIGZvciB0aGUgR1BBIGlzIGludmFsaWRhdGVkLlxcbiBcXHQgKi9cXG4tXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2hhc19ndWVzdF92bXNhID0gdHJ1ZTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gZ3BhO1xcbitcXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcXG4rXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xcbitcXHRyZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xcbit9XFxuK1xcbisvKlxcbisgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0Z3BhX3QgZ3BhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XFxuK1xcbitcXHRpZiAoIXN2bS1cXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XFxuK1xcbitcXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XFxuK1xcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XFxuIFxcbi1cXHQvKiBVc2UgdGhlIG5ldyBWTVNBICovXFxuLVxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xcbitcXHRncGEgPSBzdm0tXFx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuIFxcbi1cXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlICovXFxuLVxcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcXG4rXFx0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIGdwYSk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBnbWVtIHBhZ2VzIGFyZW4ndCBjdXJyZW50bHkgbWlncmF0YWJsZSwgYnV0IGlmIHRoaXMgZXZlciBjaGFuZ2VzXFxuLVxcdCAqIHRoZW4gY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgaXMgcGlubmVkXFxuLVxcdCAqIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy5cXG4rXFx0ICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZFxcbitcXHQgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGxcXG4rXFx0ICogZmFpbCBpbnN0ZWFkIG9mIGJsb2NraW5nIGluZGVmaW5pdGVseSBhbmQgaGFuZ2luZyB0aGUgdkNQVSwgZS5nLiBpZlxcbitcXHQgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLlxcbiBcXHQgKi9cXG4tXFx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcXG4rXFx0aWYgKFZBTElEX1BBR0UoZ3BhKSlcXG4rXFx0XFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xcbit9XFxuK1xcbit2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSAqc2V2X2VzID0gXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlc2V2X2VzO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzZXZfZXMtXFx1MDAzZXNucF92bXNhX211dGV4KTtcXG4rXFxuK1xcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBzZXZfZXMtXFx1MDAzZXNucF9ndWVzdF92bXNhX2dwYSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5AQCAtNDEwNSwxMCArNDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xcbitcXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNWTV9WTUdFWElUX0FQX0RFU1RST1k6XFxuLVxcdFxcdHRhcmdldF9zdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdFxcdHRhcmdldF9zdm0tXFx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHZjcHVfdW5pbXBsKHZjcHUsIFxcXCJ2bWdleGl0OiBpbnZhbGlkIEFQIGNyZWF0aW9uIHJlcXVlc3QgWyUjeF0gZnJvbSBndWVzdFxcXFxuXFxcIixcXG5AQCAtNDc5MSw2ICs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0c3ZtLVxcdTAwM2VzZXZfZXMudm1zYSA9IHBhZ2VfYWRkcmVzcyh2bXNhX3BhZ2UpO1xcbitcXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiBcXG5AQCAtNTExNSw5ICs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yIFxcXCJpcyBTTlBcXFwiIGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxcbitcXHQgKiBUaGUgdkNQVSdzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGVcXG4rXFx0ICogdG8gb3RoZXIgdGFza3MsIGFuZCBjYW4gb25seSBiZWNvbWUgdmFsaWQgd2hpbGUgaG9sZGluZyBtbXVfbG9jayxcXG4rXFx0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xcbitcXHRcXHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXFx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGE7XFxuK1xcbitcXHRcXHRpZiAoVkFMSURfUEFHRShncGEpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXFx1MDAzZT0gcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXFx1MDAzYyByYW5nZS1cXHUwMDNlZW5kKVxcbitcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XFxuK1xcdH1cXG4rfVxcbiBcXG4tdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcXG4rdm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0a3ZtX3Bmbl90IHN0YXJ0ID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbitcXHRrdm1fcGZuX3QgZW5kID0gc3RhcnQgKyAoMXVsIFxcdTAwM2NcXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKSk7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuIFxcbiBcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZWY2OWE1MWFiMjdmOTguLjdkM2RkMzcxOTA3MDQ1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTU0NDUsNiArNTQ0NSw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXFxuIFxcdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXFxuIFxcdC5ndWVzdF9tZW1vcnlfcmVjbGFpbWVkID0gc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQsXFxuK1xcdC5yZWxvYWRfdm1zYSA9IHNldl9zbnBfcmVsb2FkX3Ztc2EsXFxuIFxcbiBcXHQudm1fY29weV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSxcXG4gXFx0LnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20sXFxuQEAgLTU0NjAsOSArNTQ2MSwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LnZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyA9IGF2aWNfdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zLFxcbiBcXHQuYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UgPSBzdm1fYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UsXFxuIFxcbisjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuIFxcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxcbi1cXHQuZ21lbV9pbnZhbGlkYXRlID0gc2V2X2dtZW1faW52YWxpZGF0ZSxcXG4rXFx0LmdtZW1faW52YWxpZGF0ZV9yYW5nZSA9IHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2UsXFxuK1xcdC5nbWVtX2ZyZWVfZm9saW8gPSBzZXZfZ21lbV9mcmVlX2ZvbGlvLFxcbiBcXHQuZ21lbV9tYXhfbWFwcGluZ19sZXZlbCA9IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsLFxcbisjZW5kaWZcXG4gfTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggNzE2YmUyMWZiYTMzNTQuLmM3ZWNjNWZjYTY4OWIwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuQEAgLTI3MSw3ICsyNzEsOCBAQCBzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUge1xcbiBcXHR1NjQgZ2hjYl9yZWdpc3RlcmVkX2dwYTtcXG4gXFxuIFxcdHN0cnVjdCBtdXRleCBzbnBfdm1zYV9tdXRleDsgLyogVXNlZCB0byBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIG9mIFZNU0EuICovXFxuLVxcdGdwYV90IHNucF92bXNhX2dwYTtcXG4rXFx0Z3BhX3Qgc25wX3BlbmRpbmdfdm1zYV9ncGE7XFxuK1xcdGdwYV90IHNucF9ndWVzdF92bXNhX2dwYTtcXG4gXFx0Ym9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7XFxuIFxcdGJvb2wgc25wX2hhc19ndWVzdF92bXNhO1xcbiB9O1xcbkBAIC05OTUsNiArOTk2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIH1cXG4rdm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbkBAIC0xMDA4LDcgKzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7XFxuIGV4dGVybiB1bnNpZ25lZCBpbnQgbWF4X3Nldl9hc2lkO1xcbiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XFxuIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcXG4tdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XFxuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcXG4gc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xcbkBAIC0xMDM4LDcgKzEwNDEsNiBAQCBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpblxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtODE2Nyw2ICs4MTY3LDggQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbitcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KSlcXG4rXFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKHJlbG9hZF92bXNhKSh2Y3B1KTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8XFxuQEAgLTEwNTkyLDkgKzEwNTk0LDEzIEBAIGludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiB7XFxuLVxcdGt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGUpKHN0YXJ0LCBlbmQpO1xcbitcXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcXG4rfVxcbit2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTtcXG4gfVxcbiAjZW5kaWZcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzFlLi42YjdmODgwMTUwNWQ1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtMjYwNyw3ICsyNjA3LDggQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYyxcXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XFxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuaW5kZXggODY2OTA2ODNiMmZlM2UuLjhlYzUwNDE5MzRkYmNmIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuQEAgLTE4NSw2ICsxODUsMTAgQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNmdmbl9yYW5nZSk7XFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuK1xcdFxcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFxcdTAwMjZnZm5fcmFuZ2UpO1xcbisjZW5kaWZcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsdXNoKVxcbkBAIC01MjMsMjMgKzUyNywxMiBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbFxcbiBcXHRyZXR1cm4gTUZfREVMQVlFRDtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi1zdGF0aWMgdm9pZCBrdm1fZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCAwKTtcXG4tXFx0a3ZtX3Bmbl90IHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbi1cXHRpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuLVxcbi1cXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUocGZuLCBwZm4gKyAoMXVsIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSk7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0ge1xcbiBcXHQuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLFxcbiBcXHQubWlncmF0ZV9mb2xpb1xcdD0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyxcXG4gXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGt2bV9nbWVtX2Vycm9yX2ZvbGlvLFxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuLVxcdC5mcmVlX2ZvbGlvID0ga3ZtX2dtZW1fZnJlZV9mb2xpbyxcXG4rXFx0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXFxuICNlbmRpZlxcbiB9O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MTYuNTk1NDI0Nzc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI3MzMwMjY1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwic2V2X2dtZW1fZnJlZV9mb2xpb1wiLFxuICAgIFwia3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9cIixcbiAgICBcInNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM2YjA0MDY2NDVmMmY4YjZiMjc4OTkxMmZmZjZiYmVhM2Q1OGZiMzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjozODoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uZmQwODQ1NGM3NTUzNjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtMTM0LDYgKzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbilcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChyZWxvYWRfdm1zYSlcbiBLVk1fWDg2X09QKGdldF9mZWF0dXJlX21zcilcbiBLVk1fWDg2X09QKGNoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24pXG4gS1ZNX1g4Nl9PUChhcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQpXG5AQCAtMTQ1LDkgKzE0NiwxNCBAQCBLVk1fWDg2X09QKHZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcilcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcbiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9mcmVlX2ZvbGlvKVxuKyNlbmRpZlxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKVxuLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxuICNlbmRpZlxuIFxuICN1bmRlZiBLVk1fWDg2X09QXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xMjIsNiArMTIyLDggQEBcbiBcdEtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfSFZfVExCX0ZMVVNIIFxcXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzIsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4rI2RlZmluZSBLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQgXFxcbitcdEtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfVVBEQVRFX1BST1RFQ1RFRF9HVUVTVF9TVEFURSBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDM0LCBLVk1fUkVRVUVTVF9XQUlUKVxuIFxuQEAgLTE4NzgsNiArMTg4MCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHRpbnQgKCp2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHRpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHR2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTtcbitcdHZvaWQgKCpyZWxvYWRfdm1zYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBcdGludCAoKmdldF9mZWF0dXJlX21zcikodTMyIG1zciwgdTY0ICpkYXRhKTtcbiBcbkBAIC0xOTAwLDggKzE5MDMsMTMgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcbiBcdGd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFx0dm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gXHRpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi1cdHZvaWQgKCpnbWVtX2ludmFsaWRhdGUpKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuK1x0dm9pZCAoKmdtZW1faW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuK1x0dm9pZCAoKmdtZW1fZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rI2VuZGlmXG4gXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNzRmYjE1NTUxZTgzZmEuLjdlMDZlZDE2ZjQ3NDYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM5NzksMzAgKzM5NzksMjEgQEAgc3RhdGljIGludCBzbnBfYmVnaW5fcHNjKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHNucF9kb19wc2Moc3ZtKTtcbiB9XG4gXG4tLypcbi0gKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4tICovXG4tc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuK1x0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRrdm1fcGZuX3QgcGZuO1xuLVx0Z2ZuX3QgZ2ZuO1xuLVxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuLVxuLVx0aWYgKCFzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTtcbiBcbi1cdC8qIE1hcmsgdGhlIHZDUFUgYXMgb2ZmbGluZSBhbmQgbm90IHJ1bm5hYmxlICovXG4tXHR2Y3B1LVx1MDAzZWFyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTtcbi1cdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuIFxuLVx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovXG4rXHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EuICovXG4gXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbiBcdC8qXG4gXHQgKiBXaGVuIHJlcGxhY2luZyB0aGUgVk1TQSBkdXJpbmcgU0VWLVNOUCBBUCBjcmVhdGlvbixcbkBAIC00MDEwLDE2ICs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICovXG4gXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cdTAwM2V2bWNiKTtcbiBcbi1cdGlmICghVkFMSURfUEFHRShzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSkpXG4tXHRcdHJldHVybjtcbitcdC8qXG4rXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxuK1x0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVx1MDAzZXNldl9lcy52bXNhLiBJblxuK1x0ICogdGhlb3J5LCBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSdkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dFxuK1x0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxuK1x0ICogaGFuZGxlZCBkdXJpbmcgdGVhcmRvd24gcmF0aGVyIHRoYW4gZ3Vlc3QgYm9vdC4gIERlZmVycmluZyB0aGF0IGFsc29cbitcdCAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGhcbitcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXG4rXHQgKi9cbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2hhc19ndWVzdF92bXNhID0gdHJ1ZTtcbiBcbi1cdGdmbiA9IGdwYV90b19nZm4oc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEpO1xuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4rXHRpZiAoIVZBTElEX1BBR0UoZ3BhKSlcbitcdFx0cmV0dXJuO1xuIFxuIFx0c2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFzbG90KVxuIFx0XHRyZXR1cm47XG4gXG4rXHRtbXVfc2VxID0ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdHNtcF9ybWIoKTtcbitcbiBcdC8qXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbkBAIC00MDI3LDI5ICs0MDI5LDY0IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0cmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHQvKlxuLVx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2Vcbi1cdCAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS1cdTAwM2VzZXZfZXMudm1zYS4gSW5cbi1cdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbi1cdCAqIHRoYXQgaW52b2x2ZXMgY2xlYW51cHMgbGlrZSBmbHVzaGluZyBjYWNoZXMsIHdoaWNoIHdvdWxkIGlkZWFsbHkgYmVcbi1cdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4tXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4tXHQgKiBtaW5pbWFsIFNOUC1zcGVjaWZpYyBjaGFuZ2VzLlxuK1x0ICogU2F2ZSB0aGUgZ3Vlc3QtcHJvdmlkZWQgR1BBLiAgSWYgcmV0cnkgaXMgbmVlZGVkLCB0aGVuIEtWTSB3aWxsIHRyeVxuK1x0ICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvXG4rXHQgKiB0cmFjayB0aGUgR1BBIHNvIHRoYXQgdGhlIFZNU0EgY2FuIGJlIHJlbG9hZGVkIGlmIHRoZSBiYWNraW5nIHBhZ2VcbitcdCAqIGZvciB0aGUgR1BBIGlzIGludmFsaWRhdGVkLlxuIFx0ICovXG4tXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTtcbitcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XG4rXHRlbHNlXG4rXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbitcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuK31cbitcbisvKlxuKyAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdGdwYV90IGdwYTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbitcbitcdGlmICghc3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXG4rXHRcdHJldHVybjtcbitcbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XG4rXG4rXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuK1x0dmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XG4rXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuLVx0LyogVXNlIHRoZSBuZXcgVk1TQSAqL1xuLVx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xuK1x0Z3BhID0gc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTtcbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4tXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlICovXG4tXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4rXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgZ3BhKTtcbiBcbiBcdC8qXG4tXHQgKiBnbWVtIHBhZ2VzIGFyZW4ndCBjdXJyZW50bHkgbWlncmF0YWJsZSwgYnV0IGlmIHRoaXMgZXZlciBjaGFuZ2VzXG4tXHQgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgaXMgcGlubmVkXG4tXHQgKiB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuXG4rXHQgKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlIGZvciBDUkVBVEUgcmVxdWVzdHMsIGluZGljYXRlZCBieSBhIHZhbGlkXG4rXHQgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGxcbitcdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbitcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXG4gXHQgKi9cbi1cdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XG4rXHRpZiAoVkFMSURfUEFHRShncGEpKVxuK1x0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4rfVxuK1xuK3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlICpzZXZfZXMgPSBcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnNldl9lcy1cdTAwM2VzbnBfdm1zYV9tdXRleCk7XG4rXG4rXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVx1MDAzZXNucF9ndWVzdF92bXNhX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbkBAIC00MTA1LDEwICs0MTQyLDEwIEBAIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuLVx0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xuK1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOlxuLVx0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4rXHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHZjcHVfdW5pbXBsKHZjcHUsIFwidm1nZXhpdDogaW52YWxpZCBBUCBjcmVhdGlvbiByZXF1ZXN0IFslI3hdIGZyb20gZ3Vlc3RcXG5cIixcbkBAIC00NzkxLDYgKzQ4MjgsOCBAQCBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdm0tXHUwMDNlc2V2X2VzLnZtc2EgPSBwYWdlX2FkZHJlc3Modm1zYV9wYWdlKTtcbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSk7XG4gXG5AQCAtNTExNSw5ICs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHQvKlxuK1x0ICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciBcImlzIFNOUFwiIGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxuK1x0ICogVGhlIHZDUFUncyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlXG4rXHQgKiB0byBvdGhlciB0YXNrcywgYW5kIGNhbiBvbmx5IGJlY29tZSB2YWxpZCB3aGlsZSBob2xkaW5nIG1tdV9sb2NrLFxuK1x0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXG4rXHQgKi9cbitcdGlmICghX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4rXHRcdGdwYV90IGdwYSA9IHRvX3N2bSh2Y3B1KS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuK1xuK1x0XHRpZiAoVkFMSURfUEFHRShncGEpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzZT0gcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXHUwMDNjIHJhbmdlLVx1MDAzZWVuZClcbitcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XG4rXHR9XG4rfVxuIFxuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG4rdm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuK1x0a3ZtX3Bmbl90IHN0YXJ0ID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xuK1x0a3ZtX3Bmbl90IGVuZCA9IHN0YXJ0ICsgKDF1bCBcdTAwM2NcdTAwM2MgZm9saW9fb3JkZXIoZm9saW8pKTtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXG4gXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NDQ1LDYgKzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbiBcdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXG4gXHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxuK1x0LnJlbG9hZF92bXNhID0gc2V2X3NucF9yZWxvYWRfdm1zYSxcbiBcbiBcdC52bV9jb3B5X2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fY29weV9lbmNfY29udGV4dF9mcm9tLFxuIFx0LnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20sXG5AQCAtNTQ2MCw5ICs1NDYxLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LnZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyA9IGF2aWNfdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zLFxuIFx0LmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLFxuIFxuKyNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbiBcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxuLVx0LmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsXG4rXHQuZ21lbV9pbnZhbGlkYXRlX3JhbmdlID0gc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSxcbitcdC5nbWVtX2ZyZWVfZm9saW8gPSBzZXZfZ21lbV9mcmVlX2ZvbGlvLFxuIFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCxcbisjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0yNzEsNyArMjcxLDggQEAgc3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlIHtcbiBcdHU2NCBnaGNiX3JlZ2lzdGVyZWRfZ3BhO1xuIFxuIFx0c3RydWN0IG11dGV4IHNucF92bXNhX211dGV4OyAvKiBVc2VkIHRvIGhhbmRsZSBjb25jdXJyZW50IHVwZGF0ZXMgb2YgVk1TQS4gKi9cbi1cdGdwYV90IHNucF92bXNhX2dwYTtcbitcdGdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhO1xuK1x0Z3BhX3Qgc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuIFx0Ym9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7XG4gXHRib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTtcbiB9O1xuQEAgLTk5NSw2ICs5OTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXG4ge1xuIFx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiB9XG4rdm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuQEAgLTEwMDgsNyArMTAxMCw4IEBAIGludCBzZXZfZGV2X2dldF9hdHRyKHUzMiBncm91cCwgdTY0IGF0dHIsIHU2NCAqdmFsKTtcbiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcbiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XG4gaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rdm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7XG5AQCAtMTAzOCw3ICsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW5cbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxuIHtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjlkZjZhY2Y5YTk4MmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04MTY3LDYgKzgxNjcsOCBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuIFx0XHR9XG4rXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpKVxuK1x0XHRcdGt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7XG4gXHR9XG4gXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSkgfHwgcmVxX2ludF93aW4gfHxcbkBAIC0xMDU5Miw5ICsxMDU5NCwxMyBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4ge1xuLVx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZSkoc3RhcnQsIGVuZCk7XG4rXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcbit9XG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRrdm1feDg2X2NhbGwoZ21lbV9mcmVlX2ZvbGlvKShmb2xpbyk7XG4gfVxuICNlbmRpZlxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLjZiN2Y4ODAxNTA1ZDVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC0yNjA3LDcgKzI2MDcsOCBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbit2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggODY2OTA2ODNiMmZlM2UuLjhlYzUwNDE5MzRkYmNmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTE4NSw2ICsxODUsMTAgQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0Zmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZnZm5fcmFuZ2UpO1xuK1xuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbitcdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbisjZW5kaWZcbiBcdH1cbiBcbiBcdGlmIChmbHVzaClcbkBAIC01MjMsMjMgKzUyNywxMiBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbFxuIFx0cmV0dXJuIE1GX0RFTEFZRUQ7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi1zdGF0aWMgdm9pZCBrdm1fZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCAwKTtcbi1cdGt2bV9wZm5fdCBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbi1cdGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbi1cbi1cdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShwZm4sIHBmbiArICgxdWwgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4tfVxuLSNlbmRpZlxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGt2bV9nbWVtX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyxcbiBcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tXHQuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sXG4rXHQuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyxcbiAjZW5kaWZcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MTYuNTk1NDI2NzY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxODg3NDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgd2FycmFudHMgZnV6emluZy4gSXQncyB0b3VjaGluZyBLVk0sIHNwZWNpZmljYWxseSBBTUQgU0VWLVNOUCBzdXBwb3J0LCBhbmQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLCBpdCBzZWVtcyB0byBiZSBkZWFsaW5nIHdpdGggYGd1ZXN0X21lbWZkYCBhbmQgVk1TQSBoYW5kbGluZy4gTmV3IEtWTSByZXF1ZXN0LCBgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEYCwgaXMgYWRkZWQuIFRoZXJlIGFyZSBjaGFuZ2VzIHRvIGBnbWVtX2ludmFsaWRhdGVgLCBgZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYGdtZW1fZnJlZV9mb2xpb2AuIFRoZXJlIGFyZSBhbHNvIG1vZGlmaWNhdGlvbnMgdG8gYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgIGFuZCBhIG5ldyBmdW5jdGlvbiwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLiBUaGUgY29kZSBpcyBhbHNvIGNoYW5naW5nIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVgIHRvIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBldmVuIGJlIHJlYWNoZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHJ1bm5hYmxlIGluIHNvbWV0aGluZyBsaWtlIEdDRSBvciBRRU1VLiBTRVYtU05QJ3MgYSBiaXQgdHJpY2t5LCBzaW5jZSBpdCByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgKEVQWUMgd2l0aCBTRVYtU05QIHN1cHBvcnQpLiBCdXQgZXZlbiBpZiB0aGUgVk1zIGNhbid0IGJlIHJ1biBpbiBhIGdpdmVuIHRlc3Qgc2V0dXAsIG9mdGVuIEtWTSBjb2RlIGlzIHN0aWxsIGZ1enphYmxlIGlmIHRoZSByZWxldmFudCBpb2N0bHMgYXJlIHJlYWNoYWJsZSwgb3IgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtb2NrIHRoZSBzZXR1cC4gU0VWLVNOUCBpcyBhIGJpdCBkaWZmZXJlbnQgYmVjYXVzZSBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBydW4gdGhlIFZNcywgYnV0IHNvbWUgaW9jdGxzICptaWdodCogYmUgcmVhY2hhYmxlLlxuXG5XYWl0IGEgc2Vjb25kLiBJIGtub3cgU3l6a2FsbGVyIGhlYXZpbHkgZnV6emVzIEtWTS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGFscmVhZHkgaGFuZGxlZC4gTGV0IG1lIGNoZWNrIGZvciBgQ09ORklHX0tWTV9BTURfU0VWYCBpbiB0aGUgcGF0Y2guIFllcCwgaXQgaXMuIFRpbWUgdG8gdmVyaWZ5IGJ5IGxvb2tpbmcgaW4gdGhlIGtlcm5lbCdzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gQW5kIGxldCdzIHVzZSBgZ3JlcHBlcmAgdG8gYmUgc3VyZSB0byBmaW5kIGFsbCBpbnN0YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODoyMy4yMTQzMDQzODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODk5NzU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODoyNS43NjMzMDc1NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMzNTkyNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgS1ZNL1NFVi1TTlAgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9uIGNoYW5nZXMgYW5kIHNlZSB3aGF0IHRoZXkgdGVsbCB1cy4gSSBzZWUgYSBzZXJpZXMgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIG9yIG1vZGlmaWVkOiBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYHNldl9nbWVtX2ZyZWVfZm9saW9gLCBga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGVpciByZWFjaGFiaWxpdHkgYW5kIGNvbnRleHQuXG5cblJpZ2h0LCBzbyBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGBzdm1fdmNwdV9yZXNldGAgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGR1cmluZyBhbiBpbml0aWFsaXphdGlvbiBldmVudC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlbiwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIHNlZW1zIHRvIGJlIGNvbWluZyBmcm9tIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gQWgsIGFuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpdHNlbGYgaXMgdHJpZ2dlcmVkIHdoZW4gYSBndWVzdCBtZW1mZCBnZXRzIGludmFsaWRhdGVkLCBsaWtlbHkgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgZmFsbG9jYXRlIC0tcHVuY2gtaG9sZWAuIEFuZCBmaW5hbGx5LCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AgaXMgY2FsbGVkIGZyb20gYGt2bV9nbWVtX2ZyZWVfZm9saW9gLCBhbHNvIGluIHRoZSBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlsZS5cblxuTm93LCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBpcyBkZWZpbmVkIHdvdWxkIGJlIHdvcnRod2hpbGUuIFRoaXMgd2lsbCBpbmZsdWVuY2Ugd2hldGhlciB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBmdW5jdGlvbnMgYXJlIGV2ZW4gYmVpbmcgdXNlZC4gTmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODozMC42OTY5MDI5OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1MjQ4NzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMTA9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTExMy1cXG52aXJ0L2t2bS9LY29uZmlnOjExNDpjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG52aXJ0L2t2bS9LY29uZmlnLTExNS0gICAgICAgYm9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODozNC4zNDk0MDA4NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQzNzM0NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGUgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBiZWluZyBwdWxsZWQgaW50byB0aGUgYnVpbGQuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHRoaW5rIGFib3V0IGl0cyBpbXBsaWNhdGlvbnMgb3IgYW55IHBvdGVudGlhbCBjaGFuZ2VzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzLCB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSB3aGF0IHRyaWdnZXJzIGl0cyBzZWxlY3Rpb24uIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIEkgY2FuIHplcm8gaW4gb24gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDA3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MzYuOTkzMTM5NDUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTU2NDQxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjQ6XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTY1LVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MzkuMDQ4Nzg5MzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NTA0MzI2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLVk0gU0VWLVNOUCBHdWVzdCBNZW1vcnkgSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgS1ZNX0FNRF9TRVZgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgbWVtb3J5IHdpdGggU0VWLVNOUCBhbmQgYGd1ZXN0X21lbWZkYC4gVGhlIGZhY3QgdGhhdCBgS1ZNX0FNRF9TRVZgIGlzIHNlbGVjdGVkIGltcGxpZXMgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBpcyBhbHNvIGluIHBsYXkgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhYnNvbHV0ZWx5LCB0aGlzIGlzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCdzIGZ1bmN0aW9uYWwgS1ZNIGNvZGUuIEdpdmVuIHRoZSBzY29wZSwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGBLVk1fQU1EX1NFVmAsIGBLVk1fQU1EYCwgYW5kIG9mIGNvdXJzZSBqdXN0IHBsYWluIGBLVk1gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYHNldl9nbWVtX2ZyZWVfZm9saW9gLCBga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2AsIGFuZCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBzZXZfc25wX3JlbG9hZF92bXNhYCBpcyByZWFjaGFibGUuIERpZ2dpbmcgaW4sIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAgcmVxdWVzdCBpcyBwcmVzZW50LiBUaGlzIHJlcXVlc3QgaXMgc2V0IGJ5IGJvdGggYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgYW5kIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYC4gIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCB3aGljaCBsZWFkcyB1cyB0byBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuXG5cbkFoYSEgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBob2xlIGlzIHB1bmNoZWQgaW4gdGhlIGBndWVzdF9tZW1mZGAuIFRoYXQncyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgZmFsbG9jYXRlYCBvbiBhIGBndWVzdF9tZW1mZGAuIFNvLCBmdXp6aW5nIGBmYWxsb2NhdGVgIG9uIGEgYGd1ZXN0X21lbWZkYCB3aGlsZSBhIFZNIGlzIHJ1bm5pbmcgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIHN1YnNlcXVlbnRseSB0aGUgYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAuIFNlZW1zIGxpa2UgYSBnb29kIHZlY3Rvci5cblxuSG93ZXZlciwgdGhlIGNhdGNoIGlzIGBLVk1fQU1EX1NFVmAgcmVxdWlyZXMgU0VWIGhhcmR3YXJlLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgZnV6eiB0aGlzPyAgU3l6a2FsbGVyIGNhbiBmdXp6IEtWTSBpb2N0bHMsIGFuZCBldmVuIGlmIFNFViBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBzb21lIGNvZGUgcGF0aHMgbWF5IHN0aWxsIGJlIHJlYWNoYWJsZSAob3IgZmFpbCBlYXJseSksIHdoaWNoIGlzIHVzZWZ1bC4gS1ZNIGNvZGUgaXMgZ2VuZXJhbGx5IHdvcnRoIGZ1enppbmcuXG5cbkJ1dCB3YWl0LCB0aGUgcHJvbXB0IHNwZWNpZmllcyB0aGF0IEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gIFNvIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lcywgaXMgU0VWLVNOUCByZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IElmIHRoZSBob3N0IGRvZXNuJ3Qgc3VwcG9ydCBTRVYtU05QLCBjaGVja3MgbGlrZSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd2lsbCBmYWlsLCBhbmQgS1ZNIHdvbid0IGFsbG93IFNFVi1TTlAgVk0gY3JlYXRpb24uIFRoaXMgaXMgYSBwb3RlbnRpYWwgc3R1bWJsaW5nIGJsb2NrLlxuXG5TRVYtU05QIGlzIHVzdWFsbHkgdG91Z2ggdG8gZnV6eiBpbiBzdGFuZGFyZCBHQ0UgVk1zIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcy4gTmVzdGVkIHZpcnR1YWxpemF0aW9uIHdpdGggZW11bGF0aW9uIGNvdWxkICpwb3RlbnRpYWxseSogYWxsb3cgaXQsIGJ1dCB0aGF0J3Mgbm90IHRoZSBub3JtLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogS1ZNLCBhbmQgc29tZXRpbWVzIHdlIHJ1biBTeXprYWxsZXIgb24gYmFyZSBtZXRhbCBvciBuZXN0ZWQgVk1zIHRoYXQgc3VwcG9ydCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcy4gQnV0IGNhbiBRRU1VIGVtdWxhdGUgU0VWLVNOUCBpbiBhIHdheSB0aGF04oCZcyB1c2VmdWwgZm9yIEtWTT9cblxuUUVNVSBjYW4gZW11bGF0ZSBhIGxvdCwgYnV0IEtWTSBTRVYtU05QIHJlbGllcyBvbiBhIGhhcmR3YXJlIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKSBvbiBBTUQgaGFyZHdhcmUuIEl0J3Mgbm90IHB1cmUgc29mdHdhcmUgZW11bGF0aW9uOyBLVk0gZGVsZWdhdGVzIHRvIHRoZSBoYXJkd2FyZS4gU28sIEtWTSBhbG9uZSBjYW5ub3QgY3JlYXRlIFNFVi1TTlAgVk1zIHdpdGhvdXQgaG9zdCBoYXJkd2FyZS4gTG9va2luZyBhdCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgb3IgYHNldl92bV9pbml0YCBzaG91bGQgZ2l2ZSBtb3JlIGNsYXJpdHkuXG5cbkdpdmVuIHRoaXMsIHRoZSBjb2RlIHBhdGggYmVpbmcgZGlzY3Vzc2VkIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODo1MS41OTkyMjUwMjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjI3OTkyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X3ZtX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yODk3PXN0YXRpYyBpbnQgc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5MjI6dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTIzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTI5OD1zdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUyOTkte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTMwMDpcXHRzZXZfdm1faW5pdChrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTMwMS1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAwMj12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMDM6dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwNC12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEwMzA9c3RhdGljIGlubGluZSB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAzMTpzdGF0aWMgaW5saW5lIHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7fVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMi1zdGF0aWMgaW5saW5lIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKSB7fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTY3PXN0YXRpYyBpbmxpbmUgdTY0IHNucF9kZWZhdWx0X3BvbGljeSh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTEwMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg6MTAzOnZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0xMDQtdm9pZCBzZXZfZXNfdm1faW5pdChzdHJ1Y3Qga3ZtX3ZtICp2bSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz0xNz1zdGF0aWMgdm9pZCBlbmNyeXB0X3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24sXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy00Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYzo0ODp2b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jLTQ5LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYz0yMz1zdGF0aWMgc3RydWN0IGt2bV92bSAqc2V2X3ZtX2NyZWF0ZShib29sIGVzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTI5LVxcdGlmICghZXMpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jOjMwOlxcdFxcdHNldl92bV9pbml0KHZtKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMtMzEtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODo1My40NjIwMzAwNzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5Mjc3NzY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNLVNWTSBJbml0aWFsaXphdGlvbiBmb3IgU0VWKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGBzZXZfdm1faW5pdGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0IHdpdGhpbiB0aGUgS1ZNLVNWTSBtb2R1bGUsIHNvIGBzZXZfdm1faW5pdGAgc2hvdWxkIGJlIHdoZXJlIHRoZSBndWVzdCBWTSBlbnZpcm9ubWVudCBnZXRzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYW5kIGluaXRpYWxpemVkIGZvciBTRVYuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgc3RlcHMgZm9yIHNldHRpbmcgdXAgbWVtb3J5IGVuY3J5cHRpb24sIGhhbmRsaW5nIHRoZSBndWVzdCdzIHNlY3JldHMsIGFuZCBjb25maWd1cmluZyB0aGUgU1ZNLXNwZWNpZmljIHNlY3VyaXR5IGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIGdyYXNwaW5nIGhvdyBTRVYgd29ya3MgYXQgdGhlIGxvd2VzdCBsZXZlbCB3aXRoaW4gdGhlIEtWTSBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUxMywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjU2LjQ1NDgxMDYzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTIyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTIyOlxcdHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbjI5MjM6XFx0e1xcbjI5MjQ6XFx0XFx0c3dpdGNoIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSkge1xcbjI5MjU6XFx0XFx0Y2FzZSBLVk1fWDg2X0RFRkFVTFRfVk06XFxuMjkyNjpcXHRcXHRjYXNlIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNOlxcbjI5Mjc6XFx0XFx0XFx0YnJlYWs7XFxuMjkyODpcXHRcXHRjYXNlIEtWTV9YODZfU05QX1ZNOlxcbjI5Mjk6XFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9IHRydWU7XFxuMjkzMDpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4yOTMxOlxcdFxcdGNhc2UgS1ZNX1g4Nl9TRVZfRVNfVk06XFxuMjkzMjpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSA9IHRydWU7XFxuMjkzMzpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4yOTM0OlxcdFxcdGNhc2UgS1ZNX1g4Nl9TRVZfVk06XFxuMjkzNTpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQgPSAha3ZtLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbTtcXG4yOTM2OlxcdFxcdFxcdHRvX2t2bV9zZXZfaW5mbyhrdm0pLVxcdTAwM2VuZWVkX2luaXQgPSB0cnVlO1xcbjI5Mzc6XFx0XFx0XFx0YnJlYWs7XFxuMjkzODpcXHRcXHRkZWZhdWx0OlxcbjI5Mzk6XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJVbnN1cHBvcnRlZCBWTSB0eXBlICV1XFxcIiwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbjI5NDA6XFx0XFx0XFx0YnJlYWs7XFxuMjk0MTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjU2LjQ1NTAyNTUzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODgyNjg4OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIEtWTV9YODZfU05QX1ZNIGFuZCBWaXJ0dWFsIE1hY2hpbmUgQ3JlYXRpb24qKlxuXG5IbW0sIGBLVk1fWDg2X1NOUF9WTWAuLi4gdGhhdCdzIGEgVk0gdHlwZSwgaXNuJ3QgaXQ/IE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyByZWxhdGVkIHRvIFNlY3VyZSBOZXN0ZWQgUGFnaW5nLCBvciBBTUQncyBTZWN1cmUgTmVzdGVkIFBhZ2luZywgYnV0IEkgbmVlZCB0byBjb25maXJtLiBJJ20gd29uZGVyaW5nOiBjYW4gYSB1c2VyIGFjdHVhbGx5ICpjcmVhdGUqIGEgVk0gb2YgdGhpcyBzcGVjaWZpYyB0eXBlIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydD8gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIGNvbmZpZ3VyYXRpb24gZXJyb3IgdGhhdCBzaG91bGQgYmUgcHJldmVudGVkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBwcm9iYWJseSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgVk0uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBmdW5jdGlvbiBvciBjb2RlIGJsb2NrIHdoZXJlIHRoZSBgdm1fdHlwZWAgaXMgdmFsaWRhdGVkLiBTbyBJIHNob3VsZCBwcm9iYWJseSBsb29rIGZvciBga3ZtX2FyY2hfaW5pdF92bWAgb3Igd2hlcmV2ZXIgYHZtX3R5cGVgIGdldHMgY2hlY2tlZCBkdXJpbmcgdGhlIFZNIGNyZWF0aW9uIHByb2Nlc3MuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBndWFyZHJhaWxzIHByZXZlbnRpbmcgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSBzZWN1cmUgVk0gb24gaW5jb21wYXRpYmxlIGhhcmR3YXJlLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIGFyZWFzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBzdWZmaWNpZW50IHByb3RlY3Rpb24sIG9yIGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjAwLjMzNzcxNjgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjE3NjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTQwNT1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk0MTAtICAjZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXFx0M1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NDExOiAgI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdDRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTQxMi0gICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHQ1XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzQ6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3NS0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjI9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3MTpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcyLVxcdFxcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODg9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTQtXFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk1OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTYtXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwOS1cXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMDpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5MjI9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5MjctXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTI4OlxcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTI5LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDQ1PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkwLVxcdGlmIChzZXZfc25wX3N1cHBvcnRlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxOTE6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXFx0dm1fdHlwZXMgXFx1MDAyNj0gc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA1LVxcdFxcdHByX2luZm8oXFxcIlNFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNjpcXHRcXHRcXHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA3LVxcdFxcdFxcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MzAwMz1pbnQgc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMDE3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MzAxODpcXHRzdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMTktXFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcxLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2OlxcdHJldHVybiB2bS1cXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3MD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcyLSNpZmRlZiBfX3g4Nl82NF9fXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MzpcXHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDc0LSNlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XFx0VEVTVF9BU1NFUlRfRVEodm0tXFx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFxcdTAwMjZpbml0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg3LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4OlxcdFxcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTIyPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE0NDpcXHRoYXZlX3NucCA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ1LVxcdFRFU1RfQVNTRVJUKCFoYXZlX3NucCB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTUzLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NDpcXHRcXHR0ZXN0X2ZsYWdzKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTU5LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MDpcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVxcdFxcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcXHRcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVxcdFxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI1NTpcXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI1NjpcXHRcXHR0ZXN0X3Nldl9zbW9rZShndWVzdF9zbnBfY29kZSwgS1ZNX1g4Nl9TTlBfVk0sIHNucF9kZWZhdWx0X3BvbGljeSgpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTowMi4yMzk4OTkwODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1NjcyOTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk1fWDg2X1NOUF9WTSBXb3J0aGluZXNzIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgS1ZNX1g4Nl9TTlBfVk1gIGlzIHRpZWQgZGlyZWN0bHkgdG8gYHNldl9zbnBfc3VwcG9ydGVkYCwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGFyZHdhcmUncyBTRVYtU05QIGNhcGFiaWxpdGllcyBkdXJpbmcgdGhlIGBzZXZfaGFyZHdhcmVfc2V0dXBgLiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBoYXZlIGl0LCBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGEgbm8tZ28sIGFuZCBga3ZtX2NyZWF0ZV92bWAgd2lsbCBlcnJvciBvdXQgd2l0aCBgLUVJTlZBTGAuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzLCBcImlmIGl0J3MgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLCB0aGVuIGl0J3MgYFdvcnRoRnV6emluZz1mYWxzZWBcIi4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHByb21wdC5cblxuQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBwcm9tcHQgc2F5cyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gKnZpcnR1YWxpemVkIGVudmlyb25tZW50cyogbGlrZSBHQ0Ugb3IgUUVNVVwiLiBEb2VzIHN5emthbGxlciBldmVuIHJ1biBvbiBoYXJkd2FyZSB0aGF0IGNvdWxkIHN1cHBvcnQgU0VWLVNOUD8gQWgsIHN5emthbGxlciBjYW4gcnVuIGJhcmUgbWV0YWwgb3IgbmVzdGVkIFZNcywgdGhhdCdzIHJpZ2h0LiBTbywgaXQncyBub3Qgc2ltcGx5IFwiaW1wb3NzaWJsZVwiLCBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG5Ob3csIGlzIFNFVi1TTlAgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0U/IEFoYSwgdGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEdDRSBhY3R1YWxseSBzdXBwb3J0cyBBTUQgU0VWIGFuZCBTRVYtU05QIGluc3RhbmNlcywgc3BlY2lmaWNhbGx5IENvbmZpZGVudGlhbCBWTXMuIFRoYXQgY2hhbmdlcyBldmVyeXRoaW5nISBJdCBJUyBwb3NzaWJsZSB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIG9uIEdDRSBpZiB0aGUgaW5zdGFuY2UgdHlwZSBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4gQW5kLCB3aGlsZSBRRU1VIG1pZ2h0IHJlcXVpcmUgaG9zdCBoYXJkd2FyZSBzdXBwb3J0LCBHQ0UgKnByb3ZpZGVzKiB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGggKmlzKiByZWFjaGFibGUuXG5cbkNvbmNsdXNpb246IHRoaXMgcGF0Y2ggaXMgZnV6emFibGUsIHNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5KdXN0IHRvIGJlIHNhZmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCdzIGxvb2sgYXQgYENPTkZJR19LVk1fQU1EX1NFVmAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX0tWTWAuXG5cbkFsc28sIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGBndWVzdF9tZW1mZGAgcmVxdWlyZXMgYW55IHNwZWNpYWwgY29uZmlncy4gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IG5lZWQgYENPTkZJR19LVk1fUFJJVkFURV9NRU1gIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MTAuMTk2NjQwMTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyNTY4NzA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1BSSVZBVEVfTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToxMi40NzkyMjYxODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczNjc5NjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBHdWVzdCBNZW1vcnkgU2hhcmluZyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYXNzb2NpYXRlZCB3aXRoIGBndWVzdF9tZW1mZGAuIEl04oCZbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycyBhcmUgYmVpbmcgdXNlZCBvciBjYW4gYmUgZW5hYmxlZCBmb3IgdGhlc2UgZ3Vlc3RzLiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIGVudHJ5IGdpdmVzIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG15IHdvcmsuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgYW5kIGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpdCwgYW5kIGlmIGl0J3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQyNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjE1LjIxNjAyNjE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY3NjkwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNTphbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM4OltndWVzdF9tZW1mZF9vZmZzZXQsIGd1ZXN0X21lbWZkX29mZnNldCArIG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzOS1tdXN0IHBvaW50IGF0IGEgZmlsZSBjcmVhdGVkIHZpYSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEIG9uIHRoZSBjdXJyZW50IFZNLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUxOlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cXHRfX3UzMiBwYWQxO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTgtdXNlcnNwYWNlX2FkZHIgKHNoYXJlZCBtZW1vcnkpLiAgSG93ZXZlciwgXFxcInZhbGlkXFxcIiBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJ3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXFxcImZsYWdzXFxcIiBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIG11c3QgYmUgJzAnLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTctOlR5cGU6IHZtIGlvY3RsXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjI6dGhhdCByZWZlcnMgdG8gaXQuICBndWVzdF9tZW1mZCBmaWxlcyBhcmUgcm91Z2hseSBhbmFsb2dvdXMgdG8gZmlsZXMgY3JlYXRlZFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjU6XFxcInJlZ3VsYXJcXFwiIG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjYtdmlydHVhbCBtYWNoaW5lIChzZWUgYmVsb3cpLCBjYW5ub3QgYmUgbWFwcGVkLCByZWFkLCBvciB3cml0dGVuIGJ5IHVzZXJzcGFjZSxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMi1cXHRfX3U2NCBzaXplO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXFxcInN0cnVjdCBrdm1cXFwiLiAgVGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0Mz1taWdyYXRpb24gb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlxcXCJzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlxcXCIsIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MDpndWVzdF9tZW1mZCByYW5nZSBpcyBub3QgYWxsb3dlZCAoYW55IG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBjYW4gYmUgYm91bmQgdG9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTYtICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDY4OmNvbnN1bWVkIGZyb20gZ3Vlc3RfbWVtZmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHNoYXJlZCBvciBhIHByaXZhdGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI2MTE9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcXHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDUtXFx0ICogdGhlcmUgYXJlbid0IGFueSBDb0NvIFZNcyB0aGF0IHN1cHBvcnQgb25seSBwcml2YXRlIG1lbW9yeSBvbiBhcm02NC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVxcdFxcdFxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcXHRcXHRcXHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwNS1cXHRcXHRcXHQgKiBjcmVhdGUgYSBmb2xpbyB0byBiYWNrIHRoZSBtZW1vcnkuIEluZm9ybSB1c2Vyc3BhY2UuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1ODpcXHRcXHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTk6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJHZXQgcGZuK29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcXFwiKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzM6XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0OlxcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJ3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc1LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzk4PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXFx0ICogICAgICBiZWZvcmVoYW5kLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcXHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDM5LVxcdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDA1Mj1zdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3OlxcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTgzPXZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVxcdFxcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcXHRcXHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXFx0XFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUnaW5nIHRoZW0gYmFjayB0b1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzAxNjpcXHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXFx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzIxNDpcXHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVxcdCAqIG1tdV9ub3RpZmllciBldmVudHMgY2FuJ3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSdzIGludGVybmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzM9Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MDogKiBLVk0gZG9lc24ndCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgxLSAqIHdpdGggcHJpdmF0ZSBtZW1vcnkgKHRoZSBwcml2YXRlIHZzLiBzaGFyZWQgdHJhY2tpbmcgbmVlZHMgdG8gYmUgbW92ZWQgaW50b1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NC1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDctXFx0X191MzIgcGFkMTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjQ1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXFx0X191NjQgc2l6ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDMtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0OlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIHBhZDE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYzNT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFxcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVxcdF9fdTY0IHNpemU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ2V0LXJlZy1saXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ3Vlc3RfbWVtZmRfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00Mj1zdGF0aWMgdm9pZCB0ZXN0X21tYXBfY293KGludCBmZCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVxcdG1lbSA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OlxcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcXFwiQ29weS1vbi13cml0ZSBub3QgYWxsb3dlZCBieSBndWVzdF9tZW1mZC5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Mi1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlxcdCAqIFRvIGV2ZW4gcmVhY2ggdGhlIHBvaW50IHdoZXJlIHRoZSBndWVzdF9tZW1mZCBmb2xpb3Mgd2lsbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVxcdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODU6XFx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXFx0ICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XFx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjEwLVxcdCAqIGZpbmUuLi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MzQ4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9iaW5kaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgZmQsIHNpemVfdCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTg6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cXHRmb3IgKHNpemUgPSAxOyBzaXplIFxcdTAwM2MgcGFnZV9zaXplOyBzaXplKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcXHRcXHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXFx0XFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcXHRcXHRcXHQgICAgXFxcImd1ZXN0X21lbWZkKCkgd2l0aCBub24tcGFnZS1hbGlnbmVkIHBhZ2Ugc2l6ZSAnMHglbHgnIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2OC1cXHRcXHRcXHQgICAgc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3MjpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcXHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3OC1cXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFxcXCJtZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozODQ6XFx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVxcdFRFU1RfQVNTRVJUKGZkMiAhPSAtMSwgXFxcIm1lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDAxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVxcdGZvciAoZmxhZyA9IEJJVCgwKTsgZmxhZzsgZmxhZyBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDA3OlxcdFxcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDgtXFx0XFx0aWYgKGZsYWcgXFx1MDAyNiB2YWxpZF9mbGFncykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVxcdFxcdFxcdFRFU1RfQVNTRVJUKGZkIFxcdTAwM2U9IDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAnMHglbHgnIHNob3VsZCBzdWNjZWVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cXHRcXHRcXHRcXHQgICAgZmxhZyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cXHRcXHRcXHRURVNUX0FTU0VSVChmZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDE1OlxcdFxcdFxcdFxcdCAgICBcXFwiZ3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJzB4JWx4JyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXFx0XFx0XFx0XFx0ICAgIGZsYWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcXHRpbnQgZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoX192bSwgX19nbWVtX3NpemUsIF9fZmxhZ3MpO1xcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MTpzdGF0aWMgdm9pZCBfX3Rlc3RfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XFx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUodm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0OlxcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDcyOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmQodW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3OlxcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5OlxcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XFx0XFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXFx0aWYgKGZsYWdzIFxcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcXHRcXHRfX3Rlc3RfZ3Vlc3RfbWVtZmQodm0sIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXFx0XFx0XFx0XFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM1OlxcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXFx0ICogb2YgdGhlIGhvc3QgcGFnZSBzaXplLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXFx0c2l6ZSA9IG1heF90KHNpemVfdCwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcXHRmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVxcdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXFx0Zm9yX2VhY2hfc2V0X2JpdCh2bV90eXBlLCBcXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4OlxcdFxcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1ODA6XFx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjY3OnN0YXRpYyBpbmxpbmUgaW50IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cXHRcXHRcXHRcXHRcXHQgIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXFx0XFx0LnNpemUgPSBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzU6XFx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzYtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzktXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcXHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Mi1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XFx0XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2OlxcdFxcdFxcdFxcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzAyLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjcwMzpcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzA0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3MS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cXHRmbGFncyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjUwMDpcXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz04MDQ9c3RhdGljIHZvaWQgX192bV9tZW1fcmVnaW9uX2RlbGV0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XFx0aWYgKChpbnQpcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgXFx1MDAzZT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlxcdFxcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtODIxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTQ4LVxcdFxcdFxcdFxcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1Ni1cXHRcXHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU3OlxcdFxcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTg6XFx0XFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU5LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTY2PXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk2ODpcXHRcXHRcXHRcXHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3MC1cXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlxcdFxcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVxcdGlmIChmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcXHRcXHRpZiAoZ3Vlc3RfbWVtZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5OlxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlxcdFxcdFxcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDkxLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cXHRcXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcXHRcXHRcXHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDk5LVxcdFxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDUtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMTktXFx0XFx0XFxcIiAgc2xvdDogJXUgZmxhZ3M6IDB4JXhcXFxcblxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcXHRcXHRcXFwiICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIxLVxcdFxcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk1OlxcdFxcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0LCBsZW4pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTctXFx0XFx0XFx0ICAgIHB1bmNoX2hvbGUgPyBcXFwicHVuY2ggaG9sZVxcXCIgOiBcXFwiYWxsb2NhdGVcXFwiLCBncGEsIGxlbixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcXHRcXHRcXHQgICAgcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg2LVxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODc6XFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5MTpcXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXFx0XFx0VEVTVF9BU1NFUlQociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzk4LVxcdFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00MDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XFx0XFx0Y2xvc2UoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNla3ZtX2ZkLCAwLCBcXFwiS1ZNIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNlZmQsIDAsIFxcXCJWTSdzIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzktXFx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXFxcIlJlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgxLVxcdGNsb3NlKG1lbWZkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgzLVxcdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0yLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1OlxcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFxcXCJPdGhlciBWTSdzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlxcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkzLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBQQUdFX1NJWkU7IGkrKylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcXHRcXHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCBpLCBcXFwiVW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSAqIDUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjMtXFx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0OlxcdCAqIHdpdGggYSBcXFwiYmFkXFxcIiBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyOS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlxcdCAqIFZlcmlmeSB0aGF0IG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkIGJpbmRpbmdzIChpLmUuIGluIGd1ZXN0X21lbWZkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXFx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlxcdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdCdzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDEtXFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ1LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXFx0VEVTVF9BU1NFUlQociA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTg6XFx0XFx0ICAgIFxcXCJPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cXHRURVNUX0FTU0VSVChyID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVFWElTVCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcXHRcXHQgICAgXFxcIk92ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTIzMD1zdGF0aWMgdm9pZCBndWVzdF90ZXN0X3B1bmNoX2hvbGUodTY0IGJhc2VfZ3BhLCBib29sIHByZWNpc2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXFx0ICogQ29udmVydCB0aGUgZW50aXJlIHJhbmdlIHRvIHByaXZhdGUsIHRoaXMgdGVzdGNhc2UgaXMgYWxsIGFib3V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3OlxcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJ3QgbmVlZGVkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI3NTpcXHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlxcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODItXFx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzozOTc6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNjpcXHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XFx0ICogZmQuICBUaGUgZ3Vlc3RfbWVtZmQgaXMgZ2lmdGVkIGEgcmVmZXJlbmNlIHRvIGl0cyBvd25pbmcgVk0sIGkuZS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXFx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI5OlxcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVxcdCAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToxNy4xODM3MjMyMjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjAzNzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgR3Vlc3QgTWVtZmQgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGd1ZXN0X21lbWZkYCBzdXBwb3J0IHJlbGllcyBvbiBlaXRoZXIgYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCBvciBgS1ZNX1g4Nl9TTlBfVk1gLiBUaGF0IG1ha2VzIHNlbnNlOyB0aG9zZSBWTSB0eXBlcyBoYXZlIHNlY3VyaXR5LXJlbGF0ZWQgY29uc2lkZXJhdGlvbnMgdGhhdCBwcm9iYWJseSBuZWNlc3NpdGF0ZSBzb21lIGZvcm0gb2YgcHJvdGVjdGVkIG1lbW9yeSBtYW5hZ2VtZW50LiBXYWl0IGEgbWludXRl4oCmIGBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTWAgaXMgYSAqc29mdHdhcmUqLXByb3RlY3RlZCBWTT8gVGhhdCdzIGludGVyZXN0aW5nLiBJIGhhZG4ndCB0aG91Z2h0IGFib3V0IHRoYXQuIFRoaXMgc3VnZ2VzdHMgd2UgbWlnaHQgYmUgYWJsZSB0byB0ZXN0IGFuZCB2YWxpZGF0ZSBgZ3Vlc3RfbWVtZmRgIGZ1bmN0aW9uYWxpdHkgZXZlbiB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBieSBsZXZlcmFnaW5nIHRoZSBzb2Z0d2FyZS1iYXNlZCBwcm90ZWN0aW9uIGZlYXR1cmVzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBhZHZhbnRhZ2UgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nLiBMZXQncyBkaWcgaW50byBgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1gIGEgYml0IG1vcmUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMgYnkgZXhhbWluaW5nIHRoZSBLY29uZmlnIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE0OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToyMC45OTk3NjQ5OThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzgwODU2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToyMi45Nzc4NTY4MTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MjM0OTU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk1gIG9uIFNFVi1TTlAgVk1zKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk1gIGZsYWcsIGFuZCBpdCdzIGVuYWJsaW5nIGBndWVzdF9tZW1mZGAgZXZlbiB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBtb3JlIGVzdGFibGlzaGVkIFNFVi1TTlAgZnVuY3Rpb25hbGl0eT9cblxuSG9sZCBvbi4uLiBJJ20gbG9va2luZyBhdCB0aGUgcGF0Y2gsIGFuZCBpdCdzIG1vZGlmeWluZyBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gTm93LCB0aG9zZSBmdW5jdGlvbnMgYXJlICpzcGVjaWZpY2FsbHkqIGNhbGxlZCB3aGVuIGBLVk1fQU1EX1NFVmAgaXMgZW5hYmxlZCwgYW5kIHRoZSB2aXJ0dWFsIG1hY2hpbmUgaXMsIG9mIGNvdXJzZSwgYW4gU0VWLVNOUCBWTS4gVGhhdCdzIGEgcmVkIGZsYWcuIFRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBwcm90ZWN0aW9uIG9uIGEgcGxhdGZvcm0gSSBjYXJlIGFib3V0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24uXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAuIExldCdzIHNlZSBleGFjdGx5IHdoYXQncyBiZWluZyBhbHRlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYyMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjI2LjQyMDIwODY5NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTU3LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTU3OlxcdHZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG41MTU4OlxcdHtcXG41MTU5OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG41MTYwOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG41MTYxOlxcdFxcbjUxNjI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuNTE2MzpcXHRcXG41MTY0OlxcdFxcdC8qXFxuNTE2NTpcXHRcXHQgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yIFxcXCJpcyBTTlBcXFwiIGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxcbjUxNjY6XFx0XFx0ICogVGhlIHZDUFUncyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlXFxuNTE2NzpcXHRcXHQgKiB0byBvdGhlciB0YXNrcywgYW5kIGNhbiBvbmx5IGJlY29tZSB2YWxpZCB3aGlsZSBob2xkaW5nIG1tdV9sb2NrLFxcbjUxNjg6XFx0XFx0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXFxuNTE2OTpcXHRcXHQgKi9cXG41MTcwOlxcdFxcdGlmICghX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG41MTcxOlxcdFxcdFxcdHJldHVybjtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XFxuNTE3NDpcXHRcXHRcXHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXFx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGE7XFxuNTE3NTpcXHRcXG41MTc2OlxcdFxcdFxcdGlmIChWQUxJRF9QQUdFKGdwYSkgXFx1MDAyNlxcdTAwMjZcXG41MTc3OlxcdFxcdFxcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXFx1MDAzZT0gcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwMjZcXHUwMDI2XFxuNTE3ODpcXHRcXHRcXHQgICAgZ3BhX3RvX2dmbihncGEpIFxcdTAwM2MgcmFuZ2UtXFx1MDAzZWVuZClcXG41MTc5OlxcdFxcdFxcdFxcdGt2bV9tYWtlX3JlcXVlc3RfYW5kX2tpY2soS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcXG41MTgwOlxcdFxcdH1cXG41MTgxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MjYuNDIwNDI3Nzc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzYyMDY0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSBjaGVja2luZyBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoaXMgcGF0aCBpcyBvbmx5IHJlbGV2YW50IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBTRVYtU05QIGd1ZXN0LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gc29tZW9uZSBldmVuICpjcmVhdGUqIGFuIFNOUCBndWVzdCB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQ/IFRoZSBhbnN3ZXIncyBhIHNvbGlkICpubyouIGBzZXZfc25wX3N1cHBvcnRlZGAgaXMgY2hlY2tlZCBpbiBgc2V2X2hhcmR3YXJlX3NldHVwYCwgd2hpY2ggcmVhZHMgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgc28gd2UncmUgcmVseWluZyBvbiB0aGUgY2hpcCBoZXJlLlxuXG5CdXQgdGhlbiBJIHJlY2FsbCB0aGF0IFN5emthbGxlciAqZG9lcyogcnVuIG9uIEdDRSBpbnN0YW5jZXMgdGhhdCBzdXBwb3J0IFNFVi1TTlAsIGEuay5hLiBDb25maWRlbnRpYWwgVk1zLiBUaGlzIHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIFRoZSBwcm9tcHQgSSdtIHdvcmtpbmcgd2l0aCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gU2luY2UgR0NFICpkb2VzKiBvZmZlciBTRVYtU05QIGluc3RhbmNlcywgdGhpcyBjb25kaXRpb24gaXMsIGluIGZhY3QsICpwb3NzaWJsZSouXG5cblRoZXJlZm9yZSwgSSdtIGxlYW5pbmcgdG93YXJkIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIHBhdGNoIGlzLCBpbiBwcmluY2lwbGUsIHJlYWNoYWJsZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWdzLiBJJ20gdGhpbmtpbmc6IGBLVk1fQU1EX1NFVmAsIGBLVk1fQU1EYCwgYW5kIGBLVk1gIGFyZSB0aGUgb2J2aW91cyBvbmVzLiBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgKm1pZ2h0KiBjb21lIGludG8gcGxheSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBUaG91Z2gsIGBLVk1fQU1EX1NFVmAgaXMgYWN0dWFsbHkgdGhlIG9uZSB0aGF0IGVuYWJsZXMgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCwgd2hpY2ggaW1wbGllcyBndWVzdF9tZW1mZCBpcyBlbmFibGVkLlxuXG5TbyBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIGZvciBgZ3Vlc3RfbWVtZmRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ1NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjMxLjk1NjYzNzAzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NzMzNzcyNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9QUklWQVRFX01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MzMuODIzOTgxODIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODUyMzg2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IHNoYXJpbmcgd2l0aGluIEtWTSBndWVzdHMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGBtZW1mZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgdmlydC9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzc29jaWF0ZWQgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBJdOKAmWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGJlaW5nIHVzZWQgb3IgY2FuIGJlIGVuYWJsZWQgZm9yIHRoZXNlIGd1ZXN0cy4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBlbnRyeSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSB3b3JrLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgaXQsIGFuZCBpZiBpdCdzIHJlbGV2YW50IHRvIHRoaXMgY3VycmVudCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNTMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTozNi42MDkyMjM1MzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjU1ODEyOTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR0VORVJJQ19QUklWQVRFX01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MzguNDM0ODE2NTE3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MTYzNTM2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IHNoYXJpbmcgd2l0aGluIEtWTSBndWVzdHMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGBtZW1mZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgdmlydC9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzc29jaWF0ZWQgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBJdOKAmWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGJlaW5nIHVzZWQgb3IgY2FuIGJlIGVuYWJsZWQgZm9yIHRoZXNlIGd1ZXN0cy4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBlbnRyeSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSB3b3JrLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgaXQsIGFuZCBpZiBpdCdzIHJlbGV2YW50IHRvIHRoaXMgY3VycmVudCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTo0MS4wNTExNzQ2NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDE4ODY2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3Vlc3RfbWVtZmQub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzNz1pbiBmbGFncyB0byBoYXZlIEtWTSBiaW5kIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGEgZ2l2ZW4gZ3Vlc3RfbWVtZmQgcmFuZ2Ugb2ZcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzODpbZ3Vlc3RfbWVtZmRfb2Zmc2V0LCBndWVzdF9tZW1mZF9vZmZzZXQgKyBtZW1vcnlfc2l6ZV0uICBUaGUgdGFyZ2V0IGd1ZXN0X21lbWZkXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzMzktbXVzdCBwb2ludCBhdCBhIGZpbGUgY3JlYXRlZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBvbiB0aGUgY3VycmVudCBWTSwgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM0MT1ib3VuZHMgY2hlY2tzIGFwcGx5ICh1c2UgY29tbW9uIHNlbnNlKS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVxcdF9fdTY0IHVzZXJzcGFjZV9hZGRyOyAvKiBzdGFydCBvZiB0aGUgdXNlcnNwYWNlIGFsbG9jYXRlZCBtZW1vcnkgKi9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MTpcXHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTItXFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0NT1LVk0gY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgbWFwcGluZyBndWVzdF9tZW1mZCB2aWEgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ2OmFuZCBtb3JlIHNwZWNpZmljYWxseSB2aWEgdGhlIGd1ZXN0X21lbWZkIGFuZCBndWVzdF9tZW1mZF9vZmZzZXQgZmllbGRzIGluXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDc6XFxcInN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yXFxcIiwgd2hlcmUgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGlzIHRoZSBvZmZzZXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OC1pbnRvIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEZvciBhIGdpdmVuIGd1ZXN0X21lbWZkIGZpbGUsIHRoZXJlIGNhbiBiZSBhdFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zMzQ2PXN0YXRpYyB1OCBrdm1fZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNTctXFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTg6XFx0XFx0LyogVE9ETzogQ2FsbCBpbnRvIGd1ZXN0X21lbWZkIG9uY2UgaHVnZXBhZ2VzIGFyZSBzdXBwb3J0ZWQuICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzU5LVxcdFxcdFdBUk5fT05DRSgxLCBcXFwiR2V0IHBmbitvcmRlciBmcm9tIGd1ZXN0X21lbWZkXFxcIik7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzk9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ0LVxcdF9fdTY0IHVzZXJzcGFjZV9hZGRyO1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NTpcXHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIGd1ZXN0X21lbWZkO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM4PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00My1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDQ6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NS1cXHRfX3UzMiBndWVzdF9tZW1mZDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjkxPXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTItXFx0XFx0XFx0XFx0Z3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjkzOlxcdFxcdFxcdFxcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTQtaW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTUtXFx0XFx0XFx0XFx0IGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5NjpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NzAxPXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwMi1cXHRcXHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo3MDM6XFx0XFx0aW50IGd1ZXN0X21lbWZkX2ZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NDc9aW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk0OC1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NDk6XFx0XFx0XFx0XFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTUwLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTctXFx0XFx0Lmd1ZXN0X21lbWZkID0gZ3Vlc3RfbWVtZmQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcXHRcXHQuZ3Vlc3RfbWVtZmRfb2Zmc2V0ID0gZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXFx0fTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTY3LVxcdFxcdFxcdFxcdGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4OlxcdFxcdFxcdFxcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTY5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVxcdGludCByZXQgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBzbG90LCBmbGFncywgZ3BhLCBzaXplLCBodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk3MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ3Vlc3RfbWVtZmQsIGd1ZXN0X21lbWZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3Mi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05Nzk9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODAtXFx0XFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5ODE6XFx0XFx0aW50IGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODIte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwODctXFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg5LVxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDEtXFx0XFx0cmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSBndWVzdF9tZW1mZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMjpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgPSBndWVzdF9tZW1mZF9vZmZzZXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDMtXFx0fSBlbHNlIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbi0tXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtPTE0PWt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgKz0gJChLVk0pL3BmbmNhY2hlLm9cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTU6a3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgKz0gJChLVk0pL2d1ZXN0X21lbWZkLm9cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTk5ND1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjYtXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFxcdTAwMjZcXHUwMDI2XFxudmlydC9rdm0va3ZtX21haW4uYzoyMDI3OlxcdCAgICAobWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQgXFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkgfHxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwMjg6XFx0ICAgICBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCArIG1lbS1cXHUwMDNlbWVtb3J5X3NpemUgXFx1MDAzYyBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCkpXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTA3LVxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwODpcXHRcXHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVxcdTAwM2VndWVzdF9tZW1mZCwgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOS1cXHRcXHRpZiAocilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6NDMuMjUzMDY2MzQ4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTM3OTY2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCoqXG5cblJpZ2h0LCBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAuLi4gdGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgdGhlIGBndWVzdF9tZW1mZGAgZnVuY3Rpb25hbGl0eSwgaXNuJ3QgaXQ/IE9rYXksIHNvIHRoYXQncyB3aGVyZSB0byBzdGFydCB0byBzZWUgaG93IGBtZW1mZGAgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIEtWTSBndWVzdC4gTGV0J3MgdHJhY2UgYmFjayBmcm9tIHRoZSBjb25maWcgb3B0aW9uJ3MgZGVmaW5pdGlvbi4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhhdCBzZXQuIFdoZXJlIGV4YWN0bHkgaXMgdGhpcyBvcHRpb24gZGVmaW5lZCwgYW5kIHdoYXQgc3Vycm91bmRpbmcgY29udGV4dCBkb2VzIHRoYXQgZ2l2ZSBtZT8gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGZlZWwgZm9yIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ4NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjQ2LjAwNjg2NTc0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMzMTU3NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6NDcuODQwMDI4MDM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTgwMzEwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fR1VFU1RfTUVNRkQgU2VsZWN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGF0IGNvZGUgcGF0aHMgYXJlIGRlcGVuZGVudCBvbiBpdCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHByZXNlbmNlIG9yIGFic2VuY2U/IEdpdmVuIHRoZSBuYW1lLCBJJ20gYWxyZWFkeSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBLVk0gZ3Vlc3RzLCBzcGVjaWZpY2FsbHkgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIE15IGltbWVkaWF0ZSBtZW50YWwgcHJvY2VzcyBpcyB0byBxdWlja2x5IGRldGVybWluZSB3aGljaCBzeXN0ZW1zIG9yIGNvbXBvbmVudHMgYXJlIGNoZWNraW5nIGZvciB0aGlzIHZhbHVlLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQncyAqc2VsZWN0aW5nKiBpdCDigJMgd2hpY2ggZHJpdmVycywgc3Vic3lzdGVtcywgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgcXVlcnlpbmcgYW5kIG1ha2luZyBkZWNpc2lvbnMgYmFzZWQgb24gYEtWTV9HVUVTVF9NRU1GRGA/IEFyZSB3ZSB0YWxraW5nIGNvbXBpbGUtdGltZSBvcHRpb25zLCBydW50aW1lIGZlYXR1cmVzLCBvciBib3RoPyBJIG5lZWQgdGhlIGJpZyBwaWN0dXJlIHRvIGRldGVybWluZSB3aHkgaXQgaXMgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4Nzg0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6NTEuNjM4MDYyMTMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQzMTMxNDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTo1My40ODExOTk5NTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1MDYwOTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0veDg2IENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgS1ZNX0dVRVNUX01FTUZEYCBnZXRzIGF1dG8tc2VsZWN0ZWQgYnkgYEtWTV9YODZgIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBgWDg2XzY0YC4gVGhhdCBtZWFucyBpdCdzIGVzc2VudGlhbGx5IGFsd2F5cyBlbmFibGVkIG9uIHg4Ni02NCBzeXN0ZW1zLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlc2UgY29uZmlncyBlbmFibGVkOiBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0FNRGAsIGBLVk1gLCBhbmQganVzdCB0byBiZSBzdXJlLCBJJ2xsIHRocm93IGluIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCB0b28uIEl0IG1pZ2h0IG1ha2UgdGVzdGluZyBgZ3Vlc3RfbWVtZmRgIGEgYml0IHNtb290aGVyLCB5b3UgbmV2ZXIga25vdy5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHJldmlldyB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uOiBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCwgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYCwgYW5kIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBhbmQgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2AgbG9vayBhd2Z1bGx5IGdlbmVyaWMuIFNob3VsZG4ndCB0aG9zZSBiZSBkZWZpbmVkIGluIHRoZSBnZW5lcmFsIHg4NiBLVk0gY29kZT8gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXkgYXJlIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIEl0J3MgYWx3YXlzIHRoZSBnZW5lcmljIHN0dWZmIHRoYXQgZ2V0cyB5b3UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjQzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjU4LjMzMTgxMTg2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDU5MDpcXHRpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZGVyKVxcbjEwNTkxOlxcdHtcXG4xMDU5MjpcXHRcXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKGdtZW1fcHJlcGFyZSkoa3ZtLCBwZm4sIGdmbiwgbWF4X29yZGVyKTtcXG4xMDU5MzpcXHR9XFxuMTA1OTQ6XFx0I2VuZGlmXFxuMTA1OTU6XFx0XFxuMTA1OTY6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbjEwNTk3OlxcdHZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbjEwNTk4OlxcdHtcXG4xMDU5OTpcXHRcXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcXG4xMDYwMDpcXHR9XFxuMTA2MDE6XFx0dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4xMDYwMjpcXHR7XFxuMTA2MDM6XFx0XFx0a3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pO1xcbjEwNjA0OlxcdH1cXG4xMDYwNTpcXHQjZW5kaWZcXG4xMDYwNjpcXHQjZW5kaWZcXG4xMDYwNzpcXHRcXG4xMDYwODpcXHR2b2lkIGt2bV9maXh1cF9hbmRfaW5qZWN0X3BmX2Vycm9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MTYgZXJyb3JfY29kZSlcXG4xMDYwOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjU4LjMzMjMyNjQzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU3OTE4ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgZ3Vlc3RfbWVtZmQuY2AgZm9yIEludmFsaWRhdGlvbioqXG5cblllcywgdGhhdCdzIHRoZSBsaWtlbHkgYXJlYS4gV2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSwgc28gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdGFyZ2V0IHRoZSBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFyb3VuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHN0cm9uZyBpbmRpY2F0b3I7IGludmFsaWRhdGlvbiBpcyB1c3VhbGx5IGludm9sdmVkIGluIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdoZW4gS1ZNIGd1ZXN0cyBhcmUgbWlzYmVoYXZpbmcgd2l0aCBtZW1vcnkgYW5kIG1lbWZkcy4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCwgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgaG93IGl0J3MgY2FsbGVkLCBhbmQgd2hhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZXhpc3QuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgaXQgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBwcm9ibGVtLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo0MDowMS4zOTAyNDgyMjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0XFx0aWYgKCFmb3VuZF9tZW1zbG90KSB7XFxuIDE4MTpcXHRcXHRcXHRcXHRmb3VuZF9tZW1zbG90ID0gdHJ1ZTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0XFx0XFx0S1ZNX01NVV9MT0NLKGt2bSk7XFxuIDE4NDpcXHRcXHRcXHRcXHRrdm1fbW11X2ludmFsaWRhdGVfc3RhcnQoa3ZtKTtcXG4gMTg1OlxcdFxcdFxcdH1cXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0XFx0Zmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcXHUwMDI2Z2ZuX3JhbmdlKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxOTA6XFx0XFx0XFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXFx1MDAyNmdmbl9yYW5nZSk7XFxuIDE5MTpcXHQjZW5kaWZcXG4gMTkyOlxcdFxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0aWYgKGZsdXNoKVxcbiAxOTU6XFx0XFx0XFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdGlmIChmb3VuZF9tZW1zbG90KVxcbiAxOTg6XFx0XFx0XFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcXG4gMTk5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NDA6MDEuMzkwMzM5MzgxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjA4ODE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFNFVi1TTlAgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGZyb20gYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAuIFRoaXMgbWFrZXMgaXQgcmVhY2hhYmxlIGFuZCwgY3JpdGljYWxseSwgdGVzdGFibGUuIEdvb2QuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoIGFuZCBzdW1tYXJpemUgd2hhdCB3ZSd2ZSBnb3QuXG5cblRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6XG5cbi0gICBgX19zZXZfc25wX3JlbG9hZF92bXNhYFxuLSAgIGBzZXZfc25wX3JlbG9hZF92bXNhYFxuLSAgIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYFxuLSAgIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYFxuLSAgIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgXG4tICAgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2Bcbi0gICBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWBcblxuQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2A6XG5cbi0gICBgS1ZNX0FNRF9TRVZgXG4tICAgYEtWTV9BTURgXG4tICAgYEtWTWBcbi0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWBcblxuVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIEtWTSdzIEFNRCBTRVYtU05QIFZNU0EgaGFuZGxpbmcgYW5kIGd1ZXN0XFxfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCdzIHRvdWNoaW5nIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgZ3Vlc3RcXF9tZW1mZCBpcyBpbnZhbGlkYXRlZC4gVGhpcyBpbnZhbGlkYXRpb24gY2FuIGhhcHBlbiB0aHJvdWdoIG9wZXJhdGlvbnMgbGlrZSBgZmFsbG9jYXRlIHB1bmNoIGhvbGVgLCBhbmQgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgKnJlYWNoYWJsZSogZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0XFxfbWVtZmQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGFuIGlkZWFsIHdheSB0byBleGVyY2lzZSB0aGlzIGNvZGUuXG5cbkEgc2xpZ2h0IGNvbmNlcm7igJRkbyBJIGluY2x1ZGUgYEtWTV9TV19QUk9URUNURURfVk1gPyBJIHRoaW5rIGl0IG1pZ2h0IGJlIHdvcnRoIGl0LiBJdCBjb3VsZCBwb3RlbnRpYWxseSBoZWxwIHN5emthbGxlciBmdXp6IGBndWVzdF9tZW1mZGAgd2l0aG91dCBuZWNlc3NhcmlseSBuZWVkaW5nIFNFVi1TTlAgaGFyZHdhcmUgcHJlc2VudC4gWWVzLCB0aGUgc3BlY2lmaWMgU0VWLVNOUCBjYWxsYmFja3Mgd29uJ3QgdHJpZ2dlciBpbiB0aGF0IHNjZW5hcmlvLCBidXQgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgZ2VuZXJpYyBLVk0gY29kZSBsaWtlIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYC4gU28sIGl0J3MgYSBnb29kIGNvdmVyYWdlIGVuaGFuY2VtZW50LlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCBjb21wbGV0ZSwgdGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyB0b29sIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg1OCwiT3V0cHV0VG9rZW5zIjoyNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo0MDowOS4yNTEyMjQzMzdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzIyMzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwic2V2X2dtZW1fZnJlZV9mb2xpb1wiLFxuICAgIFwia3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9cIixcbiAgICBcInNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Nldl9zbnBfcmVsb2FkX3Ztc2FcIixcbiAgICBcInNldl9zbnBfcmVsb2FkX3Ztc2FcIixcbiAgICBcInNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VcIixcbiAgICBcInNldl9nbWVtX2ZyZWVfZm9saW9cIixcbiAgICBcImt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvXCIsXG4gICAgXCJzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgaGFuZGxpbmcgb2YgQU1EIFNFVi1TTlAgVk1TQSAoVmlydHVhbCBNYWNoaW5lIFNhdmUgQXJlYSkgYW5kIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIHJlbG9hZCBWTVNBIHBhZ2VzIHdoZW4gdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgaXMgaW52YWxpZGF0ZWQgKGUuZy4sIHZpYSBmYWxsb2NhdGUgcHVuY2ggaG9sZSkgYW5kIGNoYW5nZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBLVk0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3RfbWVtZmQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 22:31:44 +0000 UTC FinishedAt: 2026-06-25 22:40:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV", "KVM_AMD", "KVM", "KVM_SW_PROTECTED_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD_SEV", "KVM_AMD", "KVM", "KVM_SW_PROTECTED_VM" ], "series_id": "3cb5e47c-af5f-4829-8f10-5c590ecb8245" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "__sev_snp_reload_vmsa", "sev_snp_reload_vmsa", "sev_gmem_invalidate_range", "sev_gmem_free_folio", "kvm_arch_gmem_invalidate_range", "kvm_arch_gmem_free_folio", "sev_snp_init_protected_guest_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X3NucF9yZWxvYWRfdm1zYSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3Nldl9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzZiMDQwNjY0NWYyZjhiNmIyNzg5OTEyZmZmNmJiZWEzZDU4ZmIzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDIyOjM4OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uZmQwODQ1NGM3NTUzNjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtMTM0LDYgJiM0MzsxMzQsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMKG1lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChndWVzdF9tZW1vcnlfcmVjbGFpbWVkKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKHJlbG9hZF92bXNhKVxuIEtWTV9YODZfT1AoZ2V0X2ZlYXR1cmVfbXNyKVxuIEtWTV9YODZfT1AoY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbilcbiBLVk1fWDg2X09QKGFwaWNfaW5pdF9zaWduYWxfYmxvY2tlZClcbkBAIC0xNDUsOSAmIzQzOzE0NiwxNCBAQCBLVk1fWDg2X09QKHZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcilcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcbiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKVxuJiM0MzsjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSlcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ZyZWVfZm9saW8pXG4mIzQzOyNlbmRpZlxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKVxuLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxuICNlbmRpZlxuIFxuICN1bmRlZiBLVk1fWDg2X09QXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xMjIsNiAmIzQzOzEyMiw4IEBAXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzEsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4gI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxuJiM0MzsjZGVmaW5lIEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCBcXFxuJiM0MztcdEtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfVVBEQVRFX1BST1RFQ1RFRF9HVUVTVF9TVEFURSBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDM0LCBLVk1fUkVRVUVTVF9XQUlUKVxuIFxuQEAgLTE4NzgsNiAmIzQzOzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0aW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0aW50ICgqdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpO1xuIFx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO1x0dm9pZCAoKnJlbG9hZF92bXNhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIFx0aW50ICgqZ2V0X2ZlYXR1cmVfbXNyKSh1MzIgbXNyLCB1NjQgKmRhdGEpO1xuIFxuQEAgLTE5MDAsOCAmIzQzOzE5MDMsMTMgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcbiBcdGd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFx0dm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XG4tXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuJiM0MztcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7XHR2b2lkICgqZ21lbV9mcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7I2VuZGlmXG4gXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNzRmYjE1NTUxZTgzZmEuLjdlMDZlZDE2ZjQ3NDYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM5NzksMzAgJiM0MzszOTc5LDIxIEBAIHN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiBzbnBfZG9fcHNjKHN2bSk7XG4gfVxuIFxuLS8qXG4tICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxuLSAqL1xuLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MztzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdGt2bV9wZm5fdCBwZm47XG4tXHRnZm5fdCBnZm47XG4tXG4tXHRndWFyZChtdXRleCkoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG4tXG4tXHRpZiAoIXN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xuIFxuLVx0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xuLVx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuIFxuLVx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovXG4mIzQzO1x0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBLiAqL1xuIFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gSU5WQUxJRF9QQUdFO1xuJiM0MztcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFxuIFx0LypcbiBcdCAqIFdoZW4gcmVwbGFjaW5nIHRoZSBWTVNBIGR1cmluZyBTRVYtU05QIEFQIGNyZWF0aW9uLFxuQEAgLTQwMTAsMTYgJiM0Mzs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICovXG4gXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cdTAwM2V2bWNiKTtcbiBcbi1cdGlmICghVkFMSURfUEFHRShzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB0aGUgVk1TQSB3aWxsIGFsd2F5cyBiZSBhIGd1ZXN0LW1hcHBlZCBwYWdlXG4mIzQzO1x0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVx1MDAzZXNldl9lcy52bXNhLiBJblxuJiM0MztcdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUmIzM5O2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0XG4mIzQzO1x0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxuJiM0MztcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4mIzQzO1x0ICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aFxuJiM0MztcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlO1xuIFxuLVx0Z2ZuID0gZ3BhX3RvX2dmbihzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSk7XG4tXHRzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiYjNDM7XHRpZiAoIVZBTElEX1BBR0UoZ3BhKSlcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdHNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVx1MDAzZWt2bSwgZ2ZuKTtcbiBcdGlmICghc2xvdClcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG5AQCAtNDAyNywyOSAmIzQzOzQwMjksNjQgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0cmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHQvKlxuLVx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2Vcbi1cdCAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS1cdTAwM2VzZXZfZXMudm1zYS4gSW5cbi1cdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUmIzM5O2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0XG4tXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXG4tXHQgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzb1xuLVx0ICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aFxuLVx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cbiYjNDM7XHQgKiBTYXZlIHRoZSBndWVzdC1wcm92aWRlZCBHUEEuICBJZiByZXRyeSBpcyBuZWVkZWQsIHRoZW4gS1ZNIHdpbGwgdHJ5XG4mIzQzO1x0ICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvXG4mIzQzO1x0ICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlXG4mIzQzO1x0ICogZm9yIHRoZSBHUEEgaXMgaW52YWxpZGF0ZWQuXG4gXHQgKi9cbi1cdHN2bS1cdTAwM2VzZXZfZXMuc25wX2hhc19ndWVzdF92bXNhID0gdHJ1ZTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTtcbiYjNDM7XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4mIzQzO1x0cmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiYjNDM7XHRncGFfdCBncGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTtcbiYjNDM7XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuLVx0LyogVXNlIHRoZSBuZXcgVk1TQSAqL1xuLVx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xuJiM0MztcdGdwYSA9IHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGE7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbi1cdC8qIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgKi9cbi1cdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcbiYjNDM7XHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgZ3BhKTtcbiBcbiBcdC8qXG4tXHQgKiBnbWVtIHBhZ2VzIGFyZW4mIzM5O3QgY3VycmVudGx5IG1pZ3JhdGFibGUsIGJ1dCBpZiB0aGlzIGV2ZXIgY2hhbmdlc1xuLVx0ICogdGhlbiBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBlbnN1cmUgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGlzIHBpbm5lZFxuLVx0ICogdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLlxuJiM0MztcdCAqIE1hcmsgdGhlIHZDUFUgYXMgcnVubmFibGUgZm9yIENSRUFURSByZXF1ZXN0cywgaW5kaWNhdGVkIGJ5IGEgdmFsaWRcbiYjNDM7XHQgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGxcbiYjNDM7XHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXG4mIzQzO1x0ICogdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgcGFnZSBpcyB1bmF2YWlsYWJsZS5cbiBcdCAqL1xuLVx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbiYjNDM7XHRpZiAoVkFMSURfUEFHRShncGEpKVxuJiM0MztcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlICpzZXZfZXMgPSBcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2c2V2X2VzLVx1MDAzZXNucF92bXNhX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIHNldl9lcy1cdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtNDEwNSwxMCAmIzQzOzQxNDIsMTAgQEAgc3RhdGljIGludCBzZXZfc25wX2FwX2NyZWF0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG4tXHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XG4mIzQzO1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOlxuLVx0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4mIzQzO1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR2Y3B1X3VuaW1wbCh2Y3B1LCBcJiMzNDt2bWdleGl0OiBpbnZhbGlkIEFQIGNyZWF0aW9uIHJlcXVlc3QgWyUjeF0gZnJvbSBndWVzdFxcblwmIzM0OyxcbkBAIC00NzkxLDYgJiM0Mzs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3ZtLVx1MDAzZXNldl9lcy52bXNhID0gcGFnZV9hZGRyZXNzKHZtc2FfcGFnZSk7XG4mIzQzO1x0c3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiYjNDM7XHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSk7XG4gXG5AQCAtNTExNSw5ICYjNDM7NTE1NCwzNiBAQCBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcilcbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuIHVuc3RhYmxlIHJlc3VsdCBmb3IgXCYjMzQ7aXMgU05QXCYjMzQ7IGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxuJiM0MztcdCAqIFRoZSB2Q1BVJiMzOTtzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGVcbiYjNDM7XHQgKiB0byBvdGhlciB0YXNrcywgYW5kIGNhbiBvbmx5IGJlY29tZSB2YWxpZCB3aGlsZSBob2xkaW5nIG1tdV9sb2NrLFxuJiM0MztcdCAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4mIzQzO1x0XHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoVkFMSURfUEFHRShncGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2U9IHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kKVxuJiM0MztcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4tdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdGt2bV9wZm5fdCBzdGFydCA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbiYjNDM7XHRrdm1fcGZuX3QgZW5kID0gc3RhcnQgJiM0MzsgKDF1bCBcdTAwM2NcdTAwM2MgZm9saW9fb3JkZXIoZm9saW8pKTtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXG4gXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NDQ1LDYgJiM0Mzs1NDQ1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4gXHQubWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uLFxuIFx0Lmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCxcbiYjNDM7XHQucmVsb2FkX3Ztc2EgPSBzZXZfc25wX3JlbG9hZF92bXNhLFxuIFxuIFx0LnZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20sXG4gXHQudm1fbW92ZV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSxcbkBAIC01NDYwLDkgJiM0Mzs1NDYxLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LnZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyA9IGF2aWNfdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zLFxuIFx0LmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLFxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4gXHQuZ21lbV9wcmVwYXJlID0gc2V2X2dtZW1fcHJlcGFyZSxcbi1cdC5nbWVtX2ludmFsaWRhdGUgPSBzZXZfZ21lbV9pbnZhbGlkYXRlLFxuJiM0MztcdC5nbWVtX2ludmFsaWRhdGVfcmFuZ2UgPSBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlLFxuJiM0MztcdC5nbWVtX2ZyZWVfZm9saW8gPSBzZXZfZ21lbV9mcmVlX2ZvbGlvLFxuIFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCxcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uYzdlY2M1ZmNhNjg5YjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMjcxLDcgJiM0MzsyNzEsOCBAQCBzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUge1xuIFx0dTY0IGdoY2JfcmVnaXN0ZXJlZF9ncGE7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggc25wX3Ztc2FfbXV0ZXg7IC8qIFVzZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgdXBkYXRlcyBvZiBWTVNBLiAqL1xuLVx0Z3BhX3Qgc25wX3Ztc2FfZ3BhO1xuJiM0MztcdGdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhO1xuJiM0MztcdGdwYV90IHNucF9ndWVzdF92bXNhX2dwYTtcbiBcdGJvb2wgc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0O1xuIFx0Ym9vbCBzbnBfaGFzX2d1ZXN0X3Ztc2E7XG4gfTtcbkBAIC05OTUsNiAmIzQzOzk5Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcbiB7XG4gXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIH1cbiYjNDM7dm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuQEAgLTEwMDgsNyAmIzQzOzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfc2V2X2FzaWQ7XG4gdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xuIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbiYjNDM7dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7XG5AQCAtMTAzOCw3ICYjNDM7MTA0MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGluXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSlcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODE2Nyw2ICYjNDM7ODE2Nyw4IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpKVxuJiM0MztcdFx0XHRrdm1feDg2X2NhbGwocmVsb2FkX3Ztc2EpKHZjcHUpO1xuIFx0fVxuIFxuIFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8XG5AQCAtMTA1OTIsOSAmIzQzOzEwNTk0LDEzIEBAIGludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4ge1xuLVx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZSkoc3RhcnQsIGVuZCk7XG4mIzQzO1x0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XG4mIzQzO31cbiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTtcbiB9XG4gI2VuZGlmXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uNmI3Zjg4MDE1MDVkNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI2MDcsNyAmIzQzOzI2MDcsOCBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4mIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCA4NjY5MDY4M2IyZmUzZS4uOGVjNTA0MTkzNGRiY2YgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtMTg1LDYgJiM0MzsxODUsMTAgQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0Zmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZnZm5fcmFuZ2UpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuJiM0MztcdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbiYjNDM7I2VuZGlmXG4gXHR9XG4gXG4gXHRpZiAoZmx1c2gpXG5AQCAtNTIzLDIzICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9sXG4gXHRyZXR1cm4gTUZfREVMQVlFRDtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuLXN0YXRpYyB2b2lkIGt2bV9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApO1xuLVx0a3ZtX3Bmbl90IHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuLVx0aW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuLVxuLVx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKHBmbiwgcGZuICYjNDM7ICgxdWwgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4tfVxuLSNlbmRpZlxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGt2bV9nbWVtX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyxcbiBcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tXHQuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sXG4mIzQzO1x0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXG4gI2VuZGlmXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7c2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgQU1EIFNFVi1TTlAgVk1TQSAoVmlydHVhbCBNYWNoaW5lIFNhdmUgQXJlYSkgYW5kIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIHJlbG9hZCBWTVNBIHBhZ2VzIHdoZW4gdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgaXMgaW52YWxpZGF0ZWQgKGUuZy4sIHZpYSBmYWxsb2NhdGUgcHVuY2ggaG9sZSkgYW5kIGNoYW5nZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBLVk0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3RfbWVtZmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzZiMDQwNjY0NWYyZjhiNmIyNzg5OTEyZmZmNmJiZWEzZDU4ZmIzNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDIyOjM4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKaW5kZXggODNkYzUwODYxMzhiMzkuLmZkMDg0NTRjNzU1MzY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKQEAgLTEzNCw2ICYjNDM7MTM0LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChtZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uKQogS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pCiBLVk1fWDg2X09QX09QVElPTkFMKHZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSkKIEtWTV9YODZfT1BfT1BUSU9OQUwoZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKHJlbG9hZF92bXNhKQogS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpCiBLVk1fWDg2X09QKGNoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24pCiBLVk1fWDg2X09QKGFwaWNfaW5pdF9zaWduYWxfYmxvY2tlZCkKQEAgLTE0NSw5ICYjNDM7MTQ2LDE0IEBAIEtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7CiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKQogS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSkKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFCiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9wcmVwYXJlKQomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbykKJiM0MzsjZW5kaWYKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKQotS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpCiAjZW5kaWYKIAogI3VuZGVmIEtWTV9YODZfT1AKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xMjIsNiAmIzQzOzEyMiw4IEBACiAJS1ZNX0FSQ0hfUkVRX0ZMQUdTKDMxLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKQogI2RlZmluZSBLVk1fUkVRX0hWX1RMQl9GTFVTSCBcCiAJS1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKQomIzQzOyNkZWZpbmUgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEIFwKJiM0MzsJS1ZNX0FSQ0hfUkVRX0ZMQUdTKDMzLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKQogI2RlZmluZSBLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUgXAogCUtWTV9BUkNIX1JFUV9GTEFHUygzNCwgS1ZNX1JFUVVFU1RfV0FJVCkKIApAQCAtMTg3OCw2ICYjNDM7MTg4MCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJaW50ICgqdm1fY29weV9lbmNfY29udGV4dF9mcm9tKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpOwogCWludCAoKnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKTsKIAl2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTsKJiM0MzsJdm9pZCAoKnJlbG9hZF92bXNhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJaW50ICgqZ2V0X2ZlYXR1cmVfbXNyKSh1MzIgbXNyLCB1NjQgKmRhdGEpOwogCkBAIC0xOTAwLDggJiM0MzsxOTAzLDEzIEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAKIAlndmFfdCAoKmdldF91bnRhZ2dlZF9hZGRyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAl2b2lkICooKmFsbG9jX2FwaWNfYmFja2luZ19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkUKIAlpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTsKLQl2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKJiM0MzsJdm9pZCAoKmdtZW1faW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzOwl2b2lkICgqZ21lbV9mcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MzsjZW5kaWYKIAlpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA3NGZiMTU1NTFlODNmYS4uN2UwNmVkMTZmNDc0NjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtMzk3OSwzMCAmIzQzOzM5NzksMjEgQEAgc3RhdGljIGludCBzbnBfYmVnaW5fcHNjKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCXJldHVybiBzbnBfZG9fcHNjKHN2bSk7CiB9CiAKLS8qCi0gKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuCi0gKi8KLXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWt2bV9wZm5fdCBwZm47Ci0JZ2ZuX3QgZ2ZuOwotCi0JZ3VhcmQobXV0ZXgpKCZhbXA7c3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpOwotCi0JaWYgKCFzdm0tJmd0O3Nldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpCi0JCXJldHVybjsKLQotCXN2bS0mZ3Q7c2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlOwogCi0JLyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi8KLQl2Y3B1LSZndDthcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7Ci0Ja3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKIAotCS8qIENsZWFyIHVzZSBvZiB0aGUgVk1TQSAqLwomIzQzOwkvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EuICovCiAJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7CiYjNDM7CXN2bS0mZ3Q7c2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKIAogCS8qCiAJICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sCkBAIC00MDEwLDE2ICYjNDM7NDAwMSwyNyBAQCBzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKi8KIAl2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS0mZ3Q7dm1jYik7CiAKLQlpZiAoIVZBTElEX1BBR0Uoc3ZtLSZndDtzZXZfZXMuc25wX3Ztc2FfZ3BhKSkKLQkJcmV0dXJuOwomIzQzOwkvKgomIzQzOwkgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZQomIzQzOwkgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tJmd0O3Nldl9lcy52bXNhLiBJbgomIzQzOwkgKiB0aGVvcnksIHN2bS0mZ3Q7c2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSYjMzk7ZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXQKJiM0MzsJICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZQomIzQzOwkgKiBoYW5kbGVkIGR1cmluZyB0ZWFyZG93biByYXRoZXIgdGhhbiBndWVzdCBib290LiAgRGVmZXJyaW5nIHRoYXQgYWxzbwomIzQzOwkgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoCiYjNDM7CSAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlOwogCi0JZ2ZuID0gZ3BhX3RvX2dmbihzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9ncGEpOwotCXN2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJaWYgKCFWQUxJRF9QQUdFKGdwYSkpCiYjNDM7CQlyZXR1cm47CiAKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0mZ3Q7a3ZtLCBnZm4pOwogCWlmICghc2xvdCkKIAkJcmV0dXJuOwogCiYjNDM7CW1tdV9zZXEgPSBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwogCS8qCiAJICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGUKIAkgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLgpAQCAtNDAyNywyOSAmIzQzOzQwMjksNjQgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpKQogCQlyZXR1cm47CiAKJiM0MzsJcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAJLyoKLQkgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZQotCSAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS0mZ3Q7c2V2X2VzLnZtc2EuIEluCi0JICogdGhlb3J5LCBzdm0tJmd0O3Nldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUmIzM5O2QgYW5kIGNsZWFuZWQgdXAgaGVyZSwgYnV0Ci0JICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZQotCSAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvCi0JICogYWxsb3dzIHRoZSBleGlzdGluZyBsb2dpYyBmb3IgU0VWLUVTIFZNU0FzIHRvIGJlIHJlLXVzZWQgd2l0aAotCSAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuCiYjNDM7CSAqIFNhdmUgdGhlIGd1ZXN0LXByb3ZpZGVkIEdQQS4gIElmIHJldHJ5IGlzIG5lZWRlZCwgdGhlbiBLVk0gd2lsbCB0cnkKJiM0MzsJICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvCiYjNDM7CSAqIHRyYWNrIHRoZSBHUEEgc28gdGhhdCB0aGUgVk1TQSBjYW4gYmUgcmVsb2FkZWQgaWYgdGhlIGJhY2tpbmcgcGFnZQomIzQzOwkgKiBmb3IgdGhlIEdQQSBpcyBpbnZhbGlkYXRlZC4KIAkgKi8KLQlzdm0tJmd0O3Nldl9lcy5zbnBfaGFzX2d1ZXN0X3Ztc2EgPSB0cnVlOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGEgPSBncGE7CiYjNDM7CWlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpOwomIzQzOwllbHNlCiYjNDM7CQlzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTsKJiM0MzsJcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsJZ3BhX3QgZ3BhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7CiYjNDM7CiYjNDM7CWlmICghc3ZtLSZndDtzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi8KJiM0MzsJdmNwdS0mZ3Q7YXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlOwomIzQzOwlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpOwogCi0JLyogVXNlIHRoZSBuZXcgVk1TQSAqLwotCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwomIzQzOwlncGEgPSBzdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTsKJiM0MzsJc3ZtLSZndDtzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7CiAKLQkvKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlICovCi0Ja3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpOwomIzQzOwlfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgZ3BhKTsKIAogCS8qCi0JICogZ21lbSBwYWdlcyBhcmVuJiMzOTt0IGN1cnJlbnRseSBtaWdyYXRhYmxlLCBidXQgaWYgdGhpcyBldmVyIGNoYW5nZXMKLQkgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tJmd0O3Nldl9lcy52bXNhIGlzIHBpbm5lZAotCSAqIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4KJiM0MzsJICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZAomIzQzOwkgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGwKJiM0MzsJICogZmFpbCBpbnN0ZWFkIG9mIGJsb2NraW5nIGluZGVmaW5pdGVseSBhbmQgaGFuZ2luZyB0aGUgdkNQVSwgZS5nLiBpZgomIzQzOwkgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLgogCSAqLwotCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CiYjNDM7CWlmIChWQUxJRF9QQUdFKGdwYSkpCiYjNDM7CQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgKnNldl9lcyA9ICZhbXA7dG9fc3ZtKHZjcHUpLSZndDtzZXZfZXM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3Nldl9lcy0mZ3Q7c25wX3Ztc2FfbXV0ZXgpOwomIzQzOwomIzQzOwlfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLSZndDtzbnBfZ3Vlc3Rfdm1zYV9ncGEpOwogfQogCiBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCkBAIC00MTA1LDEwICYjNDM7NDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXRhcmdldF9zdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9ncGEgPSBzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wuZXhpdF9pbmZvXzI7CiYjNDM7CQl0YXJnZXRfc3ZtLSZndDtzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBzdm0tJmd0O3ZtY2ItJmd0O2NvbnRyb2wuZXhpdF9pbmZvXzI7CiAJCWJyZWFrOwogCWNhc2UgU1ZNX1ZNR0VYSVRfQVBfREVTVFJPWToKLQkJdGFyZ2V0X3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJCXRhcmdldF9zdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdmNwdV91bmltcGwodmNwdSwgJiMzNDt2bWdleGl0OiBpbnZhbGlkIEFQIGNyZWF0aW9uIHJlcXVlc3QgWyUjeF0gZnJvbSBndWVzdFxuJiMzNDssCkBAIC00NzkxLDYgJiM0Mzs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3ZtLSZndDtzZXZfZXMudm1zYSA9IHBhZ2VfYWRkcmVzcyh2bXNhX3BhZ2UpOwomIzQzOwlzdm0tJmd0O3Nldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTsKJiM0MzsJc3ZtLSZndDtzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFOwogCiAJdmNwdS0mZ3Q7YXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LSZndDtrdm0pOwogCkBAIC01MTE1LDkgJiM0Mzs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKQogCiAJcmV0dXJuIDA7CiB9CiYjNDM7dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciAmIzM0O2lzIFNOUCYjMzQ7IGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLgomIzQzOwkgKiBUaGUgdkNQVSYjMzk7cyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlCiYjNDM7CSAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssCiYjNDM7CSAqIGFmdGVyIHRoZSBWTSBpcyBmdWxseSBjb21taXR0ZWQgdG8gYmVpbmcgYW4gU05QIFZNLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKJiM0MzsJCWdwYV90IGdwYSA9IHRvX3N2bSh2Y3B1KS0mZ3Q7c2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYTsKJiM0MzsKJiM0MzsJCWlmIChWQUxJRF9QQUdFKGdwYSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGdwYV90b19nZm4oZ3BhKSAmZ3Q7PSByYW5nZS0mZ3Q7c3RhcnQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGdwYV90b19nZm4oZ3BhKSAmbHQ7IHJhbmdlLSZndDtlbmQpCiYjNDM7CQkJa3ZtX21ha2VfcmVxdWVzdF9hbmRfa2ljayhLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpOwomIzQzOwl9CiYjNDM7fQogCi12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQomIzQzO3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlrdm1fcGZuX3Qgc3RhcnQgPSBwYWdlX3RvX3Bmbihmb2xpb19wYWdlKGZvbGlvLCAwKSk7CiYjNDM7CWt2bV9wZm5fdCBlbmQgPSBzdGFydCAmIzQzOyAoMXVsICZsdDsmbHQ7IGZvbGlvX29yZGVyKGZvbGlvKSk7CiAJa3ZtX3Bmbl90IHBmbjsKIAogCWlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC01NDQ1LDYgJiM0Mzs1NDQ1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLm1lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uLAogCS5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sCiAJLmd1ZXN0X21lbW9yeV9yZWNsYWltZWQgPSBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCwKJiM0MzsJLnJlbG9hZF92bXNhID0gc2V2X3NucF9yZWxvYWRfdm1zYSwKIAogCS52bV9jb3B5X2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fY29weV9lbmNfY29udGV4dF9mcm9tLAogCS52bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tLApAQCAtNTQ2MCw5ICYjNDM7NTQ2MSwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkudmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zID0gYXZpY192Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMsCiAJLmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLAogCiYjNDM7I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVgogCS5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLAotCS5nbWVtX2ludmFsaWRhdGUgPSBzZXZfZ21lbV9pbnZhbGlkYXRlLAomIzQzOwkuZ21lbV9pbnZhbGlkYXRlX3JhbmdlID0gc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSwKJiM0MzsJLmdtZW1fZnJlZV9mb2xpbyA9IHNldl9nbWVtX2ZyZWVfZm9saW8sCiAJLmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCwKJiM0MzsjZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCA3MTZiZTIxZmJhMzM1NC4uYzdlY2M1ZmNhNjg5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtMjcxLDcgJiM0MzsyNzEsOCBAQCBzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUgewogCXU2NCBnaGNiX3JlZ2lzdGVyZWRfZ3BhOwogCiAJc3RydWN0IG11dGV4IHNucF92bXNhX211dGV4OyAvKiBVc2VkIHRvIGhhbmRsZSBjb25jdXJyZW50IHVwZGF0ZXMgb2YgVk1TQS4gKi8KLQlncGFfdCBzbnBfdm1zYV9ncGE7CiYjNDM7CWdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhOwomIzQzOwlncGFfdCBzbnBfZ3Vlc3Rfdm1zYV9ncGE7CiAJYm9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7CiAJYm9vbCBzbnBfaGFzX2d1ZXN0X3Ztc2E7CiB9OwpAQCAtOTk1LDYgJiM0Mzs5OTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpCiB7CiAJcmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIH0KJiM0Mzt2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CkBAIC0xMDA4LDcgJiM0MzsxMDEwLDggQEAgaW50IHNldl9kZXZfZ2V0X2F0dHIodTMyIGdyb3VwLCB1NjQgYXR0ciwgdTY0ICp2YWwpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfc2V2X2FzaWQ7CiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7CiBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7Ci12b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTsKJiM0Mzt2b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzO3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7CiBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpOwpAQCAtMTAzOCw3ICYjNDM7MTA0MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGluCiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpIHt9CiBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCAwNjI2ZTgzNWU5ZWI3Ny4uOWRmNmFjZjlhOTgyZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTgxNjcsNiAmIzQzOzgxNjcsOCBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiYjNDM7CQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KSkKJiM0MzsJCQlrdm1feDg2X2NhbGwocmVsb2FkX3Ztc2EpKHZjcHUpOwogCX0KIAogCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KSB8fCByZXFfaW50X3dpbiB8fApAQCAtMTA1OTIsOSAmIzQzOzEwNTk0LDEzIEBAIGludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURQotdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQomIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogewotCWt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGUpKHN0YXJ0LCBlbmQpOwomIzQzOwlrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTsKJiM0Mzt9CiYjNDM7dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTsKIH0KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLjZiN2Y4ODAxNTA1ZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yNjA3LDcgJiM0MzsyNjA3LDggQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYywKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwomIzQzO3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTsKJiM0Mzt2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IDg2NjkwNjgzYjJmZTNlLi44ZWM1MDQxOTM0ZGJjZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC0xODUsNiAmIzQzOzE4NSwxMCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGdtZW1fZmlsZSAqZiwgcGdvZmZfdCBzdGFydCwKIAkJfQogCiAJCWZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgJmFtcDtnZm5fcmFuZ2UpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEUKJiM0MzsJCWt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sICZhbXA7Z2ZuX3JhbmdlKTsKJiM0MzsjZW5kaWYKIAl9CiAKIAlpZiAoZmx1c2gpCkBAIC01MjMsMjMgJiM0Mzs1MjcsMTIgQEAgc3RhdGljIGludCBrdm1fZ21lbV9lcnJvcl9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2wKIAlyZXR1cm4gTUZfREVMQVlFRDsKIH0KIAotI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURQotc3RhdGljIHZvaWQga3ZtX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7Ci0Ja3ZtX3Bmbl90IHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwotCWludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKLQotCWt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShwZm4sIHBmbiAmIzQzOyAoMXVsICZsdDsmbHQ7IG9yZGVyKSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMga3ZtX2dtZW1fYW9wcyA9IHsKIAkuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLAogCS5taWdyYXRlX2ZvbGlvCT0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbywKIAkuZXJyb3JfcmVtb3ZlX2ZvbGlvID0ga3ZtX2dtZW1fZXJyb3JfZm9saW8sCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFCi0JLmZyZWVfZm9saW8gPSBrdm1fZ21lbV9mcmVlX2ZvbGlvLAomIzQzOwkuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbywKICNlbmRpZgogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIEtWTSwgc3BlY2lmaWNhbGx5IEFNRCBTRVYtU05QIHN1cHBvcnQsIGFuZCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMsIGl0IHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBgZ3Vlc3RfbWVtZmRgIGFuZCBWTVNBIGhhbmRsaW5nLiBOZXcgS1ZNIHJlcXVlc3QsIGBLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQURgLCBpcyBhZGRlZC4gVGhlcmUgYXJlIGNoYW5nZXMgdG8gYGdtZW1faW52YWxpZGF0ZWAsIGBnbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBgZ21lbV9mcmVlX2ZvbGlvYC4gVGhlcmUgYXJlIGFsc28gbW9kaWZpY2F0aW9ucyB0byBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgYW5kIGEgbmV3IGZ1bmN0aW9uLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAuIFRoZSBjb2RlIGlzIGFsc28gY2hhbmdpbmcgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZWAgdG8gYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBldmVuIGJlIHJlYWNoZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCYjMzk7cyBydW5uYWJsZSBpbiBzb21ldGhpbmcgbGlrZSBHQ0Ugb3IgUUVNVS4gU0VWLVNOUCYjMzk7cyBhIGJpdCB0cmlja3ksIHNpbmNlIGl0IHJlcXVpcmVzIHNwZWNpZmljIEFNRCBoYXJkd2FyZSAoRVBZQyB3aXRoIFNFVi1TTlAgc3VwcG9ydCkuIEJ1dCBldmVuIGlmIHRoZSBWTXMgY2FuJiMzOTt0IGJlIHJ1biBpbiBhIGdpdmVuIHRlc3Qgc2V0dXAsIG9mdGVuIEtWTSBjb2RlIGlzIHN0aWxsIGZ1enphYmxlIGlmIHRoZSByZWxldmFudCBpb2N0bHMgYXJlIHJlYWNoYWJsZSwgb3IgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtb2NrIHRoZSBzZXR1cC4gU0VWLVNOUCBpcyBhIGJpdCBkaWZmZXJlbnQgYmVjYXVzZSBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBydW4gdGhlIFZNcywgYnV0IHNvbWUgaW9jdGxzICptaWdodCogYmUgcmVhY2hhYmxlLgoKV2FpdCBhIHNlY29uZC4gSSBrbm93IFN5emthbGxlciBoZWF2aWx5IGZ1enplcyBLVk0uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgYWxyZWFkeSBoYW5kbGVkLiBMZXQgbWUgY2hlY2sgZm9yIGBDT05GSUdfS1ZNX0FNRF9TRVZgIGluIHRoZSBwYXRjaC4gWWVwLCBpdCBpcy4gVGltZSB0byB2ZXJpZnkgYnkgbG9va2luZyBpbiB0aGUga2VybmVsJiMzOTtzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gQW5kIGxldCYjMzk7cyB1c2UgYGdyZXBwZXJgIHRvIGJlIHN1cmUgdG8gZmluZCBhbGwgaW5zdGFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EX1NFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWNlbnQgS1ZNL1NFVi1TTlAgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb24gY2hhbmdlcyBhbmQgc2VlIHdoYXQgdGhleSB0ZWxsIHVzLiBJIHNlZSBhIHNlcmllcyBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQ6IGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCwgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AsIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCBhbmQgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZWlyIHJlYWNoYWJpbGl0eSBhbmQgY29udGV4dC4KClJpZ2h0LCBzbyBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGBzdm1fdmNwdV9yZXNldGAgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGR1cmluZyBhbiBpbml0aWFsaXphdGlvbiBldmVudC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBzZWVtcyB0byBiZSBjb21pbmcgZnJvbSBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIEFoLCBhbmQgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAgaXRzZWxmIGlzIHRyaWdnZXJlZCB3aGVuIGEgZ3Vlc3QgbWVtZmQgZ2V0cyBpbnZhbGlkYXRlZCwgbGlrZWx5IHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYGZhbGxvY2F0ZSAtLXB1bmNoLWhvbGVgLiBBbmQgZmluYWxseSwgYHNldl9nbWVtX2ZyZWVfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGBrdm1fZ21lbV9mcmVlX2ZvbGlvYCwgYWxzbyBpbiB0aGUgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgIGZpbGUuCgpOb3csIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIGBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzIGRlZmluZWQgd291bGQgYmUgd29ydGh3aGlsZS4gVGhpcyB3aWxsIGluZmx1ZW5jZSB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGZ1bmN0aW9ucyBhcmUgZXZlbiBiZWluZyB1c2VkLiBOZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnPTExMD1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTExMy1cbnZpcnQva3ZtL0tjb25maWc6MTE0OmNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxudmlydC9rdm0vS2NvbmZpZy0xMTUtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQwNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhlIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYmVpbmcgcHVsbGVkIGludG8gdGhlIGJ1aWxkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBvciBhbnkgcG90ZW50aWFsIGNoYW5nZXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzLCB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSB3aGF0IHRyaWdnZXJzIGl0cyBzZWxlY3Rpb24uIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIEkgY2FuIHplcm8gaW4gb24gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjMtXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2NDpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuYXJjaC94ODYva3ZtL0tjb25maWctMTY1LVx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgS1ZNIFNFVi1TTlAgR3Vlc3QgTWVtb3J5IEludmFsaWRhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBLVk1fQU1EX1NFVmAsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBLVk0gaGFuZGxlcyBndWVzdCBtZW1vcnkgd2l0aCBTRVYtU05QIGFuZCBgZ3Vlc3RfbWVtZmRgLiBUaGUgZmFjdCB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgc2VsZWN0ZWQgaW1wbGllcyBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIGlzIGFsc28gaW4gcGxheSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGFic29sdXRlbHksIHRoaXMgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIGl0JiMzOTtzIGZ1bmN0aW9uYWwgS1ZNIGNvZGUuIEdpdmVuIHRoZSBzY29wZSwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGBLVk1fQU1EX1NFVmAsIGBLVk1fQU1EYCwgYW5kIG9mIGNvdXJzZSBqdXN0IHBsYWluIGBLVk1gLgoKTm93LCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOiBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCwgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLCBhbmQgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIGlzIHJlYWNoYWJsZS4gRGlnZ2luZyBpbiwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAgcmVxdWVzdCBpcyBwcmVzZW50LiBUaGlzIHJlcXVlc3QgaXMgc2V0IGJ5IGJvdGggYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgYW5kIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYC4gIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCB3aGljaCBsZWFkcyB1cyB0byBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuCgpBaGEhIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgaG9sZSBpcyBwdW5jaGVkIGluIHRoZSBgZ3Vlc3RfbWVtZmRgLiBUaGF0JiMzOTtzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBmYWxsb2NhdGVgIG9uIGEgYGd1ZXN0X21lbWZkYC4gU28sIGZ1enppbmcgYGZhbGxvY2F0ZWAgb24gYSBgZ3Vlc3RfbWVtZmRgIHdoaWxlIGEgVk0gaXMgcnVubmluZyBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBhbmQgc3Vic2VxdWVudGx5IHRoZSBgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEYC4gU2VlbXMgbGlrZSBhIGdvb2QgdmVjdG9yLgoKSG93ZXZlciwgdGhlIGNhdGNoIGlzIGBLVk1fQU1EX1NFVmAgcmVxdWlyZXMgU0VWIGhhcmR3YXJlLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgZnV6eiB0aGlzPyAgU3l6a2FsbGVyIGNhbiBmdXp6IEtWTSBpb2N0bHMsIGFuZCBldmVuIGlmIFNFViBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgc29tZSBjb2RlIHBhdGhzIG1heSBzdGlsbCBiZSByZWFjaGFibGUgKG9yIGZhaWwgZWFybHkpLCB3aGljaCBpcyB1c2VmdWwuIEtWTSBjb2RlIGlzIGdlbmVyYWxseSB3b3J0aCBmdXp6aW5nLgoKQnV0IHdhaXQsIHRoZSBwcm9tcHQgc3BlY2lmaWVzIHRoYXQgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiAgU28gdGhlIGtleSBxdWVzdGlvbiBiZWNvbWVzLCBpcyBTRVYtU05QIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVT8gSWYgdGhlIGhvc3QgZG9lc24mIzM5O3Qgc3VwcG9ydCBTRVYtU05QLCBjaGVja3MgbGlrZSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd2lsbCBmYWlsLCBhbmQgS1ZNIHdvbiYjMzk7dCBhbGxvdyBTRVYtU05QIFZNIGNyZWF0aW9uLiBUaGlzIGlzIGEgcG90ZW50aWFsIHN0dW1ibGluZyBibG9jay4KClNFVi1TTlAgaXMgdXN1YWxseSB0b3VnaCB0byBmdXp6IGluIHN0YW5kYXJkIEdDRSBWTXMgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBlbXVsYXRpb24gY291bGQgKnBvdGVudGlhbGx5KiBhbGxvdyBpdCwgYnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBub3JtLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogS1ZNLCBhbmQgc29tZXRpbWVzIHdlIHJ1biBTeXprYWxsZXIgb24gYmFyZSBtZXRhbCBvciBuZXN0ZWQgVk1zIHRoYXQgc3VwcG9ydCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcy4gQnV0IGNhbiBRRU1VIGVtdWxhdGUgU0VWLVNOUCBpbiBhIHdheSB0aGF04oCZcyB1c2VmdWwgZm9yIEtWTT8KClFFTVUgY2FuIGVtdWxhdGUgYSBsb3QsIGJ1dCBLVk0gU0VWLVNOUCByZWxpZXMgb24gYSBoYXJkd2FyZSBQU1AgKFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3Nvcikgb24gQU1EIGhhcmR3YXJlLiBJdCYjMzk7cyBub3QgcHVyZSBzb2Z0d2FyZSBlbXVsYXRpb247IEtWTSBkZWxlZ2F0ZXMgdG8gdGhlIGhhcmR3YXJlLiBTbywgS1ZNIGFsb25lIGNhbm5vdCBjcmVhdGUgU0VWLVNOUCBWTXMgd2l0aG91dCBob3N0IGhhcmR3YXJlLiBMb29raW5nIGF0IGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYCBvciBgc2V2X3ZtX2luaXRgIHNob3VsZCBnaXZlIG1vcmUgY2xhcml0eS4KCkdpdmVuIHRoaXMsIHRoZSBjb2RlIHBhdGggYmVpbmcgZGlzY3Vzc2VkIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfdm1faW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI4OTc9c3RhdGljIGludCBzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyMS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjkyMjp2b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyMy17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01Mjk4PXN0YXRpYyBpbnQgc3ZtX3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mjk5LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTMwMDpcdHNldl92bV9pbml0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzMDEtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDAyPXZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAzOnZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwNC12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAzMTpzdGF0aWMgaW5saW5lIHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7fVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDMyLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pIHt9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTY3PXN0YXRpYyBpbmxpbmUgdTY0IHNucF9kZWZhdWx0X3BvbGljeSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0xMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg6MTAzOnZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bV92bSAqdm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTEwNC12b2lkIHNldl9lc192bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz0xNz1zdGF0aWMgdm9pZCBlbmNyeXB0X3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24sXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNDctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYzo0ODp2b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNDkte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYz0yMz1zdGF0aWMgc3RydWN0IGt2bV92bSAqc2V2X3ZtX2NyZWF0ZShib29sIGVzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0yOS1cdGlmICghZXMpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzA6XHRcdHNldl92bV9pbml0KHZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMS1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNLVNWTSBJbml0aWFsaXphdGlvbiBmb3IgU0VWKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBgc2V2X3ZtX2luaXRgIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnQgd2l0aGluIHRoZSBLVk0tU1ZNIG1vZHVsZSwgc28gYHNldl92bV9pbml0YCBzaG91bGQgYmUgd2hlcmUgdGhlIGd1ZXN0IFZNIGVudmlyb25tZW50IGdldHMgcHJvcGVybHkgY29uZmlndXJlZCBhbmQgaW5pdGlhbGl6ZWQgZm9yIFNFVi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY3J1Y2lhbCBzdGVwcyBmb3Igc2V0dGluZyB1cCBtZW1vcnkgZW5jcnlwdGlvbiwgaGFuZGxpbmcgdGhlIGd1ZXN0JiMzOTtzIHNlY3JldHMsIGFuZCBjb25maWd1cmluZyB0aGUgU1ZNLXNwZWNpZmljIHNlY3VyaXR5IGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIGdyYXNwaW5nIGhvdyBTRVYgd29ya3MgYXQgdGhlIGxvd2VzdCBsZXZlbCB3aXRoaW4gdGhlIEtWTSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkyMjpcdHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuMjkyMzpcdHtcbjI5MjQ6XHRcdHN3aXRjaCAoa3ZtLVx1MDAzZWFyY2gudm1fdHlwZSkge1xuMjkyNTpcdFx0Y2FzZSBLVk1fWDg2X0RFRkFVTFRfVk06XG4yOTI2Olx0XHRjYXNlIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNOlxuMjkyNzpcdFx0XHRicmVhaztcbjI5Mjg6XHRcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XG4yOTI5Olx0XHRcdGt2bS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9IHRydWU7XG4yOTMwOlx0XHRcdGZhbGx0aHJvdWdoO1xuMjkzMTpcdFx0Y2FzZSBLVk1fWDg2X1NFVl9FU19WTTpcbjI5MzI6XHRcdFx0a3ZtLVx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSA9IHRydWU7XG4yOTMzOlx0XHRcdGZhbGx0aHJvdWdoO1xuMjkzNDpcdFx0Y2FzZSBLVk1fWDg2X1NFVl9WTTpcbjI5MzU6XHRcdFx0a3ZtLVx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQgPSAha3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtO1xuMjkzNjpcdFx0XHR0b19rdm1fc2V2X2luZm8oa3ZtKS1cdTAwM2VuZWVkX2luaXQgPSB0cnVlO1xuMjkzNzpcdFx0XHRicmVhaztcbjI5Mzg6XHRcdGRlZmF1bHQ6XG4yOTM5Olx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtVbnN1cHBvcnRlZCBWTSB0eXBlICV1XCYjMzQ7LCBrdm0tXHUwMDNlYXJjaC52bV90eXBlKTtcbjI5NDA6XHRcdFx0YnJlYWs7XG4yOTQxOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTIzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyBLVk1fWDg2X1NOUF9WTSBhbmQgVmlydHVhbCBNYWNoaW5lIENyZWF0aW9uKioKCkhtbSwgYEtWTV9YODZfU05QX1ZNYC4uLiB0aGF0JiMzOTtzIGEgVk0gdHlwZSwgaXNuJiMzOTt0IGl0PyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgcmVsYXRlZCB0byBTZWN1cmUgTmVzdGVkIFBhZ2luZywgb3IgQU1EJiMzOTtzIFNlY3VyZSBOZXN0ZWQgUGFnaW5nLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkmIzM5O20gd29uZGVyaW5nOiBjYW4gYSB1c2VyIGFjdHVhbGx5ICpjcmVhdGUqIGEgVk0gb2YgdGhpcyBzcGVjaWZpYyB0eXBlIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydD8gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIGNvbmZpZ3VyYXRpb24gZXJyb3IgdGhhdCBzaG91bGQgYmUgcHJldmVudGVkLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgcHJvYmFibHkgYXJvdW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIFZNLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24gb3IgY29kZSBibG9jayB3aGVyZSB0aGUgYHZtX3R5cGVgIGlzIHZhbGlkYXRlZC4gU28gSSBzaG91bGQgcHJvYmFibHkgbG9vayBmb3IgYGt2bV9hcmNoX2luaXRfdm1gIG9yIHdoZXJldmVyIGB2bV90eXBlYCBnZXRzIGNoZWNrZWQgZHVyaW5nIHRoZSBWTSBjcmVhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGd1YXJkcmFpbHMgcHJldmVudGluZyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNlY3VyZSBWTSBvbiBpbmNvbXBhdGlibGUgaGFyZHdhcmUuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIGFyZWFzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3Mgc3VmZmljaWVudCBwcm90ZWN0aW9uLCBvciBpZiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fWDg2X1NOUF9WTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTQwNT1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6OlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NDEwLSAgI2RlZmluZSBLVk1fWDg2X1NFVl9FU19WTVx0M1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0Ojk0MTE6ICAjZGVmaW5lIEtWTV9YODZfU05QX1ZNXHQ0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTQxMi0gICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdDVcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXHQzXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3NDojZGVmaW5lIEtWTV9YODZfU05QX1ZNXHRcdDRcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTc1LSNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdFx0NVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYyPXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzE6XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzItXHRcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg4PXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5NC1cdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk1Olx0Ym9vbCBzbnBfYWN0aXZlID0gdm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk2LVx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjAxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjA5LVx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMDpcdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTEtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjkyMj12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5MjctXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTI4Olx0Y2FzZSBLVk1fWDg2X1NOUF9WTTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyOS1cdFx0a3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwNDU9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkwLVx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTkxOlx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkyLVx0dm1fdHlwZXMgXHUwMDI2PSBzZXZfZmlybXdhcmVfc3VwcG9ydGVkX3ZtX3R5cGVzKCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA1LVx0XHRwcl9pbmZvKFwmIzM0O1NFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjA2Olx0XHRcdHNldl9zdHJfZmVhdHVyZV9zdGF0ZShzZXZfc25wX3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA3LVx0XHRcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTMwMDM9aW50IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXModm9pZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMTctXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjMwMTg6XHRzdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMzAxOS1cbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3MS0jZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXHQzXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MjojZGVmaW5lIEtWTV9YODZfU05QX1ZNXHRcdDRcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cdFx0NVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaD0zND1zdGF0aWMgaW5saW5lIGJvb2wgaXNfc2V2X3NucF92bShzdHJ1Y3Qga3ZtX3ZtICp2bSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg6MzY6XHRyZXR1cm4gdm0tXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNy19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3MD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3Mi0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MzpcdHJldHVybiBzaGFwZS50eXBlID09IEtWTV9YODZfU05QX1ZNO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3NC0jZWxzZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jPTc0PXZvaWQgc25wX3ZtX2luaXQoc3RydWN0IGt2bV92bSAqdm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYzo3ODpcdFRFU1RfQVNTRVJUX0VRKHZtLVx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jLTc5LVx0dm1fc2V2X2lvY3RsKHZtLCBLVk1fU0VWX0lOSVQyLCBcdTAwMjZpbml0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jPTc2PXZvaWQgdGVzdF92bV90eXBlcyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtODctXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4Olx0XHR0ZXN0X2luaXQyKEtWTV9YODZfU05QX1ZNLCBcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTIyPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE0NDpcdGhhdmVfc25wID0ga3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ1LVx0VEVTVF9BU1NFUlQoIWhhdmVfc25wIHx8IGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTUzLVx0aWYgKGhhdmVfc25wKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzoxNTQ6XHRcdHRlc3RfZmxhZ3MoS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTktXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MDpcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jPTIyMT1zdGF0aWMgdm9pZCB0ZXN0X3Nldl9zbW9rZSh2b2lkICpndWVzdCwgdTMyIHR5cGUsIHU2NCBwb2xpY3kpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTIyNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyMjU6XHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjYtXHRcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTIzOC1cdFx0dGVzdF9zeW5jX3Ztc2EodHlwZSwgcG9saWN5KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYzoyMzk6XHRcdGlmICh0eXBlID09IEtWTV9YODZfU05QX1ZNKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jLTI0MC1cdFx0XHR0ZXN0X3N5bmNfdm1zYSh0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jPTI0Nj1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjU1Olx0aWYgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjU2Olx0XHR0ZXN0X3Nldl9zbW9rZShndWVzdF9zbnBfY29kZSwgS1ZNX1g4Nl9TTlBfVk0sIHNucF9kZWZhdWx0X3BvbGljeSgpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDg0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTV9YODZfU05QX1ZNIFdvcnRoaW5lc3MgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBgS1ZNX1g4Nl9TTlBfVk1gIGlzIHRpZWQgZGlyZWN0bHkgdG8gYHNldl9zbnBfc3VwcG9ydGVkYCwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGFyZHdhcmUmIzM5O3MgU0VWLVNOUCBjYXBhYmlsaXRpZXMgZHVyaW5nIHRoZSBgc2V2X2hhcmR3YXJlX3NldHVwYC4gSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGhhdmUgaXQsIGBLVk1fWDg2X1NOUF9WTWAgaXMgYSBuby1nbywgYW5kIGBrdm1fY3JlYXRlX3ZtYCB3aWxsIGVycm9yIG91dCB3aXRoIGAtRUlOVkFMYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMsICYjMzQ7aWYgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLCB0aGVuIGl0JiMzOTtzIGBXb3J0aEZ1enppbmc9ZmFsc2VgJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJvbXB0LgoKQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBwcm9tcHQgc2F5cyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gKnZpcnR1YWxpemVkIGVudmlyb25tZW50cyogbGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7LiBEb2VzIHN5emthbGxlciBldmVuIHJ1biBvbiBoYXJkd2FyZSB0aGF0IGNvdWxkIHN1cHBvcnQgU0VWLVNOUD8gQWgsIHN5emthbGxlciBjYW4gcnVuIGJhcmUgbWV0YWwgb3IgbmVzdGVkIFZNcywgdGhhdCYjMzk7cyByaWdodC4gU28sIGl0JiMzOTtzIG5vdCBzaW1wbHkgJiMzNDtpbXBvc3NpYmxlJiMzNDssIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guCgpOb3csIGlzIFNFVi1TTlAgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0U/IEFoYSwgdGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBHQ0UgYWN0dWFsbHkgc3VwcG9ydHMgQU1EIFNFViBhbmQgU0VWLVNOUCBpbnN0YW5jZXMsIHNwZWNpZmljYWxseSBDb25maWRlbnRpYWwgVk1zLiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZyEgSXQgSVMgcG9zc2libGUgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCBvbiBHQ0UgaWYgdGhlIGluc3RhbmNlIHR5cGUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIEFuZCwgd2hpbGUgUUVNVSBtaWdodCByZXF1aXJlIGhvc3QgaGFyZHdhcmUgc3VwcG9ydCwgR0NFICpwcm92aWRlcyogdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBwYXRoICppcyogcmVhY2hhYmxlLgoKQ29uY2x1c2lvbjogdGhpcyBwYXRjaCBpcyBmdXp6YWJsZSwgc28gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpKdXN0IHRvIGJlIHNhZmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBMZXQmIzM5O3MgbG9vayBhdCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYENPTkZJR19LVk1fQU1EYCwgYW5kIGBDT05GSUdfS1ZNYC4KCkFsc28sIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBgZ3Vlc3RfbWVtZmRgIHJlcXVpcmVzIGFueSBzcGVjaWFsIGNvbmZpZ3MuIFNwZWNpZmljYWxseSwgZG9lcyBpdCBuZWVkIGBDT05GSUdfS1ZNX1BSSVZBVEVfTUVNYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9QUklWQVRFX01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDI2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndWVzdF9tZW1mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM1OmFsbG93cyBtYXBwaW5nIGd1ZXN0X21lbWZkIG1lbW9yeSBpbnRvIGEgZ3Vlc3QuICBBbGwgZmllbGRzIHNoYXJlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzNi1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBpZGVudGljYWxseS4gIFVzZXJzcGFjZSBjYW4gc2V0IEtWTV9NRU1fR1VFU1RfTUVNRkRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzg6W2d1ZXN0X21lbWZkX29mZnNldCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM5LW11c3QgcG9pbnQgYXQgYSBmaWxlIGNyZWF0ZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQgb24gdGhlIGN1cnJlbnQgVk0sIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTE6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcdF9fdTMyIGd1ZXN0X21lbWZkO1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTMtXHRfX3UzMiBwYWQxO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcJiMzNDt2YWxpZFwmIzM0OyBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNjQ9V2hlbiBtYXBwaW5nIGEgZ2ZuIGludG8gdGhlIGd1ZXN0LCBLVk0gc2VsZWN0cyBzaGFyZWQgdnMuIHByaXZhdGUsIGkuZSBjb25zdW1lc1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJiMzOTtzIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MTA9VGhlIFwmIzM0O2ZsYWdzXCYjMzQ7IGZpZWxkIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgbXVzdCBiZSAmIzM5OzAmIzM5Oy5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQxNy06VHlwZTogdm0gaW9jdGxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDE4OjpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZChpbilcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMjp0aGF0IHJlZmVycyB0byBpdC4gIGd1ZXN0X21lbWZkIGZpbGVzIGFyZSByb3VnaGx5IGFuYWxvZ291cyB0byBmaWxlcyBjcmVhdGVkXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyMzp2aWEgbWVtZmRfY3JlYXRlKCksIGUuZy4gZ3Vlc3RfbWVtZmQgZmlsZXMgbGl2ZSBpbiBSQU0sIGhhdmUgdm9sYXRpbGUgc3RvcmFnZSxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNTpcJiMzNDtyZWd1bGFyXCYjMzQ7IG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQyNi12aXJ0dWFsIG1hY2hpbmUgKHNlZSBiZWxvdyksIGNhbm5vdCBiZSBtYXBwZWQsIHJlYWQsIG9yIHdyaXR0ZW4gYnkgdXNlcnNwYWNlLFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mjc6YW5kIGNhbm5vdCBiZSByZXNpemVkICAoZ3Vlc3RfbWVtZmQgZmlsZXMgZG8gaG93ZXZlciBzdXBwb3J0IFBVTkNIX0hPTEUpLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzAtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDMyLVx0X191NjQgc2l6ZTtcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzNi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDM3OkNvbmNlcHR1YWxseSwgdGhlIGlub2RlIGJhY2tpbmcgYSBndWVzdF9tZW1mZCBmaWxlIHJlcHJlc2VudHMgcGh5c2ljYWwgbWVtb3J5LFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXCYjMzQ7c3RydWN0IGt2bVwmIzM0Oy4gIFRoZVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDQzPW1pZ3JhdGlvbiBvZiBhIHZpcnR1YWwgbWFjaGluZS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDQ0LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ2OmFuZCBtb3JlIHNwZWNpZmljYWxseSB2aWEgdGhlIGd1ZXN0X21lbWZkIGFuZCBndWVzdF9tZW1mZF9vZmZzZXQgZmllbGRzIGluXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NzpcJiMzNDtzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlwmIzM0Oywgd2hlcmUgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGlzIHRoZSBvZmZzZXRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ4OmludG8gdGhlIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgRm9yIGEgZ2l2ZW4gZ3Vlc3RfbWVtZmQgZmlsZSwgdGhlcmUgY2FuIGJlIGF0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDUwOmd1ZXN0X21lbWZkIHJhbmdlIGlzIG5vdCBhbGxvd2VkIChhbnkgbnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGNhbiBiZSBib3VuZCB0b1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NTE6YSBzaW5nbGUgZ3Vlc3RfbWVtZmQgZmlsZSwgYnV0IHRoZSBib3VuZCByYW5nZXMgbXVzdCBub3Qgb3ZlcmxhcCkuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ1ND1zcGVjaWZpZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBDdXJyZW50bHkgZGVmaW5lZCBmbGFnczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Ni0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1NzogIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCAgICAgICAgRW5hYmxlIHVzaW5nIG1tYXAoKSBvbiB0aGUgZ3Vlc3RfbWVtZmQgZmlsZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0NjY9V2hlbiB0aGUgS1ZNIE1NVSBwZXJmb3JtcyBhIFBGTiBsb29rdXAgdG8gc2VydmljZSBhIGd1ZXN0IGZhdWx0IGFuZCB0aGUgYmFja2luZ1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njg6Y29uc3VtZWQgZnJvbSBndWVzdF9tZW1mZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgc2hhcmVkIG9yIGEgcHJpdmF0ZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NjktZmF1bHQuXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjYxMT1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVx0LypcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI2NDQ6XHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjY0NS1cdCAqIHRoZXJlIGFyZW4mIzM5O3QgYW55IENvQ28gVk1zIHRoYXQgc3VwcG9ydCBvbmx5IHByaXZhdGUgbWVtb3J5IG9uIGFybTY0LlxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwMy1cdFx0XHQvKlxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcdFx0XHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTA1LVx0XHRcdCAqIGNyZWF0ZSBhIGZvbGlvIHRvIGJhY2sgdGhlIG1lbW9yeS4gSW5mb3JtIHVzZXJzcGFjZS5cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNTctXHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozMzU4Olx0XHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1OTpcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0dldCBwZm4mIzQzO29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcJiMzNDspO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzYwLVx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzItXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3MzpcdCAqIHBvcHVsYXRpbmcgYSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEFzc2VydCB0aGF0IHRoZSBzbG90IGlzIGJhY2tlZFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0Olx0ICogYnkgZ3Vlc3RfbWVtZmQgYW5kIHRoYXQgdGhlIGdtZW0gaW5zdGFuY2UmIzM5O3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzUtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIzOTg9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXHQgKiAgICAgIGJlZm9yZWhhbmQuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0Mzg6XHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzktXHQgKiAgICAgIGluIHRoZSBSTVAgdGFibGUuXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDUyPXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDA3NzpcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNzgtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxODM9dm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVx0XHQgKiB1c2Vyc3BhY2UgbWF5IGFsc28gZnJlZSBnbWVtIHBhZ2VzIGR1cmluZyBydW4tdGltZSB2aWFcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcdFx0ICogaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zIG9uIHRoZSBndWVzdF9tZW1mZCwgc28gZmx1c2ggdGhlXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXHRcdCAqIGNhY2hlIGVudHJpZXMgZm9yIHRoZXNlIHBhZ2VzIGJlZm9yZSBmcmVlJiMzOTtpbmcgdGhlbSBiYWNrIHRvXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwMTUtXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMDE2Olx0ICogYSBjb25jdXJyZW50IFBVTkNIX0hPTEUgb24gZ3Vlc3RfbWVtZmQgdHJpZ2dlcnMgcmVtb3ZhbCBvZiBTUFRFcy5cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjEzLVx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMjE0Olx0ICogdXBkYXRlcywgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soKSBwcmV2ZW50cyBndWVzdF9tZW1mZCB1cGRhdGVzLFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVx0ICogbW11X25vdGlmaWVyIGV2ZW50cyBjYW4mIzM5O3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSYjMzk7cyBpbnRlcm5hbFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDU3Mz1ib29sIGt2bV9hcmNoX25vX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTgwOiAqIEtWTSBkb2VzbiYjMzk7dCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1ODEtICogd2l0aCBwcml2YXRlIG1lbW9yeSAodGhlIHByaXZhdGUgdnMuIHNoYXJlZCB0cmFja2luZyBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA1ODI6ICogZ3Vlc3RfbWVtZmQpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ0LVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDY6XHRfX3UzMiBndWVzdF9tZW1mZDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ny1cdF9fdTMyIHBhZDE7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NDU9c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1NDojZGVmaW5lIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjU4OnN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjU5LVx0X191NjQgc2l6ZTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzg9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00My1cdF9fdTY0IHVzZXJzcGFjZV9hZGRyO1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0Olx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ1Olx0X191MzIgZ3Vlc3RfbWVtZmQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDYtXHRfX3UzMiBwYWQxO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjM1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXHRfSU9XUihLVk1JTywgIDB4ZDQsIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0OS1cdF9fdTY0IHNpemU7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xNTc9VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtOjE1ODpURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTU5LVRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaGFyZHdhcmVfZGlzYWJsZV90ZXN0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGdldC1yZWctbGlzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTQyPXN0YXRpYyB2b2lkIHRlc3RfbW1hcF9jb3coaW50IGZkLCBzaXplX3Qgc2l6ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVx0bWVtID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzpcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcJiMzNDtDb3B5LW9uLXdyaXRlIG5vdCBhbGxvd2VkIGJ5IGd1ZXN0X21lbWZkLlwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTE3ND1zdGF0aWMgdm9pZCB0ZXN0X2NvbGxhcHNlKGludCBmZCwgdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTgyLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlx0ICogVG8gZXZlbiByZWFjaCB0aGUgcG9pbnQgd2hlcmUgdGhlIGd1ZXN0X21lbWZkIGZvbGlvcyB3aWxsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4NC1cdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjE4NTpcdCAqIHdpdGhpbiB0aGUgZ3Vlc3RfbWVtZmQgaGF2ZSB0byBiZSBhbGlnbmVkIHRvIHBtZF9zaXplLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXHQgKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MjA5Olx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0yMTAtXHQgKiBmaW5lLi4uXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz0zNDg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2JpbmRpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBmZCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1ODpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9pbnZhbGlkX3NpemVzKHN0cnVjdCBrdm1fdm0gKnZtLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTk6XHRcdFx0XHRcdFx0ICB1NjQgZ3Vlc3RfbWVtZmRfZmxhZ3MpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjQtXHRmb3IgKHNpemUgPSAxOyBzaXplIFx1MDAzYyBwYWdlX3NpemU7IHNpemUmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcdFx0ZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXHRcdFRFU1RfQVNTRVJUKGZkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIG5vbi1wYWdlLWFsaWduZWQgcGFnZSBzaXplICYjMzk7MHglbHgmIzM5OyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzY4LVx0XHRcdCAgICBzaXplKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzcyOnN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX211bHRpcGxlKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNzMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNzc6XHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzc4LVx0VEVTVF9BU1NFUlQoZmQxICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM4NDpcdGZkMiA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBwYWdlX3NpemUgKiAyLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVx0VEVTVF9BU1NFUlQoZmQyICE9IC0xLCBcJiMzNDttZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zOTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDEte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVx0Zm9yIChmbGFnID0gQklUKDApOyBmbGFnOyBmbGFnIFx1MDAzY1x1MDAzYz0gMSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MDc6XHRcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOC1cdFx0aWYgKGZsYWcgXHUwMDI2IHZhbGlkX2ZsYWdzKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQwOS1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2U9IDAsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQxMDpcdFx0XHRcdCAgICBcJiMzNDtndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAmIzM5OzB4JWx4JiMzOTsgc2hvdWxkIHN1Y2NlZWRcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cdFx0XHRcdCAgICBmbGFnKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cdFx0XHRURVNUX0FTU0VSVChmZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTU6XHRcdFx0XHQgICAgXCYjMzQ7Z3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJiMzOTsweCVseCYjMzk7IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXHRcdFx0XHQgICAgZmxhZyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcdGludCBmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChfX3ZtLCBfX2dtZW1fc2l6ZSwgX19mbGFncyk7XHRcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MjQtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQxOnN0YXRpYyB2b2lkIF9fdGVzdF9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NDIte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XHR0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZSh2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0NDpcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDQ1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NzI6c3RhdGljIHZvaWQgdGVzdF9ndWVzdF9tZW1mZCh1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ3My17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3NzpcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OTpcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4MC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cdGlmIChmbGFncyBcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19NTUFQKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg2LVx0aWYgKGZsYWdzIFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODc6XHRcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg4LVx0XHRcdFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NDkzPXN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodTggKm1lbSwgdTY0IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUwNTpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2d1ZXN0KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzQtXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1MzU6XHQgKiBLVk0gcmVxdWlyZXMgZ3Vlc3RfbWVtZmQgZmlsZXMgYW5kIG1lbXNsb3RzIHRvIGJlIHNpemVkIHRvIG11bHRpcGxlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXHQgKiBvZiB0aGUgaG9zdCBwYWdlIHNpemUuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXHRzaXplID0gbWF4X3Qoc2l6ZV90LCB2bS1cdTAwM2VwYWdlX3NpemUsIHBhZ2Vfc2l6ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcdGZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBHVUVTVF9NRU1GRF9GTEFHX01NQVAgfFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NDAtXHRcdFx0XHRcdCAgICAgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3MC1cdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTcxOlx0ICogc3VwcG9ydCBndWVzdF9tZW1mZCBoYXZlIHRoYXQgc3VwcG9ydCBmb3IgdGhlIGRlZmF1bHQgVk0gdHlwZS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXHRmb3JfZWFjaF9zZXRfYml0KHZtX3R5cGUsIFx1MDAyNnZtX3R5cGVzLCBCSVRTX1BFUl9UWVBFKHZtX3R5cGVzKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4Olx0XHR0ZXN0X2d1ZXN0X21lbWZkKHZtX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU4MDpcdHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3QoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY2NT12b2lkIHZtX2NyZWF0ZV9pcnFjaGlwKHN0cnVjdCBrdm1fdm0gKnZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2Njc6c3RhdGljIGlubGluZSBpbnQgX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBzaXplLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NjgtXHRcdFx0XHRcdCAgdTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02Njkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XHRzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCBndWVzdF9tZW1mZCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjcxLVx0XHQuc2l6ZSA9IHNpemUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY3NTpcdHJldHVybiBfX3ZtX2lvY3RsKHZtLCBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELCBcdTAwMjZndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ni19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY3OS1cdFx0XHRcdFx0dTY0IGZsYWdzKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2ODE6XHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02ODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjkyLVx0XHRcdFx0Z3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XHRcdFx0XHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTQtaW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5NjpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDItXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NzAzOlx0XHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC03MDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcxLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00OTktXHRmbGFncyA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NTAwOlx0aWYgKGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHNoYXBlKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTgwND1zdGF0aWMgdm9pZCBfX3ZtX21lbV9yZWdpb25fZGVsZXRlKHN0cnVjdCBrdm1fdm0gKnZtLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXHR9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODE5Olx0aWYgKChpbnQpcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCBcdTAwM2U9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlx0XHRrdm1fZnJlZV9mZChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MjEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NDgtXHRcdFx0XHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcdFx0XHRcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTUwLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU2LVx0XHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTc6XHRcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcdFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXHR9O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NjctXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4Olx0XHRcdFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVx0aW50IHJldCA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIGZsYWdzLCBncGEsIHNpemUsIGh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XHRcdFx0XHRcdCAgICAgICBndWVzdF9tZW1mZCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlx0XHRpbnQgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4NS1cdGlmIChmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODY6XHRcdGlmIChndWVzdF9tZW1mZCBcdTAwM2MgMCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XHRcdFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg4Olx0XHRcdFRFU1RfQVNTRVJUKCFndWVzdF9tZW1mZF9vZmZzZXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4OTpcdFx0XHRcdCAgICBcJiMzNDtPZmZzZXQgbXVzdCBiZSB6ZXJvIHdoZW4gY3JlYXRpbmcgbmV3IGd1ZXN0X21lbWZkXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlx0XHRcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTEtXHRcdH0gZWxzZSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTctXHRcdFx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcdFx0XHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwOTktXHRcdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMDE6XHRcdHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSBndWVzdF9tZW1mZDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAzLVx0fSBlbHNlIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0Olx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwNS1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTExOS1cdFx0XCYjMzQ7ICBzbG90OiAldSBmbGFnczogMHgleFxcblwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjExMjA6XHRcdFwmIzM0OyAgZ3Vlc3RfcGh5c19hZGRyOiAweCVseCBzaXplOiAweCVsbHggZ3Vlc3RfbWVtZmQ6ICVkXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMjEtXHRcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMjpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9MTI3ND12b2lkIHZtX2d1ZXN0X21lbV9mYWxsb2NhdGUoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBiYXNlLCB1NjQgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5MS1cdFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5MjpcdFx0ZmRfb2Zmc2V0ID0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgJiM0Mzsgb2Zmc2V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTMtXHRcdGxlbiA9IG1pbl90KHU2NCwgZW5kIC0gZ3BhLCByZWdpb24tXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplIC0gb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyOTU6XHRcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkLCBtb2RlLCBmZF9vZmZzZXQsIGxlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ni1cdFx0VEVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkIHRvICVzIGF0ICVseCAobGVuID0gJWx1KSwgZmQgPSAlZCwgbW9kZSA9ICV4LCBvZmZzZXQgPSAlbHhcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5Ny1cdFx0XHQgICAgcHVuY2hfaG9sZSA/IFwmIzM0O3B1bmNoIGhvbGVcJiMzNDsgOiBcJiMzNDthbGxvY2F0ZVwmIzM0OywgZ3BhLCBsZW4sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcdFx0XHQgICAgcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk5LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODYtXHRpZiAoc3VwcG9ydGVkX2ZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM4NzpcdFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXHRcdFx0XHRcdFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzkxOlx0XHRcdFx0XHRcdCAwLCBNRU1fUkVHSU9OX1NJWkUsIE5VTEwsIGd1ZXN0X21lbWZkLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzkyLVx0XHRURVNUX0FTU0VSVChyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTYtXHRcdFx0XHRcdFx0IEtWTV9NRU1fUkVBRE9OTFkgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTgtXHRcdFRFU1RfQVNTRVJUKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDAxOlx0XHRjbG9zZShndWVzdF9tZW1mZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQwMi1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTQwOT1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9tYXhfbWVtb3J5X3JlZ2lvbnModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1Ny0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NTg6c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbWVtZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cdFx0XHRcdCAgICAgc2l6ZV90IG9mZnNldCwgY29uc3QgY2hhciAqbXNnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIHZtLVx1MDAzZWt2bV9mZCwgMCwgXCYjMzQ7S1ZNIGZkIHNob3VsZCBmYWlsXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDc3Olx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cdTAwM2VmZCwgMCwgXCYjMzQ7Vk0mIzM5O3MgZmQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3OS1cdG1lbWZkID0ga3ZtX21lbWZkX2FsbG9jKE1FTV9SRUdJT05fU0laRSwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCAwLCBcJiMzNDtSZWd1bGFyIG1lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODEtXHRjbG9zZShtZW1mZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODMtXHR2bTIgPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NTpcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFwmIzM0O090aGVyIFZNJiMzOTtzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5MjpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTMtXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBQQUdFX1NJWkU7IGkmIzQzOyYjNDM7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0OTQ6XHRcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIGksIFwmIzM0O1VuYWxpZ25lZCBvZmZzZXQgc2hvdWxkIGZhaWxcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgTUVNX1JFR0lPTl9TSVpFICogNSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyMy1cdCAqIERlbGV0ZSB0aGUgZmlyc3QgbWVtc2xvdCwgYW5kIHRoZW4gYXR0ZW1wdCB0byByZWNyZWF0ZSBpdCBleGNlcHRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0Olx0ICogd2l0aCBhIFwmIzM0O2JhZFwmIzM0OyBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTI5LVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlx0ICogVmVyaWZ5IHRoYXQgb3ZlcmxhcCBpbiB0aGUgZ3Vlc3RfbWVtZmQgYmluZGluZ3MgKGkuZS4gaW4gZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTMxLVx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNy1cdFRFU1RfQVNTRVJUKHIgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVFWElTVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4Olx0XHQgICAgXCYjMzQ7T3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90JiMzOTtzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0MS1cdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU0NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU1ODpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjUtXHRURVNUX0FTU0VSVChyID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcdFx0ICAgIFwmIzM0O092ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MjMwPXN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfcHVuY2hfaG9sZSh1NjQgYmFzZV9ncGEsIGJvb2wgcHJlY2lzZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXHQgKiBDb252ZXJ0IHRoZSBlbnRpcmUgcmFuZ2UgdG8gcHJpdmF0ZSwgdGhpcyB0ZXN0Y2FzZSBpcyBhbGwgYWJvdXRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjIzNzpcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJiMzOTt0IG5lZWRlZC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yNzQtXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mjc1Olx0ICogdGhlIGd1ZXN0X21lbWZkIGJhY2tpbmcgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gc2hhcmVkIGFuZCBwcml2YXRlLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVx0ICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVx0LypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI4MTpcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI4Mi1cdCAqIGZhdWx0ZWQgaW4sIG9uY2Ugd2l0aCBvbmx5IHRoZSB0YXJnZXQgcmFuZ2UgZmF1bHRlZCBpbi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0zNjk9c3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3ZjcHVzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjM5NzpcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1mZF9zaXplLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjUtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI2Olx0ICogQWxsb2NhdGUgYW5kIGZyZWUgbWVtb3J5IGZyb20gdGhlIGd1ZXN0X21lbWZkIGFmdGVyIGNsb3NpbmcgdGhlIFZNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XHQgKiBmZC4gIFRoZSBndWVzdF9tZW1mZCBpcyBnaWZ0ZWQgYSByZWZlcmVuY2UgdG8gaXRzIG93bmluZyBWTSwgaS5lLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDI4LVx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjk6XHQgKiByZWZlcmVuY2UgdG8gdGhlIGd1ZXN0X21lbWZkIGlzIGFsc28gcHV0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVx0ICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEd1ZXN0IE1lbWZkIFN1cHBvcnQqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgZ3Vlc3RfbWVtZmRgIHN1cHBvcnQgcmVsaWVzIG9uIGVpdGhlciBgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1gIG9yIGBLVk1fWDg2X1NOUF9WTWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRob3NlIFZNIHR5cGVzIGhhdmUgc2VjdXJpdHktcmVsYXRlZCBjb25zaWRlcmF0aW9ucyB0aGF0IHByb2JhYmx5IG5lY2Vzc2l0YXRlIHNvbWUgZm9ybSBvZiBwcm90ZWN0ZWQgbWVtb3J5IG1hbmFnZW1lbnQuIFdhaXQgYSBtaW51dGXigKYgYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCBpcyBhICpzb2Z0d2FyZSotcHJvdGVjdGVkIFZNPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGhhZG4mIzM5O3QgdGhvdWdodCBhYm91dCB0aGF0LiBUaGlzIHN1Z2dlc3RzIHdlIG1pZ2h0IGJlIGFibGUgdG8gdGVzdCBhbmQgdmFsaWRhdGUgYGd1ZXN0X21lbWZkYCBmdW5jdGlvbmFsaXR5IGV2ZW4gd2l0aG91dCByZXF1aXJpbmcgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgYnkgbGV2ZXJhZ2luZyB0aGUgc29mdHdhcmUtYmFzZWQgcHJvdGVjdGlvbiBmZWF0dXJlcy4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGFkdmFudGFnZSBmb3IgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcuIExldCYjMzk7cyBkaWcgaW50byBgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1gIGEgYml0IG1vcmUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMgYnkgZXhhbWluaW5nIHRoZSBLY29uZmlnIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz02OT1jb25maWcgS1ZNX1dFUlJPUlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk1gIG9uIFNFVi1TTlAgVk1zKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYENPTkZJR19LVk1fU1dfUFJPVEVDVEVEX1ZNYCBmbGFnLCBhbmQgaXQmIzM5O3MgZW5hYmxpbmcgYGd1ZXN0X21lbWZkYCBldmVuIHdpdGhvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBtb3JlIGVzdGFibGlzaGVkIFNFVi1TTlAgZnVuY3Rpb25hbGl0eT8KCkhvbGQgb24uLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBwYXRjaCwgYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gTm93LCB0aG9zZSBmdW5jdGlvbnMgYXJlICpzcGVjaWZpY2FsbHkqIGNhbGxlZCB3aGVuIGBLVk1fQU1EX1NFVmAgaXMgZW5hYmxlZCwgYW5kIHRoZSB2aXJ0dWFsIG1hY2hpbmUgaXMsIG9mIGNvdXJzZSwgYW4gU0VWLVNOUCBWTS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBUaGlzIGhhcyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgcHJvdGVjdGlvbiBvbiBhIHBsYXRmb3JtIEkgY2FyZSBhYm91dCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYC4gTGV0JiMzOTtzIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTU3Olx0dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuNTE1ODpcdHtcbjUxNTk6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbjUxNjA6XHRcdHVuc2lnbmVkIGxvbmcgaTtcbjUxNjE6XHRcbjUxNjI6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbjUxNjM6XHRcbjUxNjQ6XHRcdC8qXG41MTY1Olx0XHQgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yIFwmIzM0O2lzIFNOUFwmIzM0OyBpcyBhLW9rIGhlcmUsIHRoYW5rcyB0byBtbXVfbG9jay5cbjUxNjY6XHRcdCAqIFRoZSB2Q1BVJiMzOTtzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGVcbjUxNjc6XHRcdCAqIHRvIG90aGVyIHRhc2tzLCBhbmQgY2FuIG9ubHkgYmVjb21lIHZhbGlkIHdoaWxlIGhvbGRpbmcgbW11X2xvY2ssXG41MTY4Olx0XHQgKiBhZnRlciB0aGUgVk0gaXMgZnVsbHkgY29tbWl0dGVkIHRvIGJlaW5nIGFuIFNOUCBWTS5cbjUxNjk6XHRcdCAqL1xuNTE3MDpcdFx0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxuNTE3MTpcdFx0XHRyZXR1cm47XG41MTcyOlx0XG41MTczOlx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHtcbjUxNzQ6XHRcdFx0Z3BhX3QgZ3BhID0gdG9fc3ZtKHZjcHUpLVx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGE7XG41MTc1Olx0XG41MTc2Olx0XHRcdGlmIChWQUxJRF9QQUdFKGdwYSkgXHUwMDI2XHUwMDI2XG41MTc3Olx0XHRcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXHUwMDNlPSByYW5nZS1cdTAwM2VzdGFydCBcdTAwMjZcdTAwMjZcbjUxNzg6XHRcdFx0ICAgIGdwYV90b19nZm4oZ3BhKSBcdTAwM2MgcmFuZ2UtXHUwMDNlZW5kKVxuNTE3OTpcdFx0XHRcdGt2bV9tYWtlX3JlcXVlc3RfYW5kX2tpY2soS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcbjUxODA6XHRcdH1cbjUxODE6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSBjaGVja2luZyBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoaXMgcGF0aCBpcyBvbmx5IHJlbGV2YW50IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gU0VWLVNOUCBndWVzdC4gTXkgZmlyc3QgdGhvdWdodCBpczogY2FuIHNvbWVvbmUgZXZlbiAqY3JlYXRlKiBhbiBTTlAgZ3Vlc3Qgd2l0aG91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0PyBUaGUgYW5zd2VyJiMzOTtzIGEgc29saWQgKm5vKi4gYHNldl9zbnBfc3VwcG9ydGVkYCBpcyBjaGVja2VkIGluIGBzZXZfaGFyZHdhcmVfc2V0dXBgLCB3aGljaCByZWFkcyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBzbyB3ZSYjMzk7cmUgcmVseWluZyBvbiB0aGUgY2hpcCBoZXJlLgoKQnV0IHRoZW4gSSByZWNhbGwgdGhhdCBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBHQ0UgaW5zdGFuY2VzIHRoYXQgc3VwcG9ydCBTRVYtU05QLCBhLmsuYS4gQ29uZmlkZW50aWFsIFZNcy4gVGhpcyB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLiBUaGUgcHJvbXB0IEkmIzM5O20gd29ya2luZyB3aXRoIHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGEgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBTaW5jZSBHQ0UgKmRvZXMqIG9mZmVyIFNFVi1TTlAgaW5zdGFuY2VzLCB0aGlzIGNvbmRpdGlvbiBpcywgaW4gZmFjdCwgKnBvc3NpYmxlKi4KClRoZXJlZm9yZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFRoZSBwYXRjaCBpcywgaW4gcHJpbmNpcGxlLCByZWFjaGFibGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWdzLiBJJiMzOTttIHRoaW5raW5nOiBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gYEtWTV9TV19QUk9URUNURURfVk1gICptaWdodCogY29tZSBpbnRvIHBsYXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYGd1ZXN0X21lbWZkYC4gVGhvdWdoLCBgS1ZNX0FNRF9TRVZgIGlzIGFjdHVhbGx5IHRoZSBvbmUgdGhhdCBlbmFibGVzIGBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURWAsIHdoaWNoIGltcGxpZXMgZ3Vlc3RfbWVtZmQgaXMgZW5hYmxlZC4KClNvIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIGBndWVzdF9tZW1mZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9QUklWQVRFX01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTUzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fR0VORVJJQ19QUklWQVRFX01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDA4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYGd1ZXN0X21lbWZkYC4gSXTigJlsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBiZWluZyB1c2VkIG9yIGNhbiBiZSBlbmFibGVkIGZvciB0aGVzZSBndWVzdHMuIEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZW50cnkgZ2l2ZXMgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbXkgd29yay4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBhbmQgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGl0LCBhbmQgaWYgaXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtndWVzdF9tZW1mZC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzM3PWluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzMzg6W2d1ZXN0X21lbWZkX29mZnNldCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM5LW11c3QgcG9pbnQgYXQgYSBmaWxlIGNyZWF0ZWQgdmlhIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQgb24gdGhlIGN1cnJlbnQgVk0sIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTE6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1Mi1cdF9fdTMyIGd1ZXN0X21lbWZkO1xuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDQ1PUtWTSBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBtYXBwaW5nIGd1ZXN0X21lbWZkIHZpYSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIsXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDc6XCYjMzQ7c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjJcJiMzNDssIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OC1pbnRvIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEZvciBhIGdpdmVuIGd1ZXN0X21lbWZkIGZpbGUsIHRoZXJlIGNhbiBiZSBhdFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzM0Nj1zdGF0aWMgdTgga3ZtX2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cdH0gZWxzZSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTg6XHRcdC8qIFRPRE86IENhbGwgaW50byBndWVzdF9tZW1mZCBvbmNlIGh1Z2VwYWdlcyBhcmUgc3VwcG9ydGVkLiAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzU5LVx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7R2V0IHBmbiYjNDM7b3JkZXIgZnJvbSBndWVzdF9tZW1mZFwmIzM0Oyk7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDQtXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NTpcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00Ni1cdF9fdTMyIGd1ZXN0X21lbWZkO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQzLVx0X191NjQgdXNlcnNwYWNlX2FkZHI7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDQ6XHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDUtXHRfX3UzMiBndWVzdF9tZW1mZDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTY5MT12b2lkIHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTItXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5MzpcdFx0XHRcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk1LVx0XHRcdFx0IGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTcwMT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwMi1cdFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo3MDM6XHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTQ3PWludCBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgc2xvdCwgdTMyIGZsYWdzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk0OC1cdFx0XHRcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTQ5Olx0XHRcdFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTctXHRcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcdFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXHR9O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NjctXHRcdFx0XHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4Olx0XHRcdFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVx0aW50IHJldCA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIGZsYWdzLCBncGEsIHNpemUsIGh2YSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XHRcdFx0XHRcdCAgICAgICBndWVzdF9tZW1mZCwgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlx0XHRpbnQgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4Ny1cdFx0XHR1MzIgZ3Vlc3RfbWVtZmRfZmxhZ3MgPSAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODg6XHRcdFx0VEVTVF9BU1NFUlQoIWd1ZXN0X21lbWZkX29mZnNldCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg5LVx0XHRcdFx0ICAgIFwmIzM0O09mZnNldCBtdXN0IGJlIHplcm8gd2hlbiBjcmVhdGluZyBuZXcgZ3Vlc3RfbWVtZmRcJiMzNDspO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTAxLVx0XHRyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gZ3Vlc3RfbWVtZmQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMjpcdFx0cmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgPSBndWVzdF9tZW1mZF9vZmZzZXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cdH0gZWxzZSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTEyNzQ9dm9pZCB2bV9ndWVzdF9tZW1fZmFsbG9jYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgYmFzZSwgdTY0IHNpemUsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXHRcdG9mZnNldCA9IGdwYSAtIHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyOTI6XHRcdGZkX29mZnNldCA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG9mZnNldDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjkzLVx0XHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSAtIG9mZnNldCk7XG4tLVxudmlydC9rdm0vTWFrZWZpbGUua3ZtPTE0PWt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTU6a3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjYtXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFx1MDAyNlx1MDAyNlxudmlydC9rdm0va3ZtX21haW4uYzoyMDI3Olx0ICAgIChtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0IFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkgfHxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjAyODpcdCAgICAgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCAmIzQzOyBtZW0tXHUwMDNlbWVtb3J5X3NpemUgXHUwMDNjIG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpKVxudmlydC9rdm0va3ZtX21haW4uYy0yMDI5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMDctXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMDg6XHRcdHIgPSBrdm1fZ21lbV9iaW5kKGt2bSwgbmV3LCBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmQsIG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xudmlydC9rdm0va3ZtX21haW4uYy0yMTA5LVx0XHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0ODYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAqKgoKUmlnaHQsIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgdGhlIGBndWVzdF9tZW1mZGAgZnVuY3Rpb25hbGl0eSwgaXNuJiMzOTt0IGl0PyBPa2F5LCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRvIHN0YXJ0IHRvIHNlZSBob3cgYG1lbWZkYCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgS1ZNIGd1ZXN0LiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoZSBjb25maWcgb3B0aW9uJiMzOTtzIGRlZmluaXRpb24uIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgaGF2aW5nIHRoYXQgc2V0LiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgb3B0aW9uIGRlZmluZWQsIGFuZCB3aGF0IHN1cnJvdW5kaW5nIGNvbnRleHQgZG9lcyB0aGF0IGdpdmUgbWU/IEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4Nzg0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEtWTV9HVUVTVF9NRU1GRCBTZWxlY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGF0IGNvZGUgcGF0aHMgYXJlIGRlcGVuZGVudCBvbiBpdCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHByZXNlbmNlIG9yIGFic2VuY2U/IEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGFscmVhZHkgYXNzdW1pbmcgaXQgcmVsYXRlcyB0byBtZW1vcnkgbWFuYWdlbWVudCBmb3IgS1ZNIGd1ZXN0cywgc3BlY2lmaWNhbGx5IG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzLiBNeSBpbW1lZGlhdGUgbWVudGFsIHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hpY2ggc3lzdGVtcyBvciBjb21wb25lbnRzIGFyZSBjaGVja2luZyBmb3IgdGhpcyB2YWx1ZS4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpzZWxlY3RpbmcqIGl0IOKAkyB3aGljaCBkcml2ZXJzLCBzdWJzeXN0ZW1zLCBvciBwb3RlbnRpYWxseSBldmVuIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGFyZSBxdWVyeWluZyBhbmQgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiBgS1ZNX0dVRVNUX01FTUZEYD8gQXJlIHdlIHRhbGtpbmcgY29tcGlsZS10aW1lIG9wdGlvbnMsIHJ1bnRpbWUgZmVhdHVyZXMsIG9yIGJvdGg/IEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgdG8gZGV0ZXJtaW5lIHdoeSBpdCBpcyByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjQzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTS94ODYgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgS1ZNX0dVRVNUX01FTUZEYCBnZXRzIGF1dG8tc2VsZWN0ZWQgYnkgYEtWTV9YODZgIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBgWDg2XzY0YC4gVGhhdCBtZWFucyBpdCYjMzk7cyBlc3NlbnRpYWxseSBhbHdheXMgZW5hYmxlZCBvbiB4ODYtNjQgc3lzdGVtcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZXNlIGNvbmZpZ3MgZW5hYmxlZDogYEtWTV9BTURfU0VWYCwgYEtWTV9BTURgLCBgS1ZNYCwgYW5kIGp1c3QgdG8gYmUgc3VyZSwgSSYjMzk7bGwgdGhyb3cgaW4gYEtWTV9TV19QUk9URUNURURfVk1gIHRvby4gSXQgbWlnaHQgbWFrZSB0ZXN0aW5nIGBndWVzdF9tZW1mZGAgYSBiaXQgc21vb3RoZXIsIHlvdSBuZXZlciBrbm93LgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHJldmlldyB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uOiBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCwgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYCwgYW5kIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYC4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gIGxvb2sgYXdmdWxseSBnZW5lcmljLiBTaG91bGRuJiMzOTt0IHRob3NlIGJlIGRlZmluZWQgaW4gdGhlIGdlbmVyYWwgeDg2IEtWTSBjb2RlPyBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgdGhleSBhcmUgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSXQmIzM5O3MgYWx3YXlzIHRoZSBnZW5lcmljIHN0dWZmIHRoYXQgZ2V0cyB5b3UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1OTA6XHRpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZGVyKVxuMTA1OTE6XHR7XG4xMDU5MjpcdFx0cmV0dXJuIGt2bV94ODZfY2FsbChnbWVtX3ByZXBhcmUpKGt2bSwgcGZuLCBnZm4sIG1heF9vcmRlcik7XG4xMDU5MzpcdH1cbjEwNTk0Olx0I2VuZGlmXG4xMDU5NTpcdFxuMTA1OTY6XHQjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4xMDU5NzpcdHZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuMTA1OTg6XHR7XG4xMDU5OTpcdFx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZV9yYW5nZSkoa3ZtLCByYW5nZSk7XG4xMDYwMDpcdH1cbjEwNjAxOlx0dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbjEwNjAyOlx0e1xuMTA2MDM6XHRcdGt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTtcbjEwNjA0Olx0fVxuMTA2MDU6XHQjZW5kaWZcbjEwNjA2Olx0I2VuZGlmXG4xMDYwNzpcdFxuMTA2MDg6XHR2b2lkIGt2bV9maXh1cF9hbmRfaW5qZWN0X3BmX2Vycm9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MTYgZXJyb3JfY29kZSlcbjEwNjA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI5MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgZ3Vlc3RfbWVtZmQuY2AgZm9yIEludmFsaWRhdGlvbioqCgpZZXMsIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBhcmVhLiBXZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSwgc28gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdGFyZ2V0IHRoZSBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFyb3VuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHN0cm9uZyBpbmRpY2F0b3I7IGludmFsaWRhdGlvbiBpcyB1c3VhbGx5IGludm9sdmVkIGluIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdoZW4gS1ZNIGd1ZXN0cyBhcmUgbWlzYmVoYXZpbmcgd2l0aCBtZW1vcnkgYW5kIG1lbWZkcy4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCwgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgaG93IGl0JiMzOTtzIGNhbGxlZCwgYW5kIHdoYXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGV4aXN0LiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCBpdCB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHByb2JsZW0uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRcdGlmICghZm91bmRfbWVtc2xvdCkge1xuIDE4MTpcdFx0XHRcdGZvdW5kX21lbXNsb3QgPSB0cnVlO1xuIDE4MjpcdFxuIDE4MzpcdFx0XHRcdEtWTV9NTVVfTE9DSyhrdm0pO1xuIDE4NDpcdFx0XHRcdGt2bV9tbXVfaW52YWxpZGF0ZV9zdGFydChrdm0pO1xuIDE4NTpcdFx0XHR9XG4gMTg2Olx0XG4gMTg3Olx0XHRcdGZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbiAxODg6XHRcbiAxODk6XHQjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTkwOlx0XHRcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFx1MDAyNmdmbl9yYW5nZSk7XG4gMTkxOlx0I2VuZGlmXG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHRpZiAoZmx1c2gpXG4gMTk1Olx0XHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xuIDE5NjpcdFxuIDE5NzpcdFx0aWYgKGZvdW5kX21lbXNsb3QpXG4gMTk4Olx0XHRcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4gMTk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg1OAoJCQkJCQkJb3V0cHV0OiAyNTEKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFNFVi1TTlAgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YC4gVGhpcyBtYWtlcyBpdCByZWFjaGFibGUgYW5kLCBjcml0aWNhbGx5LCB0ZXN0YWJsZS4gR29vZC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCBhbmQgc3VtbWFyaXplIHdoYXQgd2UmIzM5O3ZlIGdvdC4KClRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6CgotICAgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAKLSAgIGBzZXZfc25wX3JlbG9hZF92bXNhYAotICAgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgCi0gICBgc2V2X2dtZW1fZnJlZV9mb2xpb2AKLSAgIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgCi0gICBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYAotICAgYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgCgpBbmQgdGhlIGBFbmFibGVDb25maWdzYDoKCi0gICBgS1ZNX0FNRF9TRVZgCi0gICBgS1ZNX0FNRGAKLSAgIGBLVk1gCi0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAKClRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29saWQuIFRoZSBwYXRjaCBkaXJlY3RseSBtb2RpZmllcyBLVk0mIzM5O3MgQU1EIFNFVi1TTlAgVk1TQSBoYW5kbGluZyBhbmQgZ3Vlc3RcX21lbWZkIGludmFsaWRhdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyB0byByZWxvYWQgVk1TQSBwYWdlcyB3aGVuIHRoZSBndWVzdFxfbWVtZmQgaXMgaW52YWxpZGF0ZWQuIFRoaXMgaW52YWxpZGF0aW9uIGNhbiBoYXBwZW4gdGhyb3VnaCBvcGVyYXRpb25zIGxpa2UgYGZhbGxvY2F0ZSBwdW5jaCBob2xlYCwgYW5kIHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzICpyZWFjaGFibGUqIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdFxfbWVtZmQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGFuIGlkZWFsIHdheSB0byBleGVyY2lzZSB0aGlzIGNvZGUuCgpBIHNsaWdodCBjb25jZXJu4oCUZG8gSSBpbmNsdWRlIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYD8gSSB0aGluayBpdCBtaWdodCBiZSB3b3J0aCBpdC4gSXQgY291bGQgcG90ZW50aWFsbHkgaGVscCBzeXprYWxsZXIgZnV6eiBgZ3Vlc3RfbWVtZmRgIHdpdGhvdXQgbmVjZXNzYXJpbHkgbmVlZGluZyBTRVYtU05QIGhhcmR3YXJlIHByZXNlbnQuIFllcywgdGhlIHNwZWNpZmljIFNFVi1TTlAgY2FsbGJhY2tzIHdvbiYjMzk7dCB0cmlnZ2VyIGluIHRoYXQgc2NlbmFyaW8sIGJ1dCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBnZW5lcmljIEtWTSBjb2RlIGxpa2UgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLiBTbywgaXQmIzM5O3MgYSBnb29kIGNvdmVyYWdlIGVuaGFuY2VtZW50LgoKQWxyaWdodCwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIHRpbWUgdG8gY2FsbCB0aGUgc2V0LXJlc3VsdHMgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X3NucF9yZWxvYWRfdm1zYSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3Nldl9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7c2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtzZXZfZ21lbV9mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8mIzM0OywKICAgICYjMzQ7c2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgQU1EIFNFVi1TTlAgVk1TQSAoVmlydHVhbCBNYWNoaW5lIFNhdmUgQXJlYSkgYW5kIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIHJlbG9hZCBWTVNBIHBhZ2VzIHdoZW4gdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgaXMgaW52YWxpZGF0ZWQgKGUuZy4sIHZpYSBmYWxsb2NhdGUgcHVuY2ggaG9sZSkgYW5kIGNoYW5nZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBLVk0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3RfbWVtZmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjE1Ljc4MDI3ODY5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU0ODE4MTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJzZXZfZ21lbV9mcmVlX2ZvbGlvXCIsXG4gICAgXCJrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VcIixcbiAgICBcImt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb1wiLFxuICAgIFwic2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIGhhbmRsaW5nIG9mIEFNRCBTRVYtU05QIFZNU0EgKFZpcnR1YWwgTWFjaGluZSBTYXZlIEFyZWEpIGFuZCBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byByZWxvYWQgVk1TQSBwYWdlcyB3aGVuIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIGlzIGludmFsaWRhdGVkIChlLmcuLCB2aWEgZmFsbG9jYXRlIHB1bmNoIGhvbGUpIGFuZCBjaGFuZ2VzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uIGNhbGxiYWNrcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgS1ZNIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0X21lbWZkIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjE1Ljc4MDI4NTIyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE0MjY2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzZiMDQwNjY0NWYyZjhiNmIyNzg5OTEyZmZmNmJiZWEzZDU4ZmIzNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjozODoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbmluZGV4IDgzZGM1MDg2MTM4YjM5Li5mZDA4NDU0Yzc1NTM2NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC0xMzQsNiArMTM0LDcgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChtZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZClcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChyZWxvYWRfdm1zYSlcXG4gS1ZNX1g4Nl9PUChnZXRfZmVhdHVyZV9tc3IpXFxuIEtWTV9YODZfT1AoY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbilcXG4gS1ZNX1g4Nl9PUChhcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQpXFxuQEAgLTE0NSw5ICsxNDYsMTQgQEAgS1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X2dldF9hcGljdl9pbmhpYml0X3JlYXNvbnMpO1xcbiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuK0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKVxcbitLVk1fWDg2X09QX09QVElPTkFMKGdtZW1fZnJlZV9mb2xpbylcXG4rI2VuZGlmXFxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKVxcbi1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcXG4gI2VuZGlmXFxuIFxcbiAjdW5kZWYgS1ZNX1g4Nl9PUFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xMjIsNiArMTIyLDggQEBcXG4gXFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMxLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxcbiAjZGVmaW5lIEtWTV9SRVFfSFZfVExCX0ZMVVNIIFxcXFxcXG4gXFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDMyLCBLVk1fUkVRVUVTVF9XQUlUIHwgS1ZNX1JFUVVFU1RfTk9fV0FLRVVQKVxcbisjZGVmaW5lIEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCBcXFxcXFxuK1xcdEtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcXG4gI2RlZmluZSBLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUgXFxcXFxcbiBcXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzQsIEtWTV9SRVFVRVNUX1dBSVQpXFxuIFxcbkBAIC0xODc4LDYgKzE4ODAsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXHRpbnQgKCp2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XFxuIFxcdGludCAoKnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSkoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKTtcXG4gXFx0dm9pZCAoKmd1ZXN0X21lbW9yeV9yZWNsYWltZWQpKHN0cnVjdCBrdm0gKmt2bSk7XFxuK1xcdHZvaWQgKCpyZWxvYWRfdm1zYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuIFxcdGludCAoKmdldF9mZWF0dXJlX21zcikodTMyIG1zciwgdTY0ICpkYXRhKTtcXG4gXFxuQEAgLTE5MDAsOCArMTkwMywxMyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXG4gXFx0Z3ZhX3QgKCpnZXRfdW50YWdnZWRfYWRkcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XFxuIFxcdHZvaWQgKigqYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcXG4gXFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XFxuLVxcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGUpKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuK1xcdHZvaWQgKCpnbWVtX2ludmFsaWRhdGVfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4rXFx0dm9pZCAoKmdtZW1fZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuKyNlbmRpZlxcbiBcXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDc0ZmIxNTU1MWU4M2ZhLi43ZTA2ZWQxNmY0NzQ2MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbkBAIC0zOTc5LDMwICszOTc5LDIxIEBAIHN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4gXFx0cmV0dXJuIHNucF9kb19wc2Moc3ZtKTtcXG4gfVxcbiBcXG4tLypcXG4tICogSW52b2tlZCBhcyBwYXJ0IG9mIHN2bV92Y3B1X3Jlc2V0KCkgcHJvY2Vzc2luZyBvZiBhbiBpbml0IGV2ZW50Llxcbi0gKi9cXG4tc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3N0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXHRnZm5fdCBnZm4gPSBncGFfdG9fZ2ZuKGdwYSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuLVxcdGdmbl90IGdmbjtcXG4tXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbi1cXG4tXFx0aWYgKCFzdm0tXFx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldCA9IGZhbHNlO1xcbiBcXG4tXFx0LyogTWFyayB0aGUgdkNQVSBhcyBvZmZsaW5lIGFuZCBub3QgcnVubmFibGUgKi9cXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5wdi5wdl91bmhhbHRlZCA9IGZhbHNlO1xcbi1cXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XFxuIFxcbi1cXHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EgKi9cXG4rXFx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBLiAqL1xcbiBcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IElOVkFMSURfUEFHRTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2hlbiByZXBsYWNpbmcgdGhlIFZNU0EgZHVyaW5nIFNFVi1TTlAgQVAgY3JlYXRpb24sXFxuQEAgLTQwMTAsMTYgKzQwMDEsMjcgQEAgc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqL1xcbiBcXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cXHUwMDNldm1jYik7XFxuIFxcbi1cXHRpZiAoIVZBTElEX1BBR0Uoc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHQvKlxcbitcXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxcbitcXHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXFx1MDAzZXNldl9lcy52bXNhLiBJblxcbitcXHQgKiB0aGVvcnksIHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSdkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dFxcbitcXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXFxuK1xcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXFxuK1xcdCAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGhcXG4rXFx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cXG4rXFx0ICovXFxuK1xcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XFxuIFxcbi1cXHRnZm4gPSBncGFfdG9fZ2ZuKHN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSk7XFxuLVxcdHN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4rXFx0aWYgKCFWQUxJRF9QQUdFKGdwYSkpXFxuK1xcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVxcdTAwM2Vrdm0sIGdmbik7XFxuIFxcdGlmICghc2xvdClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0bW11X3NlcSA9IGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xcbitcXHRzbXBfcm1iKCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxcbiBcXHQgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLlxcbkBAIC00MDI3LDI5ICs0MDI5LDY0IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIE5VTEwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXHQvKlxcbi1cXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxcbi1cXHQgKiByYXRoZXIgdGhhbiB0aGUgaW5pdGlhbCBvbmUgYWxsb2NhdGVkIGJ5IEtWTSBpbiBzdm0tXFx1MDAzZXNldl9lcy52bXNhLiBJblxcbi1cXHQgKiB0aGVvcnksIHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSdkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dFxcbi1cXHQgKiB0aGF0IGludm9sdmVzIGNsZWFudXBzIGxpa2UgZmx1c2hpbmcgY2FjaGVzLCB3aGljaCB3b3VsZCBpZGVhbGx5IGJlXFxuLVxcdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXFxuLVxcdCAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGhcXG4tXFx0ICogbWluaW1hbCBTTlAtc3BlY2lmaWMgY2hhbmdlcy5cXG4rXFx0ICogU2F2ZSB0aGUgZ3Vlc3QtcHJvdmlkZWQgR1BBLiAgSWYgcmV0cnkgaXMgbmVlZGVkLCB0aGVuIEtWTSB3aWxsIHRyeVxcbitcXHQgKiBhZ2FpbiB3aXRoIHRoZSBzYW1lIEdQQS4gIElmIHRoZSBWTVNBIGlzIHVzYWJsZSwgdGhlbiBLVk0gbmVlZHMgdG9cXG4rXFx0ICogdHJhY2sgdGhlIEdQQSBzbyB0aGF0IHRoZSBWTVNBIGNhbiBiZSByZWxvYWRlZCBpZiB0aGUgYmFja2luZyBwYWdlXFxuK1xcdCAqIGZvciB0aGUgR1BBIGlzIGludmFsaWRhdGVkLlxcbiBcXHQgKi9cXG4tXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2hhc19ndWVzdF92bXNhID0gdHJ1ZTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gZ3BhO1xcbitcXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcXG4rXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xcbitcXHRyZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xcbit9XFxuK1xcbisvKlxcbisgKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0Z3BhX3QgZ3BhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XFxuK1xcbitcXHRpZiAoIXN2bS1cXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XFxuK1xcbitcXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XFxuK1xcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XFxuIFxcbi1cXHQvKiBVc2UgdGhlIG5ldyBWTVNBICovXFxuLVxcdHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xcbitcXHRncGEgPSBzdm0tXFx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuIFxcbi1cXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlICovXFxuLVxcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX1JVTk5BQkxFKTtcXG4rXFx0X19zZXZfc25wX3JlbG9hZF92bXNhKHZjcHUsIGdwYSk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBnbWVtIHBhZ2VzIGFyZW4ndCBjdXJyZW50bHkgbWlncmF0YWJsZSwgYnV0IGlmIHRoaXMgZXZlciBjaGFuZ2VzXFxuLVxcdCAqIHRoZW4gY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHN2bS1cXHUwMDNlc2V2X2VzLnZtc2EgaXMgcGlubmVkXFxuLVxcdCAqIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy5cXG4rXFx0ICogTWFyayB0aGUgdkNQVSBhcyBydW5uYWJsZSBmb3IgQ1JFQVRFIHJlcXVlc3RzLCBpbmRpY2F0ZWQgYnkgYSB2YWxpZFxcbitcXHQgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGxcXG4rXFx0ICogZmFpbCBpbnN0ZWFkIG9mIGJsb2NraW5nIGluZGVmaW5pdGVseSBhbmQgaGFuZ2luZyB0aGUgdkNQVSwgZS5nLiBpZlxcbitcXHQgKiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBwYWdlIGlzIHVuYXZhaWxhYmxlLlxcbiBcXHQgKi9cXG4tXFx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcXG4rXFx0aWYgKFZBTElEX1BBR0UoZ3BhKSlcXG4rXFx0XFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xcbit9XFxuK1xcbit2b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCB2Y3B1X3Nldl9lc19zdGF0ZSAqc2V2X2VzID0gXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlc2V2X2VzO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzZXZfZXMtXFx1MDAzZXNucF92bXNhX211dGV4KTtcXG4rXFxuK1xcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBzZXZfZXMtXFx1MDAzZXNucF9ndWVzdF92bXNhX2dwYSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5AQCAtNDEwNSwxMCArNDE0MiwxMCBAQCBzdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfZ3BhID0gc3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xcbitcXHRcXHR0YXJnZXRfc3ZtLVxcdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNWTV9WTUdFWElUX0FQX0RFU1RST1k6XFxuLVxcdFxcdHRhcmdldF9zdm0tXFx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XFxuK1xcdFxcdHRhcmdldF9zdm0tXFx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHZjcHVfdW5pbXBsKHZjcHUsIFxcXCJ2bWdleGl0OiBpbnZhbGlkIEFQIGNyZWF0aW9uIHJlcXVlc3QgWyUjeF0gZnJvbSBndWVzdFxcXFxuXFxcIixcXG5AQCAtNDc5MSw2ICs0ODI4LDggQEAgaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0c3ZtLVxcdTAwM2VzZXZfZXMudm1zYSA9IHBhZ2VfYWRkcmVzcyh2bXNhX3BhZ2UpO1xcbitcXHRzdm0tXFx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcXG4rXFx0c3ZtLVxcdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiBcXG5AQCAtNTExNSw5ICs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yIFxcXCJpcyBTTlBcXFwiIGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxcbitcXHQgKiBUaGUgdkNQVSdzIFZNU0EgR1BBIGlzIGludmFsaWRhdGVkIGJlZm9yZSB0aGUgdkNQVSBpcyBtYWRlIHZpc2libGVcXG4rXFx0ICogdG8gb3RoZXIgdGFza3MsIGFuZCBjYW4gb25seSBiZWNvbWUgdmFsaWQgd2hpbGUgaG9sZGluZyBtbXVfbG9jayxcXG4rXFx0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xcbitcXHRcXHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXFx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGE7XFxuK1xcbitcXHRcXHRpZiAoVkFMSURfUEFHRShncGEpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXFx1MDAzZT0gcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXFx1MDAzYyByYW5nZS1cXHUwMDNlZW5kKVxcbitcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XFxuK1xcdH1cXG4rfVxcbiBcXG4tdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcXG4rdm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0a3ZtX3Bmbl90IHN0YXJ0ID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbitcXHRrdm1fcGZuX3QgZW5kID0gc3RhcnQgKyAoMXVsIFxcdTAwM2NcXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKSk7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuIFxcbiBcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZWY2OWE1MWFiMjdmOTguLjdkM2RkMzcxOTA3MDQ1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTU0NDUsNiArNTQ0NSw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXFxuIFxcdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXFxuIFxcdC5ndWVzdF9tZW1vcnlfcmVjbGFpbWVkID0gc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQsXFxuK1xcdC5yZWxvYWRfdm1zYSA9IHNldl9zbnBfcmVsb2FkX3Ztc2EsXFxuIFxcbiBcXHQudm1fY29weV9lbmNfY29udGV4dF9mcm9tID0gc2V2X3ZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSxcXG4gXFx0LnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20sXFxuQEAgLTU0NjAsOSArNTQ2MSwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LnZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyA9IGF2aWNfdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zLFxcbiBcXHQuYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UgPSBzdm1fYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UsXFxuIFxcbisjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuIFxcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxcbi1cXHQuZ21lbV9pbnZhbGlkYXRlID0gc2V2X2dtZW1faW52YWxpZGF0ZSxcXG4rXFx0LmdtZW1faW52YWxpZGF0ZV9yYW5nZSA9IHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2UsXFxuK1xcdC5nbWVtX2ZyZWVfZm9saW8gPSBzZXZfZ21lbV9mcmVlX2ZvbGlvLFxcbiBcXHQuZ21lbV9tYXhfbWFwcGluZ19sZXZlbCA9IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsLFxcbisjZW5kaWZcXG4gfTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggNzE2YmUyMWZiYTMzNTQuLmM3ZWNjNWZjYTY4OWIwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuQEAgLTI3MSw3ICsyNzEsOCBAQCBzdHJ1Y3QgdmNwdV9zZXZfZXNfc3RhdGUge1xcbiBcXHR1NjQgZ2hjYl9yZWdpc3RlcmVkX2dwYTtcXG4gXFxuIFxcdHN0cnVjdCBtdXRleCBzbnBfdm1zYV9tdXRleDsgLyogVXNlZCB0byBoYW5kbGUgY29uY3VycmVudCB1cGRhdGVzIG9mIFZNU0EuICovXFxuLVxcdGdwYV90IHNucF92bXNhX2dwYTtcXG4rXFx0Z3BhX3Qgc25wX3BlbmRpbmdfdm1zYV9ncGE7XFxuK1xcdGdwYV90IHNucF9ndWVzdF92bXNhX2dwYTtcXG4gXFx0Ym9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7XFxuIFxcdGJvb2wgc25wX2hhc19ndWVzdF92bXNhO1xcbiB9O1xcbkBAIC05OTUsNiArOTk2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIH1cXG4rdm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbkBAIC0xMDA4LDcgKzEwMTAsOCBAQCBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCk7XFxuIGV4dGVybiB1bnNpZ25lZCBpbnQgbWF4X3Nldl9hc2lkO1xcbiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XFxuIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcXG4tdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XFxuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK3ZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcXG4gc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xcbkBAIC0xMDM4LDcgKzEwNDEsNiBAQCBzdGF0aWMgaW5saW5lIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpblxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDA2MjZlODM1ZTllYjc3Li45ZGY2YWNmOWE5ODJlNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtODE2Nyw2ICs4MTY3LDggQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbitcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KSlcXG4rXFx0XFx0XFx0a3ZtX3g4Nl9jYWxsKHJlbG9hZF92bXNhKSh2Y3B1KTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpIHx8IHJlcV9pbnRfd2luIHx8XFxuQEAgLTEwNTkyLDkgKzEwNTk0LDEzIEBAIGludCBrdm1fYXJjaF9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sIGludCBtYXhfb3JkXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiB7XFxuLVxcdGt2bV94ODZfY2FsbChnbWVtX2ludmFsaWRhdGUpKHN0YXJ0LCBlbmQpO1xcbitcXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcXG4rfVxcbit2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGt2bV94ODZfY2FsbChnbWVtX2ZyZWVfZm9saW8pKGZvbGlvKTtcXG4gfVxcbiAjZW5kaWZcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzFlLi42YjdmODgwMTUwNWQ1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtMjYwNyw3ICsyNjA3LDggQEAgbG9uZyBrdm1fZ21lbV9wb3B1bGF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0X2dmbiwgdm9pZCBfX3VzZXIgKnNyYyxcXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuLXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XFxuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuaW5kZXggODY2OTA2ODNiMmZlM2UuLjhlYzUwNDE5MzRkYmNmIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuQEAgLTE4NSw2ICsxODUsMTAgQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGZsdXNoIHw9IGt2bV9tbXVfdW5tYXBfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNmdmbl9yYW5nZSk7XFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuK1xcdFxcdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShrdm0sIFxcdTAwMjZnZm5fcmFuZ2UpO1xcbisjZW5kaWZcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsdXNoKVxcbkBAIC01MjMsMjMgKzUyNywxMiBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbFxcbiBcXHRyZXR1cm4gTUZfREVMQVlFRDtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbi1zdGF0aWMgdm9pZCBrdm1fZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCAwKTtcXG4tXFx0a3ZtX3Bmbl90IHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbi1cXHRpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuLVxcbi1cXHRrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUocGZuLCBwZm4gKyAoMXVsIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSk7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBrdm1fZ21lbV9hb3BzID0ge1xcbiBcXHQuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLFxcbiBcXHQubWlncmF0ZV9mb2xpb1xcdD0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyxcXG4gXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGt2bV9nbWVtX2Vycm9yX2ZvbGlvLFxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuLVxcdC5mcmVlX2ZvbGlvID0ga3ZtX2dtZW1fZnJlZV9mb2xpbyxcXG4rXFx0LmZyZWVfZm9saW8gPSBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8sXFxuICNlbmRpZlxcbiB9O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MTYuNTk1NDI0Nzc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI3MzMwMjY1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwic2V2X2dtZW1fZnJlZV9mb2xpb1wiLFxuICAgIFwia3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9cIixcbiAgICBcInNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM2YjA0MDY2NDVmMmY4YjZiMjc4OTkxMmZmZjZiYmVhM2Q1OGZiMzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjozODoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzOS4uZmQwODQ1NGM3NTUzNjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtMTM0LDYgKzEzNCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUwobWVtX2VuY191bnJlZ2lzdGVyX3JlZ2lvbilcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX2NvcHlfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKHZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSlcbiBLVk1fWDg2X09QX09QVElPTkFMKGd1ZXN0X21lbW9yeV9yZWNsYWltZWQpXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChyZWxvYWRfdm1zYSlcbiBLVk1fWDg2X09QKGdldF9mZWF0dXJlX21zcilcbiBLVk1fWDg2X09QKGNoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24pXG4gS1ZNX1g4Nl9PUChhcGljX2luaXRfc2lnbmFsX2Jsb2NrZWQpXG5AQCAtMTQ1LDkgKzE0NiwxNCBAQCBLVk1fWDg2X09QKHZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcilcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zKTtcbiBLVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9mcmVlX2ZvbGlvKVxuKyNlbmRpZlxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKVxuLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxuICNlbmRpZlxuIFxuICN1bmRlZiBLVk1fWDg2X09QXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi5lZTQ3YTBkMWZlYjk5MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xMjIsNiArMTIyLDggQEBcbiBcdEtWTV9BUkNIX1JFUV9GTEFHUygzMSwgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfSFZfVExCX0ZMVVNIIFxcXG4gXHRLVk1fQVJDSF9SRVFfRkxBR1MoMzIsIEtWTV9SRVFVRVNUX1dBSVQgfCBLVk1fUkVRVUVTVF9OT19XQUtFVVApXG4rI2RlZmluZSBLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQgXFxcbitcdEtWTV9BUkNIX1JFUV9GTEFHUygzMywgS1ZNX1JFUVVFU1RfV0FJVCB8IEtWTV9SRVFVRVNUX05PX1dBS0VVUClcbiAjZGVmaW5lIEtWTV9SRVFfVVBEQVRFX1BST1RFQ1RFRF9HVUVTVF9TVEFURSBcXFxuIFx0S1ZNX0FSQ0hfUkVRX0ZMQUdTKDM0LCBLVk1fUkVRVUVTVF9XQUlUKVxuIFxuQEAgLTE4NzgsNiArMTg4MCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHRpbnQgKCp2bV9jb3B5X2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHRpbnQgKCp2bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20pKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZCk7XG4gXHR2b2lkICgqZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCkoc3RydWN0IGt2bSAqa3ZtKTtcbitcdHZvaWQgKCpyZWxvYWRfdm1zYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBcdGludCAoKmdldF9mZWF0dXJlX21zcikodTMyIG1zciwgdTY0ICpkYXRhKTtcbiBcbkBAIC0xOTAwLDggKzE5MDMsMTMgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcbiBcdGd2YV90ICgqZ2V0X3VudGFnZ2VkX2FkZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFx0dm9pZCAqKCphbGxvY19hcGljX2JhY2tpbmdfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXG4gXHRpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTtcbi1cdHZvaWQgKCpnbWVtX2ludmFsaWRhdGUpKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuK1x0dm9pZCAoKmdtZW1faW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuK1x0dm9pZCAoKmdtZW1fZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rI2VuZGlmXG4gXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNzRmYjE1NTUxZTgzZmEuLjdlMDZlZDE2ZjQ3NDYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM5NzksMzAgKzM5NzksMjEgQEAgc3RhdGljIGludCBzbnBfYmVnaW5fcHNjKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHNucF9kb19wc2Moc3ZtKTtcbiB9XG4gXG4tLypcbi0gKiBJbnZva2VkIGFzIHBhcnQgb2Ygc3ZtX3ZjcHVfcmVzZXQoKSBwcm9jZXNzaW5nIG9mIGFuIGluaXQgZXZlbnQuXG4tICovXG4tc3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuK1x0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRrdm1fcGZuX3QgcGZuO1xuLVx0Z2ZuX3QgZ2ZuO1xuLVxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuLVxuLVx0aWYgKCFzdm0tXHUwMDNlc2V2X2VzLnNucF9hcF93YWl0aW5nX2Zvcl9yZXNldClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQgPSBmYWxzZTtcbiBcbi1cdC8qIE1hcmsgdGhlIHZDUFUgYXMgb2ZmbGluZSBhbmQgbm90IHJ1bm5hYmxlICovXG4tXHR2Y3B1LVx1MDAzZWFyY2gucHYucHZfdW5oYWx0ZWQgPSBmYWxzZTtcbi1cdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuIFxuLVx0LyogQ2xlYXIgdXNlIG9mIHRoZSBWTVNBICovXG4rXHQvKiBDbGVhciB1c2Ugb2YgdGhlIFZNU0EuICovXG4gXHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBJTlZBTElEX1BBR0U7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbiBcdC8qXG4gXHQgKiBXaGVuIHJlcGxhY2luZyB0aGUgVk1TQSBkdXJpbmcgU0VWLVNOUCBBUCBjcmVhdGlvbixcbkBAIC00MDEwLDE2ICs0MDAxLDI3IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICovXG4gXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cdTAwM2V2bWNiKTtcbiBcbi1cdGlmICghVkFMSURfUEFHRShzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX2dwYSkpXG4tXHRcdHJldHVybjtcbitcdC8qXG4rXHQgKiBGcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCwgdGhlIFZNU0Egd2lsbCBhbHdheXMgYmUgYSBndWVzdC1tYXBwZWQgcGFnZVxuK1x0ICogcmF0aGVyIHRoYW4gdGhlIGluaXRpYWwgb25lIGFsbG9jYXRlZCBieSBLVk0gaW4gc3ZtLVx1MDAzZXNldl9lcy52bXNhLiBJblxuK1x0ICogdGhlb3J5LCBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgY291bGQgYmUgZnJlZSdkIGFuZCBjbGVhbmVkIHVwIGhlcmUsIGJ1dFxuK1x0ICogdGhhdCBpbnZvbHZlcyBjbGVhbnVwcyBsaWtlIGZsdXNoaW5nIGNhY2hlcywgd2hpY2ggd291bGQgaWRlYWxseSBiZVxuK1x0ICogaGFuZGxlZCBkdXJpbmcgdGVhcmRvd24gcmF0aGVyIHRoYW4gZ3Vlc3QgYm9vdC4gIERlZmVycmluZyB0aGF0IGFsc29cbitcdCAqIGFsbG93cyB0aGUgZXhpc3RpbmcgbG9naWMgZm9yIFNFVi1FUyBWTVNBcyB0byBiZSByZS11c2VkIHdpdGhcbitcdCAqIG1pbmltYWwgU05QLXNwZWNpZmljIGNoYW5nZXMuXG4rXHQgKi9cbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2hhc19ndWVzdF92bXNhID0gdHJ1ZTtcbiBcbi1cdGdmbiA9IGdwYV90b19nZm4oc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEpO1xuLVx0c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4rXHRpZiAoIVZBTElEX1BBR0UoZ3BhKSlcbitcdFx0cmV0dXJuO1xuIFxuIFx0c2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFzbG90KVxuIFx0XHRyZXR1cm47XG4gXG4rXHRtbXVfc2VxID0ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdHNtcF9ybWIoKTtcbitcbiBcdC8qXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbkBAIC00MDI3LDI5ICs0MDI5LDY0IEBAIHN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0cmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHQvKlxuLVx0ICogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIHRoZSBWTVNBIHdpbGwgYWx3YXlzIGJlIGEgZ3Vlc3QtbWFwcGVkIHBhZ2Vcbi1cdCAqIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIG9uZSBhbGxvY2F0ZWQgYnkgS1ZNIGluIHN2bS1cdTAwM2VzZXZfZXMudm1zYS4gSW5cbi1cdCAqIHRoZW9yeSwgc3ZtLVx1MDAzZXNldl9lcy52bXNhIGNvdWxkIGJlIGZyZWUnZCBhbmQgY2xlYW5lZCB1cCBoZXJlLCBidXRcbi1cdCAqIHRoYXQgaW52b2x2ZXMgY2xlYW51cHMgbGlrZSBmbHVzaGluZyBjYWNoZXMsIHdoaWNoIHdvdWxkIGlkZWFsbHkgYmVcbi1cdCAqIGhhbmRsZWQgZHVyaW5nIHRlYXJkb3duIHJhdGhlciB0aGFuIGd1ZXN0IGJvb3QuICBEZWZlcnJpbmcgdGhhdCBhbHNvXG4tXHQgKiBhbGxvd3MgdGhlIGV4aXN0aW5nIGxvZ2ljIGZvciBTRVYtRVMgVk1TQXMgdG8gYmUgcmUtdXNlZCB3aXRoXG4tXHQgKiBtaW5pbWFsIFNOUC1zcGVjaWZpYyBjaGFuZ2VzLlxuK1x0ICogU2F2ZSB0aGUgZ3Vlc3QtcHJvdmlkZWQgR1BBLiAgSWYgcmV0cnkgaXMgbmVlZGVkLCB0aGVuIEtWTSB3aWxsIHRyeVxuK1x0ICogYWdhaW4gd2l0aCB0aGUgc2FtZSBHUEEuICBJZiB0aGUgVk1TQSBpcyB1c2FibGUsIHRoZW4gS1ZNIG5lZWRzIHRvXG4rXHQgKiB0cmFjayB0aGUgR1BBIHNvIHRoYXQgdGhlIFZNU0EgY2FuIGJlIHJlbG9hZGVkIGlmIHRoZSBiYWNraW5nIHBhZ2VcbitcdCAqIGZvciB0aGUgR1BBIGlzIGludmFsaWRhdGVkLlxuIFx0ICovXG4tXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9oYXNfZ3Vlc3Rfdm1zYSA9IHRydWU7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IGdwYTtcbitcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XG4rXHRlbHNlXG4rXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbitcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuK31cbitcbisvKlxuKyAqIEludm9rZWQgYXMgcGFydCBvZiBzdm1fdmNwdV9yZXNldCgpIHByb2Nlc3Npbmcgb2YgYW4gaW5pdCBldmVudC5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdGdwYV90IGdwYTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbitcbitcdGlmICghc3ZtLVx1MDAzZXNldl9lcy5zbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQpXG4rXHRcdHJldHVybjtcbitcbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX2FwX3dhaXRpbmdfZm9yX3Jlc2V0ID0gZmFsc2U7XG4rXG4rXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIG9mZmxpbmUgYW5kIG5vdCBydW5uYWJsZSAqL1xuK1x0dmNwdS1cdTAwM2VhcmNoLnB2LnB2X3VuaGFsdGVkID0gZmFsc2U7XG4rXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuLVx0LyogVXNlIHRoZSBuZXcgVk1TQSAqL1xuLVx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xuK1x0Z3BhID0gc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYTtcbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4gXG4tXHQvKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlICovXG4tXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4rXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgZ3BhKTtcbiBcbiBcdC8qXG4tXHQgKiBnbWVtIHBhZ2VzIGFyZW4ndCBjdXJyZW50bHkgbWlncmF0YWJsZSwgYnV0IGlmIHRoaXMgZXZlciBjaGFuZ2VzXG4tXHQgKiB0aGVuIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSBzdm0tXHUwMDNlc2V2X2VzLnZtc2EgaXMgcGlubmVkXG4tXHQgKiB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuXG4rXHQgKiBNYXJrIHRoZSB2Q1BVIGFzIHJ1bm5hYmxlIGZvciBDUkVBVEUgcmVxdWVzdHMsIGluZGljYXRlZCBieSBhIHZhbGlkXG4rXHQgKiBWTVNBIEdQQSwgZXZlbiBpZiBpbnN0YWxsaW5nIHRoZSBWTVNBIGZhaWxlZCwgc28gdGhhdCBLVk1fUlVOIHdpbGxcbitcdCAqIGZhaWwgaW5zdGVhZCBvZiBibG9ja2luZyBpbmRlZmluaXRlbHkgYW5kIGhhbmdpbmcgdGhlIHZDUFUsIGUuZy4gaWZcbitcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXG4gXHQgKi9cbi1cdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XG4rXHRpZiAoVkFMSURfUEFHRShncGEpKVxuK1x0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4rfVxuK1xuK3ZvaWQgc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlICpzZXZfZXMgPSBcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlc2V2X2VzO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnNldl9lcy1cdTAwM2VzbnBfdm1zYV9tdXRleCk7XG4rXG4rXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVx1MDAzZXNucF9ndWVzdF92bXNhX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbkBAIC00MTA1LDEwICs0MTQyLDEwIEBAIHN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuLVx0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmV4aXRfaW5mb18yO1xuK1x0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfcGVuZGluZ192bXNhX2dwYSA9IHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzI7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBTVk1fVk1HRVhJVF9BUF9ERVNUUk9ZOlxuLVx0XHR0YXJnZXRfc3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4rXHRcdHRhcmdldF9zdm0tXHUwMDNlc2V2X2VzLnNucF9wZW5kaW5nX3Ztc2FfZ3BhID0gSU5WQUxJRF9QQUdFO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHZjcHVfdW5pbXBsKHZjcHUsIFwidm1nZXhpdDogaW52YWxpZCBBUCBjcmVhdGlvbiByZXF1ZXN0IFslI3hdIGZyb20gZ3Vlc3RcXG5cIixcbkBAIC00NzkxLDYgKzQ4MjgsOCBAQCBpbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdm0tXHUwMDNlc2V2X2VzLnZtc2EgPSBwYWdlX2FkZHJlc3Modm1zYV9wYWdlKTtcbitcdHN2bS1cdTAwM2VzZXZfZXMuc25wX3BlbmRpbmdfdm1zYV9ncGEgPSBJTlZBTElEX1BBR0U7XG4rXHRzdm0tXHUwMDNlc2V2X2VzLnNucF9ndWVzdF92bXNhX2dwYSA9IElOVkFMSURfUEFHRTtcbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkID0gc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSk7XG4gXG5AQCAtNTExNSw5ICs1MTU0LDM2IEBAIGludCBzZXZfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHQvKlxuK1x0ICogQW4gdW5zdGFibGUgcmVzdWx0IGZvciBcImlzIFNOUFwiIGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxuK1x0ICogVGhlIHZDUFUncyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlXG4rXHQgKiB0byBvdGhlciB0YXNrcywgYW5kIGNhbiBvbmx5IGJlY29tZSB2YWxpZCB3aGlsZSBob2xkaW5nIG1tdV9sb2NrLFxuK1x0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXG4rXHQgKi9cbitcdGlmICghX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4rXHRcdGdwYV90IGdwYSA9IHRvX3N2bSh2Y3B1KS1cdTAwM2VzZXZfZXMuc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuK1xuK1x0XHRpZiAoVkFMSURfUEFHRShncGEpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZ3BhX3RvX2dmbihncGEpIFx1MDAzZT0gcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXHUwMDNjIHJhbmdlLVx1MDAzZWVuZClcbitcdFx0XHRrdm1fbWFrZV9yZXF1ZXN0X2FuZF9raWNrKEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRCwgdmNwdSk7XG4rXHR9XG4rfVxuIFxuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG4rdm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuK1x0a3ZtX3Bmbl90IHN0YXJ0ID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xuK1x0a3ZtX3Bmbl90IGVuZCA9IHN0YXJ0ICsgKDF1bCBcdTAwM2NcdTAwM2MgZm9saW9fb3JkZXIoZm9saW8pKTtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXG4gXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li43ZDNkZDM3MTkwNzA0NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NDQ1LDYgKzU0NDUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbiBcdC5tZW1fZW5jX3VucmVnaXN0ZXJfcmVnaW9uID0gc2V2X21lbV9lbmNfdW5yZWdpc3Rlcl9yZWdpb24sXG4gXHQuZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZCA9IHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkLFxuK1x0LnJlbG9hZF92bXNhID0gc2V2X3NucF9yZWxvYWRfdm1zYSxcbiBcbiBcdC52bV9jb3B5X2VuY19jb250ZXh0X2Zyb20gPSBzZXZfdm1fY29weV9lbmNfY29udGV4dF9mcm9tLFxuIFx0LnZtX21vdmVfZW5jX2NvbnRleHRfZnJvbSA9IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20sXG5AQCAtNTQ2MCw5ICs1NDYxLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LnZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyA9IGF2aWNfdmNwdV9nZXRfYXBpY3ZfaW5oaWJpdF9yZWFzb25zLFxuIFx0LmFsbG9jX2FwaWNfYmFja2luZ19wYWdlID0gc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlLFxuIFxuKyNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbiBcdC5nbWVtX3ByZXBhcmUgPSBzZXZfZ21lbV9wcmVwYXJlLFxuLVx0LmdtZW1faW52YWxpZGF0ZSA9IHNldl9nbWVtX2ludmFsaWRhdGUsXG4rXHQuZ21lbV9pbnZhbGlkYXRlX3JhbmdlID0gc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZSxcbitcdC5nbWVtX2ZyZWVfZm9saW8gPSBzZXZfZ21lbV9mcmVlX2ZvbGlvLFxuIFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbCxcbisjZW5kaWZcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li5jN2VjYzVmY2E2ODliMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0yNzEsNyArMjcxLDggQEAgc3RydWN0IHZjcHVfc2V2X2VzX3N0YXRlIHtcbiBcdHU2NCBnaGNiX3JlZ2lzdGVyZWRfZ3BhO1xuIFxuIFx0c3RydWN0IG11dGV4IHNucF92bXNhX211dGV4OyAvKiBVc2VkIHRvIGhhbmRsZSBjb25jdXJyZW50IHVwZGF0ZXMgb2YgVk1TQS4gKi9cbi1cdGdwYV90IHNucF92bXNhX2dwYTtcbitcdGdwYV90IHNucF9wZW5kaW5nX3Ztc2FfZ3BhO1xuK1x0Z3BhX3Qgc25wX2d1ZXN0X3Ztc2FfZ3BhO1xuIFx0Ym9vbCBzbnBfYXBfd2FpdGluZ19mb3JfcmVzZXQ7XG4gXHRib29sIHNucF9oYXNfZ3Vlc3Rfdm1zYTtcbiB9O1xuQEAgLTk5NSw2ICs5OTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXG4ge1xuIFx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiB9XG4rdm9pZCBzZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gaW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuQEAgLTEwMDgsNyArMTAxMCw4IEBAIGludCBzZXZfZGV2X2dldF9hdHRyKHUzMiBncm91cCwgdTY0IGF0dHIsIHU2NCAqdmFsKTtcbiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcbiB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XG4gaW50IHNldl9nbWVtX3ByZXBhcmUoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xuLXZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuK3ZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rdm9pZCBzZXZfZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBzZXZfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG4gc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7XG5AQCAtMTAzOCw3ICsxMDQxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgc2V2X2dtZW1fcHJlcGFyZShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW5cbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHNldl9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxuIHtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjlkZjZhY2Y5YTk4MmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04MTY3LDYgKzgxNjcsOCBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuIFx0XHR9XG4rXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNU0FfUEFHRV9SRUxPQUQsIHZjcHUpKVxuK1x0XHRcdGt2bV94ODZfY2FsbChyZWxvYWRfdm1zYSkodmNwdSk7XG4gXHR9XG4gXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSkgfHwgcmVxX2ludF93aW4gfHxcbkBAIC0xMDU5Miw5ICsxMDU5NCwxMyBAQCBpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4ge1xuLVx0a3ZtX3g4Nl9jYWxsKGdtZW1faW52YWxpZGF0ZSkoc3RhcnQsIGVuZCk7XG4rXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcbit9XG4rdm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRrdm1feDg2X2NhbGwoZ21lbV9mcmVlX2ZvbGlvKShmb2xpbyk7XG4gfVxuICNlbmRpZlxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLjZiN2Y4ODAxNTA1ZDVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC0yNjA3LDcgKzI2MDcsOCBAQCBsb25nIGt2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnRfZ2ZuLCB2b2lkIF9fdXNlciAqc3JjLFxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuK3ZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcbit2b2lkIGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggODY2OTA2ODNiMmZlM2UuLjhlYzUwNDE5MzRkYmNmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTE4NSw2ICsxODUsMTAgQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBnbWVtX2ZpbGUgKmYsIHBnb2ZmX3Qgc3RhcnQsXG4gXHRcdH1cbiBcbiBcdFx0Zmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZnZm5fcmFuZ2UpO1xuK1xuKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbitcdFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXHUwMDI2Z2ZuX3JhbmdlKTtcbisjZW5kaWZcbiBcdH1cbiBcbiBcdGlmIChmbHVzaClcbkBAIC01MjMsMjMgKzUyNywxMiBAQCBzdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbFxuIFx0cmV0dXJuIE1GX0RFTEFZRUQ7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbi1zdGF0aWMgdm9pZCBrdm1fZ21lbV9mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCAwKTtcbi1cdGt2bV9wZm5fdCBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbi1cdGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbi1cbi1cdGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShwZm4sIHBmbiArICgxdWwgXHUwMDNjXHUwMDNjIG9yZGVyKSk7XG4tfVxuLSNlbmRpZlxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGt2bV9nbWVtX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW8gPSBub29wX2RpcnR5X2ZvbGlvLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0ga3ZtX2dtZW1fbWlncmF0ZV9mb2xpbyxcbiBcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBrdm1fZ21lbV9lcnJvcl9mb2xpbyxcbiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4tXHQuZnJlZV9mb2xpbyA9IGt2bV9nbWVtX2ZyZWVfZm9saW8sXG4rXHQuZnJlZV9mb2xpbyA9IGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpbyxcbiAjZW5kaWZcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MTYuNTk1NDI2NzY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxODg3NDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgd2FycmFudHMgZnV6emluZy4gSXQncyB0b3VjaGluZyBLVk0sIHNwZWNpZmljYWxseSBBTUQgU0VWLVNOUCBzdXBwb3J0LCBhbmQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLCBpdCBzZWVtcyB0byBiZSBkZWFsaW5nIHdpdGggYGd1ZXN0X21lbWZkYCBhbmQgVk1TQSBoYW5kbGluZy4gTmV3IEtWTSByZXF1ZXN0LCBgS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FEYCwgaXMgYWRkZWQuIFRoZXJlIGFyZSBjaGFuZ2VzIHRvIGBnbWVtX2ludmFsaWRhdGVgLCBgZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYGdtZW1fZnJlZV9mb2xpb2AuIFRoZXJlIGFyZSBhbHNvIG1vZGlmaWNhdGlvbnMgdG8gYHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVgIGFuZCBhIG5ldyBmdW5jdGlvbiwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLiBUaGUgY29kZSBpcyBhbHNvIGNoYW5naW5nIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVgIHRvIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBldmVuIGJlIHJlYWNoZWQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHJ1bm5hYmxlIGluIHNvbWV0aGluZyBsaWtlIEdDRSBvciBRRU1VLiBTRVYtU05QJ3MgYSBiaXQgdHJpY2t5LCBzaW5jZSBpdCByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgKEVQWUMgd2l0aCBTRVYtU05QIHN1cHBvcnQpLiBCdXQgZXZlbiBpZiB0aGUgVk1zIGNhbid0IGJlIHJ1biBpbiBhIGdpdmVuIHRlc3Qgc2V0dXAsIG9mdGVuIEtWTSBjb2RlIGlzIHN0aWxsIGZ1enphYmxlIGlmIHRoZSByZWxldmFudCBpb2N0bHMgYXJlIHJlYWNoYWJsZSwgb3IgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtb2NrIHRoZSBzZXR1cC4gU0VWLVNOUCBpcyBhIGJpdCBkaWZmZXJlbnQgYmVjYXVzZSBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBydW4gdGhlIFZNcywgYnV0IHNvbWUgaW9jdGxzICptaWdodCogYmUgcmVhY2hhYmxlLlxuXG5XYWl0IGEgc2Vjb25kLiBJIGtub3cgU3l6a2FsbGVyIGhlYXZpbHkgZnV6emVzIEtWTS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGFscmVhZHkgaGFuZGxlZC4gTGV0IG1lIGNoZWNrIGZvciBgQ09ORklHX0tWTV9BTURfU0VWYCBpbiB0aGUgcGF0Y2guIFllcCwgaXQgaXMuIFRpbWUgdG8gdmVyaWZ5IGJ5IGxvb2tpbmcgaW4gdGhlIGtlcm5lbCdzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gQW5kIGxldCdzIHVzZSBgZ3JlcHBlcmAgdG8gYmUgc3VyZSB0byBmaW5kIGFsbCBpbnN0YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODoyMy4yMTQzMDQzODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODk5NzU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODoyNS43NjMzMDc1NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMzNTkyNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgS1ZNL1NFVi1TTlAgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9uIGNoYW5nZXMgYW5kIHNlZSB3aGF0IHRoZXkgdGVsbCB1cy4gSSBzZWUgYSBzZXJpZXMgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIG9yIG1vZGlmaWVkOiBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAsIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYHNldl9nbWVtX2ZyZWVfZm9saW9gLCBga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYW5kIGBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGVpciByZWFjaGFiaWxpdHkgYW5kIGNvbnRleHQuXG5cblJpZ2h0LCBzbyBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGBzdm1fdmNwdV9yZXNldGAgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGR1cmluZyBhbiBpbml0aWFsaXphdGlvbiBldmVudC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlbiwgYHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIHNlZW1zIHRvIGJlIGNvbWluZyBmcm9tIGBfX2t2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gQWgsIGFuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpdHNlbGYgaXMgdHJpZ2dlcmVkIHdoZW4gYSBndWVzdCBtZW1mZCBnZXRzIGludmFsaWRhdGVkLCBsaWtlbHkgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgZmFsbG9jYXRlIC0tcHVuY2gtaG9sZWAuIEFuZCBmaW5hbGx5LCBgc2V2X2dtZW1fZnJlZV9mb2xpb2AgaXMgY2FsbGVkIGZyb20gYGt2bV9nbWVtX2ZyZWVfZm9saW9gLCBhbHNvIGluIHRoZSBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlsZS5cblxuTm93LCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBgQ09ORklHX0hBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBpcyBkZWZpbmVkIHdvdWxkIGJlIHdvcnRod2hpbGUuIFRoaXMgd2lsbCBpbmZsdWVuY2Ugd2hldGhlciB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBmdW5jdGlvbnMgYXJlIGV2ZW4gYmVpbmcgdXNlZC4gTmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODozMC42OTY5MDI5OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1MjQ4NzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMTA9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTExMy1cXG52aXJ0L2t2bS9LY29uZmlnOjExNDpjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG52aXJ0L2t2bS9LY29uZmlnLTExNS0gICAgICAgYm9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODozNC4zNDk0MDA4NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQzNzM0NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGUgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBiZWluZyBwdWxsZWQgaW50byB0aGUgYnVpbGQuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dCBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHRoaW5rIGFib3V0IGl0cyBpbXBsaWNhdGlvbnMgb3IgYW55IHBvdGVudGlhbCBjaGFuZ2VzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzLCB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSB3aGF0IHRyaWdnZXJzIGl0cyBzZWxlY3Rpb24uIEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUgYmVmb3JlIEkgY2FuIHplcm8gaW4gb24gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDA3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MzYuOTkzMTM5NDUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTU2NDQxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjQ6XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTY1LVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzg6MzkuMDQ4Nzg5MzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NTA0MzI2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLVk0gU0VWLVNOUCBHdWVzdCBNZW1vcnkgSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgS1ZNX0FNRF9TRVZgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgbWVtb3J5IHdpdGggU0VWLVNOUCBhbmQgYGd1ZXN0X21lbWZkYC4gVGhlIGZhY3QgdGhhdCBgS1ZNX0FNRF9TRVZgIGlzIHNlbGVjdGVkIGltcGxpZXMgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCBpcyBhbHNvIGluIHBsYXkgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhYnNvbHV0ZWx5LCB0aGlzIGlzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCdzIGZ1bmN0aW9uYWwgS1ZNIGNvZGUuIEdpdmVuIHRoZSBzY29wZSwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGBLVk1fQU1EX1NFVmAsIGBLVk1fQU1EYCwgYW5kIG9mIGNvdXJzZSBqdXN0IHBsYWluIGBLVk1gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYHNldl9nbWVtX2ZyZWVfZm9saW9gLCBga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCwgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2AsIGFuZCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBzZXZfc25wX3JlbG9hZF92bXNhYCBpcyByZWFjaGFibGUuIERpZ2dpbmcgaW4sIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAgcmVxdWVzdCBpcyBwcmVzZW50LiBUaGlzIHJlcXVlc3QgaXMgc2V0IGJ5IGJvdGggYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgYW5kIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYC4gIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgLCB3aGljaCBsZWFkcyB1cyB0byBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuXG5cbkFoYSEgYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBob2xlIGlzIHB1bmNoZWQgaW4gdGhlIGBndWVzdF9tZW1mZGAuIFRoYXQncyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgZmFsbG9jYXRlYCBvbiBhIGBndWVzdF9tZW1mZGAuIFNvLCBmdXp6aW5nIGBmYWxsb2NhdGVgIG9uIGEgYGd1ZXN0X21lbWZkYCB3aGlsZSBhIFZNIGlzIHJ1bm5pbmcgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIHN1YnNlcXVlbnRseSB0aGUgYEtWTV9SRVFfVk1TQV9QQUdFX1JFTE9BRGAuIFNlZW1zIGxpa2UgYSBnb29kIHZlY3Rvci5cblxuSG93ZXZlciwgdGhlIGNhdGNoIGlzIGBLVk1fQU1EX1NFVmAgcmVxdWlyZXMgU0VWIGhhcmR3YXJlLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgZnV6eiB0aGlzPyAgU3l6a2FsbGVyIGNhbiBmdXp6IEtWTSBpb2N0bHMsIGFuZCBldmVuIGlmIFNFViBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBzb21lIGNvZGUgcGF0aHMgbWF5IHN0aWxsIGJlIHJlYWNoYWJsZSAob3IgZmFpbCBlYXJseSksIHdoaWNoIGlzIHVzZWZ1bC4gS1ZNIGNvZGUgaXMgZ2VuZXJhbGx5IHdvcnRoIGZ1enppbmcuXG5cbkJ1dCB3YWl0LCB0aGUgcHJvbXB0IHNwZWNpZmllcyB0aGF0IEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gIFNvIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lcywgaXMgU0VWLVNOUCByZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVU/IElmIHRoZSBob3N0IGRvZXNuJ3Qgc3VwcG9ydCBTRVYtU05QLCBjaGVja3MgbGlrZSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgd2lsbCBmYWlsLCBhbmQgS1ZNIHdvbid0IGFsbG93IFNFVi1TTlAgVk0gY3JlYXRpb24uIFRoaXMgaXMgYSBwb3RlbnRpYWwgc3R1bWJsaW5nIGJsb2NrLlxuXG5TRVYtU05QIGlzIHVzdWFsbHkgdG91Z2ggdG8gZnV6eiBpbiBzdGFuZGFyZCBHQ0UgVk1zIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcy4gTmVzdGVkIHZpcnR1YWxpemF0aW9uIHdpdGggZW11bGF0aW9uIGNvdWxkICpwb3RlbnRpYWxseSogYWxsb3cgaXQsIGJ1dCB0aGF0J3Mgbm90IHRoZSBub3JtLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogS1ZNLCBhbmQgc29tZXRpbWVzIHdlIHJ1biBTeXprYWxsZXIgb24gYmFyZSBtZXRhbCBvciBuZXN0ZWQgVk1zIHRoYXQgc3VwcG9ydCB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcy4gQnV0IGNhbiBRRU1VIGVtdWxhdGUgU0VWLVNOUCBpbiBhIHdheSB0aGF04oCZcyB1c2VmdWwgZm9yIEtWTT9cblxuUUVNVSBjYW4gZW11bGF0ZSBhIGxvdCwgYnV0IEtWTSBTRVYtU05QIHJlbGllcyBvbiBhIGhhcmR3YXJlIFBTUCAoUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yKSBvbiBBTUQgaGFyZHdhcmUuIEl0J3Mgbm90IHB1cmUgc29mdHdhcmUgZW11bGF0aW9uOyBLVk0gZGVsZWdhdGVzIHRvIHRoZSBoYXJkd2FyZS4gU28sIEtWTSBhbG9uZSBjYW5ub3QgY3JlYXRlIFNFVi1TTlAgVk1zIHdpdGhvdXQgaG9zdCBoYXJkd2FyZS4gTG9va2luZyBhdCBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWAgb3IgYHNldl92bV9pbml0YCBzaG91bGQgZ2l2ZSBtb3JlIGNsYXJpdHkuXG5cbkdpdmVuIHRoaXMsIHRoZSBjb2RlIHBhdGggYmVpbmcgZGlzY3Vzc2VkIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODo1MS41OTkyMjUwMjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjI3OTkyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X3ZtX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yODk3PXN0YXRpYyBpbnQgc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjkyMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5MjI6dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTIzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTI5OD1zdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUyOTkte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTMwMDpcXHRzZXZfdm1faW5pdChrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTMwMS1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAwMj12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMDM6dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwNC12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEwMzA9c3RhdGljIGlubGluZSB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAzMTpzdGF0aWMgaW5saW5lIHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7fVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMi1zdGF0aWMgaW5saW5lIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKSB7fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTY3PXN0YXRpYyBpbmxpbmUgdTY0IHNucF9kZWZhdWx0X3BvbGljeSh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTEwMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2Lmg6MTAzOnZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0xMDQtdm9pZCBzZXZfZXNfdm1faW5pdChzdHJ1Y3Qga3ZtX3ZtICp2bSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz0xNz1zdGF0aWMgdm9pZCBlbmNyeXB0X3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24sXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy00Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYzo0ODp2b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jLTQ5LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYz0yMz1zdGF0aWMgc3RydWN0IGt2bV92bSAqc2V2X3ZtX2NyZWF0ZShib29sIGVzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTI5LVxcdGlmICghZXMpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jOjMwOlxcdFxcdHNldl92bV9pbml0KHZtKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMtMzEtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozODo1My40NjIwMzAwNzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5Mjc3NzY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNLVNWTSBJbml0aWFsaXphdGlvbiBmb3IgU0VWKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGBzZXZfdm1faW5pdGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0IHdpdGhpbiB0aGUgS1ZNLVNWTSBtb2R1bGUsIHNvIGBzZXZfdm1faW5pdGAgc2hvdWxkIGJlIHdoZXJlIHRoZSBndWVzdCBWTSBlbnZpcm9ubWVudCBnZXRzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYW5kIGluaXRpYWxpemVkIGZvciBTRVYuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgc3RlcHMgZm9yIHNldHRpbmcgdXAgbWVtb3J5IGVuY3J5cHRpb24sIGhhbmRsaW5nIHRoZSBndWVzdCdzIHNlY3JldHMsIGFuZCBjb25maWd1cmluZyB0aGUgU1ZNLXNwZWNpZmljIHNlY3VyaXR5IGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIGdyYXNwaW5nIGhvdyBTRVYgd29ya3MgYXQgdGhlIGxvd2VzdCBsZXZlbCB3aXRoaW4gdGhlIEtWTSBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUxMywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjU2LjQ1NDgxMDYzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTIyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTIyOlxcdHZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbjI5MjM6XFx0e1xcbjI5MjQ6XFx0XFx0c3dpdGNoIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSkge1xcbjI5MjU6XFx0XFx0Y2FzZSBLVk1fWDg2X0RFRkFVTFRfVk06XFxuMjkyNjpcXHRcXHRjYXNlIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNOlxcbjI5Mjc6XFx0XFx0XFx0YnJlYWs7XFxuMjkyODpcXHRcXHRjYXNlIEtWTV9YODZfU05QX1ZNOlxcbjI5Mjk6XFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9IHRydWU7XFxuMjkzMDpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4yOTMxOlxcdFxcdGNhc2UgS1ZNX1g4Nl9TRVZfRVNfVk06XFxuMjkzMjpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2guaGFzX3Byb3RlY3RlZF9zdGF0ZSA9IHRydWU7XFxuMjkzMzpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4yOTM0OlxcdFxcdGNhc2UgS1ZNX1g4Nl9TRVZfVk06XFxuMjkzNTpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQgPSAha3ZtLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbTtcXG4yOTM2OlxcdFxcdFxcdHRvX2t2bV9zZXZfaW5mbyhrdm0pLVxcdTAwM2VuZWVkX2luaXQgPSB0cnVlO1xcbjI5Mzc6XFx0XFx0XFx0YnJlYWs7XFxuMjkzODpcXHRcXHRkZWZhdWx0OlxcbjI5Mzk6XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJVbnN1cHBvcnRlZCBWTSB0eXBlICV1XFxcIiwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbjI5NDA6XFx0XFx0XFx0YnJlYWs7XFxuMjk0MTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM4OjU2LjQ1NTAyNTUzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODgyNjg4OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIEtWTV9YODZfU05QX1ZNIGFuZCBWaXJ0dWFsIE1hY2hpbmUgQ3JlYXRpb24qKlxuXG5IbW0sIGBLVk1fWDg2X1NOUF9WTWAuLi4gdGhhdCdzIGEgVk0gdHlwZSwgaXNuJ3QgaXQ/IE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyByZWxhdGVkIHRvIFNlY3VyZSBOZXN0ZWQgUGFnaW5nLCBvciBBTUQncyBTZWN1cmUgTmVzdGVkIFBhZ2luZywgYnV0IEkgbmVlZCB0byBjb25maXJtLiBJJ20gd29uZGVyaW5nOiBjYW4gYSB1c2VyIGFjdHVhbGx5ICpjcmVhdGUqIGEgVk0gb2YgdGhpcyBzcGVjaWZpYyB0eXBlIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydD8gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIGNvbmZpZ3VyYXRpb24gZXJyb3IgdGhhdCBzaG91bGQgYmUgcHJldmVudGVkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBwcm9iYWJseSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgVk0uIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBmdW5jdGlvbiBvciBjb2RlIGJsb2NrIHdoZXJlIHRoZSBgdm1fdHlwZWAgaXMgdmFsaWRhdGVkLiBTbyBJIHNob3VsZCBwcm9iYWJseSBsb29rIGZvciBga3ZtX2FyY2hfaW5pdF92bWAgb3Igd2hlcmV2ZXIgYHZtX3R5cGVgIGdldHMgY2hlY2tlZCBkdXJpbmcgdGhlIFZNIGNyZWF0aW9uIHByb2Nlc3MuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBndWFyZHJhaWxzIHByZXZlbnRpbmcgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSBzZWN1cmUgVk0gb24gaW5jb21wYXRpYmxlIGhhcmR3YXJlLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIGFyZWFzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBzdWZmaWNpZW50IHByb3RlY3Rpb24sIG9yIGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjAwLjMzNzcxNjgzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjE3NjUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTQwNT1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk0MTAtICAjZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXFx0M1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NDExOiAgI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdDRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTQxMi0gICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHQ1XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzQ6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3NS0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjI9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3MTpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjcyLVxcdFxcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODg9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTQtXFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk1OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTYtXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYwOS1cXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMDpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5MjI9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5MjctXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTI4OlxcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTI5LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDQ1PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkwLVxcdGlmIChzZXZfc25wX3N1cHBvcnRlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxOTE6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXFx0dm1fdHlwZXMgXFx1MDAyNj0gc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA1LVxcdFxcdHByX2luZm8oXFxcIlNFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNjpcXHRcXHRcXHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjA3LVxcdFxcdFxcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MzAwMz1pbnQgc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMDE3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MzAxODpcXHRzdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMwMTktXFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNT1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcxLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzI6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3My0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2OlxcdHJldHVybiB2bS1cXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3MD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDcyLSNpZmRlZiBfX3g4Nl82NF9fXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MzpcXHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDc0LSNlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XFx0VEVTVF9BU1NFUlRfRVEodm0tXFx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFxcdTAwMjZpbml0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTg3LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4OlxcdFxcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTIyPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE0NDpcXHRoYXZlX3NucCA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ1LVxcdFRFU1RfQVNTRVJUKCFoYXZlX3NucCB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTUzLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NDpcXHRcXHR0ZXN0X2ZsYWdzKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTU5LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MDpcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVxcdFxcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcXHRcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVxcdFxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNTQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI1NTpcXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI1NjpcXHRcXHR0ZXN0X3Nldl9zbW9rZShndWVzdF9zbnBfY29kZSwgS1ZNX1g4Nl9TTlBfVk0sIHNucF9kZWZhdWx0X3BvbGljeSgpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTowMi4yMzk4OTkwODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1NjcyOTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk1fWDg2X1NOUF9WTSBXb3J0aGluZXNzIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgS1ZNX1g4Nl9TTlBfVk1gIGlzIHRpZWQgZGlyZWN0bHkgdG8gYHNldl9zbnBfc3VwcG9ydGVkYCwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGFyZHdhcmUncyBTRVYtU05QIGNhcGFiaWxpdGllcyBkdXJpbmcgdGhlIGBzZXZfaGFyZHdhcmVfc2V0dXBgLiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBoYXZlIGl0LCBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGEgbm8tZ28sIGFuZCBga3ZtX2NyZWF0ZV92bWAgd2lsbCBlcnJvciBvdXQgd2l0aCBgLUVJTlZBTGAuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzLCBcImlmIGl0J3MgaW1wb3NzaWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLCB0aGVuIGl0J3MgYFdvcnRoRnV6emluZz1mYWxzZWBcIi4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHByb21wdC5cblxuQnV0IHdhaXQgYSBtaW51dGUsIHRoZSBwcm9tcHQgc2F5cyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gKnZpcnR1YWxpemVkIGVudmlyb25tZW50cyogbGlrZSBHQ0Ugb3IgUUVNVVwiLiBEb2VzIHN5emthbGxlciBldmVuIHJ1biBvbiBoYXJkd2FyZSB0aGF0IGNvdWxkIHN1cHBvcnQgU0VWLVNOUD8gQWgsIHN5emthbGxlciBjYW4gcnVuIGJhcmUgbWV0YWwgb3IgbmVzdGVkIFZNcywgdGhhdCdzIHJpZ2h0LiBTbywgaXQncyBub3Qgc2ltcGx5IFwiaW1wb3NzaWJsZVwiLCBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG5Ob3csIGlzIFNFVi1TTlAgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0U/IEFoYSwgdGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEdDRSBhY3R1YWxseSBzdXBwb3J0cyBBTUQgU0VWIGFuZCBTRVYtU05QIGluc3RhbmNlcywgc3BlY2lmaWNhbGx5IENvbmZpZGVudGlhbCBWTXMuIFRoYXQgY2hhbmdlcyBldmVyeXRoaW5nISBJdCBJUyBwb3NzaWJsZSB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIG9uIEdDRSBpZiB0aGUgaW5zdGFuY2UgdHlwZSBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4gQW5kLCB3aGlsZSBRRU1VIG1pZ2h0IHJlcXVpcmUgaG9zdCBoYXJkd2FyZSBzdXBwb3J0LCBHQ0UgKnByb3ZpZGVzKiB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGggKmlzKiByZWFjaGFibGUuXG5cbkNvbmNsdXNpb246IHRoaXMgcGF0Y2ggaXMgZnV6emFibGUsIHNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5KdXN0IHRvIGJlIHNhZmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCdzIGxvb2sgYXQgYENPTkZJR19LVk1fQU1EX1NFVmAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX0tWTWAuXG5cbkFsc28sIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGBndWVzdF9tZW1mZGAgcmVxdWlyZXMgYW55IHNwZWNpYWwgY29uZmlncy4gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IG5lZWQgYENPTkZJR19LVk1fUFJJVkFURV9NRU1gIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MTAuMTk2NjQwMTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyNTY4NzA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1BSSVZBVEVfTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToxMi40NzkyMjYxODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczNjc5NjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBHdWVzdCBNZW1vcnkgU2hhcmluZyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgc2hhcmluZyB3aXRoaW4gS1ZNIGd1ZXN0cywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYG1lbWZkYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGB2aXJ0L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYXNzb2NpYXRlZCB3aXRoIGBndWVzdF9tZW1mZGAuIEl04oCZbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycyBhcmUgYmVpbmcgdXNlZCBvciBjYW4gYmUgZW5hYmxlZCBmb3IgdGhlc2UgZ3Vlc3RzLiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIGVudHJ5IGdpdmVzIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG15IHdvcmsuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgYW5kIGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpdCwgYW5kIGlmIGl0J3MgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQyNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjE1LjIxNjAyNjE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY3NjkwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzND1LVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgaXMgYW4gZXh0ZW5zaW9uIHRvIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIHRoYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNTphbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM2LUtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM3OmluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM4OltndWVzdF9tZW1mZF9vZmZzZXQsIGd1ZXN0X21lbWZkX29mZnNldCArIG1lbW9yeV9zaXplXS4gIFRoZSB0YXJnZXQgZ3Vlc3RfbWVtZmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjMzOS1tdXN0IHBvaW50IGF0IGEgZmlsZSBjcmVhdGVkIHZpYSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEIG9uIHRoZSBjdXJyZW50IFZNLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTAtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7IC8qIHN0YXJ0IG9mIHRoZSB1c2Vyc3BhY2UgYWxsb2NhdGVkIG1lbW9yeSAqL1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzUxOlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1My1cXHRfX3UzMiBwYWQxO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTgtdXNlcnNwYWNlX2FkZHIgKHNoYXJlZCBtZW1vcnkpLiAgSG93ZXZlciwgXFxcInZhbGlkXFxcIiBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM2ND1XaGVuIG1hcHBpbmcgYSBnZm4gaW50byB0aGUgZ3Vlc3QsIEtWTSBzZWxlY3RzIHNoYXJlZCB2cy4gcHJpdmF0ZSwgaS5lIGNvbnN1bWVzXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNjU6dXNlcnNwYWNlX2FkZHIgdnMuIGd1ZXN0X21lbWZkLCBiYXNlZCBvbiB0aGUgZ2ZuJ3MgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzY2LXN0YXRlLiAgQXQgVk0gY3JlYXRpb24gdGltZSwgYWxsIG1lbW9yeSBpcyBzaGFyZWQsIGkuZS4gdGhlIFBSSVZBVEUgYXR0cmlidXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQxMD1UaGUgXFxcImZsYWdzXFxcIiBmaWVsZCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIG11c3QgYmUgJzAnLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MTctOlR5cGU6IHZtIGlvY3RsXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MTg6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkKGluKVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDE5LTpSZXR1cm5zOiBBIGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0MjE9S1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBjcmVhdGVzIGFuIGFub255bW91cyBmaWxlIGFuZCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjI6dGhhdCByZWZlcnMgdG8gaXQuICBndWVzdF9tZW1mZCBmaWxlcyBhcmUgcm91Z2hseSBhbmFsb2dvdXMgdG8gZmlsZXMgY3JlYXRlZFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDIzOnZpYSBtZW1mZF9jcmVhdGUoKSwgZS5nLiBndWVzdF9tZW1mZCBmaWxlcyBsaXZlIGluIFJBTSwgaGF2ZSB2b2xhdGlsZSBzdG9yYWdlLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDI0LWFuZCBhcmUgYXV0b21hdGljYWxseSByZWxlYXNlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLiAgVW5saWtlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MjU6XFxcInJlZ3VsYXJcXFwiIG1lbWZkX2NyZWF0ZSgpIGZpbGVzLCBndWVzdF9tZW1mZCBmaWxlcyBhcmUgYm91bmQgdG8gdGhlaXIgb3duaW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjYtdmlydHVhbCBtYWNoaW5lIChzZWUgYmVsb3cpLCBjYW5ub3QgYmUgbWFwcGVkLCByZWFkLCBvciB3cml0dGVuIGJ5IHVzZXJzcGFjZSxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQyNzphbmQgY2Fubm90IGJlIHJlc2l6ZWQgIChndWVzdF9tZW1mZCBmaWxlcyBkbyBob3dldmVyIHN1cHBvcnQgUFVOQ0hfSE9MRSkuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MjgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMC1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQzMTogIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQzMi1cXHRfX3U2NCBzaXplO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzYtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Mzc6Q29uY2VwdHVhbGx5LCB0aGUgaW5vZGUgYmFja2luZyBhIGd1ZXN0X21lbWZkIGZpbGUgcmVwcmVzZW50cyBwaHlzaWNhbCBtZW1vcnksXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MzgtaS5lLiBpcyBjb3VwbGVkIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgYXMgYSB0aGluZywgbm90IHRvIGEgXFxcInN0cnVjdCBrdm1cXFwiLiAgVGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0Mz1taWdyYXRpb24gb2YgYSB2aXJ0dWFsIG1hY2hpbmUuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDU6S1ZNIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1hcHBpbmcgZ3Vlc3RfbWVtZmQgdmlhIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OMixcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ0NjphbmQgbW9yZSBzcGVjaWZpY2FsbHkgdmlhIHRoZSBndWVzdF9tZW1mZCBhbmQgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGZpZWxkcyBpblxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ3OlxcXCJzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMlxcXCIsIHdoZXJlIGd1ZXN0X21lbWZkX29mZnNldCBpcyB0aGUgb2Zmc2V0XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDg6aW50byB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBGb3IgYSBnaXZlbiBndWVzdF9tZW1mZCBmaWxlLCB0aGVyZSBjYW4gYmUgYXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OS1tb3N0IG9uZSBtYXBwaW5nIHBlciBwYWdlLCBpLmUuIGJpbmRpbmcgbXVsdGlwbGUgbWVtb3J5IHJlZ2lvbnMgdG8gYSBzaW5nbGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MDpndWVzdF9tZW1mZCByYW5nZSBpcyBub3QgYWxsb3dlZCAoYW55IG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBjYW4gYmUgYm91bmQgdG9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQ1MTphIHNpbmdsZSBndWVzdF9tZW1mZCBmaWxlLCBidXQgdGhlIGJvdW5kIHJhbmdlcyBtdXN0IG5vdCBvdmVybGFwKS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ1Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDU0PXNwZWNpZmllZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEN1cnJlbnRseSBkZWZpbmVkIGZsYWdzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTYtICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDU3OiAgR1VFU1RfTUVNRkRfRkxBR19NTUFQICAgICAgICBFbmFibGUgdXNpbmcgbW1hcCgpIG9uIHRoZSBndWVzdF9tZW1mZCBmaWxlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NTgtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ2Nj1XaGVuIHRoZSBLVk0gTU1VIHBlcmZvcm1zIGEgUEZOIGxvb2t1cCB0byBzZXJ2aWNlIGEgZ3Vlc3QgZmF1bHQgYW5kIHRoZSBiYWNraW5nXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0Njc6Z3Vlc3RfbWVtZmQgaGFzIHRoZSBHVUVTVF9NRU1GRF9GTEFHX01NQVAgc2V0LCB0aGVuIHRoZSBmYXVsdCB3aWxsIGFsd2F5cyBiZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDY4OmNvbnN1bWVkIGZyb20gZ3Vlc3RfbWVtZmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHNoYXJlZCBvciBhIHByaXZhdGVcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ2OS1mYXVsdC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI2MTE9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNjQzLVxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjY0NDpcXHQgKiBPbmx5IHN1cHBvcnQgZ3Vlc3RfbWVtZmQgYmFja2VkIG1lbXNsb3RzIHdpdGggbWFwcGFibGUgbWVtb3J5LCBzaW5jZVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI2NDUtXFx0ICogdGhlcmUgYXJlbid0IGFueSBDb0NvIFZNcyB0aGF0IHN1cHBvcnQgb25seSBwcml2YXRlIG1lbW9yeSBvbiBhcm02NC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0NzQ9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTAzLVxcdFxcdFxcdC8qXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTUwNDpcXHRcXHRcXHQgKiBGb3IgZ3Vlc3RfbWVtZmQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgaXQgZmFpbGVkIHRvXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwNS1cXHRcXHRcXHQgKiBjcmVhdGUgYSBmb2xpbyB0byBiYWNrIHRoZSBtZW1vcnkuIEluZm9ybSB1c2Vyc3BhY2UuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTMzNDY9c3RhdGljIHU4IGt2bV9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzM1Ny1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzM1ODpcXHRcXHQvKiBUT0RPOiBDYWxsIGludG8gZ3Vlc3RfbWVtZmQgb25jZSBodWdlcGFnZXMgYXJlIHN1cHBvcnRlZC4gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTk6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJHZXQgcGZuK29yZGVyIGZyb20gZ3Vlc3RfbWVtZmRcXFwiKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNjAtXFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNDc9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Mi1cXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzM6XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc0OlxcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJ3MgaW52YWxpZGF0ZV9sb2NrIGlzIGhlbGQuXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc1LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMzk4PXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MzctXFx0ICogICAgICBiZWZvcmVoYW5kLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQzODpcXHQgKiAgIDMpIFRoZSBQRk4gb2YgdGhlIGd1ZXN0X21lbWZkIGhhcyBub3QgYWxyZWFkeSBiZWVuIHNldCB0byBwcml2YXRlXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDM5LVxcdCAqICAgICAgaW4gdGhlIFJNUCB0YWJsZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDA1Mj1zdGF0aWMgdm9pZCBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA3Ni1cXHQgKiBmYWlsIGluc3RlYWQgb2YgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGFuZCBoYW5naW5nIHRoZSB2Q1BVLCBlLmcuIGlmXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDc3OlxcdCAqIHRoZSBiYWNraW5nIGd1ZXN0X21lbWZkIHBhZ2UgaXMgdW5hdmFpbGFibGUuXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDc4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MTgzPXZvaWQgc2V2X2dtZW1fZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjM1LVxcdFxcdCAqIHVzZXJzcGFjZSBtYXkgYWxzbyBmcmVlIGdtZW0gcGFnZXMgZHVyaW5nIHJ1bi10aW1lIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTIzNjpcXHRcXHQgKiBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMgb24gdGhlIGd1ZXN0X21lbWZkLCBzbyBmbHVzaCB0aGVcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyMzctXFx0XFx0ICogY2FjaGUgZW50cmllcyBmb3IgdGhlc2UgcGFnZXMgYmVmb3JlIGZyZWUnaW5nIHRoZW0gYmFjayB0b1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yOTUyPXN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNS1cXHQgKiB0aGUgVERYLU1vZHVsZSwgYW5kIHRvIGVuc3VyZSB0aGUgbm8tZmFpbCBNTVUgcGF0aHMgc3VjY2VlZCwgZS5nLiBpZlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzAxNjpcXHQgKiBhIGNvbmN1cnJlbnQgUFVOQ0hfSE9MRSBvbiBndWVzdF9tZW1mZCB0cmlnZ2VycyByZW1vdmFsIG9mIFNQVEVzLlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzAxNy1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4OT1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMyMTMtXFx0ICogYmV0d2VlbiBtYXBwaW5nIHRoZSBwZm4gYW5kIG5vdywgYnV0IHNsb3RzX2xvY2sgcHJldmVudHMgbWVtc2xvdFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzIxNDpcXHQgKiB1cGRhdGVzLCBmaWxlbWFwX2ludmFsaWRhdGVfbG9jaygpIHByZXZlbnRzIGd1ZXN0X21lbWZkIHVwZGF0ZXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMjE1LVxcdCAqIG1tdV9ub3RpZmllciBldmVudHMgY2FuJ3QgcmVhY2ggUy1FUFQgZW50cmllcywgYW5kIEtWTSdzIGludGVybmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1NzM9Ym9vbCBrdm1fYXJjaF9ub19wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3OS0vKlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MDogKiBLVk0gZG9lc24ndCB5ZXQgc3VwcG9ydCBpbml0aWFsaXppbmcgZ3Vlc3RfbWVtZmQgbWVtb3J5IGFzIHNoYXJlZCBmb3IgVk1zXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgxLSAqIHdpdGggcHJpdmF0ZSBtZW1vcnkgKHRoZSBwcml2YXRlIHZzLiBzaGFyZWQgdHJhY2tpbmcgbmVlZHMgdG8gYmUgbW92ZWQgaW50b1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU4MjogKiBndWVzdF9tZW1mZCkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTgzLSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NC1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NjpcXHRfX3UzMiBndWVzdF9tZW1mZDtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDctXFx0X191MzIgcGFkMTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjQ1PXN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NTQ6I2RlZmluZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEXFx0X0lPV1IoS1ZNSU8sICAweGQ0LCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1NS0jZGVmaW5lIEdVRVNUX01FTUZEX0ZMQUdfTU1BUFxcdFxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY1Ny1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY1ODpzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NTktXFx0X191NjQgc2l6ZTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOD1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNDMtXFx0X191NjQgdXNlcnNwYWNlX2FkZHI7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjQ0OlxcdF9fdTY0IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDU6XFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIHBhZDE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYzNT1zdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQzLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ0OiNkZWZpbmUgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRFxcdF9JT1dSKEtWTUlPLCAgMHhkNCwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDUtI2RlZmluZSBHVUVTVF9NRU1GRF9GTEFHX01NQVBcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NDctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NDg6c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ5LVxcdF9fdTY0IHNpemU7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTE1Nz1URVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTU4OlRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bS0xNTktVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xOTY9VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ2V0LXJlZy1saXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxOTc6VEVTVF9HRU5fUFJPR1NfYXJtNjQgKz0gZ3Vlc3RfbWVtZmRfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTk4LVRFU1RfR0VOX1BST0dTX2FybTY0ICs9IG1tdV9zdHJlc3NfdGVzdFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00Mj1zdGF0aWMgdm9pZCB0ZXN0X21tYXBfY293KGludCBmZCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ2LVxcdG1lbSA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ3OlxcdFRFU1RfQVNTRVJUKG1lbSA9PSBNQVBfRkFJTEVELCBcXFwiQ29weS1vbi13cml0ZSBub3QgYWxsb3dlZCBieSBndWVzdF9tZW1mZC5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MTc0PXN0YXRpYyB2b2lkIHRlc3RfY29sbGFwc2UoaW50IGZkLCB1NjQgZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTE4Mi1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MTgzOlxcdCAqIFRvIGV2ZW4gcmVhY2ggdGhlIHBvaW50IHdoZXJlIHRoZSBndWVzdF9tZW1mZCBmb2xpb3Mgd2lsbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMTg0LVxcdCAqIGdldCBjb2xsYXBzZWQsIGJvdGggdGhlIHVzZXJzcGFjZSBhZGRyZXNzIGFuZCB0aGUgb2Zmc2V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoxODU6XFx0ICogd2l0aGluIHRoZSBndWVzdF9tZW1mZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gcG1kX3NpemUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0xODYtXFx0ICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjA4LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzoyMDk6XFx0ICogQWR2aXNpbmcgdGhlIHVzZSBvZiBodWdlIHBhZ2VzIGluIGd1ZXN0X21lbWZkIHNob3VsZCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMjEwLVxcdCAqIGZpbmUuLi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9MzQ4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9iaW5kaW5nKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgZmQsIHNpemVfdCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozNTg6c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfaW52YWxpZF9zaXplcyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM1OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCBndWVzdF9tZW1mZF9mbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2MC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2NC1cXHRmb3IgKHNpemUgPSAxOyBzaXplIFxcdTAwM2MgcGFnZV9zaXplOyBzaXplKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NTpcXHRcXHRmZCA9IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBzaXplLCBndWVzdF9tZW1mZF9mbGFncyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zNjYtXFx0XFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM2NzpcXHRcXHRcXHQgICAgXFxcImd1ZXN0X21lbWZkKCkgd2l0aCBub24tcGFnZS1hbGlnbmVkIHBhZ2Ugc2l6ZSAnMHglbHgnIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM2OC1cXHRcXHRcXHQgICAgc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3MjpzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9ndWVzdF9tZW1mZF9tdWx0aXBsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3My17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM3NzpcXHRmZDEgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgcGFnZV9zaXplLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM3OC1cXHRURVNUX0FTU0VSVChmZDEgIT0gLTEsIFxcXCJtZW1mZCBjcmVhdGlvbiBzaG91bGQgc3VjY2VlZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzozODQ6XFx0ZmQyID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSAqIDIsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzg1LVxcdFRFU1RfQVNTRVJUKGZkMiAhPSAtMSwgXFxcIm1lbWZkIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTM5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQwMDpzdGF0aWMgdm9pZCB0ZXN0X2d1ZXN0X21lbWZkX2ZsYWdzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDAxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA2LVxcdGZvciAoZmxhZyA9IEJJVCgwKTsgZmxhZzsgZmxhZyBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDA3OlxcdFxcdGZkID0gX192bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIHBhZ2Vfc2l6ZSwgZmxhZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MDgtXFx0XFx0aWYgKGZsYWcgXFx1MDAyNiB2YWxpZF9mbGFncykge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDA5LVxcdFxcdFxcdFRFU1RfQVNTRVJUKGZkIFxcdTAwM2U9IDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0MTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJndWVzdF9tZW1mZCgpIHdpdGggZmxhZyAnMHglbHgnIHNob3VsZCBzdWNjZWVkXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxMS1cXHRcXHRcXHRcXHQgICAgZmxhZyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQxNC1cXHRcXHRcXHRURVNUX0FTU0VSVChmZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDE1OlxcdFxcdFxcdFxcdCAgICBcXFwiZ3Vlc3RfbWVtZmQoKSB3aXRoIGZsYWcgJzB4JWx4JyBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00MTYtXFx0XFx0XFx0XFx0ICAgIGZsYWcpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00MjI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQyMzpcXHRpbnQgZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQoX192bSwgX19nbWVtX3NpemUsIF9fZmxhZ3MpO1xcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQyNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ0MTpzdGF0aWMgdm9pZCBfX3Rlc3RfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0NDM6XFx0dGVzdF9jcmVhdGVfZ3Vlc3RfbWVtZmRfbXVsdGlwbGUodm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDQ0OlxcdHRlc3RfY3JlYXRlX2d1ZXN0X21lbWZkX2ludmFsaWRfc2l6ZXModm0sIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ0NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDcxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDcyOnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmQodW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDczLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc3OlxcdHRlc3RfZ3Vlc3RfbWVtZmRfZmxhZ3Modm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NDc5OlxcdF9fdGVzdF9ndWVzdF9tZW1mZCh2bSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTQ4Mi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBHVUVTVF9NRU1GRF9GTEFHX01NQVApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo0ODM6XFx0XFx0X190ZXN0X2d1ZXN0X21lbWZkKHZtLCBHVUVTVF9NRU1GRF9GTEFHX01NQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNDg0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODYtXFx0aWYgKGZsYWdzIFxcdTAwMjYgR1VFU1RfTUVNRkRfRkxBR19JTklUX1NIQVJFRClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjQ4NzpcXHRcXHRfX3Rlc3RfZ3Vlc3RfbWVtZmQodm0sIEdVRVNUX01FTUZEX0ZMQUdfTU1BUCB8XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy00ODgtXFx0XFx0XFx0XFx0ICAgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz00OTM9c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh1OCAqbWVtLCB1NjQgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTA0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTA1OnN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUwNi17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTUzNC1cXHQgKiBVc2UgdGhlIG1heCBvZiB0aGUgaG9zdCBvciBndWVzdCBwYWdlIHNpemUgZm9yIGFsbCBvcGVyYXRpb25zLCBhc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTM1OlxcdCAqIEtWTSByZXF1aXJlcyBndWVzdF9tZW1mZCBmaWxlcyBhbmQgbWVtc2xvdHMgdG8gYmUgc2l6ZWQgdG8gbXVsdGlwbGVzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzYtXFx0ICogb2YgdGhlIGhvc3QgcGFnZSBzaXplLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01MzgtXFx0c2l6ZSA9IG1heF90KHNpemVfdCwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgcGFnZV9zaXplKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjUzOTpcXHRmZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgR1VFU1RfTUVNRkRfRkxBR19NTUFQIHxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEdVRVNUX01FTUZEX0ZMQUdfSU5JVF9TSEFSRUQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01NjE9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcwLVxcdCAqIE5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IEtWTV9DQVBfVk1fVFlQRVMuIEhvd2V2ZXIsIHRob3NlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHQgKiBzdXBwb3J0IGd1ZXN0X21lbWZkIGhhdmUgdGhhdCBzdXBwb3J0IGZvciB0aGUgZGVmYXVsdCBWTSB0eXBlLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTcyLVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzctXFx0Zm9yX2VhY2hfc2V0X2JpdCh2bV90eXBlLCBcXHUwMDI2dm1fdHlwZXMsIEJJVFNfUEVSX1RZUEUodm1fdHlwZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTc4OlxcdFxcdHRlc3RfZ3Vlc3RfbWVtZmQodm1fdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYzo1ODA6XFx0dGVzdF9ndWVzdF9tZW1mZF9ndWVzdCgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtNTgxLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjY1PXZvaWQgdm1fY3JlYXRlX2lycWNoaXAoc3RydWN0IGt2bV92bSAqdm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjY3OnN0YXRpYyBpbmxpbmUgaW50IF9fdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OC1cXHRcXHRcXHRcXHRcXHQgIHU2NCBmbGFncylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzA6XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzEtXFx0XFx0LnNpemUgPSBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2NzU6XFx0cmV0dXJuIF9fdm1faW9jdGwodm0sIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQsIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzYtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njc4OnN0YXRpYyBpbmxpbmUgaW50IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IHNpemUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02NzktXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY4MTpcXHRpbnQgZmQgPSBfX3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bSwgc2l6ZSwgZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD02OTE9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Mi1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo2OTM6XFx0XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NC1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5NS1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6Njk2OlxcdFxcdFxcdFxcdCB1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNjk3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD03MDE9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzAyLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjcwMzpcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgtNzA0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQzOD12b2lkIGt2bV9zZXRfZmlsZXNfcmxpbWl0KHUzMiBucl92Y3B1cylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy00NjktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ3MDpzdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ3MS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTQ5OS1cXHRmbGFncyA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjUwMDpcXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy01MDEtXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz04MDQ9c3RhdGljIHZvaWQgX192bV9tZW1fcmVnaW9uX2RlbGV0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy04MTgtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo4MTk6XFx0aWYgKChpbnQpcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgXFx1MDAzZT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6ODIwOlxcdFxcdGt2bV9mcmVlX2ZkKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtODIxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk0Nz1pbnQgX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTQ4LVxcdFxcdFxcdFxcdCBncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk0OTpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk1Ni1cXHRcXHQudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KWh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTU3OlxcdFxcdC5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NTg6XFx0XFx0Lmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTU5LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTY2PXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2Ny1cXHRcXHRcXHRcXHRncGFfdCBncGEsIHU2NCBzaXplLCB2b2lkICpodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk2ODpcXHRcXHRcXHRcXHR1MzIgZ3Vlc3RfbWVtZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk2OS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3MC1cXHRpbnQgcmV0ID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgZmxhZ3MsIGdwYSwgc2l6ZSwgaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGd1ZXN0X21lbWZkLCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9OTc5PXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgwLVxcdFxcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTgxOlxcdFxcdGludCBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTgyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg1LVxcdGlmIChmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NjpcXHRcXHRpZiAoZ3Vlc3RfbWVtZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODc6XFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDg5OlxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMDkwOlxcdFxcdFxcdGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBtZW1fc2l6ZSwgZ3Vlc3RfbWVtZmRfZmxhZ3MpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDkxLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA5Ny1cXHRcXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA5ODpcXHRcXHRcXHRndWVzdF9tZW1mZCA9IGt2bV9kdXAoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDk5LVxcdFxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMTpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCA9IGd1ZXN0X21lbWZkO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTAyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCA9IGd1ZXN0X21lbWZkX29mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEwMy1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkID0gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDUtXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMTktXFx0XFx0XFxcIiAgc2xvdDogJXUgZmxhZ3M6IDB4JXhcXFxcblxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEyMDpcXHRcXHRcXFwiICBndWVzdF9waHlzX2FkZHI6IDB4JWx4IHNpemU6IDB4JWxseCBndWVzdF9tZW1mZDogJWRcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMTIxLVxcdFxcdHJldCwgZXJybm8sIHNsb3QsIGZsYWdzLCBncGEsIHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMTIyOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTEyMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjk1OlxcdFxcdHJldCA9IGZhbGxvY2F0ZShyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZCwgbW9kZSwgZmRfb2Zmc2V0LCBsZW4pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjk2LVxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIFxcXCJmYWxsb2NhdGUoKSBmYWlsZWQgdG8gJXMgYXQgJWx4IChsZW4gPSAlbHUpLCBmZCA9ICVkLCBtb2RlID0gJXgsIG9mZnNldCA9ICVseFxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTctXFx0XFx0XFx0ICAgIHB1bmNoX2hvbGUgPyBcXFwicHVuY2ggaG9sZVxcXCIgOiBcXFwiYWxsb2NhdGVcXFwiLCBncGEsIGxlbixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTI5ODpcXHRcXHRcXHQgICAgcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQsIG1vZGUsIGZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTktXFx0fVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz0zNDY9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX21lbW9yeV9yZWdpb25fZmxhZ3Modm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg2LVxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODc6XFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg4LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTAtXFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5MTpcXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTItXFx0XFx0VEVTVF9BU1NFUlQociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTc6XFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzk4LVxcdFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00MDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0MDE6XFx0XFx0Y2xvc2UoZ3Vlc3RfbWVtZmQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDAyLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDA5PXN0YXRpYyB2b2lkIHRlc3RfYWRkX21heF9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ1ODpzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQoc3RydWN0IGt2bV92bSAqdm0sIGludCBtZW1mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzY6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNla3ZtX2ZkLCAwLCBcXFwiS1ZNIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0Nzc6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCB2bS1cXHUwMDNlZmQsIDAsIFxcXCJWTSdzIGZkIHNob3VsZCBmYWlsXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzktXFx0bWVtZmQgPSBrdm1fbWVtZmRfYWxsb2MoTUVNX1JFR0lPTl9TSVpFLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODA6XFx0dGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHZtLCBtZW1mZCwgMCwgXFxcIlJlZ3VsYXIgbWVtZmQoKSBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgxLVxcdGNsb3NlKG1lbWZkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgzLVxcdHZtMiA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODQ6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0yLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg1OlxcdHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZCh2bSwgbWVtZmQsIDAsIFxcXCJPdGhlciBWTSdzIGd1ZXN0X21lbWZkKCkgc2hvdWxkIGZhaWxcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDkyOlxcdG1lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDkzLVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBQQUdFX1NJWkU7IGkrKylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NDpcXHRcXHR0ZXN0X2ludmFsaWRfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkLCBpLCBcXFwiVW5hbGlnbmVkIG9mZnNldCBzaG91bGQgZmFpbFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTM6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIE1FTV9SRUdJT05fU0laRSAqIDUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjMtXFx0ICogRGVsZXRlIHRoZSBmaXJzdCBtZW1zbG90LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHJlY3JlYXRlIGl0IGV4Y2VwdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTI0OlxcdCAqIHdpdGggYSBcXFwiYmFkXFxcIiBvZmZzZXQgdGhhdCByZXN1bHRzIGluIG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyOS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTMwOlxcdCAqIFZlcmlmeSB0aGF0IG92ZXJsYXAgaW4gdGhlIGd1ZXN0X21lbWZkIGJpbmRpbmdzIChpLmUuIGluIGd1ZXN0X21lbWZkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzEtXFx0ICogZmlsZSBvZmZzZXRzKSwgYnV0IF9ub3RfIGluIHRoZSBHUEEgc3BhY2UsIGZhaWxzIHdpdGggLUVFWElTVC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM3LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTM4OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTM5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQwOlxcdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdCdzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDEtXFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ1LVxcdFRFU1RfQVNTRVJUKHIgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUVYSVNULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQ2OlxcdFxcdCAgICBcXFwiT3ZlcmxhcHBpbmcgZ3Vlc3RfbWVtZmQoKSBiaW5kaW5ncyBzaG91bGQgZmFpbCB3aXRoIEVFWElTVFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQ3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTctXFx0VEVTVF9BU1NFUlQociA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFRVhJU1QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTg6XFx0XFx0ICAgIFxcXCJPdmVybGFwcGluZyBndWVzdF9tZW1mZCgpIGJpbmRpbmdzIHNob3VsZCBmYWlsIHdpdGggRUVYSVNUXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2NS1cXHRURVNUX0FTU0VSVChyID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVFWElTVCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU2NjpcXHRcXHQgICAgXFxcIk92ZXJsYXBwaW5nIGd1ZXN0X21lbWZkKCkgYmluZGluZ3Mgc2hvdWxkIGZhaWwgd2l0aCBFRVhJU1RcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTIzMD1zdGF0aWMgdm9pZCBndWVzdF90ZXN0X3B1bmNoX2hvbGUodTY0IGJhc2VfZ3BhLCBib29sIHByZWNpc2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yMzYtXFx0ICogQ29udmVydCB0aGUgZW50aXJlIHJhbmdlIHRvIHByaXZhdGUsIHRoaXMgdGVzdGNhc2UgaXMgYWxsIGFib3V0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjM3OlxcdCAqIHB1bmNoaW5nIGhvbGVzIGluIGd1ZXN0X21lbWZkLCBpLmUuIHNoYXJlZCBtYXBwaW5ncyBhcmVuJ3QgbmVlZGVkLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTIzOC1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTI3MT1zdGF0aWMgdm9pZCBndWVzdF9jb2RlKHU2NCBiYXNlX2dwYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTI3NC1cXHQgKiBSdW4gdGhlIGNvbnZlcnNpb24gdGVzdCB0d2ljZSwgd2l0aCBhbmQgd2l0aG91dCBkb2luZyBmYWxsb2NhdGUoKSBvblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjI3NTpcXHQgKiB0aGUgZ3Vlc3RfbWVtZmQgYmFja2luZyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaGFyZWQgYW5kIHByaXZhdGUuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjc2LVxcdCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMjgwLVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6MjgxOlxcdCAqIFJ1biB0aGUgUFVOQ0hfSE9MRSB0ZXN0IHR3aWNlIHRvbywgb25jZSB3aXRoIHRoZSBlbnRpcmUgZ3Vlc3RfbWVtZmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0yODItXFx0ICogZmF1bHRlZCBpbiwgb25jZSB3aXRoIG9ubHkgdGhlIHRhcmdldCByYW5nZSBmYXVsdGVkIGluLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzozOTc6XFx0bWVtZmQgPSB2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQodm0sIG1lbWZkX3NpemUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTM5OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQyNS1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQyNjpcXHQgKiBBbGxvY2F0ZSBhbmQgZnJlZSBtZW1vcnkgZnJvbSB0aGUgZ3Vlc3RfbWVtZmQgYWZ0ZXIgY2xvc2luZyB0aGUgVk1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0Mjc6XFx0ICogZmQuICBUaGUgZ3Vlc3RfbWVtZmQgaXMgZ2lmdGVkIGEgcmVmZXJlbmNlIHRvIGl0cyBvd25pbmcgVk0sIGkuZS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MjgtXFx0ICogc2hvdWxkIHByZXZlbnQgdGhlIFZNIGZyb20gYmVpbmcgZnVsbHkgZGVzdHJveWVkIHVudGlsIHRoZSBsYXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6NDI5OlxcdCAqIHJlZmVyZW5jZSB0byB0aGUgZ3Vlc3RfbWVtZmQgaXMgYWxzbyBwdXQuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDMwLVxcdCAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToxNy4xODM3MjMyMjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjAzNzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgR3Vlc3QgTWVtZmQgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGd1ZXN0X21lbWZkYCBzdXBwb3J0IHJlbGllcyBvbiBlaXRoZXIgYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCBvciBgS1ZNX1g4Nl9TTlBfVk1gLiBUaGF0IG1ha2VzIHNlbnNlOyB0aG9zZSBWTSB0eXBlcyBoYXZlIHNlY3VyaXR5LXJlbGF0ZWQgY29uc2lkZXJhdGlvbnMgdGhhdCBwcm9iYWJseSBuZWNlc3NpdGF0ZSBzb21lIGZvcm0gb2YgcHJvdGVjdGVkIG1lbW9yeSBtYW5hZ2VtZW50LiBXYWl0IGEgbWludXRl4oCmIGBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTWAgaXMgYSAqc29mdHdhcmUqLXByb3RlY3RlZCBWTT8gVGhhdCdzIGludGVyZXN0aW5nLiBJIGhhZG4ndCB0aG91Z2h0IGFib3V0IHRoYXQuIFRoaXMgc3VnZ2VzdHMgd2UgbWlnaHQgYmUgYWJsZSB0byB0ZXN0IGFuZCB2YWxpZGF0ZSBgZ3Vlc3RfbWVtZmRgIGZ1bmN0aW9uYWxpdHkgZXZlbiB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBieSBsZXZlcmFnaW5nIHRoZSBzb2Z0d2FyZS1iYXNlZCBwcm90ZWN0aW9uIGZlYXR1cmVzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBhZHZhbnRhZ2UgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nLiBMZXQncyBkaWcgaW50byBgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1gIGEgYml0IG1vcmUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMgYnkgZXhhbWluaW5nIHRoZSBLY29uZmlnIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE0OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToyMC45OTk3NjQ5OThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzgwODU2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOToyMi45Nzc4NTY4MTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MjM0OTU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk1gIG9uIFNFVi1TTlAgVk1zKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk1gIGZsYWcsIGFuZCBpdCdzIGVuYWJsaW5nIGBndWVzdF9tZW1mZGAgZXZlbiB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBtb3JlIGVzdGFibGlzaGVkIFNFVi1TTlAgZnVuY3Rpb25hbGl0eT9cblxuSG9sZCBvbi4uLiBJJ20gbG9va2luZyBhdCB0aGUgcGF0Y2gsIGFuZCBpdCdzIG1vZGlmeWluZyBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAgYW5kIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYC4gTm93LCB0aG9zZSBmdW5jdGlvbnMgYXJlICpzcGVjaWZpY2FsbHkqIGNhbGxlZCB3aGVuIGBLVk1fQU1EX1NFVmAgaXMgZW5hYmxlZCwgYW5kIHRoZSB2aXJ0dWFsIG1hY2hpbmUgaXMsIG9mIGNvdXJzZSwgYW4gU0VWLVNOUCBWTS4gVGhhdCdzIGEgcmVkIGZsYWcuIFRoaXMgaGFzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBwcm90ZWN0aW9uIG9uIGEgcGxhdGZvcm0gSSBjYXJlIGFib3V0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24uXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAuIExldCdzIHNlZSBleGFjdGx5IHdoYXQncyBiZWluZyBhbHRlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYyMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjI2LjQyMDIwODY5NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTU3LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTU3OlxcdHZvaWQgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG41MTU4OlxcdHtcXG41MTU5OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG41MTYwOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG41MTYxOlxcdFxcbjUxNjI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuNTE2MzpcXHRcXG41MTY0OlxcdFxcdC8qXFxuNTE2NTpcXHRcXHQgKiBBbiB1bnN0YWJsZSByZXN1bHQgZm9yIFxcXCJpcyBTTlBcXFwiIGlzIGEtb2sgaGVyZSwgdGhhbmtzIHRvIG1tdV9sb2NrLlxcbjUxNjY6XFx0XFx0ICogVGhlIHZDUFUncyBWTVNBIEdQQSBpcyBpbnZhbGlkYXRlZCBiZWZvcmUgdGhlIHZDUFUgaXMgbWFkZSB2aXNpYmxlXFxuNTE2NzpcXHRcXHQgKiB0byBvdGhlciB0YXNrcywgYW5kIGNhbiBvbmx5IGJlY29tZSB2YWxpZCB3aGlsZSBob2xkaW5nIG1tdV9sb2NrLFxcbjUxNjg6XFx0XFx0ICogYWZ0ZXIgdGhlIFZNIGlzIGZ1bGx5IGNvbW1pdHRlZCB0byBiZWluZyBhbiBTTlAgVk0uXFxuNTE2OTpcXHRcXHQgKi9cXG41MTcwOlxcdFxcdGlmICghX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG41MTcxOlxcdFxcdFxcdHJldHVybjtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XFxuNTE3NDpcXHRcXHRcXHRncGFfdCBncGEgPSB0b19zdm0odmNwdSktXFx1MDAzZXNldl9lcy5zbnBfZ3Vlc3Rfdm1zYV9ncGE7XFxuNTE3NTpcXHRcXG41MTc2OlxcdFxcdFxcdGlmIChWQUxJRF9QQUdFKGdwYSkgXFx1MDAyNlxcdTAwMjZcXG41MTc3OlxcdFxcdFxcdCAgICBncGFfdG9fZ2ZuKGdwYSkgXFx1MDAzZT0gcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwMjZcXHUwMDI2XFxuNTE3ODpcXHRcXHRcXHQgICAgZ3BhX3RvX2dmbihncGEpIFxcdTAwM2MgcmFuZ2UtXFx1MDAzZWVuZClcXG41MTc5OlxcdFxcdFxcdFxcdGt2bV9tYWtlX3JlcXVlc3RfYW5kX2tpY2soS1ZNX1JFUV9WTVNBX1BBR0VfUkVMT0FELCB2Y3B1KTtcXG41MTgwOlxcdFxcdH1cXG41MTgxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MjYuNDIwNDI3Nzc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzYyMDY0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSBjaGVja2luZyBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoaXMgcGF0aCBpcyBvbmx5IHJlbGV2YW50IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBTRVYtU05QIGd1ZXN0LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gc29tZW9uZSBldmVuICpjcmVhdGUqIGFuIFNOUCBndWVzdCB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnQ/IFRoZSBhbnN3ZXIncyBhIHNvbGlkICpubyouIGBzZXZfc25wX3N1cHBvcnRlZGAgaXMgY2hlY2tlZCBpbiBgc2V2X2hhcmR3YXJlX3NldHVwYCwgd2hpY2ggcmVhZHMgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgc28gd2UncmUgcmVseWluZyBvbiB0aGUgY2hpcCBoZXJlLlxuXG5CdXQgdGhlbiBJIHJlY2FsbCB0aGF0IFN5emthbGxlciAqZG9lcyogcnVuIG9uIEdDRSBpbnN0YW5jZXMgdGhhdCBzdXBwb3J0IFNFVi1TTlAsIGEuay5hLiBDb25maWRlbnRpYWwgVk1zLiBUaGlzIHRocm93cyBhIHdyZW5jaCBpbiB0aGUgd29ya3MuIFRoZSBwcm9tcHQgSSdtIHdvcmtpbmcgd2l0aCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gU2luY2UgR0NFICpkb2VzKiBvZmZlciBTRVYtU05QIGluc3RhbmNlcywgdGhpcyBjb25kaXRpb24gaXMsIGluIGZhY3QsICpwb3NzaWJsZSouXG5cblRoZXJlZm9yZSwgSSdtIGxlYW5pbmcgdG93YXJkIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIHBhdGNoIGlzLCBpbiBwcmluY2lwbGUsIHJlYWNoYWJsZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWdzLiBJJ20gdGhpbmtpbmc6IGBLVk1fQU1EX1NFVmAsIGBLVk1fQU1EYCwgYW5kIGBLVk1gIGFyZSB0aGUgb2J2aW91cyBvbmVzLiBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgKm1pZ2h0KiBjb21lIGludG8gcGxheSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBUaG91Z2gsIGBLVk1fQU1EX1NFVmAgaXMgYWN0dWFsbHkgdGhlIG9uZSB0aGF0IGVuYWJsZXMgYEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFYCwgd2hpY2ggaW1wbGllcyBndWVzdF9tZW1mZCBpcyBlbmFibGVkLlxuXG5TbyBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIGZvciBgZ3Vlc3RfbWVtZmRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ1NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjMxLjk1NjYzNzAzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NzMzNzcyNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9QUklWQVRFX01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MzMuODIzOTgxODIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODUyMzg2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IHNoYXJpbmcgd2l0aGluIEtWTSBndWVzdHMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGBtZW1mZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgdmlydC9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzc29jaWF0ZWQgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBJdOKAmWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGJlaW5nIHVzZWQgb3IgY2FuIGJlIGVuYWJsZWQgZm9yIHRoZXNlIGd1ZXN0cy4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBlbnRyeSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSB3b3JrLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgaXQsIGFuZCBpZiBpdCdzIHJlbGV2YW50IHRvIHRoaXMgY3VycmVudCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNTMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTozNi42MDkyMjM1MzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjU1ODEyOTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR0VORVJJQ19QUklWQVRFX01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6MzguNDM0ODE2NTE3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MTYzNTM2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBmb3IgR3Vlc3QgTWVtb3J5IFNoYXJpbmcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IHNoYXJpbmcgd2l0aGluIEtWTSBndWVzdHMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGBtZW1mZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgdmlydC9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFzc29jaWF0ZWQgd2l0aCBgZ3Vlc3RfbWVtZmRgLiBJdOKAmWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGJlaW5nIHVzZWQgb3IgY2FuIGJlIGVuYWJsZWQgZm9yIHRoZXNlIGd1ZXN0cy4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBlbnRyeSBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBteSB3b3JrLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIHBpbnBvaW50IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgaXQsIGFuZCBpZiBpdCdzIHJlbGV2YW50IHRvIHRoaXMgY3VycmVudCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTo0MS4wNTExNzQ2NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDE4ODY2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3Vlc3RfbWVtZmQub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzNz1pbiBmbGFncyB0byBoYXZlIEtWTSBiaW5kIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGEgZ2l2ZW4gZ3Vlc3RfbWVtZmQgcmFuZ2Ugb2ZcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzODpbZ3Vlc3RfbWVtZmRfb2Zmc2V0LCBndWVzdF9tZW1mZF9vZmZzZXQgKyBtZW1vcnlfc2l6ZV0uICBUaGUgdGFyZ2V0IGd1ZXN0X21lbWZkXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzMzktbXVzdCBwb2ludCBhdCBhIGZpbGUgY3JlYXRlZCB2aWEgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRCBvbiB0aGUgY3VycmVudCBWTSwgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM0MT1ib3VuZHMgY2hlY2tzIGFwcGx5ICh1c2UgY29tbW9uIHNlbnNlKS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzUwLVxcdF9fdTY0IHVzZXJzcGFjZV9hZGRyOyAvKiBzdGFydCBvZiB0aGUgdXNlcnNwYWNlIGFsbG9jYXRlZCBtZW1vcnkgKi9cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1MTpcXHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzNTItXFx0X191MzIgZ3Vlc3RfbWVtZmQ7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ0NT1LVk0gY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgbWFwcGluZyBndWVzdF9tZW1mZCB2aWEgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yLFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDQ2OmFuZCBtb3JlIHNwZWNpZmljYWxseSB2aWEgdGhlIGd1ZXN0X21lbWZkIGFuZCBndWVzdF9tZW1mZF9vZmZzZXQgZmllbGRzIGluXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NDc6XFxcInN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yXFxcIiwgd2hlcmUgZ3Vlc3RfbWVtZmRfb2Zmc2V0IGlzIHRoZSBvZmZzZXRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ0OC1pbnRvIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEZvciBhIGdpdmVuIGd1ZXN0X21lbWZkIGZpbGUsIHRoZXJlIGNhbiBiZSBhdFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zMzQ2PXN0YXRpYyB1OCBrdm1fZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTMzNTctXFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjMzNTg6XFx0XFx0LyogVE9ETzogQ2FsbCBpbnRvIGd1ZXN0X21lbWZkIG9uY2UgaHVnZXBhZ2VzIGFyZSBzdXBwb3J0ZWQuICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zMzU5LVxcdFxcdFdBUk5fT05DRSgxLCBcXFwiR2V0IHBmbitvcmRlciBmcm9tIGd1ZXN0X21lbWZkXFxcIik7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzk9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ0LVxcdF9fdTY0IHVzZXJzcGFjZV9hZGRyO1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo0NTpcXHRfX3U2NCBndWVzdF9tZW1mZF9vZmZzZXQ7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTQ2LVxcdF9fdTMyIGd1ZXN0X21lbWZkO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM4PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00My1cXHRfX3U2NCB1c2Vyc3BhY2VfYWRkcjtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NDQ6XFx0X191NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0O1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC00NS1cXHRfX3UzMiBndWVzdF9tZW1mZDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NjkxPXZvaWQgdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTItXFx0XFx0XFx0XFx0Z3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NjkzOlxcdFxcdFxcdFxcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTQtaW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC02OTUtXFx0XFx0XFx0XFx0IGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjY5NjpcXHRcXHRcXHRcXHQgdTMyIGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTY5Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg9NzAxPXZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwMi1cXHRcXHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo3MDM6XFx0XFx0aW50IGd1ZXN0X21lbWZkX2ZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTcwNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NDc9aW50IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIoc3RydWN0IGt2bV92bSAqdm0sIHUzMiBzbG90LCB1MzIgZmxhZ3MsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk0OC1cXHRcXHRcXHRcXHQgZ3BhX3QgZ3BhLCB1NjQgc2l6ZSwgdm9pZCAqaHZhLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5NDk6XFx0XFx0XFx0XFx0IHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTUwLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTctXFx0XFx0Lmd1ZXN0X21lbWZkID0gZ3Vlc3RfbWVtZmQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk1ODpcXHRcXHQuZ3Vlc3RfbWVtZmRfb2Zmc2V0ID0gZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05NTktXFx0fTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05NjY9dm9pZCB2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHNsb3QsIHUzMiBmbGFncyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTY3LVxcdFxcdFxcdFxcdGdwYV90IGdwYSwgdTY0IHNpemUsIHZvaWQgKmh2YSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6OTY4OlxcdFxcdFxcdFxcdHUzMiBndWVzdF9tZW1mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTY5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtOTcwLVxcdGludCByZXQgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBzbG90LCBmbGFncywgZ3BhLCBzaXplLCBodmEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjk3MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgZ3Vlc3RfbWVtZmQsIGd1ZXN0X21lbWZkX29mZnNldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTk3Mi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05Nzk9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODAtXFx0XFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo5ODE6XFx0XFx0aW50IGd1ZXN0X21lbWZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy05ODIte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwODctXFx0XFx0XFx0dTMyIGd1ZXN0X21lbWZkX2ZsYWdzID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4ODpcXHRcXHRcXHRURVNUX0FTU0VSVCghZ3Vlc3RfbWVtZmRfb2Zmc2V0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg5LVxcdFxcdFxcdFxcdCAgICBcXFwiT2Zmc2V0IG11c3QgYmUgemVybyB3aGVuIGNyZWF0aW5nIG5ldyBndWVzdF9tZW1mZFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDEtXFx0XFx0cmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfbWVtZmQgPSBndWVzdF9tZW1mZDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTEwMjpcXHRcXHRyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9tZW1mZF9vZmZzZXQgPSBndWVzdF9tZW1mZF9vZmZzZXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTExMDMtXFx0fSBlbHNlIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz0xMjc0PXZvaWQgdm1fZ3Vlc3RfbWVtX2ZhbGxvY2F0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTY0IGJhc2UsIHU2NCBzaXplLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEyOTEtXFx0XFx0b2Zmc2V0ID0gZ3BhIC0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzoxMjkyOlxcdFxcdGZkX29mZnNldCA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X21lbWZkX29mZnNldCArIG9mZnNldDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI5My1cXHRcXHRsZW4gPSBtaW5fdCh1NjQsIGVuZCAtIGdwYSwgcmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgLSBvZmZzZXQpO1xcbi0tXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtPTE0PWt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgKz0gJChLVk0pL3BmbmNhY2hlLm9cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTU6a3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgKz0gJChLVk0pL2d1ZXN0X21lbWZkLm9cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTk5ND1zdGF0aWMgaW50IGt2bV9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjYtXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEIFxcdTAwMjZcXHUwMDI2XFxudmlydC9rdm0va3ZtX21haW4uYzoyMDI3OlxcdCAgICAobWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQgXFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkgfHxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwMjg6XFx0ICAgICBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCArIG1lbS1cXHUwMDNlbWVtb3J5X3NpemUgXFx1MDAzYyBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCkpXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTA3LVxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwODpcXHRcXHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVxcdTAwM2VndWVzdF9tZW1mZCwgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOS1cXHRcXHRpZiAocilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6NDMuMjUzMDY2MzQ4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTM3OTY2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCoqXG5cblJpZ2h0LCBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAuLi4gdGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgdGhlIGBndWVzdF9tZW1mZGAgZnVuY3Rpb25hbGl0eSwgaXNuJ3QgaXQ/IE9rYXksIHNvIHRoYXQncyB3aGVyZSB0byBzdGFydCB0byBzZWUgaG93IGBtZW1mZGAgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIEtWTSBndWVzdC4gTGV0J3MgdHJhY2UgYmFjayBmcm9tIHRoZSBjb25maWcgb3B0aW9uJ3MgZGVmaW5pdGlvbi4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhhdCBzZXQuIFdoZXJlIGV4YWN0bHkgaXMgdGhpcyBvcHRpb24gZGVmaW5lZCwgYW5kIHdoYXQgc3Vycm91bmRpbmcgY29udGV4dCBkb2VzIHRoYXQgZ2l2ZSBtZT8gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGZlZWwgZm9yIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ4NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjQ2LjAwNjg2NTc0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMzMTU3NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6NDcuODQwMDI4MDM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTgwMzEwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fR1VFU1RfTUVNRkQgU2VsZWN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLiBXaGF0IGNvZGUgcGF0aHMgYXJlIGRlcGVuZGVudCBvbiBpdCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIHByZXNlbmNlIG9yIGFic2VuY2U/IEdpdmVuIHRoZSBuYW1lLCBJJ20gYWxyZWFkeSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBLVk0gZ3Vlc3RzLCBzcGVjaWZpY2FsbHkgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIE15IGltbWVkaWF0ZSBtZW50YWwgcHJvY2VzcyBpcyB0byBxdWlja2x5IGRldGVybWluZSB3aGljaCBzeXN0ZW1zIG9yIGNvbXBvbmVudHMgYXJlIGNoZWNraW5nIGZvciB0aGlzIHZhbHVlLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQncyAqc2VsZWN0aW5nKiBpdCDigJMgd2hpY2ggZHJpdmVycywgc3Vic3lzdGVtcywgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgcXVlcnlpbmcgYW5kIG1ha2luZyBkZWNpc2lvbnMgYmFzZWQgb24gYEtWTV9HVUVTVF9NRU1GRGA/IEFyZSB3ZSB0YWxraW5nIGNvbXBpbGUtdGltZSBvcHRpb25zLCBydW50aW1lIGZlYXR1cmVzLCBvciBib3RoPyBJIG5lZWQgdGhlIGJpZyBwaWN0dXJlIHRvIGRldGVybWluZSB3aHkgaXQgaXMgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4Nzg0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6Mzk6NTEuNjM4MDYyMTMxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQzMTMxNDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjozOTo1My40ODExOTk5NTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1MDYwOTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0veDg2IENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgc28gaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBgS1ZNX0dVRVNUX01FTUZEYCBnZXRzIGF1dG8tc2VsZWN0ZWQgYnkgYEtWTV9YODZgIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBgWDg2XzY0YC4gVGhhdCBtZWFucyBpdCdzIGVzc2VudGlhbGx5IGFsd2F5cyBlbmFibGVkIG9uIHg4Ni02NCBzeXN0ZW1zLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlc2UgY29uZmlncyBlbmFibGVkOiBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0FNRGAsIGBLVk1gLCBhbmQganVzdCB0byBiZSBzdXJlLCBJJ2xsIHRocm93IGluIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCB0b28uIEl0IG1pZ2h0IG1ha2UgdGVzdGluZyBgZ3Vlc3RfbWVtZmRgIGEgYml0IHNtb290aGVyLCB5b3UgbmV2ZXIga25vdy5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHJldmlldyB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uOiBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBgc2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYCwgYGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZWAsIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYCwgYW5kIGBzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlYC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYCBhbmQgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2AgbG9vayBhd2Z1bGx5IGdlbmVyaWMuIFNob3VsZG4ndCB0aG9zZSBiZSBkZWZpbmVkIGluIHRoZSBnZW5lcmFsIHg4NiBLVk0gY29kZT8gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXkgYXJlIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIEl0J3MgYWx3YXlzIHRoZSBnZW5lcmljIHN0dWZmIHRoYXQgZ2V0cyB5b3UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjQzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjU4LjMzMTgxMTg2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDU5MDpcXHRpbnQga3ZtX2FyY2hfZ21lbV9wcmVwYXJlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBpbnQgbWF4X29yZGVyKVxcbjEwNTkxOlxcdHtcXG4xMDU5MjpcXHRcXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKGdtZW1fcHJlcGFyZSkoa3ZtLCBwZm4sIGdmbiwgbWF4X29yZGVyKTtcXG4xMDU5MzpcXHR9XFxuMTA1OTQ6XFx0I2VuZGlmXFxuMTA1OTU6XFx0XFxuMTA1OTY6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbjEwNTk3OlxcdHZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbjEwNTk4OlxcdHtcXG4xMDU5OTpcXHRcXHRrdm1feDg2X2NhbGwoZ21lbV9pbnZhbGlkYXRlX3JhbmdlKShrdm0sIHJhbmdlKTtcXG4xMDYwMDpcXHR9XFxuMTA2MDE6XFx0dm9pZCBrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4xMDYwMjpcXHR7XFxuMTA2MDM6XFx0XFx0a3ZtX3g4Nl9jYWxsKGdtZW1fZnJlZV9mb2xpbykoZm9saW8pO1xcbjEwNjA0OlxcdH1cXG4xMDYwNTpcXHQjZW5kaWZcXG4xMDYwNjpcXHQjZW5kaWZcXG4xMDYwNzpcXHRcXG4xMDYwODpcXHR2b2lkIGt2bV9maXh1cF9hbmRfaW5qZWN0X3BmX2Vycm9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MTYgZXJyb3JfY29kZSlcXG4xMDYwOTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjM5OjU4LjMzMjMyNjQzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU3OTE4ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgZ3Vlc3RfbWVtZmQuY2AgZm9yIEludmFsaWRhdGlvbioqXG5cblllcywgdGhhdCdzIHRoZSBsaWtlbHkgYXJlYS4gV2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSwgc28gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdGFyZ2V0IHRoZSBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFyb3VuZCBgX19rdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0YC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHN0cm9uZyBpbmRpY2F0b3I7IGludmFsaWRhdGlvbiBpcyB1c3VhbGx5IGludm9sdmVkIGluIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdoZW4gS1ZNIGd1ZXN0cyBhcmUgbWlzYmVoYXZpbmcgd2l0aCBtZW1vcnkgYW5kIG1lbWZkcy4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCwgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgaG93IGl0J3MgY2FsbGVkLCBhbmQgd2hhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgZXhpc3QuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgaXQgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBwcm9ibGVtLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo0MDowMS4zOTAyNDgyMjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0XFx0aWYgKCFmb3VuZF9tZW1zbG90KSB7XFxuIDE4MTpcXHRcXHRcXHRcXHRmb3VuZF9tZW1zbG90ID0gdHJ1ZTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0XFx0XFx0S1ZNX01NVV9MT0NLKGt2bSk7XFxuIDE4NDpcXHRcXHRcXHRcXHRrdm1fbW11X2ludmFsaWRhdGVfc3RhcnQoa3ZtKTtcXG4gMTg1OlxcdFxcdFxcdH1cXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0XFx0Zmx1c2ggfD0ga3ZtX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCBcXHUwMDI2Z2ZuX3JhbmdlKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0I2lmZGVmIENPTkZJR19IQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxOTA6XFx0XFx0XFx0a3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKGt2bSwgXFx1MDAyNmdmbl9yYW5nZSk7XFxuIDE5MTpcXHQjZW5kaWZcXG4gMTkyOlxcdFxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0aWYgKGZsdXNoKVxcbiAxOTU6XFx0XFx0XFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdGlmIChmb3VuZF9tZW1zbG90KVxcbiAxOTg6XFx0XFx0XFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcXG4gMTk5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NDA6MDEuMzkwMzM5MzgxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjA4ODE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFNFVi1TTlAgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGZyb20gYF9fa3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydGAuIFRoaXMgbWFrZXMgaXQgcmVhY2hhYmxlIGFuZCwgY3JpdGljYWxseSwgdGVzdGFibGUuIEdvb2QuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoIGFuZCBzdW1tYXJpemUgd2hhdCB3ZSd2ZSBnb3QuXG5cblRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6XG5cbi0gICBgX19zZXZfc25wX3JlbG9hZF92bXNhYFxuLSAgIGBzZXZfc25wX3JlbG9hZF92bXNhYFxuLSAgIGBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlYFxuLSAgIGBzZXZfZ21lbV9mcmVlX2ZvbGlvYFxuLSAgIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgXG4tICAgYGt2bV9hcmNoX2dtZW1fZnJlZV9mb2xpb2Bcbi0gICBgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZWBcblxuQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2A6XG5cbi0gICBgS1ZNX0FNRF9TRVZgXG4tICAgYEtWTV9BTURgXG4tICAgYEtWTWBcbi0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWBcblxuVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIEtWTSdzIEFNRCBTRVYtU05QIFZNU0EgaGFuZGxpbmcgYW5kIGd1ZXN0XFxfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCdzIHRvdWNoaW5nIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHksIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgZ3Vlc3RcXF9tZW1mZCBpcyBpbnZhbGlkYXRlZC4gVGhpcyBpbnZhbGlkYXRpb24gY2FuIGhhcHBlbiB0aHJvdWdoIG9wZXJhdGlvbnMgbGlrZSBgZmFsbG9jYXRlIHB1bmNoIGhvbGVgLCBhbmQgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgKnJlYWNoYWJsZSogZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0XFxfbWVtZmQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGFuIGlkZWFsIHdheSB0byBleGVyY2lzZSB0aGlzIGNvZGUuXG5cbkEgc2xpZ2h0IGNvbmNlcm7igJRkbyBJIGluY2x1ZGUgYEtWTV9TV19QUk9URUNURURfVk1gPyBJIHRoaW5rIGl0IG1pZ2h0IGJlIHdvcnRoIGl0LiBJdCBjb3VsZCBwb3RlbnRpYWxseSBoZWxwIHN5emthbGxlciBmdXp6IGBndWVzdF9tZW1mZGAgd2l0aG91dCBuZWNlc3NhcmlseSBuZWVkaW5nIFNFVi1TTlAgaGFyZHdhcmUgcHJlc2VudC4gWWVzLCB0aGUgc3BlY2lmaWMgU0VWLVNOUCBjYWxsYmFja3Mgd29uJ3QgdHJpZ2dlciBpbiB0aGF0IHNjZW5hcmlvLCBidXQgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgZ2VuZXJpYyBLVk0gY29kZSBsaWtlIGBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2VgIGFuZCBga3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvYC4gU28sIGl0J3MgYSBnb29kIGNvdmVyYWdlIGVuaGFuY2VtZW50LlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCBjb21wbGV0ZSwgdGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyB0b29sIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg1OCwiT3V0cHV0VG9rZW5zIjoyNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo0MDowOS4yNTEyMjQzMzdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzIyMzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwic2V2X2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwic2V2X2dtZW1fZnJlZV9mb2xpb1wiLFxuICAgIFwia3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlXCIsXG4gICAgXCJrdm1fYXJjaF9nbWVtX2ZyZWVfZm9saW9cIixcbiAgICBcInNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBoYW5kbGluZyBvZiBBTUQgU0VWLVNOUCBWTVNBIChWaXJ0dWFsIE1hY2hpbmUgU2F2ZSBBcmVhKSBhbmQgZ3Vlc3RfbWVtZmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gcmVsb2FkIFZNU0EgcGFnZXMgd2hlbiB0aGUgYmFja2luZyBndWVzdF9tZW1mZCBpcyBpbnZhbGlkYXRlZCAoZS5nLiwgdmlhIGZhbGxvY2F0ZSBwdW5jaCBob2xlKSBhbmQgY2hhbmdlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIEtWTSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdF9tZW1mZCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Nldl9zbnBfcmVsb2FkX3Ztc2FcIixcbiAgICBcInNldl9zbnBfcmVsb2FkX3Ztc2FcIixcbiAgICBcInNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2VcIixcbiAgICBcInNldl9nbWVtX2ZyZWVfZm9saW9cIixcbiAgICBcImt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZVwiLFxuICAgIFwia3ZtX2FyY2hfZ21lbV9mcmVlX2ZvbGlvXCIsXG4gICAgXCJzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgaGFuZGxpbmcgb2YgQU1EIFNFVi1TTlAgVk1TQSAoVmlydHVhbCBNYWNoaW5lIFNhdmUgQXJlYSkgYW5kIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIHJlbG9hZCBWTVNBIHBhZ2VzIHdoZW4gdGhlIGJhY2tpbmcgZ3Vlc3RfbWVtZmQgaXMgaW52YWxpZGF0ZWQgKGUuZy4sIHZpYSBmYWxsb2NhdGUgcHVuY2ggaG9sZSkgYW5kIGNoYW5nZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBLVk0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3RfbWVtZmQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[1] Phase: Succeeded StartedAt: 2026-06-25 22:42:30 +0000 UTC FinishedAt: 2026-06-25 22:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 22:42:30 +0000 UTC FinishedAt: 2026-06-25 22:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2] Phase: Succeeded StartedAt: 2026-06-25 22:42:30 +0000 UTC FinishedAt: 2026-06-26 02:39:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-25 22:42:30 +0000 UTC FinishedAt: 2026-06-26 02:39:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 22:42:30 +0000 UTC FinishedAt: 2026-06-25 22:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 22:42:30 +0000 UTC FinishedAt: 2026-06-25 22:42:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-1352690023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 22:42:54 +0000 UTC FinishedAt: 2026-06-25 23:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 22:42:54 +0000 UTC FinishedAt: 2026-06-25 23:06:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*485b847d-c5fa-4dbc-8cee-2d97a156028d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-1352690023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4f7109dd-da25-4a55-ba61-89abb5a556af", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-1331388413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 22:42:54 +0000 UTC FinishedAt: 2026-06-25 23:06:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*485b847d-c5fa-4dbc-8cee-2d97a156028d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-1352690023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4f7109dd-da25-4a55-ba61-89abb5a556af", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-1331388413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 23:06:22 +0000 UTC FinishedAt: 2026-06-25 23:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 23:06:22 +0000 UTC FinishedAt: 2026-06-25 23:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 23:06:22 +0000 UTC FinishedAt: 2026-06-25 23:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 23:06:22 +0000 UTC FinishedAt: 2026-06-25 23:06:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-1065365782/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 23:06:32 +0000 UTC FinishedAt: 2026-06-25 23:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 23:06:32 +0000 UTC FinishedAt: 2026-06-25 23:08:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4f7109dd-da25-4a55-ba61-89abb5a556af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-1331388413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 23:08:46 +0000 UTC FinishedAt: 2026-06-25 23:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 23:08:46 +0000 UTC FinishedAt: 2026-06-25 23:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 23:08:46 +0000 UTC FinishedAt: 2026-06-25 23:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 23:08:46 +0000 UTC FinishedAt: 2026-06-25 23:34:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*485b847d-c5fa-4dbc-8cee-2d97a156028d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-1065365782/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a8fb083b-b84a-49ba-b46c-8e9c5ec7587b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-2844717594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 23:08:46 +0000 UTC FinishedAt: 2026-06-25 23:34:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*485b847d-c5fa-4dbc-8cee-2d97a156028d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-1065365782/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a8fb083b-b84a-49ba-b46c-8e9c5ec7587b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-2844717594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 23:34:59 +0000 UTC FinishedAt: 2026-06-25 23:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 23:34:59 +0000 UTC FinishedAt: 2026-06-25 23:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 23:34:59 +0000 UTC FinishedAt: 2026-06-25 23:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 23:34:59 +0000 UTC FinishedAt: 2026-06-25 23:36:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8fb083b-b84a-49ba-b46c-8e9c5ec7587b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-2844717594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-25 23:37:08 +0000 UTC FinishedAt: 2026-06-26 02:39:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 23:37:08 +0000 UTC FinishedAt: 2026-06-26 02:39:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4f7109dd-da25-4a55-ba61-89abb5a556af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8fb083b-b84a-49ba-b46c-8e9c5ec7587b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-1331388413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-2844717594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 23:37:08 +0000 UTC FinishedAt: 2026-06-25 23:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 23:37:08 +0000 UTC FinishedAt: 2026-06-25 23:37:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-2124180411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-25 23:37:08 +0000 UTC FinishedAt: 2026-06-25 23:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 23:37:08 +0000 UTC FinishedAt: 2026-06-25 23:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 23:37:08 +0000 UTC FinishedAt: 2026-06-25 23:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 23:37:18 +0000 UTC FinishedAt: 2026-06-26 02:39:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc92x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__sev_snp_reload_vmsa","sev_snp_reload_vmsa","sev_gmem_invalidate_range","sev_gmem_free_folio","kvm_arch_gmem_invalidate_range","kvm_arch_gmem_free_folio","sev_snp_init_protected_guest_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD_SEV","KVM_AMD","KVM","KVM_SW_PROTECTED_VM"],"series_id":"3cb5e47c-af5f-4829-8f10-5c590ecb8245","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 23:37:18 +0000 UTC FinishedAt: 2026-06-26 02:39:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4f7109dd-da25-4a55-ba61-89abb5a556af,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8fb083b-b84a-49ba-b46c-8e9c5ec7587b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-1331388413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-build-action-2844717594/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjc92x/series-workflowjc92x-convert-artifact-2124180411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}