Name: series-workflowtjz4s Phase: Succeeded StartedAt: 2026-07-30 02:14:29 +0000 UTC FinishedAt: 2026-07-30 06:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[0] Phase: Succeeded StartedAt: 2026-07-30 02:14:29 +0000 UTC FinishedAt: 2026-07-30 02:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 02:14:29 +0000 UTC FinishedAt: 2026-07-30 02:38:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "974d0be0cb8e48d63b9d413a2e1a8fba16cd2583", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "974d0be0cb8e48d63b9d413a2e1a8fba16cd2583", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "9c58ed79-0cb6-4eeb-8005-ffe3be812d70" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hugetlb_page_hwpoison", "hugetlb_unref_page_hwpoison", "unpoison_memory", "folio_clear_hugetlb_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93", "a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c", "2406d176-ea76-40a8-b6bc-41d3e6326388" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHdwb2lzb24gaXMgaGFuZGxlZCBmb3IgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMuIEl0IG1vZGlmaWVzIGBmaWxlbWFwX3JlYWRgIHRvIGhhbmRsZSBod3BvaXNvbmVkIGZvbGlvcyBhbmQgdXBkYXRlcyBtZW1vcnkgZmFpbHVyZSByZWNvdmVyeSBsb2dpYy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIE1NIGFuZCBodWdldGxiZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDMyMGRkYzFmYTg2ZjEyODViNTdlZmJhZDc0MWIzMGY1MTg5YTM3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjM2OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBjZjZhZTY0Nzc2ZTYyLi5lZGRhYzRlZDIxNGIxIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvS2NvbmZpZ1xuQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFXG4gXHRkZWZfYm9vbCBIVUdFVExCRlNcbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjNDM7XHRzZWxlY3QgTEFSR0VfRk9MSU9cbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiBcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDIxNmUxYTBkZDBiMjMuLmNlZjdlNjFiODI3ZDcgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlJiM0MzsmIzQzOztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgJiM0Mzs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICYjNDM7PSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCAmIzQzOz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuJiM0MztcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cbkBAIC05MjYsOCAmIzQzOzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuJiM0MztcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGRElSOlxuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5AQCAtMTIwNiw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZF9pdGVyXHRcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcbiYjNDM7XHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MC4uMTg3ODY0MmU3NWVjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5AQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNTk1LDggJiM0Mzs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbi1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiYjNDM7XHR7XHRjb25zdCB2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiBcdFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XHRcdFxcXG4gXHR9XG4gXG5AQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiAjZWxzZVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuLWZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc3Bvb2w7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcbiB9XG5AQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG4gXHRyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpO1xuQEAgLTEwNzAsMTEgJiM0MzsxMDY5LDYgQEAgdm9pZCBodWdldGxiX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuICNlbmRpZlxuIFxuLS8qXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cbi0gKi9cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbi1cbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0cmV0dXJuIFBBR0VfTUFTSyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcbkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzYuLjg2YTJkMGZlZTU1N2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXG4mIzQzOyAqIEBodWdldGxiX2h3cG9pc29uOiBMaXN0IG9mIHBhZ2VzIHdpdGggaHdwb2lzb24uXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuJiM0MztcdFx0XHRzdHJ1Y3QgaHdwX3BhZ2UgKmh1Z2V0bGJfaHdwb2lzb247XG4gXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cbiBcdFx0fTtcbiBcdFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggNzIyM2Y2ZjRlMmI0MC4uMDdjYzc4NTRiMmRlMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTg5MywxNCAmIzQzOzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBURVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcbiAjZW5kaWZcbiBcbi0jaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pXG4gLypcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuLSAqIGNvbXBvdW5kIHBhZ2UuXG4mIzQzOyAqIGZvbGlvX2hhc19od3BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG4mIzQzOyAqIGZvbGlvLiAgVGhhdCBwYWdlIHdpbGwgdXN1YWxseSBhbHNvIGhhdmUgdGhlIEhXUG9pc29uIGZsYWcgc2V0LCBidXQgdGhpc1xuJiM0MzsgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGVcbiYjNDM7ICogc2NoZW1lIHVzZWQgaW4gdGhhdCBjYXNlKS4gIFlvdSBwcm9iYWJseSBkb24mIzM5O3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XG4mIzQzOyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cbiAgKlxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cbiAgKi9cbiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbiYjNDM7Rk9MSU9fVEVTVF9TRVRfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4mIzQzO0ZPTElPX1RFU1RfQ0xFQVJfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4gI2Vsc2VcbiBGT0xJT19GTEFHX0ZBTFNFKGhhc19od3BvaXNvbmVkKVxuICNlbmRpZlxuQEAgLTEwNDEsOCAmIzQzOzEwNDYsMjkgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlKSBcdTAwM2VcdTAwM2UgMjMpID09XG4mIzQzO1x0XHQoKFBHVFlfaHVnZXRsYiBcdTAwM2NcdTAwM2MgMSkgfCAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXHUwMDNjXHUwMDNjIDIzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgMjMpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbiYjNDM7I2VuZGlmXG4gI2Vsc2VcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcbiYjNDM7Rk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxuICNlbmRpZlxuIFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcbkBAIC0xMDY4LDEwICYjNDM7MTA5NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuJiM0Mztib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIC8qXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcbi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4tICogZmFpbGluZyBoYXJkd2FyZS5cbiYjNDM7ICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gIFRoaXMgY2hlY2sgaXMgYmVzdFxuJiM0MzsgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuJiM0MzsgKiBmYWlsaW5nIGhhcmR3YXJlLiAgVGhlIGNhbGxlciBtYXkgbm90IGhhdmUgYSByZWZjb3VudCBvbiB0aGUgZm9saW9cbiYjNDM7ICogY29udGFpbmluZyB0aGUgcGFnZSwgc28gd2UgbXVzdCBiZSBjYXJlZnVsIHRvIG5vdCB0cmlwIGFueSBhc3NlcnRpb25zLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbkBAIC0xMDgwLDEzICYjNDM7MTExMCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xuJiM0MztcdC8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqL1xuJiM0MztcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuLVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuJiM0MztcdHJldHVybiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkgfHxcbiYjNDM7XHQgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4gfVxuIFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAyYzM3MThkNTkyZDZkLi4yMmQ0ODkzNWZmZGE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJiMzOTt0XG4gXHRcdFx0XHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xuJiM0MztcdEFTX0FVVEhPUklUQVRJVkUgPSAxMSxcdC8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgJiM0MzszNDYsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfd3JpdGViYWNrX21heV9kZWFkbG9ja19vbl9yZWNsYWltKGNvbnN0IHN0cnVjdCBhZGRyZXNcbiBcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHRyZXR1cm4gbWFwcGluZy1cdTAwM2VnZnBfbWFzaztcbkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQmIzM5O3MgMU1CIGlmIHlvdSYjMzk7cmUgdXNpbmcgNGtCIHBhZ2VzKVxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMVUgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICYjNDM7NDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4mIzQzOyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXG4mIzQzOyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxuJiM0MzsgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cbiAgKlxuJiM0MzsgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbiYjNDM7ICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcbiAgKiBpcyBub24tYXRvbWljLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1pbixcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1heClcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XG4gfVxuQEAgLTUyNCw3ICYjNDM7NTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NC4uZTY2NmRkMTRjYTBjMyAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC04NDMsMTEgJiM0Mzs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gY29uZmlnIE1NX0lEXG4gXHRkZWZfYm9vbCBuXG4gXG4mIzQzO2NvbmZpZyBMQVJHRV9GT0xJT1xuJiM0MztcdGRlZl9ib29sIG5cbiYjNDM7XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQuLjVhOGNjMjBlNjI0ZTQgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTI0ODMsNiAmIzQzOzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIFx0XHRpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXG5AQCAtMjY5NSw2ICYjNDM7MjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4gXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHtcbiBcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgXHUwMDI2ZmlscC1cdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XG4gXG4mIzQzO1x0XHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9JTylcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuQEAgLTI3NDksNiAmIzQzOzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAocG9zMSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbiYjNDM7XHRcdHNpemVfdCBieXRlcylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbiYjNDM7XHRzaXplX3Qgc2FmZV9ieXRlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBieXRlcztcbiYjNDM7XHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbiYjNDM7XHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4mIzQzO1x0cGFnZSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuJiM0MztcdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5AQCAtMjgyOCw2ICYjNDM7Mjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpdGVyLVx1MDAzZWNvdW50KTtcbiBcbiYjNDM7XHRcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKSkge1xuJiM0MztcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuJiM0MztcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IChmc2l6ZSAtIDEpO1xuJiM0MztcdFx0XHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuJiM0MztcdFx0XHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiM0MztcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XG4gXHRcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XG5AQCAtMjg2MiwxNCAmIzQzOzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbiYjNDM7XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuJiM0MztcdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcbiBcbiBcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiBcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYuLjM1MzM0MDMwOTEwNzQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRpZiAocGluIFx1MDAyNlx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSlcbkBAIC0xMzgxLDYgJiM0MzsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcbiB9XG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxuJiM0MztcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4mIzQzO1x0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFJlbW92ZSBodWdldGxiIGZvbGlvIGZyb20gbGlzdHMuXG4gICogSWYgdm1lbW1hcCBleGlzdHMgZm9yIHRoZSBmb2xpbywgY2xlYXIgdGhlIGh1Z2V0bGIgZmxhZyBzbyB0aGF0IHRoZVxuQEAgLTE0MTksNyAmIzQzOzE0MzEsNyBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHQgKiB0byB0YWlsIHN0cnVjdCBwYWdlcy5cbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuLVx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXG4gXHRoLVx1MDAzZW5yX2h1Z2VfcGFnZXMtLTtcbiBcdGgtXHUwMDNlbnJfaHVnZV9wYWdlc19ub2RlW25pZF0tLTtcbkBAIC0xNDkzLDE3ICYjNDM7MTUwNSwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSlcbi1cdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4tXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxuIFx0XHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XG5AQCAtMTU5NSw3ICYjNDM7MTYwMCw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdF9mb2xpbywgbm9uX2h2b19mb2xpb3MsIGxydSkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTYyMCw3ICYjNDM7MTYyNSw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdFx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xuIFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTY1MywxNCAmIzQzOzE2NTgsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqIHNob3VsZCBvbmx5IGJlIHBhZ2VzIG9uIHRoZSBub25faHZvX2ZvbGlvcyBsaXN0LlxuIFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxuIFx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG4tXHQgKiBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuJiM0MztcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuIFx0ICovXG4gXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcbiBcdFZNX1dBUk5fT04ocmV0IFx1MDAzYyAwKTtcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZub25faHZvX2ZvbGlvcykgXHUwMDI2XHUwMDI2IHJldCkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFx1MDAyNm5vbl9odm9fZm9saW9zLCBscnUpXG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuQEAgLTE3NzUsNyAmIzQzOzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XG4gXG5AQCAtMzk5OCw3ICYjNDM7NDAwMyw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuJiM0MztcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0ICogZG9uJiMzOTt0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cbiBcdFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXG4gXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgJiM0Mzs2MzIzLDcgQEAgaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbiBcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcbiBcbiBcdHJldCA9IC1FSU87XG4tXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbiBcbiBcdHJldCA9IC1FRVhJU1Q7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTUuLmFiMjA5NGVkMzIwY2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgwOCw2MyAmIzQzOzE4MDgsODkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXG4mIzQzOy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTtcbiYjNDM7XG4gLypcbi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCYjMzQ7cmF3IGVycm9yIHBhZ2VcJiMzNDssXG4tICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cbiYjNDM7ICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcJiMzNDtlcnJvciBwYWdlXCYjMzQ7LFxuJiM0MzsgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cbiAgKi9cbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4mIzQzO3N0cnVjdCBod3BfcGFnZSB7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpuZXh0O1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcdTAwMjZmb2xpby1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbjtcbi19XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGh3cF9wYWdlICpwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbi1cdFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXG4gXHQvKlxuLVx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcbi1cdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiYjNDM7XHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xuJiM0MztcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiBcdCAqL1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuLVxuLVx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4tXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSkge1xuLVx0XHRcdHJldCA9IHRydWU7XG4mIzQzO1x0Zm9yIChwID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtXHUwMDNlbmV4dCkge1xuJiM0MztcdFx0aWYgKHBhZ2UgPT0gcC1cdTAwM2VwYWdlKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuJiM0MztcdHJldHVybiBwICE9IE5VTEw7XG4mIzQzO31cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXG4mIzQzOyAqL1xuJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuXG4mIzQzOyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkge1xuJiM0MztcdFx0cmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuIFxuLVx0aGVhZCA9IGxsaXN0X2RlbF9hbGwocmF3X2h3cF9saXN0X2hlYWQoZm9saW8pKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xuJiM0MztcdG5leHQgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uO1xuJiM0MztcdGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBOVUxMO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobmV4dCkge1xuJiM0MztcdFx0cCA9IG5leHQ7XG4mIzQzO1x0XHRuZXh0ID0gcC1cdTAwM2VuZXh0O1xuIFx0XHRpZiAobW92ZV9mbGFnKVxuIFx0XHRcdFNldFBhZ2VIV1BvaXNvbihwLVx1MDAzZXBhZ2UpO1xuIFx0XHRlbHNlXG5AQCAtMTg4MSwzNCAmIzQzOzE5MDcsNTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORURcdDNcdC8qIGZvbGlvIGFscmVhZHkgcG9pc29uZWQgKi9cbiAjZGVmaW5lXHRNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEXHQ0XHQvKiBleGFjdCBwYWdlIGFscmVhZHkgcG9pc29uZWQgKi9cbiAjZGVmaW5lXHRNRl9IVUdFVExCX1JFVFJZXHRcdDVcdC8qIGh1Z2VwYWdlIGlzIGJ1c3ksIHJldHJ5ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4mIzQzO1x0Zm9saW9fc2V0X2h1Z2VfcG9pc29uKGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBTZXQgaHVnZXRsYiBmb2xpbyBhcyBod3BvaXNvbmVkLCB1cGRhdGUgZm9saW8gcHJpdmF0ZSByYXcgaHdwb2lzb24gbGlzdFxuICAqIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBvaXNvbmVkIHBhZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdGludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogT25jZSB0aGUgaHdwb2lzb24gaHVnZXBhZ2UgaGFzIGxvc3QgcmVsaWFibGUgcmF3IGVycm9yIGluZm8sXG4tXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4tXHQgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuJiM0MztcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbiYjNDM7XHQgKiBzbyBza2lwIGFkZGluZyBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbi1cdGhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4gXHRcdGlmIChwLVx1MDAzZXBhZ2UgPT0gcGFnZSlcbi1cdFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7XG4tXHRpZiAocmF3X2h3cCkge1xuLVx0XHRyYXdfaHdwLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBoZWFkKTtcbiYjNDM7XHRpZiAocCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKHApIHtcbiYjNDM7XHRcdHAtXHUwMDNlcGFnZSA9IHBhZ2U7XG4mIzQzO1x0XHRwLVx1MDAzZW5leHQgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uO1xuJiM0MztcdFx0Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IHA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcbkBAIC0xOTE3LDE2ICYjNDM7MTk2NywyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQgKi9cbiBcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTtcbiBcdFx0Lypcbi1cdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcbiYjNDM7XHRcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCBod3BfcGFnZSBpcyBub3RcbiBcdFx0ICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC5cbiBcdFx0ICovXG4gXHRcdF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY291bnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4gXHQvKlxuIFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XG4gXHQgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJiMzOTt0IGV4aXN0LlxuQEAgLTE5NDEsNyAmIzQzOzE5OTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0Y291bnQgPSBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuIH1cbiBcbiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0xOTUwLDggJiM0MzsyMDA4LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XG4gXHRmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpO1xuJiM0MztcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuQEAgLTIxMDQsNiAmIzQzOzIxNjIsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4gI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4gXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXG5AQCAtMjY5NSw4ICYjNDM7Mjc1OCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuIFxuLVx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcbi1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cJiMzNDssXG4mIzQzO1x0aWYgKCFpc19wYWdlX2h3cG9pc29uKHApKSB7XG4mIzQzO1x0XHR1bnBvaXNvbl9wcl9pbmZvKFwmIzM0OyUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbkBAIC0yNzI1LDEzICYjNDM7Mjc4OCwxOSBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFxuIFx0Z2hwID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgTUZfVU5QT0lTT04pO1xuIFx0aWYgKCFnaHApIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0XHRodWdlID0gdHJ1ZTtcbiBcdFx0XHRjb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xuLVx0XHRcdGlmIChjb3VudCA9PSAwKVxuJiM0MztcdFx0XHRpZiAoY291bnQgPT0gMCkge1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gVGVzdENsZWFyUGFnZUhXUG9pc29uKHApID8gMCA6IC1FQlVTWTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBmb2xpb190ZXN0X2NsZWFyX2h3cG9pc29uKGZvbGlvKSA/IDAgOiAtRUJVU1k7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH0gZWxzZSBpZiAoZ2hwIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xuIFx0XHRcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xuQEAgLTI3NDAsMTYgJiM0MzsyODA5LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdFx0aHVnZSA9IHRydWU7XG4tXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRpZiAoY291bnQgPT0gMCkge1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdGh1Z2UgPSB0cnVlO1xuJiM0MztcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzIuLjMzMDA3ZThlNTQ2YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5AQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbm5vdCBoYW5kbGUgbGFyZ2UgZm9saW9zXG4gXHRcdFx0ICogaW4gYWxsIGNhc2VzIHlldC5cbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWYuLmZkMTlhMGJmYmZlNzYgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiAmIzQzOzE5NzgsMjIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaW5jZSB3ZSBjYW5ub3Qgc3BsaXQgYSBodWdldGxiIGZvbGlvLCB3ZSB3YW50IHRvIGluc2VydCBhIHBvaXNvblxuJiM0MzsgKiBlbnRyeSBpbnRvIHRoZSBwYWdlIHRhYmxlIGZvciB0aGUgd2hvbGUgZm9saW8gZXZlbiBpZiBvbmx5IG9uZSBwYWdlXG4mIzQzOyAqIGlzIHBvaXNvbmVkLiAgT3RoZXJ3aXNlLCB3ZSYjMzk7dmUgc3BsaXQgZG93biB0byB0aGUgUFRFIGxldmVsIGFuZCB3ZSBvbmx5XG4mIzQzOyAqIHdhbnQgdG8gcG9pc29uIHRoZSBwcmVjaXNlIHBhZ2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICghKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuJiM0MztcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBAYXJnOiBlbnVtIHR0dV9mbGFncyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGFyZ3VtZW50XG4gICovXG5AQCAtMTk5Myw3ICYjNDM7MjAwOSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSwgZW5kX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcbiBcdGludCBwdGVzID0gMDtcbiBcbiBcdC8qXG5AQCAtMjAyMyw5ICYjNDM7MjAzOCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuQEAgLTIxMjEsNyAmIzQzOzIxMzMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgcGFnZVxuIFx0XHRcdCAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuXG4gXHRcdFx0ICovXG4tXHRcdFx0Vk1fQlVHX09OX1BBR0UoIVBhZ2VIV1BvaXNvbihzdWJwYWdlKSwgc3VicGFnZSk7XG4mIzQzO1x0XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbyksXG4mIzQzO1x0XHRcdFx0XHRmb2xpbyk7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXG4gXHRcdFx0ICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heVxuQEAgLTIyMDAsMTIgJiM0MzsyMjEzLDEyIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuJiM0MztcdFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIGZsYWdzKSkge1xuIFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0XHRcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xuIFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4mIzQzO1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuQEAgLTI0MjMsNyAmIzQzOzI0MzYsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcbkBAIC0yNDUyLDkgJiM0MzsyNDY0LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKi9cbiBcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyYW5nZS5lbmQpO1xuLVxuLVx0XHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cbi1cdFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcbiBcdH1cbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcbkBAIC0yNjA3LDE0ICYjNDM7MjYxNiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHtcbiYjNDM7XHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcbiBcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuJiM0MztcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbkBAIC0yNjQ0LDcgJiM0MzsyNjUzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwdGV2YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbiBcdFx0XHRcdHJldCA9IGZhbHNlO1xuQEAgLTI2NTcsNyAmIzQzOzI2NjcsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgaHVnZXRsYl90cnlfc2hhcmVfYW5vbl9ybWFwKGZvbGlvKSkge1xuIFx0XHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxuLVx0XHRcdFx0XHRcdFx0cHRldmFsLCBoc3opO1xuJiM0MztcdFx0XHRcdFx0XHRcdHB0ZXZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0XHRcdHJldCA9IGZhbHNlO1xuIFx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xuIFx0XHRcdFx0XHRicmVhaztcbkBAIC0yNzAzLDcgJiM0MzsyNzE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdH1cbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTtcbiBcdFx0XHR0cmFjZV9zZXRfbWlncmF0aW9uX3B0ZShhZGRyZXNzLCBwdGVfdmFsKHN3cF9wdGUpLFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzLi40OTJjOWJlZjM2MjA3IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YS4uNzBlNTRhY2UwZTc0MSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTEwODYsNyAmIzQzOzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gXHRcdFx0Z290byBrZWVwO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJiMzOTt0IGhhbmRsZSBsYXJnZVxuIFx0XHRcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBkYjU3YzU3NjZhYjYwLi45NGVlZGNjN2YxYTllIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICYjNDM7Nzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy4gSXQgbW9kaWZpZXMgYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgZm9saW9zIGFuZCB1cGRhdGVzIG1lbW9yeSBmYWlsdXJlIHJlY292ZXJ5IGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgTU0gYW5kIGh1Z2V0bGJmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MzIwZGRjMWZhODZmMTI4NWI1N2VmYmFkNzQxYjMwZjUxODlhMzc1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMDI6MzY6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBjZjZhZTY0Nzc2ZTYyLi5lZGRhYzRlZDIxNGIxIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwotCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IExBUkdFX0ZPTElPCiAKIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAogCWRlZl9ib29sIEhVR0VUTEJfUEFHRQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzLi5jZWY3ZTYxYjgyN2Q3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTg3LDExMyAmIzQzOzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApOwogfQogCi0vKgotICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0LgotICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXcKLSAqIEhXUE9JU09OIHBhZ2UuCi0gKi8KLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsCi0JCXNpemVfdCBieXRlcykKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7Ci0Jc2l6ZV90IHNhZmVfYnl0ZXM7Ci0KLQlpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpCi0JCXJldHVybiAwOwotCS8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi8KLQlzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7Ci0JcGFnZSYjNDM7JiM0Mzs7Ci0KLQkvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi8KLQlmb3IgKDsgc2FmZV9ieXRlcyAmbHQ7IGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KQotCQlpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpCi0JCQlicmVhazsKLQotCXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwotfQotCi0vKgotICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZQotICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKLQlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLSZndDtmX21hcHBpbmc7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctJmd0O2hvc3Q7Ci0JdW5zaWduZWQgbG9uZyBpbmRleCA9IGlvY2ItJmd0O2tpX3BvcyAmZ3Q7Jmd0OyBodWdlX3BhZ2Vfc2hpZnQoaCk7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLSZndDtraV9wb3MgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpOwotCXVuc2lnbmVkIGxvbmcgZW5kX2luZGV4OwotCWxvZmZfdCBpc2l6ZTsKLQlzc2l6ZV90IHJldHZhbCA9IDA7Ci0KLQl3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXNpemVfdCBuciwgY29waWVkLCB3YW50OwotCi0JCS8qIG5yIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGZyb20gdGhpcyBwYWdlICovCi0JCW5yID0gaHVnZV9wYWdlX3NpemUoaCk7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCQlpZiAoIWlzaXplKQotCQkJYnJlYWs7Ci0JCWVuZF9pbmRleCA9IChpc2l6ZSAtIDEpICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQkJaWYgKGluZGV4ICZndDsgZW5kX2luZGV4KQotCQkJYnJlYWs7Ci0JCWlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHsKLQkJCW5yID0gKChpc2l6ZSAtIDEpICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoKSkgJiM0MzsgMTsKLQkJCWlmIChuciAmbHQ7PSBvZmZzZXQpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJbnIgPSBuciAtIG9mZnNldDsKLQotCQkvKiBGaW5kIHRoZSBmb2xpbyAqLwotCQlmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTsKLQkJaWYgKElTX0VSUihmb2xpbykpIHsKLQkJCS8qCi0JCQkgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGUKLQkJCSAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0LgotCQkJICovCi0JCQljb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7Ci0JCX0gZWxzZSB7Ci0JCQlmb2xpb191bmxvY2soZm9saW8pOwotCi0JCQlpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQotCQkJCXdhbnQgPSBucjsKLQkJCWVsc2UgewotCQkJCS8qCi0JCQkJICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0Ci0JCQkJICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlcgotCQkJCSAqIG9mZnNldC4KLQkJCQkgKi8KLQkJCQl3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTsKLQkJCQlpZiAod2FudCA9PSAwKSB7Ci0JCQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCQkJCXJldHZhbCA9IC1FSU87Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJLyoKLQkJCSAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLgotCQkJICovCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pOwotCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJfQotCQlvZmZzZXQgJiM0Mzs9IGNvcGllZDsKLQkJcmV0dmFsICYjNDM7PSBjb3BpZWQ7Ci0JCWlmIChjb3BpZWQgIT0gbnIgJmFtcDsmYW1wOyBpb3ZfaXRlcl9jb3VudCh0bykpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCQlpbmRleCAmIzQzOz0gb2Zmc2V0ICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQkJb2Zmc2V0ICZhbXA7PSB+aHVnZV9wYWdlX21hc2soaCk7Ci0JfQotCWlvY2ItJmd0O2tpX3BvcyA9ICgobG9mZl90KWluZGV4ICZsdDsmbHQ7IGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0OwotCXJldHVybiByZXR2YWw7Ci19Ci0KIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLApAQCAtODgzLDYgJiM0Mzs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJcmV0dXJuIGlub2RlOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSAqaHN0YXRlID0gaHN0YXRlX2lub2RlKGlub2RlKTsKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7CiYjNDM7CiYjNDM7CWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9uczsKJiM0MzsJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwomIzQzOwltYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpOwomIzQzOwltYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLSZndDtpX21hcHBpbmcpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyCiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW4KQEAgLTkyNiw4ICYjNDM7ODMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRlJFRzoKLQkJCWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9uczsKLQkJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MzsJCQlodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZESVI6CiAJCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpAQCAtMTIwNiw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7Ci0JLnJlYWRfaXRlcgkJPSBodWdldGxiZnNfcmVhZF9pdGVyLAomIzQzOwkucmVhZF9pdGVyCQk9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsCiAJLm1tYXAJCQk9IGh1Z2V0bGJmc19maWxlX21tYXAsCiAJLmZzeW5jCQkJPSBub29wX2ZzeW5jLAogCS5nZXRfdW5tYXBwZWRfYXJlYQk9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDJhYmFmOTkzMjFlOTAuLjE4Nzg2NDJlNzVlYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTsKIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7CkBAIC0yOTIsOCAmIzQzOzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKAotCQkJCQkJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTU5NSw4ICYjNDM7NTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3MgewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgX19hbHdheXNfaW5saW5lCQkJCQkJXAotYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKLQl7CXZvaWQgKnByaXZhdGUgPSAmYW1wO2ZvbGlvLSZndDtwcml2YXRlOwkJXAomIzQzO2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCVwKJiM0MzsJewljb25zdCB2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKIAkJcmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7CQlcCiAJfQogCkBAIC02MTYsNyAmIzQzOzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQkJXAogI2Vsc2UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgaW5saW5lIGJvb2wJCQkJCQlcCi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykJCVwKIAl7IHJldHVybiAwOyB9CiAKICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpCQkJCVwKQEAgLTcyNyw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzcG9vbDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGZvbGlvLSZndDtfaHVnZXRsYl9zdWJwb29sOwogfQpAQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pOwogCXJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7CkBAIC0xMDcwLDExICYjNDM7MTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpOwogI2VuZGlmCiAKLS8qCi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLgotICovCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBQQUdFX01BU0sgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTsKQEAgLTEwODgsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpAQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGIxOGMyYjJlN2QyYzYuLjg2YTJkMGZlZTU1N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90OwogICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguCiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguCi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS4KJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQkJc3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uOwogCS8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqLwogCQl9OwogCQlzdHJ1Y3QgcGFnZSBfX3BhZ2VfMzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggNzIyM2Y2ZjRlMmI0MC4uMDdjYzc4NTRiMmRlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTg5MywxNCAmIzQzOzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIFRFU1RQQUdFRkxBR19GQUxTRShUcmFuc0NvbXBvdW5kLCB0cmFuc2NvbXBvdW5kKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pCiAvKgotICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKLSAqIGNvbXBvdW5kIHBhZ2UuCiYjNDM7ICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXMKJiM0MzsgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGUKJiM0MzsgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbiYjMzk7dCB3YW50IHRvIGNhbGwgdGhpcyBkaXJlY3RseTsKJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuCiAgKgogICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLgogICovCiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQogI2Vsc2UKIEZPTElPX0ZMQUdfRkFMU0UoaGFzX2h3cG9pc29uZWQpCiAjZW5kaWYKQEAgLTEwNDEsOCAmIzQzOzEwNDYsMjkgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKQogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYikKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiAoUkVBRF9PTkNFKGZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSkgJmd0OyZndDsgMjMpID09CiYjNDM7CQkoKFBHVFlfaHVnZXRsYiAmbHQ7Jmx0OyAxKSB8IDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlmb2xpby0mZ3Q7cGFnZS5wYWdlX3R5cGUgfD0gKDEgJmx0OyZsdDsgMjMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSAmYW1wOz0gfigxICZsdDsmbHQ7IDIzKTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pCiYjNDM7I2VuZGlmCiAjZWxzZQogRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpCiYjNDM7Rk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKQogI2VuZGlmCiAKIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYykKQEAgLTEwNjgsMTAgJiM0MzsxMDk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpOwogfQogCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTsKJiM0MzsKIC8qCi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcwotICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aAotICogZmFpbGluZyBoYXJkd2FyZS4KJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0CiYjNDM7ICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGgKJiM0MzsgKiBmYWlsaW5nIGhhcmR3YXJlLiAgVGhlIGNhbGxlciBtYXkgbm90IGhhdmUgYSByZWZjb3VudCBvbiB0aGUgZm9saW8KJiM0MzsgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMTA4MCwxMyAmIzQzOzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkKIAkJcmV0dXJuIHRydWU7CiAJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwotCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pICZhbXA7JmFtcDsgUGFnZUhXUG9pc29uKCZhbXA7Zm9saW8tJmd0O3BhZ2UpOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpCiYjNDM7CQlyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpOwomIzQzOwkvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi8KJiM0MzsJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQlyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fAotCSAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7CiYjNDM7CXJldHVybiBQYWdlSFdQb2lzb24oJmFtcDtmb2xpby0mZ3Q7cGFnZSkgfHwKJiM0MzsJICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTsKIH0KIAogYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAyYzM3MThkNTkyZDZkLi4yMmQ0ODkzNWZmZGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3MgewogCUFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksCiAJQVNfS0VSTkVMX0ZJTEUgPSAxMCwJLyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbiYjMzk7dAogCQkJCSAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovCiYjNDM7CUFTX0FVVEhPUklUQVRJVkUgPSAxMSwJLyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQmIzM5O3MgYSBob2xlICovCiAJLyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi8KIAlBU19GT0xJT19PUkRFUl9CSVRTID0gNSwKIAlBU19GT0xJT19PUkRFUl9NSU4gPSAxNiwKQEAgLTM0NSw2ICYjNDM7MzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzCiAJcmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgJmFtcDttYXBwaW5nLSZndDtmbGFncyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKJiM0Mzt7CiYjNDM7CXNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgJmFtcDttYXBwaW5nLSZndDtmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgJmFtcDttYXBwaW5nLSZndDtmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewogCXJldHVybiBtYXBwaW5nLSZndDtnZnBfbWFzazsKQEAgLTM3Myw3ICYjNDM7Mzg0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlCiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQmIzM5O3MgMU1CIGlmIHlvdSYjMzk7cmUgdXNpbmcgNGtCIHBhZ2VzKQogICovCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJTwogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUglIUEFHRV9QTURfT1JERVIKICNlbHNlCiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSCTgKQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybiAxVSAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAmIzQzOyBNQVhfUEFHRUNBQ0hFX09SREVSKTsKIAlyZXR1cm4gUEFHRV9TSVpFOwogfQpAQCAtNDA1LDI5ICYjNDM7NDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpCiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLgogICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS4KICAqCi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0bwotICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGUwotICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQKLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzCi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLgomIzQzOyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yCiYjNDM7ICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mCiYjNDM7ICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwKJiM0MzsgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS4KICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLgogICoKJiM0MzsgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi4KJiM0MzsgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXQKICAqIGlzIG5vbi1hdG9taWMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkJCSB1bnNpZ25lZCBpbnQgbWluLAotCQkJCQkJIHVuc2lnbmVkIGludCBtYXgpCiYjNDM7CQl1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuOwotCi0JaWYgKG1pbiAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KLQlpZiAobWF4ICZndDsgTUFYX1BBR0VDQUNIRV9PUkRFUikKLQkJbWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjsKLQogCWlmIChtYXggJmx0OyBtaW4pCiAJCW1heCA9IG1pbjsKIApAQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIChtYXBwaW5nLSZndDtmbGFncyAmYW1wOyBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgJmd0OyZndDsgQVNfRk9MSU9fT1JERVJfTUFYOwogfQpAQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybiAwOwogCXJldHVybiAobWFwcGluZy0mZ3Q7ZmxhZ3MgJmFtcDsgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spICZndDsmZ3Q7IEFTX0ZPTElPX09SREVSX01JTjsKIH0KQEAgLTUyNCw3ICYjNDM7NTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGkKICAqCiAgKiBSZXR1cm46IFRydWUgaWYgUE1ELXNpemVkIGZvbGlvcyBhcmUgc3VwcG9ydGVkLCBvdGhlcndpc2UgZmFsc2UuCiAgKi8KLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPCiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAkvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi8KZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTQuLmU2NjZkZDE0Y2EwYzMgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtODQzLDExICYjNDM7ODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTwogY29uZmlnIE1NX0lECiAJZGVmX2Jvb2wgbgogCiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPCiYjNDM7CWRlZl9ib29sIG4KJiM0MzsJc2VsZWN0IFhBUlJBWV9NVUxUSQomIzQzOwogbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCWJvb2wgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUCiAJc2VsZWN0IENPTVBBQ1RJT04KLQlzZWxlY3QgWEFSUkFZX01VTFRJCiYjNDM7CXNlbGVjdCBMQVJHRV9GT0xJTwogCXNlbGVjdCBNTV9JRAogCWhlbHAKIAkgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmQKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA1OGViOWQyNDA2NDM0Li41YThjYzIwZTYyNGU0IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAogCQlpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJCWJyZWFrOwogCQlpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQkJYnJlYWs7CiAJCWlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpCkBAIC0yNjk1LDYgJiM0MzsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCwKIAlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHsKIAkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgJmFtcDtmaWxwLSZndDtmX3JhLCBtYXBwaW5nLCBpbmRleCk7CiAKJiM0MzsJCWlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpCiYjNDM7CQkJcmV0dXJuIDA7CiAJCWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX05PSU8pCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQpAQCAtMjc0OSw2ICYjNDM7Mjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAocG9zMSAmZ3Q7Jmd0OyBzaGlmdCA9PSBwb3MyICZndDsmZ3Q7IHNoaWZ0KTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsCiYjNDM7CQlzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7CiYjNDM7CXNpemVfdCBzYWZlX2J5dGVzOwomIzQzOwomIzQzOwlpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJcmV0dXJuIGJ5dGVzOwomIzQzOwlpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi8KJiM0MzsJc2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpOwomIzQzOwlwYWdlJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovCiYjNDM7CWZvciAoOyBzYWZlX2J5dGVzICZsdDsgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwlyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpCkBAIC0yODI4LDYgJiM0MzsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJZ290byBwdXRfZm9saW9zOwogCQllbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGl0ZXItJmd0O2NvdW50KTsKIAomIzQzOwkJaWYgKCFmb2xpb19iYXRjaF9jb3VudCgmYW1wO2ZiYXRjaCkpIHsKJiM0MzsJCQlzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpOwomIzQzOwkJCXNpemVfdCBvZmZzZXQgPSBpb2NiLSZndDtraV9wb3MgJmFtcDsgKGZzaXplIC0gMSk7CiYjNDM7CQkJc2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi0mZ3Q7a2lfcG9zLAomIzQzOwkJCQkJICAgICBmc2l6ZSAtIG9mZnNldCk7CiYjNDM7CQkJc2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpOwomIzQzOwomIzQzOwkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwomIzQzOwkJCWlvY2ItJmd0O2tpX3BvcyAmIzQzOz0gY29waWVkOwomIzQzOwkJCWxhc3RfcG9zID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwkJCWlmIChjb3BpZWQgJmx0OyBieXRlcykKJiM0MzsJCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQkvKgogCQkgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55CiAJCSAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6CkBAIC0yODYyLDE0ICYjNDM7MjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJCWlmICh3cml0YWJseV9tYXBwZWQpCiAJCQkJZmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTsKIAotCQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTsKJiM0MzsJCQljb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpOwomIzQzOwkJCWlmIChjb3BpZWQgJmx0OyBieXRlcykKJiM0MzsJCQkJZXJyb3IgPSAtRUlPOwomIzQzOwkJCWNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpOwogCiAJCQlhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDsKIAkJCWlvY2ItJmd0O2tpX3BvcyAmIzQzOz0gY29waWVkOwogCQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiAKIAkJCWlmIChjb3BpZWQgJmx0OyBieXRlcykgewotCQkJCWVycm9yID0gLUVGQVVMVDsKJiM0MzsJCQkJaWYgKCFlcnJvcikKJiM0MzsJCQkJCWVycm9yID0gLUVGQVVMVDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMmJjY2IwYTUzYTBhNi4uMzUzMzQwMzA5MTA3NCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC00NDEzLDcgJiM0Mzs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKJiM0MzsJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLAogCQlpZiAocGluICZhbXA7JmFtcDsgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlKSkKQEAgLTEzODEsNiAmIzQzOzEzODEsMTggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludAogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlCiYjNDM7CSAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkKJiM0MzsJCWZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pOwomIzQzOwomIzQzOwlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLgogICogSWYgdm1lbW1hcCBleGlzdHMgZm9yIHRoZSBmb2xpbywgY2xlYXIgdGhlIGh1Z2V0bGIgZmxhZyBzbyB0aGF0IHRoZQpAQCAtMTQxOSw3ICYjNDM7MTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkgKiB0byB0YWlsIHN0cnVjdCBwYWdlcy4KIAkgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpCi0JCV9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiYjNDM7CQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAogCWgtJmd0O25yX2h1Z2VfcGFnZXMtLTsKIAloLSZndDtucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tOwpAQCAtMTQ5MywxNyAmIzQzOzE1MDUsMTAgQEAgc3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCQlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzOwkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJfQogCi0JLyoKLQkgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsCi0JICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuCi0JICovCi0JaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkKLQkJZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7Ci0KIAlWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pOwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSkKIAkJaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oZm9saW8pOwpAQCAtMTU5NSw3ICYjNDM7MTYwMCw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdF9mb2xpbywgbm9uX2h2b19mb2xpb3MsIGxydSkgewogCQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIAkJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCQl1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpOwogCQkJY29uZF9yZXNjaGVkKCk7CkBAIC0xNjIwLDcgJiM0MzsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwKIAkJCX0gZWxzZSB7CiAJCQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIAkJCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJCQlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzOwkJCQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAkJCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQkJCXVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7CiAJCQkJY29uZF9yZXNjaGVkKCk7CkBAIC0xNjUzLDE0ICYjNDM7MTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLAogCSAqIHNob3VsZCBvbmx5IGJlIHBhZ2VzIG9uIHRoZSBub25faHZvX2ZvbGlvcyBsaXN0LgogCSAqIERvIG5vdGUgdGhhdCB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdCBjb3VsZCBiZSBlbXB0eS4KIAkgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwKLQkgKiBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LgomIzQzOwkgKiBmb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS4KIAkgKi8KIAlWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTsKIAlWTV9XQVJOX09OKHJldCAmbHQ7IDApOwogCWlmICghbGlzdF9lbXB0eSgmYW1wO25vbl9odm9fZm9saW9zKSAmYW1wOyZhbXA7IHJldCkgewogCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgJmFtcDtub25faHZvX2ZvbGlvcywgbHJ1KQotCQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAl9CiAKQEAgLTE3NzUsNyAmIzQzOzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuCiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLgogICovCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pOwogCkBAIC0zOTk4LDcgJiM0Mzs0MDAzLDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsICZhbXA7c3JjLSZndDtodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkgewotCQkJaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQomIzQzOwkJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCQljb250aW51ZTsKIAogCQkJcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpOwpAQCAtNTgwOSw3ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJICogZG9uJiMzOTt0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy4KIAkJICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suCiAJCSAqLwotCQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7CiAJCQlyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8CiAJCQkJVk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpOwogCQkJZ290byBiYWNrb3V0X3VubG9ja2VkOwpAQCAtNjMxOCw3ICYjNDM7NjMyMyw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsCiAJcHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpOwogCiAJcmV0ID0gLUVJTzsKLQlpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCiYjNDM7CWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJZ290byBvdXRfcmVsZWFzZV91bmxvY2s7CiAKIAlyZXQgPSAtRUVYSVNUOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNTE1MDhhNTVjNDA1NS4uYWIyMDk0ZWQzMjBjYyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0xODA4LDYzICYjNDM7MTgwOCw4OSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAKJiM0MzsvKiBQcm90ZWN0cyBhbGwgbGlzdHMgb2YgaHdwX3BhZ2VzICovCiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTsKJiM0MzsKIC8qCi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgJiMzNDtyYXcgZXJyb3IgcGFnZSYjMzQ7LAotICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC0mZ3Q7X2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uCiYjNDM7ICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCAmIzM0O2Vycm9yIHBhZ2UmIzM0OywKJiM0MzsgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gZmllbGQuCiAgKi8KLXN0cnVjdCByYXdfaHdwX3BhZ2UgewotCXN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7CiYjNDM7c3RydWN0IGh3cF9wYWdlIHsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpuZXh0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKikmYW1wO2ZvbGlvLSZndDtfaHVnZXRsYl9od3BvaXNvbjsKLX0KJiM0MzsJY29uc3Qgc3RydWN0IGh3cF9wYWdlICpwOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcDsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQlib29sIHJldCA9IGZhbHNlOwotCi0JaWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKQotCQlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAogCS8qCi0JICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXMKLQkgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuCiYjNDM7CSAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzCiYjNDM7CSAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC4KIAkgKi8KLQlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHRydWU7CiYjNDM7CX0KIAotCW11dGV4X2xvY2soJmFtcDttZl9tdXRleCk7Ci0KLQlyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLSZndDtmaXJzdCwgbm9kZSkgewotCQlpZiAocGFnZSA9PSBwLSZndDtwYWdlKSB7Ci0JCQlyZXQgPSB0cnVlOwomIzQzOwlmb3IgKHAgPSBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtJmd0O25leHQpIHsKJiM0MzsJCWlmIChwYWdlID09IHAtJmd0O3BhZ2UpCiAJCQlicmVhazsKLQkJfQogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAotCW11dGV4X3VubG9jaygmYW1wO21mX211dGV4KTsKJiM0MzsJcmV0dXJuIHAgIT0gTlVMTDsKJiM0Mzt9CiAKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLgomIzQzOyAqLwomIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLgomIzQzOyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC4KJiM0MzsgKi8KJiM0Mztib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgcmV0OwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h1Z2V0bGJfbG9jaywgZmxhZ3MpOwomIzQzOwlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiYjNDM7CWlmICghZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpIHsKJiM0MzsJCXJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHVnZXRsYl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiB7Ci0Jc3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7CiYjNDM7CXN0cnVjdCBod3BfcGFnZSAqcCwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CiAKLQloZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkgewomIzQzOwluZXh0ID0gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CWZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uID0gTlVMTDsKJiM0MzsKJiM0MzsJd2hpbGUgKG5leHQpIHsKJiM0MzsJCXAgPSBuZXh0OwomIzQzOwkJbmV4dCA9IHAtJmd0O25leHQ7CiAJCWlmIChtb3ZlX2ZsYWcpCiAJCQlTZXRQYWdlSFdQb2lzb24ocC0mZ3Q7cGFnZSk7CiAJCWVsc2UKQEAgLTE4ODEsMzQgJiM0MzsxOTA3LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogI2RlZmluZQlNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRAkzCS8qIGZvbGlvIGFscmVhZHkgcG9pc29uZWQgKi8KICNkZWZpbmUJTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRAk0CS8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqLwogI2RlZmluZQlNRl9IVUdFVExCX1JFVFJZCQk1CS8qIGh1Z2VwYWdlIGlzIGJ1c3ksIHJldHJ5ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9zZXRfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlpZiAoZm9saW9fdGVzdF9zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOwomIzQzOwlmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwlmb2xpb19jbGVhcl9odWdlX3BvaXNvbihmb2xpbyk7CiYjNDM7CWZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0CiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy4KICAqLwogc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0JaW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpwOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTsKIAogCS8qCiAJICogT25jZSB0aGUgaHdwb2lzb24gaHVnZXBhZ2UgaGFzIGxvc3QgcmVsaWFibGUgcmF3IGVycm9yIGluZm8sCi0JICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LAotCSAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uCiYjNDM7CSAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSwKJiM0MzsJICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby4KIAkgKi8KIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiAJCXJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDsKLQloZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtJmd0O2ZpcnN0LCBub2RlKSB7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwomIzQzOwlmb3IgKHAgPSBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtJmd0O25leHQpIHsKIAkJaWYgKHAtJmd0O3BhZ2UgPT0gcGFnZSkKLQkJCXJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEOwomIzQzOwkJCWJyZWFrOwogCX0KIAotCXJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTsKLQlpZiAocmF3X2h3cCkgewotCQlyYXdfaHdwLSZndDtwYWdlID0gcGFnZTsKLQkJbGxpc3RfYWRkKCZhbXA7cmF3X2h3cC0mZ3Q7bm9kZSwgaGVhZCk7CiYjNDM7CWlmIChwKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwomIzQzOwkJcmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKHApIHsKJiM0MzsJCXAtJmd0O3BhZ2UgPSBwYWdlOwomIzQzOwkJcC0mZ3Q7bmV4dCA9IGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOwomIzQzOwkJZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gPSBwOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbApAQCAtMTkxNywxNiAmIzQzOzE5NjcsMjAgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkJICovCiAJCWZvbGlvX3NldF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbyk7CiAJCS8qCi0JCSAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCByYXdfaHdwX3BhZ2UgaXMgbm90CiYjNDM7CQkgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgaHdwX3BhZ2UgaXMgbm90CiAJCSAqIHVzZWQgYW55IG1vcmUsIHNvIGZyZWUgaXQuCiAJCSAqLwogCQlfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY291bnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiAJLyoKIAkgKiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkIGh1Z2VwYWdlcyBjYW4mIzM5O3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3QKIAkgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJiMzOTt0IGV4aXN0LgpAQCAtMTk0MSw3ICYjNDM7MTk5NSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiAJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CWNvdW50ID0gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKIH0KIAogdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0xOTUwLDggJiM0MzsyMDA4LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXJldHVybjsKIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSkKIAkJcmV0dXJuOwotCWZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTsKIAlmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpOwomIzQzOwlmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncywKQEAgLTIxMDQsNiAmIzQzOzIxNjIsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KICNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiAKIC8qIERyb3AgdGhlIGV4dHJhIHJlZmNvdW50IGluIGNhc2Ugd2UgY29tZSBmcm9tIG1hZHZpc2UoKSAqLwpAQCAtMjY5NSw4ICYjNDM7Mjc1OCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KIAotCWlmICghUGFnZUhXUG9pc29uKHApKSB7Ci0JCXVucG9pc29uX3ByX2luZm8oJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcbiYjMzQ7LAomIzQzOwlpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHsKJiM0MzsJCXVucG9pc29uX3ByX2luZm8oJiMzNDslI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxuJiMzNDssCiAJCQkJIHBmbiwgJmFtcDt1bnBvaXNvbl9ycyk7CiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KQEAgLTI3MjUsMTMgJiM0MzsyNzg4LDE5IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAKIAlnaHAgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBNRl9VTlBPSVNPTik7CiAJaWYgKCFnaHApIHsKJiM0MzsJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQkJaHVnZSA9IHRydWU7CiAJCQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwotCQkJaWYgKGNvdW50ID09IDApCiYjNDM7CQkJaWYgKGNvdW50ID09IDApIHsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJCQlnb3RvIHVubG9ja19tdXRleDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkgPyAwIDogLUVCVVNZOwogCQl9Ci0JCXJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJfSBlbHNlIGlmIChnaHAgJmx0OyAwKSB7CiAJCWlmIChnaHAgPT0gLUVIV1BPSVNPTikgewogCQkJcmV0ID0gcHV0X3BhZ2VfYmFja19idWRkeShwKSA/IDAgOiAtRUJVU1k7CkBAIC0yNzQwLDE2ICYjNDM7MjgwOSwxOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKQogCQkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcbiYjMzQ7LAogCQkJCQkgcGZuLCAmYW1wO3VucG9pc29uX3JzKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCQlodWdlID0gdHJ1ZTsKLQkJCWNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7Ci0JCQlpZiAoY291bnQgPT0gMCkgewotCQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCQkJZ290byB1bmxvY2tfbXV0ZXg7Ci0JCQl9CiYjNDM7CX0gZWxzZSBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewomIzQzOwkJaHVnZSA9IHRydWU7CiYjNDM7CQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwomIzQzOwkJaWYgKGNvdW50ID09IDApIHsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJCWdvdG8gdW5sb2NrX211dGV4OwogCQl9Ci0KJiM0MzsJCXJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTsKJiM0MzsJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19wdXQoZm9saW8pOwogCQlpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7CiAJCQlmb2xpb19wdXQoZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMi4uMzMwMDdlOGU1NDZhMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0xODEzLDcgJiM0MzsxODEzLDcgQEAgc3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogCQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQlwZm4gPSBmb2xpb19wZm4oZm9saW8pICYjNDM7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIDE7CiAKLQkJaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCQkvKgogCQkJICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvcwogCQkJICogaW4gYWxsIGNhc2VzIHlldC4KZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAxYzc3ZDVkYzA2ZTlmLi5mZDE5YTBiZmJmZTc2IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCSAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb24KJiM0MzsgKiBlbnRyeSBpbnRvIHRoZSBwYWdlIHRhYmxlIGZvciB0aGUgd2hvbGUgZm9saW8gZXZlbiBpZiBvbmx5IG9uZSBwYWdlCiYjNDM7ICogaXMgcG9pc29uZWQuICBPdGhlcndpc2UsIHdlJiMzOTt2ZSBzcGxpdCBkb3duIHRvIHRoZSBQVEUgbGV2ZWwgYW5kIHdlIG9ubHkKJiM0MzsgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCEoZmxhZ3MgJmFtcDsgVFRVX0hXUE9JU09OKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQlyZXR1cm4gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiYjNDM7CXJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnQKICAqLwpAQCAtMTk5Myw3ICYjNDM7MjAwOSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAJaW50IHB0ZXMgPSAwOwogCiAJLyoKQEAgLTIwMjMsOSAmIzQzOzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjEyMSw3ICYjNDM7MjEzMyw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2UKIAkJCSAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuCiAJCQkgKi8KLQkJCVZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpOwomIzQzOwkJCVZNX0JVR19PTl9GT0xJTyghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbyksCiYjNDM7CQkJCQlmb2xpbyk7CiAJCQkvKgogCQkJICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLgogCQkJICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heQpAQCAtMjIwMCwxMiAmIzQzOzIyMTMsMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKIAotCQlpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IFRUVV9IV1BPSVNPTikpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHsKIAkJCXB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQkJCWh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pOwogCQkJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwKLQkJCQkJCWhzeik7CiYjNDM7CQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJfSBlbHNlIHsKIAkJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwogCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwpAQCAtMjQyMyw3ICYjNDM7MjQzNiw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwogCWVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZzsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAKIAkvKgogCSAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsCkBAIC0yNDUyLDkgJiM0MzsyNDY0LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjYwNywxNCAmIzQzOzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqLwogCQl1cGRhdGVfaGl3YXRlcl9yc3MobW0pOwogCi0JCWlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7CiAJCQlWTV9XQVJOX09OX0ZPTElPKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKSwgZm9saW8pOwogCiAJCQlwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpOwogCQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKIAkJCQlodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTsKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsCi0JCQkJCQloc3opOwomIzQzOwkJCQkJCWZvbGlvX3NpemUoZm9saW8pKTsKIAkJCX0gZWxzZSB7CiAJCQkJZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTsKIAkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKQEAgLTI2NDQsNyAmIzQzOzI2NTMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSAmbHQ7IDApIHsKIAkJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCWVsc2UKIAkJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7CiAJCQkJcmV0ID0gZmFsc2U7CkBAIC0yNjU3LDcgJiM0MzsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7CiAJCQkJICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHsKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCQlyZXQgPSBmYWxzZTsKIAkJCQkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwogCQkJCQlicmVhazsKQEAgLTI3MDMsNyAmIzQzOzI3MTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl9CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLAotCQkJCQkJaHN6KTsKJiM0MzsJCQkJCQlmb2xpb19zaXplKGZvbGlvKSk7CiAJCQllbHNlCiAJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpOwogCQkJdHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSwKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGI1MWY4M2M5NzBiYjMuLjQ5MmM5YmVmMzYyMDcgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMzI0MCw3ICYjNDM7MzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAzNWMzYmIxNWFlOTZhLi43MGU1NGFjZTBlNzQxIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkKIAkJCWdvdG8ga2VlcDsKIAotCQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJCS8qCiAJCQkgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbiYjMzk7dCBoYW5kbGUgbGFyZ2UKIAkJCSAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggZGI1N2M1NzY2YWI2MC4uOTRlZWRjYzdmMWE5ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCi0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7CiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IExhcmdlIEZvbGlvcyBhbmQgSHVnZXRsYmZzIEhXUG9pc29uaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzICpkZWZpbml0ZWx5KiBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIG1vZGlmaWNhdGlvbiBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgKGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHZhcmlvdXMgaW5jbHVkZSBmaWxlcywgYW5kIGEgc2xldyBvZiBgbW0vYCBmaWxlcykgaXMgYSBjbGVhciBpbmRpY2F0aW9uLiBUaGUga2V5IGZvY3VzIGhlcmUgaXMgdGhlIGhhbmRsaW5nIG9mIGhhcmR3YXJlIHBvaXNvbmluZyAoYGh3cG9pc29uYCkgaW4gdGhlIGNvbnRleHQgb2YgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIGhvdyBgaHdwb2lzb25gIGlzIG1hbmFnZWQgZm9yIGxhcmdlIHBhZ2VzLiBUaGUgbW92ZSBhd2F5IGZyb20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCBpcyBhIHJlZCBmbGFnIG9uIGl0cyBvd24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZ1bmN0aW9ucyBsaWtlIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgc2lnbmFscyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyB0aGVzZSBwYWdlIHR5cGVzIGFyZSBoYW5kbGVkIHdoZW4gaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZmlsZW1hcF9yZWFkYCB0byBhY2NvdW50IGZvciB0aGlzLgoKU28sIHdoZXJlIGRvIHdlIHN0YXJ0PyBXZWxsLCBgZmlsZW1hcF9yZWFkYCBpcyBhIGhvdCBwYXRoLCBzbyBJJiMzOTtkIHByb2JhYmx5IGJlIGEgbGl0dGxlIGNhdXRpb3VzIGFib3V0IGZvY3VzaW5nICp0b28qIGhlYXZpbHkgdGhlcmUsIHRob3VnaCBpdCYjMzk7cyBjZXJ0YWlubHkgcmVsZXZhbnQuIFRoZSBuZXcgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgbG9vayBsaWtlIHByaW1lIHRhcmdldHMuIFRoZSBjaGFuZ2VzIHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgYWxzbyBjcnVjaWFsLiBgdW5wb2lzb25fbWVtb3J5YCBpcyBvYnZpb3VzbHkgYSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4KCkxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhlIG1lbnRpb25lZCBmdW5jdGlvbnMgKGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgKSBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSW4gYWRkaXRpb24sIEkgbmVlZCB0byBjaGVjayBmdW5jdGlvbnMgbGlrZSBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAsIGBmb2xpb19mcmVlX3Jhd19od3BgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4KClNpbWlsYXJseSwgaW4gYG1tL2ZpbGVtYXAuY2AsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGZpbGVtYXBfcmVhZGAgbW9kaWZpY2F0aW9ucyBhbmQgdGhlIG5ld2x5IGFkZGVkIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJJiMzOTtsbCB3YW50IHRvIHJldmlldyB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEhXUG9pc29uaW5nLgoKT2YgY291cnNlLCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyZSBjcnVjaWFsIGNvbnRleHQ6IGBDT05GSUdfSFVHRVRMQkZTYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfTEFSR0VfRk9MSU9gLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaG93IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBzZWxlY3QgYENPTkZJR19MQVJHRV9GT0xJT2AuIEFuZCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljIGltcGxpY2F0aW9ucyBvZiBgTUVNT1JZX0ZBSUxVUkVgLgoKVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBoYXJkd2FyZSBwb2lzb25pbmcgb2YgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMgcGFnZXMgYW5kIGRlc2lnbiBmdXp6aW5nIHN0cmF0ZWdpZXMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1FTU9SWV9GQUlMVVJFIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gd2UgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBjb25uZWN0ZWQgdG8gYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIHNvIGl0JiMzOTtzIGEgc2FmZSBiZXQgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGZvciBgTUVNT1JZX0ZBSUxVUkVgIHdpbGwgYmUgZGVmaW5lZCwgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCwgdGhlcmUuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGluIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdCwgYW5kIHdoYXQgZmVhdHVyZXMgbWlnaHQgZGVwZW5kIG9uIGl0IGJlaW5nIHNldC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCB0aGUgbG9naWMgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgb3RoZXIgb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIHZpc2liaWxpdHkuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIHF1aWNrbHkuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBmZWF0dXJlIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzcwOlx0XG4gNzcxOlx0XHQgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgYm9vdCB1c2luZyB0aGVcbiA3NzI6XHRcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cbiA3NzM6XHRcbiA3NzQ6XHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc3NTpcdFx0Ym9vbFxuIDc3NjpcdFxuIDc3NzpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc3ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Nzk6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc4MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzgxOlx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc4MjpcdFx0aGVscFxuIDc4MzpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3ODQ6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3ODU6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzg2Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzg3Olx0XG4gNzg4Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYm9sc3RlcmluZyBvdXIgbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIGVuYWJsaW5nIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhvc2UgYXJlIHByYWN0aWNhbGx5IGVzc2VudGlhbCBmb3Igcm9idXN0IGZhdWx0IGRldGVjdGlvbiBhbmQgaW5qZWN0aW9uIHRlc3RpbmcsIHJlc3BlY3RpdmVseS4gQW5kLCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYC4gVGhleSBjYW4gYmUgdXNlZnVsIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVzaWxpZW5jZSB3aXRoIGxhcmdlIG1lbW9yeSBwYWdlcy4KCk5vdywgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIHRoZXNlIG9wdGlvbnMgcGxheSBvdXQsIEkgcmVhbGx5IG5lZWQgdG8gZGVsdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBiZWhpbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGV0ZWN0cywgaXNvbGF0ZXMsIGFuZCByZXNwb25kcyB0byBlcnJvcnMuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2x8dW5zaWduZWQgbG9uZykuKmh1Z2V0bGJfLipod3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDkyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk2LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5Nzpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDk4OmJvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTktXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODIzPXN0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1MS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg1Mjpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1My17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODYzLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxODY0OmJvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY1LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5Nzk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjAwNTp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgQ29ycnVwdGlvbiBpbiBIdWdlVExCIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgYW5kIHRoZSBjb250ZXh0IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gUmlnaHQgYXdheSwgbXkgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIGhhcmR3YXJlIHBvaXNvbmluZyBhbmQgSHVnZVRMQiB1cGRhdGVzLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGltcGxpZXMgdGhpcyBpcyB3aGVyZSB0aGUgY3JpdGljYWwgaGFuZGxpbmcgb2NjdXJzLiBUaGVyZWZvcmUsIG15IGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkgKm11c3QqIGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgdGFyZ2V0aW5nIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIHByb2JsZW0hKSBsaWVzIGluIHRlcm1zIG9mIGhvdyBoYXJkd2FyZS1kZXRlY3RlZCBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBIdWdlVExCIGZyYW1ld29yay4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3VwZGF0ZV9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTE5MTk9c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5MzEtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MzI6c3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkzMy17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDE1PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNDUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNDY6XHRyYyA9IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA0Ny1cdGlmIChyYyBcdTAwM2U9IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTU3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIG1lbW9yeSBtYW5hZ2VtZW50OgoKKipBbmFseXppbmcgUG9pc29uZWQgTWVtb3J5IEhhbmRsaW5nIGluIHRoZSBIdWdlVExCIGFuZCBGaWxlbWFwIENvbnRleHRzKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIGhhcmR3YXJlIHBvaXNvbmluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgYW5kLCBJIHN1c3BlY3QsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGZpbGVtYXAgc3lzdGVtLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhbmQgdGhlaXIgc2NvcGUuIEZpcnN0LCBJIG5vdGljZWQgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBhbmQgdXNlIGFyZSByZXN0cmljdGVkIHRvIGl0cyBzb3VyY2UgZmlsZS4gVGhpcyBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHNwZWNpZmljIEh1Z2VUTEIgbW9kdWxlLgoKQ29udmVyc2VseSwgSSBzZWUgdGhhdCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBhbmQgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAgYXJlICpub3QqIHN0YXRpYy4gVGhhdCBpbXBsaWVzIHRoZXkgYXJlIGRlc2lnbmVkIHRvIGJlIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLCBsaWtlbHkgYXMgcGFydCBvZiBhIGJyb2FkZXIgaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBwb2lzb25lZCBIdWdlVExCIHBhZ2VzLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBwYXJ0IG9mIHRoZSBjb3JlIHBvaXNvbmluZyBtZWNoYW5pc21zLCBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gYmUgYWNjZXNzaWJsZS4gYHVucG9pc29uX21lbW9yeWAgaXMgYWxzbyBub3Qgc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGZvciBhIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB0aGUgZ2VuZXJhbCBhY3Qgb2YgY2xlYXJpbmcgbWVtb3J5LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBhbGwgb2YgdGhpcyB0aWVzIHRvZ2V0aGVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYG1tL2ZpbGVtYXAuY2AsIGJlY2F1c2UgSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGZpbGVtYXAgc3Vic3lzdGVtIGxpdmVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhhdCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvciB1dGlsaXplcyB0aGUgb3RoZXIgZnVuY3Rpb25zIEkmIzM5O3ZlIGV4YW1pbmVkLiBJIGFudGljaXBhdGUgc2VlaW5nIGlmIHRoZSBmaWxlbWFwIHN5c3RlbSBpcyBpbnZvbHZlZCBpbiBwcm9wYWdhdGluZyBvciByZXNwb25kaW5nIHRvIGhhcmR3YXJlIHBvaXNvbmluZyBzaWduYWxzIHRoYXQgb3JpZ2luYXRlIGluIHRoZSBIdWdlVExCIGNvbnRleHQuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGRpc3RpbmN0IG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfcmFuZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTI3NDk9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMjc1NS1cbm1tL2ZpbGVtYXAuYzoyNzU2OnN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG5tbS9maWxlbWFwLmMtMjc1Ny1cdFx0c2l6ZV90IGJ5dGVzKVxuLS1cbm1tL2ZpbGVtYXAuYz0yODA0PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yOTA3LVxubW0vZmlsZW1hcC5jOjI5MDg6XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbm1tL2ZpbGVtYXAuYy0yOTA5LVx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYmAqKgoKQWxyaWdodCwgc28gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlIGFuZCBwcm9iYWJseSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhhdCBoZWxwcyBtZSBuYXJyb3cgZG93biB3aGVyZSB0byBsb29rIGZvciBpdHMgdXNhZ2UgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgY29kZS4KCk5vdywgbGV0JiMzOTtzIHNlZS4uLiB0aGUgbWVudGlvbiBvZiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgaHVnZSBwYWdlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYmV0dGluZyB0aGF0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiBodWdldGxiZnMuIEEgcXVpY2sgbG9vayBhdCBgbW0vaHVnZXRsYi5jYCBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjEwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjExOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjEyLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjI3PXN0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2Mjg6Zm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjI5LVx0eyB9XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc2PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3OS0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODA6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4MS0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgyOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODMte1xuLS1cbm1tL2h1Z2V0bGIuYz0xMjQ3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEyNjUtXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG5tbS9odWdldGxiLmM6MTI2NjpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XG5tbS9odWdldGxiLmMtMTI2Ny1cdFx0aC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMtLTtcbi0tXG5tbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMTM4My1cbm1tL2h1Z2V0bGIuYzoxMzg0OnN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGIuYy0xMzg1LXtcbi0tXG5tbS9odWdldGxiLmMtMTM5MC1cdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG5tbS9odWdldGxiLmM6MTM5MTpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTM5Mi1cbm1tL2h1Z2V0bGIuYzoxMzkzOlx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xMzk0LX1cbi0tXG5tbS9odWdldGxiLmM9MTQwND12b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTE0MTgtXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2ZyZWVkKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE0MTk6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfZnJlZWQoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE0MjAtXHRcdGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jLTE0MzMtXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG5tbS9odWdldGxiLmM6MTQzNDpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTQzNS1cbi0tXG5tbS9odWdldGxiLmM9MTQ3MD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE1MDctXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNTA4Olx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTA5LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTU4Nj1zdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjAyLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNjAzOlx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MDQtXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jLTE2MjctXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MTYyODpcdFx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MjktXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjYwLVx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG5tbS9odWdldGxiLmM6MTY2MTpcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxubW0vaHVnZXRsYi5jLTE2NjItXHQgKi9cbi0tXG5tbS9odWdldGxiLmMtMTY2Ny1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbm1tL2h1Z2V0bGIuYzoxNjY4Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2NjktXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjg5PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE3MDgtXHRyZXN0b3JlX3Jlc2VydmUgPSBmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYzoxNzA5Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE3MTAtXG4tLVxubW0vaHVnZXRsYi5jLTE3MzAtXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYzoxNzMxOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNzMyLVx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW8oaHN0YXRlX2luZGV4KGgpLFxuLS1cbm1tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTgyLVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjI1ODM6XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI1ODQtXHRcdGVsc2UgaWYgKHJjKVxuLS1cbm1tL2h1Z2V0bGIuYz01MTQ2PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTI4My1cdFx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjUyODQ6XHRcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTI4NS1cdFx0XHRlbHNlIGlmIChyYylcbi0tXG5tbS9odWdldGxiLmM9NTYzMz1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTY0Ny1cdH1cbm1tL2h1Z2V0bGIuYzo1NjQ4Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTU2NDktXG4tLVxubW0vaHVnZXRsYi5jPTcxMzM9Ym9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtNzE0My1cdH1cbm1tL2h1Z2V0bGIuYzo3MTQ0Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy03MTQ1LVx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBsaXN0KTtcbi0tXG5tbS9odWdldGxiLmM9NzE5MD12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vaHVnZXRsYi5jLTcyMTEtXHRcdGZvbGlvX3NldF9odWdldGxiX3RlbXBvcmFyeShvbGRfZm9saW8pO1xubW0vaHVnZXRsYi5jOjcyMTI6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XG5tbS9odWdldGxiLmMtNzIxMy1cbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTU9c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDE5LVx0aWYgKCFyZXQpXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MjA6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xubW0vaHVnZXRsYl92bWVtbWFwLmMtNDIxLVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUyMj1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTc3LVx0aWYgKHJldClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU3ODpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzktXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwMDU6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDYte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAxNT1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDU2LVx0aWYgKGNvdW50X2luY3JlYXNlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNTc6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNTgtXHRcdCptaWdyYXRhYmxlX2NsZWFyZWQgPSB0cnVlO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjA4Mz1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTIwLVx0aWYgKGh3cG9pc29uX2ZpbHRlcihwKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTIxOlx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjEyMi1cdFx0aWYgKG1pZ3JhdGFibGVfY2xlYXJlZClcbi0tXG5tbS9ybWFwLmM9MzE1Mz12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzE2MS1cdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2xhcmdlX21hcGNvdW50LCAwKTtcbm1tL3JtYXAuYzozMTYyOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vcm1hcC5jLTMxNjMtXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBhbmQgTWVtb3J5IFBvaXNvbmluZyBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IEh1Z2VUTEIgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHBvaXNvbmluZyBhbmQgSSYjMzk7dmUgZ290IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpc24mIzM5O3QsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4KCk5vdywgSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscyB0byBlc3RhYmxpc2ggdGhlIGNhbGwgY2hhaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIC0gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYG1tL2ZpbGVtYXAuY2AgdG8gc2VlIGlmIGBmaWxlbWFwX3JlYWRgIGlzIGNhbGxlZCwgYW5kIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGJ1dCBvbmx5IG5vdGluZyBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgYW5kIGBodWdldGxiZnNfZ2V0X2lub2RlYCBiZWluZyBzdGF0aWMuIEkgYWxzbyBub3RlIHRoYXQgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgIHVzZXMgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgcmVhbGx5IHN0YW5kIG91dCBhbmQgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYXJlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYHVucG9pc29uX21lbW9yeWAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuCgpMZXQmIzM5O3Mgc2VlIGlmIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGlzIGFjY2Vzc2libGUuIEFoYSEgSXQmIzM5O3MgY2FsbGVkIGZyb20gYGlzX3JlZl9wYWdlX2h3cG9pc29uYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBtbS9maWxlbWFwLmNgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBmaWxlbWFwX3JlYWRgLiBUaGF0JiMzOTtzIGEgc29saWQgY2FsbCBjaGFpbjsgYGZpbGVtYXBfcmVhZGAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBsb29rcyBnb29kLiBJIGZvdW5kIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlzX3BhZ2VfaHdwb2lzb25gIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIFRoYXQmIzM5O3MgdGhlbiBjYWxsZWQgYnkgYHVucG9pc29uX21lbW9yeWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLgoKT2theSwgSSYjMzk7bSBjaGVja2luZyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gc2VlIGlmIGB1bnBvaXNvbl9tZW1vcnlgIGlzIGV4cG9ydGVkIG9yIG5vdC4gWWVzLCBpdCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpMYXN0bHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gY2hlY2tpbmcgYG1tL3JtYXAuY2AgZm9yIGB0dHVfY3JlYXRlX2h3cG9pc29uYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHR1X2NyZWF0ZV9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMTk4Ni0gKi9cbm1tL3JtYXAuYzoxOTg3OnN0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYy0xOTg4LVx0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jPTIwMDA9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjIxNS1cbm1tL3JtYXAuYzoyMjE2Olx0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgZmxhZ3MpKSB7XG5tbS9ybWFwLmMtMjIxNy1cdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuLS1cbm1tL3JtYXAuYz0yNDI4PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYxOC1cbm1tL3JtYXAuYzoyNjE5Olx0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgVFRVX0hXUE9JU09OKSkge1xubW0vcm1hcC5jLTI2MjAtXHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MjkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEhhcmR3YXJlIFBvaXNvbmluZyB3aXRoaW4gdGhlIEh1Z2UgUGFnZXMgQ29kZSoqCgpBbHJpZ2h0LCBzbyBgdHR1X2NyZWF0ZV9od3BvaXNvbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBNeSBtaW5kIGp1bXBzIHRvIHdoZXJlIGl0IG1pZ2h0IGJlIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGhhcmR3YXJlIHBvaXNvbmluZywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gYmVnaW4sIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBsb29raW5nIGZvciBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAuIEh1Z2UgcGFnZXMgYXJlIGEgbGlrZWx5IHRhcmdldCBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBlcnJvciBkZXRlY3Rpb24sIHNvIHRoYXQgZnVuY3Rpb24gbmFtZSBpcyBhIGtleSBsZWFkLiBJJiMzOTttIGVzc2VudGlhbGx5IHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIGhhcmR3YXJlIHBvaXNvbiBjb25kaXRpb24gdG8gdGhlIGxvZ2ljIHRoYXQgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBpdCB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHdoZW4gYSBoYXJkd2FyZSBlcnJvciBhZmZlY3RzIGEgaHVnZSBwYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTg5Mz1URVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC05MDEtICogc2NoZW1lIHVzZWQgaW4gdGhhdCBjYXNlKS4gIFlvdSBwcm9iYWJseSBkb24mIzM5O3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo5MDI6ICogdXNlIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoKSBpbnN0ZWFkLlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtOTAzLSAqXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTExOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTI4LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEyOTpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzMC17XG4tLVxubW0vZmlsZW1hcC5jPTI0NjQ9c3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjQ4NS1cdFx0XHRicmVhaztcbm1tL2ZpbGVtYXAuYzoyNDg2Olx0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG5tbS9maWxlbWFwLmMtMjQ4Ny1cdFx0XHRicmVhaztcbi0tXG5tbS9maWxlbWFwLmM9Mjc1Nj1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLS1cbm1tL2ZpbGVtYXAuYy0yNzYxLVxubW0vZmlsZW1hcC5jOjI3NjI6XHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxubW0vZmlsZW1hcC5jLTI3NjMtXHRcdHJldHVybiBieXRlcztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0MDg9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDQxNjpcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc5Mz1zdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxODE2Olx0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTgxNy1cdFx0XHQvKlxuLS1cbm1tL3JtYXAuYz0yMDAwPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIxMzUtXHRcdFx0ICovXG5tbS9ybWFwLmM6MjEzNjpcdFx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxubW0vcm1hcC5jLTIxMzctXHRcdFx0XHRcdGZvbGlvKTtcbi0tXG5tbS9zaG1lbS5jPTMyMTY9c2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9zaG1lbS5jLTMyNDItXG5tbS9zaG1lbS5jOjMyNDM6XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbm1tL3NobWVtLmMtMzI0NC1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMDg4LVxubW0vdm1zY2FuLmM6MTA4OTpcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMDkwLVx0XHRcdC8qXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz03NTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3Nzc6XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAyNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIYXJkd2FyZSBQb2lzb25pbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBoYXJkd2FyZSBwb2lzb25pbmcgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUuIFRoZSBjb3JlIGNvbmNlcm4sIGFzIEkgc2VlIGl0LCByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLCBgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZWAsIGBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmVgIGFuZCBgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2VgIGFyZSBzdGF0aWMgaW5saW5lLCBzbyB0aGV5IGRvbiYjMzk7dCBzZWVtIHRvIGJlIHdoZXJlIHRoZSBwcmltYXJ5IGxvZ2ljIGlzIGxvY2F0ZWQuIFRoYXQgc3RyZWFtbGluZXMgdGhlIGludmVzdGlnYXRpb24gc2lnbmlmaWNhbnRseTsgSSBjYW4gY29uY2VudHJhdGUgb24gdGhvc2UgZm91ci4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZSBjb25maWd1cmF0aW9ucyBwbGF5IGludG8gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5nc+KAlHNwZWNpZmljYWxseSwgYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTEFSR0VfRk9MSU9g4oCTIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3VyIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBgbW0vS2NvbmZpZ2AgdG8gZGV0ZXJtaW5lIGhvdyBgTEFSR0VfRk9MSU9gIGlzIGRlZmluZWQgYW5kIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHVuZGVyIHdoYXQgc2l0dWF0aW9ucyB0aGlzIHBvaXNvbi91bnBvaXNvbiBsb2dpYyBpcyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEFSR0VfRk9MSU8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0Njpjb25maWcgTEFSR0VfRk9MSU9cbm1tL0tjb25maWctODQ3LVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYxNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtjb25maWcgTXVzaW5ncyoqCgpPa2F5LCBzbyBgTEFSR0VfRk9MSU9gIGlzIGEgZGVwZW5kZW5jeSwgYSBgZGVmX2Jvb2xgLCBhbmQgaXQmIzM5O3MgYXV0b21hdGljYWxseSBoYW5kbGVkIHdoZW4gYEhVR0VUTEJfUEFHRWAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgc2VsZWN0ZWQuIFRoYXQgbWVhbnMgSSBkb24mIzM5O3QgbmVlZCB0byBnbyBvdXQgb2YgbXkgd2F5IHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LiBJdCYjMzk7cyByZWFsbHkgbW9yZSBvZiBhbiBpbnRlcm5hbCBkZXRhaWwuIFN0aWxsLCBpdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIG5vdGUgaXQsIGp1c3QgZm9yIGNsYXJpdHkmIzM5O3Mgc2FrZS4KCkJ1dCwgdGhpbmtpbmcgYWJvdXQgd2hhdCByZWFsbHkgKmRyaXZlcyogaXRzIGluY2x1c2lvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgcGxheWVycyBoZXJlLiBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzIHRoYXQgdHJpZ2dlciBpdC4gSSBzaG91bGQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGlzIHNvbGlkLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5zIGFuZCBvdXRzIG9mIGBIVUdFVExCRlNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5OTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIExpbnV4IGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRlbHZpbmcgaW50byB0aGUgSFVHRVRMQkZTIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBIVUdFVExCRlNgLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGxpc3RlZCBpbiBgZnMvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBoaW5nZSBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGltZSB0byBjcmFjayBvcGVuIGBmcy9LY29uZmlnYCBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYEhVR0VUTEJGU2AgdG8gZXZlbiBiZSBjb25zaWRlcmVkLiBUaGlzIHdpbGwgaW5mb3JtIG15IGRlY2lzaW9ucyBsYXRlciwgZGVwZW5kaW5nIG9uIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDY6XHRcbiAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGFuZCBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYEhVR0VUTEJGU2AgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBBbmQgYE1FTU9SWV9GQUlMVVJFYCwgc2ltaWxhcmx5LCBpcyB0aWVkIHRvIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gTWFrZXMgc2Vuc2U7IHdlIGNhbiYjMzk7dCBlbmFibGUgdGhvc2UgZmVhdHVyZXMgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZW0uIFNvLCB0aGUgY29yZSBjb25maWdzIGluIHBsYXkgaGVyZSBhcmUgYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAuCgpOb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhpcy4gSSYjMzk7dmUgZ290IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYHVucG9pc29uX21lbW9yeWAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBwaWVjZXMgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHBvaXNvbmluZyBpbiB0aGUgaHVnZXRsYiBjb250ZXh0LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIOKAkyBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIHdoZXJlIGl0JiMzOTtzIG5lZWRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBpdHMgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE1lbW9yeSBGYWlsdXJlKioKCkFscmlnaHQsIHNvIHRoZSBmYWlsdXJlIGlzbiYjMzk7dCBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyBJJiMzOTt2ZSAqZXhwbGljaXRseSogZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgZWxpbWluYXRlcyBhIHdob2xlIGNsYXNzIG9mIGVhc2lseS1kZWJ1Z2dlZCBleHRlcm5hbCBjYXVzZXMuIEJ1dCBpdCYjMzk7cyBhbHNvIG5vdCBhIHN0YXRpY2FsbHktZGVmaW5lZCB0aGluZywgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiBzb21lIGR5bmFtaWMgcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIGJpdCBtb3JlIGludm9sdmVkLCBidXQgbWFuYWdlYWJsZS4gVGhlIGNsdWUgaXMgdGhhdCBpdCYjMzk7cyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQgZ2l2ZXMgbWUgYSB2ZXJ5IGZvY3VzZWQgYXJlYSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBOb3csIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mICYjMzk7bWVtb3J5LWZhaWx1cmUmIzM5OywgSSBzaG91bGQgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGB1bnBvaXNvbl9tZW1vcnlgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnVucG9pc29uX21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rbXNhbi9ob29rcy5jPTM5OD12b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9rbXNhbi9ob29rcy5jLTQxMC19XG5tbS9rbXNhbi9ob29rcy5jOjQxMTpFWFBPUlRfU1lNQk9MKGttc2FuX3VucG9pc29uX21lbW9yeSk7XG5tbS9rbXNhbi9ob29rcy5jLTQxMi1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3MzA9aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NDAtfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODQxOkVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg0Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzNTEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqVmVyaWZ5aW5nIE1lbW9yeSBVbnBvaXNvbmluZyBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIGNvbmZpcm1lZC4gVGhlIGB1bnBvaXNvbl9tZW1vcnlgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgd2hhdCBJIGV4cGVjdGVkLiBOb3csIHRvIGRpZyBkZWVwZXIsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiB0aGF0IGNsZWFycyBoYXJkd2FyZS1wb2lzb25lZCBodWdlIHBhZ2VzLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgYXJlYSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IGVycm9ycyBhbmQsIGNyaXRpY2FsbHksIGhvdyBpdCBhdHRlbXB0cyB0byByZWNvdmVyIGZyb20gdGhlbSwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU2OAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipSZWZsZWN0aW5nIG9uIHRoZSBQYXRjaCBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpTbywgdGhpcyBpc24mIzM5O3QgYSBzaW1wbGUgc3RhdGljIHVwZGF0ZSwgYnV0IHJhdGhlciBzb21ldGhpbmcgbW9yZSBkeW5hbWljLCBzb21ldGhpbmcgdGhhdCYjMzk7cyBiZWluZyBhY3RpdmVseSAqbWFuYWdlZCogaW50ZXJuYWxseS4gSSYjMzk7bSBwbGVhc2VkIHdpdGggdGhlIGRpcmVjdGlvbiwgcGFydGljdWxhcmx5IHRoZSBlbXBoYXNpcyBvbiB0aGUgZm9jdXMgZnVuY3Rpb25zLiBUaGV5IHNlZW0gd2VsbC1kZXNpZ25lZC4gVGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQsIGltcG9ydGFudGx5LCB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgcmVhZGlseSBhY2Nlc3NpYmxlLgoKVGhlIGNydXggb2YgdGhpcyBpcyBob3cgd2UmIzM5O3JlIGFkYXB0aW5nIHRoZSBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcgZm9yIHRoZXNlIGxhcmdlciBtZW1vcnkgc3RydWN0dXJlczogZm9saW9zIGFuZCBodWdldGxiZnMuIFRoaXMgcGF0Y2ggcmVhbGx5IGRpZ3MgaW50byBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBwYWdlcyB3aGVuIHdlJiMzOTtyZSByZWFkaW5nIHRoZW0gdGhyb3VnaCBgZmlsZW1hcF9yZWFkYCBhbmQsIGNydWNpYWxseSwgaG93IHdlIGFyZSBwcm9wZXJseSB1bnBvaXNvbmluZyB0aGVtLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aXRoIHRoZSBpbmNyZWFzZWQgdXNlIG9mIGxhcmdlIHBhZ2VzIHRoZXNlIGRheXMuCgpJIHRoaW5rICYjMzk7c2V0LXJlc3VsdHMmIzM5OyBpcyB0aGUgcmlnaHQgbmV4dCBsb2dpY2FsIHN0ZXAuIEl0IHNlZW1zIGxpa2UgdGhpcyB3b3VsZCBiZSB0aGUgbmF0dXJhbCBmdW5jdGlvbiBjYWxsIHRvIG1ha2UgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHdwb2lzb24gaXMgaGFuZGxlZCBmb3IgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMuIEl0IG1vZGlmaWVzIGBmaWxlbWFwX3JlYWRgIHRvIGhhbmRsZSBod3BvaXNvbmVkIGZvbGlvcyBhbmQgdXBkYXRlcyBtZW1vcnkgZmFpbHVyZSByZWNvdmVyeSBsb2dpYy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIE1NIGFuZCBodWdldGxiZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3VucG9pc29uX21lbW9yeSYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGh3cG9pc29uIGlzIGhhbmRsZWQgZm9yIGxhcmdlIGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBJdCBtb2RpZmllcyBgZmlsZW1hcF9yZWFkYCB0byBoYW5kbGUgaHdwb2lzb25lZCBmb2xpb3MgYW5kIHVwZGF0ZXMgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBNTSBhbmQgaHVnZXRsYmZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM2OjM4LjE1ODMyNzA2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjEyODExODYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcInVucG9pc29uX21lbW9yeVwiLFxuICAgIFwiZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh3cG9pc29uIGlzIGhhbmRsZWQgZm9yIGxhcmdlIGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBJdCBtb2RpZmllcyBgZmlsZW1hcF9yZWFkYCB0byBoYW5kbGUgaHdwb2lzb25lZCBmb2xpb3MgYW5kIHVwZGF0ZXMgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBNTSBhbmQgaHVnZXRsYmZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6MzguMTU4MzM3MDU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM0NzU0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MzIwZGRjMWZhODZmMTI4NWI1N2VmYmFkNzQxYjMwZjUxODlhMzc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjM2OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXFxuaW5kZXggY2Y2YWU2NDc3NmU2Mi4uZWRkYWM0ZWQyMTRiMSAxMDA2NDRcXG4tLS0gYS9mcy9LY29uZmlnXFxuKysrIGIvZnMvS2NvbmZpZ1xcbkBAIC0yNzIsNyArMjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcXG4gXFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFx0c2VsZWN0IExBUkdFX0ZPTElPXFxuIFxcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCAyMTZlMWEwZGQwYjIzLi5jZWY3ZTYxYjgyN2Q3IDEwMDY0NFxcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5AQCAtMTg3LDExMyArMTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXFxuLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3XFxuLSAqIEhXUE9JU09OIHBhZ2UuXFxuLSAqL1xcbi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi1cXHRcXHRzaXplX3QgYnl0ZXMpXFxuLXtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xcbi1cXHRzaXplX3Qgc2FmZV9ieXRlcztcXG4tXFxuLVxcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cXG4tXFx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xcbi1cXHRwYWdlKys7XFxuLVxcbi1cXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cXG4tXFx0Zm9yICg7IHNhZmVfYnl0ZXMgXFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcXG4tXFx0XFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXFxuLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLlxcbi0gKi9cXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLXtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbi1cXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XFxuLVxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGVuZF9pbmRleDtcXG4tXFx0bG9mZl90IGlzaXplO1xcbi1cXHRzc2l6ZV90IHJldHZhbCA9IDA7XFxuLVxcbi1cXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdFxcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xcbi1cXG4tXFx0XFx0LyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi9cXG4tXFx0XFx0bnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcXG4tXFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuLVxcdFxcdGlmICghaXNpemUpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRlbmRfaW5kZXggPSAoaXNpemUgLSAxKSBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XFxuLVxcdFxcdGlmIChpbmRleCBcXHUwMDNlIGVuZF9pbmRleClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcXG4tXFx0XFx0XFx0bnIgPSAoKGlzaXplIC0gMSkgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpICsgMTtcXG4tXFx0XFx0XFx0aWYgKG5yIFxcdTAwM2M9IG9mZnNldClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bnIgPSBuciAtIG9mZnNldDtcXG4tXFxuLVxcdFxcdC8qIEZpbmQgdGhlIGZvbGlvICovXFxuLVxcdFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGVcXG4tXFx0XFx0XFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcbi1cXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbi1cXHRcXHRcXHRcXHR3YW50ID0gbnI7XFxuLVxcdFxcdFxcdGVsc2Uge1xcbi1cXHRcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHRcXHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcXG4tXFx0XFx0XFx0XFx0ICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlclxcbi1cXHRcXHRcXHRcXHQgKiBvZmZzZXQuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHR3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHdhbnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUlPO1xcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XFxuLVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0b2Zmc2V0ICs9IGNvcGllZDtcXG4tXFx0XFx0cmV0dmFsICs9IGNvcGllZDtcXG4tXFx0XFx0aWYgKGNvcGllZCAhPSBuciBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudCh0bykpIHtcXG4tXFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuLVxcdFxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGluZGV4ICs9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XFxuLVxcdFxcdG9mZnNldCBcXHUwMDI2PSB+aHVnZV9wYWdlX21hc2soaCk7XFxuLVxcdH1cXG4tXFx0aW9jYi1cXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXFx1MDAzY1xcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKSArIG9mZnNldDtcXG4tXFx0cmV0dXJuIHJldHZhbDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0bG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbkBAIC04ODMsNiArNzc2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRyZXR1cm4gaW5vZGU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTtcXG4rXFxuK1xcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcXG4rXFx0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcXG4rXFx0bWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rfVxcbitcXG4gLypcXG4gICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlclxcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cXG5AQCAtOTI2LDggKzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0XFx0XFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBTX0lGUkVHOlxcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcXG4tXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XFxuK1xcdFxcdFxcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBTX0lGRElSOlxcbiBcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuQEAgLTEyMDYsNyArMTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLVxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXFxuK1xcdC5yZWFkX2l0ZXJcXHRcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuIFxcdC5tbWFwXFx0XFx0XFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxcbiBcXHQuZnN5bmNcXHRcXHRcXHQ9IG5vb3BfZnN5bmMsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYVxcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDJhYmFmOTkzMjFlOTAuLjE4Nzg2NDJlNzVlYzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4gXFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XFxuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtNTk1LDggKzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4tXFx0e1xcdHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4rXFx0e1xcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbiBcXHRcXHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcXHRcXHRcXFxcXFxuIFxcdH1cXG4gXFxuQEAgLTYxNiw3ICs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuICNlbHNlXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIGlubGluZSBib29sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuK2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4gXFx0eyByZXR1cm4gMDsgfVxcbiBcXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTcyNyw3ICs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzcG9vbDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpby1cXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcXG4gfVxcbkBAIC04NTcsNyArODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG4gXFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcXG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcXG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuICNlbmRpZlxcbiBcXG4tLypcXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cXG4tICovXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi1cXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuIFxcdHJldHVybiBQQUdFX01BU0sgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xcbkBAIC0xMDg4LDcgKzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMTE1Nyw3ICsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5pbmRleCBiMThjMmIyZTdkMmM2Li44NmEyZDBmZWU1NTdiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC0zODcsNyArMzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxcbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxcbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxcbiAgKlxcbkBAIC00OTksNyArNDk5LDcgQEAgc3RydWN0IGZvbGlvIHtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4tXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XFxuK1xcdFxcdFxcdHN0cnVjdCBod3BfcGFnZSAqaHVnZXRsYl9od3BvaXNvbjtcXG4gXFx0LyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovXFxuIFxcdFxcdH07XFxuIFxcdFxcdHN0cnVjdCBwYWdlIF9fcGFnZV8zO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuaW5kZXggNzIyM2Y2ZjRlMmI0MC4uMDdjYzc4NTRiMmRlMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTg5MywxNCArODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBURVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcXG4gI2VuZGlmXFxuIFxcbi0jaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxcbiAvKlxcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbi0gKiBjb21wb3VuZCBwYWdlLlxcbisgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcXG4rICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXFxuKyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XFxuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cXG4gICpcXG4gICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLlxcbiAgKi9cXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXFxuK0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbiAjZWxzZVxcbiBGT0xJT19GTEFHX0ZBTFNFKGhhc19od3BvaXNvbmVkKVxcbiAjZW5kaWZcXG5AQCAtMTA0MSw4ICsxMDQ2LDI5IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcXG4gXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXFxuK1xcbisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIChSRUFEX09OQ0UoZm9saW8tXFx1MDAzZXBhZ2UucGFnZV90eXBlKSBcXHUwMDNlXFx1MDAzZSAyMykgPT1cXG4rXFx0XFx0KChQR1RZX2h1Z2V0bGIgXFx1MDAzY1xcdTAwM2MgMSkgfCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSB8PSAoMSBcXHUwMDNjXFx1MDAzYyAyMyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSBcXHUwMDI2PSB+KDEgXFx1MDAzY1xcdTAwM2MgMjMpO1xcbit9XFxuKyNlbHNlXFxuK0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcXG4rI2VuZGlmXFxuICNlbHNlXFxuIEZPTElPX1RFU1RfRkxBR19GQUxTRShodWdldGxiKVxcbitGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXFxuICNlbmRpZlxcbiBcXG4gUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKVxcbkBAIC0xMDY4LDEwICsxMDk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4gfVxcbiBcXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuK1xcbiAvKlxcbi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xcbi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuLSAqIGZhaWxpbmcgaGFyZHdhcmUuXFxuKyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3RcXG4rICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcXG4rICogZmFpbGluZyBoYXJkd2FyZS4gIFRoZSBjYWxsZXIgbWF5IG5vdCBoYXZlIGEgcmVmY291bnQgb24gdGhlIGZvbGlvXFxuKyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuQEAgLTEwODAsMTMgKzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFxcdTAwMjZcXHUwMDI2IFBhZ2VIV1BvaXNvbihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpXFxuK1xcdFxcdHJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7XFxuK1xcdC8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqL1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG4tXFx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuK1xcdHJldHVybiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKSB8fFxcbitcXHQgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcXG4gfVxcbiBcXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuaW5kZXggMmMzNzE4ZDU5MmQ2ZC4uMjJkNDg5MzVmZmRhNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xcbiBcXHRBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LFxcbiBcXHRBU19LRVJORUxfRklMRSA9IDEwLFxcdC8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4ndFxcbiBcXHRcXHRcXHRcXHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xcbitcXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cXG4gXFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cXG4gXFx0QVNfRk9MSU9fT1JERVJfQklUUyA9IDUsXFxuIFxcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxcbkBAIC0zNDUsNiArMzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXFxuIFxcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbit7XFxuK1xcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VnZnBfbWFzaztcXG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXFxuICAqIGEgZ29vZCBvcmRlciAodGhhdCdzIDFNQiBpZiB5b3UncmUgdXNpbmcgNGtCIHBhZ2VzKVxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4gI2Vsc2VcXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdDhcXG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcXG4gXFx0XFx0cmV0dXJuIDFVIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XFxuIFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIH1cXG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICpcXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cXG4tICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGU1xcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xcbi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxcbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxcbisgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2ZcXG4rICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWxcXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXFxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxcbiAgKlxcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cXG4rICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cXG4rICpcXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XFxuICAqIGlzIG5vbi1hdG9taWMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbWluLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG1heClcXG4rXFx0XFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NQVg7XFxuIH1cXG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxcbiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01JTjtcXG4gfVxcbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcXG4gICpcXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTQuLmU2NjZkZDE0Y2EwYzMgMTAwNjQ0XFxuLS0tIGEvbW0vS2NvbmZpZ1xcbisrKyBiL21tL0tjb25maWdcXG5AQCAtODQzLDExICs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxuIGNvbmZpZyBNTV9JRFxcbiBcXHRkZWZfYm9vbCBuXFxuIFxcbitjb25maWcgTEFSR0VfRk9MSU9cXG4rXFx0ZGVmX2Jvb2wgblxcbitcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuK1xcbiBtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFx0c2VsZWN0IExBUkdFX0ZPTElPXFxuIFxcdHNlbGVjdCBNTV9JRFxcbiBcXHRoZWxwXFxuIFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcXG5pbmRleCA1OGViOWQyNDA2NDM0Li41YThjYzIwZTYyNGU0IDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXG4gXFx0XFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcXG5AQCAtMjY5NSw2ICsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcXG4gXFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XFxuIFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFxcdTAwMjZmaWxwLVxcdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XFxuIFxcbitcXHRcXHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT0lPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuQEAgLTI3NDksNiArMjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKHBvczEgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcXHUwMDNlXFx1MDAzZSBzaGlmdCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuK1xcdFxcdHNpemVfdCBieXRlcylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuK1xcdHNpemVfdCBzYWZlX2J5dGVzO1xcbitcXG4rXFx0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGJ5dGVzO1xcbitcXHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cXG4rXFx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xcbitcXHRwYWdlKys7XFxuK1xcbitcXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cXG4rXFx0Zm9yICg7IHNhZmVfYnl0ZXMgXFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcXG4rXFx0XFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbkBAIC0yODI4LDYgKzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdGdvdG8gcHV0X2ZvbGlvcztcXG4gXFx0XFx0ZW5kX29mZnNldCA9IG1pbl90KGxvZmZfdCwgaXNpemUsIGlvY2ItXFx1MDAzZWtpX3BvcyArIGl0ZXItXFx1MDAzZWNvdW50KTtcXG4gXFxuK1xcdFxcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCkpIHtcXG4rXFx0XFx0XFx0c2l6ZV90IGZzaXplID0gbWFwcGluZ19taW5fZm9saW9fbnJieXRlcyhtYXBwaW5nKTtcXG4rXFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDI2IChmc2l6ZSAtIDEpO1xcbitcXHRcXHRcXHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVxcdTAwM2VraV9wb3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xcbitcXHRcXHRcXHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XFxuK1xcbitcXHRcXHRcXHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xcbitcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV9wb3MgKz0gY29waWVkO1xcbitcXHRcXHRcXHRsYXN0X3BvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFxuK1xcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcylcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogT25jZSB3ZSBzdGFydCBjb3B5aW5nIGRhdGEsIHdlIGRvbid0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XFxuIFxcdFxcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XFxuQEAgLTI4NjIsMTQgKzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdGlmICh3cml0YWJseV9tYXBwZWQpXFxuIFxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XFxuIFxcbi1cXHRcXHRcXHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpO1xcbitcXHRcXHRcXHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbitcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gLUVJTztcXG4rXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7XFxuIFxcbiBcXHRcXHRcXHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xcbiBcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV9wb3MgKz0gY29waWVkO1xcbiBcXHRcXHRcXHRsYXN0X3BvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4gXFxuIFxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcykge1xcbi1cXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuK1xcdFxcdFxcdFxcdGlmICghZXJyb3IpXFxuK1xcdFxcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYuLjM1MzM0MDMwOTEwNzQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTEyNTUsNyArMTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdGlmIChwaW4gXFx1MDAyNlxcdTAwMjYgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAoaXNfbWlncmF0ZV9pc29sYXRlX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKSlcXG5AQCAtMTM4MSw2ICsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcXG4gfVxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXFxuK1xcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG4rXFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxuK1xcbitcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLlxcbiAgKiBJZiB2bWVtbWFwIGV4aXN0cyBmb3IgdGhlIGZvbGlvLCBjbGVhciB0aGUgaHVnZXRsYiBmbGFnIHNvIHRoYXQgdGhlXFxuQEAgLTE0MTksNyArMTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0ICogdG8gdGFpbCBzdHJ1Y3QgcGFnZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXG4gXFx0aC1cXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xcbiBcXHRoLVxcdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xcbkBAIC0xNDkzLDE3ICsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcXG4tXFx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxcbi1cXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG4tXFxuIFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG4gXFx0XFx0aHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oZm9saW8pO1xcbkBAIC0xNTk1LDcgKzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTYyMCw3ICsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTY1MywxNCArMTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHQgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC5cXG4gXFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxcbiBcXHQgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGxcXG4tXFx0ICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS5cXG4rXFx0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXFxuIFxcdCAqL1xcbiBcXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcXG4gXFx0Vk1fV0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZub25faHZvX2ZvbGlvcykgXFx1MDAyNlxcdTAwMjYgcmV0KSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFxcdTAwMjZub25faHZvX2ZvbGlvcywgbHJ1KVxcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzc1LDcgKzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gICogc3RhYmxlLiAgRHVlIHRvIGxvY2tpbmcgb3JkZXIsIHdlIGNhbiBvbmx5IHRyeWxvY2tfd3JpdGUuICBJZiB3ZSBjYW5cXG4gICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci5cXG4gICovXFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbiBcXG5AQCAtMzk5OCw3ICs0MDAzLDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcXG4gXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXFx1MDAyNnNyYy1cXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcXG4tXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbitcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbkBAIC01ODA5LDcgKzU4MTQsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdCAqIGRvbid0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cXG4gXFx0XFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XFxuK1xcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpIHtcXG4gXFx0XFx0XFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxcbiBcXHRcXHRcXHRcXHRWTV9GQVVMVF9TRVRfSElOREVYKGhzdGF0ZV9pbmRleChoKSk7XFxuIFxcdFxcdFxcdGdvdG8gYmFja291dF91bmxvY2tlZDtcXG5AQCAtNjMxOCw3ICs2MzIzLDcgQEAgaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4gXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpO1xcbiBcXG4gXFx0cmV0ID0gLUVJTztcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbitcXHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuIFxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrO1xcbiBcXG4gXFx0cmV0ID0gLUVFWElTVDtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCA1MTUwOGE1NWM0MDU1Li5hYjIwOTRlZDMyMGNjIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTE4MDgsNjMgKzE4MDgsODkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFxuKy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTtcXG4rXFxuIC8qXFxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwicmF3IGVycm9yIHBhZ2VcXFwiLFxcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVxcdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cXG4rICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwiZXJyb3IgcGFnZVxcXCIsXFxuKyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cXG4gICovXFxuLXN0cnVjdCByYXdfaHdwX3BhZ2Uge1xcbi1cXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xcbitzdHJ1Y3QgaHdwX3BhZ2Uge1xcbitcXHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcXHUwMDI2Zm9saW8tXFx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xcbi19XFxuK1xcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLXtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuLVxcdFxcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlc1xcbi1cXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXFxuK1xcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzXFxuK1xcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cXG4gXFx0ICovXFxuLVxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm1mX211dGV4KTtcXG4tXFxuLVxcdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcXG4tXFx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVxcdTAwM2VmaXJzdCwgbm9kZSkge1xcbi1cXHRcXHRpZiAocGFnZSA9PSBwLVxcdTAwM2VwYWdlKSB7XFxuLVxcdFxcdFxcdHJldCA9IHRydWU7XFxuK1xcdGZvciAocCA9IGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cXHUwMDNlbmV4dCkge1xcbitcXHRcXHRpZiAocGFnZSA9PSBwLVxcdTAwM2VwYWdlKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbitcXHRyZXR1cm4gcCAhPSBOVUxMO1xcbit9XFxuIFxcbisvKlxcbisgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cXG4rICovXFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xcbit9XFxuK1xcbisvKlxcbisgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuXFxuKyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cXG4rICovXFxuK2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGJvb2wgcmV0O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbitcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdGlmICghZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpIHtcXG4rXFx0XFx0cmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcXG4rdW5sb2NrOlxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xcbitcXHRzdHJ1Y3QgaHdwX3BhZ2UgKnAsICpuZXh0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4gXFxuLVxcdGhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xcbitcXHRuZXh0ID0gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XFxuK1xcdGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uID0gTlVMTDtcXG4rXFxuK1xcdHdoaWxlIChuZXh0KSB7XFxuK1xcdFxcdHAgPSBuZXh0O1xcbitcXHRcXHRuZXh0ID0gcC1cXHUwMDNlbmV4dDtcXG4gXFx0XFx0aWYgKG1vdmVfZmxhZylcXG4gXFx0XFx0XFx0U2V0UGFnZUhXUG9pc29uKHAtXFx1MDAzZXBhZ2UpO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTE4ODEsMzQgKzE5MDcsNTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuICNkZWZpbmVcXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFxcdDNcXHQvKiBmb2xpbyBhbHJlYWR5IHBvaXNvbmVkICovXFxuICNkZWZpbmVcXHRNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEXFx0NFxcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9SRVRSWVxcdFxcdDVcXHQvKiBodWdlcGFnZSBpcyBidXN5LCByZXRyeSAqL1xcbitcXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9zZXRfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0aWYgKGZvbGlvX3Rlc3Rfc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xcbitcXHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRmb2xpb19jbGVhcl9odWdlX3BvaXNvbihmb2xpbyk7XFxuK1xcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0XFxuICAqIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBvaXNvbmVkIHBhZ2VzLlxcbiAgKi9cXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxcbi1cXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXFxuLVxcdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXFxuK1xcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcXG4rXFx0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xcbi1cXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVxcdTAwM2VmaXJzdCwgbm9kZSkge1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9yIChwID0gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb247IHA7IHAgPSBwLVxcdTAwM2VuZXh0KSB7XFxuIFxcdFxcdGlmIChwLVxcdTAwM2VwYWdlID09IHBhZ2UpXFxuLVxcdFxcdFxcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAocmF3X2h3cCkge1xcbi1cXHRcXHRyYXdfaHdwLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4tXFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZyYXdfaHdwLVxcdTAwM2Vub2RlLCBoZWFkKTtcXG4rXFx0aWYgKHApIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcXG4rXFx0fVxcbitcXG4rXFx0cCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKHApIHtcXG4rXFx0XFx0cC1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuK1xcdFxcdHAtXFx1MDAzZW5leHQgPSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbjtcXG4rXFx0XFx0Zm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcXG5AQCAtMTkxNywxNiArMTk2NywyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcXG4rXFx0XFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIGh3cF9wYWdlIGlzIG5vdFxcbiBcXHRcXHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGNvdW50O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4gXFx0LypcXG4gXFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJ3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcXG4gXFx0ICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbid0IGV4aXN0LlxcbkBAIC0xOTQxLDcgKzE5OTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXHRjb3VudCA9IF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbkBAIC0xOTUwLDggKzIwMDgsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XFxuIFxcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XFxuK1xcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbkBAIC0yMTA0LDYgKzIxNjIsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbiBcXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXFxuQEAgLTI2OTUsOCArMjc1OCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIVBhZ2VIV1BvaXNvbihwKSkge1xcbi1cXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXFxcblxcXCIsXFxuK1xcdGlmICghaXNfcGFnZV9od3BvaXNvbihwKSkge1xcbitcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IHBmbiwgXFx1MDAyNnVucG9pc29uX3JzKTtcXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdH1cXG5AQCAtMjcyNSwxMyArMjc4OCwxOSBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXG4gXFx0Z2hwID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgTUZfVU5QT0lTT04pO1xcbiBcXHRpZiAoIWdocCkge1xcbitcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbiBcXHRcXHRcXHRodWdlID0gdHJ1ZTtcXG4gXFx0XFx0XFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4tXFx0XFx0XFx0aWYgKGNvdW50ID09IDApXFxuK1xcdFxcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkgPyAwIDogLUVCVVNZO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHR9IGVsc2UgaWYgKGdocCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0aWYgKGdocCA9PSAtRUhXUE9JU09OKSB7XFxuIFxcdFxcdFxcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xcbkBAIC0yNzQwLDE2ICsyODA5LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdFxcdHVucG9pc29uX3ByX2luZm8oXFxcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4tXFx0XFx0XFx0aHVnZSA9IHRydWU7XFxuLVxcdFxcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuLVxcdFxcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbi1cXHRcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbitcXHRcXHRodWdlID0gdHJ1ZTtcXG4rXFx0XFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGNvdW50ID09IDApIHtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdFxcdH1cXG4tXFxuK1xcdFxcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpIHtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5pbmRleCA3YWMxOWZhYjIyNjMyLi4zMzAwN2U4ZTU0NmEwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZmQxOWEwYmZiZmU3NiAxMDA2NDRcXG4tLS0gYS9tbS9ybWFwLmNcXG4rKysgYi9tbS9ybWFwLmNcXG5AQCAtMTk3OCw2ICsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFNpbmNlIHdlIGNhbm5vdCBzcGxpdCBhIGh1Z2V0bGIgZm9saW8sIHdlIHdhbnQgdG8gaW5zZXJ0IGEgcG9pc29uXFxuKyAqIGVudHJ5IGludG8gdGhlIHBhZ2UgdGFibGUgZm9yIHRoZSB3aG9sZSBmb2xpbyBldmVuIGlmIG9ubHkgb25lIHBhZ2VcXG4rICogaXMgcG9pc29uZWQuICBPdGhlcndpc2UsIHdlJ3ZlIHNwbGl0IGRvd24gdG8gdGhlIFBURSBsZXZlbCBhbmQgd2Ugb25seVxcbisgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlXFxuKyAqL1xcbitzdGF0aWMgYm9vbCB0dHVfY3JlYXRlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4re1xcbitcXHRpZiAoIShmbGFncyBcXHUwMDI2IFRUVV9IV1BPSVNPTikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuK1xcdFxcdHJldHVybiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4rXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rfVxcbitcXG4gLypcXG4gICogQGFyZzogZW51bSB0dHVfZmxhZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBhcmd1bWVudFxcbiAgKi9cXG5AQCAtMTk5Myw3ICsyMDA5LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSwgZW5kX2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XFxuIFxcdGludCBwdGVzID0gMDtcXG4gXFxuIFxcdC8qXFxuQEAgLTIwMjMsOSArMjAzOCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJhbmdlLmVuZCk7XFxuLVxcbi1cXHRcXHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cXG4tXFx0XFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4gXFx0fVxcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXG5AQCAtMjEyMSw3ICsyMTMzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlXFxuIFxcdFxcdFxcdCAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTtcXG4rXFx0XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSxcXG4rXFx0XFx0XFx0XFx0XFx0Zm9saW8pO1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXFxuIFxcdFxcdFxcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcXG5AQCAtMjIwMCwxMiArMjIxMywxMiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xcbiBcXHRcXHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xcbiBcXG4tXFx0XFx0aWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XFxuK1xcdFxcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHtcXG4gXFx0XFx0XFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcXG4gXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4gXFx0XFx0XFx0XFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XFxuIFxcdFxcdFxcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0aHN6KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xcbiBcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG5AQCAtMjQyMyw3ICsyNDM2LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbiBcXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxcbkBAIC0yNDUyLDkgKzI0NjQsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJhbmdlLmVuZCk7XFxuLVxcbi1cXHRcXHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cXG4tXFx0XFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4gXFx0fVxcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXG5AQCAtMjYwNywxNCArMjYxNiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuIFxcbi1cXHRcXHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpKSB7XFxuK1xcdFxcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoZm9saW8pLCBmb2xpbyk7XFxuIFxcbiBcXHRcXHRcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbiBcXHRcXHRcXHRcXHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcXG4gXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuIFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbkBAIC0yNjQ0LDcgKzI2NTMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdGlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHRldmFsLCBoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRwdGV2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pKTtcXG4gXFx0XFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG4gXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuQEAgLTI2NTcsNyArMjY2Nyw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0aWYgKGFub25fZXhjbHVzaXZlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCAgICBodWdldGxiX3RyeV9zaGFyZV9hbm9uX3JtYXAoZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHB0ZXZhbCwgaHN6KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHRldmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbiBcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTI3MDMsNyArMjcxNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0aHN6KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTtcXG4gXFx0XFx0XFx0dHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSxcXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzLi40OTJjOWJlZjM2MjA3IDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTMyNDAsNyArMzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDM1YzNiYjE1YWU5NmEuLjcwZTU0YWNlMGU3NDEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXFxuIFxcdFxcdFxcdGdvdG8ga2VlcDtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJ3QgaGFuZGxlIGxhcmdlXFxuIFxcdFxcdFxcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGRiNTdjNTc2NmFiNjAuLjk0ZWVkY2M3ZjFhOWUgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmb2xpbztcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM2OjM4Ljg3Mjg3NzA2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNTQxMzU0MzMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcInVucG9pc29uX21lbW9yeVwiLFxuICAgIFwiZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh3cG9pc29uIGlzIGhhbmRsZWQgZm9yIGxhcmdlIGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBJdCBtb2RpZmllcyBgZmlsZW1hcF9yZWFkYCB0byBoYW5kbGUgaHdwb2lzb25lZCBmb2xpb3MgYW5kIHVwZGF0ZXMgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBNTSBhbmQgaHVnZXRsYmZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDMyMGRkYzFmYTg2ZjEyODViNTdlZmJhZDc0MWIzMGY1MTg5YTM3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjM2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjIuLmVkZGFjNGVkMjE0YjEgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4rKysgYi9mcy9LY29uZmlnXG5AQCAtMjcyLDcgKzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4rXHRzZWxlY3QgTEFSR0VfRk9MSU9cbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiBcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDIxNmUxYTBkZDBiMjMuLmNlZjdlNjFiODI3ZDcgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuIH1cbiBcbi0vKlxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cbi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xuLSAqIEhXUE9JU09OIHBhZ2UuXG4tICovXG4tc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi1cdFx0c2l6ZV90IGJ5dGVzKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbi1cdHNpemVfdCBzYWZlX2J5dGVzO1xuLVxuLVx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbi1cdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbi1cdHBhZ2UrKztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSArIDE7XG4tXHRcdFx0aWYgKG5yIFx1MDAzYz0gb2Zmc2V0KVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bnIgPSBuciAtIG9mZnNldDtcbi1cbi1cdFx0LyogRmluZCB0aGUgZm9saW8gKi9cbi1cdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XG4tXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGVcbi1cdFx0XHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRcdFx0d2FudCA9IG5yO1xuLVx0XHRcdGVsc2Uge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxuLVx0XHRcdFx0ICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlclxuLVx0XHRcdFx0ICogb2Zmc2V0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTtcbi1cdFx0XHRcdGlmICh3YW50ID09IDApIHtcbi1cdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHR9XG4tXHRcdG9mZnNldCArPSBjb3BpZWQ7XG4tXHRcdHJldHZhbCArPSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCArPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0b2Zmc2V0IFx1MDAyNj0gfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0fVxuLVx0aW9jYi1cdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcdTAwM2NcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKSArIG9mZnNldDtcbi1cdHJldHVybiByZXR2YWw7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG5AQCAtODgzLDYgKzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4rXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTtcbitcbitcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbitcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbitcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcbitcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbit9XG4rXG4gLypcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXG5AQCAtOTI2LDggKzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuK1x0XHRcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZESVI6XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbkBAIC0xMjA2LDcgKzExMDksNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0LnJlYWRfaXRlclx0XHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXG4rXHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MC4uMTg3ODY0MmU3NWVjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTtcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC01OTUsOCArNTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tXHR7XHR2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbitcdHtcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuIFx0XHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcdFx0XFxcbiBcdH1cbiBcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gI2Vsc2VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIGlubGluZSBib29sXHRcdFx0XHRcdFx0XFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzcG9vbDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZV9odWdldGxiX3N1YnBvb2w7XG4gfVxuQEAgLTg1Nyw3ICs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiAjZW5kaWZcbiBcbi0vKlxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXG4tICovXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHJldHVybiBQQUdFX01BU0sgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7XG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMTU3LDcgKzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzYuLjg2YTJkMGZlZTU1N2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XG4gICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS5cbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAgKiBAX3VudXNlZF9zbGFiX29ial9leHRzOiBQbGFjZWhvbGRlciB0byBtYXRjaCBvYmpfZXh0cyBpbiBzdHJ1Y3Qgc2xhYi5cbiAgKlxuQEAgLTQ5OSw3ICs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuK1x0XHRcdHN0cnVjdCBod3BfcGFnZSAqaHVnZXRsYl9od3BvaXNvbjtcbiBcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3MjIzZjZmNGUyYjQwLi4wN2NjNzg1NGIyZGUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtODkzLDE0ICs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pXG4gLypcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuLSAqIGNvbXBvdW5kIHBhZ2UuXG4rICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbisgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGVcbisgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cbiAgKlxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cbiAgKi9cbiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggKzEwNDYsMjkgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcbitcbisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gKFJFQURfT05DRShmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXHUwMDNlXHUwMDNlIDIzKSA9PVxuK1x0XHQoKFBHVFlfaHVnZXRsYiBcdTAwM2NcdTAwM2MgMSkgfCAxKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIHw9ICgxIFx1MDAzY1x1MDAzYyAyMyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyAyMyk7XG4rfVxuKyNlbHNlXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxuKyNlbmRpZlxuICNlbHNlXG4gRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxuICNlbmRpZlxuIFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcbkBAIC0xMDY4LDEwICsxMDk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XG4gfVxuIFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4rXG4gLypcbi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xuLSAqIGJlc3QgZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxuKyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3RcbisgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuKyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xuKyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtMTA4MCwxMyArMTExMCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbitcdGlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSlcbitcdFx0cmV0dXJuIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihwYWdlKTtcbitcdC8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqL1xuK1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4rXHRcdHJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuLVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuK1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSB8fFxuK1x0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuIH1cbiBcbiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMmMzNzE4ZDU5MmQ2ZC4uMjJkNDg5MzVmZmRhNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcbiBcdFx0XHRcdCAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovXG4rXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCdzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xuIFx0cmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICs0MDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDFVIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxuKyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuKyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4gICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuXG4gICpcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbisgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuKyAqXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XG4gICogaXMgbm9uLWF0b21pYy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtaW4sXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtYXgpXG4rXHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuO1xuLVxuLVx0aWYgKG1pbiBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWluID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbi1cdGlmIChtYXggXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4gXHRpZiAobWF4IFx1MDAzYyBtaW4pXG4gXHRcdG1heCA9IG1pbjtcbiBcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbiBcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li5lNjY2ZGQxNGNhMGMzIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSArODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuIGNvbmZpZyBNTV9JRFxuIFx0ZGVmX2Jvb2wgblxuIFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xuK1x0ZGVmX2Jvb2wgblxuK1x0c2VsZWN0IFhBUlJBWV9NVUxUSVxuK1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIFx0c2VsZWN0IENPTVBBQ1RJT05cbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQuLjVhOGNjMjBlNjI0ZTQgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTI0ODMsNiArMjQ4Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4rXHRcdFx0YnJlYWs7XG4gXHRcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXG5AQCAtMjY5NSw2ICsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcbiBcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xuIFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcdTAwMjZmaWxwLVx1MDAzZWZfcmEsIG1hcHBpbmcsIGluZGV4KTtcbiBcbitcdFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9JTylcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuQEAgLTI3NDksNiArMjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIChwb3MxIFx1MDAzZVx1MDAzZSBzaGlmdCA9PSBwb3MyIFx1MDAzZVx1MDAzZSBzaGlmdCk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4rXHRcdHNpemVfdCBieXRlcylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4rXHRzaXplX3Qgc2FmZV9ieXRlcztcbitcbitcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4rXHRcdHJldHVybiBieXRlcztcbitcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuK1x0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuK1x0cGFnZSsrO1xuK1xuK1x0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4rXHRmb3IgKDsgc2FmZV9ieXRlcyBcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXG4rXHRcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuQEAgLTI4MjgsNiArMjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyArIGl0ZXItXHUwMDNlY291bnQpO1xuIFxuK1x0XHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCkpIHtcbitcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuK1x0XHRcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgKGZzaXplIC0gMSk7XG4rXHRcdFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cdTAwM2VraV9wb3MsXG4rXHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuK1x0XHRcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcbitcbitcdFx0XHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xuK1x0XHRcdGlvY2ItXHUwMDNla2lfcG9zICs9IGNvcGllZDtcbitcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qXG4gXHRcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxuIFx0XHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxuQEAgLTI4NjIsMTQgKzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbitcdFx0XHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuK1x0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xuIFxuIFx0XHRcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XG4gXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbitcdFx0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2Li4zNTMzNDAzMDkxMDc0IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MTMsNyArNDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyArMTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGlmIChwaW4gXHUwMDI2XHUwMDI2ICFmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoaXNfbWlncmF0ZV9pc29sYXRlX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkpXG5AQCAtMTM4MSw2ICsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdC8qXG4rXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4rXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbitcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4rXG4rXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK31cbitcbiAvKlxuICAqIFJlbW92ZSBodWdldGxiIGZvbGlvIGZyb20gbGlzdHMuXG4gICogSWYgdm1lbW1hcCBleGlzdHMgZm9yIHRoZSBmb2xpbywgY2xlYXIgdGhlIGh1Z2V0bGIgZmxhZyBzbyB0aGF0IHRoZVxuQEAgLTE0MTksNyArMTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdCAqIHRvIHRhaWwgc3RydWN0IHBhZ2VzLlxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4tXHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4rXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFxuIFx0aC1cdTAwM2Vucl9odWdlX3BhZ2VzLS07XG4gXHRoLVx1MDAzZW5yX2h1Z2VfcGFnZXNfbm9kZVtuaWRdLS07XG5AQCAtMTQ5MywxNyArMTUwNSwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbitcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcbi1cdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHN1YnBhZ2VzIHJldXNhYmxlLlxuLVx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuLVx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbi1cbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2NtYShmb2xpbykpXG4gXHRcdGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKGZvbGlvKTtcbkBAIC0xNTk1LDcgKzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTYyMCw3ICsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0XHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4rXHRcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTE2NTMsMTQgKzE2NTgsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqIHNob3VsZCBvbmx5IGJlIHBhZ2VzIG9uIHRoZSBub25faHZvX2ZvbGlvcyBsaXN0LlxuIFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxuIFx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG4tXHQgKiBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuK1x0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXG4gXHQgKi9cbiBcdFZNX1dBUk5fT04oIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpO1xuIFx0Vk1fV0FSTl9PTihyZXQgXHUwMDNjIDApO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5vbl9odm9fZm9saW9zKSBcdTAwMjZcdTAwMjYgcmV0KSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbi1cdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH1cbiBcbkBAIC0xNzc1LDcgKzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiBcbkBAIC0zOTk4LDcgKzQwMDMsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnNyYy1cdTAwM2VodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkge1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICs1ODE0LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXG4gXHRcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xuK1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgKzYzMjMsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuIFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpO1xuIFxuIFx0cmV0ID0gLUVJTztcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0Z290byBvdXRfcmVsZWFzZV91bmxvY2s7XG4gXG4gXHRyZXQgPSAtRUVYSVNUO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1Li5hYjIwOTRlZDMyMGNjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTE4MDgsNjMgKzE4MDgsODkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXG4rLyogUHJvdGVjdHMgYWxsIGxpc3RzIG9mIGh3cF9wYWdlcyAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaHdwX3BhZ2VfbG9jayk7XG4rXG4gLypcbi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCJyYXcgZXJyb3IgcGFnZVwiLFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4rICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcImVycm9yIHBhZ2VcIixcbisgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cbiAgKi9cbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4rc3RydWN0IGh3cF9wYWdlIHtcbitcdHN0cnVjdCBod3BfcGFnZSAqbmV4dDtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVx1MDAyNmZvbGlvLVx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xuLX1cbitcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbi1cdFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlc1xuLVx0ICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHN1YnBhZ2VzIGFyZSBIV1BPSVNPTmVkLlxuK1x0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXNcbitcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiBcdCAqL1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuK1x0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuLVxuLVx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4tXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSkge1xuLVx0XHRcdHJldCA9IHRydWU7XG4rXHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4rXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSlcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuIFx0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuK1x0cmV0dXJuIHAgIT0gTlVMTDtcbit9XG4gXG4rLypcbisgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cbisgKi9cbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcbit9XG4rXG4rLypcbisgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuXG4rICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLlxuKyAqL1xuK2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0Ym9vbCByZXQ7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbitcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdGlmICghZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpIHtcbitcdFx0cmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbitcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4rdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7XG4rXHRzdHJ1Y3QgaHdwX3BhZ2UgKnAsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7XG4rXHRuZXh0ID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjtcbitcdGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBOVUxMO1xuK1xuK1x0d2hpbGUgKG5leHQpIHtcbitcdFx0cCA9IG5leHQ7XG4rXHRcdG5leHQgPSBwLVx1MDAzZW5leHQ7XG4gXHRcdGlmIChtb3ZlX2ZsYWcpXG4gXHRcdFx0U2V0UGFnZUhXUG9pc29uKHAtXHUwMDNlcGFnZSk7XG4gXHRcdGVsc2VcbkBAIC0xODgxLDM0ICsxOTA3LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuICNkZWZpbmVcdE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEXHQzXHQvKiBmb2xpbyBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFx0NFx0LyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9SRVRSWVx0XHQ1XHQvKiBodWdlcGFnZSBpcyBidXN5LCByZXRyeSAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4rXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbitcdGZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuK1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xuK1x0c3RydWN0IGh3cF9wYWdlICpwO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCByZXQgPSBodWdldGxiX3NldF9wb2lzb24oZm9saW8pO1xuIFxuIFx0LypcbiBcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxuLVx0ICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuLVx0ICogc28gc2tpcCB0byBhZGQgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbitcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbitcdCAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xuLVx0aGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcdGZvciAocCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247IHA7IHAgPSBwLVx1MDAzZW5leHQpIHtcbiBcdFx0aWYgKHAtXHUwMDNlcGFnZSA9PSBwYWdlKVxuLVx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHJhd19od3ApIHtcbi1cdFx0cmF3X2h3cC1cdTAwM2VwYWdlID0gcGFnZTtcbi1cdFx0bGxpc3RfYWRkKFx1MDAyNnJhd19od3AtXHUwMDNlbm9kZSwgaGVhZCk7XG4rXHRpZiAocCkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7XG4rXHR9XG4rXG4rXHRwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHApIHtcbitcdFx0cC1cdTAwM2VwYWdlID0gcGFnZTtcbitcdFx0cC1cdTAwM2VuZXh0ID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjtcbitcdFx0Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IHA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcbkBAIC0xOTE3LDE2ICsxOTY3LDIwIEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqL1xuIFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pO1xuIFx0XHQvKlxuLVx0XHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgcmF3X2h3cF9wYWdlIGlzIG5vdFxuK1x0XHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgaHdwX3BhZ2UgaXMgbm90XG4gXHRcdCAqIHVzZWQgYW55IG1vcmUsIHNvIGZyZWUgaXQuXG4gXHRcdCAqL1xuIFx0XHRfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xuIFx0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBjb3VudDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4gXHQvKlxuIFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJ3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcbiBcdCAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24ndCBleGlzdC5cbkBAIC0xOTQxLDcgKzE5OTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcdGNvdW50ID0gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBjb3VudDtcbiB9XG4gXG4gdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMTk1MCw4ICsyMDA4LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XG4gXHRmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpO1xuK1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5AQCAtMjEwNCw2ICsyMTYyLDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBmbGFnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiBcbiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi9cbkBAIC0yNjk1LDggKzI3NTgsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbiBcbi1cdGlmICghUGFnZUhXUG9pc29uKHApKSB7XG4tXHRcdHVucG9pc29uX3ByX2luZm8oXCIlI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cIixcbitcdGlmICghaXNfcGFnZV9od3BvaXNvbihwKSkge1xuK1x0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXG5cIixcbiBcdFx0XHRcdCBwZm4sIFx1MDAyNnVucG9pc29uX3JzKTtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG5AQCAtMjcyNSwxMyArMjc4OCwxOSBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFxuIFx0Z2hwID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgTUZfVU5QT0lTT04pO1xuIFx0aWYgKCFnaHApIHtcbitcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRcdGh1Z2UgPSB0cnVlO1xuIFx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApXG4rXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXQgPSBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkgPyAwIDogLUVCVVNZO1xuIFx0XHR9XG4tXHRcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9IGVsc2UgaWYgKGdocCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoZ2hwID09IC1FSFdQT0lTT04pIHtcbiBcdFx0XHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcbkBAIC0yNzQwLDE2ICsyODA5LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXG5cIixcbiBcdFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGh1Z2UgPSB0cnVlO1xuLVx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdFx0XHR9XG4rXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0aHVnZSA9IHRydWU7XG4rXHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVxuK1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMi4uMzMwMDdlOGU1NDZhMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xODEzLDcgKzE4MTMsNyBAQCBzdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4gXHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiBcdFx0XHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuK1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcbiBcdFx0XHQgKiBpbiBhbGwgY2FzZXMgeWV0LlxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZmQxOWEwYmZiZmU3NiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMTk3OCw2ICsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0ICAgICBGUEJfUkVTUEVDVF9XUklURSB8IEZQQl9SRVNQRUNUX1NPRlRfRElSVFkpO1xuIH1cbiBcbisvKlxuKyAqIFNpbmNlIHdlIGNhbm5vdCBzcGxpdCBhIGh1Z2V0bGIgZm9saW8sIHdlIHdhbnQgdG8gaW5zZXJ0IGEgcG9pc29uXG4rICogZW50cnkgaW50byB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIHdob2xlIGZvbGlvIGV2ZW4gaWYgb25seSBvbmUgcGFnZVxuKyAqIGlzIHBvaXNvbmVkLiAgT3RoZXJ3aXNlLCB3ZSd2ZSBzcGxpdCBkb3duIHRvIHRoZSBQVEUgbGV2ZWwgYW5kIHdlIG9ubHlcbisgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlXG4rICovXG4rc3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4re1xuK1x0aWYgKCEoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRyZXR1cm4gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4rXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuK31cbitcbiAvKlxuICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnRcbiAgKi9cbkBAIC0xOTkzLDcgKzIwMDksNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXHRpbnQgcHRlcyA9IDA7XG4gXG4gXHQvKlxuQEAgLTIwMjMsOSArMjAzOCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuQEAgLTIxMjEsNyArMjEzMyw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlXG4gXHRcdFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTtcbitcdFx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxuK1x0XHRcdFx0XHRmb2xpbyk7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXG4gXHRcdFx0ICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heVxuQEAgLTIyMDAsMTIgKzIyMTMsMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiBcbi1cdFx0aWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XG4rXHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHtcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuK1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuQEAgLTI0MjMsNyArMjQzNiw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcbiBcbiBcdC8qXG4gXHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxuQEAgLTI0NTIsOSArMjQ2NCw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICovXG4gXHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmFuZ2UuZW5kKTtcbi1cbi1cdFx0LyogV2UgbmVlZCB0aGUgaHVnZSBwYWdlIHNpemUgZm9yIHNldF9odWdlX3B0ZV9hdCgpICovXG4tXHRcdGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXHR9XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXG5AQCAtMjYwNywxNCArMjYxNiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHtcbitcdFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIFRUVV9IV1BPSVNPTikpIHtcbiBcdFx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0XHRcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xuIFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4rXHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG5AQCAtMjY0NCw3ICsyNjUzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbitcdFx0XHRcdFx0XHRcdHB0ZXZhbCxcbitcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4gXHRcdFx0XHRyZXQgPSBmYWxzZTtcbkBAIC0yNjU3LDcgKzI2NjcsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgaHVnZXRsYl90cnlfc2hhcmVfYW5vbl9ybWFwKGZvbGlvKSkge1xuIFx0XHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxuLVx0XHRcdFx0XHRcdFx0cHRldmFsLCBoc3opO1xuK1x0XHRcdFx0XHRcdFx0cHRldmFsLFxuK1x0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbiBcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbiBcdFx0XHRcdFx0YnJlYWs7XG5AQCAtMjcwMyw3ICsyNzE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdH1cbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbitcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpO1xuIFx0XHRcdHRyYWNlX3NldF9taWdyYXRpb25fcHRlKGFkZHJlc3MsIHB0ZV92YWwoc3dwX3B0ZSksXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjMuLjQ5MmM5YmVmMzYyMDcgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YS4uNzBlNTRhY2UwZTc0MSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTEwODYsNyArMTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiBcdFx0XHRnb3RvIGtlZXA7XG4gXG4tXHRcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbitcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbid0IGhhbmRsZSBsYXJnZVxuIFx0XHRcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBkYjU3YzU3NjZhYjYwLi45NGVlZGNjN2YxYTllIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICs3NzQsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNjozOC44NzI4ODk5MTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDM4MDc2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBMYXJnZSBGb2xpb3MgYW5kIEh1Z2V0bGJmcyBIV1BvaXNvbmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKmRlZmluaXRlbHkqIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgbW9kaWZpY2F0aW9uIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cyAoYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdmFyaW91cyBpbmNsdWRlIGZpbGVzLCBhbmQgYSBzbGV3IG9mIGBtbS9gIGZpbGVzKSBpcyBhIGNsZWFyIGluZGljYXRpb24uIFRoZSBrZXkgZm9jdXMgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgaGFyZHdhcmUgcG9pc29uaW5nIChgaHdwb2lzb25gKSBpbiB0aGUgY29udGV4dCBvZiBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkncmUgcmV3b3JraW5nIGhvdyBgaHdwb2lzb25gIGlzIG1hbmFnZWQgZm9yIGxhcmdlIHBhZ2VzLiBUaGUgbW92ZSBhd2F5IGZyb20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCBpcyBhIHJlZCBmbGFnIG9uIGl0cyBvd24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZ1bmN0aW9ucyBsaWtlIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgc2lnbmFscyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyB0aGVzZSBwYWdlIHR5cGVzIGFyZSBoYW5kbGVkIHdoZW4gaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZmlsZW1hcF9yZWFkYCB0byBhY2NvdW50IGZvciB0aGlzLlxuXG5Tbywgd2hlcmUgZG8gd2Ugc3RhcnQ/IFdlbGwsIGBmaWxlbWFwX3JlYWRgIGlzIGEgaG90IHBhdGgsIHNvIEknZCBwcm9iYWJseSBiZSBhIGxpdHRsZSBjYXV0aW91cyBhYm91dCBmb2N1c2luZyAqdG9vKiBoZWF2aWx5IHRoZXJlLCB0aG91Z2ggaXQncyBjZXJ0YWlubHkgcmVsZXZhbnQuIFRoZSBuZXcgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgbG9vayBsaWtlIHByaW1lIHRhcmdldHMuIFRoZSBjaGFuZ2VzIHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgYWxzbyBjcnVjaWFsLiBgdW5wb2lzb25fbWVtb3J5YCBpcyBvYnZpb3VzbHkgYSBmdW5jdGlvbiBvZiBpbnRlcmVzdC5cblxuTGV0J3MgZGl2ZSBkZWVwZXIgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoZSBtZW50aW9uZWQgZnVuY3Rpb25zIChgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGFuZCBgdW5wb2lzb25fbWVtb3J5YCkgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEluIGFkZGl0aW9uLCBJIG5lZWQgdG8gY2hlY2sgZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLCBgZm9saW9fZnJlZV9yYXdfaHdwYCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuXG5cblNpbWlsYXJseSwgaW4gYG1tL2ZpbGVtYXAuY2AsIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgZmlsZW1hcF9yZWFkYCBtb2RpZmljYXRpb25zIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEknbGwgd2FudCB0byByZXZpZXcgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBIV1BvaXNvbmluZy5cblxuT2YgY291cnNlLCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyZSBjcnVjaWFsIGNvbnRleHQ6IGBDT05GSUdfSFVHRVRMQkZTYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfTEFSR0VfRk9MSU9gLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBob3cgYENPTkZJR19IVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNlbGVjdCBgQ09ORklHX0xBUkdFX0ZPTElPYC4gQW5kIEknbGwgZG91YmxlLWNoZWNrIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBpbXBsaWNhdGlvbnMgb2YgYE1FTU9SWV9GQUlMVVJFYC5cblxuVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBoYXJkd2FyZSBwb2lzb25pbmcgb2YgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMgcGFnZXMgYW5kIGRlc2lnbiBmdXp6aW5nIHN0cmF0ZWdpZXMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6NDYuOTEwOTcwNjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDMzMjI4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNjo1MS41NTQzMDM0NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2MzY1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTUVNT1JZX0ZBSUxVUkUgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIHdlIG5lZWQgdG8gc2VlIHdoYXQncyBjb25uZWN0ZWQgdG8gYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucywgc28gaXQncyBhIHNhZmUgYmV0IHRoYXQgYW55IGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9GQUlMVVJFYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQsIHRoZXJlLiBMZXQncyBzdGFydCBkaWdnaW5nIGluIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdCwgYW5kIHdoYXQgZmVhdHVyZXMgbWlnaHQgZGVwZW5kIG9uIGl0IGJlaW5nIHNldC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCB0aGUgbG9naWMgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSBpdHMgdmlzaWJpbGl0eS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgcXVpY2tseS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6NTQuODUwNjcyNTg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdFxcbiA3NzE6XFx0XFx0ICBUaGlzIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIGJvb3QgdXNpbmcgdGhlXFxuIDc3MjpcXHRcXHQgIC9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIHR1bmFibGUuXFxuIDc3MzpcXHRcXG4gNzc0OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc3NTpcXHRcXHRib29sXFxuIDc3NjpcXHRcXG4gNzc3OlxcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbiA3Nzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzc5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3ODA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4gNzgxOlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuIDc4MjpcXHRcXHRoZWxwXFxuIDc4MzpcXHRcXHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xcbiA3ODQ6XFx0XFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xcbiA3ODU6XFx0XFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcXG4gNzg2OlxcdFxcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cXG4gNzg3OlxcdFxcbiA3ODg6XFx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbiA3ODk6XFx0XFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNjo1NC44NTA4NDQzMTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYyOTcwOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucyBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBib2xzdGVyaW5nIG91ciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSwgZW5hYmxpbmcgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYEhXUE9JU09OX0lOSkVDVGAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaG9zZSBhcmUgcHJhY3RpY2FsbHkgZXNzZW50aWFsIGZvciByb2J1c3QgZmF1bHQgZGV0ZWN0aW9uIGFuZCBpbmplY3Rpb24gdGVzdGluZywgcmVzcGVjdGl2ZWx5LiBBbmQsIHdoaWxlIEknbSBhdCBpdCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIFRoZXkgY2FuIGJlIHVzZWZ1bCBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlc2lsaWVuY2Ugd2l0aCBsYXJnZSBtZW1vcnkgcGFnZXMuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIHRoZXNlIG9wdGlvbnMgcGxheSBvdXQsIEkgcmVhbGx5IG5lZWQgdG8gZGVsdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBkZXRlY3RzLCBpc29sYXRlcywgYW5kIHJlc3BvbmRzIHRvIGVycm9ycy4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6NTguMjEzODE5MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1OTg4Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGJvb2x8dW5zaWduZWQgbG9uZykuKmh1Z2V0bGJfLipod3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDkyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTYtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5Nzpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5ODpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5OS1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTgyMz1zdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1MS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NTI6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODUzLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2My0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NjQ6Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY1LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTk3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDQtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDA1OnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjA1LjY3MzcxMzYzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzQ2ODE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIEh1Z2VUTEIgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgYW5kIHRoZSBjb250ZXh0IHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzLiBSaWdodCBhd2F5LCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29yZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgaGFyZHdhcmUgcG9pc29uaW5nIGFuZCBIdWdlVExCIHVwZGF0ZXMuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgaW1wbGllcyB0aGlzIGlzIHdoZXJlIHRoZSBjcml0aWNhbCBoYW5kbGluZyBvY2N1cnMuIFRoZXJlZm9yZSwgbXkgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSAqbXVzdCogZXhhbWluZSB0aGUgY29kZSB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCB0YXJnZXRpbmcgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSEpIGxpZXMgaW4gdGVybXMgb2YgaG93IGhhcmR3YXJlLWRldGVjdGVkIGVycm9ycyBhcmUgcHJvcGFnYXRlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIEh1Z2VUTEIgZnJhbWV3b3JrLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNzowOC43NDg0MDAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk4MDUzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTkxOT1zdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTMxLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkzMjpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkzMy17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwMTU9c3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDQ1LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjA0NjpcXHRyYyA9IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNDctXFx0aWYgKHJjIFxcdTAwM2U9IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjEzLjc0NjQ2MTU3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg1MTI2OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgbWVtb3J5IG1hbmFnZW1lbnQ6XG5cbioqQW5hbHl6aW5nIFBvaXNvbmVkIE1lbW9yeSBIYW5kbGluZyBpbiB0aGUgSHVnZVRMQiBhbmQgRmlsZW1hcCBDb250ZXh0cyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nIHdpdGhpbiB0aGUgSHVnZVRMQiBhbmQsIEkgc3VzcGVjdCwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgZmlsZW1hcCBzeXN0ZW0uIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYW5kIHRoZWlyIHNjb3BlLiBGaXJzdCwgSSBub3RpY2VkIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgYW5kIHVzZSBhcmUgcmVzdHJpY3RlZCB0byBpdHMgc291cmNlIGZpbGUuIFRoaXMgbGlrZWx5IG1lYW5zIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHNwZWNpZmljIEh1Z2VUTEIgbW9kdWxlLlxuXG5Db252ZXJzZWx5LCBJIHNlZSB0aGF0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBhcmUgKm5vdCogc3RhdGljLiBUaGF0IGltcGxpZXMgdGhleSBhcmUgZGVzaWduZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUsIGxpa2VseSBhcyBwYXJ0IG9mIGEgYnJvYWRlciBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIHBvaXNvbmVkIEh1Z2VUTEIgcGFnZXMuIFRoZXkncmUgcHJvYmFibHkgcGFydCBvZiB0aGUgY29yZSBwb2lzb25pbmcgbWVjaGFuaXNtcywgYW5kIHRoZXJlZm9yZSBuZWVkIHRvIGJlIGFjY2Vzc2libGUuIGB1bnBvaXNvbl9tZW1vcnlgIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggdGhlIGdlbmVyYWwgYWN0IG9mIGNsZWFyaW5nIG1lbW9yeS5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGFsbCBvZiB0aGlzIHRpZXMgdG9nZXRoZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgbW0vZmlsZW1hcC5jYCwgYmVjYXVzZSBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBmaWxlbWFwIHN1YnN5c3RlbSBsaXZlcy4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEknbSBnb2luZyB0byBsb29rIGF0IGhvdyB0aGF0IGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG9yIHV0aWxpemVzIHRoZSBvdGhlciBmdW5jdGlvbnMgSSd2ZSBleGFtaW5lZC4gSSBhbnRpY2lwYXRlIHNlZWluZyBpZiB0aGUgZmlsZW1hcCBzeXN0ZW0gaXMgaW52b2x2ZWQgaW4gcHJvcGFnYXRpbmcgb3IgcmVzcG9uZGluZyB0byBoYXJkd2FyZSBwb2lzb25pbmcgc2lnbmFscyB0aGF0IG9yaWdpbmF0ZSBpbiB0aGUgSHVnZVRMQiBjb250ZXh0LiBJJ20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGRpc3RpbmN0IG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjE3LjkzMTU5MjAyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyNTc1MDQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGp1c3RfcmFuZ2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTI3NDk9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzU1LVxcbm1tL2ZpbGVtYXAuYzoyNzU2OnN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxubW0vZmlsZW1hcC5jLTI3NTctXFx0XFx0c2l6ZV90IGJ5dGVzKVxcbi0tXFxubW0vZmlsZW1hcC5jPTI4MDQ9c3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjkwNy1cXG5tbS9maWxlbWFwLmM6MjkwODpcXHRcXHRcXHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbm1tL2ZpbGVtYXAuYy0yOTA5LVxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzc6MjMuMTU3MzQ5MzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTM0NzgzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiYCoqXG5cbkFscmlnaHQsIHNvIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIGFuZCBwcm9iYWJseSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhhdCBoZWxwcyBtZSBuYXJyb3cgZG93biB3aGVyZSB0byBsb29rIGZvciBpdHMgdXNhZ2UgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgY29kZS5cblxuTm93LCBsZXQncyBzZWUuLi4gdGhlIG1lbnRpb24gb2YgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIGh1Z2UgcGFnZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYmV0dGluZyB0aGF0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiBodWdldGxiZnMuIEEgcXVpY2sgbG9vayBhdCBgbW0vaHVnZXRsYi5jYCBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyOTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNzoyNi4xNzA4MzE4OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzcyMDIwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY2xlYXJfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02MTA9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2MTE6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTYxMi1cXHR7XFx0dm9pZCAqcHJpdmF0ZSA9IFxcdTAwMjZmb2xpby1cXHUwMDNlcHJpdmF0ZTtcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02Mjc9c3RhdGljIGlubGluZSB2b2lkXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjYyODpmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTYyOS1cXHR7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTg3Nj1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3OS0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgwOmV4dGVybiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgyOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgzLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMjQ3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTI2NS1cXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xcbm1tL2h1Z2V0bGIuYzoxMjY2OlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfZnJlZWQoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xMjY3LVxcdFxcdGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzNzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiLmMtMTM4My1cXG5tbS9odWdldGxiLmM6MTM4NDpzdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZXRsYi5jLTEzODUte1xcbi0tXFxubW0vaHVnZXRsYi5jLTEzOTAtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG5tbS9odWdldGxiLmM6MTM5MTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTM5Mi1cXG5tbS9odWdldGxiLmM6MTM5MzpcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xMzk0LX1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNDA0PXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDE4LVxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfZnJlZWQoZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jOjE0MTk6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE0MjAtXFx0XFx0aC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmMtMTQzMy1cXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxubW0vaHVnZXRsYi5jOjE0MzQ6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE0MzUtXFxuLS1cXG5tbS9odWdldGxiLmM9MTQ3MD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTUwNy1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNTA4OlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNTA5LVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTg2PXN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTYwMi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNjAzOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNjA0LVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjI3LVxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE2Mjg6XFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE2MjktXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE2Mzc9c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjYwLVxcdCAqIFdpdGhvdXQgSFZPIGVuYWJsZWQsIHJldCB3aWxsIGJlIDAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbFxcbm1tL2h1Z2V0bGIuYzoxNjYxOlxcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5Llxcbm1tL2h1Z2V0bGIuYy0xNjYyLVxcdCAqL1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2NjctXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXFx1MDAyNm5vbl9odm9fZm9saW9zLCBscnUpXFxubW0vaHVnZXRsYi5jOjE2Njg6XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE2NjktXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE2ODk9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzA4LVxcdHJlc3RvcmVfcmVzZXJ2ZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzoxNzA5OlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTcxMC1cXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzMwLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG5tbS9odWdldGxiLmM6MTczMTpcXHRmb2xpb19jbGVhcl9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNzMyLVxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2ZvbGlvKGhzdGF0ZV9pbmRleChoKSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1ODItXFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI1ODM6XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yNTg0LVxcdFxcdGVsc2UgaWYgKHJjKVxcbi0tXFxubW0vaHVnZXRsYi5jPTUxNDY9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUyODMtXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjUyODQ6XFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01Mjg1LVxcdFxcdFxcdGVsc2UgaWYgKHJjKVxcbi0tXFxubW0vaHVnZXRsYi5jPTU2MzM9aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTY0Ny1cXHR9XFxubW0vaHVnZXRsYi5jOjU2NDg6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01NjQ5LVxcbi0tXFxubW0vaHVnZXRsYi5jPTcxMzM9Ym9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTQzLVxcdH1cXG5tbS9odWdldGxiLmM6NzE0NDpcXHRmb2xpb19jbGVhcl9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy03MTQ1LVxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBsaXN0KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz03MTkwPXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MjExLVxcdFxcdGZvbGlvX3NldF9odWdldGxiX3RlbXBvcmFyeShvbGRfZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzo3MjEyOlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XFxubW0vaHVnZXRsYi5jLTcyMTMtXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTU9c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00MTktXFx0aWYgKCFyZXQpXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NDIwOlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTQyMS1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUyMj1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzctXFx0aWYgKHJldClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1Nzg6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTc5LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNC1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwMDU6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDA2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAxNT1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNTYtXFx0aWYgKGNvdW50X2luY3JlYXNlZCBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNTc6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNTgtXFx0XFx0Km1pZ3JhdGFibGVfY2xlYXJlZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwODM9c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTIwLVxcdGlmIChod3BvaXNvbl9maWx0ZXIocCkpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxMjE6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTIyLVxcdFxcdGlmIChtaWdyYXRhYmxlX2NsZWFyZWQpXFxuLS1cXG5tbS9ybWFwLmM9MzE1Mz12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0zMTYxLVxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbGFyZ2VfbWFwY291bnQsIDApO1xcbm1tL3JtYXAuYzozMTYyOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9ybWFwLmMtMzE2My1cXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNzozMS42MDgwNDM2NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2MDYzODU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZVRMQiBhbmQgTWVtb3J5IFBvaXNvbmluZyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBIdWdlVExCIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwb2lzb25pbmcgYW5kIEkndmUgZ290IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSd2ZSBub3RlZCB0aGF0IGBmb2xpb19jbGVhcl9odWdldGxiYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGlzbid0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbHMgdG8gZXN0YWJsaXNoIHRoZSBjYWxsIGNoYWluLiBJJ20gZm9jdXNpbmcgb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIC0gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gSSdtIGFsc28gbG9va2luZyBhdCBgbW0vZmlsZW1hcC5jYCB0byBzZWUgaWYgYGZpbGVtYXBfcmVhZGAgaXMgY2FsbGVkLCBhbmQgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYnV0IG9ubHkgbm90aW5nIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgYGh1Z2V0bGJmc19nZXRfaW5vZGVgIGJlaW5nIHN0YXRpYy4gSSBhbHNvIG5vdGUgdGhhdCBgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uc2AgdXNlcyBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHJlYWxseSBzdGFuZCBvdXQgYW5kIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFyZSBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLlxuXG5MZXQncyBzZWUgaWYgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAgaXMgYWNjZXNzaWJsZS4gQWhhISBJdCdzIGNhbGxlZCBmcm9tIGBpc19yZWZfcGFnZV9od3BvaXNvbmAgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgbW0vZmlsZW1hcC5jYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgZmlsZW1hcF9yZWFkYC4gVGhhdCdzIGEgc29saWQgY2FsbCBjaGFpbjsgYGZpbGVtYXBfcmVhZGAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbmBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gIGxvb2tzIGdvb2QuIEkgZm91bmQgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBpc19wYWdlX2h3cG9pc29uYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLiBUaGF0J3MgdGhlbiBjYWxsZWQgYnkgYHVucG9pc29uX21lbW9yeWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLlxuXG5Pa2F5LCBJJ20gY2hlY2tpbmcgYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiBgdW5wb2lzb25fbWVtb3J5YCBpcyBleHBvcnRlZCBvciBub3QuIFllcywgaXQgaXMgZXhwb3J0ZWQuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbkxhc3RseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGNoZWNraW5nIGBtbS9ybWFwLmNgIGZvciBgdHR1X2NyZWF0ZV9od3BvaXNvbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjM3LjQ2ODY4NTY4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNjY4MDk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dHVfY3JlYXRlX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTE5ODYtICovXFxubW0vcm1hcC5jOjE5ODc6c3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0xOTg4LVxcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYz0yMDAwPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjIxNS1cXG5tbS9ybWFwLmM6MjIxNjpcXHRcXHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgZmxhZ3MpKSB7XFxubW0vcm1hcC5jLTIyMTctXFx0XFx0XFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcXG4tLVxcbm1tL3JtYXAuYz0yNDI4PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNjE4LVxcbm1tL3JtYXAuYzoyNjE5OlxcdFxcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XFxubW0vcm1hcC5jLTI2MjAtXFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzc6NDIuMzk1MzcyOTYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTkzODI2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIYXJkd2FyZSBQb2lzb25pbmcgd2l0aGluIHRoZSBIdWdlIFBhZ2VzIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBgdHR1X2NyZWF0ZV9od3BvaXNvbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBNeSBtaW5kIGp1bXBzIHRvIHdoZXJlIGl0IG1pZ2h0IGJlIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGhhcmR3YXJlIHBvaXNvbmluZywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLCBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gbG9va2luZyBmb3IgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLiBIdWdlIHBhZ2VzIGFyZSBhIGxpa2VseSB0YXJnZXQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZXJyb3IgZGV0ZWN0aW9uLCBzbyB0aGF0IGZ1bmN0aW9uIG5hbWUgaXMgYSBrZXkgbGVhZC4gSSdtIGVzc2VudGlhbGx5IHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIGhhcmR3YXJlIHBvaXNvbiBjb25kaXRpb24gdG8gdGhlIGxvZ2ljIHRoYXQgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBpdCB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHdoZW4gYSBoYXJkd2FyZSBlcnJvciBhZmZlY3RzIGEgaHVnZSBwYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjcyOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjQ1LjU1NDc1ODg2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDA0MTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTg5Mz1URVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwMS0gKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjkwMjogKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtOTAzLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMTE5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEyOC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTI5OnN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzMC17XFxuLS1cXG5tbS9maWxlbWFwLmM9MjQ2ND1zdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI0ODUtXFx0XFx0XFx0YnJlYWs7XFxubW0vZmlsZW1hcC5jOjI0ODY6XFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0yNDg3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI3NTY9c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzYxLVxcbm1tL2ZpbGVtYXAuYzoyNzYyOlxcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxubW0vZmlsZW1hcC5jLTI3NjMtXFx0XFx0cmV0dXJuIGJ5dGVzO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDA4PXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNS1cXG5tbS9odWdlX21lbW9yeS5jOjQ0MTY6XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3OTM9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTgxNjpcXHRcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4MTctXFx0XFx0XFx0LypcXG4tLVxcbm1tL3JtYXAuYz0yMDAwPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjEzNS1cXHRcXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjEzNjpcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxcbm1tL3JtYXAuYy0yMTM3LVxcdFxcdFxcdFxcdFxcdGZvbGlvKTtcXG4tLVxcbm1tL3NobWVtLmM9MzIxNj1zaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy0zMjQyLVxcbm1tL3NobWVtLmM6MzI0MzpcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS9zaG1lbS5jLTMyNDQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTA4OC1cXG5tbS92bXNjYW4uYzoxMDg5OlxcdFxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTEwOTAtXFx0XFx0XFx0LypcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NzU0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Nzc3OlxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjQ5Ljk0ODgxMjUxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0NzI2NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEhhcmR3YXJlIFBvaXNvbmluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBoYXJkd2FyZSBwb2lzb25pbmcgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUuIFRoZSBjb3JlIGNvbmNlcm4sIGFzIEkgc2VlIGl0LCByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLCBgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZWAsIGBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmVgIGFuZCBgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2VgIGFyZSBzdGF0aWMgaW5saW5lLCBzbyB0aGV5IGRvbid0IHNlZW0gdG8gYmUgd2hlcmUgdGhlIHByaW1hcnkgbG9naWMgaXMgbG9jYXRlZC4gVGhhdCBzdHJlYW1saW5lcyB0aGUgaW52ZXN0aWdhdGlvbiBzaWduaWZpY2FudGx5OyBJIGNhbiBjb25jZW50cmF0ZSBvbiB0aG9zZSBmb3VyLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbnMgcGxheSBpbnRvIHRoaXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5nc+KAlHNwZWNpZmljYWxseSwgYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTEFSR0VfRk9MSU9g4oCTIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3VyIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGBtbS9LY29uZmlnYCB0byBkZXRlcm1pbmUgaG93IGBMQVJHRV9GT0xJT2AgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlnIG9wdGlvbnMgd2lsbCBiZSBjcml0aWNhbCB0byBkZXRlcm1pbmUgdW5kZXIgd2hhdCBzaXR1YXRpb25zIHRoaXMgcG9pc29uL3VucG9pc29uIGxvZ2ljIGlzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDI3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjU0LjQ5MzU0MTk2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwOTg0NDg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0Njpjb25maWcgTEFSR0VfRk9MSU9cXG5tbS9LY29uZmlnLTg0Ny1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjU5LjUwMzQwMjg0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIzNzAwMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtjb25maWcgTXVzaW5ncyoqXG5cbk9rYXksIHNvIGBMQVJHRV9GT0xJT2AgaXMgYSBkZXBlbmRlbmN5LCBhIGBkZWZfYm9vbGAsIGFuZCBpdCdzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGBIVUdFVExCX1BBR0VgIG9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHNlbGVjdGVkLiBUaGF0IG1lYW5zIEkgZG9uJ3QgbmVlZCB0byBnbyBvdXQgb2YgbXkgd2F5IHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LiBJdCdzIHJlYWxseSBtb3JlIG9mIGFuIGludGVybmFsIGRldGFpbC4gU3RpbGwsIGl0J3MgZ29vZCBwcmFjdGljZSB0byBub3RlIGl0LCBqdXN0IGZvciBjbGFyaXR5J3Mgc2FrZS5cblxuQnV0LCB0aGlua2luZyBhYm91dCB3aGF0IHJlYWxseSAqZHJpdmVzKiBpdHMgaW5jbHVzaW9uLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBwbGF5ZXJzIGhlcmUuIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGFyZSB0aGUgaW1wb3J0YW50IG9uZXMgdGhhdCB0cmlnZ2VyIGl0LiBJIHNob3VsZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgaXMgc29saWQuXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGlucyBhbmQgb3V0cyBvZiBgSFVHRVRMQkZTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODowMy4zMjcxMDYzODNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjA2NTExNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODowNy42ODc3NjM4ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzOTc1MzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgTGludXgga2VybmVsIGRldmVsb3BlcjpcblxuKipEZWx2aW5nIGludG8gdGhlIEhVR0VUTEJGUyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBIVUdFVExCRlNgLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGxpc3RlZCBpbiBgZnMvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBoaW5nZSBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyB0aW1lIHRvIGNyYWNrIG9wZW4gYGZzL0tjb25maWdgIGFuZCB0cmFjZSB0aHJvdWdoIHRoZSBsb2dpYy4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBgSFVHRVRMQkZTYCB0byBldmVuIGJlIGNvbnNpZGVyZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgZGVjaXNpb25zIGxhdGVyLCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gd29ya2luZyBvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODoxMC44Mjc1MjE4MTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM4OjEwLjgyNzcyMzk2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg1OTczMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERlcGVuZGVuY2llcyBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gSXQncyBjbGVhciB0aGF0IGBIVUdFVExCRlNgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIHRoYXQncyBhIGdpdmVuLiBBbmQgYE1FTU9SWV9GQUlMVVJFYCwgc2ltaWxhcmx5LCBpcyB0aWVkIHRvIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gTWFrZXMgc2Vuc2U7IHdlIGNhbid0IGVuYWJsZSB0aG9zZSBmZWF0dXJlcyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLiBTbywgdGhlIGNvcmUgY29uZmlncyBpbiBwbGF5IGhlcmUgYXJlIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhpcy4gSSd2ZSBnb3QgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNyaXRpY2FsIHBpZWNlcyBkZWFsaW5nIHdpdGggaGFyZHdhcmUgcG9pc29uaW5nIGluIHRoZSBodWdldGxiIGNvbnRleHQuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAg4oCTIEkgbmVlZCB0byBlbnN1cmUgaXQncyBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSB3aGVyZSBpdCdzIG5lZWRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBpdHMgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTI3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzg6MTQuNDEzNzAxNTIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk2MzAwMTM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipodWdldGxiX3BhZ2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM4OjIwLjExMDAxNTE5OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ3MDM0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IEZhaWx1cmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmFpbHVyZSBpc24ndCBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyBJJ3ZlICpleHBsaWNpdGx5KiBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBlbGltaW5hdGVzIGEgd2hvbGUgY2xhc3Mgb2YgZWFzaWx5LWRlYnVnZ2VkIGV4dGVybmFsIGNhdXNlcy4gQnV0IGl0J3MgYWxzbyBub3QgYSBzdGF0aWNhbGx5LWRlZmluZWQgdGhpbmcsIG1lYW5pbmcgaXQncyBsaWtlbHkgcGFydCBvZiBzb21lIGR5bmFtaWMgcHJvY2Vzcy4gVGhhdCdzIGEgYml0IG1vcmUgaW52b2x2ZWQsIGJ1dCBtYW5hZ2VhYmxlLiBUaGUgY2x1ZSBpcyB0aGF0IGl0J3MgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0IGdpdmVzIG1lIGEgdmVyeSBmb2N1c2VkIGFyZWEgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTm93LCBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiAnbWVtb3J5LWZhaWx1cmUnLCBJIHNob3VsZCB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgYHVucG9pc29uX21lbW9yeWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NDUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODoyMy4xNTcwNTM2MjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDQ0MDcwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdW5wb2lzb25fbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttc2FuL2hvb2tzLmM9Mzk4PXZvaWQga21zYW5fdW5wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKVxcbi0tXFxubW0va21zYW4vaG9va3MuYy00MTAtfVxcbm1tL2ttc2FuL2hvb2tzLmM6NDExOkVYUE9SVF9TWU1CT0woa21zYW5fdW5wb2lzb25fbWVtb3J5KTtcXG5tbS9rbXNhbi9ob29rcy5jLTQxMi1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjczMD1pbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODQwLX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4NDE6RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzg6MjguNjYxNDcxMDcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2ODkwNzY2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlZlcmlmeWluZyBNZW1vcnkgVW5wb2lzb25pbmcgRnVuY3Rpb25hbGl0eSoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZC4gVGhlIGB1bnBvaXNvbl9tZW1vcnlgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCB3aGF0IEkgZXhwZWN0ZWQuIE5vdywgdG8gZGlnIGRlZXBlciwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIHRoYXQgY2xlYXJzIGhhcmR3YXJlLXBvaXNvbmVkIGh1Z2UgcGFnZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgZXJyb3JzIGFuZCwgY3JpdGljYWxseSwgaG93IGl0IGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSB0aGVtLCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzUxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzg6MzEuMzUwNTUxMzg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQwMjk5OTc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODozNy41OTA4NjAxMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ3NjI1NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqUmVmbGVjdGluZyBvbiB0aGUgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5TbywgdGhpcyBpc24ndCBhIHNpbXBsZSBzdGF0aWMgdXBkYXRlLCBidXQgcmF0aGVyIHNvbWV0aGluZyBtb3JlIGR5bmFtaWMsIHNvbWV0aGluZyB0aGF0J3MgYmVpbmcgYWN0aXZlbHkgKm1hbmFnZWQqIGludGVybmFsbHkuIEknbSBwbGVhc2VkIHdpdGggdGhlIGRpcmVjdGlvbiwgcGFydGljdWxhcmx5IHRoZSBlbXBoYXNpcyBvbiB0aGUgZm9jdXMgZnVuY3Rpb25zLiBUaGV5IHNlZW0gd2VsbC1kZXNpZ25lZC4gVGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQsIGltcG9ydGFudGx5LCB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5UaGUgY3J1eCBvZiB0aGlzIGlzIGhvdyB3ZSdyZSBhZGFwdGluZyB0aGUgaGFyZHdhcmUgcG9pc29uIGhhbmRsaW5nIGZvciB0aGVzZSBsYXJnZXIgbWVtb3J5IHN0cnVjdHVyZXM6IGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBUaGlzIHBhdGNoIHJlYWxseSBkaWdzIGludG8gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBwYWdlcyB3aGVuIHdlJ3JlIHJlYWRpbmcgdGhlbSB0aHJvdWdoIGBmaWxlbWFwX3JlYWRgIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgYXJlIHByb3Blcmx5IHVucG9pc29uaW5nIHRoZW0uIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIGVzcGVjaWFsbHkgd2l0aCB0aGUgaW5jcmVhc2VkIHVzZSBvZiBsYXJnZSBwYWdlcyB0aGVzZSBkYXlzLlxuXG5JIHRoaW5rICdzZXQtcmVzdWx0cycgaXMgdGhlIHJpZ2h0IG5leHQgbG9naWNhbCBzdGVwLiBJdCBzZWVtcyBsaWtlIHRoaXMgd291bGQgYmUgdGhlIG5hdHVyYWwgZnVuY3Rpb24gY2FsbCB0byBtYWtlIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTY4LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM4OjQ0LjA2NzExOTc2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTI5NjY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy4gSXQgbW9kaWZpZXMgYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgZm9saW9zIGFuZCB1cGRhdGVzIG1lbW9yeSBmYWlsdXJlIHJlY292ZXJ5IGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgTU0gYW5kIGh1Z2V0bGJmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy4gSXQgbW9kaWZpZXMgYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgZm9saW9zIGFuZCB1cGRhdGVzIG1lbW9yeSBmYWlsdXJlIHJlY292ZXJ5IGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgTU0gYW5kIGh1Z2V0bGJmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtjz4s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 02:14:29 +0000 UTC FinishedAt: 2026-07-30 02:38:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "974d0be0cb8e48d63b9d413a2e1a8fba16cd2583", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "974d0be0cb8e48d63b9d413a2e1a8fba16cd2583", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "9c58ed79-0cb6-4eeb-8005-ffe3be812d70" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hugetlb_page_hwpoison", "hugetlb_unref_page_hwpoison", "unpoison_memory", "folio_clear_hugetlb_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93", "a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c", "2406d176-ea76-40a8-b6bc-41d3e6326388" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHdwb2lzb24gaXMgaGFuZGxlZCBmb3IgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMuIEl0IG1vZGlmaWVzIGBmaWxlbWFwX3JlYWRgIHRvIGhhbmRsZSBod3BvaXNvbmVkIGZvbGlvcyBhbmQgdXBkYXRlcyBtZW1vcnkgZmFpbHVyZSByZWNvdmVyeSBsb2dpYy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIE1NIGFuZCBodWdldGxiZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDMyMGRkYzFmYTg2ZjEyODViNTdlZmJhZDc0MWIzMGY1MTg5YTM3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjM2OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBjZjZhZTY0Nzc2ZTYyLi5lZGRhYzRlZDIxNGIxIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvS2NvbmZpZ1xuQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFXG4gXHRkZWZfYm9vbCBIVUdFVExCRlNcbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjNDM7XHRzZWxlY3QgTEFSR0VfRk9MSU9cbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiBcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDIxNmUxYTBkZDBiMjMuLmNlZjdlNjFiODI3ZDcgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlJiM0MzsmIzQzOztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgJiM0Mzs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICYjNDM7PSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCAmIzQzOz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiAmIzQzOzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuJiM0MztcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEh1Z2V0bGJmcyBpcyBub3QgcmVjbGFpbWFibGU7IHRoZXJlZm9yZSBpdHMgaV9tbWFwX3J3c2VtIHdpbGwgbmV2ZXJcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cbkBAIC05MjYsOCAmIzQzOzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuJiM0MztcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGRElSOlxuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5AQCAtMTIwNiw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQucmVhZF9pdGVyXHRcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcbiYjNDM7XHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MC4uMTg3ODY0MmU3NWVjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5AQCAtMjkyLDggJiM0MzsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNTk1LDggJiM0Mzs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbi1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuJiM0Mztib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiYjNDM7XHR7XHRjb25zdCB2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiBcdFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XHRcdFxcXG4gXHR9XG4gXG5AQCAtNjE2LDcgJiM0Mzs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiAjZWxzZVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuLWZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyAmIzQzOzcyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnN1YnBvb2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc3Bvb2w7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcbiB9XG5AQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG4gXHRyZXR1cm4gc2l6ZV90b19oc3RhdGUoZm9saW9fc2l6ZShmb2xpbykpO1xuQEAgLTEwNzAsMTEgJiM0MzsxMDY5LDYgQEAgdm9pZCBodWdldGxiX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuICNlbmRpZlxuIFxuLS8qXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cbi0gKi9cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbi1cbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0cmV0dXJuIFBBR0VfTUFTSyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcbkBAIC0xMDg4LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzYuLjg2YTJkMGZlZTU1N2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXG4mIzQzOyAqIEBodWdldGxiX2h3cG9pc29uOiBMaXN0IG9mIHBhZ2VzIHdpdGggaHdwb2lzb24uXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuJiM0MztcdFx0XHRzdHJ1Y3QgaHdwX3BhZ2UgKmh1Z2V0bGJfaHdwb2lzb247XG4gXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cbiBcdFx0fTtcbiBcdFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggNzIyM2Y2ZjRlMmI0MC4uMDdjYzc4NTRiMmRlMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTg5MywxNCAmIzQzOzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBURVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcbiAjZW5kaWZcbiBcbi0jaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pXG4gLypcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuLSAqIGNvbXBvdW5kIHBhZ2UuXG4mIzQzOyAqIGZvbGlvX2hhc19od3BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG4mIzQzOyAqIGZvbGlvLiAgVGhhdCBwYWdlIHdpbGwgdXN1YWxseSBhbHNvIGhhdmUgdGhlIEhXUG9pc29uIGZsYWcgc2V0LCBidXQgdGhpc1xuJiM0MzsgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGVcbiYjNDM7ICogc2NoZW1lIHVzZWQgaW4gdGhhdCBjYXNlKS4gIFlvdSBwcm9iYWJseSBkb24mIzM5O3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XG4mIzQzOyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cbiAgKlxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cbiAgKi9cbiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbiYjNDM7Rk9MSU9fVEVTVF9TRVRfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4mIzQzO0ZPTElPX1RFU1RfQ0xFQVJfRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXG4gI2Vsc2VcbiBGT0xJT19GTEFHX0ZBTFNFKGhhc19od3BvaXNvbmVkKVxuICNlbmRpZlxuQEAgLTEwNDEsOCAmIzQzOzEwNDYsMjkgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoUkVBRF9PTkNFKGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlKSBcdTAwM2VcdTAwM2UgMjMpID09XG4mIzQzO1x0XHQoKFBHVFlfaHVnZXRsYiBcdTAwM2NcdTAwM2MgMSkgfCAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Zm9saW8tXHUwMDNlcGFnZS5wYWdlX3R5cGUgfD0gKDEgXHUwMDNjXHUwMDNjIDIzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgMjMpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcbiYjNDM7I2VuZGlmXG4gI2Vsc2VcbiBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcbiYjNDM7Rk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxuICNlbmRpZlxuIFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcbkBAIC0xMDY4LDEwICYjNDM7MTA5NCwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuJiM0Mztib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIC8qXG4tICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcbi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG4tICogZmFpbGluZyBoYXJkd2FyZS5cbiYjNDM7ICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gIFRoaXMgY2hlY2sgaXMgYmVzdFxuJiM0MzsgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuJiM0MzsgKiBmYWlsaW5nIGhhcmR3YXJlLiAgVGhlIGNhbGxlciBtYXkgbm90IGhhdmUgYSByZWZjb3VudCBvbiB0aGUgZm9saW9cbiYjNDM7ICogY29udGFpbmluZyB0aGUgcGFnZSwgc28gd2UgbXVzdCBiZSBjYXJlZnVsIHRvIG5vdCB0cmlwIGFueSBhc3NlcnRpb25zLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbkBAIC0xMDgwLDEzICYjNDM7MTExMCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpO1xuJiM0MztcdC8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqL1xuJiM0MztcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuLVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuJiM0MztcdHJldHVybiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkgfHxcbiYjNDM7XHQgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4gfVxuIFxuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAyYzM3MThkNTkyZDZkLi4yMmQ0ODkzNWZmZGE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJiMzOTt0XG4gXHRcdFx0XHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xuJiM0MztcdEFTX0FVVEhPUklUQVRJVkUgPSAxMSxcdC8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgJiM0MzszNDYsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfd3JpdGViYWNrX21heV9kZWFkbG9ja19vbl9yZWNsYWltKGNvbnN0IHN0cnVjdCBhZGRyZXNcbiBcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHRyZXR1cm4gbWFwcGluZy1cdTAwM2VnZnBfbWFzaztcbkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQmIzM5O3MgMU1CIGlmIHlvdSYjMzk7cmUgdXNpbmcgNGtCIHBhZ2VzKVxuICAqL1xuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMVUgXHUwMDNjXHUwMDNjIChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICYjNDM7NDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4mIzQzOyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXG4mIzQzOyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxuJiM0MzsgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiAgKiBEbyBub3QgdHVuZSBpdCBiYXNlZCBvbiwgZWcsIGlfc2l6ZS5cbiAgKlxuJiM0MzsgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbiYjNDM7ICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcbiAgKiBpcyBub24tYXRvbWljLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1pbixcbi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IG1heClcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XG4gfVxuQEAgLTUyNCw3ICYjNDM7NTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NC4uZTY2NmRkMTRjYTBjMyAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC04NDMsMTEgJiM0Mzs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gY29uZmlnIE1NX0lEXG4gXHRkZWZfYm9vbCBuXG4gXG4mIzQzO2NvbmZpZyBMQVJHRV9GT0xJT1xuJiM0MztcdGRlZl9ib29sIG5cbiYjNDM7XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzQzO1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuLVx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQuLjVhOGNjMjBlNjI0ZTQgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTI0ODMsNiAmIzQzOzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIFx0XHRpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXG5AQCAtMjY5NSw2ICYjNDM7MjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4gXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHtcbiBcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgXHUwMDI2ZmlscC1cdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XG4gXG4mIzQzO1x0XHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9JTylcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuQEAgLTI3NDksNiAmIzQzOzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAocG9zMSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbiYjNDM7XHRcdHNpemVfdCBieXRlcylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbiYjNDM7XHRzaXplX3Qgc2FmZV9ieXRlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBieXRlcztcbiYjNDM7XHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbiYjNDM7XHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4mIzQzO1x0cGFnZSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuJiM0MztcdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5AQCAtMjgyOCw2ICYjNDM7Mjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpdGVyLVx1MDAzZWNvdW50KTtcbiBcbiYjNDM7XHRcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKSkge1xuJiM0MztcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuJiM0MztcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IChmc2l6ZSAtIDEpO1xuJiM0MztcdFx0XHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuJiM0MztcdFx0XHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiM0MztcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XG4gXHRcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XG5AQCAtMjg2MiwxNCAmIzQzOzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbiYjNDM7XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuJiM0MztcdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcbiBcbiBcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiBcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYuLjM1MzM0MDMwOTEwNzQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRpZiAocGluIFx1MDAyNlx1MDAyNiAhZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSlcbkBAIC0xMzgxLDYgJiM0MzsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcbiB9XG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxuJiM0MztcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4mIzQzO1x0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFJlbW92ZSBodWdldGxiIGZvbGlvIGZyb20gbGlzdHMuXG4gICogSWYgdm1lbW1hcCBleGlzdHMgZm9yIHRoZSBmb2xpbywgY2xlYXIgdGhlIGh1Z2V0bGIgZmxhZyBzbyB0aGF0IHRoZVxuQEAgLTE0MTksNyAmIzQzOzE0MzEsNyBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHQgKiB0byB0YWlsIHN0cnVjdCBwYWdlcy5cbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuLVx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXG4gXHRoLVx1MDAzZW5yX2h1Z2VfcGFnZXMtLTtcbiBcdGgtXHUwMDNlbnJfaHVnZV9wYWdlc19ub2RlW25pZF0tLTtcbkBAIC0xNDkzLDE3ICYjNDM7MTUwNSwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSlcbi1cdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4tXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxuIFx0XHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XG5AQCAtMTU5NSw3ICYjNDM7MTYwMCw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdF9mb2xpbywgbm9uX2h2b19mb2xpb3MsIGxydSkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTYyMCw3ICYjNDM7MTYyNSw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdFx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xuIFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTY1MywxNCAmIzQzOzE2NTgsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqIHNob3VsZCBvbmx5IGJlIHBhZ2VzIG9uIHRoZSBub25faHZvX2ZvbGlvcyBsaXN0LlxuIFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxuIFx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG4tXHQgKiBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuJiM0MztcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuIFx0ICovXG4gXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcbiBcdFZNX1dBUk5fT04ocmV0IFx1MDAzYyAwKTtcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZub25faHZvX2ZvbGlvcykgXHUwMDI2XHUwMDI2IHJldCkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFx1MDAyNm5vbl9odm9fZm9saW9zLCBscnUpXG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuQEAgLTE3NzUsNyAmIzQzOzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XG4gXG5AQCAtMzk5OCw3ICYjNDM7NDAwMyw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuJiM0MztcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0ICogZG9uJiMzOTt0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cbiBcdFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXG4gXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgJiM0Mzs2MzIzLDcgQEAgaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbiBcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgZHN0X21tLCBkc3RfcHRlKTtcbiBcbiBcdHJldCA9IC1FSU87XG4tXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbiBcbiBcdHJldCA9IC1FRVhJU1Q7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDUxNTA4YTU1YzQwNTUuLmFiMjA5NGVkMzIwY2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTgwOCw2MyAmIzQzOzE4MDgsODkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXG4mIzQzOy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTtcbiYjNDM7XG4gLypcbi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCYjMzQ7cmF3IGVycm9yIHBhZ2VcJiMzNDssXG4tICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cbiYjNDM7ICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcJiMzNDtlcnJvciBwYWdlXCYjMzQ7LFxuJiM0MzsgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cbiAgKi9cbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4mIzQzO3N0cnVjdCBod3BfcGFnZSB7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpuZXh0O1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcdTAwMjZmb2xpby1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbjtcbi19XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGh3cF9wYWdlICpwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbi1cdFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXG4gXHQvKlxuLVx0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXNcbi1cdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiYjNDM7XHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBwYWdlc1xuJiM0MztcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiBcdCAqL1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuLVxuLVx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4tXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSkge1xuLVx0XHRcdHJldCA9IHRydWU7XG4mIzQzO1x0Zm9yIChwID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtXHUwMDNlbmV4dCkge1xuJiM0MztcdFx0aWYgKHBhZ2UgPT0gcC1cdTAwM2VwYWdlKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuJiM0MztcdHJldHVybiBwICE9IE5VTEw7XG4mIzQzO31cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uXG4mIzQzOyAqL1xuJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuXG4mIzQzOyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4mIzQzO1x0aWYgKCFmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSkge1xuJiM0MztcdFx0cmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpwLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuIFxuLVx0aGVhZCA9IGxsaXN0X2RlbF9hbGwocmF3X2h3cF9saXN0X2hlYWQoZm9saW8pKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xuJiM0MztcdG5leHQgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uO1xuJiM0MztcdGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBOVUxMO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobmV4dCkge1xuJiM0MztcdFx0cCA9IG5leHQ7XG4mIzQzO1x0XHRuZXh0ID0gcC1cdTAwM2VuZXh0O1xuIFx0XHRpZiAobW92ZV9mbGFnKVxuIFx0XHRcdFNldFBhZ2VIV1BvaXNvbihwLVx1MDAzZXBhZ2UpO1xuIFx0XHRlbHNlXG5AQCAtMTg4MSwzNCAmIzQzOzE5MDcsNTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORURcdDNcdC8qIGZvbGlvIGFscmVhZHkgcG9pc29uZWQgKi9cbiAjZGVmaW5lXHRNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEXHQ0XHQvKiBleGFjdCBwYWdlIGFscmVhZHkgcG9pc29uZWQgKi9cbiAjZGVmaW5lXHRNRl9IVUdFVExCX1JFVFJZXHRcdDVcdC8qIGh1Z2VwYWdlIGlzIGJ1c3ksIHJldHJ5ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBodWdldGxiX3NldF9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4mIzQzO1x0Zm9saW9fc2V0X2h1Z2VfcG9pc29uKGZvbGlvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdGZvbGlvX2NsZWFyX2h1Z2VfcG9pc29uKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBTZXQgaHVnZXRsYiBmb2xpbyBhcyBod3BvaXNvbmVkLCB1cGRhdGUgZm9saW8gcHJpdmF0ZSByYXcgaHdwb2lzb24gbGlzdFxuICAqIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBvaXNvbmVkIHBhZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdGludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IHJldCA9IGh1Z2V0bGJfc2V0X3BvaXNvbihmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogT25jZSB0aGUgaHdwb2lzb24gaHVnZXBhZ2UgaGFzIGxvc3QgcmVsaWFibGUgcmF3IGVycm9yIGluZm8sXG4tXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXG4tXHQgKiBzbyBza2lwIHRvIGFkZCBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuJiM0MztcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbiYjNDM7XHQgKiBzbyBza2lwIGFkZGluZyBhZGRpdGlvbmFsIHJhdyBlcnJvciBpbmZvLlxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbi1cdGhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4gXHRcdGlmIChwLVx1MDAzZXBhZ2UgPT0gcGFnZSlcbi1cdFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7XG4tXHRpZiAocmF3X2h3cCkge1xuLVx0XHRyYXdfaHdwLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBoZWFkKTtcbiYjNDM7XHRpZiAocCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKHApIHtcbiYjNDM7XHRcdHAtXHUwMDNlcGFnZSA9IHBhZ2U7XG4mIzQzO1x0XHRwLVx1MDAzZW5leHQgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uO1xuJiM0MztcdFx0Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IHA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcbkBAIC0xOTE3LDE2ICYjNDM7MTk2NywyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQgKi9cbiBcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTtcbiBcdFx0Lypcbi1cdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcbiYjNDM7XHRcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCBod3BfcGFnZSBpcyBub3RcbiBcdFx0ICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC5cbiBcdFx0ICovXG4gXHRcdF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY291bnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4gXHQvKlxuIFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XG4gXHQgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJiMzOTt0IGV4aXN0LlxuQEAgLTE5NDEsNyAmIzQzOzE5OTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0Y291bnQgPSBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuIH1cbiBcbiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0xOTUwLDggJiM0MzsyMDA4LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XG4gXHRmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpO1xuJiM0MztcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuQEAgLTIxMDQsNiAmIzQzOzIxNjIsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4gI2VuZGlmXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4gXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXG5AQCAtMjY5NSw4ICYjNDM7Mjc1OCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuIFxuLVx0aWYgKCFQYWdlSFdQb2lzb24ocCkpIHtcbi1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cJiMzNDssXG4mIzQzO1x0aWYgKCFpc19wYWdlX2h3cG9pc29uKHApKSB7XG4mIzQzO1x0XHR1bnBvaXNvbl9wcl9pbmZvKFwmIzM0OyUjbHg6IHBhZ2UgaXMgbm90IHBvaXNvbmVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbkBAIC0yNzI1LDEzICYjNDM7Mjc4OCwxOSBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFxuIFx0Z2hwID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgTUZfVU5QT0lTT04pO1xuIFx0aWYgKCFnaHApIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0XHRodWdlID0gdHJ1ZTtcbiBcdFx0XHRjb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xuLVx0XHRcdGlmIChjb3VudCA9PSAwKVxuJiM0MztcdFx0XHRpZiAoY291bnQgPT0gMCkge1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gVGVzdENsZWFyUGFnZUhXUG9pc29uKHApID8gMCA6IC1FQlVTWTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBmb2xpb190ZXN0X2NsZWFyX2h3cG9pc29uKGZvbGlvKSA/IDAgOiAtRUJVU1k7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH0gZWxzZSBpZiAoZ2hwIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChnaHAgPT0gLUVIV1BPSVNPTikge1xuIFx0XHRcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xuQEAgLTI3NDAsMTYgJiM0MzsyODA5LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBmYWlsZWQgdG8gZ3JhYiBwYWdlXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgcGZuLCBcdTAwMjZ1bnBvaXNvbl9ycyk7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tXHRcdFx0aHVnZSA9IHRydWU7XG4tXHRcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRpZiAoY291bnQgPT0gMCkge1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0XHRcdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdGh1Z2UgPSB0cnVlO1xuJiM0MztcdFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChjb3VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0aWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzIuLjMzMDA3ZThlNTQ2YTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5AQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbm5vdCBoYW5kbGUgbGFyZ2UgZm9saW9zXG4gXHRcdFx0ICogaW4gYWxsIGNhc2VzIHlldC5cbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWYuLmZkMTlhMGJmYmZlNzYgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTE5NzgsNiAmIzQzOzE5NzgsMjIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaW5jZSB3ZSBjYW5ub3Qgc3BsaXQgYSBodWdldGxiIGZvbGlvLCB3ZSB3YW50IHRvIGluc2VydCBhIHBvaXNvblxuJiM0MzsgKiBlbnRyeSBpbnRvIHRoZSBwYWdlIHRhYmxlIGZvciB0aGUgd2hvbGUgZm9saW8gZXZlbiBpZiBvbmx5IG9uZSBwYWdlXG4mIzQzOyAqIGlzIHBvaXNvbmVkLiAgT3RoZXJ3aXNlLCB3ZSYjMzk7dmUgc3BsaXQgZG93biB0byB0aGUgUFRFIGxldmVsIGFuZCB3ZSBvbmx5XG4mIzQzOyAqIHdhbnQgdG8gcG9pc29uIHRoZSBwcmVjaXNlIHBhZ2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICghKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuJiM0MztcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBAYXJnOiBlbnVtIHR0dV9mbGFncyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzIGFyZ3VtZW50XG4gICovXG5AQCAtMTk5Myw3ICYjNDM7MjAwOSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSwgZW5kX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcbiBcdGludCBwdGVzID0gMDtcbiBcbiBcdC8qXG5AQCAtMjAyMyw5ICYjNDM7MjAzOCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuQEAgLTIxMjEsNyAmIzQzOzIxMzMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgcGFnZVxuIFx0XHRcdCAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuXG4gXHRcdFx0ICovXG4tXHRcdFx0Vk1fQlVHX09OX1BBR0UoIVBhZ2VIV1BvaXNvbihzdWJwYWdlKSwgc3VicGFnZSk7XG4mIzQzO1x0XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbyksXG4mIzQzO1x0XHRcdFx0XHRmb2xpbyk7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXG4gXHRcdFx0ICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heVxuQEAgLTIyMDAsMTIgJiM0MzsyMjEzLDEyIEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuJiM0MztcdFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIGZsYWdzKSkge1xuIFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0XHRcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xuIFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4mIzQzO1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuQEAgLTI0MjMsNyAmIzQzOzI0MzYsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXG4gXHQvKlxuIFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcbkBAIC0yNDUyLDkgJiM0MzsyNDY0LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKi9cbiBcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG4gXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyYW5nZS5lbmQpO1xuLVxuLVx0XHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cbi1cdFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcbiBcdH1cbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcbkBAIC0yNjA3LDE0ICYjNDM7MjYxNiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHtcbiYjNDM7XHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XG4gXHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcbiBcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuJiM0MztcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbkBAIC0yNjQ0LDcgJiM0MzsyNjUzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwdGV2YWwsXG4mIzQzO1x0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdFx0ZWxzZVxuIFx0XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbiBcdFx0XHRcdHJldCA9IGZhbHNlO1xuQEAgLTI2NTcsNyAmIzQzOzI2NjcsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgaHVnZXRsYl90cnlfc2hhcmVfYW5vbl9ybWFwKGZvbGlvKSkge1xuIFx0XHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxuLVx0XHRcdFx0XHRcdFx0cHRldmFsLCBoc3opO1xuJiM0MztcdFx0XHRcdFx0XHRcdHB0ZXZhbCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0XHRcdHJldCA9IGZhbHNlO1xuIFx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xuIFx0XHRcdFx0XHRicmVhaztcbkBAIC0yNzAzLDcgJiM0MzsyNzE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdH1cbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbiYjNDM7XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTtcbiBcdFx0XHR0cmFjZV9zZXRfbWlncmF0aW9uX3B0ZShhZGRyZXNzLCBwdGVfdmFsKHN3cF9wdGUpLFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzLi40OTJjOWJlZjM2MjA3IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YS4uNzBlNTRhY2UwZTc0MSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTEwODYsNyAmIzQzOzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gXHRcdFx0Z290byBrZWVwO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJiMzOTt0IGhhbmRsZSBsYXJnZVxuIFx0XHRcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBkYjU3YzU3NjZhYjYwLi45NGVlZGNjN2YxYTllIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICYjNDM7Nzc0LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDt1bnBvaXNvbl9tZW1vcnkmIzM0OywKICAgICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy4gSXQgbW9kaWZpZXMgYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgZm9saW9zIGFuZCB1cGRhdGVzIG1lbW9yeSBmYWlsdXJlIHJlY292ZXJ5IGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgTU0gYW5kIGh1Z2V0bGJmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MzIwZGRjMWZhODZmMTI4NWI1N2VmYmFkNzQxYjMwZjUxODlhMzc1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMDI6MzY6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBjZjZhZTY0Nzc2ZTYyLi5lZGRhYzRlZDIxNGIxIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwotCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IExBUkdFX0ZPTElPCiAKIGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAogCWRlZl9ib29sIEhVR0VUTEJfUEFHRQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAyMTZlMWEwZGQwYjIzLi5jZWY3ZTYxYjgyN2Q3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTg3LDExMyAmIzQzOzE4Nyw2IEBAIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApOwogfQogCi0vKgotICogU29tZW9uZSB3YW50cyB0byByZWFkIEBieXRlcyBmcm9tIGEgSFdQT0lTT04gaHVnZXRsYiBAZm9saW8gZnJvbSBAb2Zmc2V0LgotICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXcKLSAqIEhXUE9JU09OIHBhZ2UuCi0gKi8KLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsCi0JCXNpemVfdCBieXRlcykKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7Ci0Jc2l6ZV90IHNhZmVfYnl0ZXM7Ci0KLQlpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpCi0JCXJldHVybiAwOwotCS8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi8KLQlzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7Ci0JcGFnZSYjNDM7JiM0Mzs7Ci0KLQkvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi8KLQlmb3IgKDsgc2FmZV9ieXRlcyAmbHQ7IGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KQotCQlpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpCi0JCQlicmVhazsKLQotCXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwotfQotCi0vKgotICogU3VwcG9ydCBmb3IgcmVhZCgpIC0gRmluZCB0aGUgcGFnZSBhdHRhY2hlZCB0byBmX21hcHBpbmcgYW5kIGNvcHkgb3V0IHRoZQotICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGh1Z2V0bGJmc19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKLQlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLSZndDtmX21hcHBpbmc7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctJmd0O2hvc3Q7Ci0JdW5zaWduZWQgbG9uZyBpbmRleCA9IGlvY2ItJmd0O2tpX3BvcyAmZ3Q7Jmd0OyBodWdlX3BhZ2Vfc2hpZnQoaCk7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLSZndDtraV9wb3MgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGgpOwotCXVuc2lnbmVkIGxvbmcgZW5kX2luZGV4OwotCWxvZmZfdCBpc2l6ZTsKLQlzc2l6ZV90IHJldHZhbCA9IDA7Ci0KLQl3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXNpemVfdCBuciwgY29waWVkLCB3YW50OwotCi0JCS8qIG5yIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGZyb20gdGhpcyBwYWdlICovCi0JCW5yID0gaHVnZV9wYWdlX3NpemUoaCk7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCQlpZiAoIWlzaXplKQotCQkJYnJlYWs7Ci0JCWVuZF9pbmRleCA9IChpc2l6ZSAtIDEpICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQkJaWYgKGluZGV4ICZndDsgZW5kX2luZGV4KQotCQkJYnJlYWs7Ci0JCWlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHsKLQkJCW5yID0gKChpc2l6ZSAtIDEpICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoKSkgJiM0MzsgMTsKLQkJCWlmIChuciAmbHQ7PSBvZmZzZXQpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJbnIgPSBuciAtIG9mZnNldDsKLQotCQkvKiBGaW5kIHRoZSBmb2xpbyAqLwotCQlmb2xpbyA9IGZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKGgsIG1hcHBpbmcsIGluZGV4KTsKLQkJaWYgKElTX0VSUihmb2xpbykpIHsKLQkJCS8qCi0JCQkgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGUKLQkJCSAqIGxlbmd0aCBvZiB0aGUgaG9sZSBvciByZXF1ZXN0LgotCQkJICovCi0JCQljb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7Ci0JCX0gZWxzZSB7Ci0JCQlmb2xpb191bmxvY2soZm9saW8pOwotCi0JCQlpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQotCQkJCXdhbnQgPSBucjsKLQkJCWVsc2UgewotCQkJCS8qCi0JCQkJICogQWRqdXN0IGhvdyBtYW55IGJ5dGVzIHNhZmUgdG8gcmVhZCB3aXRob3V0Ci0JCQkJICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlcgotCQkJCSAqIG9mZnNldC4KLQkJCQkgKi8KLQkJCQl3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTsKLQkJCQlpZiAod2FudCA9PSAwKSB7Ci0JCQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCQkJCXJldHZhbCA9IC1FSU87Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJLyoKLQkJCSAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLgotCQkJICovCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgd2FudCwgdG8pOwotCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJfQotCQlvZmZzZXQgJiM0Mzs9IGNvcGllZDsKLQkJcmV0dmFsICYjNDM7PSBjb3BpZWQ7Ci0JCWlmIChjb3BpZWQgIT0gbnIgJmFtcDsmYW1wOyBpb3ZfaXRlcl9jb3VudCh0bykpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCQlpbmRleCAmIzQzOz0gb2Zmc2V0ICZndDsmZ3Q7IGh1Z2VfcGFnZV9zaGlmdChoKTsKLQkJb2Zmc2V0ICZhbXA7PSB+aHVnZV9wYWdlX21hc2soaCk7Ci0JfQotCWlvY2ItJmd0O2tpX3BvcyA9ICgobG9mZl90KWluZGV4ICZsdDsmbHQ7IGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0OwotCXJldHVybiByZXR2YWw7Ci19Ci0KIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLApAQCAtODgzLDYgJiM0Mzs3NzYsMTcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJcmV0dXJuIGlub2RlOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSAqaHN0YXRlID0gaHN0YXRlX2lub2RlKGlub2RlKTsKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7CiYjNDM7CiYjNDM7CWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9uczsKJiM0MzsJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwomIzQzOwltYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpOwomIzQzOwltYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKGlub2RlLSZndDtpX21hcHBpbmcpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyCiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW4KQEAgLTkyNiw4ICYjNDM7ODMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRlJFRzoKLQkJCWlub2RlLSZndDtpX29wID0gJmFtcDtodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9uczsKLQkJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MzsJCQlodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZESVI6CiAJCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpAQCAtMTIwNiw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7Ci0JLnJlYWRfaXRlcgkJPSBodWdldGxiZnNfcmVhZF9pdGVyLAomIzQzOwkucmVhZF9pdGVyCQk9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsCiAJLm1tYXAJCQk9IGh1Z2V0bGJmc19maWxlX21tYXAsCiAJLmZzeW5jCQkJPSBub29wX2ZzeW5jLAogCS5nZXRfdW5tYXBwZWRfYXJlYQk9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDJhYmFmOTkzMjFlOTAuLjE4Nzg2NDJlNzVlYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTsKIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7CkBAIC0yOTIsOCAmIzQzOzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKAotCQkJCQkJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTU5NSw4ICYjNDM7NTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3MgewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgX19hbHdheXNfaW5saW5lCQkJCQkJXAotYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKLQl7CXZvaWQgKnByaXZhdGUgPSAmYW1wO2ZvbGlvLSZndDtwcml2YXRlOwkJXAomIzQzO2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCVwKJiM0MzsJewljb25zdCB2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKIAkJcmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7CQlcCiAJfQogCkBAIC02MTYsNyAmIzQzOzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQkJXAogI2Vsc2UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgaW5saW5lIGJvb2wJCQkJCQlcCi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykJCVwKIAl7IHJldHVybiAwOyB9CiAKICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpCQkJCVwKQEAgLTcyNyw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzcG9vbDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGZvbGlvLSZndDtfaHVnZXRsYl9zdWJwb29sOwogfQpAQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pOwogCXJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7CkBAIC0xMDcwLDExICYjNDM7MTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpOwogI2VuZGlmCiAKLS8qCi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLgotICovCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBQQUdFX01BU0sgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTsKQEAgLTEwODgsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpAQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGIxOGMyYjJlN2QyYzYuLjg2YTJkMGZlZTU1N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTM4Nyw3ICYjNDM7Mzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90OwogICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguCiAgKiBAX2h1Z2V0bGJfY2dyb3VwOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguCi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS4KJiM0MzsgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTksNyBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CQkJc3RydWN0IGh3cF9wYWdlICpodWdldGxiX2h3cG9pc29uOwogCS8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqLwogCQl9OwogCQlzdHJ1Y3QgcGFnZSBfX3BhZ2VfMzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggNzIyM2Y2ZjRlMmI0MC4uMDdjYzc4NTRiMmRlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTg5MywxNCAmIzQzOzg5MywxOSBAQCBzdGF0aWMgaW5saW5lIGludCBQYWdlVHJhbnNDb21wb3VuZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIFRFU1RQQUdFRkxBR19GQUxTRShUcmFuc0NvbXBvdW5kLCB0cmFuc2NvbXBvdW5kKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pCiAvKgotICogUGFnZUhhc0hXUG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1YnBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKLSAqIGNvbXBvdW5kIHBhZ2UuCiYjNDM7ICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGUKJiM0MzsgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXMKJiM0MzsgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGUKJiM0MzsgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbiYjMzk7dCB3YW50IHRvIGNhbGwgdGhpcyBkaXJlY3RseTsKJiM0MzsgKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuCiAgKgogICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLgogICovCiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSkKJiM0MztGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKQogI2Vsc2UKIEZPTElPX0ZMQUdfRkFMU0UoaGFzX2h3cG9pc29uZWQpCiAjZW5kaWYKQEAgLTEwNDEsOCAmIzQzOzEwNDYsMjkgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKQogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYikKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiAoUkVBRF9PTkNFKGZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSkgJmd0OyZndDsgMjMpID09CiYjNDM7CQkoKFBHVFlfaHVnZXRsYiAmbHQ7Jmx0OyAxKSB8IDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2h1Z2VfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlmb2xpby0mZ3Q7cGFnZS5wYWdlX3R5cGUgfD0gKDEgJmx0OyZsdDsgMjMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfaHVnZV9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWZvbGlvLSZndDtwYWdlLnBhZ2VfdHlwZSAmYW1wOz0gfigxICZsdDsmbHQ7IDIzKTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pCiYjNDM7I2VuZGlmCiAjZWxzZQogRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpCiYjNDM7Rk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKQogI2VuZGlmCiAKIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYykKQEAgLTEwNjgsMTAgJiM0MzsxMDk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpOwogfQogCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzO2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTsKJiM0MzsKIC8qCi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcwotICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aAotICogZmFpbGluZyBoYXJkd2FyZS4KJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiAgVGhpcyBjaGVjayBpcyBiZXN0CiYjNDM7ICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGgKJiM0MzsgKiBmYWlsaW5nIGhhcmR3YXJlLiAgVGhlIGNhbGxlciBtYXkgbm90IGhhdmUgYSByZWZjb3VudCBvbiB0aGUgZm9saW8KJiM0MzsgKiBjb250YWluaW5nIHRoZSBwYWdlLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IHRyaXAgYW55IGFzc2VydGlvbnMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMTA4MCwxMyAmIzQzOzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkKIAkJcmV0dXJuIHRydWU7CiAJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwotCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pICZhbXA7JmFtcDsgUGFnZUhXUG9pc29uKCZhbXA7Zm9saW8tJmd0O3BhZ2UpOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpCiYjNDM7CQlyZXR1cm4gaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKHBhZ2UpOwomIzQzOwkvKiBJbiBjYXNlIHdlIHJhY2VkIHdpdGggaHVnZXRsYiB0cmFuc2ZlcnJpbmcgZmxhZ3MgKi8KJiM0MzsJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQlyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fAotCSAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7CiYjNDM7CXJldHVybiBQYWdlSFdQb2lzb24oJmFtcDtmb2xpby0mZ3Q7cGFnZSkgfHwKJiM0MzsJICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTsKIH0KIAogYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAyYzM3MThkNTkyZDZkLi4yMmQ0ODkzNWZmZGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMjEwLDYgJiM0MzsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3MgewogCUFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksCiAJQVNfS0VSTkVMX0ZJTEUgPSAxMCwJLyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbiYjMzk7dAogCQkJCSAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovCiYjNDM7CUFTX0FVVEhPUklUQVRJVkUgPSAxMSwJLyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQmIzM5O3MgYSBob2xlICovCiAJLyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi8KIAlBU19GT0xJT19PUkRFUl9CSVRTID0gNSwKIAlBU19GT0xJT19PUkRFUl9NSU4gPSAxNiwKQEAgLTM0NSw2ICYjNDM7MzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzCiAJcmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgJmFtcDttYXBwaW5nLSZndDtmbGFncyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKJiM0Mzt7CiYjNDM7CXNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgJmFtcDttYXBwaW5nLSZndDtmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgJmFtcDttYXBwaW5nLSZndDtmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewogCXJldHVybiBtYXBwaW5nLSZndDtnZnBfbWFzazsKQEAgLTM3Myw3ICYjNDM7Mzg0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlCiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQmIzM5O3MgMU1CIGlmIHlvdSYjMzk7cmUgdXNpbmcgNGtCIHBhZ2VzKQogICovCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7I2lmZGVmIENPTkZJR19MQVJHRV9GT0xJTwogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUglIUEFHRV9QTURfT1JERVIKICNlbHNlCiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSCTgKQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybiAxVSAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAmIzQzOyBNQVhfUEFHRUNBQ0hFX09SREVSKTsKIAlyZXR1cm4gUEFHRV9TSVpFOwogfQpAQCAtNDA1LDI5ICYjNDM7NDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpCiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLgogICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS4KICAqCi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0bwotICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGUwotICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQKLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzCi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLgomIzQzOyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yCiYjNDM7ICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mCiYjNDM7ICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwKJiM0MzsgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS4KICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLgogICoKJiM0MzsgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi4KJiM0MzsgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXQKICAqIGlzIG5vbi1hdG9taWMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkJCSB1bnNpZ25lZCBpbnQgbWluLAotCQkJCQkJIHVuc2lnbmVkIGludCBtYXgpCiYjNDM7CQl1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuOwotCi0JaWYgKG1pbiAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KLQlpZiAobWF4ICZndDsgTUFYX1BBR0VDQUNIRV9PUkRFUikKLQkJbWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjsKLQogCWlmIChtYXggJmx0OyBtaW4pCiAJCW1heCA9IG1pbjsKIApAQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIChtYXBwaW5nLSZndDtmbGFncyAmYW1wOyBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgJmd0OyZndDsgQVNfRk9MSU9fT1JERVJfTUFYOwogfQpAQCAtNDY4LDcgJiM0Mzs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpCiAJCXJldHVybiAwOwogCXJldHVybiAobWFwcGluZy0mZ3Q7ZmxhZ3MgJmFtcDsgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spICZndDsmZ3Q7IEFTX0ZPTElPX09SREVSX01JTjsKIH0KQEAgLTUyNCw3ICYjNDM7NTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGkKICAqCiAgKiBSZXR1cm46IFRydWUgaWYgUE1ELXNpemVkIGZvbGlvcyBhcmUgc3VwcG9ydGVkLCBvdGhlcndpc2UgZmFsc2UuCiAgKi8KLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPCiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAkvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi8KZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTQuLmU2NjZkZDE0Y2EwYzMgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtODQzLDExICYjNDM7ODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTwogY29uZmlnIE1NX0lECiAJZGVmX2Jvb2wgbgogCiYjNDM7Y29uZmlnIExBUkdFX0ZPTElPCiYjNDM7CWRlZl9ib29sIG4KJiM0MzsJc2VsZWN0IFhBUlJBWV9NVUxUSQomIzQzOwogbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCWJvb2wgJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSAmYW1wOyZhbXA7ICFQUkVFTVBUX1JUCiAJc2VsZWN0IENPTVBBQ1RJT04KLQlzZWxlY3QgWEFSUkFZX01VTFRJCiYjNDM7CXNlbGVjdCBMQVJHRV9GT0xJTwogCXNlbGVjdCBNTV9JRAogCWhlbHAKIAkgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmQKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA1OGViOWQyNDA2NDM0Li41YThjYzIwZTYyNGU0IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAogCQlpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJCWJyZWFrOwogCQlpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQkJYnJlYWs7CiAJCWlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpCkBAIC0yNjk1LDYgJiM0MzsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCwKIAlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHsKIAkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgJmFtcDtmaWxwLSZndDtmX3JhLCBtYXBwaW5nLCBpbmRleCk7CiAKJiM0MzsJCWlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpCiYjNDM7CQkJcmV0dXJuIDA7CiAJCWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX05PSU8pCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQpAQCAtMjc0OSw2ICYjNDM7Mjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAocG9zMSAmZ3Q7Jmd0OyBzaGlmdCA9PSBwb3MyICZndDsmZ3Q7IHNoaWZ0KTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsCiYjNDM7CQlzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7CiYjNDM7CXNpemVfdCBzYWZlX2J5dGVzOwomIzQzOwomIzQzOwlpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJcmV0dXJuIGJ5dGVzOwomIzQzOwlpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi8KJiM0MzsJc2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpOwomIzQzOwlwYWdlJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovCiYjNDM7CWZvciAoOyBzYWZlX2J5dGVzICZsdDsgYnl0ZXM7IHNhZmVfYnl0ZXMgJiM0Mzs9IFBBR0VfU0laRSwgcGFnZSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwlyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpCkBAIC0yODI4LDYgJiM0MzsyODU1LDIyIEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJZ290byBwdXRfZm9saW9zOwogCQllbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGl0ZXItJmd0O2NvdW50KTsKIAomIzQzOwkJaWYgKCFmb2xpb19iYXRjaF9jb3VudCgmYW1wO2ZiYXRjaCkpIHsKJiM0MzsJCQlzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpOwomIzQzOwkJCXNpemVfdCBvZmZzZXQgPSBpb2NiLSZndDtraV9wb3MgJmFtcDsgKGZzaXplIC0gMSk7CiYjNDM7CQkJc2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi0mZ3Q7a2lfcG9zLAomIzQzOwkJCQkJICAgICBmc2l6ZSAtIG9mZnNldCk7CiYjNDM7CQkJc2l6ZV90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oYnl0ZXMsIGl0ZXIpOwomIzQzOwomIzQzOwkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwomIzQzOwkJCWlvY2ItJmd0O2tpX3BvcyAmIzQzOz0gY29waWVkOwomIzQzOwkJCWxhc3RfcG9zID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwkJCWlmIChjb3BpZWQgJmx0OyBieXRlcykKJiM0MzsJCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQkvKgogCQkgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55CiAJCSAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6CkBAIC0yODYyLDE0ICYjNDM7MjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJCWlmICh3cml0YWJseV9tYXBwZWQpCiAJCQkJZmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTsKIAotCQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTsKJiM0MzsJCQljb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpOwomIzQzOwkJCWlmIChjb3BpZWQgJmx0OyBieXRlcykKJiM0MzsJCQkJZXJyb3IgPSAtRUlPOwomIzQzOwkJCWNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpOwogCiAJCQlhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDsKIAkJCWlvY2ItJmd0O2tpX3BvcyAmIzQzOz0gY29waWVkOwogCQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiAKIAkJCWlmIChjb3BpZWQgJmx0OyBieXRlcykgewotCQkJCWVycm9yID0gLUVGQVVMVDsKJiM0MzsJCQkJaWYgKCFlcnJvcikKJiM0MzsJCQkJCWVycm9yID0gLUVGQVVMVDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMmJjY2IwYTUzYTBhNi4uMzUzMzQwMzA5MTA3NCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC00NDEzLDcgJiM0Mzs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKJiM0MzsJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLAogCQlpZiAocGluICZhbXA7JmFtcDsgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKJiM0MzsJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpc19taWdyYXRlX2lzb2xhdGVfcGFnZSgmYW1wO2ZvbGlvLSZndDtwYWdlKSkKQEAgLTEzODEsNiAmIzQzOzEzODEsMTggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludAogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlCiYjNDM7CSAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSkKJiM0MzsJCWZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pOwomIzQzOwomIzQzOwlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLgogICogSWYgdm1lbW1hcCBleGlzdHMgZm9yIHRoZSBmb2xpbywgY2xlYXIgdGhlIGh1Z2V0bGIgZmxhZyBzbyB0aGF0IHRoZQpAQCAtMTQxOSw3ICYjNDM7MTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkgKiB0byB0YWlsIHN0cnVjdCBwYWdlcy4KIAkgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpCi0JCV9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiYjNDM7CQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAogCWgtJmd0O25yX2h1Z2VfcGFnZXMtLTsKIAloLSZndDtucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tOwpAQCAtMTQ5MywxNyAmIzQzOzE1MDUsMTAgQEAgc3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAogCSAqLwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCQlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzOwkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJfQogCi0JLyoKLQkgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsCi0JICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuCi0JICovCi0JaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkKLQkJZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7Ci0KIAlWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pOwogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSkKIAkJaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oZm9saW8pOwpAQCAtMTU5NSw3ICYjNDM7MTYwMCw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgdF9mb2xpbywgbm9uX2h2b19mb2xpb3MsIGxydSkgewogCQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIAkJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCQl1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpOwogCQkJY29uZF9yZXNjaGVkKCk7CkBAIC0xNjIwLDcgJiM0MzsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwKIAkJCX0gZWxzZSB7CiAJCQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIAkJCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJCQlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzOwkJCQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAkJCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQkJCXVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7CiAJCQkJY29uZF9yZXNjaGVkKCk7CkBAIC0xNjUzLDE0ICYjNDM7MTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLAogCSAqIHNob3VsZCBvbmx5IGJlIHBhZ2VzIG9uIHRoZSBub25faHZvX2ZvbGlvcyBsaXN0LgogCSAqIERvIG5vdGUgdGhhdCB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdCBjb3VsZCBiZSBlbXB0eS4KIAkgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwKLQkgKiBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LgomIzQzOwkgKiBmb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS4KIAkgKi8KIAlWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTsKIAlWTV9XQVJOX09OKHJldCAmbHQ7IDApOwogCWlmICghbGlzdF9lbXB0eSgmYW1wO25vbl9odm9fZm9saW9zKSAmYW1wOyZhbXA7IHJldCkgewogCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgJmFtcDtub25faHZvX2ZvbGlvcywgbHJ1KQotCQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAl9CiAKQEAgLTE3NzUsNyAmIzQzOzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuCiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLgogICovCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pOwogCkBAIC0zOTk4LDcgJiM0Mzs0MDAzLDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsICZhbXA7c3JjLSZndDtodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkgewotCQkJaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKQomIzQzOwkJCWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJCQljb250aW51ZTsKIAogCQkJcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpOwpAQCAtNTgwOSw3ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJICogZG9uJiMzOTt0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy4KIAkJICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suCiAJCSAqLwotCQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7CiAJCQlyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8CiAJCQkJVk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpOwogCQkJZ290byBiYWNrb3V0X3VubG9ja2VkOwpAQCAtNjMxOCw3ICYjNDM7NjMyMyw3IEBAIGludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsCiAJcHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpOwogCiAJcmV0ID0gLUVJTzsKLQlpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCiYjNDM7CWlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKIAkJZ290byBvdXRfcmVsZWFzZV91bmxvY2s7CiAKIAlyZXQgPSAtRUVYSVNUOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNTE1MDhhNTVjNDA1NS4uYWIyMDk0ZWQzMjBjYyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0xODA4LDYzICYjNDM7MTgwOCw4OSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7CiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAKJiM0MzsvKiBQcm90ZWN0cyBhbGwgbGlzdHMgb2YgaHdwX3BhZ2VzICovCiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTsKJiM0MzsKIC8qCi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgJiMzNDtyYXcgZXJyb3IgcGFnZSYjMzQ7LAotICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC0mZ3Q7X2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uCiYjNDM7ICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCAmIzM0O2Vycm9yIHBhZ2UmIzM0OywKJiM0MzsgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gZmllbGQuCiAgKi8KLXN0cnVjdCByYXdfaHdwX3BhZ2UgewotCXN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7CiYjNDM7c3RydWN0IGh3cF9wYWdlIHsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpuZXh0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKikmYW1wO2ZvbGlvLSZndDtfaHVnZXRsYl9od3BvaXNvbjsKLX0KJiM0MzsJY29uc3Qgc3RydWN0IGh3cF9wYWdlICpwOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcDsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQlib29sIHJldCA9IGZhbHNlOwotCi0JaWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKQotCQlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAogCS8qCi0JICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXMKLQkgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuCiYjNDM7CSAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzCiYjNDM7CSAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC4KIAkgKi8KLQlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHRydWU7CiYjNDM7CX0KIAotCW11dGV4X2xvY2soJmFtcDttZl9tdXRleCk7Ci0KLQlyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLSZndDtmaXJzdCwgbm9kZSkgewotCQlpZiAocGFnZSA9PSBwLSZndDtwYWdlKSB7Ci0JCQlyZXQgPSB0cnVlOwomIzQzOwlmb3IgKHAgPSBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtJmd0O25leHQpIHsKJiM0MzsJCWlmIChwYWdlID09IHAtJmd0O3BhZ2UpCiAJCQlicmVhazsKLQkJfQogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAotCW11dGV4X3VubG9jaygmYW1wO21mX211dGV4KTsKJiM0MzsJcmV0dXJuIHAgIT0gTlVMTDsKJiM0Mzt9CiAKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLgomIzQzOyAqLwomIzQzO2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogV2UgaGF2ZSBubyByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhpcyBwYWdlLgomIzQzOyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC4KJiM0MzsgKi8KJiM0Mztib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgcmV0OwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h1Z2V0bGJfbG9jaywgZmxhZ3MpOwomIzQzOwlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiYjNDM7CWlmICghZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpIHsKJiM0MzsJCXJldCA9IFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHVnZXRsYl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiB7Ci0Jc3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7CiYjNDM7CXN0cnVjdCBod3BfcGFnZSAqcCwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CiAKLQloZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkgewomIzQzOwluZXh0ID0gZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb247CiYjNDM7CWZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uID0gTlVMTDsKJiM0MzsKJiM0MzsJd2hpbGUgKG5leHQpIHsKJiM0MzsJCXAgPSBuZXh0OwomIzQzOwkJbmV4dCA9IHAtJmd0O25leHQ7CiAJCWlmIChtb3ZlX2ZsYWcpCiAJCQlTZXRQYWdlSFdQb2lzb24ocC0mZ3Q7cGFnZSk7CiAJCWVsc2UKQEAgLTE4ODEsMzQgJiM0MzsxOTA3LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogI2RlZmluZQlNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRAkzCS8qIGZvbGlvIGFscmVhZHkgcG9pc29uZWQgKi8KICNkZWZpbmUJTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRAk0CS8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqLwogI2RlZmluZQlNRl9IVUdFVExCX1JFVFJZCQk1CS8qIGh1Z2VwYWdlIGlzIGJ1c3ksIHJldHJ5ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9zZXRfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlpZiAoZm9saW9fdGVzdF9zZXRfaGFzX2h3cG9pc29uZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOwomIzQzOwlmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwlmb2xpb19jbGVhcl9odWdlX3BvaXNvbihmb2xpbyk7CiYjNDM7CWZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0CiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy4KICAqLwogc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7Ci0JaW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpwOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTsKIAogCS8qCiAJICogT25jZSB0aGUgaHdwb2lzb24gaHVnZXBhZ2UgaGFzIGxvc3QgcmVsaWFibGUgcmF3IGVycm9yIGluZm8sCi0JICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LAotCSAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uCiYjNDM7CSAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSwKJiM0MzsJICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby4KIAkgKi8KIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiAJCXJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDsKLQloZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtJmd0O2ZpcnN0LCBub2RlKSB7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwomIzQzOwlmb3IgKHAgPSBmb2xpby0mZ3Q7aHVnZXRsYl9od3BvaXNvbjsgcDsgcCA9IHAtJmd0O25leHQpIHsKIAkJaWYgKHAtJmd0O3BhZ2UgPT0gcGFnZSkKLQkJCXJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEOwomIzQzOwkJCWJyZWFrOwogCX0KIAotCXJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTsKLQlpZiAocmF3X2h3cCkgewotCQlyYXdfaHdwLSZndDtwYWdlID0gcGFnZTsKLQkJbGxpc3RfYWRkKCZhbXA7cmF3X2h3cC0mZ3Q7bm9kZSwgaGVhZCk7CiYjNDM7CWlmIChwKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aHdwX3BhZ2VfbG9jaywgZmxhZ3MpOwomIzQzOwkJcmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKHApIHsKJiM0MzsJCXAtJmd0O3BhZ2UgPSBwYWdlOwomIzQzOwkJcC0mZ3Q7bmV4dCA9IGZvbGlvLSZndDtodWdldGxiX2h3cG9pc29uOwomIzQzOwkJZm9saW8tJmd0O2h1Z2V0bGJfaHdwb2lzb24gPSBwOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbApAQCAtMTkxNywxNiAmIzQzOzE5NjcsMjAgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkJICovCiAJCWZvbGlvX3NldF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbyk7CiAJCS8qCi0JCSAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCByYXdfaHdwX3BhZ2UgaXMgbm90CiYjNDM7CQkgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgaHdwX3BhZ2UgaXMgbm90CiAJCSAqIHVzZWQgYW55IG1vcmUsIHNvIGZyZWUgaXQuCiAJCSAqLwogCQlfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2h3cF9wYWdlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY291bnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiAJLyoKIAkgKiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkIGh1Z2VwYWdlcyBjYW4mIzM5O3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3QKIAkgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJiMzOTt0IGV4aXN0LgpAQCAtMTk0MSw3ICYjNDM7MTk5NSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiAJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CWNvdW50ID0gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod3BfcGFnZV9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKIH0KIAogdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0xOTUwLDggJiM0MzsyMDA4LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXJldHVybjsKIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSkKIAkJcmV0dXJuOwotCWZvbGlvX2NsZWFyX2h3cG9pc29uKGZvbGlvKTsKIAlmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpOwomIzQzOwlmb2xpb19jbGVhcl9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncywKQEAgLTIxMDQsNiAmIzQzOzIxNjIsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KICNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiAKIC8qIERyb3AgdGhlIGV4dHJhIHJlZmNvdW50IGluIGNhc2Ugd2UgY29tZSBmcm9tIG1hZHZpc2UoKSAqLwpAQCAtMjY5NSw4ICYjNDM7Mjc1OCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KIAotCWlmICghUGFnZUhXUG9pc29uKHApKSB7Ci0JCXVucG9pc29uX3ByX2luZm8oJiMzNDslI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcbiYjMzQ7LAomIzQzOwlpZiAoIWlzX3BhZ2VfaHdwb2lzb24ocCkpIHsKJiM0MzsJCXVucG9pc29uX3ByX2luZm8oJiMzNDslI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxuJiMzNDssCiAJCQkJIHBmbiwgJmFtcDt1bnBvaXNvbl9ycyk7CiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KQEAgLTI3MjUsMTMgJiM0MzsyNzg4LDE5IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAKIAlnaHAgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBNRl9VTlBPSVNPTik7CiAJaWYgKCFnaHApIHsKJiM0MzsJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQkJaHVnZSA9IHRydWU7CiAJCQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwotCQkJaWYgKGNvdW50ID09IDApCiYjNDM7CQkJaWYgKGNvdW50ID09IDApIHsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJCQlnb3RvIHVubG9ja19tdXRleDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXQgPSBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkgPyAwIDogLUVCVVNZOwogCQl9Ci0JCXJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJfSBlbHNlIGlmIChnaHAgJmx0OyAwKSB7CiAJCWlmIChnaHAgPT0gLUVIV1BPSVNPTikgewogCQkJcmV0ID0gcHV0X3BhZ2VfYmFja19idWRkeShwKSA/IDAgOiAtRUJVU1k7CkBAIC0yNzQwLDE2ICYjNDM7MjgwOSwxOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKQogCQkJdW5wb2lzb25fcHJfaW5mbygmIzM0OyUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcbiYjMzQ7LAogCQkJCQkgcGZuLCAmYW1wO3VucG9pc29uX3JzKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7Ci0JCQlodWdlID0gdHJ1ZTsKLQkJCWNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7Ci0JCQlpZiAoY291bnQgPT0gMCkgewotCQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCQkJZ290byB1bmxvY2tfbXV0ZXg7Ci0JCQl9CiYjNDM7CX0gZWxzZSBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewomIzQzOwkJaHVnZSA9IHRydWU7CiYjNDM7CQljb3VudCA9IGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpOwomIzQzOwkJaWYgKGNvdW50ID09IDApIHsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJCWdvdG8gdW5sb2NrX211dGV4OwogCQl9Ci0KJiM0MzsJCXJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTsKJiM0MzsJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19wdXQoZm9saW8pOwogCQlpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7CiAJCQlmb2xpb19wdXQoZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMi4uMzMwMDdlOGU1NDZhMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0xODEzLDcgJiM0MzsxODEzLDcgQEAgc3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogCQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQlwZm4gPSBmb2xpb19wZm4oZm9saW8pICYjNDM7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAtIDE7CiAKLQkJaWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCQkvKgogCQkJICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvcwogCQkJICogaW4gYWxsIGNhc2VzIHlldC4KZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAxYzc3ZDVkYzA2ZTlmLi5mZDE5YTBiZmJmZTc2IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0xOTc4LDYgJiM0MzsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCSAgICAgRlBCX1JFU1BFQ1RfV1JJVEUgfCBGUEJfUkVTUEVDVF9TT0ZUX0RJUlRZKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogU2luY2Ugd2UgY2Fubm90IHNwbGl0IGEgaHVnZXRsYiBmb2xpbywgd2Ugd2FudCB0byBpbnNlcnQgYSBwb2lzb24KJiM0MzsgKiBlbnRyeSBpbnRvIHRoZSBwYWdlIHRhYmxlIGZvciB0aGUgd2hvbGUgZm9saW8gZXZlbiBpZiBvbmx5IG9uZSBwYWdlCiYjNDM7ICogaXMgcG9pc29uZWQuICBPdGhlcndpc2UsIHdlJiMzOTt2ZSBzcGxpdCBkb3duIHRvIHRoZSBQVEUgbGV2ZWwgYW5kIHdlIG9ubHkKJiM0MzsgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKCEoZmxhZ3MgJmFtcDsgVFRVX0hXUE9JU09OKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQlyZXR1cm4gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7CiYjNDM7CXJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnQKICAqLwpAQCAtMTk5Myw3ICYjNDM7MjAwOSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAxLCBlbmRfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAJaW50IHB0ZXMgPSAwOwogCiAJLyoKQEAgLTIwMjMsOSAmIzQzOzIwMzgsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjEyMSw3ICYjNDM7MjEzMyw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgKiBUaGUgdHJ5X3RvX3VubWFwKCkgaXMgb25seSBwYXNzZWQgYSBodWdldGxiIHBhZ2UKIAkJCSAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuCiAJCQkgKi8KLQkJCVZNX0JVR19PTl9QQUdFKCFQYWdlSFdQb2lzb24oc3VicGFnZSksIHN1YnBhZ2UpOwomIzQzOwkJCVZNX0JVR19PTl9GT0xJTyghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbyksCiYjNDM7CQkJCQlmb2xpbyk7CiAJCQkvKgogCQkJICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLgogCQkJICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heQpAQCAtMjIwMCwxMiAmIzQzOzIyMTMsMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi8KIAkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKIAotCQlpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpICZhbXA7JmFtcDsgKGZsYWdzICZhbXA7IFRUVV9IV1BPSVNPTikpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHsKIAkJCXB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQkJCWh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pOwogCQkJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwKLQkJCQkJCWhzeik7CiYjNDM7CQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJfSBlbHNlIHsKIAkJCQlkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpOwogCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwpAQCAtMjQyMyw3ICYjNDM7MjQzNiw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwogCWVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2ZsYWdzKShsb25nKWFyZzsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1bnNpZ25lZCBsb25nIGhzeiA9IDA7CiAKIAkvKgogCSAqIFdoZW4gcmFjaW5nIGFnYWluc3QgZS5nLiB6YXBfcHRlX3JhbmdlKCkgb24gYW5vdGhlciBjcHUsCkBAIC0yNDUyLDkgJiM0MzsyNDY0LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgKi8KIAkJYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwKIAkJCQkJCSAgICAgJmFtcDtyYW5nZS5lbmQpOwotCi0JCS8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqLwotCQloc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpOwogCX0KIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIApAQCAtMjYwNywxNCAmIzQzOzI2MTYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqLwogCQl1cGRhdGVfaGl3YXRlcl9yc3MobW0pOwogCi0JCWlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHsKJiM0MzsJCWlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7CiAJCQlWTV9XQVJOX09OX0ZPTElPKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKSwgZm9saW8pOwogCiAJCQlwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpOwogCQkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKIAkJCQlodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTsKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsCi0JCQkJCQloc3opOwomIzQzOwkJCQkJCWZvbGlvX3NpemUoZm9saW8pKTsKIAkJCX0gZWxzZSB7CiAJCQkJZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTsKIAkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTsKQEAgLTI2NDQsNyAmIzQzOzI2NTMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSAmbHQ7IDApIHsKIAkJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCWVsc2UKIAkJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7CiAJCQkJcmV0ID0gZmFsc2U7CkBAIC0yNjU3LDcgJiM0MzsyNjY3LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCWlmIChhbm9uX2V4Y2x1c2l2ZSAmYW1wOyZhbXA7CiAJCQkJICAgIGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChmb2xpbykpIHsKIAkJCQkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwKLQkJCQkJCQlwdGV2YWwsIGhzeik7CiYjNDM7CQkJCQkJCXB0ZXZhbCwKJiM0MzsJCQkJCQkJZm9saW9fc2l6ZShmb2xpbykpOwogCQkJCQlyZXQgPSBmYWxzZTsKIAkJCQkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwogCQkJCQlicmVhazsKQEAgLTI3MDMsNyAmIzQzOzI3MTQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl9CiAJCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKIAkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLAotCQkJCQkJaHN6KTsKJiM0MzsJCQkJCQlmb2xpb19zaXplKGZvbGlvKSk7CiAJCQllbHNlCiAJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpOwogCQkJdHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSwKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGI1MWY4M2M5NzBiYjMuLjQ5MmM5YmVmMzYyMDcgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMzI0MCw3ICYjNDM7MzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKJiM0MzsJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAzNWMzYmIxNWFlOTZhLi43MGU1NGFjZTBlNzQxIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkKIAkJCWdvdG8ga2VlcDsKIAotCQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJCS8qCiAJCQkgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbiYjMzk7dCBoYW5kbGUgbGFyZ2UKIAkJCSAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggZGI1N2M1NzY2YWI2MC4uOTRlZWRjYzdmMWE5ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NzQsNyAmIzQzOzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCi0JaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7CiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlyZXR1cm4gRVJSX1BUUigtRUhXUE9JU09OKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IExhcmdlIEZvbGlvcyBhbmQgSHVnZXRsYmZzIEhXUG9pc29uaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzICpkZWZpbml0ZWx5KiBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIG1vZGlmaWNhdGlvbiBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgKGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHZhcmlvdXMgaW5jbHVkZSBmaWxlcywgYW5kIGEgc2xldyBvZiBgbW0vYCBmaWxlcykgaXMgYSBjbGVhciBpbmRpY2F0aW9uLiBUaGUga2V5IGZvY3VzIGhlcmUgaXMgdGhlIGhhbmRsaW5nIG9mIGhhcmR3YXJlIHBvaXNvbmluZyAoYGh3cG9pc29uYCkgaW4gdGhlIGNvbnRleHQgb2YgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIGhvdyBgaHdwb2lzb25gIGlzIG1hbmFnZWQgZm9yIGxhcmdlIHBhZ2VzLiBUaGUgbW92ZSBhd2F5IGZyb20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCBpcyBhIHJlZCBmbGFnIG9uIGl0cyBvd24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZ1bmN0aW9ucyBsaWtlIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgc2lnbmFscyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyB0aGVzZSBwYWdlIHR5cGVzIGFyZSBoYW5kbGVkIHdoZW4gaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZmlsZW1hcF9yZWFkYCB0byBhY2NvdW50IGZvciB0aGlzLgoKU28sIHdoZXJlIGRvIHdlIHN0YXJ0PyBXZWxsLCBgZmlsZW1hcF9yZWFkYCBpcyBhIGhvdCBwYXRoLCBzbyBJJiMzOTtkIHByb2JhYmx5IGJlIGEgbGl0dGxlIGNhdXRpb3VzIGFib3V0IGZvY3VzaW5nICp0b28qIGhlYXZpbHkgdGhlcmUsIHRob3VnaCBpdCYjMzk7cyBjZXJ0YWlubHkgcmVsZXZhbnQuIFRoZSBuZXcgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgbG9vayBsaWtlIHByaW1lIHRhcmdldHMuIFRoZSBjaGFuZ2VzIHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgYWxzbyBjcnVjaWFsLiBgdW5wb2lzb25fbWVtb3J5YCBpcyBvYnZpb3VzbHkgYSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4KCkxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhlIG1lbnRpb25lZCBmdW5jdGlvbnMgKGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYW5kIGB1bnBvaXNvbl9tZW1vcnlgKSBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSW4gYWRkaXRpb24sIEkgbmVlZCB0byBjaGVjayBmdW5jdGlvbnMgbGlrZSBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAsIGBmb2xpb19mcmVlX3Jhd19od3BgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4KClNpbWlsYXJseSwgaW4gYG1tL2ZpbGVtYXAuY2AsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGZpbGVtYXBfcmVhZGAgbW9kaWZpY2F0aW9ucyBhbmQgdGhlIG5ld2x5IGFkZGVkIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJJiMzOTtsbCB3YW50IHRvIHJldmlldyB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEhXUG9pc29uaW5nLgoKT2YgY291cnNlLCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyZSBjcnVjaWFsIGNvbnRleHQ6IGBDT05GSUdfSFVHRVRMQkZTYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfTEFSR0VfRk9MSU9gLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaG93IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBzZWxlY3QgYENPTkZJR19MQVJHRV9GT0xJT2AuIEFuZCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljIGltcGxpY2F0aW9ucyBvZiBgTUVNT1JZX0ZBSUxVUkVgLgoKVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBoYXJkd2FyZSBwb2lzb25pbmcgb2YgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMgcGFnZXMgYW5kIGRlc2lnbiBmdXp6aW5nIHN0cmF0ZWdpZXMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1FTU9SWV9GQUlMVVJFIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gd2UgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBjb25uZWN0ZWQgdG8gYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIHNvIGl0JiMzOTtzIGEgc2FmZSBiZXQgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGZvciBgTUVNT1JZX0ZBSUxVUkVgIHdpbGwgYmUgZGVmaW5lZCwgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCwgdGhlcmUuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGluIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdCwgYW5kIHdoYXQgZmVhdHVyZXMgbWlnaHQgZGVwZW5kIG9uIGl0IGJlaW5nIHNldC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCB0aGUgbG9naWMgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgb3RoZXIgb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIHZpc2liaWxpdHkuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIHF1aWNrbHkuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBmZWF0dXJlIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzcwOlx0XG4gNzcxOlx0XHQgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgYm9vdCB1c2luZyB0aGVcbiA3NzI6XHRcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cbiA3NzM6XHRcbiA3NzQ6XHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc3NTpcdFx0Ym9vbFxuIDc3NjpcdFxuIDc3NzpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc3ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Nzk6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc4MDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzgxOlx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc4MjpcdFx0aGVscFxuIDc4MzpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3ODQ6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3ODU6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzg2Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzg3Olx0XG4gNzg4Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlndXJhdGlvbnMgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYm9sc3RlcmluZyBvdXIgbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UsIGVuYWJsaW5nIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhvc2UgYXJlIHByYWN0aWNhbGx5IGVzc2VudGlhbCBmb3Igcm9idXN0IGZhdWx0IGRldGVjdGlvbiBhbmQgaW5qZWN0aW9uIHRlc3RpbmcsIHJlc3BlY3RpdmVseS4gQW5kLCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBIVUdFVExCRlNgIGFuZCBgSFVHRVRMQl9QQUdFYC4gVGhleSBjYW4gYmUgdXNlZnVsIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVzaWxpZW5jZSB3aXRoIGxhcmdlIG1lbW9yeSBwYWdlcy4KCk5vdywgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIHRoZXNlIG9wdGlvbnMgcGxheSBvdXQsIEkgcmVhbGx5IG5lZWQgdG8gZGVsdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBiZWhpbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZGV0ZWN0cywgaXNvbGF0ZXMsIGFuZCByZXNwb25kcyB0byBlcnJvcnMuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2x8dW5zaWduZWQgbG9uZykuKmh1Z2V0bGJfLipod3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDkyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDk2LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5Nzpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDk4OmJvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTktXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODIzPXN0YXRpYyBib29sIHByZWNpc2VfcGFnZV9wb2lzb25lZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1MS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg1Mjpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1My17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODYzLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxODY0OmJvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY1LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5Nzk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjAwNTp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgQ29ycnVwdGlvbiBpbiBIdWdlVExCIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgYW5kIHRoZSBjb250ZXh0IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gUmlnaHQgYXdheSwgbXkgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGNvcmUgbG9naWMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIGhhcmR3YXJlIHBvaXNvbmluZyBhbmQgSHVnZVRMQiB1cGRhdGVzLiBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGltcGxpZXMgdGhpcyBpcyB3aGVyZSB0aGUgY3JpdGljYWwgaGFuZGxpbmcgb2NjdXJzLiBUaGVyZWZvcmUsIG15IGZpcnN0IHN0ZXAgaXMgY2xlYXI6IEkgKm11c3QqIGV4YW1pbmUgdGhlIGNvZGUgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgdGFyZ2V0aW5nIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIHByb2JsZW0hKSBsaWVzIGluIHRlcm1zIG9mIGhvdyBoYXJkd2FyZS1kZXRlY3RlZCBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBIdWdlVExCIGZyYW1ld29yay4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3VwZGF0ZV9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTE5MTk9c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5MzEtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MzI6c3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkzMy17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDE1PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNDUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNDY6XHRyYyA9IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA0Ny1cdGlmIChyYyBcdTAwM2U9IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTU3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIG1lbW9yeSBtYW5hZ2VtZW50OgoKKipBbmFseXppbmcgUG9pc29uZWQgTWVtb3J5IEhhbmRsaW5nIGluIHRoZSBIdWdlVExCIGFuZCBGaWxlbWFwIENvbnRleHRzKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIGhhcmR3YXJlIHBvaXNvbmluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgYW5kLCBJIHN1c3BlY3QsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGZpbGVtYXAgc3lzdGVtLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhbmQgdGhlaXIgc2NvcGUuIEZpcnN0LCBJIG5vdGljZWQgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBhbmQgdXNlIGFyZSByZXN0cmljdGVkIHRvIGl0cyBzb3VyY2UgZmlsZS4gVGhpcyBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHNwZWNpZmljIEh1Z2VUTEIgbW9kdWxlLgoKQ29udmVyc2VseSwgSSBzZWUgdGhhdCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBhbmQgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAgYXJlICpub3QqIHN0YXRpYy4gVGhhdCBpbXBsaWVzIHRoZXkgYXJlIGRlc2lnbmVkIHRvIGJlIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLCBsaWtlbHkgYXMgcGFydCBvZiBhIGJyb2FkZXIgaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBwb2lzb25lZCBIdWdlVExCIHBhZ2VzLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBwYXJ0IG9mIHRoZSBjb3JlIHBvaXNvbmluZyBtZWNoYW5pc21zLCBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gYmUgYWNjZXNzaWJsZS4gYHVucG9pc29uX21lbW9yeWAgaXMgYWxzbyBub3Qgc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGZvciBhIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB0aGUgZ2VuZXJhbCBhY3Qgb2YgY2xlYXJpbmcgbWVtb3J5LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBhbGwgb2YgdGhpcyB0aWVzIHRvZ2V0aGVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYG1tL2ZpbGVtYXAuY2AsIGJlY2F1c2UgSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGZpbGVtYXAgc3Vic3lzdGVtIGxpdmVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhhdCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvciB1dGlsaXplcyB0aGUgb3RoZXIgZnVuY3Rpb25zIEkmIzM5O3ZlIGV4YW1pbmVkLiBJIGFudGljaXBhdGUgc2VlaW5nIGlmIHRoZSBmaWxlbWFwIHN5c3RlbSBpcyBpbnZvbHZlZCBpbiBwcm9wYWdhdGluZyBvciByZXNwb25kaW5nIHRvIGhhcmR3YXJlIHBvaXNvbmluZyBzaWduYWxzIHRoYXQgb3JpZ2luYXRlIGluIHRoZSBIdWdlVExCIGNvbnRleHQuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGRpc3RpbmN0IG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfcmFuZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTI3NDk9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMjc1NS1cbm1tL2ZpbGVtYXAuYzoyNzU2OnN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG5tbS9maWxlbWFwLmMtMjc1Ny1cdFx0c2l6ZV90IGJ5dGVzKVxuLS1cbm1tL2ZpbGVtYXAuYz0yODA0PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yOTA3LVxubW0vZmlsZW1hcC5jOjI5MDg6XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbm1tL2ZpbGVtYXAuYy0yOTA5LVx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYmAqKgoKQWxyaWdodCwgc28gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IGxpa2VseSBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlIGFuZCBwcm9iYWJseSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhhdCBoZWxwcyBtZSBuYXJyb3cgZG93biB3aGVyZSB0byBsb29rIGZvciBpdHMgdXNhZ2UgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgY29kZS4KCk5vdywgbGV0JiMzOTtzIHNlZS4uLiB0aGUgbWVudGlvbiBvZiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgaHVnZSBwYWdlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYmV0dGluZyB0aGF0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiBodWdldGxiZnMuIEEgcXVpY2sgbG9vayBhdCBgbW0vaHVnZXRsYi5jYCBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjEwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjExOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjEyLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjI3PXN0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2Mjg6Zm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjI5LVx0eyB9XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc2PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3OS0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODA6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4MS0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgyOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODMte1xuLS1cbm1tL2h1Z2V0bGIuYz0xMjQ3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEyNjUtXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG5tbS9odWdldGxiLmM6MTI2NjpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XG5tbS9odWdldGxiLmMtMTI2Ny1cdFx0aC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMtLTtcbi0tXG5tbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMTM4My1cbm1tL2h1Z2V0bGIuYzoxMzg0OnN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGIuYy0xMzg1LXtcbi0tXG5tbS9odWdldGxiLmMtMTM5MC1cdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG5tbS9odWdldGxiLmM6MTM5MTpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTM5Mi1cbm1tL2h1Z2V0bGIuYzoxMzkzOlx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xMzk0LX1cbi0tXG5tbS9odWdldGxiLmM9MTQwND12b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTE0MTgtXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2ZyZWVkKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE0MTk6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfZnJlZWQoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE0MjAtXHRcdGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jLTE0MzMtXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG5tbS9odWdldGxiLmM6MTQzNDpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTQzNS1cbi0tXG5tbS9odWdldGxiLmM9MTQ3MD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE1MDctXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNTA4Olx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTA5LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTU4Nj1zdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjAyLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNjAzOlx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MDQtXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jLTE2MjctXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MTYyODpcdFx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MjktXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjYwLVx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG5tbS9odWdldGxiLmM6MTY2MTpcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxubW0vaHVnZXRsYi5jLTE2NjItXHQgKi9cbi0tXG5tbS9odWdldGxiLmMtMTY2Ny1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbm1tL2h1Z2V0bGIuYzoxNjY4Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2NjktXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjg5PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE3MDgtXHRyZXN0b3JlX3Jlc2VydmUgPSBmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYzoxNzA5Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE3MTAtXG4tLVxubW0vaHVnZXRsYi5jLTE3MzAtXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYzoxNzMxOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNzMyLVx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW8oaHN0YXRlX2luZGV4KGgpLFxuLS1cbm1tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTgyLVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjI1ODM6XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI1ODQtXHRcdGVsc2UgaWYgKHJjKVxuLS1cbm1tL2h1Z2V0bGIuYz01MTQ2PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTI4My1cdFx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjUyODQ6XHRcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTI4NS1cdFx0XHRlbHNlIGlmIChyYylcbi0tXG5tbS9odWdldGxiLmM9NTYzMz1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTY0Ny1cdH1cbm1tL2h1Z2V0bGIuYzo1NjQ4Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTU2NDktXG4tLVxubW0vaHVnZXRsYi5jPTcxMzM9Ym9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtNzE0My1cdH1cbm1tL2h1Z2V0bGIuYzo3MTQ0Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy03MTQ1LVx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBsaXN0KTtcbi0tXG5tbS9odWdldGxiLmM9NzE5MD12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vaHVnZXRsYi5jLTcyMTEtXHRcdGZvbGlvX3NldF9odWdldGxiX3RlbXBvcmFyeShvbGRfZm9saW8pO1xubW0vaHVnZXRsYi5jOjcyMTI6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XG5tbS9odWdldGxiLmMtNzIxMy1cbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTU9c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDE5LVx0aWYgKCFyZXQpXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MjA6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xubW0vaHVnZXRsYl92bWVtbWFwLmMtNDIxLVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUyMj1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTc3LVx0aWYgKHJldClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU3ODpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzktXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwMDU6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDYte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAxNT1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDU2LVx0aWYgKGNvdW50X2luY3JlYXNlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNTc6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNTgtXHRcdCptaWdyYXRhYmxlX2NsZWFyZWQgPSB0cnVlO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjA4Mz1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTIwLVx0aWYgKGh3cG9pc29uX2ZpbHRlcihwKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTIxOlx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjEyMi1cdFx0aWYgKG1pZ3JhdGFibGVfY2xlYXJlZClcbi0tXG5tbS9ybWFwLmM9MzE1Mz12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzE2MS1cdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2xhcmdlX21hcGNvdW50LCAwKTtcbm1tL3JtYXAuYzozMTYyOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vcm1hcC5jLTMxNjMtXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBhbmQgTWVtb3J5IFBvaXNvbmluZyBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IEh1Z2VUTEIgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHBvaXNvbmluZyBhbmQgSSYjMzk7dmUgZ290IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpc24mIzM5O3QsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4KCk5vdywgSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscyB0byBlc3RhYmxpc2ggdGhlIGNhbGwgY2hhaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIC0gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYG1tL2ZpbGVtYXAuY2AgdG8gc2VlIGlmIGBmaWxlbWFwX3JlYWRgIGlzIGNhbGxlZCwgYW5kIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGJ1dCBvbmx5IG5vdGluZyBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAgYW5kIGBodWdldGxiZnNfZ2V0X2lub2RlYCBiZWluZyBzdGF0aWMuIEkgYWxzbyBub3RlIHRoYXQgYGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnNgIHVzZXMgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgcmVhbGx5IHN0YW5kIG91dCBhbmQgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYXJlIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYHVucG9pc29uX21lbW9yeWAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuCgpMZXQmIzM5O3Mgc2VlIGlmIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGlzIGFjY2Vzc2libGUuIEFoYSEgSXQmIzM5O3MgY2FsbGVkIGZyb20gYGlzX3JlZl9wYWdlX2h3cG9pc29uYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGluIGBtbS9maWxlbWFwLmNgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBmaWxlbWFwX3JlYWRgLiBUaGF0JiMzOTtzIGEgc29saWQgY2FsbCBjaGFpbjsgYGZpbGVtYXBfcmVhZGAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBsb29rcyBnb29kLiBJIGZvdW5kIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlzX3BhZ2VfaHdwb2lzb25gIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIFRoYXQmIzM5O3MgdGhlbiBjYWxsZWQgYnkgYHVucG9pc29uX21lbW9yeWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLgoKT2theSwgSSYjMzk7bSBjaGVja2luZyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gc2VlIGlmIGB1bnBvaXNvbl9tZW1vcnlgIGlzIGV4cG9ydGVkIG9yIG5vdC4gWWVzLCBpdCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpMYXN0bHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gY2hlY2tpbmcgYG1tL3JtYXAuY2AgZm9yIGB0dHVfY3JlYXRlX2h3cG9pc29uYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHR1X2NyZWF0ZV9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMTk4Ni0gKi9cbm1tL3JtYXAuYzoxOTg3OnN0YXRpYyBib29sIHR0dV9jcmVhdGVfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYy0xOTg4LVx0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jPTIwMDA9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjIxNS1cbm1tL3JtYXAuYzoyMjE2Olx0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgZmxhZ3MpKSB7XG5tbS9ybWFwLmMtMjIxNy1cdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuLS1cbm1tL3JtYXAuYz0yNDI4PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYxOC1cbm1tL3JtYXAuYzoyNjE5Olx0XHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgVFRVX0hXUE9JU09OKSkge1xubW0vcm1hcC5jLTI2MjAtXHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MjkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEhhcmR3YXJlIFBvaXNvbmluZyB3aXRoaW4gdGhlIEh1Z2UgUGFnZXMgQ29kZSoqCgpBbHJpZ2h0LCBzbyBgdHR1X2NyZWF0ZV9od3BvaXNvbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBNeSBtaW5kIGp1bXBzIHRvIHdoZXJlIGl0IG1pZ2h0IGJlIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGhhcmR3YXJlIHBvaXNvbmluZywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gYmVnaW4sIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBsb29raW5nIGZvciBgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZWAuIEh1Z2UgcGFnZXMgYXJlIGEgbGlrZWx5IHRhcmdldCBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBlcnJvciBkZXRlY3Rpb24sIHNvIHRoYXQgZnVuY3Rpb24gbmFtZSBpcyBhIGtleSBsZWFkLiBJJiMzOTttIGVzc2VudGlhbGx5IHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIGhhcmR3YXJlIHBvaXNvbiBjb25kaXRpb24gdG8gdGhlIGxvZ2ljIHRoYXQgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBpdCB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHdoZW4gYSBoYXJkd2FyZSBlcnJvciBhZmZlY3RzIGEgaHVnZSBwYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTg5Mz1URVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC05MDEtICogc2NoZW1lIHVzZWQgaW4gdGhhdCBjYXNlKS4gIFlvdSBwcm9iYWJseSBkb24mIzM5O3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo5MDI6ICogdXNlIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoKSBpbnN0ZWFkLlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtOTAzLSAqXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTExOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTI4LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEyOTpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzMC17XG4tLVxubW0vZmlsZW1hcC5jPTI0NjQ9c3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjQ4NS1cdFx0XHRicmVhaztcbm1tL2ZpbGVtYXAuYzoyNDg2Olx0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG5tbS9maWxlbWFwLmMtMjQ4Ny1cdFx0XHRicmVhaztcbi0tXG5tbS9maWxlbWFwLmM9Mjc1Nj1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLS1cbm1tL2ZpbGVtYXAuYy0yNzYxLVxubW0vZmlsZW1hcC5jOjI3NjI6XHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxubW0vZmlsZW1hcC5jLTI3NjMtXHRcdHJldHVybiBieXRlcztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0MDg9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDQxNjpcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc5Mz1zdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxODE2Olx0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTgxNy1cdFx0XHQvKlxuLS1cbm1tL3JtYXAuYz0yMDAwPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIxMzUtXHRcdFx0ICovXG5tbS9ybWFwLmM6MjEzNjpcdFx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxubW0vcm1hcC5jLTIxMzctXHRcdFx0XHRcdGZvbGlvKTtcbi0tXG5tbS9zaG1lbS5jPTMyMTY9c2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9zaG1lbS5jLTMyNDItXG5tbS9zaG1lbS5jOjMyNDM6XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbm1tL3NobWVtLmMtMzI0NC1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMDg4LVxubW0vdm1zY2FuLmM6MTA4OTpcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMDkwLVx0XHRcdC8qXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz03NTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3Nzc6XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAyNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBIYXJkd2FyZSBQb2lzb25pbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBoYXJkd2FyZSBwb2lzb25pbmcgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUuIFRoZSBjb3JlIGNvbmNlcm4sIGFzIEkgc2VlIGl0LCByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLCBgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZWAsIGBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmVgIGFuZCBgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2VgIGFyZSBzdGF0aWMgaW5saW5lLCBzbyB0aGV5IGRvbiYjMzk7dCBzZWVtIHRvIGJlIHdoZXJlIHRoZSBwcmltYXJ5IGxvZ2ljIGlzIGxvY2F0ZWQuIFRoYXQgc3RyZWFtbGluZXMgdGhlIGludmVzdGlnYXRpb24gc2lnbmlmaWNhbnRseTsgSSBjYW4gY29uY2VudHJhdGUgb24gdGhvc2UgZm91ci4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZSBjb25maWd1cmF0aW9ucyBwbGF5IGludG8gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5nc+KAlHNwZWNpZmljYWxseSwgYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTEFSR0VfRk9MSU9g4oCTIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3VyIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBgbW0vS2NvbmZpZ2AgdG8gZGV0ZXJtaW5lIGhvdyBgTEFSR0VfRk9MSU9gIGlzIGRlZmluZWQgYW5kIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHVuZGVyIHdoYXQgc2l0dWF0aW9ucyB0aGlzIHBvaXNvbi91bnBvaXNvbiBsb2dpYyBpcyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEFSR0VfRk9MSU8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0Njpjb25maWcgTEFSR0VfRk9MSU9cbm1tL0tjb25maWctODQ3LVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYxNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtjb25maWcgTXVzaW5ncyoqCgpPa2F5LCBzbyBgTEFSR0VfRk9MSU9gIGlzIGEgZGVwZW5kZW5jeSwgYSBgZGVmX2Jvb2xgLCBhbmQgaXQmIzM5O3MgYXV0b21hdGljYWxseSBoYW5kbGVkIHdoZW4gYEhVR0VUTEJfUEFHRWAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgc2VsZWN0ZWQuIFRoYXQgbWVhbnMgSSBkb24mIzM5O3QgbmVlZCB0byBnbyBvdXQgb2YgbXkgd2F5IHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LiBJdCYjMzk7cyByZWFsbHkgbW9yZSBvZiBhbiBpbnRlcm5hbCBkZXRhaWwuIFN0aWxsLCBpdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIG5vdGUgaXQsIGp1c3QgZm9yIGNsYXJpdHkmIzM5O3Mgc2FrZS4KCkJ1dCwgdGhpbmtpbmcgYWJvdXQgd2hhdCByZWFsbHkgKmRyaXZlcyogaXRzIGluY2x1c2lvbiwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgcGxheWVycyBoZXJlLiBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzIHRoYXQgdHJpZ2dlciBpdC4gSSBzaG91bGQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGlzIHNvbGlkLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1tL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5zIGFuZCBvdXRzIG9mIGBIVUdFVExCRlNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5OTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIExpbnV4IGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRlbHZpbmcgaW50byB0aGUgSFVHRVRMQkZTIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBIVUdFVExCRlNgLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGxpc3RlZCBpbiBgZnMvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBoaW5nZSBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGltZSB0byBjcmFjayBvcGVuIGBmcy9LY29uZmlnYCBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYEhVR0VUTEJGU2AgdG8gZXZlbiBiZSBjb25zaWRlcmVkLiBUaGlzIHdpbGwgaW5mb3JtIG15IGRlY2lzaW9ucyBsYXRlciwgZGVwZW5kaW5nIG9uIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDY6XHRcbiAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGFuZCBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYEhVR0VUTEJGU2AgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBBbmQgYE1FTU9SWV9GQUlMVVJFYCwgc2ltaWxhcmx5LCBpcyB0aWVkIHRvIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gTWFrZXMgc2Vuc2U7IHdlIGNhbiYjMzk7dCBlbmFibGUgdGhvc2UgZmVhdHVyZXMgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZW0uIFNvLCB0aGUgY29yZSBjb25maWdzIGluIHBsYXkgaGVyZSBhcmUgYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAuCgpOb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhpcy4gSSYjMzk7dmUgZ290IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgYHVucG9pc29uX21lbW9yeWAsIGFuZCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBwaWVjZXMgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHBvaXNvbmluZyBpbiB0aGUgaHVnZXRsYiBjb250ZXh0LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIOKAkyBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIHdoZXJlIGl0JiMzOTtzIG5lZWRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBpdHMgaW50ZWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaHVnZXRsYl9wYWdlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE1lbW9yeSBGYWlsdXJlKioKCkFscmlnaHQsIHNvIHRoZSBmYWlsdXJlIGlzbiYjMzk7dCBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyBJJiMzOTt2ZSAqZXhwbGljaXRseSogZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgZWxpbWluYXRlcyBhIHdob2xlIGNsYXNzIG9mIGVhc2lseS1kZWJ1Z2dlZCBleHRlcm5hbCBjYXVzZXMuIEJ1dCBpdCYjMzk7cyBhbHNvIG5vdCBhIHN0YXRpY2FsbHktZGVmaW5lZCB0aGluZywgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiBzb21lIGR5bmFtaWMgcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIGJpdCBtb3JlIGludm9sdmVkLCBidXQgbWFuYWdlYWJsZS4gVGhlIGNsdWUgaXMgdGhhdCBpdCYjMzk7cyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQgZ2l2ZXMgbWUgYSB2ZXJ5IGZvY3VzZWQgYXJlYSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBOb3csIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mICYjMzk7bWVtb3J5LWZhaWx1cmUmIzM5OywgSSBzaG91bGQgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGB1bnBvaXNvbl9tZW1vcnlgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnVucG9pc29uX21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9rbXNhbi9ob29rcy5jPTM5OD12b2lkIGttc2FuX3VucG9pc29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9rbXNhbi9ob29rcy5jLTQxMC19XG5tbS9rbXNhbi9ob29rcy5jOjQxMTpFWFBPUlRfU1lNQk9MKGttc2FuX3VucG9pc29uX21lbW9yeSk7XG5tbS9rbXNhbi9ob29rcy5jLTQxMi1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3MzA9aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NDAtfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyODQxOkVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg0Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzNTEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqVmVyaWZ5aW5nIE1lbW9yeSBVbnBvaXNvbmluZyBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIGNvbmZpcm1lZC4gVGhlIGB1bnBvaXNvbl9tZW1vcnlgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgd2hhdCBJIGV4cGVjdGVkLiBOb3csIHRvIGRpZyBkZWVwZXIsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiB0aGF0IGNsZWFycyBoYXJkd2FyZS1wb2lzb25lZCBodWdlIHBhZ2VzLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgYXJlYSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IGVycm9ycyBhbmQsIGNyaXRpY2FsbHksIGhvdyBpdCBhdHRlbXB0cyB0byByZWNvdmVyIGZyb20gdGhlbSwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU2OAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipSZWZsZWN0aW5nIG9uIHRoZSBQYXRjaCBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpTbywgdGhpcyBpc24mIzM5O3QgYSBzaW1wbGUgc3RhdGljIHVwZGF0ZSwgYnV0IHJhdGhlciBzb21ldGhpbmcgbW9yZSBkeW5hbWljLCBzb21ldGhpbmcgdGhhdCYjMzk7cyBiZWluZyBhY3RpdmVseSAqbWFuYWdlZCogaW50ZXJuYWxseS4gSSYjMzk7bSBwbGVhc2VkIHdpdGggdGhlIGRpcmVjdGlvbiwgcGFydGljdWxhcmx5IHRoZSBlbXBoYXNpcyBvbiB0aGUgZm9jdXMgZnVuY3Rpb25zLiBUaGV5IHNlZW0gd2VsbC1kZXNpZ25lZC4gVGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQsIGltcG9ydGFudGx5LCB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgcmVhZGlseSBhY2Nlc3NpYmxlLgoKVGhlIGNydXggb2YgdGhpcyBpcyBob3cgd2UmIzM5O3JlIGFkYXB0aW5nIHRoZSBoYXJkd2FyZSBwb2lzb24gaGFuZGxpbmcgZm9yIHRoZXNlIGxhcmdlciBtZW1vcnkgc3RydWN0dXJlczogZm9saW9zIGFuZCBodWdldGxiZnMuIFRoaXMgcGF0Y2ggcmVhbGx5IGRpZ3MgaW50byBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBwYWdlcyB3aGVuIHdlJiMzOTtyZSByZWFkaW5nIHRoZW0gdGhyb3VnaCBgZmlsZW1hcF9yZWFkYCBhbmQsIGNydWNpYWxseSwgaG93IHdlIGFyZSBwcm9wZXJseSB1bnBvaXNvbmluZyB0aGVtLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aXRoIHRoZSBpbmNyZWFzZWQgdXNlIG9mIGxhcmdlIHBhZ2VzIHRoZXNlIGRheXMuCgpJIHRoaW5rICYjMzk7c2V0LXJlc3VsdHMmIzM5OyBpcyB0aGUgcmlnaHQgbmV4dCBsb2dpY2FsIHN0ZXAuIEl0IHNlZW1zIGxpa2UgdGhpcyB3b3VsZCBiZSB0aGUgbmF0dXJhbCBmdW5jdGlvbiBjYWxsIHRvIG1ha2UgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7dW5wb2lzb25fbWVtb3J5JiMzNDssCiAgICAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHdwb2lzb24gaXMgaGFuZGxlZCBmb3IgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMuIEl0IG1vZGlmaWVzIGBmaWxlbWFwX3JlYWRgIHRvIGhhbmRsZSBod3BvaXNvbmVkIGZvbGlvcyBhbmQgdXBkYXRlcyBtZW1vcnkgZmFpbHVyZSByZWNvdmVyeSBsb2dpYy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIE1NIGFuZCBodWdldGxiZnMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3VucG9pc29uX21lbW9yeSYjMzQ7LAogICAgJiMzNDtmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGh3cG9pc29uIGlzIGhhbmRsZWQgZm9yIGxhcmdlIGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBJdCBtb2RpZmllcyBgZmlsZW1hcF9yZWFkYCB0byBoYW5kbGUgaHdwb2lzb25lZCBmb2xpb3MgYW5kIHVwZGF0ZXMgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBNTSBhbmQgaHVnZXRsYmZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM2OjM4LjE1ODMyNzA2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjEyODExODYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcInVucG9pc29uX21lbW9yeVwiLFxuICAgIFwiZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh3cG9pc29uIGlzIGhhbmRsZWQgZm9yIGxhcmdlIGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBJdCBtb2RpZmllcyBgZmlsZW1hcF9yZWFkYCB0byBoYW5kbGUgaHdwb2lzb25lZCBmb2xpb3MgYW5kIHVwZGF0ZXMgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBNTSBhbmQgaHVnZXRsYmZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6MzguMTU4MzM3MDU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM0NzU0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MzIwZGRjMWZhODZmMTI4NWI1N2VmYmFkNzQxYjMwZjUxODlhMzc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjM2OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXFxuaW5kZXggY2Y2YWU2NDc3NmU2Mi4uZWRkYWM0ZWQyMTRiMSAxMDA2NDRcXG4tLS0gYS9mcy9LY29uZmlnXFxuKysrIGIvZnMvS2NvbmZpZ1xcbkBAIC0yNzIsNyArMjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlNcXG4gXFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFx0c2VsZWN0IExBUkdFX0ZPTElPXFxuIFxcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCAyMTZlMWEwZGQwYjIzLi5jZWY3ZTYxYjgyN2Q3IDEwMDY0NFxcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5AQCAtMTg3LDExMyArMTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXFxuLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3XFxuLSAqIEhXUE9JU09OIHBhZ2UuXFxuLSAqL1xcbi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi1cXHRcXHRzaXplX3QgYnl0ZXMpXFxuLXtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xcbi1cXHRzaXplX3Qgc2FmZV9ieXRlcztcXG4tXFxuLVxcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cXG4tXFx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xcbi1cXHRwYWdlKys7XFxuLVxcbi1cXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cXG4tXFx0Zm9yICg7IHNhZmVfYnl0ZXMgXFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcXG4tXFx0XFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXFxuLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLlxcbi0gKi9cXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLXtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbi1cXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XFxuLVxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGVuZF9pbmRleDtcXG4tXFx0bG9mZl90IGlzaXplO1xcbi1cXHRzc2l6ZV90IHJldHZhbCA9IDA7XFxuLVxcbi1cXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdFxcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xcbi1cXG4tXFx0XFx0LyogbnIgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSB0aGlzIHBhZ2UgKi9cXG4tXFx0XFx0bnIgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcXG4tXFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuLVxcdFxcdGlmICghaXNpemUpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRlbmRfaW5kZXggPSAoaXNpemUgLSAxKSBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XFxuLVxcdFxcdGlmIChpbmRleCBcXHUwMDNlIGVuZF9pbmRleClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcXG4tXFx0XFx0XFx0bnIgPSAoKGlzaXplIC0gMSkgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpICsgMTtcXG4tXFx0XFx0XFx0aWYgKG5yIFxcdTAwM2M9IG9mZnNldClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bnIgPSBuciAtIG9mZnNldDtcXG4tXFxuLVxcdFxcdC8qIEZpbmQgdGhlIGZvbGlvICovXFxuLVxcdFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGVcXG4tXFx0XFx0XFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcbi1cXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbi1cXHRcXHRcXHRcXHR3YW50ID0gbnI7XFxuLVxcdFxcdFxcdGVsc2Uge1xcbi1cXHRcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHRcXHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcXG4tXFx0XFx0XFx0XFx0ICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlclxcbi1cXHRcXHRcXHRcXHQgKiBvZmZzZXQuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHR3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHdhbnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUlPO1xcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XFxuLVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0b2Zmc2V0ICs9IGNvcGllZDtcXG4tXFx0XFx0cmV0dmFsICs9IGNvcGllZDtcXG4tXFx0XFx0aWYgKGNvcGllZCAhPSBuciBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudCh0bykpIHtcXG4tXFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuLVxcdFxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGluZGV4ICs9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XFxuLVxcdFxcdG9mZnNldCBcXHUwMDI2PSB+aHVnZV9wYWdlX21hc2soaCk7XFxuLVxcdH1cXG4tXFx0aW9jYi1cXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXFx1MDAzY1xcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKSArIG9mZnNldDtcXG4tXFx0cmV0dXJuIHJldHZhbDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0bG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbkBAIC04ODMsNiArNzc2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRyZXR1cm4gaW5vZGU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTtcXG4rXFxuK1xcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcXG4rXFx0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcXG4rXFx0bWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rfVxcbitcXG4gLypcXG4gICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlclxcbiAgKiBiZSB0YWtlbiBmcm9tIHJlY2xhaW0gLS0gdW5saWtlIHJlZ3VsYXIgZmlsZXN5c3RlbXMuIFRoaXMgbmVlZHMgYW5cXG5AQCAtOTI2LDggKzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0XFx0XFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBTX0lGUkVHOlxcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcXG4tXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XFxuK1xcdFxcdFxcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBTX0lGRElSOlxcbiBcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuQEAgLTEyMDYsNyArMTEwOSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLVxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXFxuK1xcdC5yZWFkX2l0ZXJcXHRcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuIFxcdC5tbWFwXFx0XFx0XFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxcbiBcXHQuZnN5bmNcXHRcXHRcXHQ9IG5vb3BfZnN5bmMsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYVxcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDJhYmFmOTkzMjFlOTAuLjE4Nzg2NDJlNzVlYzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBodWdldGxiZnNfcGFnZWNhY2hlX3ByZXNlbnQoc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4gXFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gZXh0ZXJuIGludCBtb3ZhYmxlX2dpZ2FudGljX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XFxuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtNTk1LDggKzU5NCw4IEBAIGVudW0gaHVnZXRsYl9wYWdlX2ZsYWdzIHtcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1ib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4tXFx0e1xcdHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4rXFx0e1xcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcXHUwMDI2Zm9saW8tXFx1MDAzZXByaXZhdGU7XFx0XFx0XFxcXFxcbiBcXHRcXHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcXHRcXHRcXFxcXFxuIFxcdH1cXG4gXFxuQEAgLTYxNiw3ICs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuICNlbHNlXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIGlubGluZSBib29sXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuK2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4gXFx0eyByZXR1cm4gMDsgfVxcbiBcXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTcyNyw3ICs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzcG9vbDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpby1cXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcXG4gfVxcbkBAIC04NTcsNyArODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG4gXFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcXG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcXG4gdm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuICNlbmRpZlxcbiBcXG4tLypcXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cXG4tICovXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi1cXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuIFxcdHJldHVybiBQQUdFX01BU0sgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaHN0YXRlX2ZpbGUoZmlsZSkpO1xcbkBAIC0xMDg4LDcgKzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMTE1Nyw3ICsxMTUxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5pbmRleCBiMThjMmIyZTdkMmM2Li44NmEyZDBmZWU1NTdiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC0zODcsNyArMzg3LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxcbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxcbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxcbiAgKlxcbkBAIC00OTksNyArNDk5LDcgQEAgc3RydWN0IGZvbGlvIHtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4tXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XFxuK1xcdFxcdFxcdHN0cnVjdCBod3BfcGFnZSAqaHVnZXRsYl9od3BvaXNvbjtcXG4gXFx0LyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovXFxuIFxcdFxcdH07XFxuIFxcdFxcdHN0cnVjdCBwYWdlIF9fcGFnZV8zO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuaW5kZXggNzIyM2Y2ZjRlMmI0MC4uMDdjYzc4NTRiMmRlMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTg5MywxNCArODkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VUcmFuc0NvbXBvdW5kKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBURVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcXG4gI2VuZGlmXFxuIFxcbi0jaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xBUkdFX0ZPTElPKVxcbiAvKlxcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbi0gKiBjb21wb3VuZCBwYWdlLlxcbisgKiBmb2xpb19oYXNfaHdwb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcXG4rICogaXMgbm90IHBvc3NpYmxlIGZvciBmb2xpb3Mgd2hpY2ggaGF2ZSBIVk8gKHNlZSBtZW1vcnktZmFpbHVyZSBmb3IgdGhlXFxuKyAqIHNjaGVtZSB1c2VkIGluIHRoYXQgY2FzZSkuICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMgZGlyZWN0bHk7XFxuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cXG4gICpcXG4gICogVGhpcyBmbGFnIGlzIHNldCBieSBod3BvaXNvbiBoYW5kbGVyLiAgQ2xlYXJlZCBieSBUSFAgc3BsaXQgb3IgZnJlZSBwYWdlLlxcbiAgKi9cXG4gRk9MSU9fRkxBRyhoYXNfaHdwb2lzb25lZCwgRk9MSU9fU0VDT05EX1BBR0UpXFxuK0ZPTElPX1RFU1RfU0VUX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxcbiAjZWxzZVxcbiBGT0xJT19GTEFHX0ZBTFNFKGhhc19od3BvaXNvbmVkKVxcbiAjZW5kaWZcXG5AQCAtMTA0MSw4ICsxMDQ2LDI5IEBAIFBBR0VfVFlQRV9PUFMoU2xhYiwgc2xhYiwgc2xhYilcXG4gXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIEZPTElPX1RZUEVfT1BTKGh1Z2V0bGIsIGh1Z2V0bGIpXFxuK1xcbisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIChSRUFEX09OQ0UoZm9saW8tXFx1MDAzZXBhZ2UucGFnZV90eXBlKSBcXHUwMDNlXFx1MDAzZSAyMykgPT1cXG4rXFx0XFx0KChQR1RZX2h1Z2V0bGIgXFx1MDAzY1xcdTAwM2MgMSkgfCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSB8PSAoMSBcXHUwMDNjXFx1MDAzYyAyMyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGZvbGlvLVxcdTAwM2VwYWdlLnBhZ2VfdHlwZSBcXHUwMDI2PSB+KDEgXFx1MDAzY1xcdTAwM2MgMjMpO1xcbit9XFxuKyNlbHNlXFxuK0ZPTElPX1RFU1RfRkxBR19GQUxTRShodWdlX3BvaXNvbilcXG4rI2VuZGlmXFxuICNlbHNlXFxuIEZPTElPX1RFU1RfRkxBR19GQUxTRShodWdldGxiKVxcbitGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZV9wb2lzb24pXFxuICNlbmRpZlxcbiBcXG4gUEFHRV9UWVBFX09QUyhac21hbGxvYywgenNtYWxsb2MsIHpzbWFsbG9jKVxcbkBAIC0xMDY4LDEwICsxMDk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4gfVxcbiBcXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuK1xcbiAvKlxcbi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xcbi0gKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuLSAqIGZhaWxpbmcgaGFyZHdhcmUuXFxuKyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3RcXG4rICogZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcXG4rICogZmFpbGluZyBoYXJkd2FyZS4gIFRoZSBjYWxsZXIgbWF5IG5vdCBoYXZlIGEgcmVmY291bnQgb24gdGhlIGZvbGlvXFxuKyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuQEAgLTEwODAsMTMgKzExMTAsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFxcdTAwMjZcXHUwMDI2IFBhZ2VIV1BvaXNvbihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpXFxuK1xcdFxcdHJldHVybiBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24ocGFnZSk7XFxuK1xcdC8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqL1xcbitcXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG4tXFx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuK1xcdHJldHVybiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKSB8fFxcbitcXHQgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcXG4gfVxcbiBcXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuaW5kZXggMmMzNzE4ZDU5MmQ2ZC4uMjJkNDg5MzVmZmRhNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xcbiBcXHRBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LFxcbiBcXHRBU19LRVJORUxfRklMRSA9IDEwLFxcdC8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4ndFxcbiBcXHRcXHRcXHRcXHQgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqL1xcbitcXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXFx0LyogSWYgd2UgbWlzcyBpbiB0aGUgcGFnZSBjYWNoZSwgaXQncyBhIGhvbGUgKi9cXG4gXFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cXG4gXFx0QVNfRk9MSU9fT1JERVJfQklUUyA9IDUsXFxuIFxcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxcbkBAIC0zNDUsNiArMzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXFxuIFxcdHJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbit7XFxuK1xcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdHJldHVybiBtYXBwaW5nLVxcdTAwM2VnZnBfbWFzaztcXG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXFxuICAqIGEgZ29vZCBvcmRlciAodGhhdCdzIDFNQiBpZiB5b3UncmUgdXNpbmcgNGtCIHBhZ2VzKVxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4gI2Vsc2VcXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdDhcXG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcXG4gXFx0XFx0cmV0dXJuIDFVIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XFxuIFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIH1cXG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICogQG1heDogTWF4aW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiBAbWluLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cXG4gICpcXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cXG4tICogaW5kaWNhdGUgd2hpY2ggYmFzZSBzaXplIChtaW4pIGFuZCBtYXhpbXVtIHNpemUgKG1heCkgb2YgZm9saW8gdGhlIFZGU1xcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xcbi0gKiBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxcbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxcbisgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2ZcXG4rICogdGhlIGlub2RlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWxcXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXFxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxcbiAgKlxcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cXG4rICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cXG4rICpcXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XFxuICAqIGlzIG5vbi1hdG9taWMuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbWluLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG1heClcXG4rXFx0XFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NQVg7XFxuIH1cXG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxcbiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUlOX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01JTjtcXG4gfVxcbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcXG4gICpcXG4gICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAgKi9cXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisjaWZkZWYgQ09ORklHX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTQuLmU2NjZkZDE0Y2EwYzMgMTAwNjQ0XFxuLS0tIGEvbW0vS2NvbmZpZ1xcbisrKyBiL21tL0tjb25maWdcXG5AQCAtODQzLDExICs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxuIGNvbmZpZyBNTV9JRFxcbiBcXHRkZWZfYm9vbCBuXFxuIFxcbitjb25maWcgTEFSR0VfRk9MSU9cXG4rXFx0ZGVmX2Jvb2wgblxcbitcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuK1xcbiBtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4rXFx0c2VsZWN0IExBUkdFX0ZPTElPXFxuIFxcdHNlbGVjdCBNTV9JRFxcbiBcXHRoZWxwXFxuIFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcXG5pbmRleCA1OGViOWQyNDA2NDM0Li41YThjYzIwZTYyNGU0IDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXG4gXFx0XFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcXG5AQCAtMjY5NSw2ICsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcXG4gXFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XFxuIFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFxcdTAwMjZmaWxwLVxcdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XFxuIFxcbitcXHRcXHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT0lPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuQEAgLTI3NDksNiArMjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKHBvczEgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcXHUwMDNlXFx1MDAzZSBzaGlmdCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuK1xcdFxcdHNpemVfdCBieXRlcylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuK1xcdHNpemVfdCBzYWZlX2J5dGVzO1xcbitcXG4rXFx0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGJ5dGVzO1xcbitcXHRpZiAoaXNfcmVmX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cXG4rXFx0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xcbitcXHRwYWdlKys7XFxuK1xcbitcXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cXG4rXFx0Zm9yICg7IHNhZmVfYnl0ZXMgXFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcXG4rXFx0XFx0aWYgKGlzX3JlZl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbkBAIC0yODI4LDYgKzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdGdvdG8gcHV0X2ZvbGlvcztcXG4gXFx0XFx0ZW5kX29mZnNldCA9IG1pbl90KGxvZmZfdCwgaXNpemUsIGlvY2ItXFx1MDAzZWtpX3BvcyArIGl0ZXItXFx1MDAzZWNvdW50KTtcXG4gXFxuK1xcdFxcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCkpIHtcXG4rXFx0XFx0XFx0c2l6ZV90IGZzaXplID0gbWFwcGluZ19taW5fZm9saW9fbnJieXRlcyhtYXBwaW5nKTtcXG4rXFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDI2IChmc2l6ZSAtIDEpO1xcbitcXHRcXHRcXHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVxcdTAwM2VraV9wb3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xcbitcXHRcXHRcXHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XFxuK1xcbitcXHRcXHRcXHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xcbitcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV9wb3MgKz0gY29waWVkO1xcbitcXHRcXHRcXHRsYXN0X3BvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFxuK1xcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcylcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogT25jZSB3ZSBzdGFydCBjb3B5aW5nIGRhdGEsIHdlIGRvbid0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XFxuIFxcdFxcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XFxuQEAgLTI4NjIsMTQgKzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdGlmICh3cml0YWJseV9tYXBwZWQpXFxuIFxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XFxuIFxcbi1cXHRcXHRcXHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpO1xcbitcXHRcXHRcXHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbitcXHRcXHRcXHRpZiAoY29waWVkIFxcdTAwM2MgYnl0ZXMpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gLUVJTztcXG4rXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7XFxuIFxcbiBcXHRcXHRcXHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xcbiBcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV9wb3MgKz0gY29waWVkO1xcbiBcXHRcXHRcXHRsYXN0X3BvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4gXFxuIFxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcykge1xcbi1cXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuK1xcdFxcdFxcdFxcdGlmICghZXJyb3IpXFxuK1xcdFxcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYuLjM1MzM0MDMwOTEwNzQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTEyNTUsNyArMTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdGlmIChwaW4gXFx1MDAyNlxcdTAwMjYgIWZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAoaXNfbWlncmF0ZV9pc29sYXRlX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKSlcXG5AQCAtMTM4MSw2ICsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcXG4gfVxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXFxuK1xcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG4rXFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxuK1xcbitcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLlxcbiAgKiBJZiB2bWVtbWFwIGV4aXN0cyBmb3IgdGhlIGZvbGlvLCBjbGVhciB0aGUgaHVnZXRsYiBmbGFnIHNvIHRoYXQgdGhlXFxuQEAgLTE0MTksNyArMTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0ICogdG8gdGFpbCBzdHJ1Y3QgcGFnZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXG4gXFx0aC1cXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xcbiBcXHRoLVxcdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xcbkBAIC0xNDkzLDE3ICsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcXG4tXFx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxcbi1cXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG4tXFxuIFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG4gXFx0XFx0aHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oZm9saW8pO1xcbkBAIC0xNTk1LDcgKzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTYyMCw3ICsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTY1MywxNCArMTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHQgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC5cXG4gXFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxcbiBcXHQgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGxcXG4tXFx0ICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS5cXG4rXFx0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXFxuIFxcdCAqL1xcbiBcXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcXG4gXFx0Vk1fV0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZub25faHZvX2ZvbGlvcykgXFx1MDAyNlxcdTAwMjYgcmV0KSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFxcdTAwMjZub25faHZvX2ZvbGlvcywgbHJ1KVxcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHR9XFxuIFxcbkBAIC0xNzc1LDcgKzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gICogc3RhYmxlLiAgRHVlIHRvIGxvY2tpbmcgb3JkZXIsIHdlIGNhbiBvbmx5IHRyeWxvY2tfd3JpdGUuICBJZiB3ZSBjYW5cXG4gICogbm90IGdldCB0aGUgbG9jaywgc2ltcGx5IHJldHVybiBOVUxMIHRvIGNhbGxlci5cXG4gICovXFxuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbiBcXG5AQCAtMzk5OCw3ICs0MDAzLDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcXG4gXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXFx1MDAyNnNyYy1cXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcXG4tXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbitcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbkBAIC01ODA5LDcgKzU4MTQsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdCAqIGRvbid0IGhhdmUgaHdwb2lzb25lZCBzd2FwIGVudHJ5IGZvciBlcnJvcmVkIHZpcnR1YWwgYWRkcmVzcy5cXG4gXFx0XFx0ICogU28gd2UgbmVlZCB0byBibG9jayBodWdlcGFnZSBmYXVsdCBieSBQR19od3BvaXNvbiBiaXQgY2hlY2suXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XFxuK1xcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpIHtcXG4gXFx0XFx0XFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxcbiBcXHRcXHRcXHRcXHRWTV9GQVVMVF9TRVRfSElOREVYKGhzdGF0ZV9pbmRleChoKSk7XFxuIFxcdFxcdFxcdGdvdG8gYmFja291dF91bmxvY2tlZDtcXG5AQCAtNjMxOCw3ICs2MzIzLDcgQEAgaW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4gXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpO1xcbiBcXG4gXFx0cmV0ID0gLUVJTztcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbitcXHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuIFxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrO1xcbiBcXG4gXFx0cmV0ID0gLUVFWElTVDtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCA1MTUwOGE1NWM0MDU1Li5hYjIwOTRlZDMyMGNjIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTE4MDgsNjMgKzE4MDgsODkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gXFxuKy8qIFByb3RlY3RzIGFsbCBsaXN0cyBvZiBod3BfcGFnZXMgKi9cXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhod3BfcGFnZV9sb2NrKTtcXG4rXFxuIC8qXFxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwicmF3IGVycm9yIHBhZ2VcXFwiLFxcbi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLVxcdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cXG4rICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcXFwiZXJyb3IgcGFnZVxcXCIsXFxuKyAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cXG4gICovXFxuLXN0cnVjdCByYXdfaHdwX3BhZ2Uge1xcbi1cXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xcbitzdHJ1Y3QgaHdwX3BhZ2Uge1xcbitcXHRzdHJ1Y3QgaHdwX3BhZ2UgKm5leHQ7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGJvb2wgcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcXHUwMDI2Zm9saW8tXFx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xcbi19XFxuK1xcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLXtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuLVxcdFxcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlc1xcbi1cXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXFxuK1xcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHBhZ2VzXFxuK1xcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cXG4gXFx0ICovXFxuLVxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm1mX211dGV4KTtcXG4tXFxuLVxcdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcXG4tXFx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVxcdTAwM2VmaXJzdCwgbm9kZSkge1xcbi1cXHRcXHRpZiAocGFnZSA9PSBwLVxcdTAwM2VwYWdlKSB7XFxuLVxcdFxcdFxcdHJldCA9IHRydWU7XFxuK1xcdGZvciAocCA9IGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cXHUwMDNlbmV4dCkge1xcbitcXHRcXHRpZiAocGFnZSA9PSBwLVxcdTAwM2VwYWdlKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbitcXHRyZXR1cm4gcCAhPSBOVUxMO1xcbit9XFxuIFxcbisvKlxcbisgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cXG4rICovXFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoZm9saW8sIHBhZ2UpO1xcbit9XFxuK1xcbisvKlxcbisgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuXFxuKyAqIFRoZSBodWdldGxiX2xvY2sga2VlcHMgaHVnZXRsYiBmb2xpb3MgZnJvbSBiZWluZyBmcmVlZC5cXG4rICovXFxuK2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGJvb2wgcmV0O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbitcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdGlmICghZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpIHtcXG4rXFx0XFx0cmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcXG4rdW5sb2NrOlxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xcbitcXHRzdHJ1Y3QgaHdwX3BhZ2UgKnAsICpuZXh0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4gXFxuLVxcdGhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xcbitcXHRuZXh0ID0gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb247XFxuK1xcdGZvbGlvLVxcdTAwM2VodWdldGxiX2h3cG9pc29uID0gTlVMTDtcXG4rXFxuK1xcdHdoaWxlIChuZXh0KSB7XFxuK1xcdFxcdHAgPSBuZXh0O1xcbitcXHRcXHRuZXh0ID0gcC1cXHUwMDNlbmV4dDtcXG4gXFx0XFx0aWYgKG1vdmVfZmxhZylcXG4gXFx0XFx0XFx0U2V0UGFnZUhXUG9pc29uKHAtXFx1MDAzZXBhZ2UpO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTE4ODEsMzQgKzE5MDcsNTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuICNkZWZpbmVcXHRNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRFxcdDNcXHQvKiBmb2xpbyBhbHJlYWR5IHBvaXNvbmVkICovXFxuICNkZWZpbmVcXHRNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEXFx0NFxcdC8qIGV4YWN0IHBhZ2UgYWxyZWFkeSBwb2lzb25lZCAqL1xcbiAjZGVmaW5lXFx0TUZfSFVHRVRMQl9SRVRSWVxcdFxcdDVcXHQvKiBodWdlcGFnZSBpcyBidXN5LCByZXRyeSAqL1xcbitcXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9zZXRfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0aWYgKGZvbGlvX3Rlc3Rfc2V0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xcbitcXHRmb2xpb19zZXRfaHVnZV9wb2lzb24oZm9saW8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRmb2xpb19jbGVhcl9odWdlX3BvaXNvbihmb2xpbyk7XFxuK1xcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFNldCBodWdldGxiIGZvbGlvIGFzIGh3cG9pc29uZWQsIHVwZGF0ZSBmb2xpbyBwcml2YXRlIHJhdyBod3BvaXNvbiBsaXN0XFxuICAqIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBvaXNvbmVkIHBhZ2VzLlxcbiAgKi9cXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgcmV0ID0gaHVnZXRsYl9zZXRfcG9pc29uKGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxcbi1cXHQgKiB0aGVyZSBpcyBsaXR0bGUgbWVhbmluZyB0byBrZWVwIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyBwcmVjaXNlbHksXFxuLVxcdCAqIHNvIHNraXAgdG8gYWRkIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXFxuK1xcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcXG4rXFx0ICogc28gc2tpcCBhZGRpbmcgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xcbi1cXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xcbi1cXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCBoZWFkLVxcdTAwM2VmaXJzdCwgbm9kZSkge1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9yIChwID0gZm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb247IHA7IHAgPSBwLVxcdTAwM2VuZXh0KSB7XFxuIFxcdFxcdGlmIChwLVxcdTAwM2VwYWdlID09IHBhZ2UpXFxuLVxcdFxcdFxcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAocmF3X2h3cCkge1xcbi1cXHRcXHRyYXdfaHdwLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4tXFx0XFx0bGxpc3RfYWRkKFxcdTAwMjZyYXdfaHdwLVxcdTAwM2Vub2RlLCBoZWFkKTtcXG4rXFx0aWYgKHApIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcXG4rXFx0fVxcbitcXG4rXFx0cCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKHApIHtcXG4rXFx0XFx0cC1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuK1xcdFxcdHAtXFx1MDAzZW5leHQgPSBmb2xpby1cXHUwMDNlaHVnZXRsYl9od3BvaXNvbjtcXG4rXFx0XFx0Zm9saW8tXFx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcXG5AQCAtMTkxNywxNiArMTk2NywyMCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKTtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcXG4rXFx0XFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIGh3cF9wYWdlIGlzIG5vdFxcbiBcXHRcXHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGNvdW50O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4gXFx0LypcXG4gXFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJ3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcXG4gXFx0ICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbid0IGV4aXN0LlxcbkBAIC0xOTQxLDcgKzE5OTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xcbitcXHRjb3VudCA9IF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbkBAIC0xOTUwLDggKzIwMDgsOCBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XFxuIFxcdGZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgdHJ1ZSk7XFxuK1xcdGZvbGlvX2NsZWFyX2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbkBAIC0yMTA0LDYgKzIxNjIsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGZsYWcpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfY2xlYXJfcG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gI2VuZGlmXFx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbiBcXG4gLyogRHJvcCB0aGUgZXh0cmEgcmVmY291bnQgaW4gY2FzZSB3ZSBjb21lIGZyb20gbWFkdmlzZSgpICovXFxuQEAgLTI2OTUsOCArMjc1OCw4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIVBhZ2VIV1BvaXNvbihwKSkge1xcbi1cXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXFxcblxcXCIsXFxuK1xcdGlmICghaXNfcGFnZV9od3BvaXNvbihwKSkge1xcbitcXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBwYWdlIGlzIG5vdCBwb2lzb25lZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IHBmbiwgXFx1MDAyNnVucG9pc29uX3JzKTtcXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdH1cXG5AQCAtMjcyNSwxMyArMjc4OCwxOSBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXG4gXFx0Z2hwID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgTUZfVU5QT0lTT04pO1xcbiBcXHRpZiAoIWdocCkge1xcbitcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbiBcXHRcXHRcXHRodWdlID0gdHJ1ZTtcXG4gXFx0XFx0XFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4tXFx0XFx0XFx0aWYgKGNvdW50ID09IDApXFxuK1xcdFxcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gaHVnZXRsYl9jbGVhcl9wb2lzb24oZm9saW8pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkgPyAwIDogLUVCVVNZO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHR9IGVsc2UgaWYgKGdocCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0aWYgKGdocCA9PSAtRUhXUE9JU09OKSB7XFxuIFxcdFxcdFxcdHJldCA9IHB1dF9wYWdlX2JhY2tfYnVkZHkocCkgPyAwIDogLUVCVVNZO1xcbkBAIC0yNzQwLDE2ICsyODA5LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuIFxcdFxcdFxcdHVucG9pc29uX3ByX2luZm8oXFxcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCBwZm4sIFxcdTAwMjZ1bnBvaXNvbl9ycyk7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4tXFx0XFx0XFx0aHVnZSA9IHRydWU7XFxuLVxcdFxcdFxcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XFxuLVxcdFxcdFxcdGlmIChjb3VudCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbi1cXHRcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbitcXHRcXHRodWdlID0gdHJ1ZTtcXG4rXFx0XFx0Y291bnQgPSBmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGNvdW50ID09IDApIHtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdFxcdH1cXG4tXFxuK1xcdFxcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdGlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpIHtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5pbmRleCA3YWMxOWZhYjIyNjMyLi4zMzAwN2U4ZTU0NmEwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZmQxOWEwYmZiZmU3NiAxMDA2NDRcXG4tLS0gYS9tbS9ybWFwLmNcXG4rKysgYi9tbS9ybWFwLmNcXG5AQCAtMTk3OCw2ICsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFNpbmNlIHdlIGNhbm5vdCBzcGxpdCBhIGh1Z2V0bGIgZm9saW8sIHdlIHdhbnQgdG8gaW5zZXJ0IGEgcG9pc29uXFxuKyAqIGVudHJ5IGludG8gdGhlIHBhZ2UgdGFibGUgZm9yIHRoZSB3aG9sZSBmb2xpbyBldmVuIGlmIG9ubHkgb25lIHBhZ2VcXG4rICogaXMgcG9pc29uZWQuICBPdGhlcndpc2UsIHdlJ3ZlIHNwbGl0IGRvd24gdG8gdGhlIFBURSBsZXZlbCBhbmQgd2Ugb25seVxcbisgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlXFxuKyAqL1xcbitzdGF0aWMgYm9vbCB0dHVfY3JlYXRlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4re1xcbitcXHRpZiAoIShmbGFncyBcXHUwMDI2IFRUVV9IV1BPSVNPTikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuK1xcdFxcdHJldHVybiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKTtcXG4rXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4rfVxcbitcXG4gLypcXG4gICogQGFyZzogZW51bSB0dHVfZmxhZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcyBhcmd1bWVudFxcbiAgKi9cXG5AQCAtMTk5Myw3ICsyMDA5LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSwgZW5kX2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XFxuIFxcdGludCBwdGVzID0gMDtcXG4gXFxuIFxcdC8qXFxuQEAgLTIwMjMsOSArMjAzOCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJhbmdlLmVuZCk7XFxuLVxcbi1cXHRcXHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cXG4tXFx0XFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4gXFx0fVxcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXG5AQCAtMjEyMSw3ICsyMTMzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlXFxuIFxcdFxcdFxcdCAqIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBodWdldGxiIHBhZ2UgaXMgcG9pc29uZWQuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTtcXG4rXFx0XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSxcXG4rXFx0XFx0XFx0XFx0XFx0Zm9saW8pO1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXFxuIFxcdFxcdFxcdCAqIFRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgd2hpY2ggUE1EcyBtYXlcXG5AQCAtMjIwMCwxMiArMjIxMywxMiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xcbiBcXHRcXHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xcbiBcXG4tXFx0XFx0aWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XFxuK1xcdFxcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHtcXG4gXFx0XFx0XFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcXG4gXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4gXFx0XFx0XFx0XFx0aHVnZXRsYl9jb3VudF9zdWIoZm9saW9fbnJfcGFnZXMoZm9saW8pLCBtbSk7XFxuIFxcdFxcdFxcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0aHN6KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xcbiBcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG5AQCAtMjQyMyw3ICsyNDM2LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbiBcXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxcbkBAIC0yNDUyLDkgKzI0NjQsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJhbmdlLmVuZCk7XFxuLVxcbi1cXHRcXHQvKiBXZSBuZWVkIHRoZSBodWdlIHBhZ2Ugc2l6ZSBmb3Igc2V0X2h1Z2VfcHRlX2F0KCkgKi9cXG4tXFx0XFx0aHN6ID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKTtcXG4gXFx0fVxcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXG5AQCAtMjYwNywxNCArMjYxNiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXFxuIFxcdFxcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XFxuIFxcbi1cXHRcXHRpZiAoUGFnZUhXUG9pc29uKHN1YnBhZ2UpKSB7XFxuK1xcdFxcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoZm9saW8pLCBmb2xpbyk7XFxuIFxcbiBcXHRcXHRcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbiBcXHRcXHRcXHRcXHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcXG4gXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XFxuIFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbkBAIC0yNjQ0LDcgKzI2NTMsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdGlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHRldmFsLCBoc3opO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRwdGV2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pKTtcXG4gXFx0XFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG4gXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuQEAgLTI2NTcsNyArMjY2Nyw4IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0aWYgKGFub25fZXhjbHVzaXZlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCAgICBodWdldGxiX3RyeV9zaGFyZV9hbm9uX3JtYXAoZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdFxcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHB0ZXZhbCwgaHN6KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHRldmFsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcdFxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbiBcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTI3MDMsNyArMjcxNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgc3dwX3B0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0aHN6KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlKTtcXG4gXFx0XFx0XFx0dHJhY2Vfc2V0X21pZ3JhdGlvbl9wdGUoYWRkcmVzcywgcHRlX3ZhbChzd3BfcHRlKSxcXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzLi40OTJjOWJlZjM2MjA3IDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTMyNDAsNyArMzI0MCw3IEBAIHNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuK1xcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDM1YzNiYjE1YWU5NmEuLjcwZTU0YWNlMGU3NDEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXFxuIFxcdFxcdFxcdGdvdG8ga2VlcDtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2FuJ3QgaGFuZGxlIGxhcmdlXFxuIFxcdFxcdFxcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGRiNTdjNTc2NmFiNjAuLjk0ZWVkY2M3ZjFhOWUgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtNzc0LDcgKzc3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmb2xpbztcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM2OjM4Ljg3Mjg3NzA2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNTQxMzU0MzMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcInVucG9pc29uX21lbW9yeVwiLFxuICAgIFwiZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh3cG9pc29uIGlzIGhhbmRsZWQgZm9yIGxhcmdlIGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBJdCBtb2RpZmllcyBgZmlsZW1hcF9yZWFkYCB0byBoYW5kbGUgaHdwb2lzb25lZCBmb2xpb3MgYW5kIHVwZGF0ZXMgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBNTSBhbmQgaHVnZXRsYmZzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDMyMGRkYzFmYTg2ZjEyODViNTdlZmJhZDc0MWIzMGY1MTg5YTM3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjM2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjIuLmVkZGFjNGVkMjE0YjEgMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4rKysgYi9mcy9LY29uZmlnXG5AQCAtMjcyLDcgKzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tXHRzZWxlY3QgWEFSUkFZX01VTFRJXG4rXHRzZWxlY3QgTEFSR0VfRk9MSU9cbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiBcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDIxNmUxYTBkZDBiMjMuLmNlZjdlNjFiODI3ZDcgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuIH1cbiBcbi0vKlxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cbi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xuLSAqIEhXUE9JU09OIHBhZ2UuXG4tICovXG4tc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi1cdFx0c2l6ZV90IGJ5dGVzKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbi1cdHNpemVfdCBzYWZlX2J5dGVzO1xuLVxuLVx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbi1cdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbi1cdHBhZ2UrKztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSArIDE7XG4tXHRcdFx0aWYgKG5yIFx1MDAzYz0gb2Zmc2V0KVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bnIgPSBuciAtIG9mZnNldDtcbi1cbi1cdFx0LyogRmluZCB0aGUgZm9saW8gKi9cbi1cdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XG4tXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGVcbi1cdFx0XHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRcdFx0d2FudCA9IG5yO1xuLVx0XHRcdGVsc2Uge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxuLVx0XHRcdFx0ICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlclxuLVx0XHRcdFx0ICogb2Zmc2V0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTtcbi1cdFx0XHRcdGlmICh3YW50ID09IDApIHtcbi1cdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHR9XG4tXHRcdG9mZnNldCArPSBjb3BpZWQ7XG4tXHRcdHJldHZhbCArPSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCArPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0b2Zmc2V0IFx1MDAyNj0gfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0fVxuLVx0aW9jYi1cdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcdTAwM2NcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKSArIG9mZnNldDtcbi1cdHJldHVybiByZXR2YWw7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG5AQCAtODgzLDYgKzc3NiwxNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4rXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTtcbitcbitcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbitcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbitcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcbitcdG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbit9XG4rXG4gLypcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXG5AQCAtOTI2LDggKzgzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuK1x0XHRcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZESVI6XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbkBAIC0xMjA2LDcgKzExMDksNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0LnJlYWRfaXRlclx0XHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXG4rXHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MC4uMTg3ODY0MmU3NWVjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIGh1Z2V0bGJmc19wYWdlY2FjaGVfcHJlc2VudChzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTtcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xuQEAgLTI5Miw4ICsyOTIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxuLVx0XHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC01OTUsOCArNTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tXHR7XHR2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbitib29sIGZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbitcdHtcdGNvbnN0IHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuIFx0XHRyZXR1cm4gdGVzdF9iaXQoSFBHXyMjZmxuYW1lLCBwcml2YXRlKTtcdFx0XFxcbiBcdH1cbiBcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gI2Vsc2VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIGlubGluZSBib29sXHRcdFx0XHRcdFx0XFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiBcdHsgcmV0dXJuIDA7IH1cbiBcbiAjZGVmaW5lIFNFVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzcG9vbDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZV9odWdldGxiX3N1YnBvb2w7XG4gfVxuQEAgLTg1Nyw3ICs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbiBcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XG5AQCAtMTA3MCwxMSArMTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiAjZW5kaWZcbiBcbi0vKlxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXG4tICovXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHJldHVybiBQQUdFX01BU0sgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7XG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMTU3LDcgKzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbmluZGV4IGIxOGMyYjJlN2QyYzYuLjg2YTJkMGZlZTU1N2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICszODcsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7XG4gICogQF9odWdldGxiX3N1YnBvb2w6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiLmguXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4gICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC5cbi0gKiBAX2h1Z2V0bGJfaHdwb2lzb246IERvIG5vdCB1c2UgZGlyZWN0bHksIGNhbGwgcmF3X2h3cF9saXN0X2hlYWQoKS5cbisgKiBAaHVnZXRsYl9od3BvaXNvbjogTGlzdCBvZiBwYWdlcyB3aXRoIGh3cG9pc29uLlxuICAqIEBfZGVmZXJyZWRfbGlzdDogRm9saW9zIHRvIGJlIHNwbGl0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAgKiBAX3VudXNlZF9zbGFiX29ial9leHRzOiBQbGFjZWhvbGRlciB0byBtYXRjaCBvYmpfZXh0cyBpbiBzdHJ1Y3Qgc2xhYi5cbiAgKlxuQEAgLTQ5OSw3ICs0OTksNyBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuK1x0XHRcdHN0cnVjdCBod3BfcGFnZSAqaHVnZXRsYl9od3BvaXNvbjtcbiBcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3MjIzZjZmNGUyYjQwLi4wN2NjNzg1NGIyZGUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtODkzLDE0ICs4OTMsMTkgQEAgc3RhdGljIGlubGluZSBpbnQgUGFnZVRyYW5zQ29tcG91bmQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gVEVTVFBBR0VGTEFHX0ZBTFNFKFRyYW5zQ29tcG91bmQsIHRyYW5zY29tcG91bmQpXG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTEFSR0VfRk9MSU8pXG4gLypcbi0gKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxuLSAqIGNvbXBvdW5kIHBhZ2UuXG4rICogZm9saW9faGFzX2h3cG9pc29uZWQgaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHBhZ2UgaXMgaHdwb2lzb25lZCBpbiB0aGVcbisgKiBmb2xpby4gIFRoYXQgcGFnZSB3aWxsIHVzdWFsbHkgYWxzbyBoYXZlIHRoZSBIV1BvaXNvbiBmbGFnIHNldCwgYnV0IHRoaXNcbisgKiBpcyBub3QgcG9zc2libGUgZm9yIGZvbGlvcyB3aGljaCBoYXZlIEhWTyAoc2VlIG1lbW9yeS1mYWlsdXJlIGZvciB0aGVcbisgKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xuKyAqIHVzZSBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKCkgaW5zdGVhZC5cbiAgKlxuICAqIFRoaXMgZmxhZyBpcyBzZXQgYnkgaHdwb2lzb24gaGFuZGxlci4gIENsZWFyZWQgYnkgVEhQIHNwbGl0IG9yIGZyZWUgcGFnZS5cbiAgKi9cbiBGT0xJT19GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX1NFVF9GTEFHKGhhc19od3BvaXNvbmVkLCBGT0xJT19TRUNPTkRfUEFHRSlcbitGT0xJT19URVNUX0NMRUFSX0ZMQUcoaGFzX2h3cG9pc29uZWQsIEZPTElPX1NFQ09ORF9QQUdFKVxuICNlbHNlXG4gRk9MSU9fRkxBR19GQUxTRShoYXNfaHdwb2lzb25lZClcbiAjZW5kaWZcbkBAIC0xMDQxLDggKzEwNDYsMjkgQEAgUEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcbitcbisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfaHVnZV9wb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gKFJFQURfT05DRShmb2xpby1cdTAwM2VwYWdlLnBhZ2VfdHlwZSkgXHUwMDNlXHUwMDNlIDIzKSA9PVxuK1x0XHQoKFBHVFlfaHVnZXRsYiBcdTAwM2NcdTAwM2MgMSkgfCAxKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIHw9ICgxIFx1MDAzY1x1MDAzYyAyMyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdlX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGZvbGlvLVx1MDAzZXBhZ2UucGFnZV90eXBlIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyAyMyk7XG4rfVxuKyNlbHNlXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxuKyNlbmRpZlxuICNlbHNlXG4gRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpXG4rRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2VfcG9pc29uKVxuICNlbmRpZlxuIFxuIFBBR0VfVFlQRV9PUFMoWnNtYWxsb2MsIHpzbWFsbG9jLCB6c21hbGxvYylcbkBAIC0xMDY4LDEwICsxMDk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XG4gfVxuIFxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbitib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4rXG4gLypcbi0gKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xuLSAqIGJlc3QgZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbi0gKiBmYWlsaW5nIGhhcmR3YXJlLlxuKyAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuICBUaGlzIGNoZWNrIGlzIGJlc3RcbisgKiBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuKyAqIGZhaWxpbmcgaGFyZHdhcmUuICBUaGUgY2FsbGVyIG1heSBub3QgaGF2ZSBhIHJlZmNvdW50IG9uIHRoZSBmb2xpb1xuKyAqIGNvbnRhaW5pbmcgdGhlIHBhZ2UsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBub3QgdHJpcCBhbnkgYXNzZXJ0aW9ucy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtMTA4MCwxMyArMTExMCwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbitcdGlmIChmb2xpb190ZXN0X2h1Z2VfcG9pc29uKGZvbGlvKSlcbitcdFx0cmV0dXJuIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihwYWdlKTtcbitcdC8qIEluIGNhc2Ugd2UgcmFjZWQgd2l0aCBodWdldGxiIHRyYW5zZmVycmluZyBmbGFncyAqL1xuK1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGlzX3JlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4rXHRcdHJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuLVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuK1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSB8fFxuK1x0ICAgICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuIH1cbiBcbiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMmMzNzE4ZDU5MmQ2ZC4uMjJkNDg5MzVmZmRhNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcbiBcdFx0XHRcdCAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovXG4rXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCdzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xuIFx0cmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICs0MDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDFVIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIE1BWF9QQUdFQ0FDSEVfT1JERVIpO1xuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG5AQCAtNDA1LDI5ICs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbisgKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvclxuKyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxuKyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4rICogaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4gICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuXG4gICpcbisgKiBodWdldGxiIGNhbGxzIHRoaXMgd2l0aCBvcmRlcnMgbGFyZ2VyIHRoYW4gTUFYX1BBR0VDQUNIRV9PUkRFUi5cbisgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuKyAqXG4gICogQ29udGV4dDogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGUgaW5vZGUgaXMgYWN0aXZlIGFzIGl0XG4gICogaXMgbm9uLWF0b21pYy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtaW4sXG4tXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBtYXgpXG4rXHRcdHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuO1xuLVxuLVx0aWYgKG1pbiBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWluID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbi1cdGlmIChtYXggXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4gXHRpZiAobWF4IFx1MDAzYyBtaW4pXG4gXHRcdG1heCA9IG1pbjtcbiBcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIChtYXBwaW5nLVx1MDAzZWZsYWdzIFx1MDAyNiBBU19GT0xJT19PUkRFUl9NQVhfTUFTSykgXHUwMDNlXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcbiB9XG5AQCAtNDY4LDcgKzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19MQVJHRV9GT0xJT1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbiBcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li5lNjY2ZGQxNGNhMGMzIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSArODQzLDE1IEBAIGNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuIGNvbmZpZyBNTV9JRFxuIFx0ZGVmX2Jvb2wgblxuIFxuK2NvbmZpZyBMQVJHRV9GT0xJT1xuK1x0ZGVmX2Jvb2wgblxuK1x0c2VsZWN0IFhBUlJBWV9NVUxUSVxuK1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIFx0c2VsZWN0IENPTVBBQ1RJT05cbi1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBMQVJHRV9GT0xJT1xuIFx0c2VsZWN0IE1NX0lEXG4gXHRoZWxwXG4gXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDU4ZWI5ZDI0MDY0MzQuLjVhOGNjMjBlNjI0ZTQgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTI0ODMsNiArMjQ4Myw4IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZ2V0X3JlYWRfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICghZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4rXHRcdFx0YnJlYWs7XG4gXHRcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpXG5AQCAtMjY5NSw2ICsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcbiBcdGlmICghZm9saW9fYmF0Y2hfY291bnQoZmJhdGNoKSkge1xuIFx0XHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxwLCBcdTAwMjZmaWxwLVx1MDAzZWZfcmEsIG1hcHBpbmcsIGluZGV4KTtcbiBcbitcdFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9JTylcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuQEAgLTI3NDksNiArMjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIChwb3MxIFx1MDAzZVx1MDAzZSBzaGlmdCA9PSBwb3MyIFx1MDAzZVx1MDAzZSBzaGlmdCk7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4rXHRcdHNpemVfdCBieXRlcylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4rXHRzaXplX3Qgc2FmZV9ieXRlcztcbitcbitcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4rXHRcdHJldHVybiBieXRlcztcbitcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuK1x0c2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpO1xuK1x0cGFnZSsrO1xuK1xuK1x0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4rXHRmb3IgKDsgc2FmZV9ieXRlcyBcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXG4rXHRcdGlmIChpc19yZWZfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSkpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuQEAgLTI4MjgsNiArMjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyArIGl0ZXItXHUwMDNlY291bnQpO1xuIFxuK1x0XHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCkpIHtcbitcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuK1x0XHRcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgKGZzaXplIC0gMSk7XG4rXHRcdFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cdTAwM2VraV9wb3MsXG4rXHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuK1x0XHRcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcbitcbitcdFx0XHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xuK1x0XHRcdGlvY2ItXHUwMDNla2lfcG9zICs9IGNvcGllZDtcbitcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qXG4gXHRcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxuIFx0XHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxuQEAgLTI4NjIsMTQgKzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbitcdFx0XHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuK1x0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xuIFxuIFx0XHRcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XG4gXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbitcdFx0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2Li4zNTMzNDAzMDkxMDc0IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MTMsNyArNDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPT0gSFBBR0VfUE1EX05SIC0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjQwYWU5NjdiOWVjY2MgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEyNTUsNyArMTI1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdGlmIChwaW4gXHUwMDI2XHUwMDI2ICFmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoaXNfbWlncmF0ZV9pc29sYXRlX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkpXG5AQCAtMTM4MSw2ICsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdC8qXG4rXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4rXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbitcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4rXG4rXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK31cbitcbiAvKlxuICAqIFJlbW92ZSBodWdldGxiIGZvbGlvIGZyb20gbGlzdHMuXG4gICogSWYgdm1lbW1hcCBleGlzdHMgZm9yIHRoZSBmb2xpbywgY2xlYXIgdGhlIGh1Z2V0bGIgZmxhZyBzbyB0aGF0IHRoZVxuQEAgLTE0MTksNyArMTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdCAqIHRvIHRhaWwgc3RydWN0IHBhZ2VzLlxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4tXHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4rXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFxuIFx0aC1cdTAwM2Vucl9odWdlX3BhZ2VzLS07XG4gXHRoLVx1MDAzZW5yX2h1Z2VfcGFnZXNfbm9kZVtuaWRdLS07XG5AQCAtMTQ5MywxNyArMTUwNSwxMCBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbitcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcbi1cdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHN1YnBhZ2VzIHJldXNhYmxlLlxuLVx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuLVx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbi1cbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2NtYShmb2xpbykpXG4gXHRcdGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKGZvbGlvKTtcbkBAIC0xNTk1LDcgKzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTYyMCw3ICsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0XHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4rXHRcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTE2NTMsMTQgKzE2NTgsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqIHNob3VsZCBvbmx5IGJlIHBhZ2VzIG9uIHRoZSBub25faHZvX2ZvbGlvcyBsaXN0LlxuIFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxuIFx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG4tXHQgKiBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuK1x0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXG4gXHQgKi9cbiBcdFZNX1dBUk5fT04oIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpO1xuIFx0Vk1fV0FSTl9PTihyZXQgXHUwMDNjIDApO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5vbl9odm9fZm9saW9zKSBcdTAwMjZcdTAwMjYgcmV0KSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbi1cdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH1cbiBcbkBAIC0xNzc1LDcgKzE3ODAsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiBcbkBAIC0zOTk4LDcgKzQwMDMsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuIFxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnNyYy1cdTAwM2VodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkge1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdFx0XHRpZiAoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7XG5AQCAtNTgwOSw3ICs1ODE0LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHQgKiBkb24ndCBoYXZlIGh3cG9pc29uZWQgc3dhcCBlbnRyeSBmb3IgZXJyb3JlZCB2aXJ0dWFsIGFkZHJlc3MuXG4gXHRcdCAqIFNvIHdlIG5lZWQgdG8gYmxvY2sgaHVnZXBhZ2UgZmF1bHQgYnkgUEdfaHdwb2lzb24gYml0IGNoZWNrLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSkge1xuK1x0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKSB7XG4gXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuIFx0XHRcdFx0Vk1fRkFVTFRfU0VUX0hJTkRFWChoc3RhdGVfaW5kZXgoaCkpO1xuIFx0XHRcdGdvdG8gYmFja291dF91bmxvY2tlZDtcbkBAIC02MzE4LDcgKzYzMjMsNyBAQCBpbnQgaHVnZXRsYl9tZmlsbF9hdG9taWNfcHRlKHB0ZV90ICpkc3RfcHRlLFxuIFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBkc3RfbW0sIGRzdF9wdGUpO1xuIFxuIFx0cmV0ID0gLUVJTztcbi1cdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbitcdGlmIChmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbiBcdFx0Z290byBvdXRfcmVsZWFzZV91bmxvY2s7XG4gXG4gXHRyZXQgPSAtRUVYSVNUO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1Li5hYjIwOTRlZDMyMGNjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTE4MDgsNjMgKzE4MDgsODkgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuIFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gXG4rLyogUHJvdGVjdHMgYWxsIGxpc3RzIG9mIGh3cF9wYWdlcyAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaHdwX3BhZ2VfbG9jayk7XG4rXG4gLypcbi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXCJyYXcgZXJyb3IgcGFnZVwiLFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4rICogaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcImVycm9yIHBhZ2VcIixcbisgKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiBmaWVsZC5cbiAgKi9cbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4rc3RydWN0IGh3cF9wYWdlIHtcbitcdHN0cnVjdCBod3BfcGFnZSAqbmV4dDtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVx1MDAyNmZvbGlvLVx1MDAzZV9odWdldGxiX2h3cG9pc29uO1xuLX1cbitcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi17XG4tXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9oZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbi1cdFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIFJhd0h3cFVucmVsaWFibGUgaXMgc2V0LCBrZXJuZWwgbG9zdCB0cmFjayBvZiB3aGljaCBzdWJwYWdlc1xuLVx0ICogYXJlIEhXUE9JU09OLiBTbyByZXR1cm4gYXMgaWYgQUxMIHN1YnBhZ2VzIGFyZSBIV1BPSVNPTmVkLlxuK1x0ICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggcGFnZXNcbitcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBwYWdlcyBhcmUgSFdQT0lTT05lZC5cbiBcdCAqL1xuLVx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuK1x0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdwX3BhZ2VfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuLVxuLVx0cmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgcmF3X2h3cF9oZWFkLVx1MDAzZWZpcnN0LCBub2RlKSB7XG4tXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSkge1xuLVx0XHRcdHJldCA9IHRydWU7XG4rXHRmb3IgKHAgPSBmb2xpby1cdTAwM2VodWdldGxiX2h3cG9pc29uOyBwOyBwID0gcC1cdTAwM2VuZXh0KSB7XG4rXHRcdGlmIChwYWdlID09IHAtXHUwMDNlcGFnZSlcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuIFx0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuK1x0cmV0dXJuIHAgIT0gTlVMTDtcbit9XG4gXG4rLypcbisgKiBDaGVjayBpZiBhIGdpdmVuIEBwYWdlIGluIGEgaHVnZXRsYiBmb2xpbyBpcyBIV1BPSVNPTi5cbisgKi9cbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gcHJlY2lzZV9wYWdlX3BvaXNvbmVkKGZvbGlvLCBwYWdlKTtcbit9XG4rXG4rLypcbisgKiBXZSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUgZm9saW8gY29udGFpbmluZyB0aGlzIHBhZ2UuXG4rICogVGhlIGh1Z2V0bGJfbG9jayBrZWVwcyBodWdldGxiIGZvbGlvcyBmcm9tIGJlaW5nIGZyZWVkLlxuKyAqL1xuK2Jvb2wgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0Ym9vbCByZXQ7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbitcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdGlmICghZm9saW9fdGVzdF9odWdlX3BvaXNvbihmb2xpbykpIHtcbitcdFx0cmV0ID0gUGFnZUhXUG9pc29uKHBhZ2UpO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbitcdHJldCA9IHByZWNpc2VfcGFnZV9wb2lzb25lZChmb2xpbywgcGFnZSk7XG4rdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcCwgKm5leHQ7XG4rXHRzdHJ1Y3QgaHdwX3BhZ2UgKnAsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7XG4rXHRuZXh0ID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjtcbitcdGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb24gPSBOVUxMO1xuK1xuK1x0d2hpbGUgKG5leHQpIHtcbitcdFx0cCA9IG5leHQ7XG4rXHRcdG5leHQgPSBwLVx1MDAzZW5leHQ7XG4gXHRcdGlmIChtb3ZlX2ZsYWcpXG4gXHRcdFx0U2V0UGFnZUhXUG9pc29uKHAtXHUwMDNlcGFnZSk7XG4gXHRcdGVsc2VcbkBAIC0xODgxLDM0ICsxOTA3LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuICNkZWZpbmVcdE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEXHQzXHQvKiBmb2xpbyBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRFx0NFx0LyogZXhhY3QgcGFnZSBhbHJlYWR5IHBvaXNvbmVkICovXG4gI2RlZmluZVx0TUZfSFVHRVRMQl9SRVRSWVx0XHQ1XHQvKiBodWdlcGFnZSBpcyBidXN5LCByZXRyeSAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfc2V0X3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlmIChmb2xpb190ZXN0X3NldF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4rXHRcdHJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDtcbitcdGZvbGlvX3NldF9odWdlX3BvaXNvbihmb2xpbyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl9jbGVhcl9wb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRpZiAoIWZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0Zm9saW9fY2xlYXJfaHVnZV9wb2lzb24oZm9saW8pO1xuK1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogU2V0IGh1Z2V0bGIgZm9saW8gYXMgaHdwb2lzb25lZCwgdXBkYXRlIGZvbGlvIHByaXZhdGUgcmF3IGh3cG9pc29uIGxpc3RcbiAgKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBwb2lzb25lZCBwYWdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xuK1x0c3RydWN0IGh3cF9wYWdlICpwO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCByZXQgPSBodWdldGxiX3NldF9wb2lzb24oZm9saW8pO1xuIFxuIFx0LypcbiBcdCAqIE9uY2UgdGhlIGh3cG9pc29uIGh1Z2VwYWdlIGhhcyBsb3N0IHJlbGlhYmxlIHJhdyBlcnJvciBpbmZvLFxuLVx0ICogdGhlcmUgaXMgbGl0dGxlIG1lYW5pbmcgdG8ga2VlcCBhZGRpdGlvbmFsIGVycm9yIGluZm8gcHJlY2lzZWx5LFxuLVx0ICogc28gc2tpcCB0byBhZGQgYWRkaXRpb25hbCByYXcgZXJyb3IgaW5mby5cbitcdCAqIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgYWRkaXRpb25hbCBlcnJvciBpbmZvIHByZWNpc2VseSxcbitcdCAqIHNvIHNraXAgYWRkaW5nIGFkZGl0aW9uYWwgcmF3IGVycm9yIGluZm8uXG4gXHQgKi9cbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEO1xuLVx0aGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcdGZvciAocCA9IGZvbGlvLVx1MDAzZWh1Z2V0bGJfaHdwb2lzb247IHA7IHAgPSBwLVx1MDAzZW5leHQpIHtcbiBcdFx0aWYgKHAtXHUwMDNlcGFnZSA9PSBwYWdlKVxuLVx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0cmF3X2h3cCA9IGttYWxsb2Nfb2JqKHN0cnVjdCByYXdfaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHJhd19od3ApIHtcbi1cdFx0cmF3X2h3cC1cdTAwM2VwYWdlID0gcGFnZTtcbi1cdFx0bGxpc3RfYWRkKFx1MDAyNnJhd19od3AtXHUwMDNlbm9kZSwgaGVhZCk7XG4rXHRpZiAocCkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuIE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQ7XG4rXHR9XG4rXG4rXHRwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHApIHtcbitcdFx0cC1cdTAwM2VwYWdlID0gcGFnZTtcbitcdFx0cC1cdTAwM2VuZXh0ID0gZm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbjtcbitcdFx0Zm9saW8tXHUwMDNlaHVnZXRsYl9od3BvaXNvbiA9IHA7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcbkBAIC0xOTE3LDE2ICsxOTY3LDIwIEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqL1xuIFx0XHRmb2xpb19zZXRfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pO1xuIFx0XHQvKlxuLVx0XHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgcmF3X2h3cF9wYWdlIGlzIG5vdFxuK1x0XHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgaHdwX3BhZ2UgaXMgbm90XG4gXHRcdCAqIHVzZWQgYW55IG1vcmUsIHNvIGZyZWUgaXQuXG4gXHRcdCAqL1xuIFx0XHRfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xuIFx0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod3BfcGFnZV9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBjb3VudDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4gXHQvKlxuIFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJ3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcbiBcdCAqIHBhZ2VzIGZvciB0YWlsIHBhZ2VzIGFyZSByZXF1aXJlZCBidXQgdGhleSBkb24ndCBleGlzdC5cbkBAIC0xOTQxLDcgKzE5OTUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcdGNvdW50ID0gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3cF9wYWdlX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBjb3VudDtcbiB9XG4gXG4gdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMTk1MCw4ICsyMDA4LDggQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHJldHVybjtcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRmb2xpb19jbGVhcl9od3BvaXNvbihmb2xpbyk7XG4gXHRmb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIHRydWUpO1xuK1x0Zm9saW9fY2xlYXJfaGFzX2h3cG9pc29uZWQoZm9saW8pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5AQCAtMjEwNCw2ICsyMTYyLDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBmbGFnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWZcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiBcbiAvKiBEcm9wIHRoZSBleHRyYSByZWZjb3VudCBpbiBjYXNlIHdlIGNvbWUgZnJvbSBtYWR2aXNlKCkgKi9cbkBAIC0yNjk1LDggKzI3NTgsOCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbiBcbi1cdGlmICghUGFnZUhXUG9pc29uKHApKSB7XG4tXHRcdHVucG9pc29uX3ByX2luZm8oXCIlI2x4OiBwYWdlIHdhcyBhbHJlYWR5IHVucG9pc29uZWRcXG5cIixcbitcdGlmICghaXNfcGFnZV9od3BvaXNvbihwKSkge1xuK1x0XHR1bnBvaXNvbl9wcl9pbmZvKFwiJSNseDogcGFnZSBpcyBub3QgcG9pc29uZWRcXG5cIixcbiBcdFx0XHRcdCBwZm4sIFx1MDAyNnVucG9pc29uX3JzKTtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG5AQCAtMjcyNSwxMyArMjc4OCwxOSBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFxuIFx0Z2hwID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgTUZfVU5QT0lTT04pO1xuIFx0aWYgKCFnaHApIHtcbitcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRcdGh1Z2UgPSB0cnVlO1xuIFx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApXG4rXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IGh1Z2V0bGJfY2xlYXJfcG9pc29uKGZvbGlvKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXQgPSBUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkgPyAwIDogLUVCVVNZO1xuIFx0XHR9XG4tXHRcdHJldCA9IGZvbGlvX3Rlc3RfY2xlYXJfaHdwb2lzb24oZm9saW8pID8gMCA6IC1FQlVTWTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9IGVsc2UgaWYgKGdocCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoZ2hwID09IC1FSFdQT0lTT04pIHtcbiBcdFx0XHRyZXQgPSBwdXRfcGFnZV9iYWNrX2J1ZGR5KHApID8gMCA6IC1FQlVTWTtcbkBAIC0yNzQwLDE2ICsyODA5LDE4IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRcdFx0dW5wb2lzb25fcHJfaW5mbyhcIiUjbHg6IGZhaWxlZCB0byBncmFiIHBhZ2VcXG5cIixcbiBcdFx0XHRcdFx0IHBmbiwgXHUwMDI2dW5wb2lzb25fcnMpO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdGh1Z2UgPSB0cnVlO1xuLVx0XHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4tXHRcdFx0aWYgKGNvdW50ID09IDApIHtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdFx0XHR9XG4rXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0aHVnZSA9IHRydWU7XG4rXHRcdGNvdW50ID0gZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdGlmIChjb3VudCA9PSAwKSB7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVxuK1x0XHRyZXQgPSBodWdldGxiX2NsZWFyX3BvaXNvbihmb2xpbyk7XG4rXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRpZiAoVGVzdENsZWFyUGFnZUhXUG9pc29uKHApKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMi4uMzMwMDdlOGU1NDZhMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xODEzLDcgKzE4MTMsNyBAQCBzdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4gXHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiBcdFx0XHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuK1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcbiBcdFx0XHQgKiBpbiBhbGwgY2FzZXMgeWV0LlxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZmQxOWEwYmZiZmU3NiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMTk3OCw2ICsxOTc4LDIyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0ICAgICBGUEJfUkVTUEVDVF9XUklURSB8IEZQQl9SRVNQRUNUX1NPRlRfRElSVFkpO1xuIH1cbiBcbisvKlxuKyAqIFNpbmNlIHdlIGNhbm5vdCBzcGxpdCBhIGh1Z2V0bGIgZm9saW8sIHdlIHdhbnQgdG8gaW5zZXJ0IGEgcG9pc29uXG4rICogZW50cnkgaW50byB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIHdob2xlIGZvbGlvIGV2ZW4gaWYgb25seSBvbmUgcGFnZVxuKyAqIGlzIHBvaXNvbmVkLiAgT3RoZXJ3aXNlLCB3ZSd2ZSBzcGxpdCBkb3duIHRvIHRoZSBQVEUgbGV2ZWwgYW5kIHdlIG9ubHlcbisgKiB3YW50IHRvIHBvaXNvbiB0aGUgcHJlY2lzZSBwYWdlXG4rICovXG4rc3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4re1xuK1x0aWYgKCEoZmxhZ3MgXHUwMDI2IFRUVV9IV1BPSVNPTikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRyZXR1cm4gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4rXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuK31cbitcbiAvKlxuICAqIEBhcmc6IGVudW0gdHR1X2ZsYWdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgYXJndW1lbnRcbiAgKi9cbkBAIC0xOTkzLDcgKzIwMDksNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4tXHR1bnNpZ25lZCBsb25nIGhzeiA9IDA7XG4gXHRpbnQgcHRlcyA9IDA7XG4gXG4gXHQvKlxuQEAgLTIwMjMsOSArMjAzOCw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqL1xuIFx0XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCxcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4tXG4tXHRcdC8qIFdlIG5lZWQgdGhlIGh1Z2UgcGFnZSBzaXplIGZvciBzZXRfaHVnZV9wdGVfYXQoKSAqL1xuLVx0XHRoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuIFx0fVxuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFxuQEAgLTIxMjEsNyArMjEzMyw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICogVGhlIHRyeV90b191bm1hcCgpIGlzIG9ubHkgcGFzc2VkIGEgaHVnZXRsYiBwYWdlXG4gXHRcdFx0ICogaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGh1Z2V0bGIgcGFnZSBpcyBwb2lzb25lZC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRWTV9CVUdfT05fUEFHRSghUGFnZUhXUG9pc29uKHN1YnBhZ2UpLCBzdWJwYWdlKTtcbitcdFx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxuK1x0XHRcdFx0XHRmb2xpbyk7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBodWdlX3BtZF91bnNoYXJlIG1heSB1bm1hcCBhbiBlbnRpcmUgUE1EIHBhZ2UuXG4gXHRcdFx0ICogVGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSB3aGljaCBQTURzIG1heVxuQEAgLTIyMDAsMTIgKzIyMTMsMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0LyogVXBkYXRlIGhpZ2ggd2F0ZXJtYXJrIGJlZm9yZSB3ZSBsb3dlciByc3MgKi9cbiBcdFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcbiBcbi1cdFx0aWYgKFBhZ2VIV1BvaXNvbihzdWJwYWdlKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XG4rXHRcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBmbGFncykpIHtcbiBcdFx0XHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkoc3VicGFnZSkpO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4gXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcbi1cdFx0XHRcdFx0XHRoc3opO1xuK1x0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbiBcdFx0XHRcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xuQEAgLTI0MjMsNyArMjQzNiw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHRlbnVtIHR0dV9mbGFncyBmbGFncyA9IChlbnVtIHR0dV9mbGFncykobG9uZylhcmc7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHVuc2lnbmVkIGxvbmcgaHN6ID0gMDtcbiBcbiBcdC8qXG4gXHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxuQEAgLTI0NTIsOSArMjQ2NCw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICovXG4gXHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cmFuZ2UuZW5kKTtcbi1cbi1cdFx0LyogV2UgbmVlZCB0aGUgaHVnZSBwYWdlIHNpemUgZm9yIHNldF9odWdlX3B0ZV9hdCgpICovXG4tXHRcdGhzeiA9IGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSk7XG4gXHR9XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXG5AQCAtMjYwNywxNCArMjYxNiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVwZGF0ZSBoaWdoIHdhdGVybWFyayBiZWZvcmUgd2UgbG93ZXIgcnNzICovXG4gXHRcdHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7XG4gXG4tXHRcdGlmIChQYWdlSFdQb2lzb24oc3VicGFnZSkpIHtcbitcdFx0aWYgKHR0dV9jcmVhdGVfaHdwb2lzb24oZm9saW8sIHN1YnBhZ2UsIFRUVV9IV1BPSVNPTikpIHtcbiBcdFx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG4gXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0XHRcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xuIFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsLFxuLVx0XHRcdFx0XHRcdGhzeik7XG4rXHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG5AQCAtMjY0NCw3ICsyNjUzLDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChhcmNoX3VubWFwX29uZShtbSwgdm1hLCBhZGRyZXNzLCBwdGV2YWwpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcbi1cdFx0XHRcdFx0XHRcdHB0ZXZhbCwgaHN6KTtcbitcdFx0XHRcdFx0XHRcdHB0ZXZhbCxcbitcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pKTtcbiBcdFx0XHRcdGVsc2VcbiBcdFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4gXHRcdFx0XHRyZXQgPSBmYWxzZTtcbkBAIC0yNjU3LDcgKzI2NjcsOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgaHVnZXRsYl90cnlfc2hhcmVfYW5vbl9ybWFwKGZvbGlvKSkge1xuIFx0XHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxuLVx0XHRcdFx0XHRcdFx0cHRldmFsLCBoc3opO1xuK1x0XHRcdFx0XHRcdFx0cHRldmFsLFxuK1x0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykpO1xuIFx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbiBcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbiBcdFx0XHRcdFx0YnJlYWs7XG5AQCAtMjcwMyw3ICsyNzE0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdH1cbiBcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiBcdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUsXG4tXHRcdFx0XHRcdFx0aHN6KTtcbitcdFx0XHRcdFx0XHRmb2xpb19zaXplKGZvbGlvKSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUpO1xuIFx0XHRcdHRyYWNlX3NldF9taWdyYXRpb25fcHRlKGFkZHJlc3MsIHB0ZV92YWwoc3dwX3B0ZSksXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjMuLjQ5MmM5YmVmMzYyMDcgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YS4uNzBlNTRhY2UwZTc0MSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTEwODYsNyArMTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiBcdFx0XHRnb3RvIGtlZXA7XG4gXG4tXHRcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbitcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbid0IGhhbmRsZSBsYXJnZVxuIFx0XHRcdCAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBkYjU3YzU3NjZhYjYwLi45NGVlZGNjN2YxYTllIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc3NCw3ICs3NzQsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XG4rXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVIV1BPSVNPTik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNjozOC44NzI4ODk5MTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDM4MDc2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBMYXJnZSBGb2xpb3MgYW5kIEh1Z2V0bGJmcyBIV1BvaXNvbmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKmRlZmluaXRlbHkqIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgbW9kaWZpY2F0aW9uIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cyAoYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdmFyaW91cyBpbmNsdWRlIGZpbGVzLCBhbmQgYSBzbGV3IG9mIGBtbS9gIGZpbGVzKSBpcyBhIGNsZWFyIGluZGljYXRpb24uIFRoZSBrZXkgZm9jdXMgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgaGFyZHdhcmUgcG9pc29uaW5nIChgaHdwb2lzb25gKSBpbiB0aGUgY29udGV4dCBvZiBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkncmUgcmV3b3JraW5nIGhvdyBgaHdwb2lzb25gIGlzIG1hbmFnZWQgZm9yIGxhcmdlIHBhZ2VzLiBUaGUgbW92ZSBhd2F5IGZyb20gYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIHRvIGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYCBpcyBhIHJlZCBmbGFnIG9uIGl0cyBvd24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZ1bmN0aW9ucyBsaWtlIGBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgc2lnbmFscyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyB0aGVzZSBwYWdlIHR5cGVzIGFyZSBoYW5kbGVkIHdoZW4gaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZmlsZW1hcF9yZWFkYCB0byBhY2NvdW50IGZvciB0aGlzLlxuXG5Tbywgd2hlcmUgZG8gd2Ugc3RhcnQ/IFdlbGwsIGBmaWxlbWFwX3JlYWRgIGlzIGEgaG90IHBhdGgsIHNvIEknZCBwcm9iYWJseSBiZSBhIGxpdHRsZSBjYXV0aW91cyBhYm91dCBmb2N1c2luZyAqdG9vKiBoZWF2aWx5IHRoZXJlLCB0aG91Z2ggaXQncyBjZXJ0YWlubHkgcmVsZXZhbnQuIFRoZSBuZXcgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCwgbG9vayBsaWtlIHByaW1lIHRhcmdldHMuIFRoZSBjaGFuZ2VzIHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgYWxzbyBjcnVjaWFsLiBgdW5wb2lzb25fbWVtb3J5YCBpcyBvYnZpb3VzbHkgYSBmdW5jdGlvbiBvZiBpbnRlcmVzdC5cblxuTGV0J3MgZGl2ZSBkZWVwZXIgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoZSBtZW50aW9uZWQgZnVuY3Rpb25zIChgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGFuZCBgdW5wb2lzb25fbWVtb3J5YCkgYXJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEluIGFkZGl0aW9uLCBJIG5lZWQgdG8gY2hlY2sgZnVuY3Rpb25zIGxpa2UgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLCBgZm9saW9fZnJlZV9yYXdfaHdwYCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuXG5cblNpbWlsYXJseSwgaW4gYG1tL2ZpbGVtYXAuY2AsIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBgZmlsZW1hcF9yZWFkYCBtb2RpZmljYXRpb25zIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEknbGwgd2FudCB0byByZXZpZXcgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBIV1BvaXNvbmluZy5cblxuT2YgY291cnNlLCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyZSBjcnVjaWFsIGNvbnRleHQ6IGBDT05GSUdfSFVHRVRMQkZTYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfTEFSR0VfRk9MSU9gLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBob3cgYENPTkZJR19IVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNlbGVjdCBgQ09ORklHX0xBUkdFX0ZPTElPYC4gQW5kIEknbGwgZG91YmxlLWNoZWNrIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBpbXBsaWNhdGlvbnMgb2YgYE1FTU9SWV9GQUlMVVJFYC5cblxuVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBoYXJkd2FyZSBwb2lzb25pbmcgb2YgbGFyZ2UgZm9saW9zIGFuZCBodWdldGxiZnMgcGFnZXMgYW5kIGRlc2lnbiBmdXp6aW5nIHN0cmF0ZWdpZXMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6NDYuOTEwOTcwNjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDMzMjI4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNjo1MS41NTQzMDM0NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2MzY1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTUVNT1JZX0ZBSUxVUkUgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIHdlIG5lZWQgdG8gc2VlIHdoYXQncyBjb25uZWN0ZWQgdG8gYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucywgc28gaXQncyBhIHNhZmUgYmV0IHRoYXQgYW55IGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9GQUlMVVJFYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQsIHRoZXJlLiBMZXQncyBzdGFydCBkaWdnaW5nIGluIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdCwgYW5kIHdoYXQgZmVhdHVyZXMgbWlnaHQgZGVwZW5kIG9uIGl0IGJlaW5nIHNldC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCB0aGUgbG9naWMgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSBpdHMgdmlzaWJpbGl0eS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgcXVpY2tseS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6NTQuODUwNjcyNTg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdFxcbiA3NzE6XFx0XFx0ICBUaGlzIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIGJvb3QgdXNpbmcgdGhlXFxuIDc3MjpcXHRcXHQgIC9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIHR1bmFibGUuXFxuIDc3MzpcXHRcXG4gNzc0OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc3NTpcXHRcXHRib29sXFxuIDc3NjpcXHRcXG4gNzc3OlxcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbiA3Nzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzc5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3ODA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4gNzgxOlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuIDc4MjpcXHRcXHRoZWxwXFxuIDc4MzpcXHRcXHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xcbiA3ODQ6XFx0XFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xcbiA3ODU6XFx0XFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcXG4gNzg2OlxcdFxcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cXG4gNzg3OlxcdFxcbiA3ODg6XFx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbiA3ODk6XFx0XFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNjo1NC44NTA4NDQzMTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYyOTcwOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucyBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBib2xzdGVyaW5nIG91ciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSwgZW5hYmxpbmcgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYEhXUE9JU09OX0lOSkVDVGAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaG9zZSBhcmUgcHJhY3RpY2FsbHkgZXNzZW50aWFsIGZvciByb2J1c3QgZmF1bHQgZGV0ZWN0aW9uIGFuZCBpbmplY3Rpb24gdGVzdGluZywgcmVzcGVjdGl2ZWx5LiBBbmQsIHdoaWxlIEknbSBhdCBpdCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIFRoZXkgY2FuIGJlIHVzZWZ1bCBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlc2lsaWVuY2Ugd2l0aCBsYXJnZSBtZW1vcnkgcGFnZXMuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIHRoZXNlIG9wdGlvbnMgcGxheSBvdXQsIEkgcmVhbGx5IG5lZWQgdG8gZGVsdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBkZXRlY3RzLCBpc29sYXRlcywgYW5kIHJlc3BvbmRzIHRvIGVycm9ycy4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MzY6NTguMjEzODE5MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1OTg4Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfGJvb2x8dW5zaWduZWQgbG9uZykuKmh1Z2V0bGJfLipod3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDkyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTYtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5Nzpib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA5ODpib29sIGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5OS1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTgyMz1zdGF0aWMgYm9vbCBwcmVjaXNlX3BhZ2VfcG9pc29uZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg1MS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NTI6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODUzLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2My0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4NjQ6Ym9vbCBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY1LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTk3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDQtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDA1OnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjA1LjY3MzcxMzYzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzQ2ODE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIEh1Z2VUTEIgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgYW5kIHRoZSBjb250ZXh0IHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzLiBSaWdodCBhd2F5LCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29yZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgaGFyZHdhcmUgcG9pc29uaW5nIGFuZCBIdWdlVExCIHVwZGF0ZXMuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgaW1wbGllcyB0aGlzIGlzIHdoZXJlIHRoZSBjcml0aWNhbCBoYW5kbGluZyBvY2N1cnMuIFRoZXJlZm9yZSwgbXkgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSAqbXVzdCogZXhhbWluZSB0aGUgY29kZSB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCB0YXJnZXRpbmcgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSEpIGxpZXMgaW4gdGVybXMgb2YgaG93IGhhcmR3YXJlLWRldGVjdGVkIGVycm9ycyBhcmUgcHJvcGFnYXRlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIEh1Z2VUTEIgZnJhbWV3b3JrLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNzowOC43NDg0MDAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk4MDUzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTkxOT1zdGF0aWMgaW5saW5lIGludCBodWdldGxiX2NsZWFyX3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTMxLSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkzMjpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkzMy17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwMTU9c3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDQ1LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjA0NjpcXHRyYyA9IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNDctXFx0aWYgKHJjIFxcdTAwM2U9IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjEzLjc0NjQ2MTU3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg1MTI2OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgbWVtb3J5IG1hbmFnZW1lbnQ6XG5cbioqQW5hbHl6aW5nIFBvaXNvbmVkIE1lbW9yeSBIYW5kbGluZyBpbiB0aGUgSHVnZVRMQiBhbmQgRmlsZW1hcCBDb250ZXh0cyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nIHdpdGhpbiB0aGUgSHVnZVRMQiBhbmQsIEkgc3VzcGVjdCwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgZmlsZW1hcCBzeXN0ZW0uIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYW5kIHRoZWlyIHNjb3BlLiBGaXJzdCwgSSBub3RpY2VkIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgYW5kIHVzZSBhcmUgcmVzdHJpY3RlZCB0byBpdHMgc291cmNlIGZpbGUuIFRoaXMgbGlrZWx5IG1lYW5zIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHNwZWNpZmljIEh1Z2VUTEIgbW9kdWxlLlxuXG5Db252ZXJzZWx5LCBJIHNlZSB0aGF0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGFuZCBgaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uYCBhcmUgKm5vdCogc3RhdGljLiBUaGF0IGltcGxpZXMgdGhleSBhcmUgZGVzaWduZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUsIGxpa2VseSBhcyBwYXJ0IG9mIGEgYnJvYWRlciBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIHBvaXNvbmVkIEh1Z2VUTEIgcGFnZXMuIFRoZXkncmUgcHJvYmFibHkgcGFydCBvZiB0aGUgY29yZSBwb2lzb25pbmcgbWVjaGFuaXNtcywgYW5kIHRoZXJlZm9yZSBuZWVkIHRvIGJlIGFjY2Vzc2libGUuIGB1bnBvaXNvbl9tZW1vcnlgIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYSBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggdGhlIGdlbmVyYWwgYWN0IG9mIGNsZWFyaW5nIG1lbW9yeS5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGFsbCBvZiB0aGlzIHRpZXMgdG9nZXRoZXIuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgbW0vZmlsZW1hcC5jYCwgYmVjYXVzZSBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBmaWxlbWFwIHN1YnN5c3RlbSBsaXZlcy4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEknbSBnb2luZyB0byBsb29rIGF0IGhvdyB0aGF0IGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG9yIHV0aWxpemVzIHRoZSBvdGhlciBmdW5jdGlvbnMgSSd2ZSBleGFtaW5lZC4gSSBhbnRpY2lwYXRlIHNlZWluZyBpZiB0aGUgZmlsZW1hcCBzeXN0ZW0gaXMgaW52b2x2ZWQgaW4gcHJvcGFnYXRpbmcgb3IgcmVzcG9uZGluZyB0byBoYXJkd2FyZSBwb2lzb25pbmcgc2lnbmFscyB0aGF0IG9yaWdpbmF0ZSBpbiB0aGUgSHVnZVRMQiBjb250ZXh0LiBJJ20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGRpc3RpbmN0IG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjE3LjkzMTU5MjAyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyNTc1MDQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGp1c3RfcmFuZ2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTI3NDk9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzU1LVxcbm1tL2ZpbGVtYXAuYzoyNzU2OnN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxubW0vZmlsZW1hcC5jLTI3NTctXFx0XFx0c2l6ZV90IGJ5dGVzKVxcbi0tXFxubW0vZmlsZW1hcC5jPTI4MDQ9c3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjkwNy1cXG5tbS9maWxlbWFwLmM6MjkwODpcXHRcXHRcXHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbm1tL2ZpbGVtYXAuYy0yOTA5LVxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzc6MjMuMTU3MzQ5MzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTM0NzgzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiYCoqXG5cbkFscmlnaHQsIHNvIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIGFuZCBwcm9iYWJseSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhhdCBoZWxwcyBtZSBuYXJyb3cgZG93biB3aGVyZSB0byBsb29rIGZvciBpdHMgdXNhZ2UgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgY29kZS5cblxuTm93LCBsZXQncyBzZWUuLi4gdGhlIG1lbnRpb24gb2YgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIGh1Z2UgcGFnZXMuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gYmV0dGluZyB0aGF0IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaGFyZHdhcmUgcG9pc29uaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiBodWdldGxiZnMuIEEgcXVpY2sgbG9vayBhdCBgbW0vaHVnZXRsYi5jYCBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyOTIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNzoyNi4xNzA4MzE4OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzcyMDIwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY2xlYXJfaHVnZXRsYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02MTA9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2MTE6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTYxMi1cXHR7XFx0dm9pZCAqcHJpdmF0ZSA9IFxcdTAwMjZmb2xpby1cXHUwMDNlcHJpdmF0ZTtcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02Mjc9c3RhdGljIGlubGluZSB2b2lkXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjYyODpmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTYyOS1cXHR7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTg3Nj1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3OS0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgwOmV4dGVybiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgyOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgzLXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMjQ3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTI2NS1cXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xcbm1tL2h1Z2V0bGIuYzoxMjY2OlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfZnJlZWQoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xMjY3LVxcdFxcdGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzNzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiLmMtMTM4My1cXG5tbS9odWdldGxiLmM6MTM4NDpzdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZXRsYi5jLTEzODUte1xcbi0tXFxubW0vaHVnZXRsYi5jLTEzOTAtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG5tbS9odWdldGxiLmM6MTM5MTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTM5Mi1cXG5tbS9odWdldGxiLmM6MTM5MzpcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xMzk0LX1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNDA0PXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDE4LVxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfZnJlZWQoZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jOjE0MTk6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE0MjAtXFx0XFx0aC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmMtMTQzMy1cXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxubW0vaHVnZXRsYi5jOjE0MzQ6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE0MzUtXFxuLS1cXG5tbS9odWdldGxiLmM9MTQ3MD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTUwNy1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNTA4OlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNTA5LVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTg2PXN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTYwMi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNjAzOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNjA0LVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjI3LVxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE2Mjg6XFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE2MjktXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE2Mzc9c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjYwLVxcdCAqIFdpdGhvdXQgSFZPIGVuYWJsZWQsIHJldCB3aWxsIGJlIDAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbFxcbm1tL2h1Z2V0bGIuYzoxNjYxOlxcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5Llxcbm1tL2h1Z2V0bGIuYy0xNjYyLVxcdCAqL1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2NjctXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXFx1MDAyNm5vbl9odm9fZm9saW9zLCBscnUpXFxubW0vaHVnZXRsYi5jOjE2Njg6XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE2NjktXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE2ODk9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzA4LVxcdHJlc3RvcmVfcmVzZXJ2ZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzoxNzA5OlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTcxMC1cXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzMwLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG5tbS9odWdldGxiLmM6MTczMTpcXHRmb2xpb19jbGVhcl9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNzMyLVxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2ZvbGlvKGhzdGF0ZV9pbmRleChoKSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1ODItXFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI1ODM6XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yNTg0LVxcdFxcdGVsc2UgaWYgKHJjKVxcbi0tXFxubW0vaHVnZXRsYi5jPTUxNDY9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUyODMtXFx0XFx0XFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjUyODQ6XFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01Mjg1LVxcdFxcdFxcdGVsc2UgaWYgKHJjKVxcbi0tXFxubW0vaHVnZXRsYi5jPTU2MzM9aW50IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTY0Ny1cXHR9XFxubW0vaHVnZXRsYi5jOjU2NDg6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy01NjQ5LVxcbi0tXFxubW0vaHVnZXRsYi5jPTcxMzM9Ym9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTQzLVxcdH1cXG5tbS9odWdldGxiLmM6NzE0NDpcXHRmb2xpb19jbGVhcl9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy03MTQ1LVxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBsaXN0KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz03MTkwPXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MjExLVxcdFxcdGZvbGlvX3NldF9odWdldGxiX3RlbXBvcmFyeShvbGRfZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzo3MjEyOlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XFxubW0vaHVnZXRsYi5jLTcyMTMtXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTU9c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00MTktXFx0aWYgKCFyZXQpXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NDIwOlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTQyMS1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUyMj1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzctXFx0aWYgKHJldClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1Nzg6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTc5LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwNC1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwMDU6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDA2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAxNT1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNTYtXFx0aWYgKGNvdW50X2luY3JlYXNlZCBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNTc6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNTgtXFx0XFx0Km1pZ3JhdGFibGVfY2xlYXJlZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwODM9c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTIwLVxcdGlmIChod3BvaXNvbl9maWx0ZXIocCkpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxMjE6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTIyLVxcdFxcdGlmIChtaWdyYXRhYmxlX2NsZWFyZWQpXFxuLS1cXG5tbS9ybWFwLmM9MzE1Mz12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0zMTYxLVxcdGF0b21pY19zZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfbGFyZ2VfbWFwY291bnQsIDApO1xcbm1tL3JtYXAuYzozMTYyOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcXG5tbS9ybWFwLmMtMzE2My1cXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozNzozMS42MDgwNDM2NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2MDYzODU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZVRMQiBhbmQgTWVtb3J5IFBvaXNvbmluZyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBIdWdlVExCIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwb2lzb25pbmcgYW5kIEkndmUgZ290IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSd2ZSBub3RlZCB0aGF0IGBmb2xpb19jbGVhcl9odWdldGxiYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGlzbid0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbHMgdG8gZXN0YWJsaXNoIHRoZSBjYWxsIGNoYWluLiBJJ20gZm9jdXNpbmcgb24gYG1tL21lbW9yeS1mYWlsdXJlLmNgIC0gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gSSdtIGFsc28gbG9va2luZyBhdCBgbW0vZmlsZW1hcC5jYCB0byBzZWUgaWYgYGZpbGVtYXBfcmVhZGAgaXMgY2FsbGVkLCBhbmQgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYnV0IG9ubHkgbm90aW5nIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgYGh1Z2V0bGJmc19nZXRfaW5vZGVgIGJlaW5nIHN0YXRpYy4gSSBhbHNvIG5vdGUgdGhhdCBgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uc2AgdXNlcyBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHJlYWxseSBzdGFuZCBvdXQgYW5kIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGFyZSBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLlxuXG5MZXQncyBzZWUgaWYgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAgaXMgYWNjZXNzaWJsZS4gQWhhISBJdCdzIGNhbGxlZCBmcm9tIGBpc19yZWZfcGFnZV9od3BvaXNvbmAgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpbiBgbW0vZmlsZW1hcC5jYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgZmlsZW1hcF9yZWFkYC4gVGhhdCdzIGEgc29saWQgY2FsbCBjaGFpbjsgYGZpbGVtYXBfcmVhZGAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbmBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gIGxvb2tzIGdvb2QuIEkgZm91bmQgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBpc19wYWdlX2h3cG9pc29uYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLiBUaGF0J3MgdGhlbiBjYWxsZWQgYnkgYHVucG9pc29uX21lbW9yeWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLlxuXG5Pa2F5LCBJJ20gY2hlY2tpbmcgYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIHNlZSBpZiBgdW5wb2lzb25fbWVtb3J5YCBpcyBleHBvcnRlZCBvciBub3QuIFllcywgaXQgaXMgZXhwb3J0ZWQuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbkxhc3RseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGNoZWNraW5nIGBtbS9ybWFwLmNgIGZvciBgdHR1X2NyZWF0ZV9od3BvaXNvbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjM3LjQ2ODY4NTY4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNjY4MDk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dHVfY3JlYXRlX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTE5ODYtICovXFxubW0vcm1hcC5jOjE5ODc6c3RhdGljIGJvb2wgdHR1X2NyZWF0ZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0xOTg4LVxcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYz0yMDAwPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjIxNS1cXG5tbS9ybWFwLmM6MjIxNjpcXHRcXHRpZiAodHR1X2NyZWF0ZV9od3BvaXNvbihmb2xpbywgc3VicGFnZSwgZmxhZ3MpKSB7XFxubW0vcm1hcC5jLTIyMTctXFx0XFx0XFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcXG4tLVxcbm1tL3JtYXAuYz0yNDI4PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNjE4LVxcbm1tL3JtYXAuYzoyNjE5OlxcdFxcdGlmICh0dHVfY3JlYXRlX2h3cG9pc29uKGZvbGlvLCBzdWJwYWdlLCBUVFVfSFdQT0lTT04pKSB7XFxubW0vcm1hcC5jLTI2MjAtXFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbyksIGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzc6NDIuMzk1MzcyOTYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTkzODI2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIYXJkd2FyZSBQb2lzb25pbmcgd2l0aGluIHRoZSBIdWdlIFBhZ2VzIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBgdHR1X2NyZWF0ZV9od3BvaXNvbmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBNeSBtaW5kIGp1bXBzIHRvIHdoZXJlIGl0IG1pZ2h0IGJlIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGhhcmR3YXJlIHBvaXNvbmluZywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLCBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gbG9va2luZyBmb3IgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLiBIdWdlIHBhZ2VzIGFyZSBhIGxpa2VseSB0YXJnZXQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZXJyb3IgZGV0ZWN0aW9uLCBzbyB0aGF0IGZ1bmN0aW9uIG5hbWUgaXMgYSBrZXkgbGVhZC4gSSdtIGVzc2VudGlhbGx5IHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIGhhcmR3YXJlIHBvaXNvbiBjb25kaXRpb24gdG8gdGhlIGxvZ2ljIHRoYXQgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBpdCB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGZyYW1ld29yay4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHdoZW4gYSBoYXJkd2FyZSBlcnJvciBhZmZlY3RzIGEgaHVnZSBwYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjcyOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjQ1LjU1NDc1ODg2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDA0MTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTg5Mz1URVNUUEFHRUZMQUdfRkFMU0UoVHJhbnNDb21wb3VuZCwgdHJhbnNjb21wb3VuZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwMS0gKiBzY2hlbWUgdXNlZCBpbiB0aGF0IGNhc2UpLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzIGRpcmVjdGx5O1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjkwMjogKiB1c2UgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZSgpIGluc3RlYWQuXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtOTAzLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMTE5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19yZWZfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEyOC1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTI5OnN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzMC17XFxuLS1cXG5tbS9maWxlbWFwLmM9MjQ2ND1zdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI0ODUtXFx0XFx0XFx0YnJlYWs7XFxubW0vZmlsZW1hcC5jOjI0ODY6XFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0yNDg3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI3NTY9c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzYxLVxcbm1tL2ZpbGVtYXAuYzoyNzYyOlxcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxubW0vZmlsZW1hcC5jLTI3NjMtXFx0XFx0cmV0dXJuIGJ5dGVzO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDA4PXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNS1cXG5tbS9odWdlX21lbW9yeS5jOjQ0MTY6XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3OTM9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTgxNjpcXHRcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4MTctXFx0XFx0XFx0LypcXG4tLVxcbm1tL3JtYXAuYz0yMDAwPXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjEzNS1cXHRcXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjEzNjpcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pLFxcbm1tL3JtYXAuYy0yMTM3LVxcdFxcdFxcdFxcdFxcdGZvbGlvKTtcXG4tLVxcbm1tL3NobWVtLmM9MzIxNj1zaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy0zMjQyLVxcbm1tL3NobWVtLmM6MzI0MzpcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS9zaG1lbS5jLTMyNDQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTA4OC1cXG5tbS92bXNjYW4uYzoxMDg5OlxcdFxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTEwOTAtXFx0XFx0XFx0LypcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NzU0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Nzc3OlxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjQ5Ljk0ODgxMjUxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0NzI2NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEhhcmR3YXJlIFBvaXNvbmluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBoYXJkd2FyZSBwb2lzb25pbmcgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUuIFRoZSBjb3JlIGNvbmNlcm4sIGFzIEkgc2VlIGl0LCByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdW5yZWZfcGFnZV9od3BvaXNvbmAsIGB1bnBvaXNvbl9tZW1vcnlgLCBhbmQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2VgLCBgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZWAsIGBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmVgIGFuZCBgbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2VgIGFyZSBzdGF0aWMgaW5saW5lLCBzbyB0aGV5IGRvbid0IHNlZW0gdG8gYmUgd2hlcmUgdGhlIHByaW1hcnkgbG9naWMgaXMgbG9jYXRlZC4gVGhhdCBzdHJlYW1saW5lcyB0aGUgaW52ZXN0aWdhdGlvbiBzaWduaWZpY2FudGx5OyBJIGNhbiBjb25jZW50cmF0ZSBvbiB0aG9zZSBmb3VyLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbnMgcGxheSBpbnRvIHRoaXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5nc+KAlHNwZWNpZmljYWxseSwgYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTEFSR0VfRk9MSU9g4oCTIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3VyIG9mIHRoZXNlIGNvcmUgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGBtbS9LY29uZmlnYCB0byBkZXRlcm1pbmUgaG93IGBMQVJHRV9GT0xJT2AgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlnIG9wdGlvbnMgd2lsbCBiZSBjcml0aWNhbCB0byBkZXRlcm1pbmUgdW5kZXIgd2hhdCBzaXR1YXRpb25zIHRoaXMgcG9pc29uL3VucG9pc29uIGxvZ2ljIGlzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDI3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjU0LjQ5MzU0MTk2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwOTg0NDg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0Njpjb25maWcgTEFSR0VfRk9MSU9cXG5tbS9LY29uZmlnLTg0Ny1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM3OjU5LjUwMzQwMjg0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIzNzAwMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtjb25maWcgTXVzaW5ncyoqXG5cbk9rYXksIHNvIGBMQVJHRV9GT0xJT2AgaXMgYSBkZXBlbmRlbmN5LCBhIGBkZWZfYm9vbGAsIGFuZCBpdCdzIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGBIVUdFVExCX1BBR0VgIG9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIHNlbGVjdGVkLiBUaGF0IG1lYW5zIEkgZG9uJ3QgbmVlZCB0byBnbyBvdXQgb2YgbXkgd2F5IHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LiBJdCdzIHJlYWxseSBtb3JlIG9mIGFuIGludGVybmFsIGRldGFpbC4gU3RpbGwsIGl0J3MgZ29vZCBwcmFjdGljZSB0byBub3RlIGl0LCBqdXN0IGZvciBjbGFyaXR5J3Mgc2FrZS5cblxuQnV0LCB0aGlua2luZyBhYm91dCB3aGF0IHJlYWxseSAqZHJpdmVzKiBpdHMgaW5jbHVzaW9uLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBwbGF5ZXJzIGhlcmUuIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGFyZSB0aGUgaW1wb3J0YW50IG9uZXMgdGhhdCB0cmlnZ2VyIGl0LiBJIHNob3VsZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgaXMgc29saWQuXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGlucyBhbmQgb3V0cyBvZiBgSFVHRVRMQkZTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODowMy4zMjcxMDYzODNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjA2NTExNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODowNy42ODc3NjM4ODFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzOTc1MzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgTGludXgga2VybmVsIGRldmVsb3BlcjpcblxuKipEZWx2aW5nIGludG8gdGhlIEhVR0VUTEJGUyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBIVUdFVExCRlNgLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGl0IGxpc3RlZCBpbiBgZnMvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBoaW5nZSBvbiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyB0aW1lIHRvIGNyYWNrIG9wZW4gYGZzL0tjb25maWdgIGFuZCB0cmFjZSB0aHJvdWdoIHRoZSBsb2dpYy4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBgSFVHRVRMQkZTYCB0byBldmVuIGJlIGNvbnNpZGVyZWQuIFRoaXMgd2lsbCBpbmZvcm0gbXkgZGVjaXNpb25zIGxhdGVyLCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gd29ya2luZyBvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODoxMC44Mjc1MjE4MTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM4OjEwLjgyNzcyMzk2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg1OTczMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERlcGVuZGVuY2llcyBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbi4gSXQncyBjbGVhciB0aGF0IGBIVUdFVExCRlNgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIHRoYXQncyBhIGdpdmVuLiBBbmQgYE1FTU9SWV9GQUlMVVJFYCwgc2ltaWxhcmx5LCBpcyB0aWVkIHRvIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gTWFrZXMgc2Vuc2U7IHdlIGNhbid0IGVuYWJsZSB0aG9zZSBmZWF0dXJlcyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLiBTbywgdGhlIGNvcmUgY29uZmlncyBpbiBwbGF5IGhlcmUgYXJlIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhpcy4gSSd2ZSBnb3QgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAsIGBodWdldGxiX3VucmVmX3BhZ2VfaHdwb2lzb25gLCBgdW5wb2lzb25fbWVtb3J5YCwgYW5kIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGNyaXRpY2FsIHBpZWNlcyBkZWFsaW5nIHdpdGggaGFyZHdhcmUgcG9pc29uaW5nIGluIHRoZSBodWdldGxiIGNvbnRleHQuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAg4oCTIEkgbmVlZCB0byBlbnN1cmUgaXQncyBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSB3aGVyZSBpdCdzIG5lZWRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCBpdHMgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTI3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzg6MTQuNDEzNzAxNTIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk2MzAwMTM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipodWdldGxiX3BhZ2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM4OjIwLjExMDAxNTE5OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ3MDM0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWVtb3J5IEZhaWx1cmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmFpbHVyZSBpc24ndCBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyBJJ3ZlICpleHBsaWNpdGx5KiBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBlbGltaW5hdGVzIGEgd2hvbGUgY2xhc3Mgb2YgZWFzaWx5LWRlYnVnZ2VkIGV4dGVybmFsIGNhdXNlcy4gQnV0IGl0J3MgYWxzbyBub3QgYSBzdGF0aWNhbGx5LWRlZmluZWQgdGhpbmcsIG1lYW5pbmcgaXQncyBsaWtlbHkgcGFydCBvZiBzb21lIGR5bmFtaWMgcHJvY2Vzcy4gVGhhdCdzIGEgYml0IG1vcmUgaW52b2x2ZWQsIGJ1dCBtYW5hZ2VhYmxlLiBUaGUgY2x1ZSBpcyB0aGF0IGl0J3MgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0IGdpdmVzIG1lIGEgdmVyeSBmb2N1c2VkIGFyZWEgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTm93LCBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiAnbWVtb3J5LWZhaWx1cmUnLCBJIHNob3VsZCB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgYHVucG9pc29uX21lbW9yeWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NDUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODoyMy4xNTcwNTM2MjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDQ0MDcwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdW5wb2lzb25fbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttc2FuL2hvb2tzLmM9Mzk4PXZvaWQga21zYW5fdW5wb2lzb25fbWVtb3J5KGNvbnN0IHZvaWQgKmFkZHJlc3MsIHNpemVfdCBzaXplKVxcbi0tXFxubW0va21zYW4vaG9va3MuYy00MTAtfVxcbm1tL2ttc2FuL2hvb2tzLmM6NDExOkVYUE9SVF9TWU1CT0woa21zYW5fdW5wb2lzb25fbWVtb3J5KTtcXG5tbS9rbXNhbi9ob29rcy5jLTQxMi1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjczMD1pbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODQwLX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4NDE6RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzg6MjguNjYxNDcxMDcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2ODkwNzY2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlZlcmlmeWluZyBNZW1vcnkgVW5wb2lzb25pbmcgRnVuY3Rpb25hbGl0eSoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZC4gVGhlIGB1bnBvaXNvbl9tZW1vcnlgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCB3aGF0IEkgZXhwZWN0ZWQuIE5vdywgdG8gZGlnIGRlZXBlciwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIHRoYXQgY2xlYXJzIGhhcmR3YXJlLXBvaXNvbmVkIGh1Z2UgcGFnZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgZXJyb3JzIGFuZCwgY3JpdGljYWxseSwgaG93IGl0IGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSB0aGVtLCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzUxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6Mzg6MzEuMzUwNTUxMzg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQwMjk5OTc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjozODozNy41OTA4NjAxMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ3NjI1NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqUmVmbGVjdGluZyBvbiB0aGUgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5TbywgdGhpcyBpc24ndCBhIHNpbXBsZSBzdGF0aWMgdXBkYXRlLCBidXQgcmF0aGVyIHNvbWV0aGluZyBtb3JlIGR5bmFtaWMsIHNvbWV0aGluZyB0aGF0J3MgYmVpbmcgYWN0aXZlbHkgKm1hbmFnZWQqIGludGVybmFsbHkuIEknbSBwbGVhc2VkIHdpdGggdGhlIGRpcmVjdGlvbiwgcGFydGljdWxhcmx5IHRoZSBlbXBoYXNpcyBvbiB0aGUgZm9jdXMgZnVuY3Rpb25zLiBUaGV5IHNlZW0gd2VsbC1kZXNpZ25lZC4gVGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQsIGltcG9ydGFudGx5LCB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5UaGUgY3J1eCBvZiB0aGlzIGlzIGhvdyB3ZSdyZSBhZGFwdGluZyB0aGUgaGFyZHdhcmUgcG9pc29uIGhhbmRsaW5nIGZvciB0aGVzZSBsYXJnZXIgbWVtb3J5IHN0cnVjdHVyZXM6IGZvbGlvcyBhbmQgaHVnZXRsYmZzLiBUaGlzIHBhdGNoIHJlYWxseSBkaWdzIGludG8gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBwYWdlcyB3aGVuIHdlJ3JlIHJlYWRpbmcgdGhlbSB0aHJvdWdoIGBmaWxlbWFwX3JlYWRgIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgYXJlIHByb3Blcmx5IHVucG9pc29uaW5nIHRoZW0uIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIGVzcGVjaWFsbHkgd2l0aCB0aGUgaW5jcmVhc2VkIHVzZSBvZiBsYXJnZSBwYWdlcyB0aGVzZSBkYXlzLlxuXG5JIHRoaW5rICdzZXQtcmVzdWx0cycgaXMgdGhlIHJpZ2h0IG5leHQgbG9naWNhbCBzdGVwLiBJdCBzZWVtcyBsaWtlIHRoaXMgd291bGQgYmUgdGhlIG5hdHVyYWwgZnVuY3Rpb24gY2FsbCB0byBtYWtlIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTY4LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjM4OjQ0LjA2NzExOTc2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTI5NjY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy4gSXQgbW9kaWZpZXMgYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgZm9saW9zIGFuZCB1cGRhdGVzIG1lbW9yeSBmYWlsdXJlIHJlY292ZXJ5IGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgTU0gYW5kIGh1Z2V0bGJmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl91bnJlZl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJ1bnBvaXNvbl9tZW1vcnlcIixcbiAgICBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBod3BvaXNvbiBpcyBoYW5kbGVkIGZvciBsYXJnZSBmb2xpb3MgYW5kIGh1Z2V0bGJmcy4gSXQgbW9kaWZpZXMgYGZpbGVtYXBfcmVhZGAgdG8gaGFuZGxlIGh3cG9pc29uZWQgZm9saW9zIGFuZCB1cGRhdGVzIG1lbW9yeSBmYWlsdXJlIHJlY292ZXJ5IGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgTU0gYW5kIGh1Z2V0bGJmcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtjz4s[1] Phase: Succeeded StartedAt: 2026-07-30 02:38:56 +0000 UTC FinishedAt: 2026-07-30 02:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 02:38:56 +0000 UTC FinishedAt: 2026-07-30 02:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2] Phase: Succeeded StartedAt: 2026-07-30 02:38:56 +0000 UTC FinishedAt: 2026-07-30 06:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 02:38:56 +0000 UTC FinishedAt: 2026-07-30 06:35:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 02:38:56 +0000 UTC FinishedAt: 2026-07-30 02:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 02:38:56 +0000 UTC FinishedAt: 2026-07-30 02:39:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},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-workflowtjz4s/series-workflowtjz4s-convert-artifact-48928647/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 02:39:06 +0000 UTC FinishedAt: 2026-07-30 03:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 02:39:06 +0000 UTC FinishedAt: 2026-07-30 03:03:17 +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:*0792144f-4164-4f2c-a76b-d0616b9519e2,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-workflowtjz4s/series-workflowtjz4s-convert-artifact-48928647/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": "96d5c732-a572-4d5d-a5f8-d36e5386c25b", "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-workflowtjz4s/series-workflowtjz4s-build-action-3403408925/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 02:39:06 +0000 UTC FinishedAt: 2026-07-30 03:03:06 +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:*0792144f-4164-4f2c-a76b-d0616b9519e2,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-workflowtjz4s/series-workflowtjz4s-convert-artifact-48928647/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": "96d5c732-a572-4d5d-a5f8-d36e5386c25b", "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-workflowtjz4s/series-workflowtjz4s-build-action-3403408925/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 03:03:17 +0000 UTC FinishedAt: 2026-07-30 03:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 03:03:17 +0000 UTC FinishedAt: 2026-07-30 03:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 03:03:17 +0000 UTC FinishedAt: 2026-07-30 03:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 03:03:17 +0000 UTC FinishedAt: 2026-07-30 03:03:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},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-workflowtjz4s/series-workflowtjz4s-convert-artifact-3385964726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 03:03:49 +0000 UTC FinishedAt: 2026-07-30 03:05:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 03:03:49 +0000 UTC FinishedAt: 2026-07-30 03:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96d5c732-a572-4d5d-a5f8-d36e5386c25b,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-workflowtjz4s/series-workflowtjz4s-build-action-3403408925/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-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 03:05:41 +0000 UTC FinishedAt: 2026-07-30 03:05:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 03:05:41 +0000 UTC FinishedAt: 2026-07-30 03:05:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 03:05:41 +0000 UTC FinishedAt: 2026-07-30 03:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 03:05:41 +0000 UTC FinishedAt: 2026-07-30 03:28:18 +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:*0792144f-4164-4f2c-a76b-d0616b9519e2,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-workflowtjz4s/series-workflowtjz4s-convert-artifact-3385964726/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": "156c1637-8de9-4b1a-baed-493027ccbac0", "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-workflowtjz4s/series-workflowtjz4s-build-action-734657978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 03:05:41 +0000 UTC FinishedAt: 2026-07-30 03:28:08 +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:*0792144f-4164-4f2c-a76b-d0616b9519e2,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-workflowtjz4s/series-workflowtjz4s-convert-artifact-3385964726/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": "156c1637-8de9-4b1a-baed-493027ccbac0", "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-workflowtjz4s/series-workflowtjz4s-build-action-734657978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 03:28:18 +0000 UTC FinishedAt: 2026-07-30 03:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 03:28:18 +0000 UTC FinishedAt: 2026-07-30 03:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 03:28:18 +0000 UTC FinishedAt: 2026-07-30 03:30:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 03:28:18 +0000 UTC FinishedAt: 2026-07-30 03:30:05 +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:*156c1637-8de9-4b1a-baed-493027ccbac0,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-workflowtjz4s/series-workflowtjz4s-build-action-734657978/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-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 03:30:14 +0000 UTC FinishedAt: 2026-07-30 06:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 03:30:14 +0000 UTC FinishedAt: 2026-07-30 06:35:38 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},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:*96d5c732-a572-4d5d-a5f8-d36e5386c25b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*156c1637-8de9-4b1a-baed-493027ccbac0,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-workflowtjz4s/series-workflowtjz4s-build-action-3403408925/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-workflowtjz4s/series-workflowtjz4s-build-action-734657978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 03:30:14 +0000 UTC FinishedAt: 2026-07-30 03:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 03:30:14 +0000 UTC FinishedAt: 2026-07-30 03:30:20 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},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-workflowtjz4s/series-workflowtjz4s-convert-artifact-2018793947/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 03:30:14 +0000 UTC FinishedAt: 2026-07-30 03:30:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 03:30:14 +0000 UTC FinishedAt: 2026-07-30 03:30:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-07-30 03:30:15 +0000 UTC FinishedAt: 2026-07-30 04:15:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*96d5c732-a572-4d5d-a5f8-d36e5386c25b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*156c1637-8de9-4b1a-baed-493027ccbac0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowtjz4s/series-workflowtjz4s-build-action-3403408925/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-workflowtjz4s/series-workflowtjz4s-build-action-734657978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-07-30 03:30:15 +0000 UTC FinishedAt: 2026-07-30 03:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-07-30 03:30:15 +0000 UTC FinishedAt: 2026-07-30 03:30:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},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-workflowtjz4s/series-workflowtjz4s-convert-artifact-3948239100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 03:30:25 +0000 UTC FinishedAt: 2026-07-30 06:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 03:30:25 +0000 UTC FinishedAt: 2026-07-30 06:35:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96d5c732-a572-4d5d-a5f8-d36e5386c25b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*156c1637-8de9-4b1a-baed-493027ccbac0,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-workflowtjz4s/series-workflowtjz4s-build-action-3403408925/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-workflowtjz4s/series-workflowtjz4s-build-action-734657978/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-workflowtjz4s/series-workflowtjz4s-convert-artifact-2018793947/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,} --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-07-30 03:30:25 +0000 UTC FinishedAt: 2026-07-30 04:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtjz4s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hugetlb_page_hwpoison","hugetlb_unref_page_hwpoison","unpoison_memory","folio_clear_hugetlb_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"974d0be0cb8e48d63b9d413a2e1a8fba16cd2583","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"9c58ed79-0cb6-4eeb-8005-ffe3be812d70","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93","a77d3cb3-6a99-45a3-bd83-722c3f7fcd2c","2406d176-ea76-40a8-b6bc-41d3e6326388"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-07-30 03:30:25 +0000 UTC FinishedAt: 2026-07-30 04:14:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96d5c732-a572-4d5d-a5f8-d36e5386c25b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*156c1637-8de9-4b1a-baed-493027ccbac0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowtjz4s/series-workflowtjz4s-build-action-3403408925/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-workflowtjz4s/series-workflowtjz4s-build-action-734657978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowtjz4s/series-workflowtjz4s-convert-artifact-3948239100/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,}