Name: series-workflowmwqkm Phase: Succeeded StartedAt: 2026-08-26 23:53:29 +0000 UTC FinishedAt: 2026-08-27 03:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[0] Phase: Succeeded StartedAt: 2026-08-26 23:53:29 +0000 UTC FinishedAt: 2026-08-26 23:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 23:53:29 +0000 UTC FinishedAt: 2026-08-26 23:57:17 +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": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "05e0fdc0-95d2-4628-8e51-69eba92968cf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "handle_vmptrld", "handle_vmptrst" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDssCiAgICAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0mIzM5O3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLiBJbiBgaGFuZGxlX3ZtcHRyc3RgLCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQ6IGluc3RlYWQgb2YgcmV0dXJuaW5nIDEgKGRvaW5nIG5vdGhpbmcpLCBpdCBub3cgc2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAgYW5kIHdyaXRlcyBpdCB0byBndWVzdCBtZW1vcnkuIGBjdXJyZW50X3ZtcHRyYCBpcyBhIGBncGFfdGAgKGEgNjQtYml0IGludGVnZXIpLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byB0aGUgZ3Vlc3QgdmlhIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGVyZSBhcmUgbm8gc3RydWN0cyB3aXRoIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgaW52b2x2ZWQuIFRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBLVk0gc2VsZnRlc3RzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiBuZXN0ZWQgVk1YIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEl0IGNoYW5nZXMgVk1QVFJMRCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24gYW5kIFZNUFRSU1QgdG8gcmV0dXJuIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAxLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5OWMyZWJiMDQxZDI2OTgwMTgzYWFlMTM0NjM1Njg2YmIwNGNiMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzo1NToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODk3LDYgJiM0Mzs1ODk3LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuJiM0MztcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG4mIzQzO1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuJiM0MztcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCBcdTAwMjZ2bXB0ciwgXHUwMDI2cikpXG4gXHRcdHJldHVybiByO1xuIFxuQEAgLTU5MDYsMTAgJiM0Mzs1OTEyLDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodm1wdHIgPT0gdm14LVx1MDAzZW5lc3RlZC52bXhvbl9wdHIpXG4gXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX1ZNUFRSTERfVk1YT05fUE9JTlRFUik7XG4gXG4tXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuLVx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHRpZiAodm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7XG4gXHRcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcdTAwMjZ2bXgtXHUwMDNlbmVzdGVkLnZtY3MxMl9jYWNoZTtcbiBcdFx0c3RydWN0IHZtY3NfaGRyIGhkcjtcbkBAIC01OTYyLDcgJiM0Mzs1OTY0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiYjNDM7XHRncGFfdCBjdXJyZW50X3ZtcHRyO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbiBcdGd2YV90IGd2YTtcbiBcdGludCByO1xuQEAgLTU5NzAsOCAmIzQzOzU5NzIsMTYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSlcbi1cdFx0cmV0dXJuIDE7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIeXBlci1WIFRMRlMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgYmVoYXZpb3Igb2YgVk1QVFJTVCB3aGVuIGVWTUNTIGlzIHVzZWRcbiYjNDM7XHQgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuXG4mIzQzO1x0ICovXG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuJiM0MztcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHRvX3ZteCh2Y3B1KSkpXG4mIzQzO1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbiYjNDM7XHRlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuaW5kZXggODJhOGVhNmI2NjFmMC4uYzViOWQyNmY2Y2RiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuQEAgLTI2NSwxNCAmIzQzOzI2NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2FkX2V2bWNzKHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1wdHJzdCh1NjQgKnZhbHVlKVxuLXtcbi1cdCp2YWx1ZSA9IGN1cnJlbnRfdnBfYXNzaXN0LVx1MDAzZWN1cnJlbnRfbmVzdGVkX3ZtY3MgXHUwMDI2XG4tXHRcdH5IVl9YNjRfTVNSX1ZQX0FTU0lTVF9QQUdFX0VOQUJMRTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlYWQodTY0IGVuY29kaW5nLCB1NjQgKnZhbHVlKVxuIHtcbiBcdHN3aXRjaCAoZW5jb2RpbmcpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IDZlNmY3MDAzNTUwOGEuLjI4MmI4YWFmZjc5OTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTEzMTgsNyAmIzQzOzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTtcbiBcdFwmIzM0O2xlYSAxZiglJXJpcCksICUlcjEwXFxuXFx0XCYjMzQ7XHRcdFx0XHRcXFxuIFx0XCYjMzQ7bGVhIDJmKCUlcmlwKSwgJSVyMTFcXG5cXHRcJiMzNDtcdFx0XHRcdFxcXG4gXHRmZXAgXCYjMzQ7MTogXCYjMzQ7IGluc24gXCYjMzQ7XFxuXFx0XCYjMzQ7XHRcdFx0XHRcdFxcXG4tXHRcJiMzNDt4b3IgJSVyOSwgJSVyOVxcblxcdFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdFwmIzM0O21vdiAkMCwgJSVyOWRcXG5cXHRcJiMzNDtcdFx0XHRcdFx0XFxcbiBcdFwmIzM0OzI6XFxuXFx0XCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiBcdFwmIzM0O21vdiAgJSVyOWIsICVbdmVjdG9yXVxcblxcdFwmIzM0O1x0XHRcdFx0XFxcbiBcdFwmIzM0O21vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cXG5cXHRcJiMzNDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDA0ZjVlMzRkZWEzYWUuLmNkODJhNmJlNjk2M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTMwOSwxMjYgJiM0MzszMDksOTEgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFxuICNpbmNsdWRlIFwmIzM0O2V2bWNzLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCYjMzQ7dm14b24gJVtwYV07IHNldG5hICVbcmV0XVwmIzM0O1xuLVx0XHQ6IFtyZXRdXCYjMzQ7PXJtXCYjMzQ7KHJldClcbi1cdFx0OiBbcGFdXCYjMzQ7bVwmIzM0OyhwaHlzKVxuLVx0XHQ6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7I2RlZmluZSBHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIF9fciwgX19wYSlcdFx0XFxcbiYjNDM7XHRfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSBcJiMzNDtbMHglbHhdIGhpdCAlc1wmIzM0OyxcdFxcXG4mIzQzO1x0XHQgICAgICAgX19wYSwgX19yIFx1MDAzYyAwID8gXCYjMzQ7Vk0tRmFpbFwmIzM0OyA6IGV4X3N0cihfX3IpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKGluc24pXHRcdFx0XHRcdFxcXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHU2NCB2bWNzX3BhKVx0XHRcdFx0XHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1NjQgZXJyb3JfY29kZTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dTggdmVjdG9yO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1OCBmYWlsZWQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGFzbSB2b2xhdGlsZShLVk1fQVNNX1NBRkUoX19zdHJpbmdpZnkoaW5zbikgXCYjMzQ7ICVbcGFdXCYjMzQ7KVx0XHRcXFxuJiM0MztcdFx0ICAgICBcJiMzNDtcXG5cXHRzZXRuYSAlW2ZhaWxlZF1cJiMzNDtcdFx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogS1ZNX0FTTV9TQUZFX09VVFBVVFModmVjdG9yLCBlcnJvcl9jb2RlKSxcdFxcXG4mIzQzO1x0XHQgICAgICAgW2ZhaWxlZF1cJiMzNDs9cW1cJiMzNDsoZmFpbGVkKVx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgOiBbcGFdXCYjMzQ7bVwmIzM0Oyh2bWNzX3BhKVx0XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDssIEtWTV9BU01fU0FGRV9DTE9CQkVSUyk7XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cmV0dXJuIHZlY3RvciA/IHZlY3RvciA6IGZhaWxlZCA/IC1FSU5WQUwgOiAwO1x0XHRcdFxcXG4mIzQzO31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih1NjQgdm1jc19wYSlcdFx0XHRcdFx0XFxcbiYjNDM7e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpO1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdEdVRVNUX0FTU0VSVF9WTVhfSU5TTl9TVUNDRUVERUQoaW5zbiwgcmV0LCB2bWNzX3BhKTtcdFx0XFxcbiB9XG4gXG4mIzQzO0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm14b24pXG4mIzQzO0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm1wdHJsZClcbiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bWNsZWFyKVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14b2ZmKHZvaWQpXG4ge1xuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7dm14b2ZmXCYjMzQ7KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgdm1jbGVhcih1NjQgdm1jc19wYSlcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCYjMzQ7dm1jbGVhciAlW3BhXTsgc2V0bmEgJVtyZXRdXCYjMzQ7XG4tXHRcdDogW3JldF1cJiMzNDs9cm1cJiMzNDsocmV0KVxuLVx0XHQ6IFtwYV1cJiMzNDttXCYjMzQ7KHZtY3NfcGEpXG4tXHRcdDogXCYjMzQ7Y2NcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cJiMzNDtcbi1cdFx0OiBbcmV0XVwmIzM0Oz1ybVwmIzM0OyhyZXQpXG4tXHRcdDogW3BhXVwmIzM0O21cJiMzNDsodm1jc19wYSlcbi1cdFx0OiBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgdm1wdHJzdCh2b2lkKVxuIHtcbi1cdHU2NCB0bXA7XG4mIzQzO1x0dTY0IHZhbHVlID0gMDtcbiBcdHU4IHJldDtcbiBcbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiBldm1jc192bXB0cnN0KHZhbHVlKTtcbi1cbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3ZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwmIzM0O1xuLVx0XHQ6IFt2YWx1ZV1cJiMzNDs9bVwmIzM0Oyh0bXApLCBbcmV0XVwmIzM0Oz1ybVwmIzM0OyhyZXQpXG4mIzQzO1x0XHQ6IFt2YWx1ZV1cJiMzNDs9bVwmIzM0Oyh2YWx1ZSksIFtyZXRdXCYjMzQ7PXJtXCYjMzQ7KHJldClcbiBcdFx0OiA6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuIFxuLVx0KnZhbHVlID0gdG1wO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBBIHdyYXBwZXIgYXJvdW5kIHZtcHRyc3QgdGhhdCBpZ25vcmVzIGVycm9ycyBhbmQgcmV0dXJucyB6ZXJvIGlmIHRoZVxuLSAqIHZtcHRyc3QgaW5zdHJ1Y3Rpb24gZmFpbHMuXG4tICovXG4tc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbi17XG4tXHR1NjQgdmFsdWUgPSAwO1xuLVx0dm1wdHJzdChcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0X19HVUVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7dm1wdHJzdCBmYWlsZWRcJiMzNDspO1xuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IDtcJiMzNDtcbi1cdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4tXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcbi1cdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4tXHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGVuYWJsZV9ldm1jcylcbi1cdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wmIzM0O1xuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCYjMzQ7dm1yZXN1bWU7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuLVx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUCksXG4tXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbi1cdHJldHVybiByZXQ7XG4mIzQzOyNkZWZpbmUgQlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlMoaW5zbilcdFx0XHRcdFxcXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHZvaWQpXHRcdFx0XHRcdFxcXG4mIzQzO3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCByZXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGlmIChlbmFibGVfZXZtY3MpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHJldHVybiBldm1jc18jI2luc24oKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1x0XHRcXFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1x0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgX19zdHJpbmdpZnkoaW5zbilcJiMzNDs7XCYjMzQ7XHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIFwmIzM0OzE6IDtcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JTUCksXHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1x0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcdFx0XHRcdFxcXG4mIzQzO1x0cmV0dXJuIHJldDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih2b2lkKVx0XHRcdFx0XHRcdFxcXG4mIzQzO3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCByZXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHJldCA9IF9fIyNpbnNuKCk7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX0dVRVNUX0FTU0VSVCghcmV0LCBfX3N0cmluZ2lmeShpbnNuKSBcJiMzNDsgaGl0IFZNLUZhaWxcJiMzNDspO1x0XHRcXFxuIH1cbiYjNDM7QlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlModm1sYXVuY2gpXG4mIzQzO0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtcmVzdW1lKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNhbGwodm9pZClcbiB7XG5AQCAtNTUwLDkgJiM0Mzs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3Ige1xuIH07XG4gXG4gc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpO1xuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiB2b2lkIHByZXBhcmVfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHZvaWQgKmd1ZXN0X3JpcCk7XG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiYjNDM7dm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiBcbiBib29sIGVwdF8xZ19wYWdlc19zdXBwb3J0ZWQodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuaW5kZXggZTE5ZThiNWEwOWM1YS4uNmExODE1ZmI5N2U5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuQEAgLTMzLDE0ICYjNDM7MzMsMTQgQEAgX19hc21fXyhcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHU2NCB2Y3B1X2lkKVxuIHtcbiBcdEdVRVNUX0FTU0VSVCh2bXgtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14KTtcbiBcdEdVRVNUX0FTU0VSVChlcHRfMWdfcGFnZXNfc3VwcG9ydGVkKCkpO1xuIFxuIFx0Kih1NjQgKil2bXgtXHUwMDNlc3RhY2sgPSB2Y3B1X2lkO1xuIFx0cHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpXG4gXHRyZXR1cm4gdm14O1xuIH1cbiBcbi1ib29sIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxuJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbiBcdHU2NCBmZWF0dXJlX2NvbnRyb2w7XG4gXHR1NjQgcmVxdWlyZWQ7XG5AQCAtMTYzLDI4ICYjNDM7MTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXG4gXHQvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm14b24pID0gdm1jc19yZXZpc2lvbigpO1xuLVx0aWYgKHZteG9uKHZteC1cdTAwM2V2bXhvbl9ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR2bXhvbih2bXgtXHUwMDNldm14b25fZ3BhKTtcbiB9XG4gXG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KVxuJiM0Mzt2b2lkIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuIFx0LyogTG9hZCBhIFZNQ1MuICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm1jcykgPSB2bWNzX3JldmlzaW9uKCk7XG4tXHRpZiAodm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0dm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpO1xuIFxuLVx0aWYgKHZtcHRybGQodm14LVx1MDAzZXZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHZtcHRybGQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbiBcbiBcdC8qIFNldHVwIHNoYWRvdyBWTUNTLCBkbyBub3QgbG9hZCBpdCB5ZXQuICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNlc2hhZG93X3ZtY3MpID0gdm1jc19yZXZpc2lvbigpIHwgMHg4MDAwMDAwMHVsO1xuLVx0aWYgKHZtY2xlYXIodm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdHZtY2xlYXIodm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGVwdF92cGlkX2NhcF9zdXBwb3J0ZWQodTY0IG1hc2spXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmNcbmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG5AQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7XG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiBcdFx0dm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8IENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqbmVzdGVkX3Rlc3RfZGF0YSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IGFhN2YzYjQwNWZkMzIuLmEwNmYzN2UwYmQwNjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTU1LDExICYjNDM7NTUsMTEgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsXG4gXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdCk7XG4gXHRldm1jc19lbmFibGUoKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcbiBcdC8qIEwyIGV4aXRzIHZpYSB2bWNhbGwgaWYgdGVzdCBmYWlscyAqL1xuIFx0c3luY193aXRoX2hvc3QoMik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbmluZGV4IDYzZWExNTMzZTRlYWQuLmI3YzJhMjU0MjkxZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG5AQCAtMjMsNyAmIzQzOzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7XG4gc3RhdGljIHZvaWQgZ3Vlc3RfdWRfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiB7XG4gXHR1ZF9jb3VudCYjNDM7JiM0Mzs7XG4tXHRyZWdzLVx1MDAzZXJpcCAmIzQzOz0gMzsgLyogVk1MQVVOQ0ggKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFZNTEFVTkNIIGluc24gY2FuJiMzOTt0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0XG4mIzQzO1x0ICogbHVja2lseSB0aGUgaW5zdHJ1Y3Rpb24gaXMgYWx3YXlzIHRocmVlIGJ5dGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZ3MtXHUwMDNlcmlwICYjNDM7PSAzO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbkBAIC04OSwyMCAmIzQzOzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdCk7XG4gXHRldm1jc19lbmFibGUoKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuJiM0MztcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IC0xKTtcbiBcbiBcdEdVRVNUX1NZTkMoNCk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbiBcdEdVRVNUX1NZTkMoNSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gLTF1O1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047XG4gXHRHVUVTVF9TWU5DKDYpO1xuIFxuQEAgLTExNywxNyAmIzQzOzEyMCwxNyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0Y3VycmVudF92cF9hc3Npc3QtXHUwMDNlbmVzdGVkX2NvbnRyb2wuZmVhdHVyZXMuZGlyZWN0aHlwZXJjYWxsID0gMTtcbiBcdCoodTMyICopKGh2X3BhZ2VzLVx1MDAzZXBhcnRpdGlvbl9hc3Npc3QpID0gMDtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSk7XG4gXHRHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmKSwgTk1JX1ZFQ1RPUik7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHQvKlxuIFx0ICogTk1JIGZvcmNlcyBMMi1cdTAwM2VMMSBleGl0LCByZXN1bWluZyBMMiBhbmQgaG9wZSB0aGF0IEVWTUNTIGlzXG4gXHQgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmdcbiBcdCAqIG9mIGwyX2d1ZXN0X2NvZGUoKS4gR1VFU1RfU1lOQyg5KSBjaGVja3MgdGhhdC5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFxuIFx0R1VFU1RfU1lOQygxMCk7XG4gXG5AQCAtMTM4LDEzICYjNDM7MTQxLDEzIEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHR2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfFxuIFx0XHRDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTtcbiBcdF9fc2V0X2JpdChNU1JfRlNfQkFTRSBcdTAwMjYgMHgxZmZmLCB2bXhfcGFnZXMtXHUwMDNlbXNyICYjNDM7IDB4NDAwKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCAmIzQzOz0gMjsgLyogcmRtc3IgKi9cbiBcbiBcdC8qIEVuYWJsZSBlbmxpZ2h0ZW5lZCBNU1IgYml0bWFwICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2VubGlnaHRlbm1lbnRzX2NvbnRyb2wubXNyX2JpdG1hcCA9IDE7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovXG4gXG5AQCAtMTUyLDE0ICYjNDM7MTU1LDE0IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRfX3NldF9iaXQoTVNSX0dTX0JBU0UgXHUwMDI2IDB4MWZmZiwgdm14X3BhZ2VzLVx1MDAzZW1zciAmIzQzOyAweDQwMCk7XG4gXHQvKiBNYWtlIHN1cmUgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVAgaXMgc2V0ICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdC8qIE1ha2Ugc3VyZSB3ZSBkb24mIzM5O3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi9cbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgJiM0Mzs9IDM7IC8qIHZtY2FsbCAqL1xuIFxuIFx0LyogTm93IHRlbGwgS1ZNIHdlJiMzOTt2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqL1xuIFxuQEAgLTE2NywyMSAmIzQzOzE3MCwyOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0ICogTDIgVExCIGZsdXNoIHRlc3QuIEZpcnN0IFZNQ0FMTCBzaG91bGQgYmUgaGFuZGxlZCBkaXJlY3RseSBieSBMMCxcbiBcdCAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLlxuIFx0ICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovXG4gXHQvKiBFbmFibGUgc3ludGhldGljIHZtZXhpdCAqL1xuIFx0Kih1MzIgKikoaHZfcGFnZXMtXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAxO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX1NZTkMoMTEpO1xuIFxuLVx0LyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovXG4mIzQzO1x0LyogVk1QVFJMRCBpbnN0cnVjdGlvbiBjYXVzZXMgI1VEIGFmdGVyIGVubGlnaHRlbmVkIFZNTEFVTkNIICovXG4mIzQzO1x0R1VFU1RfQVNTRVJUKF9fdm1wdHJsZChodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEuIEdVRVNUX1NZTkMoMTIpIHNpZ25hbHNcbiYjNDM7XHQgKiB0aGUgaG9zdCB0byBlbmFibGUgZ3Vlc3RfdWRfaGFuZGxlcigpIHdoaWNoIGNhbm5vdCBiZSBlbmFibGVkIGJlZm9yZWhhbmRcbiYjNDM7XHQgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdEdVRVNUX1NZTkMoMTIpO1xuIFx0ZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5AQCAtMjUzLDcgJiM0MzsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAzLCB2bXhfcGFnZXNfZ3ZhLCBodl9wYWdlc19ndmEsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xuIFx0dmNwdV9zZXRfbXNyKHZjcHUsIEhWX1g2NF9NU1JfVlBfSU5ERVgsIHZjcHUtXHUwMDNlaWQpO1xuIFxuLVx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcbiBcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIE5NSV9WRUNUT1IsIGd1ZXN0X25taV9oYW5kbGVyKTtcbiBcbiBcdHByX2luZm8oXCYjMzQ7UnVubmluZyBMMSB3aGljaCB1c2VzIEVWTUNTIHRvIHJ1biBMMlxcblwmIzM0Oyk7XG5AQCAtMjgzLDcgJiM0MzsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0XHQvKiBGb3JjZSBpbW1lZGlhdGUgTDItXHUwMDNlTDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi9cbiBcdFx0aWYgKHN0YWdlID09IDgpIHtcbi1cdFx0XHRwcl9pbmZvKFwmIzM0O0luamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7SW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcXG5cJiMzNDspO1xuIFx0XHRcdGluamVjdF9ubWkodmNwdSk7XG4gXHRcdH1cbiBcbkBAIC0yOTMsOSAmIzQzOzMwMywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgKiBLVk1fU1RBVEVfTkVTVEVEX0VWTUNTIGlzIG5vdCBsb3N0LlxuIFx0XHQgKi9cbiBcdFx0aWYgKHN0YWdlID09IDkpIHtcbi1cdFx0XHRwcl9pbmZvKFwmIzM0O1RyeWluZyBleHRyYSBLVk1fR0VUX05FU1RFRF9TVEFURS9LVk1fU0VUX05FU1RFRF9TVEFURSBjeWNsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHByX2RlYnVnKFwmIzM0O1RyeWluZyBleHRyYSBLVk1fR0VUX05FU1RFRF9TVEFURS9LVk1fU0VUX05FU1RFRF9TVEFURSBjeWNsZVxcblwmIzM0Oyk7XG4gXHRcdFx0dmNwdSA9IHNhdmVfcmVzdG9yZV92bSh2bSwgdmNwdSk7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhZ2UgPT0gMTIpIHtcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7VHJ5aW5nIGVubGlnaHRlbmVkIFZNTEFVTkNIIHdpdGggYW4gaW52YWxpZCBQVFJcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9rdm1fYnVzbG9ja190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuaW5kZXggMjVhMTgyYmUwMGE5Ny4uMzM3ZDNjMjhiYzZkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuQEAgLTQyLDEzICYjNDM7NDIsMTMgQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7XG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXG5pbmRleCBiOTc0Y2ZiMzQ3ZDZlLi4xZjRhNWU0NGE2ZWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xuQEAgLTMwLDEzICYjNDM7MzAsMTMgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4mIzQzO1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQoMCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCAyNmI0NzRiZjEzNTM1Li43OTg3Y2U1MGMzODI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuQEAgLTkzLDggJiM0Mzs5Myw4IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0dm9pZCAqbDJfcmlwO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4mIzQzO1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0aWYgKHZteC1cdTAwM2VlcHRwX2dwYSlcbiBcdFx0bDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDtcbkBAIC0xMDQsNyAmIzQzOzEwNCw3IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTtcbiBcbiBcdEdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xuaW5kZXggZTA4YzZiMDY5N2U1MC4uMTFmZTRhMzFlZGEwYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcbkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcbiBcdFx0XHRcdFx0ICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTtcbiBcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zID0gMDtcbiBcdH0gZWxzZSB7XG4tXHRcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSkpO1xuLVx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHRlc3RfZGF0YSkpO1xuJiM0MztcdFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih0ZXN0X2RhdGEpO1xuJiM0MztcdFx0bG9hZF92bWNzKHRlc3RfZGF0YSk7XG4gXG4gXHRcdHByZXBhcmVfdm1jcyh0ZXN0X2RhdGEsIE5VTEwpO1xuIFx0XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCkpO1xuQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4gXHRcdFx0ZXhpdF9pbnNuX2xlbiA9IHZtY2ItXHUwMDNlY29udHJvbC5uZXh0X3JpcCAtIHZtY2ItXHUwMDNlc2F2ZS5yaXA7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtY2ItXHUwMDNlc2F2ZS5yaXAsICh1NjQpbDJfaW5zdHJ1Y3Rpb24pO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdEdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApO1xuJiM0MztcdFx0XHRpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCk7XG4gXHRcdFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdFx0XHRleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooR1VFU1RfUklQKSwgKHU2NClsMl9pbnN0cnVjdGlvbik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSlcbiB7XG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApO1xuJiM0MztcdHZlY3RvciA9PSBTU19WRUNUT1IgPyB2bWxhdW5jaCgpIDogdm1yZXN1bWUoKTtcbiBcbiBcdGlmICh2ZWN0b3IgPT0gRkFLRV9UUklQTEVfRkFVTFRfVkVDVE9SKVxuIFx0XHRyZXR1cm47XG5AQCAtMTI1LDkgJiM0MzsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4gXG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG5pbmRleCA4YzJiYTk2NzQ1NThlLi4xMDFjMWZlNzllZWI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmNcbkBAIC00MCwyMSAmIzQzOzQwLDIxIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1aW50cHRyX3Qgc2F2ZV9jcjM7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4mIzQzO1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHQvKiBUcnkgdG8gcnVuIEwyIHdpdGggaW52YWxpZCBDUjMgYW5kIG1ha2Ugc3VyZSBpdCBmYWlscyAqL1xuIFx0c2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7XG4gXHR2bXdyaXRlKEdVRVNUX0NSMywgLTF1bGwpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09XG4gXHRcdCAgICAgKEVYSVRfUkVBU09OX0ZBSUxFRF9WTUVOVFJZIHwgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSkpO1xuIFxuIFx0LyogTm93IHJlc3RvcmUgQ1IzIGFuZCBtYWtlIHN1cmUgTDIgcnVucyBzdWNjZXNzZnVsbHkgKi9cbiBcdHZtd3JpdGUoR1VFU1RfQ1IzLCBzYXZlX2NyMyk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xuaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmNcbkBAIC01NSwxMiAmIzQzOzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSxcbiBcdHU2NCBleGl0X3F1YWw7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4mIzQzO1x0bG9hZF92bWNzKHZteCk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9lbnRyeSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXG4gXHQvKiBWZXJpZnkgd2UgZ290IGFuIEVQVCB2aW9sYXRpb24gZXhpdCAqL1xuIFx0X19HVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTixcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5pbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5AQCAtODYsOCAmIzQzOzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxuIFx0XHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhO1xuIFx0XHR1MzIgY29udHJvbDtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4mIzQzO1x0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdGNvbnRyb2wgPSB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpO1xuQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSlcbiBcdFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTtcbiBcdFx0dm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHRcdHZtbGF1bmNoKCk7XG4gXHRcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSA9IGRhdGE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXG5pbmRleCAxOGY3NjU4MzViZjRjLi5iMmZjN2YwYjViM2M4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcbkBAIC0xMDUsOCAmIzQzOzEwNSw4IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdC8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IGxvb2tzIGFscmlnaHQgYmVmb3JlIGxhdW5jaGluZyBMMiAqL1xuIFx0Y2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dm13cml0ZShUU0NfTVVMVElQTElFUl9ISUdILCBUU0NfTVVMVElQTElFUl9MMiBcdTAwM2VcdTAwM2UgMzIpO1xuIFxuIFx0LyogbGF1bmNoIEwyICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdC8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xuaW5kZXggNTA3MzkxYWIyYzkzMC4uZjg4NDI3ZTkyNWZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbkBAIC05OCwxNyAmIzQzOzk4LDE3IEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4mIzQzO1x0bG9hZF92bWNzKHZteCk7XG4gXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiBcbiBcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuIFx0d2hpbGUgKDEpIHtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuLVx0XHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdFx0dm1yZXN1bWUoKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBkMWVkYWZkNWFmNzU1Li4zNzdkZjA5ZTU4MmFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC03OCw4ICYjNDM7NzgsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKmFyZylcbiBcdFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKSB7XG4gXHRcdFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdFx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuJiM0MztcdFx0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0XHRcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFx0XHRcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuY1xuaW5kZXggNGExMDU2YTZjYjhkYy4uMzhjOTY4OWFjNjAxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuY1xuQEAgLTc1LDMyICYjNDM7NzUsMzIgQEAgdm9pZCB2bXhfbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRHVUVTVF9TWU5DKDQpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCB2bXhfbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHRHVUVTVF9TWU5DKDUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuJiM0MztcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuJiM0MztcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGUgbGF1bmNoZWQgc3RhdGUgaXMgcHJlc2VydmVkLiAgKi9cbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfU1lOQyg3KTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICYjNDM7IDMpO1xuQEAgLTEwOCwyOCAmIzQzOzEwOCwyOCBAQCBzdGF0aWMgdm9pZCB2bXhfbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTKTtcbiBcdHZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFx0R1VFU1RfU1lOQyg4KTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiBcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCAweGMwZmZlZSk7XG4gXHRHVUVTVF9TWU5DKDkpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZlZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSkpO1xuJiM0MztcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIFx0R1VFU1RfU1lOQygxMyk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2ZsYXR0ZW5fXykpIGd1ZXN0X2NvZGUodm9pZCAqYXJnKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xuaW5kZXggMGQ4MzUxNmY0YmQwOC4uYmIzMWExYmE4OTMyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXG5AQCAtMjUsMTIgJiM0MzsyNSwxMiBAQCB2b2lkIGwxX2d1ZXN0X2NvZGVfdm14KHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4mIzQzO1x0bG9hZF92bWNzKHZteCk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgYSB0cmlwbGUgZmF1bHQgZXZlbnQgaW5qZWN0ZWQuICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxUKTtcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbmluZGV4IDQ2M2Y3M2FhOTE1OWEuLmZlMjljODY5YTIzNTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuY1xuQEAgLTM4LDggJiM0MzszOCw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKVxuIHtcbiBcdHUzMiBjb250cm9sO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTUzLDE0ICYjNDM7NTMsMTQgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHVuc2lnbmVkIGxvbmcgaGlnaF9ncGEpXG4gXG4gXHQvKiBUcnkgdG8gbGF1bmNoIEwyIHdpdGggdGhlIG1lbW9yeS1iYWNrZWQgQVBJQy1hY2Nlc3MgYWRkcmVzcy4gKi9cbiBcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdHZtd3JpdGUoQVBJQ19BQ0NFU1NfQUREUiwgaGlnaF9ncGEpO1xuIFxuIFx0LyogVHJ5IHRvIHJlc3VtZSBMMiB3aXRoIHRoZSB1bmJhY2tlZCBBUElDLWFjY2VzcyBhZGRyZXNzLiAqL1xuIFx0R1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbmluZGV4IGY5Yjg4YTZmNjExM2QuLmU1NzgyMjFkYTI0N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbkBAIC0zMyw4ICYjNDM7MzMsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1MzIgY29udHJvbDtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC02Miw3ICYjNDM7NjIsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIFJ1biBMMiB0byBzd2l0Y2ggdG8geDJBUElDIG1vZGUsIHdoaWNoIGluIHR1cm4gd2lsbCB1bmluaGliaXQgQVBJQ3YsXG4gXHQgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0dm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFx1MDAyNiBNU1JfSUEzMl9BUElDQkFTRV9FWFREKTtcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIGhhbmRsZXMgdGhlIHgyQVBJQyA9XHUwMDNlIHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyXG4gXHQgKiBpcyBhY3RpdmUuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFx1MDAyNiBNU1JfSUEzMl9BUElDQkFTRV9FWFREKSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbmluZGV4IGM4Mzc5MTI0YjMxNzIuLjMwMTc5MzhmYTk5MzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG5AQCAtNDEsOCAmIzQzOzQxLDggQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0FTU0VSVCghKHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgXHUwMDI2IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8XG4gXHRcdCAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIFx1MDAyNiBTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG5pbmRleCA3NTA3M2VmYTkyNmRhLi5iMzY1MWM1YWIxMzg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbkBAIC0zNyw4ICYjNDM7MzcsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTtcbiBcbiBcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0Z3Vlc3RfY3I0IFx1MDAyNj0gflg4Nl9DUjRfTEE1NztcbiBcdHZtd3JpdGUoR1VFU1RfQ1I0LCBndWVzdF9jcjQpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuIFxuIFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdEdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbmluZGV4IGViODAyMWMzM2NkNDMuLmNkYTUzZGYzMzg4OGUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbkBAIC03MSw5ICYjNDM7NzEsOSBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dTY0IGwxX3RzY19kZWFkbGluZSwgbDJfdHNjX2RlYWRsaW5lO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0ICAgICEoY3RybF9leGl0X3Jldi5jbHIgXHUwMDI2IFZNX0VYSVRfU0FWRV9WTVhfUFJFRU1QVElPTl9USU1FUikpXG4gXHRcdHJldHVybjtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0dm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXG5AQCAtMTEwLDcgJiM0MzsxMTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFxuIFx0bDFfdm14X3B0X3N0YXJ0ID0gKHJkdHNjKCkgXHUwMDNlXHUwMDNlIHZteF9wdF9yYXRlKSBcdTAwM2NcdTAwM2Mgdm14X3B0X3JhdGU7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXG4gXHRsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZGxlX3ZtcHRybGQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3ZtcHRyc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIG5lc3RlZCBWTVggd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSXQgY2hhbmdlcyBWTVBUUkxEIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBhbmQgVk1QVFJTVCB0byByZXR1cm4gdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk5YzJlYmIwNDFkMjY5ODAxODNhYWUxMzQ2MzU2ODZiYjA0Y2IwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjU1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01ODk3LDYgJiM0Mzs1ODk3LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKQogCQlyZXR1cm4gMTsKIAomIzQzOwkvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7CiYjNDM7CQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwogCWlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCAmYW1wO3ZtcHRyLCAmYW1wO3IpKQogCQlyZXR1cm4gcjsKIApAQCAtNTkwNiwxMCAmIzQzOzU5MTIsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodm1wdHIgPT0gdm14LSZndDtuZXN0ZWQudm14b25fcHRyKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpOwogCi0JLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KLQlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKQotCQlyZXR1cm4gMTsKLQogCWlmICh2bXgtJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSAmYW1wO3ZteC0mZ3Q7bmVzdGVkLnZtY3MxMl9jYWNoZTsKIAkJc3RydWN0IHZtY3NfaGRyIGhkcjsKQEAgLTU5NjIsNyAmIzQzOzU5NjQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwotCWdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyOwomIzQzOwlncGFfdCBjdXJyZW50X3ZtcHRyOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CiAJZ3ZhX3QgZ3ZhOwogCWludCByOwpAQCAtNTk3MCw4ICYjNDM7NTk3MiwxNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSkKLQkJcmV0dXJuIDE7CiYjNDM7CS8qCiYjNDM7CSAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZAomIzQzOwkgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuCiYjNDM7CSAqLwomIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQljdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKIAogCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbywKIAkJCQl0cnVlLCBzaXplb2YoZ3BhX3QpLCAmYW1wO2d2YSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IDgyYThlYTZiNjYxZjAuLmM1YjlkMjZmNmNkYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCkBAIC0yNjUsMTQgJiM0MzsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBldm1jc192bXB0cnN0KHU2NCAqdmFsdWUpCi17Ci0JKnZhbHVlID0gY3VycmVudF92cF9hc3Npc3QtJmd0O2N1cnJlbnRfbmVzdGVkX3ZtY3MgJmFtcDsKLQkJfkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpCiB7CiAJc3dpdGNoIChlbmNvZGluZykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCmluZGV4IDZlNmY3MDAzNTUwOGEuLjI4MmI4YWFmZjc5OTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTEzMTgsNyAmIzQzOzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTsKIAkmIzM0O2xlYSAxZiglJXJpcCksICUlcjEwXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O2xlYSAyZiglJXJpcCksICUlcjExXG5cdCYjMzQ7CQkJCVwKIAlmZXAgJiMzNDsxOiAmIzM0OyBpbnNuICYjMzQ7XG5cdCYjMzQ7CQkJCQlcCi0JJiMzNDt4b3IgJSVyOSwgJSVyOVxuXHQmIzM0OwkJCQkJXAomIzQzOwkmIzM0O21vdiAkMCwgJSVyOWRcblx0JiMzNDsJCQkJCVwKIAkmIzM0OzI6XG5cdCYjMzQ7CQkJCQkJXAogCSYjMzQ7bW92ICAlJXI5YiwgJVt2ZWN0b3JdXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O21vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cblx0JiMzNDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAppbmRleCAwNGY1ZTM0ZGVhM2FlLi5jZDgyYTZiZTY5NjNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0zMDksMTI2ICYjNDM7MzA5LDkxIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHsKIAogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAotc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCi17Ci0JdTggcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCYjMzQ7dm14b24gJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsocGh5cykKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKJiM0MzsjZGVmaW5lIEdVRVNUX0FTU0VSVF9WTVhfSU5TTl9TVUNDRUVERUQoaW5zbiwgX19yLCBfX3BhKQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0O1sweCVseF0gaGl0ICVzJiMzNDssCVwKJiM0MzsJCSAgICAgICBfX3BhLCBfX3IgJmx0OyAwID8gJiMzNDtWTS1GYWlsJiMzNDsgOiBleF9zdHIoX19yKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJVSUxEX1ZNQ1NfQVNNX0hFTFBFUlMoaW5zbikJCQkJCVwKJiM0MztzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwl1NjQgZXJyb3JfY29kZTsJCQkJCQkJXAomIzQzOwl1OCB2ZWN0b3I7CQkJCQkJCVwKJiM0MzsJdTggZmFpbGVkOwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pICYjMzQ7ICVbcGFdJiMzNDspCQlcCiYjNDM7CQkgICAgICYjMzQ7XG5cdHNldG5hICVbZmFpbGVkXSYjMzQ7CQkJCVwKJiM0MzsJCSAgICAgOiBLVk1fQVNNX1NBRkVfT1VUUFVUUyh2ZWN0b3IsIGVycm9yX2NvZGUpLAlcCiYjNDM7CQkgICAgICAgW2ZhaWxlZF0mIzM0Oz1xbSYjMzQ7KGZhaWxlZCkJCQkJXAomIzQzOwkJICAgICA6IFtwYV0mIzM0O20mIzM0Oyh2bWNzX3BhKQkJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0OywgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTsJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldHVybiB2ZWN0b3IgPyB2ZWN0b3IgOiBmYWlsZWQgPyAtRUlOVkFMIDogMDsJCQlcCiYjNDM7fQkJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc24odTY0IHZtY3NfcGEpCQkJCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJaW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpOwkJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJR1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpOwkJXAogfQogCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXhvbikKJiM0MztCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtcHRybGQpCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bWNsZWFyKQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZteG9mZih2b2lkKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7dm14b2ZmJiMzNDspOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKQotewotCXU4IHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgmIzM0O3ZtY2xlYXIgJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsodm1jc19wYSkKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSkKLXsKLQl1OCByZXQ7Ci0KLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gLTE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF0mIzM0OwotCQk6IFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCi0JCTogW3BhXSYjMzQ7bSYjMzQ7KHZtY3NfcGEpCi0JCTogJiMzNDtjYyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSkKJiM0MztzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0KHZvaWQpCiB7Ci0JdTY0IHRtcDsKJiM0MzsJdTY0IHZhbHVlID0gMDsKIAl1OCByZXQ7CiAKLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3ZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3ZhbHVlXSYjMzQ7PW0mIzM0Oyh0bXApLCBbcmV0XSYjMzQ7PXJtJiMzNDsocmV0KQomIzQzOwkJOiBbdmFsdWVdJiMzNDs9bSYjMzQ7KHZhbHVlKSwgW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiAKLQkqdmFsdWUgPSB0bXA7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIEEgd3JhcHBlciBhcm91bmQgdm1wdHJzdCB0aGF0IGlnbm9yZXMgZXJyb3JzIGFuZCByZXR1cm5zIHplcm8gaWYgdGhlCi0gKiB2bXB0cnN0IGluc3RydWN0aW9uIGZhaWxzLgotICovCi1zdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKQotewotCXU2NCB2YWx1ZSA9IDA7Ci0Jdm1wdHJzdCgmYW1wO3ZhbHVlKTsKJiM0MzsJX19HVUVTVF9BU1NFUlQoIXJldCwgJiMzNDt2bXB0cnN0IGZhaWxlZCYjMzQ7KTsKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bWxhdW5jaCgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bXJlc3VtZSgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7CiYjNDM7I2RlZmluZSBCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyhpbnNuKQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX18jI2luc24odm9pZCkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlpbnQgcmV0OwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlpZiAoZW5hYmxlX2V2bWNzKQkJCQkJCVwKJiM0MzsJCXJldHVybiBldm1jc18jI2luc24oKTsJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwkJCQkJXAomIzQzOwkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwkJXAomIzQzOwkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwkJCVwKJiM0MzsJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICBfX3N0cmluZ2lmeShpbnNuKSYjMzQ7OyYjMzQ7CQkJXAomIzQzOwkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsJCQkJXAomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsJCQkJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwkJCQlcCiYjNDM7CQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQkJCQlcCiYjNDM7CQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwJCVwKJiM0MzsJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApLAkJXAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMJCQlcCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CQkJCVwKJiM0MzsJcmV0dXJuIHJldDsJCQkJCQkJXAomIzQzO30JCQkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNuKHZvaWQpCQkJCQkJXAomIzQzO3sJCQkJCQkJCQlcCiYjNDM7CWludCByZXQ7CQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldCA9IF9fIyNpbnNuKCk7CQkJCQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghcmV0LCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0OyBoaXQgVk0tRmFpbCYjMzQ7KTsJCVwKIH0KJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bWxhdW5jaCkKJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bXJlc3VtZSkKIAogc3RhdGljIGlubGluZSB2b2lkIHZtY2FsbCh2b2lkKQogewpAQCAtNTUwLDkgJiM0Mzs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3IgewogfTsKIAogc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpOwotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiYjNDM7dm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiB2b2lkIHByZXBhcmVfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHZvaWQgKmd1ZXN0X3JpcCk7Ci1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpOwomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiAKIGJvb2wgZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwppbmRleCBlMTllOGI1YTA5YzVhLi42YTE4MTVmYjk3ZTk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwpAQCAtMzMsMTQgJiM0MzszMywxNCBAQCBfX2FzbV9fKAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14LCB1NjQgdmNwdV9pZCkKIHsKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlHVUVTVF9BU1NFUlQoZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCgpKTsKIAogCSoodTY0ICopdm14LSZndDtzdGFjayA9IHZjcHVfaWQ7CiAJcHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX0RPTkUoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpCiAJcmV0dXJuIHZteDsKIH0KIAotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KQogewogCXU2NCBmZWF0dXJlX2NvbnRyb2w7CiAJdTY0IHJlcXVpcmVkOwpAQCAtMTYzLDI4ICYjNDM7MTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAKIAkvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovCiAJKih1MzIgKikodm14LSZndDt2bXhvbikgPSB2bWNzX3JldmlzaW9uKCk7Ci0JaWYgKHZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7CiYjNDM7CXZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKTsKIH0KIAotYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKIAkvKiBMb2FkIGEgVk1DUy4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3ZtY3MpID0gdm1jc19yZXZpc2lvbigpOwotCWlmICh2bWNsZWFyKHZteC0mZ3Q7dm1jc19ncGEpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CXZtY2xlYXIodm14LSZndDt2bWNzX2dwYSk7CiAKLQlpZiAodm1wdHJsZCh2bXgtJmd0O3ZtY3NfZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwl2bXB0cmxkKHZteC0mZ3Q7dm1jc19ncGEpOwogCiAJLyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3NoYWRvd192bWNzKSA9IHZtY3NfcmV2aXNpb24oKSB8IDB4ODAwMDAwMDB1bDsKLQlpZiAodm1jbGVhcih2bXgtJmd0O3NoYWRvd192bWNzX2dwYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwomIzQzOwl2bWNsZWFyKHZteC0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIH0KIAogc3RhdGljIGJvb2wgZXB0X3ZwaWRfY2FwX3N1cHBvcnRlZCh1NjQgbWFzaykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jCmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYwpAQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKIAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogewotCUdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpOwotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTsKIApAQCAtODMsNyAmIzQzOzgzLDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogCQl2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKm5lc3RlZF90ZXN0X2RhdGEpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwpAQCAtNTUsMTEgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywKIAllbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLSZndDt2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0KTsKIAlldm1jc19lbmFibGUoKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAkvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi8KIAlzeW5jX3dpdGhfaG9zdCgyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCmluZGV4IDYzZWExNTMzZTRlYWQuLmI3YzJhMjU0MjkxZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwpAQCAtMjMsNyAmIzQzOzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7CiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQogewogCXVkX2NvdW50JiM0MzsmIzQzOzsKLQlyZWdzLSZndDtyaXAgJiM0Mzs9IDM7IC8qIFZNTEFVTkNIICovCiYjNDM7CS8qCiYjNDM7CSAqIFZNTEFVTkNIIGluc24gY2FuJiMzOTt0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0CiYjNDM7CSAqIGx1Y2tpbHkgdGhlIGluc3RydWN0aW9uIGlzIGFsd2F5cyB0aHJlZSBieXRlcy4KJiM0MzsJICovCiYjNDM7CXJlZ3MtJmd0O3JpcCAmIzQzOz0gMzsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCkBAIC04OSwyMCAmIzQzOzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0X2dwYSwgaHZfcGFnZXMtJmd0O3ZwX2Fzc2lzdCk7CiAJZXZtY3NfZW5hYmxlKCk7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwogCUdVRVNUX1NZTkMoMyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwkvKiBWTVBUUlNUIHJldHVybnMgLTEgdW50aWwgVk1MQVVOQ0ggd2l0aCBlVk1DUyBwdHIgc2V0ICovCiYjNDM7CUdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gLTEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKIAlHVUVTVF9TWU5DKDUpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSAtMXU7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAljdXJyZW50X2V2bWNzLSZndDtyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047CiAJR1VFU1RfU1lOQyg2KTsKIApAQCAtMTE3LDE3ICYjNDM7MTIwLDE3IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJY3VycmVudF92cF9hc3Npc3QtJmd0O25lc3RlZF9jb250cm9sLmZlYXR1cmVzLmRpcmVjdGh5cGVyY2FsbCA9IDE7CiAJKih1MzIgKikoaHZfcGFnZXMtJmd0O3BhcnRpdGlvbl9hc3Npc3QpID0gMDsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTsKIAlHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pICZhbXA7IDB4ZmYpLCBOTUlfVkVDVE9SKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAKIAkvKgogCSAqIE5NSSBmb3JjZXMgTDItJmd0O0wxIGV4aXQsIHJlc3VtaW5nIEwyIGFuZCBob3BlIHRoYXQgRVZNQ1MgaXMKIAkgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmcKIAkgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAogCUdVRVNUX1NZTkMoMTApOwogCkBAIC0xMzgsMTMgJiM0MzsxNDEsMTMgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAl2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfAogCQlDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTsKIAlfX3NldF9iaXQoTVNSX0ZTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7Ci0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpOwogCWN1cnJlbnRfZXZtY3MtJmd0O2d1ZXN0X3JpcCAmIzQzOz0gMjsgLyogcmRtc3IgKi8KIAogCS8qIEVuYWJsZSBlbmxpZ2h0ZW5lZCBNU1IgYml0bWFwICovCiAJY3VycmVudF9ldm1jcy0mZ3Q7aHZfZW5saWdodGVubWVudHNfY29udHJvbC5tc3JfYml0bWFwID0gMTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNTIsMTQgJiM0MzsxNTUsMTQgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAlfX3NldF9iaXQoTVNSX0dTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7CiAJLyogTWFrZSBzdXJlIEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQIGlzIHNldCAqLwogCWN1cnJlbnRfZXZtY3MtJmd0O2h2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCS8qIE1ha2Ugc3VyZSB3ZSBkb24mIzM5O3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi8KIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDM7IC8qIHZtY2FsbCAqLwogCiAJLyogTm93IHRlbGwgS1ZNIHdlJiMzOTt2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNjcsMjEgJiM0MzsxNzAsMjkgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAkgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLAogCSAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovCiAJLyogRW5hYmxlIHN5bnRoZXRpYyB2bWV4aXQgKi8KIAkqKHUzMiAqKShodl9wYWdlcy0mZ3Q7cGFydGl0aW9uX2Fzc2lzdCkgPSAxOwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX1NZTkMoMTEpOwogCi0JLyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovCiYjNDM7CS8qIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gY2F1c2VzICNVRCBhZnRlciBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCAqLwomIzQzOwlHVUVTVF9BU1NFUlQoX192bXB0cmxkKGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBLiBHVUVTVF9TWU5DKDEyKSBzaWduYWxzCiYjNDM7CSAqIHRoZSBob3N0IHRvIGVuYWJsZSBndWVzdF91ZF9oYW5kbGVyKCkgd2hpY2ggY2Fubm90IGJlIGVuYWJsZWQgYmVmb3JlaGFuZAomIzQzOwkgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfU1lOQygxMik7CiAJZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jcyk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiAJR1VFU1RfRE9ORSgpOwogfQpAQCAtMjUzLDcgJiM0MzsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXZjcHVfYXJnc19zZXQodmNwdSwgMywgdm14X3BhZ2VzX2d2YSwgaHZfcGFnZXNfZ3ZhLCBhZGRyX2d2YTJncGEodm0sIGhjYWxsX3BhZ2UpKTsKIAl2Y3B1X3NldF9tc3IodmNwdSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgdmNwdS0mZ3Q7aWQpOwogCi0Jdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKIAl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7CiAKIAlwcl9pbmZvKCYjMzQ7UnVubmluZyBMMSB3aGljaCB1c2VzIEVWTUNTIHRvIHJ1biBMMlxuJiMzNDspOwpAQCAtMjgzLDcgJiM0MzsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCS8qIEZvcmNlIGltbWVkaWF0ZSBMMi0mZ3Q7TDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi8KIAkJaWYgKHN0YWdlID09IDgpIHsKLQkJCXByX2luZm8oJiMzNDtJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxuJiMzNDspOwomIzQzOwkJCXByX2RlYnVnKCYjMzQ7SW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcbiYjMzQ7KTsKIAkJCWluamVjdF9ubWkodmNwdSk7CiAJCX0KIApAQCAtMjkzLDkgJiM0MzszMDMsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICogS1ZNX1NUQVRFX05FU1RFRF9FVk1DUyBpcyBub3QgbG9zdC4KIAkJICovCiAJCWlmIChzdGFnZSA9PSA5KSB7Ci0JCQlwcl9pbmZvKCYjMzQ7VHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXG4mIzM0Oyk7CiYjNDM7CQkJcHJfZGVidWcoJiMzNDtUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcbiYjMzQ7KTsKIAkJCXZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RhZ2UgPT0gMTIpIHsKJiM0MzsJCQlwcl9kZWJ1ZygmIzM0O1RyeWluZyBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCB3aXRoIGFuIGludmFsaWQgUFRSXG4mIzM0Oyk7CiYjNDM7CQkJdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKJiM0MzsJCX0KIAl9CiAKIGRvbmU6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCmluZGV4IDI1YTE4MmJlMDBhOTcuLjMzN2QzYzI4YmM2ZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCkBAIC00MiwxMyAmIzQzOzQyLDEzIEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKLQlHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTsKLQlHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jCmluZGV4IGI5NzRjZmIzNDdkNmUuLjFmNGE1ZTQ0YTZlZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuYwpAQCAtMzAsMTMgJiM0MzszMCwxMyBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jCmluZGV4IDI2YjQ3NGJmMTM1MzUuLjc5ODdjZTUwYzM4MjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuYwpAQCAtOTMsOCAmIzQzOzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJdm9pZCAqbDJfcmlwOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlpZiAodm14LSZndDtlcHRwX2dwYSkKIAkJbDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDsKQEAgLTEwNCw3ICYjNDM7MTA0LDcgQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJcHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTsKIAogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKIAlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmMKaW5kZXggZTA4YzZiMDY5N2U1MC4uMTFmZTRhMzFlZGEwYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jCkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKIAkJCQkJICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTsKIAkJdm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7CiAJfSBlbHNlIHsKLQkJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odGVzdF9kYXRhKSk7Ci0JCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3ModGVzdF9kYXRhKSk7CiYjNDM7CQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7CiYjNDM7CQlsb2FkX3ZtY3ModGVzdF9kYXRhKTsKIAogCQlwcmVwYXJlX3ZtY3ModGVzdF9kYXRhLCBOVUxMKTsKIAkJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX0lEVFJfTElNSVQsIDApKTsKQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpCiAJCQlleGl0X2luc25fbGVuID0gdm1jYi0mZ3Q7Y29udHJvbC5uZXh0X3JpcCAtIHZtY2ItJmd0O3NhdmUucmlwOwogCQkJR1VFU1RfQVNTRVJUX0VRKHZtY2ItJmd0O3NhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApOwomIzQzOwkJCWkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTsKIAkJCWV4aXRfcmVhc29uID0gdm1yZWFkeihWTV9FWElUX1JFQVNPTik7CiAJCQlleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7CiAJCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSkKIHsKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTsKIAotCUdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApOwomIzQzOwl2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7CiAKIAlpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUikKIAkJcmV0dXJuOwpAQCAtMTI1LDkgJiM0MzsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKIAotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jCmluZGV4IDhjMmJhOTY3NDU1OGUuLjEwMWMxZmU3OWVlYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmMKQEAgLTQwLDIxICYjNDM7NDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewogCXVpbnRwdHJfdCBzYXZlX2NyMzsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAogCS8qIFRyeSB0byBydW4gTDIgd2l0aCBpbnZhbGlkIENSMyBhbmQgbWFrZSBzdXJlIGl0IGZhaWxzICovCiAJc2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7CiAJdm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PQogCQkgICAgIChFWElUX1JFQVNPTl9GQUlMRURfVk1FTlRSWSB8IEVYSVRfUkVBU09OX0lOVkFMSURfU1RBVEUpKTsKIAogCS8qIE5vdyByZXN0b3JlIENSMyBhbmQgbWFrZSBzdXJlIEwyIHJ1bnMgc3VjY2Vzc2Z1bGx5ICovCiAJdm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMKaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jCkBAIC01NSwxMiAmIzQzOzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSwKIAl1NjQgZXhpdF9xdWFsOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBsMl9lbnRyeSk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCiAJLyogVmVyaWZ5IHdlIGdvdCBhbiBFUFQgdmlvbGF0aW9uIGV4aXQgKi8KIAlfX0dVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwppbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwpAQCAtODYsOCAmIzQzOzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKQogCQlzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhOwogCQl1MzIgY29udHJvbDsKIAotCQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJCWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCQljb250cm9sID0gdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKTsKQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSkKIAkJdm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTsKIAkJdm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTsKIAotCQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwkJdm1sYXVuY2goKTsKIAkJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSA9IGRhdGE7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMKaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuYwpAQCAtMTA1LDggJiM0MzsxMDUsOCBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJLyogY2hlY2sgdGhhdCBMMSYjMzk7cyBmcmVxdWVuY3kgbG9va3MgYWxyaWdodCBiZWZvcmUgbGF1bmNoaW5nIEwyICovCiAJY2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi8KIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoVFNDX01VTFRJUExJRVJfSElHSCwgVFNDX01VTFRJUExJRVJfTDIgJmd0OyZndDsgMzIpOwogCiAJLyogbGF1bmNoIEwyICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jCmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpAQCAtOTgsMTcgJiM0Mzs5OCwxNyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTsKIAogCUdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAl3aGlsZSAoMSkgewogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpOwogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgJmFtcDsgMHhmZiwgVURfVkVDVE9SKTsKLQkJR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJCXZtcmVzdW1lKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKaW5kZXggZDFlZGFmZDVhZjc1NS4uMzc3ZGYwOWU1ODJhZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwpAQCAtNzgsOCAmIzQzOzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpCiAJCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkgewogCQkJZ2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CQkJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAJCQlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAkJfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCmluZGV4IDRhMTA1NmE2Y2I4ZGMuLjM4Yzk2ODlhYzYwMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCkBAIC03NSwzMiAmIzQzOzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZCkKIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKIAlHVUVTVF9TWU5DKDMpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIHZteF9sMl9ndWVzdF9jb2RlKTsKIAogCUdVRVNUX1NZTkMoNSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJdm1sYXVuY2goKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIENoZWNrIHRoYXQgdGhlIGxhdW5jaGVkIHN0YXRlIGlzIHByZXNlcnZlZC4gICovCi0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAKIAlHVUVTVF9TWU5DKDcpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCXZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgJiM0MzsgMyk7CkBAIC0xMDgsMjggJiM0MzsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpOwogCXZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIAotCUdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSkpOwotCUdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTsKJiM0MzsJdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpOwogCUdVRVNUX1NZTkMoOCk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCiAJdm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTsKIAlHVUVTVF9TWU5DKDkpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZWUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKSk7CiYjNDM7CXZtcHRybGQodm14X3BhZ2VzLSZndDtzaGFkb3dfdm1jc19ncGEpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCUdVRVNUX1NZTkMoMTMpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogfQogCiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2ZsYXR0ZW5fXykpIGd1ZXN0X2NvZGUodm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jCmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmMKQEAgLTI1LDEyICYjNDM7MjUsMTIgQEAgdm9pZCBsMV9ndWVzdF9jb2RlX3ZteChzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7CiAKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAogCXByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAkvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIGEgdHJpcGxlIGZhdWx0IGV2ZW50IGluamVjdGVkLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwogCUdVRVNUX0RPTkUoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYwppbmRleCA0NjNmNzNhYTkxNTlhLi5mZTI5Yzg2OWEyMzU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jCkBAIC0zOCw4ICYjNDM7MzgsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSkKIHsKIAl1MzIgY29udHJvbDsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01MywxNCAmIzQzOzUzLDE0IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKQogCiAJLyogVHJ5IHRvIGxhdW5jaCBMMiB3aXRoIHRoZSBtZW1vcnktYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJdm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7CiAKIAkvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwppbmRleCBmOWI4OGE2ZjYxMTNkLi5lNTc4MjIxZGEyNDdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwpAQCAtMzMsOCAmIzQzOzMzLDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiB7CiAJdTMyIGNvbnRyb2w7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwpAQCAtNjIsNyAmIzQzOzYyLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogUnVuIEwyIHRvIHN3aXRjaCB0byB4MkFQSUMgbW9kZSwgd2hpY2ggaW4gdHVybiB3aWxsIHVuaW5oaWJpdCBBUElDdiwKIAkgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAl2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICYjNDM7IHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTsKIAlHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpOwpAQCAtOTAsNyAmIzQzOzkwLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogaGFuZGxlcyB0aGUgeDJBUElDID0mZ3Q7IHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyCiAJICogaXMgYWN0aXZlLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKaW5kZXggYzgzNzkxMjRiMzE3Mi4uMzAxNzkzOGZhOTkzNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCkBAIC00MSw4ICYjNDM7NDEsOCBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAlHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpICZhbXA7IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8CiAJCSAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpICZhbXA7IFNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVCkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAogCS8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jCmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmMKQEAgLTM3LDggJiM0MzszNyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCUdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTsKIAogCUdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCWd1ZXN0X2NyNCAmYW1wOz0gflg4Nl9DUjRfTEE1NzsKIAl2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAlleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pOwogCUdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwppbmRleCBlYjgwMjFjMzNjZDQzLi5jZGE1M2RmMzM4ODhlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwpAQCAtNzEsOSAmIzQzOzcxLDkgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAl1NjQgbDFfdHNjX2RlYWRsaW5lLCBsMl90c2NfZGVhZGxpbmU7CiAKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwomIzQzOwlsb2FkX3ZtY3Modm14X3BhZ2VzKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCkBAIC05MCw3ICYjNDM7OTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCSAgICAhKGN0cmxfZXhpdF9yZXYuY2xyICZhbXA7IFZNX0VYSVRfU0FWRV9WTVhfUFJFRU1QVElPTl9USU1FUikpCiAJCXJldHVybjsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJdm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7CiAKQEAgLTExMCw3ICYjNDM7MTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAogCWwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpICZndDsmZ3Q7IHZteF9wdF9yYXRlKSAmbHQ7Jmx0OyB2bXhfcHRfcmF0ZTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAKIAlsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIzOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFZNUFRSTEQvVk1QVFJTVCBQYXRjaCBpbiBLVk0gTmVzdGVkIFZNWCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBLVk0mIzM5O3MgbmVzdGVkIFZNWCBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHdoZW4gZVZNQ1MgaXMgaW4gcGxheS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBmb2N1c2luZy4KCkxvb2tpbmcgYXQgYGhhbmRsZV92bXB0cmxkYCwgdGhlIHBhdGNoJiMzOTtzIG1haW4gY2hhbmdlIGlzIHJlcGxhY2luZyBhIHNpbXBsZSByZXR1cm4gd2l0aCBga3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpYCB3aGVuIGVWTUNTIGlzIGFjdGl2ZS4gUHJldmlvdXNseSwganVzdCByZXR1cm5pbmcgMSBtaWdodCBoYXZlIGJlZW4gYSBzdWJ0bGUgYnVnIG9yIGEgbWlzaW50ZXJwcmV0YXRpb24gb2YgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBSZXR1cm5pbmcgMSBpbiBhIEtWTSBleGl0IGhhbmRsZXIgb2Z0ZW4gc2lnbmFscyB0byByZXN1bWUgdGhlIGd1ZXN0LCBidXQgd2l0aG91dCBhZHZhbmNpbmcgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgKFJJUCksIHRoaXMgd291bGQgbGVhZCB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciwgbW9yZSBsaWtlbHksIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZS4gSXQgbG9va3MgbGlrZSBpdCB3YXMgaW50ZW5kZWQgdG8gZmFpbC9za2lwIHRoZSBpbnN0cnVjdGlvbiwgYnV0IHdhc24mIzM5O3QgZG9pbmcgdGhhdCwgYnV0IHRoZXJlIHdhcyBhbiBleHBlY3RhdGlvbiB0aGF0IHNvbWV0aGluZyAqc2hvdWxkKiBmYWlsLiBOb3csIHRoZSBwYXRjaCBjb3JyZWN0bHkgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiwgd2hpY2ggaXMgdGhlIHByb3BlciB3YXkgdG8gaGFuZGxlIGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbi4KCk5vdywgZm9yIGBoYW5kbGVfdm1wdHJzdGAuIEhlcmUsIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmV0dXJuaW5nIGBodl9ldm1jc192bXB0cmAgaW5zdGVhZCBvZiBqdXN0IDEuIEl0IHNlZW1zIGxpa2UgdGhlIHByZXZpb3VzIGJlaGF2aW9yLCByZXR1cm5pbmcgMSwgbWlnaHQgaGF2ZSBhbHNvIGJlZW4gYSBidWcuIEluIHRoaXMgY2FzZSwgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX0tWTV9IWVBFUlZgLCBhbmQgdGhlIHBhdGNoIG5vdyBjb25kaXRpb25hbGx5IGFzc2lnbnMgYGN1cnJlbnRfdm1wdHJgIHdpdGggYGh2X2V2bWNzX3ZtcHRyYCB3aGVuIGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkYCBpcyB0cnVlLiBJdCBhcHBlYXJzIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBkZWZpbmUgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZCwgYnV0IGdlbnVpbmUgSHlwZXItViByZXR1cm5zIGVWTUNTIEdQQS4KClNvLCBmdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIG5lc3RlZCBWTVggaW4gY2VydGFpbiBzY2VuYXJpb3MuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZpeGluZyBhIHN1YnRsZSBidWcgYW5kIGltcHJvdmluZyB0aGUgYWNjdXJhY3kgb2YgaG93IEtWTSBpbnRlcmFjdHMgd2l0aCBuZXN0ZWQgVk1YIGluIHRoaXMgY29udGV4dC4gVGhlIEh5cGVyLVYgc3BlY2lmaWMgY29uZGl0aW9uYWwgaXMgd29ydGggY29uc2lkZXJpbmcuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55IGFuZCB0ZXN0aW5nLCBlc3BlY2lhbGx5IGJlY2F1c2UgdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBjYW4gZXhwb3NlIG5ldyBhdHRhY2sgc3VyZmFjZXMgb3IgcmV2ZWFsIHByZXZpb3VzbHkgaGlkZGVuIGJ1Z3MuCgpMZXQmIzM5O3Mgc2VlOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAgYXJlIHRoZSBrZXkgY29uZmlnIG9wdGlvbnMgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBjb2RlIGlzIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0byBleGVyY2lzZSB0aGlzIGNvZGUgYW5kIGNyZWF0ZSBhIGZvY3VzZWQgZnV6emluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xODM9Y29uZmlnIEtWTV9TTU1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYEtWTV9IWVBFUlZgIGlzIGRlZmluaXRlbHkgYSByZWNvZ25pemVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBnb29kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdGhvcm91Z2hseS4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIEludGVsLXNwZWNpZmljIHZpcnR1YWxpemF0aW9uLiBUaGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggSHlwZXItViBpbiB0aGUgbWl4LCBjb3VsZCBiZSBzaWduaWZpY2FudCBvbiBhbiBJbnRlbC1iYXNlZCBzeXN0ZW0sIHNvIGEgZGVlcCBkaXZlIGludG8gYEtWTV9JTlRFTGAmIzM5O3MgcmVsYXRpb25zaGlwIHdpdGggYEtWTV9IWVBFUlZgIGlzIGVzc2VudGlhbC4gSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IGhvdyB0aGV5IGludGVyYWN0LCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCwgY3JpdGljYWxseSwgaWYgZW5hYmxpbmcgYEtWTV9IWVBFUlZgIGhhcyBhbnkgY2FzY2FkaW5nIGVmZmVjdCBvbiBgS1ZNX0lOVEVMYCBmZWF0dXJlcyBvciBwZXJmb3JtYW5jZS4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlY2lzaW9ucyBJJiMzOTtsbCBtYWtlIGdvaW5nIGZvcndhcmQuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgcmVsZXZhbnQgc291cmNlIGNvZGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipLVk1fSU5URUwgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBLVk1fSU5URUxgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBkZWZpbmUgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBLVk0gb24gSW50ZWwgcHJvY2Vzc29ycyBhbmQsIGNydWNpYWxseSwgdG8gc3BlY2lmeSBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBvciBzYXRpc2ZpZWQgZm9yIGBLVk1fSU5URUxgIHRvIGJlIHZpYWJsZS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyB0aGlzIGlzIGRlcGVuZGVudCBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuICA5MTpcdFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcJiMzNDtyZWFsXCYjMzQ7IFZNIHdvcmtsb2FkIGFzIGFcbiAgOTI6XHRcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXG4gIDkzOlx0XG4gIDk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEtWTV9JTlRFTFxuICA5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IElBMzJfRkVBVF9DVExcbiAgOTk6XHRcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuIDEwMjpcdFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuIDEwODpcdCAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuIDEwOTpcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjU0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIFNldHVwIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBnZXR0aW5nIHRoaXMgS1ZNIGVudmlyb25tZW50IHNldCB1cCBwcm9wZXJseS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBhIGdpdmVuIGZvciBhbnkgbW9kZXJuIEludGVsLWJhc2VkIHZpcnR1YWxpemF0aW9uLiBBbmQgdGhlIHNpdHVhdGlvbiBpcyBtb3JlIGNvbXBsZXggdGhhbiBpdCBvbmNlIHdhcywgYXMgbm93IGl0IGFsc28gbG9va3MgbGlrZSBJIG5lZWQgYEtWTV9IWVBFUlZgIHRvby4KCkFscmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgS1ZNX0hZUEVSVmAgZGVwZW5kZW5jaWVzIG5vdywgdG8gZW5zdXJlIEkmIzM5O3ZlIGNvdmVyZWQgZXZlcnl0aGluZyB0byBnaXZlIG15c2VsZiB0aGUgYmVzdCBjaGFuY2Ugb2YgY29tcGF0aWJpbGl0eS4gVGhhdCBzaG91bGQgYmUgbXkgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgZmlybXdhcmUgdG8gaW1wbGVtZW50IFVFRkkgc2VjdXJlIGJvb3QuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIEtWTV9IWVBFUlZcbiAxOTU6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxOTc6XHRcdGRlZmF1bHQgeVxuIDE5ODpcdFx0aGVscFxuIDE5OTpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXG4gMjAwOlx0XHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcbiAyMDE6XHRcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxuIDIwMjpcdFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcbiAyMDM6XHRcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXG4gMjA0Olx0XHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cbiAyMDU6XHRcbiAyMDY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7WVwmIzM0Oy5cbiAyMDc6XHRcbiAyMDg6XHRjb25maWcgS1ZNX1hFTlxuIDIwOTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc5NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgS1ZNIGNvbmZpZ3VyYXRpb25zOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gaG93IHRoaXMgcGF0Y2ggYWZmZWN0cyB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBmdW5jdGlvbnMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBvciBzb21ldGhpbmcgb2J2aW91cy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZWlyIHNjb3BlIGJlZm9yZSBkaXZpbmcgZGVlcGVyLiBBaCwgdGhleSYjMzk7cmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gQWxyaWdodCwgc28sIG5vdCBpbmxpbmVkLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFyZSBub3QgZXhwb3J0ZWQgb3Igc29tZWhvdyByZWZlcmVuY2VkIHRocm91Z2ggYW4gYXJyYXkuIFRoaXMgd2lsbCBpbmZvcm0gaG93IHRoZSBwYXRjaCB3aWxsIGJlIGFwcGxpZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Nz1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODkwLS8qIEVtdWxhdGUgdGhlIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg5MTpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5Mi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDM1PV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NjctXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVx0PSBoYW5kbGVfdm1sYXVuY2g7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0Njg6XHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXHQ9IGhhbmRsZV92bXB0cmxkO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDY5LVx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVx0PSBoYW5kbGVfdm1wdHJzdDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NjE9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ4MDAtXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0ODAxOlx0ICAgKGhhbmRsZV92bXB0cmxkKS5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMi1cdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSB5ZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2MTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVk0gRXhpdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFZNIGV4aXRzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgc3lzdGVtIHVzZXMgYW4gYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIHZlcnkgc3BlY2lmaWM6IEkmIzM5O20gc3VwcG9zZWQgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgdGhvc2UgaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgcmVhc29uIGlzIHRoZXkgd2FudCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKTm93LCBJJiMzOTttIG5vdGluZyB0aGF0IGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBhdCBmaXJzdCB3b3VsZCBzdWdnZXN0IHRoZXkmIzM5O2QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIGhvdyB0aGVzZSBhcmUgdXNlZC4gVGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgKndpdGhpbiogdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gU2luY2UgdGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMsIEkgZG9uJiMzOTt0IHRoaW5rIHRoZXkmIzM5O3JlIGlubGluZWQuIFRob3VnaCwgSSBhbSBhIGJpdCBjb25jZXJuZWQgYmVjYXVzZSBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlbSB1cC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpTbywgSSB0aGluayBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLCBhbmQgdGhlIHJlYWwgZW50cnkgcG9pbnQgZm9yIFZNIGV4aXRzIGlzIGB2bXhfaGFuZGxlX2V4aXRgIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfaGFuZGxlX2V4aXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTU3PXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE2MzpcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY0LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODg9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDAyLVx0LmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDAzOlx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDA0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTQyOT1zdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU0OTQtXHQgKiBNTUlPLCBpdCBpcyBiZXR0ZXIgdG8gcmVwb3J0IGFuIGludGVybmFsIGVycm9yLlxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NDk1Olx0ICogU2VlIHRoZSBjb21tZW50cyBpbiB2bXhfaGFuZGxlX2V4aXQuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU0OTYtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTYyNjg9c3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNzItXHQgKiBWTS1FeGl0cy4gVW5jb25kaXRpb25hbGx5IHNldCB0aGUgZmxhZyBoZXJlIGFuZCBsZWF2ZSB0aGUgaGFuZGxpbmcgdG9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjI3MzpcdCAqIHZteF9oYW5kbGVfZXhpdCgpLlxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Mjc0LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02NTAxPXZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY3MDUtICovXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY3MDY6c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjcwNy17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODY0LVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODY1OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NjYte1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODY3Olx0aW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODY4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzE3OD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTkzLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTk0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxOTUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI4PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoyOTppbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMwOnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzEtaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0PTE1OTI9Tm90ZXM6XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTItICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NjI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjY2MmU5IHZteF92Y3B1X3J1biYjNDM7MHgzYjkgKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYzBmNjE5YTAgX192bXhfY28uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjEzOiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODcyOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5Y2ZiMiB2Y3B1X2VudGVyX2d1ZXN0JiM0MzsweDc1MiAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY1ZjU3MCB2bXhfLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxNC0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg4MTogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWQwMjggdmNwdV9lbnRlcl9ndWVzdCYjNDM7MHg3YzggKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYjIzNGY5MDAgX19zci4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTU6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDlkMDZmIHZjcHVfZW50ZXJfZ3Vlc3QmIzQzOzB4ODBmIChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjcyZTMwIHZteF8uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE2OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3MmUzZCB2bXhfaGFuZGxlX2V4aXQmIzQzOzB4ZCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY3MjdjMCBfX3ZteF9oLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJiMTUgX192bXhfaGFuZGxlX2V4aXQmIzQzOzB4MzU1IChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjYwYWUwIHZteC4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTg6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyOTk0IF9fdm14X2hhbmRsZV9leGl0JiM0MzsweDFkNCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNzA5MCBrdm0uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjE5LSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzOTAzOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTBiNzBmMSBrdm1fZW11bGF0ZV9jcHVpZCYjNDM7MHg2MSAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNmUxMCBrdm1fLi4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTg5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZNIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFZNWCBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGB2bXhfaGFuZGxlX2V4aXRgIGxvb2tlZCBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyZWQgdGhhdCBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgYWN0dWFsbHkgcG9wdWxhdGVzIHRoaXMgYGV4aXRfaGFuZGxlcnNgIGFycmF5IOKAkyB0aGF0JiMzOTtzIGNydWNpYWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGltcG9ydGFudD8gQWgsIHJpZ2h0LCBgbmVzdGVkX3ZteF9nZXRfdm1wdHJgIGlzIGNhbGxlZCBmcm9tIGBoYW5kbGVfdm1wdHJsZGAuIEludGVyZXN0aW5nLiBBbmQsIGNyaXRpY2FsbHksIHRob3NlIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSBhbHNvIGdsYW5jZWQgYXQgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHdoaWNoIGlzIGlubGluZS4gYG5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbmAgaXMgYWxzbyBgc3RhdGljYC4KCkkmIzM5O20gc3RhcnRpbmcgdG8gemVybyBpbiBub3cuIEkgc2hvdWxkIGNpcmNsZSBiYWNrIHRvIGBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwYCBhbmQgdHJhY2UgaXRzIHVzYWdlLiBXYWl0IGEgbWludXRlLi4uIHdoaWxlIGB2bXhfaGFuZGxlX2V4aXRgICppcyogdGhlIG1haW4gVk0gZXhpdCBoYW5kbGVyLCBteSBhdHRlbnRpb24gaXMgYmVpbmcgZHJhd24gdG8gYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhleSYjMzk7cmUgdGhlIG9uZXMgdGhhdCBhcHBlYXIgdG8gaGF2ZSBiZWVuIG1vZGlmaWVkLgoKVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBgc3RhdGljYCBpcyBzaWduaWZpY2FudC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgcHJvYmFibHkgYmVpbmcgdGFrZW4gYW5kIHB1dCBpbnRvIHRoYXQgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBTbywgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBvcHRpbWl6ZSB0aGVtIGF3YXkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpJZiB0aGV5JiMzOTtyZSBpbiBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycywgaW5saW5pbmcgaXMgaW1wb3NzaWJsZSwgYmVjYXVzZSB5b3UgbmVlZCB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uLiBTbywgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIHJlYWxseSAqYXJlKiB0aGUgc2lnbmlmaWNhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBUaGF0IHdvdWxkIGJlIGEgbWFqb3IgY2x1ZS4gT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Nz1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODkwLS8qIEVtdWxhdGUgdGhlIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg5MTpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5Mi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDM1PV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NjctXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVx0PSBoYW5kbGVfdm1sYXVuY2g7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0Njg6XHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXHQ9IGhhbmRsZV92bXB0cmxkO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDY5LVx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVx0PSBoYW5kbGVfdm1wdHJzdDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NjE9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ4MDAtXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0ODAxOlx0ICAgKGhhbmRsZV92bXB0cmxkKS5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMi1cdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSB5ZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIFN5bWJvbCBTZWxlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQsIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWFraW5nIHRoZW0gcGFydCBvZiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBUaGF0IG1lYW5zIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBHb29kLCBzbyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGxvb2sgbGlrZSBzdHJvbmcgY2FuZGlkYXRlcyB0byBzdGFydCB3aXRoLgoKV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBndWlkYW5jZeKApiB0aGUgaW5zdHJ1Y3Rpb25zIGRvIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoZXNlICphcmUqIHN0YXRpYywgYnV0IHRoZXkgYXJlICpub3QqIGlubGluZWQsIHNpbmNlIHdlIGNhbiBwb2ludCB0byB0aGVpciBhZGRyZXNzZXMuIFRoZXkgZG8gaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBldmVuIHRob3VnaCBzdGF0aWMsIGR1ZSB0byB0aGVpciBub3QgYmVpbmcgaW5saW5lZC4gSG93ZXZlciwgSSYjMzk7bGwgaGVkZ2UgbXkgYmV0cyBhbmQgYWRkIGB2bXhfaGFuZGxlX2V4aXRgIG9yIGBfX3ZteF9oYW5kbGVfZXhpdGAgdG8gdGhlIGxpc3QsIGp1c3QgdG8gYmUgc2FmZS4KCkhvbGQgb27igKYgYHZteF9oYW5kbGVfZXhpdGAgaXMgZGVzY3JpYmVkIGFzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGF2b2lkIHRob3NlIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtYWtlcyBzZW5zZTsgYSBnZW5lcmljIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBjb3ZlciBhIGxvdCBvZiB1bnJlbGF0ZWQgY29kZSwgYW5kIHdlJiMzOTtyZSBsb29raW5nIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgVk1QVFJMRCBhbmQgVk1QVFJTVCBleGl0cy4gU28sIEkgc2hvdWxkIGF2b2lkIGB2bXhfaGFuZGxlX2V4aXRgLgoKVGhhdCBsZWF2ZXMgbWUgYmFjayBhdCBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBUaGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBleGl0cywgd2hpY2ggaXMgKmV4YWN0bHkqIHdoYXQgd2UgbmVlZCB0byBmdXp6LiBQZXJmZWN0LgoKTm93LCBhIHF1aWNrIGNvbmZpcm1hdGlvbjogY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhlc2UgVk0gZXhpdHM/IFllcywgd2UgY2FuIHRyaWdnZXIgVk0gZXhpdHMgdXNpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBndWVzdCwgc28gdGhvc2Ugc3ltYm9scyBzaG91bGQgYmUgYWNjZXNzaWJsZS4KCkFscmlnaHQsIGJlZm9yZSBJIGxvY2sgaW4gdGhlIGZpbmFsIHNlbGVjdGlvbiwgbGV0JiMzOTtzIHZlcmlmeSBpZiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgaGFzIHJlbGV2YW5jZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MjA9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjI1OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD02ND1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6Njk6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTcwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE5NT1zdGF0aWMgaW50IG5lc3RlZF92bXhfZmFpbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9pbnN0cnVjdGlvbl9lcnJvcilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMy1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIwNDpcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDUtXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjI3ND12b2lkIG5lc3RlZF9zeW5jX3ZtY3MxMl90b19zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjI3Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI3ODpcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzktXHRcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDMxPXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0Mzc6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM4LVx0XHRwcmVwYXJlX3ZtY3MwMl9lYXJseV9yYXJlKHZteCwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXHRcdHByZXBhcmVfdm1jczAyX3JhcmUodm14LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc3MS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mjc3MjpcdFx0bG9hZF9ndWVzdF9wZHB0cnNfdm1jczEyID0gIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSB8fFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzczLVx0XHRcdCEoZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNiBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfR1VFU1RfR1JQMSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI5MDI6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAzLVx0XHRldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgfD0gSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0FMTDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzgyLVx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gZXhpdF9yZWFzb24uZnVsbDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc4MzpcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzg0LVx0XHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3OTI9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgxMy1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgxNDpcdGlmIChDQyghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODE1LVx0ICAgICAgIHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODI4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODI5Olx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODMwLVx0XHRzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqZXZtY3MgPSBuZXN0ZWRfdm14X2V2bWNzKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjUzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTc6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjU4LVx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSh2Y3B1LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY2MC1cdHZteC1cdTAwM2VuZXN0ZWQubmVlZF9zeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSA9XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NjE6XHRcdCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NjItXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDczPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxODAtXHRpZiAoKHZtX2V4aXRfcmVhc29uICE9IC0xKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE4MTpcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxODItXHRcdHZteC1cdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY2ND1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY4My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY4NDpcdGlmICghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2ODUtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODkxPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTkwMC1cdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5MDE6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5MDItXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NjM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTc5LSNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTgwOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk4MS1cdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzY0PXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg1Mi1cdFx0aWYgKCF2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4NTM6XHRcdFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg1NC1cdFx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTA5CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDc4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2ggZm9yIE5lc3RlZCBWTVggYW5kIGVWTUNTKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGZvY3VzZWQgb24gaG93IEtWTSBoYW5kbGVzIFZNUFRSTEQgYW5kIFZNUFRSU1Qgd2l0aGluIG5lc3RlZCBWTVggd2hlbiB0aGUgRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGZlYXR1cmUgaXMgaW4gcGxheS4gVGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGRlZmluaXRlbHkgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSByZWxldmFudCBWTSBleGl0cywgYW5kIHRoZXkmIzM5O3JlIGV4YWN0bHkgd2hlcmUgdGhlIHBhdGNoIG1ha2VzIHRoZSBjcml0aWNhbCBjaGFuZ2VzLiBJIGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBuZXN0ZWRfdm14X3J1bmAgaW5pdGlhbGx5IGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24gZm9yIFZNTEFVTkNIL1ZNUkVTVU1FLCBhbmQgdGhlcmVmb3JlIGludGVyYWN0cyB3aXRoIHRoZSBlVk1DUywgYnV0IHRoZSBjaGFuZ2VzIGNlbnRlciBvbiB0aGUgYGhhbmRsZV8qYCBmdW5jdGlvbnMuCgpJIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNgIGFuZCBvdGhlciB0ZXN0cywgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEl0IHNob3dzIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQmIzM5O3MgdGVzdGFibGUsIGFuZCwgY3J1Y2lhbGx5LCBpdCYjMzk7cyByZWFjaGFibGUuIFRoaXMgYWxsIHBvaW50cyB0byB0aGlzIHBhdGNoIGJlaW5nIHdvcnRoIGZ1enppbmcsIGFzIGl0JiMzOTtzIGNoYW5naW5nIGNvcmUgYmVoYXZpb3VyLgoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2l0aGluIG5lc3RlZCBWTVggd2hlbiBlVk1DUyBpcyBhY3RpdmUuIEl0JiMzOTtzIHJlcGxhY2luZyB0aGUgc3RhbmRhcmQgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgd2l0aCBlaXRoZXIgYSAjVUQgZXhjZXB0aW9uIChmb3IgVk1QVFJMRCkgb3IgcmV0dXJuaW5nIHRoZSBlVk1DUyBHUEEgKGZvciBWTVBUUlNUKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGFuZCBpdCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBndWVzdCBleGVjdXRpb24uCgpJJiMzOTt2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIGFzIGBbJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LCAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDtdYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFsmIzM0O0tWTSYjMzQ7LCAmIzM0O0tWTV9JTlRFTCYjMzQ7LCAmIzM0O0tWTV9IWVBFUlYmIzM0O11gIHdoaWNoIGlzIGFsbCBJIG5lZWQgc2luY2UgYEtWTV9YODZgIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgZGVwZW5kcyBvbiBgS1ZNX1g4NmAuCgpKdXN0IHRvIGJlIHN1cmUsIEkgZG91YmxlLWNoZWNrZWQgdGhlIGZ1bmN0aW9ucyBhbmQgdGhlIHBhdGNoIGNvZGUgYWdhaW4uIFRob3NlIGBoYW5kbGVfKmAgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIHVzZWQgaW4gdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheSwgc28gdGhleSBkZWZpbml0ZWx5IGFyZW4mIzM5O3QgaW5saW5lZCBhbmQgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzLiBUaGV5IGFyZSB0aGUgQVBJIGVudHJ5cG9pbnRzIGZvciBoYW5kbGluZyB0aG9zZSBzcGVjaWZpYyBWTSBleGl0IHJlYXNvbnMuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBjb25maXJtcyB3aGF0IEkgdGhvdWdodC4gV2l0aCBlVk1DUyB2YWxpZCwgdGhlIHBhdGNoIHF1ZXVlcyBhICNVRCBleGNlcHRpb24gZm9yIGBoYW5kbGVfdm1wdHJsZGAuIEZvciBgaGFuZGxlX3ZtcHRyc3RgLCBpdCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgd2hlbiBgS1ZNX0hZUEVSVmAgaXMgZW5hYmxlZCwgaW5zdGVhZCBvZiBza2lwcGluZyB0aGUgaW5zdHJ1Y3Rpb24gKG9yIGxvb3BpbmcpLCBhcyB0aGUgSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBkby4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHRoZW4gZm9jdXNlcyBvbiBzZWxmdGVzdHMgdG8gY292ZXIgdGhpcyBuZXcgYmVoYXZpb3VyLgoKWWVwLCBsb29rcyBnb29kLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfdm1wdHJzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gbmVzdGVkIFZNWCB3aGVuIEVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBpcyB1c2VkLiBJdCBjaGFuZ2VzIFZNUFRSTEQgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGFuZCBWTVBUUlNUIHRvIHJldHVybiB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDssCiAgICAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiBuZXN0ZWQgVk1YIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEl0IGNoYW5nZXMgVk1QVFJMRCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24gYW5kIFZNUFRSU1QgdG8gcmV0dXJuIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAxLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGluIEtWTSYjMzk7cyBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvZGUuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZDogaW5zdGVhZCBvZiByZXR1cm5pbmcgMSAoZG9pbmcgbm90aGluZyksIGl0IG5vdyBzZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYCBhbmQgd3JpdGVzIGl0IHRvIGd1ZXN0IG1lbW9yeS4gYGN1cnJlbnRfdm1wdHJgIGlzIGEgYGdwYV90YCAoYSA2NC1iaXQgaW50ZWdlciksIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBndWVzdCB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIFRoZXJlIGFyZSBubyBzdHJ1Y3RzIHdpdGggcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnZvbHZlZC4gVGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGluIEtWTSBzZWxmdGVzdHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk5YzJlYmIwNDFkMjY5ODAxODNhYWUxMzQ2MzU2ODZiYjA0Y2IwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjU1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01ODk3LDYgJiM0Mzs1ODk3LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKQogCQlyZXR1cm4gMTsKIAomIzQzOwkvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7CiYjNDM7CQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwogCWlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCAmYW1wO3ZtcHRyLCAmYW1wO3IpKQogCQlyZXR1cm4gcjsKIApAQCAtNTkwNiwxMCAmIzQzOzU5MTIsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodm1wdHIgPT0gdm14LSZndDtuZXN0ZWQudm14b25fcHRyKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpOwogCi0JLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KLQlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKQotCQlyZXR1cm4gMTsKLQogCWlmICh2bXgtJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSAmYW1wO3ZteC0mZ3Q7bmVzdGVkLnZtY3MxMl9jYWNoZTsKIAkJc3RydWN0IHZtY3NfaGRyIGhkcjsKQEAgLTU5NjIsNyAmIzQzOzU5NjQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwotCWdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyOwomIzQzOwlncGFfdCBjdXJyZW50X3ZtcHRyOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CiAJZ3ZhX3QgZ3ZhOwogCWludCByOwpAQCAtNTk3MCw4ICYjNDM7NTk3MiwxNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSkKLQkJcmV0dXJuIDE7CiYjNDM7CS8qCiYjNDM7CSAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZAomIzQzOwkgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuCiYjNDM7CSAqLwomIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQljdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKIAogCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbywKIAkJCQl0cnVlLCBzaXplb2YoZ3BhX3QpLCAmYW1wO2d2YSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IDgyYThlYTZiNjYxZjAuLmM1YjlkMjZmNmNkYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCkBAIC0yNjUsMTQgJiM0MzsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBldm1jc192bXB0cnN0KHU2NCAqdmFsdWUpCi17Ci0JKnZhbHVlID0gY3VycmVudF92cF9hc3Npc3QtJmd0O2N1cnJlbnRfbmVzdGVkX3ZtY3MgJmFtcDsKLQkJfkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpCiB7CiAJc3dpdGNoIChlbmNvZGluZykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCmluZGV4IDZlNmY3MDAzNTUwOGEuLjI4MmI4YWFmZjc5OTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTEzMTgsNyAmIzQzOzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTsKIAkmIzM0O2xlYSAxZiglJXJpcCksICUlcjEwXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O2xlYSAyZiglJXJpcCksICUlcjExXG5cdCYjMzQ7CQkJCVwKIAlmZXAgJiMzNDsxOiAmIzM0OyBpbnNuICYjMzQ7XG5cdCYjMzQ7CQkJCQlcCi0JJiMzNDt4b3IgJSVyOSwgJSVyOVxuXHQmIzM0OwkJCQkJXAomIzQzOwkmIzM0O21vdiAkMCwgJSVyOWRcblx0JiMzNDsJCQkJCVwKIAkmIzM0OzI6XG5cdCYjMzQ7CQkJCQkJXAogCSYjMzQ7bW92ICAlJXI5YiwgJVt2ZWN0b3JdXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O21vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cblx0JiMzNDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAppbmRleCAwNGY1ZTM0ZGVhM2FlLi5jZDgyYTZiZTY5NjNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0zMDksMTI2ICYjNDM7MzA5LDkxIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHsKIAogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAotc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCi17Ci0JdTggcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCYjMzQ7dm14b24gJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsocGh5cykKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKJiM0MzsjZGVmaW5lIEdVRVNUX0FTU0VSVF9WTVhfSU5TTl9TVUNDRUVERUQoaW5zbiwgX19yLCBfX3BhKQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0O1sweCVseF0gaGl0ICVzJiMzNDssCVwKJiM0MzsJCSAgICAgICBfX3BhLCBfX3IgJmx0OyAwID8gJiMzNDtWTS1GYWlsJiMzNDsgOiBleF9zdHIoX19yKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJVSUxEX1ZNQ1NfQVNNX0hFTFBFUlMoaW5zbikJCQkJCVwKJiM0MztzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwl1NjQgZXJyb3JfY29kZTsJCQkJCQkJXAomIzQzOwl1OCB2ZWN0b3I7CQkJCQkJCVwKJiM0MzsJdTggZmFpbGVkOwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pICYjMzQ7ICVbcGFdJiMzNDspCQlcCiYjNDM7CQkgICAgICYjMzQ7XG5cdHNldG5hICVbZmFpbGVkXSYjMzQ7CQkJCVwKJiM0MzsJCSAgICAgOiBLVk1fQVNNX1NBRkVfT1VUUFVUUyh2ZWN0b3IsIGVycm9yX2NvZGUpLAlcCiYjNDM7CQkgICAgICAgW2ZhaWxlZF0mIzM0Oz1xbSYjMzQ7KGZhaWxlZCkJCQkJXAomIzQzOwkJICAgICA6IFtwYV0mIzM0O20mIzM0Oyh2bWNzX3BhKQkJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0OywgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTsJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldHVybiB2ZWN0b3IgPyB2ZWN0b3IgOiBmYWlsZWQgPyAtRUlOVkFMIDogMDsJCQlcCiYjNDM7fQkJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc24odTY0IHZtY3NfcGEpCQkJCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJaW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpOwkJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJR1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpOwkJXAogfQogCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXhvbikKJiM0MztCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtcHRybGQpCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bWNsZWFyKQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZteG9mZih2b2lkKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7dm14b2ZmJiMzNDspOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKQotewotCXU4IHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgmIzM0O3ZtY2xlYXIgJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsodm1jc19wYSkKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSkKLXsKLQl1OCByZXQ7Ci0KLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gLTE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF0mIzM0OwotCQk6IFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCi0JCTogW3BhXSYjMzQ7bSYjMzQ7KHZtY3NfcGEpCi0JCTogJiMzNDtjYyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSkKJiM0MztzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0KHZvaWQpCiB7Ci0JdTY0IHRtcDsKJiM0MzsJdTY0IHZhbHVlID0gMDsKIAl1OCByZXQ7CiAKLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3ZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3ZhbHVlXSYjMzQ7PW0mIzM0Oyh0bXApLCBbcmV0XSYjMzQ7PXJtJiMzNDsocmV0KQomIzQzOwkJOiBbdmFsdWVdJiMzNDs9bSYjMzQ7KHZhbHVlKSwgW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiAKLQkqdmFsdWUgPSB0bXA7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIEEgd3JhcHBlciBhcm91bmQgdm1wdHJzdCB0aGF0IGlnbm9yZXMgZXJyb3JzIGFuZCByZXR1cm5zIHplcm8gaWYgdGhlCi0gKiB2bXB0cnN0IGluc3RydWN0aW9uIGZhaWxzLgotICovCi1zdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKQotewotCXU2NCB2YWx1ZSA9IDA7Ci0Jdm1wdHJzdCgmYW1wO3ZhbHVlKTsKJiM0MzsJX19HVUVTVF9BU1NFUlQoIXJldCwgJiMzNDt2bXB0cnN0IGZhaWxlZCYjMzQ7KTsKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bWxhdW5jaCgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bXJlc3VtZSgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7CiYjNDM7I2RlZmluZSBCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyhpbnNuKQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX18jI2luc24odm9pZCkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlpbnQgcmV0OwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlpZiAoZW5hYmxlX2V2bWNzKQkJCQkJCVwKJiM0MzsJCXJldHVybiBldm1jc18jI2luc24oKTsJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwkJCQkJXAomIzQzOwkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwkJXAomIzQzOwkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwkJCVwKJiM0MzsJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICBfX3N0cmluZ2lmeShpbnNuKSYjMzQ7OyYjMzQ7CQkJXAomIzQzOwkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsJCQkJXAomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsJCQkJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwkJCQlcCiYjNDM7CQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQkJCQlcCiYjNDM7CQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwJCVwKJiM0MzsJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApLAkJXAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMJCQlcCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CQkJCVwKJiM0MzsJcmV0dXJuIHJldDsJCQkJCQkJXAomIzQzO30JCQkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNuKHZvaWQpCQkJCQkJXAomIzQzO3sJCQkJCQkJCQlcCiYjNDM7CWludCByZXQ7CQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldCA9IF9fIyNpbnNuKCk7CQkJCQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghcmV0LCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0OyBoaXQgVk0tRmFpbCYjMzQ7KTsJCVwKIH0KJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bWxhdW5jaCkKJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bXJlc3VtZSkKIAogc3RhdGljIGlubGluZSB2b2lkIHZtY2FsbCh2b2lkKQogewpAQCAtNTUwLDkgJiM0Mzs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3IgewogfTsKIAogc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpOwotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiYjNDM7dm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiB2b2lkIHByZXBhcmVfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHZvaWQgKmd1ZXN0X3JpcCk7Ci1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpOwomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiAKIGJvb2wgZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwppbmRleCBlMTllOGI1YTA5YzVhLi42YTE4MTVmYjk3ZTk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwpAQCAtMzMsMTQgJiM0MzszMywxNCBAQCBfX2FzbV9fKAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14LCB1NjQgdmNwdV9pZCkKIHsKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlHVUVTVF9BU1NFUlQoZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCgpKTsKIAogCSoodTY0ICopdm14LSZndDtzdGFjayA9IHZjcHVfaWQ7CiAJcHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX0RPTkUoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpCiAJcmV0dXJuIHZteDsKIH0KIAotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KQogewogCXU2NCBmZWF0dXJlX2NvbnRyb2w7CiAJdTY0IHJlcXVpcmVkOwpAQCAtMTYzLDI4ICYjNDM7MTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAKIAkvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovCiAJKih1MzIgKikodm14LSZndDt2bXhvbikgPSB2bWNzX3JldmlzaW9uKCk7Ci0JaWYgKHZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7CiYjNDM7CXZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKTsKIH0KIAotYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKIAkvKiBMb2FkIGEgVk1DUy4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3ZtY3MpID0gdm1jc19yZXZpc2lvbigpOwotCWlmICh2bWNsZWFyKHZteC0mZ3Q7dm1jc19ncGEpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CXZtY2xlYXIodm14LSZndDt2bWNzX2dwYSk7CiAKLQlpZiAodm1wdHJsZCh2bXgtJmd0O3ZtY3NfZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwl2bXB0cmxkKHZteC0mZ3Q7dm1jc19ncGEpOwogCiAJLyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3NoYWRvd192bWNzKSA9IHZtY3NfcmV2aXNpb24oKSB8IDB4ODAwMDAwMDB1bDsKLQlpZiAodm1jbGVhcih2bXgtJmd0O3NoYWRvd192bWNzX2dwYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwomIzQzOwl2bWNsZWFyKHZteC0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIH0KIAogc3RhdGljIGJvb2wgZXB0X3ZwaWRfY2FwX3N1cHBvcnRlZCh1NjQgbWFzaykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jCmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYwpAQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKIAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogewotCUdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpOwotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTsKIApAQCAtODMsNyAmIzQzOzgzLDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogCQl2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKm5lc3RlZF90ZXN0X2RhdGEpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwpAQCAtNTUsMTEgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywKIAllbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLSZndDt2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0KTsKIAlldm1jc19lbmFibGUoKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAkvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi8KIAlzeW5jX3dpdGhfaG9zdCgyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCmluZGV4IDYzZWExNTMzZTRlYWQuLmI3YzJhMjU0MjkxZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwpAQCAtMjMsNyAmIzQzOzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7CiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQogewogCXVkX2NvdW50JiM0MzsmIzQzOzsKLQlyZWdzLSZndDtyaXAgJiM0Mzs9IDM7IC8qIFZNTEFVTkNIICovCiYjNDM7CS8qCiYjNDM7CSAqIFZNTEFVTkNIIGluc24gY2FuJiMzOTt0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0CiYjNDM7CSAqIGx1Y2tpbHkgdGhlIGluc3RydWN0aW9uIGlzIGFsd2F5cyB0aHJlZSBieXRlcy4KJiM0MzsJICovCiYjNDM7CXJlZ3MtJmd0O3JpcCAmIzQzOz0gMzsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCkBAIC04OSwyMCAmIzQzOzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0X2dwYSwgaHZfcGFnZXMtJmd0O3ZwX2Fzc2lzdCk7CiAJZXZtY3NfZW5hYmxlKCk7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwogCUdVRVNUX1NZTkMoMyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwkvKiBWTVBUUlNUIHJldHVybnMgLTEgdW50aWwgVk1MQVVOQ0ggd2l0aCBlVk1DUyBwdHIgc2V0ICovCiYjNDM7CUdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gLTEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKIAlHVUVTVF9TWU5DKDUpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSAtMXU7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAljdXJyZW50X2V2bWNzLSZndDtyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047CiAJR1VFU1RfU1lOQyg2KTsKIApAQCAtMTE3LDE3ICYjNDM7MTIwLDE3IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJY3VycmVudF92cF9hc3Npc3QtJmd0O25lc3RlZF9jb250cm9sLmZlYXR1cmVzLmRpcmVjdGh5cGVyY2FsbCA9IDE7CiAJKih1MzIgKikoaHZfcGFnZXMtJmd0O3BhcnRpdGlvbl9hc3Npc3QpID0gMDsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTsKIAlHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pICZhbXA7IDB4ZmYpLCBOTUlfVkVDVE9SKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAKIAkvKgogCSAqIE5NSSBmb3JjZXMgTDItJmd0O0wxIGV4aXQsIHJlc3VtaW5nIEwyIGFuZCBob3BlIHRoYXQgRVZNQ1MgaXMKIAkgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmcKIAkgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAogCUdVRVNUX1NZTkMoMTApOwogCkBAIC0xMzgsMTMgJiM0MzsxNDEsMTMgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAl2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfAogCQlDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTsKIAlfX3NldF9iaXQoTVNSX0ZTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7Ci0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpOwogCWN1cnJlbnRfZXZtY3MtJmd0O2d1ZXN0X3JpcCAmIzQzOz0gMjsgLyogcmRtc3IgKi8KIAogCS8qIEVuYWJsZSBlbmxpZ2h0ZW5lZCBNU1IgYml0bWFwICovCiAJY3VycmVudF9ldm1jcy0mZ3Q7aHZfZW5saWdodGVubWVudHNfY29udHJvbC5tc3JfYml0bWFwID0gMTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNTIsMTQgJiM0MzsxNTUsMTQgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAlfX3NldF9iaXQoTVNSX0dTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7CiAJLyogTWFrZSBzdXJlIEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQIGlzIHNldCAqLwogCWN1cnJlbnRfZXZtY3MtJmd0O2h2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCS8qIE1ha2Ugc3VyZSB3ZSBkb24mIzM5O3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi8KIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDM7IC8qIHZtY2FsbCAqLwogCiAJLyogTm93IHRlbGwgS1ZNIHdlJiMzOTt2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNjcsMjEgJiM0MzsxNzAsMjkgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAkgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLAogCSAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovCiAJLyogRW5hYmxlIHN5bnRoZXRpYyB2bWV4aXQgKi8KIAkqKHUzMiAqKShodl9wYWdlcy0mZ3Q7cGFydGl0aW9uX2Fzc2lzdCkgPSAxOwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX1NZTkMoMTEpOwogCi0JLyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovCiYjNDM7CS8qIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gY2F1c2VzICNVRCBhZnRlciBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCAqLwomIzQzOwlHVUVTVF9BU1NFUlQoX192bXB0cmxkKGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBLiBHVUVTVF9TWU5DKDEyKSBzaWduYWxzCiYjNDM7CSAqIHRoZSBob3N0IHRvIGVuYWJsZSBndWVzdF91ZF9oYW5kbGVyKCkgd2hpY2ggY2Fubm90IGJlIGVuYWJsZWQgYmVmb3JlaGFuZAomIzQzOwkgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfU1lOQygxMik7CiAJZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jcyk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiAJR1VFU1RfRE9ORSgpOwogfQpAQCAtMjUzLDcgJiM0MzsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXZjcHVfYXJnc19zZXQodmNwdSwgMywgdm14X3BhZ2VzX2d2YSwgaHZfcGFnZXNfZ3ZhLCBhZGRyX2d2YTJncGEodm0sIGhjYWxsX3BhZ2UpKTsKIAl2Y3B1X3NldF9tc3IodmNwdSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgdmNwdS0mZ3Q7aWQpOwogCi0Jdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKIAl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7CiAKIAlwcl9pbmZvKCYjMzQ7UnVubmluZyBMMSB3aGljaCB1c2VzIEVWTUNTIHRvIHJ1biBMMlxuJiMzNDspOwpAQCAtMjgzLDcgJiM0MzsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCS8qIEZvcmNlIGltbWVkaWF0ZSBMMi0mZ3Q7TDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi8KIAkJaWYgKHN0YWdlID09IDgpIHsKLQkJCXByX2luZm8oJiMzNDtJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxuJiMzNDspOwomIzQzOwkJCXByX2RlYnVnKCYjMzQ7SW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcbiYjMzQ7KTsKIAkJCWluamVjdF9ubWkodmNwdSk7CiAJCX0KIApAQCAtMjkzLDkgJiM0MzszMDMsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICogS1ZNX1NUQVRFX05FU1RFRF9FVk1DUyBpcyBub3QgbG9zdC4KIAkJICovCiAJCWlmIChzdGFnZSA9PSA5KSB7Ci0JCQlwcl9pbmZvKCYjMzQ7VHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXG4mIzM0Oyk7CiYjNDM7CQkJcHJfZGVidWcoJiMzNDtUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcbiYjMzQ7KTsKIAkJCXZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RhZ2UgPT0gMTIpIHsKJiM0MzsJCQlwcl9kZWJ1ZygmIzM0O1RyeWluZyBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCB3aXRoIGFuIGludmFsaWQgUFRSXG4mIzM0Oyk7CiYjNDM7CQkJdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKJiM0MzsJCX0KIAl9CiAKIGRvbmU6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCmluZGV4IDI1YTE4MmJlMDBhOTcuLjMzN2QzYzI4YmM2ZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCkBAIC00MiwxMyAmIzQzOzQyLDEzIEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKLQlHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTsKLQlHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jCmluZGV4IGI5NzRjZmIzNDdkNmUuLjFmNGE1ZTQ0YTZlZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuYwpAQCAtMzAsMTMgJiM0MzszMCwxMyBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jCmluZGV4IDI2YjQ3NGJmMTM1MzUuLjc5ODdjZTUwYzM4MjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuYwpAQCAtOTMsOCAmIzQzOzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJdm9pZCAqbDJfcmlwOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlpZiAodm14LSZndDtlcHRwX2dwYSkKIAkJbDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDsKQEAgLTEwNCw3ICYjNDM7MTA0LDcgQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJcHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTsKIAogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKIAlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmMKaW5kZXggZTA4YzZiMDY5N2U1MC4uMTFmZTRhMzFlZGEwYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jCkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKIAkJCQkJICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTsKIAkJdm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7CiAJfSBlbHNlIHsKLQkJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odGVzdF9kYXRhKSk7Ci0JCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3ModGVzdF9kYXRhKSk7CiYjNDM7CQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7CiYjNDM7CQlsb2FkX3ZtY3ModGVzdF9kYXRhKTsKIAogCQlwcmVwYXJlX3ZtY3ModGVzdF9kYXRhLCBOVUxMKTsKIAkJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX0lEVFJfTElNSVQsIDApKTsKQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpCiAJCQlleGl0X2luc25fbGVuID0gdm1jYi0mZ3Q7Y29udHJvbC5uZXh0X3JpcCAtIHZtY2ItJmd0O3NhdmUucmlwOwogCQkJR1VFU1RfQVNTRVJUX0VRKHZtY2ItJmd0O3NhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApOwomIzQzOwkJCWkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTsKIAkJCWV4aXRfcmVhc29uID0gdm1yZWFkeihWTV9FWElUX1JFQVNPTik7CiAJCQlleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7CiAJCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSkKIHsKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTsKIAotCUdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApOwomIzQzOwl2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7CiAKIAlpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUikKIAkJcmV0dXJuOwpAQCAtMTI1LDkgJiM0MzsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKIAotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jCmluZGV4IDhjMmJhOTY3NDU1OGUuLjEwMWMxZmU3OWVlYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmMKQEAgLTQwLDIxICYjNDM7NDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewogCXVpbnRwdHJfdCBzYXZlX2NyMzsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAogCS8qIFRyeSB0byBydW4gTDIgd2l0aCBpbnZhbGlkIENSMyBhbmQgbWFrZSBzdXJlIGl0IGZhaWxzICovCiAJc2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7CiAJdm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PQogCQkgICAgIChFWElUX1JFQVNPTl9GQUlMRURfVk1FTlRSWSB8IEVYSVRfUkVBU09OX0lOVkFMSURfU1RBVEUpKTsKIAogCS8qIE5vdyByZXN0b3JlIENSMyBhbmQgbWFrZSBzdXJlIEwyIHJ1bnMgc3VjY2Vzc2Z1bGx5ICovCiAJdm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMKaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jCkBAIC01NSwxMiAmIzQzOzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSwKIAl1NjQgZXhpdF9xdWFsOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBsMl9lbnRyeSk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCiAJLyogVmVyaWZ5IHdlIGdvdCBhbiBFUFQgdmlvbGF0aW9uIGV4aXQgKi8KIAlfX0dVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwppbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwpAQCAtODYsOCAmIzQzOzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKQogCQlzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhOwogCQl1MzIgY29udHJvbDsKIAotCQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJCWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCQljb250cm9sID0gdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKTsKQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSkKIAkJdm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTsKIAkJdm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTsKIAotCQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwkJdm1sYXVuY2goKTsKIAkJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSA9IGRhdGE7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMKaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuYwpAQCAtMTA1LDggJiM0MzsxMDUsOCBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJLyogY2hlY2sgdGhhdCBMMSYjMzk7cyBmcmVxdWVuY3kgbG9va3MgYWxyaWdodCBiZWZvcmUgbGF1bmNoaW5nIEwyICovCiAJY2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi8KIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoVFNDX01VTFRJUExJRVJfSElHSCwgVFNDX01VTFRJUExJRVJfTDIgJmd0OyZndDsgMzIpOwogCiAJLyogbGF1bmNoIEwyICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jCmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpAQCAtOTgsMTcgJiM0Mzs5OCwxNyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTsKIAogCUdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAl3aGlsZSAoMSkgewogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpOwogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgJmFtcDsgMHhmZiwgVURfVkVDVE9SKTsKLQkJR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJCXZtcmVzdW1lKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKaW5kZXggZDFlZGFmZDVhZjc1NS4uMzc3ZGYwOWU1ODJhZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwpAQCAtNzgsOCAmIzQzOzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpCiAJCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkgewogCQkJZ2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CQkJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAJCQlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAkJfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCmluZGV4IDRhMTA1NmE2Y2I4ZGMuLjM4Yzk2ODlhYzYwMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCkBAIC03NSwzMiAmIzQzOzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZCkKIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKIAlHVUVTVF9TWU5DKDMpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIHZteF9sMl9ndWVzdF9jb2RlKTsKIAogCUdVRVNUX1NZTkMoNSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJdm1sYXVuY2goKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIENoZWNrIHRoYXQgdGhlIGxhdW5jaGVkIHN0YXRlIGlzIHByZXNlcnZlZC4gICovCi0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAKIAlHVUVTVF9TWU5DKDcpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCXZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgJiM0MzsgMyk7CkBAIC0xMDgsMjggJiM0MzsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpOwogCXZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIAotCUdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSkpOwotCUdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTsKJiM0MzsJdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpOwogCUdVRVNUX1NZTkMoOCk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCiAJdm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTsKIAlHVUVTVF9TWU5DKDkpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZWUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKSk7CiYjNDM7CXZtcHRybGQodm14X3BhZ2VzLSZndDtzaGFkb3dfdm1jc19ncGEpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCUdVRVNUX1NZTkMoMTMpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogfQogCiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2ZsYXR0ZW5fXykpIGd1ZXN0X2NvZGUodm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jCmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmMKQEAgLTI1LDEyICYjNDM7MjUsMTIgQEAgdm9pZCBsMV9ndWVzdF9jb2RlX3ZteChzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7CiAKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAogCXByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAkvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIGEgdHJpcGxlIGZhdWx0IGV2ZW50IGluamVjdGVkLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwogCUdVRVNUX0RPTkUoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYwppbmRleCA0NjNmNzNhYTkxNTlhLi5mZTI5Yzg2OWEyMzU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jCkBAIC0zOCw4ICYjNDM7MzgsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSkKIHsKIAl1MzIgY29udHJvbDsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01MywxNCAmIzQzOzUzLDE0IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKQogCiAJLyogVHJ5IHRvIGxhdW5jaCBMMiB3aXRoIHRoZSBtZW1vcnktYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJdm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7CiAKIAkvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwppbmRleCBmOWI4OGE2ZjYxMTNkLi5lNTc4MjIxZGEyNDdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwpAQCAtMzMsOCAmIzQzOzMzLDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiB7CiAJdTMyIGNvbnRyb2w7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwpAQCAtNjIsNyAmIzQzOzYyLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogUnVuIEwyIHRvIHN3aXRjaCB0byB4MkFQSUMgbW9kZSwgd2hpY2ggaW4gdHVybiB3aWxsIHVuaW5oaWJpdCBBUElDdiwKIAkgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAl2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICYjNDM7IHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTsKIAlHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpOwpAQCAtOTAsNyAmIzQzOzkwLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogaGFuZGxlcyB0aGUgeDJBUElDID0mZ3Q7IHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyCiAJICogaXMgYWN0aXZlLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKaW5kZXggYzgzNzkxMjRiMzE3Mi4uMzAxNzkzOGZhOTkzNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCkBAIC00MSw4ICYjNDM7NDEsOCBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAlHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpICZhbXA7IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8CiAJCSAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpICZhbXA7IFNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVCkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAogCS8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jCmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmMKQEAgLTM3LDggJiM0MzszNyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCUdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTsKIAogCUdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCWd1ZXN0X2NyNCAmYW1wOz0gflg4Nl9DUjRfTEE1NzsKIAl2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAlleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pOwogCUdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwppbmRleCBlYjgwMjFjMzNjZDQzLi5jZGE1M2RmMzM4ODhlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwpAQCAtNzEsOSAmIzQzOzcxLDkgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAl1NjQgbDFfdHNjX2RlYWRsaW5lLCBsMl90c2NfZGVhZGxpbmU7CiAKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwomIzQzOwlsb2FkX3ZtY3Modm14X3BhZ2VzKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCkBAIC05MCw3ICYjNDM7OTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCSAgICAhKGN0cmxfZXhpdF9yZXYuY2xyICZhbXA7IFZNX0VYSVRfU0FWRV9WTVhfUFJFRU1QVElPTl9USU1FUikpCiAJCXJldHVybjsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJdm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7CiAKQEAgLTExMCw3ICYjNDM7MTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAogCWwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpICZndDsmZ3Q7IHZteF9wdF9yYXRlKSAmbHQ7Jmx0OyB2bXhfcHRfcmF0ZTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAKIAlsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMzYKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gVk1YIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdHdlYWtpbmcgdGhlIGhhbmRsaW5nIG9mIGBWTVBUUkxEYCBhbmQgYFZNUFRSU1RgIHdpdGhpbiBLVk0mIzM5O3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSSBzZWUgY2hhbmdlcyB0byBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLCBhbG9uZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc2VsZnRlc3RzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhgIGFuZCBlbHNld2hlcmUuCgpGb2N1c2luZyBvbiBgaGFuZGxlX3ZtcHRybGRgLCBpdCBzZWVtcyB3ZSYjMzk7cmUgbm93IGV4cGxpY2l0bHkgcHJldmVudGluZyBhICYjMzQ7bm9ybWFsJiMzNDsgYFZNUFRSTERgIGlmIHRoZSAmIzM0O0VubGlnaHRlbmVkJiMzNDsgdmVyc2lvbiBoYXMgYmVlbiB1c2VkLiBUaGUgY29kZSBub3cgdHJpZ2dlcnMgYSBVRCBleGNlcHRpb24gKGBVRF9WRUNUT1JgKSBpbiB0aGlzIGNhc2UuICBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGVzc2VudGlhbGx5LCBlbmZvcmNpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBlcnJvcmluZyBvdXQgaWYgdGhpbmdzIGFyZSBub3QgYXMgYW50aWNpcGF0ZWQuCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGBoYW5kbGVfdm1wdHJzdGAuIFByZXZpb3VzbHksIGlmIGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKClgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24gd291bGQgcmV0dXJuIDEsIG1lYW5pbmcgaXQgd291bGQgZWZmZWN0aXZlbHkgZG8gbm90aGluZy4gTm93LCB0aG91Z2gsIGl0JiMzOTtzIGNoYW5nZWQuIFdpdGggdGhlIGFkZGl0aW9uIG9mIGAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZgLCB0aGUgY29kZSBub3cgc2V0cyBgY3VycmVudF92bXB0cmAgdG8gYHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyYCB3aGVuIGl0IHNlZXMgYW4gZVZNQ1MuICBUaGVuIGl0IGdvZXMgb24gdG8gd3JpdGUgKnRoYXQqIHZhbHVlIHRvIGd1ZXN0IG1lbW9yeS4gIFRoaXMgYmVoYXZpb3IgbWFrZXMgc2Vuc2UgaWYgeW91JiMzOTtyZSB3b3JraW5nIHdpdGggSHlwZXItViBUTEZTLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtIb2xkIG9uLCBpcyB0aGlzIGdvaW5nIHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8mIzM0OyAgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgY3VycmVudF92bXB0cmAsIGEgYGdwYV90YCAoc28sIGEgYHU2NGApLiAgSXQmIzM5O3MgYXNzaWduZWQgZWl0aGVyIGB0b192bXgodmNwdSktJmd0O25lc3RlZC5odl9ldm1jc192bXB0cmAgb3IgYHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHJgLiBCb3RoIG9mIHRoZXNlIGFyZSB3aXRoaW4gdGhlIGBuZXN0ZWRfdm14YCBzdHJ1Y3QuIEJ1dCBhZnRlciBhIHNlY29uZCBsb29rLCBJIGNhbiBzZWUgdGhhdCBgaHZfZXZtY3Nfdm1wdHJgIGlzIGluaXRpYWxpemVkIHdoZW4gZVZNQ1MgaXMgbG9hZGVkIGFuZCBgY3VycmVudF92bXB0cmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBgVk1QVFJMRGAgZXhlY3V0ZXMuIFdlJiMzOTtyZSBub3QgcmVhZGluZyBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgZmllbGQuIFRoZSBwYXRjaCBpcyBzaW1wbHkgZW5zdXJpbmcgdGhhdCBpdCB3cml0ZXMgYSBrbm93biBHUEEgZm9yIGVWTUNTIHVzYWdlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgd3JpdGUgdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAgd2l0aGluIGBoYW5kbGVfdm1wdHJzdGAuIFRoZSBjb2RlIGdyYWJzIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgKGBndmFgKSBhbmQgd3JpdGVzIHRoZSBmdWxseSBpbml0aWFsaXplZCBgY3VycmVudF92bXB0cmAgdG8gaXQuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgYGN1cnJlbnRfdm1wdHJgIGlzIGFuIDgtYnl0ZSB2YWx1ZSBhbmQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4sIHNvIG5vIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZS4KClNvLCBhZnRlciB0aGlzIGRlZXBlciBkaXZlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciByaXNrcy4gSXQmIzM5O3Mgc2ltcGx5IGNoYW5naW5nIHRoZSAqdmFsdWUqIHdyaXR0ZW4gaW4gYSBzcGVjaWZpYyBlVk1DUyBzY2VuYXJpby4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgaW4gS1ZNJiMzOTtzIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZS4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igd2hlbiBlVk1DUyBpcyB1c2VkOiBpbnN0ZWFkIG9mIHJldHVybmluZyAxIChkb2luZyBub3RoaW5nKSwgaXQgbm93IHNldHMgdGhlIGxvY2FsIHZhcmlhYmxlIGBjdXJyZW50X3ZtcHRyYCB0byBgaHZfZXZtY3Nfdm1wdHJgIGFuZCB3cml0ZXMgaXQgdG8gZ3Vlc3QgbWVtb3J5LiBgY3VycmVudF92bXB0cmAgaXMgYSBgZ3BhX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGd1ZXN0IHZpYSBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gVGhlcmUgYXJlIG5vIHN0cnVjdHMgd2l0aCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGludm9sdmVkLiBUaGUgcmVzdCBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gS1ZNIHNlbGZ0ZXN0cy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0mIzM5O3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLiBJbiBgaGFuZGxlX3ZtcHRyc3RgLCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQ6IGluc3RlYWQgb2YgcmV0dXJuaW5nIDEgKGRvaW5nIG5vdGhpbmcpLCBpdCBub3cgc2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAgYW5kIHdyaXRlcyBpdCB0byBndWVzdCBtZW1vcnkuIGBjdXJyZW50X3ZtcHRyYCBpcyBhIGBncGFfdGAgKGEgNjQtYml0IGludGVnZXIpLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byB0aGUgZ3Vlc3QgdmlhIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGVyZSBhcmUgbm8gc3RydWN0cyB3aXRoIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgaW52b2x2ZWQuIFRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBLVk0gc2VsZnRlc3RzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU1OjI2LjM2NzIyNDYzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDMwNzkwNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV92bXB0cmxkXCIsXG4gICAgXCJoYW5kbGVfdm1wdHJzdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0ncyBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvZGUuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZDogaW5zdGVhZCBvZiByZXR1cm5pbmcgMSAoZG9pbmcgbm90aGluZyksIGl0IG5vdyBzZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYCBhbmQgd3JpdGVzIGl0IHRvIGd1ZXN0IG1lbW9yeS4gYGN1cnJlbnRfdm1wdHJgIGlzIGEgYGdwYV90YCAoYSA2NC1iaXQgaW50ZWdlciksIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBndWVzdCB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIFRoZXJlIGFyZSBubyBzdHJ1Y3RzIHdpdGggcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnZvbHZlZC4gVGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGluIEtWTSBzZWxmdGVzdHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gbmVzdGVkIFZNWCB3aGVuIEVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBpcyB1c2VkLiBJdCBjaGFuZ2VzIFZNUFRSTEQgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGFuZCBWTVBUUlNUIHRvIHJldHVybiB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6MjYuMzY3MjMwODY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEyODE5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzOTljMmViYjA0MWQyNjk4MDE4M2FhZTEzNDYzNTY4NmJiMDRjYjA0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjU1OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC01ODk3LDYgKzU4OTcsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuK1xcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuK1xcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG4rXFx0XFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFxcdTAwMjZ2bXB0ciwgXFx1MDAyNnIpKVxcbiBcXHRcXHRyZXR1cm4gcjtcXG4gXFxuQEAgLTU5MDYsMTAgKzU5MTIsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHZtcHRyID09IHZteC1cXHUwMDNlbmVzdGVkLnZteG9uX3B0cilcXG4gXFx0XFx0cmV0dXJuIG5lc3RlZF92bXhfZmFpbCh2Y3B1LCBWTVhFUlJfVk1QVFJMRF9WTVhPTl9QT0lOVEVSKTtcXG4gXFxuLVxcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuLVxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXG4gXFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgIT0gdm1wdHIpIHtcXG4gXFx0XFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgKmdoYyA9IFxcdTAwMjZ2bXgtXFx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XFxuIFxcdFxcdHN0cnVjdCB2bWNzX2hkciBoZHI7XFxuQEAgLTU5NjIsNyArNTk2NCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbi1cXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcXG4rXFx0Z3BhX3QgY3VycmVudF92bXB0cjtcXG4gXFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG4gXFx0Z3ZhX3QgZ3ZhO1xcbiBcXHRpbnQgcjtcXG5AQCAtNTk3MCw4ICs1OTcyLDE2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuK1xcdC8qXFxuK1xcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxcbitcXHQgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuXFxuK1xcdCAqL1xcbisjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG4rXFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcXG4rXFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbitcXHRlbHNlXFxuKyNlbmRpZlxcbitcXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcXG4gXFxuIFxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcXG4gXFx0XFx0XFx0XFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXFx1MDAyNmd2YSkpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5pbmRleCA4MmE4ZWE2YjY2MWYwLi5jNWI5ZDI2ZjZjZGJlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5AQCAtMjY1LDE0ICsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1wdHJzdCh1NjQgKnZhbHVlKVxcbi17XFxuLVxcdCp2YWx1ZSA9IGN1cnJlbnRfdnBfYXNzaXN0LVxcdTAwM2VjdXJyZW50X25lc3RlZF92bWNzIFxcdTAwMjZcXG4tXFx0XFx0fkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpXFxuIHtcXG4gXFx0c3dpdGNoIChlbmNvZGluZykge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5pbmRleCA2ZTZmNzAwMzU1MDhhLi4yODJiOGFhZmY3OTk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbkBAIC0xMzE4LDcgKzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTtcXG4gXFx0XFxcImxlYSAxZiglJXJpcCksICUlcjEwXFxcXG5cXFxcdFxcXCJcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcXCJsZWEgMmYoJSVyaXApLCAlJXIxMVxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRmZXAgXFxcIjE6IFxcXCIgaW5zbiBcXFwiXFxcXG5cXFxcdFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcXCJ4b3IgJSVyOSwgJSVyOVxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXFwibW92ICQwLCAlJXI5ZFxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXFwiMjpcXFxcblxcXFx0XFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFxcIm1vdiAgJSVyOWIsICVbdmVjdG9yXVxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXFwibW92ICAlJXIxMCwgJVtlcnJvcl9jb2RlXVxcXFxuXFxcXHRcXFwiXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbmluZGV4IDA0ZjVlMzRkZWEzYWUuLmNkODJhNmJlNjk2M2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuQEAgLTMwOSwxMjYgKzMwOSw5MSBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XFxuIFxcbiAjaW5jbHVkZSBcXFwiZXZtY3MuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxcbi17XFxuLVxcdHU4IHJldDtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fIChcXFwidm14b24gJVtwYV07IHNldG5hICVbcmV0XVxcXCJcXG4tXFx0XFx0OiBbcmV0XVxcXCI9cm1cXFwiKHJldClcXG4tXFx0XFx0OiBbcGFdXFxcIm1cXFwiKHBoeXMpXFxuLVxcdFxcdDogXFxcImNjXFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rI2RlZmluZSBHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIF9fciwgX19wYSlcXHRcXHRcXFxcXFxuK1xcdF9fR1VFU1RfQVNTRVJUKCFfX3IsIF9fc3RyaW5naWZ5KGluc24pIFxcXCJbMHglbHhdIGhpdCAlc1xcXCIsXFx0XFxcXFxcbitcXHRcXHQgICAgICAgX19wYSwgX19yIFxcdTAwM2MgMCA/IFxcXCJWTS1GYWlsXFxcIiA6IGV4X3N0cihfX3IpKVxcbitcXG4rI2RlZmluZSBCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKGluc24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHU2NCBlcnJvcl9jb2RlO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dTggdmVjdG9yO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dTggZmFpbGVkO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pIFxcXCIgJVtwYV1cXFwiKVxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiXFxcXG5cXFxcdHNldG5hICVbZmFpbGVkXVxcXCJcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgOiBLVk1fQVNNX1NBRkVfT1VUUFVUUyh2ZWN0b3IsIGVycm9yX2NvZGUpLFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFtmYWlsZWRdXFxcIj1xbVxcXCIoZmFpbGVkKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFtwYV1cXFwibVxcXCIodm1jc19wYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgOiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIiwgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTtcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0dXJuIHZlY3RvciA/IHZlY3RvciA6IGZhaWxlZCA/IC1FSU5WQUwgOiAwO1xcdFxcdFxcdFxcXFxcXG4rfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih1NjQgdm1jc19wYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCByZXQgPSBfXyMjaW5zbih2bWNzX3BhKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0R1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpO1xcdFxcdFxcXFxcXG4gfVxcbiBcXG4rQlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXhvbilcXG4rQlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXB0cmxkKVxcbitCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtY2xlYXIpXFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14b2ZmKHZvaWQpXFxuIHtcXG4gXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInZteG9mZlxcXCIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKVxcbi17XFxuLVxcdHU4IHJldDtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fIChcXFwidm1jbGVhciAlW3BhXTsgc2V0bmEgJVtyZXRdXFxcIlxcbi1cXHRcXHQ6IFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbi1cXHRcXHQ6IFtwYV1cXFwibVxcXCIodm1jc19wYSlcXG4tXFx0XFx0OiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKVxcbi17XFxuLVxcdHU4IHJldDtcXG4tXFxuLVxcdGlmIChlbmFibGVfZXZtY3MpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fIChcXFwidm1wdHJsZCAlW3BhXTsgc2V0bmEgJVtyZXRdXFxcIlxcbi1cXHRcXHQ6IFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbi1cXHRcXHQ6IFtwYV1cXFwibVxcXCIodm1jc19wYSlcXG4tXFx0XFx0OiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cnN0KHU2NCAqdmFsdWUpXFxuK3N0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3Qodm9pZClcXG4ge1xcbi1cXHR1NjQgdG1wO1xcbitcXHR1NjQgdmFsdWUgPSAwO1xcbiBcXHR1OCByZXQ7XFxuIFxcbi1cXHRpZiAoZW5hYmxlX2V2bWNzKVxcbi1cXHRcXHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XFxuLVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwidm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXFxcIlxcbi1cXHRcXHQ6IFt2YWx1ZV1cXFwiPW1cXFwiKHRtcCksIFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbitcXHRcXHQ6IFt2YWx1ZV1cXFwiPW1cXFwiKHZhbHVlKSwgW3JldF1cXFwiPXJtXFxcIihyZXQpXFxuIFxcdFxcdDogOiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIFxcbi1cXHQqdmFsdWUgPSB0bXA7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEEgd3JhcHBlciBhcm91bmQgdm1wdHJzdCB0aGF0IGlnbm9yZXMgZXJyb3JzIGFuZCByZXR1cm5zIHplcm8gaWYgdGhlXFxuLSAqIHZtcHRyc3QgaW5zdHJ1Y3Rpb24gZmFpbHMuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxcbi17XFxuLVxcdHU2NCB2YWx1ZSA9IDA7XFxuLVxcdHZtcHRyc3QoXFx1MDAyNnZhbHVlKTtcXG4rXFx0X19HVUVTVF9BU1NFUlQoIXJldCwgXFxcInZtcHRyc3QgZmFpbGVkXFxcIik7XFxuIFxcdHJldHVybiB2YWx1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcXG4te1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4tXFx0XFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XFxuLVxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbi1cXHRcXHRcXHQgICAgIFxcXCJ2bWxhdW5jaDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuLVxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiKCh1NjQpSE9TVF9SU1ApLFxcbi1cXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKSxcXG4tXFx0XFx0XFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxcbi17XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpZiAoZW5hYmxlX2V2bWNzKVxcbi1cXHRcXHRyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuLVxcdFxcdFxcdCAgICAgXFxcInZtcmVzdW1lO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4tXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFxuLVxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApLFxcbi1cXHRcXHRcXHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuLVxcdHJldHVybiByZXQ7XFxuKyNkZWZpbmUgQlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlMoaW5zbilcXHRcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHZvaWQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbit7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpbnQgcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiAoZW5hYmxlX2V2bWNzKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmV0dXJuIGV2bWNzXyMjaW5zbigpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcXFwiXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgX19zdHJpbmdpZnkoaW5zbilcXFwiO1xcXCJcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKSxcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyZXR1cm4gcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih2b2lkKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aW50IHJldDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0ID0gX18jI2luc24oKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fR1VFU1RfQVNTRVJUKCFyZXQsIF9fc3RyaW5naWZ5KGluc24pIFxcXCIgaGl0IFZNLUZhaWxcXFwiKTtcXHRcXHRcXFxcXFxuIH1cXG4rQlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlModm1sYXVuY2gpXFxuK0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtcmVzdW1lKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHZtY2FsbCh2b2lkKVxcbiB7XFxuQEAgLTU1MCw5ICs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3Ige1xcbiB9O1xcbiBcXG4gc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpO1xcbi1ib29sIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KTtcXG4rdm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XFxuIHZvaWQgcHJlcGFyZV92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdm9pZCAqZ3Vlc3RfcmlwKTtcXG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcXG4rdm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcXG4gXFxuIGJvb2wgZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCh2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcXG5pbmRleCBlMTllOGI1YTA5YzVhLi42YTE4MTVmYjk3ZTk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcXG5AQCAtMzMsMTQgKzMzLDE0IEBAIF9fYXNtX18oXFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IHZjcHVfaWQpXFxuIHtcXG4gXFx0R1VFU1RfQVNTRVJUKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbitcXHRsb2FkX3ZtY3Modm14KTtcXG4gXFx0R1VFU1RfQVNTRVJUKGVwdF8xZ19wYWdlc19zdXBwb3J0ZWQoKSk7XFxuIFxcbiBcXHQqKHU2NCAqKXZteC1cXHUwMDNlc3RhY2sgPSB2Y3B1X2lkO1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14LCBtZW1zdHJlc3NfbDJfZ3Vlc3RfZW50cnkpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xcbmluZGV4IDA4OWUxYThhZjUzZmMuLjVjNmNhZGMwODQwNWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpXFxuIFxcdHJldHVybiB2bXg7XFxuIH1cXG4gXFxuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuK3ZvaWQgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIHtcXG4gXFx0dTY0IGZlYXR1cmVfY29udHJvbDtcXG4gXFx0dTY0IHJlcXVpcmVkO1xcbkBAIC0xNjMsMjggKzE2MywyMCBAQCBib29sIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiBcXG4gXFx0LyogRW50ZXIgVk1YIHJvb3Qgb3BlcmF0aW9uLiAqL1xcbiBcXHQqKHUzMiAqKSh2bXgtXFx1MDAzZXZteG9uKSA9IHZtY3NfcmV2aXNpb24oKTtcXG4tXFx0aWYgKHZteG9uKHZteC1cXHUwMDNldm14b25fZ3BhKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHZteG9uKHZteC1cXHUwMDNldm14b25fZ3BhKTtcXG4gfVxcbiBcXG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbit2b2lkIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIHtcXG4gXFx0LyogTG9hZCBhIFZNQ1MuICovXFxuIFxcdCoodTMyICopKHZteC1cXHUwMDNldm1jcykgPSB2bWNzX3JldmlzaW9uKCk7XFxuLVxcdGlmICh2bWNsZWFyKHZteC1cXHUwMDNldm1jc19ncGEpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHZtY2xlYXIodm14LVxcdTAwM2V2bWNzX2dwYSk7XFxuIFxcbi1cXHRpZiAodm1wdHJsZCh2bXgtXFx1MDAzZXZtY3NfZ3BhKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR2bXB0cmxkKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbiBcXG4gXFx0LyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi9cXG4gXFx0Kih1MzIgKikodm14LVxcdTAwM2VzaGFkb3dfdm1jcykgPSB2bWNzX3JldmlzaW9uKCkgfCAweDgwMDAwMDAwdWw7XFxuLVxcdGlmICh2bWNsZWFyKHZteC1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHZtY2xlYXIodm14LVxcdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBlcHRfdnBpZF9jYXBfc3VwcG9ydGVkKHU2NCBtYXNrKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xcbmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmNcXG5AQCAtNzAsOCArNzAsOCBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiB7XFxuLVxcdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xcbi1cXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XFxuK1xcdGxvYWRfdm1jcyh2bXgpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XFxuIFxcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4gXFx0XFx0dm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8IENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqbmVzdGVkX3Rlc3RfZGF0YSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5AQCAtNTUsMTEgKzU1LDExIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLFxcbiBcXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVxcdTAwM2V2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy1cXHUwMDNldnBfYXNzaXN0KTtcXG4gXFx0ZXZtY3NfZW5hYmxlKCk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xcbiBcXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHQvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi9cXG4gXFx0c3luY193aXRoX2hvc3QoMik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXFxuaW5kZXggNjNlYTE1MzNlNGVhZC4uYjdjMmEyNTQyOTFlNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xcbkBAIC0yMyw3ICsyMywxMSBAQCBzdGF0aWMgaW50IHVkX2NvdW50O1xcbiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVkX2NvdW50Kys7XFxuLVxcdHJlZ3MtXFx1MDAzZXJpcCArPSAzOyAvKiBWTUxBVU5DSCAqL1xcbitcXHQvKlxcbitcXHQgKiBWTUxBVU5DSCBpbnNuIGNhbid0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0XFxuK1xcdCAqIGx1Y2tpbHkgdGhlIGluc3RydWN0aW9uIGlzIGFsd2F5cyB0aHJlZSBieXRlcy5cXG4rXFx0ICovXFxuK1xcdHJlZ3MtXFx1MDAzZXJpcCArPSAzO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcXG5AQCAtODksMjAgKzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXFxuIFxcdGVuYWJsZV92cF9hc3Npc3QoaHZfcGFnZXMtXFx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVxcdTAwM2V2cF9hc3Npc3QpO1xcbiBcXHRldm1jc19lbmFibGUoKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuIFxcdEdVRVNUX1NZTkMoMyk7XFxuIFxcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuK1xcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cXG4rXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSAtMSk7XFxuIFxcbiBcXHRHVUVTVF9TWU5DKDQpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbiBcXHRHVUVTVF9TWU5DKDUpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2VyZXZpc2lvbl9pZCA9IC0xdTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlcmV2aXNpb25faWQgPSBFVk1DU19WRVJTSU9OO1xcbiBcXHRHVUVTVF9TWU5DKDYpO1xcbiBcXG5AQCAtMTE3LDE3ICsxMjAsMTcgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcXG4gXFx0Y3VycmVudF92cF9hc3Npc3QtXFx1MDAzZW5lc3RlZF9jb250cm9sLmZlYXR1cmVzLmRpcmVjdGh5cGVyY2FsbCA9IDE7XFxuIFxcdCoodTMyICopKGh2X3BhZ2VzLVxcdTAwM2VwYXJ0aXRpb25fYXNzaXN0KSA9IDA7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xcbiBcXHRHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFxcdTAwMjYgMHhmZiksIE5NSV9WRUNUT1IpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbitcXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBOTUkgZm9yY2VzIEwyLVxcdTAwM2VMMSBleGl0LCByZXN1bWluZyBMMiBhbmQgaG9wZSB0aGF0IEVWTUNTIGlzXFxuIFxcdCAqIHVwLXRvLWRhdGUgKFJJUCBwb2ludHMgd2hlcmUgaXQgc2hvdWxkIGFuZCBub3QgYXQgdGhlIGJlZ2lubmluZ1xcbiBcXHQgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuXFxuIFxcdCAqL1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQygxMCk7XFxuIFxcbkBAIC0xMzgsMTMgKzE0MSwxMyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxcbiBcXHR2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfFxcbiBcXHRcXHRDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTtcXG4gXFx0X19zZXRfYml0KE1TUl9GU19CQVNFIFxcdTAwMjYgMHgxZmZmLCB2bXhfcGFnZXMtXFx1MDAzZW1zciArIDB4NDAwKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0dm1yZXN1bWUoKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXFxuIFxcbiBcXHQvKiBFbmFibGUgZW5saWdodGVuZWQgTVNSIGJpdG1hcCAqL1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9lbmxpZ2h0ZW5tZW50c19jb250cm9sLm1zcl9iaXRtYXAgPSAxO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2VndWVzdF9yaXAgKz0gMjsgLyogcmRtc3IgKi9cXG4gXFxuQEAgLTE1MiwxNCArMTU1LDE0IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXFxuIFxcdF9fc2V0X2JpdChNU1JfR1NfQkFTRSBcXHUwMDI2IDB4MWZmZiwgdm14X3BhZ2VzLVxcdTAwM2Vtc3IgKyAweDQwMCk7XFxuIFxcdC8qIE1ha2Ugc3VyZSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUCBpcyBzZXQgKi9cXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHQvKiBNYWtlIHN1cmUgd2UgZG9uJ3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZWd1ZXN0X3JpcCArPSAzOyAvKiB2bWNhbGwgKi9cXG4gXFxuIFxcdC8qIE5vdyB0ZWxsIEtWTSB3ZSd2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi9cXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIFxcdTAwMjY9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0dm1yZXN1bWUoKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXFxuIFxcbkBAIC0xNjcsMjEgKzE3MCwyOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxcbiBcXHQgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLFxcbiBcXHQgKiBubyBWTUNBTEwgZXhpdCBleHBlY3RlZC5cXG4gXFx0ICovXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xcbiBcXHQvKiBFbmFibGUgc3ludGhldGljIHZtZXhpdCAqL1xcbiBcXHQqKHUzMiAqKShodl9wYWdlcy1cXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAxO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gSFZfVk1YX1NZTlRIRVRJQ19FWElUX1JFQVNPTl9UUkFQX0FGVEVSX0ZMVVNIKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHRHVUVTVF9TWU5DKDExKTtcXG4gXFxuLVxcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xcbitcXHQvKiBWTVBUUkxEIGluc3RydWN0aW9uIGNhdXNlcyAjVUQgYWZ0ZXIgZW5saWdodGVuZWQgVk1MQVVOQ0ggKi9cXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1wdHJsZChodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpID09IFVEX1ZFQ1RPUik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEuIEdVRVNUX1NZTkMoMTIpIHNpZ25hbHNcXG4rXFx0ICogdGhlIGhvc3QgdG8gZW5hYmxlIGd1ZXN0X3VkX2hhbmRsZXIoKSB3aGljaCBjYW5ub3QgYmUgZW5hYmxlZCBiZWZvcmVoYW5kXFxuK1xcdCAqIHRvIG5vdCBvdmVycmlkZSB0aGUgZGVmYXVsdCBmaXh1cCBoYW5kbGVyIGZyb20gS1ZNX0FTTV9TQUZFKCkuXFxuK1xcdCAqL1xcbitcXHRHVUVTVF9TWU5DKDEyKTtcXG4gXFx0ZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jcyk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XFxuIFxcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuQEAgLTI1Myw3ICsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDMsIHZteF9wYWdlc19ndmEsIGh2X3BhZ2VzX2d2YSwgYWRkcl9ndmEyZ3BhKHZtLCBoY2FsbF9wYWdlKSk7XFxuIFxcdHZjcHVfc2V0X21zcih2Y3B1LCBIVl9YNjRfTVNSX1ZQX0lOREVYLCB2Y3B1LVxcdTAwM2VpZCk7XFxuIFxcbi1cXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xcbiBcXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7XFxuIFxcbiBcXHRwcl9pbmZvKFxcXCJSdW5uaW5nIEwxIHdoaWNoIHVzZXMgRVZNQ1MgdG8gcnVuIEwyXFxcXG5cXFwiKTtcXG5AQCAtMjgzLDcgKzI5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHRcXHQvKiBGb3JjZSBpbW1lZGlhdGUgTDItXFx1MDAzZUwxIGV4aXQgYmVmb3JlIHJlc3VtaW5nICovXFxuIFxcdFxcdGlmIChzdGFnZSA9PSA4KSB7XFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIkluamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcIkluamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0aW5qZWN0X25taSh2Y3B1KTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMjkzLDkgKzMwMywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHQgKiBLVk1fU1RBVEVfTkVTVEVEX0VWTUNTIGlzIG5vdCBsb3N0LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHN0YWdlID09IDkpIHtcXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiVHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcIlRyeWluZyBleHRyYSBLVk1fR0VUX05FU1RFRF9TVEFURS9LVk1fU0VUX05FU1RFRF9TVEFURSBjeWNsZVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc3RhZ2UgPT0gMTIpIHtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcIlRyeWluZyBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCB3aXRoIGFuIGludmFsaWQgUFRSXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBkb25lOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXFxuaW5kZXggMjVhMTgyYmUwMGE5Ny4uMzM3ZDNjMjhiYzZkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXFxuQEAgLTQyLDEzICs0MiwxMyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiB7XFxuLVxcdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xcbi1cXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XFxuK1xcdGxvYWRfdm1jcyh2bXgpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XFxuIFxcbiBcXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXFxuaW5kZXggYjk3NGNmYjM0N2Q2ZS4uMWY0YTVlNDRhNmVmMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xcbkBAIC0zMCwxMyArMzAsMTMgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiB7XFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCgwKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcXG5pbmRleCAyNmI0NzRiZjEzNTM1Li43OTg3Y2U1MGMzODI5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jXFxuQEAgLTkzLDggKzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIFxcdHZvaWQgKmwyX3JpcDtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVCh2bXgtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcXG4rXFx0bG9hZF92bWNzKHZteCk7XFxuIFxcbiBcXHRpZiAodm14LVxcdTAwM2VlcHRwX2dwYSlcXG4gXFx0XFx0bDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDtcXG5AQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiBcXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9yaXApO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyhURVNUX1NZTkNfTk9fRkFVTFQpO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHRHVUVTVF9TWU5DKFRFU1RfU1lOQ19OT19GQVVMVCk7XFxuIFxcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xcbmluZGV4IGUwOGM2YjA2OTdlNTAuLjExZmU0YTMxZWRhMGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcXG5AQCAtNjYsOCArNjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4gXFx0XFx0XFx0XFx0XFx0ICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTtcXG4gXFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSkpO1xcbi1cXHRcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHRlc3RfZGF0YSkpO1xcbitcXHRcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7XFxuK1xcdFxcdGxvYWRfdm1jcyh0ZXN0X2RhdGEpO1xcbiBcXG4gXFx0XFx0cHJlcGFyZV92bWNzKHRlc3RfZGF0YSwgTlVMTCk7XFxuIFxcdFxcdEdVRVNUX0FTU0VSVCghdm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSk7XFxuQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4gXFx0XFx0XFx0ZXhpdF9pbnNuX2xlbiA9IHZtY2ItXFx1MDAzZWNvbnRyb2wubmV4dF9yaXAgLSB2bWNiLVxcdTAwM2VzYXZlLnJpcDtcXG4gXFx0XFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtY2ItXFx1MDAzZXNhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0R1VFU1RfQVNTRVJUX0VRKGkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKSwgMCk7XFxuK1xcdFxcdFxcdGkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTtcXG4gXFx0XFx0XFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcXG4gXFx0XFx0XFx0ZXhpdF9pbnNuX2xlbiA9IHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pO1xcbiBcXHRcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xcbmluZGV4IGFlZWMzMTIxYzhlODMuLmMzNmMxMWI1ZjUxOGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xcbkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSlcXG4ge1xcbiBcXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApO1xcbitcXHR2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7XFxuIFxcbiBcXHRpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUilcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMjUsOSArMTI1LDkgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4ge1xcbi1cXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUX0VRKGxvYWRfdm1jcyh2bXgpLCB0cnVlKTtcXG4rXFx0bG9hZF92bWNzKHZteCk7XFxuIFxcbiBcXHRwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTtcXG4gXFx0R1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmNcXG5pbmRleCA4YzJiYTk2NzQ1NThlLi4xMDFjMWZlNzllZWI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xcbkBAIC00MCwyMSArNDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiB7XFxuIFxcdHVpbnRwdHJfdCBzYXZlX2NyMztcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbiBcXHQvKiBUcnkgdG8gcnVuIEwyIHdpdGggaW52YWxpZCBDUjMgYW5kIG1ha2Ugc3VyZSBpdCBmYWlscyAqL1xcbiBcXHRzYXZlX2NyMyA9IHZtcmVhZHooR1VFU1RfQ1IzKTtcXG4gXFx0dm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09XFxuIFxcdFxcdCAgICAgKEVYSVRfUkVBU09OX0ZBSUxFRF9WTUVOVFJZIHwgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSkpO1xcbiBcXG4gXFx0LyogTm93IHJlc3RvcmUgQ1IzIGFuZCBtYWtlIHN1cmUgTDIgcnVucyBzdWNjZXNzZnVsbHkgKi9cXG4gXFx0dm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcbiBcXHRHVUVTVF9ET05FKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXFxuaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xcbkBAIC01NSwxMiArNTUsMTIgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14LCB1NjQgZXhwZWN0ZWRfZmF1bHRfZ3BhLFxcbiBcXHR1NjQgZXhpdF9xdWFsO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbitcXHRsb2FkX3ZtY3Modm14KTtcXG4gXFxuIFxcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2VudHJ5KTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHQvKiBWZXJpZnkgd2UgZ290IGFuIEVQVCB2aW9sYXRpb24gZXhpdCAqL1xcbiBcXHRfX0dVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXFxuaW5kZXggY2I3OWQ3Yjk2MTljMi4uYzYwZGVhODk5NjI0YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXFxuQEAgLTg2LDggKzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxcbiBcXHRcXHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhO1xcbiBcXHRcXHR1MzIgY29udHJvbDtcXG4gXFxuLVxcdFxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdFxcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0XFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcdFxcdGNvbnRyb2wgPSB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpO1xcbkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSlcXG4gXFx0XFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTtcXG4gXFx0XFx0dm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTtcXG4gXFxuLVxcdFxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdFxcdHZtbGF1bmNoKCk7XFxuIFxcdFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtID0gZGF0YTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXFxuaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcXG5AQCAtMTA1LDggKzEwNSw4IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcXG4gXFx0LyogY2hlY2sgdGhhdCBMMSdzIGZyZXF1ZW5jeSBsb29rcyBhbHJpZ2h0IGJlZm9yZSBsYXVuY2hpbmcgTDIgKi9cXG4gXFx0Y2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0LyogcHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uICovXFxuIFxcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHR2bXdyaXRlKFRTQ19NVUxUSVBMSUVSX0hJR0gsIFRTQ19NVUxUSVBMSUVSX0wyIFxcdTAwM2VcXHUwMDNlIDMyKTtcXG4gXFxuIFxcdC8qIGxhdW5jaCBMMiAqL1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFxuIFxcdC8qIGNoZWNrIHRoYXQgTDEncyBmcmVxdWVuY3kgc3RpbGwgbG9va3MgZ29vZCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcXG5AQCAtOTgsMTcgKzk4LDE3IEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXFxuIFxcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIHtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcXG4rXFx0bG9hZF92bWNzKHZteCk7XFxuIFxcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpKSk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHR3aGlsZSAoMSkge1xcbiBcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xcbiBcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xcbi1cXHRcXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHRcXHR2bXJlc3VtZSgpO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbmluZGV4IGQxZWRhZmQ1YWY3NTUuLjM3N2RmMDllNTgyYWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuQEAgLTc4LDggKzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpXFxuIFxcdFxcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkge1xcbiBcXHRcXHRcXHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGwyX2d1ZXN0X2NvZGUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4tXFx0XFx0XFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4rXFx0XFx0XFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xcbitcXHRcXHRcXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcXG4gXFx0XFx0XFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcdFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcXG5pbmRleCA0YTEwNTZhNmNiOGRjLi4zOGM5Njg5YWM2MDE0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcXG5AQCAtNzUsMzIgKzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZClcXG4gc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiB7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcXG4gXFx0R1VFU1RfU1lOQygzKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbitcXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyg0KTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuIFxcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCB2bXhfbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbiBcXHRHVUVTVF9TWU5DKDUpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuK1xcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0LyogQ2hlY2sgdGhhdCB0aGUgbGF1bmNoZWQgc3RhdGUgaXMgcHJlc2VydmVkLiAgKi9cXG4tXFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyg3KTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFxuIFxcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyAzKTtcXG5AQCAtMTA4LDI4ICsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTKTtcXG4gXFx0dm13cml0ZShWTUNTX0xJTktfUE9JTlRFUiwgdm14X3BhZ2VzLVxcdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcXG4rXFx0dm1wdHJsZCh2bXhfcGFnZXMtXFx1MDAzZXNoYWRvd192bWNzX2dwYSk7XFxuK1xcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xcbiBcXHRHVUVTVF9TWU5DKDgpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XFxuK1xcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xcbiBcXG4gXFx0dm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTtcXG4gXFx0R1VFU1RfU1lOQyg5KTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZlZSk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSkpO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXB0cmxkKHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtXFx1MDAzZXNoYWRvd192bWNzX2dwYSkpO1xcbitcXHR2bXB0cmxkKHZteF9wYWdlcy1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZmZmVlKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1yZXN1bWUoKSk7XFxuK1xcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcXG4gXFx0R1VFU1RfU1lOQygxMyk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1yZXN1bWUoKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fZmxhdHRlbl9fKSkgZ3Vlc3RfY29kZSh2b2lkICphcmcpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xcbmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXFxuQEAgLTI1LDEyICsyNSwxMiBAQCB2b2lkIGwxX2d1ZXN0X2NvZGVfdm14KHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4ge1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbitcXHRsb2FkX3ZtY3Modm14KTtcXG4gXFxuIFxcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0LyogTDIgc2hvdWxkIHRyaXBsZSBmYXVsdCBhZnRlciBhIHRyaXBsZSBmYXVsdCBldmVudCBpbmplY3RlZC4gKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XFxuIFxcdEdVRVNUX0RPTkUoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jXFxuaW5kZXggNDYzZjczYWE5MTU5YS4uZmUyOWM4NjlhMjM1NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcXG5AQCAtMzgsOCArMzgsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSlcXG4ge1xcbiBcXHR1MzIgY29udHJvbDtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG5AQCAtNTMsMTQgKzUzLDE0IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKVxcbiBcXG4gXFx0LyogVHJ5IHRvIGxhdW5jaCBMMiB3aXRoIHRoZSBtZW1vcnktYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovXFxuIFxcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0dm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7XFxuIFxcbiBcXHQvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovXFxuIFxcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXFxuaW5kZXggZjliODhhNmY2MTEzZC4uZTU3ODIyMWRhMjQ3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXFxuQEAgLTMzLDggKzMzLDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIHtcXG4gXFx0dTMyIGNvbnRyb2w7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xcbitcXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcXG4gXFxuIFxcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdCAqIFJ1biBMMiB0byBzd2l0Y2ggdG8geDJBUElDIG1vZGUsIHdoaWNoIGluIHR1cm4gd2lsbCB1bmluaGliaXQgQVBJQ3YsXFxuIFxcdCAqIGFzIEtWTSBzaG91bGQgZm9yY2UgdGhlIEFQSUMgSUQgYmFjayB0byBpdHMgZGVmYXVsdC5cXG4gXFx0ICovXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICsgdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTikpO1xcbiBcXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFxcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCk7XFxuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdCAqIGhhbmRsZXMgdGhlIHgyQVBJQyA9XFx1MDAzZSB4QVBJQyB0cmFuc2l0aW9uIGFuZCBpbmhpYml0cyBBUElDdiB3aGlsZSBMMlxcbiBcXHQgKiBpcyBhY3RpdmUuXFxuIFxcdCAqL1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFx0R1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFxcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCkpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG5pbmRleCBjODM3OTEyNGIzMTcyLi4zMDE3OTM4ZmE5OTM3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuQEAgLTQxLDggKzQxLDggQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIHtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcXG4rXFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XFxuIFxcbiBcXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXFxuIFxcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xcbkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHRHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIFxcdTAwMjYgQ1BVX0JBU0VEX0FDVElWQVRFX1NFQ09OREFSWV9DT05UUk9MUykgfHxcXG4gXFx0XFx0ICAgICAhKHZtcmVhZHooU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCkgXFx1MDAyNiBTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QpKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHQvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIG1haW4oKSBzdHVmZnMgaW52YWxpZCBndWVzdCBzdGF0ZS4gKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuY1xcbmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXFxuQEAgLTM3LDggKzM3LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdEdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcXG4rXFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XFxuIFxcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG4gXFxuQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdGd1ZXN0X2NyNCBcXHUwMDI2PSB+WDg2X0NSNF9MQTU3O1xcbiBcXHR2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHRleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pO1xcbiBcXHRHVUVTVF9BU1NFUlQoZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xcbmluZGV4IGViODAyMWMzM2NkNDMuLmNkYTUzZGYzMzg4OGUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xcbkBAIC03MSw5ICs3MSw5IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdHU2NCBsMV90c2NfZGVhZGxpbmUsIGwyX3RzY19kZWFkbGluZTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbitcXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdCAgICAhKGN0cmxfZXhpdF9yZXYuY2xyIFxcdTAwMjYgVk1fRVhJVF9TQVZFX1ZNWF9QUkVFTVBUSU9OX1RJTUVSKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XFxuIFxcbkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcXG4gXFxuIFxcdGwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpIFxcdTAwM2VcXHUwMDNlIHZteF9wdF9yYXRlKSBcXHUwMDNjXFx1MDAzYyB2bXhfcHRfcmF0ZTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcbiBcXHRsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU1OjI2Ljk2OTI4NTcyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc5MTAwNzg5NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIG5lc3RlZCBWTVggd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSXQgY2hhbmdlcyBWTVBUUkxEIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBhbmQgVk1QVFJTVCB0byByZXR1cm4gdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM5OWMyZWJiMDQxZDI2OTgwMTgzYWFlMTM0NjM1Njg2YmIwNGNiMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzo1NToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi4zMDU4ZWZhNjVjODJjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTU4OTcsNiArNTg5NywxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbitcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG4rXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4gXHRpZiAobmVzdGVkX3ZteF9nZXRfdm1wdHIodmNwdSwgXHUwMDI2dm1wdHIsIFx1MDAyNnIpKVxuIFx0XHRyZXR1cm4gcjtcbiBcbkBAIC01OTA2LDEwICs1OTEyLDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodm1wdHIgPT0gdm14LVx1MDAzZW5lc3RlZC52bXhvbl9wdHIpXG4gXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX1ZNUFRSTERfVk1YT05fUE9JTlRFUik7XG4gXG4tXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuLVx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHRpZiAodm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7XG4gXHRcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcdTAwMjZ2bXgtXHUwMDNlbmVzdGVkLnZtY3MxMl9jYWNoZTtcbiBcdFx0c3RydWN0IHZtY3NfaGRyIGhkcjtcbkBAIC01OTYyLDcgKzU5NjQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4tXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuK1x0Z3BhX3QgY3VycmVudF92bXB0cjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG4gXHRndmFfdCBndmE7XG4gXHRpbnQgcjtcbkBAIC01OTcwLDggKzU5NzIsMTYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQvKlxuK1x0ICogSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgdGhlIGJlaGF2aW9yIG9mIFZNUFRSU1Qgd2hlbiBlVk1DUyBpcyB1c2VkXG4rXHQgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuXG4rXHQgKi9cbisjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbitcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHRvX3ZteCh2Y3B1KSkpXG4rXHRcdGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xuK1x0ZWxzZVxuKyNlbmRpZlxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFxuIFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuIFx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCA4MmE4ZWE2YjY2MWYwLi5jNWI5ZDI2ZjZjZGJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5AQCAtMjY1LDE0ICsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcHRyc3QodTY0ICp2YWx1ZSlcbi17XG4tXHQqdmFsdWUgPSBjdXJyZW50X3ZwX2Fzc2lzdC1cdTAwM2VjdXJyZW50X25lc3RlZF92bWNzIFx1MDAyNlxuLVx0XHR+SFZfWDY0X01TUl9WUF9BU1NJU1RfUEFHRV9FTkFCTEU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZWFkKHU2NCBlbmNvZGluZywgdTY0ICp2YWx1ZSlcbiB7XG4gXHRzd2l0Y2ggKGVuY29kaW5nKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCA2ZTZmNzAwMzU1MDhhLi4yODJiOGFhZmY3OTk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbkBAIC0xMzE4LDcgKzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTtcbiBcdFwibGVhIDFmKCUlcmlwKSwgJSVyMTBcXG5cXHRcIlx0XHRcdFx0XFxcbiBcdFwibGVhIDJmKCUlcmlwKSwgJSVyMTFcXG5cXHRcIlx0XHRcdFx0XFxcbiBcdGZlcCBcIjE6IFwiIGluc24gXCJcXG5cXHRcIlx0XHRcdFx0XHRcXFxuLVx0XCJ4b3IgJSVyOSwgJSVyOVxcblxcdFwiXHRcdFx0XHRcdFxcXG4rXHRcIm1vdiAkMCwgJSVyOWRcXG5cXHRcIlx0XHRcdFx0XHRcXFxuIFx0XCIyOlxcblxcdFwiXHRcdFx0XHRcdFx0XFxcbiBcdFwibW92ICAlJXI5YiwgJVt2ZWN0b3JdXFxuXFx0XCJcdFx0XHRcdFxcXG4gXHRcIm1vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cXG5cXHRcIlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuaW5kZXggMDRmNWUzNGRlYTNhZS4uY2Q4MmE2YmU2OTYzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5AQCAtMzA5LDEyNiArMzA5LDkxIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcbiBcbiAjaW5jbHVkZSBcImV2bWNzLmhcIlxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcInZteG9uICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuLVx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4tXHRcdDogW3BhXVwibVwiKHBoeXMpXG4tXHRcdDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbi1cbi1cdHJldHVybiByZXQ7XG4rI2RlZmluZSBHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIF9fciwgX19wYSlcdFx0XFxcbitcdF9fR1VFU1RfQVNTRVJUKCFfX3IsIF9fc3RyaW5naWZ5KGluc24pIFwiWzB4JWx4XSBoaXQgJXNcIixcdFxcXG4rXHRcdCAgICAgICBfX3BhLCBfX3IgXHUwMDNjIDAgPyBcIlZNLUZhaWxcIiA6IGV4X3N0cihfX3IpKVxuK1xuKyNkZWZpbmUgQlVJTERfVk1DU19BU01fSEVMUEVSUyhpbnNuKVx0XHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHU2NCB2bWNzX3BhKVx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0dTY0IGVycm9yX2NvZGU7XHRcdFx0XHRcdFx0XHRcXFxuK1x0dTggdmVjdG9yO1x0XHRcdFx0XHRcdFx0XFxcbitcdHU4IGZhaWxlZDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGFzbSB2b2xhdGlsZShLVk1fQVNNX1NBRkUoX19zdHJpbmdpZnkoaW5zbikgXCIgJVtwYV1cIilcdFx0XFxcbitcdFx0ICAgICBcIlxcblxcdHNldG5hICVbZmFpbGVkXVwiXHRcdFx0XHRcXFxuK1x0XHQgICAgIDogS1ZNX0FTTV9TQUZFX09VVFBVVFModmVjdG9yLCBlcnJvcl9jb2RlKSxcdFxcXG4rXHRcdCAgICAgICBbZmFpbGVkXVwiPXFtXCIoZmFpbGVkKVx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFtwYV1cIm1cIih2bWNzX3BhKVx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJjY1wiLCBcIm1lbW9yeVwiLCBLVk1fQVNNX1NBRkVfQ0xPQkJFUlMpO1x0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyZXR1cm4gdmVjdG9yID8gdmVjdG9yIDogZmFpbGVkID8gLUVJTlZBTCA6IDA7XHRcdFx0XFxcbit9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNuKHU2NCB2bWNzX3BhKVx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpO1x0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIHJldCwgdm1jc19wYSk7XHRcdFxcXG4gfVxuIFxuK0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm14b24pXG4rQlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXB0cmxkKVxuK0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm1jbGVhcilcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14b2ZmKHZvaWQpXG4ge1xuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJ2bXhvZmZcIik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHZtY2xlYXIodTY0IHZtY3NfcGEpXG4te1xuLVx0dTggcmV0O1xuLVxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18gKFwidm1jbGVhciAlW3BhXTsgc2V0bmEgJVtyZXRdXCJcbi1cdFx0OiBbcmV0XVwiPXJtXCIocmV0KVxuLVx0XHQ6IFtwYV1cIm1cIih2bWNzX3BhKVxuLVx0XHQ6IFwiY2NcIiwgXCJtZW1vcnlcIik7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcInZtcHRybGQgJVtwYV07IHNldG5hICVbcmV0XVwiXG4tXHRcdDogW3JldF1cIj1ybVwiKHJldClcbi1cdFx0OiBbcGFdXCJtXCIodm1jc19wYSlcbi1cdFx0OiBcImNjXCIsIFwibWVtb3J5XCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgdm1wdHJzdCh1NjQgKnZhbHVlKVxuK3N0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3Qodm9pZClcbiB7XG4tXHR1NjQgdG1wO1xuK1x0dTY0IHZhbHVlID0gMDtcbiBcdHU4IHJldDtcbiBcbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiBldm1jc192bXB0cnN0KHZhbHVlKTtcbi1cbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwidm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXCJcbi1cdFx0OiBbdmFsdWVdXCI9bVwiKHRtcCksIFtyZXRdXCI9cm1cIihyZXQpXG4rXHRcdDogW3ZhbHVlXVwiPW1cIih2YWx1ZSksIFtyZXRdXCI9cm1cIihyZXQpXG4gXHRcdDogOiBcImNjXCIsIFwibWVtb3J5XCIpO1xuIFxuLVx0KnZhbHVlID0gdG1wO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBBIHdyYXBwZXIgYXJvdW5kIHZtcHRyc3QgdGhhdCBpZ25vcmVzIGVycm9ycyBhbmQgcmV0dXJucyB6ZXJvIGlmIHRoZVxuLSAqIHZtcHRyc3QgaW5zdHJ1Y3Rpb24gZmFpbHMuXG4tICovXG4tc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbi17XG4tXHR1NjQgdmFsdWUgPSAwO1xuLVx0dm1wdHJzdChcdTAwMjZ2YWx1ZSk7XG4rXHRfX0dVRVNUX0FTU0VSVCghcmV0LCBcInZtcHRyc3QgZmFpbGVkXCIpO1xuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlxuLVx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlxuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCJ2bWxhdW5jaDtcIlxuLVx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogO1wiXG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4tXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuLVx0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXG4te1xuLVx0aW50IHJldDtcbi1cbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuLVxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4tXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wiXG4tXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcInZtcmVzdW1lO1wiXG4tXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiA7XCJcbi1cdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbi1cdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbi1cdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUCksXG4tXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuLVx0cmV0dXJuIHJldDtcbisjZGVmaW5lIEJVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKGluc24pXHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHZvaWQpXHRcdFx0XHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRpbnQgcmV0O1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKGVuYWJsZV9ldm1jcylcdFx0XHRcdFx0XHRcXFxuK1x0XHRyZXR1cm4gZXZtY3NfIyNpbnNuKCk7XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlx0XHRcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlx0XHRcXFxuK1x0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlx0XHRcdFxcXG4rXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXHRcdFxcXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXHRcdFx0XFxcbitcdFx0XHQgICAgIF9fc3RyaW5naWZ5KGluc24pXCI7XCJcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICBcIjE6IDtcIlx0XHRcdFx0XHRcXFxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVx0XHRcdFxcXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlx0XHRcdFx0XFxcbitcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVx0XHRcdFx0XFxcbitcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFx0XHRcXFxuK1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUCksXHRcdFxcXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1x0XHRcdFxcXG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XHRcdFx0XHRcXFxuK1x0cmV0dXJuIHJldDtcdFx0XHRcdFx0XHRcdFxcXG4rfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih2b2lkKVx0XHRcdFx0XHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRpbnQgcmV0O1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cmV0ID0gX18jI2luc24oKTtcdFx0XHRcdFx0XHRcXFxuK1x0X19HVUVTVF9BU1NFUlQoIXJldCwgX19zdHJpbmdpZnkoaW5zbikgXCIgaGl0IFZNLUZhaWxcIik7XHRcdFxcXG4gfVxuK0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtbGF1bmNoKVxuK0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtcmVzdW1lKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNhbGwodm9pZClcbiB7XG5AQCAtNTUwLDkgKzUxNSw5IEBAIHVuaW9uIHZteF9jdHJsX21zciB7XG4gfTtcbiBcbiBzdHJ1Y3Qgdm14X3BhZ2VzICp2Y3B1X2FsbG9jX3ZteChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgKnBfdm14X2d2YSk7XG4tYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4rdm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4gdm9pZCBwcmVwYXJlX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14LCB2b2lkICpndWVzdF9yaXApO1xuLWJvb2wgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4rdm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiBcbiBib29sIGVwdF8xZ19wYWdlc19zdXBwb3J0ZWQodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuaW5kZXggZTE5ZThiNWEwOWM1YS4uNmExODE1ZmI5N2U5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuQEAgLTMzLDE0ICszMywxNCBAQCBfX2FzbV9fKFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IHZjcHVfaWQpXG4ge1xuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcdEdVRVNUX0FTU0VSVChlcHRfMWdfcGFnZXNfc3VwcG9ydGVkKCkpO1xuIFxuIFx0Kih1NjQgKil2bXgtXHUwMDNlc3RhY2sgPSB2Y3B1X2lkO1xuIFx0cHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG5pbmRleCAwODllMWE4YWY1M2ZjLi41YzZjYWRjMDg0MDVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG5AQCAtMTI1LDcgKzEyNSw3IEBAIHZjcHVfYWxsb2Nfdm14KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCAqcF92bXhfZ3ZhKVxuIFx0cmV0dXJuIHZteDtcbiB9XG4gXG4tYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbit2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbiBcdHU2NCBmZWF0dXJlX2NvbnRyb2w7XG4gXHR1NjQgcmVxdWlyZWQ7XG5AQCAtMTYzLDI4ICsxNjMsMjAgQEAgYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiBcbiBcdC8qIEVudGVyIFZNWCByb290IG9wZXJhdGlvbi4gKi9cbiBcdCoodTMyICopKHZteC1cdTAwM2V2bXhvbikgPSB2bWNzX3JldmlzaW9uKCk7XG4tXHRpZiAodm14b24odm14LVx1MDAzZXZteG9uX2dwYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuK1x0dm14b24odm14LVx1MDAzZXZteG9uX2dwYSk7XG4gfVxuIFxuLWJvb2wgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbit2b2lkIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuIFx0LyogTG9hZCBhIFZNQ1MuICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm1jcykgPSB2bWNzX3JldmlzaW9uKCk7XG4tXHRpZiAodm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHR2bWNsZWFyKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4gXG4tXHRpZiAodm1wdHJsZCh2bXgtXHUwMDNldm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHR2bXB0cmxkKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHQvKiBTZXR1cCBzaGFkb3cgVk1DUywgZG8gbm90IGxvYWQgaXQgeWV0LiAqL1xuIFx0Kih1MzIgKikodm14LVx1MDAzZXNoYWRvd192bWNzKSA9IHZtY3NfcmV2aXNpb24oKSB8IDB4ODAwMDAwMDB1bDtcbi1cdGlmICh2bWNsZWFyKHZteC1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHZtY2xlYXIodm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGVwdF92cGlkX2NhcF9zdXBwb3J0ZWQodTY0IG1hc2spXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmNcbmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG5AQCAtNzAsOCArNzAsOCBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbi1cdEdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0XHR2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKm5lc3RlZF90ZXN0X2RhdGEpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5pbmRleCBhYTdmM2I0MDVmZDMyLi5hMDZmMzdlMGJkMDY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbkBAIC01NSwxMSArNTUsMTEgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsXG4gXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdCk7XG4gXHRldm1jc19lbmFibGUoKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuIFx0R1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTtcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXG4gXHQvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi9cbiBcdHN5bmNfd2l0aF9ob3N0KDIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG5pbmRleCA2M2VhMTUzM2U0ZWFkLi5iN2MyYTI1NDI5MWU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuQEAgLTIzLDcgKzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7XG4gc3RhdGljIHZvaWQgZ3Vlc3RfdWRfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiB7XG4gXHR1ZF9jb3VudCsrO1xuLVx0cmVncy1cdTAwM2VyaXAgKz0gMzsgLyogVk1MQVVOQ0ggKi9cbitcdC8qXG4rXHQgKiBWTUxBVU5DSCBpbnNuIGNhbid0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0XG4rXHQgKiBsdWNraWx5IHRoZSBpbnN0cnVjdGlvbiBpcyBhbHdheXMgdGhyZWUgYnl0ZXMuXG4rXHQgKi9cbitcdHJlZ3MtXHUwMDNlcmlwICs9IDM7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuQEAgLTg5LDIwICs5MywxOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0ZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3QpO1xuIFx0ZXZtY3NfZW5hYmxlKCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSAtMSk7XG4gXG4gXHRHVUVTVF9TWU5DKDQpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHRHVUVTVF9TWU5DKDUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IC0xdTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047XG4gXHRHVUVTVF9TWU5DKDYpO1xuIFxuQEAgLTExNywxNyArMTIwLDE3IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRjdXJyZW50X3ZwX2Fzc2lzdC1cdTAwM2VuZXN0ZWRfY29udHJvbC5mZWF0dXJlcy5kaXJlY3RoeXBlcmNhbGwgPSAxO1xuIFx0Kih1MzIgKikoaHZfcGFnZXMtXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAwO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKCh2bXJlYWR6KFZNX0VYSVRfSU5UUl9JTkZPKSBcdTAwMjYgMHhmZiksIE5NSV9WRUNUT1IpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHQvKlxuIFx0ICogTk1JIGZvcmNlcyBMMi1cdTAwM2VMMSBleGl0LCByZXN1bWluZyBMMiBhbmQgaG9wZSB0aGF0IEVWTUNTIGlzXG4gXHQgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmdcbiBcdCAqIG9mIGwyX2d1ZXN0X2NvZGUoKS4gR1VFU1RfU1lOQyg5KSBjaGVja3MgdGhhdC5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXG4gXHRHVUVTVF9TWU5DKDEwKTtcbiBcbkBAIC0xMzgsMTMgKzE0MSwxMyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHxcbiBcdFx0Q1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXHRfX3NldF9iaXQoTVNSX0ZTX0JBU0UgXHUwMDI2IDB4MWZmZiwgdm14X3BhZ2VzLVx1MDAzZW1zciArIDB4NDAwKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXG4gXG4gXHQvKiBFbmFibGUgZW5saWdodGVuZWQgTVNSIGJpdG1hcCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9lbmxpZ2h0ZW5tZW50c19jb250cm9sLm1zcl9iaXRtYXAgPSAxO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgKz0gMjsgLyogcmRtc3IgKi9cbiBcbkBAIC0xNTIsMTQgKzE1NSwxNCBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0X19zZXRfYml0KE1TUl9HU19CQVNFIFx1MDAyNiAweDFmZmYsIHZteF9wYWdlcy1cdTAwM2Vtc3IgKyAweDQwMCk7XG4gXHQvKiBNYWtlIHN1cmUgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVAgaXMgc2V0ICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0LyogTWFrZSBzdXJlIHdlIGRvbid0IHNlZSBFWElUX1JFQVNPTl9NU1JfUkVBRCBoZXJlIHNvIGVNU1IgYml0bWFwIHdvcmtzICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDM7IC8qIHZtY2FsbCAqL1xuIFxuIFx0LyogTm93IHRlbGwgS1ZNIHdlJ3ZlIGNoYW5nZWQgTVNSLUJpdG1hcCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgXHUwMDI2PSB+SFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVA7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xuIFxuQEAgLTE2NywyMSArMTcwLDI5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHQgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLFxuIFx0ICogbm8gVk1DQUxMIGV4aXQgZXhwZWN0ZWQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXG4gXHQvKiBFbmFibGUgc3ludGhldGljIHZtZXhpdCAqL1xuIFx0Kih1MzIgKikoaHZfcGFnZXMtXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAxO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gSFZfVk1YX1NZTlRIRVRJQ19FWElUX1JFQVNPTl9UUkFQX0FGVEVSX0ZMVVNIKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9TWU5DKDExKTtcbiBcbi1cdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuK1x0LyogVk1QVFJMRCBpbnN0cnVjdGlvbiBjYXVzZXMgI1VEIGFmdGVyIGVubGlnaHRlbmVkIFZNTEFVTkNIICovXG4rXHRHVUVTVF9BU1NFUlQoX192bXB0cmxkKGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKSA9PSBVRF9WRUNUT1IpO1xuK1xuK1x0LypcbitcdCAqIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQS4gR1VFU1RfU1lOQygxMikgc2lnbmFsc1xuK1x0ICogdGhlIGhvc3QgdG8gZW5hYmxlIGd1ZXN0X3VkX2hhbmRsZXIoKSB3aGljaCBjYW5ub3QgYmUgZW5hYmxlZCBiZWZvcmVoYW5kXG4rXHQgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLlxuK1x0ICovXG4rXHRHVUVTVF9TWU5DKDEyKTtcbiBcdGV2bWNzX3ZtcHRybGQoMHhkZWFkYmVlZiwgaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jcyk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5AQCAtMjUzLDcgKzI2NCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDMsIHZteF9wYWdlc19ndmEsIGh2X3BhZ2VzX2d2YSwgYWRkcl9ndmEyZ3BhKHZtLCBoY2FsbF9wYWdlKSk7XG4gXHR2Y3B1X3NldF9tc3IodmNwdSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgdmNwdS1cdTAwM2VpZCk7XG4gXG4tXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xuIFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgTk1JX1ZFQ1RPUiwgZ3Vlc3Rfbm1pX2hhbmRsZXIpO1xuIFxuIFx0cHJfaW5mbyhcIlJ1bm5pbmcgTDEgd2hpY2ggdXNlcyBFVk1DUyB0byBydW4gTDJcXG5cIik7XG5AQCAtMjgzLDcgKzI5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRcdC8qIEZvcmNlIGltbWVkaWF0ZSBMMi1cdTAwM2VMMSBleGl0IGJlZm9yZSByZXN1bWluZyAqL1xuIFx0XHRpZiAoc3RhZ2UgPT0gOCkge1xuLVx0XHRcdHByX2luZm8oXCJJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxcblwiKTtcbitcdFx0XHRwcl9kZWJ1ZyhcIkluamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxuXCIpO1xuIFx0XHRcdGluamVjdF9ubWkodmNwdSk7XG4gXHRcdH1cbiBcbkBAIC0yOTMsOSArMzAzLDE0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdCAqIEtWTV9TVEFURV9ORVNURURfRVZNQ1MgaXMgbm90IGxvc3QuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc3RhZ2UgPT0gOSkge1xuLVx0XHRcdHByX2luZm8oXCJUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcXG5cIik7XG4rXHRcdFx0cHJfZGVidWcoXCJUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcXG5cIik7XG4gXHRcdFx0dmNwdSA9IHNhdmVfcmVzdG9yZV92bSh2bSwgdmNwdSk7XG4gXHRcdH1cbitcbitcdFx0aWYgKHN0YWdlID09IDEyKSB7XG4rXHRcdFx0cHJfZGVidWcoXCJUcnlpbmcgZW5saWdodGVuZWQgVk1MQVVOQ0ggd2l0aCBhbiBpbnZhbGlkIFBUUlxcblwiKTtcbitcdFx0XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xuK1x0XHR9XG4gXHR9XG4gXG4gZG9uZTpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG5pbmRleCAyNWExODJiZTAwYTk3Li4zMzdkM2MyOGJjNmRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9rdm1fYnVzbG9ja190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG5AQCAtNDIsMTMgKzQyLDEzIEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xuLVx0R1VFU1RfQVNTRVJUX0VRKGxvYWRfdm1jcyh2bXgpLCB0cnVlKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XG4gXG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xuaW5kZXggYjk3NGNmYjM0N2Q2ZS4uMWY0YTVlNDRhNmVmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmNcbkBAIC0zMCwxMyArMzAsMTMgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQoMCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCAyNmI0NzRiZjEzNTM1Li43OTg3Y2U1MGMzODI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuQEAgLTkzLDggKzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXHR2b2lkICpsMl9yaXA7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0aWYgKHZteC1cdTAwM2VlcHRwX2dwYSlcbiBcdFx0bDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDtcbkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9yaXApO1xuIFxuIFx0R1VFU1RfU1lOQyhURVNUX1NZTkNfTk9fRkFVTFQpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9TWU5DKFRFU1RfU1lOQ19OT19GQVVMVCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9ET05FKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcbmluZGV4IGUwOGM2YjA2OTdlNTAuLjExZmU0YTMxZWRhMGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jXG5AQCAtNjYsOCArNjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcbiBcdFx0XHRcdFx0ICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTtcbiBcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zID0gMDtcbiBcdH0gZWxzZSB7XG4tXHRcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSkpO1xuLVx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHRlc3RfZGF0YSkpO1xuK1x0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7XG4rXHRcdGxvYWRfdm1jcyh0ZXN0X2RhdGEpO1xuIFxuIFx0XHRwcmVwYXJlX3ZtY3ModGVzdF9kYXRhLCBOVUxMKTtcbiBcdFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX0lEVFJfTElNSVQsIDApKTtcbkBAIC0xMDIsNyArMTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4gXHRcdFx0ZXhpdF9pbnNuX2xlbiA9IHZtY2ItXHUwMDNlY29udHJvbC5uZXh0X3JpcCAtIHZtY2ItXHUwMDNlc2F2ZS5yaXA7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtY2ItXHUwMDNlc2F2ZS5yaXAsICh1NjQpbDJfaW5zdHJ1Y3Rpb24pO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdEdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApO1xuK1x0XHRcdGkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTtcbiBcdFx0XHRleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pO1xuIFx0XHRcdGV4aXRfaW5zbl9sZW4gPSB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKTtcbiBcdFx0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG5pbmRleCBhZWVjMzEyMWM4ZTgzLi5jMzZjMTFiNWY1MThiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG5AQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyB2b2lkIHZteF9ydW5fbDIodm9pZCAqbDJfY29kZSwgaW50IHZlY3RvciwgdTMyIGVycm9yX2NvZGUpXG4ge1xuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9jb2RlKSk7XG4gXG4tXHRHVUVTVF9BU1NFUlRfRVEodmVjdG9yID09IFNTX1ZFQ1RPUiA/IHZtbGF1bmNoKCkgOiB2bXJlc3VtZSgpLCAwKTtcbitcdHZlY3RvciA9PSBTU19WRUNUT1IgPyB2bWxhdW5jaCgpIDogdm1yZXN1bWUoKTtcbiBcbiBcdGlmICh2ZWN0b3IgPT0gRkFLRV9UUklQTEVfRkFVTFRfVkVDVE9SKVxuIFx0XHRyZXR1cm47XG5AQCAtMTI1LDkgKzEyNSw5IEBAIHN0YXRpYyB2b2lkIHZteF9ydW5fbDIodm9pZCAqbDJfY29kZSwgaW50IHZlY3RvciwgdTMyIGVycm9yX2NvZGUpXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuIFxuLVx0R1VFU1RfQVNTRVJUX0VRKGxvYWRfdm1jcyh2bXgpLCB0cnVlKTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG5pbmRleCA4YzJiYTk2NzQ1NThlLi4xMDFjMWZlNzllZWI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmNcbkBAIC00MCwyMSArNDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbiBcdHVpbnRwdHJfdCBzYXZlX2NyMztcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHQvKiBUcnkgdG8gcnVuIEwyIHdpdGggaW52YWxpZCBDUjMgYW5kIG1ha2Ugc3VyZSBpdCBmYWlscyAqL1xuIFx0c2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7XG4gXHR2bXdyaXRlKEdVRVNUX0NSMywgLTF1bGwpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT1cbiBcdFx0ICAgICAoRVhJVF9SRUFTT05fRkFJTEVEX1ZNRU5UUlkgfCBFWElUX1JFQVNPTl9JTlZBTElEX1NUQVRFKSk7XG4gXG4gXHQvKiBOb3cgcmVzdG9yZSBDUjMgYW5kIG1ha2Ugc3VyZSBMMiBydW5zIHN1Y2Nlc3NmdWxseSAqL1xuIFx0dm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHRHVUVTVF9ET05FKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmNcbmluZGV4IDJlMDQ1NjM3OTBmZjIuLmQ2YzQ0M2UzZDE0N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXG5AQCAtNTUsMTIgKzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSxcbiBcdHU2NCBleGl0X3F1YWw7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfZW50cnkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXG4gXHQvKiBWZXJpZnkgd2UgZ290IGFuIEVQVCB2aW9sYXRpb24gZXhpdCAqL1xuIFx0X19HVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTixcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5pbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5AQCAtODYsOCArODYsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKmRhdGEpXG4gXHRcdHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcyA9IGRhdGE7XG4gXHRcdHUzMiBjb250cm9sO1xuIFxuLVx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdGNvbnRyb2wgPSB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpO1xuQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxuIFx0XHR2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIGNvbnRyb2wpO1xuIFx0XHR2bXdyaXRlKFRTQ19PRkZTRVQsIFRTQ19PRkZTRVRfVkFMVUUpO1xuIFxuLVx0XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0XHR2bWxhdW5jaCgpO1xuIFx0XHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0gPSBkYXRhO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuY1xuaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXG5AQCAtMTA1LDggKzEwNSw4IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdC8qIGNoZWNrIHRoYXQgTDEncyBmcmVxdWVuY3kgbG9va3MgYWxyaWdodCBiZWZvcmUgbGF1bmNoaW5nIEwyICovXG4gXHRjaGVja190c2NfZnJlcShVQ0hFQ0tfTDEpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTEyNSw3ICsxMjUsNyBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR2bXdyaXRlKFRTQ19NVUxUSVBMSUVSX0hJR0gsIFRTQ19NVUxUSVBMSUVSX0wyIFx1MDAzZVx1MDAzZSAzMik7XG4gXG4gXHQvKiBsYXVuY2ggTDIgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHQvKiBjaGVjayB0aGF0IEwxJ3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xuaW5kZXggNTA3MzkxYWIyYzkzMC4uZjg4NDI3ZTkyNWZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbkBAIC05OCwxNyArOTgsMTcgQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuK1x0bG9hZF92bWNzKHZteCk7XG4gXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiBcbiBcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHR3aGlsZSAoMSkge1xuIFx0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuIFx0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYsIFVEX1ZFQ1RPUik7XG4tXHRcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHRcdHZtcmVzdW1lKCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuaW5kZXggZDFlZGFmZDVhZjc1NS4uMzc3ZGYwOWU1ODJhZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5AQCAtNzgsOCArNzgsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKmFyZylcbiBcdFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKSB7XG4gXHRcdFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdFx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0XHRcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdFx0XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcdFx0XHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcbmluZGV4IDRhMTA1NmE2Y2I4ZGMuLjM4Yzk2ODlhYzYwMTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcbkBAIC03NSwzMiArNzUsMzIgQEAgdm9pZCB2bXhfbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuIFx0R1VFU1RfU1lOQygzKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRHVUVTVF9TWU5DKDQpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIHZteF9sMl9ndWVzdF9jb2RlKTtcbiBcbiBcdEdVRVNUX1NZTkMoNSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHR2bWxhdW5jaCgpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHQvKiBDaGVjayB0aGF0IHRoZSBsYXVuY2hlZCBzdGF0ZSBpcyBwcmVzZXJ2ZWQuICAqL1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfU1lOQyg3KTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyAzKTtcbkBAIC0xMDgsMjggKzEwOCwyOCBAQCBzdGF0aWMgdm9pZCB2bXhfbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTKTtcbiBcdHZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbitcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdEdVRVNUX1NZTkMoOCk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1yZXN1bWUoKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIFxuIFx0dm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTtcbiBcdEdVRVNUX1NZTkMoOSk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmVlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSkpO1xuK1x0dm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1yZXN1bWUoKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIFx0R1VFU1RfU1lOQygxMyk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX19mbGF0dGVuX18pKSBndWVzdF9jb2RlKHZvaWQgKmFyZylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmNcbmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xuQEAgLTI1LDEyICsyNSwxMiBAQCB2b2lkIGwxX2d1ZXN0X2NvZGVfdm14KHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfZ3Vlc3RfY29kZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgYSB0cmlwbGUgZmF1bHQgZXZlbnQgaW5qZWN0ZWQuICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxUKTtcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbmluZGV4IDQ2M2Y3M2FhOTE1OWEuLmZlMjljODY5YTIzNTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuY1xuQEAgLTM4LDggKzM4LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHVuc2lnbmVkIGxvbmcgaGlnaF9ncGEpXG4ge1xuIFx0dTMyIGNvbnRyb2w7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTUzLDE0ICs1MywxNCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSlcbiBcbiBcdC8qIFRyeSB0byBsYXVuY2ggTDIgd2l0aCB0aGUgbWVtb3J5LWJhY2tlZCBBUElDLWFjY2VzcyBhZGRyZXNzLiAqL1xuIFx0R1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHR2bXdyaXRlKEFQSUNfQUNDRVNTX0FERFIsIGhpZ2hfZ3BhKTtcbiBcbiBcdC8qIFRyeSB0byByZXN1bWUgTDIgd2l0aCB0aGUgdW5iYWNrZWQgQVBJQy1hY2Nlc3MgYWRkcmVzcy4gKi9cbiBcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbmluZGV4IGY5Yjg4YTZmNjExM2QuLmU1NzgyMjFkYTI0N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbkBAIC0zMyw4ICszMyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbiBcdHUzMiBjb250cm9sO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0ICogUnVuIEwyIHRvIHN3aXRjaCB0byB4MkFQSUMgbW9kZSwgd2hpY2ggaW4gdHVybiB3aWxsIHVuaW5oaWJpdCBBUElDdixcbiBcdCAqIGFzIEtWTSBzaG91bGQgZm9yY2UgdGhlIEFQSUMgSUQgYmFjayB0byBpdHMgZGVmYXVsdC5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFx1MDAyNiBNU1JfSUEzMl9BUElDQkFTRV9FWFREKTtcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0ICogaGFuZGxlcyB0aGUgeDJBUElDID1cdTAwM2UgeEFQSUMgdHJhbnNpdGlvbiBhbmQgaW5oaWJpdHMgQVBJQ3Ygd2hpbGUgTDJcbiBcdCAqIGlzIGFjdGl2ZS5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0FTU0VSVCghKHJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFKSBcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCkpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG5pbmRleCBjODM3OTEyNGIzMTcyLi4zMDE3OTM4ZmE5OTM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuQEAgLTQxLDggKzQxLDggQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG5AQCAtNTUsNyArNTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0FTU0VSVCghKHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgXHUwMDI2IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8XG4gXHRcdCAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIFx1MDAyNiBTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0LyogTDIgc2hvdWxkIHRyaXBsZSBmYXVsdCBhZnRlciBtYWluKCkgc3R1ZmZzIGludmFsaWQgZ3Vlc3Qgc3RhdGUuICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuY1xuQEAgLTM3LDggKzM3LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0dTX0JBU0UpID09IExBNTdfR1NfQkFTRSk7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG5AQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdGd1ZXN0X2NyNCBcdTAwMjY9IH5YODZfQ1I0X0xBNTc7XG4gXHR2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdEdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbmluZGV4IGViODAyMWMzM2NkNDMuLmNkYTUzZGYzMzg4OGUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbkBAIC03MSw5ICs3MSw5IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR1NjQgbDFfdHNjX2RlYWRsaW5lLCBsMl90c2NfZGVhZGxpbmU7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAgICAhKGN0cmxfZXhpdF9yZXYuY2xyIFx1MDAyNiBWTV9FWElUX1NBVkVfVk1YX1BSRUVNUFRJT05fVElNRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0dm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSArIHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTtcbiBcbkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcbiBcdGwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpIFx1MDAzZVx1MDAzZSB2bXhfcHRfcmF0ZSkgXHUwMDNjXHUwMDNjIHZteF9wdF9yYXRlO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXG4gXHRsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU1OjI2Ljk2OTI4Njg1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MzI4NjkwMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBWTVBUUkxEL1ZNUFRSU1QgUGF0Y2ggaW4gS1ZNIE5lc3RlZCBWTVgqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBLVk0ncyBuZXN0ZWQgVk1YIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2hlbiBlVk1DUyBpcyBpbiBwbGF5LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCwgc28gdGhhdCdzIHdoZXJlIEknbSBmb2N1c2luZy5cblxuTG9va2luZyBhdCBgaGFuZGxlX3ZtcHRybGRgLCB0aGUgcGF0Y2gncyBtYWluIGNoYW5nZSBpcyByZXBsYWNpbmcgYSBzaW1wbGUgcmV0dXJuIHdpdGggYGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKWAgd2hlbiBlVk1DUyBpcyBhY3RpdmUuIFByZXZpb3VzbHksIGp1c3QgcmV0dXJuaW5nIDEgbWlnaHQgaGF2ZSBiZWVuIGEgc3VidGxlIGJ1ZyBvciBhIG1pc2ludGVycHJldGF0aW9uIG9mIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gUmV0dXJuaW5nIDEgaW4gYSBLVk0gZXhpdCBoYW5kbGVyIG9mdGVuIHNpZ25hbHMgdG8gcmVzdW1lIHRoZSBndWVzdCwgYnV0IHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIChSSVApLCB0aGlzIHdvdWxkIGxlYWQgdG8gZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3IsIG1vcmUgbGlrZWx5LCBhbiB1bmV4cGVjdGVkIGZhaWx1cmUuIEl0IGxvb2tzIGxpa2UgaXQgd2FzIGludGVuZGVkIHRvIGZhaWwvc2tpcCB0aGUgaW5zdHJ1Y3Rpb24sIGJ1dCB3YXNuJ3QgZG9pbmcgdGhhdCwgYnV0IHRoZXJlIHdhcyBhbiBleHBlY3RhdGlvbiB0aGF0IHNvbWV0aGluZyAqc2hvdWxkKiBmYWlsLiBOb3csIHRoZSBwYXRjaCBjb3JyZWN0bHkgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiwgd2hpY2ggaXMgdGhlIHByb3BlciB3YXkgdG8gaGFuZGxlIGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbi5cblxuTm93LCBmb3IgYGhhbmRsZV92bXB0cnN0YC4gSGVyZSwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXR1cm5pbmcgYGh2X2V2bWNzX3ZtcHRyYCBpbnN0ZWFkIG9mIGp1c3QgMS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJldmlvdXMgYmVoYXZpb3IsIHJldHVybmluZyAxLCBtaWdodCBoYXZlIGFsc28gYmVlbiBhIGJ1Zy4gSW4gdGhpcyBjYXNlLCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19LVk1fSFlQRVJWYCwgYW5kIHRoZSBwYXRjaCBub3cgY29uZGl0aW9uYWxseSBhc3NpZ25zIGBjdXJyZW50X3ZtcHRyYCB3aXRoIGBodl9ldm1jc192bXB0cmAgd2hlbiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgaXMgdHJ1ZS4gSXQgYXBwZWFycyBIeXBlci1WIFRMRlMgZG9lcyBub3QgZGVmaW5lIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQsIGJ1dCBnZW51aW5lIEh5cGVyLVYgcmV0dXJucyBlVk1DUyBHUEEuXG5cblNvLCBmdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIG5lc3RlZCBWTVggaW4gY2VydGFpbiBzY2VuYXJpb3MuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZml4aW5nIGEgc3VidGxlIGJ1ZyBhbmQgaW1wcm92aW5nIHRoZSBhY2N1cmFjeSBvZiBob3cgS1ZNIGludGVyYWN0cyB3aXRoIG5lc3RlZCBWTVggaW4gdGhpcyBjb250ZXh0LiBUaGUgSHlwZXItViBzcGVjaWZpYyBjb25kaXRpb25hbCBpcyB3b3J0aCBjb25zaWRlcmluZy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgc2NydXRpbnkgYW5kIHRlc3RpbmcsIGVzcGVjaWFsbHkgYmVjYXVzZSB0aGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGNhbiBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlcyBvciByZXZlYWwgcHJldmlvdXNseSBoaWRkZW4gYnVncy5cblxuTGV0J3Mgc2VlOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAgYXJlIHRoZSBrZXkgY29uZmlnIG9wdGlvbnMgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBjb2RlIGlzIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0byBleGVyY2lzZSB0aGlzIGNvZGUgYW5kIGNyZWF0ZSBhIGZvY3VzZWQgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NDIuMjk3OTc5NTA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQ0MjE3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9IWVBFUlZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTgzPWNvbmZpZyBLVk1fU01NXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NDQuMTgyNDA5NDE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMjI2NjkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYEtWTV9IWVBFUlZgIGlzIGRlZmluaXRlbHkgYSByZWNvZ25pemVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBnb29kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdGhvcm91Z2hseS4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIEludGVsLXNwZWNpZmljIHZpcnR1YWxpemF0aW9uLiBUaGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggSHlwZXItViBpbiB0aGUgbWl4LCBjb3VsZCBiZSBzaWduaWZpY2FudCBvbiBhbiBJbnRlbC1iYXNlZCBzeXN0ZW0sIHNvIGEgZGVlcCBkaXZlIGludG8gYEtWTV9JTlRFTGAncyByZWxhdGlvbnNoaXAgd2l0aCBgS1ZNX0hZUEVSVmAgaXMgZXNzZW50aWFsLiBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgaG93IHRoZXkgaW50ZXJhY3QsIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBjcml0aWNhbGx5LCBpZiBlbmFibGluZyBgS1ZNX0hZUEVSVmAgaGFzIGFueSBjYXNjYWRpbmcgZWZmZWN0IG9uIGBLVk1fSU5URUxgIGZlYXR1cmVzIG9yIHBlcmZvcm1hbmNlLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVsYXRpb25zaGlwIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZGVjaXNpb25zIEknbGwgbWFrZSBnb2luZyBmb3J3YXJkLiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgcmVsZXZhbnQgc291cmNlIGNvZGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NTo0OC44ODQ2Nzg4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUyNTkwNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NTo1MC43MzcyNzUxNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEzMTYwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKktWTV9JTlRFTCBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgS1ZNX0lOVEVMYC4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJ20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBkZWZpbmUgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBLVk0gb24gSW50ZWwgcHJvY2Vzc29ycyBhbmQsIGNydWNpYWxseSwgdG8gc3BlY2lmeSBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBvciBzYXRpc2ZpZWQgZm9yIGBLVk1fSU5URUxgIHRvIGJlIHZpYWJsZS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyB0aGlzIGlzIGRlcGVuZGVudCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NTo1NC41NTA0MzgwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG4gMTAxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuIDEwMjpcXHRcXHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTA1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWludGVsLlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuIDEwODpcXHQgICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbiAxMDk6XFx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcXHUwMDI2XFx1MDAyNiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NTQuNTUwNTE1NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4NDk1MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBTZXR1cCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGdldHRpbmcgdGhpcyBLVk0gZW52aXJvbm1lbnQgc2V0IHVwIHByb3Blcmx5LiBJdCdzIGNsZWFyIHRoYXQgSSdtIGdvaW5nIHRvIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ2l2ZW4gZm9yIGFueSBtb2Rlcm4gSW50ZWwtYmFzZWQgdmlydHVhbGl6YXRpb24uIEFuZCB0aGUgc2l0dWF0aW9uIGlzIG1vcmUgY29tcGxleCB0aGFuIGl0IG9uY2Ugd2FzLCBhcyBub3cgaXQgYWxzbyBsb29rcyBsaWtlIEkgbmVlZCBgS1ZNX0hZUEVSVmAgdG9vLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYEtWTV9IWVBFUlZgIGRlcGVuZGVuY2llcyBub3csIHRvIGVuc3VyZSBJJ3ZlIGNvdmVyZWQgZXZlcnl0aGluZyB0byBnaXZlIG15c2VsZiB0aGUgYmVzdCBjaGFuY2Ugb2YgY29tcGF0aWJpbGl0eS4gVGhhdCBzaG91bGQgYmUgbXkgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NTcuODM5MDEyNTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHQgIGZpcm13YXJlIHRvIGltcGxlbWVudCBVRUZJIHNlY3VyZSBib290LlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdGNvbmZpZyBLVk1fSFlQRVJWXFxuIDE5NTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuIDE5NjpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMTk3OlxcdFxcdGRlZmF1bHQgeVxcbiAxOTg6XFx0XFx0aGVscFxcbiAxOTk6XFx0XFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXFxuIDIwMDpcXHRcXHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcXG4gMjAxOlxcdFxcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxcbiAyMDI6XFx0XFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcXG4gMjAzOlxcdFxcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXFxuIDIwNDpcXHRcXHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiWVxcXCIuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdGNvbmZpZyBLVk1fWEVOXFxuIDIwOTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NTcuODM5MDgzNzcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzAzMjU1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBLVk0gY29uZmlndXJhdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fSFlQRVJWYC4gVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgbGllcyBpbiBob3cgdGhpcyBwYXRjaCBhZmZlY3RzIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmVkIG9yIHNvbWV0aGluZyBvYnZpb3VzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBiZWZvcmUgZGl2aW5nIGRlZXBlci4gQWgsIHRoZXkncmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gQWxyaWdodCwgc28sIG5vdCBpbmxpbmVkLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFyZSBub3QgZXhwb3J0ZWQgb3Igc29tZWhvdyByZWZlcmVuY2VkIHRocm91Z2ggYW4gYXJyYXkuIFRoaXMgd2lsbCBpbmZvcm0gaG93IHRoZSBwYXRjaCB3aWxsIGJlIGFwcGxpZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzk0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MDIuODA5NDEyMzAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzMDIxMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV92bXB0cmxkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Nz1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4OTAtLyogRW11bGF0ZSB0aGUgVk1QVFJMRCBpbnN0cnVjdGlvbiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg5MTpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4OTIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDM1PV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ2Ny1cXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVxcdD0gaGFuZGxlX3ZtbGF1bmNoO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzQ2ODpcXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXFx0PSBoYW5kbGVfdm1wdHJsZDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NjktXFx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVxcdD0gaGFuZGxlX3ZtcHRyc3Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NjE9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMC1cXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDgwMTpcXHQgICAoaGFuZGxlX3ZtcHRybGQpLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMi1cXHQgICBXZSBjYW4gTk9UIGVuYWJsZSBzaGFkb3dfdm1jcyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB5ZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MDQuNDQyNDQwMTczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTczMTcxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVk0gRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWTSBleGl0cyBhcmUgbWFuYWdlZCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIHN5c3RlbSB1c2VzIGFuIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljOiBJJ20gc3VwcG9zZWQgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgdGhvc2UgaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgcmVhc29uIGlzIHRoZXkgd2FudCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Ob3csIEknbSBub3RpbmcgdGhhdCBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggYXQgZmlyc3Qgd291bGQgc3VnZ2VzdCB0aGV5J2QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIGhvdyB0aGVzZSBhcmUgdXNlZC4gVGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgKndpdGhpbiogdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gU2luY2UgdGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMsIEkgZG9uJ3QgdGhpbmsgdGhleSdyZSBpbmxpbmVkLiBUaG91Z2gsIEkgYW0gYSBiaXQgY29uY2VybmVkIGJlY2F1c2UgYG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXBgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZW0gdXAuIEl0J3MgYSBrZXkgZnVuY3Rpb24gSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuU28sIEkgdGhpbmsgSSdtIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLCBhbmQgdGhlIHJlYWwgZW50cnkgcG9pbnQgZm9yIFZNIGV4aXRzIGlzIGB2bXhfaGFuZGxlX2V4aXRgIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYxNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoxMy4wNTk3NjExNDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzg2OTAzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X2hhbmRsZV9leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE1Nz1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNjM6XFx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4OD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAwMi1cXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDAzOlxcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMDQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU0Mjk9c3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU0OTQtXFx0ICogTU1JTywgaXQgaXMgYmV0dGVyIHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvci5cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU0OTU6XFx0ICogU2VlIHRoZSBjb21tZW50cyBpbiB2bXhfaGFuZGxlX2V4aXQuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NDk2LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MjY4PXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNzItXFx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MjczOlxcdCAqIHZteF9oYW5kbGVfZXhpdCgpLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjI3NC1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjUwMT12b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY3MDUtICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2NzA2OnN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02NzA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg2NC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NjU6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NjYte1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Njg2NzpcXHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODY4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz03MTc4PXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzE5My1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjcxOTQ6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxOTUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9Mjg9dm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoyOTppbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDozMDp2b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zMS1pbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dD0xNTkyPU5vdGVzOlxcbi0tXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTItICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NjI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjY2MmU5IHZteF92Y3B1X3J1bisweDNiOSAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNjE5YTAgX192bXhfY28uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxMzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg3MjogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWNmYjIgdmNwdV9lbnRlcl9ndWVzdCsweDc1MiAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNWY1NzAgdm14Xy4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjE0LSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODgxOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5ZDAyOCB2Y3B1X2VudGVyX2d1ZXN0KzB4N2M4IChba2VybmVsLmthbGxzeW1zXSkgPVxcdTAwM2UgZmZmZmZmZmZiMjM0ZjkwMCBfX3NyLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTU6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDlkMDZmIHZjcHVfZW50ZXJfZ3Vlc3QrMHg4MGYgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjcyZTMwIHZteF8uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNjogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJlM2Qgdm14X2hhbmRsZV9leGl0KzB4ZCAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNzI3YzAgX192bXhfaC4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE3OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3MmIxNSBfX3ZteF9oYW5kbGVfZXhpdCsweDM1NSAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNjBhZTAgdm14Li4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTg6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyOTk0IF9fdm14X2hhbmRsZV9leGl0KzB4MWQ0IChba2VybmVsLmthbGxzeW1zXSkgPVxcdTAwM2UgZmZmZmZmZmZjMTBiNzA5MCBrdm0uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxOS0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzkwMzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwYjcwZjEga3ZtX2VtdWxhdGVfY3B1aWQrMHg2MSAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzEwYjZlMTAga3ZtXy4uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoxNC45Mzg0NTk0ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU3MDcxMTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWTSBFeGl0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVk1YIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHZteF9oYW5kbGVfZXhpdGAgbG9va2VkIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZW4sIEkgcmVtZW1iZXJlZCB0aGF0IGBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwYCBhY3R1YWxseSBwb3B1bGF0ZXMgdGhpcyBgZXhpdF9oYW5kbGVyc2AgYXJyYXkg4oCTIHRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW1wb3J0YW50PyBBaCwgcmlnaHQsIGBuZXN0ZWRfdm14X2dldF92bXB0cmAgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV92bXB0cmxkYC4gSW50ZXJlc3RpbmcuIEFuZCwgY3JpdGljYWxseSwgdGhvc2UgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIGFsc28gZ2xhbmNlZCBhdCBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgd2hpY2ggaXMgaW5saW5lLiBgbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uYCBpcyBhbHNvIGBzdGF0aWNgLlxuXG5JJ20gc3RhcnRpbmcgdG8gemVybyBpbiBub3cuIEkgc2hvdWxkIGNpcmNsZSBiYWNrIHRvIGBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwYCBhbmQgdHJhY2UgaXRzIHVzYWdlLiBXYWl0IGEgbWludXRlLi4uIHdoaWxlIGB2bXhfaGFuZGxlX2V4aXRgICppcyogdGhlIG1haW4gVk0gZXhpdCBoYW5kbGVyLCBteSBhdHRlbnRpb24gaXMgYmVpbmcgZHJhd24gdG8gYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhleSdyZSB0aGUgb25lcyB0aGF0IGFwcGVhciB0byBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cblRoZSBmYWN0IHRoYXQgdGhleSBhcmUgYHN0YXRpY2AgaXMgc2lnbmlmaWNhbnQuIFRoYXQgbGlrZWx5IG1lYW5zIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgcHJvYmFibHkgYmVpbmcgdGFrZW4gYW5kIHB1dCBpbnRvIHRoYXQgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBTbywgdGhlIGNvbXBpbGVyIGNhbid0IG9wdGltaXplIHRoZW0gYXdheS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuSWYgdGhleSdyZSBpbiBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycywgaW5saW5pbmcgaXMgaW1wb3NzaWJsZSwgYmVjYXVzZSB5b3UgbmVlZCB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uLiBTbywgaWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgcmVhbGx5ICphcmUqIHRoZSBzaWduaWZpY2FudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoYXQgd291bGQgYmUgYSBtYWpvciBjbHVlLiBPa2F5LCBsZXQncyB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE4OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoyMi41MDkxNzM1ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzM4NTMyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3ZtcHRybGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODc3PXN0YXRpYyB2b2lkIHNldF9jdXJyZW50X3ZtcHRyKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBncGFfdCB2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5MC0vKiBFbXVsYXRlIHRoZSBWTVBUUkxEIGluc3RydWN0aW9uICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODkxOnN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5Mi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0MzU9X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDY3LVxcdGV4aXRfaGFuZGxlcnNbRVhJVF9SRUFTT05fVk1MQVVOQ0hdXFx0PSBoYW5kbGVfdm1sYXVuY2g7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDY4OlxcdGV4aXRfaGFuZGxlcnNbRVhJVF9SRUFTT05fVk1QVFJMRF1cXHQ9IGhhbmRsZV92bXB0cmxkO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ2OS1cXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSU1RdXFx0PSBoYW5kbGVfdm1wdHJzdDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDc2MT1zdGF0aWMgdTMyIHZteF9zZWNvbmRhcnlfZXhlY19jb250cm9sKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00ODAwLVxcdC8qIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTIGlzIGVuYWJsZWQgd2hlbiBMMSBleGVjdXRlcyBWTVBUUkxEXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0ODAxOlxcdCAgIChoYW5kbGVfdm1wdHJsZCkuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00ODAyLVxcdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHlldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoyNC4xNDMwMzgwODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2OTA2Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGZvciB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQsIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWFraW5nIHRoZW0gcGFydCBvZiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBUaGF0IG1lYW5zIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBHb29kLCBzbyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGxvb2sgbGlrZSBzdHJvbmcgY2FuZGlkYXRlcyB0byBzdGFydCB3aXRoLlxuXG5XYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGd1aWRhbmNl4oCmIHRoZSBpbnN0cnVjdGlvbnMgZG8gc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gVGhlc2UgKmFyZSogc3RhdGljLCBidXQgdGhleSBhcmUgKm5vdCogaW5saW5lZCwgc2luY2Ugd2UgY2FuIHBvaW50IHRvIHRoZWlyIGFkZHJlc3Nlcy4gVGhleSBkbyBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGV2ZW4gdGhvdWdoIHN0YXRpYywgZHVlIHRvIHRoZWlyIG5vdCBiZWluZyBpbmxpbmVkLiBIb3dldmVyLCBJJ2xsIGhlZGdlIG15IGJldHMgYW5kIGFkZCBgdm14X2hhbmRsZV9leGl0YCBvciBgX192bXhfaGFuZGxlX2V4aXRgIHRvIHRoZSBsaXN0LCBqdXN0IHRvIGJlIHNhZmUuXG5cbkhvbGQgb27igKYgYHZteF9oYW5kbGVfZXhpdGAgaXMgZGVzY3JpYmVkIGFzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGF2b2lkIHRob3NlIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtYWtlcyBzZW5zZTsgYSBnZW5lcmljIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBjb3ZlciBhIGxvdCBvZiB1bnJlbGF0ZWQgY29kZSwgYW5kIHdlJ3JlIGxvb2tpbmcgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCBWTVBUUkxEIGFuZCBWTVBUUlNUIGV4aXRzLiBTbywgSSBzaG91bGQgYXZvaWQgYHZteF9oYW5kbGVfZXhpdGAuXG5cblRoYXQgbGVhdmVzIG1lIGJhY2sgYXQgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgZXhpdHMsIHdoaWNoIGlzICpleGFjdGx5KiB3aGF0IHdlIG5lZWQgdG8gZnV6ei4gUGVyZmVjdC5cblxuTm93LCBhIHF1aWNrIGNvbmZpcm1hdGlvbjogY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhlc2UgVk0gZXhpdHM/IFllcywgd2UgY2FuIHRyaWdnZXIgVk0gZXhpdHMgdXNpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBndWVzdCwgc28gdGhvc2Ugc3ltYm9scyBzaG91bGQgYmUgYWNjZXNzaWJsZS5cblxuQWxyaWdodCwgYmVmb3JlIEkgbG9jayBpbiB0aGUgZmluYWwgc2VsZWN0aW9uLCBsZXQncyB2ZXJpZnkgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIGhhcyByZWxldmFuY2UgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0MjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MzIuNTEyMTA1NzU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNzAxOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD0yMD1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI0LVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6MjU6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNjgtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDo2OTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTcwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTk1PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2luc3RydWN0aW9uX2Vycm9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDMtXFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIwNDpcXHQgICAgIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwNS1cXHRcXHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsSW52YWxpZCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjI3ND12b2lkIG5lc3RlZF9zeW5jX3ZtY3MxMl90b19zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc3LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI3ODpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjI3OS1cXHRcXHRjb3B5X3ZtY3MxMl90b19lbmxpZ2h0ZW5lZCh2bXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDMxPXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQzNi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0Mzc6XFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmRpcnR5X3ZtY3MxMiB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM4LVxcdFxcdHByZXBhcmVfdm1jczAyX2Vhcmx5X3JhcmUodm14LCB2bWNzMTIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNzYwPXN0YXRpYyBpbnQgcHJlcGFyZV92bWNzMDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzY4OlxcdGlmICh2bXgtXFx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzY5LVxcdFxcdHByZXBhcmVfdm1jczAyX3JhcmUodm14LCB2bWNzMTIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzcxLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mjc3MjpcXHRcXHRsb2FkX2d1ZXN0X3BkcHRyc192bWNzMTIgPSAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpIHx8XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzczLVxcdFxcdFxcdCEoZXZtY3MtXFx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcXHUwMDI2IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9HVUVTVF9HUlAxKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI5MDI6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI5MDMtXFx0XFx0ZXZtY3MtXFx1MDAzZWh2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfQUxMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjI5PWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzgyLVxcdHZtY3MxMi1cXHUwMDNldm1fZXhpdF9yZWFzb24gPSBleGl0X3JlYXNvbi5mdWxsO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc4MzpcXHRpZiAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3ODQtXFx0XFx0dm14LVxcdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzkyPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgxMy1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4MTQ6XFx0aWYgKENDKCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MTUtXFx0ICAgICAgIHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODI4LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgyOTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODMwLVxcdFxcdHN0cnVjdCBodl9lbmxpZ2h0ZW5lZF92bWNzICpldm1jcyA9IG5lc3RlZF92bXhfZXZtY3Modm14KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDY1Mz1zdGF0aWMgdm9pZCBzeW5jX3ZtY3MwMl90b192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTYtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjU3OlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjU4LVxcdFxcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMl9yYXJlKHZjcHUsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NjAtXFx0dm14LVxcdTAwM2VuZXN0ZWQubmVlZF9zeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSA9XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjYxOlxcdFxcdCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjYyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDczPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE4MC1cXHRpZiAoKHZtX2V4aXRfcmVhc29uICE9IC0xKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE4MTpcXHQgICAgKGVuYWJsZV9zaGFkb3dfdm1jcyB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE4Mi1cXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NjQ9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY4My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU2ODQ6XFx0aWYgKCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2ODUtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg5MT1zdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTkwMC1cXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTkwMTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTAyLVxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk2Mz1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk3OS0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5ODA6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5ODEtXFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzY0PXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODUyLVxcdFxcdGlmICghdm14LVxcdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4NTM6XFx0XFx0XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4NTQtXFx0XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MzQuMjAyODEzNzc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzkxMzMxNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCBmb3IgTmVzdGVkIFZNWCBhbmQgZVZNQ1MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0J3MgZm9jdXNlZCBvbiBob3cgS1ZNIGhhbmRsZXMgVk1QVFJMRCBhbmQgVk1QVFJTVCB3aXRoaW4gbmVzdGVkIFZNWCB3aGVuIHRoZSBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgZmVhdHVyZSBpcyBpbiBwbGF5LiBUaGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgZGVmaW5pdGVseSBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHJlbGV2YW50IFZNIGV4aXRzLCBhbmQgdGhleSdyZSBleGFjdGx5IHdoZXJlIHRoZSBwYXRjaCBtYWtlcyB0aGUgY3JpdGljYWwgY2hhbmdlcy4gSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgbmVzdGVkX3ZteF9ydW5gIGluaXRpYWxseSBiZWNhdXNlIGl0J3MgdGhlIG1haW4gZnVuY3Rpb24gZm9yIFZNTEFVTkNIL1ZNUkVTVU1FLCBhbmQgdGhlcmVmb3JlIGludGVyYWN0cyB3aXRoIHRoZSBlVk1DUywgYnV0IHRoZSBjaGFuZ2VzIGNlbnRlciBvbiB0aGUgYGhhbmRsZV8qYCBmdW5jdGlvbnMuXG5cbkkgY29uZmlybWVkIHRoYXQgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY2AgYW5kIG90aGVyIHRlc3RzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gSXQgc2hvd3MgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIHRlc3RhYmxlLCBhbmQsIGNydWNpYWxseSwgaXQncyByZWFjaGFibGUuIFRoaXMgYWxsIHBvaW50cyB0byB0aGlzIHBhdGNoIGJlaW5nIHdvcnRoIGZ1enppbmcsIGFzIGl0J3MgY2hhbmdpbmcgY29yZSBiZWhhdmlvdXIuXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBuZXN0ZWQgVk1YIHdoZW4gZVZNQ1MgaXMgYWN0aXZlLiBJdCdzIHJlcGxhY2luZyB0aGUgc3RhbmRhcmQgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgd2l0aCBlaXRoZXIgYSAjVUQgZXhjZXB0aW9uIChmb3IgVk1QVFJMRCkgb3IgcmV0dXJuaW5nIHRoZSBlVk1DUyBHUEEgKGZvciBWTVBUUlNUKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgYW5kIGl0IGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGd1ZXN0IGV4ZWN1dGlvbi5cblxuSSd2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIGFzIGBbXCJoYW5kbGVfdm1wdHJsZFwiLCBcImhhbmRsZV92bXB0cnN0XCJdYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFtcIktWTVwiLCBcIktWTV9JTlRFTFwiLCBcIktWTV9IWVBFUlZcIl1gIHdoaWNoIGlzIGFsbCBJIG5lZWQgc2luY2UgYEtWTV9YODZgIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgZGVwZW5kcyBvbiBgS1ZNX1g4NmAuXG5cbkp1c3QgdG8gYmUgc3VyZSwgSSBkb3VibGUtY2hlY2tlZCB0aGUgZnVuY3Rpb25zIGFuZCB0aGUgcGF0Y2ggY29kZSBhZ2Fpbi4gVGhvc2UgYGhhbmRsZV8qYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdXNlZCBpbiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LCBzbyB0aGV5IGRlZmluaXRlbHkgYXJlbid0IGlubGluZWQgYW5kIGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gVGhleSBhcmUgdGhlIEFQSSBlbnRyeXBvaW50cyBmb3IgaGFuZGxpbmcgdGhvc2Ugc3BlY2lmaWMgVk0gZXhpdCByZWFzb25zLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBjb25maXJtcyB3aGF0IEkgdGhvdWdodC4gV2l0aCBlVk1DUyB2YWxpZCwgdGhlIHBhdGNoIHF1ZXVlcyBhICNVRCBleGNlcHRpb24gZm9yIGBoYW5kbGVfdm1wdHJsZGAuIEZvciBgaGFuZGxlX3ZtcHRyc3RgLCBpdCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgd2hlbiBgS1ZNX0hZUEVSVmAgaXMgZW5hYmxlZCwgaW5zdGVhZCBvZiBza2lwcGluZyB0aGUgaW5zdHJ1Y3Rpb24gKG9yIGxvb3BpbmcpLCBhcyB0aGUgSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBkby4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHRoZW4gZm9jdXNlcyBvbiBzZWxmdGVzdHMgdG8gY292ZXIgdGhpcyBuZXcgYmVoYXZpb3VyLlxuXG5ZZXAsIGxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MDksIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU2OjQ1Ljk5NDE0NzQ0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MjUxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIG5lc3RlZCBWTVggd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSXQgY2hhbmdlcyBWTVBUUkxEIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBhbmQgVk1QVFJTVCB0byByZXR1cm4gdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfdm1wdHJsZFwiLFxuICAgIFwiaGFuZGxlX3ZtcHRyc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gbmVzdGVkIFZNWCB3aGVuIEVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBpcyB1c2VkLiBJdCBjaGFuZ2VzIFZNUFRSTEQgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGFuZCBWTVBUUlNUIHRvIHJldHVybiB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6NDYuMDcwMDc4NTA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDYwNTA0NDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU2OjQ2LjA3MDY0NzIzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDYwNDQ3MjE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0ncyBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvZGUuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZDogaW5zdGVhZCBvZiByZXR1cm5pbmcgMSAoZG9pbmcgbm90aGluZyksIGl0IG5vdyBzZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYCBhbmQgd3JpdGVzIGl0IHRvIGd1ZXN0IG1lbW9yeS4gYGN1cnJlbnRfdm1wdHJgIGlzIGEgYGdwYV90YCAoYSA2NC1iaXQgaW50ZWdlciksIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBndWVzdCB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIFRoZXJlIGFyZSBubyBzdHJ1Y3RzIHdpdGggcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnZvbHZlZC4gVGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGluIEtWTSBzZWxmdGVzdHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTljMmViYjA0MWQyNjk4MDE4M2FhZTEzNDYzNTY4NmJiMDRjYjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjM6NTU6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODk3LDYgKzU4OTcsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4rXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuK1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuK1x0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuIFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFx1MDAyNnZtcHRyLCBcdTAwMjZyKSlcbiBcdFx0cmV0dXJuIHI7XG4gXG5AQCAtNTkwNiwxMCArNTkxMiw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk2Miw3ICs1OTY0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbitcdGdwYV90IGN1cnJlbnRfdm1wdHI7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0aW50IHI7XG5AQCAtNTk3MCw4ICs1OTcyLDE2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuK1x0LypcbitcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuK1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuK1x0ICovXG4rI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbitcdGVsc2VcbisjZW5kaWZcbitcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuaW5kZXggODJhOGVhNmI2NjFmMC4uYzViOWQyNmY2Y2RiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuQEAgLTI2NSwxNCArMjY1LDYgQEAgc3RhdGljIGlubGluZSBib29sIGxvYWRfZXZtY3Moc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBldm1jc192bXB0cnN0KHU2NCAqdmFsdWUpXG4te1xuLVx0KnZhbHVlID0gY3VycmVudF92cF9hc3Npc3QtXHUwMDNlY3VycmVudF9uZXN0ZWRfdm1jcyBcdTAwMjZcbi1cdFx0fkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpXG4ge1xuIFx0c3dpdGNoIChlbmNvZGluZykge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuaW5kZXggNmU2ZjcwMDM1NTA4YS4uMjgyYjhhYWZmNzk5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtMTMxOCw3ICsxMzE4LDcgQEAgZ3ZhX3Qgdm1fYWxsb2Nfc3RhY2soc3RydWN0IGt2bV92bSAqdm0sIGludCBucl9wYWdlcyk7XG4gXHRcImxlYSAxZiglJXJpcCksICUlcjEwXFxuXFx0XCJcdFx0XHRcdFxcXG4gXHRcImxlYSAyZiglJXJpcCksICUlcjExXFxuXFx0XCJcdFx0XHRcdFxcXG4gXHRmZXAgXCIxOiBcIiBpbnNuIFwiXFxuXFx0XCJcdFx0XHRcdFx0XFxcbi1cdFwieG9yICUlcjksICUlcjlcXG5cXHRcIlx0XHRcdFx0XHRcXFxuK1x0XCJtb3YgJDAsICUlcjlkXFxuXFx0XCJcdFx0XHRcdFx0XFxcbiBcdFwiMjpcXG5cXHRcIlx0XHRcdFx0XHRcdFxcXG4gXHRcIm1vdiAgJSVyOWIsICVbdmVjdG9yXVxcblxcdFwiXHRcdFx0XHRcXFxuIFx0XCJtb3YgICUlcjEwLCAlW2Vycm9yX2NvZGVdXFxuXFx0XCJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDA0ZjVlMzRkZWEzYWUuLmNkODJhNmJlNjk2M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTMwOSwxMjYgKzMwOSw5MSBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XG4gXG4gI2luY2x1ZGUgXCJldm1jcy5oXCJcbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXhvbiAlW3BhXTsgc2V0bmEgJVtyZXRdXCJcbi1cdFx0OiBbcmV0XVwiPXJtXCIocmV0KVxuLVx0XHQ6IFtwYV1cIm1cIihwaHlzKVxuLVx0XHQ6IFwiY2NcIiwgXCJtZW1vcnlcIik7XG4tXG4tXHRyZXR1cm4gcmV0O1xuKyNkZWZpbmUgR1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCBfX3IsIF9fcGEpXHRcdFxcXG4rXHRfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSBcIlsweCVseF0gaGl0ICVzXCIsXHRcXFxuK1x0XHQgICAgICAgX19wYSwgX19yIFx1MDAzYyAwID8gXCJWTS1GYWlsXCIgOiBleF9zdHIoX19yKSlcbitcbisjZGVmaW5lIEJVSUxEX1ZNQ1NfQVNNX0hFTFBFUlMoaW5zbilcdFx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSlcdFx0XHRcdFx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHU2NCBlcnJvcl9jb2RlO1x0XHRcdFx0XHRcdFx0XFxcbitcdHU4IHZlY3RvcjtcdFx0XHRcdFx0XHRcdFxcXG4rXHR1OCBmYWlsZWQ7XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pIFwiICVbcGFdXCIpXHRcdFxcXG4rXHRcdCAgICAgXCJcXG5cXHRzZXRuYSAlW2ZhaWxlZF1cIlx0XHRcdFx0XFxcbitcdFx0ICAgICA6IEtWTV9BU01fU0FGRV9PVVRQVVRTKHZlY3RvciwgZXJyb3JfY29kZSksXHRcXFxuK1x0XHQgICAgICAgW2ZhaWxlZF1cIj1xbVwiKGZhaWxlZClcdFx0XHRcdFxcXG4rXHRcdCAgICAgOiBbcGFdXCJtXCIodm1jc19wYSlcdFx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFwiY2NcIiwgXCJtZW1vcnlcIiwgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTtcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cmV0dXJuIHZlY3RvciA/IHZlY3RvciA6IGZhaWxlZCA/IC1FSU5WQUwgOiAwO1x0XHRcdFxcXG4rfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih1NjQgdm1jc19wYSlcdFx0XHRcdFx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGludCByZXQgPSBfXyMjaW5zbih2bWNzX3BhKTtcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0R1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpO1x0XHRcXFxuIH1cbiBcbitCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZteG9uKVxuK0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm1wdHJsZClcbitCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtY2xlYXIpXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHZteG9mZih2b2lkKVxuIHtcbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwidm14b2ZmXCIpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcInZtY2xlYXIgJVtwYV07IHNldG5hICVbcmV0XVwiXG4tXHRcdDogW3JldF1cIj1ybVwiKHJldClcbi1cdFx0OiBbcGFdXCJtXCIodm1jc19wYSlcbi1cdFx0OiBcImNjXCIsIFwibWVtb3J5XCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuLVx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4tXHRcdDogW3BhXVwibVwiKHZtY3NfcGEpXG4tXHRcdDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbitzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0KHZvaWQpXG4ge1xuLVx0dTY0IHRtcDtcbitcdHU2NCB2YWx1ZSA9IDA7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwiXG4tXHRcdDogW3ZhbHVlXVwiPW1cIih0bXApLCBbcmV0XVwiPXJtXCIocmV0KVxuK1x0XHQ6IFt2YWx1ZV1cIj1tXCIodmFsdWUpLCBbcmV0XVwiPXJtXCIocmV0KVxuIFx0XHQ6IDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbiBcbi1cdCp2YWx1ZSA9IHRtcDtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogQSB3cmFwcGVyIGFyb3VuZCB2bXB0cnN0IHRoYXQgaWdub3JlcyBlcnJvcnMgYW5kIHJldHVybnMgemVybyBpZiB0aGVcbi0gKiB2bXB0cnN0IGluc3RydWN0aW9uIGZhaWxzLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpXG4te1xuLVx0dTY0IHZhbHVlID0gMDtcbi1cdHZtcHRyc3QoXHUwMDI2dmFsdWUpO1xuK1x0X19HVUVTVF9BU1NFUlQoIXJldCwgXCJ2bXB0cnN0IGZhaWxlZFwiKTtcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGVuYWJsZV9ldm1jcylcbi1cdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbi1cdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbi1cdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbi1cdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbi1cdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbi1cdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IDtcIlxuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuLVx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4tXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKSxcbi1cdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlxuLVx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlxuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCJ2bXJlc3VtZTtcIlxuLVx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogO1wiXG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4tXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuLVx0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbi1cdHJldHVybiByZXQ7XG4rI2RlZmluZSBCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyhpbnNuKVx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih2b2lkKVx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aW50IHJldDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmIChlbmFibGVfZXZtY3MpXHRcdFx0XHRcdFx0XFxcbitcdFx0cmV0dXJuIGV2bWNzXyMjaW5zbigpO1x0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcdFx0XHRcdFx0XFxcbitcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcdFx0XFxcbitcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlx0XHRcXFxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVx0XHRcdFxcXG4rXHRcdFx0ICAgICBfX3N0cmluZ2lmeShpbnNuKVwiO1wiXHRcdFx0XFxcbitcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXHRcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCIxOiA7XCJcdFx0XHRcdFx0XFxcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcdFx0XFxcbitcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFx0XHRcXFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcdFx0XHRcXFxuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1x0XHRcdFx0XFxcbitcdHJldHVybiByZXQ7XHRcdFx0XHRcdFx0XHRcXFxuK31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB2b2lkIGluc24odm9pZClcdFx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aW50IHJldDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHJldCA9IF9fIyNpbnNuKCk7XHRcdFx0XHRcdFx0XFxcbitcdF9fR1VFU1RfQVNTRVJUKCFyZXQsIF9fc3RyaW5naWZ5KGluc24pIFwiIGhpdCBWTS1GYWlsXCIpO1x0XHRcXFxuIH1cbitCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bWxhdW5jaClcbitCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bXJlc3VtZSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm1jYWxsKHZvaWQpXG4ge1xuQEAgLTU1MCw5ICs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3Ige1xuIH07XG4gXG4gc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpO1xuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuK3ZvaWQgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuIHZvaWQgcHJlcGFyZV92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdm9pZCAqZ3Vlc3RfcmlwKTtcbi1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuK3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4gXG4gYm9vbCBlcHRfMWdfcGFnZXNfc3VwcG9ydGVkKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcbmluZGV4IGUxOWU4YjVhMDljNWEuLjZhMTgxNWZiOTdlOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcbkBAIC0zMywxNCArMzMsMTQgQEAgX19hc21fXyhcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHU2NCB2Y3B1X2lkKVxuIHtcbiBcdEdVRVNUX0FTU0VSVCh2bXgtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuK1x0bG9hZF92bWNzKHZteCk7XG4gXHRHVUVTVF9BU1NFUlQoZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCgpKTtcbiBcbiBcdCoodTY0ICopdm14LVx1MDAzZXN0YWNrID0gdmNwdV9pZDtcbiBcdHByZXBhcmVfdm1jcyh2bXgsIG1lbXN0cmVzc19sMl9ndWVzdF9lbnRyeSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuQEAgLTEyNSw3ICsxMjUsNyBAQCB2Y3B1X2FsbG9jX3ZteChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgKnBfdm14X2d2YSlcbiBcdHJldHVybiB2bXg7XG4gfVxuIFxuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4rdm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4gXHR1NjQgZmVhdHVyZV9jb250cm9sO1xuIFx0dTY0IHJlcXVpcmVkO1xuQEAgLTE2MywyOCArMTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXG4gXHQvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm14b24pID0gdm1jc19yZXZpc2lvbigpO1xuLVx0aWYgKHZteG9uKHZteC1cdTAwM2V2bXhvbl9ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHZteG9uKHZteC1cdTAwM2V2bXhvbl9ncGEpO1xuIH1cbiBcbi1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4rdm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbiBcdC8qIExvYWQgYSBWTUNTLiAqL1xuIFx0Kih1MzIgKikodm14LVx1MDAzZXZtY3MpID0gdm1jc19yZXZpc2lvbigpO1xuLVx0aWYgKHZtY2xlYXIodm14LVx1MDAzZXZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0dm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpO1xuIFxuLVx0aWYgKHZtcHRybGQodm14LVx1MDAzZXZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0dm1wdHJsZCh2bXgtXHUwMDNldm1jc19ncGEpO1xuIFxuIFx0LyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi9cbiBcdCoodTMyICopKHZteC1cdTAwM2VzaGFkb3dfdm1jcykgPSB2bWNzX3JldmlzaW9uKCkgfCAweDgwMDAwMDAwdWw7XG4tXHRpZiAodm1jbGVhcih2bXgtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4rXHR2bWNsZWFyKHZteC1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBlcHRfdnBpZF9jYXBfc3VwcG9ydGVkKHU2NCBtYXNrKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG5pbmRleCA4NDVjYjY4NWYxNzQzLi5hMDgyNjU4YzFlNDg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xuQEAgLTcwLDggKzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7XG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuK1x0bG9hZF92bWNzKHZteCk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTtcbiBcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiBcdFx0dm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8IENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICpuZXN0ZWRfdGVzdF9kYXRhKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtNTUsMTEgKzU1LDExIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLFxuIFx0ZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3QpO1xuIFx0ZXZtY3NfZW5hYmxlKCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0LyogTDIgZXhpdHMgdmlhIHZtY2FsbCBpZiB0ZXN0IGZhaWxzICovXG4gXHRzeW5jX3dpdGhfaG9zdCgyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuaW5kZXggNjNlYTE1MzNlNGVhZC4uYjdjMmEyNTQyOTFlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbkBAIC0yMyw3ICsyMywxMSBAQCBzdGF0aWMgaW50IHVkX2NvdW50O1xuIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0dWRfY291bnQrKztcbi1cdHJlZ3MtXHUwMDNlcmlwICs9IDM7IC8qIFZNTEFVTkNIICovXG4rXHQvKlxuK1x0ICogVk1MQVVOQ0ggaW5zbiBjYW4ndCBiZSBlYXNpbHkgY292ZXJlZCBieSBLVk1fQVNNX1NBRkUgZnJhbWV3b3JrIGJ1dFxuK1x0ICogbHVja2lseSB0aGUgaW5zdHJ1Y3Rpb24gaXMgYWx3YXlzIHRocmVlIGJ5dGVzLlxuK1x0ICovXG4rXHRyZWdzLVx1MDAzZXJpcCArPSAzO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbkBAIC04OSwyMCArOTMsMTkgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdGVuYWJsZV92cF9hc3Npc3QoaHZfcGFnZXMtXHUwMDNldnBfYXNzaXN0X2dwYSwgaHZfcGFnZXMtXHUwMDNldnBfYXNzaXN0KTtcbiBcdGV2bWNzX2VuYWJsZSgpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4gXHRHVUVTVF9TWU5DKDMpO1xuIFx0R1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gLTEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuIFx0R1VFU1RfU1lOQyg1KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSAtMXU7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSBFVk1DU19WRVJTSU9OO1xuIFx0R1VFU1RfU1lOQyg2KTtcbiBcbkBAIC0xMTcsMTcgKzEyMCwxNyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0Y3VycmVudF92cF9hc3Npc3QtXHUwMDNlbmVzdGVkX2NvbnRyb2wuZmVhdHVyZXMuZGlyZWN0aHlwZXJjYWxsID0gMTtcbiBcdCoodTMyICopKGh2X3BhZ2VzLVx1MDAzZXBhcnRpdGlvbl9hc3Npc3QpID0gMDtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSgodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYpLCBOTUlfVkVDVE9SKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuIFxuIFx0LypcbiBcdCAqIE5NSSBmb3JjZXMgTDItXHUwMDNlTDEgZXhpdCwgcmVzdW1pbmcgTDIgYW5kIGhvcGUgdGhhdCBFVk1DUyBpc1xuIFx0ICogdXAtdG8tZGF0ZSAoUklQIHBvaW50cyB3aGVyZSBpdCBzaG91bGQgYW5kIG5vdCBhdCB0aGUgYmVnaW5uaW5nXG4gXHQgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFxuIFx0R1VFU1RfU1lOQygxMCk7XG4gXG5AQCAtMTM4LDEzICsxNDEsMTMgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdHZtd3JpdGUoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8XG4gXHRcdENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xuIFx0X19zZXRfYml0KE1TUl9GU19CQVNFIFx1MDAyNiAweDFmZmYsIHZteF9wYWdlcy1cdTAwM2Vtc3IgKyAweDQwMCk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xuIFxuIFx0LyogRW5hYmxlIGVubGlnaHRlbmVkIE1TUiBiaXRtYXAgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfZW5saWdodGVubWVudHNfY29udHJvbC5tc3JfYml0bWFwID0gMTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXG4gXG5AQCAtMTUyLDE0ICsxNTUsMTQgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdF9fc2V0X2JpdChNU1JfR1NfQkFTRSBcdTAwMjYgMHgxZmZmLCB2bXhfcGFnZXMtXHUwMDNlbXNyICsgMHg0MDApO1xuIFx0LyogTWFrZSBzdXJlIEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQIGlzIHNldCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgfD0gSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVA7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBzZWUgRVhJVF9SRUFTT05fTVNSX1JFQUQgaGVyZSBzbyBlTVNSIGJpdG1hcCB3b3JrcyAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAzOyAvKiB2bWNhbGwgKi9cbiBcbiBcdC8qIE5vdyB0ZWxsIEtWTSB3ZSd2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgKz0gMjsgLyogcmRtc3IgKi9cbiBcbkBAIC0xNjcsMjEgKzE3MCwyOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0ICogTDIgVExCIGZsdXNoIHRlc3QuIEZpcnN0IFZNQ0FMTCBzaG91bGQgYmUgaGFuZGxlZCBkaXJlY3RseSBieSBMMCxcbiBcdCAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLlxuIFx0ICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xuIFx0LyogRW5hYmxlIHN5bnRoZXRpYyB2bWV4aXQgKi9cbiBcdCoodTMyICopKGh2X3BhZ2VzLVx1MDAzZXBhcnRpdGlvbl9hc3Npc3QpID0gMTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfU1lOQygxMSk7XG4gXG4tXHQvKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEgKi9cbitcdC8qIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gY2F1c2VzICNVRCBhZnRlciBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCAqL1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1wdHJsZChodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTtcbitcbitcdC8qXG4rXHQgKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEuIEdVRVNUX1NZTkMoMTIpIHNpZ25hbHNcbitcdCAqIHRoZSBob3N0IHRvIGVuYWJsZSBndWVzdF91ZF9oYW5kbGVyKCkgd2hpY2ggY2Fubm90IGJlIGVuYWJsZWQgYmVmb3JlaGFuZFxuK1x0ICogdG8gbm90IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZpeHVwIGhhbmRsZXIgZnJvbSBLVk1fQVNNX1NBRkUoKS5cbitcdCAqL1xuK1x0R1VFU1RfU1lOQygxMik7XG4gXHRldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4gXHRHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7XG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuQEAgLTI1Myw3ICsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAzLCB2bXhfcGFnZXNfZ3ZhLCBodl9wYWdlc19ndmEsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xuIFx0dmNwdV9zZXRfbXNyKHZjcHUsIEhWX1g2NF9NU1JfVlBfSU5ERVgsIHZjcHUtXHUwMDNlaWQpO1xuIFxuLVx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcbiBcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIE5NSV9WRUNUT1IsIGd1ZXN0X25taV9oYW5kbGVyKTtcbiBcbiBcdHByX2luZm8oXCJSdW5uaW5nIEwxIHdoaWNoIHVzZXMgRVZNQ1MgdG8gcnVuIEwyXFxuXCIpO1xuQEAgLTI4Myw3ICsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0XHQvKiBGb3JjZSBpbW1lZGlhdGUgTDItXHUwMDNlTDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi9cbiBcdFx0aWYgKHN0YWdlID09IDgpIHtcbi1cdFx0XHRwcl9pbmZvKFwiSW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcXG5cIik7XG4rXHRcdFx0cHJfZGVidWcoXCJJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxcblwiKTtcbiBcdFx0XHRpbmplY3Rfbm1pKHZjcHUpO1xuIFx0XHR9XG4gXG5AQCAtMjkzLDkgKzMwMywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgKiBLVk1fU1RBVEVfTkVTVEVEX0VWTUNTIGlzIG5vdCBsb3N0LlxuIFx0XHQgKi9cbiBcdFx0aWYgKHN0YWdlID09IDkpIHtcbi1cdFx0XHRwcl9pbmZvKFwiVHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXFxuXCIpO1xuK1x0XHRcdHByX2RlYnVnKFwiVHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXFxuXCIpO1xuIFx0XHRcdHZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpO1xuIFx0XHR9XG4rXG4rXHRcdGlmIChzdGFnZSA9PSAxMikge1xuK1x0XHRcdHByX2RlYnVnKFwiVHJ5aW5nIGVubGlnaHRlbmVkIFZNTEFVTkNIIHdpdGggYW4gaW52YWxpZCBQVFJcXG5cIik7XG4rXHRcdFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcbitcdFx0fVxuIFx0fVxuIFxuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9rdm1fYnVzbG9ja190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuaW5kZXggMjVhMTgyYmUwMGE5Ny4uMzM3ZDNjMjhiYzZkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuQEAgLTQyLDEzICs0MiwxMyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbi1cdEdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmNcbmluZGV4IGI5NzRjZmIzNDdkNmUuLjFmNGE1ZTQ0YTZlZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXG5AQCAtMzAsMTMgKzMwLDEzIEBAIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4ge1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKDApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuaW5kZXggMjZiNDc0YmYxMzUzNS4uNzk4N2NlNTBjMzgyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcbkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0dm9pZCAqbDJfcmlwO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdGlmICh2bXgtXHUwMDNlZXB0cF9ncGEpXG4gXHRcdGwyX3JpcCA9IGwyX2d1ZXN0X2NvZGVfdGRwX2VuYWJsZWQ7XG5AQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTtcbiBcbiBcdEdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfU1lOQyhURVNUX1NZTkNfTk9fRkFVTFQpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jXG5pbmRleCBlMDhjNmIwNjk3ZTUwLi4xMWZlNGEzMWVkYTBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xuQEAgLTY2LDggKzY2LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4gXHRcdFx0XHRcdCAgIEJJVF9VTEwoSU5URVJDRVBUX0hMVCk7XG4gXHRcdHZtY2ItXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7XG4gXHR9IGVsc2Uge1xuLVx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih0ZXN0X2RhdGEpKTtcbi1cdFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh0ZXN0X2RhdGEpKTtcbitcdFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih0ZXN0X2RhdGEpO1xuK1x0XHRsb2FkX3ZtY3ModGVzdF9kYXRhKTtcbiBcbiBcdFx0cHJlcGFyZV92bWNzKHRlc3RfZGF0YSwgTlVMTCk7XG4gXHRcdEdVRVNUX0FTU0VSVCghdm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSk7XG5AQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuIFx0XHRcdGV4aXRfaW5zbl9sZW4gPSB2bWNiLVx1MDAzZWNvbnRyb2wubmV4dF9yaXAgLSB2bWNiLVx1MDAzZXNhdmUucmlwO1xuIFx0XHRcdEdVRVNUX0FTU0VSVF9FUSh2bWNiLVx1MDAzZXNhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRHVUVTVF9BU1NFUlRfRVEoaSA/IHZtcmVzdW1lKCkgOiB2bWxhdW5jaCgpLCAwKTtcbitcdFx0XHRpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCk7XG4gXHRcdFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdFx0XHRleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooR1VFU1RfUklQKSwgKHU2NClsMl9pbnN0cnVjdGlvbik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKVxuIHtcbiBcdEdVRVNUX0FTU0VSVCghdm13cml0ZShHVUVTVF9SSVAsICh1NjQpbDJfY29kZSkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUX0VRKHZlY3RvciA9PSBTU19WRUNUT1IgPyB2bWxhdW5jaCgpIDogdm1yZXN1bWUoKSwgMCk7XG4rXHR2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7XG4gXG4gXHRpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUilcbiBcdFx0cmV0dXJuO1xuQEAgLTEyNSw5ICsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiBcbi1cdEdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xuaW5kZXggOGMyYmE5Njc0NTU4ZS4uMTAxYzFmZTc5ZWViNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG5AQCAtNDAsMjEgKzQwLDIxIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1aW50cHRyX3Qgc2F2ZV9jcjM7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuIFx0LyogVHJ5IHRvIHJ1biBMMiB3aXRoIGludmFsaWQgQ1IzIGFuZCBtYWtlIHN1cmUgaXQgZmFpbHMgKi9cbiBcdHNhdmVfY3IzID0gdm1yZWFkeihHVUVTVF9DUjMpO1xuIFx0dm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09XG4gXHRcdCAgICAgKEVYSVRfUkVBU09OX0ZBSUxFRF9WTUVOVFJZIHwgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSkpO1xuIFxuIFx0LyogTm93IHJlc3RvcmUgQ1IzIGFuZCBtYWtlIHN1cmUgTDIgcnVucyBzdWNjZXNzZnVsbHkgKi9cbiBcdHZtd3JpdGUoR1VFU1RfQ1IzLCBzYXZlX2NyMyk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXG5pbmRleCAyZTA0NTYzNzkwZmYyLi5kNmM0NDNlM2QxNDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xuQEAgLTU1LDEyICs1NSwxMiBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHU2NCBleHBlY3RlZF9mYXVsdF9ncGEsXG4gXHR1NjQgZXhpdF9xdWFsO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2VudHJ5KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0LyogVmVyaWZ5IHdlIGdvdCBhbiBFUFQgdmlvbGF0aW9uIGV4aXQgKi9cbiBcdF9fR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX0VQVF9WSU9MQVRJT04sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuY1xuaW5kZXggY2I3OWQ3Yjk2MTljMi4uYzYwZGVhODk5NjI0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuY1xuQEAgLTg2LDggKzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxuIFx0XHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhO1xuIFx0XHR1MzIgY29udHJvbDtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHRcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFx0XHRjb250cm9sID0gdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKTtcbkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSlcbiBcdFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTtcbiBcdFx0dm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdFx0dm1sYXVuY2goKTtcbiBcdFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtID0gZGF0YTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcbmluZGV4IDE4Zjc2NTgzNWJmNGMuLmIyZmM3ZjBiNWIzYzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuY1xuQEAgLTEwNSw4ICsxMDUsOCBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHQvKiBjaGVjayB0aGF0IEwxJ3MgZnJlcXVlbmN5IGxvb2tzIGFscmlnaHQgYmVmb3JlIGxhdW5jaGluZyBMMiAqL1xuIFx0Y2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogcHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dm13cml0ZShUU0NfTVVMVElQTElFUl9ISUdILCBUU0NfTVVMVElQTElFUl9MMiBcdTAwM2VcdTAwM2UgMzIpO1xuIFxuIFx0LyogbGF1bmNoIEwyICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0LyogY2hlY2sgdGhhdCBMMSdzIGZyZXF1ZW5jeSBzdGlsbCBsb29rcyBnb29kICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5AQCAtOTgsMTcgKzk4LDE3IEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFx0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4gXG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0d2hpbGUgKDEpIHtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuLVx0XHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0XHR2bXJlc3VtZSgpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbmluZGV4IGQxZWRhZmQ1YWY3NTUuLjM3N2RmMDllNTgyYWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuQEAgLTc4LDggKzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpXG4gXHRcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkge1xuIFx0XHRcdGdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRcdFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdFx0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRcdFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXHRcdFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXG5pbmRleCA0YTEwNTZhNmNiOGRjLi4zOGM5Njg5YWM2MDE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXG5AQCAtNzUsMzIgKzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZClcbiBzdGF0aWMgdm9pZCB2bXhfbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4ge1xuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCB2bXhfbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHRHVUVTVF9TWU5DKDUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0dm1sYXVuY2goKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGUgbGF1bmNoZWQgc3RhdGUgaXMgcHJlc2VydmVkLiAgKi9cbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdEdVRVNUX1NZTkMoNyk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICsgMyk7XG5AQCAtMTA4LDI4ICsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dm13cml0ZShTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLCBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyk7XG4gXHR2bXdyaXRlKFZNQ1NfTElOS19QT0lOVEVSLCB2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4rXHR2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4gXHRHVUVTVF9TWU5DKDgpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiBcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCAweGMwZmZlZSk7XG4gXHRHVUVTVF9TWU5DKDkpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZlZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKTtcbitcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiBcdEdVRVNUX1NZTkMoMTMpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZmZmVlKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1yZXN1bWUoKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fZmxhdHRlbl9fKSkgZ3Vlc3RfY29kZSh2b2lkICphcmcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXG5pbmRleCAwZDgzNTE2ZjRiZDA4Li5iYjMxYTFiYTg5MzJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmNcbkBAIC0yNSwxMiArMjUsMTIgQEAgdm9pZCBsMV9ndWVzdF9jb2RlX3ZteChzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHQvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIGEgdHJpcGxlIGZhdWx0IGV2ZW50IGluamVjdGVkLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XG4gXHRHVUVTVF9ET05FKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jXG5pbmRleCA0NjNmNzNhYTkxNTlhLi5mZTI5Yzg2OWEyMzU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbkBAIC0zOCw4ICszOCw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKVxuIHtcbiBcdHUzMiBjb250cm9sO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC01MywxNCArNTMsMTQgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHVuc2lnbmVkIGxvbmcgaGlnaF9ncGEpXG4gXG4gXHQvKiBUcnkgdG8gbGF1bmNoIEwyIHdpdGggdGhlIG1lbW9yeS1iYWNrZWQgQVBJQy1hY2Nlc3MgYWRkcmVzcy4gKi9cbiBcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0dm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7XG4gXG4gXHQvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovXG4gXHRHVUVTVF9TWU5DKHZtcmVhZHooQVBJQ19BQ0NFU1NfQUREUikpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXG5pbmRleCBmOWI4OGE2ZjYxMTNkLi5lNTc4MjIxZGEyNDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXG5AQCAtMzMsOCArMzMsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1MzIgY29udHJvbDtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG5AQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIFJ1biBMMiB0byBzd2l0Y2ggdG8geDJBUElDIG1vZGUsIHdoaWNoIGluIHR1cm4gd2lsbCB1bmluaGliaXQgQVBJQ3YsXG4gXHQgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICsgdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTikpO1xuIFx0R1VFU1RfQVNTRVJUKHJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFKSBcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCk7XG5AQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIGhhbmRsZXMgdGhlIHgyQVBJQyA9XHUwMDNlIHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyXG4gXHQgKiBpcyBhY3RpdmUuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9BU1NFUlQoIShyZG1zcihNU1JfSUEzMl9BUElDQkFTRSkgXHUwMDI2IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggYzgzNzkxMjRiMzE3Mi4uMzAxNzkzOGZhOTkzNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC00MSw4ICs0MSw4IEBAIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHRHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSB8fFxuIFx0XHQgICAgICEodm1yZWFkeihTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MKSBcdTAwMjYgU0VDT05EQVJZX0VYRUNfVU5SRVNUUklDVEVEX0dVRVNUKSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG5pbmRleCA3NTA3M2VmYTkyNmRhLi5iMzY1MWM1YWIxMzg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbkBAIC0zNyw4ICszNyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfQVNTRVJUKHJkbXNyKE1TUl9HU19CQVNFKSA9PSBMQTU3X0dTX0JBU0UpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHRndWVzdF9jcjQgXHUwMDI2PSB+WDg2X0NSNF9MQTU3O1xuIFx0dm13cml0ZShHVUVTVF9DUjQsIGd1ZXN0X2NyNCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcbiBcdGV4aXRfcmVhc29uID0gdm1yZWFkeihWTV9FWElUX1JFQVNPTik7XG4gXHRHVUVTVF9BU1NFUlQoZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jXG5pbmRleCBlYjgwMjFjMzNjZDQzLi5jZGE1M2RmMzM4ODhlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jXG5AQCAtNzEsOSArNzEsOSBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dTY0IGwxX3RzY19kZWFkbGluZSwgbDJfdHNjX2RlYWRsaW5lO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHQgICAgIShjdHJsX2V4aXRfcmV2LmNsciBcdTAwMjYgVk1fRVhJVF9TQVZFX1ZNWF9QUkVFTVBUSU9OX1RJTUVSKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXG5AQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXG4gXHRsMV92bXhfcHRfc3RhcnQgPSAocmR0c2MoKSBcdTAwM2VcdTAwM2Ugdm14X3B0X3JhdGUpIFx1MDAzY1x1MDAzYyB2bXhfcHRfcmF0ZTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFxuIFx0bDFfdm14X3B0X2ZpbmlzaCA9IHJkdHNjKCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1Njo0Ni4wNzA2NDgxNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA2MDQ0NTM5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIFZNWCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHR3ZWFraW5nIHRoZSBoYW5kbGluZyBvZiBgVk1QVFJMRGAgYW5kIGBWTVBUUlNUYCB3aXRoaW4gS1ZNJ3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSSBzZWUgY2hhbmdlcyB0byBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLCBhbG9uZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc2VsZnRlc3RzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhgIGFuZCBlbHNld2hlcmUuXG5cbkZvY3VzaW5nIG9uIGBoYW5kbGVfdm1wdHJsZGAsIGl0IHNlZW1zIHdlJ3JlIG5vdyBleHBsaWNpdGx5IHByZXZlbnRpbmcgYSBcIm5vcm1hbFwiIGBWTVBUUkxEYCBpZiB0aGUgXCJFbmxpZ2h0ZW5lZFwiIHZlcnNpb24gaGFzIGJlZW4gdXNlZC4gVGhlIGNvZGUgbm93IHRyaWdnZXJzIGEgVUQgZXhjZXB0aW9uIChgVURfVkVDVE9SYCkgaW4gdGhpcyBjYXNlLiAgVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGVzc2VudGlhbGx5LCBlbmZvcmNpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBlcnJvcmluZyBvdXQgaWYgdGhpbmdzIGFyZSBub3QgYXMgYW50aWNpcGF0ZWQuXG5cblRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgYGhhbmRsZV92bXB0cnN0YC4gUHJldmlvdXNseSwgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoKWAgd2FzIHRydWUsIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gMSwgbWVhbmluZyBpdCB3b3VsZCBlZmZlY3RpdmVseSBkbyBub3RoaW5nLiBOb3csIHRob3VnaCwgaXQncyBjaGFuZ2VkLiBXaXRoIHRoZSBhZGRpdGlvbiBvZiBgI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWYCwgdGhlIGNvZGUgbm93IHNldHMgYGN1cnJlbnRfdm1wdHJgIHRvIGB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyYCB3aGVuIGl0IHNlZXMgYW4gZVZNQ1MuICBUaGVuIGl0IGdvZXMgb24gdG8gd3JpdGUgKnRoYXQqIHZhbHVlIHRvIGd1ZXN0IG1lbW9yeS4gIFRoaXMgYmVoYXZpb3IgbWFrZXMgc2Vuc2UgaWYgeW91J3JlIHdvcmtpbmcgd2l0aCBIeXBlci1WIFRMRlMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSG9sZCBvbiwgaXMgdGhpcyBnb2luZyB0byBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/XCIgIFdlJ3JlIGRlYWxpbmcgd2l0aCBgY3VycmVudF92bXB0cmAsIGEgYGdwYV90YCAoc28sIGEgYHU2NGApLiAgSXQncyBhc3NpZ25lZCBlaXRoZXIgYHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHJgIG9yIGB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHJgLiBCb3RoIG9mIHRoZXNlIGFyZSB3aXRoaW4gdGhlIGBuZXN0ZWRfdm14YCBzdHJ1Y3QuIEJ1dCBhZnRlciBhIHNlY29uZCBsb29rLCBJIGNhbiBzZWUgdGhhdCBgaHZfZXZtY3Nfdm1wdHJgIGlzIGluaXRpYWxpemVkIHdoZW4gZVZNQ1MgaXMgbG9hZGVkIGFuZCBgY3VycmVudF92bXB0cmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBgVk1QVFJMRGAgZXhlY3V0ZXMuIFdlJ3JlIG5vdCByZWFkaW5nIGZyb20gYW4gdW5pbml0aWFsaXplZCBmaWVsZC4gVGhlIHBhdGNoIGlzIHNpbXBseSBlbnN1cmluZyB0aGF0IGl0IHdyaXRlcyBhIGtub3duIEdQQSBmb3IgZVZNQ1MgdXNhZ2UuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgd3JpdGUgdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAgd2l0aGluIGBoYW5kbGVfdm1wdHJzdGAuIFRoZSBjb2RlIGdyYWJzIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgKGBndmFgKSBhbmQgd3JpdGVzIHRoZSBmdWxseSBpbml0aWFsaXplZCBgY3VycmVudF92bXB0cmAgdG8gaXQuIEknbSBzYXRpc2ZpZWQgdGhhdCBgY3VycmVudF92bXB0cmAgaXMgYW4gOC1ieXRlIHZhbHVlIGFuZCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiwgc28gbm8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBoZXJlLlxuXG5TbywgYWZ0ZXIgdGhpcyBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIHJpc2tzLiBJdCdzIHNpbXBseSBjaGFuZ2luZyB0aGUgKnZhbHVlKiB3cml0dGVuIGluIGEgc3BlY2lmaWMgZVZNQ1Mgc2NlbmFyaW8uIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIzNiwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTc6MDYuNjc1MTA1MDQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGluIEtWTSdzIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZS4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igd2hlbiBlVk1DUyBpcyB1c2VkOiBpbnN0ZWFkIG9mIHJldHVybmluZyAxIChkb2luZyBub3RoaW5nKSwgaXQgbm93IHNldHMgdGhlIGxvY2FsIHZhcmlhYmxlIGBjdXJyZW50X3ZtcHRyYCB0byBgaHZfZXZtY3Nfdm1wdHJgIGFuZCB3cml0ZXMgaXQgdG8gZ3Vlc3QgbWVtb3J5LiBgY3VycmVudF92bXB0cmAgaXMgYSBgZ3BhX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGd1ZXN0IHZpYSBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gVGhlcmUgYXJlIG5vIHN0cnVjdHMgd2l0aCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGludm9sdmVkLiBUaGUgcmVzdCBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gS1ZNIHNlbGZ0ZXN0cy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgaW4gS1ZNJ3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLiBJbiBgaGFuZGxlX3ZtcHRyc3RgLCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQ6IGluc3RlYWQgb2YgcmV0dXJuaW5nIDEgKGRvaW5nIG5vdGhpbmcpLCBpdCBub3cgc2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAgYW5kIHdyaXRlcyBpdCB0byBndWVzdCBtZW1vcnkuIGBjdXJyZW50X3ZtcHRyYCBpcyBhIGBncGFfdGAgKGEgNjQtYml0IGludGVnZXIpLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byB0aGUgZ3Vlc3QgdmlhIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGVyZSBhcmUgbm8gc3RydWN0cyB3aXRoIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgaW52b2x2ZWQuIFRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBLVk0gc2VsZnRlc3RzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmwqkm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 23:53:29 +0000 UTC FinishedAt: 2026-08-26 23:57:08 +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": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "05e0fdc0-95d2-4628-8e51-69eba92968cf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "handle_vmptrld", "handle_vmptrst" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDssCiAgICAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0mIzM5O3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLiBJbiBgaGFuZGxlX3ZtcHRyc3RgLCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQ6IGluc3RlYWQgb2YgcmV0dXJuaW5nIDEgKGRvaW5nIG5vdGhpbmcpLCBpdCBub3cgc2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAgYW5kIHdyaXRlcyBpdCB0byBndWVzdCBtZW1vcnkuIGBjdXJyZW50X3ZtcHRyYCBpcyBhIGBncGFfdGAgKGEgNjQtYml0IGludGVnZXIpLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byB0aGUgZ3Vlc3QgdmlhIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGVyZSBhcmUgbm8gc3RydWN0cyB3aXRoIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgaW52b2x2ZWQuIFRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBLVk0gc2VsZnRlc3RzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiBuZXN0ZWQgVk1YIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEl0IGNoYW5nZXMgVk1QVFJMRCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24gYW5kIFZNUFRSU1QgdG8gcmV0dXJuIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAxLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5OWMyZWJiMDQxZDI2OTgwMTgzYWFlMTM0NjM1Njg2YmIwNGNiMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzo1NToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODk3LDYgJiM0Mzs1ODk3LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuJiM0MztcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG4mIzQzO1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuJiM0MztcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCBcdTAwMjZ2bXB0ciwgXHUwMDI2cikpXG4gXHRcdHJldHVybiByO1xuIFxuQEAgLTU5MDYsMTAgJiM0Mzs1OTEyLDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodm1wdHIgPT0gdm14LVx1MDAzZW5lc3RlZC52bXhvbl9wdHIpXG4gXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX1ZNUFRSTERfVk1YT05fUE9JTlRFUik7XG4gXG4tXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuLVx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHRpZiAodm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7XG4gXHRcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcdTAwMjZ2bXgtXHUwMDNlbmVzdGVkLnZtY3MxMl9jYWNoZTtcbiBcdFx0c3RydWN0IHZtY3NfaGRyIGhkcjtcbkBAIC01OTYyLDcgJiM0Mzs1OTY0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiYjNDM7XHRncGFfdCBjdXJyZW50X3ZtcHRyO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbiBcdGd2YV90IGd2YTtcbiBcdGludCByO1xuQEAgLTU5NzAsOCAmIzQzOzU5NzIsMTYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSlcbi1cdFx0cmV0dXJuIDE7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIeXBlci1WIFRMRlMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgYmVoYXZpb3Igb2YgVk1QVFJTVCB3aGVuIGVWTUNTIGlzIHVzZWRcbiYjNDM7XHQgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuXG4mIzQzO1x0ICovXG4mIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuJiM0MztcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHRvX3ZteCh2Y3B1KSkpXG4mIzQzO1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbiYjNDM7XHRlbHNlXG4mIzQzOyNlbmRpZlxuJiM0MztcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuaW5kZXggODJhOGVhNmI2NjFmMC4uYzViOWQyNmY2Y2RiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuQEAgLTI2NSwxNCAmIzQzOzI2NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2FkX2V2bWNzKHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1wdHJzdCh1NjQgKnZhbHVlKVxuLXtcbi1cdCp2YWx1ZSA9IGN1cnJlbnRfdnBfYXNzaXN0LVx1MDAzZWN1cnJlbnRfbmVzdGVkX3ZtY3MgXHUwMDI2XG4tXHRcdH5IVl9YNjRfTVNSX1ZQX0FTU0lTVF9QQUdFX0VOQUJMRTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlYWQodTY0IGVuY29kaW5nLCB1NjQgKnZhbHVlKVxuIHtcbiBcdHN3aXRjaCAoZW5jb2RpbmcpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IDZlNmY3MDAzNTUwOGEuLjI4MmI4YWFmZjc5OTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTEzMTgsNyAmIzQzOzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTtcbiBcdFwmIzM0O2xlYSAxZiglJXJpcCksICUlcjEwXFxuXFx0XCYjMzQ7XHRcdFx0XHRcXFxuIFx0XCYjMzQ7bGVhIDJmKCUlcmlwKSwgJSVyMTFcXG5cXHRcJiMzNDtcdFx0XHRcdFxcXG4gXHRmZXAgXCYjMzQ7MTogXCYjMzQ7IGluc24gXCYjMzQ7XFxuXFx0XCYjMzQ7XHRcdFx0XHRcdFxcXG4tXHRcJiMzNDt4b3IgJSVyOSwgJSVyOVxcblxcdFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdFwmIzM0O21vdiAkMCwgJSVyOWRcXG5cXHRcJiMzNDtcdFx0XHRcdFx0XFxcbiBcdFwmIzM0OzI6XFxuXFx0XCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiBcdFwmIzM0O21vdiAgJSVyOWIsICVbdmVjdG9yXVxcblxcdFwmIzM0O1x0XHRcdFx0XFxcbiBcdFwmIzM0O21vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cXG5cXHRcJiMzNDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDA0ZjVlMzRkZWEzYWUuLmNkODJhNmJlNjk2M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTMwOSwxMjYgJiM0MzszMDksOTEgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFxuICNpbmNsdWRlIFwmIzM0O2V2bWNzLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCYjMzQ7dm14b24gJVtwYV07IHNldG5hICVbcmV0XVwmIzM0O1xuLVx0XHQ6IFtyZXRdXCYjMzQ7PXJtXCYjMzQ7KHJldClcbi1cdFx0OiBbcGFdXCYjMzQ7bVwmIzM0OyhwaHlzKVxuLVx0XHQ6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7I2RlZmluZSBHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIF9fciwgX19wYSlcdFx0XFxcbiYjNDM7XHRfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSBcJiMzNDtbMHglbHhdIGhpdCAlc1wmIzM0OyxcdFxcXG4mIzQzO1x0XHQgICAgICAgX19wYSwgX19yIFx1MDAzYyAwID8gXCYjMzQ7Vk0tRmFpbFwmIzM0OyA6IGV4X3N0cihfX3IpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKGluc24pXHRcdFx0XHRcdFxcXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHU2NCB2bWNzX3BhKVx0XHRcdFx0XHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1NjQgZXJyb3JfY29kZTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dTggdmVjdG9yO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1OCBmYWlsZWQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGFzbSB2b2xhdGlsZShLVk1fQVNNX1NBRkUoX19zdHJpbmdpZnkoaW5zbikgXCYjMzQ7ICVbcGFdXCYjMzQ7KVx0XHRcXFxuJiM0MztcdFx0ICAgICBcJiMzNDtcXG5cXHRzZXRuYSAlW2ZhaWxlZF1cJiMzNDtcdFx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogS1ZNX0FTTV9TQUZFX09VVFBVVFModmVjdG9yLCBlcnJvcl9jb2RlKSxcdFxcXG4mIzQzO1x0XHQgICAgICAgW2ZhaWxlZF1cJiMzNDs9cW1cJiMzNDsoZmFpbGVkKVx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgOiBbcGFdXCYjMzQ7bVwmIzM0Oyh2bWNzX3BhKVx0XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDssIEtWTV9BU01fU0FGRV9DTE9CQkVSUyk7XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cmV0dXJuIHZlY3RvciA/IHZlY3RvciA6IGZhaWxlZCA/IC1FSU5WQUwgOiAwO1x0XHRcdFxcXG4mIzQzO31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih1NjQgdm1jc19wYSlcdFx0XHRcdFx0XFxcbiYjNDM7e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpO1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdEdVRVNUX0FTU0VSVF9WTVhfSU5TTl9TVUNDRUVERUQoaW5zbiwgcmV0LCB2bWNzX3BhKTtcdFx0XFxcbiB9XG4gXG4mIzQzO0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm14b24pXG4mIzQzO0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm1wdHJsZClcbiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bWNsZWFyKVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14b2ZmKHZvaWQpXG4ge1xuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7dm14b2ZmXCYjMzQ7KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgdm1jbGVhcih1NjQgdm1jc19wYSlcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCYjMzQ7dm1jbGVhciAlW3BhXTsgc2V0bmEgJVtyZXRdXCYjMzQ7XG4tXHRcdDogW3JldF1cJiMzNDs9cm1cJiMzNDsocmV0KVxuLVx0XHQ6IFtwYV1cJiMzNDttXCYjMzQ7KHZtY3NfcGEpXG4tXHRcdDogXCYjMzQ7Y2NcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cJiMzNDtcbi1cdFx0OiBbcmV0XVwmIzM0Oz1ybVwmIzM0OyhyZXQpXG4tXHRcdDogW3BhXVwmIzM0O21cJiMzNDsodm1jc19wYSlcbi1cdFx0OiBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgdm1wdHJzdCh2b2lkKVxuIHtcbi1cdHU2NCB0bXA7XG4mIzQzO1x0dTY0IHZhbHVlID0gMDtcbiBcdHU4IHJldDtcbiBcbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiBldm1jc192bXB0cnN0KHZhbHVlKTtcbi1cbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3ZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwmIzM0O1xuLVx0XHQ6IFt2YWx1ZV1cJiMzNDs9bVwmIzM0Oyh0bXApLCBbcmV0XVwmIzM0Oz1ybVwmIzM0OyhyZXQpXG4mIzQzO1x0XHQ6IFt2YWx1ZV1cJiMzNDs9bVwmIzM0Oyh2YWx1ZSksIFtyZXRdXCYjMzQ7PXJtXCYjMzQ7KHJldClcbiBcdFx0OiA6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuIFxuLVx0KnZhbHVlID0gdG1wO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBBIHdyYXBwZXIgYXJvdW5kIHZtcHRyc3QgdGhhdCBpZ25vcmVzIGVycm9ycyBhbmQgcmV0dXJucyB6ZXJvIGlmIHRoZVxuLSAqIHZtcHRyc3QgaW5zdHJ1Y3Rpb24gZmFpbHMuXG4tICovXG4tc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbi17XG4tXHR1NjQgdmFsdWUgPSAwO1xuLVx0dm1wdHJzdChcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0X19HVUVTVF9BU1NFUlQoIXJldCwgXCYjMzQ7dm1wdHJzdCBmYWlsZWRcJiMzNDspO1xuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IDtcJiMzNDtcbi1cdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4tXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcbi1cdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4tXHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGVuYWJsZV9ldm1jcylcbi1cdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wmIzM0O1xuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCYjMzQ7dm1yZXN1bWU7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuLVx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUCksXG4tXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbi1cdHJldHVybiByZXQ7XG4mIzQzOyNkZWZpbmUgQlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlMoaW5zbilcdFx0XHRcdFxcXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHZvaWQpXHRcdFx0XHRcdFxcXG4mIzQzO3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCByZXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGlmIChlbmFibGVfZXZtY3MpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHJldHVybiBldm1jc18jI2luc24oKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1x0XHRcXFxuJiM0MztcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1x0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgX19zdHJpbmdpZnkoaW5zbilcJiMzNDs7XCYjMzQ7XHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIFwmIzM0OzE6IDtcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JTUCksXHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1x0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcdFx0XHRcdFxcXG4mIzQzO1x0cmV0dXJuIHJldDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih2b2lkKVx0XHRcdFx0XHRcdFxcXG4mIzQzO3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCByZXQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHJldCA9IF9fIyNpbnNuKCk7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX0dVRVNUX0FTU0VSVCghcmV0LCBfX3N0cmluZ2lmeShpbnNuKSBcJiMzNDsgaGl0IFZNLUZhaWxcJiMzNDspO1x0XHRcXFxuIH1cbiYjNDM7QlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlModm1sYXVuY2gpXG4mIzQzO0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtcmVzdW1lKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNhbGwodm9pZClcbiB7XG5AQCAtNTUwLDkgJiM0Mzs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3Ige1xuIH07XG4gXG4gc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpO1xuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiB2b2lkIHByZXBhcmVfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHZvaWQgKmd1ZXN0X3JpcCk7XG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiYjNDM7dm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiBcbiBib29sIGVwdF8xZ19wYWdlc19zdXBwb3J0ZWQodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuaW5kZXggZTE5ZThiNWEwOWM1YS4uNmExODE1ZmI5N2U5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuQEAgLTMzLDE0ICYjNDM7MzMsMTQgQEAgX19hc21fXyhcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHU2NCB2Y3B1X2lkKVxuIHtcbiBcdEdVRVNUX0FTU0VSVCh2bXgtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14KTtcbiBcdEdVRVNUX0FTU0VSVChlcHRfMWdfcGFnZXNfc3VwcG9ydGVkKCkpO1xuIFxuIFx0Kih1NjQgKil2bXgtXHUwMDNlc3RhY2sgPSB2Y3B1X2lkO1xuIFx0cHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpXG4gXHRyZXR1cm4gdm14O1xuIH1cbiBcbi1ib29sIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxuJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbiBcdHU2NCBmZWF0dXJlX2NvbnRyb2w7XG4gXHR1NjQgcmVxdWlyZWQ7XG5AQCAtMTYzLDI4ICYjNDM7MTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXG4gXHQvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm14b24pID0gdm1jc19yZXZpc2lvbigpO1xuLVx0aWYgKHZteG9uKHZteC1cdTAwM2V2bXhvbl9ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR2bXhvbih2bXgtXHUwMDNldm14b25fZ3BhKTtcbiB9XG4gXG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KVxuJiM0Mzt2b2lkIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuIFx0LyogTG9hZCBhIFZNQ1MuICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm1jcykgPSB2bWNzX3JldmlzaW9uKCk7XG4tXHRpZiAodm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0dm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpO1xuIFxuLVx0aWYgKHZtcHRybGQodm14LVx1MDAzZXZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHZtcHRybGQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbiBcbiBcdC8qIFNldHVwIHNoYWRvdyBWTUNTLCBkbyBub3QgbG9hZCBpdCB5ZXQuICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNlc2hhZG93X3ZtY3MpID0gdm1jc19yZXZpc2lvbigpIHwgMHg4MDAwMDAwMHVsO1xuLVx0aWYgKHZtY2xlYXIodm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdHZtY2xlYXIodm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGVwdF92cGlkX2NhcF9zdXBwb3J0ZWQodTY0IG1hc2spXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmNcbmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG5AQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7XG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiBcdFx0dm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8IENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqbmVzdGVkX3Rlc3RfZGF0YSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IGFhN2YzYjQwNWZkMzIuLmEwNmYzN2UwYmQwNjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTU1LDExICYjNDM7NTUsMTEgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsXG4gXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdCk7XG4gXHRldm1jc19lbmFibGUoKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcbiBcdC8qIEwyIGV4aXRzIHZpYSB2bWNhbGwgaWYgdGVzdCBmYWlscyAqL1xuIFx0c3luY193aXRoX2hvc3QoMik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbmluZGV4IDYzZWExNTMzZTRlYWQuLmI3YzJhMjU0MjkxZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG5AQCAtMjMsNyAmIzQzOzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7XG4gc3RhdGljIHZvaWQgZ3Vlc3RfdWRfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiB7XG4gXHR1ZF9jb3VudCYjNDM7JiM0Mzs7XG4tXHRyZWdzLVx1MDAzZXJpcCAmIzQzOz0gMzsgLyogVk1MQVVOQ0ggKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFZNTEFVTkNIIGluc24gY2FuJiMzOTt0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0XG4mIzQzO1x0ICogbHVja2lseSB0aGUgaW5zdHJ1Y3Rpb24gaXMgYWx3YXlzIHRocmVlIGJ5dGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZ3MtXHUwMDNlcmlwICYjNDM7PSAzO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbkBAIC04OSwyMCAmIzQzOzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdCk7XG4gXHRldm1jc19lbmFibGUoKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuJiM0MztcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IC0xKTtcbiBcbiBcdEdVRVNUX1NZTkMoNCk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbiBcdEdVRVNUX1NZTkMoNSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gLTF1O1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047XG4gXHRHVUVTVF9TWU5DKDYpO1xuIFxuQEAgLTExNywxNyAmIzQzOzEyMCwxNyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0Y3VycmVudF92cF9hc3Npc3QtXHUwMDNlbmVzdGVkX2NvbnRyb2wuZmVhdHVyZXMuZGlyZWN0aHlwZXJjYWxsID0gMTtcbiBcdCoodTMyICopKGh2X3BhZ2VzLVx1MDAzZXBhcnRpdGlvbl9hc3Npc3QpID0gMDtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSk7XG4gXHRHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmKSwgTk1JX1ZFQ1RPUik7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHQvKlxuIFx0ICogTk1JIGZvcmNlcyBMMi1cdTAwM2VMMSBleGl0LCByZXN1bWluZyBMMiBhbmQgaG9wZSB0aGF0IEVWTUNTIGlzXG4gXHQgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmdcbiBcdCAqIG9mIGwyX2d1ZXN0X2NvZGUoKS4gR1VFU1RfU1lOQyg5KSBjaGVja3MgdGhhdC5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFxuIFx0R1VFU1RfU1lOQygxMCk7XG4gXG5AQCAtMTM4LDEzICYjNDM7MTQxLDEzIEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHR2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfFxuIFx0XHRDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTtcbiBcdF9fc2V0X2JpdChNU1JfRlNfQkFTRSBcdTAwMjYgMHgxZmZmLCB2bXhfcGFnZXMtXHUwMDNlbXNyICYjNDM7IDB4NDAwKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCAmIzQzOz0gMjsgLyogcmRtc3IgKi9cbiBcbiBcdC8qIEVuYWJsZSBlbmxpZ2h0ZW5lZCBNU1IgYml0bWFwICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2VubGlnaHRlbm1lbnRzX2NvbnRyb2wubXNyX2JpdG1hcCA9IDE7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovXG4gXG5AQCAtMTUyLDE0ICYjNDM7MTU1LDE0IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRfX3NldF9iaXQoTVNSX0dTX0JBU0UgXHUwMDI2IDB4MWZmZiwgdm14X3BhZ2VzLVx1MDAzZW1zciAmIzQzOyAweDQwMCk7XG4gXHQvKiBNYWtlIHN1cmUgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVAgaXMgc2V0ICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdC8qIE1ha2Ugc3VyZSB3ZSBkb24mIzM5O3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi9cbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgJiM0Mzs9IDM7IC8qIHZtY2FsbCAqL1xuIFxuIFx0LyogTm93IHRlbGwgS1ZNIHdlJiMzOTt2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqL1xuIFxuQEAgLTE2NywyMSAmIzQzOzE3MCwyOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0ICogTDIgVExCIGZsdXNoIHRlc3QuIEZpcnN0IFZNQ0FMTCBzaG91bGQgYmUgaGFuZGxlZCBkaXJlY3RseSBieSBMMCxcbiBcdCAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLlxuIFx0ICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovXG4gXHQvKiBFbmFibGUgc3ludGhldGljIHZtZXhpdCAqL1xuIFx0Kih1MzIgKikoaHZfcGFnZXMtXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAxO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX1NZTkMoMTEpO1xuIFxuLVx0LyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovXG4mIzQzO1x0LyogVk1QVFJMRCBpbnN0cnVjdGlvbiBjYXVzZXMgI1VEIGFmdGVyIGVubGlnaHRlbmVkIFZNTEFVTkNIICovXG4mIzQzO1x0R1VFU1RfQVNTRVJUKF9fdm1wdHJsZChodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEuIEdVRVNUX1NZTkMoMTIpIHNpZ25hbHNcbiYjNDM7XHQgKiB0aGUgaG9zdCB0byBlbmFibGUgZ3Vlc3RfdWRfaGFuZGxlcigpIHdoaWNoIGNhbm5vdCBiZSBlbmFibGVkIGJlZm9yZWhhbmRcbiYjNDM7XHQgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdEdVRVNUX1NZTkMoMTIpO1xuIFx0ZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5AQCAtMjUzLDcgJiM0MzsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAzLCB2bXhfcGFnZXNfZ3ZhLCBodl9wYWdlc19ndmEsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xuIFx0dmNwdV9zZXRfbXNyKHZjcHUsIEhWX1g2NF9NU1JfVlBfSU5ERVgsIHZjcHUtXHUwMDNlaWQpO1xuIFxuLVx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcbiBcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIE5NSV9WRUNUT1IsIGd1ZXN0X25taV9oYW5kbGVyKTtcbiBcbiBcdHByX2luZm8oXCYjMzQ7UnVubmluZyBMMSB3aGljaCB1c2VzIEVWTUNTIHRvIHJ1biBMMlxcblwmIzM0Oyk7XG5AQCAtMjgzLDcgJiM0MzsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0XHQvKiBGb3JjZSBpbW1lZGlhdGUgTDItXHUwMDNlTDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi9cbiBcdFx0aWYgKHN0YWdlID09IDgpIHtcbi1cdFx0XHRwcl9pbmZvKFwmIzM0O0luamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7SW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcXG5cJiMzNDspO1xuIFx0XHRcdGluamVjdF9ubWkodmNwdSk7XG4gXHRcdH1cbiBcbkBAIC0yOTMsOSAmIzQzOzMwMywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgKiBLVk1fU1RBVEVfTkVTVEVEX0VWTUNTIGlzIG5vdCBsb3N0LlxuIFx0XHQgKi9cbiBcdFx0aWYgKHN0YWdlID09IDkpIHtcbi1cdFx0XHRwcl9pbmZvKFwmIzM0O1RyeWluZyBleHRyYSBLVk1fR0VUX05FU1RFRF9TVEFURS9LVk1fU0VUX05FU1RFRF9TVEFURSBjeWNsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHByX2RlYnVnKFwmIzM0O1RyeWluZyBleHRyYSBLVk1fR0VUX05FU1RFRF9TVEFURS9LVk1fU0VUX05FU1RFRF9TVEFURSBjeWNsZVxcblwmIzM0Oyk7XG4gXHRcdFx0dmNwdSA9IHNhdmVfcmVzdG9yZV92bSh2bSwgdmNwdSk7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhZ2UgPT0gMTIpIHtcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7VHJ5aW5nIGVubGlnaHRlbmVkIFZNTEFVTkNIIHdpdGggYW4gaW52YWxpZCBQVFJcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9rdm1fYnVzbG9ja190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuaW5kZXggMjVhMTgyYmUwMGE5Ny4uMzM3ZDNjMjhiYzZkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuQEAgLTQyLDEzICYjNDM7NDIsMTMgQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7XG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXG5pbmRleCBiOTc0Y2ZiMzQ3ZDZlLi4xZjRhNWU0NGE2ZWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xuQEAgLTMwLDEzICYjNDM7MzAsMTMgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4mIzQzO1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQoMCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCAyNmI0NzRiZjEzNTM1Li43OTg3Y2U1MGMzODI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuQEAgLTkzLDggJiM0Mzs5Myw4IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0dm9pZCAqbDJfcmlwO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4mIzQzO1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0aWYgKHZteC1cdTAwM2VlcHRwX2dwYSlcbiBcdFx0bDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDtcbkBAIC0xMDQsNyAmIzQzOzEwNCw3IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTtcbiBcbiBcdEdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xuaW5kZXggZTA4YzZiMDY5N2U1MC4uMTFmZTRhMzFlZGEwYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcbkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcbiBcdFx0XHRcdFx0ICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTtcbiBcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zID0gMDtcbiBcdH0gZWxzZSB7XG4tXHRcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSkpO1xuLVx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHRlc3RfZGF0YSkpO1xuJiM0MztcdFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih0ZXN0X2RhdGEpO1xuJiM0MztcdFx0bG9hZF92bWNzKHRlc3RfZGF0YSk7XG4gXG4gXHRcdHByZXBhcmVfdm1jcyh0ZXN0X2RhdGEsIE5VTEwpO1xuIFx0XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCkpO1xuQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4gXHRcdFx0ZXhpdF9pbnNuX2xlbiA9IHZtY2ItXHUwMDNlY29udHJvbC5uZXh0X3JpcCAtIHZtY2ItXHUwMDNlc2F2ZS5yaXA7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtY2ItXHUwMDNlc2F2ZS5yaXAsICh1NjQpbDJfaW5zdHJ1Y3Rpb24pO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdEdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApO1xuJiM0MztcdFx0XHRpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCk7XG4gXHRcdFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdFx0XHRleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooR1VFU1RfUklQKSwgKHU2NClsMl9pbnN0cnVjdGlvbik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSlcbiB7XG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApO1xuJiM0MztcdHZlY3RvciA9PSBTU19WRUNUT1IgPyB2bWxhdW5jaCgpIDogdm1yZXN1bWUoKTtcbiBcbiBcdGlmICh2ZWN0b3IgPT0gRkFLRV9UUklQTEVfRkFVTFRfVkVDVE9SKVxuIFx0XHRyZXR1cm47XG5AQCAtMTI1LDkgJiM0MzsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4gXG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG5pbmRleCA4YzJiYTk2NzQ1NThlLi4xMDFjMWZlNzllZWI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmNcbkBAIC00MCwyMSAmIzQzOzQwLDIxIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1aW50cHRyX3Qgc2F2ZV9jcjM7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4mIzQzO1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuJiM0MztcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHQvKiBUcnkgdG8gcnVuIEwyIHdpdGggaW52YWxpZCBDUjMgYW5kIG1ha2Ugc3VyZSBpdCBmYWlscyAqL1xuIFx0c2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7XG4gXHR2bXdyaXRlKEdVRVNUX0NSMywgLTF1bGwpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09XG4gXHRcdCAgICAgKEVYSVRfUkVBU09OX0ZBSUxFRF9WTUVOVFJZIHwgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSkpO1xuIFxuIFx0LyogTm93IHJlc3RvcmUgQ1IzIGFuZCBtYWtlIHN1cmUgTDIgcnVucyBzdWNjZXNzZnVsbHkgKi9cbiBcdHZtd3JpdGUoR1VFU1RfQ1IzLCBzYXZlX2NyMyk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xuaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmNcbkBAIC01NSwxMiAmIzQzOzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSxcbiBcdHU2NCBleGl0X3F1YWw7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4mIzQzO1x0bG9hZF92bWNzKHZteCk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9lbnRyeSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXG4gXHQvKiBWZXJpZnkgd2UgZ290IGFuIEVQVCB2aW9sYXRpb24gZXhpdCAqL1xuIFx0X19HVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTixcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5pbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5AQCAtODYsOCAmIzQzOzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxuIFx0XHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhO1xuIFx0XHR1MzIgY29udHJvbDtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4mIzQzO1x0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdGNvbnRyb2wgPSB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpO1xuQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSlcbiBcdFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTtcbiBcdFx0dm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHRcdHZtbGF1bmNoKCk7XG4gXHRcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSA9IGRhdGE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXG5pbmRleCAxOGY3NjU4MzViZjRjLi5iMmZjN2YwYjViM2M4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcbkBAIC0xMDUsOCAmIzQzOzEwNSw4IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdC8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IGxvb2tzIGFscmlnaHQgYmVmb3JlIGxhdW5jaGluZyBMMiAqL1xuIFx0Y2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dm13cml0ZShUU0NfTVVMVElQTElFUl9ISUdILCBUU0NfTVVMVElQTElFUl9MMiBcdTAwM2VcdTAwM2UgMzIpO1xuIFxuIFx0LyogbGF1bmNoIEwyICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdC8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xuaW5kZXggNTA3MzkxYWIyYzkzMC4uZjg4NDI3ZTkyNWZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbkBAIC05OCwxNyAmIzQzOzk4LDE3IEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4mIzQzO1x0bG9hZF92bWNzKHZteCk7XG4gXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiBcbiBcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuIFx0d2hpbGUgKDEpIHtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuLVx0XHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdFx0dm1yZXN1bWUoKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBkMWVkYWZkNWFmNzU1Li4zNzdkZjA5ZTU4MmFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC03OCw4ICYjNDM7NzgsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKmFyZylcbiBcdFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKSB7XG4gXHRcdFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdFx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuJiM0MztcdFx0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0XHRcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFx0XHRcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuY1xuaW5kZXggNGExMDU2YTZjYjhkYy4uMzhjOTY4OWFjNjAxNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuY1xuQEAgLTc1LDMyICYjNDM7NzUsMzIgQEAgdm9pZCB2bXhfbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRHVUVTVF9TWU5DKDQpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCB2bXhfbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHRHVUVTVF9TWU5DKDUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuJiM0MztcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuJiM0MztcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGUgbGF1bmNoZWQgc3RhdGUgaXMgcHJlc2VydmVkLiAgKi9cbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfU1lOQyg3KTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICYjNDM7IDMpO1xuQEAgLTEwOCwyOCAmIzQzOzEwOCwyOCBAQCBzdGF0aWMgdm9pZCB2bXhfbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTKTtcbiBcdHZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFx0R1VFU1RfU1lOQyg4KTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiBcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCAweGMwZmZlZSk7XG4gXHRHVUVTVF9TWU5DKDkpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZlZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiYjNDM7XHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSkpO1xuJiM0MztcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIFx0R1VFU1RfU1lOQygxMyk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2ZsYXR0ZW5fXykpIGd1ZXN0X2NvZGUodm9pZCAqYXJnKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xuaW5kZXggMGQ4MzUxNmY0YmQwOC4uYmIzMWExYmE4OTMyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXG5AQCAtMjUsMTIgJiM0MzsyNSwxMiBAQCB2b2lkIGwxX2d1ZXN0X2NvZGVfdm14KHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4mIzQzO1x0bG9hZF92bWNzKHZteCk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgYSB0cmlwbGUgZmF1bHQgZXZlbnQgaW5qZWN0ZWQuICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxUKTtcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbmluZGV4IDQ2M2Y3M2FhOTE1OWEuLmZlMjljODY5YTIzNTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuY1xuQEAgLTM4LDggJiM0MzszOCw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKVxuIHtcbiBcdHUzMiBjb250cm9sO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTUzLDE0ICYjNDM7NTMsMTQgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHVuc2lnbmVkIGxvbmcgaGlnaF9ncGEpXG4gXG4gXHQvKiBUcnkgdG8gbGF1bmNoIEwyIHdpdGggdGhlIG1lbW9yeS1iYWNrZWQgQVBJQy1hY2Nlc3MgYWRkcmVzcy4gKi9cbiBcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdHZtd3JpdGUoQVBJQ19BQ0NFU1NfQUREUiwgaGlnaF9ncGEpO1xuIFxuIFx0LyogVHJ5IHRvIHJlc3VtZSBMMiB3aXRoIHRoZSB1bmJhY2tlZCBBUElDLWFjY2VzcyBhZGRyZXNzLiAqL1xuIFx0R1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbmluZGV4IGY5Yjg4YTZmNjExM2QuLmU1NzgyMjFkYTI0N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbkBAIC0zMyw4ICYjNDM7MzMsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1MzIgY29udHJvbDtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC02Miw3ICYjNDM7NjIsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIFJ1biBMMiB0byBzd2l0Y2ggdG8geDJBUElDIG1vZGUsIHdoaWNoIGluIHR1cm4gd2lsbCB1bmluaGliaXQgQVBJQ3YsXG4gXHQgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0dm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFx1MDAyNiBNU1JfSUEzMl9BUElDQkFTRV9FWFREKTtcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIGhhbmRsZXMgdGhlIHgyQVBJQyA9XHUwMDNlIHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyXG4gXHQgKiBpcyBhY3RpdmUuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4mIzQzO1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFx1MDAyNiBNU1JfSUEzMl9BUElDQkFTRV9FWFREKSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbmluZGV4IGM4Mzc5MTI0YjMxNzIuLjMwMTc5MzhmYTk5MzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG5AQCAtNDEsOCAmIzQzOzQxLDggQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4mIzQzO1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0FTU0VSVCghKHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgXHUwMDI2IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8XG4gXHRcdCAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIFx1MDAyNiBTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG5pbmRleCA3NTA3M2VmYTkyNmRhLi5iMzY1MWM1YWIxMzg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbkBAIC0zNyw4ICYjNDM7MzcsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTtcbiBcbiBcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0Z3Vlc3RfY3I0IFx1MDAyNj0gflg4Nl9DUjRfTEE1NztcbiBcdHZtd3JpdGUoR1VFU1RfQ1I0LCBndWVzdF9jcjQpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbiYjNDM7XHR2bWxhdW5jaCgpO1xuIFxuIFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdEdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbmluZGV4IGViODAyMWMzM2NkNDMuLmNkYTUzZGYzMzg4OGUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbkBAIC03MSw5ICYjNDM7NzEsOSBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dTY0IGwxX3RzY19kZWFkbGluZSwgbDJfdHNjX2RlYWRsaW5lO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuJiM0MztcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiYjNDM7XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0ICAgICEoY3RybF9leGl0X3Jldi5jbHIgXHUwMDI2IFZNX0VYSVRfU0FWRV9WTVhfUFJFRU1QVElPTl9USU1FUikpXG4gXHRcdHJldHVybjtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4mIzQzO1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0dm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXG5AQCAtMTEwLDcgJiM0MzsxMTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFxuIFx0bDFfdm14X3B0X3N0YXJ0ID0gKHJkdHNjKCkgXHUwMDNlXHUwMDNlIHZteF9wdF9yYXRlKSBcdTAwM2NcdTAwM2Mgdm14X3B0X3JhdGU7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuJiM0MztcdHZtcmVzdW1lKCk7XG4gXG4gXHRsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZGxlX3ZtcHRybGQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3ZtcHRyc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIG5lc3RlZCBWTVggd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSXQgY2hhbmdlcyBWTVBUUkxEIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBhbmQgVk1QVFJTVCB0byByZXR1cm4gdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk5YzJlYmIwNDFkMjY5ODAxODNhYWUxMzQ2MzU2ODZiYjA0Y2IwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjU1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01ODk3LDYgJiM0Mzs1ODk3LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKQogCQlyZXR1cm4gMTsKIAomIzQzOwkvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7CiYjNDM7CQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwogCWlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCAmYW1wO3ZtcHRyLCAmYW1wO3IpKQogCQlyZXR1cm4gcjsKIApAQCAtNTkwNiwxMCAmIzQzOzU5MTIsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodm1wdHIgPT0gdm14LSZndDtuZXN0ZWQudm14b25fcHRyKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpOwogCi0JLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KLQlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKQotCQlyZXR1cm4gMTsKLQogCWlmICh2bXgtJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSAmYW1wO3ZteC0mZ3Q7bmVzdGVkLnZtY3MxMl9jYWNoZTsKIAkJc3RydWN0IHZtY3NfaGRyIGhkcjsKQEAgLTU5NjIsNyAmIzQzOzU5NjQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwotCWdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyOwomIzQzOwlncGFfdCBjdXJyZW50X3ZtcHRyOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CiAJZ3ZhX3QgZ3ZhOwogCWludCByOwpAQCAtNTk3MCw4ICYjNDM7NTk3MiwxNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSkKLQkJcmV0dXJuIDE7CiYjNDM7CS8qCiYjNDM7CSAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZAomIzQzOwkgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuCiYjNDM7CSAqLwomIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQljdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKIAogCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbywKIAkJCQl0cnVlLCBzaXplb2YoZ3BhX3QpLCAmYW1wO2d2YSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IDgyYThlYTZiNjYxZjAuLmM1YjlkMjZmNmNkYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCkBAIC0yNjUsMTQgJiM0MzsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBldm1jc192bXB0cnN0KHU2NCAqdmFsdWUpCi17Ci0JKnZhbHVlID0gY3VycmVudF92cF9hc3Npc3QtJmd0O2N1cnJlbnRfbmVzdGVkX3ZtY3MgJmFtcDsKLQkJfkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpCiB7CiAJc3dpdGNoIChlbmNvZGluZykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCmluZGV4IDZlNmY3MDAzNTUwOGEuLjI4MmI4YWFmZjc5OTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTEzMTgsNyAmIzQzOzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTsKIAkmIzM0O2xlYSAxZiglJXJpcCksICUlcjEwXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O2xlYSAyZiglJXJpcCksICUlcjExXG5cdCYjMzQ7CQkJCVwKIAlmZXAgJiMzNDsxOiAmIzM0OyBpbnNuICYjMzQ7XG5cdCYjMzQ7CQkJCQlcCi0JJiMzNDt4b3IgJSVyOSwgJSVyOVxuXHQmIzM0OwkJCQkJXAomIzQzOwkmIzM0O21vdiAkMCwgJSVyOWRcblx0JiMzNDsJCQkJCVwKIAkmIzM0OzI6XG5cdCYjMzQ7CQkJCQkJXAogCSYjMzQ7bW92ICAlJXI5YiwgJVt2ZWN0b3JdXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O21vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cblx0JiMzNDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAppbmRleCAwNGY1ZTM0ZGVhM2FlLi5jZDgyYTZiZTY5NjNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0zMDksMTI2ICYjNDM7MzA5LDkxIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHsKIAogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAotc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCi17Ci0JdTggcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCYjMzQ7dm14b24gJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsocGh5cykKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKJiM0MzsjZGVmaW5lIEdVRVNUX0FTU0VSVF9WTVhfSU5TTl9TVUNDRUVERUQoaW5zbiwgX19yLCBfX3BhKQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0O1sweCVseF0gaGl0ICVzJiMzNDssCVwKJiM0MzsJCSAgICAgICBfX3BhLCBfX3IgJmx0OyAwID8gJiMzNDtWTS1GYWlsJiMzNDsgOiBleF9zdHIoX19yKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJVSUxEX1ZNQ1NfQVNNX0hFTFBFUlMoaW5zbikJCQkJCVwKJiM0MztzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwl1NjQgZXJyb3JfY29kZTsJCQkJCQkJXAomIzQzOwl1OCB2ZWN0b3I7CQkJCQkJCVwKJiM0MzsJdTggZmFpbGVkOwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pICYjMzQ7ICVbcGFdJiMzNDspCQlcCiYjNDM7CQkgICAgICYjMzQ7XG5cdHNldG5hICVbZmFpbGVkXSYjMzQ7CQkJCVwKJiM0MzsJCSAgICAgOiBLVk1fQVNNX1NBRkVfT1VUUFVUUyh2ZWN0b3IsIGVycm9yX2NvZGUpLAlcCiYjNDM7CQkgICAgICAgW2ZhaWxlZF0mIzM0Oz1xbSYjMzQ7KGZhaWxlZCkJCQkJXAomIzQzOwkJICAgICA6IFtwYV0mIzM0O20mIzM0Oyh2bWNzX3BhKQkJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0OywgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTsJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldHVybiB2ZWN0b3IgPyB2ZWN0b3IgOiBmYWlsZWQgPyAtRUlOVkFMIDogMDsJCQlcCiYjNDM7fQkJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc24odTY0IHZtY3NfcGEpCQkJCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJaW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpOwkJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJR1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpOwkJXAogfQogCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXhvbikKJiM0MztCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtcHRybGQpCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bWNsZWFyKQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZteG9mZih2b2lkKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7dm14b2ZmJiMzNDspOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKQotewotCXU4IHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgmIzM0O3ZtY2xlYXIgJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsodm1jc19wYSkKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSkKLXsKLQl1OCByZXQ7Ci0KLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gLTE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF0mIzM0OwotCQk6IFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCi0JCTogW3BhXSYjMzQ7bSYjMzQ7KHZtY3NfcGEpCi0JCTogJiMzNDtjYyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSkKJiM0MztzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0KHZvaWQpCiB7Ci0JdTY0IHRtcDsKJiM0MzsJdTY0IHZhbHVlID0gMDsKIAl1OCByZXQ7CiAKLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3ZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3ZhbHVlXSYjMzQ7PW0mIzM0Oyh0bXApLCBbcmV0XSYjMzQ7PXJtJiMzNDsocmV0KQomIzQzOwkJOiBbdmFsdWVdJiMzNDs9bSYjMzQ7KHZhbHVlKSwgW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiAKLQkqdmFsdWUgPSB0bXA7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIEEgd3JhcHBlciBhcm91bmQgdm1wdHJzdCB0aGF0IGlnbm9yZXMgZXJyb3JzIGFuZCByZXR1cm5zIHplcm8gaWYgdGhlCi0gKiB2bXB0cnN0IGluc3RydWN0aW9uIGZhaWxzLgotICovCi1zdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKQotewotCXU2NCB2YWx1ZSA9IDA7Ci0Jdm1wdHJzdCgmYW1wO3ZhbHVlKTsKJiM0MzsJX19HVUVTVF9BU1NFUlQoIXJldCwgJiMzNDt2bXB0cnN0IGZhaWxlZCYjMzQ7KTsKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bWxhdW5jaCgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bXJlc3VtZSgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7CiYjNDM7I2RlZmluZSBCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyhpbnNuKQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX18jI2luc24odm9pZCkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlpbnQgcmV0OwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlpZiAoZW5hYmxlX2V2bWNzKQkJCQkJCVwKJiM0MzsJCXJldHVybiBldm1jc18jI2luc24oKTsJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwkJCQkJXAomIzQzOwkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwkJXAomIzQzOwkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwkJCVwKJiM0MzsJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICBfX3N0cmluZ2lmeShpbnNuKSYjMzQ7OyYjMzQ7CQkJXAomIzQzOwkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsJCQkJXAomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsJCQkJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwkJCQlcCiYjNDM7CQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQkJCQlcCiYjNDM7CQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwJCVwKJiM0MzsJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApLAkJXAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMJCQlcCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CQkJCVwKJiM0MzsJcmV0dXJuIHJldDsJCQkJCQkJXAomIzQzO30JCQkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNuKHZvaWQpCQkJCQkJXAomIzQzO3sJCQkJCQkJCQlcCiYjNDM7CWludCByZXQ7CQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldCA9IF9fIyNpbnNuKCk7CQkJCQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghcmV0LCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0OyBoaXQgVk0tRmFpbCYjMzQ7KTsJCVwKIH0KJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bWxhdW5jaCkKJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bXJlc3VtZSkKIAogc3RhdGljIGlubGluZSB2b2lkIHZtY2FsbCh2b2lkKQogewpAQCAtNTUwLDkgJiM0Mzs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3IgewogfTsKIAogc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpOwotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiYjNDM7dm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiB2b2lkIHByZXBhcmVfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHZvaWQgKmd1ZXN0X3JpcCk7Ci1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpOwomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiAKIGJvb2wgZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwppbmRleCBlMTllOGI1YTA5YzVhLi42YTE4MTVmYjk3ZTk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwpAQCAtMzMsMTQgJiM0MzszMywxNCBAQCBfX2FzbV9fKAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14LCB1NjQgdmNwdV9pZCkKIHsKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlHVUVTVF9BU1NFUlQoZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCgpKTsKIAogCSoodTY0ICopdm14LSZndDtzdGFjayA9IHZjcHVfaWQ7CiAJcHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX0RPTkUoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpCiAJcmV0dXJuIHZteDsKIH0KIAotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KQogewogCXU2NCBmZWF0dXJlX2NvbnRyb2w7CiAJdTY0IHJlcXVpcmVkOwpAQCAtMTYzLDI4ICYjNDM7MTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAKIAkvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovCiAJKih1MzIgKikodm14LSZndDt2bXhvbikgPSB2bWNzX3JldmlzaW9uKCk7Ci0JaWYgKHZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7CiYjNDM7CXZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKTsKIH0KIAotYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKIAkvKiBMb2FkIGEgVk1DUy4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3ZtY3MpID0gdm1jc19yZXZpc2lvbigpOwotCWlmICh2bWNsZWFyKHZteC0mZ3Q7dm1jc19ncGEpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CXZtY2xlYXIodm14LSZndDt2bWNzX2dwYSk7CiAKLQlpZiAodm1wdHJsZCh2bXgtJmd0O3ZtY3NfZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwl2bXB0cmxkKHZteC0mZ3Q7dm1jc19ncGEpOwogCiAJLyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3NoYWRvd192bWNzKSA9IHZtY3NfcmV2aXNpb24oKSB8IDB4ODAwMDAwMDB1bDsKLQlpZiAodm1jbGVhcih2bXgtJmd0O3NoYWRvd192bWNzX2dwYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwomIzQzOwl2bWNsZWFyKHZteC0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIH0KIAogc3RhdGljIGJvb2wgZXB0X3ZwaWRfY2FwX3N1cHBvcnRlZCh1NjQgbWFzaykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jCmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYwpAQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKIAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogewotCUdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpOwotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTsKIApAQCAtODMsNyAmIzQzOzgzLDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogCQl2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKm5lc3RlZF90ZXN0X2RhdGEpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwpAQCAtNTUsMTEgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywKIAllbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLSZndDt2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0KTsKIAlldm1jc19lbmFibGUoKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAkvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi8KIAlzeW5jX3dpdGhfaG9zdCgyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCmluZGV4IDYzZWExNTMzZTRlYWQuLmI3YzJhMjU0MjkxZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwpAQCAtMjMsNyAmIzQzOzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7CiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQogewogCXVkX2NvdW50JiM0MzsmIzQzOzsKLQlyZWdzLSZndDtyaXAgJiM0Mzs9IDM7IC8qIFZNTEFVTkNIICovCiYjNDM7CS8qCiYjNDM7CSAqIFZNTEFVTkNIIGluc24gY2FuJiMzOTt0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0CiYjNDM7CSAqIGx1Y2tpbHkgdGhlIGluc3RydWN0aW9uIGlzIGFsd2F5cyB0aHJlZSBieXRlcy4KJiM0MzsJICovCiYjNDM7CXJlZ3MtJmd0O3JpcCAmIzQzOz0gMzsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCkBAIC04OSwyMCAmIzQzOzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0X2dwYSwgaHZfcGFnZXMtJmd0O3ZwX2Fzc2lzdCk7CiAJZXZtY3NfZW5hYmxlKCk7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwogCUdVRVNUX1NZTkMoMyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwkvKiBWTVBUUlNUIHJldHVybnMgLTEgdW50aWwgVk1MQVVOQ0ggd2l0aCBlVk1DUyBwdHIgc2V0ICovCiYjNDM7CUdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gLTEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKIAlHVUVTVF9TWU5DKDUpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSAtMXU7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAljdXJyZW50X2V2bWNzLSZndDtyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047CiAJR1VFU1RfU1lOQyg2KTsKIApAQCAtMTE3LDE3ICYjNDM7MTIwLDE3IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJY3VycmVudF92cF9hc3Npc3QtJmd0O25lc3RlZF9jb250cm9sLmZlYXR1cmVzLmRpcmVjdGh5cGVyY2FsbCA9IDE7CiAJKih1MzIgKikoaHZfcGFnZXMtJmd0O3BhcnRpdGlvbl9hc3Npc3QpID0gMDsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTsKIAlHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pICZhbXA7IDB4ZmYpLCBOTUlfVkVDVE9SKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAKIAkvKgogCSAqIE5NSSBmb3JjZXMgTDItJmd0O0wxIGV4aXQsIHJlc3VtaW5nIEwyIGFuZCBob3BlIHRoYXQgRVZNQ1MgaXMKIAkgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmcKIAkgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAogCUdVRVNUX1NZTkMoMTApOwogCkBAIC0xMzgsMTMgJiM0MzsxNDEsMTMgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAl2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfAogCQlDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTsKIAlfX3NldF9iaXQoTVNSX0ZTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7Ci0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpOwogCWN1cnJlbnRfZXZtY3MtJmd0O2d1ZXN0X3JpcCAmIzQzOz0gMjsgLyogcmRtc3IgKi8KIAogCS8qIEVuYWJsZSBlbmxpZ2h0ZW5lZCBNU1IgYml0bWFwICovCiAJY3VycmVudF9ldm1jcy0mZ3Q7aHZfZW5saWdodGVubWVudHNfY29udHJvbC5tc3JfYml0bWFwID0gMTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNTIsMTQgJiM0MzsxNTUsMTQgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAlfX3NldF9iaXQoTVNSX0dTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7CiAJLyogTWFrZSBzdXJlIEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQIGlzIHNldCAqLwogCWN1cnJlbnRfZXZtY3MtJmd0O2h2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCS8qIE1ha2Ugc3VyZSB3ZSBkb24mIzM5O3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi8KIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDM7IC8qIHZtY2FsbCAqLwogCiAJLyogTm93IHRlbGwgS1ZNIHdlJiMzOTt2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNjcsMjEgJiM0MzsxNzAsMjkgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAkgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLAogCSAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovCiAJLyogRW5hYmxlIHN5bnRoZXRpYyB2bWV4aXQgKi8KIAkqKHUzMiAqKShodl9wYWdlcy0mZ3Q7cGFydGl0aW9uX2Fzc2lzdCkgPSAxOwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX1NZTkMoMTEpOwogCi0JLyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovCiYjNDM7CS8qIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gY2F1c2VzICNVRCBhZnRlciBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCAqLwomIzQzOwlHVUVTVF9BU1NFUlQoX192bXB0cmxkKGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBLiBHVUVTVF9TWU5DKDEyKSBzaWduYWxzCiYjNDM7CSAqIHRoZSBob3N0IHRvIGVuYWJsZSBndWVzdF91ZF9oYW5kbGVyKCkgd2hpY2ggY2Fubm90IGJlIGVuYWJsZWQgYmVmb3JlaGFuZAomIzQzOwkgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfU1lOQygxMik7CiAJZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jcyk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiAJR1VFU1RfRE9ORSgpOwogfQpAQCAtMjUzLDcgJiM0MzsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXZjcHVfYXJnc19zZXQodmNwdSwgMywgdm14X3BhZ2VzX2d2YSwgaHZfcGFnZXNfZ3ZhLCBhZGRyX2d2YTJncGEodm0sIGhjYWxsX3BhZ2UpKTsKIAl2Y3B1X3NldF9tc3IodmNwdSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgdmNwdS0mZ3Q7aWQpOwogCi0Jdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKIAl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7CiAKIAlwcl9pbmZvKCYjMzQ7UnVubmluZyBMMSB3aGljaCB1c2VzIEVWTUNTIHRvIHJ1biBMMlxuJiMzNDspOwpAQCAtMjgzLDcgJiM0MzsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCS8qIEZvcmNlIGltbWVkaWF0ZSBMMi0mZ3Q7TDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi8KIAkJaWYgKHN0YWdlID09IDgpIHsKLQkJCXByX2luZm8oJiMzNDtJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxuJiMzNDspOwomIzQzOwkJCXByX2RlYnVnKCYjMzQ7SW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcbiYjMzQ7KTsKIAkJCWluamVjdF9ubWkodmNwdSk7CiAJCX0KIApAQCAtMjkzLDkgJiM0MzszMDMsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICogS1ZNX1NUQVRFX05FU1RFRF9FVk1DUyBpcyBub3QgbG9zdC4KIAkJICovCiAJCWlmIChzdGFnZSA9PSA5KSB7Ci0JCQlwcl9pbmZvKCYjMzQ7VHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXG4mIzM0Oyk7CiYjNDM7CQkJcHJfZGVidWcoJiMzNDtUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcbiYjMzQ7KTsKIAkJCXZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RhZ2UgPT0gMTIpIHsKJiM0MzsJCQlwcl9kZWJ1ZygmIzM0O1RyeWluZyBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCB3aXRoIGFuIGludmFsaWQgUFRSXG4mIzM0Oyk7CiYjNDM7CQkJdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKJiM0MzsJCX0KIAl9CiAKIGRvbmU6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCmluZGV4IDI1YTE4MmJlMDBhOTcuLjMzN2QzYzI4YmM2ZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCkBAIC00MiwxMyAmIzQzOzQyLDEzIEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKLQlHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTsKLQlHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jCmluZGV4IGI5NzRjZmIzNDdkNmUuLjFmNGE1ZTQ0YTZlZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuYwpAQCAtMzAsMTMgJiM0MzszMCwxMyBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jCmluZGV4IDI2YjQ3NGJmMTM1MzUuLjc5ODdjZTUwYzM4MjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuYwpAQCAtOTMsOCAmIzQzOzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJdm9pZCAqbDJfcmlwOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlpZiAodm14LSZndDtlcHRwX2dwYSkKIAkJbDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDsKQEAgLTEwNCw3ICYjNDM7MTA0LDcgQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJcHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTsKIAogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKIAlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmMKaW5kZXggZTA4YzZiMDY5N2U1MC4uMTFmZTRhMzFlZGEwYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jCkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKIAkJCQkJICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTsKIAkJdm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7CiAJfSBlbHNlIHsKLQkJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odGVzdF9kYXRhKSk7Ci0JCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3ModGVzdF9kYXRhKSk7CiYjNDM7CQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7CiYjNDM7CQlsb2FkX3ZtY3ModGVzdF9kYXRhKTsKIAogCQlwcmVwYXJlX3ZtY3ModGVzdF9kYXRhLCBOVUxMKTsKIAkJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX0lEVFJfTElNSVQsIDApKTsKQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpCiAJCQlleGl0X2luc25fbGVuID0gdm1jYi0mZ3Q7Y29udHJvbC5uZXh0X3JpcCAtIHZtY2ItJmd0O3NhdmUucmlwOwogCQkJR1VFU1RfQVNTRVJUX0VRKHZtY2ItJmd0O3NhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApOwomIzQzOwkJCWkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTsKIAkJCWV4aXRfcmVhc29uID0gdm1yZWFkeihWTV9FWElUX1JFQVNPTik7CiAJCQlleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7CiAJCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSkKIHsKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTsKIAotCUdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApOwomIzQzOwl2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7CiAKIAlpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUikKIAkJcmV0dXJuOwpAQCAtMTI1LDkgJiM0MzsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKIAotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jCmluZGV4IDhjMmJhOTY3NDU1OGUuLjEwMWMxZmU3OWVlYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmMKQEAgLTQwLDIxICYjNDM7NDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewogCXVpbnRwdHJfdCBzYXZlX2NyMzsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAogCS8qIFRyeSB0byBydW4gTDIgd2l0aCBpbnZhbGlkIENSMyBhbmQgbWFrZSBzdXJlIGl0IGZhaWxzICovCiAJc2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7CiAJdm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PQogCQkgICAgIChFWElUX1JFQVNPTl9GQUlMRURfVk1FTlRSWSB8IEVYSVRfUkVBU09OX0lOVkFMSURfU1RBVEUpKTsKIAogCS8qIE5vdyByZXN0b3JlIENSMyBhbmQgbWFrZSBzdXJlIEwyIHJ1bnMgc3VjY2Vzc2Z1bGx5ICovCiAJdm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMKaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jCkBAIC01NSwxMiAmIzQzOzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSwKIAl1NjQgZXhpdF9xdWFsOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBsMl9lbnRyeSk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCiAJLyogVmVyaWZ5IHdlIGdvdCBhbiBFUFQgdmlvbGF0aW9uIGV4aXQgKi8KIAlfX0dVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwppbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwpAQCAtODYsOCAmIzQzOzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKQogCQlzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhOwogCQl1MzIgY29udHJvbDsKIAotCQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJCWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCQljb250cm9sID0gdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKTsKQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSkKIAkJdm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTsKIAkJdm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTsKIAotCQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwkJdm1sYXVuY2goKTsKIAkJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSA9IGRhdGE7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMKaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuYwpAQCAtMTA1LDggJiM0MzsxMDUsOCBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJLyogY2hlY2sgdGhhdCBMMSYjMzk7cyBmcmVxdWVuY3kgbG9va3MgYWxyaWdodCBiZWZvcmUgbGF1bmNoaW5nIEwyICovCiAJY2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi8KIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoVFNDX01VTFRJUExJRVJfSElHSCwgVFNDX01VTFRJUExJRVJfTDIgJmd0OyZndDsgMzIpOwogCiAJLyogbGF1bmNoIEwyICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jCmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpAQCAtOTgsMTcgJiM0Mzs5OCwxNyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTsKIAogCUdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAl3aGlsZSAoMSkgewogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpOwogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgJmFtcDsgMHhmZiwgVURfVkVDVE9SKTsKLQkJR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJCXZtcmVzdW1lKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKaW5kZXggZDFlZGFmZDVhZjc1NS4uMzc3ZGYwOWU1ODJhZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwpAQCAtNzgsOCAmIzQzOzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpCiAJCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkgewogCQkJZ2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CQkJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAJCQlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAkJfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCmluZGV4IDRhMTA1NmE2Y2I4ZGMuLjM4Yzk2ODlhYzYwMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCkBAIC03NSwzMiAmIzQzOzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZCkKIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKIAlHVUVTVF9TWU5DKDMpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIHZteF9sMl9ndWVzdF9jb2RlKTsKIAogCUdVRVNUX1NZTkMoNSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJdm1sYXVuY2goKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIENoZWNrIHRoYXQgdGhlIGxhdW5jaGVkIHN0YXRlIGlzIHByZXNlcnZlZC4gICovCi0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAKIAlHVUVTVF9TWU5DKDcpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCXZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgJiM0MzsgMyk7CkBAIC0xMDgsMjggJiM0MzsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpOwogCXZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIAotCUdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSkpOwotCUdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTsKJiM0MzsJdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpOwogCUdVRVNUX1NZTkMoOCk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCiAJdm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTsKIAlHVUVTVF9TWU5DKDkpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZWUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKSk7CiYjNDM7CXZtcHRybGQodm14X3BhZ2VzLSZndDtzaGFkb3dfdm1jc19ncGEpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCUdVRVNUX1NZTkMoMTMpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogfQogCiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2ZsYXR0ZW5fXykpIGd1ZXN0X2NvZGUodm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jCmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmMKQEAgLTI1LDEyICYjNDM7MjUsMTIgQEAgdm9pZCBsMV9ndWVzdF9jb2RlX3ZteChzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7CiAKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAogCXByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAkvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIGEgdHJpcGxlIGZhdWx0IGV2ZW50IGluamVjdGVkLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwogCUdVRVNUX0RPTkUoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYwppbmRleCA0NjNmNzNhYTkxNTlhLi5mZTI5Yzg2OWEyMzU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jCkBAIC0zOCw4ICYjNDM7MzgsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSkKIHsKIAl1MzIgY29udHJvbDsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01MywxNCAmIzQzOzUzLDE0IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKQogCiAJLyogVHJ5IHRvIGxhdW5jaCBMMiB3aXRoIHRoZSBtZW1vcnktYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJdm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7CiAKIAkvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwppbmRleCBmOWI4OGE2ZjYxMTNkLi5lNTc4MjIxZGEyNDdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwpAQCAtMzMsOCAmIzQzOzMzLDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiB7CiAJdTMyIGNvbnRyb2w7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwpAQCAtNjIsNyAmIzQzOzYyLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogUnVuIEwyIHRvIHN3aXRjaCB0byB4MkFQSUMgbW9kZSwgd2hpY2ggaW4gdHVybiB3aWxsIHVuaW5oaWJpdCBBUElDdiwKIAkgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAl2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICYjNDM7IHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTsKIAlHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpOwpAQCAtOTAsNyAmIzQzOzkwLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogaGFuZGxlcyB0aGUgeDJBUElDID0mZ3Q7IHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyCiAJICogaXMgYWN0aXZlLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKaW5kZXggYzgzNzkxMjRiMzE3Mi4uMzAxNzkzOGZhOTkzNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCkBAIC00MSw4ICYjNDM7NDEsOCBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAlHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpICZhbXA7IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8CiAJCSAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpICZhbXA7IFNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVCkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAogCS8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jCmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmMKQEAgLTM3LDggJiM0MzszNyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCUdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTsKIAogCUdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCWd1ZXN0X2NyNCAmYW1wOz0gflg4Nl9DUjRfTEE1NzsKIAl2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAlleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pOwogCUdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwppbmRleCBlYjgwMjFjMzNjZDQzLi5jZGE1M2RmMzM4ODhlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwpAQCAtNzEsOSAmIzQzOzcxLDkgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAl1NjQgbDFfdHNjX2RlYWRsaW5lLCBsMl90c2NfZGVhZGxpbmU7CiAKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwomIzQzOwlsb2FkX3ZtY3Modm14X3BhZ2VzKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCkBAIC05MCw3ICYjNDM7OTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCSAgICAhKGN0cmxfZXhpdF9yZXYuY2xyICZhbXA7IFZNX0VYSVRfU0FWRV9WTVhfUFJFRU1QVElPTl9USU1FUikpCiAJCXJldHVybjsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJdm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7CiAKQEAgLTExMCw3ICYjNDM7MTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAogCWwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpICZndDsmZ3Q7IHZteF9wdF9yYXRlKSAmbHQ7Jmx0OyB2bXhfcHRfcmF0ZTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAKIAlsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIzOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFZNUFRSTEQvVk1QVFJTVCBQYXRjaCBpbiBLVk0gTmVzdGVkIFZNWCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGhhdCYjMzk7cyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBLVk0mIzM5O3MgbmVzdGVkIFZNWCBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHdoZW4gZVZNQ1MgaXMgaW4gcGxheS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBmb2N1c2luZy4KCkxvb2tpbmcgYXQgYGhhbmRsZV92bXB0cmxkYCwgdGhlIHBhdGNoJiMzOTtzIG1haW4gY2hhbmdlIGlzIHJlcGxhY2luZyBhIHNpbXBsZSByZXR1cm4gd2l0aCBga3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpYCB3aGVuIGVWTUNTIGlzIGFjdGl2ZS4gUHJldmlvdXNseSwganVzdCByZXR1cm5pbmcgMSBtaWdodCBoYXZlIGJlZW4gYSBzdWJ0bGUgYnVnIG9yIGEgbWlzaW50ZXJwcmV0YXRpb24gb2YgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBSZXR1cm5pbmcgMSBpbiBhIEtWTSBleGl0IGhhbmRsZXIgb2Z0ZW4gc2lnbmFscyB0byByZXN1bWUgdGhlIGd1ZXN0LCBidXQgd2l0aG91dCBhZHZhbmNpbmcgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgKFJJUCksIHRoaXMgd291bGQgbGVhZCB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciwgbW9yZSBsaWtlbHksIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZS4gSXQgbG9va3MgbGlrZSBpdCB3YXMgaW50ZW5kZWQgdG8gZmFpbC9za2lwIHRoZSBpbnN0cnVjdGlvbiwgYnV0IHdhc24mIzM5O3QgZG9pbmcgdGhhdCwgYnV0IHRoZXJlIHdhcyBhbiBleHBlY3RhdGlvbiB0aGF0IHNvbWV0aGluZyAqc2hvdWxkKiBmYWlsLiBOb3csIHRoZSBwYXRjaCBjb3JyZWN0bHkgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiwgd2hpY2ggaXMgdGhlIHByb3BlciB3YXkgdG8gaGFuZGxlIGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbi4KCk5vdywgZm9yIGBoYW5kbGVfdm1wdHJzdGAuIEhlcmUsIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmV0dXJuaW5nIGBodl9ldm1jc192bXB0cmAgaW5zdGVhZCBvZiBqdXN0IDEuIEl0IHNlZW1zIGxpa2UgdGhlIHByZXZpb3VzIGJlaGF2aW9yLCByZXR1cm5pbmcgMSwgbWlnaHQgaGF2ZSBhbHNvIGJlZW4gYSBidWcuIEluIHRoaXMgY2FzZSwgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX0tWTV9IWVBFUlZgLCBhbmQgdGhlIHBhdGNoIG5vdyBjb25kaXRpb25hbGx5IGFzc2lnbnMgYGN1cnJlbnRfdm1wdHJgIHdpdGggYGh2X2V2bWNzX3ZtcHRyYCB3aGVuIGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkYCBpcyB0cnVlLiBJdCBhcHBlYXJzIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBkZWZpbmUgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZCwgYnV0IGdlbnVpbmUgSHlwZXItViByZXR1cm5zIGVWTUNTIEdQQS4KClNvLCBmdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIG5lc3RlZCBWTVggaW4gY2VydGFpbiBzY2VuYXJpb3MuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZpeGluZyBhIHN1YnRsZSBidWcgYW5kIGltcHJvdmluZyB0aGUgYWNjdXJhY3kgb2YgaG93IEtWTSBpbnRlcmFjdHMgd2l0aCBuZXN0ZWQgVk1YIGluIHRoaXMgY29udGV4dC4gVGhlIEh5cGVyLVYgc3BlY2lmaWMgY29uZGl0aW9uYWwgaXMgd29ydGggY29uc2lkZXJpbmcuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55IGFuZCB0ZXN0aW5nLCBlc3BlY2lhbGx5IGJlY2F1c2UgdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBjYW4gZXhwb3NlIG5ldyBhdHRhY2sgc3VyZmFjZXMgb3IgcmV2ZWFsIHByZXZpb3VzbHkgaGlkZGVuIGJ1Z3MuCgpMZXQmIzM5O3Mgc2VlOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAgYXJlIHRoZSBrZXkgY29uZmlnIG9wdGlvbnMgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBjb2RlIGlzIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0byBleGVyY2lzZSB0aGlzIGNvZGUgYW5kIGNyZWF0ZSBhIGZvY3VzZWQgZnV6emluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xODM9Y29uZmlnIEtWTV9TTU1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYEtWTV9IWVBFUlZgIGlzIGRlZmluaXRlbHkgYSByZWNvZ25pemVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBnb29kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdGhvcm91Z2hseS4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIEludGVsLXNwZWNpZmljIHZpcnR1YWxpemF0aW9uLiBUaGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggSHlwZXItViBpbiB0aGUgbWl4LCBjb3VsZCBiZSBzaWduaWZpY2FudCBvbiBhbiBJbnRlbC1iYXNlZCBzeXN0ZW0sIHNvIGEgZGVlcCBkaXZlIGludG8gYEtWTV9JTlRFTGAmIzM5O3MgcmVsYXRpb25zaGlwIHdpdGggYEtWTV9IWVBFUlZgIGlzIGVzc2VudGlhbC4gSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IGhvdyB0aGV5IGludGVyYWN0LCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCwgY3JpdGljYWxseSwgaWYgZW5hYmxpbmcgYEtWTV9IWVBFUlZgIGhhcyBhbnkgY2FzY2FkaW5nIGVmZmVjdCBvbiBgS1ZNX0lOVEVMYCBmZWF0dXJlcyBvciBwZXJmb3JtYW5jZS4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlY2lzaW9ucyBJJiMzOTtsbCBtYWtlIGdvaW5nIGZvcndhcmQuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgcmVsZXZhbnQgc291cmNlIGNvZGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipLVk1fSU5URUwgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBLVk1fSU5URUxgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBkZWZpbmUgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBLVk0gb24gSW50ZWwgcHJvY2Vzc29ycyBhbmQsIGNydWNpYWxseSwgdG8gc3BlY2lmeSBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBvciBzYXRpc2ZpZWQgZm9yIGBLVk1fSU5URUxgIHRvIGJlIHZpYWJsZS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyB0aGlzIGlzIGRlcGVuZGVudCBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuICA5MTpcdFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcJiMzNDtyZWFsXCYjMzQ7IFZNIHdvcmtsb2FkIGFzIGFcbiAgOTI6XHRcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXG4gIDkzOlx0XG4gIDk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEtWTV9JTlRFTFxuICA5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IElBMzJfRkVBVF9DVExcbiAgOTk6XHRcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuIDEwMjpcdFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuIDEwODpcdCAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuIDEwOTpcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjU0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIFNldHVwIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBnZXR0aW5nIHRoaXMgS1ZNIGVudmlyb25tZW50IHNldCB1cCBwcm9wZXJseS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBhIGdpdmVuIGZvciBhbnkgbW9kZXJuIEludGVsLWJhc2VkIHZpcnR1YWxpemF0aW9uLiBBbmQgdGhlIHNpdHVhdGlvbiBpcyBtb3JlIGNvbXBsZXggdGhhbiBpdCBvbmNlIHdhcywgYXMgbm93IGl0IGFsc28gbG9va3MgbGlrZSBJIG5lZWQgYEtWTV9IWVBFUlZgIHRvby4KCkFscmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgS1ZNX0hZUEVSVmAgZGVwZW5kZW5jaWVzIG5vdywgdG8gZW5zdXJlIEkmIzM5O3ZlIGNvdmVyZWQgZXZlcnl0aGluZyB0byBnaXZlIG15c2VsZiB0aGUgYmVzdCBjaGFuY2Ugb2YgY29tcGF0aWJpbGl0eS4gVGhhdCBzaG91bGQgYmUgbXkgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgZmlybXdhcmUgdG8gaW1wbGVtZW50IFVFRkkgc2VjdXJlIGJvb3QuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIEtWTV9IWVBFUlZcbiAxOTU6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxOTc6XHRcdGRlZmF1bHQgeVxuIDE5ODpcdFx0aGVscFxuIDE5OTpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXG4gMjAwOlx0XHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcbiAyMDE6XHRcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxuIDIwMjpcdFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcbiAyMDM6XHRcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXG4gMjA0Olx0XHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cbiAyMDU6XHRcbiAyMDY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7WVwmIzM0Oy5cbiAyMDc6XHRcbiAyMDg6XHRjb25maWcgS1ZNX1hFTlxuIDIwOTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc5NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgS1ZNIGNvbmZpZ3VyYXRpb25zOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gaG93IHRoaXMgcGF0Y2ggYWZmZWN0cyB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBmdW5jdGlvbnMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBvciBzb21ldGhpbmcgb2J2aW91cy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZWlyIHNjb3BlIGJlZm9yZSBkaXZpbmcgZGVlcGVyLiBBaCwgdGhleSYjMzk7cmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gQWxyaWdodCwgc28sIG5vdCBpbmxpbmVkLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFyZSBub3QgZXhwb3J0ZWQgb3Igc29tZWhvdyByZWZlcmVuY2VkIHRocm91Z2ggYW4gYXJyYXkuIFRoaXMgd2lsbCBpbmZvcm0gaG93IHRoZSBwYXRjaCB3aWxsIGJlIGFwcGxpZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Nz1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODkwLS8qIEVtdWxhdGUgdGhlIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg5MTpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5Mi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDM1PV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NjctXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVx0PSBoYW5kbGVfdm1sYXVuY2g7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0Njg6XHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXHQ9IGhhbmRsZV92bXB0cmxkO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDY5LVx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVx0PSBoYW5kbGVfdm1wdHJzdDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NjE9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ4MDAtXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0ODAxOlx0ICAgKGhhbmRsZV92bXB0cmxkKS5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMi1cdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSB5ZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2MTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVk0gRXhpdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFZNIGV4aXRzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgc3lzdGVtIHVzZXMgYW4gYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIHZlcnkgc3BlY2lmaWM6IEkmIzM5O20gc3VwcG9zZWQgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgdGhvc2UgaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgcmVhc29uIGlzIHRoZXkgd2FudCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLgoKTm93LCBJJiMzOTttIG5vdGluZyB0aGF0IGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBhdCBmaXJzdCB3b3VsZCBzdWdnZXN0IHRoZXkmIzM5O2QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIGhvdyB0aGVzZSBhcmUgdXNlZC4gVGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgKndpdGhpbiogdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gU2luY2UgdGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMsIEkgZG9uJiMzOTt0IHRoaW5rIHRoZXkmIzM5O3JlIGlubGluZWQuIFRob3VnaCwgSSBhbSBhIGJpdCBjb25jZXJuZWQgYmVjYXVzZSBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlbSB1cC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpTbywgSSB0aGluayBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLCBhbmQgdGhlIHJlYWwgZW50cnkgcG9pbnQgZm9yIFZNIGV4aXRzIGlzIGB2bXhfaGFuZGxlX2V4aXRgIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfaGFuZGxlX2V4aXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MTU3PXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE2MzpcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY0LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODg9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDAyLVx0LmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDAzOlx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDA0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTQyOT1zdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU0OTQtXHQgKiBNTUlPLCBpdCBpcyBiZXR0ZXIgdG8gcmVwb3J0IGFuIGludGVybmFsIGVycm9yLlxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NDk1Olx0ICogU2VlIHRoZSBjb21tZW50cyBpbiB2bXhfaGFuZGxlX2V4aXQuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU0OTYtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTYyNjg9c3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNzItXHQgKiBWTS1FeGl0cy4gVW5jb25kaXRpb25hbGx5IHNldCB0aGUgZmxhZyBoZXJlIGFuZCBsZWF2ZSB0aGUgaGFuZGxpbmcgdG9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjI3MzpcdCAqIHZteF9oYW5kbGVfZXhpdCgpLlxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Mjc0LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02NTAxPXZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY3MDUtICovXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY3MDY6c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjcwNy17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODY0LVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODY1OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NjYte1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODY3Olx0aW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODY4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzE3OD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTkzLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTk0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxOTUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI4PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoyOTppbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMwOnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzEtaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0PTE1OTI9Tm90ZXM6XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTItICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NjI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjY2MmU5IHZteF92Y3B1X3J1biYjNDM7MHgzYjkgKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYzBmNjE5YTAgX192bXhfY28uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjEzOiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODcyOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5Y2ZiMiB2Y3B1X2VudGVyX2d1ZXN0JiM0MzsweDc1MiAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY1ZjU3MCB2bXhfLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxNC0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg4MTogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWQwMjggdmNwdV9lbnRlcl9ndWVzdCYjNDM7MHg3YzggKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYjIzNGY5MDAgX19zci4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTU6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDlkMDZmIHZjcHVfZW50ZXJfZ3Vlc3QmIzQzOzB4ODBmIChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjcyZTMwIHZteF8uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE2OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3MmUzZCB2bXhfaGFuZGxlX2V4aXQmIzQzOzB4ZCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY3MjdjMCBfX3ZteF9oLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJiMTUgX192bXhfaGFuZGxlX2V4aXQmIzQzOzB4MzU1IChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjYwYWUwIHZteC4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTg6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyOTk0IF9fdm14X2hhbmRsZV9leGl0JiM0MzsweDFkNCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNzA5MCBrdm0uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjE5LSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzOTAzOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTBiNzBmMSBrdm1fZW11bGF0ZV9jcHVpZCYjNDM7MHg2MSAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNmUxMCBrdm1fLi4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTg5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZNIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFZNWCBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGB2bXhfaGFuZGxlX2V4aXRgIGxvb2tlZCBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyZWQgdGhhdCBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgYWN0dWFsbHkgcG9wdWxhdGVzIHRoaXMgYGV4aXRfaGFuZGxlcnNgIGFycmF5IOKAkyB0aGF0JiMzOTtzIGNydWNpYWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGltcG9ydGFudD8gQWgsIHJpZ2h0LCBgbmVzdGVkX3ZteF9nZXRfdm1wdHJgIGlzIGNhbGxlZCBmcm9tIGBoYW5kbGVfdm1wdHJsZGAuIEludGVyZXN0aW5nLiBBbmQsIGNyaXRpY2FsbHksIHRob3NlIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSSBhbHNvIGdsYW5jZWQgYXQgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHdoaWNoIGlzIGlubGluZS4gYG5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbmAgaXMgYWxzbyBgc3RhdGljYC4KCkkmIzM5O20gc3RhcnRpbmcgdG8gemVybyBpbiBub3cuIEkgc2hvdWxkIGNpcmNsZSBiYWNrIHRvIGBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwYCBhbmQgdHJhY2UgaXRzIHVzYWdlLiBXYWl0IGEgbWludXRlLi4uIHdoaWxlIGB2bXhfaGFuZGxlX2V4aXRgICppcyogdGhlIG1haW4gVk0gZXhpdCBoYW5kbGVyLCBteSBhdHRlbnRpb24gaXMgYmVpbmcgZHJhd24gdG8gYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhleSYjMzk7cmUgdGhlIG9uZXMgdGhhdCBhcHBlYXIgdG8gaGF2ZSBiZWVuIG1vZGlmaWVkLgoKVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBgc3RhdGljYCBpcyBzaWduaWZpY2FudC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgcHJvYmFibHkgYmVpbmcgdGFrZW4gYW5kIHB1dCBpbnRvIHRoYXQgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBTbywgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBvcHRpbWl6ZSB0aGVtIGF3YXkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpJZiB0aGV5JiMzOTtyZSBpbiBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycywgaW5saW5pbmcgaXMgaW1wb3NzaWJsZSwgYmVjYXVzZSB5b3UgbmVlZCB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uLiBTbywgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIHJlYWxseSAqYXJlKiB0aGUgc2lnbmlmaWNhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBUaGF0IHdvdWxkIGJlIGEgbWFqb3IgY2x1ZS4gT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Nz1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODkwLS8qIEVtdWxhdGUgdGhlIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg5MTpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5Mi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDM1PV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NjctXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVx0PSBoYW5kbGVfdm1sYXVuY2g7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0Njg6XHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXHQ9IGhhbmRsZV92bXB0cmxkO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDY5LVx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVx0PSBoYW5kbGVfdm1wdHJzdDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NjE9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ4MDAtXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0ODAxOlx0ICAgKGhhbmRsZV92bXB0cmxkKS5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMi1cdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSB5ZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIFN5bWJvbCBTZWxlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQsIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWFraW5nIHRoZW0gcGFydCBvZiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBUaGF0IG1lYW5zIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBHb29kLCBzbyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGxvb2sgbGlrZSBzdHJvbmcgY2FuZGlkYXRlcyB0byBzdGFydCB3aXRoLgoKV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBndWlkYW5jZeKApiB0aGUgaW5zdHJ1Y3Rpb25zIGRvIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoZXNlICphcmUqIHN0YXRpYywgYnV0IHRoZXkgYXJlICpub3QqIGlubGluZWQsIHNpbmNlIHdlIGNhbiBwb2ludCB0byB0aGVpciBhZGRyZXNzZXMuIFRoZXkgZG8gaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBldmVuIHRob3VnaCBzdGF0aWMsIGR1ZSB0byB0aGVpciBub3QgYmVpbmcgaW5saW5lZC4gSG93ZXZlciwgSSYjMzk7bGwgaGVkZ2UgbXkgYmV0cyBhbmQgYWRkIGB2bXhfaGFuZGxlX2V4aXRgIG9yIGBfX3ZteF9oYW5kbGVfZXhpdGAgdG8gdGhlIGxpc3QsIGp1c3QgdG8gYmUgc2FmZS4KCkhvbGQgb27igKYgYHZteF9oYW5kbGVfZXhpdGAgaXMgZGVzY3JpYmVkIGFzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGF2b2lkIHRob3NlIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtYWtlcyBzZW5zZTsgYSBnZW5lcmljIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBjb3ZlciBhIGxvdCBvZiB1bnJlbGF0ZWQgY29kZSwgYW5kIHdlJiMzOTtyZSBsb29raW5nIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgVk1QVFJMRCBhbmQgVk1QVFJTVCBleGl0cy4gU28sIEkgc2hvdWxkIGF2b2lkIGB2bXhfaGFuZGxlX2V4aXRgLgoKVGhhdCBsZWF2ZXMgbWUgYmFjayBhdCBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBUaGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBleGl0cywgd2hpY2ggaXMgKmV4YWN0bHkqIHdoYXQgd2UgbmVlZCB0byBmdXp6LiBQZXJmZWN0LgoKTm93LCBhIHF1aWNrIGNvbmZpcm1hdGlvbjogY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhlc2UgVk0gZXhpdHM/IFllcywgd2UgY2FuIHRyaWdnZXIgVk0gZXhpdHMgdXNpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBndWVzdCwgc28gdGhvc2Ugc3ltYm9scyBzaG91bGQgYmUgYWNjZXNzaWJsZS4KCkFscmlnaHQsIGJlZm9yZSBJIGxvY2sgaW4gdGhlIGZpbmFsIHNlbGVjdGlvbiwgbGV0JiMzOTtzIHZlcmlmeSBpZiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgaGFzIHJlbGV2YW5jZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MjA9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjI1OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD02ND1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6Njk6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTcwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE5NT1zdGF0aWMgaW50IG5lc3RlZF92bXhfZmFpbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9pbnN0cnVjdGlvbl9lcnJvcilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMy1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIwNDpcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDUtXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjI3ND12b2lkIG5lc3RlZF9zeW5jX3ZtY3MxMl90b19zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjI3Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI3ODpcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzktXHRcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDMxPXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0Mzc6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM4LVx0XHRwcmVwYXJlX3ZtY3MwMl9lYXJseV9yYXJlKHZteCwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXHRcdHByZXBhcmVfdm1jczAyX3JhcmUodm14LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc3MS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mjc3MjpcdFx0bG9hZF9ndWVzdF9wZHB0cnNfdm1jczEyID0gIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSB8fFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzczLVx0XHRcdCEoZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNiBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfR1VFU1RfR1JQMSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI5MDI6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAzLVx0XHRldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgfD0gSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0FMTDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzgyLVx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gZXhpdF9yZWFzb24uZnVsbDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc4MzpcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzg0LVx0XHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3OTI9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgxMy1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgxNDpcdGlmIChDQyghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODE1LVx0ICAgICAgIHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODI4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODI5Olx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODMwLVx0XHRzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqZXZtY3MgPSBuZXN0ZWRfdm14X2V2bWNzKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjUzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTc6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjU4LVx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSh2Y3B1LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY2MC1cdHZteC1cdTAwM2VuZXN0ZWQubmVlZF9zeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSA9XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NjE6XHRcdCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NjItXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDczPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxODAtXHRpZiAoKHZtX2V4aXRfcmVhc29uICE9IC0xKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE4MTpcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxODItXHRcdHZteC1cdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY2ND1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY4My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY4NDpcdGlmICghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2ODUtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODkxPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTkwMC1cdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5MDE6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5MDItXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NjM9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTc5LSNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTgwOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk4MS1cdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzY0PXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg1Mi1cdFx0aWYgKCF2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4NTM6XHRcdFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg1NC1cdFx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTA5CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDc4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2ggZm9yIE5lc3RlZCBWTVggYW5kIGVWTUNTKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGZvY3VzZWQgb24gaG93IEtWTSBoYW5kbGVzIFZNUFRSTEQgYW5kIFZNUFRSU1Qgd2l0aGluIG5lc3RlZCBWTVggd2hlbiB0aGUgRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGZlYXR1cmUgaXMgaW4gcGxheS4gVGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGRlZmluaXRlbHkgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSByZWxldmFudCBWTSBleGl0cywgYW5kIHRoZXkmIzM5O3JlIGV4YWN0bHkgd2hlcmUgdGhlIHBhdGNoIG1ha2VzIHRoZSBjcml0aWNhbCBjaGFuZ2VzLiBJIGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBuZXN0ZWRfdm14X3J1bmAgaW5pdGlhbGx5IGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24gZm9yIFZNTEFVTkNIL1ZNUkVTVU1FLCBhbmQgdGhlcmVmb3JlIGludGVyYWN0cyB3aXRoIHRoZSBlVk1DUywgYnV0IHRoZSBjaGFuZ2VzIGNlbnRlciBvbiB0aGUgYGhhbmRsZV8qYCBmdW5jdGlvbnMuCgpJIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNgIGFuZCBvdGhlciB0ZXN0cywgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEl0IHNob3dzIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQmIzM5O3MgdGVzdGFibGUsIGFuZCwgY3J1Y2lhbGx5LCBpdCYjMzk7cyByZWFjaGFibGUuIFRoaXMgYWxsIHBvaW50cyB0byB0aGlzIHBhdGNoIGJlaW5nIHdvcnRoIGZ1enppbmcsIGFzIGl0JiMzOTtzIGNoYW5naW5nIGNvcmUgYmVoYXZpb3VyLgoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2l0aGluIG5lc3RlZCBWTVggd2hlbiBlVk1DUyBpcyBhY3RpdmUuIEl0JiMzOTtzIHJlcGxhY2luZyB0aGUgc3RhbmRhcmQgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgd2l0aCBlaXRoZXIgYSAjVUQgZXhjZXB0aW9uIChmb3IgVk1QVFJMRCkgb3IgcmV0dXJuaW5nIHRoZSBlVk1DUyBHUEEgKGZvciBWTVBUUlNUKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIGFuZCBpdCBjYW4gYmUgdHJpZ2dlcmVkIGR1cmluZyBndWVzdCBleGVjdXRpb24uCgpJJiMzOTt2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIGFzIGBbJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LCAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDtdYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFsmIzM0O0tWTSYjMzQ7LCAmIzM0O0tWTV9JTlRFTCYjMzQ7LCAmIzM0O0tWTV9IWVBFUlYmIzM0O11gIHdoaWNoIGlzIGFsbCBJIG5lZWQgc2luY2UgYEtWTV9YODZgIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgZGVwZW5kcyBvbiBgS1ZNX1g4NmAuCgpKdXN0IHRvIGJlIHN1cmUsIEkgZG91YmxlLWNoZWNrZWQgdGhlIGZ1bmN0aW9ucyBhbmQgdGhlIHBhdGNoIGNvZGUgYWdhaW4uIFRob3NlIGBoYW5kbGVfKmAgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGVpciBhZGRyZXNzZXMgYXJlIHVzZWQgaW4gdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheSwgc28gdGhleSBkZWZpbml0ZWx5IGFyZW4mIzM5O3QgaW5saW5lZCBhbmQgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzLiBUaGV5IGFyZSB0aGUgQVBJIGVudHJ5cG9pbnRzIGZvciBoYW5kbGluZyB0aG9zZSBzcGVjaWZpYyBWTSBleGl0IHJlYXNvbnMuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBjb25maXJtcyB3aGF0IEkgdGhvdWdodC4gV2l0aCBlVk1DUyB2YWxpZCwgdGhlIHBhdGNoIHF1ZXVlcyBhICNVRCBleGNlcHRpb24gZm9yIGBoYW5kbGVfdm1wdHJsZGAuIEZvciBgaGFuZGxlX3ZtcHRyc3RgLCBpdCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgd2hlbiBgS1ZNX0hZUEVSVmAgaXMgZW5hYmxlZCwgaW5zdGVhZCBvZiBza2lwcGluZyB0aGUgaW5zdHJ1Y3Rpb24gKG9yIGxvb3BpbmcpLCBhcyB0aGUgSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBkby4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHRoZW4gZm9jdXNlcyBvbiBzZWxmdGVzdHMgdG8gY292ZXIgdGhpcyBuZXcgYmVoYXZpb3VyLgoKWWVwLCBsb29rcyBnb29kLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfdm1wdHJzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gbmVzdGVkIFZNWCB3aGVuIEVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBpcyB1c2VkLiBJdCBjaGFuZ2VzIFZNUFRSTEQgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGFuZCBWTVBUUlNUIHRvIHJldHVybiB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSYjMzk7cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDssCiAgICAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiBuZXN0ZWQgVk1YIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEl0IGNoYW5nZXMgVk1QVFJMRCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24gYW5kIFZNUFRSU1QgdG8gcmV0dXJuIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyAxLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGluIEtWTSYjMzk7cyBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvZGUuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZDogaW5zdGVhZCBvZiByZXR1cm5pbmcgMSAoZG9pbmcgbm90aGluZyksIGl0IG5vdyBzZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYCBhbmQgd3JpdGVzIGl0IHRvIGd1ZXN0IG1lbW9yeS4gYGN1cnJlbnRfdm1wdHJgIGlzIGEgYGdwYV90YCAoYSA2NC1iaXQgaW50ZWdlciksIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBndWVzdCB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIFRoZXJlIGFyZSBubyBzdHJ1Y3RzIHdpdGggcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnZvbHZlZC4gVGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGluIEtWTSBzZWxmdGVzdHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk5YzJlYmIwNDFkMjY5ODAxODNhYWUxMzQ2MzU2ODZiYjA0Y2IwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjU1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01ODk3LDYgJiM0Mzs1ODk3LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKQogCQlyZXR1cm4gMTsKIAomIzQzOwkvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7CiYjNDM7CQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwogCWlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCAmYW1wO3ZtcHRyLCAmYW1wO3IpKQogCQlyZXR1cm4gcjsKIApAQCAtNTkwNiwxMCAmIzQzOzU5MTIsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodm1wdHIgPT0gdm14LSZndDtuZXN0ZWQudm14b25fcHRyKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpOwogCi0JLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KLQlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKQotCQlyZXR1cm4gMTsKLQogCWlmICh2bXgtJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSAmYW1wO3ZteC0mZ3Q7bmVzdGVkLnZtY3MxMl9jYWNoZTsKIAkJc3RydWN0IHZtY3NfaGRyIGhkcjsKQEAgLTU5NjIsNyAmIzQzOzU5NjQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwotCWdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyOwomIzQzOwlncGFfdCBjdXJyZW50X3ZtcHRyOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CiAJZ3ZhX3QgZ3ZhOwogCWludCByOwpAQCAtNTk3MCw4ICYjNDM7NTk3MiwxNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSkKLQkJcmV0dXJuIDE7CiYjNDM7CS8qCiYjNDM7CSAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZAomIzQzOwkgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuCiYjNDM7CSAqLwomIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQljdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKIAogCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbywKIAkJCQl0cnVlLCBzaXplb2YoZ3BhX3QpLCAmYW1wO2d2YSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IDgyYThlYTZiNjYxZjAuLmM1YjlkMjZmNmNkYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCkBAIC0yNjUsMTQgJiM0MzsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBldm1jc192bXB0cnN0KHU2NCAqdmFsdWUpCi17Ci0JKnZhbHVlID0gY3VycmVudF92cF9hc3Npc3QtJmd0O2N1cnJlbnRfbmVzdGVkX3ZtY3MgJmFtcDsKLQkJfkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpCiB7CiAJc3dpdGNoIChlbmNvZGluZykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCmluZGV4IDZlNmY3MDAzNTUwOGEuLjI4MmI4YWFmZjc5OTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTEzMTgsNyAmIzQzOzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTsKIAkmIzM0O2xlYSAxZiglJXJpcCksICUlcjEwXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O2xlYSAyZiglJXJpcCksICUlcjExXG5cdCYjMzQ7CQkJCVwKIAlmZXAgJiMzNDsxOiAmIzM0OyBpbnNuICYjMzQ7XG5cdCYjMzQ7CQkJCQlcCi0JJiMzNDt4b3IgJSVyOSwgJSVyOVxuXHQmIzM0OwkJCQkJXAomIzQzOwkmIzM0O21vdiAkMCwgJSVyOWRcblx0JiMzNDsJCQkJCVwKIAkmIzM0OzI6XG5cdCYjMzQ7CQkJCQkJXAogCSYjMzQ7bW92ICAlJXI5YiwgJVt2ZWN0b3JdXG5cdCYjMzQ7CQkJCVwKIAkmIzM0O21vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cblx0JiMzNDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAppbmRleCAwNGY1ZTM0ZGVhM2FlLi5jZDgyYTZiZTY5NjNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0zMDksMTI2ICYjNDM7MzA5LDkxIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHsKIAogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAotc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCi17Ci0JdTggcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCYjMzQ7dm14b24gJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsocGh5cykKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKJiM0MzsjZGVmaW5lIEdVRVNUX0FTU0VSVF9WTVhfSU5TTl9TVUNDRUVERUQoaW5zbiwgX19yLCBfX3BhKQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0O1sweCVseF0gaGl0ICVzJiMzNDssCVwKJiM0MzsJCSAgICAgICBfX3BhLCBfX3IgJmx0OyAwID8gJiMzNDtWTS1GYWlsJiMzNDsgOiBleF9zdHIoX19yKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJVSUxEX1ZNQ1NfQVNNX0hFTFBFUlMoaW5zbikJCQkJCVwKJiM0MztzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwl1NjQgZXJyb3JfY29kZTsJCQkJCQkJXAomIzQzOwl1OCB2ZWN0b3I7CQkJCQkJCVwKJiM0MzsJdTggZmFpbGVkOwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pICYjMzQ7ICVbcGFdJiMzNDspCQlcCiYjNDM7CQkgICAgICYjMzQ7XG5cdHNldG5hICVbZmFpbGVkXSYjMzQ7CQkJCVwKJiM0MzsJCSAgICAgOiBLVk1fQVNNX1NBRkVfT1VUUFVUUyh2ZWN0b3IsIGVycm9yX2NvZGUpLAlcCiYjNDM7CQkgICAgICAgW2ZhaWxlZF0mIzM0Oz1xbSYjMzQ7KGZhaWxlZCkJCQkJXAomIzQzOwkJICAgICA6IFtwYV0mIzM0O20mIzM0Oyh2bWNzX3BhKQkJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0OywgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTsJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldHVybiB2ZWN0b3IgPyB2ZWN0b3IgOiBmYWlsZWQgPyAtRUlOVkFMIDogMDsJCQlcCiYjNDM7fQkJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc24odTY0IHZtY3NfcGEpCQkJCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJaW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpOwkJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJR1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpOwkJXAogfQogCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXhvbikKJiM0MztCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtcHRybGQpCiYjNDM7QlVJTERfVk1DU19BU01fSEVMUEVSUyh2bWNsZWFyKQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZteG9mZih2b2lkKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7dm14b2ZmJiMzNDspOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKQotewotCXU4IHJldDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgmIzM0O3ZtY2xlYXIgJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKLQkJOiBbcGFdJiMzNDttJiMzNDsodm1jc19wYSkKLQkJOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSkKLXsKLQl1OCByZXQ7Ci0KLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gLTE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF0mIzM0OwotCQk6IFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCi0JCTogW3BhXSYjMzQ7bSYjMzQ7KHZtY3NfcGEpCi0JCTogJiMzNDtjYyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSkKJiM0MztzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0KHZvaWQpCiB7Ci0JdTY0IHRtcDsKJiM0MzsJdTY0IHZhbHVlID0gMDsKIAl1OCByZXQ7CiAKLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3ZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XSYjMzQ7Ci0JCTogW3ZhbHVlXSYjMzQ7PW0mIzM0Oyh0bXApLCBbcmV0XSYjMzQ7PXJtJiMzNDsocmV0KQomIzQzOwkJOiBbdmFsdWVdJiMzNDs9bSYjMzQ7KHZhbHVlKSwgW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiAKLQkqdmFsdWUgPSB0bXA7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIEEgd3JhcHBlciBhcm91bmQgdm1wdHJzdCB0aGF0IGlnbm9yZXMgZXJyb3JzIGFuZCByZXR1cm5zIHplcm8gaWYgdGhlCi0gKiB2bXB0cnN0IGluc3RydWN0aW9uIGZhaWxzLgotICovCi1zdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKQotewotCXU2NCB2YWx1ZSA9IDA7Ci0Jdm1wdHJzdCgmYW1wO3ZhbHVlKTsKJiM0MzsJX19HVUVTVF9BU1NFUlQoIXJldCwgJiMzNDt2bXB0cnN0IGZhaWxlZCYjMzQ7KTsKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bWxhdW5jaCgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bXJlc3VtZSgpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKLQkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7Ci0JCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KLQkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwotCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IDsmIzM0OwotCQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCi0JCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCi0JCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKLQkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwotCXJldHVybiByZXQ7CiYjNDM7I2RlZmluZSBCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyhpbnNuKQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX18jI2luc24odm9pZCkJCQkJCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlpbnQgcmV0OwkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwlpZiAoZW5hYmxlX2V2bWNzKQkJCQkJCVwKJiM0MzsJCXJldHVybiBldm1jc18jI2luc24oKTsJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwkJCQkJXAomIzQzOwkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwkJXAomIzQzOwkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwkJCVwKJiM0MzsJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICBfX3N0cmluZ2lmeShpbnNuKSYjMzQ7OyYjMzQ7CQkJXAomIzQzOwkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsJCQkJXAomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsJCQkJCVwKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00JCQlcCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwkJCQlcCiYjNDM7CQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQkJCQlcCiYjNDM7CQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwJCVwKJiM0MzsJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApLAkJXAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMJCQlcCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CQkJCVwKJiM0MzsJcmV0dXJuIHJldDsJCQkJCQkJXAomIzQzO30JCQkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNuKHZvaWQpCQkJCQkJXAomIzQzO3sJCQkJCQkJCQlcCiYjNDM7CWludCByZXQ7CQkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldCA9IF9fIyNpbnNuKCk7CQkJCQkJXAomIzQzOwlfX0dVRVNUX0FTU0VSVCghcmV0LCBfX3N0cmluZ2lmeShpbnNuKSAmIzM0OyBoaXQgVk0tRmFpbCYjMzQ7KTsJCVwKIH0KJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bWxhdW5jaCkKJiM0MztCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bXJlc3VtZSkKIAogc3RhdGljIGlubGluZSB2b2lkIHZtY2FsbCh2b2lkKQogewpAQCAtNTUwLDkgJiM0Mzs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3IgewogfTsKIAogc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpOwotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiYjNDM7dm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiB2b2lkIHByZXBhcmVfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHZvaWQgKmd1ZXN0X3JpcCk7Ci1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpOwomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7CiAKIGJvb2wgZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwppbmRleCBlMTllOGI1YTA5YzVhLi42YTE4MTVmYjk3ZTk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuYwpAQCAtMzMsMTQgJiM0MzszMywxNCBAQCBfX2FzbV9fKAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14LCB1NjQgdmNwdV9pZCkKIHsKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlHVUVTVF9BU1NFUlQoZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCgpKTsKIAogCSoodTY0ICopdm14LSZndDtzdGFjayA9IHZjcHVfaWQ7CiAJcHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX0RPTkUoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpCiAJcmV0dXJuIHZteDsKIH0KIAotYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKJiM0Mzt2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KQogewogCXU2NCBmZWF0dXJlX2NvbnRyb2w7CiAJdTY0IHJlcXVpcmVkOwpAQCAtMTYzLDI4ICYjNDM7MTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAKIAkvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovCiAJKih1MzIgKikodm14LSZndDt2bXhvbikgPSB2bWNzX3JldmlzaW9uKCk7Ci0JaWYgKHZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7CiYjNDM7CXZteG9uKHZteC0mZ3Q7dm14b25fZ3BhKTsKIH0KIAotYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKIAkvKiBMb2FkIGEgVk1DUy4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3ZtY3MpID0gdm1jc19yZXZpc2lvbigpOwotCWlmICh2bWNsZWFyKHZteC0mZ3Q7dm1jc19ncGEpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CXZtY2xlYXIodm14LSZndDt2bWNzX2dwYSk7CiAKLQlpZiAodm1wdHJsZCh2bXgtJmd0O3ZtY3NfZ3BhKSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwl2bXB0cmxkKHZteC0mZ3Q7dm1jc19ncGEpOwogCiAJLyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi8KIAkqKHUzMiAqKSh2bXgtJmd0O3NoYWRvd192bWNzKSA9IHZtY3NfcmV2aXNpb24oKSB8IDB4ODAwMDAwMDB1bDsKLQlpZiAodm1jbGVhcih2bXgtJmd0O3NoYWRvd192bWNzX2dwYSkpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwomIzQzOwl2bWNsZWFyKHZteC0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIH0KIAogc3RhdGljIGJvb2wgZXB0X3ZwaWRfY2FwX3N1cHBvcnRlZCh1NjQgbWFzaykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jCmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYwpAQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKIAogc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogewotCUdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpOwotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTsKIApAQCAtODMsNyAmIzQzOzgzLDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQogCQl2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKm5lc3RlZF90ZXN0X2RhdGEpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwpAQCAtNTUsMTEgJiM0Mzs1NSwxMSBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywKIAllbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLSZndDt2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0KTsKIAlldm1jc19lbmFibGUoKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAkvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi8KIAlzeW5jX3dpdGhfaG9zdCgyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCmluZGV4IDYzZWExNTMzZTRlYWQuLmI3YzJhMjU0MjkxZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwpAQCAtMjMsNyAmIzQzOzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7CiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQogewogCXVkX2NvdW50JiM0MzsmIzQzOzsKLQlyZWdzLSZndDtyaXAgJiM0Mzs9IDM7IC8qIFZNTEFVTkNIICovCiYjNDM7CS8qCiYjNDM7CSAqIFZNTEFVTkNIIGluc24gY2FuJiMzOTt0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0CiYjNDM7CSAqIGx1Y2tpbHkgdGhlIGluc3RydWN0aW9uIGlzIGFsd2F5cyB0aHJlZSBieXRlcy4KJiM0MzsJICovCiYjNDM7CXJlZ3MtJmd0O3JpcCAmIzQzOz0gMzsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCkBAIC04OSwyMCAmIzQzOzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy0mZ3Q7dnBfYXNzaXN0X2dwYSwgaHZfcGFnZXMtJmd0O3ZwX2Fzc2lzdCk7CiAJZXZtY3NfZW5hYmxlKCk7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwogCUdVRVNUX1NZTkMoMyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwkvKiBWTVBUUlNUIHJldHVybnMgLTEgdW50aWwgVk1MQVVOQ0ggd2l0aCBlVk1DUyBwdHIgc2V0ICovCiYjNDM7CUdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gLTEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKIAlHVUVTVF9TWU5DKDUpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSAtMXU7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAljdXJyZW50X2V2bWNzLSZndDtyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047CiAJR1VFU1RfU1lOQyg2KTsKIApAQCAtMTE3LDE3ICYjNDM7MTIwLDE3IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJY3VycmVudF92cF9hc3Npc3QtJmd0O25lc3RlZF9jb250cm9sLmZlYXR1cmVzLmRpcmVjdGh5cGVyY2FsbCA9IDE7CiAJKih1MzIgKikoaHZfcGFnZXMtJmd0O3BhcnRpdGlvbl9hc3Npc3QpID0gMDsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTsKIAlHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pICZhbXA7IDB4ZmYpLCBOTUlfVkVDVE9SKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAKIAkvKgogCSAqIE5NSSBmb3JjZXMgTDItJmd0O0wxIGV4aXQsIHJlc3VtaW5nIEwyIGFuZCBob3BlIHRoYXQgRVZNQ1MgaXMKIAkgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmcKIAkgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAogCUdVRVNUX1NZTkMoMTApOwogCkBAIC0xMzgsMTMgJiM0MzsxNDEsMTMgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAl2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfAogCQlDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTsKIAlfX3NldF9iaXQoTVNSX0ZTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7Ci0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpOwogCWN1cnJlbnRfZXZtY3MtJmd0O2d1ZXN0X3JpcCAmIzQzOz0gMjsgLyogcmRtc3IgKi8KIAogCS8qIEVuYWJsZSBlbmxpZ2h0ZW5lZCBNU1IgYml0bWFwICovCiAJY3VycmVudF9ldm1jcy0mZ3Q7aHZfZW5saWdodGVubWVudHNfY29udHJvbC5tc3JfYml0bWFwID0gMTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNTIsMTQgJiM0MzsxNTUsMTQgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAlfX3NldF9iaXQoTVNSX0dTX0JBU0UgJmFtcDsgMHgxZmZmLCB2bXhfcGFnZXMtJmd0O21zciAmIzQzOyAweDQwMCk7CiAJLyogTWFrZSBzdXJlIEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQIGlzIHNldCAqLwogCWN1cnJlbnRfZXZtY3MtJmd0O2h2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCS8qIE1ha2Ugc3VyZSB3ZSBkb24mIzM5O3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi8KIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDM7IC8qIHZtY2FsbCAqLwogCiAJLyogTm93IHRlbGwgS1ZNIHdlJiMzOTt2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7Z3Vlc3RfcmlwICYjNDM7PSAyOyAvKiByZG1zciAqLwogCkBAIC0xNjcsMjEgJiM0MzsxNzAsMjkgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcywKIAkgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLAogCSAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTsKIAljdXJyZW50X2V2bWNzLSZndDtndWVzdF9yaXAgJiM0Mzs9IDI7IC8qIHJkbXNyICovCiAJLyogRW5hYmxlIHN5bnRoZXRpYyB2bWV4aXQgKi8KIAkqKHUzMiAqKShodl9wYWdlcy0mZ3Q7cGFydGl0aW9uX2Fzc2lzdCkgPSAxOwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX1NZTkMoMTEpOwogCi0JLyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovCiYjNDM7CS8qIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gY2F1c2VzICNVRCBhZnRlciBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCAqLwomIzQzOwlHVUVTVF9BU1NFUlQoX192bXB0cmxkKGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBLiBHVUVTVF9TWU5DKDEyKSBzaWduYWxzCiYjNDM7CSAqIHRoZSBob3N0IHRvIGVuYWJsZSBndWVzdF91ZF9oYW5kbGVyKCkgd2hpY2ggY2Fubm90IGJlIGVuYWJsZWQgYmVmb3JlaGFuZAomIzQzOwkgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfU1lOQygxMik7CiAJZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jcyk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiAJR1VFU1RfRE9ORSgpOwogfQpAQCAtMjUzLDcgJiM0MzsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXZjcHVfYXJnc19zZXQodmNwdSwgMywgdm14X3BhZ2VzX2d2YSwgaHZfcGFnZXNfZ3ZhLCBhZGRyX2d2YTJncGEodm0sIGhjYWxsX3BhZ2UpKTsKIAl2Y3B1X3NldF9tc3IodmNwdSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgdmNwdS0mZ3Q7aWQpOwogCi0Jdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKIAl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7CiAKIAlwcl9pbmZvKCYjMzQ7UnVubmluZyBMMSB3aGljaCB1c2VzIEVWTUNTIHRvIHJ1biBMMlxuJiMzNDspOwpAQCAtMjgzLDcgJiM0MzsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCS8qIEZvcmNlIGltbWVkaWF0ZSBMMi0mZ3Q7TDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi8KIAkJaWYgKHN0YWdlID09IDgpIHsKLQkJCXByX2luZm8oJiMzNDtJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxuJiMzNDspOwomIzQzOwkJCXByX2RlYnVnKCYjMzQ7SW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcbiYjMzQ7KTsKIAkJCWluamVjdF9ubWkodmNwdSk7CiAJCX0KIApAQCAtMjkzLDkgJiM0MzszMDMsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICogS1ZNX1NUQVRFX05FU1RFRF9FVk1DUyBpcyBub3QgbG9zdC4KIAkJICovCiAJCWlmIChzdGFnZSA9PSA5KSB7Ci0JCQlwcl9pbmZvKCYjMzQ7VHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXG4mIzM0Oyk7CiYjNDM7CQkJcHJfZGVidWcoJiMzNDtUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcbiYjMzQ7KTsKIAkJCXZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RhZ2UgPT0gMTIpIHsKJiM0MzsJCQlwcl9kZWJ1ZygmIzM0O1RyeWluZyBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCB3aXRoIGFuIGludmFsaWQgUFRSXG4mIzM0Oyk7CiYjNDM7CQkJdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTsKJiM0MzsJCX0KIAl9CiAKIGRvbmU6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCmluZGV4IDI1YTE4MmJlMDBhOTcuLjMzN2QzYzI4YmM2ZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jCkBAIC00MiwxMyAmIzQzOzQyLDEzIEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCkKIHsKLQlHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTsKLQlHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogfQogCiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jCmluZGV4IGI5NzRjZmIzNDdkNmUuLjFmNGE1ZTQ0YTZlZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuYwpAQCAtMzAsMTMgJiM0MzszMCwxMyBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jCmluZGV4IDI2YjQ3NGJmMTM1MzUuLjc5ODdjZTUwYzM4MjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuYwpAQCAtOTMsOCAmIzQzOzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJdm9pZCAqbDJfcmlwOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlpZiAodm14LSZndDtlcHRwX2dwYSkKIAkJbDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDsKQEAgLTEwNCw3ICYjNDM7MTA0LDcgQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiAJcHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTsKIAogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTsKIAlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmMKaW5kZXggZTA4YzZiMDY5N2U1MC4uMTFmZTRhMzFlZGEwYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jCkBAIC02Niw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSkKIAkJCQkJICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTsKIAkJdm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7CiAJfSBlbHNlIHsKLQkJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odGVzdF9kYXRhKSk7Ci0JCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3ModGVzdF9kYXRhKSk7CiYjNDM7CQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7CiYjNDM7CQlsb2FkX3ZtY3ModGVzdF9kYXRhKTsKIAogCQlwcmVwYXJlX3ZtY3ModGVzdF9kYXRhLCBOVUxMKTsKIAkJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX0lEVFJfTElNSVQsIDApKTsKQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpCiAJCQlleGl0X2luc25fbGVuID0gdm1jYi0mZ3Q7Y29udHJvbC5uZXh0X3JpcCAtIHZtY2ItJmd0O3NhdmUucmlwOwogCQkJR1VFU1RfQVNTRVJUX0VRKHZtY2ItJmd0O3NhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApOwomIzQzOwkJCWkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTsKIAkJCWV4aXRfcmVhc29uID0gdm1yZWFkeihWTV9FWElUX1JFQVNPTik7CiAJCQlleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7CiAJCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMKQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSkKIHsKIAlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTsKIAotCUdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApOwomIzQzOwl2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7CiAKIAlpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUikKIAkJcmV0dXJuOwpAQCAtMTI1LDkgJiM0MzsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKIAotCUdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7CiYjNDM7CWxvYWRfdm1jcyh2bXgpOwogCiAJcHJlcGFyZV92bWNzKHZteCwgTlVMTCk7CiAJR1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jCmluZGV4IDhjMmJhOTY3NDU1OGUuLjEwMWMxZmU3OWVlYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmMKQEAgLTQwLDIxICYjNDM7NDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewogCXVpbnRwdHJfdCBzYXZlX2NyMzsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAogCS8qIFRyeSB0byBydW4gTDIgd2l0aCBpbnZhbGlkIENSMyBhbmQgbWFrZSBzdXJlIGl0IGZhaWxzICovCiAJc2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7CiAJdm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PQogCQkgICAgIChFWElUX1JFQVNPTl9GQUlMRURfVk1FTlRSWSB8IEVYSVRfUkVBU09OX0lOVkFMSURfU1RBVEUpKTsKIAogCS8qIE5vdyByZXN0b3JlIENSMyBhbmQgbWFrZSBzdXJlIEwyIHJ1bnMgc3VjY2Vzc2Z1bGx5ICovCiAJdm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMKaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jCkBAIC01NSwxMiAmIzQzOzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSwKIAl1NjQgZXhpdF9xdWFsOwogCiAJR1VFU1RfQVNTRVJUKHZteC0mZ3Q7dm1jc19ncGEpOwotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTsKJiM0MzsJbG9hZF92bWNzKHZteCk7CiAKIAlwcmVwYXJlX3ZtY3Modm14LCBsMl9lbnRyeSk7CiAKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCiAJLyogVmVyaWZ5IHdlIGdvdCBhbiBFUFQgdmlvbGF0aW9uIGV4aXQgKi8KIAlfX0dVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwppbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYwpAQCAtODYsOCAmIzQzOzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKQogCQlzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhOwogCQl1MzIgY29udHJvbDsKIAotCQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJCWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCQljb250cm9sID0gdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKTsKQEAgLTk1LDcgJiM0Mzs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSkKIAkJdm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTsKIAkJdm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTsKIAotCQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwkJdm1sYXVuY2goKTsKIAkJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSA9IGRhdGE7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMKaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuYwpAQCAtMTA1LDggJiM0MzsxMDUsOCBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJLyogY2hlY2sgdGhhdCBMMSYjMzk7cyBmcmVxdWVuY3kgbG9va3MgYWxyaWdodCBiZWZvcmUgbGF1bmNoaW5nIEwyICovCiAJY2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi8KIAlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoVFNDX01VTFRJUExJRVJfSElHSCwgVFNDX01VTFRJUExJRVJfTDIgJmd0OyZndDsgMzIpOwogCiAJLyogbGF1bmNoIEwyICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIGNoZWNrIHRoYXQgTDEmIzM5O3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jCmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpAQCAtOTgsMTcgJiM0Mzs5OCwxNyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKQogCiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAlwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTsKIAogCUdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAl3aGlsZSAoMSkgewogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpOwogCQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgJmFtcDsgMHhmZiwgVURfVkVDVE9SKTsKLQkJR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJCXZtcmVzdW1lKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKaW5kZXggZDFlZGFmZDVhZjc1NS4uMzc3ZGYwOWU1ODJhZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwpAQCAtNzgsOCAmIzQzOzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpCiAJCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkgewogCQkJZ2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTsKIAkJfSBlbHNlIHsKLQkJCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCQkJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKJiM0MzsJCQlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CQkJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAJCQlwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTsKIAkJfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCmluZGV4IDRhMTA1NmE2Y2I4ZGMuLjM4Yzk2ODlhYzYwMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jCkBAIC03NSwzMiAmIzQzOzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZCkKIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIHsKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKIAlHVUVTVF9TWU5DKDMpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwomIzQzOwlHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIHZteF9sMl9ndWVzdF9jb2RlKTsKIAogCUdVRVNUX1NZTkMoNSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJdm1sYXVuY2goKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCS8qIENoZWNrIHRoYXQgdGhlIGxhdW5jaGVkIHN0YXRlIGlzIHByZXNlcnZlZC4gICovCi0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwomIzQzOwlHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAKIAlHVUVTVF9TWU5DKDcpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTsKJiM0MzsJdm1yZXN1bWUoKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAogCXZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgJiM0MzsgMyk7CkBAIC0xMDgsMjggJiM0MzsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCXZtd3JpdGUoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpOwogCXZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKIAotCUdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSkpOwotCUdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTsKJiM0MzsJdm1wdHJsZCh2bXhfcGFnZXMtJmd0O3NoYWRvd192bWNzX2dwYSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpOwogCUdVRVNUX1NZTkMoOCk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCiAJdm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTsKIAlHVUVTVF9TWU5DKDkpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZWUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7dm1jc19ncGEpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCi0JR1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKSk7CiYjNDM7CXZtcHRybGQodm14X3BhZ2VzLSZndDtzaGFkb3dfdm1jc19ncGEpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogCUdVRVNUX1NZTkMoMTMpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7Ci0JR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwotCUdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpOwogfQogCiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2ZsYXR0ZW5fXykpIGd1ZXN0X2NvZGUodm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jCmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmMKQEAgLTI1LDEyICYjNDM7MjUsMTIgQEAgdm9pZCBsMV9ndWVzdF9jb2RlX3ZteChzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiB7CiAKIAlHVUVTVF9BU1NFUlQodm14LSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpOwomIzQzOwlsb2FkX3ZtY3Modm14KTsKIAogCXByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAkvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIGEgdHJpcGxlIGZhdWx0IGV2ZW50IGluamVjdGVkLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwogCUdVRVNUX0RPTkUoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuYwppbmRleCA0NjNmNzNhYTkxNTlhLi5mZTI5Yzg2OWEyMzU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jCkBAIC0zOCw4ICYjNDM7MzgsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSkKIHsKIAl1MzIgY29udHJvbDsKIAotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01MywxNCAmIzQzOzUzLDE0IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKQogCiAJLyogVHJ5IHRvIGxhdW5jaCBMMiB3aXRoIHRoZSBtZW1vcnktYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpOwomIzQzOwl2bWxhdW5jaCgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJdm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7CiAKIAkvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovCiAJR1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTsKLQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl2bXJlc3VtZSgpOwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCiAJR1VFU1RfRE9ORSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwppbmRleCBmOWI4OGE2ZjYxMTNkLi5lNTc4MjIxZGEyNDdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYwpAQCAtMzMsOCAmIzQzOzMzLDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiB7CiAJdTMyIGNvbnRyb2w7CiAKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJLyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqLwogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwpAQCAtNjIsNyAmIzQzOzYyLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogUnVuIEwyIHRvIHN3aXRjaCB0byB4MkFQSUMgbW9kZSwgd2hpY2ggaW4gdHVybiB3aWxsIHVuaW5oaWJpdCBBUElDdiwKIAkgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuCiAJICovCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAlHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTsKIAl2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICYjNDM7IHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTsKIAlHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpOwpAQCAtOTAsNyAmIzQzOzkwLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCiAJICogaGFuZGxlcyB0aGUgeDJBUElDID0mZ3Q7IHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyCiAJICogaXMgYWN0aXZlLgogCSAqLwotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpICZhbXA7IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKaW5kZXggYzgzNzkxMjRiMzE3Mi4uMzAxNzkzOGZhOTkzNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCkBAIC00MSw4ICYjNDM7NDEsOCBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAKIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogewotCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwotCUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CXByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTsKJiM0MzsJbG9hZF92bWNzKHZteF9wYWdlcyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CkBAIC01NSw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAlHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpICZhbXA7IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8CiAJCSAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpICZhbXA7IFNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVCkpOwogCi0JR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJdm1sYXVuY2goKTsKIAogCS8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqLwogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jCmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmMKQEAgLTM3LDggJiM0MzszNyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCUdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTsKIAogCUdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKLQlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpOwomIzQzOwlwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7CiYjNDM7CWxvYWRfdm1jcyh2bXhfcGFnZXMpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7CiAKQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCWd1ZXN0X2NyNCAmYW1wOz0gflg4Nl9DUjRfTEE1NzsKIAl2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAKIAlleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pOwogCUdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwppbmRleCBlYjgwMjFjMzNjZDQzLi5jZGE1M2RmMzM4ODhlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYwpAQCAtNzEsOSAmIzQzOzcxLDkgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAl1NjQgbDFfdHNjX2RlYWRsaW5lLCBsMl90c2NfZGVhZGxpbmU7CiAKIAlHVUVTVF9BU1NFUlQodm14X3BhZ2VzLSZndDt2bWNzX2dwYSk7Ci0JR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7Ci0JR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKJiM0MzsJcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpOwomIzQzOwlsb2FkX3ZtY3Modm14X3BhZ2VzKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtJmd0O3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpOwogCkBAIC05MCw3ICYjNDM7OTAsNyBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCSAgICAhKGN0cmxfZXhpdF9yZXYuY2xyICZhbXA7IFZNX0VYSVRfU0FWRV9WTVhfUFJFRU1QVElPTl9USU1FUikpCiAJCXJldHVybjsKIAotCUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXZtbGF1bmNoKCk7CiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJdm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSAmIzQzOyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7CiAKQEAgLTExMCw3ICYjNDM7MTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcykKIAogCWwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpICZndDsmZ3Q7IHZteF9wdF9yYXRlKSAmbHQ7Jmx0OyB2bXhfcHRfcmF0ZTsKIAotCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CXZtcmVzdW1lKCk7CiAKIAlsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMzYKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gVk1YIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdHdlYWtpbmcgdGhlIGhhbmRsaW5nIG9mIGBWTVBUUkxEYCBhbmQgYFZNUFRSU1RgIHdpdGhpbiBLVk0mIzM5O3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSSBzZWUgY2hhbmdlcyB0byBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLCBhbG9uZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc2VsZnRlc3RzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhgIGFuZCBlbHNld2hlcmUuCgpGb2N1c2luZyBvbiBgaGFuZGxlX3ZtcHRybGRgLCBpdCBzZWVtcyB3ZSYjMzk7cmUgbm93IGV4cGxpY2l0bHkgcHJldmVudGluZyBhICYjMzQ7bm9ybWFsJiMzNDsgYFZNUFRSTERgIGlmIHRoZSAmIzM0O0VubGlnaHRlbmVkJiMzNDsgdmVyc2lvbiBoYXMgYmVlbiB1c2VkLiBUaGUgY29kZSBub3cgdHJpZ2dlcnMgYSBVRCBleGNlcHRpb24gKGBVRF9WRUNUT1JgKSBpbiB0aGlzIGNhc2UuICBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGVzc2VudGlhbGx5LCBlbmZvcmNpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBlcnJvcmluZyBvdXQgaWYgdGhpbmdzIGFyZSBub3QgYXMgYW50aWNpcGF0ZWQuCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGBoYW5kbGVfdm1wdHJzdGAuIFByZXZpb3VzbHksIGlmIGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKClgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24gd291bGQgcmV0dXJuIDEsIG1lYW5pbmcgaXQgd291bGQgZWZmZWN0aXZlbHkgZG8gbm90aGluZy4gTm93LCB0aG91Z2gsIGl0JiMzOTtzIGNoYW5nZWQuIFdpdGggdGhlIGFkZGl0aW9uIG9mIGAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZgLCB0aGUgY29kZSBub3cgc2V0cyBgY3VycmVudF92bXB0cmAgdG8gYHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyYCB3aGVuIGl0IHNlZXMgYW4gZVZNQ1MuICBUaGVuIGl0IGdvZXMgb24gdG8gd3JpdGUgKnRoYXQqIHZhbHVlIHRvIGd1ZXN0IG1lbW9yeS4gIFRoaXMgYmVoYXZpb3IgbWFrZXMgc2Vuc2UgaWYgeW91JiMzOTtyZSB3b3JraW5nIHdpdGggSHlwZXItViBUTEZTLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtIb2xkIG9uLCBpcyB0aGlzIGdvaW5nIHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8mIzM0OyAgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgY3VycmVudF92bXB0cmAsIGEgYGdwYV90YCAoc28sIGEgYHU2NGApLiAgSXQmIzM5O3MgYXNzaWduZWQgZWl0aGVyIGB0b192bXgodmNwdSktJmd0O25lc3RlZC5odl9ldm1jc192bXB0cmAgb3IgYHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHJgLiBCb3RoIG9mIHRoZXNlIGFyZSB3aXRoaW4gdGhlIGBuZXN0ZWRfdm14YCBzdHJ1Y3QuIEJ1dCBhZnRlciBhIHNlY29uZCBsb29rLCBJIGNhbiBzZWUgdGhhdCBgaHZfZXZtY3Nfdm1wdHJgIGlzIGluaXRpYWxpemVkIHdoZW4gZVZNQ1MgaXMgbG9hZGVkIGFuZCBgY3VycmVudF92bXB0cmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBgVk1QVFJMRGAgZXhlY3V0ZXMuIFdlJiMzOTtyZSBub3QgcmVhZGluZyBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgZmllbGQuIFRoZSBwYXRjaCBpcyBzaW1wbHkgZW5zdXJpbmcgdGhhdCBpdCB3cml0ZXMgYSBrbm93biBHUEEgZm9yIGVWTUNTIHVzYWdlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgd3JpdGUgdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAgd2l0aGluIGBoYW5kbGVfdm1wdHJzdGAuIFRoZSBjb2RlIGdyYWJzIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgKGBndmFgKSBhbmQgd3JpdGVzIHRoZSBmdWxseSBpbml0aWFsaXplZCBgY3VycmVudF92bXB0cmAgdG8gaXQuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgYGN1cnJlbnRfdm1wdHJgIGlzIGFuIDgtYnl0ZSB2YWx1ZSBhbmQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4sIHNvIG5vIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZS4KClNvLCBhZnRlciB0aGlzIGRlZXBlciBkaXZlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciByaXNrcy4gSXQmIzM5O3Mgc2ltcGx5IGNoYW5naW5nIHRoZSAqdmFsdWUqIHdyaXR0ZW4gaW4gYSBzcGVjaWZpYyBlVk1DUyBzY2VuYXJpby4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgaW4gS1ZNJiMzOTtzIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZS4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igd2hlbiBlVk1DUyBpcyB1c2VkOiBpbnN0ZWFkIG9mIHJldHVybmluZyAxIChkb2luZyBub3RoaW5nKSwgaXQgbm93IHNldHMgdGhlIGxvY2FsIHZhcmlhYmxlIGBjdXJyZW50X3ZtcHRyYCB0byBgaHZfZXZtY3Nfdm1wdHJgIGFuZCB3cml0ZXMgaXQgdG8gZ3Vlc3QgbWVtb3J5LiBgY3VycmVudF92bXB0cmAgaXMgYSBgZ3BhX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGd1ZXN0IHZpYSBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gVGhlcmUgYXJlIG5vIHN0cnVjdHMgd2l0aCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGludm9sdmVkLiBUaGUgcmVzdCBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gS1ZNIHNlbGZ0ZXN0cy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0mIzM5O3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLiBJbiBgaGFuZGxlX3ZtcHRyc3RgLCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQ6IGluc3RlYWQgb2YgcmV0dXJuaW5nIDEgKGRvaW5nIG5vdGhpbmcpLCBpdCBub3cgc2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAgYW5kIHdyaXRlcyBpdCB0byBndWVzdCBtZW1vcnkuIGBjdXJyZW50X3ZtcHRyYCBpcyBhIGBncGFfdGAgKGEgNjQtYml0IGludGVnZXIpLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byB0aGUgZ3Vlc3QgdmlhIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGVyZSBhcmUgbm8gc3RydWN0cyB3aXRoIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgaW52b2x2ZWQuIFRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBLVk0gc2VsZnRlc3RzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU1OjI2LjM2NzIyNDYzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDMwNzkwNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV92bXB0cmxkXCIsXG4gICAgXCJoYW5kbGVfdm1wdHJzdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0ncyBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvZGUuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZDogaW5zdGVhZCBvZiByZXR1cm5pbmcgMSAoZG9pbmcgbm90aGluZyksIGl0IG5vdyBzZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYCBhbmQgd3JpdGVzIGl0IHRvIGd1ZXN0IG1lbW9yeS4gYGN1cnJlbnRfdm1wdHJgIGlzIGEgYGdwYV90YCAoYSA2NC1iaXQgaW50ZWdlciksIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBndWVzdCB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIFRoZXJlIGFyZSBubyBzdHJ1Y3RzIHdpdGggcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnZvbHZlZC4gVGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGluIEtWTSBzZWxmdGVzdHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gbmVzdGVkIFZNWCB3aGVuIEVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBpcyB1c2VkLiBJdCBjaGFuZ2VzIFZNUFRSTEQgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGFuZCBWTVBUUlNUIHRvIHJldHVybiB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6MjYuMzY3MjMwODY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEyODE5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzOTljMmViYjA0MWQyNjk4MDE4M2FhZTEzNDYzNTY4NmJiMDRjYjA0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjU1OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC01ODk3LDYgKzU4OTcsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuK1xcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuK1xcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG4rXFx0XFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFxcdTAwMjZ2bXB0ciwgXFx1MDAyNnIpKVxcbiBcXHRcXHRyZXR1cm4gcjtcXG4gXFxuQEAgLTU5MDYsMTAgKzU5MTIsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHZtcHRyID09IHZteC1cXHUwMDNlbmVzdGVkLnZteG9uX3B0cilcXG4gXFx0XFx0cmV0dXJuIG5lc3RlZF92bXhfZmFpbCh2Y3B1LCBWTVhFUlJfVk1QVFJMRF9WTVhPTl9QT0lOVEVSKTtcXG4gXFxuLVxcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuLVxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXG4gXFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgIT0gdm1wdHIpIHtcXG4gXFx0XFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgKmdoYyA9IFxcdTAwMjZ2bXgtXFx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XFxuIFxcdFxcdHN0cnVjdCB2bWNzX2hkciBoZHI7XFxuQEAgLTU5NjIsNyArNTk2NCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbi1cXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcXG4rXFx0Z3BhX3QgY3VycmVudF92bXB0cjtcXG4gXFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG4gXFx0Z3ZhX3QgZ3ZhO1xcbiBcXHRpbnQgcjtcXG5AQCAtNTk3MCw4ICs1OTcyLDE2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuK1xcdC8qXFxuK1xcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxcbitcXHQgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuXFxuK1xcdCAqL1xcbisjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG4rXFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcXG4rXFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbitcXHRlbHNlXFxuKyNlbmRpZlxcbitcXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcXG4gXFxuIFxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcXG4gXFx0XFx0XFx0XFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXFx1MDAyNmd2YSkpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5pbmRleCA4MmE4ZWE2YjY2MWYwLi5jNWI5ZDI2ZjZjZGJlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5AQCAtMjY1LDE0ICsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1wdHJzdCh1NjQgKnZhbHVlKVxcbi17XFxuLVxcdCp2YWx1ZSA9IGN1cnJlbnRfdnBfYXNzaXN0LVxcdTAwM2VjdXJyZW50X25lc3RlZF92bWNzIFxcdTAwMjZcXG4tXFx0XFx0fkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpXFxuIHtcXG4gXFx0c3dpdGNoIChlbmNvZGluZykge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5pbmRleCA2ZTZmNzAwMzU1MDhhLi4yODJiOGFhZmY3OTk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbkBAIC0xMzE4LDcgKzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTtcXG4gXFx0XFxcImxlYSAxZiglJXJpcCksICUlcjEwXFxcXG5cXFxcdFxcXCJcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcXCJsZWEgMmYoJSVyaXApLCAlJXIxMVxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRmZXAgXFxcIjE6IFxcXCIgaW5zbiBcXFwiXFxcXG5cXFxcdFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcXCJ4b3IgJSVyOSwgJSVyOVxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXFwibW92ICQwLCAlJXI5ZFxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXFwiMjpcXFxcblxcXFx0XFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFxcIm1vdiAgJSVyOWIsICVbdmVjdG9yXVxcXFxuXFxcXHRcXFwiXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXFwibW92ICAlJXIxMCwgJVtlcnJvcl9jb2RlXVxcXFxuXFxcXHRcXFwiXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbmluZGV4IDA0ZjVlMzRkZWEzYWUuLmNkODJhNmJlNjk2M2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuQEAgLTMwOSwxMjYgKzMwOSw5MSBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XFxuIFxcbiAjaW5jbHVkZSBcXFwiZXZtY3MuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxcbi17XFxuLVxcdHU4IHJldDtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fIChcXFwidm14b24gJVtwYV07IHNldG5hICVbcmV0XVxcXCJcXG4tXFx0XFx0OiBbcmV0XVxcXCI9cm1cXFwiKHJldClcXG4tXFx0XFx0OiBbcGFdXFxcIm1cXFwiKHBoeXMpXFxuLVxcdFxcdDogXFxcImNjXFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rI2RlZmluZSBHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIF9fciwgX19wYSlcXHRcXHRcXFxcXFxuK1xcdF9fR1VFU1RfQVNTRVJUKCFfX3IsIF9fc3RyaW5naWZ5KGluc24pIFxcXCJbMHglbHhdIGhpdCAlc1xcXCIsXFx0XFxcXFxcbitcXHRcXHQgICAgICAgX19wYSwgX19yIFxcdTAwM2MgMCA/IFxcXCJWTS1GYWlsXFxcIiA6IGV4X3N0cihfX3IpKVxcbitcXG4rI2RlZmluZSBCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKGluc24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHU2NCBlcnJvcl9jb2RlO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dTggdmVjdG9yO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dTggZmFpbGVkO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pIFxcXCIgJVtwYV1cXFwiKVxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiXFxcXG5cXFxcdHNldG5hICVbZmFpbGVkXVxcXCJcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgOiBLVk1fQVNNX1NBRkVfT1VUUFVUUyh2ZWN0b3IsIGVycm9yX2NvZGUpLFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFtmYWlsZWRdXFxcIj1xbVxcXCIoZmFpbGVkKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFtwYV1cXFwibVxcXCIodm1jc19wYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgOiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIiwgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTtcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0dXJuIHZlY3RvciA/IHZlY3RvciA6IGZhaWxlZCA/IC1FSU5WQUwgOiAwO1xcdFxcdFxcdFxcXFxcXG4rfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih1NjQgdm1jc19wYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCByZXQgPSBfXyMjaW5zbih2bWNzX3BhKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0R1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpO1xcdFxcdFxcXFxcXG4gfVxcbiBcXG4rQlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXhvbilcXG4rQlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXB0cmxkKVxcbitCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtY2xlYXIpXFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14b2ZmKHZvaWQpXFxuIHtcXG4gXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInZteG9mZlxcXCIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKVxcbi17XFxuLVxcdHU4IHJldDtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fIChcXFwidm1jbGVhciAlW3BhXTsgc2V0bmEgJVtyZXRdXFxcIlxcbi1cXHRcXHQ6IFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbi1cXHRcXHQ6IFtwYV1cXFwibVxcXCIodm1jc19wYSlcXG4tXFx0XFx0OiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKVxcbi17XFxuLVxcdHU4IHJldDtcXG4tXFxuLVxcdGlmIChlbmFibGVfZXZtY3MpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fIChcXFwidm1wdHJsZCAlW3BhXTsgc2V0bmEgJVtyZXRdXFxcIlxcbi1cXHRcXHQ6IFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbi1cXHRcXHQ6IFtwYV1cXFwibVxcXCIodm1jc19wYSlcXG4tXFx0XFx0OiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cnN0KHU2NCAqdmFsdWUpXFxuK3N0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3Qodm9pZClcXG4ge1xcbi1cXHR1NjQgdG1wO1xcbitcXHR1NjQgdmFsdWUgPSAwO1xcbiBcXHR1OCByZXQ7XFxuIFxcbi1cXHRpZiAoZW5hYmxlX2V2bWNzKVxcbi1cXHRcXHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XFxuLVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwidm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXFxcIlxcbi1cXHRcXHQ6IFt2YWx1ZV1cXFwiPW1cXFwiKHRtcCksIFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbitcXHRcXHQ6IFt2YWx1ZV1cXFwiPW1cXFwiKHZhbHVlKSwgW3JldF1cXFwiPXJtXFxcIihyZXQpXFxuIFxcdFxcdDogOiBcXFwiY2NcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIFxcbi1cXHQqdmFsdWUgPSB0bXA7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEEgd3JhcHBlciBhcm91bmQgdm1wdHJzdCB0aGF0IGlnbm9yZXMgZXJyb3JzIGFuZCByZXR1cm5zIHplcm8gaWYgdGhlXFxuLSAqIHZtcHRyc3QgaW5zdHJ1Y3Rpb24gZmFpbHMuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxcbi17XFxuLVxcdHU2NCB2YWx1ZSA9IDA7XFxuLVxcdHZtcHRyc3QoXFx1MDAyNnZhbHVlKTtcXG4rXFx0X19HVUVTVF9BU1NFUlQoIXJldCwgXFxcInZtcHRyc3QgZmFpbGVkXFxcIik7XFxuIFxcdHJldHVybiB2YWx1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcXG4te1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4tXFx0XFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XFxuLVxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbi1cXHRcXHRcXHQgICAgIFxcXCJ2bWxhdW5jaDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuLVxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiKCh1NjQpSE9TVF9SU1ApLFxcbi1cXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKSxcXG4tXFx0XFx0XFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxcbi17XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRpZiAoZW5hYmxlX2V2bWNzKVxcbi1cXHRcXHRyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTtcXG4tXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuLVxcdFxcdFxcdCAgICAgXFxcInZtcmVzdW1lO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4tXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFxuLVxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApLFxcbi1cXHRcXHRcXHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuLVxcdHJldHVybiByZXQ7XFxuKyNkZWZpbmUgQlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlMoaW5zbilcXHRcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHZvaWQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbit7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpbnQgcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiAoZW5hYmxlX2V2bWNzKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmV0dXJuIGV2bWNzXyMjaW5zbigpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcXFwiXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgX19zdHJpbmdpZnkoaW5zbilcXFwiO1xcXCJcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKSxcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyZXR1cm4gcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih2b2lkKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aW50IHJldDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0ID0gX18jI2luc24oKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fR1VFU1RfQVNTRVJUKCFyZXQsIF9fc3RyaW5naWZ5KGluc24pIFxcXCIgaGl0IFZNLUZhaWxcXFwiKTtcXHRcXHRcXFxcXFxuIH1cXG4rQlVJTERfVk1YX1ZNX0VOVFJZX0hFTFBFUlModm1sYXVuY2gpXFxuK0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtcmVzdW1lKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHZtY2FsbCh2b2lkKVxcbiB7XFxuQEAgLTU1MCw5ICs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3Ige1xcbiB9O1xcbiBcXG4gc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpO1xcbi1ib29sIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KTtcXG4rdm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XFxuIHZvaWQgcHJlcGFyZV92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdm9pZCAqZ3Vlc3RfcmlwKTtcXG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcXG4rdm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcXG4gXFxuIGJvb2wgZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCh2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcXG5pbmRleCBlMTllOGI1YTA5YzVhLi42YTE4MTVmYjk3ZTk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcXG5AQCAtMzMsMTQgKzMzLDE0IEBAIF9fYXNtX18oXFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IHZjcHVfaWQpXFxuIHtcXG4gXFx0R1VFU1RfQVNTRVJUKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbitcXHRsb2FkX3ZtY3Modm14KTtcXG4gXFx0R1VFU1RfQVNTRVJUKGVwdF8xZ19wYWdlc19zdXBwb3J0ZWQoKSk7XFxuIFxcbiBcXHQqKHU2NCAqKXZteC1cXHUwMDNlc3RhY2sgPSB2Y3B1X2lkO1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14LCBtZW1zdHJlc3NfbDJfZ3Vlc3RfZW50cnkpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xcbmluZGV4IDA4OWUxYThhZjUzZmMuLjVjNmNhZGMwODQwNWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpXFxuIFxcdHJldHVybiB2bXg7XFxuIH1cXG4gXFxuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuK3ZvaWQgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIHtcXG4gXFx0dTY0IGZlYXR1cmVfY29udHJvbDtcXG4gXFx0dTY0IHJlcXVpcmVkO1xcbkBAIC0xNjMsMjggKzE2MywyMCBAQCBib29sIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiBcXG4gXFx0LyogRW50ZXIgVk1YIHJvb3Qgb3BlcmF0aW9uLiAqL1xcbiBcXHQqKHUzMiAqKSh2bXgtXFx1MDAzZXZteG9uKSA9IHZtY3NfcmV2aXNpb24oKTtcXG4tXFx0aWYgKHZteG9uKHZteC1cXHUwMDNldm14b25fZ3BhKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHZteG9uKHZteC1cXHUwMDNldm14b25fZ3BhKTtcXG4gfVxcbiBcXG4tYm9vbCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbit2b2lkIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIHtcXG4gXFx0LyogTG9hZCBhIFZNQ1MuICovXFxuIFxcdCoodTMyICopKHZteC1cXHUwMDNldm1jcykgPSB2bWNzX3JldmlzaW9uKCk7XFxuLVxcdGlmICh2bWNsZWFyKHZteC1cXHUwMDNldm1jc19ncGEpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHZtY2xlYXIodm14LVxcdTAwM2V2bWNzX2dwYSk7XFxuIFxcbi1cXHRpZiAodm1wdHJsZCh2bXgtXFx1MDAzZXZtY3NfZ3BhKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR2bXB0cmxkKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbiBcXG4gXFx0LyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi9cXG4gXFx0Kih1MzIgKikodm14LVxcdTAwM2VzaGFkb3dfdm1jcykgPSB2bWNzX3JldmlzaW9uKCkgfCAweDgwMDAwMDAwdWw7XFxuLVxcdGlmICh2bWNsZWFyKHZteC1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHZtY2xlYXIodm14LVxcdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBlcHRfdnBpZF9jYXBfc3VwcG9ydGVkKHU2NCBtYXNrKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xcbmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmNcXG5AQCAtNzAsOCArNzAsOCBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiB7XFxuLVxcdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xcbi1cXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XFxuK1xcdGxvYWRfdm1jcyh2bXgpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XFxuIFxcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4gXFx0XFx0dm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8IENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqbmVzdGVkX3Rlc3RfZGF0YSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5AQCAtNTUsMTEgKzU1LDExIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLFxcbiBcXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVxcdTAwM2V2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy1cXHUwMDNldnBfYXNzaXN0KTtcXG4gXFx0ZXZtY3NfZW5hYmxlKCk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xcbiBcXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHQvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi9cXG4gXFx0c3luY193aXRoX2hvc3QoMik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXFxuaW5kZXggNjNlYTE1MzNlNGVhZC4uYjdjMmEyNTQyOTFlNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xcbkBAIC0yMyw3ICsyMywxMSBAQCBzdGF0aWMgaW50IHVkX2NvdW50O1xcbiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVkX2NvdW50Kys7XFxuLVxcdHJlZ3MtXFx1MDAzZXJpcCArPSAzOyAvKiBWTUxBVU5DSCAqL1xcbitcXHQvKlxcbitcXHQgKiBWTUxBVU5DSCBpbnNuIGNhbid0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0XFxuK1xcdCAqIGx1Y2tpbHkgdGhlIGluc3RydWN0aW9uIGlzIGFsd2F5cyB0aHJlZSBieXRlcy5cXG4rXFx0ICovXFxuK1xcdHJlZ3MtXFx1MDAzZXJpcCArPSAzO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcXG5AQCAtODksMjAgKzkzLDE5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXFxuIFxcdGVuYWJsZV92cF9hc3Npc3QoaHZfcGFnZXMtXFx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVxcdTAwM2V2cF9hc3Npc3QpO1xcbiBcXHRldm1jc19lbmFibGUoKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuIFxcdEdVRVNUX1NZTkMoMyk7XFxuIFxcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuK1xcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cXG4rXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSAtMSk7XFxuIFxcbiBcXHRHVUVTVF9TWU5DKDQpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbiBcXHRHVUVTVF9TWU5DKDUpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2VyZXZpc2lvbl9pZCA9IC0xdTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlcmV2aXNpb25faWQgPSBFVk1DU19WRVJTSU9OO1xcbiBcXHRHVUVTVF9TWU5DKDYpO1xcbiBcXG5AQCAtMTE3LDE3ICsxMjAsMTcgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcXG4gXFx0Y3VycmVudF92cF9hc3Npc3QtXFx1MDAzZW5lc3RlZF9jb250cm9sLmZlYXR1cmVzLmRpcmVjdGh5cGVyY2FsbCA9IDE7XFxuIFxcdCoodTMyICopKGh2X3BhZ2VzLVxcdTAwM2VwYXJ0aXRpb25fYXNzaXN0KSA9IDA7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xcbiBcXHRHVUVTVF9BU1NFUlRfRVEoKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFxcdTAwMjYgMHhmZiksIE5NSV9WRUNUT1IpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbitcXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBOTUkgZm9yY2VzIEwyLVxcdTAwM2VMMSBleGl0LCByZXN1bWluZyBMMiBhbmQgaG9wZSB0aGF0IEVWTUNTIGlzXFxuIFxcdCAqIHVwLXRvLWRhdGUgKFJJUCBwb2ludHMgd2hlcmUgaXQgc2hvdWxkIGFuZCBub3QgYXQgdGhlIGJlZ2lubmluZ1xcbiBcXHQgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuXFxuIFxcdCAqL1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQygxMCk7XFxuIFxcbkBAIC0xMzgsMTMgKzE0MSwxMyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxcbiBcXHR2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgfFxcbiBcXHRcXHRDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTKTtcXG4gXFx0X19zZXRfYml0KE1TUl9GU19CQVNFIFxcdTAwMjYgMHgxZmZmLCB2bXhfcGFnZXMtXFx1MDAzZW1zciArIDB4NDAwKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0dm1yZXN1bWUoKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXFxuIFxcbiBcXHQvKiBFbmFibGUgZW5saWdodGVuZWQgTVNSIGJpdG1hcCAqL1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9lbmxpZ2h0ZW5tZW50c19jb250cm9sLm1zcl9iaXRtYXAgPSAxO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2VndWVzdF9yaXAgKz0gMjsgLyogcmRtc3IgKi9cXG4gXFxuQEAgLTE1MiwxNCArMTU1LDE0IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXFxuIFxcdF9fc2V0X2JpdChNU1JfR1NfQkFTRSBcXHUwMDI2IDB4MWZmZiwgdm14X3BhZ2VzLVxcdTAwM2Vtc3IgKyAweDQwMCk7XFxuIFxcdC8qIE1ha2Ugc3VyZSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUCBpcyBzZXQgKi9cXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHQvKiBNYWtlIHN1cmUgd2UgZG9uJ3Qgc2VlIEVYSVRfUkVBU09OX01TUl9SRUFEIGhlcmUgc28gZU1TUiBiaXRtYXAgd29ya3MgKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZWd1ZXN0X3JpcCArPSAzOyAvKiB2bWNhbGwgKi9cXG4gXFxuIFxcdC8qIE5vdyB0ZWxsIEtWTSB3ZSd2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi9cXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIFxcdTAwMjY9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0dm1yZXN1bWUoKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXFxuIFxcbkBAIC0xNjcsMjEgKzE3MCwyOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxcbiBcXHQgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLFxcbiBcXHQgKiBubyBWTUNBTEwgZXhpdCBleHBlY3RlZC5cXG4gXFx0ICovXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xcbiBcXHQvKiBFbmFibGUgc3ludGhldGljIHZtZXhpdCAqL1xcbiBcXHQqKHUzMiAqKShodl9wYWdlcy1cXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAxO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gSFZfVk1YX1NZTlRIRVRJQ19FWElUX1JFQVNPTl9UUkFQX0FGVEVSX0ZMVVNIKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHRHVUVTVF9TWU5DKDExKTtcXG4gXFxuLVxcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xcbitcXHQvKiBWTVBUUkxEIGluc3RydWN0aW9uIGNhdXNlcyAjVUQgYWZ0ZXIgZW5saWdodGVuZWQgVk1MQVVOQ0ggKi9cXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1wdHJsZChodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpID09IFVEX1ZFQ1RPUik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEuIEdVRVNUX1NZTkMoMTIpIHNpZ25hbHNcXG4rXFx0ICogdGhlIGhvc3QgdG8gZW5hYmxlIGd1ZXN0X3VkX2hhbmRsZXIoKSB3aGljaCBjYW5ub3QgYmUgZW5hYmxlZCBiZWZvcmVoYW5kXFxuK1xcdCAqIHRvIG5vdCBvdmVycmlkZSB0aGUgZGVmYXVsdCBmaXh1cCBoYW5kbGVyIGZyb20gS1ZNX0FTTV9TQUZFKCkuXFxuK1xcdCAqL1xcbitcXHRHVUVTVF9TWU5DKDEyKTtcXG4gXFx0ZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jcyk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XFxuIFxcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuQEAgLTI1Myw3ICsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDMsIHZteF9wYWdlc19ndmEsIGh2X3BhZ2VzX2d2YSwgYWRkcl9ndmEyZ3BhKHZtLCBoY2FsbF9wYWdlKSk7XFxuIFxcdHZjcHVfc2V0X21zcih2Y3B1LCBIVl9YNjRfTVNSX1ZQX0lOREVYLCB2Y3B1LVxcdTAwM2VpZCk7XFxuIFxcbi1cXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xcbiBcXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7XFxuIFxcbiBcXHRwcl9pbmZvKFxcXCJSdW5uaW5nIEwxIHdoaWNoIHVzZXMgRVZNQ1MgdG8gcnVuIEwyXFxcXG5cXFwiKTtcXG5AQCAtMjgzLDcgKzI5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHRcXHQvKiBGb3JjZSBpbW1lZGlhdGUgTDItXFx1MDAzZUwxIGV4aXQgYmVmb3JlIHJlc3VtaW5nICovXFxuIFxcdFxcdGlmIChzdGFnZSA9PSA4KSB7XFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIkluamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcIkluamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0aW5qZWN0X25taSh2Y3B1KTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMjkzLDkgKzMwMywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHQgKiBLVk1fU1RBVEVfTkVTVEVEX0VWTUNTIGlzIG5vdCBsb3N0LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHN0YWdlID09IDkpIHtcXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiVHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcIlRyeWluZyBleHRyYSBLVk1fR0VUX05FU1RFRF9TVEFURS9LVk1fU0VUX05FU1RFRF9TVEFURSBjeWNsZVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpO1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc3RhZ2UgPT0gMTIpIHtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcIlRyeWluZyBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCB3aXRoIGFuIGludmFsaWQgUFRSXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBkb25lOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXFxuaW5kZXggMjVhMTgyYmUwMGE5Ny4uMzM3ZDNjMjhiYzZkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXFxuQEAgLTQyLDEzICs0MiwxMyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiB7XFxuLVxcdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xcbi1cXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XFxuK1xcdGxvYWRfdm1jcyh2bXgpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XFxuIFxcbiBcXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXFxuaW5kZXggYjk3NGNmYjM0N2Q2ZS4uMWY0YTVlNDRhNmVmMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xcbkBAIC0zMCwxMyArMzAsMTMgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiB7XFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCgwKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcXG5pbmRleCAyNmI0NzRiZjEzNTM1Li43OTg3Y2U1MGMzODI5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jXFxuQEAgLTkzLDggKzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIFxcdHZvaWQgKmwyX3JpcDtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVCh2bXgtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcXG4rXFx0bG9hZF92bWNzKHZteCk7XFxuIFxcbiBcXHRpZiAodm14LVxcdTAwM2VlcHRwX2dwYSlcXG4gXFx0XFx0bDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDtcXG5AQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiBcXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9yaXApO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyhURVNUX1NZTkNfTk9fRkFVTFQpO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHRHVUVTVF9TWU5DKFRFU1RfU1lOQ19OT19GQVVMVCk7XFxuIFxcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xcbmluZGV4IGUwOGM2YjA2OTdlNTAuLjExZmU0YTMxZWRhMGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcXG5AQCAtNjYsOCArNjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4gXFx0XFx0XFx0XFx0XFx0ICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTtcXG4gXFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSkpO1xcbi1cXHRcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHRlc3RfZGF0YSkpO1xcbitcXHRcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7XFxuK1xcdFxcdGxvYWRfdm1jcyh0ZXN0X2RhdGEpO1xcbiBcXG4gXFx0XFx0cHJlcGFyZV92bWNzKHRlc3RfZGF0YSwgTlVMTCk7XFxuIFxcdFxcdEdVRVNUX0FTU0VSVCghdm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSk7XFxuQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4gXFx0XFx0XFx0ZXhpdF9pbnNuX2xlbiA9IHZtY2ItXFx1MDAzZWNvbnRyb2wubmV4dF9yaXAgLSB2bWNiLVxcdTAwM2VzYXZlLnJpcDtcXG4gXFx0XFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtY2ItXFx1MDAzZXNhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0R1VFU1RfQVNTRVJUX0VRKGkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKSwgMCk7XFxuK1xcdFxcdFxcdGkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTtcXG4gXFx0XFx0XFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcXG4gXFx0XFx0XFx0ZXhpdF9pbnNuX2xlbiA9IHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pO1xcbiBcXHRcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xcbmluZGV4IGFlZWMzMTIxYzhlODMuLmMzNmMxMWI1ZjUxOGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xcbkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSlcXG4ge1xcbiBcXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2NvZGUpKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVF9FUSh2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCksIDApO1xcbitcXHR2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7XFxuIFxcbiBcXHRpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUilcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMjUsOSArMTI1LDkgQEAgc3RhdGljIHZvaWQgdm14X3J1bl9sMih2b2lkICpsMl9jb2RlLCBpbnQgdmVjdG9yLCB1MzIgZXJyb3JfY29kZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4ge1xcbi1cXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUX0VRKGxvYWRfdm1jcyh2bXgpLCB0cnVlKTtcXG4rXFx0bG9hZF92bWNzKHZteCk7XFxuIFxcbiBcXHRwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTtcXG4gXFx0R1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmNcXG5pbmRleCA4YzJiYTk2NzQ1NThlLi4xMDFjMWZlNzllZWI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xcbkBAIC00MCwyMSArNDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiB7XFxuIFxcdHVpbnRwdHJfdCBzYXZlX2NyMztcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbiBcXHQvKiBUcnkgdG8gcnVuIEwyIHdpdGggaW52YWxpZCBDUjMgYW5kIG1ha2Ugc3VyZSBpdCBmYWlscyAqL1xcbiBcXHRzYXZlX2NyMyA9IHZtcmVhZHooR1VFU1RfQ1IzKTtcXG4gXFx0dm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09XFxuIFxcdFxcdCAgICAgKEVYSVRfUkVBU09OX0ZBSUxFRF9WTUVOVFJZIHwgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSkpO1xcbiBcXG4gXFx0LyogTm93IHJlc3RvcmUgQ1IzIGFuZCBtYWtlIHN1cmUgTDIgcnVucyBzdWNjZXNzZnVsbHkgKi9cXG4gXFx0dm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcbiBcXHRHVUVTVF9ET05FKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXFxuaW5kZXggMmUwNDU2Mzc5MGZmMi4uZDZjNDQzZTNkMTQ3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xcbkBAIC01NSwxMiArNTUsMTIgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14LCB1NjQgZXhwZWN0ZWRfZmF1bHRfZ3BhLFxcbiBcXHR1NjQgZXhpdF9xdWFsO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbitcXHRsb2FkX3ZtY3Modm14KTtcXG4gXFxuIFxcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2VudHJ5KTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHQvKiBWZXJpZnkgd2UgZ290IGFuIEVQVCB2aW9sYXRpb24gZXhpdCAqL1xcbiBcXHRfX0dVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXFxuaW5kZXggY2I3OWQ3Yjk2MTljMi4uYzYwZGVhODk5NjI0YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXFxuQEAgLTg2LDggKzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxcbiBcXHRcXHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhO1xcbiBcXHRcXHR1MzIgY29udHJvbDtcXG4gXFxuLVxcdFxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdFxcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0XFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcdFxcdGNvbnRyb2wgPSB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpO1xcbkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSlcXG4gXFx0XFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTtcXG4gXFx0XFx0dm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTtcXG4gXFxuLVxcdFxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdFxcdHZtbGF1bmNoKCk7XFxuIFxcdFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtID0gZGF0YTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXFxuaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcXG5AQCAtMTA1LDggKzEwNSw4IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcXG4gXFx0LyogY2hlY2sgdGhhdCBMMSdzIGZyZXF1ZW5jeSBsb29rcyBhbHJpZ2h0IGJlZm9yZSBsYXVuY2hpbmcgTDIgKi9cXG4gXFx0Y2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0LyogcHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uICovXFxuIFxcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHR2bXdyaXRlKFRTQ19NVUxUSVBMSUVSX0hJR0gsIFRTQ19NVUxUSVBMSUVSX0wyIFxcdTAwM2VcXHUwMDNlIDMyKTtcXG4gXFxuIFxcdC8qIGxhdW5jaCBMMiAqL1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFxuIFxcdC8qIGNoZWNrIHRoYXQgTDEncyBmcmVxdWVuY3kgc3RpbGwgbG9va3MgZ29vZCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcXG5AQCAtOTgsMTcgKzk4LDE3IEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXFxuIFxcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXFxuIHtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcXG4rXFx0bG9hZF92bWNzKHZteCk7XFxuIFxcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpKSk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR2bWxhdW5jaCgpO1xcbiBcXHR3aGlsZSAoMSkge1xcbiBcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xcbiBcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xcbi1cXHRcXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHRcXHR2bXJlc3VtZSgpO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbmluZGV4IGQxZWRhZmQ1YWY3NTUuLjM3N2RmMDllNTgyYWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuQEAgLTc4LDggKzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpXFxuIFxcdFxcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkge1xcbiBcXHRcXHRcXHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGwyX2d1ZXN0X2NvZGUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4tXFx0XFx0XFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4rXFx0XFx0XFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xcbitcXHRcXHRcXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcXG4gXFx0XFx0XFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcdFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcXG5pbmRleCA0YTEwNTZhNmNiOGRjLi4zOGM5Njg5YWM2MDE0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcXG5AQCAtNzUsMzIgKzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZClcXG4gc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiB7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcXG4gXFx0R1VFU1RfU1lOQygzKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbitcXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyg0KTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuIFxcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCB2bXhfbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbiBcXHRHVUVTVF9TWU5DKDUpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuK1xcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0LyogQ2hlY2sgdGhhdCB0aGUgbGF1bmNoZWQgc3RhdGUgaXMgcHJlc2VydmVkLiAgKi9cXG4tXFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyg3KTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFxuIFxcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyAzKTtcXG5AQCAtMTA4LDI4ICsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTKTtcXG4gXFx0dm13cml0ZShWTUNTX0xJTktfUE9JTlRFUiwgdm14X3BhZ2VzLVxcdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcXG4rXFx0dm1wdHJsZCh2bXhfcGFnZXMtXFx1MDAzZXNoYWRvd192bWNzX2dwYSk7XFxuK1xcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xcbiBcXHRHVUVTVF9TWU5DKDgpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XFxuK1xcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xcbiBcXG4gXFx0dm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTtcXG4gXFx0R1VFU1RfU1lOQyg5KTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZlZSk7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVxcdTAwM2V2bWNzX2dwYSkpO1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXB0cmxkKHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtXFx1MDAzZXNoYWRvd192bWNzX2dwYSkpO1xcbitcXHR2bXB0cmxkKHZteF9wYWdlcy1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZmZmVlKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xcbi1cXHRHVUVTVF9BU1NFUlQodm1yZXN1bWUoKSk7XFxuK1xcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcXG4gXFx0R1VFU1RfU1lOQygxMyk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xcbitcXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKF9fdm1yZXN1bWUoKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fZmxhdHRlbl9fKSkgZ3Vlc3RfY29kZSh2b2lkICphcmcpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xcbmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXFxuQEAgLTI1LDEyICsyNSwxMiBAQCB2b2lkIGwxX2d1ZXN0X2NvZGVfdm14KHN0cnVjdCB2bXhfcGFnZXMgKnZteClcXG4ge1xcbiBcXG4gXFx0R1VFU1RfQVNTRVJUKHZteC1cXHUwMDNldm1jc19ncGEpO1xcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xcbitcXHRsb2FkX3ZtY3Modm14KTtcXG4gXFxuIFxcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0LyogTDIgc2hvdWxkIHRyaXBsZSBmYXVsdCBhZnRlciBhIHRyaXBsZSBmYXVsdCBldmVudCBpbmplY3RlZC4gKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XFxuIFxcdEdVRVNUX0RPTkUoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jXFxuaW5kZXggNDYzZjczYWE5MTU5YS4uZmUyOWM4NjlhMjM1NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcXG5AQCAtMzgsOCArMzgsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSlcXG4ge1xcbiBcXHR1MzIgY29udHJvbDtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xcbi1cXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbiBcXG4gXFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG5AQCAtNTMsMTQgKzUzLDE0IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKVxcbiBcXG4gXFx0LyogVHJ5IHRvIGxhdW5jaCBMMiB3aXRoIHRoZSBtZW1vcnktYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovXFxuIFxcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0dm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7XFxuIFxcbiBcXHQvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovXFxuIFxcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXFxuaW5kZXggZjliODhhNmY2MTEzZC4uZTU3ODIyMWRhMjQ3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXFxuQEAgLTMzLDggKzMzLDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIHtcXG4gXFx0dTMyIGNvbnRyb2w7XFxuIFxcbi1cXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4tXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4rXFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xcbitcXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcXG4gXFxuIFxcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdCAqIFJ1biBMMiB0byBzd2l0Y2ggdG8geDJBUElDIG1vZGUsIHdoaWNoIGluIHR1cm4gd2lsbCB1bmluaGliaXQgQVBJQ3YsXFxuIFxcdCAqIGFzIEtWTSBzaG91bGQgZm9yY2UgdGhlIEFQSUMgSUQgYmFjayB0byBpdHMgZGVmYXVsdC5cXG4gXFx0ICovXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xcbiBcXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICsgdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTikpO1xcbiBcXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFxcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCk7XFxuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdCAqIGhhbmRsZXMgdGhlIHgyQVBJQyA9XFx1MDAzZSB4QVBJQyB0cmFuc2l0aW9uIGFuZCBpbmhpYml0cyBBUElDdiB3aGlsZSBMMlxcbiBcXHQgKiBpcyBhY3RpdmUuXFxuIFxcdCAqL1xcbi1cXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR2bXJlc3VtZSgpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG4gXFx0R1VFU1RfQVNTRVJUKCEocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFxcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCkpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG5pbmRleCBjODM3OTEyNGIzMTcyLi4zMDE3OTM4ZmE5OTM3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuQEAgLTQxLDggKzQxLDggQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIHtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcXG4rXFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XFxuIFxcbiBcXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXFxuIFxcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xcbkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHRHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIFxcdTAwMjYgQ1BVX0JBU0VEX0FDVElWQVRFX1NFQ09OREFSWV9DT05UUk9MUykgfHxcXG4gXFx0XFx0ICAgICAhKHZtcmVhZHooU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCkgXFx1MDAyNiBTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QpKTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHQvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIG1haW4oKSBzdHVmZnMgaW52YWxpZCBndWVzdCBzdGF0ZS4gKi9cXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuY1xcbmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXFxuQEAgLTM3LDggKzM3LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdEdVRVNUX0FTU0VSVChyZG1zcihNU1JfR1NfQkFTRSkgPT0gTEE1N19HU19CQVNFKTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XFxuK1xcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcXG4rXFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XFxuIFxcbiBcXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcXG4gXFxuQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdGd1ZXN0X2NyNCBcXHUwMDI2PSB+WDg2X0NSNF9MQTU3O1xcbiBcXHR2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XFxuK1xcdHZtbGF1bmNoKCk7XFxuIFxcbiBcXHRleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pO1xcbiBcXHRHVUVTVF9BU1NFUlQoZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xcbmluZGV4IGViODAyMWMzM2NkNDMuLmNkYTUzZGYzMzg4OGUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xcbkBAIC03MSw5ICs3MSw5IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdHU2NCBsMV90c2NfZGVhZGxpbmUsIGwyX3RzY19kZWFkbGluZTtcXG4gXFxuIFxcdEdVRVNUX0FTU0VSVCh2bXhfcGFnZXMtXFx1MDAzZXZtY3NfZ3BhKTtcXG4tXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbitcXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XFxuK1xcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xcbitcXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cXHUwMDNldm1jc19ncGEpO1xcbiBcXG4gXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XFxuIFxcbkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXFxuIFxcdCAgICAhKGN0cmxfZXhpdF9yZXYuY2xyIFxcdTAwMjYgVk1fRVhJVF9TQVZFX1ZNWF9QUkVFTVBUSU9OX1RJTUVSKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0dm1sYXVuY2goKTtcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XFxuIFxcbkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcXG4gXFxuIFxcdGwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpIFxcdTAwM2VcXHUwMDNlIHZteF9wdF9yYXRlKSBcXHUwMDNjXFx1MDAzYyB2bXhfcHRfcmF0ZTtcXG4gXFxuLVxcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XFxuK1xcdHZtcmVzdW1lKCk7XFxuIFxcbiBcXHRsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU1OjI2Ljk2OTI4NTcyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc5MTAwNzg5NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIG5lc3RlZCBWTVggd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSXQgY2hhbmdlcyBWTVBUUkxEIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBhbmQgVk1QVFJTVCB0byByZXR1cm4gdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM5OWMyZWJiMDQxZDI2OTgwMTgzYWFlMTM0NjM1Njg2YmIwNGNiMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzo1NToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi4zMDU4ZWZhNjVjODJjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTU4OTcsNiArNTg5NywxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbitcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG4rXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4gXHRpZiAobmVzdGVkX3ZteF9nZXRfdm1wdHIodmNwdSwgXHUwMDI2dm1wdHIsIFx1MDAyNnIpKVxuIFx0XHRyZXR1cm4gcjtcbiBcbkBAIC01OTA2LDEwICs1OTEyLDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodm1wdHIgPT0gdm14LVx1MDAzZW5lc3RlZC52bXhvbl9wdHIpXG4gXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX1ZNUFRSTERfVk1YT05fUE9JTlRFUik7XG4gXG4tXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuLVx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbi1cdFx0cmV0dXJuIDE7XG4tXG4gXHRpZiAodm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7XG4gXHRcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcdTAwMjZ2bXgtXHUwMDNlbmVzdGVkLnZtY3MxMl9jYWNoZTtcbiBcdFx0c3RydWN0IHZtY3NfaGRyIGhkcjtcbkBAIC01OTYyLDcgKzU5NjQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4tXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuK1x0Z3BhX3QgY3VycmVudF92bXB0cjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG4gXHRndmFfdCBndmE7XG4gXHRpbnQgcjtcbkBAIC01OTcwLDggKzU5NzIsMTYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQvKlxuK1x0ICogSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgdGhlIGJlaGF2aW9yIG9mIFZNUFRSU1Qgd2hlbiBlVk1DUyBpcyB1c2VkXG4rXHQgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuXG4rXHQgKi9cbisjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbitcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHRvX3ZteCh2Y3B1KSkpXG4rXHRcdGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xuK1x0ZWxzZVxuKyNlbmRpZlxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFxuIFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuIFx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCA4MmE4ZWE2YjY2MWYwLi5jNWI5ZDI2ZjZjZGJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5AQCAtMjY1LDE0ICsyNjUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9ldm1jcyhzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2KVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcHRyc3QodTY0ICp2YWx1ZSlcbi17XG4tXHQqdmFsdWUgPSBjdXJyZW50X3ZwX2Fzc2lzdC1cdTAwM2VjdXJyZW50X25lc3RlZF92bWNzIFx1MDAyNlxuLVx0XHR+SFZfWDY0X01TUl9WUF9BU1NJU1RfUEFHRV9FTkFCTEU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZWFkKHU2NCBlbmNvZGluZywgdTY0ICp2YWx1ZSlcbiB7XG4gXHRzd2l0Y2ggKGVuY29kaW5nKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCA2ZTZmNzAwMzU1MDhhLi4yODJiOGFhZmY3OTk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbkBAIC0xMzE4LDcgKzEzMTgsNyBAQCBndmFfdCB2bV9hbGxvY19zdGFjayhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG5yX3BhZ2VzKTtcbiBcdFwibGVhIDFmKCUlcmlwKSwgJSVyMTBcXG5cXHRcIlx0XHRcdFx0XFxcbiBcdFwibGVhIDJmKCUlcmlwKSwgJSVyMTFcXG5cXHRcIlx0XHRcdFx0XFxcbiBcdGZlcCBcIjE6IFwiIGluc24gXCJcXG5cXHRcIlx0XHRcdFx0XHRcXFxuLVx0XCJ4b3IgJSVyOSwgJSVyOVxcblxcdFwiXHRcdFx0XHRcdFxcXG4rXHRcIm1vdiAkMCwgJSVyOWRcXG5cXHRcIlx0XHRcdFx0XHRcXFxuIFx0XCIyOlxcblxcdFwiXHRcdFx0XHRcdFx0XFxcbiBcdFwibW92ICAlJXI5YiwgJVt2ZWN0b3JdXFxuXFx0XCJcdFx0XHRcdFxcXG4gXHRcIm1vdiAgJSVyMTAsICVbZXJyb3JfY29kZV1cXG5cXHRcIlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuaW5kZXggMDRmNWUzNGRlYTNhZS4uY2Q4MmE2YmU2OTYzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5AQCAtMzA5LDEyNiArMzA5LDkxIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcbiBcbiAjaW5jbHVkZSBcImV2bWNzLmhcIlxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcInZteG9uICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuLVx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4tXHRcdDogW3BhXVwibVwiKHBoeXMpXG4tXHRcdDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbi1cbi1cdHJldHVybiByZXQ7XG4rI2RlZmluZSBHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIF9fciwgX19wYSlcdFx0XFxcbitcdF9fR1VFU1RfQVNTRVJUKCFfX3IsIF9fc3RyaW5naWZ5KGluc24pIFwiWzB4JWx4XSBoaXQgJXNcIixcdFxcXG4rXHRcdCAgICAgICBfX3BhLCBfX3IgXHUwMDNjIDAgPyBcIlZNLUZhaWxcIiA6IGV4X3N0cihfX3IpKVxuK1xuKyNkZWZpbmUgQlVJTERfVk1DU19BU01fSEVMUEVSUyhpbnNuKVx0XHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHU2NCB2bWNzX3BhKVx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0dTY0IGVycm9yX2NvZGU7XHRcdFx0XHRcdFx0XHRcXFxuK1x0dTggdmVjdG9yO1x0XHRcdFx0XHRcdFx0XFxcbitcdHU4IGZhaWxlZDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGFzbSB2b2xhdGlsZShLVk1fQVNNX1NBRkUoX19zdHJpbmdpZnkoaW5zbikgXCIgJVtwYV1cIilcdFx0XFxcbitcdFx0ICAgICBcIlxcblxcdHNldG5hICVbZmFpbGVkXVwiXHRcdFx0XHRcXFxuK1x0XHQgICAgIDogS1ZNX0FTTV9TQUZFX09VVFBVVFModmVjdG9yLCBlcnJvcl9jb2RlKSxcdFxcXG4rXHRcdCAgICAgICBbZmFpbGVkXVwiPXFtXCIoZmFpbGVkKVx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFtwYV1cIm1cIih2bWNzX3BhKVx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJjY1wiLCBcIm1lbW9yeVwiLCBLVk1fQVNNX1NBRkVfQ0xPQkJFUlMpO1x0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyZXR1cm4gdmVjdG9yID8gdmVjdG9yIDogZmFpbGVkID8gLUVJTlZBTCA6IDA7XHRcdFx0XFxcbit9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNuKHU2NCB2bWNzX3BhKVx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aW50IHJldCA9IF9fIyNpbnNuKHZtY3NfcGEpO1x0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRHVUVTVF9BU1NFUlRfVk1YX0lOU05fU1VDQ0VFREVEKGluc24sIHJldCwgdm1jc19wYSk7XHRcdFxcXG4gfVxuIFxuK0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm14b24pXG4rQlVJTERfVk1DU19BU01fSEVMUEVSUyh2bXB0cmxkKVxuK0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm1jbGVhcilcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm14b2ZmKHZvaWQpXG4ge1xuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJ2bXhvZmZcIik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHZtY2xlYXIodTY0IHZtY3NfcGEpXG4te1xuLVx0dTggcmV0O1xuLVxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18gKFwidm1jbGVhciAlW3BhXTsgc2V0bmEgJVtyZXRdXCJcbi1cdFx0OiBbcmV0XVwiPXJtXCIocmV0KVxuLVx0XHQ6IFtwYV1cIm1cIih2bWNzX3BhKVxuLVx0XHQ6IFwiY2NcIiwgXCJtZW1vcnlcIik7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcInZtcHRybGQgJVtwYV07IHNldG5hICVbcmV0XVwiXG4tXHRcdDogW3JldF1cIj1ybVwiKHJldClcbi1cdFx0OiBbcGFdXCJtXCIodm1jc19wYSlcbi1cdFx0OiBcImNjXCIsIFwibWVtb3J5XCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgdm1wdHJzdCh1NjQgKnZhbHVlKVxuK3N0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3Qodm9pZClcbiB7XG4tXHR1NjQgdG1wO1xuK1x0dTY0IHZhbHVlID0gMDtcbiBcdHU4IHJldDtcbiBcbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiBldm1jc192bXB0cnN0KHZhbHVlKTtcbi1cbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwidm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXCJcbi1cdFx0OiBbdmFsdWVdXCI9bVwiKHRtcCksIFtyZXRdXCI9cm1cIihyZXQpXG4rXHRcdDogW3ZhbHVlXVwiPW1cIih2YWx1ZSksIFtyZXRdXCI9cm1cIihyZXQpXG4gXHRcdDogOiBcImNjXCIsIFwibWVtb3J5XCIpO1xuIFxuLVx0KnZhbHVlID0gdG1wO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBBIHdyYXBwZXIgYXJvdW5kIHZtcHRyc3QgdGhhdCBpZ25vcmVzIGVycm9ycyBhbmQgcmV0dXJucyB6ZXJvIGlmIHRoZVxuLSAqIHZtcHRyc3QgaW5zdHJ1Y3Rpb24gZmFpbHMuXG4tICovXG4tc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbi17XG4tXHR1NjQgdmFsdWUgPSAwO1xuLVx0dm1wdHJzdChcdTAwMjZ2YWx1ZSk7XG4rXHRfX0dVRVNUX0FTU0VSVCghcmV0LCBcInZtcHRyc3QgZmFpbGVkXCIpO1xuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlxuLVx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlxuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCJ2bWxhdW5jaDtcIlxuLVx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogO1wiXG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4tXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuLVx0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXG4te1xuLVx0aW50IHJldDtcbi1cbi1cdGlmIChlbmFibGVfZXZtY3MpXG4tXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuLVxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4tXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wiXG4tXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcInZtcmVzdW1lO1wiXG4tXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiA7XCJcbi1cdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbi1cdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbi1cdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUCksXG4tXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuLVx0cmV0dXJuIHJldDtcbisjZGVmaW5lIEJVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKGluc24pXHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fIyNpbnNuKHZvaWQpXHRcdFx0XHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRpbnQgcmV0O1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKGVuYWJsZV9ldm1jcylcdFx0XHRcdFx0XHRcXFxuK1x0XHRyZXR1cm4gZXZtY3NfIyNpbnNuKCk7XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlx0XHRcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlx0XHRcXFxuK1x0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlx0XHRcdFxcXG4rXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXHRcdFxcXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXHRcdFx0XFxcbitcdFx0XHQgICAgIF9fc3RyaW5naWZ5KGluc24pXCI7XCJcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICBcIjE6IDtcIlx0XHRcdFx0XHRcXFxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVx0XHRcdFxcXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlx0XHRcdFx0XFxcbitcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVx0XHRcdFx0XFxcbitcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFx0XHRcXFxuK1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUCksXHRcdFxcXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1x0XHRcdFxcXG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XHRcdFx0XHRcXFxuK1x0cmV0dXJuIHJldDtcdFx0XHRcdFx0XHRcdFxcXG4rfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih2b2lkKVx0XHRcdFx0XHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRpbnQgcmV0O1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cmV0ID0gX18jI2luc24oKTtcdFx0XHRcdFx0XHRcXFxuK1x0X19HVUVTVF9BU1NFUlQoIXJldCwgX19zdHJpbmdpZnkoaW5zbikgXCIgaGl0IFZNLUZhaWxcIik7XHRcdFxcXG4gfVxuK0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtbGF1bmNoKVxuK0JVSUxEX1ZNWF9WTV9FTlRSWV9IRUxQRVJTKHZtcmVzdW1lKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNhbGwodm9pZClcbiB7XG5AQCAtNTUwLDkgKzUxNSw5IEBAIHVuaW9uIHZteF9jdHJsX21zciB7XG4gfTtcbiBcbiBzdHJ1Y3Qgdm14X3BhZ2VzICp2Y3B1X2FsbG9jX3ZteChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgKnBfdm14X2d2YSk7XG4tYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4rdm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4gdm9pZCBwcmVwYXJlX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14LCB2b2lkICpndWVzdF9yaXApO1xuLWJvb2wgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4rdm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KTtcbiBcbiBib29sIGVwdF8xZ19wYWdlc19zdXBwb3J0ZWQodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuaW5kZXggZTE5ZThiNWEwOWM1YS4uNmExODE1ZmI5N2U5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuQEAgLTMzLDE0ICszMywxNCBAQCBfX2FzbV9fKFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IHZjcHVfaWQpXG4ge1xuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcdEdVRVNUX0FTU0VSVChlcHRfMWdfcGFnZXNfc3VwcG9ydGVkKCkpO1xuIFxuIFx0Kih1NjQgKil2bXgtXHUwMDNlc3RhY2sgPSB2Y3B1X2lkO1xuIFx0cHJlcGFyZV92bWNzKHZteCwgbWVtc3RyZXNzX2wyX2d1ZXN0X2VudHJ5KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG5pbmRleCAwODllMWE4YWY1M2ZjLi41YzZjYWRjMDg0MDVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG5AQCAtMTI1LDcgKzEyNSw3IEBAIHZjcHVfYWxsb2Nfdm14KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCAqcF92bXhfZ3ZhKVxuIFx0cmV0dXJuIHZteDtcbiB9XG4gXG4tYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbit2b2lkIHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24oc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbiBcdHU2NCBmZWF0dXJlX2NvbnRyb2w7XG4gXHR1NjQgcmVxdWlyZWQ7XG5AQCAtMTYzLDI4ICsxNjMsMjAgQEAgYm9vbCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiBcbiBcdC8qIEVudGVyIFZNWCByb290IG9wZXJhdGlvbi4gKi9cbiBcdCoodTMyICopKHZteC1cdTAwM2V2bXhvbikgPSB2bWNzX3JldmlzaW9uKCk7XG4tXHRpZiAodm14b24odm14LVx1MDAzZXZteG9uX2dwYSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuK1x0dm14b24odm14LVx1MDAzZXZteG9uX2dwYSk7XG4gfVxuIFxuLWJvb2wgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbit2b2lkIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuIFx0LyogTG9hZCBhIFZNQ1MuICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm1jcykgPSB2bWNzX3JldmlzaW9uKCk7XG4tXHRpZiAodm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHR2bWNsZWFyKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4gXG4tXHRpZiAodm1wdHJsZCh2bXgtXHUwMDNldm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHR2bXB0cmxkKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHQvKiBTZXR1cCBzaGFkb3cgVk1DUywgZG8gbm90IGxvYWQgaXQgeWV0LiAqL1xuIFx0Kih1MzIgKikodm14LVx1MDAzZXNoYWRvd192bWNzKSA9IHZtY3NfcmV2aXNpb24oKSB8IDB4ODAwMDAwMDB1bDtcbi1cdGlmICh2bWNsZWFyKHZteC1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHZtY2xlYXIodm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGVwdF92cGlkX2NhcF9zdXBwb3J0ZWQodTY0IG1hc2spXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmNcbmluZGV4IDg0NWNiNjg1ZjE3NDMuLmEwODI2NThjMWU0ODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG5AQCAtNzAsOCArNzAsOCBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbi1cdEdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0XHR2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKm5lc3RlZF90ZXN0X2RhdGEpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5pbmRleCBhYTdmM2I0MDVmZDMyLi5hMDZmMzdlMGJkMDY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbkBAIC01NSwxMSArNTUsMTEgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsXG4gXHRlbmFibGVfdnBfYXNzaXN0KGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdF9ncGEsIGh2X3BhZ2VzLVx1MDAzZXZwX2Fzc2lzdCk7XG4gXHRldm1jc19lbmFibGUoKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuIFx0R1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTtcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXG4gXHQvKiBMMiBleGl0cyB2aWEgdm1jYWxsIGlmIHRlc3QgZmFpbHMgKi9cbiBcdHN5bmNfd2l0aF9ob3N0KDIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG5pbmRleCA2M2VhMTUzM2U0ZWFkLi5iN2MyYTI1NDI5MWU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuQEAgLTIzLDcgKzIzLDExIEBAIHN0YXRpYyBpbnQgdWRfY291bnQ7XG4gc3RhdGljIHZvaWQgZ3Vlc3RfdWRfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiB7XG4gXHR1ZF9jb3VudCsrO1xuLVx0cmVncy1cdTAwM2VyaXAgKz0gMzsgLyogVk1MQVVOQ0ggKi9cbitcdC8qXG4rXHQgKiBWTUxBVU5DSCBpbnNuIGNhbid0IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IEtWTV9BU01fU0FGRSBmcmFtZXdvcmsgYnV0XG4rXHQgKiBsdWNraWx5IHRoZSBpbnN0cnVjdGlvbiBpcyBhbHdheXMgdGhyZWUgYnl0ZXMuXG4rXHQgKi9cbitcdHJlZ3MtXHUwMDNlcmlwICs9IDM7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuQEAgLTg5LDIwICs5MywxOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0ZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3QpO1xuIFx0ZXZtY3NfZW5hYmxlKCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSAtMSk7XG4gXG4gXHRHVUVTVF9TWU5DKDQpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHRHVUVTVF9TWU5DKDUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IC0xdTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047XG4gXHRHVUVTVF9TWU5DKDYpO1xuIFxuQEAgLTExNywxNyArMTIwLDE3IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRjdXJyZW50X3ZwX2Fzc2lzdC1cdTAwM2VuZXN0ZWRfY29udHJvbC5mZWF0dXJlcy5kaXJlY3RoeXBlcmNhbGwgPSAxO1xuIFx0Kih1MzIgKikoaHZfcGFnZXMtXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAwO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKCh2bXJlYWR6KFZNX0VYSVRfSU5UUl9JTkZPKSBcdTAwMjYgMHhmZiksIE5NSV9WRUNUT1IpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHQvKlxuIFx0ICogTk1JIGZvcmNlcyBMMi1cdTAwM2VMMSBleGl0LCByZXN1bWluZyBMMiBhbmQgaG9wZSB0aGF0IEVWTUNTIGlzXG4gXHQgKiB1cC10by1kYXRlIChSSVAgcG9pbnRzIHdoZXJlIGl0IHNob3VsZCBhbmQgbm90IGF0IHRoZSBiZWdpbm5pbmdcbiBcdCAqIG9mIGwyX2d1ZXN0X2NvZGUoKS4gR1VFU1RfU1lOQyg5KSBjaGVja3MgdGhhdC5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXG4gXHRHVUVTVF9TWU5DKDEwKTtcbiBcbkBAIC0xMzgsMTMgKzE0MSwxMyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIHxcbiBcdFx0Q1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4gXHRfX3NldF9iaXQoTVNSX0ZTX0JBU0UgXHUwMDI2IDB4MWZmZiwgdm14X3BhZ2VzLVx1MDAzZW1zciArIDB4NDAwKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXG4gXG4gXHQvKiBFbmFibGUgZW5saWdodGVuZWQgTVNSIGJpdG1hcCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9lbmxpZ2h0ZW5tZW50c19jb250cm9sLm1zcl9iaXRtYXAgPSAxO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgKz0gMjsgLyogcmRtc3IgKi9cbiBcbkBAIC0xNTIsMTQgKzE1NSwxNCBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0X19zZXRfYml0KE1TUl9HU19CQVNFIFx1MDAyNiAweDFmZmYsIHZteF9wYWdlcy1cdTAwM2Vtc3IgKyAweDQwMCk7XG4gXHQvKiBNYWtlIHN1cmUgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVAgaXMgc2V0ICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfTVNSX0JJVE1BUDtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0LyogTWFrZSBzdXJlIHdlIGRvbid0IHNlZSBFWElUX1JFQVNPTl9NU1JfUkVBRCBoZXJlIHNvIGVNU1IgYml0bWFwIHdvcmtzICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDM7IC8qIHZtY2FsbCAqL1xuIFxuIFx0LyogTm93IHRlbGwgS1ZNIHdlJ3ZlIGNoYW5nZWQgTVNSLUJpdG1hcCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgXHUwMDI2PSB+SFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVA7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xuIFxuQEAgLTE2NywyMSArMTcwLDI5IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHQgKiBMMiBUTEIgZmx1c2ggdGVzdC4gRmlyc3QgVk1DQUxMIHNob3VsZCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLFxuIFx0ICogbm8gVk1DQUxMIGV4aXQgZXhwZWN0ZWQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXG4gXHQvKiBFbmFibGUgc3ludGhldGljIHZtZXhpdCAqL1xuIFx0Kih1MzIgKikoaHZfcGFnZXMtXHUwMDNlcGFydGl0aW9uX2Fzc2lzdCkgPSAxO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gSFZfVk1YX1NZTlRIRVRJQ19FWElUX1JFQVNPTl9UUkFQX0FGVEVSX0ZMVVNIKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9TWU5DKDExKTtcbiBcbi1cdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuK1x0LyogVk1QVFJMRCBpbnN0cnVjdGlvbiBjYXVzZXMgI1VEIGFmdGVyIGVubGlnaHRlbmVkIFZNTEFVTkNIICovXG4rXHRHVUVTVF9BU1NFUlQoX192bXB0cmxkKGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKSA9PSBVRF9WRUNUT1IpO1xuK1xuK1x0LypcbitcdCAqIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQS4gR1VFU1RfU1lOQygxMikgc2lnbmFsc1xuK1x0ICogdGhlIGhvc3QgdG8gZW5hYmxlIGd1ZXN0X3VkX2hhbmRsZXIoKSB3aGljaCBjYW5ub3QgYmUgZW5hYmxlZCBiZWZvcmVoYW5kXG4rXHQgKiB0byBub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZml4dXAgaGFuZGxlciBmcm9tIEtWTV9BU01fU0FGRSgpLlxuK1x0ICovXG4rXHRHVUVTVF9TWU5DKDEyKTtcbiBcdGV2bWNzX3ZtcHRybGQoMHhkZWFkYmVlZiwgaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jcyk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5AQCAtMjUzLDcgKzI2NCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDMsIHZteF9wYWdlc19ndmEsIGh2X3BhZ2VzX2d2YSwgYWRkcl9ndmEyZ3BhKHZtLCBoY2FsbF9wYWdlKSk7XG4gXHR2Y3B1X3NldF9tc3IodmNwdSwgSFZfWDY0X01TUl9WUF9JTkRFWCwgdmNwdS1cdTAwM2VpZCk7XG4gXG4tXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xuIFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgTk1JX1ZFQ1RPUiwgZ3Vlc3Rfbm1pX2hhbmRsZXIpO1xuIFxuIFx0cHJfaW5mbyhcIlJ1bm5pbmcgTDEgd2hpY2ggdXNlcyBFVk1DUyB0byBydW4gTDJcXG5cIik7XG5AQCAtMjgzLDcgKzI5Myw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHRcdC8qIEZvcmNlIGltbWVkaWF0ZSBMMi1cdTAwM2VMMSBleGl0IGJlZm9yZSByZXN1bWluZyAqL1xuIFx0XHRpZiAoc3RhZ2UgPT0gOCkge1xuLVx0XHRcdHByX2luZm8oXCJJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxcblwiKTtcbitcdFx0XHRwcl9kZWJ1ZyhcIkluamVjdGluZyBOTUkgaW50byBMMSBiZWZvcmUgTDIgaGFkIGEgY2hhbmNlIHRvIHJ1biBhZnRlciByZXN0b3JlXFxuXCIpO1xuIFx0XHRcdGluamVjdF9ubWkodmNwdSk7XG4gXHRcdH1cbiBcbkBAIC0yOTMsOSArMzAzLDE0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdCAqIEtWTV9TVEFURV9ORVNURURfRVZNQ1MgaXMgbm90IGxvc3QuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc3RhZ2UgPT0gOSkge1xuLVx0XHRcdHByX2luZm8oXCJUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcXG5cIik7XG4rXHRcdFx0cHJfZGVidWcoXCJUcnlpbmcgZXh0cmEgS1ZNX0dFVF9ORVNURURfU1RBVEUvS1ZNX1NFVF9ORVNURURfU1RBVEUgY3ljbGVcXG5cIik7XG4gXHRcdFx0dmNwdSA9IHNhdmVfcmVzdG9yZV92bSh2bSwgdmNwdSk7XG4gXHRcdH1cbitcbitcdFx0aWYgKHN0YWdlID09IDEyKSB7XG4rXHRcdFx0cHJfZGVidWcoXCJUcnlpbmcgZW5saWdodGVuZWQgVk1MQVVOQ0ggd2l0aCBhbiBpbnZhbGlkIFBUUlxcblwiKTtcbitcdFx0XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBVRF9WRUNUT1IsIGd1ZXN0X3VkX2hhbmRsZXIpO1xuK1x0XHR9XG4gXHR9XG4gXG4gZG9uZTpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG5pbmRleCAyNWExODJiZTAwYTk3Li4zMzdkM2MyOGJjNmRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9rdm1fYnVzbG9ja190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG5AQCAtNDIsMTMgKzQyLDEzIEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xuLVx0R1VFU1RfQVNTRVJUX0VRKGxvYWRfdm1jcyh2bXgpLCB0cnVlKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XG4gXG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoR1VFU1RfUklQLCAodTY0KWwyX2d1ZXN0X2NvZGUpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuY1xuaW5kZXggYjk3NGNmYjM0N2Q2ZS4uMWY0YTVlNDRhNmVmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmNcbkBAIC0zMCwxMyArMzAsMTMgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQoMCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCAyNmI0NzRiZjEzNTM1Li43OTg3Y2U1MGMzODI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuQEAgLTkzLDggKzkzLDggQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXHR2b2lkICpsMl9yaXA7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0aWYgKHZteC1cdTAwM2VlcHRwX2dwYSlcbiBcdFx0bDJfcmlwID0gbDJfZ3Vlc3RfY29kZV90ZHBfZW5hYmxlZDtcbkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBsMl9yaXApO1xuIFxuIFx0R1VFU1RfU1lOQyhURVNUX1NZTkNfTk9fRkFVTFQpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9TWU5DKFRFU1RfU1lOQ19OT19GQVVMVCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9ET05FKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmNcbmluZGV4IGUwOGM2YjA2OTdlNTAuLjExZmU0YTMxZWRhMGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jXG5AQCAtNjYsOCArNjYsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcbiBcdFx0XHRcdFx0ICAgQklUX1VMTChJTlRFUkNFUFRfSExUKTtcbiBcdFx0dm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zID0gMDtcbiBcdH0gZWxzZSB7XG4tXHRcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSkpO1xuLVx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHRlc3RfZGF0YSkpO1xuK1x0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHRlc3RfZGF0YSk7XG4rXHRcdGxvYWRfdm1jcyh0ZXN0X2RhdGEpO1xuIFxuIFx0XHRwcmVwYXJlX3ZtY3ModGVzdF9kYXRhLCBOVUxMKTtcbiBcdFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX0lEVFJfTElNSVQsIDApKTtcbkBAIC0xMDIsNyArMTAyLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4gXHRcdFx0ZXhpdF9pbnNuX2xlbiA9IHZtY2ItXHUwMDNlY29udHJvbC5uZXh0X3JpcCAtIHZtY2ItXHUwMDNlc2F2ZS5yaXA7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtY2ItXHUwMDNlc2F2ZS5yaXAsICh1NjQpbDJfaW5zdHJ1Y3Rpb24pO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdEdVRVNUX0FTU0VSVF9FUShpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCksIDApO1xuK1x0XHRcdGkgPyB2bXJlc3VtZSgpIDogdm1sYXVuY2goKTtcbiBcdFx0XHRleGl0X3JlYXNvbiA9IHZtcmVhZHooVk1fRVhJVF9SRUFTT04pO1xuIFx0XHRcdGV4aXRfaW5zbl9sZW4gPSB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKTtcbiBcdFx0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihHVUVTVF9SSVApLCAodTY0KWwyX2luc3RydWN0aW9uKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG5pbmRleCBhZWVjMzEyMWM4ZTgzLi5jMzZjMTFiNWY1MThiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG5AQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyB2b2lkIHZteF9ydW5fbDIodm9pZCAqbDJfY29kZSwgaW50IHZlY3RvciwgdTMyIGVycm9yX2NvZGUpXG4ge1xuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9jb2RlKSk7XG4gXG4tXHRHVUVTVF9BU1NFUlRfRVEodmVjdG9yID09IFNTX1ZFQ1RPUiA/IHZtbGF1bmNoKCkgOiB2bXJlc3VtZSgpLCAwKTtcbitcdHZlY3RvciA9PSBTU19WRUNUT1IgPyB2bWxhdW5jaCgpIDogdm1yZXN1bWUoKTtcbiBcbiBcdGlmICh2ZWN0b3IgPT0gRkFLRV9UUklQTEVfRkFVTFRfVkVDVE9SKVxuIFx0XHRyZXR1cm47XG5AQCAtMTI1LDkgKzEyNSw5IEBAIHN0YXRpYyB2b2lkIHZteF9ydW5fbDIodm9pZCAqbDJfY29kZSwgaW50IHZlY3RvciwgdTMyIGVycm9yX2NvZGUpXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVF9FUShwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCksIHRydWUpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuIFxuLVx0R1VFU1RfQVNTRVJUX0VRKGxvYWRfdm1jcyh2bXgpLCB0cnVlKTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgTlVMTCk7XG4gXHRHVUVTVF9BU1NFUlRfRVEodm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG5pbmRleCA4YzJiYTk2NzQ1NThlLi4xMDFjMWZlNzllZWI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9pbnZhbGlkX2NyM190ZXN0LmNcbkBAIC00MCwyMSArNDAsMjEgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbiBcdHVpbnRwdHJfdCBzYXZlX2NyMztcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHQvKiBUcnkgdG8gcnVuIEwyIHdpdGggaW52YWxpZCBDUjMgYW5kIG1ha2Ugc3VyZSBpdCBmYWlscyAqL1xuIFx0c2F2ZV9jcjMgPSB2bXJlYWR6KEdVRVNUX0NSMyk7XG4gXHR2bXdyaXRlKEdVRVNUX0NSMywgLTF1bGwpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT1cbiBcdFx0ICAgICAoRVhJVF9SRUFTT05fRkFJTEVEX1ZNRU5UUlkgfCBFWElUX1JFQVNPTl9JTlZBTElEX1NUQVRFKSk7XG4gXG4gXHQvKiBOb3cgcmVzdG9yZSBDUjMgYW5kIG1ha2Ugc3VyZSBMMiBydW5zIHN1Y2Nlc3NmdWxseSAqL1xuIFx0dm13cml0ZShHVUVTVF9DUjMsIHNhdmVfY3IzKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHRHVUVTVF9ET05FKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmNcbmluZGV4IDJlMDQ1NjM3OTBmZjIuLmQ2YzQ0M2UzZDE0N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXG5AQCAtNTUsMTIgKzU1LDEyIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdTY0IGV4cGVjdGVkX2ZhdWx0X2dwYSxcbiBcdHU2NCBleGl0X3F1YWw7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfZW50cnkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXG4gXHQvKiBWZXJpZnkgd2UgZ290IGFuIEVQVCB2aW9sYXRpb24gZXhpdCAqL1xuIFx0X19HVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTixcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5pbmRleCBjYjc5ZDdiOTYxOWMyLi5jNjBkZWE4OTk2MjRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG5AQCAtODYsOCArODYsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKmRhdGEpXG4gXHRcdHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcyA9IGRhdGE7XG4gXHRcdHUzMiBjb250cm9sO1xuIFxuLVx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdGNvbnRyb2wgPSB2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpO1xuQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxuIFx0XHR2bXdyaXRlKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIGNvbnRyb2wpO1xuIFx0XHR2bXdyaXRlKFRTQ19PRkZTRVQsIFRTQ19PRkZTRVRfVkFMVUUpO1xuIFxuLVx0XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0XHR2bWxhdW5jaCgpO1xuIFx0XHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0gPSBkYXRhO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuY1xuaW5kZXggMThmNzY1ODM1YmY0Yy4uYjJmYzdmMGI1YjNjOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX3NjYWxpbmdfdGVzdC5jXG5AQCAtMTA1LDggKzEwNSw4IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdC8qIGNoZWNrIHRoYXQgTDEncyBmcmVxdWVuY3kgbG9va3MgYWxyaWdodCBiZWZvcmUgbGF1bmNoaW5nIEwyICovXG4gXHRjaGVja190c2NfZnJlcShVQ0hFQ0tfTDEpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBwcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTEyNSw3ICsxMjUsNyBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR2bXdyaXRlKFRTQ19NVUxUSVBMSUVSX0hJR0gsIFRTQ19NVUxUSVBMSUVSX0wyIFx1MDAzZVx1MDAzZSAzMik7XG4gXG4gXHQvKiBsYXVuY2ggTDIgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHQvKiBjaGVjayB0aGF0IEwxJ3MgZnJlcXVlbmN5IHN0aWxsIGxvb2tzIGdvb2QgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xuaW5kZXggNTA3MzkxYWIyYzkzMC4uZjg4NDI3ZTkyNWZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbkBAIC05OCwxNyArOTgsMTcgQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuK1x0bG9hZF92bWNzKHZteCk7XG4gXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiBcbiBcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHR3aGlsZSAoMSkge1xuIFx0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuIFx0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYsIFVEX1ZFQ1RPUik7XG4tXHRcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHRcdHZtcmVzdW1lKCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuaW5kZXggZDFlZGFmZDVhZjc1NS4uMzc3ZGYwOWU1ODJhZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5AQCAtNzgsOCArNzgsOCBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQgKmFyZylcbiBcdFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKSB7XG4gXHRcdFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBsMl9ndWVzdF9jb2RlKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdFx0XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0XHRcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdFx0XHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcdFx0XHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcbmluZGV4IDRhMTA1NmE2Y2I4ZGMuLjM4Yzk2ODlhYzYwMTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcbkBAIC03NSwzMiArNzUsMzIgQEAgdm9pZCB2bXhfbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIHN0YXRpYyB2b2lkIHZteF9sMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuIFx0R1VFU1RfU1lOQygzKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRHVUVTVF9TWU5DKDQpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIHZteF9sMl9ndWVzdF9jb2RlKTtcbiBcbiBcdEdVRVNUX1NZTkMoNSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHR2bWxhdW5jaCgpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHQvKiBDaGVjayB0aGF0IHRoZSBsYXVuY2hlZCBzdGF0ZSBpcyBwcmVzZXJ2ZWQuICAqL1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfU1lOQyg3KTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyAzKTtcbkBAIC0xMDgsMjggKzEwOCwyOCBAQCBzdGF0aWMgdm9pZCB2bXhfbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTKTtcbiBcdHZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbitcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdEdVRVNUX1NZTkMoOCk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1yZXN1bWUoKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIFxuIFx0dm13cml0ZShHVUVTVF9SSVAsIDB4YzBmZmVlKTtcbiBcdEdVRVNUX1NZTkMoOSk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmVlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSkpO1xuK1x0dm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KEdVRVNUX1JJUCkgPT0gMHhjMGZmZmZlZSk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1yZXN1bWUoKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtcmVzdW1lKCkpO1xuIFx0R1VFU1RfU1lOQygxMyk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX19mbGF0dGVuX18pKSBndWVzdF9jb2RlKHZvaWQgKmFyZylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmNcbmluZGV4IDBkODM1MTZmNGJkMDguLmJiMzFhMWJhODkzMmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdHJpcGxlX2ZhdWx0X2V2ZW50X3Rlc3QuY1xuQEAgLTI1LDEyICsyNSwxMiBAQCB2b2lkIGwxX2d1ZXN0X2NvZGVfdm14KHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14LVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfZ3Vlc3RfY29kZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgYSB0cmlwbGUgZmF1bHQgZXZlbnQgaW5qZWN0ZWQuICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxUKTtcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbmluZGV4IDQ2M2Y3M2FhOTE1OWEuLmZlMjljODY5YTIzNTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWNfYWNjZXNzX3Rlc3QuY1xuQEAgLTM4LDggKzM4LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHVuc2lnbmVkIGxvbmcgaGlnaF9ncGEpXG4ge1xuIFx0dTMyIGNvbnRyb2w7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTUzLDE0ICs1MywxNCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgdW5zaWduZWQgbG9uZyBoaWdoX2dwYSlcbiBcbiBcdC8qIFRyeSB0byBsYXVuY2ggTDIgd2l0aCB0aGUgbWVtb3J5LWJhY2tlZCBBUElDLWFjY2VzcyBhZGRyZXNzLiAqL1xuIFx0R1VFU1RfU1lOQyh2bXJlYWR6KEFQSUNfQUNDRVNTX0FERFIpKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHR2bXdyaXRlKEFQSUNfQUNDRVNTX0FERFIsIGhpZ2hfZ3BhKTtcbiBcbiBcdC8qIFRyeSB0byByZXN1bWUgTDIgd2l0aCB0aGUgdW5iYWNrZWQgQVBJQy1hY2Nlc3MgYWRkcmVzcy4gKi9cbiBcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbmluZGV4IGY5Yjg4YTZmNjExM2QuLmU1NzgyMjFkYTI0N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbkBAIC0zMyw4ICszMyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbiBcdHUzMiBjb250cm9sO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0ICogUnVuIEwyIHRvIHN3aXRjaCB0byB4MkFQSUMgbW9kZSwgd2hpY2ggaW4gdHVybiB3aWxsIHVuaW5oaWJpdCBBUElDdixcbiBcdCAqIGFzIEtWTSBzaG91bGQgZm9yY2UgdGhlIEFQSUMgSUQgYmFjayB0byBpdHMgZGVmYXVsdC5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UpIFx1MDAyNiBNU1JfSUEzMl9BUElDQkFTRV9FWFREKTtcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0ICogaGFuZGxlcyB0aGUgeDJBUElDID1cdTAwM2UgeEFQSUMgdHJhbnNpdGlvbiBhbmQgaW5oaWJpdHMgQVBJQ3Ygd2hpbGUgTDJcbiBcdCAqIGlzIGFjdGl2ZS5cbiBcdCAqL1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0FTU0VSVCghKHJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFKSBcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCkpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG5pbmRleCBjODM3OTEyNGIzMTcyLi4zMDE3OTM4ZmE5OTM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuQEAgLTQxLDggKzQxLDggQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG5AQCAtNTUsNyArNTUsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0FTU0VSVCghKHZtcmVhZHooQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCkgXHUwMDI2IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpIHx8XG4gXHRcdCAgICAgISh2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIFx1MDAyNiBTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0LyogTDIgc2hvdWxkIHRyaXBsZSBmYXVsdCBhZnRlciBtYWluKCkgc3R1ZmZzIGludmFsaWQgZ3Vlc3Qgc3RhdGUuICovXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbmluZGV4IDc1MDczZWZhOTI2ZGEuLmIzNjUxYzVhYjEzODQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3QuY1xuQEAgLTM3LDggKzM3LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHRHVUVTVF9BU1NFUlQocmRtc3IoTVNSX0dTX0JBU0UpID09IExBNTdfR1NfQkFTRSk7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXG5AQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdGd1ZXN0X2NyNCBcdTAwMjY9IH5YODZfQ1I0X0xBNTc7XG4gXHR2bXdyaXRlKEdVRVNUX0NSNCwgZ3Vlc3RfY3I0KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdEdVRVNUX0FTU0VSVChleGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbmluZGV4IGViODAyMWMzM2NkNDMuLmNkYTUzZGYzMzg4OGUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbkBAIC03MSw5ICs3MSw5IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHR1NjQgbDFfdHNjX2RlYWRsaW5lLCBsMl90c2NfZGVhZGxpbmU7XG4gXG4gXHRHVUVTVF9BU1NFUlQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAgICAhKGN0cmxfZXhpdF9yZXYuY2xyIFx1MDAyNiBWTV9FWElUX1NBVkVfVk1YX1BSRUVNUFRJT05fVElNRVIpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0dm13cml0ZShHVUVTVF9SSVAsIHZtcmVhZHooR1VFU1RfUklQKSArIHZtcmVhZHooVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTtcbiBcbkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcbiBcdGwxX3ZteF9wdF9zdGFydCA9IChyZHRzYygpIFx1MDAzZVx1MDAzZSB2bXhfcHRfcmF0ZSkgXHUwMDNjXHUwMDNjIHZteF9wdF9yYXRlO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXG4gXHRsMV92bXhfcHRfZmluaXNoID0gcmR0c2MoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU1OjI2Ljk2OTI4Njg1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MzI4NjkwMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBWTVBUUkxEL1ZNUFRSU1QgUGF0Y2ggaW4gS1ZNIE5lc3RlZCBWTVgqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBLVk0ncyBuZXN0ZWQgVk1YIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgd2hlbiBlVk1DUyBpcyBpbiBwbGF5LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCwgc28gdGhhdCdzIHdoZXJlIEknbSBmb2N1c2luZy5cblxuTG9va2luZyBhdCBgaGFuZGxlX3ZtcHRybGRgLCB0aGUgcGF0Y2gncyBtYWluIGNoYW5nZSBpcyByZXBsYWNpbmcgYSBzaW1wbGUgcmV0dXJuIHdpdGggYGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKWAgd2hlbiBlVk1DUyBpcyBhY3RpdmUuIFByZXZpb3VzbHksIGp1c3QgcmV0dXJuaW5nIDEgbWlnaHQgaGF2ZSBiZWVuIGEgc3VidGxlIGJ1ZyBvciBhIG1pc2ludGVycHJldGF0aW9uIG9mIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gUmV0dXJuaW5nIDEgaW4gYSBLVk0gZXhpdCBoYW5kbGVyIG9mdGVuIHNpZ25hbHMgdG8gcmVzdW1lIHRoZSBndWVzdCwgYnV0IHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIChSSVApLCB0aGlzIHdvdWxkIGxlYWQgdG8gZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3IsIG1vcmUgbGlrZWx5LCBhbiB1bmV4cGVjdGVkIGZhaWx1cmUuIEl0IGxvb2tzIGxpa2UgaXQgd2FzIGludGVuZGVkIHRvIGZhaWwvc2tpcCB0aGUgaW5zdHJ1Y3Rpb24sIGJ1dCB3YXNuJ3QgZG9pbmcgdGhhdCwgYnV0IHRoZXJlIHdhcyBhbiBleHBlY3RhdGlvbiB0aGF0IHNvbWV0aGluZyAqc2hvdWxkKiBmYWlsLiBOb3csIHRoZSBwYXRjaCBjb3JyZWN0bHkgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiwgd2hpY2ggaXMgdGhlIHByb3BlciB3YXkgdG8gaGFuZGxlIGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbi5cblxuTm93LCBmb3IgYGhhbmRsZV92bXB0cnN0YC4gSGVyZSwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXR1cm5pbmcgYGh2X2V2bWNzX3ZtcHRyYCBpbnN0ZWFkIG9mIGp1c3QgMS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJldmlvdXMgYmVoYXZpb3IsIHJldHVybmluZyAxLCBtaWdodCBoYXZlIGFsc28gYmVlbiBhIGJ1Zy4gSW4gdGhpcyBjYXNlLCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19LVk1fSFlQRVJWYCwgYW5kIHRoZSBwYXRjaCBub3cgY29uZGl0aW9uYWxseSBhc3NpZ25zIGBjdXJyZW50X3ZtcHRyYCB3aXRoIGBodl9ldm1jc192bXB0cmAgd2hlbiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgaXMgdHJ1ZS4gSXQgYXBwZWFycyBIeXBlci1WIFRMRlMgZG9lcyBub3QgZGVmaW5lIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQsIGJ1dCBnZW51aW5lIEh5cGVyLVYgcmV0dXJucyBlVk1DUyBHUEEuXG5cblNvLCBmdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIG5lc3RlZCBWTVggaW4gY2VydGFpbiBzY2VuYXJpb3MuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZml4aW5nIGEgc3VidGxlIGJ1ZyBhbmQgaW1wcm92aW5nIHRoZSBhY2N1cmFjeSBvZiBob3cgS1ZNIGludGVyYWN0cyB3aXRoIG5lc3RlZCBWTVggaW4gdGhpcyBjb250ZXh0LiBUaGUgSHlwZXItViBzcGVjaWZpYyBjb25kaXRpb25hbCBpcyB3b3J0aCBjb25zaWRlcmluZy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgc2NydXRpbnkgYW5kIHRlc3RpbmcsIGVzcGVjaWFsbHkgYmVjYXVzZSB0aGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGNhbiBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlcyBvciByZXZlYWwgcHJldmlvdXNseSBoaWRkZW4gYnVncy5cblxuTGV0J3Mgc2VlOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAgYXJlIHRoZSBrZXkgY29uZmlnIG9wdGlvbnMgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBjb2RlIGlzIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0byBleGVyY2lzZSB0aGlzIGNvZGUgYW5kIGNyZWF0ZSBhIGZvY3VzZWQgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NDIuMjk3OTc5NTA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQ0MjE3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9IWVBFUlZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTgzPWNvbmZpZyBLVk1fU01NXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NDQuMTgyNDA5NDE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMjI2NjkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYEtWTV9IWVBFUlZgIGlzIGRlZmluaXRlbHkgYSByZWNvZ25pemVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBnb29kLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgdGhvcm91Z2hseS4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIEludGVsLXNwZWNpZmljIHZpcnR1YWxpemF0aW9uLiBUaGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggSHlwZXItViBpbiB0aGUgbWl4LCBjb3VsZCBiZSBzaWduaWZpY2FudCBvbiBhbiBJbnRlbC1iYXNlZCBzeXN0ZW0sIHNvIGEgZGVlcCBkaXZlIGludG8gYEtWTV9JTlRFTGAncyByZWxhdGlvbnNoaXAgd2l0aCBgS1ZNX0hZUEVSVmAgaXMgZXNzZW50aWFsLiBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgaG93IHRoZXkgaW50ZXJhY3QsIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBjcml0aWNhbGx5LCBpZiBlbmFibGluZyBgS1ZNX0hZUEVSVmAgaGFzIGFueSBjYXNjYWRpbmcgZWZmZWN0IG9uIGBLVk1fSU5URUxgIGZlYXR1cmVzIG9yIHBlcmZvcm1hbmNlLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVsYXRpb25zaGlwIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZGVjaXNpb25zIEknbGwgbWFrZSBnb2luZyBmb3J3YXJkLiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBhbmQgcmVsZXZhbnQgc291cmNlIGNvZGUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NTo0OC44ODQ2Nzg4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUyNTkwNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NTo1MC43MzcyNzUxNzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEzMTYwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKktWTV9JTlRFTCBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgS1ZNX0lOVEVMYC4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJ20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBkZWZpbmUgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBLVk0gb24gSW50ZWwgcHJvY2Vzc29ycyBhbmQsIGNydWNpYWxseSwgdG8gc3BlY2lmeSBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBvciBzYXRpc2ZpZWQgZm9yIGBLVk1fSU5URUxgIHRvIGJlIHZpYWJsZS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyB0aGlzIGlzIGRlcGVuZGVudCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NTo1NC41NTA0MzgwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG4gMTAxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuIDEwMjpcXHRcXHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTA1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWludGVsLlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuIDEwODpcXHQgICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbiAxMDk6XFx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcXHUwMDI2XFx1MDAyNiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NTQuNTUwNTE1NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4NDk1MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBTZXR1cCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGdldHRpbmcgdGhpcyBLVk0gZW52aXJvbm1lbnQgc2V0IHVwIHByb3Blcmx5LiBJdCdzIGNsZWFyIHRoYXQgSSdtIGdvaW5nIHRvIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ2l2ZW4gZm9yIGFueSBtb2Rlcm4gSW50ZWwtYmFzZWQgdmlydHVhbGl6YXRpb24uIEFuZCB0aGUgc2l0dWF0aW9uIGlzIG1vcmUgY29tcGxleCB0aGFuIGl0IG9uY2Ugd2FzLCBhcyBub3cgaXQgYWxzbyBsb29rcyBsaWtlIEkgbmVlZCBgS1ZNX0hZUEVSVmAgdG9vLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYEtWTV9IWVBFUlZgIGRlcGVuZGVuY2llcyBub3csIHRvIGVuc3VyZSBJJ3ZlIGNvdmVyZWQgZXZlcnl0aGluZyB0byBnaXZlIG15c2VsZiB0aGUgYmVzdCBjaGFuY2Ugb2YgY29tcGF0aWJpbGl0eS4gVGhhdCBzaG91bGQgYmUgbXkgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NTcuODM5MDEyNTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHQgIGZpcm13YXJlIHRvIGltcGxlbWVudCBVRUZJIHNlY3VyZSBib290LlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdGNvbmZpZyBLVk1fSFlQRVJWXFxuIDE5NTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuIDE5NjpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMTk3OlxcdFxcdGRlZmF1bHQgeVxcbiAxOTg6XFx0XFx0aGVscFxcbiAxOTk6XFx0XFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXFxuIDIwMDpcXHRcXHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcXG4gMjAxOlxcdFxcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxcbiAyMDI6XFx0XFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcXG4gMjAzOlxcdFxcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXFxuIDIwNDpcXHRcXHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiWVxcXCIuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdGNvbmZpZyBLVk1fWEVOXFxuIDIwOTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTU6NTcuODM5MDgzNzcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzAzMjU1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBLVk0gY29uZmlndXJhdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fSFlQRVJWYC4gVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgbGllcyBpbiBob3cgdGhpcyBwYXRjaCBhZmZlY3RzIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmVkIG9yIHNvbWV0aGluZyBvYnZpb3VzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBiZWZvcmUgZGl2aW5nIGRlZXBlci4gQWgsIHRoZXkncmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gQWxyaWdodCwgc28sIG5vdCBpbmxpbmVkLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFyZSBub3QgZXhwb3J0ZWQgb3Igc29tZWhvdyByZWZlcmVuY2VkIHRocm91Z2ggYW4gYXJyYXkuIFRoaXMgd2lsbCBpbmZvcm0gaG93IHRoZSBwYXRjaCB3aWxsIGJlIGFwcGxpZWQgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzk0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MDIuODA5NDEyMzAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzMDIxMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV92bXB0cmxkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Nz1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4OTAtLyogRW11bGF0ZSB0aGUgVk1QVFJMRCBpbnN0cnVjdGlvbiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg5MTpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4OTIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDM1PV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ2Ny1cXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVxcdD0gaGFuZGxlX3ZtbGF1bmNoO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzQ2ODpcXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXFx0PSBoYW5kbGVfdm1wdHJsZDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NjktXFx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVxcdD0gaGFuZGxlX3ZtcHRyc3Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NjE9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMC1cXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDgwMTpcXHQgICAoaGFuZGxlX3ZtcHRybGQpLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDgwMi1cXHQgICBXZSBjYW4gTk9UIGVuYWJsZSBzaGFkb3dfdm1jcyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB5ZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MDQuNDQyNDQwMTczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTczMTcxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVk0gRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWTSBleGl0cyBhcmUgbWFuYWdlZCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIHN5c3RlbSB1c2VzIGFuIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljOiBJJ20gc3VwcG9zZWQgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgdGhvc2UgaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgcmVhc29uIGlzIHRoZXkgd2FudCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Ob3csIEknbSBub3RpbmcgdGhhdCBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggYXQgZmlyc3Qgd291bGQgc3VnZ2VzdCB0aGV5J2QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMuIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIGhvdyB0aGVzZSBhcmUgdXNlZC4gVGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgKndpdGhpbiogdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gU2luY2UgdGhleSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMsIEkgZG9uJ3QgdGhpbmsgdGhleSdyZSBpbmxpbmVkLiBUaG91Z2gsIEkgYW0gYSBiaXQgY29uY2VybmVkIGJlY2F1c2UgYG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXBgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZW0gdXAuIEl0J3MgYSBrZXkgZnVuY3Rpb24gSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuU28sIEkgdGhpbmsgSSdtIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLCBhbmQgdGhlIHJlYWwgZW50cnkgcG9pbnQgZm9yIFZNIGV4aXRzIGlzIGB2bXhfaGFuZGxlX2V4aXRgIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYxNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoxMy4wNTk3NjExNDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzg2OTAzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X2hhbmRsZV9leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE1Nz1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE2Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNjM6XFx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTY0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4OD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAwMi1cXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDAzOlxcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMDQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU0Mjk9c3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU0OTQtXFx0ICogTU1JTywgaXQgaXMgYmV0dGVyIHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvci5cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU0OTU6XFx0ICogU2VlIHRoZSBjb21tZW50cyBpbiB2bXhfaGFuZGxlX2V4aXQuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NDk2LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MjY4PXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYyNzItXFx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MjczOlxcdCAqIHZteF9oYW5kbGVfZXhpdCgpLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjI3NC1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjUwMT12b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY3MDUtICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2NzA2OnN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02NzA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg2NC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NjU6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NjYte1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Njg2NzpcXHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODY4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz03MTc4PXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzE5My1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjcxOTQ6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxOTUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9Mjg9dm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoyOTppbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDozMDp2b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zMS1pbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dD0xNTkyPU5vdGVzOlxcbi0tXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTItICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NjI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjY2MmU5IHZteF92Y3B1X3J1bisweDNiOSAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNjE5YTAgX192bXhfY28uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxMzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg3MjogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWNmYjIgdmNwdV9lbnRlcl9ndWVzdCsweDc1MiAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNWY1NzAgdm14Xy4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjE0LSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODgxOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5ZDAyOCB2Y3B1X2VudGVyX2d1ZXN0KzB4N2M4IChba2VybmVsLmthbGxzeW1zXSkgPVxcdTAwM2UgZmZmZmZmZmZiMjM0ZjkwMCBfX3NyLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTU6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDlkMDZmIHZjcHVfZW50ZXJfZ3Vlc3QrMHg4MGYgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjcyZTMwIHZteF8uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNjogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJlM2Qgdm14X2hhbmRsZV9leGl0KzB4ZCAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNzI3YzAgX192bXhfaC4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE3OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3MmIxNSBfX3ZteF9oYW5kbGVfZXhpdCsweDM1NSAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzBmNjBhZTAgdm14Li4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTg6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyOTk0IF9fdm14X2hhbmRsZV9leGl0KzB4MWQ0IChba2VybmVsLmthbGxzeW1zXSkgPVxcdTAwM2UgZmZmZmZmZmZjMTBiNzA5MCBrdm0uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxOS0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzkwMzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwYjcwZjEga3ZtX2VtdWxhdGVfY3B1aWQrMHg2MSAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzEwYjZlMTAga3ZtXy4uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoxNC45Mzg0NTk0ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU3MDcxMTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWTSBFeGl0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVk1YIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHZteF9oYW5kbGVfZXhpdGAgbG9va2VkIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZW4sIEkgcmVtZW1iZXJlZCB0aGF0IGBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwYCBhY3R1YWxseSBwb3B1bGF0ZXMgdGhpcyBgZXhpdF9oYW5kbGVyc2AgYXJyYXkg4oCTIHRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgbGV0J3Mgc2VlLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW1wb3J0YW50PyBBaCwgcmlnaHQsIGBuZXN0ZWRfdm14X2dldF92bXB0cmAgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV92bXB0cmxkYC4gSW50ZXJlc3RpbmcuIEFuZCwgY3JpdGljYWxseSwgdGhvc2UgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJIGFsc28gZ2xhbmNlZCBhdCBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgd2hpY2ggaXMgaW5saW5lLiBgbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uYCBpcyBhbHNvIGBzdGF0aWNgLlxuXG5JJ20gc3RhcnRpbmcgdG8gemVybyBpbiBub3cuIEkgc2hvdWxkIGNpcmNsZSBiYWNrIHRvIGBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwYCBhbmQgdHJhY2UgaXRzIHVzYWdlLiBXYWl0IGEgbWludXRlLi4uIHdoaWxlIGB2bXhfaGFuZGxlX2V4aXRgICppcyogdGhlIG1haW4gVk0gZXhpdCBoYW5kbGVyLCBteSBhdHRlbnRpb24gaXMgYmVpbmcgZHJhd24gdG8gYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhleSdyZSB0aGUgb25lcyB0aGF0IGFwcGVhciB0byBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cblRoZSBmYWN0IHRoYXQgdGhleSBhcmUgYHN0YXRpY2AgaXMgc2lnbmlmaWNhbnQuIFRoYXQgbGlrZWx5IG1lYW5zIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgcHJvYmFibHkgYmVpbmcgdGFrZW4gYW5kIHB1dCBpbnRvIHRoYXQgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBTbywgdGhlIGNvbXBpbGVyIGNhbid0IG9wdGltaXplIHRoZW0gYXdheS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuSWYgdGhleSdyZSBpbiBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycywgaW5saW5pbmcgaXMgaW1wb3NzaWJsZSwgYmVjYXVzZSB5b3UgbmVlZCB0aGUgYWN0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uLiBTbywgaWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgcmVhbGx5ICphcmUqIHRoZSBzaWduaWZpY2FudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoYXQgd291bGQgYmUgYSBtYWpvciBjbHVlLiBPa2F5LCBsZXQncyB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE4OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoyMi41MDkxNzM1ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzM4NTMyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3ZtcHRybGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODc3PXN0YXRpYyB2b2lkIHNldF9jdXJyZW50X3ZtcHRyKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBncGFfdCB2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5MC0vKiBFbXVsYXRlIHRoZSBWTVBUUkxEIGluc3RydWN0aW9uICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODkxOnN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg5Mi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0MzU9X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDY3LVxcdGV4aXRfaGFuZGxlcnNbRVhJVF9SRUFTT05fVk1MQVVOQ0hdXFx0PSBoYW5kbGVfdm1sYXVuY2g7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDY4OlxcdGV4aXRfaGFuZGxlcnNbRVhJVF9SRUFTT05fVk1QVFJMRF1cXHQ9IGhhbmRsZV92bXB0cmxkO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ2OS1cXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSU1RdXFx0PSBoYW5kbGVfdm1wdHJzdDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDc2MT1zdGF0aWMgdTMyIHZteF9zZWNvbmRhcnlfZXhlY19jb250cm9sKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00ODAwLVxcdC8qIFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTIGlzIGVuYWJsZWQgd2hlbiBMMSBleGVjdXRlcyBWTVBUUkxEXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0ODAxOlxcdCAgIChoYW5kbGVfdm1wdHJsZCkuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00ODAyLVxcdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHlldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1NjoyNC4xNDMwMzgwODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2OTA2Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGZvciB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQsIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWFraW5nIHRoZW0gcGFydCBvZiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBUaGF0IG1lYW5zIHRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBHb29kLCBzbyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGxvb2sgbGlrZSBzdHJvbmcgY2FuZGlkYXRlcyB0byBzdGFydCB3aXRoLlxuXG5XYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGd1aWRhbmNl4oCmIHRoZSBpbnN0cnVjdGlvbnMgZG8gc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gVGhlc2UgKmFyZSogc3RhdGljLCBidXQgdGhleSBhcmUgKm5vdCogaW5saW5lZCwgc2luY2Ugd2UgY2FuIHBvaW50IHRvIHRoZWlyIGFkZHJlc3Nlcy4gVGhleSBkbyBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGV2ZW4gdGhvdWdoIHN0YXRpYywgZHVlIHRvIHRoZWlyIG5vdCBiZWluZyBpbmxpbmVkLiBIb3dldmVyLCBJJ2xsIGhlZGdlIG15IGJldHMgYW5kIGFkZCBgdm14X2hhbmRsZV9leGl0YCBvciBgX192bXhfaGFuZGxlX2V4aXRgIHRvIHRoZSBsaXN0LCBqdXN0IHRvIGJlIHNhZmUuXG5cbkhvbGQgb27igKYgYHZteF9oYW5kbGVfZXhpdGAgaXMgZGVzY3JpYmVkIGFzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGF2b2lkIHRob3NlIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtYWtlcyBzZW5zZTsgYSBnZW5lcmljIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBjb3ZlciBhIGxvdCBvZiB1bnJlbGF0ZWQgY29kZSwgYW5kIHdlJ3JlIGxvb2tpbmcgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCBWTVBUUkxEIGFuZCBWTVBUUlNUIGV4aXRzLiBTbywgSSBzaG91bGQgYXZvaWQgYHZteF9oYW5kbGVfZXhpdGAuXG5cblRoYXQgbGVhdmVzIG1lIGJhY2sgYXQgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gVGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgZXhpdHMsIHdoaWNoIGlzICpleGFjdGx5KiB3aGF0IHdlIG5lZWQgdG8gZnV6ei4gUGVyZmVjdC5cblxuTm93LCBhIHF1aWNrIGNvbmZpcm1hdGlvbjogY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhlc2UgVk0gZXhpdHM/IFllcywgd2UgY2FuIHRyaWdnZXIgVk0gZXhpdHMgdXNpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBndWVzdCwgc28gdGhvc2Ugc3ltYm9scyBzaG91bGQgYmUgYWNjZXNzaWJsZS5cblxuQWxyaWdodCwgYmVmb3JlIEkgbG9jayBpbiB0aGUgZmluYWwgc2VsZWN0aW9uLCBsZXQncyB2ZXJpZnkgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIGhhcyByZWxldmFuY2UgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0MjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MzIuNTEyMTA1NzU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNzAxOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD0yMD1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI0LVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6MjU6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNjgtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDo2OTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTcwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTk1PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2luc3RydWN0aW9uX2Vycm9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDMtXFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIwNDpcXHQgICAgIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwNS1cXHRcXHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsSW52YWxpZCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjI3ND12b2lkIG5lc3RlZF9zeW5jX3ZtY3MxMl90b19zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc3LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI3ODpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjI3OS1cXHRcXHRjb3B5X3ZtY3MxMl90b19lbmxpZ2h0ZW5lZCh2bXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDMxPXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQzNi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0Mzc6XFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmRpcnR5X3ZtY3MxMiB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM4LVxcdFxcdHByZXBhcmVfdm1jczAyX2Vhcmx5X3JhcmUodm14LCB2bWNzMTIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNzYwPXN0YXRpYyBpbnQgcHJlcGFyZV92bWNzMDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzY4OlxcdGlmICh2bXgtXFx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzY5LVxcdFxcdHByZXBhcmVfdm1jczAyX3JhcmUodm14LCB2bWNzMTIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzcxLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mjc3MjpcXHRcXHRsb2FkX2d1ZXN0X3BkcHRyc192bWNzMTIgPSAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpIHx8XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzczLVxcdFxcdFxcdCEoZXZtY3MtXFx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcXHUwMDI2IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9HVUVTVF9HUlAxKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI5MDI6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI5MDMtXFx0XFx0ZXZtY3MtXFx1MDAzZWh2X2NsZWFuX2ZpZWxkcyB8PSBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfQUxMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjI5PWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzgyLVxcdHZtY3MxMi1cXHUwMDNldm1fZXhpdF9yZWFzb24gPSBleGl0X3JlYXNvbi5mdWxsO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc4MzpcXHRpZiAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3ODQtXFx0XFx0dm14LVxcdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzkyPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgxMy1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4MTQ6XFx0aWYgKENDKCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MTUtXFx0ICAgICAgIHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODI4LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgyOTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODMwLVxcdFxcdHN0cnVjdCBodl9lbmxpZ2h0ZW5lZF92bWNzICpldm1jcyA9IG5lc3RlZF92bXhfZXZtY3Modm14KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDY1Mz1zdGF0aWMgdm9pZCBzeW5jX3ZtY3MwMl90b192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTYtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjU3OlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjU4LVxcdFxcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMl9yYXJlKHZjcHUsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NjAtXFx0dm14LVxcdTAwM2VuZXN0ZWQubmVlZF9zeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSA9XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjYxOlxcdFxcdCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjYyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDczPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE4MC1cXHRpZiAoKHZtX2V4aXRfcmVhc29uICE9IC0xKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE4MTpcXHQgICAgKGVuYWJsZV9zaGFkb3dfdm1jcyB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE4Mi1cXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NjQ9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY4My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU2ODQ6XFx0aWYgKCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2ODUtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg5MT1zdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTkwMC1cXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTkwMTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTAyLVxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk2Mz1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk3OS0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5ODA6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5ODEtXFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzY0PXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODUyLVxcdFxcdGlmICghdm14LVxcdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4NTM6XFx0XFx0XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4NTQtXFx0XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6MzQuMjAyODEzNzc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzkxMzMxNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCBmb3IgTmVzdGVkIFZNWCBhbmQgZVZNQ1MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0J3MgZm9jdXNlZCBvbiBob3cgS1ZNIGhhbmRsZXMgVk1QVFJMRCBhbmQgVk1QVFJTVCB3aXRoaW4gbmVzdGVkIFZNWCB3aGVuIHRoZSBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgZmVhdHVyZSBpcyBpbiBwbGF5LiBUaGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgZGVmaW5pdGVseSBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHJlbGV2YW50IFZNIGV4aXRzLCBhbmQgdGhleSdyZSBleGFjdGx5IHdoZXJlIHRoZSBwYXRjaCBtYWtlcyB0aGUgY3JpdGljYWwgY2hhbmdlcy4gSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgbmVzdGVkX3ZteF9ydW5gIGluaXRpYWxseSBiZWNhdXNlIGl0J3MgdGhlIG1haW4gZnVuY3Rpb24gZm9yIFZNTEFVTkNIL1ZNUkVTVU1FLCBhbmQgdGhlcmVmb3JlIGludGVyYWN0cyB3aXRoIHRoZSBlVk1DUywgYnV0IHRoZSBjaGFuZ2VzIGNlbnRlciBvbiB0aGUgYGhhbmRsZV8qYCBmdW5jdGlvbnMuXG5cbkkgY29uZmlybWVkIHRoYXQgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY2AgYW5kIG90aGVyIHRlc3RzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gSXQgc2hvd3MgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIHRlc3RhYmxlLCBhbmQsIGNydWNpYWxseSwgaXQncyByZWFjaGFibGUuIFRoaXMgYWxsIHBvaW50cyB0byB0aGlzIHBhdGNoIGJlaW5nIHdvcnRoIGZ1enppbmcsIGFzIGl0J3MgY2hhbmdpbmcgY29yZSBiZWhhdmlvdXIuXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBuZXN0ZWQgVk1YIHdoZW4gZVZNQ1MgaXMgYWN0aXZlLiBJdCdzIHJlcGxhY2luZyB0aGUgc3RhbmRhcmQgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgd2l0aCBlaXRoZXIgYSAjVUQgZXhjZXB0aW9uIChmb3IgVk1QVFJMRCkgb3IgcmV0dXJuaW5nIHRoZSBlVk1DUyBHUEEgKGZvciBWTVBUUlNUKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgYW5kIGl0IGNhbiBiZSB0cmlnZ2VyZWQgZHVyaW5nIGd1ZXN0IGV4ZWN1dGlvbi5cblxuSSd2ZSBnb3QgdGhlIGBGb2N1c1N5bWJvbHNgIGFzIGBbXCJoYW5kbGVfdm1wdHJsZFwiLCBcImhhbmRsZV92bXB0cnN0XCJdYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFtcIktWTVwiLCBcIktWTV9JTlRFTFwiLCBcIktWTV9IWVBFUlZcIl1gIHdoaWNoIGlzIGFsbCBJIG5lZWQgc2luY2UgYEtWTV9YODZgIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgZGVwZW5kcyBvbiBgS1ZNX1g4NmAuXG5cbkp1c3QgdG8gYmUgc3VyZSwgSSBkb3VibGUtY2hlY2tlZCB0aGUgZnVuY3Rpb25zIGFuZCB0aGUgcGF0Y2ggY29kZSBhZ2Fpbi4gVGhvc2UgYGhhbmRsZV8qYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdXNlZCBpbiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LCBzbyB0aGV5IGRlZmluaXRlbHkgYXJlbid0IGlubGluZWQgYW5kIGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gVGhleSBhcmUgdGhlIEFQSSBlbnRyeXBvaW50cyBmb3IgaGFuZGxpbmcgdGhvc2Ugc3BlY2lmaWMgVk0gZXhpdCByZWFzb25zLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBjb25maXJtcyB3aGF0IEkgdGhvdWdodC4gV2l0aCBlVk1DUyB2YWxpZCwgdGhlIHBhdGNoIHF1ZXVlcyBhICNVRCBleGNlcHRpb24gZm9yIGBoYW5kbGVfdm1wdHJsZGAuIEZvciBgaGFuZGxlX3ZtcHRyc3RgLCBpdCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgd2hlbiBgS1ZNX0hZUEVSVmAgaXMgZW5hYmxlZCwgaW5zdGVhZCBvZiBza2lwcGluZyB0aGUgaW5zdHJ1Y3Rpb24gKG9yIGxvb3BpbmcpLCBhcyB0aGUgSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBkby4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIHRoZW4gZm9jdXNlcyBvbiBzZWxmdGVzdHMgdG8gY292ZXIgdGhpcyBuZXcgYmVoYXZpb3VyLlxuXG5ZZXAsIGxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5MDksIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU2OjQ1Ljk5NDE0NzQ0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MjUxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIG5lc3RlZCBWTVggd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSXQgY2hhbmdlcyBWTVBUUkxEIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBhbmQgVk1QVFJTVCB0byByZXR1cm4gdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIDEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfdm1wdHJsZFwiLFxuICAgIFwiaGFuZGxlX3ZtcHRyc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gbmVzdGVkIFZNWCB3aGVuIEVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBpcyB1c2VkLiBJdCBjaGFuZ2VzIFZNUFRSTEQgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGFuZCBWTVBUUlNUIHRvIHJldHVybiB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgMS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTY6NDYuMDcwMDc4NTA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDYwNTA0NDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjU2OjQ2LjA3MDY0NzIzN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDYwNDQ3MjE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBLVk0ncyBWTVggbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvZGUuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIHdoZW4gZVZNQ1MgaXMgdXNlZDogaW5zdGVhZCBvZiByZXR1cm5pbmcgMSAoZG9pbmcgbm90aGluZyksIGl0IG5vdyBzZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYCBhbmQgd3JpdGVzIGl0IHRvIGd1ZXN0IG1lbW9yeS4gYGN1cnJlbnRfdm1wdHJgIGlzIGEgYGdwYV90YCAoYSA2NC1iaXQgaW50ZWdlciksIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBndWVzdCB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIFRoZXJlIGFyZSBubyBzdHJ1Y3RzIHdpdGggcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbnZvbHZlZC4gVGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGluIEtWTSBzZWxmdGVzdHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTljMmViYjA0MWQyNjk4MDE4M2FhZTEzNDYzNTY4NmJiMDRjYjA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjM6NTU6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggMTUxODczNDA3YWJkMy4uMzA1OGVmYTY1YzgyYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODk3LDYgKzU4OTcsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4rXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuK1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuK1x0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuIFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFx1MDAyNnZtcHRyLCBcdTAwMjZyKSlcbiBcdFx0cmV0dXJuIHI7XG4gXG5AQCAtNTkwNiwxMCArNTkxMiw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk2Miw3ICs1OTY0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbitcdGdwYV90IGN1cnJlbnRfdm1wdHI7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0aW50IHI7XG5AQCAtNTk3MCw4ICs1OTcyLDE2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuK1x0LypcbitcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuK1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuK1x0ICovXG4rI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbitcdGVsc2VcbisjZW5kaWZcbitcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuaW5kZXggODJhOGVhNmI2NjFmMC4uYzViOWQyNmY2Y2RiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuQEAgLTI2NSwxNCArMjY1LDYgQEAgc3RhdGljIGlubGluZSBib29sIGxvYWRfZXZtY3Moc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBldm1jc192bXB0cnN0KHU2NCAqdmFsdWUpXG4te1xuLVx0KnZhbHVlID0gY3VycmVudF92cF9hc3Npc3QtXHUwMDNlY3VycmVudF9uZXN0ZWRfdm1jcyBcdTAwMjZcbi1cdFx0fkhWX1g2NF9NU1JfVlBfQVNTSVNUX1BBR0VfRU5BQkxFO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVhZCh1NjQgZW5jb2RpbmcsIHU2NCAqdmFsdWUpXG4ge1xuIFx0c3dpdGNoIChlbmNvZGluZykge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuaW5kZXggNmU2ZjcwMDM1NTA4YS4uMjgyYjhhYWZmNzk5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtMTMxOCw3ICsxMzE4LDcgQEAgZ3ZhX3Qgdm1fYWxsb2Nfc3RhY2soc3RydWN0IGt2bV92bSAqdm0sIGludCBucl9wYWdlcyk7XG4gXHRcImxlYSAxZiglJXJpcCksICUlcjEwXFxuXFx0XCJcdFx0XHRcdFxcXG4gXHRcImxlYSAyZiglJXJpcCksICUlcjExXFxuXFx0XCJcdFx0XHRcdFxcXG4gXHRmZXAgXCIxOiBcIiBpbnNuIFwiXFxuXFx0XCJcdFx0XHRcdFx0XFxcbi1cdFwieG9yICUlcjksICUlcjlcXG5cXHRcIlx0XHRcdFx0XHRcXFxuK1x0XCJtb3YgJDAsICUlcjlkXFxuXFx0XCJcdFx0XHRcdFx0XFxcbiBcdFwiMjpcXG5cXHRcIlx0XHRcdFx0XHRcdFxcXG4gXHRcIm1vdiAgJSVyOWIsICVbdmVjdG9yXVxcblxcdFwiXHRcdFx0XHRcXFxuIFx0XCJtb3YgICUlcjEwLCAlW2Vycm9yX2NvZGVdXFxuXFx0XCJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDA0ZjVlMzRkZWEzYWUuLmNkODJhNmJlNjk2M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTMwOSwxMjYgKzMwOSw5MSBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XG4gXG4gI2luY2x1ZGUgXCJldm1jcy5oXCJcbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXhvbiAlW3BhXTsgc2V0bmEgJVtyZXRdXCJcbi1cdFx0OiBbcmV0XVwiPXJtXCIocmV0KVxuLVx0XHQ6IFtwYV1cIm1cIihwaHlzKVxuLVx0XHQ6IFwiY2NcIiwgXCJtZW1vcnlcIik7XG4tXG4tXHRyZXR1cm4gcmV0O1xuKyNkZWZpbmUgR1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCBfX3IsIF9fcGEpXHRcdFxcXG4rXHRfX0dVRVNUX0FTU0VSVCghX19yLCBfX3N0cmluZ2lmeShpbnNuKSBcIlsweCVseF0gaGl0ICVzXCIsXHRcXFxuK1x0XHQgICAgICAgX19wYSwgX19yIFx1MDAzYyAwID8gXCJWTS1GYWlsXCIgOiBleF9zdHIoX19yKSlcbitcbisjZGVmaW5lIEJVSUxEX1ZNQ1NfQVNNX0hFTFBFUlMoaW5zbilcdFx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih1NjQgdm1jc19wYSlcdFx0XHRcdFx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHU2NCBlcnJvcl9jb2RlO1x0XHRcdFx0XHRcdFx0XFxcbitcdHU4IHZlY3RvcjtcdFx0XHRcdFx0XHRcdFxcXG4rXHR1OCBmYWlsZWQ7XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUoS1ZNX0FTTV9TQUZFKF9fc3RyaW5naWZ5KGluc24pIFwiICVbcGFdXCIpXHRcdFxcXG4rXHRcdCAgICAgXCJcXG5cXHRzZXRuYSAlW2ZhaWxlZF1cIlx0XHRcdFx0XFxcbitcdFx0ICAgICA6IEtWTV9BU01fU0FGRV9PVVRQVVRTKHZlY3RvciwgZXJyb3JfY29kZSksXHRcXFxuK1x0XHQgICAgICAgW2ZhaWxlZF1cIj1xbVwiKGZhaWxlZClcdFx0XHRcdFxcXG4rXHRcdCAgICAgOiBbcGFdXCJtXCIodm1jc19wYSlcdFx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFwiY2NcIiwgXCJtZW1vcnlcIiwgS1ZNX0FTTV9TQUZFX0NMT0JCRVJTKTtcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cmV0dXJuIHZlY3RvciA/IHZlY3RvciA6IGZhaWxlZCA/IC1FSU5WQUwgOiAwO1x0XHRcdFxcXG4rfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zbih1NjQgdm1jc19wYSlcdFx0XHRcdFx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGludCByZXQgPSBfXyMjaW5zbih2bWNzX3BhKTtcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0R1VFU1RfQVNTRVJUX1ZNWF9JTlNOX1NVQ0NFRURFRChpbnNuLCByZXQsIHZtY3NfcGEpO1x0XHRcXFxuIH1cbiBcbitCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZteG9uKVxuK0JVSUxEX1ZNQ1NfQVNNX0hFTFBFUlModm1wdHJsZClcbitCVUlMRF9WTUNTX0FTTV9IRUxQRVJTKHZtY2xlYXIpXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHZteG9mZih2b2lkKVxuIHtcbiBcdF9fYXNtX18gX192b2xhdGlsZV9fKFwidm14b2ZmXCIpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCB2bWNsZWFyKHU2NCB2bWNzX3BhKVxuLXtcbi1cdHU4IHJldDtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fIChcInZtY2xlYXIgJVtwYV07IHNldG5hICVbcmV0XVwiXG4tXHRcdDogW3JldF1cIj1ybVwiKHJldClcbi1cdFx0OiBbcGFdXCJtXCIodm1jc19wYSlcbi1cdFx0OiBcImNjXCIsIFwibWVtb3J5XCIpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbi17XG4tXHR1OCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuLVx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4tXHRcdDogW3BhXVwibVwiKHZtY3NfcGEpXG4tXHRcdDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbitzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0KHZvaWQpXG4ge1xuLVx0dTY0IHRtcDtcbitcdHU2NCB2YWx1ZSA9IDA7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwiXG4tXHRcdDogW3ZhbHVlXVwiPW1cIih0bXApLCBbcmV0XVwiPXJtXCIocmV0KVxuK1x0XHQ6IFt2YWx1ZV1cIj1tXCIodmFsdWUpLCBbcmV0XVwiPXJtXCIocmV0KVxuIFx0XHQ6IDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbiBcbi1cdCp2YWx1ZSA9IHRtcDtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogQSB3cmFwcGVyIGFyb3VuZCB2bXB0cnN0IHRoYXQgaWdub3JlcyBlcnJvcnMgYW5kIHJldHVybnMgemVybyBpZiB0aGVcbi0gKiB2bXB0cnN0IGluc3RydWN0aW9uIGZhaWxzLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpXG4te1xuLVx0dTY0IHZhbHVlID0gMDtcbi1cdHZtcHRyc3QoXHUwMDI2dmFsdWUpO1xuK1x0X19HVUVTVF9BU1NFUlQoIXJldCwgXCJ2bXB0cnN0IGZhaWxlZFwiKTtcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKGVuYWJsZV9ldm1jcylcbi1cdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4tXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbi1cdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbi1cdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbi1cdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbi1cdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbi1cdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IDtcIlxuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuLVx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4tXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKSxcbi1cdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTtcbi1cbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlxuLVx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlxuLVx0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuLVx0XHRcdCAgICAgXCJ2bXJlc3VtZTtcIlxuLVx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogO1wiXG4tXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4tXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4tXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuLVx0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbi1cdHJldHVybiByZXQ7XG4rI2RlZmluZSBCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyhpbnNuKVx0XHRcdFx0XFxcbitzdGF0aWMgaW5saW5lIGludCBfXyMjaW5zbih2b2lkKVx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aW50IHJldDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmIChlbmFibGVfZXZtY3MpXHRcdFx0XHRcdFx0XFxcbitcdFx0cmV0dXJuIGV2bWNzXyMjaW5zbigpO1x0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcdFx0XHRcdFx0XFxcbitcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcdFx0XFxcbitcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlx0XHRcXFxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVx0XHRcdFxcXG4rXHRcdFx0ICAgICBfX3N0cmluZ2lmeShpbnNuKVwiO1wiXHRcdFx0XFxcbitcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXHRcdFx0XHRcXFxuK1x0XHRcdCAgICAgXCIxOiA7XCJcdFx0XHRcdFx0XFxcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cdFx0XHRcXFxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcdFx0XFxcbitcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFx0XHRcXFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcdFx0XHRcXFxuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1x0XHRcdFx0XFxcbitcdHJldHVybiByZXQ7XHRcdFx0XHRcdFx0XHRcXFxuK31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB2b2lkIGluc24odm9pZClcdFx0XHRcdFx0XHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aW50IHJldDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHJldCA9IF9fIyNpbnNuKCk7XHRcdFx0XHRcdFx0XFxcbitcdF9fR1VFU1RfQVNTRVJUKCFyZXQsIF9fc3RyaW5naWZ5KGluc24pIFwiIGhpdCBWTS1GYWlsXCIpO1x0XHRcXFxuIH1cbitCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bWxhdW5jaClcbitCVUlMRF9WTVhfVk1fRU5UUllfSEVMUEVSUyh2bXJlc3VtZSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdm1jYWxsKHZvaWQpXG4ge1xuQEAgLTU1MCw5ICs1MTUsOSBAQCB1bmlvbiB2bXhfY3RybF9tc3Ige1xuIH07XG4gXG4gc3RydWN0IHZteF9wYWdlcyAqdmNwdV9hbGxvY192bXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90ICpwX3ZteF9ndmEpO1xuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuK3ZvaWQgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuIHZvaWQgcHJlcGFyZV92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCwgdm9pZCAqZ3Vlc3RfcmlwKTtcbi1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpO1xuK3ZvaWQgbG9hZF92bWNzKHN0cnVjdCB2bXhfcGFnZXMgKnZteCk7XG4gXG4gYm9vbCBlcHRfMWdfcGFnZXNfc3VwcG9ydGVkKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcbmluZGV4IGUxOWU4YjVhMDljNWEuLjZhMTgxNWZiOTdlOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9tZW1zdHJlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvbWVtc3RyZXNzLmNcbkBAIC0zMywxNCArMzMsMTQgQEAgX19hc21fXyhcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHU2NCB2Y3B1X2lkKVxuIHtcbiBcdEdVRVNUX0FTU0VSVCh2bXgtXHUwMDNldm1jc19ncGEpO1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuK1x0bG9hZF92bWNzKHZteCk7XG4gXHRHVUVTVF9BU1NFUlQoZXB0XzFnX3BhZ2VzX3N1cHBvcnRlZCgpKTtcbiBcbiBcdCoodTY0ICopdm14LVx1MDAzZXN0YWNrID0gdmNwdV9pZDtcbiBcdHByZXBhcmVfdm1jcyh2bXgsIG1lbXN0cmVzc19sMl9ndWVzdF9lbnRyeSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuaW5kZXggMDg5ZTFhOGFmNTNmYy4uNWM2Y2FkYzA4NDA1YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuQEAgLTEyNSw3ICsxMjUsNyBAQCB2Y3B1X2FsbG9jX3ZteChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgKnBfdm14X2d2YSlcbiBcdHJldHVybiB2bXg7XG4gfVxuIFxuLWJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4rdm9pZCBwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4gXHR1NjQgZmVhdHVyZV9jb250cm9sO1xuIFx0dTY0IHJlcXVpcmVkO1xuQEAgLTE2MywyOCArMTYzLDIwIEBAIGJvb2wgcHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbihzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXG4gXHQvKiBFbnRlciBWTVggcm9vdCBvcGVyYXRpb24uICovXG4gXHQqKHUzMiAqKSh2bXgtXHUwMDNldm14b24pID0gdm1jc19yZXZpc2lvbigpO1xuLVx0aWYgKHZteG9uKHZteC1cdTAwM2V2bXhvbl9ncGEpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHZteG9uKHZteC1cdTAwM2V2bXhvbl9ncGEpO1xuIH1cbiBcbi1ib29sIGxvYWRfdm1jcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4rdm9pZCBsb2FkX3ZtY3Moc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbiBcdC8qIExvYWQgYSBWTUNTLiAqL1xuIFx0Kih1MzIgKikodm14LVx1MDAzZXZtY3MpID0gdm1jc19yZXZpc2lvbigpO1xuLVx0aWYgKHZtY2xlYXIodm14LVx1MDAzZXZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0dm1jbGVhcih2bXgtXHUwMDNldm1jc19ncGEpO1xuIFxuLVx0aWYgKHZtcHRybGQodm14LVx1MDAzZXZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0dm1wdHJsZCh2bXgtXHUwMDNldm1jc19ncGEpO1xuIFxuIFx0LyogU2V0dXAgc2hhZG93IFZNQ1MsIGRvIG5vdCBsb2FkIGl0IHlldC4gKi9cbiBcdCoodTMyICopKHZteC1cdTAwM2VzaGFkb3dfdm1jcykgPSB2bWNzX3JldmlzaW9uKCkgfCAweDgwMDAwMDAwdWw7XG4tXHRpZiAodm1jbGVhcih2bXgtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4rXHR2bWNsZWFyKHZteC1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBlcHRfdnBpZF9jYXBfc3VwcG9ydGVkKHU2NCBtYXNrKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvYXBlcmZtcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2FwZXJmbXBlcmZfdGVzdC5jXG5pbmRleCA4NDVjYjY4NWYxNzQzLi5hMDgyNjU4YzFlNDg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9hcGVyZm1wZXJmX3Rlc3QuY1xuQEAgLTcwLDggKzcwLDggQEAgc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuLVx0R1VFU1RfQVNTRVJUX0VRKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSwgdHJ1ZSk7XG4tXHRHVUVTVF9BU1NFUlRfRVEobG9hZF92bWNzKHZteCksIHRydWUpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpO1xuK1x0bG9hZF92bWNzKHZteCk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14LCBOVUxMKTtcbiBcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiBcdFx0dm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8IENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICpuZXN0ZWRfdGVzdF9kYXRhKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuaW5kZXggYWE3ZjNiNDA1ZmQzMi4uYTA2ZjM3ZTBiZDA2OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtNTUsMTEgKzU1LDExIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLFxuIFx0ZW5hYmxlX3ZwX2Fzc2lzdChodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3RfZ3BhLCBodl9wYWdlcy1cdTAwM2V2cF9hc3Npc3QpO1xuIFx0ZXZtY3NfZW5hYmxlKCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0LyogTDIgZXhpdHMgdmlhIHZtY2FsbCBpZiB0ZXN0IGZhaWxzICovXG4gXHRzeW5jX3dpdGhfaG9zdCgyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuaW5kZXggNjNlYTE1MzNlNGVhZC4uYjdjMmEyNTQyOTFlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbkBAIC0yMyw3ICsyMywxMSBAQCBzdGF0aWMgaW50IHVkX2NvdW50O1xuIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0dWRfY291bnQrKztcbi1cdHJlZ3MtXHUwMDNlcmlwICs9IDM7IC8qIFZNTEFVTkNIICovXG4rXHQvKlxuK1x0ICogVk1MQVVOQ0ggaW5zbiBjYW4ndCBiZSBlYXNpbHkgY292ZXJlZCBieSBLVk1fQVNNX1NBRkUgZnJhbWV3b3JrIGJ1dFxuK1x0ICogbHVja2lseSB0aGUgaW5zdHJ1Y3Rpb24gaXMgYWx3YXlzIHRocmVlIGJ5dGVzLlxuK1x0ICovXG4rXHRyZWdzLVx1MDAzZXJpcCArPSAzO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbkBAIC04OSwyMCArOTMsMTkgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdGVuYWJsZV92cF9hc3Npc3QoaHZfcGFnZXMtXHUwMDNldnBfYXNzaXN0X2dwYSwgaHZfcGFnZXMtXHUwMDNldnBfYXNzaXN0KTtcbiBcdGV2bWNzX2VuYWJsZSgpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4gXHRHVUVTVF9TWU5DKDMpO1xuIFx0R1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gLTEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuIFx0R1VFU1RfU1lOQyg1KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSAtMXU7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bWxhdW5jaCgpKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSBFVk1DU19WRVJTSU9OO1xuIFx0R1VFU1RfU1lOQyg2KTtcbiBcbkBAIC0xMTcsMTcgKzEyMCwxNyBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0Y3VycmVudF92cF9hc3Npc3QtXHUwMDNlbmVzdGVkX2NvbnRyb2wuZmVhdHVyZXMuZGlyZWN0aHlwZXJjYWxsID0gMTtcbiBcdCoodTMyICopKGh2X3BhZ2VzLVx1MDAzZXBhcnRpdGlvbl9hc3Npc3QpID0gMDtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcbiBcdEdVRVNUX0FTU0VSVF9FUSgodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYpLCBOTUlfVkVDVE9SKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuIFxuIFx0LypcbiBcdCAqIE5NSSBmb3JjZXMgTDItXHUwMDNlTDEgZXhpdCwgcmVzdW1pbmcgTDIgYW5kIGhvcGUgdGhhdCBFVk1DUyBpc1xuIFx0ICogdXAtdG8tZGF0ZSAoUklQIHBvaW50cyB3aGVyZSBpdCBzaG91bGQgYW5kIG5vdCBhdCB0aGUgYmVnaW5uaW5nXG4gXHQgKiBvZiBsMl9ndWVzdF9jb2RlKCkuIEdVRVNUX1NZTkMoOSkgY2hlY2tzIHRoYXQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFxuIFx0R1VFU1RfU1lOQygxMCk7XG4gXG5AQCAtMTM4LDEzICsxNDEsMTMgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdHZtd3JpdGUoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKSB8XG4gXHRcdENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xuIFx0X19zZXRfYml0KE1TUl9GU19CQVNFIFx1MDAyNiAweDFmZmYsIHZteF9wYWdlcy1cdTAwM2Vtc3IgKyAweDQwMCk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xuIFxuIFx0LyogRW5hYmxlIGVubGlnaHRlbmVkIE1TUiBiaXRtYXAgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfZW5saWdodGVubWVudHNfY29udHJvbC5tc3JfYml0bWFwID0gMTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX01TUl9SRUFEKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlZ3Vlc3RfcmlwICs9IDI7IC8qIHJkbXNyICovXG4gXG5AQCAtMTUyLDE0ICsxNTUsMTQgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdF9fc2V0X2JpdChNU1JfR1NfQkFTRSBcdTAwMjYgMHgxZmZmLCB2bXhfcGFnZXMtXHUwMDNlbXNyICsgMHg0MDApO1xuIFx0LyogTWFrZSBzdXJlIEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQIGlzIHNldCAqL1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgfD0gSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX01TUl9CSVRNQVA7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBzZWUgRVhJVF9SRUFTT05fTVNSX1JFQUQgaGVyZSBzbyBlTVNSIGJpdG1hcCB3b3JrcyAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAzOyAvKiB2bWNhbGwgKi9cbiBcbiBcdC8qIE5vdyB0ZWxsIEtWTSB3ZSd2ZSBjaGFuZ2VkIE1TUi1CaXRtYXAgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9NU1JfQklUTUFQO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VndWVzdF9yaXAgKz0gMjsgLyogcmRtc3IgKi9cbiBcbkBAIC0xNjcsMjEgKzE3MCwyOSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0ICogTDIgVExCIGZsdXNoIHRlc3QuIEZpcnN0IFZNQ0FMTCBzaG91bGQgYmUgaGFuZGxlZCBkaXJlY3RseSBieSBMMCxcbiBcdCAqIG5vIFZNQ0FMTCBleGl0IGV4cGVjdGVkLlxuIFx0ICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWd1ZXN0X3JpcCArPSAyOyAvKiByZG1zciAqL1xuIFx0LyogRW5hYmxlIHN5bnRoZXRpYyB2bWV4aXQgKi9cbiBcdCoodTMyICopKGh2X3BhZ2VzLVx1MDAzZXBhcnRpdGlvbl9hc3Npc3QpID0gMTtcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfU1lOQygxMSk7XG4gXG4tXHQvKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEgKi9cbitcdC8qIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gY2F1c2VzICNVRCBhZnRlciBlbmxpZ2h0ZW5lZCBWTUxBVU5DSCAqL1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1wdHJsZChodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSkgPT0gVURfVkVDVE9SKTtcbitcbitcdC8qXG4rXHQgKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEuIEdVRVNUX1NZTkMoMTIpIHNpZ25hbHNcbitcdCAqIHRoZSBob3N0IHRvIGVuYWJsZSBndWVzdF91ZF9oYW5kbGVyKCkgd2hpY2ggY2Fubm90IGJlIGVuYWJsZWQgYmVmb3JlaGFuZFxuK1x0ICogdG8gbm90IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZpeHVwIGhhbmRsZXIgZnJvbSBLVk1fQVNNX1NBRkUoKS5cbitcdCAqL1xuK1x0R1VFU1RfU1lOQygxMik7XG4gXHRldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4gXHRHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7XG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuQEAgLTI1Myw3ICsyNjQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAzLCB2bXhfcGFnZXNfZ3ZhLCBodl9wYWdlc19ndmEsIGFkZHJfZ3ZhMmdwYSh2bSwgaGNhbGxfcGFnZSkpO1xuIFx0dmNwdV9zZXRfbXNyKHZjcHUsIEhWX1g2NF9NU1JfVlBfSU5ERVgsIHZjcHUtXHUwMDNlaWQpO1xuIFxuLVx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcbiBcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIE5NSV9WRUNUT1IsIGd1ZXN0X25taV9oYW5kbGVyKTtcbiBcbiBcdHByX2luZm8oXCJSdW5uaW5nIEwxIHdoaWNoIHVzZXMgRVZNQ1MgdG8gcnVuIEwyXFxuXCIpO1xuQEAgLTI4Myw3ICsyOTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0XHQvKiBGb3JjZSBpbW1lZGlhdGUgTDItXHUwMDNlTDEgZXhpdCBiZWZvcmUgcmVzdW1pbmcgKi9cbiBcdFx0aWYgKHN0YWdlID09IDgpIHtcbi1cdFx0XHRwcl9pbmZvKFwiSW5qZWN0aW5nIE5NSSBpbnRvIEwxIGJlZm9yZSBMMiBoYWQgYSBjaGFuY2UgdG8gcnVuIGFmdGVyIHJlc3RvcmVcXG5cIik7XG4rXHRcdFx0cHJfZGVidWcoXCJJbmplY3RpbmcgTk1JIGludG8gTDEgYmVmb3JlIEwyIGhhZCBhIGNoYW5jZSB0byBydW4gYWZ0ZXIgcmVzdG9yZVxcblwiKTtcbiBcdFx0XHRpbmplY3Rfbm1pKHZjcHUpO1xuIFx0XHR9XG4gXG5AQCAtMjkzLDkgKzMwMywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHQgKiBLVk1fU1RBVEVfTkVTVEVEX0VWTUNTIGlzIG5vdCBsb3N0LlxuIFx0XHQgKi9cbiBcdFx0aWYgKHN0YWdlID09IDkpIHtcbi1cdFx0XHRwcl9pbmZvKFwiVHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXFxuXCIpO1xuK1x0XHRcdHByX2RlYnVnKFwiVHJ5aW5nIGV4dHJhIEtWTV9HRVRfTkVTVEVEX1NUQVRFL0tWTV9TRVRfTkVTVEVEX1NUQVRFIGN5Y2xlXFxuXCIpO1xuIFx0XHRcdHZjcHUgPSBzYXZlX3Jlc3RvcmVfdm0odm0sIHZjcHUpO1xuIFx0XHR9XG4rXG4rXHRcdGlmIChzdGFnZSA9PSAxMikge1xuK1x0XHRcdHByX2RlYnVnKFwiVHJ5aW5nIGVubGlnaHRlbmVkIFZNTEFVTkNIIHdpdGggYW4gaW52YWxpZCBQVFJcXG5cIik7XG4rXHRcdFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgVURfVkVDVE9SLCBndWVzdF91ZF9oYW5kbGVyKTtcbitcdFx0fVxuIFx0fVxuIFxuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9rdm1fYnVzbG9ja190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuaW5kZXggMjVhMTgyYmUwMGE5Ny4uMzM3ZDNjMjhiYzZkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYva3ZtX2J1c2xvY2tfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2t2bV9idXNsb2NrX3Rlc3QuY1xuQEAgLTQyLDEzICs0MiwxMyBAQCBzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbi1cdEdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEdVRVNUX1JJUCwgKHU2NClsMl9ndWVzdF9jb2RlKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfY2xvc2Vfa3ZtX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2Nsb3NlX2t2bV90ZXN0LmNcbmluZGV4IGI5NzRjZmIzNDdkNmUuLjFmNGE1ZTQ0YTZlZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9jbG9zZV9rdm1fdGVzdC5jXG5AQCAtMzAsMTMgKzMwLDEzIEBAIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4ge1xuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKDApO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9kaXJ0eV9sb2dfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZGlydHlfbG9nX3Rlc3QuY1xuaW5kZXggMjZiNDc0YmYxMzUzNS4uNzk4N2NlNTBjMzgyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2RpcnR5X2xvZ190ZXN0LmNcbkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0dm9pZCAqbDJfcmlwO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdGlmICh2bXgtXHUwMDNlZXB0cF9ncGEpXG4gXHRcdGwyX3JpcCA9IGwyX2d1ZXN0X2NvZGVfdGRwX2VuYWJsZWQ7XG5AQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFx0cHJlcGFyZV92bWNzKHZteCwgbDJfcmlwKTtcbiBcbiBcdEdVRVNUX1NZTkMoVEVTVF9TWU5DX05PX0ZBVUxUKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfU1lOQyhURVNUX1NZTkNfTk9fRkFVTFQpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2VtdWxhdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9lbXVsYXRpb25fdGVzdC5jXG5pbmRleCBlMDhjNmIwNjk3ZTUwLi4xMWZlNGEzMWVkYTBiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZW11bGF0aW9uX3Rlc3QuY1xuQEAgLTY2LDggKzY2LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4gXHRcdFx0XHRcdCAgIEJJVF9VTEwoSU5URVJDRVBUX0hMVCk7XG4gXHRcdHZtY2ItXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IDA7XG4gXHR9IGVsc2Uge1xuLVx0XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih0ZXN0X2RhdGEpKTtcbi1cdFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh0ZXN0X2RhdGEpKTtcbitcdFx0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih0ZXN0X2RhdGEpO1xuK1x0XHRsb2FkX3ZtY3ModGVzdF9kYXRhKTtcbiBcbiBcdFx0cHJlcGFyZV92bWNzKHRlc3RfZGF0YSwgTlVMTCk7XG4gXHRcdEdVRVNUX0FTU0VSVCghdm13cml0ZShHVUVTVF9JRFRSX0xJTUlULCAwKSk7XG5AQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuIFx0XHRcdGV4aXRfaW5zbl9sZW4gPSB2bWNiLVx1MDAzZWNvbnRyb2wubmV4dF9yaXAgLSB2bWNiLVx1MDAzZXNhdmUucmlwO1xuIFx0XHRcdEdVRVNUX0FTU0VSVF9FUSh2bWNiLVx1MDAzZXNhdmUucmlwLCAodTY0KWwyX2luc3RydWN0aW9uKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRHVUVTVF9BU1NFUlRfRVEoaSA/IHZtcmVzdW1lKCkgOiB2bWxhdW5jaCgpLCAwKTtcbitcdFx0XHRpID8gdm1yZXN1bWUoKSA6IHZtbGF1bmNoKCk7XG4gXHRcdFx0ZXhpdF9yZWFzb24gPSB2bXJlYWR6KFZNX0VYSVRfUkVBU09OKTtcbiBcdFx0XHRleGl0X2luc25fbGVuID0gdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7XG4gXHRcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooR1VFU1RfUklQKSwgKHU2NClsMl9pbnN0cnVjdGlvbik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfZXhjZXB0aW9uc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuaW5kZXggYWVlYzMxMjFjOGU4My4uYzM2YzExYjVmNTE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2V4Y2VwdGlvbnNfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF9leGNlcHRpb25zX3Rlc3QuY1xuQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKVxuIHtcbiBcdEdVRVNUX0FTU0VSVCghdm13cml0ZShHVUVTVF9SSVAsICh1NjQpbDJfY29kZSkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUX0VRKHZlY3RvciA9PSBTU19WRUNUT1IgPyB2bWxhdW5jaCgpIDogdm1yZXN1bWUoKSwgMCk7XG4rXHR2ZWN0b3IgPT0gU1NfVkVDVE9SID8gdm1sYXVuY2goKSA6IHZtcmVzdW1lKCk7XG4gXG4gXHRpZiAodmVjdG9yID09IEZBS0VfVFJJUExFX0ZBVUxUX1ZFQ1RPUilcbiBcdFx0cmV0dXJuO1xuQEAgLTEyNSw5ICsxMjUsOSBAQCBzdGF0aWMgdm9pZCB2bXhfcnVuX2wyKHZvaWQgKmwyX2NvZGUsIGludCB2ZWN0b3IsIHUzMiBlcnJvcl9jb2RlKVxuIFxuIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiB7XG4tXHRHVUVTVF9BU1NFUlRfRVEocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpLCB0cnVlKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbiBcbi1cdEdVRVNUX0FTU0VSVF9FUShsb2FkX3ZtY3Modm14KSwgdHJ1ZSk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIE5VTEwpO1xuIFx0R1VFU1RfQVNTRVJUX0VRKHZtd3JpdGUoR1VFU1RfSURUUl9MSU1JVCwgMCksIDApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xuaW5kZXggOGMyYmE5Njc0NTU4ZS4uMTAxYzFmZTc5ZWViNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX2ludmFsaWRfY3IzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfaW52YWxpZF9jcjNfdGVzdC5jXG5AQCAtNDAsMjEgKzQwLDIxIEBAIHN0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1aW50cHRyX3Qgc2F2ZV9jcjM7XG4gXG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuIFx0LyogVHJ5IHRvIHJ1biBMMiB3aXRoIGludmFsaWQgQ1IzIGFuZCBtYWtlIHN1cmUgaXQgZmFpbHMgKi9cbiBcdHNhdmVfY3IzID0gdm1yZWFkeihHVUVTVF9DUjMpO1xuIFx0dm13cml0ZShHVUVTVF9DUjMsIC0xdWxsKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09XG4gXHRcdCAgICAgKEVYSVRfUkVBU09OX0ZBSUxFRF9WTUVOVFJZIHwgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSkpO1xuIFxuIFx0LyogTm93IHJlc3RvcmUgQ1IzIGFuZCBtYWtlIHN1cmUgTDIgcnVucyBzdWNjZXNzZnVsbHkgKi9cbiBcdHZtd3JpdGUoR1VFU1RfQ1IzLCBzYXZlX2NyMyk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0R1VFU1RfRE9ORSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RkcF9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90ZHBfZmF1bHRfdGVzdC5jXG5pbmRleCAyZTA0NTYzNzkwZmYyLi5kNmM0NDNlM2QxNDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdGRwX2ZhdWx0X3Rlc3QuY1xuQEAgLTU1LDEyICs1NSwxMiBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgsIHU2NCBleHBlY3RlZF9mYXVsdF9ncGEsXG4gXHR1NjQgZXhpdF9xdWFsO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2VudHJ5KTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFxuIFx0LyogVmVyaWZ5IHdlIGdvdCBhbiBFUFQgdmlvbGF0aW9uIGV4aXQgKi9cbiBcdF9fR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX0VQVF9WSU9MQVRJT04sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9uZXN0ZWRfdHNjX2FkanVzdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuY1xuaW5kZXggY2I3OWQ3Yjk2MTljMi4uYzYwZGVhODk5NjI0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19hZGp1c3RfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2NfYWRqdXN0X3Rlc3QuY1xuQEAgLTg2LDggKzg2LDggQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICpkYXRhKVxuIFx0XHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMgPSBkYXRhO1xuIFx0XHR1MzIgY29udHJvbDtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHRcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFx0XHRjb250cm9sID0gdm1yZWFkeihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MKTtcbkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqZGF0YSlcbiBcdFx0dm13cml0ZShDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBjb250cm9sKTtcbiBcdFx0dm13cml0ZShUU0NfT0ZGU0VULCBUU0NfT0ZGU0VUX1ZBTFVFKTtcbiBcbi1cdFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdFx0dm1sYXVuY2goKTtcbiBcdFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtID0gZGF0YTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcbmluZGV4IDE4Zjc2NTgzNWJmNGMuLmIyZmM3ZjBiNWIzYzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L25lc3RlZF90c2Nfc2NhbGluZ190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvbmVzdGVkX3RzY19zY2FsaW5nX3Rlc3QuY1xuQEAgLTEwNSw4ICsxMDUsOCBAQCBzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHQvKiBjaGVjayB0aGF0IEwxJ3MgZnJlcXVlbmN5IGxvb2tzIGFscmlnaHQgYmVmb3JlIGxhdW5jaGluZyBMMiAqL1xuIFx0Y2hlY2tfdHNjX2ZyZXEoVUNIRUNLX0wxKTtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogcHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dm13cml0ZShUU0NfTVVMVElQTElFUl9ISUdILCBUU0NfTVVMVElQTElFUl9MMiBcdTAwM2VcdTAwM2UgMzIpO1xuIFxuIFx0LyogbGF1bmNoIEwyICovXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0LyogY2hlY2sgdGhhdCBMMSdzIGZyZXF1ZW5jeSBzdGlsbCBsb29rcyBnb29kICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbmluZGV4IDUwNzM5MWFiMmM5MzAuLmY4ODQyN2U5MjVmY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5AQCAtOTgsMTcgKzk4LDE3IEBAIHN0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4gXG4gc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIHtcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KTtcbitcdGxvYWRfdm1jcyh2bXgpO1xuIFx0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4gXG4gXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikpKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0d2hpbGUgKDEpIHtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcbiBcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuLVx0XHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0XHR2bXJlc3VtZSgpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbmluZGV4IGQxZWRhZmQ1YWY3NTUuLjM3N2RmMDllNTgyYWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuQEAgLTc4LDggKzc4LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkICphcmcpXG4gXHRcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSkge1xuIFx0XHRcdGdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRcdFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdFx0XHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRcdFx0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXHRcdFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXG5pbmRleCA0YTEwNTZhNmNiOGRjLi4zOGM5Njg5YWM2MDE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zdGF0ZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc3RhdGVfdGVzdC5jXG5AQCAtNzUsMzIgKzc1LDMyIEBAIHZvaWQgdm14X2wyX2d1ZXN0X2NvZGUodm9pZClcbiBzdGF0aWMgdm9pZCB2bXhfbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4ge1xuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCB2bXhfbDJfZ3Vlc3RfY29kZSk7XG4gXG4gXHRHVUVTVF9TWU5DKDUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3QoKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0dm1sYXVuY2goKTtcbitcdEdVRVNUX0FTU0VSVCh2bXB0cnN0KCkgPT0gdm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGUgbGF1bmNoZWQgc3RhdGUgaXMgcHJlc2VydmVkLiAgKi9cbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdEdVRVNUX1NZTkMoNyk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXG4gXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICsgMyk7XG5AQCAtMTA4LDI4ICsxMDgsMjggQEAgc3RhdGljIHZvaWQgdm14X2wxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dm13cml0ZShTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLCBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyk7XG4gXHR2bXdyaXRlKFZNQ1NfTElOS19QT0lOVEVSLCB2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4rXHR2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4gXHRHVUVTVF9TWU5DKDgpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiBcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCAweGMwZmZlZSk7XG4gXHRHVUVTVF9TWU5DKDkpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZlZSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXZtY3NfZ3BhKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xuK1x0dm1wdHJsZCh2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0dm1yZXN1bWUoKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bXB0cmxkKHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpKTtcbitcdHZtcHRybGQodm14X3BhZ2VzLVx1MDAzZXNoYWRvd192bWNzX2dwYSk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihHVUVTVF9SSVApID09IDB4YzBmZmZmZWUpO1xuLVx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcmVzdW1lKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1sYXVuY2goKSk7XG4rXHRHVUVTVF9BU1NFUlQoX192bXJlc3VtZSgpKTtcbiBcdEdVRVNUX1NZTkMoMTMpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooR1VFU1RfUklQKSA9PSAweGMwZmZmZmVlKTtcbi1cdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh2bXJlc3VtZSgpKTtcbitcdEdVRVNUX0FTU0VSVChfX3ZtbGF1bmNoKCkpO1xuK1x0R1VFU1RfQVNTRVJUKF9fdm1yZXN1bWUoKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fZmxhdHRlbl9fKSkgZ3Vlc3RfY29kZSh2b2lkICphcmcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXG5pbmRleCAwZDgzNTE2ZjRiZDA4Li5iYjMxYTFiYTg5MzJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni90cmlwbGVfZmF1bHRfZXZlbnRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3RyaXBsZV9mYXVsdF9ldmVudF90ZXN0LmNcbkBAIC0yNSwxMiArMjUsMTIgQEAgdm9pZCBsMV9ndWVzdF9jb2RlX3ZteChzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4ge1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteC1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCk7XG4rXHRsb2FkX3ZtY3Modm14KTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXgsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHQvKiBMMiBzaG91bGQgdHJpcGxlIGZhdWx0IGFmdGVyIGEgdHJpcGxlIGZhdWx0IGV2ZW50IGluamVjdGVkLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XG4gXHRHVUVTVF9ET05FKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jXG5pbmRleCA0NjNmNzNhYTkxNTlhLi5mZTI5Yzg2OWEyMzU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY19hY2Nlc3NfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljX2FjY2Vzc190ZXN0LmNcbkBAIC0zOCw4ICszOCw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCB1bnNpZ25lZCBsb25nIGhpZ2hfZ3BhKVxuIHtcbiBcdHUzMiBjb250cm9sO1xuIFxuLVx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteF9wYWdlcykpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4gXG4gXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbkBAIC01MywxNCArNTMsMTQgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHVuc2lnbmVkIGxvbmcgaGlnaF9ncGEpXG4gXG4gXHQvKiBUcnkgdG8gbGF1bmNoIEwyIHdpdGggdGhlIG1lbW9yeS1iYWNrZWQgQVBJQy1hY2Nlc3MgYWRkcmVzcy4gKi9cbiBcdEdVRVNUX1NZTkModm1yZWFkeihBUElDX0FDQ0VTU19BRERSKSk7XG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcdEdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpO1xuIFxuIFx0dm13cml0ZShBUElDX0FDQ0VTU19BRERSLCBoaWdoX2dwYSk7XG4gXG4gXHQvKiBUcnkgdG8gcmVzdW1lIEwyIHdpdGggdGhlIHVuYmFja2VkIEFQSUMtYWNjZXNzIGFkZHJlc3MuICovXG4gXHRHVUVTVF9TWU5DKHZtcmVhZHooQVBJQ19BQ0NFU1NfQUREUikpO1xuLVx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdHZtcmVzdW1lKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcbiBcdEdVRVNUX0RPTkUoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9hcGljdl91cGRhdGVzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXG5pbmRleCBmOWI4OGE2ZjYxMTNkLi5lNTc4MjIxZGEyNDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfYXBpY3ZfdXBkYXRlc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2FwaWN2X3VwZGF0ZXNfdGVzdC5jXG5AQCAtMzMsOCArMzMsOCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4gXHR1MzIgY29udHJvbDtcbiBcbi1cdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbitcdHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKTtcbitcdGxvYWRfdm1jcyh2bXhfcGFnZXMpO1xuIFxuIFx0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuIFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSk7XG5AQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIFJ1biBMMiB0byBzd2l0Y2ggdG8geDJBUElDIG1vZGUsIHdoaWNoIGluIHR1cm4gd2lsbCB1bmluaGliaXQgQVBJQ3YsXG4gXHQgKiBhcyBLVk0gc2hvdWxkIGZvcmNlIHRoZSBBUElDIElEIGJhY2sgdG8gaXRzIGRlZmF1bHQuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR2bWxhdW5jaCgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHR2bXdyaXRlKEdVRVNUX1JJUCwgdm1yZWFkeihHVUVTVF9SSVApICsgdm1yZWFkeihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTikpO1xuIFx0R1VFU1RfQVNTRVJUKHJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFKSBcdTAwMjYgTVNSX0lBMzJfQVBJQ0JBU0VfRVhURCk7XG5AQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdCAqIGhhbmRsZXMgdGhlIHgyQVBJQyA9XHUwMDNlIHhBUElDIHRyYW5zaXRpb24gYW5kIGluaGliaXRzIEFQSUN2IHdoaWxlIEwyXG4gXHQgKiBpcyBhY3RpdmUuXG4gXHQgKi9cbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9BU1NFUlQoIShyZG1zcihNU1JfSUEzMl9BUElDQkFTRSkgXHUwMDI2IE1TUl9JQTMyX0FQSUNCQVNFX0VYVEQpKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggYzgzNzkxMjRiMzE3Mi4uMzAxNzkzOGZhOTkzNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC00MSw4ICs0MSw4IEBAIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiB7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHRHVUVTVF9BU1NFUlQoISh2bXJlYWR6KENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSB8fFxuIFx0XHQgICAgICEodm1yZWFkeihTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MKSBcdTAwMjYgU0VDT05EQVJZX0VYRUNfVU5SRVNUUklDVEVEX0dVRVNUKSk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcbiBcdC8qIEwyIHNob3VsZCB0cmlwbGUgZmF1bHQgYWZ0ZXIgbWFpbigpIHN0dWZmcyBpbnZhbGlkIGd1ZXN0IHN0YXRlLiAqL1xuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG5pbmRleCA3NTA3M2VmYTkyNmRhLi5iMzY1MWM1YWIxMzg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0LmNcbkBAIC0zNyw4ICszNyw4IEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfQVNTRVJUKHJkbXNyKE1TUl9HU19CQVNFKSA9PSBMQTU3X0dTX0JBU0UpO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXHRwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcyk7XG4rXHRsb2FkX3ZtY3Modm14X3BhZ2VzKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUpO1xuIFxuQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHRndWVzdF9jcjQgXHUwMDI2PSB+WDg2X0NSNF9MQTU3O1xuIFx0dm13cml0ZShHVUVTVF9DUjQsIGd1ZXN0X2NyNCk7XG4gXG4tXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuK1x0dm1sYXVuY2goKTtcbiBcbiBcdGV4aXRfcmVhc29uID0gdm1yZWFkeihWTV9FWElUX1JFQVNPTik7XG4gXHRHVUVTVF9BU1NFUlQoZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jXG5pbmRleCBlYjgwMjFjMzNjZDQzLi5jZGE1M2RmMzM4ODhlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdC5jXG5AQCAtNzEsOSArNzEsOSBAQCB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0dTY0IGwxX3RzY19kZWFkbGluZSwgbDJfdHNjX2RlYWRsaW5lO1xuIFxuIFx0R1VFU1RfQVNTRVJUKHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4tXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbi1cdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSB2bXhfcGFnZXMtXHUwMDNldm1jc19ncGEpO1xuK1x0cHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpO1xuK1x0bG9hZF92bWNzKHZteF9wYWdlcyk7XG4rXHRHVUVTVF9BU1NFUlQodm1wdHJzdCgpID09IHZteF9wYWdlcy1cdTAwM2V2bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlKTtcbiBcbkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXHQgICAgIShjdHJsX2V4aXRfcmV2LmNsciBcdTAwMjYgVk1fRVhJVF9TQVZFX1ZNWF9QUkVFTVBUSU9OX1RJTUVSKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHZtbGF1bmNoKCk7XG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdHZtd3JpdGUoR1VFU1RfUklQLCB2bXJlYWR6KEdVRVNUX1JJUCkgKyB2bXJlYWR6KFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKSk7XG4gXG5AQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG4gXG4gXHRsMV92bXhfcHRfc3RhcnQgPSAocmR0c2MoKSBcdTAwM2VcdTAwM2Ugdm14X3B0X3JhdGUpIFx1MDAzY1x1MDAzYyB2bXhfcHRfcmF0ZTtcbiBcbi1cdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR2bXJlc3VtZSgpO1xuIFxuIFx0bDFfdm14X3B0X2ZpbmlzaCA9IHJkdHNjKCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzo1Njo0Ni4wNzA2NDgxNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA2MDQ0NTM5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIFZNWCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHR3ZWFraW5nIHRoZSBoYW5kbGluZyBvZiBgVk1QVFJMRGAgYW5kIGBWTVBUUlNUYCB3aXRoaW4gS1ZNJ3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSSBzZWUgY2hhbmdlcyB0byBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLCBhbG9uZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc2VsZnRlc3RzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhgIGFuZCBlbHNld2hlcmUuXG5cbkZvY3VzaW5nIG9uIGBoYW5kbGVfdm1wdHJsZGAsIGl0IHNlZW1zIHdlJ3JlIG5vdyBleHBsaWNpdGx5IHByZXZlbnRpbmcgYSBcIm5vcm1hbFwiIGBWTVBUUkxEYCBpZiB0aGUgXCJFbmxpZ2h0ZW5lZFwiIHZlcnNpb24gaGFzIGJlZW4gdXNlZC4gVGhlIGNvZGUgbm93IHRyaWdnZXJzIGEgVUQgZXhjZXB0aW9uIChgVURfVkVDVE9SYCkgaW4gdGhpcyBjYXNlLiAgVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGVzc2VudGlhbGx5LCBlbmZvcmNpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBlcnJvcmluZyBvdXQgaWYgdGhpbmdzIGFyZSBub3QgYXMgYW50aWNpcGF0ZWQuXG5cblRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgYGhhbmRsZV92bXB0cnN0YC4gUHJldmlvdXNseSwgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoKWAgd2FzIHRydWUsIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gMSwgbWVhbmluZyBpdCB3b3VsZCBlZmZlY3RpdmVseSBkbyBub3RoaW5nLiBOb3csIHRob3VnaCwgaXQncyBjaGFuZ2VkLiBXaXRoIHRoZSBhZGRpdGlvbiBvZiBgI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWYCwgdGhlIGNvZGUgbm93IHNldHMgYGN1cnJlbnRfdm1wdHJgIHRvIGB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyYCB3aGVuIGl0IHNlZXMgYW4gZVZNQ1MuICBUaGVuIGl0IGdvZXMgb24gdG8gd3JpdGUgKnRoYXQqIHZhbHVlIHRvIGd1ZXN0IG1lbW9yeS4gIFRoaXMgYmVoYXZpb3IgbWFrZXMgc2Vuc2UgaWYgeW91J3JlIHdvcmtpbmcgd2l0aCBIeXBlci1WIFRMRlMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSG9sZCBvbiwgaXMgdGhpcyBnb2luZyB0byBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/XCIgIFdlJ3JlIGRlYWxpbmcgd2l0aCBgY3VycmVudF92bXB0cmAsIGEgYGdwYV90YCAoc28sIGEgYHU2NGApLiAgSXQncyBhc3NpZ25lZCBlaXRoZXIgYHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHJgIG9yIGB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHJgLiBCb3RoIG9mIHRoZXNlIGFyZSB3aXRoaW4gdGhlIGBuZXN0ZWRfdm14YCBzdHJ1Y3QuIEJ1dCBhZnRlciBhIHNlY29uZCBsb29rLCBJIGNhbiBzZWUgdGhhdCBgaHZfZXZtY3Nfdm1wdHJgIGlzIGluaXRpYWxpemVkIHdoZW4gZVZNQ1MgaXMgbG9hZGVkIGFuZCBgY3VycmVudF92bXB0cmAgaXMgaW5pdGlhbGl6ZWQgd2hlbiBgVk1QVFJMRGAgZXhlY3V0ZXMuIFdlJ3JlIG5vdCByZWFkaW5nIGZyb20gYW4gdW5pbml0aWFsaXplZCBmaWVsZC4gVGhlIHBhdGNoIGlzIHNpbXBseSBlbnN1cmluZyB0aGF0IGl0IHdyaXRlcyBhIGtub3duIEdQQSBmb3IgZVZNQ1MgdXNhZ2UuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgd3JpdGUgdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAgd2l0aGluIGBoYW5kbGVfdm1wdHJzdGAuIFRoZSBjb2RlIGdyYWJzIHRoZSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgKGBndmFgKSBhbmQgd3JpdGVzIHRoZSBmdWxseSBpbml0aWFsaXplZCBgY3VycmVudF92bXB0cmAgdG8gaXQuIEknbSBzYXRpc2ZpZWQgdGhhdCBgY3VycmVudF92bXB0cmAgaXMgYW4gOC1ieXRlIHZhbHVlIGFuZCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiwgc28gbm8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBoZXJlLlxuXG5TbywgYWZ0ZXIgdGhpcyBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIHJpc2tzLiBJdCdzIHNpbXBseSBjaGFuZ2luZyB0aGUgKnZhbHVlKiB3cml0dGVuIGluIGEgc3BlY2lmaWMgZVZNQ1Mgc2NlbmFyaW8uIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIzNiwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6NTc6MDYuNjc1MTA1MDQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGluIEtWTSdzIFZNWCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZS4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igd2hlbiBlVk1DUyBpcyB1c2VkOiBpbnN0ZWFkIG9mIHJldHVybmluZyAxIChkb2luZyBub3RoaW5nKSwgaXQgbm93IHNldHMgdGhlIGxvY2FsIHZhcmlhYmxlIGBjdXJyZW50X3ZtcHRyYCB0byBgaHZfZXZtY3Nfdm1wdHJgIGFuZCB3cml0ZXMgaXQgdG8gZ3Vlc3QgbWVtb3J5LiBgY3VycmVudF92bXB0cmAgaXMgYSBgZ3BhX3RgIChhIDY0LWJpdCBpbnRlZ2VyKSwgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGd1ZXN0IHZpYSBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gVGhlcmUgYXJlIG5vIHN0cnVjdHMgd2l0aCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGludm9sdmVkLiBUaGUgcmVzdCBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gS1ZNIHNlbGZ0ZXN0cy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgaW4gS1ZNJ3MgVk1YIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLiBJbiBgaGFuZGxlX3ZtcHRyc3RgLCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciB3aGVuIGVWTUNTIGlzIHVzZWQ6IGluc3RlYWQgb2YgcmV0dXJuaW5nIDEgKGRvaW5nIG5vdGhpbmcpLCBpdCBub3cgc2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAgYW5kIHdyaXRlcyBpdCB0byBndWVzdCBtZW1vcnkuIGBjdXJyZW50X3ZtcHRyYCBpcyBhIGBncGFfdGAgKGEgNjQtYml0IGludGVnZXIpLCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byB0aGUgZ3Vlc3QgdmlhIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGVyZSBhcmUgbm8gc3RydWN0cyB3aXRoIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgaW52b2x2ZWQuIFRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBLVk0gc2VsZnRlc3RzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmwqkm[1] Phase: Succeeded StartedAt: 2026-08-26 23:57:17 +0000 UTC FinishedAt: 2026-08-26 23:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 23:57:17 +0000 UTC FinishedAt: 2026-08-26 23:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2] Phase: Succeeded StartedAt: 2026-08-26 23:57:17 +0000 UTC FinishedAt: 2026-08-27 03:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 23:57:17 +0000 UTC FinishedAt: 2026-08-27 03:36:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 23:57:17 +0000 UTC FinishedAt: 2026-08-26 23:57:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-26 23:57:17 +0000 UTC FinishedAt: 2026-08-26 23:57:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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-workflowmwqkm/series-workflowmwqkm-convert-artifact-1779624607/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 23:57:27 +0000 UTC FinishedAt: 2026-08-27 00:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-26 23:57:27 +0000 UTC FinishedAt: 2026-08-27 00:13:36 +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:*8d287325-8630-4cd7-b1e4-726dc086338a,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-workflowmwqkm/series-workflowmwqkm-convert-artifact-1779624607/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": "82667d7c-f17b-4f3b-8d3c-0c6cbabfadae", "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-workflowmwqkm/series-workflowmwqkm-build-action-727407781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-26 23:57:27 +0000 UTC FinishedAt: 2026-08-27 00:13:26 +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:*8d287325-8630-4cd7-b1e4-726dc086338a,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-workflowmwqkm/series-workflowmwqkm-convert-artifact-1779624607/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": "82667d7c-f17b-4f3b-8d3c-0c6cbabfadae", "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-workflowmwqkm/series-workflowmwqkm-build-action-727407781/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 00:13:36 +0000 UTC FinishedAt: 2026-08-27 00:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:13:36 +0000 UTC FinishedAt: 2026-08-27 00:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 00:13:36 +0000 UTC FinishedAt: 2026-08-27 00:13:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:13:36 +0000 UTC FinishedAt: 2026-08-27 00:13:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-workflowmwqkm/series-workflowmwqkm-convert-artifact-2412945454/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 00:13:46 +0000 UTC FinishedAt: 2026-08-27 00:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:13:46 +0000 UTC FinishedAt: 2026-08-27 00:15:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82667d7c-f17b-4f3b-8d3c-0c6cbabfadae,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-workflowmwqkm/series-workflowmwqkm-build-action-727407781/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-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 00:15:44 +0000 UTC FinishedAt: 2026-08-27 00:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:15:44 +0000 UTC FinishedAt: 2026-08-27 00:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 00:15:44 +0000 UTC FinishedAt: 2026-08-27 00:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:15:44 +0000 UTC FinishedAt: 2026-08-27 00:31:37 +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:*8d287325-8630-4cd7-b1e4-726dc086338a,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-workflowmwqkm/series-workflowmwqkm-convert-artifact-2412945454/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": "6030704b-d49c-4412-8a02-77377fb3ab3a", "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-workflowmwqkm/series-workflowmwqkm-build-action-2953533250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:15:44 +0000 UTC FinishedAt: 2026-08-27 00:31:27 +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:*8d287325-8630-4cd7-b1e4-726dc086338a,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-workflowmwqkm/series-workflowmwqkm-convert-artifact-2412945454/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": "6030704b-d49c-4412-8a02-77377fb3ab3a", "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-workflowmwqkm/series-workflowmwqkm-build-action-2953533250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 00:31:37 +0000 UTC FinishedAt: 2026-08-27 00:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:31:37 +0000 UTC FinishedAt: 2026-08-27 00:31:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 00:31:37 +0000 UTC FinishedAt: 2026-08-27 00:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:31:37 +0000 UTC FinishedAt: 2026-08-27 00:33:47 +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:*6030704b-d49c-4412-8a02-77377fb3ab3a,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-workflowmwqkm/series-workflowmwqkm-build-action-2953533250/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-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 00:33:57 +0000 UTC FinishedAt: 2026-08-27 03:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:33:57 +0000 UTC FinishedAt: 2026-08-27 03:36:31 +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":["handle_vmptrld","handle_vmptrst"],"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:*82667d7c-f17b-4f3b-8d3c-0c6cbabfadae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6030704b-d49c-4412-8a02-77377fb3ab3a,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-workflowmwqkm/series-workflowmwqkm-build-action-727407781/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-workflowmwqkm/series-workflowmwqkm-build-action-2953533250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:33:57 +0000 UTC FinishedAt: 2026-08-27 00:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:33:57 +0000 UTC FinishedAt: 2026-08-27 00:34:02 +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":["handle_vmptrld","handle_vmptrst"],"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-workflowmwqkm/series-workflowmwqkm-convert-artifact-3665668563/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:33:57 +0000 UTC FinishedAt: 2026-08-27 00:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 00:33:57 +0000 UTC FinishedAt: 2026-08-27 00:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:33:57 +0000 UTC FinishedAt: 2026-08-27 00:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:34:07 +0000 UTC FinishedAt: 2026-08-27 03:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwqkm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"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":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"05e0fdc0-95d2-4628-8e51-69eba92968cf","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-08-27 00:34:07 +0000 UTC FinishedAt: 2026-08-27 03:36:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82667d7c-f17b-4f3b-8d3c-0c6cbabfadae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6030704b-d49c-4412-8a02-77377fb3ab3a,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-workflowmwqkm/series-workflowmwqkm-build-action-727407781/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-workflowmwqkm/series-workflowmwqkm-build-action-2953533250/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-workflowmwqkm/series-workflowmwqkm-convert-artifact-3665668563/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,}