Name: series-workflow2vdph Phase: Succeeded StartedAt: 2026-07-15 06:29:54 +0000 UTC FinishedAt: 2026-07-15 11:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[0] Phase: Succeeded StartedAt: 2026-07-15 06:29:54 +0000 UTC FinishedAt: 2026-07-15 06:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 06:29:54 +0000 UTC FinishedAt: 2026-07-15 06:46:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "9a3a07d06e7d74f4aecc51396c771149336ac55d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "9a3a07d06e7d74f4aecc51396c771149336ac55d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "d52850d2-526b-433d-a016-abb2b93eee9d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg_parser", "tcp_bpf_recvmsg", "tcp_msg_wait_data" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjViZTI0YjZiZjgzZTBhY2E2NTBjZWNjMjQ1YTk0NDQ0Mzg2ZmYxYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDA2OjQ1OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmU1OGFiMmQxZWU5NDMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbiYjNDM7XHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbiYjNDM7XHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4mIzQzO1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICYjNDM7MjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgJiM0Mzs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuJiM0MztcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuJiM0MztcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgJiM0MzszNzUsNDUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRpbWVvKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiAmIzQzOzQyNSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuaW5kZXggYzlmNDYwMzFhYzczYjIuLmExODQwYTVkNDVmNjdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5AQCAtMzksNiAmIzQzOzM5LDggQEAgc2tfY29ubmVjdF96ZXJvX2FkZHJcbiBza19zb19wZWVrX29mZlxuIHNrZl9uZXRfb2ZmXG4gc29ja2V0XG4mIzQzO3NvY2ttYXBfcmVjdmZyb21cbiYjNDM7c29ja21hcF9yZWN2ZnJvbS5icGYub1xuIHNvX2luY29taW5nX2NwdVxuIHNvX25ldG5zX2Nvb2tpZVxuIHNvX3Jjdl9saXN0ZW5lclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLmEwNWE0YTkyNDQwMjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0xNjEsNiAmIzQzOzE2MSw3IEBAIFRFU1RfR0VOX0ZJTEVTIDo9IFxcXG4gXHRzb19uZXRuc19jb29raWUgXFxcbiBcdHNvX3Jjdl9saXN0ZW5lciBcXFxuIFx0c29ja2V0IFxcXG4mIzQzO1x0c29ja21hcF9yZWN2ZnJvbS5icGYubyBcXFxuIFx0c3RyZXNzX3JldXNlcG9ydF9saXN0ZW4gXFxcbiBcdHRjcF9mYXN0b3Blbl9iYWNrdXBfa2V5IFxcXG4gXHR0Y3BfaW5xIFxcXG5AQCAtMTkxLDYgJiM0MzsxOTIsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcbiBcdHNrX3NvX3BlZWtfb2ZmIFxcXG4gXHRzb19pbmNvbWluZ19jcHUgXFxcbiYjNDM7XHRzb2NrbWFwX3JlY3Zmcm9tIFxcXG4gXHR0YXAgXFxcbiBcdHRjcF9wb3J0X3NoYXJlIFxcXG4gXHR0bHMgXFxcbkBAIC0yMzgsMyAmIzQzOzI0MCw3IEBAICQoT1VUUFVUKS9iaW5kX2JoYXNoOiBMRExJQlMgJiM0Mzs9IC1scHRocmVhZFxuICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICYjNDM7PSAtSS4uLy4uLy4uL2luY2x1ZGUvXG4gXG4gaW5jbHVkZSBicGYubWtcbiYjNDM7XG4mIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcbiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IExETElCUyAmIzQzOz0gJChCUEZPQkopIC1sZWxmIC1seiAtbHB0aHJlYWRcbiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyAmIzQzOz0gLUkkKE9VVFBVVCkvdG9vbHMvaW5jbHVkZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmVjNDcwYzczOGYxZThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBBRl9JTkVUIDJcbiYjNDM7XG4mIzQzO2NoYXIgTElDRU5TRVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxMDI0KTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBfX3U2NCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4mIzQzO1xuJiM0Mzt9IG1hcF9zb2NrcyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tvcHNcJiMzNDspIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbiYjNDM7e1xuJiM0MztcdGlmIChjdHgtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfQUNUSVZFX0VTVEFCTElTSEVEX0NCKSB7XG4mIzQzO1x0XHRfX3U2NCBjb29raWUgPSBicGZfZ2V0X3NvY2tldF9jb29raWUoY3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRicGZfc29ja19oYXNoX3VwZGF0ZShjdHgsIFx1MDAyNm1hcF9zb2NrcywgXHUwMDI2Y29va2llLCBCUEZfTk9FWElTVCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NrX3NrYi9zdHJlYW1fdmVyZGljdFwmIzM0OykgaW50IG9uX3JlY3Yoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mOTZiNDY3M2M5NzdjY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xuQEAgLTAsMCAmIzQzOzEsMjg4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9saWJicGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNQVhfSVRFUkFUSU9OUyAxMDBcbiYjNDM7I2RlZmluZSBQQVlMT0FEX0VORCAmIzM5O2UmIzM5O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBzdGFydF9saXN0ZW5pbmcoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCB1aW50MTZfdCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuJiM0MztcdHNvY2tsZW5fdCBhZGRybGVuO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShmZCwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGxpc3RlbihmZCwgNSksIDApO1xuJiM0MztcbiYjNDM7XHRhZGRybGVuID0gc2l6ZW9mKGFkZHIpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBcdTAwMjZhZGRybGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwcm9jZXNzX2NsaWVudChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgYXRvbWljX2ludCAqcnVubmluZylcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzEwMjRdO1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xuJiM0MztcbiYjNDM7XHR0aW1lby50dl9zZWMgPSAwO1xuJiM0MztcdHRpbWVvLnR2X3VzZWMgPSAxMDAwO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnRpbWVvLCBzaXplb2YodGltZW8pKSwgMCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xuJiM0MztcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSAtMSkge1xuJiM0MztcdFx0XHRFWFBFQ1RfVFJVRShlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRFWFBFQ1RfR0UobGVuLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYz0gMCB8fCBidWZbbGVuIC0gMV0gPT0gUEFZTE9BRF9FTkQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdGUoZmQsIFwmIzM0O3Rlc3RcJiMzNDssIDQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBicGZfdCB7XG4mIzQzO1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKm9uX3NvY2tvcHM7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3QgKmJwZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRpbnQgY2dyb3VwO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xuJiM0MztcdGJwZi1cdTAwM2VvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUocGF0aCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShicGYtXHUwMDNlb2JqLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEoYnBmX29iamVjdF9fbG9hZChicGYtXHUwMDNlb2JqKSwgMCk7XG4mIzQzO1xuJiM0MztcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcJiMzNDtvbl9zb2Nrb3BzXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGNncm91cCA9IG9wZW4oXCYjMzQ7L3N5cy9mcy9jZ3JvdXBcJiMzNDssIE9fUkRPTkxZKTtcbiYjNDM7XHRBU1NFUlRfTkUoY2dyb3VwLCAtMSk7XG4mIzQzO1xuJiM0MztcdGJwZi1cdTAwM2Vvbl9zb2Nrb3BzID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAocHJvZywgY2dyb3VwKTtcbiYjNDM7XHRjbG9zZShjZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoYnBmLVx1MDAzZW9uX3NvY2tvcHMsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVjdikge1xuJiM0MztcdFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IGJwZl9vYmplY3RfX2ZpbmRfbWFwX2J5X25hbWUoYnBmLVx1MDAzZW9iaiwgXCYjMzQ7bWFwX3NvY2tzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfTkUobWFwLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVx1MDAzZW9iaiwgXCYjMzQ7b25fcmVjdlwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0YnBmLVx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XG4mIzQzO1x0XHRBU1NFUlRfTkUoYnBmLVx1MDAzZW9uX3JlY3YsIE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHNlcnZlcl90IHtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0YXRvbWljX2ludCBydW5uaW5nO1xuJiM0MztcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0c3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqbWV0YWRhdGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcbiYjNDM7XHRzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEgPSBzZXJ2ZXItXHUwMDNlbWV0YWRhdGE7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhdG9taWNfbG9hZChcdTAwMjZzZXJ2ZXItXHUwMDNlcnVubmluZykpIHtcbiYjNDM7XHRcdGludCBjbGllbnRfZmQgPSBhY2NlcHQoc2VydmVyLVx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY2xpZW50X2ZkID09IC0xKSB7XG4mIzQzO1x0XHRcdGlmICghYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHJvY2Vzc19jbGllbnQoX21ldGFkYXRhLCBjbGllbnRfZmQsIFx1MDAyNnNlcnZlci1cdTAwM2VydW5uaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHJlbWFpbmluZyA9IGxlbjtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3NpemVfdCBieXRlcyA9IHdyaXRlKGZkLCBidWYgJiM0MzsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJ5dGVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZW1haW5pbmcgLT0gYnl0ZXM7XG4mIzQzO1x0fSB3aGlsZSAocmVtYWluaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkUoc29ja21hcF9yZWN2ZnJvbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzZXJ2ZXJfdCBzZXJ2ZXI7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4mIzQzO1x0c3RydWN0IGJwZl90IGJwZjtcbiYjNDM7XHRjaGFyICpwYXlsb2FkO1xuJiM0MztcdHNpemVfdCBwYXlsb2FkX2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB3aXRoX3JlY3Y7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHNvY2ttYXBfcmVjdmZyb20sIHJlY3Ztc2cpXG4mIzQzO3tcbiYjNDM7XHQud2l0aF9yZWN2ID0gZmFsc2VcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZ19wYXJzZXIpXG4mIzQzO3tcbiYjNDM7XHQud2l0aF9yZWN2ID0gdHJ1ZVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnNlbGYtXHUwMDNlYWRkciwgMCwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXBheWxvYWRfbGVuID0gMTAyNCAqIDEwMjQgKiAyNTtcbiYjNDM7XHRzZWxmLVx1MDAzZXBheWxvYWQgPSBtYWxsb2Moc2VsZi1cdTAwM2VwYXlsb2FkX2xlbik7XG4mIzQzO1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlcGF5bG9hZCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdG1lbXNldChzZWxmLVx1MDAzZXBheWxvYWQsIDAsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuJiM0MztcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSBQQVlMT0FEX0VORDtcbiYjNDM7XG4mIzQzO1x0c2V0dXBfYnBmKF9tZXRhZGF0YSwgXCYjMzQ7c29ja21hcF9yZWN2ZnJvbS5icGYub1wmIzM0OywgdmFyaWFudC1cdTAwM2V3aXRoX3JlY3YsIFx1MDAyNnNlbGYtXHUwMDNlYnBmKTtcbiYjNDM7XHRhdG9taWNfc3RvcmUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIucnVubmluZywgMSk7XG4mIzQzO1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWFkZHIuc2luX3BvcnQpO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLm1ldGFkYXRhID0gX21ldGFkYXRhO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCwgXHUwMDI2cnVuX3NlcnZlciwgXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfc3RvcmUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIucnVubmluZywgMCk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXNlcnZlci5mZCkge1xuJiM0MztcdFx0c2h1dGRvd24oc2VsZi1cdTAwM2VzZXJ2ZXIuZmQsIFNIVVRfUkQpO1xuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZClcbiYjNDM7XHRcdHB0aHJlYWRfam9pbihzZWxmLVx1MDAzZXNlcnZlci50aHJlYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRmcmVlKHNlbGYtXHUwMDNlcGF5bG9hZCk7XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cdTAwM2VicGYub25fc29ja29wcyk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KVxuJiM0MztcdFx0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cdTAwM2VicGYub25fcmVjdik7XG4mIzQzO1xuJiM0MztcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlYnBmLm9iaik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCBub190aW1lb3V0KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBpZ25vcmVkWzEyOF07XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdGludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9ORShmZCwgLTEpO1xuJiM0MztcdFx0QVNTRVJUX0VRKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKSwgMCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVx1MDAzZXBheWxvYWQsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdEFTU0VSVF9ORShlcnJubywgRUFHQUlOKTtcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHRpbWUtXHUwMDNldHZfc2VjICogMTAwMDAwMDAwMExMKSAmIzQzOyB0aW1lLVx1MDAzZXR2X25zZWM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCB3aXRoX3RpbWVvdXQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbiYjNDM7XG4mIzQzO1x0dGltZW8udHZfc2VjID0gMDtcbiYjNDM7XHR0aW1lby50dl91c2VjID0gNTAwMDtcbiYjNDM7XG4mIzQzO1x0LyogcmVtb3ZlIHRoZSBwYXlsb2FkIGVuZCBkZWxpbWl0ZXIgc28gdGhlIHNlcnZlciBuZXZlciByZXNwb25kcyBhbmQgcmVjdmZyb20gdGltZXMgb3V0LiAqL1xuJiM0MztcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0lURVJBVElPTlM7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGltZXNwZWMgYmVnO1xuJiM0MztcdFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUShzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YmVnKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSwgLTEpO1xuJiM0MztcdFx0ZXJyID0gZXJybm87XG4mIzQzO1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2ZW5kKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoZXJyLCBFQUdBSU4pO1xuJiM0MztcdFx0QVNTRVJUX0dFKHRvX25hbm9zKFx1MDAyNmVuZCkgLSB0b19uYW5vcyhcdTAwMjZiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIFRDUCBCUEYgcmVjdm1zZyBmdW5jdGlvbnMgKHRjcF9icGZfcmVjdm1zZ19wYXJzZXIgYW5kIHRjcF9icGZfcmVjdm1zZykgd2hpY2ggYXJlIHJlYWNoYWJsZSB3aGVuIGEgVENQIHNvY2tldCBpcyBhZGRlZCB0byBhIEJQRiBzb2NrbWFwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nL0JQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjViZTI0YjZiZjgzZTBhY2E2NTBjZWNjMjQ1YTk0NDQ0Mzg2ZmYxYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDA2OjQ1OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IGNjMGJkNzNmMzZiNmQ2Li5lNThhYjJkMWVlOTQzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9icGYuYwpAQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpOwogCiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKLQkJCSAgICAgbG9uZyB0aW1lbykKJiM0MzsJCQkgICAgIGxvbmcgKnRpbWVvKQogewogCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAJaW50IHJldCA9IDA7CkBAIC0xODcsMTIgJiM0MzsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCiAJaWYgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV04pCiAJCXJldHVybiAxOwogCi0JaWYgKCF0aW1lbykKJiM0MzsJaWYgKCEqdGltZW8pCiAJCXJldHVybiByZXQ7CiAKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZhbXA7d2FpdCk7CiAJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKLQlyZXQgPSBza193YWl0X2V2ZW50KHNrLCAmYW1wO3RpbWVvLAomIzQzOwlyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbywKIAkJCSAgICAhbGlzdF9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX21zZykgfHwKIAkJCSAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpLCAmYW1wO3dhaXQpOwogCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKQEAgLTIyOSw2ICYjNDM7MjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzaywKIAlpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7CiAJaW50IGNvcGllZCA9IDA7CiAJdTMyIHNlcTsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0yNjIsNiAmIzQzOzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCX0KIAl9CiAKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsICZhbXA7Y29waWVkX2Zyb21fc2VsZik7CiAJLyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHkKQEAgLTI4MCw3ICYjNDM7MjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzaywKIAl9CiAJc2VxICYjNDM7PSBjb3BpZWRfZnJvbV9zZWxmOwogCWlmICghY29waWVkKSB7Ci0JCWxvbmcgdGltZW87CiAJCWludCBkYXRhOwogCiAJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKIAkJaWYgKCF0aW1lbykgewogCQkJY29waWVkID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwpAQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssICZhbXA7dGltZW8pOwogCQlpZiAoZGF0YSAmbHQ7IDApIHsKIAkJCWNvcGllZCA9IGRhdGE7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQlpZiAoZGF0YSAmYW1wOyZhbXA7ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpCiAJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiBvdXQ6CkBAIC0zNTUsNiAmIzQzOzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogewogCXN0cnVjdCBza19wc29jayAqcHNvY2s7CiAJaW50IGNvcGllZCwgcmV0OwomIzQzOwlsb25nIHRpbWVvOwogCiAJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IE1TR19FUlJRVUVVRSkpCiAJCXJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTsKQEAgLTM3MSwxNCAmIzQzOzM3NSw0NSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwogCX0KIAlsb2NrX3NvY2soc2spOwomIzQzOwomIzQzOwl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiYjNDM7CiBtc2dfYnl0ZXNfcmVhZHk6CiAJY29waWVkID0gc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpOwogCWlmICghY29waWVkKSB7Ci0JCWxvbmcgdGltZW87CiAJCWludCBkYXRhOwogCi0JCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKLQkJZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pOwomIzQzOwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkgewomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCXJldCA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV04pIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKJiM0MzsJCQlyZXQgPSAtRU5PVENPTk47CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRpbWVvKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQlyZXQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CkBAIC0zOTAsNiAmIzQzOzQyNSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiAJCQlyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7CiAJCX0KJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiAJcmV0ID0gY29waWVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZQppbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCkBAIC0zOSw2ICYjNDM7MzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkcgogc2tfc29fcGVla19vZmYKIHNrZl9uZXRfb2ZmCiBzb2NrZXQKJiM0Mztzb2NrbWFwX3JlY3Zmcm9tCiYjNDM7c29ja21hcF9yZWN2ZnJvbS5icGYubwogc29faW5jb21pbmdfY3B1CiBzb19uZXRuc19jb29raWUKIHNvX3Jjdl9saXN0ZW5lcgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDcwOGQ5NjBhZTA3ZDViLi5hMDVhNGE5MjQ0MDIxMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMTYxLDYgJiM0MzsxNjEsNyBAQCBURVNUX0dFTl9GSUxFUyA6PSBcCiAJc29fbmV0bnNfY29va2llIFwKIAlzb19yY3ZfbGlzdGVuZXIgXAogCXNvY2tldCBcCiYjNDM7CXNvY2ttYXBfcmVjdmZyb20uYnBmLm8gXAogCXN0cmVzc19yZXVzZXBvcnRfbGlzdGVuIFwKIAl0Y3BfZmFzdG9wZW5fYmFja3VwX2tleSBcCiAJdGNwX2lucSBcCkBAIC0xOTEsNiAmIzQzOzE5Miw3IEBAIFRFU1RfR0VOX1BST0dTIDo9IFwKIAlza19jb25uZWN0X3plcm9fYWRkciBcCiAJc2tfc29fcGVla19vZmYgXAogCXNvX2luY29taW5nX2NwdSBcCiYjNDM7CXNvY2ttYXBfcmVjdmZyb20gXAogCXRhcCBcCiAJdGNwX3BvcnRfc2hhcmUgXAogCXRscyBcCkBAIC0yMzgsMyAmIzQzOzI0MCw3IEBAICQoT1VUUFVUKS9iaW5kX2JoYXNoOiBMRExJQlMgJiM0Mzs9IC1scHRocmVhZAogJChPVVRQVVQpL2lvX3VyaW5nX3plcm9jb3B5X3R4OiBDRkxBR1MgJiM0Mzs9IC1JLi4vLi4vLi4vaW5jbHVkZS8KIAogaW5jbHVkZSBicGYubWsKJiM0MzsKJiM0MzskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogJChCUEZPQkopCiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IExETElCUyAmIzQzOz0gJChCUEZPQkopIC1sZWxmIC1seiAtbHB0aHJlYWQKJiM0MzskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogQ0ZMQUdTICYjNDM7PSAtSSQoT1VUUFVUKS90b29scy9pbmNsdWRlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZWM0NzBjNzM4ZjFlOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jCkBAIC0wLDAgJiM0MzsxLDMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQUZfSU5FVCAyCiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMTAyNCk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTY0KTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7CiYjNDM7fSBtYXBfc29ja3MgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja29wcyYjMzQ7KSBpbnQgb25fc29ja29wcyhzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpCiYjNDM7ewomIzQzOwlpZiAoY3R4LSZndDtmYW1pbHkgPT0gQUZfSU5FVCAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikgewomIzQzOwkJX191NjQgY29va2llID0gYnBmX2dldF9zb2NrZXRfY29va2llKGN0eCk7CiYjNDM7CiYjNDM7CQlicGZfc29ja19oYXNoX3VwZGF0ZShjdHgsICZhbXA7bWFwX3NvY2tzLCAmYW1wO2Nvb2tpZSwgQlBGX05PRVhJU1QpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtza19za2Ivc3RyZWFtX3ZlcmRpY3QmIzM0OykgaW50IG9uX3JlY3Yoc3RydWN0IF9fc2tfYnVmZiAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIFNLX1BBU1M7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY5NmI0NjczYzk3N2NjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYwpAQCAtMCwwICYjNDM7MSwyODggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2xpYmJwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGF0b21pYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNQVhfSVRFUkFUSU9OUyAxMDAKJiM0MzsjZGVmaW5lIFBBWUxPQURfRU5EICYjMzk7ZSYjMzk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBzdGFydF9saXN0ZW5pbmcoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCB1aW50MTZfdCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwomIzQzOwlzb2NrbGVuX3QgYWRkcmxlbjsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDthZGRyLCAwLCBzaXplb2YoYWRkcikpOwomIzQzOwlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShmZCwgLTEpOwomIzQzOwlBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShsaXN0ZW4oZmQsIDUpLCAwKTsKJiM0MzsKJiM0MzsJYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCAmYW1wO2FkZHJsZW4pLCAwKTsKJiM0MzsKJiM0MzsJKnBvcnQgPSBhZGRyLnNpbl9wb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHByb2Nlc3NfY2xpZW50KHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTAyNF07CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHRpbWVvOwomIzQzOwomIzQzOwl0aW1lby50dl9zZWMgPSAwOwomIzQzOwl0aW1lby50dl91c2VjID0gMTAwMDsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3RpbWVvLCBzaXplb2YodGltZW8pKSwgMCk7CiYjNDM7CiYjNDM7CXdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkgewomIzQzOwkJc3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CQlpZiAobGVuID09IC0xKSB7CiYjNDM7CQkJRVhQRUNUX1RSVUUoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCUVYUEVDVF9HRShsZW4sIDApOwomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7PSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZShmZCwgJiMzNDt0ZXN0JiMzNDssIDQpOwomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBicGZfdCB7CiYjNDM7CXN0cnVjdCBicGZfb2JqZWN0ICpvYmo7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqb25fc29ja29wczsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpvbl9yZWN2OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LAomIzQzOwkJCQkJCXN0cnVjdCBicGZfdCAqYnBmKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nOwomIzQzOwlpbnQgY2dyb3VwOwomIzQzOwomIzQzOwltZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpOwomIzQzOwlicGYtJmd0O29iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKGJwZi0mZ3Q7b2JqLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGJwZl9vYmplY3RfX2xvYWQoYnBmLSZndDtvYmopLCAwKTsKJiM0MzsKJiM0MzsJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi0mZ3Q7b2JqLCAmIzM0O29uX3NvY2tvcHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORShwcm9nLCBOVUxMKTsKJiM0MzsKJiM0MzsJY2dyb3VwID0gb3BlbigmIzM0Oy9zeXMvZnMvY2dyb3VwJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJQVNTRVJUX05FKGNncm91cCwgLTEpOwomIzQzOwomIzQzOwlicGYtJmd0O29uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApOwomIzQzOwljbG9zZShjZ3JvdXApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoYnBmLSZndDtvbl9zb2Nrb3BzLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJlY3YpIHsKJiM0MzsJCXN0cnVjdCBicGZfbWFwICptYXAgPSBicGZfb2JqZWN0X19maW5kX21hcF9ieV9uYW1lKGJwZi0mZ3Q7b2JqLCAmIzM0O21hcF9zb2NrcyYjMzQ7KTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9ORShtYXAsIE5VTEwpOwomIzQzOwomIzQzOwkJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi0mZ3Q7b2JqLCAmIzM0O29uX3JlY3YmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfTkUocHJvZywgTlVMTCk7CiYjNDM7CiYjNDM7CQlicGYtJmd0O29uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7CiYjNDM7CQlBU1NFUlRfTkUoYnBmLSZndDtvbl9yZWN2LCBOVUxMKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3Qgc2VydmVyX3QgewomIzQzOwlpbnQgZmQ7CiYjNDM7CWF0b21pY19pbnQgcnVubmluZzsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqbWV0YWRhdGE7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZzsKJiM0MzsJc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhID0gc2VydmVyLSZndDttZXRhZGF0YTsKJiM0MzsKJiM0MzsJd2hpbGUgKGF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkgewomIzQzOwkJaW50IGNsaWVudF9mZCA9IGFjY2VwdChzZXJ2ZXItJmd0O2ZkLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChjbGllbnRfZmQgPT0gLTEpIHsKJiM0MzsJCQlpZiAoIWF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwcm9jZXNzX2NsaWVudChfbWV0YWRhdGEsIGNsaWVudF9mZCwgJmFtcDtzZXJ2ZXItJmd0O3J1bm5pbmcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IHJlbWFpbmluZyA9IGxlbjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3NpemVfdCBieXRlcyA9IHdyaXRlKGZkLCBidWYgJiM0MzsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CQlpZiAoYnl0ZXMgJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZW1haW5pbmcgLT0gYnl0ZXM7CiYjNDM7CX0gd2hpbGUgKHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3Qgc2VydmVyOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc3RydWN0IGJwZl90IGJwZjsKJiM0MzsJY2hhciAqcGF5bG9hZDsKJiM0MzsJc2l6ZV90IHBheWxvYWRfbGVuOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlib29sIHdpdGhfcmVjdjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZykKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSBmYWxzZQomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcikKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSB0cnVlCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwltZW1zZXQoJmFtcDtzZWxmLSZndDthZGRyLCAwLCBzaXplb2Yoc2VsZi0mZ3Q7YWRkcikpOwomIzQzOwomIzQzOwlzZWxmLSZndDtwYXlsb2FkX2xlbiA9IDEwMjQgKiAxMDI0ICogMjU7CiYjNDM7CXNlbGYtJmd0O3BheWxvYWQgPSBtYWxsb2Moc2VsZi0mZ3Q7cGF5bG9hZF9sZW4pOwomIzQzOwlBU1NFUlRfTkUoc2VsZi0mZ3Q7cGF5bG9hZCwgTlVMTCk7CiYjNDM7CiYjNDM7CW1lbXNldChzZWxmLSZndDtwYXlsb2FkLCAwLCBzZWxmLSZndDtwYXlsb2FkX2xlbik7CiYjNDM7CXNlbGYtJmd0O3BheWxvYWRbc2VsZi0mZ3Q7cGF5bG9hZF9sZW4gLSAxXSA9IFBBWUxPQURfRU5EOwomIzQzOwomIzQzOwlzZXR1cF9icGYoX21ldGFkYXRhLCAmIzM0O3NvY2ttYXBfcmVjdmZyb20uYnBmLm8mIzM0OywgdmFyaWFudC0mZ3Q7d2l0aF9yZWN2LCAmYW1wO3NlbGYtJmd0O2JwZik7CiYjNDM7CWF0b21pY19zdG9yZSgmYW1wO3NlbGYtJmd0O3NlcnZlci5ydW5uaW5nLCAxKTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLmZkID0gc3RhcnRfbGlzdGVuaW5nKF9tZXRhZGF0YSwgJmFtcDtzZWxmLSZndDthZGRyLnNpbl9wb3J0KTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLm1ldGFkYXRhID0gX21ldGFkYXRhOwomIzQzOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7c2VsZi0mZ3Q7c2VydmVyLnRocmVhZCwgTlVMTCwgJmFtcDtydW5fc2VydmVyLCAmYW1wO3NlbGYtJmd0O3NlcnZlcik7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oc29ja21hcF9yZWN2ZnJvbSkKJiM0Mzt7CiYjNDM7CWF0b21pY19zdG9yZSgmYW1wO3NlbGYtJmd0O3NlcnZlci5ydW5uaW5nLCAwKTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O3NlcnZlci5mZCkgewomIzQzOwkJc2h1dGRvd24oc2VsZi0mZ3Q7c2VydmVyLmZkLCBTSFVUX1JEKTsKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O3NlcnZlci5mZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O3NlcnZlci50aHJlYWQpCiYjNDM7CQlwdGhyZWFkX2pvaW4oc2VsZi0mZ3Q7c2VydmVyLnRocmVhZCwgTlVMTCk7CiYjNDM7CiYjNDM7CWZyZWUoc2VsZi0mZ3Q7cGF5bG9hZCk7CiYjNDM7CWJwZl9saW5rX19kZXN0cm95KHNlbGYtJmd0O2JwZi5vbl9zb2Nrb3BzKTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O2JwZi5vbl9yZWN2KQomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi0mZ3Q7YnBmLm9uX3JlY3YpOwomIzQzOwomIzQzOwlicGZfb2JqZWN0X19jbG9zZShzZWxmLSZndDticGYub2JqKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpCiYjNDM7ewomIzQzOwljaGFyIGlnbm9yZWRbMTI4XTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCWludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOwomIzQzOwomIzQzOwkJQVNTRVJUX05FKGZkLCAtMSk7CiYjNDM7CQlBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7c2VsZi0mZ3Q7YWRkciwgc2l6ZW9mKHNlbGYtJmd0O2FkZHIpKSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtJmd0O3BheWxvYWQsIHNlbGYtJmd0O3BheWxvYWRfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CQlpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgJmx0OyAwKQomIzQzOwkJCUFTU0VSVF9ORShlcnJubywgRUFHQUlOKTsKJiM0MzsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHRpbWUtJmd0O3R2X3NlYyAqIDEwMDAwMDAwMDBMTCkgJiM0MzsgdGltZS0mZ3Q7dHZfbnNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dCkKJiM0Mzt7CiYjNDM7CWNoYXIgaWdub3JlZFsxMjhdOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0aW1lbzsKJiM0MzsKJiM0MzsJdGltZW8udHZfc2VjID0gMDsKJiM0MzsJdGltZW8udHZfdXNlYyA9IDUwMDA7CiYjNDM7CiYjNDM7CS8qIHJlbW92ZSB0aGUgcGF5bG9hZCBlbmQgZGVsaW1pdGVyIHNvIHRoZSBzZXJ2ZXIgbmV2ZXIgcmVzcG9uZHMgYW5kIHJlY3Zmcm9tIHRpbWVzIG91dC4gKi8KJiM0MzsJc2VsZi0mZ3Q7cGF5bG9hZFtzZWxmLSZndDtwYXlsb2FkX2xlbiAtIDFdID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBiZWc7CiYjNDM7CQlzdHJ1Y3QgdGltZXNwZWMgZW5kOwomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCWludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOwomIzQzOwomIzQzOwkJQVNTRVJUX05FKGZkLCAtMSk7CiYjNDM7CQlBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7c2VsZi0mZ3Q7YWRkciwgc2l6ZW9mKHNlbGYtJmd0O2FkZHIpKSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtJmd0O3BheWxvYWQsIHNlbGYtJmd0O3BheWxvYWRfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTsKJiM0MzsKJiM0MzsJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO2JlZyk7CiYjNDM7CQlBU1NFUlRfRVEocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCksIC0xKTsKJiM0MzsJCWVyciA9IGVycm5vOwomIzQzOwkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7ZW5kKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShlcnIsIEVBR0FJTik7CiYjNDM7CQlBU1NFUlRfR0UodG9fbmFub3MoJmFtcDtlbmQpIC0gdG9fbmFub3MoJmFtcDtiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7CiYjNDM7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFRDUCBCUEYgcmVjdm1zZyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBUQ1AgQlBGIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY0L3RjcF9icGYuY2AgZmlsZSBhbmQgYWRkaW5nIGEgbmV3IHNlbGZ0ZXN0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IG9wdGltaXppbmcgaG93IHdlIGhhbmRsZSBgcmVjdm1zZ2Agb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEJQRiBzb2NrbWFwIGZyYW1ld29yayBmb3IgVENQLgoKTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgdGNwX21zZ193YWl0X2RhdGFgIHRvIGFjY2VwdCBhIHBvaW50ZXIgdG8gYSB0aW1lb3V0IChgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YgYGxvbmcgdGltZW9gKSBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gVGhpcyBsaWtlbHkgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byAqbW9kaWZ5KiB0aGUgdGltZW91dCB2YWx1ZSwgd2hpY2ggc2lnbmFscyBzb21lIGludGVybmFsIHN0YXRlIHRvIHRoZSBjYWxsZXIuIFRoZSBwYXRjaCB0aGVuIGNvcnJlY3RseSB1cGRhdGVzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uczogYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCB0byBwYXNzIHRoZSAqYWRkcmVzcyogb2YgdGhlIHRpbWVvdXQgdmFyaWFibGUgKCZhbXA7dGltZW8pLiBUaGUgYWRkaXRpb24gb2YgdGhlIGAhZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMGAgY2hlY2tzIHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgYSBtZWNoYW5pc20gdG8gYmFpbCBvdXQgZWFybHkgZnJvbSB3YWl0aW5nLCBwb3NzaWJseSBpZiB0aGUgdGltZW91dCBleHBpcmVzIG9yIGEgZGlmZmVyZW50IGNvbmRpdGlvbiBhcmlzZXMuIFRoZXNlIGNvbmRpdGlvbmFsIGp1bXBzIGFyZSBpbXBvcnRhbnQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyBzdHJhaWdodDogdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlIGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb24gY2FsbHMgYW5kIHRoZSB0aW1lb3V0IGxvZ2ljIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQlBGIHNvY2tldCBtYXAgcHJvY2Vzc2luZywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZCB0byBkYXRhIGF2YWlsYWJpbGl0eSBhbmQgdGltZW91dCBiZWhhdmlvci4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqcmVhY2hhYmxlKiB0aGlzIGNvZGUgaXMuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB0aGlzIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIEtjb25maWcgb3B0aW9uLiBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBmaWxlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBvdGhlciBLY29uZmlnIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgYXMgd2VsbDsgSSYjMzk7bGwgbmVlZCB0byBtYXAgb3V0IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGNoYW5nZSBpcyB1bmRlciB0aGUgZXhwZWN0ZWQgY29uZGl0aW9ucy4gVGhpcyBpcyBmdW5kYW1lbnRhbDogSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCB0byBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcmVsZXZhbmNlIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgJiM0Mzs9IHRjcF9pbGxpbm9pcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB1ZHBfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgZW5hYmxlcyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYW5kIHRyYWNlIGJhY2sgaXRzIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWN0aXZhdGUgaW4gb3JkZXIgdG8gZ2V0IGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBlbmFibGVkIGFuZCB3b3JraW5nIHByb3Blcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHByb2plY3QuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhpcyB3aWxsIGJlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LCBidXQgbGV0JiMzOTtzIHRha2Ugbm90aGluZyBmb3IgZ3JhbnRlZCBhbmQgc3RhcnQgZGlnZ2luZyBpbiwgYXMgdGhlcmUgbWlnaHQgYmUgYSBmZXcgb3RoZXIgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbi0tXG5uZXQvS2NvbmZpZy00NzgtXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctNDgwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIEJvb2xlYW4gRmxhZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIGEgaGlkZGVuIGJvb2xlYW4gdmFyaWFibGUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgYmVoYXZpb3IuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byB0aGlzIGZsYWcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdGhlbiBzZWUgd2hhdCYjMzk7cyBhZmZlY3RpbmcgaXRzIHZhbHVlLiBGaW5kaW5nIHRoZSBwb2ludHMgd2hlcmUgdGhlIGJvb2xlYW4gaXMgYWN0dWFsbHkgc2VsZWN0ZWQgKG9yIHNldCkgaXMgdGhlIG5leHQgdml0YWwgcGllY2Ugb2YgdGhpcyBwdXp6bGU7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0aGF0JiMzOTtzIGRyaXZpbmcgaXRzIHN0YXRlIHRyYW5zaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgbmV0d29ya2luZyBhbmQgZUJQRjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBDb25uZWN0aW9uIHRvIGBORVRfU09DS19NU0dgKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIHRvIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IEkmIzM5O3ZlIHVzZWQgYm90aCBidXQgaGF2ZW4mIzM5O3QgcmVhbGx5IGRlZXBseSBjb25zaWRlcmVkIHRoZWlyIGludGVyYWN0aW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMuIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hhdCBsaW5rcyB0aGVtLiBXaGF0IHBhcnQgb2YgdGhlIHN5c3RlbSBpcyB0aGUgZ2x1ZSBiZXR3ZWVuIHRoZXNlIHR3byBmZWF0dXJlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtlcm5lbCBtb2R1bGVzLCBvciBkcml2ZXIgaW50ZXJhY3Rpb25zIGJyaW5nIHRoZW0gdG9nZXRoZXIuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhdXNhbCBjaGFpbi4gV2hlcmUgZG9lcyB0aGUgc3RyZWFtIHBhcnNlciBnZXQgc2V0IHVwLCBhbmQgaG93IGRvZXMgdGhhdCBwcm9jZXNzIGRpcmVjdGx5IGxlYWQgdG8gdGhlIHV0aWxpemF0aW9uIG9yIHNldHVwIG9mIGBORVRfU09DS19NU0dgPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjgwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgZUJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24gJmFtcDsgU29ja21hcCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgb3B0aW9uIGlzIHByZXNlbnRlZCBhcyBhIHVzZXItY29uZmlndXJhYmxlIGJvb2xlYW4sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBpdHMgaW1wbGljYXRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGVCUEYgZmVhdHVyZXMuCgpJIGFsc28gc3VzcGVjdCB0aGF0IGBDR1JPVVBfQlBGYCBtaWdodCBiZSBhIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGUsIHBhcnRpY3VsYXJseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29ja21hcHMuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGV4cGxvcmUgdGhlIGludGVycGxheSBvZiBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoZSBzb2NrZXQgbWFwIGltcGxlbWVudGF0aW9uIGFuZCBjbG9zZWx5IHJlbGF0ZWQgZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvY29yZS9zb2NrX21hcC5jYCBvciBhIHNpbWlsYXJseSByZWxhdGVkIGZpbGUgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkEgUmVhbGl6YXRpb24gQWJvdXQgQlBGX1NZU0NBTEwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIHdhcyBqdXN0IHRyYWNpbmcgdGhyb3VnaCB0aGUgQlBGIGluZnJhc3RydWN0dXJlLCBhbmQgSSB3YXMgcHJldHR5IHN1cmUgSSB3YXMgZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gYSB3aG9sZSBidW5jaCBvZiBrZXJuZWwgc291cmNlIGNvZGUgdG8gZmlndXJlIG91dCB3aGVyZSBgQlBGX1NZU0NBTExgIHdhcyBkZWZpbmVkLCBleHBlY3RpbmcgaXQgdG8gYmUgYnVyaWVkIGRlZXAgaW4gc29tZSBvYnNjdXJlIGhlYWRlci4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGluaXQvS2NvbmZpZ2A/IFNlcmlvdXNseT8gSSBzaG91bGQgaGF2ZSB0aG91Z2h0IG9mIHRoYXQgZmlyc3Q7IGl0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGNoZWNrIGdpdmVuIG15IGV4cGVyaWVuY2UuIFRoYXQmIzM5O3MgYSBodWdlIHRpbWUgc2F2ZXIuIEkgY2FuIHByb2JhYmx5IGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGEgbG90IGZhc3RlciBub3cuIEkgZmVlbCBhIHNsaWdodCBlbWJhcnJhc3NtZW50IHRoYXQgSSBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBLY29uZmlnYCwgdG8gYmUgaG9uZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGB0Y3BfYnBmLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgc29tZSBCUEYgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBrZXkgZnVuY3Rpb25zIEkmIzM5O20gc2VlaW5nIGFyZSBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIGRlZmluaXRlbHkgYWN0aXZlIGFuZCBvcGVyYXRpb25hbCBjb21wb25lbnRzLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUgZ29pbmcgdG8gYmUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgZmxvd3MgdGhyb3VnaCB0aGVzZS4gV2hpbGUgYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgSSYjMzk7bSBub3QgZ29pbmcgdG8gZGlzbWlzcyBpdCByaWdodCBhd2F5LiBJdCYjMzk7cyBzdGlsbCBhIGdvb2Qgc3ltYm9sIHRvIHRyYWNrLCBlc3BlY2lhbGx5IGlmIGlubGluaW5nIGlzbiYjMzk7dCBoYXBwZW5pbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgaW5saW5pbmcgc3RhdHVzLCBvZiBjb3Vyc2UuCgpUaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgcmVhY2hhYmlsaXR5IG9mIGB0Y3BfYnBmX3JlY3Ztc2dgLiBJIGNhbiBzZWUgdGhhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgY2FsbHMgaXQsIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGFsc28gcmVnaXN0ZXJlZCBhcyBhIHByb3RvIGhhbmRsZXIgZm9yIHNvY2ttYXAgaXMgcmVhbGx5IGludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQgZm9yIGludGVyYWN0aW5nIHdpdGggQlBGIGZyb20gdXNlcnNwYWNlLCB3aGljaCBJIG5lZWQgdG8gZXhhbWluZSB2ZXJ5IGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTMzOD1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTM1NS1cbm5ldC9pcHY0L3RjcF9icGYuYzozNTY6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVx0XHRcdCAgIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjYwPXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY2NS1cdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVx0XHQ9IHNvY2tfbWFwX2Nsb3NlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY2NjpcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY2Ny1cdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjczLVx0cHJvdFtUQ1BfQlBGX1JYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY3NDpcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc1LVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ni1cdHByb3RbVENQX0JQRl9UWFJYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2Nzc6XHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc4LX1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzEwPWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MzMtXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzM0Olx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cbm5ldC9pcHY0L3RjcF9icGYuYy03MzUtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUQ1AgQlBGIFNvY2tldG1hcCBIYW5kbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCAtIHRoZXNlIGFyZSB0aGUgYHJlY3Ztc2dgIGhhbmRsZXJzIGZvciBUQ1Agc29ja2V0cyB3aGVuIHRoZXkmIzM5O3JlIHVzZWQgd2l0aGluIGEgQlBGIHNvY2ttYXAuIFRoaXMgc2VlbXMgbGlrZSBhIHByb21pc2luZyBhcmVhIGZvciBmdXp6aW5nLCBhYnNvbHV0ZWx5LiAKClRoZSBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBhcmUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBiZWNhdXNlLCBhcyBJIHJlY2FsbCwgYEJQRl9TVFJFQU1fUEFSU0VSYCBzZWxlY3RzIGBORVRfU09DS19NU0dgLiBXaGlsZSBgQ0dST1VQX0JQRmAgaXMgb2Z0ZW4gcGFpcmVkIHdpdGggc29ja21hcHMsIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYXJlIHRoZSBjcml0aWNhbCBmbGFncyBoZXJlLgoKTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgZXNzZW50aWFsIGZvciB0aGUgYHRjcF9icGYuY2AgbW9kdWxlLiBIbW0sIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGluY2x1ZGVzIGBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vYC4gUmlnaHQsIHRoYXQgY29uZmlybXMgaXQgLSBgTkVUX1NPQ0tfTVNHYCAqaXMqIG5lZWRlZC4gR2l2ZW4gdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIHNlbGVjdHMgYE5FVF9TT0NLX01TR2AsIGFuZCBUTFMgYWxzbyBzZWxlY3RzIGBORVRfU09DS19NU0dgLCBzcGVjaWZ5aW5nIGJvdGggYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBzaG91bGQgY292ZXIgYWxsIHRoZSBiYXNlcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBleHBvcnRlZC4gT2theSwgaXQmIzM5O3Mgc3RhdGljOgoKYGBgYwpzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKCQkJICAgICBsb25nICp0aW1lbykKYGBgCgpTbyB0aGF0IGNvbmZpcm1zIGl0LCB3ZSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC4gTGV0JiMzOTtzIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24gYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBhcyB0aGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGRlZmluaXRpb24gaW4gYG5ldC9LY29uZmlnYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1NAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBCUEYgcmVjdm1zZyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgYXMgdGhlIGxpa2VseSBjb25maWd1cmF0aW9uIGhlcmUuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWdzIHRoYXQgd291bGQgYWxzbyBuZWVkIGF0dGVudGlvbi4gQWxyaWdodCwgaXQgc2VlbXMgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgYSBoaWRkZW4gY29uZmlnIHRoYXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYEJQRl9TVFJFQU1fUEFSU0VSYC4gR29vZCwgdGhhdCBtZWFucyBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBjb25maWcgd2UgbmVlZCB0byBlbmFibGUgdG8gdHJpZ2dlciB0aGlzLgoKTGV0JiMzOTtzIHN5bnRoZXNpemUgdGhpczoKCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaC4gVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdGFyZ2V0IGFyZSBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGB0Y3BfYnBmX3JlY3Ztc2dgLCBhbmQgYHRjcF9tc2dfd2FpdF9kYXRhYC4KClRvIG1ha2UgaXQgYWxsIHdvcmssIHdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgICh0aGF0JiMzOTtzIGEgZ2l2ZW4pICphbmQqIGNyaXRpY2FsbHksIGBCUEZfU1RSRUFNX1BBUlNFUmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIGByZWN2bXNnYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBhcmUgdGhlIGFmZmVjdGVkIHJvdXRpbmVzLiBUaGUgaW1wYWN0IGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSB0byBmb2N1cyBmb3IgYW4gZXhwbG9pdC4gSXQmIzM5O3MgdHJpZ2dlcmVkIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGluY2x1ZGVkIGluIGEgQlBGIHNvY2ttYXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIFRDUCBCUEYgcmVjdm1zZyBmdW5jdGlvbnMgKHRjcF9icGZfcmVjdm1zZ19wYXJzZXIgYW5kIHRjcF9icGZfcmVjdm1zZykgd2hpY2ggYXJlIHJlYWNoYWJsZSB3aGVuIGEgVENQIHNvY2tldCBpcyBhZGRlZCB0byBhIEJQRiBzb2NrbWFwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nL0JQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfbXNnX3dhaXRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIHJlY3Ztc2cgZnVuY3Rpb25zICh0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyIGFuZCB0Y3BfYnBmX3JlY3Ztc2cpIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBhIFRDUCBzb2NrZXQgaXMgYWRkZWQgdG8gYSBCUEYgc29ja21hcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo0NS45NjM0NjQ3NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NDQ1NTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo0NS45NjM0NzMyMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTM1OTM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1YmUyNGI2YmY4M2UwYWNhNjUwY2VjYzI0NWE5NDQ0NDM4NmZmMWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDY6NDU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmU1OGFiMmQxZWU5NDMzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0xNzksNyArMTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLVxcdFxcdFxcdCAgICAgbG9uZyB0aW1lbylcXG4rXFx0XFx0XFx0ICAgICBsb25nICp0aW1lbylcXG4ge1xcbiBcXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4tXFx0aWYgKCF0aW1lbylcXG4rXFx0aWYgKCEqdGltZW8pXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcXG4tXFx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXFx1MDAyNnRpbWVvLFxcbitcXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcXG4gXFx0XFx0XFx0ICAgICFsaXN0X2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19tc2cpIHx8XFxuIFxcdFxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0aW50IGNvcGllZF9mcm9tX3NlbGYgPSAwO1xcbiBcXHRpbnQgY29waWVkID0gMDtcXG4gXFx0dTMyIHNlcTtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMjYyLDYgKzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFxcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcXG4gXFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcXG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdH1cXG4gXFx0c2VxICs9IGNvcGllZF9mcm9tX3NlbGY7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4gXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG5AQCAtMjk5LDcgKzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gXFx0XFx0aWYgKCF0aW1lbykge1xcbiBcXHRcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG5AQCAtMzEwLDEzICszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwMjZcXHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuIFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRpZiAoIWRhdGEgXFx1MDAyNlxcdTAwMjYgdGltZW8gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcXG4gXFx0XFx0Y29waWVkID0gLUVBR0FJTjtcXG4gXFx0fVxcbiBvdXQ6XFxuQEAgLTM1NSw2ICszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbiBcXHRpbnQgY29waWVkLCByZXQ7XFxuK1xcdGxvbmcgdGltZW87XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxcbiBcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuQEAgLTM3MSwxNCArMzc1LDQ1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdH1cXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFxuK1xcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbitcXG4gbXNnX2J5dGVzX3JlYWR5OlxcbiBcXHRjb3BpZWQgPSBza19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4tXFx0XFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkge1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc29ja19lcnJvcihzayk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PVENPTk47XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXRpbWVvKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFxcdTAwMjZ0aW1lbyk7XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRyZXQgPSBkYXRhO1xcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG5AQCAtMzkwLDYgKzQyNSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRcXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcdHJldCA9IGNvcGllZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxcbmluZGV4IGM5ZjQ2MDMxYWM3M2IyLi5hMTg0MGE1ZDQ1ZjY3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXFxuQEAgLTM5LDYgKzM5LDggQEAgc2tfY29ubmVjdF96ZXJvX2FkZHJcXG4gc2tfc29fcGVla19vZmZcXG4gc2tmX25ldF9vZmZcXG4gc29ja2V0XFxuK3NvY2ttYXBfcmVjdmZyb21cXG4rc29ja21hcF9yZWN2ZnJvbS5icGYub1xcbiBzb19pbmNvbWluZ19jcHVcXG4gc29fbmV0bnNfY29va2llXFxuIHNvX3Jjdl9saXN0ZW5lclxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uYTA1YTRhOTI0NDAyMTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTE2MSw2ICsxNjEsNyBAQCBURVNUX0dFTl9GSUxFUyA6PSBcXFxcXFxuIFxcdHNvX25ldG5zX2Nvb2tpZSBcXFxcXFxuIFxcdHNvX3Jjdl9saXN0ZW5lciBcXFxcXFxuIFxcdHNvY2tldCBcXFxcXFxuK1xcdHNvY2ttYXBfcmVjdmZyb20uYnBmLm8gXFxcXFxcbiBcXHRzdHJlc3NfcmV1c2Vwb3J0X2xpc3RlbiBcXFxcXFxuIFxcdHRjcF9mYXN0b3Blbl9iYWNrdXBfa2V5IFxcXFxcXG4gXFx0dGNwX2lucSBcXFxcXFxuQEAgLTE5MSw2ICsxOTIsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxcXFxuIFxcdHNrX2Nvbm5lY3RfemVyb19hZGRyIFxcXFxcXG4gXFx0c2tfc29fcGVla19vZmYgXFxcXFxcbiBcXHRzb19pbmNvbWluZ19jcHUgXFxcXFxcbitcXHRzb2NrbWFwX3JlY3Zmcm9tIFxcXFxcXG4gXFx0dGFwIFxcXFxcXG4gXFx0dGNwX3BvcnRfc2hhcmUgXFxcXFxcbiBcXHR0bHMgXFxcXFxcbkBAIC0yMzgsMyArMjQwLDcgQEAgJChPVVRQVVQpL2JpbmRfYmhhc2g6IExETElCUyArPSAtbHB0aHJlYWRcXG4gJChPVVRQVVQpL2lvX3VyaW5nX3plcm9jb3B5X3R4OiBDRkxBR1MgKz0gLUkuLi8uLi8uLi9pbmNsdWRlL1xcbiBcXG4gaW5jbHVkZSBicGYubWtcXG4rXFxuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IExETElCUyArPSAkKEJQRk9CSikgLWxlbGYgLWx6IC1scHRocmVhZFxcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogQ0ZMQUdTICs9IC1JJChPVVRQVVQpL3Rvb2xzL2luY2x1ZGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZlYzQ3MGM3MzhmMWU4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXFxuQEAgLTAsMCArMSwzMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgQUZfSU5FVCAyXFxuK1xcbitjaGFyIExJQ0VOU0VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XFxuK1xcdF9fdHlwZShrZXksIF9fdTY0KTtcXG4rXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuK1xcbit9IG1hcF9zb2NrcyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInNvY2tvcHNcXFwiKSBpbnQgb25fc29ja29wcyhzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpXFxuK3tcXG4rXFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfQUNUSVZFX0VTVEFCTElTSEVEX0NCKSB7XFxuK1xcdFxcdF9fdTY0IGNvb2tpZSA9IGJwZl9nZXRfc29ja2V0X2Nvb2tpZShjdHgpO1xcbitcXG4rXFx0XFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcXHUwMDI2bWFwX3NvY2tzLCBcXHUwMDI2Y29va2llLCBCUEZfTk9FWElTVCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInNrX3NrYi9zdHJlYW1fdmVyZGljdFxcXCIpIGludCBvbl9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gU0tfUEFTUztcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY5NmI0NjczYzk3N2NjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmNcXG5AQCAtMCwwICsxLDI4OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvbGliYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXRvbWljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXFxuKyNkZWZpbmUgUEFZTE9BRF9FTkQgJ2UnXFxuK1xcbitzdGF0aWMgaW50IHN0YXJ0X2xpc3RlbmluZyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIHVpbnQxNl90ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xcbitcXHRzb2NrbGVuX3QgYWRkcmxlbjtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbitcXHRhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XFxuK1xcbitcXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xcbitcXG4rXFx0QVNTRVJUX05FKGZkLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xcbitcXHRBU1NFUlRfRVEobGlzdGVuKGZkLCA1KSwgMCk7XFxuK1xcbitcXHRhZGRybGVuID0gc2l6ZW9mKGFkZHIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIFxcdTAwMjZhZGRybGVuKSwgMCk7XFxuK1xcbitcXHQqcG9ydCA9IGFkZHIuc2luX3BvcnQ7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHByb2Nlc3NfY2xpZW50KHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nKVxcbit7XFxuK1xcdGNoYXIgYnVmWzEwMjRdO1xcbitcXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcXG4rXFxuK1xcdHRpbWVvLnR2X3NlYyA9IDA7XFxuK1xcdHRpbWVvLnR2X3VzZWMgPSAxMDAwO1xcbitcXG4rXFx0RVhQRUNUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcXG4rXFxuK1xcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xcbitcXHRcXHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGlmIChsZW4gPT0gLTEpIHtcXG4rXFx0XFx0XFx0RVhQRUNUX1RSVUUoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdEVYUEVDVF9HRShsZW4sIDApO1xcbitcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjPSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlKGZkLCBcXFwidGVzdFxcXCIsIDQpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbit9XFxuK1xcbitzdHJ1Y3QgYnBmX3Qge1xcbitcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKm9uX3NvY2tvcHM7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqb25fcmVjdjtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHNldHVwX2JwZihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcmVjdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl90ICpicGYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbitcXHRpbnQgY2dyb3VwO1xcbitcXG4rXFx0bWVtc2V0KGJwZiwgMCwgc2l6ZW9mKCpicGYpKTtcXG4rXFx0YnBmLVxcdTAwM2VvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUocGF0aCwgTlVMTCk7XFxuK1xcbitcXHRBU1NFUlRfTkUoYnBmLVxcdTAwM2VvYmosIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoYnBmX29iamVjdF9fbG9hZChicGYtXFx1MDAzZW9iaiksIDApO1xcbitcXG4rXFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi1cXHUwMDNlb2JqLCBcXFwib25fc29ja29wc1xcXCIpO1xcbitcXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XFxuK1xcbitcXHRjZ3JvdXAgPSBvcGVuKFxcXCIvc3lzL2ZzL2Nncm91cFxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0QVNTRVJUX05FKGNncm91cCwgLTEpO1xcbitcXG4rXFx0YnBmLVxcdTAwM2Vvbl9zb2Nrb3BzID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAocHJvZywgY2dyb3VwKTtcXG4rXFx0Y2xvc2UoY2dyb3VwKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShicGYtXFx1MDAzZW9uX3NvY2tvcHMsIE5VTEwpO1xcbitcXG4rXFx0aWYgKHJlY3YpIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IGJwZl9vYmplY3RfX2ZpbmRfbWFwX2J5X25hbWUoYnBmLVxcdTAwM2VvYmosIFxcXCJtYXBfc29ja3NcXFwiKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9ORShtYXAsIE5VTEwpO1xcbitcXG4rXFx0XFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi1cXHUwMDNlb2JqLCBcXFwib25fcmVjdlxcXCIpO1xcbitcXHRcXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XFxuK1xcbitcXHRcXHRicGYtXFx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XFxuK1xcdFxcdEFTU0VSVF9ORShicGYtXFx1MDAzZW9uX3JlY3YsIE5VTEwpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0cnVjdCBzZXJ2ZXJfdCB7XFxuK1xcdGludCBmZDtcXG4rXFx0YXRvbWljX2ludCBydW5uaW5nO1xcbitcXHRwdGhyZWFkX3QgdGhyZWFkO1xcbitcXHRzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICptZXRhZGF0YTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkICpydW5fc2VydmVyKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcXG4rXFx0c3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhID0gc2VydmVyLVxcdTAwM2VtZXRhZGF0YTtcXG4rXFxuK1xcdHdoaWxlIChhdG9taWNfbG9hZChcXHUwMDI2c2VydmVyLVxcdTAwM2VydW5uaW5nKSkge1xcbitcXHRcXHRpbnQgY2xpZW50X2ZkID0gYWNjZXB0KHNlcnZlci1cXHUwMDNlZmQsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xcbitcXHRcXHRcXHRpZiAoIWF0b21pY19sb2FkKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXJ1bm5pbmcpKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwcm9jZXNzX2NsaWVudChfbWV0YWRhdGEsIGNsaWVudF9mZCwgXFx1MDAyNnNlcnZlci1cXHUwMDNlcnVubmluZyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHNpemVfdCByZW1haW5pbmcgPSBsZW47XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHNzaXplX3QgYnl0ZXMgPSB3cml0ZShmZCwgYnVmICsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XFxuK1xcbitcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJlbWFpbmluZyAtPSBieXRlcztcXG4rXFx0fSB3aGlsZSAocmVtYWluaW5nKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XFxuK1xcdHN0cnVjdCBicGZfdCBicGY7XFxuK1xcdGNoYXIgKnBheWxvYWQ7XFxuK1xcdHNpemVfdCBwYXlsb2FkX2xlbjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdGJvb2wgd2l0aF9yZWN2O1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnKVxcbit7XFxuK1xcdC53aXRoX3JlY3YgPSBmYWxzZVxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcXG4re1xcbitcXHQud2l0aF9yZWN2ID0gdHJ1ZVxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdG1lbXNldChcXHUwMDI2c2VsZi1cXHUwMDNlYWRkciwgMCwgc2l6ZW9mKHNlbGYtXFx1MDAzZWFkZHIpKTtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuID0gMTAyNCAqIDEwMjQgKiAyNTtcXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZCA9IG1hbGxvYyhzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbik7XFxuK1xcdEFTU0VSVF9ORShzZWxmLVxcdTAwM2VwYXlsb2FkLCBOVUxMKTtcXG4rXFxuK1xcdG1lbXNldChzZWxmLVxcdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbik7XFxuK1xcdHNlbGYtXFx1MDAzZXBheWxvYWRbc2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IFBBWUxPQURfRU5EO1xcbitcXG4rXFx0c2V0dXBfYnBmKF9tZXRhZGF0YSwgXFxcInNvY2ttYXBfcmVjdmZyb20uYnBmLm9cXFwiLCB2YXJpYW50LVxcdTAwM2V3aXRoX3JlY3YsIFxcdTAwMjZzZWxmLVxcdTAwM2VicGYpO1xcbitcXHRhdG9taWNfc3RvcmUoXFx1MDAyNnNlbGYtXFx1MDAzZXNlcnZlci5ydW5uaW5nLCAxKTtcXG4rXFx0c2VsZi1cXHUwMDNlc2VydmVyLmZkID0gc3RhcnRfbGlzdGVuaW5nKF9tZXRhZGF0YSwgXFx1MDAyNnNlbGYtXFx1MDAzZWFkZHIuc2luX3BvcnQpO1xcbitcXHRzZWxmLVxcdTAwM2VzZXJ2ZXIubWV0YWRhdGEgPSBfbWV0YWRhdGE7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCwgXFx1MDAyNnJ1bl9zZXJ2ZXIsIFxcdTAwMjZzZWxmLVxcdTAwM2VzZXJ2ZXIpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXFxuK3tcXG4rXFx0YXRvbWljX3N0b3JlKFxcdTAwMjZzZWxmLVxcdTAwM2VzZXJ2ZXIucnVubmluZywgMCk7XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2VydmVyLmZkKSB7XFxuK1xcdFxcdHNodXRkb3duKHNlbGYtXFx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZXNlcnZlci5mZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2VzZXJ2ZXIudGhyZWFkKVxcbitcXHRcXHRwdGhyZWFkX2pvaW4oc2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCk7XFxuK1xcbitcXHRmcmVlKHNlbGYtXFx1MDAzZXBheWxvYWQpO1xcbitcXHRicGZfbGlua19fZGVzdHJveShzZWxmLVxcdTAwM2VicGYub25fc29ja29wcyk7XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlYnBmLm9uX3JlY3YpXFxuK1xcdFxcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXFx1MDAzZWJwZi5vbl9yZWN2KTtcXG4rXFxuK1xcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXFx1MDAzZWJwZi5vYmopO1xcbit9XFxuK1xcbitURVNUX0Yoc29ja21hcF9yZWN2ZnJvbSwgbm9fdGltZW91dClcXG4re1xcbitcXHRjaGFyIGlnbm9yZWRbMTI4XTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xcbitcXHRcXHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9ORShmZCwgLTEpO1xcbitcXHRcXHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzZWxmLVxcdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cXHUwMDNlYWRkcikpLCAwKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi1cXHUwMDNlcGF5bG9hZCwgc2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcXG4rXFxuK1xcdFxcdGlmIChyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdEFTU0VSVF9ORShlcnJubywgRUFHQUlOKTtcXG4rXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpXFxuK3tcXG4rXFx0cmV0dXJuICh0aW1lLVxcdTAwM2V0dl9zZWMgKiAxMDAwMDAwMDAwTEwpICsgdGltZS1cXHUwMDNldHZfbnNlYztcXG4rfVxcbitcXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dClcXG4re1xcbitcXHRjaGFyIGlnbm9yZWRbMTI4XTtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdGltZW87XFxuK1xcbitcXHR0aW1lby50dl9zZWMgPSAwO1xcbitcXHR0aW1lby50dl91c2VjID0gNTAwMDtcXG4rXFxuK1xcdC8qIHJlbW92ZSB0aGUgcGF5bG9hZCBlbmQgZGVsaW1pdGVyIHNvIHRoZSBzZXJ2ZXIgbmV2ZXIgcmVzcG9uZHMgYW5kIHJlY3Zmcm9tIHRpbWVzIG91dC4gKi9cXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZFtzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbiAtIDFdID0gMDtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xcbitcXHRcXHRzdHJ1Y3QgdGltZXNwZWMgYmVnO1xcbitcXHRcXHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfTkUoZmQsIC0xKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c2VsZi1cXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXFx1MDAzZWFkZHIpKSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXFx1MDAzZXBheWxvYWQsIHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApO1xcbitcXG4rXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZiZWcpO1xcbitcXHRcXHRBU1NFUlRfRVEocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCksIC0xKTtcXG4rXFx0XFx0ZXJyID0gZXJybm87XFxuK1xcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2ZW5kKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9FUShlcnIsIEVBR0FJTik7XFxuK1xcdFxcdEFTU0VSVF9HRSh0b19uYW5vcyhcXHUwMDI2ZW5kKSAtIHRvX25hbm9zKFxcdTAwMjZiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7XFxuK1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NDYuNTYzNzkwNzc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3NDExNTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1YmUyNGI2YmY4M2UwYWNhNjUwY2VjYzI0NWE5NDQ0NDM4NmZmMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNjo0NTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmU1OGFiMmQxZWU5NDMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4rKysgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyArMTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbiBcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0ICAgICBsb25nIHRpbWVvKVxuK1x0XHRcdCAgICAgbG9uZyAqdGltZW8pXG4ge1xuIFx0REVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTtcbiBcdGludCByZXQgPSAwO1xuQEAgLTE4NywxMiArMTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbitcdGlmICghKnRpbWVvKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0YWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XG4tXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcdTAwMjZ0aW1lbyxcbitcdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIHRpbWVvLFxuIFx0XHRcdCAgICAhbGlzdF9lbXB0eShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX21zZykgfHxcbiBcdFx0XHQgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgXHUwMDI2d2FpdCk7XG4gXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XG5AQCAtMjI5LDYgKzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4rXHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMjYyLDYgKzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdH1cbiBcdH1cbiBcbitcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4rXG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXHUwMDI2Y29waWVkX2Zyb21fc2VsZik7XG4gXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxuQEAgLTI4MCw3ICsyODMsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0fVxuIFx0c2VxICs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyArMzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFx0XHRpZiAoIXRpbWVvKSB7XG4gXHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC0zMTAsMTMgKzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcbitcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4rXHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4rXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gb3V0OlxuQEAgLTM1NSw2ICszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuK1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTM3MSwxNCArMzc1LDQ1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4gXHR9XG4gXHRsb2NrX3NvY2soc2spO1xuK1xuK1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbitcbiBtc2dfYnl0ZXNfcmVhZHk6XG4gXHRjb3BpZWQgPSBza19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuK1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbitcdFx0XHRyZXQgPSAtRU5PVENPTk47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKCF0aW1lbykge1xuK1x0XHRcdHJldCA9IC1FQUdBSU47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiArNDI1LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0XHR9XG4rXHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4rXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuaW5kZXggYzlmNDYwMzFhYzczYjIuLmExODQwYTVkNDVmNjdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5AQCAtMzksNiArMzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkclxuIHNrX3NvX3BlZWtfb2ZmXG4gc2tmX25ldF9vZmZcbiBzb2NrZXRcbitzb2NrbWFwX3JlY3Zmcm9tXG4rc29ja21hcF9yZWN2ZnJvbS5icGYub1xuIHNvX2luY29taW5nX2NwdVxuIHNvX25ldG5zX2Nvb2tpZVxuIHNvX3Jjdl9saXN0ZW5lclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLmEwNWE0YTkyNDQwMjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0xNjEsNiArMTYxLDcgQEAgVEVTVF9HRU5fRklMRVMgOj0gXFxcbiBcdHNvX25ldG5zX2Nvb2tpZSBcXFxuIFx0c29fcmN2X2xpc3RlbmVyIFxcXG4gXHRzb2NrZXQgXFxcbitcdHNvY2ttYXBfcmVjdmZyb20uYnBmLm8gXFxcbiBcdHN0cmVzc19yZXVzZXBvcnRfbGlzdGVuIFxcXG4gXHR0Y3BfZmFzdG9wZW5fYmFja3VwX2tleSBcXFxuIFx0dGNwX2lucSBcXFxuQEAgLTE5MSw2ICsxOTIsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcbiBcdHNrX3NvX3BlZWtfb2ZmIFxcXG4gXHRzb19pbmNvbWluZ19jcHUgXFxcbitcdHNvY2ttYXBfcmVjdmZyb20gXFxcbiBcdHRhcCBcXFxuIFx0dGNwX3BvcnRfc2hhcmUgXFxcbiBcdHRscyBcXFxuQEAgLTIzOCwzICsyNDAsNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICs9IC1scHRocmVhZFxuICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICs9IC1JLi4vLi4vLi4vaW5jbHVkZS9cbiBcbiBpbmNsdWRlIGJwZi5ta1xuK1xuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogTERMSUJTICs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyArPSAtSSQoT1VUUFVUKS90b29scy9pbmNsdWRlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZWM0NzBjNzM4ZjFlOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbisjZGVmaW5lIEFGX0lORVQgMlxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XG4rXHRfX3R5cGUoa2V5LCBfX3U2NCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbitcbit9IG1hcF9zb2NrcyBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzb2Nrb3BzXCIpIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbit7XG4rXHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikge1xuK1x0XHRfX3U2NCBjb29raWUgPSBicGZfZ2V0X3NvY2tldF9jb29raWUoY3R4KTtcbitcbitcdFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcdTAwMjZtYXBfc29ja3MsIFx1MDAyNmNvb2tpZSwgQlBGX05PRVhJU1QpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInNrX3NrYi9zdHJlYW1fdmVyZGljdFwiKSBpbnQgb25fcmVjdihzdHJ1Y3QgX19za19idWZmICpjdHgpXG4re1xuK1x0cmV0dXJuIFNLX1BBU1M7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY5NmI0NjczYzk3N2NjXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXG4rI2RlZmluZSBQQVlMT0FEX0VORCAnZSdcbitcbitzdGF0aWMgaW50IHN0YXJ0X2xpc3RlbmluZyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIHVpbnQxNl90ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c29ja2xlbl90IGFkZHJsZW47XG4rXHRpbnQgZmQ7XG4rXG4rXHRtZW1zZXQoXHUwMDI2YWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbitcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XG4rXG4rXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuK1xuK1x0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xuK1x0QVNTRVJUX0VRKGxpc3RlbihmZCwgNSksIDApO1xuK1xuK1x0YWRkcmxlbiA9IHNpemVvZihhZGRyKTtcbitcbitcdEFTU0VSVF9FUShnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmFkZHJsZW4pLCAwKTtcbitcbitcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsIGF0b21pY19pbnQgKnJ1bm5pbmcpXG4re1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbitcbitcdHRpbWVvLnR2X3NlYyA9IDA7XG4rXHR0aW1lby50dl91c2VjID0gMTAwMDtcbitcbitcdEVYUEVDVF9FUShzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcbitcbitcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xuK1x0XHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGxlbiA9PSAtMSkge1xuK1x0XHRcdEVYUEVDVF9UUlVFKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0RVhQRUNUX0dFKGxlbiwgMCk7XG4rXG4rXHRcdGlmIChsZW4gXHUwMDNjPSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHdyaXRlKGZkLCBcInRlc3RcIiwgNCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK3N0cnVjdCBicGZfdCB7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9zb2Nrb3BzO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xuK307XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfdCAqYnBmKVxuK3tcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdGludCBjZ3JvdXA7XG4rXG4rXHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xuK1x0YnBmLVx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb2JqLCBOVUxMKTtcbitcdEFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi1cdTAwM2VvYmopLCAwKTtcbitcbitcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3NvY2tvcHNcIik7XG4rXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4rXG4rXHRjZ3JvdXAgPSBvcGVuKFwiL3N5cy9mcy9jZ3JvdXBcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX05FKGNncm91cCwgLTEpO1xuK1xuK1x0YnBmLVx1MDAzZW9uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApO1xuK1x0Y2xvc2UoY2dyb3VwKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fc29ja29wcywgTlVMTCk7XG4rXG4rXHRpZiAocmVjdikge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm1hcF9zb2Nrc1wiKTtcbitcbitcdFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XG4rXG4rXHRcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3JlY3ZcIik7XG4rXHRcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcbitcbitcdFx0YnBmLVx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XG4rXHRcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fcmVjdiwgTlVMTCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBzZXJ2ZXJfdCB7XG4rXHRpbnQgZmQ7XG4rXHRhdG9taWNfaW50IHJ1bm5pbmc7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0c3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqbWV0YWRhdGE7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHNlcnZlcl90ICpzZXJ2ZXIgPSBhcmc7XG4rXHRzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEgPSBzZXJ2ZXItXHUwMDNlbWV0YWRhdGE7XG4rXG4rXHR3aGlsZSAoYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKSB7XG4rXHRcdGludCBjbGllbnRfZmQgPSBhY2NlcHQoc2VydmVyLVx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xuK1x0XHRcdGlmICghYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0cHJvY2Vzc19jbGllbnQoX21ldGFkYXRhLCBjbGllbnRfZmQsIFx1MDAyNnNlcnZlci1cdTAwM2VydW5uaW5nKTtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdHNpemVfdCByZW1haW5pbmcgPSBsZW47XG4rXG4rXHRkbyB7XG4rXHRcdHNzaXplX3QgYnl0ZXMgPSB3cml0ZShmZCwgYnVmICsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XG4rXG4rXHRcdGlmIChieXRlcyBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1xuK1x0XHRyZW1haW5pbmcgLT0gYnl0ZXM7XG4rXHR9IHdoaWxlIChyZW1haW5pbmcpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK0ZJWFRVUkUoc29ja21hcF9yZWN2ZnJvbSlcbit7XG4rXHRzdHJ1Y3Qgc2VydmVyX3Qgc2VydmVyO1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4rXHRzdHJ1Y3QgYnBmX3QgYnBmO1xuK1x0Y2hhciAqcGF5bG9hZDtcbitcdHNpemVfdCBwYXlsb2FkX2xlbjtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxuK3tcbitcdGJvb2wgd2l0aF9yZWN2O1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnKVxuK3tcbitcdC53aXRoX3JlY3YgPSBmYWxzZVxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcbit7XG4rXHQud2l0aF9yZWN2ID0gdHJ1ZVxuK307XG4rXG4rRklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxuK3tcbitcdG1lbXNldChcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIDAsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKTtcbitcbitcdHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuK1x0c2VsZi1cdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuK1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlcGF5bG9hZCwgTlVMTCk7XG4rXG4rXHRtZW1zZXQoc2VsZi1cdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKTtcbitcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSBQQVlMT0FEX0VORDtcbitcbitcdHNldHVwX2JwZihfbWV0YWRhdGEsIFwic29ja21hcF9yZWN2ZnJvbS5icGYub1wiLCB2YXJpYW50LVx1MDAzZXdpdGhfcmVjdiwgXHUwMDI2c2VsZi1cdTAwM2VicGYpO1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWFkZHIuc2luX3BvcnQpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIubWV0YWRhdGEgPSBfbWV0YWRhdGE7XG4rXG4rXHRzZWxmLVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRzZWxmLVx1MDAzZWFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTtcbitcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCwgXHUwMDI2cnVuX3NlcnZlciwgXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXG4re1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDApO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLmZkKSB7XG4rXHRcdHNodXRkb3duKHNlbGYtXHUwMDNlc2VydmVyLmZkLCBTSFVUX1JEKTtcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQpO1xuK1x0fVxuK1xuK1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZClcbitcdFx0cHRocmVhZF9qb2luKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCk7XG4rXG4rXHRmcmVlKHNlbGYtXHUwMDNlcGF5bG9hZCk7XG4rXHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9zb2Nrb3BzKTtcbitcbitcdGlmIChzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KVxuK1x0XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KTtcbitcbitcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlYnBmLm9iaik7XG4rfVxuK1xuK1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCBub190aW1lb3V0KVxuK3tcbitcdGNoYXIgaWdub3JlZFsxMjhdO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcbitcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4rXG4rXHRcdEFTU0VSVF9ORShmZCwgLTEpO1xuK1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbitcbitcdFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVx1MDAzZXBheWxvYWQsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcbitcbitcdFx0aWYgKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuK1x0XHRcdEFTU0VSVF9ORShlcnJubywgRUFHQUlOKTtcbitcbitcdFx0Y2xvc2UoZmQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpXG4re1xuK1x0cmV0dXJuICh0aW1lLVx1MDAzZXR2X3NlYyAqIDEwMDAwMDAwMDBMTCkgKyB0aW1lLVx1MDAzZXR2X25zZWM7XG4rfVxuK1xuK1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCB3aXRoX3RpbWVvdXQpXG4re1xuK1x0Y2hhciBpZ25vcmVkWzEyOF07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbitcbitcdHRpbWVvLnR2X3NlYyA9IDA7XG4rXHR0aW1lby50dl91c2VjID0gNTAwMDtcbitcbitcdC8qIHJlbW92ZSB0aGUgcGF5bG9hZCBlbmQgZGVsaW1pdGVyIHNvIHRoZSBzZXJ2ZXIgbmV2ZXIgcmVzcG9uZHMgYW5kIHJlY3Zmcm9tIHRpbWVzIG91dC4gKi9cbitcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSAwO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcbitcdFx0c3RydWN0IHRpbWVzcGVjIGJlZztcbitcdFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcbitcdFx0aW50IGVycjtcbitcbitcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4rXG4rXHRcdEFTU0VSVF9ORShmZCwgLTEpO1xuK1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbitcbitcdFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVx1MDAzZXBheWxvYWQsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcbitcbitcdFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApO1xuK1xuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YmVnKTtcbitcdFx0QVNTRVJUX0VRKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpLCAtMSk7XG4rXHRcdGVyciA9IGVycm5vO1xuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2ZW5kKTtcbitcbitcdFx0QVNTRVJUX0VRKGVyciwgRUFHQUlOKTtcbitcdFx0QVNTRVJUX0dFKHRvX25hbm9zKFx1MDAyNmVuZCkgLSB0b19uYW5vcyhcdTAwMjZiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7XG4rXG4rXHRcdGNsb3NlKGZkKTtcbitcdH1cbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ1OjQ2LjU2Mzc5MzQ3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjIzMjk2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBUQ1AgQlBGIHJlY3Ztc2cgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgVENQIEJQRiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGZpbGUgYW5kIGFkZGluZyBhIG5ldyBzZWxmdGVzdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBvcHRpbWl6aW5nIGhvdyB3ZSBoYW5kbGUgYHJlY3Ztc2dgIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc29ja21hcCBmcmFtZXdvcmsgZm9yIFRDUC5cblxuTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgdGNwX21zZ193YWl0X2RhdGFgIHRvIGFjY2VwdCBhIHBvaW50ZXIgdG8gYSB0aW1lb3V0IChgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YgYGxvbmcgdGltZW9gKSBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gVGhpcyBsaWtlbHkgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byAqbW9kaWZ5KiB0aGUgdGltZW91dCB2YWx1ZSwgd2hpY2ggc2lnbmFscyBzb21lIGludGVybmFsIHN0YXRlIHRvIHRoZSBjYWxsZXIuIFRoZSBwYXRjaCB0aGVuIGNvcnJlY3RseSB1cGRhdGVzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uczogYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCB0byBwYXNzIHRoZSAqYWRkcmVzcyogb2YgdGhlIHRpbWVvdXQgdmFyaWFibGUgKFx1MDAyNnRpbWVvKS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwYCBjaGVja3Mgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGEgbWVjaGFuaXNtIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20gd2FpdGluZywgcG9zc2libHkgaWYgdGhlIHRpbWVvdXQgZXhwaXJlcyBvciBhIGRpZmZlcmVudCBjb25kaXRpb24gYXJpc2VzLiBUaGVzZSBjb25kaXRpb25hbCBqdW1wcyBhcmUgaW1wb3J0YW50OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5TbywgbGV0IG1lIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGlzIHN0cmFpZ2h0OiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYHRjcF9tc2dfd2FpdF9kYXRhYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbiBjYWxscyBhbmQgdGhlIHRpbWVvdXQgbG9naWMgbWFrZSBzZW5zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBCUEYgc29ja2V0IG1hcCBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIGRhdGEgYXZhaWxhYmlsaXR5IGFuZCB0aW1lb3V0IGJlaGF2aW9yLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnJlYWNoYWJsZSogdGhpcyBjb2RlIGlzLiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCB0aGlzIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIEtjb25maWcgb3B0aW9uLiBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBmaWxlLiBJdCdzIGxpa2VseSB0aGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBhcyB3ZWxsOyBJJ2xsIG5lZWQgdG8gbWFwIG91dCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBzcGFjZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgaXMgdW5kZXIgdGhlIGV4cGVjdGVkIGNvbmRpdGlvbnMuIFRoaXMgaXMgZnVuZGFtZW50YWw6IEkgbmVlZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJlbGV2YW5jZSBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjcwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NTIuOTg2MTI0OTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjYzMDg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo1My4yOTI3NjQzNzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3OTE3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgZW5hYmxlcyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYW5kIHRyYWNlIGJhY2sgaXRzIHJlcXVpcmVtZW50cy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBhY3RpdmF0ZSBpbiBvcmRlciB0byBnZXQgYENPTkZJR19ORVRfU09DS19NU0dgIGVuYWJsZWQgYW5kIHdvcmtpbmcgcHJvcGVybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgcHJvamVjdC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGlzIHdpbGwgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3ksIGJ1dCBsZXQncyB0YWtlIG5vdGhpbmcgZm9yIGdyYW50ZWQgYW5kIHN0YXJ0IGRpZ2dpbmcgaW4sIGFzIHRoZXJlIG1pZ2h0IGJlIGEgZmV3IG90aGVyIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ1OjU2LjMyMDY4NDMwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDg4MjQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NTYuNDE1NTczMDM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMjI2NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYSBCb29sZWFuIEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHN0dW1ibGVkIHVwb24gYSBoaWRkZW4gYm9vbGVhbiB2YXJpYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgcmVhZGluZyBvciB3cml0aW5nIHRvIHRoaXMgZmxhZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIHRoZW4gc2VlIHdoYXQncyBhZmZlY3RpbmcgaXRzIHZhbHVlLiBGaW5kaW5nIHRoZSBwb2ludHMgd2hlcmUgdGhlIGJvb2xlYW4gaXMgYWN0dWFsbHkgc2VsZWN0ZWQgKG9yIHNldCkgaXMgdGhlIG5leHQgdml0YWwgcGllY2Ugb2YgdGhpcyBwdXp6bGU7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0aGF0J3MgZHJpdmluZyBpdHMgc3RhdGUgdHJhbnNpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo1OS4yMTc4NDIxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NTQyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NTkuMzczODAxMjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTU3NTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIG5ldHdvcmtpbmcgYW5kIGVCUEY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBDb25uZWN0aW9uIHRvIGBORVRfU09DS19NU0dgKipcblxuQWxyaWdodCwgdGhlIGNvZGUncyBwb2ludGluZyB0byBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBORVRfU09DS19NU0dgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IEkndmUgdXNlZCBib3RoIGJ1dCBoYXZlbid0IHJlYWxseSBkZWVwbHkgY29uc2lkZXJlZCB0aGVpciBpbnRlcmFjdGlvbiBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgbGlua3MgdGhlbS4gV2hhdCBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgdGhlIGdsdWUgYmV0d2VlbiB0aGVzZSB0d28gZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBrZXJuZWwgbW9kdWxlcywgb3IgZHJpdmVyIGludGVyYWN0aW9ucyBicmluZyB0aGVtIHRvZ2V0aGVyLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhdXNhbCBjaGFpbi4gV2hlcmUgZG9lcyB0aGUgc3RyZWFtIHBhcnNlciBnZXQgc2V0IHVwLCBhbmQgaG93IGRvZXMgdGhhdCBwcm9jZXNzIGRpcmVjdGx5IGxlYWQgdG8gdGhlIHV0aWxpemF0aW9uIG9yIHNldHVwIG9mIGBORVRfU09DS19NU0dgPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ2OjAyLjgyNTM3OTcwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNTk0ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjowMi45Mjg5ODA3MTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3MDU5NzQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgZUJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24gXHUwMDI2IFNvY2ttYXAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgb3B0aW9uIGlzIHByZXNlbnRlZCBhcyBhIHVzZXItY29uZmlndXJhYmxlIGJvb2xlYW4sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoYXQncyB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGl0cyBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZUJQRiBmZWF0dXJlcy5cblxuSSBhbHNvIHN1c3BlY3QgdGhhdCBgQ0dST1VQX0JQRmAgbWlnaHQgYmUgYSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggc29ja21hcHMuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgZXhwbG9yZSB0aGUgaW50ZXJwbGF5IG9mIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCB0aGUgc29ja2V0IG1hcCBpbXBsZW1lbnRhdGlvbiBhbmQgY2xvc2VseSByZWxhdGVkIGZpbGVzLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvY29yZS9zb2NrX21hcC5jYCBvciBhIHNpbWlsYXJseSByZWxhdGVkIGZpbGUgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjowOC41OTk1ODA1NDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NDI2NzgzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjowOC42OTQwNTc2MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMzk5NDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQSBSZWFsaXphdGlvbiBBYm91dCBCUEZfU1lTQ0FMTCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSB3YXMganVzdCB0cmFjaW5nIHRocm91Z2ggdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSwgYW5kIEkgd2FzIHByZXR0eSBzdXJlIEkgd2FzIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIGEgd2hvbGUgYnVuY2ggb2Yga2VybmVsIHNvdXJjZSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEJQRl9TWVNDQUxMYCB3YXMgZGVmaW5lZCwgZXhwZWN0aW5nIGl0IHRvIGJlIGJ1cmllZCBkZWVwIGluIHNvbWUgb2JzY3VyZSBoZWFkZXIuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGluaXQvS2NvbmZpZ2A/IFNlcmlvdXNseT8gSSBzaG91bGQgaGF2ZSB0aG91Z2h0IG9mIHRoYXQgZmlyc3Q7IGl0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gVGhhdCdzIGEgaHVnZSB0aW1lIHNhdmVyLiBJIGNhbiBwcm9iYWJseSBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBhIGxvdCBmYXN0ZXIgbm93LiBJIGZlZWwgYSBzbGlnaHQgZW1iYXJyYXNzbWVudCB0aGF0IEkgZGlkbid0IGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBLY29uZmlnYCwgdG8gYmUgaG9uZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDY6MTEuNTk4MDU0MTY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk5NzY3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjoxNC4xOTc4Mjc5NjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2ODAwMDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHRvdWNoaW5nIGB0Y3BfYnBmLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgc29tZSBCUEYgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBrZXkgZnVuY3Rpb25zIEknbSBzZWVpbmcgYXJlIGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBhcmUgZGVmaW5pdGVseSBhY3RpdmUgYW5kIG9wZXJhdGlvbmFsIGNvbXBvbmVudHMuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBwb2ludHMgYXJlIGdvaW5nIHRvIGJlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGZsb3dzIHRocm91Z2ggdGhlc2UuIFdoaWxlIGB0Y3BfbXNnX3dhaXRfZGF0YWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIEknbSBub3QgZ29pbmcgdG8gZGlzbWlzcyBpdCByaWdodCBhd2F5LiBJdCdzIHN0aWxsIGEgZ29vZCBzeW1ib2wgdG8gdHJhY2ssIGVzcGVjaWFsbHkgaWYgaW5saW5pbmcgaXNuJ3QgaGFwcGVuaW5nLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpdHMgaW5saW5pbmcgc3RhdHVzLCBvZiBjb3Vyc2UuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgYHRjcF9icGZfcmVjdm1zZ2AuIEkgY2FuIHNlZSB0aGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBjYWxscyBpdCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZSBmYWN0IHRoYXQgaXQncyBhbHNvIHJlZ2lzdGVyZWQgYXMgYSBwcm90byBoYW5kbGVyIGZvciBzb2NrbWFwIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50IGZvciBpbnRlcmFjdGluZyB3aXRoIEJQRiBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggSSBuZWVkIHRvIGV4YW1pbmUgdmVyeSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ2OjE5LjA2NTgzMDI5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTg3NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVxcdFxcdFxcdCAgIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02NjA9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXFx0XFx0PSBzb2NrX21hcF9jbG9zZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY2OlxcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY2Ny1cXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVxcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3My1cXHRwcm90W1RDUF9CUEZfUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY3NDpcXHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3NS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc2LVxcdHByb3RbVENQX0JQRl9UWFJYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc3OlxcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NzgtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcxMD1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MzMtXFx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MzQ6XFx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM1LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjoxOS4xODQ4MjE3MDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEyNjA0OTY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRDUCBCUEYgU29ja2V0bWFwIEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCAtIHRoZXNlIGFyZSB0aGUgYHJlY3Ztc2dgIGhhbmRsZXJzIGZvciBUQ1Agc29ja2V0cyB3aGVuIHRoZXkncmUgdXNlZCB3aXRoaW4gYSBCUEYgc29ja21hcC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGFyZWEgZm9yIGZ1enppbmcsIGFic29sdXRlbHkuIFxuXG5UaGUgY29uZmlndXJhdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYmVjYXVzZSwgYXMgSSByZWNhbGwsIGBCUEZfU1RSRUFNX1BBUlNFUmAgc2VsZWN0cyBgTkVUX1NPQ0tfTVNHYC4gV2hpbGUgYENHUk9VUF9CUEZgIGlzIG9mdGVuIHBhaXJlZCB3aXRoIHNvY2ttYXBzLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSB0aGUgY3JpdGljYWwgZmxhZ3MgaGVyZS5cblxuTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgZXNzZW50aWFsIGZvciB0aGUgYHRjcF9icGYuY2AgbW9kdWxlLiBIbW0sIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGluY2x1ZGVzIGBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9gLiBSaWdodCwgdGhhdCBjb25maXJtcyBpdCAtIGBORVRfU09DS19NU0dgICppcyogbmVlZGVkLiBHaXZlbiB0aGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgc2VsZWN0cyBgTkVUX1NPQ0tfTVNHYCwgYW5kIFRMUyBhbHNvIHNlbGVjdHMgYE5FVF9TT0NLX01TR2AsIHNwZWNpZnlpbmcgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIHNob3VsZCBjb3ZlciBhbGwgdGhlIGJhc2VzLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBleHBvcnRlZC4gT2theSwgaXQncyBzdGF0aWM6XG5cbmBgYGNcbnN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuXHRcdFx0ICAgICBsb25nICp0aW1lbylcbmBgYFxuXG5TbyB0aGF0IGNvbmZpcm1zIGl0LCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LiBMZXQncyBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AgYXMgdGhlc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cy5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGRlZmluaXRpb24gaW4gYG5ldC9LY29uZmlnYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDY6MjUuMzEwODc2NjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODc5NTM2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ2OjI2Ljg5ODgzNDgwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTgzNDY3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1AgQlBGIHJlY3Ztc2cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcyB0aGUgbGlrZWx5IGNvbmZpZ3VyYXRpb24gaGVyZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IHdvdWxkIGFsc28gbmVlZCBhdHRlbnRpb24uIEFscmlnaHQsIGl0IHNlZW1zIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgaGlkZGVuIGNvbmZpZyB0aGF0J3Mgc2VsZWN0ZWQgYnkgYEJQRl9TVFJFQU1fUEFSU0VSYC4gR29vZCwgdGhhdCBtZWFucyBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBjb25maWcgd2UgbmVlZCB0byBlbmFibGUgdG8gdHJpZ2dlciB0aGlzLlxuXG5MZXQncyBzeW50aGVzaXplIHRoaXM6XG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaC4gVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdGFyZ2V0IGFyZSBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGB0Y3BfYnBmX3JlY3Ztc2dgLCBhbmQgYHRjcF9tc2dfd2FpdF9kYXRhYC5cblxuVG8gbWFrZSBpdCBhbGwgd29yaywgd2UnbGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCAodGhhdCdzIGEgZ2l2ZW4pICphbmQqIGNyaXRpY2FsbHksIGBCUEZfU1RSRUFNX1BBUlNFUmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIGByZWN2bXNnYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBhcmUgdGhlIGFmZmVjdGVkIHJvdXRpbmVzLiBUaGUgaW1wYWN0IGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCdzIGEgY3JpdGljYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIHRvIGZvY3VzIGZvciBhbiBleHBsb2l0LiBJdCdzIHRyaWdnZXJlZCB3aGVuIGEgVENQIHNvY2tldCBpcyBpbmNsdWRlZCBpbiBhIEJQRiBzb2NrbWFwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1NCwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDY6MzIuNDgyMzA0MjQyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTk1Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIHJlY3Ztc2cgZnVuY3Rpb25zICh0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyIGFuZCB0Y3BfYnBmX3JlY3Ztc2cpIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBhIFRDUCBzb2NrZXQgaXMgYWRkZWQgdG8gYSBCUEYgc29ja21hcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2vdph[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 06:29:54 +0000 UTC FinishedAt: 2026-07-15 06:46:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "9a3a07d06e7d74f4aecc51396c771149336ac55d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "9a3a07d06e7d74f4aecc51396c771149336ac55d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "d52850d2-526b-433d-a016-abb2b93eee9d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg_parser", "tcp_bpf_recvmsg", "tcp_msg_wait_data" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjViZTI0YjZiZjgzZTBhY2E2NTBjZWNjMjQ1YTk0NDQ0Mzg2ZmYxYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDA2OjQ1OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmU1OGFiMmQxZWU5NDMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbiYjNDM7XHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbiYjNDM7XHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4mIzQzO1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICYjNDM7MjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgJiM0Mzs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuJiM0MztcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuJiM0MztcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgJiM0MzszNzUsNDUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRpbWVvKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiAmIzQzOzQyNSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuaW5kZXggYzlmNDYwMzFhYzczYjIuLmExODQwYTVkNDVmNjdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5AQCAtMzksNiAmIzQzOzM5LDggQEAgc2tfY29ubmVjdF96ZXJvX2FkZHJcbiBza19zb19wZWVrX29mZlxuIHNrZl9uZXRfb2ZmXG4gc29ja2V0XG4mIzQzO3NvY2ttYXBfcmVjdmZyb21cbiYjNDM7c29ja21hcF9yZWN2ZnJvbS5icGYub1xuIHNvX2luY29taW5nX2NwdVxuIHNvX25ldG5zX2Nvb2tpZVxuIHNvX3Jjdl9saXN0ZW5lclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLmEwNWE0YTkyNDQwMjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0xNjEsNiAmIzQzOzE2MSw3IEBAIFRFU1RfR0VOX0ZJTEVTIDo9IFxcXG4gXHRzb19uZXRuc19jb29raWUgXFxcbiBcdHNvX3Jjdl9saXN0ZW5lciBcXFxuIFx0c29ja2V0IFxcXG4mIzQzO1x0c29ja21hcF9yZWN2ZnJvbS5icGYubyBcXFxuIFx0c3RyZXNzX3JldXNlcG9ydF9saXN0ZW4gXFxcbiBcdHRjcF9mYXN0b3Blbl9iYWNrdXBfa2V5IFxcXG4gXHR0Y3BfaW5xIFxcXG5AQCAtMTkxLDYgJiM0MzsxOTIsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcbiBcdHNrX3NvX3BlZWtfb2ZmIFxcXG4gXHRzb19pbmNvbWluZ19jcHUgXFxcbiYjNDM7XHRzb2NrbWFwX3JlY3Zmcm9tIFxcXG4gXHR0YXAgXFxcbiBcdHRjcF9wb3J0X3NoYXJlIFxcXG4gXHR0bHMgXFxcbkBAIC0yMzgsMyAmIzQzOzI0MCw3IEBAICQoT1VUUFVUKS9iaW5kX2JoYXNoOiBMRExJQlMgJiM0Mzs9IC1scHRocmVhZFxuICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICYjNDM7PSAtSS4uLy4uLy4uL2luY2x1ZGUvXG4gXG4gaW5jbHVkZSBicGYubWtcbiYjNDM7XG4mIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcbiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IExETElCUyAmIzQzOz0gJChCUEZPQkopIC1sZWxmIC1seiAtbHB0aHJlYWRcbiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyAmIzQzOz0gLUkkKE9VVFBVVCkvdG9vbHMvaW5jbHVkZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmVjNDcwYzczOGYxZThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBBRl9JTkVUIDJcbiYjNDM7XG4mIzQzO2NoYXIgTElDRU5TRVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxMDI0KTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBfX3U2NCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4mIzQzO1xuJiM0Mzt9IG1hcF9zb2NrcyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tvcHNcJiMzNDspIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbiYjNDM7e1xuJiM0MztcdGlmIChjdHgtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfQUNUSVZFX0VTVEFCTElTSEVEX0NCKSB7XG4mIzQzO1x0XHRfX3U2NCBjb29raWUgPSBicGZfZ2V0X3NvY2tldF9jb29raWUoY3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRicGZfc29ja19oYXNoX3VwZGF0ZShjdHgsIFx1MDAyNm1hcF9zb2NrcywgXHUwMDI2Y29va2llLCBCUEZfTk9FWElTVCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NrX3NrYi9zdHJlYW1fdmVyZGljdFwmIzM0OykgaW50IG9uX3JlY3Yoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mOTZiNDY3M2M5NzdjY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xuQEAgLTAsMCAmIzQzOzEsMjg4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9saWJicGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNQVhfSVRFUkFUSU9OUyAxMDBcbiYjNDM7I2RlZmluZSBQQVlMT0FEX0VORCAmIzM5O2UmIzM5O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBzdGFydF9saXN0ZW5pbmcoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCB1aW50MTZfdCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuJiM0MztcdHNvY2tsZW5fdCBhZGRybGVuO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShmZCwgLTEpO1xuJiM0MztcdEFTU0VSVF9FUShiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGxpc3RlbihmZCwgNSksIDApO1xuJiM0MztcbiYjNDM7XHRhZGRybGVuID0gc2l6ZW9mKGFkZHIpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBcdTAwMjZhZGRybGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwcm9jZXNzX2NsaWVudChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgYXRvbWljX2ludCAqcnVubmluZylcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzEwMjRdO1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xuJiM0MztcbiYjNDM7XHR0aW1lby50dl9zZWMgPSAwO1xuJiM0MztcdHRpbWVvLnR2X3VzZWMgPSAxMDAwO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnRpbWVvLCBzaXplb2YodGltZW8pKSwgMCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xuJiM0MztcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSAtMSkge1xuJiM0MztcdFx0XHRFWFBFQ1RfVFJVRShlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRFWFBFQ1RfR0UobGVuLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYz0gMCB8fCBidWZbbGVuIC0gMV0gPT0gUEFZTE9BRF9FTkQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdGUoZmQsIFwmIzM0O3Rlc3RcJiMzNDssIDQpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBicGZfdCB7XG4mIzQzO1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKm9uX3NvY2tvcHM7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3QgKmJwZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRpbnQgY2dyb3VwO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xuJiM0MztcdGJwZi1cdTAwM2VvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUocGF0aCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShicGYtXHUwMDNlb2JqLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEoYnBmX29iamVjdF9fbG9hZChicGYtXHUwMDNlb2JqKSwgMCk7XG4mIzQzO1xuJiM0MztcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcJiMzNDtvbl9zb2Nrb3BzXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGNncm91cCA9IG9wZW4oXCYjMzQ7L3N5cy9mcy9jZ3JvdXBcJiMzNDssIE9fUkRPTkxZKTtcbiYjNDM7XHRBU1NFUlRfTkUoY2dyb3VwLCAtMSk7XG4mIzQzO1xuJiM0MztcdGJwZi1cdTAwM2Vvbl9zb2Nrb3BzID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAocHJvZywgY2dyb3VwKTtcbiYjNDM7XHRjbG9zZShjZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoYnBmLVx1MDAzZW9uX3NvY2tvcHMsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVjdikge1xuJiM0MztcdFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IGJwZl9vYmplY3RfX2ZpbmRfbWFwX2J5X25hbWUoYnBmLVx1MDAzZW9iaiwgXCYjMzQ7bWFwX3NvY2tzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfTkUobWFwLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVx1MDAzZW9iaiwgXCYjMzQ7b25fcmVjdlwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0YnBmLVx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XG4mIzQzO1x0XHRBU1NFUlRfTkUoYnBmLVx1MDAzZW9uX3JlY3YsIE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHNlcnZlcl90IHtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0YXRvbWljX2ludCBydW5uaW5nO1xuJiM0MztcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0c3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqbWV0YWRhdGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcbiYjNDM7XHRzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEgPSBzZXJ2ZXItXHUwMDNlbWV0YWRhdGE7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhdG9taWNfbG9hZChcdTAwMjZzZXJ2ZXItXHUwMDNlcnVubmluZykpIHtcbiYjNDM7XHRcdGludCBjbGllbnRfZmQgPSBhY2NlcHQoc2VydmVyLVx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY2xpZW50X2ZkID09IC0xKSB7XG4mIzQzO1x0XHRcdGlmICghYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHJvY2Vzc19jbGllbnQoX21ldGFkYXRhLCBjbGllbnRfZmQsIFx1MDAyNnNlcnZlci1cdTAwM2VydW5uaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHJlbWFpbmluZyA9IGxlbjtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3NpemVfdCBieXRlcyA9IHdyaXRlKGZkLCBidWYgJiM0MzsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJ5dGVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZW1haW5pbmcgLT0gYnl0ZXM7XG4mIzQzO1x0fSB3aGlsZSAocmVtYWluaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkUoc29ja21hcF9yZWN2ZnJvbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzZXJ2ZXJfdCBzZXJ2ZXI7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4mIzQzO1x0c3RydWN0IGJwZl90IGJwZjtcbiYjNDM7XHRjaGFyICpwYXlsb2FkO1xuJiM0MztcdHNpemVfdCBwYXlsb2FkX2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB3aXRoX3JlY3Y7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHNvY2ttYXBfcmVjdmZyb20sIHJlY3Ztc2cpXG4mIzQzO3tcbiYjNDM7XHQud2l0aF9yZWN2ID0gZmFsc2VcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZ19wYXJzZXIpXG4mIzQzO3tcbiYjNDM7XHQud2l0aF9yZWN2ID0gdHJ1ZVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnNlbGYtXHUwMDNlYWRkciwgMCwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXBheWxvYWRfbGVuID0gMTAyNCAqIDEwMjQgKiAyNTtcbiYjNDM7XHRzZWxmLVx1MDAzZXBheWxvYWQgPSBtYWxsb2Moc2VsZi1cdTAwM2VwYXlsb2FkX2xlbik7XG4mIzQzO1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlcGF5bG9hZCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdG1lbXNldChzZWxmLVx1MDAzZXBheWxvYWQsIDAsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuJiM0MztcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSBQQVlMT0FEX0VORDtcbiYjNDM7XG4mIzQzO1x0c2V0dXBfYnBmKF9tZXRhZGF0YSwgXCYjMzQ7c29ja21hcF9yZWN2ZnJvbS5icGYub1wmIzM0OywgdmFyaWFudC1cdTAwM2V3aXRoX3JlY3YsIFx1MDAyNnNlbGYtXHUwMDNlYnBmKTtcbiYjNDM7XHRhdG9taWNfc3RvcmUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIucnVubmluZywgMSk7XG4mIzQzO1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWFkZHIuc2luX3BvcnQpO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLm1ldGFkYXRhID0gX21ldGFkYXRhO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCwgXHUwMDI2cnVuX3NlcnZlciwgXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfc3RvcmUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIucnVubmluZywgMCk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXNlcnZlci5mZCkge1xuJiM0MztcdFx0c2h1dGRvd24oc2VsZi1cdTAwM2VzZXJ2ZXIuZmQsIFNIVVRfUkQpO1xuJiM0MztcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZClcbiYjNDM7XHRcdHB0aHJlYWRfam9pbihzZWxmLVx1MDAzZXNlcnZlci50aHJlYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRmcmVlKHNlbGYtXHUwMDNlcGF5bG9hZCk7XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cdTAwM2VicGYub25fc29ja29wcyk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KVxuJiM0MztcdFx0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cdTAwM2VicGYub25fcmVjdik7XG4mIzQzO1xuJiM0MztcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlYnBmLm9iaik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCBub190aW1lb3V0KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBpZ25vcmVkWzEyOF07XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdGludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9ORShmZCwgLTEpO1xuJiM0MztcdFx0QVNTRVJUX0VRKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKSwgMCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVx1MDAzZXBheWxvYWQsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdEFTU0VSVF9ORShlcnJubywgRUFHQUlOKTtcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHRpbWUtXHUwMDNldHZfc2VjICogMTAwMDAwMDAwMExMKSAmIzQzOyB0aW1lLVx1MDAzZXR2X25zZWM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCB3aXRoX3RpbWVvdXQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbiYjNDM7XG4mIzQzO1x0dGltZW8udHZfc2VjID0gMDtcbiYjNDM7XHR0aW1lby50dl91c2VjID0gNTAwMDtcbiYjNDM7XG4mIzQzO1x0LyogcmVtb3ZlIHRoZSBwYXlsb2FkIGVuZCBkZWxpbWl0ZXIgc28gdGhlIHNlcnZlciBuZXZlciByZXNwb25kcyBhbmQgcmVjdmZyb20gdGltZXMgb3V0LiAqL1xuJiM0MztcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0lURVJBVElPTlM7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGltZXNwZWMgYmVnO1xuJiM0MztcdFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUShzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YmVnKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSwgLTEpO1xuJiM0MztcdFx0ZXJyID0gZXJybm87XG4mIzQzO1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2ZW5kKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoZXJyLCBFQUdBSU4pO1xuJiM0MztcdFx0QVNTRVJUX0dFKHRvX25hbm9zKFx1MDAyNmVuZCkgLSB0b19uYW5vcyhcdTAwMjZiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIFRDUCBCUEYgcmVjdm1zZyBmdW5jdGlvbnMgKHRjcF9icGZfcmVjdm1zZ19wYXJzZXIgYW5kIHRjcF9icGZfcmVjdm1zZykgd2hpY2ggYXJlIHJlYWNoYWJsZSB3aGVuIGEgVENQIHNvY2tldCBpcyBhZGRlZCB0byBhIEJQRiBzb2NrbWFwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nL0JQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjViZTI0YjZiZjgzZTBhY2E2NTBjZWNjMjQ1YTk0NDQ0Mzg2ZmYxYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDA2OjQ1OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IGNjMGJkNzNmMzZiNmQ2Li5lNThhYjJkMWVlOTQzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9icGYuYwpAQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpOwogCiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKLQkJCSAgICAgbG9uZyB0aW1lbykKJiM0MzsJCQkgICAgIGxvbmcgKnRpbWVvKQogewogCURFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7CiAJaW50IHJldCA9IDA7CkBAIC0xODcsMTIgJiM0MzsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCiAJaWYgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV04pCiAJCXJldHVybiAxOwogCi0JaWYgKCF0aW1lbykKJiM0MzsJaWYgKCEqdGltZW8pCiAJCXJldHVybiByZXQ7CiAKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZhbXA7d2FpdCk7CiAJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKLQlyZXQgPSBza193YWl0X2V2ZW50KHNrLCAmYW1wO3RpbWVvLAomIzQzOwlyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbywKIAkJCSAgICAhbGlzdF9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX21zZykgfHwKIAkJCSAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpLCAmYW1wO3dhaXQpOwogCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKQEAgLTIyOSw2ICYjNDM7MjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzaywKIAlpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7CiAJaW50IGNvcGllZCA9IDA7CiAJdTMyIHNlcTsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0yNjIsNiAmIzQzOzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCX0KIAl9CiAKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsICZhbXA7Y29waWVkX2Zyb21fc2VsZik7CiAJLyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHkKQEAgLTI4MCw3ICYjNDM7MjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzaywKIAl9CiAJc2VxICYjNDM7PSBjb3BpZWRfZnJvbV9zZWxmOwogCWlmICghY29waWVkKSB7Ci0JCWxvbmcgdGltZW87CiAJCWludCBkYXRhOwogCiAJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKIAkJaWYgKCF0aW1lbykgewogCQkJY29waWVkID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwpAQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssICZhbXA7dGltZW8pOwogCQlpZiAoZGF0YSAmbHQ7IDApIHsKIAkJCWNvcGllZCA9IGRhdGE7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQlpZiAoZGF0YSAmYW1wOyZhbXA7ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpCiAJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiBvdXQ6CkBAIC0zNTUsNiAmIzQzOzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogewogCXN0cnVjdCBza19wc29jayAqcHNvY2s7CiAJaW50IGNvcGllZCwgcmV0OwomIzQzOwlsb25nIHRpbWVvOwogCiAJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IE1TR19FUlJRVUVVRSkpCiAJCXJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTsKQEAgLTM3MSwxNCAmIzQzOzM3NSw0NSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwogCX0KIAlsb2NrX3NvY2soc2spOwomIzQzOwomIzQzOwl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiYjNDM7CiBtc2dfYnl0ZXNfcmVhZHk6CiAJY29waWVkID0gc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpOwogCWlmICghY29waWVkKSB7Ci0JCWxvbmcgdGltZW87CiAJCWludCBkYXRhOwogCi0JCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKLQkJZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pOwomIzQzOwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkgewomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCXJldCA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBSQ1ZfU0hVVERPV04pIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKJiM0MzsJCQlyZXQgPSAtRU5PVENPTk47CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRpbWVvKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQlyZXQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CkBAIC0zOTAsNiAmIzQzOzQyNSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiAJCQlyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7CiAJCX0KJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiAJcmV0ID0gY29waWVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZQppbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCkBAIC0zOSw2ICYjNDM7MzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkcgogc2tfc29fcGVla19vZmYKIHNrZl9uZXRfb2ZmCiBzb2NrZXQKJiM0Mztzb2NrbWFwX3JlY3Zmcm9tCiYjNDM7c29ja21hcF9yZWN2ZnJvbS5icGYubwogc29faW5jb21pbmdfY3B1CiBzb19uZXRuc19jb29raWUKIHNvX3Jjdl9saXN0ZW5lcgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDcwOGQ5NjBhZTA3ZDViLi5hMDVhNGE5MjQ0MDIxMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMTYxLDYgJiM0MzsxNjEsNyBAQCBURVNUX0dFTl9GSUxFUyA6PSBcCiAJc29fbmV0bnNfY29va2llIFwKIAlzb19yY3ZfbGlzdGVuZXIgXAogCXNvY2tldCBcCiYjNDM7CXNvY2ttYXBfcmVjdmZyb20uYnBmLm8gXAogCXN0cmVzc19yZXVzZXBvcnRfbGlzdGVuIFwKIAl0Y3BfZmFzdG9wZW5fYmFja3VwX2tleSBcCiAJdGNwX2lucSBcCkBAIC0xOTEsNiAmIzQzOzE5Miw3IEBAIFRFU1RfR0VOX1BST0dTIDo9IFwKIAlza19jb25uZWN0X3plcm9fYWRkciBcCiAJc2tfc29fcGVla19vZmYgXAogCXNvX2luY29taW5nX2NwdSBcCiYjNDM7CXNvY2ttYXBfcmVjdmZyb20gXAogCXRhcCBcCiAJdGNwX3BvcnRfc2hhcmUgXAogCXRscyBcCkBAIC0yMzgsMyAmIzQzOzI0MCw3IEBAICQoT1VUUFVUKS9iaW5kX2JoYXNoOiBMRExJQlMgJiM0Mzs9IC1scHRocmVhZAogJChPVVRQVVQpL2lvX3VyaW5nX3plcm9jb3B5X3R4OiBDRkxBR1MgJiM0Mzs9IC1JLi4vLi4vLi4vaW5jbHVkZS8KIAogaW5jbHVkZSBicGYubWsKJiM0MzsKJiM0MzskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogJChCUEZPQkopCiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IExETElCUyAmIzQzOz0gJChCUEZPQkopIC1sZWxmIC1seiAtbHB0aHJlYWQKJiM0MzskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogQ0ZMQUdTICYjNDM7PSAtSSQoT1VUUFVUKS90b29scy9pbmNsdWRlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZWM0NzBjNzM4ZjFlOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jCkBAIC0wLDAgJiM0MzsxLDMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQUZfSU5FVCAyCiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMTAyNCk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTY0KTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7CiYjNDM7fSBtYXBfc29ja3MgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c29ja29wcyYjMzQ7KSBpbnQgb25fc29ja29wcyhzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpCiYjNDM7ewomIzQzOwlpZiAoY3R4LSZndDtmYW1pbHkgPT0gQUZfSU5FVCAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikgewomIzQzOwkJX191NjQgY29va2llID0gYnBmX2dldF9zb2NrZXRfY29va2llKGN0eCk7CiYjNDM7CiYjNDM7CQlicGZfc29ja19oYXNoX3VwZGF0ZShjdHgsICZhbXA7bWFwX3NvY2tzLCAmYW1wO2Nvb2tpZSwgQlBGX05PRVhJU1QpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtza19za2Ivc3RyZWFtX3ZlcmRpY3QmIzM0OykgaW50IG9uX3JlY3Yoc3RydWN0IF9fc2tfYnVmZiAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIFNLX1BBU1M7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY5NmI0NjczYzk3N2NjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYwpAQCAtMCwwICYjNDM7MSwyODggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2xpYmJwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGF0b21pYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNQVhfSVRFUkFUSU9OUyAxMDAKJiM0MzsjZGVmaW5lIFBBWUxPQURfRU5EICYjMzk7ZSYjMzk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBzdGFydF9saXN0ZW5pbmcoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCB1aW50MTZfdCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwomIzQzOwlzb2NrbGVuX3QgYWRkcmxlbjsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDthZGRyLCAwLCBzaXplb2YoYWRkcikpOwomIzQzOwlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShmZCwgLTEpOwomIzQzOwlBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShsaXN0ZW4oZmQsIDUpLCAwKTsKJiM0MzsKJiM0MzsJYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCAmYW1wO2FkZHJsZW4pLCAwKTsKJiM0MzsKJiM0MzsJKnBvcnQgPSBhZGRyLnNpbl9wb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHByb2Nlc3NfY2xpZW50KHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTAyNF07CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHRpbWVvOwomIzQzOwomIzQzOwl0aW1lby50dl9zZWMgPSAwOwomIzQzOwl0aW1lby50dl91c2VjID0gMTAwMDsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3RpbWVvLCBzaXplb2YodGltZW8pKSwgMCk7CiYjNDM7CiYjNDM7CXdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkgewomIzQzOwkJc3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CQlpZiAobGVuID09IC0xKSB7CiYjNDM7CQkJRVhQRUNUX1RSVUUoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCUVYUEVDVF9HRShsZW4sIDApOwomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7PSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZShmZCwgJiMzNDt0ZXN0JiMzNDssIDQpOwomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBicGZfdCB7CiYjNDM7CXN0cnVjdCBicGZfb2JqZWN0ICpvYmo7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqb25fc29ja29wczsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpvbl9yZWN2OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LAomIzQzOwkJCQkJCXN0cnVjdCBicGZfdCAqYnBmKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nOwomIzQzOwlpbnQgY2dyb3VwOwomIzQzOwomIzQzOwltZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpOwomIzQzOwlicGYtJmd0O29iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKGJwZi0mZ3Q7b2JqLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGJwZl9vYmplY3RfX2xvYWQoYnBmLSZndDtvYmopLCAwKTsKJiM0MzsKJiM0MzsJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi0mZ3Q7b2JqLCAmIzM0O29uX3NvY2tvcHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORShwcm9nLCBOVUxMKTsKJiM0MzsKJiM0MzsJY2dyb3VwID0gb3BlbigmIzM0Oy9zeXMvZnMvY2dyb3VwJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJQVNTRVJUX05FKGNncm91cCwgLTEpOwomIzQzOwomIzQzOwlicGYtJmd0O29uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApOwomIzQzOwljbG9zZShjZ3JvdXApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoYnBmLSZndDtvbl9zb2Nrb3BzLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJlY3YpIHsKJiM0MzsJCXN0cnVjdCBicGZfbWFwICptYXAgPSBicGZfb2JqZWN0X19maW5kX21hcF9ieV9uYW1lKGJwZi0mZ3Q7b2JqLCAmIzM0O21hcF9zb2NrcyYjMzQ7KTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9ORShtYXAsIE5VTEwpOwomIzQzOwomIzQzOwkJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi0mZ3Q7b2JqLCAmIzM0O29uX3JlY3YmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfTkUocHJvZywgTlVMTCk7CiYjNDM7CiYjNDM7CQlicGYtJmd0O29uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7CiYjNDM7CQlBU1NFUlRfTkUoYnBmLSZndDtvbl9yZWN2LCBOVUxMKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3Qgc2VydmVyX3QgewomIzQzOwlpbnQgZmQ7CiYjNDM7CWF0b21pY19pbnQgcnVubmluZzsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqbWV0YWRhdGE7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZzsKJiM0MzsJc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhID0gc2VydmVyLSZndDttZXRhZGF0YTsKJiM0MzsKJiM0MzsJd2hpbGUgKGF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkgewomIzQzOwkJaW50IGNsaWVudF9mZCA9IGFjY2VwdChzZXJ2ZXItJmd0O2ZkLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChjbGllbnRfZmQgPT0gLTEpIHsKJiM0MzsJCQlpZiAoIWF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwcm9jZXNzX2NsaWVudChfbWV0YWRhdGEsIGNsaWVudF9mZCwgJmFtcDtzZXJ2ZXItJmd0O3J1bm5pbmcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IHJlbWFpbmluZyA9IGxlbjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3NpemVfdCBieXRlcyA9IHdyaXRlKGZkLCBidWYgJiM0MzsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CQlpZiAoYnl0ZXMgJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZW1haW5pbmcgLT0gYnl0ZXM7CiYjNDM7CX0gd2hpbGUgKHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3Qgc2VydmVyOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc3RydWN0IGJwZl90IGJwZjsKJiM0MzsJY2hhciAqcGF5bG9hZDsKJiM0MzsJc2l6ZV90IHBheWxvYWRfbGVuOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlib29sIHdpdGhfcmVjdjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZykKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSBmYWxzZQomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcikKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSB0cnVlCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwltZW1zZXQoJmFtcDtzZWxmLSZndDthZGRyLCAwLCBzaXplb2Yoc2VsZi0mZ3Q7YWRkcikpOwomIzQzOwomIzQzOwlzZWxmLSZndDtwYXlsb2FkX2xlbiA9IDEwMjQgKiAxMDI0ICogMjU7CiYjNDM7CXNlbGYtJmd0O3BheWxvYWQgPSBtYWxsb2Moc2VsZi0mZ3Q7cGF5bG9hZF9sZW4pOwomIzQzOwlBU1NFUlRfTkUoc2VsZi0mZ3Q7cGF5bG9hZCwgTlVMTCk7CiYjNDM7CiYjNDM7CW1lbXNldChzZWxmLSZndDtwYXlsb2FkLCAwLCBzZWxmLSZndDtwYXlsb2FkX2xlbik7CiYjNDM7CXNlbGYtJmd0O3BheWxvYWRbc2VsZi0mZ3Q7cGF5bG9hZF9sZW4gLSAxXSA9IFBBWUxPQURfRU5EOwomIzQzOwomIzQzOwlzZXR1cF9icGYoX21ldGFkYXRhLCAmIzM0O3NvY2ttYXBfcmVjdmZyb20uYnBmLm8mIzM0OywgdmFyaWFudC0mZ3Q7d2l0aF9yZWN2LCAmYW1wO3NlbGYtJmd0O2JwZik7CiYjNDM7CWF0b21pY19zdG9yZSgmYW1wO3NlbGYtJmd0O3NlcnZlci5ydW5uaW5nLCAxKTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLmZkID0gc3RhcnRfbGlzdGVuaW5nKF9tZXRhZGF0YSwgJmFtcDtzZWxmLSZndDthZGRyLnNpbl9wb3J0KTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLm1ldGFkYXRhID0gX21ldGFkYXRhOwomIzQzOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7c2VsZi0mZ3Q7c2VydmVyLnRocmVhZCwgTlVMTCwgJmFtcDtydW5fc2VydmVyLCAmYW1wO3NlbGYtJmd0O3NlcnZlcik7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oc29ja21hcF9yZWN2ZnJvbSkKJiM0Mzt7CiYjNDM7CWF0b21pY19zdG9yZSgmYW1wO3NlbGYtJmd0O3NlcnZlci5ydW5uaW5nLCAwKTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O3NlcnZlci5mZCkgewomIzQzOwkJc2h1dGRvd24oc2VsZi0mZ3Q7c2VydmVyLmZkLCBTSFVUX1JEKTsKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O3NlcnZlci5mZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O3NlcnZlci50aHJlYWQpCiYjNDM7CQlwdGhyZWFkX2pvaW4oc2VsZi0mZ3Q7c2VydmVyLnRocmVhZCwgTlVMTCk7CiYjNDM7CiYjNDM7CWZyZWUoc2VsZi0mZ3Q7cGF5bG9hZCk7CiYjNDM7CWJwZl9saW5rX19kZXN0cm95KHNlbGYtJmd0O2JwZi5vbl9zb2Nrb3BzKTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O2JwZi5vbl9yZWN2KQomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi0mZ3Q7YnBmLm9uX3JlY3YpOwomIzQzOwomIzQzOwlicGZfb2JqZWN0X19jbG9zZShzZWxmLSZndDticGYub2JqKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpCiYjNDM7ewomIzQzOwljaGFyIGlnbm9yZWRbMTI4XTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCWludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOwomIzQzOwomIzQzOwkJQVNTRVJUX05FKGZkLCAtMSk7CiYjNDM7CQlBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7c2VsZi0mZ3Q7YWRkciwgc2l6ZW9mKHNlbGYtJmd0O2FkZHIpKSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtJmd0O3BheWxvYWQsIHNlbGYtJmd0O3BheWxvYWRfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CQlpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgJmx0OyAwKQomIzQzOwkJCUFTU0VSVF9ORShlcnJubywgRUFHQUlOKTsKJiM0MzsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHRpbWUtJmd0O3R2X3NlYyAqIDEwMDAwMDAwMDBMTCkgJiM0MzsgdGltZS0mZ3Q7dHZfbnNlYzsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dCkKJiM0Mzt7CiYjNDM7CWNoYXIgaWdub3JlZFsxMjhdOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0aW1lbzsKJiM0MzsKJiM0MzsJdGltZW8udHZfc2VjID0gMDsKJiM0MzsJdGltZW8udHZfdXNlYyA9IDUwMDA7CiYjNDM7CiYjNDM7CS8qIHJlbW92ZSB0aGUgcGF5bG9hZCBlbmQgZGVsaW1pdGVyIHNvIHRoZSBzZXJ2ZXIgbmV2ZXIgcmVzcG9uZHMgYW5kIHJlY3Zmcm9tIHRpbWVzIG91dC4gKi8KJiM0MzsJc2VsZi0mZ3Q7cGF5bG9hZFtzZWxmLSZndDtwYXlsb2FkX2xlbiAtIDFdID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBiZWc7CiYjNDM7CQlzdHJ1Y3QgdGltZXNwZWMgZW5kOwomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCWludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOwomIzQzOwomIzQzOwkJQVNTRVJUX05FKGZkLCAtMSk7CiYjNDM7CQlBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7c2VsZi0mZ3Q7YWRkciwgc2l6ZW9mKHNlbGYtJmd0O2FkZHIpKSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtJmd0O3BheWxvYWQsIHNlbGYtJmd0O3BheWxvYWRfbGVuKSwgMCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTsKJiM0MzsKJiM0MzsJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO2JlZyk7CiYjNDM7CQlBU1NFUlRfRVEocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCksIC0xKTsKJiM0MzsJCWVyciA9IGVycm5vOwomIzQzOwkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7ZW5kKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShlcnIsIEVBR0FJTik7CiYjNDM7CQlBU1NFUlRfR0UodG9fbmFub3MoJmFtcDtlbmQpIC0gdG9fbmFub3MoJmFtcDtiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7CiYjNDM7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFRDUCBCUEYgcmVjdm1zZyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBUQ1AgQlBGIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY0L3RjcF9icGYuY2AgZmlsZSBhbmQgYWRkaW5nIGEgbmV3IHNlbGZ0ZXN0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IG9wdGltaXppbmcgaG93IHdlIGhhbmRsZSBgcmVjdm1zZ2Agb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEJQRiBzb2NrbWFwIGZyYW1ld29yayBmb3IgVENQLgoKTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgdGNwX21zZ193YWl0X2RhdGFgIHRvIGFjY2VwdCBhIHBvaW50ZXIgdG8gYSB0aW1lb3V0IChgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YgYGxvbmcgdGltZW9gKSBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gVGhpcyBsaWtlbHkgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byAqbW9kaWZ5KiB0aGUgdGltZW91dCB2YWx1ZSwgd2hpY2ggc2lnbmFscyBzb21lIGludGVybmFsIHN0YXRlIHRvIHRoZSBjYWxsZXIuIFRoZSBwYXRjaCB0aGVuIGNvcnJlY3RseSB1cGRhdGVzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uczogYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCB0byBwYXNzIHRoZSAqYWRkcmVzcyogb2YgdGhlIHRpbWVvdXQgdmFyaWFibGUgKCZhbXA7dGltZW8pLiBUaGUgYWRkaXRpb24gb2YgdGhlIGAhZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMGAgY2hlY2tzIHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgYSBtZWNoYW5pc20gdG8gYmFpbCBvdXQgZWFybHkgZnJvbSB3YWl0aW5nLCBwb3NzaWJseSBpZiB0aGUgdGltZW91dCBleHBpcmVzIG9yIGEgZGlmZmVyZW50IGNvbmRpdGlvbiBhcmlzZXMuIFRoZXNlIGNvbmRpdGlvbmFsIGp1bXBzIGFyZSBpbXBvcnRhbnQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyBzdHJhaWdodDogdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlIGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb24gY2FsbHMgYW5kIHRoZSB0aW1lb3V0IGxvZ2ljIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQlBGIHNvY2tldCBtYXAgcHJvY2Vzc2luZywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZCB0byBkYXRhIGF2YWlsYWJpbGl0eSBhbmQgdGltZW91dCBiZWhhdmlvci4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqcmVhY2hhYmxlKiB0aGlzIGNvZGUgaXMuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB0aGlzIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIEtjb25maWcgb3B0aW9uLiBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBmaWxlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBvdGhlciBLY29uZmlnIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgYXMgd2VsbDsgSSYjMzk7bGwgbmVlZCB0byBtYXAgb3V0IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGNoYW5nZSBpcyB1bmRlciB0aGUgZXhwZWN0ZWQgY29uZGl0aW9ucy4gVGhpcyBpcyBmdW5kYW1lbnRhbDogSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCB0byBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcmVsZXZhbmNlIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgJiM0Mzs9IHRjcF9pbGxpbm9pcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB1ZHBfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgZW5hYmxlcyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYW5kIHRyYWNlIGJhY2sgaXRzIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWN0aXZhdGUgaW4gb3JkZXIgdG8gZ2V0IGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBlbmFibGVkIGFuZCB3b3JraW5nIHByb3Blcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHByb2plY3QuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhpcyB3aWxsIGJlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LCBidXQgbGV0JiMzOTtzIHRha2Ugbm90aGluZyBmb3IgZ3JhbnRlZCBhbmQgc3RhcnQgZGlnZ2luZyBpbiwgYXMgdGhlcmUgbWlnaHQgYmUgYSBmZXcgb3RoZXIgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbi0tXG5uZXQvS2NvbmZpZy00NzgtXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctNDgwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIEJvb2xlYW4gRmxhZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIGEgaGlkZGVuIGJvb2xlYW4gdmFyaWFibGUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgYmVoYXZpb3IuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHJlYWRpbmcgb3Igd3JpdGluZyB0byB0aGlzIGZsYWcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdGhlbiBzZWUgd2hhdCYjMzk7cyBhZmZlY3RpbmcgaXRzIHZhbHVlLiBGaW5kaW5nIHRoZSBwb2ludHMgd2hlcmUgdGhlIGJvb2xlYW4gaXMgYWN0dWFsbHkgc2VsZWN0ZWQgKG9yIHNldCkgaXMgdGhlIG5leHQgdml0YWwgcGllY2Ugb2YgdGhpcyBwdXp6bGU7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0aGF0JiMzOTtzIGRyaXZpbmcgaXRzIHN0YXRlIHRyYW5zaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgbmV0d29ya2luZyBhbmQgZUJQRjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBDb25uZWN0aW9uIHRvIGBORVRfU09DS19NU0dgKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIHBvaW50aW5nIHRvIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IEkmIzM5O3ZlIHVzZWQgYm90aCBidXQgaGF2ZW4mIzM5O3QgcmVhbGx5IGRlZXBseSBjb25zaWRlcmVkIHRoZWlyIGludGVyYWN0aW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMuIEkgd2FudCB0byBrbm93IGV4YWN0bHkgd2hhdCBsaW5rcyB0aGVtLiBXaGF0IHBhcnQgb2YgdGhlIHN5c3RlbSBpcyB0aGUgZ2x1ZSBiZXR3ZWVuIHRoZXNlIHR3byBmZWF0dXJlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGtlcm5lbCBtb2R1bGVzLCBvciBkcml2ZXIgaW50ZXJhY3Rpb25zIGJyaW5nIHRoZW0gdG9nZXRoZXIuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhdXNhbCBjaGFpbi4gV2hlcmUgZG9lcyB0aGUgc3RyZWFtIHBhcnNlciBnZXQgc2V0IHVwLCBhbmQgaG93IGRvZXMgdGhhdCBwcm9jZXNzIGRpcmVjdGx5IGxlYWQgdG8gdGhlIHV0aWxpemF0aW9uIG9yIHNldHVwIG9mIGBORVRfU09DS19NU0dgPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjgwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgZUJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24gJmFtcDsgU29ja21hcCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgb3B0aW9uIGlzIHByZXNlbnRlZCBhcyBhIHVzZXItY29uZmlndXJhYmxlIGJvb2xlYW4sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBpdHMgaW1wbGljYXRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGVCUEYgZmVhdHVyZXMuCgpJIGFsc28gc3VzcGVjdCB0aGF0IGBDR1JPVVBfQlBGYCBtaWdodCBiZSBhIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGUsIHBhcnRpY3VsYXJseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29ja21hcHMuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGV4cGxvcmUgdGhlIGludGVycGxheSBvZiBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoZSBzb2NrZXQgbWFwIGltcGxlbWVudGF0aW9uIGFuZCBjbG9zZWx5IHJlbGF0ZWQgZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvY29yZS9zb2NrX21hcC5jYCBvciBhIHNpbWlsYXJseSByZWxhdGVkIGZpbGUgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkEgUmVhbGl6YXRpb24gQWJvdXQgQlBGX1NZU0NBTEwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIHdhcyBqdXN0IHRyYWNpbmcgdGhyb3VnaCB0aGUgQlBGIGluZnJhc3RydWN0dXJlLCBhbmQgSSB3YXMgcHJldHR5IHN1cmUgSSB3YXMgZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gYSB3aG9sZSBidW5jaCBvZiBrZXJuZWwgc291cmNlIGNvZGUgdG8gZmlndXJlIG91dCB3aGVyZSBgQlBGX1NZU0NBTExgIHdhcyBkZWZpbmVkLCBleHBlY3RpbmcgaXQgdG8gYmUgYnVyaWVkIGRlZXAgaW4gc29tZSBvYnNjdXJlIGhlYWRlci4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGluaXQvS2NvbmZpZ2A/IFNlcmlvdXNseT8gSSBzaG91bGQgaGF2ZSB0aG91Z2h0IG9mIHRoYXQgZmlyc3Q7IGl0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGNoZWNrIGdpdmVuIG15IGV4cGVyaWVuY2UuIFRoYXQmIzM5O3MgYSBodWdlIHRpbWUgc2F2ZXIuIEkgY2FuIHByb2JhYmx5IGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGEgbG90IGZhc3RlciBub3cuIEkgZmVlbCBhIHNsaWdodCBlbWJhcnJhc3NtZW50IHRoYXQgSSBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBLY29uZmlnYCwgdG8gYmUgaG9uZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGB0Y3BfYnBmLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgc29tZSBCUEYgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBrZXkgZnVuY3Rpb25zIEkmIzM5O20gc2VlaW5nIGFyZSBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIGRlZmluaXRlbHkgYWN0aXZlIGFuZCBvcGVyYXRpb25hbCBjb21wb25lbnRzLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUgZ29pbmcgdG8gYmUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgZmxvd3MgdGhyb3VnaCB0aGVzZS4gV2hpbGUgYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgSSYjMzk7bSBub3QgZ29pbmcgdG8gZGlzbWlzcyBpdCByaWdodCBhd2F5LiBJdCYjMzk7cyBzdGlsbCBhIGdvb2Qgc3ltYm9sIHRvIHRyYWNrLCBlc3BlY2lhbGx5IGlmIGlubGluaW5nIGlzbiYjMzk7dCBoYXBwZW5pbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgaW5saW5pbmcgc3RhdHVzLCBvZiBjb3Vyc2UuCgpUaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgcmVhY2hhYmlsaXR5IG9mIGB0Y3BfYnBmX3JlY3Ztc2dgLiBJIGNhbiBzZWUgdGhhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgY2FsbHMgaXQsIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGFsc28gcmVnaXN0ZXJlZCBhcyBhIHByb3RvIGhhbmRsZXIgZm9yIHNvY2ttYXAgaXMgcmVhbGx5IGludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQgZm9yIGludGVyYWN0aW5nIHdpdGggQlBGIGZyb20gdXNlcnNwYWNlLCB3aGljaCBJIG5lZWQgdG8gZXhhbWluZSB2ZXJ5IGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTMzOD1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTM1NS1cbm5ldC9pcHY0L3RjcF9icGYuYzozNTY6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVx0XHRcdCAgIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjYwPXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY2NS1cdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVx0XHQ9IHNvY2tfbWFwX2Nsb3NlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY2NjpcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY2Ny1cdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjczLVx0cHJvdFtUQ1BfQlBGX1JYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY3NDpcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc1LVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ni1cdHByb3RbVENQX0JQRl9UWFJYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2Nzc6XHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc4LX1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzEwPWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MzMtXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzM0Olx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cbm5ldC9pcHY0L3RjcF9icGYuYy03MzUtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUQ1AgQlBGIFNvY2tldG1hcCBIYW5kbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCAtIHRoZXNlIGFyZSB0aGUgYHJlY3Ztc2dgIGhhbmRsZXJzIGZvciBUQ1Agc29ja2V0cyB3aGVuIHRoZXkmIzM5O3JlIHVzZWQgd2l0aGluIGEgQlBGIHNvY2ttYXAuIFRoaXMgc2VlbXMgbGlrZSBhIHByb21pc2luZyBhcmVhIGZvciBmdXp6aW5nLCBhYnNvbHV0ZWx5LiAKClRoZSBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBhcmUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBiZWNhdXNlLCBhcyBJIHJlY2FsbCwgYEJQRl9TVFJFQU1fUEFSU0VSYCBzZWxlY3RzIGBORVRfU09DS19NU0dgLiBXaGlsZSBgQ0dST1VQX0JQRmAgaXMgb2Z0ZW4gcGFpcmVkIHdpdGggc29ja21hcHMsIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYXJlIHRoZSBjcml0aWNhbCBmbGFncyBoZXJlLgoKTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgZXNzZW50aWFsIGZvciB0aGUgYHRjcF9icGYuY2AgbW9kdWxlLiBIbW0sIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGluY2x1ZGVzIGBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vYC4gUmlnaHQsIHRoYXQgY29uZmlybXMgaXQgLSBgTkVUX1NPQ0tfTVNHYCAqaXMqIG5lZWRlZC4gR2l2ZW4gdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIHNlbGVjdHMgYE5FVF9TT0NLX01TR2AsIGFuZCBUTFMgYWxzbyBzZWxlY3RzIGBORVRfU09DS19NU0dgLCBzcGVjaWZ5aW5nIGJvdGggYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBzaG91bGQgY292ZXIgYWxsIHRoZSBiYXNlcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBleHBvcnRlZC4gT2theSwgaXQmIzM5O3Mgc3RhdGljOgoKYGBgYwpzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKCQkJICAgICBsb25nICp0aW1lbykKYGBgCgpTbyB0aGF0IGNvbmZpcm1zIGl0LCB3ZSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC4gTGV0JiMzOTtzIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24gYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBhcyB0aGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLgoKSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGRlZmluaXRpb24gaW4gYG5ldC9LY29uZmlnYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1NAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBCUEYgcmVjdm1zZyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgYXMgdGhlIGxpa2VseSBjb25maWd1cmF0aW9uIGhlcmUuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWdzIHRoYXQgd291bGQgYWxzbyBuZWVkIGF0dGVudGlvbi4gQWxyaWdodCwgaXQgc2VlbXMgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgYSBoaWRkZW4gY29uZmlnIHRoYXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYEJQRl9TVFJFQU1fUEFSU0VSYC4gR29vZCwgdGhhdCBtZWFucyBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBjb25maWcgd2UgbmVlZCB0byBlbmFibGUgdG8gdHJpZ2dlciB0aGlzLgoKTGV0JiMzOTtzIHN5bnRoZXNpemUgdGhpczoKCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaC4gVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdGFyZ2V0IGFyZSBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGB0Y3BfYnBmX3JlY3Ztc2dgLCBhbmQgYHRjcF9tc2dfd2FpdF9kYXRhYC4KClRvIG1ha2UgaXQgYWxsIHdvcmssIHdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgICh0aGF0JiMzOTtzIGEgZ2l2ZW4pICphbmQqIGNyaXRpY2FsbHksIGBCUEZfU1RSRUFNX1BBUlNFUmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIGByZWN2bXNnYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBhcmUgdGhlIGFmZmVjdGVkIHJvdXRpbmVzLiBUaGUgaW1wYWN0IGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSB0byBmb2N1cyBmb3IgYW4gZXhwbG9pdC4gSXQmIzM5O3MgdHJpZ2dlcmVkIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGluY2x1ZGVkIGluIGEgQlBGIHNvY2ttYXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIFRDUCBCUEYgcmVjdm1zZyBmdW5jdGlvbnMgKHRjcF9icGZfcmVjdm1zZ19wYXJzZXIgYW5kIHRjcF9icGZfcmVjdm1zZykgd2hpY2ggYXJlIHJlYWNoYWJsZSB3aGVuIGEgVENQIHNvY2tldCBpcyBhZGRlZCB0byBhIEJQRiBzb2NrbWFwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nL0JQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfbXNnX3dhaXRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIHJlY3Ztc2cgZnVuY3Rpb25zICh0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyIGFuZCB0Y3BfYnBmX3JlY3Ztc2cpIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBhIFRDUCBzb2NrZXQgaXMgYWRkZWQgdG8gYSBCUEYgc29ja21hcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo0NS45NjM0NjQ3NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NDQ1NTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo0NS45NjM0NzMyMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTM1OTM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1YmUyNGI2YmY4M2UwYWNhNjUwY2VjYzI0NWE5NDQ0NDM4NmZmMWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDY6NDU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmU1OGFiMmQxZWU5NDMzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0xNzksNyArMTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLVxcdFxcdFxcdCAgICAgbG9uZyB0aW1lbylcXG4rXFx0XFx0XFx0ICAgICBsb25nICp0aW1lbylcXG4ge1xcbiBcXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4tXFx0aWYgKCF0aW1lbylcXG4rXFx0aWYgKCEqdGltZW8pXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcXG4tXFx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXFx1MDAyNnRpbWVvLFxcbitcXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcXG4gXFx0XFx0XFx0ICAgICFsaXN0X2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19tc2cpIHx8XFxuIFxcdFxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0aW50IGNvcGllZF9mcm9tX3NlbGYgPSAwO1xcbiBcXHRpbnQgY29waWVkID0gMDtcXG4gXFx0dTMyIHNlcTtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMjYyLDYgKzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFxcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcXG4gXFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcXG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdH1cXG4gXFx0c2VxICs9IGNvcGllZF9mcm9tX3NlbGY7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4gXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG5AQCAtMjk5LDcgKzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gXFx0XFx0aWYgKCF0aW1lbykge1xcbiBcXHRcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG5AQCAtMzEwLDEzICszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwMjZcXHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuIFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRpZiAoIWRhdGEgXFx1MDAyNlxcdTAwMjYgdGltZW8gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcXG4gXFx0XFx0Y29waWVkID0gLUVBR0FJTjtcXG4gXFx0fVxcbiBvdXQ6XFxuQEAgLTM1NSw2ICszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbiBcXHRpbnQgY29waWVkLCByZXQ7XFxuK1xcdGxvbmcgdGltZW87XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxcbiBcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuQEAgLTM3MSwxNCArMzc1LDQ1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdH1cXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFxuK1xcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbitcXG4gbXNnX2J5dGVzX3JlYWR5OlxcbiBcXHRjb3BpZWQgPSBza19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4tXFx0XFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkge1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc29ja19lcnJvcihzayk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PVENPTk47XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXRpbWVvKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFxcdTAwMjZ0aW1lbyk7XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRyZXQgPSBkYXRhO1xcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG5AQCAtMzkwLDYgKzQyNSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRcXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcdHJldCA9IGNvcGllZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxcbmluZGV4IGM5ZjQ2MDMxYWM3M2IyLi5hMTg0MGE1ZDQ1ZjY3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXFxuQEAgLTM5LDYgKzM5LDggQEAgc2tfY29ubmVjdF96ZXJvX2FkZHJcXG4gc2tfc29fcGVla19vZmZcXG4gc2tmX25ldF9vZmZcXG4gc29ja2V0XFxuK3NvY2ttYXBfcmVjdmZyb21cXG4rc29ja21hcF9yZWN2ZnJvbS5icGYub1xcbiBzb19pbmNvbWluZ19jcHVcXG4gc29fbmV0bnNfY29va2llXFxuIHNvX3Jjdl9saXN0ZW5lclxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uYTA1YTRhOTI0NDAyMTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTE2MSw2ICsxNjEsNyBAQCBURVNUX0dFTl9GSUxFUyA6PSBcXFxcXFxuIFxcdHNvX25ldG5zX2Nvb2tpZSBcXFxcXFxuIFxcdHNvX3Jjdl9saXN0ZW5lciBcXFxcXFxuIFxcdHNvY2tldCBcXFxcXFxuK1xcdHNvY2ttYXBfcmVjdmZyb20uYnBmLm8gXFxcXFxcbiBcXHRzdHJlc3NfcmV1c2Vwb3J0X2xpc3RlbiBcXFxcXFxuIFxcdHRjcF9mYXN0b3Blbl9iYWNrdXBfa2V5IFxcXFxcXG4gXFx0dGNwX2lucSBcXFxcXFxuQEAgLTE5MSw2ICsxOTIsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxcXFxuIFxcdHNrX2Nvbm5lY3RfemVyb19hZGRyIFxcXFxcXG4gXFx0c2tfc29fcGVla19vZmYgXFxcXFxcbiBcXHRzb19pbmNvbWluZ19jcHUgXFxcXFxcbitcXHRzb2NrbWFwX3JlY3Zmcm9tIFxcXFxcXG4gXFx0dGFwIFxcXFxcXG4gXFx0dGNwX3BvcnRfc2hhcmUgXFxcXFxcbiBcXHR0bHMgXFxcXFxcbkBAIC0yMzgsMyArMjQwLDcgQEAgJChPVVRQVVQpL2JpbmRfYmhhc2g6IExETElCUyArPSAtbHB0aHJlYWRcXG4gJChPVVRQVVQpL2lvX3VyaW5nX3plcm9jb3B5X3R4OiBDRkxBR1MgKz0gLUkuLi8uLi8uLi9pbmNsdWRlL1xcbiBcXG4gaW5jbHVkZSBicGYubWtcXG4rXFxuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IExETElCUyArPSAkKEJQRk9CSikgLWxlbGYgLWx6IC1scHRocmVhZFxcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogQ0ZMQUdTICs9IC1JJChPVVRQVVQpL3Rvb2xzL2luY2x1ZGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZlYzQ3MGM3MzhmMWU4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXFxuQEAgLTAsMCArMSwzMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgQUZfSU5FVCAyXFxuK1xcbitjaGFyIExJQ0VOU0VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9TT0NLSEFTSCk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XFxuK1xcdF9fdHlwZShrZXksIF9fdTY0KTtcXG4rXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuK1xcbit9IG1hcF9zb2NrcyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInNvY2tvcHNcXFwiKSBpbnQgb25fc29ja29wcyhzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpXFxuK3tcXG4rXFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvcCA9PSBCUEZfU09DS19PUFNfQUNUSVZFX0VTVEFCTElTSEVEX0NCKSB7XFxuK1xcdFxcdF9fdTY0IGNvb2tpZSA9IGJwZl9nZXRfc29ja2V0X2Nvb2tpZShjdHgpO1xcbitcXG4rXFx0XFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcXHUwMDI2bWFwX3NvY2tzLCBcXHUwMDI2Y29va2llLCBCUEZfTk9FWElTVCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInNrX3NrYi9zdHJlYW1fdmVyZGljdFxcXCIpIGludCBvbl9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gU0tfUEFTUztcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY5NmI0NjczYzk3N2NjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmNcXG5AQCAtMCwwICsxLDI4OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvbGliYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXRvbWljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXFxuKyNkZWZpbmUgUEFZTE9BRF9FTkQgJ2UnXFxuK1xcbitzdGF0aWMgaW50IHN0YXJ0X2xpc3RlbmluZyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIHVpbnQxNl90ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xcbitcXHRzb2NrbGVuX3QgYWRkcmxlbjtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbitcXHRhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XFxuK1xcbitcXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xcbitcXG4rXFx0QVNTRVJUX05FKGZkLCAtMSk7XFxuK1xcdEFTU0VSVF9FUShiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xcbitcXHRBU1NFUlRfRVEobGlzdGVuKGZkLCA1KSwgMCk7XFxuK1xcbitcXHRhZGRybGVuID0gc2l6ZW9mKGFkZHIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIFxcdTAwMjZhZGRybGVuKSwgMCk7XFxuK1xcbitcXHQqcG9ydCA9IGFkZHIuc2luX3BvcnQ7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHByb2Nlc3NfY2xpZW50KHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nKVxcbit7XFxuK1xcdGNoYXIgYnVmWzEwMjRdO1xcbitcXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcXG4rXFxuK1xcdHRpbWVvLnR2X3NlYyA9IDA7XFxuK1xcdHRpbWVvLnR2X3VzZWMgPSAxMDAwO1xcbitcXG4rXFx0RVhQRUNUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcXG4rXFxuK1xcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xcbitcXHRcXHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGlmIChsZW4gPT0gLTEpIHtcXG4rXFx0XFx0XFx0RVhQRUNUX1RSVUUoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdEVYUEVDVF9HRShsZW4sIDApO1xcbitcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjPSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlKGZkLCBcXFwidGVzdFxcXCIsIDQpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbit9XFxuK1xcbitzdHJ1Y3QgYnBmX3Qge1xcbitcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKm9uX3NvY2tvcHM7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqb25fcmVjdjtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHNldHVwX2JwZihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcmVjdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl90ICpicGYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbitcXHRpbnQgY2dyb3VwO1xcbitcXG4rXFx0bWVtc2V0KGJwZiwgMCwgc2l6ZW9mKCpicGYpKTtcXG4rXFx0YnBmLVxcdTAwM2VvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUocGF0aCwgTlVMTCk7XFxuK1xcbitcXHRBU1NFUlRfTkUoYnBmLVxcdTAwM2VvYmosIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoYnBmX29iamVjdF9fbG9hZChicGYtXFx1MDAzZW9iaiksIDApO1xcbitcXG4rXFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi1cXHUwMDNlb2JqLCBcXFwib25fc29ja29wc1xcXCIpO1xcbitcXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XFxuK1xcbitcXHRjZ3JvdXAgPSBvcGVuKFxcXCIvc3lzL2ZzL2Nncm91cFxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0QVNTRVJUX05FKGNncm91cCwgLTEpO1xcbitcXG4rXFx0YnBmLVxcdTAwM2Vvbl9zb2Nrb3BzID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAocHJvZywgY2dyb3VwKTtcXG4rXFx0Y2xvc2UoY2dyb3VwKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShicGYtXFx1MDAzZW9uX3NvY2tvcHMsIE5VTEwpO1xcbitcXG4rXFx0aWYgKHJlY3YpIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IGJwZl9vYmplY3RfX2ZpbmRfbWFwX2J5X25hbWUoYnBmLVxcdTAwM2VvYmosIFxcXCJtYXBfc29ja3NcXFwiKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9ORShtYXAsIE5VTEwpO1xcbitcXG4rXFx0XFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi1cXHUwMDNlb2JqLCBcXFwib25fcmVjdlxcXCIpO1xcbitcXHRcXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XFxuK1xcbitcXHRcXHRicGYtXFx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XFxuK1xcdFxcdEFTU0VSVF9ORShicGYtXFx1MDAzZW9uX3JlY3YsIE5VTEwpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0cnVjdCBzZXJ2ZXJfdCB7XFxuK1xcdGludCBmZDtcXG4rXFx0YXRvbWljX2ludCBydW5uaW5nO1xcbitcXHRwdGhyZWFkX3QgdGhyZWFkO1xcbitcXHRzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICptZXRhZGF0YTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkICpydW5fc2VydmVyKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcXG4rXFx0c3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhID0gc2VydmVyLVxcdTAwM2VtZXRhZGF0YTtcXG4rXFxuK1xcdHdoaWxlIChhdG9taWNfbG9hZChcXHUwMDI2c2VydmVyLVxcdTAwM2VydW5uaW5nKSkge1xcbitcXHRcXHRpbnQgY2xpZW50X2ZkID0gYWNjZXB0KHNlcnZlci1cXHUwMDNlZmQsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xcbitcXHRcXHRcXHRpZiAoIWF0b21pY19sb2FkKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXJ1bm5pbmcpKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwcm9jZXNzX2NsaWVudChfbWV0YWRhdGEsIGNsaWVudF9mZCwgXFx1MDAyNnNlcnZlci1cXHUwMDNlcnVubmluZyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHNpemVfdCByZW1haW5pbmcgPSBsZW47XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHNzaXplX3QgYnl0ZXMgPSB3cml0ZShmZCwgYnVmICsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XFxuK1xcbitcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJlbWFpbmluZyAtPSBieXRlcztcXG4rXFx0fSB3aGlsZSAocmVtYWluaW5nKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XFxuK1xcdHN0cnVjdCBicGZfdCBicGY7XFxuK1xcdGNoYXIgKnBheWxvYWQ7XFxuK1xcdHNpemVfdCBwYXlsb2FkX2xlbjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdGJvb2wgd2l0aF9yZWN2O1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnKVxcbit7XFxuK1xcdC53aXRoX3JlY3YgPSBmYWxzZVxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcXG4re1xcbitcXHQud2l0aF9yZWN2ID0gdHJ1ZVxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdG1lbXNldChcXHUwMDI2c2VsZi1cXHUwMDNlYWRkciwgMCwgc2l6ZW9mKHNlbGYtXFx1MDAzZWFkZHIpKTtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuID0gMTAyNCAqIDEwMjQgKiAyNTtcXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZCA9IG1hbGxvYyhzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbik7XFxuK1xcdEFTU0VSVF9ORShzZWxmLVxcdTAwM2VwYXlsb2FkLCBOVUxMKTtcXG4rXFxuK1xcdG1lbXNldChzZWxmLVxcdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbik7XFxuK1xcdHNlbGYtXFx1MDAzZXBheWxvYWRbc2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IFBBWUxPQURfRU5EO1xcbitcXG4rXFx0c2V0dXBfYnBmKF9tZXRhZGF0YSwgXFxcInNvY2ttYXBfcmVjdmZyb20uYnBmLm9cXFwiLCB2YXJpYW50LVxcdTAwM2V3aXRoX3JlY3YsIFxcdTAwMjZzZWxmLVxcdTAwM2VicGYpO1xcbitcXHRhdG9taWNfc3RvcmUoXFx1MDAyNnNlbGYtXFx1MDAzZXNlcnZlci5ydW5uaW5nLCAxKTtcXG4rXFx0c2VsZi1cXHUwMDNlc2VydmVyLmZkID0gc3RhcnRfbGlzdGVuaW5nKF9tZXRhZGF0YSwgXFx1MDAyNnNlbGYtXFx1MDAzZWFkZHIuc2luX3BvcnQpO1xcbitcXHRzZWxmLVxcdTAwM2VzZXJ2ZXIubWV0YWRhdGEgPSBfbWV0YWRhdGE7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCwgXFx1MDAyNnJ1bl9zZXJ2ZXIsIFxcdTAwMjZzZWxmLVxcdTAwM2VzZXJ2ZXIpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXFxuK3tcXG4rXFx0YXRvbWljX3N0b3JlKFxcdTAwMjZzZWxmLVxcdTAwM2VzZXJ2ZXIucnVubmluZywgMCk7XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2VydmVyLmZkKSB7XFxuK1xcdFxcdHNodXRkb3duKHNlbGYtXFx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZXNlcnZlci5mZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2VzZXJ2ZXIudGhyZWFkKVxcbitcXHRcXHRwdGhyZWFkX2pvaW4oc2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCk7XFxuK1xcbitcXHRmcmVlKHNlbGYtXFx1MDAzZXBheWxvYWQpO1xcbitcXHRicGZfbGlua19fZGVzdHJveShzZWxmLVxcdTAwM2VicGYub25fc29ja29wcyk7XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlYnBmLm9uX3JlY3YpXFxuK1xcdFxcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXFx1MDAzZWJwZi5vbl9yZWN2KTtcXG4rXFxuK1xcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXFx1MDAzZWJwZi5vYmopO1xcbit9XFxuK1xcbitURVNUX0Yoc29ja21hcF9yZWN2ZnJvbSwgbm9fdGltZW91dClcXG4re1xcbitcXHRjaGFyIGlnbm9yZWRbMTI4XTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xcbitcXHRcXHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9ORShmZCwgLTEpO1xcbitcXHRcXHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZzZWxmLVxcdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cXHUwMDNlYWRkcikpLCAwKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi1cXHUwMDNlcGF5bG9hZCwgc2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcXG4rXFxuK1xcdFxcdGlmIChyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdEFTU0VSVF9ORShlcnJubywgRUFHQUlOKTtcXG4rXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpXFxuK3tcXG4rXFx0cmV0dXJuICh0aW1lLVxcdTAwM2V0dl9zZWMgKiAxMDAwMDAwMDAwTEwpICsgdGltZS1cXHUwMDNldHZfbnNlYztcXG4rfVxcbitcXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dClcXG4re1xcbitcXHRjaGFyIGlnbm9yZWRbMTI4XTtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdGltZW87XFxuK1xcbitcXHR0aW1lby50dl9zZWMgPSAwO1xcbitcXHR0aW1lby50dl91c2VjID0gNTAwMDtcXG4rXFxuK1xcdC8qIHJlbW92ZSB0aGUgcGF5bG9hZCBlbmQgZGVsaW1pdGVyIHNvIHRoZSBzZXJ2ZXIgbmV2ZXIgcmVzcG9uZHMgYW5kIHJlY3Zmcm9tIHRpbWVzIG91dC4gKi9cXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZFtzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbiAtIDFdID0gMDtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xcbitcXHRcXHRzdHJ1Y3QgdGltZXNwZWMgYmVnO1xcbitcXHRcXHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfTkUoZmQsIC0xKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c2VsZi1cXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXFx1MDAzZWFkZHIpKSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXFx1MDAzZXBheWxvYWQsIHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApO1xcbitcXG4rXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZiZWcpO1xcbitcXHRcXHRBU1NFUlRfRVEocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCksIC0xKTtcXG4rXFx0XFx0ZXJyID0gZXJybm87XFxuK1xcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2ZW5kKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9FUShlcnIsIEVBR0FJTik7XFxuK1xcdFxcdEFTU0VSVF9HRSh0b19uYW5vcyhcXHUwMDI2ZW5kKSAtIHRvX25hbm9zKFxcdTAwMjZiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7XFxuK1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NDYuNTYzNzkwNzc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3NDExNTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1YmUyNGI2YmY4M2UwYWNhNjUwY2VjYzI0NWE5NDQ0NDM4NmZmMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNjo0NTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmU1OGFiMmQxZWU5NDMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4rKysgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyArMTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbiBcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0ICAgICBsb25nIHRpbWVvKVxuK1x0XHRcdCAgICAgbG9uZyAqdGltZW8pXG4ge1xuIFx0REVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTtcbiBcdGludCByZXQgPSAwO1xuQEAgLTE4NywxMiArMTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbitcdGlmICghKnRpbWVvKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0YWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XG4tXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcdTAwMjZ0aW1lbyxcbitcdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIHRpbWVvLFxuIFx0XHRcdCAgICAhbGlzdF9lbXB0eShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX21zZykgfHxcbiBcdFx0XHQgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgXHUwMDI2d2FpdCk7XG4gXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XG5AQCAtMjI5LDYgKzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4rXHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMjYyLDYgKzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdH1cbiBcdH1cbiBcbitcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4rXG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXHUwMDI2Y29waWVkX2Zyb21fc2VsZik7XG4gXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxuQEAgLTI4MCw3ICsyODMsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0fVxuIFx0c2VxICs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyArMzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFx0XHRpZiAoIXRpbWVvKSB7XG4gXHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC0zMTAsMTMgKzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcbitcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4rXHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4rXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gb3V0OlxuQEAgLTM1NSw2ICszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuK1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTM3MSwxNCArMzc1LDQ1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4gXHR9XG4gXHRsb2NrX3NvY2soc2spO1xuK1xuK1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbitcbiBtc2dfYnl0ZXNfcmVhZHk6XG4gXHRjb3BpZWQgPSBza19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuK1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbitcdFx0XHRyZXQgPSAtRU5PVENPTk47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKCF0aW1lbykge1xuK1x0XHRcdHJldCA9IC1FQUdBSU47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiArNDI1LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0XHR9XG4rXHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4rXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuaW5kZXggYzlmNDYwMzFhYzczYjIuLmExODQwYTVkNDVmNjdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5AQCAtMzksNiArMzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkclxuIHNrX3NvX3BlZWtfb2ZmXG4gc2tmX25ldF9vZmZcbiBzb2NrZXRcbitzb2NrbWFwX3JlY3Zmcm9tXG4rc29ja21hcF9yZWN2ZnJvbS5icGYub1xuIHNvX2luY29taW5nX2NwdVxuIHNvX25ldG5zX2Nvb2tpZVxuIHNvX3Jjdl9saXN0ZW5lclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggNzA4ZDk2MGFlMDdkNWIuLmEwNWE0YTkyNDQwMjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0xNjEsNiArMTYxLDcgQEAgVEVTVF9HRU5fRklMRVMgOj0gXFxcbiBcdHNvX25ldG5zX2Nvb2tpZSBcXFxuIFx0c29fcmN2X2xpc3RlbmVyIFxcXG4gXHRzb2NrZXQgXFxcbitcdHNvY2ttYXBfcmVjdmZyb20uYnBmLm8gXFxcbiBcdHN0cmVzc19yZXVzZXBvcnRfbGlzdGVuIFxcXG4gXHR0Y3BfZmFzdG9wZW5fYmFja3VwX2tleSBcXFxuIFx0dGNwX2lucSBcXFxuQEAgLTE5MSw2ICsxOTIsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcbiBcdHNrX3NvX3BlZWtfb2ZmIFxcXG4gXHRzb19pbmNvbWluZ19jcHUgXFxcbitcdHNvY2ttYXBfcmVjdmZyb20gXFxcbiBcdHRhcCBcXFxuIFx0dGNwX3BvcnRfc2hhcmUgXFxcbiBcdHRscyBcXFxuQEAgLTIzOCwzICsyNDAsNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICs9IC1scHRocmVhZFxuICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICs9IC1JLi4vLi4vLi4vaW5jbHVkZS9cbiBcbiBpbmNsdWRlIGJwZi5ta1xuK1xuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogTERMSUJTICs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyArPSAtSSQoT1VUUFVUKS90b29scy9pbmNsdWRlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZWM0NzBjNzM4ZjFlOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbisjZGVmaW5lIEFGX0lORVQgMlxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XG4rXHRfX3R5cGUoa2V5LCBfX3U2NCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbitcbit9IG1hcF9zb2NrcyBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzb2Nrb3BzXCIpIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbit7XG4rXHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikge1xuK1x0XHRfX3U2NCBjb29raWUgPSBicGZfZ2V0X3NvY2tldF9jb29raWUoY3R4KTtcbitcbitcdFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcdTAwMjZtYXBfc29ja3MsIFx1MDAyNmNvb2tpZSwgQlBGX05PRVhJU1QpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInNrX3NrYi9zdHJlYW1fdmVyZGljdFwiKSBpbnQgb25fcmVjdihzdHJ1Y3QgX19za19idWZmICpjdHgpXG4re1xuK1x0cmV0dXJuIFNLX1BBU1M7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmY5NmI0NjczYzk3N2NjXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXG4rI2RlZmluZSBQQVlMT0FEX0VORCAnZSdcbitcbitzdGF0aWMgaW50IHN0YXJ0X2xpc3RlbmluZyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIHVpbnQxNl90ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c29ja2xlbl90IGFkZHJsZW47XG4rXHRpbnQgZmQ7XG4rXG4rXHRtZW1zZXQoXHUwMDI2YWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbitcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XG4rXG4rXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuK1xuK1x0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xuK1x0QVNTRVJUX0VRKGxpc3RlbihmZCwgNSksIDApO1xuK1xuK1x0YWRkcmxlbiA9IHNpemVvZihhZGRyKTtcbitcbitcdEFTU0VSVF9FUShnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmFkZHJsZW4pLCAwKTtcbitcbitcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsIGF0b21pY19pbnQgKnJ1bm5pbmcpXG4re1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbitcbitcdHRpbWVvLnR2X3NlYyA9IDA7XG4rXHR0aW1lby50dl91c2VjID0gMTAwMDtcbitcbitcdEVYUEVDVF9FUShzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcbitcbitcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xuK1x0XHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGxlbiA9PSAtMSkge1xuK1x0XHRcdEVYUEVDVF9UUlVFKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0RVhQRUNUX0dFKGxlbiwgMCk7XG4rXG4rXHRcdGlmIChsZW4gXHUwMDNjPSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHdyaXRlKGZkLCBcInRlc3RcIiwgNCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK3N0cnVjdCBicGZfdCB7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9zb2Nrb3BzO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xuK307XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfdCAqYnBmKVxuK3tcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdGludCBjZ3JvdXA7XG4rXG4rXHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xuK1x0YnBmLVx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb2JqLCBOVUxMKTtcbitcdEFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi1cdTAwM2VvYmopLCAwKTtcbitcbitcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3NvY2tvcHNcIik7XG4rXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4rXG4rXHRjZ3JvdXAgPSBvcGVuKFwiL3N5cy9mcy9jZ3JvdXBcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX05FKGNncm91cCwgLTEpO1xuK1xuK1x0YnBmLVx1MDAzZW9uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApO1xuK1x0Y2xvc2UoY2dyb3VwKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fc29ja29wcywgTlVMTCk7XG4rXG4rXHRpZiAocmVjdikge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm1hcF9zb2Nrc1wiKTtcbitcbitcdFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XG4rXG4rXHRcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3JlY3ZcIik7XG4rXHRcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcbitcbitcdFx0YnBmLVx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XG4rXHRcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fcmVjdiwgTlVMTCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBzZXJ2ZXJfdCB7XG4rXHRpbnQgZmQ7XG4rXHRhdG9taWNfaW50IHJ1bm5pbmc7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0c3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqbWV0YWRhdGE7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHNlcnZlcl90ICpzZXJ2ZXIgPSBhcmc7XG4rXHRzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEgPSBzZXJ2ZXItXHUwMDNlbWV0YWRhdGE7XG4rXG4rXHR3aGlsZSAoYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKSB7XG4rXHRcdGludCBjbGllbnRfZmQgPSBhY2NlcHQoc2VydmVyLVx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xuK1x0XHRcdGlmICghYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0cHJvY2Vzc19jbGllbnQoX21ldGFkYXRhLCBjbGllbnRfZmQsIFx1MDAyNnNlcnZlci1cdTAwM2VydW5uaW5nKTtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdHNpemVfdCByZW1haW5pbmcgPSBsZW47XG4rXG4rXHRkbyB7XG4rXHRcdHNzaXplX3QgYnl0ZXMgPSB3cml0ZShmZCwgYnVmICsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XG4rXG4rXHRcdGlmIChieXRlcyBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1xuK1x0XHRyZW1haW5pbmcgLT0gYnl0ZXM7XG4rXHR9IHdoaWxlIChyZW1haW5pbmcpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK0ZJWFRVUkUoc29ja21hcF9yZWN2ZnJvbSlcbit7XG4rXHRzdHJ1Y3Qgc2VydmVyX3Qgc2VydmVyO1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4rXHRzdHJ1Y3QgYnBmX3QgYnBmO1xuK1x0Y2hhciAqcGF5bG9hZDtcbitcdHNpemVfdCBwYXlsb2FkX2xlbjtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxuK3tcbitcdGJvb2wgd2l0aF9yZWN2O1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnKVxuK3tcbitcdC53aXRoX3JlY3YgPSBmYWxzZVxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcbit7XG4rXHQud2l0aF9yZWN2ID0gdHJ1ZVxuK307XG4rXG4rRklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxuK3tcbitcdG1lbXNldChcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIDAsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKTtcbitcbitcdHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuK1x0c2VsZi1cdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuK1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlcGF5bG9hZCwgTlVMTCk7XG4rXG4rXHRtZW1zZXQoc2VsZi1cdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKTtcbitcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSBQQVlMT0FEX0VORDtcbitcbitcdHNldHVwX2JwZihfbWV0YWRhdGEsIFwic29ja21hcF9yZWN2ZnJvbS5icGYub1wiLCB2YXJpYW50LVx1MDAzZXdpdGhfcmVjdiwgXHUwMDI2c2VsZi1cdTAwM2VicGYpO1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWFkZHIuc2luX3BvcnQpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIubWV0YWRhdGEgPSBfbWV0YWRhdGE7XG4rXG4rXHRzZWxmLVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRzZWxmLVx1MDAzZWFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTtcbitcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCwgXHUwMDI2cnVuX3NlcnZlciwgXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXG4re1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDApO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLmZkKSB7XG4rXHRcdHNodXRkb3duKHNlbGYtXHUwMDNlc2VydmVyLmZkLCBTSFVUX1JEKTtcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQpO1xuK1x0fVxuK1xuK1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZClcbitcdFx0cHRocmVhZF9qb2luKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgTlVMTCk7XG4rXG4rXHRmcmVlKHNlbGYtXHUwMDNlcGF5bG9hZCk7XG4rXHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9zb2Nrb3BzKTtcbitcbitcdGlmIChzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KVxuK1x0XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KTtcbitcbitcdGJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtXHUwMDNlYnBmLm9iaik7XG4rfVxuK1xuK1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCBub190aW1lb3V0KVxuK3tcbitcdGNoYXIgaWdub3JlZFsxMjhdO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcbitcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4rXG4rXHRcdEFTU0VSVF9ORShmZCwgLTEpO1xuK1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbitcbitcdFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVx1MDAzZXBheWxvYWQsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcbitcbitcdFx0aWYgKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpIFx1MDAzYyAwKVxuK1x0XHRcdEFTU0VSVF9ORShlcnJubywgRUFHQUlOKTtcbitcbitcdFx0Y2xvc2UoZmQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50NjRfdCB0b19uYW5vcyhzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpXG4re1xuK1x0cmV0dXJuICh0aW1lLVx1MDAzZXR2X3NlYyAqIDEwMDAwMDAwMDBMTCkgKyB0aW1lLVx1MDAzZXR2X25zZWM7XG4rfVxuK1xuK1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCB3aXRoX3RpbWVvdXQpXG4re1xuK1x0Y2hhciBpZ25vcmVkWzEyOF07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbitcbitcdHRpbWVvLnR2X3NlYyA9IDA7XG4rXHR0aW1lby50dl91c2VjID0gNTAwMDtcbitcbitcdC8qIHJlbW92ZSB0aGUgcGF5bG9hZCBlbmQgZGVsaW1pdGVyIHNvIHRoZSBzZXJ2ZXIgbmV2ZXIgcmVzcG9uZHMgYW5kIHJlY3Zmcm9tIHRpbWVzIG91dC4gKi9cbitcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSAwO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcbitcdFx0c3RydWN0IHRpbWVzcGVjIGJlZztcbitcdFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcbitcdFx0aW50IGVycjtcbitcbitcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4rXG4rXHRcdEFTU0VSVF9ORShmZCwgLTEpO1xuK1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbitcbitcdFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVx1MDAzZXBheWxvYWQsIHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pLCAwKTtcbitcbitcdFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApO1xuK1xuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YmVnKTtcbitcdFx0QVNTRVJUX0VRKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpLCAtMSk7XG4rXHRcdGVyciA9IGVycm5vO1xuK1x0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2ZW5kKTtcbitcbitcdFx0QVNTRVJUX0VRKGVyciwgRUFHQUlOKTtcbitcdFx0QVNTRVJUX0dFKHRvX25hbm9zKFx1MDAyNmVuZCkgLSB0b19uYW5vcyhcdTAwMjZiZWcpLCB0aW1lby50dl91c2VjICogMTAwMCk7XG4rXG4rXHRcdGNsb3NlKGZkKTtcbitcdH1cbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ1OjQ2LjU2Mzc5MzQ3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjIzMjk2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBUQ1AgQlBGIHJlY3Ztc2cgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgVENQIEJQRiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGZpbGUgYW5kIGFkZGluZyBhIG5ldyBzZWxmdGVzdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBvcHRpbWl6aW5nIGhvdyB3ZSBoYW5kbGUgYHJlY3Ztc2dgIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc29ja21hcCBmcmFtZXdvcmsgZm9yIFRDUC5cblxuTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgdGNwX21zZ193YWl0X2RhdGFgIHRvIGFjY2VwdCBhIHBvaW50ZXIgdG8gYSB0aW1lb3V0IChgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YgYGxvbmcgdGltZW9gKSBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4gVGhpcyBsaWtlbHkgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byAqbW9kaWZ5KiB0aGUgdGltZW91dCB2YWx1ZSwgd2hpY2ggc2lnbmFscyBzb21lIGludGVybmFsIHN0YXRlIHRvIHRoZSBjYWxsZXIuIFRoZSBwYXRjaCB0aGVuIGNvcnJlY3RseSB1cGRhdGVzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uczogYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCB0byBwYXNzIHRoZSAqYWRkcmVzcyogb2YgdGhlIHRpbWVvdXQgdmFyaWFibGUgKFx1MDAyNnRpbWVvKS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwYCBjaGVja3Mgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGEgbWVjaGFuaXNtIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20gd2FpdGluZywgcG9zc2libHkgaWYgdGhlIHRpbWVvdXQgZXhwaXJlcyBvciBhIGRpZmZlcmVudCBjb25kaXRpb24gYXJpc2VzLiBUaGVzZSBjb25kaXRpb25hbCBqdW1wcyBhcmUgaW1wb3J0YW50OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5TbywgbGV0IG1lIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGlzIHN0cmFpZ2h0OiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYHRjcF9tc2dfd2FpdF9kYXRhYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbiBjYWxscyBhbmQgdGhlIHRpbWVvdXQgbG9naWMgbWFrZSBzZW5zZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBCUEYgc29ja2V0IG1hcCBwcm9jZXNzaW5nLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIGRhdGEgYXZhaWxhYmlsaXR5IGFuZCB0aW1lb3V0IGJlaGF2aW9yLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnJlYWNoYWJsZSogdGhpcyBjb2RlIGlzLiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCB0aGlzIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIEtjb25maWcgb3B0aW9uLiBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBmaWxlLiBJdCdzIGxpa2VseSB0aGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBhcyB3ZWxsOyBJJ2xsIG5lZWQgdG8gbWFwIG91dCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBzcGFjZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBjaGFuZ2UgaXMgdW5kZXIgdGhlIGV4cGVjdGVkIGNvbmRpdGlvbnMuIFRoaXMgaXMgZnVuZGFtZW50YWw6IEkgbmVlZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJlbGV2YW5jZSBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjcwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NTIuOTg2MTI0OTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjYzMDg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo1My4yOTI3NjQzNzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3OTE3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgZW5hYmxlcyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uPyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYW5kIHRyYWNlIGJhY2sgaXRzIHJlcXVpcmVtZW50cy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBhY3RpdmF0ZSBpbiBvcmRlciB0byBnZXQgYENPTkZJR19ORVRfU09DS19NU0dgIGVuYWJsZWQgYW5kIHdvcmtpbmcgcHJvcGVybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgcHJvamVjdC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGlzIHdpbGwgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3ksIGJ1dCBsZXQncyB0YWtlIG5vdGhpbmcgZm9yIGdyYW50ZWQgYW5kIHN0YXJ0IGRpZ2dpbmcgaW4sIGFzIHRoZXJlIG1pZ2h0IGJlIGEgZmV3IG90aGVyIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ1OjU2LjMyMDY4NDMwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDg4MjQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NTYuNDE1NTczMDM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMjI2NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYSBCb29sZWFuIEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHN0dW1ibGVkIHVwb24gYSBoaWRkZW4gYm9vbGVhbiB2YXJpYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvci4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgcmVhZGluZyBvciB3cml0aW5nIHRvIHRoaXMgZmxhZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIHRoZW4gc2VlIHdoYXQncyBhZmZlY3RpbmcgaXRzIHZhbHVlLiBGaW5kaW5nIHRoZSBwb2ludHMgd2hlcmUgdGhlIGJvb2xlYW4gaXMgYWN0dWFsbHkgc2VsZWN0ZWQgKG9yIHNldCkgaXMgdGhlIG5leHQgdml0YWwgcGllY2Ugb2YgdGhpcyBwdXp6bGU7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0aGF0J3MgZHJpdmluZyBpdHMgc3RhdGUgdHJhbnNpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NTo1OS4yMTc4NDIxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NTQyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDU6NTkuMzczODAxMjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTU3NTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIG5ldHdvcmtpbmcgYW5kIGVCUEY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBDb25uZWN0aW9uIHRvIGBORVRfU09DS19NU0dgKipcblxuQWxyaWdodCwgdGhlIGNvZGUncyBwb2ludGluZyB0byBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBORVRfU09DS19NU0dgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IEkndmUgdXNlZCBib3RoIGJ1dCBoYXZlbid0IHJlYWxseSBkZWVwbHkgY29uc2lkZXJlZCB0aGVpciBpbnRlcmFjdGlvbiBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgbGlua3MgdGhlbS4gV2hhdCBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgdGhlIGdsdWUgYmV0d2VlbiB0aGVzZSB0d28gZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBrZXJuZWwgbW9kdWxlcywgb3IgZHJpdmVyIGludGVyYWN0aW9ucyBicmluZyB0aGVtIHRvZ2V0aGVyLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhdXNhbCBjaGFpbi4gV2hlcmUgZG9lcyB0aGUgc3RyZWFtIHBhcnNlciBnZXQgc2V0IHVwLCBhbmQgaG93IGRvZXMgdGhhdCBwcm9jZXNzIGRpcmVjdGx5IGxlYWQgdG8gdGhlIHV0aWxpemF0aW9uIG9yIHNldHVwIG9mIGBORVRfU09DS19NU0dgPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ2OjAyLjgyNTM3OTcwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNTk0ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjowMi45Mjg5ODA3MTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3MDU5NzQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgZUJQRiBTdHJlYW0gUGFyc2VyIENvbmZpZ3VyYXRpb24gXHUwMDI2IFNvY2ttYXAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgb3B0aW9uIGlzIHByZXNlbnRlZCBhcyBhIHVzZXItY29uZmlndXJhYmxlIGJvb2xlYW4sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoYXQncyB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGl0cyBpbXBsaWNhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZUJQRiBmZWF0dXJlcy5cblxuSSBhbHNvIHN1c3BlY3QgdGhhdCBgQ0dST1VQX0JQRmAgbWlnaHQgYmUgYSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggc29ja21hcHMuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgZXhwbG9yZSB0aGUgaW50ZXJwbGF5IG9mIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCB0aGUgc29ja2V0IG1hcCBpbXBsZW1lbnRhdGlvbiBhbmQgY2xvc2VseSByZWxhdGVkIGZpbGVzLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvY29yZS9zb2NrX21hcC5jYCBvciBhIHNpbWlsYXJseSByZWxhdGVkIGZpbGUgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjowOC41OTk1ODA1NDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NDI2NzgzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjowOC42OTQwNTc2MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMzk5NDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQSBSZWFsaXphdGlvbiBBYm91dCBCUEZfU1lTQ0FMTCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSB3YXMganVzdCB0cmFjaW5nIHRocm91Z2ggdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSwgYW5kIEkgd2FzIHByZXR0eSBzdXJlIEkgd2FzIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIGEgd2hvbGUgYnVuY2ggb2Yga2VybmVsIHNvdXJjZSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEJQRl9TWVNDQUxMYCB3YXMgZGVmaW5lZCwgZXhwZWN0aW5nIGl0IHRvIGJlIGJ1cmllZCBkZWVwIGluIHNvbWUgb2JzY3VyZSBoZWFkZXIuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGluaXQvS2NvbmZpZ2A/IFNlcmlvdXNseT8gSSBzaG91bGQgaGF2ZSB0aG91Z2h0IG9mIHRoYXQgZmlyc3Q7IGl0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gVGhhdCdzIGEgaHVnZSB0aW1lIHNhdmVyLiBJIGNhbiBwcm9iYWJseSBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBhIGxvdCBmYXN0ZXIgbm93LiBJIGZlZWwgYSBzbGlnaHQgZW1iYXJyYXNzbWVudCB0aGF0IEkgZGlkbid0IGltbWVkaWF0ZWx5IGNvbnNpZGVyIGBLY29uZmlnYCwgdG8gYmUgaG9uZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDY6MTEuNTk4MDU0MTY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk5NzY3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjoxNC4xOTc4Mjc5NjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2ODAwMDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHRvdWNoaW5nIGB0Y3BfYnBmLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgc29tZSBCUEYgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBrZXkgZnVuY3Rpb25zIEknbSBzZWVpbmcgYXJlIGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBhcmUgZGVmaW5pdGVseSBhY3RpdmUgYW5kIG9wZXJhdGlvbmFsIGNvbXBvbmVudHMuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBwb2ludHMgYXJlIGdvaW5nIHRvIGJlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGZsb3dzIHRocm91Z2ggdGhlc2UuIFdoaWxlIGB0Y3BfbXNnX3dhaXRfZGF0YWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIEknbSBub3QgZ29pbmcgdG8gZGlzbWlzcyBpdCByaWdodCBhd2F5LiBJdCdzIHN0aWxsIGEgZ29vZCBzeW1ib2wgdG8gdHJhY2ssIGVzcGVjaWFsbHkgaWYgaW5saW5pbmcgaXNuJ3QgaGFwcGVuaW5nLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpdHMgaW5saW5pbmcgc3RhdHVzLCBvZiBjb3Vyc2UuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgYHRjcF9icGZfcmVjdm1zZ2AuIEkgY2FuIHNlZSB0aGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBjYWxscyBpdCwgd2hpY2ggaXMgZ29vZC4gQnV0IHRoZSBmYWN0IHRoYXQgaXQncyBhbHNvIHJlZ2lzdGVyZWQgYXMgYSBwcm90byBoYW5kbGVyIGZvciBzb2NrbWFwIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50IGZvciBpbnRlcmFjdGluZyB3aXRoIEJQRiBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggSSBuZWVkIHRvIGV4YW1pbmUgdmVyeSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ2OjE5LjA2NTgzMDI5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTg3NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVxcdFxcdFxcdCAgIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02NjA9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXFx0XFx0PSBzb2NrX21hcF9jbG9zZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY2OlxcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY2Ny1cXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVxcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3My1cXHRwcm90W1RDUF9CUEZfUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY3NDpcXHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3NS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc2LVxcdHByb3RbVENQX0JQRl9UWFJYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc3OlxcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NzgtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcxMD1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MzMtXFx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MzQ6XFx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM1LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjo0NjoxOS4xODQ4MjE3MDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEyNjA0OTY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRDUCBCUEYgU29ja2V0bWFwIEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCAtIHRoZXNlIGFyZSB0aGUgYHJlY3Ztc2dgIGhhbmRsZXJzIGZvciBUQ1Agc29ja2V0cyB3aGVuIHRoZXkncmUgdXNlZCB3aXRoaW4gYSBCUEYgc29ja21hcC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGFyZWEgZm9yIGZ1enppbmcsIGFic29sdXRlbHkuIFxuXG5UaGUgY29uZmlndXJhdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYmVjYXVzZSwgYXMgSSByZWNhbGwsIGBCUEZfU1RSRUFNX1BBUlNFUmAgc2VsZWN0cyBgTkVUX1NPQ0tfTVNHYC4gV2hpbGUgYENHUk9VUF9CUEZgIGlzIG9mdGVuIHBhaXJlZCB3aXRoIHNvY2ttYXBzLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSB0aGUgY3JpdGljYWwgZmxhZ3MgaGVyZS5cblxuTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgZXNzZW50aWFsIGZvciB0aGUgYHRjcF9icGYuY2AgbW9kdWxlLiBIbW0sIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGluY2x1ZGVzIGBvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9gLiBSaWdodCwgdGhhdCBjb25maXJtcyBpdCAtIGBORVRfU09DS19NU0dgICppcyogbmVlZGVkLiBHaXZlbiB0aGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgc2VsZWN0cyBgTkVUX1NPQ0tfTVNHYCwgYW5kIFRMUyBhbHNvIHNlbGVjdHMgYE5FVF9TT0NLX01TR2AsIHNwZWNpZnlpbmcgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIHNob3VsZCBjb3ZlciBhbGwgdGhlIGJhc2VzLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBleHBvcnRlZC4gT2theSwgaXQncyBzdGF0aWM6XG5cbmBgYGNcbnN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuXHRcdFx0ICAgICBsb25nICp0aW1lbylcbmBgYFxuXG5TbyB0aGF0IGNvbmZpcm1zIGl0LCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LiBMZXQncyBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AgYXMgdGhlc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cy5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGRlZmluaXRpb24gaW4gYG5ldC9LY29uZmlnYCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDY6MjUuMzEwODc2NjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODc5NTM2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjQ2OjI2Ljg5ODgzNDgwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTgzNDY3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1AgQlBGIHJlY3Ztc2cgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcyB0aGUgbGlrZWx5IGNvbmZpZ3VyYXRpb24gaGVyZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IHdvdWxkIGFsc28gbmVlZCBhdHRlbnRpb24uIEFscmlnaHQsIGl0IHNlZW1zIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgaGlkZGVuIGNvbmZpZyB0aGF0J3Mgc2VsZWN0ZWQgYnkgYEJQRl9TVFJFQU1fUEFSU0VSYC4gR29vZCwgdGhhdCBtZWFucyBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBjb25maWcgd2UgbmVlZCB0byBlbmFibGUgdG8gdHJpZ2dlciB0aGlzLlxuXG5MZXQncyBzeW50aGVzaXplIHRoaXM6XG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaC4gVGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdGFyZ2V0IGFyZSBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGB0Y3BfYnBmX3JlY3Ztc2dgLCBhbmQgYHRjcF9tc2dfd2FpdF9kYXRhYC5cblxuVG8gbWFrZSBpdCBhbGwgd29yaywgd2UnbGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCAodGhhdCdzIGEgZ2l2ZW4pICphbmQqIGNyaXRpY2FsbHksIGBCUEZfU1RSRUFNX1BBUlNFUmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGlzIHBhdGNoIGFsdGVycyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIGByZWN2bXNnYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBhcmUgdGhlIGFmZmVjdGVkIHJvdXRpbmVzLiBUaGUgaW1wYWN0IGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCdzIGEgY3JpdGljYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdoZXJlIHRvIGZvY3VzIGZvciBhbiBleHBsb2l0LiBJdCdzIHRyaWdnZXJlZCB3aGVuIGEgVENQIHNvY2tldCBpcyBpbmNsdWRlZCBpbiBhIEJQRiBzb2NrbWFwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1NCwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6NDY6MzIuNDgyMzA0MjQyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTk1Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gVENQIEJQRiByZWN2bXNnIGZ1bmN0aW9ucyAodGNwX2JwZl9yZWN2bXNnX3BhcnNlciBhbmQgdGNwX2JwZl9yZWN2bXNnKSB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgQlBGIHNvY2ttYXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcvQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBUQ1AgQlBGIHJlY3Ztc2cgZnVuY3Rpb25zICh0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyIGFuZCB0Y3BfYnBmX3JlY3Ztc2cpIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBhIFRDUCBzb2NrZXQgaXMgYWRkZWQgdG8gYSBCUEYgc29ja21hcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZy9CUEYgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2vdph[1] Phase: Succeeded StartedAt: 2026-07-15 06:46:44 +0000 UTC FinishedAt: 2026-07-15 06:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 06:46:44 +0000 UTC FinishedAt: 2026-07-15 06:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2] Phase: Succeeded StartedAt: 2026-07-15 06:46:44 +0000 UTC FinishedAt: 2026-07-15 11:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-15 06:46:45 +0000 UTC FinishedAt: 2026-07-15 11:04:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-15 06:46:45 +0000 UTC FinishedAt: 2026-07-15 06:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-15 06:46:45 +0000 UTC FinishedAt: 2026-07-15 06:46:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2vdph/series-workflow2vdph-convert-artifact-2236524763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-15 06:46:58 +0000 UTC FinishedAt: 2026-07-15 07:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-15 06:46:58 +0000 UTC FinishedAt: 2026-07-15 07:15:44 +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:*63fe2293-7211-4f37-9a2d-1bc8877149de,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-workflow2vdph/series-workflow2vdph-convert-artifact-2236524763/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": "8d66be15-662f-4792-9f96-4398f6133afc", "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-workflow2vdph/series-workflow2vdph-build-action-3409339929/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-15 06:46:58 +0000 UTC FinishedAt: 2026-07-15 07:15:34 +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:*63fe2293-7211-4f37-9a2d-1bc8877149de,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-workflow2vdph/series-workflow2vdph-convert-artifact-2236524763/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": "8d66be15-662f-4792-9f96-4398f6133afc", "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-workflow2vdph/series-workflow2vdph-build-action-3409339929/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 07:15:44 +0000 UTC FinishedAt: 2026-07-15 07:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 07:15:44 +0000 UTC FinishedAt: 2026-07-15 07:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 07:15:44 +0000 UTC FinishedAt: 2026-07-15 07:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 07:15:44 +0000 UTC FinishedAt: 2026-07-15 07:15:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2vdph/series-workflow2vdph-convert-artifact-2871746098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 07:15:54 +0000 UTC FinishedAt: 2026-07-15 07:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 07:15:54 +0000 UTC FinishedAt: 2026-07-15 07:17:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8d66be15-662f-4792-9f96-4398f6133afc,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-workflow2vdph/series-workflow2vdph-build-action-3409339929/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-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 07:18:03 +0000 UTC FinishedAt: 2026-07-15 07:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 07:18:03 +0000 UTC FinishedAt: 2026-07-15 07:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 07:18:03 +0000 UTC FinishedAt: 2026-07-15 08:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 07:18:03 +0000 UTC FinishedAt: 2026-07-15 08:00:02 +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:*63fe2293-7211-4f37-9a2d-1bc8877149de,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-workflow2vdph/series-workflow2vdph-convert-artifact-2871746098/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": "e4aaefd2-af21-4a61-8b68-4ddd856a6c12", "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-workflow2vdph/series-workflow2vdph-build-action-3513274310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 07:18:03 +0000 UTC FinishedAt: 2026-07-15 07:59:52 +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:*63fe2293-7211-4f37-9a2d-1bc8877149de,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-workflow2vdph/series-workflow2vdph-convert-artifact-2871746098/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": "e4aaefd2-af21-4a61-8b68-4ddd856a6c12", "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-workflow2vdph/series-workflow2vdph-build-action-3513274310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 08:00:02 +0000 UTC FinishedAt: 2026-07-15 08:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 08:00:02 +0000 UTC FinishedAt: 2026-07-15 08:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 08:00:02 +0000 UTC FinishedAt: 2026-07-15 08:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 08:00:02 +0000 UTC FinishedAt: 2026-07-15 08:02:13 +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:*e4aaefd2-af21-4a61-8b68-4ddd856a6c12,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-workflow2vdph/series-workflow2vdph-build-action-3513274310/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-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 08:02:23 +0000 UTC FinishedAt: 2026-07-15 11:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 08:02:23 +0000 UTC FinishedAt: 2026-07-15 11:04:25 +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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"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:*8d66be15-662f-4792-9f96-4398f6133afc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4aaefd2-af21-4a61-8b68-4ddd856a6c12,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-workflow2vdph/series-workflow2vdph-build-action-3409339929/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-workflow2vdph/series-workflow2vdph-build-action-3513274310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 08:02:23 +0000 UTC FinishedAt: 2026-07-15 08:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 08:02:23 +0000 UTC FinishedAt: 2026-07-15 08:02:31 +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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"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-workflow2vdph/series-workflow2vdph-convert-artifact-3960602247/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-15 08:02:23 +0000 UTC FinishedAt: 2026-07-15 08:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 08:02:23 +0000 UTC FinishedAt: 2026-07-15 08:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 08:02:23 +0000 UTC FinishedAt: 2026-07-15 08:02:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 08:02:44 +0000 UTC FinishedAt: 2026-07-15 11:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vdph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9a3a07d06e7d74f4aecc51396c771149336ac55d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"d52850d2-526b-433d-a016-abb2b93eee9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 08:02:44 +0000 UTC FinishedAt: 2026-07-15 11:04:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8d66be15-662f-4792-9f96-4398f6133afc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4aaefd2-af21-4a61-8b68-4ddd856a6c12,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-workflow2vdph/series-workflow2vdph-build-action-3409339929/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-workflow2vdph/series-workflow2vdph-build-action-3513274310/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-workflow2vdph/series-workflow2vdph-convert-artifact-3960602247/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,}