Name: series-workflow4vs4v Phase: Succeeded StartedAt: 2026-08-05 14:07:14 +0000 UTC FinishedAt: 2026-08-05 18:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[0] Phase: Succeeded StartedAt: 2026-08-05 14:07:14 +0000 UTC FinishedAt: 2026-08-05 14:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 14:07:14 +0000 UTC FinishedAt: 2026-08-05 14:32:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "a8be7713-2dde-4e4e-8d0c-930a912b2c4c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBmaXggZmFsbGJhY2sgbG9naWMsIGFkanVzdCBxdWV1ZSBsaW1pdHMsIGFuZCByZWZhY3RvciBuZXRsaW5rIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIG9mIHRoZSBOQkQgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODM3NWRhNjhiNTRkNzViMzA1OTA1MWFkODljZjI3NDY2MjVhZjM5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTQ6Mjc6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmZmY2U1MTliZjAwODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTY2LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbiYjNDM7c3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNiAmIzQzOzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4mIzQzO1x0bGltLVx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuJiM0MztcdGxpbS1cdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbiYjNDM7XHRcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcbiYjNDM7XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXG4mIzQzO1x0XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4mIzQzO1x0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuJiM0MztcdFx0bGltLVx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbkBAIC0zNTIsMjYgJiM0MzszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0aWYgKCEobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4tXHR9IGVsc2UgaWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcbi1cdH0gZWxzZSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcbi1cdH1cbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxuLVx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXG4mIzQzO1x0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXG4mIzQzO1x0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVx1MDAzZWRpc2spIFx1MDAyNlx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKSlcbiYjNDM7XHRcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICYjNDM7MTA3MCwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4mIzQzO1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4mIzQzO1x0XHRcdG5ld19pbmRleCA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbiYjNDM7XHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1xuJiM0Mztub19mYWxsYmFjazpcbiYjNDM7XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwmIzM0Oyk7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICYjNDM7MTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmJkLVx1MDAzZXBpZCkge1xuJiM0MztcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4mIzQzO1x0XHRcdFwmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSYjMzk7cmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxNyAmIzQzOzEzMzcsMTUgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2ssICpvbGQ7XG5AQCAtMTQwMiwxMSAmIzQzOzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4mIzQzO1x0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0cmV0dXJuIDE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTQ3MSw4ICYjNDM7MTQ3MCwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfbXV0ZXhfbG9jayhcdTAwMjZuYmQtXHUwMDNlY29uZmlnX3JlZnMsXG4gXHRcdFx0XHRcdFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jaykpIHtcbiBcdFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cdTAwM2Vjb25maWc7XG4mIzQzO1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbiYjNDM7XHRcdC8qIHJlc2V0IHF1ZXVlIGxpbWl0cyB0byBkZWZhdWx0ICovXG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiYjNDM7XHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbiYjNDM7XHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0XHRpZiAobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VieXRlc2l6ZSlcbiBcdFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsXG5AQCAtMTk0MSw3ICYjNDM7MTk0NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuIFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSA2NTUzNixcbkBAIC0xOTU4LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuJiM0MztcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiAmIzQzOzIxMTIsNTggQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpLFxuJiM0MztcdFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4mIzQzO1x0aW50IHJlbSwgY291bnQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbiYjNDM7XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCAmIzQzOyAxXTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbiYjNDM7XHRcdFx0XHRcdFx0YXR0cixcbiYjNDM7XHRcdFx0XHRcdFx0bmJkX3NvY2tfcG9saWN5LFxuJiM0MztcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChjYikge1xuJiM0MztcdFx0XHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuQEAgLTIxNTksNyAmIzQzOzIyMTYsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkX2luZGV4X211dGV4KTtcbiBcbiBcdGlmICghbmJkKSB7XG4tXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcbiYjNDM7XHRcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuIFx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbiBcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihuYmQpO1xuQEAgLTIyMjYsMzYgJiM0MzsyMjg3LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XG4tXHRcdFx0cmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XG4tXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdKSB7XG4gXHRcdG5iZC1cdTAwM2ViYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sXG5AQCAtMjQ0MCw0MCAmIzQzOzI0NzQsMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07XG4tXG4tXHRcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4mIzQzO1x0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MDksNiAmIzQzOzI3MTMsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdGlmIChuYmRzX21heCBcdTAwM2UgMVVMIFx1MDAzY1x1MDAzYyAoTUlOT1JCSVRTIC0gcGFydF9zaGlmdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIEFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIHZhbHVlIHdpbGwgYmUgYWRqdXN0ZWQgaW4gYmxrX21xX2FsbG9jX3RhZ19zZXQgKi9cbiYjNDM7XHRpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgXHUwMDNjIDEpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBtdXN0IGJlIFx1MDAzZT0gMVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHJlZ2lzdGVyX2Jsa2RldihOQkRfTUFKT1IsIFwmIzM0O25iZFwmIzM0OykpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuQEAgLTI3MjUsOCAmIzQzOzI3MzUsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdH1cbiBcdG5iZF9kYmdfaW5pdCgpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHRvIHRoZSBpbnRlbmRlZCBjb25uZWN0aW9uIGNvdW50IHNvIG5iZF9zdGFydF9kZXZpY2UoKSBjYW4gc2tpcFxuJiM0MztcdCAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuXG4mIzQzO1x0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSYjNDM7JiM0MzspXG4tXHRcdG5iZF9kZXZfYWRkKGksIDEpO1xuJiM0MztcdFx0bmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI3ODcsMyAmIzQzOzI4MDEsNiBAQCBtb2R1bGVfcGFyYW0obmJkc19tYXgsIGludCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXCYjMzQ7bnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcJiMzNDspO1xuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcJiMzNDtudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgZGV2aWNlIChkZWZhdWx0OiAxNilcJiMzNDspO1xuJiM0Mzttb2R1bGVfcGFyYW0ocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsIGludCwgMDQ0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0MocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsXG4mIzQzO1wmIzM0O251bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSlcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgzNzVkYTY4YjU0ZDc1YjMwNTkwNTFhZDg5Y2YyNzQ2NjI1YWYzOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjI3OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggOGYxMDc2MmU5MGVmNy4uZmZjZTUxOWJmMDA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjsKIAogc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2Owogc3RhdGljIGludCBtYXhfcGFydCA9IDE2OwomIzQzO3N0YXRpYyBpbnQgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxOwogc3RhdGljIGludCBwYXJ0X3NoaWZ0OwogCiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7CkBAIC0zMzEsNiAmIzQzOzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssCiAJbnNvY2stJmd0O3NlbnQgPSAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CWxpbS0mZ3Q7ZmVhdHVyZXMgJmFtcDs9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTsKJiM0MzsJbGltLSZndDttYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKJiM0MzsJbGltLSZndDttYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9UUklNKQomIzQzOwkJbGltLSZndDttYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9GTFVTSCkgewomIzQzOwkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX0ZVQSkKJiM0MzsJCQlsaW0tJmd0O2ZlYXR1cmVzIHw9IEJMS19GRUFUX0ZVQTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfUk9UQVRJT05BTCkKJiM0MzsJCWxpbS0mZ3Q7ZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKQomIzQzOwkJbGltLSZndDttYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSBVSU5UX01BWCAmZ3Q7Jmd0OyBTRUNUT1JfU0hJRlQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSkKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKQEAgLTM1MiwyNiAmIzQzOzM3MywxNCBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCQlyZXR1cm4gMDsKIAogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSk7Ci0JaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX1RSSU0pCi0JCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwotCWVsc2UKLQkJbGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwOwotCWlmICghKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX0ZMVVNIKSkgewotCQlsaW0uZmVhdHVyZXMgJmFtcDs9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEpOwotCX0gZWxzZSBpZiAobmJkLSZndDtjb25maWctJmd0O2ZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfRlVBKSB7Ci0JCWxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTsKLQl9IGVsc2UgewotCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7Ci0JCWxpbS5mZWF0dXJlcyAmYW1wOz0gfkJMS19GRUFUX0ZVQTsKLQl9Ci0JaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19ST1RBVElPTkFMKQotCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDsKLQlpZiAobmJkLSZndDtjb25maWctJmd0O2ZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKQotCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwotCiYjNDM7CW5iZF9hcHBseV9saW1pdHMoJmFtcDtsaW0sIG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwotCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsJLyogTm8gbmVlZCBmcmVlemUgd2l0aCAwIGNhcGFjaXR5IGFuZCB3cml0ZSBjYWNoZSBkaXNhYmxlZCAqLwomIzQzOwlpZiAoIWdldF9jYXBhY2l0eShuYmQtJmd0O2Rpc2spICZhbXA7JmFtcDsgIWJsa19xdWV1ZV93cml0ZV9jYWNoZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKSkKJiM0MzsJCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTEwNjEsNDAgJiM0MzsxMDcwLDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpCiAJaW50IG5ld19pbmRleCA9IC0xOwogCXN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctJmd0O3NvY2tzW2luZGV4XTsKIAlpbnQgZmFsbGJhY2sgPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CWludCBpOwogCiAJaWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsICZhbXA7Y29uZmlnLSZndDtydW50aW1lX2ZsYWdzKSkKIAkJcmV0dXJuIG5ld19pbmRleDsKIAotCWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKLQkJcmV0dXJuIG5ld19pbmRleDsKLQl9CiYjNDM7CWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKQomIzQzOwkJZ290byBub19mYWxsYmFjazsKIAogCWlmIChmYWxsYmFjayAmZ3Q7PSAwICZhbXA7JmFtcDsgZmFsbGJhY2sgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmYW1wOyZhbXA7CiAJICAgICFjb25maWctJmd0O3NvY2tzW2ZhbGxiYWNrXS0mZ3Q7ZGVhZCkKIAkJcmV0dXJuIGZhbGxiYWNrOwogCi0JaWYgKG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmbHQ7IDAgfHwKLQkgICAgbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4ICZndDs9IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zIHx8Ci0JICAgIGNvbmZpZy0mZ3Q7c29ja3NbbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4XS0mZ3Q7ZGVhZCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKGkgPT0gaW5kZXgpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWNvbmZpZy0mZ3Q7c29ja3NbaV0tJmd0O2RlYWQpIHsKLQkJCQluZXdfaW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKLQkJaWYgKG5ld19pbmRleCAmbHQ7IDApIHsKLQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gbmV3X2luZGV4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoaSAhPSBpbmRleCAmYW1wOyZhbXA7ICFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7CiYjNDM7CQkJbmV3X2luZGV4ID0gaTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KLQluZXdfaW5kZXggPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKJiM0MzsJaWYgKG5ld19pbmRleCAmZ3Q7PSAwKQomIzQzOwkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsKJiM0Mztub19mYWxsYmFjazoKJiM0MzsJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLAomIzQzOwkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwogCXJldHVybiBuZXdfaW5kZXg7CiB9CiAKQEAgLTEyODEsMjMgJiM0MzsxMjgxLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrczsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrOwotCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAlpbnQgZXJyOwogCiAJLyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovCiAJaWYgKGFyZyAmZ3Q7IElOVF9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAobmJkLSZndDtwaWQpIHsKJiM0MzsJCWRldl9lcnIoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKIAlzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsICZhbXA7ZXJyKTsKIAlpZiAoIXNvY2spCiAJCXJldHVybiBlcnI7CiAJbmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UmIzM5O3JlCi0JICogcmVhbGxvY2F0aW5nIHRoZSAtJmd0O3NvY2tzIGFycmF5LgotCSAqLwotCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKLQogCWlmICghbmV0bGluayAmYW1wOyZhbXA7ICFuYmQtJmd0O3Rhc2tfc2V0dXAgJmFtcDsmYW1wOwogCSAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZC0mZ3Q7dGFza19zZXR1cCA9IGN1cnJlbnQ7CkBAIC0xMzM3LDE3ICYjNDM7MTMzNywxNSBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCUlOSVRfV09SSygmYW1wO25zb2NrLSZndDt3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7CiAJc29ja3NbY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrOwogCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwotCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCBtZW1mbGFncyk7CiAKIAlyZXR1cm4gMDsKIAogcHV0X3NvY2tldDoKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCXNvY2tmZF9wdXQoc29jayk7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtJmd0O2NvbmZpZzsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAqb2xkOwpAQCAtMTQwMiwxMSAmIzQzOzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZykKIAogCQlhdG9taWNfaW5jKCZhbXA7Y29uZmlnLSZndDtsaXZlX2Nvbm5lY3Rpb25zKTsKIAkJd2FrZV91cCgmYW1wO2NvbmZpZy0mZ3Q7Y29ubl93YWl0KTsKJiM0MzsJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKIAkJcmV0dXJuIDA7CiAJfQogCXNvY2tmZF9wdXQoc29jayk7CiAJa2ZyZWUoYXJncyk7Ci0JcmV0dXJuIC1FTk9TUEM7CiYjNDM7CXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCBuYmRfYmRldl9yZXNldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQpAQCAtMTQ3MSw4ICYjNDM7MTQ3MCwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQogCWlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soJmFtcDtuYmQtJmd0O2NvbmZpZ19yZWZzLAogCQkJCQkmYW1wO25iZC0mZ3Q7Y29uZmlnX2xvY2spKSB7CiAJCXN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtJmd0O2NvbmZpZzsKJiM0MzsJCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCQluYmRfZGV2X2RiZ19jbG9zZShuYmQpOwogCQlpbnZhbGlkYXRlX2Rpc2sobmJkLSZndDtkaXNrKTsKJiM0MzsJCS8qIHJlc2V0IHF1ZXVlIGxpbWl0cyB0byBkZWZhdWx0ICovCiYjNDM7CQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwomIzQzOwkJbmJkX2FwcGx5X2xpbWl0cygmYW1wO2xpbSwgMCk7CiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiAJCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7Ynl0ZXNpemUpCiAJCQlrb2JqZWN0X3VldmVudCgmYW1wO25iZF90b19kZXYobmJkKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsCkBAIC0xOTQxLDcgJiM0MzsxOTQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7CiAJLnRpbWVvdXQJPSBuYmRfeG1pdF90aW1lb3V0LAogfTsKIAotc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKQomIzQzO3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcywKJiM0MzsJCQkJICAgICAgIGludCBucl9od19xdWV1ZXMpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7CiAJCS5tYXhfaHdfc2VjdG9ycwkJPSA2NTUzNiwKQEAgLTE5NTgsNyAmIzQzOzE5NjMsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpCiAJCWdvdG8gb3V0OwogCiAJbmJkLSZndDt0YWdfc2V0Lm9wcyA9ICZhbXA7bmJkX21xX29wczsKLQluYmQtJmd0O3RhZ19zZXQubnJfaHdfcXVldWVzID0gMTsKJiM0MzsJbmJkLSZndDt0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlczsKIAluYmQtJmd0O3RhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7CiAJbmJkLSZndDt0YWdfc2V0Lm51bWFfbm9kZSA9IE5VTUFfTk9fTk9ERTsKIAluYmQtJmd0O3RhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpOwpAQCAtMjEwNyw2ICYjNDM7MjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCWludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKSwKJiM0MzsJCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxhdHRyICphdHRyOwomIzQzOwlpbnQgcmVtLCBjb3VudCA9IDA7CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7CiYjNDM7CQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggJiM0MzsgMV07CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKJiM0MzsJCQkJCQlhdHRyLAomIzQzOwkJCQkJCW5iZF9zb2NrX3BvbGljeSwKJiM0MzsJCQkJCQlpbmZvLSZndDtleHRhY2spKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGNiKSB7CiYjNDM7CQkJcmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXR1cm4gY291bnQ7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7CkBAIC0yMTU5LDcgJiM0MzsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCW11dGV4X3VubG9jaygmYW1wO25iZF9pbmRleF9tdXRleCk7CiAKIAlpZiAoIW5iZCkgewotCQluYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7CiYjNDM7CQlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJbmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCAmZ3Q7IDAgPyByZXQgOiAxKTsKIAkJaWYgKElTX0VSUihuYmQpKSB7CiAJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcbiYjMzQ7KTsKIAkJCXJldHVybiBQVFJfRVJSKG5iZCk7CkBAIC0yMjI2LDM2ICYjNDM7MjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAJfQogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7Ci0JCXN0cnVjdCBubGF0dHIgKmF0dHI7Ci0JCWludCByZW0sIGZkOwotCi0JCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sCi0JCQkJICAgIHJlbSkgewotCQkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTsKLQotCQkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKLQkJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCi0JCQkJCQkJICBhdHRyLAotCQkJCQkJCSAgbmJkX3NvY2tfcG9saWN5LAotCQkJCQkJCSAgaW5mby0mZ3Q7ZXh0YWNrKTsKLQkJCWlmIChyZXQgIT0gMCkgewotCQkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQotCQkJCWNvbnRpbnVlOwotCQkJZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7Ci0JCQlyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQl9CiYjNDM7CXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiAKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkgewogCQluYmQtJmd0O2JhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sCkBAIC0yNDQwLDQwICYjNDM7MjQ3NCwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAl9CiAKLQlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHsKLQkJc3RydWN0IG5sYXR0ciAqYXR0cjsKLQkJaW50IHJlbSwgZmQ7Ci0KLQkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwKLQkJCQkgICAgcmVtKSB7Ci0JCQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdOwotCi0JCQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewotCQkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKLQkJCQkJCQkgIGF0dHIsCi0JCQkJCQkJICBuYmRfc29ja19wb2xpY3ksCi0JCQkJCQkJICBpbmZvLSZndDtleHRhY2spOwotCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCi0JCQkJY29udGludWU7Ci0JCQlmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTsKLQkJCXJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpOwotCQkJaWYgKHJldCkgewotCQkJCWlmIChyZXQgPT0gLUVOT1NQQykKLQkJCQkJcmV0ID0gMDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKLQkJfQotCX0KJiM0MzsJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpOwomIzQzOwkvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqLwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlyZXQgPSAwOwogb3V0OgogCW11dGV4X3VubG9jaygmYW1wO25iZC0mZ3Q7Y29uZmlnX2xvY2spOwogCW5iZF9jb25maWdfcHV0KG5iZCk7CkBAIC0yNzA5LDYgJiM0MzsyNzEzLDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpCiAJaWYgKG5iZHNfbWF4ICZndDsgMVVMICZsdDsmbHQ7IChNSU5PUkJJVFMgLSBwYXJ0X3NoaWZ0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogQW4gZXhjZXNzaXZlbHkgbGFyZ2UgdmFsdWUgd2lsbCBiZSBhZGp1c3RlZCBpbiBibGtfbXFfYWxsb2NfdGFnX3NldCAqLwomIzQzOwlpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgJmx0OyAxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBtdXN0IGJlICZndDs9IDFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihOQkRfTUFKT1IsICYjMzQ7bmJkJiMzNDspKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjcyNSw4ICYjNDM7MjczNSwxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKQogCX0KIAluYmRfZGJnX2luaXQoKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwCiYjNDM7CSAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBuYmRzX21heDsgaSYjNDM7JiM0MzspCi0JCW5iZF9kZXZfYWRkKGksIDEpOwomIzQzOwkJbmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzg3LDMgJiM0MzsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KSYjMzQ7KTsKIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsICYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpJiMzNDspOwomIzQzO21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLAomIzQzOyYjMzQ7bnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKSYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOQkQgRHJpdmVyIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9uYmQuY2AuIEl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzLCBzbyBsZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgbW9kdWxlIHBhcmFtZXRlciwgYHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zYCwgYW5kIG1vZGlmeWluZyBgbmJkX2Rldl9hZGRgIHRvIGhhbmRsZSBgbnJfaHdfcXVldWVzYC4gVGhpcyBzdWdnZXN0cyBzb21lIGVuaGFuY2VtZW50cyB0byBob3cgTkJEIGNvbm5lY3Rpb25zIGFyZSBpbml0aWFsaXplZCBhbmQgcG9zc2libHkgaG93IGhhcmR3YXJlIHF1ZXVlaW5nIGlzIG1hbmFnZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKVGhlIHJlZmFjdG9yaW5nIG9mIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCB0byB1c2UgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgaXMgaW50ZXJlc3RpbmcuIFRoYXQmIzM5O3MgcHJvYmFibHkgYWltZWQgYXQgbWFraW5nIHRoZSBnZW5lcmljIG5ldGxpbmsgY29kZSBtb3JlIG1haW50YWluYWJsZSBhbmQgbGVzcyByZWR1bmRhbnQuIEFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuCgpUaGUgY2hhbmdlIGluIGBuYmRfYWRkX3NvY2tldGAgdG8gcmVqZWN0IHNvY2tldCBhZGRpdGlvbnMgdG8gYSBydW5uaW5nIGRldmljZSAoY2hlY2tpbmcgYG5iZC0mZ3Q7cGlkYCkgaXMgYSBzYWZldHkgbWVhc3VyZS4gSXQmIzM5O3MgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIGluc3RhYmlsaXR5IGJ5IHByZXZlbnRpbmcgbW9kaWZpY2F0aW9uIG9mIGNvbm5lY3Rpb25zIG9uIGEgcnVubmluZyBkZXZpY2UuIFNtYXJ0LgoKVGhlbiB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgbmJkX3NldF9zaXplYCB0byB1c2UgYG5iZF9hcHBseV9saW1pdHNgIGFuZCBjb25kaXRpb25hbGx5IGZyZWV6ZSB0aGUgcXVldWUsIGFuZCBhbHNvIGNoYW5nZXMgdG8gYG5iZF9jb25maWdfcHV0YCB0byByZXNldCBxdWV1ZSBsaW1pdHMgdG8gZGVmYXVsdCwgd2hpY2ggYXBwZWFyIHRvIHJlZmluZSB0aGUgc2l6ZSBhbmQgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgdGhlIGRldmljZS4gVGhpcyBwcm9iYWJseSBhaW1zIHRvIHByZXZlbnQgdW5leHBlY3RlZCBiZWhhdmlvciBhbmQgZ3VhcmFudGVlIHNlbnNpYmxlIGRlZmF1bHQgcGFyYW1ldGVycy4KCkZpbmFsbHksIGEgZml4IHRvIGBmaW5kX2ZhbGxiYWNrYCB0byBpbXByb3ZlIHRoZSBmYWxsYmFjayBsb2dpYy4gQWx3YXlzIHdlbGNvbWUuCgpPdmVyYWxsLCB0aGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBOQkQgZHJpdmVyLCBhbmQgaXQgaXMgYSBrbm93biBhbmQgcmVhY2hhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gSSBzaG91bGQgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGZvciBOQkQgdG8gc2VlIGlmIGFueSBuZXcgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkIHRoYXQgbmVlZCBtb3JlIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBDb25maWd1cmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfTkJEYC4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIHdpbGwgaW1wYWN0IHRoZSBvdmVyYWxsIE5CRCBmdW5jdGlvbmFsaXR5LgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwgZnVuY3Rpb25zOiBgbmJkX2FwcGx5X2xpbWl0c2AsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAsIGBuYmRfYmRldl9yZXNldGAsIGBuYmRfY29uZmlnX3B1dGAsIGBuYmRfZGV2X2FkZGAsIGBuYmRfZ2VubF9zaXplX3NldGAsIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgZmluYWxseSwgdGhlIGBuYmRfaW5pdGAgZnVuY3Rpb24uCgpXYWl0IGEgc2Vjb25k4oCmIHRoZXkmIzM5O3JlIGFsbCAqc3RhdGljKi4gVGhhdOKAmXMgZ29pbmcgdG8gbWFrZSB0aGlzIG1vcmUgY2hhbGxlbmdpbmcuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKnVzZWQqIC0gc3BlY2lmaWNhbGx5LCBhcmUgdGhleSBjYWxsZWQgZnJvbSBhbnkgbm9uLXN0YXRpYywgZXhwb3NlZCBBUEkgZW50cnkgcG9pbnRzPyBPciBhcmUgdGhleSByZWdpc3RlcmVkIGFzIGNhbGxiYWNrcyBzb21ld2hlcmU/IEkgaGF2ZSB0byBsb29rIGZvciB1cHN0cmVhbSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKSG1tLCBva2F5LCBhZnRlciBhIHF1aWNrIGdsYW5jZSwgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFwcGVhciB0byBiZSBOZXRsaW5rIGNhbGxiYWNrcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBob3cgdGhleeKAmXJlIHJlZ2lzdGVyZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZHJpdmVycy9ibG9jay9uYmQuY2AgdG8gaWRlbnRpZnkgaG93IHRoZXNlIE5ldGxpbmsgY2FsbGJhY2tzIGFyZSBob29rZWQgdXAuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgdGhlIG90aGVyIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0yMTIwPXN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NzpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2OC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjg5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjkwOlx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI5MS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5NDpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5NS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipOZXRsaW5rIHZzLiBpb2N0bDogQSBxdWljayBtZW50YWwgY2hlY2sqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgbmJkIGNvZGUuIFRoZSBgbmJkX2dlbmxfY29ubmVjdGAgZnVuY3Rpb24uLi4geWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgbmV0bGluayBjYWxsYmFjaywgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBtaW5kIGF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlcyB0aGF0IHdpdGggdGhlIGdlbmVyYWxpemVkIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGhpZ2gtbGV2ZWwgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBOb3csIGxldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgbmJkX2lvY3RsYD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4gSXMgdGhhdCBhbm90aGVyIG5ldGxpbmsgZW50cnkgcG9pbnQsIG9yIGFyZSB3ZSB1c2luZyB0aGUgaW9jdGwgaW50ZXJmYWNlPyBUaGlzIG5lZWRzIGEgY2xvc2VyIGxvb2sgYmVjYXVzZSBJIHdhbnQgdG8gbWFwIHRoZSBjb2RlIGZ1bmN0aW9ucyB0byB0aGUgcmVzcGVjdGl2ZSBkcml2ZXIgbGF5ZXJzIGFuZCBlbnN1cmUgSSBoYXZlIG5vIHN1cnByaXNlcyBkdXJpbmcgZnV0dXJlIGNvZGUgcmV2aWV3cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTYyND1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzNDpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgyLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMy1cdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDQ6XHRcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDUtXHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMi1cdC5yZWxlYXNlID1cdG5iZF9yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOlx0LmlvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNDpcdC5jb21wYXRfaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVx0LmZyZWVfZGlzayA9XHRuYmRfZnJlZV9kaXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTkJEIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBOQkQgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcy4gSSBzZWUgYG5iZF9pb2N0bGAganVtcGluZyBvdXQgYXMgdGhlIHByaW1hcnkgaW9jdGwgaGFuZGxlciwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgdGhlIGxlZ2FjeSwgZGlyZWN0IGludGVyYWN0aW9uIG1ldGhvZCwgdXN1YWxseSBmb3IgdG9vbHMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBtb2Rlcm4gaW50ZXJmYWNlcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vcmUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEFoLCBoZXJlIGl0IGlzLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiBUaGlzIGlzIGEgbmV0bGluayBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vcmUgc29waGlzdGljYXRlZCwgcG9zc2libHkgYXN5bmNocm9ub3VzLCBhcHByb2FjaC4gVGltZSB0byBkaWcgaW50byBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgTkJEIGRyaXZlciBzdGF0ZXMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGFueSBzb3J0IG9mIGhvdC1wbHVnIG9yIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjM0Nj1zdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzODE6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzgyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMy1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA0Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwNS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaGFuZGxlX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xMTAxPXN0YXRpYyBpbnQgd2FpdF9mb3JfcmVjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTE2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTE3OnN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTE4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTExODQ9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjA2LVx0ICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyMDc6XHRyZXQgPSBuYmRfaGFuZGxlX2NtZChjbWQsIGhjdHgtXHUwMDNlcXVldWVfbnVtKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwOC1cdG11dGV4X3VubG9jayhcdTAwMjZjbWQtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9tcV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTkzMT1zdGF0aWMgaW50IG5iZF9pbml0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NDE6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDItXHQucXVldWVfcnFcdD0gbmJkX3F1ZXVlX3JxLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTk0OD1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTY0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTY1Olx0bmJkLVx1MDAzZXRhZ19zZXQub3BzID0gXHUwMDI2bmJkX21xX29wcztcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk2Ni1cdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkFuYWx5emluZyBOQkQmIzM5O3MgS2V5IENvbnRyb2wgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIE5CRCBkcml2ZXImIzM5O3MgY29udHJvbCBmbG93LCBhbmQgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGBuYmRfcXVldWVfcnFgLiBUaGF0IGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYmxvY2sgbGF5ZXIgcXVldWUgcmVxdWVzdHMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgZGF0YSB0cmFuc2ZlciwgdGhlIGNyaXRpY2FsIHBpZWNlLiBOb3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIG9wZXJhdGVzLCBJIG5lZWQgdG8gbG9vayBhdCBvdGhlciBrZXkgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IG1hbmFnZSBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgY29ubmVjdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGBuYmRfaW9jdGxgLCB0aGF0IHNlZW1zIHJlbGV2YW50IGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSBsaWtlbHkgR2VubCAoR2VuZXJpYyBOZXRsaW5rKSBpbnRlcmZhY2VzLCBzbyBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QgdG8gcmV2aWV3LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBuZXRsaW5rIGNhbGxiYWNrcyBhcyB3ZWxsLiBUaGF0IHdpbGwgZmxlc2ggb3V0IGhvdyB0aGUgZHJpdmVyIHJlY2VpdmVzIHRob3NlIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYW5kIGNvbm5lY3Rpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1hcCBvZiB0aGVzZSBhcmVhcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzU9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzctc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMjc3PXN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzQ3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMzQ4OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNDkte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjA5Mz1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5ODpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwOTkte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjExOS0gKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMDpzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIxLVx0XHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCksXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NzpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2OC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjE4LVx0aWYgKCFuYmQpIHtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjIxOTpcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjIwLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI0OS1cdHNldF9iaXQoTkJEX1JUX0JPVU5ELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyNTA6XHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjUxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyOTA6XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjkxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzMjU9c3RhdGljIHZvaWQgbmJkX2Rpc2Nvbm5lY3RfYW5kX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0NS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM0NjpzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzgwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzgxOnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM4Mi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDQzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDQ0Olx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ0NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDc3Olx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc4LVx0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5My1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk0Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9jb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDk1LVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTgtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5OTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfZGlzY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMC1cdH0sXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTAzLVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MDQ6XHRcdC5kb2l0XHQ9IG5iZF9nZW5sX3JlY29uZmlndXJlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTA1LVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDgtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUwOTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfc3RhdHVzLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTEwLVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBuYmRfbWNhc3RfZ3Jwc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxNzpzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5iZF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTgtXHQuaGRyc2l6ZVx0PSAwLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjU2Mj1zdGF0aWMgaW50IHN0YXR1c19jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NjctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Njg6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU2OS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTg4LVx0XHRnb3RvIG91dDtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU4OTpcdHJlcGx5X2hlYWQgPSBnZW5sbXNnX3B1dF9yZXBseShyZXBseSwgaW5mbywgXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkwLVx0XHRcdFx0ICAgICAgIE5CRF9DTURfU1RBVFVTKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2Mjg9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYzNi1cdFx0cmV0dXJuO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjM3Olx0bXNnX2hlYWQgPSBnZW5sbXNnX3B1dF9yZXBseShza2IsIGluZm8sIFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYzOC1cdFx0XHRcdCAgICAgTkJEX0NNRF9DT05ORUNUKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2NTI9c3RhdGljIHZvaWQgbmJkX21jYXN0X2luZGV4KGludCBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjAtXHRcdHJldHVybjtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY2MTpcdG1zZ19oZWFkID0gZ2VubG1zZ19wdXQoc2tiLCAwLCAwLCBcdTAwMjZuYmRfZ2VubF9mYW1pbHksIDAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjItXHRcdFx0XHQgICAgIE5CRF9DTURfTElOS19ERUFEKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NzItXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY3MzpcdGdlbmxtc2dfbXVsdGljYXN0KFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgc2tiLCAwLCAwLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY3NC19XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjg0PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzMwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzMxOlx0aWYgKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNm5iZF9nZW5sX2ZhbWlseSkpIHtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjczMi1cdFx0ZGVzdHJveV93b3JrcXVldWUobmJkX2RlbF93cSk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNzU5PXN0YXRpYyB2b2lkIF9fZXhpdCBuYmRfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc2Ny1cdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNzY4Olx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcdTAwMjZuYmRfZ2VubF9mYW1pbHkpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNzY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNZW50YWwgQ2hlY2tsaXN0IGZvciBOZXR3b3JrIEJsb2NrIERldmljZSBPcGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHJlZ2FyZGluZyB0aGUgY29yZSBmdW5jdGlvbnMgb2YgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlci4gSSBzZWUgdGhhdCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfZ2VubF9kaXNjb25uZWN0YCwgYW5kIGBuYmRfZ2VubF9zdGF0dXNgIGFyZSB0aGUgbmV0bGluayBjYWxsYmFja3MuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHVzZXItc3BhY2UgY29tbXVuaWNhdGlvbiwgYW5kIEkgbmVlZCB0byBrZWVwIHRob3NlIHN0cmFpZ2h0LiBGdXJ0aGVybW9yZSwgYG5iZF9pb2N0bGAgaXMgdGhlIGlvY3RsIGNhbGxiYWNrIOKAkyB0aGF0IGhhbmRsZXMgdGhlIHN0YW5kYXJkIGRldmljZSBjb250cm9sIGludGVyYWN0aW9ucywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBjb25mdXNlIHRoYXQgd2l0aCB0aGUgb3RoZXJzLiBGaW5hbGx5LCBgbmJkX3F1ZXVlX3JxYCBpcyB0aGF0IGJsb2NrIGxheWVyIHJlcXVlc3QgY2FsbGJhY2ssIHdoaWNoIGlzIGhvdyB3ZSBhY3R1YWxseSBnZXQgdGhlIEkvTyBkb25lLgoKUmlnaHQuIEJlZm9yZSBJIGdldCBhbnkgZnVydGhlciBpbnRvIHRoZSB3ZWVkcywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQganVtcHMgdG8gbWluZCByaWdodCBub3cgaXMgYEJMS19ERVZfTkJEYC4gR29vZC4gTm93LCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QgdG8gYmUgZW5hYmxlZCB0byBoYXZlIHRoZSBkcml2ZXIgY29uZmlndXJlZC4gQnV0LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBuZWNlc3Nhcnkg4oCTIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhhdCBmbGFnIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHRob3JvdWdoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05CRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGVsdmluZyBpbnRvIHRoZSBgQkxLX0RFVl9OQkRgIERlZmluaXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcHJvYmxlbSwgSSBuZWVkIGEgcm9jay1zb2xpZCBkZWZpbml0aW9uIHRvIGJ1aWxkIG9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIGBCTEtfREVWX05CRGAuIE5vIGd1ZXNzd29yayBoZXJlOyBJIG5lZWQgdGhlIGZ1bGwsIGNhbm9uaWNhbCBleHBsYW5hdGlvbi4gSSBkb24mIzM5O3Qgd2FudCB0byByZWx5IG9uIHBvdGVudGlhbGx5IG91dGRhdGVkIGRvY3VtZW50YXRpb24gb3IgZnJhZ21lbnRlZCBzbmlwcGV0cy4gVGltZSB0byBwdWxsIHVwIHRoYXQgZGVmaW5pdGlvbiBhbmQgbWFrZSBzdXJlIEkmIzM5O20gc3RhcnRpbmcgb24gdGhlIHJpZ2h0IGZvb3Rpbmcgd2l0aCBhIHNvbGlkLCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBub3QgbWlzc2luZyBhbnl0aGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdGNvbmZpZyBCTEtfREVWX05CRFxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE5ODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcbiAyMDE6XHRcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcbiAyMDI6XHRcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxuIDIwMzpcdFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxuIDIwNDpcdFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xuIDIwNTpcdFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cbiAyMDg6XHRcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxuIDIwOTpcdFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXG4gMjEwOlx0XG4gMjExOlx0XHQgIFJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L25iZC5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXG4gMjEyOlx0XHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxuIDIxMzpcdFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtcyBORlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGRlcGVuZGVuY3kgb24gYE5FVGAuIFNpbmNlIHdlJiMzOTtyZSBhc3N1bWluZyBhIG1pbmltYWwgY29uZmlndXJhdGlvbiwgaXQgc2VlbXMgbGlrZSBgQkxLX0RFVl9OQkRgIGlzIHRoZSBvbmx5IGNvbmZpZyB3ZSYjMzk7bGwgYmUgY29uY2VybmVkIHdpdGgsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHF1aXRlIGltcGFjdGZ1bCwgbW9kaWZ5aW5nIHNldmVyYWwgY29yZSBmdW5jdGlvbnM6IGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9jb25maWdfcHV0YCwgYW5kIGBuYmRfZGV2X2FkZGAuIFRoZXNlIGNoYW5nZXMgc3Ryb25nbHkgc3VnZ2VzdCBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSBOQkQgZHJpdmVyJiMzOTtzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSBoYXZlIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfZ2VubF9kaXNjb25uZWN0YCwgYW5kIGBuYmRfcXVldWVfcnFgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyBhdm9pZGluZyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgbWUgcGF1c2Ugb24gYG5iZF9xdWV1ZV9ycWAgc2luY2UgaXQmIzM5O3MgdGhlIGJsb2NrIGxheWVyIHJlcXVlc3QgcXVldWVpbmcgZnVuY3Rpb24sIGEgY2xlYXIgaG90IHBhdGguIEl0JiMzOTtzIGhhbmRsaW5nIHRoZSBjb3JlIG9mIGJsb2NrIEkvTy4KClNvLCBsZXQmIzM5O3MgcmUtZXZhbHVhdGUuIGBuYmRfaW9jdGxgIGlzIGEgZ29vZCBjaG9pY2U7IGl0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIgYW5kIG5vdCBhIGhvdCBwYXRoLiBTaW1pbGFybHksIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgbmV0bGluayBoYW5kbGVycywgYWdhaW4sIG5vdCBob3QgcGF0aHMuIFdlIG5lZWQgdG8gZXhwbG9yZSBvdGhlciBlbnRyeSBwb2ludHMgdGhvdWdoLCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGV4cGxvcmVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4KClRoaW5raW5nIGFib3V0IG90aGVyIGVudHJ5IHBvaW50c+KApiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQmIzM5O3Mgbm90IGEgaG90IHBhdGg/IFdoYXQgYWJvdXQgYG5iZF9yZWxlYXNlYD8gSXQmIzM5O3MgdGhlIGJsb2NrIGRldmljZSByZWxlYXNlIGNhbGxiYWNrLCBhbiBpbnRlcmVzdGluZyBjaG9pY2UuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgaXQgYXMgYSBjYW5kaWRhdGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFscyBmb3IgZnVydGhlciBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ2PXN0YXRpYyBpbnQgbmJkX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3ODk6c3RhdGljIHZvaWQgbmJkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTEtXHQub3BlbiA9XHRcdG5iZF9vcGVuLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEyOlx0LnJlbGVhc2UgPVx0bmJkX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTMtXHQuaW9jdGwgPVx0bmJkX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAyNgoJCQkJCQkJb3V0cHV0OiAxMTcKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYG5iZF9yZWxlYXNlYCBhbmQgYG5iZF9vcGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aG9zZSBhcmUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIE5CRCBjb25uZWN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBjaGFuZ2VzIGBuYmRfY29uZmlnX3B1dGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBuYmRfcmVsZWFzZWAsIHNvIGBuYmRfcmVsZWFzZWAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGZvY3VzIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLgoKSSBhbHNvIG5vdGUgdGhhdCBgbmJkX2Rldl9hZGRgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBjYWxsZWQgYnkgYG5iZF9pbml0YCBhbmQgYG5iZF9nZW5sX2Nvbm5lY3RgLiBDb25zaWRlcmluZyB0aGF0LCBgbmJkX2dlbmxfY29ubmVjdGAgaXMgYSByZWxldmFudCBmb2N1cyBzeW1ib2wgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcHJpbWUgZW50cnkgcG9pbnRzIGludG8gdGhlIG1vZGlmaWVkIGNvZGU6IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBvZiBjb3Vyc2UsIGBuYmRfcmVsZWFzZWAuIFllcywgdGhlc2UgYWxsIGxvb2sgbGlrZSBnb29kIGVudHJ5IHBvaW50cyBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4KCkFsc28sIEkgc2hvdWxkIG5vdGUgdGhhdCBgQkxLX0RFVl9OQkRgIGlzIHRoZSByZWxldmFudCBjb25maWcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgdGhlIGZhbGxiYWNrIGxvZ2ljLCBxdWV1ZSBsaW1pdHMsIGFuZCByZWZhY3RvciBuZXRsaW5rIGNvbm5lY3Rpb24gaGFuZGxpbmcgd2l0aGluIHRoZSBOQkQgZHJpdmVyLiBUaGVzZSBhcmUgY2xlYXJseSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBpbXBhY3QgdGhlIGNvcmUgb3BlcmF0aW9uIG9mIGhvdyB0aGUgTkJEIGRyaXZlciBjb25uZWN0cywgY29uZmlndXJlcywgYW5kIGhhbmRsZXMgZGF0YS4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGxvZ2ljLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGVzc2VudGlhbHMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBmYWxsYmFjayBsb2dpYywgYWRqdXN0IHF1ZXVlIGxpbWl0cywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcmVhY2hhYmxlIGNvcmUgbG9naWMgb2YgdGhlIE5CRCBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyNzoxNi41MDA1NDUwMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTIwMTAyMDYxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjc6MTYuNTAwNTUwODIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc0ODMyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Mzc1ZGE2OGI1NGQ3NWIzMDU5MDUxYWQ4OWNmMjc0NjYyNWFmMzljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTQ6Mjc6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li5mZmNlNTE5YmYwMDg3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XFxuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcXG4rc3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XFxuIHN0YXRpYyBpbnQgcGFydF9zaGlmdDtcXG4gXFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5AQCAtMzMxLDYgKzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuIFxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncylcXG4re1xcbitcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcXG4rXFx0bGltLVxcdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4rXFx0bGltLVxcdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9UUklNKVxcbitcXHRcXHRsaW0tXFx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSBVSU5UX01BWCBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcXG4rXFx0XFx0bGltLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXFxuK1xcdFxcdFxcdGxpbS1cXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfRlVBO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxcbitcXHRcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxcbitcXHRcXHRsaW0tXFx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG5AQCAtMzUyLDI2ICszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXHRpZiAobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9UUklNKVxcbi1cXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XFxuLVxcdGlmICghKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpKSB7XFxuLVxcdFxcdGxpbS5mZWF0dXJlcyBcXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTtcXG4tXFx0fSBlbHNlIGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX0ZVQSkge1xcbi1cXHRcXHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUE7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcXG4tXFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH5CTEtfRkVBVF9GVUE7XFxuLVxcdH1cXG4tXFx0aWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXFxuLVxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xcbi1cXHRpZiAobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9XUklURV9aRVJPRVMpXFxuLVxcdFxcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSBVSU5UX01BWCBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuLVxcbitcXHRuYmRfYXBwbHlfbGltaXRzKFxcdTAwMjZsaW0sIG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyk7XFxuIFxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuLVxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXFxuK1xcdGlmICghZ2V0X2NhcGFjaXR5KG5iZC1cXHUwMDNlZGlzaykgXFx1MDAyNlxcdTAwMjYgIWJsa19xdWV1ZV93cml0ZV9jYWNoZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKSlcXG4rXFx0XFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC0xMDYxLDQwICsxMDcwLDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXFxuIFxcdGludCBuZXdfaW5kZXggPSAtMTtcXG4gXFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cXHUwMDNlc29ja3NbaW5kZXhdO1xcbiBcXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXg7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbiBcXG4tXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpIHtcXG4tXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbi1cXHRcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuLVxcdH1cXG4rXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpXFxuK1xcdFxcdGdvdG8gbm9fZmFsbGJhY2s7XFxuIFxcbiBcXHRpZiAoZmFsbGJhY2sgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBmYWxsYmFjayBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tmYWxsYmFja10tXFx1MDAzZWRlYWQpXFxuIFxcdFxcdHJldHVybiBmYWxsYmFjaztcXG4gXFxuLVxcdGlmIChuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzYyAwIHx8XFxuLVxcdCAgICBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzZT0gY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcXG4tXFx0ICAgIGNvbmZpZy1cXHUwMDNlc29ja3NbbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4XS1cXHUwMDNlZGVhZCkge1xcbi1cXHRcXHRpbnQgaTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKGkgPT0gaW5kZXgpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlc29ja3NbaV0tXFx1MDAzZWRlYWQpIHtcXG4tXFx0XFx0XFx0XFx0bmV3X2luZGV4ID0gaTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XFxuLVxcdFxcdGlmIChuZXdfaW5kZXggXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xcbitcXHRcXHRpZiAoaSAhPSBpbmRleCBcXHUwMDI2XFx1MDAyNiAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tpXS1cXHUwMDNlZGVhZCkge1xcbitcXHRcXHRcXHRuZXdfaW5kZXggPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdG5ld19pbmRleCA9IG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleDtcXG4rXFx0bnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xcbitcXHRpZiAobmV3X2luZGV4IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuK1xcbitub19mYWxsYmFjazpcXG4rXFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuIFxcdHJldHVybiBuZXdfaW5kZXg7XFxuIH1cXG4gXFxuQEAgLTEyODEsMjMgKzEyODEsMjMgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4gXFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqbnNvY2s7XFxuLVxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xcbiBcXHRpZiAoYXJnIFxcdTAwM2UgSU5UX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAobmJkLVxcdTAwM2VwaWQpIHtcXG4rXFx0XFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHRcXFwiQ2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuIFxcdHNvY2sgPSBuYmRfZ2V0X3NvY2tldChuYmQsIGFyZywgXFx1MDAyNmVycik7XFxuIFxcdGlmICghc29jaylcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcXG4tXFx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXFx1MDAzZXNvY2tzIGFycmF5Llxcbi1cXHQgKi9cXG4tXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXG4gXFx0aWYgKCFuZXRsaW5rIFxcdTAwMjZcXHUwMDI2ICFuYmQtXFx1MDAzZXRhc2tfc2V0dXAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICF0ZXN0X2JpdChOQkRfUlRfQk9VTkQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRuYmQtXFx1MDAzZXRhc2tfc2V0dXAgPSBjdXJyZW50O1xcbkBAIC0xMzM3LDE3ICsxMzM3LDE1IEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bnNvY2stXFx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcXG4gXFx0c29ja3NbY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2Y29uZmlnLVxcdTAwM2VsaXZlX2Nvbm5lY3Rpb25zKTtcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gcHV0X3NvY2tldDpcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuIFxcdHN0cnVjdCBzb2NrZXQgKnNvY2ssICpvbGQ7XFxuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFxuIFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbmZpZy1cXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XFxuIFxcdFxcdHdha2VfdXAoXFx1MDAyNmNvbmZpZy1cXHUwMDNlY29ubl93YWl0KTtcXG4rXFx0XFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcXFwicmVjb25uZWN0ZWQgc29ja2V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0a2ZyZWUoYXJncyk7XFxuLVxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5AQCAtMTQ3MSw4ICsxNDcwLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX3JlZnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuYmQtXFx1MDAzZWNvbmZpZ19sb2NrKSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuK1xcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRcXHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xcbiBcXHRcXHRpbnZhbGlkYXRlX2Rpc2sobmJkLVxcdTAwM2VkaXNrKTtcXG4rXFx0XFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCAwKTtcXG4rXFx0XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuIFxcdFxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlYnl0ZXNpemUpXFxuIFxcdFxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZuYmRfdG9fZGV2KG5iZCktXFx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcXG4gXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX1BJRF9GSUxFLFxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG4gXFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuK3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuIFxcdFxcdC5tYXhfaHdfc2VjdG9yc1xcdFxcdD0gNjU1MzYsXFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuLVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbitcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XFxuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCksXFxuK1xcdFxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuK3tcXG4rXFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4rXFx0aW50IHJlbSwgY291bnQgPSAwO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcXG4rXFx0XFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICsgMV07XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGF0dHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG5iZF9zb2NrX3BvbGljeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZXh0YWNrKSkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGNvdW50Kys7XFxuK1xcdFxcdGlmIChjYikge1xcbitcXHRcXHRcXHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKVxcbit7XFxuK1xcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcXG5AQCAtMjE1OSw3ICsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZF9pbmRleF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoIW5iZCkge1xcbi1cXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7XFxuK1xcdFxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFxcdTAwM2UgMCA/IHJldCA6IDEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKG5iZCkpIHtcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuYmQpO1xcbkBAIC0yMjI2LDM2ICsyMjg3LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XFxuLVxcdFxcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuLVxcdFxcdGludCByZW0sIGZkO1xcbi1cXG4tXFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcXG4tXFx0XFx0XFx0XFx0ICAgIHJlbSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgrMV07XFxuLVxcbi1cXHRcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmJkX3NvY2tfcG9saWN5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG4tXFx0XFx0XFx0cmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XFxuLVxcdFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcXG4gXFx0XFx0bmJkLVxcdTAwM2ViYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxcbkBAIC0yNDQwLDQwICsyNDc0LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcXG4tXFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4tXFx0XFx0aW50IHJlbSwgZmQ7XFxuLVxcbi1cXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxcbi1cXHRcXHRcXHRcXHQgICAgcmVtKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBuYmRfc29ja19wb2xpY3ksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xcbi1cXHRcXHRcXHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9TUEMpXFxuLVxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXFxcInJlY29ubmVjdGVkIHNvY2tldFxcXFxuXFxcIik7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuK1xcdC8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gMDtcXG4gb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX2xvY2spO1xcbiBcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcbkBAIC0yNzA5LDYgKzI3MTMsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4gXFx0aWYgKG5iZHNfbWF4IFxcdTAwM2UgMVVMIFxcdTAwM2NcXHUwMDNjIChNSU5PUkJJVFMgLSBwYXJ0X3NoaWZ0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHQvKiBBbiBleGNlc3NpdmVseSBsYXJnZSB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIGluIGJsa19tcV9hbGxvY190YWdfc2V0ICovXFxuK1xcdGlmIChwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBtdXN0IGJlIFxcdTAwM2U9IDFcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHJlZ2lzdGVyX2Jsa2RldihOQkRfTUFKT1IsIFxcXCJuYmRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbkBAIC0yNzI1LDggKzI3MzUsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4gXFx0fVxcbiBcXHRuYmRfZGJnX2luaXQoKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCB0byB0aGUgaW50ZW5kZWQgY29ubmVjdGlvbiBjb3VudCBzbyBuYmRfc3RhcnRfZGV2aWNlKCkgY2FuIHNraXBcXG4rXFx0ICogdGhlIHF1ZXVlLWZyZWV6aW5nIGJsa19tcV91cGRhdGVfbnJfaHdfcXVldWVzKCkgY2FsbC5cXG4rXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYmRzX21heDsgaSsrKVxcbi1cXHRcXHRuYmRfZGV2X2FkZChpLCAxKTtcXG4rXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjc4NywzICsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xcbiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcXFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcXFwiKTtcXG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcXFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuK21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTtcXG4rTU9EVUxFX1BBUk1fREVTQyhwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyxcXG4rXFxcIm51bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSlcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjc6MTYuOTU4NzMyOTQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzExNTUyMDA5Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBmYWxsYmFjayBsb2dpYywgYWRqdXN0IHF1ZXVlIGxpbWl0cywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcmVhY2hhYmxlIGNvcmUgbG9naWMgb2YgdGhlIE5CRCBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgzNzVkYTY4YjU0ZDc1YjMwNTkwNTFhZDg5Y2YyNzQ2NjI1YWYzOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjI3OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmZmY2U1MTliZjAwODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjtcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XG4gc3RhdGljIGludCBtYXhfcGFydCA9IDE2O1xuK3N0YXRpYyBpbnQgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxO1xuIHN0YXRpYyBpbnQgcGFydF9zaGlmdDtcbiBcbiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XG5AQCAtMzMxLDYgKzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncylcbit7XG4rXHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4rXHRsaW0tXHUwMDNlbWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4rXHRsaW0tXHUwMDNlbWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9UUklNKVxuK1x0XHRsaW0tXHUwMDNlbWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcbitcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKVxuK1x0XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4rXHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbitcdFx0bGltLVx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG5AQCAtMzUyLDI2ICszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0aWYgKCEobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4tXHR9IGVsc2UgaWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcbi1cdH0gZWxzZSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcbi1cdH1cbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxuLVx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXG4rXHRuYmRfYXBwbHlfbGltaXRzKFx1MDAyNmxpbSwgbmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1x0LyogTm8gbmVlZCBmcmVlemUgd2l0aCAwIGNhcGFjaXR5IGFuZCB3cml0ZSBjYWNoZSBkaXNhYmxlZCAqL1xuK1x0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVx1MDAzZWRpc2spIFx1MDAyNlx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKSlcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbitcdGVsc2VcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICsxMDcwLDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXG4gXHRpbnQgbmV3X2luZGV4ID0gLTE7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLVx1MDAzZXNvY2tzW2luZGV4XTtcbiBcdGludCBmYWxsYmFjayA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuK1x0aW50IGk7XG4gXG4gXHRpZiAodGVzdF9iaXQoTkJEX1JUX0RJU0NPTk5FQ1RFRCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuIFxuLVx0aWYgKGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDNjPSAxKSB7XG4tXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0ICAgIFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCIpO1xuLVx0XHRyZXR1cm4gbmV3X2luZGV4O1xuLVx0fVxuK1x0aWYgKGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDNjPSAxKVxuK1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcbi1cdFx0XHRpZiAoaSA9PSBpbmRleClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGlmICghY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbi1cdFx0XHRcdG5ld19pbmRleCA9IGk7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0bnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XG4tXHRcdGlmIChuZXdfaW5kZXggXHUwMDNjIDApIHtcbi1cdFx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdFx0ICAgIFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCIpO1xuLVx0XHRcdHJldHVybiBuZXdfaW5kZXg7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcbitcdFx0aWYgKGkgIT0gaW5kZXggXHUwMDI2XHUwMDI2ICFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuK1x0XHRcdG5ld19pbmRleCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbi1cdG5ld19pbmRleCA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuK1x0bnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XG4rXHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbitcdFx0cmV0dXJuIG5ld19pbmRleDtcbitcbitub19mYWxsYmFjazpcbitcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuK1x0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbiBcdHJldHVybiBuZXdfaW5kZXg7XG4gfVxuIFxuQEAgLTEyODEsMjMgKzEyODEsMjMgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrcztcbiBcdHN0cnVjdCBuYmRfc29jayAqbnNvY2s7XG4tXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovXG4gXHRpZiAoYXJnIFx1MDAzZSBJTlRfTUFYKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChuYmQtXHUwMDNlcGlkKSB7XG4rXHRcdGRldl9lcnIoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuK1x0XHRcdFwiQ2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcbiBcdHNvY2sgPSBuYmRfZ2V0X3NvY2tldChuYmQsIGFyZywgXHUwMDI2ZXJyKTtcbiBcdGlmICghc29jaylcbiBcdFx0cmV0dXJuIGVycjtcbiBcdG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzb2NrKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSdyZVxuLVx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXHUwMDNlc29ja3MgYXJyYXkuXG4tXHQgKi9cbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4tXG4gXHRpZiAoIW5ldGxpbmsgXHUwMDI2XHUwMDI2ICFuYmQtXHUwMDNldGFza19zZXR1cCBcdTAwMjZcdTAwMjZcbiBcdCAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdG5iZC1cdTAwM2V0YXNrX3NldHVwID0gY3VycmVudDtcbkBAIC0xMzM3LDE3ICsxMzM3LDE1IEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRJTklUX1dPUksoXHUwMDI2bnNvY2stXHUwMDNld29yaywgbmJkX3BlbmRpbmdfY21kX3dvcmspO1xuIFx0c29ja3NbY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucysrXSA9IG5zb2NrO1xuIFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuIHB1dF9zb2NrZXQ6XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcdHNvY2tmZF9wdXQoc29jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuIFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cdTAwM2Vjb25maWc7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAqb2xkO1xuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4rXHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCJyZWNvbm5lY3RlZCBzb2NrZXRcXG5cIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbkBAIC0xNDcxLDggKzE0NzAsMTMgQEAgc3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19yZWZzLFxuIFx0XHRcdFx0XHRcdTAwMjZuYmQtXHUwMDNlY29uZmlnX2xvY2spKSB7XG4gXHRcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuK1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbitcdFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4rXHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRcdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplKVxuIFx0XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbiBcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4rc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuK1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuYmQtXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZuYmRfbXFfb3BzO1xuLVx0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcbitcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4rICpcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKSxcbitcdFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbit7XG4rXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuK1x0aW50IHJlbSwgY291bnQgPSAwO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7XG4rXHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCArIDFdO1xuK1x0XHRpbnQgcmV0O1xuK1xuK1x0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuK1x0XHRcdHByX2VycihcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXG4rXHRcdFx0XHRcdFx0YXR0cixcbitcdFx0XHRcdFx0XHRuYmRfc29ja19wb2xpY3ksXG4rXHRcdFx0XHRcdFx0aW5mby1cdTAwM2VleHRhY2spKSB7XG4rXHRcdFx0cHJfZXJyKFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGNvdW50Kys7XG4rXHRcdGlmIChjYikge1xuK1x0XHRcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0cmV0dXJuIGNvdW50O1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXG4re1xuK1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuQEAgLTIxNTksNyArMjIxNiwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuK1x0XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuIFx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbiBcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cIik7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcbkBAIC0yMjI2LDM2ICsyMjg3LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuK1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xuIFx0XHRuYmQtXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxuQEAgLTI0NDAsNDAgKzI0NzQsMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRpZiAocmV0ID09IC1FTk9TUEMpXG4tXHRcdFx0XHRcdHJldCA9IDA7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcInJlY29ubmVjdGVkIHNvY2tldFxcblwiKTtcbi1cdFx0fVxuLVx0fVxuK1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuK1x0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbitcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRyZXQgPSAwO1xuIG91dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmQtXHUwMDNlY29uZmlnX2xvY2spO1xuIFx0bmJkX2NvbmZpZ19wdXQobmJkKTtcbkBAIC0yNzA5LDYgKzI3MTMsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdGlmIChuYmRzX21heCBcdTAwM2UgMVVMIFx1MDAzY1x1MDAzYyAoTUlOT1JCSVRTIC0gcGFydF9zaGlmdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogQW4gZXhjZXNzaXZlbHkgbGFyZ2UgdmFsdWUgd2lsbCBiZSBhZGp1c3RlZCBpbiBibGtfbXFfYWxsb2NfdGFnX3NldCAqL1xuK1x0aWYgKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIFx1MDAzYyAxKSB7XG4rXHRcdHByX2VycihcInByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIG11c3QgYmUgXHUwMDNlPSAxXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChyZWdpc3Rlcl9ibGtkZXYoTkJEX01BSk9SLCBcIm5iZFwiKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5AQCAtMjcyNSw4ICsyNzM1LDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXG4gXHR9XG4gXHRuYmRfZGJnX2luaXQoKTtcbiBcbitcdC8qXG4rXHQgKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwXG4rXHQgKiB0aGUgcXVldWUtZnJlZXppbmcgYmxrX21xX3VwZGF0ZV9ucl9od19xdWV1ZXMoKSBjYWxsLlxuK1x0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSsrKVxuLVx0XHRuYmRfZGV2X2FkZChpLCAxKTtcbitcdFx0bmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI3ODcsMyArMjgwMSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXCIpO1xuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVwiKTtcbittb2R1bGVfcGFyYW0ocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsIGludCwgMDQ0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyxcbitcIm51bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSlcIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyNzoxNi45NTg3MzQzNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUxODY4OTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOQkQgRHJpdmVyIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBJdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzLCBzbyBsZXQncyBicmVhayBpdCBkb3duLiBGaXJzdCwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBwcmVfZGVmaW5lZF9jb25uZWN0aW9uc2AsIGFuZCBtb2RpZnlpbmcgYG5iZF9kZXZfYWRkYCB0byBoYW5kbGUgYG5yX2h3X3F1ZXVlc2AuIFRoaXMgc3VnZ2VzdHMgc29tZSBlbmhhbmNlbWVudHMgdG8gaG93IE5CRCBjb25uZWN0aW9ucyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHBvc3NpYmx5IGhvdyBoYXJkd2FyZSBxdWV1ZWluZyBpcyBtYW5hZ2VkLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuVGhlIHJlZmFjdG9yaW5nIG9mIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCB0byB1c2UgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgaXMgaW50ZXJlc3RpbmcuIFRoYXQncyBwcm9iYWJseSBhaW1lZCBhdCBtYWtpbmcgdGhlIGdlbmVyaWMgbmV0bGluayBjb2RlIG1vcmUgbWFpbnRhaW5hYmxlIGFuZCBsZXNzIHJlZHVuZGFudC4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZS5cblxuVGhlIGNoYW5nZSBpbiBgbmJkX2FkZF9zb2NrZXRgIHRvIHJlamVjdCBzb2NrZXQgYWRkaXRpb25zIHRvIGEgcnVubmluZyBkZXZpY2UgKGNoZWNraW5nIGBuYmQtXHUwMDNlcGlkYCkgaXMgYSBzYWZldHkgbWVhc3VyZS4gSXQncyBsaWtlbHkgaW50ZW5kZWQgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gb3IgaW5zdGFiaWxpdHkgYnkgcHJldmVudGluZyBtb2RpZmljYXRpb24gb2YgY29ubmVjdGlvbnMgb24gYSBydW5uaW5nIGRldmljZS4gU21hcnQuXG5cblRoZW4gdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gYG5iZF9zZXRfc2l6ZWAgdG8gdXNlIGBuYmRfYXBwbHlfbGltaXRzYCBhbmQgY29uZGl0aW9uYWxseSBmcmVlemUgdGhlIHF1ZXVlLCBhbmQgYWxzbyBjaGFuZ2VzIHRvIGBuYmRfY29uZmlnX3B1dGAgdG8gcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQsIHdoaWNoIGFwcGVhciB0byByZWZpbmUgdGhlIHNpemUgYW5kIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBhc3BlY3RzIG9mIHRoZSBkZXZpY2UuIFRoaXMgcHJvYmFibHkgYWltcyB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIGd1YXJhbnRlZSBzZW5zaWJsZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG5cbkZpbmFsbHksIGEgZml4IHRvIGBmaW5kX2ZhbGxiYWNrYCB0byBpbXByb3ZlIHRoZSBmYWxsYmFjayBsb2dpYy4gQWx3YXlzIHdlbGNvbWUuXG5cbk92ZXJhbGwsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIE5CRCBkcml2ZXIsIGFuZCBpdCBpcyBhIGtub3duIGFuZCByZWFjaGFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIHNob3VsZCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIE5CRCB0byBzZWUgaWYgYW55IG5ldyBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQgdGhhdCBuZWVkIG1vcmUgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI3OjMxLjQ3NzQyNTk0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU1ODk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9OQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjc6MzEuNTE5OTg4ODQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwOTgyNDM1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfTkJEYC4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIHdpbGwgaW1wYWN0IHRoZSBvdmVyYWxsIE5CRCBmdW5jdGlvbmFsaXR5LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBmdW5jdGlvbnM6IGBuYmRfYXBwbHlfbGltaXRzYCwgYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiYCwgYG5iZF9iZGV2X3Jlc2V0YCwgYG5iZF9jb25maWdfcHV0YCwgYG5iZF9kZXZfYWRkYCwgYG5iZF9nZW5sX3NpemVfc2V0YCwgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AsIGBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2JgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBmaW5hbGx5LCB0aGUgYG5iZF9pbml0YCBmdW5jdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiB0aGV5J3JlIGFsbCAqc3RhdGljKi4gVGhhdOKAmXMgZ29pbmcgdG8gbWFrZSB0aGlzIG1vcmUgY2hhbGxlbmdpbmcuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKnVzZWQqIC0gc3BlY2lmaWNhbGx5LCBhcmUgdGhleSBjYWxsZWQgZnJvbSBhbnkgbm9uLXN0YXRpYywgZXhwb3NlZCBBUEkgZW50cnkgcG9pbnRzPyBPciBhcmUgdGhleSByZWdpc3RlcmVkIGFzIGNhbGxiYWNrcyBzb21ld2hlcmU/IEkgaGF2ZSB0byBsb29rIGZvciB1cHN0cmVhbSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5IbW0sIG9rYXksIGFmdGVyIGEgcXVpY2sgZ2xhbmNlLCBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXBwZWFyIHRvIGJlIE5ldGxpbmsgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaG93IHRoZXnigJlyZSByZWdpc3RlcmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYGRyaXZlcnMvYmxvY2svbmJkLmNgIHRvIGlkZW50aWZ5IGhvdyB0aGVzZSBOZXRsaW5rIGNhbGxiYWNrcyBhcmUgaG9va2VkIHVwLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHRoZSBvdGhlciBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI3OjUyLjYxODI0MzcwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yMTIwPXN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjEtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjc6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI4OS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyOTA6XFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyOTEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDkzLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0OTQ6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDk1LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI3OjUyLjY5ODI4MTAxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODUzNDk3NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqTmV0bGluayB2cy4gaW9jdGw6IEEgcXVpY2sgbWVudGFsIGNoZWNrKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBuYmQgY29kZS4gVGhlIGBuYmRfZ2VubF9jb25uZWN0YCBmdW5jdGlvbi4uLiB5ZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIG5ldGxpbmsgY2FsbGJhY2ssIG5vIHN1cnByaXNlcyB0aGVyZS4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IGFzc29jaWF0ZXMgdGhhdCB3aXRoIHRoZSBnZW5lcmFsaXplZCBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBoaWdoLWxldmVsIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gTm93LCBsZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgbmJkX2lvY3RsYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJcyB0aGF0IGFub3RoZXIgbmV0bGluayBlbnRyeSBwb2ludCwgb3IgYXJlIHdlIHVzaW5nIHRoZSBpb2N0bCBpbnRlcmZhY2U/IFRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vayBiZWNhdXNlIEkgd2FudCB0byBtYXAgdGhlIGNvZGUgZnVuY3Rpb25zIHRvIHRoZSByZXNwZWN0aXZlIGRyaXZlciBsYXllcnMgYW5kIGVuc3VyZSBJIGhhdmUgbm8gc3VycHJpc2VzIGR1cmluZyBmdXR1cmUgY29kZSByZXZpZXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6MDkuNTUxNzgxMTQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODE0OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTYyND1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjMzLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzNDpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjM1LVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4Mi1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAzLVxcdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA0OlxcdFxcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA1LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMi1cXHQucmVsZWFzZSA9XFx0bmJkX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOlxcdC5pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNDpcXHQuY29tcGF0X2lvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVxcdC5mcmVlX2Rpc2sgPVxcdG5iZF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI4OjA5LjU5NjYwMDI5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk5Njk0NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOQkQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBOQkQgZHJpdmVyJ3MgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zLiBJIHNlZSBgbmJkX2lvY3RsYCBqdW1waW5nIG91dCBhcyB0aGUgcHJpbWFyeSBpb2N0bCBoYW5kbGVyLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhhdCdzIHRoZSBsZWdhY3ksIGRpcmVjdCBpbnRlcmFjdGlvbiBtZXRob2QsIHVzdWFsbHkgZm9yIHRvb2xzIHRoYXQgaGF2ZW4ndCBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBtb2Rlcm4gaW50ZXJmYWNlcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vcmUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEFoLCBoZXJlIGl0IGlzLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiBUaGlzIGlzIGEgbmV0bGluayBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vcmUgc29waGlzdGljYXRlZCwgcG9zc2libHkgYXN5bmNocm9ub3VzLCBhcHByb2FjaC4gVGltZSB0byBkaWcgaW50byBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFuZCBzZWUgd2hhdCBpdCdzIGRvaW5nLiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIE5CRCBkcml2ZXIgc3RhdGVzLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGFueSBzb3J0IG9mIGhvdC1wbHVnIG9yIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkuIExldCdzIHNlZSBpZiBteSBodW5jaCBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6NDEuNTk2Mjk4Nzc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTk0OTI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTIzNDY9c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzgxOnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMy1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA0OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6NDEuOTE1ODIyMTQ1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTg2Nzc2MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTAyOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6NTkuOTAyNjAwNzkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk2NzEwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2hhbmRsZV9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTExMDE9c3RhdGljIGludCB3YWl0X2Zvcl9yZWNvbm5lY3Qoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTExNi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjExMTc6c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfaGFuZGxlX2NtZChzdHJ1Y3QgbmJkX2NtZCAqY21kLCBpbnQgaW5kZXgpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTE4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTE4ND1zdGF0aWMgYmxrX3N0YXR1c190IG5iZF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwNi1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyMDc6XFx0cmV0ID0gbmJkX2hhbmRsZV9jbWQoY21kLCBoY3R4LVxcdTAwM2VxdWV1ZV9udW0pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwOC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmNtZC1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI5OjAwLjAzMjI3NzY4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMxNjA3NDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNzk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjk6MTEuMzQ4MzU1NDU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIxNDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfbXFfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xOTMxPXN0YXRpYyBpbnQgbmJkX2luaXRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTQwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk0MTpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDItXFx0LnF1ZXVlX3JxXFx0PSBuYmRfcXVldWVfcnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDg9c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTY0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk2NTpcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTY2LVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSBucl9od19xdWV1ZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI5OjExLjM5NTU3MzM1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU4MzA4ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgTkJEJ3MgS2V5IENvbnRyb2wgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBOQkQgZHJpdmVyJ3MgY29udHJvbCBmbG93LCBhbmQgSSdtIHplcm9pbmcgaW4gb24gYG5iZF9xdWV1ZV9ycWAuIFRoYXQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBibG9jayBsYXllciBxdWV1ZSByZXF1ZXN0cy4gVGhhdCdzIHRoZSBjb3JlIG9mIGRhdGEgdHJhbnNmZXIsIHRoZSBjcml0aWNhbCBwaWVjZS4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBvcGVyYXRlcywgSSBuZWVkIHRvIGxvb2sgYXQgb3RoZXIga2V5IGZ1bmN0aW9ucyB0aGF0IGxpa2VseSBtYW5hZ2UgZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbm5lY3Rpb24uIExldCdzIHNlZS4uLiB3aGF0IGFib3V0IGBuYmRfaW9jdGxgLCB0aGF0IHNlZW1zIHJlbGV2YW50IGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSBsaWtlbHkgR2VubCAoR2VuZXJpYyBOZXRsaW5rKSBpbnRlcmZhY2VzLCBzbyBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QgdG8gcmV2aWV3LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBuZXRsaW5rIGNhbGxiYWNrcyBhcyB3ZWxsLiBUaGF0IHdpbGwgZmxlc2ggb3V0IGhvdyB0aGUgZHJpdmVyIHJlY2VpdmVzIHRob3NlIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYW5kIGNvbm5lY3Rpb25zLiBJdCdzIHRpbWUgdG8gYnVpbGQgYSBzb2xpZCBtZW50YWwgbWFwIG9mIHRoZXNlIGFyZWFzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGFsbCBoYW5ncyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyOToyNi45Nzg2NjM2NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTYwNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9nZW5sX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTc1PXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzY6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzctc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzc9c3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEzNDg6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNDkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yMDkzPW5iZF9kZXZpY2VfcG9saWN5W05CRF9ERVZJQ0VfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIwOTg6c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMTktICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTIwOnN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIxLVxcdFxcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2MS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjI6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NzpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjE4LVxcdGlmICghbmJkKSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjE5OlxcdFxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyMjAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyNDktXFx0c2V0X2JpdChOQkRfUlRfQk9VTkQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjI1MDpcXHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI1MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjg5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjI5MDpcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI5MS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjMyNT1zdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzQ2OnN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzgxOnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDQzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ0NDpcXHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ0NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ3NzpcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc4LVxcdC8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDkzLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0OTQ6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDk1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTgtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5OTpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfZGlzY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDAtXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMy1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA0OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDUtXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwOC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA5OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9zdGF0dXMsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTEwLVxcdH0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBuYmRfbWNhc3RfZ3Jwc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxNzpzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5iZF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE4LVxcdC5oZHJzaXplXFx0PSAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTYyPXN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU2ODpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU2OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1ODgtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTg5OlxcdHJlcGx5X2hlYWQgPSBnZW5sbXNnX3B1dF9yZXBseShyZXBseSwgaW5mbywgXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1OTAtXFx0XFx0XFx0XFx0ICAgICAgIE5CRF9DTURfU1RBVFVTKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjYyOD1zdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MzYtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjYzNzpcXHRtc2dfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHNrYiwgaW5mbywgXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MzgtXFx0XFx0XFx0XFx0ICAgICBOQkRfQ01EX0NPTk5FQ1QpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjUyPXN0YXRpYyB2b2lkIG5iZF9tY2FzdF9pbmRleChpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjAtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY2MTpcXHRtc2dfaGVhZCA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjItXFx0XFx0XFx0XFx0ICAgICBOQkRfQ01EX0xJTktfREVBRCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NzItXFx0Z2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjczOlxcdGdlbmxtc2dfbXVsdGljYXN0KFxcdTAwMjZuYmRfZ2VubF9mYW1pbHksIHNrYiwgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjc0LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjY4ND1zdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzMwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjczMTpcXHRpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSkpIHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3MzItXFx0XFx0ZGVzdHJveV93b3JrcXVldWUobmJkX2RlbF93cSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3NTk9c3RhdGljIHZvaWQgX19leGl0IG5iZF9jbGVhbnVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NjctXFx0ICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzY4OlxcdGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyOToyNy4wMjIyMjk4NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MDUxNDQyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIENoZWNrbGlzdCBmb3IgTmV0d29yayBCbG9jayBEZXZpY2UgT3BlcmF0aW9uKipcblxuT2theSwgc28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0IGhlcmUgcmVnYXJkaW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyBvZiB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBJIHNlZSB0aGF0IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AgYXJlIHRoZSBuZXRsaW5rIGNhbGxiYWNrcy4gVGhhdCdzIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSB1c2VyLXNwYWNlIGNvbW11bmljYXRpb24sIGFuZCBJIG5lZWQgdG8ga2VlcCB0aG9zZSBzdHJhaWdodC4gRnVydGhlcm1vcmUsIGBuYmRfaW9jdGxgIGlzIHRoZSBpb2N0bCBjYWxsYmFjayDigJMgdGhhdCBoYW5kbGVzIHRoZSBzdGFuZGFyZCBkZXZpY2UgY29udHJvbCBpbnRlcmFjdGlvbnMsIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24ndCBjb25mdXNlIHRoYXQgd2l0aCB0aGUgb3RoZXJzLiBGaW5hbGx5LCBgbmJkX3F1ZXVlX3JxYCBpcyB0aGF0IGJsb2NrIGxheWVyIHJlcXVlc3QgY2FsbGJhY2ssIHdoaWNoIGlzIGhvdyB3ZSBhY3R1YWxseSBnZXQgdGhlIEkvTyBkb25lLlxuXG5SaWdodC4gQmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyIGludG8gdGhlIHdlZWRzLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBUaGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gdGhhdCBqdW1wcyB0byBtaW5kIHJpZ2h0IG5vdyBpcyBgQkxLX0RFVl9OQkRgLiBHb29kLiBOb3csIHRoYXQncyB3aGF0IEkgZXhwZWN0IHRvIGJlIGVuYWJsZWQgdG8gaGF2ZSB0aGUgZHJpdmVyIGNvbmZpZ3VyZWQuIEJ1dCwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgbmVjZXNzYXJ5IOKAkyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoYXQgZmxhZyBvciBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI5OjU5LjcyNzM3NjYwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3Njc2NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyOTo1OS45NTUwNTkxOTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NTE2ODQ0NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBgQkxLX0RFVl9OQkRgIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLCBJIG5lZWQgYSByb2NrLXNvbGlkIGRlZmluaXRpb24gdG8gYnVpbGQgb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgYEJMS19ERVZfTkJEYC4gTm8gZ3Vlc3N3b3JrIGhlcmU7IEkgbmVlZCB0aGUgZnVsbCwgY2Fub25pY2FsIGV4cGxhbmF0aW9uLiBJIGRvbid0IHdhbnQgdG8gcmVseSBvbiBwb3RlbnRpYWxseSBvdXRkYXRlZCBkb2N1bWVudGF0aW9uIG9yIGZyYWdtZW50ZWQgc25pcHBldHMuIFRpbWUgdG8gcHVsbCB1cCB0aGF0IGRlZmluaXRpb24gYW5kIG1ha2Ugc3VyZSBJJ20gc3RhcnRpbmcgb24gdGhlIHJpZ2h0IGZvb3Rpbmcgd2l0aCBhIHNvbGlkLCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgYXJlIG5vdCBtaXNzaW5nIGFueXRoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMxOjQ1LjQ3MTkwNzExOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk2OlxcdGNvbmZpZyBCTEtfREVWX05CRFxcbiAxOTc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE5ODpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAxOTk6XFx0XFx0aGVscFxcbiAyMDA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xcbiAyMDE6XFx0XFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxcbiAyMDI6XFx0XFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXFxuIDIwMzpcXHRcXHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XFxuIDIwNDpcXHRcXHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXFxuIDIwNTpcXHRcXHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHQgIE5ldHdvcmsgYmxvY2sgZGV2aWNlcyBhbHNvIGFsbG93cyB5b3UgdG8gcnVuIGEgYmxvY2stZGV2aWNlIGluXFxuIDIwODpcXHRcXHQgIHVzZXJsYW5kIChtYWtpbmcgc2VydmVyIGFuZCBjbGllbnQgcGh5c2ljYWxseSB0aGUgc2FtZSBjb21wdXRlcixcXG4gMjA5OlxcdFxcdCAgY29tbXVuaWNhdGluZyB1c2luZyB0aGUgbG9vcGJhY2sgbmV0d29yayBkZXZpY2UpLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHQgIFJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi9uYmQucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbixcXG4gMjEyOlxcdFxcdCAgZXNwZWNpYWxseSBhYm91dCB3aGVyZSB0byBmaW5kIHRoZSBzZXJ2ZXIgY29kZSwgd2hpY2ggcnVucyBpbiB1c2VyXFxuIDIxMzpcXHRcXHQgIHNwYWNlIGFuZCBkb2VzIG5vdCBuZWVkIHNwZWNpYWwga2VybmVsIHN1cHBvcnQuXFxuIDIxNDpcXHRcXG4gMjE1OlxcdFxcdCAgTm90ZSB0aGF0IHRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgbmV0d29yayBmaWxlIHN5c3RlbXMgTkZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMxOjQ1LjQ3MTk3NzU3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTkyMTkzOTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQkQgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGRlcGVuZGVuY3kgb24gYE5FVGAuIFNpbmNlIHdlJ3JlIGFzc3VtaW5nIGEgbWluaW1hbCBjb25maWd1cmF0aW9uLCBpdCBzZWVtcyBsaWtlIGBCTEtfREVWX05CRGAgaXMgdGhlIG9ubHkgY29uZmlnIHdlJ2xsIGJlIGNvbmNlcm5lZCB3aXRoLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHF1aXRlIGltcGFjdGZ1bCwgbW9kaWZ5aW5nIHNldmVyYWwgY29yZSBmdW5jdGlvbnM6IGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9jb25maWdfcHV0YCwgYW5kIGBuYmRfZGV2X2FkZGAuIFRoZXNlIGNoYW5nZXMgc3Ryb25nbHkgc3VnZ2VzdCBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSBOQkQgZHJpdmVyJ3MgZnVuY3Rpb25hbCBiZWhhdmlvci4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSBoYXZlIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfZ2VubF9kaXNjb25uZWN0YCwgYW5kIGBuYmRfcXVldWVfcnFgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyBhdm9pZGluZyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgbWUgcGF1c2Ugb24gYG5iZF9xdWV1ZV9ycWAgc2luY2UgaXQncyB0aGUgYmxvY2sgbGF5ZXIgcmVxdWVzdCBxdWV1ZWluZyBmdW5jdGlvbiwgYSBjbGVhciBob3QgcGF0aC4gSXQncyBoYW5kbGluZyB0aGUgY29yZSBvZiBibG9jayBJL08uXG5cblNvLCBsZXQncyByZS1ldmFsdWF0ZS4gYG5iZF9pb2N0bGAgaXMgYSBnb29kIGNob2ljZTsgaXQncyBhbiBpb2N0bCBoYW5kbGVyIGFuZCBub3QgYSBob3QgcGF0aC4gU2ltaWxhcmx5LCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIG5ldGxpbmsgaGFuZGxlcnMsIGFnYWluLCBub3QgaG90IHBhdGhzLiBXZSBuZWVkIHRvIGV4cGxvcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRob3VnaCwgdG8gbWFrZSBzdXJlIHdlJ3ZlIGV4cGxvcmVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS5cblxuVGhpbmtpbmcgYWJvdXQgb3RoZXIgZW50cnkgcG9pbnRz4oCmIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCdzIG5vdCBhIGhvdCBwYXRoPyBXaGF0IGFib3V0IGBuYmRfcmVsZWFzZWA/IEl0J3MgdGhlIGJsb2NrIGRldmljZSByZWxlYXNlIGNhbGxiYWNrLCBhbiBpbnRlcmVzdGluZyBjaG9pY2UuIEknbSBsZWFuaW5nIHRvd2FyZCBpdCBhcyBhIGNhbmRpZGF0ZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGludGVybmFscyBmb3IgZnVydGhlciBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk4OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMyOjA3LjM5MzkxOTM5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4OTI5NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ2PXN0YXRpYyBpbnQgbmJkX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc4OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3ODk6c3RhdGljIHZvaWQgbmJkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzkwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMS1cXHQub3BlbiA9XFx0XFx0bmJkX29wZW4sXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEyOlxcdC5yZWxlYXNlID1cXHRuYmRfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTMtXFx0LmlvY3RsID1cXHRuYmRfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMyOjA3Ljc3Mjg1NDcxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDY2MjMzNjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYG5iZF9yZWxlYXNlYCBhbmQgYG5iZF9vcGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aG9zZSBhcmUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIE5CRCBjb25uZWN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBjaGFuZ2VzIGBuYmRfY29uZmlnX3B1dGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBuYmRfcmVsZWFzZWAsIHNvIGBuYmRfcmVsZWFzZWAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGZvY3VzIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLlxuXG5JIGFsc28gbm90ZSB0aGF0IGBuYmRfZGV2X2FkZGAgaXMgbW9kaWZpZWQsIHdoaWNoIGlzIGNhbGxlZCBieSBgbmJkX2luaXRgIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAuIENvbnNpZGVyaW5nIHRoYXQsIGBuYmRfZ2VubF9jb25uZWN0YCBpcyBhIHJlbGV2YW50IGZvY3VzIHN5bWJvbCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgcHJpbWUgZW50cnkgcG9pbnRzIGludG8gdGhlIG1vZGlmaWVkIGNvZGU6IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBvZiBjb3Vyc2UsIGBuYmRfcmVsZWFzZWAuIFllcywgdGhlc2UgYWxsIGxvb2sgbGlrZSBnb29kIGVudHJ5IHBvaW50cyBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC5cblxuQWxzbywgSSBzaG91bGQgbm90ZSB0aGF0IGBCTEtfREVWX05CRGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoZSBmYWxsYmFjayBsb2dpYywgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIGRyaXZlci4gVGhlc2UgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgaW1wYWN0IHRoZSBjb3JlIG9wZXJhdGlvbiBvZiBob3cgdGhlIE5CRCBkcml2ZXIgY29ubmVjdHMsIGNvbmZpZ3VyZXMsIGFuZCBoYW5kbGVzIGRhdGEuIEknbSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGxvZ2ljLlxuXG5BbHJpZ2h0LCB0aGF0IGNvdmVycyB0aGUgZXNzZW50aWFscy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAyNiwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6MzI6MjguNDM1MTkzODg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1NDYwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBmYWxsYmFjayBsb2dpYywgYWRqdXN0IHF1ZXVlIGxpbWl0cywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcmVhY2hhYmxlIGNvcmUgbG9naWMgb2YgdGhlIE5CRCBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 14:07:14 +0000 UTC FinishedAt: 2026-08-05 14:32:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "34a7668036335998a9458c620bca441aa57a3095", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "a8be7713-2dde-4e4e-8d0c-930a912b2c4c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBmaXggZmFsbGJhY2sgbG9naWMsIGFkanVzdCBxdWV1ZSBsaW1pdHMsIGFuZCByZWZhY3RvciBuZXRsaW5rIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIG9mIHRoZSBOQkQgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODM3NWRhNjhiNTRkNzViMzA1OTA1MWFkODljZjI3NDY2MjVhZjM5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTQ6Mjc6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmZmY2U1MTliZjAwODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTY2LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2O1xuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcbiYjNDM7c3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XG4gc3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuIFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbkBAIC0zMzEsNiAmIzQzOzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5iZF9hcHBseV9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4mIzQzO1x0bGltLVx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuJiM0MztcdGxpbS1cdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbiYjNDM7XHRcdGxpbS1cdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcbiYjNDM7XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXG4mIzQzO1x0XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4mIzQzO1x0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxuJiM0MztcdFx0bGltLVx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbkBAIC0zNTIsMjYgJiM0MzszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0aWYgKCEobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4tXHR9IGVsc2UgaWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcbi1cdH0gZWxzZSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcbi1cdH1cbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxuLVx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXG4mIzQzO1x0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XG4tXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXG4mIzQzO1x0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVx1MDAzZWRpc2spIFx1MDAyNlx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKSlcbiYjNDM7XHRcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICYjNDM7MTA3MCwzMSBAQCBzdGF0aWMgaW50IGZpbmRfZmFsbGJhY2soc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgaW50IGluZGV4KVxuIFx0aW50IG5ld19pbmRleCA9IC0xO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cdTAwM2Vzb2Nrc1tpbmRleF07XG4gXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh0ZXN0X2JpdChOQkRfUlRfRElTQ09OTkVDVEVELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdHJldHVybiBuZXdfaW5kZXg7XG4gXG4tXHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpIHtcbi1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4tXHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIG5ld19pbmRleDtcbi1cdH1cbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucyBcdTAwM2M9IDEpXG4mIzQzO1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmIChpID09IGluZGV4KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKCFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuLVx0XHRcdFx0bmV3X2luZGV4ID0gaTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbi1cdFx0aWYgKG5ld19pbmRleCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0XHQgICAgXCYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSAhPSBpbmRleCBcdTAwMjZcdTAwMjYgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tpXS1cdTAwM2VkZWFkKSB7XG4mIzQzO1x0XHRcdG5ld19pbmRleCA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXdfaW5kZXggPSBuc29jay1cdTAwM2VmYWxsYmFja19pbmRleDtcbiYjNDM7XHRuc29jay1cdTAwM2VmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDtcbiYjNDM7XHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybiBuZXdfaW5kZXg7XG4mIzQzO1xuJiM0Mztub19mYWxsYmFjazpcbiYjNDM7XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwmIzM0Oyk7XG4gXHRyZXR1cm4gbmV3X2luZGV4O1xuIH1cbiBcbkBAIC0xMjgxLDIzICYjNDM7MTI4MSwyMyBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdHN0cnVjdCBuYmRfc29jayAqKnNvY2tzO1xuIFx0c3RydWN0IG5iZF9zb2NrICpuc29jaztcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBcmcgd2lsbCBiZSBjYXN0IHRvIGludCwgY2hlY2sgaXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi9cbiBcdGlmIChhcmcgXHUwMDNlIElOVF9NQVgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmJkLVx1MDAzZXBpZCkge1xuJiM0MztcdFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG4mIzQzO1x0XHRcdFwmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c29jayA9IG5iZF9nZXRfc29ja2V0KG5iZCwgYXJnLCBcdTAwMjZlcnIpO1xuIFx0aWYgKCFzb2NrKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSYjMzk7cmVcbi1cdCAqIHJlYWxsb2NhdGluZyB0aGUgLVx1MDAzZXNvY2tzIGFycmF5LlxuLVx0ICovXG4tXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLVxuIFx0aWYgKCFuZXRsaW5rIFx1MDAyNlx1MDAyNiAhbmJkLVx1MDAzZXRhc2tfc2V0dXAgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXRlc3RfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmQtXHUwMDNldGFza19zZXR1cCA9IGN1cnJlbnQ7XG5AQCAtMTMzNywxNyAmIzQzOzEzMzcsMTUgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdElOSVRfV09SSyhcdTAwMjZuc29jay1cdTAwM2V3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7XG4gXHRzb2Nrc1tjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zJiM0MzsmIzQzO10gPSBuc29jaztcbiBcdGF0b21pY19pbmMoXHUwMDI2Y29uZmlnLVx1MDAzZWxpdmVfY29ubmVjdGlvbnMpO1xuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBwdXRfc29ja2V0OlxuLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBtZW1mbGFncyk7XG4gXHRzb2NrZmRfcHV0KHNvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2ssICpvbGQ7XG5AQCAtMTQwMiwxMSAmIzQzOzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4mIzQzO1x0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0cmV0dXJuIDE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5iZF9iZGV2X3Jlc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5AQCAtMTQ3MSw4ICYjNDM7MTQ3MCwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfbXV0ZXhfbG9jayhcdTAwMjZuYmQtXHUwMDNlY29uZmlnX3JlZnMsXG4gXHRcdFx0XHRcdFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jaykpIHtcbiBcdFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cdTAwM2Vjb25maWc7XG4mIzQzO1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbiYjNDM7XHRcdC8qIHJlc2V0IHF1ZXVlIGxpbWl0cyB0byBkZWZhdWx0ICovXG4mIzQzO1x0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbiYjNDM7XHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbiYjNDM7XHRcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0XHRpZiAobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VieXRlc2l6ZSlcbiBcdFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIFx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsXG5AQCAtMTk0MSw3ICYjNDM7MTk0NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuIFx0LnRpbWVvdXRcdD0gbmJkX3htaXRfdGltZW91dCxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbnJfaHdfcXVldWVzKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuIFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSA2NTUzNixcbkBAIC0xOTU4LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdG5iZC1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNm5iZF9tcV9vcHM7XG4tXHRuYmQtXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuJiM0MztcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiAmIzQzOzIxMTIsNTggQEAgc3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuJiM0MztcdFx0aW50ICgqY2IpKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpLFxuJiM0MztcdFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4mIzQzO1x0aW50IHJlbSwgY291bnQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcbiYjNDM7XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCAmIzQzOyAxXTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbiYjNDM7XHRcdFx0XHRcdFx0YXR0cixcbiYjNDM7XHRcdFx0XHRcdFx0bmJkX3NvY2tfcG9saWN5LFxuJiM0MztcdFx0XHRcdFx0XHRpbmZvLVx1MDAzZWV4dGFjaykpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChjYikge1xuJiM0MztcdFx0XHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuQEAgLTIxNTksNyAmIzQzOzIyMTYsMTEgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmJkX2luZGV4X211dGV4KTtcbiBcbiBcdGlmICghbmJkKSB7XG4tXHRcdG5iZCA9IG5iZF9kZXZfYWRkKGluZGV4LCAyKTtcbiYjNDM7XHRcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuIFx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbiBcdFx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGFkZCBuZXcgZGV2aWNlXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihuYmQpO1xuQEAgLTIyMjYsMzYgJiM0MzsyMjg3LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwmIzM0Oyk7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XG4tXHRcdFx0cmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XG4tXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdKSB7XG4gXHRcdG5iZC1cdTAwM2ViYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sXG5AQCAtMjQ0MCw0MCAmIzQzOzI0NzQsMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCYjNDM7MV07XG4tXG4tXHRcdFx0aWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHtcbi1cdFx0XHRcdHByX2VycihcJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cJiMzNDspO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdGlmIChyZXQgPT0gLUVOT1NQQylcbi1cdFx0XHRcdFx0cmV0ID0gMDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRkZXZfaW5mbyhuYmRfdG9fZGV2KG5iZCksIFwmIzM0O3JlY29ubmVjdGVkIHNvY2tldFxcblwmIzM0Oyk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XG4mIzQzO1x0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldCA9IDA7XG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5iZC1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRuYmRfY29uZmlnX3B1dChuYmQpO1xuQEAgLTI3MDksNiAmIzQzOzI3MTMsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdGlmIChuYmRzX21heCBcdTAwM2UgMVVMIFx1MDAzY1x1MDAzYyAoTUlOT1JCSVRTIC0gcGFydF9zaGlmdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIEFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIHZhbHVlIHdpbGwgYmUgYWRqdXN0ZWQgaW4gYmxrX21xX2FsbG9jX3RhZ19zZXQgKi9cbiYjNDM7XHRpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgXHUwMDNjIDEpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBtdXN0IGJlIFx1MDAzZT0gMVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHJlZ2lzdGVyX2Jsa2RldihOQkRfTUFKT1IsIFwmIzM0O25iZFwmIzM0OykpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuQEAgLTI3MjUsOCAmIzQzOzI3MzUsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdH1cbiBcdG5iZF9kYmdfaW5pdCgpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHRvIHRoZSBpbnRlbmRlZCBjb25uZWN0aW9uIGNvdW50IHNvIG5iZF9zdGFydF9kZXZpY2UoKSBjYW4gc2tpcFxuJiM0MztcdCAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuXG4mIzQzO1x0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSYjNDM7JiM0MzspXG4tXHRcdG5iZF9kZXZfYWRkKGksIDEpO1xuJiM0MztcdFx0bmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI3ODcsMyAmIzQzOzI4MDEsNiBAQCBtb2R1bGVfcGFyYW0obmJkc19tYXgsIGludCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXCYjMzQ7bnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcJiMzNDspO1xuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcJiMzNDtudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgZGV2aWNlIChkZWZhdWx0OiAxNilcJiMzNDspO1xuJiM0Mzttb2R1bGVfcGFyYW0ocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsIGludCwgMDQ0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0MocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsXG4mIzQzO1wmIzM0O251bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSlcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgzNzVkYTY4YjU0ZDc1YjMwNTkwNTFhZDg5Y2YyNzQ2NjI1YWYzOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjI3OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggOGYxMDc2MmU5MGVmNy4uZmZjZTUxOWJmMDA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjsKIAogc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2Owogc3RhdGljIGludCBtYXhfcGFydCA9IDE2OwomIzQzO3N0YXRpYyBpbnQgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxOwogc3RhdGljIGludCBwYXJ0X3NoaWZ0OwogCiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7CkBAIC0zMzEsNiAmIzQzOzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssCiAJbnNvY2stJmd0O3NlbnQgPSAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncykKJiM0Mzt7CiYjNDM7CWxpbS0mZ3Q7ZmVhdHVyZXMgJmFtcDs9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTsKJiM0MzsJbGltLSZndDttYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKJiM0MzsJbGltLSZndDttYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9UUklNKQomIzQzOwkJbGltLSZndDttYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfU0VORF9GTFVTSCkgewomIzQzOwkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX0ZVQSkKJiM0MzsJCQlsaW0tJmd0O2ZlYXR1cmVzIHw9IEJMS19GRUFUX0ZVQTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTkJEX0ZMQUdfUk9UQVRJT05BTCkKJiM0MzsJCWxpbS0mZ3Q7ZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKQomIzQzOwkJbGltLSZndDttYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSBVSU5UX01BWCAmZ3Q7Jmd0OyBTRUNUT1JfU0hJRlQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSkKIHsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKQEAgLTM1MiwyNiAmIzQzOzM3MywxNCBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCQlyZXR1cm4gMDsKIAogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSk7Ci0JaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX1RSSU0pCi0JCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwotCWVsc2UKLQkJbGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwOwotCWlmICghKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19TRU5EX0ZMVVNIKSkgewotCQlsaW0uZmVhdHVyZXMgJmFtcDs9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEpOwotCX0gZWxzZSBpZiAobmJkLSZndDtjb25maWctJmd0O2ZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfRlVBKSB7Ci0JCWxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTsKLQl9IGVsc2UgewotCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7Ci0JCWxpbS5mZWF0dXJlcyAmYW1wOz0gfkJMS19GRUFUX0ZVQTsKLQl9Ci0JaWYgKG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyAmYW1wOyBOQkRfRkxBR19ST1RBVElPTkFMKQotCQlsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDsKLQlpZiAobmJkLSZndDtjb25maWctJmd0O2ZsYWdzICZhbXA7IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKQotCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gVUlOVF9NQVggJmd0OyZndDsgU0VDVE9SX1NISUZUOwotCiYjNDM7CW5iZF9hcHBseV9saW1pdHMoJmFtcDtsaW0sIG5iZC0mZ3Q7Y29uZmlnLSZndDtmbGFncyk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7CiAJbGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplOwotCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUsICZhbXA7bGltKTsKJiM0MzsJLyogTm8gbmVlZCBmcmVlemUgd2l0aCAwIGNhcGFjaXR5IGFuZCB3cml0ZSBjYWNoZSBkaXNhYmxlZCAqLwomIzQzOwlpZiAoIWdldF9jYXBhY2l0eShuYmQtJmd0O2Rpc2spICZhbXA7JmFtcDsgIWJsa19xdWV1ZV93cml0ZV9jYWNoZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKSkKJiM0MzsJCWVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTEwNjEsNDAgJiM0MzsxMDcwLDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpCiAJaW50IG5ld19pbmRleCA9IC0xOwogCXN0cnVjdCBuYmRfc29jayAqbnNvY2sgPSBjb25maWctJmd0O3NvY2tzW2luZGV4XTsKIAlpbnQgZmFsbGJhY2sgPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CWludCBpOwogCiAJaWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsICZhbXA7Y29uZmlnLSZndDtydW50aW1lX2ZsYWdzKSkKIAkJcmV0dXJuIG5ld19pbmRleDsKIAotCWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKSB7Ci0JCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkgICAgJiMzNDtEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcbiYjMzQ7KTsKLQkJcmV0dXJuIG5ld19pbmRleDsKLQl9CiYjNDM7CWlmIChjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmbHQ7PSAxKQomIzQzOwkJZ290byBub19mYWxsYmFjazsKIAogCWlmIChmYWxsYmFjayAmZ3Q7PSAwICZhbXA7JmFtcDsgZmFsbGJhY2sgJmx0OyBjb25maWctJmd0O251bV9jb25uZWN0aW9ucyAmYW1wOyZhbXA7CiAJICAgICFjb25maWctJmd0O3NvY2tzW2ZhbGxiYWNrXS0mZ3Q7ZGVhZCkKIAkJcmV0dXJuIGZhbGxiYWNrOwogCi0JaWYgKG5zb2NrLSZndDtmYWxsYmFja19pbmRleCAmbHQ7IDAgfHwKLQkgICAgbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4ICZndDs9IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zIHx8Ci0JICAgIGNvbmZpZy0mZ3Q7c29ja3NbbnNvY2stJmd0O2ZhbGxiYWNrX2luZGV4XS0mZ3Q7ZGVhZCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGNvbmZpZy0mZ3Q7bnVtX2Nvbm5lY3Rpb25zOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKGkgPT0gaW5kZXgpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWNvbmZpZy0mZ3Q7c29ja3NbaV0tJmd0O2RlYWQpIHsKLQkJCQluZXdfaW5kZXggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKLQkJaWYgKG5ld19pbmRleCAmbHQ7IDApIHsKLQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKLQkJCQkJICAgICYjMzQ7RGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gbmV3X2luZGV4OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoaSAhPSBpbmRleCAmYW1wOyZhbXA7ICFjb25maWctJmd0O3NvY2tzW2ldLSZndDtkZWFkKSB7CiYjNDM7CQkJbmV3X2luZGV4ID0gaTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KLQluZXdfaW5kZXggPSBuc29jay0mZ3Q7ZmFsbGJhY2tfaW5kZXg7CiYjNDM7CW5zb2NrLSZndDtmYWxsYmFja19pbmRleCA9IG5ld19pbmRleDsKJiM0MzsJaWYgKG5ld19pbmRleCAmZ3Q7PSAwKQomIzQzOwkJcmV0dXJuIG5ld19pbmRleDsKJiM0MzsKJiM0Mztub19mYWxsYmFjazoKJiM0MzsJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLAomIzQzOwkJCSAgICAmIzM0O0RlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xuJiMzNDspOwogCXJldHVybiBuZXdfaW5kZXg7CiB9CiAKQEAgLTEyODEsMjMgJiM0MzsxMjgxLDIzIEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrczsKIAlzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrOwotCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAlpbnQgZXJyOwogCiAJLyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovCiAJaWYgKGFyZyAmZ3Q7IElOVF9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAobmJkLSZndDtwaWQpIHsKJiM0MzsJCWRldl9lcnIoZGlza190b19kZXYobmJkLSZndDtkaXNrKSwKJiM0MzsJCQkmIzM0O0Nhbm5vdCBhZGQgc29ja2V0IHRvIGEgcnVubmluZyBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKIAlzb2NrID0gbmJkX2dldF9zb2NrZXQobmJkLCBhcmcsICZhbXA7ZXJyKTsKIAlpZiAoIXNvY2spCiAJCXJldHVybiBlcnI7CiAJbmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spOwogCi0JLyoKLQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UmIzM5O3JlCi0JICogcmVhbGxvY2F0aW5nIHRoZSAtJmd0O3NvY2tzIGFycmF5LgotCSAqLwotCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKLQogCWlmICghbmV0bGluayAmYW1wOyZhbXA7ICFuYmQtJmd0O3Rhc2tfc2V0dXAgJmFtcDsmYW1wOwogCSAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCAmYW1wO2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZC0mZ3Q7dGFza19zZXR1cCA9IGN1cnJlbnQ7CkBAIC0xMzM3LDE3ICYjNDM7MTMzNywxNSBAQCBzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLAogCUlOSVRfV09SSygmYW1wO25zb2NrLSZndDt3b3JrLCBuYmRfcGVuZGluZ19jbWRfd29yayk7CiAJc29ja3NbY29uZmlnLSZndDtudW1fY29ubmVjdGlvbnMmIzQzOyYjNDM7XSA9IG5zb2NrOwogCWF0b21pY19pbmMoJmFtcDtjb25maWctJmd0O2xpdmVfY29ubmVjdGlvbnMpOwotCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCBtZW1mbGFncyk7CiAKIAlyZXR1cm4gMDsKIAogcHV0X3NvY2tldDoKLQlibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLSZndDtkaXNrLSZndDtxdWV1ZSwgbWVtZmxhZ3MpOwogCXNvY2tmZF9wdXQoc29jayk7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtJmd0O2NvbmZpZzsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAqb2xkOwpAQCAtMTQwMiwxMSAmIzQzOzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZykKIAogCQlhdG9taWNfaW5jKCZhbXA7Y29uZmlnLSZndDtsaXZlX2Nvbm5lY3Rpb25zKTsKIAkJd2FrZV91cCgmYW1wO2NvbmZpZy0mZ3Q7Y29ubl93YWl0KTsKJiM0MzsJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKIAkJcmV0dXJuIDA7CiAJfQogCXNvY2tmZF9wdXQoc29jayk7CiAJa2ZyZWUoYXJncyk7Ci0JcmV0dXJuIC1FTk9TUEM7CiYjNDM7CXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCBuYmRfYmRldl9yZXNldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQpAQCAtMTQ3MSw4ICYjNDM7MTQ3MCwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQogCWlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soJmFtcDtuYmQtJmd0O2NvbmZpZ19yZWZzLAogCQkJCQkmYW1wO25iZC0mZ3Q7Y29uZmlnX2xvY2spKSB7CiAJCXN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtJmd0O2NvbmZpZzsKJiM0MzsJCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCQluYmRfZGV2X2RiZ19jbG9zZShuYmQpOwogCQlpbnZhbGlkYXRlX2Rpc2sobmJkLSZndDtkaXNrKTsKJiM0MzsJCS8qIHJlc2V0IHF1ZXVlIGxpbWl0cyB0byBkZWZhdWx0ICovCiYjNDM7CQlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwomIzQzOwkJbmJkX2FwcGx5X2xpbWl0cygmYW1wO2xpbSwgMCk7CiYjNDM7CQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtJmd0O2Rpc2stJmd0O3F1ZXVlLCAmYW1wO2xpbSk7CiAJCWlmIChuYmQtJmd0O2NvbmZpZy0mZ3Q7Ynl0ZXNpemUpCiAJCQlrb2JqZWN0X3VldmVudCgmYW1wO25iZF90b19kZXYobmJkKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5CRF9SVF9IQVNfUElEX0ZJTEUsCkBAIC0xOTQxLDcgJiM0MzsxOTQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7CiAJLnRpbWVvdXQJPSBuYmRfeG1pdF90aW1lb3V0LAogfTsKIAotc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzKQomIzQzO3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcywKJiM0MzsJCQkJICAgICAgIGludCBucl9od19xdWV1ZXMpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7CiAJCS5tYXhfaHdfc2VjdG9ycwkJPSA2NTUzNiwKQEAgLTE5NTgsNyAmIzQzOzE5NjMsNyBAQCBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpCiAJCWdvdG8gb3V0OwogCiAJbmJkLSZndDt0YWdfc2V0Lm9wcyA9ICZhbXA7bmJkX21xX29wczsKLQluYmQtJmd0O3RhZ19zZXQubnJfaHdfcXVldWVzID0gMTsKJiM0MzsJbmJkLSZndDt0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlczsKIAluYmQtJmd0O3RhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7CiAJbmJkLSZndDt0YWdfc2V0Lm51bWFfbm9kZSA9IE5VTUFfTk9fTk9ERTsKIAluYmQtJmd0O3RhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpOwpAQCAtMjEwNyw2ICYjNDM7MjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFdhbGsgdGhlIE5CRF9BVFRSX1NPQ0tFVFMgbmVzdGVkIGxpc3QgY2FuIGNhbGwgQGNiIGZvciBlYWNoIHNvY2tldCBmZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuYmRfZ2VubF9mb3JlYWNoX3NvY2soc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCWludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKSwKJiM0MzsJCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmxhdHRyICphdHRyOwomIzQzOwlpbnQgcmVtLCBjb3VudCA9IDA7CiYjNDM7CiYjNDM7CWlmICghaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7CiYjNDM7CQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVggJiM0MzsgMV07CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKJiM0MzsJCQkJCQlhdHRyLAomIzQzOwkJCQkJCW5iZF9zb2NrX3BvbGljeSwKJiM0MzsJCQkJCQlpbmZvLSZndDtleHRhY2spKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGNiKSB7CiYjNDM7CQkJcmV0ID0gY2IobmJkLCAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSkpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXR1cm4gY291bnQ7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7CkBAIC0yMTU5LDcgJiM0MzsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCW11dGV4X3VubG9jaygmYW1wO25iZF9pbmRleF9tdXRleCk7CiAKIAlpZiAoIW5iZCkgewotCQluYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7CiYjNDM7CQlyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJbmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCAmZ3Q7IDAgPyByZXQgOiAxKTsKIAkJaWYgKElTX0VSUihuYmQpKSB7CiAJCQlwcl9lcnIoJiMzNDtmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcbiYjMzQ7KTsKIAkJCXJldHVybiBQVFJfRVJSKG5iZCk7CkBAIC0yMjI2LDM2ICYjNDM7MjI4Nyw5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQl9CiAJfQogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7Ci0JCXN0cnVjdCBubGF0dHIgKmF0dHI7Ci0JCWludCByZW0sIGZkOwotCi0JCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10sCi0JCQkJICAgIHJlbSkgewotCQkJc3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYJiM0MzsxXTsKLQotCQkJaWYgKG5sYV90eXBlKGF0dHIpICE9IE5CRF9TT0NLX0lURU0pIHsKLQkJCQlwcl9lcnIoJiMzNDtzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsCi0JCQkJCQkJICBhdHRyLAotCQkJCQkJCSAgbmJkX3NvY2tfcG9saWN5LAotCQkJCQkJCSAgaW5mby0mZ3Q7ZXh0YWNrKTsKLQkJCWlmIChyZXQgIT0gMCkgewotCQkJCXByX2VycigmIzM0O2Vycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XG4mIzM0Oyk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmICghc29ja3NbTkJEX1NPQ0tfRkRdKQotCQkJCWNvbnRpbnVlOwotCQkJZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7Ci0JCQlyZXQgPSBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQl9CiYjNDM7CXJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2IsIG5iZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiAKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkgewogCQluYmQtJmd0O2JhY2tlbmQgPSBubGFfc3RyZHVwKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0sCkBAIC0yNDQwLDQwICYjNDM7MjQ3NCwxMCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCX0KIAl9CiAKLQlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHsKLQkJc3RydWN0IG5sYXR0ciAqYXR0cjsKLQkJaW50IHJlbSwgZmQ7Ci0KLQkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwKLQkJCQkgICAgcmVtKSB7Ci0JCQlzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgmIzQzOzFdOwotCi0JCQlpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkgewotCQkJCXByX2VycigmIzM0O3NvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxuJiMzNDspOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCwKLQkJCQkJCQkgIGF0dHIsCi0JCQkJCQkJICBuYmRfc29ja19wb2xpY3ksCi0JCQkJCQkJICBpbmZvLSZndDtleHRhY2spOwotCQkJaWYgKHJldCAhPSAwKSB7Ci0JCQkJcHJfZXJyKCYjMzQ7ZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcbiYjMzQ7KTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pCi0JCQkJY29udGludWU7Ci0JCQlmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTsKLQkJCXJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpOwotCQkJaWYgKHJldCkgewotCQkJCWlmIChyZXQgPT0gLUVOT1NQQykKLQkJCQkJcmV0ID0gMDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgJiMzNDtyZWNvbm5lY3RlZCBzb2NrZXRcbiYjMzQ7KTsKLQkJfQotCX0KJiM0MzsJcmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpOwomIzQzOwkvKiBmb3JlYWNoX3NvY2sgcmV0dXJucyBhIHBvc2l0aXZlIGNvdW50IG9uIHN1Y2Nlc3M7IGRvaXQgbXVzdCByZXR1cm4gMCAqLwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlyZXQgPSAwOwogb3V0OgogCW11dGV4X3VubG9jaygmYW1wO25iZC0mZ3Q7Y29uZmlnX2xvY2spOwogCW5iZF9jb25maWdfcHV0KG5iZCk7CkBAIC0yNzA5LDYgJiM0MzsyNzEzLDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpCiAJaWYgKG5iZHNfbWF4ICZndDsgMVVMICZsdDsmbHQ7IChNSU5PUkJJVFMgLSBwYXJ0X3NoaWZ0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogQW4gZXhjZXNzaXZlbHkgbGFyZ2UgdmFsdWUgd2lsbCBiZSBhZGp1c3RlZCBpbiBibGtfbXFfYWxsb2NfdGFnX3NldCAqLwomIzQzOwlpZiAocHJlX2RlZmluZWRfY29ubmVjdGlvbnMgJmx0OyAxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBtdXN0IGJlICZndDs9IDFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihOQkRfTUFKT1IsICYjMzQ7bmJkJiMzNDspKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjcyNSw4ICYjNDM7MjczNSwxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKQogCX0KIAluYmRfZGJnX2luaXQoKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwCiYjNDM7CSAqIHRoZSBxdWV1ZS1mcmVlemluZyBibGtfbXFfdXBkYXRlX25yX2h3X3F1ZXVlcygpIGNhbGwuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBuYmRzX21heDsgaSYjNDM7JiM0MzspCi0JCW5iZF9kZXZfYWRkKGksIDEpOwomIzQzOwkJbmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzg3LDMgJiM0MzsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KSYjMzQ7KTsKIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsICYjMzQ7bnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpJiMzNDspOwomIzQzO21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zLAomIzQzOyYjMzQ7bnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciBkZXZpY2VzIHByZS1jcmVhdGVkIGF0IG1vZHVsZSBsb2FkIChkZWZhdWx0OiAxKSYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOQkQgRHJpdmVyIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9uYmQuY2AuIEl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzLCBzbyBsZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGEgbW9kdWxlIHBhcmFtZXRlciwgYHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zYCwgYW5kIG1vZGlmeWluZyBgbmJkX2Rldl9hZGRgIHRvIGhhbmRsZSBgbnJfaHdfcXVldWVzYC4gVGhpcyBzdWdnZXN0cyBzb21lIGVuaGFuY2VtZW50cyB0byBob3cgTkJEIGNvbm5lY3Rpb25zIGFyZSBpbml0aWFsaXplZCBhbmQgcG9zc2libHkgaG93IGhhcmR3YXJlIHF1ZXVlaW5nIGlzIG1hbmFnZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKVGhlIHJlZmFjdG9yaW5nIG9mIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCB0byB1c2UgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgaXMgaW50ZXJlc3RpbmcuIFRoYXQmIzM5O3MgcHJvYmFibHkgYWltZWQgYXQgbWFraW5nIHRoZSBnZW5lcmljIG5ldGxpbmsgY29kZSBtb3JlIG1haW50YWluYWJsZSBhbmQgbGVzcyByZWR1bmRhbnQuIEFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuCgpUaGUgY2hhbmdlIGluIGBuYmRfYWRkX3NvY2tldGAgdG8gcmVqZWN0IHNvY2tldCBhZGRpdGlvbnMgdG8gYSBydW5uaW5nIGRldmljZSAoY2hlY2tpbmcgYG5iZC0mZ3Q7cGlkYCkgaXMgYSBzYWZldHkgbWVhc3VyZS4gSXQmIzM5O3MgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIGluc3RhYmlsaXR5IGJ5IHByZXZlbnRpbmcgbW9kaWZpY2F0aW9uIG9mIGNvbm5lY3Rpb25zIG9uIGEgcnVubmluZyBkZXZpY2UuIFNtYXJ0LgoKVGhlbiB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgbmJkX3NldF9zaXplYCB0byB1c2UgYG5iZF9hcHBseV9saW1pdHNgIGFuZCBjb25kaXRpb25hbGx5IGZyZWV6ZSB0aGUgcXVldWUsIGFuZCBhbHNvIGNoYW5nZXMgdG8gYG5iZF9jb25maWdfcHV0YCB0byByZXNldCBxdWV1ZSBsaW1pdHMgdG8gZGVmYXVsdCwgd2hpY2ggYXBwZWFyIHRvIHJlZmluZSB0aGUgc2l6ZSBhbmQgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgdGhlIGRldmljZS4gVGhpcyBwcm9iYWJseSBhaW1zIHRvIHByZXZlbnQgdW5leHBlY3RlZCBiZWhhdmlvciBhbmQgZ3VhcmFudGVlIHNlbnNpYmxlIGRlZmF1bHQgcGFyYW1ldGVycy4KCkZpbmFsbHksIGEgZml4IHRvIGBmaW5kX2ZhbGxiYWNrYCB0byBpbXByb3ZlIHRoZSBmYWxsYmFjayBsb2dpYy4gQWx3YXlzIHdlbGNvbWUuCgpPdmVyYWxsLCB0aGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBOQkQgZHJpdmVyLCBhbmQgaXQgaXMgYSBrbm93biBhbmQgcmVhY2hhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gSSBzaG91bGQgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGZvciBOQkQgdG8gc2VlIGlmIGFueSBuZXcgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkIHRoYXQgbmVlZCBtb3JlIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBDb25maWd1cmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfTkJEYC4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIHdpbGwgaW1wYWN0IHRoZSBvdmVyYWxsIE5CRCBmdW5jdGlvbmFsaXR5LgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwgZnVuY3Rpb25zOiBgbmJkX2FwcGx5X2xpbWl0c2AsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYmAsIGBuYmRfYmRldl9yZXNldGAsIGBuYmRfY29uZmlnX3B1dGAsIGBuYmRfZGV2X2FkZGAsIGBuYmRfZ2VubF9zaXplX3NldGAsIGBuYmRfZ2VubF9mb3JlYWNoX3NvY2tgLCBgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgZmluYWxseSwgdGhlIGBuYmRfaW5pdGAgZnVuY3Rpb24uCgpXYWl0IGEgc2Vjb25k4oCmIHRoZXkmIzM5O3JlIGFsbCAqc3RhdGljKi4gVGhhdOKAmXMgZ29pbmcgdG8gbWFrZSB0aGlzIG1vcmUgY2hhbGxlbmdpbmcuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKnVzZWQqIC0gc3BlY2lmaWNhbGx5LCBhcmUgdGhleSBjYWxsZWQgZnJvbSBhbnkgbm9uLXN0YXRpYywgZXhwb3NlZCBBUEkgZW50cnkgcG9pbnRzPyBPciBhcmUgdGhleSByZWdpc3RlcmVkIGFzIGNhbGxiYWNrcyBzb21ld2hlcmU/IEkgaGF2ZSB0byBsb29rIGZvciB1cHN0cmVhbSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKSG1tLCBva2F5LCBhZnRlciBhIHF1aWNrIGdsYW5jZSwgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFwcGVhciB0byBiZSBOZXRsaW5rIGNhbGxiYWNrcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBob3cgdGhleeKAmXJlIHJlZ2lzdGVyZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZHJpdmVycy9ibG9jay9uYmQuY2AgdG8gaWRlbnRpZnkgaG93IHRoZXNlIE5ldGxpbmsgY2FsbGJhY2tzIGFyZSBob29rZWQgdXAuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgdGhlIG90aGVyIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0yMTIwPXN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NzpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2OC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjg5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjkwOlx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI5MS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTMtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5NDpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5NS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipOZXRsaW5rIHZzLiBpb2N0bDogQSBxdWljayBtZW50YWwgY2hlY2sqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgbmJkIGNvZGUuIFRoZSBgbmJkX2dlbmxfY29ubmVjdGAgZnVuY3Rpb24uLi4geWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgbmV0bGluayBjYWxsYmFjaywgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBtaW5kIGF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlcyB0aGF0IHdpdGggdGhlIGdlbmVyYWxpemVkIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIGhpZ2gtbGV2ZWwgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBOb3csIGxldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgbmJkX2lvY3RsYD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4gSXMgdGhhdCBhbm90aGVyIG5ldGxpbmsgZW50cnkgcG9pbnQsIG9yIGFyZSB3ZSB1c2luZyB0aGUgaW9jdGwgaW50ZXJmYWNlPyBUaGlzIG5lZWRzIGEgY2xvc2VyIGxvb2sgYmVjYXVzZSBJIHdhbnQgdG8gbWFwIHRoZSBjb2RlIGZ1bmN0aW9ucyB0byB0aGUgcmVzcGVjdGl2ZSBkcml2ZXIgbGF5ZXJzIGFuZCBlbnN1cmUgSSBoYXZlIG5vIHN1cnByaXNlcyBkdXJpbmcgZnV0dXJlIGNvZGUgcmV2aWV3cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTYyND1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzNDpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgyLVx0XHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwMy1cdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDQ6XHRcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDUtXHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMi1cdC5yZWxlYXNlID1cdG5iZF9yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOlx0LmlvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNDpcdC5jb21wYXRfaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVx0LmZyZWVfZGlzayA9XHRuYmRfZnJlZV9kaXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTkJEIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBOQkQgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcy4gSSBzZWUgYG5iZF9pb2N0bGAganVtcGluZyBvdXQgYXMgdGhlIHByaW1hcnkgaW9jdGwgaGFuZGxlciwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgdGhlIGxlZ2FjeSwgZGlyZWN0IGludGVyYWN0aW9uIG1ldGhvZCwgdXN1YWxseSBmb3IgdG9vbHMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBtb2Rlcm4gaW50ZXJmYWNlcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vcmUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEFoLCBoZXJlIGl0IGlzLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiBUaGlzIGlzIGEgbmV0bGluayBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vcmUgc29waGlzdGljYXRlZCwgcG9zc2libHkgYXN5bmNocm9ub3VzLCBhcHByb2FjaC4gVGltZSB0byBkaWcgaW50byBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgTkJEIGRyaXZlciBzdGF0ZXMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGFueSBzb3J0IG9mIGhvdC1wbHVnIG9yIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzZWUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjM0Nj1zdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzODE6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzgyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMy1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA0Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwNS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfaGFuZGxlX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xMTAxPXN0YXRpYyBpbnQgd2FpdF9mb3JfcmVjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTE2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTE3OnN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTE4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTExODQ9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjA2LVx0ICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyMDc6XHRyZXQgPSBuYmRfaGFuZGxlX2NtZChjbWQsIGhjdHgtXHUwMDNlcXVldWVfbnVtKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwOC1cdG11dGV4X3VubG9jayhcdTAwMjZjbWQtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9tcV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTkzMT1zdGF0aWMgaW50IG5iZF9pbml0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDAtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NDE6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDItXHQucXVldWVfcnFcdD0gbmJkX3F1ZXVlX3JxLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTk0OD1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTY0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTY1Olx0bmJkLVx1MDAzZXRhZ19zZXQub3BzID0gXHUwMDI2bmJkX21xX29wcztcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk2Ni1cdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkFuYWx5emluZyBOQkQmIzM5O3MgS2V5IENvbnRyb2wgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIE5CRCBkcml2ZXImIzM5O3MgY29udHJvbCBmbG93LCBhbmQgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGBuYmRfcXVldWVfcnFgLiBUaGF0IGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgYmxvY2sgbGF5ZXIgcXVldWUgcmVxdWVzdHMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgZGF0YSB0cmFuc2ZlciwgdGhlIGNyaXRpY2FsIHBpZWNlLiBOb3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIG9wZXJhdGVzLCBJIG5lZWQgdG8gbG9vayBhdCBvdGhlciBrZXkgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IG1hbmFnZSBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgY29ubmVjdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGBuYmRfaW9jdGxgLCB0aGF0IHNlZW1zIHJlbGV2YW50IGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSBsaWtlbHkgR2VubCAoR2VuZXJpYyBOZXRsaW5rKSBpbnRlcmZhY2VzLCBzbyBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QgdG8gcmV2aWV3LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBuZXRsaW5rIGNhbGxiYWNrcyBhcyB3ZWxsLiBUaGF0IHdpbGwgZmxlc2ggb3V0IGhvdyB0aGUgZHJpdmVyIHJlY2VpdmVzIHRob3NlIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYW5kIGNvbm5lY3Rpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1hcCBvZiB0aGVzZSBhcmVhcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzU9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc2OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzctc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMjc3PXN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzQ3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxMzQ4OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNDkte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjA5Mz1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5ODpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwOTkte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjExOS0gKi9cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMDpzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIxLVx0XHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCksXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYxLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NzpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2OC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjE4LVx0aWYgKCFuYmQpIHtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjIxOTpcdFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIE5VTEwsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjIwLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI0OS1cdHNldF9iaXQoTkJEX1JUX0JPVU5ELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyNTA6XHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjUxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyODktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyOTA6XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yMjkxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzMjU9c3RhdGljIHZvaWQgbmJkX2Rpc2Nvbm5lY3RfYW5kX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0NS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM0NjpzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0Ny17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzgwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzgxOnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM4Mi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDQzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDQ0Olx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ0NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDc3Olx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc4LVx0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5My1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk0Olx0XHQuZG9pdFx0PSBuYmRfZ2VubF9jb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDk1LVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTgtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5OTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfZGlzY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMC1cdH0sXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTAzLVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MDQ6XHRcdC5kb2l0XHQ9IG5iZF9nZW5sX3JlY29uZmlndXJlLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTA1LVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDgtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUwOTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfc3RhdHVzLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTEwLVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBuYmRfbWNhc3RfZ3Jwc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNi1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxNzpzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5iZF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTgtXHQuaGRyc2l6ZVx0PSAwLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjU2Mj1zdGF0aWMgaW50IHN0YXR1c19jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NjctXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Njg6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU2OS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTg4LVx0XHRnb3RvIG91dDtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU4OTpcdHJlcGx5X2hlYWQgPSBnZW5sbXNnX3B1dF9yZXBseShyZXBseSwgaW5mbywgXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkwLVx0XHRcdFx0ICAgICAgIE5CRF9DTURfU1RBVFVTKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2Mjg9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYzNi1cdFx0cmV0dXJuO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjM3Olx0bXNnX2hlYWQgPSBnZW5sbXNnX3B1dF9yZXBseShza2IsIGluZm8sIFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYzOC1cdFx0XHRcdCAgICAgTkJEX0NNRF9DT05ORUNUKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2NTI9c3RhdGljIHZvaWQgbmJkX21jYXN0X2luZGV4KGludCBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjAtXHRcdHJldHVybjtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY2MTpcdG1zZ19oZWFkID0gZ2VubG1zZ19wdXQoc2tiLCAwLCAwLCBcdTAwMjZuYmRfZ2VubF9mYW1pbHksIDAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjItXHRcdFx0XHQgICAgIE5CRF9DTURfTElOS19ERUFEKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NzItXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY3MzpcdGdlbmxtc2dfbXVsdGljYXN0KFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgc2tiLCAwLCAwLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY3NC19XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjg0PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzMwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzMxOlx0aWYgKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNm5iZF9nZW5sX2ZhbWlseSkpIHtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjczMi1cdFx0ZGVzdHJveV93b3JrcXVldWUobmJkX2RlbF93cSk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNzU5PXN0YXRpYyB2b2lkIF9fZXhpdCBuYmRfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc2Ny1cdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNzY4Olx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcdTAwMjZuYmRfZ2VubF9mYW1pbHkpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNzY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNZW50YWwgQ2hlY2tsaXN0IGZvciBOZXR3b3JrIEJsb2NrIERldmljZSBPcGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHJlZ2FyZGluZyB0aGUgY29yZSBmdW5jdGlvbnMgb2YgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIGRyaXZlci4gSSBzZWUgdGhhdCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfZ2VubF9kaXNjb25uZWN0YCwgYW5kIGBuYmRfZ2VubF9zdGF0dXNgIGFyZSB0aGUgbmV0bGluayBjYWxsYmFja3MuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHVzZXItc3BhY2UgY29tbXVuaWNhdGlvbiwgYW5kIEkgbmVlZCB0byBrZWVwIHRob3NlIHN0cmFpZ2h0LiBGdXJ0aGVybW9yZSwgYG5iZF9pb2N0bGAgaXMgdGhlIGlvY3RsIGNhbGxiYWNrIOKAkyB0aGF0IGhhbmRsZXMgdGhlIHN0YW5kYXJkIGRldmljZSBjb250cm9sIGludGVyYWN0aW9ucywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBjb25mdXNlIHRoYXQgd2l0aCB0aGUgb3RoZXJzLiBGaW5hbGx5LCBgbmJkX3F1ZXVlX3JxYCBpcyB0aGF0IGJsb2NrIGxheWVyIHJlcXVlc3QgY2FsbGJhY2ssIHdoaWNoIGlzIGhvdyB3ZSBhY3R1YWxseSBnZXQgdGhlIEkvTyBkb25lLgoKUmlnaHQuIEJlZm9yZSBJIGdldCBhbnkgZnVydGhlciBpbnRvIHRoZSB3ZWVkcywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQganVtcHMgdG8gbWluZCByaWdodCBub3cgaXMgYEJMS19ERVZfTkJEYC4gR29vZC4gTm93LCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QgdG8gYmUgZW5hYmxlZCB0byBoYXZlIHRoZSBkcml2ZXIgY29uZmlndXJlZC4gQnV0LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBuZWNlc3Nhcnkg4oCTIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhhdCBmbGFnIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHRob3JvdWdoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05CRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGVsdmluZyBpbnRvIHRoZSBgQkxLX0RFVl9OQkRgIERlZmluaXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcHJvYmxlbSwgSSBuZWVkIGEgcm9jay1zb2xpZCBkZWZpbml0aW9uIHRvIGJ1aWxkIG9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIGBCTEtfREVWX05CRGAuIE5vIGd1ZXNzd29yayBoZXJlOyBJIG5lZWQgdGhlIGZ1bGwsIGNhbm9uaWNhbCBleHBsYW5hdGlvbi4gSSBkb24mIzM5O3Qgd2FudCB0byByZWx5IG9uIHBvdGVudGlhbGx5IG91dGRhdGVkIGRvY3VtZW50YXRpb24gb3IgZnJhZ21lbnRlZCBzbmlwcGV0cy4gVGltZSB0byBwdWxsIHVwIHRoYXQgZGVmaW5pdGlvbiBhbmQgbWFrZSBzdXJlIEkmIzM5O20gc3RhcnRpbmcgb24gdGhlIHJpZ2h0IGZvb3Rpbmcgd2l0aCBhIHNvbGlkLCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBub3QgbWlzc2luZyBhbnl0aGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdGNvbmZpZyBCTEtfREVWX05CRFxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE5ODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcbiAyMDE6XHRcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcbiAyMDI6XHRcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxuIDIwMzpcdFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxuIDIwNDpcdFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xuIDIwNTpcdFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cbiAyMDg6XHRcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxuIDIwOTpcdFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXG4gMjEwOlx0XG4gMjExOlx0XHQgIFJlYWQgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L25iZC5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXG4gMjEyOlx0XHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxuIDIxMzpcdFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtcyBORlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGRlcGVuZGVuY3kgb24gYE5FVGAuIFNpbmNlIHdlJiMzOTtyZSBhc3N1bWluZyBhIG1pbmltYWwgY29uZmlndXJhdGlvbiwgaXQgc2VlbXMgbGlrZSBgQkxLX0RFVl9OQkRgIGlzIHRoZSBvbmx5IGNvbmZpZyB3ZSYjMzk7bGwgYmUgY29uY2VybmVkIHdpdGgsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHF1aXRlIGltcGFjdGZ1bCwgbW9kaWZ5aW5nIHNldmVyYWwgY29yZSBmdW5jdGlvbnM6IGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9jb25maWdfcHV0YCwgYW5kIGBuYmRfZGV2X2FkZGAuIFRoZXNlIGNoYW5nZXMgc3Ryb25nbHkgc3VnZ2VzdCBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSBOQkQgZHJpdmVyJiMzOTtzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSBoYXZlIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfZ2VubF9kaXNjb25uZWN0YCwgYW5kIGBuYmRfcXVldWVfcnFgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyBhdm9pZGluZyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgbWUgcGF1c2Ugb24gYG5iZF9xdWV1ZV9ycWAgc2luY2UgaXQmIzM5O3MgdGhlIGJsb2NrIGxheWVyIHJlcXVlc3QgcXVldWVpbmcgZnVuY3Rpb24sIGEgY2xlYXIgaG90IHBhdGguIEl0JiMzOTtzIGhhbmRsaW5nIHRoZSBjb3JlIG9mIGJsb2NrIEkvTy4KClNvLCBsZXQmIzM5O3MgcmUtZXZhbHVhdGUuIGBuYmRfaW9jdGxgIGlzIGEgZ29vZCBjaG9pY2U7IGl0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIgYW5kIG5vdCBhIGhvdCBwYXRoLiBTaW1pbGFybHksIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfZ2VubF9kaXNjb25uZWN0YCBhcmUgbmV0bGluayBoYW5kbGVycywgYWdhaW4sIG5vdCBob3QgcGF0aHMuIFdlIG5lZWQgdG8gZXhwbG9yZSBvdGhlciBlbnRyeSBwb2ludHMgdGhvdWdoLCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGV4cGxvcmVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4KClRoaW5raW5nIGFib3V0IG90aGVyIGVudHJ5IHBvaW50c+KApiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQmIzM5O3Mgbm90IGEgaG90IHBhdGg/IFdoYXQgYWJvdXQgYG5iZF9yZWxlYXNlYD8gSXQmIzM5O3MgdGhlIGJsb2NrIGRldmljZSByZWxlYXNlIGNhbGxiYWNrLCBhbiBpbnRlcmVzdGluZyBjaG9pY2UuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgaXQgYXMgYSBjYW5kaWRhdGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFscyBmb3IgZnVydGhlciBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ2PXN0YXRpYyBpbnQgbmJkX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3ODgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3ODk6c3RhdGljIHZvaWQgbmJkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTEtXHQub3BlbiA9XHRcdG5iZF9vcGVuLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEyOlx0LnJlbGVhc2UgPVx0bmJkX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTMtXHQuaW9jdGwgPVx0bmJkX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAyNgoJCQkJCQkJb3V0cHV0OiAxMTcKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOQkQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYG5iZF9yZWxlYXNlYCBhbmQgYG5iZF9vcGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aG9zZSBhcmUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIE5CRCBjb25uZWN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBjaGFuZ2VzIGBuYmRfY29uZmlnX3B1dGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBuYmRfcmVsZWFzZWAsIHNvIGBuYmRfcmVsZWFzZWAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGZvY3VzIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLgoKSSBhbHNvIG5vdGUgdGhhdCBgbmJkX2Rldl9hZGRgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBjYWxsZWQgYnkgYG5iZF9pbml0YCBhbmQgYG5iZF9nZW5sX2Nvbm5lY3RgLiBDb25zaWRlcmluZyB0aGF0LCBgbmJkX2dlbmxfY29ubmVjdGAgaXMgYSByZWxldmFudCBmb2N1cyBzeW1ib2wgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcHJpbWUgZW50cnkgcG9pbnRzIGludG8gdGhlIG1vZGlmaWVkIGNvZGU6IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBvZiBjb3Vyc2UsIGBuYmRfcmVsZWFzZWAuIFllcywgdGhlc2UgYWxsIGxvb2sgbGlrZSBnb29kIGVudHJ5IHBvaW50cyBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4KCkFsc28sIEkgc2hvdWxkIG5vdGUgdGhhdCBgQkxLX0RFVl9OQkRgIGlzIHRoZSByZWxldmFudCBjb25maWcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgdGhlIGZhbGxiYWNrIGxvZ2ljLCBxdWV1ZSBsaW1pdHMsIGFuZCByZWZhY3RvciBuZXRsaW5rIGNvbm5lY3Rpb24gaGFuZGxpbmcgd2l0aGluIHRoZSBOQkQgZHJpdmVyLiBUaGVzZSBhcmUgY2xlYXJseSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBpbXBhY3QgdGhlIGNvcmUgb3BlcmF0aW9uIG9mIGhvdyB0aGUgTkJEIGRyaXZlciBjb25uZWN0cywgY29uZmlndXJlcywgYW5kIGhhbmRsZXMgZGF0YS4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGxvZ2ljLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGVzc2VudGlhbHMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBmYWxsYmFjayBsb2dpYywgYWRqdXN0IHF1ZXVlIGxpbWl0cywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcmVhY2hhYmxlIGNvcmUgbG9naWMgb2YgdGhlIE5CRCBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyNzoxNi41MDA1NDUwMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTIwMTAyMDYxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjc6MTYuNTAwNTUwODIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc0ODMyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Mzc1ZGE2OGI1NGQ3NWIzMDU5MDUxYWQ4OWNmMjc0NjYyNWFmMzljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTQ6Mjc6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li5mZmNlNTE5YmYwMDg3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmJkX2RiZ19kaXI7XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XFxuIHN0YXRpYyBpbnQgbWF4X3BhcnQgPSAxNjtcXG4rc3RhdGljIGludCBwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyA9IDE7XFxuIHN0YXRpYyBpbnQgcGFydF9zaGlmdDtcXG4gXFxuIHN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcXG5AQCAtMzMxLDYgKzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuIFxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncylcXG4re1xcbitcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUEgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcXG4rXFx0bGltLVxcdTAwM2VtYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4rXFx0bGltLVxcdTAwM2VtYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9UUklNKVxcbitcXHRcXHRsaW0tXFx1MDAzZW1heF9od19kaXNjYXJkX3NlY3RvcnMgPSBVSU5UX01BWCBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcXG4rXFx0XFx0bGltLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9GVUEpXFxuK1xcdFxcdFxcdGxpbS1cXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfRlVBO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxcbitcXHRcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1JPVEFUSU9OQUw7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfV1JJVEVfWkVST0VTKVxcbitcXHRcXHRsaW0tXFx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG5AQCAtMzUyLDI2ICszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXHRpZiAobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9UUklNKVxcbi1cXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XFxuLVxcdGlmICghKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpKSB7XFxuLVxcdFxcdGxpbS5mZWF0dXJlcyBcXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBKTtcXG4tXFx0fSBlbHNlIGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOQkRfRkxBR19TRU5EX0ZVQSkge1xcbi1cXHRcXHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9GVUE7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcXG4tXFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH5CTEtfRkVBVF9GVUE7XFxuLVxcdH1cXG4tXFx0aWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXFxuLVxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xcbi1cXHRpZiAobmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkJEX0ZMQUdfU0VORF9XUklURV9aRVJPRVMpXFxuLVxcdFxcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSBVSU5UX01BWCBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuLVxcbitcXHRuYmRfYXBwbHlfbGltaXRzKFxcdTAwMjZsaW0sIG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyk7XFxuIFxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJsa3NpemU7XFxuLVxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbitcXHQvKiBObyBuZWVkIGZyZWV6ZSB3aXRoIDAgY2FwYWNpdHkgYW5kIHdyaXRlIGNhY2hlIGRpc2FibGVkICovXFxuK1xcdGlmICghZ2V0X2NhcGFjaXR5KG5iZC1cXHUwMDNlZGlzaykgXFx1MDAyNlxcdTAwMjYgIWJsa19xdWV1ZV93cml0ZV9jYWNoZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKSlcXG4rXFx0XFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbkBAIC0xMDYxLDQwICsxMDcwLDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXFxuIFxcdGludCBuZXdfaW5kZXggPSAtMTtcXG4gXFx0c3RydWN0IG5iZF9zb2NrICpuc29jayA9IGNvbmZpZy1cXHUwMDNlc29ja3NbaW5kZXhdO1xcbiBcXHRpbnQgZmFsbGJhY2sgPSBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXg7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KE5CRF9SVF9ESVNDT05ORUNURUQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbiBcXG4tXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpIHtcXG4tXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbi1cXHRcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuLVxcdH1cXG4rXFx0aWYgKGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwM2M9IDEpXFxuK1xcdFxcdGdvdG8gbm9fZmFsbGJhY2s7XFxuIFxcbiBcXHRpZiAoZmFsbGJhY2sgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBmYWxsYmFjayBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tmYWxsYmFja10tXFx1MDAzZWRlYWQpXFxuIFxcdFxcdHJldHVybiBmYWxsYmFjaztcXG4gXFxuLVxcdGlmIChuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzYyAwIHx8XFxuLVxcdCAgICBuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggXFx1MDAzZT0gY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMgfHxcXG4tXFx0ICAgIGNvbmZpZy1cXHUwMDNlc29ja3NbbnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4XS1cXHUwMDNlZGVhZCkge1xcbi1cXHRcXHRpbnQgaTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvbmZpZy1cXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKGkgPT0gaW5kZXgpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlc29ja3NbaV0tXFx1MDAzZWRlYWQpIHtcXG4tXFx0XFx0XFx0XFx0bmV3X2luZGV4ID0gaTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHRcXHRuc29jay1cXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XFxuLVxcdFxcdGlmIChuZXdfaW5kZXggXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVxcdTAwM2VkaXNrKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEZWFkIGNvbm5lY3Rpb24sIGZhaWxlZCB0byBmaW5kIGEgZmFsbGJhY2tcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gbmV3X2luZGV4O1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnM7IGkrKykge1xcbitcXHRcXHRpZiAoaSAhPSBpbmRleCBcXHUwMDI2XFx1MDAyNiAhY29uZmlnLVxcdTAwM2Vzb2Nrc1tpXS1cXHUwMDNlZGVhZCkge1xcbitcXHRcXHRcXHRuZXdfaW5kZXggPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdG5ld19pbmRleCA9IG5zb2NrLVxcdTAwM2VmYWxsYmFja19pbmRleDtcXG4rXFx0bnNvY2stXFx1MDAzZWZhbGxiYWNrX2luZGV4ID0gbmV3X2luZGV4O1xcbitcXHRpZiAobmV3X2luZGV4IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldHVybiBuZXdfaW5kZXg7XFxuK1xcbitub19mYWxsYmFjazpcXG4rXFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHQgICAgXFxcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcXFxuXFxcIik7XFxuIFxcdHJldHVybiBuZXdfaW5kZXg7XFxuIH1cXG4gXFxuQEAgLTEyODEsMjMgKzEyODEsMjMgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4gXFx0c3RydWN0IG5iZF9zb2NrICoqc29ja3M7XFxuIFxcdHN0cnVjdCBuYmRfc29jayAqbnNvY2s7XFxuLVxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qIEFyZyB3aWxsIGJlIGNhc3QgdG8gaW50LCBjaGVjayBpdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xcbiBcXHRpZiAoYXJnIFxcdTAwM2UgSU5UX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAobmJkLVxcdTAwM2VwaWQpIHtcXG4rXFx0XFx0ZGV2X2VycihkaXNrX3RvX2RldihuYmQtXFx1MDAzZWRpc2spLFxcbitcXHRcXHRcXHRcXFwiQ2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuIFxcdHNvY2sgPSBuYmRfZ2V0X3NvY2tldChuYmQsIGFyZywgXFx1MDAyNmVycik7XFxuIFxcdGlmICghc29jaylcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0bmJkX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBlcnJhbnQgcmVxdWVzdHMgd2hpbGUgd2UncmVcXG4tXFx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXFx1MDAzZXNvY2tzIGFycmF5Llxcbi1cXHQgKi9cXG4tXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbi1cXG4gXFx0aWYgKCFuZXRsaW5rIFxcdTAwMjZcXHUwMDI2ICFuYmQtXFx1MDAzZXRhc2tfc2V0dXAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICF0ZXN0X2JpdChOQkRfUlRfQk9VTkQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRuYmQtXFx1MDAzZXRhc2tfc2V0dXAgPSBjdXJyZW50O1xcbkBAIC0xMzM3LDE3ICsxMzM3LDE1IEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bnNvY2stXFx1MDAzZXdvcmssIG5iZF9wZW5kaW5nX2NtZF93b3JrKTtcXG4gXFx0c29ja3NbY29uZmlnLVxcdTAwM2VudW1fY29ubmVjdGlvbnMrK10gPSBuc29jaztcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2Y29uZmlnLVxcdTAwM2VsaXZlX2Nvbm5lY3Rpb25zKTtcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gcHV0X3NvY2tldDpcXG4tXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuIFxcdHN0cnVjdCBzb2NrZXQgKnNvY2ssICpvbGQ7XFxuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFxuIFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbmZpZy1cXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XFxuIFxcdFxcdHdha2VfdXAoXFx1MDAyNmNvbmZpZy1cXHUwMDNlY29ubl93YWl0KTtcXG4rXFx0XFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcXFwicmVjb25uZWN0ZWQgc29ja2V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0c29ja2ZkX3B1dChzb2NrKTtcXG4gXFx0a2ZyZWUoYXJncyk7XFxuLVxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5AQCAtMTQ3MSw4ICsxNDcwLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX3JlZnMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZuYmQtXFx1MDAzZWNvbmZpZ19sb2NrKSkge1xcbiBcXHRcXHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVxcdTAwM2Vjb25maWc7XFxuK1xcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRcXHRuYmRfZGV2X2RiZ19jbG9zZShuYmQpO1xcbiBcXHRcXHRpbnZhbGlkYXRlX2Rpc2sobmJkLVxcdTAwM2VkaXNrKTtcXG4rXFx0XFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cXG4rXFx0XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4rXFx0XFx0bmJkX2FwcGx5X2xpbWl0cyhcXHUwMDI2bGltLCAwKTtcXG4rXFx0XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuIFxcdFxcdGlmIChuYmQtXFx1MDAzZWNvbmZpZy1cXHUwMDNlYnl0ZXNpemUpXFxuIFxcdFxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZuYmRfdG9fZGV2KG5iZCktXFx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcXG4gXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX1BJRF9GSUxFLFxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG4gXFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXFxuK3N0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXFxuIHtcXG4gXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuIFxcdFxcdC5tYXhfaHdfc2VjdG9yc1xcdFxcdD0gNjU1MzYsXFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuLVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbitcXHRuYmQtXFx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gbnJfaHdfcXVldWVzO1xcbiBcXHRuYmQtXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSAxMjg7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdG5iZC1cXHUwMDNldGFnX3NldC5jbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmJkX2NtZCk7XFxuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZkcyB3YWxrZWQsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbitcXHRcXHRpbnQgKCpjYikoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZCksXFxuK1xcdFxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuK3tcXG4rXFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4rXFx0aW50IHJlbSwgY291bnQgPSAwO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLCByZW0pIHtcXG4rXFx0XFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYICsgMV07XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGF0dHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG5iZF9zb2NrX3BvbGljeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZXh0YWNrKSkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghc29ja3NbTkJEX1NPQ0tfRkRdKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGNvdW50Kys7XFxuK1xcdFxcdGlmIChjYikge1xcbitcXHRcXHRcXHRyZXQgPSBjYihuYmQsIChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKVxcbit7XFxuK1xcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGZkLCB0cnVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZDtcXG5AQCAtMjE1OSw3ICsyMjE2LDExIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZF9pbmRleF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoIW5iZCkge1xcbi1cXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMik7XFxuK1xcdFxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRuYmQgPSBuYmRfZGV2X2FkZChpbmRleCwgMiwgcmV0IFxcdTAwM2UgMCA/IHJldCA6IDEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKG5iZCkpIHtcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuYmQpO1xcbkBAIC0yMjI2LDM2ICsyMjg3LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XFxuLVxcdFxcdHN0cnVjdCBubGF0dHIgKmF0dHI7XFxuLVxcdFxcdGludCByZW0sIGZkO1xcbi1cXG4tXFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSxcXG4tXFx0XFx0XFx0XFx0ICAgIHJlbSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzb2Nrc1tOQkRfU09DS19NQVgrMV07XFxuLVxcbi1cXHRcXHRcXHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmJkX3NvY2tfcG9saWN5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdFxcdGlmIChyZXQgIT0gMCkge1xcbi1cXHRcXHRcXHRcXHRwcl9lcnIoXFxcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG4tXFx0XFx0XFx0cmV0ID0gbmJkX2FkZF9zb2NrZXQobmJkLCBmZCwgdHJ1ZSk7XFxuLVxcdFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JBQ0tFTkRfSURFTlRJRklFUl0pIHtcXG4gXFx0XFx0bmJkLVxcdTAwM2ViYWNrZW5kID0gbmxhX3N0cmR1cChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxcbkBAIC0yNDQwLDQwICsyNDc0LDEwIEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10pIHtcXG4tXFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4tXFx0XFx0aW50IHJlbSwgZmQ7XFxuLVxcbi1cXHRcXHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxcbi1cXHRcXHRcXHRcXHQgICAgcmVtKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBuYmRfc29ja19wb2xpY3ksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tXFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2VycihcXFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xcbi1cXHRcXHRcXHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9TUEMpXFxuLVxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXFxcInJlY29ubmVjdGVkIHNvY2tldFxcXFxuXFxcIik7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuK1xcdC8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gMDtcXG4gb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnX2xvY2spO1xcbiBcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcbkBAIC0yNzA5LDYgKzI3MTMsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4gXFx0aWYgKG5iZHNfbWF4IFxcdTAwM2UgMVVMIFxcdTAwM2NcXHUwMDNjIChNSU5PUkJJVFMgLSBwYXJ0X3NoaWZ0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHQvKiBBbiBleGNlc3NpdmVseSBsYXJnZSB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIGluIGJsa19tcV9hbGxvY190YWdfc2V0ICovXFxuK1xcdGlmIChwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyBtdXN0IGJlIFxcdTAwM2U9IDFcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHJlZ2lzdGVyX2Jsa2RldihOQkRfTUFKT1IsIFxcXCJuYmRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbkBAIC0yNzI1LDggKzI3MzUsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4gXFx0fVxcbiBcXHRuYmRfZGJnX2luaXQoKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCB0byB0aGUgaW50ZW5kZWQgY29ubmVjdGlvbiBjb3VudCBzbyBuYmRfc3RhcnRfZGV2aWNlKCkgY2FuIHNraXBcXG4rXFx0ICogdGhlIHF1ZXVlLWZyZWV6aW5nIGJsa19tcV91cGRhdGVfbnJfaHdfcXVldWVzKCkgY2FsbC5cXG4rXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuYmRzX21heDsgaSsrKVxcbi1cXHRcXHRuYmRfZGV2X2FkZChpLCAxKTtcXG4rXFx0XFx0bmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjc4NywzICsyODAxLDYgQEAgbW9kdWxlX3BhcmFtKG5iZHNfbWF4LCBpbnQsIDA0NDQpO1xcbiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcXFwibnVtYmVyIG9mIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyB0byBpbml0aWFsaXplIChkZWZhdWx0OiAxNilcXFwiKTtcXG4gbW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcXFwibnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGRldmljZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuK21vZHVsZV9wYXJhbShwcmVfZGVmaW5lZF9jb25uZWN0aW9ucywgaW50LCAwNDQ0KTtcXG4rTU9EVUxFX1BBUk1fREVTQyhwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyxcXG4rXFxcIm51bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSlcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjc6MTYuOTU4NzMyOTQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzExNTUyMDA5Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBmYWxsYmFjayBsb2dpYywgYWRqdXN0IHF1ZXVlIGxpbWl0cywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcmVhY2hhYmxlIGNvcmUgbG9naWMgb2YgdGhlIE5CRCBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgzNzVkYTY4YjU0ZDc1YjMwNTkwNTFhZDg5Y2YyNzQ2NjI1YWYzOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjI3OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmZmY2U1MTliZjAwODcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuYmRfZGJnX2RpcjtcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IG5iZHNfbWF4ID0gMTY7XG4gc3RhdGljIGludCBtYXhfcGFydCA9IDE2O1xuK3N0YXRpYyBpbnQgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMgPSAxO1xuIHN0YXRpYyBpbnQgcGFydF9zaGlmdDtcbiBcbiBzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCk7XG5AQCAtMzMxLDYgKzMzMiwyNiBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmJkX2FwcGx5X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sIHUzMiBmbGFncylcbit7XG4rXHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfRlVBIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4rXHRsaW0tXHUwMDNlbWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4rXHRsaW0tXHUwMDNlbWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9UUklNKVxuK1x0XHRsaW0tXHUwMDNlbWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRkxVU0gpIHtcbitcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKVxuK1x0XHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1JPVEFUSU9OQUwpXG4rXHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbitcdFx0bGltLVx1MDAzZW1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG5AQCAtMzUyLDI2ICszNzMsMTQgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1RSSU0pXG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVggXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGVsc2Vcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0aWYgKCEobmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyBcdTAwMjYgTkJEX0ZMQUdfU0VORF9GTFVTSCkpIHtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQSk7XG4tXHR9IGVsc2UgaWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfRlVBKSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX0ZVQTtcbi1cdH0gZWxzZSB7XG4tXHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbi1cdFx0bGltLmZlYXR1cmVzIFx1MDAyNj0gfkJMS19GRUFUX0ZVQTtcbi1cdH1cbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19ST1RBVElPTkFMKVxuLVx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcbi1cdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBOQkRfRkxBR19TRU5EX1dSSVRFX1pFUk9FUylcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IFVJTlRfTUFYIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXG4rXHRuYmRfYXBwbHlfbGltaXRzKFx1MDAyNmxpbSwgbmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbi1cdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuK1x0LyogTm8gbmVlZCBmcmVlemUgd2l0aCAwIGNhcGFjaXR5IGFuZCB3cml0ZSBjYWNoZSBkaXNhYmxlZCAqL1xuK1x0aWYgKCFnZXRfY2FwYWNpdHkobmJkLVx1MDAzZWRpc2spIFx1MDAyNlx1MDAyNiAhYmxrX3F1ZXVlX3dyaXRlX2NhY2hlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKSlcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbitcdGVsc2VcbitcdFx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC0xMDYxLDQwICsxMDcwLDMxIEBAIHN0YXRpYyBpbnQgZmluZF9mYWxsYmFjayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBpbnQgaW5kZXgpXG4gXHRpbnQgbmV3X2luZGV4ID0gLTE7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrID0gY29uZmlnLVx1MDAzZXNvY2tzW2luZGV4XTtcbiBcdGludCBmYWxsYmFjayA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuK1x0aW50IGk7XG4gXG4gXHRpZiAodGVzdF9iaXQoTkJEX1JUX0RJU0NPTk5FQ1RFRCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRyZXR1cm4gbmV3X2luZGV4O1xuIFxuLVx0aWYgKGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDNjPSAxKSB7XG4tXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuLVx0XHRcdFx0ICAgIFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCIpO1xuLVx0XHRyZXR1cm4gbmV3X2luZGV4O1xuLVx0fVxuK1x0aWYgKGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDNjPSAxKVxuK1x0XHRnb3RvIG5vX2ZhbGxiYWNrO1xuIFxuIFx0aWYgKGZhbGxiYWNrIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmFsbGJhY2sgXHUwMDNjIGNvbmZpZy1cdTAwM2VudW1fY29ubmVjdGlvbnMgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWNvbmZpZy1cdTAwM2Vzb2Nrc1tmYWxsYmFja10tXHUwMDNlZGVhZClcbiBcdFx0cmV0dXJuIGZhbGxiYWNrO1xuIFxuLVx0aWYgKG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4IFx1MDAzYyAwIHx8XG4tXHQgICAgbnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggXHUwMDNlPSBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zIHx8XG4tXHQgICAgY29uZmlnLVx1MDAzZXNvY2tzW25zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4XS1cdTAwM2VkZWFkKSB7XG4tXHRcdGludCBpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcbi1cdFx0XHRpZiAoaSA9PSBpbmRleClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGlmICghY29uZmlnLVx1MDAzZXNvY2tzW2ldLVx1MDAzZWRlYWQpIHtcbi1cdFx0XHRcdG5ld19pbmRleCA9IGk7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0bnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XG4tXHRcdGlmIChuZXdfaW5kZXggXHUwMDNjIDApIHtcbi1cdFx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbi1cdFx0XHRcdFx0ICAgIFwiRGVhZCBjb25uZWN0aW9uLCBmYWlsZWQgdG8gZmluZCBhIGZhbGxiYWNrXFxuXCIpO1xuLVx0XHRcdHJldHVybiBuZXdfaW5kZXg7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb25maWctXHUwMDNlbnVtX2Nvbm5lY3Rpb25zOyBpKyspIHtcbitcdFx0aWYgKGkgIT0gaW5kZXggXHUwMDI2XHUwMDI2ICFjb25maWctXHUwMDNlc29ja3NbaV0tXHUwMDNlZGVhZCkge1xuK1x0XHRcdG5ld19pbmRleCA9IGk7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbi1cdG5ld19pbmRleCA9IG5zb2NrLVx1MDAzZWZhbGxiYWNrX2luZGV4O1xuK1x0bnNvY2stXHUwMDNlZmFsbGJhY2tfaW5kZXggPSBuZXdfaW5kZXg7XG4rXHRpZiAobmV3X2luZGV4IFx1MDAzZT0gMClcbitcdFx0cmV0dXJuIG5ld19pbmRleDtcbitcbitub19mYWxsYmFjazpcbitcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuK1x0XHRcdCAgICBcIkRlYWQgY29ubmVjdGlvbiwgZmFpbGVkIHRvIGZpbmQgYSBmYWxsYmFja1xcblwiKTtcbiBcdHJldHVybiBuZXdfaW5kZXg7XG4gfVxuIFxuQEAgLTEyODEsMjMgKzEyODEsMjMgQEAgc3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gXHRzdHJ1Y3QgbmJkX3NvY2sgKipzb2NrcztcbiBcdHN0cnVjdCBuYmRfc29jayAqbnNvY2s7XG4tXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogQXJnIHdpbGwgYmUgY2FzdCB0byBpbnQsIGNoZWNrIGl0IHRvIGF2b2lkIG92ZXJmbG93ICovXG4gXHRpZiAoYXJnIFx1MDAzZSBJTlRfTUFYKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChuYmQtXHUwMDNlcGlkKSB7XG4rXHRcdGRldl9lcnIoZGlza190b19kZXYobmJkLVx1MDAzZWRpc2spLFxuK1x0XHRcdFwiQ2Fubm90IGFkZCBzb2NrZXQgdG8gYSBydW5uaW5nIGRldmljZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcbiBcdHNvY2sgPSBuYmRfZ2V0X3NvY2tldChuYmQsIGFyZywgXHUwMDI2ZXJyKTtcbiBcdGlmICghc29jaylcbiBcdFx0cmV0dXJuIGVycjtcbiBcdG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzb2NrKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW55IGVycmFudCByZXF1ZXN0cyB3aGlsZSB3ZSdyZVxuLVx0ICogcmVhbGxvY2F0aW5nIHRoZSAtXHUwMDNlc29ja3MgYXJyYXkuXG4tXHQgKi9cbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4tXG4gXHRpZiAoIW5ldGxpbmsgXHUwMDI2XHUwMDI2ICFuYmQtXHUwMDNldGFza19zZXR1cCBcdTAwMjZcdTAwMjZcbiBcdCAgICAhdGVzdF9iaXQoTkJEX1JUX0JPVU5ELCBcdTAwMjZjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdG5iZC1cdTAwM2V0YXNrX3NldHVwID0gY3VycmVudDtcbkBAIC0xMzM3LDE3ICsxMzM3LDE1IEBAIHN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXG4gXHRJTklUX1dPUksoXHUwMDI2bnNvY2stXHUwMDNld29yaywgbmJkX3BlbmRpbmdfY21kX3dvcmspO1xuIFx0c29ja3NbY29uZmlnLVx1MDAzZW51bV9jb25uZWN0aW9ucysrXSA9IG5zb2NrO1xuIFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuIHB1dF9zb2NrZXQ6XG4tXHRibGtfbXFfdW5mcmVlemVfcXVldWUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIG1lbWZsYWdzKTtcbiBcdHNvY2tmZF9wdXQoc29jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuIFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cdTAwM2Vjb25maWc7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAqb2xkO1xuQEAgLTE0MDIsMTEgKzE0MDAsMTIgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcbiBcdFx0YXRvbWljX2luYyhcdTAwMjZjb25maWctXHUwMDNlbGl2ZV9jb25uZWN0aW9ucyk7XG4gXHRcdHdha2VfdXAoXHUwMDI2Y29uZmlnLVx1MDAzZWNvbm5fd2FpdCk7XG4rXHRcdGRldl9pbmZvKG5iZF90b19kZXYobmJkKSwgXCJyZWNvbm5lY3RlZCBzb2NrZXRcXG5cIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0c29ja2ZkX3B1dChzb2NrKTtcbiBcdGtmcmVlKGFyZ3MpO1xuLVx0cmV0dXJuIC1FTk9TUEM7XG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmJkX2JkZXZfcmVzZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbkBAIC0xNDcxLDggKzE0NzAsMTMgQEAgc3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX211dGV4X2xvY2soXHUwMDI2bmJkLVx1MDAzZWNvbmZpZ19yZWZzLFxuIFx0XHRcdFx0XHRcdTAwMjZuYmQtXHUwMDNlY29uZmlnX2xvY2spKSB7XG4gXHRcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuK1x0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdFx0bmJkX2Rldl9kYmdfY2xvc2UobmJkKTtcbiBcdFx0aW52YWxpZGF0ZV9kaXNrKG5iZC1cdTAwM2VkaXNrKTtcbitcdFx0LyogcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQgKi9cbitcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4rXHRcdG5iZF9hcHBseV9saW1pdHMoXHUwMDI2bGltLCAwKTtcbitcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRcdGlmIChuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplKVxuIFx0XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19QSURfRklMRSxcbkBAIC0xOTQxLDcgKzE5NDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcbiBcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgKm5iZF9kZXZfYWRkKGludCBpbmRleCwgdW5zaWduZWQgaW50IHJlZnMpXG4rc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxuK1x0XHRcdFx0ICAgICAgIGludCBucl9od19xdWV1ZXMpXG4ge1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4gXHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDY1NTM2LFxuQEAgLTE5NTgsNyArMTk2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkX2Rldl9hZGQoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgcmVmcylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuYmQtXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZuYmRfbXFfb3BzO1xuLVx0bmJkLVx1MDAzZXRhZ19zZXQubnJfaHdfcXVldWVzID0gMTtcbitcdG5iZC1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG5yX2h3X3F1ZXVlcztcbiBcdG5iZC1cdTAwM2V0YWdfc2V0LnF1ZXVlX2RlcHRoID0gMTI4O1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0bmJkLVx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG5iZF9jbWQpO1xuQEAgLTIxMDcsNiArMjExMiw1OCBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBXYWxrIHRoZSBOQkRfQVRUUl9TT0NLRVRTIG5lc3RlZCBsaXN0IGNhbiBjYWxsIEBjYiBmb3IgZWFjaCBzb2NrZXQgZmQuXG4rICpcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmZHMgd2Fsa2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKSxcbitcdFx0c3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbit7XG4rXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuK1x0aW50IHJlbSwgY291bnQgPSAwO1xuK1xuK1x0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSwgcmVtKSB7XG4rXHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCArIDFdO1xuK1x0XHRpbnQgcmV0O1xuK1xuK1x0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuK1x0XHRcdHByX2VycihcInNvY2tzIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBTT0NLX0lURU0gYXR0clxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHNvY2tzLCBOQkRfU09DS19NQVgsXG4rXHRcdFx0XHRcdFx0YXR0cixcbitcdFx0XHRcdFx0XHRuYmRfc29ja19wb2xpY3ksXG4rXHRcdFx0XHRcdFx0aW5mby1cdTAwM2VleHRhY2spKSB7XG4rXHRcdFx0cHJfZXJyKFwiZXJyb3IgcHJvY2Vzc2luZyBzb2NrIGxpc3RcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGNvdW50Kys7XG4rXHRcdGlmIChjYikge1xuK1x0XHRcdHJldCA9IGNiKG5iZCwgKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0cmV0dXJuIGNvdW50O1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXG4re1xuK1x0cmV0dXJuIG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuQEAgLTIxNTksNyArMjIxNiwxMSBAQCBzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmRfaW5kZXhfbXV0ZXgpO1xuIFxuIFx0aWYgKCFuYmQpIHtcbi1cdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIpO1xuK1x0XHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0bmJkID0gbmJkX2Rldl9hZGQoaW5kZXgsIDIsIHJldCBcdTAwM2UgMCA/IHJldCA6IDEpO1xuIFx0XHRpZiAoSVNfRVJSKG5iZCkpIHtcbiBcdFx0XHRwcl9lcnIoXCJmYWlsZWQgdG8gYWRkIG5ldyBkZXZpY2VcXG5cIik7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIobmJkKTtcbkBAIC0yMjI2LDM2ICsyMjg3LDkgQEAgc3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdKSB7XG4tXHRcdHN0cnVjdCBubGF0dHIgKmF0dHI7XG4tXHRcdGludCByZW0sIGZkO1xuLVxuLVx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU09DS0VUU10sXG4tXHRcdFx0XHQgICAgcmVtKSB7XG4tXHRcdFx0c3RydWN0IG5sYXR0ciAqc29ja3NbTkJEX1NPQ0tfTUFYKzFdO1xuLVxuLVx0XHRcdGlmIChubGFfdHlwZShhdHRyKSAhPSBOQkRfU09DS19JVEVNKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJzb2NrcyBtdXN0IGJlIGVtYmVkZGVkIGluIGEgU09DS19JVEVNIGF0dHJcXG5cIik7XG4tXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZChzb2NrcywgTkJEX1NPQ0tfTUFYLFxuLVx0XHRcdFx0XHRcdFx0ICBhdHRyLFxuLVx0XHRcdFx0XHRcdFx0ICBuYmRfc29ja19wb2xpY3ksXG4tXHRcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlZXh0YWNrKTtcbi1cdFx0XHRpZiAocmV0ICE9IDApIHtcbi1cdFx0XHRcdHByX2VycihcImVycm9yIHByb2Nlc3Npbmcgc29jayBsaXN0XFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoIXNvY2tzW05CRF9TT0NLX0ZEXSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdGZkID0gKGludClubGFfZ2V0X3UzMihzb2Nrc1tOQkRfU09DS19GRF0pO1xuLVx0XHRcdHJldCA9IG5iZF9hZGRfc29ja2V0KG5iZCwgZmQsIHRydWUpO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuK1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkFDS0VORF9JREVOVElGSUVSXSkge1xuIFx0XHRuYmQtXHUwMDNlYmFja2VuZCA9IG5sYV9zdHJkdXAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CQUNLRU5EX0lERU5USUZJRVJdLFxuQEAgLTI0NDAsNDAgKzI0NzQsMTAgQEAgc3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9TT0NLRVRTXSkge1xuLVx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLVx0XHRpbnQgcmVtLCBmZDtcbi1cbi1cdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NPQ0tFVFNdLFxuLVx0XHRcdFx0ICAgIHJlbSkge1xuLVx0XHRcdHN0cnVjdCBubGF0dHIgKnNvY2tzW05CRF9TT0NLX01BWCsxXTtcbi1cbi1cdFx0XHRpZiAobmxhX3R5cGUoYXR0cikgIT0gTkJEX1NPQ0tfSVRFTSkge1xuLVx0XHRcdFx0cHJfZXJyKFwic29ja3MgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIFNPQ0tfSVRFTSBhdHRyXFxuXCIpO1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoc29ja3MsIE5CRF9TT0NLX01BWCxcbi1cdFx0XHRcdFx0XHRcdCAgYXR0cixcbi1cdFx0XHRcdFx0XHRcdCAgbmJkX3NvY2tfcG9saWN5LFxuLVx0XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdFx0aWYgKHJldCAhPSAwKSB7XG4tXHRcdFx0XHRwcl9lcnIoXCJlcnJvciBwcm9jZXNzaW5nIHNvY2sgbGlzdFxcblwiKTtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKCFzb2Nrc1tOQkRfU09DS19GRF0pXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbi1cdFx0XHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRpZiAocmV0ID09IC1FTk9TUEMpXG4tXHRcdFx0XHRcdHJldCA9IDA7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXHRcdFx0ZGV2X2luZm8obmJkX3RvX2RldihuYmQpLCBcInJlY29ubmVjdGVkIHNvY2tldFxcblwiKTtcbi1cdFx0fVxuLVx0fVxuK1x0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xuK1x0LyogZm9yZWFjaF9zb2NrIHJldHVybnMgYSBwb3NpdGl2ZSBjb3VudCBvbiBzdWNjZXNzOyBkb2l0IG11c3QgcmV0dXJuIDAgKi9cbitcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRyZXQgPSAwO1xuIG91dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuYmQtXHUwMDNlY29uZmlnX2xvY2spO1xuIFx0bmJkX2NvbmZpZ19wdXQobmJkKTtcbkBAIC0yNzA5LDYgKzI3MTMsMTIgQEAgc3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbiBcdGlmIChuYmRzX21heCBcdTAwM2UgMVVMIFx1MDAzY1x1MDAzYyAoTUlOT1JCSVRTIC0gcGFydF9zaGlmdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogQW4gZXhjZXNzaXZlbHkgbGFyZ2UgdmFsdWUgd2lsbCBiZSBhZGp1c3RlZCBpbiBibGtfbXFfYWxsb2NfdGFnX3NldCAqL1xuK1x0aWYgKHByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIFx1MDAzYyAxKSB7XG4rXHRcdHByX2VycihcInByZV9kZWZpbmVkX2Nvbm5lY3Rpb25zIG11c3QgYmUgXHUwMDNlPSAxXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChyZWdpc3Rlcl9ibGtkZXYoTkJEX01BSk9SLCBcIm5iZFwiKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5AQCAtMjcyNSw4ICsyNzM1LDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXG4gXHR9XG4gXHRuYmRfZGJnX2luaXQoKTtcbiBcbitcdC8qXG4rXHQgKiBTZXQgdG8gdGhlIGludGVuZGVkIGNvbm5lY3Rpb24gY291bnQgc28gbmJkX3N0YXJ0X2RldmljZSgpIGNhbiBza2lwXG4rXHQgKiB0aGUgcXVldWUtZnJlZXppbmcgYmxrX21xX3VwZGF0ZV9ucl9od19xdWV1ZXMoKSBjYWxsLlxuK1x0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYmRzX21heDsgaSsrKVxuLVx0XHRuYmRfZGV2X2FkZChpLCAxKTtcbitcdFx0bmJkX2Rldl9hZGQoaSwgMSwgcHJlX2RlZmluZWRfY29ubmVjdGlvbnMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI3ODcsMyArMjgwMSw2IEBAIG1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXCIpO1xuIG1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVwiKTtcbittb2R1bGVfcGFyYW0ocHJlX2RlZmluZWRfY29ubmVjdGlvbnMsIGludCwgMDQ0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhwcmVfZGVmaW5lZF9jb25uZWN0aW9ucyxcbitcIm51bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgZGV2aWNlcyBwcmUtY3JlYXRlZCBhdCBtb2R1bGUgbG9hZCAoZGVmYXVsdDogMSlcIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyNzoxNi45NTg3MzQzNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUxODY4OTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOQkQgRHJpdmVyIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBJdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzLCBzbyBsZXQncyBicmVhayBpdCBkb3duLiBGaXJzdCwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBwcmVfZGVmaW5lZF9jb25uZWN0aW9uc2AsIGFuZCBtb2RpZnlpbmcgYG5iZF9kZXZfYWRkYCB0byBoYW5kbGUgYG5yX2h3X3F1ZXVlc2AuIFRoaXMgc3VnZ2VzdHMgc29tZSBlbmhhbmNlbWVudHMgdG8gaG93IE5CRCBjb25uZWN0aW9ucyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHBvc3NpYmx5IGhvdyBoYXJkd2FyZSBxdWV1ZWluZyBpcyBtYW5hZ2VkLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuVGhlIHJlZmFjdG9yaW5nIG9mIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCB0byB1c2UgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AgaXMgaW50ZXJlc3RpbmcuIFRoYXQncyBwcm9iYWJseSBhaW1lZCBhdCBtYWtpbmcgdGhlIGdlbmVyaWMgbmV0bGluayBjb2RlIG1vcmUgbWFpbnRhaW5hYmxlIGFuZCBsZXNzIHJlZHVuZGFudC4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZS5cblxuVGhlIGNoYW5nZSBpbiBgbmJkX2FkZF9zb2NrZXRgIHRvIHJlamVjdCBzb2NrZXQgYWRkaXRpb25zIHRvIGEgcnVubmluZyBkZXZpY2UgKGNoZWNraW5nIGBuYmQtXHUwMDNlcGlkYCkgaXMgYSBzYWZldHkgbWVhc3VyZS4gSXQncyBsaWtlbHkgaW50ZW5kZWQgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gb3IgaW5zdGFiaWxpdHkgYnkgcHJldmVudGluZyBtb2RpZmljYXRpb24gb2YgY29ubmVjdGlvbnMgb24gYSBydW5uaW5nIGRldmljZS4gU21hcnQuXG5cblRoZW4gdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gYG5iZF9zZXRfc2l6ZWAgdG8gdXNlIGBuYmRfYXBwbHlfbGltaXRzYCBhbmQgY29uZGl0aW9uYWxseSBmcmVlemUgdGhlIHF1ZXVlLCBhbmQgYWxzbyBjaGFuZ2VzIHRvIGBuYmRfY29uZmlnX3B1dGAgdG8gcmVzZXQgcXVldWUgbGltaXRzIHRvIGRlZmF1bHQsIHdoaWNoIGFwcGVhciB0byByZWZpbmUgdGhlIHNpemUgYW5kIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBhc3BlY3RzIG9mIHRoZSBkZXZpY2UuIFRoaXMgcHJvYmFibHkgYWltcyB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIGd1YXJhbnRlZSBzZW5zaWJsZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG5cbkZpbmFsbHksIGEgZml4IHRvIGBmaW5kX2ZhbGxiYWNrYCB0byBpbXByb3ZlIHRoZSBmYWxsYmFjayBsb2dpYy4gQWx3YXlzIHdlbGNvbWUuXG5cbk92ZXJhbGwsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIE5CRCBkcml2ZXIsIGFuZCBpdCBpcyBhIGtub3duIGFuZCByZWFjaGFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIHNob3VsZCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIE5CRCB0byBzZWUgaWYgYW55IG5ldyBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQgdGhhdCBuZWVkIG1vcmUgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI3OjMxLjQ3NzQyNTk0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU1ODk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9OQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjc6MzEuNTE5OTg4ODQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwOTgyNDM1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfTkJEYC4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIHdpbGwgaW1wYWN0IHRoZSBvdmVyYWxsIE5CRCBmdW5jdGlvbmFsaXR5LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBmdW5jdGlvbnM6IGBuYmRfYXBwbHlfbGltaXRzYCwgYG5iZF9zZXRfc2l6ZWAsIGBmaW5kX2ZhbGxiYWNrYCwgYG5iZF9hZGRfc29ja2V0YCwgYG5iZF9nZW5sX3JlY29ubmVjdF9zb2NrX2NiYCwgYG5iZF9iZGV2X3Jlc2V0YCwgYG5iZF9jb25maWdfcHV0YCwgYG5iZF9kZXZfYWRkYCwgYG5iZF9nZW5sX3NpemVfc2V0YCwgYG5iZF9nZW5sX2ZvcmVhY2hfc29ja2AsIGBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2JgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBmaW5hbGx5LCB0aGUgYG5iZF9pbml0YCBmdW5jdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiB0aGV5J3JlIGFsbCAqc3RhdGljKi4gVGhhdOKAmXMgZ29pbmcgdG8gbWFrZSB0aGlzIG1vcmUgY2hhbGxlbmdpbmcuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKnVzZWQqIC0gc3BlY2lmaWNhbGx5LCBhcmUgdGhleSBjYWxsZWQgZnJvbSBhbnkgbm9uLXN0YXRpYywgZXhwb3NlZCBBUEkgZW50cnkgcG9pbnRzPyBPciBhcmUgdGhleSByZWdpc3RlcmVkIGFzIGNhbGxiYWNrcyBzb21ld2hlcmU/IEkgaGF2ZSB0byBsb29rIGZvciB1cHN0cmVhbSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5IbW0sIG9rYXksIGFmdGVyIGEgcXVpY2sgZ2xhbmNlLCBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXBwZWFyIHRvIGJlIE5ldGxpbmsgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaG93IHRoZXnigJlyZSByZWdpc3RlcmVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gYGRyaXZlcnMvYmxvY2svbmJkLmNgIHRvIGlkZW50aWZ5IGhvdyB0aGVzZSBOZXRsaW5rIGNhbGxiYWNrcyBhcmUgaG9va2VkIHVwLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHRoZSBvdGhlciBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI3OjUyLjYxODI0MzcwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yMTIwPXN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjEtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTYyOnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgZmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTYzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2Ni1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjc6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI4OS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIyOTA6XFx0cmV0ID0gbmJkX2dlbmxfZm9yZWFjaF9zb2NrKGluZm8sIG5iZF9nZW5sX2Nvbm5lY3Rfc29ja19jYiwgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyOTEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDkzLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0OTQ6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDk1LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI3OjUyLjY5ODI4MTAxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2ODUzNDk3NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqTmV0bGluayB2cy4gaW9jdGw6IEEgcXVpY2sgbWVudGFsIGNoZWNrKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBuYmQgY29kZS4gVGhlIGBuYmRfZ2VubF9jb25uZWN0YCBmdW5jdGlvbi4uLiB5ZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIG5ldGxpbmsgY2FsbGJhY2ssIG5vIHN1cnByaXNlcyB0aGVyZS4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IGFzc29jaWF0ZXMgdGhhdCB3aXRoIHRoZSBnZW5lcmFsaXplZCBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBoaWdoLWxldmVsIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gTm93LCBsZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgbmJkX2lvY3RsYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJcyB0aGF0IGFub3RoZXIgbmV0bGluayBlbnRyeSBwb2ludCwgb3IgYXJlIHdlIHVzaW5nIHRoZSBpb2N0bCBpbnRlcmZhY2U/IFRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vayBiZWNhdXNlIEkgd2FudCB0byBtYXAgdGhlIGNvZGUgZnVuY3Rpb25zIHRvIHRoZSByZXNwZWN0aXZlIGRyaXZlciBsYXllcnMgYW5kIGVuc3VyZSBJIGhhdmUgbm8gc3VycHJpc2VzIGR1cmluZyBmdXR1cmUgY29kZSByZXZpZXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6MDkuNTUxNzgxMTQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODE0OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTYyND1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjMzLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzNDpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjM1LVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4Mi1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAzLVxcdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA0OlxcdFxcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA1LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMi1cXHQucmVsZWFzZSA9XFx0bmJkX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEzOlxcdC5pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNDpcXHQuY29tcGF0X2lvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVxcdC5mcmVlX2Rpc2sgPVxcdG5iZF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI4OjA5LjU5NjYwMDI5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk5Njk0NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOQkQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBOQkQgZHJpdmVyJ3MgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zLiBJIHNlZSBgbmJkX2lvY3RsYCBqdW1waW5nIG91dCBhcyB0aGUgcHJpbWFyeSBpb2N0bCBoYW5kbGVyLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhhdCdzIHRoZSBsZWdhY3ksIGRpcmVjdCBpbnRlcmFjdGlvbiBtZXRob2QsIHVzdWFsbHkgZm9yIHRvb2xzIHRoYXQgaGF2ZW4ndCBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBtb2Rlcm4gaW50ZXJmYWNlcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vcmUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEFoLCBoZXJlIGl0IGlzLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiBUaGlzIGlzIGEgbmV0bGluayBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgc2lnbmFscyBhIG1vcmUgc29waGlzdGljYXRlZCwgcG9zc2libHkgYXN5bmNocm9ub3VzLCBhcHByb2FjaC4gVGltZSB0byBkaWcgaW50byBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFuZCBzZWUgd2hhdCBpdCdzIGRvaW5nLiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIE5CRCBkcml2ZXIgc3RhdGVzLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGFueSBzb3J0IG9mIGhvdC1wbHVnIG9yIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkuIExldCdzIHNlZSBpZiBteSBodW5jaCBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6NDEuNTk2Mjk4Nzc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTk0OTI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2dlbmxfcmVjb25maWd1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTIzNDY9c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzgxOnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMy1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA0OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6NDEuOTE1ODIyMTQ1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTg2Nzc2MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTAyOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjg6NTkuOTAyNjAwNzkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk2NzEwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2hhbmRsZV9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTExMDE9c3RhdGljIGludCB3YWl0X2Zvcl9yZWNvbm5lY3Qoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTExNi1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjExMTc6c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfaGFuZGxlX2NtZChzdHJ1Y3QgbmJkX2NtZCAqY21kLCBpbnQgaW5kZXgpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTE4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTE4ND1zdGF0aWMgYmxrX3N0YXR1c190IG5iZF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwNi1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyMDc6XFx0cmV0ID0gbmJkX2hhbmRsZV9jbWQoY21kLCBoY3R4LVxcdTAwM2VxdWV1ZV9udW0pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwOC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmNtZC1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI5OjAwLjAzMjI3NzY4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMxNjA3NDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNzk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6Mjk6MTEuMzQ4MzU1NDU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIxNDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfbXFfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xOTMxPXN0YXRpYyBpbnQgbmJkX2luaXRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTQwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk0MTpzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbmJkX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDItXFx0LnF1ZXVlX3JxXFx0PSBuYmRfcXVldWVfcnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDg9c3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlICpuYmRfZGV2X2FkZChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCByZWZzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTY0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk2NTpcXHRuYmQtXFx1MDAzZXRhZ19zZXQub3BzID0gXFx1MDAyNm5iZF9tcV9vcHM7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTY2LVxcdG5iZC1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSBucl9od19xdWV1ZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI5OjExLjM5NTU3MzM1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTU4MzA4ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgTkJEJ3MgS2V5IENvbnRyb2wgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBOQkQgZHJpdmVyJ3MgY29udHJvbCBmbG93LCBhbmQgSSdtIHplcm9pbmcgaW4gb24gYG5iZF9xdWV1ZV9ycWAuIFRoYXQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBibG9jayBsYXllciBxdWV1ZSByZXF1ZXN0cy4gVGhhdCdzIHRoZSBjb3JlIG9mIGRhdGEgdHJhbnNmZXIsIHRoZSBjcml0aWNhbCBwaWVjZS4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBvcGVyYXRlcywgSSBuZWVkIHRvIGxvb2sgYXQgb3RoZXIga2V5IGZ1bmN0aW9ucyB0aGF0IGxpa2VseSBtYW5hZ2UgZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbm5lY3Rpb24uIExldCdzIHNlZS4uLiB3aGF0IGFib3V0IGBuYmRfaW9jdGxgLCB0aGF0IHNlZW1zIHJlbGV2YW50IGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGVuIHRoZXJlIGFyZSBsaWtlbHkgR2VubCAoR2VuZXJpYyBOZXRsaW5rKSBpbnRlcmZhY2VzLCBzbyBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QgdG8gcmV2aWV3LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBuZXRsaW5rIGNhbGxiYWNrcyBhcyB3ZWxsLiBUaGF0IHdpbGwgZmxlc2ggb3V0IGhvdyB0aGUgZHJpdmVyIHJlY2VpdmVzIHRob3NlIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYW5kIGNvbm5lY3Rpb25zLiBJdCdzIHRpbWUgdG8gYnVpbGQgYSBzb2xpZCBtZW50YWwgbWFwIG9mIHRoZXNlIGFyZWFzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGFsbCBoYW5ncyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyOToyNi45Nzg2NjM2NDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTYwNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9nZW5sX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTc1PXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzY6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzctc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzc9c3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEzNDg6c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbm5lY3Rfc29ja19jYihzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNDkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yMDkzPW5iZF9kZXZpY2VfcG9saWN5W05CRF9ERVZJQ0VfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIwOTg6c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMTktICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTIwOnN0YXRpYyBpbnQgbmJkX2dlbmxfZm9yZWFjaF9zb2NrKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIxLVxcdFxcdGludCAoKmNiKShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGZkKSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE2MS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNjI6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0X3NvY2tfY2Ioc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBmZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTY2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjE2NzpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjE4LVxcdGlmICghbmJkKSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjE5OlxcdFxcdHJldCA9IG5iZF9nZW5sX2ZvcmVhY2hfc29jayhpbmZvLCBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyMjAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyNDktXFx0c2V0X2JpdChOQkRfUlRfQk9VTkQsIFxcdTAwMjZjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjI1MDpcXHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI1MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjg5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjI5MDpcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfY29ubmVjdF9zb2NrX2NiLCBuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjI5MS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjMyNT1zdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzQ2OnN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzgxOnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzODIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDQzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ0NDpcXHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ0NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ3NzpcXHRyZXQgPSBuYmRfZ2VubF9mb3JlYWNoX3NvY2soaW5mbywgbmJkX2dlbmxfcmVjb25uZWN0X3NvY2tfY2IsIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDc4LVxcdC8qIGZvcmVhY2hfc29jayByZXR1cm5zIGEgcG9zaXRpdmUgY291bnQgb24gc3VjY2VzczsgZG9pdCBtdXN0IHJldHVybiAwICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI0OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBuYmRfY29ubmVjdF9nZW5sX29wc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDkzLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0OTQ6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDk1LVxcdH0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTgtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5OTpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfZGlzY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDAtXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwMy1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA0OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9yZWNvbmZpZ3VyZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MDUtXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUwOC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTA5OlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9zdGF0dXMsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTEwLVxcdH0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBuYmRfbWNhc3RfZ3Jwc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE2LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxNzpzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5iZF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE4LVxcdC5oZHJzaXplXFx0PSAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTYyPXN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTY3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU2ODpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU2OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1ODgtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTg5OlxcdHJlcGx5X2hlYWQgPSBnZW5sbXNnX3B1dF9yZXBseShyZXBseSwgaW5mbywgXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1OTAtXFx0XFx0XFx0XFx0ICAgICAgIE5CRF9DTURfU1RBVFVTKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjYyOD1zdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MzYtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjYzNzpcXHRtc2dfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHNrYiwgaW5mbywgXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MzgtXFx0XFx0XFx0XFx0ICAgICBOQkRfQ01EX0NPTk5FQ1QpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjUyPXN0YXRpYyB2b2lkIG5iZF9tY2FzdF9pbmRleChpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjAtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjY2MTpcXHRtc2dfaGVhZCA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgMCwgXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NjItXFx0XFx0XFx0XFx0ICAgICBOQkRfQ01EX0xJTktfREVBRCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2NzItXFx0Z2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjczOlxcdGdlbmxtc2dfbXVsdGljYXN0KFxcdTAwMjZuYmRfZ2VubF9mYW1pbHksIHNrYiwgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjc0LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjY4ND1zdGF0aWMgaW50IF9faW5pdCBuYmRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzMwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjczMTpcXHRpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSkpIHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3MzItXFx0XFx0ZGVzdHJveV93b3JrcXVldWUobmJkX2RlbF93cSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3NTk9c3RhdGljIHZvaWQgX19leGl0IG5iZF9jbGVhbnVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NjctXFx0ICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzY4OlxcdGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyOToyNy4wMjIyMjk4NDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MDUxNDQyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIENoZWNrbGlzdCBmb3IgTmV0d29yayBCbG9jayBEZXZpY2UgT3BlcmF0aW9uKipcblxuT2theSwgc28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0IGhlcmUgcmVnYXJkaW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyBvZiB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBJIHNlZSB0aGF0IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AgYXJlIHRoZSBuZXRsaW5rIGNhbGxiYWNrcy4gVGhhdCdzIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSB1c2VyLXNwYWNlIGNvbW11bmljYXRpb24sIGFuZCBJIG5lZWQgdG8ga2VlcCB0aG9zZSBzdHJhaWdodC4gRnVydGhlcm1vcmUsIGBuYmRfaW9jdGxgIGlzIHRoZSBpb2N0bCBjYWxsYmFjayDigJMgdGhhdCBoYW5kbGVzIHRoZSBzdGFuZGFyZCBkZXZpY2UgY29udHJvbCBpbnRlcmFjdGlvbnMsIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24ndCBjb25mdXNlIHRoYXQgd2l0aCB0aGUgb3RoZXJzLiBGaW5hbGx5LCBgbmJkX3F1ZXVlX3JxYCBpcyB0aGF0IGJsb2NrIGxheWVyIHJlcXVlc3QgY2FsbGJhY2ssIHdoaWNoIGlzIGhvdyB3ZSBhY3R1YWxseSBnZXQgdGhlIEkvTyBkb25lLlxuXG5SaWdodC4gQmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyIGludG8gdGhlIHdlZWRzLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBUaGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gdGhhdCBqdW1wcyB0byBtaW5kIHJpZ2h0IG5vdyBpcyBgQkxLX0RFVl9OQkRgLiBHb29kLiBOb3csIHRoYXQncyB3aGF0IEkgZXhwZWN0IHRvIGJlIGVuYWJsZWQgdG8gaGF2ZSB0aGUgZHJpdmVyIGNvbmZpZ3VyZWQuIEJ1dCwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgbmVjZXNzYXJ5IOKAkyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoYXQgZmxhZyBvciBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjI5OjU5LjcyNzM3NjYwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3Njc2NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDoyOTo1OS45NTUwNTkxOTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NTE2ODQ0NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBgQkxLX0RFVl9OQkRgIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLCBJIG5lZWQgYSByb2NrLXNvbGlkIGRlZmluaXRpb24gdG8gYnVpbGQgb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgYEJMS19ERVZfTkJEYC4gTm8gZ3Vlc3N3b3JrIGhlcmU7IEkgbmVlZCB0aGUgZnVsbCwgY2Fub25pY2FsIGV4cGxhbmF0aW9uLiBJIGRvbid0IHdhbnQgdG8gcmVseSBvbiBwb3RlbnRpYWxseSBvdXRkYXRlZCBkb2N1bWVudGF0aW9uIG9yIGZyYWdtZW50ZWQgc25pcHBldHMuIFRpbWUgdG8gcHVsbCB1cCB0aGF0IGRlZmluaXRpb24gYW5kIG1ha2Ugc3VyZSBJJ20gc3RhcnRpbmcgb24gdGhlIHJpZ2h0IGZvb3Rpbmcgd2l0aCBhIHNvbGlkLCBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgYXJlIG5vdCBtaXNzaW5nIGFueXRoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMxOjQ1LjQ3MTkwNzExOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk2OlxcdGNvbmZpZyBCTEtfREVWX05CRFxcbiAxOTc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE5ODpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAxOTk6XFx0XFx0aGVscFxcbiAyMDA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xcbiAyMDE6XFx0XFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxcbiAyMDI6XFx0XFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXFxuIDIwMzpcXHRcXHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XFxuIDIwNDpcXHRcXHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXFxuIDIwNTpcXHRcXHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHQgIE5ldHdvcmsgYmxvY2sgZGV2aWNlcyBhbHNvIGFsbG93cyB5b3UgdG8gcnVuIGEgYmxvY2stZGV2aWNlIGluXFxuIDIwODpcXHRcXHQgIHVzZXJsYW5kIChtYWtpbmcgc2VydmVyIGFuZCBjbGllbnQgcGh5c2ljYWxseSB0aGUgc2FtZSBjb21wdXRlcixcXG4gMjA5OlxcdFxcdCAgY29tbXVuaWNhdGluZyB1c2luZyB0aGUgbG9vcGJhY2sgbmV0d29yayBkZXZpY2UpLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHQgIFJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi9uYmQucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbixcXG4gMjEyOlxcdFxcdCAgZXNwZWNpYWxseSBhYm91dCB3aGVyZSB0byBmaW5kIHRoZSBzZXJ2ZXIgY29kZSwgd2hpY2ggcnVucyBpbiB1c2VyXFxuIDIxMzpcXHRcXHQgIHNwYWNlIGFuZCBkb2VzIG5vdCBuZWVkIHNwZWNpYWwga2VybmVsIHN1cHBvcnQuXFxuIDIxNDpcXHRcXG4gMjE1OlxcdFxcdCAgTm90ZSB0aGF0IHRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgbmV0d29yayBmaWxlIHN5c3RlbXMgTkZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMxOjQ1LjQ3MTk3NzU3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTkyMTkzOTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQkQgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGRlcGVuZGVuY3kgb24gYE5FVGAuIFNpbmNlIHdlJ3JlIGFzc3VtaW5nIGEgbWluaW1hbCBjb25maWd1cmF0aW9uLCBpdCBzZWVtcyBsaWtlIGBCTEtfREVWX05CRGAgaXMgdGhlIG9ubHkgY29uZmlnIHdlJ2xsIGJlIGNvbmNlcm5lZCB3aXRoLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHF1aXRlIGltcGFjdGZ1bCwgbW9kaWZ5aW5nIHNldmVyYWwgY29yZSBmdW5jdGlvbnM6IGBuYmRfYWRkX3NvY2tldGAsIGBuYmRfc2V0X3NpemVgLCBgZmluZF9mYWxsYmFja2AsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9jb25maWdfcHV0YCwgYW5kIGBuYmRfZGV2X2FkZGAuIFRoZXNlIGNoYW5nZXMgc3Ryb25nbHkgc3VnZ2VzdCBhIHNpZ25pZmljYW50IHNoaWZ0IGluIHRoZSBOQkQgZHJpdmVyJ3MgZnVuY3Rpb25hbCBiZWhhdmlvci4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSBoYXZlIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGBuYmRfZ2VubF9kaXNjb25uZWN0YCwgYW5kIGBuYmRfcXVldWVfcnFgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyBhdm9pZGluZyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgbWUgcGF1c2Ugb24gYG5iZF9xdWV1ZV9ycWAgc2luY2UgaXQncyB0aGUgYmxvY2sgbGF5ZXIgcmVxdWVzdCBxdWV1ZWluZyBmdW5jdGlvbiwgYSBjbGVhciBob3QgcGF0aC4gSXQncyBoYW5kbGluZyB0aGUgY29yZSBvZiBibG9jayBJL08uXG5cblNvLCBsZXQncyByZS1ldmFsdWF0ZS4gYG5iZF9pb2N0bGAgaXMgYSBnb29kIGNob2ljZTsgaXQncyBhbiBpb2N0bCBoYW5kbGVyIGFuZCBub3QgYSBob3QgcGF0aC4gU2ltaWxhcmx5LCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIG5ldGxpbmsgaGFuZGxlcnMsIGFnYWluLCBub3QgaG90IHBhdGhzLiBXZSBuZWVkIHRvIGV4cGxvcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRob3VnaCwgdG8gbWFrZSBzdXJlIHdlJ3ZlIGV4cGxvcmVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS5cblxuVGhpbmtpbmcgYWJvdXQgb3RoZXIgZW50cnkgcG9pbnRz4oCmIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCdzIG5vdCBhIGhvdCBwYXRoPyBXaGF0IGFib3V0IGBuYmRfcmVsZWFzZWA/IEl0J3MgdGhlIGJsb2NrIGRldmljZSByZWxlYXNlIGNhbGxiYWNrLCBhbiBpbnRlcmVzdGluZyBjaG9pY2UuIEknbSBsZWFuaW5nIHRvd2FyZCBpdCBhcyBhIGNhbmRpZGF0ZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGludGVybmFscyBmb3IgZnVydGhlciBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk4OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMyOjA3LjM5MzkxOTM5N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4OTI5NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ2PXN0YXRpYyBpbnQgbmJkX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc4OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3ODk6c3RhdGljIHZvaWQgbmJkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzkwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxMS1cXHQub3BlbiA9XFx0XFx0bmJkX29wZW4sXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODEyOlxcdC5yZWxlYXNlID1cXHRuYmRfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTMtXFx0LmlvY3RsID1cXHRuYmRfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjMyOjA3Ljc3Mjg1NDcxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDY2MjMzNjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5CRCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgZHJpdmVyLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYG5iZF9yZWxlYXNlYCBhbmQgYG5iZF9vcGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aG9zZSBhcmUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgbGlmZWN5Y2xlIG9mIGFuIE5CRCBjb25uZWN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBjaGFuZ2VzIGBuYmRfY29uZmlnX3B1dGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBuYmRfcmVsZWFzZWAsIHNvIGBuYmRfcmVsZWFzZWAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIGZvY3VzIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLlxuXG5JIGFsc28gbm90ZSB0aGF0IGBuYmRfZGV2X2FkZGAgaXMgbW9kaWZpZWQsIHdoaWNoIGlzIGNhbGxlZCBieSBgbmJkX2luaXRgIGFuZCBgbmJkX2dlbmxfY29ubmVjdGAuIENvbnNpZGVyaW5nIHRoYXQsIGBuYmRfZ2VubF9jb25uZWN0YCBpcyBhIHJlbGV2YW50IGZvY3VzIHN5bWJvbCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgcHJpbWUgZW50cnkgcG9pbnRzIGludG8gdGhlIG1vZGlmaWVkIGNvZGU6IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBvZiBjb3Vyc2UsIGBuYmRfcmVsZWFzZWAuIFllcywgdGhlc2UgYWxsIGxvb2sgbGlrZSBnb29kIGVudHJ5IHBvaW50cyBnaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC5cblxuQWxzbywgSSBzaG91bGQgbm90ZSB0aGF0IGBCTEtfREVWX05CRGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoZSBmYWxsYmFjayBsb2dpYywgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIGRyaXZlci4gVGhlc2UgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgaW1wYWN0IHRoZSBjb3JlIG9wZXJhdGlvbiBvZiBob3cgdGhlIE5CRCBkcml2ZXIgY29ubmVjdHMsIGNvbmZpZ3VyZXMsIGFuZCBoYW5kbGVzIGRhdGEuIEknbSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGxvZ2ljLlxuXG5BbHJpZ2h0LCB0aGF0IGNvdmVycyB0aGUgZXNzZW50aWFscy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAyNiwiT3V0cHV0VG9rZW5zIjoxMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6MzI6MjguNDM1MTkzODg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1NDYwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiLFxuICAgIFwibmJkX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIGZpeCBmYWxsYmFjayBsb2dpYywgYWRqdXN0IHF1ZXVlIGxpbWl0cywgYW5kIHJlZmFjdG9yIG5ldGxpbmsgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgcmVhY2hhYmxlIGNvcmUgbG9naWMgb2YgdGhlIE5CRCBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gZml4IGZhbGxiYWNrIGxvZ2ljLCBhZGp1c3QgcXVldWUgbGltaXRzLCBhbmQgcmVmYWN0b3IgbmV0bGluayBjb25uZWN0aW9uIGhhbmRsaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSByZWFjaGFibGUgY29yZSBsb2dpYyBvZiB0aGUgTkJEIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[1] Phase: Succeeded StartedAt: 2026-08-05 14:32:39 +0000 UTC FinishedAt: 2026-08-05 14:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 14:32:39 +0000 UTC FinishedAt: 2026-08-05 14:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2] Phase: Succeeded StartedAt: 2026-08-05 14:32:39 +0000 UTC FinishedAt: 2026-08-05 18:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 14:32:39 +0000 UTC FinishedAt: 2026-08-05 18:13:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 14:32:39 +0000 UTC FinishedAt: 2026-08-05 14:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 14:32:39 +0000 UTC FinishedAt: 2026-08-05 14:32:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4vs4v/series-workflow4vs4v-convert-artifact-4234321093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 14:32:49 +0000 UTC FinishedAt: 2026-08-05 14:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 14:32:49 +0000 UTC FinishedAt: 2026-08-05 14:49:01 +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:*4bae1a52-b0da-498d-924d-b7f149bd71bc,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-workflow4vs4v/series-workflow4vs4v-convert-artifact-4234321093/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": "2f9e6678-ce43-46e6-a4a8-8f4ed677ac13", "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-workflow4vs4v/series-workflow4vs4v-build-action-2741191531/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 14:32:49 +0000 UTC FinishedAt: 2026-08-05 14:48:51 +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:*4bae1a52-b0da-498d-924d-b7f149bd71bc,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-workflow4vs4v/series-workflow4vs4v-convert-artifact-4234321093/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": "2f9e6678-ce43-46e6-a4a8-8f4ed677ac13", "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-workflow4vs4v/series-workflow4vs4v-build-action-2741191531/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 14:49:01 +0000 UTC FinishedAt: 2026-08-05 14:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 14:49:01 +0000 UTC FinishedAt: 2026-08-05 14:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 14:49:01 +0000 UTC FinishedAt: 2026-08-05 14:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 14:49:01 +0000 UTC FinishedAt: 2026-08-05 14:49:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4vs4v/series-workflow4vs4v-convert-artifact-3045372320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 14:49:12 +0000 UTC FinishedAt: 2026-08-05 14:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 14:49:12 +0000 UTC FinishedAt: 2026-08-05 14:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f9e6678-ce43-46e6-a4a8-8f4ed677ac13,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-workflow4vs4v/series-workflow4vs4v-build-action-2741191531/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-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 14:51:28 +0000 UTC FinishedAt: 2026-08-05 14:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 14:51:28 +0000 UTC FinishedAt: 2026-08-05 14:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 14:51:28 +0000 UTC FinishedAt: 2026-08-05 15:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 14:51:28 +0000 UTC FinishedAt: 2026-08-05 15:08:00 +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:*4bae1a52-b0da-498d-924d-b7f149bd71bc,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-workflow4vs4v/series-workflow4vs4v-convert-artifact-3045372320/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": "b9f398de-a63b-408e-860d-763296c08edc", "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-workflow4vs4v/series-workflow4vs4v-build-action-3718621020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 14:51:28 +0000 UTC FinishedAt: 2026-08-05 15:07:50 +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:*4bae1a52-b0da-498d-924d-b7f149bd71bc,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-workflow4vs4v/series-workflow4vs4v-convert-artifact-3045372320/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": "b9f398de-a63b-408e-860d-763296c08edc", "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-workflow4vs4v/series-workflow4vs4v-build-action-3718621020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 15:08:00 +0000 UTC FinishedAt: 2026-08-05 15:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 15:08:00 +0000 UTC FinishedAt: 2026-08-05 15:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 15:08:00 +0000 UTC FinishedAt: 2026-08-05 15:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 15:08:00 +0000 UTC FinishedAt: 2026-08-05 15:10:02 +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:*b9f398de-a63b-408e-860d-763296c08edc,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-workflow4vs4v/series-workflow4vs4v-build-action-3718621020/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-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 15:10:12 +0000 UTC FinishedAt: 2026-08-05 18:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 15:10:12 +0000 UTC FinishedAt: 2026-08-05 18:13:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"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:*2f9e6678-ce43-46e6-a4a8-8f4ed677ac13,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9f398de-a63b-408e-860d-763296c08edc,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-workflow4vs4v/series-workflow4vs4v-build-action-2741191531/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-workflow4vs4v/series-workflow4vs4v-build-action-3718621020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 15:10:12 +0000 UTC FinishedAt: 2026-08-05 15:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 15:10:12 +0000 UTC FinishedAt: 2026-08-05 15:10:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"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-workflow4vs4v/series-workflow4vs4v-convert-artifact-61215481/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 15:10:12 +0000 UTC FinishedAt: 2026-08-05 15:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 15:10:12 +0000 UTC FinishedAt: 2026-08-05 15:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 15:10:12 +0000 UTC FinishedAt: 2026-08-05 15:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 15:10:43 +0000 UTC FinishedAt: 2026-08-05 18:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vs4v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"34a7668036335998a9458c620bca441aa57a3095","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"a8be7713-2dde-4e4e-8d0c-930a912b2c4c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 15:10:43 +0000 UTC FinishedAt: 2026-08-05 18:13:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f9e6678-ce43-46e6-a4a8-8f4ed677ac13,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9f398de-a63b-408e-860d-763296c08edc,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-workflow4vs4v/series-workflow4vs4v-build-action-2741191531/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-workflow4vs4v/series-workflow4vs4v-build-action-3718621020/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-workflow4vs4v/series-workflow4vs4v-convert-artifact-61215481/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,}