Name: series-workflow5wrzk Phase: Succeeded StartedAt: 2026-09-09 15:17:58 +0000 UTC FinishedAt: 2026-09-09 19:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[0] Phase: Succeeded StartedAt: 2026-09-09 15:17:58 +0000 UTC FinishedAt: 2026-09-09 15:22:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 15:17:58 +0000 UTC FinishedAt: 2026-09-09 15:22:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "788136cb-be1e-4ed4-b071-541bb03a511d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_lwt_seg6_action", "bpf_update_srh_state", "input_action_end_bpf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbHd0X3NlZzZfYWN0aW9uJiMzNDssCiAgICAmIzM0O2JwZl91cGRhdGVfc3JoX3N0YXRlJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBjYXN0aW5nIG9mIG9mZnNldHMgaW50byBza2ItXHUwMDNlZGF0YSB3aXRoIHNlZzZfZ2V0X3NyaCgpIGFuZCBwc2tiX21heV9wdWxsIGNoZWNrcyB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgbGluZWFyIGhlYWRlciBzYWZlbHkuXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cbi0gTG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYG9sZF9sZW5gIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGBza2ItXHUwMDNlbGVuYCBwcmlvciB0byByZWFkaW5nLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFkZHJlc3MgYnVmZmVyIGJvdW5kcywgcG9pbnRlciByZWNvbXB1dGF0aW9uLCBhbmQgbGluZWFyIGhlYWRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBpbnRlcm5hbCBzdGF0ZSB1cGRhdGUgZnVuY3Rpb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBuZXQvY29yZS9maWx0ZXIuYy4gSXQgY2hhbmdlcyBob3cgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaXMgcmV0cmlldmVkIGFuZCB2YWxpZGF0ZWQsIGFsdGVycyBza2IgcHVsbGluZy9wb2ludGVyIHJlY2FsY3VsYXRpb25zIG9uIGRlY2Fwc3VsYXRpb24gYWN0aW9ucyAoU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNiksIGFuZCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaXMgaW52b2tlZCBhZnRlciBlbmNhcHN1bGF0aW9uIGFjdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gSVB2NiBzZWc2IHJvdXRlcyBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDJjYWZmNjU3M2QxMDk2ZmRiZGYwZGQ4N2YwOTI3OWFkNGNmMTBkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uYjAzN2Q3MGU1ZmU2NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTcsMTUgJiM0Mzs3MDE3LDE2IEBAIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbiBcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuLVx0aW50IHNyaG9mZiA9IDA7XG4mIzQzO1x0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMCkge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gTlVMTDtcbi1cdH0gZWxzZSB7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbiYjNDM7XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbiYjNDM7XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4mIzQzO1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbiYjNDM7XHRpZiAoIXNyaClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG4mIzQzO1x0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiB9XG4gXG4gQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5AQCAtNzAzMyw2ICYjNDM7NzAzNCw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIHtcbiBcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4gXHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2xkX2xlbjtcbiBcdGludCBoZHJvZmYgPSAwO1xuIFx0aW50IGVycjtcbiBcbkBAIC03MDU4LDMyICYjNDM7NzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcbiBcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLVx0XHRpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpXG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcbiYjNDM7XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4mIzQzO1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcbiBcbiBcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XG4gXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXG4tXHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxuIFx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1x0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG4gXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tXHRcdGlmICghZXJyKVxuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbiBcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XG4gXHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XHRcdG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9sZF9sZW4pXG4gXHRcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDticGZfdXBkYXRlX3NyaF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyY2FmZjY1NzNkMTA5NmZkYmRmMGRkODdmMDkyNzlhZDRjZjEwZDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjIwOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA4NTEzMTY3YTg1OGE4Li5iMDM3ZDcwZTVmZTY1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNzAxNywxNSAmIzQzOzcwMTcsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPQogCQl0aGlzX2NwdV9wdHIoJmFtcDtzZWc2X2JwZl9zcmhfc3RhdGVzKTsKLQlpbnQgc3Job2ZmID0gMDsKJiM0MzsJc3RydWN0IGlwdjZfc3JfaGRyICpzcmg7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpICZsdDsgMCkgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJc3JoX3N0YXRlLSZndDtzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzcmhvZmYpOwotCQlzcmhfc3RhdGUtJmd0O2hkcmxlbiA9IHNyaF9zdGF0ZS0mZ3Q7c3JoLSZndDtoZHJsZW4gJmx0OyZsdDsgMzsKLQkJc3JoX3N0YXRlLSZndDt2YWxpZCA9IHRydWU7Ci0JfQomIzQzOwlzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTsKJiM0MzsJYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpOwomIzQzOwlzcmhfc3RhdGUtJmd0O3NyaCA9IHNyaDsKJiM0MzsJaWYgKCFzcmgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoLSZndDtoZHJsZW4gJmx0OyZsdDsgMzsKJiM0MzsJc3JoX3N0YXRlLSZndDt2YWxpZCA9IHRydWU7CiB9CiAKIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLApAQCAtNzAzMyw2ICYjNDM7NzAzNCw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLAogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwomIzQzOwl1bnNpZ25lZCBpbnQgb2xkX2xlbjsKIAlpbnQgaGRyb2ZmID0gMDsKIAlpbnQgZXJyOwogCkBAIC03MDU4LDMyICYjNDM7NzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYiwKIAogCQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpICZsdDsgMCkKIAkJCXJldHVybiAtRUJBRE1TRzsKLQkJaWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKQomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7CiYjNDM7CQkJc3JoX3N0YXRlLSZndDtzcmggPSBOVUxMOwomIzQzOwkJCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCX0KJiM0MzsJCV9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpOwogCiAJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAotCQlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiAJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAJCXJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6CiAJCWlmIChzcmhfc3RhdGUtJmd0O3NyaCAmYW1wOyZhbXA7ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpCiAJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQlvbGRfbGVuID0gc2tiLSZndDtsZW47CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKJiM0MzsJCWlmIChza2ItJmd0O2xlbiAhPSBvbGRfbGVuKQogCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKIAogCQlyZXR1cm4gZXJyOwogCWNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOgogCQlpZiAoc3JoX3N0YXRlLSZndDtzcmggJmFtcDsmYW1wOyAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKQogCQkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwkJb2xkX2xlbiA9IHNrYi0mZ3Q7bGVuOwogCQllcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKJiM0MzsJCWlmIChza2ItJmd0O2xlbiAhPSBvbGRfbGVuKQogCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKIAogCQlyZXR1cm4gZXJyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHdlIGhhdmUgYSBkaWZmLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSAqd2hhdCogY29kZSBpcyBiZWluZyBtb2RpZmllZC4gVGhlIGRpZmYgaXMgaGl0dGluZyBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGtlcm5lbCYjMzk7cyBmaWx0ZXJpbmcgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdHdvIGZ1bmN0aW9uczogYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIEJQRi1yZWxhdGVkIHVwZGF0ZXMsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGhhbmRsaW5nIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgdHVubmVscyAoTFdUKSBjb250ZXh0LiBUaGlzIGlzIGludGVyZXN0aW5nLCBhcyBhbnkgY2hhbmdlcyBpbiB0aGlzIGFyZWEgY291bGQgaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwYXJ0aWN1bGFybHkgaW4gZW52aXJvbm1lbnRzIGxldmVyYWdpbmcgU1J2NiBvciBvdGhlciBMV1QgZmVhdHVyZXMuCgpUbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUgYW5kIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgcG9zc2libHkganVzdCBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIHBpcGVsaW5lIGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSYjMzk7cmUgb3BlcmF0aW5nIG9uLiBBcmUgdGhlcmUgYW55IG5ldyBlcnJvciBjb25kaXRpb25zIGJlaW5nIGludHJvZHVjZWQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3M/IFdoYXQga2luZCBvZiBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJpc2UgZnJvbSB0aGUgY2hhbmdlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGRlZXBlciBkaXZlIHdpbGwgYmUgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRpZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTcwMTY9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDMxLVxubmV0L2NvcmUvZmlsdGVyLmM6NzAzMjpCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzMtXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzEwMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjcxMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzEwMzpcdC5mdW5jXHRcdD0gYnBmX2x3dF9zZWc2X2FjdGlvbixcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMDQtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTA1MT1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTA1Ny1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uOlxubmV0L2NvcmUvZmlsdGVyLmM6OTA1ODpcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy05MDU5LVx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9hZGp1c3Rfc3JoOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNzAwMCB0byA3MTAwIG9mIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIHRoYXQgSSYjMzk7bSBsb29raW5nIGF0IGZpbHRlcmluZyBjb2RlLCBJJiMzOTttIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gaG93IHBhY2tldHMgYXJlIGJlaW5nIHByb2Nlc3NlZCBiYXNlZCBvbiB2YXJpb3VzIGNyaXRlcmlhLiBMaW5lcyBpbiB0aGlzIHJhbmdlIGxpa2VseSBkZWFsIHdpdGggc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhlIGZpbHRlcmluZyBwaXBlbGluZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCwgdGhlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQsIGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgZmlsdGVyaW5nIGxvZ2ljIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuIEkgc3VzcGVjdCB0aGlzIG1pZ2h0IGJlIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBCUEYgb3Igc29tZSBvdGhlciBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yaywgYnV0IEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaCBmdW5jdGlvbiBvciBibG9jayBvZiBjb2RlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMDA6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MDAxOlx0XG43MDAyOlx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xuNzAwMzpcdFx0cmV0dXJuIDA7XG43MDA0Olx0fVxuNzAwNTpcdFxuNzAwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuNzAwNzpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXG43MDA4Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG43MDA5Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG43MDEwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNzAxMTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG43MDEyOlx0XHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjcwMTM6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG43MDE0Olx0fTtcbjcwMTU6XHRcbjcwMTY6XHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzAxNzpcdHtcbjcwMTg6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG43MDE5Olx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjcwMjA6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuNzAyMTpcdFxuNzAyMjpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG43MDIzOlx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG43MDI0Olx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuNzAyNTpcdFx0aWYgKCFzcmgpXG43MDI2Olx0XHRcdHJldHVybjtcbjcwMjc6XHRcbjcwMjg6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG43MDMzOlx0XHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG43MDM0Olx0e1xuNzAzNTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMzY6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAzNzpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW47XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG43MDgxOlx0XHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuNzA4MjpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA4MzpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvbGRfbGVuKVxuNzA4NDpcdFx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDg1Olx0XG43MDg2Olx0XHRcdHJldHVybiBlcnI7XG43MDg3Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODg6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg5Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA5MDpcdFx0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbjcwOTE6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcbjcwOTI6XHRcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbjcwOTM6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbjcwOTQ6XHRcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5NTpcdFxuNzA5NjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5NzpcdFx0ZGVmYXVsdDpcbjcwOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMga2VybmVsIGNvZGUsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWE6CgoqKkRpZ2dpbmcgaW50byBlQlBGIGFuZCBTZWdtZW50IFJvdXRpbmcgd2l0aCB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGVCUEYgYW5kIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgbWFuaXB1bGF0aW9uIGluIHRoaXMgc3BlY2lmaWMga2VybmVsIGNvbnRleHQuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4gSSB3YW50IHRvIGtub3cgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgZUJQRiBmcmFtZXdvcmssIGFuZCwgY3JpdGljYWxseSwgd2hhdCBLY29uZmlnIG9wdGlvbnMsIGlmIGFueSwgYXJlIGNvbnRyb2xsaW5nIHRoZWlyIGluY2x1c2lvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBidWlsZCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGVpciBhdmFpbGFiaWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhvc2UgS2NvbmZpZyBvcHRpb25zIGlzIGNydWNpYWwgZm9yIGFueSBzb3J0IG9mIGtlcm5lbCBjdXN0b21pemF0aW9uIG9yIGZvciBwb3J0aW5nIGl0IHRvIGEgbmV3IHBsYXRmb3JtLgoKTmV4dCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSByZWxhdGlvbnNoaXBzIG5lYXIgdGhlIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCB2YXJpYWJsZSBhbmQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIE15IGd1ZXNzIGlzIHRoaXMgaXMgd2hlcmUgdGhlIFNSSCBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIG1hbmFnZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIEJQRiBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhvc2Ugc3RhdGUgdmFyaWFibGVzIC0gYW5kIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBpbmRpY2F0aW9uIG9mIGhvdyBlQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgdGhvc2UgZGVhbGluZyB3aXRoIFNSSCBtYW5pcHVsYXRpb24sIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgbmV0d29yayBmaWx0ZXJpbmcgYW5kIGZvcndhcmRpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBtb2R1bGUuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc29tZSBzdGF0ZSB0cmFuc2l0aW9uIGhhbmRsaW5nIGhlcmUsIGluIHJlc3BvbnNlIHRvIGVCUEYgYWN0aW9ucyAtIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02OTczPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzYtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3NzpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjk3OC1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDE2PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAxOC1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDE5Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDIwLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAzMj1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDM1LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzY6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzctXHR1bnNpZ25lZCBpbnQgb2xkX2xlbjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTEyPUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzExNS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MTE2Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MTE3LVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIG15IGFjdGlvbnM6CgoqKkRlbHZpbmcgaW50byB0aGUgQ29kZSYjMzk7cyBHdWFyZHJhaWxzKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBsaW5lIDY5NzAgdG8gNzE1MCwgb3IsIGlmIHRoYXQmIzM5O3Mgbm90IHRoZSByaWdodCBhcmVhLCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGdhemUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBvciwgZmFpbGluZyB0aGF0LCB0aGUgYEtjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGNvbXBpbGF0aW9uIG9yIGluY2x1c2lvbiBvZiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYWxtb3N0IGNlcnRhaW4gSSYjMzk7bGwgZmluZCBteSBhbnN3ZXJzIGluIGAjaWZkZWZgIGd1YXJkcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBhdCBwbGF5LiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIHNvbWUgZmVhdHVyZSBmbGFnIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgb3Igbm90LiBGaW5kaW5nIHRoZSBzcGVjaWZpYyBzeW1ib2wgb3IgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdGF0ZW1lbnRzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHNlY3Rpb24gaXMgYSBjYXJlZnVsbHkgY29udHJvbGxlZCBwaWVjZSwgcG9zc2libHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgbmV0d29ya2luZyBmaWx0ZXIgb3IgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIG5vdCBhbHdheXMgZGVzaXJlZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBwcmVjb25kaXRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgaXTigJlzIGV2ZW4gcHJlc2VudCBpbiB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUFY2X1NFRzZfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02ODc3LVxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY4Nzktc3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMC19XG5uZXQvY29yZS9maWx0ZXIuYzo2OTExOiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTIxPUJQRl9DQUxMXzQoYnBmX2x3dF9pbl9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSwgdm9pZCAqLCBoZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cdHN3aXRjaCAodHlwZSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNjpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjk3MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTczLUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTcwLX07XG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xubmV0L2NvcmUvZmlsdGVyLmMtNzE3Mi1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDUxPWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05MDUzLVx0c3dpdGNoIChmdW5jX2lkKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo5MDU0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA1NS1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM4OC1cdFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzg5Olx0XHR7IFwmIzM0O0NPTkZJR19JUFY2X1NFRzZfQlBGXCYjMzQ7LCB9LFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cdFx0LyogQlBGX1BST0dfVFlQRV9MSVJDX01PREUyIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTQ4PUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NDk6Q09ORklHX0lQVjZfU0VHNl9CUEY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19JUFY2X1NFRzZfQlBGIEtjb25maWcgRGVmaW5pdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgQ09ORklHX0lQVjZfU0VHNl9CUEZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBjb250cm9scyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBJUHY2IHNlZ21lbnQgcm91dGluZyB3aXRoIEJQRiBsYW5kc2NhcGUuIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKSDigJMgdXN1YWxseSwgaXQmIzM5O3Mgc29tZXdoZXJlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBvciBJUHY2LXJlbGF0ZWQgZGlyZWN0b3JpZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBmaW5kYCBvciBgZ3JlcGAgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQgbmFycm93IGRvd24gdGhlIGxvY2F0aW9uLiBPbmNlIEkgaGF2ZSB0aGUgZmlsZSwgSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSBkZWZpbml0aW9uIHZlcnkgY2FyZWZ1bGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uCgoqICAgKipUaGUgZGVwZW5kZW5jeSBjaGFpbjoqKiBXaGF0IG90aGVyIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIG9uZSB0byBiZSBhdmFpbGFibGU/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgbGlrZSBgQ09ORklHX0lQVjZgIG9yIHNvZnQgZGVwZW5kZW5jaWVzIGluZmx1ZW5jaW5nIGl0cyBpbmNsdXNpb24/IFRoZSBkZXBlbmRlbmNpZXMgd2lsbCBzaG93IG1lIHdoZXJlIHRoaXMgZmVhdHVyZSBpcyBsb2dpY2FsbHkgc2l0dWF0ZWQgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uCiogICAqKlRoZSBwcm9tcHQgc3RyaW5nOioqIFdoYXQgaXMgdGhlIGRlc2NyaXB0aXZlIHRleHQgdGhhdCB0aGUgdXNlciBzZWVzIHdoZW4gdGhleSYjMzk7cmUgY29uZmlndXJpbmcgdGhlIGtlcm5lbD8gRG9lcyB0aGlzIHRleHQgY2xlYXJseSBleHBsYWluIHRoZSBwdXJwb3NlIGFuZCBiZW5lZml0cyBvZiBlbmFibGluZyBgQ09ORklHX0lQVjZfU0VHNl9CUEZgPyBBIHdlbGwtd3JpdHRlbiBwcm9tcHQgaXMgY3J1Y2lhbCBmb3IgdXNlciB1bmRlcnN0YW5kaW5nLgoqICAgKipUaGUgaGVscCB0ZXh0OioqIFRoZSBsb25nZXIgaGVscCB0ZXh0IGlzIHdoZXJlIHRoZSByZWFsIGRldGFpbCByZXNpZGVzLiBJdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgaW4tZGVwdGggZXhwbGFuYXRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBkb2VzLCBsaWtlbHkgdG91Y2hpbmcgb24gdG9waWNzIGxpa2UgZW5hYmxpbmcgQlBGLWJhc2VkIHByb2Nlc3Npbmcgb2YgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBkYXRhLCBob3cgaXQgcmVsYXRlcyB0byB0aGUgZGF0YSBwbGFuZSwgYW5kIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3Iga2V5d29yZHMgbGlrZSAmIzM0O1NSdjYsJiMzNDsgJiMzNDtCUEYsJiMzNDsgJiMzNDtkYXRhIHBsYW5lLCYjMzQ7ICYjMzQ7cGVyZm9ybWFuY2UsJiMzNDsgYW5kIGFueSByZWxhdGVkIGluZnJhc3RydWN0dXJlIG9yIHN1YnN5c3RlbXMuIEl0IG1pZ2h0IGFsc28gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoqICAgKipBbnkgZGVmYXVsdCB2YWx1ZXM6KiogRG9lcyB0aGUgb3B0aW9uIGhhdmUgYSBkZWZhdWx0IHZhbHVlIChlLmcuLCBgeWAsIGBuYCwgYG1gKT8gSXMgaXQgZGVmYXVsdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgbW9kdWxhcj8gSWYgc28sIHRoaXMgaGVscHMgZXN0YWJsaXNoIHdoZXRoZXIgaXQmIzM5O3MgY29uc2lkZXJlZCBhIGNvcmUgcGFydCBvZiB0aGUgZmVhdHVyZSBzZXQgb3IgYW4gb3B0aW9uYWwgZW5oYW5jZW1lbnQuCiogICAqKkxvY2F0aW9uIGluIHRoZSBrZXJuZWwgdHJlZToqKiBJbiB3aGljaCBwYXJ0IG9mIHRoZSBrZXJuZWwgZG9lcyBpdCByZXNpZGU/IEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIGtlcm5lbCBtb2R1bGVzPwoqICAgKipBbnkgYXNzb2NpYXRlZCBzeW1ib2wgZGVmaW5pdGlvbnM6KiogQXJlIHRoZXJlIGFueSBtYWNyb3Mgb3Igc3ltYm9scyBkZWZpbmVkIHRoYXQgZGVwZW5kIG9uIHRoaXMgb25lIGJlaW5nIHNldD8gVGhhdCBjYW4gaGVscCBpbmZlciB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgdGhpcyBjb25maWcgb3B0aW9uIGV4cG9zZXMuCgpXaXRoIHRoaXMgaW5mb3JtYXRpb24gaW4gaGFuZCwgSSBjYW4gY29uZmlkZW50bHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGFuZCBpbnRlZ3JhdGUgaXQgaW50byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJUHY2IHNlZ21lbnQgcm91dGluZyB3aXRoIEJQRiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgY2FuIGFsc28gZW5zdXJlIHRoYXQgbXkgY29uZmlndXJhdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIHVzZSBjYXNlIGFuZCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfU0VHNl9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0zMDA9Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCBwbGF5LCBteSBpbnN0aW5jdHMgdGVsbCBtZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDMxMiBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlcyB0byBvdGhlcnMsIHdoYXQgb3RoZXIgc2V0dGluZ3MgZW5hYmxlIG9yIGRpc2FibGUgaXQsIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGdvdmVybnMgaXRzIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGFuZCBtYWtpbmcgaW5mb3JtZWQgZGVjaXNpb25zLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIHRoZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4gMzEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzExOlx0XG4gMzEyOlx0Y29uZmlnIElQVjZfU0VHNl9CUEZcbiAzMTM6XHRcdGRlZl9ib29sIHlcbiAzMTQ6XHRcdGRlcGVuZHMgb24gSVBWNl9TRUc2X0xXVFVOTkVMXG4gMzE1Olx0XHRkZXBlbmRzIG9uIElQVjYgPSB5XG4gMzE2Olx0XG4gMzE3Olx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG4gMzE4Olx0XHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuIDMxOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzIwOlx0XHRzZWxlY3QgTFdUVU5ORUxcbiAzMjE6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAzMjI6XHRcdGhlbHBcbiAzMjM6XHRcdCAgU3VwcG9ydCBmb3IgUkZDNjU1NCBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDMyNDpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cbiAzMjU6XHRcbiAzMjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAzMjc6XHRcbiAzMjg6XHRjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxuIDMyOTpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNvbmZpZyBJUFY2X1NFRzZfQlBGYCBvcHRpb24gYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0IGhhcyBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCByZWxpZXMgb24gYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kLCBvZiBjb3Vyc2UsIElQdjYgaXRzZWxmIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGBJUFY2ID0geWAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UsIGJlY2F1c2Ugc2VnbWVudCByb3V0aW5nIGlzIGFuIElQdjYgZXh0ZW5zaW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgYElQVjZfU0VHNl9MV1RVTk5FTGAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGp1bXAgaW50byB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IGl0cyBkZWZpbml0aW9uIHRoZXJlLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCB3aGF0IGV4YWN0bHkgaXQgZW5hYmxlcywgYW5kIGhvcGVmdWxseSBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHdob2xlIHNlZ21lbnQgcm91dGluZyBpbXBsZW1lbnRhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4gMzAwOlx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4gMzAxOlx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbiAzMDI6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMwMzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDMwNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gMzA1Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDMwNjpcdFx0aGVscFxuIDMwNzpcdFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cbiAzMDg6XHRcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxuIDMwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRUc2IEJQRiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGZpcnN0IHRoaW5nLCBJIHNlZSB0aGF0IGBJUFY2X1NFRzZfQlBGYCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQgYElQVjZgIGFyZSBzZXQgdG8gJiMzOTt5JiMzOTsuIE1ha2VzIHNlbnNlLiBBbmQsIG9mIGNvdXJzZSwgQlBGIG5lZWRzIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCBhcyB3ZWxsLiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgZm9jdXNpbmcgb24gdGhlIHBhdGNoIGl0c2VsZiwgSSBjYW4gc2VlIHRoZXkmIzM5O3ZlIHVwZGF0ZWQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCB0byB1c2UgYHNlZzZfZ2V0X3NyaGAgYW5kIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGUgcmV0cmlldmFsIG9mIHRoZSBTUkggaW5mb3JtYXRpb24uIFRoZSBwcmV2aW91cyBtZXRob2Qgb2Ygc2VhcmNoaW5nIGZvciB0aGUgU1JIIHVzaW5nIGBpcHY2X2ZpbmRfaGRyYCBzZWVtcyB0byBoYXZlIGJlZW4gcmVtb3ZlZCwgd2hpY2ggcHJvYmFibHkgbWVhbnMgdGhleSBhcmUgb3B0aW1pemluZyBpdC4gVGhleSBhbHNvIGFkZGVkIGEgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIFNSSC4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbi4gVGhpcyBpcyBhIEJQRiBoZWxwZXIgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zLiBJJiMzOTttIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmZXJlbnQgYGNhc2VgIHN0YXRlbWVudHMgaGVyZSwgc3BlY2lmaWNhbGx5IHRoZSBhZGp1c3RtZW50cyBiZWluZyBtYWRlIHRvIHRoZSBgc2tiYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgU0VHNiBhY3Rpb25zLiBJdCBzZWVtcyBsaWtlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBhaW1lZCBhdCBlbnN1cmluZyB0aGUgU1JIIHN0YXRlIGlzIGNvcnJlY3RseSB1cGRhdGVkIGFmdGVyIHBvdGVudGlhbGx5IHB1bGxpbmcgaGVhZGVycyBvciBlbmNhcHN1bGF0aW5nIHBhY2tldHMuIFRoZSBhZGRpdGlvbiBvZiBgcHNrYl9tYXlfcHVsbGAgaW5zdGVhZCBvZiBgcHNrYl9wdWxsYCBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgYW5kIG1ha2VzIHN1cmUgdGhlIHB1bGwgb3BlcmF0aW9uIGRvZXNuJiMzOTt0IGNhdXNlIGEgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb24uIEl0IG1ha2VzIHN1cmUgdGhhdCBwdWxsaW5nIGEgaGVhZGVyIGRvZXNuJiMzOTt0IGdvIGJleW9uZCB0aGUgcGFja2V0JiMzOTtzIGN1cnJlbnQgZGF0YSBib3VuZGFyaWVzLiBUaGVuLCB0aGUgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBnZXRzIGNhbGxlZCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlIHN0YXRlIGlzIGNvcnJlY3QuCgpJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0cyB3aGVyZSBgbHd0X3NlZzZsb2NhbGAgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuIExldCBtZSBzZWFyY2ggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBjb2RlYmFzZSBmb3IgdGhlIGBzZWc2X2xvY2FsX2AgcHJlZml4IG9yIHRoYXQgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgdHlwZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgY2hhbmdlcyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBsb2NhbCBzZWdtZW50IHJvdXRpbmcgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM1LSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM3LSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MjU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBsd3RfeG1pdCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjYtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6Mjc6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGx3dF9zZWc2bG9jYWwsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI4LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXG4tLVxua2VybmVsL2JwZi9idGYuYz05MDc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdHlwZV90b19rZnVuY19ob29rKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXG4tLVxua2VybmVsL2JwZi9idGYuYy05MTE0LVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxua2VybmVsL2JwZi9idGYuYzo5MTE1Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG5rZXJuZWwvYnBmL2J0Zi5jLTkxMTYtXHRcdHJldHVybiBCVEZfS0ZVTkNfSE9PS19MV1Q7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg0Mz1zdGF0aWMgYm9vbCBpc19uZXRfYWRtaW5fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1MS1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI4NTI6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTMtXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfU0tCOlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE5PXN0YXRpYyBib29sIG1heV9hY2Nlc3NfZGlyZWN0X3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MjgtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX09VVDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODI5Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgzMC1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4ODE9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5Mi1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5NC1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MTU9c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM2LVx0ZmQgPSBubGFfZ2V0X3UzMih0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNzpcdHAgPSBicGZfcHJvZ19nZXRfdHlwZShmZCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM4LVx0aWYgKElTX0VSUihwKSkge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMS1cdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXHQ9IFwmIzM0O2Nncm91cF9zb2NrX2FkZHJcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjIyMjpcdFtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxdXHRcdD0gXCYjMzQ7bHd0X3NlZzZsb2NhbFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIzLVx0W0JQRl9QUk9HX1RZUEVfTElSQ19NT0RFMl1cdFx0PSBcJiMzNDtsaXJjX21vZGUyXCYjMzQ7LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NzE1Nz1zdGF0aWMgc3RydWN0IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzAtXHR7IEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgICAgICAgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo3MTcxOlx0eyBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3Mi1cdHsgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgICAgICAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MTAzPXN0YXRpYyBpbnQgcHJvYmVfcHJvZ19sb2FkKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTc4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MTc5Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xODAtXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jPTIyNT12b2lkIHRlc3RfdmVyaWZfc2NhbGVfc2VnNl9sb29wKClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYzoyMjc6XHRzY2FsZV90ZXN0KFwmIzM0O3Rlc3Rfc2VnNl9sb29wLmJwZi5vXCYjMzQ7LCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGZhbHNlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyOC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jPTIwPXN0YXRpYyBzdHJ1Y3Qgc2VjX25hbWVfdGVzdCB0ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00Mi1cdHtcJiMzNDtsd3RfeG1pdFwmIzM0OywgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo0MzpcdHtcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAwfSwgey1FSU5WQUwsIDB9IH0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDQtXHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTIwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBQcm9ncmFtIFR5cGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW0gdHlwZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG9uZSB1c2VkIHNwZWNpZmljYWxseSBmb3IgU1J2NiAoc2VnNikgbG9jYWwgYWN0aW9uIHByb2Nlc3NpbmcsIEkgcmVtZW1iZXIgaXQmIzM5O3MgcmVsYXRlZCB0byB0aG9zZSBsaWdodHdlaWdodCB0dW5uZWxzLCB1c2luZyB0aGluZ3MgbGlrZSBgU0VHNl9MT0NBTF9BQ1RJT05fQl9QRmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBJIGNhbiB0ZXN0IHRoaXMgdHlwZSBvZiBwcm9ncmFtLgoKSG1tLCBJIGtub3cgYGJwZl9wcm9nX3Rlc3RfcnVuYCBhbmQgaXRzIHJlbGF0ZWQgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfUlVOYCwgYXJlIHVzZWQgZm9yIGV4ZWN1dGluZyBMV1QgcHJvZ3JhbXMgYW5kIHBlcmZvcm1pbmcgcm91dGUgbG9va3Vwcy4gSXQgbG9va3MgbGlrZSBpdCBjYW4gYmUgcnVuIHRocm91Z2ggbmV0bGluaywgaXAgcm91dGUgY29tbWFuZHMsIHBhY2tldCByZWNlaXZlLCBhbmQgdGhlIEJQRiB0ZXN0IHJ1biBmZWF0dXJlIGl0c2VsZi4KCk15IG1haW4gcXVlc3Rpb24gbm93IGlzOiAqY2FuKiBgQlBGX1BST0dfVEVTVF9SVU5gIGFjdHVhbGx5IGJlIHVzZWQgdG8gdGVzdCBhIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW0/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gdmVyaWZ5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfcHJvZ190ZXN0X3J1bmAgLSBJJiMzOTtsbCBjaGVjayBgbmV0L2JwZi90ZXN0X3J1bi5jYCBvciB3aGVyZXZlciB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcHJvZ3JhbSB0eXBlcyB0byBzZWUgaWYgaXQmIzM5O3MgY29tcGF0aWJsZSB3aXRoIHRoaXMgU1J2NiBsb2NhbCBhY3Rpb24gQlBGIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gQlBGIFRlc3QgRXhlY3V0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHRlc3QgZXhlY3V0aW9uIHByb2NlZHVyZXMgcmVsYXRlZCB0byBCUEYuIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHdvdWxkIHRoZSByZWxldmFudCBmaWxlcyBiZT8gIExpa2VseSBjYW5kaWRhdGVzIGp1bXAgdG8gbWluZDogYHRlc3RfcnVuX3NrYmAsIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsdXJraW5nIHdpdGhpbiB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkuICBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhwbG9yaW5nIHRoYXQgYG5ldC9icGYvYCBwYXRoLiBUaGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRlc3RzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0JiMzOTtzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2R1bW15X3N0cnVjdF9vcHMuYyYjMzQ7LAogICAgJiMzNDt0ZXN0X3J1bi5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBUZXN0aW5nKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9icGYvdGVzdF9ydW4uY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIEJQRiB0ZXN0IGV4ZWN1dGlvbiBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRlc3QgZnJhbWV3b3JrIGlzIHNldCB1cCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBhbmQgcnVuLCBhbmQgd2hhdCBraW5kIG9mIHZlcmlmaWNhdGlvbiBpcyBkb25lIG9uIHRoZSByZXN1bHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgZmlsZSBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzIGxpa2UgYGJwZl9wcm9nX2xvYWRgLCBgYnBmX2F0dGFjaGAsIGFuZCBhbnkgY2FsbHMgcmVsYXRlZCB0byByZXN1bHQgY29tcGFyaXNvbiBvciBsb2dnaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUg4oCTIHRoZSB0ZXN0IHNldHVwLCB0aGUgcHJvZ3JhbSBleGVjdXRpb24sIGFuZCB0aGUgdmFsaWRhdGlvbiBzdGVwcy4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFueSBjbGV2ZXJuZXNzIGhlcmUsIGFueSBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCBvciBpbXByb3ZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0xXVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmM9MTAzNT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tiKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY1LVx0XHRicmVhaztcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDY2Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9JTjpcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDY3Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTA2ODpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY5LVx0XHRpc19sd3QgPSB0cnVlO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMDg3LVx0XHRpZiAoY3R4LVx1MDAzZWRhdGFfZW5kKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTA4ODpcdFx0XHQvKiBOb24tbGluZWFyIExXVCB0ZXN0X3J1biBpcyB1bnN1cHBvcnRlZCBmb3Igbm93LiAqL1xubmV0L2JwZi90ZXN0X3J1bi5jLTEwODktXHRcdFx0aWYgKGlzX2x3dCkge1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMjEyLVxubmV0L2JwZi90ZXN0X3J1bi5jOjEyMTM6XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQpIHtcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjE0LVx0XHRpZiAoIWlwdjZfbW9kX2VuYWJsZWQoKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBMV1RfU0VHNkxPQ0FMIEV4ZWN1dGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7d2hlcmUgKmV4YWN0bHkqIGRvZXMgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgZ2V0IGl0cyBob29rcyBpbiB0aGUga2VybmVsPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGVjdXRpb24gcGF0aCBhdCBhIGdyYW51bGFyIGxldmVsLiBJIGNhbiYjMzk7dCBqdXN0IGJlIHNhdGlzZmllZCB3aXRoIGEgZ2VuZXJhbCBkZXNjcmlwdGlvbjsgSSB3YW50IHRoZSBzcGVjaWZpYyBjYWxsIHN0YWNrcywgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBwcmVjaXNlIGNvbnRleHRzIGluIHdoaWNoIHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgaXMgZGVzaWduZWQgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgZHVyaW5nIHRoZSBjb2RlIGRldmVsb3BtZW50IGZvciBtZSB0byBvcHRpbWl6ZSBteSBvd24gY29kZSBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0X3NlZzZsb2NhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q9MTg9ZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBmb290bm90ZXMuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MztcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxMzY6fCBgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGBgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBsd3Rfc2VnNmxvY2FsYGAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0Mztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI2LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNTA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzo5MDUxOmx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTIte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNTcyPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3htaXRfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3Njpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc3Olx0LmdldF9mdW5jX3Byb3RvXHRcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzgtXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGx3dF9zZWc2bG9jYWxfcHJvZ19vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4My19O1xuLS1cbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdD0yNz1QUk9HIENPTU1BTkRTXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0LTQ4LXwgICAgICoqY2dyb3VwL3NvY2sqKiB8ICoqY2dyb3VwL2RldioqIHwgKipsd3RfaW4qKiB8ICoqbHd0X291dCoqIHwgKipsd3RfeG1pdCoqIHxcbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdDo0OTp8ICAgICAqKmx3dF9zZWc2bG9jYWwqKiB8ICoqc29ja29wcyoqIHwgKipza19za2IqKiB8ICoqc2tfbXNnKiogfCAqKmxpcmNfbW9kZTIqKiB8XG50b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QtNTAtfCAgICAgKipjZ3JvdXAvYmluZDQqKiB8ICoqY2dyb3VwL2JpbmQ2KiogfCAqKmNncm91cC9wb3N0X2JpbmQ0KiogfCAqKmNncm91cC9wb3N0X2JpbmQ2KiogfFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sPTI1Nj1fYnBmdG9vbCgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wtNDkzLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dyb3VwL2RldiBsd3RfaW4gbHd0X291dCBsd3RfeG1pdCBcXFxudG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2w6NDk0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHd0X3NlZzZsb2NhbCBzb2Nrb3BzIHNrX3NrYiBza19tc2cgbGlyY19tb2RlMiBcXFxudG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wtNDk1LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dyb3VwL2JpbmQ0IGNncm91cC9iaW5kNiBcXFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz0yNTQyPXN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTI1NzYtXHRcdFwmIzM0OyAgICAgICAgICAgICAgICAgY2dyb3VwL3NvY2sgfCBjZ3JvdXAvZGV2IHwgbHd0X2luIHwgbHd0X291dCB8IGx3dF94bWl0IHxcXG5cJiMzNDtcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzoyNTc3Olx0XHRcJiMzNDsgICAgICAgICAgICAgICAgIGx3dF9zZWc2bG9jYWwgfCBzb2Nrb3BzIHwgc2tfc2tiIHwgc2tfbXNnIHwgbGlyY19tb2RlMiB8XFxuXCYjMzQ7XG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMjU3OC1cdFx0XCYjMzQ7ICAgICAgICAgICAgICAgICBza19yZXVzZXBvcnQgfCBmbG93X2Rpc3NlY3RvciB8IGNncm91cC9zeXNjdGwgfFxcblwmIzM0O1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMS1cdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXHQ9IFwmIzM0O2Nncm91cF9zb2NrX2FkZHJcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjIyMjpcdFtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxdXHRcdD0gXCYjMzQ7bHd0X3NlZzZsb2NhbFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIzLVx0W0JQRl9QUk9HX1RZUEVfTElSQ19NT0RFMl1cdFx0PSBcJiMzNDtsaXJjX21vZGUyXCYjMzQ7LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTAxMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfc2VjX2RlZiBzZWN0aW9uX2RlZnNbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTk0LVx0U0VDX0RFRihcJiMzNDtsd3RfeG1pdFwmIzM0OyxcdFx0TFdUX1hNSVQsIDAsIFNFQ19OT05FKSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTAxOTU6XHRTRUNfREVGKFwmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssXHRMV1RfU0VHNkxPQ0FMLCAwLCBTRUNfTk9ORSksXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTk2LVx0U0VDX0RFRihcJiMzNDtzb2Nrb3BzXCYjMzQ7LFx0XHRTT0NLX09QUywgQlBGX0NHUk9VUF9TT0NLX09QUywgU0VDX0FUVEFDSEFCTEVfT1BUKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmMtMzItI2RlZmluZSBORVROU19CQVNFIFwmIzM0O2x3dC1zZWc2bG9jYWwtXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM6MzM6I2RlZmluZSBCUEZfRklMRSBcJiMzNDt0ZXN0X2x3dF9zZWc2bG9jYWwuYnBmLm9cJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2x3dF9zZWc2bG9jYWwuYy0zNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM9NDM9c3RhdGljIGludCBzZXR1cCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2x3dF9zZWc2bG9jYWwuYy0xMTMtI2RlZmluZSBDTElFTlRfUE9SVCAyMTIxXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM6MTE0OnZvaWQgdGVzdF9sd3Rfc2VnNmxvY2FsKHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmMtMTE1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVx0e1wmIzM0O2x3dF94bWl0XCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlx0e1wmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cdHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZWc2X2xvb3AuYz0xODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYWRkX3RsdihzdHJ1Y3QgX19za19idWZmICpza2IsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmMtMjI2LS8vIGFuZCBhcHBseSBFbmQuWCBhY3Rpb24gdG8gZmM0Mjo6MVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmM6MjI3OlNFQyhcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmMtMjI4LWludCBfX2FkZF9lZ3JfeChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdpdGggdGhhdCBgc2VnNl9sb2NhbC5jYCBtb2R1bGUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEJQRjoKCioqRGl2aW5nIGludG8gU0VHNiBhbmQgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBCUEYgcHJvZ3JhbSB0eXBlIGlzIGF0dGFjaGVkIGFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgbG9jYWwgcG9saWNpZXMuIE15IHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMgd2l0aCB0aGlzIGxldmVsIG9mIGtlcm5lbCBpbnRlcmFjdGlvbiwgaXMgdGhlIHNvdXJjZSBjb2RlOiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZGlnIGluIHRvIGZpbmQgdGhlIGhvb2tzIGFuZCBleGVjdXRpb24gcG9pbnRzLiBJdCYjMzk7cyBhIGtleSBmaWxlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBTUnY2IGxvY2FsIHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCBpbnZvbHZlIG9yIHJlbGF0ZSB0byBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYC4gVGltZSB0byByb2xsIHVwIHRoZSBzbGVldmVzIGFuZCBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MzA9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDQ3LVx0ICogc3RhdGVtZW50LiBJdCBpcyBhbHNvIGFjY2Vzc2VkIGJ5IHRoZSBicGZfbHd0X3NlZzZfKiBoZWxwZXJzIHZpYVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NDg6XHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDktXHQgKi9cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Ny1cdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4Olx0cmV0ID0gYnBmX3Byb2dfcnVuX3NhdmVfY2Ioc2x3dC1cdTAwM2VicGYucHJvZywgc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDU5LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTkyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHNlZzZfbG9jYWwuYzogVGhlIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgUHV6emxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIHRoZSBleGl0IHBvaW50IGFmdGVyIHRoZSBCUEYgcHJvY2Vzc2luZyBvZiBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgbG9jYWxseS4KClNvLCBsZXQmIzM5O3MgcmVmcmVzaDogYW4gSVB2NiBwYWNrZXQgd2l0aCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgY29tZXMgaW4uIEl0JiMzOTtzIGJlZW4gcHJvY2Vzc2VkIGJ5IGEgcHJlY2VkaW5nIEJQRiBwcm9ncmFtIChsaWtlbHkgaW4gdGhlIGlucHV0IHBhdGggc29tZXdoZXJlLCB0aG91Z2ggSSYjMzk7bGwgaGF2ZSB0byB0cmFjZSB0aGF0IGFnYWluKSwgYW5kIG5vdyB3ZSYjMzk7cmUgaGVyZS4gYGlucHV0X2FjdGlvbl9lbmRfYnBmYCAqc2hvdWxkKiBiZSB0aGUgZW5kIG9mIHRoYXQgbG9jYWwgcHJvY2Vzc2luZy4gTXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcgdG8gY2xlYW4gdXAgYW55IHN0YXRlLCBkZXRlcm1pbmUgd2hlcmUgdG8gZm9yd2FyZCB0aGUgcGFja2V0IG5leHQgKGxpa2VseSBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiB0aGUgQlBGLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0pLgoKSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0byB0aGUgc2tiIChzb2NrZXQgYnVmZmVyKSBhbmQgdGhlIGZsb3cgbWV0YWRhdGEuIERvZXMgaXQgbW9kaWZ5IGFueSBmaWVsZHMgd2l0aGluIHRoZSBza2I/IElzIGl0IHNldHRpbmcgdXAgdGhlIG5leHQgaG9wPyBEb2VzIGl0IGNhbGwgaW50byBzb21lIG90aGVyIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gZm9yd2FyZGluZywgb3IgbWF5YmUgYSByb3V0aW5nIGxvb2t1cD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyB0byBgc2tiLSZndDtkZXZgLCBgc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAsIGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBTUkggaXRzZWxmLCBhbmQgY3JpdGljYWxseSwgaG93IHRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBhbG9uZy4gSWYgaXQmIzM5O3MgQlBGIGJhc2VkLCB0aGVuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG91dGNvbWUgb2YgdGhhdCBCUEYgcHJvY2Vzc2luZy4gV2hhdCYjMzk7cyBwYXNzZWQgdG8gdGhlIEJQRiBwcm9ncmFtLCB3aGF0JiMzOTtzIHJldHVybmVkLCBhbmQgd2hhdCYjMzk7cyBkb25lIHdpdGggdGhhdCByZXN1bHQuIERvZXMgaXQgZGVjaWRlIHRoZSBmb3J3YXJkaW5nIG9yIGRvZXMgdGhpcyBjYWxsIHRoZSBmb3J3YXJkaW5nIHBhdGggd2l0aCB0aGF0IHJlc3VsdD8KCkkgYWxzbyBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcuIERvZXMgaXQgaGFuZGxlIEJQRiBlcnJvcnMgZ3JhY2VmdWxseT8gV2hhdCBoYXBwZW5zIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIHRoZSBTUkggaXRzZWxmPyBJcyBpdCBkcm9wcGVkLCByZXJvdXRlZCwgb3IgbG9nZ2VkPyBJIGV4cGVjdCBlcnJvciBjb2RlcyB0byBiZSBoYW5kbGVkIGVsZWdhbnRseS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFNSdjYgc3RhY2suIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZSwgaW50ZXJmYWNlIHNlbGVjdGlvbiwgYW5kIG1heWJlIGV2ZW4gc29tZSBhY2NvdW50aW5nIG9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGF0IHRoaXMgc3RhZ2UuCgpVbHRpbWF0ZWx5LCBJIGV4cGVjdCB0byBzZWUgYSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHNlcXVlbmNlIHRoYXQgZW5zdXJlcyB0aGF0IHRyYWZmaWMgYXJyaXZlcyB3aGVyZSBpdCBuZWVkcyB0byBiZSB3aXRoIGFsbCB0aGUgU1J2NiBtYWdpYyBpbnRhY3QgYW5kIHRoYXQgdGhlIHBhY2tldCBpcyB0aGVuIGZvcndhcmRlZCBvciBwcm9jZXNzZWQgbG9jYWxseS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBteSBhc3N1bXB0aW9ucyBob2xkIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTQzMTpcdFx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuMTQzMjpcdHtcbjE0MzM6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZTtcbjE0MzQ6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuMTQzNTpcdFx0aW50IHJldDtcbjE0MzY6XHRcbjE0Mzc6XHRcdHNyaCA9IGdldF9hbmRfdmFsaWRhdGVfc3JoKHNrYik7XG4xNDM4Olx0XHRpZiAoIXNyaCkge1xuMTQzOTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE0NDA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDQxOlx0XHR9XG4xNDQyOlx0XHRhZHZhbmNlX25leHRzZWcoc3JoLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKTtcbjE0NDM6XHRcbjE0NDQ6XHRcdC8qIFRoZSBhY2Nlc3MgdG8gdGhlIHBlci1DUFUgYnVmZmVyIHNyaF9zdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcnVubmluZ1xuMTQ0NTpcdFx0ICogYWx3YXlzIGluIHNvZnRpcnEgY29udGV4dCAod2l0aCBkaXNhYmxlZCBCSCkuIE9uIFBSRUVNUFRfUlQgdGhlXG4xNDQ2Olx0XHQgKiByZXF1aXJlZCBsb2NraW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgbG9jYWxfbG9ja19uZXN0ZWRfYmgoKVxuMTQ0NzpcdFx0ICogc3RhdGVtZW50LiBJdCBpcyBhbHNvIGFjY2Vzc2VkIGJ5IHRoZSBicGZfbHd0X3NlZzZfKiBoZWxwZXJzIHZpYVxuMTQ0ODpcdFx0ICogYnBmX3Byb2dfcnVuX3NhdmVfY2IoKS5cbjE0NDk6XHRcdCAqL1xuMTQ1MDpcdFx0bG9jYWxfbG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0NTE6XHRcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjE0NTI6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG4xNDUzOlx0XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbjE0NTQ6XHRcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4xNDU1Olx0XG4xNDU2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNDU3Olx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4xNDU4Olx0XHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVx1MDAzZWJwZi5wcm9nLCBza2IpO1xuMTQ1OTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNDYwOlx0XG4xNDYxOlx0XHRzd2l0Y2ggKHJldCkge1xuMTQ2MjpcdFx0Y2FzZSBCUEZfT0s6XG4xNDYzOlx0XHRjYXNlIEJQRl9SRURJUkVDVDpcbjE0NjQ6XHRcdFx0YnJlYWs7XG4xNDY1Olx0XHRjYXNlIEJQRl9EUk9QOlxuMTQ2NjpcdFx0XHRnb3RvIGRyb3A7XG4xNDY3Olx0XHRkZWZhdWx0OlxuMTQ2ODpcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7YnBmLXNlZzZsb2NhbDogSWxsZWdhbCByZXR1cm4gdmFsdWUgJXVcXG5cJiMzNDssIHJldCk7XG4xNDY5Olx0XHRcdGdvdG8gZHJvcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGEgQlBGL0lQdjYgU2VnNiBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBmcmFua2x5LCBpdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyBhbmQgQlBGIHN1YnN5c3RlbSBzdHVmZi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBob3cgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpcyBjYWxsZWQuIEl0JiMzOTtzIHVzZWQgaW4gdGhlIElQdjYgc2VnNiBsb2NhbCBhY3Rpb24gaGFuZGxlciwgc3BlY2lmaWNhbGx5IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQlBGYC4gVGhpcyBtZWFucyBJUHY2IHJvdXRlcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZXNlIHNlZzZsb2NhbCBhY3Rpb25zIHVzaW5nIHRoZSBzdGFuZGFyZCBgcnRuZXRsaW5rYCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgUlRNX05FV1JPVVRFYCB3aXRoIGBSVEFfRU5DQVBgIHNldCBmb3IgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CUEZgLiBXaGVuIElQdjYgcGFja2V0cyBhcnJpdmUsIGZvciBleGFtcGxlIGZyb20gYSBgdHVuL3RhcGAsIGB2ZXRoYCwgb3IgbG9vcGJhY2sgaW50ZXJmYWNlLCBgc2VnNl9sb2NhbF9pbnB1dGAgZXhlY3V0ZXMgYGlucHV0X2FjdGlvbl9lbmRfYnBmYC4gVGhpcyB0aGVuIHJ1bnMgdGhlIEJQRiBwcm9ncmFtLCB3aGljaCBpdHNlbGYgY2FsbHMgdGhlIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gYHN5emthbGxlcmAgZXZlbiByZWFjaCB0aGlzPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogSXQmIzM5O3MgZGVmaW5pdGVseSBwb3NzaWJsZSB0byBsb2FkIEJQRiBwcm9ncmFtcyAoYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGApLiBJdCBjYW4gYWxzbyBzZXQgdXAgSVB2NiByb3V0ZXMgd2l0aCBzZWc2IGVuY2Fwc3VsYXRpb24gYW5kIGxvY2FsIGFjdGlvbnMgdmlhIE5ldGxpbmsgKGBSVE1fTkVXUk9VVEVgKS4gTW9yZW92ZXIsIGBzeXprYWxsZXJgIGNhbiBzZW5kIElQdjYgcGFja2V0cyB3aXRoIFNSSCB2aWEgYHR1bi90YXBgIG9yIHJhdyBzb2NrZXRzLiBUaGUgbW9kaWZpZWQgY29kZSBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgdGhlIHN0YXRpYyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCB0aGUgQlBGIGhlbHBlciBgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uYCBpbiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAuCgpJIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0IHdhcyBhY3R1YWxseSBjaGFuZ2VkIGluIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYC4gSW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgdGhlIG9sZCBjb2RlIGNoZWNrZWQgZm9yIHRoZSBTUkggaGVhZGVyLCB3aGVyZWFzIHRoZSB1cGRhdGVkIGNvZGUgY2FsbHMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBhbmQgY29tcHV0ZXMgdGhlIGRhdGEgcG9pbnRlcnMgdXNpbmcgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoZXJlJiMzOTtzIG5vdyBhbiBlYXJseSByZXR1cm4gaWYgYHNyaGAgaXMgTlVMTCBhbmQgYHNyaF9zdGF0ZS0mZ3Q7dmFsaWRgIGlzbiYjMzk7dCByZXNldCB0byBgZmFsc2VgLiBBbHNvLCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYCBpcyBjYWxsZWQgZXZlbiBpZiBgc3JoYCBpcyBOVUxMLiBJIHNob3VsZCBhbHNvIG5vdGUgdGhhdCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgdXNlcyBgcHNrYl9tYXlfcHVsbGAgaW5zdGVhZCBvZiBgcHNrYl9wdWxsYCB0byBoYW5kbGUgdGhlIElQdjYgaGVhZGVyIHNpemUgYmVmb3JlIHB1bGxpbmcgdGhlIHBhY2tldC4gSW4gYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNmAgYW5kIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVBgLCB0aGUgY29kZSBub3cgY2hlY2tzIGlmIHRoZSBsZW5ndGggb2YgYHNrYmAgaXMgZGlmZmVyZW50IGJlZm9yZSBjYWxsaW5nIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAuCgpDb25zaWRlcmluZyB0aGVzZSBtb2RpZmljYXRpb25zLCB0aGUgcGFja2V0IHBhcnNpbmcsIHNrYiBwdWxsL3BvaW50ZXIgcmVjYWxjdWxhdGlvbnMsIHN0YXRlIHVwZGF0ZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIGNvbmRpdGlvbnMgZm9yIGludm9raW5nIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYXJlIGFsbCBpbiBwbGF5LiBJdCYjMzk7cyBub3cgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRoZXNlIG5ldyBjaGFuZ2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCBhbmQgdG90YWxseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCldlIHNob3VsZCBjaGVjayBzb21lIHJlcXVpcmVkIGNvbmZpZ3M6IGBJUFY2YCwgYElQVjZfU0VHNl9MV1RVTk5FTGAgKHdoaWNoIGluZGlyZWN0bHkgZW5hYmxlcyBgSVBWNl9TRUc2X0JQRmApLCBgQlBGX1NZU0NBTExgLCBhbmQgYE5FVGAuIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGRlcGVuZHMgb24gYElQVjZgLCBgTFdUVU5ORUxgLCBgRFNUX0NBQ0hFYCwgYW5kIGBJUFY2X01VTFRJUExFX1RBQkxFU2AuIGBJUFY2X1NFRzZfQlBGYCBpcyBhIGRlZmF1bHQgYm9vbCBpZiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyBzZXQsIGFuZCBpdCBhbHNvIHJlcXVpcmVzIGBJUFY2YCBiZSBzZXQgdG8gJiMzNDt5JiMzNDsuIEFuZCwgb2YgY291cnNlLCBgQlBGX1NZU0NBTExgIHdpbGwgbmVlZCB0byBiZSBlbmFibGVkIGZvciBzeXNjYWxsIGFjY2Vzcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIHNldCBpbiB0aGUgS2NvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzY2CgkJCQkJCQlvdXRwdXQ6IDI0OAoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UsIHN0YXJ0aW5nIHdpdGggYEZvY3VzU3ltYm9sc2AuIFRoZSBjb3JlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcHBlYXIgdG8gYmUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCB3aGljaCBJIGtub3cgaXMgYSBCUEYgaGVscGVyLCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgYSBzdGF0aWMgZnVuY3Rpb24gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlzIGlubGluZWQgb3IgcmVtYWlucyBhIHZpc2libGUgc3ltYm9sLiAgSSYjMzk7bGwgYWxzbyBrZWVwIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgaW4gbWluZCwgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgYW5kIHJlbGF0ZWQgZnVuY3Rpb24uCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgKmV4YWN0KiBuYW1lcyBvZiB0aGVzZSBmb2N1cyBzeW1ib2xzLCBlc3BlY2lhbGx5IGBicGZfbHd0X3NlZzZfYWN0aW9uYCDigJMgaXQgY291bGQgYmUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgX19fYnBmX2x3dF9zZWc2X2FjdGlvbmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJJiMzOTtsbCByZWZlciB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIGZvciB0aGlzLCBhbmQgY29uZmlybSB0aGF0IGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAsIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgYW5kIGBzZWc2X2xvY2FsX2lucHV0YCBhbHNvIHdhcnJhbnQgc2NydXRpbnkuCgpOb3csIEkmIzM5O20gY3Jvc3MtcmVmZXJlbmNpbmcgdGhlc2Ugc3ltYm9scyB3aXRoIHRoZSBmaWxlcyBpbnZvbHZlZCwgcHJpbWFyaWx5IGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGFuZCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBjb25maXJtaW5nIHRoYXQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBhcmUgaW5kZWVkIHRoZSBjZW50cmFsIHBvaW50cyBvZiB0aGlzIGNoYW5nZS4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBleGFjdCBuYW1lcyBmb3IgdGhlIGZ1bmN0aW9ucyBhZ2FpbiwgZW5zdXJpbmcgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHZhcmlhdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgbW9kaWZpZWQgc3ltYm9scyBpbiB0aGUgZGlmZi4gIEl0IGxvb2tzIGxpa2UgaXQgb25seSB0b3VjaGVzIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiAgYElQVjZfU0VHNl9MV1RVTk5FTGAsIGBJUFY2X1NFRzZfQlBGYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBJUFY2YCBhcmUgdGhlIG9uZXMgdG8gY29uc2lkZXIuCgpGaW5hbGx5LCBJJiMzOTttIGNvbnN0cnVjdGluZyB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUsIGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIFNSdjYgQlBGIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIHRoZSBpbnRlcm5hbCBoZWxwZXIgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBhbHRlcnMgYHNrYmAgbWFuaXB1bGF0aW9uLCBTUkggaGVhZGVyIHBhcnNpbmcvdXBkYXRpbmcsIGFuZCBjcnVjaWFsIGRhdGEgcG9pbnRlciBjYWxjdWxhdGlvbnMuIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIEJQRiBhbmQgSVB2NiBzZWc2IHJvdXRpbmcgd2hpY2ggbWVhbnMgdGhlcmUgaXMgYSBsYXJnZSBhdHRhY2sgc3VyZmFjZS4gYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgWyYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LCAmIzM0O2JwZl91cGRhdGVfc3JoX3N0YXRlJiMzNDssICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9icGYmIzM0O11gLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFsmIzM0O0lQVjYmIzM0OywgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssICYjMzQ7QlBGX1NZU0NBTEwmIzM0O11gLgoKSSYjMzk7bSBwZXJmb3JtaW5nIGEgZmluYWwsIGNyaXRpY2FsIHNhbml0eSBjaGVjayBvbiBhbGwgYXNwZWN0cyBvZiB0aGUgYW5hbHlzaXMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHJlc3VsdHMuIFRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbHd0X3NlZzZfYWN0aW9uJiMzNDssCiAgICAmIzM0O2JwZl91cGRhdGVfc3JoX3N0YXRlJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBpbnRlcm5hbCBzdGF0ZSB1cGRhdGUgZnVuY3Rpb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBuZXQvY29yZS9maWx0ZXIuYy4gSXQgY2hhbmdlcyBob3cgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaXMgcmV0cmlldmVkIGFuZCB2YWxpZGF0ZWQsIGFsdGVycyBza2IgcHVsbGluZy9wb2ludGVyIHJlY2FsY3VsYXRpb25zIG9uIGRlY2Fwc3VsYXRpb24gYWN0aW9ucyAoU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNiksIGFuZCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaXMgaW52b2tlZCBhZnRlciBlbmNhcHN1bGF0aW9uIGFjdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gSVB2NiBzZWc2IHJvdXRlcyBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDticGZfdXBkYXRlX3NyaF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHN0YWxlIHBvaW50ZXIgYW5kIGJ1ZmZlciBib3VuZGFyeSBpc3N1ZXMgaW4gQlBGIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUkgpIGhlbHBlcnMgKGJwZl91cGRhdGVfc3JoX3N0YXRlIGFuZCBicGZfbHd0X3NlZzZfYWN0aW9uKS4gU3BlY2lmaWNhbGx5OlxuLSBJdCByZXBsYWNlcyBkaXJlY3QgY2FzdGluZyBvZiBvZmZzZXRzIGludG8gc2tiLVx1MDAzZWRhdGEgd2l0aCBzZWc2X2dldF9zcmgoKSBhbmQgcHNrYl9tYXlfcHVsbCBjaGVja3MgdG8gdmFsaWRhdGUgYW5kIHB1bGwgdGhlIGxpbmVhciBoZWFkZXIgc2FmZWx5LlxuLSBJdCByZWNvbXB1dGVzIEJQRiBkYXRhIHBvaW50ZXJzIGFuZCB1cGRhdGVzIHRoZSBwZXItQ1BVIFNSSCBzdGF0ZSB3aGVuIHRoZSBza2IgYnVmZmVyIGV4cGFuZHMgb3IgY2hhbmdlcyBsZW5ndGggZHVyaW5nIGVuY2Fwc3VsYXRpb24uXG4tIExvY2FsIHZhcmlhYmxlcyBzdWNoIGFzIGBvbGRfbGVuYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBgc2tiLVx1MDAzZWxlbmAgcHJpb3IgdG8gcmVhZGluZy5cblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZGRyZXNzIGJ1ZmZlciBib3VuZHMsIHBvaW50ZXIgcmVjb21wdXRhdGlvbiwgYW5kIGxpbmVhciBoZWFkZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYyBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJjYWZmNjU3M2QxMDk2ZmRiZGYwZGQ4N2YwOTI3OWFkNGNmMTBkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDg1MTMxNjdhODU4YTguLmIwMzdkNzBlNWZlNjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDE3LDE1ICYjNDM7NzAxNywxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwotCWludCBzcmhvZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgJmx0OyAwKSB7Ci0JCXNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTDsKLQl9IGVsc2UgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNyaG9mZik7Ci0JCXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoX3N0YXRlLSZndDtzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwotCQlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKLQl9CiYjNDM7CXNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApOwomIzQzOwlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7c3JoID0gc3JoOwomIzQzOwlpZiAoIXNyaCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3JoX3N0YXRlLSZndDtoZHJsZW4gPSBzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwomIzQzOwlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKIH0KIAogQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCkBAIC03MDMzLDYgJiM0Mzs3MDM0LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiB7CiAJc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID0KIAkJdGhpc19jcHVfcHRyKCZhbXA7c2VnNl9icGZfc3JoX3N0YXRlcyk7CiYjNDM7CXVuc2lnbmVkIGludCBvbGRfbGVuOwogCWludCBoZHJvZmYgPSAwOwogCWludCBlcnI7CiAKQEAgLTcwNTgsMzIgJiM0Mzs3MDYwLDM3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLAogCiAJCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgJmx0OyAwKQogCQkJcmV0dXJuIC1FQkFETVNHOwotCQlpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpCiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHsKJiM0MzsJCQlzcmhfc3RhdGUtJmd0O3NyaCA9IE5VTEw7CiYjNDM7CQkJYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpOwogCQkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwkJfQomIzQzOwkJX19za2JfcHVsbChza2IsIGhkcm9mZik7CiAKIAkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7CiAJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCQlza2ItJmd0O2VuY2Fwc3VsYXRpb24gPSAwOwogCi0JCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKIAkJcmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTsKIAljYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjoKIAkJaWYgKHNyaF9zdGF0ZS0mZ3Q7c3JoICZhbXA7JmFtcDsgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSkKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCW9sZF9sZW4gPSBza2ItJmd0O2xlbjsKIAkJZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQomIzQzOwkJaWYgKHNrYi0mZ3Q7bGVuICE9IG9sZF9sZW4pCiAJCQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6CiAJCWlmIChzcmhfc3RhdGUtJmd0O3NyaCAmYW1wOyZhbXA7ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpCiAJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQlvbGRfbGVuID0gc2tiLSZndDtsZW47CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQomIzQzOwkJaWYgKHNrYi0mZ3Q7bGVuICE9IG9sZF9sZW4pCiAJCQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIFBvdGVudGlhbCBLTVNBTiBSaXNrcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIE15IHByb2Nlc3Mgd2lsbCBiZSBhcyBmb2xsb3dzOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmYgYW5kIGZvY3VzIG9uIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY2hhbmdlcyBhcm91bmQgdGhvc2UgYXJlYXMuIFRoZW4sIEkmIzM5O2xsIHplcm8gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYCBhcm91bmQgbGluZSA3MDE3LCB1c2luZyB0aGF0IGFzIGEgbWFya2VyIHRvIHN0YXJ0IG15IGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcGF0Y2gmIzM5O3MgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMDA6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MDAxOlx0XG43MDAyOlx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xuNzAwMzpcdFx0cmV0dXJuIDA7XG43MDA0Olx0fVxuNzAwNTpcdFxuNzAwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuNzAwNzpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXG43MDA4Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG43MDA5Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG43MDEwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNzAxMTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG43MDEyOlx0XHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjcwMTM6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG43MDE0Olx0fTtcbjcwMTU6XHRcbjcwMTY6XHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzAxNzpcdHtcbjcwMTg6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG43MDE5Olx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjcwMjA6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuNzAyMTpcdFxuNzAyMjpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG43MDIzOlx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG43MDI0Olx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuNzAyNTpcdFx0aWYgKCFzcmgpXG43MDI2Olx0XHRcdHJldHVybjtcbjcwMjc6XHRcbjcwMjg6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG43MDMzOlx0XHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG43MDM0Olx0e1xuNzAzNTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMzY6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAzNzpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW47XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG43MDgxOlx0XHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuNzA4MjpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA4MzpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvbGRfbGVuKVxuNzA4NDpcdFx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDg1Olx0XG43MDg2Olx0XHRcdHJldHVybiBlcnI7XG43MDg3Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODg6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg5Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA5MDpcdFx0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbjcwOTE6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcbjcwOTI6XHRcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbjcwOTM6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbjcwOTQ6XHRcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5NTpcdFxuNzA5NjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5NzpcdFx0ZGVmYXVsdDpcbjcwOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGFuZCBpdHMgc3VwcG9ydGluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgU2VnNiBhbmQgQlBGLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3RhdGUgbWFuYWdlbWVudCBhc3BlY3QsIGdpdmVuIHRoYXQgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gdGhlIG5hbWUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugc3RhdGVzIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZC4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGludGVyYWN0aW9ucywgaG93IHRoZXkmIzM5O3JlIGNyZWF0ZWQsIHVwZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5LCBjbGVhbmVkIHVwLiBMZXQmIzM5O3Mgc2VlIGhvdyBlZmZpY2llbnRseSB0aGVzZSBzdGF0ZXMgYXJlIHV0aWxpemVkLiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9ucyBtaWdodCBiZSBwb3NzaWJsZS4gSXTigJlzIHRpbWUgdG8gbWV0aG9kaWNhbGx5IGV4YW1pbmUgdGhlIGNvZGUgYW5kIGJ1aWxkIHVwIHRoYXQgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIEkgbmVlZCB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGlzIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njk3Mz1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTc2LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5Nzc6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzgtXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNj1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTgtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzAxOTpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzAyMC1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzI9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDM2Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDM3LVx0dW5zaWduZWQgaW50IG9sZF9sZW47XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzExMj1CUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTUtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzExNjpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzExNy1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM3Mj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwMS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDAyOkRFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MDMtXHQuYmhfbG9ja1x0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MDY9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MDgtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MDk6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDEwLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ0OS1cdCAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTA6XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTE6XHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Mi1cdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzMtXHRcdGdvdG8gZHJvcDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc0Olx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzUtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODEtZHJvcDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDgyOlx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODMtXHRrZnJlZV9za2Ioc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgU1JIIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBpbiB0aGUgU1JIIChTb3VyY2UgUm91dGluZyBIZWFkZXIpIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gRmlyc3QsIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2hhbmdlcyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uCgpQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgdXNpbmcgYGlwdjZfZmluZF9oZHJgIHRvIGxvY2F0ZSB0aGUgU1JILiBJdCBzZWVtcyBhIGJpdCBjbHVua3kgYmVjYXVzZSBvZiB0aGUgYHNyaG9mZmAgdmFyaWFibGUgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFuIGVycm9yLiBUaGUgb2xkIGxvZ2ljIGVzc2VudGlhbGx5IGNoZWNrZWQgZm9yIHRoZSBTUkgmIzM5O3MgZXhpc3RlbmNlIGFuZCBpZiBpdCB3YXMgZm91bmQsIGRldGVybWluZWQgdGhlIGhlYWRlciBsZW5ndGggYW5kIHNldCB0aGUgYHZhbGlkYCBmbGFnLgoKTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCB0byBnZXQgYSBwb2ludGVyIHRvIHRoZSBTUkguIFRoZW4sIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGlzIGNhbGxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxpa2VseSB1cGRhdGVzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB0byByZWZsZWN0IHRoZSBuZXcgcG9zaXRpb24gb3IgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhLiBUaGUgc3Vic2VxdWVudCBsb2dpYyBhcHBlYXJzIGNsZWFuZXI7IGlmIGBzZWc2X2dldF9zcmhgIHJldHVybnMgTlVMTCwgaXQgYmFpbHMgb3V0LiBJZiBub3QsIHRoZSBoZWFkZXIgbGVuZ3RoIGFuZCB2YWxpZGl0eSBhcmUgY29tcHV0ZWQgYXMgYmVmb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgc2VnNl9nZXRfc3JoYCBtb3JlIGNvbXBsZXRlbHksIHRvIHNlZSB0aGUgZXhhY3QgaW1wbGljYXRpb24gb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UgbG9va3MgY2xlYW5lciBhbmQgbW9yZSBkaXJlY3QsIG1ha2luZyBpdCBtb3JlIHJvYnVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9nZXRfc3JoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2VnNi5oPTY3PWV4dGVybiBib29sIHNlZzZfdmFsaWRhdGVfc3JoKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBpbnQgbGVuLCBib29sIHJlZHVjZWQpO1xuaW5jbHVkZS9uZXQvc2VnNi5oOjY4OmV4dGVybiBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgYHNlZzZfZ2V0X3NyaGAgaW1wbGVtZW50YXRpb246CgoqKkRpdmluZyBpbnRvIGBzZWc2X2dldF9zcmhgKioKCk9rYXksIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBzZWc2X2dldF9zcmhgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgdG8gZ2V0IHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHdoYXQgaXRzIGNvcmUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcmV0cmlldmluZyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGV4dHJhY3QgU1JIIGluZm9ybWF0aW9uIGZyb20gYSBwYWNrZXQgb3IgZGF0YSBzdHJ1Y3R1cmUsIHBlcmhhcHMgYSBza19idWZmLCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHRoZSBpbnB1dCBhcmd1bWVudHMuIFdoYXQgZG9lcyBpdCB0YWtlIGluPyBJcyBpdCBhIHBvaW50ZXIgdG8gdGhlIHBhY2tldCBpdHNlbGY/IE9yIHBlcmhhcHMgYW4gb2Zmc2V0IGludG8gYSBwYWNrZXQgYnVmZmVyPyBPciBtYXliZSBldmVuIGEgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBTUkggaXRzZWxmPyBBbmQgd2hhdCB3aWxsIGJlIHJldHVybmVkPyBBIHBvaW50ZXIgdG8gc29tZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBTUkg/IEFuIGVycm9yIGNvZGUgaWYgc29tZXRoaW5nIGdvZXMgd3Jvbmc/IAoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgaW1wbGVtZW50YXRpb24gb2YgU1JIIHJldHJpZXZhbCwgYXMgSSYjMzk7bSB1c2VkIHRvIHNlZWluZy4gVGhpcyBtZWFucyB2ZXJpZnlpbmcgdGhlIGhhbmRsaW5nIG9mIHRoZSB2YXJpb3VzIGZpZWxkcyB0aGF0IG1ha2UgdXAgdGhlIFNSSDogdGhlIG5leHQgaGVhZGVyLCB0aGUgaGVhZGVyIGV4dGVuc2lvbiBsZW5ndGgsIHRoZSByb3V0aW5nIHR5cGUsIHRoZSBzZWdtZW50cyBsZWZ0LCB0aGUgc2VnbWVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgZmxhZ3Mgb3IgbWV0YWRhdGEuIEkmIzM5O2xsIGFsc28gYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLCBsaWtlIFNSSHMgdGhhdCBhcmUgZnJhZ21lbnRlZCwgb3IgdHJ1bmNhdGVkLgoKSSBhbnRpY2lwYXRlIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBib3VuZGFyeSBjb25kaXRpb25zIC0gaXMgaXQgY29ycmVjdGx5IHZlcmlmeWluZyB0aGF0IHRoZSBTUkggZGF0YSBkb2VzbiYjMzk7dCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgcGFja2V0IGJ1ZmZlcj8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGFsaWdubWVudCBpc3N1ZXM/IEFuZCBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIC0gd2hhdCBoYXBwZW5zIGlmIHRoZSBTUkggaXMgaW52YWxpZCBvciBjb3JydXB0ZWQ/IEFyZSB0aGVyZSBncmFjZWZ1bCBlcnJvciByZXR1cm5zLCBsb2dnaW5nLCBvciBvdGhlciBtZWNoYW5pc21zIHRvIHByZXZlbnQgZnVydGhlciBpc3N1ZXM/CgpJJiMzOTtsbCBiZSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlIGxpbmUgYnkgbGluZSwgdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHNwZWVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcz8gQXJlIHRoZXJlIHdheXMgdG8gaW1wcm92ZSB0aGUgaW1wbGVtZW50YXRpb24sIG9yIGlzIHRoaXMgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRlc2lnbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGlwdjZfc3JfaGRyIFxcKnNlZzZfZ2V0X3NyaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNi5jPTI2PWJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZClcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtNzgtXG5uZXQvaXB2Ni9zZWc2LmM6Nzk6c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxubmV0L2lwdjYvc2VnNi5jLTgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNlZzYuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbmV0L2lwdjYvc2VnNi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzkuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBhcmVhIGxpa2VseSBjb250YWlucyB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBvciBwZXJoYXBzIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgcHJvY2Vzc2luZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIGEgY29tbW9uIHBsYWNlIHRvIGZpbmQgdGhlIGdyb3VuZHdvcmsgZm9yIGEgbW9kdWxlIGxpa2UgdGhpcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGNvZGUgKmJlZ2lucyogdG8gaGFuZGxlIHRoZSBTUnY2IG9wZXJhdGlvbnMuIEkgYW50aWNpcGF0ZSB1bmRlcnN0YW5kaW5nIGhvdyBpdCBzdHJ1Y3R1cmVzIGl0cyBkYXRhIGFuZCB3aGF0IHRoZSBtYWluIGZ1bmN0aW9uIGNhbGxzIGFyZSB0byBlbmFibGUgYSBiYXNpYyBvcGVyYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwYXJzZSB0aGUgbW9yZSBjb21wbGV4IGZsb3dzIGFuZCBmZWF0dXJlcyBvZiBTUnY2LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzU6XHRcbiAgNzY6XHRcdHJldHVybiB0cnVlO1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXG4gIDgwOlx0e1xuICA4MTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gIDgyOlx0XHRpbnQgbGVuLCBzcmhvZmYgPSAwO1xuICA4MzpcdFxuICA4NDpcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgXHUwMDI2ZmxhZ3MpIFx1MDAzYyAwKVxuICA4NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODY6XHRcbiAgODc6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNyaG9mZiAmIzQzOyBzaXplb2YoKnNyaCkpKVxuICA4ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODk6XHRcbiAgOTA6XHRcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc3Job2ZmKTtcbiAgOTE6XHRcbiAgOTI6XHRcdGxlbiA9IChzcmgtXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuICA5MzpcdFxuICA5NDpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc3Job2ZmICYjNDM7IGxlbikpXG4gIDk1Olx0XHRcdHJldHVybiBOVUxMO1xuICA5NjpcdFxuICA5NzpcdFx0Lyogbm90ZSB0aGF0IHBza2JfbWF5X3B1bGwgbWF5IGNoYW5nZSBwb2ludGVycyBpbiBoZWFkZXI7XG4gIDk4Olx0XHQgKiBmb3IgdGhpcyByZWFzb24gaXQgaXMgbmVjZXNzYXJ5IHRvIHJlbG9hZCB0aGVtIHdoZW4gbmVlZGVkLlxuICA5OTpcdFx0ICovXG4gMTAwOlx0XHRzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG4gMTAxOlx0XG4gMTAyOlx0XHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgbGVuLCB0cnVlKSlcbiAxMDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTA0Olx0XG4gMTA1Olx0XHRyZXR1cm4gc3JoO1xuIDEwNjpcdH1cbiAxMDc6XHRcbiAxMDg6XHQvKiBEZXRlcm1pbmUgaWYgYW4gSUNNUCBpbnZva2luZyBwYWNrZXQgY29udGFpbnMgYSBzZWdtZW50IHJvdXRpbmdcbiAxMDk6XHQgKiBoZWFkZXIuICBJZiBpdCBkb2VzLCBleHRyYWN0IHRoZSBvZmZzZXQgdG8gdGhlIHRydWUgZGVzdGluYXRpb25cbiAxMTA6XHQgKiBhZGRyZXNzLCB3aGljaCBpcyBpbiB0aGUgZmlyc3Qgc2VnbWVudCBhZGRyZXNzLlxuIDExMTpcdCAqL1xuIDExMjpcdHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcbiAxMTM6XHR7XG4gMTE0Olx0XHRfX3UxNiBuZXR3b3JrX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcjtcbiAxMTU6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIDExNjpcdFxuIDExNzpcdFx0LyogVXBkYXRlIG5ldHdvcmsgaGVhZGVyIHRvIHBvaW50IHRvIHRoZSBpbnZva2luZyBwYWNrZXRcbiAxMTg6XHRcdCAqIGluc2lkZSB0aGUgSUNNUCBwYWNrZXQsIHNvIHdlIGNhbiB1c2UgdGhlIHNlZzZfZ2V0X3NyaCgpXG4gMTE5Olx0XHQgKiBoZWxwZXIuXG4gMTIwOlx0XHQgKi9cbiAxMjE6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDEyMjpcdFxuIDEyMzpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG4gMTI0Olx0XHRpZiAoIXNyaClcbiAxMjU6XHRcdFx0Z290byBvdXQ7XG4gMTI2Olx0XG4gMTI3Olx0XHRpZiAoc3JoLVx1MDAzZXR5cGUgIT0gSVBWNl9TUkNSVF9UWVBFXzQpXG4gMTI4Olx0XHRcdGdvdG8gb3V0O1xuIDEyOTpcdFxuIDEzMDpcdFx0b3B0LVx1MDAzZWZsYWdzIHw9IElQNlNLQl9TRUc2O1xuIDEzMTpcdFx0b3B0LVx1MDAzZXNyaG9mZiA9ICh1bnNpZ25lZCBjaGFyICopc3JoIC0gc2tiLVx1MDAzZWRhdGE7XG4gMTMyOlx0XG4gMTMzOlx0b3V0OlxuIDEzNDpcdFx0LyogUmVzdG9yZSB0aGUgbmV0d29yayBoZWFkZXIgYmFjayB0byB0aGUgSUNNUCBwYWNrZXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4gQmVmb3JlIHRoaXMgcmV2aXNpb24sIHRoZXJlIHdhcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyBwYXR0ZXJuOiBgaXB2Nl9maW5kX2hkcmAgd2FzIHVzZWQgd2l0aG91dCBwcm9wZXJseSB2YWxpZGF0aW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG9yIGVuc3VyaW5nIHRoZSBuZWNlc3NhcnkgZGF0YSB3YXMgYXZhaWxhYmxlIHdpdGggYHBza2JfbWF5X3B1bGxgLiBUaGVuLCB3ZSB3ZXJlIGRpcmVjdGx5IGNhc3RpbmcgYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzcmhvZmZgIHRvIGBpcHY2X3NyX2hkcmAuIFRoZSBjYWxsIHRvIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIHNlZW1lZCBoYXBoYXphcmQsIG9yIGF0IGxlYXN0LCBpbmNvbnNpc3RlbnQuCgpOb3csIGBzZWc2X2dldF9zcmhgIGlzIHRoZSBnby10byBmdW5jdGlvbiwgYW5kIHRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLiBJdCB2YWxpZGF0ZXMgYW5kIHB1bGxzIHRoZSBlbnRpcmUgU1JILiBQdWxsaW5nIHRoZSBTUkggbWlnaHQgdHJpZ2dlciBhbiBTS0IgcmUtYWxsb2NhdGlvbiwgd2hpY2ggbWFrZXMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgZXNzZW50aWFsIGFmdGVyIHRoaXMgb3BlcmF0aW9uLgoKSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBzY2VuYXJpbyB0aGF0IG1ha2VzIG1lIHBhdXNlOiB3aGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgKm5vKiBTUkggKGAhc3JoYCk/IFRoZSBjb2RlIHNldHMgYHNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTGAgYW5kIHJldHVybnMuIFRoYXQgbWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYnV0IGl0IGxlYXZlcyBgc3JoX3N0YXRlLSZndDt2YWxpZGAgdW50b3VjaGVkLCBvciBmYWxzZS4gVGhpcyBoYXMgdG8gYmUgYWRkcmVzc2VkLiBEb2VzIGl0IGV2ZW4gbWF0dGVyIHdoZXRoZXIgYHNyaF9zdGF0ZS0mZ3Q7dmFsaWRgIGlzIHRydWUgb3IgZmFsc2Ugd2hlbiB0aGUgYWN0dWFsIGBzcmhgIHBvaW50ZXIgaXMgYE5VTExgPyBJIHRoaW5rIHRoaXMgbmVlZHMgYSBzZWNvbmQgbG9vaywgc28gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIHRoZXNlIHN0YXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfaGFzX3ZhbGlkX3NyaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzAzMj1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDQzLVx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNDQ6XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxubmV0L2NvcmUvZmlsdGVyLmMtNzA0NS1cdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA0OS1cdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG5uZXQvY29yZS9maWx0ZXIuYzo3MDUwOlx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTEtXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTUtXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDY6XG5uZXQvY29yZS9maWx0ZXIuYzo3MDU2Olx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTctXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzctXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzg6XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxubmV0L2NvcmUvZmlsdGVyLmMtNzA3OS1cdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA4Ny1cdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxubmV0L2NvcmUvZmlsdGVyLmM6NzA4ODpcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG5uZXQvY29yZS9maWx0ZXIuYy03MDg5LVx0XHRcdHJldHVybiAtRUJBRE1TRztcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQwMj1ERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwNS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDA2OmJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MDcte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3MS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDcyOlx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3My1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFNFRzYgQlBGIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIGZ1bmN0aW9uIHdvcmtzLiBJdOKAmXMgY3JpdGljYWwsIG9idmlvdXNseSwgaW4gZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiBTUkggaGVhZGVycyBpbiBvdXIgU0VHNiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBhIG1pc3N0ZXAgaGVyZSBjb3VsZCBvcGVuIHVwIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGtlcm5lbCBpcyB2YWxpZGF0aW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHRocm91Z2ggQlBGLiBXaGF0IGNoZWNrcyBhcmUgaW4gcGxhY2U/IFdoYXQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJlIHRoZXkgaGFuZGxpbmc/IEkgd2FudCB0byBzZWUgaWYgdGhlIHZhbGlkYXRpb24gY29uc2lkZXJzIGFzcGVjdHMgbGlrZSBTUkggbGVuZ3RoLCBob3AgbGltaXRzLCBzZWdtZW50cyBsZWZ0LCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IEJQRiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lIGluIHRoaXMgcmVnYXJkLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0fVxuMTQwMTpcdFxuMTQwMjpcdERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xuMTQwMzpcdFx0LmJoX2xvY2tcdD0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxuMTQwNDpcdH07XG4xNDA1Olx0XG4xNDA2Olx0Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4xNDA3Olx0e1xuMTQwODpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjE0MDk6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuMTQxMDpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuMTQxMTpcdFxuMTQxMjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmhfc3RhdGUtXHUwMDNlYmhfbG9jayk7XG4xNDEzOlx0XHRpZiAodW5saWtlbHkoc3JoID09IE5VTEwpKVxuMTQxNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNDE1Olx0XG4xNDE2Olx0XHRpZiAodW5saWtlbHkoIXNyaF9zdGF0ZS1cdTAwM2V2YWxpZCkpIHtcbjE0MTc6XHRcdFx0aWYgKChzcmhfc3RhdGUtXHUwMDNlaGRybGVuIFx1MDAyNiA3KSAhPSAwKVxuMTQxODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjE0MTk6XHRcbjE0MjA6XHRcdFx0c3JoLVx1MDAzZWhkcmxlbiA9ICh1OCkoc3JoX3N0YXRlLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMyk7XG4xNDIxOlx0XHRcdGlmICghc2VnNl92YWxpZGF0ZV9zcmgoc3JoLCAoc3JoLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMywgdHJ1ZSkpXG4xNDIyOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTQyMzpcdFxuMTQyNDpcdFx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuMTQyNTpcdFx0fVxuMTQyNjpcdFxuMTQyNzpcdFx0cmV0dXJuIHRydWU7XG4xNDI4Olx0fVxuMTQyOTpcdFxuMTQzMDpcdHN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE0MzE6XHRcdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbjE0MzI6XHR7XG4xNDMzOlx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGU7XG4xNDM0Olx0XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbjE0MzU6XHRcdGludCByZXQ7XG4xNDM2Olx0XG4xNDM3Olx0XHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xuMTQzODpcdFx0aWYgKCFzcmgpIHtcbjE0Mzk6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDI4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipBbmFseXppbmcgdGhlIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgYW5kIGBzZWc2X2xvY2FsLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgZnVuY3Rpb24sIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIHRoZSBMb2NhbCBTZWdtZW50cyBpbXBsZW1lbnRhdGlvbi4gUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIOKAkyBzcGVjaWZpY2FsbHksIGxpbmVzIDE0MzUgdGhyb3VnaCAxNDc1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgcHJvY2Vzc2luZyBvciBlcnJvciBoYW5kbGluZyBmb3IgYSBwYWNrZXQgdGhhdCYjMzk7cyBiZWVuIHRocm91Z2ggYSBsb2NhbCBzZWdtZW50IHJvdXRpbmcgcGF0aCBpcyBoYXBwZW5pbmcuCgpCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgY2hlY2tzIGhlcmU6IHZhbGlkYXRpb24gb2YgdGhlIHBhY2tldCYjMzk7cyBmaW5hbCBzdGF0ZSBhZnRlciB0cmF2ZXJzaW5nIGEgbG9jYWwgc2VnbWVudCByb3V0ZSwgcGVyaGFwcyBoYW5kbGluZyBvZiBhbnkgcmVtYWluaW5nIG1ldGFkYXRhLCBhbmQgZGVmaW5pdGVseSBhIGNsZWFuLXVwIHJvdXRpbmUgZm9yIHJlc291cmNlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIHRoaXMgcGFja2V0LiBNYXliZSB0aGV5JiMzOTtyZSBtYW5hZ2luZyBmbG93IGluZm9ybWF0aW9uIG9yIGFjY291bnRpbmcgaGVyZSB0b28uIE9yLCBpdCBjb3VsZCBiZSB0aGUgcGxhY2Ugd2hlcmUgdGhleSBtYXJrIHRoZSBwYWNrZXQgZm9yIGRlbGl2ZXJ5IHRvIHRoZSBuZXh0IHN0YWdlIGFmdGVyIHByb2Nlc3NpbmcuIEkgbmVlZCB0byBkaWcgaW4sIHRob3VnaCwgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB3aXRoIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSByZWxldmFudCBjb250cm9sIHN0cnVjdHVyZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MzU6XHRcdGludCByZXQ7XG4xNDM2Olx0XG4xNDM3Olx0XHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xuMTQzODpcdFx0aWYgKCFzcmgpIHtcbjE0Mzk6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNDQwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQ0MTpcdFx0fVxuMTQ0MjpcdFx0YWR2YW5jZV9uZXh0c2VnKHNyaCwgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcik7XG4xNDQzOlx0XG4xNDQ0Olx0XHQvKiBUaGUgYWNjZXNzIHRvIHRoZSBwZXItQ1BVIGJ1ZmZlciBzcmhfc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHJ1bm5pbmdcbjE0NDU6XHRcdCAqIGFsd2F5cyBpbiBzb2Z0aXJxIGNvbnRleHQgKHdpdGggZGlzYWJsZWQgQkgpLiBPbiBQUkVFTVBUX1JUIHRoZVxuMTQ0NjpcdFx0ICogcmVxdWlyZWQgbG9ja2luZyBpcyBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIGxvY2FsX2xvY2tfbmVzdGVkX2JoKClcbjE0NDc6XHRcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcbjE0NDg6XHRcdCAqIGJwZl9wcm9nX3J1bl9zYXZlX2NiKCkuXG4xNDQ5Olx0XHQgKi9cbjE0NTA6XHRcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG4xNDUxOlx0XHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4xNDUyOlx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuMTQ1MzpcdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG4xNDU0Olx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTQ1NzpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuMTQ1ODpcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3NhdmVfY2Ioc2x3dC1cdTAwM2VicGYucHJvZywgc2tiKTtcbjE0NTk6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTQ2MDpcdFxuMTQ2MTpcdFx0c3dpdGNoIChyZXQpIHtcbjE0NjI6XHRcdGNhc2UgQlBGX09LOlxuMTQ2MzpcdFx0Y2FzZSBCUEZfUkVESVJFQ1Q6XG4xNDY0Olx0XHRcdGJyZWFrO1xuMTQ2NTpcdFx0Y2FzZSBCUEZfRFJPUDpcbjE0NjY6XHRcdFx0Z290byBkcm9wO1xuMTQ2NzpcdFx0ZGVmYXVsdDpcbjE0Njg6XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O2JwZi1zZWc2bG9jYWw6IElsbGVnYWwgcmV0dXJuIHZhbHVlICV1XFxuXCYjMzQ7LCByZXQpO1xuMTQ2OTpcdFx0XHRnb3RvIGRyb3A7XG4xNDcwOlx0XHR9XG4xNDcxOlx0XG4xNDcyOlx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjE0NzM6XHRcdFx0Z290byBkcm9wO1xuMTQ3NDpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQ3NTpcdFxuMTQ3NjpcdFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXG4xNDc3Olx0XHRcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbjE0Nzg6XHRcbjE0Nzk6XHRcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcbjE0ODA6XHRcbjE0ODE6XHRkcm9wOlxuMTQ4MjpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQ4MzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNDg0Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRUc2IExvY2FsIEFjdGlvbnMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBTRUc2IGxvY2FsIGFjdGlvbnMgaGFuZGxlIElQdjYgcGFja2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLiBUaGUgZmlyc3Qgc2VnbWVudCBkZWFscyB3aXRoIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YC4gSSBzZWUgdGhlIGNvZGUgaXMgY2hlY2tpbmcgZm9yIGFuIElQdjYgaGVhZGVyIHVzaW5nIGBpcHY2X2ZpbmRfaGRyYC4gVGhlbiB0aGVyZSBpcyBhIGNoYW5nZS4gSW5pdGlhbGx5LCB0aGUgY29kZSB1c2VkIGBwc2tiX3B1bGxgIHdoaWNoIHB1bGxzIGRhdGEgZnJvbSBhIHNrYi4gTm93IGl0IHVzZXMgYHBza2JfbWF5X3B1bGxgLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHNldHMgYHNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTGAgYW5kIGNvbXB1dGVzIGRhdGEgcG9pbnRlcnMuIEEgZm9sbG93IHVwIHRvIHRoaXMgaXMgdG8gcHVsbCBmcm9tIHRoZSBza2Igd2l0aCBgX19za2JfcHVsbGAuLiBUaGlzIGlzIGZvbGxvd2VkIHVwIHdpdGggYHNrYl9wb3N0cHVsbF9yY3N1bWAsIGFuZCBhIHJlc2V0IG9mIHZhcmlvdXMgaGVhZGVycy4gVGhlIGNoYW5nZSBoZXJlIGlzIHNpZ25pZmljYW50LiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBwdWxsaW5nIHRoZSBoZWFkZXIsIGl0JiMzOTtzIG5vdyBjaGVja2luZyBpZiBwdWxsaW5nIHRoZSBJUHY2IGhlYWRlciBpcyBldmVuICpwb3NzaWJsZSouIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgZml4IGZvciBhIHByZXZpb3VzIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYSBtYWxmb3JtZWQgcGFja2V0IGNvdWxkIGNhdXNlIGlzc3Vlcy4gVGhlbiBpdCBsb29rcyB1cCB0aGUgbmV4dCBob3AuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZgIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYC4gSGVyZSwgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIFNSSCBzdGF0ZSBhbmQgdmFsaWRhdGluZyB0aGUgU1JIIGlmIG9uZSBleGlzdHMuIEkgc2VlIHRoZSBjb2RlIGNhbGxzIGBicGZfcHVzaF9zZWc2X2VuY2FwYCB3aXRoIGRpZmZlcmVudCBlbmNhcHN1bGF0aW9uIHR5cGVzLiBJdCBzZWVtcyB0aGUgY29kZSBpcyB0cmFja2luZyB0aGUgb2xkIGxlbmd0aCBvZiB0aGUgc2tiIGFzIGEgY2hlY2twb2ludCB0byBzZWUgaWYgYGJwZl9wdXNoX3NlZzZfZW5jYXBgIGNoYW5nZXMgdGhlIGxlbmd0aC4gRmluYWxseSwgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpcyBjYWxsZWQgd2hlbiB0aGUgbGVuZ3RoIG9mIHRoZSBza2IgaXMgY2hhbmdlZCBhZnRlciBjYWxsaW5nIGBicGZfcHVzaF9zZWc2X2VuY2FwYC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWxseSBhZGRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBTUkguIFRoYXQmIzM5O3MgZ29vZCwgSSB3YXMgZXhwZWN0aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIFRoZSBjaGFuZ2UgZnJvbSB0aGUgb2xkIGltcGxlbWVudGF0aW9uIHNlZW1zIHRvIGJlIHRoZSBsZW5ndGggY2hlY2sgYW5kIHVwZGF0aW5nIHRoZSBzcmggc3RhdGUgYmFzZWQgb24gdGhhdC4KCkFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBkdXJpbmcgZW5jYXBzdWxhdGlvbiwgYW5kIHdoZXRoZXIgdGhlc2Ugc3RhdGUgdXBkYXRlcyBhcmUgY3JpdGljYWwgb3IganVzdCBuaWNlLXRvLWhhdmVzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wdXNoX3NlZzZfZW5jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02ODc4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmM6Njg3OTpzdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbm5ldC9jb3JlL2ZpbHRlci5jLTY4ODAte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjE9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTI3LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FOlxubmV0L2NvcmUvZmlsdGVyLmM6NjkyODpcdFx0cmV0dXJuIGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCB0eXBlLCBoZHIsIGxlbik7XG5uZXQvY29yZS9maWx0ZXIuYy02OTI5LSNlbmRpZlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzI9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA4MC1cdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG5uZXQvY29yZS9maWx0ZXIuYzo3MDgxOlx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODItXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA5MC1cdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG5uZXQvY29yZS9maWx0ZXIuYzo3MDkxOlx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxubmV0L2NvcmUvZmlsdGVyLmMtNzA5Mi1cdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYnBmX3B1c2hfc2VnNl9lbmNhcGAgbG9jYXRlZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBMZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgQlBGIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrIGF0IHRoaXMgcG9pbnQuIEkgc3VzcGVjdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIG9yIG1vZGlmeWluZyB0aGUgSVB2NiBoZWFkZXIgdG8gYWRkIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgdGhlbiBwdXNoaW5nIHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIHNrX2J1ZmYsIHRoZSBJUHY2IGhlYWRlciBzdHJ1Y3R1cmUsIHRoZSBTUkggaXRzZWxmLCBhbmQgaG93IHRoZSBCUEYgcHJvZ3JhbSBtYW5pcHVsYXRlcyB0aGVzZSBlbGVtZW50cyB0byBhY2NvbXBsaXNoIGVuY2Fwc3VsYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcyB3ZWxsLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBjcml0aWNhbCBwYXRoIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgaG93IHRoZSBCUEYgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgSVB2NiBoZWFkZXIgYW5kIGhvdyBpdCBzZXRzIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgdGhlIFNSSCB0byBzcGVjaWZ5IHRoZSBzZWdtZW50IGxpc3QuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlIGVmZmljaWVudGx5IGltcGxlbWVudCBTUnY2LiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBsaWtlIGluc3VmZmljaWVudCBidWZmZXIgc3BhY2Ugb3IgaW52YWxpZCBzZWdtZW50IGxpc3RzLiBJJiMzOTtsbCBhbHNvIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBhbnkgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGlmIGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY4Nzg6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbjY4Nzk6XHRzdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbjY4ODA6XHR7XG42ODgxOlx0XHRpbnQgZXJyO1xuNjg4MjpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopaGRyO1xuNjg4MzpcdFxuNjg4NDpcdFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgZmFsc2UpKVxuNjg4NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY4ODY6XHRcbjY4ODc6XHRcdHN3aXRjaCAodHlwZSkge1xuNjg4ODpcdFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FOlxuNjg4OTpcdFx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQVjYpKVxuNjg5MDpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjY4OTE6XHRcbjY4OTI6XHRcdFx0ZXJyID0gc2VnNl9kb19zcmhfaW5saW5lKHNrYiwgc3JoKTtcbjY4OTM6XHRcdFx0YnJlYWs7XG42ODk0Olx0XHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNjpcbjY4OTU6XHRcdFx0c2tiX3Jlc2V0X2lubmVyX2hlYWRlcnMoc2tiKTtcbjY4OTY6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAxO1xuNjg5NzpcdFx0XHRlcnIgPSBzZWc2X2RvX3NyaF9lbmNhcChza2IsIHNyaCwgSVBQUk9UT19JUFY2KTtcbjY4OTg6XHRcdFx0YnJlYWs7XG42ODk5Olx0XHRkZWZhdWx0OlxuNjkwMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5MDE6XHRcdH1cbjY5MDI6XHRcbjY5MDM6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjY5MDQ6XHRcdGlmIChlcnIpXG42OTA1Olx0XHRcdHJldHVybiBlcnI7XG42OTA2Olx0XG42OTA3Olx0XHRza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbjY5MDg6XHRcbjY5MDk6XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XG42OTEwOlx0fVxuNjkxMTpcdCNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xuNjkxMjpcdFxuNjkxMzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXG42OTE0Olx0c3RhdGljIGludCBicGZfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sXG42OTE1Olx0XHRcdFx0ICAgICBib29sIGluZ3Jlc3MpXG42OTE2Olx0e1xuNjkxNzpcdFx0cmV0dXJuIGJwZl9sd3RfcHVzaF9pcF9lbmNhcChza2IsIGhkciwgbGVuLCBpbmdyZXNzKTtcbjY5MTg6XHR9XG42OTE5Olx0I2VuZGlmXG42OTIwOlx0XG42OTIxOlx0QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbjY5MjI6XHRcdCAgIHUzMiwgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ4NAoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiA4NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEJQRiBTUkggU3RhdGUgVXBkYXRlIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBpc3N1ZSBpcyBhIHBvdGVudGlhbCBmb3Igc3RhbGUgb3IgaW52YWxpZCBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIHBvaW50ZXJzIHdpdGhpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGluIGZ1bmN0aW9ucyBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgc2VnNl9kb19zcmhfaW5saW5lYCBvciBgc2VnNl9kb19zcmhfZW5jYXBgIHRvIG1vZGlmeSB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCBpbmNyZWFzZSBpdHMgbGVuZ3RoLiBUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgbWlnaHQgc3Vic2VxdWVudGx5IHJldHVybiBhbiBlcnJvciwgZXZlbiBhZnRlciBlbmNhcHN1bGF0aW9uIGFwcGVhcmVkIHRvIHN1Y2NlZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBvbmx5IGNoZWNraW5nIGZvciB0aGUgc3VjY2VzcyBvZiBgc2VnNl9sb29rdXBfbmV4dGhvcGAsIGFuZCBpZiBpdCBmYWlsZWQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgd2FzbiYjMzk7dCBiZWluZyBjYWxsZWQsIGxlYXZpbmcgdGhlIFNSSCBzdGF0ZSBwb3RlbnRpYWxseSBpbmNvbnNpc3RlbnQgaWYgdGhlIGBza2JgIHdlcmUgcmVhbGxvY2F0ZWQgb3IgbW9kaWZpZWQgbGF0ZXIuCgpOb3csIGxvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHRoZSBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgc2NlbmFyaW8sIHdoZXJlIGBwc2tiX21heV9wdWxsYCBlbnN1cmVzIHRoZSBJUHY2IGhlYWRlciBpcyBwcmVzZW50IGluIHRoZSBsaW5lYXIgcGFydCBiZWZvcmUgcHVsbGluZyBpdCwgYW5kIHRoZW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBub3cgY29ycmVjdGx5IHVzZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBpbnN0ZWFkIG9mIGFzc3VtaW5nIGBza2ItJmd0O2RhdGEgJiM0Mzsgc3Job2ZmYCBpcyB2YWxpZCwgYW5kIHRoZW4gY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIGltcHJvdmVtZW50IGluIHBvaW50ZXIgc2FmZXR5LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgdmFyaWFibGUgaW5zcGVjdGlvbi4gSW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYDogYHNyaGAgaXMgb2J0YWluZWQgdmlhIGBzZWc2X2dldF9zcmhgLCB3ZSBjb21wdXRlIGRhdGEgcG9pbnRlcnMsIGFuZCB0aGVuIGNoZWNrIGAhc3JoYC4gYHNyaF9zdGF0ZS0mZ3Q7aGRybGVuYCBpcyBhbHNvIHVwZGF0ZWQsIGFzIGlzIGBzcmhfc3RhdGUtJmd0O3ZhbGlkYC4gSW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCB3ZSBoYXZlIGBvbGRfbGVuYCwgaW5pdGlhbGl6ZWQgdG8gYHNrYi0mZ3Q7bGVuYCBiZWZvcmUgdGhlIGVuY2FwIGFuZCBjaGVja2VkIGFmdGVyLiBUaGUgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgIHBhdGggY29ycmVjdGx5IHVzZXMgYHBza2JfbWF5X3B1bGxgIGFuZCB0aGVuIGBfX3NrYl9wdWxsYC4KCkkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIGBvbGRfbGVuYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gYHNyaGAgaXMgYWxzbyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNlZzZfZ2V0X3NyaChza2IsIDApYC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlIGluIHBsYXkgaGVyZSwgc28gbm8gY2hhbmNlIG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZSBhbHNvIGRvbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55IHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4KClJlZ2FyZGluZyB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIEkmIzM5O20gY29tZm9ydGFibGUgdGhhdCBpdCYjMzk7cyB6ZXJvLiBUaGlzIGZpeCBpcyBzdHJpY3RseSBhYm91dCBmaXhpbmcgc3RhbGUgcG9pbnRlciBpc3N1ZXMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBsaW5lYXIgYnVmZmVyIGhhbmRsaW5nIGZvciBTUkggaW4gQlBGIGhlbHBlcnMuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGdvaW5nIHRvIGJlIG91ciBtYWluIHNhZmV0eSBuZXQsIGFuZCB0aGlzIGlzIGV4YWN0bHkgdGhlIHR5cGUgb2YgYnVnIGl0IGV4Y2VscyBhdCBkZXRlY3RpbmcuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0IGxvb2tzIGxpa2UgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrLCBvciBhIHN0cnVjdCBwYWRkaW5nIGlzc3VlLgoKT2theSwgbGV0JiMzOTtzIHNlZSwgZG9lcyB0aGlzIG1lZXQgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA/IExldCYjMzk7cyBjaGVjazogb3V0LW9mLWJvdW5kcywgTlVMTCBkZXJlZmVyZW5jZSwgZXRjLj8gWWVwLCBLQVNBTiBjYXRjaGVzIHRob3NlIGFuZCB0aGlzIGlzIHByZWNpc2VseSB3aGF0IHRoZSBwYXRjaCBpcyBmaXhpbmcuIEZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdHM/IENoZWNrLiBObyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8gbGVha3M/IENvcnJlY3QuCgpFdmVyeXRoaW5nIGhlcmUgc2VlbXMgY2xlYXIuIFRoZSBmaXggaXMgc291bmQsIHdlbGwtc2NvcGVkLCBhbmQgc2hvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBjYXN0aW5nIG9mIG9mZnNldHMgaW50byBza2ItXHUwMDNlZGF0YSB3aXRoIHNlZzZfZ2V0X3NyaCgpIGFuZCBwc2tiX21heV9wdWxsIGNoZWNrcyB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgbGluZWFyIGhlYWRlciBzYWZlbHkuXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cbi0gTG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYG9sZF9sZW5gIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGBza2ItXHUwMDNlbGVuYCBwcmlvciB0byByZWFkaW5nLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFkZHJlc3MgYnVmZmVyIGJvdW5kcywgcG9pbnRlciByZWNvbXB1dGF0aW9uLCBhbmQgbGluZWFyIGhlYWRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzdGFsZSBwb2ludGVyIGFuZCBidWZmZXIgYm91bmRhcnkgaXNzdWVzIGluIEJQRiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1JIKSBoZWxwZXJzIChicGZfdXBkYXRlX3NyaF9zdGF0ZSBhbmQgYnBmX2x3dF9zZWc2X2FjdGlvbikuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGNhc3Rpbmcgb2Ygb2Zmc2V0cyBpbnRvIHNrYi1cdTAwM2VkYXRhIHdpdGggc2VnNl9nZXRfc3JoKCkgYW5kIHBza2JfbWF5X3B1bGwgY2hlY2tzIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBsaW5lYXIgaGVhZGVyIHNhZmVseS5cbi0gSXQgcmVjb21wdXRlcyBCUEYgZGF0YSBwb2ludGVycyBhbmQgdXBkYXRlcyB0aGUgcGVyLUNQVSBTUkggc3RhdGUgd2hlbiB0aGUgc2tiIGJ1ZmZlciBleHBhbmRzIG9yIGNoYW5nZXMgbGVuZ3RoIGR1cmluZyBlbmNhcHN1bGF0aW9uLlxuLSBMb2NhbCB2YXJpYWJsZXMgc3VjaCBhcyBgb2xkX2xlbmAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gYHNrYi1cdTAwM2VsZW5gIHByaW9yIHRvIHJlYWRpbmcuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgYWRkcmVzcyBidWZmZXIgYm91bmRzLCBwb2ludGVyIHJlY29tcHV0YXRpb24sIGFuZCBsaW5lYXIgaGVhZGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTMuNjM1NTMwODMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzgwMTQzMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbHd0X3NlZzZfYWN0aW9uXCIsXG4gICAgXCJicGZfdXBkYXRlX3NyaF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN0YWxlIHBvaW50ZXIgYW5kIGJ1ZmZlciBib3VuZGFyeSBpc3N1ZXMgaW4gQlBGIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUkgpIGhlbHBlcnMgKGJwZl91cGRhdGVfc3JoX3N0YXRlIGFuZCBicGZfbHd0X3NlZzZfYWN0aW9uKS4gU3BlY2lmaWNhbGx5Olxcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGNhc3Rpbmcgb2Ygb2Zmc2V0cyBpbnRvIHNrYi1cXHUwMDNlZGF0YSB3aXRoIHNlZzZfZ2V0X3NyaCgpIGFuZCBwc2tiX21heV9wdWxsIGNoZWNrcyB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgbGluZWFyIGhlYWRlciBzYWZlbHkuXFxuLSBJdCByZWNvbXB1dGVzIEJQRiBkYXRhIHBvaW50ZXJzIGFuZCB1cGRhdGVzIHRoZSBwZXItQ1BVIFNSSCBzdGF0ZSB3aGVuIHRoZSBza2IgYnVmZmVyIGV4cGFuZHMgb3IgY2hhbmdlcyBsZW5ndGggZHVyaW5nIGVuY2Fwc3VsYXRpb24uXFxuLSBMb2NhbCB2YXJpYWJsZXMgc3VjaCBhcyBgb2xkX2xlbmAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gYHNrYi1cXHUwMDNlbGVuYCBwcmlvciB0byByZWFkaW5nLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgYWRkcmVzcyBidWZmZXIgYm91bmRzLCBwb2ludGVyIHJlY29tcHV0YXRpb24sIGFuZCBsaW5lYXIgaGVhZGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTMuNjM1NTM1NTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc3NjExNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMmNhZmY2NTczZDEwOTZmZGJkZjBkZDg3ZjA5Mjc5YWQ0Y2YxMGQxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDg1MTMxNjdhODU4YTguLmIwMzdkNzBlNWZlNjUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC03MDE3LDE1ICs3MDE3LDE2IEBAIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG4gXFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4tXFx0aW50IHNyaG9mZiA9IDA7XFxuK1xcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiBcXG4tXFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXFx1MDAzZWRhdGEgKyBzcmhvZmYpO1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4tXFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuLVxcdH1cXG4rXFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuK1xcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4rXFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuK1xcdGlmICghc3JoKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuK1xcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiB9XFxuIFxcbiBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG5AQCAtNzAzMyw2ICs3MDM0LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuIHtcXG4gXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG4gXFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4rXFx0dW5zaWduZWQgaW50IG9sZF9sZW47XFxuIFxcdGludCBoZHJvZmYgPSAwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtNzA1OCwzMiArNzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFxuIFxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4tXFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxcbitcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xcbitcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuK1xcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXHRcXHR9XFxuK1xcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbiBcXG4gXFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XFxuIFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiBcXG4tXFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbiBcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbiBcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG4gXFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4rXFx0XFx0b2xkX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG4tXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbiBcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XFxuIFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdFxcdG9sZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcXG4gXFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG4tXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbiBcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTQuMTQzOTk0NDY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MDU0NjIyODI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICAgIFwiYnBmX3VwZGF0ZV9zcmhfc3RhdGVcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGludGVybmFsIHN0YXRlIHVwZGF0ZSBmdW5jdGlvbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGluIG5ldC9jb3JlL2ZpbHRlci5jLiBJdCBjaGFuZ2VzIGhvdyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBpcyByZXRyaWV2ZWQgYW5kIHZhbGlkYXRlZCwgYWx0ZXJzIHNrYiBwdWxsaW5nL3BvaW50ZXIgcmVjYWxjdWxhdGlvbnMgb24gZGVjYXBzdWxhdGlvbiBhY3Rpb25zIChTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2KSwgYW5kIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpcyBpbnZva2VkIGFmdGVyIGVuY2Fwc3VsYXRpb24gYWN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgdmlhIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCBwcm9ncmFtcyBhdHRhY2hlZCB0byBJUHY2IHNlZzYgcm91dGVzIGluIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDJjYWZmNjU3M2QxMDk2ZmRiZGYwZGQ4N2YwOTI3OWFkNGNmMTBkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5iMDM3ZDcwZTVmZTY1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzAxNywxNSArNzAxNywxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4gXHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbi1cdGludCBzcmhvZmYgPSAwO1xuK1x0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMCkge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gTlVMTDtcbi1cdH0gZWxzZSB7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICsgc3Job2ZmKTtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cdTAwM2VzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuLVx0fVxuK1x0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG4rXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4rXHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuK1x0aWYgKCFzcmgpXG4rXHRcdHJldHVybjtcbitcbitcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiB9XG4gXG4gQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5AQCAtNzAzMyw2ICs3MDM0LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4ge1xuIFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbiBcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuK1x0dW5zaWduZWQgaW50IG9sZF9sZW47XG4gXHRpbnQgaGRyb2ZmID0gMDtcbiBcdGludCBlcnI7XG4gXG5AQCAtNzA1OCwzMiArNzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcbiBcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLVx0XHRpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpXG4rXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4rXHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4rXHRcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbitcdFx0fVxuK1x0XHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcbiBcbiBcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XG4gXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXG4tXHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxuIFx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcbiBcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbi1cdFx0aWYgKCFlcnIpXG4rXHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9sZF9sZW4pXG4gXHRcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxuIFx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbiBcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTQuMTQzOTk1Nzc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg1Mjc3MjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gd2UgaGF2ZSBhIGRpZmYuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5ICp3aGF0KiBjb2RlIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgZGlmZiBpcyBoaXR0aW5nIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiDigJMgdGhhdCdzIHRoZSBrZXJuZWwncyBmaWx0ZXJpbmcgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdHdvIGZ1bmN0aW9uczogYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggQlBGLXJlbGF0ZWQgdXBkYXRlcywgcG90ZW50aWFsbHkgYWZmZWN0aW5nIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaGFuZGxpbmcgd2l0aGluIHRoZSBsaWdodHdlaWdodCB0dW5uZWxzIChMV1QpIGNvbnRleHQuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFzIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGV2ZXJhZ2luZyBTUnY2IG9yIG90aGVyIExXVCBmZWF0dXJlcy5cblxuVG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlIGFuZCBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgcG9zc2libHkganVzdCBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIHBpcGVsaW5lIGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSdyZSBvcGVyYXRpbmcgb24uIEFyZSB0aGVyZSBhbnkgbmV3IGVycm9yIGNvbmRpdGlvbnMgYmVpbmcgaW50cm9kdWNlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcz8gV2hhdCBraW5kIG9mIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhcmlzZSBmcm9tIHRoZSBjaGFuZ2VzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgZGVlcGVyIGRpdmUgd2lsbCBiZSBjcnVjaWFsIGJlZm9yZSBJIGNhbiBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZGlmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MjAuOTk2NzcwMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwODMwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz03MDE2PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDMxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzI6QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzMy1cXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTAxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMDM6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9sd3Rfc2VnNl9hY3Rpb24sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzEwNC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTA1MT1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDU3LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTg6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTktXFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9hZGp1c3Rfc3JoOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMDoyMS4wNDk4NjExOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzg0MjA4MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGZpbHRlcmluZyBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDcwMDAgdG8gNzEwMCBvZiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGF0IEknbSBsb29raW5nIGF0IGZpbHRlcmluZyBjb2RlLCBJJ20gcHJvYmFibHkgaW50ZXJlc3RlZCBpbiBob3cgcGFja2V0cyBhcmUgYmVpbmcgcHJvY2Vzc2VkIGJhc2VkIG9uIHZhcmlvdXMgY3JpdGVyaWEuIExpbmVzIGluIHRoaXMgcmFuZ2UgbGlrZWx5IGRlYWwgd2l0aCBzb21lIGNyaXRpY2FsIGFzcGVjdCBvZiB0aGUgZmlsdGVyaW5nIHBpcGVsaW5lLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkLCBhbmQgdGhlIGNvbnRyb2wgZmxvdyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGZpbHRlcmluZyBsb2dpYyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkLiBJIHN1c3BlY3QgdGhpcyBtaWdodCBiZSBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgc28gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBCUEYgb3Igc29tZSBvdGhlciBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yaywgYnV0IEknbGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgdG8gYmUgc3VyZS4gSSdsbCBhcHByb2FjaCB0aGlzIG1ldGhvZGljYWxseSwgbWFraW5nIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGVhY2ggZnVuY3Rpb24gb3IgYmxvY2sgb2YgY29kZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MjQuNDM0MDcyNzg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDAwOlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXFx1MDAzZWRhdGEgKyBzcmhvZmYpO1xcbjcwMDE6XFx0XFxuNzAwMjpcXHRcXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xcbjcwMDM6XFx0XFx0cmV0dXJuIDA7XFxuNzAwNDpcXHR9XFxuNzAwNTpcXHRcXG43MDA2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xcbjcwMDc6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcyxcXG43MDA4OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuNzAwOTpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbjcwMTA6XFx0XFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuNzAxMTpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuNzAxMjpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuNzAxMzpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVcXG43MDE0OlxcdH07XFxuNzAxNTpcXHRcXG43MDE2OlxcdHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuNzAxNzpcXHR7XFxuNzAxODpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMTk6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDIwOlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbjcwMjE6XFx0XFxuNzAyMjpcXHRcXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcXG43MDIzOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MDI0OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbjcwMjU6XFx0XFx0aWYgKCFzcmgpXFxuNzAyNjpcXHRcXHRcXHRyZXR1cm47XFxuNzAyNzpcXHRcXG43MDI4OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuID0gc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG43MDI5OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjcwMzA6XFx0fVxcbjcwMzE6XFx0XFxuNzAzMjpcXHRCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG43MDMzOlxcdFxcdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcXG43MDM0OlxcdHtcXG43MDM1OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuNzAzNjpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjcwMzc6XFx0XFx0dW5zaWduZWQgaW50IG9sZF9sZW47XFxuNzAzODpcXHRcXHRpbnQgaGRyb2ZmID0gMDtcXG43MDM5OlxcdFxcdGludCBlcnI7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyaF9zdGF0ZS1cXHUwMDNlYmhfbG9jayk7XFxuNzA0MjpcXHRcXHRzd2l0Y2ggKGFjdGlvbikge1xcbjcwNDM6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcXG43MDQ0OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNDU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNDY6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSlcXG43MDQ3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNDg6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCAoc3RydWN0IGluNl9hZGRyICopcGFyYW0sIDApO1xcbjcwNDk6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfVDpcXG43MDUwOlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTI6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDUzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNTQ6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcXG43MDU1OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcXG43MDU2OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTg6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDU5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNjA6XFx0XFxuNzA2MTpcXHRcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNjM6XFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcXG43MDY0OlxcdFxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gTlVMTDtcXG43MDY1OlxcdFxcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MDY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDY3OlxcdFxcdFxcdH1cXG43MDY4OlxcdFxcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbjcwNjk6XFx0XFxuNzA3MDpcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaGRyb2ZmKTtcXG43MDcxOlxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjcwNzI6XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG43MDczOlxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuNzA3NDpcXHRcXG43MDc1OlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA3NjpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbjcwNzc6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XFxuNzA3ODpcXHRcXHRcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDc5OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDgwOlxcdFxcdFxcdG9sZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG43MDgxOlxcdFxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxcbjcwODI6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDgzOlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbjcwODQ6XFx0XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDg1OlxcdFxcbjcwODY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43MDg3OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxcbjcwODg6XFx0XFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA5MDpcXHRcXHRcXHRvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuNzA5MTpcXHRcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxcbjcwOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDkzOlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbjcwOTQ6XFx0XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDk1OlxcdFxcbjcwOTY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43MDk3OlxcdFxcdGRlZmF1bHQ6XFxuNzA5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MjQuNDM0NjA1MzE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTUxOTY1MDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoaXMga2VybmVsIGNvZGUsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIGVCUEYgYW5kIFNlZ21lbnQgUm91dGluZyB3aXRoIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBlQlBGIGFuZCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHNwZWNpZmljIGtlcm5lbCBjb250ZXh0LiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4gSSB3YW50IHRvIGtub3cgd2hlcmUgdGhleSdyZSBiZWluZyAqY2FsbGVkKiB3aXRoaW4gdGhlIGtlcm5lbCdzIGVCUEYgZnJhbWV3b3JrLCBhbmQsIGNyaXRpY2FsbHksIHdoYXQgS2NvbmZpZyBvcHRpb25zLCBpZiBhbnksIGFyZSBjb250cm9sbGluZyB0aGVpciBpbmNsdXNpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgYnVpbGQgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhlaXIgYXZhaWxhYmlsaXR5LiBVbmRlcnN0YW5kaW5nIHRob3NlIEtjb25maWcgb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgc29ydCBvZiBrZXJuZWwgY3VzdG9taXphdGlvbiBvciBmb3IgcG9ydGluZyBpdCB0byBhIG5ldyBwbGF0Zm9ybS5cblxuTmV4dCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSByZWxhdGlvbnNoaXBzIG5lYXIgdGhlIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCB2YXJpYWJsZSBhbmQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIE15IGd1ZXNzIGlzIHRoaXMgaXMgd2hlcmUgdGhlIFNSSCBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIG1hbmFnZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIEJQRiBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhvc2Ugc3RhdGUgdmFyaWFibGVzIC0gYW5kIEknbSBsb29raW5nIGZvciBhIGNsZWFyIGluZGljYXRpb24gb2YgaG93IGVCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggU1JIIG1hbmlwdWxhdGlvbiwgYXJlIGludGVncmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JrIGZpbHRlcmluZyBhbmQgZm9yd2FyZGluZyBwcm9jZXNzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIG1vZHVsZS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIHN0YXRlIHRyYW5zaXRpb24gaGFuZGxpbmcgaGVyZSwgaW4gcmVzcG9uc2UgdG8gZUJQRiBhY3Rpb25zIC0gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzMuOTU0MjU3Njg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzIyNDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfYnBmX3NyaF9zdGF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTY5NzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTc2LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6Njk3NzpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzgtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTY9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTgtXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDE5OlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyMC1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzI9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDM1LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAzNjpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzctXFx0dW5zaWduZWQgaW50IG9sZF9sZW47XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTEyPUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTE1LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzExNjpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTctXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzQuMDA3NTg0Njc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4Nzg0NDEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgZm9jdXNpbmcgb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgbXkgYWN0aW9uczpcblxuKipEZWx2aW5nIGludG8gdGhlIENvZGUncyBHdWFyZHJhaWxzKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGxpbmUgNjk3MCB0byA3MTUwLCBvciwgaWYgdGhhdCdzIG5vdCB0aGUgcmlnaHQgYXJlYSwgSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGdhemUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBvciwgZmFpbGluZyB0aGF0LCB0aGUgYEtjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjb250cm9sbGluZyB0aGUgY29tcGlsYXRpb24gb3IgaW5jbHVzaW9uIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGFsbW9zdCBjZXJ0YWluIEknbGwgZmluZCBteSBhbnN3ZXJzIGluIGAjaWZkZWZgIGd1YXJkcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBhdCBwbGF5LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGZlYXR1cmUgZmxhZyBvciBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IG9yIG5vdC4gRmluZGluZyB0aGUgc3BlY2lmaWMgc3ltYm9sIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3RhdGVtZW50cyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBzZWN0aW9uIGlzIGEgY2FyZWZ1bGx5IGNvbnRyb2xsZWQgcGllY2UsIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIG5ldHdvcmtpbmcgZmlsdGVyIG9yIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBub3QgYWx3YXlzIGRlc2lyZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlY29uZGl0aW9ucyB0aGF0IGRldGVybWluZSB3aGV0aGVyIGl04oCZcyBldmVuIHByZXNlbnQgaW4gdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzU4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzYuNDk1NDMwODUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3MjQxNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2X1NFRzZfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMC19XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMTojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTcxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzAtfTtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzItXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDUxPWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTMtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6OTA1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy05MDU1LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zODgtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jOjM4OTpcXHRcXHR7IFxcXCJDT05GSUdfSVBWNl9TRUc2X0JQRlxcXCIsIH0sXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIgYW5kIHJlbGF0ZWQgaGVscGVycyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz00OD1DT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo0OTpDT05GSUdfSVBWNl9TRUc2X0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzguNzEyNjgyODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4NTY1ODk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQ09ORklHX0lQVjZfU0VHNl9CUEYgS2NvbmZpZyBEZWZpbml0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZGVmaW5pdGlvbiBmb3IgYENPTkZJR19JUFY2X1NFRzZfQlBGYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbHMgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgSVB2NiBzZWdtZW50IHJvdXRpbmcgd2l0aCBCUEYgbGFuZHNjYXBlLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykg4oCTIHVzdWFsbHksIGl0J3Mgc29tZXdoZXJlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBvciBJUHY2LXJlbGF0ZWQgZGlyZWN0b3JpZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgbmVlZCB0byB1c2UgYGZpbmRgIG9yIGBncmVwYCBmcm9tIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZCBuYXJyb3cgZG93biB0aGUgbG9jYXRpb24uIE9uY2UgSSBoYXZlIHRoZSBmaWxlLCBJJ2xsIG5lZWQgdG8gcmVhZCB0aGUgZGVmaW5pdGlvbiB2ZXJ5IGNhcmVmdWxseS4gSSdsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uXG5cbiogICAqKlRoZSBkZXBlbmRlbmN5IGNoYWluOioqIFdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgb25lIHRvIGJlIGF2YWlsYWJsZT8gQXJlIHRoZXJlIGFueSBoYXJkIGRlcGVuZGVuY2llcyBsaWtlIGBDT05GSUdfSVBWNmAgb3Igc29mdCBkZXBlbmRlbmNpZXMgaW5mbHVlbmNpbmcgaXRzIGluY2x1c2lvbj8gVGhlIGRlcGVuZGVuY2llcyB3aWxsIHNob3cgbWUgd2hlcmUgdGhpcyBmZWF0dXJlIGlzIGxvZ2ljYWxseSBzaXR1YXRlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgY29uZmlndXJhdGlvbi5cbiogICAqKlRoZSBwcm9tcHQgc3RyaW5nOioqIFdoYXQgaXMgdGhlIGRlc2NyaXB0aXZlIHRleHQgdGhhdCB0aGUgdXNlciBzZWVzIHdoZW4gdGhleSdyZSBjb25maWd1cmluZyB0aGUga2VybmVsPyBEb2VzIHRoaXMgdGV4dCBjbGVhcmx5IGV4cGxhaW4gdGhlIHB1cnBvc2UgYW5kIGJlbmVmaXRzIG9mIGVuYWJsaW5nIGBDT05GSUdfSVBWNl9TRUc2X0JQRmA/IEEgd2VsbC13cml0dGVuIHByb21wdCBpcyBjcnVjaWFsIGZvciB1c2VyIHVuZGVyc3RhbmRpbmcuXG4qICAgKipUaGUgaGVscCB0ZXh0OioqIFRoZSBsb25nZXIgaGVscCB0ZXh0IGlzIHdoZXJlIHRoZSByZWFsIGRldGFpbCByZXNpZGVzLiBJdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgaW4tZGVwdGggZXhwbGFuYXRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBkb2VzLCBsaWtlbHkgdG91Y2hpbmcgb24gdG9waWNzIGxpa2UgZW5hYmxpbmcgQlBGLWJhc2VkIHByb2Nlc3Npbmcgb2YgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBkYXRhLCBob3cgaXQgcmVsYXRlcyB0byB0aGUgZGF0YSBwbGFuZSwgYW5kIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiU1J2NixcIiBcIkJQRixcIiBcImRhdGEgcGxhbmUsXCIgXCJwZXJmb3JtYW5jZSxcIiBhbmQgYW55IHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUgb3Igc3Vic3lzdGVtcy4gSXQgbWlnaHQgYWxzbyBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuXG4qICAgKipBbnkgZGVmYXVsdCB2YWx1ZXM6KiogRG9lcyB0aGUgb3B0aW9uIGhhdmUgYSBkZWZhdWx0IHZhbHVlIChlLmcuLCBgeWAsIGBuYCwgYG1gKT8gSXMgaXQgZGVmYXVsdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgbW9kdWxhcj8gSWYgc28sIHRoaXMgaGVscHMgZXN0YWJsaXNoIHdoZXRoZXIgaXQncyBjb25zaWRlcmVkIGEgY29yZSBwYXJ0IG9mIHRoZSBmZWF0dXJlIHNldCBvciBhbiBvcHRpb25hbCBlbmhhbmNlbWVudC5cbiogICAqKkxvY2F0aW9uIGluIHRoZSBrZXJuZWwgdHJlZToqKiBJbiB3aGljaCBwYXJ0IG9mIHRoZSBrZXJuZWwgZG9lcyBpdCByZXNpZGU/IEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIGtlcm5lbCBtb2R1bGVzP1xuKiAgICoqQW55IGFzc29jaWF0ZWQgc3ltYm9sIGRlZmluaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgbWFjcm9zIG9yIHN5bWJvbHMgZGVmaW5lZCB0aGF0IGRlcGVuZCBvbiB0aGlzIG9uZSBiZWluZyBzZXQ/IFRoYXQgY2FuIGhlbHAgaW5mZXIgdGhlIHNwZWNpZmljIGZlYXR1cmVzIHRoaXMgY29uZmlnIG9wdGlvbiBleHBvc2VzLlxuXG5XaXRoIHRoaXMgaW5mb3JtYXRpb24gaW4gaGFuZCwgSSBjYW4gY29uZmlkZW50bHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGFuZCBpbnRlZ3JhdGUgaXQgaW50byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJUHY2IHNlZ21lbnQgcm91dGluZyB3aXRoIEJQRiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgY2FuIGFsc28gZW5zdXJlIHRoYXQgbXkgY29uZmlndXJhdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIHVzZSBjYXNlIGFuZCBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIwOjQyLjU5ODM0NTMzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NTM1NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTMwMD1jb25maWcgSVBWNl9TRUc2X0hNQUNcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMDo0NC41OTM3MTMxOTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzMzg3MjU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGF0IHBsYXksIG15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyBhcm91bmQgbGluZSAzMTIgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZXMgdG8gb3RoZXJzLCB3aGF0IG90aGVyIHNldHRpbmdzIGVuYWJsZSBvciBkaXNhYmxlIGl0LCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBhbmQgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucy4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSBicmVhZGNydW1icy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIwOjQ2LjUyNzU4ODM0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMjA6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDMyMTpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDMyMjpcXHRcXHRoZWxwXFxuIDMyMzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMzI0OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uXFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzI3OlxcdFxcbiAzMjg6XFx0Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG4gMzI5OlxcdFxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NDYuNTI3Njg4NDA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0OTI1OTc4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgY29uZmlnIElQVjZfU0VHNl9CUEZgIG9wdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQgaGFzIGRlcGVuZGVuY2llcy4gUmlnaHQsIGl0IHJlbGllcyBvbiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQsIG9mIGNvdXJzZSwgSVB2NiBpdHNlbGYgYmVpbmcgZW5hYmxlZCwgd2hpY2ggaXMgYElQVjYgPSB5YC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYmVjYXVzZSBzZWdtZW50IHJvdXRpbmcgaXMgYW4gSVB2NiBleHRlbnNpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBiaXQgbW9yZSBhYm91dCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgc28gSSBzaG91bGQgcHJvYmFibHkganVtcCBpbnRvIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gdGhlcmUuIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywgd2hhdCBleGFjdGx5IGl0IGVuYWJsZXMsIGFuZCBob3BlZnVsbHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyB3aG9sZSBzZWdtZW50IHJvdXRpbmcgaW1wbGVtZW50YXRpb24gd29ya3Mgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIwOjUwLjAyMDI4ODU4MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFxuIDI4NjpcXHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxuIDI4NzpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMjg4OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyODk6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDI5MDpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDI5MTpcXHRcXHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG4gMjkyOlxcdFxcdGhlbHBcXG4gMjkzOlxcdFxcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XFxuIDI5NDpcXHRcXHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxcbiAyOTU6XFx0XFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcXG4gMjk2OlxcdFxcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjk5OlxcdFxcbiAzMDA6XFx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxuIDMwMTpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbiAzMDI6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDMwMzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuIDMwNDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gMzA1OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuIDMwNjpcXHRcXHRoZWxwXFxuIDMwNzpcXHRcXHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxcbiAzMDg6XFx0XFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXFxuIDMwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NTAuMDIwMzk0MTUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjIzNjU1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRUc2IEJQRiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgSSBzZWUgdGhhdCBgSVBWNl9TRUc2X0JQRmAgaXMgb25seSBlbmFibGVkIHdoZW4gYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBJUFY2YCBhcmUgc2V0IHRvICd5Jy4gTWFrZXMgc2Vuc2UuIEFuZCwgb2YgY291cnNlLCBCUEYgbmVlZHMgYEJQRl9TWVNDQUxMYCBlbmFibGVkIGFzIHdlbGwuIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIGZvY3VzaW5nIG9uIHRoZSBwYXRjaCBpdHNlbGYsIEkgY2FuIHNlZSB0aGV5J3ZlIHVwZGF0ZWQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCB0byB1c2UgYHNlZzZfZ2V0X3NyaGAgYW5kIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBzdHJlYW1saW5lIHRoZSByZXRyaWV2YWwgb2YgdGhlIFNSSCBpbmZvcm1hdGlvbi4gVGhlIHByZXZpb3VzIG1ldGhvZCBvZiBzZWFyY2hpbmcgZm9yIHRoZSBTUkggdXNpbmcgYGlwdjZfZmluZF9oZHJgIHNlZW1zIHRvIGhhdmUgYmVlbiByZW1vdmVkLCB3aGljaCBwcm9iYWJseSBtZWFucyB0aGV5IGFyZSBvcHRpbWl6aW5nIGl0LiBUaGV5IGFsc28gYWRkZWQgYSBjaGVjayBmb3IgYW4gZXhpc3RpbmcgU1JILlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbi4gVGhpcyBpcyBhIEJQRiBoZWxwZXIgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zLiBJJ20gdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGRpZmZlcmVudCBgY2FzZWAgc3RhdGVtZW50cyBoZXJlLCBzcGVjaWZpY2FsbHkgdGhlIGFkanVzdG1lbnRzIGJlaW5nIG1hZGUgdG8gdGhlIGBza2JgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBTRUc2IGFjdGlvbnMuIEl0IHNlZW1zIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBTUkggc3RhdGUgaXMgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgcG90ZW50aWFsbHkgcHVsbGluZyBoZWFkZXJzIG9yIGVuY2Fwc3VsYXRpbmcgcGFja2V0cy4gVGhlIGFkZGl0aW9uIG9mIGBwc2tiX21heV9wdWxsYCBpbnN0ZWFkIG9mIGBwc2tiX3B1bGxgIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLCBhbmQgbWFrZXMgc3VyZSB0aGUgcHVsbCBvcGVyYXRpb24gZG9lc24ndCBjYXVzZSBhIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9uLiBJdCBtYWtlcyBzdXJlIHRoYXQgcHVsbGluZyBhIGhlYWRlciBkb2Vzbid0IGdvIGJleW9uZCB0aGUgcGFja2V0J3MgY3VycmVudCBkYXRhIGJvdW5kYXJpZXMuIFRoZW4sIHRoZSBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGdldHMgY2FsbGVkIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgY29ycmVjdC5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgYGx3dF9zZWc2bG9jYWxgIGlzIGFjdHVhbGx5IGV4ZWN1dGVkLiBMZXQgbWUgc2VhcmNoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgY29kZWJhc2UgZm9yIHRoZSBgc2VnNl9sb2NhbF9gIHByZWZpeCBvciB0aGF0IGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHR5cGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNoYW5nZXMgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBsb2NhbCBzZWdtZW50IHJvdXRpbmcgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NTUuNDgyNzYyMTIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3NTM1ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q9MTg9ZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBmb290bm90ZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM1LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLStcXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q6MTM2OnwgYGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgYCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgbHd0X3NlZzZsb2NhbGBgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHxcXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM3LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLStcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MjU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBsd3RfeG1pdCxcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI2LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6Mjc6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGx3dF9zZWc2bG9jYWwsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XFx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVxcdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTA3OT1zdGF0aWMgaW50IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05MTE0LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcXG5rZXJuZWwvYnBmL2J0Zi5jOjkxMTU6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxua2VybmVsL2JwZi9idGYuYy05MTE2LVxcdFxcdHJldHVybiBCVEZfS0ZVTkNfSE9PS19MV1Q7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODQzPXN0YXRpYyBib29sIGlzX25ldF9hZG1pbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTEtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI4NTI6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1My1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfU0tCOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4MTk9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19kaXJlY3RfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODI4LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfT1VUOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODI5OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODMwLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg4MT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTItXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTQtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzNi1cXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNzpcXHRwID0gYnBmX3Byb2dfZ2V0X3R5cGUoZmQsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXFx0aWYgKElTX0VSUihwKSkge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVxcdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcXHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXFx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0yMDI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcm9nX3R5cGVfbmFtZVtdID0ge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjEtXFx0W0JQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUl1cXHQ9IFxcXCJjZ3JvdXBfc29ja19hZGRyXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjIyMjpcXHRbQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMXVxcdFxcdD0gXFxcImx3dF9zZWc2bG9jYWxcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIzLVxcdFtCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTJdXFx0XFx0PSBcXFwibGlyY19tb2RlMlxcXCIsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTcxNTc9c3RhdGljIHN0cnVjdCB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzAtXFx0eyBCUEZfUFJPR19UWVBFX0xXVF9PVVQsICAgICAgICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzE3MTpcXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcyLVxcdHsgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgICAgICAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTEwMz1zdGF0aWMgaW50IHByb2JlX3Byb2dfbG9hZChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTc4LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzoxNzk6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTgwLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYz0yMjU9dm9pZCB0ZXN0X3ZlcmlmX3NjYWxlX3NlZzZfbG9vcCgpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI2LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYzoyMjc6XFx0c2NhbGVfdGVzdChcXFwidGVzdF9zZWc2X2xvb3AuYnBmLm9cXFwiLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGZhbHNlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjgtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jPTIwPXN0YXRpYyBzdHJ1Y3Qgc2VjX25hbWVfdGVzdCB0ZXN0c1tdID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVxcdHtcXFwibHd0X3htaXRcXFwiLCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo0MzpcXHR7XFxcImx3dF9zZWc2bG9jYWxcXFwiLCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAwfSwgey1FSU5WQUwsIDB9IH0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQ0LVxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NTcuMjgwMzA3Njc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MzI1OTQ4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIFByb2dyYW0gVHlwZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW0gdHlwZS4gUmlnaHQsIHRoYXQncyB0aGUgb25lIHVzZWQgc3BlY2lmaWNhbGx5IGZvciBTUnY2IChzZWc2KSBsb2NhbCBhY3Rpb24gcHJvY2Vzc2luZywgSSByZW1lbWJlciBpdCdzIHJlbGF0ZWQgdG8gdGhvc2UgbGlnaHR3ZWlnaHQgdHVubmVscywgdXNpbmcgdGhpbmdzIGxpa2UgYFNFRzZfTE9DQUxfQUNUSU9OX0JfUEZgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgSSBjYW4gdGVzdCB0aGlzIHR5cGUgb2YgcHJvZ3JhbS5cblxuSG1tLCBJIGtub3cgYGJwZl9wcm9nX3Rlc3RfcnVuYCBhbmQgaXRzIHJlbGF0ZWQgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfUlVOYCwgYXJlIHVzZWQgZm9yIGV4ZWN1dGluZyBMV1QgcHJvZ3JhbXMgYW5kIHBlcmZvcm1pbmcgcm91dGUgbG9va3Vwcy4gSXQgbG9va3MgbGlrZSBpdCBjYW4gYmUgcnVuIHRocm91Z2ggbmV0bGluaywgaXAgcm91dGUgY29tbWFuZHMsIHBhY2tldCByZWNlaXZlLCBhbmQgdGhlIEJQRiB0ZXN0IHJ1biBmZWF0dXJlIGl0c2VsZi5cblxuTXkgbWFpbiBxdWVzdGlvbiBub3cgaXM6ICpjYW4qIGBCUEZfUFJPR19URVNUX1JVTmAgYWN0dWFsbHkgYmUgdXNlZCB0byB0ZXN0IGEgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgcHJvZ3JhbT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX3Byb2dfdGVzdF9ydW5gIC0gSSdsbCBjaGVjayBgbmV0L2JwZi90ZXN0X3J1bi5jYCBvciB3aGVyZXZlciB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcHJvZ3JhbSB0eXBlcyB0byBzZWUgaWYgaXQncyBjb21wYXRpYmxlIHdpdGggdGhpcyBTUnY2IGxvY2FsIGFjdGlvbiBCUEYgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MjAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDQuMTEyOTA2Nzk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU4MDI1NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDQuNDU4NzE5MTA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODE1Mzc1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gQlBGIFRlc3QgRXhlY3V0aW9uKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgdGVzdCBleGVjdXRpb24gcHJvY2VkdXJlcyByZWxhdGVkIHRvIEJQRi4gSSdtIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGUgcmVsZXZhbnQgZmlsZXMgYmU/ICBMaWtlbHkgY2FuZGlkYXRlcyBqdW1wIHRvIG1pbmQ6IGB0ZXN0X3J1bl9za2JgLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbHVya2luZyB3aXRoaW4gdGhlIGBuZXQvYnBmL2AgZGlyZWN0b3J5LiAgTGV0J3Mgc3RhcnQgYnkgZXhwbG9yaW5nIHRoYXQgYG5ldC9icGYvYCBwYXRoLiBUaGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRlc3RzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0J3MgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDQ2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDYuMjQwMjYwMjE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJuZXQvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJwZl9kdW1teV9zdHJ1Y3Rfb3BzLmNcIixcbiAgICBcInRlc3RfcnVuLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDYuMjQwMzEzMjk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTMxOTk5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFRlc3RpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9icGYvdGVzdF9ydW4uY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIEJQRiB0ZXN0IGV4ZWN1dGlvbiBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRlc3QgZnJhbWV3b3JrIGlzIHNldCB1cCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBhbmQgcnVuLCBhbmQgd2hhdCBraW5kIG9mIHZlcmlmaWNhdGlvbiBpcyBkb25lIG9uIHRoZSByZXN1bHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZXhwZWN0aW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBmaWxlIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMgbGlrZSBgYnBmX3Byb2dfbG9hZGAsIGBicGZfYXR0YWNoYCwgYW5kIGFueSBjYWxscyByZWxhdGVkIHRvIHJlc3VsdCBjb21wYXJpc29uIG9yIGxvZ2dpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIG92ZXJhbGwgc3RydWN0dXJlIOKAkyB0aGUgdGVzdCBzZXR1cCwgdGhlIHByb2dyYW0gZXhlY3V0aW9uLCBhbmQgdGhlIHZhbGlkYXRpb24gc3RlcHMuIEknbSBpbnRlcmVzdGVkIGluIGFueSBjbGV2ZXJuZXNzIGhlcmUsIGFueSBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCBvciBpbXByb3ZlZC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMTowOC4zNTM1MTcxNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTM1NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxXVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jPTEwMzU9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY1LVxcdFxcdGJyZWFrO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDY2OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfSU46XFxubmV0L2JwZi90ZXN0X3J1bi5jOjEwNjc6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XFxubmV0L2JwZi90ZXN0X3J1bi5jOjEwNjg6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY5LVxcdFxcdGlzX2x3dCA9IHRydWU7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA4Ny1cXHRcXHRpZiAoY3R4LVxcdTAwM2VkYXRhX2VuZCkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDg4OlxcdFxcdFxcdC8qIE5vbi1saW5lYXIgTFdUIHRlc3RfcnVuIGlzIHVuc3VwcG9ydGVkIGZvciBub3cuICovXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEwODktXFx0XFx0XFx0aWYgKGlzX2x3dCkge1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMTItXFxubmV0L2JwZi90ZXN0X3J1bi5jOjEyMTM6XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MV1RfWE1JVCkge1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjE0LVxcdFxcdGlmICghaXB2Nl9tb2RfZW5hYmxlZCgpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjA4LjQwMTA2MjAzMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI2MDcxODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgTFdUX1NFRzZMT0NBTCBFeGVjdXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJ3aGVyZSAqZXhhY3RseSogZG9lcyBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBnZXQgaXRzIGhvb2tzIGluIHRoZSBrZXJuZWw/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4ZWN1dGlvbiBwYXRoIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgY2FuJ3QganVzdCBiZSBzYXRpc2ZpZWQgd2l0aCBhIGdlbmVyYWwgZGVzY3JpcHRpb247IEkgd2FudCB0aGUgc3BlY2lmaWMgY2FsbCBzdGFja3MsIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCB0aGUgcHJlY2lzZSBjb250ZXh0cyBpbiB3aGljaCB0aGVzZSBCUEYgcHJvZ3JhbXMgYXJlIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGlzIGRlc2lnbmVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlIGR1cmluZyB0aGUgY29kZSBkZXZlbG9wbWVudCBmb3IgbWUgdG8gb3B0aW1pemUgbXkgb3duIGNvZGUgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MTAuMjI3MTM2MDM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY3MzcyODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx3dF9zZWc2bG9jYWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTE6bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTIte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzI9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc3OlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc4LVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGx3dF9zZWc2bG9jYWxfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODMtfTtcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdD0yNz1QUk9HIENPTU1BTkRTXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QtNDgtfCAgICAgKipjZ3JvdXAvc29jayoqIHwgKipjZ3JvdXAvZGV2KiogfCAqKmx3dF9pbioqIHwgKipsd3Rfb3V0KiogfCAqKmx3dF94bWl0KiogfFxcbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdDo0OTp8ICAgICAqKmx3dF9zZWc2bG9jYWwqKiB8ICoqc29ja29wcyoqIHwgKipza19za2IqKiB8ICoqc2tfbXNnKiogfCAqKmxpcmNfbW9kZTIqKiB8XFxudG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0LTUwLXwgICAgICoqY2dyb3VwL2JpbmQ0KiogfCAqKmNncm91cC9iaW5kNioqIHwgKipjZ3JvdXAvcG9zdF9iaW5kNCoqIHwgKipjZ3JvdXAvcG9zdF9iaW5kNioqIHxcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sPTI1Nj1fYnBmdG9vbCgpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbC00OTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZ3JvdXAvZGV2IGx3dF9pbiBsd3Rfb3V0IGx3dF94bWl0IFxcXFxcXG50b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbDo0OTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsd3Rfc2VnNmxvY2FsIHNvY2tvcHMgc2tfc2tiIHNrX21zZyBsaXJjX21vZGUyIFxcXFxcXG50b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbC00OTUtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZ3JvdXAvYmluZDQgY2dyb3VwL2JpbmQ2IFxcXFxcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz0yNTQyPXN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMjU3Ni1cXHRcXHRcXFwiICAgICAgICAgICAgICAgICBjZ3JvdXAvc29jayB8IGNncm91cC9kZXYgfCBsd3RfaW4gfCBsd3Rfb3V0IHwgbHd0X3htaXQgfFxcXFxuXFxcIlxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzoyNTc3OlxcdFxcdFxcXCIgICAgICAgICAgICAgICAgIGx3dF9zZWc2bG9jYWwgfCBzb2Nrb3BzIHwgc2tfc2tiIHwgc2tfbXNnIHwgbGlyY19tb2RlMiB8XFxcXG5cXFwiXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTI1NzgtXFx0XFx0XFxcIiAgICAgICAgICAgICAgICAgc2tfcmV1c2Vwb3J0IHwgZmxvd19kaXNzZWN0b3IgfCBjZ3JvdXAvc3lzY3RsIHxcXFxcblxcXCJcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVxcdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXFx0PSBcXFwiY2dyb3VwX3NvY2tfYWRkclxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XFx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cXHRcXHQ9IFxcXCJsd3Rfc2VnNmxvY2FsXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVxcdFxcdD0gXFxcImxpcmNfbW9kZTJcXFwiLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xMDEyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9zZWNfZGVmIHNlY3Rpb25fZGVmc1tdID0ge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDE5NC1cXHRTRUNfREVGKFxcXCJsd3RfeG1pdFxcXCIsXFx0XFx0TFdUX1hNSVQsIDAsIFNFQ19OT05FKSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwMTk1OlxcdFNFQ19ERUYoXFxcImx3dF9zZWc2bG9jYWxcXFwiLFxcdExXVF9TRUc2TE9DQUwsIDAsIFNFQ19OT05FKSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTk2LVxcdFNFQ19ERUYoXFxcInNvY2tvcHNcXFwiLFxcdFxcdFNPQ0tfT1BTLCBCUEZfQ0dST1VQX1NPQ0tfT1BTLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jLTMyLSNkZWZpbmUgTkVUTlNfQkFTRSBcXFwibHd0LXNlZzZsb2NhbC1cXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jOjMzOiNkZWZpbmUgQlBGX0ZJTEUgXFxcInRlc3RfbHd0X3NlZzZsb2NhbC5icGYub1xcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmMtMzQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM9NDM9c3RhdGljIGludCBzZXR1cCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jLTExMy0jZGVmaW5lIENMSUVOVF9QT1JUIDIxMjFcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM6MTE0OnZvaWQgdGVzdF9sd3Rfc2VnNmxvY2FsKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jLTExNS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDItXFx0e1xcXCJsd3RfeG1pdFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAwfSwgey1FSU5WQUwsIDB9IH0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlxcdHtcXFwibHd0X3NlZzZsb2NhbFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDQtXFx0e1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmM9MTgxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFkZF90bHYoc3RydWN0IF9fc2tfYnVmZiAqc2tiLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmMtMjI2LS8vIGFuZCBhcHBseSBFbmQuWCBhY3Rpb24gdG8gZmM0Mjo6MVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlZzZfbG9vcC5jOjIyNzpTRUMoXFxcImx3dF9zZWc2bG9jYWxcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlZzZfbG9vcC5jLTIyOC1pbnQgX19hZGRfZWdyX3goc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxMS45OTQ1MTQ1NjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1NjI1MzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHdpdGggdGhhdCBgc2VnNl9sb2NhbC5jYCBtb2R1bGUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEJQRjpcblxuKipEaXZpbmcgaW50byBTRUc2IGFuZCBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBCUEYgcHJvZ3JhbSB0eXBlIGlzIGF0dGFjaGVkIGFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgbG9jYWwgcG9saWNpZXMuIE15IHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMgd2l0aCB0aGlzIGxldmVsIG9mIGtlcm5lbCBpbnRlcmFjdGlvbiwgaXMgdGhlIHNvdXJjZSBjb2RlOiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBkaWcgaW4gdG8gZmluZCB0aGUgaG9va3MgYW5kIGV4ZWN1dGlvbiBwb2ludHMuIEl0J3MgYSBrZXkgZmlsZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgU1J2NiBsb2NhbCBwb2xpY3kgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaW52b2x2ZSBvciByZWxhdGUgdG8gYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAuIFRpbWUgdG8gcm9sbCB1cCB0aGUgc2xlZXZlcyBhbmQgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxNC41NTA3NzA0NzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg5NTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDQ3LVxcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ0ODpcXHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDQ5LVxcdCAqL1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTctXFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4OlxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXFx1MDAzZWJwZi5wcm9nLCBza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDU5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxNC42NjQ2NzExMjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM4ODI1NDQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gc2VnNl9sb2NhbC5jOiBUaGUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBQdXp6bGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdtIGJldHRpbmcgaXQncyB0aGUgZXhpdCBwb2ludCBhZnRlciB0aGUgQlBGIHByb2Nlc3Npbmcgb2YgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGxvY2FsbHkuXG5cblNvLCBsZXQncyByZWZyZXNoOiBhbiBJUHY2IHBhY2tldCB3aXRoIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBjb21lcyBpbi4gSXQncyBiZWVuIHByb2Nlc3NlZCBieSBhIHByZWNlZGluZyBCUEYgcHJvZ3JhbSAobGlrZWx5IGluIHRoZSBpbnB1dCBwYXRoIHNvbWV3aGVyZSwgdGhvdWdoIEknbGwgaGF2ZSB0byB0cmFjZSB0aGF0IGFnYWluKSwgYW5kIG5vdyB3ZSdyZSBoZXJlLiBgaW5wdXRfYWN0aW9uX2VuZF9icGZgICpzaG91bGQqIGJlIHRoZSBlbmQgb2YgdGhhdCBsb2NhbCBwcm9jZXNzaW5nLiBNeSBndXQgc2F5cyB0aGlzIGlzIHdoZXJlIHdlJ3JlIGdvaW5nIHRvIGNsZWFuIHVwIGFueSBzdGF0ZSwgZGV0ZXJtaW5lIHdoZXJlIHRvIGZvcndhcmQgdGhlIHBhY2tldCBuZXh0IChsaWtlbHkgYmFzZWQgb24gdGhlIG91dGNvbWUgb2YgdGhlIEJQRiwgYnV0IEkgbmVlZCB0byBjb25maXJtKS5cblxuSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRvIHRoZSBza2IgKHNvY2tldCBidWZmZXIpIGFuZCB0aGUgZmxvdyBtZXRhZGF0YS4gRG9lcyBpdCBtb2RpZnkgYW55IGZpZWxkcyB3aXRoaW4gdGhlIHNrYj8gSXMgaXQgc2V0dGluZyB1cCB0aGUgbmV4dCBob3A/IERvZXMgaXQgY2FsbCBpbnRvIHNvbWUgb3RoZXIgZnVuY3Rpb24gcmVsYXRlZCB0byBmb3J3YXJkaW5nLCBvciBtYXliZSBhIHJvdXRpbmcgbG9va3VwPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gYHNrYi1cdTAwM2VkZXZgLCBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCwgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNSSCBpdHNlbGYsIGFuZCBjcml0aWNhbGx5LCBob3cgdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGFsb25nLiBJZiBpdCdzIEJQRiBiYXNlZCwgdGhlbiBJJ20gbG9va2luZyBmb3IgdGhlIG91dGNvbWUgb2YgdGhhdCBCUEYgcHJvY2Vzc2luZy4gV2hhdCdzIHBhc3NlZCB0byB0aGUgQlBGIHByb2dyYW0sIHdoYXQncyByZXR1cm5lZCwgYW5kIHdoYXQncyBkb25lIHdpdGggdGhhdCByZXN1bHQuIERvZXMgaXQgZGVjaWRlIHRoZSBmb3J3YXJkaW5nIG9yIGRvZXMgdGhpcyBjYWxsIHRoZSBmb3J3YXJkaW5nIHBhdGggd2l0aCB0aGF0IHJlc3VsdD9cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gRG9lcyBpdCBoYW5kbGUgQlBGIGVycm9ycyBncmFjZWZ1bGx5PyBXaGF0IGhhcHBlbnMgaWYgdGhlcmUncyBhIHByb2JsZW0gd2l0aCB0aGUgU1JIIGl0c2VsZj8gSXMgaXQgZHJvcHBlZCwgcmVyb3V0ZWQsIG9yIGxvZ2dlZD8gSSBleHBlY3QgZXJyb3IgY29kZXMgdG8gYmUgaGFuZGxlZCBlbGVnYW50bHkuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBTUnY2IHN0YWNrLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZSwgaW50ZXJmYWNlIHNlbGVjdGlvbiwgYW5kIG1heWJlIGV2ZW4gc29tZSBhY2NvdW50aW5nIG9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGF0IHRoaXMgc3RhZ2UuXG5cblVsdGltYXRlbHksIEkgZXhwZWN0IHRvIHNlZSBhIGNhcmVmdWxseSBvcmNoZXN0cmF0ZWQgc2VxdWVuY2UgdGhhdCBlbnN1cmVzIHRoYXQgdHJhZmZpYyBhcnJpdmVzIHdoZXJlIGl0IG5lZWRzIHRvIGJlIHdpdGggYWxsIHRoZSBTUnY2IG1hZ2ljIGludGFjdCBhbmQgdGhhdCB0aGUgcGFja2V0IGlzIHRoZW4gZm9yd2FyZGVkIG9yIHByb2Nlc3NlZCBsb2NhbGx5LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxOTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxOS4wNTI5MzEwNzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDMwOlxcdHN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNDMxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4xNDMyOlxcdHtcXG4xNDMzOlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZTtcXG4xNDM0OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbjE0MzU6XFx0XFx0aW50IHJldDtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcXG4xNDM4OlxcdFxcdGlmICghc3JoKSB7XFxuMTQzOTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDQwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NDE6XFx0XFx0fVxcbjE0NDI6XFx0XFx0YWR2YW5jZV9uZXh0c2VnKHNyaCwgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyKTtcXG4xNDQzOlxcdFxcbjE0NDQ6XFx0XFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXFxuMTQ0NTpcXHRcXHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcXG4xNDQ2OlxcdFxcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXFxuMTQ0NzpcXHRcXHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXFxuMTQ0ODpcXHRcXHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxcbjE0NDk6XFx0XFx0ICovXFxuMTQ1MDpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDUxOlxcdFxcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuMTQ1MjpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4xNDUzOlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuID0gc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4xNDU0OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQ1NzpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMTQ1ODpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVxcdTAwM2VicGYucHJvZywgc2tiKTtcXG4xNDU5OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE0NjA6XFx0XFxuMTQ2MTpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbjE0NjI6XFx0XFx0Y2FzZSBCUEZfT0s6XFxuMTQ2MzpcXHRcXHRjYXNlIEJQRl9SRURJUkVDVDpcXG4xNDY0OlxcdFxcdFxcdGJyZWFrO1xcbjE0NjU6XFx0XFx0Y2FzZSBCUEZfRFJPUDpcXG4xNDY2OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNDY3OlxcdFxcdGRlZmF1bHQ6XFxuMTQ2ODpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImJwZi1zZWc2bG9jYWw6IElsbGVnYWwgcmV0dXJuIHZhbHVlICV1XFxcXG5cXFwiLCByZXQpO1xcbjE0Njk6XFx0XFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxOS4wNTMxODc2MThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA1NDA1NTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBhbmQgRnV6emluZyBhIEJQRi9JUHY2IFNlZzYgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGZyYW5rbHksIGl0J3MgcHJldHR5IHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgYW5kIEJQRiBzdWJzeXN0ZW0gc3R1ZmYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gaG93IGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgaXMgY2FsbGVkLiBJdCdzIHVzZWQgaW4gdGhlIElQdjYgc2VnNiBsb2NhbCBhY3Rpb24gaGFuZGxlciwgc3BlY2lmaWNhbGx5IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQlBGYC4gVGhpcyBtZWFucyBJUHY2IHJvdXRlcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZXNlIHNlZzZsb2NhbCBhY3Rpb25zIHVzaW5nIHRoZSBzdGFuZGFyZCBgcnRuZXRsaW5rYCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgUlRNX05FV1JPVVRFYCB3aXRoIGBSVEFfRU5DQVBgIHNldCBmb3IgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CUEZgLiBXaGVuIElQdjYgcGFja2V0cyBhcnJpdmUsIGZvciBleGFtcGxlIGZyb20gYSBgdHVuL3RhcGAsIGB2ZXRoYCwgb3IgbG9vcGJhY2sgaW50ZXJmYWNlLCBgc2VnNl9sb2NhbF9pbnB1dGAgZXhlY3V0ZXMgYGlucHV0X2FjdGlvbl9lbmRfYnBmYC4gVGhpcyB0aGVuIHJ1bnMgdGhlIEJQRiBwcm9ncmFtLCB3aGljaCBpdHNlbGYgY2FsbHMgdGhlIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiBgc3l6a2FsbGVyYCBldmVuIHJlYWNoIHRoaXM/IExldCdzIGJyZWFrIGl0IGRvd246IEl0J3MgZGVmaW5pdGVseSBwb3NzaWJsZSB0byBsb2FkIEJQRiBwcm9ncmFtcyAoYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGApLiBJdCBjYW4gYWxzbyBzZXQgdXAgSVB2NiByb3V0ZXMgd2l0aCBzZWc2IGVuY2Fwc3VsYXRpb24gYW5kIGxvY2FsIGFjdGlvbnMgdmlhIE5ldGxpbmsgKGBSVE1fTkVXUk9VVEVgKS4gTW9yZW92ZXIsIGBzeXprYWxsZXJgIGNhbiBzZW5kIElQdjYgcGFja2V0cyB3aXRoIFNSSCB2aWEgYHR1bi90YXBgIG9yIHJhdyBzb2NrZXRzLiBUaGUgbW9kaWZpZWQgY29kZSBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgdGhlIHN0YXRpYyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCB0aGUgQlBGIGhlbHBlciBgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uYCBpbiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAuXG5cbkkgbmVlZCB0byBzY3J1dGluaXplIHdoYXQgd2FzIGFjdHVhbGx5IGNoYW5nZWQgaW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBJbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCB0aGUgb2xkIGNvZGUgY2hlY2tlZCBmb3IgdGhlIFNSSCBoZWFkZXIsIHdoZXJlYXMgdGhlIHVwZGF0ZWQgY29kZSBjYWxscyBgc2VnNl9nZXRfc3JoKHNrYiwgMClgIGFuZCBjb21wdXRlcyB0aGUgZGF0YSBwb2ludGVycyB1c2luZyBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYC4gVGhlcmUncyBub3cgYW4gZWFybHkgcmV0dXJuIGlmIGBzcmhgIGlzIE5VTEwgYW5kIGBzcmhfc3RhdGUtXHUwMDNldmFsaWRgIGlzbid0IHJlc2V0IHRvIGBmYWxzZWAuIEFsc28sIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGlzIGNhbGxlZCBldmVuIGlmIGBzcmhgIGlzIE5VTEwuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YCB1c2VzIGBwc2tiX21heV9wdWxsYCBpbnN0ZWFkIG9mIGBwc2tiX3B1bGxgIHRvIGhhbmRsZSB0aGUgSVB2NiBoZWFkZXIgc2l6ZSBiZWZvcmUgcHVsbGluZyB0aGUgcGFja2V0LiBJbiBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCBhbmQgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUGAsIHRoZSBjb2RlIG5vdyBjaGVja3MgaWYgdGhlIGxlbmd0aCBvZiBgc2tiYCBpcyBkaWZmZXJlbnQgYmVmb3JlIGNhbGxpbmcgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC5cblxuQ29uc2lkZXJpbmcgdGhlc2UgbW9kaWZpY2F0aW9ucywgdGhlIHBhY2tldCBwYXJzaW5nLCBza2IgcHVsbC9wb2ludGVyIHJlY2FsY3VsYXRpb25zLCBzdGF0ZSB1cGRhdGVzLCBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBjb25kaXRpb25zIGZvciBpbnZva2luZyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFyZSBhbGwgaW4gcGxheS4gSXQncyBub3cgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRoZXNlIG5ldyBjaGFuZ2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCBhbmQgdG90YWxseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuV2Ugc2hvdWxkIGNoZWNrIHNvbWUgcmVxdWlyZWQgY29uZmlnczogYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCAod2hpY2ggaW5kaXJlY3RseSBlbmFibGVzIGBJUFY2X1NFRzZfQlBGYCksIGBCUEZfU1lTQ0FMTGAsIGFuZCBgTkVUYC4gYElQVjZfU0VHNl9MV1RVTk5FTGAgZGVwZW5kcyBvbiBgSVBWNmAsIGBMV1RVTk5FTGAsIGBEU1RfQ0FDSEVgLCBhbmQgYElQVjZfTVVMVElQTEVfVEFCTEVTYC4gYElQVjZfU0VHNl9CUEZgIGlzIGEgZGVmYXVsdCBib29sIGlmIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGlzIHNldCwgYW5kIGl0IGFsc28gcmVxdWlyZXMgYElQVjZgIGJlIHNldCB0byBcInlcIi4gQW5kLCBvZiBjb3Vyc2UsIGBCUEZfU1lTQ0FMTGAgd2lsbCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHN5c2NhbGwgYWNjZXNzLiBMZXQncyBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBzZXQgaW4gdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjI2LjEwNzI0NzQwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNTY5NTg3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToyOC4zNDI5NTI2M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjM1NDU4MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEknbSB2ZXJpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGlzIGNoYW5nZSwgc3RhcnRpbmcgd2l0aCBgRm9jdXNTeW1ib2xzYC4gVGhlIGNvcmUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFwcGVhciB0byBiZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAsIHdoaWNoIEkga25vdyBpcyBhIEJQRiBoZWxwZXIsIGFuZCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCBhIHN0YXRpYyBmdW5jdGlvbiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpcyBpbmxpbmVkIG9yIHJlbWFpbnMgYSB2aXNpYmxlIHN5bWJvbC4gIEknbGwgYWxzbyBrZWVwIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgaW4gbWluZCwgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgYW5kIHJlbGF0ZWQgZnVuY3Rpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSAqZXhhY3QqIG5hbWVzIG9mIHRoZXNlIGZvY3VzIHN5bWJvbHMsIGVzcGVjaWFsbHkgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIOKAkyBpdCBjb3VsZCBiZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAsIGBfX19icGZfbHd0X3NlZzZfYWN0aW9uYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEknbGwgcmVmZXIgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgdGhpcywgYW5kIGNvbmZpcm0gdGhhdCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGFuZCBgc2VnNl9sb2NhbF9pbnB1dGAgYWxzbyB3YXJyYW50IHNjcnV0aW55LlxuXG5Ob3csIEknbSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBzeW1ib2xzIHdpdGggdGhlIGZpbGVzIGludm9sdmVkLCBwcmltYXJpbHkgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgYW5kIGBuZXQvY29yZS9maWx0ZXIuY2AsIGNvbmZpcm1pbmcgdGhhdCBgYnBmX2x3dF9zZWc2X2FjdGlvbmAsIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGFyZSBpbmRlZWQgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIHRoaXMgY2hhbmdlLlxuXG5JJ20gZG91YmxlLWNoZWNraW5nIHRoZSBleGFjdCBuYW1lcyBmb3IgdGhlIGZ1bmN0aW9ucyBhZ2FpbiwgZW5zdXJpbmcgSSBoYXZlbid0IG1pc3NlZCBhbnkgdmFyaWF0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgbW9kaWZpZWQgc3ltYm9scyBpbiB0aGUgZGlmZi4gIEl0IGxvb2tzIGxpa2UgaXQgb25seSB0b3VjaGVzIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQuICBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgQlBGX1NZU0NBTExgLCBhbmQgYElQVjZgIGFyZSB0aGUgb25lcyB0byBjb25zaWRlci5cblxuRmluYWxseSwgSSdtIGNvbnN0cnVjdGluZyB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUsIGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIFNSdjYgQlBGIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIHRoZSBpbnRlcm5hbCBoZWxwZXIgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBhbHRlcnMgYHNrYmAgbWFuaXB1bGF0aW9uLCBTUkggaGVhZGVyIHBhcnNpbmcvdXBkYXRpbmcsIGFuZCBjcnVjaWFsIGRhdGEgcG9pbnRlciBjYWxjdWxhdGlvbnMuIEl0J3MgYWNjZXNzaWJsZSB2aWEgQlBGIGFuZCBJUHY2IHNlZzYgcm91dGluZyB3aGljaCBtZWFucyB0aGVyZSBpcyBhIGxhcmdlIGF0dGFjayBzdXJmYWNlLiBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbXCJicGZfbHd0X3NlZzZfYWN0aW9uXCIsIFwiYnBmX3VwZGF0ZV9zcmhfc3RhdGVcIiwgXCJpbnB1dF9hY3Rpb25fZW5kX2JwZlwiXWAsIGFuZCBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgW1wiSVBWNlwiLCBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLCBcIklQVjZfU0VHNl9CUEZcIiwgXCJCUEZfU1lTQ0FMTFwiXWAuXG5cbkknbSBwZXJmb3JtaW5nIGEgZmluYWwsIGNyaXRpY2FsIHNhbml0eSBjaGVjayBvbiBhbGwgYXNwZWN0cyBvZiB0aGUgYW5hbHlzaXMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHJlc3VsdHMuIFRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NjYsIk91dHB1dFRva2VucyI6MjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjM0LjU3ODQxNDA4M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTgwMzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgICBcImJwZl91cGRhdGVfc3JoX3N0YXRlXCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2JwZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBpbnRlcm5hbCBzdGF0ZSB1cGRhdGUgZnVuY3Rpb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBuZXQvY29yZS9maWx0ZXIuYy4gSXQgY2hhbmdlcyBob3cgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaXMgcmV0cmlldmVkIGFuZCB2YWxpZGF0ZWQsIGFsdGVycyBza2IgcHVsbGluZy9wb2ludGVyIHJlY2FsY3VsYXRpb25zIG9uIGRlY2Fwc3VsYXRpb24gYWN0aW9ucyAoU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNiksIGFuZCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaXMgaW52b2tlZCBhZnRlciBlbmNhcHN1bGF0aW9uIGFjdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gSVB2NiBzZWc2IHJvdXRlcyBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbHd0X3NlZzZfYWN0aW9uXCIsXG4gICAgXCJicGZfdXBkYXRlX3NyaF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MzQuNjkwMjI3NzdaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzI1NDMwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MzQuNjkwODcyMTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTcyNDc4MDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgY2FzdGluZyBvZiBvZmZzZXRzIGludG8gc2tiLVxcdTAwM2VkYXRhIHdpdGggc2VnNl9nZXRfc3JoKCkgYW5kIHBza2JfbWF5X3B1bGwgY2hlY2tzIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBsaW5lYXIgaGVhZGVyIHNhZmVseS5cXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cXG4tIExvY2FsIHZhcmlhYmxlcyBzdWNoIGFzIGBvbGRfbGVuYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBgc2tiLVxcdTAwM2VsZW5gIHByaW9yIHRvIHJlYWRpbmcuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZGRyZXNzIGJ1ZmZlciBib3VuZHMsIHBvaW50ZXIgcmVjb21wdXRhdGlvbiwgYW5kIGxpbmVhciBoZWFkZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYyBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyY2FmZjY1NzNkMTA5NmZkYmRmMGRkODdmMDkyNzlhZDRjZjEwZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjIwOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uYjAzN2Q3MGU1ZmU2NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTcsMTUgKzcwMTcsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbitcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFxuLVx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXHUwMDNjIDApIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSArIHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbitcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuK1x0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbitcdGlmICghc3JoKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbitcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4gfVxuIFxuIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuQEAgLTcwMzMsNiArNzAzNCw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIHtcbiBcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4gXHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbitcdHVuc2lnbmVkIGludCBvbGRfbGVuO1xuIFx0aW50IGhkcm9mZiA9IDA7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTcwNTgsMzIgKzcwNjAsMzcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXG4gXHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbi1cdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuK1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG4gXG4gXHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuIFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIFxuLVx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4gXHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbiBcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuK1x0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG4gXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tXHRcdGlmICghZXJyKVxuK1x0XHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvbGRfbGVuKVxuIFx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbiBcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuK1x0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcbiBcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbi1cdFx0aWYgKCFlcnIpXG4rXHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9sZF9sZW4pXG4gXHRcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjM0LjY5MDg3MzI1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzc1NjcyNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyBQb3RlbnRpYWwgS01TQU4gUmlza3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIE15IHByb2Nlc3Mgd2lsbCBiZSBhcyBmb2xsb3dzOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmYgYW5kIGZvY3VzIG9uIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjaGFuZ2VzIGFyb3VuZCB0aG9zZSBhcmVhcy4gVGhlbiwgSSdsbCB6ZXJvIGluIG9uIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIGxpbmUgNzAxNywgdXNpbmcgdGhhdCBhcyBhIG1hcmtlciB0byBzdGFydCBteSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBhdGNoJ3MgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6NDcuNDY2NTQ4OTcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAwMDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MDAxOlxcdFxcbjcwMDI6XFx0XFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgZnJvbSwgbGVuKTtcXG43MDAzOlxcdFxcdHJldHVybiAwO1xcbjcwMDQ6XFx0fVxcbjcwMDU6XFx0XFxuNzAwNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcXG43MDA3OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXFxuNzAwODpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjcwMDk6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG43MDEwOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbjcwMTE6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbjcwMTI6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjcwMTM6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuNzAxNDpcXHR9O1xcbjcwMTU6XFx0XFxuNzAxNjpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTc6XFx0e1xcbjcwMTg6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDE5OlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAyMDpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG43MDIxOlxcdFxcbjcwMjI6XFx0XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuNzAyMzpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzAyNDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG43MDI1OlxcdFxcdGlmICghc3JoKVxcbjcwMjY6XFx0XFx0XFx0cmV0dXJuO1xcbjcwMjc6XFx0XFxuNzAyODpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuNzAyOTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG43MDMwOlxcdH1cXG43MDMxOlxcdFxcbjcwMzI6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuNzAzMzpcXHRcXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuNzAzNDpcXHR7XFxuNzAzNTpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMzY6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDM3OlxcdFxcdHVuc2lnbmVkIGludCBvbGRfbGVuO1xcbjcwMzg6XFx0XFx0aW50IGhkcm9mZiA9IDA7XFxuNzAzOTpcXHRcXHRpbnQgZXJyO1xcbjcwNDA6XFx0XFxuNzA0MTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZzcmhfc3RhdGUtXFx1MDAzZWJoX2xvY2spO1xcbjcwNDI6XFx0XFx0c3dpdGNoIChhY3Rpb24pIHtcXG43MDQzOlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1g6XFxuNzA0NDpcXHRcXHRcXHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDQ1OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDQ2OlxcdFxcdFxcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXFxuNzA0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDQ4OlxcdFxcdFxcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcXG43MDQ5OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XFxuNzA1MDpcXHRcXHRcXHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDUyOlxcdFxcdFxcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKGludCkpXFxuNzA1MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDU0OlxcdFxcdFxcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XFxuNzA1NTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDY6XFxuNzA1NjpcXHRcXHRcXHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDU3OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDU4OlxcdFxcdFxcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKGludCkpXFxuNzA1OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDYwOlxcdFxcbjcwNjE6XFx0XFx0XFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFxcdTAwM2MgMClcXG43MDYyOlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDYzOlxcdFxcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XFxuNzA2NDpcXHRcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuNzA2NTpcXHRcXHRcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzA2NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA2NzpcXHRcXHRcXHR9XFxuNzA2ODpcXHRcXHRcXHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcXG43MDY5OlxcdFxcbjcwNzA6XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XFxuNzA3MTpcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG43MDcyOlxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuNzA3MzpcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbjcwNzQ6XFx0XFxuNzA3NTpcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbjcwNzY6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcXG43MDc3OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxcbjcwNzg6XFx0XFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA3OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA4MDpcXHRcXHRcXHRvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuNzA4MTpcXHRcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcXG43MDgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuNzA4MzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2xkX2xlbilcXG43MDg0OlxcdFxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA4NTpcXHRcXG43MDg2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA4NzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcXG43MDg4OlxcdFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwOTA6XFx0XFx0XFx0b2xkX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbjcwOTE6XFx0XFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcXG43MDkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuNzA5MzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2xkX2xlbilcXG43MDk0OlxcdFxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA5NTpcXHRcXG43MDk2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA5NzpcXHRcXHRkZWZhdWx0OlxcbjcwOTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA5OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjQ3LjQ2NzI2MDE1MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTA0NjMyNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCBhbmQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFNlZzYgYW5kIEJQRi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3RhdGUgbWFuYWdlbWVudCBhc3BlY3QsIGdpdmVuIHRoYXQgaXQncyByaWdodCB0aGVyZSBpbiB0aGUgbmFtZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzdGF0ZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMsIGhvdyB0aGV5J3JlIGNyZWF0ZWQsIHVwZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5LCBjbGVhbmVkIHVwLiBMZXQncyBzZWUgaG93IGVmZmljaWVudGx5IHRoZXNlIHN0YXRlcyBhcmUgdXRpbGl6ZWQuIEknbGwgZm9jdXMgb24gcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgbWlnaHQgYmUgcG9zc2libGUuIEl04oCZcyB0aW1lIHRvIG1ldGhvZGljYWxseSBleGFtaW5lIHRoZSBjb2RlIGFuZCBidWlsZCB1cCB0aGF0IGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBJIG5lZWQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjU2LjU3MTg5NTUzM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4OTQ2Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfYnBmX3NyaF9zdGF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz02OTczPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3Ni1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5Nzc6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy02OTc4LVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVxcdTAwM2Vzcmg7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDE2PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDE4LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAxOTpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjAtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDMyPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNS1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzY6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDM3LVxcdHVuc2lnbmVkIGludCBvbGRfbGVuO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzExMj1CUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzExNS1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTY6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MTE3LVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVxcdTAwM2Vzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM3Mj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDAxLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDAyOkRFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDAzLVxcdC5iaF9sb2NrXFx0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQwNj1ib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDA4LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MDk6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQxMC1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MzA9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDktXFx0ICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTA6XFx0bG9jYWxfbG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTE6XFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Mi1cXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDczLVxcdFxcdGdvdG8gZHJvcDtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ3NDpcXHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDc1LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODEtZHJvcDpcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ4MjpcXHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDgzLVxcdGtmcmVlX3NrYihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMTo1Ni44ODA4NDkxNTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk4ODE1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgU1JIIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBpbiB0aGUgU1JIIChTb3VyY2UgUm91dGluZyBIZWFkZXIpIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gRmlyc3QsIEknbSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBmdW5jdGlvbi5cblxuUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHVzaW5nIGBpcHY2X2ZpbmRfaGRyYCB0byBsb2NhdGUgdGhlIFNSSC4gSXQgc2VlbXMgYSBiaXQgY2x1bmt5IGJlY2F1c2Ugb2YgdGhlIGBzcmhvZmZgIHZhcmlhYmxlIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbiBlcnJvci4gVGhlIG9sZCBsb2dpYyBlc3NlbnRpYWxseSBjaGVja2VkIGZvciB0aGUgU1JIJ3MgZXhpc3RlbmNlIGFuZCBpZiBpdCB3YXMgZm91bmQsIGRldGVybWluZWQgdGhlIGhlYWRlciBsZW5ndGggYW5kIHNldCB0aGUgYHZhbGlkYCBmbGFnLlxuXG5Ob3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBUaGUgY29kZSBub3cgZGlyZWN0bHkgdXNlcyBgc2VnNl9nZXRfc3JoKHNrYiwgMClgIHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIFNSSC4gVGhlbiwgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgaXMgY2FsbGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbGlrZWx5IHVwZGF0ZXMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIHRvIHJlZmxlY3QgdGhlIG5ldyBwb3NpdGlvbiBvciBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRhdGEuIFRoZSBzdWJzZXF1ZW50IGxvZ2ljIGFwcGVhcnMgY2xlYW5lcjsgaWYgYHNlZzZfZ2V0X3NyaGAgcmV0dXJucyBOVUxMLCBpdCBiYWlscyBvdXQuIElmIG5vdCwgdGhlIGhlYWRlciBsZW5ndGggYW5kIHZhbGlkaXR5IGFyZSBjb21wdXRlZCBhcyBiZWZvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzZWc2X2dldF9zcmhgIG1vcmUgY29tcGxldGVseSwgdG8gc2VlIHRoZSBleGFjdCBpbXBsaWNhdGlvbiBvZiB0aGUgY2hhbmdlLiBUaGlzIGNoYW5nZSBsb29rcyBjbGVhbmVyIGFuZCBtb3JlIGRpcmVjdCwgbWFraW5nIGl0IG1vcmUgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjAwLjg2OTAwOTY0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU5MzkzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9nZXRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NlZzYuaD02Nz1leHRlcm4gYm9vbCBzZWc2X3ZhbGlkYXRlX3NyaChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgaW50IGxlbiwgYm9vbCByZWR1Y2VkKTtcXG5pbmNsdWRlL25ldC9zZWc2Lmg6Njg6ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjowMS4xNDQ5NTgyNTRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc5ODIxNjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlIGBzZWc2X2dldF9zcmhgIGltcGxlbWVudGF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGBzZWc2X2dldF9zcmhgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgc2VnNl9nZXRfc3JoYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgdG8gZ2V0IHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHdoYXQgaXRzIGNvcmUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIHJldHJpZXZpbmcgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGV4dHJhY3QgU1JIIGluZm9ybWF0aW9uIGZyb20gYSBwYWNrZXQgb3IgZGF0YSBzdHJ1Y3R1cmUsIHBlcmhhcHMgYSBza19idWZmLCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlIGlucHV0IGFyZ3VtZW50cy4gV2hhdCBkb2VzIGl0IHRha2UgaW4/IElzIGl0IGEgcG9pbnRlciB0byB0aGUgcGFja2V0IGl0c2VsZj8gT3IgcGVyaGFwcyBhbiBvZmZzZXQgaW50byBhIHBhY2tldCBidWZmZXI/IE9yIG1heWJlIGV2ZW4gYSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIFNSSCBpdHNlbGY/IEFuZCB3aGF0IHdpbGwgYmUgcmV0dXJuZWQ/IEEgcG9pbnRlciB0byBzb21lIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIFNSSD8gQW4gZXJyb3IgY29kZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gXG5cbk5leHQsIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgaW1wbGVtZW50YXRpb24gb2YgU1JIIHJldHJpZXZhbCwgYXMgSSdtIHVzZWQgdG8gc2VlaW5nLiBUaGlzIG1lYW5zIHZlcmlmeWluZyB0aGUgaGFuZGxpbmcgb2YgdGhlIHZhcmlvdXMgZmllbGRzIHRoYXQgbWFrZSB1cCB0aGUgU1JIOiB0aGUgbmV4dCBoZWFkZXIsIHRoZSBoZWFkZXIgZXh0ZW5zaW9uIGxlbmd0aCwgdGhlIHJvdXRpbmcgdHlwZSwgdGhlIHNlZ21lbnRzIGxlZnQsIHRoZSBzZWdtZW50cywgYW5kIGFueSBvdGhlciByZWxldmFudCBmbGFncyBvciBtZXRhZGF0YS4gSSdsbCBhbHNvIGJlIHdhdGNoaW5nIHRvIHNlZSBob3cgdGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgbGlrZSBTUkhzIHRoYXQgYXJlIGZyYWdtZW50ZWQsIG9yIHRydW5jYXRlZC5cblxuSSBhbnRpY2lwYXRlIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBib3VuZGFyeSBjb25kaXRpb25zIC0gaXMgaXQgY29ycmVjdGx5IHZlcmlmeWluZyB0aGF0IHRoZSBTUkggZGF0YSBkb2Vzbid0IGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBwYWNrZXQgYnVmZmVyPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3Vlcz8gQW5kIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIHdoYXQgaGFwcGVucyBpZiB0aGUgU1JIIGlzIGludmFsaWQgb3IgY29ycnVwdGVkPyBBcmUgdGhlcmUgZ3JhY2VmdWwgZXJyb3IgcmV0dXJucywgbG9nZ2luZywgb3Igb3RoZXIgbWVjaGFuaXNtcyB0byBwcmV2ZW50IGZ1cnRoZXIgaXNzdWVzP1xuXG5JJ2xsIGJlIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgbGluZSBieSBsaW5lLCB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIG9wdGltaXplZCBmb3Igc3BlZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgd2F5cyB0byBpbXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiwgb3IgaXMgdGhpcyBhIGNsZWFuIGFuZCBlZmZpY2llbnQgZGVzaWduP1xuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MDQuOTQzMTc4ODE2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcwMjEwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwdjZfc3JfaGRyIFxcXFwqc2VnNl9nZXRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNi5jPTI2PWJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZClcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy03OC1cXG5uZXQvaXB2Ni9zZWc2LmM6Nzk6c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxcbm5ldC9pcHY2L3NlZzYuYy04MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjA1LjM4MDIwNzMwM1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgxNjgyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzZWc2LmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvaXB2Ni9zZWc2LmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3OS4gSSdtIGFzc3VtaW5nIHRoYXQgYXJlYSBsaWtlbHkgY29udGFpbnMgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgb3IgcGVyaGFwcyBzb21lIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiByZWxhdGVkIHRvIHRoZSBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIHByb2Nlc3NpbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCdzIGEgY29tbW9uIHBsYWNlIHRvIGZpbmQgdGhlIGdyb3VuZHdvcmsgZm9yIGEgbW9kdWxlIGxpa2UgdGhpcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGNvZGUgKmJlZ2lucyogdG8gaGFuZGxlIHRoZSBTUnY2IG9wZXJhdGlvbnMuIEkgYW50aWNpcGF0ZSB1bmRlcnN0YW5kaW5nIGhvdyBpdCBzdHJ1Y3R1cmVzIGl0cyBkYXRhIGFuZCB3aGF0IHRoZSBtYWluIGZ1bmN0aW9uIGNhbGxzIGFyZSB0byBlbmFibGUgYSBiYXNpYyBvcGVyYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwYXJzZSB0aGUgbW9yZSBjb21wbGV4IGZsb3dzIGFuZCBmZWF0dXJlcyBvZiBTUnY2LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MDcuMjYxODkxNzMyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzc6XFx0fVxcbiAgNzg6XFx0XFxuICA3OTpcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gIDgyOlxcdFxcdGludCBsZW4sIHNyaG9mZiA9IDA7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBcXHUwMDI2ZmxhZ3MpIFxcdTAwM2MgMClcXG4gIDg1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzcmhvZmYgKyBzaXplb2YoKnNyaCkpKVxcbiAgODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0bGVuID0gKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc3Job2ZmICsgbGVuKSlcXG4gIDk1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBub3RlIHRoYXQgcHNrYl9tYXlfcHVsbCBtYXkgY2hhbmdlIHBvaW50ZXJzIGluIGhlYWRlcjtcXG4gIDk4OlxcdFxcdCAqIGZvciB0aGlzIHJlYXNvbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmVsb2FkIHRoZW0gd2hlbiBuZWVkZWQuXFxuICA5OTpcXHRcXHQgKi9cXG4gMTAwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgdHJ1ZSkpXFxuIDEwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0cmV0dXJuIHNyaDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0LyogRGV0ZXJtaW5lIGlmIGFuIElDTVAgaW52b2tpbmcgcGFja2V0IGNvbnRhaW5zIGEgc2VnbWVudCByb3V0aW5nXFxuIDEwOTpcXHQgKiBoZWFkZXIuICBJZiBpdCBkb2VzLCBleHRyYWN0IHRoZSBvZmZzZXQgdG8gdGhlIHRydWUgZGVzdGluYXRpb25cXG4gMTEwOlxcdCAqIGFkZHJlc3MsIHdoaWNoIGlzIGluIHRoZSBmaXJzdCBzZWdtZW50IGFkZHJlc3MuXFxuIDExMTpcXHQgKi9cXG4gMTEyOlxcdHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdF9fdTE2IG5ldHdvcmtfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlcjtcXG4gMTE1OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQvKiBVcGRhdGUgbmV0d29yayBoZWFkZXIgdG8gcG9pbnQgdG8gdGhlIGludm9raW5nIHBhY2tldFxcbiAxMTg6XFx0XFx0ICogaW5zaWRlIHRoZSBJQ01QIHBhY2tldCwgc28gd2UgY2FuIHVzZSB0aGUgc2VnNl9nZXRfc3JoKClcXG4gMTE5OlxcdFxcdCAqIGhlbHBlci5cXG4gMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbiAxMjQ6XFx0XFx0aWYgKCFzcmgpXFxuIDEyNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0aWYgKHNyaC1cXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcXG4gMTI4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRvcHQtXFx1MDAzZWZsYWdzIHw9IElQNlNLQl9TRUc2O1xcbiAxMzE6XFx0XFx0b3B0LVxcdTAwM2VzcmhvZmYgPSAodW5zaWduZWQgY2hhciAqKXNyaCAtIHNrYi1cXHUwMDNlZGF0YTtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0b3V0OlxcbiAxMzQ6XFx0XFx0LyogUmVzdG9yZSB0aGUgbmV0d29yayBoZWFkZXIgYmFjayB0byB0aGUgSUNNUCBwYWNrZXQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MDcuMjYxOTc1MzIyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk5MjM2MDAxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggY2hhbmdlcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLiBCZWZvcmUgdGhpcyByZXZpc2lvbiwgdGhlcmUgd2FzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIHBhdHRlcm46IGBpcHY2X2ZpbmRfaGRyYCB3YXMgdXNlZCB3aXRob3V0IHByb3Blcmx5IHZhbGlkYXRpbmcgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgb3IgZW5zdXJpbmcgdGhlIG5lY2Vzc2FyeSBkYXRhIHdhcyBhdmFpbGFibGUgd2l0aCBgcHNrYl9tYXlfcHVsbGAuIFRoZW4sIHdlIHdlcmUgZGlyZWN0bHkgY2FzdGluZyBgc2tiLVx1MDAzZWRhdGEgKyBzcmhvZmZgIHRvIGBpcHY2X3NyX2hkcmAuIFRoZSBjYWxsIHRvIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIHNlZW1lZCBoYXBoYXphcmQsIG9yIGF0IGxlYXN0LCBpbmNvbnNpc3RlbnQuXG5cbk5vdywgYHNlZzZfZ2V0X3NyaGAgaXMgdGhlIGdvLXRvIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIGEgZ29vZCB0aGluZy4gSXQgdmFsaWRhdGVzIGFuZCBwdWxscyB0aGUgZW50aXJlIFNSSC4gUHVsbGluZyB0aGUgU1JIIG1pZ2h0IHRyaWdnZXIgYW4gU0tCIHJlLWFsbG9jYXRpb24sIHdoaWNoIG1ha2VzIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGVzc2VudGlhbCBhZnRlciB0aGlzIG9wZXJhdGlvbi5cblxuSG93ZXZlciwgdGhlcmUncyBhIHNwZWNpZmljIHNjZW5hcmlvIHRoYXQgbWFrZXMgbWUgcGF1c2U6IHdoYXQgaGFwcGVucyBpZiB0aGVyZSdzICpubyogU1JIIChgIXNyaGApPyBUaGUgY29kZSBzZXRzIGBzcmhfc3RhdGUtXHUwMDNlc3JoID0gTlVMTGAgYW5kIHJldHVybnMuIFRoYXQgbWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYnV0IGl0IGxlYXZlcyBgc3JoX3N0YXRlLVx1MDAzZXZhbGlkYCB1bnRvdWNoZWQsIG9yIGZhbHNlLiBUaGlzIGhhcyB0byBiZSBhZGRyZXNzZWQuIERvZXMgaXQgZXZlbiBtYXR0ZXIgd2hldGhlciBgc3JoX3N0YXRlLVx1MDAzZXZhbGlkYCBpcyB0cnVlIG9yIGZhbHNlIHdoZW4gdGhlIGFjdHVhbCBgc3JoYCBwb2ludGVyIGlzIGBOVUxMYD8gSSB0aGluayB0aGlzIG5lZWRzIGEgc2Vjb25kIGxvb2ssIHNvIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyB0aGVzZSBzdGF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoxNy4xODU1Nzk1ODdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjYyOTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2JwZl9oYXNfdmFsaWRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzAzMj1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNDMtXFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDQ0OlxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNDUtXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA0OS1cXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNTA6XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA1MS1cXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDU1LVxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDU2OlxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTctXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDc4OlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzktXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA4Ny1cXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDg4OlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODktXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MDI9REVGSU5FX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcykgPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwNS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQwNjpib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwNy17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQzMD1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3MS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ3MjpcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3My1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjE3LjMwMjIxOTc0OFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzQwMzM4NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRUc2IEJQRiBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIGZ1bmN0aW9uIHdvcmtzLiBJdOKAmXMgY3JpdGljYWwsIG9idmlvdXNseSwgaW4gZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiBTUkggaGVhZGVycyBpbiBvdXIgU0VHNiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBhIG1pc3N0ZXAgaGVyZSBjb3VsZCBvcGVuIHVwIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzLiBJJ20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGUga2VybmVsIGlzIHZhbGlkYXRpbmcgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdGhyb3VnaCBCUEYuIFdoYXQgY2hlY2tzIGFyZSBpbiBwbGFjZT8gV2hhdCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhcmUgdGhleSBoYW5kbGluZz8gSSB3YW50IHRvIHNlZSBpZiB0aGUgdmFsaWRhdGlvbiBjb25zaWRlcnMgYXNwZWN0cyBsaWtlIFNSSCBsZW5ndGgsIGhvcCBsaW1pdHMsIHNlZ21lbnRzIGxlZnQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgQlBGIGlzIGludGVncmF0ZWQgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUgaW4gdGhpcyByZWdhcmQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUyMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjIwLjY0MjU2MjIxMVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0fVxcbjE0MDE6XFx0XFxuMTQwMjpcXHRERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG4xNDAzOlxcdFxcdC5iaF9sb2NrXFx0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXFxuMTQwNDpcXHR9O1xcbjE0MDU6XFx0XFxuMTQwNjpcXHRib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDA3OlxcdHtcXG4xNDA4OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuMTQwOTpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjE0MTA6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4xNDExOlxcdFxcbjE0MTI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG4xNDEzOlxcdFxcdGlmICh1bmxpa2VseShzcmggPT0gTlVMTCkpXFxuMTQxNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTQxNTpcXHRcXG4xNDE2OlxcdFxcdGlmICh1bmxpa2VseSghc3JoX3N0YXRlLVxcdTAwM2V2YWxpZCkpIHtcXG4xNDE3OlxcdFxcdFxcdGlmICgoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAyNiA3KSAhPSAwKVxcbjE0MTg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHRcXHRzcmgtXFx1MDAzZWhkcmxlbiA9ICh1OCkoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAzZVxcdTAwM2UgMyk7XFxuMTQyMTpcXHRcXHRcXHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMywgdHJ1ZSkpXFxuMTQyMjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTQyMzpcXHRcXG4xNDI0OlxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0MjU6XFx0XFx0fVxcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNDI4OlxcdH1cXG4xNDI5OlxcdFxcbjE0MzA6XFx0c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE0MzE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbjE0MzI6XFx0e1xcbjE0MzM6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xcbjE0MzQ6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuMTQzNTpcXHRcXHRpbnQgcmV0O1xcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xcbjE0Mzg6XFx0XFx0aWYgKCFzcmgpIHtcXG4xNDM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyMC42NDI3NDIwNjFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MDAyMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgYW5kIGBzZWc2X2xvY2FsLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGZ1bmN0aW9uLCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCB0aGUgTG9jYWwgU2VnbWVudHMgaW1wbGVtZW50YXRpb24uIFJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIOKAkyBzcGVjaWZpY2FsbHksIGxpbmVzIDE0MzUgdGhyb3VnaCAxNDc1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgcHJvY2Vzc2luZyBvciBlcnJvciBoYW5kbGluZyBmb3IgYSBwYWNrZXQgdGhhdCdzIGJlZW4gdGhyb3VnaCBhIGxvY2FsIHNlZ21lbnQgcm91dGluZyBwYXRoIGlzIGhhcHBlbmluZy5cblxuQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgY2hlY2tzIGhlcmU6IHZhbGlkYXRpb24gb2YgdGhlIHBhY2tldCdzIGZpbmFsIHN0YXRlIGFmdGVyIHRyYXZlcnNpbmcgYSBsb2NhbCBzZWdtZW50IHJvdXRlLCBwZXJoYXBzIGhhbmRsaW5nIG9mIGFueSByZW1haW5pbmcgbWV0YWRhdGEsIGFuZCBkZWZpbml0ZWx5IGEgY2xlYW4tdXAgcm91dGluZSBmb3IgcmVzb3VyY2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgdGhpcyBwYWNrZXQuIE1heWJlIHRoZXkncmUgbWFuYWdpbmcgZmxvdyBpbmZvcm1hdGlvbiBvciBhY2NvdW50aW5nIGhlcmUgdG9vLiBPciwgaXQgY291bGQgYmUgdGhlIHBsYWNlIHdoZXJlIHRoZXkgbWFyayB0aGUgcGFja2V0IGZvciBkZWxpdmVyeSB0byB0aGUgbmV4dCBzdGFnZSBhZnRlciBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gZGlnIGluLCB0aG91Z2gsIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHNlZSB3aGF0IGhhcHBlbnMgd2l0aCB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCB0aGUgcmVsZXZhbnQgY29udHJvbCBzdHJ1Y3R1cmVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyMi44OTI3Njc1NTFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzNTpcXHRcXHRpbnQgcmV0O1xcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xcbjE0Mzg6XFx0XFx0aWYgKCFzcmgpIHtcXG4xNDM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE0NDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ0MTpcXHRcXHR9XFxuMTQ0MjpcXHRcXHRhZHZhbmNlX25leHRzZWcoc3JoLCBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpO1xcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHQvKiBUaGUgYWNjZXNzIHRvIHRoZSBwZXItQ1BVIGJ1ZmZlciBzcmhfc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHJ1bm5pbmdcXG4xNDQ1OlxcdFxcdCAqIGFsd2F5cyBpbiBzb2Z0aXJxIGNvbnRleHQgKHdpdGggZGlzYWJsZWQgQkgpLiBPbiBQUkVFTVBUX1JUIHRoZVxcbjE0NDY6XFx0XFx0ICogcmVxdWlyZWQgbG9ja2luZyBpcyBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIGxvY2FsX2xvY2tfbmVzdGVkX2JoKClcXG4xNDQ3OlxcdFxcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcXG4xNDQ4OlxcdFxcdCAqIGJwZl9wcm9nX3J1bl9zYXZlX2NiKCkuXFxuMTQ0OTpcXHRcXHQgKi9cXG4xNDUwOlxcdFxcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbjE0NTE6XFx0XFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4xNDUyOlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbjE0NTM6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gPSBzcmgtXFx1MDAzZWhkcmxlbiBcXHUwMDNjXFx1MDAzYyAzO1xcbjE0NTQ6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNDU3OlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4xNDU4OlxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXFx1MDAzZWJwZi5wcm9nLCBza2IpO1xcbjE0NTk6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMTQ2MjpcXHRcXHRjYXNlIEJQRl9PSzpcXG4xNDYzOlxcdFxcdGNhc2UgQlBGX1JFRElSRUNUOlxcbjE0NjQ6XFx0XFx0XFx0YnJlYWs7XFxuMTQ2NTpcXHRcXHRjYXNlIEJQRl9EUk9QOlxcbjE0NjY6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0Njc6XFx0XFx0ZGVmYXVsdDpcXG4xNDY4OlxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiYnBmLXNlZzZsb2NhbDogSWxsZWdhbCByZXR1cm4gdmFsdWUgJXVcXFxcblxcXCIsIHJldCk7XFxuMTQ2OTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTQ3MDpcXHRcXHR9XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjE0NzM6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NzQ6XFx0XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDc1OlxcdFxcbjE0NzY6XFx0XFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxuMTQ3NzpcXHRcXHRcXHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XFxuMTQ3ODpcXHRcXG4xNDc5OlxcdFxcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcXG4xNDgwOlxcdFxcbjE0ODE6XFx0ZHJvcDpcXG4xNDgyOlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxuMTQ4MzpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDg0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyMi44OTUwMTc4NDRaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxMTA4MTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFRzYgTG9jYWwgQWN0aW9ucyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIFNFRzYgbG9jYWwgYWN0aW9ucyBoYW5kbGUgSVB2NiBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIFRoZSBmaXJzdCBzZWdtZW50IGRlYWxzIHdpdGggYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgLiBJIHNlZSB0aGUgY29kZSBpcyBjaGVja2luZyBmb3IgYW4gSVB2NiBoZWFkZXIgdXNpbmcgYGlwdjZfZmluZF9oZHJgLiBUaGVuIHRoZXJlIGlzIGEgY2hhbmdlLiBJbml0aWFsbHksIHRoZSBjb2RlIHVzZWQgYHBza2JfcHVsbGAgd2hpY2ggcHVsbHMgZGF0YSBmcm9tIGEgc2tiLiBOb3cgaXQgdXNlcyBgcHNrYl9tYXlfcHVsbGAsIGFuZCBpZiBpdCBmYWlscywgaXQgc2V0cyBgc3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTExgIGFuZCBjb21wdXRlcyBkYXRhIHBvaW50ZXJzLiBBIGZvbGxvdyB1cCB0byB0aGlzIGlzIHRvIHB1bGwgZnJvbSB0aGUgc2tiIHdpdGggYF9fc2tiX3B1bGxgLi4gVGhpcyBpcyBmb2xsb3dlZCB1cCB3aXRoIGBza2JfcG9zdHB1bGxfcmNzdW1gLCBhbmQgYSByZXNldCBvZiB2YXJpb3VzIGhlYWRlcnMuIFRoZSBjaGFuZ2UgaGVyZSBpcyBzaWduaWZpY2FudC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgcHVsbGluZyB0aGUgaGVhZGVyLCBpdCdzIG5vdyBjaGVja2luZyBpZiBwdWxsaW5nIHRoZSBJUHY2IGhlYWRlciBpcyBldmVuICpwb3NzaWJsZSouIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgZml4IGZvciBhIHByZXZpb3VzIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYSBtYWxmb3JtZWQgcGFja2V0IGNvdWxkIGNhdXNlIGlzc3Vlcy4gVGhlbiBpdCBsb29rcyB1cCB0aGUgbmV4dCBob3AuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCBhbmQgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUGAuIEhlcmUsIGl0J3MgY2hlY2tpbmcgdGhlIFNSSCBzdGF0ZSBhbmQgdmFsaWRhdGluZyB0aGUgU1JIIGlmIG9uZSBleGlzdHMuIEkgc2VlIHRoZSBjb2RlIGNhbGxzIGBicGZfcHVzaF9zZWc2X2VuY2FwYCB3aXRoIGRpZmZlcmVudCBlbmNhcHN1bGF0aW9uIHR5cGVzLiBJdCBzZWVtcyB0aGUgY29kZSBpcyB0cmFja2luZyB0aGUgb2xkIGxlbmd0aCBvZiB0aGUgc2tiIGFzIGEgY2hlY2twb2ludCB0byBzZWUgaWYgYGJwZl9wdXNoX3NlZzZfZW5jYXBgIGNoYW5nZXMgdGhlIGxlbmd0aC4gRmluYWxseSwgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpcyBjYWxsZWQgd2hlbiB0aGUgbGVuZ3RoIG9mIHRoZSBza2IgaXMgY2hhbmdlZCBhZnRlciBjYWxsaW5nIGBicGZfcHVzaF9zZWc2X2VuY2FwYC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWxseSBhZGRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBTUkguIFRoYXQncyBnb29kLCBJIHdhcyBleHBlY3Rpbmcgc29tZXRoaW5nIGxpa2UgdGhpcy4gVGhlIGNoYW5nZSBmcm9tIHRoZSBvbGQgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgdGhlIGxlbmd0aCBjaGVjayBhbmQgdXBkYXRpbmcgdGhlIHNyaCBzdGF0ZSBiYXNlZCBvbiB0aGF0LlxuXG5BbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGR1cmluZyBlbmNhcHN1bGF0aW9uLCBhbmQgd2hldGhlciB0aGVzZSBzdGF0ZSB1cGRhdGVzIGFyZSBjcml0aWNhbCBvciBqdXN0IG5pY2UtdG8taGF2ZXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjI3LjgwNjEwMjQyOFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjIxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wdXNoX3NlZzZfZW5jYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz02ODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9jaGVja19tdHVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02ODc4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY4Nzk6c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxubmV0L2NvcmUvZmlsdGVyLmMtNjg4MC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTIxPUJQRl9DQUxMXzQoYnBmX2x3dF9pbl9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSwgdm9pZCAqLCBoZHIsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTI3LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORTpcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI4OlxcdFxcdHJldHVybiBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgdHlwZSwgaGRyLCBsZW4pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjktI2VuZGlmXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDMyPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA4MC1cXHRcXHRvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxubmV0L2NvcmUvZmlsdGVyLmM6NzA4MTpcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcXG5uZXQvY29yZS9maWx0ZXIuYy03MDgyLVxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDkwLVxcdFxcdG9sZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDkxOlxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA5Mi1cXHRcXHRcXHRcXHRcXHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyNy45NjAzMzAzNTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5OTM0Mjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBicGZfcHVzaF9zZWc2X2VuY2FwYCBsb2NhdGVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIExldCdzIGdldCBpbnRvIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgaG93IEJQRiBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjayBhdCB0aGlzIHBvaW50LiBJIHN1c3BlY3QgaXQncyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIG9yIG1vZGlmeWluZyB0aGUgSVB2NiBoZWFkZXIgdG8gYWRkIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgdGhlbiBwdXNoaW5nIHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgc2tfYnVmZiwgdGhlIElQdjYgaGVhZGVyIHN0cnVjdHVyZSwgdGhlIFNSSCBpdHNlbGYsIGFuZCBob3cgdGhlIEJQRiBwcm9ncmFtIG1hbmlwdWxhdGVzIHRoZXNlIGVsZW1lbnRzIHRvIGFjY29tcGxpc2ggZW5jYXBzdWxhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXMgd2VsbCwgZ2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjcml0aWNhbCBwYXRoIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiBob3cgdGhlIEJQRiBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBJUHY2IGhlYWRlciBhbmQgaG93IGl0IHNldHMgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIGZvciB0aGUgU1JIIHRvIHNwZWNpZnkgdGhlIHNlZ21lbnQgbGlzdC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgZWZmaWNpZW50bHkgaW1wbGVtZW50IFNSdjYuIEknbGwgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgbGlrZSBpbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIG9yIGludmFsaWQgc2VnbWVudCBsaXN0cy4gSSdsbCBhbHNvIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBhbnkgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGlmIGFwcGxpY2FibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MzEuMDU5Njc2NzU3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODc4LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2ODc4OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbjY4Nzk6XFx0c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxuNjg4MDpcXHR7XFxuNjg4MTpcXHRcXHRpbnQgZXJyO1xcbjY4ODI6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopaGRyO1xcbjY4ODM6XFx0XFxuNjg4NDpcXHRcXHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgbGVuLCBmYWxzZSkpXFxuNjg4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42ODg2OlxcdFxcbjY4ODc6XFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuNjg4ODpcXHRcXHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkU6XFxuNjg4OTpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSlcXG42ODkwOlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG42ODkxOlxcdFxcbjY4OTI6XFx0XFx0XFx0ZXJyID0gc2VnNl9kb19zcmhfaW5saW5lKHNrYiwgc3JoKTtcXG42ODkzOlxcdFxcdFxcdGJyZWFrO1xcbjY4OTQ6XFx0XFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuNjg5NTpcXHRcXHRcXHRza2JfcmVzZXRfaW5uZXJfaGVhZGVycyhza2IpO1xcbjY4OTY6XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMTtcXG42ODk3OlxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwKHNrYiwgc3JoLCBJUFBST1RPX0lQVjYpO1xcbjY4OTg6XFx0XFx0XFx0YnJlYWs7XFxuNjg5OTpcXHRcXHRkZWZhdWx0OlxcbjY5MDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjkwMTpcXHRcXHR9XFxuNjkwMjpcXHRcXG42OTAzOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG42OTA0OlxcdFxcdGlmIChlcnIpXFxuNjkwNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY5MDY6XFx0XFxuNjkwNzpcXHRcXHRza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG42OTA4OlxcdFxcbjY5MDk6XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcXG42OTEwOlxcdH1cXG42OTExOlxcdCNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xcbjY5MTI6XFx0XFxuNjkxMzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxcbjY5MTQ6XFx0c3RhdGljIGludCBicGZfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sXFxuNjkxNTpcXHRcXHRcXHRcXHQgICAgIGJvb2wgaW5ncmVzcylcXG42OTE2OlxcdHtcXG42OTE3OlxcdFxcdHJldHVybiBicGZfbHd0X3B1c2hfaXBfZW5jYXAoc2tiLCBoZHIsIGxlbiwgaW5ncmVzcyk7XFxuNjkxODpcXHR9XFxuNjkxOTpcXHQjZW5kaWZcXG42OTIwOlxcdFxcbjY5MjE6XFx0QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcXG42OTIyOlxcdFxcdCAgIHUzMiwgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjozMS4wNjA0MTIxMThaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM1NTIwNzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIFNSSCBTdGF0ZSBVcGRhdGUgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBpc3N1ZSBpcyBhIHBvdGVudGlhbCBmb3Igc3RhbGUgb3IgaW52YWxpZCBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIHBvaW50ZXJzIHdpdGhpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGluIGZ1bmN0aW9ucyBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgc2VnNl9kb19zcmhfaW5saW5lYCBvciBgc2VnNl9kb19zcmhfZW5jYXBgIHRvIG1vZGlmeSB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCBpbmNyZWFzZSBpdHMgbGVuZ3RoLiBUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgbWlnaHQgc3Vic2VxdWVudGx5IHJldHVybiBhbiBlcnJvciwgZXZlbiBhZnRlciBlbmNhcHN1bGF0aW9uIGFwcGVhcmVkIHRvIHN1Y2NlZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBvbmx5IGNoZWNraW5nIGZvciB0aGUgc3VjY2VzcyBvZiBgc2VnNl9sb29rdXBfbmV4dGhvcGAsIGFuZCBpZiBpdCBmYWlsZWQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgd2Fzbid0IGJlaW5nIGNhbGxlZCwgbGVhdmluZyB0aGUgU1JIIHN0YXRlIHBvdGVudGlhbGx5IGluY29uc2lzdGVudCBpZiB0aGUgYHNrYmAgd2VyZSByZWFsbG9jYXRlZCBvciBtb2RpZmllZCBsYXRlci5cblxuTm93LCBsb29raW5nIGRlZXBlciwgSSBzZWUgdGhleSdyZSBhZGRyZXNzaW5nIHRoZSBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgc2NlbmFyaW8sIHdoZXJlIGBwc2tiX21heV9wdWxsYCBlbnN1cmVzIHRoZSBJUHY2IGhlYWRlciBpcyBwcmVzZW50IGluIHRoZSBsaW5lYXIgcGFydCBiZWZvcmUgcHVsbGluZyBpdCwgYW5kIHRoZW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBub3cgY29ycmVjdGx5IHVzZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBpbnN0ZWFkIG9mIGFzc3VtaW5nIGBza2ItXHUwMDNlZGF0YSArIHNyaG9mZmAgaXMgdmFsaWQsIGFuZCB0aGVuIGNhbGxzIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiBwb2ludGVyIHNhZmV0eS5cblxuTGV0J3MgZG8gYSBxdWljayB2YXJpYWJsZSBpbnNwZWN0aW9uLiBJbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgOiBgc3JoYCBpcyBvYnRhaW5lZCB2aWEgYHNlZzZfZ2V0X3NyaGAsIHdlIGNvbXB1dGUgZGF0YSBwb2ludGVycywgYW5kIHRoZW4gY2hlY2sgYCFzcmhgLiBgc3JoX3N0YXRlLVx1MDAzZWhkcmxlbmAgaXMgYWxzbyB1cGRhdGVkLCBhcyBpcyBgc3JoX3N0YXRlLVx1MDAzZXZhbGlkYC4gSW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCB3ZSBoYXZlIGBvbGRfbGVuYCwgaW5pdGlhbGl6ZWQgdG8gYHNrYi1cdTAwM2VsZW5gIGJlZm9yZSB0aGUgZW5jYXAgYW5kIGNoZWNrZWQgYWZ0ZXIuIFRoZSBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgcGF0aCBjb3JyZWN0bHkgdXNlcyBgcHNrYl9tYXlfcHVsbGAgYW5kIHRoZW4gYF9fc2tiX3B1bGxgLlxuXG5JJ20gY29uZmlkZW50IHRoZXJlIGFyZW4ndCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gYG9sZF9sZW5gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBgc3JoYCBpcyBhbHNvIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgc2VnNl9nZXRfc3JoKHNrYiwgMClgLiBUaGVyZSBhcmVuJ3QgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgY29waWVzIHRvIHVzZXJzcGFjZSBpbiBwbGF5IGhlcmUsIHNvIG5vIGNoYW5jZSBvZiBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmUgYWxzbyBkb24ndCBhcHBlYXIgdG8gYmUgYW55IHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy5cblxuUmVnYXJkaW5nIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgaXQncyB6ZXJvLiBUaGlzIGZpeCBpcyBzdHJpY3RseSBhYm91dCBmaXhpbmcgc3RhbGUgcG9pbnRlciBpc3N1ZXMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBsaW5lYXIgYnVmZmVyIGhhbmRsaW5nIGZvciBTUkggaW4gQlBGIGhlbHBlcnMuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGdvaW5nIHRvIGJlIG91ciBtYWluIHNhZmV0eSBuZXQsIGFuZCB0aGlzIGlzIGV4YWN0bHkgdGhlIHR5cGUgb2YgYnVnIGl0IGV4Y2VscyBhdCBkZXRlY3RpbmcuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWssIG9yIGEgc3RydWN0IHBhZGRpbmcgaXNzdWUuXG5cbk9rYXksIGxldCdzIHNlZSwgZG9lcyB0aGlzIG1lZXQgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA/IExldCdzIGNoZWNrOiBvdXQtb2YtYm91bmRzLCBOVUxMIGRlcmVmZXJlbmNlLCBldGMuPyBZZXAsIEtBU0FOIGNhdGNoZXMgdGhvc2UgYW5kIHRoaXMgaXMgcHJlY2lzZWx5IHdoYXQgdGhlIHBhdGNoIGlzIGZpeGluZy4gRnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0cz8gQ2hlY2suIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mbyBsZWFrcz8gQ29ycmVjdC5cblxuRXZlcnl0aGluZyBoZXJlIHNlZW1zIGNsZWFyLiBUaGUgZml4IGlzIHNvdW5kLCB3ZWxsLXNjb3BlZCwgYW5kIHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0ODQsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6NDAuNDE1NjIzNTU4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzdGFsZSBwb2ludGVyIGFuZCBidWZmZXIgYm91bmRhcnkgaXNzdWVzIGluIEJQRiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1JIKSBoZWxwZXJzIChicGZfdXBkYXRlX3NyaF9zdGF0ZSBhbmQgYnBmX2x3dF9zZWc2X2FjdGlvbikuIFNwZWNpZmljYWxseTpcXG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBjYXN0aW5nIG9mIG9mZnNldHMgaW50byBza2ItXFx1MDAzZWRhdGEgd2l0aCBzZWc2X2dldF9zcmgoKSBhbmQgcHNrYl9tYXlfcHVsbCBjaGVja3MgdG8gdmFsaWRhdGUgYW5kIHB1bGwgdGhlIGxpbmVhciBoZWFkZXIgc2FmZWx5Llxcbi0gSXQgcmVjb21wdXRlcyBCUEYgZGF0YSBwb2ludGVycyBhbmQgdXBkYXRlcyB0aGUgcGVyLUNQVSBTUkggc3RhdGUgd2hlbiB0aGUgc2tiIGJ1ZmZlciBleHBhbmRzIG9yIGNoYW5nZXMgbGVuZ3RoIGR1cmluZyBlbmNhcHN1bGF0aW9uLlxcbi0gTG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYG9sZF9sZW5gIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGBza2ItXFx1MDAzZWxlbmAgcHJpb3IgdG8gcmVhZGluZy5cXG5cXG5UaGVzZSBtb2RpZmljYXRpb25zIGFkZHJlc3MgYnVmZmVyIGJvdW5kcywgcG9pbnRlciByZWNvbXB1dGF0aW9uLCBhbmQgbGluZWFyIGhlYWRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgY2FzdGluZyBvZiBvZmZzZXRzIGludG8gc2tiLVxcdTAwM2VkYXRhIHdpdGggc2VnNl9nZXRfc3JoKCkgYW5kIHBza2JfbWF5X3B1bGwgY2hlY2tzIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBsaW5lYXIgaGVhZGVyIHNhZmVseS5cXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cXG4tIExvY2FsIHZhcmlhYmxlcyBzdWNoIGFzIGBvbGRfbGVuYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBgc2tiLVxcdTAwM2VsZW5gIHByaW9yIHRvIHJlYWRpbmcuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZGRyZXNzIGJ1ZmZlciBib3VuZHMsIHBvaW50ZXIgcmVjb21wdXRhdGlvbiwgYW5kIGxpbmVhciBoZWFkZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYyBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 15:17:58 +0000 UTC FinishedAt: 2026-09-09 15:22:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_BPF", "BPF_SYSCALL" ], "series_id": "788136cb-be1e-4ed4-b071-541bb03a511d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_lwt_seg6_action", "bpf_update_srh_state", "input_action_end_bpf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbHd0X3NlZzZfYWN0aW9uJiMzNDssCiAgICAmIzM0O2JwZl91cGRhdGVfc3JoX3N0YXRlJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBjYXN0aW5nIG9mIG9mZnNldHMgaW50byBza2ItXHUwMDNlZGF0YSB3aXRoIHNlZzZfZ2V0X3NyaCgpIGFuZCBwc2tiX21heV9wdWxsIGNoZWNrcyB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgbGluZWFyIGhlYWRlciBzYWZlbHkuXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cbi0gTG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYG9sZF9sZW5gIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGBza2ItXHUwMDNlbGVuYCBwcmlvciB0byByZWFkaW5nLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFkZHJlc3MgYnVmZmVyIGJvdW5kcywgcG9pbnRlciByZWNvbXB1dGF0aW9uLCBhbmQgbGluZWFyIGhlYWRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBpbnRlcm5hbCBzdGF0ZSB1cGRhdGUgZnVuY3Rpb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBuZXQvY29yZS9maWx0ZXIuYy4gSXQgY2hhbmdlcyBob3cgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaXMgcmV0cmlldmVkIGFuZCB2YWxpZGF0ZWQsIGFsdGVycyBza2IgcHVsbGluZy9wb2ludGVyIHJlY2FsY3VsYXRpb25zIG9uIGRlY2Fwc3VsYXRpb24gYWN0aW9ucyAoU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNiksIGFuZCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaXMgaW52b2tlZCBhZnRlciBlbmNhcHN1bGF0aW9uIGFjdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gSVB2NiBzZWc2IHJvdXRlcyBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDJjYWZmNjU3M2QxMDk2ZmRiZGYwZGQ4N2YwOTI3OWFkNGNmMTBkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uYjAzN2Q3MGU1ZmU2NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTcsMTUgJiM0Mzs3MDE3LDE2IEBAIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbiBcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuLVx0aW50IHNyaG9mZiA9IDA7XG4mIzQzO1x0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMCkge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gTlVMTDtcbi1cdH0gZWxzZSB7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbiYjNDM7XHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcbiYjNDM7XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4mIzQzO1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbiYjNDM7XHRpZiAoIXNyaClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG4mIzQzO1x0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiB9XG4gXG4gQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5AQCAtNzAzMyw2ICYjNDM7NzAzNCw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIHtcbiBcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4gXHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2xkX2xlbjtcbiBcdGludCBoZHJvZmYgPSAwO1xuIFx0aW50IGVycjtcbiBcbkBAIC03MDU4LDMyICYjNDM7NzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcbiBcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLVx0XHRpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpXG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcbiYjNDM7XHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4mIzQzO1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcbiBcbiBcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XG4gXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXG4tXHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxuIFx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4mIzQzO1x0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG4gXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tXHRcdGlmICghZXJyKVxuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbiBcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XG4gXHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbiYjNDM7XHRcdG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9sZF9sZW4pXG4gXHRcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDticGZfdXBkYXRlX3NyaF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyY2FmZjY1NzNkMTA5NmZkYmRmMGRkODdmMDkyNzlhZDRjZjEwZDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjIwOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA4NTEzMTY3YTg1OGE4Li5iMDM3ZDcwZTVmZTY1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtNzAxNywxNSAmIzQzOzcwMTcsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPQogCQl0aGlzX2NwdV9wdHIoJmFtcDtzZWc2X2JwZl9zcmhfc3RhdGVzKTsKLQlpbnQgc3Job2ZmID0gMDsKJiM0MzsJc3RydWN0IGlwdjZfc3JfaGRyICpzcmg7CiAKLQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpICZsdDsgMCkgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJc3JoX3N0YXRlLSZndDtzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzcmhvZmYpOwotCQlzcmhfc3RhdGUtJmd0O2hkcmxlbiA9IHNyaF9zdGF0ZS0mZ3Q7c3JoLSZndDtoZHJsZW4gJmx0OyZsdDsgMzsKLQkJc3JoX3N0YXRlLSZndDt2YWxpZCA9IHRydWU7Ci0JfQomIzQzOwlzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTsKJiM0MzsJYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpOwomIzQzOwlzcmhfc3RhdGUtJmd0O3NyaCA9IHNyaDsKJiM0MzsJaWYgKCFzcmgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoLSZndDtoZHJsZW4gJmx0OyZsdDsgMzsKJiM0MzsJc3JoX3N0YXRlLSZndDt2YWxpZCA9IHRydWU7CiB9CiAKIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLApAQCAtNzAzMyw2ICYjNDM7NzAzNCw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLAogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwomIzQzOwl1bnNpZ25lZCBpbnQgb2xkX2xlbjsKIAlpbnQgaGRyb2ZmID0gMDsKIAlpbnQgZXJyOwogCkBAIC03MDU4LDMyICYjNDM7NzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYiwKIAogCQlpZiAoaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpICZsdDsgMCkKIAkJCXJldHVybiAtRUJBRE1TRzsKLQkJaWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKQomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7CiYjNDM7CQkJc3JoX3N0YXRlLSZndDtzcmggPSBOVUxMOwomIzQzOwkJCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCX0KJiM0MzsJCV9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpOwogCiAJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAotCQlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiAJCWJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7CiAJCXJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6CiAJCWlmIChzcmhfc3RhdGUtJmd0O3NyaCAmYW1wOyZhbXA7ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpCiAJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQlvbGRfbGVuID0gc2tiLSZndDtsZW47CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKJiM0MzsJCWlmIChza2ItJmd0O2xlbiAhPSBvbGRfbGVuKQogCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKIAogCQlyZXR1cm4gZXJyOwogCWNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOgogCQlpZiAoc3JoX3N0YXRlLSZndDtzcmggJmFtcDsmYW1wOyAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKQogCQkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwkJb2xkX2xlbiA9IHNrYi0mZ3Q7bGVuOwogCQllcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LAogCQkJCQkgIHBhcmFtLCBwYXJhbV9sZW4pOwotCQlpZiAoIWVycikKJiM0MzsJCWlmIChza2ItJmd0O2xlbiAhPSBvbGRfbGVuKQogCQkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKIAogCQlyZXR1cm4gZXJyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHdlIGhhdmUgYSBkaWZmLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSAqd2hhdCogY29kZSBpcyBiZWluZyBtb2RpZmllZC4gVGhlIGRpZmYgaXMgaGl0dGluZyBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGtlcm5lbCYjMzk7cyBmaWx0ZXJpbmcgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdHdvIGZ1bmN0aW9uczogYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIEJQRi1yZWxhdGVkIHVwZGF0ZXMsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGhhbmRsaW5nIHdpdGhpbiB0aGUgbGlnaHR3ZWlnaHQgdHVubmVscyAoTFdUKSBjb250ZXh0LiBUaGlzIGlzIGludGVyZXN0aW5nLCBhcyBhbnkgY2hhbmdlcyBpbiB0aGlzIGFyZWEgY291bGQgaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwYXJ0aWN1bGFybHkgaW4gZW52aXJvbm1lbnRzIGxldmVyYWdpbmcgU1J2NiBvciBvdGhlciBMV1QgZmVhdHVyZXMuCgpUbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUgYW5kIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgcG9zc2libHkganVzdCBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIHBpcGVsaW5lIGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSYjMzk7cmUgb3BlcmF0aW5nIG9uLiBBcmUgdGhlcmUgYW55IG5ldyBlcnJvciBjb25kaXRpb25zIGJlaW5nIGludHJvZHVjZWQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3M/IFdoYXQga2luZCBvZiBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJpc2UgZnJvbSB0aGUgY2hhbmdlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGRlZXBlciBkaXZlIHdpbGwgYmUgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRpZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTcwMTY9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDMxLVxubmV0L2NvcmUvZmlsdGVyLmM6NzAzMjpCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzMtXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzEwMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjcxMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzEwMzpcdC5mdW5jXHRcdD0gYnBmX2x3dF9zZWc2X2FjdGlvbixcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMDQtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9OTA1MT1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTA1Ny1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uOlxubmV0L2NvcmUvZmlsdGVyLmM6OTA1ODpcdFx0cmV0dXJuIFx1MDAyNmJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy05MDU5LVx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9hZGp1c3Rfc3JoOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNzAwMCB0byA3MTAwIG9mIGBuZXQvY29yZS9maWx0ZXIuY2AuIEdpdmVuIHRoYXQgSSYjMzk7bSBsb29raW5nIGF0IGZpbHRlcmluZyBjb2RlLCBJJiMzOTttIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gaG93IHBhY2tldHMgYXJlIGJlaW5nIHByb2Nlc3NlZCBiYXNlZCBvbiB2YXJpb3VzIGNyaXRlcmlhLiBMaW5lcyBpbiB0aGlzIHJhbmdlIGxpa2VseSBkZWFsIHdpdGggc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhlIGZpbHRlcmluZyBwaXBlbGluZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCwgdGhlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQsIGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgZmlsdGVyaW5nIGxvZ2ljIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQuIEkgc3VzcGVjdCB0aGlzIG1pZ2h0IGJlIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBCUEYgb3Igc29tZSBvdGhlciBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yaywgYnV0IEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaCBmdW5jdGlvbiBvciBibG9jayBvZiBjb2RlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMDA6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MDAxOlx0XG43MDAyOlx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xuNzAwMzpcdFx0cmV0dXJuIDA7XG43MDA0Olx0fVxuNzAwNTpcdFxuNzAwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuNzAwNzpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXG43MDA4Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG43MDA5Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG43MDEwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNzAxMTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG43MDEyOlx0XHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjcwMTM6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG43MDE0Olx0fTtcbjcwMTU6XHRcbjcwMTY6XHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzAxNzpcdHtcbjcwMTg6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG43MDE5Olx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjcwMjA6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuNzAyMTpcdFxuNzAyMjpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG43MDIzOlx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG43MDI0Olx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuNzAyNTpcdFx0aWYgKCFzcmgpXG43MDI2Olx0XHRcdHJldHVybjtcbjcwMjc6XHRcbjcwMjg6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG43MDMzOlx0XHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG43MDM0Olx0e1xuNzAzNTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMzY6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAzNzpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW47XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG43MDgxOlx0XHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuNzA4MjpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA4MzpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvbGRfbGVuKVxuNzA4NDpcdFx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDg1Olx0XG43MDg2Olx0XHRcdHJldHVybiBlcnI7XG43MDg3Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODg6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg5Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA5MDpcdFx0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbjcwOTE6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcbjcwOTI6XHRcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbjcwOTM6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbjcwOTQ6XHRcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5NTpcdFxuNzA5NjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5NzpcdFx0ZGVmYXVsdDpcbjcwOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMga2VybmVsIGNvZGUsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWE6CgoqKkRpZ2dpbmcgaW50byBlQlBGIGFuZCBTZWdtZW50IFJvdXRpbmcgd2l0aCB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGVCUEYgYW5kIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgbWFuaXB1bGF0aW9uIGluIHRoaXMgc3BlY2lmaWMga2VybmVsIGNvbnRleHQuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4gSSB3YW50IHRvIGtub3cgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgZUJQRiBmcmFtZXdvcmssIGFuZCwgY3JpdGljYWxseSwgd2hhdCBLY29uZmlnIG9wdGlvbnMsIGlmIGFueSwgYXJlIGNvbnRyb2xsaW5nIHRoZWlyIGluY2x1c2lvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBidWlsZCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGVpciBhdmFpbGFiaWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhvc2UgS2NvbmZpZyBvcHRpb25zIGlzIGNydWNpYWwgZm9yIGFueSBzb3J0IG9mIGtlcm5lbCBjdXN0b21pemF0aW9uIG9yIGZvciBwb3J0aW5nIGl0IHRvIGEgbmV3IHBsYXRmb3JtLgoKTmV4dCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSByZWxhdGlvbnNoaXBzIG5lYXIgdGhlIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCB2YXJpYWJsZSBhbmQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIE15IGd1ZXNzIGlzIHRoaXMgaXMgd2hlcmUgdGhlIFNSSCBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIG1hbmFnZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIEJQRiBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhvc2Ugc3RhdGUgdmFyaWFibGVzIC0gYW5kIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBpbmRpY2F0aW9uIG9mIGhvdyBlQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgdGhvc2UgZGVhbGluZyB3aXRoIFNSSCBtYW5pcHVsYXRpb24sIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgbmV0d29yayBmaWx0ZXJpbmcgYW5kIGZvcndhcmRpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBtb2R1bGUuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc29tZSBzdGF0ZSB0cmFuc2l0aW9uIGhhbmRsaW5nIGhlcmUsIGluIHJlc3BvbnNlIHRvIGVCUEYgYWN0aW9ucyAtIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz02OTczPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzYtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6Njk3NzpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNjk3OC1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDE2PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAxOC1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDE5Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDIwLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAzMj1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDM1LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzY6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzctXHR1bnNpZ25lZCBpbnQgb2xkX2xlbjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTEyPUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzExNS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MTE2Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MTE3LVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIG15IGFjdGlvbnM6CgoqKkRlbHZpbmcgaW50byB0aGUgQ29kZSYjMzk7cyBHdWFyZHJhaWxzKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBsaW5lIDY5NzAgdG8gNzE1MCwgb3IsIGlmIHRoYXQmIzM5O3Mgbm90IHRoZSByaWdodCBhcmVhLCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGdhemUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBvciwgZmFpbGluZyB0aGF0LCB0aGUgYEtjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIGNvbXBpbGF0aW9uIG9yIGluY2x1c2lvbiBvZiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gYWxtb3N0IGNlcnRhaW4gSSYjMzk7bGwgZmluZCBteSBhbnN3ZXJzIGluIGAjaWZkZWZgIGd1YXJkcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBhdCBwbGF5LiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIHNvbWUgZmVhdHVyZSBmbGFnIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgb3Igbm90LiBGaW5kaW5nIHRoZSBzcGVjaWZpYyBzeW1ib2wgb3IgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdGF0ZW1lbnRzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHNlY3Rpb24gaXMgYSBjYXJlZnVsbHkgY29udHJvbGxlZCBwaWVjZSwgcG9zc2libHkgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgbmV0d29ya2luZyBmaWx0ZXIgb3IgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIG5vdCBhbHdheXMgZGVzaXJlZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBwcmVjb25kaXRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgaXTigJlzIGV2ZW4gcHJlc2VudCBpbiB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUFY2X1NFRzZfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02ODc3LVxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY4Nzktc3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMC19XG5uZXQvY29yZS9maWx0ZXIuYzo2OTExOiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xubmV0L2NvcmUvZmlsdGVyLmMtNjkxMi1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTIxPUJQRl9DQUxMXzQoYnBmX2x3dF9pbl9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSwgdm9pZCAqLCBoZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cdHN3aXRjaCAodHlwZSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNjpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjk3MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy02OTczLUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTcwLX07XG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xubmV0L2NvcmUvZmlsdGVyLmMtNzE3Mi1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDUxPWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05MDUzLVx0c3dpdGNoIChmdW5jX2lkKSB7XG5uZXQvY29yZS9maWx0ZXIuYzo5MDU0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtOTA1NS1cdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM4OC1cdFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM6Mzg5Olx0XHR7IFwmIzM0O0NPTkZJR19JUFY2X1NFRzZfQlBGXCYjMzQ7LCB9LFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cdFx0LyogQlBGX1BST0dfVFlQRV9MSVJDX01PREUyIGFuZCByZWxhdGVkIGhlbHBlcnMgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTQ4PUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6NDk6Q09ORklHX0lQVjZfU0VHNl9CUEY9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19JUFY2X1NFRzZfQlBGIEtjb25maWcgRGVmaW5pdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgQ09ORklHX0lQVjZfU0VHNl9CUEZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBjb250cm9scyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBJUHY2IHNlZ21lbnQgcm91dGluZyB3aXRoIEJQRiBsYW5kc2NhcGUuIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKSDigJMgdXN1YWxseSwgaXQmIzM5O3Mgc29tZXdoZXJlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBvciBJUHY2LXJlbGF0ZWQgZGlyZWN0b3JpZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBmaW5kYCBvciBgZ3JlcGAgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQgbmFycm93IGRvd24gdGhlIGxvY2F0aW9uLiBPbmNlIEkgaGF2ZSB0aGUgZmlsZSwgSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSBkZWZpbml0aW9uIHZlcnkgY2FyZWZ1bGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uCgoqICAgKipUaGUgZGVwZW5kZW5jeSBjaGFpbjoqKiBXaGF0IG90aGVyIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIG9uZSB0byBiZSBhdmFpbGFibGU/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgbGlrZSBgQ09ORklHX0lQVjZgIG9yIHNvZnQgZGVwZW5kZW5jaWVzIGluZmx1ZW5jaW5nIGl0cyBpbmNsdXNpb24/IFRoZSBkZXBlbmRlbmNpZXMgd2lsbCBzaG93IG1lIHdoZXJlIHRoaXMgZmVhdHVyZSBpcyBsb2dpY2FsbHkgc2l0dWF0ZWQgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uCiogICAqKlRoZSBwcm9tcHQgc3RyaW5nOioqIFdoYXQgaXMgdGhlIGRlc2NyaXB0aXZlIHRleHQgdGhhdCB0aGUgdXNlciBzZWVzIHdoZW4gdGhleSYjMzk7cmUgY29uZmlndXJpbmcgdGhlIGtlcm5lbD8gRG9lcyB0aGlzIHRleHQgY2xlYXJseSBleHBsYWluIHRoZSBwdXJwb3NlIGFuZCBiZW5lZml0cyBvZiBlbmFibGluZyBgQ09ORklHX0lQVjZfU0VHNl9CUEZgPyBBIHdlbGwtd3JpdHRlbiBwcm9tcHQgaXMgY3J1Y2lhbCBmb3IgdXNlciB1bmRlcnN0YW5kaW5nLgoqICAgKipUaGUgaGVscCB0ZXh0OioqIFRoZSBsb25nZXIgaGVscCB0ZXh0IGlzIHdoZXJlIHRoZSByZWFsIGRldGFpbCByZXNpZGVzLiBJdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgaW4tZGVwdGggZXhwbGFuYXRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBkb2VzLCBsaWtlbHkgdG91Y2hpbmcgb24gdG9waWNzIGxpa2UgZW5hYmxpbmcgQlBGLWJhc2VkIHByb2Nlc3Npbmcgb2YgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBkYXRhLCBob3cgaXQgcmVsYXRlcyB0byB0aGUgZGF0YSBwbGFuZSwgYW5kIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3Iga2V5d29yZHMgbGlrZSAmIzM0O1NSdjYsJiMzNDsgJiMzNDtCUEYsJiMzNDsgJiMzNDtkYXRhIHBsYW5lLCYjMzQ7ICYjMzQ7cGVyZm9ybWFuY2UsJiMzNDsgYW5kIGFueSByZWxhdGVkIGluZnJhc3RydWN0dXJlIG9yIHN1YnN5c3RlbXMuIEl0IG1pZ2h0IGFsc28gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoqICAgKipBbnkgZGVmYXVsdCB2YWx1ZXM6KiogRG9lcyB0aGUgb3B0aW9uIGhhdmUgYSBkZWZhdWx0IHZhbHVlIChlLmcuLCBgeWAsIGBuYCwgYG1gKT8gSXMgaXQgZGVmYXVsdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgbW9kdWxhcj8gSWYgc28sIHRoaXMgaGVscHMgZXN0YWJsaXNoIHdoZXRoZXIgaXQmIzM5O3MgY29uc2lkZXJlZCBhIGNvcmUgcGFydCBvZiB0aGUgZmVhdHVyZSBzZXQgb3IgYW4gb3B0aW9uYWwgZW5oYW5jZW1lbnQuCiogICAqKkxvY2F0aW9uIGluIHRoZSBrZXJuZWwgdHJlZToqKiBJbiB3aGljaCBwYXJ0IG9mIHRoZSBrZXJuZWwgZG9lcyBpdCByZXNpZGU/IEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIGtlcm5lbCBtb2R1bGVzPwoqICAgKipBbnkgYXNzb2NpYXRlZCBzeW1ib2wgZGVmaW5pdGlvbnM6KiogQXJlIHRoZXJlIGFueSBtYWNyb3Mgb3Igc3ltYm9scyBkZWZpbmVkIHRoYXQgZGVwZW5kIG9uIHRoaXMgb25lIGJlaW5nIHNldD8gVGhhdCBjYW4gaGVscCBpbmZlciB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgdGhpcyBjb25maWcgb3B0aW9uIGV4cG9zZXMuCgpXaXRoIHRoaXMgaW5mb3JtYXRpb24gaW4gaGFuZCwgSSBjYW4gY29uZmlkZW50bHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGFuZCBpbnRlZ3JhdGUgaXQgaW50byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJUHY2IHNlZ21lbnQgcm91dGluZyB3aXRoIEJQRiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgY2FuIGFsc28gZW5zdXJlIHRoYXQgbXkgY29uZmlndXJhdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIHVzZSBjYXNlIGFuZCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfU0VHNl9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0zMDA9Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCBwbGF5LCBteSBpbnN0aW5jdHMgdGVsbCBtZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDMxMiBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlcyB0byBvdGhlcnMsIHdoYXQgb3RoZXIgc2V0dGluZ3MgZW5hYmxlIG9yIGRpc2FibGUgaXQsIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGdvdmVybnMgaXRzIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGFuZCBtYWtpbmcgaW5mb3JtZWQgZGVjaXNpb25zLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIHRoZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDU6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gMzA2Olx0XHRoZWxwXG4gMzA3Olx0XHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxuIDMwODpcdFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXG4gMzA5Olx0XG4gMzEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzExOlx0XG4gMzEyOlx0Y29uZmlnIElQVjZfU0VHNl9CUEZcbiAzMTM6XHRcdGRlZl9ib29sIHlcbiAzMTQ6XHRcdGRlcGVuZHMgb24gSVBWNl9TRUc2X0xXVFVOTkVMXG4gMzE1Olx0XHRkZXBlbmRzIG9uIElQVjYgPSB5XG4gMzE2Olx0XG4gMzE3Olx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG4gMzE4Olx0XHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuIDMxOTpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gMzIwOlx0XHRzZWxlY3QgTFdUVU5ORUxcbiAzMjE6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAzMjI6XHRcdGhlbHBcbiAzMjM6XHRcdCAgU3VwcG9ydCBmb3IgUkZDNjU1NCBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDMyNDpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cbiAzMjU6XHRcbiAzMjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAzMjc6XHRcbiAzMjg6XHRjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxuIDMyOTpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNvbmZpZyBJUFY2X1NFRzZfQlBGYCBvcHRpb24gYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0IGhhcyBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCByZWxpZXMgb24gYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kLCBvZiBjb3Vyc2UsIElQdjYgaXRzZWxmIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGBJUFY2ID0geWAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UsIGJlY2F1c2Ugc2VnbWVudCByb3V0aW5nIGlzIGFuIElQdjYgZXh0ZW5zaW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgYElQVjZfU0VHNl9MV1RVTk5FTGAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGp1bXAgaW50byB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IGl0cyBkZWZpbml0aW9uIHRoZXJlLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCB3aGF0IGV4YWN0bHkgaXQgZW5hYmxlcywgYW5kIGhvcGVmdWxseSBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHdob2xlIHNlZ21lbnQgcm91dGluZyBpbXBsZW1lbnRhdGlvbiB3b3JrcyB3aXRoaW4gdGhlIElQdjYgc3RhY2suIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4gMzAwOlx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4gMzAxOlx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbiAzMDI6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMwMzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDMwNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gMzA1Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDMwNjpcdFx0aGVscFxuIDMwNzpcdFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cbiAzMDg6XHRcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxuIDMwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRUc2IEJQRiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGZpcnN0IHRoaW5nLCBJIHNlZSB0aGF0IGBJUFY2X1NFRzZfQlBGYCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQgYElQVjZgIGFyZSBzZXQgdG8gJiMzOTt5JiMzOTsuIE1ha2VzIHNlbnNlLiBBbmQsIG9mIGNvdXJzZSwgQlBGIG5lZWRzIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCBhcyB3ZWxsLiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgZm9jdXNpbmcgb24gdGhlIHBhdGNoIGl0c2VsZiwgSSBjYW4gc2VlIHRoZXkmIzM5O3ZlIHVwZGF0ZWQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCB0byB1c2UgYHNlZzZfZ2V0X3NyaGAgYW5kIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGUgcmV0cmlldmFsIG9mIHRoZSBTUkggaW5mb3JtYXRpb24uIFRoZSBwcmV2aW91cyBtZXRob2Qgb2Ygc2VhcmNoaW5nIGZvciB0aGUgU1JIIHVzaW5nIGBpcHY2X2ZpbmRfaGRyYCBzZWVtcyB0byBoYXZlIGJlZW4gcmVtb3ZlZCwgd2hpY2ggcHJvYmFibHkgbWVhbnMgdGhleSBhcmUgb3B0aW1pemluZyBpdC4gVGhleSBhbHNvIGFkZGVkIGEgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIFNSSC4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbi4gVGhpcyBpcyBhIEJQRiBoZWxwZXIgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zLiBJJiMzOTttIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmZXJlbnQgYGNhc2VgIHN0YXRlbWVudHMgaGVyZSwgc3BlY2lmaWNhbGx5IHRoZSBhZGp1c3RtZW50cyBiZWluZyBtYWRlIHRvIHRoZSBgc2tiYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgU0VHNiBhY3Rpb25zLiBJdCBzZWVtcyBsaWtlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBhaW1lZCBhdCBlbnN1cmluZyB0aGUgU1JIIHN0YXRlIGlzIGNvcnJlY3RseSB1cGRhdGVkIGFmdGVyIHBvdGVudGlhbGx5IHB1bGxpbmcgaGVhZGVycyBvciBlbmNhcHN1bGF0aW5nIHBhY2tldHMuIFRoZSBhZGRpdGlvbiBvZiBgcHNrYl9tYXlfcHVsbGAgaW5zdGVhZCBvZiBgcHNrYl9wdWxsYCBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgYW5kIG1ha2VzIHN1cmUgdGhlIHB1bGwgb3BlcmF0aW9uIGRvZXNuJiMzOTt0IGNhdXNlIGEgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb24uIEl0IG1ha2VzIHN1cmUgdGhhdCBwdWxsaW5nIGEgaGVhZGVyIGRvZXNuJiMzOTt0IGdvIGJleW9uZCB0aGUgcGFja2V0JiMzOTtzIGN1cnJlbnQgZGF0YSBib3VuZGFyaWVzLiBUaGVuLCB0aGUgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBnZXRzIGNhbGxlZCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlIHN0YXRlIGlzIGNvcnJlY3QuCgpJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0cyB3aGVyZSBgbHd0X3NlZzZsb2NhbGAgaXMgYWN0dWFsbHkgZXhlY3V0ZWQuIExldCBtZSBzZWFyY2ggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBjb2RlYmFzZSBmb3IgdGhlIGBzZWc2X2xvY2FsX2AgcHJlZml4IG9yIHRoYXQgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgdHlwZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgY2hhbmdlcyBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBsb2NhbCBzZWdtZW50IHJvdXRpbmcgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdD0xOD1kZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGZvb3Rub3Rlcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM1LSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM3LSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MjU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBsd3RfeG1pdCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjYtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6Mjc6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGx3dF9zZWc2bG9jYWwsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI4LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDgyOlx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXHRCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsXG4tLVxua2VybmVsL2JwZi9idGYuYz05MDc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdHlwZV90b19rZnVuY19ob29rKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXG4tLVxua2VybmVsL2JwZi9idGYuYy05MTE0LVx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxua2VybmVsL2JwZi9idGYuYzo5MTE1Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG5rZXJuZWwvYnBmL2J0Zi5jLTkxMTYtXHRcdHJldHVybiBCVEZfS0ZVTkNfSE9PS19MV1Q7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjg0Mz1zdGF0aWMgYm9vbCBpc19uZXRfYWRtaW5fcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1MS1cdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI4NTI6XHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTMtXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfU0tCOlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE5PXN0YXRpYyBib29sIG1heV9hY2Nlc3NfZGlyZWN0X3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MjgtXHRjYXNlIEJQRl9QUk9HX1RZUEVfTFdUX09VVDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODI5Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgzMC1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4ODE9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5Mi1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5NC1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTkVURklMVEVSLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE5MTU9c3RhdGljIGludCBwYXJzZV9ubGFfYnBmKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM2LVx0ZmQgPSBubGFfZ2V0X3UzMih0YltTRUc2X0xPQ0FMX0JQRl9QUk9HXSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNzpcdHAgPSBicGZfcHJvZ19nZXRfdHlwZShmZCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xOTM4LVx0aWYgKElTX0VSUihwKSkge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODEtXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcdEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMS1cdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXHQ9IFwmIzM0O2Nncm91cF9zb2NrX2FkZHJcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjIyMjpcdFtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxdXHRcdD0gXCYjMzQ7bHd0X3NlZzZsb2NhbFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIzLVx0W0JQRl9QUk9HX1RZUEVfTElSQ19NT0RFMl1cdFx0PSBcJiMzNDtsaXJjX21vZGUyXCYjMzQ7LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NzE1Nz1zdGF0aWMgc3RydWN0IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzAtXHR7IEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgICAgICAgICAgICAgICAgIFwmIzM0O19fc2tfYnVmZlwmIzM0OyB9LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo3MTcxOlx0eyBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsICAgICAgICAgICBcJiMzNDtfX3NrX2J1ZmZcJiMzNDsgfSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzE3Mi1cdHsgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgICAgICAgICAgICAgICAgXCYjMzQ7X19za19idWZmXCYjMzQ7IH0sXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MTAzPXN0YXRpYyBpbnQgcHJvYmVfcHJvZ19sb2FkKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTc4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UX1dSSVRBQkxFOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MTc5Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0xODAtXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jPTIyNT12b2lkIHRlc3RfdmVyaWZfc2NhbGVfc2VnNl9sb29wKClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYzoyMjc6XHRzY2FsZV90ZXN0KFwmIzM0O3Rlc3Rfc2VnNl9sb29wLmJwZi5vXCYjMzQ7LCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGZhbHNlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl92ZXJpZl9zY2FsZS5jLTIyOC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jPTIwPXN0YXRpYyBzdHJ1Y3Qgc2VjX25hbWVfdGVzdCB0ZXN0c1tdID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00Mi1cdHtcJiMzNDtsd3RfeG1pdFwmIzM0OywgezAsIEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo0MzpcdHtcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAwfSwgey1FSU5WQUwsIDB9IH0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDQtXHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTIwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBQcm9ncmFtIFR5cGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW0gdHlwZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG9uZSB1c2VkIHNwZWNpZmljYWxseSBmb3IgU1J2NiAoc2VnNikgbG9jYWwgYWN0aW9uIHByb2Nlc3NpbmcsIEkgcmVtZW1iZXIgaXQmIzM5O3MgcmVsYXRlZCB0byB0aG9zZSBsaWdodHdlaWdodCB0dW5uZWxzLCB1c2luZyB0aGluZ3MgbGlrZSBgU0VHNl9MT0NBTF9BQ1RJT05fQl9QRmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBJIGNhbiB0ZXN0IHRoaXMgdHlwZSBvZiBwcm9ncmFtLgoKSG1tLCBJIGtub3cgYGJwZl9wcm9nX3Rlc3RfcnVuYCBhbmQgaXRzIHJlbGF0ZWQgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfUlVOYCwgYXJlIHVzZWQgZm9yIGV4ZWN1dGluZyBMV1QgcHJvZ3JhbXMgYW5kIHBlcmZvcm1pbmcgcm91dGUgbG9va3Vwcy4gSXQgbG9va3MgbGlrZSBpdCBjYW4gYmUgcnVuIHRocm91Z2ggbmV0bGluaywgaXAgcm91dGUgY29tbWFuZHMsIHBhY2tldCByZWNlaXZlLCBhbmQgdGhlIEJQRiB0ZXN0IHJ1biBmZWF0dXJlIGl0c2VsZi4KCk15IG1haW4gcXVlc3Rpb24gbm93IGlzOiAqY2FuKiBgQlBGX1BST0dfVEVTVF9SVU5gIGFjdHVhbGx5IGJlIHVzZWQgdG8gdGVzdCBhIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW0/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gdmVyaWZ5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfcHJvZ190ZXN0X3J1bmAgLSBJJiMzOTtsbCBjaGVjayBgbmV0L2JwZi90ZXN0X3J1bi5jYCBvciB3aGVyZXZlciB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcHJvZ3JhbSB0eXBlcyB0byBzZWUgaWYgaXQmIzM5O3MgY29tcGF0aWJsZSB3aXRoIHRoaXMgU1J2NiBsb2NhbCBhY3Rpb24gQlBGIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gQlBGIFRlc3QgRXhlY3V0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHRlc3QgZXhlY3V0aW9uIHByb2NlZHVyZXMgcmVsYXRlZCB0byBCUEYuIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHdvdWxkIHRoZSByZWxldmFudCBmaWxlcyBiZT8gIExpa2VseSBjYW5kaWRhdGVzIGp1bXAgdG8gbWluZDogYHRlc3RfcnVuX3NrYmAsIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsdXJraW5nIHdpdGhpbiB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkuICBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhwbG9yaW5nIHRoYXQgYG5ldC9icGYvYCBwYXRoLiBUaGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRlc3RzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0JiMzOTtzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2R1bW15X3N0cnVjdF9vcHMuYyYjMzQ7LAogICAgJiMzNDt0ZXN0X3J1bi5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBUZXN0aW5nKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9icGYvdGVzdF9ydW4uY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIEJQRiB0ZXN0IGV4ZWN1dGlvbiBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRlc3QgZnJhbWV3b3JrIGlzIHNldCB1cCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBhbmQgcnVuLCBhbmQgd2hhdCBraW5kIG9mIHZlcmlmaWNhdGlvbiBpcyBkb25lIG9uIHRoZSByZXN1bHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgZmlsZSBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzIGxpa2UgYGJwZl9wcm9nX2xvYWRgLCBgYnBmX2F0dGFjaGAsIGFuZCBhbnkgY2FsbHMgcmVsYXRlZCB0byByZXN1bHQgY29tcGFyaXNvbiBvciBsb2dnaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUg4oCTIHRoZSB0ZXN0IHNldHVwLCB0aGUgcHJvZ3JhbSBleGVjdXRpb24sIGFuZCB0aGUgdmFsaWRhdGlvbiBzdGVwcy4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFueSBjbGV2ZXJuZXNzIGhlcmUsIGFueSBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCBvciBpbXByb3ZlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0xXVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmM9MTAzNT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tiKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY1LVx0XHRicmVhaztcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDY2Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9JTjpcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDY3Olx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTA2ODpcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY5LVx0XHRpc19sd3QgPSB0cnVlO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMDg3LVx0XHRpZiAoY3R4LVx1MDAzZWRhdGFfZW5kKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTA4ODpcdFx0XHQvKiBOb24tbGluZWFyIExXVCB0ZXN0X3J1biBpcyB1bnN1cHBvcnRlZCBmb3Igbm93LiAqL1xubmV0L2JwZi90ZXN0X3J1bi5jLTEwODktXHRcdFx0aWYgKGlzX2x3dCkge1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMjEyLVxubmV0L2JwZi90ZXN0X3J1bi5jOjEyMTM6XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQpIHtcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjE0LVx0XHRpZiAoIWlwdjZfbW9kX2VuYWJsZWQoKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBMV1RfU0VHNkxPQ0FMIEV4ZWN1dGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7d2hlcmUgKmV4YWN0bHkqIGRvZXMgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgZ2V0IGl0cyBob29rcyBpbiB0aGUga2VybmVsPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGVjdXRpb24gcGF0aCBhdCBhIGdyYW51bGFyIGxldmVsLiBJIGNhbiYjMzk7dCBqdXN0IGJlIHNhdGlzZmllZCB3aXRoIGEgZ2VuZXJhbCBkZXNjcmlwdGlvbjsgSSB3YW50IHRoZSBzcGVjaWZpYyBjYWxsIHN0YWNrcywgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBwcmVjaXNlIGNvbnRleHRzIGluIHdoaWNoIHRoZXNlIEJQRiBwcm9ncmFtcyBhcmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgaXMgZGVzaWduZWQgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgZHVyaW5nIHRoZSBjb2RlIGRldmVsb3BtZW50IGZvciBtZSB0byBvcHRpbWl6ZSBteSBvd24gY29kZSBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0X3NlZzZsb2NhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q9MTg9ZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBmb290bm90ZXMuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MztcbkRvY3VtZW50YXRpb24vYnBmL2xpYmJwZi9wcm9ncmFtX3R5cGVzLnJzdDoxMzY6fCBgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGBgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBsd3Rfc2VnNmxvY2FsYGAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0Mztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI2LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNTA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzo5MDUxOmx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTIte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExNTcyPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgbHd0X3htaXRfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU3Njpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsd3Rfc2VnNmxvY2FsX3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc3Olx0LmdldF9mdW5jX3Byb3RvXHRcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzgtXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGx3dF9zZWc2bG9jYWxfcHJvZ19vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4My19O1xuLS1cbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdD0yNz1QUk9HIENPTU1BTkRTXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0LTQ4LXwgICAgICoqY2dyb3VwL3NvY2sqKiB8ICoqY2dyb3VwL2RldioqIHwgKipsd3RfaW4qKiB8ICoqbHd0X291dCoqIHwgKipsd3RfeG1pdCoqIHxcbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdDo0OTp8ICAgICAqKmx3dF9zZWc2bG9jYWwqKiB8ICoqc29ja29wcyoqIHwgKipza19za2IqKiB8ICoqc2tfbXNnKiogfCAqKmxpcmNfbW9kZTIqKiB8XG50b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QtNTAtfCAgICAgKipjZ3JvdXAvYmluZDQqKiB8ICoqY2dyb3VwL2JpbmQ2KiogfCAqKmNncm91cC9wb3N0X2JpbmQ0KiogfCAqKmNncm91cC9wb3N0X2JpbmQ2KiogfFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sPTI1Nj1fYnBmdG9vbCgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wtNDkzLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dyb3VwL2RldiBsd3RfaW4gbHd0X291dCBsd3RfeG1pdCBcXFxudG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2w6NDk0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHd0X3NlZzZsb2NhbCBzb2Nrb3BzIHNrX3NrYiBza19tc2cgbGlyY19tb2RlMiBcXFxudG9vbHMvYnBmL2JwZnRvb2wvYmFzaC1jb21wbGV0aW9uL2JwZnRvb2wtNDk1LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dyb3VwL2JpbmQ0IGNncm91cC9iaW5kNiBcXFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz0yNTQyPXN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTI1NzYtXHRcdFwmIzM0OyAgICAgICAgICAgICAgICAgY2dyb3VwL3NvY2sgfCBjZ3JvdXAvZGV2IHwgbHd0X2luIHwgbHd0X291dCB8IGx3dF94bWl0IHxcXG5cJiMzNDtcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzoyNTc3Olx0XHRcJiMzNDsgICAgICAgICAgICAgICAgIGx3dF9zZWc2bG9jYWwgfCBzb2Nrb3BzIHwgc2tfc2tiIHwgc2tfbXNnIHwgbGlyY19tb2RlMiB8XFxuXCYjMzQ7XG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMjU3OC1cdFx0XCYjMzQ7ICAgICAgICAgICAgICAgICBza19yZXVzZXBvcnQgfCBmbG93X2Rpc3NlY3RvciB8IGNncm91cC9zeXNjdGwgfFxcblwmIzM0O1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMS1cdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXHQ9IFwmIzM0O2Nncm91cF9zb2NrX2FkZHJcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjIyMjpcdFtCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxdXHRcdD0gXCYjMzQ7bHd0X3NlZzZsb2NhbFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIzLVx0W0JQRl9QUk9HX1RZUEVfTElSQ19NT0RFMl1cdFx0PSBcJiMzNDtsaXJjX21vZGUyXCYjMzQ7LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTAxMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfc2VjX2RlZiBzZWN0aW9uX2RlZnNbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTk0LVx0U0VDX0RFRihcJiMzNDtsd3RfeG1pdFwmIzM0OyxcdFx0TFdUX1hNSVQsIDAsIFNFQ19OT05FKSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTAxOTU6XHRTRUNfREVGKFwmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssXHRMV1RfU0VHNkxPQ0FMLCAwLCBTRUNfTk9ORSksXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTk2LVx0U0VDX0RFRihcJiMzNDtzb2Nrb3BzXCYjMzQ7LFx0XHRTT0NLX09QUywgQlBGX0NHUk9VUF9TT0NLX09QUywgU0VDX0FUVEFDSEFCTEVfT1BUKSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmMtMzItI2RlZmluZSBORVROU19CQVNFIFwmIzM0O2x3dC1zZWc2bG9jYWwtXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM6MzM6I2RlZmluZSBCUEZfRklMRSBcJiMzNDt0ZXN0X2x3dF9zZWc2bG9jYWwuYnBmLm9cJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2x3dF9zZWc2bG9jYWwuYy0zNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM9NDM9c3RhdGljIGludCBzZXR1cCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2x3dF9zZWc2bG9jYWwuYy0xMTMtI2RlZmluZSBDTElFTlRfUE9SVCAyMTIxXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM6MTE0OnZvaWQgdGVzdF9sd3Rfc2VnNmxvY2FsKHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmMtMTE1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVx0e1wmIzM0O2x3dF94bWl0XCYjMzQ7LCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlx0e1wmIzM0O2x3dF9zZWc2bG9jYWxcJiMzNDssIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYy00NC1cdHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zZWc2X2xvb3AuYz0xODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYWRkX3RsdihzdHJ1Y3QgX19za19idWZmICpza2IsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmMtMjI2LS8vIGFuZCBhcHBseSBFbmQuWCBhY3Rpb24gdG8gZmM0Mjo6MVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmM6MjI3OlNFQyhcJiMzNDtsd3Rfc2VnNmxvY2FsXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmMtMjI4LWludCBfX2FkZF9lZ3JfeChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdpdGggdGhhdCBgc2VnNl9sb2NhbC5jYCBtb2R1bGUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEJQRjoKCioqRGl2aW5nIGludG8gU0VHNiBhbmQgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBCUEYgcHJvZ3JhbSB0eXBlIGlzIGF0dGFjaGVkIGFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgbG9jYWwgcG9saWNpZXMuIE15IHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMgd2l0aCB0aGlzIGxldmVsIG9mIGtlcm5lbCBpbnRlcmFjdGlvbiwgaXMgdGhlIHNvdXJjZSBjb2RlOiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZGlnIGluIHRvIGZpbmQgdGhlIGhvb2tzIGFuZCBleGVjdXRpb24gcG9pbnRzLiBJdCYjMzk7cyBhIGtleSBmaWxlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBTUnY2IGxvY2FsIHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCBpbnZvbHZlIG9yIHJlbGF0ZSB0byBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYC4gVGltZSB0byByb2xsIHVwIHRoZSBzbGVldmVzIGFuZCBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MzA9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDQ3LVx0ICogc3RhdGVtZW50LiBJdCBpcyBhbHNvIGFjY2Vzc2VkIGJ5IHRoZSBicGZfbHd0X3NlZzZfKiBoZWxwZXJzIHZpYVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NDg6XHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDktXHQgKi9cbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Ny1cdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4Olx0cmV0ID0gYnBmX3Byb2dfcnVuX3NhdmVfY2Ioc2x3dC1cdTAwM2VicGYucHJvZywgc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDU5LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTkyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHNlZzZfbG9jYWwuYzogVGhlIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgUHV6emxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIHRoZSBleGl0IHBvaW50IGFmdGVyIHRoZSBCUEYgcHJvY2Vzc2luZyBvZiBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgbG9jYWxseS4KClNvLCBsZXQmIzM5O3MgcmVmcmVzaDogYW4gSVB2NiBwYWNrZXQgd2l0aCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgY29tZXMgaW4uIEl0JiMzOTtzIGJlZW4gcHJvY2Vzc2VkIGJ5IGEgcHJlY2VkaW5nIEJQRiBwcm9ncmFtIChsaWtlbHkgaW4gdGhlIGlucHV0IHBhdGggc29tZXdoZXJlLCB0aG91Z2ggSSYjMzk7bGwgaGF2ZSB0byB0cmFjZSB0aGF0IGFnYWluKSwgYW5kIG5vdyB3ZSYjMzk7cmUgaGVyZS4gYGlucHV0X2FjdGlvbl9lbmRfYnBmYCAqc2hvdWxkKiBiZSB0aGUgZW5kIG9mIHRoYXQgbG9jYWwgcHJvY2Vzc2luZy4gTXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSB3ZSYjMzk7cmUgZ29pbmcgdG8gY2xlYW4gdXAgYW55IHN0YXRlLCBkZXRlcm1pbmUgd2hlcmUgdG8gZm9yd2FyZCB0aGUgcGFja2V0IG5leHQgKGxpa2VseSBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiB0aGUgQlBGLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0pLgoKSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0byB0aGUgc2tiIChzb2NrZXQgYnVmZmVyKSBhbmQgdGhlIGZsb3cgbWV0YWRhdGEuIERvZXMgaXQgbW9kaWZ5IGFueSBmaWVsZHMgd2l0aGluIHRoZSBza2I/IElzIGl0IHNldHRpbmcgdXAgdGhlIG5leHQgaG9wPyBEb2VzIGl0IGNhbGwgaW50byBzb21lIG90aGVyIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gZm9yd2FyZGluZywgb3IgbWF5YmUgYSByb3V0aW5nIGxvb2t1cD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyB0byBgc2tiLSZndDtkZXZgLCBgc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAsIGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBTUkggaXRzZWxmLCBhbmQgY3JpdGljYWxseSwgaG93IHRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBhbG9uZy4gSWYgaXQmIzM5O3MgQlBGIGJhc2VkLCB0aGVuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG91dGNvbWUgb2YgdGhhdCBCUEYgcHJvY2Vzc2luZy4gV2hhdCYjMzk7cyBwYXNzZWQgdG8gdGhlIEJQRiBwcm9ncmFtLCB3aGF0JiMzOTtzIHJldHVybmVkLCBhbmQgd2hhdCYjMzk7cyBkb25lIHdpdGggdGhhdCByZXN1bHQuIERvZXMgaXQgZGVjaWRlIHRoZSBmb3J3YXJkaW5nIG9yIGRvZXMgdGhpcyBjYWxsIHRoZSBmb3J3YXJkaW5nIHBhdGggd2l0aCB0aGF0IHJlc3VsdD8KCkkgYWxzbyBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcuIERvZXMgaXQgaGFuZGxlIEJQRiBlcnJvcnMgZ3JhY2VmdWxseT8gV2hhdCBoYXBwZW5zIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIHRoZSBTUkggaXRzZWxmPyBJcyBpdCBkcm9wcGVkLCByZXJvdXRlZCwgb3IgbG9nZ2VkPyBJIGV4cGVjdCBlcnJvciBjb2RlcyB0byBiZSBoYW5kbGVkIGVsZWdhbnRseS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFNSdjYgc3RhY2suIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZSwgaW50ZXJmYWNlIHNlbGVjdGlvbiwgYW5kIG1heWJlIGV2ZW4gc29tZSBhY2NvdW50aW5nIG9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGF0IHRoaXMgc3RhZ2UuCgpVbHRpbWF0ZWx5LCBJIGV4cGVjdCB0byBzZWUgYSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHNlcXVlbmNlIHRoYXQgZW5zdXJlcyB0aGF0IHRyYWZmaWMgYXJyaXZlcyB3aGVyZSBpdCBuZWVkcyB0byBiZSB3aXRoIGFsbCB0aGUgU1J2NiBtYWdpYyBpbnRhY3QgYW5kIHRoYXQgdGhlIHBhY2tldCBpcyB0aGVuIGZvcndhcmRlZCBvciBwcm9jZXNzZWQgbG9jYWxseS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiBteSBhc3N1bXB0aW9ucyBob2xkIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTQzMTpcdFx0XHRcdFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuMTQzMjpcdHtcbjE0MzM6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZTtcbjE0MzQ6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuMTQzNTpcdFx0aW50IHJldDtcbjE0MzY6XHRcbjE0Mzc6XHRcdHNyaCA9IGdldF9hbmRfdmFsaWRhdGVfc3JoKHNrYik7XG4xNDM4Olx0XHRpZiAoIXNyaCkge1xuMTQzOTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE0NDA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDQxOlx0XHR9XG4xNDQyOlx0XHRhZHZhbmNlX25leHRzZWcoc3JoLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKTtcbjE0NDM6XHRcbjE0NDQ6XHRcdC8qIFRoZSBhY2Nlc3MgdG8gdGhlIHBlci1DUFUgYnVmZmVyIHNyaF9zdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcnVubmluZ1xuMTQ0NTpcdFx0ICogYWx3YXlzIGluIHNvZnRpcnEgY29udGV4dCAod2l0aCBkaXNhYmxlZCBCSCkuIE9uIFBSRUVNUFRfUlQgdGhlXG4xNDQ2Olx0XHQgKiByZXF1aXJlZCBsb2NraW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgbG9jYWxfbG9ja19uZXN0ZWRfYmgoKVxuMTQ0NzpcdFx0ICogc3RhdGVtZW50LiBJdCBpcyBhbHNvIGFjY2Vzc2VkIGJ5IHRoZSBicGZfbHd0X3NlZzZfKiBoZWxwZXJzIHZpYVxuMTQ0ODpcdFx0ICogYnBmX3Byb2dfcnVuX3NhdmVfY2IoKS5cbjE0NDk6XHRcdCAqL1xuMTQ1MDpcdFx0bG9jYWxfbG9ja19uZXN0ZWRfYmgoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcbjE0NTE6XHRcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjE0NTI6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG4xNDUzOlx0XHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbjE0NTQ6XHRcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4xNDU1Olx0XG4xNDU2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNDU3Olx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4xNDU4Olx0XHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVx1MDAzZWJwZi5wcm9nLCBza2IpO1xuMTQ1OTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNDYwOlx0XG4xNDYxOlx0XHRzd2l0Y2ggKHJldCkge1xuMTQ2MjpcdFx0Y2FzZSBCUEZfT0s6XG4xNDYzOlx0XHRjYXNlIEJQRl9SRURJUkVDVDpcbjE0NjQ6XHRcdFx0YnJlYWs7XG4xNDY1Olx0XHRjYXNlIEJQRl9EUk9QOlxuMTQ2NjpcdFx0XHRnb3RvIGRyb3A7XG4xNDY3Olx0XHRkZWZhdWx0OlxuMTQ2ODpcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7YnBmLXNlZzZsb2NhbDogSWxsZWdhbCByZXR1cm4gdmFsdWUgJXVcXG5cJiMzNDssIHJldCk7XG4xNDY5Olx0XHRcdGdvdG8gZHJvcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGEgQlBGL0lQdjYgU2VnNiBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBmcmFua2x5LCBpdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyBhbmQgQlBGIHN1YnN5c3RlbSBzdHVmZi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBob3cgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBpcyBjYWxsZWQuIEl0JiMzOTtzIHVzZWQgaW4gdGhlIElQdjYgc2VnNiBsb2NhbCBhY3Rpb24gaGFuZGxlciwgc3BlY2lmaWNhbGx5IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQlBGYC4gVGhpcyBtZWFucyBJUHY2IHJvdXRlcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZXNlIHNlZzZsb2NhbCBhY3Rpb25zIHVzaW5nIHRoZSBzdGFuZGFyZCBgcnRuZXRsaW5rYCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgUlRNX05FV1JPVVRFYCB3aXRoIGBSVEFfRU5DQVBgIHNldCBmb3IgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CUEZgLiBXaGVuIElQdjYgcGFja2V0cyBhcnJpdmUsIGZvciBleGFtcGxlIGZyb20gYSBgdHVuL3RhcGAsIGB2ZXRoYCwgb3IgbG9vcGJhY2sgaW50ZXJmYWNlLCBgc2VnNl9sb2NhbF9pbnB1dGAgZXhlY3V0ZXMgYGlucHV0X2FjdGlvbl9lbmRfYnBmYC4gVGhpcyB0aGVuIHJ1bnMgdGhlIEJQRiBwcm9ncmFtLCB3aGljaCBpdHNlbGYgY2FsbHMgdGhlIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gYHN5emthbGxlcmAgZXZlbiByZWFjaCB0aGlzPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogSXQmIzM5O3MgZGVmaW5pdGVseSBwb3NzaWJsZSB0byBsb2FkIEJQRiBwcm9ncmFtcyAoYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGApLiBJdCBjYW4gYWxzbyBzZXQgdXAgSVB2NiByb3V0ZXMgd2l0aCBzZWc2IGVuY2Fwc3VsYXRpb24gYW5kIGxvY2FsIGFjdGlvbnMgdmlhIE5ldGxpbmsgKGBSVE1fTkVXUk9VVEVgKS4gTW9yZW92ZXIsIGBzeXprYWxsZXJgIGNhbiBzZW5kIElQdjYgcGFja2V0cyB3aXRoIFNSSCB2aWEgYHR1bi90YXBgIG9yIHJhdyBzb2NrZXRzLiBUaGUgbW9kaWZpZWQgY29kZSBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgdGhlIHN0YXRpYyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCB0aGUgQlBGIGhlbHBlciBgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uYCBpbiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAuCgpJIG5lZWQgdG8gc2NydXRpbml6ZSB3aGF0IHdhcyBhY3R1YWxseSBjaGFuZ2VkIGluIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYW5kIGBicGZfbHd0X3NlZzZfYWN0aW9uYC4gSW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgdGhlIG9sZCBjb2RlIGNoZWNrZWQgZm9yIHRoZSBTUkggaGVhZGVyLCB3aGVyZWFzIHRoZSB1cGRhdGVkIGNvZGUgY2FsbHMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBhbmQgY29tcHV0ZXMgdGhlIGRhdGEgcG9pbnRlcnMgdXNpbmcgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoZXJlJiMzOTtzIG5vdyBhbiBlYXJseSByZXR1cm4gaWYgYHNyaGAgaXMgTlVMTCBhbmQgYHNyaF9zdGF0ZS0mZ3Q7dmFsaWRgIGlzbiYjMzk7dCByZXNldCB0byBgZmFsc2VgLiBBbHNvLCBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYCBpcyBjYWxsZWQgZXZlbiBpZiBgc3JoYCBpcyBOVUxMLiBJIHNob3VsZCBhbHNvIG5vdGUgdGhhdCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgdXNlcyBgcHNrYl9tYXlfcHVsbGAgaW5zdGVhZCBvZiBgcHNrYl9wdWxsYCB0byBoYW5kbGUgdGhlIElQdjYgaGVhZGVyIHNpemUgYmVmb3JlIHB1bGxpbmcgdGhlIHBhY2tldC4gSW4gYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNmAgYW5kIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVBgLCB0aGUgY29kZSBub3cgY2hlY2tzIGlmIHRoZSBsZW5ndGggb2YgYHNrYmAgaXMgZGlmZmVyZW50IGJlZm9yZSBjYWxsaW5nIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAuCgpDb25zaWRlcmluZyB0aGVzZSBtb2RpZmljYXRpb25zLCB0aGUgcGFja2V0IHBhcnNpbmcsIHNrYiBwdWxsL3BvaW50ZXIgcmVjYWxjdWxhdGlvbnMsIHN0YXRlIHVwZGF0ZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIGNvbmRpdGlvbnMgZm9yIGludm9raW5nIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgYXJlIGFsbCBpbiBwbGF5LiBJdCYjMzk7cyBub3cgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRoZXNlIG5ldyBjaGFuZ2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCBhbmQgdG90YWxseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCldlIHNob3VsZCBjaGVjayBzb21lIHJlcXVpcmVkIGNvbmZpZ3M6IGBJUFY2YCwgYElQVjZfU0VHNl9MV1RVTk5FTGAgKHdoaWNoIGluZGlyZWN0bHkgZW5hYmxlcyBgSVBWNl9TRUc2X0JQRmApLCBgQlBGX1NZU0NBTExgLCBhbmQgYE5FVGAuIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGRlcGVuZHMgb24gYElQVjZgLCBgTFdUVU5ORUxgLCBgRFNUX0NBQ0hFYCwgYW5kIGBJUFY2X01VTFRJUExFX1RBQkxFU2AuIGBJUFY2X1NFRzZfQlBGYCBpcyBhIGRlZmF1bHQgYm9vbCBpZiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyBzZXQsIGFuZCBpdCBhbHNvIHJlcXVpcmVzIGBJUFY2YCBiZSBzZXQgdG8gJiMzNDt5JiMzNDsuIEFuZCwgb2YgY291cnNlLCBgQlBGX1NZU0NBTExgIHdpbGwgbmVlZCB0byBiZSBlbmFibGVkIGZvciBzeXNjYWxsIGFjY2Vzcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIHNldCBpbiB0aGUgS2NvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzY2CgkJCQkJCQlvdXRwdXQ6IDI0OAoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UsIHN0YXJ0aW5nIHdpdGggYEZvY3VzU3ltYm9sc2AuIFRoZSBjb3JlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcHBlYXIgdG8gYmUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCB3aGljaCBJIGtub3cgaXMgYSBCUEYgaGVscGVyLCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCwgYSBzdGF0aWMgZnVuY3Rpb24gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlzIGlubGluZWQgb3IgcmVtYWlucyBhIHZpc2libGUgc3ltYm9sLiAgSSYjMzk7bGwgYWxzbyBrZWVwIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgaW4gbWluZCwgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgYW5kIHJlbGF0ZWQgZnVuY3Rpb24uCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgKmV4YWN0KiBuYW1lcyBvZiB0aGVzZSBmb2N1cyBzeW1ib2xzLCBlc3BlY2lhbGx5IGBicGZfbHd0X3NlZzZfYWN0aW9uYCDigJMgaXQgY291bGQgYmUgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgX19fYnBmX2x3dF9zZWc2X2FjdGlvbmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJJiMzOTtsbCByZWZlciB0byBgbmV0L2NvcmUvZmlsdGVyLmNgIGZvciB0aGlzLCBhbmQgY29uZmlybSB0aGF0IGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAsIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgYW5kIGBzZWc2X2xvY2FsX2lucHV0YCBhbHNvIHdhcnJhbnQgc2NydXRpbnkuCgpOb3csIEkmIzM5O20gY3Jvc3MtcmVmZXJlbmNpbmcgdGhlc2Ugc3ltYm9scyB3aXRoIHRoZSBmaWxlcyBpbnZvbHZlZCwgcHJpbWFyaWx5IGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGFuZCBgbmV0L2NvcmUvZmlsdGVyLmNgLCBjb25maXJtaW5nIHRoYXQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBhcmUgaW5kZWVkIHRoZSBjZW50cmFsIHBvaW50cyBvZiB0aGlzIGNoYW5nZS4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBleGFjdCBuYW1lcyBmb3IgdGhlIGZ1bmN0aW9ucyBhZ2FpbiwgZW5zdXJpbmcgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHZhcmlhdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgbW9kaWZpZWQgc3ltYm9scyBpbiB0aGUgZGlmZi4gIEl0IGxvb2tzIGxpa2UgaXQgb25seSB0b3VjaGVzIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiAgYElQVjZfU0VHNl9MV1RVTk5FTGAsIGBJUFY2X1NFRzZfQlBGYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBJUFY2YCBhcmUgdGhlIG9uZXMgdG8gY29uc2lkZXIuCgpGaW5hbGx5LCBJJiMzOTttIGNvbnN0cnVjdGluZyB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUsIGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIFNSdjYgQlBGIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIHRoZSBpbnRlcm5hbCBoZWxwZXIgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBhbHRlcnMgYHNrYmAgbWFuaXB1bGF0aW9uLCBTUkggaGVhZGVyIHBhcnNpbmcvdXBkYXRpbmcsIGFuZCBjcnVjaWFsIGRhdGEgcG9pbnRlciBjYWxjdWxhdGlvbnMuIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIEJQRiBhbmQgSVB2NiBzZWc2IHJvdXRpbmcgd2hpY2ggbWVhbnMgdGhlcmUgaXMgYSBsYXJnZSBhdHRhY2sgc3VyZmFjZS4gYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgWyYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LCAmIzM0O2JwZl91cGRhdGVfc3JoX3N0YXRlJiMzNDssICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9icGYmIzM0O11gLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFsmIzM0O0lQVjYmIzM0OywgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssICYjMzQ7QlBGX1NZU0NBTEwmIzM0O11gLgoKSSYjMzk7bSBwZXJmb3JtaW5nIGEgZmluYWwsIGNyaXRpY2FsIHNhbml0eSBjaGVjayBvbiBhbGwgYXNwZWN0cyBvZiB0aGUgYW5hbHlzaXMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHJlc3VsdHMuIFRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbHd0X3NlZzZfYWN0aW9uJiMzNDssCiAgICAmIzM0O2JwZl91cGRhdGVfc3JoX3N0YXRlJiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfYnBmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBpbnRlcm5hbCBzdGF0ZSB1cGRhdGUgZnVuY3Rpb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBuZXQvY29yZS9maWx0ZXIuYy4gSXQgY2hhbmdlcyBob3cgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaXMgcmV0cmlldmVkIGFuZCB2YWxpZGF0ZWQsIGFsdGVycyBza2IgcHVsbGluZy9wb2ludGVyIHJlY2FsY3VsYXRpb25zIG9uIGRlY2Fwc3VsYXRpb24gYWN0aW9ucyAoU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNiksIGFuZCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaXMgaW52b2tlZCBhZnRlciBlbmNhcHN1bGF0aW9uIGFjdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gSVB2NiBzZWc2IHJvdXRlcyBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2x3dF9zZWc2X2FjdGlvbiYjMzQ7LAogICAgJiMzNDticGZfdXBkYXRlX3NyaF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2JwZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHN0YWxlIHBvaW50ZXIgYW5kIGJ1ZmZlciBib3VuZGFyeSBpc3N1ZXMgaW4gQlBGIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUkgpIGhlbHBlcnMgKGJwZl91cGRhdGVfc3JoX3N0YXRlIGFuZCBicGZfbHd0X3NlZzZfYWN0aW9uKS4gU3BlY2lmaWNhbGx5OlxuLSBJdCByZXBsYWNlcyBkaXJlY3QgY2FzdGluZyBvZiBvZmZzZXRzIGludG8gc2tiLVx1MDAzZWRhdGEgd2l0aCBzZWc2X2dldF9zcmgoKSBhbmQgcHNrYl9tYXlfcHVsbCBjaGVja3MgdG8gdmFsaWRhdGUgYW5kIHB1bGwgdGhlIGxpbmVhciBoZWFkZXIgc2FmZWx5LlxuLSBJdCByZWNvbXB1dGVzIEJQRiBkYXRhIHBvaW50ZXJzIGFuZCB1cGRhdGVzIHRoZSBwZXItQ1BVIFNSSCBzdGF0ZSB3aGVuIHRoZSBza2IgYnVmZmVyIGV4cGFuZHMgb3IgY2hhbmdlcyBsZW5ndGggZHVyaW5nIGVuY2Fwc3VsYXRpb24uXG4tIExvY2FsIHZhcmlhYmxlcyBzdWNoIGFzIGBvbGRfbGVuYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBgc2tiLVx1MDAzZWxlbmAgcHJpb3IgdG8gcmVhZGluZy5cblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZGRyZXNzIGJ1ZmZlciBib3VuZHMsIHBvaW50ZXIgcmVjb21wdXRhdGlvbiwgYW5kIGxpbmVhciBoZWFkZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYyBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJjYWZmNjU3M2QxMDk2ZmRiZGYwZGQ4N2YwOTI3OWFkNGNmMTBkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDg1MTMxNjdhODU4YTguLmIwMzdkNzBlNWZlNjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDE3LDE1ICYjNDM7NzAxNywxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9CiAJCXRoaXNfY3B1X3B0cigmYW1wO3NlZzZfYnBmX3NyaF9zdGF0ZXMpOwotCWludCBzcmhvZmYgPSAwOwomIzQzOwlzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDsKIAotCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgJmx0OyAwKSB7Ci0JCXNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTDsKLQl9IGVsc2UgewotCQlzcmhfc3RhdGUtJmd0O3NyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNyaG9mZik7Ci0JCXNyaF9zdGF0ZS0mZ3Q7aGRybGVuID0gc3JoX3N0YXRlLSZndDtzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwotCQlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKLQl9CiYjNDM7CXNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApOwomIzQzOwlicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7CiYjNDM7CXNyaF9zdGF0ZS0mZ3Q7c3JoID0gc3JoOwomIzQzOwlpZiAoIXNyaCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3JoX3N0YXRlLSZndDtoZHJsZW4gPSBzcmgtJmd0O2hkcmxlbiAmbHQ7Jmx0OyAzOwomIzQzOwlzcmhfc3RhdGUtJmd0O3ZhbGlkID0gdHJ1ZTsKIH0KIAogQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCkBAIC03MDMzLDYgJiM0Mzs3MDM0LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCiB7CiAJc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID0KIAkJdGhpc19jcHVfcHRyKCZhbXA7c2VnNl9icGZfc3JoX3N0YXRlcyk7CiYjNDM7CXVuc2lnbmVkIGludCBvbGRfbGVuOwogCWludCBoZHJvZmYgPSAwOwogCWludCBlcnI7CiAKQEAgLTcwNTgsMzIgJiM0Mzs3MDYwLDM3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLAogCiAJCWlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgJmx0OyAwKQogCQkJcmV0dXJuIC1FQkFETVNHOwotCQlpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpCiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHsKJiM0MzsJCQlzcmhfc3RhdGUtJmd0O3NyaCA9IE5VTEw7CiYjNDM7CQkJYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpOwogCQkJcmV0dXJuIC1FQkFETVNHOwomIzQzOwkJfQomIzQzOwkJX19za2JfcHVsbChza2IsIGhkcm9mZik7CiAKIAkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7CiAJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCQlza2ItJmd0O2VuY2Fwc3VsYXRpb24gPSAwOwogCi0JCWJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTsKIAkJYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTsKIAkJcmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTsKIAljYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjoKIAkJaWYgKHNyaF9zdGF0ZS0mZ3Q7c3JoICZhbXA7JmFtcDsgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSkKIAkJCXJldHVybiAtRUJBRE1TRzsKJiM0MzsJCW9sZF9sZW4gPSBza2ItJmd0O2xlbjsKIAkJZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQomIzQzOwkJaWYgKHNrYi0mZ3Q7bGVuICE9IG9sZF9sZW4pCiAJCQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CiAJY2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6CiAJCWlmIChzcmhfc3RhdGUtJmd0O3NyaCAmYW1wOyZhbXA7ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpCiAJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQlvbGRfbGVuID0gc2tiLSZndDtsZW47CiAJCWVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsCiAJCQkJCSAgcGFyYW0sIHBhcmFtX2xlbik7Ci0JCWlmICghZXJyKQomIzQzOwkJaWYgKHNrYi0mZ3Q7bGVuICE9IG9sZF9sZW4pCiAJCQlicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpOwogCiAJCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIFBvdGVudGlhbCBLTVNBTiBSaXNrcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIE15IHByb2Nlc3Mgd2lsbCBiZSBhcyBmb2xsb3dzOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmYgYW5kIGZvY3VzIG9uIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY2hhbmdlcyBhcm91bmQgdGhvc2UgYXJlYXMuIFRoZW4sIEkmIzM5O2xsIHplcm8gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYCBhcm91bmQgbGluZSA3MDE3LCB1c2luZyB0aGF0IGFzIGEgbWFya2VyIHRvIHN0YXJ0IG15IGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcGF0Y2gmIzM5O3MgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwMDA6XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG43MDAxOlx0XG43MDAyOlx0XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xuNzAwMzpcdFx0cmV0dXJuIDA7XG43MDA0Olx0fVxuNzAwNTpcdFxuNzAwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuNzAwNzpcdFx0LmZ1bmNcdFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXG43MDA4Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG43MDA5Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG43MDEwOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNzAxMTpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG43MDEyOlx0XHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbjcwMTM6XHRcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG43MDE0Olx0fTtcbjcwMTU6XHRcbjcwMTY6XHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNzAxNzpcdHtcbjcwMTg6XHRcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG43MDE5Olx0XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbjcwMjA6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuNzAyMTpcdFxuNzAyMjpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG43MDIzOlx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG43MDI0Olx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuNzAyNTpcdFx0aWYgKCFzcmgpXG43MDI2Olx0XHRcdHJldHVybjtcbjcwMjc6XHRcbjcwMjg6XHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuNzAyOTpcdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG43MDMzOlx0XHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXG43MDM0Olx0e1xuNzAzNTpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjcwMzY6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuNzAzNzpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW47XG43MDM4Olx0XHRpbnQgaGRyb2ZmID0gMDtcbjcwMzk6XHRcdGludCBlcnI7XG43MDQwOlx0XG43MDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyaF9zdGF0ZS1cdTAwM2ViaF9sb2NrKTtcbjcwNDI6XHRcdHN3aXRjaCAoYWN0aW9uKSB7XG43MDQzOlx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9YOlxuNzA0NDpcdFx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjcwNDU6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDQ2Olx0XHRcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXG43MDQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDQ4Olx0XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcbjcwNDk6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG43MDUwOlx0XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA1MTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwNTI6XHRcdFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcbjcwNTM6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjcwNTQ6XHRcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbjcwNTU6XHRcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcbjcwNTY6XHRcdFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDU3Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA1ODpcdFx0XHRpZiAocGFyYW1fbGVuICE9IHNpemVvZihpbnQpKVxuNzA1OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbjcwNjI6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDYzOlx0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuNzA2NDpcdFx0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuNzA2NTpcdFx0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjcwNjY6XHRcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG43MDY3Olx0XHRcdH1cbjcwNjg6XHRcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG43MDY5Olx0XG43MDcwOlx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuNzA3MTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjcwNzI6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjcwNzM6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuNzA3NDpcdFxuNzA3NTpcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA3NjpcdFx0XHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xuNzA3NzpcdFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XG43MDc4Olx0XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxuNzA3OTpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjcwODA6XHRcdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG43MDgxOlx0XHRcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxuNzA4MjpcdFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuNzA4MzpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvbGRfbGVuKVxuNzA4NDpcdFx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG43MDg1Olx0XG43MDg2Olx0XHRcdHJldHVybiBlcnI7XG43MDg3Olx0XHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbjcwODg6XHRcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG43MDg5Olx0XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuNzA5MDpcdFx0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbjcwOTE6XHRcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcbjcwOTI6XHRcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbjcwOTM6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbjcwOTQ6XHRcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuNzA5NTpcdFxuNzA5NjpcdFx0XHRyZXR1cm4gZXJyO1xuNzA5NzpcdFx0ZGVmYXVsdDpcbjcwOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MDk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHNlZzZfYnBmX3NyaF9zdGF0ZXNgIGFuZCBpdHMgc3VwcG9ydGluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgU2VnNiBhbmQgQlBGLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3RhdGUgbWFuYWdlbWVudCBhc3BlY3QsIGdpdmVuIHRoYXQgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gdGhlIG5hbWUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugc3RhdGVzIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZC4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGludGVyYWN0aW9ucywgaG93IHRoZXkmIzM5O3JlIGNyZWF0ZWQsIHVwZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5LCBjbGVhbmVkIHVwLiBMZXQmIzM5O3Mgc2VlIGhvdyBlZmZpY2llbnRseSB0aGVzZSBzdGF0ZXMgYXJlIHV0aWxpemVkLiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9ucyBtaWdodCBiZSBwb3NzaWJsZS4gSXTigJlzIHRpbWUgdG8gbWV0aG9kaWNhbGx5IGV4YW1pbmUgdGhlIGNvZGUgYW5kIGJ1aWxkIHVwIHRoYXQgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIEkgbmVlZCB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGlzIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfc3JoX3N0YXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njk3Mz1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTc2LVx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5Nzc6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzgtXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cdTAwM2Vzcmg7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzAxNj1zdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTgtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzAxOTpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzAyMC1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzI9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNS1cdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG5uZXQvY29yZS9maWx0ZXIuYzo3MDM2Olx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvY29yZS9maWx0ZXIuYy03MDM3LVx0dW5zaWduZWQgaW50IG9sZF9sZW47XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzExMj1CUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTUtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2NvcmUvZmlsdGVyLmM6NzExNjpcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xubmV0L2NvcmUvZmlsdGVyLmMtNzExNy1cdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVx1MDAzZXNyaDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM3Mj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwMS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDAyOkRFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MDMtXHQuYmhfbG9ja1x0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MDY9Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MDgtXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MDk6XHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDEwLVx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ0OS1cdCAqL1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTA6XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTE6XHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Mi1cdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBzcmg7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzMtXHRcdGdvdG8gZHJvcDtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc0Olx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzUtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODEtZHJvcDpcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDgyOlx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODMtXHRrZnJlZV9za2Ioc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgU1JIIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBpbiB0aGUgU1JIIChTb3VyY2UgUm91dGluZyBIZWFkZXIpIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gRmlyc3QsIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2hhbmdlcyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uCgpQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgdXNpbmcgYGlwdjZfZmluZF9oZHJgIHRvIGxvY2F0ZSB0aGUgU1JILiBJdCBzZWVtcyBhIGJpdCBjbHVua3kgYmVjYXVzZSBvZiB0aGUgYHNyaG9mZmAgdmFyaWFibGUgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFuIGVycm9yLiBUaGUgb2xkIGxvZ2ljIGVzc2VudGlhbGx5IGNoZWNrZWQgZm9yIHRoZSBTUkgmIzM5O3MgZXhpc3RlbmNlIGFuZCBpZiBpdCB3YXMgZm91bmQsIGRldGVybWluZWQgdGhlIGhlYWRlciBsZW5ndGggYW5kIHNldCB0aGUgYHZhbGlkYCBmbGFnLgoKTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCB0byBnZXQgYSBwb2ludGVyIHRvIHRoZSBTUkguIFRoZW4sIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGlzIGNhbGxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxpa2VseSB1cGRhdGVzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB0byByZWZsZWN0IHRoZSBuZXcgcG9zaXRpb24gb3IgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhLiBUaGUgc3Vic2VxdWVudCBsb2dpYyBhcHBlYXJzIGNsZWFuZXI7IGlmIGBzZWc2X2dldF9zcmhgIHJldHVybnMgTlVMTCwgaXQgYmFpbHMgb3V0LiBJZiBub3QsIHRoZSBoZWFkZXIgbGVuZ3RoIGFuZCB2YWxpZGl0eSBhcmUgY29tcHV0ZWQgYXMgYmVmb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgc2VnNl9nZXRfc3JoYCBtb3JlIGNvbXBsZXRlbHksIHRvIHNlZSB0aGUgZXhhY3QgaW1wbGljYXRpb24gb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UgbG9va3MgY2xlYW5lciBhbmQgbW9yZSBkaXJlY3QsIG1ha2luZyBpdCBtb3JlIHJvYnVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9nZXRfc3JoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2VnNi5oPTY3PWV4dGVybiBib29sIHNlZzZfdmFsaWRhdGVfc3JoKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBpbnQgbGVuLCBib29sIHJlZHVjZWQpO1xuaW5jbHVkZS9uZXQvc2VnNi5oOjY4OmV4dGVybiBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgYHNlZzZfZ2V0X3NyaGAgaW1wbGVtZW50YXRpb246CgoqKkRpdmluZyBpbnRvIGBzZWc2X2dldF9zcmhgKioKCk9rYXksIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBzZWc2X2dldF9zcmhgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgdG8gZ2V0IHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHdoYXQgaXRzIGNvcmUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcmV0cmlldmluZyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGV4dHJhY3QgU1JIIGluZm9ybWF0aW9uIGZyb20gYSBwYWNrZXQgb3IgZGF0YSBzdHJ1Y3R1cmUsIHBlcmhhcHMgYSBza19idWZmLCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHRoZSBpbnB1dCBhcmd1bWVudHMuIFdoYXQgZG9lcyBpdCB0YWtlIGluPyBJcyBpdCBhIHBvaW50ZXIgdG8gdGhlIHBhY2tldCBpdHNlbGY/IE9yIHBlcmhhcHMgYW4gb2Zmc2V0IGludG8gYSBwYWNrZXQgYnVmZmVyPyBPciBtYXliZSBldmVuIGEgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBTUkggaXRzZWxmPyBBbmQgd2hhdCB3aWxsIGJlIHJldHVybmVkPyBBIHBvaW50ZXIgdG8gc29tZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBTUkg/IEFuIGVycm9yIGNvZGUgaWYgc29tZXRoaW5nIGdvZXMgd3Jvbmc/IAoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgaW1wbGVtZW50YXRpb24gb2YgU1JIIHJldHJpZXZhbCwgYXMgSSYjMzk7bSB1c2VkIHRvIHNlZWluZy4gVGhpcyBtZWFucyB2ZXJpZnlpbmcgdGhlIGhhbmRsaW5nIG9mIHRoZSB2YXJpb3VzIGZpZWxkcyB0aGF0IG1ha2UgdXAgdGhlIFNSSDogdGhlIG5leHQgaGVhZGVyLCB0aGUgaGVhZGVyIGV4dGVuc2lvbiBsZW5ndGgsIHRoZSByb3V0aW5nIHR5cGUsIHRoZSBzZWdtZW50cyBsZWZ0LCB0aGUgc2VnbWVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgZmxhZ3Mgb3IgbWV0YWRhdGEuIEkmIzM5O2xsIGFsc28gYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLCBsaWtlIFNSSHMgdGhhdCBhcmUgZnJhZ21lbnRlZCwgb3IgdHJ1bmNhdGVkLgoKSSBhbnRpY2lwYXRlIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBib3VuZGFyeSBjb25kaXRpb25zIC0gaXMgaXQgY29ycmVjdGx5IHZlcmlmeWluZyB0aGF0IHRoZSBTUkggZGF0YSBkb2VzbiYjMzk7dCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgcGFja2V0IGJ1ZmZlcj8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGFsaWdubWVudCBpc3N1ZXM/IEFuZCBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIC0gd2hhdCBoYXBwZW5zIGlmIHRoZSBTUkggaXMgaW52YWxpZCBvciBjb3JydXB0ZWQ/IEFyZSB0aGVyZSBncmFjZWZ1bCBlcnJvciByZXR1cm5zLCBsb2dnaW5nLCBvciBvdGhlciBtZWNoYW5pc21zIHRvIHByZXZlbnQgZnVydGhlciBpc3N1ZXM/CgpJJiMzOTtsbCBiZSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlIGxpbmUgYnkgbGluZSwgdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHNwZWVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcz8gQXJlIHRoZXJlIHdheXMgdG8gaW1wcm92ZSB0aGUgaW1wbGVtZW50YXRpb24sIG9yIGlzIHRoaXMgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRlc2lnbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGlwdjZfc3JfaGRyIFxcKnNlZzZfZ2V0X3NyaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNi5jPTI2PWJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZClcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtNzgtXG5uZXQvaXB2Ni9zZWc2LmM6Nzk6c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxubmV0L2lwdjYvc2VnNi5jLTgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNlZzYuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbmV0L2lwdjYvc2VnNi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzkuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBhcmVhIGxpa2VseSBjb250YWlucyB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBvciBwZXJoYXBzIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgcHJvY2Vzc2luZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIGEgY29tbW9uIHBsYWNlIHRvIGZpbmQgdGhlIGdyb3VuZHdvcmsgZm9yIGEgbW9kdWxlIGxpa2UgdGhpcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGNvZGUgKmJlZ2lucyogdG8gaGFuZGxlIHRoZSBTUnY2IG9wZXJhdGlvbnMuIEkgYW50aWNpcGF0ZSB1bmRlcnN0YW5kaW5nIGhvdyBpdCBzdHJ1Y3R1cmVzIGl0cyBkYXRhIGFuZCB3aGF0IHRoZSBtYWluIGZ1bmN0aW9uIGNhbGxzIGFyZSB0byBlbmFibGUgYSBiYXNpYyBvcGVyYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwYXJzZSB0aGUgbW9yZSBjb21wbGV4IGZsb3dzIGFuZCBmZWF0dXJlcyBvZiBTUnY2LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzU6XHRcbiAgNzY6XHRcdHJldHVybiB0cnVlO1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXG4gIDgwOlx0e1xuICA4MTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gIDgyOlx0XHRpbnQgbGVuLCBzcmhvZmYgPSAwO1xuICA4MzpcdFxuICA4NDpcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgXHUwMDI2ZmxhZ3MpIFx1MDAzYyAwKVxuICA4NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODY6XHRcbiAgODc6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNyaG9mZiAmIzQzOyBzaXplb2YoKnNyaCkpKVxuICA4ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODk6XHRcbiAgOTA6XHRcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc3Job2ZmKTtcbiAgOTE6XHRcbiAgOTI6XHRcdGxlbiA9IChzcmgtXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuICA5MzpcdFxuICA5NDpcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc3Job2ZmICYjNDM7IGxlbikpXG4gIDk1Olx0XHRcdHJldHVybiBOVUxMO1xuICA5NjpcdFxuICA5NzpcdFx0Lyogbm90ZSB0aGF0IHBza2JfbWF5X3B1bGwgbWF5IGNoYW5nZSBwb2ludGVycyBpbiBoZWFkZXI7XG4gIDk4Olx0XHQgKiBmb3IgdGhpcyByZWFzb24gaXQgaXMgbmVjZXNzYXJ5IHRvIHJlbG9hZCB0aGVtIHdoZW4gbmVlZGVkLlxuICA5OTpcdFx0ICovXG4gMTAwOlx0XHRzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNyaG9mZik7XG4gMTAxOlx0XG4gMTAyOlx0XHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgbGVuLCB0cnVlKSlcbiAxMDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTA0Olx0XG4gMTA1Olx0XHRyZXR1cm4gc3JoO1xuIDEwNjpcdH1cbiAxMDc6XHRcbiAxMDg6XHQvKiBEZXRlcm1pbmUgaWYgYW4gSUNNUCBpbnZva2luZyBwYWNrZXQgY29udGFpbnMgYSBzZWdtZW50IHJvdXRpbmdcbiAxMDk6XHQgKiBoZWFkZXIuICBJZiBpdCBkb2VzLCBleHRyYWN0IHRoZSBvZmZzZXQgdG8gdGhlIHRydWUgZGVzdGluYXRpb25cbiAxMTA6XHQgKiBhZGRyZXNzLCB3aGljaCBpcyBpbiB0aGUgZmlyc3Qgc2VnbWVudCBhZGRyZXNzLlxuIDExMTpcdCAqL1xuIDExMjpcdHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcbiAxMTM6XHR7XG4gMTE0Olx0XHRfX3UxNiBuZXR3b3JrX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcjtcbiAxMTU6XHRcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIDExNjpcdFxuIDExNzpcdFx0LyogVXBkYXRlIG5ldHdvcmsgaGVhZGVyIHRvIHBvaW50IHRvIHRoZSBpbnZva2luZyBwYWNrZXRcbiAxMTg6XHRcdCAqIGluc2lkZSB0aGUgSUNNUCBwYWNrZXQsIHNvIHdlIGNhbiB1c2UgdGhlIHNlZzZfZ2V0X3NyaCgpXG4gMTE5Olx0XHQgKiBoZWxwZXIuXG4gMTIwOlx0XHQgKi9cbiAxMjE6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDEyMjpcdFxuIDEyMzpcdFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG4gMTI0Olx0XHRpZiAoIXNyaClcbiAxMjU6XHRcdFx0Z290byBvdXQ7XG4gMTI2Olx0XG4gMTI3Olx0XHRpZiAoc3JoLVx1MDAzZXR5cGUgIT0gSVBWNl9TUkNSVF9UWVBFXzQpXG4gMTI4Olx0XHRcdGdvdG8gb3V0O1xuIDEyOTpcdFxuIDEzMDpcdFx0b3B0LVx1MDAzZWZsYWdzIHw9IElQNlNLQl9TRUc2O1xuIDEzMTpcdFx0b3B0LVx1MDAzZXNyaG9mZiA9ICh1bnNpZ25lZCBjaGFyICopc3JoIC0gc2tiLVx1MDAzZWRhdGE7XG4gMTMyOlx0XG4gMTMzOlx0b3V0OlxuIDEzNDpcdFx0LyogUmVzdG9yZSB0aGUgbmV0d29yayBoZWFkZXIgYmFjayB0byB0aGUgSUNNUCBwYWNrZXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4gQmVmb3JlIHRoaXMgcmV2aXNpb24sIHRoZXJlIHdhcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyBwYXR0ZXJuOiBgaXB2Nl9maW5kX2hkcmAgd2FzIHVzZWQgd2l0aG91dCBwcm9wZXJseSB2YWxpZGF0aW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG9yIGVuc3VyaW5nIHRoZSBuZWNlc3NhcnkgZGF0YSB3YXMgYXZhaWxhYmxlIHdpdGggYHBza2JfbWF5X3B1bGxgLiBUaGVuLCB3ZSB3ZXJlIGRpcmVjdGx5IGNhc3RpbmcgYHNrYi0mZ3Q7ZGF0YSAmIzQzOyBzcmhvZmZgIHRvIGBpcHY2X3NyX2hkcmAuIFRoZSBjYWxsIHRvIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIHNlZW1lZCBoYXBoYXphcmQsIG9yIGF0IGxlYXN0LCBpbmNvbnNpc3RlbnQuCgpOb3csIGBzZWc2X2dldF9zcmhgIGlzIHRoZSBnby10byBmdW5jdGlvbiwgYW5kIHRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLiBJdCB2YWxpZGF0ZXMgYW5kIHB1bGxzIHRoZSBlbnRpcmUgU1JILiBQdWxsaW5nIHRoZSBTUkggbWlnaHQgdHJpZ2dlciBhbiBTS0IgcmUtYWxsb2NhdGlvbiwgd2hpY2ggbWFrZXMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgZXNzZW50aWFsIGFmdGVyIHRoaXMgb3BlcmF0aW9uLgoKSG93ZXZlciwgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBzY2VuYXJpbyB0aGF0IG1ha2VzIG1lIHBhdXNlOiB3aGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgKm5vKiBTUkggKGAhc3JoYCk/IFRoZSBjb2RlIHNldHMgYHNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTGAgYW5kIHJldHVybnMuIFRoYXQgbWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYnV0IGl0IGxlYXZlcyBgc3JoX3N0YXRlLSZndDt2YWxpZGAgdW50b3VjaGVkLCBvciBmYWxzZS4gVGhpcyBoYXMgdG8gYmUgYWRkcmVzc2VkLiBEb2VzIGl0IGV2ZW4gbWF0dGVyIHdoZXRoZXIgYHNyaF9zdGF0ZS0mZ3Q7dmFsaWRgIGlzIHRydWUgb3IgZmFsc2Ugd2hlbiB0aGUgYWN0dWFsIGBzcmhgIHBvaW50ZXIgaXMgYE5VTExgPyBJIHRoaW5rIHRoaXMgbmVlZHMgYSBzZWNvbmQgbG9vaywgc28gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIHRoZXNlIHN0YXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9icGZfaGFzX3ZhbGlkX3NyaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NzAzMj1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MDQzLVx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNDQ6XHRcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxubmV0L2NvcmUvZmlsdGVyLmMtNzA0NS1cdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA0OS1cdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XG5uZXQvY29yZS9maWx0ZXIuYzo3MDUwOlx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTEtXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTUtXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDY6XG5uZXQvY29yZS9maWx0ZXIuYzo3MDU2Olx0XHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTctXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzctXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzg6XHRcdGlmIChzcmhfc3RhdGUtXHUwMDNlc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxubmV0L2NvcmUvZmlsdGVyLmMtNzA3OS1cdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA4Ny1cdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxubmV0L2NvcmUvZmlsdGVyLmM6NzA4ODpcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG5uZXQvY29yZS9maWx0ZXIuYy03MDg5LVx0XHRcdHJldHVybiAtRUJBRE1TRztcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQwMj1ERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwNS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDA2OmJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0MDcte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3MS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDcyOlx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3My1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFNFRzYgQlBGIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIGZ1bmN0aW9uIHdvcmtzLiBJdOKAmXMgY3JpdGljYWwsIG9idmlvdXNseSwgaW4gZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiBTUkggaGVhZGVycyBpbiBvdXIgU0VHNiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBhIG1pc3N0ZXAgaGVyZSBjb3VsZCBvcGVuIHVwIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGtlcm5lbCBpcyB2YWxpZGF0aW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHRocm91Z2ggQlBGLiBXaGF0IGNoZWNrcyBhcmUgaW4gcGxhY2U/IFdoYXQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJlIHRoZXkgaGFuZGxpbmc/IEkgd2FudCB0byBzZWUgaWYgdGhlIHZhbGlkYXRpb24gY29uc2lkZXJzIGFzcGVjdHMgbGlrZSBTUkggbGVuZ3RoLCBob3AgbGltaXRzLCBzZWdtZW50cyBsZWZ0LCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IEJQRiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lIGluIHRoaXMgcmVnYXJkLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0fVxuMTQwMTpcdFxuMTQwMjpcdERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xuMTQwMzpcdFx0LmJoX2xvY2tcdD0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxuMTQwNDpcdH07XG4xNDA1Olx0XG4xNDA2Olx0Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG4xNDA3Olx0e1xuMTQwODpcdFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbjE0MDk6XHRcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuMTQxMDpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXHUwMDNlc3JoO1xuMTQxMTpcdFxuMTQxMjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmhfc3RhdGUtXHUwMDNlYmhfbG9jayk7XG4xNDEzOlx0XHRpZiAodW5saWtlbHkoc3JoID09IE5VTEwpKVxuMTQxNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNDE1Olx0XG4xNDE2Olx0XHRpZiAodW5saWtlbHkoIXNyaF9zdGF0ZS1cdTAwM2V2YWxpZCkpIHtcbjE0MTc6XHRcdFx0aWYgKChzcmhfc3RhdGUtXHUwMDNlaGRybGVuIFx1MDAyNiA3KSAhPSAwKVxuMTQxODpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjE0MTk6XHRcbjE0MjA6XHRcdFx0c3JoLVx1MDAzZWhkcmxlbiA9ICh1OCkoc3JoX3N0YXRlLVx1MDAzZWhkcmxlbiBcdTAwM2VcdTAwM2UgMyk7XG4xNDIxOlx0XHRcdGlmICghc2VnNl92YWxpZGF0ZV9zcmgoc3JoLCAoc3JoLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMywgdHJ1ZSkpXG4xNDIyOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTQyMzpcdFxuMTQyNDpcdFx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuMTQyNTpcdFx0fVxuMTQyNjpcdFxuMTQyNzpcdFx0cmV0dXJuIHRydWU7XG4xNDI4Olx0fVxuMTQyOTpcdFxuMTQzMDpcdHN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE0MzE6XHRcdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbjE0MzI6XHR7XG4xNDMzOlx0XHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGU7XG4xNDM0Olx0XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcbjE0MzU6XHRcdGludCByZXQ7XG4xNDM2Olx0XG4xNDM3Olx0XHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xuMTQzODpcdFx0aWYgKCFzcmgpIHtcbjE0Mzk6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDI4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipBbmFseXppbmcgdGhlIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgYW5kIGBzZWc2X2xvY2FsLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgZnVuY3Rpb24sIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIHRoZSBMb2NhbCBTZWdtZW50cyBpbXBsZW1lbnRhdGlvbi4gUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIOKAkyBzcGVjaWZpY2FsbHksIGxpbmVzIDE0MzUgdGhyb3VnaCAxNDc1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgcHJvY2Vzc2luZyBvciBlcnJvciBoYW5kbGluZyBmb3IgYSBwYWNrZXQgdGhhdCYjMzk7cyBiZWVuIHRocm91Z2ggYSBsb2NhbCBzZWdtZW50IHJvdXRpbmcgcGF0aCBpcyBoYXBwZW5pbmcuCgpCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgY2hlY2tzIGhlcmU6IHZhbGlkYXRpb24gb2YgdGhlIHBhY2tldCYjMzk7cyBmaW5hbCBzdGF0ZSBhZnRlciB0cmF2ZXJzaW5nIGEgbG9jYWwgc2VnbWVudCByb3V0ZSwgcGVyaGFwcyBoYW5kbGluZyBvZiBhbnkgcmVtYWluaW5nIG1ldGFkYXRhLCBhbmQgZGVmaW5pdGVseSBhIGNsZWFuLXVwIHJvdXRpbmUgZm9yIHJlc291cmNlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIHRoaXMgcGFja2V0LiBNYXliZSB0aGV5JiMzOTtyZSBtYW5hZ2luZyBmbG93IGluZm9ybWF0aW9uIG9yIGFjY291bnRpbmcgaGVyZSB0b28uIE9yLCBpdCBjb3VsZCBiZSB0aGUgcGxhY2Ugd2hlcmUgdGhleSBtYXJrIHRoZSBwYWNrZXQgZm9yIGRlbGl2ZXJ5IHRvIHRoZSBuZXh0IHN0YWdlIGFmdGVyIHByb2Nlc3NpbmcuIEkgbmVlZCB0byBkaWcgaW4sIHRob3VnaCwgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB3aXRoIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIHRoZSByZWxldmFudCBjb250cm9sIHN0cnVjdHVyZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MzU6XHRcdGludCByZXQ7XG4xNDM2Olx0XG4xNDM3Olx0XHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xuMTQzODpcdFx0aWYgKCFzcmgpIHtcbjE0Mzk6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNDQwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQ0MTpcdFx0fVxuMTQ0MjpcdFx0YWR2YW5jZV9uZXh0c2VnKHNyaCwgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcik7XG4xNDQzOlx0XG4xNDQ0Olx0XHQvKiBUaGUgYWNjZXNzIHRvIHRoZSBwZXItQ1BVIGJ1ZmZlciBzcmhfc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHJ1bm5pbmdcbjE0NDU6XHRcdCAqIGFsd2F5cyBpbiBzb2Z0aXJxIGNvbnRleHQgKHdpdGggZGlzYWJsZWQgQkgpLiBPbiBQUkVFTVBUX1JUIHRoZVxuMTQ0NjpcdFx0ICogcmVxdWlyZWQgbG9ja2luZyBpcyBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIGxvY2FsX2xvY2tfbmVzdGVkX2JoKClcbjE0NDc6XHRcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcbjE0NDg6XHRcdCAqIGJwZl9wcm9nX3J1bl9zYXZlX2NiKCkuXG4xNDQ5Olx0XHQgKi9cbjE0NTA6XHRcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XG4xNDUxOlx0XHRzcmhfc3RhdGUgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4xNDUyOlx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuMTQ1MzpcdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaC1cdTAwM2VoZHJsZW4gXHUwMDNjXHUwMDNjIDM7XG4xNDU0Olx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTQ1NzpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuMTQ1ODpcdFx0cmV0ID0gYnBmX3Byb2dfcnVuX3NhdmVfY2Ioc2x3dC1cdTAwM2VicGYucHJvZywgc2tiKTtcbjE0NTk6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTQ2MDpcdFxuMTQ2MTpcdFx0c3dpdGNoIChyZXQpIHtcbjE0NjI6XHRcdGNhc2UgQlBGX09LOlxuMTQ2MzpcdFx0Y2FzZSBCUEZfUkVESVJFQ1Q6XG4xNDY0Olx0XHRcdGJyZWFrO1xuMTQ2NTpcdFx0Y2FzZSBCUEZfRFJPUDpcbjE0NjY6XHRcdFx0Z290byBkcm9wO1xuMTQ2NzpcdFx0ZGVmYXVsdDpcbjE0Njg6XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O2JwZi1zZWc2bG9jYWw6IElsbGVnYWwgcmV0dXJuIHZhbHVlICV1XFxuXCYjMzQ7LCByZXQpO1xuMTQ2OTpcdFx0XHRnb3RvIGRyb3A7XG4xNDcwOlx0XHR9XG4xNDcxOlx0XG4xNDcyOlx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbjE0NzM6XHRcdFx0Z290byBkcm9wO1xuMTQ3NDpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQ3NTpcdFxuMTQ3NjpcdFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXG4xNDc3Olx0XHRcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbjE0Nzg6XHRcbjE0Nzk6XHRcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcbjE0ODA6XHRcbjE0ODE6XHRkcm9wOlxuMTQ4MjpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xuMTQ4MzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4xNDg0Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRUc2IExvY2FsIEFjdGlvbnMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBTRUc2IGxvY2FsIGFjdGlvbnMgaGFuZGxlIElQdjYgcGFja2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLiBUaGUgZmlyc3Qgc2VnbWVudCBkZWFscyB3aXRoIGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YC4gSSBzZWUgdGhlIGNvZGUgaXMgY2hlY2tpbmcgZm9yIGFuIElQdjYgaGVhZGVyIHVzaW5nIGBpcHY2X2ZpbmRfaGRyYC4gVGhlbiB0aGVyZSBpcyBhIGNoYW5nZS4gSW5pdGlhbGx5LCB0aGUgY29kZSB1c2VkIGBwc2tiX3B1bGxgIHdoaWNoIHB1bGxzIGRhdGEgZnJvbSBhIHNrYi4gTm93IGl0IHVzZXMgYHBza2JfbWF5X3B1bGxgLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHNldHMgYHNyaF9zdGF0ZS0mZ3Q7c3JoID0gTlVMTGAgYW5kIGNvbXB1dGVzIGRhdGEgcG9pbnRlcnMuIEEgZm9sbG93IHVwIHRvIHRoaXMgaXMgdG8gcHVsbCBmcm9tIHRoZSBza2Igd2l0aCBgX19za2JfcHVsbGAuLiBUaGlzIGlzIGZvbGxvd2VkIHVwIHdpdGggYHNrYl9wb3N0cHVsbF9yY3N1bWAsIGFuZCBhIHJlc2V0IG9mIHZhcmlvdXMgaGVhZGVycy4gVGhlIGNoYW5nZSBoZXJlIGlzIHNpZ25pZmljYW50LiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBwdWxsaW5nIHRoZSBoZWFkZXIsIGl0JiMzOTtzIG5vdyBjaGVja2luZyBpZiBwdWxsaW5nIHRoZSBJUHY2IGhlYWRlciBpcyBldmVuICpwb3NzaWJsZSouIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgZml4IGZvciBhIHByZXZpb3VzIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYSBtYWxmb3JtZWQgcGFja2V0IGNvdWxkIGNhdXNlIGlzc3Vlcy4gVGhlbiBpdCBsb29rcyB1cCB0aGUgbmV4dCBob3AuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZgIGFuZCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQYC4gSGVyZSwgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIFNSSCBzdGF0ZSBhbmQgdmFsaWRhdGluZyB0aGUgU1JIIGlmIG9uZSBleGlzdHMuIEkgc2VlIHRoZSBjb2RlIGNhbGxzIGBicGZfcHVzaF9zZWc2X2VuY2FwYCB3aXRoIGRpZmZlcmVudCBlbmNhcHN1bGF0aW9uIHR5cGVzLiBJdCBzZWVtcyB0aGUgY29kZSBpcyB0cmFja2luZyB0aGUgb2xkIGxlbmd0aCBvZiB0aGUgc2tiIGFzIGEgY2hlY2twb2ludCB0byBzZWUgaWYgYGJwZl9wdXNoX3NlZzZfZW5jYXBgIGNoYW5nZXMgdGhlIGxlbmd0aC4gRmluYWxseSwgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpcyBjYWxsZWQgd2hlbiB0aGUgbGVuZ3RoIG9mIHRoZSBza2IgaXMgY2hhbmdlZCBhZnRlciBjYWxsaW5nIGBicGZfcHVzaF9zZWc2X2VuY2FwYC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWxseSBhZGRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBTUkguIFRoYXQmIzM5O3MgZ29vZCwgSSB3YXMgZXhwZWN0aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIFRoZSBjaGFuZ2UgZnJvbSB0aGUgb2xkIGltcGxlbWVudGF0aW9uIHNlZW1zIHRvIGJlIHRoZSBsZW5ndGggY2hlY2sgYW5kIHVwZGF0aW5nIHRoZSBzcmggc3RhdGUgYmFzZWQgb24gdGhhdC4KCkFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBkdXJpbmcgZW5jYXBzdWxhdGlvbiwgYW5kIHdoZXRoZXIgdGhlc2Ugc3RhdGUgdXBkYXRlcyBhcmUgY3JpdGljYWwgb3IganVzdCBuaWNlLXRvLWhhdmVzLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wdXNoX3NlZzZfZW5jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02ODc4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmM6Njg3OTpzdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbm5ldC9jb3JlL2ZpbHRlci5jLTY4ODAte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY5MjE9QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTI3LVx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FOlxubmV0L2NvcmUvZmlsdGVyLmM6NjkyODpcdFx0cmV0dXJuIGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCB0eXBlLCBoZHIsIGxlbik7XG5uZXQvY29yZS9maWx0ZXIuYy02OTI5LSNlbmRpZlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzI9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA4MC1cdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG5uZXQvY29yZS9maWx0ZXIuYzo3MDgxOlx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODItXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA5MC1cdFx0b2xkX2xlbiA9IHNrYi1cdTAwM2VsZW47XG5uZXQvY29yZS9maWx0ZXIuYzo3MDkxOlx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxubmV0L2NvcmUvZmlsdGVyLmMtNzA5Mi1cdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYnBmX3B1c2hfc2VnNl9lbmNhcGAgbG9jYXRlZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBMZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBTZWdtZW50IFJvdXRpbmcgb3ZlciBJUHY2IChTUnY2KSBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgQlBGIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrIGF0IHRoaXMgcG9pbnQuIEkgc3VzcGVjdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIG9yIG1vZGlmeWluZyB0aGUgSVB2NiBoZWFkZXIgdG8gYWRkIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgdGhlbiBwdXNoaW5nIHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDogdGhlIHNrX2J1ZmYsIHRoZSBJUHY2IGhlYWRlciBzdHJ1Y3R1cmUsIHRoZSBTUkggaXRzZWxmLCBhbmQgaG93IHRoZSBCUEYgcHJvZ3JhbSBtYW5pcHVsYXRlcyB0aGVzZSBlbGVtZW50cyB0byBhY2NvbXBsaXNoIGVuY2Fwc3VsYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcyB3ZWxsLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBjcml0aWNhbCBwYXRoIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgaG93IHRoZSBCUEYgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgSVB2NiBoZWFkZXIgYW5kIGhvdyBpdCBzZXRzIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgdGhlIFNSSCB0byBzcGVjaWZ5IHRoZSBzZWdtZW50IGxpc3QuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlIGVmZmljaWVudGx5IGltcGxlbWVudCBTUnY2LiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBsaWtlIGluc3VmZmljaWVudCBidWZmZXIgc3BhY2Ugb3IgaW52YWxpZCBzZWdtZW50IGxpc3RzLiBJJiMzOTtsbCBhbHNvIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBhbnkgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGlmIGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY4Nzg6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbjY4Nzk6XHRzdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbjY4ODA6XHR7XG42ODgxOlx0XHRpbnQgZXJyO1xuNjg4MjpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopaGRyO1xuNjg4MzpcdFxuNjg4NDpcdFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgZmFsc2UpKVxuNjg4NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY4ODY6XHRcbjY4ODc6XHRcdHN3aXRjaCAodHlwZSkge1xuNjg4ODpcdFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FOlxuNjg4OTpcdFx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQVjYpKVxuNjg5MDpcdFx0XHRcdHJldHVybiAtRUJBRE1TRztcbjY4OTE6XHRcbjY4OTI6XHRcdFx0ZXJyID0gc2VnNl9kb19zcmhfaW5saW5lKHNrYiwgc3JoKTtcbjY4OTM6XHRcdFx0YnJlYWs7XG42ODk0Olx0XHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNjpcbjY4OTU6XHRcdFx0c2tiX3Jlc2V0X2lubmVyX2hlYWRlcnMoc2tiKTtcbjY4OTY6XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAxO1xuNjg5NzpcdFx0XHRlcnIgPSBzZWc2X2RvX3NyaF9lbmNhcChza2IsIHNyaCwgSVBQUk9UT19JUFY2KTtcbjY4OTg6XHRcdFx0YnJlYWs7XG42ODk5Olx0XHRkZWZhdWx0OlxuNjkwMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5MDE6XHRcdH1cbjY5MDI6XHRcbjY5MDM6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjY5MDQ6XHRcdGlmIChlcnIpXG42OTA1Olx0XHRcdHJldHVybiBlcnI7XG42OTA2Olx0XG42OTA3Olx0XHRza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbjY5MDg6XHRcbjY5MDk6XHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XG42OTEwOlx0fVxuNjkxMTpcdCNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xuNjkxMjpcdFxuNjkxMzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19MV1RVTk5FTF9CUEYpXG42OTE0Olx0c3RhdGljIGludCBicGZfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sXG42OTE1Olx0XHRcdFx0ICAgICBib29sIGluZ3Jlc3MpXG42OTE2Olx0e1xuNjkxNzpcdFx0cmV0dXJuIGJwZl9sd3RfcHVzaF9pcF9lbmNhcChza2IsIGhkciwgbGVuLCBpbmdyZXNzKTtcbjY5MTg6XHR9XG42OTE5Olx0I2VuZGlmXG42OTIwOlx0XG42OTIxOlx0QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcbjY5MjI6XHRcdCAgIHUzMiwgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ4NAoJCQkJCQkJb3V0cHV0OiAyNTMKCQkJCQkJCXRob3VnaHRzOiA4NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEJQRiBTUkggU3RhdGUgVXBkYXRlIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBpc3N1ZSBpcyBhIHBvdGVudGlhbCBmb3Igc3RhbGUgb3IgaW52YWxpZCBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIHBvaW50ZXJzIHdpdGhpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGluIGZ1bmN0aW9ucyBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgc2VnNl9kb19zcmhfaW5saW5lYCBvciBgc2VnNl9kb19zcmhfZW5jYXBgIHRvIG1vZGlmeSB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCBpbmNyZWFzZSBpdHMgbGVuZ3RoLiBUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgbWlnaHQgc3Vic2VxdWVudGx5IHJldHVybiBhbiBlcnJvciwgZXZlbiBhZnRlciBlbmNhcHN1bGF0aW9uIGFwcGVhcmVkIHRvIHN1Y2NlZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBvbmx5IGNoZWNraW5nIGZvciB0aGUgc3VjY2VzcyBvZiBgc2VnNl9sb29rdXBfbmV4dGhvcGAsIGFuZCBpZiBpdCBmYWlsZWQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgd2FzbiYjMzk7dCBiZWluZyBjYWxsZWQsIGxlYXZpbmcgdGhlIFNSSCBzdGF0ZSBwb3RlbnRpYWxseSBpbmNvbnNpc3RlbnQgaWYgdGhlIGBza2JgIHdlcmUgcmVhbGxvY2F0ZWQgb3IgbW9kaWZpZWQgbGF0ZXIuCgpOb3csIGxvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHRoZSBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgc2NlbmFyaW8sIHdoZXJlIGBwc2tiX21heV9wdWxsYCBlbnN1cmVzIHRoZSBJUHY2IGhlYWRlciBpcyBwcmVzZW50IGluIHRoZSBsaW5lYXIgcGFydCBiZWZvcmUgcHVsbGluZyBpdCwgYW5kIHRoZW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBub3cgY29ycmVjdGx5IHVzZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBpbnN0ZWFkIG9mIGFzc3VtaW5nIGBza2ItJmd0O2RhdGEgJiM0Mzsgc3Job2ZmYCBpcyB2YWxpZCwgYW5kIHRoZW4gY2FsbHMgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIGltcHJvdmVtZW50IGluIHBvaW50ZXIgc2FmZXR5LgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgdmFyaWFibGUgaW5zcGVjdGlvbi4gSW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYDogYHNyaGAgaXMgb2J0YWluZWQgdmlhIGBzZWc2X2dldF9zcmhgLCB3ZSBjb21wdXRlIGRhdGEgcG9pbnRlcnMsIGFuZCB0aGVuIGNoZWNrIGAhc3JoYC4gYHNyaF9zdGF0ZS0mZ3Q7aGRybGVuYCBpcyBhbHNvIHVwZGF0ZWQsIGFzIGlzIGBzcmhfc3RhdGUtJmd0O3ZhbGlkYC4gSW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCB3ZSBoYXZlIGBvbGRfbGVuYCwgaW5pdGlhbGl6ZWQgdG8gYHNrYi0mZ3Q7bGVuYCBiZWZvcmUgdGhlIGVuY2FwIGFuZCBjaGVja2VkIGFmdGVyLiBUaGUgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgIHBhdGggY29ycmVjdGx5IHVzZXMgYHBza2JfbWF5X3B1bGxgIGFuZCB0aGVuIGBfX3NrYl9wdWxsYC4KCkkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIGBvbGRfbGVuYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gYHNyaGAgaXMgYWxzbyBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNlZzZfZ2V0X3NyaChza2IsIDApYC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlIGluIHBsYXkgaGVyZSwgc28gbm8gY2hhbmNlIG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZSBhbHNvIGRvbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55IHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4KClJlZ2FyZGluZyB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIEkmIzM5O20gY29tZm9ydGFibGUgdGhhdCBpdCYjMzk7cyB6ZXJvLiBUaGlzIGZpeCBpcyBzdHJpY3RseSBhYm91dCBmaXhpbmcgc3RhbGUgcG9pbnRlciBpc3N1ZXMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBsaW5lYXIgYnVmZmVyIGhhbmRsaW5nIGZvciBTUkggaW4gQlBGIGhlbHBlcnMuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGdvaW5nIHRvIGJlIG91ciBtYWluIHNhZmV0eSBuZXQsIGFuZCB0aGlzIGlzIGV4YWN0bHkgdGhlIHR5cGUgb2YgYnVnIGl0IGV4Y2VscyBhdCBkZXRlY3RpbmcuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0IGxvb2tzIGxpa2UgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrLCBvciBhIHN0cnVjdCBwYWRkaW5nIGlzc3VlLgoKT2theSwgbGV0JiMzOTtzIHNlZSwgZG9lcyB0aGlzIG1lZXQgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA/IExldCYjMzk7cyBjaGVjazogb3V0LW9mLWJvdW5kcywgTlVMTCBkZXJlZmVyZW5jZSwgZXRjLj8gWWVwLCBLQVNBTiBjYXRjaGVzIHRob3NlIGFuZCB0aGlzIGlzIHByZWNpc2VseSB3aGF0IHRoZSBwYXRjaCBpcyBmaXhpbmcuIEZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdHM/IENoZWNrLiBObyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8gbGVha3M/IENvcnJlY3QuCgpFdmVyeXRoaW5nIGhlcmUgc2VlbXMgY2xlYXIuIFRoZSBmaXggaXMgc291bmQsIHdlbGwtc2NvcGVkLCBhbmQgc2hvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBjYXN0aW5nIG9mIG9mZnNldHMgaW50byBza2ItXHUwMDNlZGF0YSB3aXRoIHNlZzZfZ2V0X3NyaCgpIGFuZCBwc2tiX21heV9wdWxsIGNoZWNrcyB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgbGluZWFyIGhlYWRlciBzYWZlbHkuXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cbi0gTG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYG9sZF9sZW5gIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGBza2ItXHUwMDNlbGVuYCBwcmlvciB0byByZWFkaW5nLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGFkZHJlc3MgYnVmZmVyIGJvdW5kcywgcG9pbnRlciByZWNvbXB1dGF0aW9uLCBhbmQgbGluZWFyIGhlYWRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzdGFsZSBwb2ludGVyIGFuZCBidWZmZXIgYm91bmRhcnkgaXNzdWVzIGluIEJQRiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1JIKSBoZWxwZXJzIChicGZfdXBkYXRlX3NyaF9zdGF0ZSBhbmQgYnBmX2x3dF9zZWc2X2FjdGlvbikuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGNhc3Rpbmcgb2Ygb2Zmc2V0cyBpbnRvIHNrYi1cdTAwM2VkYXRhIHdpdGggc2VnNl9nZXRfc3JoKCkgYW5kIHBza2JfbWF5X3B1bGwgY2hlY2tzIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBsaW5lYXIgaGVhZGVyIHNhZmVseS5cbi0gSXQgcmVjb21wdXRlcyBCUEYgZGF0YSBwb2ludGVycyBhbmQgdXBkYXRlcyB0aGUgcGVyLUNQVSBTUkggc3RhdGUgd2hlbiB0aGUgc2tiIGJ1ZmZlciBleHBhbmRzIG9yIGNoYW5nZXMgbGVuZ3RoIGR1cmluZyBlbmNhcHN1bGF0aW9uLlxuLSBMb2NhbCB2YXJpYWJsZXMgc3VjaCBhcyBgb2xkX2xlbmAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gYHNrYi1cdTAwM2VsZW5gIHByaW9yIHRvIHJlYWRpbmcuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgYWRkcmVzcyBidWZmZXIgYm91bmRzLCBwb2ludGVyIHJlY29tcHV0YXRpb24sIGFuZCBsaW5lYXIgaGVhZGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTMuNjM1NTMwODMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzgwMTQzMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbHd0X3NlZzZfYWN0aW9uXCIsXG4gICAgXCJicGZfdXBkYXRlX3NyaF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN0YWxlIHBvaW50ZXIgYW5kIGJ1ZmZlciBib3VuZGFyeSBpc3N1ZXMgaW4gQlBGIElQdjYgU2VnbWVudCBSb3V0aW5nIChTUkgpIGhlbHBlcnMgKGJwZl91cGRhdGVfc3JoX3N0YXRlIGFuZCBicGZfbHd0X3NlZzZfYWN0aW9uKS4gU3BlY2lmaWNhbGx5Olxcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGNhc3Rpbmcgb2Ygb2Zmc2V0cyBpbnRvIHNrYi1cXHUwMDNlZGF0YSB3aXRoIHNlZzZfZ2V0X3NyaCgpIGFuZCBwc2tiX21heV9wdWxsIGNoZWNrcyB0byB2YWxpZGF0ZSBhbmQgcHVsbCB0aGUgbGluZWFyIGhlYWRlciBzYWZlbHkuXFxuLSBJdCByZWNvbXB1dGVzIEJQRiBkYXRhIHBvaW50ZXJzIGFuZCB1cGRhdGVzIHRoZSBwZXItQ1BVIFNSSCBzdGF0ZSB3aGVuIHRoZSBza2IgYnVmZmVyIGV4cGFuZHMgb3IgY2hhbmdlcyBsZW5ndGggZHVyaW5nIGVuY2Fwc3VsYXRpb24uXFxuLSBMb2NhbCB2YXJpYWJsZXMgc3VjaCBhcyBgb2xkX2xlbmAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gYHNrYi1cXHUwMDNlbGVuYCBwcmlvciB0byByZWFkaW5nLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgYWRkcmVzcyBidWZmZXIgYm91bmRzLCBwb2ludGVyIHJlY29tcHV0YXRpb24sIGFuZCBsaW5lYXIgaGVhZGVyIHZhbGlkaXR5LCB3aGljaCBhcmUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMgaW50cm9kdWNlZCBvciBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTMuNjM1NTM1NTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc3NjExNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMmNhZmY2NTczZDEwOTZmZGJkZjBkZDg3ZjA5Mjc5YWQ0Y2YxMGQxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDg1MTMxNjdhODU4YTguLmIwMzdkNzBlNWZlNjUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC03MDE3LDE1ICs3MDE3LDE2IEBAIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG4gXFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4tXFx0aW50IHNyaG9mZiA9IDA7XFxuK1xcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiBcXG4tXFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2c3Job2ZmLCBJUFBST1RPX1JPVVRJTkcsIE5VTEwsIE5VTEwpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXFx1MDAzZWRhdGEgKyBzcmhvZmYpO1xcbi1cXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4tXFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuLVxcdH1cXG4rXFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuK1xcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4rXFx0c3JoX3N0YXRlLVxcdTAwM2VzcmggPSBzcmg7XFxuK1xcdGlmICghc3JoKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuK1xcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiB9XFxuIFxcbiBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG5AQCAtNzAzMyw2ICs3MDM0LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuIHtcXG4gXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG4gXFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4rXFx0dW5zaWduZWQgaW50IG9sZF9sZW47XFxuIFxcdGludCBoZHJvZmYgPSAwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtNzA1OCwzMiArNzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFxuIFxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNmhkcm9mZiwgSVBQUk9UT19JUFY2LCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4tXFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxcbitcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xcbitcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuK1xcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbitcXHRcXHR9XFxuK1xcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbiBcXG4gXFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XFxuIFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiBcXG4tXFx0XFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbiBcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbiBcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG4gXFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG4rXFx0XFx0b2xkX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG4tXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbiBcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjZfRU5DQVA6XFxuIFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdFxcdG9sZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcXG4gXFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG4tXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbiBcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbiBcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTQuMTQzOTk0NDY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MDU0NjIyODI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICAgIFwiYnBmX3VwZGF0ZV9zcmhfc3RhdGVcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfYnBmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSdjYgQlBGIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGludGVybmFsIHN0YXRlIHVwZGF0ZSBmdW5jdGlvbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGluIG5ldC9jb3JlL2ZpbHRlci5jLiBJdCBjaGFuZ2VzIGhvdyB0aGUgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBpcyByZXRyaWV2ZWQgYW5kIHZhbGlkYXRlZCwgYWx0ZXJzIHNrYiBwdWxsaW5nL3BvaW50ZXIgcmVjYWxjdWxhdGlvbnMgb24gZGVjYXBzdWxhdGlvbiBhY3Rpb25zIChTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2KSwgYW5kIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpcyBpbnZva2VkIGFmdGVyIGVuY2Fwc3VsYXRpb24gYWN0aW9ucy4gVGhpcyBsb2dpYyBpcyBmdWxseSByZWFjaGFibGUgdmlhIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCBwcm9ncmFtcyBhdHRhY2hlZCB0byBJUHY2IHNlZzYgcm91dGVzIGluIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDJjYWZmNjU3M2QxMDk2ZmRiZGYwZGQ4N2YwOTI3OWFkNGNmMTBkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MjA6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA4NTEzMTY3YTg1OGE4Li5iMDM3ZDcwZTVmZTY1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzAxNywxNSArNzAxNywxNiBAQCBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4gXHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbi1cdGludCBzcmhvZmYgPSAwO1xuK1x0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XG4gXG4tXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBOVUxMKSBcdTAwM2MgMCkge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gTlVMTDtcbi1cdH0gZWxzZSB7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopKHNrYi1cdTAwM2VkYXRhICsgc3Job2ZmKTtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZWhkcmxlbiA9IHNyaF9zdGF0ZS1cdTAwM2VzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNldmFsaWQgPSB0cnVlO1xuLVx0fVxuK1x0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XG4rXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4rXHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gc3JoO1xuK1x0aWYgKCFzcmgpXG4rXHRcdHJldHVybjtcbitcbitcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiB9XG4gXG4gQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5AQCAtNzAzMyw2ICs3MDM0LDcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4ge1xuIFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cbiBcdFx0dGhpc19jcHVfcHRyKFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xuK1x0dW5zaWduZWQgaW50IG9sZF9sZW47XG4gXHRpbnQgaGRyb2ZmID0gMDtcbiBcdGludCBlcnI7XG4gXG5AQCAtNzA1OCwzMiArNzA2MCwzNyBAQCBCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcbiBcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuLVx0XHRpZiAoIXBza2JfcHVsbChza2IsIGhkcm9mZikpXG4rXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4rXHRcdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4rXHRcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbitcdFx0fVxuK1x0XHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcbiBcbiBcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XG4gXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXG4tXHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcdFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxuIFx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcbiBcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbi1cdFx0aWYgKCFlcnIpXG4rXHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9sZF9sZW4pXG4gXHRcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiBcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxuIFx0XHRpZiAoc3JoX3N0YXRlLVx1MDAzZXNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxuIFx0XHRcdFx0XHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xuLVx0XHRpZiAoIWVycilcbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gb2xkX2xlbilcbiBcdFx0XHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xuIFxuIFx0XHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MTQuMTQzOTk1Nzc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg1Mjc3MjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gd2UgaGF2ZSBhIGRpZmYuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5ICp3aGF0KiBjb2RlIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgZGlmZiBpcyBoaXR0aW5nIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiDigJMgdGhhdCdzIHRoZSBrZXJuZWwncyBmaWx0ZXJpbmcgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgc2VlbXMgdG8gYmUgdG91Y2hpbmcgdHdvIGZ1bmN0aW9uczogYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggQlBGLXJlbGF0ZWQgdXBkYXRlcywgcG90ZW50aWFsbHkgYWZmZWN0aW5nIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaGFuZGxpbmcgd2l0aGluIHRoZSBsaWdodHdlaWdodCB0dW5uZWxzIChMV1QpIGNvbnRleHQuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFzIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGV2ZXJhZ2luZyBTUnY2IG9yIG90aGVyIExXVCBmZWF0dXJlcy5cblxuVG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlIGFuZCBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgcG9zc2libHkganVzdCBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIHBpcGVsaW5lIGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSdyZSBvcGVyYXRpbmcgb24uIEFyZSB0aGVyZSBhbnkgbmV3IGVycm9yIGNvbmRpdGlvbnMgYmVpbmcgaW50cm9kdWNlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcz8gV2hhdCBraW5kIG9mIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhcmlzZSBmcm9tIHRoZSBjaGFuZ2VzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgZGVlcGVyIGRpdmUgd2lsbCBiZSBjcnVjaWFsIGJlZm9yZSBJIGNhbiBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZGlmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MjAuOTk2NzcwMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwODMwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2x3dF9zZWc2X2FjdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz03MDE2PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDMxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzI6QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzMy1cXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTAxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMDM6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9sd3Rfc2VnNl9hY3Rpb24sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzEwNC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTA1MT1sd3Rfc2VnNmxvY2FsX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDU3LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTg6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTktXFx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9hZGp1c3Rfc3JoOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMDoyMS4wNDk4NjExOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzg0MjA4MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGZpbHRlcmluZyBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDcwMDAgdG8gNzEwMCBvZiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGF0IEknbSBsb29raW5nIGF0IGZpbHRlcmluZyBjb2RlLCBJJ20gcHJvYmFibHkgaW50ZXJlc3RlZCBpbiBob3cgcGFja2V0cyBhcmUgYmVpbmcgcHJvY2Vzc2VkIGJhc2VkIG9uIHZhcmlvdXMgY3JpdGVyaWEuIExpbmVzIGluIHRoaXMgcmFuZ2UgbGlrZWx5IGRlYWwgd2l0aCBzb21lIGNyaXRpY2FsIGFzcGVjdCBvZiB0aGUgZmlsdGVyaW5nIHBpcGVsaW5lLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkLCBhbmQgdGhlIGNvbnRyb2wgZmxvdyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGZpbHRlcmluZyBsb2dpYyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkLiBJIHN1c3BlY3QgdGhpcyBtaWdodCBiZSBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgc28gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHZ1bG5lcmFiaWxpdGllcy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBCUEYgb3Igc29tZSBvdGhlciBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yaywgYnV0IEknbGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgdG8gYmUgc3VyZS4gSSdsbCBhcHByb2FjaCB0aGlzIG1ldGhvZGljYWxseSwgbWFraW5nIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGVhY2ggZnVuY3Rpb24gb3IgYmxvY2sgb2YgY29kZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MjQuNDM0MDcyNzg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDAwOlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXFx1MDAzZWRhdGEgKyBzcmhvZmYpO1xcbjcwMDE6XFx0XFxuNzAwMjpcXHRcXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhICsgb2Zmc2V0LCBmcm9tLCBsZW4pO1xcbjcwMDM6XFx0XFx0cmV0dXJuIDA7XFxuNzAwNDpcXHR9XFxuNzAwNTpcXHRcXG43MDA2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xcbjcwMDc6XFx0XFx0LmZ1bmNcXHRcXHQ9IGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcyxcXG43MDA4OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuNzAwOTpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbjcwMTA6XFx0XFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuNzAxMTpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuNzAxMjpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuNzAxMzpcXHRcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVcXG43MDE0OlxcdH07XFxuNzAxNTpcXHRcXG43MDE2OlxcdHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuNzAxNzpcXHR7XFxuNzAxODpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMTk6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDIwOlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbjcwMjE6XFx0XFxuNzAyMjpcXHRcXHRzcmggPSBzZWc2X2dldF9zcmgoc2tiLCAwKTtcXG43MDIzOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MDI0OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbjcwMjU6XFx0XFx0aWYgKCFzcmgpXFxuNzAyNjpcXHRcXHRcXHRyZXR1cm47XFxuNzAyNzpcXHRcXG43MDI4OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuID0gc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG43MDI5OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjcwMzA6XFx0fVxcbjcwMzE6XFx0XFxuNzAzMjpcXHRCUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG43MDMzOlxcdFxcdCAgIHUzMiwgYWN0aW9uLCB2b2lkICosIHBhcmFtLCB1MzIsIHBhcmFtX2xlbilcXG43MDM0OlxcdHtcXG43MDM1OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuNzAzNjpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjcwMzc6XFx0XFx0dW5zaWduZWQgaW50IG9sZF9sZW47XFxuNzAzODpcXHRcXHRpbnQgaGRyb2ZmID0gMDtcXG43MDM5OlxcdFxcdGludCBlcnI7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNyaF9zdGF0ZS1cXHUwMDNlYmhfbG9jayk7XFxuNzA0MjpcXHRcXHRzd2l0Y2ggKGFjdGlvbikge1xcbjcwNDM6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcXG43MDQ0OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNDU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNDY6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSlcXG43MDQ3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNDg6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCAoc3RydWN0IGluNl9hZGRyICopcGFyYW0sIDApO1xcbjcwNDk6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfVDpcXG43MDUwOlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTI6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDUzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNTQ6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcXG43MDU1OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcXG43MDU2OlxcdFxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwNTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNTg6XFx0XFx0XFx0aWYgKHBhcmFtX2xlbiAhPSBzaXplb2YoaW50KSlcXG43MDU5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjcwNjA6XFx0XFxuNzA2MTpcXHRcXHRcXHRpZiAoaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZoZHJvZmYsIElQUFJPVE9fSVBWNiwgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbjcwNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwNjM6XFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRyb2ZmICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcXG43MDY0OlxcdFxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gTlVMTDtcXG43MDY1OlxcdFxcdFxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG43MDY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDY3OlxcdFxcdFxcdH1cXG43MDY4OlxcdFxcdFxcdF9fc2tiX3B1bGwoc2tiLCBoZHJvZmYpO1xcbjcwNjk6XFx0XFxuNzA3MDpcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaGRyb2ZmKTtcXG43MDcxOlxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjcwNzI6XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG43MDczOlxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuNzA3NDpcXHRcXG43MDc1OlxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA3NjpcXHRcXHRcXHRyZXR1cm4gc2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsICooaW50ICopcGFyYW0pO1xcbjcwNzc6XFx0XFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQjY6XFxuNzA3ODpcXHRcXHRcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDc5OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDgwOlxcdFxcdFxcdG9sZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG43MDgxOlxcdFxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzZfSU5MSU5FLFxcbjcwODI6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDgzOlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbjcwODQ6XFx0XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDg1OlxcdFxcbjcwODY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43MDg3OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2X0VOQ0FQOlxcbjcwODg6XFx0XFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA5MDpcXHRcXHRcXHRvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuNzA5MTpcXHRcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2LFxcbjcwOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcXG43MDkzOlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSBvbGRfbGVuKVxcbjcwOTQ6XFx0XFx0XFx0XFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcXG43MDk1OlxcdFxcbjcwOTY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG43MDk3OlxcdFxcdGRlZmF1bHQ6XFxuNzA5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MjQuNDM0NjA1MzE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTUxOTY1MDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoaXMga2VybmVsIGNvZGUsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIGVCUEYgYW5kIFNlZ21lbnQgUm91dGluZyB3aXRoIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBlQlBGIGFuZCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIG1hbmlwdWxhdGlvbiBpbiB0aGlzIHNwZWNpZmljIGtlcm5lbCBjb250ZXh0LiBUaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC4gSSB3YW50IHRvIGtub3cgd2hlcmUgdGhleSdyZSBiZWluZyAqY2FsbGVkKiB3aXRoaW4gdGhlIGtlcm5lbCdzIGVCUEYgZnJhbWV3b3JrLCBhbmQsIGNyaXRpY2FsbHksIHdoYXQgS2NvbmZpZyBvcHRpb25zLCBpZiBhbnksIGFyZSBjb250cm9sbGluZyB0aGVpciBpbmNsdXNpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgYnVpbGQgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhlaXIgYXZhaWxhYmlsaXR5LiBVbmRlcnN0YW5kaW5nIHRob3NlIEtjb25maWcgb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgc29ydCBvZiBrZXJuZWwgY3VzdG9taXphdGlvbiBvciBmb3IgcG9ydGluZyBpdCB0byBhIG5ldyBwbGF0Zm9ybS5cblxuTmV4dCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSByZWxhdGlvbnNoaXBzIG5lYXIgdGhlIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCB2YXJpYWJsZSBhbmQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb24uIE15IGd1ZXNzIGlzIHRoaXMgaXMgd2hlcmUgdGhlIFNSSCBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kIG1hbmFnZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIEJQRiBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhvc2Ugc3RhdGUgdmFyaWFibGVzIC0gYW5kIEknbSBsb29raW5nIGZvciBhIGNsZWFyIGluZGljYXRpb24gb2YgaG93IGVCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggU1JIIG1hbmlwdWxhdGlvbiwgYXJlIGludGVncmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JrIGZpbHRlcmluZyBhbmQgZm9yd2FyZGluZyBwcm9jZXNzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIG1vZHVsZS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIHN0YXRlIHRyYW5zaXRpb24gaGFuZGxpbmcgaGVyZSwgaW4gcmVzcG9uc2UgdG8gZUJQRiBhY3Rpb25zIC0gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzMuOTU0MjU3Njg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzIyNDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfYnBmX3NyaF9zdGF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTY5NzM9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTc2LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6Njk3NzpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzgtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMTY9c3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMTgtXFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MDE5OlxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzAyMC1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcwMzI9QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDM1LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAzNjpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMzctXFx0dW5zaWduZWQgaW50IG9sZF9sZW47XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTEyPUJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTE1LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzExNjpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTctXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzQuMDA3NTg0Njc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4Nzg0NDEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgZm9jdXNpbmcgb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgbXkgYWN0aW9uczpcblxuKipEZWx2aW5nIGludG8gdGhlIENvZGUncyBHdWFyZHJhaWxzKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGxpbmUgNjk3MCB0byA3MTUwLCBvciwgaWYgdGhhdCdzIG5vdCB0aGUgcmlnaHQgYXJlYSwgSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGdhemUgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBvciwgZmFpbGluZyB0aGF0LCB0aGUgYEtjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjb250cm9sbGluZyB0aGUgY29tcGlsYXRpb24gb3IgaW5jbHVzaW9uIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGFsbW9zdCBjZXJ0YWluIEknbGwgZmluZCBteSBhbnN3ZXJzIGluIGAjaWZkZWZgIGd1YXJkcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBhdCBwbGF5LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGZlYXR1cmUgZmxhZyBvciBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IG9yIG5vdC4gRmluZGluZyB0aGUgc3BlY2lmaWMgc3ltYm9sIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3RhdGVtZW50cyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBzZWN0aW9uIGlzIGEgY2FyZWZ1bGx5IGNvbnRyb2xsZWQgcGllY2UsIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIG5ldHdvcmtpbmcgZmlsdGVyIG9yIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBub3QgYWx3YXlzIGRlc2lyZWQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlY29uZGl0aW9ucyB0aGF0IGRldGVybWluZSB3aGV0aGVyIGl04oCZcyBldmVuIHByZXNlbnQgaW4gdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzU4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzYuNDk1NDMwODUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3MjQxNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2X1NFRzZfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMC19XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMTojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTcxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcxNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzAtfTtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTcxOiNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzItXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDUxPWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTMtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6OTA1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy05MDU1LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmM9MzI4PXN0YXRpYyB2b2lkIHByb2JlX2tlcm5lbF9pbWFnZV9jb25maWcoY29uc3QgY2hhciAqZGVmaW5lX3ByZWZpeClcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zODgtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9MV1RfU0VHNl9MT0NBTCBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jOjM4OTpcXHRcXHR7IFxcXCJDT05GSUdfSVBWNl9TRUc2X0JQRlxcXCIsIH0sXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM5MC1cXHRcXHQvKiBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIgYW5kIHJlbGF0ZWQgaGVscGVycyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz00OD1DT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZzo0OTpDT05GSUdfSVBWNl9TRUc2X0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy01MC1DT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6MzguNzEyNjgyODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4NTY1ODk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQ09ORklHX0lQVjZfU0VHNl9CUEYgS2NvbmZpZyBEZWZpbml0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZGVmaW5pdGlvbiBmb3IgYENPTkZJR19JUFY2X1NFRzZfQlBGYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbHMgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgSVB2NiBzZWdtZW50IHJvdXRpbmcgd2l0aCBCUEYgbGFuZHNjYXBlLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykg4oCTIHVzdWFsbHksIGl0J3Mgc29tZXdoZXJlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBvciBJUHY2LXJlbGF0ZWQgZGlyZWN0b3JpZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgbmVlZCB0byB1c2UgYGZpbmRgIG9yIGBncmVwYCBmcm9tIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZCBuYXJyb3cgZG93biB0aGUgbG9jYXRpb24uIE9uY2UgSSBoYXZlIHRoZSBmaWxlLCBJJ2xsIG5lZWQgdG8gcmVhZCB0aGUgZGVmaW5pdGlvbiB2ZXJ5IGNhcmVmdWxseS4gSSdsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24uXG5cbiogICAqKlRoZSBkZXBlbmRlbmN5IGNoYWluOioqIFdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgb25lIHRvIGJlIGF2YWlsYWJsZT8gQXJlIHRoZXJlIGFueSBoYXJkIGRlcGVuZGVuY2llcyBsaWtlIGBDT05GSUdfSVBWNmAgb3Igc29mdCBkZXBlbmRlbmNpZXMgaW5mbHVlbmNpbmcgaXRzIGluY2x1c2lvbj8gVGhlIGRlcGVuZGVuY2llcyB3aWxsIHNob3cgbWUgd2hlcmUgdGhpcyBmZWF0dXJlIGlzIGxvZ2ljYWxseSBzaXR1YXRlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgY29uZmlndXJhdGlvbi5cbiogICAqKlRoZSBwcm9tcHQgc3RyaW5nOioqIFdoYXQgaXMgdGhlIGRlc2NyaXB0aXZlIHRleHQgdGhhdCB0aGUgdXNlciBzZWVzIHdoZW4gdGhleSdyZSBjb25maWd1cmluZyB0aGUga2VybmVsPyBEb2VzIHRoaXMgdGV4dCBjbGVhcmx5IGV4cGxhaW4gdGhlIHB1cnBvc2UgYW5kIGJlbmVmaXRzIG9mIGVuYWJsaW5nIGBDT05GSUdfSVBWNl9TRUc2X0JQRmA/IEEgd2VsbC13cml0dGVuIHByb21wdCBpcyBjcnVjaWFsIGZvciB1c2VyIHVuZGVyc3RhbmRpbmcuXG4qICAgKipUaGUgaGVscCB0ZXh0OioqIFRoZSBsb25nZXIgaGVscCB0ZXh0IGlzIHdoZXJlIHRoZSByZWFsIGRldGFpbCByZXNpZGVzLiBJdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgaW4tZGVwdGggZXhwbGFuYXRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBkb2VzLCBsaWtlbHkgdG91Y2hpbmcgb24gdG9waWNzIGxpa2UgZW5hYmxpbmcgQlBGLWJhc2VkIHByb2Nlc3Npbmcgb2YgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSBkYXRhLCBob3cgaXQgcmVsYXRlcyB0byB0aGUgZGF0YSBwbGFuZSwgYW5kIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiU1J2NixcIiBcIkJQRixcIiBcImRhdGEgcGxhbmUsXCIgXCJwZXJmb3JtYW5jZSxcIiBhbmQgYW55IHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUgb3Igc3Vic3lzdGVtcy4gSXQgbWlnaHQgYWxzbyBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuXG4qICAgKipBbnkgZGVmYXVsdCB2YWx1ZXM6KiogRG9lcyB0aGUgb3B0aW9uIGhhdmUgYSBkZWZhdWx0IHZhbHVlIChlLmcuLCBgeWAsIGBuYCwgYG1gKT8gSXMgaXQgZGVmYXVsdCBlbmFibGVkLCBkaXNhYmxlZCwgb3IgbW9kdWxhcj8gSWYgc28sIHRoaXMgaGVscHMgZXN0YWJsaXNoIHdoZXRoZXIgaXQncyBjb25zaWRlcmVkIGEgY29yZSBwYXJ0IG9mIHRoZSBmZWF0dXJlIHNldCBvciBhbiBvcHRpb25hbCBlbmhhbmNlbWVudC5cbiogICAqKkxvY2F0aW9uIGluIHRoZSBrZXJuZWwgdHJlZToqKiBJbiB3aGljaCBwYXJ0IG9mIHRoZSBrZXJuZWwgZG9lcyBpdCByZXNpZGU/IEFyZSB0aGVyZSBkaWZmZXJlbnQgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGV4aXN0aW5nIGtlcm5lbCBtb2R1bGVzP1xuKiAgICoqQW55IGFzc29jaWF0ZWQgc3ltYm9sIGRlZmluaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgbWFjcm9zIG9yIHN5bWJvbHMgZGVmaW5lZCB0aGF0IGRlcGVuZCBvbiB0aGlzIG9uZSBiZWluZyBzZXQ/IFRoYXQgY2FuIGhlbHAgaW5mZXIgdGhlIHNwZWNpZmljIGZlYXR1cmVzIHRoaXMgY29uZmlnIG9wdGlvbiBleHBvc2VzLlxuXG5XaXRoIHRoaXMgaW5mb3JtYXRpb24gaW4gaGFuZCwgSSBjYW4gY29uZmlkZW50bHkgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGFuZCBpbnRlZ3JhdGUgaXQgaW50byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBJUHY2IHNlZ21lbnQgcm91dGluZyB3aXRoIEJQRiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgY2FuIGFsc28gZW5zdXJlIHRoYXQgbXkgY29uZmlndXJhdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIHVzZSBjYXNlIGFuZCBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIwOjQyLjU5ODM0NTMzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NTM1NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0JQRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTMwMD1jb25maWcgSVBWNl9TRUc2X0hNQUNcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMDo0NC41OTM3MTMxOTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzMzg3MjU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGF0IHBsYXksIG15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyBhcm91bmQgbGluZSAzMTIgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZXMgdG8gb3RoZXJzLCB3aGF0IG90aGVyIHNldHRpbmdzIGVuYWJsZSBvciBkaXNhYmxlIGl0LCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBnb3Zlcm5zIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBhbmQgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucy4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSBicmVhZGNydW1icy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIwOjQ2LjUyNzU4ODM0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cXG4gMzA4OlxcdFxcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMxMTpcXHRcXG4gMzEyOlxcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuIDMxMzpcXHRcXHRkZWZfYm9vbCB5XFxuIDMxNDpcXHRcXHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxcbiAzMTU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG4gMzE4OlxcdFxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4gMzE5OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAzMjA6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDMyMTpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDMyMjpcXHRcXHRoZWxwXFxuIDMyMzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcXG4gMzI0OlxcdFxcdCAgdHVubmVscyBtZWNoYW5pc20uXFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzI3OlxcdFxcbiAzMjg6XFx0Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG4gMzI5OlxcdFxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NDYuNTI3Njg4NDA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0OTI1OTc4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgY29uZmlnIElQVjZfU0VHNl9CUEZgIG9wdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQgaGFzIGRlcGVuZGVuY2llcy4gUmlnaHQsIGl0IHJlbGllcyBvbiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBhbmQsIG9mIGNvdXJzZSwgSVB2NiBpdHNlbGYgYmVpbmcgZW5hYmxlZCwgd2hpY2ggaXMgYElQVjYgPSB5YC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYmVjYXVzZSBzZWdtZW50IHJvdXRpbmcgaXMgYW4gSVB2NiBleHRlbnNpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBiaXQgbW9yZSBhYm91dCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgc28gSSBzaG91bGQgcHJvYmFibHkganVtcCBpbnRvIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXQgaXRzIGRlZmluaXRpb24gdGhlcmUuIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywgd2hhdCBleGFjdGx5IGl0IGVuYWJsZXMsIGFuZCBob3BlZnVsbHkgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyB3aG9sZSBzZWdtZW50IHJvdXRpbmcgaW1wbGVtZW50YXRpb24gd29ya3Mgd2l0aGluIHRoZSBJUHY2IHN0YWNrLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIwOjUwLjAyMDI4ODU4MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFxuIDI4NjpcXHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxuIDI4NzpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMjg4OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyODk6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDI5MDpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDI5MTpcXHRcXHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG4gMjkyOlxcdFxcdGhlbHBcXG4gMjkzOlxcdFxcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XFxuIDI5NDpcXHRcXHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxcbiAyOTU6XFx0XFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcXG4gMjk2OlxcdFxcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjk5OlxcdFxcbiAzMDA6XFx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxuIDMwMTpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbiAzMDI6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDMwMzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuIDMwNDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gMzA1OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuIDMwNjpcXHRcXHRoZWxwXFxuIDMwNzpcXHRcXHQgIFN1cHBvcnQgZm9yIEhNQUMgc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvblxcbiAzMDg6XFx0XFx0ICBvZiBTUi1lbmFibGVkIHBhY2tldHMuXFxuIDMwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NTAuMDIwMzk0MTUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjIzNjU1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRUc2IEJQRiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgSSBzZWUgdGhhdCBgSVBWNl9TRUc2X0JQRmAgaXMgb25seSBlbmFibGVkIHdoZW4gYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBJUFY2YCBhcmUgc2V0IHRvICd5Jy4gTWFrZXMgc2Vuc2UuIEFuZCwgb2YgY291cnNlLCBCUEYgbmVlZHMgYEJQRl9TWVNDQUxMYCBlbmFibGVkIGFzIHdlbGwuIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIGZvY3VzaW5nIG9uIHRoZSBwYXRjaCBpdHNlbGYsIEkgY2FuIHNlZSB0aGV5J3ZlIHVwZGF0ZWQgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCB0byB1c2UgYHNlZzZfZ2V0X3NyaGAgYW5kIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzYCBkaXJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBzdHJlYW1saW5lIHRoZSByZXRyaWV2YWwgb2YgdGhlIFNSSCBpbmZvcm1hdGlvbi4gVGhlIHByZXZpb3VzIG1ldGhvZCBvZiBzZWFyY2hpbmcgZm9yIHRoZSBTUkggdXNpbmcgYGlwdjZfZmluZF9oZHJgIHNlZW1zIHRvIGhhdmUgYmVlbiByZW1vdmVkLCB3aGljaCBwcm9iYWJseSBtZWFucyB0aGV5IGFyZSBvcHRpbWl6aW5nIGl0LiBUaGV5IGFsc28gYWRkZWQgYSBjaGVjayBmb3IgYW4gZXhpc3RpbmcgU1JILlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBmdW5jdGlvbi4gVGhpcyBpcyBhIEJQRiBoZWxwZXIgZm9yIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW1zLiBJJ20gdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGRpZmZlcmVudCBgY2FzZWAgc3RhdGVtZW50cyBoZXJlLCBzcGVjaWZpY2FsbHkgdGhlIGFkanVzdG1lbnRzIGJlaW5nIG1hZGUgdG8gdGhlIGBza2JgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBTRUc2IGFjdGlvbnMuIEl0IHNlZW1zIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBTUkggc3RhdGUgaXMgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgcG90ZW50aWFsbHkgcHVsbGluZyBoZWFkZXJzIG9yIGVuY2Fwc3VsYXRpbmcgcGFja2V0cy4gVGhlIGFkZGl0aW9uIG9mIGBwc2tiX21heV9wdWxsYCBpbnN0ZWFkIG9mIGBwc2tiX3B1bGxgIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLCBhbmQgbWFrZXMgc3VyZSB0aGUgcHVsbCBvcGVyYXRpb24gZG9lc24ndCBjYXVzZSBhIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9uLiBJdCBtYWtlcyBzdXJlIHRoYXQgcHVsbGluZyBhIGhlYWRlciBkb2Vzbid0IGdvIGJleW9uZCB0aGUgcGFja2V0J3MgY3VycmVudCBkYXRhIGJvdW5kYXJpZXMuIFRoZW4sIHRoZSBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGdldHMgY2FsbGVkIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgY29ycmVjdC5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgYGx3dF9zZWc2bG9jYWxgIGlzIGFjdHVhbGx5IGV4ZWN1dGVkLiBMZXQgbWUgc2VhcmNoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgY29kZWJhc2UgZm9yIHRoZSBgc2VnNl9sb2NhbF9gIHByZWZpeCBvciB0aGF0IGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHR5cGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNoYW5nZXMgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBsb2NhbCBzZWdtZW50IHJvdXRpbmcgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NTUuNDgyNzYyMTIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3NTM1ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q9MTg9ZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBmb290bm90ZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM1LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLStcXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3Q6MTM2OnwgYGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgYCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgbHd0X3NlZzZsb2NhbGBgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHxcXG5Eb2N1bWVudGF0aW9uL2JwZi9saWJicGYvcHJvZ3JhbV90eXBlcy5yc3QtMTM3LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLStcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MjU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBsd3RfeG1pdCxcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTI2LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6Mjc6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGx3dF9zZWc2bG9jYWwsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yOC1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDYyPWVudW0gYnBmX3Byb2dfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA4MS1cXHRCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwODI6XFx0QlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgzLVxcdEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9OTA3OT1zdGF0aWMgaW50IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05MTE0LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfWE1JVDpcXG5rZXJuZWwvYnBmL2J0Zi5jOjkxMTU6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxua2VybmVsL2JwZi9idGYuYy05MTE2LVxcdFxcdHJldHVybiBCVEZfS0ZVTkNfSE9PS19MV1Q7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yODQzPXN0YXRpYyBib29sIGlzX25ldF9hZG1pbl9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI4NTEtXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI4NTI6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjg1My1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfU0tCOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ4MTk9c3RhdGljIGJvb2wgbWF5X2FjY2Vzc19kaXJlY3RfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODI4LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfT1VUOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0ODI5OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00ODMwLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg4MT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTItXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTQtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTkxNT1zdGF0aWMgaW50IHBhcnNlX25sYV9icGYoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTkzNi1cXHRmZCA9IG5sYV9nZXRfdTMyKHRiW1NFRzZfTE9DQUxfQlBGX1BST0ddKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTkzNzpcXHRwID0gYnBmX3Byb2dfZ2V0X3R5cGUoZmQsIEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE5MzgtXFx0aWYgKElTX0VSUihwKSkge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwNjI9ZW51bSBicGZfcHJvZ190eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDgxLVxcdEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA4MjpcXHRCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwODMtXFx0QlBGX1BST0dfVFlQRV9MSVJDX01PREUyLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0yMDI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcm9nX3R5cGVfbmFtZVtdID0ge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMjEtXFx0W0JQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUl1cXHQ9IFxcXCJjZ3JvdXBfc29ja19hZGRyXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjIyMjpcXHRbQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMXVxcdFxcdD0gXFxcImx3dF9zZWc2bG9jYWxcXFwiLFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIzLVxcdFtCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTJdXFx0XFx0PSBcXFwibGlyY19tb2RlMlxcXCIsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTcxNTc9c3RhdGljIHN0cnVjdCB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTcxNzAtXFx0eyBCUEZfUFJPR19UWVBFX0xXVF9PVVQsICAgICAgICAgICAgICAgICBcXFwiX19za19idWZmXFxcIiB9LFxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzE3MTpcXHR7IEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgICAgICAgICAgIFxcXCJfX3NrX2J1ZmZcXFwiIH0sXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03MTcyLVxcdHsgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgICAgICAgICAgICAgICAgXFxcIl9fc2tfYnVmZlxcXCIgfSxcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTEwMz1zdGF0aWMgaW50IHByb2JlX3Byb2dfbG9hZChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTc4LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9SQVdfVFJBQ0VQT0lOVF9XUklUQUJMRTpcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzoxNzk6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUw6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMTgwLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19SRVVTRVBPUlQ6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYz0yMjU9dm9pZCB0ZXN0X3ZlcmlmX3NjYWxlX3NlZzZfbG9vcCgpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3ZlcmlmX3NjYWxlLmMtMjI2LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYzoyMjc6XFx0c2NhbGVfdGVzdChcXFwidGVzdF9zZWc2X2xvb3AuYnBmLm9cXFwiLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIGZhbHNlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfdmVyaWZfc2NhbGUuYy0yMjgtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jPTIwPXN0YXRpYyBzdHJ1Y3Qgc2VjX25hbWVfdGVzdCB0ZXN0c1tdID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQyLVxcdHtcXFwibHd0X3htaXRcXFwiLCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgMH0sIHstRUlOVkFMLCAwfSB9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NlY3Rpb25fbmFtZXMuYzo0MzpcXHR7XFxcImx3dF9zZWc2bG9jYWxcXFwiLCB7MCwgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCAwfSwgey1FSU5WQUwsIDB9IH0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jLTQ0LVxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjA6NTcuMjgwMzA3Njc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MzI1OTQ4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIFByb2dyYW0gVHlwZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUxgIHByb2dyYW0gdHlwZS4gUmlnaHQsIHRoYXQncyB0aGUgb25lIHVzZWQgc3BlY2lmaWNhbGx5IGZvciBTUnY2IChzZWc2KSBsb2NhbCBhY3Rpb24gcHJvY2Vzc2luZywgSSByZW1lbWJlciBpdCdzIHJlbGF0ZWQgdG8gdGhvc2UgbGlnaHR3ZWlnaHQgdHVubmVscywgdXNpbmcgdGhpbmdzIGxpa2UgYFNFRzZfTE9DQUxfQUNUSU9OX0JfUEZgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgSSBjYW4gdGVzdCB0aGlzIHR5cGUgb2YgcHJvZ3JhbS5cblxuSG1tLCBJIGtub3cgYGJwZl9wcm9nX3Rlc3RfcnVuYCBhbmQgaXRzIHJlbGF0ZWQgb3BlcmF0aW9ucywgbGlrZSBgQlBGX1BST0dfUlVOYCwgYXJlIHVzZWQgZm9yIGV4ZWN1dGluZyBMV1QgcHJvZ3JhbXMgYW5kIHBlcmZvcm1pbmcgcm91dGUgbG9va3Vwcy4gSXQgbG9va3MgbGlrZSBpdCBjYW4gYmUgcnVuIHRocm91Z2ggbmV0bGluaywgaXAgcm91dGUgY29tbWFuZHMsIHBhY2tldCByZWNlaXZlLCBhbmQgdGhlIEJQRiB0ZXN0IHJ1biBmZWF0dXJlIGl0c2VsZi5cblxuTXkgbWFpbiBxdWVzdGlvbiBub3cgaXM6ICpjYW4qIGBCUEZfUFJPR19URVNUX1JVTmAgYWN0dWFsbHkgYmUgdXNlZCB0byB0ZXN0IGEgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAgcHJvZ3JhbT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnBmX3Byb2dfdGVzdF9ydW5gIC0gSSdsbCBjaGVjayBgbmV0L2JwZi90ZXN0X3J1bi5jYCBvciB3aGVyZXZlciB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcHJvZ3JhbSB0eXBlcyB0byBzZWUgaWYgaXQncyBjb21wYXRpYmxlIHdpdGggdGhpcyBTUnY2IGxvY2FsIGFjdGlvbiBCUEYgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MjAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDQuMTEyOTA2Nzk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU4MDI1NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDQuNDU4NzE5MTA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODE1Mzc1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gQlBGIFRlc3QgRXhlY3V0aW9uKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgdGVzdCBleGVjdXRpb24gcHJvY2VkdXJlcyByZWxhdGVkIHRvIEJQRi4gSSdtIHRoaW5raW5nLCB3aGVyZSB3b3VsZCB0aGUgcmVsZXZhbnQgZmlsZXMgYmU/ICBMaWtlbHkgY2FuZGlkYXRlcyBqdW1wIHRvIG1pbmQ6IGB0ZXN0X3J1bl9za2JgLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbHVya2luZyB3aXRoaW4gdGhlIGBuZXQvYnBmL2AgZGlyZWN0b3J5LiAgTGV0J3Mgc3RhcnQgYnkgZXhwbG9yaW5nIHRoYXQgYG5ldC9icGYvYCBwYXRoLiBUaGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRlc3RzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0J3MgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDQ2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDYuMjQwMjYwMjE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJuZXQvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJwZl9kdW1teV9zdHJ1Y3Rfb3BzLmNcIixcbiAgICBcInRlc3RfcnVuLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MDYuMjQwMzEzMjk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTMxOTk5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFRlc3RpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9icGYvdGVzdF9ydW4uY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIEJQRiB0ZXN0IGV4ZWN1dGlvbiBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRlc3QgZnJhbWV3b3JrIGlzIHNldCB1cCwgaG93IHRoZSBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBhbmQgcnVuLCBhbmQgd2hhdCBraW5kIG9mIHZlcmlmaWNhdGlvbiBpcyBkb25lIG9uIHRoZSByZXN1bHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gZXhwZWN0aW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBmaWxlIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMgbGlrZSBgYnBmX3Byb2dfbG9hZGAsIGBicGZfYXR0YWNoYCwgYW5kIGFueSBjYWxscyByZWxhdGVkIHRvIHJlc3VsdCBjb21wYXJpc29uIG9yIGxvZ2dpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIG92ZXJhbGwgc3RydWN0dXJlIOKAkyB0aGUgdGVzdCBzZXR1cCwgdGhlIHByb2dyYW0gZXhlY3V0aW9uLCBhbmQgdGhlIHZhbGlkYXRpb24gc3RlcHMuIEknbSBpbnRlcmVzdGVkIGluIGFueSBjbGV2ZXJuZXNzIGhlcmUsIGFueSBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCBvciBpbXByb3ZlZC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMTowOC4zNTM1MTcxNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTM1NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxXVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jPTEwMzU9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY1LVxcdFxcdGJyZWFrO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDY2OlxcdGNhc2UgQlBGX1BST0dfVFlQRV9MV1RfSU46XFxubmV0L2JwZi90ZXN0X3J1bi5jOjEwNjc6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9PVVQ6XFxubmV0L2JwZi90ZXN0X3J1bi5jOjEwNjg6XFx0Y2FzZSBCUEZfUFJPR19UWVBFX0xXVF9YTUlUOlxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDY5LVxcdFxcdGlzX2x3dCA9IHRydWU7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA4Ny1cXHRcXHRpZiAoY3R4LVxcdTAwM2VkYXRhX2VuZCkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDg4OlxcdFxcdFxcdC8qIE5vbi1saW5lYXIgTFdUIHRlc3RfcnVuIGlzIHVuc3VwcG9ydGVkIGZvciBub3cuICovXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEwODktXFx0XFx0XFx0aWYgKGlzX2x3dCkge1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMTItXFxubmV0L2JwZi90ZXN0X3J1bi5jOjEyMTM6XFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MV1RfWE1JVCkge1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjE0LVxcdFxcdGlmICghaXB2Nl9tb2RfZW5hYmxlZCgpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjA4LjQwMTA2MjAzMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODI2MDcxODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgTFdUX1NFRzZMT0NBTCBFeGVjdXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJ3aGVyZSAqZXhhY3RseSogZG9lcyBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYCBnZXQgaXRzIGhvb2tzIGluIHRoZSBrZXJuZWw/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4ZWN1dGlvbiBwYXRoIGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIEkgY2FuJ3QganVzdCBiZSBzYXRpc2ZpZWQgd2l0aCBhIGdlbmVyYWwgZGVzY3JpcHRpb247IEkgd2FudCB0aGUgc3BlY2lmaWMgY2FsbCBzdGFja3MsIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCB0aGUgcHJlY2lzZSBjb250ZXh0cyBpbiB3aGljaCB0aGVzZSBCUEYgcHJvZ3JhbXMgYXJlIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGlzIGRlc2lnbmVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlIGR1cmluZyB0aGUgY29kZSBkZXZlbG9wbWVudCBmb3IgbWUgdG8gb3B0aW1pemUgbXkgb3duIGNvZGUgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MTAuMjI3MTM2MDM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY3MzcyODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx3dF9zZWc2bG9jYWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0PTE4PWRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiB0aGUgZm9vdG5vdGVzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0OjEzNjp8IGBgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMYGAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGx3dF9zZWc2bG9jYWxgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9icGYvbGliYnBmL3Byb2dyYW1fdHlwZXMucnN0LTEzNy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTI1PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfWE1JVCwgbHd0X3htaXQsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0yNi1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjI3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBsd3Rfc2VnNmxvY2FsLFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMjgtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNTE6bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNTIte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1NzI9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBsd3RfeG1pdF9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc2OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGx3dF9zZWc2bG9jYWxfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTc3OlxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gbHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc4LVxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IGx3dF9pc192YWxpZF9hY2Nlc3MsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTU4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTU4Mjpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIGx3dF9zZWc2bG9jYWxfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1ODMtfTtcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdD0yNz1QUk9HIENPTU1BTkRTXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QtNDgtfCAgICAgKipjZ3JvdXAvc29jayoqIHwgKipjZ3JvdXAvZGV2KiogfCAqKmx3dF9pbioqIHwgKipsd3Rfb3V0KiogfCAqKmx3dF94bWl0KiogfFxcbnRvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdDo0OTp8ICAgICAqKmx3dF9zZWc2bG9jYWwqKiB8ICoqc29ja29wcyoqIHwgKipza19za2IqKiB8ICoqc2tfbXNnKiogfCAqKmxpcmNfbW9kZTIqKiB8XFxudG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0LTUwLXwgICAgICoqY2dyb3VwL2JpbmQ0KiogfCAqKmNncm91cC9iaW5kNioqIHwgKipjZ3JvdXAvcG9zdF9iaW5kNCoqIHwgKipjZ3JvdXAvcG9zdF9iaW5kNioqIHxcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2Jhc2gtY29tcGxldGlvbi9icGZ0b29sPTI1Nj1fYnBmdG9vbCgpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbC00OTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZ3JvdXAvZGV2IGx3dF9pbiBsd3Rfb3V0IGx3dF94bWl0IFxcXFxcXG50b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbDo0OTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsd3Rfc2VnNmxvY2FsIHNvY2tvcHMgc2tfc2tiIHNrX21zZyBsaXJjX21vZGUyIFxcXFxcXG50b29scy9icGYvYnBmdG9vbC9iYXNoLWNvbXBsZXRpb24vYnBmdG9vbC00OTUtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZ3JvdXAvYmluZDQgY2dyb3VwL2JpbmQ2IFxcXFxcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz0yNTQyPXN0YXRpYyBpbnQgZG9faGVscChpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMjU3Ni1cXHRcXHRcXFwiICAgICAgICAgICAgICAgICBjZ3JvdXAvc29jayB8IGNncm91cC9kZXYgfCBsd3RfaW4gfCBsd3Rfb3V0IHwgbHd0X3htaXQgfFxcXFxuXFxcIlxcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYzoyNTc3OlxcdFxcdFxcXCIgICAgICAgICAgICAgICAgIGx3dF9zZWc2bG9jYWwgfCBzb2Nrb3BzIHwgc2tfc2tiIHwgc2tfbXNnIHwgbGlyY19tb2RlMiB8XFxcXG5cXFwiXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTI1NzgtXFx0XFx0XFxcIiAgICAgICAgICAgICAgICAgc2tfcmV1c2Vwb3J0IHwgZmxvd19kaXNzZWN0b3IgfCBjZ3JvdXAvc3lzY3RsIHxcXFxcblxcXCJcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MjAyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvZ190eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjIxLVxcdFtCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFJdXFx0PSBcXFwiY2dyb3VwX3NvY2tfYWRkclxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMjI6XFx0W0JQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTF1cXHRcXHQ9IFxcXCJsd3Rfc2VnNmxvY2FsXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIyMy1cXHRbQlBGX1BST0dfVFlQRV9MSVJDX01PREUyXVxcdFxcdD0gXFxcImxpcmNfbW9kZTJcXFwiLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xMDEyMD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9zZWNfZGVmIHNlY3Rpb25fZGVmc1tdID0ge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDE5NC1cXHRTRUNfREVGKFxcXCJsd3RfeG1pdFxcXCIsXFx0XFx0TFdUX1hNSVQsIDAsIFNFQ19OT05FKSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwMTk1OlxcdFNFQ19ERUYoXFxcImx3dF9zZWc2bG9jYWxcXFwiLFxcdExXVF9TRUc2TE9DQUwsIDAsIFNFQ19OT05FKSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwMTk2LVxcdFNFQ19ERUYoXFxcInNvY2tvcHNcXFwiLFxcdFxcdFNPQ0tfT1BTLCBCUEZfQ0dST1VQX1NPQ0tfT1BTLCBTRUNfQVRUQUNIQUJMRV9PUFQpLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jLTMyLSNkZWZpbmUgTkVUTlNfQkFTRSBcXFwibHd0LXNlZzZsb2NhbC1cXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jOjMzOiNkZWZpbmUgQlBGX0ZJTEUgXFxcInRlc3RfbHd0X3NlZzZsb2NhbC5icGYub1xcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmMtMzQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM9NDM9c3RhdGljIGludCBzZXR1cCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jLTExMy0jZGVmaW5lIENMSUVOVF9QT1JUIDIxMjFcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sd3Rfc2VnNmxvY2FsLmM6MTE0OnZvaWQgdGVzdF9sd3Rfc2VnNmxvY2FsKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHd0X3NlZzZsb2NhbC5jLTExNS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBzZWNfbmFtZV90ZXN0IHRlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDItXFx0e1xcXCJsd3RfeG1pdFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9YTUlULCAwfSwgey1FSU5WQUwsIDB9IH0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2VjdGlvbl9uYW1lcy5jOjQzOlxcdHtcXFwibHd0X3NlZzZsb2NhbFxcXCIsIHswLCBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwsIDB9LCB7LUVJTlZBTCwgMH0gfSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZWN0aW9uX25hbWVzLmMtNDQtXFx0e1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmM9MTgxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFkZF90bHYoc3RydWN0IF9fc2tfYnVmZiAqc2tiLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2VnNl9sb29wLmMtMjI2LS8vIGFuZCBhcHBseSBFbmQuWCBhY3Rpb24gdG8gZmM0Mjo6MVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlZzZfbG9vcC5jOjIyNzpTRUMoXFxcImx3dF9zZWc2bG9jYWxcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NlZzZfbG9vcC5jLTIyOC1pbnQgX19hZGRfZWdyX3goc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxMS45OTQ1MTQ1NjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1NjI1MzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIHRoaW5raW5nIGFib3V0IHdpdGggdGhhdCBgc2VnNl9sb2NhbC5jYCBtb2R1bGUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEJQRjpcblxuKipEaXZpbmcgaW50byBTRUc2IGFuZCBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBCUEYgcHJvZ3JhbSB0eXBlIGlzIGF0dGFjaGVkIGFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgbG9jYWwgcG9saWNpZXMuIE15IHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMgd2l0aCB0aGlzIGxldmVsIG9mIGtlcm5lbCBpbnRlcmFjdGlvbiwgaXMgdGhlIHNvdXJjZSBjb2RlOiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBkaWcgaW4gdG8gZmluZCB0aGUgaG9va3MgYW5kIGV4ZWN1dGlvbiBwb2ludHMuIEl0J3MgYSBrZXkgZmlsZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgU1J2NiBsb2NhbCBwb2xpY3kgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaW52b2x2ZSBvciByZWxhdGUgdG8gYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGAuIFRpbWUgdG8gcm9sbCB1cCB0aGUgc2xlZXZlcyBhbmQgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxNC41NTA3NzA0NzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg5NTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDMwPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDQ3LVxcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ0ODpcXHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDQ5LVxcdCAqL1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NTctXFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDU4OlxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXFx1MDAzZWJwZi5wcm9nLCBza2IpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDU5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxNC42NjQ2NzExMjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM4ODI1NDQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gc2VnNl9sb2NhbC5jOiBUaGUgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBQdXp6bGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfYnBmYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHdoZXJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdtIGJldHRpbmcgaXQncyB0aGUgZXhpdCBwb2ludCBhZnRlciB0aGUgQlBGIHByb2Nlc3Npbmcgb2YgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGxvY2FsbHkuXG5cblNvLCBsZXQncyByZWZyZXNoOiBhbiBJUHY2IHBhY2tldCB3aXRoIGEgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBjb21lcyBpbi4gSXQncyBiZWVuIHByb2Nlc3NlZCBieSBhIHByZWNlZGluZyBCUEYgcHJvZ3JhbSAobGlrZWx5IGluIHRoZSBpbnB1dCBwYXRoIHNvbWV3aGVyZSwgdGhvdWdoIEknbGwgaGF2ZSB0byB0cmFjZSB0aGF0IGFnYWluKSwgYW5kIG5vdyB3ZSdyZSBoZXJlLiBgaW5wdXRfYWN0aW9uX2VuZF9icGZgICpzaG91bGQqIGJlIHRoZSBlbmQgb2YgdGhhdCBsb2NhbCBwcm9jZXNzaW5nLiBNeSBndXQgc2F5cyB0aGlzIGlzIHdoZXJlIHdlJ3JlIGdvaW5nIHRvIGNsZWFuIHVwIGFueSBzdGF0ZSwgZGV0ZXJtaW5lIHdoZXJlIHRvIGZvcndhcmQgdGhlIHBhY2tldCBuZXh0IChsaWtlbHkgYmFzZWQgb24gdGhlIG91dGNvbWUgb2YgdGhlIEJQRiwgYnV0IEkgbmVlZCB0byBjb25maXJtKS5cblxuSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRvIHRoZSBza2IgKHNvY2tldCBidWZmZXIpIGFuZCB0aGUgZmxvdyBtZXRhZGF0YS4gRG9lcyBpdCBtb2RpZnkgYW55IGZpZWxkcyB3aXRoaW4gdGhlIHNrYj8gSXMgaXQgc2V0dGluZyB1cCB0aGUgbmV4dCBob3A/IERvZXMgaXQgY2FsbCBpbnRvIHNvbWUgb3RoZXIgZnVuY3Rpb24gcmVsYXRlZCB0byBmb3J3YXJkaW5nLCBvciBtYXliZSBhIHJvdXRpbmcgbG9va3VwPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gYHNrYi1cdTAwM2VkZXZgLCBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCwgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNSSCBpdHNlbGYsIGFuZCBjcml0aWNhbGx5LCBob3cgdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGFsb25nLiBJZiBpdCdzIEJQRiBiYXNlZCwgdGhlbiBJJ20gbG9va2luZyBmb3IgdGhlIG91dGNvbWUgb2YgdGhhdCBCUEYgcHJvY2Vzc2luZy4gV2hhdCdzIHBhc3NlZCB0byB0aGUgQlBGIHByb2dyYW0sIHdoYXQncyByZXR1cm5lZCwgYW5kIHdoYXQncyBkb25lIHdpdGggdGhhdCByZXN1bHQuIERvZXMgaXQgZGVjaWRlIHRoZSBmb3J3YXJkaW5nIG9yIGRvZXMgdGhpcyBjYWxsIHRoZSBmb3J3YXJkaW5nIHBhdGggd2l0aCB0aGF0IHJlc3VsdD9cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gRG9lcyBpdCBoYW5kbGUgQlBGIGVycm9ycyBncmFjZWZ1bGx5PyBXaGF0IGhhcHBlbnMgaWYgdGhlcmUncyBhIHByb2JsZW0gd2l0aCB0aGUgU1JIIGl0c2VsZj8gSXMgaXQgZHJvcHBlZCwgcmVyb3V0ZWQsIG9yIGxvZ2dlZD8gSSBleHBlY3QgZXJyb3IgY29kZXMgdG8gYmUgaGFuZGxlZCBlbGVnYW50bHkuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBTUnY2IHN0YWNrLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZSwgaW50ZXJmYWNlIHNlbGVjdGlvbiwgYW5kIG1heWJlIGV2ZW4gc29tZSBhY2NvdW50aW5nIG9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGF0IHRoaXMgc3RhZ2UuXG5cblVsdGltYXRlbHksIEkgZXhwZWN0IHRvIHNlZSBhIGNhcmVmdWxseSBvcmNoZXN0cmF0ZWQgc2VxdWVuY2UgdGhhdCBlbnN1cmVzIHRoYXQgdHJhZmZpYyBhcnJpdmVzIHdoZXJlIGl0IG5lZWRzIHRvIGJlIHdpdGggYWxsIHRoZSBTUnY2IG1hZ2ljIGludGFjdCBhbmQgdGhhdCB0aGUgcGFja2V0IGlzIHRoZW4gZm9yd2FyZGVkIG9yIHByb2Nlc3NlZCBsb2NhbGx5LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxOTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxOS4wNTI5MzEwNzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDMwOlxcdHN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNDMxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4xNDMyOlxcdHtcXG4xNDMzOlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZTtcXG4xNDM0OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbjE0MzU6XFx0XFx0aW50IHJldDtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0c3JoID0gZ2V0X2FuZF92YWxpZGF0ZV9zcmgoc2tiKTtcXG4xNDM4OlxcdFxcdGlmICghc3JoKSB7XFxuMTQzOTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDQwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0NDE6XFx0XFx0fVxcbjE0NDI6XFx0XFx0YWR2YW5jZV9uZXh0c2VnKHNyaCwgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyKTtcXG4xNDQzOlxcdFxcbjE0NDQ6XFx0XFx0LyogVGhlIGFjY2VzcyB0byB0aGUgcGVyLUNQVSBidWZmZXIgc3JoX3N0YXRlIGlzIHByb3RlY3RlZCBieSBydW5uaW5nXFxuMTQ0NTpcXHRcXHQgKiBhbHdheXMgaW4gc29mdGlycSBjb250ZXh0ICh3aXRoIGRpc2FibGVkIEJIKS4gT24gUFJFRU1QVF9SVCB0aGVcXG4xNDQ2OlxcdFxcdCAqIHJlcXVpcmVkIGxvY2tpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBsb2NhbF9sb2NrX25lc3RlZF9iaCgpXFxuMTQ0NzpcXHRcXHQgKiBzdGF0ZW1lbnQuIEl0IGlzIGFsc28gYWNjZXNzZWQgYnkgdGhlIGJwZl9sd3Rfc2VnNl8qIGhlbHBlcnMgdmlhXFxuMTQ0ODpcXHRcXHQgKiBicGZfcHJvZ19ydW5fc2F2ZV9jYigpLlxcbjE0NDk6XFx0XFx0ICovXFxuMTQ1MDpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDUxOlxcdFxcdHNyaF9zdGF0ZSA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuMTQ1MjpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4xNDUzOlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlaGRybGVuID0gc3JoLVxcdTAwM2VoZHJsZW4gXFx1MDAzY1xcdTAwM2MgMztcXG4xNDU0OlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQ1NzpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuMTQ1ODpcXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fc2F2ZV9jYihzbHd0LVxcdTAwM2VicGYucHJvZywgc2tiKTtcXG4xNDU5OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE0NjA6XFx0XFxuMTQ2MTpcXHRcXHRzd2l0Y2ggKHJldCkge1xcbjE0NjI6XFx0XFx0Y2FzZSBCUEZfT0s6XFxuMTQ2MzpcXHRcXHRjYXNlIEJQRl9SRURJUkVDVDpcXG4xNDY0OlxcdFxcdFxcdGJyZWFrO1xcbjE0NjU6XFx0XFx0Y2FzZSBCUEZfRFJPUDpcXG4xNDY2OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNDY3OlxcdFxcdGRlZmF1bHQ6XFxuMTQ2ODpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImJwZi1zZWc2bG9jYWw6IElsbGVnYWwgcmV0dXJuIHZhbHVlICV1XFxcXG5cXFwiLCByZXQpO1xcbjE0Njk6XFx0XFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToxOS4wNTMxODc2MThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA1NDA1NTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBhbmQgRnV6emluZyBhIEJQRi9JUHY2IFNlZzYgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGZyYW5rbHksIGl0J3MgcHJldHR5IHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgYW5kIEJQRiBzdWJzeXN0ZW0gc3R1ZmYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gaG93IGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgaXMgY2FsbGVkLiBJdCdzIHVzZWQgaW4gdGhlIElQdjYgc2VnNiBsb2NhbCBhY3Rpb24gaGFuZGxlciwgc3BlY2lmaWNhbGx5IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfQlBGYC4gVGhpcyBtZWFucyBJUHY2IHJvdXRlcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZXNlIHNlZzZsb2NhbCBhY3Rpb25zIHVzaW5nIHRoZSBzdGFuZGFyZCBgcnRuZXRsaW5rYCBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgUlRNX05FV1JPVVRFYCB3aXRoIGBSVEFfRU5DQVBgIHNldCBmb3IgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CUEZgLiBXaGVuIElQdjYgcGFja2V0cyBhcnJpdmUsIGZvciBleGFtcGxlIGZyb20gYSBgdHVuL3RhcGAsIGB2ZXRoYCwgb3IgbG9vcGJhY2sgaW50ZXJmYWNlLCBgc2VnNl9sb2NhbF9pbnB1dGAgZXhlY3V0ZXMgYGlucHV0X2FjdGlvbl9lbmRfYnBmYC4gVGhpcyB0aGVuIHJ1bnMgdGhlIEJQRiBwcm9ncmFtLCB3aGljaCBpdHNlbGYgY2FsbHMgdGhlIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiBgc3l6a2FsbGVyYCBldmVuIHJlYWNoIHRoaXM/IExldCdzIGJyZWFrIGl0IGRvd246IEl0J3MgZGVmaW5pdGVseSBwb3NzaWJsZSB0byBsb2FkIEJQRiBwcm9ncmFtcyAoYEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTGApLiBJdCBjYW4gYWxzbyBzZXQgdXAgSVB2NiByb3V0ZXMgd2l0aCBzZWc2IGVuY2Fwc3VsYXRpb24gYW5kIGxvY2FsIGFjdGlvbnMgdmlhIE5ldGxpbmsgKGBSVE1fTkVXUk9VVEVgKS4gTW9yZW92ZXIsIGBzeXprYWxsZXJgIGNhbiBzZW5kIElQdjYgcGFja2V0cyB3aXRoIFNSSCB2aWEgYHR1bi90YXBgIG9yIHJhdyBzb2NrZXRzLiBUaGUgbW9kaWZpZWQgY29kZSBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgdGhlIHN0YXRpYyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFuZCB0aGUgQlBGIGhlbHBlciBgQlBGX0ZVTkNfbHd0X3NlZzZfYWN0aW9uYCBpbiBgYnBmX2x3dF9zZWc2X2FjdGlvbmAuXG5cbkkgbmVlZCB0byBzY3J1dGluaXplIHdoYXQgd2FzIGFjdHVhbGx5IGNoYW5nZWQgaW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLiBJbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCB0aGUgb2xkIGNvZGUgY2hlY2tlZCBmb3IgdGhlIFNSSCBoZWFkZXIsIHdoZXJlYXMgdGhlIHVwZGF0ZWQgY29kZSBjYWxscyBgc2VnNl9nZXRfc3JoKHNrYiwgMClgIGFuZCBjb21wdXRlcyB0aGUgZGF0YSBwb2ludGVycyB1c2luZyBgYnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpYC4gVGhlcmUncyBub3cgYW4gZWFybHkgcmV0dXJuIGlmIGBzcmhgIGlzIE5VTEwgYW5kIGBzcmhfc3RhdGUtXHUwMDNldmFsaWRgIGlzbid0IHJlc2V0IHRvIGBmYWxzZWAuIEFsc28sIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGlzIGNhbGxlZCBldmVuIGlmIGBzcmhgIGlzIE5VTEwuIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfRFQ2YCB1c2VzIGBwc2tiX21heV9wdWxsYCBpbnN0ZWFkIG9mIGBwc2tiX3B1bGxgIHRvIGhhbmRsZSB0aGUgSVB2NiBoZWFkZXIgc2l6ZSBiZWZvcmUgcHVsbGluZyB0aGUgcGFja2V0LiBJbiBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCBhbmQgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUGAsIHRoZSBjb2RlIG5vdyBjaGVja3MgaWYgdGhlIGxlbmd0aCBvZiBgc2tiYCBpcyBkaWZmZXJlbnQgYmVmb3JlIGNhbGxpbmcgYGJwZl91cGRhdGVfc3JoX3N0YXRlYC5cblxuQ29uc2lkZXJpbmcgdGhlc2UgbW9kaWZpY2F0aW9ucywgdGhlIHBhY2tldCBwYXJzaW5nLCBza2IgcHVsbC9wb2ludGVyIHJlY2FsY3VsYXRpb25zLCBzdGF0ZSB1cGRhdGVzLCBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBjb25kaXRpb25zIGZvciBpbnZva2luZyBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGFyZSBhbGwgaW4gcGxheS4gSXQncyBub3cgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRoZXNlIG5ldyBjaGFuZ2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCBhbmQgdG90YWxseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuV2Ugc2hvdWxkIGNoZWNrIHNvbWUgcmVxdWlyZWQgY29uZmlnczogYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCAod2hpY2ggaW5kaXJlY3RseSBlbmFibGVzIGBJUFY2X1NFRzZfQlBGYCksIGBCUEZfU1lTQ0FMTGAsIGFuZCBgTkVUYC4gYElQVjZfU0VHNl9MV1RVTk5FTGAgZGVwZW5kcyBvbiBgSVBWNmAsIGBMV1RVTk5FTGAsIGBEU1RfQ0FDSEVgLCBhbmQgYElQVjZfTVVMVElQTEVfVEFCTEVTYC4gYElQVjZfU0VHNl9CUEZgIGlzIGEgZGVmYXVsdCBib29sIGlmIGBJUFY2X1NFRzZfTFdUVU5ORUxgIGlzIHNldCwgYW5kIGl0IGFsc28gcmVxdWlyZXMgYElQVjZgIGJlIHNldCB0byBcInlcIi4gQW5kLCBvZiBjb3Vyc2UsIGBCUEZfU1lTQ0FMTGAgd2lsbCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHN5c2NhbGwgYWNjZXNzLiBMZXQncyBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBzZXQgaW4gdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjI2LjEwNzI0NzQwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNTY5NTg3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMToyOC4zNDI5NTI2M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjM1NDU4MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEknbSB2ZXJpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGlzIGNoYW5nZSwgc3RhcnRpbmcgd2l0aCBgRm9jdXNTeW1ib2xzYC4gVGhlIGNvcmUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFwcGVhciB0byBiZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAsIHdoaWNoIEkga25vdyBpcyBhIEJQRiBoZWxwZXIsIGFuZCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCBhIHN0YXRpYyBmdW5jdGlvbiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpcyBpbmxpbmVkIG9yIHJlbWFpbnMgYSB2aXNpYmxlIHN5bWJvbC4gIEknbGwgYWxzbyBrZWVwIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgaW4gbWluZCwgbG9jYXRlZCBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgYW5kIHJlbGF0ZWQgZnVuY3Rpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSAqZXhhY3QqIG5hbWVzIG9mIHRoZXNlIGZvY3VzIHN5bWJvbHMsIGVzcGVjaWFsbHkgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIOKAkyBpdCBjb3VsZCBiZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAsIGBfX19icGZfbHd0X3NlZzZfYWN0aW9uYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEknbGwgcmVmZXIgdG8gYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgdGhpcywgYW5kIGNvbmZpcm0gdGhhdCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGFuZCBgc2VnNl9sb2NhbF9pbnB1dGAgYWxzbyB3YXJyYW50IHNjcnV0aW55LlxuXG5Ob3csIEknbSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBzeW1ib2xzIHdpdGggdGhlIGZpbGVzIGludm9sdmVkLCBwcmltYXJpbHkgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgYW5kIGBuZXQvY29yZS9maWx0ZXIuY2AsIGNvbmZpcm1pbmcgdGhhdCBgYnBmX2x3dF9zZWc2X2FjdGlvbmAsIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGFyZSBpbmRlZWQgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIHRoaXMgY2hhbmdlLlxuXG5JJ20gZG91YmxlLWNoZWNraW5nIHRoZSBleGFjdCBuYW1lcyBmb3IgdGhlIGZ1bmN0aW9ucyBhZ2FpbiwgZW5zdXJpbmcgSSBoYXZlbid0IG1pc3NlZCBhbnkgdmFyaWF0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgbW9kaWZpZWQgc3ltYm9scyBpbiB0aGUgZGlmZi4gIEl0IGxvb2tzIGxpa2UgaXQgb25seSB0b3VjaGVzIGBuZXQvY29yZS9maWx0ZXIuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBhbmQgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQuICBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYElQVjZfU0VHNl9CUEZgLCBgQlBGX1NZU0NBTExgLCBhbmQgYElQVjZgIGFyZSB0aGUgb25lcyB0byBjb25zaWRlci5cblxuRmluYWxseSwgSSdtIGNvbnN0cnVjdGluZyB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUsIGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIFNSdjYgQlBGIGhlbHBlciBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIHRoZSBpbnRlcm5hbCBoZWxwZXIgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBhbHRlcnMgYHNrYmAgbWFuaXB1bGF0aW9uLCBTUkggaGVhZGVyIHBhcnNpbmcvdXBkYXRpbmcsIGFuZCBjcnVjaWFsIGRhdGEgcG9pbnRlciBjYWxjdWxhdGlvbnMuIEl0J3MgYWNjZXNzaWJsZSB2aWEgQlBGIGFuZCBJUHY2IHNlZzYgcm91dGluZyB3aGljaCBtZWFucyB0aGVyZSBpcyBhIGxhcmdlIGF0dGFjayBzdXJmYWNlLiBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbXCJicGZfbHd0X3NlZzZfYWN0aW9uXCIsIFwiYnBmX3VwZGF0ZV9zcmhfc3RhdGVcIiwgXCJpbnB1dF9hY3Rpb25fZW5kX2JwZlwiXWAsIGFuZCBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgW1wiSVBWNlwiLCBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLCBcIklQVjZfU0VHNl9CUEZcIiwgXCJCUEZfU1lTQ0FMTFwiXWAuXG5cbkknbSBwZXJmb3JtaW5nIGEgZmluYWwsIGNyaXRpY2FsIHNhbml0eSBjaGVjayBvbiBhbGwgYXNwZWN0cyBvZiB0aGUgYW5hbHlzaXMgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHJlc3VsdHMuIFRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NjYsIk91dHB1dFRva2VucyI6MjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjM0LjU3ODQxNDA4M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTgwMzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJJUFY2X1NFRzZfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9sd3Rfc2VnNl9hY3Rpb25cIixcbiAgICBcImJwZl91cGRhdGVfc3JoX3N0YXRlXCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2JwZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUnY2IEJQRiBoZWxwZXIgYGJwZl9sd3Rfc2VnNl9hY3Rpb25gIGFuZCBpbnRlcm5hbCBzdGF0ZSB1cGRhdGUgZnVuY3Rpb24gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpbiBuZXQvY29yZS9maWx0ZXIuYy4gSXQgY2hhbmdlcyBob3cgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgaXMgcmV0cmlldmVkIGFuZCB2YWxpZGF0ZWQsIGFsdGVycyBza2IgcHVsbGluZy9wb2ludGVyIHJlY2FsY3VsYXRpb25zIG9uIGRlY2Fwc3VsYXRpb24gYWN0aW9ucyAoU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNiksIGFuZCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaXMgaW52b2tlZCBhZnRlciBlbmNhcHN1bGF0aW9uIGFjdGlvbnMuIFRoaXMgbG9naWMgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBCUEZfUFJPR19UWVBFX0xXVF9TRUc2TE9DQUwgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gSVB2NiBzZWc2IHJvdXRlcyBpbiBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbHd0X3NlZzZfYWN0aW9uXCIsXG4gICAgXCJicGZfdXBkYXRlX3NyaF9zdGF0ZVwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9icGZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1J2NiBCUEYgaGVscGVyIGBicGZfbHd0X3NlZzZfYWN0aW9uYCBhbmQgaW50ZXJuYWwgc3RhdGUgdXBkYXRlIGZ1bmN0aW9uIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIEl0IGNoYW5nZXMgaG93IHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIGlzIHJldHJpZXZlZCBhbmQgdmFsaWRhdGVkLCBhbHRlcnMgc2tiIHB1bGxpbmcvcG9pbnRlciByZWNhbGN1bGF0aW9ucyBvbiBkZWNhcHN1bGF0aW9uIGFjdGlvbnMgKFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDYpLCBhbmQgbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgIGlzIGludm9rZWQgYWZ0ZXIgZW5jYXBzdWxhdGlvbiBhY3Rpb25zLiBUaGlzIGxvZ2ljIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMIHByb2dyYW1zIGF0dGFjaGVkIHRvIElQdjYgc2VnNiByb3V0ZXMgaW4gc3RhbmRhcmQgbmV0d29ya2luZyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MzQuNjkwMjI3NzdaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzI1NDMwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6MzQuNjkwODcyMTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTcyNDc4MDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgY2FzdGluZyBvZiBvZmZzZXRzIGludG8gc2tiLVxcdTAwM2VkYXRhIHdpdGggc2VnNl9nZXRfc3JoKCkgYW5kIHBza2JfbWF5X3B1bGwgY2hlY2tzIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBsaW5lYXIgaGVhZGVyIHNhZmVseS5cXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cXG4tIExvY2FsIHZhcmlhYmxlcyBzdWNoIGFzIGBvbGRfbGVuYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBgc2tiLVxcdTAwM2VsZW5gIHByaW9yIHRvIHJlYWRpbmcuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZGRyZXNzIGJ1ZmZlciBib3VuZHMsIHBvaW50ZXIgcmVjb21wdXRhdGlvbiwgYW5kIGxpbmVhciBoZWFkZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYyBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyY2FmZjY1NzNkMTA5NmZkYmRmMGRkODdmMDkyNzlhZDRjZjEwZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjIwOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggODUxMzE2N2E4NThhOC4uYjAzN2Q3MGU1ZmU2NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTcwMTcsMTUgKzcwMTcsMTYgQEAgc3RhdGljIHZvaWQgYnBmX3VwZGF0ZV9zcmhfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxuIFx0XHR0aGlzX2NwdV9wdHIoXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XG4tXHRpbnQgc3Job2ZmID0gMDtcbitcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xuIFxuLVx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZzcmhvZmYsIElQUFJPVE9fUk9VVElORywgTlVMTCwgTlVMTCkgXHUwMDNjIDApIHtcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTEw7XG4tXHR9IGVsc2Uge1xuLVx0XHRzcmhfc3RhdGUtXHUwMDNlc3JoID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKShza2ItXHUwMDNlZGF0YSArIHNyaG9mZik7XG4tXHRcdHNyaF9zdGF0ZS1cdTAwM2VoZHJsZW4gPSBzcmhfc3RhdGUtXHUwMDNlc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbi1cdFx0c3JoX3N0YXRlLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbi1cdH1cbitcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xuK1x0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuK1x0c3JoX3N0YXRlLVx1MDAzZXNyaCA9IHNyaDtcbitcdGlmICghc3JoKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcmhfc3RhdGUtXHUwMDNlaGRybGVuID0gc3JoLVx1MDAzZWhkcmxlbiBcdTAwM2NcdTAwM2MgMztcbitcdHNyaF9zdGF0ZS1cdTAwM2V2YWxpZCA9IHRydWU7XG4gfVxuIFxuIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuQEAgLTcwMzMsNiArNzAzNCw3IEBAIEJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuIHtcbiBcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XG4gXHRcdHRoaXNfY3B1X3B0cihcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcbitcdHVuc2lnbmVkIGludCBvbGRfbGVuO1xuIFx0aW50IGhkcm9mZiA9IDA7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTcwNTgsMzIgKzcwNjAsMzcgQEAgQlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4gXG4gXHRcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUJBRE1TRztcbi1cdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBoZHJvZmYpKVxuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdHNyaF9zdGF0ZS1cdTAwM2VzcmggPSBOVUxMO1xuK1x0XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbiBcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcdFx0X19za2JfcHVsbChza2IsIGhkcm9mZik7XG4gXG4gXHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBoZHJvZmYpO1xuIFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuIFxuLVx0XHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XG4gXHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXHRcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcbiBcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuK1x0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkUsXG4gXHRcdFx0XHRcdCAgcGFyYW0sIHBhcmFtX2xlbik7XG4tXHRcdGlmICghZXJyKVxuK1x0XHRpZiAoc2tiLVx1MDAzZWxlbiAhPSBvbGRfbGVuKVxuIFx0XHRcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XG4gXG4gXHRcdHJldHVybiBlcnI7XG4gXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcbiBcdFx0aWYgKHNyaF9zdGF0ZS1cdTAwM2VzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXG4gXHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuK1x0XHRvbGRfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcbiBcdFx0XHRcdFx0ICBwYXJhbSwgcGFyYW1fbGVuKTtcbi1cdFx0aWYgKCFlcnIpXG4rXHRcdGlmIChza2ItXHUwMDNlbGVuICE9IG9sZF9sZW4pXG4gXHRcdFx0YnBmX3VwZGF0ZV9zcmhfc3RhdGUoc2tiKTtcbiBcbiBcdFx0cmV0dXJuIGVycjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjM0LjY5MDg3MzI1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzc1NjcyNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyBQb3RlbnRpYWwgS01TQU4gUmlza3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIE15IHByb2Nlc3Mgd2lsbCBiZSBhcyBmb2xsb3dzOiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmYgYW5kIGZvY3VzIG9uIHRoZSBgYnBmX2x3dF9zZWc2X2FjdGlvbmAgYW5kIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjaGFuZ2VzIGFyb3VuZCB0aG9zZSBhcmVhcy4gVGhlbiwgSSdsbCB6ZXJvIGluIG9uIGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIGxpbmUgNzAxNywgdXNpbmcgdGhhdCBhcyBhIG1hcmtlciB0byBzdGFydCBteSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBhdGNoJ3MgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjE6NDcuNDY2NTQ4OTcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAwMDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG43MDAxOlxcdFxcbjcwMDI6XFx0XFx0bWVtY3B5KHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgZnJvbSwgbGVuKTtcXG43MDAzOlxcdFxcdHJldHVybiAwO1xcbjcwMDQ6XFx0fVxcbjcwMDU6XFx0XFxuNzAwNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcXG43MDA3OlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXMsXFxuNzAwODpcXHRcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbjcwMDk6XFx0XFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG43MDEwOlxcdFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbjcwMTE6XFx0XFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbjcwMTI6XFx0XFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbjcwMTM6XFx0XFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuNzAxNDpcXHR9O1xcbjcwMTU6XFx0XFxuNzAxNjpcXHRzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjcwMTc6XFx0e1xcbjcwMTg6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlID1cXG43MDE5OlxcdFxcdFxcdHRoaXNfY3B1X3B0cihcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcyk7XFxuNzAyMDpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG43MDIxOlxcdFxcbjcwMjI6XFx0XFx0c3JoID0gc2VnNl9nZXRfc3JoKHNrYiwgMCk7XFxuNzAyMzpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzAyNDpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG43MDI1OlxcdFxcdGlmICghc3JoKVxcbjcwMjY6XFx0XFx0XFx0cmV0dXJuO1xcbjcwMjc6XFx0XFxuNzAyODpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZWhkcmxlbiA9IHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDM7XFxuNzAyOTpcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG43MDMwOlxcdH1cXG43MDMxOlxcdFxcbjcwMzI6XFx0QlBGX0NBTExfNChicGZfbHd0X3NlZzZfYWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuNzAzMzpcXHRcXHQgICB1MzIsIGFjdGlvbiwgdm9pZCAqLCBwYXJhbSwgdTMyLCBwYXJhbV9sZW4pXFxuNzAzNDpcXHR7XFxuNzAzNTpcXHRcXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbjcwMzY6XFx0XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG43MDM3OlxcdFxcdHVuc2lnbmVkIGludCBvbGRfbGVuO1xcbjcwMzg6XFx0XFx0aW50IGhkcm9mZiA9IDA7XFxuNzAzOTpcXHRcXHRpbnQgZXJyO1xcbjcwNDA6XFx0XFxuNzA0MTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZzcmhfc3RhdGUtXFx1MDAzZWJoX2xvY2spO1xcbjcwNDI6XFx0XFx0c3dpdGNoIChhY3Rpb24pIHtcXG43MDQzOlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1g6XFxuNzA0NDpcXHRcXHRcXHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDQ1OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDQ2OlxcdFxcdFxcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXFxuNzA0NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDQ4OlxcdFxcdFxcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgKHN0cnVjdCBpbjZfYWRkciAqKXBhcmFtLCAwKTtcXG43MDQ5OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX1Q6XFxuNzA1MDpcXHRcXHRcXHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDUyOlxcdFxcdFxcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKGludCkpXFxuNzA1MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDU0OlxcdFxcdFxcdHJldHVybiBzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgKihpbnQgKilwYXJhbSk7XFxuNzA1NTpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDY6XFxuNzA1NjpcXHRcXHRcXHRpZiAoIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG43MDU3OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDU4OlxcdFxcdFxcdGlmIChwYXJhbV9sZW4gIT0gc2l6ZW9mKGludCkpXFxuNzA1OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MDYwOlxcdFxcbjcwNjE6XFx0XFx0XFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcXHUwMDI2aGRyb2ZmLCBJUFBST1RPX0lQVjYsIE5VTEwsIE5VTEwpIFxcdTAwM2MgMClcXG43MDYyOlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG43MDYzOlxcdFxcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcm9mZiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XFxuNzA2NDpcXHRcXHRcXHRcXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IE5VTEw7XFxuNzA2NTpcXHRcXHRcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNzA2NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA2NzpcXHRcXHRcXHR9XFxuNzA2ODpcXHRcXHRcXHRfX3NrYl9wdWxsKHNrYiwgaGRyb2ZmKTtcXG43MDY5OlxcdFxcbjcwNzA6XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGhkcm9mZik7XFxuNzA3MTpcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG43MDcyOlxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuNzA3MzpcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbjcwNzQ6XFx0XFxuNzA3NTpcXHRcXHRcXHRicGZfdXBkYXRlX3NyaF9zdGF0ZShza2IpO1xcbjcwNzY6XFx0XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAqKGludCAqKXBhcmFtKTtcXG43MDc3OlxcdFxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2OlxcbjcwNzg6XFx0XFx0XFx0aWYgKHNyaF9zdGF0ZS1cXHUwMDNlc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxuNzA3OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuNzA4MDpcXHRcXHRcXHRvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuNzA4MTpcXHRcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcXG43MDgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuNzA4MzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2xkX2xlbilcXG43MDg0OlxcdFxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA4NTpcXHRcXG43MDg2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA4NzpcXHRcXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcXG43MDg4OlxcdFxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjcwODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbjcwOTA6XFx0XFx0XFx0b2xkX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbjcwOTE6XFx0XFx0XFx0ZXJyID0gYnBmX3B1c2hfc2VnNl9lbmNhcChza2IsIEJQRl9MV1RfRU5DQVBfU0VHNixcXG43MDkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuNzA5MzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gIT0gb2xkX2xlbilcXG43MDk0OlxcdFxcdFxcdFxcdGJwZl91cGRhdGVfc3JoX3N0YXRlKHNrYik7XFxuNzA5NTpcXHRcXG43MDk2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzA5NzpcXHRcXHRkZWZhdWx0OlxcbjcwOTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzA5OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjQ3LjQ2NzI2MDE1MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTA0NjMyNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBzZWc2X2JwZl9zcmhfc3RhdGVzYCBhbmQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBtb2R1bGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFNlZzYgYW5kIEJQRi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3RhdGUgbWFuYWdlbWVudCBhc3BlY3QsIGdpdmVuIHRoYXQgaXQncyByaWdodCB0aGVyZSBpbiB0aGUgbmFtZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzdGF0ZXMgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMsIGhvdyB0aGV5J3JlIGNyZWF0ZWQsIHVwZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5LCBjbGVhbmVkIHVwLiBMZXQncyBzZWUgaG93IGVmZmljaWVudGx5IHRoZXNlIHN0YXRlcyBhcmUgdXRpbGl6ZWQuIEknbGwgZm9jdXMgb24gcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgbWlnaHQgYmUgcG9zc2libGUuIEl04oCZcyB0aW1lIHRvIG1ldGhvZGljYWxseSBleGFtaW5lIHRoZSBjb2RlIGFuZCBidWlsZCB1cCB0aGF0IGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBJIG5lZWQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIxOjU2LjU3MTg5NTUzM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4OTQ2Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfYnBmX3NyaF9zdGF0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz02OTczPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk3Ni1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5Nzc6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy02OTc4LVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVxcdTAwM2Vzcmg7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDE2PXN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDE4LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2NvcmUvZmlsdGVyLmM6NzAxOTpcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcwMjAtXFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDMyPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzAzNS1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwMzY6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDM3LVxcdHVuc2lnbmVkIGludCBvbGRfbGVuO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzExMj1CUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzExNS1cXHRzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlICpzcmhfc3RhdGUgPVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTY6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MTE3LVxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoID0gc3JoX3N0YXRlLVxcdTAwM2Vzcmg7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM3Mj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYjZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDAxLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDAyOkRFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDAzLVxcdC5iaF9sb2NrXFx0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQwNj1ib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDA4LVxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0MDk6XFx0XFx0dGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQxMC1cXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCA9IHNyaF9zdGF0ZS1cXHUwMDNlc3JoO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MzA9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NDktXFx0ICovXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTA6XFx0bG9jYWxfbG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0NTE6XFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ1Mi1cXHRzcmhfc3RhdGUtXFx1MDAzZXNyaCA9IHNyaDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDczLVxcdFxcdGdvdG8gZHJvcDtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ3NDpcXHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDc1LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODEtZHJvcDpcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ4MjpcXHRsb2NhbF91bmxvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDgzLVxcdGtmcmVlX3NrYihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMTo1Ni44ODA4NDkxNTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk4ODE1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgU1JIIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBpbiB0aGUgU1JIIChTb3VyY2UgUm91dGluZyBIZWFkZXIpIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gRmlyc3QsIEknbSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBmdW5jdGlvbi5cblxuUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIHVzaW5nIGBpcHY2X2ZpbmRfaGRyYCB0byBsb2NhdGUgdGhlIFNSSC4gSXQgc2VlbXMgYSBiaXQgY2x1bmt5IGJlY2F1c2Ugb2YgdGhlIGBzcmhvZmZgIHZhcmlhYmxlIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbiBlcnJvci4gVGhlIG9sZCBsb2dpYyBlc3NlbnRpYWxseSBjaGVja2VkIGZvciB0aGUgU1JIJ3MgZXhpc3RlbmNlIGFuZCBpZiBpdCB3YXMgZm91bmQsIGRldGVybWluZWQgdGhlIGhlYWRlciBsZW5ndGggYW5kIHNldCB0aGUgYHZhbGlkYCBmbGFnLlxuXG5Ob3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBUaGUgY29kZSBub3cgZGlyZWN0bHkgdXNlcyBgc2VnNl9nZXRfc3JoKHNrYiwgMClgIHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIFNSSC4gVGhlbiwgYGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKWAgaXMgY2FsbGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbGlrZWx5IHVwZGF0ZXMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIHRvIHJlZmxlY3QgdGhlIG5ldyBwb3NpdGlvbiBvciBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRhdGEuIFRoZSBzdWJzZXF1ZW50IGxvZ2ljIGFwcGVhcnMgY2xlYW5lcjsgaWYgYHNlZzZfZ2V0X3NyaGAgcmV0dXJucyBOVUxMLCBpdCBiYWlscyBvdXQuIElmIG5vdCwgdGhlIGhlYWRlciBsZW5ndGggYW5kIHZhbGlkaXR5IGFyZSBjb21wdXRlZCBhcyBiZWZvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzZWc2X2dldF9zcmhgIG1vcmUgY29tcGxldGVseSwgdG8gc2VlIHRoZSBleGFjdCBpbXBsaWNhdGlvbiBvZiB0aGUgY2hhbmdlLiBUaGlzIGNoYW5nZSBsb29rcyBjbGVhbmVyIGFuZCBtb3JlIGRpcmVjdCwgbWFraW5nIGl0IG1vcmUgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjAwLjg2OTAwOTY0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU5MzkzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9nZXRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NlZzYuaD02Nz1leHRlcm4gYm9vbCBzZWc2X3ZhbGlkYXRlX3NyaChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgaW50IGxlbiwgYm9vbCByZWR1Y2VkKTtcXG5pbmNsdWRlL25ldC9zZWc2Lmg6Njg6ZXh0ZXJuIHN0cnVjdCBpcHY2X3NyX2hkciAqc2VnNl9nZXRfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvc2VnNi5oLTY5LWV4dGVybiB2b2lkIHNlZzZfaWNtcF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjowMS4xNDQ5NTgyNTRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc5ODIxNjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlIGBzZWc2X2dldF9zcmhgIGltcGxlbWVudGF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGBzZWc2X2dldF9zcmhgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBgc2VnNl9nZXRfc3JoYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgdG8gZ2V0IHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHdoYXQgaXRzIGNvcmUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIHJldHJpZXZpbmcgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGV4dHJhY3QgU1JIIGluZm9ybWF0aW9uIGZyb20gYSBwYWNrZXQgb3IgZGF0YSBzdHJ1Y3R1cmUsIHBlcmhhcHMgYSBza19idWZmLCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlIGlucHV0IGFyZ3VtZW50cy4gV2hhdCBkb2VzIGl0IHRha2UgaW4/IElzIGl0IGEgcG9pbnRlciB0byB0aGUgcGFja2V0IGl0c2VsZj8gT3IgcGVyaGFwcyBhbiBvZmZzZXQgaW50byBhIHBhY2tldCBidWZmZXI/IE9yIG1heWJlIGV2ZW4gYSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIFNSSCBpdHNlbGY/IEFuZCB3aGF0IHdpbGwgYmUgcmV0dXJuZWQ/IEEgcG9pbnRlciB0byBzb21lIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIFNSSD8gQW4gZXJyb3IgY29kZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gXG5cbk5leHQsIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgaW1wbGVtZW50YXRpb24gb2YgU1JIIHJldHJpZXZhbCwgYXMgSSdtIHVzZWQgdG8gc2VlaW5nLiBUaGlzIG1lYW5zIHZlcmlmeWluZyB0aGUgaGFuZGxpbmcgb2YgdGhlIHZhcmlvdXMgZmllbGRzIHRoYXQgbWFrZSB1cCB0aGUgU1JIOiB0aGUgbmV4dCBoZWFkZXIsIHRoZSBoZWFkZXIgZXh0ZW5zaW9uIGxlbmd0aCwgdGhlIHJvdXRpbmcgdHlwZSwgdGhlIHNlZ21lbnRzIGxlZnQsIHRoZSBzZWdtZW50cywgYW5kIGFueSBvdGhlciByZWxldmFudCBmbGFncyBvciBtZXRhZGF0YS4gSSdsbCBhbHNvIGJlIHdhdGNoaW5nIHRvIHNlZSBob3cgdGhlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgbGlrZSBTUkhzIHRoYXQgYXJlIGZyYWdtZW50ZWQsIG9yIHRydW5jYXRlZC5cblxuSSBhbnRpY2lwYXRlIHRoZSBuZWVkIHRvIGNoZWNrIGZvciBib3VuZGFyeSBjb25kaXRpb25zIC0gaXMgaXQgY29ycmVjdGx5IHZlcmlmeWluZyB0aGF0IHRoZSBTUkggZGF0YSBkb2Vzbid0IGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBwYWNrZXQgYnVmZmVyPyBEb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3Vlcz8gQW5kIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIHdoYXQgaGFwcGVucyBpZiB0aGUgU1JIIGlzIGludmFsaWQgb3IgY29ycnVwdGVkPyBBcmUgdGhlcmUgZ3JhY2VmdWwgZXJyb3IgcmV0dXJucywgbG9nZ2luZywgb3Igb3RoZXIgbWVjaGFuaXNtcyB0byBwcmV2ZW50IGZ1cnRoZXIgaXNzdWVzP1xuXG5JJ2xsIGJlIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgbGluZSBieSBsaW5lLCB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIG9wdGltaXplZCBmb3Igc3BlZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBcmUgdGhlcmUgd2F5cyB0byBpbXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiwgb3IgaXMgdGhpcyBhIGNsZWFuIGFuZCBlZmZpY2llbnQgZGVzaWduP1xuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MDQuOTQzMTc4ODE2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcwMjEwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGlwdjZfc3JfaGRyIFxcXFwqc2VnNl9nZXRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNi5jPTI2PWJvb2wgc2VnNl92YWxpZGF0ZV9zcmgoc3RydWN0IGlwdjZfc3JfaGRyICpzcmgsIGludCBsZW4sIGJvb2wgcmVkdWNlZClcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYy03OC1cXG5uZXQvaXB2Ni9zZWc2LmM6Nzk6c3RydWN0IGlwdjZfc3JfaGRyICpzZWc2X2dldF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKVxcbm5ldC9pcHY2L3NlZzYuYy04MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjA1LjM4MDIwNzMwM1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgxNjgyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzZWc2LmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvaXB2Ni9zZWc2LmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3OS4gSSdtIGFzc3VtaW5nIHRoYXQgYXJlYSBsaWtlbHkgY29udGFpbnMgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgb3IgcGVyaGFwcyBzb21lIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiByZWxhdGVkIHRvIHRoZSBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIHByb2Nlc3NpbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCdzIGEgY29tbW9uIHBsYWNlIHRvIGZpbmQgdGhlIGdyb3VuZHdvcmsgZm9yIGEgbW9kdWxlIGxpa2UgdGhpcy4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGNvZGUgKmJlZ2lucyogdG8gaGFuZGxlIHRoZSBTUnY2IG9wZXJhdGlvbnMuIEkgYW50aWNpcGF0ZSB1bmRlcnN0YW5kaW5nIGhvdyBpdCBzdHJ1Y3R1cmVzIGl0cyBkYXRhIGFuZCB3aGF0IHRoZSBtYWluIGZ1bmN0aW9uIGNhbGxzIGFyZSB0byBlbmFibGUgYSBiYXNpYyBvcGVyYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwYXJzZSB0aGUgbW9yZSBjb21wbGV4IGZsb3dzIGFuZCBmZWF0dXJlcyBvZiBTUnY2LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MDcuMjYxODkxNzMyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3NlZzYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNzc6XFx0fVxcbiAgNzg6XFx0XFxuICA3OTpcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNlZzZfZ2V0X3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaDtcXG4gIDgyOlxcdFxcdGludCBsZW4sIHNyaG9mZiA9IDA7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnNyaG9mZiwgSVBQUk9UT19ST1VUSU5HLCBOVUxMLCBcXHUwMDI2ZmxhZ3MpIFxcdTAwM2MgMClcXG4gIDg1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzcmhvZmYgKyBzaXplb2YoKnNyaCkpKVxcbiAgODg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0bGVuID0gKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc3Job2ZmICsgbGVuKSlcXG4gIDk1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBub3RlIHRoYXQgcHNrYl9tYXlfcHVsbCBtYXkgY2hhbmdlIHBvaW50ZXJzIGluIGhlYWRlcjtcXG4gIDk4OlxcdFxcdCAqIGZvciB0aGlzIHJlYXNvbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmVsb2FkIHRoZW0gd2hlbiBuZWVkZWQuXFxuICA5OTpcXHRcXHQgKi9cXG4gMTAwOlxcdFxcdHNyaCA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgc3Job2ZmKTtcXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKCFzZWc2X3ZhbGlkYXRlX3NyaChzcmgsIGxlbiwgdHJ1ZSkpXFxuIDEwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0cmV0dXJuIHNyaDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0LyogRGV0ZXJtaW5lIGlmIGFuIElDTVAgaW52b2tpbmcgcGFja2V0IGNvbnRhaW5zIGEgc2VnbWVudCByb3V0aW5nXFxuIDEwOTpcXHQgKiBoZWFkZXIuICBJZiBpdCBkb2VzLCBleHRyYWN0IHRoZSBvZmZzZXQgdG8gdGhlIHRydWUgZGVzdGluYXRpb25cXG4gMTEwOlxcdCAqIGFkZHJlc3MsIHdoaWNoIGlzIGluIHRoZSBmaXJzdCBzZWdtZW50IGFkZHJlc3MuXFxuIDExMTpcXHQgKi9cXG4gMTEyOlxcdHZvaWQgc2VnNl9pY21wX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdF9fdTE2IG5ldHdvcmtfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlcjtcXG4gMTE1OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQvKiBVcGRhdGUgbmV0d29yayBoZWFkZXIgdG8gcG9pbnQgdG8gdGhlIGludm9raW5nIHBhY2tldFxcbiAxMTg6XFx0XFx0ICogaW5zaWRlIHRoZSBJQ01QIHBhY2tldCwgc28gd2UgY2FuIHVzZSB0aGUgc2VnNl9nZXRfc3JoKClcXG4gMTE5OlxcdFxcdCAqIGhlbHBlci5cXG4gMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdHNyaCA9IHNlZzZfZ2V0X3NyaChza2IsIDApO1xcbiAxMjQ6XFx0XFx0aWYgKCFzcmgpXFxuIDEyNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0aWYgKHNyaC1cXHUwMDNldHlwZSAhPSBJUFY2X1NSQ1JUX1RZUEVfNClcXG4gMTI4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRvcHQtXFx1MDAzZWZsYWdzIHw9IElQNlNLQl9TRUc2O1xcbiAxMzE6XFx0XFx0b3B0LVxcdTAwM2VzcmhvZmYgPSAodW5zaWduZWQgY2hhciAqKXNyaCAtIHNrYi1cXHUwMDNlZGF0YTtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0b3V0OlxcbiAxMzQ6XFx0XFx0LyogUmVzdG9yZSB0aGUgbmV0d29yayBoZWFkZXIgYmFjayB0byB0aGUgSUNNUCBwYWNrZXQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MDcuMjYxOTc1MzIyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk5MjM2MDAxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggY2hhbmdlcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgLiBCZWZvcmUgdGhpcyByZXZpc2lvbiwgdGhlcmUgd2FzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIHBhdHRlcm46IGBpcHY2X2ZpbmRfaGRyYCB3YXMgdXNlZCB3aXRob3V0IHByb3Blcmx5IHZhbGlkYXRpbmcgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgb3IgZW5zdXJpbmcgdGhlIG5lY2Vzc2FyeSBkYXRhIHdhcyBhdmFpbGFibGUgd2l0aCBgcHNrYl9tYXlfcHVsbGAuIFRoZW4sIHdlIHdlcmUgZGlyZWN0bHkgY2FzdGluZyBgc2tiLVx1MDAzZWRhdGEgKyBzcmhvZmZgIHRvIGBpcHY2X3NyX2hkcmAuIFRoZSBjYWxsIHRvIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIHNlZW1lZCBoYXBoYXphcmQsIG9yIGF0IGxlYXN0LCBpbmNvbnNpc3RlbnQuXG5cbk5vdywgYHNlZzZfZ2V0X3NyaGAgaXMgdGhlIGdvLXRvIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIGEgZ29vZCB0aGluZy4gSXQgdmFsaWRhdGVzIGFuZCBwdWxscyB0aGUgZW50aXJlIFNSSC4gUHVsbGluZyB0aGUgU1JIIG1pZ2h0IHRyaWdnZXIgYW4gU0tCIHJlLWFsbG9jYXRpb24sIHdoaWNoIG1ha2VzIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgIGVzc2VudGlhbCBhZnRlciB0aGlzIG9wZXJhdGlvbi5cblxuSG93ZXZlciwgdGhlcmUncyBhIHNwZWNpZmljIHNjZW5hcmlvIHRoYXQgbWFrZXMgbWUgcGF1c2U6IHdoYXQgaGFwcGVucyBpZiB0aGVyZSdzICpubyogU1JIIChgIXNyaGApPyBUaGUgY29kZSBzZXRzIGBzcmhfc3RhdGUtXHUwMDNlc3JoID0gTlVMTGAgYW5kIHJldHVybnMuIFRoYXQgbWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYnV0IGl0IGxlYXZlcyBgc3JoX3N0YXRlLVx1MDAzZXZhbGlkYCB1bnRvdWNoZWQsIG9yIGZhbHNlLiBUaGlzIGhhcyB0byBiZSBhZGRyZXNzZWQuIERvZXMgaXQgZXZlbiBtYXR0ZXIgd2hldGhlciBgc3JoX3N0YXRlLVx1MDAzZXZhbGlkYCBpcyB0cnVlIG9yIGZhbHNlIHdoZW4gdGhlIGFjdHVhbCBgc3JoYCBwb2ludGVyIGlzIGBOVUxMYD8gSSB0aGluayB0aGlzIG5lZWRzIGEgc2Vjb25kIGxvb2ssIHNvIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyB0aGVzZSBzdGF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoxNy4xODU1Nzk1ODdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjYyOTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2JwZl9oYXNfdmFsaWRfc3JoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NzAzMj1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9hY3Rpb24sIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNDMtXFx0Y2FzZSBTRUc2X0xPQ0FMX0FDVElPTl9FTkRfWDpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDQ0OlxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNDUtXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA0OS1cXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9UOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNTA6XFx0XFx0aWYgKCFzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHNrYikpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA1MS1cXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDU1LVxcdGNhc2UgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNjpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDU2OlxcdFxcdGlmICghc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNTctXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNjpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDc4OlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzktXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA4Ny1cXHRjYXNlIFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUDpcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDg4OlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODktXFx0XFx0XFx0cmV0dXJuIC1FQkFETVNHO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MDI9REVGSU5FX1BFUl9DUFUoc3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSwgc2VnNl9icGZfc3JoX3N0YXRlcykgPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwNS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQwNjpib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQwNy17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQzMD1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfYnBmKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3MS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ3MjpcXHRpZiAoc3JoX3N0YXRlLVxcdTAwM2VzcmggXFx1MDAyNlxcdTAwMjYgIXNlZzZfYnBmX2hhc192YWxpZF9zcmgoc2tiKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3My1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjE3LjMwMjIxOTc0OFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzQwMzM4NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTRUc2IEJQRiBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHNlZzZfYnBmX2hhc192YWxpZF9zcmhgIGZ1bmN0aW9uIHdvcmtzLiBJdOKAmXMgY3JpdGljYWwsIG9idmlvdXNseSwgaW4gZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiBTUkggaGVhZGVycyBpbiBvdXIgU0VHNiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBhIG1pc3N0ZXAgaGVyZSBjb3VsZCBvcGVuIHVwIHNlcmlvdXMgdnVsbmVyYWJpbGl0aWVzLiBJJ20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGUga2VybmVsIGlzIHZhbGlkYXRpbmcgdGhlIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdGhyb3VnaCBCUEYuIFdoYXQgY2hlY2tzIGFyZSBpbiBwbGFjZT8gV2hhdCBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhcmUgdGhleSBoYW5kbGluZz8gSSB3YW50IHRvIHNlZSBpZiB0aGUgdmFsaWRhdGlvbiBjb25zaWRlcnMgYXNwZWN0cyBsaWtlIFNSSCBsZW5ndGgsIGhvcCBsaW1pdHMsIHNlZ21lbnRzIGxlZnQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgQlBGIGlzIGludGVncmF0ZWQgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUgaW4gdGhpcyByZWdhcmQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUyMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjIwLjY0MjU2MjIxMVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0fVxcbjE0MDE6XFx0XFxuMTQwMjpcXHRERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG4xNDAzOlxcdFxcdC5iaF9sb2NrXFx0PSBJTklUX0xPQ0FMX0xPQ0soYmhfbG9jayksXFxuMTQwNDpcXHR9O1xcbjE0MDU6XFx0XFxuMTQwNjpcXHRib29sIHNlZzZfYnBmX2hhc192YWxpZF9zcmgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDA3OlxcdHtcXG4xNDA4OlxcdFxcdHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUgKnNyaF9zdGF0ZSA9XFxuMTQwOTpcXHRcXHRcXHR0aGlzX2NwdV9wdHIoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMpO1xcbjE0MTA6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSBzcmhfc3RhdGUtXFx1MDAzZXNyaDtcXG4xNDExOlxcdFxcbjE0MTI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JoX3N0YXRlLVxcdTAwM2ViaF9sb2NrKTtcXG4xNDEzOlxcdFxcdGlmICh1bmxpa2VseShzcmggPT0gTlVMTCkpXFxuMTQxNDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTQxNTpcXHRcXG4xNDE2OlxcdFxcdGlmICh1bmxpa2VseSghc3JoX3N0YXRlLVxcdTAwM2V2YWxpZCkpIHtcXG4xNDE3OlxcdFxcdFxcdGlmICgoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAyNiA3KSAhPSAwKVxcbjE0MTg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHRcXHRzcmgtXFx1MDAzZWhkcmxlbiA9ICh1OCkoc3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gXFx1MDAzZVxcdTAwM2UgMyk7XFxuMTQyMTpcXHRcXHRcXHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgKHNyaC1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMywgdHJ1ZSkpXFxuMTQyMjpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTQyMzpcXHRcXG4xNDI0OlxcdFxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbjE0MjU6XFx0XFx0fVxcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNDI4OlxcdH1cXG4xNDI5OlxcdFxcbjE0MzA6XFx0c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE0MzE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbjE0MzI6XFx0e1xcbjE0MzM6XFx0XFx0c3RydWN0IHNlZzZfYnBmX3NyaF9zdGF0ZSAqc3JoX3N0YXRlO1xcbjE0MzQ6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmg7XFxuMTQzNTpcXHRcXHRpbnQgcmV0O1xcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xcbjE0Mzg6XFx0XFx0aWYgKCFzcmgpIHtcXG4xNDM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyMC42NDI3NDIwNjFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MDAyMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBpbnB1dF9hY3Rpb25fZW5kX2JwZmAgYW5kIGBzZWc2X2xvY2FsLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaW5wdXRfYWN0aW9uX2VuZF9icGZgIGZ1bmN0aW9uLCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCB0aGUgTG9jYWwgU2VnbWVudHMgaW1wbGVtZW50YXRpb24uIFJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIOKAkyBzcGVjaWZpY2FsbHksIGxpbmVzIDE0MzUgdGhyb3VnaCAxNDc1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgcHJvY2Vzc2luZyBvciBlcnJvciBoYW5kbGluZyBmb3IgYSBwYWNrZXQgdGhhdCdzIGJlZW4gdGhyb3VnaCBhIGxvY2FsIHNlZ21lbnQgcm91dGluZyBwYXRoIGlzIGhhcHBlbmluZy5cblxuQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgY2hlY2tzIGhlcmU6IHZhbGlkYXRpb24gb2YgdGhlIHBhY2tldCdzIGZpbmFsIHN0YXRlIGFmdGVyIHRyYXZlcnNpbmcgYSBsb2NhbCBzZWdtZW50IHJvdXRlLCBwZXJoYXBzIGhhbmRsaW5nIG9mIGFueSByZW1haW5pbmcgbWV0YWRhdGEsIGFuZCBkZWZpbml0ZWx5IGEgY2xlYW4tdXAgcm91dGluZSBmb3IgcmVzb3VyY2VzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgdGhpcyBwYWNrZXQuIE1heWJlIHRoZXkncmUgbWFuYWdpbmcgZmxvdyBpbmZvcm1hdGlvbiBvciBhY2NvdW50aW5nIGhlcmUgdG9vLiBPciwgaXQgY291bGQgYmUgdGhlIHBsYWNlIHdoZXJlIHRoZXkgbWFyayB0aGUgcGFja2V0IGZvciBkZWxpdmVyeSB0byB0aGUgbmV4dCBzdGFnZSBhZnRlciBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gZGlnIGluLCB0aG91Z2gsIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHNlZSB3aGF0IGhhcHBlbnMgd2l0aCB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCB0aGUgcmVsZXZhbnQgY29udHJvbCBzdHJ1Y3R1cmVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyMi44OTI3Njc1NTFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQzNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzNTpcXHRcXHRpbnQgcmV0O1xcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRzcmggPSBnZXRfYW5kX3ZhbGlkYXRlX3NyaChza2IpO1xcbjE0Mzg6XFx0XFx0aWYgKCFzcmgpIHtcXG4xNDM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE0NDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ0MTpcXHRcXHR9XFxuMTQ0MjpcXHRcXHRhZHZhbmNlX25leHRzZWcoc3JoLCBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpO1xcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHQvKiBUaGUgYWNjZXNzIHRvIHRoZSBwZXItQ1BVIGJ1ZmZlciBzcmhfc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHJ1bm5pbmdcXG4xNDQ1OlxcdFxcdCAqIGFsd2F5cyBpbiBzb2Z0aXJxIGNvbnRleHQgKHdpdGggZGlzYWJsZWQgQkgpLiBPbiBQUkVFTVBUX1JUIHRoZVxcbjE0NDY6XFx0XFx0ICogcmVxdWlyZWQgbG9ja2luZyBpcyBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIGxvY2FsX2xvY2tfbmVzdGVkX2JoKClcXG4xNDQ3OlxcdFxcdCAqIHN0YXRlbWVudC4gSXQgaXMgYWxzbyBhY2Nlc3NlZCBieSB0aGUgYnBmX2x3dF9zZWc2XyogaGVscGVycyB2aWFcXG4xNDQ4OlxcdFxcdCAqIGJwZl9wcm9nX3J1bl9zYXZlX2NiKCkuXFxuMTQ0OTpcXHRcXHQgKi9cXG4xNDUwOlxcdFxcdGxvY2FsX2xvY2tfbmVzdGVkX2JoKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzLmJoX2xvY2spO1xcbjE0NTE6XFx0XFx0c3JoX3N0YXRlID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzZWc2X2JwZl9zcmhfc3RhdGVzKTtcXG4xNDUyOlxcdFxcdHNyaF9zdGF0ZS1cXHUwMDNlc3JoID0gc3JoO1xcbjE0NTM6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2VoZHJsZW4gPSBzcmgtXFx1MDAzZWhkcmxlbiBcXHUwMDNjXFx1MDAzYyAzO1xcbjE0NTQ6XFx0XFx0c3JoX3N0YXRlLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNDU3OlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG4xNDU4OlxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9zYXZlX2NiKHNsd3QtXFx1MDAzZWJwZi5wcm9nLCBza2IpO1xcbjE0NTk6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdHN3aXRjaCAocmV0KSB7XFxuMTQ2MjpcXHRcXHRjYXNlIEJQRl9PSzpcXG4xNDYzOlxcdFxcdGNhc2UgQlBGX1JFRElSRUNUOlxcbjE0NjQ6XFx0XFx0XFx0YnJlYWs7XFxuMTQ2NTpcXHRcXHRjYXNlIEJQRl9EUk9QOlxcbjE0NjY6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0Njc6XFx0XFx0ZGVmYXVsdDpcXG4xNDY4OlxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiYnBmLXNlZzZsb2NhbDogSWxsZWdhbCByZXR1cm4gdmFsdWUgJXVcXFxcblxcXCIsIHJldCk7XFxuMTQ2OTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuMTQ3MDpcXHRcXHR9XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGlmIChzcmhfc3RhdGUtXFx1MDAzZXNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChza2IpKVxcbjE0NzM6XFx0XFx0XFx0Z290byBkcm9wO1xcbjE0NzQ6XFx0XFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2c2VnNl9icGZfc3JoX3N0YXRlcy5iaF9sb2NrKTtcXG4xNDc1OlxcdFxcbjE0NzY6XFx0XFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxuMTQ3NzpcXHRcXHRcXHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgMCk7XFxuMTQ3ODpcXHRcXG4xNDc5OlxcdFxcdHJldHVybiBkc3RfaW5wdXQoc2tiKTtcXG4xNDgwOlxcdFxcbjE0ODE6XFx0ZHJvcDpcXG4xNDgyOlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnNlZzZfYnBmX3NyaF9zdGF0ZXMuYmhfbG9jayk7XFxuMTQ4MzpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNDg0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyMi44OTUwMTc4NDRaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxMTA4MTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFRzYgTG9jYWwgQWN0aW9ucyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBob3cgdGhlIFNFRzYgbG9jYWwgYWN0aW9ucyBoYW5kbGUgSVB2NiBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGZpbGUuIFRoZSBmaXJzdCBzZWdtZW50IGRlYWxzIHdpdGggYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9EVDZgLiBJIHNlZSB0aGUgY29kZSBpcyBjaGVja2luZyBmb3IgYW4gSVB2NiBoZWFkZXIgdXNpbmcgYGlwdjZfZmluZF9oZHJgLiBUaGVuIHRoZXJlIGlzIGEgY2hhbmdlLiBJbml0aWFsbHksIHRoZSBjb2RlIHVzZWQgYHBza2JfcHVsbGAgd2hpY2ggcHVsbHMgZGF0YSBmcm9tIGEgc2tiLiBOb3cgaXQgdXNlcyBgcHNrYl9tYXlfcHVsbGAsIGFuZCBpZiBpdCBmYWlscywgaXQgc2V0cyBgc3JoX3N0YXRlLVx1MDAzZXNyaCA9IE5VTExgIGFuZCBjb21wdXRlcyBkYXRhIHBvaW50ZXJzLiBBIGZvbGxvdyB1cCB0byB0aGlzIGlzIHRvIHB1bGwgZnJvbSB0aGUgc2tiIHdpdGggYF9fc2tiX3B1bGxgLi4gVGhpcyBpcyBmb2xsb3dlZCB1cCB3aXRoIGBza2JfcG9zdHB1bGxfcmNzdW1gLCBhbmQgYSByZXNldCBvZiB2YXJpb3VzIGhlYWRlcnMuIFRoZSBjaGFuZ2UgaGVyZSBpcyBzaWduaWZpY2FudC4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgcHVsbGluZyB0aGUgaGVhZGVyLCBpdCdzIG5vdyBjaGVja2luZyBpZiBwdWxsaW5nIHRoZSBJUHY2IGhlYWRlciBpcyBldmVuICpwb3NzaWJsZSouIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgZml4IGZvciBhIHByZXZpb3VzIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYSBtYWxmb3JtZWQgcGFja2V0IGNvdWxkIGNhdXNlIGlzc3Vlcy4gVGhlbiBpdCBsb29rcyB1cCB0aGUgbmV4dCBob3AuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0I2YCBhbmQgYFNFRzZfTE9DQUxfQUNUSU9OX0VORF9CNl9FTkNBUGAuIEhlcmUsIGl0J3MgY2hlY2tpbmcgdGhlIFNSSCBzdGF0ZSBhbmQgdmFsaWRhdGluZyB0aGUgU1JIIGlmIG9uZSBleGlzdHMuIEkgc2VlIHRoZSBjb2RlIGNhbGxzIGBicGZfcHVzaF9zZWc2X2VuY2FwYCB3aXRoIGRpZmZlcmVudCBlbmNhcHN1bGF0aW9uIHR5cGVzLiBJdCBzZWVtcyB0aGUgY29kZSBpcyB0cmFja2luZyB0aGUgb2xkIGxlbmd0aCBvZiB0aGUgc2tiIGFzIGEgY2hlY2twb2ludCB0byBzZWUgaWYgYGJwZl9wdXNoX3NlZzZfZW5jYXBgIGNoYW5nZXMgdGhlIGxlbmd0aC4gRmluYWxseSwgYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBpcyBjYWxsZWQgd2hlbiB0aGUgbGVuZ3RoIG9mIHRoZSBza2IgaXMgY2hhbmdlZCBhZnRlciBjYWxsaW5nIGBicGZfcHVzaF9zZWc2X2VuY2FwYC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWxseSBhZGRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBTUkguIFRoYXQncyBnb29kLCBJIHdhcyBleHBlY3Rpbmcgc29tZXRoaW5nIGxpa2UgdGhpcy4gVGhlIGNoYW5nZSBmcm9tIHRoZSBvbGQgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgdGhlIGxlbmd0aCBjaGVjayBhbmQgdXBkYXRpbmcgdGhlIHNyaCBzdGF0ZSBiYXNlZCBvbiB0aGF0LlxuXG5BbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGR1cmluZyBlbmNhcHN1bGF0aW9uLCBhbmQgd2hldGhlciB0aGVzZSBzdGF0ZSB1cGRhdGVzIGFyZSBjcml0aWNhbCBvciBqdXN0IG5pY2UtdG8taGF2ZXMuIFRoYXQncyB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjIyOjI3LjgwNjEwMjQyOFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjIxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wdXNoX3NlZzZfZW5jYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz02ODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9jaGVja19tdHVfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02ODc4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY4Nzk6c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxubmV0L2NvcmUvZmlsdGVyLmMtNjg4MC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02OTIxPUJQRl9DQUxMXzQoYnBmX2x3dF9pbl9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSwgdm9pZCAqLCBoZHIsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTI3LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORTpcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI4OlxcdFxcdHJldHVybiBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgdHlwZSwgaGRyLCBsZW4pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjktI2VuZGlmXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDMyPUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X2FjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA4MC1cXHRcXHRvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxubmV0L2NvcmUvZmlsdGVyLmM6NzA4MTpcXHRcXHRlcnIgPSBicGZfcHVzaF9zZWc2X2VuY2FwKHNrYiwgQlBGX0xXVF9FTkNBUF9TRUc2X0lOTElORSxcXG5uZXQvY29yZS9maWx0ZXIuYy03MDgyLVxcdFxcdFxcdFxcdFxcdCAgcGFyYW0sIHBhcmFtX2xlbik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDkwLVxcdFxcdG9sZF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MDkxOlxcdFxcdGVyciA9IGJwZl9wdXNoX3NlZzZfZW5jYXAoc2tiLCBCUEZfTFdUX0VOQ0FQX1NFRzYsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzA5Mi1cXHRcXHRcXHRcXHRcXHQgIHBhcmFtLCBwYXJhbV9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjoyNy45NjAzMzAzNTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5OTM0Mjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGJwZl9wdXNoX3NlZzZfZW5jYXBgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBicGZfcHVzaF9zZWc2X2VuY2FwYCBsb2NhdGVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIExldCdzIGdldCBpbnRvIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gU2VnbWVudCBSb3V0aW5nIG92ZXIgSVB2NiAoU1J2NikgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgaG93IEJQRiBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjayBhdCB0aGlzIHBvaW50LiBJIHN1c3BlY3QgaXQncyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIG9yIG1vZGlmeWluZyB0aGUgSVB2NiBoZWFkZXIgdG8gYWRkIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpLCBhbmQgdGhlbiBwdXNoaW5nIHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgc2tfYnVmZiwgdGhlIElQdjYgaGVhZGVyIHN0cnVjdHVyZSwgdGhlIFNSSCBpdHNlbGYsIGFuZCBob3cgdGhlIEJQRiBwcm9ncmFtIG1hbmlwdWxhdGVzIHRoZXNlIGVsZW1lbnRzIHRvIGFjY29tcGxpc2ggZW5jYXBzdWxhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXMgd2VsbCwgZ2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjcml0aWNhbCBwYXRoIG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiBob3cgdGhlIEJQRiBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBJUHY2IGhlYWRlciBhbmQgaG93IGl0IHNldHMgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIGZvciB0aGUgU1JIIHRvIHNwZWNpZnkgdGhlIHNlZ21lbnQgbGlzdC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgZWZmaWNpZW50bHkgaW1wbGVtZW50IFNSdjYuIEknbGwgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgbGlrZSBpbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIG9yIGludmFsaWQgc2VnbWVudCBsaXN0cy4gSSdsbCBhbHNvIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBhbnkgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGlmIGFwcGxpY2FibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6MzEuMDU5Njc2NzU3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODc4LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2ODc4OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbjY4Nzk6XFx0c3RhdGljIGludCBicGZfcHVzaF9zZWc2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eXBlLCB2b2lkICpoZHIsIHUzMiBsZW4pXFxuNjg4MDpcXHR7XFxuNjg4MTpcXHRcXHRpbnQgZXJyO1xcbjY4ODI6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpzcmggPSAoc3RydWN0IGlwdjZfc3JfaGRyICopaGRyO1xcbjY4ODM6XFx0XFxuNjg4NDpcXHRcXHRpZiAoIXNlZzZfdmFsaWRhdGVfc3JoKHNyaCwgbGVuLCBmYWxzZSkpXFxuNjg4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42ODg2OlxcdFxcbjY4ODc6XFx0XFx0c3dpdGNoICh0eXBlKSB7XFxuNjg4ODpcXHRcXHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNl9JTkxJTkU6XFxuNjg4OTpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSlcXG42ODkwOlxcdFxcdFxcdFxcdHJldHVybiAtRUJBRE1TRztcXG42ODkxOlxcdFxcbjY4OTI6XFx0XFx0XFx0ZXJyID0gc2VnNl9kb19zcmhfaW5saW5lKHNrYiwgc3JoKTtcXG42ODkzOlxcdFxcdFxcdGJyZWFrO1xcbjY4OTQ6XFx0XFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuNjg5NTpcXHRcXHRcXHRza2JfcmVzZXRfaW5uZXJfaGVhZGVycyhza2IpO1xcbjY4OTY6XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMTtcXG42ODk3OlxcdFxcdFxcdGVyciA9IHNlZzZfZG9fc3JoX2VuY2FwKHNrYiwgc3JoLCBJUFBST1RPX0lQVjYpO1xcbjY4OTg6XFx0XFx0XFx0YnJlYWs7XFxuNjg5OTpcXHRcXHRkZWZhdWx0OlxcbjY5MDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjkwMTpcXHRcXHR9XFxuNjkwMjpcXHRcXG42OTAzOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG42OTA0OlxcdFxcdGlmIChlcnIpXFxuNjkwNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY5MDY6XFx0XFxuNjkwNzpcXHRcXHRza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG42OTA4OlxcdFxcbjY5MDk6XFx0XFx0cmV0dXJuIHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcXG42OTEwOlxcdH1cXG42OTExOlxcdCNlbmRpZiAvKiBDT05GSUdfSVBWNl9TRUc2X0JQRiAqL1xcbjY5MTI6XFx0XFxuNjkxMzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxcbjY5MTQ6XFx0c3RhdGljIGludCBicGZfcHVzaF9pcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIsIHUzMiBsZW4sXFxuNjkxNTpcXHRcXHRcXHRcXHQgICAgIGJvb2wgaW5ncmVzcylcXG42OTE2OlxcdHtcXG42OTE3OlxcdFxcdHJldHVybiBicGZfbHd0X3B1c2hfaXBfZW5jYXAoc2tiLCBoZHIsIGxlbiwgaW5ncmVzcyk7XFxuNjkxODpcXHR9XFxuNjkxOTpcXHQjZW5kaWZcXG42OTIwOlxcdFxcbjY5MjE6XFx0QlBGX0NBTExfNChicGZfbHd0X2luX3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLCB2b2lkICosIGhkcixcXG42OTIyOlxcdFxcdCAgIHUzMiwgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNToyMjozMS4wNjA0MTIxMThaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM1NTIwNzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIFNSSCBTdGF0ZSBVcGRhdGUgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBpc3N1ZSBpcyBhIHBvdGVudGlhbCBmb3Igc3RhbGUgb3IgaW52YWxpZCBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIHBvaW50ZXJzIHdpdGhpbiB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGluIGZ1bmN0aW9ucyBsaWtlIGBicGZfcHVzaF9zZWc2X2VuY2FwYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgc2VnNl9kb19zcmhfaW5saW5lYCBvciBgc2VnNl9kb19zcmhfZW5jYXBgIHRvIG1vZGlmeSB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpIGFuZCBpbmNyZWFzZSBpdHMgbGVuZ3RoLiBUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgbWlnaHQgc3Vic2VxdWVudGx5IHJldHVybiBhbiBlcnJvciwgZXZlbiBhZnRlciBlbmNhcHN1bGF0aW9uIGFwcGVhcmVkIHRvIHN1Y2NlZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBvbmx5IGNoZWNraW5nIGZvciB0aGUgc3VjY2VzcyBvZiBgc2VnNl9sb29rdXBfbmV4dGhvcGAsIGFuZCBpZiBpdCBmYWlsZWQgdGhlIGBicGZfdXBkYXRlX3NyaF9zdGF0ZWAgd2Fzbid0IGJlaW5nIGNhbGxlZCwgbGVhdmluZyB0aGUgU1JIIHN0YXRlIHBvdGVudGlhbGx5IGluY29uc2lzdGVudCBpZiB0aGUgYHNrYmAgd2VyZSByZWFsbG9jYXRlZCBvciBtb2RpZmllZCBsYXRlci5cblxuTm93LCBsb29raW5nIGRlZXBlciwgSSBzZWUgdGhleSdyZSBhZGRyZXNzaW5nIHRoZSBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgc2NlbmFyaW8sIHdoZXJlIGBwc2tiX21heV9wdWxsYCBlbnN1cmVzIHRoZSBJUHY2IGhlYWRlciBpcyBwcmVzZW50IGluIHRoZSBsaW5lYXIgcGFydCBiZWZvcmUgcHVsbGluZyBpdCwgYW5kIHRoZW4gYGJwZl91cGRhdGVfc3JoX3N0YXRlYCBub3cgY29ycmVjdGx5IHVzZXMgYHNlZzZfZ2V0X3NyaChza2IsIDApYCBpbnN0ZWFkIG9mIGFzc3VtaW5nIGBza2ItXHUwMDNlZGF0YSArIHNyaG9mZmAgaXMgdmFsaWQsIGFuZCB0aGVuIGNhbGxzIGBicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYilgLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiBwb2ludGVyIHNhZmV0eS5cblxuTGV0J3MgZG8gYSBxdWljayB2YXJpYWJsZSBpbnNwZWN0aW9uLiBJbiBgYnBmX3VwZGF0ZV9zcmhfc3RhdGVgOiBgc3JoYCBpcyBvYnRhaW5lZCB2aWEgYHNlZzZfZ2V0X3NyaGAsIHdlIGNvbXB1dGUgZGF0YSBwb2ludGVycywgYW5kIHRoZW4gY2hlY2sgYCFzcmhgLiBgc3JoX3N0YXRlLVx1MDAzZWhkcmxlbmAgaXMgYWxzbyB1cGRhdGVkLCBhcyBpcyBgc3JoX3N0YXRlLVx1MDAzZXZhbGlkYC4gSW4gYGJwZl9sd3Rfc2VnNl9hY3Rpb25gLCB3ZSBoYXZlIGBvbGRfbGVuYCwgaW5pdGlhbGl6ZWQgdG8gYHNrYi1cdTAwM2VsZW5gIGJlZm9yZSB0aGUgZW5jYXAgYW5kIGNoZWNrZWQgYWZ0ZXIuIFRoZSBgU0VHNl9MT0NBTF9BQ1RJT05fRU5EX0RUNmAgcGF0aCBjb3JyZWN0bHkgdXNlcyBgcHNrYl9tYXlfcHVsbGAgYW5kIHRoZW4gYF9fc2tiX3B1bGxgLlxuXG5JJ20gY29uZmlkZW50IHRoZXJlIGFyZW4ndCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gYG9sZF9sZW5gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBgc3JoYCBpcyBhbHNvIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgc2VnNl9nZXRfc3JoKHNrYiwgMClgLiBUaGVyZSBhcmVuJ3QgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgY29waWVzIHRvIHVzZXJzcGFjZSBpbiBwbGF5IGhlcmUsIHNvIG5vIGNoYW5jZSBvZiBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmUgYWxzbyBkb24ndCBhcHBlYXIgdG8gYmUgYW55IHN0cnVjdCBwYWRkaW5nIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy5cblxuUmVnYXJkaW5nIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgaXQncyB6ZXJvLiBUaGlzIGZpeCBpcyBzdHJpY3RseSBhYm91dCBmaXhpbmcgc3RhbGUgcG9pbnRlciBpc3N1ZXMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCBsaW5lYXIgYnVmZmVyIGhhbmRsaW5nIGZvciBTUkggaW4gQlBGIGhlbHBlcnMuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIGdvaW5nIHRvIGJlIG91ciBtYWluIHNhZmV0eSBuZXQsIGFuZCB0aGlzIGlzIGV4YWN0bHkgdGhlIHR5cGUgb2YgYnVnIGl0IGV4Y2VscyBhdCBkZXRlY3RpbmcuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWssIG9yIGEgc3RydWN0IHBhZGRpbmcgaXNzdWUuXG5cbk9rYXksIGxldCdzIHNlZSwgZG9lcyB0aGlzIG1lZXQgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA/IExldCdzIGNoZWNrOiBvdXQtb2YtYm91bmRzLCBOVUxMIGRlcmVmZXJlbmNlLCBldGMuPyBZZXAsIEtBU0FOIGNhdGNoZXMgdGhvc2UgYW5kIHRoaXMgaXMgcHJlY2lzZWx5IHdoYXQgdGhlIHBhdGNoIGlzIGZpeGluZy4gRnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0cz8gQ2hlY2suIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mbyBsZWFrcz8gQ29ycmVjdC5cblxuRXZlcnl0aGluZyBoZXJlIHNlZW1zIGNsZWFyLiBUaGUgZml4IGlzIHNvdW5kLCB3ZWxsLXNjb3BlZCwgYW5kIHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0ODQsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MjI6NDAuNDE1NjIzNTU4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzdGFsZSBwb2ludGVyIGFuZCBidWZmZXIgYm91bmRhcnkgaXNzdWVzIGluIEJQRiBJUHY2IFNlZ21lbnQgUm91dGluZyAoU1JIKSBoZWxwZXJzIChicGZfdXBkYXRlX3NyaF9zdGF0ZSBhbmQgYnBmX2x3dF9zZWc2X2FjdGlvbikuIFNwZWNpZmljYWxseTpcXG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBjYXN0aW5nIG9mIG9mZnNldHMgaW50byBza2ItXFx1MDAzZWRhdGEgd2l0aCBzZWc2X2dldF9zcmgoKSBhbmQgcHNrYl9tYXlfcHVsbCBjaGVja3MgdG8gdmFsaWRhdGUgYW5kIHB1bGwgdGhlIGxpbmVhciBoZWFkZXIgc2FmZWx5Llxcbi0gSXQgcmVjb21wdXRlcyBCUEYgZGF0YSBwb2ludGVycyBhbmQgdXBkYXRlcyB0aGUgcGVyLUNQVSBTUkggc3RhdGUgd2hlbiB0aGUgc2tiIGJ1ZmZlciBleHBhbmRzIG9yIGNoYW5nZXMgbGVuZ3RoIGR1cmluZyBlbmNhcHN1bGF0aW9uLlxcbi0gTG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYG9sZF9sZW5gIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGBza2ItXFx1MDAzZWxlbmAgcHJpb3IgdG8gcmVhZGluZy5cXG5cXG5UaGVzZSBtb2RpZmljYXRpb25zIGFkZHJlc3MgYnVmZmVyIGJvdW5kcywgcG9pbnRlciByZWNvbXB1dGF0aW9uLCBhbmQgbGluZWFyIGhlYWRlciB2YWxpZGl0eSwgd2hpY2ggYXJlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgc3RhbGUgcG9pbnRlciBhbmQgYnVmZmVyIGJvdW5kYXJ5IGlzc3VlcyBpbiBCUEYgSVB2NiBTZWdtZW50IFJvdXRpbmcgKFNSSCkgaGVscGVycyAoYnBmX3VwZGF0ZV9zcmhfc3RhdGUgYW5kIGJwZl9sd3Rfc2VnNl9hY3Rpb24pLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgY2FzdGluZyBvZiBvZmZzZXRzIGludG8gc2tiLVxcdTAwM2VkYXRhIHdpdGggc2VnNl9nZXRfc3JoKCkgYW5kIHBza2JfbWF5X3B1bGwgY2hlY2tzIHRvIHZhbGlkYXRlIGFuZCBwdWxsIHRoZSBsaW5lYXIgaGVhZGVyIHNhZmVseS5cXG4tIEl0IHJlY29tcHV0ZXMgQlBGIGRhdGEgcG9pbnRlcnMgYW5kIHVwZGF0ZXMgdGhlIHBlci1DUFUgU1JIIHN0YXRlIHdoZW4gdGhlIHNrYiBidWZmZXIgZXhwYW5kcyBvciBjaGFuZ2VzIGxlbmd0aCBkdXJpbmcgZW5jYXBzdWxhdGlvbi5cXG4tIExvY2FsIHZhcmlhYmxlcyBzdWNoIGFzIGBvbGRfbGVuYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBgc2tiLVxcdTAwM2VsZW5gIHByaW9yIHRvIHJlYWRpbmcuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBhZGRyZXNzIGJ1ZmZlciBib3VuZHMsIHBvaW50ZXIgcmVjb21wdXRhdGlvbiwgYW5kIGxpbmVhciBoZWFkZXIgdmFsaWRpdHksIHdoaWNoIGFyZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYyBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[1] Phase: Succeeded StartedAt: 2026-09-09 15:22:52 +0000 UTC FinishedAt: 2026-09-09 15:22:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 15:22:52 +0000 UTC FinishedAt: 2026-09-09 15:22:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2] Phase: Succeeded StartedAt: 2026-09-09 15:22:52 +0000 UTC FinishedAt: 2026-09-09 19:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 15:22:52 +0000 UTC FinishedAt: 2026-09-09 19:06:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 15:22:52 +0000 UTC FinishedAt: 2026-09-09 15:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 15:22:52 +0000 UTC FinishedAt: 2026-09-09 15:22:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5wrzk/series-workflow5wrzk-convert-artifact-4289275676/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 15:23:02 +0000 UTC FinishedAt: 2026-09-09 15:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 15:23:02 +0000 UTC FinishedAt: 2026-09-09 15:43:35 +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:*568409b8-8530-447f-8a8c-d164a6eebdc0,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-workflow5wrzk/series-workflow5wrzk-convert-artifact-4289275676/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": "4106281c-16d8-4fd9-9189-48de10369baa", "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-workflow5wrzk/series-workflow5wrzk-build-action-2119421258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 15:23:02 +0000 UTC FinishedAt: 2026-09-09 15:43:25 +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:*568409b8-8530-447f-8a8c-d164a6eebdc0,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-workflow5wrzk/series-workflow5wrzk-convert-artifact-4289275676/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": "4106281c-16d8-4fd9-9189-48de10369baa", "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-workflow5wrzk/series-workflow5wrzk-build-action-2119421258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 15:43:35 +0000 UTC FinishedAt: 2026-09-09 15:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 15:43:35 +0000 UTC FinishedAt: 2026-09-09 15:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 15:43:35 +0000 UTC FinishedAt: 2026-09-09 15:43:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 15:43:35 +0000 UTC FinishedAt: 2026-09-09 15:43:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5wrzk/series-workflow5wrzk-convert-artifact-516621403/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 15:43:45 +0000 UTC FinishedAt: 2026-09-09 15:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 15:43:45 +0000 UTC FinishedAt: 2026-09-09 15:45:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4106281c-16d8-4fd9-9189-48de10369baa,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-workflow5wrzk/series-workflow5wrzk-build-action-2119421258/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-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 15:45:55 +0000 UTC FinishedAt: 2026-09-09 15:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 15:45:55 +0000 UTC FinishedAt: 2026-09-09 15:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 15:45:55 +0000 UTC FinishedAt: 2026-09-09 16:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 15:45:55 +0000 UTC FinishedAt: 2026-09-09 16:03: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:*568409b8-8530-447f-8a8c-d164a6eebdc0,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-workflow5wrzk/series-workflow5wrzk-convert-artifact-516621403/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": "35b15f63-3f50-43b1-9d4c-3104c267ec85", "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-workflow5wrzk/series-workflow5wrzk-build-action-553560831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 15:45:55 +0000 UTC FinishedAt: 2026-09-09 16:03:13 +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:*568409b8-8530-447f-8a8c-d164a6eebdc0,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-workflow5wrzk/series-workflow5wrzk-convert-artifact-516621403/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": "35b15f63-3f50-43b1-9d4c-3104c267ec85", "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-workflow5wrzk/series-workflow5wrzk-build-action-553560831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 16:03:23 +0000 UTC FinishedAt: 2026-09-09 16:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 16:03:23 +0000 UTC FinishedAt: 2026-09-09 16:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 16:03:23 +0000 UTC FinishedAt: 2026-09-09 16:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 16:03:23 +0000 UTC FinishedAt: 2026-09-09 16:04:56 +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:*35b15f63-3f50-43b1-9d4c-3104c267ec85,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-workflow5wrzk/series-workflow5wrzk-build-action-553560831/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-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 16:05:06 +0000 UTC FinishedAt: 2026-09-09 19:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 16:05:06 +0000 UTC FinishedAt: 2026-09-09 19:06:33 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4106281c-16d8-4fd9-9189-48de10369baa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35b15f63-3f50-43b1-9d4c-3104c267ec85,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-workflow5wrzk/series-workflow5wrzk-build-action-2119421258/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-workflow5wrzk/series-workflow5wrzk-build-action-553560831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 16:05:06 +0000 UTC FinishedAt: 2026-09-09 16:05:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 16:05:06 +0000 UTC FinishedAt: 2026-09-09 16:05:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5wrzk/series-workflow5wrzk-convert-artifact-3514058580/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 16:05:06 +0000 UTC FinishedAt: 2026-09-09 16:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 16:05:06 +0000 UTC FinishedAt: 2026-09-09 16:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 16:05:06 +0000 UTC FinishedAt: 2026-09-09 16:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 16:05:16 +0000 UTC FinishedAt: 2026-09-09 19:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wrzk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_lwt_seg6_action","bpf_update_srh_state","input_action_end_bpf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_BPF","BPF_SYSCALL"],"series_id":"788136cb-be1e-4ed4-b071-541bb03a511d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 16:05:16 +0000 UTC FinishedAt: 2026-09-09 19:06:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4106281c-16d8-4fd9-9189-48de10369baa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35b15f63-3f50-43b1-9d4c-3104c267ec85,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-workflow5wrzk/series-workflow5wrzk-build-action-2119421258/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-workflow5wrzk/series-workflow5wrzk-build-action-553560831/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-workflow5wrzk/series-workflow5wrzk-convert-artifact-3514058580/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,}