Name: series-workflowsjjcp Phase: Succeeded StartedAt: 2026-08-07 17:16:09 +0000 UTC FinishedAt: 2026-08-07 21:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[0] Phase: Succeeded StartedAt: 2026-08-07 17:16:09 +0000 UTC FinishedAt: 2026-08-07 17:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 17:16:09 +0000 UTC FinishedAt: 2026-08-07 17:58:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ea2bff00da89d7767d677bb68470130ba96f4928", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ea2bff00da89d7767d677bb68470130ba96f4928", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "series_id": "01da0c8a-7c07-437d-8f97-9ed679ef8987" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sanity_check_segment_list", "kexec_locate_mem_hole", "range_first_hwpoison", "range_last_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2dpYyB0byBhdm9pZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgZHVyaW5nIGtleGVjIG9wZXJhdGlvbnMgYnkgY2hlY2tpbmcgaWYgdGhlIHRhcmdldCBwaHlzaWNhbCBtZW1vcnkgcmFuZ2VzIGNvbnRhaW4gcG9pc29uZWQgcGFnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBtZW1vcnkgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBrZXhlYyBzZWdtZW50IHBsYWNlbWVudC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgY2hlY2tzIHRvIGtleGVjIHNlZ21lbnQgbG9hZGluZyBhbmQgbWVtb3J5IGhvbGUgbG9jYXRpb24gbG9naWMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXN0ZW0gY2FsbHMsIGFuZCBoYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHRlc3RhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDU5OWYwNjliMDEyNzZkOTI5MGRjNjllYzg3YzFmZmU2NzE4OWU3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTc6NTY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA3ZmFiZTZjNjZiNGI3Li40MWI5MjM5MDFiMTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MTkyLDYgJiM0Mzs1MTkyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4mIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG5AQCAtNTIwNCw2ICYjNDM7NTIwNiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIHtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUEhZU19BRERSX01BWDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi5lMDk3ZTk4MGIxNDM5IDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTIxMiw2ICYjNDM7MjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcbiYjNDM7XHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtLFxuJiM0MztcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4mIzQzO1x0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIHNlYXJjaGVkIGZyb20gc3lzdGVtIFJBTSByYXRoZXIgdGhhblxuIFx0ICogYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgc28gdGhleSBhcmUgbm90IGd1YXJhbnRlZWRcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfZmlsZS5jIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuaW5kZXggNTlmYjlkNzFlOWQ4Ni4uOWJhNmNjMDFhZjkyOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rZXhlY19maWxlLmNcbkBAIC00NzUsNiAmIzQzOzQ3NSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cdTAwM2VpbWFnZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiAmIzQzOyAxO1xuQEAgLTUwNCw2ICYjNDM7NTA1LDE1IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbiYjNDM7XHRcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xuJiM0MztcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4mIzQzO1x0XHRcdGlmIChwb2lzb24gXHUwMDNjIGtidWYtXHUwMDNlbWVtc3opXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTIwLDYgJiM0Mzs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVx1MDAzZWltYWdlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBwb2lzb247XG4gXG4gXHR0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLVx1MDAzZWJ1Zl9taW4pO1xuIFxuQEAgLTU0Niw2ICYjNDM7NTU3LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0cG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbiYjNDM7XHRcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xuJiM0MztcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4mIzQzO1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gJiM0MzsgUEFHRV9TSVpFO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGE4YjAzZTI5MjBiYTguLmM0ODVlMjA1ZmI2MzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtOTYsNiAmIzQzOzk2LDc4IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBoYXJkd2FyZS1wb2lzb25lZCBvbmxpbmUgcGFnZSBpbiBbc3RhcnQsXG4mIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuJiM0MztcdFx0XHRcdCAgYm9vbCBmaXJzdClcbiYjNDM7e1xuJiM0MztcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47XG4mIzQzO1xuJiM0MztcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuJiM0MztcdFx0cmV0dXJuIHBvaXNvbjtcbiYjNDM7XG4mIzQzO1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICYjNDM7IHNpemUgLSAxKTtcbiYjNDM7XHRmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuIFx1MDAzYz0gZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwYWdlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBodWdldGxiZnMgaXMgYSBiaXQgc3BlY2lhbCwgZ2l2ZW4gdGhlIHBvaXNvblxuJiM0MztcdFx0XHQgKiBpbmZvcm1hdGlvbiBpcyBhdCB0aGUgZm9saW8sIG5vdCBhdCB0aGUgcGFnZVxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBmb2xpb19lbmQ7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBObyBodWdldGxiX2xvY2s6IHRoZSBzY2FuIGlzIHJhY3kgZWl0aGVyIHdheSwgYSBmcmFtZVxuJiM0MztcdFx0XHQgKiBjYW4gYmUgcG9pc29uZWQgcmlnaHQgYWZ0ZXIgaXQuIEp1c3QgZG9uJiMzOTt0IGxldCBhIGZvbGlvXG4mIzQzO1x0XHRcdCAqIGRpc3NvbHZlZCB1bmRlciB1cyB3YWxrIHRoZSBzY2FuIGJhY2t3YXJkcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiYjNDM7XHRcdFx0Zm9saW9fZW5kID0gbWF4KGZvbGlvX2VuZCwgcGZuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuJiM0MztcdFx0XHRcdGlmIChmaXJzdClcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuJiM0MztcdFx0XHRcdHBvaXNvbiA9IFBGTl9QSFlTKG1pbihmb2xpb19lbmQsIGVuZF9wZm4pKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHQvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovXG4mIzQzO1x0XHRcdHBmbiA9IGZvbGlvX2VuZDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFQYWdlSFdQb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRcdC8qIHBhZ2UgaXMgZ29vZCwgbGV0JiMzOTtzIGdvIHRvIHRoZSBuZXh0IG9uZSAqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmlyc3QpXG4mIzQzO1x0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuJiM0MztcbiYjNDM7XHRcdHBvaXNvbiA9IFBGTl9QSFlTKHBmbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9pc29uO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtLRVhFQyYjMzQ7LAogICAgJiMzNDtLRVhFQ19GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtrZXhlY19sb2NhdGVfbWVtX2hvbGUmIzM0OywKICAgICYjMzQ7cmFuZ2VfZmlyc3RfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7cmFuZ2VfbGFzdF9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBjaGVja3MgdG8ga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbiBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c3RlbSBjYWxscywgYW5kIGhhcmR3YXJlIHBvaXNvbmluZyBjYW4gYmUgc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgdGVzdGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTk5ZjA2OWIwMTI3NmQ5MjkwZGM2OWVjODdjMWZmZTY3MTg5ZTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNzo1Njo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA3ZmFiZTZjNjZiNGI3Li40MWI5MjM5MDFiMTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC01MTkyLDYgJiM0Mzs1MTkyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDsKIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKQogewpAQCAtNTIwNCw2ICYjNDM7NTIwNiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbikKIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiB7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBIWVNfQUREUl9NQVg7CiYjNDM7fQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jCmluZGV4IGRjNzcwYjlhNmQwNTMuLmUwOTdlOTgwYjE0MzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuYwpAQCAtMjEyLDYgJiM0MzsyMTIsMTYgQEAgaW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiAJfQogI2VuZGlmCiAKJiM0MzsJLyoKJiM0MzsJICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGUKJiM0MzsJICogcmVsb2NhdGlvbiBjb3B5IHdvdWxkIG1hY2hpbmUtY2hlY2sgb24gdGhlIGJhZCBmcmFtZS4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9zZWdtZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW0sCiYjNDM7CQkJCQkgaW1hZ2UtJmd0O3NlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpCiYjNDM7CQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUaGUgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBzZWFyY2hlZCBmcm9tIHN5c3RlbSBSQU0gcmF0aGVyIHRoYW4KIAkgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZApkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ZpbGUuYyBiL2tlcm5lbC9rZXhlY19maWxlLmMKaW5kZXggNTlmYjlkNzFlOWQ4Ni4uOWJhNmNjMDFhZjkyOSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfZmlsZS5jCkBAIC00NzUsNiAmIzQzOzQ3NSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogewogCXN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi0mZ3Q7aW1hZ2U7CiAJdW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDsKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uOwogCiAJdGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLSZndDtidWZfbWF4KTsKIAl0ZW1wX3N0YXJ0ID0gdGVtcF9lbmQgLSBrYnVmLSZndDttZW1zeiAmIzQzOyAxOwpAQCAtNTA0LDYgJiM0Mzs1MDUsMTUgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJaWYgKHBvaXNvbiAmbHQ7IGtidWYtJmd0O21lbXN6KQomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi0mZ3Q7bWVtc3o7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpAQCAtNTIwLDYgJiM0Mzs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLSZndDtidWZfbWluKTsKIApAQCAtNTQ2LDYgJiM0Mzs1NTcsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJcG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJdGVtcF9zdGFydCA9IHBvaXNvbiAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uYzQ4NWUyMDVmYjYzMyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC05Niw2ICYjNDM7OTYsNzggQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LAomIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCQkJICBib29sIGZpcnN0KQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZCgmYW1wO251bV9wb2lzb25lZF9wYWdlcykpCiYjNDM7CQlyZXR1cm4gcG9pc29uOwomIzQzOwomIzQzOwllbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgJiM0Mzsgc2l6ZSAtIDEpOwomIzQzOwlmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuICZsdDs9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBhZ2UpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiYjNDM7CQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogaHVnZXRsYmZzIGlzIGEgYml0IHNwZWNpYWwsIGdpdmVuIHRoZSBwb2lzb24KJiM0MzsJCQkgKiBpbmZvcm1hdGlvbiBpcyBhdCB0aGUgZm9saW8sIG5vdCBhdCB0aGUgcGFnZQomIzQzOwkJCSAqLwomIzQzOwkJCXVuc2lnbmVkIGxvbmcgZm9saW9fZW5kOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTm8gaHVnZXRsYl9sb2NrOiB0aGUgc2NhbiBpcyByYWN5IGVpdGhlciB3YXksIGEgZnJhbWUKJiM0MzsJCQkgKiBjYW4gYmUgcG9pc29uZWQgcmlnaHQgYWZ0ZXIgaXQuIEp1c3QgZG9uJiMzOTt0IGxldCBhIGZvbGlvCiYjNDM7CQkJICogZGlzc29sdmVkIHVuZGVyIHVzIHdhbGsgdGhlIHNjYW4gYmFja3dhcmRzLgomIzQzOwkJCSAqLwomIzQzOwkJCWZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTsKJiM0MzsJCQlmb2xpb19lbmQgPSBtYXgoZm9saW9fZW5kLCBwZm4pOwomIzQzOwomIzQzOwkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkgewomIzQzOwkJCQlpZiAoZmlyc3QpCiYjNDM7CQkJCQlyZXR1cm4gUEZOX1BIWVMocGZuKTsKJiM0MzsJCQkJcG9pc29uID0gUEZOX1BIWVMobWluKGZvbGlvX2VuZCwgZW5kX3BmbikpOwomIzQzOwkJCX0KJiM0MzsJCQkvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovCiYjNDM7CQkJcGZuID0gZm9saW9fZW5kOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQkJLyogcGFnZSBpcyBnb29kLCBsZXQmIzM5O3MgZ28gdG8gdGhlIG5leHQgb25lICovCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoZmlyc3QpCiYjNDM7CQkJcmV0dXJuIFBGTl9QSFlTKHBmbik7CiYjNDM7CiYjNDM7CQlwb2lzb24gPSBQRk5fUEhZUyhwZm4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwb2lzb247CiYjNDM7fQomIzQzOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy4KICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5Lgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEhhcmR3YXJlIFBvaXNvbmluZyBDaGVja3MgaW4ga2V4ZWMqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBjcml0aWNhbCBjaGVja3MgZm9yIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB3aXRoaW4ga2V4ZWMuIEl0JiMzOTtzIHRvdWNoaW5nIGBrZXhlY19jb3JlLmNgLCBga2V4ZWNfZmlsZS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgcG90ZW50aWFsbHkgcXVpdGUgc2lnbmlmaWNhbnQuIEl0IGludHJvZHVjZXMgdGhvc2UgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgaW4gYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIChrZXhlY19jb3JlLmMpIGFuZCB0aGUgaG9sZS1maW5kaW5nIGZ1bmN0aW9ucyBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIChrZXhlY19maWxlLmMpLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBIYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCwgZWl0aGVyIHRocm91Z2ggYHN5c2ZzYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIEFuZCwgeWVzLCB0aGUga2V4ZWMgc3lzdGVtIGNhbGxzIHRoZW1zZWx2ZXMg4oCTIGBrZXhlY19sb2FkYCwgYGtleGVjX2ZpbGVfbG9hZGAg4oCTIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlIGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIFRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGdldCBzcGVjaWZpYy4gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24/IEFscmlnaHQsIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpbiBga2V4ZWNfY29yZS5jYCBpcyBkZWZpbml0ZWx5IG1vZGlmaWVkLiBUaGVuLCBpbiBga2V4ZWNfZmlsZS5jYCwgd2UgaGF2ZSBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgLiBBbmQgb2YgY291cnNlLCB0aGUgbmV3IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBmdW5jdGlvbnMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFyZSB2aXRhbCBmb3IgaW5pdGlhbCBhbmFseXNpcy4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgc29tZXRoaW5nLiBJcyBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgc3RhdGljIG9yIG5vdD8gR29vZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlIGhvbGUtZmluZGluZyBmdW5jdGlvbnMgYXJlLCBob3dldmVyLCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHByb2JhYmx5IG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGtleGVjX2ZpbGUuYywgcHJvYmFibHkgYnkgc29tZXRoaW5nIGxpa2UgYGtleGVjX3dhbGtfbWVtYmxvY2tgLiBCZXR0ZXIgY2hlY2sgdGhhdCBhbmQgbWFrZSBzdXJlLiBPa2F5LCBJJiMzOTtsbCBkaXZlIGludG8gYGtleGVjX2ZpbGUuY2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19maWxlLmM9MzY1PVNZU0NBTExfREVGSU5FNShrZXhlY19maWxlX2xvYWQsIGludCwga2VybmVsX2ZkLCBpbnQsIGluaXRyZF9mZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3Mi1cbmtlcm5lbC9rZXhlY19maWxlLmM6NDczOnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzQtXHRcdFx0XHQgICAgc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU3OD1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNjAwLVx0aWYgKGtidWYtXHUwMDNldG9wX2Rvd24pXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjYwMTpcdFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bihzdGFydCwgZW5kLCBrYnVmKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNjAyLVx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAoc3RhcnQsIGVuZCwga2J1Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IElucXVpcnkgQWJvdXQgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBpdCYjMzk7cyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBxdWVyeTogd2hvIG9yIHdoYXQgaXMgY2FsbGluZyAqdGhpcyogc3BlY2lmaWMgZnVuY3Rpb24/IFRoYXQgYHN0YXRpY2Aga2V5d29yZCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgc2NvcGVkIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNhbGxlcnMgYXJlIGxpbWl0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBvciBtb2R1bGUgdGhhdCYjMzk7cyBpbnZva2luZyBpdC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgY2FsbGJhY2sgaXMgYmVpbmcgdXNlZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgKndoeSogaXQgZXhpc3RzIGFuZCBpdHMgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgY2FsbCBzaXRlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19maWxlLmM9NTI4PXN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU3Ny1cbmtlcm5lbC9rZXhlY19maWxlLmM6NTc4OnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU3OS17XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz02MDY9c3RhdGljIGludCBrZXhlY193YWxrX21lbWJsb2NrKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy02MjEtXHQgKiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRCBoYW5kbGluZyBpblxua2VybmVsL2tleGVjX2ZpbGUuYzo2MjI6XHQgKiBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soKS5cbmtlcm5lbC9rZXhlY19maWxlLmMtNjIzLVx0ICovXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz03MzQ9aW50IGtleGVjX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ1LVx0ICovXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc0NjpcdHJldCA9IGtob19sb2NhdGVfbWVtX2hvbGUoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ3LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03NTctXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1ODpcdFx0cmV0ID0ga2V4ZWNfd2Fsa19yZXNvdXJjZXMoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNzU5LVx0ZWxzZVxua2VybmVsL2tleGVjX2ZpbGUuYzo3NjA6XHRcdHJldCA9IGtleGVjX3dhbGtfbWVtYmxvY2soa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNzYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgYW5kIFNlZ21lbnQgTGlzdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHZpc2liaWxpdHkgYW5kIHVzYWdlIHRocm91Z2hvdXQgdGhlIGtlcm5lbCwgd2hpY2ggSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgYW55IGFuYWx5c2lzLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgaWYgbm90IGxvY2FsIHRvIGEgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIHRoaXMgaXMgdXNlZC4KCk5leHQsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAuIENvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJiMzOTtkIGJldCBpdCYjMzk7cyBpbnZvbHZlZCBpbiB2YWxpZGF0aW5nIHRoZSBzZWdtZW50cyBvZiBtZW1vcnkgdGhlIHN5c3RlbSYjMzk7cyB3b3JraW5nIHdpdGguIFRoaXMgZnVuY3Rpb24mIzM5O3MgcHJvYmFibHkgY3JpdGljYWwgdG8gbWFraW5nIHN1cmUgdGhlIG1lbW9yeSBtYXBzIGFyZSBjb3JyZWN0IGJlZm9yZSBvciBhZnRlciBhIGtleGVjIHJlYm9vdCwgc28gdGhlIHN5c3RlbSBkb2VzbiYjMzk7dCBjcmFzaCBvciBnZXQgY29ycnVwdGVkLiBJIGJldCBpdCBtYWtlcyBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgY29uZmxpY3RpbmcgbWVtb3J5IHJlZ2lvbnMgb3IgaG9sZXMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gRGVmaW5pdGVseSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIHdvdWxkIHRyaWdnZXIgYW55IGlzc3VlcyB0aGVyZSwgdG8gbG9vayBmb3IgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2NvcmUuYz0xMDY9c3RhdGljIHN0cnVjdCBwYWdlICpraW1hZ2VfYWxsb2NfcGFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSxcbi0tXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cbmtlcm5lbC9rZXhlY19jb3JlLmM6MTEwOmludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxua2VybmVsL2tleGVjX2NvcmUuYy0xMTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhdGNoIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IEZhaWx1cmUgYW5kIEtleGVjIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBhIGZldyBrZXkgc3ltYm9scyBoZXJlOiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBhbmQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAuIEkgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L21tLmhgLgoKTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWUgYSBjb25kaXRpb25hbCBibG9jazoKCmBgYGMKI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpgYGAKCkhvd2V2ZXIsIHRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyAqb25seSogaW5jbHVkZXMgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIHVuZGVyIGFuIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmIGFnYWluc3QgYGluY2x1ZGUvbGludXgvbW0uaGAuCgpBaCwgaGVyZSYjMzk7cyB0aGUgcmVsZXZhbnQgc2VjdGlvbiBmcm9tIHRoZSBwYXRjaDoKCmBgYGMKQEAgLTUxOTIsNiAmIzQzOzUxOTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjA0LDYgJiM0Mzs1MjA2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIGBgYAoKWWVzLCB0aGF0IGNvbmZpcm1zIGl0OiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyB0aGUgKnByaW1hcnkqIGRlcGVuZGVuY3kgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gVG8gdGVzdCB0aGUga2V4ZWMtcmVsYXRlZCBjb21wb25lbnRzLCBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19LRVhFQ2AgYW5kIGBDT05GSUdfS0VYRUNfRklMRWAgYXJlIGVuYWJsZWQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzYyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NjQtXG5tbS9LY29uZmlnOjc2NTpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzY2LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkV4YW1pbmluZyBrZXhlYyBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIHRvIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBga2V4ZWNgIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gaGFuZGxlIGtlcm5lbCB0cmFuc2l0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgYGtleGVjYCBpcyB0aGUgbWVjaGFuaXNtIHdlIHVzZSBmb3IgcXVpY2tseSBzd2l0Y2hpbmcgYmV0d2VlbiBrZXJuZWxzLCBhbmQgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHRoZXJlLCBpdCBjb3VsZCBleHBsYWluIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBtYXliZSBldmVuIHNvbWUga2VybmVsIHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGBrZXhlY2AmIzM5O3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyBpbnZva2VkLCB3aGF0IGtlcm5lbHMgaXQmIzM5O3MgcG9pbnRpbmcgdG8sIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWlzY29uZmlndXJhdGlvbnMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCB3aXRoIGAvZXRjL2tleGVjLmNvbmZgIChvciB3aGVyZXZlciB0aGUgZGlzdHJpYnV0aW9uIHBsYWNlcyBpdCksIGFuZCBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBrZXJuZWwgY29tbWFuZC1saW5lIGZvciBhbnl0aGluZyBpbnRlcmVzdGluZyByZWxhdGVkIHRvIGBrZXhlY2Agb3B0aW9ucy4gVGhpcyBuZWVkcyB0byBiZSBhIGZvY3VzZWQgZXhwbG9yYXRpb24sIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgcHJldmVudCBhIHNtb290aCBrZXJuZWwgc3dhcCBvciBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYm9vdGxvYWRlciB0b28sIGxpa2UgR1JVQiwgYXMgdGhpcyBjYW4gcGxheSBhIHNpZ25pZmljYW50IHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLRVhFQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5rZXhlYz04PWNvbmZpZyBWTUNPUkVfSU5GT1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTEwLVxua2VybmVsL0tjb25maWcua2V4ZWM6MTE6Y29uZmlnIEtFWEVDX0NPUkVcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEyLVx0Ym9vbFxua2VybmVsL0tjb25maWcua2V4ZWMtMTMtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoxNDpjb25maWcgS0VYRUNfRUxGXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xNS1cdGJvb2xcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYz0xNz1jb25maWcgSEFWRV9JTUFfS0VYRUNcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xOS1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjIwOmNvbmZpZyBLRVhFQ1xua2VybmVsL0tjb25maWcua2V4ZWMtMjEtXHRib29sIFwmIzM0O0VuYWJsZSBrZXhlYyBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTM3LVxua2VybmVsL0tjb25maWcua2V4ZWM6Mzg6Y29uZmlnIEtFWEVDX0ZJTEVcbmtlcm5lbC9LY29uZmlnLmtleGVjLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgZmlsZSBiYXNlZCBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTQ4LVxua2VybmVsL0tjb25maWcua2V4ZWM6NDk6Y29uZmlnIEtFWEVDX1NJR1xua2VybmVsL0tjb25maWcua2V4ZWMtNTAtXHRib29sIFwmIzM0O1ZlcmlmeSBrZXJuZWwgc2lnbmF0dXJlIGR1cmluZyBrZXhlY19maWxlX2xvYWQoKSBzeXNjYWxsXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtNjItXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo2Mzpjb25maWcgS0VYRUNfU0lHX0ZPUkNFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy02NC1cdGJvb2wgXCYjMzQ7UmVxdWlyZSBhIHZhbGlkIHNpZ25hdHVyZSBpbiBrZXhlY19maWxlX2xvYWQoKSBzeXNjYWxsXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtNzAtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo3MTpjb25maWcgS0VYRUNfSU1BR0VfVkVSSUZZX1NJR1xua2VybmVsL0tjb25maWcua2V4ZWMtNzItXHRib29sIFwmIzM0O0VuYWJsZSBJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnQgKEFSTSlcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03OS1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjgwOmNvbmZpZyBLRVhFQ19CWklNQUdFX1ZFUklGWV9TSUdcbmtlcm5lbC9LY29uZmlnLmtleGVjLTgxLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnpJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy04OC1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjg5OmNvbmZpZyBLRVhFQ19KVU1QXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05MC1cdGJvb2wgXCYjMzQ7a2V4ZWMganVtcFwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc9Mz1tZW51IFwmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclwmIzM0O1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy00LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlclwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjE4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1wmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjYtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjI3OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXhlYyBhbmQgTWVtb3J5IEZhaWx1cmUgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMga2V4ZWMgYW5kIG1lbW9yeSBmYWlsdXJlIGludGVncmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNRU1PUllfRkFJTFVSRWAsIGBLRVhFQ2AsIGFuZCBgS0VYRUNfRklMRWAuIFRob3NlIGFyZSB0aGUgY29yZSBlbmFibGVycy4KCk5vdywgZm9yIHRoZSBrZXkgZnVuY3Rpb25zLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgaWRlbnRpZmllZCBhcyBjcml0aWNhbCB0byBleGFtaW5lOgoKKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YAoqICAgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAKKiAgIGByYW5nZV9maXJzdF9od3BvaXNvbmAKKiAgIGByYW5nZV9sYXN0X2h3cG9pc29uYAoKSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoYXQgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGFyZSwgaW4gZmFjdCwgbm9uLXN0YXRpYy4gWWVzLCB0aGV5IGFyZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEdvb2QsIHRoYXQgbWVhbnMgdGhleSYjMzk7cmUgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuCgpJIHNjYW5uZWQgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLCBidXQgYE1FTU9SWV9GQUlMVVJFYCBkZXBlbmRzIG9uIGBNTVVgLCB3aGljaCBpcyBzdGFuZGFyZC4gYEtFWEVDYCBhbmQgYEtFWEVDX0ZJTEVgIGFyZSBhbHNvIHR5cGljYWwsIHNvIG5vIHN1cnByaXNlcyB0aGVyZS4KCkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciBpbnRvIGZ1bmN0aW9ucy4gYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIGlzIGluIGBrZXhlY19jb3JlLmNgIGFuZCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBpbiBga2V4ZWNfZmlsZS5jYC4KCldhaXQsIGFib3V0IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIGJlY2F1c2UsIGRpcmVjdGx5LCBpdCBsb29rcyBsaWtlIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAgd2VyZSBtb2RpZmllZCB3aGljaCBhcmUgc3RhdGljLiBIb3dldmVyLCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBhIGdvb2QgcHJveHkgYmVjYXVzZSBpdCBjYWxscyBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCB3aGljaCB0aGVuIGNhbGxzIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LgoKSSBhbHNvIGNvbnNpZGVyZWQgYGtleGVjX3dhbGtfbWVtYmxvY2tgIGFuZCBga2V4ZWNfd2Fsa19yZXNvdXJjZXNgLCBidXQgdGhleSYjMzk7cmUgbm90IHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuCgpGb2N1c2luZyBvbiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIGJ5IGBraW1hZ2VfYWxsb2NfaW5pdGAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGRvX2tleGVjX2xvYWRgLgoKU28sIHRvIHN1bW1hcml6ZSBteSBjcml0aWNhbCB0YXJnZXRzOgoKKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCAoa2V4ZWNcX2NvcmUuYykKKiAgIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgIChrZXhlY1xfZmlsZS5jKQoqICAgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCAobW0vbWVtb3J5LWZhaWx1cmUuYykKKiAgIGByYW5nZV9sYXN0X2h3cG9pc29uYCAobW0vbWVtb3J5LWZhaWx1cmUuYykKClRoZSBSZWxldmFudCBjb25maWdzIEkgYW0gZm9jdXNpbmcgb24gYXJlOgoKKiAgIGBNRU1PUllfRkFJTFVSRWAKKiAgIGBLRVhFQ2AKKiAgIGBLRVhFQ19GSUxFYAoKTXkgcmVhc29uaW5nPyBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjaGVja3MgZm9yIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3lzdGVtIGNhbGxzLCBzcGVjaWZpY2FsbHkgYGtleGVjX2xvYWRgIGFuZCBga2V4ZWNfZmlsZV9sb2FkYC4gVGhlIHRoaW5nIGlzLCB0aGlzIGNhbiBiZSBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIG1hZHZpc2UmIzM5O3MgTUFEVl9IV1BPSVNPTiwgc28gdGhpcyBpcyB0ZXN0YWJsZSBhbmQgZnV6emluZyB0aGVzZSBwb2ludHMgc2VlbXMgdmVyeSB3b3J0aHdoaWxlLgoKT2theSwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2V4ZWNfbG9jYXRlX21lbV9ob2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2ZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jPTY4OT1zdGF0aWMgaW50IGtleGVjX2FsbG9jX2NvbnRpZyhzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNzI2LS8qKlxua2VybmVsL2tleGVjX2ZpbGUuYzo3Mjc6ICoga2V4ZWNfbG9jYXRlX21lbV9ob2xlIC0gZmluZCBmcmVlIG1lbW9yeSBmb3IgdGhlIHB1cmdhdG9yeSBvciB0aGUgbmV4dCBrZXJuZWxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzI4LSAqIEBrYnVmOlx0UGFyYW1ldGVycyBmb3IgdGhlIG1lbW9yeSBzZWFyY2guXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03MzMtICovXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjczNDppbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTczNS17XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz03NzU9aW50IGtleGVjX2FkZF9idWZmZXIoc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTgwNC1cdC8qIFdhbGsgdGhlIFJBTSByYW5nZXMgYW5kIGFsbG9jYXRlIGEgc3VpdGFibGUgcmFuZ2UgZm9yIHRoZSBidWZmZXIgKi9cbmtlcm5lbC9rZXhlY19maWxlLmM6ODA1Olx0cmV0ID0gYXJjaF9rZXhlY19sb2NhdGVfbWVtX2hvbGUoa2J1Zik7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTgwNi1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgRnVuY3Rpb24gRXhpc3RlbmNlIGZvciBLZXJuZWwgQm9vdCBPcGVyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIEZpcnN0LCBJIHJlbWVtYmVyIHRoYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgaW5kZWVkIGEgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCBhbmQsIG1vcmUgaW1wb3J0YW50bHkgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpbywgaXQgaXNuJiMzOTt0IGRlZmluZWQgYXMgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSBleHRlcm5hbGx5LCB3aGljaCBpcyBlc3NlbnRpYWwgZm9yIHdoYXQgSSYjMzk7bSBwbGFubmluZy4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHRvIGF2b2lkIGFueSBzaWxseSBtaXNpbnRlcnByZXRhdGlvbnMgZG93biB0aGUgbGluZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhpc3RlbmNlIG9mIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIGlzIGFsc28gcHJlc2VudCBhbmQgYXZhaWxhYmxlLCBhcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiB0aGlzIHBhcnQgb2YgdGhlIGJvb3QgcHJvY2Vzcy4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGEgcXVpY2sgY2hlY2sgbm93IGNhbiBzYXZlIGEgaGVhZGFjaGUgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXG4tLVxua2VybmVsL2tleGVjX2NvcmUuYy0xMDktXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbmtlcm5lbC9rZXhlY19jb3JlLmMtMTExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBkaXJlY3QsIGludGVybmFsIG1vbm9sb2d1ZSwgYWltZWQgYXQgYSBjb2xsZWFndWU6CgoqKlZlcmlmaWNhdGlvbiBDaGVjazogUG9pc29uIFJhbmdlcyoqCgpSaWdodCwgc28gaXQmIzM5O3MgY29uZmlybWVkLiBUaGlzIHRoaW5nICpkb2VzKiBleGlzdC4gTm93LCBiZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBhYnNvbHV0ZWx5IG5haWwgZG93biB0aGVzZSByYW5nZSBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBhcmUsIGluIGZhY3QsIHByZXNlbnQuIEkgbmVlZCB0byBndWFyYW50ZWUgdGhlaXIgZXhpc3RlbmNlIGJlZm9yZSByZWx5aW5nIG9uIHRoZW0uIFdlIGRvbiYjMzk7dCB3YW50IGFueSBzdXJwcmlzZXMgd2hlbiB3ZSBzdGFydCBtb3ZpbmcgZm9yd2FyZCBvbiB0aGlzIHBhcnRpY3VsYXIgcHJvamVjdC4gTGV04oCZcyBjb25maXJtIGJlZm9yZSB3ZSBzdGFydCBhbnkgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhbmdlX2ZpcnN0X2h3cG9pc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTEwMz1zdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTYxOnBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODY4CgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqVGhlIFJlYWxpdHkgb2YgdGhlIERhdGEqKgoKT2theSwgc28geWVzLCB0aGUgcmVzdWx0cyBhcmUgZGVmaW5pdGVseSB0aGVyZS4gSSBjYW4gc2VlIHRoZSBkYXRhIGFuZCBjb25maXJtIHRoZSBvdXRwdXQuIE5vdyB0aGF0IEkgaGF2ZSBjb25maXJtYXRpb24sIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bSBnb2luZyB0byBmb3JtdWxhdGUgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwsIHByZWNpc2VseSBhbmQgZWZmaWNpZW50bHkuIEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIGluIHRoZSBvcHRpbWFsIHdheSBmb3IgdGhlIHN5c3RlbSB0byBwcm9jZXNzIHRoZSBpbmZvcm1hdGlvbiwgY29uc2lkZXJpbmcgYWxsIHRoZSByZWxldmFudCBwYXJhbWV0ZXJzIGFuZCBlbnN1cmluZyB0aGUgY29ycmVjdCBsaW5rYWdlLiBJdCYjMzk7cyB0aW1lIHRvIGJ1aWxkIHRoZSBuZXh0IGxheWVyIG9mIHRoaXMgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGNoZWNrcyB0byBrZXhlYyBzZWdtZW50IGxvYWRpbmcgYW5kIG1lbW9yeSBob2xlIGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzdGVtIGNhbGxzLCBhbmQgaGFyZHdhcmUgcG9pc29uaW5nIGNhbiBiZSBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS4gVGhlcmVmb3JlLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB0ZXN0YWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7S0VYRUMmIzM0OywKICAgICYjMzQ7S0VYRUNfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAgICYjMzQ7a2V4ZWNfbG9jYXRlX21lbV9ob2xlJiMzNDssCiAgICAmIzM0O3JhbmdlX2ZpcnN0X2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3JhbmdlX2xhc3RfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgY2hlY2tzIHRvIGtleGVjIHNlZ21lbnQgbG9hZGluZyBhbmQgbWVtb3J5IGhvbGUgbG9jYXRpb24gbG9naWMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXN0ZW0gY2FsbHMsIGFuZCBoYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHRlc3RhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGR1cmluZyBrZXhlYyBvcGVyYXRpb25zIGJ5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBjb250YWluIHBvaXNvbmVkIHBhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgbWVtb3J5IGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQga2V4ZWMgc2VnbWVudCBwbGFjZW1lbnQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1OTlmMDY5YjAxMjc2ZDkyOTBkYzY5ZWM4N2MxZmZlNjcxODllNzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjU2OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDdmYWJlNmM2NmI0YjcuLjQxYjkyMzkwMWIxOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUxOTIsNiAmIzQzOzUxOTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjA0LDYgJiM0Mzs1MjA2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmMKaW5kZXggZGM3NzBiOWE2ZDA1My4uZTA5N2U5ODBiMTQzOSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfY29yZS5jCkBAIC0yMTIsNiAmIzQzOzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIAl9CiAjZW5kaWYKIAomIzQzOwkvKgomIzQzOwkgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZQomIzQzOwkgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLSZndDtzZWdtZW50W2ldLm1lbSwKJiM0MzsJCQkJCSBpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWCkKJiM0MzsJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIHNlYXJjaGVkIGZyb20gc3lzdGVtIFJBTSByYXRoZXIgdGhhbgogCSAqIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIG5vdCBndWFyYW50ZWVkCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfZmlsZS5jIGIva2VybmVsL2tleGVjX2ZpbGUuYwppbmRleCA1OWZiOWQ3MWU5ZDg2Li45YmE2Y2MwMWFmOTI5IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWNfZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rZXhlY19maWxlLmMKQEAgLTQ3NSw2ICYjNDM7NDc1LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX2VuZCA9IG1pbihlbmQsIGtidWYtJmd0O2J1Zl9tYXgpOwogCXRlbXBfc3RhcnQgPSB0ZW1wX2VuZCAtIGtidWYtJmd0O21lbXN6ICYjNDM7IDE7CkBAIC01MDQsNiAmIzQzOzUwNSwxNSBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCXBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQlpZiAocG9pc29uICZsdDsga2J1Zi0mZ3Q7bWVtc3opCiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJCXRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLSZndDttZW1zejsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJLyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi8KIAkJYnJlYWs7CiAJfSB3aGlsZSAoMSk7CkBAIC01MjAsNiAmIzQzOzUzMCw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIHsKIAlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtJmd0O2ltYWdlOwogCXVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7CiYjNDM7CXBoeXNfYWRkcl90IHBvaXNvbjsKIAogCXRlbXBfc3RhcnQgPSBtYXgoc3RhcnQsIGtidWYtJmd0O2J1Zl9taW4pOwogCkBAIC01NDYsNiAmIzQzOzU1NywxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uICYjNDM7IFBBR0VfU0laRTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJLyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi8KIAkJYnJlYWs7CiAJfSB3aGlsZSAoMSk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhOGIwM2UyOTIwYmE4Li5jNDg1ZTIwNWZiNjMzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTk2LDYgJiM0Mzs5Niw3OCBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIAkJbWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBoYXJkd2FyZS1wb2lzb25lZCBvbmxpbmUgcGFnZSBpbiBbc3RhcnQsCiYjNDM7ICogc3RhcnQgJiM0Mzsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJCQkgIGJvb2wgZmlyc3QpCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYOwomIzQzOwl1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjsKJiM0MzsKJiM0MzsJaWYgKCFzaXplIHx8ICFhdG9taWNfbG9uZ19yZWFkKCZhbXA7bnVtX3BvaXNvbmVkX3BhZ2VzKSkKJiM0MzsJCXJldHVybiBwb2lzb247CiYjNDM7CiYjNDM7CWVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCAmIzQzOyBzaXplIC0gMSk7CiYjNDM7CWZvciAocGZuID0gUEhZU19QRk4oc3RhcnQpOyBwZm4gJmx0Oz0gZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsKJiM0MzsJCWlmICghcGFnZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBodWdldGxiZnMgaXMgYSBiaXQgc3BlY2lhbCwgZ2l2ZW4gdGhlIHBvaXNvbgomIzQzOwkJCSAqIGluZm9ybWF0aW9uIGlzIGF0IHRoZSBmb2xpbywgbm90IGF0IHRoZSBwYWdlCiYjNDM7CQkJICovCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBmb2xpb19lbmQ7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBObyBodWdldGxiX2xvY2s6IHRoZSBzY2FuIGlzIHJhY3kgZWl0aGVyIHdheSwgYSBmcmFtZQomIzQzOwkJCSAqIGNhbiBiZSBwb2lzb25lZCByaWdodCBhZnRlciBpdC4gSnVzdCBkb24mIzM5O3QgbGV0IGEgZm9saW8KJiM0MzsJCQkgKiBkaXNzb2x2ZWQgdW5kZXIgdXMgd2FsayB0aGUgc2NhbiBiYWNrd2FyZHMuCiYjNDM7CQkJICovCiYjNDM7CQkJZm9saW9fZW5kID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxOwomIzQzOwkJCWZvbGlvX2VuZCA9IG1heChmb2xpb19lbmQsIHBmbik7CiYjNDM7CiYjNDM7CQkJaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7CiYjNDM7CQkJCWlmIChmaXJzdCkKJiM0MzsJCQkJCXJldHVybiBQRk5fUEhZUyhwZm4pOwomIzQzOwkJCQlwb2lzb24gPSBQRk5fUEhZUyhtaW4oZm9saW9fZW5kLCBlbmRfcGZuKSk7CiYjNDM7CQkJfQomIzQzOwkJCS8qIHNraXAgYWxsIHRoZSBwZm5zIHRoYXQgYmVsb25nIHRvIGh1Z2V0bGIgKi8KJiM0MzsJCQlwZm4gPSBmb2xpb19lbmQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIVBhZ2VIV1BvaXNvbihwYWdlKSkKJiM0MzsJCQkvKiBwYWdlIGlzIGdvb2QsIGxldCYjMzk7cyBnbyB0byB0aGUgbmV4dCBvbmUgKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChmaXJzdCkKJiM0MzsJCQlyZXR1cm4gUEZOX1BIWVMocGZuKTsKJiM0MzsKJiM0MzsJCXBvaXNvbiA9IFBGTl9QSFlTKHBmbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBvaXNvbjsKJiM0Mzt9CiYjNDM7CiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpOwomIzQzO30KJiM0MzsKIC8qKgogICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLgogICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI3CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2gsIGJ1dCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJiMzOTtzIHB1cnBvc2UsIHRoaXMgc2VlbXMgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgcmVsZXZhbnQgaXNzdWVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCB0aGUgYWRkaXRpb24gb2YgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnRyb2R1Y2VkIHRvIGRldGVjdCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgd2l0aGluIGEgZ2l2ZW4gcmFuZ2UuIFRoZXkmIzM5O3JlIGJlaW5nIGltcGxlbWVudGVkIGFuZCB0aGVuIGluY29ycG9yYXRlZCBpbnRvIGBrZXhlY19jb3JlLmNgIGFuZCBga2V4ZWNfZmlsZS5jYCB0byBwcmV2ZW50IGtleGVjIGRlc3RpbmF0aW9ucyBmcm9tIGxhbmRpbmcgb24gcHJvYmxlbWF0aWMgbWVtb3J5IHJlZ2lvbnMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIHBoeXNpY2FsIG1lbW9yeSBlcnJvcnMgbGlrZSBFQ0MgZXJyb3JzLiBUaGlzIGFsc28gZW5hYmxlcyBza2lwcGluZyBvZiB0aG9zZSByYW5nZXMgd2hlbiBsb2NhdGluZyBtZW1vcnkgaG9sZXMuCgpIZXJlJiMzOTtzIHRoZSBjaGFuZ2UgYW5hbHlzaXMsIHN0ZXAgYnkgc3RlcDoKCjEuICBXZSBoYXZlIGRlY2xhcmF0aW9ucyBhbmQgc3R1YiBpbXBsZW1lbnRhdGlvbnMgaW4gYG1tLmhgLgoyLiAgSW4gYGtleGVjX2NvcmUuY2AsIHRoZSBwYXRjaCBpcyBpbnRlZ3JhdGVkIGludG8gYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIHRvIHByZXZlbnQgc2VnbWVudHMgZnJvbSBsYW5kaW5nIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4KMy4gIGBrZXhlY19maWxlLmNgIHV0aWxpemVzIHRoZSBmdW5jdGlvbnMgdG8gYWRqdXN0IHNlYXJjaCByYW5nZXMsIHByZXZlbnRpbmcgdGhlIHNlbGVjdGlvbiBvZiBoYXJkd2FyZS1wb2lzb25lZCByZWdpb25zLgo0LiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZHMgdGhlIGByYW5nZV9od3BvaXNvbmAgaW1wbGVtZW50YXRpb24sIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaHdwb2lzb24gY2hlY2tzLgoKTm93LCBkb2VzIHRoaXMgKmV4cG9zZSogYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGF0JiMzOTtzIHRoZSBLTVNBTiBxdWVzdGlvbi4gTG9va2luZyBhdCBpdCwgSSBzZWU6CgoqICAgTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UuCiogICBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYmVpbmcgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYywgd2hpY2ggaXMgYSBtYWpvciBLTVNBTiBjb25jZXJuLgoqICAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLgoqICAgVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGFsbG93IHVzIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnMuCgpCYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgKmF2b2lkaW5nKiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMuIFRoaXMgaXMgYSB2ZXJ5IGRpZmZlcmVudCB0aGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBzb2Z0d2FyZSBzZW5zZSwgd2hpY2ggaXMgd2hhdCBLTVNBTiBkZXRlY3RzLiBUaGVzZSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBzb2Z0d2FyZSBidWdzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBhbiBpc3N1ZSBvZiBwaHlzaWNhbCBtZW1vcnkgaW50ZWdyaXR5LCBub3Qgc29mdHdhcmUgaW5pdGlhbGl6YXRpb24uIEtBU0FOIGFuZCBMT0NLREVQIGFyZW4mIzM5O3QgcmVhbGx5IHJlbGV2YW50IGhlcmUgZWl0aGVyLCBidXQgS01TQU4gaXMgZGVmaW5pdGVseSBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgam9iLgoKVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggZm9jdXNlcyBleGNsdXNpdmVseSBvbiBpZGVudGlmeWluZyBhbmQgYXZvaWRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgc29mdHdhcmUgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGR1cmluZyBrZXhlYyBvcGVyYXRpb25zIGJ5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBjb250YWluIHBvaXNvbmVkIHBhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgbWVtb3J5IGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQga2V4ZWMgc2VnbWVudCBwbGFjZW1lbnQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBkdXJpbmcga2V4ZWMgb3BlcmF0aW9ucyBieSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IHBoeXNpY2FsIG1lbW9yeSByYW5nZXMgY29udGFpbiBwb2lzb25lZCBwYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIG1lbW9yeSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtleGVjIHNlZ21lbnQgcGxhY2VtZW50LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1Njo0NS4xMzIxNjM4MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY2NjQ4OTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiS0VYRUNcIixcbiAgICBcIktFWEVDX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0XCIsXG4gICAgXCJrZXhlY19sb2NhdGVfbWVtX2hvbGVcIixcbiAgICBcInJhbmdlX2ZpcnN0X2h3cG9pc29uXCIsXG4gICAgXCJyYW5nZV9sYXN0X2h3cG9pc29uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBkdXJpbmcga2V4ZWMgb3BlcmF0aW9ucyBieSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IHBoeXNpY2FsIG1lbW9yeSByYW5nZXMgY29udGFpbiBwb2lzb25lZCBwYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIG1lbW9yeSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtleGVjIHNlZ21lbnQgcGxhY2VtZW50LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGNoZWNrcyB0byBrZXhlYyBzZWdtZW50IGxvYWRpbmcgYW5kIG1lbW9yeSBob2xlIGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzdGVtIGNhbGxzLCBhbmQgaGFyZHdhcmUgcG9pc29uaW5nIGNhbiBiZSBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS4gVGhlcmVmb3JlLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB0ZXN0YWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTY6NDUuMTMyMTY5MzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUyOTIzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDU5OWYwNjliMDEyNzZkOTI5MGRjNjllYzg3YzFmZmU2NzE4OWU3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjU2OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDdmYWJlNmM2NmI0YjcuLjQxYjkyMzkwMWIxOTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTUxOTIsNiArNTE5Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XFxuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XFxuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbitwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4ge1xcbkBAIC01MjA0LDYgKzUyMDYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXFxuIHtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gUEhZU19BRERSX01BWDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIFBIWVNfQUREUl9NQVg7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfY29yZS5jIGIva2VybmVsL2tleGVjX2NvcmUuY1xcbmluZGV4IGRjNzcwYjlhNmQwNTMuLmUwOTdlOTgwYjE0MzkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xcbisrKyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcXG5AQCAtMjEyLDYgKzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlamVjdCBkZXN0aW5hdGlvbnMgdGhhdCBsYW5kIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeTogdGhlXFxuK1xcdCAqIHJlbG9jYXRpb24gY29weSB3b3VsZCBtYWNoaW5lLWNoZWNrIG9uIHRoZSBiYWQgZnJhbWUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfc2VnbWVudHM7IGkrKykge1xcbitcXHRcXHRpZiAocmFuZ2VfZmlyc3RfaHdwb2lzb24oaW1hZ2UtXFx1MDAzZXNlZ21lbnRbaV0ubWVtLFxcbitcXHRcXHRcXHRcXHRcXHQgaW1hZ2UtXFx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXFxuK1xcdFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXFxuIFxcdCAqIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIG5vdCBndWFyYW50ZWVkXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXFxuaW5kZXggNTlmYjlkNzFlOWQ4Ni4uOWJhNmNjMDFhZjkyOSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwva2V4ZWNfZmlsZS5jXFxuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xcbkBAIC00NzUsNiArNDc1LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIHtcXG4gXFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVxcdTAwM2VpbWFnZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcXG4rXFx0cGh5c19hZGRyX3QgcG9pc29uO1xcbiBcXG4gXFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVxcdTAwM2VidWZfbWF4KTtcXG4gXFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cXHUwMDNlbWVtc3ogKyAxO1xcbkBAIC01MDQsNiArNTA1LDE1IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0cG9pc29uID0gcmFuZ2VfZmlyc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cXHUwMDNlbWVtc3opO1xcbitcXHRcXHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcXG4rXFx0XFx0XFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xcbitcXHRcXHRcXHRpZiAocG9pc29uIFxcdTAwM2Mga2J1Zi1cXHUwMDNlbWVtc3opXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHR0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi1cXHUwMDNlbWVtc3o7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fSB3aGlsZSAoMSk7XFxuQEAgLTUyMCw2ICs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIHtcXG4gXFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVxcdTAwM2VpbWFnZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcXG4rXFx0cGh5c19hZGRyX3QgcG9pc29uO1xcbiBcXG4gXFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cXHUwMDNlYnVmX21pbik7XFxuIFxcbkBAIC01NDYsNiArNTU3LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdHBvaXNvbiA9IHJhbmdlX2xhc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cXHUwMDNlbWVtc3opO1xcbitcXHRcXHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcXG4rXFx0XFx0XFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xcbitcXHRcXHRcXHR0ZW1wX3N0YXJ0ID0gcG9pc29uICsgUEFHRV9TSVpFO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi9cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH0gd2hpbGUgKDEpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IGE4YjAzZTI5MjBiYTguLmM0ODVlMjA1ZmI2MzMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtOTYsNiArOTYsNzggQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXFxuIFxcdFxcdG1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxcbisgKiBzdGFydCArIHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi5cXG4rICovXFxuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHRcXHRcXHQgIGJvb2wgZmlyc3QpXFxuK3tcXG4rXFx0cGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47XFxuK1xcbitcXHRpZiAoIXNpemUgfHwgIWF0b21pY19sb25nX3JlYWQoXFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcykpXFxuK1xcdFxcdHJldHVybiBwb2lzb247XFxuK1xcbitcXHRlbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgKyBzaXplIC0gMSk7XFxuK1xcdGZvciAocGZuID0gUEhZU19QRk4oc3RhcnQpOyBwZm4gXFx1MDAzYz0gZW5kX3BmbjsgcGZuKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogaHVnZXRsYmZzIGlzIGEgYml0IHNwZWNpYWwsIGdpdmVuIHRoZSBwb2lzb25cXG4rXFx0XFx0XFx0ICogaW5mb3JtYXRpb24gaXMgYXQgdGhlIGZvbGlvLCBub3QgYXQgdGhlIHBhZ2VcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZm9saW9fZW5kO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTm8gaHVnZXRsYl9sb2NrOiB0aGUgc2NhbiBpcyByYWN5IGVpdGhlciB3YXksIGEgZnJhbWVcXG4rXFx0XFx0XFx0ICogY2FuIGJlIHBvaXNvbmVkIHJpZ2h0IGFmdGVyIGl0LiBKdXN0IGRvbid0IGxldCBhIGZvbGlvXFxuK1xcdFxcdFxcdCAqIGRpc3NvbHZlZCB1bmRlciB1cyB3YWxrIHRoZSBzY2FuIGJhY2t3YXJkcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xcbitcXHRcXHRcXHRmb2xpb19lbmQgPSBtYXgoZm9saW9fZW5kLCBwZm4pO1xcbitcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChmaXJzdClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XFxuK1xcdFxcdFxcdFxcdHBvaXNvbiA9IFBGTl9QSFlTKG1pbihmb2xpb19lbmQsIGVuZF9wZm4pKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHQvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovXFxuK1xcdFxcdFxcdHBmbiA9IGZvbGlvX2VuZDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghUGFnZUhXUG9pc29uKHBhZ2UpKVxcbitcXHRcXHRcXHQvKiBwYWdlIGlzIGdvb2QsIGxldCdzIGdvIHRvIHRoZSBuZXh0IG9uZSAqL1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmIChmaXJzdClcXG4rXFx0XFx0XFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XFxuK1xcbitcXHRcXHRwb2lzb24gPSBQRk5fUEhZUyhwZm4pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcG9pc29uO1xcbit9XFxuK1xcbitwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgdHJ1ZSk7XFxuK31cXG4rXFxuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy5cXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU2OjQ2LjM4NTc2NDQyOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMzc2MjI1MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJLRVhFQ1wiLFxuICAgIFwiS0VYRUNfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgICBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICAgIFwicmFuZ2VfZmlyc3RfaHdwb2lzb25cIixcbiAgICBcInJhbmdlX2xhc3RfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBjaGVja3MgdG8ga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbiBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c3RlbSBjYWxscywgYW5kIGhhcmR3YXJlIHBvaXNvbmluZyBjYW4gYmUgc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgdGVzdGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1OTlmMDY5YjAxMjc2ZDkyOTBkYzY5ZWM4N2MxZmZlNjcxODllNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjU2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA3ZmFiZTZjNjZiNGI3Li40MWI5MjM5MDFiMTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MTkyLDYgKzUxOTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwO1xuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpO1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG5AQCAtNTIwNCw2ICs1MjA2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXG4ge1xuIH1cbitcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuK1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gUEhZU19BRERSX01BWDtcbit9XG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbmluZGV4IGRjNzcwYjlhNmQwNTMuLmUwOTdlOTgwYjE0MzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXG4rKysgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5AQCAtMjEyLDYgKzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbiBcdH1cbiAjZW5kaWZcbiBcbitcdC8qXG4rXHQgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZVxuK1x0ICogcmVsb2NhdGlvbiBjb3B5IHdvdWxkIG1hY2hpbmUtY2hlY2sgb24gdGhlIGJhZCBmcmFtZS5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc2VnbWVudHM7IGkrKykge1xuK1x0XHRpZiAocmFuZ2VfZmlyc3RfaHdwb2lzb24oaW1hZ2UtXHUwMDNlc2VnbWVudFtpXS5tZW0sXG4rXHRcdFx0XHRcdCBpbWFnZS1cdTAwM2VzZWdtZW50W2ldLm1lbXN6KSAhPSBQSFlTX0FERFJfTUFYKVxuK1x0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBUaGUgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBzZWFyY2hlZCBmcm9tIHN5c3RlbSBSQU0gcmF0aGVyIHRoYW5cbiBcdCAqIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIG5vdCBndWFyYW50ZWVkXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ZpbGUuYyBiL2tlcm5lbC9rZXhlY19maWxlLmNcbmluZGV4IDU5ZmI5ZDcxZTlkODYuLjliYTZjYzAxYWY5MjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfZmlsZS5jXG4rKysgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5AQCAtNDc1LDYgKzQ3NSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cdTAwM2VpbWFnZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XG4rXHRwaHlzX2FkZHJfdCBwb2lzb247XG4gXG4gXHR0ZW1wX2VuZCA9IG1pbihlbmQsIGtidWYtXHUwMDNlYnVmX21heCk7XG4gXHR0ZW1wX3N0YXJ0ID0gdGVtcF9lbmQgLSBrYnVmLVx1MDAzZW1lbXN6ICsgMTtcbkBAIC01MDQsNiArNTA1LDE1IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdHBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0aWYgKHBvaXNvbiBcdTAwM2Mga2J1Zi1cdTAwM2VtZW1zeilcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTIwLDYgKzUzMCw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDYsNiArNTU3LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0dGVtcF9zdGFydCA9IHBvaXNvbiArIFBBR0VfU0laRTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5jNDg1ZTIwNWZiNjMzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgKzk2LDc4IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbisvKlxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxuKyAqL1xuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdFx0ICBib29sIGZpcnN0KVxuK3tcbitcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcbitcbitcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuK1x0XHRyZXR1cm4gcG9pc29uO1xuK1xuK1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICsgc2l6ZSAtIDEpO1xuK1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbisrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1xuK1x0XHRpZiAoIXBhZ2UpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGh1Z2V0bGJmcyBpcyBhIGJpdCBzcGVjaWFsLCBnaXZlbiB0aGUgcG9pc29uXG4rXHRcdFx0ICogaW5mb3JtYXRpb24gaXMgYXQgdGhlIGZvbGlvLCBub3QgYXQgdGhlIHBhZ2VcbitcdFx0XHQgKi9cbitcdFx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX2VuZDtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE5vIGh1Z2V0bGJfbG9jazogdGhlIHNjYW4gaXMgcmFjeSBlaXRoZXIgd2F5LCBhIGZyYW1lXG4rXHRcdFx0ICogY2FuIGJlIHBvaXNvbmVkIHJpZ2h0IGFmdGVyIGl0LiBKdXN0IGRvbid0IGxldCBhIGZvbGlvXG4rXHRcdFx0ICogZGlzc29sdmVkIHVuZGVyIHVzIHdhbGsgdGhlIHNjYW4gYmFja3dhcmRzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuK1x0XHRcdGZvbGlvX2VuZCA9IG1heChmb2xpb19lbmQsIHBmbik7XG4rXG4rXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XG4rXHRcdFx0XHRpZiAoZmlyc3QpXG4rXHRcdFx0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuK1x0XHRcdFx0cG9pc29uID0gUEZOX1BIWVMobWluKGZvbGlvX2VuZCwgZW5kX3BmbikpO1xuK1x0XHRcdH1cbitcdFx0XHQvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovXG4rXHRcdFx0cGZuID0gZm9saW9fZW5kO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghUGFnZUhXUG9pc29uKHBhZ2UpKVxuK1x0XHRcdC8qIHBhZ2UgaXMgZ29vZCwgbGV0J3MgZ28gdG8gdGhlIG5leHQgb25lICovXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChmaXJzdClcbitcdFx0XHRyZXR1cm4gUEZOX1BIWVMocGZuKTtcbitcbitcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbitcdH1cbitcbitcdHJldHVybiBwb2lzb247XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbit9XG4rXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1Njo0Ni4zODU3NjU2NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDA5ODcwMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEhhcmR3YXJlIFBvaXNvbmluZyBDaGVja3MgaW4ga2V4ZWMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIHNvbWUgY3JpdGljYWwgY2hlY2tzIGZvciBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgd2l0aGluIGtleGVjLiBJdCdzIHRvdWNoaW5nIGBrZXhlY19jb3JlLmNgLCBga2V4ZWNfZmlsZS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBwb3RlbnRpYWxseSBxdWl0ZSBzaWduaWZpY2FudC4gSXQgaW50cm9kdWNlcyB0aG9zZSBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAgZnVuY3Rpb25zLCBhbmQgdGhleSdyZSBiZWluZyB1c2VkIGluIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCAoa2V4ZWNfY29yZS5jKSBhbmQgdGhlIGhvbGUtZmluZGluZyBmdW5jdGlvbnMgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCAoa2V4ZWNfZmlsZS5jKS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBIYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCwgZWl0aGVyIHRocm91Z2ggYHN5c2ZzYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIEFuZCwgeWVzLCB0aGUga2V4ZWMgc3lzdGVtIGNhbGxzIHRoZW1zZWx2ZXMg4oCTIGBrZXhlY19sb2FkYCwgYGtleGVjX2ZpbGVfbG9hZGAg4oCTIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlIGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIFRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBnZXQgc3BlY2lmaWMuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uPyBBbHJpZ2h0LCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgaW4gYGtleGVjX2NvcmUuY2AgaXMgZGVmaW5pdGVseSBtb2RpZmllZC4gVGhlbiwgaW4gYGtleGVjX2ZpbGUuY2AsIHdlIGhhdmUgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYC4gQW5kIG9mIGNvdXJzZSwgdGhlIG5ldyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAgZnVuY3Rpb25zIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgdml0YWwgZm9yIGluaXRpYWwgYW5hbHlzaXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgc29tZXRoaW5nLiBJcyBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgc3RhdGljIG9yIG5vdD8gR29vZCwgaXQncyBub24tc3RhdGljLiBUaGUgaG9sZS1maW5kaW5nIGZ1bmN0aW9ucyBhcmUsIGhvd2V2ZXIsIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgcHJvYmFibHkgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4ga2V4ZWNfZmlsZS5jLCBwcm9iYWJseSBieSBzb21ldGhpbmcgbGlrZSBga2V4ZWNfd2Fsa19tZW1ibG9ja2AuIEJldHRlciBjaGVjayB0aGF0IGFuZCBtYWtlIHN1cmUuIE9rYXksIEknbGwgZGl2ZSBpbnRvIGBrZXhlY19maWxlLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1Njo1My43OTU2Mzc5NTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NTUwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9jYXRlX21lbV9ob2xlX3RvcF9kb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9rZXhlY19maWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2tleGVjX2ZpbGUuYz0zNjU9U1lTQ0FMTF9ERUZJTkU1KGtleGVjX2ZpbGVfbG9hZCwgaW50LCBrZXJuZWxfZmQsIGludCwgaW5pdHJkX2ZkLFxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzItXFxua2VybmVsL2tleGVjX2ZpbGUuYzo0NzM6c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU3OD1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy02MDAtXFx0aWYgKGtidWYtXFx1MDAzZXRvcF9kb3duKVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NjAxOlxcdFxcdHJldHVybiBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24oc3RhcnQsIGVuZCwga2J1Zik7XFxua2VybmVsL2tleGVjX2ZpbGUuYy02MDItXFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAoc3RhcnQsIGVuZCwga2J1Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU2OjUzLjgzOTE5NTkwOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjE0MTg2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5xdWlyeSBBYm91dCBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBpdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIHF1ZXJ5OiB3aG8gb3Igd2hhdCBpcyBjYWxsaW5nICp0aGlzKiBzcGVjaWZpYyBmdW5jdGlvbj8gVGhhdCBgc3RhdGljYCBrZXl3b3JkIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHNjb3BlZCB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBjYWxsZXJzIGFyZSBsaW1pdGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEknbGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBvciBtb2R1bGUgdGhhdCdzIGludm9raW5nIGl0LiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBjYWxsYmFjayBpcyBiZWluZyB1c2VkIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyAqd2h5KiBpdCBleGlzdHMgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBjYWxsIHNpdGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTY6NTcuOTYwNjE3MjAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDI4ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19maWxlLmM9NTI4PXN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNTc3LVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NTc4OnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxua2VybmVsL2tleGVjX2ZpbGUuYy01Nzkte1xcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYz02MDY9c3RhdGljIGludCBrZXhlY193YWxrX21lbWJsb2NrKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYyMS1cXHQgKiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRCBoYW5kbGluZyBpblxcbmtlcm5lbC9rZXhlY19maWxlLmM6NjIyOlxcdCAqIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjaygpLlxcbmtlcm5lbC9rZXhlY19maWxlLmMtNjIzLVxcdCAqL1xcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYz03MzQ9aW50IGtleGVjX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy03NDUtXFx0ICovXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3NDY6XFx0cmV0ID0ga2hvX2xvY2F0ZV9tZW1faG9sZShrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ3LVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzU3LVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1ODpcXHRcXHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbmtlcm5lbC9rZXhlY19maWxlLmMtNzU5LVxcdGVsc2VcXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc2MDpcXHRcXHRyZXQgPSBrZXhlY193YWxrX21lbWJsb2NrKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XFxua2VybmVsL2tleGVjX2ZpbGUuYy03NjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU2OjU4LjAwNTA1MDMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NzUwMjg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgIGFuZCBTZWdtZW50IExpc3RzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCB2aXNpYmlsaXR5IGFuZCB1c2FnZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIHdoaWNoIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIGFueSBhbmFseXNpcy4gSXQncyBhIGtleSBmdW5jdGlvbiwgaWYgbm90IGxvY2FsIHRvIGEgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIHRoaXMgaXMgdXNlZC5cblxuTmV4dCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gQ29uc2lkZXJpbmcgdGhlIG5hbWUsIEknZCBiZXQgaXQncyBpbnZvbHZlZCBpbiB2YWxpZGF0aW5nIHRoZSBzZWdtZW50cyBvZiBtZW1vcnkgdGhlIHN5c3RlbSdzIHdvcmtpbmcgd2l0aC4gVGhpcyBmdW5jdGlvbidzIHByb2JhYmx5IGNyaXRpY2FsIHRvIG1ha2luZyBzdXJlIHRoZSBtZW1vcnkgbWFwcyBhcmUgY29ycmVjdCBiZWZvcmUgb3IgYWZ0ZXIgYSBrZXhlYyByZWJvb3QsIHNvIHRoZSBzeXN0ZW0gZG9lc24ndCBjcmFzaCBvciBnZXQgY29ycnVwdGVkLiBJIGJldCBpdCBtYWtlcyBzdXJlIHRoZXJlIGFyZW4ndCBjb25mbGljdGluZyBtZW1vcnkgcmVnaW9ucyBvciBob2xlcyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBEZWZpbml0ZWx5IGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgd291bGQgdHJpZ2dlciBhbnkgaXNzdWVzIHRoZXJlLCB0byBsb29rIGZvciB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzkxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MDIuMjUyNTU2MzA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTgyNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2tleGVjX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2V4ZWNfY29yZS5jPTEwNj1zdGF0aWMgc3RydWN0IHBhZ2UgKmtpbWFnZV9hbGxvY19wYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlLFxcbi0tXFxua2VybmVsL2tleGVjX2NvcmUuYy0xMDktXFxua2VybmVsL2tleGVjX2NvcmUuYzoxMTA6aW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxua2VybmVsL2tleGVjX2NvcmUuYy0xMTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzowMi4yOTQ1NDM0NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njc2NjA4MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYXRjaCBEZXBlbmRlbmNpZXMgZm9yIE1lbW9yeSBGYWlsdXJlIGFuZCBLZXhlYyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBzeW1ib2xzIGhlcmU6IGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCwgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAsIGFuZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgvbW0uaGAuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgY29uZGl0aW9uYWwgYmxvY2s6XG5cbmBgYGNcbiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuYGBgXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCBJJ20gZXhhbWluaW5nICpvbmx5KiBpbmNsdWRlcyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAgdW5kZXIgYW4gYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBpdHNlbGYgYWdhaW5zdCBgaW5jbHVkZS9saW51eC9tbS5oYC5cblxuQWgsIGhlcmUncyB0aGUgcmVsZXZhbnQgc2VjdGlvbiBmcm9tIHRoZSBwYXRjaDpcblxuYGBgY1xuQEAgLTUxOTIsNiArNTE5Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbkBAIC01MjA0LDYgKzUyMDYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiB7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbiAjZW5kaWZcbiBgYGBcblxuWWVzLCB0aGF0IGNvbmZpcm1zIGl0OiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyB0aGUgKnByaW1hcnkqIGRlcGVuZGVuY3kgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gVG8gdGVzdCB0aGUga2V4ZWMtcmVsYXRlZCBjb21wb25lbnRzLCBJJ2xsIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0tFWEVDYCBhbmQgYENPTkZJR19LRVhFQ19GSUxFYCBhcmUgZW5hYmxlZCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjA5Ljk3MTE1NDgzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTU0NTEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzYyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc2NC1cXG5tbS9LY29uZmlnOjc2NTpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2Ni1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzoxMS40OTA3MDgxOThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMjY4OTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipFeGFtaW5pbmcga2V4ZWMgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIHRvIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBga2V4ZWNgIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gaGFuZGxlIGtlcm5lbCB0cmFuc2l0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgYGtleGVjYCBpcyB0aGUgbWVjaGFuaXNtIHdlIHVzZSBmb3IgcXVpY2tseSBzd2l0Y2hpbmcgYmV0d2VlbiBrZXJuZWxzLCBhbmQgaWYgdGhlcmUncyBhIHByb2JsZW0gdGhlcmUsIGl0IGNvdWxkIGV4cGxhaW4gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgbWF5YmUgZXZlbiBzb21lIGtlcm5lbCBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCBga2V4ZWNgJ3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIGludm9rZWQsIHdoYXQga2VybmVscyBpdCdzIHBvaW50aW5nIHRvLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG1pc2NvbmZpZ3VyYXRpb25zIG9yIHBvdGVudGlhbCBjb25mbGljdHMuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYC9ldGMva2V4ZWMuY29uZmAgKG9yIHdoZXJldmVyIHRoZSBkaXN0cmlidXRpb24gcGxhY2VzIGl0KSwgYW5kIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUga2VybmVsIGNvbW1hbmQtbGluZSBmb3IgYW55dGhpbmcgaW50ZXJlc3RpbmcgcmVsYXRlZCB0byBga2V4ZWNgIG9wdGlvbnMuIFRoaXMgbmVlZHMgdG8gYmUgYSBmb2N1c2VkIGV4cGxvcmF0aW9uLCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHByZXZlbnQgYSBzbW9vdGgga2VybmVsIHN3YXAgb3IgaW50cm9kdWNlIGluc3RhYmlsaXR5IGR1cmluZyB0aGUgdHJhbnNpdGlvbi4gSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYm9vdGxvYWRlciB0b28sIGxpa2UgR1JVQiwgYXMgdGhpcyBjYW4gcGxheSBhIHNpZ25pZmljYW50IHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzoxNS42MjMzOTk1OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzAxMzcyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFWEVDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlYz04PWNvbmZpZyBWTUNPUkVfSU5GT1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTAtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTE6Y29uZmlnIEtFWEVDX0NPUkVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMi1cXHRib29sXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTMtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTQ6Y29uZmlnIEtFWEVDX0VMRlxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTE1LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjPTE3PWNvbmZpZyBIQVZFX0lNQV9LRVhFQ1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTktXFxua2VybmVsL0tjb25maWcua2V4ZWM6MjA6Y29uZmlnIEtFWEVDXFxua2VybmVsL0tjb25maWcua2V4ZWMtMjEtXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMzctXFxua2VybmVsL0tjb25maWcua2V4ZWM6Mzg6Y29uZmlnIEtFWEVDX0ZJTEVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zOS1cXHRib29sIFxcXCJFbmFibGUga2V4ZWMgZmlsZSBiYXNlZCBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTQ4LVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjQ5OmNvbmZpZyBLRVhFQ19TSUdcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy01MC1cXHRib29sIFxcXCJWZXJpZnkga2VybmVsIHNpZ25hdHVyZSBkdXJpbmcga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTYyLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjYzOmNvbmZpZyBLRVhFQ19TSUdfRk9SQ0VcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy02NC1cXHRib29sIFxcXCJSZXF1aXJlIGEgdmFsaWQgc2lnbmF0dXJlIGluIGtleGVjX2ZpbGVfbG9hZCgpIHN5c2NhbGxcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03MC1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo3MTpjb25maWcgS0VYRUNfSU1BR0VfVkVSSUZZX1NJR1xcbmtlcm5lbC9LY29uZmlnLmtleGVjLTcyLVxcdGJvb2wgXFxcIkVuYWJsZSBJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnQgKEFSTSlcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03OS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4MDpjb25maWcgS0VYRUNfQlpJTUFHRV9WRVJJRllfU0lHXFxua2VybmVsL0tjb25maWcua2V4ZWMtODEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ6SW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtODgtXFxua2VybmVsL0tjb25maWcua2V4ZWM6ODk6Y29uZmlnIEtFWEVDX0pVTVBcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05MC1cXHRib29sIFxcXCJrZXhlYyBqdW1wXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjE3LjI1MzU0MjAzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAwNjI3MTk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXhlYyBhbmQgTWVtb3J5IEZhaWx1cmUgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiB0aGlzIGtleGVjIGFuZCBtZW1vcnkgZmFpbHVyZSBpbnRlZ3JhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNRU1PUllfRkFJTFVSRWAsIGBLRVhFQ2AsIGFuZCBgS0VYRUNfRklMRWAuIFRob3NlIGFyZSB0aGUgY29yZSBlbmFibGVycy5cblxuTm93LCBmb3IgdGhlIGtleSBmdW5jdGlvbnMsIGhlcmUncyB3aGF0IEkndmUgaWRlbnRpZmllZCBhcyBjcml0aWNhbCB0byBleGFtaW5lOlxuXG4qICAgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgXG4qICAgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWBcbiogICBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gXG4qICAgYHJhbmdlX2xhc3RfaHdwb2lzb25gXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCB0aGF0IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBhcmUsIGluIGZhY3QsIG5vbi1zdGF0aWMuIFllcywgdGhleSBhcmUgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBHb29kLCB0aGF0IG1lYW5zIHRoZXkncmUgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuXG5cbkkgc2Nhbm5lZCBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MsIGJ1dCBgTUVNT1JZX0ZBSUxVUkVgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIGlzIHN0YW5kYXJkLiBgS0VYRUNgIGFuZCBgS0VYRUNfRklMRWAgYXJlIGFsc28gdHlwaWNhbCwgc28gbm8gc3VycHJpc2VzIHRoZXJlLlxuXG5JIHN0YXJ0ZWQgZGlnZ2luZyBkZWVwZXIgaW50byBmdW5jdGlvbnMuIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBpbiBga2V4ZWNfY29yZS5jYCBhbmQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgaW4gYGtleGVjX2ZpbGUuY2AuXG5cbldhaXQsIGFib3V0IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIGJlY2F1c2UsIGRpcmVjdGx5LCBpdCBsb29rcyBsaWtlIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAgd2VyZSBtb2RpZmllZCB3aGljaCBhcmUgc3RhdGljLiBIb3dldmVyLCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBhIGdvb2QgcHJveHkgYmVjYXVzZSBpdCBjYWxscyBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCB3aGljaCB0aGVuIGNhbGxzIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LlxuXG5JIGFsc28gY29uc2lkZXJlZCBga2V4ZWNfd2Fsa19tZW1ibG9ja2AgYW5kIGBrZXhlY193YWxrX3Jlc291cmNlc2AsIGJ1dCB0aGV5J3JlIG5vdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlLlxuXG5Gb2N1c2luZyBvbiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIGJ5IGBraW1hZ2VfYWxsb2NfaW5pdGAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGRvX2tleGVjX2xvYWRgLlxuXG5TbywgdG8gc3VtbWFyaXplIG15IGNyaXRpY2FsIHRhcmdldHM6XG5cbiogICBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgKGtleGVjXFxfY29yZS5jKVxuKiAgIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgIChrZXhlY1xcX2ZpbGUuYylcbiogICBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIChtbS9tZW1vcnktZmFpbHVyZS5jKVxuKiAgIGByYW5nZV9sYXN0X2h3cG9pc29uYCAobW0vbWVtb3J5LWZhaWx1cmUuYylcblxuVGhlIFJlbGV2YW50IGNvbmZpZ3MgSSBhbSBmb2N1c2luZyBvbiBhcmU6XG5cbiogICBgTUVNT1JZX0ZBSUxVUkVgXG4qICAgYEtFWEVDYFxuKiAgIGBLRVhFQ19GSUxFYFxuXG5NeSByZWFzb25pbmc/IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoZWNrcyBmb3IgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGxvYWRpbmcgYW5kIG1lbW9yeSBob2xlIGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdGhyb3VnaCBzeXN0ZW0gY2FsbHMsIHNwZWNpZmljYWxseSBga2V4ZWNfbG9hZGAgYW5kIGBrZXhlY19maWxlX2xvYWRgLiBUaGUgdGhpbmcgaXMsIHRoaXMgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbWFkdmlzZSdzIE1BRFZfSFdQT0lTT04sIHNvIHRoaXMgaXMgdGVzdGFibGUgYW5kIGZ1enppbmcgdGhlc2UgcG9pbnRzIHNlZW1zIHZlcnkgd29ydGh3aGlsZS5cblxuT2theSwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzoyNy4yNTk4MTcwNDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTExOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19maWxlLmM9Njg5PXN0YXRpYyBpbnQga2V4ZWNfYWxsb2NfY29udGlnKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTcyNi0vKipcXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjcyNzogKiBrZXhlY19sb2NhdGVfbWVtX2hvbGUgLSBmaW5kIGZyZWUgbWVtb3J5IGZvciB0aGUgcHVyZ2F0b3J5IG9yIHRoZSBuZXh0IGtlcm5lbFxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzI4LSAqIEBrYnVmOlxcdFBhcmFtZXRlcnMgZm9yIHRoZSBtZW1vcnkgc2VhcmNoLlxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy03MzMtICovXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3MzQ6aW50IGtleGVjX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzM1LXtcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9Nzc1PWludCBrZXhlY19hZGRfYnVmZmVyKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTgwNC1cXHQvKiBXYWxrIHRoZSBSQU0gcmFuZ2VzIGFuZCBhbGxvY2F0ZSBhIHN1aXRhYmxlIHJhbmdlIGZvciB0aGUgYnVmZmVyICovXFxua2VybmVsL2tleGVjX2ZpbGUuYzo4MDU6XFx0cmV0ID0gYXJjaF9rZXhlY19sb2NhdGVfbWVtX2hvbGUoa2J1Zik7XFxua2VybmVsL2tleGVjX2ZpbGUuYy04MDYtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MjcuMzA0MzMyNDc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYyNDg0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maXJtaW5nIEZ1bmN0aW9uIEV4aXN0ZW5jZSBmb3IgS2VybmVsIEJvb3QgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBpbmRlZWQgYSBmdW5jdGlvbiBpbiB0aGUga2VybmVsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLCBpdCBpc24ndCBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIHRoYXQgaXQncyBhY2Nlc3NpYmxlIGV4dGVybmFsbHksIHdoaWNoIGlzIGVzc2VudGlhbCBmb3Igd2hhdCBJJ20gcGxhbm5pbmcuXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHRvIGF2b2lkIGFueSBzaWxseSBtaXNpbnRlcnByZXRhdGlvbnMgZG93biB0aGUgbGluZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gaXMgYWxzbyBwcmVzZW50IGFuZCBhdmFpbGFibGUsIGFzIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhpcyBwYXJ0IG9mIHRoZSBib290IHByb2Nlc3MuIEJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBhIHF1aWNrIGNoZWNrIG5vdyBjYW4gc2F2ZSBhIGhlYWRhY2hlIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjMwLjgwMDU4Mjc3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNTc4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXFxuLS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjMwLjg0NDY0NDkzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxMjMwNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0LCBpbnRlcm5hbCBtb25vbG9ndWUsIGFpbWVkIGF0IGEgY29sbGVhZ3VlOlxuXG4qKlZlcmlmaWNhdGlvbiBDaGVjazogUG9pc29uIFJhbmdlcyoqXG5cblJpZ2h0LCBzbyBpdCdzIGNvbmZpcm1lZC4gVGhpcyB0aGluZyAqZG9lcyogZXhpc3QuIE5vdywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gYWJzb2x1dGVseSBuYWlsIGRvd24gdGhlc2UgcmFuZ2UgZGVmaW5pdGlvbnMuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBhcmUsIGluIGZhY3QsIHByZXNlbnQuIEkgbmVlZCB0byBndWFyYW50ZWUgdGhlaXIgZXhpc3RlbmNlIGJlZm9yZSByZWx5aW5nIG9uIHRoZW0uIFdlIGRvbid0IHdhbnQgYW55IHN1cnByaXNlcyB3aGVuIHdlIHN0YXJ0IG1vdmluZyBmb3J3YXJkIG9uIHRoaXMgcGFydGljdWxhciBwcm9qZWN0LiBMZXTigJlzIGNvbmZpcm0gYmVmb3JlIHdlIHN0YXJ0IGFueSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzozNC4zMDU4NzczMjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkzNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhbmdlX2ZpcnN0X2h3cG9pc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMDM9c3RhdGljIHBoeXNfYWRkcl90IHJhbmdlX2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MC1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2MTpwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MzQuMzUwNzc2NDg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA2MDU5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqVGhlIFJlYWxpdHkgb2YgdGhlIERhdGEqKlxuXG5Pa2F5LCBzbyB5ZXMsIHRoZSByZXN1bHRzIGFyZSBkZWZpbml0ZWx5IHRoZXJlLiBJIGNhbiBzZWUgdGhlIGRhdGEgYW5kIGNvbmZpcm0gdGhlIG91dHB1dC4gTm93IHRoYXQgSSBoYXZlIGNvbmZpcm1hdGlvbiwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ20gZ29pbmcgdG8gZm9ybXVsYXRlIHRoYXQgYHNldC1yZXN1bHRzYCBjYWxsLCBwcmVjaXNlbHkgYW5kIGVmZmljaWVudGx5LiBJJ2xsIG1ha2Ugc3VyZSBpdCdzIHN0cnVjdHVyZWQgaW4gdGhlIG9wdGltYWwgd2F5IGZvciB0aGUgc3lzdGVtIHRvIHByb2Nlc3MgdGhlIGluZm9ybWF0aW9uLCBjb25zaWRlcmluZyBhbGwgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgYW5kIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGxpbmthZ2UuIEl0J3MgdGltZSB0byBidWlsZCB0aGUgbmV4dCBsYXllciBvZiB0aGlzIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODY4LCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjM5LjY5MTM4NTA0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjAyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiS0VYRUNcIixcbiAgICBcIktFWEVDX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0XCIsXG4gICAgXCJrZXhlY19sb2NhdGVfbWVtX2hvbGVcIixcbiAgICBcInJhbmdlX2ZpcnN0X2h3cG9pc29uXCIsXG4gICAgXCJyYW5nZV9sYXN0X2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgY2hlY2tzIHRvIGtleGVjIHNlZ21lbnQgbG9hZGluZyBhbmQgbWVtb3J5IGhvbGUgbG9jYXRpb24gbG9naWMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXN0ZW0gY2FsbHMsIGFuZCBoYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHRlc3RhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJLRVhFQ1wiLFxuICAgIFwiS0VYRUNfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgICBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICAgIFwicmFuZ2VfZmlyc3RfaHdwb2lzb25cIixcbiAgICBcInJhbmdlX2xhc3RfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBjaGVja3MgdG8ga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbiBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c3RlbSBjYWxscywgYW5kIGhhcmR3YXJlIHBvaXNvbmluZyBjYW4gYmUgc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgdGVzdGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjM5Ljc2MTk5MjY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM2NjUxMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MzkuNzYyNDM2ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTAzNjIwMzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2dpYyB0byBhdm9pZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgZHVyaW5nIGtleGVjIG9wZXJhdGlvbnMgYnkgY2hlY2tpbmcgaWYgdGhlIHRhcmdldCBwaHlzaWNhbCBtZW1vcnkgcmFuZ2VzIGNvbnRhaW4gcG9pc29uZWQgcGFnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBtZW1vcnkgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBrZXhlYyBzZWdtZW50IHBsYWNlbWVudC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTk5ZjA2OWIwMTI3NmQ5MjkwZGM2OWVjODdjMWZmZTY3MTg5ZTcwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzo1Njo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggN2ZhYmU2YzY2YjRiNy4uNDFiOTIzOTAxYjE5MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTE5Miw2ICs1MTkyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbitwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbitwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4ge1xuQEAgLTUyMDQsNiArNTIwNiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIHtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gUEhZU19BRERSX01BWDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuK1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuICNlbmRpZlxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi5lMDk3ZTk4MGIxNDM5IDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuKysrIGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTIxMiw2ICsyMTIsMTYgQEAgaW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4gXHR9XG4gI2VuZGlmXG4gXG4rXHQvKlxuK1x0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcbitcdCAqIHJlbG9jYXRpb24gY29weSB3b3VsZCBtYWNoaW5lLWNoZWNrIG9uIHRoZSBiYWQgZnJhbWUuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3NlZ21lbnRzOyBpKyspIHtcbitcdFx0aWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtLFxuK1x0XHRcdFx0XHQgaW1hZ2UtXHUwMDNlc2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWClcbitcdFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCA1OWZiOWQ3MWU5ZDg2Li45YmE2Y2MwMWFmOTI5IDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NSw2ICs0NzUsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiArIDE7XG5AQCAtNTA0LDYgKzUwNSwxNSBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdGlmIChwb2lzb24gXHUwMDNjIGtidWYtXHUwMDNlbWVtc3opXG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi1cdTAwM2VtZW1zejtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuQEAgLTUyMCw2ICs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVx1MDAzZWltYWdlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcbitcdHBoeXNfYWRkcl90IHBvaXNvbjtcbiBcbiBcdHRlbXBfc3RhcnQgPSBtYXgoc3RhcnQsIGtidWYtXHUwMDNlYnVmX21pbik7XG4gXG5AQCAtNTQ2LDYgKzU1NywxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0cG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gKyBQQUdFX1NJWkU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0LyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi9cbiBcdFx0YnJlYWs7XG4gXHR9IHdoaWxlICgxKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uYzQ4NWUyMDVmYjYzMyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC05Niw2ICs5Niw3OCBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiBcdFx0bWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTtcbiB9XG4gXG4rLypcbisgKiBSZXR1cm4gdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGhhcmR3YXJlLXBvaXNvbmVkIG9ubGluZSBwYWdlIGluIFtzdGFydCxcbisgKiBzdGFydCArIHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi5cbisgKi9cbitzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbitcdFx0XHRcdCAgYm9vbCBmaXJzdClcbit7XG4rXHRwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYO1xuK1x0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47XG4rXG4rXHRpZiAoIXNpemUgfHwgIWF0b21pY19sb25nX3JlYWQoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSlcbitcdFx0cmV0dXJuIHBvaXNvbjtcbitcbitcdGVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCArIHNpemUgLSAxKTtcbitcdGZvciAocGZuID0gUEhZU19QRk4oc3RhcnQpOyBwZm4gXHUwMDNjPSBlbmRfcGZuOyBwZm4rKykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0aWYgKCFwYWdlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBodWdldGxiZnMgaXMgYSBiaXQgc3BlY2lhbCwgZ2l2ZW4gdGhlIHBvaXNvblxuK1x0XHRcdCAqIGluZm9ybWF0aW9uIGlzIGF0IHRoZSBmb2xpbywgbm90IGF0IHRoZSBwYWdlXG4rXHRcdFx0ICovXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBmb2xpb19lbmQ7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBObyBodWdldGxiX2xvY2s6IHRoZSBzY2FuIGlzIHJhY3kgZWl0aGVyIHdheSwgYSBmcmFtZVxuK1x0XHRcdCAqIGNhbiBiZSBwb2lzb25lZCByaWdodCBhZnRlciBpdC4gSnVzdCBkb24ndCBsZXQgYSBmb2xpb1xuK1x0XHRcdCAqIGRpc3NvbHZlZCB1bmRlciB1cyB3YWxrIHRoZSBzY2FuIGJhY2t3YXJkcy5cbitcdFx0XHQgKi9cbitcdFx0XHRmb2xpb19lbmQgPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbitcdFx0XHRmb2xpb19lbmQgPSBtYXgoZm9saW9fZW5kLCBwZm4pO1xuK1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuK1x0XHRcdFx0aWYgKGZpcnN0KVxuK1x0XHRcdFx0XHRyZXR1cm4gUEZOX1BIWVMocGZuKTtcbitcdFx0XHRcdHBvaXNvbiA9IFBGTl9QSFlTKG1pbihmb2xpb19lbmQsIGVuZF9wZm4pKTtcbitcdFx0XHR9XG4rXHRcdFx0Lyogc2tpcCBhbGwgdGhlIHBmbnMgdGhhdCBiZWxvbmcgdG8gaHVnZXRsYiAqL1xuK1x0XHRcdHBmbiA9IGZvbGlvX2VuZDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIVBhZ2VIV1BvaXNvbihwYWdlKSlcbitcdFx0XHQvKiBwYWdlIGlzIGdvb2QsIGxldCdzIGdvIHRvIHRoZSBuZXh0IG9uZSAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoZmlyc3QpXG4rXHRcdFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XG4rXG4rXHRcdHBvaXNvbiA9IFBGTl9QSFlTKHBmbik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcG9pc29uO1xuK31cbitcbitwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgdHJ1ZSk7XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcbit9XG4rXG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MzkuNzYyNDM3NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzNjE4NTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2gsIGJ1dCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJ3MgcHVycG9zZSwgdGhpcyBzZWVtcyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSByZWxldmFudCBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgdGhlIGFkZGl0aW9uIG9mIGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50cm9kdWNlZCB0byBkZXRlY3QgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHdpdGhpbiBhIGdpdmVuIHJhbmdlLiBUaGV5J3JlIGJlaW5nIGltcGxlbWVudGVkIGFuZCB0aGVuIGluY29ycG9yYXRlZCBpbnRvIGBrZXhlY19jb3JlLmNgIGFuZCBga2V4ZWNfZmlsZS5jYCB0byBwcmV2ZW50IGtleGVjIGRlc3RpbmF0aW9ucyBmcm9tIGxhbmRpbmcgb24gcHJvYmxlbWF0aWMgbWVtb3J5IHJlZ2lvbnMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIHBoeXNpY2FsIG1lbW9yeSBlcnJvcnMgbGlrZSBFQ0MgZXJyb3JzLiBUaGlzIGFsc28gZW5hYmxlcyBza2lwcGluZyBvZiB0aG9zZSByYW5nZXMgd2hlbiBsb2NhdGluZyBtZW1vcnkgaG9sZXMuXG5cbkhlcmUncyB0aGUgY2hhbmdlIGFuYWx5c2lzLCBzdGVwIGJ5IHN0ZXA6XG5cbjEuICBXZSBoYXZlIGRlY2xhcmF0aW9ucyBhbmQgc3R1YiBpbXBsZW1lbnRhdGlvbnMgaW4gYG1tLmhgLlxuMi4gIEluIGBrZXhlY19jb3JlLmNgLCB0aGUgcGF0Y2ggaXMgaW50ZWdyYXRlZCBpbnRvIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCB0byBwcmV2ZW50IHNlZ21lbnRzIGZyb20gbGFuZGluZyBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkuXG4zLiAgYGtleGVjX2ZpbGUuY2AgdXRpbGl6ZXMgdGhlIGZ1bmN0aW9ucyB0byBhZGp1c3Qgc2VhcmNoIHJhbmdlcywgcHJldmVudGluZyB0aGUgc2VsZWN0aW9uIG9mIGhhcmR3YXJlLXBvaXNvbmVkIHJlZ2lvbnMuXG40LiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZHMgdGhlIGByYW5nZV9od3BvaXNvbmAgaW1wbGVtZW50YXRpb24sIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaHdwb2lzb24gY2hlY2tzLlxuXG5Ob3csIGRvZXMgdGhpcyAqZXhwb3NlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB0aGUgS01TQU4gcXVlc3Rpb24uIExvb2tpbmcgYXQgaXQsIEkgc2VlOlxuXG4qICAgTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UuXG4qICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGJlaW5nIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMsIHdoaWNoIGlzIGEgbWFqb3IgS01TQU4gY29uY2Vybi5cbiogICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG4qICAgVGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgYWxsb3cgdXMgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy5cblxuQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0ICphdm9pZGluZyogaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzLiBUaGlzIGlzIGEgdmVyeSBkaWZmZXJlbnQgdGhpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgc29mdHdhcmUgc2Vuc2UsIHdoaWNoIGlzIHdoYXQgS01TQU4gZGV0ZWN0cy4gVGhlc2UgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggc29mdHdhcmUgYnVncyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBhbiBpc3N1ZSBvZiBwaHlzaWNhbCBtZW1vcnkgaW50ZWdyaXR5LCBub3Qgc29mdHdhcmUgaW5pdGlhbGl6YXRpb24uIEtBU0FOIGFuZCBMT0NLREVQIGFyZW4ndCByZWFsbHkgcmVsZXZhbnQgaGVyZSBlaXRoZXIsIGJ1dCBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBqb2IuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggZm9jdXNlcyBleGNsdXNpdmVseSBvbiBpZGVudGlmeWluZyBhbmQgYXZvaWRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgc29mdHdhcmUgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjcsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6NDguNzk4NjI1NTk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBkdXJpbmcga2V4ZWMgb3BlcmF0aW9ucyBieSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IHBoeXNpY2FsIG1lbW9yeSByYW5nZXMgY29udGFpbiBwb2lzb25lZCBwYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIG1lbW9yeSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtleGVjIHNlZ21lbnQgcGxhY2VtZW50LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGR1cmluZyBrZXhlYyBvcGVyYXRpb25zIGJ5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBjb250YWluIHBvaXNvbmVkIHBhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgbWVtb3J5IGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQga2V4ZWMgc2VnbWVudCBwbGFjZW1lbnQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 17:16:09 +0000 UTC FinishedAt: 2026-08-07 17:57:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ea2bff00da89d7767d677bb68470130ba96f4928", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ea2bff00da89d7767d677bb68470130ba96f4928", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "series_id": "01da0c8a-7c07-437d-8f97-9ed679ef8987" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sanity_check_segment_list", "kexec_locate_mem_hole", "range_first_hwpoison", "range_last_hwpoison" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2dpYyB0byBhdm9pZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgZHVyaW5nIGtleGVjIG9wZXJhdGlvbnMgYnkgY2hlY2tpbmcgaWYgdGhlIHRhcmdldCBwaHlzaWNhbCBtZW1vcnkgcmFuZ2VzIGNvbnRhaW4gcG9pc29uZWQgcGFnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBtZW1vcnkgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBrZXhlYyBzZWdtZW50IHBsYWNlbWVudC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgY2hlY2tzIHRvIGtleGVjIHNlZ21lbnQgbG9hZGluZyBhbmQgbWVtb3J5IGhvbGUgbG9jYXRpb24gbG9naWMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXN0ZW0gY2FsbHMsIGFuZCBoYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHRlc3RhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDU5OWYwNjliMDEyNzZkOTI5MGRjNjllYzg3YzFmZmU2NzE4OWU3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTc6NTY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA3ZmFiZTZjNjZiNGI3Li40MWI5MjM5MDFiMTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MTkyLDYgJiM0Mzs1MTkyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4mIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG5AQCAtNTIwNCw2ICYjNDM7NTIwNiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIHtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUEhZU19BRERSX01BWDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi5lMDk3ZTk4MGIxNDM5IDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTIxMiw2ICYjNDM7MjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcbiYjNDM7XHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtLFxuJiM0MztcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4mIzQzO1x0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIHNlYXJjaGVkIGZyb20gc3lzdGVtIFJBTSByYXRoZXIgdGhhblxuIFx0ICogYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgc28gdGhleSBhcmUgbm90IGd1YXJhbnRlZWRcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfZmlsZS5jIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuaW5kZXggNTlmYjlkNzFlOWQ4Ni4uOWJhNmNjMDFhZjkyOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rZXhlY19maWxlLmNcbkBAIC00NzUsNiAmIzQzOzQ3NSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cdTAwM2VpbWFnZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiAmIzQzOyAxO1xuQEAgLTUwNCw2ICYjNDM7NTA1LDE1IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbiYjNDM7XHRcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xuJiM0MztcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4mIzQzO1x0XHRcdGlmIChwb2lzb24gXHUwMDNjIGtidWYtXHUwMDNlbWVtc3opXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTIwLDYgJiM0Mzs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVx1MDAzZWltYWdlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBwb2lzb247XG4gXG4gXHR0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLVx1MDAzZWJ1Zl9taW4pO1xuIFxuQEAgLTU0Niw2ICYjNDM7NTU3LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0cG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbiYjNDM7XHRcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xuJiM0MztcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4mIzQzO1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gJiM0MzsgUEFHRV9TSVpFO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGE4YjAzZTI5MjBiYTguLmM0ODVlMjA1ZmI2MzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtOTYsNiAmIzQzOzk2LDc4IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBoYXJkd2FyZS1wb2lzb25lZCBvbmxpbmUgcGFnZSBpbiBbc3RhcnQsXG4mIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuJiM0MztcdFx0XHRcdCAgYm9vbCBmaXJzdClcbiYjNDM7e1xuJiM0MztcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47XG4mIzQzO1xuJiM0MztcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuJiM0MztcdFx0cmV0dXJuIHBvaXNvbjtcbiYjNDM7XG4mIzQzO1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICYjNDM7IHNpemUgLSAxKTtcbiYjNDM7XHRmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuIFx1MDAzYz0gZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwYWdlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBodWdldGxiZnMgaXMgYSBiaXQgc3BlY2lhbCwgZ2l2ZW4gdGhlIHBvaXNvblxuJiM0MztcdFx0XHQgKiBpbmZvcm1hdGlvbiBpcyBhdCB0aGUgZm9saW8sIG5vdCBhdCB0aGUgcGFnZVxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBmb2xpb19lbmQ7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBObyBodWdldGxiX2xvY2s6IHRoZSBzY2FuIGlzIHJhY3kgZWl0aGVyIHdheSwgYSBmcmFtZVxuJiM0MztcdFx0XHQgKiBjYW4gYmUgcG9pc29uZWQgcmlnaHQgYWZ0ZXIgaXQuIEp1c3QgZG9uJiMzOTt0IGxldCBhIGZvbGlvXG4mIzQzO1x0XHRcdCAqIGRpc3NvbHZlZCB1bmRlciB1cyB3YWxrIHRoZSBzY2FuIGJhY2t3YXJkcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiYjNDM7XHRcdFx0Zm9saW9fZW5kID0gbWF4KGZvbGlvX2VuZCwgcGZuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuJiM0MztcdFx0XHRcdGlmIChmaXJzdClcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuJiM0MztcdFx0XHRcdHBvaXNvbiA9IFBGTl9QSFlTKG1pbihmb2xpb19lbmQsIGVuZF9wZm4pKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHQvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovXG4mIzQzO1x0XHRcdHBmbiA9IGZvbGlvX2VuZDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFQYWdlSFdQb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRcdC8qIHBhZ2UgaXMgZ29vZCwgbGV0JiMzOTtzIGdvIHRvIHRoZSBuZXh0IG9uZSAqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmlyc3QpXG4mIzQzO1x0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuJiM0MztcbiYjNDM7XHRcdHBvaXNvbiA9IFBGTl9QSFlTKHBmbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9pc29uO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtLRVhFQyYjMzQ7LAogICAgJiMzNDtLRVhFQ19GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtrZXhlY19sb2NhdGVfbWVtX2hvbGUmIzM0OywKICAgICYjMzQ7cmFuZ2VfZmlyc3RfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7cmFuZ2VfbGFzdF9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBjaGVja3MgdG8ga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbiBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c3RlbSBjYWxscywgYW5kIGhhcmR3YXJlIHBvaXNvbmluZyBjYW4gYmUgc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgdGVzdGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTk5ZjA2OWIwMTI3NmQ5MjkwZGM2OWVjODdjMWZmZTY3MTg5ZTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNzo1Njo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA3ZmFiZTZjNjZiNGI3Li40MWI5MjM5MDFiMTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC01MTkyLDYgJiM0Mzs1MTkyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDsKIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKQogewpAQCAtNTIwNCw2ICYjNDM7NTIwNiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbikKIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiB7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBIWVNfQUREUl9NQVg7CiYjNDM7fQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jCmluZGV4IGRjNzcwYjlhNmQwNTMuLmUwOTdlOTgwYjE0MzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuYwpAQCAtMjEyLDYgJiM0MzsyMTIsMTYgQEAgaW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiAJfQogI2VuZGlmCiAKJiM0MzsJLyoKJiM0MzsJICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGUKJiM0MzsJICogcmVsb2NhdGlvbiBjb3B5IHdvdWxkIG1hY2hpbmUtY2hlY2sgb24gdGhlIGJhZCBmcmFtZS4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9zZWdtZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW0sCiYjNDM7CQkJCQkgaW1hZ2UtJmd0O3NlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpCiYjNDM7CQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUaGUgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBzZWFyY2hlZCBmcm9tIHN5c3RlbSBSQU0gcmF0aGVyIHRoYW4KIAkgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZApkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ZpbGUuYyBiL2tlcm5lbC9rZXhlY19maWxlLmMKaW5kZXggNTlmYjlkNzFlOWQ4Ni4uOWJhNmNjMDFhZjkyOSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfZmlsZS5jCkBAIC00NzUsNiAmIzQzOzQ3NSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogewogCXN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi0mZ3Q7aW1hZ2U7CiAJdW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDsKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uOwogCiAJdGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLSZndDtidWZfbWF4KTsKIAl0ZW1wX3N0YXJ0ID0gdGVtcF9lbmQgLSBrYnVmLSZndDttZW1zeiAmIzQzOyAxOwpAQCAtNTA0LDYgJiM0Mzs1MDUsMTUgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJaWYgKHBvaXNvbiAmbHQ7IGtidWYtJmd0O21lbXN6KQomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi0mZ3Q7bWVtc3o7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpAQCAtNTIwLDYgJiM0Mzs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLSZndDtidWZfbWluKTsKIApAQCAtNTQ2LDYgJiM0Mzs1NTcsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJcG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJdGVtcF9zdGFydCA9IHBvaXNvbiAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uYzQ4NWUyMDVmYjYzMyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC05Niw2ICYjNDM7OTYsNzggQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LAomIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCQkJICBib29sIGZpcnN0KQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZCgmYW1wO251bV9wb2lzb25lZF9wYWdlcykpCiYjNDM7CQlyZXR1cm4gcG9pc29uOwomIzQzOwomIzQzOwllbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgJiM0Mzsgc2l6ZSAtIDEpOwomIzQzOwlmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuICZsdDs9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBhZ2UpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7CiYjNDM7CQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogaHVnZXRsYmZzIGlzIGEgYml0IHNwZWNpYWwsIGdpdmVuIHRoZSBwb2lzb24KJiM0MzsJCQkgKiBpbmZvcm1hdGlvbiBpcyBhdCB0aGUgZm9saW8sIG5vdCBhdCB0aGUgcGFnZQomIzQzOwkJCSAqLwomIzQzOwkJCXVuc2lnbmVkIGxvbmcgZm9saW9fZW5kOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTm8gaHVnZXRsYl9sb2NrOiB0aGUgc2NhbiBpcyByYWN5IGVpdGhlciB3YXksIGEgZnJhbWUKJiM0MzsJCQkgKiBjYW4gYmUgcG9pc29uZWQgcmlnaHQgYWZ0ZXIgaXQuIEp1c3QgZG9uJiMzOTt0IGxldCBhIGZvbGlvCiYjNDM7CQkJICogZGlzc29sdmVkIHVuZGVyIHVzIHdhbGsgdGhlIHNjYW4gYmFja3dhcmRzLgomIzQzOwkJCSAqLwomIzQzOwkJCWZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTsKJiM0MzsJCQlmb2xpb19lbmQgPSBtYXgoZm9saW9fZW5kLCBwZm4pOwomIzQzOwomIzQzOwkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkgewomIzQzOwkJCQlpZiAoZmlyc3QpCiYjNDM7CQkJCQlyZXR1cm4gUEZOX1BIWVMocGZuKTsKJiM0MzsJCQkJcG9pc29uID0gUEZOX1BIWVMobWluKGZvbGlvX2VuZCwgZW5kX3BmbikpOwomIzQzOwkJCX0KJiM0MzsJCQkvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovCiYjNDM7CQkJcGZuID0gZm9saW9fZW5kOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQkJLyogcGFnZSBpcyBnb29kLCBsZXQmIzM5O3MgZ28gdG8gdGhlIG5leHQgb25lICovCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoZmlyc3QpCiYjNDM7CQkJcmV0dXJuIFBGTl9QSFlTKHBmbik7CiYjNDM7CiYjNDM7CQlwb2lzb24gPSBQRk5fUEhZUyhwZm4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwb2lzb247CiYjNDM7fQomIzQzOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy4KICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5Lgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEhhcmR3YXJlIFBvaXNvbmluZyBDaGVja3MgaW4ga2V4ZWMqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBjcml0aWNhbCBjaGVja3MgZm9yIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB3aXRoaW4ga2V4ZWMuIEl0JiMzOTtzIHRvdWNoaW5nIGBrZXhlY19jb3JlLmNgLCBga2V4ZWNfZmlsZS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgcG90ZW50aWFsbHkgcXVpdGUgc2lnbmlmaWNhbnQuIEl0IGludHJvZHVjZXMgdGhvc2UgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgaW4gYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIChrZXhlY19jb3JlLmMpIGFuZCB0aGUgaG9sZS1maW5kaW5nIGZ1bmN0aW9ucyBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIChrZXhlY19maWxlLmMpLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBIYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCwgZWl0aGVyIHRocm91Z2ggYHN5c2ZzYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIEFuZCwgeWVzLCB0aGUga2V4ZWMgc3lzdGVtIGNhbGxzIHRoZW1zZWx2ZXMg4oCTIGBrZXhlY19sb2FkYCwgYGtleGVjX2ZpbGVfbG9hZGAg4oCTIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlIGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIFRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGdldCBzcGVjaWZpYy4gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24/IEFscmlnaHQsIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpbiBga2V4ZWNfY29yZS5jYCBpcyBkZWZpbml0ZWx5IG1vZGlmaWVkLiBUaGVuLCBpbiBga2V4ZWNfZmlsZS5jYCwgd2UgaGF2ZSBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgLiBBbmQgb2YgY291cnNlLCB0aGUgbmV3IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBmdW5jdGlvbnMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFyZSB2aXRhbCBmb3IgaW5pdGlhbCBhbmFseXNpcy4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgc29tZXRoaW5nLiBJcyBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgc3RhdGljIG9yIG5vdD8gR29vZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlIGhvbGUtZmluZGluZyBmdW5jdGlvbnMgYXJlLCBob3dldmVyLCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHByb2JhYmx5IG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGtleGVjX2ZpbGUuYywgcHJvYmFibHkgYnkgc29tZXRoaW5nIGxpa2UgYGtleGVjX3dhbGtfbWVtYmxvY2tgLiBCZXR0ZXIgY2hlY2sgdGhhdCBhbmQgbWFrZSBzdXJlLiBPa2F5LCBJJiMzOTtsbCBkaXZlIGludG8gYGtleGVjX2ZpbGUuY2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19maWxlLmM9MzY1PVNZU0NBTExfREVGSU5FNShrZXhlY19maWxlX2xvYWQsIGludCwga2VybmVsX2ZkLCBpbnQsIGluaXRyZF9mZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3Mi1cbmtlcm5lbC9rZXhlY19maWxlLmM6NDczOnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzQtXHRcdFx0XHQgICAgc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU3OD1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNjAwLVx0aWYgKGtidWYtXHUwMDNldG9wX2Rvd24pXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjYwMTpcdFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bihzdGFydCwgZW5kLCBrYnVmKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNjAyLVx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAoc3RhcnQsIGVuZCwga2J1Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IElucXVpcnkgQWJvdXQgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBpdCYjMzk7cyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBxdWVyeTogd2hvIG9yIHdoYXQgaXMgY2FsbGluZyAqdGhpcyogc3BlY2lmaWMgZnVuY3Rpb24/IFRoYXQgYHN0YXRpY2Aga2V5d29yZCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgc2NvcGVkIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNhbGxlcnMgYXJlIGxpbWl0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBvciBtb2R1bGUgdGhhdCYjMzk7cyBpbnZva2luZyBpdC4gVW5kZXJzdGFuZGluZyAqd2hlcmUqIHRoaXMgY2FsbGJhY2sgaXMgYmVpbmcgdXNlZCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgKndoeSogaXQgZXhpc3RzIGFuZCBpdHMgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgY2FsbCBzaXRlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19maWxlLmM9NTI4PXN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU3Ny1cbmtlcm5lbC9rZXhlY19maWxlLmM6NTc4OnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU3OS17XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz02MDY9c3RhdGljIGludCBrZXhlY193YWxrX21lbWJsb2NrKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy02MjEtXHQgKiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRCBoYW5kbGluZyBpblxua2VybmVsL2tleGVjX2ZpbGUuYzo2MjI6XHQgKiBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soKS5cbmtlcm5lbC9rZXhlY19maWxlLmMtNjIzLVx0ICovXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz03MzQ9aW50IGtleGVjX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ1LVx0ICovXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc0NjpcdHJldCA9IGtob19sb2NhdGVfbWVtX2hvbGUoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ3LVx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03NTctXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1ODpcdFx0cmV0ID0ga2V4ZWNfd2Fsa19yZXNvdXJjZXMoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNzU5LVx0ZWxzZVxua2VybmVsL2tleGVjX2ZpbGUuYzo3NjA6XHRcdHJldCA9IGtleGVjX3dhbGtfbWVtYmxvY2soa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNzYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgYW5kIFNlZ21lbnQgTGlzdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHZpc2liaWxpdHkgYW5kIHVzYWdlIHRocm91Z2hvdXQgdGhlIGtlcm5lbCwgd2hpY2ggSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgYW55IGFuYWx5c2lzLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgaWYgbm90IGxvY2FsIHRvIGEgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIHRoaXMgaXMgdXNlZC4KCk5leHQsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAuIENvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJiMzOTtkIGJldCBpdCYjMzk7cyBpbnZvbHZlZCBpbiB2YWxpZGF0aW5nIHRoZSBzZWdtZW50cyBvZiBtZW1vcnkgdGhlIHN5c3RlbSYjMzk7cyB3b3JraW5nIHdpdGguIFRoaXMgZnVuY3Rpb24mIzM5O3MgcHJvYmFibHkgY3JpdGljYWwgdG8gbWFraW5nIHN1cmUgdGhlIG1lbW9yeSBtYXBzIGFyZSBjb3JyZWN0IGJlZm9yZSBvciBhZnRlciBhIGtleGVjIHJlYm9vdCwgc28gdGhlIHN5c3RlbSBkb2VzbiYjMzk7dCBjcmFzaCBvciBnZXQgY29ycnVwdGVkLiBJIGJldCBpdCBtYWtlcyBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgY29uZmxpY3RpbmcgbWVtb3J5IHJlZ2lvbnMgb3IgaG9sZXMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gRGVmaW5pdGVseSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIHdvdWxkIHRyaWdnZXIgYW55IGlzc3VlcyB0aGVyZSwgdG8gbG9vayBmb3IgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2NvcmUuYz0xMDY9c3RhdGljIHN0cnVjdCBwYWdlICpraW1hZ2VfYWxsb2NfcGFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSxcbi0tXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cbmtlcm5lbC9rZXhlY19jb3JlLmM6MTEwOmludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxua2VybmVsL2tleGVjX2NvcmUuYy0xMTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhdGNoIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IEZhaWx1cmUgYW5kIEtleGVjIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCBhIGZldyBrZXkgc3ltYm9scyBoZXJlOiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBhbmQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAuIEkgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L21tLmhgLgoKTG9va2luZyBhdCB0aGUgY29kZSwgSSBzZWUgYSBjb25kaXRpb25hbCBibG9jazoKCmBgYGMKI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpgYGAKCkhvd2V2ZXIsIHRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyAqb25seSogaW5jbHVkZXMgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIHVuZGVyIGFuIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggaXRzZWxmIGFnYWluc3QgYGluY2x1ZGUvbGludXgvbW0uaGAuCgpBaCwgaGVyZSYjMzk7cyB0aGUgcmVsZXZhbnQgc2VjdGlvbiBmcm9tIHRoZSBwYXRjaDoKCmBgYGMKQEAgLTUxOTIsNiAmIzQzOzUxOTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjA0LDYgJiM0Mzs1MjA2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIGBgYAoKWWVzLCB0aGF0IGNvbmZpcm1zIGl0OiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyB0aGUgKnByaW1hcnkqIGRlcGVuZGVuY3kgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gVG8gdGVzdCB0aGUga2V4ZWMtcmVsYXRlZCBjb21wb25lbnRzLCBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19LRVhFQ2AgYW5kIGBDT05GSUdfS0VYRUNfRklMRWAgYXJlIGVuYWJsZWQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzYyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NjQtXG5tbS9LY29uZmlnOjc2NTpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzY2LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkV4YW1pbmluZyBrZXhlYyBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIHRvIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBga2V4ZWNgIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gaGFuZGxlIGtlcm5lbCB0cmFuc2l0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgYGtleGVjYCBpcyB0aGUgbWVjaGFuaXNtIHdlIHVzZSBmb3IgcXVpY2tseSBzd2l0Y2hpbmcgYmV0d2VlbiBrZXJuZWxzLCBhbmQgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHRoZXJlLCBpdCBjb3VsZCBleHBsYWluIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBtYXliZSBldmVuIHNvbWUga2VybmVsIHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGBrZXhlY2AmIzM5O3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyBpbnZva2VkLCB3aGF0IGtlcm5lbHMgaXQmIzM5O3MgcG9pbnRpbmcgdG8sIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWlzY29uZmlndXJhdGlvbnMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCB3aXRoIGAvZXRjL2tleGVjLmNvbmZgIChvciB3aGVyZXZlciB0aGUgZGlzdHJpYnV0aW9uIHBsYWNlcyBpdCksIGFuZCBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBrZXJuZWwgY29tbWFuZC1saW5lIGZvciBhbnl0aGluZyBpbnRlcmVzdGluZyByZWxhdGVkIHRvIGBrZXhlY2Agb3B0aW9ucy4gVGhpcyBuZWVkcyB0byBiZSBhIGZvY3VzZWQgZXhwbG9yYXRpb24sIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgcHJldmVudCBhIHNtb290aCBrZXJuZWwgc3dhcCBvciBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYm9vdGxvYWRlciB0b28sIGxpa2UgR1JVQiwgYXMgdGhpcyBjYW4gcGxheSBhIHNpZ25pZmljYW50IHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLRVhFQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5rZXhlYz04PWNvbmZpZyBWTUNPUkVfSU5GT1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTEwLVxua2VybmVsL0tjb25maWcua2V4ZWM6MTE6Y29uZmlnIEtFWEVDX0NPUkVcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEyLVx0Ym9vbFxua2VybmVsL0tjb25maWcua2V4ZWMtMTMtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoxNDpjb25maWcgS0VYRUNfRUxGXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xNS1cdGJvb2xcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYz0xNz1jb25maWcgSEFWRV9JTUFfS0VYRUNcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xOS1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjIwOmNvbmZpZyBLRVhFQ1xua2VybmVsL0tjb25maWcua2V4ZWMtMjEtXHRib29sIFwmIzM0O0VuYWJsZSBrZXhlYyBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTM3LVxua2VybmVsL0tjb25maWcua2V4ZWM6Mzg6Y29uZmlnIEtFWEVDX0ZJTEVcbmtlcm5lbC9LY29uZmlnLmtleGVjLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgZmlsZSBiYXNlZCBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTQ4LVxua2VybmVsL0tjb25maWcua2V4ZWM6NDk6Y29uZmlnIEtFWEVDX1NJR1xua2VybmVsL0tjb25maWcua2V4ZWMtNTAtXHRib29sIFwmIzM0O1ZlcmlmeSBrZXJuZWwgc2lnbmF0dXJlIGR1cmluZyBrZXhlY19maWxlX2xvYWQoKSBzeXNjYWxsXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtNjItXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo2Mzpjb25maWcgS0VYRUNfU0lHX0ZPUkNFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy02NC1cdGJvb2wgXCYjMzQ7UmVxdWlyZSBhIHZhbGlkIHNpZ25hdHVyZSBpbiBrZXhlY19maWxlX2xvYWQoKSBzeXNjYWxsXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtNzAtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo3MTpjb25maWcgS0VYRUNfSU1BR0VfVkVSSUZZX1NJR1xua2VybmVsL0tjb25maWcua2V4ZWMtNzItXHRib29sIFwmIzM0O0VuYWJsZSBJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnQgKEFSTSlcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03OS1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjgwOmNvbmZpZyBLRVhFQ19CWklNQUdFX1ZFUklGWV9TSUdcbmtlcm5lbC9LY29uZmlnLmtleGVjLTgxLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnpJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy04OC1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjg5OmNvbmZpZyBLRVhFQ19KVU1QXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05MC1cdGJvb2wgXCYjMzQ7a2V4ZWMganVtcFwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc9Mz1tZW51IFwmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclwmIzM0O1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy00LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlclwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjE4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1wmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjYtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjI3OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXhlYyBhbmQgTWVtb3J5IEZhaWx1cmUgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMga2V4ZWMgYW5kIG1lbW9yeSBmYWlsdXJlIGludGVncmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNRU1PUllfRkFJTFVSRWAsIGBLRVhFQ2AsIGFuZCBgS0VYRUNfRklMRWAuIFRob3NlIGFyZSB0aGUgY29yZSBlbmFibGVycy4KCk5vdywgZm9yIHRoZSBrZXkgZnVuY3Rpb25zLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgaWRlbnRpZmllZCBhcyBjcml0aWNhbCB0byBleGFtaW5lOgoKKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YAoqICAgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAKKiAgIGByYW5nZV9maXJzdF9od3BvaXNvbmAKKiAgIGByYW5nZV9sYXN0X2h3cG9pc29uYAoKSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoYXQgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGFyZSwgaW4gZmFjdCwgbm9uLXN0YXRpYy4gWWVzLCB0aGV5IGFyZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEdvb2QsIHRoYXQgbWVhbnMgdGhleSYjMzk7cmUgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuCgpJIHNjYW5uZWQgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLCBidXQgYE1FTU9SWV9GQUlMVVJFYCBkZXBlbmRzIG9uIGBNTVVgLCB3aGljaCBpcyBzdGFuZGFyZC4gYEtFWEVDYCBhbmQgYEtFWEVDX0ZJTEVgIGFyZSBhbHNvIHR5cGljYWwsIHNvIG5vIHN1cnByaXNlcyB0aGVyZS4KCkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciBpbnRvIGZ1bmN0aW9ucy4gYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIGlzIGluIGBrZXhlY19jb3JlLmNgIGFuZCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBpbiBga2V4ZWNfZmlsZS5jYC4KCldhaXQsIGFib3V0IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIGJlY2F1c2UsIGRpcmVjdGx5LCBpdCBsb29rcyBsaWtlIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAgd2VyZSBtb2RpZmllZCB3aGljaCBhcmUgc3RhdGljLiBIb3dldmVyLCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBhIGdvb2QgcHJveHkgYmVjYXVzZSBpdCBjYWxscyBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCB3aGljaCB0aGVuIGNhbGxzIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LgoKSSBhbHNvIGNvbnNpZGVyZWQgYGtleGVjX3dhbGtfbWVtYmxvY2tgIGFuZCBga2V4ZWNfd2Fsa19yZXNvdXJjZXNgLCBidXQgdGhleSYjMzk7cmUgbm90IHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuCgpGb2N1c2luZyBvbiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIGJ5IGBraW1hZ2VfYWxsb2NfaW5pdGAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGRvX2tleGVjX2xvYWRgLgoKU28sIHRvIHN1bW1hcml6ZSBteSBjcml0aWNhbCB0YXJnZXRzOgoKKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCAoa2V4ZWNcX2NvcmUuYykKKiAgIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgIChrZXhlY1xfZmlsZS5jKQoqICAgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCAobW0vbWVtb3J5LWZhaWx1cmUuYykKKiAgIGByYW5nZV9sYXN0X2h3cG9pc29uYCAobW0vbWVtb3J5LWZhaWx1cmUuYykKClRoZSBSZWxldmFudCBjb25maWdzIEkgYW0gZm9jdXNpbmcgb24gYXJlOgoKKiAgIGBNRU1PUllfRkFJTFVSRWAKKiAgIGBLRVhFQ2AKKiAgIGBLRVhFQ19GSUxFYAoKTXkgcmVhc29uaW5nPyBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjaGVja3MgZm9yIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3lzdGVtIGNhbGxzLCBzcGVjaWZpY2FsbHkgYGtleGVjX2xvYWRgIGFuZCBga2V4ZWNfZmlsZV9sb2FkYC4gVGhlIHRoaW5nIGlzLCB0aGlzIGNhbiBiZSBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIG1hZHZpc2UmIzM5O3MgTUFEVl9IV1BPSVNPTiwgc28gdGhpcyBpcyB0ZXN0YWJsZSBhbmQgZnV6emluZyB0aGVzZSBwb2ludHMgc2VlbXMgdmVyeSB3b3J0aHdoaWxlLgoKT2theSwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2V4ZWNfbG9jYXRlX21lbV9ob2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2ZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jPTY4OT1zdGF0aWMgaW50IGtleGVjX2FsbG9jX2NvbnRpZyhzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNzI2LS8qKlxua2VybmVsL2tleGVjX2ZpbGUuYzo3Mjc6ICoga2V4ZWNfbG9jYXRlX21lbV9ob2xlIC0gZmluZCBmcmVlIG1lbW9yeSBmb3IgdGhlIHB1cmdhdG9yeSBvciB0aGUgbmV4dCBrZXJuZWxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzI4LSAqIEBrYnVmOlx0UGFyYW1ldGVycyBmb3IgdGhlIG1lbW9yeSBzZWFyY2guXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03MzMtICovXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjczNDppbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTczNS17XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz03NzU9aW50IGtleGVjX2FkZF9idWZmZXIoc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTgwNC1cdC8qIFdhbGsgdGhlIFJBTSByYW5nZXMgYW5kIGFsbG9jYXRlIGEgc3VpdGFibGUgcmFuZ2UgZm9yIHRoZSBidWZmZXIgKi9cbmtlcm5lbC9rZXhlY19maWxlLmM6ODA1Olx0cmV0ID0gYXJjaF9rZXhlY19sb2NhdGVfbWVtX2hvbGUoa2J1Zik7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTgwNi1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgRnVuY3Rpb24gRXhpc3RlbmNlIGZvciBLZXJuZWwgQm9vdCBPcGVyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIEZpcnN0LCBJIHJlbWVtYmVyIHRoYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgaW5kZWVkIGEgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCBhbmQsIG1vcmUgaW1wb3J0YW50bHkgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpbywgaXQgaXNuJiMzOTt0IGRlZmluZWQgYXMgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSBleHRlcm5hbGx5LCB3aGljaCBpcyBlc3NlbnRpYWwgZm9yIHdoYXQgSSYjMzk7bSBwbGFubmluZy4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHRvIGF2b2lkIGFueSBzaWxseSBtaXNpbnRlcnByZXRhdGlvbnMgZG93biB0aGUgbGluZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhpc3RlbmNlIG9mIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIGlzIGFsc28gcHJlc2VudCBhbmQgYXZhaWxhYmxlLCBhcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiB0aGlzIHBhcnQgb2YgdGhlIGJvb3QgcHJvY2Vzcy4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGEgcXVpY2sgY2hlY2sgbm93IGNhbiBzYXZlIGEgaGVhZGFjaGUgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXG4tLVxua2VybmVsL2tleGVjX2NvcmUuYy0xMDktXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbmtlcm5lbC9rZXhlY19jb3JlLmMtMTExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBkaXJlY3QsIGludGVybmFsIG1vbm9sb2d1ZSwgYWltZWQgYXQgYSBjb2xsZWFndWU6CgoqKlZlcmlmaWNhdGlvbiBDaGVjazogUG9pc29uIFJhbmdlcyoqCgpSaWdodCwgc28gaXQmIzM5O3MgY29uZmlybWVkLiBUaGlzIHRoaW5nICpkb2VzKiBleGlzdC4gTm93LCBiZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBhYnNvbHV0ZWx5IG5haWwgZG93biB0aGVzZSByYW5nZSBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBhcmUsIGluIGZhY3QsIHByZXNlbnQuIEkgbmVlZCB0byBndWFyYW50ZWUgdGhlaXIgZXhpc3RlbmNlIGJlZm9yZSByZWx5aW5nIG9uIHRoZW0uIFdlIGRvbiYjMzk7dCB3YW50IGFueSBzdXJwcmlzZXMgd2hlbiB3ZSBzdGFydCBtb3ZpbmcgZm9yd2FyZCBvbiB0aGlzIHBhcnRpY3VsYXIgcHJvamVjdC4gTGV04oCZcyBjb25maXJtIGJlZm9yZSB3ZSBzdGFydCBhbnkgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhbmdlX2ZpcnN0X2h3cG9pc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTEwMz1zdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTYxOnBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODY4CgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqVGhlIFJlYWxpdHkgb2YgdGhlIERhdGEqKgoKT2theSwgc28geWVzLCB0aGUgcmVzdWx0cyBhcmUgZGVmaW5pdGVseSB0aGVyZS4gSSBjYW4gc2VlIHRoZSBkYXRhIGFuZCBjb25maXJtIHRoZSBvdXRwdXQuIE5vdyB0aGF0IEkgaGF2ZSBjb25maXJtYXRpb24sIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bSBnb2luZyB0byBmb3JtdWxhdGUgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwsIHByZWNpc2VseSBhbmQgZWZmaWNpZW50bHkuIEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIGluIHRoZSBvcHRpbWFsIHdheSBmb3IgdGhlIHN5c3RlbSB0byBwcm9jZXNzIHRoZSBpbmZvcm1hdGlvbiwgY29uc2lkZXJpbmcgYWxsIHRoZSByZWxldmFudCBwYXJhbWV0ZXJzIGFuZCBlbnN1cmluZyB0aGUgY29ycmVjdCBsaW5rYWdlLiBJdCYjMzk7cyB0aW1lIHRvIGJ1aWxkIHRoZSBuZXh0IGxheWVyIG9mIHRoaXMgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGNoZWNrcyB0byBrZXhlYyBzZWdtZW50IGxvYWRpbmcgYW5kIG1lbW9yeSBob2xlIGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzdGVtIGNhbGxzLCBhbmQgaGFyZHdhcmUgcG9pc29uaW5nIGNhbiBiZSBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS4gVGhlcmVmb3JlLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB0ZXN0YWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7S0VYRUMmIzM0OywKICAgICYjMzQ7S0VYRUNfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAgICYjMzQ7a2V4ZWNfbG9jYXRlX21lbV9ob2xlJiMzNDssCiAgICAmIzM0O3JhbmdlX2ZpcnN0X2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3JhbmdlX2xhc3RfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgY2hlY2tzIHRvIGtleGVjIHNlZ21lbnQgbG9hZGluZyBhbmQgbWVtb3J5IGhvbGUgbG9jYXRpb24gbG9naWMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXN0ZW0gY2FsbHMsIGFuZCBoYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHRlc3RhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGR1cmluZyBrZXhlYyBvcGVyYXRpb25zIGJ5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBjb250YWluIHBvaXNvbmVkIHBhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgbWVtb3J5IGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQga2V4ZWMgc2VnbWVudCBwbGFjZW1lbnQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1OTlmMDY5YjAxMjc2ZDkyOTBkYzY5ZWM4N2MxZmZlNjcxODllNzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjU2OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDdmYWJlNmM2NmI0YjcuLjQxYjkyMzkwMWIxOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUxOTIsNiAmIzQzOzUxOTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjA0LDYgJiM0Mzs1MjA2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmMKaW5kZXggZGM3NzBiOWE2ZDA1My4uZTA5N2U5ODBiMTQzOSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfY29yZS5jCkBAIC0yMTIsNiAmIzQzOzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIAl9CiAjZW5kaWYKIAomIzQzOwkvKgomIzQzOwkgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZQomIzQzOwkgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLSZndDtzZWdtZW50W2ldLm1lbSwKJiM0MzsJCQkJCSBpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWCkKJiM0MzsJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIHNlYXJjaGVkIGZyb20gc3lzdGVtIFJBTSByYXRoZXIgdGhhbgogCSAqIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIG5vdCBndWFyYW50ZWVkCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfZmlsZS5jIGIva2VybmVsL2tleGVjX2ZpbGUuYwppbmRleCA1OWZiOWQ3MWU5ZDg2Li45YmE2Y2MwMWFmOTI5IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWNfZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rZXhlY19maWxlLmMKQEAgLTQ3NSw2ICYjNDM7NDc1LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX2VuZCA9IG1pbihlbmQsIGtidWYtJmd0O2J1Zl9tYXgpOwogCXRlbXBfc3RhcnQgPSB0ZW1wX2VuZCAtIGtidWYtJmd0O21lbXN6ICYjNDM7IDE7CkBAIC01MDQsNiAmIzQzOzUwNSwxNSBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCXBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQlpZiAocG9pc29uICZsdDsga2J1Zi0mZ3Q7bWVtc3opCiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJCXRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLSZndDttZW1zejsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJLyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi8KIAkJYnJlYWs7CiAJfSB3aGlsZSAoMSk7CkBAIC01MjAsNiAmIzQzOzUzMCw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIHsKIAlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtJmd0O2ltYWdlOwogCXVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7CiYjNDM7CXBoeXNfYWRkcl90IHBvaXNvbjsKIAogCXRlbXBfc3RhcnQgPSBtYXgoc3RhcnQsIGtidWYtJmd0O2J1Zl9taW4pOwogCkBAIC01NDYsNiAmIzQzOzU1NywxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uICYjNDM7IFBBR0VfU0laRTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJLyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi8KIAkJYnJlYWs7CiAJfSB3aGlsZSAoMSk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhOGIwM2UyOTIwYmE4Li5jNDg1ZTIwNWZiNjMzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTk2LDYgJiM0Mzs5Niw3OCBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIAkJbWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBoYXJkd2FyZS1wb2lzb25lZCBvbmxpbmUgcGFnZSBpbiBbc3RhcnQsCiYjNDM7ICogc3RhcnQgJiM0Mzsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJCQkgIGJvb2wgZmlyc3QpCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYOwomIzQzOwl1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjsKJiM0MzsKJiM0MzsJaWYgKCFzaXplIHx8ICFhdG9taWNfbG9uZ19yZWFkKCZhbXA7bnVtX3BvaXNvbmVkX3BhZ2VzKSkKJiM0MzsJCXJldHVybiBwb2lzb247CiYjNDM7CiYjNDM7CWVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCAmIzQzOyBzaXplIC0gMSk7CiYjNDM7CWZvciAocGZuID0gUEhZU19QRk4oc3RhcnQpOyBwZm4gJmx0Oz0gZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsKJiM0MzsJCWlmICghcGFnZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJCWlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBodWdldGxiZnMgaXMgYSBiaXQgc3BlY2lhbCwgZ2l2ZW4gdGhlIHBvaXNvbgomIzQzOwkJCSAqIGluZm9ybWF0aW9uIGlzIGF0IHRoZSBmb2xpbywgbm90IGF0IHRoZSBwYWdlCiYjNDM7CQkJICovCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBmb2xpb19lbmQ7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBObyBodWdldGxiX2xvY2s6IHRoZSBzY2FuIGlzIHJhY3kgZWl0aGVyIHdheSwgYSBmcmFtZQomIzQzOwkJCSAqIGNhbiBiZSBwb2lzb25lZCByaWdodCBhZnRlciBpdC4gSnVzdCBkb24mIzM5O3QgbGV0IGEgZm9saW8KJiM0MzsJCQkgKiBkaXNzb2x2ZWQgdW5kZXIgdXMgd2FsayB0aGUgc2NhbiBiYWNrd2FyZHMuCiYjNDM7CQkJICovCiYjNDM7CQkJZm9saW9fZW5kID0gZm9saW9fcGZuKGZvbGlvKSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxOwomIzQzOwkJCWZvbGlvX2VuZCA9IG1heChmb2xpb19lbmQsIHBmbik7CiYjNDM7CiYjNDM7CQkJaWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7CiYjNDM7CQkJCWlmIChmaXJzdCkKJiM0MzsJCQkJCXJldHVybiBQRk5fUEhZUyhwZm4pOwomIzQzOwkJCQlwb2lzb24gPSBQRk5fUEhZUyhtaW4oZm9saW9fZW5kLCBlbmRfcGZuKSk7CiYjNDM7CQkJfQomIzQzOwkJCS8qIHNraXAgYWxsIHRoZSBwZm5zIHRoYXQgYmVsb25nIHRvIGh1Z2V0bGIgKi8KJiM0MzsJCQlwZm4gPSBmb2xpb19lbmQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIVBhZ2VIV1BvaXNvbihwYWdlKSkKJiM0MzsJCQkvKiBwYWdlIGlzIGdvb2QsIGxldCYjMzk7cyBnbyB0byB0aGUgbmV4dCBvbmUgKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChmaXJzdCkKJiM0MzsJCQlyZXR1cm4gUEZOX1BIWVMocGZuKTsKJiM0MzsKJiM0MzsJCXBvaXNvbiA9IFBGTl9QSFlTKHBmbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBvaXNvbjsKJiM0Mzt9CiYjNDM7CiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpOwomIzQzO30KJiM0MzsKIC8qKgogICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLgogICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI3CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2gsIGJ1dCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJiMzOTtzIHB1cnBvc2UsIHRoaXMgc2VlbXMgdW5saWtlbHkgdG8gdHJpZ2dlciBhbnkgcmVsZXZhbnQgaXNzdWVzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCB0aGUgYWRkaXRpb24gb2YgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnRyb2R1Y2VkIHRvIGRldGVjdCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgd2l0aGluIGEgZ2l2ZW4gcmFuZ2UuIFRoZXkmIzM5O3JlIGJlaW5nIGltcGxlbWVudGVkIGFuZCB0aGVuIGluY29ycG9yYXRlZCBpbnRvIGBrZXhlY19jb3JlLmNgIGFuZCBga2V4ZWNfZmlsZS5jYCB0byBwcmV2ZW50IGtleGVjIGRlc3RpbmF0aW9ucyBmcm9tIGxhbmRpbmcgb24gcHJvYmxlbWF0aWMgbWVtb3J5IHJlZ2lvbnMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIHBoeXNpY2FsIG1lbW9yeSBlcnJvcnMgbGlrZSBFQ0MgZXJyb3JzLiBUaGlzIGFsc28gZW5hYmxlcyBza2lwcGluZyBvZiB0aG9zZSByYW5nZXMgd2hlbiBsb2NhdGluZyBtZW1vcnkgaG9sZXMuCgpIZXJlJiMzOTtzIHRoZSBjaGFuZ2UgYW5hbHlzaXMsIHN0ZXAgYnkgc3RlcDoKCjEuICBXZSBoYXZlIGRlY2xhcmF0aW9ucyBhbmQgc3R1YiBpbXBsZW1lbnRhdGlvbnMgaW4gYG1tLmhgLgoyLiAgSW4gYGtleGVjX2NvcmUuY2AsIHRoZSBwYXRjaCBpcyBpbnRlZ3JhdGVkIGludG8gYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIHRvIHByZXZlbnQgc2VnbWVudHMgZnJvbSBsYW5kaW5nIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4KMy4gIGBrZXhlY19maWxlLmNgIHV0aWxpemVzIHRoZSBmdW5jdGlvbnMgdG8gYWRqdXN0IHNlYXJjaCByYW5nZXMsIHByZXZlbnRpbmcgdGhlIHNlbGVjdGlvbiBvZiBoYXJkd2FyZS1wb2lzb25lZCByZWdpb25zLgo0LiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZHMgdGhlIGByYW5nZV9od3BvaXNvbmAgaW1wbGVtZW50YXRpb24sIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaHdwb2lzb24gY2hlY2tzLgoKTm93LCBkb2VzIHRoaXMgKmV4cG9zZSogYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGF0JiMzOTtzIHRoZSBLTVNBTiBxdWVzdGlvbi4gTG9va2luZyBhdCBpdCwgSSBzZWU6CgoqICAgTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UuCiogICBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYmVpbmcgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYywgd2hpY2ggaXMgYSBtYWpvciBLTVNBTiBjb25jZXJuLgoqICAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLgoqICAgVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYm91bmRzIGNoZWNrcyB0aGF0IG1pZ2h0IGFsbG93IHVzIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIGluIGV4aXN0aW5nIGJ1ZmZlcnMuCgpCYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgKmF2b2lkaW5nKiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMuIFRoaXMgaXMgYSB2ZXJ5IGRpZmZlcmVudCB0aGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBzb2Z0d2FyZSBzZW5zZSwgd2hpY2ggaXMgd2hhdCBLTVNBTiBkZXRlY3RzLiBUaGVzZSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBzb2Z0d2FyZSBidWdzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBhbiBpc3N1ZSBvZiBwaHlzaWNhbCBtZW1vcnkgaW50ZWdyaXR5LCBub3Qgc29mdHdhcmUgaW5pdGlhbGl6YXRpb24uIEtBU0FOIGFuZCBMT0NLREVQIGFyZW4mIzM5O3QgcmVhbGx5IHJlbGV2YW50IGhlcmUgZWl0aGVyLCBidXQgS01TQU4gaXMgZGVmaW5pdGVseSBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgam9iLgoKVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggZm9jdXNlcyBleGNsdXNpdmVseSBvbiBpZGVudGlmeWluZyBhbmQgYXZvaWRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgc29mdHdhcmUgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGR1cmluZyBrZXhlYyBvcGVyYXRpb25zIGJ5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBjb250YWluIHBvaXNvbmVkIHBhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgbWVtb3J5IGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQga2V4ZWMgc2VnbWVudCBwbGFjZW1lbnQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBkdXJpbmcga2V4ZWMgb3BlcmF0aW9ucyBieSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IHBoeXNpY2FsIG1lbW9yeSByYW5nZXMgY29udGFpbiBwb2lzb25lZCBwYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIG1lbW9yeSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtleGVjIHNlZ21lbnQgcGxhY2VtZW50LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1Njo0NS4xMzIxNjM4MDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY2NjQ4OTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiS0VYRUNcIixcbiAgICBcIktFWEVDX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0XCIsXG4gICAgXCJrZXhlY19sb2NhdGVfbWVtX2hvbGVcIixcbiAgICBcInJhbmdlX2ZpcnN0X2h3cG9pc29uXCIsXG4gICAgXCJyYW5nZV9sYXN0X2h3cG9pc29uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBkdXJpbmcga2V4ZWMgb3BlcmF0aW9ucyBieSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IHBoeXNpY2FsIG1lbW9yeSByYW5nZXMgY29udGFpbiBwb2lzb25lZCBwYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIG1lbW9yeSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtleGVjIHNlZ21lbnQgcGxhY2VtZW50LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGNoZWNrcyB0byBrZXhlYyBzZWdtZW50IGxvYWRpbmcgYW5kIG1lbW9yeSBob2xlIGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzdGVtIGNhbGxzLCBhbmQgaGFyZHdhcmUgcG9pc29uaW5nIGNhbiBiZSBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCB2aWEgbWFkdmlzZSBNQURWX0hXUE9JU09OKS4gVGhlcmVmb3JlLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB0ZXN0YWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTY6NDUuMTMyMTY5MzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUyOTIzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDU5OWYwNjliMDEyNzZkOTI5MGRjNjllYzg3YzFmZmU2NzE4OWU3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjU2OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDdmYWJlNmM2NmI0YjcuLjQxYjkyMzkwMWIxOTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTUxOTIsNiArNTE5Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XFxuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XFxuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbitwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4ge1xcbkBAIC01MjA0LDYgKzUyMDYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXFxuIHtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gUEhZU19BRERSX01BWDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIFBIWVNfQUREUl9NQVg7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfY29yZS5jIGIva2VybmVsL2tleGVjX2NvcmUuY1xcbmluZGV4IGRjNzcwYjlhNmQwNTMuLmUwOTdlOTgwYjE0MzkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xcbisrKyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcXG5AQCAtMjEyLDYgKzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlamVjdCBkZXN0aW5hdGlvbnMgdGhhdCBsYW5kIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeTogdGhlXFxuK1xcdCAqIHJlbG9jYXRpb24gY29weSB3b3VsZCBtYWNoaW5lLWNoZWNrIG9uIHRoZSBiYWQgZnJhbWUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfc2VnbWVudHM7IGkrKykge1xcbitcXHRcXHRpZiAocmFuZ2VfZmlyc3RfaHdwb2lzb24oaW1hZ2UtXFx1MDAzZXNlZ21lbnRbaV0ubWVtLFxcbitcXHRcXHRcXHRcXHRcXHQgaW1hZ2UtXFx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXFxuK1xcdFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXFxuIFxcdCAqIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIG5vdCBndWFyYW50ZWVkXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXFxuaW5kZXggNTlmYjlkNzFlOWQ4Ni4uOWJhNmNjMDFhZjkyOSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwva2V4ZWNfZmlsZS5jXFxuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xcbkBAIC00NzUsNiArNDc1LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIHtcXG4gXFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVxcdTAwM2VpbWFnZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcXG4rXFx0cGh5c19hZGRyX3QgcG9pc29uO1xcbiBcXG4gXFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVxcdTAwM2VidWZfbWF4KTtcXG4gXFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cXHUwMDNlbWVtc3ogKyAxO1xcbkBAIC01MDQsNiArNTA1LDE1IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0cG9pc29uID0gcmFuZ2VfZmlyc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cXHUwMDNlbWVtc3opO1xcbitcXHRcXHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcXG4rXFx0XFx0XFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xcbitcXHRcXHRcXHRpZiAocG9pc29uIFxcdTAwM2Mga2J1Zi1cXHUwMDNlbWVtc3opXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHR0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi1cXHUwMDNlbWVtc3o7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fSB3aGlsZSAoMSk7XFxuQEAgLTUyMCw2ICs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIHtcXG4gXFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVxcdTAwM2VpbWFnZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcXG4rXFx0cGh5c19hZGRyX3QgcG9pc29uO1xcbiBcXG4gXFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cXHUwMDNlYnVmX21pbik7XFxuIFxcbkBAIC01NDYsNiArNTU3LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdHBvaXNvbiA9IHJhbmdlX2xhc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cXHUwMDNlbWVtc3opO1xcbitcXHRcXHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcXG4rXFx0XFx0XFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xcbitcXHRcXHRcXHR0ZW1wX3N0YXJ0ID0gcG9pc29uICsgUEFHRV9TSVpFO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi9cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH0gd2hpbGUgKDEpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IGE4YjAzZTI5MjBiYTguLmM0ODVlMjA1ZmI2MzMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtOTYsNiArOTYsNzggQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXFxuIFxcdFxcdG1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxcbisgKiBzdGFydCArIHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi5cXG4rICovXFxuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHRcXHRcXHQgIGJvb2wgZmlyc3QpXFxuK3tcXG4rXFx0cGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47XFxuK1xcbitcXHRpZiAoIXNpemUgfHwgIWF0b21pY19sb25nX3JlYWQoXFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcykpXFxuK1xcdFxcdHJldHVybiBwb2lzb247XFxuK1xcbitcXHRlbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgKyBzaXplIC0gMSk7XFxuK1xcdGZvciAocGZuID0gUEhZU19QRk4oc3RhcnQpOyBwZm4gXFx1MDAzYz0gZW5kX3BmbjsgcGZuKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogaHVnZXRsYmZzIGlzIGEgYml0IHNwZWNpYWwsIGdpdmVuIHRoZSBwb2lzb25cXG4rXFx0XFx0XFx0ICogaW5mb3JtYXRpb24gaXMgYXQgdGhlIGZvbGlvLCBub3QgYXQgdGhlIHBhZ2VcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZm9saW9fZW5kO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTm8gaHVnZXRsYl9sb2NrOiB0aGUgc2NhbiBpcyByYWN5IGVpdGhlciB3YXksIGEgZnJhbWVcXG4rXFx0XFx0XFx0ICogY2FuIGJlIHBvaXNvbmVkIHJpZ2h0IGFmdGVyIGl0LiBKdXN0IGRvbid0IGxldCBhIGZvbGlvXFxuK1xcdFxcdFxcdCAqIGRpc3NvbHZlZCB1bmRlciB1cyB3YWxrIHRoZSBzY2FuIGJhY2t3YXJkcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xcbitcXHRcXHRcXHRmb2xpb19lbmQgPSBtYXgoZm9saW9fZW5kLCBwZm4pO1xcbitcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChmaXJzdClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XFxuK1xcdFxcdFxcdFxcdHBvaXNvbiA9IFBGTl9QSFlTKG1pbihmb2xpb19lbmQsIGVuZF9wZm4pKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHQvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovXFxuK1xcdFxcdFxcdHBmbiA9IGZvbGlvX2VuZDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghUGFnZUhXUG9pc29uKHBhZ2UpKVxcbitcXHRcXHRcXHQvKiBwYWdlIGlzIGdvb2QsIGxldCdzIGdvIHRvIHRoZSBuZXh0IG9uZSAqL1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmIChmaXJzdClcXG4rXFx0XFx0XFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XFxuK1xcbitcXHRcXHRwb2lzb24gPSBQRk5fUEhZUyhwZm4pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcG9pc29uO1xcbit9XFxuK1xcbitwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgdHJ1ZSk7XFxuK31cXG4rXFxuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy5cXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU2OjQ2LjM4NTc2NDQyOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMzc2MjI1MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJLRVhFQ1wiLFxuICAgIFwiS0VYRUNfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgICBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICAgIFwicmFuZ2VfZmlyc3RfaHdwb2lzb25cIixcbiAgICBcInJhbmdlX2xhc3RfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBjaGVja3MgdG8ga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbiBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c3RlbSBjYWxscywgYW5kIGhhcmR3YXJlIHBvaXNvbmluZyBjYW4gYmUgc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgdGVzdGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1OTlmMDY5YjAxMjc2ZDkyOTBkYzY5ZWM4N2MxZmZlNjcxODllNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjU2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA3ZmFiZTZjNjZiNGI3Li40MWI5MjM5MDFiMTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MTkyLDYgKzUxOTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwO1xuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpO1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG5AQCAtNTIwNCw2ICs1MjA2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpXG4ge1xuIH1cbitcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuK1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gUEhZU19BRERSX01BWDtcbit9XG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbmluZGV4IGRjNzcwYjlhNmQwNTMuLmUwOTdlOTgwYjE0MzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXG4rKysgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5AQCAtMjEyLDYgKzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbiBcdH1cbiAjZW5kaWZcbiBcbitcdC8qXG4rXHQgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZVxuK1x0ICogcmVsb2NhdGlvbiBjb3B5IHdvdWxkIG1hY2hpbmUtY2hlY2sgb24gdGhlIGJhZCBmcmFtZS5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc2VnbWVudHM7IGkrKykge1xuK1x0XHRpZiAocmFuZ2VfZmlyc3RfaHdwb2lzb24oaW1hZ2UtXHUwMDNlc2VnbWVudFtpXS5tZW0sXG4rXHRcdFx0XHRcdCBpbWFnZS1cdTAwM2VzZWdtZW50W2ldLm1lbXN6KSAhPSBQSFlTX0FERFJfTUFYKVxuK1x0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBUaGUgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFyZSBzZWFyY2hlZCBmcm9tIHN5c3RlbSBSQU0gcmF0aGVyIHRoYW5cbiBcdCAqIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIG5vdCBndWFyYW50ZWVkXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2ZpbGUuYyBiL2tlcm5lbC9rZXhlY19maWxlLmNcbmluZGV4IDU5ZmI5ZDcxZTlkODYuLjliYTZjYzAxYWY5MjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva2V4ZWNfZmlsZS5jXG4rKysgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5AQCAtNDc1LDYgKzQ3NSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cdTAwM2VpbWFnZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XG4rXHRwaHlzX2FkZHJfdCBwb2lzb247XG4gXG4gXHR0ZW1wX2VuZCA9IG1pbihlbmQsIGtidWYtXHUwMDNlYnVmX21heCk7XG4gXHR0ZW1wX3N0YXJ0ID0gdGVtcF9lbmQgLSBrYnVmLVx1MDAzZW1lbXN6ICsgMTtcbkBAIC01MDQsNiArNTA1LDE1IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdHBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0aWYgKHBvaXNvbiBcdTAwM2Mga2J1Zi1cdTAwM2VtZW1zeilcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTIwLDYgKzUzMCw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDYsNiArNTU3LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0dGVtcF9zdGFydCA9IHBvaXNvbiArIFBBR0VfU0laRTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5jNDg1ZTIwNWZiNjMzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgKzk2LDc4IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbisvKlxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxuKyAqL1xuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdFx0ICBib29sIGZpcnN0KVxuK3tcbitcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcbitcbitcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuK1x0XHRyZXR1cm4gcG9pc29uO1xuK1xuK1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICsgc2l6ZSAtIDEpO1xuK1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbisrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1xuK1x0XHRpZiAoIXBhZ2UpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGh1Z2V0bGJmcyBpcyBhIGJpdCBzcGVjaWFsLCBnaXZlbiB0aGUgcG9pc29uXG4rXHRcdFx0ICogaW5mb3JtYXRpb24gaXMgYXQgdGhlIGZvbGlvLCBub3QgYXQgdGhlIHBhZ2VcbitcdFx0XHQgKi9cbitcdFx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX2VuZDtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE5vIGh1Z2V0bGJfbG9jazogdGhlIHNjYW4gaXMgcmFjeSBlaXRoZXIgd2F5LCBhIGZyYW1lXG4rXHRcdFx0ICogY2FuIGJlIHBvaXNvbmVkIHJpZ2h0IGFmdGVyIGl0LiBKdXN0IGRvbid0IGxldCBhIGZvbGlvXG4rXHRcdFx0ICogZGlzc29sdmVkIHVuZGVyIHVzIHdhbGsgdGhlIHNjYW4gYmFja3dhcmRzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGZvbGlvX2VuZCA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuK1x0XHRcdGZvbGlvX2VuZCA9IG1heChmb2xpb19lbmQsIHBmbik7XG4rXG4rXHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSB7XG4rXHRcdFx0XHRpZiAoZmlyc3QpXG4rXHRcdFx0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuK1x0XHRcdFx0cG9pc29uID0gUEZOX1BIWVMobWluKGZvbGlvX2VuZCwgZW5kX3BmbikpO1xuK1x0XHRcdH1cbitcdFx0XHQvKiBza2lwIGFsbCB0aGUgcGZucyB0aGF0IGJlbG9uZyB0byBodWdldGxiICovXG4rXHRcdFx0cGZuID0gZm9saW9fZW5kO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghUGFnZUhXUG9pc29uKHBhZ2UpKVxuK1x0XHRcdC8qIHBhZ2UgaXMgZ29vZCwgbGV0J3MgZ28gdG8gdGhlIG5leHQgb25lICovXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChmaXJzdClcbitcdFx0XHRyZXR1cm4gUEZOX1BIWVMocGZuKTtcbitcbitcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbitcdH1cbitcbitcdHJldHVybiBwb2lzb247XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbit9XG4rXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1Njo0Ni4zODU3NjU2NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDA5ODcwMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEhhcmR3YXJlIFBvaXNvbmluZyBDaGVja3MgaW4ga2V4ZWMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIHNvbWUgY3JpdGljYWwgY2hlY2tzIGZvciBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgd2l0aGluIGtleGVjLiBJdCdzIHRvdWNoaW5nIGBrZXhlY19jb3JlLmNgLCBga2V4ZWNfZmlsZS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBwb3RlbnRpYWxseSBxdWl0ZSBzaWduaWZpY2FudC4gSXQgaW50cm9kdWNlcyB0aG9zZSBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAgZnVuY3Rpb25zLCBhbmQgdGhleSdyZSBiZWluZyB1c2VkIGluIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCAoa2V4ZWNfY29yZS5jKSBhbmQgdGhlIGhvbGUtZmluZGluZyBmdW5jdGlvbnMgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCAoa2V4ZWNfZmlsZS5jKS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBIYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCwgZWl0aGVyIHRocm91Z2ggYHN5c2ZzYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIEFuZCwgeWVzLCB0aGUga2V4ZWMgc3lzdGVtIGNhbGxzIHRoZW1zZWx2ZXMg4oCTIGBrZXhlY19sb2FkYCwgYGtleGVjX2ZpbGVfbG9hZGAg4oCTIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlIGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIFRoYXQgbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBnZXQgc3BlY2lmaWMuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uPyBBbHJpZ2h0LCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgaW4gYGtleGVjX2NvcmUuY2AgaXMgZGVmaW5pdGVseSBtb2RpZmllZC4gVGhlbiwgaW4gYGtleGVjX2ZpbGUuY2AsIHdlIGhhdmUgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYC4gQW5kIG9mIGNvdXJzZSwgdGhlIG5ldyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAgZnVuY3Rpb25zIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcmUgdml0YWwgZm9yIGluaXRpYWwgYW5hbHlzaXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgc29tZXRoaW5nLiBJcyBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgc3RhdGljIG9yIG5vdD8gR29vZCwgaXQncyBub24tc3RhdGljLiBUaGUgaG9sZS1maW5kaW5nIGZ1bmN0aW9ucyBhcmUsIGhvd2V2ZXIsIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgcHJvYmFibHkgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4ga2V4ZWNfZmlsZS5jLCBwcm9iYWJseSBieSBzb21ldGhpbmcgbGlrZSBga2V4ZWNfd2Fsa19tZW1ibG9ja2AuIEJldHRlciBjaGVjayB0aGF0IGFuZCBtYWtlIHN1cmUuIE9rYXksIEknbGwgZGl2ZSBpbnRvIGBrZXhlY19maWxlLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1Njo1My43OTU2Mzc5NTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NTUwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9jYXRlX21lbV9ob2xlX3RvcF9kb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9rZXhlY19maWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2tleGVjX2ZpbGUuYz0zNjU9U1lTQ0FMTF9ERUZJTkU1KGtleGVjX2ZpbGVfbG9hZCwgaW50LCBrZXJuZWxfZmQsIGludCwgaW5pdHJkX2ZkLFxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzItXFxua2VybmVsL2tleGVjX2ZpbGUuYzo0NzM6c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU3OD1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy02MDAtXFx0aWYgKGtidWYtXFx1MDAzZXRvcF9kb3duKVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NjAxOlxcdFxcdHJldHVybiBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24oc3RhcnQsIGVuZCwga2J1Zik7XFxua2VybmVsL2tleGVjX2ZpbGUuYy02MDItXFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAoc3RhcnQsIGVuZCwga2J1Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU2OjUzLjgzOTE5NTkwOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjE0MTg2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5xdWlyeSBBYm91dCBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgdGhhdCBpdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIHF1ZXJ5OiB3aG8gb3Igd2hhdCBpcyBjYWxsaW5nICp0aGlzKiBzcGVjaWZpYyBmdW5jdGlvbj8gVGhhdCBgc3RhdGljYCBrZXl3b3JkIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHNjb3BlZCB3aXRoaW4gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBjYWxsZXJzIGFyZSBsaW1pdGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEknbGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBvciBtb2R1bGUgdGhhdCdzIGludm9raW5nIGl0LiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBjYWxsYmFjayBpcyBiZWluZyB1c2VkIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyAqd2h5KiBpdCBleGlzdHMgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBjYWxsIHNpdGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTY6NTcuOTYwNjE3MjAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDI4ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19maWxlLmM9NTI4PXN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNTc3LVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NTc4OnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxua2VybmVsL2tleGVjX2ZpbGUuYy01Nzkte1xcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYz02MDY9c3RhdGljIGludCBrZXhlY193YWxrX21lbWJsb2NrKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYyMS1cXHQgKiBJT1JFU09VUkNFX1NZU1JBTV9EUklWRVJfTUFOQUdFRCBoYW5kbGluZyBpblxcbmtlcm5lbC9rZXhlY19maWxlLmM6NjIyOlxcdCAqIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjaygpLlxcbmtlcm5lbC9rZXhlY19maWxlLmMtNjIzLVxcdCAqL1xcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYz03MzQ9aW50IGtleGVjX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy03NDUtXFx0ICovXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3NDY6XFx0cmV0ID0ga2hvX2xvY2F0ZV9tZW1faG9sZShrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ3LVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzU3LVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1ODpcXHRcXHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbmtlcm5lbC9rZXhlY19maWxlLmMtNzU5LVxcdGVsc2VcXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc2MDpcXHRcXHRyZXQgPSBrZXhlY193YWxrX21lbWJsb2NrKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XFxua2VybmVsL2tleGVjX2ZpbGUuYy03NjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU2OjU4LjAwNTA1MDMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NzUwMjg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgIGFuZCBTZWdtZW50IExpc3RzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCB2aXNpYmlsaXR5IGFuZCB1c2FnZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIHdoaWNoIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIGFueSBhbmFseXNpcy4gSXQncyBhIGtleSBmdW5jdGlvbiwgaWYgbm90IGxvY2FsIHRvIGEgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIHRoaXMgaXMgdXNlZC5cblxuTmV4dCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gQ29uc2lkZXJpbmcgdGhlIG5hbWUsIEknZCBiZXQgaXQncyBpbnZvbHZlZCBpbiB2YWxpZGF0aW5nIHRoZSBzZWdtZW50cyBvZiBtZW1vcnkgdGhlIHN5c3RlbSdzIHdvcmtpbmcgd2l0aC4gVGhpcyBmdW5jdGlvbidzIHByb2JhYmx5IGNyaXRpY2FsIHRvIG1ha2luZyBzdXJlIHRoZSBtZW1vcnkgbWFwcyBhcmUgY29ycmVjdCBiZWZvcmUgb3IgYWZ0ZXIgYSBrZXhlYyByZWJvb3QsIHNvIHRoZSBzeXN0ZW0gZG9lc24ndCBjcmFzaCBvciBnZXQgY29ycnVwdGVkLiBJIGJldCBpdCBtYWtlcyBzdXJlIHRoZXJlIGFyZW4ndCBjb25mbGljdGluZyBtZW1vcnkgcmVnaW9ucyBvciBob2xlcyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBEZWZpbml0ZWx5IGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgd291bGQgdHJpZ2dlciBhbnkgaXNzdWVzIHRoZXJlLCB0byBsb29rIGZvciB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzkxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MDIuMjUyNTU2MzA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTgyNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2tleGVjX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2V4ZWNfY29yZS5jPTEwNj1zdGF0aWMgc3RydWN0IHBhZ2UgKmtpbWFnZV9hbGxvY19wYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlLFxcbi0tXFxua2VybmVsL2tleGVjX2NvcmUuYy0xMDktXFxua2VybmVsL2tleGVjX2NvcmUuYzoxMTA6aW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxua2VybmVsL2tleGVjX2NvcmUuYy0xMTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzowMi4yOTQ1NDM0NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njc2NjA4MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYXRjaCBEZXBlbmRlbmNpZXMgZm9yIE1lbW9yeSBGYWlsdXJlIGFuZCBLZXhlYyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBzeW1ib2xzIGhlcmU6IGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCwgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAsIGFuZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgvbW0uaGAuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgY29uZGl0aW9uYWwgYmxvY2s6XG5cbmBgYGNcbiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuYGBgXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCBJJ20gZXhhbWluaW5nICpvbmx5KiBpbmNsdWRlcyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAgdW5kZXIgYW4gYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBpdHNlbGYgYWdhaW5zdCBgaW5jbHVkZS9saW51eC9tbS5oYC5cblxuQWgsIGhlcmUncyB0aGUgcmVsZXZhbnQgc2VjdGlvbiBmcm9tIHRoZSBwYXRjaDpcblxuYGBgY1xuQEAgLTUxOTIsNiArNTE5Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbkBAIC01MjA0LDYgKzUyMDYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiB7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbiAjZW5kaWZcbiBgYGBcblxuWWVzLCB0aGF0IGNvbmZpcm1zIGl0OiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyB0aGUgKnByaW1hcnkqIGRlcGVuZGVuY3kgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gVG8gdGVzdCB0aGUga2V4ZWMtcmVsYXRlZCBjb21wb25lbnRzLCBJJ2xsIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0tFWEVDYCBhbmQgYENPTkZJR19LRVhFQ19GSUxFYCBhcmUgZW5hYmxlZCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjA5Ljk3MTE1NDgzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTU0NTEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzYyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc2NC1cXG5tbS9LY29uZmlnOjc2NTpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2Ni1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzoxMS40OTA3MDgxOThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMjY4OTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipFeGFtaW5pbmcga2V4ZWMgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIHRvIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBga2V4ZWNgIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gaGFuZGxlIGtlcm5lbCB0cmFuc2l0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgYGtleGVjYCBpcyB0aGUgbWVjaGFuaXNtIHdlIHVzZSBmb3IgcXVpY2tseSBzd2l0Y2hpbmcgYmV0d2VlbiBrZXJuZWxzLCBhbmQgaWYgdGhlcmUncyBhIHByb2JsZW0gdGhlcmUsIGl0IGNvdWxkIGV4cGxhaW4gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgbWF5YmUgZXZlbiBzb21lIGtlcm5lbCBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCBga2V4ZWNgJ3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIGludm9rZWQsIHdoYXQga2VybmVscyBpdCdzIHBvaW50aW5nIHRvLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG1pc2NvbmZpZ3VyYXRpb25zIG9yIHBvdGVudGlhbCBjb25mbGljdHMuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggYC9ldGMva2V4ZWMuY29uZmAgKG9yIHdoZXJldmVyIHRoZSBkaXN0cmlidXRpb24gcGxhY2VzIGl0KSwgYW5kIEknbGwgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUga2VybmVsIGNvbW1hbmQtbGluZSBmb3IgYW55dGhpbmcgaW50ZXJlc3RpbmcgcmVsYXRlZCB0byBga2V4ZWNgIG9wdGlvbnMuIFRoaXMgbmVlZHMgdG8gYmUgYSBmb2N1c2VkIGV4cGxvcmF0aW9uLCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHByZXZlbnQgYSBzbW9vdGgga2VybmVsIHN3YXAgb3IgaW50cm9kdWNlIGluc3RhYmlsaXR5IGR1cmluZyB0aGUgdHJhbnNpdGlvbi4gSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYm9vdGxvYWRlciB0b28sIGxpa2UgR1JVQiwgYXMgdGhpcyBjYW4gcGxheSBhIHNpZ25pZmljYW50IHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzoxNS42MjMzOTk1OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzAxMzcyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFWEVDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlYz04PWNvbmZpZyBWTUNPUkVfSU5GT1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTAtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTE6Y29uZmlnIEtFWEVDX0NPUkVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMi1cXHRib29sXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTMtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTQ6Y29uZmlnIEtFWEVDX0VMRlxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTE1LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjPTE3PWNvbmZpZyBIQVZFX0lNQV9LRVhFQ1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTktXFxua2VybmVsL0tjb25maWcua2V4ZWM6MjA6Y29uZmlnIEtFWEVDXFxua2VybmVsL0tjb25maWcua2V4ZWMtMjEtXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMzctXFxua2VybmVsL0tjb25maWcua2V4ZWM6Mzg6Y29uZmlnIEtFWEVDX0ZJTEVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zOS1cXHRib29sIFxcXCJFbmFibGUga2V4ZWMgZmlsZSBiYXNlZCBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTQ4LVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjQ5OmNvbmZpZyBLRVhFQ19TSUdcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy01MC1cXHRib29sIFxcXCJWZXJpZnkga2VybmVsIHNpZ25hdHVyZSBkdXJpbmcga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTYyLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjYzOmNvbmZpZyBLRVhFQ19TSUdfRk9SQ0VcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy02NC1cXHRib29sIFxcXCJSZXF1aXJlIGEgdmFsaWQgc2lnbmF0dXJlIGluIGtleGVjX2ZpbGVfbG9hZCgpIHN5c2NhbGxcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03MC1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo3MTpjb25maWcgS0VYRUNfSU1BR0VfVkVSSUZZX1NJR1xcbmtlcm5lbC9LY29uZmlnLmtleGVjLTcyLVxcdGJvb2wgXFxcIkVuYWJsZSBJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnQgKEFSTSlcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03OS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4MDpjb25maWcgS0VYRUNfQlpJTUFHRV9WRVJJRllfU0lHXFxua2VybmVsL0tjb25maWcua2V4ZWMtODEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ6SW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtODgtXFxua2VybmVsL0tjb25maWcua2V4ZWM6ODk6Y29uZmlnIEtFWEVDX0pVTVBcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05MC1cXHRib29sIFxcXCJrZXhlYyBqdW1wXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjE3LjI1MzU0MjAzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAwNjI3MTk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXhlYyBhbmQgTWVtb3J5IEZhaWx1cmUgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiB0aGlzIGtleGVjIGFuZCBtZW1vcnkgZmFpbHVyZSBpbnRlZ3JhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNRU1PUllfRkFJTFVSRWAsIGBLRVhFQ2AsIGFuZCBgS0VYRUNfRklMRWAuIFRob3NlIGFyZSB0aGUgY29yZSBlbmFibGVycy5cblxuTm93LCBmb3IgdGhlIGtleSBmdW5jdGlvbnMsIGhlcmUncyB3aGF0IEkndmUgaWRlbnRpZmllZCBhcyBjcml0aWNhbCB0byBleGFtaW5lOlxuXG4qICAgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgXG4qICAgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWBcbiogICBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gXG4qICAgYHJhbmdlX2xhc3RfaHdwb2lzb25gXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCB0aGF0IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBhcmUsIGluIGZhY3QsIG5vbi1zdGF0aWMuIFllcywgdGhleSBhcmUgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBHb29kLCB0aGF0IG1lYW5zIHRoZXkncmUgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuXG5cbkkgc2Nhbm5lZCBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MsIGJ1dCBgTUVNT1JZX0ZBSUxVUkVgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIGlzIHN0YW5kYXJkLiBgS0VYRUNgIGFuZCBgS0VYRUNfRklMRWAgYXJlIGFsc28gdHlwaWNhbCwgc28gbm8gc3VycHJpc2VzIHRoZXJlLlxuXG5JIHN0YXJ0ZWQgZGlnZ2luZyBkZWVwZXIgaW50byBmdW5jdGlvbnMuIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBpbiBga2V4ZWNfY29yZS5jYCBhbmQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgaW4gYGtleGVjX2ZpbGUuY2AuXG5cbldhaXQsIGFib3V0IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIGJlY2F1c2UsIGRpcmVjdGx5LCBpdCBsb29rcyBsaWtlIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAgd2VyZSBtb2RpZmllZCB3aGljaCBhcmUgc3RhdGljLiBIb3dldmVyLCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBhIGdvb2QgcHJveHkgYmVjYXVzZSBpdCBjYWxscyBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCB3aGljaCB0aGVuIGNhbGxzIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LlxuXG5JIGFsc28gY29uc2lkZXJlZCBga2V4ZWNfd2Fsa19tZW1ibG9ja2AgYW5kIGBrZXhlY193YWxrX3Jlc291cmNlc2AsIGJ1dCB0aGV5J3JlIG5vdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlLlxuXG5Gb2N1c2luZyBvbiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIGJ5IGBraW1hZ2VfYWxsb2NfaW5pdGAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGRvX2tleGVjX2xvYWRgLlxuXG5TbywgdG8gc3VtbWFyaXplIG15IGNyaXRpY2FsIHRhcmdldHM6XG5cbiogICBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgKGtleGVjXFxfY29yZS5jKVxuKiAgIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgIChrZXhlY1xcX2ZpbGUuYylcbiogICBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIChtbS9tZW1vcnktZmFpbHVyZS5jKVxuKiAgIGByYW5nZV9sYXN0X2h3cG9pc29uYCAobW0vbWVtb3J5LWZhaWx1cmUuYylcblxuVGhlIFJlbGV2YW50IGNvbmZpZ3MgSSBhbSBmb2N1c2luZyBvbiBhcmU6XG5cbiogICBgTUVNT1JZX0ZBSUxVUkVgXG4qICAgYEtFWEVDYFxuKiAgIGBLRVhFQ19GSUxFYFxuXG5NeSByZWFzb25pbmc/IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNoZWNrcyBmb3IgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGxvYWRpbmcgYW5kIG1lbW9yeSBob2xlIGxvY2F0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdGhyb3VnaCBzeXN0ZW0gY2FsbHMsIHNwZWNpZmljYWxseSBga2V4ZWNfbG9hZGAgYW5kIGBrZXhlY19maWxlX2xvYWRgLiBUaGUgdGhpbmcgaXMsIHRoaXMgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgbWFkdmlzZSdzIE1BRFZfSFdQT0lTT04sIHNvIHRoaXMgaXMgdGVzdGFibGUgYW5kIGZ1enppbmcgdGhlc2UgcG9pbnRzIHNlZW1zIHZlcnkgd29ydGh3aGlsZS5cblxuT2theSwgbGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzoyNy4yNTk4MTcwNDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTExOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19maWxlLmM9Njg5PXN0YXRpYyBpbnQga2V4ZWNfYWxsb2NfY29udGlnKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTcyNi0vKipcXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjcyNzogKiBrZXhlY19sb2NhdGVfbWVtX2hvbGUgLSBmaW5kIGZyZWUgbWVtb3J5IGZvciB0aGUgcHVyZ2F0b3J5IG9yIHRoZSBuZXh0IGtlcm5lbFxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzI4LSAqIEBrYnVmOlxcdFBhcmFtZXRlcnMgZm9yIHRoZSBtZW1vcnkgc2VhcmNoLlxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy03MzMtICovXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3MzQ6aW50IGtleGVjX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmKVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzM1LXtcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9Nzc1PWludCBrZXhlY19hZGRfYnVmZmVyKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTgwNC1cXHQvKiBXYWxrIHRoZSBSQU0gcmFuZ2VzIGFuZCBhbGxvY2F0ZSBhIHN1aXRhYmxlIHJhbmdlIGZvciB0aGUgYnVmZmVyICovXFxua2VybmVsL2tleGVjX2ZpbGUuYzo4MDU6XFx0cmV0ID0gYXJjaF9rZXhlY19sb2NhdGVfbWVtX2hvbGUoa2J1Zik7XFxua2VybmVsL2tleGVjX2ZpbGUuYy04MDYtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MjcuMzA0MzMyNDc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYyNDg0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maXJtaW5nIEZ1bmN0aW9uIEV4aXN0ZW5jZSBmb3IgS2VybmVsIEJvb3QgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gRmlyc3QsIEkgcmVtZW1iZXIgdGhhdCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCBpcyBpbmRlZWQgYSBmdW5jdGlvbiBpbiB0aGUga2VybmVsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLCBpdCBpc24ndCBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIHRoYXQgaXQncyBhY2Nlc3NpYmxlIGV4dGVybmFsbHksIHdoaWNoIGlzIGVzc2VudGlhbCBmb3Igd2hhdCBJJ20gcGxhbm5pbmcuXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHRvIGF2b2lkIGFueSBzaWxseSBtaXNpbnRlcnByZXRhdGlvbnMgZG93biB0aGUgbGluZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gaXMgYWxzbyBwcmVzZW50IGFuZCBhdmFpbGFibGUsIGFzIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhpcyBwYXJ0IG9mIHRoZSBib290IHByb2Nlc3MuIEJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBhIHF1aWNrIGNoZWNrIG5vdyBjYW4gc2F2ZSBhIGhlYWRhY2hlIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjMwLjgwMDU4Mjc3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNTc4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXFxuLS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjMwLjg0NDY0NDkzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxMjMwNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0LCBpbnRlcm5hbCBtb25vbG9ndWUsIGFpbWVkIGF0IGEgY29sbGVhZ3VlOlxuXG4qKlZlcmlmaWNhdGlvbiBDaGVjazogUG9pc29uIFJhbmdlcyoqXG5cblJpZ2h0LCBzbyBpdCdzIGNvbmZpcm1lZC4gVGhpcyB0aGluZyAqZG9lcyogZXhpc3QuIE5vdywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gYWJzb2x1dGVseSBuYWlsIGRvd24gdGhlc2UgcmFuZ2UgZGVmaW5pdGlvbnMuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBhcmUsIGluIGZhY3QsIHByZXNlbnQuIEkgbmVlZCB0byBndWFyYW50ZWUgdGhlaXIgZXhpc3RlbmNlIGJlZm9yZSByZWx5aW5nIG9uIHRoZW0uIFdlIGRvbid0IHdhbnQgYW55IHN1cnByaXNlcyB3aGVuIHdlIHN0YXJ0IG1vdmluZyBmb3J3YXJkIG9uIHRoaXMgcGFydGljdWxhciBwcm9qZWN0LiBMZXTigJlzIGNvbmZpcm0gYmVmb3JlIHdlIHN0YXJ0IGFueSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo1NzozNC4zMDU4NzczMjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkzNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhbmdlX2ZpcnN0X2h3cG9pc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMDM9c3RhdGljIHBoeXNfYWRkcl90IHJhbmdlX2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2MC1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2MTpwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MzQuMzUwNzc2NDg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA2MDU5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqVGhlIFJlYWxpdHkgb2YgdGhlIERhdGEqKlxuXG5Pa2F5LCBzbyB5ZXMsIHRoZSByZXN1bHRzIGFyZSBkZWZpbml0ZWx5IHRoZXJlLiBJIGNhbiBzZWUgdGhlIGRhdGEgYW5kIGNvbmZpcm0gdGhlIG91dHB1dC4gTm93IHRoYXQgSSBoYXZlIGNvbmZpcm1hdGlvbiwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ20gZ29pbmcgdG8gZm9ybXVsYXRlIHRoYXQgYHNldC1yZXN1bHRzYCBjYWxsLCBwcmVjaXNlbHkgYW5kIGVmZmljaWVudGx5LiBJJ2xsIG1ha2Ugc3VyZSBpdCdzIHN0cnVjdHVyZWQgaW4gdGhlIG9wdGltYWwgd2F5IGZvciB0aGUgc3lzdGVtIHRvIHByb2Nlc3MgdGhlIGluZm9ybWF0aW9uLCBjb25zaWRlcmluZyBhbGwgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgYW5kIGVuc3VyaW5nIHRoZSBjb3JyZWN0IGxpbmthZ2UuIEl0J3MgdGltZSB0byBidWlsZCB0aGUgbmV4dCBsYXllciBvZiB0aGlzIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODY4LCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjM5LjY5MTM4NTA0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjAyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiS0VYRUNcIixcbiAgICBcIktFWEVDX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0XCIsXG4gICAgXCJrZXhlY19sb2NhdGVfbWVtX2hvbGVcIixcbiAgICBcInJhbmdlX2ZpcnN0X2h3cG9pc29uXCIsXG4gICAgXCJyYW5nZV9sYXN0X2h3cG9pc29uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgY2hlY2tzIHRvIGtleGVjIHNlZ21lbnQgbG9hZGluZyBhbmQgbWVtb3J5IGhvbGUgbG9jYXRpb24gbG9naWMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXN0ZW0gY2FsbHMsIGFuZCBoYXJkd2FyZSBwb2lzb25pbmcgY2FuIGJlIHNpbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIHZpYSBtYWR2aXNlIE1BRFZfSFdQT0lTT04pLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHRlc3RhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJLRVhFQ1wiLFxuICAgIFwiS0VYRUNfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgICBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICAgIFwicmFuZ2VfZmlyc3RfaHdwb2lzb25cIixcbiAgICBcInJhbmdlX2xhc3RfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBjaGVja3MgdG8ga2V4ZWMgc2VnbWVudCBsb2FkaW5nIGFuZCBtZW1vcnkgaG9sZSBsb2NhdGlvbiBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c3RlbSBjYWxscywgYW5kIGhhcmR3YXJlIHBvaXNvbmluZyBjYW4gYmUgc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgdmlhIG1hZHZpc2UgTUFEVl9IV1BPSVNPTikuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgdGVzdGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjU3OjM5Ljc2MTk5MjY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM2NjUxMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MzkuNzYyNDM2ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTAzNjIwMzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2dpYyB0byBhdm9pZCBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgcGFnZXMgZHVyaW5nIGtleGVjIG9wZXJhdGlvbnMgYnkgY2hlY2tpbmcgaWYgdGhlIHRhcmdldCBwaHlzaWNhbCBtZW1vcnkgcmFuZ2VzIGNvbnRhaW4gcG9pc29uZWQgcGFnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBtZW1vcnkgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBrZXhlYyBzZWdtZW50IHBsYWNlbWVudC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTk5ZjA2OWIwMTI3NmQ5MjkwZGM2OWVjODdjMWZmZTY3MTg5ZTcwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzo1Njo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggN2ZhYmU2YzY2YjRiNy4uNDFiOTIzOTAxYjE5MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTE5Miw2ICs1MTkyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbitwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbitwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4ge1xuQEAgLTUyMDQsNiArNTIwNiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIHtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gUEhZU19BRERSX01BWDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuK1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuICNlbmRpZlxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi5lMDk3ZTk4MGIxNDM5IDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuKysrIGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTIxMiw2ICsyMTIsMTYgQEAgaW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4gXHR9XG4gI2VuZGlmXG4gXG4rXHQvKlxuK1x0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcbitcdCAqIHJlbG9jYXRpb24gY29weSB3b3VsZCBtYWNoaW5lLWNoZWNrIG9uIHRoZSBiYWQgZnJhbWUuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3NlZ21lbnRzOyBpKyspIHtcbitcdFx0aWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtLFxuK1x0XHRcdFx0XHQgaW1hZ2UtXHUwMDNlc2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWClcbitcdFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCA1OWZiOWQ3MWU5ZDg2Li45YmE2Y2MwMWFmOTI5IDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NSw2ICs0NzUsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiArIDE7XG5AQCAtNTA0LDYgKzUwNSwxNSBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdGlmIChwb2lzb24gXHUwMDNjIGtidWYtXHUwMDNlbWVtc3opXG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi1cdTAwM2VtZW1zejtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuQEAgLTUyMCw2ICs1MzAsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVx1MDAzZWltYWdlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcbitcdHBoeXNfYWRkcl90IHBvaXNvbjtcbiBcbiBcdHRlbXBfc3RhcnQgPSBtYXgoc3RhcnQsIGtidWYtXHUwMDNlYnVmX21pbik7XG4gXG5AQCAtNTQ2LDYgKzU1NywxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0cG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gKyBQQUdFX1NJWkU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0LyogV2UgZm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgcmFuZ2UgKi9cbiBcdFx0YnJlYWs7XG4gXHR9IHdoaWxlICgxKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uYzQ4NWUyMDVmYjYzMyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC05Niw2ICs5Niw3OCBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiBcdFx0bWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTtcbiB9XG4gXG4rLypcbisgKiBSZXR1cm4gdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGhhcmR3YXJlLXBvaXNvbmVkIG9ubGluZSBwYWdlIGluIFtzdGFydCxcbisgKiBzdGFydCArIHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi5cbisgKi9cbitzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbitcdFx0XHRcdCAgYm9vbCBmaXJzdClcbit7XG4rXHRwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYO1xuK1x0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47XG4rXG4rXHRpZiAoIXNpemUgfHwgIWF0b21pY19sb25nX3JlYWQoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSlcbitcdFx0cmV0dXJuIHBvaXNvbjtcbitcbitcdGVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCArIHNpemUgLSAxKTtcbitcdGZvciAocGZuID0gUEhZU19QRk4oc3RhcnQpOyBwZm4gXHUwMDNjPSBlbmRfcGZuOyBwZm4rKykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0aWYgKCFwYWdlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBodWdldGxiZnMgaXMgYSBiaXQgc3BlY2lhbCwgZ2l2ZW4gdGhlIHBvaXNvblxuK1x0XHRcdCAqIGluZm9ybWF0aW9uIGlzIGF0IHRoZSBmb2xpbywgbm90IGF0IHRoZSBwYWdlXG4rXHRcdFx0ICovXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBmb2xpb19lbmQ7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBObyBodWdldGxiX2xvY2s6IHRoZSBzY2FuIGlzIHJhY3kgZWl0aGVyIHdheSwgYSBmcmFtZVxuK1x0XHRcdCAqIGNhbiBiZSBwb2lzb25lZCByaWdodCBhZnRlciBpdC4gSnVzdCBkb24ndCBsZXQgYSBmb2xpb1xuK1x0XHRcdCAqIGRpc3NvbHZlZCB1bmRlciB1cyB3YWxrIHRoZSBzY2FuIGJhY2t3YXJkcy5cbitcdFx0XHQgKi9cbitcdFx0XHRmb2xpb19lbmQgPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbitcdFx0XHRmb2xpb19lbmQgPSBtYXgoZm9saW9fZW5kLCBwZm4pO1xuK1xuK1x0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xuK1x0XHRcdFx0aWYgKGZpcnN0KVxuK1x0XHRcdFx0XHRyZXR1cm4gUEZOX1BIWVMocGZuKTtcbitcdFx0XHRcdHBvaXNvbiA9IFBGTl9QSFlTKG1pbihmb2xpb19lbmQsIGVuZF9wZm4pKTtcbitcdFx0XHR9XG4rXHRcdFx0Lyogc2tpcCBhbGwgdGhlIHBmbnMgdGhhdCBiZWxvbmcgdG8gaHVnZXRsYiAqL1xuK1x0XHRcdHBmbiA9IGZvbGlvX2VuZDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIVBhZ2VIV1BvaXNvbihwYWdlKSlcbitcdFx0XHQvKiBwYWdlIGlzIGdvb2QsIGxldCdzIGdvIHRvIHRoZSBuZXh0IG9uZSAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoZmlyc3QpXG4rXHRcdFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XG4rXG4rXHRcdHBvaXNvbiA9IFBGTl9QSFlTKHBmbik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcG9pc29uO1xuK31cbitcbitwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgdHJ1ZSk7XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcbit9XG4rXG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6MzkuNzYyNDM3NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzNjE4NTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2gsIGJ1dCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJ3MgcHVycG9zZSwgdGhpcyBzZWVtcyB1bmxpa2VseSB0byB0cmlnZ2VyIGFueSByZWxldmFudCBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgdGhlIGFkZGl0aW9uIG9mIGByYW5nZV9maXJzdF9od3BvaXNvbmAgYW5kIGByYW5nZV9sYXN0X2h3cG9pc29uYCBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50cm9kdWNlZCB0byBkZXRlY3QgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHdpdGhpbiBhIGdpdmVuIHJhbmdlLiBUaGV5J3JlIGJlaW5nIGltcGxlbWVudGVkIGFuZCB0aGVuIGluY29ycG9yYXRlZCBpbnRvIGBrZXhlY19jb3JlLmNgIGFuZCBga2V4ZWNfZmlsZS5jYCB0byBwcmV2ZW50IGtleGVjIGRlc3RpbmF0aW9ucyBmcm9tIGxhbmRpbmcgb24gcHJvYmxlbWF0aWMgbWVtb3J5IHJlZ2lvbnMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIHBoeXNpY2FsIG1lbW9yeSBlcnJvcnMgbGlrZSBFQ0MgZXJyb3JzLiBUaGlzIGFsc28gZW5hYmxlcyBza2lwcGluZyBvZiB0aG9zZSByYW5nZXMgd2hlbiBsb2NhdGluZyBtZW1vcnkgaG9sZXMuXG5cbkhlcmUncyB0aGUgY2hhbmdlIGFuYWx5c2lzLCBzdGVwIGJ5IHN0ZXA6XG5cbjEuICBXZSBoYXZlIGRlY2xhcmF0aW9ucyBhbmQgc3R1YiBpbXBsZW1lbnRhdGlvbnMgaW4gYG1tLmhgLlxuMi4gIEluIGBrZXhlY19jb3JlLmNgLCB0aGUgcGF0Y2ggaXMgaW50ZWdyYXRlZCBpbnRvIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCB0byBwcmV2ZW50IHNlZ21lbnRzIGZyb20gbGFuZGluZyBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkuXG4zLiAgYGtleGVjX2ZpbGUuY2AgdXRpbGl6ZXMgdGhlIGZ1bmN0aW9ucyB0byBhZGp1c3Qgc2VhcmNoIHJhbmdlcywgcHJldmVudGluZyB0aGUgc2VsZWN0aW9uIG9mIGhhcmR3YXJlLXBvaXNvbmVkIHJlZ2lvbnMuXG40LiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZHMgdGhlIGByYW5nZV9od3BvaXNvbmAgaW1wbGVtZW50YXRpb24sIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaHdwb2lzb24gY2hlY2tzLlxuXG5Ob3csIGRvZXMgdGhpcyAqZXhwb3NlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB0aGUgS01TQU4gcXVlc3Rpb24uIExvb2tpbmcgYXQgaXQsIEkgc2VlOlxuXG4qICAgTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2UuXG4qICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGJlaW5nIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMsIHdoaWNoIGlzIGEgbWFqb3IgS01TQU4gY29uY2Vybi5cbiogICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG4qICAgVGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBib3VuZHMgY2hlY2tzIHRoYXQgbWlnaHQgYWxsb3cgdXMgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy5cblxuQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0ICphdm9pZGluZyogaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzLiBUaGlzIGlzIGEgdmVyeSBkaWZmZXJlbnQgdGhpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgc29mdHdhcmUgc2Vuc2UsIHdoaWNoIGlzIHdoYXQgS01TQU4gZGV0ZWN0cy4gVGhlc2UgaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggc29mdHdhcmUgYnVncyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBhbiBpc3N1ZSBvZiBwaHlzaWNhbCBtZW1vcnkgaW50ZWdyaXR5LCBub3Qgc29mdHdhcmUgaW5pdGlhbGl6YXRpb24uIEtBU0FOIGFuZCBMT0NLREVQIGFyZW4ndCByZWFsbHkgcmVsZXZhbnQgaGVyZSBlaXRoZXIsIGJ1dCBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBqb2IuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggZm9jdXNlcyBleGNsdXNpdmVseSBvbiBpZGVudGlmeWluZyBhbmQgYXZvaWRpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgc29mdHdhcmUgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjcsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NTc6NDguNzk4NjI1NTk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBwYWdlcyBkdXJpbmcga2V4ZWMgb3BlcmF0aW9ucyBieSBjaGVja2luZyBpZiB0aGUgdGFyZ2V0IHBoeXNpY2FsIG1lbW9yeSByYW5nZXMgY29udGFpbiBwb2lzb25lZCBwYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIG1lbW9yeSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gcGh5c2ljYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGtleGVjIHNlZ21lbnQgcGxhY2VtZW50LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHBhZ2VzIGR1cmluZyBrZXhlYyBvcGVyYXRpb25zIGJ5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlcyBjb250YWluIHBvaXNvbmVkIHBhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgbWVtb3J5IGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQga2V4ZWMgc2VnbWVudCBwbGFjZW1lbnQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[1] Phase: Succeeded StartedAt: 2026-08-07 17:58:00 +0000 UTC FinishedAt: 2026-08-07 17:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 17:58:00 +0000 UTC FinishedAt: 2026-08-07 17:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2] Phase: Succeeded StartedAt: 2026-08-07 17:58:00 +0000 UTC FinishedAt: 2026-08-07 21:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 17:58:00 +0000 UTC FinishedAt: 2026-08-07 21:42:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 17:58:00 +0000 UTC FinishedAt: 2026-08-07 17:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 17:58:00 +0000 UTC FinishedAt: 2026-08-07 17:58:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowsjjcp/series-workflowsjjcp-convert-artifact-1831890001/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 17:58:10 +0000 UTC FinishedAt: 2026-08-07 18:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 17:58:10 +0000 UTC FinishedAt: 2026-08-07 18:14:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*46dc25e8-300f-4ff1-b2c2-1818df9a7a18,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-workflowsjjcp/series-workflowsjjcp-convert-artifact-1831890001/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": "56acb05f-cb62-48f2-8b3a-8cf767ac0e92", "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-workflowsjjcp/series-workflowsjjcp-build-action-405865983/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 17:58:10 +0000 UTC FinishedAt: 2026-08-07 18:14:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*46dc25e8-300f-4ff1-b2c2-1818df9a7a18,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-workflowsjjcp/series-workflowsjjcp-convert-artifact-1831890001/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": "56acb05f-cb62-48f2-8b3a-8cf767ac0e92", "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-workflowsjjcp/series-workflowsjjcp-build-action-405865983/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 18:14:36 +0000 UTC FinishedAt: 2026-08-07 18:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 18:14:36 +0000 UTC FinishedAt: 2026-08-07 18:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 18:14:36 +0000 UTC FinishedAt: 2026-08-07 18:14:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 18:14:36 +0000 UTC FinishedAt: 2026-08-07 18:14:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowsjjcp/series-workflowsjjcp-convert-artifact-2479718436/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 18:14:46 +0000 UTC FinishedAt: 2026-08-07 18:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 18:14:46 +0000 UTC FinishedAt: 2026-08-07 18:16:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56acb05f-cb62-48f2-8b3a-8cf767ac0e92,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-workflowsjjcp/series-workflowsjjcp-build-action-405865983/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-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 18:16:48 +0000 UTC FinishedAt: 2026-08-07 18:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 18:16:48 +0000 UTC FinishedAt: 2026-08-07 18:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 18:16:48 +0000 UTC FinishedAt: 2026-08-07 18:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 18:16:48 +0000 UTC FinishedAt: 2026-08-07 18:33:35 +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:*46dc25e8-300f-4ff1-b2c2-1818df9a7a18,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-workflowsjjcp/series-workflowsjjcp-convert-artifact-2479718436/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": "927fad86-eb5a-4ce9-9de1-841683c31d96", "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-workflowsjjcp/series-workflowsjjcp-build-action-3926652592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 18:16:48 +0000 UTC FinishedAt: 2026-08-07 18:33:23 +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:*46dc25e8-300f-4ff1-b2c2-1818df9a7a18,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-workflowsjjcp/series-workflowsjjcp-convert-artifact-2479718436/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": "927fad86-eb5a-4ce9-9de1-841683c31d96", "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-workflowsjjcp/series-workflowsjjcp-build-action-3926652592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 18:33:35 +0000 UTC FinishedAt: 2026-08-07 18:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 18:33:35 +0000 UTC FinishedAt: 2026-08-07 18:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 18:33:35 +0000 UTC FinishedAt: 2026-08-07 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 18:33:35 +0000 UTC FinishedAt: 2026-08-07 18:35:23 +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:*927fad86-eb5a-4ce9-9de1-841683c31d96,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-workflowsjjcp/series-workflowsjjcp-build-action-3926652592/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-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 18:35:33 +0000 UTC FinishedAt: 2026-08-07 21:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 18:35:33 +0000 UTC FinishedAt: 2026-08-07 21:42:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_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:*56acb05f-cb62-48f2-8b3a-8cf767ac0e92,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*927fad86-eb5a-4ce9-9de1-841683c31d96,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-workflowsjjcp/series-workflowsjjcp-build-action-405865983/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-workflowsjjcp/series-workflowsjjcp-build-action-3926652592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 18:35:33 +0000 UTC FinishedAt: 2026-08-07 18:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 18:35:33 +0000 UTC FinishedAt: 2026-08-07 18:35:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_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-workflowsjjcp/series-workflowsjjcp-convert-artifact-1206450093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 18:35:33 +0000 UTC FinishedAt: 2026-08-07 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 18:35:33 +0000 UTC FinishedAt: 2026-08-07 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 18:35:33 +0000 UTC FinishedAt: 2026-08-07 18:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 18:35:43 +0000 UTC FinishedAt: 2026-08-07 21:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjjcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ea2bff00da89d7767d677bb68470130ba96f4928","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"01da0c8a-7c07-437d-8f97-9ed679ef8987","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 18:35:43 +0000 UTC FinishedAt: 2026-08-07 21:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56acb05f-cb62-48f2-8b3a-8cf767ac0e92,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*927fad86-eb5a-4ce9-9de1-841683c31d96,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-workflowsjjcp/series-workflowsjjcp-build-action-405865983/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-workflowsjjcp/series-workflowsjjcp-build-action-3926652592/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-workflowsjjcp/series-workflowsjjcp-convert-artifact-1206450093/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,}